summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2022-08-24 03:01:23 +0000
committerNorbert Preining <norbert@preining.info>2022-08-24 03:01:23 +0000
commit2fcb60fa8843870d9f3a90987498e5b775402258 (patch)
tree7db6e32b73c582239b1080a4c5272c8ec51c21d5
parent0fab672d8f0c2d456fafd111ea77c2123075d653 (diff)
CTAN sync 202208240301
-rw-r--r--FILES.byname1242
-rw-r--r--FILES.byname.gzbin2448350 -> 2450776 bytes
-rw-r--r--FILES.last07days941
-rw-r--r--biblio/biber-ms/base/README.md51
-rw-r--r--biblio/biber-ms/base/documentation/Changes522
-rw-r--r--biblio/biber-ms/base/documentation/biber-ms.pdfbin0 -> 263753 bytes
-rw-r--r--biblio/biber-ms/base/documentation/utf8-macro-map.html66
-rw-r--r--biblio/biber-ms/biber-ms-linux/README4
-rw-r--r--biblio/biber-ms/biber-ms-macos/README4
-rw-r--r--biblio/biber-ms/biber-ms-windows/README4
-rw-r--r--graphics/pstricks/contrib/pst-barcode/Changes80
-rw-r--r--graphics/pstricks/contrib/pst-barcode/doc/images/barcode.jpgbin0 -> 143137 bytes
-rw-r--r--graphics/pstricks/contrib/pst-barcode/doc/images/datamatrix-4.eps389
-rw-r--r--graphics/pstricks/contrib/pst-barcode/doc/images/dotcode-1.eps427
-rw-r--r--graphics/pstricks/contrib/pst-barcode/doc/images/gs1dotcode-1.eps769
-rw-r--r--graphics/pstricks/contrib/pst-barcode/doc/images/gs1northamericancoupon-1.eps494
-rw-r--r--graphics/pstricks/contrib/pst-barcode/doc/images/swissqrcode-1.eps1834
-rw-r--r--graphics/pstricks/contrib/pst-barcode/doc/images/ultracode-1.eps230
-rw-r--r--graphics/pstricks/contrib/pst-barcode/doc/pst-barcode-doc.ltx27
-rw-r--r--graphics/pstricks/contrib/pst-barcode/doc/pst-barcode-doc.pdfbin1234227 -> 1225072 bytes
-rw-r--r--graphics/pstricks/contrib/pst-barcode/doc/pst-barcode-doc.tex2835
-rw-r--r--graphics/pstricks/contrib/pst-barcode/dvips/pst-barcode.pro16527
-rw-r--r--graphics/pstricks/contrib/pst-barcode/latex/pst-barcode.sty6
-rw-r--r--graphics/pstricks/contrib/pst-barcode/tex/pst-barcode.tex6
-rw-r--r--macros/latex/contrib/beamer-contrib/beamerswitch/README.md2
-rw-r--r--macros/latex/contrib/beamer-contrib/beamerswitch/beamerswitch-example-article.pdfbin20112 -> 20110 bytes
-rw-r--r--macros/latex/contrib/beamer-contrib/beamerswitch/beamerswitch-example-handout.pdfbin22397 -> 22397 bytes
-rw-r--r--macros/latex/contrib/beamer-contrib/beamerswitch/beamerswitch-example-trans.pdfbin22998 -> 22994 bytes
-rw-r--r--macros/latex/contrib/beamer-contrib/beamerswitch/beamerswitch-example.pdfbin36629 -> 36621 bytes
-rw-r--r--macros/latex/contrib/beamer-contrib/beamerswitch/beamerswitch.dtx76
-rw-r--r--macros/latex/contrib/beamer-contrib/beamerswitch/beamerswitch.pdfbin200906 -> 208134 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/CHANGES-ms.md983
-rw-r--r--macros/latex/contrib/biblatex-ms/README165
-rw-r--r--macros/latex/contrib/biblatex-ms/biber/bltxml/biblatex-examples-ms.bltxml2840
-rw-r--r--macros/latex/contrib/biblatex-ms/bibtex/bib/biblatex/biblatex-examples-ms.bib1661
-rw-r--r--macros/latex/contrib/biblatex-ms/bibtex/bst/biblatex-ms.bst2831
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/biblatex-ms.pdfbin0 -> 1770072 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/biblatex-ms.tex17269
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/01-introduction-biber-ms.pdfbin0 -> 167962 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/01-introduction-bibtex-ms.pdfbin0 -> 167962 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/01-introduction-ms.tex170
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/01-introduction.run-ms.xml93
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/02-annotations-biber-ms.pdfbin0 -> 214456 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/02-annotations-bibtex-ms.pdfbin0 -> 207478 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/02-annotations-ms.tex18
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/03-localization-keys-biber-ms.pdfbin0 -> 254414 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/03-localization-keys-bibtex-ms.pdfbin0 -> 253881 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/03-localization-keys-ms.tex725
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/04-delimiters-biber-ms.pdfbin0 -> 80156 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/04-delimiters-bibtex-ms.pdfbin0 -> 80152 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/04-delimiters-ms.tex68
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/10-references-per-section-biber-ms.pdfbin0 -> 81705 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/10-references-per-section-bibtex-ms.pdfbin0 -> 81705 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/10-references-per-section-ms.tex64
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/11-references-by-section-biber-ms.pdfbin0 -> 98395 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/11-references-by-section-bibtex-ms.pdfbin0 -> 98390 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/11-references-by-section-ms.tex68
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/12-references-by-segment-biber-ms.pdfbin0 -> 98442 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/12-references-by-segment-bibtex-ms.pdfbin0 -> 98437 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/12-references-by-segment-ms.tex49
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/13-references-by-keyword-biber-ms.pdfbin0 -> 183623 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/13-references-by-keyword-bibtex-ms.pdfbin0 -> 175130 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/13-references-by-keyword-ms.tex44
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/14-references-by-category-biber-ms.pdfbin0 -> 183127 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/14-references-by-category-bibtex-ms.pdfbin0 -> 174634 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/14-references-by-category-ms.tex46
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/15-references-by-type-biber-ms.pdfbin0 -> 119269 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/15-references-by-type-bibtex-ms.pdfbin0 -> 119269 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/15-references-by-type-ms.tex26
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/16-numeric-prefixed-1-biber-ms.pdfbin0 -> 163360 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/16-numeric-prefixed-1-bibtex-ms.pdfbin0 -> 156540 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/16-numeric-prefixed-1-ms.tex58
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/17-numeric-prefixed-2-biber-ms.pdfbin0 -> 163329 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/17-numeric-prefixed-2-bibtex-ms.pdfbin0 -> 156540 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/17-numeric-prefixed-2-ms.tex45
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/18-numeric-hybrid-biber-ms.pdfbin0 -> 112916 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/18-numeric-hybrid-bibtex-ms.pdfbin0 -> 112916 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/18-numeric-hybrid-ms.tex87
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/19-alphabetic-prefixed-biber-ms.pdfbin0 -> 163973 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/19-alphabetic-prefixed-bibtex-ms.pdfbin0 -> 157616 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/19-alphabetic-prefixed-ms.tex47
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/20-indexing-single-biber-ms.pdfbin0 -> 176169 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/20-indexing-single-bibtex-ms.pdfbin0 -> 169812 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/20-indexing-single-ms.tex75
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/21-indexing-multiple-biber-ms.pdfbin0 -> 177358 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/21-indexing-multiple-bibtex-ms.pdfbin0 -> 171031 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/21-indexing-multiple-ms.tex151
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/22-indexing-subentry-biber-ms.pdfbin0 -> 88905 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/22-indexing-subentry-bibtex-ms.pdfbin0 -> 88905 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/22-indexing-subentry-ms.tex103
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/30-style-numeric-biber-ms.pdfbin0 -> 177233 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/30-style-numeric-bibtex-ms.pdfbin0 -> 177233 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/30-style-numeric-ms.tex98
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/31-style-numeric-comp-biber-ms.pdfbin0 -> 194914 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/31-style-numeric-comp-bibtex-ms.pdfbin0 -> 196031 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/31-style-numeric-comp-ms.tex92
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/32-style-numeric-verb-biber-ms.pdfbin0 -> 181606 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/32-style-numeric-verb-bibtex-ms.pdfbin0 -> 181606 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/32-style-numeric-verb-ms.tex51
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/40-style-alphabetic-biber-ms.pdfbin0 -> 207609 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/40-style-alphabetic-bibtex-ms.pdfbin0 -> 199318 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/40-style-alphabetic-ms.tex78
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/41-style-alphabetic-verb-biber-ms.pdfbin0 -> 111947 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/41-style-alphabetic-verb-bibtex-ms.pdfbin0 -> 111947 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/41-style-alphabetic-verb-ms.tex29
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/42-style-alphabetic-template-biber-ms.pdfbin0 -> 101002 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/42-style-alphabetic-template-bibtex-ms.pdfbin0 -> 101002 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/42-style-alphabetic-template-ms.tex29
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/50-style-authoryear-biber-ms.pdfbin0 -> 280070 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/50-style-authoryear-bibtex-ms.pdfbin0 -> 277799 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/50-style-authoryear-ms.tex224
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/51-style-authoryear-ibid-biber-ms.pdfbin0 -> 213637 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/51-style-authoryear-ibid-bibtex-ms.pdfbin0 -> 213637 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/51-style-authoryear-ibid-ms.tex208
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/52-style-authoryear-comp-biber-ms.pdfbin0 -> 147304 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/52-style-authoryear-comp-bibtex-ms.pdfbin0 -> 147304 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/52-style-authoryear-comp-ms.tex146
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/53-style-authoryear-icomp-biber-ms.pdfbin0 -> 225925 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/53-style-authoryear-icomp-bibtex-ms.pdfbin0 -> 225925 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/53-style-authoryear-icomp-ms.tex203
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/60-style-authortitle-biber-ms.pdfbin0 -> 290007 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/60-style-authortitle-bibtex-ms.pdfbin0 -> 275259 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/60-style-authortitle-ms.tex125
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/61-style-authortitle-ibid-biber-ms.pdfbin0 -> 203055 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/61-style-authortitle-ibid-bibtex-ms.pdfbin0 -> 203055 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/61-style-authortitle-ibid-ms.tex106
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/62-style-authortitle-comp-biber-ms.pdfbin0 -> 126042 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/62-style-authortitle-comp-bibtex-ms.pdfbin0 -> 126042 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/62-style-authortitle-comp-ms.tex43
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/63-style-authortitle-icomp-biber-ms.pdfbin0 -> 222705 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/63-style-authortitle-icomp-bibtex-ms.pdfbin0 -> 222705 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/63-style-authortitle-icomp-ms.tex97
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/64-style-authortitle-terse-biber-ms.pdfbin0 -> 195323 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/64-style-authortitle-terse-bibtex-ms.pdfbin0 -> 195323 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/64-style-authortitle-terse-ms.tex89
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/65-style-authortitle-tcomp-biber-ms.pdfbin0 -> 143176 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/65-style-authortitle-tcomp-bibtex-ms.pdfbin0 -> 143176 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/65-style-authortitle-tcomp-ms.tex49
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/66-style-authortitle-ticomp-biber-ms.pdfbin0 -> 147776 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/66-style-authortitle-ticomp-bibtex-ms.pdfbin0 -> 147776 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/66-style-authortitle-ticomp-ms.tex95
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/70-style-verbose-biber-ms.pdfbin0 -> 268058 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/70-style-verbose-bibtex-ms.pdfbin0 -> 266542 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/70-style-verbose-ms.tex153
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/71-style-verbose-ibid-biber-ms.pdfbin0 -> 272059 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/71-style-verbose-ibid-bibtex-ms.pdfbin0 -> 270652 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/71-style-verbose-ibid-ms.tex217
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/72-style-verbose-note-biber-ms.pdfbin0 -> 270384 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/72-style-verbose-note-bibtex-ms.pdfbin0 -> 268908 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/72-style-verbose-note-ms.tex169
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/73-style-verbose-inote-biber-ms.pdfbin0 -> 274161 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/73-style-verbose-inote-bibtex-ms.pdfbin0 -> 272786 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/73-style-verbose-inote-ms.tex240
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/74-style-verbose-trad1-biber-ms.pdfbin0 -> 328741 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/74-style-verbose-trad1-bibtex-ms.pdfbin0 -> 327370 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/74-style-verbose-trad1-ms.tex401
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/75-style-verbose-trad2-biber-ms.pdfbin0 -> 273584 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/75-style-verbose-trad2-bibtex-ms.pdfbin0 -> 272203 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/75-style-verbose-trad2-ms.tex293
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/76-style-verbose-trad3-biber-ms.pdfbin0 -> 270799 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/76-style-verbose-trad3-bibtex-ms.pdfbin0 -> 269420 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/76-style-verbose-trad3-ms.tex242
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/80-style-reading-biber-ms.pdfbin0 -> 244291 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/80-style-reading-bibtex-ms.pdfbin0 -> 244291 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/80-style-reading-ms.tex77
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/81-style-draft-biber-ms.pdfbin0 -> 149733 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/81-style-draft-bibtex-ms.pdfbin0 -> 149733 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/81-style-draft-ms.tex32
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/82-style-debug-biber-ms.pdfbin0 -> 149679 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/82-style-debug-bibtex-ms.pdfbin0 -> 148860 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/82-style-debug-ms.tex35
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/90-related-entries-biber-ms.pdfbin0 -> 31281 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/90-related-entries-ms.tex12
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/91-sorting-schemes-biber-ms.pdfbin0 -> 21707 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/91-sorting-schemes-ms.tex18
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/92-bibliographylists-biber-ms.pdfbin0 -> 63347 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/92-bibliographylists-ms.tex45
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/93-nameparts-biber-ms.pdfbin0 -> 38407 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/93-nameparts-ms.dbx1
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/93-nameparts-ms.tex429
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/94-labelprefix-biber-ms.pdfbin0 -> 24027 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/94-labelprefix-ms.tex85
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/95-customlists-biber-ms.pdfbin0 -> 12296 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/95-customlists-ms.bib23
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/95-customlists-ms.dbx3
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/95-customlists-ms.tex93
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/96-dates-biber-ms.pdfbin0 -> 25295 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/96-dates-ms.tex197
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/97-annotations-biber-ms.pdfbin0 -> 16647 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/97-annotations-ms.bib12
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/97-annotations-ms.tex52
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/98-multiscript-biber-ms.pdfbin0 -> 14145 bytes
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/98-multiscript-ms.tex120
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/biblatex-examples-ms.bib1661
-rw-r--r--macros/latex/contrib/biblatex-ms/doc/examples/biblatex-examples-ms.bltxml2840
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/bbx/alphabetic-ms.bbx60
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/bbx/alphabetic-verb-ms.bbx6
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/bbx/authortitle-comp-ms.bbx6
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/bbx/authortitle-ibid-ms.bbx6
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/bbx/authortitle-icomp-ms.bbx6
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/bbx/authortitle-ms.bbx134
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/bbx/authortitle-tcomp-ms.bbx6
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/bbx/authortitle-terse-ms.bbx6
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/bbx/authortitle-ticomp-ms.bbx6
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/bbx/authoryear-comp-ms.bbx6
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/bbx/authoryear-ibid-ms.bbx6
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/bbx/authoryear-icomp-ms.bbx6
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/bbx/authoryear-ms.bbx293
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/bbx/debug-ms.bbx111
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/bbx/draft-ms.bbx42
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/bbx/numeric-comp-ms.bbx6
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/bbx/numeric-ms.bbx63
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/bbx/numeric-verb-ms.bbx6
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/bbx/reading-ms.bbx177
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/bbx/standard-ms.bbx1000
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/bbx/verbose-ibid-ms.bbx6
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/bbx/verbose-inote-ms.bbx6
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/bbx/verbose-ms.bbx6
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/bbx/verbose-note-ms.bbx6
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/bbx/verbose-trad1-ms.bbx6
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/bbx/verbose-trad2-ms.bbx6
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/bbx/verbose-trad3-ms.bbx6
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/biblatex-ms.cfg5
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/biblatex-ms.def3206
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/biblatex-ms.sty17802
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/blx-bibtex-ms.def835
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/blx-case-expl3-ms.sty289
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/blx-case-latex2e-ms.sty326
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/blx-compat-ms.def373
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/blx-dm-ms.def1612
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/blx-mcite-ms.def78
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/blx-natbib-ms.def84
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/blx-unicode-ms.def129
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/cbx/alphabetic-ms.cbx148
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/cbx/alphabetic-verb-ms.cbx88
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/cbx/authortitle-comp-ms.cbx198
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/cbx/authortitle-ibid-ms.cbx143
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/cbx/authortitle-icomp-ms.cbx227
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/cbx/authortitle-ms.cbx115
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/cbx/authortitle-tcomp-ms.cbx90
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/cbx/authortitle-terse-ms.cbx40
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/cbx/authortitle-ticomp-ms.cbx100
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/cbx/authoryear-comp-ms.cbx270
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/cbx/authoryear-ibid-ms.cbx173
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/cbx/authoryear-icomp-ms.cbx299
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/cbx/authoryear-ms.cbx141
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/cbx/debug-ms.cbx93
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/cbx/draft-ms.cbx73
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/cbx/numeric-comp-ms.cbx324
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/cbx/numeric-ms.cbx159
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/cbx/numeric-verb-ms.cbx100
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/cbx/reading-ms.cbx6
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/cbx/verbose-ibid-ms.cbx262
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/cbx/verbose-inote-ms.cbx321
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/cbx/verbose-ms.cbx231
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/cbx/verbose-note-ms.cbx292
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/cbx/verbose-trad1-ms.cbx294
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/cbx/verbose-trad2-ms.cbx288
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/cbx/verbose-trad3-ms.cbx261
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/lbx/UKenglish-ms.lbx7
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/lbx/USenglish-ms.lbx7
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/lbx/american-ms.lbx8
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/lbx/australian-ms.lbx28
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/lbx/austrian-ms.lbx16
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/lbx/basque-ms.lbx497
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/lbx/brazil-ms.lbx7
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/lbx/brazilian-ms.lbx566
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/lbx/british-ms.lbx90
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/lbx/bulgarian-ms.lbx621
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/lbx/canadian-ms.lbx7
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/lbx/catalan-ms.lbx663
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/lbx/croatian-ms.lbx610
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/lbx/czech-ms.lbx553
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/lbx/danish-ms.lbx554
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/lbx/dutch-ms.lbx573
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/lbx/english-ms.lbx746
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/lbx/estonian-ms.lbx582
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/lbx/finnish-ms.lbx625
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/lbx/french-ms.lbx670
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/lbx/galician-ms.lbx555
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/lbx/german-ms.lbx582
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/lbx/greek-ms.lbx613
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/lbx/hungarian-ms.lbx7
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/lbx/icelandic-ms.lbx505
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/lbx/italian-ms.lbx486
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/lbx/latvian-ms.lbx794
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/lbx/lithuanian-ms.lbx855
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/lbx/magyar-ms.lbx741
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/lbx/marathi-ms.lbx557
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/lbx/naustrian-ms.lbx22
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/lbx/newzealand-ms.lbx30
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/lbx/ngerman-ms.lbx21
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/lbx/norsk-ms.lbx553
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/lbx/nswissgerman-ms.lbx30
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/lbx/nynorsk-ms.lbx334
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/lbx/polish-ms.lbx593
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/lbx/portuges-ms.lbx7
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/lbx/portuguese-ms.lbx558
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/lbx/romanian-ms.lbx683
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/lbx/russian-ms.lbx623
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/lbx/serbian-ms.lbx457
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/lbx/serbianc-ms.lbx466
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/lbx/slovak-ms.lbx554
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/lbx/slovene-ms.lbx553
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/lbx/slovenian-ms.lbx7
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/lbx/spanish-ms.lbx613
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/lbx/swedish-ms.lbx531
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/lbx/swissgerman-ms.lbx24
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/lbx/turkish-ms.lbx577
-rw-r--r--macros/latex/contrib/biblatex-ms/latex/lbx/ukrainian-ms.lbx623
-rw-r--r--macros/latex/contrib/hereapplies/ChangeLog.md14
-rw-r--r--macros/latex/contrib/hereapplies/README.md84
-rw-r--r--macros/latex/contrib/hereapplies/hereapplies-example.pdfbin49896 -> 49778 bytes
-rw-r--r--macros/latex/contrib/hereapplies/hereapplies.sty98
-rw-r--r--macros/latex/contrib/hereapplies/lyx-module/hereapplies.module166
-rw-r--r--macros/latex/contrib/hereapplies/package.json4
-rw-r--r--macros/latex/contrib/l3backend/CHANGELOG.md8
-rw-r--r--macros/latex/contrib/l3backend/README.md2
-rw-r--r--macros/latex/contrib/l3backend/l3backend-basics.dtx14
-rw-r--r--macros/latex/contrib/l3backend/l3backend-box.dtx2
-rw-r--r--macros/latex/contrib/l3backend/l3backend-code.pdfbin933558 -> 932092 bytes
-rw-r--r--macros/latex/contrib/l3backend/l3backend-color.dtx82
-rw-r--r--macros/latex/contrib/l3backend/l3backend-draw.dtx2
-rw-r--r--macros/latex/contrib/l3backend/l3backend-graphics.dtx2
-rw-r--r--macros/latex/contrib/l3backend/l3backend-header.dtx2
-rw-r--r--macros/latex/contrib/l3backend/l3backend-opacity.dtx2
-rw-r--r--macros/latex/contrib/l3backend/l3backend-pdf.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/CHANGELOG.md18
-rw-r--r--macros/latex/contrib/l3kernel/README.md2
-rw-r--r--macros/latex/contrib/l3kernel/expl3.dtx4
-rw-r--r--macros/latex/contrib/l3kernel/expl3.pdfbin626225 -> 626173 bytes
-rw-r--r--macros/latex/contrib/l3kernel/interface3.pdfbin1769273 -> 1770652 bytes
-rw-r--r--macros/latex/contrib/l3kernel/interface3.tex2
-rw-r--r--macros/latex/contrib/l3kernel/l3basics.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3bootstrap.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3box.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3candidates.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3cctab.dtx4
-rw-r--r--macros/latex/contrib/l3kernel/l3clist.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3coffins.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3color.dtx142
-rw-r--r--macros/latex/contrib/l3kernel/l3debug.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3deprecation.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3doc.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3doc.pdfbin558105 -> 557782 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3docstrip.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3docstrip.pdfbin151843 -> 151820 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3expan.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3file.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3flag.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-assign.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-aux.dtx4
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-basics.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-convert.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-expo.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-extended.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-logic.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-parse.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-random.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-round.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-traps.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-trig.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fp.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fparray.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3int.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3intarray.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3kernel-functions.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3keys.dtx6
-rw-r--r--macros/latex/contrib/l3kernel/l3legacy.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3luatex.dtx4
-rw-r--r--macros/latex/contrib/l3kernel/l3msg.dtx16
-rw-r--r--macros/latex/contrib/l3kernel/l3names.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3news.pdfbin395879 -> 395879 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news01.pdfbin122710 -> 122710 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news02.pdfbin150676 -> 150676 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news03.pdfbin148702 -> 148702 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news04.pdfbin114588 -> 114588 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news05.pdfbin112487 -> 112487 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news06.pdfbin151573 -> 151573 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news07.pdfbin128309 -> 128309 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news08.pdfbin163454 -> 163454 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news09.pdfbin250139 -> 250139 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news10.pdfbin150279 -> 150279 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news11.pdfbin170063 -> 170063 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news12.pdfbin204990 -> 204990 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3pdf.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3prefixes.pdfbin81567 -> 81567 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3prg.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3prop.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3quark.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3regex.dtx4
-rw-r--r--macros/latex/contrib/l3kernel/l3seq.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3skip.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3sort.dtx4
-rw-r--r--macros/latex/contrib/l3kernel/l3str-convert.dtx8
-rw-r--r--macros/latex/contrib/l3kernel/l3str.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3styleguide.pdfbin296294 -> 296239 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3styleguide.tex2
-rw-r--r--macros/latex/contrib/l3kernel/l3syntax-changes.pdfbin242959 -> 242906 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3syntax-changes.tex2
-rw-r--r--macros/latex/contrib/l3kernel/l3sys.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3term-glossary.pdfbin231369 -> 231316 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3term-glossary.tex2
-rw-r--r--macros/latex/contrib/l3kernel/l3text-case.dtx57
-rw-r--r--macros/latex/contrib/l3kernel/l3text-purify.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3text.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3tl-analysis.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3tl.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3token.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3unicode.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/source3.pdfbin7251031 -> 7258705 bytes
-rw-r--r--macros/latex/contrib/l3kernel/source3.tex2
-rw-r--r--macros/latex/contrib/pseudo/VERSION2
-rw-r--r--macros/latex/contrib/pseudo/doc/pseudo.pdfbin949345 -> 950360 bytes
-rw-r--r--macros/latex/contrib/pseudo/doc/pseudo.tex43
-rw-r--r--macros/latex/contrib/pseudo/pseudo.sty33
-rw-r--r--macros/latex/contrib/pseudo/test/overlaytest.tex12
-rw-r--r--systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl4
-rw-r--r--systems/texlive/tlnet/tlpkg/texlive.tlpdb636
-rw-r--r--systems/texlive/tlnet/tlpkg/texlive.tlpdb.md52
-rw-r--r--systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha5122
-rw-r--r--systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc14
-rw-r--r--systems/texlive/tlnet/tlpkg/texlive.tlpdb.xzbin2399768 -> 2404300 bytes
-rw-r--r--systems/win32/miktex/tm/packages/next/pr.ini8
-rw-r--r--systems/win32/miktex/tm/packages/pr.ini8
-rw-r--r--timestamp2
426 files changed, 111282 insertions, 6228 deletions
diff --git a/FILES.byname b/FILES.byname
index adf467220d..4fcfc27df2 100644
--- a/FILES.byname
+++ b/FILES.byname
@@ -19,6 +19,20 @@
2022/07/06 | 23893798 | biblio/biber/biber-windows/biber-2.18-1-MSWIN32.zip
2022/07/06 | 25624953 | biblio/biber/biber-windows/biber-2.18-1-MSWIN64.zip
2022/07/06 | 127 | biblio/biber/biber-windows/README
+2022/08/21 | 263753 | biblio/biber-ms/base/documentation/biber-ms.pdf
+2022/08/21 | 26448 | biblio/biber-ms/base/documentation/Changes
+2022/08/21 | 117927 | biblio/biber-ms/base/documentation/utf8-macro-map.html
+2018/02/27 | 1856 | biblio/biber-ms/base/README.md
+2022/08/21 | 1062747 | biblio/biber-ms/base/source/biblatex-biber-ms.tar.gz
+2022/08/21 | 22051426 | biblio/biber-ms/biber-ms-linux/biber-ms-4.0-linux_x86_32.tar.gz
+2022/08/21 | 24646877 | biblio/biber-ms/biber-ms-linux/biber-ms-4.0-linux_x86_64.tar.gz
+2022/08/22 | 197 | biblio/biber-ms/biber-ms-linux/README
+2022/08/21 | 36620906 | biblio/biber-ms/biber-ms-macos/biber-ms-4.0-darwinlegacy_x86_64.tar.gz
+2022/08/21 | 89388246 | biblio/biber-ms/biber-ms-macos/biber-ms-4.0-darwin_universal.tar.gz
+2022/08/22 | 197 | biblio/biber-ms/biber-ms-macos/README
+2022/08/21 | 23901802 | biblio/biber-ms/biber-ms-windows/biber-ms-4.0-MSWIN32.zip
+2022/08/21 | 25633454 | biblio/biber-ms/biber-ms-windows/biber-ms-4.0-MSWIN64.zip
+2022/08/22 | 199 | biblio/biber-ms/biber-ms-windows/README
2016/10/20 | 2078642 | biblio/bibfilex/Linux/GTK/bibfilex-gtk-1.2.8.0-1.i386.rpm
2016/10/20 | 2255722 | biblio/bibfilex/Linux/GTK/bibfilex-gtk-1.2.8.0-1.x86_64.rpm
2016/10/20 | 2072778 | biblio/bibfilex/Linux/GTK/bibfilex-gtk_1.2.8.0_amd64.deb
@@ -5267,7 +5281,7 @@
1990/10/02 | 5440 | dviware/vutex/vaxvms.hlp
1990/10/02 | 812 | dviware/vutex/vaxvms.ins
1990/10/02 | 127576 | dviware/vutex/vutex.web
-2022/08/22 | 55483 | FILES.last07days
+2022/08/23 | 54923 | FILES.last07days
2021/07/24 | 1139410 | fonts/aboensis/Aboensis.glyphs
2021/07/24 | 18907382 | fonts/aboensis/aboensis.pdf
2021/07/24 | 137860 | fonts/aboensis/Aboensis-Regular.otf
@@ -162364,190 +162378,197 @@
2011/04/20 | 22114 | graphics/pstricks/contrib/pst-asr/pst-asr.tex
2006/10/19 | 1090 | graphics/pstricks/contrib/pst-asr/README
2011/04/20 | 284151 | graphics/pstricks/contrib/pst-asr.zip
-2017/08/22 | 14699 | graphics/pstricks/contrib/pst-barcode/Changes
-2017/04/13 | 11702 | graphics/pstricks/contrib/pst-barcode/doc/images/auspost-1.eps
-2017/04/13 | 11697 | graphics/pstricks/contrib/pst-barcode/doc/images/auspost-2.eps
-2017/04/13 | 16712 | graphics/pstricks/contrib/pst-barcode/doc/images/aztec-1.eps
-2017/04/13 | 16728 | graphics/pstricks/contrib/pst-barcode/doc/images/aztec-2.eps
-2017/04/13 | 17989 | graphics/pstricks/contrib/pst-barcode/doc/images/aztec-3.eps
-2017/04/13 | 16796 | graphics/pstricks/contrib/pst-barcode/doc/images/aztec-4.eps
-2017/04/13 | 16716 | graphics/pstricks/contrib/pst-barcode/doc/images/aztec-5.eps
-2017/04/13 | 16776 | graphics/pstricks/contrib/pst-barcode/doc/images/aztec-6.eps
-2017/04/13 | 10863 | graphics/pstricks/contrib/pst-barcode/doc/images/bc412-1.eps
-2017/04/13 | 10855 | graphics/pstricks/contrib/pst-barcode/doc/images/bc412-2.eps
-2017/04/13 | 10831 | graphics/pstricks/contrib/pst-barcode/doc/images/bc412-3.eps
-2017/04/13 | 10314 | graphics/pstricks/contrib/pst-barcode/doc/images/channelcode-1.eps
-2017/04/13 | 10316 | graphics/pstricks/contrib/pst-barcode/doc/images/channelcode-2.eps
-2017/04/13 | 10342 | graphics/pstricks/contrib/pst-barcode/doc/images/channelcode-3.eps
-2017/04/13 | 10338 | graphics/pstricks/contrib/pst-barcode/doc/images/channelcode-4.eps
-2017/04/13 | 11783 | graphics/pstricks/contrib/pst-barcode/doc/images/codabar-1.eps
-2017/04/13 | 13204 | graphics/pstricks/contrib/pst-barcode/doc/images/codablockf-1.eps
-2017/04/13 | 13296 | graphics/pstricks/contrib/pst-barcode/doc/images/codablockf-2.eps
-2017/04/13 | 13348 | graphics/pstricks/contrib/pst-barcode/doc/images/codablockf-3.eps
-2017/04/13 | 11612 | graphics/pstricks/contrib/pst-barcode/doc/images/code11-1.eps
-2017/04/13 | 15724 | graphics/pstricks/contrib/pst-barcode/doc/images/code128-1.eps
-2017/04/13 | 15296 | graphics/pstricks/contrib/pst-barcode/doc/images/code16k-1.eps
-2017/04/13 | 15286 | graphics/pstricks/contrib/pst-barcode/doc/images/code16k-2.eps
-2017/04/13 | 15368 | graphics/pstricks/contrib/pst-barcode/doc/images/code16k-3.eps
-2017/04/13 | 11127 | graphics/pstricks/contrib/pst-barcode/doc/images/code25-1.eps
-2017/04/13 | 12795 | graphics/pstricks/contrib/pst-barcode/doc/images/code25-2.eps
-2017/04/13 | 13920 | graphics/pstricks/contrib/pst-barcode/doc/images/code32-1.eps
-2017/04/13 | 11430 | graphics/pstricks/contrib/pst-barcode/doc/images/code39-1.eps
-2017/04/13 | 11494 | graphics/pstricks/contrib/pst-barcode/doc/images/code39-2.eps
-2017/04/13 | 11474 | graphics/pstricks/contrib/pst-barcode/doc/images/code39-3.eps
-2017/04/13 | 14297 | graphics/pstricks/contrib/pst-barcode/doc/images/code39ext-1.eps
-2017/04/13 | 14284 | graphics/pstricks/contrib/pst-barcode/doc/images/code39ext-2.eps
-2017/04/13 | 73509 | graphics/pstricks/contrib/pst-barcode/doc/images/code49-1.eps
-2017/04/13 | 73487 | graphics/pstricks/contrib/pst-barcode/doc/images/code49-2.eps
-2017/04/13 | 73573 | graphics/pstricks/contrib/pst-barcode/doc/images/code49-3.eps
-2017/04/13 | 10580 | graphics/pstricks/contrib/pst-barcode/doc/images/code93-1.eps
-2017/04/13 | 10608 | graphics/pstricks/contrib/pst-barcode/doc/images/code93-2.eps
-2017/04/13 | 13783 | graphics/pstricks/contrib/pst-barcode/doc/images/code93ext-1.eps
-2017/04/13 | 13809 | graphics/pstricks/contrib/pst-barcode/doc/images/code93ext-2.eps
-2017/04/13 | 9580 | graphics/pstricks/contrib/pst-barcode/doc/images/codeone-1.eps
-2017/04/13 | 9598 | graphics/pstricks/contrib/pst-barcode/doc/images/codeone-2.eps
-2017/04/13 | 9604 | graphics/pstricks/contrib/pst-barcode/doc/images/codeone-3.eps
-2017/04/13 | 9620 | graphics/pstricks/contrib/pst-barcode/doc/images/codeone-4.eps
-2017/04/13 | 8977 | graphics/pstricks/contrib/pst-barcode/doc/images/daft-1.eps
-2017/04/13 | 24220 | graphics/pstricks/contrib/pst-barcode/doc/images/databarexpanded-1.eps
-2017/04/13 | 97583 | graphics/pstricks/contrib/pst-barcode/doc/images/databarexpandedcomposite-1.eps
-2017/04/13 | 25658 | graphics/pstricks/contrib/pst-barcode/doc/images/databarexpandedstacked-1.eps
-2017/04/13 | 98977 | graphics/pstricks/contrib/pst-barcode/doc/images/databarexpandedstackedcomposite-1.eps
-2017/04/13 | 12769 | graphics/pstricks/contrib/pst-barcode/doc/images/databarlimited-1.eps
-2017/04/13 | 87596 | graphics/pstricks/contrib/pst-barcode/doc/images/databarlimitedcomposite-1.eps
-2017/04/13 | 16597 | graphics/pstricks/contrib/pst-barcode/doc/images/databaromni-1.eps
-2017/04/13 | 90042 | graphics/pstricks/contrib/pst-barcode/doc/images/databaromnicomposite-1.eps
-2017/04/13 | 18844 | graphics/pstricks/contrib/pst-barcode/doc/images/databarstacked-1.eps
-2017/04/13 | 92164 | graphics/pstricks/contrib/pst-barcode/doc/images/databarstackedcomposite-1.eps
-2017/04/13 | 18973 | graphics/pstricks/contrib/pst-barcode/doc/images/databarstackedomni-1.eps
-2017/04/13 | 92324 | graphics/pstricks/contrib/pst-barcode/doc/images/databarstackedomnicomposite-1.eps
-2017/04/13 | 18864 | graphics/pstricks/contrib/pst-barcode/doc/images/databartruncated-1.eps
-2017/04/13 | 92350 | graphics/pstricks/contrib/pst-barcode/doc/images/databartruncatedcomposite-1.eps
-2017/04/13 | 19218 | graphics/pstricks/contrib/pst-barcode/doc/images/datamatrix-1.eps
-2017/04/13 | 19236 | graphics/pstricks/contrib/pst-barcode/doc/images/datamatrix-2.eps
-2017/04/13 | 19238 | graphics/pstricks/contrib/pst-barcode/doc/images/datamatrix-3.eps
-2017/04/13 | 18693 | graphics/pstricks/contrib/pst-barcode/doc/images/ean128-1.eps
-2017/04/13 | 18737 | graphics/pstricks/contrib/pst-barcode/doc/images/ean128-2.eps
-2017/04/13 | 93782 | graphics/pstricks/contrib/pst-barcode/doc/images/ean128composite-1.eps
-2017/04/13 | 93870 | graphics/pstricks/contrib/pst-barcode/doc/images/ean128composite-2.eps
-2017/04/13 | 17877 | graphics/pstricks/contrib/pst-barcode/doc/images/ean13-1.eps
-2017/04/13 | 17889 | graphics/pstricks/contrib/pst-barcode/doc/images/ean13-2.eps
-2017/04/13 | 92354 | graphics/pstricks/contrib/pst-barcode/doc/images/ean13composite-1.eps
-2017/04/13 | 18274 | graphics/pstricks/contrib/pst-barcode/doc/images/ean14-1.eps
-2017/04/13 | 9774 | graphics/pstricks/contrib/pst-barcode/doc/images/ean2-1.eps
-2017/04/13 | 10068 | graphics/pstricks/contrib/pst-barcode/doc/images/ean5-1.eps
-2017/04/13 | 17372 | graphics/pstricks/contrib/pst-barcode/doc/images/ean8-1.eps
-2017/04/13 | 17429 | graphics/pstricks/contrib/pst-barcode/doc/images/ean8-2.eps
-2017/04/13 | 91892 | graphics/pstricks/contrib/pst-barcode/doc/images/ean8composite-1.eps
-2017/04/13 | 9173 | graphics/pstricks/contrib/pst-barcode/doc/images/fima-1.eps
-2017/04/13 | 9173 | graphics/pstricks/contrib/pst-barcode/doc/images/fimb-1.eps
-2017/04/13 | 9173 | graphics/pstricks/contrib/pst-barcode/doc/images/fimc-1.eps
-2017/04/13 | 9173 | graphics/pstricks/contrib/pst-barcode/doc/images/fimd-1.eps
-2017/04/13 | 9339 | graphics/pstricks/contrib/pst-barcode/doc/images/flattermarken-1.eps
-2017/04/13 | 74571 | graphics/pstricks/contrib/pst-barcode/doc/images/gs1composite-1.eps
-2017/04/13 | 74596 | graphics/pstricks/contrib/pst-barcode/doc/images/gs1composite-2.eps
-2017/04/13 | 74622 | graphics/pstricks/contrib/pst-barcode/doc/images/gs1composite-3.eps
-2017/04/13 | 21654 | graphics/pstricks/contrib/pst-barcode/doc/images/gs1datamatrix-1.eps
-2017/04/13 | 28066 | graphics/pstricks/contrib/pst-barcode/doc/images/gs1qrcode-1.eps
-2017/04/13 | 28048 | graphics/pstricks/contrib/pst-barcode/doc/images/gs1qrcode-2.eps
-2017/04/13 | 28171 | graphics/pstricks/contrib/pst-barcode/doc/images/hanxin-1.eps
-2017/04/13 | 15484 | graphics/pstricks/contrib/pst-barcode/doc/images/hibccodablockf-1.eps
-2017/04/13 | 18423 | graphics/pstricks/contrib/pst-barcode/doc/images/hibccode128-1.eps
-2017/04/13 | 14172 | graphics/pstricks/contrib/pst-barcode/doc/images/hibccode39-1.eps
-2017/04/13 | 21487 | graphics/pstricks/contrib/pst-barcode/doc/images/hibcdatamatrix-1.eps
-2017/04/13 | 36435 | graphics/pstricks/contrib/pst-barcode/doc/images/hibcmicropdf417-1.eps
-2017/04/13 | 34723 | graphics/pstricks/contrib/pst-barcode/doc/images/hibcpdf417-1.eps
-2017/04/13 | 27864 | graphics/pstricks/contrib/pst-barcode/doc/images/hibcqrcode-1.eps
-2017/04/13 | 13042 | graphics/pstricks/contrib/pst-barcode/doc/images/identcode-1.eps
-2017/04/13 | 24181 | graphics/pstricks/contrib/pst-barcode/doc/images/isbn-1.eps
-2017/04/13 | 24227 | graphics/pstricks/contrib/pst-barcode/doc/images/isbn-2.eps
-2017/04/13 | 24171 | graphics/pstricks/contrib/pst-barcode/doc/images/isbn-3.eps
-2017/04/13 | 24221 | graphics/pstricks/contrib/pst-barcode/doc/images/isbn-4.eps
-2017/04/13 | 23821 | graphics/pstricks/contrib/pst-barcode/doc/images/ismn-1.eps
-2017/04/13 | 23813 | graphics/pstricks/contrib/pst-barcode/doc/images/ismn-2.eps
-2017/04/13 | 23857 | graphics/pstricks/contrib/pst-barcode/doc/images/ismn-3.eps
-2017/04/13 | 22162 | graphics/pstricks/contrib/pst-barcode/doc/images/issn-1.eps
-2017/04/13 | 22168 | graphics/pstricks/contrib/pst-barcode/doc/images/issn-2.eps
-2017/04/13 | 13130 | graphics/pstricks/contrib/pst-barcode/doc/images/itf-14-1.eps
-2017/04/13 | 10424 | graphics/pstricks/contrib/pst-barcode/doc/images/itf-1.eps
-2017/04/13 | 10424 | graphics/pstricks/contrib/pst-barcode/doc/images/itf-2.eps
-2017/04/13 | 10429 | graphics/pstricks/contrib/pst-barcode/doc/images/japanpost-1.eps
-2017/04/13 | 9872 | graphics/pstricks/contrib/pst-barcode/doc/images/kix-1.eps
-2017/04/13 | 13037 | graphics/pstricks/contrib/pst-barcode/doc/images/leitcode-1.eps
-2017/04/13 | 15310 | graphics/pstricks/contrib/pst-barcode/doc/images/maxicode-1.eps
-2017/04/13 | 15574 | graphics/pstricks/contrib/pst-barcode/doc/images/maxicode-2.eps
-2017/04/13 | 15568 | graphics/pstricks/contrib/pst-barcode/doc/images/maxicode-3.eps
-2017/04/13 | 15531 | graphics/pstricks/contrib/pst-barcode/doc/images/maxicode-4.eps
-2017/04/13 | 34068 | graphics/pstricks/contrib/pst-barcode/doc/images/micropdf417-1.eps
-2017/04/13 | 34121 | graphics/pstricks/contrib/pst-barcode/doc/images/micropdf417-2.eps
-2017/04/13 | 10512 | graphics/pstricks/contrib/pst-barcode/doc/images/msi-1.eps
-2017/04/13 | 10588 | graphics/pstricks/contrib/pst-barcode/doc/images/msi-2.eps
-2017/04/13 | 10602 | graphics/pstricks/contrib/pst-barcode/doc/images/msi-3.eps
-2017/04/13 | 17299 | graphics/pstricks/contrib/pst-barcode/doc/images/onecode-1.eps
-2017/04/13 | 11794 | graphics/pstricks/contrib/pst-barcode/doc/images/optborder.eps
-2017/04/13 | 11739 | graphics/pstricks/contrib/pst-barcode/doc/images/optcolorcmyk.eps
-2017/04/13 | 11755 | graphics/pstricks/contrib/pst-barcode/doc/images/optcolorrgb.eps
-2017/04/13 | 17541 | graphics/pstricks/contrib/pst-barcode/doc/images/optguardpos.eps
-2017/04/13 | 24267 | graphics/pstricks/contrib/pst-barcode/doc/images/optguardsize.eps
-2017/04/13 | 17865 | graphics/pstricks/contrib/pst-barcode/doc/images/optheight.eps
-2017/04/13 | 10590 | graphics/pstricks/contrib/pst-barcode/doc/images/optincludecheck.eps
-2017/04/13 | 10886 | graphics/pstricks/contrib/pst-barcode/doc/images/optincludecheckintext.eps
-2017/04/13 | 11429 | graphics/pstricks/contrib/pst-barcode/doc/images/optincludetext.eps
-2017/04/13 | 11411 | graphics/pstricks/contrib/pst-barcode/doc/images/optinkspread.eps
-2017/04/13 | 19218 | graphics/pstricks/contrib/pst-barcode/doc/images/optparse.eps
-2017/04/13 | 10606 | graphics/pstricks/contrib/pst-barcode/doc/images/optparsefnc.eps
-2017/04/13 | 25703 | graphics/pstricks/contrib/pst-barcode/doc/images/optraw.eps
-2017/04/13 | 10615 | graphics/pstricks/contrib/pst-barcode/doc/images/opttextfont.eps
-2017/04/13 | 10566 | graphics/pstricks/contrib/pst-barcode/doc/images/optwidth.eps
-2017/04/13 | 32405 | graphics/pstricks/contrib/pst-barcode/doc/images/pdf417-1.eps
-2017/04/13 | 32457 | graphics/pstricks/contrib/pst-barcode/doc/images/pdf417-2.eps
-2017/04/13 | 33772 | graphics/pstricks/contrib/pst-barcode/doc/images/pdf417-3.eps
-2017/04/13 | 32478 | graphics/pstricks/contrib/pst-barcode/doc/images/pdf417-4.eps
-2017/04/13 | 32431 | graphics/pstricks/contrib/pst-barcode/doc/images/pdf417-5.eps
-2017/04/13 | 9443 | graphics/pstricks/contrib/pst-barcode/doc/images/pharmacode-1.eps
-2017/04/13 | 9478 | graphics/pstricks/contrib/pst-barcode/doc/images/pharmacode2-1.eps
-2017/04/13 | 10537 | graphics/pstricks/contrib/pst-barcode/doc/images/planet-1.eps
-2017/04/13 | 11102 | graphics/pstricks/contrib/pst-barcode/doc/images/plessey-1.eps
-2017/04/13 | 11139 | graphics/pstricks/contrib/pst-barcode/doc/images/plessey-2.eps
-2017/04/13 | 11093 | graphics/pstricks/contrib/pst-barcode/doc/images/plessey-3.eps
-2017/04/13 | 15092 | graphics/pstricks/contrib/pst-barcode/doc/images/posicode-1.eps
-2017/04/13 | 15088 | graphics/pstricks/contrib/pst-barcode/doc/images/posicode-2.eps
-2017/04/13 | 15096 | graphics/pstricks/contrib/pst-barcode/doc/images/posicode-3.eps
-2017/04/13 | 15094 | graphics/pstricks/contrib/pst-barcode/doc/images/posicode-4.eps
-2017/04/13 | 15110 | graphics/pstricks/contrib/pst-barcode/doc/images/posicode-5.eps
-2017/04/13 | 15110 | graphics/pstricks/contrib/pst-barcode/doc/images/posicode-6.eps
-2017/04/13 | 10569 | graphics/pstricks/contrib/pst-barcode/doc/images/postnet-1.eps
-2017/04/13 | 14065 | graphics/pstricks/contrib/pst-barcode/doc/images/pzn-1.eps
-2017/04/13 | 14079 | graphics/pstricks/contrib/pst-barcode/doc/images/pzn-2.eps
-2017/04/13 | 25619 | graphics/pstricks/contrib/pst-barcode/doc/images/qrcode-1.eps
-2017/04/13 | 25671 | graphics/pstricks/contrib/pst-barcode/doc/images/qrcode-2.eps
-2017/04/13 | 26938 | graphics/pstricks/contrib/pst-barcode/doc/images/qrcode-5.eps
-2017/04/13 | 8673 | graphics/pstricks/contrib/pst-barcode/doc/images/raw-1.eps
-2017/04/13 | 17843 | graphics/pstricks/contrib/pst-barcode/doc/images/resize1.eps
-2017/04/13 | 17854 | graphics/pstricks/contrib/pst-barcode/doc/images/resize2.eps
-2017/04/13 | 17876 | graphics/pstricks/contrib/pst-barcode/doc/images/resize3.eps
-2017/04/13 | 10851 | graphics/pstricks/contrib/pst-barcode/doc/images/rm4scc-1.eps
-2017/04/13 | 18300 | graphics/pstricks/contrib/pst-barcode/doc/images/sscc18-1.eps
-2017/04/13 | 11936 | graphics/pstricks/contrib/pst-barcode/doc/images/telepen-1.eps
-2017/04/13 | 11918 | graphics/pstricks/contrib/pst-barcode/doc/images/telepen-2.eps
-2017/04/13 | 13491 | graphics/pstricks/contrib/pst-barcode/doc/images/telepen-3.eps
-2017/04/13 | 13491 | graphics/pstricks/contrib/pst-barcode/doc/images/telepen-4.eps
-2017/04/13 | 13544 | graphics/pstricks/contrib/pst-barcode/doc/images/telepen-5.eps
-2017/04/13 | 18526 | graphics/pstricks/contrib/pst-barcode/doc/images/upca-1.eps
-2017/04/13 | 18570 | graphics/pstricks/contrib/pst-barcode/doc/images/upca-2.eps
-2017/04/13 | 93029 | graphics/pstricks/contrib/pst-barcode/doc/images/upcacomposite-1.eps
-2017/04/13 | 19347 | graphics/pstricks/contrib/pst-barcode/doc/images/upce-1.eps
-2017/04/13 | 19369 | graphics/pstricks/contrib/pst-barcode/doc/images/upce-2.eps
-2017/04/13 | 94011 | graphics/pstricks/contrib/pst-barcode/doc/images/upcecomposite-1.eps
-2017/08/06 | 2905 | graphics/pstricks/contrib/pst-barcode/doc/pst-barcode-doc.bib
-2017/04/19 | 11862 | graphics/pstricks/contrib/pst-barcode/doc/pst-barcode-doc.ltx
-2017/08/22 | 1234227 | graphics/pstricks/contrib/pst-barcode/doc/pst-barcode-doc.pdf
-2017/04/19 | 149964 | graphics/pstricks/contrib/pst-barcode/doc/pst-barcode-doc.tex
-2017/08/22 | 857858 | graphics/pstricks/contrib/pst-barcode/dvips/pst-barcode.pro
-2017/04/19 | 450 | graphics/pstricks/contrib/pst-barcode/latex/pst-barcode.sty
-2017/04/19 | 3458 | graphics/pstricks/contrib/pst-barcode/README.md
-2017/08/22 | 2933 | graphics/pstricks/contrib/pst-barcode/tex/pst-barcode.tex
-2017/08/22 | 3443417 | graphics/pstricks/contrib/pst-barcode.zip
+2022/08/23 | 20624 | graphics/pstricks/contrib/pst-barcode/Changes
+2022/08/23 | 11702 | graphics/pstricks/contrib/pst-barcode/doc/images/auspost-1.eps
+2022/08/23 | 11697 | graphics/pstricks/contrib/pst-barcode/doc/images/auspost-2.eps
+2022/08/23 | 16712 | graphics/pstricks/contrib/pst-barcode/doc/images/aztec-1.eps
+2022/08/23 | 16728 | graphics/pstricks/contrib/pst-barcode/doc/images/aztec-2.eps
+2022/08/23 | 17989 | graphics/pstricks/contrib/pst-barcode/doc/images/aztec-3.eps
+2022/08/23 | 16796 | graphics/pstricks/contrib/pst-barcode/doc/images/aztec-4.eps
+2022/08/23 | 16716 | graphics/pstricks/contrib/pst-barcode/doc/images/aztec-5.eps
+2022/08/23 | 16776 | graphics/pstricks/contrib/pst-barcode/doc/images/aztec-6.eps
+2022/08/23 | 143137 | graphics/pstricks/contrib/pst-barcode/doc/images/barcode.jpg
+2022/08/23 | 10863 | graphics/pstricks/contrib/pst-barcode/doc/images/bc412-1.eps
+2022/08/23 | 10855 | graphics/pstricks/contrib/pst-barcode/doc/images/bc412-2.eps
+2022/08/23 | 10831 | graphics/pstricks/contrib/pst-barcode/doc/images/bc412-3.eps
+2022/08/23 | 10314 | graphics/pstricks/contrib/pst-barcode/doc/images/channelcode-1.eps
+2022/08/23 | 10316 | graphics/pstricks/contrib/pst-barcode/doc/images/channelcode-2.eps
+2022/08/23 | 10342 | graphics/pstricks/contrib/pst-barcode/doc/images/channelcode-3.eps
+2022/08/23 | 10338 | graphics/pstricks/contrib/pst-barcode/doc/images/channelcode-4.eps
+2022/08/23 | 11783 | graphics/pstricks/contrib/pst-barcode/doc/images/codabar-1.eps
+2022/08/23 | 13204 | graphics/pstricks/contrib/pst-barcode/doc/images/codablockf-1.eps
+2022/08/23 | 13296 | graphics/pstricks/contrib/pst-barcode/doc/images/codablockf-2.eps
+2022/08/23 | 13348 | graphics/pstricks/contrib/pst-barcode/doc/images/codablockf-3.eps
+2022/08/23 | 11612 | graphics/pstricks/contrib/pst-barcode/doc/images/code11-1.eps
+2022/08/23 | 15724 | graphics/pstricks/contrib/pst-barcode/doc/images/code128-1.eps
+2022/08/23 | 15296 | graphics/pstricks/contrib/pst-barcode/doc/images/code16k-1.eps
+2022/08/23 | 15286 | graphics/pstricks/contrib/pst-barcode/doc/images/code16k-2.eps
+2022/08/23 | 15368 | graphics/pstricks/contrib/pst-barcode/doc/images/code16k-3.eps
+2022/08/23 | 11127 | graphics/pstricks/contrib/pst-barcode/doc/images/code25-1.eps
+2022/08/23 | 12795 | graphics/pstricks/contrib/pst-barcode/doc/images/code25-2.eps
+2022/08/23 | 13920 | graphics/pstricks/contrib/pst-barcode/doc/images/code32-1.eps
+2022/08/23 | 11430 | graphics/pstricks/contrib/pst-barcode/doc/images/code39-1.eps
+2022/08/23 | 11494 | graphics/pstricks/contrib/pst-barcode/doc/images/code39-2.eps
+2022/08/23 | 11474 | graphics/pstricks/contrib/pst-barcode/doc/images/code39-3.eps
+2022/08/23 | 14297 | graphics/pstricks/contrib/pst-barcode/doc/images/code39ext-1.eps
+2022/08/23 | 14284 | graphics/pstricks/contrib/pst-barcode/doc/images/code39ext-2.eps
+2022/08/23 | 73509 | graphics/pstricks/contrib/pst-barcode/doc/images/code49-1.eps
+2022/08/23 | 73487 | graphics/pstricks/contrib/pst-barcode/doc/images/code49-2.eps
+2022/08/23 | 73573 | graphics/pstricks/contrib/pst-barcode/doc/images/code49-3.eps
+2022/08/23 | 10580 | graphics/pstricks/contrib/pst-barcode/doc/images/code93-1.eps
+2022/08/23 | 10608 | graphics/pstricks/contrib/pst-barcode/doc/images/code93-2.eps
+2022/08/23 | 13783 | graphics/pstricks/contrib/pst-barcode/doc/images/code93ext-1.eps
+2022/08/23 | 13809 | graphics/pstricks/contrib/pst-barcode/doc/images/code93ext-2.eps
+2022/08/23 | 9580 | graphics/pstricks/contrib/pst-barcode/doc/images/codeone-1.eps
+2022/08/23 | 9598 | graphics/pstricks/contrib/pst-barcode/doc/images/codeone-2.eps
+2022/08/23 | 9604 | graphics/pstricks/contrib/pst-barcode/doc/images/codeone-3.eps
+2022/08/23 | 9620 | graphics/pstricks/contrib/pst-barcode/doc/images/codeone-4.eps
+2022/08/23 | 8977 | graphics/pstricks/contrib/pst-barcode/doc/images/daft-1.eps
+2022/08/23 | 24220 | graphics/pstricks/contrib/pst-barcode/doc/images/databarexpanded-1.eps
+2022/08/23 | 97583 | graphics/pstricks/contrib/pst-barcode/doc/images/databarexpandedcomposite-1.eps
+2022/08/23 | 25658 | graphics/pstricks/contrib/pst-barcode/doc/images/databarexpandedstacked-1.eps
+2022/08/23 | 98977 | graphics/pstricks/contrib/pst-barcode/doc/images/databarexpandedstackedcomposite-1.eps
+2022/08/23 | 12769 | graphics/pstricks/contrib/pst-barcode/doc/images/databarlimited-1.eps
+2022/08/23 | 87596 | graphics/pstricks/contrib/pst-barcode/doc/images/databarlimitedcomposite-1.eps
+2022/08/23 | 16597 | graphics/pstricks/contrib/pst-barcode/doc/images/databaromni-1.eps
+2022/08/23 | 90042 | graphics/pstricks/contrib/pst-barcode/doc/images/databaromnicomposite-1.eps
+2022/08/23 | 18844 | graphics/pstricks/contrib/pst-barcode/doc/images/databarstacked-1.eps
+2022/08/23 | 92164 | graphics/pstricks/contrib/pst-barcode/doc/images/databarstackedcomposite-1.eps
+2022/08/23 | 18973 | graphics/pstricks/contrib/pst-barcode/doc/images/databarstackedomni-1.eps
+2022/08/23 | 92324 | graphics/pstricks/contrib/pst-barcode/doc/images/databarstackedomnicomposite-1.eps
+2022/08/23 | 18864 | graphics/pstricks/contrib/pst-barcode/doc/images/databartruncated-1.eps
+2022/08/23 | 92350 | graphics/pstricks/contrib/pst-barcode/doc/images/databartruncatedcomposite-1.eps
+2022/08/23 | 19218 | graphics/pstricks/contrib/pst-barcode/doc/images/datamatrix-1.eps
+2022/08/23 | 19236 | graphics/pstricks/contrib/pst-barcode/doc/images/datamatrix-2.eps
+2022/08/23 | 19238 | graphics/pstricks/contrib/pst-barcode/doc/images/datamatrix-3.eps
+2022/08/23 | 26874 | graphics/pstricks/contrib/pst-barcode/doc/images/datamatrix-4.eps
+2022/08/23 | 29843 | graphics/pstricks/contrib/pst-barcode/doc/images/dotcode-1.eps
+2022/08/23 | 18693 | graphics/pstricks/contrib/pst-barcode/doc/images/ean128-1.eps
+2022/08/23 | 18737 | graphics/pstricks/contrib/pst-barcode/doc/images/ean128-2.eps
+2022/08/23 | 93782 | graphics/pstricks/contrib/pst-barcode/doc/images/ean128composite-1.eps
+2022/08/23 | 93870 | graphics/pstricks/contrib/pst-barcode/doc/images/ean128composite-2.eps
+2022/08/23 | 17877 | graphics/pstricks/contrib/pst-barcode/doc/images/ean13-1.eps
+2022/08/23 | 17889 | graphics/pstricks/contrib/pst-barcode/doc/images/ean13-2.eps
+2022/08/23 | 92354 | graphics/pstricks/contrib/pst-barcode/doc/images/ean13composite-1.eps
+2022/08/23 | 18274 | graphics/pstricks/contrib/pst-barcode/doc/images/ean14-1.eps
+2022/08/23 | 9774 | graphics/pstricks/contrib/pst-barcode/doc/images/ean2-1.eps
+2022/08/23 | 10068 | graphics/pstricks/contrib/pst-barcode/doc/images/ean5-1.eps
+2022/08/23 | 17372 | graphics/pstricks/contrib/pst-barcode/doc/images/ean8-1.eps
+2022/08/23 | 17429 | graphics/pstricks/contrib/pst-barcode/doc/images/ean8-2.eps
+2022/08/23 | 91892 | graphics/pstricks/contrib/pst-barcode/doc/images/ean8composite-1.eps
+2022/08/23 | 9173 | graphics/pstricks/contrib/pst-barcode/doc/images/fima-1.eps
+2022/08/23 | 9173 | graphics/pstricks/contrib/pst-barcode/doc/images/fimb-1.eps
+2022/08/23 | 9173 | graphics/pstricks/contrib/pst-barcode/doc/images/fimc-1.eps
+2022/08/23 | 9173 | graphics/pstricks/contrib/pst-barcode/doc/images/fimd-1.eps
+2022/08/23 | 9339 | graphics/pstricks/contrib/pst-barcode/doc/images/flattermarken-1.eps
+2022/08/23 | 74571 | graphics/pstricks/contrib/pst-barcode/doc/images/gs1composite-1.eps
+2022/08/23 | 74596 | graphics/pstricks/contrib/pst-barcode/doc/images/gs1composite-2.eps
+2022/08/23 | 74622 | graphics/pstricks/contrib/pst-barcode/doc/images/gs1composite-3.eps
+2022/08/23 | 21654 | graphics/pstricks/contrib/pst-barcode/doc/images/gs1datamatrix-1.eps
+2022/08/23 | 54645 | graphics/pstricks/contrib/pst-barcode/doc/images/gs1dotcode-1.eps
+2022/08/23 | 34083 | graphics/pstricks/contrib/pst-barcode/doc/images/gs1northamericancoupon-1.eps
+2022/08/23 | 28066 | graphics/pstricks/contrib/pst-barcode/doc/images/gs1qrcode-1.eps
+2022/08/23 | 28048 | graphics/pstricks/contrib/pst-barcode/doc/images/gs1qrcode-2.eps
+2022/08/23 | 28171 | graphics/pstricks/contrib/pst-barcode/doc/images/hanxin-1.eps
+2022/08/23 | 15484 | graphics/pstricks/contrib/pst-barcode/doc/images/hibccodablockf-1.eps
+2022/08/23 | 18423 | graphics/pstricks/contrib/pst-barcode/doc/images/hibccode128-1.eps
+2022/08/23 | 14172 | graphics/pstricks/contrib/pst-barcode/doc/images/hibccode39-1.eps
+2022/08/23 | 21487 | graphics/pstricks/contrib/pst-barcode/doc/images/hibcdatamatrix-1.eps
+2022/08/23 | 36435 | graphics/pstricks/contrib/pst-barcode/doc/images/hibcmicropdf417-1.eps
+2022/08/23 | 34723 | graphics/pstricks/contrib/pst-barcode/doc/images/hibcpdf417-1.eps
+2022/08/23 | 27864 | graphics/pstricks/contrib/pst-barcode/doc/images/hibcqrcode-1.eps
+2022/08/23 | 13042 | graphics/pstricks/contrib/pst-barcode/doc/images/identcode-1.eps
+2022/08/23 | 24181 | graphics/pstricks/contrib/pst-barcode/doc/images/isbn-1.eps
+2022/08/23 | 24227 | graphics/pstricks/contrib/pst-barcode/doc/images/isbn-2.eps
+2022/08/23 | 24171 | graphics/pstricks/contrib/pst-barcode/doc/images/isbn-3.eps
+2022/08/23 | 24221 | graphics/pstricks/contrib/pst-barcode/doc/images/isbn-4.eps
+2022/08/23 | 23821 | graphics/pstricks/contrib/pst-barcode/doc/images/ismn-1.eps
+2022/08/23 | 23813 | graphics/pstricks/contrib/pst-barcode/doc/images/ismn-2.eps
+2022/08/23 | 23857 | graphics/pstricks/contrib/pst-barcode/doc/images/ismn-3.eps
+2022/08/23 | 22162 | graphics/pstricks/contrib/pst-barcode/doc/images/issn-1.eps
+2022/08/23 | 22168 | graphics/pstricks/contrib/pst-barcode/doc/images/issn-2.eps
+2022/08/23 | 13130 | graphics/pstricks/contrib/pst-barcode/doc/images/itf-14-1.eps
+2022/08/23 | 10424 | graphics/pstricks/contrib/pst-barcode/doc/images/itf-1.eps
+2022/08/23 | 10424 | graphics/pstricks/contrib/pst-barcode/doc/images/itf-2.eps
+2022/08/23 | 10429 | graphics/pstricks/contrib/pst-barcode/doc/images/japanpost-1.eps
+2022/08/23 | 9872 | graphics/pstricks/contrib/pst-barcode/doc/images/kix-1.eps
+2022/08/23 | 13037 | graphics/pstricks/contrib/pst-barcode/doc/images/leitcode-1.eps
+2022/08/23 | 15310 | graphics/pstricks/contrib/pst-barcode/doc/images/maxicode-1.eps
+2022/08/23 | 15574 | graphics/pstricks/contrib/pst-barcode/doc/images/maxicode-2.eps
+2022/08/23 | 15568 | graphics/pstricks/contrib/pst-barcode/doc/images/maxicode-3.eps
+2022/08/23 | 15531 | graphics/pstricks/contrib/pst-barcode/doc/images/maxicode-4.eps
+2022/08/23 | 34068 | graphics/pstricks/contrib/pst-barcode/doc/images/micropdf417-1.eps
+2022/08/23 | 34121 | graphics/pstricks/contrib/pst-barcode/doc/images/micropdf417-2.eps
+2022/08/23 | 10512 | graphics/pstricks/contrib/pst-barcode/doc/images/msi-1.eps
+2022/08/23 | 10588 | graphics/pstricks/contrib/pst-barcode/doc/images/msi-2.eps
+2022/08/23 | 10602 | graphics/pstricks/contrib/pst-barcode/doc/images/msi-3.eps
+2022/08/23 | 17299 | graphics/pstricks/contrib/pst-barcode/doc/images/onecode-1.eps
+2022/08/23 | 11794 | graphics/pstricks/contrib/pst-barcode/doc/images/optborder.eps
+2022/08/23 | 11739 | graphics/pstricks/contrib/pst-barcode/doc/images/optcolorcmyk.eps
+2022/08/23 | 11755 | graphics/pstricks/contrib/pst-barcode/doc/images/optcolorrgb.eps
+2022/08/23 | 17541 | graphics/pstricks/contrib/pst-barcode/doc/images/optguardpos.eps
+2022/08/23 | 24267 | graphics/pstricks/contrib/pst-barcode/doc/images/optguardsize.eps
+2022/08/23 | 17865 | graphics/pstricks/contrib/pst-barcode/doc/images/optheight.eps
+2022/08/23 | 10590 | graphics/pstricks/contrib/pst-barcode/doc/images/optincludecheck.eps
+2022/08/23 | 10886 | graphics/pstricks/contrib/pst-barcode/doc/images/optincludecheckintext.eps
+2022/08/23 | 11429 | graphics/pstricks/contrib/pst-barcode/doc/images/optincludetext.eps
+2022/08/23 | 11411 | graphics/pstricks/contrib/pst-barcode/doc/images/optinkspread.eps
+2022/08/23 | 19218 | graphics/pstricks/contrib/pst-barcode/doc/images/optparse.eps
+2022/08/23 | 10606 | graphics/pstricks/contrib/pst-barcode/doc/images/optparsefnc.eps
+2022/08/23 | 25703 | graphics/pstricks/contrib/pst-barcode/doc/images/optraw.eps
+2022/08/23 | 10615 | graphics/pstricks/contrib/pst-barcode/doc/images/opttextfont.eps
+2022/08/23 | 10566 | graphics/pstricks/contrib/pst-barcode/doc/images/optwidth.eps
+2022/08/23 | 32405 | graphics/pstricks/contrib/pst-barcode/doc/images/pdf417-1.eps
+2022/08/23 | 32457 | graphics/pstricks/contrib/pst-barcode/doc/images/pdf417-2.eps
+2022/08/23 | 33772 | graphics/pstricks/contrib/pst-barcode/doc/images/pdf417-3.eps
+2022/08/23 | 32478 | graphics/pstricks/contrib/pst-barcode/doc/images/pdf417-4.eps
+2022/08/23 | 32431 | graphics/pstricks/contrib/pst-barcode/doc/images/pdf417-5.eps
+2022/08/23 | 9443 | graphics/pstricks/contrib/pst-barcode/doc/images/pharmacode-1.eps
+2022/08/23 | 9478 | graphics/pstricks/contrib/pst-barcode/doc/images/pharmacode2-1.eps
+2022/08/23 | 10537 | graphics/pstricks/contrib/pst-barcode/doc/images/planet-1.eps
+2022/08/23 | 11102 | graphics/pstricks/contrib/pst-barcode/doc/images/plessey-1.eps
+2022/08/23 | 11139 | graphics/pstricks/contrib/pst-barcode/doc/images/plessey-2.eps
+2022/08/23 | 11093 | graphics/pstricks/contrib/pst-barcode/doc/images/plessey-3.eps
+2022/08/23 | 15092 | graphics/pstricks/contrib/pst-barcode/doc/images/posicode-1.eps
+2022/08/23 | 15088 | graphics/pstricks/contrib/pst-barcode/doc/images/posicode-2.eps
+2022/08/23 | 15096 | graphics/pstricks/contrib/pst-barcode/doc/images/posicode-3.eps
+2022/08/23 | 15094 | graphics/pstricks/contrib/pst-barcode/doc/images/posicode-4.eps
+2022/08/23 | 15110 | graphics/pstricks/contrib/pst-barcode/doc/images/posicode-5.eps
+2022/08/23 | 15110 | graphics/pstricks/contrib/pst-barcode/doc/images/posicode-6.eps
+2022/08/23 | 10569 | graphics/pstricks/contrib/pst-barcode/doc/images/postnet-1.eps
+2022/08/23 | 14065 | graphics/pstricks/contrib/pst-barcode/doc/images/pzn-1.eps
+2022/08/23 | 14079 | graphics/pstricks/contrib/pst-barcode/doc/images/pzn-2.eps
+2022/08/23 | 25619 | graphics/pstricks/contrib/pst-barcode/doc/images/qrcode-1.eps
+2022/08/23 | 25671 | graphics/pstricks/contrib/pst-barcode/doc/images/qrcode-2.eps
+2022/08/23 | 26938 | graphics/pstricks/contrib/pst-barcode/doc/images/qrcode-5.eps
+2022/08/23 | 8673 | graphics/pstricks/contrib/pst-barcode/doc/images/raw-1.eps
+2022/08/23 | 17843 | graphics/pstricks/contrib/pst-barcode/doc/images/resize1.eps
+2022/08/23 | 17854 | graphics/pstricks/contrib/pst-barcode/doc/images/resize2.eps
+2022/08/23 | 17876 | graphics/pstricks/contrib/pst-barcode/doc/images/resize3.eps
+2022/08/23 | 10851 | graphics/pstricks/contrib/pst-barcode/doc/images/rm4scc-1.eps
+2022/08/23 | 18300 | graphics/pstricks/contrib/pst-barcode/doc/images/sscc18-1.eps
+2022/08/23 | 68670 | graphics/pstricks/contrib/pst-barcode/doc/images/swissqrcode-1.eps
+2022/08/23 | 11936 | graphics/pstricks/contrib/pst-barcode/doc/images/telepen-1.eps
+2022/08/23 | 11918 | graphics/pstricks/contrib/pst-barcode/doc/images/telepen-2.eps
+2022/08/23 | 13491 | graphics/pstricks/contrib/pst-barcode/doc/images/telepen-3.eps
+2022/08/23 | 13491 | graphics/pstricks/contrib/pst-barcode/doc/images/telepen-4.eps
+2022/08/23 | 13544 | graphics/pstricks/contrib/pst-barcode/doc/images/telepen-5.eps
+2022/08/23 | 14977 | graphics/pstricks/contrib/pst-barcode/doc/images/ultracode-1.eps
+2022/08/23 | 18526 | graphics/pstricks/contrib/pst-barcode/doc/images/upca-1.eps
+2022/08/23 | 18570 | graphics/pstricks/contrib/pst-barcode/doc/images/upca-2.eps
+2022/08/23 | 93029 | graphics/pstricks/contrib/pst-barcode/doc/images/upcacomposite-1.eps
+2022/08/23 | 19347 | graphics/pstricks/contrib/pst-barcode/doc/images/upce-1.eps
+2022/08/23 | 19369 | graphics/pstricks/contrib/pst-barcode/doc/images/upce-2.eps
+2022/08/23 | 94011 | graphics/pstricks/contrib/pst-barcode/doc/images/upcecomposite-1.eps
+2020/06/07 | 2905 | graphics/pstricks/contrib/pst-barcode/doc/pst-barcode-doc.bib
+2022/08/23 | 12007 | graphics/pstricks/contrib/pst-barcode/doc/pst-barcode-doc.ltx
+2022/08/23 | 1225072 | graphics/pstricks/contrib/pst-barcode/doc/pst-barcode-doc.pdf
+2022/08/23 | 192578 | graphics/pstricks/contrib/pst-barcode/doc/pst-barcode-doc.tex
+2022/08/23 | 1117762 | graphics/pstricks/contrib/pst-barcode/dvips/pst-barcode.pro
+2022/08/23 | 450 | graphics/pstricks/contrib/pst-barcode/latex/pst-barcode.sty
+2022/08/23 | 3458 | graphics/pstricks/contrib/pst-barcode/README.md
+2022/08/23 | 2933 | graphics/pstricks/contrib/pst-barcode/tex/pst-barcode.tex
+2022/08/23 | 3790488 | graphics/pstricks/contrib/pst-barcode.zip
2008/11/26 | 1776 | graphics/pstricks/contrib/pst-bar/Makefile
2008/10/20 | 1770 | graphics/pstricks/contrib/pst-bar/pst-bar-doc.bib
2009/03/12 | 121106 | graphics/pstricks/contrib/pst-bar/pst-bar-docDE.pdf
@@ -189101,10 +189122,10 @@
2015/12/09 | 171418 | install/macros/latex/contrib/ksp-thesis.tds.zip
2019/12/19 | 302191 | install/macros/latex/contrib/kvdefinekeys.tds.zip
2019/12/15 | 385518 | install/macros/latex/contrib/kvsetkeys.tds.zip
-2022/08/05 | 970216 | install/macros/latex/contrib/l3backend.tds.zip
+2022/08/23 | 968344 | install/macros/latex/contrib/l3backend.tds.zip
2022/04/19 | 817332 | install/macros/latex/contrib/l3build.tds.zip
2022/04/20 | 4458126 | install/macros/latex/contrib/l3experimental.tds.zip
-2022/08/05 | 13953403 | install/macros/latex/contrib/l3kernel.tds.zip
+2022/08/23 | 13962969 | install/macros/latex/contrib/l3kernel.tds.zip
2022/06/22 | 2254834 | install/macros/latex/contrib/l3packages.tds.zip
2021/09/03 | 583760 | install/macros/latex/contrib/lastpage.tds.zip
2009/09/02 | 556672 | install/macros/latex/contrib/layouts.tds.zip
@@ -207527,15 +207548,15 @@
2011/08/07 | 505027 | macros/latex/contrib/beamer-contrib/beamersubframe/beamersubframe.pdf
2011/08/08 | 1261 | macros/latex/contrib/beamer-contrib/beamersubframe/README
2011/08/11 | 440711 | macros/latex/contrib/beamer-contrib/beamersubframe.zip
-2021/04/14 | 105830 | macros/latex/contrib/beamer-contrib/beamerswitch/beamerswitch.dtx
-2021/04/14 | 20112 | macros/latex/contrib/beamer-contrib/beamerswitch/beamerswitch-example-article.pdf
-2021/04/14 | 22397 | macros/latex/contrib/beamer-contrib/beamerswitch/beamerswitch-example-handout.pdf
-2021/04/14 | 36629 | macros/latex/contrib/beamer-contrib/beamerswitch/beamerswitch-example.pdf
-2021/04/14 | 22998 | macros/latex/contrib/beamer-contrib/beamerswitch/beamerswitch-example-trans.pdf
-2021/04/14 | 200906 | macros/latex/contrib/beamer-contrib/beamerswitch/beamerswitch.pdf
-2021/04/14 | 2627 | macros/latex/contrib/beamer-contrib/beamerswitch/Makefile
-2021/04/14 | 4277 | macros/latex/contrib/beamer-contrib/beamerswitch/README.md
-2021/04/14 | 315886 | macros/latex/contrib/beamer-contrib/beamerswitch.zip
+2022/08/23 | 106590 | macros/latex/contrib/beamer-contrib/beamerswitch/beamerswitch.dtx
+2022/08/23 | 20110 | macros/latex/contrib/beamer-contrib/beamerswitch/beamerswitch-example-article.pdf
+2022/08/23 | 22397 | macros/latex/contrib/beamer-contrib/beamerswitch/beamerswitch-example-handout.pdf
+2022/08/23 | 36621 | macros/latex/contrib/beamer-contrib/beamerswitch/beamerswitch-example.pdf
+2022/08/23 | 22994 | macros/latex/contrib/beamer-contrib/beamerswitch/beamerswitch-example-trans.pdf
+2022/08/23 | 208134 | macros/latex/contrib/beamer-contrib/beamerswitch/beamerswitch.pdf
+2022/08/23 | 2627 | macros/latex/contrib/beamer-contrib/beamerswitch/Makefile
+2022/08/23 | 4277 | macros/latex/contrib/beamer-contrib/beamerswitch/README.md
+2022/08/23 | 323138 | macros/latex/contrib/beamer-contrib/beamerswitch.zip
2016/08/06 | 2180 | macros/latex/contrib/beamer-contrib/bxdpx-beamer/bxdpx-beamer.sty
2016/08/06 | 1321 | macros/latex/contrib/beamer-contrib/bxdpx-beamer/LICENSE
2016/08/06 | 806 | macros/latex/contrib/beamer-contrib/bxdpx-beamer/README.md
@@ -209676,6 +209697,286 @@
2022/07/12 | 127 | macros/latex/contrib/biblatex/latex/lbx/UKenglish.lbx
2022/07/12 | 44946 | macros/latex/contrib/biblatex/latex/lbx/ukrainian.lbx
2022/07/12 | 129 | macros/latex/contrib/biblatex/latex/lbx/USenglish.lbx
+2022/08/21 | 132465 | macros/latex/contrib/biblatex-ms/biber/bltxml/biblatex-examples-ms.bltxml
+2022/08/21 | 68013 | macros/latex/contrib/biblatex-ms/bibtex/bib/biblatex/biblatex-examples-ms.bib
+2022/08/21 | 65771 | macros/latex/contrib/biblatex-ms/bibtex/bst/biblatex-ms.bst
+2022/08/21 | 51653 | macros/latex/contrib/biblatex-ms/CHANGES-ms.md
+2022/08/21 | 1770072 | macros/latex/contrib/biblatex-ms/doc/biblatex-ms.pdf
+2022/08/21 | 1099893 | macros/latex/contrib/biblatex-ms/doc/biblatex-ms.tex
+2022/08/21 | 167962 | macros/latex/contrib/biblatex-ms/doc/examples/01-introduction-biber-ms.pdf
+2022/08/21 | 167962 | macros/latex/contrib/biblatex-ms/doc/examples/01-introduction-bibtex-ms.pdf
+2022/08/21 | 5178 | macros/latex/contrib/biblatex-ms/doc/examples/01-introduction-ms.tex
+2022/08/21 | 2666 | macros/latex/contrib/biblatex-ms/doc/examples/01-introduction.run-ms.xml
+2022/08/21 | 214456 | macros/latex/contrib/biblatex-ms/doc/examples/02-annotations-biber-ms.pdf
+2022/08/21 | 207478 | macros/latex/contrib/biblatex-ms/doc/examples/02-annotations-bibtex-ms.pdf
+2022/08/21 | 548 | macros/latex/contrib/biblatex-ms/doc/examples/02-annotations-ms.tex
+2022/08/21 | 254414 | macros/latex/contrib/biblatex-ms/doc/examples/03-localization-keys-biber-ms.pdf
+2022/08/21 | 253881 | macros/latex/contrib/biblatex-ms/doc/examples/03-localization-keys-bibtex-ms.pdf
+2022/08/21 | 39226 | macros/latex/contrib/biblatex-ms/doc/examples/03-localization-keys-ms.tex
+2022/08/21 | 80156 | macros/latex/contrib/biblatex-ms/doc/examples/04-delimiters-biber-ms.pdf
+2022/08/21 | 80152 | macros/latex/contrib/biblatex-ms/doc/examples/04-delimiters-bibtex-ms.pdf
+2022/08/21 | 2398 | macros/latex/contrib/biblatex-ms/doc/examples/04-delimiters-ms.tex
+2022/08/21 | 81705 | macros/latex/contrib/biblatex-ms/doc/examples/10-references-per-section-biber-ms.pdf
+2022/08/21 | 81705 | macros/latex/contrib/biblatex-ms/doc/examples/10-references-per-section-bibtex-ms.pdf
+2022/08/21 | 1997 | macros/latex/contrib/biblatex-ms/doc/examples/10-references-per-section-ms.tex
+2022/08/21 | 98395 | macros/latex/contrib/biblatex-ms/doc/examples/11-references-by-section-biber-ms.pdf
+2022/08/21 | 98390 | macros/latex/contrib/biblatex-ms/doc/examples/11-references-by-section-bibtex-ms.pdf
+2022/08/21 | 1879 | macros/latex/contrib/biblatex-ms/doc/examples/11-references-by-section-ms.tex
+2022/08/21 | 98442 | macros/latex/contrib/biblatex-ms/doc/examples/12-references-by-segment-biber-ms.pdf
+2022/08/21 | 98437 | macros/latex/contrib/biblatex-ms/doc/examples/12-references-by-segment-bibtex-ms.pdf
+2022/08/21 | 1343 | macros/latex/contrib/biblatex-ms/doc/examples/12-references-by-segment-ms.tex
+2022/08/21 | 183623 | macros/latex/contrib/biblatex-ms/doc/examples/13-references-by-keyword-biber-ms.pdf
+2022/08/21 | 175130 | macros/latex/contrib/biblatex-ms/doc/examples/13-references-by-keyword-bibtex-ms.pdf
+2022/08/21 | 1314 | macros/latex/contrib/biblatex-ms/doc/examples/13-references-by-keyword-ms.tex
+2022/08/21 | 183127 | macros/latex/contrib/biblatex-ms/doc/examples/14-references-by-category-biber-ms.pdf
+2022/08/21 | 174634 | macros/latex/contrib/biblatex-ms/doc/examples/14-references-by-category-bibtex-ms.pdf
+2022/08/21 | 1685 | macros/latex/contrib/biblatex-ms/doc/examples/14-references-by-category-ms.tex
+2022/08/21 | 119269 | macros/latex/contrib/biblatex-ms/doc/examples/15-references-by-type-biber-ms.pdf
+2022/08/21 | 119269 | macros/latex/contrib/biblatex-ms/doc/examples/15-references-by-type-bibtex-ms.pdf
+2022/08/21 | 786 | macros/latex/contrib/biblatex-ms/doc/examples/15-references-by-type-ms.tex
+2022/08/21 | 163360 | macros/latex/contrib/biblatex-ms/doc/examples/16-numeric-prefixed-1-biber-ms.pdf
+2022/08/21 | 156540 | macros/latex/contrib/biblatex-ms/doc/examples/16-numeric-prefixed-1-bibtex-ms.pdf
+2022/08/21 | 1945 | macros/latex/contrib/biblatex-ms/doc/examples/16-numeric-prefixed-1-ms.tex
+2022/08/21 | 163329 | macros/latex/contrib/biblatex-ms/doc/examples/17-numeric-prefixed-2-biber-ms.pdf
+2022/08/21 | 156540 | macros/latex/contrib/biblatex-ms/doc/examples/17-numeric-prefixed-2-bibtex-ms.pdf
+2022/08/21 | 1290 | macros/latex/contrib/biblatex-ms/doc/examples/17-numeric-prefixed-2-ms.tex
+2022/08/21 | 112916 | macros/latex/contrib/biblatex-ms/doc/examples/18-numeric-hybrid-biber-ms.pdf
+2022/08/21 | 112916 | macros/latex/contrib/biblatex-ms/doc/examples/18-numeric-hybrid-bibtex-ms.pdf
+2022/08/21 | 2902 | macros/latex/contrib/biblatex-ms/doc/examples/18-numeric-hybrid-ms.tex
+2022/08/21 | 163973 | macros/latex/contrib/biblatex-ms/doc/examples/19-alphabetic-prefixed-biber-ms.pdf
+2022/08/21 | 157616 | macros/latex/contrib/biblatex-ms/doc/examples/19-alphabetic-prefixed-bibtex-ms.pdf
+2022/08/21 | 1412 | macros/latex/contrib/biblatex-ms/doc/examples/19-alphabetic-prefixed-ms.tex
+2022/08/21 | 176169 | macros/latex/contrib/biblatex-ms/doc/examples/20-indexing-single-biber-ms.pdf
+2022/08/21 | 169812 | macros/latex/contrib/biblatex-ms/doc/examples/20-indexing-single-bibtex-ms.pdf
+2022/08/21 | 2437 | macros/latex/contrib/biblatex-ms/doc/examples/20-indexing-single-ms.tex
+2022/08/21 | 177358 | macros/latex/contrib/biblatex-ms/doc/examples/21-indexing-multiple-biber-ms.pdf
+2022/08/21 | 171031 | macros/latex/contrib/biblatex-ms/doc/examples/21-indexing-multiple-bibtex-ms.pdf
+2022/08/21 | 5094 | macros/latex/contrib/biblatex-ms/doc/examples/21-indexing-multiple-ms.tex
+2022/08/21 | 88905 | macros/latex/contrib/biblatex-ms/doc/examples/22-indexing-subentry-biber-ms.pdf
+2022/08/21 | 88905 | macros/latex/contrib/biblatex-ms/doc/examples/22-indexing-subentry-bibtex-ms.pdf
+2022/08/21 | 3591 | macros/latex/contrib/biblatex-ms/doc/examples/22-indexing-subentry-ms.tex
+2022/08/21 | 177233 | macros/latex/contrib/biblatex-ms/doc/examples/30-style-numeric-biber-ms.pdf
+2022/08/21 | 177233 | macros/latex/contrib/biblatex-ms/doc/examples/30-style-numeric-bibtex-ms.pdf
+2022/08/21 | 2691 | macros/latex/contrib/biblatex-ms/doc/examples/30-style-numeric-ms.tex
+2022/08/21 | 194914 | macros/latex/contrib/biblatex-ms/doc/examples/31-style-numeric-comp-biber-ms.pdf
+2022/08/21 | 196031 | macros/latex/contrib/biblatex-ms/doc/examples/31-style-numeric-comp-bibtex-ms.pdf
+2022/08/21 | 3018 | macros/latex/contrib/biblatex-ms/doc/examples/31-style-numeric-comp-ms.tex
+2022/08/21 | 181606 | macros/latex/contrib/biblatex-ms/doc/examples/32-style-numeric-verb-biber-ms.pdf
+2022/08/21 | 181606 | macros/latex/contrib/biblatex-ms/doc/examples/32-style-numeric-verb-bibtex-ms.pdf
+2022/08/21 | 1549 | macros/latex/contrib/biblatex-ms/doc/examples/32-style-numeric-verb-ms.tex
+2022/08/21 | 207609 | macros/latex/contrib/biblatex-ms/doc/examples/40-style-alphabetic-biber-ms.pdf
+2022/08/21 | 199318 | macros/latex/contrib/biblatex-ms/doc/examples/40-style-alphabetic-bibtex-ms.pdf
+2022/08/21 | 1991 | macros/latex/contrib/biblatex-ms/doc/examples/40-style-alphabetic-ms.tex
+2022/08/21 | 111947 | macros/latex/contrib/biblatex-ms/doc/examples/41-style-alphabetic-verb-biber-ms.pdf
+2022/08/21 | 111947 | macros/latex/contrib/biblatex-ms/doc/examples/41-style-alphabetic-verb-bibtex-ms.pdf
+2022/08/21 | 747 | macros/latex/contrib/biblatex-ms/doc/examples/41-style-alphabetic-verb-ms.tex
+2022/08/21 | 101002 | macros/latex/contrib/biblatex-ms/doc/examples/42-style-alphabetic-template-biber-ms.pdf
+2022/08/21 | 101002 | macros/latex/contrib/biblatex-ms/doc/examples/42-style-alphabetic-template-bibtex-ms.pdf
+2022/08/21 | 760 | macros/latex/contrib/biblatex-ms/doc/examples/42-style-alphabetic-template-ms.tex
+2022/08/21 | 280070 | macros/latex/contrib/biblatex-ms/doc/examples/50-style-authoryear-biber-ms.pdf
+2022/08/21 | 277799 | macros/latex/contrib/biblatex-ms/doc/examples/50-style-authoryear-bibtex-ms.pdf
+2022/08/21 | 7713 | macros/latex/contrib/biblatex-ms/doc/examples/50-style-authoryear-ms.tex
+2022/08/21 | 213637 | macros/latex/contrib/biblatex-ms/doc/examples/51-style-authoryear-ibid-biber-ms.pdf
+2022/08/21 | 213637 | macros/latex/contrib/biblatex-ms/doc/examples/51-style-authoryear-ibid-bibtex-ms.pdf
+2022/08/21 | 7481 | macros/latex/contrib/biblatex-ms/doc/examples/51-style-authoryear-ibid-ms.tex
+2022/08/21 | 147304 | macros/latex/contrib/biblatex-ms/doc/examples/52-style-authoryear-comp-biber-ms.pdf
+2022/08/21 | 147304 | macros/latex/contrib/biblatex-ms/doc/examples/52-style-authoryear-comp-bibtex-ms.pdf
+2022/08/21 | 5783 | macros/latex/contrib/biblatex-ms/doc/examples/52-style-authoryear-comp-ms.tex
+2022/08/21 | 225925 | macros/latex/contrib/biblatex-ms/doc/examples/53-style-authoryear-icomp-biber-ms.pdf
+2022/08/21 | 225925 | macros/latex/contrib/biblatex-ms/doc/examples/53-style-authoryear-icomp-bibtex-ms.pdf
+2022/08/21 | 7291 | macros/latex/contrib/biblatex-ms/doc/examples/53-style-authoryear-icomp-ms.tex
+2022/08/21 | 290007 | macros/latex/contrib/biblatex-ms/doc/examples/60-style-authortitle-biber-ms.pdf
+2022/08/21 | 275259 | macros/latex/contrib/biblatex-ms/doc/examples/60-style-authortitle-bibtex-ms.pdf
+2022/08/21 | 3716 | macros/latex/contrib/biblatex-ms/doc/examples/60-style-authortitle-ms.tex
+2022/08/21 | 203055 | macros/latex/contrib/biblatex-ms/doc/examples/61-style-authortitle-ibid-biber-ms.pdf
+2022/08/21 | 203055 | macros/latex/contrib/biblatex-ms/doc/examples/61-style-authortitle-ibid-bibtex-ms.pdf
+2022/08/21 | 3209 | macros/latex/contrib/biblatex-ms/doc/examples/61-style-authortitle-ibid-ms.tex
+2022/08/21 | 126042 | macros/latex/contrib/biblatex-ms/doc/examples/62-style-authortitle-comp-biber-ms.pdf
+2022/08/21 | 126042 | macros/latex/contrib/biblatex-ms/doc/examples/62-style-authortitle-comp-bibtex-ms.pdf
+2022/08/21 | 1337 | macros/latex/contrib/biblatex-ms/doc/examples/62-style-authortitle-comp-ms.tex
+2022/08/21 | 222705 | macros/latex/contrib/biblatex-ms/doc/examples/63-style-authortitle-icomp-biber-ms.pdf
+2022/08/21 | 222705 | macros/latex/contrib/biblatex-ms/doc/examples/63-style-authortitle-icomp-bibtex-ms.pdf
+2022/08/21 | 2836 | macros/latex/contrib/biblatex-ms/doc/examples/63-style-authortitle-icomp-ms.tex
+2022/08/21 | 195323 | macros/latex/contrib/biblatex-ms/doc/examples/64-style-authortitle-terse-biber-ms.pdf
+2022/08/21 | 195323 | macros/latex/contrib/biblatex-ms/doc/examples/64-style-authortitle-terse-bibtex-ms.pdf
+2022/08/21 | 2638 | macros/latex/contrib/biblatex-ms/doc/examples/64-style-authortitle-terse-ms.tex
+2022/08/21 | 143176 | macros/latex/contrib/biblatex-ms/doc/examples/65-style-authortitle-tcomp-biber-ms.pdf
+2022/08/21 | 143176 | macros/latex/contrib/biblatex-ms/doc/examples/65-style-authortitle-tcomp-bibtex-ms.pdf
+2022/08/21 | 1349 | macros/latex/contrib/biblatex-ms/doc/examples/65-style-authortitle-tcomp-ms.tex
+2022/08/21 | 147776 | macros/latex/contrib/biblatex-ms/doc/examples/66-style-authortitle-ticomp-biber-ms.pdf
+2022/08/21 | 147776 | macros/latex/contrib/biblatex-ms/doc/examples/66-style-authortitle-ticomp-bibtex-ms.pdf
+2022/08/21 | 2588 | macros/latex/contrib/biblatex-ms/doc/examples/66-style-authortitle-ticomp-ms.tex
+2022/08/21 | 268058 | macros/latex/contrib/biblatex-ms/doc/examples/70-style-verbose-biber-ms.pdf
+2022/08/21 | 266542 | macros/latex/contrib/biblatex-ms/doc/examples/70-style-verbose-bibtex-ms.pdf
+2022/08/21 | 5050 | macros/latex/contrib/biblatex-ms/doc/examples/70-style-verbose-ms.tex
+2022/08/21 | 272059 | macros/latex/contrib/biblatex-ms/doc/examples/71-style-verbose-ibid-biber-ms.pdf
+2022/08/21 | 270652 | macros/latex/contrib/biblatex-ms/doc/examples/71-style-verbose-ibid-bibtex-ms.pdf
+2022/08/21 | 7005 | macros/latex/contrib/biblatex-ms/doc/examples/71-style-verbose-ibid-ms.tex
+2022/08/21 | 270384 | macros/latex/contrib/biblatex-ms/doc/examples/72-style-verbose-note-biber-ms.pdf
+2022/08/21 | 268908 | macros/latex/contrib/biblatex-ms/doc/examples/72-style-verbose-note-bibtex-ms.pdf
+2022/08/21 | 5891 | macros/latex/contrib/biblatex-ms/doc/examples/72-style-verbose-note-ms.tex
+2022/08/21 | 274161 | macros/latex/contrib/biblatex-ms/doc/examples/73-style-verbose-inote-biber-ms.pdf
+2022/08/21 | 272786 | macros/latex/contrib/biblatex-ms/doc/examples/73-style-verbose-inote-bibtex-ms.pdf
+2022/08/21 | 8032 | macros/latex/contrib/biblatex-ms/doc/examples/73-style-verbose-inote-ms.tex
+2022/08/21 | 328741 | macros/latex/contrib/biblatex-ms/doc/examples/74-style-verbose-trad1-biber-ms.pdf
+2022/08/21 | 327370 | macros/latex/contrib/biblatex-ms/doc/examples/74-style-verbose-trad1-bibtex-ms.pdf
+2022/08/21 | 14156 | macros/latex/contrib/biblatex-ms/doc/examples/74-style-verbose-trad1-ms.tex
+2022/08/21 | 273584 | macros/latex/contrib/biblatex-ms/doc/examples/75-style-verbose-trad2-biber-ms.pdf
+2022/08/21 | 272203 | macros/latex/contrib/biblatex-ms/doc/examples/75-style-verbose-trad2-bibtex-ms.pdf
+2022/08/21 | 9728 | macros/latex/contrib/biblatex-ms/doc/examples/75-style-verbose-trad2-ms.tex
+2022/08/21 | 270799 | macros/latex/contrib/biblatex-ms/doc/examples/76-style-verbose-trad3-biber-ms.pdf
+2022/08/21 | 269420 | macros/latex/contrib/biblatex-ms/doc/examples/76-style-verbose-trad3-bibtex-ms.pdf
+2022/08/21 | 8118 | macros/latex/contrib/biblatex-ms/doc/examples/76-style-verbose-trad3-ms.tex
+2022/08/21 | 244291 | macros/latex/contrib/biblatex-ms/doc/examples/80-style-reading-biber-ms.pdf
+2022/08/21 | 244291 | macros/latex/contrib/biblatex-ms/doc/examples/80-style-reading-bibtex-ms.pdf
+2022/08/21 | 2583 | macros/latex/contrib/biblatex-ms/doc/examples/80-style-reading-ms.tex
+2022/08/21 | 149733 | macros/latex/contrib/biblatex-ms/doc/examples/81-style-draft-biber-ms.pdf
+2022/08/21 | 149733 | macros/latex/contrib/biblatex-ms/doc/examples/81-style-draft-bibtex-ms.pdf
+2022/08/21 | 794 | macros/latex/contrib/biblatex-ms/doc/examples/81-style-draft-ms.tex
+2022/08/21 | 149679 | macros/latex/contrib/biblatex-ms/doc/examples/82-style-debug-biber-ms.pdf
+2022/08/21 | 148860 | macros/latex/contrib/biblatex-ms/doc/examples/82-style-debug-bibtex-ms.pdf
+2022/08/21 | 843 | macros/latex/contrib/biblatex-ms/doc/examples/82-style-debug-ms.tex
+2022/08/21 | 31281 | macros/latex/contrib/biblatex-ms/doc/examples/90-related-entries-biber-ms.pdf
+2022/08/21 | 394 | macros/latex/contrib/biblatex-ms/doc/examples/90-related-entries-ms.tex
+2022/08/21 | 21707 | macros/latex/contrib/biblatex-ms/doc/examples/91-sorting-schemes-biber-ms.pdf
+2022/08/21 | 813 | macros/latex/contrib/biblatex-ms/doc/examples/91-sorting-schemes-ms.tex
+2022/08/21 | 63347 | macros/latex/contrib/biblatex-ms/doc/examples/92-bibliographylists-biber-ms.pdf
+2022/08/21 | 1552 | macros/latex/contrib/biblatex-ms/doc/examples/92-bibliographylists-ms.tex
+2022/08/21 | 38407 | macros/latex/contrib/biblatex-ms/doc/examples/93-nameparts-biber-ms.pdf
+2022/08/21 | 102 | macros/latex/contrib/biblatex-ms/doc/examples/93-nameparts-ms.dbx
+2022/08/21 | 12470 | macros/latex/contrib/biblatex-ms/doc/examples/93-nameparts-ms.tex
+2022/08/21 | 24027 | macros/latex/contrib/biblatex-ms/doc/examples/94-labelprefix-biber-ms.pdf
+2022/08/21 | 3523 | macros/latex/contrib/biblatex-ms/doc/examples/94-labelprefix-ms.tex
+2022/08/21 | 12296 | macros/latex/contrib/biblatex-ms/doc/examples/95-customlists-biber-ms.pdf
+2022/08/21 | 505 | macros/latex/contrib/biblatex-ms/doc/examples/95-customlists-ms.bib
+2022/08/21 | 159 | macros/latex/contrib/biblatex-ms/doc/examples/95-customlists-ms.dbx
+2022/08/21 | 3276 | macros/latex/contrib/biblatex-ms/doc/examples/95-customlists-ms.tex
+2022/08/21 | 25295 | macros/latex/contrib/biblatex-ms/doc/examples/96-dates-biber-ms.pdf
+2022/08/21 | 7745 | macros/latex/contrib/biblatex-ms/doc/examples/96-dates-ms.tex
+2022/08/21 | 16647 | macros/latex/contrib/biblatex-ms/doc/examples/97-annotations-biber-ms.pdf
+2022/08/21 | 426 | macros/latex/contrib/biblatex-ms/doc/examples/97-annotations-ms.bib
+2022/08/21 | 1800 | macros/latex/contrib/biblatex-ms/doc/examples/97-annotations-ms.tex
+2022/08/21 | 14145 | macros/latex/contrib/biblatex-ms/doc/examples/98-multiscript-biber-ms.pdf
+2022/08/21 | 5510 | macros/latex/contrib/biblatex-ms/doc/examples/98-multiscript-ms.tex
+2022/08/21 | 68013 | macros/latex/contrib/biblatex-ms/doc/examples/biblatex-examples-ms.bib
+2022/08/21 | 132465 | macros/latex/contrib/biblatex-ms/doc/examples/biblatex-examples-ms.bltxml
+2022/08/21 | 1734 | macros/latex/contrib/biblatex-ms/latex/bbx/alphabetic-ms.bbx
+2022/08/21 | 101 | macros/latex/contrib/biblatex-ms/latex/bbx/alphabetic-verb-ms.bbx
+2022/08/21 | 103 | macros/latex/contrib/biblatex-ms/latex/bbx/authortitle-comp-ms.bbx
+2022/08/21 | 103 | macros/latex/contrib/biblatex-ms/latex/bbx/authortitle-ibid-ms.bbx
+2022/08/21 | 104 | macros/latex/contrib/biblatex-ms/latex/bbx/authortitle-icomp-ms.bbx
+2022/08/21 | 3440 | macros/latex/contrib/biblatex-ms/latex/bbx/authortitle-ms.bbx
+2022/08/21 | 104 | macros/latex/contrib/biblatex-ms/latex/bbx/authortitle-tcomp-ms.bbx
+2022/08/21 | 104 | macros/latex/contrib/biblatex-ms/latex/bbx/authortitle-terse-ms.bbx
+2022/08/21 | 105 | macros/latex/contrib/biblatex-ms/latex/bbx/authortitle-ticomp-ms.bbx
+2022/08/21 | 101 | macros/latex/contrib/biblatex-ms/latex/bbx/authoryear-comp-ms.bbx
+2022/08/21 | 101 | macros/latex/contrib/biblatex-ms/latex/bbx/authoryear-ibid-ms.bbx
+2022/08/21 | 102 | macros/latex/contrib/biblatex-ms/latex/bbx/authoryear-icomp-ms.bbx
+2022/08/21 | 8027 | macros/latex/contrib/biblatex-ms/latex/bbx/authoryear-ms.bbx
+2022/08/21 | 4043 | macros/latex/contrib/biblatex-ms/latex/bbx/debug-ms.bbx
+2022/08/21 | 1163 | macros/latex/contrib/biblatex-ms/latex/bbx/draft-ms.bbx
+2022/08/21 | 95 | macros/latex/contrib/biblatex-ms/latex/bbx/numeric-comp-ms.bbx
+2022/08/21 | 1821 | macros/latex/contrib/biblatex-ms/latex/bbx/numeric-ms.bbx
+2022/08/21 | 95 | macros/latex/contrib/biblatex-ms/latex/bbx/numeric-verb-ms.bbx
+2022/08/21 | 4614 | macros/latex/contrib/biblatex-ms/latex/bbx/reading-ms.bbx
+2022/08/21 | 25683 | macros/latex/contrib/biblatex-ms/latex/bbx/standard-ms.bbx
+2022/08/21 | 99 | macros/latex/contrib/biblatex-ms/latex/bbx/verbose-ibid-ms.bbx
+2022/08/21 | 100 | macros/latex/contrib/biblatex-ms/latex/bbx/verbose-inote-ms.bbx
+2022/08/21 | 94 | macros/latex/contrib/biblatex-ms/latex/bbx/verbose-ms.bbx
+2022/08/21 | 99 | macros/latex/contrib/biblatex-ms/latex/bbx/verbose-note-ms.bbx
+2022/08/21 | 100 | macros/latex/contrib/biblatex-ms/latex/bbx/verbose-trad1-ms.bbx
+2022/08/21 | 100 | macros/latex/contrib/biblatex-ms/latex/bbx/verbose-trad2-ms.bbx
+2022/08/21 | 100 | macros/latex/contrib/biblatex-ms/latex/bbx/verbose-trad3-ms.bbx
+2022/08/21 | 72 | macros/latex/contrib/biblatex-ms/latex/biblatex-ms.cfg
+2022/08/21 | 95330 | macros/latex/contrib/biblatex-ms/latex/biblatex-ms.def
+2022/08/21 | 594312 | macros/latex/contrib/biblatex-ms/latex/biblatex-ms.sty
+2022/08/21 | 25177 | macros/latex/contrib/biblatex-ms/latex/blx-bibtex-ms.def
+2022/08/21 | 8435 | macros/latex/contrib/biblatex-ms/latex/blx-case-expl3-ms.sty
+2022/08/21 | 8366 | macros/latex/contrib/biblatex-ms/latex/blx-case-latex2e-ms.sty
+2022/08/21 | 13922 | macros/latex/contrib/biblatex-ms/latex/blx-compat-ms.def
+2022/08/21 | 32862 | macros/latex/contrib/biblatex-ms/latex/blx-dm-ms.def
+2022/08/21 | 2129 | macros/latex/contrib/biblatex-ms/latex/blx-mcite-ms.def
+2022/08/21 | 2193 | macros/latex/contrib/biblatex-ms/latex/blx-natbib-ms.def
+2022/08/21 | 3786 | macros/latex/contrib/biblatex-ms/latex/blx-unicode-ms.def
+2022/08/21 | 4315 | macros/latex/contrib/biblatex-ms/latex/cbx/alphabetic-ms.cbx
+2022/08/21 | 2260 | macros/latex/contrib/biblatex-ms/latex/cbx/alphabetic-verb-ms.cbx
+2022/08/21 | 5715 | macros/latex/contrib/biblatex-ms/latex/cbx/authortitle-comp-ms.cbx
+2022/08/21 | 3853 | macros/latex/contrib/biblatex-ms/latex/cbx/authortitle-ibid-ms.cbx
+2022/08/21 | 6702 | macros/latex/contrib/biblatex-ms/latex/cbx/authortitle-icomp-ms.cbx
+2022/08/21 | 2896 | macros/latex/contrib/biblatex-ms/latex/cbx/authortitle-ms.cbx
+2022/08/21 | 2937 | macros/latex/contrib/biblatex-ms/latex/cbx/authortitle-tcomp-ms.cbx
+2022/08/21 | 1287 | macros/latex/contrib/biblatex-ms/latex/cbx/authortitle-terse-ms.cbx
+2022/08/21 | 3457 | macros/latex/contrib/biblatex-ms/latex/cbx/authortitle-ticomp-ms.cbx
+2022/08/21 | 8791 | macros/latex/contrib/biblatex-ms/latex/cbx/authoryear-comp-ms.cbx
+2022/08/21 | 5134 | macros/latex/contrib/biblatex-ms/latex/cbx/authoryear-ibid-ms.cbx
+2022/08/21 | 9907 | macros/latex/contrib/biblatex-ms/latex/cbx/authoryear-icomp-ms.cbx
+2022/08/21 | 3979 | macros/latex/contrib/biblatex-ms/latex/cbx/authoryear-ms.cbx
+2022/08/21 | 2391 | macros/latex/contrib/biblatex-ms/latex/cbx/debug-ms.cbx
+2022/08/21 | 1811 | macros/latex/contrib/biblatex-ms/latex/cbx/draft-ms.cbx
+2022/08/21 | 10428 | macros/latex/contrib/biblatex-ms/latex/cbx/numeric-comp-ms.cbx
+2022/08/21 | 4632 | macros/latex/contrib/biblatex-ms/latex/cbx/numeric-ms.cbx
+2022/08/21 | 2575 | macros/latex/contrib/biblatex-ms/latex/cbx/numeric-verb-ms.cbx
+2022/08/21 | 90 | macros/latex/contrib/biblatex-ms/latex/cbx/reading-ms.cbx
+2022/08/21 | 7804 | macros/latex/contrib/biblatex-ms/latex/cbx/verbose-ibid-ms.cbx
+2022/08/21 | 9623 | macros/latex/contrib/biblatex-ms/latex/cbx/verbose-inote-ms.cbx
+2022/08/21 | 7003 | macros/latex/contrib/biblatex-ms/latex/cbx/verbose-ms.cbx
+2022/08/21 | 8691 | macros/latex/contrib/biblatex-ms/latex/cbx/verbose-note-ms.cbx
+2022/08/21 | 9094 | macros/latex/contrib/biblatex-ms/latex/cbx/verbose-trad1-ms.cbx
+2022/08/21 | 8787 | macros/latex/contrib/biblatex-ms/latex/cbx/verbose-trad2-ms.cbx
+2022/08/21 | 7939 | macros/latex/contrib/biblatex-ms/latex/cbx/verbose-trad3-ms.cbx
+2022/08/21 | 172 | macros/latex/contrib/biblatex-ms/latex/lbx/american-ms.lbx
+2022/08/21 | 809 | macros/latex/contrib/biblatex-ms/latex/lbx/australian-ms.lbx
+2022/08/21 | 279 | macros/latex/contrib/biblatex-ms/latex/lbx/austrian-ms.lbx
+2022/08/21 | 31489 | macros/latex/contrib/biblatex-ms/latex/lbx/basque-ms.lbx
+2022/08/21 | 29925 | macros/latex/contrib/biblatex-ms/latex/lbx/brazilian-ms.lbx
+2022/08/21 | 131 | macros/latex/contrib/biblatex-ms/latex/lbx/brazil-ms.lbx
+2022/08/21 | 2920 | macros/latex/contrib/biblatex-ms/latex/lbx/british-ms.lbx
+2022/08/21 | 45260 | macros/latex/contrib/biblatex-ms/latex/lbx/bulgarian-ms.lbx
+2022/08/21 | 166 | macros/latex/contrib/biblatex-ms/latex/lbx/canadian-ms.lbx
+2022/08/21 | 36724 | macros/latex/contrib/biblatex-ms/latex/lbx/catalan-ms.lbx
+2022/08/21 | 29864 | macros/latex/contrib/biblatex-ms/latex/lbx/croatian-ms.lbx
+2022/08/21 | 33854 | macros/latex/contrib/biblatex-ms/latex/lbx/czech-ms.lbx
+2022/08/21 | 32288 | macros/latex/contrib/biblatex-ms/latex/lbx/danish-ms.lbx
+2022/08/21 | 31454 | macros/latex/contrib/biblatex-ms/latex/lbx/dutch-ms.lbx
+2022/08/21 | 39968 | macros/latex/contrib/biblatex-ms/latex/lbx/english-ms.lbx
+2022/08/21 | 33799 | macros/latex/contrib/biblatex-ms/latex/lbx/estonian-ms.lbx
+2022/08/21 | 37455 | macros/latex/contrib/biblatex-ms/latex/lbx/finnish-ms.lbx
+2022/08/21 | 35244 | macros/latex/contrib/biblatex-ms/latex/lbx/french-ms.lbx
+2022/08/21 | 29446 | macros/latex/contrib/biblatex-ms/latex/lbx/galician-ms.lbx
+2022/08/21 | 33911 | macros/latex/contrib/biblatex-ms/latex/lbx/german-ms.lbx
+2022/08/21 | 36091 | macros/latex/contrib/biblatex-ms/latex/lbx/greek-ms.lbx
+2022/08/21 | 128 | macros/latex/contrib/biblatex-ms/latex/lbx/hungarian-ms.lbx
+2022/08/21 | 26401 | macros/latex/contrib/biblatex-ms/latex/lbx/icelandic-ms.lbx
+2022/08/21 | 23973 | macros/latex/contrib/biblatex-ms/latex/lbx/italian-ms.lbx
+2022/08/21 | 43840 | macros/latex/contrib/biblatex-ms/latex/lbx/latvian-ms.lbx
+2022/08/21 | 45734 | macros/latex/contrib/biblatex-ms/latex/lbx/lithuanian-ms.lbx
+2022/08/21 | 39272 | macros/latex/contrib/biblatex-ms/latex/lbx/magyar-ms.lbx
+2022/08/21 | 35748 | macros/latex/contrib/biblatex-ms/latex/lbx/marathi-ms.lbx
+2022/08/21 | 574 | macros/latex/contrib/biblatex-ms/latex/lbx/naustrian-ms.lbx
+2022/08/21 | 883 | macros/latex/contrib/biblatex-ms/latex/lbx/newzealand-ms.lbx
+2022/08/21 | 523 | macros/latex/contrib/biblatex-ms/latex/lbx/ngerman-ms.lbx
+2022/08/21 | 30039 | macros/latex/contrib/biblatex-ms/latex/lbx/norsk-ms.lbx
+2022/08/21 | 772 | macros/latex/contrib/biblatex-ms/latex/lbx/nswissgerman-ms.lbx
+2022/08/21 | 20549 | macros/latex/contrib/biblatex-ms/latex/lbx/nynorsk-ms.lbx
+2022/08/21 | 32799 | macros/latex/contrib/biblatex-ms/latex/lbx/polish-ms.lbx
+2022/08/21 | 135 | macros/latex/contrib/biblatex-ms/latex/lbx/portuges-ms.lbx
+2022/08/21 | 30143 | macros/latex/contrib/biblatex-ms/latex/lbx/portuguese-ms.lbx
+2022/08/21 | 35785 | macros/latex/contrib/biblatex-ms/latex/lbx/romanian-ms.lbx
+2022/08/21 | 45862 | macros/latex/contrib/biblatex-ms/latex/lbx/russian-ms.lbx
+2022/08/21 | 33874 | macros/latex/contrib/biblatex-ms/latex/lbx/serbianc-ms.lbx
+2022/08/21 | 24650 | macros/latex/contrib/biblatex-ms/latex/lbx/serbian-ms.lbx
+2022/08/21 | 32946 | macros/latex/contrib/biblatex-ms/latex/lbx/slovak-ms.lbx
+2022/08/21 | 32065 | macros/latex/contrib/biblatex-ms/latex/lbx/slovene-ms.lbx
+2022/08/21 | 130 | macros/latex/contrib/biblatex-ms/latex/lbx/slovenian-ms.lbx
+2022/08/21 | 47880 | macros/latex/contrib/biblatex-ms/latex/lbx/spanish-ms.lbx
+2022/08/21 | 26961 | macros/latex/contrib/biblatex-ms/latex/lbx/swedish-ms.lbx
+2022/08/21 | 477 | macros/latex/contrib/biblatex-ms/latex/lbx/swissgerman-ms.lbx
+2022/08/21 | 32752 | macros/latex/contrib/biblatex-ms/latex/lbx/turkish-ms.lbx
+2022/08/21 | 130 | macros/latex/contrib/biblatex-ms/latex/lbx/UKenglish-ms.lbx
+2022/08/21 | 44949 | macros/latex/contrib/biblatex-ms/latex/lbx/ukrainian-ms.lbx
+2022/08/21 | 132 | macros/latex/contrib/biblatex-ms/latex/lbx/USenglish-ms.lbx
+2022/08/21 | 5197 | macros/latex/contrib/biblatex-ms/README
+2022/08/23 | 18982290 | macros/latex/contrib/biblatex-ms.zip
2022/07/12 | 5197 | macros/latex/contrib/biblatex/README
2022/07/12 | 18786791 | macros/latex/contrib/biblatex.zip
2020/06/22 | 98385 | macros/latex/contrib/bibleref/bibleref.dtx
@@ -218460,16 +218761,16 @@
2020/04/10 | 1003 | macros/latex/contrib/hepunits/README
2020/04/10 | 101262 | macros/latex/contrib/hepunits.zip
2005/12/14 | 3617 | macros/latex/contrib/hep.zip
-2022/08/19 | 1300 | macros/latex/contrib/hereapplies/ChangeLog.md
-2022/08/19 | 34523 | macros/latex/contrib/hereapplies/COPYING
-2022/08/19 | 49896 | macros/latex/contrib/hereapplies/hereapplies-example.pdf
-2022/08/19 | 923 | macros/latex/contrib/hereapplies/hereapplies-example.tex
-2022/08/19 | 13354 | macros/latex/contrib/hereapplies/hereapplies.sty
-2022/08/19 | 5008 | macros/latex/contrib/hereapplies/lyx-module/hereapplies-example.lyx
-2022/08/19 | 2286 | macros/latex/contrib/hereapplies/lyx-module/hereapplies.module
-2022/08/19 | 611 | macros/latex/contrib/hereapplies/package.json
-2022/08/19 | 5588 | macros/latex/contrib/hereapplies/README.md
-2022/08/19 | 69784 | macros/latex/contrib/hereapplies.zip
+2022/08/23 | 1741 | macros/latex/contrib/hereapplies/ChangeLog.md
+2022/08/23 | 34523 | macros/latex/contrib/hereapplies/COPYING
+2022/08/23 | 49778 | macros/latex/contrib/hereapplies/hereapplies-example.pdf
+2022/08/23 | 923 | macros/latex/contrib/hereapplies/hereapplies-example.tex
+2022/08/23 | 14511 | macros/latex/contrib/hereapplies/hereapplies.sty
+2022/08/23 | 5008 | macros/latex/contrib/hereapplies/lyx-module/hereapplies-example.lyx
+2022/08/23 | 2802 | macros/latex/contrib/hereapplies/lyx-module/hereapplies.module
+2022/08/23 | 625 | macros/latex/contrib/hereapplies/package.json
+2022/08/23 | 5749 | macros/latex/contrib/hereapplies/README.md
+2022/08/23 | 70267 | macros/latex/contrib/hereapplies.zip
2009/11/22 | 439 | macros/latex/contrib/here/here.sty
2009/11/22 | 399 | macros/latex/contrib/here/README
2009/11/22 | 866 | macros/latex/contrib/here.zip
@@ -220482,20 +220783,20 @@
2019/12/15 | 374946 | macros/latex/contrib/kvsetkeys/kvsetkeys.pdf
2019/12/15 | 325 | macros/latex/contrib/kvsetkeys/README.md
2019/12/17 | 380042 | macros/latex/contrib/kvsetkeys.zip
-2022/08/05 | 8369 | macros/latex/contrib/l3backend/CHANGELOG.md
-2022/08/05 | 16092 | macros/latex/contrib/l3backend/l3backend-basics.dtx
-2022/08/05 | 14431 | macros/latex/contrib/l3backend/l3backend-box.dtx
-2022/08/05 | 933558 | macros/latex/contrib/l3backend/l3backend-code.pdf
-2022/08/05 | 1331 | macros/latex/contrib/l3backend/l3backend-code.tex
-2022/08/05 | 42376 | macros/latex/contrib/l3backend/l3backend-color.dtx
-2022/08/05 | 34288 | macros/latex/contrib/l3backend/l3backend-draw.dtx
-2022/08/05 | 29448 | macros/latex/contrib/l3backend/l3backend-graphics.dtx
-2022/08/05 | 14669 | macros/latex/contrib/l3backend/l3backend-header.dtx
-2022/08/05 | 4265 | macros/latex/contrib/l3backend/l3backend.ins
-2022/08/05 | 8190 | macros/latex/contrib/l3backend/l3backend-opacity.dtx
-2022/08/05 | 50241 | macros/latex/contrib/l3backend/l3backend-pdf.dtx
-2022/08/05 | 549 | macros/latex/contrib/l3backend/README.md
-2022/08/05 | 932942 | macros/latex/contrib/l3backend.zip
+2022/08/23 | 8532 | macros/latex/contrib/l3backend/CHANGELOG.md
+2022/08/23 | 16092 | macros/latex/contrib/l3backend/l3backend-basics.dtx
+2022/08/23 | 14431 | macros/latex/contrib/l3backend/l3backend-box.dtx
+2022/08/23 | 932092 | macros/latex/contrib/l3backend/l3backend-code.pdf
+2022/08/23 | 1331 | macros/latex/contrib/l3backend/l3backend-code.tex
+2022/08/23 | 41487 | macros/latex/contrib/l3backend/l3backend-color.dtx
+2022/08/23 | 34288 | macros/latex/contrib/l3backend/l3backend-draw.dtx
+2022/08/23 | 29448 | macros/latex/contrib/l3backend/l3backend-graphics.dtx
+2022/08/23 | 14669 | macros/latex/contrib/l3backend/l3backend-header.dtx
+2022/08/23 | 4265 | macros/latex/contrib/l3backend/l3backend.ins
+2022/08/23 | 8190 | macros/latex/contrib/l3backend/l3backend-opacity.dtx
+2022/08/23 | 50241 | macros/latex/contrib/l3backend/l3backend-pdf.dtx
+2022/08/23 | 549 | macros/latex/contrib/l3backend/README.md
+2022/08/23 | 931318 | macros/latex/contrib/l3backend.zip
2022/04/19 | 17712 | macros/latex/contrib/l3build/CHANGELOG.md
2022/04/19 | 2338 | macros/latex/contrib/l3build/CONTRIBUTING.md
2022/04/19 | 1816 | macros/latex/contrib/l3build/l3build.1
@@ -220564,109 +220865,109 @@
2022/04/20 | 1624 | macros/latex/contrib/l3experimental/xgalley.ins
2022/04/20 | 299230 | macros/latex/contrib/l3experimental/xgalley.pdf
2022/04/20 | 4420859 | macros/latex/contrib/l3experimental.zip
-2022/08/05 | 40132 | macros/latex/contrib/l3kernel/CHANGELOG.md
-2022/08/05 | 70693 | macros/latex/contrib/l3kernel/expl3.dtx
-2022/08/05 | 626225 | macros/latex/contrib/l3kernel/expl3.pdf
-2022/08/05 | 1769273 | macros/latex/contrib/l3kernel/interface3.pdf
-2022/08/05 | 1908 | macros/latex/contrib/l3kernel/interface3.tex
-2022/08/05 | 128799 | macros/latex/contrib/l3kernel/l3basics.dtx
-2022/08/05 | 15127 | macros/latex/contrib/l3kernel/l3bootstrap.dtx
-2022/08/05 | 79792 | macros/latex/contrib/l3kernel/l3box.dtx
-2022/08/05 | 69260 | macros/latex/contrib/l3kernel/l3candidates.dtx
-2022/08/05 | 32430 | macros/latex/contrib/l3kernel/l3cctab.dtx
-2022/08/05 | 82707 | macros/latex/contrib/l3kernel/l3clist.dtx
-2022/08/05 | 87493 | macros/latex/contrib/l3kernel/l3coffins.dtx
-2022/08/05 | 107469 | macros/latex/contrib/l3kernel/l3color.dtx
-2022/08/05 | 43212 | macros/latex/contrib/l3kernel/l3debug.dtx
-2022/08/05 | 21589 | macros/latex/contrib/l3kernel/l3deprecation.dtx
-2022/08/05 | 156373 | macros/latex/contrib/l3kernel/l3doc.dtx
-2022/08/05 | 558105 | macros/latex/contrib/l3kernel/l3doc.pdf
-2022/08/05 | 2390 | macros/latex/contrib/l3kernel/l3docstrip.dtx
-2022/08/05 | 151843 | macros/latex/contrib/l3kernel/l3docstrip.pdf
-2022/08/05 | 106428 | macros/latex/contrib/l3kernel/l3expan.dtx
-2022/08/05 | 136649 | macros/latex/contrib/l3kernel/l3file.dtx
-2022/08/05 | 9436 | macros/latex/contrib/l3kernel/l3flag.dtx
-2022/08/05 | 11781 | macros/latex/contrib/l3kernel/l3fparray.dtx
-2022/08/05 | 7454 | macros/latex/contrib/l3kernel/l3fp-assign.dtx
-2022/08/05 | 47217 | macros/latex/contrib/l3kernel/l3fp-aux.dtx
-2022/08/05 | 84785 | macros/latex/contrib/l3kernel/l3fp-basics.dtx
-2022/08/05 | 19641 | macros/latex/contrib/l3kernel/l3fp-convert.dtx
-2022/08/05 | 70578 | macros/latex/contrib/l3kernel/l3fp.dtx
-2022/08/05 | 49311 | macros/latex/contrib/l3kernel/l3fp-expo.dtx
-2022/08/05 | 51059 | macros/latex/contrib/l3kernel/l3fp-extended.dtx
-2022/08/05 | 23011 | macros/latex/contrib/l3kernel/l3fp-logic.dtx
-2022/08/05 | 105029 | macros/latex/contrib/l3kernel/l3fp-parse.dtx
-2022/08/05 | 25650 | macros/latex/contrib/l3kernel/l3fp-random.dtx
-2022/08/05 | 18531 | macros/latex/contrib/l3kernel/l3fp-round.dtx
-2022/08/05 | 12783 | macros/latex/contrib/l3kernel/l3fp-traps.dtx
-2022/08/05 | 73835 | macros/latex/contrib/l3kernel/l3fp-trig.dtx
-2022/08/05 | 6182 | macros/latex/contrib/l3kernel/l3.ins
-2022/08/05 | 34166 | macros/latex/contrib/l3kernel/l3intarray.dtx
-2022/08/05 | 90018 | macros/latex/contrib/l3kernel/l3int.dtx
-2022/08/05 | 24673 | macros/latex/contrib/l3kernel/l3kernel-functions.dtx
-2022/08/05 | 127089 | macros/latex/contrib/l3kernel/l3keys.dtx
-2022/08/05 | 4538 | macros/latex/contrib/l3kernel/l3legacy.dtx
-2022/08/05 | 23867 | macros/latex/contrib/l3kernel/l3luatex.dtx
-2022/08/05 | 74225 | macros/latex/contrib/l3kernel/l3msg.dtx
-2022/08/05 | 80495 | macros/latex/contrib/l3kernel/l3names.dtx
-2022/08/05 | 122710 | macros/latex/contrib/l3kernel/l3news01.pdf
-2022/08/05 | 4937 | macros/latex/contrib/l3kernel/l3news01.tex
-2022/08/05 | 150676 | macros/latex/contrib/l3kernel/l3news02.pdf
-2022/08/05 | 6677 | macros/latex/contrib/l3kernel/l3news02.tex
-2022/08/05 | 148702 | macros/latex/contrib/l3kernel/l3news03.pdf
-2022/08/05 | 6482 | macros/latex/contrib/l3kernel/l3news03.tex
-2022/08/05 | 114588 | macros/latex/contrib/l3kernel/l3news04.pdf
-2022/08/05 | 5429 | macros/latex/contrib/l3kernel/l3news04.tex
-2022/08/05 | 112487 | macros/latex/contrib/l3kernel/l3news05.pdf
-2022/08/05 | 4716 | macros/latex/contrib/l3kernel/l3news05.tex
-2022/08/05 | 151573 | macros/latex/contrib/l3kernel/l3news06.pdf
-2022/08/05 | 6433 | macros/latex/contrib/l3kernel/l3news06.tex
-2022/08/05 | 128309 | macros/latex/contrib/l3kernel/l3news07.pdf
-2022/08/05 | 4977 | macros/latex/contrib/l3kernel/l3news07.tex
-2022/08/05 | 163454 | macros/latex/contrib/l3kernel/l3news08.pdf
-2022/08/05 | 9465 | macros/latex/contrib/l3kernel/l3news08.tex
-2022/08/05 | 250139 | macros/latex/contrib/l3kernel/l3news09.pdf
-2022/08/05 | 107383 | macros/latex/contrib/l3kernel/l3news09.tex
-2022/08/05 | 150279 | macros/latex/contrib/l3kernel/l3news10.pdf
-2022/08/05 | 9999 | macros/latex/contrib/l3kernel/l3news10.tex
-2022/08/05 | 170063 | macros/latex/contrib/l3kernel/l3news11.pdf
-2022/08/05 | 8481 | macros/latex/contrib/l3kernel/l3news11.tex
-2022/08/05 | 204990 | macros/latex/contrib/l3kernel/l3news12.pdf
-2022/08/05 | 14913 | macros/latex/contrib/l3kernel/l3news12.tex
-2022/08/05 | 395879 | macros/latex/contrib/l3kernel/l3news.pdf
-2022/08/05 | 4890 | macros/latex/contrib/l3kernel/l3news.tex
-2022/08/05 | 14882 | macros/latex/contrib/l3kernel/l3pdf.dtx
-2022/08/05 | 44804 | macros/latex/contrib/l3kernel/l3prefixes.csv
-2022/08/05 | 81567 | macros/latex/contrib/l3kernel/l3prefixes.pdf
-2022/08/05 | 2821 | macros/latex/contrib/l3kernel/l3prefixes.tex
-2022/08/05 | 66524 | macros/latex/contrib/l3kernel/l3prg.dtx
-2022/08/05 | 57887 | macros/latex/contrib/l3kernel/l3prop.dtx
-2022/08/05 | 35621 | macros/latex/contrib/l3kernel/l3quark.dtx
-2022/08/05 | 304577 | macros/latex/contrib/l3kernel/l3regex.dtx
-2022/08/05 | 90470 | macros/latex/contrib/l3kernel/l3seq.dtx
-2022/08/05 | 76279 | macros/latex/contrib/l3kernel/l3skip.dtx
-2022/08/05 | 40705 | macros/latex/contrib/l3kernel/l3sort.dtx
-2022/08/05 | 113422 | macros/latex/contrib/l3kernel/l3str-convert.dtx
-2022/08/05 | 78509 | macros/latex/contrib/l3kernel/l3str.dtx
-2022/08/05 | 296294 | macros/latex/contrib/l3kernel/l3styleguide.pdf
-2022/08/05 | 11884 | macros/latex/contrib/l3kernel/l3styleguide.tex
-2022/08/05 | 242959 | macros/latex/contrib/l3kernel/l3syntax-changes.pdf
-2022/08/05 | 6267 | macros/latex/contrib/l3kernel/l3syntax-changes.tex
-2022/08/05 | 33824 | macros/latex/contrib/l3kernel/l3sys.dtx
-2022/08/05 | 231369 | macros/latex/contrib/l3kernel/l3term-glossary.pdf
-2022/08/05 | 6451 | macros/latex/contrib/l3kernel/l3term-glossary.tex
-2022/08/05 | 90560 | macros/latex/contrib/l3kernel/l3text-case.dtx
-2022/08/05 | 43642 | macros/latex/contrib/l3kernel/l3text.dtx
-2022/08/05 | 21653 | macros/latex/contrib/l3kernel/l3text-purify.dtx
-2022/08/05 | 57245 | macros/latex/contrib/l3kernel/l3tl-analysis.dtx
-2022/08/05 | 145318 | macros/latex/contrib/l3kernel/l3tl.dtx
-2022/08/05 | 124233 | macros/latex/contrib/l3kernel/l3token.dtx
-2022/08/05 | 8495 | macros/latex/contrib/l3kernel/l3unicode.dtx
-2022/08/05 | 3929 | macros/latex/contrib/l3kernel/README.md
-2022/08/05 | 24819 | macros/latex/contrib/l3kernel/source3body.tex
-2022/08/05 | 7251031 | macros/latex/contrib/l3kernel/source3.pdf
-2022/08/05 | 2229 | macros/latex/contrib/l3kernel/source3.tex
-2022/08/05 | 13694400 | macros/latex/contrib/l3kernel.zip
+2022/08/23 | 40666 | macros/latex/contrib/l3kernel/CHANGELOG.md
+2022/08/23 | 70693 | macros/latex/contrib/l3kernel/expl3.dtx
+2022/08/23 | 626173 | macros/latex/contrib/l3kernel/expl3.pdf
+2022/08/23 | 1770652 | macros/latex/contrib/l3kernel/interface3.pdf
+2022/08/23 | 1908 | macros/latex/contrib/l3kernel/interface3.tex
+2022/08/23 | 128799 | macros/latex/contrib/l3kernel/l3basics.dtx
+2022/08/23 | 15127 | macros/latex/contrib/l3kernel/l3bootstrap.dtx
+2022/08/23 | 79792 | macros/latex/contrib/l3kernel/l3box.dtx
+2022/08/23 | 69260 | macros/latex/contrib/l3kernel/l3candidates.dtx
+2022/08/23 | 32429 | macros/latex/contrib/l3kernel/l3cctab.dtx
+2022/08/23 | 82707 | macros/latex/contrib/l3kernel/l3clist.dtx
+2022/08/23 | 87493 | macros/latex/contrib/l3kernel/l3coffins.dtx
+2022/08/23 | 111018 | macros/latex/contrib/l3kernel/l3color.dtx
+2022/08/23 | 43212 | macros/latex/contrib/l3kernel/l3debug.dtx
+2022/08/23 | 21589 | macros/latex/contrib/l3kernel/l3deprecation.dtx
+2022/08/23 | 156373 | macros/latex/contrib/l3kernel/l3doc.dtx
+2022/08/23 | 557782 | macros/latex/contrib/l3kernel/l3doc.pdf
+2022/08/23 | 2390 | macros/latex/contrib/l3kernel/l3docstrip.dtx
+2022/08/23 | 151820 | macros/latex/contrib/l3kernel/l3docstrip.pdf
+2022/08/23 | 106428 | macros/latex/contrib/l3kernel/l3expan.dtx
+2022/08/23 | 136649 | macros/latex/contrib/l3kernel/l3file.dtx
+2022/08/23 | 9436 | macros/latex/contrib/l3kernel/l3flag.dtx
+2022/08/23 | 11781 | macros/latex/contrib/l3kernel/l3fparray.dtx
+2022/08/23 | 7454 | macros/latex/contrib/l3kernel/l3fp-assign.dtx
+2022/08/23 | 47216 | macros/latex/contrib/l3kernel/l3fp-aux.dtx
+2022/08/23 | 84785 | macros/latex/contrib/l3kernel/l3fp-basics.dtx
+2022/08/23 | 19641 | macros/latex/contrib/l3kernel/l3fp-convert.dtx
+2022/08/23 | 70578 | macros/latex/contrib/l3kernel/l3fp.dtx
+2022/08/23 | 49311 | macros/latex/contrib/l3kernel/l3fp-expo.dtx
+2022/08/23 | 51059 | macros/latex/contrib/l3kernel/l3fp-extended.dtx
+2022/08/23 | 23011 | macros/latex/contrib/l3kernel/l3fp-logic.dtx
+2022/08/23 | 105029 | macros/latex/contrib/l3kernel/l3fp-parse.dtx
+2022/08/23 | 25650 | macros/latex/contrib/l3kernel/l3fp-random.dtx
+2022/08/23 | 18531 | macros/latex/contrib/l3kernel/l3fp-round.dtx
+2022/08/23 | 12783 | macros/latex/contrib/l3kernel/l3fp-traps.dtx
+2022/08/23 | 73835 | macros/latex/contrib/l3kernel/l3fp-trig.dtx
+2022/08/23 | 6182 | macros/latex/contrib/l3kernel/l3.ins
+2022/08/23 | 34166 | macros/latex/contrib/l3kernel/l3intarray.dtx
+2022/08/23 | 90018 | macros/latex/contrib/l3kernel/l3int.dtx
+2022/08/23 | 24673 | macros/latex/contrib/l3kernel/l3kernel-functions.dtx
+2022/08/23 | 127087 | macros/latex/contrib/l3kernel/l3keys.dtx
+2022/08/23 | 4538 | macros/latex/contrib/l3kernel/l3legacy.dtx
+2022/08/23 | 23866 | macros/latex/contrib/l3kernel/l3luatex.dtx
+2022/08/23 | 74049 | macros/latex/contrib/l3kernel/l3msg.dtx
+2022/08/23 | 80495 | macros/latex/contrib/l3kernel/l3names.dtx
+2022/08/23 | 122710 | macros/latex/contrib/l3kernel/l3news01.pdf
+2022/08/23 | 4937 | macros/latex/contrib/l3kernel/l3news01.tex
+2022/08/23 | 150676 | macros/latex/contrib/l3kernel/l3news02.pdf
+2022/08/23 | 6677 | macros/latex/contrib/l3kernel/l3news02.tex
+2022/08/23 | 148702 | macros/latex/contrib/l3kernel/l3news03.pdf
+2022/08/23 | 6482 | macros/latex/contrib/l3kernel/l3news03.tex
+2022/08/23 | 114588 | macros/latex/contrib/l3kernel/l3news04.pdf
+2022/08/23 | 5429 | macros/latex/contrib/l3kernel/l3news04.tex
+2022/08/23 | 112487 | macros/latex/contrib/l3kernel/l3news05.pdf
+2022/08/23 | 4716 | macros/latex/contrib/l3kernel/l3news05.tex
+2022/08/23 | 151573 | macros/latex/contrib/l3kernel/l3news06.pdf
+2022/08/23 | 6433 | macros/latex/contrib/l3kernel/l3news06.tex
+2022/08/23 | 128309 | macros/latex/contrib/l3kernel/l3news07.pdf
+2022/08/23 | 4977 | macros/latex/contrib/l3kernel/l3news07.tex
+2022/08/23 | 163454 | macros/latex/contrib/l3kernel/l3news08.pdf
+2022/08/23 | 9465 | macros/latex/contrib/l3kernel/l3news08.tex
+2022/08/23 | 250139 | macros/latex/contrib/l3kernel/l3news09.pdf
+2022/08/23 | 107383 | macros/latex/contrib/l3kernel/l3news09.tex
+2022/08/23 | 150279 | macros/latex/contrib/l3kernel/l3news10.pdf
+2022/08/23 | 9999 | macros/latex/contrib/l3kernel/l3news10.tex
+2022/08/23 | 170063 | macros/latex/contrib/l3kernel/l3news11.pdf
+2022/08/23 | 8481 | macros/latex/contrib/l3kernel/l3news11.tex
+2022/08/23 | 204990 | macros/latex/contrib/l3kernel/l3news12.pdf
+2022/08/23 | 14913 | macros/latex/contrib/l3kernel/l3news12.tex
+2022/08/23 | 395879 | macros/latex/contrib/l3kernel/l3news.pdf
+2022/08/23 | 4890 | macros/latex/contrib/l3kernel/l3news.tex
+2022/08/23 | 14882 | macros/latex/contrib/l3kernel/l3pdf.dtx
+2022/08/23 | 44804 | macros/latex/contrib/l3kernel/l3prefixes.csv
+2022/08/23 | 81567 | macros/latex/contrib/l3kernel/l3prefixes.pdf
+2022/08/23 | 2821 | macros/latex/contrib/l3kernel/l3prefixes.tex
+2022/08/23 | 66524 | macros/latex/contrib/l3kernel/l3prg.dtx
+2022/08/23 | 57887 | macros/latex/contrib/l3kernel/l3prop.dtx
+2022/08/23 | 35621 | macros/latex/contrib/l3kernel/l3quark.dtx
+2022/08/23 | 304576 | macros/latex/contrib/l3kernel/l3regex.dtx
+2022/08/23 | 90470 | macros/latex/contrib/l3kernel/l3seq.dtx
+2022/08/23 | 76279 | macros/latex/contrib/l3kernel/l3skip.dtx
+2022/08/23 | 40704 | macros/latex/contrib/l3kernel/l3sort.dtx
+2022/08/23 | 113421 | macros/latex/contrib/l3kernel/l3str-convert.dtx
+2022/08/23 | 78509 | macros/latex/contrib/l3kernel/l3str.dtx
+2022/08/23 | 296239 | macros/latex/contrib/l3kernel/l3styleguide.pdf
+2022/08/23 | 11884 | macros/latex/contrib/l3kernel/l3styleguide.tex
+2022/08/23 | 242906 | macros/latex/contrib/l3kernel/l3syntax-changes.pdf
+2022/08/23 | 6267 | macros/latex/contrib/l3kernel/l3syntax-changes.tex
+2022/08/23 | 33824 | macros/latex/contrib/l3kernel/l3sys.dtx
+2022/08/23 | 231316 | macros/latex/contrib/l3kernel/l3term-glossary.pdf
+2022/08/23 | 6451 | macros/latex/contrib/l3kernel/l3term-glossary.tex
+2022/08/23 | 91938 | macros/latex/contrib/l3kernel/l3text-case.dtx
+2022/08/23 | 43642 | macros/latex/contrib/l3kernel/l3text.dtx
+2022/08/23 | 21653 | macros/latex/contrib/l3kernel/l3text-purify.dtx
+2022/08/23 | 57245 | macros/latex/contrib/l3kernel/l3tl-analysis.dtx
+2022/08/23 | 145318 | macros/latex/contrib/l3kernel/l3tl.dtx
+2022/08/23 | 124233 | macros/latex/contrib/l3kernel/l3token.dtx
+2022/08/23 | 8495 | macros/latex/contrib/l3kernel/l3unicode.dtx
+2022/08/23 | 3929 | macros/latex/contrib/l3kernel/README.md
+2022/08/23 | 24819 | macros/latex/contrib/l3kernel/source3body.tex
+2022/08/23 | 7258705 | macros/latex/contrib/l3kernel/source3.pdf
+2022/08/23 | 2229 | macros/latex/contrib/l3kernel/source3.tex
+2022/08/23 | 13703651 | macros/latex/contrib/l3kernel.zip
2022/06/22 | 6431 | macros/latex/contrib/l3packages/CHANGELOG.md
2022/06/22 | 1444 | macros/latex/contrib/l3packages/l3keys2e-demo.tex
2022/06/22 | 12312 | macros/latex/contrib/l3packages/l3keys2e.dtx
@@ -226679,22 +226980,23 @@
2005/01/14 | 18697 | macros/latex/contrib/pseudocode/pseudocode.tex
2005/01/14 | 341 | macros/latex/contrib/pseudocode/README
2005/04/30 | 137812 | macros/latex/contrib/pseudocode.zip
-2022/07/14 | 375 | macros/latex/contrib/pseudo/doc/fig/hilitefig.tex
-2022/07/14 | 677 | macros/latex/contrib/pseudo/doc/fig/kwfig.tex
-2022/07/14 | 355 | macros/latex/contrib/pseudo/doc/fig/pausefig.tex
-2022/07/14 | 300 | macros/latex/contrib/pseudo/doc/fig/readmecode.tex
-2022/07/14 | 47166 | macros/latex/contrib/pseudo/doc/fig/readmefig.svg
-2022/07/14 | 258 | macros/latex/contrib/pseudo/doc/fig/readmefig.tex
-2022/07/14 | 1184 | macros/latex/contrib/pseudo/doc/pseudo.bib
-2022/07/14 | 949345 | macros/latex/contrib/pseudo/doc/pseudo.pdf
-2022/07/14 | 195099 | macros/latex/contrib/pseudo/doc/pseudo.tex
-2022/07/14 | 1080 | macros/latex/contrib/pseudo/LICENSE
-2022/07/14 | 1470 | macros/latex/contrib/pseudo/Makefile
-2022/07/14 | 29117 | macros/latex/contrib/pseudo/pseudo.sty
-2022/07/14 | 4501 | macros/latex/contrib/pseudo/README.md
-2022/07/14 | 6467 | macros/latex/contrib/pseudo/test/pseudotest.tex
-2022/07/14 | 4 | macros/latex/contrib/pseudo/VERSION
-2022/07/14 | 999824 | macros/latex/contrib/pseudo.zip
+2022/08/23 | 375 | macros/latex/contrib/pseudo/doc/fig/hilitefig.tex
+2022/08/23 | 677 | macros/latex/contrib/pseudo/doc/fig/kwfig.tex
+2022/08/23 | 355 | macros/latex/contrib/pseudo/doc/fig/pausefig.tex
+2022/08/23 | 300 | macros/latex/contrib/pseudo/doc/fig/readmecode.tex
+2022/08/23 | 47166 | macros/latex/contrib/pseudo/doc/fig/readmefig.svg
+2022/08/23 | 258 | macros/latex/contrib/pseudo/doc/fig/readmefig.tex
+2022/08/23 | 1184 | macros/latex/contrib/pseudo/doc/pseudo.bib
+2022/08/23 | 950360 | macros/latex/contrib/pseudo/doc/pseudo.pdf
+2022/08/23 | 195912 | macros/latex/contrib/pseudo/doc/pseudo.tex
+2022/08/23 | 1080 | macros/latex/contrib/pseudo/LICENSE
+2022/08/23 | 1470 | macros/latex/contrib/pseudo/Makefile
+2022/08/23 | 29600 | macros/latex/contrib/pseudo/pseudo.sty
+2022/08/23 | 4501 | macros/latex/contrib/pseudo/README.md
+2022/08/23 | 177 | macros/latex/contrib/pseudo/test/overlaytest.tex
+2022/08/23 | 6467 | macros/latex/contrib/pseudo/test/pseudotest.tex
+2022/08/23 | 6 | macros/latex/contrib/pseudo/VERSION
+2022/08/23 | 1001387 | macros/latex/contrib/pseudo.zip
1998/05/03 | 4069 | macros/latex/contrib/psfrag/00readme.txt
1998/05/03 | 2347 | macros/latex/contrib/psfrag/announce.txt
1996/12/04 | 7894 | macros/latex/contrib/psfrag/example.eps
@@ -276517,7 +276819,7 @@
2021/05/03 | 629 | support/TeX4ht/doc/README
2020/08/24 | 358454 | support/TeX4ht/doc/TeX4ht-doc.tex
2021/05/11 | 262 | support/TeX4ht/README
-2022/08/17 | 200199 | support/TeX4ht/source/ChangeLog
+2022/08/22 | 200387 | support/TeX4ht/source/ChangeLog
2021/05/03 | 1375 | support/TeX4ht/source/checklog.lua
2021/05/03 | 1189 | support/TeX4ht/source/common-code.tex
2021/05/03 | 2727 | support/TeX4ht/source/common-info.tex
@@ -276555,7 +276857,7 @@
2021/05/03 | 14218 | support/TeX4ht/source/tex4ht-htcmd.tex
2021/05/03 | 70683 | support/TeX4ht/source/tex4ht-html0.tex
2021/05/03 | 164748 | support/TeX4ht/source/tex4ht-html32.tex
-2022/08/17 | 617532 | support/TeX4ht/source/tex4ht-html4.tex
+2022/08/22 | 617552 | support/TeX4ht/source/tex4ht-html4.tex
2022/08/11 | 11077 | support/TeX4ht/source/tex4ht-html5.tex
2021/06/17 | 648233 | support/TeX4ht/source/tex4ht-html-speech.tex
2021/05/03 | 59483 | support/TeX4ht/source/tex4ht-html-speech-xtpipes.tex
@@ -282646,7 +282948,7 @@
2022/06/21 | 1616 | systems/texlive/tlnet/archive/collection-mathscience.r63667.tar.xz
2021/06/10 | 548 | systems/texlive/tlnet/archive/collection-metapost.r59531.tar.xz
2021/02/24 | 476 | systems/texlive/tlnet/archive/collection-music.r57878.tar.xz
-2022/07/23 | 1528 | systems/texlive/tlnet/archive/collection-pictures.r63957.tar.xz
+2022/08/23 | 1532 | systems/texlive/tlnet/archive/collection-pictures.r64166.tar.xz
2022/08/14 | 968 | systems/texlive/tlnet/archive/collection-plaingeneric.r64113.tar.xz
2021/12/17 | 812 | systems/texlive/tlnet/archive/collection-pstricks.r61329.tar.xz
2022/07/31 | 1632 | systems/texlive/tlnet/archive/collection-publishers.r64009.tar.xz
@@ -287876,8 +288178,8 @@
2019/02/28 | 1092 | systems/texlive/tlnet/archive/mceinleger.r15878.tar.xz
2021/09/13 | 232948 | systems/texlive/tlnet/archive/mcexam.doc.r60481.tar.xz
2021/09/13 | 11396 | systems/texlive/tlnet/archive/mcexam.r60481.tar.xz
-2022/07/19 | 1037804 | systems/texlive/tlnet/archive/mcf2graph.doc.r63929.tar.xz
-2022/07/19 | 448 | systems/texlive/tlnet/archive/mcf2graph.r63929.tar.xz
+2022/08/23 | 1054764 | systems/texlive/tlnet/archive/mcf2graph.doc.r64164.tar.xz
+2022/08/23 | 448 | systems/texlive/tlnet/archive/mcf2graph.r64164.tar.xz
2019/02/28 | 138716 | systems/texlive/tlnet/archive/mcite.doc.r18173.tar.xz
2019/02/28 | 391980 | systems/texlive/tlnet/archive/mciteplus.doc.r31648.tar.xz
2019/02/28 | 34344 | systems/texlive/tlnet/archive/mciteplus.r31648.tar.xz
@@ -291726,14 +292028,14 @@
2022/02/27 | 108804 | systems/texlive/tlnet/archive/tex4ht.amd64-freebsd.r62206.tar.xz
2022/02/27 | 87364 | systems/texlive/tlnet/archive/tex4ht.amd64-netbsd.r62220.tar.xz
2022/04/21 | 69948 | systems/texlive/tlnet/archive/tex4ht.armhf-linux.r63092.tar.xz
-2022/08/22 | 136384 | systems/texlive/tlnet/archive/tex4ht.doc.r64160.tar.xz
+2022/08/23 | 136380 | systems/texlive/tlnet/archive/tex4ht.doc.r64167.tar.xz
2022/03/01 | 58328 | systems/texlive/tlnet/archive/tex4ht.i386-cygwin.r62282.tar.xz
2022/02/27 | 93760 | systems/texlive/tlnet/archive/tex4ht.i386-freebsd.r62206.tar.xz
2022/02/27 | 91280 | systems/texlive/tlnet/archive/tex4ht.i386-linux.r62210.tar.xz
2022/02/27 | 76200 | systems/texlive/tlnet/archive/tex4ht.i386-netbsd.r62220.tar.xz
2022/02/27 | 83964 | systems/texlive/tlnet/archive/tex4ht.i386-solaris.r62206.tar.xz
-2022/08/22 | 952720 | systems/texlive/tlnet/archive/tex4ht.r64160.tar.xz
-2022/08/22 | 1269884 | systems/texlive/tlnet/archive/tex4ht.source.r64160.tar.xz
+2022/08/23 | 952796 | systems/texlive/tlnet/archive/tex4ht.r64167.tar.xz
+2022/08/23 | 1274208 | systems/texlive/tlnet/archive/tex4ht.source.r64167.tar.xz
2022/02/28 | 184748 | systems/texlive/tlnet/archive/tex4ht.universal-darwin.r62258.tar.xz
2022/02/27 | 57768 | systems/texlive/tlnet/archive/tex4ht.win32.r62199.tar.xz
2022/03/01 | 58016 | systems/texlive/tlnet/archive/tex4ht.x86_64-cygwin.r62279.tar.xz
@@ -291901,7 +292203,7 @@
2022/03/05 | 164864 | systems/texlive/tlnet/archive/tex.i386-solaris.r62391.tar.xz
2019/02/28 | 1956 | systems/texlive/tlnet/archive/texilikechaps.r28553.tar.xz
2019/02/28 | 956 | systems/texlive/tlnet/archive/texilikecover.r15878.tar.xz
-2022/08/21 | 96824 | systems/texlive/tlnet/archive/texinfo.r64153.tar.xz
+2022/08/23 | 96828 | systems/texlive/tlnet/archive/texinfo.r64163.tar.xz
2019/02/28 | 1336 | systems/texlive/tlnet/archive/tex-ini-files.doc.r40533.tar.xz
2019/02/28 | 3264 | systems/texlive/tlnet/archive/tex-ini-files.r40533.tar.xz
2019/02/28 | 36596 | systems/texlive/tlnet/archive/tex-label.doc.r16372.tar.xz
@@ -291968,7 +292270,7 @@
2020/05/17 | 592 | systems/texlive/tlnet/archive/texlive-scripts.amd64-freebsd.r55172.tar.xz
2020/05/17 | 588 | systems/texlive/tlnet/archive/texlive-scripts.amd64-netbsd.r55172.tar.xz
2020/05/17 | 592 | systems/texlive/tlnet/archive/texlive-scripts.armhf-linux.r55172.tar.xz
-2022/08/22 | 419432 | systems/texlive/tlnet/archive/texlive-scripts.doc.r64159.tar.xz
+2022/08/23 | 419528 | systems/texlive/tlnet/archive/texlive-scripts.doc.r64163.tar.xz
2020/01/27 | 916 | systems/texlive/tlnet/archive/texlive-scripts-extra.aarch64-linux.r53577.tar.xz
2020/01/27 | 924 | systems/texlive/tlnet/archive/texlive-scripts-extra.amd64-freebsd.r53577.tar.xz
2020/01/27 | 916 | systems/texlive/tlnet/archive/texlive-scripts-extra.amd64-netbsd.r53577.tar.xz
@@ -291992,7 +292294,7 @@
2020/05/17 | 588 | systems/texlive/tlnet/archive/texlive-scripts.i386-linux.r55172.tar.xz
2020/05/17 | 592 | systems/texlive/tlnet/archive/texlive-scripts.i386-netbsd.r55172.tar.xz
2020/05/17 | 588 | systems/texlive/tlnet/archive/texlive-scripts.i386-solaris.r55172.tar.xz
-2022/08/22 | 113508 | systems/texlive/tlnet/archive/texlive-scripts.r64159.tar.xz
+2022/08/23 | 113476 | systems/texlive/tlnet/archive/texlive-scripts.r64163.tar.xz
2021/02/25 | 572 | systems/texlive/tlnet/archive/texlive-scripts.universal-darwin.r57908.tar.xz
2022/04/19 | 36296 | systems/texlive/tlnet/archive/texlive-scripts.win32.r63068.tar.xz
2020/05/17 | 588 | systems/texlive/tlnet/archive/texlive-scripts.x86_64-cygwin.r55172.tar.xz
@@ -292341,6 +292643,8 @@
2019/02/28 | 2000 | systems/texlive/tlnet/archive/tikz-dimline.r35805.tar.xz
2020/07/01 | 447640 | systems/texlive/tlnet/archive/tikzducks.doc.r55713.tar.xz
2020/07/01 | 17952 | systems/texlive/tlnet/archive/tikzducks.r55713.tar.xz
+2022/08/23 | 346904 | systems/texlive/tlnet/archive/tikz-ext.doc.r64166.tar.xz
+2022/08/23 | 15716 | systems/texlive/tlnet/archive/tikz-ext.r64166.tar.xz
2019/08/21 | 316036 | systems/texlive/tlnet/archive/tikz-feynhand.doc.r51915.tar.xz
2019/08/21 | 6912 | systems/texlive/tlnet/archive/tikz-feynhand.r51915.tar.xz
2020/10/10 | 322304 | systems/texlive/tlnet/archive/tikz-feynman.doc.r56615.tar.xz
@@ -292793,9 +293097,9 @@
2019/02/28 | 13868 | systems/texlive/tlnet/archive/uaclasses.source.r15878.tar.xz
2021/01/08 | 30020 | systems/texlive/tlnet/archive/uafthesis.doc.r57349.tar.xz
2021/01/08 | 7548 | systems/texlive/tlnet/archive/uafthesis.r57349.tar.xz
-2021/11/12 | 4529528 | systems/texlive/tlnet/archive/uantwerpendocs.doc.r61030.tar.xz
-2021/11/12 | 6475680 | systems/texlive/tlnet/archive/uantwerpendocs.r61030.tar.xz
-2021/11/12 | 43136 | systems/texlive/tlnet/archive/uantwerpendocs.source.r61030.tar.xz
+2022/08/23 | 4343048 | systems/texlive/tlnet/archive/uantwerpendocs.doc.r64165.tar.xz
+2022/08/23 | 6475900 | systems/texlive/tlnet/archive/uantwerpendocs.r64165.tar.xz
+2022/08/23 | 43988 | systems/texlive/tlnet/archive/uantwerpendocs.source.r64165.tar.xz
2019/02/28 | 106832 | systems/texlive/tlnet/archive/uassign.doc.r38459.tar.xz
2019/02/28 | 1984 | systems/texlive/tlnet/archive/uassign.r38459.tar.xz
2019/10/25 | 123580 | systems/texlive/tlnet/archive/ucalgmthesis.doc.r52527.tar.xz
@@ -293817,16 +294121,16 @@
2020/07/18 | 47816 | systems/texlive/tlnet/archive/zztex.doc.r55862.tar.xz
2020/07/18 | 101724 | systems/texlive/tlnet/archive/zztex.r55862.tar.xz
2022/07/17 | 124404 | systems/texlive/tlnet/install-tl
-2022/08/22 | 5831657 | systems/texlive/tlnet/install-tl-unx.tar.gz
-2022/08/22 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
-2022/08/22 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
+2022/08/23 | 5831652 | systems/texlive/tlnet/install-tl-unx.tar.gz
+2022/08/23 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
+2022/08/23 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
2021/04/11 | 4945 | systems/texlive/tlnet/install-tl-windows.bat
-2022/08/22 | 20434101 | systems/texlive/tlnet/install-tl-windows.exe
-2022/08/22 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
-2022/08/22 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
-2022/08/22 | 25516433 | systems/texlive/tlnet/install-tl.zip
-2022/08/22 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
-2022/08/22 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc
+2022/08/23 | 20435767 | systems/texlive/tlnet/install-tl-windows.exe
+2022/08/23 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
+2022/08/23 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
+2022/08/23 | 25516419 | systems/texlive/tlnet/install-tl.zip
+2022/08/23 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
+2022/08/23 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc
2022/04/03 | 1229 | systems/texlive/tlnet/README.md
2022/04/03 | 0 | systems/texlive/tlnet/TEXLIVE_2022
2022/02/28 | 7791 | systems/texlive/tlnet/tlpkg/gpg/pubring.gpg
@@ -293836,7 +294140,7 @@
2022/02/28 | 1280 | systems/texlive/tlnet/tlpkg/gpg/trustdb.gpg
2022/05/27 | 49794 | systems/texlive/tlnet/tlpkg/installer/config.guess
2010/11/11 | 11651 | systems/texlive/tlnet/tlpkg/installer/COPYING.MinGW-runtime.txt
-2022/08/21 | 7264 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
+2022/08/22 | 7165 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
2022/07/21 | 222477 | systems/texlive/tlnet/tlpkg/installer/curl/curl-ca-bundle.crt
2020/04/15 | 2606592 | systems/texlive/tlnet/tlpkg/installer/curl/curl.exe
2017/04/16 | 2629 | systems/texlive/tlnet/tlpkg/installer/installer-options.txt
@@ -293879,12 +294183,12 @@
2021/05/16 | 20371 | systems/texlive/tlnet/tlpkg/TeXLive/TLCrypto.pm
2021/12/21 | 5429 | systems/texlive/tlnet/tlpkg/TeXLive/TLDownload.pm
2021/12/21 | 27582 | systems/texlive/tlnet/tlpkg/TeXLive/TLPaper.pm
-2022/08/22 | 17585067 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
-2022/08/22 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
+2022/08/23 | 17588361 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
+2022/08/23 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
2022/04/18 | 86658 | systems/texlive/tlnet/tlpkg/TeXLive/TLPDB.pm
-2022/08/22 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
-2022/08/22 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
-2022/08/22 | 2399116 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
+2022/08/23 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
+2022/08/23 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
+2022/08/23 | 2399768 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
2021/12/21 | 58848 | systems/texlive/tlnet/tlpkg/TeXLive/TLPOBJ.pm
2022/08/01 | 42206 | systems/texlive/tlnet/tlpkg/TeXLive/TLPSRC.pm
2021/12/21 | 16130 | systems/texlive/tlnet/tlpkg/TeXLive/TLTREE.pm
@@ -299158,7 +299462,7 @@
2020/10/03 | 318630 | systems/win32/miktex/tm/packages/filehook.tar.lzma
2012/12/04 | 924573 | systems/win32/miktex/tm/packages/fileinfo.tar.lzma
2011/09/21 | 281409 | systems/win32/miktex/tm/packages/filemod.tar.lzma
-2022/08/22 | 659342 | systems/win32/miktex/tm/packages/files.csv.lzma
+2022/08/23 | 659342 | systems/win32/miktex/tm/packages/files.csv.lzma
2001/05/14 | 5617 | systems/win32/miktex/tm/packages/finbib.tar.lzma
2015/10/20 | 44379 | systems/win32/miktex/tm/packages/findhyph.tar.lzma
2011/10/21 | 89323 | systems/win32/miktex/tm/packages/fink.tar.lzma
@@ -300840,9 +301144,9 @@
2018/01/12 | 157226 | systems/win32/miktex/tm/packages/miktex-zip-bin-x64.tar.lzma
2022/07/26 | 39695 | systems/win32/miktex/tm/packages/miktex-zlib-bin-2.9.tar.lzma
2022/08/13 | 43580 | systems/win32/miktex/tm/packages/miktex-zlib-bin-x64-2.9.tar.lzma
-2022/08/22 | 289527 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma
-2022/08/22 | 1483644 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma
-2022/08/22 | 1365341 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma
+2022/08/23 | 289512 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma
+2022/08/23 | 1483459 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma
+2022/08/23 | 1364392 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma
2022/07/26 | 13519 | systems/win32/miktex/tm/packages/miktex-zzip-bin-2.9.tar.lzma
2022/08/13 | 14417 | systems/win32/miktex/tm/packages/miktex-zzip-bin-x64-2.9.tar.lzma
2016/07/15 | 35914 | systems/win32/miktex/tm/packages/mil3.tar.lzma
@@ -301083,102 +301387,102 @@
2018/04/09 | 400132 | systems/win32/miktex/tm/packages/newunicodechar.tar.lzma
2011/09/19 | 101312 | systems/win32/miktex/tm/packages/newvbtm.tar.lzma
2021/03/17 | 232249 | systems/win32/miktex/tm/packages/newverbs.tar.lzma
-2022/08/22 | 659852 | systems/win32/miktex/tm/packages/next/files.csv.lzma
-2022/08/22 | 57317 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma
-2022/08/22 | 1161752 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma
-2022/08/22 | 31589 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma
-2022/08/22 | 35265 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma
-2022/08/22 | 65131 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma
-2022/08/22 | 95469 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma
-2022/08/22 | 77211 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma
-2022/08/22 | 31563 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma
-2022/08/22 | 394143 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma
-2022/08/22 | 37051 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma
-2022/08/22 | 57507 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma
-2022/08/22 | 270468 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma
-2022/08/22 | 196212 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma
-2022/08/22 | 103247 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma
-2022/08/22 | 24211 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma
-2022/08/22 | 481895 | systems/win32/miktex/tm/packages/next/miktex-doc.tar.lzma
-2022/08/22 | 52038 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma
-2022/08/22 | 325980 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma
-2022/08/22 | 45795 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma
-2022/08/22 | 135467 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma
-2022/08/22 | 1458151 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma
-2022/08/22 | 112978 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma
-2022/08/22 | 48851 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma
-2022/08/22 | 28511 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma
-2022/08/22 | 63241 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma
-2022/08/22 | 155431 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma
-2022/08/22 | 79065 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma
-2022/08/22 | 81449 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma
-2022/08/22 | 295945 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma
-2022/08/22 | 25119 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma
-2022/08/22 | 112880 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma
-2022/08/22 | 73263 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma
-2022/08/22 | 115579 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma
-2022/08/22 | 43890 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma
-2022/08/22 | 565081 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma
-2022/08/22 | 247209 | systems/win32/miktex/tm/packages/next/miktex-hitex-bin-x64.tar.lzma
-2022/08/22 | 169679 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma
-2022/08/22 | 109650 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma
-2022/08/22 | 18382 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma
-2022/08/22 | 30571 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma
-2022/08/22 | 682216 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma
-2022/08/22 | 599104 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma
-2022/08/22 | 527571 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma
-2022/08/22 | 103599 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma
-2022/08/22 | 2023133 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma
-2022/08/22 | 74100 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma
-2022/08/22 | 32075 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma
-2022/08/22 | 8827 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma
-2022/08/22 | 209139 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma
-2022/08/22 | 286685 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma
-2022/08/22 | 104922 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma
-2022/08/22 | 140012 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma
-2022/08/22 | 325485 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma
-2022/08/22 | 181725 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma
-2022/08/22 | 55321 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma
-2022/08/22 | 35232 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma
-2022/08/22 | 43617 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma
-2022/08/22 | 48038 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma
-2022/08/22 | 52369 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma
-2022/08/22 | 213849 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-x64-2.9.tar.lzma
-2022/08/22 | 41181 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin-x64.tar.lzma
-2022/08/22 | 824995 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma
-2022/08/22 | 203420 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma
-2022/08/22 | 245152 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma
-2022/08/22 | 88484 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma
-2022/08/22 | 1323746 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma
-2022/08/22 | 23949 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma
-2022/08/22 | 37505 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma
-2022/08/22 | 72980 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma
-2022/08/22 | 58634 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma
-2022/08/22 | 769652 | systems/win32/miktex/tm/packages/next/miktex-ptex-bin-x64.tar.lzma
-2022/08/22 | 1503052 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma
-2022/08/22 | 52629 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma
-2022/08/22 | 63803 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64.tar.lzma
-2022/08/22 | 27460 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma
-2022/08/22 | 18511 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma
-2022/08/22 | 70940 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma
-2022/08/22 | 173178 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma
-2022/08/22 | 68147 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma
-2022/08/22 | 107436 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma
-2022/08/22 | 2821671 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma
-2022/08/22 | 62360 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma
-2022/08/22 | 41191 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin-x64.tar.lzma
-2022/08/22 | 33863 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma
-2022/08/22 | 73686 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma
-2022/08/22 | 352465 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma
-2022/08/22 | 57502 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin-x64.tar.lzma
-2022/08/22 | 630436 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma
-2022/08/22 | 43527 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma
-2022/08/22 | 289530 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma
-2022/08/22 | 1481317 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma
-2022/08/22 | 1363460 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma
-2022/08/22 | 14434 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma
+2022/08/23 | 659852 | systems/win32/miktex/tm/packages/next/files.csv.lzma
+2022/08/23 | 57318 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma
+2022/08/23 | 1161753 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma
+2022/08/23 | 31588 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma
+2022/08/23 | 35265 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma
+2022/08/23 | 65130 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma
+2022/08/23 | 95471 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma
+2022/08/23 | 77212 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma
+2022/08/23 | 31563 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma
+2022/08/23 | 394142 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma
+2022/08/23 | 37051 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma
+2022/08/23 | 57504 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma
+2022/08/23 | 270467 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma
+2022/08/23 | 196212 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma
+2022/08/23 | 103247 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma
+2022/08/23 | 24212 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma
+2022/08/23 | 481894 | systems/win32/miktex/tm/packages/next/miktex-doc.tar.lzma
+2022/08/23 | 52038 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma
+2022/08/23 | 325980 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma
+2022/08/23 | 45795 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma
+2022/08/23 | 135465 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma
+2022/08/23 | 1458151 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma
+2022/08/23 | 112978 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma
+2022/08/23 | 48852 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma
+2022/08/23 | 28511 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma
+2022/08/23 | 63241 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma
+2022/08/23 | 155429 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma
+2022/08/23 | 79065 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma
+2022/08/23 | 81450 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma
+2022/08/23 | 295945 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma
+2022/08/23 | 25117 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma
+2022/08/23 | 112879 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma
+2022/08/23 | 73263 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma
+2022/08/23 | 115579 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma
+2022/08/23 | 43889 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma
+2022/08/23 | 565082 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma
+2022/08/23 | 247208 | systems/win32/miktex/tm/packages/next/miktex-hitex-bin-x64.tar.lzma
+2022/08/23 | 169678 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma
+2022/08/23 | 109650 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma
+2022/08/23 | 18383 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma
+2022/08/23 | 30571 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma
+2022/08/23 | 682215 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma
+2022/08/23 | 599106 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma
+2022/08/23 | 527570 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma
+2022/08/23 | 103599 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma
+2022/08/23 | 2023133 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma
+2022/08/23 | 74099 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma
+2022/08/23 | 32074 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma
+2022/08/23 | 8826 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma
+2022/08/23 | 209139 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma
+2022/08/23 | 286686 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma
+2022/08/23 | 104922 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma
+2022/08/23 | 140013 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma
+2022/08/23 | 325485 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma
+2022/08/23 | 181725 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma
+2022/08/23 | 55320 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma
+2022/08/23 | 35231 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma
+2022/08/23 | 43617 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma
+2022/08/23 | 48038 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma
+2022/08/23 | 52369 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma
+2022/08/23 | 213847 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-x64-2.9.tar.lzma
+2022/08/23 | 41179 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin-x64.tar.lzma
+2022/08/23 | 824996 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma
+2022/08/23 | 203422 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma
+2022/08/23 | 245151 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma
+2022/08/23 | 88484 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma
+2022/08/23 | 1323746 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma
+2022/08/23 | 23949 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma
+2022/08/23 | 37509 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma
+2022/08/23 | 72978 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma
+2022/08/23 | 58634 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma
+2022/08/23 | 769654 | systems/win32/miktex/tm/packages/next/miktex-ptex-bin-x64.tar.lzma
+2022/08/23 | 1503050 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma
+2022/08/23 | 52628 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma
+2022/08/23 | 63803 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64.tar.lzma
+2022/08/23 | 27465 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma
+2022/08/23 | 18512 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma
+2022/08/23 | 70940 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma
+2022/08/23 | 173177 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma
+2022/08/23 | 68148 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma
+2022/08/23 | 107438 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma
+2022/08/23 | 2821672 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma
+2022/08/23 | 62360 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma
+2022/08/23 | 41191 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin-x64.tar.lzma
+2022/08/23 | 33862 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma
+2022/08/23 | 73687 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma
+2022/08/23 | 352465 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma
+2022/08/23 | 57502 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin-x64.tar.lzma
+2022/08/23 | 630434 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma
+2022/08/23 | 43527 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma
+2022/08/23 | 289494 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma
+2022/08/23 | 1481656 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma
+2022/08/23 | 1363971 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma
+2022/08/23 | 14435 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma
2019/03/12 | 1412 | systems/win32/miktex/tm/packages/nextpage.tar.lzma
-2022/08/22 | 1172 | systems/win32/miktex/tm/packages/next/pr.ini
+2022/08/23 | 1172 | systems/win32/miktex/tm/packages/next/pr.ini
2018/07/06 | 145915 | systems/win32/miktex/tm/packages/nexus-otf.tar.lzma
2017/03/30 | 191149 | systems/win32/miktex/tm/packages/nfssext-cfr.tar.lzma
2012/12/20 | 612251 | systems/win32/miktex/tm/packages/nicefilelist.tar.lzma
@@ -301667,7 +301971,7 @@
2022/02/22 | 6917 | systems/win32/miktex/tm/packages/preview.tar.lzma
2019/06/20 | 375963 | systems/win32/miktex/tm/packages/prftree.tar.lzma
2021/04/23 | 274028 | systems/win32/miktex/tm/packages/principia.tar.lzma
-2022/08/22 | 933 | systems/win32/miktex/tm/packages/pr.ini
+2022/08/23 | 933 | systems/win32/miktex/tm/packages/pr.ini
2010/09/27 | 248469 | systems/win32/miktex/tm/packages/printlen.tar.lzma
2008/06/17 | 77313 | systems/win32/miktex/tm/packages/proba.tar.lzma
2017/07/12 | 988486 | systems/win32/miktex/tm/packages/probsoln.tar.lzma
@@ -303606,7 +303910,7 @@
2004/06/04 | 404 | tds/tds.sed
2004/06/23 | 65418 | tds/tds.tex
2019/05/29 | 304264 | tds.zip
-2022/08/23 | 186 | timestamp
+2022/08/24 | 186 | timestamp
2002/08/26 | 61898 | usergrps/dante/antrag.pdf
2002/08/26 | 118217 | usergrps/dante/antrag.ps
2022/02/28 | 917 | usergrps/dante/dtk/doc/beispiel.bib
diff --git a/FILES.byname.gz b/FILES.byname.gz
index 1035a2e0b9..743a3a3daf 100644
--- a/FILES.byname.gz
+++ b/FILES.byname.gz
Binary files differ
diff --git a/FILES.last07days b/FILES.last07days
index b962eb1b56..fc05d43783 100644
--- a/FILES.last07days
+++ b/FILES.last07days
@@ -1,202 +1,850 @@
-2022/08/22 | 95469 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma
-2022/08/22 | 952720 | systems/texlive/tlnet/archive/tex4ht.r64160.tar.xz
-2022/08/22 | 933 | systems/win32/miktex/tm/packages/pr.ini
-2022/08/22 | 88484 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma
-2022/08/22 | 8827 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma
-2022/08/22 | 824995 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma
-2022/08/22 | 81449 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma
+2022/08/23 | 9999 | macros/latex/contrib/l3kernel/l3news10.tex
+2022/08/23 | 98977 | graphics/pstricks/contrib/pst-barcode/doc/images/databarexpandedstackedcomposite-1.eps
+2022/08/23 | 9872 | graphics/pstricks/contrib/pst-barcode/doc/images/kix-1.eps
+2022/08/23 | 9774 | graphics/pstricks/contrib/pst-barcode/doc/images/ean2-1.eps
+2022/08/23 | 97583 | graphics/pstricks/contrib/pst-barcode/doc/images/databarexpandedcomposite-1.eps
+2022/08/23 | 968344 | install/macros/latex/contrib/l3backend.tds.zip
+2022/08/23 | 96828 | systems/texlive/tlnet/archive/texinfo.r64163.tar.xz
+2022/08/23 | 9620 | graphics/pstricks/contrib/pst-barcode/doc/images/codeone-4.eps
+2022/08/23 | 9604 | graphics/pstricks/contrib/pst-barcode/doc/images/codeone-3.eps
+2022/08/23 | 9598 | graphics/pstricks/contrib/pst-barcode/doc/images/codeone-2.eps
+2022/08/23 | 9580 | graphics/pstricks/contrib/pst-barcode/doc/images/codeone-1.eps
+2022/08/23 | 95471 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma
+2022/08/23 | 952796 | systems/texlive/tlnet/archive/tex4ht.r64167.tar.xz
+2022/08/23 | 950360 | macros/latex/contrib/pseudo/doc/pseudo.pdf
+2022/08/23 | 9478 | graphics/pstricks/contrib/pst-barcode/doc/images/pharmacode2-1.eps
+2022/08/23 | 9465 | macros/latex/contrib/l3kernel/l3news08.tex
+2022/08/23 | 9443 | graphics/pstricks/contrib/pst-barcode/doc/images/pharmacode-1.eps
+2022/08/23 | 9436 | macros/latex/contrib/l3kernel/l3flag.dtx
+2022/08/23 | 94011 | graphics/pstricks/contrib/pst-barcode/doc/images/upcecomposite-1.eps
+2022/08/23 | 93870 | graphics/pstricks/contrib/pst-barcode/doc/images/ean128composite-2.eps
+2022/08/23 | 93782 | graphics/pstricks/contrib/pst-barcode/doc/images/ean128composite-1.eps
+2022/08/23 | 933 | systems/win32/miktex/tm/packages/pr.ini
+2022/08/23 | 9339 | graphics/pstricks/contrib/pst-barcode/doc/images/flattermarken-1.eps
+2022/08/23 | 932092 | macros/latex/contrib/l3backend/l3backend-code.pdf
+2022/08/23 | 931318 | macros/latex/contrib/l3backend.zip
+2022/08/23 | 93029 | graphics/pstricks/contrib/pst-barcode/doc/images/upcacomposite-1.eps
+2022/08/23 | 923 | macros/latex/contrib/hereapplies/hereapplies-example.tex
+2022/08/23 | 92354 | graphics/pstricks/contrib/pst-barcode/doc/images/ean13composite-1.eps
+2022/08/23 | 92350 | graphics/pstricks/contrib/pst-barcode/doc/images/databartruncatedcomposite-1.eps
+2022/08/23 | 92324 | graphics/pstricks/contrib/pst-barcode/doc/images/databarstackedomnicomposite-1.eps
+2022/08/23 | 92164 | graphics/pstricks/contrib/pst-barcode/doc/images/databarstackedcomposite-1.eps
+2022/08/23 | 91938 | macros/latex/contrib/l3kernel/l3text-case.dtx
+2022/08/23 | 91892 | graphics/pstricks/contrib/pst-barcode/doc/images/ean8composite-1.eps
+2022/08/23 | 9173 | graphics/pstricks/contrib/pst-barcode/doc/images/fimd-1.eps
+2022/08/23 | 9173 | graphics/pstricks/contrib/pst-barcode/doc/images/fimc-1.eps
+2022/08/23 | 9173 | graphics/pstricks/contrib/pst-barcode/doc/images/fimb-1.eps
+2022/08/23 | 9173 | graphics/pstricks/contrib/pst-barcode/doc/images/fima-1.eps
+2022/08/23 | 90470 | macros/latex/contrib/l3kernel/l3seq.dtx
+2022/08/23 | 90042 | graphics/pstricks/contrib/pst-barcode/doc/images/databaromnicomposite-1.eps
+2022/08/23 | 90018 | macros/latex/contrib/l3kernel/l3int.dtx
+2022/08/23 | 8977 | graphics/pstricks/contrib/pst-barcode/doc/images/daft-1.eps
+2022/08/23 | 88484 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma
+2022/08/23 | 8826 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma
+2022/08/23 | 87596 | graphics/pstricks/contrib/pst-barcode/doc/images/databarlimitedcomposite-1.eps
+2022/08/23 | 87493 | macros/latex/contrib/l3kernel/l3coffins.dtx
+2022/08/23 | 8673 | graphics/pstricks/contrib/pst-barcode/doc/images/raw-1.eps
+2022/08/23 | 8532 | macros/latex/contrib/l3backend/CHANGELOG.md
+2022/08/23 | 8495 | macros/latex/contrib/l3kernel/l3unicode.dtx
+2022/08/23 | 8481 | macros/latex/contrib/l3kernel/l3news11.tex
+2022/08/23 | 84785 | macros/latex/contrib/l3kernel/l3fp-basics.dtx
+2022/08/23 | 82707 | macros/latex/contrib/l3kernel/l3clist.dtx
+2022/08/23 | 824996 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma
+2022/08/23 | 8190 | macros/latex/contrib/l3backend/l3backend-opacity.dtx
+2022/08/23 | 81567 | macros/latex/contrib/l3kernel/l3prefixes.pdf
+2022/08/23 | 81450 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma
+2022/08/23 | 80495 | macros/latex/contrib/l3kernel/l3names.dtx
+2022/08/23 | 79792 | macros/latex/contrib/l3kernel/l3box.dtx
+2022/08/23 | 79065 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma
+2022/08/23 | 78509 | macros/latex/contrib/l3kernel/l3str.dtx
+2022/08/23 | 77212 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma
+2022/08/23 | 769654 | systems/win32/miktex/tm/packages/next/miktex-ptex-bin-x64.tar.lzma
+2022/08/23 | 76279 | macros/latex/contrib/l3kernel/l3skip.dtx
+2022/08/23 | 74622 | graphics/pstricks/contrib/pst-barcode/doc/images/gs1composite-3.eps
+2022/08/23 | 74596 | graphics/pstricks/contrib/pst-barcode/doc/images/gs1composite-2.eps
+2022/08/23 | 74571 | graphics/pstricks/contrib/pst-barcode/doc/images/gs1composite-1.eps
+2022/08/23 | 7454 | macros/latex/contrib/l3kernel/l3fp-assign.dtx
+2022/08/23 | 74099 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma
+2022/08/23 | 74049 | macros/latex/contrib/l3kernel/l3msg.dtx
+2022/08/23 | 73835 | macros/latex/contrib/l3kernel/l3fp-trig.dtx
+2022/08/23 | 73687 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma
+2022/08/23 | 73573 | graphics/pstricks/contrib/pst-barcode/doc/images/code49-3.eps
+2022/08/23 | 73509 | graphics/pstricks/contrib/pst-barcode/doc/images/code49-1.eps
+2022/08/23 | 73487 | graphics/pstricks/contrib/pst-barcode/doc/images/code49-2.eps
+2022/08/23 | 73263 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma
+2022/08/23 | 72978 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma
+2022/08/23 | 7258705 | macros/latex/contrib/l3kernel/source3.pdf
+2022/08/23 | 70940 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma
+2022/08/23 | 70693 | macros/latex/contrib/l3kernel/expl3.dtx
+2022/08/23 | 70578 | macros/latex/contrib/l3kernel/l3fp.dtx
+2022/08/23 | 70267 | macros/latex/contrib/hereapplies.zip
+2022/08/23 | 6 | macros/latex/contrib/pseudo/VERSION
+2022/08/23 | 69260 | macros/latex/contrib/l3kernel/l3candidates.dtx
+2022/08/23 | 68670 | graphics/pstricks/contrib/pst-barcode/doc/images/swissqrcode-1.eps
+2022/08/23 | 682215 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma
+2022/08/23 | 68148 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma
+2022/08/23 | 677 | macros/latex/contrib/pseudo/doc/fig/kwfig.tex
+2022/08/23 | 6677 | macros/latex/contrib/l3kernel/l3news02.tex
+2022/08/23 | 66524 | macros/latex/contrib/l3kernel/l3prg.dtx
+2022/08/23 | 659852 | systems/win32/miktex/tm/packages/next/files.csv.lzma
+2022/08/23 | 659342 | systems/win32/miktex/tm/packages/files.csv.lzma
+2022/08/23 | 65130 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma
+2022/08/23 | 6482 | macros/latex/contrib/l3kernel/l3news03.tex
+2022/08/23 | 6475900 | systems/texlive/tlnet/archive/uantwerpendocs.r64165.tar.xz
+2022/08/23 | 6467 | macros/latex/contrib/pseudo/test/pseudotest.tex
+2022/08/23 | 6451 | macros/latex/contrib/l3kernel/l3term-glossary.tex
+2022/08/23 | 6433 | macros/latex/contrib/l3kernel/l3news06.tex
+2022/08/23 | 63803 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64.tar.lzma
+2022/08/23 | 63241 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma
+2022/08/23 | 630434 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma
+2022/08/23 | 6267 | macros/latex/contrib/l3kernel/l3syntax-changes.tex
+2022/08/23 | 626173 | macros/latex/contrib/l3kernel/expl3.pdf
+2022/08/23 | 625 | macros/latex/contrib/hereapplies/package.json
+2022/08/23 | 62360 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma
+2022/08/23 | 6182 | macros/latex/contrib/l3kernel/l3.ins
+2022/08/23 | 599106 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma
+2022/08/23 | 58634 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma
+2022/08/23 | 5831652 | systems/texlive/tlnet/install-tl-unx.tar.gz
+2022/08/23 | 57887 | macros/latex/contrib/l3kernel/l3prop.dtx
+2022/08/23 | 57504 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma
+2022/08/23 | 57502 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin-x64.tar.lzma
+2022/08/23 | 5749 | macros/latex/contrib/hereapplies/README.md
+2022/08/23 | 57318 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma
+2022/08/23 | 57245 | macros/latex/contrib/l3kernel/l3tl-analysis.dtx
+2022/08/23 | 565082 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma
+2022/08/23 | 557782 | macros/latex/contrib/l3kernel/l3doc.pdf
+2022/08/23 | 55320 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma
+2022/08/23 | 549 | macros/latex/contrib/l3backend/README.md
+2022/08/23 | 54645 | graphics/pstricks/contrib/pst-barcode/doc/images/gs1dotcode-1.eps
+2022/08/23 | 5429 | macros/latex/contrib/l3kernel/l3news04.tex
+2022/08/23 | 527570 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma
+2022/08/23 | 52628 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma
+2022/08/23 | 52369 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma
+2022/08/23 | 52038 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma
+2022/08/23 | 51059 | macros/latex/contrib/l3kernel/l3fp-extended.dtx
+2022/08/23 | 50241 | macros/latex/contrib/l3backend/l3backend-pdf.dtx
+2022/08/23 | 5008 | macros/latex/contrib/hereapplies/lyx-module/hereapplies-example.lyx
+2022/08/23 | 4977 | macros/latex/contrib/l3kernel/l3news07.tex
+2022/08/23 | 49778 | macros/latex/contrib/hereapplies/hereapplies-example.pdf
+2022/08/23 | 4937 | macros/latex/contrib/l3kernel/l3news01.tex
+2022/08/23 | 49311 | macros/latex/contrib/l3kernel/l3fp-expo.dtx
+2022/08/23 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
+2022/08/23 | 4890 | macros/latex/contrib/l3kernel/l3news.tex
+2022/08/23 | 48852 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma
+2022/08/23 | 481894 | systems/win32/miktex/tm/packages/next/miktex-doc.tar.lzma
+2022/08/23 | 48038 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma
+2022/08/23 | 47216 | macros/latex/contrib/l3kernel/l3fp-aux.dtx
+2022/08/23 | 4716 | macros/latex/contrib/l3kernel/l3news05.tex
+2022/08/23 | 47166 | macros/latex/contrib/pseudo/doc/fig/readmefig.svg
+2022/08/23 | 45795 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma
+2022/08/23 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
+2022/08/23 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc
+2022/08/23 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
+2022/08/23 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
+2022/08/23 | 4538 | macros/latex/contrib/l3kernel/l3legacy.dtx
+2022/08/23 | 450 | graphics/pstricks/contrib/pst-barcode/latex/pst-barcode.sty
+2022/08/23 | 4501 | macros/latex/contrib/pseudo/README.md
+2022/08/23 | 448 | systems/texlive/tlnet/archive/mcf2graph.r64164.tar.xz
+2022/08/23 | 44804 | macros/latex/contrib/l3kernel/l3prefixes.csv
+2022/08/23 | 43988 | systems/texlive/tlnet/archive/uantwerpendocs.source.r64165.tar.xz
+2022/08/23 | 43889 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma
+2022/08/23 | 43642 | macros/latex/contrib/l3kernel/l3text.dtx
+2022/08/23 | 43617 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma
+2022/08/23 | 43527 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma
+2022/08/23 | 4343048 | systems/texlive/tlnet/archive/uantwerpendocs.doc.r64165.tar.xz
+2022/08/23 | 43212 | macros/latex/contrib/l3kernel/l3debug.dtx
+2022/08/23 | 4277 | macros/latex/contrib/beamer-contrib/beamerswitch/README.md
+2022/08/23 | 4265 | macros/latex/contrib/l3backend/l3backend.ins
+2022/08/23 | 419528 | systems/texlive/tlnet/archive/texlive-scripts.doc.r64163.tar.xz
+2022/08/23 | 41487 | macros/latex/contrib/l3backend/l3backend-color.dtx
+2022/08/23 | 41191 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin-x64.tar.lzma
+2022/08/23 | 41179 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin-x64.tar.lzma
+2022/08/23 | 40704 | macros/latex/contrib/l3kernel/l3sort.dtx
+2022/08/23 | 40666 | macros/latex/contrib/l3kernel/CHANGELOG.md
+2022/08/23 | 395879 | macros/latex/contrib/l3kernel/l3news.pdf
+2022/08/23 | 394142 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma
+2022/08/23 | 3929 | macros/latex/contrib/l3kernel/README.md
+2022/08/23 | 3790488 | graphics/pstricks/contrib/pst-barcode.zip
+2022/08/23 | 375 | macros/latex/contrib/pseudo/doc/fig/hilitefig.tex
+2022/08/23 | 37509 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma
+2022/08/23 | 37051 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma
+2022/08/23 | 36621 | macros/latex/contrib/beamer-contrib/beamerswitch/beamerswitch-example.pdf
+2022/08/23 | 36435 | graphics/pstricks/contrib/pst-barcode/doc/images/hibcmicropdf417-1.eps
+2022/08/23 | 35621 | macros/latex/contrib/l3kernel/l3quark.dtx
+2022/08/23 | 355 | macros/latex/contrib/pseudo/doc/fig/pausefig.tex
+2022/08/23 | 35265 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma
+2022/08/23 | 352465 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma
+2022/08/23 | 35231 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma
+2022/08/23 | 34723 | graphics/pstricks/contrib/pst-barcode/doc/images/hibcpdf417-1.eps
+2022/08/23 | 346904 | systems/texlive/tlnet/archive/tikz-ext.doc.r64166.tar.xz
+2022/08/23 | 3458 | graphics/pstricks/contrib/pst-barcode/README.md
+2022/08/23 | 34523 | macros/latex/contrib/hereapplies/COPYING
+2022/08/23 | 34288 | macros/latex/contrib/l3backend/l3backend-draw.dtx
+2022/08/23 | 34166 | macros/latex/contrib/l3kernel/l3intarray.dtx
+2022/08/23 | 34121 | graphics/pstricks/contrib/pst-barcode/doc/images/micropdf417-2.eps
+2022/08/23 | 34083 | graphics/pstricks/contrib/pst-barcode/doc/images/gs1northamericancoupon-1.eps
+2022/08/23 | 34068 | graphics/pstricks/contrib/pst-barcode/doc/images/micropdf417-1.eps
+2022/08/23 | 33862 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma
+2022/08/23 | 33824 | macros/latex/contrib/l3kernel/l3sys.dtx
+2022/08/23 | 33772 | graphics/pstricks/contrib/pst-barcode/doc/images/pdf417-3.eps
+2022/08/23 | 325980 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma
+2022/08/23 | 325485 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma
+2022/08/23 | 32478 | graphics/pstricks/contrib/pst-barcode/doc/images/pdf417-4.eps
+2022/08/23 | 32457 | graphics/pstricks/contrib/pst-barcode/doc/images/pdf417-2.eps
+2022/08/23 | 32431 | graphics/pstricks/contrib/pst-barcode/doc/images/pdf417-5.eps
+2022/08/23 | 32429 | macros/latex/contrib/l3kernel/l3cctab.dtx
+2022/08/23 | 32405 | graphics/pstricks/contrib/pst-barcode/doc/images/pdf417-1.eps
+2022/08/23 | 323138 | macros/latex/contrib/beamer-contrib/beamerswitch.zip
+2022/08/23 | 32074 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma
+2022/08/23 | 31588 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma
+2022/08/23 | 31563 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma
+2022/08/23 | 30571 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma
+2022/08/23 | 304576 | macros/latex/contrib/l3kernel/l3regex.dtx
+2022/08/23 | 300 | macros/latex/contrib/pseudo/doc/fig/readmecode.tex
+2022/08/23 | 29843 | graphics/pstricks/contrib/pst-barcode/doc/images/dotcode-1.eps
+2022/08/23 | 296239 | macros/latex/contrib/l3kernel/l3styleguide.pdf
+2022/08/23 | 29600 | macros/latex/contrib/pseudo/pseudo.sty
+2022/08/23 | 295945 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma
+2022/08/23 | 29448 | macros/latex/contrib/l3backend/l3backend-graphics.dtx
+2022/08/23 | 2933 | graphics/pstricks/contrib/pst-barcode/tex/pst-barcode.tex
+2022/08/23 | 289512 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma
+2022/08/23 | 289494 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma
+2022/08/23 | 286686 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma
+2022/08/23 | 28511 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma
+2022/08/23 | 2821 | macros/latex/contrib/l3kernel/l3prefixes.tex
+2022/08/23 | 2821672 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma
+2022/08/23 | 28171 | graphics/pstricks/contrib/pst-barcode/doc/images/hanxin-1.eps
+2022/08/23 | 28066 | graphics/pstricks/contrib/pst-barcode/doc/images/gs1qrcode-1.eps
+2022/08/23 | 28048 | graphics/pstricks/contrib/pst-barcode/doc/images/gs1qrcode-2.eps
+2022/08/23 | 2802 | macros/latex/contrib/hereapplies/lyx-module/hereapplies.module
+2022/08/23 | 27864 | graphics/pstricks/contrib/pst-barcode/doc/images/hibcqrcode-1.eps
+2022/08/23 | 27465 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma
+2022/08/23 | 270467 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma
+2022/08/23 | 26938 | graphics/pstricks/contrib/pst-barcode/doc/images/qrcode-5.eps
+2022/08/23 | 26874 | graphics/pstricks/contrib/pst-barcode/doc/images/datamatrix-4.eps
+2022/08/23 | 2627 | macros/latex/contrib/beamer-contrib/beamerswitch/Makefile
+2022/08/23 | 258 | macros/latex/contrib/pseudo/doc/fig/readmefig.tex
+2022/08/23 | 25703 | graphics/pstricks/contrib/pst-barcode/doc/images/optraw.eps
+2022/08/23 | 25671 | graphics/pstricks/contrib/pst-barcode/doc/images/qrcode-2.eps
+2022/08/23 | 25658 | graphics/pstricks/contrib/pst-barcode/doc/images/databarexpandedstacked-1.eps
+2022/08/23 | 25650 | macros/latex/contrib/l3kernel/l3fp-random.dtx
+2022/08/23 | 25619 | graphics/pstricks/contrib/pst-barcode/doc/images/qrcode-1.eps
+2022/08/23 | 25516419 | systems/texlive/tlnet/install-tl.zip
+2022/08/23 | 25117 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma
+2022/08/23 | 250139 | macros/latex/contrib/l3kernel/l3news09.pdf
+2022/08/23 | 24819 | macros/latex/contrib/l3kernel/source3body.tex
+2022/08/23 | 247208 | systems/win32/miktex/tm/packages/next/miktex-hitex-bin-x64.tar.lzma
+2022/08/23 | 24673 | macros/latex/contrib/l3kernel/l3kernel-functions.dtx
+2022/08/23 | 245151 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma
+2022/08/23 | 242906 | macros/latex/contrib/l3kernel/l3syntax-changes.pdf
+2022/08/23 | 24267 | graphics/pstricks/contrib/pst-barcode/doc/images/optguardsize.eps
+2022/08/23 | 24227 | graphics/pstricks/contrib/pst-barcode/doc/images/isbn-2.eps
+2022/08/23 | 24221 | graphics/pstricks/contrib/pst-barcode/doc/images/isbn-4.eps
+2022/08/23 | 24220 | graphics/pstricks/contrib/pst-barcode/doc/images/databarexpanded-1.eps
+2022/08/23 | 24212 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma
+2022/08/23 | 24181 | graphics/pstricks/contrib/pst-barcode/doc/images/isbn-1.eps
+2022/08/23 | 24171 | graphics/pstricks/contrib/pst-barcode/doc/images/isbn-3.eps
+2022/08/23 | 2399768 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
+2022/08/23 | 23949 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma
+2022/08/23 | 2390 | macros/latex/contrib/l3kernel/l3docstrip.dtx
+2022/08/23 | 23866 | macros/latex/contrib/l3kernel/l3luatex.dtx
+2022/08/23 | 23857 | graphics/pstricks/contrib/pst-barcode/doc/images/ismn-3.eps
+2022/08/23 | 23821 | graphics/pstricks/contrib/pst-barcode/doc/images/ismn-1.eps
+2022/08/23 | 23813 | graphics/pstricks/contrib/pst-barcode/doc/images/ismn-2.eps
+2022/08/23 | 231316 | macros/latex/contrib/l3kernel/l3term-glossary.pdf
+2022/08/23 | 23011 | macros/latex/contrib/l3kernel/l3fp-logic.dtx
+2022/08/23 | 22994 | macros/latex/contrib/beamer-contrib/beamerswitch/beamerswitch-example-trans.pdf
+2022/08/23 | 22397 | macros/latex/contrib/beamer-contrib/beamerswitch/beamerswitch-example-handout.pdf
+2022/08/23 | 2229 | macros/latex/contrib/l3kernel/source3.tex
+2022/08/23 | 22168 | graphics/pstricks/contrib/pst-barcode/doc/images/issn-2.eps
+2022/08/23 | 22162 | graphics/pstricks/contrib/pst-barcode/doc/images/issn-1.eps
+2022/08/23 | 21654 | graphics/pstricks/contrib/pst-barcode/doc/images/gs1datamatrix-1.eps
+2022/08/23 | 21653 | macros/latex/contrib/l3kernel/l3text-purify.dtx
+2022/08/23 | 21589 | macros/latex/contrib/l3kernel/l3deprecation.dtx
+2022/08/23 | 21487 | graphics/pstricks/contrib/pst-barcode/doc/images/hibcdatamatrix-1.eps
+2022/08/23 | 213847 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-x64-2.9.tar.lzma
+2022/08/23 | 209139 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma
+2022/08/23 | 208134 | macros/latex/contrib/beamer-contrib/beamerswitch/beamerswitch.pdf
+2022/08/23 | 20624 | graphics/pstricks/contrib/pst-barcode/Changes
+2022/08/23 | 204990 | macros/latex/contrib/l3kernel/l3news12.pdf
+2022/08/23 | 20435767 | systems/texlive/tlnet/install-tl-windows.exe
+2022/08/23 | 203422 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma
+2022/08/23 | 2023133 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma
+2022/08/23 | 20110 | macros/latex/contrib/beamer-contrib/beamerswitch/beamerswitch-example-article.pdf
+2022/08/23 | 19641 | macros/latex/contrib/l3kernel/l3fp-convert.dtx
+2022/08/23 | 196212 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma
+2022/08/23 | 195912 | macros/latex/contrib/pseudo/doc/pseudo.tex
+2022/08/23 | 19369 | graphics/pstricks/contrib/pst-barcode/doc/images/upce-2.eps
+2022/08/23 | 19347 | graphics/pstricks/contrib/pst-barcode/doc/images/upce-1.eps
+2022/08/23 | 192578 | graphics/pstricks/contrib/pst-barcode/doc/pst-barcode-doc.tex
+2022/08/23 | 19238 | graphics/pstricks/contrib/pst-barcode/doc/images/datamatrix-3.eps
+2022/08/23 | 19236 | graphics/pstricks/contrib/pst-barcode/doc/images/datamatrix-2.eps
+2022/08/23 | 19218 | graphics/pstricks/contrib/pst-barcode/doc/images/optparse.eps
+2022/08/23 | 19218 | graphics/pstricks/contrib/pst-barcode/doc/images/datamatrix-1.eps
+2022/08/23 | 1908 | macros/latex/contrib/l3kernel/interface3.tex
+2022/08/23 | 18982290 | macros/latex/contrib/biblatex-ms.zip
+2022/08/23 | 18973 | graphics/pstricks/contrib/pst-barcode/doc/images/databarstackedomni-1.eps
+2022/08/23 | 18864 | graphics/pstricks/contrib/pst-barcode/doc/images/databartruncated-1.eps
+2022/08/23 | 18844 | graphics/pstricks/contrib/pst-barcode/doc/images/databarstacked-1.eps
+2022/08/23 | 18737 | graphics/pstricks/contrib/pst-barcode/doc/images/ean128-2.eps
+2022/08/23 | 18693 | graphics/pstricks/contrib/pst-barcode/doc/images/ean128-1.eps
+2022/08/23 | 18570 | graphics/pstricks/contrib/pst-barcode/doc/images/upca-2.eps
+2022/08/23 | 18531 | macros/latex/contrib/l3kernel/l3fp-round.dtx
+2022/08/23 | 18526 | graphics/pstricks/contrib/pst-barcode/doc/images/upca-1.eps
+2022/08/23 | 18512 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma
+2022/08/23 | 18423 | graphics/pstricks/contrib/pst-barcode/doc/images/hibccode128-1.eps
+2022/08/23 | 18383 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma
+2022/08/23 | 18300 | graphics/pstricks/contrib/pst-barcode/doc/images/sscc18-1.eps
+2022/08/23 | 18274 | graphics/pstricks/contrib/pst-barcode/doc/images/ean14-1.eps
+2022/08/23 | 181725 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma
+2022/08/23 | 17989 | graphics/pstricks/contrib/pst-barcode/doc/images/aztec-3.eps
+2022/08/23 | 17889 | graphics/pstricks/contrib/pst-barcode/doc/images/ean13-2.eps
+2022/08/23 | 17877 | graphics/pstricks/contrib/pst-barcode/doc/images/ean13-1.eps
+2022/08/23 | 17876 | graphics/pstricks/contrib/pst-barcode/doc/images/resize3.eps
+2022/08/23 | 17865 | graphics/pstricks/contrib/pst-barcode/doc/images/optheight.eps
+2022/08/23 | 17854 | graphics/pstricks/contrib/pst-barcode/doc/images/resize2.eps
+2022/08/23 | 17843 | graphics/pstricks/contrib/pst-barcode/doc/images/resize1.eps
+2022/08/23 | 177 | macros/latex/contrib/pseudo/test/overlaytest.tex
+2022/08/23 | 1770652 | macros/latex/contrib/l3kernel/interface3.pdf
+2022/08/23 | 17588361 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
+2022/08/23 | 17541 | graphics/pstricks/contrib/pst-barcode/doc/images/optguardpos.eps
+2022/08/23 | 17429 | graphics/pstricks/contrib/pst-barcode/doc/images/ean8-2.eps
+2022/08/23 | 1741 | macros/latex/contrib/hereapplies/ChangeLog.md
+2022/08/23 | 17372 | graphics/pstricks/contrib/pst-barcode/doc/images/ean8-1.eps
+2022/08/23 | 173177 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma
+2022/08/23 | 17299 | graphics/pstricks/contrib/pst-barcode/doc/images/onecode-1.eps
+2022/08/23 | 170063 | macros/latex/contrib/l3kernel/l3news11.pdf
+2022/08/23 | 169678 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma
+2022/08/23 | 16796 | graphics/pstricks/contrib/pst-barcode/doc/images/aztec-4.eps
+2022/08/23 | 16776 | graphics/pstricks/contrib/pst-barcode/doc/images/aztec-6.eps
+2022/08/23 | 16728 | graphics/pstricks/contrib/pst-barcode/doc/images/aztec-2.eps
+2022/08/23 | 16716 | graphics/pstricks/contrib/pst-barcode/doc/images/aztec-5.eps
+2022/08/23 | 16712 | graphics/pstricks/contrib/pst-barcode/doc/images/aztec-1.eps
+2022/08/23 | 16597 | graphics/pstricks/contrib/pst-barcode/doc/images/databaromni-1.eps
+2022/08/23 | 163454 | macros/latex/contrib/l3kernel/l3news08.pdf
+2022/08/23 | 16092 | macros/latex/contrib/l3backend/l3backend-basics.dtx
+2022/08/23 | 15724 | graphics/pstricks/contrib/pst-barcode/doc/images/code128-1.eps
+2022/08/23 | 15716 | systems/texlive/tlnet/archive/tikz-ext.r64166.tar.xz
+2022/08/23 | 156373 | macros/latex/contrib/l3kernel/l3doc.dtx
+2022/08/23 | 15574 | graphics/pstricks/contrib/pst-barcode/doc/images/maxicode-2.eps
+2022/08/23 | 15568 | graphics/pstricks/contrib/pst-barcode/doc/images/maxicode-3.eps
+2022/08/23 | 155429 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma
+2022/08/23 | 15531 | graphics/pstricks/contrib/pst-barcode/doc/images/maxicode-4.eps
+2022/08/23 | 15484 | graphics/pstricks/contrib/pst-barcode/doc/images/hibccodablockf-1.eps
+2022/08/23 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
+2022/08/23 | 15368 | graphics/pstricks/contrib/pst-barcode/doc/images/code16k-3.eps
+2022/08/23 | 1532 | systems/texlive/tlnet/archive/collection-pictures.r64166.tar.xz
+2022/08/23 | 15310 | graphics/pstricks/contrib/pst-barcode/doc/images/maxicode-1.eps
+2022/08/23 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
+2022/08/23 | 15296 | graphics/pstricks/contrib/pst-barcode/doc/images/code16k-1.eps
+2022/08/23 | 15286 | graphics/pstricks/contrib/pst-barcode/doc/images/code16k-2.eps
+2022/08/23 | 151820 | macros/latex/contrib/l3kernel/l3docstrip.pdf
+2022/08/23 | 151573 | macros/latex/contrib/l3kernel/l3news06.pdf
+2022/08/23 | 15127 | macros/latex/contrib/l3kernel/l3bootstrap.dtx
+2022/08/23 | 15110 | graphics/pstricks/contrib/pst-barcode/doc/images/posicode-6.eps
+2022/08/23 | 15110 | graphics/pstricks/contrib/pst-barcode/doc/images/posicode-5.eps
+2022/08/23 | 15096 | graphics/pstricks/contrib/pst-barcode/doc/images/posicode-3.eps
+2022/08/23 | 15094 | graphics/pstricks/contrib/pst-barcode/doc/images/posicode-4.eps
+2022/08/23 | 15092 | graphics/pstricks/contrib/pst-barcode/doc/images/posicode-1.eps
+2022/08/23 | 15088 | graphics/pstricks/contrib/pst-barcode/doc/images/posicode-2.eps
+2022/08/23 | 150676 | macros/latex/contrib/l3kernel/l3news02.pdf
+2022/08/23 | 1503050 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma
+2022/08/23 | 150279 | macros/latex/contrib/l3kernel/l3news10.pdf
+2022/08/23 | 14977 | graphics/pstricks/contrib/pst-barcode/doc/images/ultracode-1.eps
+2022/08/23 | 14913 | macros/latex/contrib/l3kernel/l3news12.tex
+2022/08/23 | 14882 | macros/latex/contrib/l3kernel/l3pdf.dtx
+2022/08/23 | 148702 | macros/latex/contrib/l3kernel/l3news03.pdf
+2022/08/23 | 1483459 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma
+2022/08/23 | 1481656 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma
+2022/08/23 | 1470 | macros/latex/contrib/pseudo/Makefile
+2022/08/23 | 14669 | macros/latex/contrib/l3backend/l3backend-header.dtx
+2022/08/23 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
+2022/08/23 | 1458151 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma
+2022/08/23 | 145318 | macros/latex/contrib/l3kernel/l3tl.dtx
+2022/08/23 | 14511 | macros/latex/contrib/hereapplies/hereapplies.sty
+2022/08/23 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
+2022/08/23 | 14435 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma
+2022/08/23 | 14431 | macros/latex/contrib/l3backend/l3backend-box.dtx
+2022/08/23 | 143137 | graphics/pstricks/contrib/pst-barcode/doc/images/barcode.jpg
+2022/08/23 | 14297 | graphics/pstricks/contrib/pst-barcode/doc/images/code39ext-1.eps
+2022/08/23 | 14284 | graphics/pstricks/contrib/pst-barcode/doc/images/code39ext-2.eps
+2022/08/23 | 14172 | graphics/pstricks/contrib/pst-barcode/doc/images/hibccode39-1.eps
+2022/08/23 | 14079 | graphics/pstricks/contrib/pst-barcode/doc/images/pzn-2.eps
+2022/08/23 | 14065 | graphics/pstricks/contrib/pst-barcode/doc/images/pzn-1.eps
+2022/08/23 | 140013 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma
+2022/08/23 | 13962969 | install/macros/latex/contrib/l3kernel.tds.zip
+2022/08/23 | 13920 | graphics/pstricks/contrib/pst-barcode/doc/images/code32-1.eps
+2022/08/23 | 13809 | graphics/pstricks/contrib/pst-barcode/doc/images/code93ext-2.eps
+2022/08/23 | 13783 | graphics/pstricks/contrib/pst-barcode/doc/images/code93ext-1.eps
+2022/08/23 | 13703651 | macros/latex/contrib/l3kernel.zip
+2022/08/23 | 136649 | macros/latex/contrib/l3kernel/l3file.dtx
+2022/08/23 | 1364392 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma
+2022/08/23 | 1363971 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma
+2022/08/23 | 136380 | systems/texlive/tlnet/archive/tex4ht.doc.r64167.tar.xz
+2022/08/23 | 135465 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma
+2022/08/23 | 13544 | graphics/pstricks/contrib/pst-barcode/doc/images/telepen-5.eps
+2022/08/23 | 13491 | graphics/pstricks/contrib/pst-barcode/doc/images/telepen-4.eps
+2022/08/23 | 13491 | graphics/pstricks/contrib/pst-barcode/doc/images/telepen-3.eps
+2022/08/23 | 13348 | graphics/pstricks/contrib/pst-barcode/doc/images/codablockf-3.eps
+2022/08/23 | 1331 | macros/latex/contrib/l3backend/l3backend-code.tex
+2022/08/23 | 13296 | graphics/pstricks/contrib/pst-barcode/doc/images/codablockf-2.eps
+2022/08/23 | 1323746 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma
+2022/08/23 | 13204 | graphics/pstricks/contrib/pst-barcode/doc/images/codablockf-1.eps
+2022/08/23 | 13130 | graphics/pstricks/contrib/pst-barcode/doc/images/itf-14-1.eps
+2022/08/23 | 13042 | graphics/pstricks/contrib/pst-barcode/doc/images/identcode-1.eps
+2022/08/23 | 13037 | graphics/pstricks/contrib/pst-barcode/doc/images/leitcode-1.eps
+2022/08/23 | 128799 | macros/latex/contrib/l3kernel/l3basics.dtx
+2022/08/23 | 128309 | macros/latex/contrib/l3kernel/l3news07.pdf
+2022/08/23 | 12795 | graphics/pstricks/contrib/pst-barcode/doc/images/code25-2.eps
+2022/08/23 | 12783 | macros/latex/contrib/l3kernel/l3fp-traps.dtx
+2022/08/23 | 12769 | graphics/pstricks/contrib/pst-barcode/doc/images/databarlimited-1.eps
+2022/08/23 | 1274208 | systems/texlive/tlnet/archive/tex4ht.source.r64167.tar.xz
+2022/08/23 | 127087 | macros/latex/contrib/l3kernel/l3keys.dtx
+2022/08/23 | 124233 | macros/latex/contrib/l3kernel/l3token.dtx
+2022/08/23 | 122710 | macros/latex/contrib/l3kernel/l3news01.pdf
+2022/08/23 | 1225072 | graphics/pstricks/contrib/pst-barcode/doc/pst-barcode-doc.pdf
+2022/08/23 | 12007 | graphics/pstricks/contrib/pst-barcode/doc/pst-barcode-doc.ltx
+2022/08/23 | 11936 | graphics/pstricks/contrib/pst-barcode/doc/images/telepen-1.eps
+2022/08/23 | 11918 | graphics/pstricks/contrib/pst-barcode/doc/images/telepen-2.eps
+2022/08/23 | 11884 | macros/latex/contrib/l3kernel/l3styleguide.tex
+2022/08/23 | 1184 | macros/latex/contrib/pseudo/doc/pseudo.bib
+2022/08/23 | 11794 | graphics/pstricks/contrib/pst-barcode/doc/images/optborder.eps
+2022/08/23 | 11783 | graphics/pstricks/contrib/pst-barcode/doc/images/codabar-1.eps
+2022/08/23 | 11781 | macros/latex/contrib/l3kernel/l3fparray.dtx
+2022/08/23 | 11755 | graphics/pstricks/contrib/pst-barcode/doc/images/optcolorrgb.eps
+2022/08/23 | 11739 | graphics/pstricks/contrib/pst-barcode/doc/images/optcolorcmyk.eps
+2022/08/23 | 1172 | systems/win32/miktex/tm/packages/next/pr.ini
+2022/08/23 | 11702 | graphics/pstricks/contrib/pst-barcode/doc/images/auspost-1.eps
+2022/08/23 | 11697 | graphics/pstricks/contrib/pst-barcode/doc/images/auspost-2.eps
+2022/08/23 | 1161753 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma
+2022/08/23 | 11612 | graphics/pstricks/contrib/pst-barcode/doc/images/code11-1.eps
+2022/08/23 | 115579 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma
+2022/08/23 | 11494 | graphics/pstricks/contrib/pst-barcode/doc/images/code39-2.eps
+2022/08/23 | 11474 | graphics/pstricks/contrib/pst-barcode/doc/images/code39-3.eps
+2022/08/23 | 114588 | macros/latex/contrib/l3kernel/l3news04.pdf
+2022/08/23 | 11430 | graphics/pstricks/contrib/pst-barcode/doc/images/code39-1.eps
+2022/08/23 | 11429 | graphics/pstricks/contrib/pst-barcode/doc/images/optincludetext.eps
+2022/08/23 | 11411 | graphics/pstricks/contrib/pst-barcode/doc/images/optinkspread.eps
+2022/08/23 | 113476 | systems/texlive/tlnet/archive/texlive-scripts.r64163.tar.xz
+2022/08/23 | 113421 | macros/latex/contrib/l3kernel/l3str-convert.dtx
+2022/08/23 | 112978 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma
+2022/08/23 | 112879 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma
+2022/08/23 | 112487 | macros/latex/contrib/l3kernel/l3news05.pdf
+2022/08/23 | 1117762 | graphics/pstricks/contrib/pst-barcode/dvips/pst-barcode.pro
+2022/08/23 | 11139 | graphics/pstricks/contrib/pst-barcode/doc/images/plessey-2.eps
+2022/08/23 | 11127 | graphics/pstricks/contrib/pst-barcode/doc/images/code25-1.eps
+2022/08/23 | 11102 | graphics/pstricks/contrib/pst-barcode/doc/images/plessey-1.eps
+2022/08/23 | 111018 | macros/latex/contrib/l3kernel/l3color.dtx
+2022/08/23 | 11093 | graphics/pstricks/contrib/pst-barcode/doc/images/plessey-3.eps
+2022/08/23 | 109650 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma
+2022/08/23 | 10886 | graphics/pstricks/contrib/pst-barcode/doc/images/optincludecheckintext.eps
+2022/08/23 | 10863 | graphics/pstricks/contrib/pst-barcode/doc/images/bc412-1.eps
+2022/08/23 | 10855 | graphics/pstricks/contrib/pst-barcode/doc/images/bc412-2.eps
+2022/08/23 | 10851 | graphics/pstricks/contrib/pst-barcode/doc/images/rm4scc-1.eps
+2022/08/23 | 10831 | graphics/pstricks/contrib/pst-barcode/doc/images/bc412-3.eps
+2022/08/23 | 1080 | macros/latex/contrib/pseudo/LICENSE
+2022/08/23 | 107438 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma
+2022/08/23 | 107383 | macros/latex/contrib/l3kernel/l3news09.tex
+2022/08/23 | 106590 | macros/latex/contrib/beamer-contrib/beamerswitch/beamerswitch.dtx
+2022/08/23 | 106428 | macros/latex/contrib/l3kernel/l3expan.dtx
+2022/08/23 | 10615 | graphics/pstricks/contrib/pst-barcode/doc/images/opttextfont.eps
+2022/08/23 | 10608 | graphics/pstricks/contrib/pst-barcode/doc/images/code93-2.eps
+2022/08/23 | 10606 | graphics/pstricks/contrib/pst-barcode/doc/images/optparsefnc.eps
+2022/08/23 | 10602 | graphics/pstricks/contrib/pst-barcode/doc/images/msi-3.eps
+2022/08/23 | 10590 | graphics/pstricks/contrib/pst-barcode/doc/images/optincludecheck.eps
+2022/08/23 | 10588 | graphics/pstricks/contrib/pst-barcode/doc/images/msi-2.eps
+2022/08/23 | 10580 | graphics/pstricks/contrib/pst-barcode/doc/images/code93-1.eps
+2022/08/23 | 10569 | graphics/pstricks/contrib/pst-barcode/doc/images/postnet-1.eps
+2022/08/23 | 10566 | graphics/pstricks/contrib/pst-barcode/doc/images/optwidth.eps
+2022/08/23 | 1054764 | systems/texlive/tlnet/archive/mcf2graph.doc.r64164.tar.xz
+2022/08/23 | 10537 | graphics/pstricks/contrib/pst-barcode/doc/images/planet-1.eps
+2022/08/23 | 10512 | graphics/pstricks/contrib/pst-barcode/doc/images/msi-1.eps
+2022/08/23 | 105029 | macros/latex/contrib/l3kernel/l3fp-parse.dtx
+2022/08/23 | 104922 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma
+2022/08/23 | 10429 | graphics/pstricks/contrib/pst-barcode/doc/images/japanpost-1.eps
+2022/08/23 | 10424 | graphics/pstricks/contrib/pst-barcode/doc/images/itf-2.eps
+2022/08/23 | 10424 | graphics/pstricks/contrib/pst-barcode/doc/images/itf-1.eps
+2022/08/23 | 103599 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma
+2022/08/23 | 10342 | graphics/pstricks/contrib/pst-barcode/doc/images/channelcode-3.eps
+2022/08/23 | 10338 | graphics/pstricks/contrib/pst-barcode/doc/images/channelcode-4.eps
+2022/08/23 | 103247 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma
+2022/08/23 | 10316 | graphics/pstricks/contrib/pst-barcode/doc/images/channelcode-2.eps
+2022/08/23 | 10314 | graphics/pstricks/contrib/pst-barcode/doc/images/channelcode-1.eps
+2022/08/23 | 10068 | graphics/pstricks/contrib/pst-barcode/doc/images/ean5-1.eps
+2022/08/23 | 1001387 | macros/latex/contrib/pseudo.zip
2022/08/22 | 80862 | macros/latex/contrib/uantwerpendocs/uantwerpencoursetext-example.pdf
2022/08/22 | 79537 | graphics/mcf2graph/mcf_exa_code.pdf
-2022/08/22 | 79065 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma
-2022/08/22 | 77211 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma
-2022/08/22 | 769652 | systems/win32/miktex/tm/packages/next/miktex-ptex-bin-x64.tar.lzma
-2022/08/22 | 74100 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma
-2022/08/22 | 73686 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma
-2022/08/22 | 73263 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma
-2022/08/22 | 72980 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma
-2022/08/22 | 70940 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma
-2022/08/22 | 682216 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma
-2022/08/22 | 68147 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma
-2022/08/22 | 659852 | systems/win32/miktex/tm/packages/next/files.csv.lzma
-2022/08/22 | 659342 | systems/win32/miktex/tm/packages/files.csv.lzma
-2022/08/22 | 65131 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma
+2022/08/22 | 7165 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
2022/08/22 | 64889 | macros/latex/contrib/uantwerpendocs/uantwerpenexam-example2.pdf
-2022/08/22 | 63803 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64.tar.lzma
-2022/08/22 | 63241 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma
-2022/08/22 | 630436 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma
2022/08/22 | 62425 | macros/latex/contrib/uantwerpendocs/uantwerpenexam-example1.pdf
-2022/08/22 | 62360 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma
-2022/08/22 | 599104 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma
-2022/08/22 | 58634 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma
-2022/08/22 | 5831657 | systems/texlive/tlnet/install-tl-unx.tar.gz
+2022/08/22 | 617552 | support/TeX4ht/source/tex4ht-html4.tex
2022/08/22 | 57611 | graphics/mcf2graph/mcf_manual.tex
-2022/08/22 | 57507 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma
-2022/08/22 | 57502 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin-x64.tar.lzma
-2022/08/22 | 57317 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma
2022/08/22 | 5704 | macros/latex/contrib/uantwerpendocs/uantwerpendocs.ins
-2022/08/22 | 565081 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma
-2022/08/22 | 55321 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma
-2022/08/22 | 527571 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma
-2022/08/22 | 52629 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma
-2022/08/22 | 52369 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma
-2022/08/22 | 52038 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma
2022/08/22 | 49314 | macros/latex/contrib/uantwerpendocs/uantwerpenletter-example.pdf
-2022/08/22 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
-2022/08/22 | 48851 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma
-2022/08/22 | 481895 | systems/win32/miktex/tm/packages/next/miktex-doc.tar.lzma
-2022/08/22 | 48038 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma
-2022/08/22 | 45795 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma
-2022/08/22 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
-2022/08/22 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc
-2022/08/22 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
-2022/08/22 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
2022/08/22 | 450444 | graphics/mcf2graph/mcf_example.pdf
-2022/08/22 | 43890 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma
-2022/08/22 | 43617 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma
-2022/08/22 | 43527 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma
2022/08/22 | 43352 | graphics/mcf2graph/mcf_man_soc.mp
-2022/08/22 | 419432 | systems/texlive/tlnet/archive/texlive-scripts.doc.r64159.tar.xz
2022/08/22 | 4132 | systems/texlive/tlnet/archive/runcode.r64161.tar.xz
-2022/08/22 | 41191 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin-x64.tar.lzma
-2022/08/22 | 41181 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin-x64.tar.lzma
2022/08/22 | 407064 | systems/texlive/tlnet/archive/runcode.doc.r64161.tar.xz
-2022/08/22 | 394143 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma
2022/08/22 | 385921 | macros/latex/contrib/uantwerpendocs/uantwerpendocs.pdf
2022/08/22 | 3812 | graphics/mcf2graph/mcf_exa_code.tex
-2022/08/22 | 37505 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma
-2022/08/22 | 37051 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma
2022/08/22 | 3649 | graphics/mcf2graph/README
-2022/08/22 | 35265 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma
-2022/08/22 | 352465 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma
-2022/08/22 | 35232 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma
-2022/08/22 | 33863 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma
-2022/08/22 | 325980 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma
-2022/08/22 | 325485 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma
2022/08/22 | 3224856 | macros/latex/contrib/uantwerpendocs/beamerthemeuantwerpenuserguide.pdf
-2022/08/22 | 32075 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma
-2022/08/22 | 31589 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma
-2022/08/22 | 31563 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma
-2022/08/22 | 30571 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma
2022/08/22 | 2984 | graphics/mcf2graph/mcf_example.tex
-2022/08/22 | 295945 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma
-2022/08/22 | 289530 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma
-2022/08/22 | 289527 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma
2022/08/22 | 289199 | graphics/mcf2graph/mcf_manual.pdf
-2022/08/22 | 286685 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma
-2022/08/22 | 28511 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma
-2022/08/22 | 2821671 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma
-2022/08/22 | 27460 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma
-2022/08/22 | 270468 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma
-2022/08/22 | 25516433 | systems/texlive/tlnet/install-tl.zip
-2022/08/22 | 25119 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma
-2022/08/22 | 247209 | systems/win32/miktex/tm/packages/next/miktex-hitex-bin-x64.tar.lzma
-2022/08/22 | 245152 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma
-2022/08/22 | 24211 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma
-2022/08/22 | 2399116 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
-2022/08/22 | 23949 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma
2022/08/22 | 2349 | graphics/mcf2graph/mcf_exa_soc.mp
2022/08/22 | 220972 | macros/latex/contrib/uantwerpendocs/uantwerpenphdthesis-example1.pdf
2022/08/22 | 219597 | support/m-tx/mtx-0.63d.tar.gz
2022/08/22 | 216322 | macros/latex/contrib/uantwerpendocs/uantwerpenphdthesis-example2.pdf
2022/08/22 | 214225 | macros/latex/contrib/uantwerpendocs/uantwerpendocs.dtx
-2022/08/22 | 213849 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-x64-2.9.tar.lzma
-2022/08/22 | 209139 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma
2022/08/22 | 207517 | macros/latex/contrib/uantwerpendocs/uantwerpenreport-example.pdf
-2022/08/22 | 20434101 | systems/texlive/tlnet/install-tl-windows.exe
-2022/08/22 | 203420 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma
-2022/08/22 | 2023133 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma
-2022/08/22 | 196212 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma
+2022/08/22 | 200387 | support/TeX4ht/source/ChangeLog
+2022/08/22 | 199 | biblio/biber-ms/biber-ms-windows/README
+2022/08/22 | 197 | biblio/biber-ms/biber-ms-macos/README
+2022/08/22 | 197 | biblio/biber-ms/biber-ms-linux/README
2022/08/22 | 195580 | graphics/mcf2graph/mcf_mplib_exa.pdf
-2022/08/22 | 18511 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma
-2022/08/22 | 18382 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma
2022/08/22 | 18356 | graphics/mcf2graph/CHANGELOG
-2022/08/22 | 181725 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma
2022/08/22 | 1802 | support/m-tx/README
-2022/08/22 | 17585067 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
-2022/08/22 | 173178 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma
-2022/08/22 | 169679 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma
-2022/08/22 | 155431 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma
-2022/08/22 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
-2022/08/22 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
-2022/08/22 | 1503052 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma
-2022/08/22 | 1483644 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma
-2022/08/22 | 1481317 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma
-2022/08/22 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
-2022/08/22 | 1458151 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma
2022/08/22 | 14575 | graphics/mcf2graph/mcf_mplib_exa.tex
-2022/08/22 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
-2022/08/22 | 14434 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma
2022/08/22 | 1412272 | support/m-tx.zip
-2022/08/22 | 140012 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma
-2022/08/22 | 1365341 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma
-2022/08/22 | 136384 | systems/texlive/tlnet/archive/tex4ht.doc.r64160.tar.xz
-2022/08/22 | 1363460 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma
-2022/08/22 | 135467 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma
2022/08/22 | 13254857 | install/macros/latex/contrib/uantwerpendocs.tds.zip
-2022/08/22 | 1323746 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma
2022/08/22 | 13166629 | macros/latex/contrib/uantwerpendocs.zip
2022/08/22 | 131257 | macros/latex/contrib/uantwerpendocs/uantwerpenbamathesis-example.pdf
-2022/08/22 | 1269884 | systems/texlive/tlnet/archive/tex4ht.source.r64160.tar.xz
-2022/08/22 | 1172 | systems/win32/miktex/tm/packages/next/pr.ini
-2022/08/22 | 1161752 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma
-2022/08/22 | 115579 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma
-2022/08/22 | 113508 | systems/texlive/tlnet/archive/texlive-scripts.r64159.tar.xz
-2022/08/22 | 112978 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma
-2022/08/22 | 112880 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma
-2022/08/22 | 109650 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma
-2022/08/22 | 107436 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma
2022/08/22 | 1065030 | graphics/mcf2graph.zip
-2022/08/22 | 104922 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma
2022/08/22 | 104856 | graphics/mcf2graph/mcf_library.mcf
-2022/08/22 | 103599 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma
-2022/08/22 | 103247 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma
2022/08/22 | 101605 | graphics/mcf2graph/mcf2graph.mp
+2022/08/21 | 99 | macros/latex/contrib/biblatex-ms/latex/bbx/verbose-note-ms.bbx
+2022/08/21 | 99 | macros/latex/contrib/biblatex-ms/latex/bbx/verbose-ibid-ms.bbx
+2022/08/21 | 9907 | macros/latex/contrib/biblatex-ms/latex/cbx/authoryear-icomp-ms.cbx
2022/08/21 | 99078261 | systems/win32/TLW64/tl-win64.zip
-2022/08/21 | 96824 | systems/texlive/tlnet/archive/texinfo.r64153.tar.xz
+2022/08/21 | 98442 | macros/latex/contrib/biblatex-ms/doc/examples/12-references-by-segment-biber-ms.pdf
+2022/08/21 | 98437 | macros/latex/contrib/biblatex-ms/doc/examples/12-references-by-segment-bibtex-ms.pdf
+2022/08/21 | 98395 | macros/latex/contrib/biblatex-ms/doc/examples/11-references-by-section-biber-ms.pdf
+2022/08/21 | 98390 | macros/latex/contrib/biblatex-ms/doc/examples/11-references-by-section-bibtex-ms.pdf
+2022/08/21 | 9728 | macros/latex/contrib/biblatex-ms/doc/examples/75-style-verbose-trad2-ms.tex
+2022/08/21 | 9623 | macros/latex/contrib/biblatex-ms/latex/cbx/verbose-inote-ms.cbx
+2022/08/21 | 95 | macros/latex/contrib/biblatex-ms/latex/bbx/numeric-verb-ms.bbx
+2022/08/21 | 95 | macros/latex/contrib/biblatex-ms/latex/bbx/numeric-comp-ms.bbx
+2022/08/21 | 95330 | macros/latex/contrib/biblatex-ms/latex/biblatex-ms.def
+2022/08/21 | 94 | macros/latex/contrib/biblatex-ms/latex/bbx/verbose-ms.bbx
+2022/08/21 | 90 | macros/latex/contrib/biblatex-ms/latex/cbx/reading-ms.cbx
+2022/08/21 | 9094 | macros/latex/contrib/biblatex-ms/latex/cbx/verbose-trad1-ms.cbx
2022/08/21 | 893 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual.tex
+2022/08/21 | 89388246 | biblio/biber-ms/biber-ms-macos/biber-ms-4.0-darwin_universal.tar.gz
+2022/08/21 | 88905 | macros/latex/contrib/biblatex-ms/doc/examples/22-indexing-subentry-bibtex-ms.pdf
+2022/08/21 | 88905 | macros/latex/contrib/biblatex-ms/doc/examples/22-indexing-subentry-biber-ms.pdf
+2022/08/21 | 883 | macros/latex/contrib/biblatex-ms/latex/lbx/newzealand-ms.lbx
+2022/08/21 | 8791 | macros/latex/contrib/biblatex-ms/latex/cbx/authoryear-comp-ms.cbx
+2022/08/21 | 8787 | macros/latex/contrib/biblatex-ms/latex/cbx/verbose-trad2-ms.cbx
2022/08/21 | 8722 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-positioning-plus.tex
+2022/08/21 | 8691 | macros/latex/contrib/biblatex-ms/latex/cbx/verbose-note-ms.cbx
2022/08/21 | 8561 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-misc.tex
+2022/08/21 | 843 | macros/latex/contrib/biblatex-ms/doc/examples/82-style-debug-ms.tex
+2022/08/21 | 8435 | macros/latex/contrib/biblatex-ms/latex/blx-case-expl3-ms.sty
2022/08/21 | 8419 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-paths.ortho.tex
+2022/08/21 | 8366 | macros/latex/contrib/biblatex-ms/latex/blx-case-latex2e-ms.sty
+2022/08/21 | 81705 | macros/latex/contrib/biblatex-ms/doc/examples/10-references-per-section-bibtex-ms.pdf
+2022/08/21 | 81705 | macros/latex/contrib/biblatex-ms/doc/examples/10-references-per-section-biber-ms.pdf
+2022/08/21 | 813 | macros/latex/contrib/biblatex-ms/doc/examples/91-sorting-schemes-ms.tex
+2022/08/21 | 8118 | macros/latex/contrib/biblatex-ms/doc/examples/76-style-verbose-trad3-ms.tex
2022/08/21 | 80 | macros/latex/contrib/runcode/generated/runcode_troubleshoot_inln8.tex
2022/08/21 | 80 | macros/latex/contrib/runcode/generated/runcode_troubleshoot_inln7.tex
+2022/08/21 | 809 | macros/latex/contrib/biblatex-ms/latex/lbx/australian-ms.lbx
+2022/08/21 | 8032 | macros/latex/contrib/biblatex-ms/doc/examples/73-style-verbose-inote-ms.tex
+2022/08/21 | 8027 | macros/latex/contrib/biblatex-ms/latex/bbx/authoryear-ms.bbx
+2022/08/21 | 80156 | macros/latex/contrib/biblatex-ms/doc/examples/04-delimiters-biber-ms.pdf
+2022/08/21 | 80152 | macros/latex/contrib/biblatex-ms/doc/examples/04-delimiters-bibtex-ms.pdf
+2022/08/21 | 794 | macros/latex/contrib/biblatex-ms/doc/examples/81-style-draft-ms.tex
+2022/08/21 | 7939 | macros/latex/contrib/biblatex-ms/latex/cbx/verbose-trad3-ms.cbx
+2022/08/21 | 786 | macros/latex/contrib/biblatex-ms/doc/examples/15-references-by-type-ms.tex
+2022/08/21 | 7804 | macros/latex/contrib/biblatex-ms/latex/cbx/verbose-ibid-ms.cbx
+2022/08/21 | 7745 | macros/latex/contrib/biblatex-ms/doc/examples/96-dates-ms.tex
+2022/08/21 | 772 | macros/latex/contrib/biblatex-ms/latex/lbx/nswissgerman-ms.lbx
+2022/08/21 | 7713 | macros/latex/contrib/biblatex-ms/doc/examples/50-style-authoryear-ms.tex
+2022/08/21 | 760 | macros/latex/contrib/biblatex-ms/doc/examples/42-style-alphabetic-template-ms.tex
+2022/08/21 | 7481 | macros/latex/contrib/biblatex-ms/doc/examples/51-style-authoryear-ibid-ms.tex
+2022/08/21 | 747 | macros/latex/contrib/biblatex-ms/doc/examples/41-style-alphabetic-verb-ms.tex
+2022/08/21 | 72 | macros/latex/contrib/biblatex-ms/latex/biblatex-ms.cfg
+2022/08/21 | 7291 | macros/latex/contrib/biblatex-ms/doc/examples/53-style-authoryear-icomp-ms.tex
2022/08/21 | 726 | graphics/pgf/contrib/tikz-ext/README.md
-2022/08/21 | 7264 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
+2022/08/21 | 7005 | macros/latex/contrib/biblatex-ms/doc/examples/71-style-verbose-ibid-ms.tex
+2022/08/21 | 7003 | macros/latex/contrib/biblatex-ms/latex/cbx/verbose-ms.cbx
+2022/08/21 | 68013 | macros/latex/contrib/biblatex-ms/doc/examples/biblatex-examples-ms.bib
+2022/08/21 | 68013 | macros/latex/contrib/biblatex-ms/bibtex/bib/biblatex/biblatex-examples-ms.bib
+2022/08/21 | 6702 | macros/latex/contrib/biblatex-ms/latex/cbx/authortitle-icomp-ms.cbx
+2022/08/21 | 65771 | macros/latex/contrib/biblatex-ms/bibtex/bst/biblatex-ms.bst
2022/08/21 | 6455 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-main-body.tex
+2022/08/21 | 63347 | macros/latex/contrib/biblatex-ms/doc/examples/92-bibliographylists-biber-ms.pdf
2022/08/21 | 6124 | systems/texlive/tlnet/archive/checkcites.r64155.tar.xz
2022/08/21 | 60 | macros/latex/contrib/runcode/generated/runcode_troubleshoot_inln2.tex
+2022/08/21 | 594312 | macros/latex/contrib/biblatex-ms/latex/biblatex-ms.sty
+2022/08/21 | 5891 | macros/latex/contrib/biblatex-ms/doc/examples/72-style-verbose-note-ms.tex
+2022/08/21 | 5783 | macros/latex/contrib/biblatex-ms/doc/examples/52-style-authoryear-comp-ms.tex
+2022/08/21 | 574 | macros/latex/contrib/biblatex-ms/latex/lbx/naustrian-ms.lbx
+2022/08/21 | 5715 | macros/latex/contrib/biblatex-ms/latex/cbx/authortitle-comp-ms.cbx
2022/08/21 | 554 | macros/latex/contrib/runcode/generated/testWithrunR.tex
+2022/08/21 | 5510 | macros/latex/contrib/biblatex-ms/doc/examples/98-multiscript-ms.tex
+2022/08/21 | 548 | macros/latex/contrib/biblatex-ms/doc/examples/02-annotations-ms.tex
2022/08/21 | 5434 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-pgf-trans.tex
2022/08/21 | 5332 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-trans.tex
+2022/08/21 | 523 | macros/latex/contrib/biblatex-ms/latex/lbx/ngerman-ms.lbx
+2022/08/21 | 5197 | macros/latex/contrib/biblatex-ms/README
+2022/08/21 | 5178 | macros/latex/contrib/biblatex-ms/doc/examples/01-introduction-ms.tex
+2022/08/21 | 51653 | macros/latex/contrib/biblatex-ms/CHANGES-ms.md
+2022/08/21 | 5134 | macros/latex/contrib/biblatex-ms/latex/cbx/authoryear-ibid-ms.cbx
+2022/08/21 | 5094 | macros/latex/contrib/biblatex-ms/doc/examples/21-indexing-multiple-ms.tex
+2022/08/21 | 505 | macros/latex/contrib/biblatex-ms/doc/examples/95-customlists-ms.bib
+2022/08/21 | 5050 | macros/latex/contrib/biblatex-ms/doc/examples/70-style-verbose-ms.tex
2022/08/21 | 4 | macros/latex/contrib/runcode/generated/runcode_troubleshoot_inln6.tex
2022/08/21 | 4873 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-node-families.tex
+2022/08/21 | 47880 | macros/latex/contrib/biblatex-ms/latex/lbx/spanish-ms.lbx
+2022/08/21 | 477 | macros/latex/contrib/biblatex-ms/latex/lbx/swissgerman-ms.lbx
+2022/08/21 | 4632 | macros/latex/contrib/biblatex-ms/latex/cbx/numeric-ms.cbx
+2022/08/21 | 4614 | macros/latex/contrib/biblatex-ms/latex/bbx/reading-ms.bbx
+2022/08/21 | 45862 | macros/latex/contrib/biblatex-ms/latex/lbx/russian-ms.lbx
+2022/08/21 | 45734 | macros/latex/contrib/biblatex-ms/latex/lbx/lithuanian-ms.lbx
+2022/08/21 | 45260 | macros/latex/contrib/biblatex-ms/latex/lbx/bulgarian-ms.lbx
+2022/08/21 | 44949 | macros/latex/contrib/biblatex-ms/latex/lbx/ukrainian-ms.lbx
+2022/08/21 | 43840 | macros/latex/contrib/biblatex-ms/latex/lbx/latvian-ms.lbx
+2022/08/21 | 4315 | macros/latex/contrib/biblatex-ms/latex/cbx/alphabetic-ms.cbx
+2022/08/21 | 426 | macros/latex/contrib/biblatex-ms/doc/examples/97-annotations-ms.bib
2022/08/21 | 412096 | macros/latex/contrib/runcode.zip
+2022/08/21 | 4043 | macros/latex/contrib/biblatex-ms/latex/bbx/debug-ms.bbx
+2022/08/21 | 39968 | macros/latex/contrib/biblatex-ms/latex/lbx/english-ms.lbx
+2022/08/21 | 3979 | macros/latex/contrib/biblatex-ms/latex/cbx/authoryear-ms.cbx
+2022/08/21 | 394 | macros/latex/contrib/biblatex-ms/doc/examples/90-related-entries-ms.tex
2022/08/21 | 3948 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-paths.arcto.tex
+2022/08/21 | 39272 | macros/latex/contrib/biblatex-ms/latex/lbx/magyar-ms.lbx
+2022/08/21 | 39226 | macros/latex/contrib/biblatex-ms/doc/examples/03-localization-keys-ms.tex
+2022/08/21 | 3853 | macros/latex/contrib/biblatex-ms/latex/cbx/authortitle-ibid-ms.cbx
+2022/08/21 | 38407 | macros/latex/contrib/biblatex-ms/doc/examples/93-nameparts-biber-ms.pdf
+2022/08/21 | 3786 | macros/latex/contrib/biblatex-ms/latex/blx-unicode-ms.def
2022/08/21 | 378489 | graphics/pgf/contrib/tikz-ext.zip
+2022/08/21 | 37455 | macros/latex/contrib/biblatex-ms/latex/lbx/finnish-ms.lbx
+2022/08/21 | 3716 | macros/latex/contrib/biblatex-ms/doc/examples/60-style-authortitle-ms.tex
+2022/08/21 | 36724 | macros/latex/contrib/biblatex-ms/latex/lbx/catalan-ms.lbx
+2022/08/21 | 36620906 | biblio/biber-ms/biber-ms-macos/biber-ms-4.0-darwinlegacy_x86_64.tar.gz
+2022/08/21 | 36091 | macros/latex/contrib/biblatex-ms/latex/lbx/greek-ms.lbx
+2022/08/21 | 3591 | macros/latex/contrib/biblatex-ms/doc/examples/22-indexing-subentry-ms.tex
+2022/08/21 | 35785 | macros/latex/contrib/biblatex-ms/latex/lbx/romanian-ms.lbx
+2022/08/21 | 35748 | macros/latex/contrib/biblatex-ms/latex/lbx/marathi-ms.lbx
2022/08/21 | 356908 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual.pdf
+2022/08/21 | 35244 | macros/latex/contrib/biblatex-ms/latex/lbx/french-ms.lbx
+2022/08/21 | 3523 | macros/latex/contrib/biblatex-ms/doc/examples/94-labelprefix-ms.tex
2022/08/21 | 3458 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-paths.timer.tex
+2022/08/21 | 3457 | macros/latex/contrib/biblatex-ms/latex/cbx/authortitle-ticomp-ms.cbx
+2022/08/21 | 3440 | macros/latex/contrib/biblatex-ms/latex/bbx/authortitle-ms.bbx
+2022/08/21 | 33911 | macros/latex/contrib/biblatex-ms/latex/lbx/german-ms.lbx
+2022/08/21 | 33874 | macros/latex/contrib/biblatex-ms/latex/lbx/serbianc-ms.lbx
+2022/08/21 | 33854 | macros/latex/contrib/biblatex-ms/latex/lbx/czech-ms.lbx
+2022/08/21 | 33799 | macros/latex/contrib/biblatex-ms/latex/lbx/estonian-ms.lbx
+2022/08/21 | 32946 | macros/latex/contrib/biblatex-ms/latex/lbx/slovak-ms.lbx
+2022/08/21 | 328741 | macros/latex/contrib/biblatex-ms/doc/examples/74-style-verbose-trad1-biber-ms.pdf
+2022/08/21 | 32862 | macros/latex/contrib/biblatex-ms/latex/blx-dm-ms.def
+2022/08/21 | 32799 | macros/latex/contrib/biblatex-ms/latex/lbx/polish-ms.lbx
+2022/08/21 | 3276 | macros/latex/contrib/biblatex-ms/doc/examples/95-customlists-ms.tex
+2022/08/21 | 32752 | macros/latex/contrib/biblatex-ms/latex/lbx/turkish-ms.lbx
+2022/08/21 | 327370 | macros/latex/contrib/biblatex-ms/doc/examples/74-style-verbose-trad1-bibtex-ms.pdf
+2022/08/21 | 32288 | macros/latex/contrib/biblatex-ms/latex/lbx/danish-ms.lbx
+2022/08/21 | 3209 | macros/latex/contrib/biblatex-ms/doc/examples/61-style-authortitle-ibid-ms.tex
+2022/08/21 | 32065 | macros/latex/contrib/biblatex-ms/latex/lbx/slovene-ms.lbx
+2022/08/21 | 31489 | macros/latex/contrib/biblatex-ms/latex/lbx/basque-ms.lbx
+2022/08/21 | 31454 | macros/latex/contrib/biblatex-ms/latex/lbx/dutch-ms.lbx
+2022/08/21 | 31281 | macros/latex/contrib/biblatex-ms/doc/examples/90-related-entries-biber-ms.pdf
2022/08/21 | 3084 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-calendar.tex
+2022/08/21 | 3018 | macros/latex/contrib/biblatex-ms/doc/examples/31-style-numeric-comp-ms.tex
+2022/08/21 | 30143 | macros/latex/contrib/biblatex-ms/latex/lbx/portuguese-ms.lbx
+2022/08/21 | 30039 | macros/latex/contrib/biblatex-ms/latex/lbx/norsk-ms.lbx
+2022/08/21 | 29925 | macros/latex/contrib/biblatex-ms/latex/lbx/brazilian-ms.lbx
+2022/08/21 | 29864 | macros/latex/contrib/biblatex-ms/latex/lbx/croatian-ms.lbx
2022/08/21 | 297 | graphics/pgf/contrib/tikz-ext/pgfcalendar-ext.tex
2022/08/21 | 295572 | systems/texlive/tlnet/archive/checkcites.doc.r64155.tar.xz
+2022/08/21 | 29446 | macros/latex/contrib/biblatex-ms/latex/lbx/galician-ms.lbx
+2022/08/21 | 2937 | macros/latex/contrib/biblatex-ms/latex/cbx/authortitle-tcomp-ms.cbx
+2022/08/21 | 2920 | macros/latex/contrib/biblatex-ms/latex/lbx/british-ms.lbx
+2022/08/21 | 2902 | macros/latex/contrib/biblatex-ms/doc/examples/18-numeric-hybrid-ms.tex
+2022/08/21 | 290007 | macros/latex/contrib/biblatex-ms/doc/examples/60-style-authortitle-biber-ms.pdf
+2022/08/21 | 2896 | macros/latex/contrib/biblatex-ms/latex/cbx/authortitle-ms.cbx
+2022/08/21 | 2836 | macros/latex/contrib/biblatex-ms/doc/examples/63-style-authortitle-icomp-ms.tex
+2022/08/21 | 280070 | macros/latex/contrib/biblatex-ms/doc/examples/50-style-authoryear-biber-ms.pdf
+2022/08/21 | 279 | macros/latex/contrib/biblatex-ms/latex/lbx/austrian-ms.lbx
2022/08/21 | 279160 | systems/texlive/tlnet/archive/msu-thesis.doc.r64154.tar.xz
+2022/08/21 | 277799 | macros/latex/contrib/biblatex-ms/doc/examples/50-style-authoryear-bibtex-ms.pdf
+2022/08/21 | 275259 | macros/latex/contrib/biblatex-ms/doc/examples/60-style-authortitle-bibtex-ms.pdf
+2022/08/21 | 274161 | macros/latex/contrib/biblatex-ms/doc/examples/73-style-verbose-inote-biber-ms.pdf
+2022/08/21 | 273584 | macros/latex/contrib/biblatex-ms/doc/examples/75-style-verbose-trad2-biber-ms.pdf
2022/08/21 | 27315 | support/TeX4ht/source/Makefile
+2022/08/21 | 272786 | macros/latex/contrib/biblatex-ms/doc/examples/73-style-verbose-inote-bibtex-ms.pdf
+2022/08/21 | 272203 | macros/latex/contrib/biblatex-ms/doc/examples/75-style-verbose-trad2-bibtex-ms.pdf
+2022/08/21 | 272059 | macros/latex/contrib/biblatex-ms/doc/examples/71-style-verbose-ibid-biber-ms.pdf
+2022/08/21 | 270799 | macros/latex/contrib/biblatex-ms/doc/examples/76-style-verbose-trad3-biber-ms.pdf
+2022/08/21 | 270652 | macros/latex/contrib/biblatex-ms/doc/examples/71-style-verbose-ibid-bibtex-ms.pdf
+2022/08/21 | 270384 | macros/latex/contrib/biblatex-ms/doc/examples/72-style-verbose-note-biber-ms.pdf
+2022/08/21 | 26961 | macros/latex/contrib/biblatex-ms/latex/lbx/swedish-ms.lbx
+2022/08/21 | 269420 | macros/latex/contrib/biblatex-ms/doc/examples/76-style-verbose-trad3-bibtex-ms.pdf
+2022/08/21 | 2691 | macros/latex/contrib/biblatex-ms/doc/examples/30-style-numeric-ms.tex
+2022/08/21 | 268908 | macros/latex/contrib/biblatex-ms/doc/examples/72-style-verbose-note-bibtex-ms.pdf
+2022/08/21 | 268058 | macros/latex/contrib/biblatex-ms/doc/examples/70-style-verbose-biber-ms.pdf
+2022/08/21 | 2666 | macros/latex/contrib/biblatex-ms/doc/examples/01-introduction.run-ms.xml
+2022/08/21 | 266542 | macros/latex/contrib/biblatex-ms/doc/examples/70-style-verbose-bibtex-ms.pdf
+2022/08/21 | 26448 | biblio/biber-ms/base/documentation/Changes
+2022/08/21 | 26401 | macros/latex/contrib/biblatex-ms/latex/lbx/icelandic-ms.lbx
+2022/08/21 | 2638 | macros/latex/contrib/biblatex-ms/doc/examples/64-style-authortitle-terse-ms.tex
+2022/08/21 | 263753 | biblio/biber-ms/base/documentation/biber-ms.pdf
2022/08/21 | 25 | macros/latex/contrib/runcode/generated/runcode_troubleshoot_inln5.tex
2022/08/21 | 25 | macros/latex/contrib/runcode/generated/runcode_troubleshoot_inln4.tex
+2022/08/21 | 2588 | macros/latex/contrib/biblatex-ms/doc/examples/66-style-authortitle-ticomp-ms.tex
+2022/08/21 | 2583 | macros/latex/contrib/biblatex-ms/doc/examples/80-style-reading-ms.tex
2022/08/21 | 257 | graphics/pgf/contrib/tikz-ext/pgfcalendar-ext.sty
+2022/08/21 | 2575 | macros/latex/contrib/biblatex-ms/latex/cbx/numeric-verb-ms.cbx
+2022/08/21 | 25683 | macros/latex/contrib/biblatex-ms/latex/bbx/standard-ms.bbx
+2022/08/21 | 25633454 | biblio/biber-ms/biber-ms-windows/biber-ms-4.0-MSWIN64.zip
+2022/08/21 | 254414 | macros/latex/contrib/biblatex-ms/doc/examples/03-localization-keys-biber-ms.pdf
+2022/08/21 | 253881 | macros/latex/contrib/biblatex-ms/doc/examples/03-localization-keys-bibtex-ms.pdf
+2022/08/21 | 25295 | macros/latex/contrib/biblatex-ms/doc/examples/96-dates-biber-ms.pdf
+2022/08/21 | 25177 | macros/latex/contrib/biblatex-ms/latex/blx-bibtex-ms.def
+2022/08/21 | 24650 | macros/latex/contrib/biblatex-ms/latex/lbx/serbian-ms.lbx
+2022/08/21 | 24646877 | biblio/biber-ms/biber-ms-linux/biber-ms-4.0-linux_x86_64.tar.gz
2022/08/21 | 245634 | macros/latex/contrib/runcode/runcode.pdf
+2022/08/21 | 244291 | macros/latex/contrib/biblatex-ms/doc/examples/80-style-reading-bibtex-ms.pdf
+2022/08/21 | 244291 | macros/latex/contrib/biblatex-ms/doc/examples/80-style-reading-biber-ms.pdf
+2022/08/21 | 2437 | macros/latex/contrib/biblatex-ms/doc/examples/20-indexing-single-ms.tex
+2022/08/21 | 24027 | macros/latex/contrib/biblatex-ms/doc/examples/94-labelprefix-biber-ms.pdf
+2022/08/21 | 2398 | macros/latex/contrib/biblatex-ms/doc/examples/04-delimiters-ms.tex
+2022/08/21 | 23973 | macros/latex/contrib/biblatex-ms/latex/lbx/italian-ms.lbx
2022/08/21 | 2394 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-calendar-plus.tex
+2022/08/21 | 2391 | macros/latex/contrib/biblatex-ms/latex/cbx/debug-ms.cbx
+2022/08/21 | 23901802 | biblio/biber-ms/biber-ms-windows/biber-ms-4.0-MSWIN32.zip
2022/08/21 | 2265 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-topaths.arcthrough.tex
+2022/08/21 | 2260 | macros/latex/contrib/biblatex-ms/latex/cbx/alphabetic-verb-ms.cbx
+2022/08/21 | 225925 | macros/latex/contrib/biblatex-ms/doc/examples/53-style-authoryear-icomp-bibtex-ms.pdf
+2022/08/21 | 225925 | macros/latex/contrib/biblatex-ms/doc/examples/53-style-authoryear-icomp-biber-ms.pdf
+2022/08/21 | 222705 | macros/latex/contrib/biblatex-ms/doc/examples/63-style-authortitle-icomp-bibtex-ms.pdf
+2022/08/21 | 222705 | macros/latex/contrib/biblatex-ms/doc/examples/63-style-authortitle-icomp-biber-ms.pdf
+2022/08/21 | 22051426 | biblio/biber-ms/biber-ms-linux/biber-ms-4.0-linux_x86_32.tar.gz
+2022/08/21 | 2193 | macros/latex/contrib/biblatex-ms/latex/blx-natbib-ms.def
+2022/08/21 | 21707 | macros/latex/contrib/biblatex-ms/doc/examples/91-sorting-schemes-biber-ms.pdf
+2022/08/21 | 214456 | macros/latex/contrib/biblatex-ms/doc/examples/02-annotations-biber-ms.pdf
+2022/08/21 | 213637 | macros/latex/contrib/biblatex-ms/doc/examples/51-style-authoryear-ibid-bibtex-ms.pdf
+2022/08/21 | 213637 | macros/latex/contrib/biblatex-ms/doc/examples/51-style-authoryear-ibid-biber-ms.pdf
+2022/08/21 | 2129 | macros/latex/contrib/biblatex-ms/latex/blx-mcite-ms.def
+2022/08/21 | 207609 | macros/latex/contrib/biblatex-ms/doc/examples/40-style-alphabetic-biber-ms.pdf
+2022/08/21 | 207478 | macros/latex/contrib/biblatex-ms/doc/examples/02-annotations-bibtex-ms.pdf
+2022/08/21 | 20549 | macros/latex/contrib/biblatex-ms/latex/lbx/nynorsk-ms.lbx
+2022/08/21 | 203055 | macros/latex/contrib/biblatex-ms/doc/examples/61-style-authortitle-ibid-bibtex-ms.pdf
+2022/08/21 | 203055 | macros/latex/contrib/biblatex-ms/doc/examples/61-style-authortitle-ibid-biber-ms.pdf
+2022/08/21 | 1997 | macros/latex/contrib/biblatex-ms/doc/examples/10-references-per-section-ms.tex
+2022/08/21 | 199318 | macros/latex/contrib/biblatex-ms/doc/examples/40-style-alphabetic-bibtex-ms.pdf
+2022/08/21 | 1991 | macros/latex/contrib/biblatex-ms/doc/examples/40-style-alphabetic-ms.tex
+2022/08/21 | 196031 | macros/latex/contrib/biblatex-ms/doc/examples/31-style-numeric-comp-bibtex-ms.pdf
+2022/08/21 | 195323 | macros/latex/contrib/biblatex-ms/doc/examples/64-style-authortitle-terse-bibtex-ms.pdf
+2022/08/21 | 195323 | macros/latex/contrib/biblatex-ms/doc/examples/64-style-authortitle-terse-biber-ms.pdf
+2022/08/21 | 194914 | macros/latex/contrib/biblatex-ms/doc/examples/31-style-numeric-comp-biber-ms.pdf
+2022/08/21 | 1945 | macros/latex/contrib/biblatex-ms/doc/examples/16-numeric-prefixed-1-ms.tex
2022/08/21 | 18978 | macros/latex/contrib/runcode/runcode_troubleshoot.tex
+2022/08/21 | 1879 | macros/latex/contrib/biblatex-ms/doc/examples/11-references-by-section-ms.tex
+2022/08/21 | 183623 | macros/latex/contrib/biblatex-ms/doc/examples/13-references-by-keyword-biber-ms.pdf
+2022/08/21 | 183127 | macros/latex/contrib/biblatex-ms/doc/examples/14-references-by-category-biber-ms.pdf
+2022/08/21 | 1821 | macros/latex/contrib/biblatex-ms/latex/bbx/numeric-ms.bbx
+2022/08/21 | 181606 | macros/latex/contrib/biblatex-ms/doc/examples/32-style-numeric-verb-bibtex-ms.pdf
+2022/08/21 | 181606 | macros/latex/contrib/biblatex-ms/doc/examples/32-style-numeric-verb-biber-ms.pdf
+2022/08/21 | 1811 | macros/latex/contrib/biblatex-ms/latex/cbx/draft-ms.cbx
+2022/08/21 | 1800 | macros/latex/contrib/biblatex-ms/doc/examples/97-annotations-ms.tex
+2022/08/21 | 177358 | macros/latex/contrib/biblatex-ms/doc/examples/21-indexing-multiple-biber-ms.pdf
+2022/08/21 | 177233 | macros/latex/contrib/biblatex-ms/doc/examples/30-style-numeric-bibtex-ms.pdf
+2022/08/21 | 177233 | macros/latex/contrib/biblatex-ms/doc/examples/30-style-numeric-biber-ms.pdf
+2022/08/21 | 1770072 | macros/latex/contrib/biblatex-ms/doc/biblatex-ms.pdf
+2022/08/21 | 176169 | macros/latex/contrib/biblatex-ms/doc/examples/20-indexing-single-biber-ms.pdf
+2022/08/21 | 175130 | macros/latex/contrib/biblatex-ms/doc/examples/13-references-by-keyword-bibtex-ms.pdf
+2022/08/21 | 174634 | macros/latex/contrib/biblatex-ms/doc/examples/14-references-by-category-bibtex-ms.pdf
+2022/08/21 | 1734 | macros/latex/contrib/biblatex-ms/latex/bbx/alphabetic-ms.bbx
+2022/08/21 | 172 | macros/latex/contrib/biblatex-ms/latex/lbx/american-ms.lbx
+2022/08/21 | 171031 | macros/latex/contrib/biblatex-ms/doc/examples/21-indexing-multiple-bibtex-ms.pdf
+2022/08/21 | 169812 | macros/latex/contrib/biblatex-ms/doc/examples/20-indexing-single-bibtex-ms.pdf
+2022/08/21 | 1685 | macros/latex/contrib/biblatex-ms/doc/examples/14-references-by-category-ms.tex
+2022/08/21 | 167962 | macros/latex/contrib/biblatex-ms/doc/examples/01-introduction-bibtex-ms.pdf
+2022/08/21 | 167962 | macros/latex/contrib/biblatex-ms/doc/examples/01-introduction-biber-ms.pdf
+2022/08/21 | 166 | macros/latex/contrib/biblatex-ms/latex/lbx/canadian-ms.lbx
+2022/08/21 | 16647 | macros/latex/contrib/biblatex-ms/doc/examples/97-annotations-biber-ms.pdf
+2022/08/21 | 163973 | macros/latex/contrib/biblatex-ms/doc/examples/19-alphabetic-prefixed-biber-ms.pdf
+2022/08/21 | 163360 | macros/latex/contrib/biblatex-ms/doc/examples/16-numeric-prefixed-1-biber-ms.pdf
+2022/08/21 | 163329 | macros/latex/contrib/biblatex-ms/doc/examples/17-numeric-prefixed-2-biber-ms.pdf
2022/08/21 | 1631 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-patterns.images.tex
2022/08/21 | 161688 | macros/latex/contrib/runcode/runcode_troubleshoot.pdf
+2022/08/21 | 159 | macros/latex/contrib/biblatex-ms/doc/examples/95-customlists-ms.dbx
2022/08/21 | 15895 | macros/latex/contrib/runcode/runcode.sty
+2022/08/21 | 157616 | macros/latex/contrib/biblatex-ms/doc/examples/19-alphabetic-prefixed-bibtex-ms.pdf
+2022/08/21 | 156540 | macros/latex/contrib/biblatex-ms/doc/examples/17-numeric-prefixed-2-bibtex-ms.pdf
+2022/08/21 | 156540 | macros/latex/contrib/biblatex-ms/doc/examples/16-numeric-prefixed-1-bibtex-ms.pdf
+2022/08/21 | 1552 | macros/latex/contrib/biblatex-ms/doc/examples/92-bibliographylists-ms.tex
+2022/08/21 | 1549 | macros/latex/contrib/biblatex-ms/doc/examples/32-style-numeric-verb-ms.tex
+2022/08/21 | 149733 | macros/latex/contrib/biblatex-ms/doc/examples/81-style-draft-bibtex-ms.pdf
+2022/08/21 | 149733 | macros/latex/contrib/biblatex-ms/doc/examples/81-style-draft-biber-ms.pdf
+2022/08/21 | 149679 | macros/latex/contrib/biblatex-ms/doc/examples/82-style-debug-biber-ms.pdf
+2022/08/21 | 148860 | macros/latex/contrib/biblatex-ms/doc/examples/82-style-debug-bibtex-ms.pdf
2022/08/21 | 14845 | macros/latex/contrib/runcode/runcode.tex
+2022/08/21 | 147776 | macros/latex/contrib/biblatex-ms/doc/examples/66-style-authortitle-ticomp-bibtex-ms.pdf
+2022/08/21 | 147776 | macros/latex/contrib/biblatex-ms/doc/examples/66-style-authortitle-ticomp-biber-ms.pdf
+2022/08/21 | 147304 | macros/latex/contrib/biblatex-ms/doc/examples/52-style-authoryear-comp-bibtex-ms.pdf
+2022/08/21 | 147304 | macros/latex/contrib/biblatex-ms/doc/examples/52-style-authoryear-comp-biber-ms.pdf
2022/08/21 | 145077 | support/TeX4ht/source/tex4ht-mathml.tex
2022/08/21 | 1449 | macros/latex/contrib/runcode/README
+2022/08/21 | 143176 | macros/latex/contrib/biblatex-ms/doc/examples/65-style-authortitle-tcomp-bibtex-ms.pdf
+2022/08/21 | 143176 | macros/latex/contrib/biblatex-ms/doc/examples/65-style-authortitle-tcomp-biber-ms.pdf
+2022/08/21 | 14156 | macros/latex/contrib/biblatex-ms/doc/examples/74-style-verbose-trad1-ms.tex
+2022/08/21 | 14145 | macros/latex/contrib/biblatex-ms/doc/examples/98-multiscript-biber-ms.pdf
+2022/08/21 | 1412 | macros/latex/contrib/biblatex-ms/doc/examples/19-alphabetic-prefixed-ms.tex
+2022/08/21 | 13922 | macros/latex/contrib/biblatex-ms/latex/blx-compat-ms.def
+2022/08/21 | 135 | macros/latex/contrib/biblatex-ms/latex/lbx/portuges-ms.lbx
+2022/08/21 | 1349 | macros/latex/contrib/biblatex-ms/doc/examples/65-style-authortitle-tcomp-ms.tex
+2022/08/21 | 1343 | macros/latex/contrib/biblatex-ms/doc/examples/12-references-by-segment-ms.tex
+2022/08/21 | 1337 | macros/latex/contrib/biblatex-ms/doc/examples/62-style-authortitle-comp-ms.tex
+2022/08/21 | 132 | macros/latex/contrib/biblatex-ms/latex/lbx/USenglish-ms.lbx
+2022/08/21 | 132465 | macros/latex/contrib/biblatex-ms/doc/examples/biblatex-examples-ms.bltxml
+2022/08/21 | 132465 | macros/latex/contrib/biblatex-ms/biber/bltxml/biblatex-examples-ms.bltxml
+2022/08/21 | 131 | macros/latex/contrib/biblatex-ms/latex/lbx/brazil-ms.lbx
+2022/08/21 | 1314 | macros/latex/contrib/biblatex-ms/doc/examples/13-references-by-keyword-ms.tex
+2022/08/21 | 130 | macros/latex/contrib/biblatex-ms/latex/lbx/UKenglish-ms.lbx
+2022/08/21 | 130 | macros/latex/contrib/biblatex-ms/latex/lbx/slovenian-ms.lbx
2022/08/21 | 12 | macros/latex/contrib/runcode/generated/runcode_troubleshoot_inln9.tex
+2022/08/21 | 1290 | macros/latex/contrib/biblatex-ms/doc/examples/17-numeric-prefixed-2-ms.tex
+2022/08/21 | 128 | macros/latex/contrib/biblatex-ms/latex/lbx/hungarian-ms.lbx
+2022/08/21 | 1287 | macros/latex/contrib/biblatex-ms/latex/cbx/authortitle-terse-ms.cbx
+2022/08/21 | 126042 | macros/latex/contrib/biblatex-ms/doc/examples/62-style-authortitle-comp-bibtex-ms.pdf
+2022/08/21 | 126042 | macros/latex/contrib/biblatex-ms/doc/examples/62-style-authortitle-comp-biber-ms.pdf
+2022/08/21 | 12470 | macros/latex/contrib/biblatex-ms/doc/examples/93-nameparts-ms.tex
+2022/08/21 | 12296 | macros/latex/contrib/biblatex-ms/doc/examples/95-customlists-biber-ms.pdf
+2022/08/21 | 119269 | macros/latex/contrib/biblatex-ms/doc/examples/15-references-by-type-bibtex-ms.pdf
+2022/08/21 | 119269 | macros/latex/contrib/biblatex-ms/doc/examples/15-references-by-type-biber-ms.pdf
+2022/08/21 | 117927 | biblio/biber-ms/base/documentation/utf8-macro-map.html
+2022/08/21 | 1163 | macros/latex/contrib/biblatex-ms/latex/bbx/draft-ms.bbx
2022/08/21 | 11452 | systems/texlive/tlnet/archive/msu-thesis.r64154.tar.xz
2022/08/21 | 11384 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-main-preamble.tex
+2022/08/21 | 112916 | macros/latex/contrib/biblatex-ms/doc/examples/18-numeric-hybrid-bibtex-ms.pdf
+2022/08/21 | 112916 | macros/latex/contrib/biblatex-ms/doc/examples/18-numeric-hybrid-biber-ms.pdf
2022/08/21 | 1128037 | support/TeX4ht/source/tex4ht-4ht.tex
+2022/08/21 | 111947 | macros/latex/contrib/biblatex-ms/doc/examples/41-style-alphabetic-verb-bibtex-ms.pdf
+2022/08/21 | 111947 | macros/latex/contrib/biblatex-ms/doc/examples/41-style-alphabetic-verb-biber-ms.pdf
2022/08/21 | 11185 | graphics/pgf/contrib/tikz-ext/tikzlibraryext.node-families.code.tex
+2022/08/21 | 1099893 | macros/latex/contrib/biblatex-ms/doc/biblatex-ms.tex
+2022/08/21 | 1062747 | biblio/biber-ms/base/source/biblatex-biber-ms.tar.gz
+2022/08/21 | 105 | macros/latex/contrib/biblatex-ms/latex/bbx/authortitle-ticomp-ms.bbx
+2022/08/21 | 104 | macros/latex/contrib/biblatex-ms/latex/bbx/authortitle-terse-ms.bbx
+2022/08/21 | 104 | macros/latex/contrib/biblatex-ms/latex/bbx/authortitle-tcomp-ms.bbx
+2022/08/21 | 104 | macros/latex/contrib/biblatex-ms/latex/bbx/authortitle-icomp-ms.bbx
+2022/08/21 | 10428 | macros/latex/contrib/biblatex-ms/latex/cbx/numeric-comp-ms.cbx
+2022/08/21 | 103 | macros/latex/contrib/biblatex-ms/latex/bbx/authortitle-ibid-ms.bbx
+2022/08/21 | 103 | macros/latex/contrib/biblatex-ms/latex/bbx/authortitle-comp-ms.bbx
+2022/08/21 | 102 | macros/latex/contrib/biblatex-ms/latex/bbx/authoryear-icomp-ms.bbx
+2022/08/21 | 102 | macros/latex/contrib/biblatex-ms/doc/examples/93-nameparts-ms.dbx
+2022/08/21 | 101 | macros/latex/contrib/biblatex-ms/latex/bbx/authoryear-ibid-ms.bbx
+2022/08/21 | 101 | macros/latex/contrib/biblatex-ms/latex/bbx/authoryear-comp-ms.bbx
+2022/08/21 | 101 | macros/latex/contrib/biblatex-ms/latex/bbx/alphabetic-verb-ms.bbx
+2022/08/21 | 101002 | macros/latex/contrib/biblatex-ms/doc/examples/42-style-alphabetic-template-bibtex-ms.pdf
+2022/08/21 | 101002 | macros/latex/contrib/biblatex-ms/doc/examples/42-style-alphabetic-template-biber-ms.pdf
+2022/08/21 | 100 | macros/latex/contrib/biblatex-ms/latex/bbx/verbose-trad3-ms.bbx
+2022/08/21 | 100 | macros/latex/contrib/biblatex-ms/latex/bbx/verbose-trad2-ms.bbx
+2022/08/21 | 100 | macros/latex/contrib/biblatex-ms/latex/bbx/verbose-trad1-ms.bbx
+2022/08/21 | 100 | macros/latex/contrib/biblatex-ms/latex/bbx/verbose-inote-ms.bbx
2022/08/20 | 995 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-intro.tex
2022/08/20 | 704 | systems/texlive/tlnet/archive/citation-style-language.win32.r64151.tar.xz
2022/08/20 | 63612 | systems/texlive/tlnet/archive/hereapplies.doc.r64147.tar.xz
@@ -235,7 +883,6 @@
2022/08/20 | 116 | systems/win32/miktex/setup/rpm/rockylinux-9.repo
2022/08/19 | 9535 | macros/latex/contrib/msu-thesis/samples/MSU-thesis-testfile.tex
2022/08/19 | 95244 | systems/texlive/tlnet/archive/luavlna.doc.r64142.tar.xz
-2022/08/19 | 923 | macros/latex/contrib/hereapplies/hereapplies-example.tex
2022/08/19 | 904 | biblio/citation-style-language/citeproc-node-group.lua
2022/08/19 | 857 | graphics/pgf/contrib/fancyqr/fancyqr-style-blobs.code
2022/08/19 | 8425 | biblio/citation-style-language/citeproc-context.lua
@@ -250,21 +897,16 @@
2022/08/19 | 7308 | biblio/citation-style-language/citeproc-node-choose.lua
2022/08/19 | 7188 | macros/latex/contrib/msu-thesis/samples/MSU-thesis-template.tex
2022/08/19 | 69907 | biblio/citation-style-language/apa.csl
-2022/08/19 | 69784 | macros/latex/contrib/hereapplies.zip
2022/08/19 | 6720 | systems/texlive/tlnet/archive/collection-latexextra.r64141.tar.xz
2022/08/19 | 665 | fonts/simpleicons/README.md
2022/08/19 | 6283 | biblio/citation-style-language/citeproc-node-sort.lua
2022/08/19 | 61972 | biblio/citation-style-language/citeproc-engine.lua
2022/08/19 | 617 | biblio/citation-style-language/citeproc-lua.1
2022/08/19 | 615 | macros/latex/contrib/msu-thesis/samples/MSU-thesis-testfile.bib
-2022/08/19 | 611 | macros/latex/contrib/hereapplies/package.json
2022/08/19 | 6100 | biblio/citation-style-language/citeproc-node-locale.lua
2022/08/19 | 580030 | install/biblio/citation-style-language.tds.zip
-2022/08/19 | 5588 | macros/latex/contrib/hereapplies/README.md
2022/08/19 | 5498 | biblio/citation-style-language/citeproc-node-text.lua
2022/08/19 | 5288 | biblio/citation-style-language/nature.csl
-2022/08/19 | 5008 | macros/latex/contrib/hereapplies/lyx-module/hereapplies-example.lyx
-2022/08/19 | 49896 | macros/latex/contrib/hereapplies/hereapplies-example.pdf
2022/08/19 | 4797 | biblio/citation-style-language/citeproc-cli.lua
2022/08/19 | 4766659 | fonts/simpleicons.zip
2022/08/19 | 47520 | biblio/citation-style-language/chicago-fullnote-bibliography.csl
@@ -277,7 +919,6 @@
2022/08/19 | 3696 | biblio/citation-style-language/citeproc-latex.lua
2022/08/19 | 36806 | macros/latex/contrib/msu-thesis/msu-thesis.cls
2022/08/19 | 3582 | graphics/pgf/contrib/fancyqr/README.md
-2022/08/19 | 34523 | macros/latex/contrib/hereapplies/COPYING
2022/08/19 | 33702 | biblio/citation-style-language/citeproc-node-names.lua
2022/08/19 | 31273 | biblio/citation-style-language/citation-style-language.sty
2022/08/19 | 2993 | biblio/citation-style-language/citeproc-ir-node.lua
@@ -315,7 +956,6 @@
2022/08/19 | 2308 | fonts/simpleicons/enc/simpleiconsten.enc
2022/08/19 | 23079 | biblio/citation-style-language/chicago-author-date.csl
2022/08/19 | 23024 | biblio/citation-style-language/csl-locales-el-GR.xml
-2022/08/19 | 2286 | macros/latex/contrib/hereapplies/lyx-module/hereapplies.module
2022/08/19 | 22752 | biblio/citation-style-language/csl-locales-lt-LT.xml
2022/08/19 | 22627 | biblio/citation-style-language/csl-locales-en-US.xml
2022/08/19 | 22542 | biblio/citation-style-language/csl-locales-pt-BR.xml
@@ -389,9 +1029,7 @@
2022/08/19 | 1417 | fonts/simpleicons/tex/simpleicons.sty
2022/08/19 | 14024 | biblio/citation-style-language/citeproc-bib.lua
2022/08/19 | 13585 | biblio/citation-style-language/citeproc-node-date.lua
-2022/08/19 | 13354 | macros/latex/contrib/hereapplies/hereapplies.sty
2022/08/19 | 13278 | biblio/citation-style-language/citation-style-language-doc.tex
-2022/08/19 | 1300 | macros/latex/contrib/hereapplies/ChangeLog.md
2022/08/19 | 12932 | graphics/pgf/contrib/tikz-ext/pgfcalendar-ext.code.tex
2022/08/19 | 1236 | fonts/simpleicons/tfm/SimpleIcons--simpleiconsseven.tfm
2022/08/19 | 123489 | fonts/simpleicons/doc/bindings.tex
@@ -481,7 +1119,6 @@
2022/08/17 | 662 | macros/latex/contrib/fithesis/style/base.dtx
2022/08/17 | 6364 | macros/latex/contrib/fithesis/style/mu/law.dtx
2022/08/17 | 63156 | macros/latex/contrib/fithesis/logo/mu/fithesis-sci.eps
-2022/08/17 | 617532 | support/TeX4ht/source/tex4ht-html4.tex
2022/08/17 | 595510 | macros/latex/contrib/fithesis/logo/mu/fithesis-base.eps
2022/08/17 | 588830 | macros/latex/contrib/exam.zip
2022/08/17 | 569182 | macros/latex/contrib/fithesis/logo/mu/fithesis-fss.eps
@@ -593,7 +1230,6 @@
2022/08/17 | 204 | macros/luatex/generic/luavlna/luavlna-sufdegrees.lua
2022/08/17 | 20324 | macros/latex/contrib/fithesis/locale/czech.dtx
2022/08/17 | 20058 | macros/latex/contrib/fithesis/locale/slovak.dtx
-2022/08/17 | 200199 | support/TeX4ht/source/ChangeLog
2022/08/17 | 19569 | macros/latex/contrib/fithesis/logo/mu/fithesis-med-color.eps
2022/08/17 | 19363 | macros/latex/contrib/fithesis/logo/mu/fithesis-ped-color.eps
2022/08/17 | 18339 | macros/latex/contrib/fithesis/logo/mu/fithesis-law.pdf
@@ -622,42 +1258,3 @@
2022/08/17 | 10396 | macros/latex/contrib/fithesis/logo/mu/fithesis-ped.pdf
2022/08/17 | 101310 | macros/latex/contrib/fithesis/logo/mu/fithesis-pharm-color.eps
2022/08/17 | 101282 | macros/latex/contrib/fithesis/logo/mu/fithesis-pharm.eps
-2022/08/16 | 9476 | graphics/pgf/contrib/tikz-ext/tikzlibraryext.misc.code.tex
-2022/08/16 | 896 | macros/generic/lt3luabridge/README.md
-2022/08/16 | 784594 | macros/latex/contrib/pygmentex.zip
-2022/08/16 | 773 | macros/latex/contrib/pygmentex/README
-2022/08/16 | 689500 | systems/texlive/tlnet/archive/xduts.doc.r64124.tar.xz
-2022/08/16 | 668777 | macros/latex/contrib/pygmentex/pygmentex_demo.pdf
-2022/08/16 | 62882 | macros/latex/contrib/pygmentex/blueshade.png
-2022/08/16 | 521088 | systems/texlive/tlnet/archive/xduts.r64124.tar.xz
-2022/08/16 | 5200 | macros/latex/contrib/profcollege/metapost/PfCArithmetiquePDF.mp
-2022/08/16 | 492628 | macros/generic/lt3luabridge/lt3luabridge.pdf
-2022/08/16 | 490190 | macros/generic/lt3luabridge.zip
-2022/08/16 | 4668 | graphics/pgf/contrib/tikz-ext/tikzlibraryext.paths.arcto.code.tex
-2022/08/16 | 415 | macros/latex/contrib/pygmentex/pygmentex_demo_2.tex
-2022/08/16 | 38168 | systems/texlive/tlnet/archive/xduts.source.r64124.tar.xz
-2022/08/16 | 37310 | macros/latex/contrib/pygmentex/pygmentex_demo_2.pdf
-2022/08/16 | 33360 | systems/texlive/tlnet/archive/exam-zh.r64123.tar.xz
-2022/08/16 | 300 | macros/latex/contrib/pygmentex/Factorial.java
-2022/08/16 | 283 | macros/latex/contrib/pygmentex/pygmentex_demo.py
-2022/08/16 | 253 | macros/generic/lt3luabridge/lt3luabridge.ins
-2022/08/16 | 25110 | macros/latex/contrib/pygmentex/pygmentex_demo.tex
-2022/08/16 | 2497 | graphics/pgf/contrib/tikz-ext/tikzlibraryext.topaths.arcthrough.code.tex
-2022/08/16 | 236 | macros/latex/contrib/pygmentex/pygmentex_demo.c
-2022/08/16 | 217 | macros/generic/lt3luabridge/example.latex
-2022/08/16 | 19105 | macros/generic/lt3luabridge/LICENSE
-2022/08/16 | 1849624 | systems/texlive/tlnet/archive/elegantbook.doc.r64122.tar.xz
-2022/08/16 | 181 | macros/generic/lt3luabridge/example.context
-2022/08/16 | 1739528 | systems/texlive/tlnet/archive/exam-zh.doc.r64123.tar.xz
-2022/08/16 | 1719 | macros/latex/contrib/pygmentex/pygmentex_demo.java
-2022/08/16 | 1682 | macros/latex/contrib/profcollege/metapost/PfCLaTeX.mp
-2022/08/16 | 167 | macros/generic/lt3luabridge/example.plaintex
-2022/08/16 | 166 | macros/latex/contrib/pygmentex/pygmentex_demo.hs
-2022/08/16 | 16261 | macros/latex/contrib/pygmentex/pygmentex.py
-2022/08/16 | 13969 | macros/generic/lt3luabridge/lt3luabridge.dtx
-2022/08/16 | 1389 | macros/generic/lt3luabridge/docstrip.cfg
-2022/08/16 | 135 | macros/latex/contrib/exam/exam.md5
-2022/08/16 | 12029 | macros/latex/contrib/pygmentex/pygmentex.sty
-2022/08/16 | 11876 | systems/texlive/tlnet/archive/elegantbook.r64122.tar.xz
-2022/08/16 | 115 | macros/latex/contrib/pygmentex/pygmentex_demo.delphi
-2022/08/16 | 100 | macros/latex/contrib/pygmentex/pygmentex_demo.pas
diff --git a/biblio/biber-ms/base/README.md b/biblio/biber-ms/base/README.md
new file mode 100644
index 0000000000..cadc928929
--- /dev/null
+++ b/biblio/biber-ms/base/README.md
@@ -0,0 +1,51 @@
+#OVERVIEW
+
+Biber is a BibTeX replacement for users of biblatex, with full Unicode
+support.
+
+**Please note**--the default download for all platforms is 64-bit. Please
+look in the files section for the correct 32-bit platform instead of
+using the default download button if you want 32-bit.
+
+##REQUIREMENTS
+
+Biber is written in Perl with the aim of providing a customised and
+sophisticated data preparation backend for biblatex.
+
+You do not need to install Perl use biber--binaries are provided for many
+operating systems via the main TeX distributions (TeXLive, MacTeX, MiKTeX)
+and also via download from SourceForge.
+
+You only need a Perl installation to use biber in one of the following
+cases:
+
+- A binary version is not available for your OS/platform
+- You wish to keep up with all of the bleeding-edge git commits before they
+- are packaged into a binary.
+
+For the vast majority of users, using the latest binary for the OS/platform
+you are using will be what you want to do. For details on the requirements
+for installing the Perl program version, please see the biber PDF documentation.
+
+The git repository for Biber is kept on github:
+
+[https://github.com/plk/biber](https://github.com/plk/biber)
+
+##SUPPORT AND DOCUMENTATION
+
+After installing, `biber --help` will give you the basic documentation.
+
+The latest PDF documentation can be found here:
+
+[https://sourceforge.net/projects/biblatex-biber/files/biblatex-biber](https://sourceforge.net/projects/biblatex-biber/files/biblatex-biber)
+
+More information, bugfix releases, forums and bug tracker are available at:
+
+[https://github.com/plk/biber](https://github.com/plk/biber)
+
+##BUILDING
+
+If you wish to build you own binary, see the main biber PDF documentation.
+There is a section there on how to do this. The PDF documentation is in the
+`documentation` folder for the release on Sourceforge.
+
diff --git a/biblio/biber-ms/base/documentation/Changes b/biblio/biber-ms/base/documentation/Changes
new file mode 100644
index 0000000000..810bb1d3ab
--- /dev/null
+++ b/biblio/biber-ms/base/documentation/Changes
@@ -0,0 +1,522 @@
+Revision history for Biber
+
+2.18 (2022-06)
+ * Added support for biblatex "pluralothers" option which allows "et
+ al" to be forced to replace more than one name.
+ * Universal x86_64/ARM64 binary
+ * Support for citation-only rules for name templates in sorting (see
+ \visibility macro in sorting name key templates in biblatex)
+2.17 (2022-01)
+ * Tool mode now supports tab indentation in output as well as spaces
+ (see --output-indent)
+ * More compact match/replace syntax for serial items in data maps
+ * Native ARM64 binary for OSX now provided
+2.16 (2020-12)
+ * Better support for Unicode on Windows (10 1803+) with the
+ --winunicode option
+ * Option "output_macro_fields" no longer does anything as macro
+ fields are auto-detected.
+ * New options "output_no_macrodefs" and "output_all_macrodefs" control
+ BibTeX macros (@STRING) output for bibtex format output.
+2.15 (2020-08)
+ * Added --output-legacy-dates and --output-field-replace options to
+ aid in outputting legacy bibtex format in tool and non-tool mode
+ * UTF-8 filenames supported on Windows
+ * INCOMPATIBLE CHANGE - datasource globbing now has to be turned on
+ explicitly with the --glob-datasources option. Globbing causes
+ some issues with UTF8 encoding detection on some OSes and since it
+ is a niche requirement, it is turned off by default.
+ * DEPRECATION WARNING - The BBLXML output format will be removed in
+ version 4. It is rarely used and complicates test suite maintenance
+ considerably.
+2.14 (2019-12)
+ * XDATA now supports granular references so that specific
+ fields/items in a list field may be used and inserted into
+ fields/list positions. This allow, for example, re-use of names
+ from a general XDATA entry containing data about authors. See the
+ biblatex documentation.
+ * Remote Zotero data source requests now send correct header
+ * Annotations are now correctly output for related entries
+ * Better sorting of some name edge cases
+ * New map_entrykey_* mapping verbs
+ * New options --noremove-tmp-dir and --show-tmp-dir to disable of
+ removal on exit and showing location of temporary directory used for
+ intermediate data. Useful for debugging.
+ * Tool mode now accepts multiple data files on the command-line so
+ that data can be spread over several files (e.g. main bib and
+ crossrefs can be kept in separate files)
+ * Biber no longer uses Text::BibTeX/btparse to generation initials
+ from names in normal name parsing mode because it can't handle
+ some Unicode situations.
+2.13 (2019-08-13)
+ * biber now exits with error on some very malformed names instead of
+ skipping them as this can lead to data loss in bibliographies.
+ * Support for named annotations
+2.12 (2018-10-30)
+ * Added support for biblatex literal and named annotation features
+ * Added support for biblatex \ifnocite test
+ * Case insensitive matching operators in sourcemaps (matchi/notmatchi)
+ * Support for biblatex min/maxsortnames options
+ * Added support for biblatex 'noroman' option to supporess roman
+ numeral interpretation in ranges.
+ * Misc bug fixes
+2.11 (2018-02-14)
+ * New entrynocite option for maps which create/clone entries
+ * Misc bug fixes
+2.10 (2017-12-19)
+ * Misc bug fixes
+2.9 (2017-11-04)
+ * Misc bug fixes
+2.8 (2017-11-04)
+ * Updated copyright dates
+ * Support for many new biblatex 3.8 features (see bibatex change doc
+ and PDF manual).
+ * --output-resolve option is now a meta-alias for the more granular
+ --output-resolve-* options - see the biber -? output
+ * The --nouri-encode option is removed. All urls are URL encoded and
+ a new field urlraw is always output with an unencoded version.
+2.7 (2016-12-08)
+ * New option (--nouri-encode) to prevent URL encoding of URLs. Avoids breaking
+ display of URLS which contain non-ASCII.
+ * Misc bug fixes
+2.6 (2016-09-10)
+ * Improved tool mode bibtex output. This has some normalisation
+ consequences for YEAR and custom fields. See PDF doc.
+ * Support for new \ifuniquebaretitle test
+ * Sourcemaps can now be restricted to particular refsections
+ * Perl 5.24 is now required due to use of postfix deref notation
+ * Removed RIS input driver due to lack of use
+ * Added extended name format - see documentation
+ * Added notfield function to sourcemaps - see documentation
+2.5 (2016-05-10)
+ * Added data annotations feature - see biblatex documentation.
+ * Removed the "latinkeys.txt" Unicode::Collate table. This is now
+ pointless because the compiled 'allkeys.txt' is faster and complete.
+ * Incompatible biblatex/biber version is now a fatal error.
+ * Significant performance improvements, particularly in sorting subsystem.
+ * Addition of new bblXML output format and associated RelaxNG XML
+ schema based on active datamodel.
+ * Integration with new biblatex 3.4 labelprefix name change and
+ refcontext option.
+ * Integration with new biblatex 3.4 \DeclareDatafieldSet
+ functionality.
+ * Improved sourcemap looping functionality
+2.4 (2016-03-01)
+ * Misc bug fixes
+ * There is now a 64-bit windows build built on windows 10
+ * Biblatexml datasources now support sourcemapping and have a schema
+ automatically generated from the datamodel. See new biber options
+ 'validate-bltxml' and 'no-bltxml-schema' in --help output.
+ * New functionality in sourcemaps for creating new entries and
+ looping over specified fields.
+ * Sorting key used to sort names is now customisable. See
+ \DeclareSortingNamekeyScheme in biblatex manual.
+ * Support for Zotero RDF/XML and Endnote removed. These were
+ experimental and messy.
+2.3 (2015-12-28)
+ * Misc bug fixes
+2.2 (2015-10-21)
+ * Tool mode now preserves comments at the end of the file
+ * New ISBN formatting options for biber (--isbn10, --isnb13, --isbn-normalise)
+ * Implemented way of ignoring certain regexps when counting
+ fixed-width string in labels (see biblatex \DeclareNolabelwidthcount macro)
+ * Updated binary builds to perl 5.22
+ * Cygwin binary build is now handled by Texlive builders
+ * Misc bug fixes
+2.1 (2015-05-06)
+ * Misc bug fixes
+2.0 (2015-04-20)
+ * Misc bug fixes
+ * New negated "per type" sourcemap verb for negating the application
+ of maps to specific entry types
+ * New "entry clone" sourcemap verb for cloning entries during
+ sourcemapping. See PDF documentation for biber.
+ * Added range length calculation support. Biber now calculates the length of
+ ranges for biblatex and can handle roman numerals, including just
+ about any UTF-8 composed, non-composed or compat versions
+ * Complete re-write of the biblatex use* name functionality now
+ automatically supports all name fields defined in the data model. See
+ biblatex manual
+ * Moved labelname and labeltitle resolution from biber to biblatex for more
+ flexibility and future extensions
+ * Moved to perl 5.20 for all internals and builds
+1.9 (2014-05-25)
+ * Misc bug fixes
+ * Option names accept dashes as well as underscores for general TeX
+ option compatibility.
+ * New "--input-directory" option
+ * Tool mode now also supports data validation
+ * Perl 5.18 is now used to build all biber binaries
+ * Locale-sensitive sorting now more granular (see biblatex
+ "sortlocale" documentation)
+ * Source mapping feature now interpolates from previous matches
+ * Now supports generalised separated values lists using new
+ "--xsvsep" option.
+ * Macro <-> UTF-8 conversion now more robust
+ * New Text::BibTeX library now supports generating initials from
+ general UTF-8 strings (for, e.g. Russian names)
+1.8 (2013-10-21)
+ * Perl 5.18 compatibility (hash order randomisation)
+ * Removed Data::Diver module due to linux licensing restrictions
+ * Misc Bug Fixes
+1.7 (2013-07-07)
+ * Added clrmacros option
+ * Added map_nomatch
+ * Added --tool_macro_fields option
+ * Exposed sorting option to user-level config file (so sorting in tool mode is possible)
+1.6 (2013-04-30)
+ * Bugfixes
+ * Now uses perl 5.16. Non-binary (unpacked) use requires perl 5.16+
+ * Improved tool mode with some formatting options
+ * Made Unicode NFD/NFC boundaries more robust
+ * labelyear is now labeldate to match biblatex 2.6
+ * Support for new CLONESOURCEKEY field (see biblatex 2.6 docs)
+ * New padding character option in labelalphatemplate (see biblatex
+ 2.6 docs)
+1.5 (2013-01-10)
+ * Added new source mapping option "map_entry_null"
+ * Renamed some options (old ones remain as aliases):
+ bibencoding -> input_encoding
+ bblencoding -> output_encoding
+ bblsafechars -> output_safechars
+ bblsafecharsset -> output_safecharsset
+ outfile -> output_file
+ outformat -> output_format
+ * New "tool" mode with "--tool" option which takes a data source as argument
+ and just performs reencoding and source mappings etc. as per options and config file.
+ * Support for customisable BibTeX data source list and name separators
+ * Better debug output for source mapping
+ * Better defined source mapping hierarchy with bugfixes
+1.4 (2012-11-28)
+ * Support for biblatex 2.4 style sourcemaps (See \DeclareStyleSourcemap in biblatex docs)
+ * entrykey is now a possible read-only pseudo field in sourcemaps
+ * Reencode data interface completely re-written. New user option
+ --recodedata allows users to specify a new data file for defining
+ reencoding sets.
+ * Internal changes to allow multiple script/lang variants of
+ fields in biblatex in the future.
+ * Citation key aliases now supported more comprehensively, in crossrefs etc.
+ * Support for new RELATEDOPTIONS field (see biblatex docs)
+ * Misc bug fixes
+1.3 (01-11-2012)
+ * New "append" mode for sourcemap to allow combining of fields
+ * map_final now possible for map_set_field steps which causes map to
+ stop completely if map_overwrite is false and the field to set
+ already exists
+ * Allow extrayear generation when there is no labelyear
+1.2 (20-08-2012)
+ * Misc bug fixes
+1.1 (01-08-2012)
+ * Misc bug fixes
+ * Fixed later CentOS libz issue by including latest libz for linux builds
+ * Fixed DOT output (SF bug 3544894)
+1.0 (01-07-2012)
+ * Internal data model processing changes
+ * New labeltitleyear and extratitleyear disambiguation tracker
+ * New labeltitle and extratitle disambiguation tracker
+ * Sorting per list enabled for biblatex 2.0
+ * New noinit option for ignoring parts of names when generating initials
+ * Some optimisations for large data sources
+ * Fixed build issues which broke PAR::Packer binary under latest Debian (Wheezy)
+0.9.9 (30-03-2012)
+ * Added sortfirstinits option
+ * HTTPS support for remote data sources
+ * Biber now ignores names when it can't determine minimal
+ information like a lastname. Before, it would throw lots of errors
+ and die.
+ * Strips UTF-8 BOMs before passing to Text::BibTeX otherwise it complains
+ * Merged --graph and --bltxml options into --outformat option
+ * Updated some internal Unicode 6.0 things
+ * Minor bug fixes
+0.9.8 (20-12-2012)
+ * Changed config file sourcemap syntax and docs
+ * Support for citekey aliases
+ * New DOT output format
+0.9.7 (27-11-2011)
+ * per-datasource mapping restrictions
+ * Completely new config file format to allow for extensions
+ * Fixed --help issue with PAR::Packer
+ * Fixed .bcf XSL inheritance attribute value issue
+ * Moved XDATA output skip into structure where it should have been originally
+0.9.6 (13-11-2011)
+ * Fixed binary issue with Readonly::XS not being detected
+ * Fixed bug tracker ticket #3436870
+ * Match/replace functionality for data source field filtering
+ * New AUCTeX patches for better biblatex/biber support
+ * Now requires perl 5.14 for full Unicode 6.0 support
+ * New XDATA entrytype and field to allow more complex macro-style
+ data inheritance
+ * crossref cascading is in guaranteed resolve order now
+ * Warnings/error summary is now a more consistent format with all
+ other biber messages.
+ * Matching of .bcf keys to datasource keys is now case-sensitive
+ * Fixed biblatex bug tracker ticket #3399744
+ * Fixed bug tracker ticket #3402114
+ * max/minnames -> max/mincitenames
+ * max/min* now all per-type and per-entry
+ * uniquelist/uniquename now per-entry
+ * Re-factored recode module with XML data and XSL->HTML transform doc
+0.9.5 (18-08-2011)
+ * Fixed auto-bblsafechars bug
+ * refactored explicit "and others" in bibtex data sources
+ * Fixed issue with sorting=none and \nocite{*}
+0.9.4 (30-07-2011)
+ * Added support for "SORTSHORTHAND" field
+ * New "map" option to allow user field/entry type mapping (aliasing) in
+ addition to .dcf settings
+ * Made the relevant places depend on max/min{alpha,bib}names instead of
+ just max/minnames
+ * Bug fixes to bblsafechars
+ * Implemented user-customisable labelalpha (not yet in biblatex)
+ * Implemented per-name hashes
+0.9.3 (05-06-2011)
+ * New mininit and minfull uniquename options
+ * New minyear uniquelist option
+ * Major revamp of uniqueness code
+ * Moved to new external process calling module because IPC::Run
+ doesn't work on Windows in packed binaries (kpsewhich was
+ returning nothing).
+0.9.2 (09-05-2011)
+ * Some internal changes for perl 5.14
+ * Bug fixes for uniquelist processing
+0.9.1 (29-04-2011)
+ * Made temp files all use a global temp dir.
+ * Moved temp .utf8 conversions to temp dir so biber works using
+ .bib files which are in non-writable locations.
+ * Added back an info log message about finding data sources (Lyx compat)
+0.9 (29-03-2011)
+ * No longer auto-escapes any TeX markup in bibtex data sources. This
+ is fraught with danger and is a mess. Best not to do it at all.
+ * Supports biblatex \bibnamedelimi macro
+ * Implementation of uniquename and uniquelist options for biblatex 1.4+
+0.8.4 (19-03-2011)
+ * Bug fixes (wrong escaping of "[", "_" and "]" in .bbl)
+0.8.3 14-03-2011
+ * Biber now in TexLive
+ * Added several new binary builds
+ * All name part and element formatting is now abstracted into macros
+ so that it can be controlled via biblatex.
+ * Much more documentation on binary builds for packagers
+ * Bug fixes
+0.8.2 (14-02-2011)
+ * Bug fixes
+0.8.1 (12-02-2011)
+ * Small bug with default bibtex month macro support
+ * Made remote file support a little more robust (URI return codes)
+0.8 (11-02-2011)
+ * Forces biblatex format for month field
+ * Added support for remote data sources
+ * Added experimental support for RIS data sources
+ * Took out -a and -d flags. These are no longer very useful as the increasingly
+ sophisticated biblatex options cannot be set on the command line
+ anyway and so these flags are less and less relevant
+ * New inheritance model in sync with biblatex defaults
+ * Bug fixes
+0.7.4 (05-02-2011)
+ * Fix for mincrossrefs leaking across sections (biblatex SF bug #3173032)
+0.7.3 (03-02-2011)
+ * Performance tuning for sorting
+ * Text::BibTeX 0.51 for increased macro stack space
+ * Support for old BibTeX month macros by default
+ * Re-write of datasource processing to allow for modular plugins
+ * Generalised nosort option.
+ * Merged LaTeX::Decode into Biber::LaTeX::Recode and added encoding
+ to deal with inputenc's limitations for PDFLaTeX users
+ * new options for forcing/tuning UTF-8 -> LaTeX macro conversion
+ * Bug fixes
+0.7.2 (08-01-2011)
+ * Improved latexmk compatibility more
+0.7.1 (07-01-2011)
+ * Improved latexmk compatibility
+ * Added "x-ascii" encoding alias for "ascii" to deal with inputenx ascii.
+ * Bug fixes
+0.7 (05-01-2011)
+ * Completely re-written sorting routine using Schwartzian transform
+ for real multi-field support and per-field sorting settings.
+ * Bug fixes
+0.6.9 (dev beta)
+ * Bug fixes
+0.6.8 (dev beta)
+ * Generalised sorting behaviour in several respects
+ * Bug fixes
+0.6.7 (dev beta)
+ * Bug fixes
+0.6.6 (dev beta)
+ * More generalised sorting options
+ * Bug fixes
+0.6.5 (dev beta)
+ * Bug fixes
+0.6.4 (dev beta)
+ * Bug fixes
+0.6.3 (dev beta)
+ * Outputs labelname name list to the .bbl
+ * Support for dynamic sets and simpler static set interface
+ * Misc bug fixes
+0.6.2 (dev beta)
+ * Internal cleanup of structure code
+ * Misc bug fixes
+0.6.1 (dev beta)
+ * More comprehensive structural checks on allowed entrytypes/fields
+ and field combinations/formats
+ * Added option validate_structure to turn on structural checks
+ * Renamed option validate -> validate_control
+ * Renamed option output-directory -> output_directory
+ * Added labelname and labelyear as possible sort specifications
+ * Misc bug fixes
+0.6 (20-11-2010)
+ * First non-beta release
+ * More abstracted and extensible crossref inheritance model
+ * U::C dependency to 0.67
+ * sortcase and sortupper options now take same argument forms as in biblatex
+ * Misc bug fixes
+0.5.7 (09-10-2010)
+ * Misc bug fixes
+0.5.6 (04-10-2010)
+ * Latex character macro decoding is now better defined in the whole
+ (re)encoding workflow.
+ * "inputenc" option is now "bblencoding"
+ * "locale" option is now "sortlocale"
+ * New option "sortupper"
+ * Unicode::Collate sorting is now default as version 0.61 of this
+ has XS module and CLDR tailoring.
+ * Added binary dist build scripts
+ * Removed bundled Module::Build as there are some conflicts with
+ later versions. This is less of a problem anyway because the
+ binary build makes it less necessary to make builds easy on perl<5.10
+ * Misc bug fixes
+0.5.5 (29-08-2010)
+ * Biber::BibTeX moved to Biber::Input::BibTeX. If upgrading, please remove
+ your installed <perl lib>/Biber/BibTeX.pm, just to be tidy
+ * New aliases for EPRINT classes and types implemented (see BibLaTeX docs).
+ * Biber now resolves XREFs as well as CROSSREFs so one less LaTeX pass is needed
+ * Allows UTF-8 citekeys. Requires Text::BibTeX >= 0.46 and a fully UTF-8
+ aware TeX macro package (e.g. XeTeX or LuaLaTeX). Normal LaTeX with \inputenc
+ will not work because the UTF-8 it uses is incomplete, macro based and not native.
+ * RecDescent parser is no longer supported or included. If upgrading, please remove
+ your installed <perl lib>/Biber/BibTeX directory, just to be tidy
+ * Now requires LaTeX::Decode >= 0.03
+ * Stricter version dependency for Text::BibTeX. Older than 0.42 is
+ rather useless for complex names.
+ * Re-factored and enhanced auto-re-encoding of .bib/.bbl. With biblatex
+ 0.9c, Biber handles all reencoding.
+ * Misc bug fixes
+0.5.4 (04-08-2010)
+ * Case-sensitive sorting option
+ * Multi-section support. Only one biber pass needed to process all
+ bib sections using extended biblatex 0.9b .bbl format.
+ * .aux file is no longer used by biber - all information is passed
+ in .bcf file.
+ * Misc bug fixes
+ * LaTeX::Decode is now a separate CPAN module and is no longer included
+0.5.3 (19-03-2010)
+ * Changed semantics of --outfile and --output-directory. --outfile
+ is now relative to --output-directory. If --outfile is absolute, it
+ is stripped to the filename and the path discarded. Absolute .aux
+ paths are stripped to filename for appending to --output-directory.
+ * Updated PRD to use new encoding option names. Now works with -e.
+ * sortlos was not settable to use bib sort order
+ * With Text::BibTeX >= 0.42, will do all name/initials generation with btparse
+ library.
+ * Abstracted BBL output into Biber::Output class for better re-use and potential
+ for output formats other than .bbl.
+ * Synced uniquename .bcf values with change in biblatex 0.9a
+0.5.2 (04-03-2010)
+ * Locale fixes
+ * Uniquename fixed to match BibLaTeX option values
+ * Improved error message for malformed names
+ * Fixed config file problems under windows and also added option to ignore config file
+ * Bug with conflicting case between citations and bib entries
+ * Moved pure perl parsename to PRD.pm
+ * Re-write of name parsing to use Text::BibTeX::Name by default
+ * Fields which can be null are explicitly flagged
+ * Add THANKS file
+ * Die early when biber is called without argument
+ * Fixed Mac config path error
+ * .bib parse continues after certain errors
+ * regularised collate options processing
+ * field nameaddon was missing from Biber::Constants
+ * Improved warning message for missing backend=biber
+ * SF bug 2952347 fix (empty date range end)
+ * uniquename counter was being provided incorrectly
+0.5.1 (15-02-2010)
+ * Remove support for legacy control files (\jobname-blx.bib):
+ Biber now only reads .bcf files written by biblatex with the
+ option "backend=biber".
+ * Improved handling of "uniquename" and "namehash".
+ * Don't apply latexescape in bbl output, as it breaks math formatting.
+0.5 (13-02-2010)
+ * Supports all changes introduced by biblatex 0.9
+ * Moved all parts relating to the experimental BibLaTeXML format to the
+ "biblatexml" branch on the git repo
+ * Communication between biblatex and Biber can be done through a
+ XML-based config file (extension .bcf): this is enabled with the
+ experimental biblatex option "backend=biber"
+ * Biber can now be customized with a configuration file
+ * Considerable refactoring and cleanup of the code
+ * Further enhancements to the test suite
+ * Improved logging mechanism
+ * More robust parsing of personal names
+ * Ignore certain prefixes and diacritics in sort strings, for
+ instance ʿAlī is sorted under A, and al-Hasan under H. This can
+ be customized in the configuration file (biber.conf).
+ * New command-line option --output-directory (like TeX)
+ * Many, many bugfixes
+
+0.4.3 (23-07-2009)
+ * With biblatex option "backend=biber" and biber option --v2
+ the new experimental control file \jobname.bcf is used,
+ which brings in many new features, such as per-entrytype
+ settings.
+ * More sophisticated/customizable sorting mechanism
+ * More extensive test suite
+ * Improved BibLaTeXML schema
+ * improved handling of BibLaTeXML (enable nested children,
+ formatting elements, nosort elements)
+ * Do not apply latexescape() by default on xml strings
+ * Skip title handling in BibLaTeXML when not existing
+ * Ignore maxline, add option wraplines
+ * Built-in sort is now default (option --fastsort)
+ * Sorting with Unicode::Collate is possible with option --collate
+ * Make tests succeed w/o Parse::RD and Regexp::Common
+ * Don't output date and urldate in the bbl
+ * Add missing fields "date" "urldate" "organization" "annotator"
+ "foreword" and "eventtitle"
+ * Use Data::Dump instead of Data::Dumper for debugging
+ * Fields "library" and "remarks" are now skipped
+ * Bugfix for aliases (e.g. address, school)
+ * Bugfix: process urldate to get urlyear,urlmonth,urlday
+ * Remove illegal value shorttranslator from labelname option
+ * Changed biberdebug option to debug
+ * Changed option inputencoding to bibencoding
+
+0.4.2 (25-04-2009)
+ * New option --inputencoding to handle 8-bit encoded bib files
+ * $BIBINPUT environment is now searched
+ * Improved parsing of personal names
+ * @comments are now silently ignored
+ * Fixed handling of @preamble; multiple preambles are allowed
+ * Warnings and errors behave more like BibTeX
+ * Alias fields are automatically converted (e.g. address -> location)
+ * Take care of "phdthesis" and "mathesis" types
+ * Cite keys of bib files are now case-insensitive
+ * Default Unicode collation now uses the table "latinkeys.txt"
+ (this is much faster than "allkeys.txt" which contains rules for
+ all Unicode glyphs)
+ * Unicode::Collate parameters can be passed as a command-line option
+ * Faster sorting (with option -f) is also possible for specific
+ locales given with option --locale (this is OS-dependent however)
+ * PRD grammar is now precompiled
+ * bbl output is now wrapped acc to maxline option
+ * Empty fields are no longer printed in the bbl
+ * Sorting is much improved.
+ * Use sortstring separators 0 1 2 like biblatex.bst
+ * Handle truncation of name lists acc to minnames/maxnames
+ * bib2biblatexml has been improved
+ * Windows version of Text::BibTeX provided as ppm.
+ * Many more bugfixes
+
+0.4.1 (31-03-2009)
+ * Text::BibTeX now optional dependency
+0.4 (27-03-2009)
+ * Initial beta release
+
diff --git a/biblio/biber-ms/base/documentation/biber-ms.pdf b/biblio/biber-ms/base/documentation/biber-ms.pdf
new file mode 100644
index 0000000000..2447fb42e5
--- /dev/null
+++ b/biblio/biber-ms/base/documentation/biber-ms.pdf
Binary files differ
diff --git a/biblio/biber-ms/base/documentation/utf8-macro-map.html b/biblio/biber-ms/base/documentation/utf8-macro-map.html
new file mode 100644
index 0000000000..96adc5311f
--- /dev/null
+++ b/biblio/biber-ms/base/documentation/utf8-macro-map.html
@@ -0,0 +1,66 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></meta><title>Biber UTF-8 &harr; LaTeX macro decoding/encoding map</title><style type="text/css">
+ h2,h3,h4 {
+ font-family: Arial,sans-serif;
+ }
+ .key {
+ font-size: 70%;
+ padding-top: 2ex;
+ }
+ .macro, .hex {
+ font-family: "Courier New", Courier, monospace ;
+ }
+ @font-face {
+ font-family: unifont;
+ src: url(http://sourceforge.net/projects/biblatex-biber/files/biblatex-biber/testfiles/unifont.ttf) format("truetype");
+ }
+ .utf8 {
+ font-family: unifont;
+ }
+ .preferred {
+ color: #FF0000;
+ font-family: "Courier New", Courier, monospace ;
+ }
+ .raw {
+ color: #DD0000;
+ font-family: "Courier New", Courier, monospace ;
+ }
+ ul {
+ list-style-type: none;
+ margin-left: 0;
+ margin-right: 0;
+ margin-top: 0;
+ margin-bottom: 0;
+ padding-left: 0;
+ padding-top: 0;
+ padding-bottom: 0;
+ padding-right: 0;
+ }
+ table {
+ border-width: 1px;
+ border-spacing: 2px;
+ border-style: hidden;
+ border-color: gray;
+ border-collapse: collapse;
+ background-color: white;
+ }
+ table thead {
+ background-color: #FAF0E6;
+ text-align: center;
+ }
+ table td {
+ wrap: soft;
+ vertical-align: text-top;
+ line-height: 1;
+ padding: 0px 5px 0px 5px;
+ border-width: 1px;
+ border-style: inset;
+ border-color: gray;
+ }
+ </style></head><body><h2><tt>Biber</tt> UTF-8 &harr; LaTeX macro decoding/encoding map</h2><p>If you are using PDFTeX as opposed to a native UTF-8 engine like
+ XeTeX or LuaTeX, you will have to load some extra packages to use
+ macros in this section. See the "symbols" document that
+ comes with TeXLive for a comprehensive list of symbols and the
+ packages you need for PDFTeX (run "texdoc symbols" to see
+ this document on a TeXLive system).</p><div class="key"><u>Key</u><ul><li><span class="preferred">In encoding mapping (UTF-8 &rarr; LaTeX macros), when there are multiple possible mappings, red highlighted macro is the preferred mapping</span></li><li><span class="raw">In encoding mapping, insert the encoded
+ form as-is with no wrapping braces or escaping etc.</span></li></ul></div><hr></hr><h3>Excluded from encoding (ignore LaTeX special chars)</h3><table><thead><tr><td>Character</td></tr></thead><tbody><tr><td><span class="macro">"</span></td></tr><tr><td><span class="macro">#</span></td></tr><tr><td><span class="macro">$</span></td></tr><tr><td><span class="macro">%</span></td></tr><tr><td><span class="macro">&amp;</span></td></tr><tr><td><span class="macro">'</span></td></tr><tr><td><span class="macro">*</span></td></tr><tr><td><span class="macro">&lt;</span></td></tr><tr><td><span class="macro">=</span></td></tr><tr><td><span class="macro">&gt;</span></td></tr><tr><td><span class="macro">[</span></td></tr><tr><td><span class="macro">]</span></td></tr><tr><td><span class="macro">\</span></td></tr><tr><td><span class="macro">^</span></td></tr><tr><td><span class="macro">_</span></td></tr><tr><td><span class="macro">`</span></td></tr><tr><td><span class="macro">g</span></td></tr><tr><td><span class="macro">{</span></td></tr><tr><td><span class="macro">|</span></td></tr><tr><td><span class="macro">}</span></td></tr><tr><td><span class="macro">~</span></td></tr><tr><td><span class="macro"> </span></td></tr><tr><td><span class="macro">£</span></td></tr><tr><td><span class="macro">±</span></td></tr><tr><td><span class="macro">¶</span></td></tr></tbody></table><hr></hr><h3>letters (sets: base,full)</h3><table><thead><tr><td>Macro</td><td>Unicode character</td><td>Unicode hex value</td></tr></thead><tbody><tr><td><span class="macro">\AA</span></td><td><span class="utf8">&nbsp;Å</span></td><td><span class="hex">C5</span></td></tr><tr><td><span class="macro">\AE</span></td><td><span class="utf8">&nbsp;Æ</span></td><td><span class="hex">C6</span></td></tr><tr><td><span class="macro">\DH</span></td><td><span class="utf8">&nbsp;Ð</span></td><td><span class="hex">D0</span></td></tr><tr><td><span class="macro">\O</span></td><td><span class="utf8">&nbsp;Ø</span></td><td><span class="hex">D8</span></td></tr><tr><td><span class="macro">\Thorn</span></td><td><span class="utf8">&nbsp;Þ</span></td><td><span class="hex">DE</span></td></tr><tr class="preferred"><td><span class="macro">\TH</span></td><td><span class="utf8">&nbsp;Þ</span></td><td><span class="hex">DE</span></td></tr><tr><td><span class="macro">\ss</span></td><td><span class="utf8">&nbsp;ß</span></td><td><span class="hex">DF</span></td></tr><tr><td><span class="macro">\aa</span></td><td><span class="utf8">&nbsp;å</span></td><td><span class="hex">E5</span></td></tr><tr><td><span class="macro">\ae</span></td><td><span class="utf8">&nbsp;æ</span></td><td><span class="hex">E6</span></td></tr><tr><td><span class="macro">\dh</span></td><td><span class="utf8">&nbsp;ð</span></td><td><span class="hex">F0</span></td></tr><tr><td><span class="macro">\o</span></td><td><span class="utf8">&nbsp;ø</span></td><td><span class="hex">F8</span></td></tr><tr><td><span class="macro">\textthorn</span></td><td><span class="utf8">&nbsp;þ</span></td><td><span class="hex">FE</span></td></tr><tr><td><span class="macro">\textthornvari</span></td><td><span class="utf8">&nbsp;þ</span></td><td><span class="hex">FE</span></td></tr><tr><td><span class="macro">\textthornvarii</span></td><td><span class="utf8">&nbsp;þ</span></td><td><span class="hex">FE</span></td></tr><tr><td><span class="macro">\textthornvariii</span></td><td><span class="utf8">&nbsp;þ</span></td><td><span class="hex">FE</span></td></tr><tr><td><span class="macro">\textthornvariv</span></td><td><span class="utf8">&nbsp;þ</span></td><td><span class="hex">FE</span></td></tr><tr class="preferred"><td><span class="macro">\th</span></td><td><span class="utf8">&nbsp;þ</span></td><td><span class="hex">FE</span></td></tr><tr><td><span class="macro">\DJ</span></td><td><span class="utf8">&nbsp;Đ</span></td><td><span class="hex">110</span></td></tr><tr class="preferred"><td><span class="macro">\dj</span></td><td><span class="utf8">&nbsp;đ</span></td><td><span class="hex">111</span></td></tr><tr><td><span class="macro">\textcrd</span></td><td><span class="utf8">&nbsp;đ</span></td><td><span class="hex">111</span></td></tr><tr><td><span class="macro">\textHbar</span></td><td><span class="utf8">&nbsp;Ħ</span></td><td><span class="hex">126</span></td></tr><tr><td><span class="macro">\textcrh</span></td><td><span class="utf8">&nbsp;ħ</span></td><td><span class="hex">127</span></td></tr><tr class="preferred"><td><span class="macro">\texthbar</span></td><td><span class="utf8">&nbsp;ħ</span></td><td><span class="hex">127</span></td></tr><tr><td><span class="macro">\i</span></td><td><span class="utf8">&nbsp;ı</span></td><td><span class="hex">131</span></td></tr><tr><td><span class="macro">\j</span></td><td><span class="utf8">&nbsp;ȷ</span></td><td><span class="hex">237</span></td></tr><tr><td><span class="macro">\IJ</span></td><td><span class="utf8">&nbsp;IJ</span></td><td><span class="hex">132</span></td></tr><tr><td><span class="macro">\ij</span></td><td><span class="utf8">&nbsp;ij</span></td><td><span class="hex">133</span></td></tr><tr><td><span class="macro">\textkra</span></td><td><span class="utf8">&nbsp;ĸ</span></td><td><span class="hex">138</span></td></tr><tr><td><span class="macro">\L</span></td><td><span class="utf8">&nbsp;Ł</span></td><td><span class="hex">141</span></td></tr><tr><td><span class="macro">\textbarl</span></td><td><span class="utf8">&nbsp;ł</span></td><td><span class="hex">142</span></td></tr><tr class="preferred"><td><span class="macro">\l</span></td><td><span class="utf8">&nbsp;ł</span></td><td><span class="hex">142</span></td></tr><tr><td><span class="macro">\NG</span></td><td><span class="utf8">&nbsp;Ŋ</span></td><td><span class="hex">14A</span></td></tr><tr><td><span class="macro">\ng</span></td><td><span class="utf8">&nbsp;ŋ</span></td><td><span class="hex">14B</span></td></tr><tr><td><span class="macro">\OE</span></td><td><span class="utf8">&nbsp;Œ</span></td><td><span class="hex">152</span></td></tr><tr><td><span class="macro">\oe</span></td><td><span class="utf8">&nbsp;œ</span></td><td><span class="hex">153</span></td></tr><tr><td><span class="macro">\textTbar</span></td><td><span class="utf8">&nbsp;Ŧ</span></td><td><span class="hex">166</span></td></tr><tr class="preferred"><td><span class="macro">\textTstroke</span></td><td><span class="utf8">&nbsp;Ŧ</span></td><td><span class="hex">166</span></td></tr><tr><td><span class="macro">\texttbar</span></td><td><span class="utf8">&nbsp;ŧ</span></td><td><span class="hex">167</span></td></tr><tr class="preferred"><td><span class="macro">\texttstroke</span></td><td><span class="utf8">&nbsp;ŧ</span></td><td><span class="hex">167</span></td></tr><tr><td><span class="macro">\textcrb</span></td><td><span class="utf8">&nbsp;ƀ</span></td><td><span class="hex">180</span></td></tr><tr><td><span class="macro">\textBhook</span></td><td><span class="utf8">&nbsp;Ɓ</span></td><td><span class="hex">181</span></td></tr><tr><td><span class="macro">\textOopen</span></td><td><span class="utf8">&nbsp;Ɔ</span></td><td><span class="hex">186</span></td></tr><tr><td><span class="macro">\textChook</span></td><td><span class="utf8">&nbsp;Ƈ</span></td><td><span class="hex">187</span></td></tr><tr><td><span class="macro">\textchook</span></td><td><span class="utf8">&nbsp;ƈ</span></td><td><span class="hex">188</span></td></tr><tr class="preferred"><td><span class="macro">\texthtc</span></td><td><span class="utf8">&nbsp;ƈ</span></td><td><span class="hex">188</span></td></tr><tr><td><span class="macro">\textDafrican</span></td><td><span class="utf8">&nbsp;Ɖ</span></td><td><span class="hex">189</span></td></tr><tr><td><span class="macro">\textDhook</span></td><td><span class="utf8">&nbsp;Ɗ</span></td><td><span class="hex">18A</span></td></tr><tr><td><span class="macro">\textEreversed</span></td><td><span class="utf8">&nbsp;Ǝ</span></td><td><span class="hex">18E</span></td></tr><tr><td><span class="macro">\textEopen</span></td><td><span class="utf8">&nbsp;Ɛ</span></td><td><span class="hex">190</span></td></tr><tr><td><span class="macro">\textFhook</span></td><td><span class="utf8">&nbsp;Ƒ</span></td><td><span class="hex">191</span></td></tr><tr><td><span class="macro">\textflorin</span></td><td><span class="utf8">&nbsp;ƒ</span></td><td><span class="hex">192</span></td></tr><tr><td><span class="macro">\textGammaafrican</span></td><td><span class="utf8">&nbsp;Ɣ</span></td><td><span class="hex">194</span></td></tr><tr><td><span class="macro">\texthvlig</span></td><td><span class="utf8">&nbsp;ƕ</span></td><td><span class="hex">195</span></td></tr><tr class="preferred"><td><span class="macro">\hv</span></td><td><span class="utf8">&nbsp;ƕ</span></td><td><span class="hex">195</span></td></tr><tr><td><span class="macro">\textIotaafrican</span></td><td><span class="utf8">&nbsp;Ɩ</span></td><td><span class="hex">196</span></td></tr><tr><td><span class="macro">\textKhook</span></td><td><span class="utf8">&nbsp;Ƙ</span></td><td><span class="hex">198</span></td></tr><tr><td><span class="macro">\textkhook</span></td><td><span class="utf8">&nbsp;ƙ</span></td><td><span class="hex">199</span></td></tr><tr class="preferred"><td><span class="macro">\texthtk</span></td><td><span class="utf8">&nbsp;ƙ</span></td><td><span class="hex">199</span></td></tr><tr><td><span class="macro">\textcrlambda</span></td><td><span class="utf8">&nbsp;ƛ</span></td><td><span class="hex">19B</span></td></tr><tr><td><span class="macro">\textNhookleft</span></td><td><span class="utf8">&nbsp;Ɲ</span></td><td><span class="hex">19D</span></td></tr><tr><td><span class="macro">\OHORN</span></td><td><span class="utf8">&nbsp;Ơ</span></td><td><span class="hex">1A0</span></td></tr><tr><td><span class="macro">\ohorn</span></td><td><span class="utf8">&nbsp;ơ</span></td><td><span class="hex">1A1</span></td></tr><tr><td><span class="macro">\textPhook</span></td><td><span class="utf8">&nbsp;Ƥ</span></td><td><span class="hex">1A4</span></td></tr><tr><td><span class="macro">\textphook</span></td><td><span class="utf8">&nbsp;ƥ</span></td><td><span class="hex">1A5</span></td></tr><tr class="preferred"><td><span class="macro">\texthtp</span></td><td><span class="utf8">&nbsp;ƥ</span></td><td><span class="hex">1A5</span></td></tr><tr><td><span class="macro">\textEsh</span></td><td><span class="utf8">&nbsp;Ʃ</span></td><td><span class="hex">1A9</span></td></tr><tr class="preferred"><td><span class="macro">\ESH</span></td><td><span class="utf8">&nbsp;Ʃ</span></td><td><span class="hex">1A9</span></td></tr><tr><td><span class="macro">\textlooptoprevesh</span></td><td><span class="utf8">&nbsp;ƪ</span></td><td><span class="hex">1AA</span></td></tr><tr><td><span class="macro">\textpalhookbelow</span></td><td><span class="utf8">&nbsp;ƫ</span></td><td><span class="hex">1AB</span></td></tr><tr><td><span class="macro">\textThook</span></td><td><span class="utf8">&nbsp;Ƭ</span></td><td><span class="hex">1AC</span></td></tr><tr><td><span class="macro">\textthook</span></td><td><span class="utf8">&nbsp;ƭ</span></td><td><span class="hex">1AD</span></td></tr><tr class="preferred"><td><span class="macro">\texthtt</span></td><td><span class="utf8">&nbsp;ƭ</span></td><td><span class="hex">1AD</span></td></tr><tr><td><span class="macro">\textTretroflexhook</span></td><td><span class="utf8">&nbsp;Ʈ</span></td><td><span class="hex">1AE</span></td></tr><tr><td><span class="macro">\UHORN</span></td><td><span class="utf8">&nbsp;Ư</span></td><td><span class="hex">1AF</span></td></tr><tr><td><span class="macro">\uhorn</span></td><td><span class="utf8">&nbsp;ư</span></td><td><span class="hex">1B0</span></td></tr><tr><td><span class="macro">\textVhook</span></td><td><span class="utf8">&nbsp;Ʋ</span></td><td><span class="hex">1B2</span></td></tr><tr><td><span class="macro">\textYhook</span></td><td><span class="utf8">&nbsp;Ƴ</span></td><td><span class="hex">1B3</span></td></tr><tr><td><span class="macro">\textyhook</span></td><td><span class="utf8">&nbsp;ƴ</span></td><td><span class="hex">1B4</span></td></tr><tr><td><span class="macro">\textEzh</span></td><td><span class="utf8">&nbsp;Ʒ</span></td><td><span class="hex">1B7</span></td></tr><tr><td><span class="macro">\texteturned</span></td><td><span class="utf8">&nbsp;ǝ</span></td><td><span class="hex">1DD</span></td></tr><tr><td><span class="macro">\textturna</span></td><td><span class="utf8">&nbsp;ɐ</span></td><td><span class="hex">250</span></td></tr><tr><td><span class="macro">\textscripta</span></td><td><span class="utf8">&nbsp;ɑ</span></td><td><span class="hex">251</span></td></tr><tr><td><span class="macro">\textturnscripta</span></td><td><span class="utf8">&nbsp;ɒ</span></td><td><span class="hex">252</span></td></tr><tr><td><span class="macro">\textbhook</span></td><td><span class="utf8">&nbsp;ɓ</span></td><td><span class="hex">253</span></td></tr><tr class="preferred"><td><span class="macro">\texthtb</span></td><td><span class="utf8">&nbsp;ɓ</span></td><td><span class="hex">253</span></td></tr><tr><td><span class="macro">\textoopen</span></td><td><span class="utf8">&nbsp;ɔ</span></td><td><span class="hex">254</span></td></tr><tr class="preferred"><td><span class="macro">\textopeno</span></td><td><span class="utf8">&nbsp;ɔ</span></td><td><span class="hex">254</span></td></tr><tr><td><span class="macro">\textctc</span></td><td><span class="utf8">&nbsp;ɕ</span></td><td><span class="hex">255</span></td></tr><tr><td><span class="macro">\textdtail</span></td><td><span class="utf8">&nbsp;ɖ</span></td><td><span class="hex">256</span></td></tr><tr class="preferred"><td><span class="macro">\textrtaild</span></td><td><span class="utf8">&nbsp;ɖ</span></td><td><span class="hex">256</span></td></tr><tr><td><span class="macro">\textdhook</span></td><td><span class="utf8">&nbsp;ɗ</span></td><td><span class="hex">257</span></td></tr><tr class="preferred"><td><span class="macro">\texthtd</span></td><td><span class="utf8">&nbsp;ɗ</span></td><td><span class="hex">257</span></td></tr><tr><td><span class="macro">\textreve</span></td><td><span class="utf8">&nbsp;ɘ</span></td><td><span class="hex">258</span></td></tr><tr><td><span class="macro">\textschwa</span></td><td><span class="utf8">&nbsp;ə</span></td><td><span class="hex">259</span></td></tr><tr><td><span class="macro">\textrhookschwa</span></td><td><span class="utf8">&nbsp;ɚ</span></td><td><span class="hex">25A</span></td></tr><tr><td><span class="macro">\texteopen</span></td><td><span class="utf8">&nbsp;ɛ</span></td><td><span class="hex">25B</span></td></tr><tr class="preferred"><td><span class="macro">\textepsilon</span></td><td><span class="utf8">&nbsp;ɛ</span></td><td><span class="hex">25B</span></td></tr><tr><td><span class="macro">\textrevepsilon</span></td><td><span class="utf8">&nbsp;ɜ</span></td><td><span class="hex">25C</span></td></tr><tr><td><span class="macro">\textrhookrevepsilon</span></td><td><span class="utf8">&nbsp;ɝ</span></td><td><span class="hex">25D</span></td></tr><tr><td><span class="macro">\textcloserevepsilon</span></td><td><span class="utf8">&nbsp;ɞ</span></td><td><span class="hex">25E</span></td></tr><tr><td><span class="macro">\textbardotlessj</span></td><td><span class="utf8">&nbsp;ɟ</span></td><td><span class="hex">25F</span></td></tr><tr><td><span class="macro">\texthtg</span></td><td><span class="utf8">&nbsp;ɠ</span></td><td><span class="hex">260</span></td></tr><tr><td><span class="macro">\textscriptg</span></td><td><span class="utf8">&nbsp;ɡ</span></td><td><span class="hex">261</span></td></tr><tr><td><span class="macro">\textscg</span></td><td><span class="utf8">&nbsp;ɢ</span></td><td><span class="hex">262</span></td></tr><tr><td><span class="macro">\textgammalatinsmall</span></td><td><span class="utf8">&nbsp;ɣ</span></td><td><span class="hex">263</span></td></tr><tr class="preferred"><td><span class="macro">\textgamma</span></td><td><span class="utf8">&nbsp;ɣ</span></td><td><span class="hex">263</span></td></tr><tr><td><span class="macro">\textramshorns</span></td><td><span class="utf8">&nbsp;ɤ</span></td><td><span class="hex">264</span></td></tr><tr><td><span class="macro">\textturnh</span></td><td><span class="utf8">&nbsp;ɥ</span></td><td><span class="hex">265</span></td></tr><tr><td><span class="macro">\texthth</span></td><td><span class="utf8">&nbsp;ɦ</span></td><td><span class="hex">266</span></td></tr><tr><td><span class="macro">\texththeng</span></td><td><span class="utf8">&nbsp;ɧ</span></td><td><span class="hex">267</span></td></tr><tr><td><span class="macro">\textbari</span></td><td><span class="utf8">&nbsp;ɨ</span></td><td><span class="hex">268</span></td></tr><tr><td><span class="macro">\textiotalatin</span></td><td><span class="utf8">&nbsp;ɩ</span></td><td><span class="hex">269</span></td></tr><tr class="preferred"><td><span class="macro">\textiota</span></td><td><span class="utf8">&nbsp;ɩ</span></td><td><span class="hex">269</span></td></tr><tr><td><span class="macro">\textsci</span></td><td><span class="utf8">&nbsp;ɪ</span></td><td><span class="hex">26A</span></td></tr><tr><td><span class="macro">\textltilde</span></td><td><span class="utf8">&nbsp;ɫ</span></td><td><span class="hex">26B</span></td></tr><tr><td><span class="macro">\textbeltl</span></td><td><span class="utf8">&nbsp;ɬ</span></td><td><span class="hex">26C</span></td></tr><tr><td><span class="macro">\textrtaill</span></td><td><span class="utf8">&nbsp;ɭ</span></td><td><span class="hex">26D</span></td></tr><tr><td><span class="macro">\textlyoghlig</span></td><td><span class="utf8">&nbsp;ɮ</span></td><td><span class="hex">26E</span></td></tr><tr><td><span class="macro">\textturnm</span></td><td><span class="utf8">&nbsp;ɯ</span></td><td><span class="hex">26F</span></td></tr><tr><td><span class="macro">\textturnmrleg</span></td><td><span class="utf8">&nbsp;ɰ</span></td><td><span class="hex">270</span></td></tr><tr><td><span class="macro">\textltailm</span></td><td><span class="utf8">&nbsp;ɱ</span></td><td><span class="hex">271</span></td></tr><tr><td><span class="macro">\textltailn</span></td><td><span class="utf8">&nbsp;ɲ</span></td><td><span class="hex">272</span></td></tr><tr class="preferred"><td><span class="macro">\textnhookleft</span></td><td><span class="utf8">&nbsp;ɲ</span></td><td><span class="hex">272</span></td></tr><tr><td><span class="macro">\textrtailn</span></td><td><span class="utf8">&nbsp;ɳ</span></td><td><span class="hex">273</span></td></tr><tr><td><span class="macro">\textscn</span></td><td><span class="utf8">&nbsp;ɴ</span></td><td><span class="hex">274</span></td></tr><tr><td><span class="macro">\textbaro</span></td><td><span class="utf8">&nbsp;ɵ</span></td><td><span class="hex">275</span></td></tr><tr><td><span class="macro">\textscoelig</span></td><td><span class="utf8">&nbsp;ɶ</span></td><td><span class="hex">276</span></td></tr><tr><td><span class="macro">\textcloseomega</span></td><td><span class="utf8">&nbsp;ɷ</span></td><td><span class="hex">277</span></td></tr><tr><td><span class="macro">\textphi</span></td><td><span class="utf8">&nbsp;ɸ</span></td><td><span class="hex">278</span></td></tr><tr><td><span class="macro">\textturnr</span></td><td><span class="utf8">&nbsp;ɹ</span></td><td><span class="hex">279</span></td></tr><tr><td><span class="macro">\textturnlonglegr</span></td><td><span class="utf8">&nbsp;ɺ</span></td><td><span class="hex">27A</span></td></tr><tr><td><span class="macro">\textturnrrtail</span></td><td><span class="utf8">&nbsp;ɻ</span></td><td><span class="hex">27B</span></td></tr><tr><td><span class="macro">\textlonglegr</span></td><td><span class="utf8">&nbsp;ɼ</span></td><td><span class="hex">27C</span></td></tr><tr><td><span class="macro">\textrtailr</span></td><td><span class="utf8">&nbsp;ɽ</span></td><td><span class="hex">27D</span></td></tr><tr><td><span class="macro">\textfishhookr</span></td><td><span class="utf8">&nbsp;ɾ</span></td><td><span class="hex">27E</span></td></tr><tr><td><span class="macro">\textlhti</span></td><td><span class="utf8">&nbsp;ɿ</span></td><td><span class="hex">27F</span></td></tr><tr><td><span class="macro">\textscr</span></td><td><span class="utf8">&nbsp;ʀ</span></td><td><span class="hex">280</span></td></tr><tr><td><span class="macro">\textinvscr</span></td><td><span class="utf8">&nbsp;ʁ</span></td><td><span class="hex">281</span></td></tr><tr><td><span class="macro">\textrtails</span></td><td><span class="utf8">&nbsp;ʂ</span></td><td><span class="hex">282</span></td></tr><tr><td><span class="macro">\textesh</span></td><td><span class="utf8">&nbsp;ʃ</span></td><td><span class="hex">283</span></td></tr><tr><td><span class="macro">\texthtbardotlessj</span></td><td><span class="utf8">&nbsp;ʄ</span></td><td><span class="hex">284</span></td></tr><tr><td><span class="macro">\textraisevibyi</span></td><td><span class="utf8">&nbsp;ʅ</span></td><td><span class="hex">285</span></td></tr><tr><td><span class="macro">\textctesh</span></td><td><span class="utf8">&nbsp;ʆ</span></td><td><span class="hex">286</span></td></tr><tr><td><span class="macro">\textturnt</span></td><td><span class="utf8">&nbsp;ʇ</span></td><td><span class="hex">287</span></td></tr><tr><td><span class="macro">\textrtailt</span></td><td><span class="utf8">&nbsp;ʈ</span></td><td><span class="hex">288</span></td></tr><tr class="preferred"><td><span class="macro">\texttretroflexhook</span></td><td><span class="utf8">&nbsp;ʈ</span></td><td><span class="hex">288</span></td></tr><tr><td><span class="macro">\textbaru</span></td><td><span class="utf8">&nbsp;ʉ</span></td><td><span class="hex">289</span></td></tr><tr><td><span class="macro">\textupsilon</span></td><td><span class="utf8">&nbsp;ʊ</span></td><td><span class="hex">28A</span></td></tr><tr><td><span class="macro">\textscriptv</span></td><td><span class="utf8">&nbsp;ʋ</span></td><td><span class="hex">28B</span></td></tr><tr class="preferred"><td><span class="macro">\textvhook</span></td><td><span class="utf8">&nbsp;ʋ</span></td><td><span class="hex">28B</span></td></tr><tr><td><span class="macro">\textturnv</span></td><td><span class="utf8">&nbsp;ʌ</span></td><td><span class="hex">28C</span></td></tr><tr><td><span class="macro">\textturnw</span></td><td><span class="utf8">&nbsp;ʍ</span></td><td><span class="hex">28D</span></td></tr><tr><td><span class="macro">\textturny</span></td><td><span class="utf8">&nbsp;ʎ</span></td><td><span class="hex">28E</span></td></tr><tr><td><span class="macro">\textscy</span></td><td><span class="utf8">&nbsp;ʏ</span></td><td><span class="hex">28F</span></td></tr><tr><td><span class="macro">\textrtailz</span></td><td><span class="utf8">&nbsp;ʐ</span></td><td><span class="hex">290</span></td></tr><tr><td><span class="macro">\textctz</span></td><td><span class="utf8">&nbsp;ʑ</span></td><td><span class="hex">291</span></td></tr><tr><td><span class="macro">\textezh</span></td><td><span class="utf8">&nbsp;ʒ</span></td><td><span class="hex">292</span></td></tr><tr class="preferred"><td><span class="macro">\textyogh</span></td><td><span class="utf8">&nbsp;ʒ</span></td><td><span class="hex">292</span></td></tr><tr><td><span class="macro">\textctyogh</span></td><td><span class="utf8">&nbsp;ʓ</span></td><td><span class="hex">293</span></td></tr><tr><td><span class="macro">\textglotstop</span></td><td><span class="utf8">&nbsp;ʔ</span></td><td><span class="hex">294</span></td></tr><tr><td><span class="macro">\textrevglotstop</span></td><td><span class="utf8">&nbsp;ʕ</span></td><td><span class="hex">295</span></td></tr><tr><td><span class="macro">\textinvglotstop</span></td><td><span class="utf8">&nbsp;ʖ</span></td><td><span class="hex">296</span></td></tr><tr><td><span class="macro">\textstretchc</span></td><td><span class="utf8">&nbsp;ʗ</span></td><td><span class="hex">297</span></td></tr><tr><td><span class="macro">\textbullseye</span></td><td><span class="utf8">&nbsp;ʘ</span></td><td><span class="hex">298</span></td></tr><tr><td><span class="macro">\textscb</span></td><td><span class="utf8">&nbsp;ʙ</span></td><td><span class="hex">299</span></td></tr><tr><td><span class="macro">\textcloseepsilon</span></td><td><span class="utf8">&nbsp;ʚ</span></td><td><span class="hex">29A</span></td></tr><tr><td><span class="macro">\texthtscg</span></td><td><span class="utf8">&nbsp;ʛ</span></td><td><span class="hex">29B</span></td></tr><tr><td><span class="macro">\textsch</span></td><td><span class="utf8">&nbsp;ʜ</span></td><td><span class="hex">29C</span></td></tr><tr><td><span class="macro">\textctj</span></td><td><span class="utf8">&nbsp;ʝ</span></td><td><span class="hex">29D</span></td></tr><tr><td><span class="macro">\textturnk</span></td><td><span class="utf8">&nbsp;ʞ</span></td><td><span class="hex">29E</span></td></tr><tr><td><span class="macro">\textscl</span></td><td><span class="utf8">&nbsp;ʟ</span></td><td><span class="hex">29F</span></td></tr><tr><td><span class="macro">\texthtq</span></td><td><span class="utf8">&nbsp;ʠ</span></td><td><span class="hex">2A0</span></td></tr><tr><td><span class="macro">\textbarglotstop</span></td><td><span class="utf8">&nbsp;ʡ</span></td><td><span class="hex">2A1</span></td></tr><tr><td><span class="macro">\textbarrevglotstop</span></td><td><span class="utf8">&nbsp;ʢ</span></td><td><span class="hex">2A2</span></td></tr><tr><td><span class="macro">\textdzlig</span></td><td><span class="utf8">&nbsp;ʣ</span></td><td><span class="hex">2A3</span></td></tr><tr><td><span class="macro">\textdyoghlig</span></td><td><span class="utf8">&nbsp;ʤ</span></td><td><span class="hex">2A4</span></td></tr><tr><td><span class="macro">\textdctzlig</span></td><td><span class="utf8">&nbsp;ʥ</span></td><td><span class="hex">2A5</span></td></tr><tr><td><span class="macro">\texttslig</span></td><td><span class="utf8">&nbsp;ʦ</span></td><td><span class="hex">2A6</span></td></tr><tr><td><span class="macro">\textteshlig</span></td><td><span class="utf8">&nbsp;ʧ</span></td><td><span class="hex">2A7</span></td></tr><tr class="preferred"><td><span class="macro">\texttesh</span></td><td><span class="utf8">&nbsp;ʧ</span></td><td><span class="hex">2A7</span></td></tr><tr><td><span class="macro">\texttctclig</span></td><td><span class="utf8">&nbsp;ʨ</span></td><td><span class="hex">2A8</span></td></tr><tr><td><span class="macro">\hamza</span></td><td><span class="utf8">&nbsp;ʾ</span></td><td><span class="hex">2BE</span></td></tr><tr><td><span class="macro">\ain</span></td><td><span class="utf8">&nbsp;ʿ</span></td><td><span class="hex">2BF</span></td></tr><tr class="preferred"><td><span class="macro">\ayn</span></td><td><span class="utf8">&nbsp;ʿ</span></td><td><span class="hex">2BF</span></td></tr><tr><td><span class="macro">\textprimstress</span></td><td><span class="utf8">&nbsp;ˈ</span></td><td><span class="hex">2C8</span></td></tr><tr><td><span class="macro">\textlengthmark</span></td><td><span class="utf8">&nbsp;ː</span></td><td><span class="hex">2D0</span></td></tr></tbody></table><hr></hr><h3>diacritics (sets: base,full)</h3><table><thead><tr><td>Macro</td><td>Unicode character</td><td>Unicode hex value</td></tr></thead><tbody><tr><td><span class="macro">\`</span></td><td><span class="utf8">&nbsp;̀</span></td><td><span class="hex">300</span></td></tr><tr><td><span class="macro">\'</span></td><td><span class="utf8">&nbsp;́</span></td><td><span class="hex">301</span></td></tr><tr><td><span class="macro">\^</span></td><td><span class="utf8">&nbsp;̂</span></td><td><span class="hex">302</span></td></tr><tr><td><span class="macro">\~</span></td><td><span class="utf8">&nbsp;̃</span></td><td><span class="hex">303</span></td></tr><tr><td><span class="macro">\=</span></td><td><span class="utf8">&nbsp;̄</span></td><td><span class="hex">304</span></td></tr><tr><td><span class="macro">\u</span></td><td><span class="utf8">&nbsp;̆</span></td><td><span class="hex">306</span></td></tr><tr><td><span class="macro">\.</span></td><td><span class="utf8">&nbsp;̇</span></td><td><span class="hex">307</span></td></tr><tr><td><span class="macro">\"</span></td><td><span class="utf8">&nbsp;̈</span></td><td><span class="hex">308</span></td></tr><tr><td><span class="macro">\h</span></td><td><span class="utf8">&nbsp;̉</span></td><td><span class="hex">309</span></td></tr><tr><td><span class="macro">\r</span></td><td><span class="utf8">&nbsp;̊</span></td><td><span class="hex">30A</span></td></tr><tr><td><span class="macro">\H</span></td><td><span class="utf8">&nbsp;̋</span></td><td><span class="hex">30B</span></td></tr><tr><td><span class="macro">\v</span></td><td><span class="utf8">&nbsp;̌</span></td><td><span class="hex">30C</span></td></tr><tr class="preferred"><td><span class="macro">\|</span></td><td><span class="utf8">&nbsp;̍</span></td><td><span class="hex">30D</span></td></tr><tr class="preferred"><td><span class="macro">\U</span></td><td><span class="utf8">&nbsp;̎</span></td><td><span class="hex">30E</span></td></tr><tr><td><span class="macro">\G</span></td><td><span class="utf8">&nbsp;̏</span></td><td><span class="hex">30F</span></td></tr><tr><td><span class="macro">\M</span></td><td><span class="utf8">&nbsp;̢</span></td><td><span class="hex">322</span></td></tr><tr><td><span class="macro">\d</span></td><td><span class="utf8">&nbsp;̣</span></td><td><span class="hex">323</span></td></tr><tr><td><span class="macro">\c</span></td><td><span class="utf8">&nbsp;̧</span></td><td><span class="hex">327</span></td></tr><tr><td><span class="macro">\k</span></td><td><span class="utf8">&nbsp;̨</span></td><td><span class="hex">328</span></td></tr><tr><td><span class="macro">\b</span></td><td><span class="utf8">&nbsp;̱</span></td><td><span class="hex">331</span></td></tr><tr><td><span class="macro">\B</span></td><td><span class="utf8">&nbsp;̵</span></td><td><span class="hex">335</span></td></tr><tr><td><span class="macro">\t</span></td><td><span class="utf8">&nbsp;̑</span></td><td><span class="hex">311</span></td></tr><tr><td><span class="macro">\textvbaraccent</span></td><td><span class="utf8">&nbsp;̍</span></td><td><span class="hex">30D</span></td></tr><tr><td><span class="macro">\textdoublevbaraccent</span></td><td><span class="utf8">&nbsp;̎</span></td><td><span class="hex">30E</span></td></tr><tr><td><span class="macro">\textdotbreve</span></td><td><span class="utf8">&nbsp;̐</span></td><td><span class="hex">310</span></td></tr><tr><td><span class="macro">\textturncommaabove</span></td><td><span class="utf8">&nbsp;̒</span></td><td><span class="hex">312</span></td></tr><tr><td><span class="macro">\textcommaabove</span></td><td><span class="utf8">&nbsp;̓</span></td><td><span class="hex">313</span></td></tr><tr><td><span class="macro">\textrevcommaabove</span></td><td><span class="utf8">&nbsp;̔</span></td><td><span class="hex">314</span></td></tr><tr><td><span class="macro">\textcommaabover</span></td><td><span class="utf8">&nbsp;̕</span></td><td><span class="hex">315</span></td></tr><tr><td><span class="macro">\textsubgrave</span></td><td><span class="utf8">&nbsp;̖</span></td><td><span class="hex">316</span></td></tr><tr><td><span class="macro">\textsubacute</span></td><td><span class="utf8">&nbsp;̗</span></td><td><span class="hex">317</span></td></tr><tr><td><span class="macro">\textadvancing</span></td><td><span class="utf8">&nbsp;̘</span></td><td><span class="hex">318</span></td></tr><tr><td><span class="macro">\textretracting</span></td><td><span class="utf8">&nbsp;̙</span></td><td><span class="hex">319</span></td></tr><tr><td><span class="macro">\textlangleabove</span></td><td><span class="utf8">&nbsp;̚</span></td><td><span class="hex">31A</span></td></tr><tr><td><span class="macro">\textrighthorn</span></td><td><span class="utf8">&nbsp;̛</span></td><td><span class="hex">31B</span></td></tr><tr><td><span class="macro">\textsublhalfring</span></td><td><span class="utf8">&nbsp;̜</span></td><td><span class="hex">31C</span></td></tr><tr><td><span class="macro">\textraising</span></td><td><span class="utf8">&nbsp;̝</span></td><td><span class="hex">31D</span></td></tr><tr><td><span class="macro">\textlowering</span></td><td><span class="utf8">&nbsp;̞</span></td><td><span class="hex">31E</span></td></tr><tr><td><span class="macro">\textsubplus</span></td><td><span class="utf8">&nbsp;̟</span></td><td><span class="hex">31F</span></td></tr><tr><td><span class="macro">\textsubbar</span></td><td><span class="utf8">&nbsp;̠</span></td><td><span class="hex">320</span></td></tr><tr class="preferred"><td><span class="macro">\textsubminus</span></td><td><span class="utf8">&nbsp;̠</span></td><td><span class="hex">320</span></td></tr><tr><td><span class="macro">\textpalhookbelow</span></td><td><span class="utf8">&nbsp;̡</span></td><td><span class="hex">321</span></td></tr><tr><td><span class="macro">\textsubumlaut</span></td><td><span class="utf8">&nbsp;̤</span></td><td><span class="hex">324</span></td></tr><tr><td><span class="macro">\textsubring</span></td><td><span class="utf8">&nbsp;̥</span></td><td><span class="hex">325</span></td></tr><tr><td><span class="macro">\textcommabelow</span></td><td><span class="utf8">&nbsp;̦</span></td><td><span class="hex">326</span></td></tr><tr><td><span class="macro">\textsyllabic</span></td><td><span class="utf8">&nbsp;̩</span></td><td><span class="hex">329</span></td></tr><tr><td><span class="macro">\textsubbridge</span></td><td><span class="utf8">&nbsp;̪</span></td><td><span class="hex">32A</span></td></tr><tr><td><span class="macro">\textsubw</span></td><td><span class="utf8">&nbsp;̫</span></td><td><span class="hex">32B</span></td></tr><tr><td><span class="macro">\textsubwedge</span></td><td><span class="utf8">&nbsp;̬</span></td><td><span class="hex">32C</span></td></tr><tr><td><span class="macro">\textsubcircnum</span></td><td><span class="utf8">&nbsp;̭</span></td><td><span class="hex">32D</span></td></tr><tr><td><span class="macro">\textsubbreve</span></td><td><span class="utf8">&nbsp;̮</span></td><td><span class="hex">32E</span></td></tr><tr class="preferred"><td><span class="macro">\textundertie</span></td><td><span class="utf8">&nbsp;̮</span></td><td><span class="hex">32E</span></td></tr><tr><td><span class="macro">\textsubarch</span></td><td><span class="utf8">&nbsp;̯</span></td><td><span class="hex">32F</span></td></tr><tr><td><span class="macro">\textsubtilde</span></td><td><span class="utf8">&nbsp;̰</span></td><td><span class="hex">330</span></td></tr><tr><td><span class="macro">\subdoublebar</span></td><td><span class="utf8">&nbsp;̳</span></td><td><span class="hex">333</span></td></tr><tr><td><span class="macro">\textsuperimposetilde</span></td><td><span class="utf8">&nbsp;̴</span></td><td><span class="hex">334</span></td></tr><tr><td><span class="macro">\textlstrokethru</span></td><td><span class="utf8">&nbsp;̶</span></td><td><span class="hex">336</span></td></tr><tr><td><span class="macro">\textsstrikethru</span></td><td><span class="utf8">&nbsp;̷</span></td><td><span class="hex">337</span></td></tr><tr><td><span class="macro">\textlstrikethru</span></td><td><span class="utf8">&nbsp;̸</span></td><td><span class="hex">338</span></td></tr><tr><td><span class="macro">\textsubrhalfring</span></td><td><span class="utf8">&nbsp;̹</span></td><td><span class="hex">339</span></td></tr><tr><td><span class="macro">\textinvsubbridge</span></td><td><span class="utf8">&nbsp;̺</span></td><td><span class="hex">33A</span></td></tr><tr><td><span class="macro">\textsubsquare</span></td><td><span class="utf8">&nbsp;̻</span></td><td><span class="hex">33B</span></td></tr><tr><td><span class="macro">\textseagull</span></td><td><span class="utf8">&nbsp;̼</span></td><td><span class="hex">33C</span></td></tr><tr><td><span class="macro">\textovercross</span></td><td><span class="utf8">&nbsp;̽</span></td><td><span class="hex">33D</span></td></tr><tr><td><span class="macro">\overbridge</span></td><td><span class="utf8">&nbsp;͆</span></td><td><span class="hex">346</span></td></tr><tr><td><span class="macro">\subdoublebar</span></td><td><span class="utf8">&nbsp;͇</span></td><td><span class="hex">347</span></td></tr><tr><td><span class="macro">\subdoublevert</span></td><td><span class="utf8">&nbsp;͈</span></td><td><span class="hex">348</span></td></tr><tr><td><span class="macro">\subcorner</span></td><td><span class="utf8">&nbsp;͉</span></td><td><span class="hex">349</span></td></tr><tr><td><span class="macro">\crtilde</span></td><td><span class="utf8">&nbsp;͊</span></td><td><span class="hex">34A</span></td></tr><tr class="preferred"><td><span class="macro">\textoverw</span></td><td><span class="utf8">&nbsp;͊</span></td><td><span class="hex">34A</span></td></tr><tr><td><span class="macro">\dottedtilde</span></td><td><span class="utf8">&nbsp;͋</span></td><td><span class="hex">34B</span></td></tr><tr><td><span class="macro">\doubletilde</span></td><td><span class="utf8">&nbsp;͌</span></td><td><span class="hex">34C</span></td></tr><tr><td><span class="macro">\spreadlips</span></td><td><span class="utf8">&nbsp;͍</span></td><td><span class="hex">34D</span></td></tr><tr><td><span class="macro">\whistle</span></td><td><span class="utf8">&nbsp;͎</span></td><td><span class="hex">34E</span></td></tr><tr><td><span class="macro">\textrightarrowhead</span></td><td><span class="utf8">&nbsp;͐</span></td><td><span class="hex">350</span></td></tr><tr><td><span class="macro">\textlefthalfring</span></td><td><span class="utf8">&nbsp;͑</span></td><td><span class="hex">351</span></td></tr><tr><td><span class="macro">\sublptr</span></td><td><span class="utf8">&nbsp;͔</span></td><td><span class="hex">354</span></td></tr><tr><td><span class="macro">\subrptr</span></td><td><span class="utf8">&nbsp;͕</span></td><td><span class="hex">355</span></td></tr><tr><td><span class="macro">\textrightuparrowhead</span></td><td><span class="utf8">&nbsp;͖</span></td><td><span class="hex">356</span></td></tr><tr><td><span class="macro">\textrighthalfring</span></td><td><span class="utf8">&nbsp;͗</span></td><td><span class="hex">357</span></td></tr><tr><td><span class="macro">\textdoublebreve</span></td><td><span class="utf8">&nbsp;͝</span></td><td><span class="hex">35D</span></td></tr><tr><td><span class="macro">\textdoublemacron</span></td><td><span class="utf8">&nbsp;͞</span></td><td><span class="hex">35E</span></td></tr><tr><td><span class="macro">\textdoublemacronbelow</span></td><td><span class="utf8">&nbsp;͟</span></td><td><span class="hex">35F</span></td></tr><tr><td><span class="macro">\textdoubletilde</span></td><td><span class="utf8">&nbsp;͠</span></td><td><span class="hex">360</span></td></tr><tr><td><span class="macro">\texttoptiebar</span></td><td><span class="utf8">&nbsp;͡</span></td><td><span class="hex">361</span></td></tr><tr><td><span class="macro">\sliding</span></td><td><span class="utf8">&nbsp;͢</span></td><td><span class="hex">362</span></td></tr></tbody></table><hr></hr><h3>punctuation (sets: base,full)</h3><table><thead><tr><td>Macro</td><td>Unicode character</td><td>Unicode hex value</td></tr></thead><tbody><tr class="raw"><td><span class="macro">\-</span></td><td><span class="utf8">&nbsp;‐</span></td><td><span class="hex">2010</span></td></tr><tr class="raw"><td><span class="macro">\-</span></td><td><span class="utf8">&nbsp;‑</span></td><td><span class="hex">2011</span></td></tr><tr><td><span class="macro">\textendash</span></td><td><span class="utf8">&nbsp;‒</span></td><td><span class="hex">2012</span></td></tr><tr class="raw"><td><span class="macro">\--</span></td><td><span class="utf8">&nbsp;‒</span></td><td><span class="hex">2012</span></td></tr><tr><td><span class="macro">\textendash</span></td><td><span class="utf8">&nbsp;–</span></td><td><span class="hex">2013</span></td></tr><tr class="raw"><td><span class="macro">\--</span></td><td><span class="utf8">&nbsp;–</span></td><td><span class="hex">2013</span></td></tr><tr><td><span class="macro">\textemdash</span></td><td><span class="utf8">&nbsp;—</span></td><td><span class="hex">2014</span></td></tr><tr class="raw"><td><span class="macro">\---</span></td><td><span class="utf8">&nbsp;—</span></td><td><span class="hex">2014</span></td></tr><tr><td><span class="macro">\textquoteleft</span></td><td><span class="utf8">&nbsp;‘</span></td><td><span class="hex">2018</span></td></tr><tr><td><span class="macro">\textquoteright</span></td><td><span class="utf8">&nbsp;’</span></td><td><span class="hex">2019</span></td></tr><tr><td><span class="macro">\quotesinglbase</span></td><td><span class="utf8">&nbsp;‚</span></td><td><span class="hex">201A</span></td></tr><tr><td><span class="macro">\textquotedblleft</span></td><td><span class="utf8">&nbsp;“</span></td><td><span class="hex">201C</span></td></tr><tr><td><span class="macro">\textquotedblright</span></td><td><span class="utf8">&nbsp;”</span></td><td><span class="hex">201D</span></td></tr><tr><td><span class="macro">\quotedblbase</span></td><td><span class="utf8">&nbsp;„</span></td><td><span class="hex">201E</span></td></tr><tr><td><span class="macro">\dag</span></td><td><span class="utf8">&nbsp;†</span></td><td><span class="hex">2020</span></td></tr><tr><td><span class="macro">\ddag</span></td><td><span class="utf8">&nbsp;‡</span></td><td><span class="hex">2021</span></td></tr><tr><td><span class="macro">\textbullet</span></td><td><span class="utf8">&nbsp;•</span></td><td><span class="hex">2022</span></td></tr><tr><td><span class="macro">\dots</span></td><td><span class="utf8">&nbsp;…</span></td><td><span class="hex">2026</span></td></tr><tr><td><span class="macro">\textperthousand</span></td><td><span class="utf8">&nbsp;‰</span></td><td><span class="hex">2030</span></td></tr><tr><td><span class="macro">\textpertenthousand</span></td><td><span class="utf8">&nbsp;‱</span></td><td><span class="hex">2031</span></td></tr><tr><td><span class="macro">\guilsinglleft</span></td><td><span class="utf8">&nbsp;‹</span></td><td><span class="hex">2039</span></td></tr><tr><td><span class="macro">\guilsinglright</span></td><td><span class="utf8">&nbsp;›</span></td><td><span class="hex">203A</span></td></tr><tr><td><span class="macro">\textreferencemark</span></td><td><span class="utf8">&nbsp;※</span></td><td><span class="hex">203B</span></td></tr><tr><td><span class="macro">\textinterrobang</span></td><td><span class="utf8">&nbsp;‽</span></td><td><span class="hex">203D</span></td></tr><tr><td><span class="macro">\textoverline</span></td><td><span class="utf8">&nbsp;‾</span></td><td><span class="hex">203E</span></td></tr><tr><td><span class="macro">\langle</span></td><td><span class="utf8">&nbsp;⟨</span></td><td><span class="hex">27E8</span></td></tr><tr><td><span class="macro">\rangle</span></td><td><span class="utf8">&nbsp;⟩</span></td><td><span class="hex">27E9</span></td></tr></tbody></table><hr></hr><h3>symbols (sets: base,full)</h3><table><thead><tr><td>Macro</td><td>Unicode character</td><td>Unicode hex value</td></tr></thead><tbody><tr><td><span class="macro">\textquotedbl</span></td><td><span class="utf8">&nbsp;"</span></td><td><span class="hex">22</span></td></tr><tr><td><span class="macro">\textdollar</span></td><td><span class="utf8">&nbsp;$</span></td><td><span class="hex">24</span></td></tr><tr><td><span class="macro">\textpercent</span></td><td><span class="utf8">&nbsp;%</span></td><td><span class="hex">25</span></td></tr><tr><td><span class="macro">\textampersand</span></td><td><span class="utf8">&nbsp;&amp;</span></td><td><span class="hex">26</span></td></tr><tr><td><span class="macro">\textquotesingle</span></td><td><span class="utf8">&nbsp;'</span></td><td><span class="hex">27</span></td></tr><tr><td><span class="macro">\textasteriskcentered</span></td><td><span class="utf8">&nbsp;*</span></td><td><span class="hex">2A</span></td></tr><tr><td><span class="macro">\textless</span></td><td><span class="utf8">&nbsp;&lt;</span></td><td><span class="hex">3C</span></td></tr><tr><td><span class="macro">\textequals</span></td><td><span class="utf8">&nbsp;=</span></td><td><span class="hex">3D</span></td></tr><tr><td><span class="macro">\textgreater</span></td><td><span class="utf8">&nbsp;&gt;</span></td><td><span class="hex">3E</span></td></tr><tr><td><span class="macro">\textasciicircum</span></td><td><span class="utf8">&nbsp;^</span></td><td><span class="hex">5E</span></td></tr><tr><td><span class="macro">\textasciigrave</span></td><td><span class="utf8">&nbsp;`</span></td><td><span class="hex">60</span></td></tr><tr><td><span class="macro">\textbraceleft</span></td><td><span class="utf8">&nbsp;{</span></td><td><span class="hex">7B</span></td></tr><tr><td><span class="macro">\textbar</span></td><td><span class="utf8">&nbsp;|</span></td><td><span class="hex">7C</span></td></tr><tr><td><span class="macro">\textbraceright</span></td><td><span class="utf8">&nbsp;}</span></td><td><span class="hex">7D</span></td></tr><tr><td><span class="macro">\textasciitilde</span></td><td><span class="utf8">&nbsp;~</span></td><td><span class="hex">7E</span></td></tr><tr><td><span class="macro">\nobreakspace</span></td><td><span class="utf8">&nbsp; </span></td><td><span class="hex">A0</span></td></tr><tr><td><span class="macro">\textexclamdown</span></td><td><span class="utf8">&nbsp;¡</span></td><td><span class="hex">A1</span></td></tr><tr><td><span class="macro">\textcent</span></td><td><span class="utf8">&nbsp;¢</span></td><td><span class="hex">A2</span></td></tr><tr><td><span class="macro">\textsterling</span></td><td><span class="utf8">&nbsp;£</span></td><td><span class="hex">A3</span></td></tr><tr class="preferred"><td><span class="macro">\pounds</span></td><td><span class="utf8">&nbsp;£</span></td><td><span class="hex">A3</span></td></tr><tr><td><span class="macro">\textcurrency</span></td><td><span class="utf8">&nbsp;¤</span></td><td><span class="hex">A4</span></td></tr><tr><td><span class="macro">\textyen</span></td><td><span class="utf8">&nbsp;¥</span></td><td><span class="hex">A5</span></td></tr><tr><td><span class="macro">\textbrokenbar</span></td><td><span class="utf8">&nbsp;¦</span></td><td><span class="hex">A6</span></td></tr><tr><td><span class="macro">\textsection</span></td><td><span class="utf8">&nbsp;§</span></td><td><span class="hex">A7</span></td></tr><tr class="preferred"><td><span class="macro">\S</span></td><td><span class="utf8">&nbsp;§</span></td><td><span class="hex">A7</span></td></tr><tr><td><span class="macro">\textasciidieresis</span></td><td><span class="utf8">&nbsp;¨</span></td><td><span class="hex">A8</span></td></tr><tr><td><span class="macro">\textcopyright</span></td><td><span class="utf8">&nbsp;©</span></td><td><span class="hex">A9</span></td></tr><tr class="preferred"><td><span class="macro">\copyright</span></td><td><span class="utf8">&nbsp;©</span></td><td><span class="hex">A9</span></td></tr><tr><td><span class="macro">\textordfeminine</span></td><td><span class="utf8">&nbsp;ª</span></td><td><span class="hex">AA</span></td></tr><tr><td><span class="macro">\guillemotleft</span></td><td><span class="utf8">&nbsp;«</span></td><td><span class="hex">AB</span></td></tr><tr><td><span class="macro">\textminus</span></td><td><span class="utf8">&nbsp;−</span></td><td><span class="hex">2212</span></td></tr><tr><td><span class="macro">\textregistered</span></td><td><span class="utf8">&nbsp;®</span></td><td><span class="hex">AE</span></td></tr><tr><td><span class="macro">\textasciimacron</span></td><td><span class="utf8">&nbsp;¯</span></td><td><span class="hex">AF</span></td></tr><tr><td><span class="macro">\textdegree</span></td><td><span class="utf8">&nbsp;°</span></td><td><span class="hex">B0</span></td></tr><tr><td><span class="macro">\texttwosuperior</span></td><td><span class="utf8">&nbsp;²</span></td><td><span class="hex">B2</span></td></tr><tr><td><span class="macro">\textthreesuperior</span></td><td><span class="utf8">&nbsp;³</span></td><td><span class="hex">B3</span></td></tr><tr><td><span class="macro">\textasciiacute</span></td><td><span class="utf8">&nbsp;´</span></td><td><span class="hex">B4</span></td></tr><tr><td><span class="macro">\textparagraph</span></td><td><span class="utf8">&nbsp;¶</span></td><td><span class="hex">B6</span></td></tr><tr class="preferred"><td><span class="macro">\P</span></td><td><span class="utf8">&nbsp;¶</span></td><td><span class="hex">B6</span></td></tr><tr><td><span class="macro">\textcentereddot</span></td><td><span class="utf8">&nbsp;·</span></td><td><span class="hex">B7</span></td></tr><tr class="preferred"><td><span class="macro">\textperiodcentered</span></td><td><span class="utf8">&nbsp;·</span></td><td><span class="hex">B7</span></td></tr><tr><td><span class="macro">\textasciicedilla</span></td><td><span class="utf8">&nbsp;¸</span></td><td><span class="hex">B8</span></td></tr><tr><td><span class="macro">\textonesuperior</span></td><td><span class="utf8">&nbsp;¹</span></td><td><span class="hex">B9</span></td></tr><tr><td><span class="macro">\textordmasculine</span></td><td><span class="utf8">&nbsp;º</span></td><td><span class="hex">BA</span></td></tr><tr><td><span class="macro">\guillemotright</span></td><td><span class="utf8">&nbsp;»</span></td><td><span class="hex">BB</span></td></tr><tr><td><span class="macro">\textonequarter</span></td><td><span class="utf8">&nbsp;¼</span></td><td><span class="hex">BC</span></td></tr><tr><td><span class="macro">\textonehalf</span></td><td><span class="utf8">&nbsp;½</span></td><td><span class="hex">BD</span></td></tr><tr><td><span class="macro">\textthreequarters</span></td><td><span class="utf8">&nbsp;¾</span></td><td><span class="hex">BE</span></td></tr><tr><td><span class="macro">\textquestiondown</span></td><td><span class="utf8">&nbsp;¿</span></td><td><span class="hex">BF</span></td></tr></tbody></table><hr></hr><h3>symbols (sets: full)</h3><table><thead><tr><td>Macro</td><td>Unicode character</td><td>Unicode hex value</td></tr></thead><tbody><tr><td><span class="macro">\textg</span></td><td><span class="utf8">&nbsp;g</span></td><td><span class="hex">67</span></td></tr><tr><td><span class="macro">\textdiv</span></td><td><span class="utf8">&nbsp;÷</span></td><td><span class="hex">F7</span></td></tr><tr class="preferred"><td><span class="macro">\div</span></td><td><span class="utf8">&nbsp;÷</span></td><td><span class="hex">F7</span></td></tr><tr><td><span class="macro">\texttimes</span></td><td><span class="utf8">&nbsp;×</span></td><td><span class="hex">D7</span></td></tr><tr class="preferred"><td><span class="macro">\times</span></td><td><span class="utf8">&nbsp;×</span></td><td><span class="hex">D7</span></td></tr><tr><td><span class="macro">\textmu</span></td><td><span class="utf8">&nbsp;µ</span></td><td><span class="hex">B5</span></td></tr><tr class="preferred"><td><span class="macro">\mu</span></td><td><span class="utf8">&nbsp;µ</span></td><td><span class="hex">B5</span></td></tr><tr><td><span class="macro">\textpm</span></td><td><span class="utf8">&nbsp;±</span></td><td><span class="hex">B1</span></td></tr><tr class="preferred"><td><span class="macro">\pm</span></td><td><span class="utf8">&nbsp;±</span></td><td><span class="hex">B1</span></td></tr><tr><td><span class="macro">\textlogicalnot</span></td><td><span class="utf8">&nbsp;¬</span></td><td><span class="hex">AC</span></td></tr><tr class="preferred"><td><span class="macro">\lnot</span></td><td><span class="utf8">&nbsp;¬</span></td><td><span class="hex">AC</span></td></tr><tr><td><span class="macro">\textcolonmonetary</span></td><td><span class="utf8">&nbsp;₡</span></td><td><span class="hex">20A1</span></td></tr><tr><td><span class="macro">\textlira</span></td><td><span class="utf8">&nbsp;₤</span></td><td><span class="hex">20A4</span></td></tr><tr><td><span class="macro">\textnaira</span></td><td><span class="utf8">&nbsp;₦</span></td><td><span class="hex">20A6</span></td></tr><tr><td><span class="macro">\textwon</span></td><td><span class="utf8">&nbsp;₩</span></td><td><span class="hex">20A9</span></td></tr><tr><td><span class="macro">\textdong</span></td><td><span class="utf8">&nbsp;₫</span></td><td><span class="hex">20AB</span></td></tr><tr class="preferred"><td><span class="macro">\euro</span></td><td><span class="utf8">&nbsp;€</span></td><td><span class="hex">20AC</span></td></tr><tr><td><span class="macro">\texteuro</span></td><td><span class="utf8">&nbsp;€</span></td><td><span class="hex">20AC</span></td></tr><tr><td><span class="macro">\textnumero</span></td><td><span class="utf8">&nbsp;№</span></td><td><span class="hex">2116</span></td></tr><tr><td><span class="macro">\texttrademark</span></td><td><span class="utf8">&nbsp;™</span></td><td><span class="hex">2122</span></td></tr><tr><td><span class="macro">\leftarrow</span></td><td><span class="utf8">&nbsp;←</span></td><td><span class="hex">2190</span></td></tr><tr><td><span class="macro">\uparrow</span></td><td><span class="utf8">&nbsp;↑</span></td><td><span class="hex">2191</span></td></tr><tr><td><span class="macro">\rightarrow</span></td><td><span class="utf8">&nbsp;→</span></td><td><span class="hex">2192</span></td></tr><tr><td><span class="macro">\downarrow</span></td><td><span class="utf8">&nbsp;↓</span></td><td><span class="hex">2193</span></td></tr><tr><td><span class="macro">\leftrightarrow</span></td><td><span class="utf8">&nbsp;↔</span></td><td><span class="hex">2194</span></td></tr><tr><td><span class="macro">\updownarrow</span></td><td><span class="utf8">&nbsp;↕</span></td><td><span class="hex">2195</span></td></tr><tr><td><span class="macro">\leadsto</span></td><td><span class="utf8">&nbsp;↝</span></td><td><span class="hex">219D</span></td></tr><tr><td><span class="macro">\rightleftharpoons</span></td><td><span class="utf8">&nbsp;⇌</span></td><td><span class="hex">21CC</span></td></tr><tr><td><span class="macro">\Rightarrow</span></td><td><span class="utf8">&nbsp;⇒</span></td><td><span class="hex">21D2</span></td></tr><tr><td><span class="macro">\Leftrightarrow</span></td><td><span class="utf8">&nbsp;⇔</span></td><td><span class="hex">21D4</span></td></tr><tr><td><span class="macro">\forall</span></td><td><span class="utf8">&nbsp;∀</span></td><td><span class="hex">2200</span></td></tr><tr><td><span class="macro">\complement</span></td><td><span class="utf8">&nbsp;∁</span></td><td><span class="hex">2201</span></td></tr><tr><td><span class="macro">\partial</span></td><td><span class="utf8">&nbsp;∂</span></td><td><span class="hex">2202</span></td></tr><tr><td><span class="macro">\exists</span></td><td><span class="utf8">&nbsp;∃</span></td><td><span class="hex">2203</span></td></tr><tr><td><span class="macro">\nexists</span></td><td><span class="utf8">&nbsp;∄</span></td><td><span class="hex">2204</span></td></tr><tr><td><span class="macro">\set</span></td><td><span class="utf8">&nbsp;∅</span></td><td><span class="hex">2205</span></td></tr><tr><td><span class="macro">\Delta</span></td><td><span class="utf8">&nbsp;∆</span></td><td><span class="hex">2206</span></td></tr><tr><td><span class="macro">\nabla</span></td><td><span class="utf8">&nbsp;∇</span></td><td><span class="hex">2207</span></td></tr><tr><td><span class="macro">\in</span></td><td><span class="utf8">&nbsp;∈</span></td><td><span class="hex">2208</span></td></tr><tr><td><span class="macro">\notin</span></td><td><span class="utf8">&nbsp;∉</span></td><td><span class="hex">2209</span></td></tr><tr><td><span class="macro">\ni</span></td><td><span class="utf8">&nbsp;∋</span></td><td><span class="hex">220B</span></td></tr><tr><td><span class="macro">\prod</span></td><td><span class="utf8">&nbsp;∏</span></td><td><span class="hex">220F</span></td></tr><tr><td><span class="macro">\coprod</span></td><td><span class="utf8">&nbsp;∐</span></td><td><span class="hex">2210</span></td></tr><tr><td><span class="macro">\sum</span></td><td><span class="utf8">&nbsp;∑</span></td><td><span class="hex">2211</span></td></tr><tr><td><span class="macro">\mp</span></td><td><span class="utf8">&nbsp;∓</span></td><td><span class="hex">2213</span></td></tr><tr><td><span class="macro">\dotplus</span></td><td><span class="utf8">&nbsp;∔</span></td><td><span class="hex">2214</span></td></tr><tr><td><span class="macro">\setminus</span></td><td><span class="utf8">&nbsp;∖</span></td><td><span class="hex">2216</span></td></tr><tr><td><span class="macro">\ast</span></td><td><span class="utf8">&nbsp;∗</span></td><td><span class="hex">2217</span></td></tr><tr><td><span class="macro">\circ</span></td><td><span class="utf8">&nbsp;∘</span></td><td><span class="hex">2218</span></td></tr><tr><td><span class="macro">\bullet</span></td><td><span class="utf8">&nbsp;∙</span></td><td><span class="hex">2219</span></td></tr><tr><td><span class="macro">\surd</span></td><td><span class="utf8">&nbsp;√</span></td><td><span class="hex">221A</span></td></tr><tr><td><span class="macro">\propto</span></td><td><span class="utf8">&nbsp;∝</span></td><td><span class="hex">221D</span></td></tr><tr><td><span class="macro">\infty</span></td><td><span class="utf8">&nbsp;∞</span></td><td><span class="hex">221E</span></td></tr><tr><td><span class="macro">\angle</span></td><td><span class="utf8">&nbsp;∠</span></td><td><span class="hex">2220</span></td></tr><tr><td><span class="macro">\measuredangle</span></td><td><span class="utf8">&nbsp;∡</span></td><td><span class="hex">2221</span></td></tr><tr><td><span class="macro">\sphericalangle</span></td><td><span class="utf8">&nbsp;∢</span></td><td><span class="hex">2222</span></td></tr><tr><td><span class="macro">\mid</span></td><td><span class="utf8">&nbsp;∣</span></td><td><span class="hex">2223</span></td></tr><tr><td><span class="macro">\nmid</span></td><td><span class="utf8">&nbsp;∤</span></td><td><span class="hex">2224</span></td></tr><tr><td><span class="macro">\parallel</span></td><td><span class="utf8">&nbsp;∥</span></td><td><span class="hex">2225</span></td></tr><tr><td><span class="macro">\nparallel</span></td><td><span class="utf8">&nbsp;∦</span></td><td><span class="hex">2226</span></td></tr><tr><td><span class="macro">\wedge</span></td><td><span class="utf8">&nbsp;∧</span></td><td><span class="hex">2227</span></td></tr><tr><td><span class="macro">\vee</span></td><td><span class="utf8">&nbsp;∨</span></td><td><span class="hex">2228</span></td></tr><tr><td><span class="macro">\cap</span></td><td><span class="utf8">&nbsp;∩</span></td><td><span class="hex">2229</span></td></tr><tr><td><span class="macro">\cup</span></td><td><span class="utf8">&nbsp;∪</span></td><td><span class="hex">222A</span></td></tr><tr><td><span class="macro">\int</span></td><td><span class="utf8">&nbsp;∫</span></td><td><span class="hex">222B</span></td></tr><tr><td><span class="macro">\iint</span></td><td><span class="utf8">&nbsp;∬</span></td><td><span class="hex">222C</span></td></tr><tr><td><span class="macro">\iiint</span></td><td><span class="utf8">&nbsp;∭</span></td><td><span class="hex">222D</span></td></tr><tr><td><span class="macro">\oint</span></td><td><span class="utf8">&nbsp;∮</span></td><td><span class="hex">222E</span></td></tr><tr><td><span class="macro">\therefore</span></td><td><span class="utf8">&nbsp;∴</span></td><td><span class="hex">2234</span></td></tr><tr><td><span class="macro">\because</span></td><td><span class="utf8">&nbsp;∵</span></td><td><span class="hex">2235</span></td></tr><tr><td><span class="macro">\sim</span></td><td><span class="utf8">&nbsp;∼</span></td><td><span class="hex">223C</span></td></tr><tr><td><span class="macro">\backsim</span></td><td><span class="utf8">&nbsp;∽</span></td><td><span class="hex">223D</span></td></tr><tr><td><span class="macro">\wr</span></td><td><span class="utf8">&nbsp;≀</span></td><td><span class="hex">2240</span></td></tr><tr><td><span class="macro">\nsim</span></td><td><span class="utf8">&nbsp;≁</span></td><td><span class="hex">2241</span></td></tr><tr><td><span class="macro">\simeq</span></td><td><span class="utf8">&nbsp;≃</span></td><td><span class="hex">2243</span></td></tr><tr><td><span class="macro">\cong</span></td><td><span class="utf8">&nbsp;≅</span></td><td><span class="hex">2245</span></td></tr><tr><td><span class="macro">\ncong</span></td><td><span class="utf8">&nbsp;≇</span></td><td><span class="hex">2247</span></td></tr><tr><td><span class="macro">\approx</span></td><td><span class="utf8">&nbsp;≈</span></td><td><span class="hex">2248</span></td></tr><tr><td><span class="macro">\approxeq</span></td><td><span class="utf8">&nbsp;≊</span></td><td><span class="hex">224A</span></td></tr><tr><td><span class="macro">\asymp</span></td><td><span class="utf8">&nbsp;≍</span></td><td><span class="hex">224D</span></td></tr><tr><td><span class="macro">\Bumpeq</span></td><td><span class="utf8">&nbsp;≎</span></td><td><span class="hex">224E</span></td></tr><tr><td><span class="macro">\bumpeq</span></td><td><span class="utf8">&nbsp;≏</span></td><td><span class="hex">224F</span></td></tr><tr><td><span class="macro">\doteq</span></td><td><span class="utf8">&nbsp;≐</span></td><td><span class="hex">2250</span></td></tr><tr><td><span class="macro">\doteqdot</span></td><td><span class="utf8">&nbsp;≑</span></td><td><span class="hex">2251</span></td></tr><tr><td><span class="macro">\fallingdotseq</span></td><td><span class="utf8">&nbsp;≒</span></td><td><span class="hex">2252</span></td></tr><tr><td><span class="macro">\risingdotseq</span></td><td><span class="utf8">&nbsp;≓</span></td><td><span class="hex">2253</span></td></tr><tr><td><span class="macro">\eqcirc</span></td><td><span class="utf8">&nbsp;≖</span></td><td><span class="hex">2256</span></td></tr><tr><td><span class="macro">\circeq</span></td><td><span class="utf8">&nbsp;≗</span></td><td><span class="hex">2257</span></td></tr><tr><td><span class="macro">\triangleq</span></td><td><span class="utf8">&nbsp;≜</span></td><td><span class="hex">225C</span></td></tr><tr><td><span class="macro">\neq</span></td><td><span class="utf8">&nbsp;≠</span></td><td><span class="hex">2260</span></td></tr><tr><td><span class="macro">\equiv</span></td><td><span class="utf8">&nbsp;≡</span></td><td><span class="hex">2261</span></td></tr><tr><td><span class="macro">\leq</span></td><td><span class="utf8">&nbsp;≤</span></td><td><span class="hex">2264</span></td></tr><tr><td><span class="macro">\geq</span></td><td><span class="utf8">&nbsp;≥</span></td><td><span class="hex">2265</span></td></tr><tr><td><span class="macro">\leqq</span></td><td><span class="utf8">&nbsp;≦</span></td><td><span class="hex">2266</span></td></tr><tr><td><span class="macro">\geqq</span></td><td><span class="utf8">&nbsp;≧</span></td><td><span class="hex">2267</span></td></tr><tr><td><span class="macro">\lneqq</span></td><td><span class="utf8">&nbsp;≨</span></td><td><span class="hex">2268</span></td></tr><tr><td><span class="macro">\gneqq</span></td><td><span class="utf8">&nbsp;≩</span></td><td><span class="hex">2269</span></td></tr><tr><td><span class="macro">\ll</span></td><td><span class="utf8">&nbsp;≪</span></td><td><span class="hex">226A</span></td></tr><tr><td><span class="macro">\gg</span></td><td><span class="utf8">&nbsp;≫</span></td><td><span class="hex">226B</span></td></tr><tr><td><span class="macro">\between</span></td><td><span class="utf8">&nbsp;≬</span></td><td><span class="hex">226C</span></td></tr><tr><td><span class="macro">\nless</span></td><td><span class="utf8">&nbsp;≮</span></td><td><span class="hex">226E</span></td></tr><tr><td><span class="macro">\ngtr</span></td><td><span class="utf8">&nbsp;≯</span></td><td><span class="hex">226F</span></td></tr><tr><td><span class="macro">\nleq</span></td><td><span class="utf8">&nbsp;≰</span></td><td><span class="hex">2270</span></td></tr><tr><td><span class="macro">\ngeq</span></td><td><span class="utf8">&nbsp;≱</span></td><td><span class="hex">2271</span></td></tr><tr><td><span class="macro">\lesssim</span></td><td><span class="utf8">&nbsp;≲</span></td><td><span class="hex">2272</span></td></tr><tr><td><span class="macro">\gtrsim</span></td><td><span class="utf8">&nbsp;≳</span></td><td><span class="hex">2273</span></td></tr><tr><td><span class="macro">\lessgtr</span></td><td><span class="utf8">&nbsp;≶</span></td><td><span class="hex">2276</span></td></tr><tr><td><span class="macro">\gtrless</span></td><td><span class="utf8">&nbsp;≷</span></td><td><span class="hex">2277</span></td></tr><tr><td><span class="macro">\prec</span></td><td><span class="utf8">&nbsp;≺</span></td><td><span class="hex">227A</span></td></tr><tr><td><span class="macro">\succ</span></td><td><span class="utf8">&nbsp;≻</span></td><td><span class="hex">227B</span></td></tr><tr><td><span class="macro">\preccurlyeq</span></td><td><span class="utf8">&nbsp;≼</span></td><td><span class="hex">227C</span></td></tr><tr><td><span class="macro">\succcurlyeq</span></td><td><span class="utf8">&nbsp;≽</span></td><td><span class="hex">227D</span></td></tr><tr><td><span class="macro">\precsim</span></td><td><span class="utf8">&nbsp;≾</span></td><td><span class="hex">227E</span></td></tr><tr><td><span class="macro">\succsim</span></td><td><span class="utf8">&nbsp;≿</span></td><td><span class="hex">227F</span></td></tr><tr><td><span class="macro">\nprec</span></td><td><span class="utf8">&nbsp;⊀</span></td><td><span class="hex">2280</span></td></tr><tr><td><span class="macro">\nsucc</span></td><td><span class="utf8">&nbsp;⊁</span></td><td><span class="hex">2281</span></td></tr><tr><td><span class="macro">\subset</span></td><td><span class="utf8">&nbsp;⊂</span></td><td><span class="hex">2282</span></td></tr><tr><td><span class="macro">\supset</span></td><td><span class="utf8">&nbsp;⊃</span></td><td><span class="hex">2283</span></td></tr><tr><td><span class="macro">\subseteq</span></td><td><span class="utf8">&nbsp;⊆</span></td><td><span class="hex">2286</span></td></tr><tr><td><span class="macro">\supseteq</span></td><td><span class="utf8">&nbsp;⊇</span></td><td><span class="hex">2287</span></td></tr><tr><td><span class="macro">\nsubseteq</span></td><td><span class="utf8">&nbsp;⊈</span></td><td><span class="hex">2288</span></td></tr><tr><td><span class="macro">\nsupseteq</span></td><td><span class="utf8">&nbsp;⊉</span></td><td><span class="hex">2289</span></td></tr><tr><td><span class="macro">\subsetneq</span></td><td><span class="utf8">&nbsp;⊊</span></td><td><span class="hex">228A</span></td></tr><tr><td><span class="macro">\supsetneq</span></td><td><span class="utf8">&nbsp;⊋</span></td><td><span class="hex">228B</span></td></tr><tr><td><span class="macro">\uplus</span></td><td><span class="utf8">&nbsp;⊎</span></td><td><span class="hex">228E</span></td></tr><tr><td><span class="macro">\sqsubset</span></td><td><span class="utf8">&nbsp;⊏</span></td><td><span class="hex">228F</span></td></tr><tr><td><span class="macro">\sqsupset</span></td><td><span class="utf8">&nbsp;⊐</span></td><td><span class="hex">2290</span></td></tr><tr><td><span class="macro">\sqsubseteq</span></td><td><span class="utf8">&nbsp;⊑</span></td><td><span class="hex">2291</span></td></tr><tr><td><span class="macro">\sqsupseteq</span></td><td><span class="utf8">&nbsp;⊒</span></td><td><span class="hex">2292</span></td></tr><tr><td><span class="macro">\sqcap</span></td><td><span class="utf8">&nbsp;⊓</span></td><td><span class="hex">2293</span></td></tr><tr><td><span class="macro">\sqcup</span></td><td><span class="utf8">&nbsp;⊔</span></td><td><span class="hex">2294</span></td></tr><tr><td><span class="macro">\oplus</span></td><td><span class="utf8">&nbsp;⊕</span></td><td><span class="hex">2295</span></td></tr><tr><td><span class="macro">\ominus</span></td><td><span class="utf8">&nbsp;⊖</span></td><td><span class="hex">2296</span></td></tr><tr><td><span class="macro">\otimes</span></td><td><span class="utf8">&nbsp;⊗</span></td><td><span class="hex">2297</span></td></tr><tr><td><span class="macro">\oslash</span></td><td><span class="utf8">&nbsp;⊘</span></td><td><span class="hex">2298</span></td></tr><tr><td><span class="macro">\odot</span></td><td><span class="utf8">&nbsp;⊙</span></td><td><span class="hex">2299</span></td></tr><tr><td><span class="macro">\circledcirc</span></td><td><span class="utf8">&nbsp;⊚</span></td><td><span class="hex">229A</span></td></tr><tr><td><span class="macro">\circledast</span></td><td><span class="utf8">&nbsp;⊛</span></td><td><span class="hex">229B</span></td></tr><tr><td><span class="macro">\circleddash</span></td><td><span class="utf8">&nbsp;⊝</span></td><td><span class="hex">229D</span></td></tr><tr><td><span class="macro">\boxplus</span></td><td><span class="utf8">&nbsp;⊞</span></td><td><span class="hex">229E</span></td></tr><tr><td><span class="macro">\boxminus</span></td><td><span class="utf8">&nbsp;⊟</span></td><td><span class="hex">229F</span></td></tr><tr><td><span class="macro">\boxtimes</span></td><td><span class="utf8">&nbsp;⊠</span></td><td><span class="hex">22A0</span></td></tr><tr><td><span class="macro">\boxdot</span></td><td><span class="utf8">&nbsp;⊡</span></td><td><span class="hex">22A1</span></td></tr><tr><td><span class="macro">\vdash</span></td><td><span class="utf8">&nbsp;⊢</span></td><td><span class="hex">22A2</span></td></tr><tr><td><span class="macro">\dashv</span></td><td><span class="utf8">&nbsp;⊣</span></td><td><span class="hex">22A3</span></td></tr><tr><td><span class="macro">\top</span></td><td><span class="utf8">&nbsp;⊤</span></td><td><span class="hex">22A4</span></td></tr><tr><td><span class="macro">\bot</span></td><td><span class="utf8">&nbsp;⊥</span></td><td><span class="hex">22A5</span></td></tr><tr><td><span class="macro">\Vdash</span></td><td><span class="utf8">&nbsp;⊩</span></td><td><span class="hex">22A9</span></td></tr><tr><td><span class="macro">\Vvdash</span></td><td><span class="utf8">&nbsp;⊪</span></td><td><span class="hex">22AA</span></td></tr><tr><td><span class="macro">\nVdash</span></td><td><span class="utf8">&nbsp;⊮</span></td><td><span class="hex">22AE</span></td></tr><tr><td><span class="macro">\lhd</span></td><td><span class="utf8">&nbsp;⊲</span></td><td><span class="hex">22B2</span></td></tr><tr><td><span class="macro">\rhd</span></td><td><span class="utf8">&nbsp;⊳</span></td><td><span class="hex">22B3</span></td></tr><tr><td><span class="macro">\unlhd</span></td><td><span class="utf8">&nbsp;⊴</span></td><td><span class="hex">22B4</span></td></tr><tr><td><span class="macro">\unrhd</span></td><td><span class="utf8">&nbsp;⊵</span></td><td><span class="hex">22B5</span></td></tr><tr><td><span class="macro">\multimap</span></td><td><span class="utf8">&nbsp;⊸</span></td><td><span class="hex">22B8</span></td></tr><tr><td><span class="macro">\intercal</span></td><td><span class="utf8">&nbsp;⊺</span></td><td><span class="hex">22BA</span></td></tr><tr><td><span class="macro">\veebar</span></td><td><span class="utf8">&nbsp;⊻</span></td><td><span class="hex">22BB</span></td></tr><tr><td><span class="macro">\barwedge</span></td><td><span class="utf8">&nbsp;⊼</span></td><td><span class="hex">22BC</span></td></tr><tr><td><span class="macro">\bigwedge</span></td><td><span class="utf8">&nbsp;⋀</span></td><td><span class="hex">22C0</span></td></tr><tr><td><span class="macro">\bigvee</span></td><td><span class="utf8">&nbsp;⋁</span></td><td><span class="hex">22C1</span></td></tr><tr><td><span class="macro">\bigcap</span></td><td><span class="utf8">&nbsp;⋂</span></td><td><span class="hex">22C2</span></td></tr><tr><td><span class="macro">\bigcup</span></td><td><span class="utf8">&nbsp;⋃</span></td><td><span class="hex">22C3</span></td></tr><tr><td><span class="macro">\diamond</span></td><td><span class="utf8">&nbsp;⋄</span></td><td><span class="hex">22C4</span></td></tr><tr><td><span class="macro">\cdot</span></td><td><span class="utf8">&nbsp;⋅</span></td><td><span class="hex">22C5</span></td></tr><tr><td><span class="macro">\star</span></td><td><span class="utf8">&nbsp;⋆</span></td><td><span class="hex">22C6</span></td></tr><tr><td><span class="macro">\divideontimes</span></td><td><span class="utf8">&nbsp;⋇</span></td><td><span class="hex">22C7</span></td></tr><tr><td><span class="macro">\bowtie</span></td><td><span class="utf8">&nbsp;⋈</span></td><td><span class="hex">22C8</span></td></tr><tr><td><span class="macro">\ltimes</span></td><td><span class="utf8">&nbsp;⋉</span></td><td><span class="hex">22C9</span></td></tr><tr><td><span class="macro">\rtimes</span></td><td><span class="utf8">&nbsp;⋊</span></td><td><span class="hex">22CA</span></td></tr><tr><td><span class="macro">\leftthreetimes</span></td><td><span class="utf8">&nbsp;⋋</span></td><td><span class="hex">22CB</span></td></tr><tr><td><span class="macro">\rightthreetimes</span></td><td><span class="utf8">&nbsp;⋌</span></td><td><span class="hex">22CC</span></td></tr><tr><td><span class="macro">\backsimeq</span></td><td><span class="utf8">&nbsp;⋍</span></td><td><span class="hex">22CD</span></td></tr><tr><td><span class="macro">\curlyvee</span></td><td><span class="utf8">&nbsp;⋎</span></td><td><span class="hex">22CE</span></td></tr><tr><td><span class="macro">\curlywedge</span></td><td><span class="utf8">&nbsp;⋏</span></td><td><span class="hex">22CF</span></td></tr><tr><td><span class="macro">\Subset</span></td><td><span class="utf8">&nbsp;⋐</span></td><td><span class="hex">22D0</span></td></tr><tr><td><span class="macro">\Supset</span></td><td><span class="utf8">&nbsp;⋑</span></td><td><span class="hex">22D1</span></td></tr><tr><td><span class="macro">\Cap</span></td><td><span class="utf8">&nbsp;⋒</span></td><td><span class="hex">22D2</span></td></tr><tr><td><span class="macro">\Cup</span></td><td><span class="utf8">&nbsp;⋓</span></td><td><span class="hex">22D3</span></td></tr><tr><td><span class="macro">\pitchfork</span></td><td><span class="utf8">&nbsp;⋔</span></td><td><span class="hex">22D4</span></td></tr><tr><td><span class="macro">\lessdot</span></td><td><span class="utf8">&nbsp;⋖</span></td><td><span class="hex">22D6</span></td></tr><tr><td><span class="macro">\gtrdot</span></td><td><span class="utf8">&nbsp;⋗</span></td><td><span class="hex">22D7</span></td></tr><tr><td><span class="macro">\lll</span></td><td><span class="utf8">&nbsp;⋘</span></td><td><span class="hex">22D8</span></td></tr><tr><td><span class="macro">\ggg</span></td><td><span class="utf8">&nbsp;⋙</span></td><td><span class="hex">22D9</span></td></tr><tr><td><span class="macro">\lesseqgtr</span></td><td><span class="utf8">&nbsp;⋚</span></td><td><span class="hex">22DA</span></td></tr><tr><td><span class="macro">\gtreqless</span></td><td><span class="utf8">&nbsp;⋛</span></td><td><span class="hex">22DB</span></td></tr><tr><td><span class="macro">\curlyeqprec</span></td><td><span class="utf8">&nbsp;⋞</span></td><td><span class="hex">22DE</span></td></tr><tr><td><span class="macro">\curlyeqsucc</span></td><td><span class="utf8">&nbsp;⋟</span></td><td><span class="hex">22DF</span></td></tr><tr><td><span class="macro">\lnsim</span></td><td><span class="utf8">&nbsp;⋦</span></td><td><span class="hex">22E6</span></td></tr><tr><td><span class="macro">\gnsim</span></td><td><span class="utf8">&nbsp;⋧</span></td><td><span class="hex">22E7</span></td></tr><tr><td><span class="macro">\precnsim</span></td><td><span class="utf8">&nbsp;⋨</span></td><td><span class="hex">22E8</span></td></tr><tr><td><span class="macro">\succnsim</span></td><td><span class="utf8">&nbsp;⋩</span></td><td><span class="hex">22E9</span></td></tr><tr><td><span class="macro">\ntriangleleft</span></td><td><span class="utf8">&nbsp;⋪</span></td><td><span class="hex">22EA</span></td></tr><tr><td><span class="macro">\ntriangleright</span></td><td><span class="utf8">&nbsp;⋫</span></td><td><span class="hex">22EB</span></td></tr><tr><td><span class="macro">\ntrianglelefteq</span></td><td><span class="utf8">&nbsp;⋬</span></td><td><span class="hex">22EC</span></td></tr><tr><td><span class="macro">\ntrianglerighteq</span></td><td><span class="utf8">&nbsp;⋭</span></td><td><span class="hex">22ED</span></td></tr><tr><td><span class="macro">\vdots</span></td><td><span class="utf8">&nbsp;⋮</span></td><td><span class="hex">22EE</span></td></tr><tr><td><span class="macro">\cdots</span></td><td><span class="utf8">&nbsp;⋯</span></td><td><span class="hex">22EF</span></td></tr><tr><td><span class="macro">\ddots</span></td><td><span class="utf8">&nbsp;⋱</span></td><td><span class="hex">22F1</span></td></tr><tr><td><span class="macro">\lceil</span></td><td><span class="utf8">&nbsp;⌈</span></td><td><span class="hex">2308</span></td></tr><tr><td><span class="macro">\rceil</span></td><td><span class="utf8">&nbsp;⌉</span></td><td><span class="hex">2309</span></td></tr><tr><td><span class="macro">\lfloor</span></td><td><span class="utf8">&nbsp;⌊</span></td><td><span class="hex">230A</span></td></tr><tr><td><span class="macro">\rfloor</span></td><td><span class="utf8">&nbsp;⌋</span></td><td><span class="hex">230B</span></td></tr><tr><td><span class="macro">\Box</span></td><td><span class="utf8">&nbsp;□</span></td><td><span class="hex">25A1</span></td></tr><tr><td><span class="macro">\spadesuit</span></td><td><span class="utf8">&nbsp;♠</span></td><td><span class="hex">2660</span></td></tr><tr><td><span class="macro">\heartsuit</span></td><td><span class="utf8">&nbsp;♡</span></td><td><span class="hex">2661</span></td></tr><tr><td><span class="macro">\diamondsuit</span></td><td><span class="utf8">&nbsp;♢</span></td><td><span class="hex">2662</span></td></tr><tr><td><span class="macro">\clubsuit</span></td><td><span class="utf8">&nbsp;♣</span></td><td><span class="hex">2663</span></td></tr><tr><td><span class="macro">\flat</span></td><td><span class="utf8">&nbsp;♭</span></td><td><span class="hex">266D</span></td></tr><tr><td><span class="macro">\natural</span></td><td><span class="utf8">&nbsp;♮</span></td><td><span class="hex">266E</span></td></tr><tr><td><span class="macro">\sharp</span></td><td><span class="utf8">&nbsp;♯</span></td><td><span class="hex">266F</span></td></tr><tr><td><span class="macro">\tone5</span></td><td><span class="utf8">&nbsp;˥</span></td><td><span class="hex">2E5</span></td></tr><tr><td><span class="macro">\tone4</span></td><td><span class="utf8">&nbsp;˦</span></td><td><span class="hex">2E6</span></td></tr><tr><td><span class="macro">\tone3</span></td><td><span class="utf8">&nbsp;˧</span></td><td><span class="hex">2E7</span></td></tr><tr><td><span class="macro">\tone2</span></td><td><span class="utf8">&nbsp;˨</span></td><td><span class="hex">2E8</span></td></tr><tr><td><span class="macro">\tone1</span></td><td><span class="utf8">&nbsp;˩</span></td><td><span class="hex">2E9</span></td></tr></tbody></table><hr></hr><h3>negatedsymbols (sets: full)</h3><table><thead><tr><td>Macro</td><td>Unicode character</td><td>Unicode hex value</td></tr></thead><tbody><tr><td><span class="macro">\asymp</span></td><td><span class="utf8">&nbsp;≭</span></td><td><span class="hex">226D</span></td></tr><tr><td><span class="macro">\lesssim</span></td><td><span class="utf8">&nbsp;≴</span></td><td><span class="hex">2274</span></td></tr><tr><td><span class="macro">\gtrsim</span></td><td><span class="utf8">&nbsp;≵</span></td><td><span class="hex">2275</span></td></tr><tr><td><span class="macro">\subset</span></td><td><span class="utf8">&nbsp;⊄</span></td><td><span class="hex">2284</span></td></tr><tr><td><span class="macro">\supset</span></td><td><span class="utf8">&nbsp;⊅</span></td><td><span class="hex">2285</span></td></tr><tr><td><span class="macro">\ni</span></td><td><span class="utf8">&nbsp;∌</span></td><td><span class="hex">220C</span></td></tr><tr><td><span class="macro">\simeq</span></td><td><span class="utf8">&nbsp;≄</span></td><td><span class="hex">2244</span></td></tr><tr><td><span class="macro">\approx</span></td><td><span class="utf8">&nbsp;≉</span></td><td><span class="hex">2249</span></td></tr><tr><td><span class="macro">\equiv</span></td><td><span class="utf8">&nbsp;≢</span></td><td><span class="hex">2262</span></td></tr><tr><td><span class="macro">\preccurlyeq</span></td><td><span class="utf8">&nbsp;⋠</span></td><td><span class="hex">22E0</span></td></tr><tr><td><span class="macro">\succcurlyeq</span></td><td><span class="utf8">&nbsp;⋡</span></td><td><span class="hex">22E1</span></td></tr><tr><td><span class="macro">\sqsubseteq</span></td><td><span class="utf8">&nbsp;⋢</span></td><td><span class="hex">22E2</span></td></tr><tr><td><span class="macro">\sqsupseteq</span></td><td><span class="utf8">&nbsp;⋣</span></td><td><span class="hex">22E3</span></td></tr></tbody></table><hr></hr><h3>superscripts (sets: full)</h3><table><thead><tr><td>Macro</td><td>Unicode character</td><td>Unicode hex value</td></tr></thead><tbody><tr><td><span class="macro">\0</span></td><td><span class="utf8">&nbsp;⁰</span></td><td><span class="hex">2070</span></td></tr><tr><td><span class="macro">\i</span></td><td><span class="utf8">&nbsp;ⁱ</span></td><td><span class="hex">2071</span></td></tr><tr><td><span class="macro">\4</span></td><td><span class="utf8">&nbsp;⁴</span></td><td><span class="hex">2074</span></td></tr><tr><td><span class="macro">\5</span></td><td><span class="utf8">&nbsp;⁵</span></td><td><span class="hex">2075</span></td></tr><tr><td><span class="macro">\6</span></td><td><span class="utf8">&nbsp;⁶</span></td><td><span class="hex">2076</span></td></tr><tr><td><span class="macro">\7</span></td><td><span class="utf8">&nbsp;⁷</span></td><td><span class="hex">2077</span></td></tr><tr><td><span class="macro">\8</span></td><td><span class="utf8">&nbsp;⁸</span></td><td><span class="hex">2078</span></td></tr><tr><td><span class="macro">\9</span></td><td><span class="utf8">&nbsp;⁹</span></td><td><span class="hex">2079</span></td></tr><tr><td><span class="macro">\+</span></td><td><span class="utf8">&nbsp;⁺</span></td><td><span class="hex">207A</span></td></tr><tr><td><span class="macro">\-</span></td><td><span class="utf8">&nbsp;⁻</span></td><td><span class="hex">207B</span></td></tr><tr><td><span class="macro">\=</span></td><td><span class="utf8">&nbsp;⁼</span></td><td><span class="hex">207C</span></td></tr><tr><td><span class="macro">\(</span></td><td><span class="utf8">&nbsp;⁽</span></td><td><span class="hex">207D</span></td></tr><tr><td><span class="macro">\)</span></td><td><span class="utf8">&nbsp;⁾</span></td><td><span class="hex">207E</span></td></tr><tr><td><span class="macro">\n</span></td><td><span class="utf8">&nbsp;ⁿ</span></td><td><span class="hex">207F</span></td></tr><tr><td><span class="macro">\SM</span></td><td><span class="utf8">&nbsp;℠</span></td><td><span class="hex">2120</span></td></tr><tr><td><span class="macro">\h</span></td><td><span class="utf8">&nbsp;ʰ</span></td><td><span class="hex">2B0</span></td></tr><tr><td><span class="macro">\j</span></td><td><span class="utf8">&nbsp;ʲ</span></td><td><span class="hex">2B2</span></td></tr><tr><td><span class="macro">\r</span></td><td><span class="utf8">&nbsp;ʳ</span></td><td><span class="hex">2B3</span></td></tr><tr><td><span class="macro">\w</span></td><td><span class="utf8">&nbsp;ʷ</span></td><td><span class="hex">2B7</span></td></tr><tr><td><span class="macro">\y</span></td><td><span class="utf8">&nbsp;ʸ</span></td><td><span class="hex">2B8</span></td></tr></tbody></table><hr></hr><h3>cmdsuperscripts (sets: full)</h3><table><thead><tr><td>Macro</td><td>Unicode character</td><td>Unicode hex value</td></tr></thead><tbody><tr><td><span class="macro">\texthth</span></td><td><span class="utf8">&nbsp;ʱ</span></td><td><span class="hex">2B1</span></td></tr><tr><td><span class="macro">\textturnr</span></td><td><span class="utf8">&nbsp;ʴ</span></td><td><span class="hex">2B4</span></td></tr><tr><td><span class="macro">\textturnrrtail</span></td><td><span class="utf8">&nbsp;ʵ</span></td><td><span class="hex">2B5</span></td></tr><tr><td><span class="macro">\textinvscr</span></td><td><span class="utf8">&nbsp;ʶ</span></td><td><span class="hex">2B6</span></td></tr></tbody></table><hr></hr><h3>dings (sets: full)</h3><table><thead><tr><td>Macro</td><td>Unicode character</td><td>Unicode hex value</td></tr></thead><tbody><tr><td><span class="macro">\21</span></td><td><span class="utf8">&nbsp;✁</span></td><td><span class="hex">2701</span></td></tr><tr><td><span class="macro">\22</span></td><td><span class="utf8">&nbsp;✂</span></td><td><span class="hex">2702</span></td></tr><tr><td><span class="macro">\23</span></td><td><span class="utf8">&nbsp;✃</span></td><td><span class="hex">2703</span></td></tr><tr><td><span class="macro">\24</span></td><td><span class="utf8">&nbsp;✄</span></td><td><span class="hex">2704</span></td></tr><tr><td><span class="macro">\25</span></td><td><span class="utf8">&nbsp;☎</span></td><td><span class="hex">260E</span></td></tr><tr><td><span class="macro">\26</span></td><td><span class="utf8">&nbsp;✆</span></td><td><span class="hex">2706</span></td></tr><tr><td><span class="macro">\27</span></td><td><span class="utf8">&nbsp;✇</span></td><td><span class="hex">2707</span></td></tr><tr><td><span class="macro">\28</span></td><td><span class="utf8">&nbsp;✈</span></td><td><span class="hex">2708</span></td></tr><tr><td><span class="macro">\29</span></td><td><span class="utf8">&nbsp;✉</span></td><td><span class="hex">2709</span></td></tr><tr><td><span class="macro">\2A</span></td><td><span class="utf8">&nbsp;☛</span></td><td><span class="hex">261B</span></td></tr><tr><td><span class="macro">\2B</span></td><td><span class="utf8">&nbsp;☞</span></td><td><span class="hex">261E</span></td></tr><tr><td><span class="macro">\2C</span></td><td><span class="utf8">&nbsp;✌</span></td><td><span class="hex">270C</span></td></tr><tr><td><span class="macro">\2D</span></td><td><span class="utf8">&nbsp;✍</span></td><td><span class="hex">270D</span></td></tr><tr><td><span class="macro">\2E</span></td><td><span class="utf8">&nbsp;✎</span></td><td><span class="hex">270E</span></td></tr><tr><td><span class="macro">\2F</span></td><td><span class="utf8">&nbsp;✏</span></td><td><span class="hex">270F</span></td></tr><tr><td><span class="macro">\30</span></td><td><span class="utf8">&nbsp;✐</span></td><td><span class="hex">2710</span></td></tr><tr><td><span class="macro">\31</span></td><td><span class="utf8">&nbsp;✑</span></td><td><span class="hex">2711</span></td></tr><tr><td><span class="macro">\32</span></td><td><span class="utf8">&nbsp;✒</span></td><td><span class="hex">2712</span></td></tr><tr><td><span class="macro">\33</span></td><td><span class="utf8">&nbsp;✓</span></td><td><span class="hex">2713</span></td></tr><tr><td><span class="macro">\34</span></td><td><span class="utf8">&nbsp;✔</span></td><td><span class="hex">2714</span></td></tr><tr><td><span class="macro">\35</span></td><td><span class="utf8">&nbsp;✕</span></td><td><span class="hex">2715</span></td></tr><tr><td><span class="macro">\36</span></td><td><span class="utf8">&nbsp;✖</span></td><td><span class="hex">2716</span></td></tr><tr><td><span class="macro">\37</span></td><td><span class="utf8">&nbsp;✗</span></td><td><span class="hex">2717</span></td></tr><tr><td><span class="macro">\38</span></td><td><span class="utf8">&nbsp;✘</span></td><td><span class="hex">2718</span></td></tr><tr><td><span class="macro">\39</span></td><td><span class="utf8">&nbsp;✙</span></td><td><span class="hex">2719</span></td></tr><tr><td><span class="macro">\3A</span></td><td><span class="utf8">&nbsp;✚</span></td><td><span class="hex">271A</span></td></tr><tr><td><span class="macro">\3B</span></td><td><span class="utf8">&nbsp;✛</span></td><td><span class="hex">271B</span></td></tr><tr><td><span class="macro">\3C</span></td><td><span class="utf8">&nbsp;✜</span></td><td><span class="hex">271C</span></td></tr><tr><td><span class="macro">\3D</span></td><td><span class="utf8">&nbsp;✝</span></td><td><span class="hex">271D</span></td></tr><tr><td><span class="macro">\3E</span></td><td><span class="utf8">&nbsp;✞</span></td><td><span class="hex">271E</span></td></tr><tr><td><span class="macro">\3F</span></td><td><span class="utf8">&nbsp;✟</span></td><td><span class="hex">271F</span></td></tr><tr><td><span class="macro">\40</span></td><td><span class="utf8">&nbsp;✠</span></td><td><span class="hex">2720</span></td></tr><tr><td><span class="macro">\41</span></td><td><span class="utf8">&nbsp;✡</span></td><td><span class="hex">2721</span></td></tr><tr><td><span class="macro">\42</span></td><td><span class="utf8">&nbsp;✢</span></td><td><span class="hex">2722</span></td></tr><tr><td><span class="macro">\43</span></td><td><span class="utf8">&nbsp;✣</span></td><td><span class="hex">2723</span></td></tr><tr><td><span class="macro">\44</span></td><td><span class="utf8">&nbsp;✤</span></td><td><span class="hex">2724</span></td></tr><tr><td><span class="macro">\45</span></td><td><span class="utf8">&nbsp;✥</span></td><td><span class="hex">2725</span></td></tr><tr><td><span class="macro">\46</span></td><td><span class="utf8">&nbsp;✦</span></td><td><span class="hex">2726</span></td></tr><tr><td><span class="macro">\47</span></td><td><span class="utf8">&nbsp;✧</span></td><td><span class="hex">2727</span></td></tr><tr><td><span class="macro">\48</span></td><td><span class="utf8">&nbsp;★</span></td><td><span class="hex">2605</span></td></tr><tr><td><span class="macro">\49</span></td><td><span class="utf8">&nbsp;✩</span></td><td><span class="hex">2729</span></td></tr><tr><td><span class="macro">\4A</span></td><td><span class="utf8">&nbsp;✪</span></td><td><span class="hex">272A</span></td></tr><tr><td><span class="macro">\4B</span></td><td><span class="utf8">&nbsp;✫</span></td><td><span class="hex">272B</span></td></tr><tr><td><span class="macro">\4C</span></td><td><span class="utf8">&nbsp;✬</span></td><td><span class="hex">272C</span></td></tr><tr><td><span class="macro">\4D</span></td><td><span class="utf8">&nbsp;✭</span></td><td><span class="hex">272D</span></td></tr><tr><td><span class="macro">\4E</span></td><td><span class="utf8">&nbsp;✮</span></td><td><span class="hex">272E</span></td></tr><tr><td><span class="macro">\4F</span></td><td><span class="utf8">&nbsp;✯</span></td><td><span class="hex">272F</span></td></tr><tr><td><span class="macro">\50</span></td><td><span class="utf8">&nbsp;✰</span></td><td><span class="hex">2730</span></td></tr><tr><td><span class="macro">\51</span></td><td><span class="utf8">&nbsp;✱</span></td><td><span class="hex">2731</span></td></tr><tr><td><span class="macro">\52</span></td><td><span class="utf8">&nbsp;✲</span></td><td><span class="hex">2732</span></td></tr><tr><td><span class="macro">\53</span></td><td><span class="utf8">&nbsp;✳</span></td><td><span class="hex">2733</span></td></tr><tr><td><span class="macro">\54</span></td><td><span class="utf8">&nbsp;✴</span></td><td><span class="hex">2734</span></td></tr><tr><td><span class="macro">\55</span></td><td><span class="utf8">&nbsp;✵</span></td><td><span class="hex">2735</span></td></tr><tr><td><span class="macro">\56</span></td><td><span class="utf8">&nbsp;✶</span></td><td><span class="hex">2736</span></td></tr><tr><td><span class="macro">\57</span></td><td><span class="utf8">&nbsp;✷</span></td><td><span class="hex">2737</span></td></tr><tr><td><span class="macro">\58</span></td><td><span class="utf8">&nbsp;✸</span></td><td><span class="hex">2738</span></td></tr><tr><td><span class="macro">\59</span></td><td><span class="utf8">&nbsp;✹</span></td><td><span class="hex">2739</span></td></tr><tr><td><span class="macro">\5A</span></td><td><span class="utf8">&nbsp;✺</span></td><td><span class="hex">273A</span></td></tr><tr><td><span class="macro">\5B</span></td><td><span class="utf8">&nbsp;✻</span></td><td><span class="hex">273B</span></td></tr><tr><td><span class="macro">\5C</span></td><td><span class="utf8">&nbsp;✼</span></td><td><span class="hex">273C</span></td></tr><tr><td><span class="macro">\5D</span></td><td><span class="utf8">&nbsp;✽</span></td><td><span class="hex">273D</span></td></tr><tr><td><span class="macro">\5E</span></td><td><span class="utf8">&nbsp;✾</span></td><td><span class="hex">273E</span></td></tr><tr><td><span class="macro">\5F</span></td><td><span class="utf8">&nbsp;✿</span></td><td><span class="hex">273F</span></td></tr><tr><td><span class="macro">\60</span></td><td><span class="utf8">&nbsp;❀</span></td><td><span class="hex">2740</span></td></tr><tr><td><span class="macro">\61</span></td><td><span class="utf8">&nbsp;❁</span></td><td><span class="hex">2741</span></td></tr><tr><td><span class="macro">\62</span></td><td><span class="utf8">&nbsp;❂</span></td><td><span class="hex">2742</span></td></tr><tr><td><span class="macro">\63</span></td><td><span class="utf8">&nbsp;❃</span></td><td><span class="hex">2743</span></td></tr><tr><td><span class="macro">\64</span></td><td><span class="utf8">&nbsp;❄</span></td><td><span class="hex">2744</span></td></tr><tr><td><span class="macro">\65</span></td><td><span class="utf8">&nbsp;❅</span></td><td><span class="hex">2745</span></td></tr><tr><td><span class="macro">\66</span></td><td><span class="utf8">&nbsp;❆</span></td><td><span class="hex">2746</span></td></tr><tr><td><span class="macro">\67</span></td><td><span class="utf8">&nbsp;❇</span></td><td><span class="hex">2747</span></td></tr><tr><td><span class="macro">\68</span></td><td><span class="utf8">&nbsp;❈</span></td><td><span class="hex">2748</span></td></tr><tr><td><span class="macro">\69</span></td><td><span class="utf8">&nbsp;❉</span></td><td><span class="hex">2749</span></td></tr><tr><td><span class="macro">\6A</span></td><td><span class="utf8">&nbsp;❊</span></td><td><span class="hex">274A</span></td></tr><tr><td><span class="macro">\6B</span></td><td><span class="utf8">&nbsp;❋</span></td><td><span class="hex">274B</span></td></tr><tr><td><span class="macro">\6C</span></td><td><span class="utf8">&nbsp;●</span></td><td><span class="hex">25CF</span></td></tr><tr><td><span class="macro">\6D</span></td><td><span class="utf8">&nbsp;❍</span></td><td><span class="hex">274D</span></td></tr><tr><td><span class="macro">\6E</span></td><td><span class="utf8">&nbsp;■</span></td><td><span class="hex">25A0</span></td></tr><tr><td><span class="macro">\6F</span></td><td><span class="utf8">&nbsp;❏</span></td><td><span class="hex">274F</span></td></tr><tr><td><span class="macro">\70</span></td><td><span class="utf8">&nbsp;❐</span></td><td><span class="hex">2750</span></td></tr><tr><td><span class="macro">\71</span></td><td><span class="utf8">&nbsp;❑</span></td><td><span class="hex">2751</span></td></tr><tr><td><span class="macro">\72</span></td><td><span class="utf8">&nbsp;❒</span></td><td><span class="hex">2752</span></td></tr><tr><td><span class="macro">\73</span></td><td><span class="utf8">&nbsp;▲</span></td><td><span class="hex">25B2</span></td></tr><tr><td><span class="macro">\74</span></td><td><span class="utf8">&nbsp;▼</span></td><td><span class="hex">25BC</span></td></tr><tr><td><span class="macro">\75</span></td><td><span class="utf8">&nbsp;◆</span></td><td><span class="hex">25C6</span></td></tr><tr><td><span class="macro">\76</span></td><td><span class="utf8">&nbsp;❖</span></td><td><span class="hex">2756</span></td></tr><tr><td><span class="macro">\77</span></td><td><span class="utf8">&nbsp;◗</span></td><td><span class="hex">25D7</span></td></tr><tr><td><span class="macro">\78</span></td><td><span class="utf8">&nbsp;❘</span></td><td><span class="hex">2758</span></td></tr><tr><td><span class="macro">\79</span></td><td><span class="utf8">&nbsp;❙</span></td><td><span class="hex">2759</span></td></tr><tr><td><span class="macro">\7A</span></td><td><span class="utf8">&nbsp;❚</span></td><td><span class="hex">275A</span></td></tr><tr><td><span class="macro">\7B</span></td><td><span class="utf8">&nbsp;❛</span></td><td><span class="hex">275B</span></td></tr><tr><td><span class="macro">\7C</span></td><td><span class="utf8">&nbsp;❜</span></td><td><span class="hex">275C</span></td></tr><tr><td><span class="macro">\7D</span></td><td><span class="utf8">&nbsp;❝</span></td><td><span class="hex">275D</span></td></tr><tr><td><span class="macro">\7E</span></td><td><span class="utf8">&nbsp;❞</span></td><td><span class="hex">275E</span></td></tr><tr><td><span class="macro">\A1</span></td><td><span class="utf8">&nbsp;❡</span></td><td><span class="hex">2761</span></td></tr><tr><td><span class="macro">\A2</span></td><td><span class="utf8">&nbsp;❢</span></td><td><span class="hex">2762</span></td></tr><tr><td><span class="macro">\A3</span></td><td><span class="utf8">&nbsp;❣</span></td><td><span class="hex">2763</span></td></tr><tr><td><span class="macro">\A4</span></td><td><span class="utf8">&nbsp;❤</span></td><td><span class="hex">2764</span></td></tr><tr><td><span class="macro">\A5</span></td><td><span class="utf8">&nbsp;❥</span></td><td><span class="hex">2765</span></td></tr><tr><td><span class="macro">\A6</span></td><td><span class="utf8">&nbsp;❦</span></td><td><span class="hex">2766</span></td></tr><tr><td><span class="macro">\A7</span></td><td><span class="utf8">&nbsp;❧</span></td><td><span class="hex">2767</span></td></tr><tr><td><span class="macro">\A9</span></td><td><span class="utf8">&nbsp;♦</span></td><td><span class="hex">2666</span></td></tr><tr><td><span class="macro">\AA</span></td><td><span class="utf8">&nbsp;♥</span></td><td><span class="hex">2665</span></td></tr><tr><td><span class="macro">\AC</span></td><td><span class="utf8">&nbsp;①</span></td><td><span class="hex">2460</span></td></tr><tr><td><span class="macro">\AD</span></td><td><span class="utf8">&nbsp;②</span></td><td><span class="hex">2461</span></td></tr><tr><td><span class="macro">\AE</span></td><td><span class="utf8">&nbsp;③</span></td><td><span class="hex">2462</span></td></tr><tr><td><span class="macro">\AF</span></td><td><span class="utf8">&nbsp;④</span></td><td><span class="hex">2463</span></td></tr><tr><td><span class="macro">\B0</span></td><td><span class="utf8">&nbsp;⑤</span></td><td><span class="hex">2464</span></td></tr><tr><td><span class="macro">\B1</span></td><td><span class="utf8">&nbsp;⑥</span></td><td><span class="hex">2465</span></td></tr><tr><td><span class="macro">\B2</span></td><td><span class="utf8">&nbsp;⑦</span></td><td><span class="hex">2466</span></td></tr><tr><td><span class="macro">\B3</span></td><td><span class="utf8">&nbsp;⑧</span></td><td><span class="hex">2467</span></td></tr><tr><td><span class="macro">\B4</span></td><td><span class="utf8">&nbsp;⑨</span></td><td><span class="hex">2468</span></td></tr><tr><td><span class="macro">\B5</span></td><td><span class="utf8">&nbsp;⑩</span></td><td><span class="hex">2469</span></td></tr><tr><td><span class="macro">\B6</span></td><td><span class="utf8">&nbsp;❶</span></td><td><span class="hex">2776</span></td></tr><tr><td><span class="macro">\B7</span></td><td><span class="utf8">&nbsp;❷</span></td><td><span class="hex">2777</span></td></tr><tr><td><span class="macro">\B8</span></td><td><span class="utf8">&nbsp;❸</span></td><td><span class="hex">2778</span></td></tr><tr><td><span class="macro">\B9</span></td><td><span class="utf8">&nbsp;❹</span></td><td><span class="hex">2779</span></td></tr><tr><td><span class="macro">\BA</span></td><td><span class="utf8">&nbsp;❺</span></td><td><span class="hex">277A</span></td></tr><tr><td><span class="macro">\BB</span></td><td><span class="utf8">&nbsp;❻</span></td><td><span class="hex">277B</span></td></tr><tr><td><span class="macro">\BC</span></td><td><span class="utf8">&nbsp;❼</span></td><td><span class="hex">277C</span></td></tr><tr><td><span class="macro">\BD</span></td><td><span class="utf8">&nbsp;❽</span></td><td><span class="hex">277D</span></td></tr><tr><td><span class="macro">\BE</span></td><td><span class="utf8">&nbsp;❾</span></td><td><span class="hex">277E</span></td></tr><tr><td><span class="macro">\BF</span></td><td><span class="utf8">&nbsp;❿</span></td><td><span class="hex">277F</span></td></tr><tr><td><span class="macro">\C0</span></td><td><span class="utf8">&nbsp;➀</span></td><td><span class="hex">2780</span></td></tr><tr><td><span class="macro">\C1</span></td><td><span class="utf8">&nbsp;➁</span></td><td><span class="hex">2781</span></td></tr><tr><td><span class="macro">\C2</span></td><td><span class="utf8">&nbsp;➂</span></td><td><span class="hex">2782</span></td></tr><tr><td><span class="macro">\C3</span></td><td><span class="utf8">&nbsp;➃</span></td><td><span class="hex">2783</span></td></tr><tr><td><span class="macro">\C4</span></td><td><span class="utf8">&nbsp;➄</span></td><td><span class="hex">2784</span></td></tr><tr><td><span class="macro">\C5</span></td><td><span class="utf8">&nbsp;➅</span></td><td><span class="hex">2785</span></td></tr><tr><td><span class="macro">\C6</span></td><td><span class="utf8">&nbsp;➆</span></td><td><span class="hex">2786</span></td></tr><tr><td><span class="macro">\C7</span></td><td><span class="utf8">&nbsp;➇</span></td><td><span class="hex">2787</span></td></tr><tr><td><span class="macro">\C8</span></td><td><span class="utf8">&nbsp;➈</span></td><td><span class="hex">2788</span></td></tr><tr><td><span class="macro">\C9</span></td><td><span class="utf8">&nbsp;➉</span></td><td><span class="hex">2789</span></td></tr><tr><td><span class="macro">\CA</span></td><td><span class="utf8">&nbsp;➊</span></td><td><span class="hex">278A</span></td></tr><tr><td><span class="macro">\CB</span></td><td><span class="utf8">&nbsp;➋</span></td><td><span class="hex">278B</span></td></tr><tr><td><span class="macro">\CC</span></td><td><span class="utf8">&nbsp;➌</span></td><td><span class="hex">278C</span></td></tr><tr><td><span class="macro">\CD</span></td><td><span class="utf8">&nbsp;➍</span></td><td><span class="hex">278D</span></td></tr><tr><td><span class="macro">\CE</span></td><td><span class="utf8">&nbsp;➎</span></td><td><span class="hex">278E</span></td></tr><tr><td><span class="macro">\CF</span></td><td><span class="utf8">&nbsp;➏</span></td><td><span class="hex">278F</span></td></tr><tr><td><span class="macro">\D0</span></td><td><span class="utf8">&nbsp;➐</span></td><td><span class="hex">2790</span></td></tr><tr><td><span class="macro">\D1</span></td><td><span class="utf8">&nbsp;➑</span></td><td><span class="hex">2791</span></td></tr><tr><td><span class="macro">\D2</span></td><td><span class="utf8">&nbsp;➒</span></td><td><span class="hex">2792</span></td></tr><tr><td><span class="macro">\D3</span></td><td><span class="utf8">&nbsp;➓</span></td><td><span class="hex">2793</span></td></tr><tr><td><span class="macro">\D4</span></td><td><span class="utf8">&nbsp;➔</span></td><td><span class="hex">2794</span></td></tr><tr><td><span class="macro">\D6</span></td><td><span class="utf8">&nbsp;↔</span></td><td><span class="hex">2194</span></td></tr><tr><td><span class="macro">\D7</span></td><td><span class="utf8">&nbsp;↕</span></td><td><span class="hex">2195</span></td></tr><tr><td><span class="macro">\D8</span></td><td><span class="utf8">&nbsp;➘</span></td><td><span class="hex">2798</span></td></tr><tr><td><span class="macro">\D9</span></td><td><span class="utf8">&nbsp;➙</span></td><td><span class="hex">2799</span></td></tr><tr><td><span class="macro">\DA</span></td><td><span class="utf8">&nbsp;➚</span></td><td><span class="hex">279A</span></td></tr><tr><td><span class="macro">\DB</span></td><td><span class="utf8">&nbsp;➛</span></td><td><span class="hex">279B</span></td></tr><tr><td><span class="macro">\DC</span></td><td><span class="utf8">&nbsp;➜</span></td><td><span class="hex">279C</span></td></tr><tr><td><span class="macro">\DD</span></td><td><span class="utf8">&nbsp;➝</span></td><td><span class="hex">279D</span></td></tr><tr><td><span class="macro">\DE</span></td><td><span class="utf8">&nbsp;➞</span></td><td><span class="hex">279E</span></td></tr><tr><td><span class="macro">\DF</span></td><td><span class="utf8">&nbsp;➟</span></td><td><span class="hex">279F</span></td></tr><tr><td><span class="macro">\E0</span></td><td><span class="utf8">&nbsp;➠</span></td><td><span class="hex">27A0</span></td></tr><tr><td><span class="macro">\E1</span></td><td><span class="utf8">&nbsp;➡</span></td><td><span class="hex">27A1</span></td></tr><tr><td><span class="macro">\E2</span></td><td><span class="utf8">&nbsp;➢</span></td><td><span class="hex">27A2</span></td></tr><tr><td><span class="macro">\E3</span></td><td><span class="utf8">&nbsp;➣</span></td><td><span class="hex">27A3</span></td></tr><tr><td><span class="macro">\E4</span></td><td><span class="utf8">&nbsp;➤</span></td><td><span class="hex">27A4</span></td></tr><tr><td><span class="macro">\E5</span></td><td><span class="utf8">&nbsp;➥</span></td><td><span class="hex">27A5</span></td></tr><tr><td><span class="macro">\E6</span></td><td><span class="utf8">&nbsp;➦</span></td><td><span class="hex">27A6</span></td></tr><tr><td><span class="macro">\E7</span></td><td><span class="utf8">&nbsp;➧</span></td><td><span class="hex">27A7</span></td></tr><tr><td><span class="macro">\E8</span></td><td><span class="utf8">&nbsp;➨</span></td><td><span class="hex">27A8</span></td></tr><tr><td><span class="macro">\E9</span></td><td><span class="utf8">&nbsp;➩</span></td><td><span class="hex">27A9</span></td></tr><tr><td><span class="macro">\EA</span></td><td><span class="utf8">&nbsp;➪</span></td><td><span class="hex">27AA</span></td></tr><tr><td><span class="macro">\EB</span></td><td><span class="utf8">&nbsp;➫</span></td><td><span class="hex">27AB</span></td></tr><tr><td><span class="macro">\EC</span></td><td><span class="utf8">&nbsp;➬</span></td><td><span class="hex">27AC</span></td></tr><tr><td><span class="macro">\ED</span></td><td><span class="utf8">&nbsp;➭</span></td><td><span class="hex">27AD</span></td></tr><tr><td><span class="macro">\EE</span></td><td><span class="utf8">&nbsp;➮</span></td><td><span class="hex">27AE</span></td></tr><tr><td><span class="macro">\EF</span></td><td><span class="utf8">&nbsp;➯</span></td><td><span class="hex">27AF</span></td></tr><tr><td><span class="macro">\F1</span></td><td><span class="utf8">&nbsp;➱</span></td><td><span class="hex">27B1</span></td></tr><tr><td><span class="macro">\F2</span></td><td><span class="utf8">&nbsp;➲</span></td><td><span class="hex">27B2</span></td></tr><tr><td><span class="macro">\F3</span></td><td><span class="utf8">&nbsp;➳</span></td><td><span class="hex">27B3</span></td></tr><tr><td><span class="macro">\F4</span></td><td><span class="utf8">&nbsp;➴</span></td><td><span class="hex">27B4</span></td></tr><tr><td><span class="macro">\F5</span></td><td><span class="utf8">&nbsp;➵</span></td><td><span class="hex">27B5</span></td></tr><tr><td><span class="macro">\F6</span></td><td><span class="utf8">&nbsp;➶</span></td><td><span class="hex">27B6</span></td></tr><tr><td><span class="macro">\F7</span></td><td><span class="utf8">&nbsp;➷</span></td><td><span class="hex">27B7</span></td></tr><tr><td><span class="macro">\F8</span></td><td><span class="utf8">&nbsp;➸</span></td><td><span class="hex">27B8</span></td></tr><tr><td><span class="macro">\F9</span></td><td><span class="utf8">&nbsp;➹</span></td><td><span class="hex">27B9</span></td></tr><tr><td><span class="macro">\FA</span></td><td><span class="utf8">&nbsp;➺</span></td><td><span class="hex">27BA</span></td></tr><tr><td><span class="macro">\FB</span></td><td><span class="utf8">&nbsp;➻</span></td><td><span class="hex">27BB</span></td></tr><tr><td><span class="macro">\FC</span></td><td><span class="utf8">&nbsp;➼</span></td><td><span class="hex">27BC</span></td></tr><tr><td><span class="macro">\FD</span></td><td><span class="utf8">&nbsp;➽</span></td><td><span class="hex">27BD</span></td></tr><tr><td><span class="macro">\FE</span></td><td><span class="utf8">&nbsp;➾</span></td><td><span class="hex">27BE</span></td></tr></tbody></table><hr></hr><h3>greek (sets: full)</h3><table><thead><tr><td>Macro</td><td>Unicode character</td><td>Unicode hex value</td></tr></thead><tbody><tr><td><span class="macro">\alpha</span></td><td><span class="utf8">&nbsp;α</span></td><td><span class="hex">3B1</span></td></tr><tr><td><span class="macro">\beta</span></td><td><span class="utf8">&nbsp;β</span></td><td><span class="hex">3B2</span></td></tr><tr><td><span class="macro">\gamma</span></td><td><span class="utf8">&nbsp;γ</span></td><td><span class="hex">3B3</span></td></tr><tr><td><span class="macro">\delta</span></td><td><span class="utf8">&nbsp;δ</span></td><td><span class="hex">3B4</span></td></tr><tr><td><span class="macro">\varepsilon</span></td><td><span class="utf8">&nbsp;ε</span></td><td><span class="hex">3B5</span></td></tr><tr><td><span class="macro">\zeta</span></td><td><span class="utf8">&nbsp;ζ</span></td><td><span class="hex">3B6</span></td></tr><tr><td><span class="macro">\eta</span></td><td><span class="utf8">&nbsp;η</span></td><td><span class="hex">3B7</span></td></tr><tr><td><span class="macro">\vartheta</span></td><td><span class="utf8">&nbsp;θ</span></td><td><span class="hex">3B8</span></td></tr><tr><td><span class="macro">\iota</span></td><td><span class="utf8">&nbsp;ι</span></td><td><span class="hex">3B9</span></td></tr><tr><td><span class="macro">\kappa</span></td><td><span class="utf8">&nbsp;κ</span></td><td><span class="hex">3BA</span></td></tr><tr><td><span class="macro">\lambda</span></td><td><span class="utf8">&nbsp;λ</span></td><td><span class="hex">3BB</span></td></tr><tr><td><span class="macro">\mu</span></td><td><span class="utf8">&nbsp;μ</span></td><td><span class="hex">3BC</span></td></tr><tr><td><span class="macro">\nu</span></td><td><span class="utf8">&nbsp;ν</span></td><td><span class="hex">3BD</span></td></tr><tr><td><span class="macro">\xi</span></td><td><span class="utf8">&nbsp;ξ</span></td><td><span class="hex">3BE</span></td></tr><tr><td><span class="macro">\omicron</span></td><td><span class="utf8">&nbsp;ο</span></td><td><span class="hex">3BF</span></td></tr><tr><td><span class="macro">\pi</span></td><td><span class="utf8">&nbsp;π</span></td><td><span class="hex">3C0</span></td></tr><tr><td><span class="macro">\varrho</span></td><td><span class="utf8">&nbsp;ρ</span></td><td><span class="hex">3C1</span></td></tr><tr><td><span class="macro">\varsigma</span></td><td><span class="utf8">&nbsp;ς</span></td><td><span class="hex">3C2</span></td></tr><tr><td><span class="macro">\sigma</span></td><td><span class="utf8">&nbsp;σ</span></td><td><span class="hex">3C3</span></td></tr><tr><td><span class="macro">\tau</span></td><td><span class="utf8">&nbsp;τ</span></td><td><span class="hex">3C4</span></td></tr><tr><td><span class="macro">\upsilon</span></td><td><span class="utf8">&nbsp;υ</span></td><td><span class="hex">3C5</span></td></tr><tr><td><span class="macro">\varphi</span></td><td><span class="utf8">&nbsp;φ</span></td><td><span class="hex">3C6</span></td></tr><tr><td><span class="macro">\chi</span></td><td><span class="utf8">&nbsp;χ</span></td><td><span class="hex">3C7</span></td></tr><tr><td><span class="macro">\psi</span></td><td><span class="utf8">&nbsp;ψ</span></td><td><span class="hex">3C8</span></td></tr><tr><td><span class="macro">\omega</span></td><td><span class="utf8">&nbsp;ω</span></td><td><span class="hex">3C9</span></td></tr><tr><td><span class="macro">\Alpha</span></td><td><span class="utf8">&nbsp;Α</span></td><td><span class="hex">391</span></td></tr><tr><td><span class="macro">\Beta</span></td><td><span class="utf8">&nbsp;Β</span></td><td><span class="hex">392</span></td></tr><tr><td><span class="macro">\Gamma</span></td><td><span class="utf8">&nbsp;Γ</span></td><td><span class="hex">393</span></td></tr><tr><td><span class="macro">\Delta</span></td><td><span class="utf8">&nbsp;Δ</span></td><td><span class="hex">394</span></td></tr><tr><td><span class="macro">\Epsilon</span></td><td><span class="utf8">&nbsp;Ε</span></td><td><span class="hex">395</span></td></tr><tr><td><span class="macro">\Zeta</span></td><td><span class="utf8">&nbsp;Ζ</span></td><td><span class="hex">396</span></td></tr><tr><td><span class="macro">\Eta</span></td><td><span class="utf8">&nbsp;Η</span></td><td><span class="hex">397</span></td></tr><tr><td><span class="macro">\Theta</span></td><td><span class="utf8">&nbsp;Θ</span></td><td><span class="hex">398</span></td></tr><tr><td><span class="macro">\Iota</span></td><td><span class="utf8">&nbsp;Ι</span></td><td><span class="hex">399</span></td></tr><tr><td><span class="macro">\Kappa</span></td><td><span class="utf8">&nbsp;Κ</span></td><td><span class="hex">39A</span></td></tr><tr><td><span class="macro">\Lambda</span></td><td><span class="utf8">&nbsp;Λ</span></td><td><span class="hex">39B</span></td></tr><tr><td><span class="macro">\Mu</span></td><td><span class="utf8">&nbsp;Μ</span></td><td><span class="hex">39C</span></td></tr><tr><td><span class="macro">\Nu</span></td><td><span class="utf8">&nbsp;Ν</span></td><td><span class="hex">39D</span></td></tr><tr><td><span class="macro">\Xi</span></td><td><span class="utf8">&nbsp;Ξ</span></td><td><span class="hex">39E</span></td></tr><tr><td><span class="macro">\Omicron</span></td><td><span class="utf8">&nbsp;Ο</span></td><td><span class="hex">39F</span></td></tr><tr><td><span class="macro">\Pi</span></td><td><span class="utf8">&nbsp;Π</span></td><td><span class="hex">3A0</span></td></tr><tr><td><span class="macro">\Rho</span></td><td><span class="utf8">&nbsp;Ρ</span></td><td><span class="hex">3A1</span></td></tr><tr><td><span class="macro">\Sigma</span></td><td><span class="utf8">&nbsp;Σ</span></td><td><span class="hex">3A3</span></td></tr><tr><td><span class="macro">\Tau</span></td><td><span class="utf8">&nbsp;Τ</span></td><td><span class="hex">3A4</span></td></tr><tr><td><span class="macro">\Upsilon</span></td><td><span class="utf8">&nbsp;Υ</span></td><td><span class="hex">3A5</span></td></tr><tr><td><span class="macro">\Phi</span></td><td><span class="utf8">&nbsp;Φ</span></td><td><span class="hex">3A6</span></td></tr><tr><td><span class="macro">\Chi</span></td><td><span class="utf8">&nbsp;Χ</span></td><td><span class="hex">3A7</span></td></tr><tr><td><span class="macro">\Psi</span></td><td><span class="utf8">&nbsp;Ψ</span></td><td><span class="hex">3A8</span></td></tr><tr><td><span class="macro">\Omega</span></td><td><span class="utf8">&nbsp;Ω</span></td><td><span class="hex">3A9</span></td></tr></tbody></table><hr></hr></body></html>
diff --git a/biblio/biber-ms/biber-ms-linux/README b/biblio/biber-ms/biber-ms-linux/README
new file mode 100644
index 0000000000..8bc6f94c7d
--- /dev/null
+++ b/biblio/biber-ms/biber-ms-linux/README
@@ -0,0 +1,4 @@
+These are biber (multiscript version) binaries for the linux platform(s), released under:
+Perl Artistic License, version 2
+
+See https://ctan.org/pkg/biber for documentation, sources, and all else.
diff --git a/biblio/biber-ms/biber-ms-macos/README b/biblio/biber-ms/biber-ms-macos/README
new file mode 100644
index 0000000000..3334afb529
--- /dev/null
+++ b/biblio/biber-ms/biber-ms-macos/README
@@ -0,0 +1,4 @@
+These are biber (multiscript version) binaries for the macos platform(s), released under:
+Perl Artistic License, version 2
+
+See https://ctan.org/pkg/biber for documentation, sources, and all else.
diff --git a/biblio/biber-ms/biber-ms-windows/README b/biblio/biber-ms/biber-ms-windows/README
new file mode 100644
index 0000000000..9a3a95b2e2
--- /dev/null
+++ b/biblio/biber-ms/biber-ms-windows/README
@@ -0,0 +1,4 @@
+These are biber (multiscript version) binaries for the windows platform(s), released under:
+Perl Artistic License, version 2
+
+See https://ctan.org/pkg/biber for documentation, sources, and all else.
diff --git a/graphics/pstricks/contrib/pst-barcode/Changes b/graphics/pstricks/contrib/pst-barcode/Changes
index 2582a40fc2..29e44574e8 100644
--- a/graphics/pstricks/contrib/pst-barcode/Changes
+++ b/graphics/pstricks/contrib/pst-barcode/Changes
@@ -1,4 +1,72 @@
----- pst-barcode.tex
+0.19 2022-08-23 - The parse option was extended to perform replacement
+ of control character names such as ^NUL and ^RS with their ASCII value.
+ - The horizontal alignment of text in matrix symbols was fixed.
+ - Various fixes were made for the encoding of Data Matrix, DotCode and Micro QR Code symbols.
+ - The encoding of QR Code symbols was optimised.
+ - The encoding of Rectangular Micro QR Code symbols was aligned with the final release of the specification.
+ - The linear render now uses filled polygons rather than stroked lines.
+ - Code 93 Extended was amended to not shift encode "$%+/" symbols.
+ - Support was added for USPS FIM E marks.
+ - Support for AI (715) was added to the GS1 linter.
+ - Ultracode tile colours are now defined as RGB rather than CMYK. New tile colour patterns are defined for the upcoming revision.
+ - A bug in the encoding of certain Aztec Code symbols was fixed.
+ - A bug in the encoding of certain Dotcode symbols was fixed.
+ - A bug in the encoding of QR Code symbols containing Kanji compression was fixed.
+ - The rMQR encoding was optimised, potentially resulting in smaller symbols.
+ - The colours for Ultracode symbols were changed to RGB values rather than CMYK.
+ - The metrics for Ultracode symbols was updated and a raw mode was added.
+ - Linting of GS1 AI (4308) was fixed.
+ - Linting of the check character pair for AI (8013) was added.
+ - Linting for GS1 coupon AIs (8110) and (8112) was added.
+ - Linting for GS1 AI syntax data was expanded and fixed.
+ - A convenience encoder for GS1 DotCode was added.
+ - GS1 Composite Component symbols were fixed.
+ - Linting was added to GS1 Composite Components.
+ - Linting for GS1 AI syntax data was added.
+ - A bug in the compact encoding methods 0110X for GS1 DataBar Expanded formats was fixed.
+ - The parse and parsefnc options are now processed by a single routine that allows their escape patterns to coexist in the input data.
+ - Bugs in ECI processing with PDF417 and MicroPDF417 were fixed.
+ - A bug in the seperator pattern for GS1 DataBar Expanded Stacked Composite was fixed.
+ - A bug in leaving punctuation mode in Aztec Code was fixed.
+ - An inefficiency in the QR Code encoding was fixed.
+ - ECI support was added to Code One.
+ - A bug in Data Matrix for ECI checks at end of data was fixed.
+ - ECI support was added to Data Matrix, Aztec Code, QR Code, PDF417, MicroPDF417, Maxicode and DotCode.
+ - GS1 DataBar Limited was updated to include a righthand whitespace guard.
+ - Code 32 was fixed to avoid overwriting the provided barcode string.
+ - A new encoder for Swiss QR Code was added.
+ - The Codablock F encoding was optimised potentially resulting in smaller symbols.
+ - The GS1 DataBar Stacked, GS1 DataBar Stacked Omnidirectional and GS1 DataBar Expanded Stacked separator patterns were fixed.
+ - A bug in GS1-128 that sometimes prevented encoding with a Composite Component was fixed.
+ - Bugs in GS1 Composite Component encoding were fixed.
+ - The GS1 QR Code encoder was fixed.
+ - Changes were required to the package build script due to new defaults in recent versions of GhostScript.
+ - Preliminary support for the Rectangular Micro QR Code symbology was added.
+ - The encoders were amended to workaround a non-standard operator on Harlequin RIPs.
+ - A distict encoder was added for Data Matrix Rectangular Extension.
+ - The Data Matrix encoder was enhanced to include the ISO formats for DMRE.
+ - A crash with a certain encoding of data in GS1 Databar Expanded based symbologies was fixed.
+ - A bug in the Code 128 encoder when composite component linkage flags were used with data terminating in mode C was fixed.
+ - An encoder for the Royal Mail Mailmark symbology was added.
+ - The performance of the renmatrix renderer was slightly optimised.
+ - The performance of the renmatrix renderer was significantly improved.
+ - A recent regression in the Data Matrix encoder was fixed.
+ - The Data Matrix encoder was fixed to avoid certain cases where switching between C40, Text and X12 encoding might latch repeatedly.
+ - Preliminary support for the JAB Code symbology was added.
+ - The raw option was added to the Data Matrix encoder.
+ - The base size of Ultracode symbols was increased.
+ - Support for symbols composed of dots was added to the renmatrix renderer.
+ - The DotCode encoder was amended to use the dotty matrix feature.
+ - A bug in the DotCode encoder's handling of FNC3 message separator characters was fixed.
+ - The DotCode encoder was fixed to support optimised handling of "FNC1 in First" for leading numeric input.
+ - The performance of the Channel Code encoder was improved.
+ - The base symbol size of the DotCode encoder was increased.
+ - The DotCode encoder was enhanced to fix weaknesses with the mask evaluation algorithm.
+ - The Channel Code encoder checksum calculation for channels 4 and 7 was fixed.
+ - Fixed end of data region encoding error with EDIFACT encoding in Data Matrix.
+ - Preliminary support for the Ultracode symbology was added.
+ - The renmatrix renderer was improved to support colour symbols.
0.18 2017-08-22 - changed fonts to URW nimbus
- fix bug in pst-barcode.pro
0.17 2017-08-05 - new font file to embed the Type 1 fonts
@@ -35,6 +103,18 @@
----- pst-barcode.pro
+2022-08-21 - bug fixes and optimisations for QR Code, Micro QR Code, Data
+ Matrix, DotCode, Aztec Code, GS1 Composite Components, GS1
+ DataBar, Code 32, Codablock F, GS1-128, Channel Code and Code 93.
+ - new barcodes for Swiss QR Code, Rectangular Micro QR Code, Data
+ Matrix Rectanguar Extension, Royal Mail Mailmark and FIM E marks,
+ GS1 Digital Link QR Code, GS1 Digital Link Data Matrix.
+ - validation of GS1 AI syntax data and GS1 Digital Link URIs.
+ - ECI support for all supported symbologies.
+ - parsing of named escape sequences for ASCII control characters,
+ e.g. ^NUL and ^RS.
+ - linear render uses filled polygons rather than stroked lines.
+ - matrix render performance improvements.
2017-08-22 - fix bug with Times
2017-04-12 - some new barcodes
2016-04-21 - some new barcodes
diff --git a/graphics/pstricks/contrib/pst-barcode/doc/images/barcode.jpg b/graphics/pstricks/contrib/pst-barcode/doc/images/barcode.jpg
new file mode 100644
index 0000000000..bce5444f64
--- /dev/null
+++ b/graphics/pstricks/contrib/pst-barcode/doc/images/barcode.jpg
Binary files differ
diff --git a/graphics/pstricks/contrib/pst-barcode/doc/images/datamatrix-4.eps b/graphics/pstricks/contrib/pst-barcode/doc/images/datamatrix-4.eps
new file mode 100644
index 0000000000..27c381c7e7
--- /dev/null
+++ b/graphics/pstricks/contrib/pst-barcode/doc/images/datamatrix-4.eps
@@ -0,0 +1,389 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%BoundingBox: 0 0 162 18
+%%Creator: Online Barcode Generator 2019-10-29. https://the-burtons.xyz/barcode-generator/
+%%CreationDate: 2019-10-31 15:36:08
+%%Pages: 1
+%%LanguageLevel: 2
+%%DocumentData: Clean7Bit
+%%EndComments
+%%BeginProlog
+%%BeginResource: Category uk.co.terryburton.bwipp 0.0 2019102900 30005 33214
+%%BeginData: 7 ASCII Lines
+currentfile /ASCII85Decode filter cvx exec
+P1OerF_-`n01TSk ATDK p010/ iAS5q %H '6m E30Ia ,!KmJH
+23Ji?3%mj@F*(i. @qA VbE+L \DATV m" @r# drB 9KiQ
+P'&Es@:O(aA79M! @<ls? E+ OHE04 AmA@ <l s?E +OH\< K_S [F_`U >D_?
+-CEcQG7F`MSBDD# CBBlJ $S4 tf9 3FCf *' Ed8 d<AS,X oA TD@'Df p)1
+AWh2!hZ~>
+% Category/uk.co.terryburton.bwipp 0.0 2019102900
+%%EndData
+%%EndResource
+%%BeginResource: uk.co.terryburton.bwipp raiseerror 0.0 2019102900 39086 38828
+%%BeginData: 9 ASCII Lines
+currentfile /ASCII85Decode filter cvx exec
+06:]HE+*6lBl7RH \pKT _@s)g 4ASuU /@ :O( eDJ() 6Eckq9
+F(KH4@:O(eDJ+B\ </: R<23J D%Ea` [' AS# n&D fU1I
+,\;":DfV")04f0E DfTQ0 Ao EhrP' A6`E cQ )=P !1O1E cQ) =DIIB nP!5
+ %R,\;":DfRL@Df '?"DI eoM P'A 6`Ec Q) =05 b?FATD g0 EZfIEF _-_
+\P+mAf%[&V$Ea`[ 'AS#n &Df V"# P %64 gCG '+8 /p(ZFE d; ,:Ecc5 ;/n
+0$=E,Zq1AS,XoAT D@'Df p)1 AWh 2! 3A 5Gb FDt YuCM@ [! P.H"' F`V
+,9E+*6lBl7R3P#M ~>
+% uk.co.terryburton.bwipp/raiseerror 0.0 2019102900
+%%EndData
+%%EndResource
+%%BeginResource: uk.co.terryburton.bwipp renmatrix 0.0 2019102900 90599 89917
+%%BeginData: 80 ASCII Lines
+currentfile /ASCII85Decode filter cvx exec
+06:]HE+*6lBl7RH \pKT _@s)g 4ASuU /@ :O( eDJ() 6Eckq9
+F(KH4@:O(eDJ+B\ </: R<23K pPEa` [' AS# n&D fV"#
+06M%_@rEuAATDg: @Wc^5 Df .1:GA 2#8P 1l (DO ps'bA Su? nFE2) ?H\`
+B!23JD%@<-"%P!5 $b06_ ,@F D-I 2Ou" b) ASG djFGKs \1 G<3GEa s$(
+DfUjAF`)83FHSF5 @UWb^ B6% p5D I d6q Ci= ?S" a+^(AT X( k04Sp: DfT
+]'E/k*EDKBB2Ou" b%Dfg )H+ D,% uF (L Lj0 55< >F)Z/ 2@ :Y/oO u"b
+*DJO<4Eb/ZiBSZY O1G< H[ CN FH 8AR T+m L]E So05
+5<6Cis9"FCf]=+D ,%uF ( LL j0 6DG \+B osoO u"b5A
+U&<,Des?4NWjQCF (KHV1G <i] G ]\1 =C h[O" NWj QCF(KHV1G< i]G]\4>Ch[O
+"NWjQCF(KHV1G<i ]G][P9 DKL m D6Z7 *fBk ;=J 1G<i]G]\"@ H=_m>Ou"b5A
+U&<ADe<U&ATW_.O u"b5AU &<B De<U &ATW _.O u"b5AU&<0@ ;p:D!0T,k@;
+L%-AU&<W!0T-HEb BH?Ou %NL8 T/Qi H]g1 5P" @<NBk2=!+E qO1FD-gjOu"
+b)ASGdjF<G7.BkM +$OtV tS04J @1@rH 1%E Zeh"Eas$(D fV!mOu"b#@:
+O(cEc6)<A7KOoDf Qt0@:O( cEc6)< A7KOo DfV !mOu"b*DJO <4Eb/Zi+DG_
+/F)Z/2@:YNSOu"b*DJO<4Eb/ZiBHV#,CNFH8ART+_OtVtS055<>F)Z/2@:XO(Bl7^-E,oMuA9O
++hOu"b5AU&<,Des?4+EV1>FCT6*DfV!mOu"b5AU&<A@;KXjDBO%4G]\1=Ch[O"OtDhQ06CcMFE
+q;2BkM<+FCf]=H!tN'B5WkaOu"b5AU&</Df0Y>FCf]=AoDR/OtDhQ06CcMFE;/BAKZ)+G]\"@H
+=`6mOu"b5AU&<ADe<U&ATT&:AU&<ADe<U&ATX(gOu"b5AU&<BDe<U&ATT&:AU&<BDe<U&ATX(g
+Ou"b5AU&<0@;p91FCf]=B45b#OtVtS04A[=FCf]=+CT).FCf]=OtDhQBl7^-E,oMuA;C5KD0mp
+MDJO<4Eb/ZiBHV#,CNFH8ART,41OYEcBl7^-E,oMuA;C5KD0mpMDJO<4Eb/ZiFs(L:CNFH8ART
+,41OYEc06hbTATW8AE+sQAP&-9^E+sQ<P!5%%I?G)'1G<6NATW8AE+sQAP&-9^@prk\AWf6?99
+KF+Oq*X204SsDFF001L]ilUL]ET$H\_c[!Kr4WBm=lcCm"g/@:Nt^P!4['Or9EUL]iP6P)#3@P
+'DD%P')q1P')29<IL#?Ou"b"@UiqqL]im;L]CY8"c3/@LN$sPG`lm+!KoE]Bm=]^5)99'9TfI?
+Fbg-Us,r.VBm=]^5&b4\G`i)`!g66?!g7\3H\_ce)2Ku0!Kq\jFbg']!I^,&P')29%[&V$EbT0
+"FF,-@Bl]"1P&5Pj+F,)?BlY>+E-67F>9J/5Gp$C@P#O)Z+F&\COo^_%04\d;L]NYpI?G)'1G<
+9WGA_aMA8-(?!g7DIGT_8SA8-',@rQR4+Bot5+F,)8I?IP_Gp%Bg!KmJH1G<9QEejd[1OYDrOu
+"b-AS-%2+Co2,L]ilXH[$ZY+Co2,+CfA5F<Fd1GT_8S?%%l806eUaL]N[<Ou"b%Bl]"4Ou%NL%
+[&V$F`;[MA8-(?#a0%OGT_8SA8-',@rQR4+Bot5+F,)8I?IP_Gp%Bg!KsFF1G<9QEek!a1OYDr
+Ou"b5Ea`HhHS9Z-5*@]TG`k7R1G<9QEZfU_!KmJ/L]NY>G^3q5FGKs\4aVtjI=$bQI?ITn1G<f
+o+F'&*06;C]H'0s:F(B!*+Co2,Ou$r`Ebg"EGT_8S@:E_WL]Mjc30H7]">DM`0p4\_5*@mc">D
+Ma0p4\_5)ob#0JP;F4d'iKEdNslEbT0"FHSn;P#RT(OuSI)0JG48P!+slOuSI)0eb=9P!+slNW
+_'k0eebRP&c_+H]iM^Dg-)^5^eepOuSUaNW_'j0JJYQP!5$gNW_'k0JJYQP!4m/0ek@:P!+tKP
+&bo4F_kW$FHSn;P#RT(OuSI)0JP78P!+slOuSI)0JP79P!+slNW_$j0enhSP&c_+H]iMoE0<J7
+P#RT(NW_'j0JS_RHXpi2L]W`&H]iMfAS-%I5^e!BF`M2/BQTD&I?ITYHXpi2L]NZ%H]iM^Dg-)
+^5^e!BF`hYd5^eeqI?ITYP(S!%F*Nj2Gp%0RP!+s2A8-',F(B!*P!+s2H]gXBP#QjmAWe!q$'G
+[Z5*C&:Oq*X206:]H@;^@#Des?4HS8fFH"1c/DfV")Ou$NaH"1c/DfV"ML^'#*H]A@o+<VdL+<
+Wk(#a2$I)3Qt8!F]kk@rH1%Eft^216OkKL&h7:2LU`[P+@#a<+0Zi@rH1%Efsmf#a.>tNX@lk+
+<VdL+<VdjL^K<AOr9EBL]Lq%H"1c/DfV"dOtr1bH\MP#Ou@`O8Wo9cP#Qjm%[&V$A9)+&CghU#
+EdKHYBm=];EbT//E+sQ<Ou"b1Bm=]^5*@]TE+sQ<+Bot-Bm=lY!g3S2L]DjdK89MHBm=kFE+sQ
+<P%'4JP,Wea!0TNbBm=]^5&b4\G`ka`!g7\^!.C#$E+sQAL]W_?H\_ZMP(R&'1G<]]G^(?MBm=
+lY!g3SI1G<]]G^1ENBm=oZ!g3SI1G<6H@q]Er>9Im!G]T$WH\_ZMP(R&'1G<]UFD,_<>DN98!H
+;atH&)NbWI$:5P!5$bL]E53E+sQAL]Wa=HS9)r5*@]TCER=6C*6qo@q:`YCQ8NO0JG5E4_p&\0
+eb:9P!+tKH\_rA+DN$/B4Z1@!0TKlBcq.5FE1f"AUT_@I?IQFNW_'k0eebRH\_f=+DN$/B4Z1@
+!0TKlBcq.5FE1f"AUT_@I?IQXP":"a86qB705tWMGT^s>G^,#GP,XU#05tWMGp%'?G^5)HP,XU
+#P&G;JFD,`B06!(<Ou"b-ASrW0P%'S1E$/t.DMS=VWKKo;!g7\FL]ET2OogehL]E53Ch7L?!Ks
+F/056S5Ou%&"BnueQ!Gl=bP%p.QOogehL^&\7P)"hsP#uF9CNFH8ART+_L]ilCL]iP6P)#34H]
+eDXH]k@VP#[;@L]NZoL]ilCBl7^-E,oMuA9Nb3P$!MCM#WWnP#-Lg!I]<XWI9q0L]iP6P)#2aE
++sQBP!5&.BnubP4aW?-I=%,eI?ITYP":`OP')q1P')q1I?I0b68*:lG]P!HBm=];EbT0L1OYDr
+Ou"b%Eaa0.@<lF)A8cR2HS9>PG]ReDBkJQ-Bm=]^1G<]]G]T$3Ou&8>L]E53E+sQ<P%'4JP,We
+k3,iSVG`lepG`k7R1N7&QG`krXH'1@S1O($f+F&0EATW_/P!+/:ME_(@!0RA%Bm=nGH'5.a56(
+Z`P,XU[G`"]c!!&/_E+sQB+F0-LME_(@!0X==56(Z`Bl7^-E,oMuA<NpJ!/:MfOp-8s<.0p#P!
+Ug@Bm=\AE+sQ<DfTQ)Ou%NL%[&W2:+p=!CNFH8ART*lBl7^-E,oMuA;C;M2NfjLBl7^-E,oMuA
+8!*"DJO<4Eb/ZiBSZ_Q2NfjLBl7^-E,oMuA9K)0DJO<4Eb/ZiG)-3_2NfkZ.$C]VBk2=!+E2%>
+G`jt@8<Re&ASGdjF<GO:G^5H1Le*\FP)G+rL]ETRE+sQAL]ETJE+sQA+E2%>H'2Zn!,uXsH'2[
+#(1L]^CM.[+F`(`"Des?4NWjQCF(KHVD0qF@@UWb^B6%p5DId6qCi=>:F(KH%DL#`1Ci=?W6BY
+&kP#Pq0Ci=?2@;q51F`)83FHSe604Sp:DfT]'E$.8*L]LsnEas$(DfQsa5*@^MP#Pq0Ci=?2@;
+pQ9F(KH%DL#`1Ci=>ICLqdS5*@^++E2%>F*f$FAU0G%H\_]NH\_ZMP#Zpn8R3HLDfg)HHQZj>@
+<ZNrH"D#,Dfg&KHQZj>@<ZNrH"D#EP#Zpn8T\NgFCT6*DfUjAF`)83FHUKfFCf]=@rH1%EZfF7
+FCB'4@rH1%Eda*MBl7EsF_#'*AU&<D+EV1>FEh51BkM=D"a+^(ATX(uFCf]=H!tN'B5W_5F`)8
+3FHSeM"CZ+gFCf]=NW>5*Op$+bF,0gZ1G<?XNW>4uFEhnSH[V&KL]W_WF-:C'5%\\qD3ApdL]W
+_W06<:?Ou"b'DN[2H1QmcHH]iN7Fa]EQP&$5RI?I0MHZWhDFCoH/F<G[:G]\"@H=`8"@;L%-AU
+&<W!0TKl06DG\+Bot1G]\:g!0U!%I?I0MP"ArB1G<ikFE/LGG]]*XP,4<tL]E53FEhnj@Yb&JW
+I'dfFEhnj5*AQ\F*)GY",Hu@LQZn1P":"J06D8WEZee,FED)=FHSG.P#ZUFFE3ORL]ET$H\_ZM
+H]h-eDhnCL!0V,X!AJ+oCia0N&X%3k"Gd)ALQZeCFcpm19p-VP:gn'UFB!O)AWgGJOruDS@;0V
+$<-`FoP"UT4P!+5?AmoLsAUT_AOruDVFE2;8AQNSVFD-hFOp$,p+>6Z8Ec5`)=(u2eBTc#E!g5
+Ht!0TO/+>63&DKJT]FE2)?P"UrsOuSV@P!5$gP&-9^F)c5BOo]uo<.0p006CcMFCB6#ASuUQ5*
+@]TFCf]=GA1T0BHVD<FE3PAP'(kfFE3ORL]N[<FCf]=B45b#P&-9^Ou"b5AU&<AE,Te?FCf]=G
+].2+F(KG9GT_*>G]\.DA9;LJWJCV=2Ne*(1N[2QFEh51BkM=D"DhX]FHSe606CcMFEhbCF!,R9
+G]\1KAnH*qFHSG.P#QO7G]\1=Ch[O"NWjH;B4uCM4aSi(AU&<AE,Te?GT_*>G]\1KAnH*qFHWV
+FAU&<@Bk2=!P,XU#I?IQOAU&<A@;KXjDN4s?AnGjjAos2!HS9JPG]\1LDf[%CAU&<@Bk2=!+EV
+1>FEh_9AohO*Oo^_`Ou%NL<-2\rFEh51BkM=D#]F<eEbT0"FHSe606CcMFEhbCF!,]MFCf]=G]
+.2+F(KHV!Ko6eP#QO7G]\1=Ch[O"NX'<AF*),.H'1=4AU&<@Bk2=!+F'&]Op$+bFCf]=G]7SBL
+]ESo06CcMFD#$$F!,]MFCf]=GA1T0BTf?:F*)Gc@Yb&JWKK0&1OYEc06CcMFEqhDF!,R9G]\4L
+AnH*qF<G[:G][A8@qBP"Oo^@>Oo^_`Ou%2kG]\4>Ch[O"NWij#Dg#]T4aSi(AU&<BE,Te?FCf]
+=H#I;,F(KG9E+sQBOo^@>Oo^_%I?IQOAU&<B@;KXjDN4p2ASuU$EfrS406CcMFEqhDF!,R9G]\
+4LAnH*qF<GO:G^1ERAU&<*F(8d!FHWVZ!g5I)!Ko6eP#QO7G]\1LDf[%CAU&<BE,Tf\CNO-4FD
+#$$F,0g<F*)Gc$@S(;I?IQm9p.MbOq*X2061WAD..O,Bm>e#P%64gCG'+8/p(ZFEd;,:Ecc5;/
+n0$=E,Zq1AS,XoATD@'Dfp)1AWh2!3A5GbFDtYuCM@[!P.H"'F`V,9E+*6lBl7R3P#M~>
+% uk.co.terryburton.bwipp/renmatrix 0.0 2019102900
+%%EndData
+%%EndResource
+%%BeginResource: uk.co.terryburton.bwipp datamatrix 0.0 2019102900 205515 224321
+%%BeginData: 235 ASCII Lines
+currentfile /ASCII85Decode filter cvx exec
+06:]HE+*6lBl7RH \pKT _@s)g 4ASuU /@ :O( eDJ() 6Eckq9
+F(KH4@:O(eDJ+B\ </: R<23K pPEa` [' AS# n&D fV"#
+06M%_@rEuAATDg: @Wc^5 Df .1:GA 2#8P 1l (DO uP+8A Su? nFE2) ?OuP
++;CG'+8/p(ZFEd; ,:Ecc 5;/ n0$ =E,^ uo P'E -!04\L 5@ ;TFpEb TcF
+L_Q"0Ops'_E-,f4 DKCt) Ou" b#@ < ,jr A7^ ofO u"b%Df 0Z -Eaa/7 Amo
+LsAWei&@rH1+D/O EN!0T ,kE c6/ CL ]E So0 4o- CD..O H# '4d,@ <,q
+B1G<o_EcYr5DN4m CDKB B2 Ou "b 1@< -F# +D, %uF(
+LLj05t??F(Js$@j #AlC i a0 N1 G<< W@r GmlD J+t4@
+<H[1Ou"b.@;0Op@ <--+Am oLs A Wei &E aa/7 Amo LsAWei&A8Q ?u+D,%uF(LL
+j04\d7A8Q?u+D,% uF(LLj 055 K GA8Q ?u+D ,%u F(LLjDfBf4 Df0WZY:js=E
+bTE(FEqh:P!+/J! Ko='%< $3- Bl@m 1H]k FA@ ;L!rP!+/T5 ^eepOuSV6P,
+4<rNWD;+NHB2`AW f3'Ot Dh\P ')pO Ou%N 5Ot CcrF_-^lI? ITYP%BdtOuY
+16E-,f4DKCt)Ou% NL<,Z _tBl@ m1H]g 15P "Bh.EcYr5D N4mCDKBB2P&
+5PhATDj+Df1R9G` n&LFY@c RGB8p2 Ou&8D 04S p:F_u#;P!5 $bI?IP_@rH1
++D/OD;@rH1+D/OEX/<VeBEc6/C+EDCEF-8);1N6cCF(K\OD0'>4@UX:eDe*FB@ZmRN1G<L!!0T
+-I@<,jrA7^+J!FCqKH]g@*F(^Y"C6CcDH'2WOOo^@>Oo[4NP!5$bP')pIL]E55P"_#iD0'?Q5&
+,lSP,XU.P'E-LP%'4LP,X6>P!5%&I=%,:D0'?Q5&-6EP'N4"C6ATNC6CcD1G<3GEas#uAKYi2B
+8?P&P"_#pP!FGY<IL$AI?IP_Ble3'D/s21A8Q?uOu"b.ATVs,@ribs+BsX/L^Jq=L]N;8L]Ld(
+>DN]D%#=q?!Jgu:!F6gPL^o4NL]N;4L^Jq=>p*@-&;UmR!Jgc4%#=pi+BsX7L_>LEL]N;AL]Ld
+(>DNuL'SldG!JhAE!F6gPL_bd^L]N;4L_PXG>p*@-(l0#b!Jgc4(l/2u+BsX?L`2'ML]N;OL]L
+d(>DODX+G^)T!f/+X!F6gPLa7d%L]WA6Lan2]>p*@-.#9:-!f-o60Sfa8+BsXQLb+>`L]WAlL]
+Ld(>DOth0Sfdd!f07#!F6gPLbsoEL]WA6LfB03>p*@-5_q[]"Gd2:E/4R$+BsXmLe*=)L]iG4O
+GF$F+BsXuLerm1L]iG4^k`,!+BsY(LffH9L]iG4i.qMA+BsY0LgZ#AL]iG5&;UHp+BsY8LhMSI
+L]iG5:l#<]+BsYHLj4^[L^&S7R"trP+BsR#KSBJ[L^&Y>L&pe"#[JQWL&d<i!0E!@L^&S8CkrF
+(+BsX-L_>LEL]N;:L]Ld(>DNQ@+G^&S!f.5?!F6gYBl7HuEb-A-F)PT+Eb1DSHWu:3LbOVcL]W
+ACL]Le0P#Pt+DIdU)AKY].De*^*AWh(\>DNQ@5_oGs"Gd\H!F:,:<,$DlA8Q?uHQZOK#`)<5!J
+gl7(5MusI?IQDF)PT+Eb0S?>DNQ@@#+i>"Ge%R!F:,:<,$DlA8Q?uHQZOK#`*_]!Jgr9+G^&(I
+?IQDF)PT+Eb0S?>DNQ>!0E!;L^&Y\L]Le0P#PYA%#>gX!Jgc4%Yt-k+BsX1La7cWL]WAFL]Ld(
+A8,plD/s21Ble3'D/s3NEdM#H%#@0)!Jgl7)i+N#I?IQDF)PT+Eb0S?>DN]D=GR!6"Ge=Z!F:,
+:<*P.iLa7cWL]WALL]Ld(>DNiH0Sfac!f.hP!F6gYBl7HuEb-A-F)PT+Eb1DSHWu:;Ld6asL]i
+MZL]Le0P#Q.:De*^*AU>P(L_PXjL]N;5L`D3O?%%l8Ble3'D/s37+BsX9Lb+>_L]WAVL]Le0P#
+Q.:De*^*AU>P(L_PY1L]N;7Lan2]?%%l8Ble3'D/s37+BsX;LbOVcL]WAZL]Le0P#Pt+DIdU)A
+U>P(L_tpjL]N;5L`D3O?%%l8A8,plD/s37+BsX=La7cWL]WAUL]Le0P#Pt+DIdU)AKY].De*^*
+AWh(\>DO,P0Sfac!f/:]!F:,:<+K]\A8Q?u+DGn8A8Q?uP&bnRL_tq5L]N;7Lb=Ja?%%l8A8,p
+lD/s37+BsX?L`hKSL]WATL]Le0P#Pt+DIdU)AKY].De*^*AWh(\>DO2R.#7n[!f/1Z!F:,:<+K
+]\A8Q?u+DGn8A8Q?uP&bnRL`2('L]N;5Lan2]?%%l8A8,plD/s21Ble3'D/s3NEdM#H)MgY7!J
+gl715Gs:I?IQ8Ou"b6Ec6/C+EDCEF-8=4F^o?+F!+t2CisT4F-8=4Ap%p+@s;u:>9I471Mp]FE
+bT$)HS96!5*@]TEc6/C+Dlo7P"Uro04Sp:F!,=U!Kp*=1G<c[B4rE)L]W`4Ou"b3AS60/D28:W
+99M(aEcY`7+Dlo;P"Uro062,CC`mSN"d2NA1G<TcDg-7FEc6/CL]VU.B5!HEP,XU#05Y3;Ci^_
+/DesKN!chjbG*6[)WKK%jDI[m3+Dl.;GB4mD@rH1)P&,p[P#?=A@s=*8Ou"b0CLMK2FE2M8Ou%
+6$Dg-8Y!0V2AEc6/C+EDCEF-:C'"FDe?CLMK2AmoLsAWeitP#QR6DesKN!0V2A@rH1)+Cf>+F-
+:C'"FDe?CLMK2AmoLsAWeitP#Q%3Ec#6,NWsQEF^]<%P!*i(GB4m:DesKXD3>$K05kW7Gp$^-C
+ia0N1OYEcAoD^,@<@M9Eb/a&@;]^oAWf2sDg-7F@rH1)P!+s2HS9;Q@<iu-@;L!rOu%NL<,ZP\
+H$_2VF_kl(GB4m2+D,b4Ch%[1OogehDI[m3+C1-dI?IQXP"@<EF_u/1D.@d2+BsR)(41c`&:K^
+o?'7!UF_kl(GB8*RDKTf:ASkq$F-8_C!KsF<!Kq\UP"CB4'SudF!.-A5P!5$bDKTf:ASkq$F!,
+1[98EV3D0p/CD/s3)@s;u:Bcq;9D/s3)@s;u:BnueQ!Kp*3!KmJHG^Y`SI?I-A@<[&OASu!rA8
+,poNWX<1GEOb1P#Q"1@rGmlDJ+t3Eaa0T4aShlGB4m9@<,jrA7^p5OpR:-0564BOu"b+L]ESoH
+YFU3@<,jrA7^p5P!+/T5^eep04T2K@UX:eDe*E%BnueQ!Jgi@9Tgri1LkWM+DN$/GER2(Bcq,G
+"HieK1G<JcC5;nR!Ko6eP%?:VGB4m:GB8Q?C6D8R1OYEcASu!rA8,poNW`d5FDm=*HS95E@k]c
+MDf'G9AmoLsAWei&D.-p.2IgZBE$/b$Cia0N1Lad5@rGmhP%'4RP"L(1@<,jrA7^PsL^0):OuS
+I,>:D`W0Jsl64d&!h#?rW@*\]JmP!+tK@UX:eDe*E%@UX:eDe*FB@Yb)KWJCV=9TB/q"Hkp2"F
+FTdEas#uAV^MQ98GHg4aSi!@:LuK@rH4'I=!Va@:LuL@rH4'I?ITPEckrV1G<3GEas#uAKYGjE
+as#uAV^S#@<,jrA7^p5L^B6DP"_#pI?IQXP#O)D@<-0qDBNCsEas#uAWgMc1G<?X@kif>Ou"b1
+Ec5THrfT&jD(mi'rK8riD(ml(r/rihAo;+%@;L!-4?SW,7SZ<*Ao;*5NW`0V:IfAEDeG(59gM-
+(D(mi-"AM0L2Jk-++?huP1G<TdB-:YlEbo<)OpR:-0564BOu"b+L]ESoHYFU3@<-0qDN[/0P!F
+GY<%h`p@<*K"@<,jrA7ZltP"UroE+*d.AS,gi+Cf(nEen%b4d#q^+C\c"Ch7L?"HoaIAs*:D@U
+X:eDe*E%BnueQ!Kp*3?BT/P04S[(EZet3@s29sF!+q#Eas#uAKY]C!KmJ>"HlHA99M(aBcq,G"
+HieK1OXU'Bcq,G!KmJH1OYEdI?IQHF(ZV1+Cf(nEftZ#Bcq,G!KmJH1G<JcC5;nR!Ko6eP%?:`
+F(ZV4F(^:/C6D8R1MpQ10K!?YD/ahTD0'>4>9Ic:2'?aWB9E=ZF^:.dI?IQH@:LuL@rH4'HS95
+WB-:D$D(mjjD0'?Q!g7\3Ou%NL<%i*0B5D-s+Dl14P%'S105O"3qiW`gCdNsSOu"b-=GZd91G<
+QDM"m,h05O(5pQ@<cF`)#Op6%3bF('$,M"Qoe06M>JFGTRP1G<f]F>8UCOu"b4Aooeanrbd^F(
+TMMM"-Wa04eX-M"$Q`05t?1M!pK_06M/K@s<Y-rfT&j6$?[QF!*S-L]E53L&caNOuS6uOo]uo8
+8r!JL&cd\!/LZ3@sa@uL^Jq>P,4<qNWLmgL]Wa9Or9EBL]WA7P$!lVP,X6?M#WWnP'N3SL&cgg
+!I^,%L&g=>+DaCfCdK7VDIYCDF('$,+E2@>B-;><Aoo/40Jsti0K(%i=<MEZ+DaIhARfEs?$h_
+uL]NY>OuRlQ8Wn3[5*@]T6$?[QF!*S-+@10ZCiaqG>EV0UI?I/c5*@]T6V_f5Ci^^]4<S]WF>8
+ROF(TMLL]MR/F>J^SL`hKULbOVcLcKgF3/B,KWI9q#Ld?gtLg#.g3/BARWI9q#5!G,c01.I;@;
+L!-4?SE"L]N;RH]g@:P"7c#Ou"aY13R)BF!*S-L`qQTLbF+<3/A`@WI9q#LcU=mLd6<M3/B)JW
+I9q#Lg,Z9LgPLl3/C"dWI9q#Ao;*5L`:JXAorhM5!G,c01.O=@;L!-4?SF-L]N<]H]g@E@$7L;
+P"7c#Ou"aYG%#3.+?Vb/6V_f5CiaqG>EV0UI?I/h0m6uAF*f$6P!26.G%#3.+EM.:0p51m5$`T
+"8OG7V@;L"3+Bt!m6V_f5Ci^_?Aooek99MJEI?I/h1Nm2CF*f$6P!26.G%#3.+EM.:1QkCo5$`
+T"8No>$1G;^&G%#3.+?Vb/F(TMKL]DL.F>AXQF(TMML]WATL]`GeL]N;lH]g@E/<Zu\P":C;L]
+N<XH]g@E;j+,.P"7c#Ou"aj0m6uAF!*S-L]E53L`^u,3.6r\5!G,c02s]M@;L!-4?SECL]N;bH
+]g@E+d/gQP":BiL]N;sH]g@E/!?l[P":C5L]N<=H]g@E7?XWuP"92&@kicYF`V/:L`S`DOu"aj
+1Nm2CF!*S-LgZ#=Ld?gtLg#.g3/Bh_WI9q#LjOpYLjsc73/Ct*WI9q#5!G,c03!+'Ci^^]4<RT
+uG%#3.HQZOU5$`T"8Q7Ef@;L"3+Bt!m<).UFCi^_?Aoobj99MJEI?I0$13R)BF*f$6P!2i?G%#
+3.+EM.:16P:n5$`T"8Q7Kh@;L"3+Bt!m<).UFCi^_?Aoohl99MJEI?I/c5*@^V!.]k+L&h7#05
+6S5Ou#CI@;L!-BcpV&6$?[QF!,UHAos2/Oogeh6$?[QF!,1O!.^63P"Ur>P'(&nGXHX_Ci^_5+
+BosUG%#3.+E_a;FHT:[!g7[nG%#3.+DHQ1J<Hmp99K@>F^:/T<-D\dF!,0>>9Hmg@;L!-F`V/:
+P"Ur>P''`I@;L!-BncV<P,XU;Oogeh?'9G\P"76.G%#3.+?VcB%>Y"?.Yn+]5)98r+G^,U0Sfa
+c3I?oKLb+^gI?I-W6&5Pt>'lDlLbk3nI?I,b5*@]T=E\+hF!*S-+BWeqCiaqG>EV0UI?I/c5*@
+]T7<W*UF!*S-Ld6asLgGFk3/Bh_WI9q#F`)#O+,D%q!JiseOuRlQ83T5#1G;1?@;L!-4?O`TG%
+#3.HQZOU5$`T"8No>$1G;(<@;L!-4?SE"L]N51s*KngI?I,b5*@]T6?ZdRF!*S-+@:6[CiaqG>
+EV0UI?I/c5*@]TASu"$@;L!->9H4T@;L!-6ZumSF!+G*@;L!-=E\+hF!*np@;L!-6?ZdRF!+bO
+1G<WgD+#LN+Dl14Ch7L2L]DjdK89M5Ou"b/AU&<!FCfK0+Bot*F(]<#DL70>I?K5;-P'LG1G<W
+WG]Z]!DHJ#c+Dl14Ch7L2L]DjdK8(`a?'7!\F(]<#DMS=VWJLS1!.-A5P!5$b04J@1@q]:k+Dl
+14+DI!3Ou$QUEarckEelE48n)4L@q]:kLcLW,Op$,LF_sMhBcq;9D+#L\L]NY>P"UT3Oo^_jI?
+IQ=@<,jk@<./5P!*8_EarckEel3.4d'hp@<,jk@<./fP!+tKHZ!D>FBEWrEbuq5L]ET_I=#jCG
+][&0ATDW1Bcq;)G][&0ATDW1BnueQ!Kp*3!KmJHG^Y`T=E\+hF!+q#EarckEfsgnE-lJ6G]Z]!
+DHJ#qL]ET_I=#jCG]Z]!DHJ#q+Dtb8FA?al=<M=6!KmJH98EV3!Kq\UP#Zpn82"jlG][&0ATDW
+1>9IfpG][&0ATDX7OuS1D&<]k:P')L,&:K^@I?I0-Ou"b/AU&;lDf/Z">9IfpG]Z]!DHM7K3//
+dlP#-LgFbV7TI?IQXP"ArB1G<H`7!g%dBOPq;0To%<BOPq;3Kdg6"FZFCOu"b*F$k9s6V_f5Ci
+^_/BOPqE@""1JOu"b*F&[K/<).UFCi^_/BOPqE@""1JOu"b*F'*c3=E\+hF!+t+@<.N=I?G)'1
+G<H`7=-.GG%#3.+Cf(nEfsgYOq*X2055Jr6$j_aBOPq;J!*WVOq*X2055Js:4"*nBOPq;!0UrB
+Oq*X203E=-Ec"9[EcZ>LOuR>jG][&0ATDXN5*AR%5&OqVFA?al=HYk299Nn8Oq*X200tBoOu"a
+YL]NYp03!`/Ou"anL]`er01C["Ou"aXL]rqt05PQFCNXTC04A@H!Ko5l@q1;rOu"b5@u(2L1G<
+u_L]W_q04eXL!g5>m@Uk9\&-)]n1Mq&@AKX:%4aShj@u(,J1G<6JL]NYp06C][!Ko5lG[lO1Ou
+"b&@u(/K1G<3IMEda6!0T-dP#Q::A7ZlNP!+.F@q1;pOu%NL<,HPaAKXs84aSi(@u(,J1OYEcD
+/Wrr+BXdiHS9VRL]ESoI?IQHDe*E%7?Tf\04eXL!0T-dP#Q::A7ZlMP!+.F@Uk2oOu%NL</:R%
+D..-pD..I#+DHW`P%Kj[HUEr]I?IP_CPVtR1OEgYCQ\^8F(]<#DN[/0>;'Dp04SKFFCQtK@kVD
+'04JE6?$h_oP%9^eOu%NL8T\uqAKY2"@q-X'@j$#++D#%*@UgNdHQZa,P!5%;Op$2r8UEad5^e
+epFE2M8+Boss@j#8k+EV*9G[hk-@j#'(+C\iD5*BN@"FZG)HU<l\I?IQOEckq9>9I?a+Cen(FC
+QG<@j#5j+C0=:ARgleP%Kj[I?I0K7?ToaP#QODF_)\"+CSb&@q-X+@j#>m+C\h'?$d]9A!0$=A
+s*:FP"C""P!FGY<-3/'AKY2"@:LEi@j#l'+D#%*@UgNdHQ[QCP!5%@Op$2r8UFR&5^eep6]s]_
+P#O)EBOPp(D0'>4Bcq2S!Kp*=1G<0H+CSb&Blc[hL]N;5OuAI(I=#[L76u9`&;UCN!I]<X&;U@
+M!I^,2I?ITn1G<6J+Cen(BlcXgL]WA7OuAI(I=#[L76u9V#`&SG2Ne)hH\_f\"-PR*!I^,2I?I
+Tn1G<i[+EV*9Bld7#L]WA7OuAI(I=#[L76u9V#`&SG2Ne)hH\_f\"-PR*!I^,2I?ITn1G<u_+F
+ %B=BldC'L]WA7OuAI(I=#[L76u9V%>Y+L2Ne)hH\`#b"-PR*!I^,2I?ITn1G<<L+D#%*Blc^i
+L]`G9OuAI(I=#[L76u9V&VpRQ2Ne)hH\`,e"Hk[+!I^,2I?ITn1G<3I+C\h'Blca=H\_ff!I]<
+N!KmJ3P#[Z$CPW+V8pbZ#F_)\"+Cen(FCQG<@j#>m+C\h'?$d]&@u(/K!KoX0@?LbAP"C!dP!F
+GY<+9?n!KmIlA!18I6BXT^P#QODF_)\"+Cen(FCQG<@j#>m+C0=:@Uk2pOo^_0P%Kj[I?I0K6B
+XT^P#QODF_)\"+CSb&@q-X'@j$#++C\h'?$d]*@u(/K!KoX0As*:FP"C!hP!FGY<-3/'AKY2"@
+:LEi@j$#++D#%*@UgNdHQ[E?L]NY>P!5%@Op$2r8UFF"5^eepFE2M8+Boss@j#8k+EV*9ARcil
+@j#'(+F%CP!KmJH5*BN@"FZG)HWZFrI?IQOEckq9>9I?a+EV*9ARcil@j#'(+Ceo;!KmJH5*BN
+@"FZG)HXgP.G[lnKHUEr]I?IQ>@j$#+P!+/++D[,@L]NY>=EJ+pD+85[F*)aO=HYptHUEr]I?I
+TYP#Qjm<.0p/05D\GL]NY>Ou%NLAUT_oI?G)'1G<0IA9;a"GB8+o3+I/RP!3WD5*C1EC6CcD@V
+V&,Ou%NL%[&V$ASu!DH\_]LDKTea+DI!3L]W`3H\_`dV33fo!,Zdi+DI!3P'E-LL]M@6B-:oE!
+KmJH99ONcG%#3.P!5%%@:WnjDe"!4052PCL]W_?Ou&7dI?IP_DIn$/De*E%Ci=6-F`<L"DIn$/
+De*E%D/WrrP&5P3G%#3.+Bs[%CdT=]<$6!Z+DaIhCdK7M+Dtb7D/WrrP"Us2@:WnjDe"!405YW
+<AKYl%GAV8/AWej45^eep6$?[QF!,=@B-:oO99MqVA7Te#@s;uIBcq,G!KmJH1Qk"OP(S1G%[&
+V$6W@02@;L",De"!4HS9)NP!5$bD..I#L]E55Bl9)CL]N[<HYIA\5)9<(9S`\35'rFnLa\F&I?
+I0X.$@Ja!KmJH3/.G6P#@H,L&h:;C4279OrKPjOpdF:P')29%[&V$ASu!F<*4K#E/4LW1G<6[G
+]mM3F+t">OpR:-04]!=AKYSnCia0N1OEgYD0'?+AT!YoH]gXBP#Q"1@s29sF!,=<A7^osD0'>4
+Bp),P@$5JUP!FGY<,dWqP%odQP!+.FDIn$/De*E%Ci=6-F`<L"DIn$/De*E%D/WrrP&5PUFEht
+;CibC4E0<m^<*4<PCia]:@s;u:@:WnjDe"!4+Bot2DJWg,+C-*uA7Te#@s;u:DIn$/De*E%6'?
+)36$?[QF!+\Cs(k%FCfDNn=<MEK+Da@e>p+#rGAV8/AWf]L94;@AFDkZ5F+'3N05YW<AKYl%GA
+V8/AWei&A8c?s+EVXHAWej45^eepD0'?+ASrW)P,X6>P$r\jEb0)tGB4mEF_u/1D.@d2+DN$<L
+]`f<L]W`UOo^_=Ou"b3ASlU!Ci^_'+Dl14+DDs8F(]<#DBNYVWKKr%OuR#j@s29sF!,=<A7^os
+P!5%:HY%))G%#3.+Dl%-AWf]L5*AR%!g7\SH]iN-s+p]2s+p]'P#Zpn8R7K8Eb0)tGB8QAP!*h
+sD0B?(F-:!g"-Pg1"FF>q@rus=@;L"@!-")pOogehEb0*2@;L"J!g7\3+@B+1G%#3.FDkZ5F!+
+n%A9;a"GB5ESDe*E%6'=#WBcq86B5D-sOu"b%Df0,/FE2M8Ou&7dI?IQMASkq$F,0m\4`Y+NG%
+#3.P%'4KP!+s2D/Wrr+BXeDOp$,9+CfM<G%#3.L]DCW9TfI?F`M&1G%#3.OogehASu"$@;L!-D
+/WrrP"Tk.F>8qOOogeh>p)L6=E\+hF*)>1GB4m8A7Te#@s;uID/Wrr+@2/H052PGF(]<#DNZe/
+A8c?s+EVXHAWej45^eepEb0)tGB8QAP!*hsD0B?(F-:!g!KoU/"FFX#G]mM3F,0g8P"\5B=E\+
+hF*)>1GB4m8A7Te#@s;u:>9J'+Ch%Z3>p*QdA9;a"GB4lmG%#3.+Dl14+DI!3P"T4oA9;a"GB5
+ESDe*E%6'=#WBcq86B5D-sOu"b%Df0,/FE2M8Ou&7dI?IQMASkq$F,0j[4`Y+NG%#3.P%'4JP!
++s2HXh/BG%#3.L]DCW9LDc]G%#3.FDkZ5F!+n%A9;a"GB4lmG%#3.+Dl14+DI!3P"T4oA9;a"G
+B5ESDe*E%6'=#WBcq86B5D-sOu"b%Df0,/FE2M8Ou&7dI?IQXP#Qjm<+TrWG%#3.+Dl%-AWf]'
+F(ZV0P"Us2OuQrnG]mM3F-8_+P!5%S06!(<P%&Bn!Ko5lBcq,G!KmJH1OYEtA8c?sP&PbpE/4U
+ZC5;kQ4aW>WI?IP_Bcq,G!KsFF1G<\iE$/_0@s29sF!,=<A7^osD0'>4Bp),P99NbIWKK&cP%@
+i?@rus=@;L"@!-")pOogeh>p)L6=E\+hF*)>1GB4m8A7Te#@s;u:>9J'+Ch%Z3>p*QdA9;a"GB
+5ESDe*E%6'=$<+Dl14Ch7LID0p/CD+#L\P"UT4P"L(W!g9CC3/@QOF(ZV0P"Us_OuS6uD0'>4B
+nueQ!Kp*=GX6L]Cibb'P"T4oA9;a"GB5EO+DHW5Oo^_%I="8'@;L!-D0'>4Bp),P94;@AFDkZ5
+F"_5MBnueQ!Ko6eP#Zpn<.0p/I?G)'1G;1?@;L",De"!4HS9)NP!5$b055<?ASrW)DN\Il1G<Z
+hFDPN++DG_V@Yb/M2M_HuCm#?m/<VeBBl5%t+DG_V!g7\^!/LW2!*taDD..I#L]E56Bl7`uDMS
+=VWI&>sP!4[)P"^Z3P!45UEejp_%t0U4M#*8FOuS9eOq39Is,mMJ5*@m]plZ/B!<82bP!4U#s,
+mM5P":`TOpR9ZP!5%OL]D@9FDPN+P"^:e%[&V$ASu!HHS9>o!0T,kARoLe@:OD&@;L">#W.\NO
+u%H!+Dl14Ch7LI4aW>WI?IPuG%#3.+Dl14+DI!3P$jGlH]gXBP#QCV"HmMU!0TKlD0'?+ASrW)
+P,X6=P$r\jEb0)tGB4mEF_u/1D.@d2+DN$<L]il=L]`fVOo^_=Ou"b3ASlU!Ci^_'+Dl14+DDs
+8F(]<#DBNYVWKKr%6$?[QF-8_M99K@>Fa]EE?'7!aASkq$F,0j[4`Y+N@s<!M!g5^0EcP`.G%#
+3.P%&HCD.@d2P$sLVHY$`%Amo1kG%#3.L]DCW9LX,5Cia]:@s;u:@:WnjDe"!4+ED%1G%#3.+C
+SekFDkZ5F"_BKA7 ZlLO u"b*+ Dl14C h7 LI1 Qk"OP #Qjm<,
+?JkCNXS=D/WrrP& 5Q/ 5^eep I?IPu G% #3. +Dl 14+D
+I!3P"UrtARoLe@: OD&@; L" J5&cZ KP'J ^" P!5 %<E0: 6b1 G<GbB nueQ
+!Ko6eP%AKKA7ZlL P&5P! Eb0 )tG B4mE F_ u/1 D.@d2+ DN $<L]il =L]
+`fVOo^@>P,XU;L] N[<Ou %'5 "Hm M U!0 V25 +Dl 14Ch7L ID 3Ap[AS kq$
+F,0p]8s44A7<W*U F!,UC Cm% GS3 +Z W7 Amo 1kG %#3.P !3 iJ5*C 1EE
+0<DJ@W7J2Ou%NL< +TTS Am o1 kG %#3 .L] DCW 9LX,
+5Cia]:@s;u:@:Wn jDe" ! 40 5Y W<A KX: %1MI tKF(]
+<#DN\j`DKTea+DI !3L]W` 3H\ _ `dV 33 fo!, Zdi +DI!3P'E-L L]M@6B-:oE!
+KmJH99ONcG%#3.P !5%%@: Wnj D e"!4 052P CL] W_?Ou%N56$ ?[QF!,=@B-:
+oO99MqVA7Te#@s; uIBcq, G!K mJH1 OYEd I?I QXP#Qjm%[& V$ASu!EHS9>
+o!0T,k@Wl0rF+sl 7OpR: -HYF U>F( ]<#D N[/ 0P!FGY<,?J kCNXS=D/Wrr
+P&5Q/5^eep@Wl0r F!,EE D0'>4 Bp),P GV= "YE/4OX!Ko 5lBcq,G!KmJ
+H1OYEt061W@@s;u :DKTf:A Skq$F! ,3?E0 :6b 98EV3WKK%j @Wl0rF!+[0E
+b0)tGB8Q?P!*M%D0'?+AT!YoOp$,f!.B35L&h(5Ap\KFHQ[9^!;_jVL&h%4!H<bnqN>TAP#Zpn
+<FU,[CibC4E0<nX!g7\3Ou%moL]Lt.@;L"J@Yb&JWI$:;P!5$bC*7JY!Jgc>!JUT>P&,jQs,q,
+Q!KmImG%#3.+E3K:Oo^_*L&h:;8pc9n!0X=0P#Pn6@;L"J5&cZKP'DD<87HaNCi^_-A7Te#@s;
+uID/Wrr+@2/HI?G)'1G<6^F+sl7OpR:-05YW<AKX:%1G<Hu!0T,kC5;kQ1OEgYD0'?+AT!Z'H]
+gXBP#PX=ASu!D04f$26W@/@ASu!F<*1ebDIZ%5=>+6'@mr%^DIZ!U>p+!&A7^osP%9_?I?J.p@
+s;u:@s<!M!,@ZjOu%NL<%hcjFDPN++CfV:P%'S1061W@@s;u:DKTf:ASkq$F!,4R!KsFF98EV3
+WKK&XASkq$F,0gZ:jXj*GB4m2+CfV:OogehEb0)tGB8+c!.fQ]K3aWrA79RrAT!;)Oo^@>A79R
+rASrW2ASkq$F-6Q[!KsF/056S5Ou$g.!KmJ<!0r^`L&h18C5;nR!JUT*Oo^_*L&h49:j[osrfX
+7/P#Pq8F-8_$P!5%RI?I-LP#O)KL]ESoHS94YD.Rg0Bk)3,Bp),P1G<ceGB4mDL]ET2Ou"b$De
+sJ;D284U99M(aEb/ls+Dlo9P"Uro061W:Fs(XX"-Q<?1G<ci@s9&4L]il6Ou"b3F(/r.D28@Y9
+9M(aD/sQ=F!,LAGB8QAEb/lsP&-;\Ou"b.@rH1)+Cf>+F,0m<AS61LCm(c\1G<chDg-7FD/sQ=
+F!,L7B5!H+Ou"b3@rH1)+DkV,Ci^_>AS61L;N`ghDI[m3+Dl.;GB4mD@rH1)P&,p[P#?=A@s=*
+8Ou"b0CLMK2FE2M8Ou$TlF-:!M@s<!WD0mpSCLMK2AmoLsAWeitP#QREDg-8Y!0V2AEc6/C+ED
+CEF-:C'"FDe?CLMK2AmoLsAWeitP#QR6DesKN!0V2A@rH1)+Cf>+F-:C'"FDe?CLMK2AmoLsAW
+eitP#Q%3Ec#6,NWsQEF^]<%P!*i(GB4m:DesKXD3>$K05kW7Gp$^-Cia0N1OYEcAoD^,@<@M9E
+b/a&@;]^oAWf2sDg-7F@rH1)P!+s2HS9;Q@<iu-@;L!rOu%NL<,ZP\H$b]>I?IP_Bcq,G!KmJH
+1OYEt04T38F!,LE@Vh26Ou"b&@q'L%EcY]+OpR:-L]E53EcY]+L]N[<HS9)r5*@^3GB8pVL'AE
+VD0mpGG@GW-H=\4/GB8pVEcY]+P#@H!I=#[a#EiMB04T38F(or3L&da,1OXU'@s;C'BmO?F!1T
+--I?ITYP#X/FG@D\)G@GW-H=`6GOu%moL]M"0@WQ70AV^AMWI$:5P!5$b@s;B)C*7#1F!,3?Ec
+Y]+P&+iq!Kp*=G^Y`G@s;C'+DDs.G@H_[ARf1j+DDs&+EDO5G9CpI@Vh3*H\_ZMP(R&'G^Y`G0
+62,BCi<r/>DN<7!<7D/3/@X!Cm$c4!<A9TH\MPQP/2R0<.0p^?'6usEcZ&8B8-EeOpR:-L]N;4
+L&h7#OuRK'@;KjpP!5%%P!3o-Ci<sB",Hu@LQZn1P"76HF)Z/<A:'+6Or9&UP&6@GL]ETTOp$,
+PF)5c-P!5%%P!3o-Ci<sL5*AR%!JUUSP%o#Y@;KjpP!5%%I=%-"P')Q\I?ITYOq*X204Sp3AnH
+*,>DN<#F(9D:EcY]+P#?X_!.C#_?'7""!JgbsF(9D:EcY]+P#?W[Bp(ZC1Lk?7AnH*,Bcpo(AS
+,Oq+DHW4P,XU;P'C\s!KsF<s+g]&05?Y6Ou$TdAS,Oq+DN$/De3NmF!,4R!KsFF94MmOAnH*,C
+6D51F(&m'B-:oO96,)mEc5KO_30%kP"9)$AS,OqL]Cq'AS,OqL]ET2EcYZ*DeC2,P"Th:E,ol-
+P'DD<82"IkAS,Oq+Cf>$AnH+?!+TqYAnH+I@Yb&JWKKr<1Pc$e!Fp=_F-:!g!KsF/056S5Ou"b
+$G@D\)G@GV9Bp),P1G<<L@N]5l@WNZ+P"UroL]E53@s;CF@Yb&JWI$:?P!3B"@Zip<94_UBL]E
+T2P/3;;ARf24@Yb&JWJLS1!.-A6P!5$b05r%F@q(U1C6GQP!KsFF1M('*+E/HF+Cf>$AnH*,C6
+D51F)Z/<A<M1PL]ET7HY$\r+E/H7@q$R"L]NY>P"T@r@N]WQ99R,SG^Y`SI?I-LP":"a88_p]F
++sl7P!+.FARf1j+Bot"@q'M8#`&PF9RD2N8S)C@F,0gP#a.l.I?I0-Ou%NL<%ha*F!+[0@s<!@
+I?I0BF(9E@L]DjdK3aWrL]E53EcY`7L]N[<HS9)r5*@^3GB4mE@s;u:Bp&L.@q'L%BcqG;@Vh3
+BP"TL3EcY]+P#@H9P'DD<82"guA9D^"H\_f\s,r.t#V[qd0JG170Sg!tV32^Z3/@Zms,r.n!f.
+,FV33Nq30Ia,#a.B7WKKH.H&)]]s+gZ%L]NZ@P!5%%LbP!kP!4;W8<S+O$]+bELO51KL]NZ@L]
+ETMH]gR0Ec6/COo^_0L]hR8Dg-8Y"HieA#a/qcWKI:1P#RT(L]ETMHYm82Ciba?P!4[)D.@L#F
+,0s^!Jh#EC6GQZ!KoWpP#R5<P#uRADg-8c8pc^bD/sQ=F-<Mc5(/SnP!3_mDesKXCm"g9D..OL
+5)9Aus,r/#G^Y`HI?G)'1G<9UDBN/1L]W_WL]Wa=P!4['P,XU.I?G(eL]W_WL]N[<P!4['P,XU
+.I?G(eL]W_WL]Wa=P!4[&P,XU.I?G(eL]W_WL]N[<P!4[&P,XU.I?G(eL]W_WP!4[&P,XU.I?G
+(eL]W_WL]Wa=I?G(eL]W_WL]N[<I?G(eL]W_WI?G(GOu"b%D.>:C>C.K0Ec6/CL]N[<L]Djd%X
+W&5Dg-8Y!KsF<!I^+@HYmeAGB8Q@P,X6=I?G(eL]D:%DesKN!g9O2Oq)hp!,Z4aCibC5P,Wkm%
+XX!4D.@L#F,0j[WI9p>H\_`?@rH1)L]N[<I?G(eL]_L(DesKN!KsF1Oq(c\1G<9U@ko02HQ[0G
+Dg-8Y"-TX>!.C"?HYmeAGB8QAP,X6;I?G(eD/sQ=F,0j[WJCP&Oq)hp!,Z4aCibC8P,Wkm%XX!
+3D.@L#F,0p]WI9p>H\_Z=@rH1)L]Wa=I?G(eL]D:%DesKN!KsF1Oq)hp!Gu=bCibC5P,Wkm%UG
+5R04\p01E]nK+Dl.;GB8QBP,X6;I?G(eD/sQ=F,0m\WJCP&Oq)hUEc6/CL]N[<L]Djd%XX!3D.
+@L#F,0m\WI9p>H\_Z=@rH1)L]N[<I?G(eL]M@&DesKN!KsF1Oq)hp!c;FcCibC5P,Wkm%XX!6D
+.@L#F,0j[WI9p>?'6usA8Pg5+Bs18D/sQ=F,0j[WJCP&Oq)hUEc6/CL]N[<D.@L#F,0j[WI9p>
+H\_Z=@rH1)L]`g>I?G(eL]D:%DesKN!g9O2Oq)hp!,Z4aCibC5P,Wkm%XX!4D.@L#F,0p]WI9p
+>H\_]>@rH1)L]Wa=I?G(eL]M@&DesKN!KsF1Oq(c\1G<T^@<<Vr+Dl.;GB4mD@rH1)P&,K$s*^
+&_?'7!RGB8pVL]N[<M#W82HXh8@P!5%%I?I-W"Gd&)L]W_WL]ET$P!3`'Dg-8c4d#qpA8Pg2+D
+l%-F_kW;P#R5=Or9&UP!+slD/sQ=F,0m\WKKE-"DqXeCibC8P%odQP&6?bHXpu'1*CFPA9D^"I
+?IQc!g4FW!0TL.5&G=YGB8QAP,XU-Op#W3DesKN#a/qY"Hkp2"FFZr@l#6EDe+!,AUT_@L]W_W
+L]W`&P!3`'Dg-8Y"HieK4d#qb@rH1)L^9/YL]ET$Op$,BD.>CFD/Ws-Ch8$X<-sE&Or9&UP"Lm
+$D/sQ=F-:-u"FGq+Or9EHD.@L#F-:@&!Gu[^FHShN98NV24aU^VDBNe7A9D^"I?IQXP#R5=Oo^
+_0L]Wa=P!4['Or8+HDesKXAs,?6!0Ts;"Hm_NP!FGY<.0p@L]`e@P!4[&Oo^_0H\_`d)/Wl%Ci
+bbOP!4[%P"Ll?H\_`d)3R1#@rH1)P&-9^D/E^'P!5%%M#WW$HXpu2+Dl%-F_kW;P#Qjm</:U=W
+KKH$!g3SI5)99')2J9U8s2ATEc6/CP%Kj[P&Pc25^eepI?J/t!KmJH5)9<(!KoX&!g4F<@rH1)
+P%Kk@D/sQ=F-:-uEftBgP')q1P!FGY<.0p@D/E^'+Dl.;GB4mD@rH1)P&,pTP,XU;M#WW$HYmV
+.F<GF@Dg-7FD.@L#F,0j[WKM(R!g9NeL]N;3?'9JMD..N/D/sQ=F!,=0DesKXCkr.UWEY/YL]L
+eEH$tiT05tWMF!,LAGB4m:DesKXCm#*f1G<6^E,TfR!0T-o!/LYrDg-8Y!KsF/056S5Ou$epEc
+Q)BF,0m\!Kq2R!0TKlE+sQ<+DDs.DesKXCg/#lDesKN!g6H.L]N;3I?K4gP'MJ=<,!IqEc6/CL
+]W_?P%o#XDg-8Y!KmJH4aV-^G]P!A+Cf>+F-:?D+Cf>+F*i]DI?K4gP'MJ=<,!IqEc6/CL]W_?
+P%odQP&4nUEcQ)BF,0m\!Kq2<Ec6/CL]NY>P&6?bH\_ZX!Fp%aF,0j[WI$:5P!5$bC*7P,DesK
+N!g3SIC5;kQ4aV-^G]P!A+Cf>+F-:?SOo^@>P'DD<<,*Or@rH1)L]W_?P%o#IDesKN!KmJH4aV
+-^G]P!A+Cf>+F-:?SOo]9Q!g7;]G^Y`SC*7P,DesKN!g3SIC5;kQD/(26@rH1)L]W_?P%o#IDe
+sKN!KmJHD3>$KE+sQ<+DDs.DesKXChf+6D/E^'+CfV7Df_(7P'AWiGAqJA+CfV7Df^^8Oo^_%I
+?IQXP":"a<.0p#4?P9;ASs.SEb0-*@<?O(GV=#MG]P!HBm=\PE+sQA+Cf>+F"_KHG^1EPDg-7U
+BOtmjBQPA;Dg-8Y!g7AU8<PkaGA1T0BHUf'CibC6P&,qFOu=t3E-*4@E-,f4DK?pa4s4BSDKKE
+0@<[lR0/%?WDJ`g(EbTc]<0B7iOq*X204\L5@;TFpEbTc]30If*F_`U>D_?-CEcQG7F`MSBDD#
+CBBlJ#6A7]@eDImj"F)Q2A@qCgGOuY1:ATVm"@r#drB9KiQP'(hWFDtYuCM@[!I?IP~>
+% uk.co.terryburton.bwipp/datamatrix 0.0 2019102900
+%%EndData
+%%EndResource
+%%BeginResource: uk.co.terryburton.bwipp datamatrixrectangular 0.0 2019102900 50884 54201
+%%BeginData: 17 ASCII Lines
+currentfile /ASCII85Decode filter cvx exec
+06:]HE+*6lBl7RH \pKT _@s)g 4ASuU /@ :O( eDJ() 6Eckq9
+F(KH4@:O(eDJ+B\ </: R<23K pPEa` [' AS# n&D fV"#
+06M%_@rEuAATDg: @Wc^5 Df .1:GA 2#8P 1l (DO uP+8A Su? nFE2) ?OuP
++;CG'+8/p(ZFEd; ,:Ecc 5;/ n0$ =E,^ uo P'E -L04\L 5@ ;TFpEb Tc]
+3%oDi/n8fPFCfK5 H"(o: FDl %L@ W uO* E0A q<G `iLhA7 9R gD..O, Bm=
+Z0@ru-sB6A$!EdN TVOu8 C30 5kf OB l@ m1P !5$ b04J@ 1@ rGmhP !5$
+b04]!=FC]E#G9CL +Cia 0N 1N .5 SBl @m1 P-6 N[FE
+2)5B68E<AWf3'L] NYrO p u> KF D5Z 2F* j(NA moLsA
+Wf3'P!FGY<0B5(@ ZmRN0o c8t P )XR (F _-_! H]f tD5*C&O5*@ ^MH]ft&Eckr
+V1OYEdI?J0)*g/N :DfBf4 Df0 W Z5*@ ^MP# Q@= FD5Z2F*j'+ I?I0?E-,f4D
+KCgDA8c@-A9)+&F E2M8P' Cna FD5Z 2F,g H:D fT]'FH-ZJA RfgjDJ*csP'
+AWgEbBG9@UX:eDe *E%Df Bf4D f0VL 04\L 5@; TFpEbTc]5E [g2EbBHR")i
+.#DfBf4Df0WZG[Y W*F!, "3DKK E0@<[ lR0 /%?WDJ`g(E bTc]<0B7iOq
+*X204\L5@;TFpEb Tc=ARfg jDJ+*. @<.Mj P%6 4gCG'+8/p( ZFEd;,:Ecc5
+;/n0$=E,Zq1AS,XoATD@'Dfp)1AWh2!3A5GbFDtYuCM@[!P.H"'F`V,9E+*6lBl7R3P#M~>
+% uk.co.terryburton.bwipp/datamatrixrectangular 0.0 2019102900
+%%EndData
+%%EndResource
+%%EndProlog
+%%Page: 1 1
+gsave
+1 1 translate
+0 0 moveto
+<31323334>
+<646d72652076657273696f6e3d38783830>
+/datamatrixrectangular /uk.co.terryburton.bwipp findresource exec
+grestore
+showpage
+%%Trailer
+%%EOF
diff --git a/graphics/pstricks/contrib/pst-barcode/doc/images/dotcode-1.eps b/graphics/pstricks/contrib/pst-barcode/doc/images/dotcode-1.eps
new file mode 100644
index 0000000000..048b399a21
--- /dev/null
+++ b/graphics/pstricks/contrib/pst-barcode/doc/images/dotcode-1.eps
@@ -0,0 +1,427 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%BoundingBox: 0 0 112 76
+%%Creator: Online Barcode Generator 2018-05-20. https://the-burtons.xyz/barcode-generator/
+%%CreationDate: 2018-05-25 09:20:28
+%%Pages: 1
+%%LanguageLevel: 2
+%%DocumentData: Clean7Bit
+%%EndComments
+%%BeginProlog
+%%BeginResource: Category uk.co.terryburton.bwipp 0.0 2018052000 30005 33214
+%%BeginData: 7 ASCII Lines
+currentfile /ASCII85Decode filter cvx exec
+P1OerF_-`n01TSk ATDKp 010/i AS5q% H' 6mE 30Ia, !KmJH2
+3Ji?3%mj@F*(i.@ qAV bE+L\ DATVm "@ r#d rB9 KiQP
+'&Es@:O(aA79M!@ <ls?E +O HE04A mA@< ls ?E+ OH\<K _S[ F_`U> D_?-
+CEcQG7F`MSBDD#C BBlJ$ S4t f93 FCf* 'E d8d <AS,Xo AT D@'Dfp )1A
+Wh2!hZ~>
+% Category/uk.co.terryburton.bwipp 0.0 2018052000
+%%EndData
+%%EndResource
+%%BeginResource: uk.co.terryburton.bwipp raiseerror 0.0 2018052000 153916 40223
+%%BeginData: 9 ASCII Lines
+currentfile /ASCII85Decode filter cvx exec
+06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6 Eckq9F
+(KH4@:O(eDJ+B\< /:R <23JD %Ea`[ 'A S#n &Df U1I,
+\;":DfV")04f0ED fTQ0A oE hrP'A 6`Ec Q) =P! 1O1Ec Q)= DIIBn P!5%
+R,\;":DfRL@Df'? "DIeo MP' A6` EcQ) =0 5b? FATDg0 EZ fIEF_- _\P
++mAf%[&V$Ea`['A S#n&D fV" #P% 6 4gC G'+ 8/p (ZFEd; ,: Ecc5;/ n0$
+=E,Zq1AS,XoATD@ 'Dfp) 1AW h2! 3A 5G bFD tYu CM@[!P .H "'F`V, 9E+
+*6lBl7R3P#M~>
+% uk.co.terryburton.bwipp/raiseerror 0.0 2018052000
+%%EndData
+%%EndResource
+%%BeginResource: uk.co.terryburton.bwipp renmatrix 0.0 2018052000 111923 110822
+%%BeginData: 91 ASCII Lines
+currentfile /ASCII85Decode filter cvx exec
+06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6 Eckq9F
+(KH4@:O(eDJ+B\< /:R <23Kp PEa`[ 'A S#n &Df V"#0
+6M%_@rEuAATDg:@ Wc^5D f. 1:GA2 #8P1 l( DOp s'bAS u?n FE2)? H\`B
+!23JD%@<-"%P!5$ b06_, @FD -I2 Ou"b )A SGd jFGKs\ 1G <3GEas $(D
+fUjAF`)83FHSF5@ UWb^B 6%p 5DI d 6qC i=? S"a +^(ATX (k 04Sp:D fT]
+'E/k*EDKBB2Ou"b %Dfg) H+D ,%u F( LL j05 5<> F)Z/2@ :Y /oOu"b *DJ
+O<4Eb/ZiBSZYO1G <H[C NFH 8A RT +mL ]ES o05 5<6C
+is9"FCf]=+D,%uF (LLj 0 6D G\ +Bo soO u"b5 AU&<,
+Des?4NWjQCF(KHV 1G<i]G ]\1 = Ch[ O" NWjQ CF( KHV1G<i]G] \4>Ch[O"NWj
+QCF(KHV1G<i]G][ P9DKLm D6Z 7 *fBk ;=J1 G<i ]G]\"@H=_m >Ou"b5AU&<A
+De<U&ATW_.Ou"b5 AU&<BD e<U &ATW _.Ou "b5 AU&<0@;p:D !0T,k@;L%-A
+U&<W!0T-HEbBH?O u%NL8 T/Qi H]g15 P"@< NBk 2=!+EqO1FD -gjOu"b)ASG
+djF<G7.BkM+$OtV tS04J @1@rH 1%EZe h"E as$(DfV!mO u"b#@:O(cEc
+6)<A7KOoDfQt0@: O(cEc6) <A7KOo DfV!m Ou" b*DJO<4Eb/ Zi+DG_/F)Z/
+2@:YNSOu"b*DJO<4Eb/ZiBHV#,CNFH8ART+_OtVtS055<>F)Z/2@:XO(Bl7^-E,oMuA9O+hOu"
+b5AU&<,Des?4+EV1>FCT6*DfV!mOu"b5AU&<A@;KXjDBO%4G]\1=Ch[O"OtDhQ06CcMFEq;2Bk
+M<+FCf]=H!tN'B5WkaOu"b5AU&</Df0Y>FCf]=AoDR/OtDhQ06CcMFE;/BAKZ)+G]\"@H=`6mO
+u"b5AU&<ADe<U&ATT&:AU&<ADe<U&ATX(gOu"b5AU&<BDe<U&ATT&:AU&<BDe<U&ATX(gOu"b5
+AU&<0@;p91FCf]=B45b#OtVtS04A[=FCf]=+CT).FCf]=OtDhQBl7^-E,oMuA;C5KD0mpMDJO<
+4Eb/ZiBHV#,CNFH8ART,41OYEcBl7^-E,oMuA;C5KD0mpMDJO<4Eb/ZiFs(L:CNFH8ART,41OY
+Ec06hbTATW8AE+sQAP&-9^E+sQ<P!5%%I?G)'1G<uuBl8**EccXNE+sQAP&-9^E+sQ<P!4['Or
+9EUL]N[TP'DD<%[&V$D0U>=ATW8AE+sQAP&-9^D3@)G98EV3"FZFCOu"b.G^4@AFF,-LBm=lcC
+m"g9P!4[(M#WWnP'DD<%[&V$D0'91@W-9tATE,?E+sQAP&-9^D3@)=!g4Fa98EY4EftZqOq*X2
+05Y0:Eb&a%De<U.+E2%>G`lm+!H!u`L]W_WP"UT6P&c_1I?G)'1G<TZF(0'.A7]e.+E2%>G`lm
++!H!u`P"UT8Op$RBP!+5V%[&V$D.@Bn@<-];E+sQAP&-9^D3@)=!g4Fa98EV3"Hn"XOq*X205Y
+38ARTU9H\_`d)/Wl"ARTV8!g4FW!KmJ#@r,^bEejd[)3R1>!KmJH5&FeGARTV8!g4Fa5)96&!K
+oW`@r,^bEejaZ!KoX&!KmJH5&FeGARTV-Oq*X206D5C@qC!?H'1@S1G=!95*@]TA8-',G_cB`!
+I9J%Oo]EEH"U]1Ou"b)F_;h-Bl]@m06;@\G`jj9F*SmROu"b4A8-',A8-(I1MpQ@CEQh(GT_8S
+?$d]=L]NY>Gp%?f!KmJ/L]NY>GT_9f!KmJ.+F/bKA8-(?!g7A_DN]c.7!XqZOu"aZG`k7R1G;-
+=7!KhBGp%?WB4Z1J1G;+@P!5$b010uI5*@]T6Qea@+@CDsG^3q5FHSF56@"_XOu"aXG`k7R1G;
+';6?jV>Gp%?WB4Z1J1G;%>P!5$b00siG5*@]T5p/I<+@18qG^3q5FHSFG+@;5SHU/cAP!+.F9R
+V7@;LO^.I="7&6]sT!+@MAUOp$+tL]ET$BQ[sD!0TL._0[h5I=!V:I?ITYHS7j:P#Zpn<K]<p7
+Zoo]P'(;LEej^Y4aSi,+F&\COo^_%I?IQ?Bl]"1P!+.FGp%Bg!KmJH1OYEcA8-(?!g5]n06eUa
+L]N[<Ou%NL<+K]`L]`f'HS9XeH&)KaWKK&cP#Q+;B8?PN4aTJ>+@18qD0'91@W-9tATE3G+@:;
+q6?s\jF(KH&DfTB"Eda*NI=!V@P!+.FA8-',A8-(?"-N\@"HmM_1MCoDL]NZ%HU;s"6?s\jF(K
+H&DfTB"EZdbp+@LJtD.7F(A7]e"AnHIS<.0*HA8-',A8-(?!KmJ>"HmM_1MCoDL]ET$HU2m!6$
+XSiF(KH&DfTB"EZd_o+@CDsD.7F(A7]e"AnHIS<.0p0>9J/5Gp$C@P#Z`LF*Nj2Gp%0RP!+s2A
+8-',F(B!*P!+s2H]gXBP#QjmAWe!q$'G[Z5*C%AGT_6e!KmJH1G="rH&)Ka!Ko5lF<GfNGp$sK
+H"U]1L]N[TOu$r`EbceB+F/<s)i+KW4aW>WI?IP_H'1@S1G=!95*@^H+F,)HG^3q5F<G[gD0q'
+=G_cB`WJLS1!.0kgGp$s<F(0'.A7]e.P!5%OP!FGY<0DBPP"9P+G^,#FP,W\^!KmJ>!H;atG_c
+B`WI'dfGp$s<F(0'.A7]e.P!5%OP!FGY<0DBPP":B0P!44GBp(ZC1MItW+Dkh6@W-9tATErQHZ
+UBE+F,)HG^4@AF<G9?Gp%?WBl8**Ecc_m<,!J#L]N[<D0U>=ATT&:P&4nUH&)KaWGQ?j@W-9tA
+TErQOp$,G+F/bDP,Wkm<,!J#L]NY>D0U>=ATT&:P&4nUH&)Ka!GuOl@W-9tATErQOp$,G+F/bD
+Oo]uo<.0p#I?IQXP%Bf!OuS6tP"Ur>P'&F'0p4_`1G<u-P!5$bOuSUaP%'4JP,X6<P!5%&H]eG
+nFYA"qP!5$b06f785*@^H1*CfrP#-LM0o,mU15GsoWI&nF+DkV)ARTU9I?I-LP#Q]^+F,]):j[
+IBL]ViWL]N[<H[%9.5&FeGARTU9I?I-LP#QZ]+F#W(Ap\bWM#MWSL]NY>H[.=gD.@Bn@<+2QP"
+:"a<-^5AGqkIoH[.?%rcp8T!KmJ1GVP@FD.@Bn@<+2QP":"a<%iJN+F#Z)1G=#.+F,`*1OYEXO
+uSV6L]N[<L]ET%P"^:e%[&V$F(KH%DL#`1Ci=?@04AaD@rH1%EfrVL1LY0H@rH1%Efsmf#*M,r
+NX.`i+<VdL+?kSeP,4<ZOuS6u@;^@#Des?4P'N3GP!=;J!<83?I?I0bSUHZ#@;^@#Des?4P%'4
+QP!+/P$9TFR+<VdL+<Wk($Bh6K)3Qt8!F]kk@rH1%Eft^216OkKL&h7:2LU`[P*:<W<.0o>Ou"
+b%Eaa0.@<lF)HS9>PG]ReDBkJQ-Bm=]^1G<]]G]T$3Ou"b1Bm=\A>9Im!G^,#GOo]oc!.C#_L]
+DC.G^(?MBm=]^@Yb&JWI'F$P!3i!G]T$3E+sQAP"_#?P')Q\I?I-?Bm=lY!g3S2L]DjdK3aWr0
+5tWMGT^s>G^,#GOo^_%05tWMGp%'?G^5)HOo^_%05Vh9+E2%>F-:!ZL]DjdK3aWr05t?ABQG;#
+L]E53E+sQBL]N[<HS9,s5*@^X!/LYpBm=lY!KsF/056S5Ou$epC*7bHB4Z1@!KoTmBnueQWG74
+iP,WPD@:NksP#Qjm8:?Xl?'6usE+sQA+E2%>G_cEaWKK%jE+sQB+E2%>H&)NbWKK'#DfB-,BQJ
+MRE0<DJ1G<QUDBNn]@ZiNd+DbV,L]N[<P"Ur>P'(`"!0U!<!g7\^!/LYlAT!;)P,Wd]Bp(ZC1N
+4INL]NY>Ch7LIC6D5Q!g7\^#)N8ALPQ+s=D;YgF)Z/2@:X&-"HllC"Gm)@LQZ7rOo]uXP,Wkm<
+JUd6!Kr4o"Hll$DJO<4Eb/ZiG)-9a=GR*9s,r/#:j\?+I=%-VI?ITd"Gm)@LQXi?Bm=od5*DmZ
+L]ET$H]i/mH]hleP#Zpn8<OaOFcpm1FcplqP"Cg'05tWMF!,F9G]ReDBkNSbI?G)'1G<9Z@<ZN
+rH"D#,Dfg&I05tWMF)Q)5B-;/-G]T$(05tWMF-8_M1Ql[4!/LYpBm=]^@Yb&JWI'dfE+sQAP%l
+XpP!5$bE+sQAP#<rYP!5$bGT_8SG^3q5FGKs\4aVF256(Z`Oo]N9G^1EWP,X='!!!"^WKM%AME
+_(@!0RA%Bm=nGH'5.a56(Z`P,X='!!!"5DJO<4Eb/ZiP,X6;L&ktN"auP5I?I-a68*:lG]P!HB
+m=];EbT0L1OYDrOu&7r055<>F)Z/2@:UKpDJO<4Eb/ZiL]W_tOu"b*DJO<4Eb/ZiBHV#,CNFH8
+ART+_L]W_tOu"b*DJO<4Eb/ZiFs(L:CNFH8ART+mL]W_tOu&7LP-&qBA9;K-E+sQAOuA+eP&+f
+CBkM+$+E2%>H'1(A8<RePMhh@h!0V,:Bm=lY!0Ui2Bm=kFE+sQBP%0:JE+sQBP%0Xj@UWb^B6%
+p5DId6qCi=?S"a+^(ATX)PH]h-5@:O(cEc6)<A7KOoDfQtAATV?uH"1c/DfV"-P"g@f<+Bi_Df
+T]'E/k*EDKBB2P!+.F@rH1%Ec#6(+?VcB!FfJX@rH1%EZdP0Ou%NL<+Bi_DfT]'E-i^KATV?uH
+"1c/DfRLHAU0G&Ou$;bE+sQ<HQ[*8H'1=;L]MpNL]Djd<IL$%>p*ZrFEDeT+CoM$GAL]5ATD="
+FE;kW+CoM$GAL]5ATE3^<IL$%FCf]=@rH1%EfL<GDKBB2P&5PfAU&<,Des?4+EM+9@;^@#Des?
+4I?IQDDI[L*A7]joG]\9TFCf]=G[YE&B5W_5F`)83FHSe/AU&<B@;KXjDN4mCDKBB2P!+s2@;L
+ %-AU&<W!0TL."FDeCL]ESo04o*^!0T-[G]\:ZI?I0X!g4FBP&6@GAo<cKP&bo*!g4ESF-8_M1
+G<?XP!5$bP)as;P')q1I?ITnCQb?=P"C(KFCf]=AoDR/+EV1>FE;/BAWi'^Cijc1G]\rGP!+.F
+FEhmM>9J$4FF/fDP"U.MP"C(b8R7K806D8WEZfIKFHU*rV33Wj!/LYtG]]*XL]N[<H]g@1G]]*
+4P"Tn<FE30>L]NZoP'DD<8:>h<FE;PE+CT).FCf]=Ou%NL<HN;(Efsmf!0TKlL]DjMP"q0YL]E
+52P&$'Y0P4a0F(LLHP&lE^L]NZoP')q1P')p^OruDS@;0V$<-`FoP$iX"+>6Q"Bl8#lH#R>X98
+EY44ahZh@;L!rI?ITn+>6Z8Ec5`)=(u2eBTcbd"FH:S02lt5DeiocBk2=!P"UT4OuA*rP!5$O0
+1KktFA61cEbTc]99M5s30J*@5*@mgCm"g?EH6/a!I^,1I?IS`FCf]=@<5piDKM%*Ou"b5AU&<@
+Bk2=!+EV[HEg!;_F`_\HEfsmf!KsF(AU&<0@;p:NCm"g^1G<i]G]\1LDf[%CAU&<ADe<U&ATT&
+>+EV1>FE_G0FD-i:L]W_tOo^_%FCf]=G[YE&B5W_4Ch74#P!+.FFCf]=G]7SB+EV1>FEh_9Aoh
+O*Ou%NL<-2\rFEh51BkM=D"`e<iBQTD#HS9JPG]\1LDf[%G+EV1>FEh_9AohO*P,WP7G]\.DA9
+;LJWKK&cP#QO7G]\1=Ch[O"NX'K7Ao)$jFHSe606CcMFEhbCF!,R9G]\.DA9;K-FCf]=G].2+F
+(KHV!Kq>`1OYEcFCf]=G[YE&B5W_8De<U%BkM+$P!+.FFCf]=G]7SB+F##NAU&<ADe<U&ATX(9
+Ou%NL<-2\rFEh51BkM=D#ASC&FD5?4P!*nuG]\.DA9;K-G`l[%"FDeDAU&<AE,TfR!0T,kFCf]
+=B45b#+F##NAU&<@Bk2=!P,WPEFE3ORL]N[<OuAIZI?IP_FCf]=H#R\C+EV1>FEqe:AohO*+EV
+1>FCB6#ASuUQ!Jgc>!Kq>`1N[2QFEq;2BkM=D"^tkYG%Hh"HS9JPG]\4MDf[%CAU&<BDe<U&AT
+T&6Bm=od!Jgc>!Ko6eP#QO7G]\4>Ch[O"NWs!)DKKH1P!+.FFCf]=H#R\C+EV1>FEqe:AohO*+
+E2%>Gp%3?G][A8@qBP"P,X6=OuAI(Ou%NL<-2\rFEhbCF!,R9G]\4MDf_(WFCf]=B45b#L]DO<
+FE3NOI?ITYP#RT=Ou[rR%[&V$Eb0-*@<?O(G`k%LA1r(@/n8fPFCfK5H"(o:FDl%L@WuO*E$/\
+&Anc-oEb0<1F`Lu'P')pJ06:]HE+*6lBl7RH\pKT_F(KH4@:O(eDJ+B\;u~>
+% uk.co.terryburton.bwipp/renmatrix 0.0 2018052000
+%%EndData
+%%EndResource
+%%BeginResource: uk.co.terryburton.bwipp dotcode 0.0 2018052000 299580 311511
+%%BeginData: 283 ASCII Lines
+currentfile /ASCII85Decode filter cvx exec
+06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6 Eckq9F
+(KH4@:O(eDJ+B\< /:R <23Kp PEa`[ 'A S#n &Df V"#0
+6M%_@rEuAATDg:@ Wc^5D f. 1:GA2 #8P1 l( DOu P+8AS u?n FE2)? OuP+
+;CG'+8/p(ZFEd;, :Ecc5 ;/n 0$= E,^u oP 'E- !04]!C @r GmhH\` B!2
+3JD%DfBf4Df0WZ5 *@]T@ UX: eDe * FB5 *@] TA8 c@-A9) +& +D,%uF (LL
+j061uTF,9jZ1G<6 VCisT 4F, 9jZ 1G <c WFD 5ZL s,o/kE +* d.AKYS nCi
+a0N1G<]UEcYf(DI Xf$@ ;L! rO u" b3@ <Wi +@; L!rO
+u"b'@<6N5AmoLsA Wei& D .. L$ M#W VoD fBf4 Df0WZ
+Y:js=EbTE(FEqh: P!+/J! Ko= ' %<$ 3- Bl@m 1H] kFA@;L!rP! +/T5^eepOuS
+V6P,4<rNWD;+NHB 2`AWf3 'Ot D h\P' )pOO u%N 5OtCcrF_-^ lI?ITYP%Bdt
+OuY16E-,f4DKCt) Ou%NL< ,Z_ tBl@ m1H] g15 P"@<IDg-7F Ec6/COt;bP0
+4Sp:F_u#;+Cf>+F _u#;O t;bP 061KC Bl>, 7@< ?4%OtVtS05 Y-=CERJ&F)-
+piOu%,eFD5ZLs,o NcDg- 8Ys,o O."Cl @dF _u#;M#WW$O p$+bEaa'(Dh
+nLO!g5I)1OYEcE+ *d.AU?( IF(ZV) @<,jr A7^ p5P,4<t05? :COu$QUEas#
+uAUBF<?BU:pOuR<"B9GGnP!5%SP%&0h!Jgc>!AA2N5*@^bFcn_?!/L`?9TgrDF(^Y"C5;nRWKK
+H.G`k%L@Yb,LWJCY>5*ATfH]g@*F(^Y"C6CcDH'2WOOo[4NP!5$b04J@1@rGmh+Dl14L]D1Q9T
+h2p5^eeqI?J/iP#O)D@<-0qDBNCsEas#uAWgMc1G<QQ@>OrH1G<QQ@Yk#H1G<QQ@u1)H1G<3OD
+M\4R1G<f]@>OfD1G<f]@YjlD1G<fY15Pah1G<fY1Pkgh1G<fY1l1mh1G<fY22Lsh1G<fY2Mh$h
+1G<f]@u0c?1G<fZ15POb1G<fZ1PkUb1G<fZ1l1[b1G<fZ22Lab1G<fZ2Mggb1G<fZ2i-mb1G<3
+Y@>O<61G<3Y@YjB61G<ie@>O641G<ie@Yj<41G<ie@u0B41G<ieF,9%C1G<?X0o5"U1G<?X15P
+(U1G<?X1Pk.U1G<6YCl%/81G<0ND2@581G<T!22L7T1G<T!2Mg=T1G<T"15OkO1G<TR@u0$*1G
+<6O@<-3nE-!.++BsXEL`h]Z0JHcT>E/_-NWC;`!\c?7+Bsj,,)u[JNWLmi>p*@3!@*U*,E;gZ1
+L2,-NWCDc!@3[,0Jm&X>E/_1NWCGd!\cK;+Bsj,-B8*RNWLmm>p*@3!@Nm.-]S6^2dIP1La\'-
+NWLmo>p*@-.>TF5!\cW?+Bsj,.ZONZNWLph>p*@3!@s02.ujZc0jPo+NWC\k!A'640f!#W>E/_
+9NWC_l!\lK:+Bsj,/rfrbNWLpl>p*@3!ABH609-)g2-h>/NWCho!AKN80fE;[>E/_=NWCkp!\l
+W>+Bsj,16)AjNWLpp>p*@3!Af`:1QDMk3F*b3NWCts!Aof<1,)uV>E/_ANWD"t!\uK9+Bsj,2N
+@erNWLsk>p*@3!B6#>2i[qp1L2,-NWD,"!B?)@1,N8Z>E/_ENWD/#!\uW=+Bsj,3fX5%NWLso>
+p*@3!BZ;B4,s@t2dIP1NWD8&!BcAD1,rP^>E/_INWD;'!\ucA+Bsj,5)oY-NWM!j>p*@3!C)SF
+5E5e$0jPo+NWDD*!C2YH1GW5Y>E/_MNWDG+!])W<+Bsj,6B2(5NWM!n>p*@3!CMkJ6]M4(2-h>
+/NWDP.!CVqL1H&M]>E/_QNWDS/!])c@+Bsj,7ZIL=NWM!r>p*@3!Cr.N7udX,3F*b3NWD\2!D&
+4P1b`2X>E/_UNWD_3!]2W;+Bsj,8r`pENWM$m>p*@3!DAFR99''11L2,-NWDh6!DJLT1c/J\>E
+/_YNWDk7!]2c?+Bsj,:6#?MNWM$q>p*@3!De^V:Q>K52dIP1NWDt:!DndX1cSb`>E/_]NWE";!
+]2oC+Bsj,;N:cUNWM'l>p*@3!E5!Z;iUo:0jPo+NWE+>!E>'\2)8G[>E/_aNWE.?!];c>+Bsj,
+<fR2]NWM'p>p*@3!EY9^=,m>>2-h>/NWE7B!Eb?`2)\__>E/_eNWE:C!];oB+Bsj,>)iVeNWM'
+t>p*@3!F(Qb>E/bB3F*b3Lg5a@NWM*m>p*@3!F:]d?&etE0jPo+NWEIH!FCcf2DSP\>E/_kNWE
+LI!]Di?+BsX%NWEOJ!]Dl@+BsX&NWERK!]DoA+BsX'NWEUL!]DrB+BsX(NWEXM!]DuC+BsX)NW
+E[N!]E#D+BsX*NWE^O!]E&E+BsX+NWEaP!]Mf=+BsX,NWEdQ!]Mi>+BsX-NWEgR!]Ml?+BsX.N
+WEjS!]Mo@+BsX/NWEmT!]MrA+BsX0NWEpU!]MuB+BsX1NWEsV!]N#C+BsX2NWF!W!]N&D+BsX3
+NWF$X!]N)E+BsX4NWF'Y!]N,F+BsX5NWF*Z!]Vl>+BsX6NWF-[!]Vo?+BsX7NWF0\!]Vr@+BsX
+8NWF3]!]VuA+BsX9NWF6^!]W#B+BsX:NWF9_!]W&C+BsX;NWF<`!]W)D+BsX<NWF?a!]W,E+Bs
+X=NWFBb!]W/F+BsX>NWFEc!]W2G+BsX?NWFHd!]_r?+BsX@NWFKe!]_u@+BsXANWFNf!]`#A+B
+sXBNWFQg!]`&B+BsXCNWFTh!]`)C+BsXDLjtEd3Ak(b>9J!!@N]0$ClSQW2I.G0+EM!IL^B(C3
+B(4d>9Iur1Pd$2!]`5G+Bot0@Pil]NWM4$>p*>oF(."_*arc"+C-*o+EM!M+EM.'+DbIp+C-*o
++DbIq+DbIp+EM.(+C-*o+EM$J+EM$J+EM!I+C-*o+EM$K+EM$K+EM!J+C-*o+EM$L+EM$L+EM!
+K+C-*o+DbIr+DbIr+DbIq+C-*o+D,LG+D,LG+D,LG+C-*o+D,LH+D,LH+D,LH+C-*o+D,LI+D,
+LI+D,LI+C-*o+C]D#+C]D#+C]D#+C-*o+C]D$+C]D$+C]D$+C-*o+C]&&+C]&&+C]&&+C-*qOu
+"b$BOPq)@;L!->DR9^22HC<22H782-lA$L]E53@q]:kD..C)P%'4JP,Wd]Bp(ZC1G<<W@ric&B
+OPpu@;p91Bp),P1Pc$e!Jgf(05?Y6Ou$Ze@ric-P"UrtP-6N[FE2)5B68E<AWf3'L]ET2I?IQ>
+BOPq)@;L!-C6D5Q5&$1)I?I-LP"75lG%#3.+Cf(nEctl-F,0gZ99M(a6?ZdRF!+t+@<-O"CibC
+5P"Uro6?ZdRF!,<R22G\(GX?R^Ci^_90K+_rP'B<:@;L!-D)!f%A!2('G%#3.+DkOsLh)Zn010
+nkCi^_/BOPq)@;L"@!g63>1G;'d:3L&^F!*S-Lh9j6F(6sJF(7!KF(7$LF(7'MF(7*NF(7-OFD
+YG/FDYJ0FDYM1FDZ(A?$h_uL]NY>OuRlQ8Wn3[5*@]TAo;+%@;L!-4?SW,7SZ<*Ao9>`"@c-R1
+1kDZNW_gH6Si=l1E\kFOu"b.F(ZV)@<-0qDNY<h1G<Hu!0T,kC5;kQ1OEgY@UX:nAT!YoH]gXB
+P#O)EBOPp(@UX:eDe*E%Bp),P1N6cCF(Js$@j#8p@<.01P!+s2BcpknEbo<)L]im?P%Kj[HX^E
+(@rGmh+DHW4Oo^_=LgH6]HS8lB@<*K&DI[iuCi^_.@<,jrA7ZltL]NY>L]il7P"Uro052PCL]i
+kAOu%N5052PCL]NY>Ou%NL<IL$0D0'>4C*7#"@<.NU052PCL]NY>Ou"b++DQ]5Oo^_%I?J.pD0
+'>4D0'?G!,@ZjOu"b.F(]<#DBNe;B9H_e1G<W6BkM.%F!+[0D0'?+AT!;)Oo]oc!.C#_?'6us;
+e:,`DKKH$DH(1b+Bot*F(]<#DMS=V!IJEeCia09P(R&'1G;0a8K_4[D0'?+AT!;)Oo]oA@;L!r
+I?K4gOu"aZ@<?X/5p0ASD0'?+AT!;)Oo]oA@;L!rI?K4gOu"aZ@<?X/66KJTD0'?+AT!;)Oo]o
+A@;L!rI?K4gOu"aZ@<?X/6QfSUD0'?+AT!;)Oo]oA@;L!rI?K4gOu"aXBl7@"Gp$<6D0'?+AT!
+;0Oo]oA@;L!rI?K4gOu"aWBOtU_6QfSUD0'?+AT!;)Oo]oc!.C#_?'6us<-!7O+Bot*F(]<#DM
+S=V!IKV&I?K4gOu"aWBOtU_5p0ASD0'?+AT!;)Oo]oc!.C#_?'6us6"jh<A3qDC+Dl14Ch7L?!
+KmJ1L]DjdK3aWr03)n3Bl$4UA5d&P+Bot*F(]<#DMS=V!IKV&I?K4gOu$rrB5D-sL]N[<M#W82
+HS9)r5*@]T@UX:eBOPp(D0'>4Bp),P1Lad5@q]:kLbOua@UX:eBOPq;3Kdg6"FG#SBkM.%F!,0
+>DFA2OBlnD=BnueQ!Kp*3!KmJHG^Y`S6$?[QF!+q#EarckEfsgW6t(1[D*]:Y+EVXHAWh:dP#O
+bk@;L!-@UX:eBOPqE@!b:MFEMFe+DDs?EckrVG^Y`S01/W27Nc;OCia0N1Lad5@q]:kL^fM1Bc
+q86B5D-sL]N[<P%Kj[HYmh:+DHW4Oo^_=L^K;.HS7`a9L^.HEckrV1OYEcI?IPs;G9Q,+@KX[F
+_sGfBcqM<F_-_\I?IQI6tp:JFE8R=P"UT4P"L'h@<?X/6Qg(cFE2M8P'DD<<+99V@q]:kL]ETM
+HUM:aF_sJgBcqM<F_-_\I?IQ=@<,jk@<.)&J<ENO6>:=GEd8dA+EVXHAWh:dP#Q<eBkM.%F!,1
+[98Eq<8pbD`Ebce7F(ZV0L^K;=OogehL]MjY0Tp:"AmoLsAWf<,P#R5lP&5PX@;L!rP!FGY<0D
+BeFcpm1Fcpm1Fbhu>D0ol'Cia0N5^eepLbY'0HY-]&F(LM"I?IQOEckrAP(Q\EG%GQ5AS#aYAS
+rW)L]`J5P)#3FOqW8,<,P*<B5)I/+DHW4Oo^_=L^'#7D0'>4Bp),$DDIA<Op$,#6V/D7+EVXHA
+Wh:dP#Pn!EarckEej^YAn#1h@q]:k+D,LIP&6?bHU2=V@:V_JBco]TART+:+DHW4Oo^_=L]NY>
+P'DD%DFA2OBlnD=Bp),F!Kpl<6"jh<A4%JRL]ET_I="7nART+:+DDraBOtU_6Qg*!!g3SI98EV
+3!Kq\UP#Zpn<Gk3=B5)I/+DI!3L]ET76"jh<A4%JRP"S)SART+:+DHW4Oo^_=P#.;EHW5$26Qg
+(c6"jh<A4%JRP"Us_I?IPt@<?X/5p0m)92oqW6Qg*+98EY4As*:+@<,jk@<*K&DDRGmOp$+tBO
+tU_5p0ka6"jh<A3h>PL]NY>P"UT3Oo^_jI?IPt@<?X/66L!*92oqW6Qg*+98EY4As*:+@<,jk@
+<*K&DDRGmOp$+tBOtU_66Ktb6"jh<A3qDQL]NY>6W-TIH\_]c!I^,1P"UT3Oo^_jI?IQ=@<,jk
+@<*K&DDRGmHW=s*Bl$4UA5d&P+DDruDKKT/7;cX7AS3-"L]NY>P"UT3Oo^_jI?IQXP"75lL]ES
+o01(HqOu"aYL]W_q01&6*L]`er04AC%FDkZ5F*j'0@s<!W5&-6EP'J]qP!5%<C6AU\1OYDrOu"
+b#@<6!82*#bs0ebD1055<e5*@]TBl7`uDBNY2P%'S1055;H>DNGsDJWm%P,Wea!.C#_Bl9(8P'
+(&n1G<ZhFGL-a$'I(tD0'0-+Bot&DMS:K!g66?!g7\3Ou"b.F(986>9Id(@WR\6P')pOL&hC>C
+m"gT!dg(iLhDlcP!4\7P#?^kK3aWr05P]=F!+[0Bl8_.L]`f6Oogeh?'6usCia*-+Bot)F(03R
+!g7\h5)'(?P&-9^P!4O!!<rjnCm"gT"+-1jLhDlcP!4\7P#?^kK3aWrCia*-L]ET2D0'3.L]ET
+2LanR(Oo]KDFGL*V!g6ZAB9I"mG_g!q;J^DaF,0j[99K<mF(99I!0U!27$;AL!GumfF,0j[98G
+'\Cm"g;F``EBL]W`ALhDlcP'DdqP#?+;@rmG-P"Ur=D0'3.L]ET2Lg6*ZOo]E@@rmG,P"UU!P&
+-9^D0'3.L]W`4LanR(Oo]KDFGL$T!g6ZAB9I"mG_g!q;J^DaF,0p]99K<mF(99I!0U!2&!Cal!
+GumfF,0j[98Hi9Cm"g9F(99I!g6347$;AL!H3+&L]WA6P$!NQP%p/)LhDlKD0'3.L]NZ3L_#Yb
+Oo]E@@rmG-P"UU9P&-9^Dfp/X!Jgf?=GUUQC6EgtB9H/0F(99I!g634&!Cal!H3+&L]E55M#WW
+nLhDlcP'CnfFGL-8DJWm%P,X6<P,W/5Ch7L?!KmJH9RW'6Ou"b'Bl7?qBldiP8PXUT@W67,L]E
+TTHX_/,CibC4@W67,P"]=nF(I*a3HT0o0JejnP'&EeE,TfR!0T-dP#Qjm%[&V$@:WnjDdmEuHQ
+Zd@@;L"J5%8JLF-8_MGV<NFDf[%1E,TfR!KmJH1Lb<AF,1!_4aUdTDII?qF(I[0:48:)I?G)'1
+G;0a8RZ(<HQ[0HB-:oE!KmJ>#*MZ9!0TNmLbP!kOo^@GP&,Q08Vd_:;Na"q.$@2LLa\FcOuS1N
+iK@)p.$=Uo5)(fNP%p.>LiJSUP!4\AP%oE.<.0o>Ou"a[6V1a$DL3L1+Dl14+DHW4Oo^@CP"^Z
+3P!45K0TrDu!Jh)GCjhI<L^K;COuS*p!<<+_8pc9n!g5a13.q84!!&0[P!4O!!<<+_C6CQ2!<A
+9\P!4U$!0V)FH]g@C!<A9TH\MP%P!5$gL&h:;;Na4u!<A9tI=$\L!0TNoP#Zpn<F'qo@:WnjDd
+mEuI?I0MOq*X204f$26[OUiHYFUDAS6(+@<-IQ4aVtcHYFUDAS5RlA;CJRWKL))L]ET'I?IQHF
+(ZV:AS6(+@<-IQ98Hf8D0q'=P!FGY<,H\h+EM+,F*(i2FGKs\!Kp*3.?\OpL]ET'I?IQHF(ZV:
+AS6(+@<-IG!g3SI98GcpD0q'=P!FGY<,H\h+EM+,F*(i2FGL$^!Kp*3*g1AeL]ET'I?IQHF(ZV
+:AS6(+@<-IG"HieK99M8j0Tp%25);4^:m,jGL]ET'I?IQHF(ZV:AS6(+@<-IG"d/nL99M8j0Tp
+ %25);4^:m,jGL]ET'I?IQHF(ZV:AS5RlA;C8LWKKo1"HmVKL]ET'I?IQHF(ZV:AS6(+@<-IG"
+HieK98G9bWJCnECi+6++EM+,F*(i2FGL*`!Kp*30TrDu!KoF*3/@a$D3@)G3/@d%D3@)=%$GIj
+"Hin7P'(VMA!0**P#Q:>B-;8,B6/0'Ecd*AOo^_=L`MXqH]iN-!0TTqP#Q:>B-;8,B4YskL]Wa
+=P"UTPP&5Q/Fbg$\5^eepOuS7$P!+/TF_rfiP!FGY</:aA4aV$"2Ng=RP#Q9Q16OnNP(PE%DJ`
+flP!5$bBl7cr@u(,JD0mpQDe*E%6BX-/+@:6[Ci^_5DJ`flP"T('@:WnjDe"!4052PC+DG_1@:
+LEs@:PI;H\_oTH\_lSP#[YGOu&7dI?IQXP#Q-<F(K!*FCB33P!+/06tp:JFE8R=P"UT4P"L(*+
+@C<\Ci^_2DD@;I>p*QdA9;a"GB81q<,H\h+DI!3Ao9>d4`3Z%B5)I/+DHW4Oo^_=L]W`3Op$+b
+Bcq,G!KmJH1OYEcI?IQ.AThX&FCf$$<+TqiBp),9>9H:V@;L!-@;0SA95S`_+DHW5Oo^_=LbP!
+kL^K;]D0'>4BnukS!Kp*30TrDu!Gumj+DHW7Oo^_=LbP!kL^K;]D0'>4BnuqU!Kp*30TrDu!Gu
+mj+DHW9Oo^_=LbP!kL^K;]D0'>4Bo!"W!Kp*30TrDu!F6gVA7Te#@s;uIBcq,G$BbFQ1Qk"OP#
+OhXFEMFf+DI!3HYmh:+DI!3OuR&k0p4\_5*@m;DDIA<P!3Jq1QjnaEftHi>9H:V@;L!-D0'>4B
+p),P93iZKA7Te#@s;u:770WhBp),9>9H@%8RZ(<+C-*uA7Te#@s;uIBcq,G#Ef+N1Qk"OP#Q:>
+B-:oO94i&tP!*ktB6/0'Ec`F<P&6?bHS9(UBnueQ!Ko5lBl7cr@u(,J1G<f\B6/0'Ec`F<Ou"b
+4AS5RlA0>S/<GlnmCdi5P;e9SaBp),P!Ko7%5^eep052PCL]NY>Ou&7dI?IQ6+Dl14+DI!3LbP
+!kL^K;]D0'>4BnueQ!Kp*30TrDu!F6gVA7Te#@s;uIBcq,G!g3SI1Qk"OP#Ob^DIIR2+DI!3HY
+u5cB5)I/+DHW4Oo^_=L]ET7HYmh:+DI!3L&dm0Ap[`)6ZumSF!+q5@?O8LG%#3.+Dl14+DI!3L
+&caeWKKn[+CSekFDkZ5F+&BX>9H:V@;L!-@WQ"A91!f1Ci^_9F(ZV0P"UN0J<Hmp93iZKA7Te#
+@s<!BP#X/L+DHW4Oo^_%P!FGY<*LJ4G%#3.+C]&&P"T('@:WnjDe"!405YW<AKX<2:6IDr5^ee
+p05VgtBOtU_5p0m)99M(aDBM5YART+9+DI!3Ou$qtDN[hC>9H:V@;L!-Cggb893iZKA7Te#@s;
+uID/Wrr+@2/HP!FGY<,!IrAS6(+@<-IQ4aV$eB-:oO99M8j$'IH75*@m]*0NIJ5*@m]*KiRK5)
+:8C4d'iKEftHi>9H:V@;L!-Cggb893iZKA7Te#@s;uID/Wrr+@2/HP!FGY<.0p/DMSFY:jZCh6
+ZumSF!,:-@ZjAi+CSekFDkZ5F"_BKA7ZlMOu&7dI?IQ6+@C<\Ci^_'+EM.(+EM!I+EM!J+EM!K
++C-+-L]N[<P"Us2>p*QdA9;a"GB4mEHQZN86?ZdRF!,=@B-:oO99MqR+CSekFDkZ5F"_5MBnue
+Q!Ko6eP(So_I?K52Oq*X204f$26@4LhHS97Z<-!7O+DI!3Ou%!3!g60&DMSFY:jZCh6?ZdRF!,
+:-A!0Jj+CSekFDkZ5F"_BKA7ZlNOu&7dI?IQ6+@:6[Ci^_'+EM.)+EM$J+EM$K+EM$L+C-+-L]
+N[<P"Us2>p*QdA9;a"GB4mEHQ[0HB-:oO98ES2Ap[`)6ZumSF!,=@B-:oO99MqR+CSekFDkZ5F
+"_5MBnueQ!Ko6eHWqV0F(ZV0P"UTbP,X6EP&+uVB-:oE!KmJH98G9bWKI9f+CSekFDkZ5F"_5M
+BnuhR!Ko6eP#ZpnK9AKJP#OhXFEMFe+DI!3HYmh:+DI!3OuR&k0p4\_5*@m;DDIA<P!3Jq1Qjn
+aEftHi>9H7U@;L!-D0'>4Bp),P93iZKA7Te#@s;u:770WhBp),9>9H@%8RZ(<+C-*uA7Te#@s;
+uIBcq,G#Ef+N1Qk"OP#Q:>B-:oO94i&tP!*M%F(K!*FCB33P&6?bHS9(UBnueQ!Ko5lD/Wrr+@
+D;J055<@@:P)nOu"b4AS6(+@<-H4Bp(8*F(JuqDIal(+B<<$Bl$4UA5d&P+DI!3Oo^_%P!FGY<
+ %hr.BnueQ!Ko7%5^eepD0'>4Bp),F%?`kg+Dl14Ch7L?!KsFFAs*:DD0'>4BnueQ!Kp*3$BdQ
+!>9H7U@;L!-@rcCK93iZKA7Te#@s;uIBcq,G!g3SI1Qk"OP#Qjm<*LJ3G%#3.+Dl14+DI!3P"T
+('@:WnjDe"!4052PCL]NY>Ou&7dI?IPrBl7@"Gp$ga97''8FEMFe+DHW4Oo^_=HYmh:+DI!3L&
+dm0Ap[`)6?ZdRF!+q5@?O8LG%#3.+Dl14+DI!3L&caeWKKn[+CSekFDkZ5F+&BX>9H7U@;L!-@
+WQ"A91!f1Ci^_9F(ZV0P"UN0J<Hmp93iZKA7Te#@s<!BP#X/L+DHW4Oo^_%P!FGY<*LJ3G%#3.
++C]&&P"T('@:WnjDe"!405YW<AKX<2:6IDr5^eep6"jh<A3h>PP"UT3P!+.r+@:6[Ci^_?Ampi
+q6$?[QF!,=@B-:oO99MqR+CSekFDkZ5F"_5MBnueQ!Ko7%5^eep>9H7U@;L!-Cggb893iZKA7T
+e#@s;uID/Wrr+@2/HP!FGYK7/mmOu"b&DIYtZL]MiUDBMo!Gs`]gP"UroDMS@W8pbH3"HlT.>9
+H4T@;L!-Cggh:93iZKA7Te#@s;uID/Wrr+@D;JP!FGY<*LJ2G%#3.+Bot0An)s)@ko0J@l#6K@
+l,<6+Duu9P,XU;P"T('@:WnjDe"!4+DuNKD0'>4Bp),F!0Ur@>9H:V@;L!-D0'>4Bp),P93iZK
+A7Te#@s;uIBcq,G!KmJH1OXUS+Dl14+DI!3LbP!kL^K;]D0'>4BnueQ!Kp*30TrDu!F6gVA7Te
+#@s;uIBcq,G!g3SI1OYEdI?K5G5^eep6t(1[D*]:YP"U.=F(ZV0P"UrtAo9>d4d&!l3+d%`P!+
+slAo9Df4d'iKEdM"56$?[QF!,=@B-:oO99MqR+CSekFDkZ5F!*n=8K_`197'kc770XT@UgNd+C
+SekFDkZ5F"_5MBo!"W!Ko7%5^eepD0'>4Bp),$DDRG=BcqJ.B6/0'EcdI]Op$+bBcq,G!KmJH1
+G<T`A7ZlNOu"b*DJ`flL]ESo06:];F*(i2F<G:\1G<f\B4Ysk+DDruDKKT/7;cX7AS3-"P"Ur=
+Ou&7dI?IP_Bcq,G!KmJH1Qk"OP#PX.6$?[QF!,=@B-:oO99MqR+CSekFDkZ5F"_5MBnueQ!Ko7
+ %5^eep6>:=GEd8dAP"U-i@<?X/5p0lt!KmJH97(MsB-:oO983G>P%K&F+@10ZCi^_.F((5)6$
+?[QF!,=@B-:oO983FsP,XU;>p*QdA9;a"GB81Z+BosSG%#3.+C]D$P"S,b@;L!-D0'>4Bp),D!
+.^63P"T('@:WnjDe"!4I?IS`Bcq,G!KmJH1Qk"OP#PX.6$?[QF!+q+DN[Xu+CSekFDkZ5F"_BK
+A7ZlM8PYF)P!FGY <%i,3 6"jh< A3qDQ P" Uro DMSL[ :jZCh6
+$?[QF!,:-@ZjAi+ CSe kFDkZ 5F"_B KA 7Zl MOu &7dI
+?IQ6+@10ZCi^_'+ EM.(+ EM !I+EM !J+E M! K+E M!L+E M!M +C-+- L]N[
+<P"Us2>p*QdA9;a "GB4m EHQ ZN8 6?Zd RF !,= @B-:oO 99 MqR+CS ekF
+DkZ5F"_5MBnueQ! Ko6eP (So _I? K 52O q*X 204 f$26:j q! L]MiUD BMo
+!Gs`]gP"UroDMS@ W8pab bAn c-k Ch [s %6: jop >p*QdA 9; a"GB4m EL^
+0)>HWqUZ8PXG;Ci ^_@D .A` %? '5 4AD /Wr r+@ D;JP
+!FGY<*LJ38PXG;C i^_' + EM $J +EM $K+ EM$L +EM$M
++EM$N+EM$O+C-+- L]Wa=P "Us 2 >p* Qd A9;a "GB 4mEHQ[0HB- :oO98ES2Ap[
+`)6ZumSF!,=@B-: oO99Mq R+C S ekFD kZ5F "_5 MBnueQ!Ko6 eHWqV0F(ZV0
+P"UTbP,X6EP&+uV B-:oE! KmJ H98G 9bWK I9f +CSekFDkZ5 F"_5MBnuhR!
+Ko6eP#ZpnK9AKJP #Ok;8 K_`1 91!?1 @<-W 9Bo !"W!Kp*="F F>q770XUBl5
+&!+CSekFDkZ5F"_ 5MBo! "W!Ko 6Q+Dl 14C h7LI4aUBUA nc-kCh[s%6:
+jop>p*QdA9;a"GB 81q<0BL pP#Q:> B-:oO 98E S28p`m=DII R2+DI!36>:=
+GEd8dAL]NY>P"UsY6>:=GEd8dAL]W_?P"UsY6>:=GEd8dAL]`e@P"UsY770WhBnueQ!Kp)BBl7
+@"Gp$gW#a,4O99KF@EdM"5D0'>4Bp)+tA7Te#@VK^&>p*QdA9;a"GB5EO+DHW4Oo^_%Bcq86B5
+D-sP!+.r+D,>*@;KY!AO8s`+C-*uA7Te#@s<!BP#RT0I?IQXP#PX.Anc-kCh[s%6:jop>p*QdA
+9;a"GB4m@+Dl14Ch7L?!KsFFD0p,@B-:oO94i&tP!*M%F(K!*FCB33P&6?bHWqUZ8PXG;Ci^_@
+D0(k5>p*QdA9;a"GB5EO+DHW4Oo^_%05YW<AKX@'1G<H[D.-q1!0T,kF(K!*FCB33+DHup06:]
+;ASu$$BcpDnFD5P[DIc[WB-:oO99K==1Qk"OP#O_\ART+8+DI!36"jh<A3qDQP"Us7HWqUZ8PX
+G;Ci^_@D./T#>p*QdA9;a"GB5ESDe*E%6'=$PHWqUZ8PXG;Ci^_@D.8Z$>p*QdA9;a"GB5ESDe
+*E%6BX-QP#[Z1I?IQm5^efJI?G)'1G<6^F!+q#Ebo<)L]W`UL]NY>OpR:-05YW<AKX@'1G<3\@
+;L"@"d01T1G<3VDf^^7Ou"b*DJ`flL]ESo06:];F*(i2FGKp[1G<f\B4Ysk+B<<$Bl$4UA5d&P
+L]ET2Ou"b*L]ESo05?:COu%H!+Dl14Ch7LI8pc^dI?IQDDJ`flL]ETTHYIA7@:LEs@:PI;BcqJ
+.B4YskL]Wa=P!+s2HS9(UBnuhR!Ko6Q+Dl14Ch7LI8pc^dI?IQXP#Q.5D.-osD.-q;4_Z$[AS5
+RlA;C8LWKKE-"FDe9+DHW4Oo^_%Bcq86B5D-sP"L(a5^eepI?IQXP#PX=ASu!D04f$268)nf@m
+_n\DIZ"):*<gbD/WrrP"UsKP!=AXAM7P;F!+t:F,0g2P"_#p05b;C@s<!W@ZiN#D/!lrEb/Z%D
+IeP*Oo]H2L]W`;Oo^@FP&,pUOo^@?P&-:;Eaa'(Di"FVD0mpLB6585Bl7@"ARQ^%@<?4%Ou@B$
+EcdI#06_,@+Dkh1@<,pf+ECn4BlB/NF)c5BOu"b)+D>D0Ot;bP06\O_Bk3AXOu$boGEMu_!g7;
+S!KoTmBHVM^Ci*m(@<,pfP%K%oBHUuE!KmJH1G<qpGDH9_!Ko6eP#QjVBP2E0GEQcdBk/?"P&-
+:nHS9RcGDH9_!Ko6P+ErubD/!lrEb/[BApZ1T+ErVBP,XU#05)JAL]NY>Ou$boGEQcZBl7@"AR
+Ua6HS9RcGDH<`!Ko6eP#Qjm<.0*HBHUuE!KmJH1M@nTP&+uLDIIQs@?P5L05)JAL]N[<Ou"b8+
+ErVBOo^_%BHVM^Ci*m(@<,pfP%K%oBHUuE!g3SI1OYEcI?IQXP#Zpn<A/B2GB4m?Ou"b$DesQ5
+DK?qEOu%N5@rH1+D/OENs,oNl04Sp:F_u#;+Dkh1@<,pf+EDCEF-6Q[!KsF&Dg-8c;Na"[Dg-8
+c!Jgf?C5;kQ4aVtcOo]uo<0B%cP#QI?GB8T?P!+.FEc6/C+Dkh1@<,pf+Cf>+F_u#;Oo^@>P,V
+r0CisT4F-9Fa3+HlCF_u#;Oo^@?P%odQP!+/J!KmJ3P#RT#I?IQXP#X/QA8cR2+EDCEF!+t2Ci
+sT4F-:?q!g6HE1OF"ML]NY>OuS7!P#@)<Oo^^HL^B5\L]W_?DId[-F-9@HP!FGY<%i-"+Dt_G!
+KmJH1OYEt05b8BDIeP)P#@)<Oo^_%05btVDIal-A!-kU1G<c[D.74$F!,@2Dfg%CDKgmCP&,pU
+Oo^`FOu$ud+CfV:P%'SNHS8lQF!+[0@s<!W!g7\CDe*E%6:jq84aW!%I=$cbI?ITJA0>B+F-:!
+qWJCS<WI'G9I?K4gOu%NL<%hg#@ribsNX7Eo0eb=90eb>B#r"(f0eb=90en[p0JP790JP:90oc
+Po0eb=:0JP79NX7Bo0eb=90eb>B#r++g0JP790eeUo0eb=90ek@:0THGo0JP:90eb=9NX7Ep0J
+P790JP8A#r"(f0eb=:0eeUo0JP790eb=:0THGn0eb=:0eb=9NX7Bo0eb=90ekAB#r"(g0JP:90
+eeUo0JP::0JP790THGo0JG480eb=:NX7Eo0JP790eb>B#r++f0ek@:0JSRo0eb=90JP790ocPp
+0JP780ek@:NX7Eo0eb=90JP;B#r++g0JP:90JSRo0eb=:0JG480ocPp0JP:90eb:9NX7Ep0JG4
+80eb>B#r+.g0eb:90JSRo0ek@:0JP780ocPo0JP790JP::NX7Bn0eb=:0JP;B#r"%f0JP::0JS
+Ro0JG490JP790ocPo0JP:90ek@:NX7Bn0ekC:0eb>B#r"(f0JP790en[p0JP780ek@:0ocPo0e
+b:90ek@:NX7Bo0JP780ekDC#r"(f0ek@90en[p0JP790ek@90ocPo0ek@90eb=:NX7Bo0eb:90
+eb>B#r"(g0JP780en[p0JP:90ek@90ocPo0ekC:0JP79NX7Bo0ek@:0JG5A#r++f0eb=:0eeUo
+0eb:90eb=:0THGo0JG490eb=9NX7Eo0eb:90ekAB#r++g0JP::0JJLn0eb=:0JG490THGo0JP:
+90ek@9NX7Eo0ekC:0JP8A#r++g0ek@:0JJLn0ek@90eb=:0THGo0eb:90eb=9NX7Ep0JP780ek
+AB#r+.g0eb=:0JJLn0ek@:0eb:90THGo0eb=:0JP78NX7Ep0eb:90JP8A#r+.h0JP780eeUo0e
+kC:0eb=90THGn0JP790ekC:NX7Bn0ek@:0ekAB#r"%f0ek@:0eeUo0JG490ek@:0THGn0eb:90
+ekC:NX7Bo0JP::0eb;A#r"(g0JG490eeUo0JP:90ekC:0THGn0ekC:0JP:9NX7Bo0ek@:0eb;A
+#r"(g0ek@90eeUo0JP::0eb=90THGo0JG180JP::NX7Eo0JG490JP;B#r++f0JP::0JSRo0eb:
+90JG490ocPp0JG490JG49NX7Eo0JP::0JG5A#r++g0JG180en[p0eb=:0JG180ocPp0JP::0JG
+18NX7Ep0JG180JP;B#r+.g0JG490JSRo0ek@90eb:90ocPp0eb:90eb:9NX7Ep0JP780JP;B#r
++.g0ek@90JSRo0ekC:0JG480ocPp0ek@90eb:9NX7Ep0eb=90JG5A#r"%e0eb=:0en[p0JG180
+eb=:0ocPo0JG490eb=:NX7Bn0JP::0eb>B#r"%f0JG490en[p0JG490JG490ocPo0JP::0JG49
+NX7Bn0ekC;0JG5A#r"(f0JG490en[p0JP:90JG490ocPo0ekC:0JG49NX7Bo0ekC:0JG5A#r++
+f0JP::0eeUo0eb:90ekC:0THGo0JP::0eb:8NX7Ep0JG180ekAB#r+.g0JP::0JJLn0ek@:0ek
+@90THGo0ek@90JP:9NX7Ep0eb:90eb:eOu%,sGB8QAP%odQP!+.FF(ol1A7oIp+Bosm+Cf>+F_
+u#;L]N[<Ec6/CL]Wa=>p*@-!-3"%F,0m\WEgWN+Cf>+F_u#;L]Wa=Ec6/CL]N[<>p*@-!HN+&F
+,0j[WEgWN+Cf>+F_u#;L]N[<L]C^'>DN98!*p^QOu%N506:iPARoFbF!+[0>9IEoCisT4F,0m\
+WJCO[+BosuDesQ5DKCU8P,WJ?GB8Q@P,V_0>9IEoCisT4F,0j[WJCR\+BosuDesQ5DKCU7P,WJ
+?GB8QAP,V_0>DN98!*p^OL]DI6GB8Q@P,V_0?'7!lP#X/GD0C7K@rH1+D/OEXCm"gIOq*X205k
+uTCh[cu+EDCEF!+t2CisT4F-:@&$'I*#!/LYrDg-8Y!KsF/06r^EOu%moL]M"(CisT4F,0j[WI
+$:CP!5$bDfp/<Bl7K)GT_8SA8QK4GT_9p!Jgf?C5;nRWKMLSP":"a898KiARoFbF*f$JF`_G6D
+IntpOogehA8QLG!Kq\UP"@<:Ch7$q@rH1106iXDOu%3#F_)\?L]NYAL]VU8GB8Q@P,WeQP!3Dn
+Fs(jOD3@)G98EV34aW?7AmoLsAWf<,P#Qjm8:?X2Ou"b$Ch7$qEc6/K06r^EOu%3#F_)\@L]NY
+AL]V()CisT4F,0j[WI&n5A8QK4F*VVc5*AQp!KoTmP'(AFCia0N5^eepI?I-LOq*X204f<8Cia
+l=@W-(006;DUP!5$b06_>TF**'8R$N5b1Ktu+06i9Q>p*?)G_cB++BpLEL]C^'>;(8X!F6gRH]
+eGnFY@?CP!5$b04\d;P!5$b06;8QL]ESo04np=F**6<Ou"b-@<6OHs,o0o!/LYdBlYkOP!+/%D
+esQ5DKC5Q+EDCEF+'3OL]N[<HXpi2P!5$bF*VUFA8-(IA7TCp06iXCHZF%KF+&BX@rH1+D/OEC
+P#[;=P,W&0P&+ZCE\D^$4aW>UI?IQ?D0D(8L]NZ%HY-u4F**6<P!+.FAnc:,F<G+.Efssr1OYE
+c05P'<F<G+.Efssr1G<flD'3nBD284U!Ko6eP#Qjm898oj+DbJ-FHQZ:Bl\9:P,Vu+E\D[#4aV
+3fGB81Z+Cf>+F_u#;I?ITnCm$c%DfTo@P%K%oGAhMCFHShN1OXV5Fa]EQI?I/TE+NpC!0T-YDg
+-8Y!g7;S!KoTdDg-8Y%$G%^EdKH\F_up7Ou"b1L]ESoL]N;4@rH1+D/OEN!g9O0@r,^bEas$(H
+S9G_D'3nBD284U!Ko5lE$04ED284U4aV3fGB81Z+E/HDDg-8cCjhIHOu%N506;8QL]ESo05tK?
++E1n0+E3JEOu"b1L]ESoI?ITYP"76FASrW0ASrW0Oo^_%I?IQMDg-8Y!g7;S!0TKTDesQ5DKCU
+BP$sMoHS9G_D281T1G<^'!0T-o!JgbsDg-8Y!g9O0@r,^bEcQ)BHS9G_D'3nBD284U!Ko5lE$0
+4ED284U4aU[WCisT4F+&BXE$/Y/CisT4F-:?fP#[Z$I=!VgF_up7Ou"b1ASrW0ASrW0Oo^_%05
+u^IOu%NL<IL$$05tK?+E1n0+E3JEOu%NL<%i<<D/^V%+Cf>+F_u#;L]ikAL]W`UH\_ZMP(SPj@
+rH1+D/OD;F*VVc@Yb&JWI'F$P!4[%P!3r4D3@(mDesQ5DKCt7OogehL]E52I?I-2DesQ5DKCU:
+Oo^@?P&,K$!.C#_?'6us@rH1+D/OD;@rH1+D/OEN"HieK1G<ceGB4mIDg-8Y"HieK1G<flD281
+T1Pc*g!HN+&F,0p]WI$:DP!5$bH&)Ka"Gd,B!JgeeDesQ5DKCU9P,Wd]G`k7R1Pc'YF*VVA+F&
+\CP,W__!KsEmD0D(8L]NZ%H]gXBP#QLJD/^VBL]NY>H&)KaWFTjhP"UT3P!+/T5^eepF*VVA+F
+&\CP,W__!KmIoD0D(8L]NZ%H]gXBP#QLJD/^VBL]NY>H&)Ka!G$%jP"UT3P!+/T5^eepF*VVA+
+F##S+Co>4P"UT2P!+.FF*2=BF*2>U!KmJH1Qk"OP#QLJD/^VBL]Wa=Gp$X7G*5LS!KoTmP!FGY
+<-*>%E$0BJH&)NbWFTjhP"UT3P!+/T5^eepF*VVA+F&\DOo]hNA8QLQ98EV34aW>WI?IQNH#7L
+CGT_9f!g3RpD0D(8L]NZ%H]gXBP#O)UF_r7BF_up8Oo^_%I?K52P":"a82"IkCisT4F!+t2Cis
+T4F,0s^WKK%jEc6/C+EDCEF,0s^WKK%jAT23uL]ESoGAhMCFGKp[4aVtbF*VVY!+Tq`F_u#;P"
+^4c!I^,&L]ET$HS8rLASrW%E+Np?!!.hIOo^_%I?IQc!-<F&+EMgFP%%p>CisT4F-<M4DesQ5D
+KCt7H]eDXP"CH0P!+.FAT23u+D#M'DM.ul%7$'WOu%NL</:O1!+Tq`F_u#;+EMgFP%'4JP,WeL
+H#8^.P"Ur=I?I-W!0TKl04f*6DBNM0AT!/$"r`#T!Ko6eP#R5;@rH1+D/OEN!KsElDesQ5DK?q
+AH#8^RL]N[<HZOILP!5%%Oo]uo8;I8/4aShnE+No0AT23uKE)E<!0RAG1OYEcI?IQRDfTo@+EM
+[B+EM[BP&-;\E+NpMWF^$[DN^uIOq*X2062,BCi<r/>DN<9E-ma-L]`fVLiJSmI?K4gOu"b4FC
+fD6DKgnUP#@):Oo^_%05kH7F(KH?+EMX9E0>$YFCB33Oo]uo%[&V$@V'V&F(9-/AVBme*s%N\0
+5Y-=CNCV8@<64?s,q5G>9IckF))n(I=!)K@<6O;+BsX(L]WA5L]C_/HQZOK!/LZ3!f-qaI?ITY
+P#[Z$05P?ED..L$F,0s^$'I)]@<64*HS95EF)-q&Ou"b3F(9E8+Bot*@<63,>DN98",I2<&R?M
+r@<64I98ERXGB8+e!KpQJ!Jk`YC6Cc:!g6ZK!KoX&",Hu@LOG=WP')q1DI\$L!.C#_?'7""!/L
+YsFCfEI!KsF/06;5DEcdI.Ou"ad6m-AXL]NY>F*(i2FHWVEFCfES!Jgc>WH3/mE0=+^1G;L)+D
+uCZ!KmJ)FCB33P,WMEAT3e5L]N[<F*(u4P#@H!02=kW:0/Q57$=O41G<6VAS,Oq+BsX&:.'Aa!
+.C#_?'7""!JgbO6[LJ#P!5$b:.'j;L]MiUC6CcD1Lk?7AnH*,C*7#)AS,Oq+DR'4LiJRYEcYZ*
+DeC2,P"T;'AS,Oq+DQ]5P,XU;P&,qoP%p/ZLiJSmP'DD<8:?XlL]E53:.0m=P,Wd]FHSh.F(9E
+8P!3erAohO*P"Th:@s;u::.-4CAnH*qFHT:[!Jk`YC6CB/!/LYN6\kf,WI$:5P!5$bEcY`7F!+
+4G+DR&?De<U&ATT&8F(9E8+AP<IC6AUR!KmJ%AnH*qFHT:QEKU?E+Cf>$AnH*,C5;nR!Kp*=Cl
+!(oC6GQPEKY("G^Y`GEcY`7F!+4G+AP:e!Jgc>WGcB\F(KHLEHE=5De3NmF!+4FP"UsSLiJSmP
+,X7WP%p/)I?I,r7#1k==,6m?WI'dfEcY`7F-8_*AnH*qFGOpWF(9E8L]rV7P)!sfAohO*P"Ut;
+LiJSmP'DD<8:?Xl04JX;F!,@2Dfg&`V33WDBlnEP!*bHb0JJLg0JSRh0eeUh0elrVD..L$P"Us
+`L]N;4DKgF\Bp(ZC1Lb'?F!,1Q!KsF<$'K+\!g3RqDI[`1EcY`7F!,1[99Mr2H$tiHEb0)sBln
+EP!0U0*@VKq*+DuCZ$'K+\!g3SE&MZ!p0ekC;0ekC;0ekC;0enIaEb0)sBlnEZ9Tj[LP#O)RBm
+=\ADfp/<Bl7LF30Ia6$'H0h1G<]cF*NK@Ou"b1Df^1HEc6/CL]W`SL]ET$H\_ZMHZF%KF,0j[W
+I9q0Ou$Q]FE<6<@VKq*P%'4OP,XU<H[B^GG]P!HDf^.GE,TfC+Co>4P"UW2P!+/T5^eepEc6/C
+L]W`SL]ET$HS9>VF*SmIDf^2[!KmJH1N78RGp%-GGB8p1HS9>VF*WQAOu"b1Df^.GE,TfBL]NY
+>Ou%NL<.0*HE,TfB+E27?G_cB`!Ko6XDf^.G@rH1+D/OEX4aSi$Df^/Z!0T,kE,TfC+E27?H&)
+KaWKK&cP#Qjm<IL$AE+sQ<+E27?GT^sDF*Sm=D0C^;M#WWnLbP!kP'DD<8VdA&!Jgo+056S5Ou
+ %&kG]P!KBm=3"B4Z-,Bp),P!g7\:D0@%2BlnD=@VKq*P%'4OP,W/Y!Kp*30TrDuG^Y`G06:WA
+Eb-A4Bm=\AAThKuF*VV3DetRmF(9-/AKYGnF*)J5DfTEP:jXj)ATMs7H#4[CBm=]^1G<3KF*)J
+5DfTD3F(9-/AWei]@<6N5@V'V&F(9-/AKZ#3GB4m:DesQ5DKCtWL]W`;P#.;EH]gXBP#Qjm<%i
+'%FDYH-CERS1G]T$-P%'R\Or9E=L]E53L]r,YBp(ZC1MgcID..L$+EM7AARoFbF!,1[99K@>F_
+#?4L]NZ`I?I-;Bln3#F),h>D..L$+Dbb6D..L$P'CSIF*)a^F(9-/AKYf'FDYH-CER23@;L"1D
+.7F"Ou%/hDfTD3@V'V&F(9-/AWfl:04JL6FE;_E+Dbb6D..L$Ou"b#ATMs7@rHC!+EM%2Eb1Ci
+@V'V&F(9-/AKZ#3GB4m:DesQ5DKCtWL]W`;P#-Lg5^eepI?IQXP#Qjm8M>$sG]P!:ATMs7H#8^
+#Amob&P&OlAF*)J5DfTD3Ec6/C+Cf>+F_u#;P&,pUP#@HOOp$+b@V'V&F(9-/AVBme*s%N\D..
+L$F*f$GBln3#F),i[5*APlCh\!.@<64I5*@]TF(9-/AKYf'FDYH-CER23@;L"1D.7F"Ou%/hDf
+TD3@V'V&F(9-/AWfl:04JL6FE;_E+Dbb6D..L$Ou"b#ATMs7@rHC!+EM%2Eb1CiI?IQXP"@<GB
+m=\A@V'V&F*VVc1OYEc4?P9;ASs.SEb0-*@<?O(GV<TGFEDdNFE2M805tWMF!,F9G]PNWBm=kF
+@rH1+D/ODJE+sQB+EDCEF"_3<BkM+$+EDCEF,0m\CktWF2D98gA9;K-@rH1+D/OEN!g7AU8<Pk
+aDfBe@DfBf4Df0V=5!C*"Df0Z-Eaa0TE%`kbASu?nFE2)?P#RT)I?G)'1G<9WFCT6"AWf$9A1r
+(@/n8fPFCfK5H"(o:FDl%L@WuO*E$/\&Anc-oEb0<1F`Lu'P')pJ06:]HE+*6lBl7RH\pKT_F(
+KH4@:O(eDJ+B\;u~>
+% uk.co.terryburton.bwipp/dotcode 0.0 2018052000
+%%EndData
+%%EndResource
+%%EndProlog
+%%Page: 1 1
+gsave
+2 2 scale
+0 0 moveto
+<5468697320697320446f74436f6465>
+<696e6b7370726561643d302e3136>
+/dotcode /uk.co.terryburton.bwipp findresource exec
+grestore
+showpage
+%%Trailer
+%%EOF
diff --git a/graphics/pstricks/contrib/pst-barcode/doc/images/gs1dotcode-1.eps b/graphics/pstricks/contrib/pst-barcode/doc/images/gs1dotcode-1.eps
new file mode 100644
index 0000000000..5d7260d509
--- /dev/null
+++ b/graphics/pstricks/contrib/pst-barcode/doc/images/gs1dotcode-1.eps
@@ -0,0 +1,769 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%BoundingBox: 0 0 120 34
+%%Creator: Online Barcode Generator 2020-12-28. https://the-burtons.xyz/barcode-generator/
+%%CreationDate: 2020-12-28 22:54:10
+%%Pages: 1
+%%LanguageLevel: 2
+%%DocumentData: Clean7Bit
+%%EndComments
+%%BeginProlog
+%%BeginResource: Category uk.co.terryburton.bwipp 0.0 2020122800 30005 33214
+%%BeginData: 7 ASCII Lines
+currentfile /ASCII85Decode filter cvx exec
+P1OerF_-`n01TSk ATDK p010/ iAS5q %H '6m E30Ia ,!KmJH
+23Ji?3%mj@F*(i. @qA VbE+L \DATV m" @r# drB 9KiQ
+P'&Es@:O(aA79M! @<ls? E+ OHE04 AmA@ <l s?E +OH\< K_S [F_`U >D_?
+-CEcQG7F`MSBDD# CBBlJ $S4 tf9 3FCf *' Ed8 d<AS,X oA TD@'Df p)1
+AWh2!hZ~>
+% Category/uk.co.terryburton.bwipp 0.0 2020122800
+%%EndData
+%%EndResource
+%%BeginResource: uk.co.terryburton.bwipp raiseerror 0.0 2020122800 39417 39248
+%%BeginData: 10 ASCII Lines
+currentfile /ASCII85Decode filter cvx exec
+06:]HE+*6lBl7RH \pKT _@s)g 4ASuU /@ :O( eDJ() 6Eckq9
+F(KH4@:O(eDJ+B\ </: R<23J D%Ea` [' AS# n&D fU1I
+,\;":DfV")04f0E DfTQ0 Ao EhrP' A6`E cQ )=P !1O1E cQ) =DIIB nP!5
+ %R,\;":DfRL@Df '?"DI eoM P'A 6`Ec Q) =05 b?FATD g0 EZfIEF _-_
+\P+mA/04J@1@rGm h+C0> WEK W,+ P "Cf HOu "b3 @;0doA TD g0EfrD FA1
+r(@/n8fPFCfK5H" (o:FD l%L @Wu O* E$ /\& Anc -oEb0 <1 F`Lu' P')
+pJ06:]HE+*6lBl7 RH\p KT _F (K H4@ :O( eDJ +B\;
+u~>
+% uk.co.terryburton.bwipp/raiseerror 0.0 2020122800
+%%EndData
+%%EndResource
+%%BeginResource: uk.co.terryburton.bwipp parseinput 0.0 2020122800 58913 58556
+%%BeginData: 32 ASCII Lines
+currentfile /ASCII85Decode filter cvx exec
+06:]HE+*6lBl7RH \pKT _@s)g 4ASuU /@ :O( eDJ() 6Eckq9
+F(KH4@:O(eDJ+B\ </: [?23K pPEa` [' AS# n&D fV"#
+06M%_@rEuAATDg: @Wc^5 Df .1:GA 2#8P 1l (DO ps'`@ <-F #Bl7m 4FF/
+fJOu8C304o*3G%# 3.P!5 $b0 4J@ 1@rG mh P!5 $b05t? ?F (LLoOu R&k
+@s29sF-8_M99M)C DI[iu Cib b'P - cl] @<- F#A o;+A30 H7 5DI[iu Cib
+b'P"UroAo;+%@;L "J5*E 9+E +*d .A T) I&H '1. M3+d& <G %#3.P !5%
+:Ou$]f@s29sF-8_ MZnH !# Bp (H =3+ d&< G%# 3.P!
+5%:Ou$]f@s29sF- 8_MZ n H9 ;B -:Y lEa s#uA WgMc$
+'I(tC5;kQ1Lad5@ rGmhH] A,5 P )YV gO uSV6 P!3 `(B9GGnP!3 *55'q^@8R7L
+)C6ATNC6CcD1OG: -L]MjA @<- F #P&P AKEc Yf( DI\iKOp$,K F(ZV1LgH6h0
+5;VEL]NY>Ou&7dI ?IQHF( ZV1 LgH6 h05; VEL ]NY>Ou%&cE cYf=OuSV6L]
+`f4H]g@E!/L`?9Q Y;tAW f6(O uS7O P%Kk @Lc LVpP&bo4F_ 5&uF(Kc_<.0
+p$H]g@E!/L`?9Tg ri3/. G5P#- LgFcp l#@ WuO*E%YjBG %#3$A5@5VBl
+7?qNZ(]6A8,piC` mS;F*&O 6AKWZ\ 0HbIU +>P f30/%?SBld isEcQ)=P!=A
+X<%hu/C5;nRWKK&SF(^Y"C6CcDGV<eSC5;nR!Ko7%30Ia,"-TX>"-Pj29RW('I?IQXP#QC/EcY
+f1DJXS@E+*d.AS,giP&QS)D0'>4C5;nRWKKo1?BT/gEdNs7I?IP_C*78I!KsFF1Qj_\@Yb,LAp
+]\`04K->E,[FOEcl80@<?'k7SZ=2*(G'g@ruF'DBNG&@<,ddFCfJ8FE2MA@psIjA1oTV@;0doA
+TDg0EfrY8P#RT(L]ET2LgH6-HYmh:+DQ^=P'AWp+DQ]5Oo^_%OuSV6L]N[<L]NZ&P"_$(I?IQm
+3/@Qj"-Q?<"%>RKP!*AdBp&UGOuSV6L^B5VH]iM)@WuO*E%Z6QF`(\tFCeuO6V3:I770WhFE2M
+A@psIjA1oTV@;0doATDg0EfrY8P#RT(L]`G;P"_#uH]g@E0Tp%25);4^:m,jGP')q104K->E,[
+FDDK]H)Bk0Y"8WFcZ6V/D;F`VXI@V$Z90JG170HbIU+?;GB3B9)Q061K8F(Jp'Ec5u]5CJ\oI?
+I0X!0TNmLbP!kP,X6EP&,Q08Vd_:;M5#\69p^5D0'?Q5&-6EP'AWp+DQ]5Oo^_%OuSV6L^B6DL
+^B5.P"_$(I?IQm30Ia,"HmADP'&EeGA2#8/p),VDI[*sARn8*6]N-UF`(]2Bl@l3@q]:k@:OCj
+EZfIEF`(\tFCeu9061K8F(Jp'Ec5u]5CJ\oOuS6tL]il7OuR&k@s29sF-8_M@$5JUOuSV6L`DQ
+YP,4=$L`D3RM#WWnP'N3ML]EGT<GlSiDg-(AAp&!$FD5Z2+Cf(nEa`I"ATBgSP'N3SP'&EeGA2
+#8/p2&IDJs`:7SZ=64teR0@;0doATDg0EfrY8P#Q%2@s29sF-8_M95S`_P!3WD5*C.DC*78I!K
+mJH1Qj_\@Yb/MWJC\?5*AU&5^efJI=%,BI?ITYP%AT@EcYf1DJXT]E-lGCB8?P&P"^:NC6GEL!
+/LYjL]N[<H\_]c=HYk23,N_LP!5%%P'DD<8:?Y$Ou[qp04J@1@rGmh+C0>WEKW,+P"CfHOu"b1
+@<-F#Bl7m4FHSVHA1r(@/n8fPFCfK5H"(o:FDl%L@WuO*E$/\&Anc-oEb0<1F`Lu'P')pJ06:]
+HE+*6lBl7RH\pKT_F(KH4@:O(eDJ+B\;u~>
+% uk.co.terryburton.bwipp/parseinput 0.0 2020122800
+%%EndData
+%%EndResource
+%%BeginResource: uk.co.terryburton.bwipp gs1lint 0.0 2020122800 239217 234917
+%%BeginData: 277 ASCII Lines
+currentfile /ASCII85Decode filter cvx exec
+06:]HE+*6lBl7RH \pKT _@s)g 4ASuU /@ :O( eDJ() 6Eckq9
+F(KH4@:O(eDJ+B\ </: U=23K pPEa` [' AS# n&D fV"#
+06M%_@rEuAATDg: @Wc^5 Df .1:GA 2#8P 1l (DO ps'WF "qK FDKL5 ]'Tt
+>:%52m5Cibb'Ou" b"Blf G$O u"b -Bl8 $1 F_t ]1Bk)K 4F E2M8P! 45U
+3/B8OAs,?63Kd4% EdNsl Amo LsA W f<, P#Q jm8 Wn%>P' &E eGA2#8 /k8
+hpDJsVlF_t]1Bk* /2:2b 4sD KTf -E bT #q@ ;L! rP!FG Y< .0o>O u"b
+-Bl8$&F(KGQ14(- cEck rV 5' r( dP, 4=$ L]E 56M#
+WWnP'E!b+X/3Z-R ^Dn. k E8 )0 /,+ 91G gsI2 `NfY4
+$5Yi5=%V'6q'R88 4cEH9M J8X : f1+ h< )lt# =BS g7@:E_WAS, RgBkhF"D/O9
+2EH6,BF`qtRH$YW ;P)YWD H]i N 7F_5 &uF( LM" I?IQmFcpm1 Fa]EEP&Pc2F
+Y@3JBlJ#D7oM-O@ :V`(78 u6% @q]: k@:O CjE fM#/DK]H)B k/>R;ajY.3&
+2UdBOPpi@ru:&Am oLsAW f<,P #Qjm %[&V $Ch [d/@rl4'1H Be)FE2M8P!4
+5K!Ks:B3/@Qj"Gm )@LQZ nB-R1 2r0JP ==1 c70M3&s8k6 UX@47n?3D92
+&&T:Jand;cHat=' /U/P!5% gP&Pc2 FcplZ @;L !rP!FGY<0D BeFcplqP"Cg
+UH]iM)@WuO*E%XXZ0k+R%6W6EQ1HArY@<,ddFCfKQ)+e^h@;KXg+@B'r<$3tW+Cf(nEa`I"ATD
+BkCia0N5^eepI?G)'1G<QYDKKZ*H$b]6P%'4KP%K'(Fcpl#@WuO*E%XXZ0l(?G<,Z\RBQ%p5NY
+"ipGp$gB+EVO?+EM47Ecbo%Cia0N5^eepOuS6tP"UrtLbP!(P!4[^P#.<^P!4[&P"UrtLbP!(P
+!4[^P#.<^P&bo4FY@3JBlJ#D7oM-O@:Vkq:lZGhDf..EF_t]1Bk&8qDf'H%DL!@DEb/isG\1B#
+F(LM"I?IQXOq*X205P??FD5T2DfTr2EbT'/H]C?C0JP==1c70M3&s8k6UX@47n?3D92&&T:Jan
+d;cHat='/U/?X[DRA7]@cBPD3sCi+'.E,fo>FEMbNG^4Uu5*CngE-majP'&EeGA2#8/k8hp@UW
+e=D/aE6FCfJaDId='NYY3(G%#3$A0>T'E,Tc=ATAo-DId='AmoLsAWf<,P#RTeP')q1I?G)'1G
+<QYDKKB0F_uIJD..I#P!5$gP%'4KP%odQP!+/J"+>NP!I^,2P!45K0TrDk!KpQJCm$u<"Hks3W
+I9q$P')Q\OrK2XP,Wek!I^,`P!5%OL^K;[L]ETTH]iM)@WuO*E%XXZ0k+R%6YL%@CNFW8NXS6_
+A0>AqARfLsF_t`!Cia0N5^eepI?G)'1G<QYDKKT%@;^FT30Ia,"HmADP')q104K->E,[F";_`B
+4Dc:=fEcd<O8O>^<+EVO?+EM47Ecbo%Cia0N5^eepOuRQ(F_-_"H\_]cV33fo!/Lc6s,r/#G`F
+ %'0etOA2)[BQ3C,u!6q'R884cEH9MJ8X:f1+h<)lt#=BSgj5*CngE-majP'(AFCia0N5^eepP
+')q1P')298Wn%>P'&EeGA2#8/k8hp@UWe=6:"@VBOPpi@ru:&NYY3(G%#3$A0=H15u&P4BOPpi
+@ru:&AmoLsAWf<,P#Q:,Ebgh%D..I#P!45@P"CfUM#<EkOrKPjOpdF:P'),-0TrDu3/@m(:j\!
+'P,XU(L^K;CP!4[/P%oE.<.0p$OrKPjOpdF:P')Q\P!45U5)9Q/Cm"gT@?PARP"CH1P&5Q/FY@
+3JBlJ#D7oM-O@:Vqr5u(p'ARfLsF`!-T8O>^<+Cf(r@r$..D'3P1@rHC.ARfgo@;L!rP!FGY<.
+0o>Ou"b-Bl8$=ATD^9NWChsD0qFg04K->E,[F";_`T0Ec4ieEHPu9ARpf4>%M_m+DGm>Eb065B
+l[cqAmoLsAWf<,P#Qjm%[&V$Ch[d/DJsE=ATD^9+D,%uF(LLuH\aA=D0qFgFE2M8I?IQXP"CgU
+H]iM)@WuO*E%XXZ0m[DODbb4m:h=ZaBlnH.A<%:+ATD]3DJsV>E+O',BlnH.A7f7dF(LM"I?IQ
+XOq*X205P??FDc#CATD^.Eb/isG^GT5P%'4JP#.<*L]ET2LbOuTOp$,pFY@3JBlJ#D7oM-O@:W
+PQEc4cpAS,Y$NZ;56Ec3(>Eb/isGT^^A+Du+>+E1n4D/"*6ARoC]Cia0N5^eepI?G)'1G<QYDK
+L/LD/Ef;H]g@E!f-o@9Tgri3/@TuAs,?6%$FGMEdNsl04K->E,[F";__`iA5-u[FD-[D8T&][C
+h[E&D/X<6BP([hF(LM"I?IQm3/@Qj!g66?/<VuK'p>PZ3/BAR8pc_DL'MOX!I]<NcB;U_L'TW!
+!I]<L#LJV7I?ITYP#[Z)L&mC!C5;kQ4d&!l3/@^#C5;kQ4d&!bA<L\`!0V2^"Hme0L`_ETM#WW
+nH\`\jH\`YiP#[;[L`V?oL`V?oL`_EoL`_EoL`]oY!KpQ@!f-o@9Tgr_!KsFF99MJp"Gd,B9Tg
+riAp]\`04K->E,[F";__`iA40jONYG'&G%#3$A0>DkGp%$;+Dl%7FD,8pCia0N5^eepI?G)'1G
+<QYDKL/LD/EfoH]g@O@Yb5OD0qFg04K->E,[F";__`iA40jJAP?ZQB67gI(J/Lf@;KXg+DbV,B
+67f0AoD]4A79RkAmoLsAWf<,P#RT(L]iM8P"_#iL]NZNH]iM)@WuO*E%XXZ0k+R%6t(A$'M31c
+@;KXg+Cno++E(j7D/X<6BP([hF(LM"I?IQGBl8$<H#7D/0R])oOu"b-Bl8$+BPhU5OuS6tL]W`
+5Ot;D*P#-LgFcpl#@WuO*E%XXZ0k+R%88iWkNY>!%G%#3$A0>Q(F`JUCAftVmH"LK$F(LM"I?I
+Qc!f-o@9Tgr_4-EEeP'&EeGA2#8/k8hp@UWeABl8'8AW@[#DK]H)Bk/?'Bl8'8AKY])+EV:.+D
+>\9Eb8`rF(LM"I?IQXOq*X205P??FD,?+E-,r6F)u\k30Ia63/@X!D3@)G3/@^#D3@)=#*Nhd"
+Hin7P'&EeGA2#8/k8hp@UWeHBl.ETASu.&BT>,FDK]H)Bk/?&ASu.&BHUo*EZfI<D.Oi.AftVm
+Gp%<FFD)e8E-,f4DII?(D/!m/+CT.u+EM+(F(SisF(LM"I?IQm3/@Qj!g66?/;P+*:j\@JP'&E
+eGA2#8/k8hp@UWe<Dfp)\'1m(b@;KXg+D>\9EZf:4+Cno+AmoLsAWf<,P#RT(P%'4MP"L(a3/@
+Wl!g66?/;QBN:j\@JP'&EeGA2#8/k8hp@UWeABl8'8AW@[#DK]H)Bk/?'Bl8'8AKY])+EV:.+D
+>\9Eb8`rF(LM"I?IQXP#RT(P%'4OP"L(a3/@]n!g66?/;QBN:j\@JP'&EeGA2#8/k8hp@UWeGA
+RfXrA<%X$DK]H)Bk/?-ARfXrA0>T(+EV:.+Dkh1F`_2,@;L!rP!FGY<.0p/P')29%[&V$Ch[d/
+H"D&7DgRX,NWChsD3@)C!ATaSOp$,pFY@3JBlJ#D7oM-O@:V]CDerunDN5`4ASH7"ATAnI+Du+
+<+>G!NDfQtGATJu4EZf7<AmoLsAWf<,P#Qjm%[&V$Ch[d/GA1r*Bl7R1OuSI&0Tp:95*@mc!AT
+aSP!4m,3Ke6B"Hin7P'&EeGA2#8/k8hp@UWeKBl7HqDJ+tI8T&][Ch[E&GA1r*Bl7Q+A8-'q@r
+uF'DJ!<nF(LM"I?IQXOq*X205P??FDtr*@qBRjFDl80CjV=)P%'4KP%odQP&5Q/Fcpl#@WuO*E
+ %XXZ0k+R%:haKNAQ3Si@;JVKDJ+')NZ(K,G%#3$A0>i*ARf:)FDl80C`mP*DJ+')AmoLsAWf<
+,P#RT(OuSV6L]W`;L]ET%P"_#iOuS6tP!+/TFcpm1FY@3JBlJ#D7oM-O@:W2KARf:HF_tT!EfL
+i*DK]H)Bk/?*Bk:dc+Du==@V'Rl@;L!rP!FGY<0BG.30Ia,!g6HE30Hsu/<VuK!0TKlP')q1P'
+&EeGA2#8/k8hp@UWeDBk:dc<,ZkeClT3$DK]H)Bk/?.DffE(+Du==@V'Rl@;L!rP!FGY<0C()P
+'&EeGA2#8/k8hpE+rlnAOUiRAS#Cn<,ZkeClTE1Bk:dc+Du==@V'R&AU%]rARoj)FDl80Ch@*l
+F(LM"I?IQXOq*X205P??FDt`$DI\$?NWCGhNKS7-P')pQI?IQmFcpm130Ia,!g7/BP')q104K-
+>E,[F";__`iA5HiX@qBP"7<;sIE+P%@8T&][Ch[E&,p6c?@ps=fAmoLsAWf<,P#RT(L]E54P"]
+t<F_-_"H\_]cV33fo!/Lc6s,r/#G`EOn0etOA2)[BQ3C,u!6q'RR@Uiq[As,?@NKS7-P')q1Am
+oLsAWf<,P#RTeP')q1I?I0bE-majP'&EeGA2#8/k8hp@UWeDATD9lDKJ6Z@<-FL-V83!@;KXg+
+Cf(nEa`I"ATDi7AoD]4E+O'"ASuT4ASu!rA8,poAmoLsAWf<,P#QjmAUT^OOu"b-Bl8$&Dfp#;
+DI[TqAUBS_I?G)'1G<QYDKKB,F`;8:E,Tf9AnGUpH]iN"Oq*X2055KG@q-WD4<Ri]0JG=:0JGI
+>0JP770JP=90JPI=0JY=80JYI<0JYU@0JbF:0JbI;0JbU?0JkI:0JkU>0JkaB0JtO;0JtR<0Jt
+U=0JtaA0K(U<0K(a@0K(mD0K1[=0K1a?0K1gA0K1mC0K:mB0K:sD0KCg?0KCmA0KD$E0eb:70e
+bF;0ebR?0ekF:0ekR>0etF90etR=0f(R<0f(^@0f1R;0f1^?0f1jC0f:^>0f:jB0f:pD0fCd?0
+fCpC0fLd>0fLpB0fLsC0fM'F0fUj?0fV!C0fV-G0f^sA0f_!B0f_-F1,(L;1,(O<1,([@1,1O;
+1,1U=1,1aA1,:U<1,:a@1,CX<1,C[=1,C^>1,Ca?1,CmC1,CpD1,La>1,LmB1,LsD1,Ua=1,Um
+A1,V$E1,^g>1,^m@1,_$D1,_*F1,gm?1,h'D1,h*E1,q6H1-%*C1-%6G1GCL91GCX=1GCdA1GL
+X<1GLd@1GUX;1GUd?1GUpC1G^d>1G^j@1G^pB1Ggd=1GgpA1Gh'E1Gpp@1Gq'D1H$p?1H%'C1H
+ %3G1H.'B1H.3F1H7'A1H73E1H7?I1H@3D1H@EJ1b^U:1b^a>1b^mB1bg[;1bgg?1bgpB1bgsC
+1bpg>1bpsB1bq$D1c$g=1c$sA1c%*E1c-m>1c-s@1c.*D1c6s?1c7*C1c76G1c@*B1c@6F1cI*
+A1cI6E1cIBI1cR0B1cR<F1c[<E1c[HI1c[NK1c[QL2)$^;2)$j?2)%!C2)-j>2).!B2)6j=2)7
+!A2)7-E2)?s?2)@$A2)@'B2)@*C2)I!?2)I9G2)R3D2)R?H2)[3C2)[?G2)d3B2)d?F2)dKJ2)
+m9C2)m<D2)mBF2)mEG2)mHH2)mKI2*!BE2*!WL2D?g<2D?s@2D@*D2DHs?2DI*C2DQs>2DR*B2
+DR0D2D[$?2D[0C2D[<G2Dd0B2Dd3C2Dd<F2Dm6C2Dm<E2DmKJ2E!6B2E!<D2E!?E2E!HH2E*<C
+2E*HG2E*TK2E3HF2E3TJ2E3ZL2E<HE2E<TI2_[!?2_[$@2_['A2_[*B2_[-C2_d!>2_d3D2_m3
+C2_m?G2_mBH2`!3B2`*3A2`*?E2`*KI2`3?D2`3KH2`<?C2`<EE2`<KG2`<WK2`EKF2`EWJ2`N
+KE2`NWI2`NcM2`WWH2`W`K2`WcL2`WiN3&!$>3&!0B3&!9E3&*BG3&3BF3&<9B3&<<C3&<?D3&
+<BE3&E<B3&NBC3&NNG3&NZK3&WHD3&WNF3&``K3&iZH3&iiM3&rf<?$h_oI?I/c5*@]TCh[d/B
+le3&@s]>4F)PPuP!5%:P&Pc2FY@3JBlJ#D7oM-BDJO-.GA]cdF`);AH&`S=DJO-.GA\O5Dfor>
+Ed8d;De*Ek@;L!rP!FGY<.0o>Ou"b-Bl8$,F)PPuCh[s4H]g@O@Yb,LC5;kQD0qFgP'&EeGA2#
+8/k8hp6=FClDfor>Ed:>mF*()eDJ+')N[RY@F<G!7B6%p5E$0(2+EV:;AS!H(BkM.%+Cf>4DKK
+oE+Cf>#ATMHlCia0N5^eepFE2M8L]E55L]`fBP%'4JP,Wea!g6ZK5)9<(9PJQd@q1ZcP$jGlH]
+iN7F_5&uF(LM"I?IQXP":aTH]iM)@WuO*E%XXZ0i`+,DJs`:6Z7*bFE2Ye'NK$dDJs`:+Cf>4D
+KKoE+Cf>#AS,@eF(LM"I?IQmFa]D_Ou"b(F"q`]DKK<3+?Vb/>9H$j04T'7F>$BBD/!mD&he*1
+G_ctc@q]F`CEQh7Ch[d/@rld005P??FDGH5+C-*R4s4-k!\c<k5*@mgF^#tN4>12cATTS#05YE
+@L^l(T@<dS<04S[,@r!2k05P??FCTB7D(f^>DKKZ*Gp$B85!C)pNWLmhP!5$gNWLmiP!5$gP''
+tO4?P9,F(KGH=>+N*DMS<HD..[F'JEs0ARfKu>9I2o5!C)pNWLphP!5$gP''tO4?P9,F(KGH:+
+pHuDMSKMD..[F"tsJ"ARfKu>;'f,DKL/LD/Ef;+C-*R4s4-k!\lEm5*@mc!\lHn5*@mc!\lKo5
+*@mc!\lNp5*@mc!\lQq5*@mc!\lTr5*@mc!\lWs5*@mgF^#tN4>12cATTS#05YE@L]T5H@<dS0
+04S[,@r!2k+C-*R4s4-k!\uHm5*@mgF^#tN4>12cATTS-05YE@L]K/G@<dSB04S[,@r!2k+C-*
+R4s4-k!\uKn5*@mc!\uNo5*@mgF^#tN4>12cATTS-05YE@L]K/G@<dSJ04S[,@r!2k+C-*R4s4
+-k"#;YiP!5$gP''tO4?P9,F(KGH=>+N*DMS<HD..[F*\V#:ARfKu>9I2o5!C)pNWV$n0TnV_30
+"(r1bk.WOuSVI>9H$j04T'7F>$BBD/!mD!AA:uG_cPW@q]F`CEQh(>p)<p+C1!01,LbL5*@mgF
+^#tN4>12cATTS-05YE@L]K/G@<dSB04S[,@r!2k+C-*R4s4-k"#;\hP!5$gP''tO4?P9,F(KGH
+=>+N*DMS<HD..[F*\V#:ARfKu>9I2o5!C)pNWV$o0TnV_30"(r2)17XOuSVI>9H$j04T'7F>$B
+BD/!mD%52R,G_ce^@q]F`CEQh7Ch[d/@rld005P??FDGH5+C-*R4s2sM04T'7F>$`LD/!mD!&&
+1tG_cqb@q]F`CEQh(>p)<p+C1!01,UkN5*@mgF^#tN4>12cATTS-05YE@L]K/G@<dSB04S[,@r
+!2k+C-*R4s4-k"#;_jP!5$gP''tO4?P9,F(KGH:+pHuDMS`TD..[F%524)ARfKu>;'f,DKKB0F
+_rdJBl8$.AU,D(+?ht34?P9,F(KGH:+pHuDMS9GD..[F$nl+(ARfKu>9I2o5!C)pNWV$o23L.d
+30JDg+?Vb>@rl4'02=0;Bl8_-05Y-BL^5YDBOt[h+Boso+?ht3?&etB0TnV_30JDg+?Vb>@rl4
+'02=0;Bl8_205Y-BL^#MBBOt[h+Boso+?ht3?&f%D0eb;E5*@mc">_bd0p4_`30"+t0ebAG5*@
+mc">_bd1Qjqb30"+t0ebGI5*@mc">_bd23L.d30"+t0ekAF5*@mc">_be0p4_`30"+t0ekGH5*
+@mc">_be1Qjqb30"+t0ekMJ5*@mc">_be23L.d30"+t0etGG5*@mc">_bf0p4_`30"+t0etMI5
+*@mc">_bf1Qjqb30"+t0etSK5*@mc">_bf23L.d30"+t0f(MH5*@mc">_bg0p4_`30"+t0f(SJ
+5*@mc">_bg1Qjqb30"+t0f(YL5*@mc">_bg23L.d30"+t0f1SI5*@mc">_bh0p4_`30"+t0f1Y
+K5*@mc">_bh1Qjqb30"+t0f1_M5*@mc">_bh23L.d30"+t0f:YJ5*@mc">_bi0p4_`30"+t0f:
+_L5*@mc">_bi1Qjqb30"+t0f:eN5*@mc">_bi23L.d30"+t0fC_K5*@mc">_bj0p4_`30"+t0f
+CeM5*@mc">_bj1Qjqb30"+t0fCkO5*@mc">_bj23L.d30"+t1,(DF5*@mc">_ee0p4_`30"+t1
+,(JH5*@mc">_ee1Qjqb30"+t1,(PJ5*@mc">_ee23L.d30"+t1,1JG5*@mc">_ef0p4_`30"+t
+1,1PI5*@mc">_ef1Qjqb30"+t1,1VK5*@mc">_ef23L.d30"+t1,:PH5*@mc">_eg0p4_`30"+
+t1,:VJ5*@mc">_eg1Qjqb30"+t1,:\L5*@mc">_eg23L.d30"+t1,CVI5*@mc">_eh0p4_`30"
++t1,C\K5*@mc">_eh1Qjqb30"+t1,CbM5*@mc">_eh23L.d30"+t1,L\J5*@mc">_ei0p4_`30
+"+t1,LbL5*@mc">_ei1Qjqb30"+t1,LhN5*@mc">_ei23L.d30"+t1,UbK5*@mc">_ej0p4_`3
+0"+t1,UhM5*@mc">_ej1Qjqb30"+t1,UnO5*@mc">_ej23L.d30"+t1,^hL5*@mc">_ek0p4_`
+30"+t1,^nN5*@mc">_ek1Qjqb30"+t1,^tP5*@mc">_ek23L.d30"+t1,gnM5*@mc">_el0p4_
+`30"+t1,gtO5*@mc">_el1Qjqb30"+t1,h%Q5*@mc">_el23L.d30"+t1,ptN5*@mc">_em0p4
+_`30"+t1,q%P5*@mc">_em1Qjqb30"+t1,q+R5*@mc">_em23L.d30"+t1-%%O5*@mc">_en0p
+4_`30"+t1-%+Q5*@mc">_en1Qjqb30"+t1-%1S5*@mc">_en23L.d30"+t1GCMG5*@mc">_hf0
+p4_`30"+t1GCSI5*@mc">_hf1Qjqb30"+t1GCYK5*@mc">_hf23L.d30"+t1GLSH5*@mc">_hg
+0p4_`30"+t1GLYJ5*@mc">_hg1Qjqb30"+t1GL_L5*@mc">_hg23L.d30"+t1GUYI5*@mc">_h
+h0p4_`30"+t1GU_K5*@mc">_hh1Qjqb30"+t1GUeM5*@mc">_hh23L.d30"+t1G^_J5*@mc">_
+hi0p4_`30"+t1G^eL5*@mc">_hi1Qjqb30"+t1G^kN5*@mc">_hi23L.d30"+t1GgeK5*@mc">
+_hj0p4_`30"+t1GgkM5*@mc">_hj1Qjqb30"+t1GgqO5*@mc">_hj23L.d30"+t1GpkL5*@mc"
+>_hk0p4_`30"+t1GpqN5*@mc">_hk1Qjqb30"+t1Gq"P5*@mc">_hk23L.d30"+t1H$qM5*@mc
+">_hl0p4_`30"+t1H%"O5*@mc">_hl1Qjqb30"+t1H%(Q5*@mc">_hl23L.d30"+t1H."N5*@m
+c">_hm0p4_`30"+t1H.(P5*@mc">_hm1Qjqb30"+t1H..R5*@mc">_hm23L.d30"+t1b^VH5*@
+mc">_kg0p4_`30"+t1b^\J5*@mc">_kg1Qjqb30"+t1b^bL5*@mc">_kg23L.d30"+t1bg\I5*
+@mc">_kh0p4_`30"+t1bgbK5*@mc">_kh1Qjqb30"+t1bghM5*@mc">_kh23L.d30"+t1bpbJ5
+*@mc">_ki0p4_`30"+t1bphL5*@mc">_ki1Qjqb30"+t1bpnN5*@mc">_ki23L.d30"+t1c$hK
+5*@mc">_kj0p4_`30"+t1c$nM5*@mc">_kj1Qjqb30"+t1c$tO5*@mc">_kj23L.d30"+t1c-n
+L5*@mc">_kk0p4_`30"+t1c-tN5*@mc">_kk1Qjqb30"+t1c.%P5*@mc">_kk23L.d30"+t1c6
+tM5*@mc">_kl0p4_`30"+t1c7%O5*@mc">_kl1Qjqb30"+t1c7+Q5*@mc">_kl23L.d30"+t1c
+@%N5*@mc">_km0p4_`30"+t1c@+P5*@mc">_km1Qjqb30"+t1c@1R5*@mc">_km23L.d30"+t1
+cI+O5*@mc">_kn0p4_`30"+t1cI1Q5*@mc">_kn1Qjqb30"+t1cI7S5*@mc">_kn23L.d30"+t
+1cR1P5*@mc">_ko0p4_`30"+t1cR7R5*@mc">_ko1Qjqb30"+t1cR=T5*@mc">_ko23L.d30"+
+t1c[7Q5*@mc">_kp0p4_`30"+t1c[=S5*@mc">_kp1Qjqb30"+t1c[CU5*@mc">_kp23L.d30"
++t2)$_I5*@mc">_nh0p4_`30"+t2)$eK5*@mc">_nh1Qjqb30"+t2)$kM5*@mc">_nh23L.d30
+"+t2)-eJ5*@mc">_ni0p4_`30"+t2)-kL5*@mc">_ni1Qjqb30"+t2)-qN5*@mc">_ni23L.d3
+0"+t2)6kK5*@mc">_nj0p4_`30"+t2)6qM5*@mc">_nj1Qjqb30"+t2)7"O5*@mc">_nj23L.d
+30"+t2)?qL5*@mc">_nk0p4_`30"+t2)@"N5*@mc">_nk1Qjqb30"+t2)@(P5*@mc">_nk23L.
+d30"+t2)I"M5*@mc">_nl0p4_`30"+t2)I(O5*@mc">_nl1Qjqb30"+t2)I.Q5*@mc">_nl23L
+.d30"+t2)R(N5*@mc">_nm0p4_`30"+t2)R.P5*@mc">_nm1Qjqb30"+t2)R4R5*@mc">_nm23
+L.d30"+t2)[.O5*@mc">_nn0p4_`30"+t2)[4Q5*@mc">_nn1Qjqb30"+t2)[:S5*@mc">_nn2
+3L.d30"+t2)d4P5*@mc">_no0p4_`30"+t2)d:R5*@mc">_no1Qjqb30"+t2)d@T5*@mc">_no
+23L.d30"+t2D?hJ 5*@m c">_q i0p4_ `3 0"+ t2D?n L5*@mc
+">_qi1Qjqb30"+t 2D? tN5*@ mc">_ qi 23L .d3 0"+t
+2DHnK5*@mc">_qj 0p4_` 30 "+t2D HtM5 *@ mc" >_qj1 Qjq b30"+ t2DI
+ %O5*@mc">_qj23 L.d30 "+t 2DQ tL5* @m c"> _qk0p4 _` 30"+t2 DR%
+N5*@mc">_qk1Qjq b30"+ t2D R+P 5 *@m c"> _qk 23L.d3 0" +t2D[% M5*
+@mc">_ql0p4_`30 "+t2D [+O 5*@ mc "> _ql 1Qj qb30" +t 2D[1Q 5*@
+mc">_ql23L.d30" +t2D d+ N5 *@ mc" >_q m0p 4_`3
+0"+t2Dd1P5*@mc" >_qm 1 Qj qb 30" +t2 Dd7R 5*@mc
+">_qm23L.d30"+t 2Dm1O5 *@m c ">_ qn 0p4_ `30 "+t2Dm7Q5* @mc">_qn1Qj
+qb30"+t2Dm=S5*@ mc">_q n23 L .d30 "+t2 E!7 P5*@mc">_q o0p4_`30"+t
+2E!=R5*@mc">_qo 1Qjqb3 0"+ t2E! CT5* @mc ">_qo23L.d 30"+t2E*=Q5
+*@mc">_qp0p4_`3 0"+t2 E*CS 5*@m c">_ qp1 Qjqb30"+t2 E*IU5*@mc">
+_qp23L.d30"+t2E 3CR5* @mc"> _qq0p 4_` 30"+t2E3IT 5*@mc">_qq1
+Qjqb30"+t2E3OV5 *@mc">_ qq23L. d30"+ t2E <IS5*@mc"> _qr0p4_`30"
++t2E<OU5*@mc">_qr1Qjqb30"+t2E<UW5*@mc">_qr23L.d30JDg+?Vb>@rl4'02=0;Bl8_-05
+Y-BL^5YDBOt[h+Boso+?ht3?&etB2j-@f30JDg+?Vb>@rl4'02=0;Bl8_-05Y-BL^u.KBOt[h+
+Boso+?ht3?&f%D3A<.M5*@mc">`%l0p4_`30"+t3A<4O5*@mc">`%l1Qjqb30"+t3A<:Q5*@mc
+">`%l23L.d30"+t3A<@S5*@mc">`%l2j-@f30"+t3A<FU5*@mc">`%l3KcRh30JDg+?Vb>@rl4
+'02=0;Bl8_/05Y-BL]];?BOt[h+BpL8Bl8$,F)PPu+C-*R4s2sM04T'7F>$BBD/!mD!AA:uG_c
+k`@q]F`CEQh(>p)<p+C1!11H@0DP!5$gNW_-u0enhTOuSI)1H@0FP!5$gNW_-u0f+tVOuSI)1H
+@0HP!5$gNW_-u0f>+XOuSI)1H@0JP!5$gNW_-u0fP7ZOuSI)1H@0LP!5$gNW_-u0fbC\OuSVI>
+9H$j04T'7F>$BBD/!mD!AA:uG_ck`@q]F`CEQh(>p)<p+C1!11H@3EP!5$gNW_-u1,4qUOuSI)
+1H@3GP!5$gNW_-u1,G(WOuSI)1H@3IP!5$gNW_-u1,Y4YOuSI)1H@3KP!5$gNW_-u1,k@[OuSI
+)1H@3MP!5$gNW_-u1-(L]OuSVI>9H$j04T'7F>$BBD/!mD"#"M"G_cGT@q]F`CEQh7Ch[d/Ble
+3&@j#&"5!C)O4>12cATTS#05YE@L]K/G@<dS=04S[,@r!2k+C-*R4s4-k">`%o0TnV_30"+t3A
+WCQ5*@mc">`%o16Oha30"+t3AWIS5*@mc">`%o1m1%c30"+t3AWOU5*@mc">`%o2Ng7e30"+t3
+AWUW5*@mc">`%o30HIg30"+t3AW[Y5*@mgF^#tN4>12cATTS#05YE@L]fAJ@<dS204S[,@r!2k
++C-*R4s4-k">`%p0TnV_30"+t3A`IR5*@mc">`%p16Oha30"+t3A`OT5*@mgF^#tN4>12cATTS
+#05YE@L^#ML@<dS404S[,@r!2k+C-*R4s4-k">`%q0TnV_30"+t3AiOS5*@mc">`%q16Oha30"
++t3AiUU5*@mc">`%q1m1%c30"+t3Ai[W5*@mgF^#tN4>12cATTS-05YE@L]K/G@<dSL04S[,@r
+!2k+C-*R4s4-k"#M\cP!5$gP''tO4?P9,F(KGH=>+N*DMS<HD..[F*\V#:ARfKu>;'f,DKKZ*G
+p$B85!C)pNWV*l0p4_`30JDg+?Vb>@rl4'02=0;Bl8_=05Y-BL_2:MBOt[h+BpL8Bl8$&F*2=Q
+Ch[d/CLqc6>p)<p+C1!01b^\J5*@mgF^#tN4>12cATTS-05YE@L]K/G@<dSL04S[,@r!2k+C-*
+R4s4-k"#M\fP!5$gP''tO4?P9,F(KGH:+pHuDMS`TD..[F%524)ARfKu>;'f,DKKB0F_rdJBl8
+$.AU,D(+?ht3?&f"D0eebSOuSI(1bg_J5*@mc"#M_fP!5$gNWV*m1Qjqb30"(t0f5%WOuSI(1b
+gkN5*@mc"#M_jP!5$gNWV*m2j-@f30JDg+?Vb>@rl4'03BlEBl8_-05Y-BL_MLPBOt[h+Boso+
+?ht3?&f"D1,+kTOuSVI>9H$j04T'7F>$BBD/!mD"#"M"G_cGT@q]F`CEQh7Ch[d/Ble3&@j#&"
+5!C)O4>12cATTS-05YE@L]K/G@<dS704S[,@r!2k+C-*R4s4-k"#MbfP!5$gP''tO4?P9,F(KG
+H:+pHuDMSBJD..[F"#".tARfKu>;'f,DKKT6De!9">p)<p+C1!01bphL5*@mgF^#tN4>12cATT
+S#05YE@L]K/G@<dS=04S[,@r!2k05P??FD5f7@q0=hF*&O1+?ht3?&f"D1,G(WOuSVI>9H$j04
+T'7F>$BBD/!mD"#"M"G_cGT@q]F`CEQh7Ch[d/Ble3&@j#&"5!C)pNWV*n1m1%c30JDg+?Vb>@
+rl4'02=0;Bl8_-05Y-BL^u.KBOt[h+BpL8Bl8$,F)PPuCh[s4+C-*R4s4-k"#MbjP!5$gP''tO
+4?P9,F(KGH:+pHuDMSBJD..[F"#".tARfKu>;'f,DKKT6De!9">p)<p+C1!01bptP5*@mgF^#t
+N4>12cATTS-05YE@L]K/G@<dS104S[,@r!2k+C-*R4s4-k"#MblP!5$gP''tO4?P9,F(KGH=>+
+N*DMS<HD..[F,;3P?ARfKu>;'f,DKKi-ASu!#>p)<p+C1!11c$g>P!5$gNW_0p0JS_SOuSVI>9
+H$j04T'7F>$`LD/!mD!AA:uG_egB@q]F`CEQh7Ch[d/E+<Hs@j#&"5!C)pNW_0p0J\eTOuSI)1
+c$gAP!5$gNW_0p0JnqVOuSI)1c$gCP!5$gNW_0p0K,(XOuSVI>9H$j04T'7F>$`LD/!mD!\\D!
+G_cDS@q]F`CEQh(>p)<p+C1!11c$gEP!5$gP''tO4?P9,F(KGH=>+N*DMS<HD..[F*\V#:ARfK
+u>;'f,DKKi-ASu!#>p)<p+C1!11c$gFP!5$gP''tO4?P9,F(KGH=>+N*DMS<HD..[F,;3P?ARf
+Ku>;'f,DKKi-ASu!#>p)<p+C1!11c$j?P!5$gNW_0p0enhTOuSVI>9H$j04T'7F>$`LD/!mD!A
+A:uG_egB@q]F`CEQh7Ch[d/E+<Hs@j#&"5!C)pNW_0p0f"nUOuSI)1c$jBP!5$gNW_0p0f5%WO
+uSI)1c$jDP!5$gNW_0p0fG1YOuSVI>9H$j04T'7F>$`LD/!mD!\\D!G_cDS@q]F`CEQh(>p)<p
++C1!11c$jFP!5$gP''tO4?P9,F(KGH=>+N*DMS<HD..[F'JEs0ARfKu>9I2o5!C)pNW_0p0fY=
+[OuSVI>9H$j04T'7F>$`LD/!mD!AA:uG_dCo@q]F`CEQh(>p)<p+C1!11c$jHP!5$gP''tO4?P
+9,F(KGH=>+N*DMS<HD..[F,;3P?ARfKu>;'f,DKKi-ASu!#>p)<p+C1!11c$m@P!5$gP''tO4?
+P9,F(KGH:+pHuDMS<HD..[F!A@qrARfKu>;'f,DKL/8F)Gn=>p)<p+C1!11c$mAP!5$gNW_0p1
+,>"VOuSI)1c$mCP!5$gP''tO4?P9,F(KGH:+pHuDMSKMD..[F"tsJ"ARfKu>;'f,DKL/LD/Ef;
++C-*R4s2sM04T'7F>$BBD/!mD">=V#G_cJU@q]F`CEQh7Ch[d/BP;7"+C-*R4s4-k">hni1m1%
+c30"+u1GUhN5*@mgF^#tN4>12cATTS#05YE@L^#ML@<dS404S[,@r!2k05P??FEr.KD.I0">p)
+<p+C1!11c$mFP!5$gP''tO4?P9,F(KGH:+pHuDMS`TD..[F%524)ARfKu>9I2o5!C)pNW_9p0J
+S_SOuSVI>9H$j04T'7F>$`LD/!mD!AA:uG_dCo@q]F`CEQh(>p)<p+C1!12_Zp@P!5$gP''tO4
+?P9,F(KGH:+pHuDMSKMD..[F"tsJ"ARfKu>;'f,DKL/LD/Efo+C-*R4s2sM04T'7F>$BBD/!mD
+">=V#G_cJU@q]F`CEQh7Ch[d/BP;7"+C-*R4s4-k"?/"g1Qjqb30JDg+?Vb>@rl4'02=0;Bl8_
+-05Y-BL]fA@BOt[h+Boso+?ht3?&f%H0JG>H5*@mgF^#tN4>12cATTS-05YE@L]K/G@<dS:04S
+[,@r!2k+C-*R4s4-k"?/"g23L.d30JDg+?Vb>@rl4'02=0;Bl8_205Y-BL^#MBBOt[h+BpL8Bl
+8$<H#7D/A0>/#5!C)pNW_9p0K,(XOuSVI>9H$j04T'7F>$BBD/!mD"tsh%G_cPW@q]F`CEQh7C
+h[d/H$O7DA7Qfg+?ht34?P9,F(KGH:+pHuDMS9GD..[F"tsJ"ARfKu>;'f,DKL/LD/Efo+C-*R
+4s4-k"?/"g2j-@f30JDg+?Vb>@rl4'03BlEBl8_-05Y-BL]];?BOt[h+Boso+?ht3?&f%H0JGJ
+L5*@mgF^#tN4>12cATTS-05YE@L]K/G@<dS804S[,@r!2k+C-*R4s4-k"?/"g3KcRh30JDg+?V
+b>@rl4'03BlEBl8_-05Y-BL]T5>BOt[h+Boso+?ht3?&f%H0JP8E5*@mgF^#tN4>12cATTS-05
+YE@L]K/G@<dSB04S[,@r!2k+C-*R4s4-k"?/"i0TnV_30",#0JYAG5*@mc"?/"i16Oha30JDg+
+?Vb>@rl4'03BlEBl8_-05Y-BL`S3ZBOt[h+BpL8Bl8$.AU,D(+?ht3?&f%H0JYGI5*@mgF^#tN
+4>12cATTS#05YE@L]];I@<dS104S[,@r!2k05P??FD5f7@q-We+?ht34?P9,F(KGH=>+N*DMS<
+HD..[F)_Y]7ARfKu>9I2o5!C)pNW_9p1GFtUOuSI)2_[$BP!5$gNW_9p1GY+WOuSI)2_[$DP!5
+$gNW_9p1Gk7YOuSI)2_[$FP!5$gNW_9p1H(C[OuSI)2_[$HP!5$gNW_9p1H:O]OuSI)2_[$JP!
+5$gP''tO4?P9,F(KGH:+pHuDMS<HD..[F!A@qrARfKu>9I2o5!C)O4>12cATTS-05YE@L]K/G@
+<dS/04S[,@r!2k+C-*R4s2sM04T'7F>$`LD/!mD!AA:uG_cAR@q]F`CEQh(>p)<p+?Vb>@rl4'
+03BlEBl8_-05Y-BL]K/=BOt[h+BpL8Bl8$,D/aE6FCfK,A9]5&+?ht3?&f%H0JkJH5*@mgF^#t
+N4>12cATTS-05YE@L]K/G@<dSB04S[,@r!2k+C-*R4s4-k"#hqgP!5$gNWV3p0p4_`30")"0f"
+nUOuSI(2_d+O5*@mc"#hqkP!5$gP''tO4?P9,F(KGH=>+N*DMS?ID..[F!\\%sARfKu>9I2o5!
+C)O4>12cATTS-05YE@L]K/G@<dSJ04S[,@r!2k+C-*R4s4-k"?/(l0TnV_30",#1,CYJ5*@mc"
+?/(l16Oha30",#1,C_L5*@mc"?/(l1m1%c30",#1,CeN5*@mc"?/(l2Ng7e30",#1,CkP5*@mc
+"?/(l30HIg30",#1,CqR5*@mgF^#tN4>12cATTS-05YE@L]K/G@<dSB04S[,@r!2k+C-*R4s4-
+k"?/(m0TnV_30JDg+?Vb>@rl4'02=0;Bl8_005Y-BL]fA@BOt[h+BpL8Bl8$1Df0l4Ec3(++?h
+t34?P9,F(KGH:+pHuDMSHLD..[F"YXA!ARfKu>;'f,DKKc7DL,l7D]i=.5!C)O4>12cATTS#05
+YE@L]];I@<dS104S[,@r!2k05P??FDc#7H=_,8+C-*R4s2sM04T'7F>$BBD/!mD!AA:uG_cAR@
+q]F`CEQh7Ch[d/GA1r*Bl7Q+>p)<p+?Vb>@rl4'02=0;Bl8_-05Y-BL]K/=BOt[h+Boso+?ht3
+?&f%I0JG5E5*@mgF^#tN4>12cATTS-05YE@L]K/G@<dSB04S[,@r!2k+C-*R4s4-k"?8(h16Oh
+a30JDg+?Vb>@rl4'02=0;Bl8_-05Y-BL]K/=BOt[h+BpL8Bl8$=ATD]3>p)<p+?Vb>@rl4'02=
+0;Bl8_905Y-BL^c"IBOt[h+BpL8Bl8$&F*2=QCh[d/CLqc6>p)<p+?Vb>@rl4'03BlEBl8_,05
+Y-BL_)4LBOt[h+Boso+?ht3?&f%I0JG;G5*@mgF^#tN4>12cATTS-05YE@L]K/G@<dSL04S[,@
+r!2k05P??FDGH5+C-*R4s4-k"?8(h1m1%c30JDg+?Vb>@rl4'02=0;Bl8_205Y-BL^#MBBOt[h
++Boso+?ht3?&f%I0JGAI5*@mgF^#tN4>12cATTS#05YE@L^l(T@<dS<04S[,@r!2k05P??FCTB
+7D'3+,5!C)O4>12cATTS#05YE@L]fAJ@<dS204S[,@r!2k05P??FDtr*@qBRjFDl80C`m"+5!C
+)pNW_<q0K,(XOuSVI>9H$j04T'7F>$`LD/!mD!AA:uG_dOs@q]F`CEQh7Ch[d/BjtLg+C-*R4s
+4-k"?8(h2j-@f30JDg+?Vb>@rl4'02=0;Bl8_205Y-BL^#MBBOt[h+BpL8Bl8$<H#7D/A0>/#5
+!C)O4>12cATTS#05YE@L]K/G@<dS404S[,@r!2k05P??FD,?+E-,r6F)rI0+?ht3?&f%I0JGJL
+5*@mgF^#tN4>12cATTS-05YE@L]K/G@<dS`04S[,@r!2k+C-*R4s4-k"?8(h3KcRh30JDg+?Vb
+>@rl4'01.C0Bl8_-05Y-BL`S3ZBOt[h+BpL8Bl8$.AU,D(+?ht3?&f%I0JP8E5*@mgF^#tN4>1
+2cATTS#05YE@L]K/G@<dS:04S[,@r!2k05P??FDc#CATD^.Eb/isGT^975!C)pNW_<q0enhTOu
+SVI>9H$j04T'7F>$`LD/!mD!AA:uG_d%e@q]F`CEQh(>p)<p+C1!13&!'BP!5$gP''tO4?P9,F
+(KGH=>+N*DMS<HD..[F*\V#:ARfKu>;'f,DKKZ*Gp$B85!C)pNW_<q0f+tVOuSVI>9H$j04T'7
+F>$BBD/!mD&he*1G_ctc@q]F`CEQh7Ch[d/@rld0+C-*R4s4-k"?8(i2j-@f30",$0JPPM5*@m
+gF^#tN4>12cATTS#05YE@L]K/G@<dS804S[,@r!2k+C-*R4s4-k"?8(i3KcRh30JDg+?Vb>@rl
+4'03BlEBl8_-05Y-BL`%jUBOt[h+Boso+?ht3?&f%I0JY>F5*@mgF^#tN4>12cATTS#05YE@L^
+l(T@<dS<04S[,@r!2k05P??FCTB7D'3+,5!C)O4>12cATTS#05YE@L]fAJ@<dS204S[,@r!2k0
+5P??FDtr*@qBRjFDl80C`m"+5!C)pNW_<q1,b:ZOuSVI>9H$j04T'7F>$`LD/!mD!AA:uG_egB
+@q]F`CEQh7Ch[d/@rHL/Df0''A7Zlh+?ht3?&f%I0ekAF5*@mgF^#tN4>12cATTS#05YE@L]fA
+J@<dS204S[,@r!2k+C-*R4s4-k"?8+j0p4_`30JDg+?Vb>@rl4'03BlEBl8_-05Y-BLdj%-BOt
+[h+BpL8Bl8$&Dfp#;DK'N8De<TmEZeX15!C)pNW_<r0f"nUOuSVI>9H$j04T'7F>$`LD/!mD!A
+A:uG_egB@q]F`CEQh(>p)<p+C1!13&30AP!5$gP''tO4?P9,F(KGH=>+N*DMS<HD..[F*\V#:A
+RfKu>9I2o5!C)pNWM3pP!5$gP''tO4?P9,F(KGH=>+N*DMS<HD..[F=taB!ARfKu>9I2o5!C)p
+NWM3qP!5$gNWM3rP!5$gNWM3sP!5$gNWM3tP!5$gNWM3uP!5$gNWM4!P!5$gNWM4"P!5$gNWM4
+#P!5$gNWM4$P!5$gP'&rPOu%3#F_-@/L]M[-CibbKL]N[<H]g?sBlfG$P"RH:Bp(ZC1Nm2CF-8
+_M9.tHsCm$uF1M:b`F*VYF@<`o'Bp)kNB6,eKH#@_4GT^F/P"U-TE,ol9F-8_M1N7AQE-![L@<
+dr.G%#3M@Yb)K)3RgCP!4;W<0DBI@;M)jL]ET%P"[N?G%#3M5*@]TG%#20G%#20AThKuP%'S6G
+ %#3M@Zip<WKKr<1M(`<Cm&7HEc5o<05YE@P"UsMH]iM)@WuO*E%XXZ0m6uAF_+NjDc:=fEcd<
+J<,Z[tF(fK4FCnrtF(LM"I?IPl4>0G_Ch[d/DKTf-EbT#:=>+K)DKKB0ATTme01.C/Bl8$&F(K
+GL3?ULL+E2@>E-![BF(KHV99MqZG%#3M5*BH>5@o"HCm&7`!0U0*E,ol9F"_$:ARfM=97(5n@;
+M)jP%9_?I?I0MP#Qjm8Wl&rE-ma5I?IQQ@;M*9L]ETTH]iM)@WuO*E%XXZ0m6uAF_+NjDbP(eB
+9!6sDf6b7Df03"@;L!rP!FGY<.0+VFY@3JBlJ#D7oM-bDJO-.GA]]<NXo--Eb/a!B5VF)ARloL
+8S2CIF(LM"I?ITYP":aTH]g@O@UWu6@ZgbJ"d/nLV33fo!0..I8Ka1AOuS7"@;1mMOuS7"@;1m
+6Oo^RE3ZsT2OuS7$@;1m6Oo^@AM#WWnP'J]6Ea`['AS#n&DfV"*I?IQOEckrV3IP*b@UX:eDe*
+E%?$h`SOu%NL8WjRH1G<B^0l1QAFHSVHA1r(@/n8fPFCfK5H"(o:FDl%L@WuO*E$/\&Anc-oEb
+0<1F`Lu'P')pJ06:]HE+*6lBl7RH\pKT_F(KH4@:O(eDJ+B\;u~>
+% uk.co.terryburton.bwipp/gs1lint 0.0 2020122800
+%%EndData
+%%EndResource
+%%BeginResource: uk.co.terryburton.bwipp renmatrix 0.0 2020122800 91047 90077
+%%BeginData: 81 ASCII Lines
+currentfile /ASCII85Decode filter cvx exec
+06:]HE+*6lBl7RH \pKT _@s)g 4ASuU /@ :O( eDJ() 6Eckq9
+F(KH4@:O(eDJ+B\ </: R<23K pPEa` [' AS# n&D fV"#
+06M%_@rEuAATDg: @Wc^5 Df .1:GA 2#8P 1l (DO ps'bA Su? nFE2) ?H\`
+B!23JD%@<-"%P!5 $b06_ ,@F D-I 2Ou" b) ASG djFGKs \1 G<3GEa s$(
+DfUjAF`)83FHSF5 @UWb^ B6% p5D I d6q Ci= ?S" a+^(AT X( k04Sp: DfT
+]'E/k*EDKBB2Ou" b%Dfg )H+ D,% uF (L Lj0 55< >F)Z/ 2@ :Y/oO u"b
+*DJO<4Eb/ZiBSZY O1G< H[ CN FH 8AR T+m L]E So05
+5<6Cis9"FCf]=+D ,%uF ( LL j0 6DG \+B osoO u"b5A
+U&<,Des?4NWjQCF (KHV1G <i] G ]\1 =C h[O" NWj QCF(KHV1G< i]G]\4>Ch[O
+"NWjQCF(KHV1G<i ]G][P9 DKL m D6Z7 *fBk ;=J 1G<i]G]\"@ H=_m>Ou"b5A
+U&<ADe<U&ATW_.O u"b5AU &<B De<U &ATW _.O u"b5AU&<0@ ;p:D!0T,k@;
+L%-AU&<W!0T-HEb BH?Ou %NL8 T/Qi H]g1 5P" @<NBk2=!+E qO1FD-gjOu"
+b)ASGdjF<G7.BkM +$OtV tS04J @1@rH 1%E Zeh"Eas$(D fV!mOu"b#@:
+O(cEc6)<A7KOoDf Qt0@:O( cEc6)< A7KOo DfV !mOu"b*DJO <4Eb/Zi+DG_
+/F)Z/2@:YNSOu"b*DJO<4Eb/ZiBHV#,CNFH8ART+_OtVtS055<>F)Z/2@:XO(Bl7^-E,oMuA9O
++hOu"b5AU&<,Des?4+EV1>FCT6*DfV!mOu"b5AU&<A@;KXjDBO%4G]\1=Ch[O"OtDhQ06CcMFE
+q;2BkM<+FCf]=H!tN'B5WkaOu"b5AU&</Df0Y>FCf]=AoDR/OtDhQ06CcMFE;/BAKZ)+G]\"@H
+=`6mOu"b5AU&<ADe<U&ATT&:AU&<ADe<U&ATX(gOu"b5AU&<BDe<U&ATT&:AU&<BDe<U&ATX(g
+Ou"b5AU&<0@;p91FCf]=B45b#OtVtS04A[=FCf]=+CT).FCf]=OtDhQBl7^-E,oMuA;C5KD0mp
+MDJO<4Eb/ZiBHV#,CNFH8ART,41OYEcBl7^-E,oMuA;C5KD0mpMDJO<4Eb/ZiFs(L:CNFH8ART
+,41OYEc06hbTATW8AE+sQAP&-9^E+sQ<P!5%%I?G)'1G<6NATW8AE+sQAP&-9^@prk\AWf6?99
+KF+Oq*X204SsDFF001L]ilUL]ET$H\_c[!Kr4WBm=lcCm"g/@:Nt^P!4['Or9EUL]iP6P)#3@P
+'DD%P')q1P')29<IL#?Ou"b"@UiqqL]im;L]CY8"c3/@LN$sPG`lm+!KoE]Bm=]^5)99'9TfI?
+Fbg-Us,r.VBm=]^5&b4\G`i)`!g66?!g7\3H\_ce)2Ku0!Kq\jFbg']!I^,&P')29%[&V$EbT0
+"FF,-@Bl]"1P&5Pj+F,)?BlY>+E-67F>9J/5Gp$C@P#O)Z+F&\COo^_%04\d;L]NYpI?G)'1G<
+9WGA_aMA8-(?!g7DIGT_8SA8-',@rQR4+Bot5+F,)8I?IP_Gp%Bg!KmJH1G<9QEejd[1OYDrOu
+"b-AS-%2+Co2,L]ilXH[$ZY+Co2,+CfA5F<Fd1GT_8S?%%l806eUaL]N[<Ou"b%Bl]"4Ou%NL%
+[&V$F`;[MA8-(?#a0%OGT_8SA8-',@rQR4+Bot5+F,)8I?IP_Gp%Bg!KsFF1G<9QEek!a1OYDr
+Ou"b5Ea`HhHS9Z-5*@]TG`k7R1G<9QEZfU_!KmJ/L]NY>G^3q5FGKs\4aVtjI=$bQI?ITn1G<f
+o+F'&*06;C]H'0s:F(B!*+Co2,Ou$r`Ebg"EGT_8S@:E_WL]Mjc30H7]">DM`0p4\_5*@mc">D
+Ma0p4\_5)ob#0JP;F4d'iKEdNslEbT0"FHSn;P#RT(OuSI)0JG48P!+slOuSI)0eb=9P!+slNW
+_'k0eebRP&c_+H]iM^Dg-)^5^eepOuSUaNW_'j0JJYQP!5$gNW_'k0JJYQP!4m/0ek@:P!+tKP
+&bo4F_kW$FHSn;P#RT(OuSI)0JP78P!+slOuSI)0JP79P!+slNW_$j0enhSP&c_+H]iMoE0<J7
+P#RT(NW_'j0JS_RHXpi2L]W`&H]iMfAS-%I5^e!BF`M2/BQTD&I?ITYHXpi2L]NZ%H]iM^Dg-)
+^5^e!BF`hYd5^eeqI?ITYP(S!%F*Nj2Gp%0RP!+s2A8-',F(B!*P!+s2H]gXBP#QjmAWe!q$'G
+[Z5*C&:Oq*X206:]H@;^@#Des?4HS8fFH"1c/DfV")Ou$NaH"1c/DfV"ML^'#*H]A@o+<VdL+<
+Wk(#a2$I)3Qt8!F]kk@rH1%Eft^216OkKL&h7:2LU`[P+@#a<+0Zi@rH1%Efsmf#a.>tNX@lk+
+<VdL+<VdjL^K<AOr9EBL]Lq%H"1c/DfV"dOtr1bH\MP#Ou@`O8Wo9cP#Qjm%[&V$A9)+&CghU#
+EdKHYBm=];EbT//E+sQ<Ou"b1Bm=]^5*@]TE+sQ<+Bot-Bm=lY!g3S2L]DjdK89MHBm=kFE+sQ
+<P%'4JP,Wea!0TNbBm=]^5&b4\G`ka`!g7\^!.C#$E+sQAL]W_?H\_ZMP(R&'1G<]]G^(?MBm=
+lY!g3SI1G<]]G^1ENBm=oZ!g3SI1G<6H@q]Er>9Im!G]T$WH\_ZMP(R&'1G<]UFD,_<>DN98!H
+;atH&)NbWI$:5P!5$bL]E53E+sQAL]Wa=HS9)r5*@]TCER=6C*6qo@q:`YCQ8NO0JG5E4_p&\0
+eb:9P!+tKH\_rA+DN$/B4Z1@!0TKlBcq.5FE1f"AUT_@I?IQFNW_'k0eebRH\_f=+DN$/B4Z1@
+!0TKlBcq.5FE1f"AUT_@I?IQXP":"a86qB705tWMGT^s>G^,#GP,XU#05tWMGp%'?G^5)HP,XU
+#P&G;JFD,`B06!(<Ou"b-ASrW0P%'S1E$/t.DMS=VWKKo;!g7\FL]ET2OogehL]E53Ch7L?!Ks
+F/056S5Ou%&"BnueQ!Gl=bP%p.QOogehL^&\7P)"hsP#uF9CNFH8ART+_L]ilCL]iP6P)#34H]
+eDXH]k@VP#[;@L]NZoL]ilCBl7^-E,oMuA9Nb3P$!MCM#WWnP#-Lg!I]<XWI9q0L]iP6P)#2aE
++sQBP!5&.BnubP4aW?-I=%,eI?ITYP":`OP')q1P')q1I?I0b68*:lG]P!HBm=];EbT0L1OYDr
+Ou"b%Eaa0.@<lF)A8cR2HS9>PG]ReDBkJQ-Bm=]^1G<]]G]T$3Ou&8>L]E53E+sQ<P%'4JP,We
+k3,iSVG`lepG`k7R1N7&QG`krXH'1@S1O($f+F&0EATW_/P!+/:ME_(@!0RA%Bm=nGH'5.a56(
+Z`P,XU[G`"]c!!&/_E+sQB+F0-LME_(@!0X==56(Z`Bl7^-E,oMuA<NpJ!/:MfOp-8s<.0p#P!
+Ug@Bm=\AE+sQ<DfTQ)Ou%NL%[&W2:+p=!CNFH8ART*lBl7^-E,oMuA;C;M2NfjLBl7^-E,oMuA
+8!*"DJO<4Eb/ZiBSZ_Q2NfjLBl7^-E,oMuA9K)0DJO<4Eb/ZiG)-3_2NfkZ.$C]VBk2=!+E2%>
+G`jt@8<Re&ASGdjF<GO:G^5H1Le*\FP)G+rL]ETRE+sQAL]ETJE+sQA+E2%>H'2Zn!,uXsH'2[
+#(1L]^CM.[+F`(`"Des?4NWjQCF(KHVD0qF@@UWb^B6%p5DId6qCi=>:F(KH%DL#`1Ci=?W6BY
+&kP#Pq0Ci=?2@;q51F`)83FHSe604Sp:DfT]'E$.8*L]LsnEas$(DfQsa5*@^MP#Pq0Ci=?2@;
+pQ9F(KH%DL#`1Ci=>ICLqdS5*@^++E2%>F*f$FAU0G%H\_]NH\_ZMP#Zpn8R3HLDfg)HHQZj>@
+<ZNrH"D#,Dfg&KHQZj>@<ZNrH"D#EP#Zpn8T\NgFCT6*DfUjAF`)83FHUKfFCf]=@rH1%EZfF7
+FCB'4@rH1%Eda*MBl7EsF_#'*AU&<D+EV1>FEh51BkM=D"a+^(ATX(uFCf]=H!tN'B5W_5F`)8
+3FHSeM"CZ+gFCf]=NW>5*Op$+bF,0gZ1G<?XNW>4uFEhnSH[V&KL]W_WF-:C'5%\\qD3ApdL]W
+_W06<:?Ou"b'DN[2H1QmcHH]iN7Fa]EQP&$5RI?I0MHZWhDFCoH/F<G[:G]\"@H=`8"@;L%-AU
+&<W!0TKl06DG\+Bot1G]\:g!0U!%I?I0MP"ArB1G<ikFE/LGG]]*XP,4<tL]E53FEhnj@Yb&JW
+I'dfFEhnj5*AQ\F*)GY",Hu@LQZn1P":"J06D8WEZee,FED)=FHSG.P#ZUFFE3ORL]ET$H\_ZM
+H]h-eDhnCL!0V,X!AJ+oCia0N&X%3k"Gd)ALQZeCFcpm19p-VP:gn'UFB!O)AWgGJOruDS@;0V
+$<-`FoP"UT4P!+5?AmoLsAUT_AOruDVFE2;8AQNSVFD-hFOp$,p+>6Z8Ec5`)=(u2eBTc#E!g5
+Ht!0TO/+>63&DKJT]FE2)?P"UrsOuSV@P!5$gP&-9^F)c5BOo]uo<.0p006CcMFCB6#ASuUQ5*
+@]TFCf]=GA1T0BHVD<FE3PAP'(kfFE3ORL]N[<FCf]=B45b#P&-9^Ou"b5AU&<AE,Te?FCf]=G
+].2+F(KG9GT_*>G]\.DA9;LJWJCV=2Ne*(1N[2QFEh51BkM=D"DhX]FHSe606CcMFEhbCF!,R9
+G]\1KAnH*qFHSG.P#QO7G]\1=Ch[O"NWjH;B4uCM4aSi(AU&<AE,Te?GT_*>G]\1KAnH*qFHWV
+FAU&<@Bk2=!P,XU#I?IQOAU&<A@;KXjDN4s?AnGjjAos2!HS9JPG]\1LDf[%CAU&<@Bk2=!+EV
+1>FEh_9AohO*Oo^_`Ou%NL<-2\rFEh51BkM=D#]F<eEbT0"FHSe606CcMFEhbCF!,]MFCf]=G]
+.2+F(KHV!Ko6eP#QO7G]\1=Ch[O"NX'<AF*),.H'1=4AU&<@Bk2=!+F'&]Op$+bFCf]=G]7SBL
+]ESo06CcMFD#$$F!,]MFCf]=GA1T0BTf?:F*)Gc@Yb&JWKK0&1OYEc06CcMFEqhDF!,R9G]\4L
+AnH*qF<G[:G][A8@qBP"Oo^@>Oo^_`Ou%2kG]\4>Ch[O"NWij#Dg#]T4aSi(AU&<BE,Te?FCf]
+=H#I;,F(KG9E+sQBOo^@>Oo^_%I?IQOAU&<B@;KXjDN4p2ASuU$EfrS406CcMFEqhDF!,R9G]\
+4LAnH*qF<GO:G^1ERAU&<*F(8d!FHWVZ!g5I)!Ko6eP#QO7G]\1LDf[%CAU&<BE,Tf\CNO-4FD
+#$$F,0g<F*)Gc$@S(;I?IQm9p.Mb>;'GoEas#uAKY9*P&ZX@I?I0b%[&V$Eb0-*@<?O(G`k%LA
+1r(@/n8fPFCfK5H"(o:FDl%L@WuO*E$/\&Anc-oEb0<1F`Lu'P')pJ06:]HE+*6lBl7RH\pKT_
+F(KH4@:O(eDJ+B\;u~>
+% uk.co.terryburton.bwipp/renmatrix 0.0 2020122800
+%%EndData
+%%EndResource
+%%BeginResource: uk.co.terryburton.bwipp dotcode 0.0 2020122800 231542 240206
+%%BeginData: 278 ASCII Lines
+currentfile /ASCII85Decode filter cvx exec
+06:]HE+*6lBl7RH \pKT _@s)g 4ASuU /@ :O( eDJ() 6Eckq9
+F(KH4@:O(eDJ+B\ </: R<23K pPEa` [' AS# n&D fV"#
+06M%_@rEuAATDg: @Wc^5 Df .1:GA 2#8P 1l (DO uP+6@ <-F #Bl7m 4FHS
+U:F_`U>D_?-CEcQ G7F`M SBD D#C BBlJ $S g6- ]D3%o; `D J`g(Eb Tc]
+3%oDi/n8fPFCfK5 H"(o: FDl %L@ W uO* E0A q<G `iLhA8 cR "De*F+ L_Q
+"0Ops'_E-,f4DKC t)Ou" b#@ <,j rA 7^ ofO u"b %Df0Z -E aa/7A moL
+sAWei&Ec6/CM#WV o04S p: F_ u# ;M# WVo 061 KCBl
+Ah-Ou"b1@<-F#+D ,%uF ( LL j0 5t? ?F( Js$@ j#AlC
+ia0N1G<cWG9CL+C ia0N1G <?K F *&O :@ ;L!r Ou" b.@<64?s,o 0VE-,f4DKCu
+E06;5UBl7R*H#R> X4aVtc Ou8 C 3DfB f4Df 0WC P,i2'Cia0N 4aW>WI?IQm3
+0Ia6V33Qn!BlU*F E2M8P! +/T /Wr; \Fcn qO1 OXV5/Tc#UA WeitP#ZpnAW
+e*t3A5;iFD5Z2F- 8_M1O YEcD fBf4 Df0W COu %NL8M>+&GB 4mIDg-8c/<V
+eB@rH1+D/OD;@rH 1+D/O EX/<V eBEaa '(D ]j(/FD5ZV0 9S+ED..L$+D
+kP.CQ^631NHoGBl Ah-P!*i (GB8T? P!+s2 @rH 1+D/OENs,o O."FDeB@<?4
+ %L]`G7OuAIZI?IP_Cggb.s,o/kCgge/rfT&jCggh0rK8ri@VK_9r/rihF(Sj:qiW`gF(Sm;qN
+<WfF(-n\q3!NeF(-q]pl[EdF(-t^pQ@<cF(."_p6%3bF(.%`oo_*aF(Sp<oTD!`F(6t]o9(m_F
+(7"^nrbd^F(7%_nWG[]F(7(`n<,R\F(7+amufI[F(7.bmZK@Z@WPt6m?07Y@WQ"7m#j.XFDYHB
+l]O%WFDYKClB3qVFDYNDl&mhUFDZ)Tk`R_TAo9>ZkE7VSAo9A[k)qMRAo9D\jcVDQ@rcCAjH;;
+P@;0S7j,u2OD(mi'ifZ)ND(ml(iK>uMD)!f%i0#lLD.-q1hi]cKAo;+%@;L!-4?P99@<-F#+E1
+b0F(I"D@<-F#Ao;*$E+*d.AS,gi04eX-+EVXHAW?m_:.$aJDD@.S7SZ<,Ao9CI5!G,c05YcC+C
+\c"@rGmh+D,M$G%#3.0/%9QEcYf+DK'`?P!>*c05YcCCh7K,D0'?Q@ZiN#DKTf-@qg"?!,ZdiH
+\DFg]tfe>H\_]c!I^,1I?I0b1G<TdB68!0+Dl14P%&<OD.R3kF,1$`Cm"g^$'I(tC5;kQ1Pc$e
+!GumjP%'4JP,WeFF(^Y"P"UrtK`CPT^li,QP&?'_L^0*>Ot_[mL^'#9H[V&KL^'"KOpc,JB68!
+0P!3W:!KmJH5*C2.F(]T3E$/m<Ao9AeGV<eSC5<+X!Ko6eHYmh:FDYu[5&-6EP'AWp+DQ]5Oo^
+_%I?ITYP"76CF(ZV4F(]T3E0<"1D0'?+ASrW-F(^YFOu"b$BOPpu@;p91>9I.++G_/#!\c<6+B
+sj,+cZRHNWLmh>p*@3!@!O),)u^Y10l#,NWCAb!@*U+0JcuW>E/_0NWCDc!\cH:+Bsj,-&r!PN
+WLml>p*@3!@Eg--B8-]2I.G0NWCMf!@Nm/0K38[>DO\`.#n?_3*dY2Lae-/NWLmp>p*@3!@j*1
+.ZOQb0O5f*NWCYj!@s030elrV>E/_8NWC\k!\lH9+Bsj,/WKi`NWLpk>p*@3!A9B5/rfuf1gM5
+.NWCen!ABH70f<5Z>E/_<NWCho!\lT=+Bsj,0oc8hNWLpo>p*@3!A]Z916)Dj3*dY2NWCqr!Af
+`;0f`M^>E/_@NWCts!\uH8+Bsj,23%\pNWLsj>p*@3!B,r=2N@ho10l#,NWD)!!B6#?1,E2Y>E
+/_DNWD,"!\uT<+Bsj,3K=,#NWLsn>p*@3!BQ5A3fX7s2I.G0NWD5%!BZ;C1,iJ]>E/_HNWD8&!
+\u`@+Bsj,4cTP+NWLsr>p*@3!BuME5)o\#0O5f*NWDA)!C)SG1GN/X>E/_LNWDD*!])T;+Bsj,
+6&kt3NWM!m>p*@3!CDeI6B2+'1gM5.NWDM-!CMkK1GrG\>E/_PNWDP.!])`?+Bsj,7?.C;NWM!
+q>p*@3!Ci(M7ZIO+3*dY2NWDY1!Cr.O1HA_`>E/_TNWD\2!]2T:+Bsj,8WEgCNWM$l>p*@3!D8
+@Q8r`s010l#,NWDe5!DAFS1c&D[>E/_XNWDh6!]2`>+Bsj,9o]6KNWM$p>p*@3!D\XU:6#B42I
+.G0NWDq9!De^W1cJ\_>E/_\NWDt:!]2lB+Bsj,;2tZSNWM$t>p*@3!E+pY;N:f90O5f*NWE(=!
+E5![2)/AZ>E/_`NWE+>!];`=+Bsj,<K7)[NWM'o>p*@3!EP3]<fR5=1gM5.NWE4A!EY9_2)SY^
+>E/_dNWE7B!];lA+Bsj,=cNMcNWM's>p*@3!EtKa>)iYA3*dY2NWE@E!F(Qc2*"qb>DQO?>`Jk
+D0O5f*NWEFG!F:]e2DJJ[>E/_jNWEIH!]Df>+Bsj,?]G.oNWM*p>p*@-!0.(fNWM*q>p*@-!KI
+1hNWM*r>p*@-!fd:jNWM*s>p*@-"-*ClNWM*t>p*@-"HELnNWM*u>p*@-"c`UpNWM+!>p*@-#*
+&^rNWM-n>p*@-#EAgtNWM-o>p*@-#`\q!NWM-p>p*@-$'#%#NWM-q>p*@-$B>.%NWM-r>p*@-$
+]Y7'NWM-s>p*@-%#t@)NWM-t>p*@-%?:I+NWM-u>p*@-%ZUR-NWM.!>p*@-%up[/NWM.">p*@-
+&<6d1NWM0o>p*@-&WQm3NWM0p>p*@-&rm!5NWM0q>p*@-'93*7NWM0r>p*@-'TN39NWM0s>p*@
+-'oi<;NWM0t>p*@-(6/E=NWM0u>p*@-(QJN?NWM1!>p*@-(leWANWM1">p*@-)3+`CNWM1#>p*
+@-)NFiENWM3p>p*@-)iarGNWM3q>p*@-*0(&INWM3r>p*@-*KC/KNWM3s>p*@-*f^8MNWM3t>p
+*@-+,GE,!]`,D+Bot0AmulmEbpa;3At.c>9Iur15H6s!]`2F+Bot0@P`f[NWM4#>p*>oF(-t^*
+KC1]3F*b3+EM!LL`Tu=D'3+,>9Iur2B['Q@3BAp@3Ahu>9I`j@N]Jq@3BW'@N\r!>9Ius1*CXJ
+1*CXI1*BjF>9Ius1E^aK1E^aJ1E]sG>9Ius1a$jL1a$jK1a$'H>9I`j@j#Sr@j#Sr@N\r!>9IN
+q0d((G0d((G0d'aE>9INq1*C1H1*C1H1*BjF>9INq1E^:I1E^:I1E]sG>9IBr@3B$#@3B$#@3A
+hu>9IBr@N]-$@N]-$@N\r!>9IBhDBND&DBND&DBN4-?'6us@q]:kG%#3.+BsYAOu8&<Ou8&8Ou
+6O.1Pc$e!FoeOEc#6(F-:!g!KsF/056S5Ou"b&DI[`1@q]:kD..C)+DI!3Ou%moL]N;5HS9,s5
+*@^5DI[`1C6D5Q30LHuF*)G:DJ+':E+P1qH\_Zb97;t&@q]:kG%#3.+DR'4P!3TCG^Y`GI?I,S
+6$?[QF!+t+@<-O"CibC4P"Uro01'hjCi^_/BOPq)@;L"@!Kp*=1I?7nCi^_90K"YpP'B<:@;L!
+-D(ml(@Zkt&G%#3.+DihgLguTm6?ZdRF!,=.@u+ZYGV;F-@;L!-@q]:kG%#3.L]W`4Ou"aX8PX
+G;Ci^^]4G[TR+EM$J+EM$K+EM$L+EM$M+EM$N+EM$O+EVI/+EVI0+EVI1+EVIA+C0>W5)96&!K
+oEjP"CgZ5!G,c05a0lB5)I/+Bot*F(]<#DMS=V!IKV&I?K4gOu"aiAThX&FCf$$<+Tqi>9Id(B
+5D-sL]NY>HY-]&F(Kc_K3aWr01A6"+Bot*F(]<#DMS=V!IJEeCia09P(R&'1G;.)FEMFd+Bot*
+F(]<#DMS=V!IJEeCia09P(R&'1G;.)FEMFe+Bot*F(]<#DMS=V!IJEeCia09P(R&'1G;.)FEMF
+f+Bot*F(]<#DMS=V!IJEeCia09P(R&'1G;(/DIIR2+Bot*F(]<#DMSR]!IJEeCia09P(R&'1G;
+ %-ART+:+Bot*F(]<#DMS=V!IKV&I?K4gOu"ajEd:"p>9Id(B5D-sL]NY>H\_ZMP(R&'1G;%-A
+RT+8+Bot*F(]<#DMS=V!IKV&I?K4gOu"aWBOtU_66KJTD0'?+AT!;)Oo]oc!.C#_?'6us<Glnm
+Cdi5P;e9Sa>9Id(B5D-sL]NY>H\_ZMP(R&'1Mq2GCh7L?!KsF<s+gZ%056S5Ou"b#@<,jk@<*K
+-F(ZV0P"Uro@UX:eBOPq;0To%;@<,jk@<./aP$sLVHYu5cB5)I/+DDs96tp:JFE8R=L]NY>P"U
+T3Oo^_jI?IPqG%#3.+C\c"@q]:kP$iW)@<?X/5p0kaFE2M8P'DD<<'kb:Ci^_.@<,jk@<.N=HU
+M:aF_sGfBcqM<F_-_\I?IP_6W-TI+D,%uF(LLj@UX:eBOPq;%?`kg+Dl14Ch7L?!KsFFAs*:DD
+0'>4BnueQ!Kp*3$BdQ!01/W27NcenF_-^lI?IQXP#OeH9La@O6t(1[D*f@Z+EVXHAWh:dP#Q<e
+BkM.%F!,1[98EY48p`s7FEMFf+DDs?EckrVG^Y`S@UX:eBOPq;!0Ur@6t(1[D*oF[+EVXHAWh:
+dP#Pn!EarckEeXREP"L'fBl7@"Gp$fDFE2M8P'DD<<,P*<B5)I/+DI!3L^K;;HYm23CERJ8B-:
+oE$Be)G!g7\^!IKVVP&5PX@;L!rP!FGY</<8lD0ol'Cia0N5^eepP')q1P')q1P')q1Lc:K6HY
+-]&F(LM"I?IQc0p6C#AmoLsAWf<,P#QODF_,uaK2Z?)ASuU$AStIYDBNYL",Qu?LQZnF'7H$CD
+FA2OBlnD=BnueQ!Kp*3#*MSqF(ZV0P"TD)16Oe`"FER)8K_^iFE2M8P'DD<<+99V@q]:kL]ETM
+@UX:eBOPp(Ao9DfD3>$K6"jh<A4%JR+@0[P@:V_JBnueQ!Kp*3!KmJHG^XpV6tp:JFE8R=P"UT
+3P$r]'BOtU_6Qg*!!0VSTHU2=V@:V_JBco]TART+:+DHW5Oo^_=L]NY>P'DD<<IL$1DFA2OBln
+D=Bp),F!0U/EBOtU_6Qg*+90m6&@:V_JBnueQ!Kp*=:m(s.<-!7O+DDraBOtU_6Qg*+99OOJP#
+OhXFEMFd+DI!3<-!7O+DI!3L]W`OOp#6&EarckEZet31QlU<"FEFJART+8+DDraBOtU_5p0lt!
+KmJH98EV3!Kq\UP#OhXFEMFe+DI!3<-!7O+DI!3L]W`OOp#6&EarckEZet31QlU<"FEFJART+9
++DDraBOtU_66Kuu!KmIN;G9Q,L]NY>I?IQm98EV3!Kq\UP#Pn!EarckEZet31QlU%<GlnmCdi5
+P;e9SaBcpDnFD5P[DIc[WB-:oE!KmJH98EV3!Kq\UP#Qjm82!8b!0T,k6APZ*1G;+O!g5>m6:j
+q."-PGn@:WnjDe"!4H]g?uGB8p2C6CcDGqWoq5*BAiOo^_%I?G)'1G<3GF(I*a3HT0o0Je&/Bl
+9(tOu"b*DJWm%+DG_V@ZiN#Bl5%tL]qL1Ch7LIWI'F$I?K4sDNY'aF^:.d05kuTL^'"KOu"b.F
+(025>9IWtL]E54P"_#?P'(&n1G<Td@ribs+Dl1/F-6TfFcnqC!<\L$Oo^@?H]g@EB9I"m5)<j7
+;LO^\?'6usCia',+Bot&DMS@M"-Q?@!g7\3Ou"b-F(986>9Ia'@WR\6P')pOL&hC>Cm"g^5(in
+:"ppH/Oo^@@H]g@EB9I"m5)<j7;LO^\?'7![F(99I!0TulF(99I!0U!2.["V2!H3+&L]rS9P$!
+NQP%p/)LhDlKCia*-L]NZ3Oo]E@@rmG+P"UU!P&-9^D0'3.L]NZ3LanR(Oo]KDFGL'U!g6ZAB9
+I"mG_g!q;J^DaF,0m\99K<mF(99I!0U!2>`rod!GumfF,0j[98H!!Cm"g9F(99I!g634.["V2!
+H3+&L]`G7P$!NQP%p/)LhDlKCia*-L]`f5Oo]E@@rmG+P"UTAP&-9^D0'3.L]NZ3Lg6*ZOo]E@
+@rmG-P"UU!P&-9^Dfp/X!f-o@=GUUQC6EgtB9H/0F(99I!Kp*3&!Cal!GumfF,0m\98Hi9Cm"g
+;F``E?L]W`ALhDlcP'DdqP#?.<@rmG-P"UTAP&-9^Dfp/X!/L`5s,r.nB9I"mG]._HL^%R2Ch7
+LIWJCS<WG-6dAT!;)Oo^_>I?G)'1G<?SDII?qF(I[0:4"*mE,TfR!0V2G@Wl0rF,0g*E,Tf\9O
+_FOAMQ,'FDilf1Qhg&FY@3CDf^^7Ou%NL<.0o>Ou"b"A7Te#@VK_,+C]M&Cibb'@W67,P!5%R0
+4Jm=F!+q2Df^^8Oo^_%@W67,L]rr)HY-u0@;KY!AO8s`I?IQXOq*X201A6"@:E_n+Dl14+DHW4
+Oo^@CP"^Z3P!45K0TrDu!Jh)GCjhI<L^K;COuS7GP"L(W.$CQm3/00HP#@)aOo^_0L,%YMC6CQ
+4EKX4_5)=3AC427EI?G)'1G;0a8RcCOHQZN8D0'>4BnueQ!JgrC9S`\35'r)>P,XTFL^K;]I?I
+0X$Be;M3.q84!!&0SH\MP&P!5$gKE)#Q!0U6C5(in:!!&0sOuS0s!0U6C5)'(<P%oDlOuS0s!0
+Ts$L&h=<5*@m[!<A9\P!4U$!0V)FH\MP$P!4;W<IL$1?$d]&A7Te#@VK_.P"C(b%[&V$ASu!FH
+\_]LBcqJ.B6/0'EcdI-H\_]LBcqJ.B4YskL^0*BP#-L]!0TTqP#Q:>B-;8,B6/0'EcdI;Lg-$Z
+H\_Zb5^eepD0'>4F(K!*FCB33L]NY>P"UT[P&5Q%!0TTqP#Q:>B-;8,B6/0'Ecd*=Oo^_=Ld$u
+=H\_Zb5^eepD0'>4F(K!*FCB33L]`e@P"UTPP&5Q%!0TTqP#Q:>B-;8,B6/0'Ecd*?Oo^_=OuS
+7OP%Kk@LcLVpP&bo*!0TTqP#Q:>B-;8,B6/0'Ecd*@Oo^_=OuS7OP%Kk@LcLVpP&bo*!0TTqP#
+Q:>B-;8,B4YskL]N[<P"UT6P&5Q%!0TTqP#Q:>B-;8,B6/0'Ecd*?Oo^_=LbP!kL^K;]D0'>4F
+(K!*FCB33L]rqBP"UTbP,XTFOuSUaL]rrYP!5$gL^'#ZP!4[1P&6?bOp$,pF_tPsP!FGY<,H\h
++EM+,F*(i2FGL-a!Kp*3*Kk8dP')Q\P!FGY<,H\h+EM+,ASu%7!g9OG98FXPD0qFgL]ET'I?IQ
+m3/@a$4aW?7D(mi15^eepL^'#*HYkGpP!FGY<,F?FP!FGYK.gqVD.-q;5*@^9DJ`flL]ETTHS9
+5SA7ZlMOu$;b6?ZdRF!,17D.-q;93iZKA7Te#@s;uIBcq+4Bl7cr@j#VsA!1\UL^/?TL^&9j<K
+[BG1Qk"OP#Qjm<,!IrAS6(+@<-IQ4aV'7BkM.%F!,1[98EY48pabb6ZumSF!,(40p518+CSekF
+DkZ5F+'3ND0'>4Bp),$DD@;;DFA2OBlnD=BnueQ!Kp*3!g60="FDe9+DHW4Oo^_%I?IQXP#P@k
+G%GQ5AS#aYASrW)P"U.++@C<\Ci^_-Bl0#+D0'>4BnuhR!Kp*30TrDk$Bf4BF(ZV0L]`e@P"UT
+bP,XTFD0'>4BnunT!Kp*30TrDk$Bf4BF(ZV0L]rqBP"UTbP,XTFD0'>4BnutV!Kp*30TrDk$Bf
+4BF(ZV0L^0(DP"UTbP,XTF>p*QdA9;a"GB5EO+DHW=Oo^_%P!FGY<((/:F_sJgBp),9D0'>4Bp
+),P3+d%_P!+slOuR&k16Oe`5%\[gP!+tKP&bnR+@C<\Ci^_9F(ZV0P"Us2>p*QdA9;a"GB4lq6
+V/D7P"U.++@SXh@:E^h>p*QdA9;a"GB5EO+DHW:Oo^_%P!FGY<,H\h+DI!3Ao9Df4`b1IF*(i2
+F<G:\D3>$K052PCL]NY>Ou"b*DJ`flL]ESo06:];F*(i2F<G:\1G<f\B4Ysk+DDruDKKT/7;cX
+7AS3-"P"Ur=Ou&7dI?IP_Bcq,G!KmJH1Qk"OP#PX.D0'>4Bp),F0TrDk$Bf4BF(ZV0L]NY>P"U
+TbP,XTF>p*QdA9;a"GB5EO+DHW5Oo^_%P!FGY<'k;:@<-W9Bp),9DFA2OBlnD=BnueQ!Kp*3!0
+U0*D0'>4Bp),D!2,KeHWqU[G%#3.+C]D#P"S)a@;L!-D0'>4Bp),D!.^63P"T('@:WnjDe"!4I
+=!)@+@C<\Ci^_.F(1;*6?ZdRF!,=@B-:oO983FsP,XU;>p*QdA9;a"GB81q<A/&/BnueQ!Ko7%
+5^eep>9H:V@;L!-@VK_C93iZKA7Te#@s;uID/Wrr+@8XpOu&7dI?IP_D'2,XART+8+DI!3Ou"b
+/+@0[P@:V\IBp),P1Mn7PP#-L0+@C<\Ci^_8@:><l>p*QdA9;a"GB5ESDe*E%6'=$e5^eepBcq
+J.B6/0'EcdI-HYmh:+DI!3OuS7(P!+slOuS7;P!+slOuS7<P!+slL`V^BP&c_+P&bnR+@C<\Ci
+^_8@:><l>p*QdA9;a"GB5ESDe*E%6'=$e5^eepI?IQIL]il;HWqU[G%#3.+DbIqP"T('@:WnjD
+e"!405YW<AKX=&1Qk"OP#PX.6ZumSF!+[0F(Sl(F(-mIF(-pJF(-sK>p+$@!KsFF99MqR+CSek
+FDkZ5F!,@I+BosTG%#3.+Dl14+DI!3P"T('@:WnjDe"!4052PCL]NY>Ou%NLK9AKJP(S1G%[&V
+$ASu!EH\_]L05_n3Ed:"pBp),P1N&!MP"L(=L]il;HWqUZG%#3.+DbIrP"T('@:WnjDe"!405Y
+W<AKX@'1Qk"OP#PX.6?ZdRF!+[0F(So)F(6sJF(7!KF(7$L>p+$@!KsFF99MqR+CSekFDkZ5F!
+,@I+Dl14+DI!3L]ETMHWqU[G%#3.+Dl14+DI!3P"T('@:WnjDe"!4052PCL]NY>Ou%N5>9Id(B
+-:oO98G9bWJCnECi+6++DHW4Oo^_=LbP!kOo\i2@:WnjDe"!4052PCL]W_?Ou%NL<IL$_P!FGY
+<((/:F_sGfBp),9D0'>4Bp),P3+d%_P!+slOuR&k16Oe`5%\[gP!+tKP&bnR+@:6[Ci^_9F(ZV
+0P"Us2>p*QdA9;a"GB4lq6V/D7P"U.++@SXh@:E^h>p*QdA9;a"GB5EO+DHW:Oo^_%P!FGY<,H
+\h+DI!3Ao9Df4_Z$[AS6(+@<-IQD3>$K052PCL]NY>Ou"b.De*E%6]s5YBl7cr@u(,J1G<f\B6
+/0'Ec`F<Ou"b4AS5RlA0>S/<GlnmCdi5P;e9SaBp),P!Ko7%5^eep052PCL]NY>Ou&7dI?IQHF
+(ZV0P"UT?P!*M%D0'?+AT!;)P,XUVOp$,KF(ZV0L]NY>P"UT<P!+.r+@:6[Ci^_/Ebpn3>p*Qd
+A9;a"GB5EO+DHW5Oo^_%P!FGY<.0p/>9H7U@;L!-D0'>4Bp),P93iZKA7Te#@s;uIBcq,G!KmJ
+H1Qk"OP#Ob^DIIR2+DI!3HUM:aF_sGfBnueQ!Kp*&D0'>4Bp),D!2,KeHWqUZG%#3.+C]D#P"S
+)a@;L!-D0'>4Bp),D!.^63P"T('@:WnjDe"!4I=!)@+@:6[Ci^_.F(1;*6?ZdRF!,=@B-:oO98
+3FsP,XU;>p*QdA9;a"GB81q<A/&/BnueQ!Ko7%5^eep>9H7U@;L!-@VK_C93iZKA7Te#@s;uID
+/Wrr+@8XpOu&7dI?IPqBOtU_5p0m)98EV34aUBU6?ZdRF!,O9@?O8LG%#3.+Dl14+DI!3P"T('
+@:WnjDe"!4052PCL]NY>Ou&7dI?IQ6+@:6[Ci^_8@:><l>p*QdA9;a"GB5ESDe*E%6'=$e5^ef
+JI?G)'1G<<W@mPHt!IHJ;+B3B,6Qg*+99M)KL]W`3HZ"WBP#-L0+@10ZCi^_8@:PHn>p*QdA9;
+a"GB5ESDe*E%6]s6g5^eep>9H4T@;L!->9J!!@j#i&1*CXJ1E^aK1a$'HDMS=VWKKo;93iZKA7
+Te#@s;u:DL3LCF(ZV0P"UT2P%K&F+@C<\Ci^_9F(ZV0P"Us2>p*QdA9;a"GB5EO+DHW4Oo^_%I
+=#0@D0'>4Bp),F0TrDk$Bf4BF(ZV0L]NY>P"UTbP,XTF>p*QdA9;a"GB5EO+DHW5Oo^_%I?ITY
+P(So_I?IPt@<?X/5p0m)97(MsB-:oO99M8HDD@;;P!5$gAo9Ae4d&!@DDRG=P&c_+HWqUYG%#3
+.+Dl14+DI!3P"T('@:WnjDe"!4+@SXh+DI!3HWqU]6V1]q@j#&"@:WnjDe"!4052PCL^0(DOu&
+7dI?IQHF(ZV0P"TD)1Qjn8+EM+,F*(i2FHUL("FDe9+DHW4Oo^_%05YW<AKX@'1G<H[D.-q1!0
+T,kF(K!*FCB33+DHup06:];ASu$$BcpDnFD5P[DIc[WB-:oO99K==1Qk"OP#O)K+DHW4Oo^_%P
+!FGY<*LJ2G%#3.+Dl14+DI!3P"T('@:WnjDe"!4052PCL]NY>Ou&7dI?IPrBl7@"Gp$ga97''8
+FEMFd+DHW4Oo^_=HYmh:+DI!3L&dm0Ap[`)6$?[QF!+q5@?O8LG%#3.+Dl14+DI!3L&caeWKKn
+[+CSekFDkZ5F+&BX>9H4T@;L!-@WQ"A91!f1Ci^_9F(ZV0P"UN0J<Hmp93iZKA7Te#@s<!BP#X
+/L+DHW4Oo^_%P!FGY<*LJ2G%#3.+C]&&P"T('@:WnjDe"!405YW<AKX<2:6IDr5^eep05_muBO
+tU_66L!*99M)KL^'#=HWqUYG%#3.+DbIqP"T('@:WnjDe"!405YW<AKX=&1Qk"OP#PX.6$?[QF
+!+[0F(Sl(F(-mIF (-pJ F(-sK F(.!L F( .$M >p+$@ !KsFF9
+9MqR+CSekFDkZ5F !,@ I+Bos TG%#3 .+ Dl1 4+D I!3P
+"T('@:WnjDe"!40 52PCL ]N Y>Ou% NLK9 AK JP( S1G%[ &V$ ASu!E 8PXV
+g!IHJ;+B3B,6Qg* +99M) KL] W`3 HWqV )B l7? qBldiP 8P UC6+CS ekF
+DkZ5F!,@V#Eho1> 9H7(: 3L& ^F! , RAA !0J jOo [4QDe* E% 6]s6g5 ^ee
+p>9H7(:3L&^F!+[ 0F(6s JF( 7!K F( 7$ LF( 7'M F(7*N F( 7-O>p +$@
+!g9OG99MqR+CSek FDkZ 5F !, @I +Dl 14+ DI! 3L]E
+TMHWqU[G%#3.+Dl 14+D I !3 P" T(' @:W njDe "!405
+2PCL]NY>Ou%N5>9 Id(B-: oO9 8 G9b WJ CnEC i+6 ++DHW4Oo^_ =LbP!kOo\i2
+@:WnjDe"!4052PC L]W_?O u%N L <IL$ _P!F GY< (0/G+DI!36 >:=GEd8dAL^
+0(DP"Ur@HWqU]6V 1a$DBN 4-@ :Wnj De"! 405 2PCL^0(DOu $epD0'?+AT!
+YoHWqV)Bl7?qBld iP8PU C6+C SekF DkZ5 F+' 3NP!FGY<,H \h+DI!3L]ET
+1HU;Fa@<-W9Bp)+ UBl7@ "Gp$g W!KmJ H99 O<^Bl7@"Gp $gW!g3SI99O
+<^Bl7@"Gp$gW"-N \J99O<a 6V/D7L ]NY>P "S, UDIIR2+DHW ;Oo^_=Op$qg
+HWqV0F(ZV0P"T4oA9;a!Bl5&!+CSekFDkZ5F"_5MBnueQ!Ko6Q+Dl14Ch7LI4aUBUAnc-kCh[s
+ %6:jop>p*QdA9;a"GB81q<0BLpP#Qjm<*LJWBl7?qBldiP8PUC6+CSekFDkZ5F!,0>D0'?+AT
+!;)P,XU]HYmh:+DI!3Ao9Df4_Z$[AS6(+@<-IQD3>$K>9H7(:3L&^F!,RAF-91%+CSekFDkZ5F
+"_5MBnueQ!Ko5lD/Wrr+@D;J055<@@:P)nOu"b4AS6(+@<-H4Bp(8*F(JuqDIal(+B<<$Bl$4U
+A5d&P+DI!3Oo^_%P!FGY<'b2/@:VYHBp)+TBOtU_66L!*99N+u>9H7(:3L&^F!,RA@?O8h+CSe
+kFDkZ5F"_BKA7ZlLOu%N5>9H7(:3L&^F!,RA@ZjAi+CSekFDkZ5F"_BKA7ZlMOu%NL<K]UqP#R
+T0I?K52Oq*X204T3I+Dl14Ch7L?!g7AU!KmJH$'I(tD/Wrr+@D;J04K*5CibC9OpR:-04Jm=F,
+0gZ1G<H[D.-q1!0T,kF(K!*FCB33L]ESo06:];ASu$$<GlnmCdi5P;e9Tt!0U!<1G<Hu!0T,kC
+5;kQ1OEgYD0'?+AT!Z'H]gXBP#Q.5D.-q1!0V2GBl7cr@j#VsA!1\C+EM+,ASu%7!g9OG4d#qp
+052PCL]W_?Ou$epD0'?+AT!Z'H]gXBP#Qjm<,$5e@:LEs@:PH`BcqJ.B4YskL]N[<P!+s2HS9(
+UBnueQ!Ko6Q+Dl14Ch7LI8pc^dI?IQXP#Qjm<*M"eDIYscASu!E04f$26SE"g@mWa^+C-+,De*
+FB99NhK5CJ]+04T3I+CfV:L]D1Q9Th1bDIal"GB8pVOu"b.Bl7@"ARQ^!A;C>N!H)G(!g6HE!J
+h&FCkr.U!Jgf?Cm$Sp@<?4%M#WWTHS9&FF<GF7DIIQs@3BT!FD5ZV2KNkYFHSF5GA1S1D/!lrE
+b/Z%Eaa'(Dj"pXEH6/a1G<DaBP2FM/<VeBG9D*DA<JL,1M@nTOo^@?P%odRP!+/*+ErubD/!lr
+Eb/[BApZ1E+D?Q3Oo^_%06\O_L]NY>Ou%NL<.0+,B658?P&,>VA0>QKCm&CW06\O_L]NY>Ou$b
+oGEQcZBl7@"ARUa6HS9RcGDH9_WKK%jBHUuE!KmJH1M@nTP&+uLDIIQs@?P5L06\O_L]W_?Ou%
+NL<.0p/I=!V\+D?Q3Oo^_%BHVM^Ci*m(@<,pfP%K%oBHUuE!KsFF1G<qpGDH9_!Ko6P+ErubD/
+!lrEb/[BApZ1E+D?Q4Oo^_%I?IQXP#Qjm<IL$1061uTF!,.Z1G<6VCisT4F!,[i1OXU[DesQ5D
+KCX6P!+.F@rH1+D/OD;D/!lrEb/Z%Ec6/COo^@>P,WJ?GB8pFOuRK#GB8oJL]W`SL]ET$H\_]c
+!I^,1Ou%NL<,uo$F,9jZ4aSi&Dg-7FD/!lrEb/Z%@rH1+D/OEX!Jgc>WFKj_F_u#;P#@H&@rH1
++D/OEX!Jgf?C5;kQ4aVtcOo]uo<0B%cP#Qjm<A/6#Dfg%CEc6/C+Cf>+F_u#;P&,pUP#@H!HZ!
+AM!KmJH3/@X!;MYF<!KmJ>$'K+\!g3S%A8cR2P#-Lg5^eep05b;CDIeP(Oo^_%I?J.pDIXf,A;
+C;M;MYF<!Ko5lDKd4@A0>c"Oo^_%061W@@VKq*+Dt_.FE8RBGDHQgCkr.U!KsFF1N$_G@s<!W@
+ZjQ704T3I+BosuGB8oKP'(V[A7ZlM8PYF3H\cNeH\cEbP#ZC1+CfV:P%'TRL]N[<H\cEbP(R&'
+1OYEc04f$2F!+\I#r++g0JP790JSRo0JP790JP790ocPo0eb=90ek@:NX7Bo0JP:90eb>B#r"(
+g0JP790JSRo0eb=90eb=:0THGo0JP790eb=9NX7Eo0ek@:0JP8A#r+.g0eb=90eeUo0JP790JP
+::0THGn0eb=:0JP:9NX7Bo0JP::0JP8A#r"(g0JP790eeUo0JP:90ek@:0THGn0ekC:0eb=9NX
+7Eo0JP790JP;B#r++f0eb=:0JSRo0eb:90eb=90ocPp0JP780eb=:NX7Eo0eb:90eb>B#r++g0
+JP780en[p0eb=90ek@90ocPp0JP:90JP79NX7Eo0ek@:0JG5A#r+.g0JP790JSRo0ek@:0JG48
+0ocPp0eb=90eb:9NX7Bn0eb=90ekDC#r"%f0JP:90en[p0JG480ekC:0ocPo0JP:90eb=:NX7B
+n0ek@:0eb>B#r"%f0ek@:0JSRo0JP780eb=:0ocPo0eb:90eb=:NX7Bo0JG490eb>B#r"(f0eb
+:90en[p0JP790eb:90ocPo0eb=:0eb:9NX7Bo0eb:90JP;B#r"(g0JG490JSRo0JP:90eb:90o
+cPo0ek@:0eb:9NX7Bo0ek@90eb>B#r"(g0eb=90JSRo0eb:90JP::0THGo0JG490JP:9NX7Eo0
+JP::0JP8A#r++g0JG490eeUo0eb=90ekC:0THGo0JP:90JP:9NX7Eo0ek@:0eb;A#r++g0ek@9
+0eeUo0eb=:0eb=90THGo0eb:90JP:9NX7Ep0JG490JP8A#r+.g0eb:90eeUo0ek@:0JP:90THG
+o0eb=:0JG48NX7Ep0JP:90eb;A#r+.h0JG480eeUo0ekC:0eb:90THGo0ek@:0JP78NX7Bn0eb
+=:0ekAB#r"%f0eb=:0eeUo0JG490eb=:0THGn0JP::0eb=9NX7Bo0JG490ekAB#r"(f0ekC;0J
+JLn0JP:90JP::0THGn0ek@:0ek@9NX7Bo0ek@90ekAB#r"(g0eb=:0JJLn0JP::0eb:90THGn0
+ekC;0JP78NX7Eo0JG480ekDC#r++f0JP:90en[p0eb:80ekC:0ocPp0JG480JP::NX7Eo0JP:9
+0JP;B#r++f0ekC:0JSRo0eb=90JG490ocPp0JP:90JG49NX7Eo0ekC:0JG5A#r+.g0JG480en[
+p0ek@90JP:90ocPp0eb:90JG49NX7Ep0JG490JG5A#r+.g0eb:80en[p0ek@:0eb:80ocPp0ek
+@90JP79NX7Ep0eb:90JG5A#r+.h0JP780JSRo0JG180JP::0ocPo0JG490JP::NX7Bn0JP::0J
+P;B#r"%e0ekC;0JSRo0JG480JP::0ocPo0JP:90JP::NX7Bn0ekC:0JP;B#r"%f0ekC:0JSRo0
+JP780JP::0ocPo0ek@90JP::NX7Bo0ek@90JP;B#r"(g0ek@90JSRo0eb:80ekC;0THGo0JG49
+0ek@9NX7Eo0ekC;0JG2@#r+.g0JG490eeUo0ek@90ekC:0THGo0eb=:0eb:8NX7Ep0eb:80ekA
+B#r+.h0JG490JHdq1NIDXF,0m\C5;kQ4aSi'Bm=3"B4Z-,>9I,m@rH1+D/OEN!KsF&Dg-8Y!g9
+Ng+BsX%Ec6/CL]Wa=>p*>o@rH1+D/OEN!g9O'Dg-8Y!KsEf+BsX&Ec6/CL]N[<>p*>o@rH1+D/
+OEN!KsF<!*p^OL]E52>p*F91OXU'F(ol1A7oIp+Bosm+Cf>+F_u#;L]Wa=L]C^'>9IEoCisT4F
+,0m\WH)p$F,0j[WEgWN+Cf>+F_u#;L]N[<L]Ld(>9IEoCisT4F,0j[WH)p$F,0m\WEgWNL]E52
+>p*@-!-3"%F,0j[WEgWPOu%NL<A.m"G'b?ADesQ5DKCtWOo]uo%[&V$Dfp/<Bl7K)Ec6/C+Cf>
++F_u#;P&-9fOu%moL]MO7GB8Q@P,Wd]H'1@S1Pc$e!Fp%aF_u#;L]N[<HS9W,5*@^?F`_G6DIj
+r8+F,)?D0@%H+F0+NL]W`SL]N[<P'DD<8:?XlF(ol1A7oIpHQ[6LFDPZ/AWf6?!g7\:D0C^9P'
+DD<8M=RiARTUhDesbRG`k7R1N[Y[AKZ5R!KmSA!ci4'F,0j[WI&lQ5%JMR+EMgFP!5%%L]NZ%H
+]iM`@;L!rP!FGY<.0p#I?G)'1G<6SARTV"Dg-O]H'1@S1N[Y[AKZ8S!KmSA!b6.bF_u#;L]N[<
+H[-`ED0@%CH#8^.P"UT3P!+/TF_5&uF(LM"I?IQXP":"a%[&V$AThKuF*VV3DesbRF*VVc5*@]
+TGAhMCFG'X]Q@G&R>9I-'G_c?*+BpLDL]Ld(>;(8X!*p^O06r?S>p*F"Oogeh04o$`5*@]TA8-
+(I5*@]TF*2>U!0T,kAnc:,FGTs[1G<QQF**6<Ou%moL]M%#E\D[#4aU[WCisT4F+&BXEc6/CI?
+ITd!KsF/A8-(I5*@^CH#4[7Bl]AIA8-';G`k4:Ec6/CI=!)HDesQ5DKC5h<JU[=WFft0Ch.7#0
+6r^DH]gR@P#Pt/G*5LS!KoTmAnc:,FGTs[4aShoBl\9:+Co2,P%9_3I?IP_CghC,+Co2,P%9_3
+06;8Q+EM[BL]NY>Ou%NL<.0p#F*2=BCghC,Oo]0/EcZ>cWFT^`06iXCHZF%KF+&BX@rH1+D/OE
+CP#[Z]OuRZ(EcZ>cApZ1TDfTo@P!5$bI=%-"I?ITYP"@<GAT!;(Ou%,sGB8QAP%odRP!*i(GB8
+QKP$sMoHS9G_D281T1G<^'!0T-o!JgbdDesQ5DKCU8P,We<Ch7$q@rH1106;8Q+EM[BL]NY>Ou
+"b1+EM[BL]NZ%HZF%KF+&BXE$01>GB8p`I?ITn1OXU'F*2>U!0T,kE+No0E+No0E0:6b1G<^'!
+0T-dP#Zpn82"pnDBNn0DBNn]!Ko6eP#QI?GB8QAP%odQP!*;nCisT4F,16f@?PYX06;8QL]ESo
+05u^IOu%mpL]MO7GB8QAP,We<Ch7$qEc6/K06;8Q+EM[BL]NY>Ou"b1+EM[BL]NZ%HXgu1F_u#
+;I=!)U+Cf>+F_u#;P&,Q0<K].dHS9G_D281T1G<]YDBNn0DBNn]!Ko5lE/4LW1OYEdI?I,SE+N
+o0E+No0E0:6b1OYEc06;DUE$/@-@rH1+D/OEN"HieA!g7AHL]DjdK89M;DesQ5DK?qAH#8^RL]
+N[<H\_Zb5)93%5')!dP!3AoCisT4F-94[!g7\^!/LW'P"9)$CisT4F,0s^!Jgf?CjUs<I?K4gO
+u"b$DesQ5DK?q1DesQ5DKCU:Oo^_%061uTF!,LAGB8QCOo^_%06;8QL]ESoL]WA5Ec6/CL]`g>
+HS9Z-5*@^IL]NYAL]W_?L]V()CisT4F,0p]WI$:CP!5$bL]MjDH#7LCG_cB`WHj:#P,Vu/G*5L
+S!KoTmP!FGY<-*>%E$0C]!KmJ/L]N[<A8QLQ98EV34aW>WI?IQNH#7LCG_cB`WHj:#Oo]*1G*5
+LS!KoTmP!FGY<-*>%E$0C]!KmJ/L]NY>A8QLQ98EV34aW>WI?IQNH#7LCGT_8SA8QLQ98ES24a
+Si'F_r7BF_up8Oo^_%P!FGY<-*>%E$0C]!g9O.+Co>4P"UT3P!+/T5^eepF*VVA+F##SL]Wa=A
+8QLQ98EV34aW>WI?IQNH#7LCG_cEa!I5euD0D(8L]NZ%H]gXBP#QLJD/^VB+F/bEOo]*1G*5LS
+!KoTmP!FGY<%i<8D'3nBD284U!Ko6eP(S1G8:?Xl04Sp:F_u#;+Cf>+F_u#;L]im?Ou"b3Dg-7
+FEc6/CL]im?Ou%<#EcZ>Y!0TKlK`D$s@=<KHDfTo@+EM[B+EM[BP&-;\E+NpMWI9q0I?G)'1G<
+ci@;Kjp+BsX&Li@^(3/@["Cl!(oC427t?'6usF*(u4+DuCZE0=+T!KmJH1G<ZYAohO*HQ[BOAT
+3fKF*(i2FHQZQOq*X204JL6FE:r1Eb0q#$6K;31G<TRF),h>D..L$M#WWTHWqV0@<63,?%%&BA
+mob&HQZOK",I#7!Jg_]I=!)@L]E53L]WA7?%%l9I?ITn1G<QYFDYH-CNG:7OpR:-D..L$F*fQW
+@<64I5*@]TEcY`7F!+[0D..L$+BsX%L]`G<L_3o8D..L$P"UT2@s<!@L]NZ@Oo^AYP%p.DL]W`
+AOo^_0L]`G6P)"IK8Wn4ZF`(]9L]DjdK3aWrL]E53F*(u4L]N[<HS9G^@<-IQ5*@]T:.-4BA;C
+8L!HW?kEcdJDF*(u4Oo^@>P,WMEAT3f1Ou"ad=!2C)L]NY>F*(i2FHWVEFCfES!Jgc>WH3/mE0
+=+^1G;Kj+APu\:.18EOu"b$De3NmF!+\C!DZ"/L]DjdK3aWrL]N;4:.'@]Bp(ZC1JU;ns+g]&0
+5?Y6Ou$TdAS,Oq+DN$/De3NmF!,4\98ISN!HN6iCi<r/Bp),!De3NmF!,4R!KsFF99O+IEKY("
+WJGPWC6EgiP":"a8;I8%!DZ%=!KsF/06E@@EcY`7F-8_*AnH*qFHT:;F(9E8+AP<IDe<U&ATX)
+.Oo^AYP%p.9L]E53:.'g=P,Wd]C6CcD1NIPHGB4m%6m-6-!H2R^F(KG9EcY`7F!+4G+DR&?L]N
+Y>De<U&ATX).LiJRYF<G(3AS,Oq+DQ]5Oo^_=P&,qoP%p/ZLiJSmP'DD<89/c]GB4m%6m,5lOo
+^@>P,WA3AohO*LiIMZ@rGpjAof(i6]t**Cl!(oC6GQPEKY("G^Y`G:.0m=:035PP,Wek3-'(MG
+B8p2De<U&ATW`JEcY`7F,1!Us,r.UAnH*qFHT:[WJGPWC6EgiP":"a82"FdFE8RBA8cR2P,4<t
+@VKq*L]CY>!\c<g!\c?h!\lBh!\lE8+DkP.CQ_>RH&)KW!H*+.056S5Ou$Q]FE8R=L]N[<L^B5
+\L]W_?ASu"!+EDO5GB4m@P"Us2P'MJ=89/9Y@VKq*L]ET7HX^]2F!,@EL^B5\L]W_?NY+!#0ek
+C;0ekC;0ekC;0ekD=!-2Xf@VKq*P"_$aI?IP_E+sQ<+E)CECh[cuOuSV6OpR9hOu"b1Df^/Z!0
+T,kE,TfC+EDCEF,0m\C5;kQ4aVtbI=$!QGB8Q@P,Wkm<K].IBlnEP!+KYaF-:!g#*PsK9RD,*B
+m=\AE,TfB+E27?Gp$X7G*5LSs,oNlP!FGY<,uo$F,0m\C5;kQ4aSi$Df^1HE,TfCL]NY>Ou%&q
+F*SmKDg-8c4aSi$Df^2[!0T,kE,TfB+E27?G_cB`!Ko6eP#QjV05tiNGT^sDF*NKAOo^_%E,Tf
+B+Cf>+F_u#;P!+.FE,TfBL]ESo05tiNGp%'EF*WQBP,XU#I?IQXP#ZpnAT2@.F!,F?F*JgHDf^
+1HA8QLG",Qu?LPRXIWKMLSP"CH0L]N;8HS9)r5*@^@Bm=\AF(ol1A7oIp+DI!3OogehA8QK4@V
+Kq*+C]&,F-:!g#*Ps"Oo^_=LbP!kP'DD<82#$oDfTD3E+sQ<+D#_)Cial=@W-(G1NR&EEb-A&A
+TMs7@rHC!P#-KY@V'V&F*VUFE+sQ<Ou"b#ATMs7@rHC!+EM%2Eb1CiAmob&+C\o'FE:r1Eb-A6
+Dg-7F@rH1+D/OEXCkr.U;Nak>"FH:sI?IQXP#O)NBln3#F))n;Bm=]^30Ia6$'H0h1Pc$e!Jgo
++056S5Ou$ogFDYH-CER\4G\(DuATJu.P"Ur>P'(;PG)-0^G^Y`GCh\!.@<64*+DkP.CERG-FDY
+H-CQ`pS@<6O;06:WAEb-A0Bln3#F))n0G%#3.H#7#/Cm$Sq@rHC!+C\o'FE:r1Eb1D1HS8i>F*
+)JKD'3Y/FDYH-CQ^J,@V'V&F(9-/AKZ&(DfTEP1Lap:FE:r1Eb-A6Dg-7F@rH1+D/OEXCkr.U;
+Nak'P!FGY<.0p/I?IQXP"@<GBm=\A@V'V&F*VVc1M1':FHUTPATMs7@rHC!+EDCEF!+t2CisT4
+F-:?q!g6HE@?Lb?04JL6FE:r1Eb0q#$6K;31MpQACNFhFCh\!.@<64*P!5%%05P?ED..L$P!5$
+b06:WAEb-A0Bln3#F))n0G%#3.H#7#/Cm$Sq@rHC!+C\o'FE:r1Eb1D1HS8i>F*)JKD'3Y/FDY
+H-CQ^J,@V'V&F(9-/AKZ&(DfTEP1OYEcI?I/TE+sQ<+C\o'FE;_EOu%NL<'38rEb0,A061WAD.
+.O,Bm;:ADfg)H+EVXHAM8":G]P!HBm=\PE+sQA+Cf>+F_u#;05tWMGp%-GGB5ENASGdjF<GUBG
+B8QAP&,qFOu=t;Bk2=!+Cf>+F_u#;L]W`ULe*[e05kfO+E)4@Bl@m1+?ht3A8c@-A9)+&P&N'-
+Eb0-*@<?O(G`l$h3IP*b@UX:eDe*E%?$h`SOu%NL8WjRH1G<9WFCT6"AWf$9A1r(@/n8fPFCfK
+5H"(o:FDl%L@WuO*E$/\&Anc-oEb0<1F`Lu'P')pJ06:]HE+*6lBl7RH\pKT_F(KH4@:O(eDJ+
+B\;u~>
+% uk.co.terryburton.bwipp/dotcode 0.0 2020122800
+%%EndData
+%%EndResource
+%%BeginResource: uk.co.terryburton.bwipp gs1dotcode 0.0 2020122800 74554 81331
+%%BeginData: 34 ASCII Lines
+currentfile /ASCII85Decode filter cvx exec
+06:]HE+*6lBl7RH \pKT _@s)g 4ASuU /@ :O( eDJ() 6Eckq9
+F(KH4@:O(eDJ+B\ </: R<23K pPEa` [' AS# n&D fV"#
+06M%_@rEuAATDg: @Wc^5 Df .1:GA 2#8P 1l (DO uP+6@ <-F #Bl7m 4FHS
+U:F_`U>D_?-CEcQ G7F`M SBD D#C BBlJ $S g6- ]D3%no c0 l1QAFH SU:
+F_`U>D_?-CEcQG7 F`MSB DD# CBB l J$S g6- ]D3 %o;`DJ `g (EbTc] 3%o
+Di/n8fPFCfK5H"( o:FDl %L@ WuO *E 0A q<G `k$ >A8cR "D e*FB3 %oD
+i/n8fPFCfK5H"(o :FDl %L @W uO *E0 Aq< G`i LhB6
+,e<DffK-A7^+D'T t>:% 5 2X =F D5Z 2F- 8_M1 G<3GE
+as#uAWf6?1G<9WD KKE0@< Wi+ @ ;L! rO u"b1 @<- F#+D,%uF(L Lj04]!=FDPZ
+/F<G1(Cia0N1N.5 SBl@m1 P-6 N [FE2 )5B6 8E< AWf3'L]NYr Opu>KFD5Z2F
+*j(NAmoLsAWf3'P !FGY<0 B5( @ZmR N0oc 8tP )XR(F_-_!H ]ftD5*C&O5*
+@^MH]ft&EckrV1O YEdI? J0)* g/N: DfBf 4Df 0WZ5*@^MP# Q@=FD5Z2F*j
+'+I?I/TAU&0&DIe )IAo; +%@;L !-4?P 99@ <-F#+E1b0F (I"D@<-F#Df
+0B:+EVXHAM8"2Ec Yf(DIXf $@;L!r +?huP 1M1 N7G%#3.0/% 9QEcYf+DK'`
+?P!=AX%[&V$@;0d*>9I471G<o[Ci^_'+C1-d@UX:eDe*FB30Ia,!KsF<!KoX09RDp^NW>5*H]g
+XBP#RGB.?][RFcnqOFcnqK!@X+jH]gRUFcnqE",Hu@LOFN0!/L`5!Kr4dP#Y^/@;0eG!g7\h)i
++QY!KpPj04AR9P!5$b>9J)tCiba@P')p,L]NY>P#u:?E+*Wp+C-XD@;L"J5*@^bFcplqP%Bf!A
+8c@-Ch[d/P&PbVBlbD?@;L!<05#>\Ch[d/P!>+PI?IP_@;0=fG\(EA(QpY=1L#Y8L]N;7H[V&J
+?$hS50JJ:aP,4<ZOuSUaL]N;8M#WWnLbOtmP'CDLAncL$A;C>D!Kr5$G^Y`H>DNZC!JhG:I?I-
+W(Pj/h!Ji"JI?I-W.:%:V$A\bHV33Nq3+6N5Bm=3"L]`G6P)#3FI?I/TAo;*5M#WVo04\pAGT^
+35Ao;*5+C1-dL]E53@;0eG@Yb&JWI$:4P!5$b04AQ;@;0d*Bp),P1G<o[C`mn0Ci^_5P"UroA8
+QF5P%%j6P%'RTG%#3M@ZgbT$'I9(!+]qgG`m?83+QlJG`lNEBcpWC5'q^@8R7L)OuQuhFEisX@
+;1m6Oo]`7C`lrF5'q^@8R7L)04\pAG`k7R1MIt?BlfGHL]N[<P&4WAAncL$A0>;pL]E54P"_$H
+P&QQeHXpu8G`lNl!KmJH$'I9(!+]qgG`m?83+QlJG`lNJDIYDaGV<TEFEis4Ou%NL<.0p#04J@
+1@rGmh+Co>2G`lNl!KmJ>"d3\bV33VfBnubP1G<L!!0T-bBcpr'FEisXP!+/T5^eepA8QF5+DI
+!3OuR&k@kj-0H]iM\@<,jrA7ZluNWi`Y:.$b!GqWnTC5<"U!Ko6eHX^E(@rGmhP!3WD5*C/=P#
+X/L+DHW4Oo^_%05;VEL]NY>Ou%NLAM7M$Eas#uAKYGjEas#uAV^>$P"_#pDfBf4Df0WV"`RmjF
+(LNADfBf4Df0WV#\7jkFC]E#GB@kJAWh:VE-,f4DKCgDE+*d.AS,giFE2M8P'AWgEbBG9@UX:e
+De*E%DfBf4Df0VL04]!C@rGmhP!>*c@<-"%NWX3=FDl,?Bl@m1P'CDUB6,2+Df0Z-Eaa0TE%`k
+bASu?nFE2)?P#RT)I9S@6@<,jrA7ZlhH]iB31OYEXOq*X205#>\A8cR"De*FB30If*F_`U>D_?
+-CEcQG7F`MSBDD#CBBlJ#6A7]@eDImj"F)Q2A@qCgGOuY1:ATVm"@r#drB9KiQP'(hWFDtYuCM
+@[!I?IP~>
+% uk.co.terryburton.bwipp/gs1dotcode 0.0 2020122800
+%%EndData
+%%EndResource
+%%EndProlog
+%%Page: 1 1
+gsave
+1 1 translate
+0 0 moveto
+<28323335293576425a494625213c423b3f6f612528303129303132333435363738393031
+ 32382838303038293139303532303031>
+<726f77733d3136>
+/gs1dotcode /uk.co.terryburton.bwipp findresource exec
+grestore
+showpage
+%%Trailer
+%%EOF
diff --git a/graphics/pstricks/contrib/pst-barcode/doc/images/gs1northamericancoupon-1.eps b/graphics/pstricks/contrib/pst-barcode/doc/images/gs1northamericancoupon-1.eps
new file mode 100644
index 0000000000..389abfb342
--- /dev/null
+++ b/graphics/pstricks/contrib/pst-barcode/doc/images/gs1northamericancoupon-1.eps
@@ -0,0 +1,494 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%BoundingBox: 0 0 201 82
+%%Creator: Online Barcode Generator 2018-02-04. https://the-burtons.xyz/barcode-generator/
+%%CreationDate: 2018-04-16 22:56:38
+%%Pages: 1
+%%LanguageLevel: 2
+%%DocumentData: Clean7Bit
+%%EndComments
+%%BeginProlog
+%%BeginResource: Category uk.co.terryburton.bwipp 0.0 2018020400 30005 33214
+%%BeginData: 7 ASCII Lines
+currentfile /ASCII85Decode filter cvx exec
+P1OerF_-`n01TSk ATDKp 010/i AS5q% H' 6mE 30Ia, !KmJH2
+3Ji?3%mj@F*(i.@ qAV bE+L\ DATVm "@ r#d rB9 KiQP
+'&Es@:O(aA79M!@ <ls?E +O HE04A mA@< ls ?E+ OH\<K _S[ F_`U> D_?-
+CEcQG7F`MSBDD#C BBlJ$ S4t f93 FCf* 'E d8d <AS,Xo AT D@'Dfp )1A
+Wh2!hZ~>
+% Category/uk.co.terryburton.bwipp 0.0 2018020400
+%%EndData
+%%EndResource
+%%BeginResource: uk.co.terryburton.bwipp raiseerror 0.0 2018020400 153684 40223
+%%BeginData: 9 ASCII Lines
+currentfile /ASCII85Decode filter cvx exec
+06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6 Eckq9F
+(KH4@:O(eDJ+B\< /:R <23JD %Ea`[ 'A S#n &Df U1I,
+\;":DfV")04f0ED fTQ0A oE hrP'A 6`Ec Q) =P! 1O1Ec Q)= DIIBn P!5%
+R,\;":DfRL@Df'? "DIeo MP' A6` EcQ) =0 5b? FATDg0 EZ fIEF_- _\P
++mAf%[&V$Ea`['A S#n&D fV" #P% 6 4gC G'+ 8/p (ZFEd; ,: Ecc5;/ n0$
+=E,Zq1AS,XoATD@ 'Dfp) 1AW h2! 3A 5G bFD tYu CM@[!P .H "'F`V, 9E+
+*6lBl7R3P#M~>
+% uk.co.terryburton.bwipp/raiseerror 0.0 2018020400
+%%EndData
+%%EndResource
+%%BeginResource: uk.co.terryburton.bwipp renlinear 0.0 2018020400 86063 81859
+%%BeginData: 72 ASCII Lines
+currentfile /ASCII85Decode filter cvx exec
+06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6 Eckq9F
+(KH4@:O(eDJ+B\< /:R <23Kp PEa`[ 'A S#n &Df V"#0
+6M%_@rEuAATDg:@ Wc^5D f. 1:GA2 #8P1 l( DOp s'bAS u<u DIm6s H\`B
+!23JD%@<-"%P!5$ b06:T D+B oso Ou"b #B QG; #+C1-d 04 JC3+Bo soO
+u"b5G]Y'4+C1-d0 4J@1@ rH1 %Ef L <GD KBB 2Ou "b*DI[ L* A7]joG ]Y'
+?@;L!rOu"b5AU&< ,Des? 4NW jQC F( KH V1G <i] G]\1=C h[ O"NWjQ CF(
+KHV1G<i]G]\4>Ch [O"N WjQ CF (K HV1 G<i ]G] [P9D
+KLmD6Z7*fBk;=J1 G<i] G ]\ "@ H=_ m>O u"b5 AU&<A
+De<U&ATW_.Ou"b5 AU&<BD e<U & ATW _. Ou"b 5AU &<0@;p:D!0 T,k@;L%-AU&
+<W!0T,k@W-9tATD :!Ci=? S"a + ^(AT X(k0 4J@ "CM.[+F`(` "Des?4NWjQC
+F(KHV1G<H[CNFH8 ART,,4 rKc WOu" b8Bk 2=! L]ESo04J@1 Eaa'(DhnFW1
+G<fg@:Nkh@<?4%L ]NYp0 6:fF G@GK2 A7]d (Am oLsAWei&@W -9tATDTuAor
+h9Ou"b#DfTB"EcP l,BQT %;Ou" b#DfT B"E cc5=L]NYp0 4Jj?A7]djDf
+g)>D284U1G<3UEb &a%GA1T 0BSo"S !!&0< 05# E9Eb'B-Blm p-E+*6f+D,%
+uF(LLj05#E9Eb&utAor!1F,0gZ1G<B`@<,mpAS-%0E,TfR!0T,kB6@X'A9)BsBQS33F,0gZ1G<
+B`@<,n!BkM+$H#R\CL]ESo05#E9Eb'B.A9;L@#*LbqB6@X'A8#OgB4uCC#EglOEbBH?Ou%NL8T
+/QiH]g15P"@<9@<,jrCi=>:@UX:eDes?4OtDhQ06CcMFCT6*DfQtBAU&<,Des?4OtDhQ06CcMF
+Eh51BkM<+FCf]=G[YE&B5WkaOu"b5AU&<B@;KXjDBO%4G]\4>Ch[O"OtDhQ06CcMFCoH/F<G[:
+G][P9DKM$nOu"b5AU&<<BmO>5FCf]=F(or3OtVtS06CcMFEh_9AohO*+EV1>FEh_9AohO*OtVt
+S06CcMFEqe:AohO*+EV1>FEqe:AohO*OtVtS06CcMFD#$$F!,R9G][S,E-%0qOu"b"Cijc1G]Y
+':Cijc1G]]*#Ou"b#DfTB"Eas$(DfQt0DfTB"Eas$(DfV!mOu"b#@:O(cEc6)<A7KOoDfQt0@:
+O(cEc6)<A7KOoDfV!mOu"b*DJO<4Eb/Zi+DG_/F)Z/2@:YNSOu"b8Bk2=!+EqO1FD-gjOu"b#@
+<-BsFD5Y9@UX:t@<?4%OtVtS06;)@@qB[hFD5Y9F)YPtATD4$BlB.fOu"b#DfTB"Ebo<!F<G%2
+Eb&a%Ch74#OtVtS04Jj?A7]e%BkM+$+C]80A7]e%BkM+$OtVtS04Jj?A7]e'Df?h.DfTB"Ecc5
+=OtVtS04Jj?A7]djDfg)>D'3;+Eb&a%@W-@1Df(XjOu"b#DfTB"Ed)5.FD)e+DfTB"Ed)5.FD-
+gjOu"b(F^]<$Ch74#E,Te?B6@X'A8GghFDu/>OtVtS05#E9Eb&utAor<;Df[%6F^]<$Ch74#H#
+R\COtVtS05#E9Eb'3)B4uC+Df[%6F^]<$EbT0"FDu/>OtVtS05#E9Eb'3)B4uC4E,Te?B6@X'A
+9)BsBQSN=Df_'pOu"b(F^]<$GA1T0BHUr1@<,n&Bk2=!OtVtS05#E9Eb&ipBkM+$+D5h*Eb&ip
+BkM+$OtVtS04J@1F!,O5F-:!g!KmJ>!g6HE$'I(tG_uJ$!!&0<05Y-BBSZYO1Pc$e!HV^kP%'4
+JOo^@?P#@);P&,pUP,Wd]Bp(ZC1MMXHP%odQP!+.FA0>r&F!,1[94D=MEaa'(Dj"pG@<-BsFD5
+ZVWJCS<!Ko6[@WNZ+P"UT2P&5P!BHUbtF!,1Q!g6HE98H-%Cm$S-@j#<<!g5HdOo^_%06n[L@W
+NZ+L]W`;P"UU%P&-:;06\OL+DG_/F)Z/2@:YP#Ou$QUEcW@;L]W`;>9IT%@j$%>G9C1SG\A4FO
+o]E.G\E7:HS95EG\A45+F0+NOu%NL<.0+&@<-E3BnuhR;Mb@9G^Y`TI=!VX+EM"5+DI!3F)YPt
+ATD4$BlB/NF)YPtATD4$BlB06L]NY>Ou%NL<A/S>GT^O[!Ko6eP":a2OslKqGA1T0BSZYOD0pJ
+@A9;L@8<Re6OuA*sP)FaO<%i<(FCB'4@rH1%EdKHJDL#`1Ci=?W5*@^1DL#`1Ci=?W@Yb5O4aW
+1p4<Pah+<VdjL^90?Or9EBL]Lq%H"1c/DfV"dOtr1bH\MP#Ou@`O8WoWmP#Pk-H"1c/DfV"ML^
+9/,H]AFq+<VdL+<VdL5)9Q/V32^Z3/@TDDL#`1Ci=?WH'0qG5C8+bs,o9gP"Ch#I?IQXOq*X2P
+&FfJEb&a%Ch74#P&=`IEb&a%@W-@1Df(YTP&#:b@W-9tATDTuAos1:@W-9tATDg*B4uCM!Jg`=
+Kno_G@<cH.@W-9tATD6uFEDG<Oo]$1Eb&a%FDl,]!Kr.]+C]80A7]dtAS-%I!FftfA7]e%BkM+
+$Oo^_`L]ETlL]D:#G\A4/DfTB"Eais/FDl#Z!FftfA7]e'DfCj?P&?G:OqqM8@r#^tDfor.@rH
+1%EfL<GDKBB2P&5Q/:1@XACM.[+F`(`"Des?4+EM+9@;^@#Des?4P!Y=+I?IQNBQ&*(DfTB"Ed
+NsE@W-9tATD:!Ci=?S"a+^(ATX)PHX^o6A7]dkDes?4+EM+9@;^@#Des?4I?IQ=DfTB"Ed)5.F
+D-i,P,FI;I?IQm:5An5R:9TF@rH1%EfL<GDKBB2P&5PT@<,jrCi=>:F(KH%DL#`1Ci=?BP#Pn!
+EcZSj3/ITtD0qEIP')q+P+.VML]ET%P(f'sI=%-"I?ITYP"Cg2FCf]=@rH1%EfL<GDKBB2P&5P
+fAU&<,Des?4+EM+9@;^@#Des?4I?IQDDI[L*A7]joG]\9TFCf]=G[YE&B5W_5F`)83FHSe/AU&
+<B@;KXjDN4mCDKBB2P!+s2@;L%-AU&<W!0TL."FDeCL]ESo04o*^!0T-[G]\:ZI?I0X!g4FBP&
+6@GAo<cKP&bo*!g4ESF-8_M1G<?XP!5$bP)as;P')q1I?ITnCQb?=P"C(KFCf]=AoDR/+EV1>F
+E;/BAWi'^Cijc1G]\rGP!+.FFEhmM>9J$4FF/fDP"U.MP"C(b8R7K806D8WEZfIKFHU*rV33Wj
+!/LYtG]]*XL]N[<H]g@1G]]*4P"Tn<FE30>L]NZoP'DD<8:>h<FE;PE+CT).FCf]=Ou%NL<HN;
+(Efsmf!0TKlL]DjMP"q0YL]E52P&$'Y0P4a0F(LLHP&lE^L]NZoP')q1P')p^OruDS@;0V$<-`
+FoP$iX"+>6Q"Bl8#lH#R>X98EY44ahZh@;L!rI?ITn+>6Z8Ec5`)=(u2eBTcbd"FH:S02lt5De
+iocBk2=!P"UT4OuA*rP!5$O01KktFA61cEbTc]99M5s30J*@5*@mgCm"g?EH6/a!I^,1I?IS`F
+Cf]=@<5piDKM%*Ou"b5AU&<@Bk2=!+EV[HEg!;_F`_\HEfsmf!KsF(AU&<0@;p:NCm"g^1G<i]
+G]\1LDf[%CAU&<ADe<U&ATT&>+EV1>FE_G0FD-i:L]W_tOo^_%FCf]=G[YE&B5W_4Ch74#P!+.
+FFCf]=G]7SB+EV1>FEh_9AohO*Ou%NL<-2\rFEh51BkM=D"`e<iBQTD#HS9JPG]\1LDf[%G+EV
+1>FEh_9AohO*P,WP7G]\.DA9;LJWKK&cP#QO7G]\1=Ch[O"NX'K7Ao)$jFHSe606CcMFEhbCF!
+,R9G]\.DA9;K-FCf]=G].2+F(KHV!Kq>`1OYEcFCf]=G[YE&B5W_8De<U%BkM+$P!+.FFCf]=G
+]7SB+F##NAU&<ADe<U&ATX(9Ou%NL<-2\rFEh51BkM=D#ASC&FD5?4P!*nuG]\.DA9;K-G`l[%
+"FDeDAU&<AE,TfR!0T,kFCf]=B45b#+F##NAU&<@Bk2=!P,WPEFE3ORL]N[<OuAIZI?IP_FCf]
+=H#R\C+EV1>FEqe:AohO*+EV1>FCB6#ASuUQ!Jgc>!Kq>`1N[2QFEq;2BkM=D"^tkYG%Hh"HS9
+JPG]\4MDf[%CAU&<BDe<U&ATT&3@<cIK!Jgc>!Ko6eP#QO7G]\4>Ch[O"NWs!)DKKH1P!+.FFC
+f]=H#R\C+EV1>FEqe:AohO*+DkP3BHVD.G][A8@qBP"P,X6=OuAI(Ou%NL<-2\rFEhbCF!,R9G
+]\4MDf_(WFCf]=B45b#L]DO<FE3NOI?ITYP#Q(:@<,n&BPDR"F)YPtAUB;!5QCeIRqHkPEb&ut
+Aor!1F,0gZD0qFaB6@X'A8GghFDu/>P&=oT@<,n&Bk2=!Oo]3<@<,mpAS-%0E,Te?B6@X'A9V`
+uFD-I3OuAI(P&"]Q@<,n&Bk2=!P&=oT@<,mlASGdjFGTpZ2Nic,F^]<$GA1T0BHUr1@<,mlASG
+djFGTpZ2NicWVgX_-B6@X'A9)BsBQS33F,0gZD0qFaB6@X'A9)BsBQS33F!,^j!G?O`Eb'B.A9
+;LJWFp?^Eb'3)B4uC4E,Te?B6@X'A8#OgB4uCC!g5I)!Kq52F^]<$GA1T0BHUr1@<,mlASGdjF
+GTpZ2Nic,F^]<$GA1T0BTd7GF^]<$BOtmjBQT(0OuAJWP,E_k<.0p/P"h*"I?G)'1G<c[DJX$)
+ARTVB30If*F_`U>D_?-CEcQG7F`MSBDD#CBBlJ#6A7]@eDImj"F)Q2A@qCgGOuY1:ATVm"@r#d
+rB9KiQP'(hWFDtYuCM@[!I?IP~>
+% uk.co.terryburton.bwipp/renlinear 0.0 2018020400
+%%EndData
+%%EndResource
+%%BeginResource: uk.co.terryburton.bwipp renmatrix 0.0 2018020400 108721 104094
+%%BeginData: 87 ASCII Lines
+currentfile /ASCII85Decode filter cvx exec
+06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6 Eckq9F
+(KH4@:O(eDJ+B\< /:R <23Kp PEa`[ 'A S#n &Df V"#0
+6M%_@rEuAATDg:@ Wc^5D f. 1:GA2 #8P1 l( DOp s'bAS u?n FE2)? H\`B
+!23JD%@<-"%P!5$ b06_, @FD -I2 Ou"b )A SGd jFGKs\ 1G <3GEas $(D
+fUjAF`)83FHSF5@ UWb^B 6%p 5DI d 6qC i=? S"a +^(ATX (k 04Sp:D fT]
+'E/k*EDKBB2Ou"b *DJO< 4Eb /Zi L] ES o05 5<> F)Z/2@ :X &-!0T, kBl
+7^-E,oMuA9Nb/Ou "b*D I[L *A 7] joG ]Y' ?@; L!rO
+u"b5G]Y'4+C1-d0 6CcM F CT 6* DfU jAF `)83 FHSF5
+FCf]=G[YE&B5W_5 F`)83F HSF 5 FCf ]= H!tN 'B5 W_5F`)83FH SF5FCf]=AoD
+R/NX%piF`M2-Efr 43FCf] =F( o r3L^ K;$0 6Cc MFEh_9AohO *L]ESo06CcM
+FEqe:AohO*L]ESo 06CcMF D#$ $F,0 gZ1G <0Q FED)=FH-?a 1LY<:F*j'+I
+?I0?E--Gi1OYEX0 6_,@F D)e@ Bk2=! OtVt S05 +p2B4uB0BO tmjBQTCjOu"
+b#@<,jrCi=>:@UX :eDes ?4OtD hQ04J @"C M.[+F`(`"D es?4+C\bhCM
+.[+F`(`"Des?4Ot DhQ055< >F)Z/2 @:UKp DJO <4Eb/ZiOtV tS055<>F)Z/
+2@:X$oBl7^-E,oMuA8%,ZOu"b*DJO<4Eb/ZiFs(L:CNFH8ART+mOtVtS06CcMFCT6*DfQtBAU&
+<,Des?4OtDhQ06CcMFEh51BkM<+FCf]=G[YE&B5WkaOu"b5AU&<B@;KXjDBO%4G]\4>Ch[O"Ot
+DhQ06CcMFCoH/F<G[:G][P9DKM$nOu"b5AU&<<BmO>5FCf]=F(or3OtVtS06CcMFEh_9AohO*+
+EV1>FEh_9AohO*OtVtS06CcMFEqe:AohO*+EV1>FEqe:AohO*OtVtS06CcMFD#$$F!,R9G][S,
+E-%0qOu"b"Cijc1G]Y':Cijc1G]]*#Ou$fiCNFH8ART,*!0V2G055<>F)Z/2@:X$oBl7^-E,oM
+uA<J`sP#Q.5CNFH8ART,*!0V2G055<>F)Z/2@:XO(Bl7^-E,oMuA<J`sP#O)ZH"U]1HQ[9AG^,
+BfOo]N9G]T$3P"U4d%[&V$G^4"@G%G]9HQ[9AG^,BfOo]N9G]T$3L]W_WP"UT3P/3<+I?G)'1G
+<TiH"U]1HQ[9AG^,BfOo]E_5*AQp!KmS6Oq*X205YrZF(KH?+E2%>G`lm+!H!u`L]`J5P)#3FI
+?G)'1G<TdATVC"Eb&a%HQ[9AG^,BfOo]E_5)99')3RXK!g7SeG^Y_bOu"b.@W-9tATD^$ApYY>
+Bm=lcCm"g9P!4['Or9EUL]il]P'DD<%[&V$D/"'#DfTB"EdJpJBm=lcCm"g9P!5%%L^'"FL]W`
+&I?G)'1G<TTCh7$qHQ[9AG^,BfOo]E_5)99')3RXK!KmSKG^Y_bOu"b.@r,^bE\r-!!g4F<@r,
+^bEejd[)2J<V!Gu=_ARTV8!g4Fa5)96&!KoW`@r,^bEejd[)3R1>!KmJH5&FeGARTV8!KmJH5)
+96&!KoW`@r,^bEda)\Ou"b5Ea`HhHS9Z-5*@]TG`k7R1G<9QEZfU_!KmJ/L]NY>D0U>=ATX(k0
+5,K@+Co2,Ou"b4GT_6o1G<fp+F0,+06:Z<EZen,Efr4q@<--+>9J/5Gp$C>+F&\COo]hNG_cB`
+!I9J%Oo]eMH&)Ka!I,`4L^7O*Eejd[Cm&\!LG)&@P!5$b01:&J5*@]T6m+mB+@LJtG^3q5FHSF
+56[=hYOu"aYG`k7R1G;*<6[0_@Gp%?WB4Z1J1G;(?P!5$b01'oH5*@]T66JU>+@:>rG^3q5FHS
+F56$\VWOu"aWG`k7R1G;$:6$OM<Gp%?WB4Z1J1I3-MP!+.X+@D;THS8'@HS89FP#ZpW5p/OX4[
+L8ZP!+s2HU3GfP!*K$B8?PN4d*X.02d4F01LAQ<IK3I7X^G"I?ITn3%maa4aW?7A8-(?!0TKl0
+6eUaL]NY>Ou%NL<+K]`L]NZ%HS9XeH&)Ka!Ko6eP#Pt+Eejd[4aSi,+F&\CP,XU#I?IQ?Bl]"3
+P!+.FGp%Bg!KsFF1OYEcBQ[sD!0TKl6$OM<Gp$sFATVC"Eb&a%I=!)'GT]=u+Dl12FCK0/A7]e
+0P#ZpW02.NlHS8oDEZen,Eejg\!JglAC6CAdF_?L2P!+.YGT]=u+Dl12FCK0/A7]d(7!KhBGp$
+s5DfTB"Ec5Q%I?IQXHS8oDEZen,EejaZ!JglAC6CAdF_?L1P!+.XGT]:t+Dl12FCK0/A7]d(6[
+0_@Gp$s5DfTB"Ec5Q%I?IQXP#Y^/GT_8S?%%l9GT_'PP!+(5F*Wp3Op#<0EZfF6Bl]A"Op$,p5
+^eepI?J0))j1Mj$^*]:FY@t^G_cB`!Ko5lGp%Bg!KmJH1G<hmGT_8SD0U>=ATW_/P/3;;D..I#
++F##SH]f>(!0TKlP!FGY<%iN[5*@]TG`k7R1O($f+Dl@KB4Z0-FHUKfL]D[U!KsF<s+gZ%OuR_
+0D/"'#DfTB"EdNs5P')pQI?IQmFa]EDE+sQAL]N[<G_cB`!JgbqBm=lY!KsF/OuR_0D/"'#DfT
+B"EdNs5P')pQI?IQmFa]EDL]NZ&HS9)r5*@^9+F,)HBlda%Eb&a%P&Pbi+DDsD+Dl@KF(KG9Bc
+q[DG^4"@G%G]9I?IQD+F/bDP,W;CH"U]1+EWc`Bcq\W!KsF!Blda%Eb&a%P&QQeHYFUJL]N[<I
+?IQD+F/bDOo]EEH"U]1+EWc`Bcq\W!KmJ#Blda%Eb&a%P&QQeHYFUJL]NY>I?IQXP":"a<.0p@
+P')pIL]ET2Oogeh06o:85*@]TGVP@FOu&7\OuSV6L]N[<L]NZ&P"^4c!g7[ZGqtOHOu"b916Oh
+a1O(YtGVP@XH[%9$!dHJV!KsF/GqgFY@r,^bE\r3-8:?Y#GqpLf0p5@[Gqk*VGqt0VP,WeQ0p4
+_;@r,^bE\r3-8:?Y#GVUCd0p6-qGVP$RGVY'UOo]oT0d(=CCh7$q1jtNXI?IQT1*CisP%K&d0o
+5gS15Gso!IK&GP!3_mCh7$q1jtNXI?IP_GVL=c16OFHGqgFe16OGAP"CfrP%'4JP,X6;P!5%&I
+?G)'1G<f\FCB'4@rH1%EdKHJDL#`1Ci=?W5*@^1DL#`1Ci=?W@Yb5O4aW1p4<Pah+<VdjL^90?
+Or9EBL]Lq%H"1c/DfV"dOtr1bH\MP#Ou@`O8WoWmP#Pk-H"1c/DfV"ML^9/,H]AFq+<VdL+<Vd
+L5)9Q/V32^Z3/@TDDL#`1Ci=?WH'0qG5C8+bs,o9gP"Ch#I?IQXOq*X204]*3GAL]5ATE,NE+s
+Q<DfTQ)+E2%>F-8=4E+sQ<P!5$b05tWMF!+[0E+sQAL]W_?H\_ZMP(SPjE+sQA+E2%>F-:!g!K
+sF/L]ET%E+sQ<P!3i!G^,BFOogehL]Djd88r9fG_cEa!IKV&I?K4gOu"b1Bm=kFE+sQAL]W_?O
+u"b1Bm=nGE+sQBL]W_?Ou"b.+Bot-Bm=]^@XEn2I?K4gOu"b1@<?1(+BsX%L]MI/G^5)GP,Wd]
+C6CcD1Pc$e!H;atG_cB`WI$:4P!5$bBcq.5G^3q5FGKs\4aUn!!KsEsL]N[<FE1f"AUT_@I?I-
+LP"8lA1G<]]G^(?MBm=lY!g9OG1G<]]G^1ENBm=oZ!g9OG1QlZq@<?1(HS9?$5*@]TCh7K,E0=
+[n1N4IQAT!;)P,XU;OogehE/4LW99K@>Fbg$R!Gl=bL]N[<HS9)r5*@^@+DHW4Oo]B1DN\at99
+K@>Fbg6XrfW%m"d2u%DJO<4Eb/ZiBSZeS=GR*9s,r/#Ap][AI=%-VI?ITd"Gd)ALPQ(r=D;YgF
+)Z/2@:XP;"HllC"Gm)@LQYJ\Oo]uXP,Wkm<JUd6s,r/#5&b4\H'1@SWG..gP!+/TCOLPm@ssM?
+I?I-a(6Wg'Fcpm1Fa]EEP!Ug@Bm=\AE+sQ<DfTQ)Ou%NL%[&W2:+p=!CNFH8ART+_+DG_/F)Z/
+2@:X&-!g5I)1G<H[CNFH8ART+m+DG_/F)Z/2@:XP;!g5I)1Qj/LX`nJiFD)e9Bm=lc2ManeChR
+BoB4uB0E+sQBOuA+eP&-;>L]E52P&##NG^,#EP%/HFG^(?MBm=od@u(,(Bm=odA!.U:@:O(cEc
+6)<A7KOoDfUjAF`)83FHUKfP"oIp@r#^tDfor.@rH1%EZfF7FCB'4@rH1%EfrbP9mr1(@rH1%E
+c#6(NWjQCF(KHV4aShlDes?4D..B+4?SE#@UX:eDes?4+?huP1OYEc@rH1%Ec#6(HQ[B@FCB'4
+@rH1%E\D3>H'1@S1Ktu@Bm=]G+DYP6P!+/J!I]<N!.C#1I?I0-+CoM$GAL]5ATE3^8T\NgFCT6
+*DfUjAF`)83FHUKfFCf]=@rH1%EZfF7FCB'4@rH1%Eda*MBl7EsF_#'*AU&<D+EV1>FEh51BkM
+=D"a+^(ATX(uFCf]=H!tN'B5W_5F`)83FHSeM"CZ+gFCf]=NW>5*Op$+bF,0gZ1G<?XNW>4uFE
+hnSH[V&KL]W_WF-:C'5%\\qD3ApdL]W_W06<:?Ou"b'DN[2H1QmcHH]iN7Fa]EQP&$5RI?I0MH
+ZWhDFCoH/F<G[:G]\"@H=`8"@;L%-AU&<W!0TKl06DG\+Bot1G]\:g!0U!%I?I0MP"ArB1G<ik
+FE/LGG]]*XP,4<tL]E53FEhnj@Yb&JWI'dfFEhnj5*AQ\F*)GY",Hu@LQZn1P":"J06D8WEZee
+,FED)=FHSG.P#ZUFFE3ORL]ET$H\_ZMH]h-eDhnCL!0V,X!AJ+oCia0N&X%3k"Gd)ALQZeCFcp
+m19p-VP:gn'UFB!O)AWgGJOruDS@;0V$<-`FoP"UT4P!+5?AmoLsAUT_AOruDVFE2;8AQNSVFD
+-hFOp$,p+>6Z8Ec5`)=(u2eBTc#E!g5Ht!0TO/+>63&DKJT]FE2)?P"UrsOuSV@P!5$gP&-9^F
+)c5BOo]uo<.0p006CcMFCB6#ASuUQ5*@]TFCf]=GA1T0BHVD<FE3PAP'(kfFE3ORL]N[<FCf]=
+B45b#P&-9^Ou"b5AU&<AE,Te?FCf]=G].2+F(KG9GT_*>G]\.DA9;LJWJCV=2Ne*(1N[2QFEh5
+1BkM=D"DhX]FHSe606CcMFEhbCF!,R9G]\1KAnH*qFHSG.P#QO7G]\1=Ch[O"NWjH;B4uCM4aS
+i(AU&<AE,Te?GT_*>G]\1KAnH*qFHWVFAU&<@Bk2=!P,XU#I?IQOAU&<A@;KXjDN4s?AnGjjAo
+s2!HS9JPG]\1LDf[%CAU&<@Bk2=!+EV1>FEh_9AohO*Oo^_`Ou%NL<-2\rFEh51BkM=D#]F<eE
+bT0"FHSe606CcMFEhbCF!,]MFCf]=G].2+F(KHV!Ko6eP#QO7G]\1=Ch[O"NX'<AF*),.H'1=4
+AU&<@Bk2=!+F'&]Op$+bFCf]=G]7SBL]ESo06CcMFD#$$F!,]MFCf]=GA1T0BTf?:F*)Gc@Yb&
+JWKK0&1OYEc06CcMFEqhDF!,R9G]\4LAnH*qF<G[:G][A8@qBP"Oo^@>Oo^_`Ou%2kG]\4>Ch[
+O"NWij#Dg#]T4aSi(AU&<BE,Te?FCf]=H#I;,F(KG9E+sQBOo^@>Oo^_%I?IQOAU&<B@;KXjDN
+4p2ASuU$EfrS406CcMFEqhDF!,R9G]\4LAnH*qF<GO:G^1ERAU&<*F(8d!FHWVZ!g5I)!Ko6eP
+#QO7G]\1LDf[%CAU&<BE,Tf\CNO-4FD#$$F,0g<F*)Gc$@S(;I?IQm9p.MbOq*X2061WAD..O,
+Bm>e#P%64gCG'+8/p(ZFEd;,:Ecc5;/n0$=E,Zq1AS,XoATD@'Dfp)1AWh2!3A5GbFDtYuCM@[
+!P.H"'F`V,9E+*6lBl7R3P#M~>
+% uk.co.terryburton.bwipp/renmatrix 0.0 2018020400
+%%EndData
+%%EndResource
+%%BeginResource: uk.co.terryburton.bwipp databarexpanded 0.0 2018020400 239004 247709
+%%BeginData: 205 ASCII Lines
+currentfile /ASCII85Decode filter cvx exec
+06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6 Eckq9F
+(KH4@:O(eDJ+B\< /:R <23Kp PEa`[ 'A S#n &Df V"#0
+6M%_@rEuAATDg:@ Wc^5D f. 1:GA2 #8P1 l( DOu P+8AS u<u DIm6s OuP+
+;CG'+8/p(ZFEd;, :Ecc5 ;/n 0$= E,^u oP 'E- L061WA D. .O,Bm> e#0
+6M%_@rEuAATDg:@ Wc^5D f.1 :GA 2 #8P 1l( DOp s'T@<> pe @<,q(E +*W
+pARp.D'Tt>:%52X =FD5Z 2F- 8_M 1G <3 GEa s#u AWf6?1 G< 9WDKKE 0@<
+Wi+@;L!rOu"b)AS GdjF GM, s8 <P lo1 G<? YEc #6,N
+X03@E+*WpARpr[0 6:]; D .R U, F,9 jZ1 G<QY DJNZn
+AKYSnCia0N1G<3G Ed2GDC ikI W Ou% #q FD5Z 2F- <^[F*)G:DJ +':E+P1qH\_
+]c23JDeE-,f4DKC /fX(Gd VF( L LtH] gXBP #RT (P%'TNOths t4d(eHEckrV
+4aW>DP!5%OP!5$b I=%,/F E2M 8Ou% NL<I L$A OrfcH05kfO Bl@m1P!5$bI
+?IQJE-,f4DKC/f1 OYEX0 5+p2 B4uB0 BOtm jBQ TCjOu"b4AS 5jkDKKqBF(K
+!$ASuU2Ot;bP04J @1G\q S>F<G %$Ed2 GDC ikgkOu%/jB 5M3tFE<9<P!
++.FF(K!$ASuU2+D ,P4D..O H%qU!) @;]Ue A92 j$@r#XdP!+ /J"FYWQ(4D?
+GOu%NL<%hg-E+*WpHS9)NP!5$b05kuT+DG_V@ZmRN1G<L!!0T-PDL7BE?BU:pOuRB&FHSh&P!5
+ %SP%&0h!Jgc>!AA2N5*@^bFcn_?!/L`?9TgrFF``d1C5;nRWKKH.G`k%L@Yb,LWJCY>5*ATfH
+]g@,F``d1C6CcDH'2WOOo[4NP!5$bDfp/X!,@ZjP!FGY<IL$AI?G)'1G<0NF!+[0?'6usG%#3.
++BosoOu$QUEas#uAWf$9@Yb&JWJCS<5*ATdOuSI%P!+/T5^eepNWCSlNKSFI5*C&O5)oXlP)Xg
+O5*C&O5)9;s!Kr4dH]A)^",Hu@LOG=c>9I?gF-6TfFcm]"!g3SI=C!RgBlfG$Ou$;bG%#3.Oog
+ehOrK2XOo^_JAU&0&DIakq06Uc?F-8_M1QlmDFa]EaP')+[BlfGHL]W`&HXUW0L]ET2NWLmhP!
+*5fF,0j[99'-20ebDH4d#qpG%#3.L]ET2L]E53P"^l:3KcOK@;L"@!Kp*=/;AZSP$sLVH]A4_0
+eb:n@;L!rP!FGY<.0p/I?IQ<BlfGHL]W`&HXUW0L]ET2NWLmhP!*5fF,0j[99'-21,(JH4d#qp
+G%#3.L]ET2L]E53P"^l:3KcOK@;L"@!Kp*=/;>M_P$sLVH]A4_0eb=o@;L!rP!FGY<.0p/I?IQ
+<BlfGHL]W`&HXUW0L]ET2NWLmhP!*5fF,0j[99'-21,(MI4d#qpG%#3.L]ET2L]E53P"^l:3Kc
+OK@;L"@!Kp*=/;@9qP$sLVH]A4_0eb=o@;L!rP!FGY<.0p/I?IQ<BlfGHOuS7!P!+slL]`f'P&
+bn&@;.MP0R+^P@;L!rL(#&X!JV"/H\`#b"HoUE0O\[:L]NZ3P!+tKI?I-a1G<0N1GUY/+D,%uF
+(L(7J;=5\%#K=e$A\hJV33N@Blf(2P"Us$P&bu68<Pc;BlfGHL]`f'HS8fA@UWdiFE2M8+Bsj-
+0en[i0f+gk0f=sm0fNBb+CSu*L]W`4P&6?bI?I0b1OXU'@;01ZA0>JmCia0N1OYEd@;0e=!0U!
+8!\c?l4^i%\0edhp@;.MQ0R/b$Op#3-@UWf1E0:?N@;0eG@Yb,L4aV?\CibC4P"UT2L]NZ4NWD
+/'4a(7MF,0j[99LiZ!!.hHP$sLVG%#3.L]W_jKE)NL5E]H<"FFQk1GLS.+CSu*L]W`4NWLpiP!
++s2H]A=b0ekC:0JI*ICia0N5^eep@;.MQ0R+^KBlf(3P"Uf:0enhSOp$,l#;@ke0eb:9AmoLsA
+Wf<,P#Pk(1GLS.+CSu*L]W`4NWLpkP!+s2H]A=b0ekC:0ed3JCia0N5^eep@;.MQ0R+^KBlf(3
+P"Uf:0f+tUOp$,l#;@ke0eb=:AmoLsAWf<,P#Pk(1GLS.+CSu*L]W`4NWLpmP!+s2H]A=b0ekC
+;0JI*ICia0N5^eep@;.MQ0R+^KBlf(3P"Uf:0f>+WOp$,l#;@ke0ek@:AmoLsAWf<,P#Pk(1GL
+S.+CSu*L]W`4NWLpoP!+s2H]A=b0ekC;0ed3JCia0N5^eep@;.MQ0R+^KBlf(3P"Uf:0fP7YOp
+$,l#;@ke0ekC;AmoLsAWf<,P#Qjm<.0+:@;L"@!0U!2!/LZ=9TB-6P!*tsCibC5P"UrhKE)%-T
+9<WG"FFQk1GLS.H]A=b0ekC:0JI*ICia0N5^eep@;.MQ0R.r)#;@ke0eb:9AmoLsAWf<,P#Qjm
+<.0p0I?IQXP#Pk(F-:!g!g60&04AQN3APh%AmoLsAVL^lL]N5@;gX<-L]im;Ot^<YF,0j[99MH
+$Eda*AOu$N\F,0gZ99''-0p4\.Beqb)G`i2VG%#3.L]ET2L]E53P"^l:3KcOPNWh*k0eb;'Eck
+rV5^eepI?IQXP#Pk(F-:!g!g60&04AQN3AYn&AmoLsAVL_!L]N5@?$hA7L]im;Ot^<YF,0j[99
+MH$Eda*AOu$N\F,0gZ99''-0p4\.Beqb*G`i2VG%#3.L]ET2L]E53P"^l:3KcOPNWh*k0eb>(E
+ckrV5^eepI?IQXP#Pk(F,0gZ99''-0p4\HNWCkVEckrV5^eepNWLmgFE2M8P!FGYAM7\8AmoLl
+Dg.@.Ou"b.ATVU(A<K->1G<6VDK[`iFDiuiH]BL.0JG170JG170JG170JG170JG170JG170JG1
+70JG170JG170JG2:.$CEi)2J?W)2J9K$Be)G5)92p"-Q?@/;O@`$Bh6K0TnDY@YbAS5*Dn.5*C
+2I!g4FW$A]%P9ThSq",I&B9Tgr_!f.2HV33Nq30Ia,$BdT9WKKH.H&)Nb)2Ju_$Be)G5)9E!"-
+Q?@/;O@`$Bh6K0TnDY@YbAS5*Dn.5*C2I!g4FW*f(/d9ThSq$&A\H9Tgr_!f.2HV33Nq30Ia,$
+BdT9WKKH.H'1@SFa]D_Ou"b$Df0_Q1N[Ol1jb660JG170JG170JG170JG170JG170JG170JG17
+0JG170JG170JG170JG17Lb+^cOr9&WOr9&UL]il7P!4[%L]NZ4Ot;CjL]im;Ot`%YP%'4MP!5&
+.P!5%SOuS7"M#WWnL]N;?P"]A(DK[`iFDiuiL]il)P'MJ=%[&V$FDkW&DL7PCOuSV6L]N[<L]E
+T%L]NZ&H\_]c=HYk(0Tp[/P":`qL]`J5P)"hpL]W`AP%'TNOt`%YP%'4KP$!lVP!5&.P!5%SI?
+G)'1Mp]FBQ%FA!\c<k4aShlA7crg+C1-d05#69+BosoOu%NL<,H2gBQ%FA!ATa#HS8l>Afu8*C
+ibC4P"UT2L^fM@@rH7.0f*oi1c1@O04SO)+BosuA7g1E0TrD`P"ArB1G<B[Aft;#?'6us@;0d*
+@;0e=!F]\`P%'4JP,XU<Ou"b7@;L!-G%#3.L]M[-CibbKL]N[<P"_#pI?IQHATVU(A<$dH0eb;
+E4aShlA7gWVP,4<t@q92-!-VdeF,0gZ98EV)%$F:oDf0_Q13@Fk0Tp]kA7gWGG%#3.L]NZ3Ot;
+D"FDkW&DN]8u@q90o>9IEdAp]=fP,Wkm8R7K805#69+BosoOu"b"BlbD$+C1-d06Uc?F!+[0?'
+7!lP#Q:0FD,T'NW_$j0JS_RHS8l>Ar&C/V33WEA7gVtG%#3.L]ET2L]N;?P"]A(DK[`iFDiuiP
+'LJMF,0j[99'-21,(JH4aV?\CibC5P"UrhL_"TG@VK_.HQ[K?CibC5P"UrhL*mOq!Jh8.DdmEu
+I?IT?A7gugLa\EMP'J]jA7crg+CeqoH\aA=WI9q$?'6usB5hH*>9I471G<0NF!+[0?'6usG%#3
+.+BosoOu%NL<,H2gBQ%FE@Yb8P4aShlA7gWkP,4<t@q92-!-VdeF,0gZ98EV)%$F:oDf0_Q13@
+Fk0Tp^;#*PgG3/@QCBlf(2P"UT5L]NZ4P'N3MG%#3.L]NZ3L]N;8P"^Z4P!5%SOt;D'FDkW&DB
+NG"As,?6.$?cWH!tE.P%'4LP!+/8@;L"@!g63>3/@Qj!g66?/;=1UP&-:FOuS7!L]W`5Ot;CiP
+,X6[P&-:FL]iM8P"_#iOo^^HI=$VI!1!V5P#[;LFDkW&DBNG"As,?64H_mkGqWZ<Aft;#@q91u
+LbP!kI?I0-Ou"b(E+U4s+C1-d04AR9+BosoOu"b7@;L!->9I471OYEcD.Rg&De+k30JP:90TnS
+G04SO)LanRaOu$TYAr$G1@;L"@!0U!2!Jh/I9Oi!YFtkaoD_s/2H"1AsLaZ\GF,0j[98E\+!Kp
+->/;O@LDdmEuP'J]jA7crg+CeqoH\aA=WI9q$?'6usB5hH*>9J)tCibC5P"U.MP"ArB1G<0NF!
++n*F,0m+BlfGHL]Wa=P"_#p06Uc?F!,X7CibC6G%#3.P%'4KP,XU<Ou%NL<,H2gBQ%FA"Y_Yc0
+JS_RHS8l>Ar&:,V33WEA7gVtG%#3.L]ET2L]N;?P"]A(DK[`iFDiuiP'LPJAr%jDBlf(2P"UT5
+L]NZ4Ot;CjFDkW&DN]9TA7gWIG%#3.L]NZ3L]E55P"_#iL^J6B@VK_CGqWZ<Aft;#@q91uLbP!
+kI?I0-Ou"b(E+U4s+Eh10F,0j[99M8t@Yb,LWJCY>5*ATdI?I0-Ou"b"BlbD*Blf(3@;0eG@Yb
+)KWKKr<1G<o[Ci^_B@;L"@!d8!gF-:!g!g9OG9Th2[P#Q(5AmoLlDg-O]G&1cH!g3kQ1OXU'G&
+1b5>9I471OYEd04AR,Bm=3"L_l43Ou$<u!/LZ3"FGQ[86pS&!\c<a!g9CC)3QtB3/@Tk"c32AL
+PRXI!Kq\9BkD((ARpT!L]NZoP'DD<8R$uYL]N;GH[V&JL_kjhL]N;WH[V&JLacVVL^Jq>P,4<q
+OuQlaAncL$A;C>D!Kr5$G^Y`H04o*30o5jm1G<Q^F_t]1Bk)tuOu"b-@;Kmr@;^4)ATDKpM#EJ
+m05P?DD`0F1M#<Dl05boLATDKp+?VcB!/LZ3GC,K4NWLmgL]Wa9Or9EBL]`J5P)"i$L]Wa9Ot`
+ %YP%'4KP!5&.P!5%SOuS6tP"UTsP!+/T3/@Qj?BTP]P#RT(L]NZ3Ld@1eH]g@E!Jk'FG^Y`SP
+!4[-Oo^RJ0JG170JG2:#EkpH)3Qt8",Qu?LPQ"f#EkpH0TnDY@Yb8P5*Dn.5*C2>P"9CtCiF&r
+DKTf-EbT$D">DM`0Kq[`1G<0QE+iZtF_t]1Bk&8J4GY\I!Jia_OuS7JP,X6@FDkW&DLI[=Ao;*
+5NWh*k0ekD=6&5Pt>'lDlL`qq\L^%s>@VK_.P":BYNWq3m0eb=9Lb+>_LbF+<3/A*.!Jgr%Ddm
+EuI?I-;DKTf-EbT$D"#)D_Ch[s/2Dd=P"Y_Vb0JG[SOu"b*F)Nrn2BY+ELbOVcLcKgF3/B)JWJ
+C_"DdmEuI?I-5DIYD]"Y_Yc0enJML]N<8H]g@E!KsF<#BXlnBl8?^8;L]1!Jl&KOuS7&P,X6BF
+DkW&DLI[=L`qca0ekC:0eb:8La%ib0ekC:0eb:9La@iXLbF+<3/.FPOo^@EFDkW&DLI[=LcU=m
+Ld-6L3/.FFOo^@EFDkW&DLI[=LgQ/J0ekC;0eb=:L`h]`0ekC;0ek@9Ci4B4ATDKpNWUsh0Pk0
+6E+iZtF_t]1Bk*/,0JG480Kq[`1Pc$e!F]\`P%'4JP,Wd]Bp(ZC1G<0N+CSu*+DI!3Ou"b7@;I
+'0@;L!-Bp),P1M:Z=P%%j6P%'RTG%#3M@ZgbT$'I9(!,$7_P'N3MB5hIG@UWsn>EV0sI?I0-P'
+N3MB5hIG@UWu6@Zgb8@;I&jP!45@P"ArBGqWfLAs,?@1MIt?BlfGHL]N[<P&4WAAncL$A0>;pL
+]E54P"_$HP&QQeHY7;0P%'4JOo^^POuS6tB5hIGH'1."E+Y8BAo;*5P'AWmE+Y7sOu%NL<.0p#
+061W@@VKq*H]g@E%$EN3&<\T#%$GF_0Sfdn)3STYP!4;W<0DBe3/A!+;Na"\AS5jkDKKr_C5;n
+R4aVtcOo^@IP&-:FP')2"P')29<K]P/WI9p>Ou"b&DI[TqAUBS"061KFP&5Q/5*AQeH]iN"P#Y
+_L5'r)>P,Wkm8R7K=P%'S<B5hHoDI\hnC6CcDGqWoq5&-5]Ou%NL%[&V$DKTf-EbT$(F`)7C>9
+IQtAs-VML]DjdK89M`s':dD04A[9BOPe$D.Ra%@rc^0F!+[0B5hIG@XEn2I?K5=!*taD05b?GF
+D5f72Dd=1DJXS@>9IQtAs-VML]DjdK8(`a?'7!VE+Y8BL]N[<M#W82HS9)r5*@^7E+U5,P"Uf:
+0JJ:aP,4<ZOuS6tB5hH*Bp),P3+d&<0p4\HP')ReI?IQmG\J:5E+Y8BL]N[<P%K'(3/@TJE+U5
+,L]NY>P"UrtAo;*5P!+/TFbj@PP#RThI?IQIF_t]1Bk*;iP$iWSF_t]1Bk)1+DK?q7+Du==ATD
+KpEcl8@+DHW5Oo^_=L]W_?P'DD%DKTf-EbT$(F`)7CBnubPG^Y`TOuQldE+iZtF_t]1Bk*;iP$
+iWFCiF&rDKTf-EbT$(F`)7CBcpi#E+iZtF_t]1Bk)1+DK?q7L]NY>P"UT3Oo^_jI=#C=E+iZtF
+_t]1Bk)1+DK?q7L]ET_I?ITn3,*GP2Dd=T5*B<:5%/8HBOPe$D.Ra%A!0$=@$5Jl"FG#tG][Y@
+D`0F1Df0B:+DHW3P'DD%DIn'7Ble2N1cB8iCj@.;+Dtb8FD5f72Dd=1DJXS@BnueQ!Kp*3!KmJ
+HG^Y`TI?I,SB5hHoDI\D$r/qAL1G<Hu!0T,kC5;kQ1G<T`A7^c+DKTf-EbT$H1OEgYB5hIG@Zi
+m$P!FGY<-rJ#A7^c+DKTf-EbT$H4aUlcB5hIG@Yb)KWKL\:L]Wa9OuS6tB5hH*Bp),P3+d&<0p
+4\HP')ReI?IQmG`k%B!G?@`+DHW4Oo^_=OuR&k@kj-0H]iN-?@@u9P'E-LDKTf-EbT$H5*B<#D
+KTf-EbT#+ASu!rA7[E.+DHW5Oo^_%P!FGY<0DB?@;Kmr@;^4)ATDKp+Du==ATDKp+D#G#De*E4
+D/WrrNXT?4E+iZtF_t]1Bk*;^P!FGBB5hH*Bp),P3/B8OAs,?63Kd4%EdMV2CiF&rDKTf-EbT#
++DKTf-EbT#+ASu!rA7[E2De*F>$t3skBOPe$D.Ra%A!/X25^eep061W@L^](?Oo]E2FD,T'P%'
+RTG&1cR@Zgb%A7h!6Oo]<\!HMag@VKq*Ou%,iD28=X8oeK[L^'#NOp$,l"u%_b0JG2:#*PgG)2
+J95ASmT(OuR)nAftfN98G6aWJCV3"HoUE0TnDY@Yb/M5*Dn.5*C1EEaa/7ASu!rA7[E.+DHW4O
+o^_%P!FGBL]Wa9OuS6tB5hH*Bp),PG`k%B!Jk'FG]%Y@ATDKp+D#G#De*E4Bcq,G!KmJH1Qk"O
+P#Zpn<IL$0D/WrrNXT?4E+iZtF_t]1Bk*;hHY7;0+DI!3Ao;*5P!+/(DIYCD@;Kmr@;^4)ATDK
+p+D#G#De*E4D/WrrNX'HED.Ra%A!/W$Bcq,G!KmJH1Qk"OP#Q(5AftfN99M8KF)Nrn2Ng7e@$3
+]^CiF&rDKTf-EbT$H5*B<:E0:?NCh[s/2Dd<7@;Kmr@;^4)ATDKp+D#G#De*E4D/WrrNWs3=D`
+0F1Ou&7dI?IQIF_t]1Bk)1+DK?q7P"UT8P"L(;DKTf-EbT#+@;Kmr@;^4)ATDKp+D#G#De*E4D
+/WrrNX'HED.Ra%A!/X25^eepDKTf-EbT$(F`)7CBp),P3/@^#8s2APOo]37As-Vd4d#qpCi4B4
+ATDKp+CT)*BOPe$D.Ra%@j#?#@rGmh05YW<AW@"5F_t]1Bk*;^P!FGY<+g/^+DI!3@;Kmr@;^4
+)ATDKp+D#G#De*E4Bcq,G!KmJH1Qk"OP#Q::A7^c*Ble2N1cCL[HY7;0+DI!3Ao;*5P!+/(DIY
+CDBle2N1c?IfDI[TqAM7n=A7^c+DKTf-EbT$H1G<GbBnueQ!Ko7%5^eepDKTf-EbT$(F`)7CBp
+),F"HlApAU&<2F)Nrn2K*JLGp$ga98Eq<8s0=(Ci4B4ATDKp+DGn82Dd<7ASu!rA7[E2De*F>#
+B"[$ATDKpOu&7dI?IQ<CiF&rDKTf-EbT$(F`)7CBp),F"d2JqAU&<2F)Nrn2K*JLGp$ga98Eq<
+8s0=(Cgh.!BOPe$D.Ra%@j#K,D`0F1+D#G#De*E4D/WrrNXT?4E+iZtF_t]1Bk*;^P!FGY<+g/
+^+DI!3Ble2N1c?IfDI[TqAM7a?BnueQ!Ko7%5^eepI?J/iP%?:ZE+U5*E+W[!@u(,"P"_#pL]N
+;?Oo]E2FD,T'P%'RTG&1cR@Zgb%A7h!6Oo]37As-Vd!KoE_ASkmjFE<U)OpNd\@:YNbOu%8tAs
+-VZ!0V2GOo^@IP#@H&L]W`SG&1cR5)93%5*C/H%[(7IL]DjML]Mpe<H`1jP!4[&P!5%RI=%-"P
+')29<H)AWP%'4IP#-L]!/Let@:YO1L]N[<HS9)r5*@^@@:UKp+BsX%L]E53L]E52?&/K"@:YO1
+Bp,HO"c*5C)3RgCP!4;W<0DBe9Tj[LP"9G.A7^c+DKTf-EbT$H4aSi$@:UKbL]E52L]E52E+*:
+?!g7\3L]DC&A<LDb9Th2[P#Qjm<%h]pDK]H)+Bot)Bl7]pB4ZFG!I]<N!.C#1D.Rg&De+3N0Tr
+D`P"Bh5As*4YF^nroOogehB5hIG!g7\F@:YN&P'(&n1G<9IFCAusDBND&DK]H)P%'4UP#@H!05
+b9?H\_`d)3UtT!g4FaAp]\)I?IQc!Jgc4"c*8DLPPto!Jpc=5'rH/L]NZ@L]`fBP$r]n!KpQJ;
+Na5"!KmJH5(/SnI?I-JL]NZ@L]`fBP#-Lg5^eepL]NZ@P#@H,L]NY>P!4;WAWf6?FcnqOFa]D_
+Ou"b(ATUgK;g2qdFD,`B05kEb5*@]TASdMnOu"b.GEP.Q1G<W_P!5$b06Uc?P!5$b05kuT+D#A
+P$'I(tD..L$L]ESoL]E53ASd/(P,Wd]@UX;?5*@]TATrq2Ou"b.@<63,D..L$L]LsnEfprrEfr
+5*06;;FC`mV4+D#b[WJCS<WF]lg@UX;?WJCV=WGZ3dOu%#f+DkP.CPVtR4d#qcD'3D6P,W#/L]
+W`UP,Vo!Eejd[Cm"gTrfTm:"FDeCG%#20F*:u.+Du$=ATs<:ASdO/@UX;?!G-'i@UX;?WJCV=W
+GZ3dP,XU#I?IQ@C`m1qEg!DX!g6B,05Pf?Ckr(S1N%%PATs<:ASdO/@UX;?!Jgf?!JpbmGDH9_
+!IJ^$P!5&.ATs<:L]N[<AS`Ju@<.O1L]`g>DI[]?Cj'6'P!3]*@;M)-Ou%NL82#%-@;I'-G%#2
+0Cj'6'+D#@3@UX;?WJCS<WKM(\WKK&cHZ![CATs<:D0M.>HS9G`@;I'-G%#3C!KsFF1OYEcI?I
+S`G%#20G%#20F*:u.P,XU#G%#3C!0Ur@P!FGY<%hg,+D#bQ!KmJH1G<TRF))n8@<64?!FfJXOq
+3^pOp$q(I?J.pG%#20G%#20F*:u.Oo^_%05bVLDJ^M-GESqg1N.DX+C\c"+D#b[G^Y`GDfp.EA
+Sd/'P,W>9P'CnfFFB;^Ou"b5@:CrM1a$"W!F(?[L^](CL^/_;Lf]B8L';@I!F1EfL^/_>L]iMj
+L_PROK8'PGL^8eCL]iM;L`V@/L(BK&$\X<?L^T"@L^&YBLhMMS?\T)UL]iMCL]N;;L]N51b[$A
+f04]<O+Cno&@;KLmOpR:-L]E53A79RgCh7L?!KsF/06iXDOu"b%+C]&&G%#20G_cckCkrL_9Th
+1bA;C5A!/LZ3$[XOAP!5$bL]WA?C6GQ-G]8fsA0>WM99O+S!I^,%Ou"b+L]ESoHXn7@@:CrM1a
+$Or99N_1FCAW52`)XlL]NY>L^0):H[V&K04]09P!5$b04]0CP!5$b04\pDAWf6?1G<9UGAiX.O
+u"b%ASbq@5*@]TA7]RqP!5$b04\^:P!5$bP!FGY<%hu/C5<.Y!Ko6eP%?:WGAeU7+Co,+P,Vu6
+AWfr%ASc9-A8QO/L]hg?F_)\.ATUgK;g2qdFD,`Y1G<9_AKYM+A7otHWFU*^P%nN=Ch4`"D0KQ
+I"D2(YF(HJ,ATUgK;g2qdFD,`Y1G<9_L^9.MOu%?=!g7;S!0TKlL]E53L]_uWC6CcD1Lt]c#AT
+ %rP&-;\A9Vr7C6D5QG[u#S#&8qqP&-;\A9VT-C6D5QG^Y`GI=$bML]N;6HS9,s5*@^4G9CXV!
+g7A1GAeU=P"Us_A9T/2L]W`UL]NY>A9VT-C6D5QG^Y`GI?IT@G]t9T+Co\ZG^Y`G04np9A7]e*
+Bk2=!F!+\C!Jh#;"Gd)7!Jgc4!Jgl7#`&M;",I/;"Gd)7!Jgc4!Jgl7#)EA;",I)9#)E;9!Jgc
+4!Jgr9"Gd/9",I#7#`&M;!Jgc4!Jh#;!f-r7!f.&:"c*28!Jgc4!Jgo8#)E>:!f-o6$&AV<!Jg
+c4!Jh&<!f-n`Ou"b'Bl7HmEcYf3+BosmL]E53>p*@-!/L`5!aQpQL]E57L]WA;>p*@-!/Lr;!f
+.);"C3-SL]E5;L]WA;L^&YC>p*@-!/Lr;!f.);#`&kE$=+cYL]E53L]WA7L]iM;L^&Y?>p*@-!
+/LZ3!f-r7"Gd5;#)ESA#[JQWL]E53L]WA7L]iM;L^&YAL^JqG>p*@-!/LZ3!f-r7"Gd;=#)ESA
+#`&kE$=+c[Ou"b4 AT8i) Bl7Hm EcYf3 +C no& @;KLm L]Wa=L
+]W`;P"Uro04oHQ+ EM+ 6P%'R \Ou%m oL ]MR .EK Xde!
+KsF/06iXDOu$]pG 9D,QA nc -nATE !/A9 ;L ++E M+6+F '&B L]rrX L]rr
+8P'DD<82"IdARfM "ASGd jFE 8R/ M#W; 2M #W; 2M#W;2 M# W;2LeW \5L
+`hLNL`;-VL]`G6L _PY-L &eT :G( p !XL ^/_ NLd -Uoc%Z 5G L&d0gF bhE
+$%>FkFL&eoA!5XB iSVT" T!0 `3P Lc L1 iX, 'u7 !/-.ZL fK 00WJ1D lL&
+d$a!4mtML&ec=!/ 6.-] S6E HL ]i MBL a7d mLb acfL
+`M:JLgc#<XbHh+L iJ.L Q A? N: </; uZH \MNl Lbshd
+S;%$@L&f/H!7$<! MhV5DL &fD O !/c Rb LeNU :Lb jbcR></FDh r^o!1S]CP)+
+=<DMW(aC5)_mL&c d\.u4a m0S T RhL^ JqZL g#T rL&eK5!2PF !LiA(KZA&A#
+L&d'dFGOdi7YUok L&fST! 6U# r\:t !8L& eQ9 F+s\/L&fGR 7#5-)+,0c^L
+&euC!/?4.P_^*26 A>K[L &e<2 ?AM+- !f/7 Z!1 JWB^kb71!2 >9-L_>LJLj4
+XSQ&$<698F(6.Yr P.!2k POYD* %tL&f PU7 >Mb9:5BgE: P`Y>@Yds=-A
+Z\s!/$"+[YT<c!2 #')LffB 3Wec.Z !4RbI L&d p'2hh=/Le3 C.L_tq=L]rS
+FLfoOEL&eB43edX-L&f)F!/H@^?'6us@q]F`CNj?(B4uC.AT8hs+EM+6H\`5rCh%-i@r$:"BkM
++$F-8_C&<]_M!g7\SP"ArB30Ia,#a20C#a.B79Th1bGA1T0BQG;#+Co_@H[C1(8UZan?'6us@q
+]F`CNFW8L]ESoL]E53GA1T0BQK>GL]N[<HS9)r5*@]T@q]F`CNFW8+Cf(r@r$..D'4%:A9;L++
+DI!3@q]F`CNj?(B4uC.AT8i,P"UsSOo^_%I?I,S@q]F`CNFW8+Cf(r@r$..D2&&>P%nN9FCAus
+DMSCXWJ1E%P&-9^Ou"b*L]ESoHXg`#@r$..D'3q/@PKeu+DI!3P$r]Z@:CrM1a$Lg!KmJ>#Ehc
+-I?I/T@ru:F5*@]T@ruXP5*@]T@r6F$P!5$b04SjCDj!;I1G<6LCh8bnOu"b$ASc:J5*@]T@qT
+kG5*@^b5^eep052PCL^9.EOu%NLAM7P;D]iP'ARfLsF_r72B6068@ru:F;Ia9SD]iP,GAi9?FE
+2M8+D58-;H$M<Bk2=!F-8=4@s;K,@q]F`CNFW8+Cf&*P,Vr5AWge<ASbp#@r6F$L]h<uCia/1B
+4Z0_;c@mSA9;L+Ou"b$GDHNf$'I*#!/LZ3"+)\8P!5$b@s9&0L]W`U@s;i6Bp),PG[kq?BnuhR
+Ckr+T!Fp=b+DI!3P'DD<8;J%E$'I923/@QEGER3,!G$G!P'Mi`A79RgCh7L?!KmJH9J9q$GEP.
+Q1G<9IFCAusDBNJ7GEQEu1G<ceGB4m;@<>poASrW3AS5jkDKKr_2NeW7/<U=&1G<WgD/sQ=F!,
+LAGB8pVOu%moL]MC9D/sQ=F,0j[WI$:=P!5$bD..I#+EM+,D.RU,F,0s^C5;kQD/tF6P%odRP!
++s2H\_ZMP#R5<L]N;3L]MR.B5M3tFE<6=P,Wd]E,Tf\5&qceAS5jkDKKr_Cm"g^1N78R+Cno&@
+;KLmP%K&OG]t9LDf_(7H[V&KE,TfR!g7;S!0TKlApAMBE,TfR!g6HE97))M8UZb$I?IQXP":B0
+L]NYXOpR9ZEc6/CP!3oL5*C/RFa]EDAoD^,@<@M?AU&0&DId<hF*(i#CLq%>D0mpW@WNZ4Dg-8
+Y!0U!<30Ia,!KsF<!KoX09Th1bF(025>DN<9!/LYd@<>poAT!;)P,Wd]Bp(ZC1Lt`S+DI!3H[V
+&KBnuhRC5;kQ4aUdcG9CUU!g6HE97))M8UZb$I?I-W!Jgb^Ou#3_061WA0/%?WDJX$)ARTU4F(
+025F(02D@VBg*>9IurF-:!g!KmJ>!g6H.BOtmjBQSZcK3^->@WNYr+EM"5P%'4JOo^@?P#?X_!
+.C#_>q^,8F<GL@FD5Z2F!*Y1+CoD.FC]E#GEQnu061WACh[cu@<.N1I=!VgAT2]5DKTf:Dg-8c
+$'I*#!/LYnF_u/;GB8Q@P,Wd]EfrVL1G<ceG9CpEGB4mIP"UroD..I#L]E54Ec6/b@Yb&JWI$:
+4P!5$bEc6.EBp),9L]DjdK4uHKDg.@RL]N[<P%K&]Dg*=<L]NY>P"U.X!I^,`I?IQXP":`TOpR
+9Z061uTP!5$bP'&F!AT/br+EDCEH\_]c5*DmnP"ArB1NR,HL]CY8!/LW2!/LV\P'M+[E$01>GE
+QEk"Ho`gL]E52L]E52?'9IdAnc-nATDa.F!+\C'8U+<Dg.@RL^fNHH[V&JLd[&.Ec6/b@YbJVW
+I'&V86qB7Anc-nATDa.F*j'0L^oRKL]NZ&HS9)r5*@^BDg*=<P"UT2P!+/4Dg*=<L]N[<P"UT3
+P!+/J!I]<9AT/c+L]N[<P"UT2P!+/J!I]<N!.C#1I?ITYH\_ZMP#ZR7E0<D!P!5%RI?I-LP"B_
++B5M3tFE<6@P%odQP!*iA!g7;S!KoU/"FG0-GB4mIP"UsIEc6/CL]ET2P%'SkAnc-nATDa.F-:
+!g!g7;S!KoU/"FDeBDg*=.L]DI6GEN#jF^:.d06:]D+BsX%F(K<R!g7\3Ou%N5Ec6/b@Yb&JWJ
+LS1!./a)GEP.Q97;soEc6/b$^,XRAT3fAL]N[<M#W82HZNb;P!5%%I?I-BAT3e?P')29<IL$0E
+c6/C+EATFDg.@hF(K<3+EATGAT3fWI?I,SE+sQA+EDCEF,0gZ99NbI1Ktu@Bm=lLL]DjdK3aX"
+L]DI6GB4mEF_u/;GB8Q@P,XU;P'M(dGB8p2DKTf:Dg-8Y!KsFF5*C.p+E2%>G^G5HI?K4gOuS6
+tF(K<3+Du==Ec6/CL]N[<P"Us`F(K<3P!3c+D/sQ=F,0j[WKKH.GV=,LE$/@-E+sQAL]W`;L]N
+Y>H\_ZX!I^,`?&/K"Bm=lc9Th2QAT3G*>DN98!/LW2!*tb5F(K;5E+sQAL]im?>DN98!/LW2!*
+tb505tWMF!+\C!/LYnF_u/;GB8Q@P,Wd]EfrVL1NJ9OP&5PeAT2]5Efs(Y!g7\SP#Pn!Ed2GDC
+ik"HEc6/C+EEW<OogehI?K5'+Du==Ec6/CL]N[<P&5PeAT2]5Efs(Y!g7\IAT3e6P')29<.0p#
+?'7!+4>1_dDD*Y`ASu?nFE2)?05tWMF!,F9G]PNWBm=kFE+sQA05tWMGp%'?G]T$WE+sQAP#<r
+HASGdjF<GO:G]T$WE+sQAP#@*,Ou=t;Bk2=!+E2%>G_enR2D8ufF<GL@FD5Z2F!*Y1+CoD.FC]
+E#GEQnu061WAD..O,Bm>e?I?ITn3IR&#Ou"b%@<>pe@<,q(E+*WpARpr`P%64gCG'+8/p(ZFEd
+;,:Ecc5;/n0$=E,Zq1AS,XoATD@'Dfp)1AWh2!3A5GbFDtYuCM@[!P.H"'F`V,9E+*6lBl7R3P
+#M~>
+% uk.co.terryburton.bwipp/databarexpanded 0.0 2018020400
+%%EndData
+%%EndResource
+%%BeginResource: uk.co.terryburton.bwipp databarexpandedstacked 0.0 2018020400 62622 66024
+%%BeginData: 18 ASCII Lines
+currentfile /ASCII85Decode filter cvx exec
+06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6 Eckq9F
+(KH4@:O(eDJ+B\< /:R <23Kp PEa`[ 'A S#n &Df V"#0
+6M%_@rEuAATDg:@ Wc^5D f. 1:GA2 #8P1 l( DOu P+8AS u?n FE2)? OuP+
+;CG'+8/p(ZFEd;, :Ecc5 ;/n 0$= E,^u oP 'E- L04\L5 @: EYcAU& 0&D
+Id<hOuP+;CG'+8/ p(ZFE d;, :Ec c 5;/ n0$ =E, ^uoP'E -! 04\L5@ :EY
+cAU&0&DId<hF*(i #CLq% 'L_ Q"0 Op s' _E- ,f4 DKCt)O u" b#@<,j rA7
+^ofOu"b%Df0Z-Ea a/7A moL sA We ifE -,f 4DK CuE0
+6;5UBl7R*H#R>X4 aVtc O u8 C3 DfB f4D f0WC P,i2'
+Cia0N4aW>WI?IQm 30Ia6V 33Q n !Bl U* FE2M 8P! +/T/Wr;\Fc nqO1OXV5/Tc
+#UAWeitP#ZpnAWe *t3A5; iFD 5 Z2F- 8_M1 OYE cDfBf4Df0W COu%NL8T/Qi
+Bl@m1NX006DKKE0 @<Zg6F _-_ \DfB f4Df 0WV #%hdoD..OH %qU!)@;]UeA
+92j$@r#XdP'AWgE bBG9@ UX:e De*E% DfBf 4Df 0VL04\L5@: EYcAU&0&DId
+<hP!>*c@<-"%NWX 3=FDl ,?Bl@ m1P'C DUB 6,2+Df0Z-E aa0TE%`kbAS
+u?nFE2)?P#RT)I? G)'1G<9 IFCAWe Eb0K7 @;] UeA92j$@r# XdOuSV806M%
+_@rEuAATDg:@Wc^5Df.1:GA2#8+Co%qBl7L&ATMd4Ear[DFcna<F(KH4@:O(eDJ,-DH]iMmATV
+m"@r#drB75qB~>
+% uk.co.terryburton.bwipp/databarexpandedstacked 0.0 2018020400
+%%EndData
+%%EndResource
+%%BeginResource: uk.co.terryburton.bwipp gs1northamericancoupon 0.0 2018020400 88443 84730
+%%BeginData: 46 ASCII Lines
+currentfile /ASCII85Decode filter cvx exec
+06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6 Eckq9F
+(KH4@:O(eDJ+B\< /:R <23Kp PEa`[ 'A S#n &Df V"#0
+6M%_@rEuAATDg:@ Wc^5D f. 1:GA2 #8P1 l( DOu P+8AS u?n FE2)? OuP+
+;CG'+8/p(ZFEd;, :Ecc5 ;/n 0$= E,^u oP 'E- L04\L5 @: EYcAU& 0&D
+Id<hF*(i#CLq%>3 %oDi/ n8f PFC f K5H "(o :FD l%L@Wu O* E0Aq<G `iL
+hB6,eFDfTr5@;TR rBk(R h@r HL/ Df 0o X'T t>: %52X=F D5 Z2F-8_ M1G
+<3GEas#uAWf6?1G <9WD KKE 0@ <W i+@ ;L! rOu "b*D
+I[L*A7]joG]Y'?@ ;L!r O u" b$ Dfp #;D KKH7 FCoH/
+FHOb01G<6VF`;8: FCf]=F (or 3 L^B 5# 04Sp CE, TW9AU&<ADe <U&ATWq9F`)
+83FHSF5@rHL/Df0 Z.G]\4 LAn H *qFH -NID KBB 2Ou%#qFD5Z 2F-<^[F*)G:
+DJ+':E+P1qH\_]c 23JDeE -,f 4DKC /fX( GdV F(LLtH]gXB P#RT(P%'TNO
+thst4d(eHEckrV4 aW>DP !5%O P!5$b I=%, /FE 2M8Ou%NL<I L$AOrfcH05k
+fOBl@m1P!5$bI?I QJE-, f4DKC /f1OY EX0 4SpCE,TW9A U&</Df0Y>@r
+HL/Df0Z.G][P9DK M$nOu"b $Dfp#; DKKH7 FE; /BAKYK$F`; 8:FCf]=F(or
+3OtVtS@rHL/Df0Z.G]\1KAnH*qFH-NIDKBB2P&5P!@rHL/Df0Z.G]\1KAnH*qF<G(3F`;8:FCf
+]=G].2+F(KHV09S,>P#Pq0F`;8:FCf]=H#I;,F(KHR"a+^(ATX)PHS8lIF`;8:FCf]=H#I;,F(
+KG9@rHL/Df0Z.G]\4LAnH*qFHS;?1OYEc04fBI@;]V&055<e5*@]TDfp.EBl9)CP,4<t05?:CO
+u$fiH]A,5P)XgO3,`q]P!3WD5*C2S@VV&,L]NY>05?Y6Ou&8DOuS6tL]`f6Ot:NoFHSh&L]N[<
+P!5%ROuSV6L]`g>L]`f(P"^:NOuRB&FHSh&P!5%SP%&0h!AA2N5*@^?F``E>C6D8R5^eeqI?J/
+iOq*X204AR9+BosoOu"b7@;L!->9I471Lad5@rGmhOuSV6L]N[<L]NZ&P"^4c30"!%4aW>WI?I
+Qi!@a1kP')pOP')pONWCPkNI-gPP')pOL]`G6P)"I4NW=k;L]NZoI?IT7+CSu*OogehOrK2YOo
+^_J>q]W#F-8_M1KtuF@;L"J!g7\h)i+NX!KpPrG]7)/A0>/2G%#3.P!5$bP')q1I?J0)F^]!*P
+ %'4JP&5P!@WuO*E%YdE0lCoMFD,*"ATDKp@;]RnF`;8:6=FCj8Q0_OF^oN9Eb17r5p/Zr0d'5
+0Ecbt;6#C1RBk(Rh+@C'iE,TV:F(fK7Ch+YuDf0W1F*&OCAftM)F(oN)Ch4_T8K]E@0ek@20/%
+?SBldisEcQ)=P!=AX<+0K^L]ET2NW_<r0eec-HS8iPBlJ#DB6,eFDfTr5@;TRrBk(Rh@rHL/Df
+.mMA3idcFE2M6FEMV8N^,lQ7oM,b:2b/pBHTTXATDKp@;[2TDfp#;DBO"6Dfol,+Cf>-F(o];+
+E(j7@3BW*DJ*cs+@/RA-o`q90I\Y.Ea`['AS#n&DfV"*I?IP_G%#20G%#3.L]ET2Ou"b7ChY#8
+@;L`"P"UTbP,XU#G&1lK!0Ur;Ch\\0P#.<^HS8iPBlJ#DB6,eFDfTr5@;TRrBk(Rh@rHL/Df.m
+MA6)AqN`oCqAKX91+=K3(0eb%!A79Rg+EM47F_kS2F*(i2F<GdAFD)e*+@C'aE+*X0+Ad)iAnc
+K4Ch7KsFD)e2DIdHk@<?F.+DG^9FD,5.Ea`iuAKWZLFDi9[0/%?SBldisEcQ)=P!=AX<%hloE$
+0=4Ckr+8Ch\\0Oo^_>Ou"b$De'u6@;I'0Ch\\1Oo^@CP"_#p04SpCE,TW9AU&;>B4GnD@Yb8P!
+Ks:B1Lk?GE,TW9AU&<Q!,#e\P'LPUF`;8:FCf]=+D52'P%'FP/WtBhDfp#;DKKH7F<G4+E0=[d
+!KmInDe,#VDfBf4Df0WV#\7jkFC]E#GB@kJAWh9k@<-"%+C\c"@rGmh+E)4@Bl@m10/$jEFCAW
+eEb0K7@;]UeA92j$@r#XdP!>*cBl7EsF_#'*AU&<D+Cf>4E,TW9AU&<ADe<U&ATWq9F`)83FHS
+e604SpCE,TW9AU&<ADe<U&ATW_.Ou%NL<+BihE,TW9AU&<BDe<U&ATWq9F`)83FHSe604SpCE,
+TW9AU&<BDe<U&ATT&'EbBHR#&%R^B4uCM98H-%Ckr1V!Ko6eP#Pk1B60(8FEhnj@!aPKG]Y':E
+bBHR"*Ad0P"Uro05b?FFEhmMFEhnj@Yb&J!KmbP1N$cJFEhn`!-EI-P'LqVGBA(O+Dtb7FEhnj
+@Yb&JWEUKTDfp#;DKKH7F<G(3F`;8:FCf]=G].2+F(KG9@rHL/Df0Z.G]\4LAnH*qF<G(3F`;8
+:FCf]=AoDR/+Cf>4E,TW9AU&<<BmO>5?'9G@EbBHR"*Ad0DIn$6G]]*nI=#CCB60(8FEhn3+Bo
+suDfp#;DKKH7F<G(3F`;8:FCf]=G].2+F(KG9@rHL/Df0Z.G]\4LAnH*qF<G(3F`;8:FCf]=Ao
+DR/+Cf>4E,TW9AU&<<BmO>5>p*F9G^Y`TI?IQ<EbBHR")i.#DfBf4Df0WZG[YW*F!,"3DKKE0@
+<[lR0/%?WDJ`g(EbTc]<0B7iOq*X205#>\DJsQ;BOPahEbT#lDI[U-E,TWW30If*F_`U>D_?-C
+EcQG7F`MSBDD#CBBlJ#6A7]@eDImj"F)Q2A@qCgGOuY1:ATVm"@r#drB9KiQP'(hWFDtYuCM@[
+!I?IP~>
+% uk.co.terryburton.bwipp/gs1northamericancoupon 0.0 2018020400
+%%EndData
+%%EndResource
+%%EndProlog
+%%Page: 1 1
+gsave
+0 1 translate
+0 0 moveto
+<283831313029313036313431343136353433323133353030313230303030333130313233
+ 313936303030>
+<696e636c75646574657874207365676d656e74733d38206565>
+/gs1northamericancoupon /uk.co.terryburton.bwipp findresource exec
+grestore
+showpage
+%%Trailer
+%%EOF
diff --git a/graphics/pstricks/contrib/pst-barcode/doc/images/swissqrcode-1.eps b/graphics/pstricks/contrib/pst-barcode/doc/images/swissqrcode-1.eps
new file mode 100644
index 0000000000..c5055dac79
--- /dev/null
+++ b/graphics/pstricks/contrib/pst-barcode/doc/images/swissqrcode-1.eps
@@ -0,0 +1,1834 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%BoundingBox: 0 0 262 262
+%%Creator: https://www.terryburton.co.uk/barcodewriter/generator/
+%%Copyright: Barcode Writer in Pure PostScript
+%%Pages: 1
+%%LanguageLevel: 2
+%%DocumentData: Clean7Bit
+%%EndComments
+%%BeginProlog
+%%BeginResource: Category uk.co.terryburton.bwipp 0.0 2020040100 29629 32838
+%%BeginData: 6 ASCII Lines
+currentglobal
+true setglobal
+/Generic /Category findresource dup length 1 add dict copy dup
+/InstanceType /setpacking where {pop /packedarraytype} {/arraytype} ifelse put
+/uk.co.terryburton.bwipp exch /Category defineresource pop
+setglobal
+%%EndData
+%%EndResource
+
+%%BeginResource: uk.co.terryburton.bwipp raiseerror 0.0 2020040100 39041 38872
+%%BeginData: 15 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+begin
+/raiseerror {
+ $error exch /errorinfo exch put
+ $error exch /errorname exch put
+ $error /command null put
+ $error /newerror true put
+ stop
+}
+[/barcode] {null def} forall
+bind def
+/raiseerror dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
+%%EndData
+%%EndResource
+
+%%BeginResource: uk.co.terryburton.bwipp renmatrix 0.0 2020040100 90671 89701
+%%BeginData: 306 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+begin
+/renmatrix {
+
+ 20 dict begin
+
+ /args exch def
+
+ % Default options
+ /width 1 def
+ /height 1 def
+ /barcolor (unset) def
+ /backgroundcolor (unset) def
+ /colormap (unset) def
+ /dotty false def
+ /inkspread 0 def
+ /inkspreadh 0 def
+ /inkspreadv 0 def
+ /includetext false def
+ /txt [] def
+ /textcolor (unset) def
+ /textxalign (unset) def
+ /textyalign (unset) def
+ /textfont (Courier) def
+ /textsize 10 def
+ /textxoffset 0 def
+ /textyoffset 0 def
+ /textgaps 0 def
+ /alttext () def
+
+ % Apply the renderer options and the user options
+ args {def} forall
+ opt {def} forall
+
+ /width width cvr def
+ /height height cvr def
+ /barcolor barcolor cvlit def
+ /backgroundcolor backgroundcolor cvlit def
+ /inkspread inkspread cvr def
+ /inkspreadh inkspreadh cvr def
+ /inkspreadv inkspreadv cvr def
+ /textcolor textcolor cvlit def
+ /textxalign textxalign cvlit def
+ /textyalign textyalign cvlit def
+ /textfont textfont cvlit def
+ /textsize textsize cvr def
+ /textxoffset textxoffset cvr def
+ /textyoffset textyoffset cvr def
+ /textgaps textgaps cvr def
+ /alttext alttext cvlit def
+
+ inkspread 0 ne {/inkspreadh inkspread def} if
+ inkspread 0 ne {/inkspreadv inkspread def} if
+
+ /xyget { pixx mul add pixs exch get} bind def
+ /cget { pixx mul add cache exch get and} bind def
+ /cput { % Optimise by only storing "stem" corners
+ dup 4 mod 0 eq { % dir is up or left
+ 3 1 roll pixx mul add cache exch 2 copy get 4 -1 roll or put
+ } {
+ pop pop pop
+ } ifelse
+ } bind def
+
+ /abcd {
+ 4 string 0 [
+ 5 -2 roll
+ pixx mul add dup
+ pixs exch 2 getinterval aload pop 3 -1 roll % A B
+ pixs exch pixx add 2 getinterval aload pop % C D
+ ] {3 copy 48 add put pop 1 add} forall pop
+ } bind def
+
+ /right {dir 1 ne {x y dir cput [x y]} if /x x 1 add def /dir 1 def} bind def
+ /down {dir 2 ne {x y dir cput [x y]} if /y y 1 add def /dir 2 def} bind def
+ /left {dir 4 ne {x y dir cput [x y]} if /x x 1 sub def /dir 4 def} bind def
+ /up {dir 8 ne {x y dir cput [x y]} if /y y 1 sub def /dir 8 def} bind def
+
+ /trace {
+ % Walk the outline of a region emitting edge coordinates of the path
+ /y exch def /x exch def
+ % dir 1:right 2:down 4:left 8:up
+ /dir x 1 add y 1 add xyget 1 eq {8} {4} ifelse def
+ /sx x def /sy y def /sdir dir def
+
+ % A B
+ % C D
+ mark {
+ x y abcd
+ 1 { % Common exit
+ dup dup (0001) eq exch dup (0011) eq exch (1011) eq or or {pop right exit} if
+ dup dup (0010) eq exch dup (1010) eq exch (1110) eq or or {pop down exit} if
+ dup dup (1000) eq exch dup (1100) eq exch (1101) eq or or {pop left exit} if
+ dup dup (0100) eq exch dup (0101) eq exch (0111) eq or or {pop up exit} if
+ dup (1001) eq {
+ dir 2 eq {pop left exit} {pop right exit} ifelse
+ } { % 0110
+ dir 1 eq {pop down exit} {pop up exit} ifelse
+ } ifelse
+ } repeat
+ x sx eq y sy eq and dir sdir eq and {exit} if
+ } loop
+ counttomark array astore exch pop
+
+ } bind def
+
+ % Set RGB or CMYK color depending on length of given hex string
+ /setanycolor {
+ /anycolor exch def
+ anycolor length 6 eq {
+ (< >) 8 string copy dup 1 anycolor putinterval cvx exec {255 div} forall setrgbcolor
+ } if
+ anycolor length 8 eq {
+ (< >) 10 string copy dup 1 anycolor putinterval cvx exec {255 div} forall setcmykcolor
+ } if
+ } bind def
+
+ % Plot a layer of single colour
+ /drawlayer {
+
+ /pixsorig pixs def
+ /pixs exch def
+
+ % Pad the bitmap on all sides
+ /pixs [
+ pixx 2 add {0} repeat
+ 0 pixx pixs length 1 sub {
+ 0 exch
+ pixs exch pixx getinterval aload pop
+ 0
+ } for
+ pixx 2 add {0} repeat
+ ] def
+ /pixx pixx 2 add def
+ /pixy pixy 2 add def
+
+ % Cache of visited corners for each direction
+ /cache [ pixs length {0} repeat ] def
+
+ % Construct paths by tracing regions avoiding duplication by using the cache
+ /paths [
+ 0 1 pixy 2 sub {
+ /j exch def
+ 0 1 pixx 2 sub {
+ /i exch def
+ /k i j abcd def
+ k (0001) eq k (1001) eq or { % Black region stem corners
+ 8 i j cget 0 eq {
+ i j trace
+ } if
+ } if
+ k (1110) eq { % White region stem corner
+ 4 i j cget 0 eq {
+ i j trace
+ } if
+ } if
+ } for
+ } for
+ ] def
+
+ % Revert the bitmap size
+ /pixx pixx 2 sub def
+ /pixy pixy 2 sub def
+
+ % Draw the image
+ newpath
+ paths {
+ /p exch def
+ /len p length def
+ p len 1 sub get aload pop
+ p 0 get aload pop
+ 0 1 len 1 sub { % x1 y1 x2 y2
+ /i exch def
+ p i 1 add len mod get aload pop 6 -2 roll % x3 y3 x1 y1 x2 y2
+ 5 index inkspreadh
+ 4 index 4 -1 roll lt {add} {sub} ifelse % y3<y1 ? x2+i : x2-i
+ 4 1 roll
+ 4 index inkspreadv
+ 4 index 4 -1 roll gt {add} {sub} ifelse % x3>x1 ? y2+i : y2-i
+ 4 -1 roll exch pixy exch sub
+ i 0 eq {moveto} {lineto} ifelse
+ } for % x2 y2 x3 y3
+ closepath
+ pop pop pop pop
+ } forall
+ fill
+
+ /pixs pixsorig def
+
+ } bind def
+
+ /drawlayerdots {
+
+ /pixsorig pixs def
+ /pixs exch def
+
+ newpath
+ 0 1 pixs length 1 sub {
+ dup pixx mod /x exch def
+ pixx idiv /y exch def
+ x y xyget 1 eq {
+ x 0.5 add pixy y sub 0.5 sub moveto
+ x 0.5 add pixy y sub 0.5 sub 0.5 inkspread sub 0 360 arc
+ } if
+ } for
+ fill
+
+ /pixs pixsorig def
+
+ } bind def
+
+ gsave
+
+ % Draw the image
+ /inkspread inkspread 2 div def
+ /inkspreadh inkspreadh 2 div def
+ /inkspreadv inkspreadv 2 div def
+ currentpoint translate
+ width pixx div 72 mul height pixy div 72 mul scale
+ 0 0 moveto pixx 0 lineto pixx pixy lineto 0 pixy lineto closepath
+ backgroundcolor (unset) ne { gsave backgroundcolor setanycolor fill grestore } if
+
+ colormap (unset) eq {
+ /colormap << 1 barcolor >> def
+ } if
+
+ colormap {
+ setanycolor
+ /key exch def
+ [
+ pixs { key eq {1} {0} ifelse } forall
+ ] dotty {drawlayerdots} {drawlayer} ifelse
+ } forall
+
+ % Display the text for elements in the text array
+ textcolor (unset) ne { textcolor setanycolor } if
+ includetext {
+ textxalign (unset) eq textyalign (unset) eq and alttext () eq and {
+ /s 0 def /fn () def
+ txt {
+ {} forall
+ 2 copy s ne exch fn ne or {
+ 2 copy /s exch def /fn exch def
+ selectfont
+ } {
+ pop pop
+ } ifelse
+ moveto show
+ } forall
+ } {
+ textfont textsize selectfont
+ alttext () eq {
+ /txt [ txt { 0 get {} forall } forall ] def
+ /tstr txt length string def
+ 0 1 txt length 1 sub { dup txt exch get tstr 3 1 roll put } for
+ } {
+ /tstr alttext def
+ } ifelse
+
+ % Find true ascent of font
+ tstr length 0 eq {
+ 0
+ } {
+ gsave
+ newpath 0 0 moveto (0) false charpath pathbbox
+ 4 1 roll pop pop pop
+ grestore
+ currentfont /PaintType known {currentfont /PaintType get 2 eq} {false} ifelse
+ currentfont /StrokeWidth known and {
+ currentfont /StrokeWidth get 2 div 0 exch
+ currentfont /FontMatrix get dtransform
+ dup mul exch dup mul add sqrt
+ add
+ } if
+ } ifelse
+ /textascent exch def
+ /textwidth tstr stringwidth pop tstr length 1 sub textgaps mul add def
+
+ /textxpos textxoffset x textwidth sub 2 div add def
+ textxalign (left) eq { /textxpos textxoffset def } if
+ textxalign (right) eq { /textxpos x textxoffset sub textwidth sub def } if
+ textxalign (offleft) eq { /textxpos textwidth textxoffset add neg def } if
+ textxalign (offright) eq { /textxpos x textxoffset add def } if
+ textxalign (justify) eq textwidth x lt and {
+ /textxpos 0 def
+ /textgaps x textwidth sub tstr length 1 sub div def
+ } if
+ /textypos textyoffset textascent add 1 add neg def
+ textyalign (above) eq { /textypos textyoffset pixy add 1 add def } if
+ textyalign (center) eq { /textypos textyoffset pixy textascent sub 2 div add def } if
+ textxpos textypos moveto textgaps 0 tstr ashow
+ } ifelse
+ } if
+
+ grestore
+
+ end
+
+}
+[/barcode] {null def} forall
+bind def
+/renmatrix dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
+%%EndData
+%%EndResource
+
+%%BeginResource: uk.co.terryburton.bwipp qrcode 0.0 2020040100 303640 335045
+%%BeginData: 1292 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
+begin
+/qrcode {
+
+ 20 dict begin
+
+ /options exch def
+ /barcode exch def
+
+ /dontdraw false def
+ /format (unset) def % full or micro. rMQR symbols are specified using version
+ /version (unset) def % 1-40 or M1-M4 or R7x43, etc
+ /eclevel (unset) def % full: L, M, Q, H; micro: L, M, Q; rmqr: M, H
+ /parse false def
+ /parsefnc false def
+ /mask -1 def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ /mask mask cvi def
+
+ % If version is supplied and format is not given then set format to correspond
+ version (unset) ne {
+ format (unset) eq {
+ (full)
+ version 0 1 getinterval (M) eq { pop (micro) } if
+ version 0 1 getinterval (R) eq { pop (rmqr) } if
+ /format exch def
+ } if
+ } {
+ format (unset) eq { /format (full) def } if % Default to full
+ } ifelse
+
+ % Parse ordinals of the form ^NNN to ASCII
+ parse {
+ /msg barcode length string def
+ /j 0 def
+ barcode
+ { % loop
+ (^) search {
+ dup msg exch j exch putinterval
+ length j add 1 add /j exch def
+ pop
+ dup 0 3 getinterval cvi msg exch j 1 sub exch put
+ dup length 3 sub 3 exch getinterval
+ } {
+ dup msg exch j exch putinterval
+ length j add /j exch def
+ /barcode msg 0 j getinterval def
+ exit
+ } ifelse
+ } loop
+ } if
+
+ /barlen barcode length def
+
+ % Convert input into bytes accounting for FNC characters
+ /fn1 -1 def
+ /fncvals <<
+ (FNC1) fn1
+ >> def
+ /msg barlen array def
+ /i 0 def /j 0 def {
+ i barlen eq {exit} if
+ /char barcode i get def
+ parsefnc char 94 eq and i barlen 4 sub lt and {
+ barcode i 1 add get 94 ne {
+ /char fncvals barcode i 1 add 4 getinterval get def
+ /i i 4 add def
+ } {
+ /i i 1 add def
+ } ifelse
+ } if
+ msg j char put
+ /i i 1 add def
+ /j j 1 add def
+ } loop
+ /msg msg 0 j getinterval def
+ /msglen msg length def
+
+ % If FNC1 in first position then escape % as %%
+ /fnc1first false def
+ msglen 0 gt {
+ msg 0 get fn1 eq {
+ /fnc1first true def
+ /msg [ msg 1 msglen 1 sub getinterval { dup 37 eq {dup} if } forall ] def
+ /msglen msg length def
+ } if
+ } if
+
+ % Default error correction level
+ eclevel (unset) eq {/eclevel format (micro) ne {(M)} {(L)} ifelse def} if
+
+ % Enumerate vergrps
+ [
+ /v1to9 /v10to26 /v27to40
+ /vM1 /vM2 /vM3 /vM4
+ /vR7x43 /vR7x59 /vR7x77 /vR7x99 /vR7x139
+ /vR9x43 /vR9x59 /vR9x77 /vR9x99 /vR9x139
+ /vR11x27 /vR11x43 /vR11x59 /vR11x77 /vR11x99 /vR11x139
+ /vR13x27 /vR13x43 /vR13x59 /vR13x77 /vR13x99 /vR13x139
+ /vR15x43 /vR15x59 /vR15x77 /vR15x99 /vR15x139
+ /vR17x43 /vR17x59 /vR17x77 /vR17x99 /vR17x139
+ ] 0 exch {1 index def 1 add} forall pop
+
+ % Convert from input into message bitstream
+ /N 0 def /A 1 def /B 2 def /K 3 def
+
+ /Nexcl <<
+ [
+ 16#30 1 16#39 {} for
+ ] {-1} forall
+ >> def
+
+ /Aexcl <<
+ [
+ 16#20 16#24 16#25 16#2A 16#2B 16#2D 16#2E 16#2F 16#3A
+ 16#41 1 16#5A {} for
+ fn1
+ ] {-1} forall
+ >> def
+
+ /Bexcl <<
+ [
+ 16#00 1 16#1F {} for
+ 16#21 16#22 16#23 16#26 16#27 16#28 16#29 16#2C
+ 16#3B 1 16#40 {} for
+ 16#5B 1 16#7F {} for
+ 16#A0 1 16#DF {} for
+ ] {-1} forall
+ >> def
+
+ /Kexcl <<
+ [
+ 16#81 1 16#9F {} for
+ 16#E0 1 16#EB {} for
+ ] {-1} forall
+ >> def
+
+ /mids [ % N A B K
+ [ (0001) (0010) (0100) (1000) ] % v1to9
+ [ (0001) (0010) (0100) (1000) ] % v10to26
+ [ (0001) (0010) (0100) (1000) ] % v27to40
+ [ () -1 -1 -1 ] % vM1
+ [ (0) (1) -1 -1 ] % vM2
+ [ (00) (01) (10) (11) ] % vM3
+ [ (000) (001) (010) (011) ] % vM4
+ 32 {
+ [ (001) (010) (011) (100) ] % rMQR
+ } repeat
+ ] def
+
+ /cclens [ % N A B K
+ [ 10 9 8 8 ] % v1to9
+ [ 12 11 16 10 ] % v10to26
+ [ 14 13 16 12 ] % v27to40
+ [ 3 -1 -1 -1 ] % vM1
+ [ 4 3 -1 -1 ] % vM2
+ [ 5 4 4 3 ] % vM3
+ [ 6 5 5 4 ] % vM4
+ [ 4 3 3 2 ] % vR7x43
+ [ 5 5 4 3 ] % vR7x59
+ [ 6 5 5 4 ] % vR7x77
+ [ 7 6 5 5 ] % vR7x99
+ [ 7 6 6 5 ] % vR7x139
+ [ 5 5 4 3 ] % vR9x43
+ [ 6 5 5 4 ] % vR9x59
+ [ 7 6 5 5 ] % vR9x77
+ [ 7 6 6 5 ] % vR9x99
+ [ 8 7 6 6 ] % vR9x139
+ [ 4 4 3 2 ] % vR11x27
+ [ 6 5 5 4 ] % vR11x43
+ [ 7 6 5 5 ] % vR11x59
+ [ 7 6 6 5 ] % vR11x77
+ [ 8 7 6 6 ] % vR11x99
+ [ 8 7 7 6 ] % vR11x139
+ [ 5 5 4 3 ] % vR13x27
+ [ 6 6 5 5 ] % vR13x43
+ [ 7 6 6 5 ] % vR13x59
+ [ 8 7 6 6 ] % vR13x77
+ [ 8 7 7 6 ] % vR13x99
+ [ 8 8 7 7 ] % vR13x139
+ [ 7 6 6 5 ] % vR15x43
+ [ 7 7 6 5 ] % vR15x59
+ [ 8 7 7 6 ] % vR15x77
+ [ 8 7 7 6 ] % vR15x99
+ [ 9 8 7 7 ] % vR15x139
+ [ 7 6 6 5 ] % vR17x43
+ [ 8 7 6 6 ] % vR17x59
+ [ 8 7 7 6 ] % vR17x77
+ [ 8 8 7 6 ] % vR17x99
+ [ 9 8 8 7 ] % vR17x139
+ ] def
+
+ /termlens [
+ 3 {
+ 4 % Full
+ } repeat
+ 3 % vM1
+ 5 % vM2
+ 7 % vM3
+ 9 % vM4
+ 32 {
+ 3 % rMQR
+ } repeat
+ ] def
+
+ % Encoding functions
+ /tobin {
+ string dup length 1 sub 0 exch 1 exch {1 index exch 48 put} for
+ dup 3 -1 roll 2 2 index length string cvrs dup length 2 index length exch sub exch putinterval
+ } bind def
+
+ % Alphanumeric character to value map
+ /charmap (0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:) def
+ /charvals 44 dict def
+ 0 1 44 {dup charmap exch get exch charvals 3 1 roll put} for
+
+ /encA {
+ /in exch def
+ fnc1first { % FNC1 as %
+ /in [ in { dup -1 eq {pop 37} if } forall ] def
+ } if
+ /out in length 11 mul 2 idiv 1 add string def
+ /k 0 def /m 0 def {
+ k in length eq {exit} if
+ k in length 1 sub lt {
+ charvals in k get get 45 mul charvals in k 1 add get get add 11 tobin
+ /k k 2 add def
+ } { % Final character
+ charvals in k get get 6 tobin
+ /k k 1 add def
+ } ifelse
+ dup out exch m exch putinterval
+ length m add /m exch def
+ } loop
+ out 0 m getinterval
+ } bind def
+
+ /encN {
+ /in exch def
+ /out in length 10 mul 3 idiv 1 add string def
+ /k 0 def /m 0 def {
+ k in length eq {exit} if
+ k in length 2 sub lt {
+ in k 3 getinterval 0 exch {exch 10 mul 48 sub add} forall 10 tobin
+ /k k 3 add def
+ } {
+ k in length 2 sub eq { % Two final digits
+ in k 2 getinterval 0 exch {exch 10 mul 48 sub add} forall 7 tobin
+ /k k 2 add def
+ } { % One final digit
+ in k 1 getinterval 0 exch {exch 10 mul 48 sub add} forall 4 tobin
+ /k k 1 add def
+ } ifelse
+ } ifelse
+ dup out exch m exch putinterval
+ length m add /m exch def
+ } loop
+ out 0 m getinterval
+ } bind def
+
+ /encB {
+ /in exch def
+ fnc1first { % FNC1 as GS
+ /in [ in { dup -1 eq {pop 29} if } forall ] def
+ } if
+ /out in length 8 mul string def
+ 0 1 in length 1 sub {
+ /k exch def
+ in k get cvi 8 tobin
+ out k 8 mul 3 -1 roll putinterval
+ } for
+ out
+ } bind def
+
+ /encK {
+ /in exch def
+ /out in length 2 idiv 13 mul string def
+ /k 0 def /m 0 def {
+ k in length eq {exit} if
+ in k get 256 mul in k 1 add get add
+ dup 16#E040 lt {16#8140} {16#C140} ifelse sub
+ dup -8 bitshift 16#C0 mul exch 16#00FF and add
+ 13 tobin dup out exch m exch putinterval
+ length m add /m exch def
+ /k k 2 add def
+ } loop
+ out
+ } bind def
+
+ /encfuncs [ /encN /encA /encB /encK ] def
+
+ /addtobits {
+ dup bits j 3 -1 roll putinterval
+ length j add /j exch def
+ } bind def
+
+ /numNs [ msglen {0} repeat 0 ] def
+ /numAs [ msglen {0} repeat 0 ] def
+ /numBs [ msglen {0} repeat 0 ] def
+ /numKs [ msglen {0} repeat -1 ] def
+ /nextNs [ msglen {0} repeat 9999 ] def
+ /nextBs [ msglen {0} repeat 9999 ] def
+ /nextAs [ msglen {0} repeat 9999 ] def
+ /nextKs [ msglen {0} repeat 9999 ] def
+ msglen 1 sub -1 0 {
+ /i exch def
+ /barchar msg i get def
+ Kexcl barchar known {
+ nextKs i 0 put
+ numKs i numKs i 1 add get 1 add put
+ } {
+ nextKs i nextKs i 1 add get 1 add put
+ } ifelse
+ Nexcl barchar known {
+ nextNs i 0 put
+ numNs i numNs i 1 add get 1 add put
+ } {
+ nextNs i nextNs i 1 add get 1 add put
+ } ifelse
+ Bexcl barchar known {
+ nextBs i 0 put
+ numBs i numBs i 1 add get 1 add put
+ } {
+ nextBs i nextBs i 1 add get 1 add put
+ } ifelse
+ Aexcl barchar known {
+ nextAs i 0 put
+ numAs i numAs i 1 add get 1 add put
+ } {
+ nextAs i nextAs i 1 add get 1 add put
+ } ifelse
+ } for
+ /numKs [ numKs {1 add 2 idiv} forall ] def
+
+ /KbeforeB {numK exch ver get ge nextBs numK 2 mul i add get 0 eq and} bind def
+ /KbeforeA {numK exch ver get ge nextAs numK 2 mul i add get 0 eq and} bind def
+ /KbeforeN {numK exch ver get ge nextNs numK 2 mul i add get 0 eq and} bind def
+ /KbeforeE {numK exch ver get ge numK 2 mul i add msglen eq and} bind def
+ /AbeforeK {numA exch ver get ge nextKs numA i add get 0 eq and} bind def
+ /AbeforeB {numA exch ver get ge nextBs numA i add get 0 eq and} bind def
+ /AbeforeN {numA exch ver get ge nextNs numA i add get 0 eq and} bind def
+ /AbeforeE {numA exch ver get ge numA i add msglen eq and} bind def
+ /NbeforeK {numN exch ver get ge nextKs numN i add get 0 eq and} bind def
+ /NbeforeB {numN exch ver get ge nextBs numN i add get 0 eq and} bind def
+ /NbeforeA {numN exch ver get ge nextAs numN i add get 0 eq and} bind def
+ /NbeforeE {numN exch ver get ge numN i add msglen eq and} bind def
+
+ % Elements of the encoded message have differing lengths based on the
+ % resulting symbol size. The symbol sizes with different element lengths
+ % are batched into vergrps. To pick the smallest symbol that holds our
+ % content we encode the message according to each available vergrp, based
+ % on the format of symbol.
+
+ % Determine which groups we need to encode
+ version (unset) ne {
+ % A specific version of symbol is given so encode in just the corresponding vergrp
+ /verset <<
+ % Full
+ 0 1 9 { 10 2 string cvrs v1to9 } for
+ 10 1 26 { 10 2 string cvrs v10to26 } for
+ 27 1 40 { 10 2 string cvrs v27to40 } for
+
+ % Micro
+ (M1) vM1 (M2) vM2 (M3) vM3 (M4) vM4
+
+ % rMQR
+ (R7x43) vR7x43 (R7x59) vR7x59 (R7x77) vR7x77 (R7x99) vR7x99 (R7x139) vR7x139
+ (R9x43) vR9x43 (R9x59) vR9x59 (R9x77) vR9x77 (R9x99) vR9x99 (R9x139) vR9x139
+ (R11x27) vR11x27 (R11x43) vR11x43 (R11x59) vR11x59 (R11x77) vR11x77 (R11x99) vR11x99 (R11x139) vR11x139
+ (R13x27) vR13x27 (R13x43) vR13x43 (R13x59) vR13x59 (R13x77) vR13x77 (R13x99) vR13x99 (R13x139) vR13x139
+ (R15x43) vR15x43 (R15x59) vR15x59 (R15x77) vR15x77 (R15x99) vR15x99 (R15x139) vR15x139
+ (R17x43) vR17x43 (R17x59) vR17x59 (R17x77) vR17x77 (R17x99) vR17x99 (R17x139) vR17x139
+ >> version get [ exch ] def
+ } {
+ % Just the format is specified so encode in each vergrp for the type of symbol
+ format (full) eq { /verset [v1to9 v10to26 v27to40] def } if
+ format (micro) eq { /verset [vM1 vM2 vM3 vM4] def } if
+ % rMQR symbols are accessed with an explicit version
+ } ifelse
+
+ % Encode unterminated bitsream for each compatible vergrp separately
+ /msgbits [ 39 {-1} repeat ] def
+ /e 10000 def
+ verset {
+ /ver exch def
+
+ % Derive optimal sequence
+ /mode -1 def /seq [] def /i 0 def {
+ i msglen ge {exit} if
+ /numK numKs i get def
+ /numB numBs i get def
+ /numA numAs i get def
+ /numN numNs i get def
+ ver vM1 eq numA 1 ge and {/seq -1 def exit} if
+ ver vM1 eq numB 1 ge and {/seq -1 def exit} if
+ ver vM1 eq numK 1 ge and {/seq -1 def exit} if
+ ver vM2 eq numB 1 ge and {/seq -1 def exit} if
+ ver vM2 eq numK 1 ge and {/seq -1 def exit} if
+ { % common exit
+ ver vR7x43 ge { % TODO rMQR is binary only for now
+ B exit
+ } if
+ mode -1 eq { % Set initial mode
+ [ 1 1 1 e e 1 1] KbeforeA {K exit} if
+ [ 1 1 1 e e 1 1] KbeforeN {K exit} if
+ [ 5 5 6 e e 2 3] KbeforeB {K exit} if
+ [ 1 1 1 e e 1 1] KbeforeE {K exit} if
+ numK 1 ge {B exit} if
+ [ 6 7 8 e e 3 4] AbeforeB {A exit} if
+ [ 1 1 1 e 1 1 1] AbeforeE {A exit} if
+ numA 1 ge {
+ ver vM2 ne {B} {A} ifelse exit
+ } if
+ [ 4 4 5 e e 2 3] NbeforeB {N exit} if
+ [ 1 1 1 e e 1 1] NbeforeB {B exit} if
+ [ 7 8 9 e 3 4 5] NbeforeA {N exit} if
+ [ 1 1 1 e 1 1 1] NbeforeA {A exit} if
+ numN 1 ge {N exit} if
+ B exit
+ } if
+ mode B eq {
+ [ 9 12 13 e e 4 5] KbeforeB {K exit} if
+ [ 9 10 12 e e 4 5] KbeforeA {K exit} if
+ [ 9 10 11 e e 5 6] KbeforeN {K exit} if
+ [ 4 5 6 e e 2 3] KbeforeE {K exit} if
+ [11 12 14 e e 5 7] AbeforeK {A exit} if
+ [11 15 16 e e 6 7] AbeforeB {A exit} if
+ [12 13 15 e e 6 8] AbeforeN {A exit} if
+ [ 6 7 8 e e 3 4] AbeforeE {A exit} if
+ [ 6 7 8 e e 3 4] NbeforeK {N exit} if
+ [ 6 8 9 e e 3 4] NbeforeB {N exit} if
+ [ 6 7 8 e e 3 4] NbeforeA {N exit} if
+ [ 3 4 5 e e 2 3] NbeforeE {N exit} if
+ B exit
+ } if
+ mode A eq {
+ numK 1 ge {K exit} if
+ numB 1 ge {B exit} if
+ [13 15 17 e 5 7 9] NbeforeA {N exit} if
+ [13 17 18 e e 7 9] NbeforeB {N exit} if
+ [ 7 8 9 e 3 4 5] NbeforeE {N exit} if
+ numA 1 ge numN 1 ge or {A exit} if
+ B exit
+ } if
+ mode N eq {
+ numK 1 ge {K exit} if
+ numB 1 ge {B exit} if
+ numA 1 ge {A exit} if
+ numN 1 ge {N exit} if
+ B exit
+ } if
+ mode K eq {
+ numB 1 ge {B exit} if
+ numA 1 ge {A exit} if
+ numN 1 ge {N exit} if
+ numK 1 ge {K exit} if
+ B exit
+ } if
+ } loop
+ dup K eq fnc1first and {pop B} if % No kanji with fnc1first
+ dup mode eq { % Same mode encode directly
+ pop
+ /dat msg i mode K eq {2} {1} ifelse getinterval def
+ /seq [
+ seq aload pop
+ [ exch aload pop dat aload pop ]
+ ] def
+ } { % Change mode
+ /mode exch def
+ mode K eq {K msg i numK 2 mul getinterval} if
+ mode B eq {B msg i numB getinterval} if
+ mode A eq {A msg i numA getinterval} if
+ mode N eq {N msg i numN getinterval} if
+ /dat exch def /sw exch def
+ /seq [ seq aload pop sw dat ] def
+ } ifelse
+ /i i dat length add def
+ } loop
+
+ % Encode the sequence
+ { % common exit
+ seq -1 eq {exit} if % Sequence not available
+ /bits 23648 string def
+ /j 0 def
+ fnc1first {
+ ver vR7x43 lt { (0101) } { (101) } ifelse addtobits
+ } if
+ /abort false def
+ 0 2 seq length 1 sub {
+ /i exch def
+ /mode seq i get def
+ mids ver get mode get addtobits
+ /cclen cclens ver get mode get def
+ /chars seq i 1 add get def
+ chars length 2 cclen exp cvi ge { % Too many characters for cc indicator
+ /abort true def exit
+ } if
+ chars length mode K eq {2 idiv} if cclen tobin addtobits
+ chars encfuncs mode get load exec addtobits
+ } for
+ abort {exit} if
+ /bits bits 0 j getinterval def
+ msgbits ver bits put
+ exit
+ } loop
+ } forall
+
+ % Lookup the most appropriate symbol specification
+ /metrics [
+ % format vers vergrp rows cols align modules error codewords error correction blocks
+ % L M Q H L1 L2 M1 M2 Q1 Q2 H1 H2
+ [ (micro) (M1) vM1 11 11 98 99 36 [ 2 99 99 99 ] [ 1 0 -1 -1 -1 -1 -1 -1 ] ]
+ [ (micro) (M2) vM2 13 13 98 99 80 [ 5 6 99 99 ] [ 1 0 1 0 -1 -1 -1 -1 ] ]
+ [ (micro) (M3) vM3 15 15 98 99 132 [ 6 8 99 99 ] [ 1 0 1 0 -1 -1 -1 -1 ] ]
+ [ (micro) (M4) vM4 17 17 98 99 192 [ 8 10 14 99 ] [ 1 0 1 0 1 0 -1 -1 ] ]
+ [ (full) (1) v1to9 21 21 98 99 208 [ 7 10 13 17 ] [ 1 0 1 0 1 0 1 0 ] ]
+ [ (full) (2) v1to9 25 25 18 99 359 [ 10 16 22 28 ] [ 1 0 1 0 1 0 1 0 ] ]
+ [ (full) (3) v1to9 29 29 22 99 567 [ 15 26 36 44 ] [ 1 0 1 0 2 0 2 0 ] ]
+ [ (full) (4) v1to9 33 33 26 99 807 [ 20 36 52 64 ] [ 1 0 2 0 2 0 4 0 ] ]
+ [ (full) (5) v1to9 37 37 30 99 1079 [ 26 48 72 88 ] [ 1 0 2 0 2 2 2 2 ] ]
+ [ (full) (6) v1to9 41 41 34 99 1383 [ 36 64 96 112 ] [ 2 0 4 0 4 0 4 0 ] ]
+ [ (full) (7) v1to9 45 45 22 38 1568 [ 40 72 108 130 ] [ 2 0 4 0 2 4 4 1 ] ]
+ [ (full) (8) v1to9 49 49 24 42 1936 [ 48 88 132 156 ] [ 2 0 2 2 4 2 4 2 ] ]
+ [ (full) (9) v1to9 53 53 26 46 2336 [ 60 110 160 192 ] [ 2 0 3 2 4 4 4 4 ] ]
+ [ (full) (10) v10to26 57 57 28 50 2768 [ 72 130 192 224 ] [ 2 2 4 1 6 2 6 2 ] ]
+ [ (full) (11) v10to26 61 61 30 54 3232 [ 80 150 224 264 ] [ 4 0 1 4 4 4 3 8 ] ]
+ [ (full) (12) v10to26 65 65 32 58 3728 [ 96 176 260 308 ] [ 2 2 6 2 4 6 7 4 ] ]
+ [ (full) (13) v10to26 69 69 34 62 4256 [ 104 198 288 352 ] [ 4 0 8 1 8 4 12 4 ] ]
+ [ (full) (14) v10to26 73 73 26 46 4651 [ 120 216 320 384 ] [ 3 1 4 5 11 5 11 5 ] ]
+ [ (full) (15) v10to26 77 77 26 48 5243 [ 132 240 360 432 ] [ 5 1 5 5 5 7 11 7 ] ]
+ [ (full) (16) v10to26 81 81 26 50 5867 [ 144 280 408 480 ] [ 5 1 7 3 15 2 3 13 ] ]
+ [ (full) (17) v10to26 85 85 30 54 6523 [ 168 308 448 532 ] [ 1 5 10 1 1 15 2 17 ] ]
+ [ (full) (18) v10to26 89 89 30 56 7211 [ 180 338 504 588 ] [ 5 1 9 4 17 1 2 19 ] ]
+ [ (full) (19) v10to26 93 93 30 58 7931 [ 196 364 546 650 ] [ 3 4 3 11 17 4 9 16 ] ]
+ [ (full) (20) v10to26 97 97 34 62 8683 [ 224 416 600 700 ] [ 3 5 3 13 15 5 15 10 ] ]
+ [ (full) (21) v10to26 101 101 28 50 9252 [ 224 442 644 750 ] [ 4 4 17 0 17 6 19 6 ] ]
+ [ (full) (22) v10to26 105 105 26 50 10068 [ 252 476 690 816 ] [ 2 7 17 0 7 16 34 0 ] ]
+ [ (full) (23) v10to26 109 109 30 54 10916 [ 270 504 750 900 ] [ 4 5 4 14 11 14 16 14 ] ]
+ [ (full) (24) v10to26 113 113 28 54 11796 [ 300 560 810 960 ] [ 6 4 6 14 11 16 30 2 ] ]
+ [ (full) (25) v10to26 117 117 32 58 12708 [ 312 588 870 1050 ] [ 8 4 8 13 7 22 22 13 ] ]
+ [ (full) (26) v10to26 121 121 30 58 13652 [ 336 644 952 1110 ] [ 10 2 19 4 28 6 33 4 ] ]
+ [ (full) (27) v27to40 125 125 34 62 14628 [ 360 700 1020 1200 ] [ 8 4 22 3 8 26 12 28 ] ]
+ [ (full) (28) v27to40 129 129 26 50 15371 [ 390 728 1050 1260 ] [ 3 10 3 23 4 31 11 31 ] ]
+ [ (full) (29) v27to40 133 133 30 54 16411 [ 420 784 1140 1350 ] [ 7 7 21 7 1 37 19 26 ] ]
+ [ (full) (30) v27to40 137 137 26 52 17483 [ 450 812 1200 1440 ] [ 5 10 19 10 15 25 23 25 ] ]
+ [ (full) (31) v27to40 141 141 30 56 18587 [ 480 868 1290 1530 ] [ 13 3 2 29 42 1 23 28 ] ]
+ [ (full) (32) v27to40 145 145 34 60 19723 [ 510 924 1350 1620 ] [ 17 0 10 23 10 35 19 35 ] ]
+ [ (full) (33) v27to40 149 149 30 58 20891 [ 540 980 1440 1710 ] [ 17 1 14 21 29 19 11 46 ] ]
+ [ (full) (34) v27to40 153 153 34 62 22091 [ 570 1036 1530 1800 ] [ 13 6 14 23 44 7 59 1 ] ]
+ [ (full) (35) v27to40 157 157 30 54 23008 [ 570 1064 1590 1890 ] [ 12 7 12 26 39 14 22 41 ] ]
+ [ (full) (36) v27to40 161 161 24 50 24272 [ 600 1120 1680 1980 ] [ 6 14 6 34 46 10 2 64 ] ]
+ [ (full) (37) v27to40 165 165 28 54 25568 [ 630 1204 1770 2100 ] [ 17 4 29 14 49 10 24 46 ] ]
+ [ (full) (38) v27to40 169 169 32 58 26896 [ 660 1260 1860 2220 ] [ 4 18 13 32 48 14 42 32 ] ]
+ [ (full) (39) v27to40 173 173 26 54 28256 [ 720 1316 1950 2310 ] [ 20 4 40 7 43 22 10 67 ] ]
+ [ (full) (40) v27to40 177 177 30 58 29648 [ 750 1372 2040 2430 ] [ 19 6 18 31 34 34 20 61 ] ]
+ [ (rmqr) (R7x43) vR7x43 7 43 22 99 104 [ 99 7 99 10 ] [ -1 -1 1 0 -1 -1 1 0 ] ]
+ [ (rmqr) (R7x59) vR7x59 7 59 20 40 171 [ 99 9 99 14 ] [ -1 -1 1 0 -1 -1 1 0 ] ]
+ [ (rmqr) (R7x77) vR7x77 7 77 26 52 261 [ 99 12 99 22 ] [ -1 -1 1 0 -1 -1 1 0 ] ]
+ [ (rmqr) (R7x99) vR7x99 7 99 24 50 358 [ 99 16 99 30 ] [ -1 -1 1 0 -1 -1 1 0 ] ]
+ [ (rmqr) (R7x139) vR7x139 7 139 28 56 545 [ 99 24 99 44 ] [ -1 -1 1 0 -1 -1 2 0 ] ]
+ [ (rmqr) (R9x43) vR9x43 9 43 22 99 170 [ 99 9 99 14 ] [ -1 -1 1 0 -1 -1 1 0 ] ]
+ [ (rmqr) (R9x59) vR9x59 9 59 20 40 267 [ 99 12 99 22 ] [ -1 -1 1 0 -1 -1 1 0 ] ]
+ [ (rmqr) (R9x77) vR9x77 9 77 26 52 393 [ 99 18 99 32 ] [ -1 -1 1 0 -1 -1 1 1 ] ]
+ [ (rmqr) (R9x99) vR9x99 9 99 24 50 532 [ 99 24 99 44 ] [ -1 -1 1 0 -1 -1 2 0 ] ]
+ [ (rmqr) (R9x139) vR9x139 9 139 28 56 797 [ 99 36 99 66 ] [ -1 -1 1 1 -1 -1 3 0 ] ]
+ [ (rmqr) (R11x27) vR11x27 11 27 98 99 122 [ 99 8 99 10 ] [ -1 -1 1 0 -1 -1 1 0 ] ]
+ [ (rmqr) (R11x43) vR11x43 11 43 22 99 249 [ 99 12 99 20 ] [ -1 -1 1 0 -1 -1 1 0 ] ]
+ [ (rmqr) (R11x59) vR11x59 11 59 20 40 376 [ 99 16 99 32 ] [ -1 -1 1 0 -1 -1 1 1 ] ]
+ [ (rmqr) (R11x77) vR11x77 11 77 26 52 538 [ 99 24 99 44 ] [ -1 -1 1 0 -1 -1 1 1 ] ]
+ [ (rmqr) (R11x99) vR11x99 11 99 24 50 719 [ 99 32 99 60 ] [ -1 -1 1 1 -1 -1 1 1 ] ]
+ [ (rmqr) (R11x139) vR11x139 11 139 28 56 1062 [ 99 48 99 90 ] [ -1 -1 2 0 -1 -1 3 0 ] ]
+ [ (rmqr) (R13x27) vR13x27 13 27 98 99 172 [ 99 9 99 14 ] [ -1 -1 1 0 -1 -1 1 0 ] ]
+ [ (rmqr) (R13x43) vR13x43 13 43 22 99 329 [ 99 14 99 28 ] [ -1 -1 1 0 -1 -1 1 0 ] ]
+ [ (rmqr) (R13x59) vR13x59 13 59 20 40 486 [ 99 22 99 40 ] [ -1 -1 1 0 -1 -1 2 0 ] ]
+ [ (rmqr) (R13x77) vR13x77 13 77 26 52 684 [ 99 32 99 56 ] [ -1 -1 1 1 -1 -1 1 1 ] ]
+ [ (rmqr) (R13x99) vR13x99 13 99 24 50 907 [ 99 40 99 78 ] [ -1 -1 1 1 -1 -1 1 2 ] ]
+ [ (rmqr) (R13x139) vR13x139 13 139 28 56 1328 [ 99 60 99 112 ] [ -1 -1 2 1 -1 -1 2 2 ] ]
+ [ (rmqr) (R15x43) vR15x43 15 43 22 99 409 [ 99 18 99 36 ] [ -1 -1 1 0 -1 -1 1 1 ] ]
+ [ (rmqr) (R15x59) vR15x59 15 59 20 40 596 [ 99 26 99 48 ] [ -1 -1 1 0 -1 -1 2 0 ] ]
+ [ (rmqr) (R15x77) vR15x77 15 77 26 52 830 [ 99 36 99 72 ] [ -1 -1 1 1 -1 -1 2 1 ] ]
+ [ (rmqr) (R15x99) vR15x99 15 99 24 50 1095 [ 99 48 99 88 ] [ -1 -1 2 0 -1 -1 4 0 ] ]
+ [ (rmqr) (R15x139) vR15x139 15 139 28 56 1594 [ 99 72 99 130 ] [ -1 -1 2 1 -1 -1 1 4 ] ]
+ [ (rmqr) (R17x43) vR17x43 17 43 22 99 489 [ 99 22 99 40 ] [ -1 -1 1 0 -1 -1 1 1 ] ]
+ [ (rmqr) (R17x59) vR17x59 17 59 20 40 706 [ 99 32 99 60 ] [ -1 -1 2 0 -1 -1 2 0 ] ]
+ [ (rmqr) (R17x77) vR17x77 17 77 26 52 976 [ 99 44 99 84 ] [ -1 -1 2 0 -1 -1 1 2 ] ]
+ [ (rmqr) (R17x99) vR17x99 17 99 24 50 1283 [ 99 60 99 104 ] [ -1 -1 2 1 -1 -1 4 0 ] ]
+ [ (rmqr) (R17x139) vR17x139 17 139 28 56 1860 [ 99 80 99 156 ] [ -1 -1 4 0 -1 -1 2 4 ] ]
+ ] def
+ /eclval (LMQH) eclevel search pop length exch pop exch pop def
+ 0 1 metrics length 1 sub {
+ /i exch def
+ /m metrics i get def
+ /frmt m 0 get def % Format of the symbol
+ /vers m 1 get def % Version of symbol
+ /vergrp m 2 get def % Version group
+ /verind i 44 sub def % Version indicator for rMQR format info
+ /rows m 3 get def % Length of side
+ /cols m 4 get def % Length of side
+ /asp2 m 5 get def % Position of second alignment symbol
+ /asp3 m 6 get def % Position of third alignment symbol
+ /nmod m 7 get def % Number of modules
+ /ncws nmod 8 idiv def % Total number of codewords
+ /rbit nmod 8 mod def % Number of remainder bits
+ /lc4b false def % Last data codeword is 4 bits long
+ vers (M1) eq vers (M3) eq or { % Adjustments for M1 and M3 symbols
+ /ncws ncws 1 add def
+ /rbit 0 def
+ /lc4b true def
+ } if
+ /ecws m 8 get eclval get def % Number of error correction codewords
+ /dcws ncws ecws sub def % Number of data codewords
+ /dmod dcws 8 mul lc4b {4} {0} ifelse sub def % Number of data modules
+ /ecb1 m 9 get eclval 2 mul get def % First error correction blocks
+ /ecb2 m 9 get eclval 2 mul 1 add get def % Second error correction blocks
+ /okay true def
+ format frmt ne {/okay false def} if % The format must match that supplied
+ frmt (micro) eq fnc1first and {/okay false def} if % FNC1 mode is only available in full and rmqr
+ version (unset) ne version vers ne and {/okay false def} if % The version must match that supplied
+ ecb1 -1 eq ecb2 -1 eq or {/okay false def} if % Error correction level must be valid
+ /verbits msgbits vergrp get def
+ verbits -1 eq { % Bitstream must be available
+ /okay false def
+ } {
+ verbits length dmod gt {/okay false def} if % and fit into data modules
+ } ifelse
+ /term (000000000) 0 termlens vergrp get getinterval def
+ okay {exit} if
+ } for
+
+ okay not {
+ /bwipp.qrcodeNoValidSymbol (No valid symbol available) //raiseerror exec
+ } if
+
+ /format frmt def
+ /version vers def
+ /msgbits verbits def
+ /dcpb dcws ecb1 ecb2 add idiv def % Base data codewords per block
+ /ecpb ncws ecb1 ecb2 add idiv dcpb sub def % Error correction codewords per block
+
+ % Complete the message bits by adding the terminator, truncated if neccessary
+ /term term 0 dmod msgbits length sub term length 2 copy gt {exch} if pop getinterval def
+ msgbits length term length add string
+ dup 0 msgbits putinterval
+ dup msgbits length term putinterval
+ /msgbits exch def
+
+ % Expand the message bits by adding padding as necessary
+ /pad dmod string def
+ 0 1 pad length 1 sub {pad exch 48 put} for
+ pad 0 msgbits putinterval
+ /padstrs [ (11101100) (00010001) ] def
+ /padnum 0 def
+ msgbits length 8 div ceiling 8 mul cvi 8 dmod lc4b {5} {1} ifelse sub {
+ pad exch padstrs padnum get putinterval
+ /padnum padnum 1 add 2 mod def
+ } for
+
+ % Evaluate the padded message into codewords
+ /cws dcws array def
+ 0 1 cws length 1 sub {
+ /c exch def
+ /bpcw 8 def
+ lc4b c cws length 1 sub eq and {/bpcw 4 def} if
+ /cwb pad c 8 mul bpcw getinterval def
+ /cw 0 def
+ 0 1 bpcw 1 sub {
+ /i exch def
+ /cw cw 2 bpcw i sub 1 sub exp cvi cwb i get 48 sub mul add def
+ } for
+ cws c cw put
+ } for
+
+ % Short final data byte in M1 and M3 symbols has high-order value
+ lc4b {cws cws length 1 sub 2 copy get 4 bitshift put} if
+
+ % Calculate the log and anti-log tables
+ /rsalog [ 1 255 { dup 2 mul dup 256 ge {285 xor} if } repeat ] def
+ /rslog 256 array def
+ 1 1 255 {dup rsalog exch get exch rslog 3 1 roll put} for
+
+ % Function to calculate the product in the field
+ /rsprod {
+ 2 copy 0 ne exch 0 ne and {
+ rslog exch get exch rslog exch get add 255 mod rsalog exch get
+ } {
+ pop pop 0
+ } ifelse
+ } bind def
+
+ % Generate the coefficients for the Reed-Solomon algorithm
+ /coeffs [ 1 ecpb {0} repeat ] def
+ 0 1 ecpb 1 sub {
+ /i exch def
+ coeffs i 1 add coeffs i get put
+ i -1 1 {
+ /j exch def
+ coeffs j coeffs j 1 sub get coeffs j get rsalog i get rsprod xor put
+ } for
+ coeffs 0 coeffs 0 get rsalog i get rsprod put
+ } for
+ /coeffs coeffs 0 coeffs length 1 sub getinterval def
+
+ % Reed-Solomon algorithm to derive the error correction codewords
+ /rscodes {
+ /rscws exch def
+ /rsnd rscws length def
+ /rscws [ rscws {} forall ecpb {0} repeat ] def
+ 0 1 rsnd 1 sub {
+ /m exch def
+ /k rscws m get def
+ 0 1 ecpb 1 sub {
+ /j exch def
+ rscws m j add 1 add coeffs ecpb j sub 1 sub get k rsprod rscws m j add 1 add get xor put
+ } for
+ } for
+ rscws rsnd ecpb getinterval
+ } bind def
+
+ % Divide codewords into two groups of blocks and calculate the error correction codewords
+ /dcwsb ecb1 ecb2 add array def
+ /ecwsb ecb1 ecb2 add array def
+ 0 1 ecb1 1 sub { % First group of blocks has smaller number of data codewords
+ /i exch def
+ dcwsb i cws i dcpb mul dcpb getinterval put
+ ecwsb i dcwsb i get rscodes put
+ } for
+ 0 1 ecb2 1 sub { % Second group of blocks has larger number of data codewords
+ /i exch def
+ dcwsb ecb1 i add cws ecb1 dcpb mul i dcpb 1 add mul add dcpb 1 add getinterval put
+ ecwsb ecb1 i add dcwsb ecb1 i add get rscodes put
+ } for
+
+ % Reassemble the codewords
+ /cws ncws array def
+ /cw 0 def
+ 0 1 dcpb { % Interleave the data codeword blocks
+ /i exch def
+ 0 1 ecb1 ecb2 add 1 sub {
+ /j exch def
+ i dcwsb j get length lt { % Ignore the end of short blocks
+ cws cw dcwsb j get i get put
+ /cw cw 1 add def
+ } if
+ } for
+ } for
+ 0 1 ecpb 1 sub { % Interleave the error codeword blocks
+ /i exch def
+ 0 1 ecb1 ecb2 add 1 sub {
+ /j exch def
+ cws cw ecwsb j get i get put
+ /cw cw 1 add def
+ } for
+ } for
+
+ % Extend codewords by one if there are remainder bits
+ rbit 0 gt {
+ /pad cws length 1 add array def
+ pad 0 cws putinterval
+ pad pad length 1 sub 0 put
+ /cws pad def
+ } if
+
+ % Fixups for the short final data byte in M1 and M3 symbols
+ lc4b {
+ cws dcws 1 sub 2 copy get -4 bitshift put
+ dcws 1 sub 1 ncws 2 sub {
+ /i exch def
+ cws i cws i get 15 and 4 bitshift put
+ cws i cws i 1 add get -4 bitshift 15 and cws i get or put
+ } for
+ cws ncws 1 sub cws ncws 1 sub get 15 and 4 bitshift put
+ } if
+
+ % Create the bitmap
+ /pixs [ rows cols mul {-1} repeat ] def
+ /qmv {cols mul add} bind def
+
+ % Timing patterns
+ format (full) eq {
+ 8 1 cols 9 sub {
+ /i exch def
+ pixs i 6 qmv i 1 add 2 mod put
+ pixs 6 i qmv i 1 add 2 mod put
+ } for
+ } if
+ format (micro) eq {
+ 8 1 cols 1 sub {
+ /i exch def
+ pixs i 0 qmv i 1 add 2 mod put
+ pixs 0 i qmv i 1 add 2 mod put
+ } for
+ } if
+ format (rmqr) eq {
+ 3 1 cols 4 sub { % Along top and bottom
+ /i exch def
+ pixs i 0 qmv i 1 add 2 mod put
+ pixs i rows 1 sub qmv i 1 add 2 mod put
+ } for
+ 3 1 rows 4 sub { % Along left and right
+ /i exch def
+ pixs 0 i qmv i 1 add 2 mod put
+ pixs cols 1 sub i qmv i 1 add 2 mod put
+ } for
+ asp2 1 sub asp3 asp2 sub cols 13 sub { % Down interior
+ /i exch def
+ 3 1 rows 4 sub {
+ /j exch def
+ pixs i j qmv j 1 add 2 mod put
+ } for
+ } for
+ } if
+
+ % Finder patterns
+ /fpat [
+ [ 1 1 1 1 1 1 1 0 ]
+ [ 1 0 0 0 0 0 1 0 ]
+ [ 1 0 1 1 1 0 1 0 ]
+ [ 1 0 1 1 1 0 1 0 ]
+ [ 1 0 1 1 1 0 1 0 ]
+ [ 1 0 0 0 0 0 1 0 ]
+ [ 1 1 1 1 1 1 1 0 ]
+ [ 0 0 0 0 0 0 0 0 ]
+ ] def
+ /fsubpat [
+ [ 1 1 1 1 1 9 9 9 ]
+ [ 1 0 0 0 1 9 9 9 ]
+ [ 1 0 1 0 1 9 9 9 ]
+ [ 1 0 0 0 1 9 9 9 ]
+ [ 1 1 1 1 1 9 9 9 ]
+ [ 9 9 9 9 9 9 9 9 ]
+ [ 9 9 9 9 9 9 9 9 ]
+ [ 9 9 9 9 9 9 9 9 ]
+ ] def
+ /fcorpat [
+ [ 1 1 1 9 9 9 9 9 ]
+ [ 1 0 9 9 9 9 9 9 ]
+ [ 1 9 9 9 9 9 9 9 ]
+ [ 9 9 9 9 9 9 9 9 ]
+ [ 9 9 9 9 9 9 9 9 ]
+ [ 9 9 9 9 9 9 9 9 ]
+ [ 9 9 9 9 9 9 9 9 ]
+ [ 9 9 9 9 9 9 9 9 ]
+ ] def
+ /fnullpat [
+ [ 9 9 9 9 9 9 9 9 ]
+ [ 9 9 9 9 9 9 9 9 ]
+ [ 9 9 9 9 9 9 9 9 ]
+ [ 9 9 9 9 9 9 9 9 ]
+ [ 9 9 9 9 9 9 9 9 ]
+ [ 9 9 9 9 9 9 9 9 ]
+ [ 9 9 9 9 9 9 9 9 ]
+ [ 9 9 9 9 9 9 9 9 ]
+ ] def
+ /fpats <<
+ % TL TR BL BR
+ (full) [ fpat fpat fpat fnullpat ]
+ (micro) [ fpat fnullpat fnullpat fnullpat ]
+ (rmqr) [ fpat fcorpat fcorpat fsubpat ]
+ >> format get def
+ 0 1 7 {
+ /y exch def
+ 0 1 7 {
+ /x exch def
+ /fpb0 fpats 0 get y get x get def
+ /fpb1 fpats 1 get y get x get def
+ /fpb2 fpats 2 get y get x get def
+ /fpb3 fpats 3 get y get x get def
+ fpb0 9 ne y rows lt and {pixs x y qmv fpb0 put} if
+ fpb1 9 ne {pixs cols x sub 1 sub y qmv fpb1 put} if
+ fpb2 9 ne {pixs x rows y sub 1 sub qmv fpb2 put} if
+ fpb3 9 ne {pixs cols x sub 1 sub rows y sub 1 sub qmv fpb3 put} if
+ } for
+ } for
+
+ % Alignment patterns
+ /putalgnpat {
+ /py exch def
+ /px exch def
+ 0 1 4 {
+ /pb exch def
+ 0 1 4 {
+ /pa exch def
+ /algnb algnpat pb get pa get def
+ algnb 9 ne {
+ pixs px pa add py pb add qmv algnb put
+ } if
+ } for
+ } for
+ } bind def
+ format (full) eq {
+ /algnpat [
+ [ 1 1 1 1 1 ]
+ [ 1 0 0 0 1 ]
+ [ 1 0 1 0 1 ]
+ [ 1 0 0 0 1 ]
+ [ 1 1 1 1 1 ]
+ ] def
+ asp2 2 sub asp3 asp2 sub cols 13 sub {
+ /i exch def
+ i 4 putalgnpat
+ 4 i putalgnpat
+ } for
+ asp2 2 sub asp3 asp2 sub cols 9 sub {
+ /x exch def
+ asp2 2 sub asp3 asp2 sub rows 9 sub {
+ /y exch def
+ x y putalgnpat
+ } for
+ } for
+ } if
+ format (rmqr) eq {
+ /algnpat [
+ [ 1 1 1 9 9 ]
+ [ 1 0 1 9 9 ]
+ [ 1 1 1 9 9 ]
+ [ 9 9 9 9 9 ]
+ [ 9 9 9 9 9 ]
+ ] def
+ asp2 2 sub asp3 asp2 sub cols 13 sub {
+ /i exch def
+ i 0 putalgnpat
+ i rows 3 sub putalgnpat
+ } for
+ } if
+
+ % Format information modules
+ /formatmap <<
+ (full) [
+ [ [ 0 8 ] [ 8 cols 1 sub ] ] [ [ 1 8 ] [ 8 cols 2 sub ] ] [ [ 2 8 ] [ 8 cols 3 sub ] ]
+ [ [ 3 8 ] [ 8 cols 4 sub ] ] [ [ 4 8 ] [ 8 cols 5 sub ] ] [ [ 5 8 ] [ 8 cols 6 sub ] ]
+ [ [ 7 8 ] [ 8 cols 7 sub ] ] [ [ 8 8 ] [ cols 8 sub 8 ] ] [ [ 8 7 ] [ cols 7 sub 8 ] ]
+ [ [ 8 5 ] [ cols 6 sub 8 ] ] [ [ 8 4 ] [ cols 5 sub 8 ] ] [ [ 8 3 ] [ cols 4 sub 8 ] ]
+ [ [ 8 2 ] [ cols 3 sub 8 ] ] [ [ 8 1 ] [ cols 2 sub 8 ] ] [ [ 8 0 ] [ cols 1 sub 8 ] ]
+ ]
+ (micro) [
+ [ [ 1 8 ] ] [ [ 2 8 ] ] [ [ 3 8 ] ] [ [ 4 8 ] ] [ [ 5 8 ] ]
+ [ [ 6 8 ] ] [ [ 7 8 ] ] [ [ 8 8 ] ] [ [ 8 7 ] ] [ [ 8 6 ] ]
+ [ [ 8 5 ] ] [ [ 8 4 ] ] [ [ 8 3 ] ] [ [ 8 2 ] ] [ [ 8 1 ] ]
+ ]
+ (rmqr) [
+ [ [ 11 3 ] [ cols 3 sub rows 6 sub ] ] [ [ 11 2 ] [ cols 4 sub rows 6 sub ] ] [ [ 11 1 ] [ cols 5 sub rows 6 sub ] ]
+ [ [ 10 5 ] [ cols 6 sub rows 2 sub ] ] [ [ 10 4 ] [ cols 6 sub rows 3 sub ] ] [ [ 10 3 ] [ cols 6 sub rows 4 sub ] ]
+ [ [ 10 2 ] [ cols 6 sub rows 5 sub ] ] [ [ 10 1 ] [ cols 6 sub rows 6 sub ] ] [ [ 9 5 ] [ cols 7 sub rows 2 sub ] ]
+ [ [ 9 4 ] [ cols 7 sub rows 3 sub ] ] [ [ 9 3 ] [ cols 7 sub rows 4 sub ] ] [ [ 9 2 ] [ cols 7 sub rows 5 sub ] ]
+ [ [ 9 1 ] [ cols 7 sub rows 6 sub ] ] [ [ 8 5 ] [ cols 8 sub rows 2 sub ] ] [ [ 8 4 ] [ cols 8 sub rows 3 sub ] ]
+ [ [ 8 3 ] [ cols 8 sub rows 4 sub ] ] [ [ 8 2 ] [ cols 8 sub rows 5 sub ] ] [ [ 8 1 ] [ cols 8 sub rows 6 sub ] ]
+ ]
+ >> format get def
+ formatmap {
+ { {} forall qmv pixs exch 1 put } forall
+ } forall
+
+ % Version information modules
+ format (full) eq cols 45 ge and {
+ /versionmap [
+ [ [ cols 9 sub 5 ] [ 5 cols 9 sub ] ] [ [ cols 10 sub 5 ] [ 5 cols 10 sub ] ]
+ [ [ cols 11 sub 5 ] [ 5 cols 11 sub ] ] [ [ cols 9 sub 4 ] [ 4 cols 9 sub ] ]
+ [ [ cols 10 sub 4 ] [ 4 cols 10 sub ] ] [ [ cols 11 sub 4 ] [ 4 cols 11 sub ] ]
+ [ [ cols 9 sub 3 ] [ 3 cols 9 sub ] ] [ [ cols 10 sub 3 ] [ 3 cols 10 sub ] ]
+ [ [ cols 11 sub 3 ] [ 3 cols 11 sub ] ] [ [ cols 9 sub 2 ] [ 2 cols 9 sub ] ]
+ [ [ cols 10 sub 2 ] [ 2 cols 10 sub ] ] [ [ cols 11 sub 2 ] [ 2 cols 11 sub ] ]
+ [ [ cols 9 sub 1 ] [ 1 cols 9 sub ] ] [ [ cols 10 sub 1 ] [ 1 cols 10 sub ] ]
+ [ [ cols 11 sub 1 ] [ 1 cols 11 sub ] ] [ [ cols 9 sub 0 ] [ 0 cols 9 sub ] ]
+ [ [ cols 10 sub 0 ] [ 0 cols 10 sub ] ] [ [ cols 11 sub 0 ] [ 0 cols 11 sub ] ]
+ ] def
+ } {
+ /versionmap [] def
+ } ifelse
+ versionmap {
+ { {} forall qmv pixs exch 0 put } forall
+ } forall
+
+ % Reserve the solitary dark module in full symbols
+ format (full) eq {
+ pixs 8 rows 8 sub qmv 0 put
+ } if
+
+ % Calculate the mask patterns
+ /maskfuncs <<
+ (full) [
+ {add 2 mod}
+ {exch pop 2 mod}
+ {pop 3 mod}
+ {add 3 mod}
+ {2 idiv exch 3 idiv add 2 mod}
+ {mul dup 2 mod exch 3 mod add}
+ {mul dup 2 mod exch 3 mod add 2 mod}
+ {2 copy mul 3 mod 3 1 roll add 2 mod add 2 mod}
+ ]
+ (micro) [
+ {exch pop 2 mod}
+ {2 idiv exch 3 idiv add 2 mod}
+ {mul dup 2 mod exch 3 mod add 2 mod}
+ {2 copy mul 3 mod 3 1 roll add 2 mod add 2 mod}
+ ]
+ (rmqr) [
+ {2 idiv exch 3 idiv add 2 mod}
+ ]
+ >> format get def
+ mask -1 ne { % User specifies a mask
+ /maskfuncs [maskfuncs mask 1 sub get] def
+ /bestmaskval mask 1 sub def
+ } if
+ /masks maskfuncs length array def
+ 0 1 masks length 1 sub {
+ /m exch def
+ /mask rows cols mul array def
+ 0 1 rows 1 sub {
+ /j exch def
+ 0 1 cols 1 sub {
+ /i exch def
+ i j maskfuncs m get exec 0 eq
+ pixs i j qmv get -1 eq and {1} {0} ifelse
+ mask i j qmv 3 -1 roll put
+ } for
+ } for
+ masks m mask put
+ } for
+
+ % Walk the symbol placing the bitstream
+ /posx cols format (rmqr) ne {1} {2} ifelse sub def
+ /posy rows 1 sub def
+ /dir -1 def % -1 is upwards, 1 is downwards
+ /col 1 def % 0 is left bit, 1 is right bit
+ /num 0 def
+ { % loop
+ posx 0 lt {exit} if
+ pixs posx posy qmv get -1 eq {
+ cws num 8 idiv get 7 num 8 mod sub neg bitshift 1 and
+ pixs posx posy qmv 3 -1 roll put
+ /num num 1 add def
+ } if
+ col 1 eq {
+ /col 0 def
+ /posx posx 1 sub def
+ } {
+ /col 1 def
+ /posx posx 1 add def
+ /posy posy dir add def
+ posy 0 lt posy rows ge or { % Turn around at top and bottom
+ /dir dir -1 mul def
+ /posy posy dir add def
+ /posx posx 2 sub def
+ % Hop over the timing pattern in full size symbols
+ format (full) eq posx 6 eq and {/posx posx 1 sub def} if
+ } if
+ } ifelse
+ } loop
+
+ % Evaluate runlength encoded rows or columns in full symbols
+ /evalfulln1n3 {
+ /scrle exch def
+ % Detect runs of 5 or more like modules
+ /scr1 0 scrle { dup 5 ge {add 2 sub dup} if pop } forall def
+ % Detect 1:1:3:1:1 ratio next to 4 modules of whitespace
+ /scr3 0 def
+ 3 2 scrle length 3 sub { % Scan odd (dark) runs within bounds
+ /j exch def
+ scrle j get 3 mod 0 eq { % Multiple of 3 black modules
+ /fact scrle j get 3 idiv def
+ scrle j 2 sub 5 getinterval {fact eq} forall and exch pop and and {
+ j 3 eq j 4 add scrle length ge or { % At either extent of run
+ /scr3 scr3 40 add def
+ } { % Bounded by dark modules
+ scrle j 3 sub get 4 ge scrle j 3 add get 4 ge or {
+ /scr3 scr3 40 add def
+ } if
+ } ifelse
+ } if
+ } if
+ } for
+ scr1 scr3
+ } bind def
+
+ % Evaluation algorithm for full symbols
+ /evalfull {
+ /sym exch def
+
+ /n1 0 def /n2 0 def /n3 0 def
+ /rle cols 1 add array def
+ /lastpairs cols array def
+ /thispairs cols array def
+ /colsadd1 cols 1 add def
+ 0 1 cols 1 sub {
+ /i exch def
+
+ % Runlength encode (light, dark, light, ...) and evaluate each column
+ mark 0 0
+ i cols dup dup mul 1 sub {
+ sym exch get exch 1 index eq {exch 1 add exch} {1 exch} ifelse
+ } for
+ pop
+ rle 0 counttomark 2 sub getinterval astore
+ evalfulln1n3 n3 add /n3 exch def n1 add /n1 exch def
+ pop
+
+ % Runlength encode (light, dark, light, ...) and evaluate each row
+ /symrow sym i cols mul cols getinterval def
+ mark 0 0
+ symrow {
+ exch 1 index eq {exch 1 add exch} {1 exch} ifelse
+ } forall
+ pop
+ rle 0 counttomark 2 sub getinterval astore
+ evalfulln1n3 n3 add /n3 exch def n1 add /n1 exch def
+ pop
+
+ % Count and score same coloured blocks
+ /lastpairs thispairs /thispairs lastpairs def def
+ symrow 0 get 1 eq {0} {1} ifelse
+ symrow {exch 1 index add exch} forall
+ pop
+ thispairs astore pop
+ i 0 gt {
+ mark
+ lastpairs aload pop thispairs aload pop
+ n2 cols { exch colsadd1 index add 3 and 0 eq {3 add} if } repeat
+ /n2 exch def
+ cleartomark
+ } if
+
+ } for
+
+ % Score dark/light imbalance
+ /dark 0 sym {add} forall def
+ /n4 dark 100 mul cols dup mul div 50 sub abs 5 div cvi 10 mul def
+
+ n1 n2 add n3 add n4 add
+ } bind def
+
+ % Evaluation algorithm for micro symbols
+ /evalmicro {
+ /sym exch def
+ /dkrhs 0 def /dkbot 0 def
+ 1 1 cols 1 sub {
+ /i exch def
+ /dkrhs dkrhs sym cols 1 sub i qmv get add def
+ /dkbot dkbot sym i cols 1 sub qmv get add def
+ } for
+ dkrhs dkbot le {
+ dkrhs 16 mul dkbot add neg
+ } {
+ dkbot 16 mul dkrhs add neg
+ } ifelse
+ } bind def
+
+ % Evaluate the masked symbols to find the most suitable
+ /bestscore 999999999 def
+ 0 1 masks length 1 sub {
+ /m exch def
+ /masksym rows cols mul array def
+ 0 1 rows cols mul 1 sub {
+ /i exch def
+ masksym i pixs i get masks m get i get xor put
+ } for
+ masks length 1 ne { % Not rMQR nor user-specified mask
+ format (full) eq {
+ masksym evalfull /score exch def
+ } {
+ masksym evalmicro /score exch def
+ } ifelse
+ score bestscore lt {
+ /bestsym masksym def
+ /bestmaskval m def
+ /bestscore score def
+ } if
+ } {
+ /bestsym masksym def
+ } ifelse
+ } for
+ /pixs bestsym def
+
+ % Set the solitary dark module in full symbols
+ format (full) eq {
+ pixs 8 cols 8 sub qmv 1 put
+ } if
+
+ % Add the format information
+ format (full) eq {
+ /fmtvals [
+ 16#5412 16#5125 16#5e7c 16#5b4b 16#45f9 16#40ce 16#4f97 16#4aa0
+ 16#77c4 16#72f3 16#7daa 16#789d 16#662f 16#6318 16#6c41 16#6976
+ 16#1689 16#13be 16#1ce7 16#19d0 16#0762 16#0255 16#0d0c 16#083b
+ 16#355f 16#3068 16#3f31 16#3a06 16#24b4 16#2183 16#2eda 16#2bed
+ ] def
+ /ecid (MLHQ) eclevel search pop length exch pop exch pop def
+ /fmtval fmtvals ecid 3 bitshift bestmaskval add get def
+ 0 1 formatmap length 1 sub {
+ /i exch def
+ formatmap i get {
+ pixs exch aload pop qmv fmtval 14 i sub neg bitshift 1 and put
+ } forall
+ } for
+ } if
+ format (micro) eq {
+ /fmtvals [
+ 16#4445 16#4172 16#4e2b 16#4b1c 16#55ae 16#5099 16#5fc0 16#5af7
+ 16#6793 16#62a4 16#6dfd 16#68ca 16#7678 16#734f 16#7c16 16#7921
+ 16#06de 16#03e9 16#0cb0 16#0987 16#1735 16#1202 16#1d5b 16#186c
+ 16#2508 16#203f 16#2f66 16#2a51 16#34e3 16#31d4 16#3e8d 16#3bba
+ ] def
+ /symid [ [0] [1 2] [3 4] [5 6 7] ] cols 11 sub 2 idiv get eclval get def
+ /fmtval fmtvals symid 2 bitshift bestmaskval add get def
+ 0 1 formatmap length 1 sub {
+ /i exch def
+ pixs formatmap i get 0 get aload pop qmv fmtval 14 i sub neg bitshift 1 and put
+ } for
+ } if
+ format (rmqr) eq {
+ /fmtvals1 [
+ 16#1fab2 16#1e597 16#1dbdd 16#1c4f8 16#1b86c 16#1a749 16#19903 16#18626
+ 16#17f0e 16#1602b 16#15e61 16#14144 16#13dd0 16#122f5 16#11cbf 16#1039a
+ 16#0f1ca 16#0eeef 16#0d0a5 16#0cf80 16#0b314 16#0ac31 16#0927b 16#08d5e
+ 16#07476 16#06b53 16#05519 16#04a3c 16#036a8 16#0298d 16#017c7 16#008e2
+ 16#3f367 16#3ec42 16#3d208 16#3cd2d 16#3b1b9 16#3ae9c 16#390d6 16#38ff3
+ 16#376db 16#369fe 16#357b4 16#34891 16#33405 16#32b20 16#3156a 16#30a4f
+ 16#2f81f 16#2e73a 16#2d970 16#2c655 16#2bac1 16#2a5e4 16#29bae 16#2848b
+ 16#27da3 16#26286 16#25ccc 16#243e9 16#23f7d 16#22058 16#21e12 16#20137
+ ] def
+ /fmtvals2 [
+ 16#20a7b 16#2155e 16#22b14 16#23431 16#248a5 16#25780 16#269ca 16#276ef
+ 16#28fc7 16#290e2 16#2aea8 16#2b18d 16#2cd19 16#2d23c 16#2ec76 16#2f353
+ 16#30103 16#31e26 16#3206c 16#33f49 16#343dd 16#35cf8 16#362b2 16#37d97
+ 16#384bf 16#39b9a 16#3a5d0 16#3baf5 16#3c661 16#3d944 16#3e70e 16#3f82b
+ 16#003ae 16#01c8b 16#022c1 16#03de4 16#04170 16#05e55 16#0601f 16#07f3a
+ 16#08612 16#09937 16#0a77d 16#0b858 16#0c4cc 16#0dbe9 16#0e5a3 16#0fa86
+ 16#108d6 16#117f3 16#129b9 16#1369c 16#14a08 16#1552d 16#16b67 16#17442
+ 16#18d6a 16#1924f 16#1ac05 16#1b320 16#1cfb4 16#1d091 16#1eedb 16#1f1fe
+ ] def
+ /fmtvalu (MH) eclevel search pop length exch pop exch pop 5 bitshift verind add def
+ /fmtval1 fmtvals1 fmtvalu get def
+ /fmtval2 fmtvals2 fmtvalu get def
+ 0 1 formatmap length 1 sub {
+ /i exch def
+ pixs formatmap i get 0 get aload pop qmv fmtval1 17 i sub neg bitshift 1 and put
+ pixs formatmap i get 1 get aload pop qmv fmtval2 17 i sub neg bitshift 1 and put
+ } for
+ } if
+
+ % Add the version information
+ format (full) eq cols 45 ge and {
+ /vervals [
+ 16#07c94 16#085bc 16#09a99 16#0a4d3 16#0bbf6 16#0c762 16#0d847
+ 16#0e60d 16#0f928 16#10b78 16#1145d 16#12a17 16#13532 16#149a6
+ 16#15683 16#168c9 16#177ec 16#18ec4 16#191e1 16#1afab 16#1b08e
+ 16#1cc1a 16#1d33f 16#1ed75 16#1f250 16#209d5 16#216fd 16#228ba
+ 16#2379f 16#24b0b 16#2542e 16#26a64 16#27541 16#28c69
+ ] def
+ /verval vervals cols 17 sub 4 idiv 7 sub get def
+ 0 1 versionmap length 1 sub {
+ /i exch def
+ versionmap i get {
+ pixs exch {} forall qmv verval 17 i sub neg bitshift 1 and put
+ } forall
+ } for
+ } if
+
+ % Return the arguments
+ <<
+ /ren //renmatrix
+ /pixs pixs
+ /pixx cols
+ /pixy rows
+ /height rows 2 mul 72 div
+ /width cols 2 mul 72 div
+ /opt options
+ >>
+
+ dontdraw not //renmatrix if
+
+ end
+
+}
+[/barcode] {null def} forall
+bind def
+/qrcode dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
+%%EndData
+%%EndResource
+
+%%BeginResource: uk.co.terryburton.bwipp swissqrcode 0.0 2020040100 57786 57647
+%%BeginData: 126 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
+dup /qrcode dup /uk.co.terryburton.bwipp findresource put
+begin
+/swissqrcode {
+
+ 20 dict begin % Confine variables to local scope
+
+ /options exch def % We are given an option string
+ /barcode exch def % We are given a barcode string
+
+ /dontdraw false def
+
+ /parse false def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ % Parse ordinals of the form ^NNN to ASCII
+ parse {
+ /msg barcode length string def
+ /j 0 def
+ barcode
+ { % loop
+ (^) search {
+ dup msg exch j exch putinterval
+ length j add 1 add /j exch def
+ pop
+ dup 0 3 getinterval cvi msg exch j 1 sub exch put
+ dup length 3 sub 3 exch getinterval
+ } {
+ dup msg exch j exch putinterval
+ length j add /j exch def
+ /barcode msg 0 j getinterval def
+ exit
+ } ifelse
+ } loop
+ } if
+
+ /barlen barcode length def
+
+ % Validate the input length
+ barcode length 997 gt {
+ /bwipp.swissqrcodeBadLength (Swiss QR Code input must not exceed 997 digits) //raiseerror exec
+ } if
+
+ % Get the result of encoding with qrcode
+ options (dontdraw) true put
+ /args barcode options //qrcode exec def
+
+ args (opt) options put
+ args
+
+ % The 7mm-wide Swiss Cross is defined by the specification as being an
+ % overlaid image, i.e. not made out of "modules", so very likely a
+ % different pitch. It cannot therefore be represented by our standard image
+ % dictionary and would be a nightmare to gridfit. The application assumes a
+ % sufficient high-resolution print process that such issues do not matter.
+ %
+ % So for now we simply do as we're told and paint over the top of the
+ % barcode image that has been scaled to 46mm, user be damned!
+ %
+ dontdraw not {
+
+ gsave
+ currentpoint translate
+ 72 25.4 div dup scale % pt to mm
+
+ % Clipping path with 7mm hole for the Swiss Cross
+ gsave
+ newpath
+ 0 0 moveto
+ 46 0 lineto
+ 46 46 lineto
+ 0 46 lineto
+ closepath
+ 19.5 19.5 moveto
+ 19.5 26.5 lineto
+ 26.5 26.5 lineto
+ 26.5 19.5 lineto
+ closepath
+ clip
+
+ % Scale the QR Code to fit within 46mm
+ gsave
+ 0 0 moveto
+ 46 args (pixx) get div 2 div dup scale
+ //renmatrix exec
+ grestore
+
+ grestore % Clipping
+
+ % Draw Swiss Cross
+ 19.5 dup translate
+ 7 83 div dup scale
+
+ newpath
+ 6 6 moveto
+ 6 77 lineto
+ 77 77 lineto
+ 77 6 lineto
+ closepath
+ 49 18 moveto
+ 49 34 lineto
+ 65 34 lineto
+ 65 49 lineto
+ 49 49 lineto
+ 49 65 lineto
+ 34 65 lineto
+ 34 49 lineto
+ 18 49 lineto
+ 18 34 lineto
+ 34 34 lineto
+ 34 18 lineto
+ closepath
+ 0 0 0 setrgbcolor fill
+
+ grestore
+
+ } if
+
+ end
+
+}
+[/barcode] {null def} forall
+bind def
+/swissqrcode dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
+%%EndData
+%%EndResource
+%%EndProlog
+%%Page: 1 1
+gsave
+1 1 translate
+2 2 scale
+0 0 moveto
+(SPC
+0200
+1
+CH5800791123000889012
+S
+Robert Schneider AG
+Rue du Lac
+1268
+2501
+Biel
+CH
+
+
+
+
+
+
+
+199.95
+CHF
+K
+Pia-Maria Rutschmann-Schnyder
+Grosse Marktgasse 28
+9400 Rorschach
+
+
+CH
+SCOR
+RF18539007547034
+
+EPD)
+<>
+/swissqrcode /uk.co.terryburton.bwipp findresource exec
+grestore
+showpage
+%%Trailer
+%%EOF
diff --git a/graphics/pstricks/contrib/pst-barcode/doc/images/ultracode-1.eps b/graphics/pstricks/contrib/pst-barcode/doc/images/ultracode-1.eps
new file mode 100644
index 0000000000..cfaff5b792
--- /dev/null
+++ b/graphics/pstricks/contrib/pst-barcode/doc/images/ultracode-1.eps
@@ -0,0 +1,230 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%BoundingBox: 0 0 82 54
+%%Creator: Online Barcode Generator 2017-07-10. https://the-burtons.xyz/barcode-generator/
+%%CreationDate: 2017-10-14 21:44:02
+%%Pages: 1
+%%LanguageLevel: 2
+%%DocumentData: Clean7Bit
+%%EndComments
+%%BeginProlog
+%%BeginResource: Category uk.co.terryburton.bwipp 0.0 2017071000 30005 33214
+%%BeginData: 7 ASCII Lines
+currentfile /ASCII85Decode filter cvx exec
+P1OerF_-`n01TSk ATDKp 010/i AS5q% H' 6mE 30Ia, !KmJH2
+3Ji?3%mj@F*(i.@ qAV bE+L\ DATVm "@ r#d rB9 KiQP
+'&Es@:O(aA79M!@ <ls?E +O HE04A mA@< ls ?E+ OH\<K _S[ F_`U> D_?-
+CEcQG7F`MSBDD#C BBlJ$ S4t f93 FCf* 'E d8d <AS,Xo AT D@'Dfp )1A
+Wh2!hZ~>
+% Category/uk.co.terryburton.bwipp 0.0 2017071000
+%%EndData
+%%EndResource
+%%BeginResource: uk.co.terryburton.bwipp raiseerror 0.0 2017071000 153916 40223
+%%BeginData: 9 ASCII Lines
+currentfile /ASCII85Decode filter cvx exec
+06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6 Eckq9F
+(KH4@:O(eDJ+B\< /:R <23JD %Ea`[ 'A S#n &Df U1I,
+\;":DfV")04f0ED fTQ0A oE hrP'A 6`Ec Q) =P! 1O1Ec Q)= DIIBn P!5%
+R,\;":DfRL@Df'? "DIeo MP' A6` EcQ) =0 5b? FATDg0 EZ fIEF_- _\P
++mAf%[&V$Ea`['A S#n&D fV" #P% 6 4gC G'+ 8/p (ZFEd; ,: Ecc5;/ n0$
+=E,Zq1AS,XoATD@ 'Dfp) 1AW h2! 3A 5G bFD tYu CM@[!P .H "'F`V, 9E+
+*6lBl7R3P#M~>
+% uk.co.terryburton.bwipp/raiseerror 0.0 2017071000
+%%EndData
+%%EndResource
+%%BeginResource: uk.co.terryburton.bwipp renmatrix 0.0 2017071000 108697 107630
+%%BeginData: 87 ASCII Lines
+currentfile /ASCII85Decode filter cvx exec
+06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6 Eckq9F
+(KH4@:O(eDJ+B\< /:R <23Kp PEa`[ 'A S#n &Df V"#0
+6M%_@rEuAATDg:@ Wc^5D f. 1:GA2 #8P1 l( DOp s'bAS u?n FE2)? H\`B
+!23JD%@<-"%P!5$ b06_, @FD -I2 Ou"b )A SGd jFGKs\ 1G <3GEas $(D
+fUjAF`)83FHSF5@ UWb^B 6%p 5DI d 6qC i=? S"a +^(ATX (k 04Sp:D fT]
+'E/k*EDKBB2Ou"b *DJO< 4Eb /Zi L] ES o05 5<> F)Z/2@ :X &-!0T, kBl
+7^-E,oMuA9Nb/Ou "b*D I[L *A 7] joG ]Y' ?@; L!rO
+u"b5G]Y'4+C1-d0 6CcM F CT 6* DfU jAF `)83 FHSF5
+FCf]=G[YE&B5W_5 F`)83F HSF 5 FCf ]= H!tN 'B5 W_5F`)83FH SF5FCf]=AoD
+R/NX%piF`M2-Efr 43FCf] =F( o r3L^ K;$0 6Cc MFEh_9AohO *L]ESo06CcM
+FEqe:AohO*L]ESo 06CcMF D#$ $F,0 gZ1G <0Q FED)=FH-?a 1LY<:F*j'+I
+?I0?E--Gi1OYEX0 6_,@F D)e@ Bk2=! OtVt S05 +p2B4uB0BO tmjBQTCjOu"
+b#@<,jrCi=>:@UX :eDes ?4OtD hQ04J @"C M.[+F`(`"D es?4+C\bhCM
+.[+F`(`"Des?4Ot DhQ055< >F)Z/2 @:UKp DJO <4Eb/ZiOtV tS055<>F)Z/
+2@:X$oBl7^-E,oMuA8%,ZOu"b*DJO<4Eb/ZiFs(L:CNFH8ART+mOtVtS06CcMFCT6*DfQtBAU&
+<,Des?4OtDhQ06CcMFEh51BkM<+FCf]=G[YE&B5WkaOu"b5AU&<B@;KXjDBO%4G]\4>Ch[O"Ot
+DhQ06CcMFCoH/F<G[:G][P9DKM$nOu"b5AU&<<BmO>5FCf]=F(or3OtVtS06CcMFEh_9AohO*+
+EV1>FEh_9AohO*OtVtS06CcMFEqe:AohO*+EV1>FEqe:AohO*OtVtS06CcMFD#$$F!,R9G][S,
+E-%0qOu"b"Cijc1G]Y':Cijc1G]]*#Ou$fiCNFH8ART,*!0V2G055<>F)Z/2@:X$oBl7^-E,oM
+uA<J`sP#Q.5CNFH8ART,*!0V2G055<>F)Z/2@:XO(Bl7^-E,oMuA<J`sP#O)ZH"U]1HQ[9AG^,
+BfOo]N9G]T$3P"U4d%[&V$G^4"@G%G]9HQ[9AG^,BfOo]N9G]T$3L]W_WP"UT3P/3<+I?G)'1G
+<TiH"U]1HQ[9AG^,BfOo]E_5*AQp!KmS6Oq*X205YrZF(KH?+E2%>G`lm+!H!u`L]`J5P)#3FI
+?G)'1G<TdATVC"Eb&a%HQ[9AG^,BfOo]E_5)99')3RXK!g7SeG^Y_bOu"b.@W-9tATD^$ApYY>
+Bm=lcCm"g9P!4['Or9EUL]il]P'DD<%[&V$D/"'#DfTB"EdJpJBm=lcCm"g9P!5%%L^'"FL]W`
+&I?G)'1G<TTCh7$qHQ[9AG^,BfOo]E_5)99')3RXK!KmSKG^Y_bOu"b.@r,^bE\r-!!g4F<@r,
+^bEejd[)2J<V!Gu=_ARTV8!g4Fa5)96&!KoW`@r,^bEejd[)3R1>!KmJH5&FeGARTV8!KmJH5)
+96&!KoW`@r,^bEda)\Ou"b5Ea`HhHS9Z-5*@]TG`k7R1G<9QEZfU_!KmJ/L]NY>D0U>=ATX(k0
+5,K@+Co2,Ou"b4GT_6o1G<fp+F0,+06:Z<EZen,Efr4q@<--+>9J/5Gp$C>+F&\COo]hNG_cB`
+!I9J%Oo]eMH&)Ka!I,`4L^7O*Eejd[Cm&\!LG)&@P!5$b01:&J5*@]T6m+mB+@LJtG^3q5FHSF
+56[=hYOu"aYG`k7R1G;*<6[0_@Gp%?WB4Z1J1G;(?P!5$b01'oH5*@]T66JU>+@:>rG^3q5FHS
+F56$\VWOu"aWG`k7R1G;$:6$OM<Gp%?WB4Z1J1I3-MP!+.X+@D;THS8'@HS89FP#ZpW5p/OX4[
+L8ZP!+s2HU3GfP!*K$B8?PN4d*X.02d4F01LAQ<IK3I7X^G"I?ITn3%maa4aW?7A8-(?!0TKl0
+6eUaL]NY>Ou%NL<+K]`L]NZ%HS9XeH&)Ka!Ko6eP#Pt+Eejd[4aSi,+F&\CP,XU#I?IQ?Bl]"3
+P!+.FGp%Bg!KsFF1OYEcBQ[sD!0TKl6$OM<Gp$sFATVC"Eb&a%I=!)'GT]=u+Dl12FCK0/A7]e
+0P#ZpW02.NlHS8oDEZen,Eejg\!JglAC6CAdF_?L2P!+.YGT]=u+Dl12FCK0/A7]d(7!KhBGp$
+s5DfTB"Ec5Q%I?IQXHS8oDEZen,EejaZ!JglAC6CAdF_?L1P!+.XGT]:t+Dl12FCK0/A7]d(6[
+0_@Gp$s5DfTB"Ec5Q%I?IQXP#Y^/GT_8S?%%l9GT_'PP!+(5F*Wp3Op#<0EZfF6Bl]A"Op$,p5
+^eepI?J0))j1Mj$^*]:FY@t^G_cB`!Ko5lGp%Bg!KmJH1G<hmGT_8SD0U>=ATW_/P/3;;D..I#
++F##SH]f>(!0TKlP!FGY<%iN[5*@]TG`k7R1O($f+Dl@KB4Z0-FHUKfL]D[U!KsF<s+gZ%OuR_
+0D/"'#DfTB"EdNs5P')pQI?IQmFa]EDE+sQAL]N[<G_cB`!JgbqBm=lY!KsF/OuR_0D/"'#DfT
+B"EdNs5P')pQI?IQmFa]EDL]NZ&HS9)r5*@^9+F,)HBlda%Eb&a%P&Pbi+DDsD+Dl@KF(KG9Bc
+q[DG^4"@G%G]9I?IQD+F/bDP,W;CH"U]1+EWc`Bcq\W!KsF!Blda%Eb&a%P&QQeHYFUJL]N[<I
+?IQD+F/bDOo]EEH"U]1+EWc`Bcq\W!KmJ#Blda%Eb&a%P&QQeHYFUJL]NY>I?IQXP":"a<.0p@
+P')pIL]ET2Oogeh06o:85*@]TGVP@FOu&7\OuSV6L]N[<L]NZ&P"^4c!g7[ZGqtOHOu"b916Oh
+a1O(YtGVP@XH[%9$!dHJV!KsF/GqgFY@r,^bE\r3-8:?Y#GqpLf0p5@[Gqk*VGqt0VP,WeQ0p4
+_;@r,^bE\r3-8:?Y#GVUCd0p6-qGVP$RGVY'UOo]oT0d(=CCh7$q1jtNXI?IQT1*CisP%K&d0o
+5gS15Gso!IK&GP!3_mCh7$q1jtNXI?IP_GVL=c16OFHGqgFe16OGAP"CfrP%'4JP,X6;P!5%&I
+?G)'1G<f\FCB'4@rH1%EdKHJDL#`1Ci=?W5*@^1DL#`1Ci=?W@Yb5O4aW1p4<Pah+<VdjL^90?
+Or9EBL]Lq%H"1c/DfV"dOtr1bH\MP#Ou@`O8WoWmP#Pk-H"1c/DfV"ML^9/,H]AFq+<VdL+<Vd
+L5)9Q/V32^Z3/@TDDL#`1Ci=?WH'0qG5C8+bs,o9gP"Ch#I?IQXOq*X204]*3GAL]5ATE,NE+s
+Q<DfTQ)+E2%>F-8=4E+sQ<P!5$b05tWMF!+[0E+sQAL]W_?H\_ZMP(SPjE+sQA+E2%>F-:!g!K
+sF/L]ET%E+sQ<P!3i!G^,BFOogehL]Djd88r9fG_cEa!IKV&I?K4gOu"b1Bm=kFE+sQAL]W_?O
+u"b1Bm=nGE+sQBL]W_?Ou"b.+Bot-Bm=]^@XEn2I?K4gOu"b1@<?1(+BsX%L]MI/G^5)GP,Wd]
+C6CcD1Pc$e!H;atG_cB`WI$:4P!5$bBcq.5G^3q5FGKs\4aUn!!KsEsL]N[<FE1f"AUT_@I?I-
+LP"8lA1G<]]G^(?MBm=lY!g9OG1G<]]G^1ENBm=oZ!g9OG1QlZq@<?1(HS9?$5*@]TCh7K,E0=
+[n1N4IQAT!;)P,XU;OogehE/4LW99K@>Fbg$R!Gl=bL]N[<HS9)r5*@^@+DHW4Oo]B1DN\at99
+K@>Fbg6XrfW%m"d2u%DJO<4Eb/ZiBSZeS=GR*9s,r/#Ap][AI=%-VI?ITd"Gd)ALPQ(r=D;YgF
+)Z/2@:XP;"HllC"Gm)@LQYJ\Oo]uXP,Wkm<JUd6s,r/#5&b4\H'1@SWG..gP!+/TCOLPm@ssM?
+I?I-a(6Wg'Fcpm1Fa]EEP!Ug@Bm=\AE+sQ<DfTQ)Ou%NL%[&W2:+p=!CNFH8ART+_+DG_/F)Z/
+2@:X&-!g5I)1G<H[CNFH8ART+m+DG_/F)Z/2@:XP;!g5I)1Qj/LX`nJiFD)e9Bm=lc2ManeChR
+BoB4uB0E+sQBOuA+eP&-;>L]E52P&##NG^,#EP%/HFG^(?MBm=od@u(,(Bm=odA!.U:@:O(cEc
+6)<A7KOoDfUjAF`)83FHUKfP"oIp@r#^tDfor.@rH1%EZfF7FCB'4@rH1%EfrbP9mr1(@rH1%E
+c#6(NWjQCF(KHV4aShlDes?4D..B+4?SE#@UX:eDes?4+?huP1OYEc@rH1%Ec#6(HQ[B@FCB'4
+@rH1%E\D3>H'1@S1Ktu@Bm=]G+DYP6P!+/J!I]<N!.C#1I?I0-+CoM$GAL]5ATE3^8T\NgFCT6
+*DfUjAF`)83FHUKfFCf]=@rH1%EZfF7FCB'4@rH1%Eda*MBl7EsF_#'*AU&<D+EV1>FEh51BkM
+=D"a+^(ATX(uFCf]=H!tN'B5W_5F`)83FHSeM"CZ+gFCf]=NW>5*Op$+bF,0gZ1G<?XNW>4uFE
+hnSH[V&KL]W_WF-:C'5%\\qD3ApdL]W_W06<:?Ou"b'DN[2H1QmcHH]iN7Fa]EQP&$5RI?I0MH
+ZWhDFCoH/F<G[:G]\"@H=`8"@;L%-AU&<W!0TKl06DG\+Bot1G]\:g!0U!%I?I0MP"ArB1G<ik
+FE/LGG]]*XP,4<tL]E53FEhnj@Yb&JWI'dfFEhnj5*AQ\F*)GY",Hu@LQZn1P":"J06D8WEZee
+,FED)=FHSG.P#ZUFFE3ORL]ET$H\_ZMH]h-eDhnCL!0V,X!AJ+oCia0N&X%3k"Gd)ALQZeCFcp
+m19p-VP:gn'UFB!O)AWgGJOruDS@;0V$<-`FoP"UT4P!+5?AmoLsAUT_AOruDVFE2;8AQNSVFD
+-hFOp$,p+>6Z8Ec5`)=(u2eBTc#E!g5Ht!0TO/+>63&DKJT]FE2)?P"UrsOuSV@P!5$gP&-9^F
+)c5BOo]uo<.0p006CcMFCB6#ASuUQ5*@]TFCf]=GA1T0BHVD<FE3PAP'(kfFE3ORL]N[<FCf]=
+B45b#P&-9^Ou"b5AU&<AE,Te?FCf]=G].2+F(KG9GT_*>G]\.DA9;LJWJCV=2Ne*(1N[2QFEh5
+1BkM=D"DhX]FHSe606CcMFEhbCF!,R9G]\1KAnH*qFHSG.P#QO7G]\1=Ch[O"NWjH;B4uCM4aS
+i(AU&<AE,Te?GT_*>G]\1KAnH*qFHWVFAU&<@Bk2=!P,XU#I?IQOAU&<A@;KXjDN4s?AnGjjAo
+s2!HS9JPG]\1LDf[%CAU&<@Bk2=!+EV1>FEh_9AohO*Oo^_`Ou%NL<-2\rFEh51BkM=D#]F<eE
+bT0"FHSe606CcMFEhbCF!,]MFCf]=G].2+F(KHV!Ko6eP#QO7G]\1=Ch[O"NX'<AF*),.H'1=4
+AU&<@Bk2=!+F'&]Op$+bFCf]=G]7SBL]ESo06CcMFD#$$F!,]MFCf]=GA1T0BTf?:F*)Gc@Yb&
+JWKK0&1OYEc06CcMFEqhDF!,R9G]\4LAnH*qF<G[:G][A8@qBP"Oo^@>Oo^_`Ou%2kG]\4>Ch[
+O"NWij#Dg#]T4aSi(AU&<BE,Te?FCf]=H#I;,F(KG9E+sQBOo^@>Oo^_%I?IQOAU&<B@;KXjDN
+4p2ASuU$EfrS406CcMFEqhDF!,R9G]\4LAnH*qF<GO:G^1ERAU&<*F(8d!FHWVZ!g5I)!Ko6eP
+#QO7G]\1LDf[%CAU&<BE,Tf\CNO-4FD#$$F,0g<F*)Gc$@S(;I?IQm9p.MbOq*X2061WAD..O,
+Bm>e#P%64gCG'+8/p(ZFEd;,:Ecc5;/n0$=E,Zq1AS,XoATD@'Dfp)1AWh2!3A5GbFDtYuCM@[
+!P.H"'F`V,9E+*6lBl7R3P#M~>
+% uk.co.terryburton.bwipp/renmatrix 0.0 2017071000
+%%EndData
+%%EndResource
+%%BeginResource: uk.co.terryburton.bwipp ultracode 0.0 2017071000 98628 101468
+%%BeginData: 89 ASCII Lines
+currentfile /ASCII85Decode filter cvx exec
+06:]HE+*6lBl7RH \pKT_ @s)g4 ASuU/ @: O(e DJ()6 Eckq9F
+(KH4@:O(eDJ+B\< /:R <23Kp PEa`[ 'A S#n &Df V"#0
+6M%_@rEuAATDg:@ Wc^5D f. 1:GA2 #8P1 l( DOu P+8AS u?n FE2)? OuP+
+;CG'+8/p(ZFEd;, :Ecc5 ;/n 0$= E,^u oP 'E- !06M)Q Ea `HrA7^ +D'
+Tt>:%52X=FD5Z2F -8_M1 G<3 GEa s #uA Wf6 ?1G <9WDKK E0 @<Wi+@ ;L!
+rOu"b&@r,_"ASdA /77/h n1G <]U Ec Ye 7Am oLs AWei&E +* d.AS,g i+D
+,%uF(LLjDfBf4Df 0WZY :js =E bT E(F Eqh :P! +/J!
+Ko='%<$3-Bl@m1H ]kFA @ ;L !r P!+ /T5 ^eep OuSV6
+P,4<rNWD;+NHB2` AWf3'O tDh \ P') pO Ou%N 5Ot CcrF_-^lI? ITYP%BdtOuY
+16E-,f4DKCt)Ou% NL<,Z_ tBl @ m1H] g15P "BV $EcYf=05Yc C+C\c"@rGmh
+P%'TNOu"b+L]ESo @UX:eD e*F +NWE ILNI -gJ D0'?Q5&-6E P'N4"C6AUR!
+KmI:C6CcD1QlmD3 /@Qj" -Q?@ /8]H@ P!3W :!K sFF5*C/R30 Ia,"-TX>"-P
+j29RV8N3,N_LP!3 WD5*C 2S@VV &,05? Y6O u"b#@<,jrA 7Zm#F(^:/C6
+D8R1Qk"OP#ZpnAU T_@04J@ 1Ch7K, @UX:e De* FB@ZiN#Ao9 >Zs,o/kAo9D
+\rfT&jAo;+%@;L!-4?SW,7SZ<*Ao9>`"@c-R1M1M\+?huP1G<TdB-:YlEbo<)OpR:-0564BOu"
+b+L]ESoHYFU3@<-0qDN[/0P!FGY<%h`p@<*K"@<,jrA7ZltP"UroE+*d.AS,gi+Cf(nEen%b4d
+#q^+C\c"Ch7L?"HoaIAs*:D@UX:eDe*E%BnueQ!Kp*3?BT/P04S[(EZet3@s29sF!+q#Eas#uA
+KY]C!KmJ>"HlHA99M(aBcq,G"HieK1OXU'Bcq,G!KmJH1OYEdI?IQHF(ZV1+Cf(nEftZ#Bcq,G
+!KmJH1G<JcC5;nR!Ko6eP%?:`F(ZV4F(^:/C6D8R1G<TdB5D-s+Dl14P%'S106;5DEcd$:!Ko5
+lF(955>9I471G<QYDJLt_!0T,kF(9/3>9I471G<9KGB4m2+EM%5OogehF(90P!g7\CF(]i_3+d
+ %_P!+/TFbTo*I?IQm3+d%aP!+/TFbTo+I?IQXP"ArB1G<TT@j#;lGB8pVL]`e@Ou"b&@r-<sC
+`m;!Ch7d$Ckr.U98G9bWKK&K@r-<sCkr(SD0mpU@q-WcL]E53L]WA8L^&Y@>p*]gCj'6'P"TY%
+@u)"c;JfoRL`)@jL]ETTH\_]c!I^,1P&,pXOo^_%I=!Ve@q1;sOu%NL<A.cj@j#c$@u(5MWJF;
+cBl7]@P&-9^Ou"b5@q-Wu@q-X$@q1Z&Ou"b.ATVs,@ribs+BsX'L]iMXL]q',>DNB;+c'$P%:(
+)\L]iN3L&dg$(L8.fL]rM5L5#^IL`ThE?'7""!/LZ3"+)\8P!5$b05VhKATVs,@ric,P"Uro06
+1uTF!,=U!0U!<1G<TZDIXf+L]NZ3Ou"b.@<c9)D287V99M(aD.@L#+Dlo:P"Uro05kW7Gp%3LF
+_-^lFCSf'D/!ltP%JfG@j#VsG[ln5P&bn&Deid,+D,%uF(LLjI?IQJCLML8P!FGY<.0p#Deid,
+P&Pb$@WuO*E%Z9LFE1f"De*ESDcU:_Bk1.fD.7F"NYtT1+Eh10Bk/?-H#7#/C`m/0@;0Od@VfU
+/061K8F(Jp'Ec5u]5CJ\oD.@L#L]N;pHS8lICisT4F-8_M1Lk?>F_u#;+Cf>+F_u#;L_#Y@H\_
+]cWI9q/@rH1+D/OEN+-K6CL]N[<I?IQ>DesQ5DKCUeP"L(W!KsF1P#QI?GB8p`L]`g>FCSgDWK
+K5s!0Ts$05t?1F-8_M1Qk"OP#RTeI?I,SA7K*l@rH1+D/OD;D.@L#P,XU#062,TAT8hs+EMX5E
+c`F@@q-Wi@q-X&@rd_6P'(;FGB8oKP'(bS@sa"3I?K5=!*taD062,BCi<r/>DN<7!?-<J3/@["
+Ck_s0P%oE.K3aWr062,MDeFe*)j1Mj1Pc'f!JUUnH]g@/F(&m'B9GHA99MJZF)5c-L]`G6P)#3
+FI?I,SEcZ2?De+3N!g4FW!0V2^5)93%D3>$KEcZ&8B9GHA99MJZF)5c-P!5%%Oo^:<)NniUF(&
+m'B9GHA97;/MFcpm'!.C#1I?G)'1G<VgD.@(=1G<MdEFWLA1G<6VAS,Oq+BsX&CO:j;I?K4gOu
+ %mpL]M:<056S5Ou$TdAS,Oq+DDs.De3NmF!,1Q!KsFF99OO6L]N[<M#W83HS9,s5*@^3De3Nm
+F!,3?@rGpjAof)0L]N[<P"T;'AS,Oq+DR'4EcYZ*DeC2,P"Th:E,ol-Oo^:<)j4s!G^Y`G@rGp
+jAoib.@rGpjAoib.P"Th:@;Kjp+DI!3EcZ2?De,#UI?I,S@rGpjAof))De3NmF,0g+De3NmF-:
+!g!KsFF9Th2ADe3NmF-:!g!KsF<reLQ$@rGpjAoj,!L]W_WP"UN1)j3CJWKMLSP":B/L]MCL!K
+sF/06E@@EcZ;5EKWMK96,)pAT8i1P"Ur=L&i6VC6CB/!/LYkL]N[<HS9,s5*@^BF)to4+Dr<:O
+o]TEF(K>6DBN\W!Jgc>!Kp*1!?6,'@rGpjAof)1+DR(=L]N[<P"UsSL&i6VC6GQZ!JUUoP%p/)
+I?I-LP"9JH!H'#qOo]om3-'(]AT<ksL&i66F)to4L]rV7P)#2nP,X0:)j4s!G^Y`G04eX;F!,L
+EF(K>6DBN_X9Th1bA7K+l+BsL!!6Cpg!!(,VKE)"o`In3kc_6!l!7.^!!!(CQKE)#"4+mS6d;=
+O:!7@'b!!(bVKE)#,@tXg^g\HL&!8J`N!!(e)KE)#-_1Vdgh"-1!!6B88!!(*1KE)"o:kSfKae
+4:e!7.Ho!!(CTKE)#"+G9^pd;Xa=!7?IQ!!(E6KE)#,8;$sCgK]C3!8IF)!!(e"KE)#-`.S*jg
+t5nq1G<9K@r*8lKE)#@Vh>$Mn$.NG!:X3G!!)M6KE)#A^OuRenC*$j!;;n8!!)_rKE)#G\V'q_
+pa_!t!;K-=!!)eTKE)#OCP2ZfreZ:.!<5QB!!*(,L3e&uH@^ft.u&CBL3nu9H_Z5o!/Wdj!!%j
+OKE)"/=bHbTMBRWQ!/iL`!!%pEKE)"3,D6$sNAlLj!0.#3!!&%c?'6usFD5Q&F!+\A1J``]:kg
+c7L,3@p1M__$D2'mhL,@).1sC\2gP.QBL,@hC2#2k_qh?s+L,CQ;2(s\A0SVGLL,D>Q2+30V;h
+d/0L,E(f4!02=+GMs4L-%JO4$A<[d=sa3L-*n>484Ikq1_!/L-,Kk49L=#"bo/<L-5Kj4TL4"%
+u*4\L-66*4X5\E-&+Q2L-Got57!!.)2:?qL-Hu=5IlM5]7rP_L-ORM5N.>]jG#n`L-P!Y5OF1j
+JVHFBL-UEH5a-pfQ\IbmL-W"u5dQ21[>'!+L3cgRH?Y*iI"lruL3eQ.HPqQb)hr\ZL3kG*HS:,
+#0SXpGL3lRJHVK6AI>3)uL3nu9H]s22P_OO[L3obOH`2St!/Wdj!!%j?KE)"/5_K+;M,/d)!/X
+R+!!%jTKE)"/=bHbTM-GW5!/Y!7!!%lIKE)"/oRm2EMALpG!/_bL!!%m"KE)"0-%l6uM]IHN!/
+hqP!!%p"KE)"108'<*M_g"d!/i[e!!%pEKE)"17>(X@Mb&L$!0&4V!!&!+KE)"3."hR#NAlLj!
+0'!l!!&!@KE)"36\GF>NCAL#!0,`d!!&#6KE)"3s+C@PNWb"8!0.A=!!&#gKE)"4TnECGNh_7-
+!03k.!!&%cKE)"4[tF_]Njs`B!05H[!!&&.KE)"4eV!o&aDlk5!6B57!!()^KE)"nQ\5>=aI.\
+]!6C[`!!(*6KE)"nUP&UIaJFOi!6I6S!!(,'KE)"o98!9Fa\[Wj!6Jr.!!(,VKE)"oSV-tCae+
+4d!6Lme!!(-EKE)"oZ\/;Yag?^$!6N-3!!(-[KE)"oaFjNnc\mGV!7-^Z!!(?,KE)"uT7d1Ec_
+6!l!7.Ho!!(?EKE)"uX+UHQc`Mj#!7;++!!(CTKE)#")h\1kd3+)B!7<f[!!(D.KE)#"D1hlhd
+;O[<!7>b=!!(DrKE)#"K7j4)d=d/Q!7@!`!!(E3KE)#"R"PG>gI$Vo!8C"s!!(bEKE)#,=+gPR
+gKB10!8Cb3!!(b^KE)#,@tXg^gLZ$<!8I=&!!(dNKE)#,r.G%Mg`M1L!8J`N!!(e"KE)#-.>.[
+$gae$X!8K/Z!!(fjKE)#-`.S*jgs^oV!8Q4[!!(gEKE)#-o7R)Dmt$,l!:PPn!!)J@KE)#@Vh>
+$Mn#:s?!:R"B!!)JmKE)#@Z\/;Yn$RfK!:WR5!!)L]KE)#A9S<BGn6:PG!:X?K!!)LrKE)#AH%
+Z.tn9]fg!:YDi!!)MlKE)#A^OuRenABnZ!:\Hj!!)N=KE)#GRtLbAp7I!<!;<(=!!)_rKE)#GZ
+ %N)Wp9]JQ!;<sV!!)`)KE)#G]n?@cp_e_b!;ILd!!)d6KE)#I.tdm&pb.:#!;J7$!!)dcKE)#
+I98!9Fpe?DA!;Ltq!!)eDKE)#IO+[K5plg@2!;N=B!!)ejKE)#OCP2ZfrbmGi!<-qj!!*"JKE)
+#OJV4"'re,q)!<.h.!!*"VKE)#ONJ%93rum$q!<49s!!*$EKE)#P7t^jBs%.kD!<5`G!!*$rKE
+)#P;hP,Ns&F^P!<>iI!!*'qKE)#Q?\AC[!+UZ^!<@1o!!*(BKE)#-on3;FaZEdk1G<ceGB4mID
+g-8Y#*NeY!KmJH1G<6VCisT4F!+t2CisT4F,1$`!Ko5lE+sQ<+Bot/Dg-7F@rH1+D/OEXCjV!<
+I?K4gOu"b2D0C7K@rH1+D/OEXCm"gIOq*X2L]E53@rH1+D/OEN!KsF/056S5Ou%moL^%m<GB8Q
+@P,Wd]C6CcD1MMXKP"L(?Bm=\ABcq.5EG]kABnuhRC5<1ZCm'$kP#Qjm88r9fF!,1Q!-)k!L^B
+5hE+sQ<+DDs=Dg-8Y!KsF%D0C^AP'DD<8;I;&!HN+&F,0m\WI$:4P!5$bL]`GE@rH1+D/OEN!K
+sF/05?Y6Ou%&kG]P!B+DDs<D0C^9BnuhRC6GQP$'K+fG^Y`GE+sQ<L]D-3EG]lT$'KOPBm=]T!
+GNZrD0C^9BnuhRC6GQP$'K+fG]7AAF,0m3+E;7AL]ET_E+sQ<L]_?6EG]lT$'KOPBm=]T"DJuu
+D0C^8P'Cq[G]P!;DesQ5DKCU7P,W.<EG]lT$'KO]P"76?+EDCEF,0m\;MYL>WKK&A+CntlFWb4
+)A!0K@$A\kKV33NZLbP!kI?I0X!+]SLC`m7uA!0K@$A\kKV33NZLbP!kI?I0-HQ[9AG]SZBBcq
+D4G)-6Vs,r/#GV<bRBnueQ!Ko6eP"@<KBl%@%AT8hs+EMX5Ec`F@@q-Wm@s<!W!g7\J@q15o)e
+!5d+EM%5OogehA7Kh)OogehE+*9uH\MP@I?K5&@q-WeOu"b9L]rqt06r?SOu%2oCh7[!EI/gMB
+l%@%P!5%%L^JqAP,4<qHZ3\DF!,]MGp%*DG)-6Vs,r.n0TrDuGV==bH&)Ka!Ko6eP"BpAEc6/C
+L]N[<P&5P!Gp%Bg!KmJH1OXU'GT_6e!KmJH1G=$0!Ko6XBm=\AGT_8SEG]l^98NV2D0mp\+F&\
+COo^_%I?IQXP#Zpn8N]*gEb0,A061WAD..O,Bm;:MBm=\AE+sQ<05tWMGT^L7CisT4F"_KHG^1
+EPDg-7UBOtmjBQPA;Dg-8Y8<PkaGA1T0BHUf'CisT4F,3AM2D8QYCi=?2@;m>O4GWut#V[qd0J
+G170Sg$q#V[qd0JG1M7Yh)*#Y%9;0JG170Sfgk#V[r%7PHMM0Sfmm#V[qd0LeMc0Sfpn#WG4,0
+LeMc0KqZRDfBe@DfBf4Df0V=5!C*"Df0Z-Eaa0TE%`kbASu?nFE2)?P#RT)I?G)'1G<leFE1f"
+De*FB30If*F_`U>D_?-CEcQG7F`MSBDD#CBBlJ#6A7]@eDImj"F)Q2A@qCgGOuY1:ATVm"@r#d
+rB9KiQP'(hWFDtYuCM@[!I?IP~>
+% uk.co.terryburton.bwipp/ultracode 0.0 2017071000
+%%EndData
+%%EndResource
+%%EndProlog
+%%Page: 1 1
+gsave
+1 1 translate
+4 4 scale
+0 0 moveto
+<4e69636520636f6c6f75727321>
+<65636c6576656c3d454333>
+/ultracode /uk.co.terryburton.bwipp findresource exec
+grestore
+showpage
+%%Trailer
+%%EOF
diff --git a/graphics/pstricks/contrib/pst-barcode/doc/pst-barcode-doc.ltx b/graphics/pstricks/contrib/pst-barcode/doc/pst-barcode-doc.ltx
index fc72994578..09146c2824 100644
--- a/graphics/pstricks/contrib/pst-barcode/doc/pst-barcode-doc.ltx
+++ b/graphics/pstricks/contrib/pst-barcode/doc/pst-barcode-doc.ltx
@@ -1,12 +1,17 @@
-%% $Id: pst-barcode-doc.ltx 445 2017-04-19 11:13:52Z herbert $
-\documentclass[11pt,english,BCOR=10mm,DIV=14,bibliography=totoc,parskip=false,headings=small,
- headinclude=false,footinclude=false,twoside]{pst-doc}
-\usepackage[utf8]{inputenc}
+%% $Id: pst-barcode-doc.ltx 588 2022-08-23 16:49:51Z herbert $
+\RequirePackage{pdfmanagement-testphase}
+\DeclareDocumentMetadata{}
+
+\documentclass[11pt,english,bibliography=totoc,parskip=false,headings=small,
+ headinclude=false,footinclude=false,twoside,usegeometry]{pst-doc}
\usepackage{pst-barcode,blindtext,multicol}
\usepackage{biblatex}
+\makeatletter
+\def\blx@err@patch#1{}
+\makeatother
\addbibresource{\jobname.bib}
-\geometry{inner=2cm,outer=4cm,marginparwidth=3cm,marginparsep=2mm}
+\geometry{inner=2cm,outer=3cm,marginparwidth=2.5cm,marginparsep=2mm}
\let\pstBarcodeFV\fileversion
\lstset{preset=\centering,pos=l,wide=false,vsep=5mm,language=PSTricks,%width=0.5\linewidth,
@@ -25,7 +30,7 @@
\psbarcode{Herbert Voss Freie Universitaet Berlin}{rows=52 columns=52}{datamatrix}
\end{pspicture}}
-\begin{filecontents*}{demo.tex}
+\begin{filecontents*}[force]{demo.tex}
\documentclass{article}
\usepackage{pst-barcode,fancyvrb}
\begin{document}
@@ -46,10 +51,10 @@
\title{\texttt{pst-barcode}}
\subtitle{A PSTricks package for drawing barcodes; v.\pstBarcodeFV}
-\author{Terry Burton \\Herbert Vo\ss}
+\author{Terry Burton \\Herbert Voß}
%\docauthor{Herbert Vo\ss}
\date{\today}
-\maketitle
+\settitle
\tableofcontents
@@ -161,7 +166,6 @@ The contents of the external file \texttt{demo.tex}:
\VerbatimInput{demo.tex}
-
\newpage
\subsection{Examples for the PostScript options}
@@ -303,7 +307,7 @@ bar
\end{compactitem}
\endgroup
-\clearpage
+%\clearpage
@@ -316,8 +320,9 @@ bar
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%\clearpage
%\newgeometry{inner=2cm,outer=4cm,marginparwidth=3cm,marginparsep=2mm}
-
+%\textwidth=\dimexpr\textwidth-1cm\relax
\section{QR code in the margin}
The marginnotes are placed with the help of the macro of the same name \Lcs{marginnote},
diff --git a/graphics/pstricks/contrib/pst-barcode/doc/pst-barcode-doc.pdf b/graphics/pstricks/contrib/pst-barcode/doc/pst-barcode-doc.pdf
index 65587e9135..7762c1e4f5 100644
--- a/graphics/pstricks/contrib/pst-barcode/doc/pst-barcode-doc.pdf
+++ b/graphics/pstricks/contrib/pst-barcode/doc/pst-barcode-doc.pdf
Binary files differ
diff --git a/graphics/pstricks/contrib/pst-barcode/doc/pst-barcode-doc.tex b/graphics/pstricks/contrib/pst-barcode/doc/pst-barcode-doc.tex
index 8388528281..6c9d4dd877 100644
--- a/graphics/pstricks/contrib/pst-barcode/doc/pst-barcode-doc.tex
+++ b/graphics/pstricks/contrib/pst-barcode/doc/pst-barcode-doc.tex
@@ -1,9 +1,11 @@
-%% $Id: pst-barcode-doc.tex 445 2017-04-19 11:13:52Z herbert $
-\section{Symbology Reference}\label{symbology-reference}
+\hypertarget{symbology-reference}{%
+\section{Symbology Reference}\label{symbology-reference}}
-\subsection{Point of Sale}\label{point-of-sale}
+\hypertarget{point-of-sale}{%
+\subsection{Point of Sale}\label{point-of-sale}}
-\hypertarget{ean-13}{\subsubsection{EAN-13}\label{ean-13}}
+\hypertarget{ean-13}{%
+\subsubsection{EAN-13}\label{ean-13}}
\textbf{EAN-13} is an extension of the \protect\hyperlink{upc-a}{UPC-A}
barcode symbology that usually carries a GTIN-13. It was designed by the
@@ -11,7 +13,8 @@ International Article Numbering Association in 1976 for identification
of retail goods at point of sale outside of the US.
Also known as: EAN, UCC-13, European Article Number, International
-Article Number, JAN, JAN-13.
+Article Number, JAN, JAN-13, IAN, WPC, SAAN, UCCET, ABAC, BCCI, ICA,
+MANA, KANC, ANA, ANC.
Variants:
@@ -47,7 +50,8 @@ Variants:
Standards: ISO/IEC 15420, BS EN 797, GS1 General Specifications.
-\paragraph{Data and Options}\label{data-and-options}
+\hypertarget{data-and-options}{%
+\paragraph{Data and Options}\label{data-and-options}}
\begin{itemize}
\tightlist
@@ -58,8 +62,8 @@ Standards: ISO/IEC 15420, BS EN 797, GS1 General Specifications.
add-on is required.
\item
If twelve digits of primary data are supplied then the check digit is
- calculated automatically. Otherwise the provided check digit must be
- correct.
+ calculated automatically. Otherwise the provided check digit will be
+ verified.
\item
The \textbf{includetext} option should normally be supplied.
\item
@@ -67,7 +71,8 @@ Standards: ISO/IEC 15420, BS EN 797, GS1 General Specifications.
guard marks.
\end{itemize}
-\paragraph{Examples}\label{examples}
+\hypertarget{examples}{%
+\paragraph{Examples}\label{examples}}
Identical symbols, input provided with and without a check digit:
@@ -95,7 +100,8 @@ Encoder: ean13
\includegraphics{images/ean13-2.eps}
-\hypertarget{ean-8}{\subsubsection{EAN-8}\label{ean-8}}
+\hypertarget{ean-8}{%
+\subsubsection{EAN-8}\label{ean-8}}
\textbf{EAN-8} is derived from the \protect\hyperlink{ean-13}{EAN-13}
barcode symbology and is designed for small packaging. It usually
@@ -127,7 +133,8 @@ Variants:
Standards: ISO/IEC 15420, BS EN 797, GS1 General Specifications.
-\paragraph{Data and Options}\label{data-and-options-1}
+\hypertarget{data-and-options-1}{%
+\paragraph{Data and Options}\label{data-and-options-1}}
\begin{itemize}
\tightlist
@@ -138,16 +145,17 @@ Standards: ISO/IEC 15420, BS EN 797, GS1 General Specifications.
add-on is required.
\item
If seven digits of primary data are supplied then the check digit is
- calculated automatically. Otherwise the provided check digit must be
- correct.
+ calculated automatically. Otherwise the provided check digit will be
+ verified.
\item
The \textbf{includetext} option should normally be supplied.
\item
- The \textbf{guardwhitespace} option enables the display of white space
+ The \textbf{guardwhitespace} option enables the display of whitespace
guard marks.
\end{itemize}
-\paragraph{Examples}\label{examples-1}
+\hypertarget{examples-1}{%
+\paragraph{Examples}\label{examples-1}}
Identical symbols, input provided with and without a check digit:
@@ -165,7 +173,7 @@ Encoder: ean8
\includegraphics{images/ean8-1.eps}
-Truncated with white space guards:
+Truncated with whitespace guards:
\begin{verbatim}
Data: 01335583
@@ -175,7 +183,8 @@ Encoder: ean8
\includegraphics{images/ean8-2.eps}
-\hypertarget{upc-a}{\subsubsection{UPC-A}\label{upc-a}}
+\hypertarget{upc-a}{%
+\subsubsection{UPC-A}\label{upc-a}}
The \textbf{UPC-A} barcode symbology is used for identification of
retail goods at point of sale inside of the US. It usually carries a
@@ -209,7 +218,8 @@ Variants:
Standards: ISO/IEC 15420, BS EN 797, GS1 General Specifications.
-\paragraph{Data and Options}\label{data-and-options-2}
+\hypertarget{data-and-options-2}{%
+\paragraph{Data and Options}\label{data-and-options-2}}
\begin{itemize}
\tightlist
@@ -224,13 +234,14 @@ Standards: ISO/IEC 15420, BS EN 797, GS1 General Specifications.
symbol.
\item
If eleven digits of primary data are supplied then the check digit is
- calculated automatically. Otherwise the provided check digit must be
- correct.
+ calculated automatically. Otherwise the provided check digit will be
+ verified.
\item
The \textbf{includetext} option should normally be supplied.
\end{itemize}
-\paragraph{Examples}\label{examples-2}
+\hypertarget{examples-2}{%
+\paragraph{Examples}\label{examples-2}}
Identical symbols, input provided with and without a check digit:
@@ -258,7 +269,8 @@ Encoder: upca
\includegraphics{images/upca-2.eps}
-\hypertarget{upc-e}{\subsubsection{UPC-E}\label{upc-e}}
+\hypertarget{upc-e}{%
+\subsubsection{UPC-E}\label{upc-e}}
\textbf{UPC-E} is a compacted form of the
\protect\hyperlink{upc-a}{UPC-A} barcode symbology that usually carries
@@ -289,7 +301,8 @@ Variants:
Standards: ISO/IEC 15420, BS EN 797, GS1 General Specifications.
-\paragraph{Data and Options}\label{data-and-options-3}
+\hypertarget{data-and-options-3}{%
+\paragraph{Data and Options}\label{data-and-options-3}}
\begin{itemize}
\tightlist
@@ -304,13 +317,14 @@ Standards: ISO/IEC 15420, BS EN 797, GS1 General Specifications.
symbol, provided that the input can be zero suppressed.
\item
If seven digits of primary data are supplied then the check digit is
- calculated automatically. Otherwise the provided check digit must be
- correct.
+ calculated automatically. Otherwise the provided check digit will be
+ verified.
\item
The \textbf{includetext} option should normally be supplied.
\end{itemize}
-\paragraph{Examples}\label{examples-3}
+\hypertarget{examples-3}{%
+\paragraph{Examples}\label{examples-3}}
Identical symbols, input provided with and without a check digit:
@@ -338,7 +352,8 @@ Encoder: upce
\includegraphics{images/upce-2.eps}
-\hypertarget{isbn}{\subsubsection{ISBN}\label{isbn}}
+\hypertarget{isbn}{%
+\subsubsection{ISBN}\label{isbn}}
An \textbf{ISBN} barcode is a variant of
\protect\hyperlink{ean-13}{EAN-13} that is used to identify books.
@@ -358,7 +373,8 @@ Variants:
Standards: ISO 2108, ISO/IEC 15420, BS EN 797, GS1 General
Specifications.
-\paragraph{Data and Options}\label{data-and-options-4}
+\hypertarget{data-and-options-4}{%
+\paragraph{Data and Options}\label{data-and-options-4}}
\begin{itemize}
\tightlist
@@ -371,11 +387,7 @@ Specifications.
be automatically upgraded to the ISBN-13 format.
\item
If the last digit of the primary data is not given then the ISBN check
- digit is calculated automatically.
-\item
- The \textbf{legacy} option prevents ISBN-10 input from being upgraded
- to ISBN-13 and will result in a symbol that is obsolete and should not
- be used at point of sale.
+ digit is calculated automatically, otherwise it will be verified.
\item
The primary data can optionally be followed by a space then two or
five digits if an \protect\hyperlink{ean-2}{EAN-2} or
@@ -383,7 +395,7 @@ Specifications.
\item
The \textbf{includetext} option should normally be supplied.
\item
- The \textbf{guardwhitespace} option enables the display of white space
+ The \textbf{guardwhitespace} option enables the display of whitespace
guard marks.
\item
The following options are also relevant to this barcode symbology:
@@ -391,7 +403,7 @@ Specifications.
\begin{itemize}
\tightlist
\item
- \textbf{isbntextfont}: Font name for text above symbol
+ \textbf{isbntextfont}: PostScript font name for text above symbol
\item
\textbf{isbntextsize}: Font size for the text above symbol, in
points
@@ -401,9 +413,14 @@ Specifications.
\item
\textbf{isbntextyoffset}: Vertical position of ISBN text, in points
\end{itemize}
+\item
+ \emph{Deprecated.} The \textbf{legacy} option prevents ISBN-10 input
+ from being upgraded to ISBN-13 and will result in a symbol that is
+ obsolete and should not be used at point of sale.
\end{itemize}
-\paragraph{Example ISBN}\label{example-isbn}
+\hypertarget{example-isbn}{%
+\paragraph{Example ISBN}\label{example-isbn}}
Identical symbols, input provided with and without an ISBN check digit:
@@ -448,7 +465,8 @@ Encoder: isbn
\includegraphics{images/isbn-3.eps}
-\paragraph{Example ISBN-10}\label{example-isbn-10}
+\hypertarget{example-isbn-10}{%
+\paragraph{Example ISBN-10}\label{example-isbn-10}}
Note that ISBN-10 is legacy format not for use at P.O.S.
@@ -468,7 +486,8 @@ Encoder: isbn
\includegraphics{images/isbn-4.eps}
-\hypertarget{ismn}{\subsubsection{ISMN}\label{ismn}}
+\hypertarget{ismn}{%
+\subsubsection{ISMN}\label{ismn}}
An \textbf{ISMN} barcode is a variant of
\protect\hyperlink{ean-13}{EAN-13} with a prefix \emph{979} that is used
@@ -487,7 +506,8 @@ Variants:
Standards: ISO 10957, ISO/IEC 15420, BS EN 797, GS1 General
Specifications.
-\paragraph{Data and Options}\label{data-and-options-5}
+\hypertarget{data-and-options-5}{%
+\paragraph{Data and Options}\label{data-and-options-5}}
\begin{itemize}
\tightlist
@@ -499,12 +519,8 @@ Specifications.
then eight or nine digits separated appropriately by dash characters
\emph{-}. This will be automatically upgraded to the ISMN-13 format.
\item
- The \textbf{legacy} option prevents ISMN-10 input from being upgraded
- to ISMN-13 and will result in a symbol that is obsolete and should not
- be used at point of sale.
-\item
If the last digit of the primary data is not given then the ISMN check
- digit is calculated automatically.
+ digit is calculated automatically, otherwise it will be verified.
\item
The primary data can optionally be followed by a space then two or
five digits if an \protect\hyperlink{ean-2}{EAN-2} or
@@ -512,7 +528,7 @@ Specifications.
\item
The \textbf{includetext} option should normally be supplied.
\item
- The \textbf{guardwhitespace} option enables the display of white space
+ The \textbf{guardwhitespace} option enables the display of whitespace
guard marks.
\item
The following options are also relevant to this barcode symbology:
@@ -520,7 +536,7 @@ Specifications.
\begin{itemize}
\tightlist
\item
- \textbf{ismntextfont}: Font name for text above symbol
+ \textbf{ismntextfont}: PostScript font name for text above symbol
\item
\textbf{ismntextsize}: Font size for the text above symbol, in
points
@@ -530,9 +546,14 @@ Specifications.
\item
\textbf{ismntextyoffset}: Vertical position of ISMN text, in points
\end{itemize}
+\item
+ \emph{Deprecated.} The \textbf{legacy} option prevents ISMN-10 input
+ from being upgraded to ISMN-13 and will result in a symbol that is
+ obsolete and should not be used at point of sale.
\end{itemize}
-\paragraph{Example ISMN}\label{example-ismn}
+\hypertarget{example-ismn}{%
+\paragraph{Example ISMN}\label{example-ismn}}
Identical symbols, input provided with and without an ISMN check digit:
@@ -567,7 +588,8 @@ Encoder: ismn
\includegraphics{images/ismn-2.eps}
-\paragraph{Example ISMN-10}\label{example-ismn-10}
+\hypertarget{example-ismn-10}{%
+\paragraph{Example ISMN-10}\label{example-ismn-10}}
Note that ISMN-10 is a legacy format not for use at P.O.S.
@@ -587,7 +609,8 @@ Encoder: ismn
\includegraphics{images/ismn-3.eps}
-\hypertarget{issn}{\subsubsection{ISSN}\label{issn}}
+\hypertarget{issn}{%
+\subsubsection{ISSN}\label{issn}}
An \textbf{ISSN} barcode is an \protect\hyperlink{ean-13}{EAN-13} with
prefix \emph{977} used to identify periodicals.
@@ -597,7 +620,8 @@ Also known as: International Standard Serial Number.
Standards: ISO 3297, ISO/IEC 15420, BS EN 797, GS1 General
Specifications.
-\paragraph{Data and Options}\label{data-and-options-6}
+\hypertarget{data-and-options-6}{%
+\paragraph{Data and Options}\label{data-and-options-6}}
\begin{itemize}
\tightlist
@@ -609,11 +633,11 @@ Specifications.
\protect\hyperlink{ean-5}{five-digit add-on} is required.
\item
If the last digit of the ISSN data is not given then the ISSN check
- digit is calculated automatically.
+ digit is calculated automatically, otherwise it will be verified.
\item
The \textbf{includetext} option should normally be supplied.
\item
- The \textbf{guardwhitespace} option enables the display of white space
+ The \textbf{guardwhitespace} option enables the display of whitespace
guard marks.
\item
The following options are also relevant to this barcode symbology:
@@ -621,7 +645,7 @@ Specifications.
\begin{itemize}
\tightlist
\item
- \textbf{issntextfont}: Font name for text above symbol
+ \textbf{issntextfont}: PostScript font name for text above symbol
\item
\textbf{issntextsize}: Font size for the text above symbol, in
points
@@ -637,7 +661,8 @@ A sequence variant is a two-digit number that usually starts at zero and
is incremented whenever the recommended retail price is amended, where
applicable.
-\paragraph{Example}\label{example}
+\hypertarget{example}{%
+\paragraph{Example}\label{example}}
Identical symbols, input provided with and without an ISSN check digit
and having sequence number \emph{00}:
@@ -674,9 +699,11 @@ Encoder: issn
\includegraphics{images/issn-2.eps}
-\subsection{Two-Dimensional}\label{two-dimensional}
+\hypertarget{two-dimensional}{%
+\subsection{Two-Dimensional}\label{two-dimensional}}
-\hypertarget{aztec-code}{\subsubsection{Aztec Code}\label{aztec-code}}
+\hypertarget{aztec-code}{%
+\subsubsection{Aztec Code}\label{aztec-code}}
\textbf{Aztec Code} is a 2D matrix-style barcode symbology. It can
encode full 256-character extended-ASCII.
@@ -692,17 +719,32 @@ Variants:
Standards: ISO/IEC 24778, ANSI/AIM BC13 - ISS Aztec Code.
-\paragraph{Data and Options}\label{data-and-options-7}
+\hypertarget{data-and-options-7}{%
+\paragraph{Data and Options}\label{data-and-options-7}}
\begin{itemize}
\tightlist
\item
- The data field can contain any extended ASCII data.
+ The data field can contain any extended ASCII data. The default
+ interpretation of data by readers is in accordance with ISO/IEC
+ 8859-1. When supported by the receiver characters from other code
+ pages can be encoded using Extended Channel Interpretation (ECI).
\item
When the \textbf{parse} option is specified, any instances of
\texttt{\^{}NNN} in the data field are replaced with their equivalent
ASCII value, useful for specifying unprintable characters.
\item
+ When the \textbf{parsefnc} option is specified, non-data function
+ characters can be specified by escape sequences:
+
+ \begin{itemize}
+ \tightlist
+ \item
+ \texttt{\^{}FNC1}: FNC1
+ \item
+ \texttt{\^{}ECI000000} to \texttt{\^{}ECI999999}: ECI indicators
+ \end{itemize}
+\item
The \textbf{eclevel} option is used to specify the percentage of error
correction to be applied when expanding the data, by default
\texttt{23}.
@@ -721,20 +763,21 @@ Standards: ISO/IEC 24778, ANSI/AIM BC13 - ISS Aztec Code.
default the encoder will choose the most appropriate format to create
a symbol of minimal size.
\item
- \emph{Deprecated: Use \protect\hyperlink{aztec-runes}{Aztec Runes}
- instead. The \textbf{format} option can also be used to create Aztec
- Code ``runes'', using \texttt{format=rune}. In this case the rune
- symbol number should be given in the data field.}
-\item
The \textbf{readerinit} option denotes that the symbol is used for
programming the barcode reader.
\item
The \textbf{raw} option denotes that the data field is providing the
input as a pre-encoded bitstream suitable for direct low-level
encoding.
+\item
+ \emph{Deprecated: Use \protect\hyperlink{aztec-runes}{Aztec Runes}
+ instead.} The \textbf{format} option can also be used to create Aztec
+ Code "runes", using \texttt{format=rune}. In this case the rune symbol
+ number should be given in the data field.
\end{itemize}
-\paragraph{Examples}\label{examples-4}
+\hypertarget{examples-4}{%
+\paragraph{Examples}\label{examples-4}}
\begin{verbatim}
Data: This is Aztec Code
@@ -776,8 +819,8 @@ Encoder: azteccode
\includegraphics{images/aztec-4.eps}
-\hypertarget{aztec-runes}{\subsubsection{Aztec
-Runes}\label{aztec-runes}}
+\hypertarget{aztec-runes}{%
+\subsubsection{Aztec Runes}\label{aztec-runes}}
\textbf{Aztec Runes} are a set of small barcode symbols that are used
for special applications.
@@ -789,7 +832,8 @@ symbology that can encode full 256 character extended-ASCII.
Standards: ISO/IEC 24778, ANSI/AIM BC13 - ISS Aztec Code.
-\paragraph{Data and Options}\label{data-and-options-8}
+\hypertarget{data-and-options-8}{%
+\paragraph{Data and Options}\label{data-and-options-8}}
\begin{itemize}
\tightlist
@@ -797,7 +841,8 @@ Standards: ISO/IEC 24778, ANSI/AIM BC13 - ISS Aztec Code.
The data field contains the rune number \texttt{0} to \texttt{255}.
\end{itemize}
-\paragraph{Examples}\label{examples-5}
+\hypertarget{examples-5}{%
+\paragraph{Examples}\label{examples-5}}
\begin{verbatim}
Data: 25
@@ -807,85 +852,137 @@ Encoder: aztecrune
\includegraphics{images/aztec-3.eps}
-\hypertarget{data-matrix}{\subsubsection{Data
-Matrix}\label{data-matrix}}
+\hypertarget{data-matrix}{%
+\subsubsection{Data Matrix}\label{data-matrix}}
The \textbf{Data Matrix} symbology is 2D matrix-style barcode that can
encode full 256 character extended-ASCII.
-Also known as: Data Matrix ECC 200.
+Also known as: Data Matrix ECC 200, DataMatrix.
Variants:
\begin{itemize}
\tightlist
\item
+ \protect\hyperlink{data-matrix-rectangular}{Data Matrix Rectangular}
+ is a variant of Data Matrix that uses rectangular symbols.
+\item
+ \protect\hyperlink{data-matrix-rectangular-extension}{Data Matrix
+ Rectangular Extension} is a variant of Data Matrix Rectangular that
+ provides a greater range of symbol dimensions.
+\item
\protect\hyperlink{gs1-datamatrix}{GS1 DataMatrix} is a variant of
Data Matrix that should be used when encoding data that is in
\protect\hyperlink{gs1-application-identifier-standard-format}{GS1
Application Identifier standard format}.
\item
+ \protect\hyperlink{gs1-digital-link-data-matrix}{GS1 Digital Link Data
+ Matrix} is a variant of Data Matrix that should be used when encoding
+ a GS1 Digital Link URI.
+\item
\protect\hyperlink{hibc-symbols}{HIBC Data Matrix} is a variant of
Data Matrix that should be used when encoding HIBC formatted data.
+\item
+ \protect\hyperlink{mailmark}{Royal Mail Mailmark} is a variant of Data
+ Matrix that is used by the Royal Mail postal service on letters and
+ other small mailpieces.
\end{itemize}
Standards: ISO/IEC 16022, ANSI/AIM BC11 - ISS Data Matrix.
-\paragraph{Data and Options}\label{data-and-options-9}
+\hypertarget{data-and-options-9}{%
+\paragraph{Data and Options}\label{data-and-options-9}}
\begin{itemize}
\tightlist
\item
- The data field can contain any extended ASCII data.
+ The data field can contain any extended ASCII data. The default
+ interpretation of data by readers is in accordance with ISO/IEC
+ 8859-1. When supported by the receiver characters from other code
+ pages can be encoded using Extended Channel Interpretation (ECI).
\item
When the \textbf{parse} option is specified, any instances of
\texttt{\^{}NNN} in the data field are replaced with their equivalent
ASCII value. This is useful for specifying unprintable characters.
\item
When the \textbf{parsefnc} option is specified, non-data function
- characters can be specified by \texttt{\^{}FNC1}, \texttt{\^{}PROG},
- \texttt{\^{}MAC5}, \texttt{\^{}MAC6}.
+ characters can be specified by escape sequences:
+
+ \begin{itemize}
+ \tightlist
+ \item
+ \texttt{\^{}FNC1}: FNC1. \emph{Recommendation: Use
+ \protect\hyperlink{gs1-datamatrix}{GS1 DataMatrix} for encoding GS1
+ AI syntax data.}
+ \item
+ \texttt{\^{}PROG}: PROG - Reader programming
+ \item
+ \texttt{\^{}ECI000000} to \texttt{\^{}ECI999999}: ECI indicators
+ \end{itemize}
\item
- The \textbf{format} option is used to specify the shape of the symbol,
- either \texttt{square} (default) or \texttt{rectangle}.
+ Whenever the data field contains suitable input, the encoder will
+ compress ISO/IEC 15434 structured data (internally using the 05 Macro
+ and 06 Macro codewords.)
\item
- The \textbf{dmre} option enable Data Matrix Rectangular Extension with
- increases the number of rectangular symbol sizes available.
+ When the \textbf{dotty} option is specified the modules are rendered
+ as dots rather than squares. The dot radius can be adjusted using the
+ \textbf{inkspread} option.
\item
The \textbf{columns} and \textbf{rows} options are used to specify the
size of the symbol.
\item
The \textbf{version} option can also be used to specify the symbol
- size, as \texttt{version=RxC}. Valid options are:
+ size, as \texttt{version=RxC}. Valid options are \emph{10x10},
+ \emph{12x12}, \emph{14x14}, \emph{16x16}, \emph{18x18}, \emph{20x20},
+ \emph{22x22}, \emph{24x24}, \emph{26x26}, \emph{32x32}, \emph{36x36},
+ \emph{40x40}, \emph{44x44}, \emph{48x48}, \emph{52x52}, \emph{64x64},
+ \emph{72x72}, \emph{80x80}, \emph{88x88}, \emph{96x96},
+ \emph{104x104}, \emph{120x120}, \emph{132x132}, \emph{144x144}
+\item
+ If \textbf{columns}, \textbf{rows} and \textbf{version} are
+ unspecified the encoder will default to creating a symbol of the
+ specified \textbf{format} that is the minimum size to represent the
+ given data.
+\item
+ The \textbf{raw} option denotes that the data field is providing the
+ input as pre-encoded codewords in \texttt{\^{}NNN} format, suitable
+ for direct low-level encoding.
+\item
+ \emph{Deprecated}: The \textbf{format} option is used to specify the
+ shape of the symbol, either:
\begin{itemize}
\tightlist
\item
- With \texttt{format=square}: \emph{10x10}, \emph{12x12},
- \emph{14x14}, \emph{16x16}, \emph{18x18}, \emph{20x20},
- \emph{22x22}, \emph{24x24}, \emph{26x26}, \emph{32x32},
- \emph{36x36}, \emph{40x40}, \emph{44x44}, \emph{48x48},
- \emph{52x52}, \emph{64x64}, \emph{72x72}, \emph{80x80},
- \emph{88x88}, \emph{96x96}, \emph{104x104}, \emph{120x120},
- \emph{132x132}, \emph{144x144}
- \item
- With \texttt{format=rectangle}: \emph{8x18}, \emph{8x32},
- \emph{12x26}, \emph{12x36}, \emph{16x36}, \emph{16x48}
+ \texttt{square} (default)
\item
- With \texttt{format=rectangle} and \texttt{dmre}: \emph{8x18},
- \emph{8x32}, \emph{8x48}, \emph{8x64}, \emph{12x26}, \emph{12x36},
- \emph{12x64}, \emph{16x36}, \emph{16x48}, \emph{16x64},
- \emph{24x32}, \emph{24x36}, \emph{24x48}, \emph{24x64},
- \emph{26x32}, \emph{26x40}, \emph{26x48}, \emph{26x64}
+ \texttt{rectangle}: Use
+ \protect\hyperlink{data-matrix-rectangular}{Data Matrix Rectangular}
+ for rectangular symbols.
\end{itemize}
\item
- If \textbf{columns}, \textbf{rows} and \textbf{version} are
- unspecified the encoder will default to creating a symbol of the
- specified \textbf{format} that is the minimum size to represent the
- given data.
+ \emph{Deprecated: Use
+ \protect\hyperlink{data-matrix-rectangular-extension}{Data Matrix
+ Rectangular Extension}.} The \textbf{dmre} option enables Data Matrix
+ Rectangular Extension symbols based on the ISO/IEC standard, which
+ increases the number of rectangular symbol sizes available.
+\item
+ \emph{Deprecated: Use
+ \protect\hyperlink{data-matrix-rectangular-extension}{Data Matrix
+ Rectangular Extension} with dimdmre option.} The \textbf{dindmre}
+ option enables Data Matrix Rectangular Extension symbols based on the
+ obsolete DIN standard.
+\item
+ \emph{Deprecated: For internal use.} The \textbf{mailmark} option
+ signifies the requirement to use Mailmark-specific encoding.
\end{itemize}
-\paragraph{Examples}\label{examples-6}
+\hypertarget{examples-6}{%
+\paragraph{Examples}\label{examples-6}}
+
+Identical symbols, automatically sized, the latter showing use of the
+parse option:
\begin{verbatim}
Data: This is Data Matrix
@@ -901,6 +998,14 @@ Encoder: datamatrix
\includegraphics{images/datamatrix-1.eps}
+Identical symbols with a fixed size:
+
+\begin{verbatim}
+Data: Fixed size
+Options: version=48x48
+Encoder: datamatrix
+\end{verbatim}
+
\begin{verbatim}
Data: Fixed size
Options: rows=48 columns=48
@@ -909,6 +1014,8 @@ Encoder: datamatrix
\includegraphics{images/datamatrix-2.eps}
+A rectangular symbol with a fixed size:
+
\begin{verbatim}
Data: Rectangular
Options: format=rectangle version=16x48
@@ -917,7 +1024,230 @@ Encoder: datamatrix
\includegraphics{images/datamatrix-3.eps}
-\subsubsection{Han Xin Code}\label{han-xin-code}
+An advanced use containing "hidden data" in the padding codewords as
+used by some non-standard, "high-security" applications. The technique
+works by filling the symbol using raw codewords formed from the standard
+data immediately followed by the non-standard padding data beginning
+with \texttt{\^{}129}:
+
+\begin{verbatim}
+Data: ^066^067^068^142^052^129^161^056^206^101^251^147
+Options: version=16x16 raw
+Encoder: datamatrix
+\end{verbatim}
+
+\hypertarget{data-matrix-rectangular}{%
+\subsubsection{Data Matrix Rectangular}\label{data-matrix-rectangular}}
+
+The \textbf{Data Matrix Rectangular} symbology is a rectangular variant
+of \protect\hyperlink{data-matrix}{Data Matrix}.
+
+Variants:
+
+\begin{itemize}
+\tightlist
+\item
+ \protect\hyperlink{data-matrix}{Data Matrix} is the standard square
+ variant of the symbology.
+\item
+ \protect\hyperlink{data-matrix-rectangular-extension}{Data Matrix
+ Rectangular Extension} is a variant of Data Matrix Rectangular that
+ provides a greater range of symbol dimensions.
+\end{itemize}
+
+Standards: ISO/IEC 16022, ANSI/AIM BC11 - ISS Data Matrix.
+
+\hypertarget{data-and-options-10}{%
+\paragraph{Data and Options}\label{data-and-options-10}}
+
+\begin{itemize}
+\tightlist
+\item
+ The data field can contain any extended ASCII data. The default
+ interpretation of data by readers is in accordance with ISO/IEC
+ 8859-1. When supported by the receiver characters from other code
+ pages can be encoded using Extended Channel Interpretation (ECI).
+\item
+ When the \textbf{parse} option is specified, any instances of
+ \texttt{\^{}NNN} in the data field are replaced with their equivalent
+ ASCII value. This is useful for specifying unprintable characters.
+\item
+ When the \textbf{parsefnc} option is specified, non-data function
+ characters can be specified by escape sequences:
+
+ \begin{itemize}
+ \tightlist
+ \item
+ \texttt{\^{}FNC1}: FNC1. \emph{Recommendation: Use
+ \protect\hyperlink{gs1-datamatrix}{GS1 DataMatrix} for encoding GS1
+ AI syntax data.}
+ \item
+ \texttt{\^{}PROG}: PROG - Reader programming
+ \item
+ \texttt{\^{}ECI000000} to \texttt{\^{}ECI999999}: ECI indicators
+ \end{itemize}
+\item
+ Whenever the data field contains suitable input, the encoder will
+ compress ISO/IEC 15434 structured data (internally using the 05 Macro
+ and 06 Macro codewords.)
+\item
+ When the \textbf{dotty} option is specified the modules are rendered
+ as dots rather than squares. The dot radius can be adjusted using the
+ \textbf{inkspread} option.
+\item
+ \emph{Deprecated: Use
+ \protect\hyperlink{data-matrix-rectangular-extension}{Data Matrix
+ Rectangular Extension}.} The \textbf{dmre} option enables Data Matrix
+ Rectangular Extension symbols based on the ISO/IEC standard, which
+ increases the number of rectangular symbol sizes available.
+\item
+ \emph{Deprecated: Standard is obsolete. Use
+ \protect\hyperlink{data-matrix-rectangular-extension}{Data Matrix
+ Rectangular Extension} with the dindmre option.} The \textbf{dindmre}
+ option enables Data Matrix Rectangular Extension symbols based on the
+ obsolete DIN standard.
+\item
+ The \textbf{columns} and \textbf{rows} options are used to specify the
+ size of the symbol.
+\item
+ The \textbf{version} option can also be used to specify the symbol
+ size, as \texttt{version=RxC}. Valid options are \emph{8x18},
+ \emph{8x32}, \emph{12x26}, \emph{12x36}, \emph{16x36}, \emph{16x48}.
+\item
+ If \textbf{columns}, \textbf{rows} and \textbf{version} are
+ unspecified the encoder will default to creating a symbol that is the
+ minimum size to represent the given data.
+\item
+ The \textbf{raw} option denotes that the data field is providing the
+ input as pre-encoded codewords in \texttt{\^{}NNN} format, suitable
+ for direct low-level encoding.
+\end{itemize}
+
+\hypertarget{examples-7}{%
+\paragraph{Examples}\label{examples-7}}
+
+A rectangular symbol with a fixed size:
+
+\begin{verbatim}
+Data: Rectangular
+Options: version=16x48
+Encoder: datamatrixrectangular
+\end{verbatim}
+
+\includegraphics{images/datamatrix-3.eps}
+
+\hypertarget{data-matrix-rectangular-extension}{%
+\subsubsection{Data Matrix Rectangular
+Extension}\label{data-matrix-rectangular-extension}}
+
+The \textbf{Data Matrix Rectangular Extension} symbology is an
+enhancement to \protect\hyperlink{data-matrix-rectangular}{Data Matrix
+Rectangular} that provides a greater range of symbol dimensions.
+
+Also known as: DMRE.
+
+Variants:
+
+\begin{itemize}
+\tightlist
+\item
+ \protect\hyperlink{data-matrix}{Data Matrix} is the standard square
+ variant of the symbology.
+\item
+ \protect\hyperlink{data-matrix-rectangular}{Data Matrix Rectangular}
+ is the original rectangular variant of Data Matrix that provides a
+ limited range of symbol dimensions.
+\end{itemize}
+
+Standards: ISO/IEC 21471.
+
+\hypertarget{data-and-options-11}{%
+\paragraph{Data and Options}\label{data-and-options-11}}
+
+\begin{itemize}
+\tightlist
+\item
+ The data field can contain any extended ASCII data. The default
+ interpretation of data by readers is in accordance with ISO/IEC
+ 8859-1. When supported by the receiver characters from other code
+ pages can be encoded using Extended Channel Interpretation (ECI).
+\item
+ When the \textbf{parse} option is specified, any instances of
+ \texttt{\^{}NNN} in the data field are replaced with their equivalent
+ ASCII value. This is useful for specifying unprintable characters.
+\item
+ When the \textbf{parsefnc} option is specified, non-data function
+ characters can be specified by escape sequences:
+
+ \begin{itemize}
+ \tightlist
+ \item
+ \texttt{\^{}FNC1}: FNC1
+ \item
+ \texttt{\^{}PROG}: PROG - Reader programming
+ \item
+ \texttt{\^{}ECI000000} to \texttt{\^{}ECI999999}: ECI indicators
+ \end{itemize}
+\item
+ Whenever the data field contains suitable input, the encoder will
+ compress ISO/IEC 15434 structured data (internally using the 05 Macro
+ and 06 Macro codewords.)
+\item
+ When the \textbf{dotty} option is specified the modules are rendered
+ as dots rather than squares. The dot radius can be adjusted using the
+ \textbf{inkspread} option.
+\item
+ The \textbf{columns} and \textbf{rows} options are used to specify the
+ size of the symbol.
+\item
+ The \textbf{version} option can also be used to specify the symbol
+ size, as \texttt{version=RxC}. Valid options are \emph{8x18},
+ \emph{8x32}, \emph{8x48}, \emph{8x64}, \emph{8x80}, \emph{8x96},
+ \emph{8x120}, \emph{8x144}, \emph{12x26}, \emph{12x36}, \emph{12x64},
+ \emph{12x88}, \emph{16x36}, \emph{16x48}, \emph{16x64}, \emph{20x36},
+ \emph{20x44}, \emph{20x64}, \emph{22x48}, \emph{24x48}, \emph{24x64},
+ \emph{26x40}, \emph{26x48}, \emph{26x64}.
+\item
+ If \textbf{columns}, \textbf{rows} and \textbf{version} are
+ unspecified the encoder will default to creating a symbol that is the
+ minimum size to represent the given data.
+\item
+ The \textbf{raw} option denotes that the data field is providing the
+ input as pre-encoded codewords in \texttt{\^{}NNN} format, suitable
+ for direct low-level encoding.
+\item
+ \emph{Deprecated: Standard is obsolete.} The \textbf{dindmre} option
+ select Data Matrix Rectangular Extension symbols whose dimensions are
+ based on the obsolete DIN standard, rather than the current ISO
+ standard.
+
+ \begin{itemize}
+ \tightlist
+ \item
+ With \texttt{dindmre} the valid version \textbf{options} are
+ \emph{8x18}, \emph{8x32}, \emph{8x48}, \emph{8x64}, \emph{12x26},
+ \emph{12x36}, \emph{12x64}, \emph{16x36}, \emph{16x48},
+ \emph{16x64}, \emph{24x32}, \emph{24x36}, \emph{24x48},
+ \emph{24x64}, \emph{26x32}, \emph{26x40}, \emph{26x48},
+ \emph{26x64}.
+ \end{itemize}
+\end{itemize}
+
+\hypertarget{examples-8}{%
+\paragraph{Examples}\label{examples-8}}
+
+A DMRE symbol with a fixed size:
+
+\begin{verbatim}
+Data: 1234
+Options: version=8x80
+Encoder: datamatrixrectangularextension
+\end{verbatim}
+
+\includegraphics{images/datamatrix-4.eps}
+
+\hypertarget{han-xin-code}{%
+\subsubsection{Han Xin Code}\label{han-xin-code}}
The \textbf{Han Xin Code} symbology is a 2D matrix-style barcode
symbology that can encode full 256 character extended-ASCII.
@@ -926,12 +1256,15 @@ Also known as: Chinese Sensible.
Standards: GB/T 21049-2007.
-\paragraph{Data and Options}\label{data-and-options-10}
+\hypertarget{data-and-options-12}{%
+\paragraph{Data and Options}\label{data-and-options-12}}
\begin{itemize}
\tightlist
\item
- The data field can contain any extended ASCII data.
+ The data field can contain any extended ASCII data. The default
+ interpretation of data by readers is in accordance with ISO/IEC
+ 8859-1.
\item
When the \textbf{parse} option is specified, any instances of
\texttt{\^{}NNN} in the data field are replaced with their equivalent
@@ -960,7 +1293,8 @@ Standards: GB/T 21049-2007.
correction level.
\end{itemize}
-\paragraph{Examples}\label{examples-7}
+\hypertarget{examples-9}{%
+\paragraph{Examples}\label{examples-9}}
\begin{verbatim}
Data: Han Xin Code
@@ -970,7 +1304,8 @@ Encoder: hanxin
\includegraphics{images/hanxin-1.eps}
-\hypertarget{micropdf417}{\subsubsection{MicroPDF417}\label{micropdf417}}
+\hypertarget{micropdf417}{%
+\subsubsection{MicroPDF417}\label{micropdf417}}
The \textbf{MicroPDF417} barcode symbology is 2D stacked-linear barcode
based on \protect\hyperlink{pdf417}{PDF417} that can encode full 256
@@ -990,17 +1325,29 @@ Variants:
Standards: ISO/IEC 24728, AIM ISS - MicroPDF417.
-\paragraph{Data and Options}\label{data-and-options-11}
+\hypertarget{data-and-options-13}{%
+\paragraph{Data and Options}\label{data-and-options-13}}
\begin{itemize}
-\tightlist
\item
- The data field can contain any extended ASCII data.
+ The data field can contain any extended ASCII data. The default
+ interpretation of data by readers is in accordance with ISO/IEC
+ 8859-1. When supported by the receiver characters from other code
+ pages can be encoded using Extended Channel Interpretation (ECI).
\item
When the \textbf{parse} option is specified, any instances of
\texttt{\^{}NNN} in the data field are replaced with their equivalent
ASCII value, useful for specifying unprintable characters.
\item
+ When the \textbf{parsefnc} option is specified, non-data function
+ characters can be specified by escape sequences:
+
+ \begin{itemize}
+ \tightlist
+ \item
+ \texttt{\^{}ECI000000} to \texttt{\^{}ECI811799}: ECI indicators
+ \end{itemize}
+\item
The \textbf{columns} and \textbf{rows} options are used to specify the
size of the symbol. Valid values are:
@@ -1027,29 +1374,34 @@ Standards: ISO/IEC 24728, AIM ISS - MicroPDF417.
input as a pre-encoded codewords in \texttt{\^{}NNN} format, suitable
for direct low-level encoding.
\item
- The \textbf{cca} option identifies this symbol as a \emph{CC-A} 2D
- component of a \protect\hyperlink{gs1-composite-symbols}{GS1
- Composite} symbol.
-\item
- The \textbf{ccb} option identifies this symbol as a \emph{CC-B} 2D
- component of a \protect\hyperlink{gs1-composite-symbols}{GS1
- Composite} symbol.
-\item
- Note: Special size rules apply when the \textbf{cca} option is given,
- in which case the \textbf{columns} and \textbf{rows} options that are
- used to specify the size of the symbol must be one of:
+ \emph{Deprecated: Internal use.} The \textbf{cca} option identifies
+ this symbol as a \emph{CC-A} 2D component of a
+ \protect\hyperlink{gs1-composite-symbols}{GS1 Composite} symbol.
\begin{itemize}
\tightlist
\item
- \emph{2x5}, \emph{2x6}, \emph{2x7}, \emph{2x8}, \emph{2x9},
- \emph{2x10}, \emph{2x12}, \emph{3x4}, \emph{3x5}, \emph{3x6},
- \emph{3x7}, \emph{3x8}, \emph{4x3}, \emph{4x4}, \emph{4x5},
- \emph{4x6}, \emph{4x7}
+ Special size rules apply when the \textbf{cca} option is given, in
+ which case the \textbf{columns} and \textbf{rows} options that are
+ used to specify the size of the symbol must be one of:
+
+ \begin{itemize}
+ \tightlist
+ \item
+ \emph{2x5}, \emph{2x6}, \emph{2x7}, \emph{2x8}, \emph{2x9},
+ \emph{2x10}, \emph{2x12}, \emph{3x4}, \emph{3x5}, \emph{3x6},
+ \emph{3x7}, \emph{3x8}, \emph{4x3}, \emph{4x4}, \emph{4x5},
+ \emph{4x6}, \emph{4x7}
+ \end{itemize}
\end{itemize}
+\item
+ \emph{Deprecated: Internal use.} The \textbf{ccb} option identifies
+ this symbol as a \emph{CC-B} 2D component of a
+ \protect\hyperlink{gs1-composite-symbols}{GS1 Composite} symbol.
\end{itemize}
-\paragraph{Examples}\label{examples-8}
+\hypertarget{examples-10}{%
+\paragraph{Examples}\label{examples-10}}
\begin{verbatim}
Data: MicroPDF417
@@ -1067,7 +1419,8 @@ Encoder: micropdf417
\includegraphics{images/micropdf417-2.eps}
-\hypertarget{pdf417}{\subsubsection{PDF417}\label{pdf417}}
+\hypertarget{pdf417}{%
+\subsubsection{PDF417}\label{pdf417}}
The \textbf{PDF417} barcode symbology is 2D stacked-linear barcode that
can encode full 256 character extended-ASCII.
@@ -1090,17 +1443,30 @@ Variants:
Standards: ISO/IEC 15438, DD ENV 12925, AIM USS - PDF417.
-\paragraph{Data and Options}\label{data-and-options-12}
+\hypertarget{data-and-options-14}{%
+\paragraph{Data and Options}\label{data-and-options-14}}
\begin{itemize}
\tightlist
\item
- The data field can contain any extended ASCII data.
+ The data field can contain any extended ASCII data. The default
+ interpretation of data by readers is in accordance with ISO/IEC
+ 8859-1. When supported by the receiver characters from other code
+ pages can be encoded using Extended Channel Interpretation (ECI).
\item
When the \textbf{parse} option is specified, any instances of
\texttt{\^{}NNN} in the data field are replaced with their equivalent
ASCII value, useful for specifying unprintable characters.
\item
+ When the \textbf{parsefnc} option is specified, non-data function
+ characters can be specified by escape sequences:
+
+ \begin{itemize}
+ \tightlist
+ \item
+ \texttt{\^{}ECI000000} to \texttt{\^{}ECI811799}: ECI indicators.
+ \end{itemize}
+\item
The \textbf{eclevel} option is used to specify the error correction
level, from 1 to 5. The default is to choose a standard level of error
correction that is determined by the encoded data length.
@@ -1117,21 +1483,22 @@ Standards: ISO/IEC 15438, DD ENV 12925, AIM USS - PDF417.
The \textbf{rowmult} option is used to specify how tall each bar is,
with respect to the minimum module width. The default is 3.
\item
+ The \textbf{raw} option denotes that the data field is providing the
+ input as a pre-encoded codewords in \texttt{\^{}NNN} format, suitable
+ for direct low-level encoding.
+\item
\emph{Deprecated: Use \protect\hyperlink{compact-pdf417}{Compact
PDF417} instead. The \textbf{compact} option is used to create a
compact/truncated PDF417 symbol that has fewer bars per row that a
standard symbol and hence is more narrow.}
\item
- The \textbf{raw} option denotes that the data field is providing the
- input as a pre-encoded codewords in \texttt{\^{}NNN} format, suitable
- for direct low-level encoding.
-\item
- The \textbf{ccc} option identifies this symbol as a \emph{CC-C} 2D
- component of a \protect\hyperlink{gs1-composite-symbols}{GS1
- Composite} symbol.
+ \emph{Deprecated: Internal use.} The \textbf{ccc} option identifies
+ this symbol as a \emph{CC-C} 2D component of a
+ \protect\hyperlink{gs1-composite-symbols}{GS1 Composite} symbol.
\end{itemize}
-\paragraph{Examples}\label{examples-9}
+\hypertarget{examples-11}{%
+\paragraph{Examples}\label{examples-11}}
\begin{verbatim}
Data: PDF417
@@ -1165,8 +1532,8 @@ Encoder: pdf417
\includegraphics{images/pdf417-5.eps}
-\hypertarget{compact-pdf417}{\subsubsection{Compact
-PDF417}\label{compact-pdf417}}
+\hypertarget{compact-pdf417}{%
+\subsubsection{Compact PDF417}\label{compact-pdf417}}
\textbf{Compact PDF417} is a shortened form of the
\protect\hyperlink{pdf417}{PDF417} barcode that is used in applications
@@ -1191,17 +1558,30 @@ Variants:
Standards: ISO/IEC 15438, DD ENV 12925, AIM USS - PDF417.
-\paragraph{Data and Options}\label{data-and-options-13}
+\hypertarget{data-and-options-15}{%
+\paragraph{Data and Options}\label{data-and-options-15}}
\begin{itemize}
\tightlist
\item
- The data field can contain any extended ASCII data.
+ The data field can contain any extended ASCII data. The default
+ interpretation of data by readers is in accordance with ISO/IEC
+ 8859-1. When supported by the receiver characters from other code
+ pages can be encoded using Extended Channel Interpretation (ECI).
\item
When the \textbf{parse} option is specified, any instances of
\texttt{\^{}NNN} in the data field are replaced with their equivalent
ASCII value, useful for specifying unprintable characters.
\item
+ When the \textbf{parsefnc} option is specified, non-data function
+ characters can be specified by escape sequences:
+
+ \begin{itemize}
+ \tightlist
+ \item
+ \texttt{\^{}ECI000000} to \texttt{\^{}ECI811799}: ECI indicators
+ \end{itemize}
+\item
The \textbf{eclevel} option is used to specify the error correction
level, from 1 to 5. The default is to choose a standard level of error
correction that is determined by the encoded data length.
@@ -1223,7 +1603,8 @@ Standards: ISO/IEC 15438, DD ENV 12925, AIM USS - PDF417.
for direct low-level encoding.
\end{itemize}
-\paragraph{Examples}\label{examples-10}
+\hypertarget{examples-12}{%
+\paragraph{Examples}\label{examples-12}}
\begin{verbatim}
Data: A truncated PDF417
@@ -1233,7 +1614,8 @@ Encoder: pdf417compact
\includegraphics{images/pdf417-3.eps}
-\hypertarget{qr-code}{\subsubsection{QR Code}\label{qr-code}}
+\hypertarget{qr-code}{%
+\subsubsection{QR Code}\label{qr-code}}
The \textbf{QR Code} symbology is a 2D matrix-style barcode symbology
that can encode full 256 character extended-ASCII.
@@ -1253,23 +1635,48 @@ Variants:
\protect\hyperlink{gs1-application-identifier-standard-format}{GS1
Application Identifier standard format}.
\item
+ \protect\hyperlink{gs1-digital-link-qr-code}{GS1 Digital Link QR Code}
+ is a variant of Data Matrix that should be used when encoding a GS1
+ Digital Link URI.
+\item
\protect\hyperlink{hibc-symbols}{HIBC QR Code} is a variant of QR Code
that should be used when encoding HIBC formatted data.
+\item
+ \protect\hyperlink{swiss-qr-code}{Swiss QR Code} is a variant of the
+ QR Code for use with the QR-bill application supporting Swiss
+ payments.
\end{itemize}
Standards: ISO/IEC 18004, JIS X 0510, ITS - QR Code, AIM ISS - QR Code.
-\paragraph{Data and Options}\label{data-and-options-14}
+\hypertarget{data-and-options-16}{%
+\paragraph{Data and Options}\label{data-and-options-16}}
\begin{itemize}
\tightlist
\item
- The data field can contain any extended ASCII data.
+ The data field can contain any extended ASCII data. The default
+ interpretation of data by readers is in accordance with ISO/IEC
+ 8859-1. When supported by the receiver characters from other code
+ pages can be encoded using Extended Channel Interpretation (ECI).
\item
When the \textbf{parse} option is specified, any instances of
\texttt{\^{}NNN} in the data field are replaced with their equivalent
ASCII value, useful for specifying unprintable characters.
\item
+ When the \textbf{parsefnc} option is specified, non-data function
+ characters can be specified by escape sequences:
+
+ \begin{itemize}
+ \tightlist
+ \item
+ \texttt{\^{}FNC1}: FNC1. \emph{Recommendation: Use
+ \protect\hyperlink{gs1-qr-code}{GS1 QR Code} for encoding GS1 AI
+ syntax data.}
+ \item
+ \texttt{\^{}ECI000000} to \texttt{\^{}ECI999999}: ECI indicators
+ \end{itemize}
+\item
The \textbf{eclevel} option is used to specify the error correction
level:
@@ -1292,18 +1699,23 @@ Standards: ISO/IEC 18004, JIS X 0510, ITS - QR Code, AIM ISS - QR Code.
is the minimum size to represent the given data at the selected error
correction level.
\item
- The \textbf{format} option is used to select between
- \texttt{format=full} and \texttt{format=micro} (deprecated) symbol
- types. Alternatively, \texttt{format=any} will select the optimal
- symbol format for the given data. By default \emph{full} format
- symbols will be generated.
-\item
- Note: It is recommended that the
- \protect\hyperlink{micro-qr-code}{Micro QR Code} encoder is used for
- such symbols.
+ \emph{Deprecated}: The \textbf{format} option is used to specify the
+ symbol type, either:
+
+ \begin{itemize}
+ \tightlist
+ \item
+ \texttt{full} (default)
+ \item
+ \texttt{micro}: Use \protect\hyperlink{micro-qr-code}{Micro QR Code}
+ for Micro QR Code symbols.
+ \item
+ \texttt{rmqr}: The standard is still in draft.
+ \end{itemize}
\end{itemize}
-\paragraph{Examples}\label{examples-11}
+\hypertarget{examples-13}{%
+\paragraph{Examples}\label{examples-13}}
\begin{verbatim}
Data: QR Code
@@ -1327,8 +1739,8 @@ Encoder: qrcode
\includegraphics{images/qrcode-2.eps}
-\hypertarget{micro-qr-code}{\subsubsection{Micro QR
-Code}\label{micro-qr-code}}
+\hypertarget{micro-qr-code}{%
+\subsubsection{Micro QR Code}\label{micro-qr-code}}
The \textbf{Micro QR Code} symbology is a smaller variant of
\protect\hyperlink{qr-code}{QR Code} that is used in applications that
@@ -1347,13 +1759,18 @@ Variants:
Standards: ISO/IEC 18004, JIS X 0510, ITS - QR Code, AIM ISS - QR Code.
-\paragraph{Data and Options}\label{data-and-options-15}
+\hypertarget{data-and-options-17}{%
+\paragraph{Data and Options}\label{data-and-options-17}}
\begin{itemize}
\tightlist
\item
- The data field can contain any extended ASCII data and will select the
- appropriate size symbol to work around the following restrictions:
+ The data field can contain any extended ASCII data. The default
+ interpretation of data by readers is in accordance with ISO/IEC
+ 8859-1.
+\item
+ An appropriate size will be selected to work around the following
+ restrictions:
\begin{itemize}
\tightlist
@@ -1389,7 +1806,8 @@ Standards: ISO/IEC 18004, JIS X 0510, ITS - QR Code, AIM ISS - QR Code.
correction level.
\end{itemize}
-\paragraph{Examples}\label{examples-12}
+\hypertarget{examples-14}{%
+\paragraph{Examples}\label{examples-14}}
\begin{verbatim}
Data: 01234567
@@ -1399,9 +1817,90 @@ Encoder: microqrcode
\includegraphics{images/qrcode-5.eps}
-\subsection{One-Dimensional}\label{one-dimensional}
+\hypertarget{swiss-qr-code}{%
+\subsubsection{Swiss QR Code}\label{swiss-qr-code}}
+
+\textbf{Swiss QR Code} is a variant of the
+\protect\hyperlink{qr-code}{QR Code} barcode symbology for use with the
+QR-bill application supporting Swiss payments.
+
+Standards: Swiss Implementation Guidelines QR-bill, ISO/IEC 18004, ITS -
+QR Code
+
+\hypertarget{data-and-options-18}{%
+\paragraph{Data and Options}\label{data-and-options-18}}
+
+\begin{itemize}
+\tightlist
+\item
+ The data field input is provided in the format described in the Swiss
+ Implementation Guidelines QR-bill document.
+\item
+ The \textbf{version} option is used to specify the size of the symbol,
+ 5 to 25. This is not typically specified.
+\item
+ If the \textbf{version} is unspecified the encoder will default to
+ creating a symbol that is the minimum size to represent the given data
+ at the selected error correction level.
+\end{itemize}
-\hypertarget{code-128}{\subsubsection{Code 128}\label{code-128}}
+Note: Swiss QR Code specifies that the image shall be 46mm x 46mm
+(excluding quiet zone), irrespective of QR Code version, and is
+overlayed with a fixed 7mm x 7mm Swiss Cross pattern. The Swiss Cross
+pitch bears no relation to the module width of the QR symbol, so we must
+assume that the application provides sufficient resolution throughout
+the print process that defects produced by issues such as pixel grazing
+are insignificant. Therefore, unlike most other encoders, we do not pick
+a fixed module width to assist with grid fitting but rather ensure that
+the image is scaled to a fixed size, per the specification.
+
+\hypertarget{example-1}{%
+\paragraph{Example}\label{example-1}}
+
+\begin{verbatim}
+Data:
+ SPC
+ 0200
+ 1
+ CH5800791123000889012
+ S
+ Robert Schneider AG
+ Rue du Lac
+ 1268
+ 2501
+ Biel
+ CH
+
+
+
+
+
+
+
+ 199.95
+ CHF
+ K
+ Pia-Maria Rutschmann-Schnyder
+ Grosse Marktgasse 28
+ 9400 Rorschach
+
+
+ CH
+ SCOR
+ RF18539007547034
+
+ EPD
+Options:
+Encoder: swissqrcode
+\end{verbatim}
+
+\includegraphics{images/swissqrcode-1.eps}
+
+\hypertarget{one-dimensional}{%
+\subsection{One-Dimensional}\label{one-dimensional}}
+
+\hypertarget{code-128}{%
+\subsubsection{Code 128}\label{code-128}}
\textbf{Code 128} is an arbitrarily long, high-density barcode symbology
that can be used to encode full 256 character extended-ASCII.
@@ -1424,12 +1923,17 @@ Variants:
Standards: ISO/IEC 15417, ANSI/AIM BC4 - ISS Code 128, BS EN 799.
-\paragraph{Data and Options}\label{data-and-options-16}
+\hypertarget{data-and-options-19}{%
+\paragraph{Data and Options}\label{data-and-options-19}}
\begin{itemize}
\tightlist
\item
- The input can consist of any extended ASCII data.
+ The data field input can consist of any extended ASCII data. The
+ default interpretation of data by readers is in accordance with
+ ISO/IEC 8859-1.
+\item
+ The mandatory check digit is calculated automatically.
\item
When the \textbf{parse} option is specified, any instances of
\texttt{\^{}NNN} in the data field are replaced with their equivalent
@@ -1441,22 +1945,33 @@ Standards: ISO/IEC 15417, ANSI/AIM BC4 - ISS Code 128, BS EN 799.
allow the encoding of extended ASCII characters.
\item
When the \textbf{parsefnc} option is specified, non-data function
- characters can be specified by \texttt{\^{}FNC1} through
- \texttt{\^{}FNC3}.
-\item
- When the \textbf{parsefnc} option is specified, the special pseudo
- characters \texttt{\^{}LNKA} and \texttt{\^{}LNKC} at the end of the
- symbol indicate that a GS1-128 symbol includes a \emph{CC-A/B} or
- \emph{CC-C} GS1 composite 2D component.
+ characters can be specified by escape sequences:
+
+ \begin{itemize}
+ \tightlist
+ \item
+ \texttt{\^{}FNC1}: FNC1. \emph{Recommendation: Use
+ \protect\hyperlink{gs1-128}{GS1-128} for encoding GS1 AI syntax
+ data.}
+ \item
+ \texttt{\^{}FNC2}: FNC2
+ \item
+ \texttt{\^{}FNC3}: FNC3
+ \end{itemize}
\item
The \textbf{raw} option denotes that the data field is providing the
input as pre-encoded codewords in \texttt{\^{}NNN} format, suitable
for direct low-level encoding.
\item
- The mandatory check digit is calculated automatically.
+ \emph{Deprecated: For internal use.} When the \textbf{parsefnc} option
+ is specified, the special pseudo characters \texttt{\^{}LNKA} and
+ \texttt{\^{}LNKC} at the end of the symbol indicate that a GS1-128
+ symbol includes a \emph{CC-A/B} or \emph{CC-C} GS1 composite 2D
+ component.
\end{itemize}
-\paragraph{Example}\label{example-1}
+\hypertarget{example-2}{%
+\paragraph{Example}\label{example-2}}
\begin{verbatim}
Data: Count0123456789!
@@ -1466,7 +1981,8 @@ Encoder: code128
\includegraphics{images/code128-1.eps}
-\hypertarget{code-39}{\subsubsection{Code 39}\label{code-39}}
+\hypertarget{code-39}{%
+\subsubsection{Code 39}\label{code-39}}
The \textbf{Code 39} barcode symbology is discrete, variable length and
self-checking.
@@ -1492,7 +2008,8 @@ Variants:
Standards: ISO/IEC 16388, ANSI/AIM BC1 - USS Code 39, BS EN 800, MIL STD
1189.
-\paragraph{Data and Options}\label{data-and-options-17}
+\hypertarget{data-and-options-20}{%
+\paragraph{Data and Options}\label{data-and-options-20}}
\begin{itemize}
\tightlist
@@ -1518,7 +2035,8 @@ Standards: ISO/IEC 16388, ANSI/AIM BC1 - USS Code 39, BS EN 800, MIL STD
readable text.
\end{itemize}
-\paragraph{Examples}\label{examples-13}
+\hypertarget{examples-15}{%
+\paragraph{Examples}\label{examples-15}}
\begin{verbatim}
Data: CODE39
@@ -1544,8 +2062,8 @@ Encoder: code39
\includegraphics{images/code39-3.eps}
-\hypertarget{code-39-extended}{\subsubsection{Code 39
-Extended}\label{code-39-extended}}
+\hypertarget{code-39-extended}{%
+\subsubsection{Code 39 Extended}\label{code-39-extended}}
The \textbf{Code 39 Extended} barcode symbology is discrete, variable
length and self-checking. It is based on
@@ -1565,7 +2083,8 @@ Variants:
Standards: ISO/IEC 16388, ANSI/AIM BC1 - USS Code 39, BS EN 800.
-\paragraph{Data and Options}\label{data-and-options-18}
+\hypertarget{data-and-options-21}{%
+\paragraph{Data and Options}\label{data-and-options-21}}
\begin{itemize}
\tightlist
@@ -1586,7 +2105,8 @@ Standards: ISO/IEC 16388, ANSI/AIM BC1 - USS Code 39, BS EN 800.
readable text.
\end{itemize}
-\paragraph{Examples}\label{examples-14}
+\hypertarget{examples-16}{%
+\paragraph{Examples}\label{examples-16}}
\begin{verbatim}
Data: Code39 Ext!
@@ -1604,7 +2124,8 @@ Encoder: code39ext
\includegraphics{images/code39ext-2.eps}
-\hypertarget{code-93}{\subsubsection{Code 93}\label{code-93}}
+\hypertarget{code-93}{%
+\subsubsection{Code 93}\label{code-93}}
\textbf{Code 93} is a continuous, variable length, self-checking barcode
symbology.
@@ -1623,7 +2144,8 @@ Variants:
Standards: ANSI/AIM BC5 - USS Code 93, ITS 93i.
-\paragraph{Data and Options}\label{data-and-options-19}
+\hypertarget{data-and-options-22}{%
+\paragraph{Data and Options}\label{data-and-options-22}}
\begin{itemize}
\tightlist
@@ -1640,14 +2162,27 @@ Standards: ANSI/AIM BC5 - USS Code 93, ITS 93i.
Symbols \texttt{-.\$/+\%*} and \emph{space}
\end{itemize}
\item
- The \textbf{parsefnc} option allows the special shift characters to be
- supplied as \texttt{\^{}SFT\$}, \texttt{\^{}SFT\%}, \texttt{\^{}SFT/}
- and \texttt{\^{}SFT+}.
-\item
The \textbf{includecheck} option calculates the two check digits.
+\item
+ \emph{Deprecated: For internal use.} The \textbf{parsefnc} option
+ allows the special shift characters to be supplied as escape
+ sequences:
+
+ \begin{itemize}
+ \tightlist
+ \item
+ \texttt{\^{}SFT\$}: (\$)
+ \item
+ \texttt{\^{}SFT\%}: (\%)
+ \item
+ \texttt{\^{}SFT/}: (/)
+ \item
+ \texttt{\^{}SFT+}: (+)
+ \end{itemize}
\end{itemize}
-\paragraph{Examples}\label{examples-15}
+\hypertarget{examples-17}{%
+\paragraph{Examples}\label{examples-17}}
\begin{verbatim}
Data: CODE93
@@ -1668,8 +2203,8 @@ Encoder: code93
\includegraphics{images/code93-2.eps}
-\hypertarget{code-93-extended}{\subsubsection{Code 93
-Extended}\label{code-93-extended}}
+\hypertarget{code-93-extended}{%
+\subsubsection{Code 93 Extended}\label{code-93-extended}}
The \textbf{Code 93 Extended} barcode symbology is continuous, variable
length and self-checking. It is based on
@@ -1690,7 +2225,8 @@ Variants:
Standards: ANSI/AIM BC5 - USS Code 93, ITS 93i.
-\paragraph{Data and Options}\label{data-and-options-20}
+\hypertarget{data-and-options-23}{%
+\paragraph{Data and Options}\label{data-and-options-23}}
\begin{itemize}
\tightlist
@@ -1705,7 +2241,8 @@ Standards: ANSI/AIM BC5 - USS Code 93, ITS 93i.
The \textbf{includecheck} option calculates the two check digits.
\end{itemize}
-\paragraph{Examples}\label{examples-16}
+\hypertarget{examples-18}{%
+\paragraph{Examples}\label{examples-18}}
\begin{verbatim}
Data: Code93Ext!
@@ -1723,8 +2260,8 @@ Encoder: code93ext
\includegraphics{images/code93ext-2.eps}
-\hypertarget{interleaved-2-of-5}{\subsubsection{Interleaved 2 of
-5}\label{interleaved-2-of-5}}
+\hypertarget{interleaved-2-of-5}{%
+\subsubsection{Interleaved 2 of 5}\label{interleaved-2-of-5}}
\textbf{Interleaved 2 of 5} is a high-density numeric barcode symbology.
@@ -1743,23 +2280,25 @@ Variants:
Standards: ISO/IEC 16390, ANSI/AIM BC2 - USS Interleaved 2 of 5, BS EN
801.
-\paragraph{Data and Options}\label{data-and-options-21}
+\hypertarget{data-and-options-24}{%
+\paragraph{Data and Options}\label{data-and-options-24}}
\begin{itemize}
\tightlist
\item
The data can consist of any number of digits.
\item
+ If the length of the symbol including the possible check digit would
+ be odd then the data is prefixed by \emph{0}.
+\item
The \textbf{includecheck} option calculates the check digit.
\item
The \textbf{includecheckintext} option makes the calculated checksum
appear in the human readable text.
-\item
- If the length of the symbol including the possible check digit would
- be odd then the data is prefixed by \emph{0}.
\end{itemize}
-\paragraph{Examples}\label{examples-17}
+\hypertarget{examples-19}{%
+\paragraph{Examples}\label{examples-19}}
\begin{verbatim}
Data: 0123456789
@@ -1777,10 +2316,156 @@ Encoder: interleaved2of5
\includegraphics{images/itf-2.eps}
-\subsection{Supply Chain}\label{supply-chain}
+\hypertarget{supply-chain}{%
+\subsection{Supply Chain}\label{supply-chain}}
+
+\hypertarget{ean-14}{%
+\subsubsection{EAN-14}\label{ean-14}}
+
+\textbf{EAN-14} is an implementation of the
+\protect\hyperlink{gs1-128}{GS1-128} barcode symbology with \emph{AI
+(01)} that is used to encode a lone GTIN-14.
+
+Also known as: UCC-14.
+
+Standards: ISO/IEC 15417, ANSI/AIM BC4-1999 ISS, BS EN 799, GS1 General
+Specifications.
+
+\hypertarget{data-and-options-25}{%
+\paragraph{Data and Options}\label{data-and-options-25}}
+
+\begin{itemize}
+\tightlist
+\item
+ The data field input must be a solitary \emph{AI (01)} with thirteen
+ or fourteen digits of a GTIN, i.e. \texttt{(01)...}.
+\item
+ Arbitrary spacing may be placed between the digits to format the human
+ readable text without interfering with the encoded data.
+\item
+ If thirteen digits of primary data are supplied then the check digit
+ is calculated automatically. Otherwise the provided check digit will
+ be verified.
+\end{itemize}
+
+\hypertarget{examples-20}{%
+\paragraph{Examples}\label{examples-20}}
+
+Identical symbols, input provided with and without a check digit:
+
+\begin{verbatim}
+Data: (01)04601234567893
+Options: includetext
+Encoder: ean14
+\end{verbatim}
+
+\begin{verbatim}
+Data: (01)0460123456789
+Options: includetext
+Encoder: ean14
+\end{verbatim}
+
+\includegraphics{images/ean14-1.eps}
+
+\hypertarget{itf-14}{%
+\subsubsection{ITF-14}\label{itf-14}}
+
+\textbf{ITF-14} is an implementation of the
+\protect\hyperlink{interleaved-2-of-5}{Interleaved 2 of 5} barcode
+symbology that is typically used to encode a GTIN-14, GTIN-13 or
+GTIN-12.
+
+Also known as: UPC Shipping Container Symbol, SCS, UPC Case Code.
+
+Standards: ISO/IEC 16390, ANSI/AIM BC2-1995 USS, BS EN 801, GS1 General
+Specifications.
+
+\hypertarget{data-and-options-26}{%
+\paragraph{Data and Options}\label{data-and-options-26}}
+
+\begin{itemize}
+\tightlist
+\item
+ The data consists of either thirteen or fourteen digits.
+\item
+ Arbitrary spacing may be placed between the digits to format the human
+ readable text without interfering with the encoded data.
+\item
+ If thirteen digits are supplied then the check digit is calculated
+ automatically. Otherwise the provided check digit will be verified.
+\end{itemize}
+
+\hypertarget{examples-21}{%
+\paragraph{Examples}\label{examples-21}}
+
+Identical symbols, input provided with and without a check digit:
+
+\begin{verbatim}
+Data: 04601234567893
+Options: includetext
+Encoder: itf14
+\end{verbatim}
-\hypertarget{gs1-datamatrix}{\subsubsection{GS1
-DataMatrix}\label{gs1-datamatrix}}
+\begin{verbatim}
+Data: 0460123456789
+Options: includetext
+Encoder: itf14
+\end{verbatim}
+
+\includegraphics{images/itf-14-1.eps}
+
+\hypertarget{sscc-18}{%
+\subsubsection{SSCC-18}\label{sscc-18}}
+
+\textbf{SSCC-18} is an implementation of the
+\protect\hyperlink{gs1-128}{GS1-128} barcode symbology with \emph{AI
+(00)} that is typically used to encode an eighteen-digit shipping
+container serial number.
+
+Also known as: EAN-18, NVE.
+
+Standards: ISO/IEC 15417, ANSI/AIM BC4-1999 ISS, BS EN 799, GS1 General
+Specifications.
+
+\hypertarget{data-and-options-27}{%
+\paragraph{Data and Options}\label{data-and-options-27}}
+
+\begin{itemize}
+\tightlist
+\item
+ The data field input must be a solitary \emph{AI (00)} with seventeen
+ or eighteen digits of a Serial Shipping Container Code, i.e.
+ \texttt{(00)...}.
+\item
+ Arbitrary spacing may be placed between the digits to format the human
+ readable text without interfering with the encoded data.
+\item
+ If seventeen digits of primary data are supplied then the check digit
+ is calculated automatically. Otherwise the provided check digit will
+ be verified.
+\end{itemize}
+
+\hypertarget{example-3}{%
+\paragraph{Example}\label{example-3}}
+
+Identical symbols, input provided with and without a check digit:
+
+\begin{verbatim}
+Data: (00)006141411234567890
+Options: includetext
+Encoder: sscc18
+\end{verbatim}
+
+\begin{verbatim}
+Data: (00)00614141123456789
+Options: includetext
+Encoder: sscc18
+\end{verbatim}
+
+\includegraphics{images/sscc18-1.eps}
+
+\hypertarget{gs1-datamatrix}{%
+\subsubsection{GS1 DataMatrix}\label{gs1-datamatrix}}
\textbf{GS1 DataMatrix} is an implementation of the
\protect\hyperlink{data-matrix}{Data Matrix} (ECC 200) barcode symbology
@@ -1789,7 +2474,8 @@ formatted} data.
Standards: ISO/IEC 16022, ANSI/AIM BC11 ISS, GS1 General Specifications.
-\paragraph{Data and Options}\label{data-and-options-22}
+\hypertarget{data-and-options-28}{%
+\paragraph{Data and Options}\label{data-and-options-28}}
\begin{itemize}
\tightlist
@@ -1799,6 +2485,13 @@ Standards: ISO/IEC 16022, ANSI/AIM BC11 ISS, GS1 General Specifications.
Application Identifier standard format} starting with the mandatory
\emph{(01)} Application Identifier.
\item
+ Note that it is not necessary to specify \emph{FNC1} characters since
+ the encoder will insert these automatically where necessary.
+\item
+ \emph{Deprecated.} The \textbf{dontlint} option disables GS1
+ Application Identifier syntax validation allowing images to be
+ generated for input that does not comply with GS1 standards.
+\item
The \textbf{format} option is used to specify the shape of the symbol,
either \texttt{square} (default) or \texttt{rectangle}.
\item
@@ -1829,7 +2522,8 @@ Standards: ISO/IEC 16022, ANSI/AIM BC11 ISS, GS1 General Specifications.
given data.
\end{itemize}
-\paragraph{Example}\label{example-2}
+\hypertarget{example-4}{%
+\paragraph{Example}\label{example-4}}
\begin{verbatim}
Data: (01)95012345678903(3103)000123
@@ -1839,8 +2533,8 @@ Encoder: gs1datamatrix
\includegraphics{images/gs1datamatrix-1.eps}
-\hypertarget{gs1-qr-code}{\subsubsection{GS1 QR
-Code}\label{gs1-qr-code}}
+\hypertarget{gs1-qr-code}{%
+\subsubsection{GS1 QR Code}\label{gs1-qr-code}}
\textbf{GS1 QR Code} is an implementation of the
\protect\hyperlink{qr-code}{QR Code} barcode symbology with
@@ -1849,7 +2543,8 @@ formatted data}.
Standards: ISO/IEC 18004, ITS - QR Code, GS1 General Specifications.
-\paragraph{Data and Options}\label{data-and-options-23}
+\hypertarget{data-and-options-29}{%
+\paragraph{Data and Options}\label{data-and-options-29}}
\begin{itemize}
\tightlist
@@ -1859,6 +2554,13 @@ Standards: ISO/IEC 18004, ITS - QR Code, GS1 General Specifications.
Application Identifier standard format} starting with the mandatory
\emph{(01)} and \emph{(8200)} Application Identifiers.
\item
+ Note that it is not necessary to specify \emph{FNC1} characters since
+ the encoder will insert these automatically where necessary.
+\item
+ \emph{Deprecated.} The \textbf{dontlint} option disables GS1
+ Application Identifier syntax validation allowing images to be
+ generated for input that does not comply with GS1 standards.
+\item
The \textbf{eclevel} option is used to specify the error correction
level:
@@ -1882,7 +2584,8 @@ Standards: ISO/IEC 18004, ITS - QR Code, GS1 General Specifications.
at the selected error correction level.
\end{itemize}
-\paragraph{Example}\label{example-3}
+\hypertarget{example-5}{%
+\paragraph{Example}\label{example-5}}
\begin{verbatim}
Data: (01)03453120000011(8200)http://www.abc.net
@@ -1900,7 +2603,125 @@ Encoder: gs1qrcode
\includegraphics{images/gs1qrcode-2.eps}
-\hypertarget{gs1-128}{\subsubsection{GS1-128}\label{gs1-128}}
+\hypertarget{gs1-digital-link-datamatrix}{%
+\subsubsection{GS1 Digital Link
+DataMatrix}\label{gs1-digital-link-datamatrix}}
+
+\textbf{GS1 Digital Link DataMatrix} is an implementation of the
+\protect\hyperlink{data-matrix}{Data Matrix} (ECC 200) barcode symbology
+containing a GS1 Digital Link URI.
+
+Standards: ISO/IEC 16022, ANSI/AIM BC11 ISS, GS1 Digital Link Standard:
+URI Syntax.
+
+\hypertarget{data-and-options-30}{%
+\paragraph{Data and Options}\label{data-and-options-30}}
+
+\begin{itemize}
+\tightlist
+\item
+ The data field input is provided as a GS1 Digital Link URI.
+\item
+ \emph{Deprecated.} The \textbf{dontlint} option disables GS1
+ Application Identifier syntax validation allowing images to be
+ generated for input that does not comply with GS1 standards.
+\item
+ The \textbf{format} option is used to specify the shape of the symbol,
+ either \texttt{square} (default) or \texttt{rectangle}.
+\item
+ The \textbf{columns} and \textbf{rows} options are used to specify the
+ size of the symbol.
+\item
+ The \textbf{version} option can also be used to specify the symbol
+ size, as \texttt{version=RxC}. Valid options are:
+
+ \begin{itemize}
+ \tightlist
+ \item
+ With \texttt{format=square}: \emph{10x10}, \emph{12x12},
+ \emph{14x14}, \emph{16x16}, \emph{18x18}, \emph{20x20},
+ \emph{22x22}, \emph{24x24}, \emph{26x26}, \emph{32x32},
+ \emph{36x36}, \emph{40x40}, \emph{44x44}, \emph{48x48},
+ \emph{52x52}, \emph{64x64}, \emph{72x72}, \emph{80x80},
+ \emph{88x88}, \emph{96x96}, \emph{104x104}, \emph{120x120},
+ \emph{132x132}, \emph{144x144}
+ \item
+ With \texttt{format=rectangle}: \emph{8x18}, \emph{8x32},
+ \emph{12x26}, \emph{12x36}, \emph{16x36}, \emph{16x48}
+ \end{itemize}
+\item
+ If \textbf{columns}, \textbf{rows} and \textbf{version} are
+ unspecified the encoder will default to creating a symbol of the
+ specified \textbf{format} that is the minimum size to represent the
+ given data.
+\end{itemize}
+
+\hypertarget{example-6}{%
+\paragraph{Example}\label{example-6}}
+
+\begin{verbatim}
+Data: https://id.gs1.org/01/12312312312333/22/ABC%2d123?99=XYZ%2f987#test
+Options:
+Encoder: gs1dldatamatrix
+\end{verbatim}
+
+\hypertarget{gs1-qr-digital-link-code}{%
+\subsubsection{GS1 QR Digital Link
+Code}\label{gs1-qr-digital-link-code}}
+
+\textbf{GS1 Digital Link QR Code} is an implementation of the
+\protect\hyperlink{qr-code}{QR Code} barcode symbology containing a GS1
+Digital Link URI.
+
+Standards: ISO/IEC 18004, ITS - QR Code, GS1 Digital Link Standard: URI
+Syntax.
+
+\hypertarget{data-and-options-31}{%
+\paragraph{Data and Options}\label{data-and-options-31}}
+
+\begin{itemize}
+\tightlist
+\item
+ The data field input is provided as a GS1 Digital Link URI.
+\item
+ \emph{Deprecated.} The \textbf{dontlint} option disables GS1
+ Application Identifier syntax validation allowing images to be
+ generated for input that does not comply with GS1 standards.
+\item
+ The \textbf{eclevel} option is used to specify the error correction
+ level:
+
+ \begin{itemize}
+ \tightlist
+ \item
+ \texttt{eclevel=L} - Low
+ \item
+ \texttt{eclevel=M} - Medium (default)
+ \item
+ \texttt{eclevel=Q} - Quality
+ \item
+ \texttt{eclevel=H} - High
+ \end{itemize}
+\item
+ The \textbf{version} option is used to specify the size of the symbol,
+ 1 to 40.
+\item
+ If the \textbf{version} is unspecified the encoder will default to
+ creating a symbol that is the minimum size to represent the given data
+ at the selected error correction level.
+\end{itemize}
+
+\hypertarget{example-7}{%
+\paragraph{Example}\label{example-7}}
+
+\begin{verbatim}
+Data: https://id.gs1.org/01/12312312312333/22/ABC%2d123?99=XYZ%2f987#test
+Options:
+Encoder: gs1dlqrcode
+\end{verbatim}
+
+\hypertarget{gs1-128}{%
+\subsubsection{GS1-128}\label{gs1-128}}
\textbf{GS1-128} is an implementation of the
\protect\hyperlink{code-128}{Code 128} barcode symbology which carries
@@ -1919,16 +2740,17 @@ Variants:
composite 2D component is required.
\item
\protect\hyperlink{ean-14}{EAN-14} is a variant of GS1-128 that should
- be used when encoding a fourteen-digit GTIN.
+ be used when encoding a lone fourteen-digit GTIN.
\item
\protect\hyperlink{sscc-18}{SSCC-18} is a variant of GS1-128 that
- should be used when encoding an eighteen-digit SSCC.
+ should be used when encoding a lone eighteen-digit SSCC.
\end{itemize}
Standards: ISO/IEC 15417, ANSI/AIM BC4-1999 ISS, BS EN 799, GS1 General
Specifications.
-\paragraph{Data and Options}\label{data-and-options-24}
+\hypertarget{data-and-options-32}{%
+\paragraph{Data and Options}\label{data-and-options-32}}
\begin{itemize}
\tightlist
@@ -1937,14 +2759,24 @@ Specifications.
\protect\hyperlink{gs1-application-identifier-standard-format}{GS1
Application Identifier standard format}.
\item
- The \textbf{linkagea} option specifies that the symbol includes a
- \emph{CC-A} or \emph{CC-B} GS1 composite 2D component.
+ Note that it is not necessary to specify \emph{FNC1} characters since
+ the encoder will insert these automatically where necessary.
+\item
+ \emph{Deprecated.} The \textbf{dontlint} option disables GS1
+ Application Identifier syntax validation allowing images to be
+ generated for input that does not comply with GS1 standards.
\item
- The \textbf{linkagec} option specifies that the symbol includes a
- \emph{CC-C} GS1 composite 2D component.
+ \emph{Deprecated: For internal use.} The \textbf{linkagea} option
+ specifies that the symbol includes a \emph{CC-A} or \emph{CC-B} GS1
+ composite 2D component.
+\item
+ \emph{Deprecated: For internal use.} The \textbf{linkagec} option
+ specifies that the symbol includes a \emph{CC-C} GS1 composite 2D
+ component.
\end{itemize}
-\paragraph{Examples}\label{examples-18}
+\hypertarget{examples-22}{%
+\paragraph{Examples}\label{examples-22}}
GTIN \emph{95012345678903}; Weight \emph{0.123kg}:
@@ -1967,149 +2799,61 @@ Encoder: gs1-128
\includegraphics{images/ean128-2.eps}
-\hypertarget{ean-14}{\subsubsection{EAN-14}\label{ean-14}}
+\hypertarget{gs1-dotcode}{%
+\subsubsection{GS1 DotCode}\label{gs1-dotcode}}
-\textbf{EAN-14} is an implementation of the
-\protect\hyperlink{gs1-128}{GS1-128} barcode symbology with \emph{AI
-(01)} that is typically used to encode a GTIN-14.
-
-Also known as: UCC-14.
+\textbf{GS1 DotCode} is an implementation of the
+\protect\hyperlink{dotcode}{DotCode} barcode symbology with
+\protect\hyperlink{gs1-application-identifier-standard-format}{GS1
+formatted} data.
-Standards: ISO/IEC 15417, ANSI/AIM BC4-1999 ISS, BS EN 799, GS1 General
-Specifications.
+Standards: AIM - ISS DotCode, GS1 General Specifications.
-\paragraph{Data and Options}\label{data-and-options-25}
+\hypertarget{data-and-options-33}{%
+\paragraph{Data and Options}\label{data-and-options-33}}
\begin{itemize}
\tightlist
\item
The data field input is provided in
\protect\hyperlink{gs1-application-identifier-standard-format}{GS1
- Application Identifier standard format} and must be a solitary
- \emph{AI (01)} with thirteen or fourteen digits of a GTIN, i.e.
- \texttt{(01)...}.
-\item
- Arbitrary spacing may be placed between the digits to format the human
- readable text without interfering with the encoded data.
-\item
- If thirteen digits of primary data are supplied then the check digit
- is calculated automatically. Otherwise the provided check digit must
- be correct.
-\end{itemize}
-
-\paragraph{Examples}\label{examples-19}
-
-Identical symbols, input provided with and without a check digit:
-
-\begin{verbatim}
-Data: (01)04601234567893
-Options: includetext
-Encoder: ean14
-\end{verbatim}
-
-\begin{verbatim}
-Data: (01)0460123456789
-Options: includetext
-Encoder: ean14
-\end{verbatim}
-
-\includegraphics{images/ean14-1.eps}
-
-\hypertarget{itf-14}{\subsubsection{ITF-14}\label{itf-14}}
-
-\textbf{ITF-14} is an implementation of the
-\protect\hyperlink{interleaved-2-of-5}{Interleaved 2 of 5} barcode
-symbology that is typically used to encode a GTIN-14, GTIN-13 or
-GTIN-12.
-
-Also known as: UPC Shipping Container Symbol, SCS, UPC Case Code.
-
-Standards: ISO/IEC 16390, ANSI/AIM BC2-1995 USS, BS EN 801, GS1 General
-Specifications.
-
-\paragraph{Data and Options}\label{data-and-options-26}
-
-\begin{itemize}
-\tightlist
+ Application Identifier standard format}.
\item
- The data consists of either thirteen or fourteen digits.
+ Note that it is not necessary to specify \emph{FNC1} characters since
+ the encoder will insert these automatically where necessary.
\item
- Arbitrary spacing may be placed between the digits to format the human
- readable text without interfering with the encoded data.
+ \emph{Deprecated.} The \textbf{dontlint} option disables GS1
+ Application Identifier syntax validation allowing images to be
+ generated for input that does not comply with GS1 standards.
\item
- If thirteen digits are supplied then the check digit is calculated
- automatically. Otherwise the provided check digit must be correct.
-\end{itemize}
-
-\paragraph{Examples}\label{examples-20}
-
-Identical symbols, input provided with and without a check digit:
-
-\begin{verbatim}
-Data: 04601234567893
-Options: includetext
-Encoder: itf14
-\end{verbatim}
-
-\begin{verbatim}
-Data: 0460123456789
-Options: includetext
-Encoder: itf14
-\end{verbatim}
-
-\includegraphics{images/itf-14-1.eps}
-
-\hypertarget{sscc-18}{\subsubsection{SSCC-18}\label{sscc-18}}
-
-\textbf{SSCC-18} is an implementation of the
-\protect\hyperlink{gs1-128}{GS1-128} barcode symbology with \emph{AI
-(00)} that is typically used to encode an eighteen-digit shipping
-container serial number.
-
-Also known as: EAN-18, NVE.
-
-Standards: ISO/IEC 15417, ANSI/AIM BC4-1999 ISS, BS EN 799, GS1 General
-Specifications.
-
-\paragraph{Data and Options}\label{data-and-options-27}
-
-\begin{itemize}
-\tightlist
+ The \textbf{ratio} is used to specify the aspect ratio of the symbol.
+ The default is 1.5.
\item
- The data field input is provided in
- \protect\hyperlink{gs1-application-identifier-standard-format}{GS1
- Application Identifier standard format} and must be a solitary
- \emph{AI (00)} with seventeen or eighteen digits of a Serial Shipping
- Container Code, i.e. \texttt{(00)0...}.
-\item
- Arbitrary spacing may be placed between the digits to format the human
- readable text without interfering with the encoded data.
+ The \textbf{columns} and \textbf{rows} options are used to specify the
+ size of the symbol. When these are not specified a symbol is generated
+ that maintains the selected aspect ratio.
\item
- The mandatory check digit is calculated automatically and any user
- provided check digit is discarded.
+ \emph{Deprecated: Use only if performance is a concern.} The
+ \textbf{fast} option is used to enable the optional high-speed symbol
+ masking algorithm.
\end{itemize}
-\paragraph{Example}\label{example-4}
-
-Identical symbols, input provided with and without a check digit:
-
-\begin{verbatim}
-Data: (00)006141411234567890
-Options: includetext
-Encoder: sscc18
-\end{verbatim}
+\hypertarget{examples-23}{%
+\paragraph{Examples}\label{examples-23}}
\begin{verbatim}
-Data: (00)00614141123456789
-Options: includetext
-Encoder: sscc18
+Data: (235)5vBZIF%!<B;?oa%(01)01234567890128(8008)19052001
+Options: rows=16
+Encoder: gs1dotcode
\end{verbatim}
-\includegraphics{images/sscc18-1.eps}
+\includegraphics{images/gs1dotcode-1.eps}
-\subsection{GS1 DataBar Family}\label{gs1-databar-family}
+\hypertarget{gs1-databar-family}{%
+\subsection{GS1 DataBar Family}\label{gs1-databar-family}}
-\hypertarget{gs1-databar-omnidirectional}{\subsubsection{GS1 DataBar
+\hypertarget{gs1-databar-omnidirectional}{%
+\subsubsection{GS1 DataBar
Omnidirectional}\label{gs1-databar-omnidirectional}}
\textbf{GS1 DataBar Omnidirectional} is a fixed-length, linear barcode
@@ -2134,26 +2878,25 @@ Variants:
Standards: ISO/IEC 24724, ITS Reduced Space Symbology (RSS), AIM ISS -
Reduced Space Symbology (RSS), GS1 General Specifications.
-\paragraph{Data and Options}\label{data-and-options-28}
+\hypertarget{data-and-options-34}{%
+\paragraph{Data and Options}\label{data-and-options-34}}
\begin{itemize}
\tightlist
\item
- The data field input is provided in
- \protect\hyperlink{gs1-application-identifier-standard-format}{GS1
- Application Identifier standard format} and must be a solitary
- \emph{AI (01)} with thirteen or fourteen digits of a GTIN, i.e.
- \texttt{(01)...}.
+ The data field input is must be a solitary \emph{AI (01)} with
+ thirteen or fourteen digits of a GTIN, i.e. \texttt{(01)...}.
\item
If thirteen digits of \emph{AI (01)} data are supplied then the check
- digit is calculated automatically, otherwise the digits are encoded as
- supplied.
+ digit is calculated automatically, otherwise the provided check digit
+ will be verified.
\item
- The \textbf{linkage} option signifies the presence of a GS1 composite
- 2D component.
+ \emph{Deprecated: For internal use.} The \textbf{linkage} option
+ signifies the presence of a GS1 composite 2D component.
\end{itemize}
-\paragraph{Examples}\label{examples-21}
+\hypertarget{examples-24}{%
+\paragraph{Examples}\label{examples-24}}
Identical symbols, input provided with and without a check digit:
@@ -2171,8 +2914,8 @@ Encoder: databaromni
\includegraphics{images/databaromni-1.eps}
-\hypertarget{gs1-databar-stacked-omnidirectional}{\subsubsection{GS1
-DataBar Stacked
+\hypertarget{gs1-databar-stacked-omnidirectional}{%
+\subsubsection{GS1 DataBar Stacked
Omnidirectional}\label{gs1-databar-stacked-omnidirectional}}
\textbf{GS1 DataBar Stacked Omnidirectional} is a fixed-length, stacked
@@ -2200,26 +2943,25 @@ Variants:
Standards: ISO/IEC 24724, ITS Reduced Space Symbology (RSS), AIM ISS -
Reduced Space Symbology (RSS), GS1 General Specifications.
-\paragraph{Data and Options}\label{data-and-options-29}
+\hypertarget{data-and-options-35}{%
+\paragraph{Data and Options}\label{data-and-options-35}}
\begin{itemize}
\tightlist
\item
- The data field input is provided in
- \protect\hyperlink{gs1-application-identifier-standard-format}{GS1
- Application Identifier standard format} and must be a solitary
- \emph{AI (01)} with thirteen or fourteen digits of a GTIN, i.e.
- \texttt{(01)...}.
+ The data field input must be a solitary \emph{AI (01)} with thirteen
+ or fourteen digits of a GTIN, i.e. \texttt{(01)...}.
\item
If thirteen digits of \emph{AI (01)} data are supplied then the check
- digit is calculated automatically, otherwise the digits are encoded as
- supplied.
+ digit is calculated automatically, otherwise the provided check digit
+ will be verified.
\item
- The \textbf{linkage} option signifies the presence of a GS1 composite
- 2D component.
+ \emph{Deprecated: For internal use.} The \textbf{linkage} option
+ signifies the presence of a GS1 composite 2D component.
\end{itemize}
-\paragraph{Examples}\label{examples-22}
+\hypertarget{examples-25}{%
+\paragraph{Examples}\label{examples-25}}
Identical symbols, input provided with and without a check digit:
@@ -2237,8 +2979,8 @@ Encoder: databarstackedomni
\includegraphics{images/databarstackedomni-1.eps}
-\hypertarget{gs1-databar-expanded}{\subsubsection{GS1 DataBar
-Expanded}\label{gs1-databar-expanded}}
+\hypertarget{gs1-databar-expanded}{%
+\subsubsection{GS1 DataBar Expanded}\label{gs1-databar-expanded}}
\textbf{GS1 DataBar Expanded} is a variable-length, linear barcode
symbology that can be used to encode a GTIN-14 alongside a number of
@@ -2258,12 +3000,17 @@ Variants:
\protect\hyperlink{gs1-composite-symbols}{GS1 DataBar Expanded
Composite} is a variant of GS1 DataBar Expanded that should be used
when a CC-A or CC-B GS1 composite 2D component is required.
+\item
+ \protect\hyperlink{gs1-north-american-coupon-code}{GS1 North American
+ Coupon Code} is an applicaiton of GS1 DataBar Expanded for use with a
+ paperless coupon system.
\end{itemize}
Standards: ISO/IEC 24724, ITS Reduced Space Symbology (RSS), AIM ISS -
Reduced Space Symbology (RSS), GS1 General Specifications.
-\paragraph{Data and Options}\label{data-and-options-30}
+\hypertarget{data-and-options-36}{%
+\paragraph{Data and Options}\label{data-and-options-36}}
\begin{itemize}
\tightlist
@@ -2272,6 +3019,13 @@ Reduced Space Symbology (RSS), GS1 General Specifications.
\protect\hyperlink{gs1-application-identifier-standard-format}{GS1
Application Identifier standard format}.
\item
+ Note that it is not necessary to specify \emph{FNC1} characters since
+ the encoder will insert these automatically where necessary.
+\item
+ \emph{Deprecated.} The \textbf{dontlint} option disables GS1
+ Application Identifier syntax validation allowing images to be
+ generated for input that does not comply with GS1 standards.
+\item
If the data contains a number of application identifiers matching any
of the specifications below then they should be provided in this given
order for maximum encoding efficiency:
@@ -2296,11 +3050,12 @@ Reduced Space Symbology (RSS), GS1 General Specifications.
\texttt{(01)...}
\end{itemize}
\item
- The \textbf{linkage} option signifies the presence of a GS1 composite
- 2D component.
+ \emph{Deprecated: For internal use.} The \textbf{linkage} option
+ signifies the presence of a GS1 composite 2D component.
\end{itemize}
-\paragraph{Examples}\label{examples-23}
+\hypertarget{examples-26}{%
+\paragraph{Examples}\label{examples-26}}
\begin{verbatim}
Data: (01)95012345678903(3103)000123
@@ -2310,8 +3065,9 @@ Encoder: databarexpanded
\includegraphics{images/databarexpanded-1.eps}
-\hypertarget{gs1-databar-expanded-stacked}{\subsubsection{GS1 DataBar
-Expanded Stacked}\label{gs1-databar-expanded-stacked}}
+\hypertarget{gs1-databar-expanded-stacked}{%
+\subsubsection{GS1 DataBar Expanded
+Stacked}\label{gs1-databar-expanded-stacked}}
\textbf{GS1 DataBar Expanded Stacked} is a variable-length,
stacked-linear barcode symbology that can be used to encode a GTIN-14
@@ -2332,12 +3088,17 @@ Variants:
\protect\hyperlink{gs1-composite-symbols}{GS1 DataBar Expanded Stacked
Composite} is a variant of GS1 DataBar Expanded Stacked that should be
used when a CC-A or CC-B GS1 composite 2D component is required.
+\item
+ \protect\hyperlink{gs1-north-american-coupon-code}{GS1 North American
+ Coupon Code} is an applicaiton of GS1 DataBar Expanded for use with a
+ paperless coupon system.
\end{itemize}
Standards: ISO/IEC 24724, ITS Reduced Space Symbology (RSS), AIM ISS -
Reduced Space Symbology (RSS), GS1 General Specifications.
-\paragraph{Data and Options}\label{data-and-options-31}
+\hypertarget{data-and-options-37}{%
+\paragraph{Data and Options}\label{data-and-options-37}}
\begin{itemize}
\tightlist
@@ -2346,6 +3107,13 @@ Reduced Space Symbology (RSS), GS1 General Specifications.
\protect\hyperlink{gs1-application-identifier-standard-format}{GS1
Application Identifier standard format}.
\item
+ Note that it is not necessary to specify \emph{FNC1} characters since
+ the encoder will insert these automatically where necessary.
+\item
+ \emph{Deprecated.} The \textbf{dontlint} option disables GS1
+ Application Identifier syntax validation allowing images to be
+ generated for input that does not comply with GS1 standards.
+\item
If the data contains a number of application identifiers matching any
of the specifications below then they should be provided in this given
order for maximum encoding efficiency:
@@ -2374,11 +3142,12 @@ Reduced Space Symbology (RSS), GS1 General Specifications.
segments per row which must be an even number. The default is
\emph{4}.
\item
- The \textbf{linkage} option signifies the presence of a GS1 composite
- 2D component.
+ \emph{Deprecated: For internal use.} The \textbf{linkage} option
+ signifies the presence of a GS1 composite 2D component.
\end{itemize}
-\paragraph{Examples}\label{examples-24}
+\hypertarget{examples-27}{%
+\paragraph{Examples}\label{examples-27}}
\begin{verbatim}
Data: (01)95012345678903(3103)000123
@@ -2388,8 +3157,8 @@ Encoder: databarexpandedstacked
\includegraphics{images/databarexpandedstacked-1.eps}
-\hypertarget{gs1-databar-truncated}{\subsubsection{GS1 DataBar
-Truncated}\label{gs1-databar-truncated}}
+\hypertarget{gs1-databar-truncated}{%
+\subsubsection{GS1 DataBar Truncated}\label{gs1-databar-truncated}}
\textbf{GS1 DataBar Truncated} is a fixed-length, linear barcode
symbology that can be used to encode a GTIN-14 for in-house
@@ -2414,25 +3183,25 @@ Variants:
Standards: ISO/IEC 24724, ITS Reduced Space Symbology (RSS), AIM ISS -
Reduced Space Symbology (RSS), GS1 General Specifications.
-\paragraph{Data and Options}\label{data-and-options-32}
+\hypertarget{data-and-options-38}{%
+\paragraph{Data and Options}\label{data-and-options-38}}
\begin{itemize}
\tightlist
\item
- The data field input is provided in
- \protect\hyperlink{gs1-application-identifier-standard-format}{GS1
- Application Identifier standard format} and must be a solitary
- \emph{AI (01)} with 13 or 14 digits of a GTIN, i.e. \texttt{(01)...}.
+ The data field input must be a solitary \emph{AI (01)} with 13 or 14
+ digits of a GTIN, i.e. \texttt{(01)...}.
\item
If thirteen digits of \emph{AI (01)} data are supplied then the check
- digit is calculated automatically, otherwise the digits are encoded as
- supplied.
+ digit is calculated automatically, otherwise the provided check digit
+ will be verified.
\item
- The \textbf{linkage} option signifies the presence of a GS1 composite
- 2D component.
+ \emph{Deprecated: For internal use.} The \textbf{linkage} option
+ signifies the presence of a GS1 composite 2D component.
\end{itemize}
-\paragraph{Examples}\label{examples-25}
+\hypertarget{examples-28}{%
+\paragraph{Examples}\label{examples-28}}
Identical symbols, input provided with and without a check digit:
@@ -2450,8 +3219,8 @@ Encoder: databartruncated
\includegraphics{images/databartruncated-1.eps}
-\hypertarget{gs1-databar-stacked}{\subsubsection{GS1 DataBar
-Stacked}\label{gs1-databar-stacked}}
+\hypertarget{gs1-databar-stacked}{%
+\subsubsection{GS1 DataBar Stacked}\label{gs1-databar-stacked}}
\textbf{GS1 DataBar Stacked} is a fixed-length, stacked linear barcode
symbology that can be used to encode a GTIN-14 for in-house
@@ -2476,26 +3245,25 @@ Variants:
Standards: ISO/IEC 24724, ITS Reduced Space Symbology (RSS), AIM ISS -
Reduced Space Symbology (RSS), GS1 General Specifications.
-\paragraph{Data and Options}\label{data-and-options-33}
+\hypertarget{data-and-options-39}{%
+\paragraph{Data and Options}\label{data-and-options-39}}
\begin{itemize}
\tightlist
\item
- The data field input is provided in
- \protect\hyperlink{gs1-application-identifier-standard-format}{GS1
- Application Identifier standard format} and must be a solitary
- \emph{AI (01)} with thirteen or fourteen digits of a GTIN, i.e.
- \texttt{(01)...}.
+ The data field input must be a solitary \emph{AI (01)} with thirteen
+ or fourteen digits of a GTIN, i.e. \texttt{(01)...}.
\item
If thirteen digits of \emph{AI (01)} data are supplied then the check
- digit is calculated automatically, otherwise the digits are encoded as
- supplied.
+ digit is calculated automatically, otherwise the provided check digit
+ will be verified.
\item
- The \textbf{linkage} option signifies the presence of a GS1 composite
- 2D component.
+ \emph{Deprecated: For internal use.} The \textbf{linkage} option
+ signifies the presence of a GS1 composite 2D component.
\end{itemize}
-\paragraph{Examples}\label{examples-26}
+\hypertarget{examples-29}{%
+\paragraph{Examples}\label{examples-29}}
Identical symbols, input provided with and without a check digit:
@@ -2513,8 +3281,8 @@ Encoder: databarstacked
\includegraphics{images/databarstacked-1.eps}
-\hypertarget{gs1-databar-limited}{\subsubsection{GS1 DataBar
-Limited}\label{gs1-databar-limited}}
+\hypertarget{gs1-databar-limited}{%
+\subsubsection{GS1 DataBar Limited}\label{gs1-databar-limited}}
\textbf{GS1 DataBar Limited} is fixed-length, linear barcode symbology
that can be used to encode a GTIN-14 beginning with \emph{0} or \emph{1}
@@ -2535,27 +3303,26 @@ Variants:
Standards: ISO/IEC 24724, ITS Reduced Space Symbology (RSS), AIM ISS -
Reduced Space Symbology (RSS), GS1 General Specifications.
-\paragraph{Data and Options}\label{data-and-options-34}
+\hypertarget{data-and-options-40}{%
+\paragraph{Data and Options}\label{data-and-options-40}}
\begin{itemize}
\tightlist
\item
- The data field input is provided in
- \protect\hyperlink{gs1-application-identifier-standard-format}{GS1
- Application Identifier standard format} and must be a solitary
- \emph{AI (01)} with thirteen or fourteen digits of a GTIN starting
- with \emph{0} or \emph{1}, i.e. \texttt{(01)0...} or
- \texttt{(01)1...}.
+ The data field input must be a solitary \emph{AI (01)} with thirteen
+ or fourteen digits of a GTIN starting with \emph{0} or \emph{1}, i.e.
+ \texttt{(01)0...} or \texttt{(01)1...}.
\item
If thirteen digits of \emph{AI (01)} data are supplied then the check
- digit is calculated automatically, otherwise the digits are encoded as
- supplied.
+ digit is calculated automatically, otherwise the provided check digit
+ will be verified.
\item
- The \textbf{linkage} option signifies the presence of a GS1 composite
- 2D component.
+ \emph{Deprecated: For internal use.} The \textbf{linkage} option
+ signifies the presence of a GS1 composite 2D component.
\end{itemize}
-\paragraph{Examples}\label{examples-27}
+\hypertarget{examples-30}{%
+\paragraph{Examples}\label{examples-30}}
Identical symbols, input provided with and without a check digit:
@@ -2573,15 +3340,59 @@ Encoder: databarlimited
\includegraphics{images/databarlimited-1.eps}
-\subsection{Postal Symbols}\label{postal-symbols}
+\hypertarget{gs1-north-american-coupon-code}{%
+\subsubsection{GS1 North American Coupon
+Code}\label{gs1-north-american-coupon-code}}
+
+\textbf{GS1 North American Coupon Code} is an implementation of the
+\protect\hyperlink{gs1-databar-expanded}{GS1 DataBar Expanded} barcode
+symbology with AI (8110) that is used as a paperless coupon system at
+point of sale.
+
+Also known as: GS1 DataBar Coupon, U.S. Coupon Code.
+
+Standards: North American Coupon Application Guideline Using GS1 DataBar
+Expanded Symbols, ISO/IEC 24724, GS1 General Specifications.
+
+\hypertarget{data-and-options-41}{%
+\paragraph{Data and Options}\label{data-and-options-41}}
+
+\begin{itemize}
+\tightlist
+\item
+ The data field input is provided in
+ \protect\hyperlink{gs1-application-identifier-standard-format}{GS1
+ Application Identifier standard format} and must be a solitary AI
+ (8110).
+\item
+ The \textbf{segments} option is used to specify the maximum number of
+ segments per row which must be an even number. The default is
+ \emph{4}.
+\end{itemize}
+
+\hypertarget{examples-31}{%
+\paragraph{Examples}\label{examples-31}}
+
+\begin{verbatim}
+Data: (8110)106141416543213500110000310123196000
+Options: includetext segments=8
+Encoder: gs1northamericancoupon
+\end{verbatim}
+
+\includegraphics{images/gs1northamericancoupon-1.eps}
+
+\hypertarget{postal-symbols}{%
+\subsection{Postal Symbols}\label{postal-symbols}}
+\hypertarget{australia-post-4-state-customer-code}{%
\subsubsection{Australia Post 4 State Customer
-Code}\label{australia-post-4-state-customer-code}
+Code}\label{australia-post-4-state-customer-code}}
The \textbf{Australia Post 4 State Customer Code} is a barcode used by
the Australian Postal Service to encode the data on letter mail.
-\paragraph{Data and Options}\label{data-and-options-35}
+\hypertarget{data-and-options-42}{%
+\paragraph{Data and Options}\label{data-and-options-42}}
\begin{itemize}
\tightlist
@@ -2607,20 +3418,23 @@ the Australian Postal Service to encode the data on letter mail.
Otherwise the customer information field is encoded using the
default character encoding, \texttt{custinfoenc=character}, which
permits any of the following characters:
- \item
- Upper case letters \texttt{A-Z}
- \item
- Lower case letters \texttt{a-z}
- \item
- Digits \texttt{0-9}
- \item
- Symbols \texttt{space} and \texttt{\#}
+
+ \begin{itemize}
+ \tightlist
+ \item
+ Upper case letters \texttt{A-Z}
+ \item
+ Lower case letters \texttt{a-z}
+ \item
+ Digits \texttt{0-9}
+ \item
+ Symbols \texttt{space} and \texttt{\#}
+ \end{itemize}
\end{itemize}
-\item
- The maditory Reed-Solomon check bars are calculated automatically.
\end{itemize}
-\paragraph{Examples}\label{examples-28}
+\hypertarget{examples-32}{%
+\paragraph{Examples}\label{examples-32}}
FCC 62 symbol with character customer data:
@@ -2642,7 +3456,8 @@ Encoder: auspost
\includegraphics{images/auspost-2.eps}
-\subsubsection{Deutsche Post Identcode}\label{deutsche-post-identcode}
+\hypertarget{deutsche-post-identcode}{%
+\subsubsection{Deutsche Post Identcode}\label{deutsche-post-identcode}}
\textbf{Deutsche Post Identcode} is an implementation of the
\protect\hyperlink{interleaved-2-of-5}{Interleaved 2 of 5} barcode
@@ -2650,7 +3465,8 @@ symbology that is used by German Post for mail routing.
Also known as: DHL Identcode.
-\paragraph{Data and Options}\label{data-and-options-36}
+\hypertarget{data-and-options-43}{%
+\paragraph{Data and Options}\label{data-and-options-43}}
\begin{itemize}
\tightlist
@@ -2671,10 +3487,11 @@ Also known as: DHL Identcode.
\end{itemize}
\item
If eleven digits are supplied then the check digit is calculated
- automatically. Otherwise the provided check digit must be correct.
+ automatically. Otherwise the provided check digit will be verified.
\end{itemize}
-\paragraph{Example}\label{example-5}
+\hypertarget{example-8}{%
+\paragraph{Example}\label{example-8}}
Identical symbols, input provided with an without a check digit:
@@ -2692,7 +3509,8 @@ Encoder: identcode
\includegraphics{images/identcode-1.eps}
-\subsubsection{Deutsche Post Leitcode}\label{deutsche-post-leitcode}
+\hypertarget{deutsche-post-leitcode}{%
+\subsubsection{Deutsche Post Leitcode}\label{deutsche-post-leitcode}}
The \textbf{Deutsche Post Leitcode} barcode symbology is an
implementation of the \protect\hyperlink{interleaved-2-of-5}{Interleaved
@@ -2700,7 +3518,8 @@ implementation of the \protect\hyperlink{interleaved-2-of-5}{Interleaved
Also known as: DHL Leitcode.
-\paragraph{Data and Options}\label{data-and-options-37}
+\hypertarget{data-and-options-44}{%
+\paragraph{Data and Options}\label{data-and-options-44}}
\begin{itemize}
\tightlist
@@ -2723,10 +3542,11 @@ Also known as: DHL Leitcode.
\end{itemize}
\item
If thirteen digits are supplied then the check digit is calculated
- automatically. Otherwise the provided check digit must be correct.
+ automatically. Otherwise the provided check digit will be verified.
\end{itemize}
-\paragraph{Examples}\label{examples-29}
+\hypertarget{examples-33}{%
+\paragraph{Examples}\label{examples-33}}
Identical symbols, input provided with and without a check digit:
@@ -2744,13 +3564,15 @@ Encoder: leitcode
\includegraphics{images/leitcode-1.eps}
+\hypertarget{japan-post-4-state-barcode}{%
\subsubsection{Japan Post 4 State
-Barcode}\label{japan-post-4-state-barcode}
+Barcode}\label{japan-post-4-state-barcode}}
The \textbf{Japan Post 4 state barcode} symbology is used by the Japan
Post service to encode the delivery point identifier on letter mail.
-\paragraph{Data and Options}\label{data-and-options-38}
+\hypertarget{data-and-options-45}{%
+\paragraph{Data and Options}\label{data-and-options-45}}
\begin{itemize}
\tightlist
@@ -2768,7 +3590,8 @@ Post service to encode the delivery point identifier on letter mail.
\end{itemize}
\end{itemize}
-\paragraph{Example}\label{example-6}
+\hypertarget{example-9}{%
+\paragraph{Example}\label{example-9}}
\begin{verbatim}
Data: 6540123789-A-K-Z
@@ -2778,17 +3601,19 @@ Encoder: japanpost
\includegraphics{images/japanpost-1.eps}
-\subsubsection{MaxiCode}\label{maxicode}
+\hypertarget{maxicode}{%
+\subsubsection{MaxiCode}\label{maxicode}}
The \textbf{MaxiCode} barcode symbology is a 2D barcode based on a
hexagonal matrix surrounding a bulls eye pattern. It can encode a
structured carrier message and full 256 character extended-ASCII.
-Also known as: UPS Code, Code 6.
+Also known as: UPS Code, Code 6, Dense Code.
Standards: ISO/IEC 16023, ANSI/AIM BC10 - ISS MaxiCode.
-\paragraph{Data and Options}\label{data-and-options-39}
+\hypertarget{data-and-options-46}{%
+\paragraph{Data and Options}\label{data-and-options-46}}
\begin{itemize}
\tightlist
@@ -2805,9 +3630,11 @@ Standards: ISO/IEC 16023, ANSI/AIM BC10 - ISS MaxiCode.
\texttt{mode=3} - Formatted data containing a Structured Carrier
Message with an alphanumeric (international) postal code.
\item
- \texttt{mode=4} - Unstructured data using standard error correction.
+ \texttt{mode=4} - Unstructured extended ASCII data using standard
+ error correction.
\item
- \texttt{mode=5} - Unstructured data using enhanced error correction.
+ \texttt{mode=5} - Unstructured extended ASCII data using enhanced
+ error correction.
\item
\texttt{mode=6} - Barcode reader programming.
\end{itemize}
@@ -2817,10 +3644,23 @@ Standards: ISO/IEC 16023, ANSI/AIM BC10 - ISS MaxiCode.
enhanced error correction, otherwise it will select \texttt{mode=4}
which provides standard error correction.
\item
+ The default interpretation of data by readers is in accordance with
+ ISO/IEC 8859-1. When supported by the receiver characters from other
+ code pages can be encoded using Extended Channel Interpretation (ECI).
+\item
When the \textbf{parse} option is specified, any instances of
\texttt{\^{}NNN} in the data field are replaced with their equivalent
ASCII value, useful for specifying unprintable characters.
\item
+ When the \textbf{parsefnc} option is specified, non-data function
+ characters can be specified by escape sequences:
+
+ \begin{itemize}
+ \tightlist
+ \item
+ \texttt{\^{}ECI000000} to \texttt{\^{}ECI999999}: ECI indicators
+ \end{itemize}
+\item
If \texttt{mode=4}, \texttt{mode=5} or \texttt{mode=6} the data field
may contain any extended ASCII data.
\item
@@ -2846,7 +3686,8 @@ Standards: ISO/IEC 16023, ANSI/AIM BC10 - ISS MaxiCode.
by the structured carrier message.
\end{itemize}
-\paragraph{Examples}\label{examples-30}
+\hypertarget{examples-34}{%
+\paragraph{Examples}\label{examples-34}}
\begin{verbatim}
Data: This is MaxiCode
@@ -2886,16 +3727,18 @@ Encoder: maxicode
\includegraphics{images/maxicode-4.eps}
+\hypertarget{royal-mail-4-state-customer-code}{%
\subsubsection{Royal Mail 4 State Customer
-Code}\label{royal-mail-4-state-customer-code}
+Code}\label{royal-mail-4-state-customer-code}}
The \textbf{Royal Mail 4 State Customer Code} is a barcode symbology
used by the British Postal Service to encode the postcode and delivery
point identifier on letter mail.
-Also known as: RM4SCC, CBC.
+Also known as: RM4SCC, CBC, BPO 4 State Code
-\paragraph{Data and Options}\label{data-and-options-40}
+\hypertarget{data-and-options-47}{%
+\paragraph{Data and Options}\label{data-and-options-47}}
\begin{itemize}
\tightlist
@@ -2915,7 +3758,8 @@ Also known as: RM4SCC, CBC.
be included in the data field
\end{itemize}
-\paragraph{Example}\label{example-7}
+\hypertarget{example-10}{%
+\paragraph{Example}\label{example-10}}
\begin{verbatim}
Data: LE28HS9Z
@@ -2925,16 +3769,53 @@ Encoder: royalmail
\includegraphics{images/rm4scc-1.eps}
+\hypertarget{royal-mail-mailmark}{%
+\subsubsection{Royal Mail Mailmark}\label{royal-mail-mailmark}}
+
+\textbf{Royal Mail Mailmark} is an implementation of the
+\protect\hyperlink{data-matrix}{Data Matrix} (ECC 200) barcode symbology
+for application within the Royal Mail postal system.
+
+Standards: Royal Mail Mailmark Barcode Definition Document
+
+\hypertarget{data-and-options-48}{%
+\paragraph{Data and Options}\label{data-and-options-48}}
+
+\begin{itemize}
+\tightlist
+\item
+ The data field input consists of 45 characters of Mailmark structured
+ data (including required space padding) followed by variable-length,
+ free-formatted customer data.
+\item
+ Note: Due to the fixed-length field format of the message data it is
+ important to carefully preserve spaces in the data field.
+\item
+ The mandatory \textbf{type} option is used to specify the size of the
+ symbol, either \texttt{7}, \texttt{9} or \texttt{29}.
+\end{itemize}
+
+\hypertarget{example-11}{%
+\paragraph{Example}\label{example-11}}
+
+\begin{verbatim}
+Data: JGB 012100123412345678AB19XY1A 0 www.xyz.com
+Options: type=29
+Encoder: mailmark
+\end{verbatim}
+
+\hypertarget{royal-tnt-post-4-state-barcode}{%
\subsubsection{Royal TNT Post 4 state
-barcode}\label{royal-tnt-post-4-state-barcode}
+barcode}\label{royal-tnt-post-4-state-barcode}}
The \textbf{Royal TNT Post 4 state barcode} symbology is used by the
Dutch Postal Service to encode the delivery point identifier on letter
mail.
-Also known as: KIX.
+Also known as: KIX, Klant IndeX.
-\paragraph{Data and Options}\label{data-and-options-41}
+\hypertarget{data-and-options-49}{%
+\paragraph{Data and Options}\label{data-and-options-49}}
\begin{itemize}
\tightlist
@@ -2950,7 +3831,8 @@ Also known as: KIX.
\end{itemize}
\end{itemize}
-\paragraph{Example}\label{example-8}
+\hypertarget{example-12}{%
+\paragraph{Example}\label{example-12}}
\begin{verbatim}
Data: 1231FZ13XHS
@@ -2960,7 +3842,8 @@ Encoder: kix
\includegraphics{images/kix-1.eps}
-\subsubsection{USPS Intelligent Mail}\label{usps-intelligent-mail}
+\hypertarget{usps-intelligent-mail}{%
+\subsubsection{USPS Intelligent Mail}\label{usps-intelligent-mail}}
The \textbf{USPS Intelligent Mail} barcode is used by the US Postal
service to encode the delivery and sender information on letter mail.
@@ -2969,7 +3852,8 @@ Also known as: USPS OneCode.
Standards: USPS-STD-11.
-\paragraph{Data and Options}\label{data-and-options-42}
+\hypertarget{data-and-options-50}{%
+\paragraph{Data and Options}\label{data-and-options-50}}
\begin{itemize}
\tightlist
@@ -2993,7 +3877,8 @@ Standards: USPS-STD-11.
be included in the data field.
\end{itemize}
-\paragraph{Example}\label{example-9}
+\hypertarget{example-13}{%
+\paragraph{Example}\label{example-13}}
\begin{verbatim}
Data: 0123456709498765432101234567891
@@ -3003,12 +3888,14 @@ Encoder: onecode
\includegraphics{images/onecode-1.eps}
-\subsubsection{USPS POSTNET}\label{usps-postnet}
+\hypertarget{usps-postnet}{%
+\subsubsection{USPS POSTNET}\label{usps-postnet}}
The \textbf{USPS POSTNET} barcode symbology is used by the US Postal
service to encode the ZIP code information on letter mail.
-\paragraph{Data and Options}\label{data-and-options-43}
+\hypertarget{data-and-options-51}{%
+\paragraph{Data and Options}\label{data-and-options-51}}
\begin{itemize}
\tightlist
@@ -3019,7 +3906,8 @@ service to encode the ZIP code information on letter mail.
included in the data field.
\end{itemize}
-\paragraph{Example}\label{example-10}
+\hypertarget{example-14}{%
+\paragraph{Example}\label{example-14}}
\begin{verbatim}
Data: 12345123412
@@ -3029,12 +3917,14 @@ Encoder: postnet
\includegraphics{images/postnet-1.eps}
-\subsubsection{USPS PLANET}\label{usps-planet}
+\hypertarget{usps-planet}{%
+\subsubsection{USPS PLANET}\label{usps-planet}}
The \textbf{USPS PLANET} barcode symbology is used by the US Postal
service to encode the ZIP code information on letter mail.
-\paragraph{Data and Options}\label{data-and-options-44}
+\hypertarget{data-and-options-52}{%
+\paragraph{Data and Options}\label{data-and-options-52}}
\begin{itemize}
\tightlist
@@ -3045,7 +3935,8 @@ service to encode the ZIP code information on letter mail.
included in the data field.
\end{itemize}
-\paragraph{Example}\label{example-11}
+\hypertarget{example-15}{%
+\paragraph{Example}\label{example-15}}
\begin{verbatim}
Data: 01234567890
@@ -3055,12 +3946,14 @@ Encoder: planet
\includegraphics{images/planet-1.eps}
-\subsubsection{USPS FIM Symbols}\label{usps-fim-symbols}
+\hypertarget{usps-fim-symbols}{%
+\subsubsection{USPS FIM Symbols}\label{usps-fim-symbols}}
The \textbf{USPS FIM} encoder is used to generate static predefined
barcode symbols.
-\paragraph{Data and Options}\label{data-and-options-45}
+\hypertarget{data-and-options-53}{%
+\paragraph{Data and Options}\label{data-and-options-53}}
\begin{itemize}
\tightlist
@@ -3080,7 +3973,8 @@ barcode symbols.
\end{itemize}
\end{itemize}
-\paragraph{Examples}\label{examples-31}
+\hypertarget{examples-35}{%
+\paragraph{Examples}\label{examples-35}}
A USPS FIM A symbol:
@@ -3122,16 +4016,19 @@ Encoder: symbol
\includegraphics{images/fimd-1.eps}
-\subsection{Pharmaceutical Symbols}\label{pharmaceutical-symbols}
+\hypertarget{pharmaceutical-symbols}{%
+\subsection{Pharmaceutical Symbols}\label{pharmaceutical-symbols}}
-\subsubsection{Italian Pharmacode}\label{italian-pharmacode}
+\hypertarget{italian-pharmacode}{%
+\subsubsection{Italian Pharmacode}\label{italian-pharmacode}}
\textbf{Italian Pharmacode} is a discrete, fixed length, self-checking
barcode symbology used for pharmaceutical products in Italy.
Also known as: Code 32, IMH, Radix 32.
-\paragraph{Data and Options}\label{data-and-options-46}
+\hypertarget{data-and-options-54}{%
+\paragraph{Data and Options}\label{data-and-options-54}}
\begin{itemize}
\tightlist
@@ -3141,10 +4038,11 @@ Also known as: Code 32, IMH, Radix 32.
omitted.
\item
The mandatory check digit is calculated automatically if it is not
- provided.
+ provided, otherwise the provided check digit is verified.
\end{itemize}
-\paragraph{Examples}\label{examples-32}
+\hypertarget{examples-36}{%
+\paragraph{Examples}\label{examples-36}}
Identical symbols, input provided with and without a check digit:
@@ -3162,12 +4060,13 @@ Encoder: code32
\includegraphics{images/code32-1.eps}
-\hypertarget{pharmacode}{\subsubsection{Pharmacode}\label{pharmacode}}
+\hypertarget{pharmacode}{%
+\subsubsection{Pharmacode}\label{pharmacode}}
\textbf{Pharmacode} is a binary barcode symbology that is used by the
Pharmaceutical industry.
-Also known as: Pharmaceutical Binary Code.
+Also known as: Pharmaceutical Binary Code. Laetus Code.
Variants:
@@ -3178,7 +4077,8 @@ Variants:
variant of the Pharmacode barcode.
\end{itemize}
-\paragraph{Data and Options}\label{data-and-options-47}
+\hypertarget{data-and-options-55}{%
+\paragraph{Data and Options}\label{data-and-options-55}}
\begin{itemize}
\tightlist
@@ -3191,7 +4091,8 @@ Variants:
wide bars and inter-bar spaces respectively.
\end{itemize}
-\paragraph{Example}\label{example-12}
+\hypertarget{example-16}{%
+\paragraph{Example}\label{example-16}}
\begin{verbatim}
Data: 117480
@@ -3201,13 +4102,14 @@ Encoder: pharmacode
\includegraphics{images/pharmacode-1.eps}
-\hypertarget{two-track-pharmacode}{\subsubsection{Two-Track
-Pharmacode}\label{two-track-pharmacode}}
+\hypertarget{two-track-pharmacode}{%
+\subsubsection{Two-Track Pharmacode}\label{two-track-pharmacode}}
\textbf{Two-Track Pharmacode} is a binary barcode symbology used by the
Pharmaceutical industry.
-Also known as: Two-track Pharmaceutical Binary Code.
+Also known as: Two-track Pharmaceutical Binary Code, Two-track Laetus
+Code.
Variants:
@@ -3218,7 +4120,8 @@ Variants:
Two-track Pharmacode barcode.
\end{itemize}
-\paragraph{Data and Options}\label{data-and-options-48}
+\hypertarget{data-and-options-56}{%
+\paragraph{Data and Options}\label{data-and-options-56}}
\begin{itemize}
\tightlist
@@ -3227,7 +4130,8 @@ Variants:
\texttt{64570080} inclusive.
\end{itemize}
-\paragraph{Example}\label{example-13}
+\hypertarget{example-17}{%
+\paragraph{Example}\label{example-17}}
\begin{verbatim}
Data: 117480
@@ -3237,7 +4141,8 @@ Encoder: pharmacode2
\includegraphics{images/pharmacode2-1.eps}
-\subsubsection{PZN}\label{pzn}
+\hypertarget{pzn}{%
+\subsubsection{PZN}\label{pzn}}
\textbf{PZN} is a discrete, fixed length, self-checking barcode
symbology used for pharmaceutical products in Germany.
@@ -3249,12 +4154,13 @@ Variants:
\begin{itemize}
\tightlist
\item
- PZN-7.
+ PZN7 is the seven-digit format.
\item
- PZN-8.
+ PZN8 is the eight-digit format.
\end{itemize}
-\paragraph{Data and Options}\label{data-and-options-49}
+\hypertarget{data-and-options-57}{%
+\paragraph{Data and Options}\label{data-and-options-57}}
\begin{itemize}
\tightlist
@@ -3265,13 +4171,15 @@ Variants:
The \textbf{pzn8} option specifies that a PZN8 symbol is required, in
which case the data field must contain seven digits or eight digits.
\item
- The mandatory check digit is calculated automatically if not provided.
+ The mandatory check digit is calculated automatically if not provided,
+ otherwise the provided check digit is verified.
\item
Note: by definition, not all six-digit or seven-digit number sequences
are valid inputs.
\end{itemize}
-\paragraph{Examples}\label{examples-33}
+\hypertarget{examples-37}{%
+\paragraph{Examples}\label{examples-37}}
Identical PZN7 symbols, input provided with and without a check digit:
@@ -3305,8 +4213,8 @@ Encoder: pzn
\includegraphics{images/pzn-2.eps}
-\hypertarget{hibc-symbols}{\subsection{HIBC
-Symbols}\label{hibc-symbols}}
+\hypertarget{hibc-symbols}{%
+\subsection{HIBC Symbols}\label{hibc-symbols}}
\textbf{HIBC barcodes} use a number of general symbologies as carrier
symbols for data structured according to the LIC and PAS structured data
@@ -3343,7 +4251,8 @@ Standards: ANSI/HIBC Provider Applications Standard, ANSI/HIBC Supplier
Labelling Standard, ANSI/HIBC Positive Identification for Patient
Safety, ANSI/HIBC Syntax Standard.
-\paragraph{Data and Options}\label{data-and-options-50}
+\hypertarget{data-and-options-58}{%
+\paragraph{Data and Options}\label{data-and-options-58}}
\begin{itemize}
\tightlist
@@ -3357,8 +4266,8 @@ Safety, ANSI/HIBC Syntax Standard.
input.
\end{itemize}
-\hypertarget{hibc-code-39}{\subsubsection{HIBC Code
-39}\label{hibc-code-39}}
+\hypertarget{hibc-code-39}{%
+\subsubsection{HIBC Code 39}\label{hibc-code-39}}
\begin{verbatim}
Data: A123BJC5D6E71
@@ -3368,8 +4277,8 @@ Encoder: hibccode39
\includegraphics{images/hibccode39-1.eps}
-\hypertarget{hibc-code-128}{\subsubsection{HIBC Code
-128}\label{hibc-code-128}}
+\hypertarget{hibc-code-128}{%
+\subsubsection{HIBC Code 128}\label{hibc-code-128}}
\begin{verbatim}
Data: A123BJC5D6E71
@@ -3379,8 +4288,8 @@ Encoder: hibccode128
\includegraphics{images/hibccode128-1.eps}
-\hypertarget{hibc-pdf417}{\subsubsection{HIBC
-PDF417}\label{hibc-pdf417}}
+\hypertarget{hibc-pdf417}{%
+\subsubsection{HIBC PDF417}\label{hibc-pdf417}}
\begin{verbatim}
Data: A123BJC5D6E71
@@ -3390,8 +4299,8 @@ Encoder: hibcpdf417
\includegraphics{images/hibcpdf417-1.eps}
-\hypertarget{hibc-micropdf417}{\subsubsection{HIBC
-MicroPDF417}\label{hibc-micropdf417}}
+\hypertarget{hibc-micropdf417}{%
+\subsubsection{HIBC MicroPDF417}\label{hibc-micropdf417}}
\begin{verbatim}
Data: A123BJC5D6E71
@@ -3401,8 +4310,8 @@ Encoder: hibcmicropdf417
\includegraphics{images/hibcmicropdf417-1.eps}
-\hypertarget{hibc-qr-code}{\subsubsection{HIBC QR
-Code}\label{hibc-qr-code}}
+\hypertarget{hibc-qr-code}{%
+\subsubsection{HIBC QR Code}\label{hibc-qr-code}}
\begin{verbatim}
Data: A123BJC5D6E71
@@ -3412,8 +4321,8 @@ Encoder: hibcqrcode
\includegraphics{images/hibcqrcode-1.eps}
-\hypertarget{hibc-data-matrix}{\subsubsection{HIBC Data
-Matrix}\label{hibc-data-matrix}}
+\hypertarget{hibc-data-matrix}{%
+\subsubsection{HIBC Data Matrix}\label{hibc-data-matrix}}
\begin{verbatim}
Data: A123BJC5D6E71
@@ -3423,8 +4332,8 @@ Encoder: hibcdatamatrix
\includegraphics{images/hibcdatamatrix-1.eps}
-\hypertarget{hibc-codablock-f}{\subsubsection{HIBC Codablock
-F}\label{hibc-codablock-f}}
+\hypertarget{hibc-codablock-f}{%
+\subsubsection{HIBC Codablock F}\label{hibc-codablock-f}}
\begin{verbatim}
Data: A123BJC5D6E71
@@ -3434,9 +4343,11 @@ Encoder: hibccodablockf
\includegraphics{images/hibccodablockf-1.eps}
-\subsection{Less-used Symbols}\label{less-used-symbols}
+\hypertarget{less-used-symbols}{%
+\subsection{Less-used Symbols}\label{less-used-symbols}}
-\subsubsection{BC412}\label{bc412}
+\hypertarget{bc412}{%
+\subsubsection{BC412}\label{bc412}}
The \textbf{BC412} barcode symbology is single width, variable length
barcode that is used for silicon wafer identification by the
@@ -3444,7 +4355,8 @@ semiconductor manufacturing industry.
Also known as: BC412 SEMI, BC412 IBM.
-\paragraph{Data and Options}\label{data-and-options-51}
+\hypertarget{data-and-options-59}{%
+\paragraph{Data and Options}\label{data-and-options-59}}
\begin{itemize}
\tightlist
@@ -3474,7 +4386,8 @@ Also known as: BC412 SEMI, BC412 IBM.
bars.
\end{itemize}
-\paragraph{Examples}\label{examples-34}
+\hypertarget{examples-38}{%
+\paragraph{Examples}\label{examples-38}}
\begin{verbatim}
Data: BC412
@@ -3500,7 +4413,8 @@ Encoder: bc412
\includegraphics{images/bc412-3.eps}
-\subsubsection{Channel Code}\label{channel-code}
+\hypertarget{channel-code}{%
+\subsubsection{Channel Code}\label{channel-code}}
\textbf{Channel Code} is a linear, continuous, self-checking,
bidirectional barcode symbology that encodes between two and seven
@@ -3508,7 +4422,8 @@ digits in a short space.
Standards: ANSI/AIM BC12 - USS Channel Code.
-\paragraph{Data and Options}\label{data-and-options-52}
+\hypertarget{data-and-options-60}{%
+\paragraph{Data and Options}\label{data-and-options-60}}
\begin{itemize}
\tightlist
@@ -3541,7 +4456,8 @@ Standards: ANSI/AIM BC12 - USS Channel Code.
The \textbf{includecheck} option appends an optional check bar suffix.
\end{itemize}
-\paragraph{Examples}\label{examples-35}
+\hypertarget{examples-39}{%
+\paragraph{Examples}\label{examples-39}}
A channel 3 symbol holding the value five:
@@ -3583,7 +4499,8 @@ Encoder: channelcode
\includegraphics{images/channelcode-4.eps}
-\subsubsection{Codabar}\label{codabar}
+\hypertarget{codabar}{%
+\subsubsection{Codabar}\label{codabar}}
\textbf{Codabar} is a linear, discrete, self-checking, bidirectional
barcode symbology that can encode digits, six symbols and four delimiter
@@ -3595,7 +4512,8 @@ USS-Codabar, ABC Codabar, Monarch, Code 2 of 7.
Standards: ANSI/AIM BC3 - USS Codabar, BS EN 798.
-\paragraph{Data and Options}\label{data-and-options-53}
+\hypertarget{data-and-options-61}{%
+\paragraph{Data and Options}\label{data-and-options-61}}
\begin{itemize}
\tightlist
@@ -3630,7 +4548,8 @@ Standards: ANSI/AIM BC3 - USS Codabar, BS EN 798.
characters appear in the human readable text.
\end{itemize}
-\paragraph{Example}\label{example-14}
+\hypertarget{example-18}{%
+\paragraph{Example}\label{example-18}}
\begin{verbatim}
Data: A0123456789B
@@ -3640,8 +4559,8 @@ Encoder: rationalizedCodabar
\includegraphics{images/codabar-1.eps}
-\hypertarget{codablock-f}{\subsubsection{Codablock
-F}\label{codablock-f}}
+\hypertarget{codablock-f}{%
+\subsubsection{Codablock F}\label{codablock-f}}
The \textbf{Codablock F} barcode symbology is 2D stacked-linear barcode
that consists of a number of stacked \protect\hyperlink{code-128}{Code
@@ -3658,12 +4577,15 @@ Variants:
Standards: USS Codablock F.
-\paragraph{Data and Options}\label{data-and-options-54}
+\hypertarget{data-and-options-62}{%
+\paragraph{Data and Options}\label{data-and-options-62}}
\begin{itemize}
\tightlist
\item
- The data field can consist of any extended-ASCII data.
+ The data field can consist of any extended-ASCII data. The default
+ interpretation of data by readers is in accordance with ISO/IEC
+ 8859-1.
\item
\emph{FNC4} function characters will be inserted automatically to
allow the encoding of extended ASCII characters.
@@ -3673,7 +4595,19 @@ Standards: USS Codablock F.
ASCII value, useful for specifying unprintable characters.
\item
When the \textbf{parsefnc} option is specified, non-data function
- characters can be specified by \texttt{\^{}FNC1} or \texttt{\^{}FNC3}.
+ characters can be specified by escape sequences:
+
+ \begin{itemize}
+ \tightlist
+ \item
+ \texttt{\^{}FNC1}: FNC1
+ \item
+ \texttt{\^{}FNC2}: FNC2
+ \item
+ \texttt{\^{}FNC3}: FNC3
+ \item
+ \texttt{\^{}ECI000000} to \texttt{\^{}ECI999999}: ECI indicators
+ \end{itemize}
\item
The \textbf{columns} option specifies the number of columns in the
symbol, default 8.
@@ -3695,7 +4629,8 @@ Standards: USS Codablock F.
bars enclosing the rows in points. The default is 1.
\end{itemize}
-\paragraph{Examples}\label{examples-36}
+\hypertarget{examples-40}{%
+\paragraph{Examples}\label{examples-40}}
\begin{verbatim}
Data: Codablock F
@@ -3721,7 +4656,8 @@ Encoder: codablockf
\includegraphics{images/codablockf-3.eps}
-\subsubsection{Code 11}\label{code-11}
+\hypertarget{code-11}{%
+\subsubsection{Code 11}\label{code-11}}
\textbf{Code 11} is a linear, discrete, non-self-checking,
bidirectional, numeric barcode symbology that is primarily used for
@@ -3729,7 +4665,8 @@ labelling telecommunication equipment.
Also known as: USD-8.
-\paragraph{Data and Options}\label{data-and-options-55}
+\hypertarget{data-and-options-63}{%
+\paragraph{Data and Options}\label{data-and-options-63}}
\begin{itemize}
\tightlist
@@ -3743,7 +4680,8 @@ Also known as: USD-8.
For 10 or more data digits two check digits are used.
\end{itemize}
-\paragraph{Example}\label{example-15}
+\hypertarget{example-19}{%
+\paragraph{Example}\label{example-19}}
\begin{verbatim}
Data: 0123456789
@@ -3753,7 +4691,8 @@ Encoder: code11
\includegraphics{images/code11-1.eps}
-\subsubsection{Code 16K}\label{code-16k}
+\hypertarget{code-16k}{%
+\subsubsection{Code 16K}\label{code-16k}}
The \textbf{Code 16K} barcode symbology is 2D stacked-linear barcode
that can encode full 256 character extended-ASCII with the use of the
@@ -3763,12 +4702,15 @@ Also known as: USS-16K
Standards: ANSI/AIM BC7 - USS Code 16K, BS EN 12323.
-\paragraph{Data and Options}\label{data-and-options-56}
+\hypertarget{data-and-options-64}{%
+\paragraph{Data and Options}\label{data-and-options-64}}
\begin{itemize}
\tightlist
\item
- The input can consist of any 256-bit extended ASCII data.
+ The data field can consist of any extended ASCII data. The default
+ interpretation of data by readers is in accordance with ISO/IEC
+ 8859-1.
\item
\emph{FNC4} function characters will be inserted automatically to
allow the encoding of extended ASCII characters.
@@ -3778,8 +4720,17 @@ Standards: ANSI/AIM BC7 - USS Code 16K, BS EN 12323.
ASCII value, useful for specifying unprintable characters.
\item
When the \textbf{parsefnc} option is specified, non-data function
- characters can be specified by \texttt{\^{}FNC1} through
- \texttt{\^{}FNC3}.
+ characters can be specified by escape sequences:
+
+ \begin{itemize}
+ \tightlist
+ \item
+ \texttt{\^{}FNC1}: FNC1
+ \item
+ \texttt{\^{}FNC2}: FNC2
+ \item
+ \texttt{\^{}FNC3}: FNC3
+ \end{itemize}
\item
The \textbf{mode} option specifies the mode for the symbol. It is
usual to leave this unspecified in which case the most appropriate
@@ -3826,7 +4777,8 @@ Standards: ANSI/AIM BC7 - USS Code 16K, BS EN 12323.
bars enclosing the rows in points. The default is 1.
\end{itemize}
-\paragraph{Examples}\label{examples-37}
+\hypertarget{examples-41}{%
+\paragraph{Examples}\label{examples-41}}
\begin{verbatim}
Data: Abcd-1234567890-wxyZ
@@ -3852,7 +4804,8 @@ Encoder: code16k
\includegraphics{images/code16k-3.eps}
-\hypertarget{code-25}{\subsubsection{Code 25}\label{code-25}}
+\hypertarget{code-25}{%
+\subsubsection{Code 25}\label{code-25}}
\textbf{Code 2 of 5} is a simple low density numeric barcode symbology.
@@ -3873,7 +4826,8 @@ Variants:
\protect\hyperlink{coop-2-of-5}{COOP 2 of 5}.
\end{itemize}
-\paragraph{Data and Options}\label{data-and-options-57}
+\hypertarget{data-and-options-65}{%
+\paragraph{Data and Options}\label{data-and-options-65}}
\begin{itemize}
\tightlist
@@ -3882,7 +4836,8 @@ Variants:
\item
The \textbf{includecheck} option calculates the check digit.
\item
- The \textbf{version} option determines which variant to use:
+ \emph{Deprecated}: The \textbf{version} option determines which
+ variant to use:
\begin{itemize}
\tightlist
@@ -3903,7 +4858,8 @@ Variants:
\end{itemize}
\end{itemize}
-\paragraph{Examples}\label{examples-38}
+\hypertarget{examples-42}{%
+\paragraph{Examples}\label{examples-42}}
\begin{verbatim}
Data: 01234567
@@ -3913,8 +4869,145 @@ Encoder: code2of5
\includegraphics{images/code25-1.eps}
-\hypertarget{iata-2-of-5}{\subsubsection{IATA 2 of
-5}\label{iata-2-of-5}}
+\hypertarget{dotcode}{%
+\subsubsection{DotCode}\label{dotcode}}
+
+The \textbf{DotCode} symbology is 2D matrix-style barcode that can
+encode full 256 character extended-ASCII.
+
+Also known as: Ribbon Code
+
+Variants:
+
+\begin{itemize}
+\tightlist
+\item
+ \protect\hyperlink{gs1-dotcode}{GS1 DotCode} is a variant of DotCode
+ that should be used when encoding data that is in
+ \protect\hyperlink{gs1-application-identifier-standard-format}{GS1
+ Application Identifier standard format}.
+\end{itemize}
+
+Standards: AIM - ISS DotCode.
+
+\hypertarget{data-and-options-66}{%
+\paragraph{Data and Options}\label{data-and-options-66}}
+
+\begin{itemize}
+\tightlist
+\item
+ The data field can contain any extended ASCII data. The default
+ interpretation of data by readers is in accordance with ISO/IEC
+ 8859-1.
+\item
+ When the \textbf{parse} option is specified, any instances of
+ \texttt{\^{}NNN} in the data field are replaced with their equivalent
+ ASCII value. This is useful for specifying unprintable characters.
+\item
+ When the \textbf{parsefnc} option is specified, non-data function
+ characters can be specified by escape sequences:
+
+ \begin{itemize}
+ \tightlist
+ \item
+ \texttt{\^{}FNC1}: FNC1. \emph{Recommendation: Use
+ \protect\hyperlink{gs1-dotcode}{GS1 DotCode} for encoding GS1 AI
+ syntax data.}
+ \item
+ \texttt{\^{}FNC2}: FNC2
+ \item
+ \texttt{\^{}FNC3}: FNC3
+ \end{itemize}
+\item
+ The \textbf{ratio} is used to specify the aspect ratio of the symbol.
+ The default is 1.5.
+\item
+ The \textbf{columns} and \textbf{rows} options are used to specify the
+ size of the symbol. When these are not specified a symbol is generated
+ that maintains the selected aspect ratio.
+\item
+ \emph{Deprecated: Use only if performance is a concern.} The
+ \textbf{fast} option is used to enable the optional high-speed symbol
+ masking algorithm.
+\end{itemize}
+
+\hypertarget{examples-43}{%
+\paragraph{Examples}\label{examples-43}}
+
+\begin{verbatim}
+Data: This is DotCode
+Options: inkspread=0.16
+Encoder: dotcode
+\end{verbatim}
+
+\includegraphics{images/dotcode-1.eps}
+
+\hypertarget{ultracode}{%
+\subsubsection{Ultracode}\label{ultracode}}
+
+The \textbf{Ultracode} symbology is a colour, 2D matrix-style barcode
+symbology that can encode full 256 character extended-ASCII.
+
+Standards: AIM ISS - Ultracode.
+
+\hypertarget{data-and-options-67}{%
+\paragraph{Data and Options}\label{data-and-options-67}}
+
+\begin{itemize}
+\tightlist
+\item
+ The data field can contain any extended ASCII data. The default
+ interpretation of data by readers is in accordance with ISO/IEC
+ 8859-1.
+\item
+ When the \textbf{parse} option is specified, any instances of
+ \texttt{\^{}NNN} in the data field are replaced with their equivalent
+ ASCII value, useful for specifying unprintable characters.
+\item
+ When the \textbf{parsefnc} option is specified, non-data function
+ characters can be specified by escape sequences:
+
+ \begin{itemize}
+ \tightlist
+ \item
+ \texttt{\^{}FNC1}: FNC1
+ \item
+ \texttt{\^{}FNC3}: FNC3
+ \end{itemize}
+\item
+ The \textbf{eclevel} option is used to specify the error correction
+ level:
+
+ \begin{itemize}
+ \tightlist
+ \item
+ \texttt{eclevel=EC0} - Error detection only
+ \item
+ \texttt{eclevel=EC1} - Low
+ \item
+ \texttt{eclevel=EC2} - Medium (default)
+ \item
+ \texttt{eclevel=EC3}
+ \item
+ \texttt{eclevel=EC4}
+ \item
+ \texttt{eclevel=EC5} - Highest
+ \end{itemize}
+\end{itemize}
+
+\hypertarget{examples-44}{%
+\paragraph{Examples}\label{examples-44}}
+
+\begin{verbatim}
+Data: Nice colours!
+Options: eclevel=EC3
+Encoder: ultracode
+\end{verbatim}
+
+\includegraphics{images/ultracode-1.eps}
+
+\hypertarget{iata-2-of-5}{%
+\subsubsection{IATA 2 of 5}\label{iata-2-of-5}}
\textbf{IATA 2 of 5} is a variant of the
\protect\hyperlink{code-25}{Code 2 of 5} barcode symbology.
@@ -3935,7 +5028,8 @@ Variants:
\protect\hyperlink{coop-2-of-5}{COOP 2 of 5}.
\end{itemize}
-\paragraph{Data and Options}\label{data-and-options-58}
+\hypertarget{data-and-options-68}{%
+\paragraph{Data and Options}\label{data-and-options-68}}
\begin{itemize}
\tightlist
@@ -3945,7 +5039,8 @@ Variants:
The \textbf{includecheck} option calculates the check digit.
\end{itemize}
-\paragraph{Examples}\label{examples-39}
+\hypertarget{examples-45}{%
+\paragraph{Examples}\label{examples-45}}
\begin{verbatim}
Data: 01234567
@@ -3955,8 +5050,8 @@ Encoder: iata2of5
\includegraphics{images/code25-2.eps}
-\hypertarget{matrix-2-of-5}{\subsubsection{Matrix 2 of
-5}\label{matrix-2-of-5}}
+\hypertarget{matrix-2-of-5}{%
+\subsubsection{Matrix 2 of 5}\label{matrix-2-of-5}}
\textbf{Matrix 2 of 5} is a variant of the
\protect\hyperlink{code-25}{Code 2 of 5} barcode symbology.
@@ -3976,7 +5071,8 @@ Variants:
\protect\hyperlink{coop-2-of-5}{COOP 2 of 5}.
\end{itemize}
-\paragraph{Data and Options}\label{data-and-options-59}
+\hypertarget{data-and-options-69}{%
+\paragraph{Data and Options}\label{data-and-options-69}}
\begin{itemize}
\tightlist
@@ -3986,8 +5082,8 @@ Variants:
The \textbf{includecheck} option calculates the check digit.
\end{itemize}
-\hypertarget{datalogic-2-of-5}{\subsubsection{Datalogic 2 of
-5}\label{datalogic-2-of-5}}
+\hypertarget{datalogic-2-of-5}{%
+\subsubsection{Datalogic 2 of 5}\label{datalogic-2-of-5}}
\textbf{Datalogic 2 of 5} is a variant of the
\protect\hyperlink{code-25}{Code 2 of 5} barcode symbology.
@@ -4007,7 +5103,8 @@ Variants:
\protect\hyperlink{coop-2-of-5}{COOP 2 of 5}.
\end{itemize}
-\paragraph{Data and Options}\label{data-and-options-60}
+\hypertarget{data-and-options-70}{%
+\paragraph{Data and Options}\label{data-and-options-70}}
\begin{itemize}
\tightlist
@@ -4017,8 +5114,8 @@ Variants:
The \textbf{includecheck} option calculates the check digit.
\end{itemize}
-\hypertarget{coop-2-of-5}{\subsubsection{COOP 2 of
-5}\label{coop-2-of-5}}
+\hypertarget{coop-2-of-5}{%
+\subsubsection{COOP 2 of 5}\label{coop-2-of-5}}
\textbf{COOP 2 of 5} is a variant of the
\protect\hyperlink{code-25}{Code 2 of 5} barcode symbology.
@@ -4038,7 +5135,8 @@ Variants:
\protect\hyperlink{matrix-2-of-5}{Matrix 2 of 5}.
\end{itemize}
-\paragraph{Data and Options}\label{data-and-options-61}
+\hypertarget{data-and-options-71}{%
+\paragraph{Data and Options}\label{data-and-options-71}}
\begin{itemize}
\tightlist
@@ -4048,7 +5146,8 @@ Variants:
The \textbf{includecheck} option calculates the check digit.
\end{itemize}
-\subsubsection{Code 49}\label{code-49}
+\hypertarget{code-49}{%
+\subsubsection{Code 49}\label{code-49}}
The \textbf{Code 49} barcode symbology is 2D stacked-linear barcode that
can encode 128 character ASCII.
@@ -4057,7 +5156,8 @@ Also known as: USS-49.
Standards: ANSI/AIM BC6 - USS Code 49.
-\paragraph{Data and Options}\label{data-and-options-62}
+\hypertarget{data-and-options-72}{%
+\paragraph{Data and Options}\label{data-and-options-72}}
\begin{itemize}
\tightlist
@@ -4069,8 +5169,17 @@ Standards: ANSI/AIM BC6 - USS Code 49.
ASCII value, useful for specifying unprintable characters.
\item
When the \textbf{parsefnc} option is specified, non-data function
- characters can be specified by \texttt{\^{}FNC1} through
- \texttt{\^{}FNC3}.
+ characters can be specified by escape sequences:
+
+ \begin{itemize}
+ \tightlist
+ \item
+ \texttt{\^{}FNC1}: FNC1
+ \item
+ \texttt{\^{}FNC2}: FNC2
+ \item
+ \texttt{\^{}FNC3}: FNC3
+ \end{itemize}
\item
The \textbf{mode} option specifies the mode for the symbol. It is
usual to leave this unspecified in which case the most appropriate
@@ -4096,7 +5205,7 @@ Standards: ANSI/AIM BC6 - USS Code 49.
\end{itemize}
\item
The \textbf{pos} option specifies this symbol to be part of multi-part
- structured data, i.e.~selecting \texttt{mode=3}. For example
+ structured data, i.e. selecting \texttt{mode=3}. For example
\texttt{pos=25} specifies this to be the second symbol in a group of
five symbols.
\item
@@ -4113,7 +5222,8 @@ Standards: ANSI/AIM BC6 - USS Code 49.
bars enclosing the rows in points. The default is \emph{1}.
\end{itemize}
-\paragraph{Examples}\label{examples-40}
+\hypertarget{examples-46}{%
+\paragraph{Examples}\label{examples-46}}
\begin{verbatim}
Data: MULTIPLE ROWS IN CODE 49
@@ -4139,7 +5249,8 @@ Encoder: code49
\includegraphics{images/code49-3.eps}
-\subsubsection{Code One}\label{code-one}
+\hypertarget{code-one}{%
+\subsubsection{Code One}\label{code-one}}
\textbf{Code One} was the earliest public domain 2D matrix-style
barcode. It is used by the health care and recycling industry and can
@@ -4149,13 +5260,17 @@ Also known as: Code 1, Code 1S.
Standards: AIM USS - Code One.
-\paragraph{Data and Options}\label{data-and-options-63}
+\hypertarget{data-and-options-73}{%
+\paragraph{Data and Options}\label{data-and-options-73}}
\begin{itemize}
\tightlist
\item
The data field can consist of any ASCII data for \emph{standard} and
- \emph{T-type} symbols.
+ \emph{T-type} symbols. The default interpretation of data by readers
+ is in accordance with ISO/IEC 8859-1. When supported by the receiver
+ characters from other code pages can be encoded using Extended Channel
+ Interpretation (ECI).
\item
Note: \emph{S-type} symbols are special in that they represent a
numeric value so may only contain digits.
@@ -4166,7 +5281,17 @@ Standards: AIM USS - Code One.
\texttt{\^{}029} for \emph{GS}, etc.
\item
When the \textbf{parsefnc} option is specified, non-data function
- characters can be specified by \texttt{\^{}FNC1}, \texttt{\^{}FNC3}.
+ characters can be specified by escape sequences:
+
+ \begin{itemize}
+ \tightlist
+ \item
+ \texttt{\^{}FNC1}: FNC1
+ \item
+ \texttt{\^{}FNC3}: FNC3
+ \item
+ \texttt{\^{}ECI000000} to \texttt{\^{}ECI999999}: ECI indicators
+ \end{itemize}
\item
The \textbf{version} option is used to specify the size and type of
the symbol:
@@ -4186,7 +5311,8 @@ Standards: AIM USS - Code One.
\end{itemize}
\end{itemize}
-\paragraph{Examples}\label{examples-41}
+\hypertarget{examples-47}{%
+\paragraph{Examples}\label{examples-47}}
\begin{verbatim}
Data: Code One
@@ -4220,8 +5346,8 @@ Encoder: codeone
\includegraphics{images/codeone-4.eps}
-\hypertarget{msi-plessey}{\subsubsection{MSI
-Plessey}\label{msi-plessey}}
+\hypertarget{msi-plessey}{%
+\subsubsection{MSI Plessey}\label{msi-plessey}}
\textbf{MSI Plessey} is a continuous, non-self-checking, arbitrary
length, numeric barcode symbology.
@@ -4237,7 +5363,8 @@ Variants:
which MSI Modified Plessey was based.
\end{itemize}
-\paragraph{Data and Options}\label{data-and-options-64}
+\hypertarget{data-and-options-74}{%
+\paragraph{Data and Options}\label{data-and-options-74}}
\begin{itemize}
\tightlist
@@ -4276,7 +5403,8 @@ Variants:
correct representation.
\end{itemize}
-\paragraph{Examples}\label{examples-42}
+\hypertarget{examples-48}{%
+\paragraph{Examples}\label{examples-48}}
\begin{verbatim}
Data: 0123456789
@@ -4302,7 +5430,8 @@ Encoder: msi
\includegraphics{images/msi-3.eps}
-\hypertarget{plessey}{\subsubsection{Plessey}\label{plessey}}
+\hypertarget{plessey}{%
+\subsubsection{Plessey}\label{plessey}}
\textbf{Plessey} is a continuous, arbitrary length barcode symbology for
encoding hexadecimal data.
@@ -4318,7 +5447,8 @@ Variants:
the Plessey (UK) barcode developed by the MSI Data Corporation.
\end{itemize}
-\paragraph{Data and Options}\label{data-and-options-65}
+\hypertarget{data-and-options-75}{%
+\paragraph{Data and Options}\label{data-and-options-75}}
\begin{itemize}
\tightlist
@@ -4343,7 +5473,8 @@ Variants:
symbol.
\end{itemize}
-\paragraph{Examples}\label{examples-43}
+\hypertarget{examples-49}{%
+\paragraph{Examples}\label{examples-49}}
Equivalent symbols, the latter displaying the two mandatory check
characters:
@@ -4374,7 +5505,8 @@ Encoder: plessey
\includegraphics{images/plessey-3.eps}
-\subsubsection{PosiCode}\label{posicode}
+\hypertarget{posicode}{%
+\subsubsection{PosiCode}\label{posicode}}
\textbf{PosiCode} is a continuous, variable length, non-self-checking,
bidirectional barcode symbology that is designed for use within printing
@@ -4382,7 +5514,8 @@ processes where it is difficult to precisely control the width of a bar.
Standards: ITS PosiCode.
-\paragraph{Data and Options}\label{data-and-options-66}
+\hypertarget{data-and-options-76}{%
+\paragraph{Data and Options}\label{data-and-options-76}}
\begin{itemize}
\tightlist
@@ -4392,10 +5525,16 @@ Standards: ITS PosiCode.
\begin{itemize}
\tightlist
\item
- For \emph{standard} symbols: Any 256-bit extended ASCII data.
- \item
- \emph{FNC4} function characters will be inserted automatically to
- allow the encoding of extended ASCII characters.
+ For \emph{standard} symbols: Any extended ASCII data. The default
+ interpretation of data by readers is in accordance with ISO/IEC
+ 8859-1.
+
+ \begin{itemize}
+ \tightlist
+ \item
+ \emph{FNC4} function characters will be inserted automatically to
+ allow the encoding of extended ASCII characters.
+ \end{itemize}
\item
For \emph{limited} symbols: letters \texttt{A-Z}, digits
\texttt{0-9}, symbols \texttt{-} and \texttt{.}
@@ -4422,14 +5561,24 @@ Standards: ITS PosiCode.
\texttt{\^{}029} for \emph{GS}, etc.
\item
When the \textbf{parsefnc} option is specified, non-data function
- characters can be specified by \texttt{\^{}FNC1} through
- \texttt{\^{}FNC3}.
+ characters can be specified by escape sequences:
+
+ \begin{itemize}
+ \tightlist
+ \item
+ \texttt{\^{}FNC1}: FNC1
+ \item
+ \texttt{\^{}FNC2}: FNC2
+ \item
+ \texttt{\^{}FNC3}: FNC3
+ \end{itemize}
\item
The \textbf{inkspread} option can be used to adjust the width of the
bars.
\end{itemize}
-\paragraph{Example PosiCode}\label{example-posicode}
+\hypertarget{example-posicode}{%
+\paragraph{Example PosiCode}\label{example-posicode}}
Equivalent ways to generate a PosiCode A symbol:
@@ -4477,7 +5626,8 @@ Encoder: posicode
\includegraphics{images/posicode-4.eps}
-\paragraph{Example Limited PosiCode}\label{example-limited-posicode}
+\hypertarget{example-limited-posicode}{%
+\paragraph{Example Limited PosiCode}\label{example-limited-posicode}}
Limited PosiCode A with narrowed bars:
@@ -4499,7 +5649,8 @@ Encoder: posicode
\includegraphics{images/posicode-6.eps}
-\hypertarget{telepen}{\subsubsection{Telepen}\label{telepen}}
+\hypertarget{telepen}{%
+\subsubsection{Telepen}\label{telepen}}
\textbf{Telepen} is an arbitrary length barcode symbology for encoding
all 128 ASCII characters without the need for shift characters.
@@ -4516,7 +5667,8 @@ Variants:
Standards: USS Telepen.
-\paragraph{Data and Options}\label{data-and-options-67}
+\hypertarget{data-and-options-77}{%
+\paragraph{Data and Options}\label{data-and-options-77}}
\begin{itemize}
\tightlist
@@ -4536,7 +5688,8 @@ Standards: USS Telepen.
encoded using the \emph{parse} option.}
\end{itemize}
-\paragraph{Examples}\label{examples-44}
+\hypertarget{examples-50}{%
+\paragraph{Examples}\label{examples-50}}
\begin{verbatim}
Data: Telepen
@@ -4554,8 +5707,8 @@ Encoder: telepen
\includegraphics{images/telepen-2.eps}
-\hypertarget{telepen-numeric}{\subsubsection{Telepen
-Numeric}\label{telepen-numeric}}
+\hypertarget{telepen-numeric}{%
+\subsubsection{Telepen Numeric}\label{telepen-numeric}}
\textbf{Telepen Numeric} is a variant of the Telepen symbology for
efficient encoding of numeric data.
@@ -4570,7 +5723,8 @@ Variants:
Standards: USS Telepen.
-\paragraph{Data and Options}\label{data-and-options-68}
+\hypertarget{data-and-options-78}{%
+\paragraph{Data and Options}\label{data-and-options-78}}
\begin{itemize}
\tightlist
@@ -4586,7 +5740,8 @@ Standards: USS Telepen.
The mandatory check digit is automatically included.
\end{itemize}
-\paragraph{Examples}\label{examples-45}
+\hypertarget{examples-51}{%
+\paragraph{Examples}\label{examples-51}}
\begin{verbatim}
Data: 123456
@@ -4612,8 +5767,8 @@ Encoder: telepennumeric
\includegraphics{images/telepen-5.eps}
-\hypertarget{gs1-composite-symbols}{\subsection{GS1 Composite
-Symbols}\label{gs1-composite-symbols}}
+\hypertarget{gs1-composite-symbols}{%
+\subsection{GS1 Composite Symbols}\label{gs1-composite-symbols}}
\textbf{GS1 Composite} barcode symbologies consist of a primary
component beneath a 2D component (variations of
@@ -4677,7 +5832,8 @@ Variants:
Standards: ISO/IEC 24723, ITS EAN.UCC Composite Symbology, AIM ISS -
EAN.UCC Composite Symbology, GS1 General Specifications.
-\paragraph{Data and Options}\label{data-and-options-69}
+\hypertarget{data-and-options-79}{%
+\paragraph{Data and Options}\label{data-and-options-79}}
\begin{itemize}
\tightlist
@@ -4693,6 +5849,13 @@ EAN.UCC Composite Symbology, GS1 General Specifications.
\protect\hyperlink{gs1-application-identifier-standard-format}{GS1
Application Identifier standard format}.
\item
+ Note that it is not necessary to specify \emph{FNC1} characters since
+ the encoder will insert these automatically where necessary.
+\item
+ \emph{Deprecated.} The \textbf{dontlint} option disables GS1
+ Application Identifier syntax validation allowing images to be
+ generated for input that does not comply with GS1 standards.
+\item
For maximum efficiency, if the data for the 2D component contains a
number of application identifiers matching any of the specifications
below then they should be provided in this given order:
@@ -4707,8 +5870,9 @@ EAN.UCC Composite Symbology, GS1 General Specifications.
\texttt{(90)\{0-3\ digits\ not\ starting\ 0\}\{upper\ alpha\}...}
\end{itemize}
\item
- The \textbf{ccversion} option is used to select a specific 2D
- component:
+ \emph{Deprecated: Default is best unless your application dictates
+ otherwise.} The \textbf{ccversion} option is used to select a specific
+ 2D component:
\begin{itemize}
\tightlist
@@ -4719,17 +5883,17 @@ EAN.UCC Composite Symbology, GS1 General Specifications.
\item
\texttt{ccversion=c} - \protect\hyperlink{cc-c}{CC-C}
(\protect\hyperlink{gs1-128-composite}{GS1-128 Composite} only)
+ \item
+ If \textbf{ccversion} is not specified a CC-A component will be
+ selected if the data will fit, otherwise a CC-B component will be
+ used. In the case of \protect\hyperlink{gs1-128-composite}{GS1-128
+ Composite} a CC-C component will be used if the data does not fit
+ within either a CC-A or CC-B component.
\end{itemize}
-\item
- If \textbf{ccversion} is not specified a CC-A component will be
- selected if the data will fit, otherwise a CC-B component will be
- used. In the case of \protect\hyperlink{gs1-128-composite}{GS1-128
- Composite} a CC-C component will be used if the data does not fit
- within either a CC-A or CC-B component.
\end{itemize}
-\hypertarget{ean-13-composite}{\subsubsection{EAN-13
-Composite}\label{ean-13-composite}}
+\hypertarget{ean-13-composite}{%
+\subsubsection{EAN-13 Composite}\label{ean-13-composite}}
\begin{verbatim}
Data: 331234567890|(99)1234-abcd
@@ -4739,8 +5903,8 @@ Encoder: ean13composite
\includegraphics{images/ean13composite-1.eps}
-\hypertarget{ean-8-composite}{\subsubsection{EAN-8
-Composite}\label{ean-8-composite}}
+\hypertarget{ean-8-composite}{%
+\subsubsection{EAN-8 Composite}\label{ean-8-composite}}
\begin{verbatim}
Data: 12345670|(21)A12345678
@@ -4750,8 +5914,8 @@ Encoder: ean8composite
\includegraphics{images/ean8composite-1.eps}
-\hypertarget{upc-a-composite}{\subsubsection{UPC-A
-Composite}\label{upc-a-composite}}
+\hypertarget{upc-a-composite}{%
+\subsubsection{UPC-A Composite}\label{upc-a-composite}}
\begin{verbatim}
Data: 01600033610|(99)1234-abcd
@@ -4761,8 +5925,8 @@ Encoder: upcacomposite
\includegraphics{images/upcacomposite-1.eps}
-\hypertarget{upc-e-composite}{\subsubsection{UPC-E
-Composite}\label{upc-e-composite}}
+\hypertarget{upc-e-composite}{%
+\subsubsection{UPC-E Composite}\label{upc-e-composite}}
\begin{verbatim}
Data: 0121230|(15)021231
@@ -4772,8 +5936,8 @@ Encoder: upcecomposite
\includegraphics{images/upcecomposite-1.eps}
-\hypertarget{gs1-databar-omnidirectional-composite}{\subsubsection{GS1
-DataBar Omnidirectional
+\hypertarget{gs1-databar-omnidirectional-composite}{%
+\subsubsection{GS1 DataBar Omnidirectional
Composite}\label{gs1-databar-omnidirectional-composite}}
\begin{verbatim}
@@ -4784,8 +5948,8 @@ Encoder: databaromnicomposite
\includegraphics{images/databaromnicomposite-1.eps}
-\hypertarget{gs1-databar-stacked-omnidirectional-composite}{\subsubsection{GS1
-DataBar Stacked Omnidirectional
+\hypertarget{gs1-databar-stacked-omnidirectional-composite}{%
+\subsubsection{GS1 DataBar Stacked Omnidirectional
Composite}\label{gs1-databar-stacked-omnidirectional-composite}}
\begin{verbatim}
@@ -4796,8 +5960,9 @@ Encoder: databarstackedomnicomposite
\includegraphics{images/databarstackedomnicomposite-1.eps}
-\hypertarget{gs1-databar-expanded-composite}{\subsubsection{GS1 DataBar
-Expanded Composite}\label{gs1-databar-expanded-composite}}
+\hypertarget{gs1-databar-expanded-composite}{%
+\subsubsection{GS1 DataBar Expanded
+Composite}\label{gs1-databar-expanded-composite}}
\begin{verbatim}
Data: (01)93712345678904(3103)001234|(91)1A2B3C4D5E
@@ -4807,8 +5972,8 @@ Encoder: databarexpandedcomposite
\includegraphics{images/databarexpandedcomposite-1.eps}
-\hypertarget{gs1-databar-expanded-stacked-composite}{\subsubsection{GS1
-DataBar Expanded Stacked
+\hypertarget{gs1-databar-expanded-stacked-composite}{%
+\subsubsection{GS1 DataBar Expanded Stacked
Composite}\label{gs1-databar-expanded-stacked-composite}}
\begin{verbatim}
@@ -4819,8 +5984,9 @@ Encoder: databarexpandedstackedcomposite
\includegraphics{images/databarexpandedstackedcomposite-1.eps}
-\hypertarget{gs1-databar-truncated-composite}{\subsubsection{GS1 DataBar
-Truncated Composite}\label{gs1-databar-truncated-composite}}
+\hypertarget{gs1-databar-truncated-composite}{%
+\subsubsection{GS1 DataBar Truncated
+Composite}\label{gs1-databar-truncated-composite}}
\begin{verbatim}
Data: (01)03612345678904|(11)990102
@@ -4830,8 +5996,9 @@ Encoder: databartruncatedcomposite
\includegraphics{images/databartruncatedcomposite-1.eps}
-\hypertarget{gs1-databar-stacked-composite}{\subsubsection{GS1 DataBar
-Stacked Composite}\label{gs1-databar-stacked-composite}}
+\hypertarget{gs1-databar-stacked-composite}{%
+\subsubsection{GS1 DataBar Stacked
+Composite}\label{gs1-databar-stacked-composite}}
\begin{verbatim}
Data: (01)03412345678900|(17)010200
@@ -4841,8 +6008,9 @@ Encoder: databarstackedcomposite
\includegraphics{images/databarstackedcomposite-1.eps}
-\hypertarget{gs1-databar-limited-composite}{\subsubsection{GS1 DataBar
-Limited Composite}\label{gs1-databar-limited-composite}}
+\hypertarget{gs1-databar-limited-composite}{%
+\subsubsection{GS1 DataBar Limited
+Composite}\label{gs1-databar-limited-composite}}
\begin{verbatim}
Data: (01)03512345678907|(21)abcdefghijklmnopqrstuv
@@ -4852,8 +6020,8 @@ Encoder: databarlimitedcomposite
\includegraphics{images/databarlimitedcomposite-1.eps}
-\hypertarget{gs1-128-composite}{\subsubsection{GS1-128
-Composite}\label{gs1-128-composite}}
+\hypertarget{gs1-128-composite}{%
+\subsubsection{GS1-128 Composite}\label{gs1-128-composite}}
GS1-128 Composite with a CC-A 2D component:
@@ -4875,7 +6043,8 @@ Encoder: gs1-128composite
\includegraphics{images/ean128composite-2.eps}
-\hypertarget{cc-a}{\subsubsection{CC-A}\label{cc-a}}
+\hypertarget{cc-a}{%
+\subsubsection{CC-A}\label{cc-a}}
Isolated CC-A 2D component:
@@ -4887,7 +6056,8 @@ Encoder: gs1-cc
\includegraphics{images/gs1composite-1.eps}
-\hypertarget{cc-b}{\subsubsection{CC-B}\label{cc-b}}
+\hypertarget{cc-b}{%
+\subsubsection{CC-B}\label{cc-b}}
Isolated CC-B 2D component:
@@ -4899,7 +6069,8 @@ Encoder: gs1-cc
\includegraphics{images/gs1composite-2.eps}
-\hypertarget{cc-c}{\subsubsection{CC-C}\label{cc-c}}
+\hypertarget{cc-c}{%
+\subsubsection{CC-C}\label{cc-c}}
Isolated CC-C 2D component:
@@ -4911,15 +6082,18 @@ Encoder: gs1-cc
\includegraphics{images/gs1composite-3.eps}
-\subsection{Raw Symbols}\label{raw-symbols}
+\hypertarget{raw-symbols}{%
+\subsection{Raw Symbols}\label{raw-symbols}}
-\subsubsection{DAFT}\label{daft}
+\hypertarget{daft}{%
+\subsubsection{DAFT}\label{daft}}
\textbf{DAFT} is an encoder for directly specifying the descender,
ascender, full-height, tracker-bar succession for a custom 4 state
barcode symbol.
-\paragraph{Data and Options}\label{data-and-options-70}
+\hypertarget{data-and-options-80}{%
+\paragraph{Data and Options}\label{data-and-options-80}}
\begin{itemize}
\tightlist
@@ -4929,7 +6103,8 @@ barcode symbol.
ascender, full-height and tracker bars of a custom 4 state symbol.
\end{itemize}
-\paragraph{Example}\label{example-16}
+\hypertarget{example-20}{%
+\paragraph{Example}\label{example-20}}
\begin{verbatim}
Data: FATDAFTDAD
@@ -4939,13 +6114,15 @@ Encoder: daft
\includegraphics{images/daft-1.eps}
-\subsubsection{Flattermarken}\label{flattermarken}
+\hypertarget{flattermarken}{%
+\subsubsection{Flattermarken}\label{flattermarken}}
\textbf{Flattermarken} are identification marks used in book production
that facilitate the proper arrangement of bound sections by a book
binder.
-\paragraph{Data and Options}\label{data-and-options-71}
+\hypertarget{data-and-options-81}{%
+\paragraph{Data and Options}\label{data-and-options-81}}
\begin{itemize}
\tightlist
@@ -4969,7 +6146,8 @@ binder.
encoder should be used instead.
\end{itemize}
-\paragraph{Example}\label{example-17}
+\hypertarget{example-21}{%
+\paragraph{Example}\label{example-21}}
\begin{verbatim}
Data: 1304
@@ -4979,12 +6157,14 @@ Encoder: flattermarken
\includegraphics{images/flattermarken-1.eps}
-\hypertarget{raw}{\subsubsection{Raw}\label{raw}}
+\hypertarget{raw}{%
+\subsubsection{Raw}\label{raw}}
The \textbf{raw} encoder is used for directly specifying the space/bar
succession of a custom barcode symbol.
-\paragraph{Data and Options}\label{data-and-options-72}
+\hypertarget{data-and-options-82}{%
+\paragraph{Data and Options}\label{data-and-options-82}}
\begin{itemize}
\tightlist
@@ -4993,7 +6173,8 @@ succession of a custom barcode symbol.
the bars and spaces of a custom symbol.
\end{itemize}
-\paragraph{Example}\label{example-18}
+\hypertarget{example-22}{%
+\paragraph{Example}\label{example-22}}
\begin{verbatim}
Data: 331132131313411122131311333213114131131221323
@@ -5003,9 +6184,11 @@ Encoder: raw
\includegraphics{images/raw-1.eps}
-\subsection{Partial Symbols}\label{partial-symbols}
+\hypertarget{partial-symbols}{%
+\subsection{Partial Symbols}\label{partial-symbols}}
-\hypertarget{ean-2}{\subsubsection{EAN-2}\label{ean-2}}
+\hypertarget{ean-2}{%
+\subsubsection{EAN-2}\label{ean-2}}
\textbf{EAN-2} is the two-digit add-on code that accompanies a EAN or
UPC type barcode symbol such as an \protect\hyperlink{isbn}{ISBN} or
@@ -5013,7 +6196,8 @@ UPC type barcode symbol such as an \protect\hyperlink{isbn}{ISBN} or
Also known as: Two-Digit Add-On, Two-Digit Supplement, UPC-2
-\paragraph{Data and Options}\label{data-and-options-73}
+\hypertarget{data-and-options-83}{%
+\paragraph{Data and Options}\label{data-and-options-83}}
\begin{itemize}
\tightlist
@@ -5023,7 +6207,8 @@ Also known as: Two-Digit Add-On, Two-Digit Supplement, UPC-2
The \textbf{includetext} option should normally be supplied.
\end{itemize}
-\paragraph{Example}\label{example-19}
+\hypertarget{example-23}{%
+\paragraph{Example}\label{example-23}}
\begin{verbatim}
Data: 05
@@ -5033,7 +6218,8 @@ Encoder: ean2
\includegraphics{images/ean2-1.eps}
-\hypertarget{ean-5}{\subsubsection{EAN-5}\label{ean-5}}
+\hypertarget{ean-5}{%
+\subsubsection{EAN-5}\label{ean-5}}
\textbf{EAN-5} is the five-digit add-on code that accompanies an EAN or
UPC type barcode symbol such as an \protect\hyperlink{isbn}{ISBN} or
@@ -5041,7 +6227,8 @@ UPC type barcode symbol such as an \protect\hyperlink{isbn}{ISBN} or
Also known as: Five-Digit Add-On, Five-Digit Supplement, UPC-5
-\paragraph{Data and Options}\label{data-and-options-74}
+\hypertarget{data-and-options-84}{%
+\paragraph{Data and Options}\label{data-and-options-84}}
\begin{itemize}
\tightlist
@@ -5051,7 +6238,8 @@ Also known as: Five-Digit Add-On, Five-Digit Supplement, UPC-5
The \textbf{includetext} option should normally be supplied.
\end{itemize}
-\paragraph{Example}\label{example-20}
+\hypertarget{example-24}{%
+\paragraph{Example}\label{example-24}}
\begin{verbatim}
Data: 90200
@@ -5061,14 +6249,14 @@ Encoder: ean5
\includegraphics{images/ean5-1.eps}
-\hypertarget{gs1-application-identifier-standard-format}{\subsection{GS1
-Application Identifier Standard
+\hypertarget{gs1-application-identifier-standard-format}{%
+\subsection{GS1 Application Identifier Standard
Format}\label{gs1-application-identifier-standard-format}}
Certain barcode symbologies (including
\protect\hyperlink{gs1-128}{GS1-128},
-\protect\hyperlink{gs1-databar-omnidirectional}{GS1 DataBar
-Omnidirectional}, \protect\hyperlink{gs1-datamatrix}{GS1 DataMatrix},
+\protect\hyperlink{gs1-databar-expanded}{GS1 DataBar Expanded},
+\protect\hyperlink{gs1-datamatrix}{GS1 DataMatrix},
\protect\hyperlink{gs1-qr-code}{GS1 QR Code} and
\protect\hyperlink{gs1-composite-symbols}{GS1 Composite Symbols})
represent standardized GS1 data and require that their data field is
@@ -5102,25 +6290,37 @@ Identifier standard format will take care of parsing the input and
inserting any necessary \emph{FNC1} characters to delimit variable
length fields.
+Note: Instances of parentheses, \texttt{(} and \texttt{)}, within
+Application Identifier values in the input must be escaped using the
+\protect\hyperlink{input-processingux5cux23parse}{\texttt{parse} option}
+as \texttt{\^{}040} and \texttt{\^{}041}, respectively.
+
+\hypertarget{gs1-application-identifier-linting}{%
\paragraph{GS1 Application Identifier
-Definitions}\label{gs1-application-identifier-definitions}
+Linting}\label{gs1-application-identifier-linting}}
-The Application Identifier definitions are provided in the
+The input is checked against the structural rules for the GS1
+Application Identifiers, as described in
+\href{https://www.linkedin.com/pulse/gs1-application-identifier-syntax-dictionary-terry-burton/}{this
+article}, unless the \textbf{dontlint} option is given. The Application
+Identifier definitions are provided in the
\href{http://www.gs1.org/barcodes-epcrfid-id-keys/gs1-general-specifications}{GS1
-General Specifications}. A summary is available
-\href{http://en.wikipedia.org/wiki/GS1-128\#Full_list_of_Application_Identifiers}{here}
-however this may be out of date.
+General Specifications}.
-\section{Options Reference}\label{options-reference}
+\hypertarget{options-reference}{%
+\section{Options Reference}\label{options-reference}}
-\subsection{Check Digits}\label{check-digits}
+\hypertarget{check-digits}{%
+\subsection{Check Digits}\label{check-digits}}
-\subsubsection{includecheck}\label{includecheck}
+\hypertarget{includecheck}{%
+\subsubsection{includecheck}\label{includecheck}}
Generate check digit(s) for symbologies where the use of check digits is
optional.
-\paragraph{Example}\label{example-21}
+\hypertarget{example-25}{%
+\paragraph{Example}\label{example-25}}
Calculate the optional check characters of this Code 93 symbol:
@@ -5132,11 +6332,13 @@ Encoder: code93
\includegraphics{images/optincludecheck.eps}
-\subsubsection{includecheckintext}\label{includecheckintext}
+\hypertarget{includecheckintext}{%
+\subsubsection{includecheckintext}\label{includecheckintext}}
Show the calculated check digit in the human readable text.
-\paragraph{Notes}\label{notes}
+\hypertarget{notes}{%
+\paragraph{Notes}\label{notes}}
\begin{itemize}
\tightlist
@@ -5148,7 +6350,8 @@ Show the calculated check digit in the human readable text.
then that part is not displayed.
\end{itemize}
-\paragraph{Example}\label{example-22}
+\hypertarget{example-26}{%
+\paragraph{Example}\label{example-26}}
Display the check digit of this Royal Mail barcode:
@@ -5160,16 +6363,72 @@ Encoder: royalmail
\includegraphics{images/optincludecheckintext.eps}
-\subsection{Input Processing}\label{input-processing}
+\hypertarget{input-processing}{%
+\subsection{Input Processing}\label{input-processing}}
-\subsubsection{parse}\label{parse}
+\hypertarget{parse}{%
+\subsubsection{parse}\label{parse}}
In supporting barcode symbologies, when the \emph{parse} option is
specified, any instances of \texttt{\^{}NNN} in the data field are
replaced with their equivalent ASCII value, useful for specifying
unprintable characters.
-\paragraph{Example}\label{example-23}
+Additionally, control character names can be used to specify equivalent
+ASCII values, as follows:
+
+\begin{longtable}[]{@{}lr@{}}
+\toprule()
+Sequence & ASCII value \\
+\midrule()
+\endhead
+\texttt{\^{}NUL} & 0 \\
+\texttt{\^{}SOH} & 1 \\
+\texttt{\^{}STX} & 2 \\
+\texttt{\^{}ETX} & 3 \\
+\texttt{\^{}EOT} & 4 \\
+\texttt{\^{}ENQ} & 5 \\
+\texttt{\^{}ACK} & 6 \\
+\texttt{\^{}BEL} & 7 \\
+\texttt{\^{}BS} & 8 \\
+\texttt{\^{}TAB} & 9 \\
+\texttt{\^{}LF} & 10 \\
+\texttt{\^{}VT} & 11 \\
+\texttt{\^{}FF} & 12 \\
+\texttt{\^{}CR} & 13 \\
+\texttt{\^{}DLE} & 16 \\
+\texttt{\^{}DC1} & 17 \\
+\texttt{\^{}DC2} & 18 \\
+\texttt{\^{}DC3} & 19 \\
+\texttt{\^{}DC4} & 20 \\
+\texttt{\^{}NAK} & 21 \\
+\texttt{\^{}SYN} & 22 \\
+\texttt{\^{}ETB} & 23 \\
+\texttt{\^{}CAN} & 24 \\
+\texttt{\^{}EM} & 25 \\
+\texttt{\^{}SUB} & 26 \\
+\texttt{\^{}ESC} & 27 \\
+\texttt{\^{}FS} & 28 \\
+\texttt{\^{}GS} & 29 \\
+\texttt{\^{}RS} & 30 \\
+\texttt{\^{}US} & 31 \\
+\bottomrule()
+\end{longtable}
+
+ASCII control characters \texttt{SO} and \texttt{SI} cannot be encoded
+by name (since \texttt{SO} would prefix clash with \texttt{SOH}).
+
+Note: When this option is enabled, literal instances of "\^{}" in the
+data should be escaped as \texttt{\^{}094} to avoid replacement if the
+subsequent data characters represent a valid substitution. For example,
+literal "\^{}123" in the input data can be escaped as
+\texttt{\^{}094123}, literal "\^{}RS" in the data can be escaped as
+\texttt{\^{}094RS}, and literal "\^{}ABC" in the data cam be escaped as
+\texttt{\^{}094ABC} (in case \texttt{\^{}ABC} becomes a valid
+substitution in the future).
+
+\hypertarget{example-27}{%
+\paragraph{Example}\label{example-27}}
Equivalent symbols:
@@ -5187,17 +6446,22 @@ Encoder: datamatrix
\includegraphics{images/optparse.eps}
-\subsubsection{parsefnc}\label{parsefnc}
+\hypertarget{parsefnc}{%
+\subsubsection{parsefnc}\label{parsefnc}}
In supporting barcode symbologies, when the \textbf{parsefnc} option is
specified, non-data function characters can be specified by escaped
-combinations such as \texttt{\^{}FNC1}, \texttt{\^{}FNC4} and
-\texttt{\^{}SFT/}.
+combinations such as \texttt{\^{}FNC1}, \texttt{\^{}FNC4},
+\texttt{\^{}SFT/} and \texttt{\^{}ECI000003}.
-\paragraph{Example}\label{example-24}
+Note: When this option is enabled, literal instances of \texttt{\^{}} in
+the input data can be escaped as \texttt{\^{}\^{}}.
-Code 93 including a special shift combination \texttt{(/)A} representing
-\emph{!}:
+\hypertarget{example-28}{%
+\paragraph{Example}\label{example-28}}
+
+Manually-composed Code 93 Extended demonstrating use of the special
+shift combination \texttt{(/)A} to represent \emph{!}:
\begin{verbatim}
Data: TERRY^SFT/A
@@ -5207,13 +6471,16 @@ Encoder: code93
\includegraphics{images/optparsefnc.eps}
-\subsection{Symbol Dimensions}\label{symbol-dimensions}
+\hypertarget{symbol-dimensions}{%
+\subsection{Symbol Dimensions}\label{symbol-dimensions}}
-\subsubsection{height}\label{height}
+\hypertarget{height}{%
+\subsubsection{height}\label{height}}
Height of longest bar, in inches.
-\paragraph{Example}\label{example-25}
+\hypertarget{example-29}{%
+\paragraph{Example}\label{example-29}}
A 1/2 inch tall EAN-13:
@@ -5225,11 +6492,13 @@ Encoder: ean13
\includegraphics{images/optheight.eps}
-\subsubsection{width}\label{width}
+\hypertarget{width}{%
+\subsubsection{width}\label{width}}
Stretch the symbol to precisely this width, in inches.
-\paragraph{Notes}\label{notes-1}
+\hypertarget{notes-1}{%
+\paragraph{Notes}\label{notes-1}}
\begin{itemize}
\tightlist
@@ -5241,7 +6510,8 @@ Stretch the symbol to precisely this width, in inches.
\protect\hyperlink{resizing-symbols}{resizing symbols}.
\end{itemize}
-\paragraph{Example}\label{example-26}
+\hypertarget{example-30}{%
+\paragraph{Example}\label{example-30}}
A 2 inch wide Code 93 symbol:
@@ -5253,9 +6523,14 @@ Encoder: code93
\includegraphics{images/optwidth.eps}
-\subsection{Bar Properties}\label{bar-properties}
+\hypertarget{element-properties}{%
+\subsection{Element Properties}\label{element-properties}}
+
+These are options that allow you to compensate for print gain or print
+loss resulting from the properties of the printing process or substrate.
-\subsubsection{inkspread}\label{inkspread}
+\hypertarget{inkspread}{%
+\subsubsection{inkspread}\label{inkspread}}
For linear barcodes, the amount by which to reduce the bar widths to
compensate for inkspread, in points.
@@ -5263,7 +6538,8 @@ compensate for inkspread, in points.
For matrix barcodes, the amount by which the reduce the width and height
of dark modules to compensate for inkspread, in points.
-\paragraph{Notes}\label{notes-2}
+\hypertarget{notes-2}{%
+\paragraph{Notes}\label{notes-2}}
\begin{itemize}
\tightlist
@@ -5271,7 +6547,8 @@ of dark modules to compensate for inkspread, in points.
Negative values will increase the bar width.
\end{itemize}
-\paragraph{Example}\label{example-27}
+\hypertarget{example-31}{%
+\paragraph{Example}\label{example-31}}
Code 39 for a printer with very runny ink:
@@ -5283,7 +6560,8 @@ Encoder: code39
\includegraphics{images/optinkspread.eps}
-\subsubsection{inkspreadh}\label{inkspreadh}
+\hypertarget{inkspreadh}{%
+\subsubsection{inkspreadh}\label{inkspreadh}}
For matrix barcodes, the amount by which the reduce the width of dark
modules to compensate for inkspread, in points.
@@ -5291,18 +6569,28 @@ modules to compensate for inkspread, in points.
Note: inkspreadh is most useful for stacked-linear type barcodes such as
PDF417 and Codablock F.
-\subsubsection{inkspreadv}\label{inkspreadv}
+\hypertarget{inkspreadv}{%
+\subsubsection{inkspreadv}\label{inkspreadv}}
For matrix barcodes, the amount by which the reduce the height of dark
modules to compensate for inkspread, in points.
-\subsection{Text Properties}\label{text-properties}
+\hypertarget{dotty}{%
+\subsubsection{dotty}\label{dotty}}
+
+For matrix barcodes, render the modules as dots rather than squares. The
+dot radius can be adjusted using the \textbf{inkspread} option.
-\subsubsection{includetext}\label{includetext}
+\hypertarget{text-properties}{%
+\subsection{Text Properties}\label{text-properties}}
+
+\hypertarget{includetext}{%
+\subsubsection{includetext}\label{includetext}}
Show human readable text for data in symbol.
-\paragraph{Notes}\label{notes-3}
+\hypertarget{notes-3}{%
+\paragraph{Notes}\label{notes-3}}
\begin{itemize}
\tightlist
@@ -5311,7 +6599,8 @@ Show human readable text for data in symbol.
then it is not displayed
\end{itemize}
-\paragraph{Example}\label{example-28}
+\hypertarget{example-32}{%
+\paragraph{Example}\label{example-32}}
Display the text encoded in this Code 39 symbol:
@@ -5323,11 +6612,13 @@ Encoder: code39
\includegraphics{images/optincludetext.eps}
-\subsubsection{textfont}\label{textfont}
+\hypertarget{textfont}{%
+\subsubsection{textfont}\label{textfont}}
-The font name for text.
+The PostScript font name for text.
-\paragraph{Notes}\label{notes-4}
+\hypertarget{notes-4}{%
+\paragraph{Notes}\label{notes-4}}
\begin{itemize}
\tightlist
@@ -5337,9 +6628,19 @@ The font name for text.
\item
This option should be used in combination with the
\textbf{includetext} option.
+\item
+ The PostScript font name for a font file can be determined with the
+ following command from the fontconfig library:
+
+ \begin{itemize}
+ \tightlist
+ \item
+ \texttt{fc-scan\ -\/-format\ "\%\{postscriptname\}\textbackslash{}n"\ /usr/share/fonts/truetype/somefont.ttf}
+ \end{itemize}
\end{itemize}
-\paragraph{Example}\label{example-29}
+\hypertarget{example-33}{%
+\paragraph{Example}\label{example-33}}
Customise the human readable text of this USPS POSTNET symbol
@@ -5351,11 +6652,13 @@ Encoder: postnet
\includegraphics{images/opttextfont.eps}
-\subsubsection{textsize}\label{textsize}
+\hypertarget{textsize}{%
+\subsubsection{textsize}\label{textsize}}
The font size of the text in points.
-\paragraph{Note}\label{note}
+\hypertarget{note}{%
+\paragraph{Note}\label{note}}
\begin{itemize}
\tightlist
@@ -5364,7 +6667,8 @@ The font size of the text in points.
\textbf{includetext} option.
\end{itemize}
-\paragraph{Example}\label{example-30}
+\hypertarget{example-34}{%
+\paragraph{Example}\label{example-34}}
Customise the human readable text of this USPS POSTNET symbol
@@ -5376,11 +6680,13 @@ Encoder: postnet
\includegraphics{images/opttextfont.eps}
-\subsubsection{textgaps}\label{textgaps}
+\hypertarget{textgaps}{%
+\subsubsection{textgaps}\label{textgaps}}
The inter-character spacing of the text.
-\paragraph{Note}\label{note-1}
+\hypertarget{note-1}{%
+\paragraph{Note}\label{note-1}}
\begin{itemize}
\tightlist
@@ -5389,9 +6695,25 @@ The inter-character spacing of the text.
option.
\end{itemize}
-\subsection{Text Positioning}\label{text-positioning}
+\hypertarget{alttext}{%
+\subsubsection{alttext}\label{alttext}}
-\subsubsection{textxalign}\label{textxalign}
+Specify text to display other than what is provided in the data field.
+
+\hypertarget{note-2}{%
+\paragraph{Note}\label{note-2}}
+
+\begin{itemize}
+\tightlist
+\item
+ This option should be used in combination with the includetext option.
+\end{itemize}
+
+\hypertarget{text-positioning}{%
+\subsection{Text Positioning}\label{text-positioning}}
+
+\hypertarget{textxalign}{%
+\subsubsection{textxalign}\label{textxalign}}
The \textbf{textxalign} option is used to specify where to horizontally
position the text.
@@ -5412,20 +6734,8 @@ position the text.
\texttt{textxalign=justify}
\end{itemize}
-\paragraph{Notes}\label{notes-5}
-
-\begin{itemize}
-\tightlist
-\item
- By default (in the absence of \textbf{textxalign} or
- \textbf{textyalign}), each character of text is placed immediately
- below the corresponding modules where this is possible.
-\item
- Where there isn't such a direct relationship then the default is to
- position the text centrally beneath the symbol.
-\end{itemize}
-
-\subsubsection{textyalign}\label{textyalign}
+\hypertarget{textyalign}{%
+\subsubsection{textyalign}\label{textyalign}}
The \textbf{textyalign} option is used to specify where to vertically
position the text.
@@ -5440,7 +6750,20 @@ position the text.
\texttt{textyalign=above}
\end{itemize}
-\paragraph{Notes}\label{notes-6}
+\hypertarget{textxoffset}{%
+\subsubsection{textxoffset}\label{textxoffset}}
+
+The horizontal position of the text in points relative to the default
+position.
+
+\hypertarget{textyoffset}{%
+\subsubsection{textyoffset}\label{textyoffset}}
+
+The vertical position of the text in points relative to the default
+position.
+
+\hypertarget{notes-5}{%
+\paragraph{Notes}\label{notes-5}}
\begin{itemize}
\tightlist
@@ -5449,27 +6772,20 @@ position the text.
\textbf{textyalign}), each character of text is placed immediately
below the corresponding modules where this is possible.
\item
- Where there isn't such a direct relationship then the default is to
- position the text centrally beneath the symbol.
+ Where there isn\textquotesingle t such a direct relationship then the
+ default is to position the text centrally beneath the symbol.
\end{itemize}
-\subsubsection{textxoffset}\label{textxoffset}
-
-The horizontal position of the text in points relative to the default
-position.
-
-\subsubsection{textyoffset}\label{textyoffset}
-
-The vertical position of the text in points relative to the default
-position.
-
-\subsection{Border Properties}\label{border-properties}
+\hypertarget{border-properties}{%
+\subsection{Border Properties}\label{border-properties}}
-\subsubsection{showborder}\label{showborder}
+\hypertarget{showborder}{%
+\subsubsection{showborder}\label{showborder}}
Display a border around the symbol.
-\paragraph{Example}\label{example-31}
+\hypertarget{example-35}{%
+\paragraph{Example}\label{example-35}}
Display a customised border around this Codabar symbol:
@@ -5481,49 +6797,60 @@ Encoder: rationalizedCodabar
\includegraphics{images/optborder.eps}
-\subsubsection{borderwidth}\label{borderwidth}
+\hypertarget{borderwidth}{%
+\subsubsection{borderwidth}\label{borderwidth}}
Width of the border, in points.
-\subsubsection{borderleft}\label{borderleft}
+\hypertarget{borderleft}{%
+\subsubsection{borderleft}\label{borderleft}}
Gap between the left edge of the border and the symbol, in points.
-\subsubsection{borderright}\label{borderright}
+\hypertarget{borderright}{%
+\subsubsection{borderright}\label{borderright}}
Gap between the right edge of the border and the symbol, in points.
-\subsubsection{bordertop}\label{bordertop}
+\hypertarget{bordertop}{%
+\subsubsection{bordertop}\label{bordertop}}
Gap between the top edge of the border and the symbol, in points.
-\subsubsection{borderbottom}\label{borderbottom}
+\hypertarget{borderbottom}{%
+\subsubsection{borderbottom}\label{borderbottom}}
Gap between the bottom edge of the border and the symbol, in points.
-\subsection{Symbol Colors}\label{symbol-colors}
+\hypertarget{symbol-colors}{%
+\subsection{Symbol Colors}\label{symbol-colors}}
-\subsubsection{barcolor}\label{barcolor}
+\hypertarget{barcolor}{%
+\subsubsection{barcolor}\label{barcolor}}
Color of the bars or dark modules, either as a hex \texttt{RRGGBB} value
or a hex \texttt{CCMMYYKK} value.
-\subsubsection{backgroundcolor}\label{backgroundcolor}
+\hypertarget{backgroundcolor}{%
+\subsubsection{backgroundcolor}\label{backgroundcolor}}
Color of the light background or light modules, either as a hex
\texttt{RRGGBB} value or a hex \texttt{CCMMYYKK} value.
-\subsubsection{bordercolor}\label{bordercolor}
+\hypertarget{bordercolor}{%
+\subsubsection{bordercolor}\label{bordercolor}}
Color of the border, either as a hex \texttt{RRGGBB} value or a hex
\texttt{CCMMYYKK} value.
-\subsubsection{textcolor}\label{textcolor}
+\hypertarget{textcolor}{%
+\subsubsection{textcolor}\label{textcolor}}
Color of the respective component, either as a hex \texttt{RRGGBB} value
or a hex \texttt{CCMMYYKK} value.
-\paragraph{Examples}\label{examples-46}
+\hypertarget{examples-52}{%
+\paragraph{Examples}\label{examples-52}}
Colorized Code 11 symbol using the RGB colour space:
@@ -5545,13 +6872,16 @@ Encoder: code11
\includegraphics{images/optcolorcmyk.eps}
-\subsection{EAN-UPC Add Ons}\label{ean-upc-add-ons}
+\hypertarget{ean-upc-add-ons}{%
+\subsection{EAN-UPC Add Ons}\label{ean-upc-add-ons}}
-\subsubsection{addontextfont}\label{addontextfont}
+\hypertarget{addontextfont}{%
+\subsubsection{addontextfont}\label{addontextfont}}
The font name of the add on text.
-\paragraph{Notes}\label{notes-7}
+\hypertarget{notes-6}{%
+\paragraph{Notes}\label{notes-6}}
\begin{itemize}
\tightlist
@@ -5562,11 +6892,13 @@ The font name of the add on text.
\textbf{includetext} option.
\end{itemize}
-\subsubsection{addontextsize}\label{addontextsize}
+\hypertarget{addontextsize}{%
+\subsubsection{addontextsize}\label{addontextsize}}
The size of the add on text, in points
-\paragraph{Notes}\label{notes-8}
+\hypertarget{notes-7}{%
+\paragraph{Notes}\label{notes-7}}
\begin{itemize}
\tightlist
@@ -5575,7 +6907,8 @@ The size of the add on text, in points
\textbf{includetext} option.
\end{itemize}
-\paragraph{Example}\label{example-32}
+\hypertarget{example-36}{%
+\paragraph{Example}\label{example-36}}
Customise the human readable text of this USPS POSTNET symbol
@@ -5587,23 +6920,28 @@ Encoder: postnet
\includegraphics{images/opttextfont.eps}
-\subsubsection{addontextxoffset}\label{addontextxoffset}
+\hypertarget{addontextxoffset}{%
+\subsubsection{addontextxoffset}\label{addontextxoffset}}
Overrides the default horizontal positioning of the add on text.
-\subsubsection{addontextyoffset}\label{addontextyoffset}
+\hypertarget{addontextyoffset}{%
+\subsubsection{addontextyoffset}\label{addontextyoffset}}
Overrides the default vertical positioning of the add on text.
-\subsection{EAN-UPC Guards}\label{ean-upc-guards}
+\hypertarget{ean-upc-guards}{%
+\subsection{EAN-UPC Guards}\label{ean-upc-guards}}
-\subsubsection{guardwhitespace}\label{guardwhitespace}
+\hypertarget{guardwhitespace}{%
+\subsubsection{guardwhitespace}\label{guardwhitespace}}
-Display white space guards.
+Display whitespace guards.
-\paragraph{Example}\label{example-33}
+\hypertarget{example-37}{%
+\paragraph{Example}\label{example-37}}
-ISBN-13 with tiny white space guard:
+ISBN-13 with tiny whitespace guard:
\begin{verbatim}
Data: 978-1-873671-00
@@ -5613,33 +6951,40 @@ Encoder: isbn
\includegraphics{images/optguardsize.eps}
-\subsubsection{guardwidth}\label{guardwidth}
+\hypertarget{guardwidth}{%
+\subsubsection{guardwidth}\label{guardwidth}}
Width of the whitespace guards, in points.
-\subsubsection{guardheight}\label{guardheight}
+\hypertarget{guardheight}{%
+\subsubsection{guardheight}\label{guardheight}}
Height of the whitespace guards, in points.
-\subsubsection{guardleftpos}\label{guardleftpos}
+\hypertarget{guardleftpos}{%
+\subsubsection{guardleftpos}\label{guardleftpos}}
Override the default horizontal position of the left whitespace guard.
-\subsubsection{guardrightpos}\label{guardrightpos}
+\hypertarget{guardrightpos}{%
+\subsubsection{guardrightpos}\label{guardrightpos}}
Override the default horizontal position of the right whitespace guard.
-\subsubsection{guardleftypos}\label{guardleftypos}
+\hypertarget{guardleftypos}{%
+\subsubsection{guardleftypos}\label{guardleftypos}}
Override the default vertical position of the left whitespace guard.
-\subsubsection{guardrightypos}\label{guardrightypos}
+\hypertarget{guardrightypos}{%
+\subsubsection{guardrightypos}\label{guardrightypos}}
Override the default vertical position of the right whitespace guard.
-\paragraph{Example}\label{example-34}
+\hypertarget{example-38}{%
+\paragraph{Example}\label{example-38}}
-EAN-8 with very mangled white space guards:
+EAN-8 with very mangled whitespace guards:
\begin{verbatim}
Data: 01335583
diff --git a/graphics/pstricks/contrib/pst-barcode/dvips/pst-barcode.pro b/graphics/pstricks/contrib/pst-barcode/dvips/pst-barcode.pro
index 0e654a165b..6a6c95c977 100644
--- a/graphics/pstricks/contrib/pst-barcode/dvips/pst-barcode.pro
+++ b/graphics/pstricks/contrib/pst-barcode/dvips/pst-barcode.pro
@@ -1,9 +1,10 @@
%!PS
-%% $Id: pst-barcode.pro 519 2017-08-22 07:47:55Z herbert $
-% Barcode Writer in Pure PostScript - Version 2017-04-04
-% http://bwipp.terryburton.co.uk
+%% $Id: pst-barcode.pro 588 2022-08-23 16:49:51Z herbert $
+
+% Barcode Writer in Pure PostScript - Version 2022-08-21
+% https://bwipp.terryburton.co.uk
%
-% Copyright (c) 2004-2017 Terry Burton
+% Copyright (c) 2004-2022 Terry Burton
%
% Permission is hereby granted, free of charge, to any
% person obtaining a copy of this software and associated
@@ -28,9 +29,11 @@
% CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
% CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
% IN THE SOFTWARE.
+
% --BEGIN TEMPLATE--
+
% --BEGIN RESOURCE preamble--
-%%BeginResource: Category uk.co.terryburton.bwipp 0.0 2017040400 29725 32822
+%%BeginResource: Category uk.co.terryburton.bwipp 0.0 2022082100 29733 32838
%%BeginData: 6 ASCII Lines
currentglobal
true setglobal
@@ -42,20 +45,77 @@ setglobal
%%EndResource
% --END RESOURCE preamble--
-% --BEGIN RESOURCE raiseerror--
+% --BEGIN RESOURCE loadctx--
% --REQUIRES preamble--
-%%BeginResource: uk.co.terryburton.bwipp raiseerror 0.0 2017040400 153316 39839
-%%BeginData: 13 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp loadctx 0.0 2022082100 40205 39999
+%%BeginData: 25 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
1 dict
begin
+/loadctx {
+ % Place a context dictionary just below the current dictionary, which can
+ % be populated with static data on the first run and then carried between
+ % invocations of the encoder
+ /ctxname exch def
+ ctx null ne {
+ ctx ctxname known not {
+ ctx ctxname 10 dict put
+ /ctxdef {ctx ctxname get begin exec end} def
+ } {
+ /ctxdef {pop} def % No need to redefine within the existing context
+ } ifelse
+ currentdict ctx ctxname get end begin begin
+ } {
+ /ctxdef {exec} def % No context provided, so define ephemerally
+ } ifelse
+}
+[/barcode] {null def} forall
+bind def
+/loadctx dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
+%%EndData
+%%EndResource
+% --END RESOURCE loadctx--
+
+% --BEGIN RESOURCE unloadctx--
+% --REQUIRES preamble--
+%%BeginResource: uk.co.terryburton.bwipp unloadctx 0.0 2022082100 38856 38677
+%%BeginData: 14 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+1 dict
+begin
+/unloadctx {
+ % Remove the context which is expected to be just underneath currentdict
+ ctx null ne {
+ currentdict end end begin
+ } if
+}
+[/barcode] {null def} forall
+bind def
+/unloadctx dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
+%%EndData
+%%EndResource
+% --END RESOURCE unloadctx--
+
+% --BEGIN RESOURCE raiseerror--
+% --REQUIRES preamble--
+%%BeginResource: uk.co.terryburton.bwipp raiseerror 0.0 2022082100 39029 38860
+%%BeginData: 15 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+10 dict
+begin
/raiseerror {
- $error exch /errorinfo exch put
- $error exch /errorname exch put
- $error /command null put
- $error /newerror true put
- stop
-} bind def
+ $error exch /errorinfo exch put
+ $error exch /errorname exch put
+ $error /command null put
+ $error /newerror true put
+ stop
+}
+[/barcode] {null def} forall
+bind def
/raiseerror dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -63,12 +123,3111 @@ end
%%EndResource
% --END RESOURCE raiseerror--
+% --BEGIN RESOURCE parseinput--
+% --REQUIRES preamble loadctx unloadctx raiseerror--
+%%BeginResource: uk.co.terryburton.bwipp parseinput 0.0 2022082100 73377 69190
+%%BeginData: 174 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+10 dict
+dup /loadctx dup /uk.co.terryburton.bwipp findresource put
+dup /unloadctx dup /uk.co.terryburton.bwipp findresource put
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+begin
+/parseinput {
+
+ 20 dict begin
+
+ /parseinput //loadctx exec
+
+ /fncvals exch def
+ /barcode exch def
+
+ /parse dup dup fncvals exch get def fncvals exch undef
+ /parsefnc dup dup fncvals exch get def fncvals exch undef
+ /parseonly dup dup fncvals exch known def fncvals exch undef
+ /eci dup dup fncvals exch known def fncvals exch undef
+
+ % Control character names to ordinals
+{
+ <<
+ [
+ /NUL /SOH /STX /ETX /EOT /ENQ /ACK /BEL
+ /BS /TAB /LF /VT /FF /CR () () % SO and SI prefix clash with SOH
+ /DLE /DC1 /DC2 /DC3 /DC4 /NAK /SYN /ETB
+ /CAN /EM /SUB /ESC /FS /GS /RS /US
+ ]
+ 0 exch {
+ 1 index 1 add 3 1 roll exch 3 -1 roll
+ } forall pop
+ >> /ctrl exch def
+} ctxdef
+
+ /msg barcode length array def
+ /j 0 def
+ barcode { % loop
+ (^) search exch
+ % Copy characters up to a "^"
+ dup length exch
+ msg exch j exch [ exch {} forall ] putinterval
+ j add /j exch def
+ { % Found a "^" escape character
+ pop
+ 1 { % common exit
+
+ parse not parsefnc not and { % "^" as is
+ msg j 94 put
+ /j j 1 add def
+ exit
+ } if
+
+ % Encode "^" to start with
+ msg j 94 put
+ /j j 1 add def
+
+ % parse
+ parse {
+ dup length 3 ge { % "^XXX" byte
+ dup 0 3 getinterval ctrl exch
+ 2 copy known {
+ /j j 1 sub def % Replace "^" with ordinal
+ get msg exch j exch put
+ /j j 1 add def
+ dup length 3 sub 3 exch getinterval
+ exit
+ } {
+ pop pop
+ } ifelse
+ } if
+ dup length 2 ge { % "^XX" to byte
+ dup 0 2 getinterval ctrl exch
+ 2 copy known {
+ /j j 1 sub def % Replace "^" with ordinal
+ get msg exch j exch put
+ /j j 1 add def
+ dup length 2 sub 2 exch getinterval
+ exit
+ } {
+ pop pop
+ } ifelse
+ } if
+ dup length 3 ge { % "^NNN" to byte
+ dup 0 3 getinterval true exch {
+ dup 48 lt exch 57 gt or { pop false } if
+ } forall
+ {
+ dup 0 3 getinterval cvi dup 255 gt {
+ pop pop
+ /bwipp.invalidOrdinal (Ordinal must be 000 to 255) //raiseerror exec
+ } if
+ /j j 1 sub def % Replace "^" with ordinal
+ msg exch j exch put
+ /j j 1 add def
+ dup length 3 sub 3 exch getinterval
+ } if
+ } if
+ } if
+
+ parseonly
+ parsefnc not or
+ msg j 1 sub get 94 ne % Carat was substituted away
+ or {exit} if
+
+ % parsefnc
+ /j j 1 sub def
+ dup length 3 lt {
+ pop
+ /bwipp.truncatedFNC (Function character truncated) //raiseerror exec
+ } if
+ dup 0 get 94 eq { % "^^" -> "^"
+ msg j 94 put
+ /j j 1 add def
+ dup length 1 sub 1 exch getinterval
+ exit
+ } if
+ dup 0 3 getinterval (ECI) eq eci and { % "^ECInnnnnn" -> -1nnnnnn
+ dup length 9 lt {
+ pop
+ /bwipp.truncatedECI (ECI truncated) //raiseerror exec
+ } if
+ dup 3 6 getinterval
+ dup {
+ dup 48 lt exch 57 gt or {
+ pop pop
+ /bwipp.invalidECI (ECI must be 000000 to 999999) //raiseerror exec
+ } if
+ } forall
+ 0 exch {48 sub sub 10 mul} forall 10 idiv 1000000 sub
+ msg exch j exch put
+ /j j 1 add def
+ dup length 9 sub 9 exch getinterval
+ exit
+ } if
+ dup length 4 lt { % "^FNCx" -> fncvals{FNCx}
+ pop
+ /bwipp.truncatedFNC (Function character truncated) //raiseerror exec
+ } if
+ dup 0 4 getinterval dup fncvals exch known not {
+ dup length 28 add string dup 28 4 -1 roll putinterval
+ dup 0 (Unknown function character: ) putinterval
+ exch pop
+ /bwipp.unknownFNC exch //raiseerror exec
+ } if
+ fncvals exch get
+ msg exch j exch put
+ /j j 1 add def
+ dup length 4 sub 4 exch getinterval
+ exit
+
+ } repeat
+ } { % No more "^" characters
+ exit
+ } ifelse
+ } loop
+
+ parseonly not {
+ msg 0 j getinterval
+ } {
+ j string
+ 0 1 j 1 sub { 1 index exch dup msg exch get put } for
+ } ifelse
+
+ //unloadctx exec
+
+ end
+
+}
+[/barcode] {null def} forall
+bind def
+/parseinput dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
+%%EndData
+%%EndResource
+% --END RESOURCE parseinput--
+
+% --BEGIN RESOURCE gs1process--
+% --REQUIRES preamble loadctx unloadctx parseinput raiseerror--
+%%BeginResource: uk.co.terryburton.bwipp gs1process 0.0 2022082100 526019 593612
+%%BeginData: 2909 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+10 dict
+dup /loadctx dup /uk.co.terryburton.bwipp findresource put
+dup /unloadctx dup /uk.co.terryburton.bwipp findresource put
+dup /parseinput dup /uk.co.terryburton.bwipp findresource put
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+begin
+/gs1process {
+
+ 20 dict begin
+
+ /gs1process //loadctx exec
+
+{
+ % Extracted from the GS1 Syntax Dictionary
+ /gs1syntax <<
+
+ <<
+ /parts [
+ << /cset /N /min 18 /max 18 /opt false /linters [ /lintcsum /lintkey ] >>
+ ]
+ /dlpkey [ ]
+ >>
+ (00) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 14 /max 14 /opt false /linters [ /lintcsum /lintkey ] >>
+ ]
+ /ex [ (02) (255) (37) ]
+ /dlpkey [ [ (22) (10) (21) ] [ (235) ] ]
+ >>
+ (01) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 14 /max 14 /opt false /linters [ /lintcsum /lintkey ] >>
+ ]
+ /req [ [ (37) ] ]
+ >>
+ (02) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /X /min 1 /max 20 /opt false /linters [] >>
+ ]
+ /req [ [ (01) (02) (8006) (8026) ] ]
+ >>
+ (10) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 6 /max 6 /opt false /linters [ /lintyymmd0 ] >>
+ ]
+ /req [ [ (01) (02) (8006) (8026) ] ]
+ >>
+ (11) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 6 /max 6 /opt false /linters [ /lintyymmd0 ] >>
+ ]
+ /req [ [ (8020) ] ]
+ >>
+ (12) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 6 /max 6 /opt false /linters [ /lintyymmd0 ] >>
+ ]
+ /req [ [ (01) (02) (8006) (8026) ] ]
+ >>
+ (13) exch dup
+ (15) exch dup
+ (16) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 6 /max 6 /opt false /linters [ /lintyymmd0 ] >>
+ ]
+ /req [ [ (01) (02) (255) (8006) (8026) ] ]
+ >>
+ (17) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 2 /max 2 /opt false /linters [] >>
+ ]
+ /req [ [ (01) (02) (8006) (8026) ] ]
+ >>
+ (20) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /X /min 1 /max 20 /opt false /linters [] >>
+ ]
+ /ex [ (235) ]
+ /req [ [ (01) (8006) ] ]
+ >>
+ (21) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /X /min 1 /max 20 /opt false /linters [] >>
+ ]
+ /req [ [ (01) ] ]
+ >>
+ (22) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /X /min 1 /max 28 /opt false /linters [] >>
+ ]
+ /req [ [ (01) ] ]
+ >>
+ (235) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /X /min 1 /max 30 /opt false /linters [] >>
+ ]
+ /req [ [ (01) (02) (8006) (8026) ] ]
+ >>
+ (240) exch dup
+ (241) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 1 /max 6 /opt false /linters [] >>
+ ]
+ /req [ [ (01) (02) (8006) (8026) ] ]
+ >>
+ (242) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /X /min 1 /max 20 /opt false /linters [] >>
+ ]
+ /req [ [ (01) ] ]
+ >>
+ (243) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /X /min 1 /max 30 /opt false /linters [] >>
+ ]
+ /req [ [ (01) (8006) ] [ (21) ] ]
+ >>
+ (250) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /X /min 1 /max 30 /opt false /linters [] >>
+ ]
+ /req [ [ (01) (8006) ] ]
+ >>
+ (251) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 13 /max 13 /opt false /linters [ /lintcsum /lintkey ] >>
+ << /cset /X /min 1 /max 17 /opt true /linters [] >>
+ ]
+ /dlpkey [ ]
+ >>
+ (253) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /X /min 1 /max 20 /opt false /linters [] >>
+ ]
+ /req [ [ (414) ] ]
+ >>
+ (254) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 13 /max 13 /opt false /linters [ /lintcsum /lintkey ] >>
+ << /cset /N /min 1 /max 12 /opt true /linters [] >>
+ ]
+ /ex [ (01) (02) (415) (8006) (8020) (8026) ]
+ /dlpkey [ ]
+ >>
+ (255) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 1 /max 8 /opt false /linters [] >>
+ ]
+ /req [ [ (01) (02) ] ]
+ >>
+ (30) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 6 /max 6 /opt false /linters [] >>
+ ]
+ /ex [ (310n) ]
+ /req [ [ (01) (02) ] ]
+ >>
+ (3100) exch dup
+ (3101) exch dup
+ (3102) exch dup
+ (3103) exch dup
+ (3104) exch dup
+ (3105) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 6 /max 6 /opt false /linters [] >>
+ ]
+ /ex [ (311n) ]
+ /req [ [ (01) (02) ] ]
+ >>
+ (3110) exch dup
+ (3111) exch dup
+ (3112) exch dup
+ (3113) exch dup
+ (3114) exch dup
+ (3115) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 6 /max 6 /opt false /linters [] >>
+ ]
+ /ex [ (312n) ]
+ /req [ [ (01) (02) ] ]
+ >>
+ (3120) exch dup
+ (3121) exch dup
+ (3122) exch dup
+ (3123) exch dup
+ (3124) exch dup
+ (3125) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 6 /max 6 /opt false /linters [] >>
+ ]
+ /ex [ (313n) ]
+ /req [ [ (01) (02) ] ]
+ >>
+ (3130) exch dup
+ (3131) exch dup
+ (3132) exch dup
+ (3133) exch dup
+ (3134) exch dup
+ (3135) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 6 /max 6 /opt false /linters [] >>
+ ]
+ /ex [ (314n) ]
+ /req [ [ (01) (02) ] ]
+ >>
+ (3140) exch dup
+ (3141) exch dup
+ (3142) exch dup
+ (3143) exch dup
+ (3144) exch dup
+ (3145) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 6 /max 6 /opt false /linters [] >>
+ ]
+ /ex [ (315n) ]
+ /req [ [ (01) (02) ] ]
+ >>
+ (3150) exch dup
+ (3151) exch dup
+ (3152) exch dup
+ (3153) exch dup
+ (3154) exch dup
+ (3155) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 6 /max 6 /opt false /linters [] >>
+ ]
+ /ex [ (316n) ]
+ /req [ [ (01) (02) ] ]
+ >>
+ (3160) exch dup
+ (3161) exch dup
+ (3162) exch dup
+ (3163) exch dup
+ (3164) exch dup
+ (3165) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 6 /max 6 /opt false /linters [] >>
+ ]
+ /ex [ (320n) ]
+ /req [ [ (01) (02) ] ]
+ >>
+ (3200) exch dup
+ (3201) exch dup
+ (3202) exch dup
+ (3203) exch dup
+ (3204) exch dup
+ (3205) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 6 /max 6 /opt false /linters [] >>
+ ]
+ /ex [ (321n) ]
+ /req [ [ (01) (02) ] ]
+ >>
+ (3210) exch dup
+ (3211) exch dup
+ (3212) exch dup
+ (3213) exch dup
+ (3214) exch dup
+ (3215) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 6 /max 6 /opt false /linters [] >>
+ ]
+ /ex [ (322n) ]
+ /req [ [ (01) (02) ] ]
+ >>
+ (3220) exch dup
+ (3221) exch dup
+ (3222) exch dup
+ (3223) exch dup
+ (3224) exch dup
+ (3225) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 6 /max 6 /opt false /linters [] >>
+ ]
+ /ex [ (323n) ]
+ /req [ [ (01) (02) ] ]
+ >>
+ (3230) exch dup
+ (3231) exch dup
+ (3232) exch dup
+ (3233) exch dup
+ (3234) exch dup
+ (3235) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 6 /max 6 /opt false /linters [] >>
+ ]
+ /ex [ (324n) ]
+ /req [ [ (01) (02) ] ]
+ >>
+ (3240) exch dup
+ (3241) exch dup
+ (3242) exch dup
+ (3243) exch dup
+ (3244) exch dup
+ (3245) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 6 /max 6 /opt false /linters [] >>
+ ]
+ /ex [ (325n) ]
+ /req [ [ (01) (02) ] ]
+ >>
+ (3250) exch dup
+ (3251) exch dup
+ (3252) exch dup
+ (3253) exch dup
+ (3254) exch dup
+ (3255) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 6 /max 6 /opt false /linters [] >>
+ ]
+ /ex [ (326n) ]
+ /req [ [ (01) (02) ] ]
+ >>
+ (3260) exch dup
+ (3261) exch dup
+ (3262) exch dup
+ (3263) exch dup
+ (3264) exch dup
+ (3265) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 6 /max 6 /opt false /linters [] >>
+ ]
+ /ex [ (327n) ]
+ /req [ [ (01) (02) ] ]
+ >>
+ (3270) exch dup
+ (3271) exch dup
+ (3272) exch dup
+ (3273) exch dup
+ (3274) exch dup
+ (3275) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 6 /max 6 /opt false /linters [] >>
+ ]
+ /ex [ (328n) ]
+ /req [ [ (01) (02) ] ]
+ >>
+ (3280) exch dup
+ (3281) exch dup
+ (3282) exch dup
+ (3283) exch dup
+ (3284) exch dup
+ (3285) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 6 /max 6 /opt false /linters [] >>
+ ]
+ /ex [ (329n) ]
+ /req [ [ (01) (02) ] ]
+ >>
+ (3290) exch dup
+ (3291) exch dup
+ (3292) exch dup
+ (3293) exch dup
+ (3294) exch dup
+ (3295) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 6 /max 6 /opt false /linters [] >>
+ ]
+ /ex [ (330n) ]
+ /req [ [ (00) (01) ] ]
+ >>
+ (3300) exch dup
+ (3301) exch dup
+ (3302) exch dup
+ (3303) exch dup
+ (3304) exch dup
+ (3305) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 6 /max 6 /opt false /linters [] >>
+ ]
+ /ex [ (331n) ]
+ /req [ [ (00) (01) ] ]
+ >>
+ (3310) exch dup
+ (3311) exch dup
+ (3312) exch dup
+ (3313) exch dup
+ (3314) exch dup
+ (3315) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 6 /max 6 /opt false /linters [] >>
+ ]
+ /ex [ (332n) ]
+ /req [ [ (00) (01) ] ]
+ >>
+ (3320) exch dup
+ (3321) exch dup
+ (3322) exch dup
+ (3323) exch dup
+ (3324) exch dup
+ (3325) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 6 /max 6 /opt false /linters [] >>
+ ]
+ /ex [ (333n) ]
+ /req [ [ (00) (01) ] ]
+ >>
+ (3330) exch dup
+ (3331) exch dup
+ (3332) exch dup
+ (3333) exch dup
+ (3334) exch dup
+ (3335) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 6 /max 6 /opt false /linters [] >>
+ ]
+ /ex [ (334n) ]
+ /req [ [ (00) (01) ] ]
+ >>
+ (3340) exch dup
+ (3341) exch dup
+ (3342) exch dup
+ (3343) exch dup
+ (3344) exch dup
+ (3345) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 6 /max 6 /opt false /linters [] >>
+ ]
+ /ex [ (335n) ]
+ /req [ [ (00) (01) ] ]
+ >>
+ (3350) exch dup
+ (3351) exch dup
+ (3352) exch dup
+ (3353) exch dup
+ (3354) exch dup
+ (3355) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 6 /max 6 /opt false /linters [] >>
+ ]
+ /ex [ (336n) ]
+ /req [ [ (00) (01) ] ]
+ >>
+ (3360) exch dup
+ (3361) exch dup
+ (3362) exch dup
+ (3363) exch dup
+ (3364) exch dup
+ (3365) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 6 /max 6 /opt false /linters [] >>
+ ]
+ /ex [ (337n) ]
+ /req [ [ (01) ] ]
+ >>
+ (3370) exch dup
+ (3371) exch dup
+ (3372) exch dup
+ (3373) exch dup
+ (3374) exch dup
+ (3375) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 6 /max 6 /opt false /linters [] >>
+ ]
+ /ex [ (340n) ]
+ /req [ [ (00) (01) ] ]
+ >>
+ (3400) exch dup
+ (3401) exch dup
+ (3402) exch dup
+ (3403) exch dup
+ (3404) exch dup
+ (3405) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 6 /max 6 /opt false /linters [] >>
+ ]
+ /ex [ (341n) ]
+ /req [ [ (00) (01) ] ]
+ >>
+ (3410) exch dup
+ (3411) exch dup
+ (3412) exch dup
+ (3413) exch dup
+ (3414) exch dup
+ (3415) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 6 /max 6 /opt false /linters [] >>
+ ]
+ /ex [ (342n) ]
+ /req [ [ (00) (01) ] ]
+ >>
+ (3420) exch dup
+ (3421) exch dup
+ (3422) exch dup
+ (3423) exch dup
+ (3424) exch dup
+ (3425) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 6 /max 6 /opt false /linters [] >>
+ ]
+ /ex [ (343n) ]
+ /req [ [ (00) (01) ] ]
+ >>
+ (3430) exch dup
+ (3431) exch dup
+ (3432) exch dup
+ (3433) exch dup
+ (3434) exch dup
+ (3435) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 6 /max 6 /opt false /linters [] >>
+ ]
+ /ex [ (344n) ]
+ /req [ [ (00) (01) ] ]
+ >>
+ (3440) exch dup
+ (3441) exch dup
+ (3442) exch dup
+ (3443) exch dup
+ (3444) exch dup
+ (3445) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 6 /max 6 /opt false /linters [] >>
+ ]
+ /ex [ (345n) ]
+ /req [ [ (00) (01) ] ]
+ >>
+ (3450) exch dup
+ (3451) exch dup
+ (3452) exch dup
+ (3453) exch dup
+ (3454) exch dup
+ (3455) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 6 /max 6 /opt false /linters [] >>
+ ]
+ /ex [ (346n) ]
+ /req [ [ (00) (01) ] ]
+ >>
+ (3460) exch dup
+ (3461) exch dup
+ (3462) exch dup
+ (3463) exch dup
+ (3464) exch dup
+ (3465) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 6 /max 6 /opt false /linters [] >>
+ ]
+ /ex [ (347n) ]
+ /req [ [ (00) (01) ] ]
+ >>
+ (3470) exch dup
+ (3471) exch dup
+ (3472) exch dup
+ (3473) exch dup
+ (3474) exch dup
+ (3475) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 6 /max 6 /opt false /linters [] >>
+ ]
+ /ex [ (348n) ]
+ /req [ [ (00) (01) ] ]
+ >>
+ (3480) exch dup
+ (3481) exch dup
+ (3482) exch dup
+ (3483) exch dup
+ (3484) exch dup
+ (3485) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 6 /max 6 /opt false /linters [] >>
+ ]
+ /ex [ (349n) ]
+ /req [ [ (00) (01) ] ]
+ >>
+ (3490) exch dup
+ (3491) exch dup
+ (3492) exch dup
+ (3493) exch dup
+ (3494) exch dup
+ (3495) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 6 /max 6 /opt false /linters [] >>
+ ]
+ /ex [ (350n) ]
+ /req [ [ (01) (02) ] ]
+ >>
+ (3500) exch dup
+ (3501) exch dup
+ (3502) exch dup
+ (3503) exch dup
+ (3504) exch dup
+ (3505) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 6 /max 6 /opt false /linters [] >>
+ ]
+ /ex [ (351n) ]
+ /req [ [ (01) (02) ] ]
+ >>
+ (3510) exch dup
+ (3511) exch dup
+ (3512) exch dup
+ (3513) exch dup
+ (3514) exch dup
+ (3515) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 6 /max 6 /opt false /linters [] >>
+ ]
+ /ex [ (352n) ]
+ /req [ [ (01) (02) ] ]
+ >>
+ (3520) exch dup
+ (3521) exch dup
+ (3522) exch dup
+ (3523) exch dup
+ (3524) exch dup
+ (3525) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 6 /max 6 /opt false /linters [] >>
+ ]
+ /ex [ (353n) ]
+ /req [ [ (00) (01) ] ]
+ >>
+ (3530) exch dup
+ (3531) exch dup
+ (3532) exch dup
+ (3533) exch dup
+ (3534) exch dup
+ (3535) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 6 /max 6 /opt false /linters [] >>
+ ]
+ /ex [ (354n) ]
+ /req [ [ (00) (01) ] ]
+ >>
+ (3540) exch dup
+ (3541) exch dup
+ (3542) exch dup
+ (3543) exch dup
+ (3544) exch dup
+ (3545) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 6 /max 6 /opt false /linters [] >>
+ ]
+ /ex [ (355n) ]
+ /req [ [ (00) (01) ] ]
+ >>
+ (3550) exch dup
+ (3551) exch dup
+ (3552) exch dup
+ (3553) exch dup
+ (3554) exch dup
+ (3555) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 6 /max 6 /opt false /linters [] >>
+ ]
+ /ex [ (356n) ]
+ /req [ [ (01) (02) ] ]
+ >>
+ (3560) exch dup
+ (3561) exch dup
+ (3562) exch dup
+ (3563) exch dup
+ (3564) exch dup
+ (3565) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 6 /max 6 /opt false /linters [] >>
+ ]
+ /ex [ (357n) ]
+ /req [ [ (01) (02) ] ]
+ >>
+ (3570) exch dup
+ (3571) exch dup
+ (3572) exch dup
+ (3573) exch dup
+ (3574) exch dup
+ (3575) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 6 /max 6 /opt false /linters [] >>
+ ]
+ /ex [ (360n) ]
+ /req [ [ (01) (02) ] ]
+ >>
+ (3600) exch dup
+ (3601) exch dup
+ (3602) exch dup
+ (3603) exch dup
+ (3604) exch dup
+ (3605) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 6 /max 6 /opt false /linters [] >>
+ ]
+ /ex [ (361n) ]
+ /req [ [ (01) (02) ] ]
+ >>
+ (3610) exch dup
+ (3611) exch dup
+ (3612) exch dup
+ (3613) exch dup
+ (3614) exch dup
+ (3615) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 6 /max 6 /opt false /linters [] >>
+ ]
+ /ex [ (362n) ]
+ /req [ [ (00) (01) ] ]
+ >>
+ (3620) exch dup
+ (3621) exch dup
+ (3622) exch dup
+ (3623) exch dup
+ (3624) exch dup
+ (3625) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 6 /max 6 /opt false /linters [] >>
+ ]
+ /ex [ (363n) ]
+ /req [ [ (00) (01) ] ]
+ >>
+ (3630) exch dup
+ (3631) exch dup
+ (3632) exch dup
+ (3633) exch dup
+ (3634) exch dup
+ (3635) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 6 /max 6 /opt false /linters [] >>
+ ]
+ /ex [ (364n) ]
+ /req [ [ (01) (02) ] ]
+ >>
+ (3640) exch dup
+ (3641) exch dup
+ (3642) exch dup
+ (3643) exch dup
+ (3644) exch dup
+ (3645) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 6 /max 6 /opt false /linters [] >>
+ ]
+ /ex [ (365n) ]
+ /req [ [ (01) (02) ] ]
+ >>
+ (3650) exch dup
+ (3651) exch dup
+ (3652) exch dup
+ (3653) exch dup
+ (3654) exch dup
+ (3655) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 6 /max 6 /opt false /linters [] >>
+ ]
+ /ex [ (366n) ]
+ /req [ [ (01) (02) ] ]
+ >>
+ (3660) exch dup
+ (3661) exch dup
+ (3662) exch dup
+ (3663) exch dup
+ (3664) exch dup
+ (3665) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 6 /max 6 /opt false /linters [] >>
+ ]
+ /ex [ (367n) ]
+ /req [ [ (00) (01) ] ]
+ >>
+ (3670) exch dup
+ (3671) exch dup
+ (3672) exch dup
+ (3673) exch dup
+ (3674) exch dup
+ (3675) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 6 /max 6 /opt false /linters [] >>
+ ]
+ /ex [ (368n) ]
+ /req [ [ (00) (01) ] ]
+ >>
+ (3680) exch dup
+ (3681) exch dup
+ (3682) exch dup
+ (3683) exch dup
+ (3684) exch dup
+ (3685) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 6 /max 6 /opt false /linters [] >>
+ ]
+ /ex [ (369n) ]
+ /req [ [ (00) (01) ] ]
+ >>
+ (3690) exch dup
+ (3691) exch dup
+ (3692) exch dup
+ (3693) exch dup
+ (3694) exch dup
+ (3695) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 1 /max 8 /opt false /linters [] >>
+ ]
+ /req [ [ (00) ] [ (02) (8026) ] ]
+ >>
+ (37) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 1 /max 15 /opt false /linters [] >>
+ ]
+ /ex [ (390n) (391n) (394n) (8111) ]
+ /req [ [ (255) (8020) ] ]
+ >>
+ (3900) exch dup
+ (3901) exch dup
+ (3902) exch dup
+ (3903) exch dup
+ (3904) exch dup
+ (3905) exch dup
+ (3906) exch dup
+ (3907) exch dup
+ (3908) exch dup
+ (3909) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 3 /max 3 /opt false /linters [ /lintiso4217 ] >>
+ << /cset /N /min 1 /max 15 /opt false /linters [] >>
+ ]
+ /ex [ (391n) ]
+ /req [ [ (8020) ] ]
+ >>
+ (3910) exch dup
+ (3911) exch dup
+ (3912) exch dup
+ (3913) exch dup
+ (3914) exch dup
+ (3915) exch dup
+ (3916) exch dup
+ (3917) exch dup
+ (3918) exch dup
+ (3919) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 1 /max 15 /opt false /linters [] >>
+ ]
+ /ex [ (392n) (393n) ]
+ /req [ [ (01) ] [ (30) (31nn) (32nn) (35nn) (36nn) ] ]
+ >>
+ (3920) exch dup
+ (3921) exch dup
+ (3922) exch dup
+ (3923) exch dup
+ (3924) exch dup
+ (3925) exch dup
+ (3926) exch dup
+ (3927) exch dup
+ (3928) exch dup
+ (3929) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 3 /max 3 /opt false /linters [ /lintiso4217 ] >>
+ << /cset /N /min 1 /max 15 /opt false /linters [] >>
+ ]
+ /ex [ (393n) ]
+ /req [ [ (30) (31nn) (32nn) (35nn) (36nn) ] ]
+ >>
+ (3930) exch dup
+ (3931) exch dup
+ (3932) exch dup
+ (3933) exch dup
+ (3934) exch dup
+ (3935) exch dup
+ (3936) exch dup
+ (3937) exch dup
+ (3938) exch dup
+ (3939) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 4 /max 4 /opt false /linters [] >>
+ ]
+ /ex [ (394n) (8111) ]
+ /req [ [ (255) ] ]
+ >>
+ (3940) exch dup
+ (3941) exch dup
+ (3942) exch dup
+ (3943) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 6 /max 6 /opt false /linters [] >>
+ ]
+ /ex [ (392n) (393n) (395n) (8005) ]
+ /req [ [ (30) (31nn) (32nn) (35nn) (36nn) ] ]
+ >>
+ (3950) exch dup
+ (3951) exch dup
+ (3952) exch dup
+ (3953) exch dup
+ (3954) exch dup
+ (3955) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /X /min 1 /max 30 /opt false /linters [] >>
+ ]
+ >>
+ (400) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /X /min 1 /max 30 /opt false /linters [ /lintkey ] >>
+ ]
+ /dlpkey [ ]
+ >>
+ (401) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 17 /max 17 /opt false /linters [ /lintcsum /lintkey ] >>
+ ]
+ /dlpkey [ ]
+ >>
+ (402) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /X /min 1 /max 30 /opt false /linters [] >>
+ ]
+ /req [ [ (00) ] ]
+ >>
+ (403) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 13 /max 13 /opt false /linters [ /lintcsum /lintkey ] >>
+ ]
+ >>
+ (410) exch dup
+ (411) exch dup
+ (412) exch dup
+ (413) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 13 /max 13 /opt false /linters [ /lintcsum /lintkey ] >>
+ ]
+ /dlpkey [ [ (254) ] [ (7040) ] ]
+ >>
+ (414) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 13 /max 13 /opt false /linters [ /lintcsum /lintkey ] >>
+ ]
+ /req [ [ (8020) ] ]
+ >>
+ (415) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 13 /max 13 /opt false /linters [ /lintcsum /lintkey ] >>
+ ]
+ >>
+ (416) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 13 /max 13 /opt false /linters [ /lintcsum /lintkey ] >>
+ ]
+ /dlpkey [ [ (7040) ] ]
+ >>
+ (417) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /X /min 1 /max 20 /opt false /linters [] >>
+ ]
+ /ex [ (421) ]
+ >>
+ (420) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 3 /max 3 /opt false /linters [ /lintiso3166 ] >>
+ << /cset /X /min 1 /max 9 /opt false /linters [] >>
+ ]
+ /ex [ (4307) ]
+ >>
+ (421) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 3 /max 3 /opt false /linters [ /lintiso3166 ] >>
+ ]
+ /ex [ (426) ]
+ /req [ [ (01) (02) (8006) (8026) ] ]
+ >>
+ (422) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 1 /max 15 /opt false /linters [ /lintiso3166list ] >>
+ ]
+ /ex [ (426) ]
+ /req [ [ (01) (02) ] ]
+ >>
+ (423) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 3 /max 3 /opt false /linters [ /lintiso3166 ] >>
+ ]
+ /ex [ (426) ]
+ /req [ [ (01) (02) ] ]
+ >>
+ (424) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 1 /max 15 /opt false /linters [ /lintiso3166list ] >>
+ ]
+ /ex [ (426) ]
+ /req [ [ (01) (02) ] ]
+ >>
+ (425) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 3 /max 3 /opt false /linters [ /lintiso3166 ] >>
+ ]
+ /req [ [ (01) (02) ] ]
+ >>
+ (426) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /X /min 1 /max 3 /opt false /linters [] >>
+ ]
+ /req [ [ (01) (02) ] [ (422) ] ]
+ >>
+ (427) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /X /min 1 /max 35 /opt false /linters [ /lintpcenc ] >>
+ ]
+ /req [ [ (00) ] ]
+ >>
+ (4300) exch dup
+ (4301) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /X /min 1 /max 70 /opt false /linters [ /lintpcenc ] >>
+ ]
+ /req [ [ (00) ] ]
+ >>
+ (4302) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /X /min 1 /max 70 /opt false /linters [ /lintpcenc ] >>
+ ]
+ /req [ [ (4302) ] ]
+ >>
+ (4303) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /X /min 1 /max 70 /opt false /linters [ /lintpcenc ] >>
+ ]
+ /req [ [ (00) ] ]
+ >>
+ (4304) exch dup
+ (4305) exch dup
+ (4306) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /X /min 2 /max 2 /opt false /linters [ /lintiso3166alpha2 ] >>
+ ]
+ /req [ [ (00) ] ]
+ >>
+ (4307) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /X /min 1 /max 30 /opt false /linters [] >>
+ ]
+ /req [ [ (00) ] ]
+ >>
+ (4308) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 20 /max 20 /opt false /linters [ /lintlatlong ] >>
+ ]
+ /req [ [ (00) ] ]
+ >>
+ (4309) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /X /min 1 /max 35 /opt false /linters [ /lintpcenc ] >>
+ ]
+ /req [ [ (00) ] ]
+ >>
+ (4310) exch dup
+ (4311) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /X /min 1 /max 70 /opt false /linters [ /lintpcenc ] >>
+ ]
+ /req [ [ (00) ] ]
+ >>
+ (4312) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /X /min 1 /max 70 /opt false /linters [ /lintpcenc ] >>
+ ]
+ /req [ [ (4312) ] ]
+ >>
+ (4313) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /X /min 1 /max 70 /opt false /linters [ /lintpcenc ] >>
+ ]
+ /req [ [ (00) ] ]
+ >>
+ (4314) exch dup
+ (4315) exch dup
+ (4316) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /X /min 2 /max 2 /opt false /linters [ /lintiso3166alpha2 ] >>
+ ]
+ /req [ [ (00) ] ]
+ >>
+ (4317) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /X /min 1 /max 20 /opt false /linters [] >>
+ ]
+ /req [ [ (00) ] ]
+ >>
+ (4318) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /X /min 1 /max 30 /opt false /linters [] >>
+ ]
+ /req [ [ (00) ] ]
+ >>
+ (4319) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /X /min 1 /max 35 /opt false /linters [ /lintpcenc ] >>
+ ]
+ /req [ [ (00) ] ]
+ >>
+ (4320) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 1 /max 1 /opt false /linters [ /lintyesno ] >>
+ ]
+ /req [ [ (00) ] ]
+ >>
+ (4321) exch dup
+ (4322) exch dup
+ (4323) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 6 /max 6 /opt false /linters [ /lintyymmd0 ] >>
+ << /cset /N /min 4 /max 4 /opt false /linters [ /linthhmm ] >>
+ ]
+ /req [ [ (00) ] ]
+ >>
+ (4324) exch dup
+ (4325) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 6 /max 6 /opt false /linters [ /lintyymmdd ] >>
+ ]
+ /req [ [ (00) ] ]
+ >>
+ (4326) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 13 /max 13 /opt false /linters [] >>
+ ]
+ /req [ [ (01) (02) (8006) (8026) ] ]
+ >>
+ (7001) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /X /min 1 /max 30 /opt false /linters [] >>
+ ]
+ /req [ [ (01) (02) ] ]
+ >>
+ (7002) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 6 /max 6 /opt false /linters [ /lintyymmdd ] >>
+ << /cset /N /min 4 /max 4 /opt false /linters [ /linthhmm ] >>
+ ]
+ /req [ [ (01) (02) ] ]
+ >>
+ (7003) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 1 /max 4 /opt false /linters [] >>
+ ]
+ /req [ [ (01) ] [ (10) ] ]
+ >>
+ (7004) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /X /min 1 /max 12 /opt false /linters [] >>
+ ]
+ /req [ [ (01) (02) ] ]
+ >>
+ (7005) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 6 /max 6 /opt false /linters [ /lintyymmdd ] >>
+ ]
+ /req [ [ (01) (02) ] ]
+ >>
+ (7006) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 6 /max 6 /opt false /linters [ /lintyymmdd ] >>
+ << /cset /N /min 6 /max 6 /opt true /linters [ /lintyymmdd ] >>
+ ]
+ /req [ [ (01) (02) ] ]
+ >>
+ (7007) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /X /min 1 /max 3 /opt false /linters [] >>
+ ]
+ /req [ [ (01) (02) ] ]
+ >>
+ (7008) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /X /min 1 /max 10 /opt false /linters [] >>
+ ]
+ /req [ [ (01) (02) ] ]
+ >>
+ (7009) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /X /min 1 /max 2 /opt false /linters [] >>
+ ]
+ /req [ [ (01) (02) ] ]
+ >>
+ (7010) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 6 /max 6 /opt false /linters [ /lintyymmdd ] >>
+ << /cset /N /min 4 /max 4 /opt true /linters [ /linthhmm ] >>
+ ]
+ /req [ [ (01) (02) ] ]
+ >>
+ (7011) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /X /min 1 /max 20 /opt false /linters [] >>
+ ]
+ /req [ [ (01) (8006) ] [ (416) ] ]
+ >>
+ (7020) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /X /min 1 /max 20 /opt false /linters [] >>
+ ]
+ /req [ [ (01) (8006) ] ]
+ >>
+ (7021) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /X /min 1 /max 20 /opt false /linters [] >>
+ ]
+ /req [ [ (7021) ] ]
+ >>
+ (7022) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /X /min 1 /max 30 /opt false /linters [ /lintkey ] >>
+ ]
+ >>
+ (7023) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 3 /max 3 /opt false /linters [ /lintiso3166999 ] >>
+ << /cset /X /min 1 /max 27 /opt false /linters [] >>
+ ]
+ /req [ [ (01) (02) ] ]
+ >>
+ (7030) exch dup
+ (7031) exch dup
+ (7032) exch dup
+ (7033) exch dup
+ (7034) exch dup
+ (7035) exch dup
+ (7036) exch dup
+ (7037) exch dup
+ (7038) exch dup
+ (7039) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 1 /max 1 /opt false /linters [] >>
+ << /cset /X /min 1 /max 1 /opt false /linters [] >>
+ << /cset /X /min 1 /max 1 /opt false /linters [] >>
+ << /cset /X /min 1 /max 1 /opt false /linters [ /lintimporteridx ] >>
+ ]
+ >>
+ (7040) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /X /min 1 /max 20 /opt false /linters [] >>
+ ]
+ /req [ [ (01) ] ]
+ >>
+ (710) exch dup
+ (711) exch dup
+ (712) exch dup
+ (713) exch dup
+ (714) exch dup
+ (715) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /X /min 2 /max 2 /opt false /linters [] >>
+ << /cset /X /min 1 /max 28 /opt false /linters [] >>
+ ]
+ /req [ [ (01) (8004) ] ]
+ >>
+ (7230) exch dup
+ (7231) exch dup
+ (7232) exch dup
+ (7233) exch dup
+ (7234) exch dup
+ (7235) exch dup
+ (7236) exch dup
+ (7237) exch dup
+ (7238) exch dup
+ (7239) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /X /min 1 /max 20 /opt false /linters [] >>
+ ]
+ /req [ [ (01) (8006) ] ]
+ >>
+ (7240) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 4 /max 4 /opt false /linters [ /lintnonzero ] >>
+ << /cset /N /min 5 /max 5 /opt false /linters [ /lintnonzero ] >>
+ << /cset /N /min 3 /max 3 /opt false /linters [ /lintnonzero ] >>
+ << /cset /N /min 1 /max 1 /opt false /linters [ /lintwinding ] >>
+ << /cset /N /min 1 /max 1 /opt false /linters [] >>
+ ]
+ /req [ [ (01) ] ]
+ >>
+ (8001) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /X /min 1 /max 20 /opt false /linters [] >>
+ ]
+ >>
+ (8002) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 1 /max 1 /opt false /linters [ /lintzero ] >>
+ << /cset /N /min 13 /max 13 /opt false /linters [ /lintcsum /lintkey ] >>
+ << /cset /X /min 1 /max 16 /opt true /linters [] >>
+ ]
+ /dlpkey [ ]
+ >>
+ (8003) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /X /min 1 /max 30 /opt false /linters [ /lintkey ] >>
+ ]
+ /dlpkey [ [ (7040) ] ]
+ >>
+ (8004) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 6 /max 6 /opt false /linters [] >>
+ ]
+ /req [ [ (01) (02) ] ]
+ >>
+ (8005) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 14 /max 14 /opt false /linters [ /lintcsum ] >>
+ << /cset /N /min 4 /max 4 /opt false /linters [ /lintpieceoftotal ] >>
+ ]
+ /ex [ (01) (37) ]
+ /dlpkey [ [ (22) (10) (21) ] ]
+ >>
+ (8006) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /X /min 1 /max 34 /opt false /linters [ /lintiban ] >>
+ ]
+ /req [ [ (415) ] ]
+ >>
+ (8007) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 8 /max 8 /opt false /linters [ /lintyymmddhh ] >>
+ << /cset /N /min 1 /max 4 /opt true /linters [ /lintmmoptss ] >>
+ ]
+ /req [ [ (01) (02) ] ]
+ >>
+ (8008) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /X /min 1 /max 50 /opt false /linters [] >>
+ ]
+ /req [ [ (00) (01) ] ]
+ >>
+ (8009) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /Y /min 1 /max 30 /opt false /linters [ /lintkey ] >>
+ ]
+ /dlpkey [ [ (8011) ] ]
+ >>
+ (8010) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 1 /max 12 /opt false /linters [ /lintnozeroprefix ] >>
+ ]
+ /req [ [ (8010) ] ]
+ >>
+ (8011) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /X /min 1 /max 20 /opt false /linters [] >>
+ ]
+ /req [ [ (01) (8006) ] ]
+ >>
+ (8012) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /X /min 1 /max 25 /opt false /linters [ /lintcsumalpha /lintkey ] >>
+ ]
+ /dlpkey [ ]
+ >>
+ (8013) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 18 /max 18 /opt false /linters [ /lintcsum ] >>
+ ]
+ /dlpkey [ [ (8019) ] ]
+ >>
+ (8017) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 18 /max 18 /opt false /linters [ /lintcsum ] >>
+ ]
+ /ex [ (8017) ]
+ /dlpkey [ [ (8019) ] ]
+ >>
+ (8018) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 1 /max 10 /opt false /linters [] >>
+ ]
+ /req [ [ (8017) (8018) ] ]
+ >>
+ (8019) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /X /min 1 /max 25 /opt false /linters [] >>
+ ]
+ /req [ [ (415) ] ]
+ >>
+ (8020) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 14 /max 14 /opt false /linters [ /lintcsum ] >>
+ << /cset /N /min 4 /max 4 /opt false /linters [ /lintpieceoftotal ] >>
+ ]
+ /ex [ (02) (8006) ]
+ /req [ [ (37) ] ]
+ >>
+ (8026) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /X /min 1 /max 70 /opt false /linters [ /lintcouponcode ] >>
+ ]
+ >>
+ (8110) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /N /min 4 /max 4 /opt false /linters [] >>
+ ]
+ /req [ [ (255) ] ]
+ >>
+ (8111) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /X /min 1 /max 70 /opt false /linters [ /lintcouponposoffer ] >>
+ ]
+ >>
+ (8112) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /X /min 1 /max 70 /opt false /linters [] >>
+ ]
+ /req [ [ (01) ] ]
+ >>
+ (8200) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /X /min 1 /max 30 /opt false /linters [] >>
+ ]
+ >>
+ (90) exch dup
+ pop
+
+ <<
+ /parts [
+ << /cset /X /min 1 /max 90 /opt false /linters [] >>
+ ]
+ >>
+ (91) exch dup
+ (92) exch dup
+ (93) exch dup
+ (94) exch dup
+ (95) exch dup
+ (96) exch dup
+ (97) exch dup
+ (98) exch dup
+ (99) exch dup
+ pop
+
+ >> def
+} ctxdef
+
+ % Extract AIs and vals from provided GS1 data in the indicated format
+
+ /ai eq { % Bracketed AI element string
+
+ % Parse out AIs and values
+ (\() anchorsearch not {
+ pop /bwipp.GS1aiMissingOpenParen (AIs must start with '\(') //raiseerror exec
+ } if
+ pop
+ mark exch { % loop
+ dup () eq {pop exit} if
+ (\)) search not {
+ cleartomark /bwipp.GS1aiMissingCloseParen (AIs must end with '\)') //raiseerror exec
+ } if
+ exch pop exch
+ (\() search { exch pop exch } { () } ifelse
+ } loop
+ counttomark dup 0 gt {dup 2 idiv 1 add -1 exch {-1 roll} for} {pop} ifelse
+ counttomark 2 idiv array astore /ais exch def
+ counttomark array astore [ exch { % Expand ordinals of the form ^NNN to ASCII
+ << /parse parse /parseonly true /parsefnc false >> //parseinput exec
+ } forall ] /vals exch def
+ pop
+
+ } { % Digital Link URI
+
+ % Validate and strip the scheme
+ (http://) anchorsearch not {
+ (https://) anchorsearch not {
+ pop /bwipp.GS1dlURIbadScheme (Scheme must be http:// or https://) //raiseerror exec
+ } if} if
+ pop
+
+ % Strip the domain
+ (/) search not {
+ pop /bwipp.GS1dlMissingDomainOrPathInfo (URI must contain a domain and path info) //raiseerror exec
+ } if
+ pop pop
+
+ % Fragment delimits end of data
+ (#) search {
+ exch pop exch pop
+ } if
+
+ % Query parameter marker splits path info and query parameters
+ (?) search not {
+ () exch null exch
+ } if
+ /pp exch def
+ pop
+ /qp exch def
+
+ % Find positions of character immediately following "/" in the path info
+ mark 0
+ 0 pp {
+ (/) search not {pop exit} if
+ length 1 add exch pop 2 index add exch
+ } loop
+ counttomark 1 sub array astore /pipos exch def pop pop
+ pipos length 1 le {
+ /bwipp.GS1dlNoAIinfo (The path was too short to contain AI info) //raiseerror exec
+ } if
+
+ % Walk backwards to find the right-most path element that is a valid dlpkey
+ false
+ pipos length 2 sub -2 0 {
+ dup
+ dup pipos exch get
+ exch pipos exch 1 add get 1 index sub 1 sub pp 3 1 roll getinterval
+ dup gs1syntax exch known {
+ gs1syntax exch get /dlpkey known {
+ exch pop true exit
+ } if
+ } {
+ pop
+ } ifelse
+ pop
+ } for
+ not {
+ /bwipp.GS1dlNoAIinfo (The path does not contain a valid primary key) //raiseerror exec
+ } if
+ pipos exch get dup pp length exch sub pp 3 1 roll getinterval /pp exch def
+
+ /uriunescape {
+ /in exch def
+ /out in length string def
+ 0 0 {
+ 1 index in length ge {exit} if
+ in 2 index get
+ dup 43 eq { % "+" -> " "
+ pop out 1 index 32 put
+ 1 add exch 1 add exch
+ } {
+ dup 37 eq 3 index in length 2 sub lt and { % "%nn" -> ord
+ pop
+ (< >) 4 string copy dup 1 in 5 index 1 add 2 getinterval putinterval cvx
+ stopped {
+ pop pop /bwipp.GS1dlBadHexCharacter (Invalid hex character) //raiseerror exec
+ } if
+ 0 get out exch 2 index exch put
+ 1 add exch 3 add exch
+ } {
+ out exch 2 index exch put
+ 1 add exch 1 add exch
+ } ifelse } ifelse
+ } loop
+ out exch 0 exch getinterval /out exch def
+ pop
+ out
+ } def
+
+ /ais 99 array def
+ /vals 99 array def
+ 0
+
+ % Extract AIs from the path components
+ pp {
+ (/) search {
+ ais exch 4 index exch put
+ pop
+ (/) search {exch pop} {() exch} ifelse
+ vals exch 3 index exch uriunescape put
+ } {
+ pop exit
+ } ifelse
+ exch 1 add exch
+ } loop
+
+ % Validate the key-qualifiers in the path info sequence
+ dup 1 gt {
+ false
+ gs1syntax ais 0 get get /dlpkey get {
+ /seq exch def
+ /i 1 def /j 0 def
+ {
+ i ais length ge {exit} if
+ j seq length ge {exit} if
+ ais i get seq j get eq {
+ /i i 1 add def
+ } if
+ /j j 1 add def
+ } loop
+ i 2 index eq {pop true exit} if
+ } forall
+ not {
+ pop /bwipp.GS1dlBadPathInfo (The AIs in the path are not a valid key-qualifier sequence for the key) //raiseerror exec
+ } if
+ } if
+
+ % Extract AIs from the query parameters
+ qp {
+ dup () eq {pop exit} if
+ (&) search {exch pop} {() exch} ifelse
+ (=) search {
+ true 1 index {dup 48 ge exch 57 le and and} forall {
+ ais exch 5 index exch put
+ pop
+ vals exch 3 index exch uriunescape put
+ exch 1 add exch
+ } { % Ignore non-numeric parameters
+ pop pop pop
+ } ifelse
+ } { % Ignore singletons and empty parameters
+ pop
+ } ifelse
+ } loop
+
+ /ais ais 0 3 index getinterval def
+ /vals vals 0 3 index getinterval def
+ pop
+
+ % Expand any extracted GTINs
+ 0 1 ais length 1 sub {
+ dup ais exch get (01) eq {
+ dup vals exch get
+ dup length dup 8 eq exch dup 12 eq exch 13 eq or or {
+ (00000000000000) 14 string copy dup 3 -1 roll dup length 14 exch sub exch putinterval
+ vals exch 2 index exch put
+ } {
+ pop
+ } ifelse
+ } if
+ pop
+ } for
+
+ } ifelse
+
+ % AIs not requiring FNC1 separation
+{
+ /aifixed << [
+ (00) (01) (02) (03) (04)
+ (11) (12) (13) (14) (15) (16) (17) (18) (19) (20)
+ % (23) % Reassigned to variable-length AI (235)!
+ (31) (32) (33) (34) (35) (36)
+ (41)
+ ] {dup} forall >> def
+} ctxdef
+
+ /fncs [
+ ais {
+ true exch
+ dup length 2 ge {
+ 0 2 getinterval aifixed exch known {pop false} if
+ } {
+ pop
+ } ifelse
+ } forall
+ ] def
+
+
+ % Linter routines for validating AI components
+
+ /lintnumeric {
+ true exch {
+ dup 48 lt exch 57 gt or { pop false exit } if
+ } forall
+ not { pop /bwipp.GS1notNumeric (Not numeric) false exit } if
+ } def
+
+ /lintcset82 {
+ true exch {
+ 1 string dup 0 4 -1 roll put
+ (!"%&'()*+,-./0123456789:;<=>?ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz)
+ exch search not { pop pop false exit } if
+ pop pop pop
+ } forall
+ not { pop /bwipp.GS1badCSET82character (Invalid CSET 82 character) false exit } if
+ } def
+
+ /lintcset39 {
+ true exch {
+ 1 string dup 0 4 -1 roll put
+ (#-/0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ)
+ exch search not { pop pop false exit } if
+ pop pop pop
+ } forall
+ not { pop /bwipp.GS1badCSET39character (Invalid CSET 39 character) false exit } if
+ } def
+
+ /lintkey {
+ dup length 2 lt { pop pop /bwipp.GS1keyTooShort (Key is too short) false exit } if
+ dup 0 get dup 48 lt exch 57 gt or exch
+ 1 get dup 48 lt exch 57 gt or or {
+ pop /bwipp.GS1badGCP (Non-numeric company prefix) false exit
+ } if
+ } def
+
+ /lintimporteridx {
+ (-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz)
+ exch search not {pop pop /bwipp.GS1badImporterIndex (Invalid importer index) false exit} if
+ pop pop pop
+ } def
+
+ /lintcsum {
+ mark exch
+ dup length 2 mod 0 eq {3} {1} ifelse
+ exch { 48 sub 1 index mul exch 4 exch sub } forall pop
+ 0 counttomark 1 sub {add} repeat exch pop
+ 10 mod 0 ne { pop /bwipp.GS1badChecksum (Bad checksum) false exit } if
+ } def
+
+{
+ /cset82 <<
+ 0 (!"%&'\(\)*+,-./0123456789:;<=>?ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz)
+ { exch dup 1 add } forall pop
+ >> def
+
+ /cset32 <<
+ 0 (23456789ABCDEFGHJKLMNPQRSTUVWXYZ)
+ { exch dup 1 add } forall pop
+ >> def
+} ctxdef
+
+ /lintcsumalpha {
+ dup length 2 lt { pop pop /bwipp.GS1alphaTooShort (Alphanumeric string is too short to check) false exit} if
+ dup length 2 sub
+ 2 copy
+ 0 exch getinterval mark exch {
+ dup cset82 exch known { cset82 exch get } { -1 exit } ifelse
+ } forall
+ dup -1 eq { cleartomark pop pop pop /bwipp.GS1UnknownCSET82Character (Unknown CSET 82 character) false exit} if
+ counttomark array astore exch pop
+ 3 1 roll
+ 2 getinterval mark exch {
+ dup cset32 exch known { cset32 exch get } { -1 exit } ifelse
+ } forall
+ dup -1 eq { cleartomark pop pop /bwipp.GS1UnknownCSET32Character (Unknown CSET 32 character) false exit} if
+ counttomark array astore exch pop
+ dup 0 get 5 bitshift exch 1 get add exch
+ [ 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 ]
+ 1 index length
+ dup 2 index length gt { pop pop pop pop pop /bwipp.GS1alphaTooLong (Alphanumeric string is too long to check) false exit} if
+ 0 exch getinterval {exch} forall
+ 0 exch { 3 -1 roll exch mul add } forall 1021 mod
+ ne { pop /bwipp.GS1badAlphaCheckCharacters (Bad alphanumeric check characters) false exit} if
+ } def
+
+{
+ /iso3166 << [
+ /004 /008 /010 /012 /016 /020 /024 /028 /031 /032 /036 /040 /044 /048
+ /050 /051 /052 /056 /060 /064 /068 /070 /072 /074 /076 /084 /086 /090 /092 /096
+ /100 /104 /108 /112 /116 /120 /124 /132 /136 /140 /144 /148
+ /152 /156 /158 /162 /166 /170 /174 /175 /178 /180 /184 /188 /191 /192 /196
+ /203 /204 /208 /212 /214 /218 /222 /226 /231 /232 /233 /234 /238 /239 /242 /246 /248
+ /250 /254 /258 /260 /262 /266 /268 /270 /275 /276 /288 /292 /296
+ /300 /304 /308 /312 /316 /320 /324 /328 /332 /334 /336 /340 /344 /348
+ /352 /356 /360 /364 /368 /372 /376 /380 /384 /388 /392 /398
+ /400 /404 /408 /410 /414 /417 /418 /422 /426 /428 /430 /434 /438 /440 /442 /446
+ /450 /454 /458 /462 /466 /470 /474 /478 /480 /484 /492 /496 /498 /499
+ /500 /504 /508 /512 /516 /520 /524 /528 /531 /533 /534 /535 /540 /548
+ /554 /558 /562 /566 /570 /574 /578 /580 /581 /583 /584 /585 /586 /591 /598
+ /600 /604 /608 /612 /616 /620 /624 /626 /630 /634 /638 /642 /643 /646
+ /652 /654 /659 /660 /662 /663 /666 /670 /674 /678 /682 /686 /688 /690 /694
+ /702 /703 /704 /705 /706 /710 /716 /724 /728 /729 /732 /740 /744 /748
+ /752 /756 /760 /762 /764 /768 /772 /776 /780 /784 /788 /792 /795 /796 /798
+ /800 /804 /807 /818 /826 /831 /832 /833 /834 /840
+ /850 /854 /858 /860 /862 /876 /882 /887 /894
+ ] {dup} forall >> def
+} ctxdef
+
+ /lintiso3166 {
+ iso3166 exch known not { pop /bwipp.GS1UnknownCountry (Unknown country code) false exit } if
+ } def
+
+ /lintiso3166999 {
+ dup /999 ne {
+ iso3166 exch known not { pop /bwipp.GS1UnknownCountryOr999 (Unknown country code or not 999) false exit } if
+ } {
+ pop
+ } ifelse
+ } def
+
+ /lintiso3166list {
+ dup length 3 mod 0 ne {
+ pop pop /bwipp.GS1BadCountryListLength (Not a group of three-digit country codes) false exit
+ } if
+ true
+ 0 3 3 index length 1 sub {
+ 2 index exch 3 getinterval
+ iso3166 exch known not { pop pop false exit } if
+ } for
+ not { pop /bwipp.GS1UnknownCountry (Unknown country code) false exit } if
+ pop
+ } def
+
+{
+ /iso3166alpha2 << [
+ /AD /AE /AF /AG /AI /AL /AM /AO /AQ /AR /AS /AT /AU /AW /AX /AZ
+ /BA /BB /BD /BE /BF /BG /BH /BI /BJ /BL /BM /BN /BO /BQ /BR /BS /BT /BV /BW /BY /BZ
+ /CA /CC /CD /CF /CG /CH /CI /CK /CL /CM /CN /CO /CR /CU /CV /CW /CX /CY /CZ
+ /DE /DJ /DK /DM /DO /DZ
+ /EC /EE /EG /EH /ER /ES /ET
+ /FI /FJ /FK /FM /FO /FR
+ /GA /GB /GD /GE /GF /GG /GH /GI /GL /GM /GN /GP /GQ /GR /GS /GT /GU /GW /GY
+ /HK /HM /HN /HR /HT /HU
+ /ID /IE /IL /IM /IN /IO /IQ /IR /IS /IT /JE /JM /JO /JP
+ /KE /KG /KH /KI /KM /KN /KP /KR /KW /KY /KZ
+ /LA /LB /LC /LI /LK /LR /LS /LT /LU /LV /LY
+ /MA /MC /MD /ME /MF /MG /MH /MK /ML /MM /MN /MO /MP /MQ /MR /MS /MT /MU /MV /MW /MX /MY /MZ
+ /NA /NC /NE /NF /NG /NI /NL /NO /NP /NR /NU /NZ
+ /OM
+ /PA /PE /PF /PG /PH /PK /PL /PM /PN /PR /PS /PT /PW /PY
+ /QA
+ /RE /RO /RS /RU /RW
+ /SA /SB /SC /SD /SE /SG /SH /SI /SJ /SK /SL /SM /SN /SO /SR /SS /ST /SV /SX /SY /SZ
+ /TC /TD /TF /TG /TH /TJ /TK /TL /TM /TN /TO /TR /TT /TV /TW /TZ
+ /UA /UG /UM /US /UY /UZ
+ /VA /VC /VE /VG /VI /VN /VU
+ /WF /WS
+ /YE /YT
+ /ZA /ZM /ZW
+ ] {dup} forall >> def
+} ctxdef
+
+ /lintiso3166alpha2 {
+ iso3166alpha2 exch known not { pop /bwipp.GS1UnknownCountryAlpha (Unknown country alpha code) false exit } if
+ } def
+
+{
+ /iso4217 << [
+ /008 /012 /032 /036 /044 /048
+ /050 /051 /052 /060 /064 /068 /072 /084 /090 /096
+ /104 /108 /116 /124 /132 /136 /144
+ /152 /156 /170 /174 /188 /191 /192
+ /203 /208 /214 /222 /230 /232 /238 /242 /262 /270 /292
+ /320 /324 /328 /332 /340 /344 /348
+ /352 /356 /360 /364 /368 /376 /388 /392 /398
+ /400 /404 /408 /410 /414 /417 /418
+ /422 /426 /430 /434 /446
+ /454 /458 /462 /480 /484 /496 /498
+ /504 /512 /516 /524 /532 /533 /548
+ /554 /558 /566 /578 /586 /590 /598
+ /600 /604 /608 /634 /643 /646 /654 /682 /690 /694
+ /702 /704 /706 /710 /728 /748
+ /752 /756 /760 /764 /776 /780 /784 /788
+ /800 /807 /818 /826 /834 /840 /858 /860 /882 /886
+ /901 /925 /927 /928 /929 /930 /931 /932 /933 /934 /936 /938
+ /940 /941 /943 /944 /946 /947 /948 /949
+ /950 /951 /952 /953 /955 /956 /957 /958 /959
+ /960 /961 /962 /963 /964 /965 /967 /968 /969
+ /970 /971 /972 /973 /975 /976 /977 /978 /979
+ /980 /981 /984 /985 /986 /990 /994 /997 /999
+ ] {dup} forall >> def
+} ctxdef
+
+ /lintiso4217 {
+ iso4217 exch known not { pop /bwipp.GS1UnknownCurrency (Unknown currency code) false exit } if
+ } def
+
+ /lintiban {
+ dup length 4 le { pop pop /bwipp.GS1tooShort (IBAN too short) false exit } if
+ dup true exch {
+ 1 string dup 0 4 -1 roll put
+ (0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ)
+ exch search not { pop pop false exit } if
+ pop pop pop
+ } forall
+ not { pop /bwipp.GS1badIBANcharacter (Invalid IBAN character) false exit } if
+ dup mark exch mark exch {} forall counttomark -4 roll counttomark array astore exch pop {
+ 48 sub dup 9 gt {7 sub dup 10 idiv exch 10 mod} if
+ } forall counttomark array astore exch pop
+ 0 exch {exch 10 mul add 97 mod} forall
+ 1 ne { pop pop /bwipp.GS1badIBANchecksum (IBAN checksum incorrect) false exit } if
+ 0 2 getinterval lintiso3166alpha2
+ } def
+
+ /lintzero {
+ (0) ne { pop /bwipp.GS1zeroRequired (Zero is required) false exit } if
+ } def
+
+ /lintnonzero {
+ false exch { 48 ne {pop true} if } forall
+ not { pop /bwipp.GS1zeroNotPermitted (Zero not permitted) false exit } if
+ } def
+
+ /lintnozeroprefix {
+ dup length 1 gt exch 0 get 48 eq and {
+ pop /bwipp.GS1badZeroPrefix (Zero prefix is not permitted) false exit
+ } if
+ } def
+
+ /lintyymmd0 {
+ dup 2 2 getinterval cvi dup 1 lt exch 12 gt or { pop /bwipp.GS1badMonth (Invalid month) false exit } if
+ dup 0 2 getinterval cvi dup 21 sub % Update 20YY periodically for century calculation
+ dup 51 ge {pop 1900 add} { -50 le {2100 add} {2000 add} ifelse} ifelse % YYYY
+ dup 400 mod 0 eq exch dup 4 mod 0 eq exch 100 mod 0 ne and or % Leap year?
+ [ 31 3 -1 roll {29} {28} ifelse 31 30 31 30 31 31 30 31 30 31 ]
+ 1 index 2 2 getinterval cvi 1 sub get
+ exch 4 2 getinterval cvi lt { pop /bwipp.GS1badDay (Invalid day of month) false exit } if
+ } def
+
+ /lintyymmdd {
+ dup length 6 ne { pop /bwipp.GS1badDateLength (Invalid length for date) false exit } if
+ dup 4 2 getinterval cvi 1 lt { pop /bwipp.GS1badDay (Invalid day of month) false exit } if
+ lintyymmd0
+ } def
+
+ /lintyymmddhh {
+ dup length 8 ne { pop /bwipp.GS1badYYMMDDHHLength (Invalid length for date with hour) false exit } if
+ dup 6 2 getinterval cvi 23 gt { pop pop /bwipp.GS1badHour (Invalid hour of day) false exit } if
+ 0 6 getinterval lintyymmdd
+ } def
+
+ /linthhmm {
+ dup 0 2 getinterval cvi 23 gt { pop pop /bwipp.GS1badHour (Invalid hour of day) false exit } if
+ 2 2 getinterval cvi 59 gt { pop /bwipp.GS1badMinute (Invalid minute in the hour) false exit } if
+ } def
+
+ /lintmmoptss {
+ dup length dup 2 ne exch 4 ne and {
+ pop /bwipp.GS1badTimeLength (Invalid length for optional minutes and seconds) false exit
+ } if
+ dup 0 2 getinterval cvi 59 gt { pop pop /bwipp.GS1badMinute (Invalid minute in the hour) false exit } if
+ dup length 4 ge {
+ dup 2 2 getinterval cvi 59 gt { pop pop /bwipp.GS1badSecond (Invalid second in the minute) false exit } if
+ } if
+ pop
+ } def
+
+ /lintyesno {
+ dup (0) ne exch (1) ne and {
+ pop /bwipp.GS1badBoolean (Neither 0 nor 1 for yes or no) false exit
+ } if
+ } def
+
+ /lintwinding {
+ dup (0) ne exch dup (1) ne exch (9) ne and and {
+ pop /bwipp.GS1badWinding (Invalid winding direction) false exit
+ } if
+ } def
+
+ /lintpieceoftotal {
+ dup length 2 mod 0 ne { pop pop /bwipp.GS1badPieceTotalLength (Invalid piece/total length) false exit } if
+ dup dup length 2 idiv 0 exch getinterval cvi
+ dup 0 eq { pop pop pop /bwipp.GS1badPieceNumber (Invalid piece number) false exit } if
+ exch dup length 2 idiv dup getinterval cvi
+ dup 0 eq { pop pop pop /bwipp.GS1badPieceTotal (Invalid total number) false exit } if
+ gt { pop /bwipp.GS1pieceExceedsTotal (Piece number exceeds total) false exit } if
+ } def
+
+ /lintpcenc {
+ {
+ (%) search not {pop exit} if
+ pop pop dup length 2 lt { pop pop /bwipp.GS1badPercentEscape (Invalid % escape) false exit } if
+ dup 0 2 getinterval true exch {
+ 1 string dup 0 4 -1 roll put
+ (0123456789ABCDEFabcdef)
+ exch search not { pop pop false exit } if
+ pop pop pop
+ } forall
+ not { pop pop /bwipp.GS1badPercentChars (Invalid characters for percent encoding) false exit } if
+ } loop
+ } def
+
+ /lintcouponcode {
+ dup true exch {
+ dup 48 lt exch 57 gt or { pop false exit } if
+ } forall
+ not { pop pop /bwipp.GS1couponNotNumeric (Coupon not numeric) false exit } if
+
+ % GCP VLI and value
+ dup length 1 lt {
+ pop pop /bwipp.GS1couponTooShortGCPVLI (Coupon too short: Missing GCP VLI) false exit
+ } if
+ dup 0 1 getinterval cvi dup 6 gt {
+ pop pop /bwipp.GS1couponBadGCPVLI (Coupon GCP length indicator must be 0-6) false exit
+ } if
+ 6 add 1 add
+ 2 copy exch length gt {
+ pop pop pop /bwipp.GS1couponTooShortGCP (Coupon too short: GCP truncated) false exit
+ } if
+ dup 2 index length exch sub getinterval
+
+ % Offer Code
+ dup length 6 lt {
+ pop pop /bwipp.GS1couponTooShortOfferCode (Coupon too short: Offer Code truncated) false exit
+ } if
+ dup length 6 sub 6 exch getinterval
+
+ % Save Value VLI and value
+ dup length 1 lt {
+ pop pop /bwipp.GS1couponTooShortSaveValueVLI (Coupon too short: Missing Save Value VLI) false exit
+ } if
+ dup 0 1 getinterval cvi dup dup 1 lt exch 5 gt or {
+ pop pop /bwipp.GS1couponBadSaveValueVLI (Coupon Save Value length indicator must be 1-5) false exit
+ } if
+ 1 add
+ 2 copy exch length gt {
+ pop pop pop /bwipp.GS1couponTooShortSaveValue (Coupon too short: Save Value truncated) false exit
+ } if
+ dup 2 index length exch sub getinterval
+
+ % 1st Purchase Requirement VLI and value
+ dup length 1 lt {
+ pop pop /bwipp.GS1couponTooShort1stPurchaseRequirementVLI (Coupon too short: Missing 1st Purchase Requirement VLI) false exit
+ } if
+ dup 0 1 getinterval cvi dup dup 1 lt exch 5 gt or {
+ pop pop /bwipp.GS1couponBad1stPurchaseRequirementVLI (Coupon 1st Purchase Requirement length indicator must be 1-5) false exit
+ } if
+ 1 add
+ 2 copy exch length gt {
+ pop pop pop /bwipp.GS1couponTooShort1stPurchaseRequirement (Coupon too short: 1st Purchase Requirement truncated) false exit
+ } if
+ dup 2 index length exch sub getinterval
+
+ % 1st Purchase Requirement Code
+ dup length 1 lt {
+ pop pop /bwipp.GS1couponTooShort1stPurchaseRequirementCode (Coupon too short: Missing 1st Purchase Requirement Code) false exit
+ } if
+ dup 0 1 getinterval cvi dup 4 gt exch 9 ne and {
+ pop pop /bwipp.GS1couponBad1stPurchaseRequirementCode (Coupon 1st Purchase Requirement Code must be 0-4 or 9) false exit
+ } if
+ dup length 1 sub 1 exch getinterval
+
+ % 1st Purchase Family Code
+ dup length 3 lt {
+ pop pop /bwipp.GS1couponTooShort1stPurchaseFamilyCode (Coupon too short: 1st Purchase Family Code truncated) false exit
+ } if
+ dup length 3 sub 3 exch getinterval
+
+ % Optional field 1
+ dup length 1 ge { dup 0 1 getinterval cvi 1 eq {
+ 1 dup 2 index length exch sub getinterval
+
+ % Additional Purchase Rules Code
+ dup length 1 lt {
+ pop pop /bwipp.GS1couponTooShortAdditionalPurchaseRulesCode (Coupon too short: Missing Additional Purchase Rules Code) false exit
+ } if
+ dup 0 1 getinterval cvi 3 gt {
+ pop pop /bwipp.GS1couponBadAdditionalPurchaseRulesCode (Coupon Additional Purchase Rules Code must be 0-3) false exit
+ } if
+ dup length 1 sub 1 exch getinterval
+
+ % 2nd Purchase RequirementVLI and value
+ dup length 1 lt {
+ pop pop /bwipp.GS1couponTooShort2ndPurchaseRequirementVLI (Coupon too short: Missing 2nd Purchase Requirement VLI) false exit
+ } if
+ dup 0 1 getinterval cvi dup dup 1 lt exch 5 gt or {
+ pop pop /bwipp.GS1couponBad2ndPurchaseRequirementVLI (Coupon 2nd Purchase Requirement length indicator must be 1-5) false exit
+ } if
+ 1 add
+ 2 copy exch length gt {
+ pop pop pop /bwipp.GS1couponTooShort2ndPurchaseRequirement (Coupon too short: 2nd Purchase Requirement truncated) false exit
+ } if
+ dup 2 index length exch sub getinterval
+
+ % 2nd Purchase Requirement Code
+ dup length 1 lt {
+ pop pop /bwipp.GS1couponTooShort2ndPurchaseRequirementCode (Coupon too short: Missing 2nd Purchase Requirement Code) false exit
+ } if
+ dup 0 1 getinterval cvi dup 4 gt exch 9 ne and {
+ pop pop /bwipp.GS1couponBad2ndPurchaseRequirementCode (Coupon 2nd Purchase Requirement Code must be 0-4 or 9) false exit
+ } if
+ dup length 1 sub 1 exch getinterval
+
+ % 2nd Purchase Family Code
+ dup length 3 lt {
+ pop pop /bwipp.GS1couponTooShort2ndPurchaseFamilyCode (Coupon too short: 2nd Purchase Family Code truncated) false exit
+ } if
+ dup length 3 sub 3 exch getinterval
+
+ % 2nd Purchase GCP VLI and value
+ dup length 1 lt {
+ pop pop /bwipp.GS1couponTooShort2ndPurchaseGCPVLI (Coupon too short: Missing 2nd Purchase GCP VLI) false exit
+ } if
+ dup 0 1 getinterval cvi dup dup 6 gt exch 9 ne and {
+ pop pop /bwipp.GS1couponBad2ndPurchaseGCPVLI (Coupon 2nd Purchase GCP length indicator must be 0-6 or 9) false exit
+ } if
+ dup 9 ne {6 add} {pop 0} ifelse 1 add
+ 2 copy exch length gt {
+ pop pop pop /bwipp.GS1couponTooShort2ndPurchaseGCP (Coupon too short: 2nd Purchase GCP truncated) false exit
+ } if
+ dup 2 index length exch sub getinterval
+
+ } if } if
+
+ % Optional field 2
+ dup length 1 ge { dup 0 1 getinterval cvi 2 eq {
+ 1 dup 2 index length exch sub getinterval
+
+ % 3rd Purchase RequirementVLI and value
+ dup length 1 lt {
+ pop pop /bwipp.GS1couponTooShort3rdPurchaseRequirementVLI (Coupon too short: Missing 3rd Purchase Requirement VLI) false exit
+ } if
+ dup 0 1 getinterval cvi dup dup 1 lt exch 5 gt or {
+ pop pop /bwipp.GS1couponBad3rdPurchaseRequirementVLI (Coupon 3rd Purchase Requirement length indicator must be 1-5) false exit
+ } if
+ 1 add
+ 2 copy exch length gt {
+ pop pop pop /bwipp.GS1couponTooShort3rdPurchaseRequirement (Coupon too short: 3rd Purchase Requirement truncated) false exit
+ } if
+ dup 2 index length exch sub getinterval
+
+ % 3rd Purchase Requirement Code
+ dup length 1 lt {
+ pop pop /bwipp.GS1couponTooShort3rdPurchaseRequirementCode (Coupon too short: Missing 3rd Purchase Requirement Code) false exit
+ } if
+ dup 0 1 getinterval cvi dup 4 gt exch 9 ne and {
+ pop pop /bwipp.GS1couponBad3rdPurchaseRequirementCode (Coupon 3rd Purchase Requirement Code must be 0-4 or 9) false exit
+ } if
+ dup length 1 sub 1 exch getinterval
+
+ % 3rd Purchase Family Code
+ dup length 3 lt {
+ pop pop /bwipp.GS1couponTooShort3rdPurchaseFamilyCode (Coupon too short: 3rd Purchase Family Code truncated) false exit
+ } if
+ dup length 3 sub 3 exch getinterval
+
+ % 3rd Purchase GCP VLI and value
+ dup length 1 lt {
+ pop pop /bwipp.GS1couponTooShort3rdPurchaseGCPVLI (Coupon too short: Missing 3rd Purchase GCP VLI) false exit
+ } if
+ dup 0 1 getinterval cvi dup dup 6 gt exch 9 ne and {
+ pop pop /bwipp.GS1couponBad3rdPurchaseGCPVLI (Coupon 3rd Purchase GCP length indicator must be 0-6 or 9) false exit
+ } if
+ dup 9 ne {6 add} {pop 0} ifelse 1 add
+ 2 copy exch length gt {
+ pop pop pop /bwipp.GS1couponTooShort3rdPurchaseGCP (Coupon too short: 3rd Purchase GCP truncated) false exit
+ } if
+ dup 2 index length exch sub getinterval
+
+ } if } if
+
+ % Optional field 3
+ /couponexpire -1 def
+ dup length 1 ge { dup 0 1 getinterval cvi 3 eq {
+ 1 dup 2 index length exch sub getinterval
+
+ % Expiration date
+ dup length 6 lt {
+ pop pop /bwipp.GS1couponTooShortExpirationDate (Coupon too short: Expiration date) false exit
+ } if
+ dup 2 2 getinterval cvi dup 1 lt exch 12 gt or { pop pop /bwipp.GS1couponExpirationDateBadMonth (Invalid month in expiration date) false exit } if
+ dup 0 2 getinterval cvi dup 21 sub % Update 20YY periodically for century calculation
+ dup 51 ge {pop 1900 add} { -50 le {2100 add} {2000 add} ifelse} ifelse % YYYY
+ dup 400 mod 0 eq exch dup 4 mod 0 eq exch 100 mod 0 ne and or % Leap year?
+ [ 31 3 -1 roll {29} {28} ifelse 31 30 31 30 31 31 30 31 30 31 ]
+ 1 index 2 2 getinterval cvi 1 sub get
+ 1 index 4 2 getinterval cvi dup 3 1 roll lt
+ exch 1 lt or { pop pop /bwipp.GS1couponExpirationDateBadDay (Invalid day of month in expiration date) false exit } if
+ dup 0 6 getinterval cvi /couponexpire exch def
+ dup length 6 sub 6 exch getinterval
+
+ } if } if
+
+ % Optional field 4
+ dup length 1 ge { dup 0 1 getinterval cvi 4 eq {
+ 1 dup 2 index length exch sub getinterval
+
+ % Start date
+ dup length 6 lt {
+ pop pop /bwipp.GS1couponTooShortStartDate (Coupon too short: Start date) false exit
+ } if
+ dup 2 2 getinterval cvi dup 1 lt exch 12 gt or { pop pop /bwipp.GS1couponStartDateBadMonth (Invalid month in start date) false exit } if
+ dup 0 2 getinterval cvi dup 21 sub % Update 20YY periodically for century calculation
+ dup 51 ge {pop 1900 add} { -50 le {2100 add} {2000 add} ifelse} ifelse % YYYY
+ dup 400 mod 0 eq exch dup 4 mod 0 eq exch 100 mod 0 ne and or % Leap year?
+ [ 31 3 -1 roll {29} {28} ifelse 31 30 31 30 31 31 30 31 30 31 ]
+ 1 index 2 2 getinterval cvi 1 sub get
+ 1 index 4 2 getinterval cvi dup 3 1 roll lt
+ exch 1 lt or { pop pop /bwipp.GS1couponStartDateBadDay (Invalid day of month in start date) false exit } if
+ dup 0 6 getinterval cvi /couponstart exch def
+ couponexpire -1 ne couponexpire couponstart lt and {
+ pop pop /bwipp.GS1couponExpireDateBeforeStartDate (Coupon expires before it starts) false exit
+ } if
+ dup length 6 sub 6 exch getinterval
+
+ } if } if
+
+ % Optional field 5
+ dup length 1 ge { dup 0 1 getinterval cvi 5 eq {
+ 1 dup 2 index length exch sub getinterval
+
+ % Serial Number VLI and value
+ dup length 1 lt {
+ pop pop /bwipp.GS1couponTooShortSerialNumberVLI (Coupon too short: Missing Serial Number VLI) false exit
+ } if
+ dup 0 1 getinterval cvi 6 add 1 add
+ 2 copy exch length gt {
+ pop pop pop /bwipp.GS1couponTooShortSerialNumber (Coupon too short: Serial Number truncated) false exit
+ } if
+ dup 2 index length exch sub getinterval
+
+ } if } if
+
+ % Optional field 6
+ dup length 1 ge { dup 0 1 getinterval cvi 6 eq {
+ 1 dup 2 index length exch sub getinterval
+
+ % Retailer GCP/GLN VLI and value
+ dup length 1 lt {
+ pop pop /bwipp.GS1couponTooShortRetailerGCPGLNVLI (Coupon too short: Missing Retailer GCP/GLN VLI) false exit
+ } if
+ dup 0 1 getinterval cvi dup dup 1 lt exch 7 gt or {
+ pop pop /bwipp.GS1couponBadRetailerGCPGLNVLI (Coupon Retailer GCP/GLN length indicator must be 1-7) false exit
+ } if
+ 6 add 1 add
+ 2 copy exch length gt {
+ pop pop pop /bwipp.GS1couponTooShortRetailerGCPGLN (Coupon too short: Retailer GCP/GLN truncated) false exit
+ } if
+ dup 2 index length exch sub getinterval
+
+ } if } if
+
+ % Optional field 9
+ dup length 1 ge { dup 0 1 getinterval cvi 9 eq {
+ 1 dup 2 index length exch sub getinterval
+
+ % Save Value Code
+ dup length 1 lt {
+ pop pop /bwipp.GS1couponTooShortSaveValueCode (Coupon too short: Missing Save Value Code) false exit
+ } if
+ dup 0 1 getinterval cvi dup 6 gt exch dup 3 eq exch 4 eq or or {
+ pop pop /bwipp.GS1couponBadSaveValueCode (Coupon Save Value Code must be 0,1,2,5 or 6) false exit
+ } if
+ dup length 1 sub 1 exch getinterval
+
+ % Save Value Applies to Item
+ dup length 1 lt {
+ pop pop /bwipp.GS1couponTooShortSaveValueAppliesToItem (Coupon too short: Missing Save Value Applies to Item) false exit
+ } if
+ dup 0 1 getinterval cvi 2 gt {
+ pop pop /bwipp.GS1couponBadSaveValueAppliesToItem (Coupon Save Value Applies to Item must be 0-2) false exit
+ } if
+ dup length 1 sub 1 exch getinterval
+
+ % Store Coupon Flag
+ dup length 1 lt {
+ pop pop /bwipp.GS1couponTooShortStoreCouponFlag (Coupon too short: Missing Store Coupon Flag) false exit
+ } if
+ dup length 1 sub 1 exch getinterval
+
+ % Don't Multiply Flag
+ dup length 1 lt {
+ pop pop /bwipp.GS1couponTooShortDontMultiplyFlag (Coupon too short: Missing Don't Multiply Flag) false exit
+ } if
+ dup 0 1 getinterval cvi 1 gt {
+ pop pop /bwipp.GS1couponBadDontMultiplyFlag (Don't Multiply Flag must be 0 or 1) false exit
+ } if
+ dup length 1 sub 1 exch getinterval
+
+ } if } if
+
+ dup length 0 ne {
+ pop pop /bwipp.GS1couponUnrecognisedOptionalField (Coupon fields must be 1,2,3,4,5,6 or 9, increasing order) false exit
+ } if
+ pop
+ } def
+
+ /lintcouponposoffer {
+ dup true exch {
+ dup 48 lt exch 57 gt or { pop false exit } if
+ } forall
+ not { pop pop /bwipp.GS1couponNotNumeric (Coupon not numeric) false exit } if
+ % Format Code
+ dup length 1 lt {
+ pop pop /bwipp.GS1couponTooShortFormatCode (Coupon too short: Missing Format Code) false exit
+ } if
+ dup 0 1 getinterval dup (0) ne exch (1) ne and {
+ pop pop /bwipp.GS1couponBadFormatCode (Coupon format must be 0 or 1) false exit
+ } if
+ dup length 1 sub 1 exch getinterval
+ % Funder ID VLI and Funder ID
+ dup length 1 lt {
+ pop pop /bwipp.GS1couponTooShortFunderVLI (Coupon too short: Missing Funder VLI) false exit
+ } if
+ dup 0 1 getinterval cvi dup 6 gt {
+ pop pop pop /bwipp.GS1couponBadFunderVLI (Coupon Funder length indicator must be 0-6) false exit
+ } if
+ 6 add 1 add
+ 2 copy exch length gt {
+ pop pop pop /bwipp.GS1couponTooShortFunder (Coupon too short: Truncated Funder ID) false exit
+ } if
+ dup 2 index length exch sub getinterval
+ % Offer Code
+ dup length 6 lt {
+ pop pop /bwipp.GS1couponTooShortOfferCode (Coupon too short: Truncated Offer Code) false exit
+ } if
+ dup length 6 sub 6 exch getinterval
+ % Serial Number VLI and Serial Number
+ dup length 1 lt {
+ pop pop /bwipp.GS1couponTooShortSnVLI (Coupon too short: Missing SN VLI) false exit
+ } if
+ dup 0 1 getinterval cvi
+ 6 add 1 add
+ 2 copy exch length gt {
+ pop pop pop /bwipp.GS1couponTooShortSn (Coupon too short: Truncated SN) false exit
+ } if
+ dup 2 index length exch sub getinterval
+ dup length 0 ne {
+ pop pop /bwipp.GS1couponTooLong (Coupon too long) false exit
+ } if
+ pop
+ } def
+
+ /lintlatlong {
+ dup length 20 ne {
+ pop /bwipp.GS1badGeoLength (Invalid length for a geo-location) false exit
+ } if
+ dup 0 10 getinterval cvi 1800000000 gt { pop /bwipp.GS1badLatitude (Invalid value for latitude) false exit } if
+ dup 10 10 getinterval cvi 3600000000 gt { pop /bwipp.GS1badLongitude (Invalid value for longitude) false exit } if
+ pop
+ } def
+
+ dontlint not {
+
+ % Validate AI contents
+ true
+ 0 1 vals length 1 sub {
+ dup ais exch get /ai exch def
+ vals exch get /val exch def
+ gs1syntax ai known {
+ gs1syntax ai get /parts get
+ % Overall length checks, e.g. to report "too long", not "checksum failure"
+ dup 0 exch {dup /opt get {pop 0} {/min get} ifelse add} forall val length gt {
+ pop /bwipp.GS1valueTooShort (Too short) false exit
+ } if
+ dup 0 exch {/max get add} forall val length lt {
+ pop /bwipp.GS1valueTooLong (Too long) false exit
+ } if
+ { % Checks for each component of the AI
+ /props exch def
+ props /max get val length 2 copy gt {exch} if pop
+ val exch 0 exch getinterval /eval exch def
+ /val val eval length dup val length exch sub getinterval def
+ eval length 0 eq {
+ props /opt get not {
+ pop /bwipp.GS1valueTooShort (Too short) false exit
+ } if
+ } {
+ eval length props /min get lt {
+ pop /bwipp.GS1valueTooShort (Too short) false exit
+ } if
+ << /N /lintnumeric /X /lintcset82 /Y /lintcset39 >> props /cset get get eval exch load exec
+ props /linters get { eval exch load exec } forall
+ } ifelse
+ } forall
+ dup not {exit} if
+ val length 0 ne { % Not all data consumed by components
+ pop /bwipp.GS1valueTooLong (Too long) false exit
+ } if
+ } {
+ pop /bwipp.GS1unknownAI (Unrecognised AI) false exit
+ } ifelse
+ } for
+ not {
+ dup length ai length add 5 add string
+ dup 0 (AI ) putinterval
+ dup 3 ai putinterval
+ dup 3 ai length add (: ) putinterval
+ dup 5 ai length add 4 -1 roll putinterval
+ //raiseerror exec
+ } if
+
+ % Search for "patt" matching an AIs, excluding "this" AI
+ /aiexists {
+ /this exch def
+ /patt exch def
+ 1 { % common exit
+ aivals patt known {true exit} if % Fast path
+ patt length 4 eq {
+ patt 3 1 getinterval (n) eq {
+ /pfxlen patt 2 1 getinterval (n) eq {2} {3} ifelse def
+ false
+ ais {
+ dup dup this ne exch length 4 eq and {
+ 0 pfxlen getinterval patt 0 pfxlen getinterval eq {
+ pop true
+ } if
+ } {
+ pop
+ } ifelse
+ } forall
+ exit
+ } if
+ false exit
+ } if
+ false exit
+ } repeat
+ } def
+
+ % Build AI dict and validate repeats
+ /aivals vals length dict def
+ 0 1 vals length 1 sub {
+ dup ais exch get /ai exch def
+ vals exch get /val exch def
+ aivals ai known {
+ aivals ai get val ne {
+ ai length 40 add string
+ dup 0 (Repeated AIs \() putinterval
+ dup 14 ai putinterval
+ dup 14 ai length add (\) must have the same value) putinterval
+ /bwipp.GS1repeatedDifferingAIs exch //raiseerror exec
+ } if
+ } {
+ aivals ai val put
+ } ifelse
+ } for
+
+ % Validate ex and req pairings
+ 0 1 vals length 1 sub {
+ ais exch get /ai exch def
+ gs1syntax ai get /ex 2 copy known {
+ get {
+ /patt exch def
+ patt ai aiexists {
+ ai length patt length add 36 add string
+ dup 0 (AIs \() putinterval
+ dup 5 ai putinterval
+ dup 5 ai length add (\) and \() putinterval
+ dup 12 ai length add patt putinterval
+ dup 12 ai length add patt length add (\) are mutually exclusive) putinterval
+ /bwipp.GS1exclusiveAIs exch //raiseerror exec
+ } if
+ } forall
+ } {
+ pop pop
+ } ifelse
+ lintreqs {
+ gs1syntax ai get /req 2 copy known {
+ get { % For each req attribute group
+ false exch { % Any req AI in the group is fine
+ ai aiexists {pop true} if
+ } forall
+ not {
+ ai length 47 add string
+ dup 0 (One of more requisite AIs for AI \() putinterval
+ dup 34 ai putinterval
+ dup 34 ai length add (\) are missing) putinterval
+ /bwipp.GS1missingAIs exch //raiseerror exec
+ } if
+ } forall
+ } {
+ pop pop
+ } ifelse
+ } if
+ } for
+
+ } if % dontlint
+
+ ais vals fncs
+
+ //unloadctx exec
+
+ end
+
+}
+[/barcode] {null def} forall
+bind def
+/gs1process dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
+%%EndData
+%%EndResource
+% --END RESOURCE gs1process--
+
% --BEGIN RENDERER renlinear--
% --REQUIRES preamble raiseerror--
-%%BeginResource: uk.co.terryburton.bwipp renlinear 0.0 2017040400 82223 84795
-%%BeginData: 237 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp renlinear 0.0 2022082100 75512 74718
+%%BeginData: 246 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
begin
/renlinear {
@@ -87,7 +3246,7 @@ begin
/textcolor (unset) def
/textxalign (unset) def
/textyalign (unset) def
- /textfont (NimbusMonL-Regu) def
+ /textfont (Courier) def
/textsize 10 def
/textxoffset 0 def
/textyoffset 0 def
@@ -112,10 +3271,10 @@ begin
/guardrightypos 0 def
/guardwidth 6 def
/guardheight 7 def
-
+
% Apply the renderer options and the user options
args {def} forall
- opt {def} forall
+ opt {def} forall
/barcolor barcolor cvlit def
/textcolor textcolor cvlit def
@@ -144,28 +3303,28 @@ begin
/guardrightypos guardrightypos cvr def
/guardwidth guardwidth cvr def
/guardheight guardheight cvr def
-
+
% Create bar elements and put them into the bars array
/bars sbs length 1 add 2 idiv array def
- /x 0.00 def /maxh 0 def
+ /pixx 0 def /pixy 0 def
0 1 sbs length 1 add 2 idiv 2 mul 2 sub {
/i exch def
i 2 mod 0 eq { % i is even
- /d sbs i get barratio mul barratio sub 1 add def % d=digit*r-r+1
+ /d sbs i get barratio mul barratio sub 1 add def % d = digit*r-r+1
sbs i get 0 ne {
/h bhs i 2 idiv get 72 mul def % Height from bhs
- /c d 2 div x add def % Centre of the bar = x + d/2
+ /c d 2 div pixx add def % Centre of the bar = pixx + d/2
/y bbs i 2 idiv get 72 mul def % Baseline from bbs
/w d inkspread sub def % bar width = digit - inkspread
bars i 2 idiv [h c y w] put % Add the bar entry
- h y add maxh gt {/maxh h y add def} if
+ h y add pixy gt {/pixy h y add def} if
} {
bars i 2 idiv -1 put % Dummy entry
} ifelse
} {
- /d sbs i get spaceratio mul spaceratio sub 1 add def % d=digit*r-r+1
+ /d sbs i get spaceratio mul spaceratio sub 1 add def % d = digit*r-r+1
} ifelse
- /x x d add def % x+=d
+ /pixx pixx d add def % pixx += d
} for
gsave
@@ -174,7 +3333,7 @@ begin
% Force symbol to given width
width 0 ne {
- width 72 mul x div 1 scale
+ width 72 mul pixx div 1 scale
} if
% Set RGB or CMYK color depending on length of given hex string
@@ -186,37 +3345,44 @@ begin
anycolor length 8 eq {
(< >) 10 string copy dup 1 anycolor putinterval cvx exec {255 div} forall setcmykcolor
} if
- } bind def
+ } def
% Display the border and background
newpath
borderleft neg borderbottom neg moveto
- x borderleft add borderright add 0 rlineto
- 0 maxh borderbottom add bordertop add rlineto
- x borderleft add borderright add neg 0 rlineto
- 0 maxh borderbottom add bordertop add neg rlineto
+ pixx borderleft add borderright add 0 rlineto
+ 0 pixy borderbottom add bordertop add rlineto
+ pixx borderleft add borderright add neg 0 rlineto
+ 0 pixy borderbottom add bordertop add neg rlineto
closepath
- backgroundcolor (unset) ne { gsave backgroundcolor setanycolor fill grestore } if
+ backgroundcolor (unset) ne { gsave backgroundcolor setanycolor fill grestore } if
showborder {
gsave
bordercolor (unset) ne { bordercolor setanycolor } if
borderwidth setlinewidth stroke
grestore
- } if
-
+ } if
+
% Display the bars for elements in the bars array
gsave
- 0 setlinecap
barcolor (unset) ne { barcolor setanycolor } if
+ newpath
bars {
dup -1 ne {
- aload pop newpath setlinewidth moveto 0 exch rlineto stroke
+ aload pop % h x y w
+ 2 index 1 index 2 div sub 2 index moveto
+ 0 4 index rlineto
+ dup 0 rlineto
+ 0 4 index neg rlineto
+ closepath
+ pop pop pop pop
} {
pop
} ifelse
} forall
+ fill
grestore
-
+
% Display the text for elements in the text array
textcolor (unset) ne { textcolor setanycolor } if
includetext {
@@ -261,21 +3427,21 @@ begin
/textascent exch def
/textwidth tstr stringwidth pop tstr length 1 sub textgaps mul add def
- /textxpos textxoffset x textwidth sub 2 div add def
+ /textxpos textxoffset pixx textwidth sub 2 div add def
textxalign (left) eq { /textxpos textxoffset def } if
- textxalign (right) eq { /textxpos x textxoffset sub textwidth sub def } if
+ textxalign (right) eq { /textxpos pixx textxoffset sub textwidth sub def } if
textxalign (offleft) eq { /textxpos textwidth textxoffset add neg def } if
- textxalign (offright) eq { /textxpos x textxoffset add def } if
- textxalign (justify) eq textwidth x lt and {
+ textxalign (offright) eq { /textxpos pixx textxoffset add def } if
+ textxalign (justify) eq textwidth pixx lt and {
/textxpos 0 def
- /textgaps x textwidth sub tstr length 1 sub div def
+ /textgaps pixx textwidth sub tstr length 1 sub div def
} if
/textypos textyoffset textascent add 1 add neg def
- textyalign (above) eq { /textypos textyoffset maxh add 1 add def } if
- textyalign (center) eq { /textypos textyoffset maxh textascent sub 2 div add def } if
+ textyalign (above) eq { /textypos textyoffset pixy add 1 add def } if
+ textyalign (center) eq { /textypos textyoffset pixy textascent sub 2 div add def } if
textxpos textypos moveto textgaps 0 tstr ashow
} ifelse
- } if
+ } if
% Display the guard elements
guardwhitespace {
@@ -285,22 +3451,24 @@ begin
guardleftpos neg guardwidth add guardleftypos guardwidth 2 div add moveto
guardwidth neg guardheight -2 div rlineto
guardwidth guardheight -2 div rlineto
- stroke
+ stroke
} if
guardrightpos 0 ne {
newpath
- guardrightpos x add guardwidth sub guardrightypos guardheight 2 div add moveto
+ guardrightpos pixx add guardwidth sub guardrightypos guardheight 2 div add moveto
guardwidth guardheight -2 div rlineto
guardwidth neg guardheight -2 div rlineto
- stroke
+ stroke
} if
} if
-
+
grestore
-
+
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/renlinear dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -310,10 +3478,10 @@ end
% --BEGIN RENDERER renmatrix--
% --REQUIRES preamble raiseerror--
-%%BeginResource: uk.co.terryburton.bwipp renmatrix 0.0 2017040400 102784 108937
-%%BeginData: 309 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp renmatrix 0.0 2022082100 89491 88705
+%%BeginData: 306 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
begin
/renmatrix {
@@ -327,6 +3495,8 @@ begin
/height 1 def
/barcolor (unset) def
/backgroundcolor (unset) def
+ /colormap (unset) def
+ /dotty false def
/inkspread 0 def
/inkspreadh 0 def
/inkspreadv 0 def
@@ -335,7 +3505,7 @@ begin
/textcolor (unset) def
/textxalign (unset) def
/textyalign (unset) def
- /textfont (NimbusMonL-Regu) def
+ /textfont (Courier) def
/textsize 10 def
/textxoffset 0 def
/textyoffset 0 def
@@ -366,192 +3536,185 @@ begin
inkspread 0 ne {/inkspreadh inkspread def} if
inkspread 0 ne {/inkspreadv inkspread def} if
- /xyget { pixx mul add pixs exch get } bind def
- /xyinvert { pixx mul add pixs exch 2 copy get 1 xor put } bind def
- /mxyget { pixx mul add m exch get 2#001 and } bind def
- /mxyset { pixx mul add m exch 3 -1 roll put } bind def
- /msetborder { pixx mul add m exch 2 copy get 2#010 or put } bind def
- /mborderoff { pixx mul add m exch 2 copy get 2#100 or put } bind def
- /misborder { pixx mul add m exch get 2#110 and 2#010 eq } bind def
- /mclear { pixx mul add m exch 2 copy get 2#001 and put } bind def
- /mclear4 {
- 2 copy mclear
- 2 copy 1 add mclear
- 2 copy exch 1 add exch mclear
- 2 copy exch 1 add exch mclear
- 1 add exch 1 add exch mclear
- } bind def
+ /xyget { pixx mul add pixs exch get} def
+ /cget { pixx mul add cache exch get and} def
+ /cput { % Optimise by only storing "stem" corners
+ dup 4 mod 0 eq { % dir is up or left
+ 3 1 roll pixx mul add cache exch 2 copy get 4 -1 roll or put
+ } {
+ pop pop pop
+ } ifelse
+ } def
+
+ /abcd {
+ 4 string 0 [
+ 5 -2 roll
+ pixx mul add dup
+ pixs exch 2 getinterval aload pop 3 -1 roll % A B
+ pixs exch pixx add 2 getinterval aload pop % C D
+ ] {3 copy 48 add put pop 1 add} forall pop
+ } def
+
+ /right {dir 1 ne {x y dir cput [x y]} if /x x 1 add def /dir 1 def} def
+ /down {dir 2 ne {x y dir cput [x y]} if /y y 1 add def /dir 2 def} def
+ /left {dir 4 ne {x y dir cput [x y]} if /x x 1 sub def /dir 4 def} def
+ /up {dir 8 ne {x y dir cput [x y]} if /y y 1 sub def /dir 8 def} def
/trace {
% Walk the outline of a region emitting edge coordinates of the path
/y exch def /x exch def
- % dir 0:right 1:down 2:left 3:up
- % hug 0:right 1:left
- /dir x 1 add y 1 add mxyget def /hug dir def
+ % dir 1:right 2:down 4:left 8:up
+ /dir x 1 add y 1 add xyget 1 eq {8} {4} ifelse def
/sx x def /sy y def /sdir dir def
- mark [x y] {
- x 1 add y
- x 1 add y 1 add
- x y 1 add
- x y
- 8 dir 2 mul neg roll
- /Dy exch def /Dx exch def /D Dx Dy xyget def
- /Cy exch def /Cx exch def /C Cx Cy xyget def
- /By exch def /Bx exch def /B Bx By xyget def
- /Ay exch def /Ax exch def /A Ax Ay xyget def
- A B eq {
- A C eq {/L} {/R} ifelse
- } {
- A C eq B D eq and {
- A 0 eq hug 0 eq xor {/R} {/F} ifelse
- } {
- /F
- } ifelse
- } ifelse
- dup /F eq {
- pop
- dir 0 eq {/x x 1 add def} if
- dir 1 eq {/y y 1 add def} if
- dir 2 eq {/x x 1 sub def} if
- dir 3 eq {/y y 1 sub def} if
- hug 0 eq {
- Ax Ay msetborder
- } {
- Bx By msetborder
- } ifelse
- } {
- /L eq {
- /dir dir 3 add 4 mod def
- hug 1 eq {
- Bx By msetborder
- Dx Dy mborderoff
- } if
- } { % R
- /dir dir 1 add 4 mod def
- hug 0 eq {
- Ax Ay msetborder
- Cx Cy mborderoff
- } if
+
+ % A B
+ % C D
+ mark {
+ x y abcd
+ 1 { % Common exit
+ dup dup (0001) eq exch dup (0011) eq exch (1011) eq or or {pop right exit} if
+ dup dup (0010) eq exch dup (1010) eq exch (1110) eq or or {pop down exit} if
+ dup dup (1000) eq exch dup (1100) eq exch (1101) eq or or {pop left exit} if
+ dup dup (0100) eq exch dup (0101) eq exch (0111) eq or or {pop up exit} if
+ dup (1001) eq {
+ dir 2 eq {pop left exit} {pop right exit} ifelse
+ } { % 0110
+ dir 1 eq {pop down exit} {pop up exit} ifelse
} ifelse
- [x y]
- } ifelse
+ } repeat
x sx eq y sy eq and dir sdir eq and {exit} if
} loop
counttomark array astore exch pop
- % Invert the interior of the path
- /x x 1 add def /y y 1 add def
- /t x y mxyget 1 xor def
- mark x y {
- counttomark 0 eq {exit} if
- /y exch def /x exch def
- x y mxyget t ne {
- 0 x 1 sub -1 0 {dup y misborder {exch pop exit} if pop} for
- pixx 1 sub x 1 add 1 pixx 1 sub {dup y misborder {exch pop exit} if pop} for
- 1 exch { % From left to right border
+ } def
+
+ % Set RGB or CMYK color depending on length of given hex string
+ /setanycolor {
+ /anycolor exch def
+ anycolor length 6 eq {
+ (< >) 8 string copy dup 1 anycolor putinterval cvx exec {255 div} forall setrgbcolor
+ } if
+ anycolor length 8 eq {
+ (< >) 10 string copy dup 1 anycolor putinterval cvx exec {255 div} forall setcmykcolor
+ } if
+ } def
+
+ % Plot a layer of single colour
+ /drawlayer {
+
+ /pixsorig pixs def
+ /pixs exch def
+
+ % Pad the bitmap on all sides
+ /pixs [
+ pixx 2 add {0} repeat
+ 0 pixx pixs length 1 sub {
+ 0 exch
+ pixs exch pixx getinterval aload pop
+ 0
+ } for
+ pixx 2 add {0} repeat
+ ] def
+ /pixx pixx 2 add def
+ /pixy pixy 2 add def
+
+ % Cache of visited corners for each direction
+ /cache [ pixs length {0} repeat ] def
+
+ % Construct paths by tracing regions avoiding duplication by using the cache
+ /paths [
+ 0 1 pixy 2 sub {
+ /j exch def
+ 0 1 pixx 2 sub {
/i exch def
- i y misborder not {
- t i y mxyset
- i y xyinvert
+ /k i j abcd def
+ k (0001) eq k (1001) eq or { % Black region stem corners
+ 8 i j cget 0 eq {
+ i j trace
+ } if
+ } if
+ k (1110) eq { % White region stem corner
+ 4 i j cget 0 eq {
+ i j trace
+ } if
} if
- i y 1 sub mxyget t ne i y 1 sub misborder not and {i y 1 sub} if
- i y 1 add mxyget t ne i y 1 add misborder not and {i y 1 add} if
} for
- } if
- } loop
- pop
+ } for
+ ] def
- % Walk the path to clear the border information
- dup 0 get aload pop /y1 exch def /x1 exch def
- dup dup length 1 sub 1 exch getinterval {
- aload pop /y2 exch def /x2 exch def
- x2 x1 gt { x1 2 x2 1 sub {y1 mclear4} for } if
- y2 y1 gt { y1 2 y2 1 sub {x1 exch mclear4} for } if
- x2 x1 lt { x1 -2 x2 1 add {y1 mclear4} for } if
- y2 y1 lt { y1 -2 y2 1 add {x1 exch mclear4} for } if
- /x1 x2 def /y1 y2 def
+ % Revert the bitmap size
+ /pixx pixx 2 sub def
+ /pixy pixy 2 sub def
+
+ % Draw the image
+ newpath
+ paths {
+ /p exch def
+ /len p length def
+ p len 1 sub get aload pop
+ p 0 get aload pop
+ 0 1 len 1 sub { % x1 y1 x2 y2
+ /i exch def
+ p i 1 add len mod get aload pop 6 -2 roll % x3 y3 x1 y1 x2 y2
+ 5 index inkspreadh
+ 4 index 4 -1 roll lt {add} {sub} ifelse % y3<y1 ? x2+i : x2-i
+ 4 1 roll
+ 4 index inkspreadv
+ 4 index 4 -1 roll gt {add} {sub} ifelse % x3>x1 ? y2+i : y2-i
+ 4 -1 roll exch pixy exch sub
+ i 0 eq {moveto} {lineto} ifelse
+ } for % x2 y2 x3 y3
+ closepath
+ pop pop pop pop
} forall
+ fill
- % Discard duplicate final point
- dup length 1 sub 0 exch getinterval
+ /pixs pixsorig def
- } bind def
+ } def
- % Pad the bitmap on all sides
- /pixs [
- pixx 2 add {0} repeat
- 0 pixx pixs length 1 sub {
- 0 exch
- pixs exch pixx getinterval aload pop
- 0
- } for
- pixx 2 add {0} repeat
- ] def
- /pixx pixx 2 add def
- /pixy pixy 2 add def
+ /drawlayerdots {
- % Track inverted regions and working space
- /m [ pixs length {0} repeat ] def
+ /pixsorig pixs def
+ /pixs exch def
- % Construct paths by tracing and inverting each dark region
- /paths [
- 0 1 pixy 1 sub {
- /j exch def
- 0 1 pixx 1 sub {
- /i exch def
- i j xyget 1 eq {
- i 1 sub j 1 sub trace
- } if
- } for
+ newpath
+ 0 1 pixs length 1 sub {
+ dup pixx mod /x exch def
+ pixx idiv /y exch def
+ x y xyget 1 eq {
+ x 0.5 add pixy y sub 0.5 sub moveto
+ x 0.5 add pixy y sub 0.5 sub 0.5 inkspread sub 0 360 arc
+ } if
} for
- ] def
+ fill
- % Revert the bitmap size
- /pixx pixx 2 sub def
- /pixy pixy 2 sub def
+ /pixs pixsorig def
- % Set RGB or CMYK color depending on length of given hex string
- /setanycolor {
- /anycolor exch def
- anycolor length 6 eq {
- (< >) 8 string copy dup 1 anycolor putinterval cvx exec {255 div} forall setrgbcolor
- } if
- anycolor length 8 eq {
- (< >) 10 string copy dup 1 anycolor putinterval cvx exec {255 div} forall setcmykcolor
- } if
- } bind def
+ } def
gsave
% Draw the image
+ /inkspread inkspread 2 div def
/inkspreadh inkspreadh 2 div def
/inkspreadv inkspreadv 2 div def
currentpoint translate
width pixx div 72 mul height pixy div 72 mul scale
0 0 moveto pixx 0 lineto pixx pixy lineto 0 pixy lineto closepath
backgroundcolor (unset) ne { gsave backgroundcolor setanycolor fill grestore } if
- barcolor (unset) ne { barcolor setanycolor } if
- newpath
- paths {
- /p exch def
- /len p length def
- p len 1 sub get aload pop
- p 0 get aload pop
- 0 1 len 1 sub { % x1 y1 x2 y2
- /i exch def
- p i 1 add len mod get aload pop 6 -2 roll % x3 y3 x1 y1 x2 y2
- 5 index inkspreadh
- 4 index 4 -1 roll lt {add} {sub} ifelse % y3<y1 ? x2+i : x2-i
- 4 1 roll
- 4 index inkspreadv
- 4 index 4 -1 roll gt {add} {sub} ifelse % x3>x1 ? y2+i : y2-i
- 4 -1 roll exch pixy exch sub
- i 0 eq {moveto} {lineto} ifelse
- } for % x2 y2 x3 y3
- closepath
- pop pop pop pop
+
+ colormap (unset) eq {
+ /colormap << 1 barcolor >> def
+ } if
+
+ colormap {
+ setanycolor
+ /key exch def
+ [
+ pixs { key eq {1} {0} ifelse } forall
+ ] dotty {drawlayerdots} {drawlayer} ifelse
} forall
- fill
% Display the text for elements in the text array
textcolor (unset) ne { textcolor setanycolor } if
@@ -597,14 +3760,14 @@ begin
/textascent exch def
/textwidth tstr stringwidth pop tstr length 1 sub textgaps mul add def
- /textxpos textxoffset x textwidth sub 2 div add def
+ /textxpos textxoffset pixx textwidth sub 2 div add def
textxalign (left) eq { /textxpos textxoffset def } if
- textxalign (right) eq { /textxpos x textxoffset sub textwidth sub def } if
+ textxalign (right) eq { /textxpos pixx textxoffset sub textwidth sub def } if
textxalign (offleft) eq { /textxpos textwidth textxoffset add neg def } if
- textxalign (offright) eq { /textxpos x textxoffset add def } if
- textxalign (justify) eq textwidth x lt and {
+ textxalign (offright) eq { /textxpos pixx textxoffset add def } if
+ textxalign (justify) eq textwidth pixx lt and {
/textxpos 0 def
- /textgaps x textwidth sub tstr length 1 sub div def
+ /textgaps pixx textwidth sub tstr length 1 sub div def
} if
/textypos textyoffset textascent add 1 add neg def
textyalign (above) eq { /textypos textyoffset pixy add 1 add def } if
@@ -617,7 +3780,9 @@ begin
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/renmatrix dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -627,10 +3792,10 @@ end
% --BEGIN RENDERER renmaximatrix--
% --REQUIRES preamble raiseerror--
-%%BeginResource: uk.co.terryburton.bwipp renmaximatrix 0.0 2017040400 52341 55461
-%%BeginData: 79 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp renmaximatrix 0.0 2022082100 50058 49824
+%%BeginData: 81 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
begin
/renmaximatrix {
@@ -659,24 +3824,24 @@ begin
anycolor length 8 eq {
(< >) 10 string copy dup 1 anycolor putinterval cvx exec {255 div} forall setcmykcolor
} if
- } bind def
+ } def
gsave
currentpoint translate
- 2.4945 dup scale % from 1pt to 1.88mm
+ 2.4945 dup scale % from 1pt to 0.88mm
0 0 moveto 30 0 lineto 30 29 lineto 0 29 lineto closepath
- backgroundcolor (unset) ne { gsave backgroundcolor setanycolor fill grestore } if
+ backgroundcolor (unset) ne { gsave backgroundcolor setanycolor fill grestore } if
barcolor (unset) ne { barcolor setanycolor } if
0.5 0.5774 translate
newpath
pixs {
- dup
- /x exch 30 mod def
+ dup
+ /x exch 30 mod def
/y exch 30 idiv def
y 2 mod 0 eq {x} {x 0.5 add} ifelse
32 y sub 0.8661 mul
@@ -704,7 +3869,9 @@ begin
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/renmaximatrix dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -713,15 +3880,17 @@ end
% --END RENDERER renmaximatrix--
% --BEGIN ENCODER ean5--
-% --REQUIRES preamble raiseerror renlinear--
+% --REQUIRES preamble loadctx unloadctx raiseerror renlinear--
% --DESC: EAN-5 (5 digit addon)
% --EXAM: 90200
% --EXOP: includetext guardwhitespace
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp ean5 0.0 2017040400 68958 65237
-%%BeginData: 135 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp ean5 0.0 2022082100 67660 63946
+%%BeginData: 147 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
+dup /loadctx dup /uk.co.terryburton.bwipp findresource put
+dup /unloadctx dup /uk.co.terryburton.bwipp findresource put
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
begin
@@ -732,14 +3901,15 @@ begin
/options exch def % We are given an option string
/barcode exch def % We are given a barcode string
+ /ctx null def
/dontdraw false def
/includetext false def % Enable/disable text
- /textfont /NimbusSanL-Regu def
+ /textfont /Helvetica def
/textsize 12 def
/textxoffset 0 def
/textyoffset (unset) def
- /height 0.7 def
-
+ /height 0.7 def
+
% Parse the input options
options type /stringtype eq {
1 dict begin
@@ -749,8 +3919,8 @@ begin
} loop
currentdict end /options exch def
} if
- options {def} forall
-
+ options {def} forall
+
/textfont textfont cvlit def
/textsize textsize cvr def
/height height cvr def
@@ -761,6 +3931,8 @@ begin
/textyoffset textyoffset cvr def
} ifelse
+ /ean5 //loadctx exec
+
% Validate input
barcode length 5 ne {
/bwipp.ean5badLength (EAN-5 add-on must be 5 digits) //raiseerror exec
@@ -770,7 +3942,8 @@ begin
/bwipp.ean5badCharacter (EAN-5 add-on must contain only digits) //raiseerror exec
} if
} forall
-
+
+{
% Create an array containing the character mappings
/encs
[ (3211) (2221) (2122) (1411) (1132)
@@ -786,6 +3959,8 @@ begin
[ (11000) (10100) (10010) (10001) (01100)
(00110) (00011) (01010) (01001) (00101)
] def
+} ctxdef
+
/checksum 0 def
0 1 4 {
/i exch def
@@ -801,7 +3976,7 @@ begin
/sbs 31 string def
/txt 5 array def
-
+
0 1 4 {
/i exch def
@@ -849,9 +4024,13 @@ begin
dontdraw not //renlinear if
+ //unloadctx exec
+
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/ean5 dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -860,15 +4039,17 @@ end
% --END ENCODER ean5--
% --BEGIN ENCODER ean2--
-% --REQUIRES preamble raiseerror renlinear--
+% --REQUIRES preamble loadctx unloadctx raiseerror renlinear--
% --DESC: EAN-2 (2 digit addon)
% --EXAM: 05
% --EXOP: includetext guardwhitespace
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp ean2 0.0 2017040400 67275 63499
-%%BeginData: 120 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp ean2 0.0 2022082100 66307 62648
+%%BeginData: 133 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
+dup /loadctx dup /uk.co.terryburton.bwipp findresource put
+dup /unloadctx dup /uk.co.terryburton.bwipp findresource put
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
begin
@@ -879,14 +4060,15 @@ begin
/options exch def % We are given an options string
/barcode exch def % We are given a barcode string
+ /ctx null def
/dontdraw false def
/includetext false def % Enable/disable text
- /textfont /NimbusSanL-Regu def
+ /textfont /Helvetica def
/textsize 12 def
/textxoffset 0 def
/textyoffset (unset) def
/height 0.7 def
-
+
% Parse the input options
options type /stringtype eq {
1 dict begin
@@ -897,7 +4079,7 @@ begin
currentdict end /options exch def
} if
options {def} forall
-
+
/textfont textfont cvlit def
/textsize textsize cvr def
/height height cvr def
@@ -908,6 +4090,8 @@ begin
/textyoffset textyoffset cvr def
} ifelse
+ /ean2 //loadctx exec
+
% Validate input
barcode length 2 ne {
/bwipp.ean2badLength (EAN-2 add-on must be 2 digits) //raiseerror exec
@@ -917,7 +4101,8 @@ begin
/bwipp.ean2badCharacter (EAN-2 add-on must contain only digits) //raiseerror exec
} if
} forall
-
+
+{
% Create an array containing the character mappings
/encs
[ (3211) (2221) (2122) (1411) (1132)
@@ -929,11 +4114,14 @@ begin
/barchars (0123456789) def
% Determine the mirror map based on mod 4 checksum
- /mirrormap [(00) (01) (10) (11)] barcode 0 2 getinterval cvi 4 mod get def
+ /mirrormaps [(00) (01) (10) (11)] def
+} ctxdef
+
+ /mirrormap mirrormaps barcode 0 2 getinterval cvi 4 mod get def
/sbs 13 string def
/txt 2 array def
-
+
0 1 1 {
/i exch def
@@ -950,7 +4138,7 @@ begin
length /indx exch def % indx is the length of pre
pop pop % Discard seek and post
/enc encs indx get def % Get the indxth encoding
- mirrormap i get 49 eq { % Reverse enc if 1 in this position in mirrormap
+ mirrormap i get 49 eq { % Reverse enc if 1 in this position in mirrormap
/enclen enc length def
/revenc enclen string def
0 1 enclen 1 sub {
@@ -981,9 +4169,13 @@ begin
dontdraw not //renlinear if
+ //unloadctx exec
+
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/ean2 dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -992,15 +4184,17 @@ end
% --END ENCODER ean2--
% --BEGIN ENCODER ean13--
-% --REQUIRES preamble raiseerror renlinear ean5 ean2--
+% --REQUIRES preamble loadctx unloadctx raiseerror renlinear ean5 ean2--
% --DESC: EAN-13
% --EXAM: 2112345678900
% --EXOP: includetext guardwhitespace
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp ean13 0.0 2017040400 95001 91176
-%%BeginData: 215 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp ean13 0.0 2022082100 87150 86773
+%%BeginData: 226 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
+dup /loadctx dup /uk.co.terryburton.bwipp findresource put
+dup /unloadctx dup /uk.co.terryburton.bwipp findresource put
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
dup /ean2 dup /uk.co.terryburton.bwipp findresource put
@@ -1013,9 +4207,10 @@ begin
/options exch def % We are given an option string
/barcode exch def % We are given a barcode string
+ /ctx null def
/dontdraw false def
/includetext false def % Enable/disable text
- /textfont /NimbusSanL-Regu def
+ /textfont /Helvetica def
/textsize 12 def
/textxoffset -10 def
/textyoffset -4 def
@@ -1042,12 +4237,14 @@ begin
/textxoffset textxoffset cvr def
/textyoffset textyoffset cvr def
/height height cvr def
- /addongap addongap cvr def
+ /addongap addongap cvr def
addontextfont (unset) ne {/addontextfont addontextfont cvlit def} if
addontextsize (unset) ne {/addontextsize addontextsize cvr def} if
addontextxoffset (unset) ne {/addontextxoffset addontextxoffset cvr def} if
addontextyoffset (unset) ne {/addontextyoffset addontextyoffset cvr def} if
+ /ean13 //loadctx exec
+
% Split off the addon
barcode ( ) search {
/barcode exch def
@@ -1093,6 +4290,7 @@ begin
pad 12 checksum 48 add put % Put ascii for checksum at end of pad
/barcode pad def
+{
% Create an array containing the character mappings
/encs
[ (3211) (2221) (2122) (1411) (1132)
@@ -1108,10 +4306,11 @@ begin
[ (000000) (001011) (001101) (001110) (010011)
(011001) (011100) (010101) (010110) (011010)
] def
+} ctxdef
/sbs 59 string def
/txt 13 array def
-
+
% Put the start character
sbs 0 encs 10 get putinterval
@@ -1191,8 +4390,8 @@ begin
/bbs [bbs aload pop addcode (bbs) get {.075 add} forall] def
/txt [txt aload pop addcode (txt) get aload pop] def
/guardrightypos height 72 mul 6 sub def
- } if
-
+ } if
+
% Return the arguments
<<
/ren //renlinear
@@ -1208,9 +4407,13 @@ begin
dontdraw not //renlinear if
+ //unloadctx exec
+
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/ean13 dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -1219,15 +4422,17 @@ end
% --END ENCODER ean13--
% --BEGIN ENCODER ean8--
-% --REQUIRES preamble raiseerror renlinear ean5 ean2--
+% --REQUIRES preamble loadctx unloadctx raiseerror renlinear ean5 ean2--
% --DESC: EAN-8
% --EXAM: 02345673
% --EXOP: includetext guardwhitespace
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp ean8 0.0 2017040400 91447 87627
-%%BeginData: 196 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp ean8 0.0 2022082100 84180 83888
+%%BeginData: 207 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
+dup /loadctx dup /uk.co.terryburton.bwipp findresource put
+dup /unloadctx dup /uk.co.terryburton.bwipp findresource put
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
dup /ean2 dup /uk.co.terryburton.bwipp findresource put
@@ -1240,9 +4445,10 @@ begin
/options exch def % We are given an option string
/barcode exch def % We are given a barcode string
+ /ctx null def
/dontdraw false def
/includetext false def % Enable/disable text
- /textfont /NimbusSanL-Regu def
+ /textfont /Helvetica def
/textsize 12 def
/textxoffset 4 def
/textyoffset -4 def
@@ -1252,7 +4458,7 @@ begin
/addontextsize (unset) def
/addontextxoffset (unset) def
/addontextyoffset (unset) def
-
+
% Parse the input options, either a string or a dict
options type /stringtype eq {
1 dict begin
@@ -1263,7 +4469,7 @@ begin
currentdict end /options exch def
} if
options {def} forall
-
+
/textfont textfont cvlit def
/textsize textsize cvr def
/textxoffset textxoffset cvr def
@@ -1275,6 +4481,8 @@ begin
addontextxoffset (unset) ne {/addontextxoffset addontextxoffset cvr def} if
addontextyoffset (unset) ne {/addontextyoffset addontextyoffset cvr def} if
+ /ean8 //loadctx exec
+
% Split off the addon
barcode ( ) search {
/barcode exch def
@@ -1319,8 +4527,9 @@ begin
pad 0 barcode putinterval % Add barcode to the start of the pad
pad 7 checksum 48 add put % Put ascii for checksum at end of pad
/barcode pad def
-
+
% Create an array containing the character mappings
+{
/encs
[ (3211) (2221) (2122) (1411) (1132)
(1231) (1114) (1312) (1213) (3112)
@@ -1329,10 +4538,11 @@ begin
% Create a string of the available characters
/barchars (0123456789) def
+} ctxdef
/sbs 43 string def
/txt 8 array def
-
+
% Put the start character
sbs 0 encs 10 get putinterval
@@ -1398,7 +4608,7 @@ begin
/bbs [bbs aload pop addcode (bbs) get {.075 add} forall] def
/txt [txt aload pop addcode (txt) get aload pop] def
/guardrightypos height 72 mul 6 sub def
- } if
+ } if
% Return the arguments
<<
@@ -1416,9 +4626,13 @@ begin
dontdraw not //renlinear if
+ //unloadctx exec
+
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/ean8 dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -1427,15 +4641,17 @@ end
% --END ENCODER ean8--
% --BEGIN ENCODER upca--
-% --REQUIRES preamble raiseerror renlinear ean5 ean2--
+% --REQUIRES preamble loadctx unloadctx raiseerror renlinear ean5 ean2--
% --DESC: UPC-A
% --EXAM: 416000336108
% --EXOP: includetext
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp upca 0.0 2017040400 100538 100055
-%%BeginData: 248 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp upca 0.0 2022082100 92023 91540
+%%BeginData: 259 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
+dup /loadctx dup /uk.co.terryburton.bwipp findresource put
+dup /unloadctx dup /uk.co.terryburton.bwipp findresource put
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
dup /ean2 dup /uk.co.terryburton.bwipp findresource put
@@ -1448,13 +4664,14 @@ begin
/options exch def
/barcode exch def % We are given a barcode string
+ /ctx null def
/dontdraw false def
/includetext false def % Enable/disable text
- /textfont /NimbusSanL-Regu def
+ /textfont /Helvetica def
/textsize 12 def
/textxoffset -7 def
/textyoffset -4 def
- /height 1 def
+ /height 1 def
/addongap 12 def
/addontextfont (unset) def
/addontextsize (unset) def
@@ -1470,7 +4687,7 @@ begin
} loop
currentdict end /options exch def
} if
- options {def} forall
+ options {def} forall
/textfont textfont cvlit def
/textsize textsize cvr def
@@ -1483,6 +4700,8 @@ begin
addontextxoffset (unset) ne {/addontextxoffset addontextxoffset cvr def} if
addontextyoffset (unset) ne {/addontextyoffset addontextyoffset cvr def} if
+ /upca //loadctx exec
+
% Split off the addon
barcode ( ) search {
/barcode exch def
@@ -1550,7 +4769,7 @@ begin
addon length 0 ne addon length 2 ne and addon length 5 ne and {
/bwipp.upcAbadAddOnLength (Add-on for UPC-A must be 2 or 5 digits) //raiseerror exec
} if
-
+
% Add checksum digit to barcode
/pad 12 string def % Create pad one bigger than barcode
/checksum 0 def
@@ -1574,6 +4793,7 @@ begin
/barcode pad def
% Create an array containing the character mappings
+{
/encs
[ (3211) (2221) (2122) (1411) (1132)
(1231) (1114) (1312) (1213) (3112)
@@ -1582,6 +4802,7 @@ begin
% Create a string of the available characters
/barchars (0123456789) def
+} ctxdef
/sbs 59 string def
/txt 12 array def
@@ -1659,7 +4880,7 @@ begin
/bbs [bbs aload pop addcode (bbs) get {.075 add} forall] def
/txt [txt aload pop addcode (txt) get aload pop] def
/guardrightypos height 72 mul 6 sub def
- } if
+ } if
% Return the arguments
<<
@@ -1676,9 +4897,13 @@ begin
dontdraw not //renlinear if
+ //unloadctx exec
+
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/upca dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -1687,15 +4912,17 @@ end
% --END ENCODER upca--
% --BEGIN ENCODER upce--
-% --REQUIRES preamble raiseerror renlinear ean5 ean2--
+% --REQUIRES preamble loadctx unloadctx raiseerror renlinear ean5 ean2--
% --DESC: UPC-E
% --EXAM: 00123457
% --EXOP: includetext
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp upce 0.0 2017040400 106367 105719
-%%BeginData: 287 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp upce 0.0 2022082100 96548 96108
+%%BeginData: 298 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
+dup /loadctx dup /uk.co.terryburton.bwipp findresource put
+dup /unloadctx dup /uk.co.terryburton.bwipp findresource put
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
dup /ean2 dup /uk.co.terryburton.bwipp findresource put
@@ -1708,9 +4935,10 @@ begin
/options exch def % We are given an option string
/barcode exch def % We are given a barcode string
+ /ctx null def
/dontdraw false def
/includetext false def % Enable/disable text
- /textfont /NimbusSanL-Regu def
+ /textfont /Helvetica def
/textsize 12 def
/textxoffset -7 def
/textyoffset -4 def
@@ -1720,7 +4948,7 @@ begin
/addontextsize (unset) def
/addontextxoffset (unset) def
/addontextyoffset (unset) def
-
+
% Parse the input options
options type /stringtype eq {
1 dict begin
@@ -1731,7 +4959,7 @@ begin
currentdict end /options exch def
} if
options {def} forall
-
+
/textfont textfont cvlit def
/textsize textsize cvr def
/textxoffset textxoffset cvr def
@@ -1743,6 +4971,8 @@ begin
addontextxoffset (unset) ne {/addontextxoffset addontextxoffset cvr def} if
addontextyoffset (unset) ne {/addontextyoffset addontextyoffset cvr def} if
+ /upce //loadctx exec
+
% Split off the addon
barcode ( ) search {
/barcode exch def
@@ -1812,6 +5042,7 @@ begin
/bwipp.upcEbadNumberSystem (UPC-E must have number system 0 or 1) //raiseerror exec
} if
+{
% Create an array containing the character mappings
/encs
[ (3211) (2221) (2122) (1411) (1132)
@@ -1826,6 +5057,7 @@ begin
[ (000111) (001011) (001101) (001110) (010011)
(011001) (011100) (010101) (010110) (011010)
] def
+} ctxdef
% Derive the equivalent UPC-A for its checksum
1 { % Common exit
@@ -1909,7 +5141,7 @@ begin
length /indx exch def % indx is the length of pre
pop pop % Discard seek and post
/enc encs indx get def % Get the indxth encoding
- mirrormap i 1 sub get 49 eq { % Reverse enc if 1 in this position in mirrormap
+ mirrormap i 1 sub get 49 eq { % Reverse enc if 1 in this position in mirrormap
/enclen enc length def
/revenc enclen string def
0 1 enclen 1 sub {
@@ -1975,9 +5207,13 @@ begin
dontdraw not //renlinear if
+ //unloadctx exec
+
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/upce dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -1986,15 +5222,15 @@ end
% --END ENCODER upce--
% --BEGIN ENCODER isbn--
-% --REQUIRES preamble raiseerror renlinear ean5 ean2 ean13--
+% --REQUIRES preamble loadctx unloadctx raiseerror renlinear ean5 ean2 ean13--
% --DESC: ISBN
-% --EXAM: 978-1-56581-231-4 52250
+% --EXAM: 978-1-56581-231-4 90000
% --EXOP: includetext guardwhitespace
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp isbn 0.0 2017040400 104057 106666
-%%BeginData: 252 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp isbn 0.0 2022082100 95230 94623
+%%BeginData: 255 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
dup /ean13 dup /uk.co.terryburton.bwipp findresource put
@@ -2006,16 +5242,17 @@ begin
/options exch def % We are given an options string
/barcode exch def % We are given the isbn text with dashes
+ /ctx null def
/dontdraw false def
/includetext false def % Enable/disable ISBN text
- /isbntextfont /NimbusMonL-Regu def
+ /isbntextfont /Courier def
/isbntextsize 9 def
/isbntextxoffset (unset) def
/isbntextyoffset (unset) def
/height 1 def
- /addongap 12 def
+ /addongap 12 def
/legacy false def
-
+
% Parse the input options
options type /stringtype eq {
1 dict begin
@@ -2026,7 +5263,7 @@ begin
currentdict end /options exch def
} if
options {def} forall
-
+
/isbntextfont isbntextfont cvlit def
/isbntextsize isbntextsize cvr def
isbntextxoffset (unset) ne {/isbntextxoffset isbntextxoffset cvr def} if
@@ -2194,7 +5431,7 @@ begin
% Convert ISBN digits to EAN-13
/barcode 12 string def
- isbn length 9 eq {
+ isbn length 9 eq {
barcode 0 (978) putinterval
barcode 3 isbn putinterval
} {
@@ -2203,7 +5440,7 @@ begin
% Append the addon
addon () ne {
- 12 addon length add 1 add string
+ 12 addon length add 1 add string
dup 0 barcode putinterval
dup 12 ( ) putinterval
dup 13 addon putinterval
@@ -2212,7 +5449,7 @@ begin
% Get the result of encoding with ean13
options (dontdraw) true put
- options (addongap) addongap put
+ options (addongap) addongap put
/args barcode options //ean13 exec def
% Add the ISBN text
@@ -2240,8 +5477,10 @@ begin
dontdraw not //renlinear if
end
-
-} bind def
+
+}
+[/barcode] {null def} forall
+bind def
/isbn dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -2250,15 +5489,15 @@ end
% --END ENCODER isbn--
% --BEGIN ENCODER ismn--
-% --REQUIRES preamble raiseerror renlinear ean5 ean2 ean13--
+% --REQUIRES preamble loadctx unloadctx raiseerror renlinear ean5 ean2 ean13--
% --DESC: ISMN
% --EXAM: 979-0-2605-3211-3
% --EXOP: includetext guardwhitespace
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp ismn 0.0 2017040400 99901 102499
-%%BeginData: 231 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp ismn 0.0 2022082100 91802 91288
+%%BeginData: 234 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
dup /ean13 dup /uk.co.terryburton.bwipp findresource put
@@ -2270,14 +5509,15 @@ begin
/options exch def % We are given an options string
/barcode exch def % We are given the ismn text with dashes
+ /ctx null def
/dontdraw false def
/includetext false def % Enable/disable ISMN text
- /ismntextfont /NimbusMonL-Regu def
+ /ismntextfont /Courier def
/ismntextsize 9 def
/ismntextxoffset (unset) def
/ismntextyoffset (unset) def
/height 1 def
- /addongap 12 def
+ /addongap 12 def
/legacy false def
% Parse the input options
@@ -2290,14 +5530,14 @@ begin
currentdict end /options exch def
} if
options {def} forall
-
+
/ismntextfont ismntextfont cvlit def
/ismntextsize ismntextsize cvr def
ismntextxoffset (unset) ne {/ismntextxoffset ismntextxoffset cvr def} if
ismntextyoffset (unset) ne {/ismntextyoffset ismntextyoffset cvr def} if
/height height cvr def
/addongap addongap cvr def
-
+
% Split off the addon
barcode ( ) search {
/barcode exch def
@@ -2442,11 +5682,11 @@ begin
/ismntxt pad def
% Convert ISMN digits to EAN-13
- /barcode ismn 0 12 getinterval def
+ /barcode ismn 0 12 getinterval def
% Append the addon
addon () ne {
- 12 addon length add 1 add string
+ 12 addon length add 1 add string
dup 0 barcode putinterval
dup 12 ( ) putinterval
dup 13 addon putinterval
@@ -2455,7 +5695,7 @@ begin
% Get the result of encoding with ean13
options (dontdraw) true put
- options (addongap) addongap put
+ options (addongap) addongap put
/args barcode options //ean13 exec def
% Add the ISMN text
@@ -2483,8 +5723,10 @@ begin
dontdraw not //renlinear if
end
-
-} bind def
+
+}
+[/barcode] {null def} forall
+bind def
/ismn dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -2493,15 +5735,15 @@ end
% --END ENCODER ismn--
% --BEGIN ENCODER issn--
-% --REQUIRES preamble raiseerror renlinear ean2 ean5 ean13--
+% --REQUIRES preamble loadctx unloadctx raiseerror renlinear ean2 ean5 ean13--
% --DESC: ISSN
% --EXAM: 0311-175X 00 17
% --EXOP: includetext guardwhitespace
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp issn 0.0 2017040400 89213 88719
-%%BeginData: 176 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp issn 0.0 2022082100 83234 82612
+%%BeginData: 179 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
dup /ean13 dup /uk.co.terryburton.bwipp findresource put
@@ -2513,14 +5755,15 @@ begin
/options exch def % We are given an options string
/issntxt exch def % We are given the issn text with dashes
+ /ctx null def
/dontdraw false def
/includetext false def % Enable/disable ISSN text
- /issntextfont /NimbusMonL-Regu def
+ /issntextfont /Courier def
/issntextsize 9 def
/issntextxoffset (unset) def
/issntextyoffset (unset) def
/height 1 def
- /addongap 12 def
+ /addongap 12 def
% Parse the input options
options type /stringtype eq {
@@ -2532,7 +5775,7 @@ begin
currentdict end /options exch def
} if
options {def} forall
-
+
/issntextfont issntextfont cvlit def
/issntextsize issntextsize cvr def
issntextxoffset (unset) ne {/issntextxoffset issntextxoffset cvr def} if
@@ -2626,7 +5869,7 @@ begin
/issntxt pad def
% Convert ISSN digits to EAN-13
- /barcode issn 0 7 getinterval def
+ /barcode issn 0 7 getinterval def
% Append the sequence variant
/barcode 12 string def
@@ -2636,7 +5879,7 @@ begin
% Append the addon
addon () ne {
- 12 addon length add 1 add string
+ 12 addon length add 1 add string
dup 0 barcode putinterval
dup 12 ( ) putinterval
dup 13 addon putinterval
@@ -2645,7 +5888,7 @@ begin
% Get the result of encoding with ean13
options (dontdraw) true put
- options (addongap) addongap put
+ options (addongap) addongap put
/args barcode options //ean13 exec def
% Add the ISSN text
@@ -2672,7 +5915,9 @@ begin
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/issn dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -2680,17 +5925,115 @@ end
%%EndResource
% --END ENCODER issn--
+% --BEGIN ENCODER mands--
+% --REQUIRES preamble loadctx unloadctx raiseerror renlinear ean2 ean5 ean8--
+% --DESC: Marks & Spencer
+% --EXAM: 0642118
+% --EXOP: includetext
+% --RNDR: renlinear
+%%BeginResource: uk.co.terryburton.bwipp mands 0.0 2022082100 71641 71714
+%%BeginData: 83 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+10 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /renlinear dup /uk.co.terryburton.bwipp findresource put
+dup /ean8 dup /uk.co.terryburton.bwipp findresource put
+begin
+/mands {
+
+ 20 dict begin
+
+ /options exch def
+ /barcode exch def
+
+ /ctx null def
+ /dontdraw false def
+ /includetext false def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ /barlen barcode length def
+
+ % Validate the input
+ barlen 7 ne barlen 8 ne and {
+ /bwipp.MandSbadLength (M&S barcode must be 7 or 8 characters) //raiseerror exec
+ } if
+
+ barlen 7 eq {
+ /barcode (00000000) 8 string copy dup 1 barcode putinterval def
+ } if
+
+ % Get the result of encoding with ean8
+ options (dontdraw) true put
+ /args barcode options //ean8 exec def
+
+ % Remove the centre guard
+ args (bbs) get dup
+ dup 2 get 10 exch put
+ dup 2 get 11 exch put
+ args (bhs) get dup
+ dup 2 get 10 exch put
+ dup 2 get 11 exch put
+
+ % Fix up the text for 7-digit inputs
+ /txt args (txt) get def
+ barlen 7 eq {
+ 0 1 6 {
+ txt exch 2 copy
+ 1 add get 0 get 3 1 roll get
+ 0 get exch 0 exch putinterval
+ } for
+ txt 7 get 0 get 0 ( ) putinterval
+ } if
+
+ % Add the M and S guards
+ 10 array dup 0 txt putinterval /txt exch def
+ txt 0 get dup length array copy txt exch 8 exch put
+ txt 0 get dup length array copy txt exch 9 exch put
+ txt 8 get 0 (M) put txt 8 get 1 -12 put
+ txt 9 get 0 (S) put txt 9 get 1 69 put
+
+ args (txt) txt put
+ args (opt) options put
+ args
+
+ dontdraw not //renlinear if
+
+ end
+
+}
+[/barcode] {null def} forall
+bind def
+/mands dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
+%%EndData
+%%EndResource
+% --END ENCODER mands--
+
% --BEGIN ENCODER code128--
-% --REQUIRES preamble raiseerror renlinear--
+% --REQUIRES preamble loadctx unloadctx raiseerror parseinput renlinear--
% --DESC: Code 128
% --EXAM: Count01234567!
% --EXOP: includetext
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp code128 0.0 2017040400 143323 149453
-%%BeginData: 455 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp code128 0.0 2022082100 125925 128825
+%%BeginData: 438 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
+dup /loadctx dup /uk.co.terryburton.bwipp findresource put
+dup /unloadctx dup /uk.co.terryburton.bwipp findresource put
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /parseinput dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
begin
/code128 {
@@ -2700,9 +6043,10 @@ begin
/options exch def % We are given an option string
/barcode exch def % We are given a barcode string
+ /ctx null def
/dontdraw false def
/includetext false def % Enable/disable text
- /textfont /NimbusMonL-Regu def
+ /textfont /Courier def
/textsize 10 def
/textxoffset 0 def
/textyoffset -7 def
@@ -2729,40 +6073,37 @@ begin
/textyoffset textyoffset cvr def
/height height cvr def
- % Parse ordinals of the form ^NNN to ASCII
- parse {
- /msg barcode length string def
- /j 0 def
- barcode
- { % loop
- (^) search {
- dup msg exch j exch putinterval
- length j add 1 add /j exch def
- pop
- dup 0 3 getinterval cvi msg exch j 1 sub exch put
- dup length 3 sub 3 exch getinterval
- } {
- dup msg exch j exch putinterval
- length j add /j exch def
- /barcode msg 0 j getinterval def
- exit
- } ifelse
- } loop
- } if
-
- /barlen barcode length def
+ /code128 //loadctx exec
% Special function characters
- /sta -1 def /stb -2 def /stc -3 def
- /swa -4 def /swb -5 def /swc -6 def
- /fn1 -7 def /fn2 -8 def /fn3 -9 def
+{
+ /sta -1 def /stb -2 def /stc -3 def
+ /swa -4 def /swb -5 def /swc -6 def
+ /fn1 -7 def /fn2 -8 def /fn3 -9 def
/fn4 -10 def /sft -11 def /stp -12 def
/lka -13 def /lkc -14 def % CC-A/B and CC-C linkage
+} ctxdef
+
+ % Parse the input
+ /fncvals <<
+ /parse parse
+ /parsefnc parsefnc
+ (FNC1) fn1
+ (FNC1) fn1
+ (FNC2) fn2
+ (FNC3) fn3
+% (FNC4) fn4 Not user accessible as encoded automatically
+ (LNKA) lka
+ (LNKC) lkc
+ >> def
+ /msg barcode fncvals //parseinput exec def
+ /msglen msg length def
% Character maps for each state
+{
/charmaps [
% A B C A B C A B C
- [ 32 32 (00) ] [ (!) (!) (01) ] [ (") (") (02) ] % 0-2
+ [ 32 32 (00) ] [ (!) (!) (01) ] [ (") (") (02) ] % 0-2
[ (#) (#) (03) ] [ ($) ($) (04) ] [ (%) (%) (05) ] % 3-5
[ (&) (&) (06) ] [ (') (') (07) ] [ 40 40 (08) ] % 6-8
[ 41 41 (09) ] [ (*) (*) (10) ] [ (+) (+) (11) ] % 9-11
@@ -2798,8 +6139,8 @@ begin
[ swc swc (99) ] [ swb fn4 swb ] [ fn4 swa swa ] % 99-101
[ fn1 fn1 fn1 ] [ sta sta sta ] [ stb stb stb ] % 102-104
[ stc stc stc ] [ stp stp stp ] % 105-106
- ] def
-
+ ] def
+
% Invert charmaps to give character to value maps for each state
/charvals [ 109 dict 109 dict 109 dict ] def
0 1 charmaps length 1 sub {
@@ -2808,12 +6149,13 @@ begin
0 1 2 {
/j exch def
encs j get dup type /stringtype eq {0 get} if % convert string to ASCII if required
- charvals j get exch i put
+ charvals j get exch i put
} for
} for
/seta charvals 0 get def
/setb charvals 1 get def
/setc charvals 2 get def
+} ctxdef
% Include pseudo characters for GS1-128 Composite linkage identifiers
seta lka seta swb get put seta lkc seta swc get put
@@ -2823,10 +6165,10 @@ begin
raw {/encoding (raw) def} if
encoding (raw) eq {
- /cws barlen array def
+ /cws barcode length array def
/i 0 def /j 0 def
{ % loop
- i barlen eq {exit} if
+ i barcode length eq {exit} if
/cw barcode i 1 add 3 getinterval cvi def
cws j cw put
/i i 4 add def
@@ -2836,40 +6178,13 @@ begin
/text () def
} if
- encoding (auto) eq {
-
- /fncvals <<
- (FNC1) fn1
- (FNC2) fn2
- (FNC3) fn3
-% (FNC4) fn4 Not user accessible as encoded automatically
- (LNKA) lka
- (LNKC) lkc
- >> def
+ encoding (auto) eq {
- % Convert input into bytes accounting for FNC and LNK characters
- /msg barlen array def
- /text barlen string def
- /i 0 def /j 0 def {
- i barlen eq {exit} if
- /char barcode i get def
- text j char put
- parsefnc char 94 eq and i barlen 4 sub lt and {
- barcode i 1 add get 94 ne {
- /char fncvals barcode i 1 add 4 getinterval get def
- text j ( ) putinterval
- /i i 4 add def
- } {
- /i i 1 add def
- } ifelse
- } if
- msg j char put
- /i i 1 add def
- /j j 1 add def
- } loop
- /msg msg 0 j getinterval def
- /msglen msg length def
- /text text 0 j getinterval def
+ /text msglen string def
+ 0 1 msglen 1 sub {
+ /i exch def
+ text i msg i get dup 0 lt { pop 32 } if put
+ } for
% Standard and extended ASCII runlength at position
/numSA [ msglen {0} repeat 0 ] def
@@ -2912,26 +6227,28 @@ begin
p msglen ge {exit} if
msg p get
dup setc exch known not {pop exit} if
- fn1 eq {
+ dup -1 le {
% FNC1 in odd position of run like two digits
- s 2 mod 0 eq {/s s 1 add def} {exit} ifelse
- } if
+ fn1 eq s 2 mod 0 eq and {/s s 1 add def} {exit} ifelse
+ } {
+ pop
+ } ifelse
/n n 1 add def
/s s 1 add def
/p p 1 add def
} loop
n s
- } bind def
+ } def
% Encoding for each alphabet
/enca {
seta exch get cws exch j exch put
/j j 1 add def
- } bind def
+ } def
/encb {
setb exch get cws exch j exch put
/j j 1 add def
- } bind def
+ } def
/encc {
dup type /arraytype ne {
setc exch get
@@ -2940,11 +6257,11 @@ begin
} ifelse
cws exch j exch put
/j j 1 add def
- } bind def
+ } def
% Character exclusively in either alphabet A or B
- /anotb {dup seta exch known exch setb exch known not and} bind def
- /bnota {dup setb exch known exch seta exch known not and} bind def
+ /anotb {dup seta exch known exch setb exch known not and} def
+ /bnota {dup setb exch known exch seta exch known not and} def
% Pre-compute relative position of next anotb and next bnota characters
/nextanotb [ msg length {0} repeat 9999 ] def
@@ -2964,9 +6281,9 @@ begin
} for
% Does a-only come before b-only after given position and vice versa
- /abeforeb {dup nextanotb exch get exch nextbnota exch get lt} bind def
- /bbeforea {dup nextbnota exch get exch nextanotb exch get lt} bind def
-
+ /abeforeb {dup nextanotb exch get exch nextbnota exch get lt} def
+ /bbeforea {dup nextbnota exch get exch nextanotb exch get lt} def
+
/cws barcode length 2 mul 3 add array def
% Select start character
@@ -2988,25 +6305,25 @@ begin
/cset (setc) def
exit
} if
- 0 abeforeb {
+ 0 abeforeb {
sta enca
/cset (seta) def
- exit
- } if
+ exit
+ } if
stb enca
/cset (setb) def
exit
} loop
% Main encoding loop
- /i 0 def {
+ /i 0 def {
i msglen eq {exit} if
-
+
i numsscr /nums exch def /nchars exch def
-
+
% Determine switches and shifts
{ % common exit
- cset (seta) eq cset (setb) eq or nums 4 ge and
+ cset (seta) eq cset (setb) eq or nums 4 ge and
msg i get fn1 ne and {
nums 2 mod 0 eq {
swc cset (seta) eq {enca} {encb} ifelse
@@ -3020,9 +6337,9 @@ begin
exit
} ifelse
} if
- cset (setb) eq msg i get anotb and {
+ cset (setb) eq msg i get anotb and {
i msglen 1 sub lt {
- i 1 add bbeforea {
+ i 1 add bbeforea {
sft encb
msg i get enca
/i i 1 add def
@@ -3046,7 +6363,7 @@ begin
/cset (setb) def
exit
} if
- cset (setc) eq nums 2 lt and {
+ cset (setc) eq nums 2 lt and msg i get -1 gt and {
i abeforeb {
swa encc
/cset (seta) def
@@ -3056,7 +6373,7 @@ begin
/cset (setb) def
exit
} if
-
+
% No switches or latches so encode
cset (seta) eq {
msg i get enca
@@ -3069,19 +6386,19 @@ begin
exit
} if
cset (setc) eq {
- msg i get fn1 eq {
- fn1 encc
+ msg i get -1 le {
+ msg i get encc
/i i 1 add def
} {
msg i 2 getinterval encc
- /i i 2 add def
+ /i i 2 add def
} ifelse
exit
} if
-
+
exit
} loop
-
+
} loop
/cws cws 0 j getinterval def
} if % auto encoding
@@ -3098,6 +6415,7 @@ begin
cws j 1 add seta stp get put
% Create an array containing the character mappings
+{
/encs
[ (212222) (222122) (222221) (121223) (121322) (131222) (122213)
(122312) (132212) (221213) (221312) (231212) (112232) (122132)
@@ -3116,6 +6434,7 @@ begin
(411311) (113141) (114131) (311141) (411131) (211412) (211214)
(211232) (2331112)
] def
+} ctxdef
% Derive space bar succession
/sbs cws length 6 mul 1 add string def
@@ -3137,9 +6456,13 @@ begin
dontdraw not //renlinear if
+ //unloadctx exec
+
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/code128 dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -3148,16 +6471,18 @@ end
% --END ENCODER code128--
% --BEGIN ENCODER gs1-128--
-% --REQUIRES preamble raiseerror renlinear code128--
+% --REQUIRES preamble loadctx unloadctx raiseerror parseinput gs1process renlinear code128--
% --DESC: GS1-128
% --EXAM: (01)95012345678903(3103)000123
% --EXOP: includetext
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp gs1-128 0.0 2017040400 79997 83024
-%%BeginData: 158 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp gs1-128 0.0 2022082100 80068 76461
+%%BeginData: 114 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /parseinput dup /uk.co.terryburton.bwipp findresource put
+dup /gs1process dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
dup /code128 dup /uk.co.terryburton.bwipp findresource put
begin
@@ -3168,16 +6493,20 @@ begin
/options exch def % We are given an option string
/barcode exch def % We are given a barcode string
+ /ctx null def
/dontdraw false def
/includetext false def % Enable/disable text
- /textfont /NimbusMonL-Regu def
+ /textfont /Courier def
/textsize 10 def
/textxoffset 0 def
/textyoffset -7 def
/height 0.5 def
/linkagea false def
/linkagec false def
-
+ /parse false def
+ /dontlint false def
+ /lintreqs false def
+
% Parse the input options
options type /stringtype eq {
1 dict begin
@@ -3193,69 +6522,16 @@ begin
/textsize textsize cvr def
/textxoffset textxoffset cvr def
/textyoffset textyoffset cvr def
- /height height cvr def
-
- /text barcode def
-
- % Expand ordinals of the form ^NNN to ASCII
- /expand {
- /in exch def
- /out in length string def
- /j 0 def
- in
- { % loop
- (^) search {
- dup out exch j exch putinterval
- length j add 1 add /j exch def
- pop
- dup 0 3 getinterval cvi out exch j 1 sub exch put
- dup length 3 sub 3 exch getinterval
- } {
- dup out exch j exch putinterval
- length j add /j exch def
- out 0 j getinterval exit
- } ifelse
- } loop
- } bind def
+ /height height cvr def
- % Parse out AIs
- /ais [] def
- /vals [] def
- barcode dup length 1 sub 1 exch getinterval
- { % loop
- dup () eq {exit} if
- (\)) search pop
- exch pop
- exch (\() search {
- exch pop exch 3 1 roll
- } {
- () 3 1 roll
- } ifelse
- [ ais aload pop counttomark 2 add index ] /ais exch def
- [ vals aload pop counttomark 1 add index expand ] /vals exch def
- pop pop
- } loop
- pop
+ /text barcode def
- % Pre-defined fixed length data field AIs
- % any AI whose prefix is not included in this table must be
- % terminated with "FNC1", even if it's fixed length
- /aifixed 23 dict def
- [
- 0 1 4 {} for
- ] {
- (00) 2 string copy dup dup 1 5 -1 roll 48 add put aifixed 3 1 roll put
- } forall
- [
- 11 1 20 {} for
- 23
- 31 1 36 {} for
- 41
- ] {
- 10 2 string cvrs dup aifixed 3 1 roll put
- } forall
+ barcode /ai //gs1process exec
+ /fncs exch def
+ /vals exch def
+ /ais exch def
- % Create the code128 data
+ % Create the code128 data
/fnc1 -1 def
/c128 [ fnc1 ] def
0 1 ais length 1 sub {
@@ -3267,7 +6543,7 @@ begin
dup c128 length ai [ exch {} forall ] putinterval
dup c128 length ai length add val [ exch {} forall ] putinterval
/c128 exch def
- i ais length 1 sub ne aifixed ai 0 2 getinterval known not and { % Append FNC1
+ i ais length 1 sub ne fncs i get and { % Append FNC1
c128 length 1 add array
dup 0 c128 putinterval
dup c128 length fnc1 put
@@ -3295,6 +6571,7 @@ begin
/barcode barcode 0 j getinterval def
% Get the result of encoding with code128
+ options (parse) undef
options (height) height put
options (dontdraw) true put
options (parsefnc) true put
@@ -3304,12 +6581,14 @@ begin
args (textxalign) (center) put
args (opt) options put
args
-
+
dontdraw not //renlinear if
-
+
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/gs1-128 dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -3318,15 +6597,15 @@ end
% --END ENCODER gs1-128--
% --BEGIN ENCODER ean14--
-% --REQUIRES preamble raiseerror renlinear code128--
+% --REQUIRES preamble loadctx unloadctx raiseerror parseinput renlinear code128--
% --DESC: GS1-14
% --EXAM: (01) 0 46 01234 56789 3
% --EXOP: includetext
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp ean14 0.0 2017040400 71172 70768
-%%BeginData: 105 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp ean14 0.0 2022082100 72494 72450
+%%BeginData: 108 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
dup /code128 dup /uk.co.terryburton.bwipp findresource put
@@ -3338,9 +6617,10 @@ begin
/options exch def % We are given an option string
/barcode exch def % We are given a barcode string
+ /ctx null def
/dontdraw false def
/includetext false def % Enable/disable text
- /textfont /NimbusMonL-Regu def
+ /textfont /Courier def
/textsize 10 def
/textxoffset 0 def
/textyoffset -7 def
@@ -3361,7 +6641,7 @@ begin
/textsize textsize cvr def
/textxoffset textxoffset cvr def
/textyoffset textyoffset cvr def
- /height height cvr def
+ /height height cvr def
% Strip spaces from the given data
/text barcode def
@@ -3369,7 +6649,7 @@ begin
{dup 32 ne {3 copy put pop 1 add} {pop} ifelse} forall
0 exch getinterval /barcode exch def
/hasspace text length barcode length ne def
-
+
% Validate the input
barcode 0 4 getinterval (\(01\)) ne {
/bwipp.ean14badAI (GS1-14 must begin with (01) application identifier) //raiseerror exec
@@ -3388,7 +6668,7 @@ begin
0 1 12 {
/i exch def
/checksum checksum barcode i 4 add get 48 sub i 2 mod 0 eq {3 mul} if add def
- } for
+ } for
/checksum 10 checksum 10 mod sub 10 mod def
barcode length 18 eq {
barcode 17 get checksum 48 add ne {
@@ -3421,12 +6701,14 @@ begin
args (textxalign) (center) put
args (opt) options put
args
-
+
dontdraw not //renlinear if
-
+
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/ean14 dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -3435,15 +6717,15 @@ end
% --END ENCODER ean14--
% --BEGIN ENCODER sscc18--
-% --REQUIRES preamble raiseerror renlinear code128--
+% --REQUIRES preamble loadctx unloadctx raiseerror parseinput renlinear code128--
% --DESC: SSCC-18
% --EXAM: (00) 0 0614141 123456789 0
% --EXOP: includetext
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp sscc18 0.0 2017040400 71184 70775
-%%BeginData: 105 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp sscc18 0.0 2022082100 72506 72457
+%%BeginData: 108 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
dup /code128 dup /uk.co.terryburton.bwipp findresource put
@@ -3455,14 +6737,15 @@ begin
/options exch def % We are given an option string
/barcode exch def % We are given a barcode string
+ /ctx null def
/dontdraw false def
/includetext false def % Enable/disable text
- /textfont /NimbusMonL-Regu def
+ /textfont /Courier def
/textsize 10 def
/textxoffset 0 def
/textyoffset -7 def
/height 1 def
-
+
% Parse the input options
options type /stringtype eq {
1 dict begin
@@ -3478,7 +6761,7 @@ begin
/textsize textsize cvr def
/textxoffset textxoffset cvr def
/textyoffset textyoffset cvr def
- /height height cvr def
+ /height height cvr def
% Strip spaces from the given data
/text barcode def
@@ -3505,7 +6788,7 @@ begin
0 1 16 {
/i exch def
/checksum checksum barcode i 4 add get 48 sub i 2 mod 0 eq {3 mul} if add def
- } for
+ } for
/checksum 10 checksum 10 mod sub 10 mod def
barcode length 22 eq {
barcode 21 get checksum 48 add ne {
@@ -3538,12 +6821,14 @@ begin
args (textxalign) (center) put
args (opt) options put
args
-
+
dontdraw not //renlinear if
-
+
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/sscc18 dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -3552,15 +6837,17 @@ end
% --END ENCODER sscc18--
% --BEGIN ENCODER code39--
-% --REQUIRES preamble raiseerror renlinear--
+% --REQUIRES preamble loadctx unloadctx raiseerror renlinear--
% --DESC: Code 39
% --EXAM: THIS IS CODE 39
% --EXOP: includetext includecheck includecheckintext
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp code39 0.0 2017040400 75290 74970
-%%BeginData: 141 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp code39 0.0 2022082100 72416 68679
+%%BeginData: 154 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
+dup /loadctx dup /uk.co.terryburton.bwipp findresource put
+dup /unloadctx dup /uk.co.terryburton.bwipp findresource put
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
begin
@@ -3571,17 +6858,18 @@ begin
/options exch def % We are given an option string
/barcode exch def % We are given a barcode string
+ /ctx null def
/dontdraw false def
/includecheck false def
/validatecheck false def
/includetext false def
/includecheckintext false def
/hidestars false def
- /textfont /NimbusMonL-Regu def
+ /textfont /Courier def
/textsize 10 def
/textyoffset -7 def
/height 1 def
-
+
% Parse the input options
options type /stringtype eq {
1 dict begin
@@ -3592,16 +6880,20 @@ begin
currentdict end /options exch def
} if
options {def} forall
-
+
/textfont textfont cvlit def
/textsize textsize cvr def
/textyoffset textyoffset cvr def
/height height cvr def
+ /code39 //loadctx exec
+
% Create a string of the available characters
+{
/barchars (0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%) def
/charvals 43 dict def
0 1 42 {charvals exch dup barchars exch 1 getinterval exch put} for
+} ctxdef
% Validate the input
0 1 barcode length 1 sub {
@@ -3627,6 +6919,7 @@ begin
} if
% Create an array containing the character mappings
+{
/encs
[ (1113313111) (3113111131) (1133111131) (3133111111) (1113311131)
(3113311111) (1133311111) (1113113131) (3113113111) (1133113111)
@@ -3638,6 +6931,7 @@ begin
(1331311111) (1311113131) (3311113111) (1331113111) (1313131111)
(1313111311) (1311131311) (1113131311) (1311313111)
] def
+} ctxdef
/sbs barlen includecheck {3} {2} ifelse add 10 mul string def
/txt barlen includecheck {3} {2} ifelse add array def
@@ -3679,7 +6973,7 @@ begin
txt barlen 1 add [() barlen 1 add 16 mul textyoffset textfont textsize] put
} ifelse
} ifelse
-
+
% Return the arguments
<<
/ren //renlinear
@@ -3694,9 +6988,13 @@ begin
dontdraw not //renlinear if
+ //unloadctx exec
+
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/code39 dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -3705,16 +7003,19 @@ end
% --END ENCODER code39--
% --BEGIN ENCODER code39ext--
-% --REQUIRES preamble raiseerror renlinear code39--
+% --REQUIRES preamble loadctx unloadctx raiseerror parseinput renlinear code39--
% --DESC: Code 39 Extended
% --EXAM: Code39 Ext!
% --EXOP: includetext includecheck includecheckintext
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp code39ext 0.0 2017040400 71403 71123
-%%BeginData: 110 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp code39ext 0.0 2022082100 71249 70993
+%%BeginData: 109 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
+dup /loadctx dup /uk.co.terryburton.bwipp findresource put
+dup /unloadctx dup /uk.co.terryburton.bwipp findresource put
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /parseinput dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
dup /code39 dup /uk.co.terryburton.bwipp findresource put
begin
@@ -3725,6 +7026,7 @@ begin
/options exch def % We are given an options string
/barcode exch def % We are given the code39extended text
+ /ctx null def
/dontdraw false def
/includetext false def
/parse false def
@@ -3740,26 +7042,17 @@ begin
} if
options {def} forall
+ /code39ext //loadctx exec
+
% Parse ordinals of the form ^NNN to ASCII
- parse {
- /msg barcode length string def
- /j 0 def
- barcode
- { % loop
- (^) search {
- dup msg exch j exch putinterval
- length j add 1 add /j exch def
- pop
- dup 0 3 getinterval cvi msg exch j 1 sub exch put
- dup length 3 sub 3 exch getinterval
- } {
- dup msg exch j exch putinterval
- length j add /j exch def
- /barcode msg 0 j getinterval def
- exit
- } ifelse
- } loop
- } if
+ /fncvals <<
+ /parse parse
+ /parseonly true
+ /parsefnc false
+ >> def
+ /barcode barcode fncvals //parseinput exec def
+ /barlen barcode length def
+ options (parse) undef
% Validate the input
barcode {
@@ -3768,9 +7061,8 @@ begin
} if
} forall
- /barlen barcode length def
-
% Extended alphabet to non-extended alphabet
+{
/extencs
[ (%U) ($A) ($B) ($C) ($D) ($E) ($F) ($G) ($H) ($I) ($J) ($K) ($L) ($M) ($N) ($O)
($P) ($Q) ($R) ($S) ($T) ($U) ($V) ($W) ($X) ($Y) ($Z) (%A) (%B) (%C) (%D) (%E)
@@ -3781,6 +7073,7 @@ begin
(%W) (+A) (+B) (+C) (+D) (+E) (+F) (+G) (+H) (+I) (+J) (+K) (+L) (+M) (+N) (+O)
(+P) (+Q) (+R) (+S) (+T) (+U) (+V) (+W) (+X) (+Y) (+Z) (%P) (%Q) (%R) (%S) (%T)
] def
+} ctxdef
/newcode barlen 2 mul string def
/newtext barlen 2 mul string def
@@ -3816,9 +7109,13 @@ begin
dontdraw not //renlinear if
+ //unloadctx exec
+
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/code39ext dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -3827,15 +7124,15 @@ end
% --END ENCODER code39ext--
% --BEGIN ENCODER code32--
-% --REQUIRES preamble raiseerror renlinear code39--
+% --REQUIRES preamble loadctx unloadctx raiseerror renlinear code39--
% --DESC: Italian Pharmacode
% --EXAM: 01234567
% --EXOP: includetext
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp code32 0.0 2017040400 68684 68425
-%%BeginData: 99 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp code32 0.0 2022082100 63967 67382
+%%BeginData: 102 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
dup /code39 dup /uk.co.terryburton.bwipp findresource put
@@ -3847,9 +7144,10 @@ begin
/options exch def % We are given an options string
/barcode exch def % We are given a barcode string
+ /ctx null def
/dontdraw false def
/includetext false def % Enable/disable code32 text
- /textfont /NimbusMonL-Regu def
+ /textfont /Courier def
/textsize 10 def
/textyoffset -7 def
/textxoffset 0 def
@@ -3900,7 +7198,7 @@ begin
/text exch def
% convert number from base10 to base32
- /val text cvi 32 barcode cvrs def
+ /val text cvi 32 6 string cvrs def
/barcode 6 string def
0 1 5 {barcode exch 48 put} for
barcode 6 val length sub val putinterval
@@ -3929,7 +7227,9 @@ begin
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/code32 dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -3938,15 +7238,15 @@ end
% --END ENCODER code32--
% --BEGIN ENCODER pzn--
-% --REQUIRES preamble raiseerror renlinear code39--
+% --REQUIRES preamble loadctx unloadctx raiseerror renlinear code39--
% --DESC: Pharmazentralnummer (PZN)
% --EXAM: 123456
% --EXOP: includetext
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp pzn 0.0 2017040400 68931 68597
-%%BeginData: 100 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp pzn 0.0 2022082100 64062 67298
+%%BeginData: 103 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
dup /code39 dup /uk.co.terryburton.bwipp findresource put
@@ -3954,19 +7254,20 @@ begin
/pzn {
20 dict begin
-
+
/options exch def % We are given an options string
/barcode exch def % We are given a barcode string
-
+
+ /ctx null def
/dontdraw false def
/includetext false def % Enable/disable code32 text
- /textfont /NimbusMonL-Regu def
+ /textfont /Courier def
/textsize 10 def
/textyoffset -7 def
/textxoffset 0 def
/height 1 def
/pzn8 false def
-
+
% Parse the input options
options type /stringtype eq {
1 dict begin
@@ -3977,7 +7278,7 @@ begin
currentdict end /options exch def
} if
options {def} forall
-
+
/textfont textfont cvlit def
/textsize textsize cvr def
/textyoffset textyoffset cvr def
@@ -4006,8 +7307,8 @@ begin
0 1 msglen 3 sub {
/i exch def
barcode i get 48 sub i pzn8 {1} {2} ifelse add mul
- checksum add /checksum exch def
- } for
+ checksum add /checksum exch def
+ } for
/checksum checksum 11 mod def
checksum 10 eq {
/bwipp.pznBadInputSequence (Incorrect PZN input sequence provided) //raiseerror exec
@@ -4018,30 +7319,32 @@ begin
} if
} if
msglen string
- dup 0 45 put
+ dup 0 45 put
dup 1 barcode putinterval
dup msglen 1 sub checksum 48 add put
/msg exch def
-
+
% Get the result of encoding with code39
options (dontdraw) true put
/args msg options //code39 exec def
-
+
% format HRI
/text msglen 5 add string def
text 0 (PZN - ) putinterval
text 6 msg 1 msglen 1 sub getinterval putinterval
-
+
args (txt) [ [text textxoffset textyoffset textfont textsize] ] put
args (textxalign) (center) put
args (opt) options put
args
-
+
dontdraw not //renlinear if
-
+
end
-
-} bind def
+
+}
+[/barcode] {null def} forall
+bind def
/pzn dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -4050,16 +7353,19 @@ end
% --END ENCODER pzn--
% --BEGIN ENCODER code93--
-% --REQUIRES preamble raiseerror renlinear--
+% --REQUIRES preamble loadctx unloadctx raiseerror parseinput renlinear--
% --DESC: Code 93
% --EXAM: THIS IS CODE 93
% --EXOP: includetext includecheck
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp code93 0.0 2017040400 73201 72985
-%%BeginData: 148 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp code93 0.0 2022082100 68234 71403
+%%BeginData: 144 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
+dup /loadctx dup /uk.co.terryburton.bwipp findresource put
+dup /unloadctx dup /uk.co.terryburton.bwipp findresource put
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /parseinput dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
begin
/code93 {
@@ -4069,15 +7375,17 @@ begin
/options exch def % We are given an option string
/barcode exch def % We are given a barcode string
+ /ctx null def
/dontdraw false def
/includecheck false def % Enable/disable checkdigit
/includetext false def % Enable/disable text
- /textfont /NimbusMonL-Regu def
+ /textfont /Courier def
/textsize 10 def
/textyoffset -7 def
/height 1 def
- /parsefnc false def
-
+ /parse false def
+ /parsefnc false def
+
% Parse the input options
options type /stringtype eq {
1 dict begin
@@ -4088,12 +7396,15 @@ begin
currentdict end /options exch def
} if
options {def} forall
-
+
/textfont textfont cvlit def
/textsize textsize cvr def
/textyoffset textyoffset cvr def
/height height cvr def
-
+
+ /code93 //loadctx exec
+
+{
/encs
[ (131112) (111213) (111312) (111411) (121113)
(121212) (121311) (111114) (131211) (141111)
@@ -4110,35 +7421,19 @@ begin
% Create a string of the available characters
/barchars (0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%) def
- /barlen barcode length def
+ /sft1 -1 def /sft2 -2 def /sft3 -3 def /sft4 -4 def
+} ctxdef
% Special function characters
- /sft1 -1 def /sft2 -2 def /sft3 -3 def /sft4 -4 def
/fncvals <<
+ /parse parse
+ /parsefnc parsefnc
(SFT$) sft1
(SFT%) sft2
(SFT/) sft3
(SFT+) sft4
>> def
-
- % Convert input into bytes accounting for shift characters
- /msg barlen array def
- /i 0 def /j 0 def {
- i barlen eq {exit} if
- /char barcode i get def
- parsefnc char 94 eq and i barlen 4 sub lt and {
- barcode i 1 add get 94 ne {
- /char fncvals barcode i 1 add 4 getinterval get def
- /i i 4 add def
- } {
- /i i 1 add def
- } ifelse
- } if
- msg j char put
- /i i 1 add def
- /j j 1 add def
- } loop
- /msg msg 0 j getinterval def
+ /msg barcode fncvals //parseinput exec def
/msglen msg length def
includecheck {
@@ -4150,12 +7445,12 @@ begin
% Put the start character
sbs 0 encs 47 get putinterval
-
+
/checksum1 0 def /checksum2 0 def
0 1 msglen 1 sub {
/i exch def
% Lookup the encoding for the each barcode character
- msg i get dup 0 lt {
+ msg i get dup 0 lt {
42 exch sub /indx exch def
/char ( ) def
} {
@@ -4182,7 +7477,7 @@ begin
sbs msglen 6 mul 18 add encs 48 get putinterval
} {
% Put the end character
- sbs msglen 6 mul 6 add encs 48 get putinterval
+ sbs msglen 6 mul 6 add encs 48 get putinterval
} ifelse
% Return the arguments
@@ -4199,9 +7494,13 @@ begin
dontdraw not //renlinear if
+ //unloadctx exec
+
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/code93 dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -4210,16 +7509,19 @@ end
% --END ENCODER code93--
% --BEGIN ENCODER code93ext--
-% --REQUIRES preamble raiseerror renlinear code93--
+% --REQUIRES preamble loadctx unloadctx raiseerror parseinput renlinear code93--
% --DESC: Code 93 Extended
% --EXAM: Code93 Ext!
% --EXOP: includetext includecheck
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp code93ext 0.0 2017040400 68324 71604
-%%BeginData: 114 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp code93ext 0.0 2022082100 71471 71350
+%%BeginData: 113 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
+dup /loadctx dup /uk.co.terryburton.bwipp findresource put
+dup /unloadctx dup /uk.co.terryburton.bwipp findresource put
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /parseinput dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
dup /code93 dup /uk.co.terryburton.bwipp findresource put
begin
@@ -4230,6 +7532,7 @@ begin
/options exch def % We are given an options string
/barcode exch def % We are given the code39extended text
+ /ctx null def
/dontdraw false def
/includetext false def
/parse false def
@@ -4245,37 +7548,27 @@ begin
} if
options {def} forall
- % Parse ordinals of the form ^NNN to ASCII
- parse {
- /msg barcode length string def
- /j 0 def
- barcode
- { % loop
- (^) search {
- dup msg exch j exch putinterval
- length j add 1 add /j exch def
- pop
- dup 0 3 getinterval cvi msg exch j 1 sub exch put
- dup length 3 sub 3 exch getinterval
- } {
- dup msg exch j exch putinterval
- length j add /j exch def
- /barcode msg 0 j getinterval def
- exit
- } ifelse
- } loop
- } if
+ /code93ext //loadctx exec
+ % Parse ordinals of the form ^NNN to ASCII
+ /fncvals <<
+ /parse parse
+ /parseonly true
+ /parsefnc false
+ >> def
+ /barcode barcode fncvals //parseinput exec def
/barlen barcode length def
+ options (parse) undef
% Extended alphabet to non-extended alphabet
+{
/extencs
- [ (^SFT%U) (^SFT$A) (^SFT$B) (^SFT$C) (^SFT$D) (^SFT$E) (^SFT$F) (^SFT$G)
+ [ (^SFT%U) (^SFT$A) (^SFT$B) (^SFT$C) (^SFT$D) (^SFT$E) (^SFT$F) (^SFT$G)
(^SFT$H) (^SFT$I) (^SFT$J) (^SFT$K) (^SFT$L) (^SFT$M) (^SFT$N) (^SFT$O)
(^SFT$P) (^SFT$Q) (^SFT$R) (^SFT$S) (^SFT$T) (^SFT$U) (^SFT$V) (^SFT$W)
(^SFT$X) (^SFT$Y) (^SFT$Z) (^SFT%A) (^SFT%B) (^SFT%C) (^SFT%D) (^SFT%E)
- ( ) (^SFT/A) (^SFT/B) (^SFT/C) (^SFT/D) (^SFT/E) (^SFT/F) (^SFT/G)
- (^SFT/H) (^SFT/I) (^SFT/J) (^SFT/K) (^SFT/L) (-) (.) (^SFT/O)
+ ( ) (^SFT/A) (^SFT/B) (^SFT/C) ($) (%) (^SFT/F) (^SFT/G)
+ (^SFT/H) (^SFT/I) (^SFT/J) (+) (^SFT/L) (-) (.) (/)
(0) (1) (2) (3) (4) (5) (6) (7)
(8) (9) (^SFT/Z) (^SFT%F) (^SFT%G) (^SFT%H) (^SFT%I) (^SFT%J)
(^SFT%V) (A) (B) (C) (D) (E) (F) (G)
@@ -4287,6 +7580,7 @@ begin
(^SFT+P) (^SFT+Q) (^SFT+R) (^SFT+S) (^SFT+T) (^SFT+U) (^SFT+V) (^SFT+W)
(^SFT+X) (^SFT+Y) (^SFT+Z) (^SFT%P) (^SFT%Q) (^SFT%R) (^SFT%S) (^SFT%T)
] def
+} ctxdef
/newcode barlen 6 mul string def
/newtext barlen 6 mul string def
@@ -4325,9 +7619,13 @@ begin
dontdraw not //renlinear if
+ //unloadctx exec
+
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/code93ext dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -4336,15 +7634,17 @@ end
% --END ENCODER code93ext--
% --BEGIN ENCODER interleaved2of5--
-% --REQUIRES preamble raiseerror renlinear--
+% --REQUIRES preamble loadctx unloadctx raiseerror renlinear--
% --DESC: Interleaved 2 of 5 (ITF)
% --EXAM: 2401234567
% --EXOP: height=0.5 includecheck includetext includecheckintext
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp interleaved2of5 0.0 2017040400 73301 73185
-%%BeginData: 150 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp interleaved2of5 0.0 2022082100 70795 67054
+%%BeginData: 162 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
+dup /loadctx dup /uk.co.terryburton.bwipp findresource put
+dup /unloadctx dup /uk.co.terryburton.bwipp findresource put
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
begin
@@ -4355,15 +7655,16 @@ begin
/options exch def % We are given an option string
/barcode exch def % We are given a barcode string
+ /ctx null def
/dontdraw false def
/includecheck false def % Enable/disable checkdigit
/includetext false def % Enable/disable text
/includecheckintext false def
- /textfont /NimbusMonL-Regu def
+ /textfont /Courier def
/textsize 10 def
/textyoffset -7 def
/height 1 def
-
+
% Parse the input options
options type /stringtype eq {
1 dict begin
@@ -4374,19 +7675,21 @@ begin
currentdict end /options exch def
} if
options {def} forall
-
+
/textfont textfont cvlit def
/textsize textsize cvr def
/textyoffset textyoffset cvr def
/height height cvr def
+ /interleaved2of5 //loadctx exec
+
% Validate the input
barcode {
dup 48 lt exch 57 gt or {
/bwipp.interleaved2of5badCharacter (Interleaved 2 of 5 must contain only digits) //raiseerror exec
} if
} forall
-
+
/barlen barcode length def % Length of the code
% Prefix 0 to barcode if length is even and including checkdigit
@@ -4420,6 +7723,7 @@ begin
} if
% Create an array containing the character mappings
+{
/encs
[ (11221) (21112) (12112) (22111) (11212)
(21211) (12211) (11122) (21121) (12121)
@@ -4428,6 +7732,8 @@ begin
% Create a string of the available characters
/barchars (0123456789) def
+} ctxdef
+
/sbs barlen 5 mul 8 add string def
/txt barlen array def
@@ -4487,9 +7793,13 @@ begin
dontdraw not //renlinear if
+ //unloadctx exec
+
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/interleaved2of5 dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -4498,15 +7808,15 @@ end
% --END ENCODER interleaved2of5--
% --BEGIN ENCODER itf14--
-% --REQUIRES preamble raiseerror renlinear interleaved2of5--
+% --REQUIRES preamble loadctx unloadctx raiseerror renlinear interleaved2of5--
% --DESC: ITF-14
% --EXAM: 0 46 01234 56789 3
% --EXOP: includetext
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp itf14 0.0 2017040400 68114 71278
-%%BeginData: 109 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp itf14 0.0 2022082100 66573 69883
+%%BeginData: 112 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
dup /interleaved2of5 dup /uk.co.terryburton.bwipp findresource put
@@ -4518,10 +7828,11 @@ begin
/options exch def % We are given an option string
/barcode exch def % We are given a barcode string
+ /ctx null def
/dontdraw false def
/includetext false def
/includecheckintext true def
- /textfont /NimbusMonL-Regu def
+ /textfont /Courier def
/textsize 10 def
/textxoffset 0 def
/textyoffset 3 def
@@ -4530,7 +7841,7 @@ begin
/borderwidth 4 def
/borderleft 15 def
/borderright 15 def
-
+
% Parse the input options
options type /stringtype eq {
1 dict begin
@@ -4546,7 +7857,7 @@ begin
/textsize textsize cvr def
/textxoffset textxoffset cvr def
/textyoffset textyoffset cvr def
- /height height cvr def
+ /height height cvr def
/borderwidth borderwidth cvr def
/borderleft borderleft cvr def
/borderright borderright cvr def
@@ -4605,12 +7916,14 @@ begin
args (textxalign) (center) put
args (opt) options put
args
-
+
dontdraw not //renlinear if
-
+
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/itf14 dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -4619,15 +7932,15 @@ end
% --END ENCODER itf14--
% --BEGIN ENCODER identcode--
-% --REQUIRES preamble raiseerror renlinear interleaved2of5--
+% --REQUIRES preamble loadctx unloadctx raiseerror renlinear interleaved2of5--
% --DESC: Deutsche Post Identcode
% --EXAM: 563102430313
% --EXOP: includetext
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp identcode 0.0 2017040400 64217 67381
-%%BeginData: 91 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp identcode 0.0 2022082100 62988 66378
+%%BeginData: 94 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
dup /interleaved2of5 dup /uk.co.terryburton.bwipp findresource put
@@ -4639,14 +7952,15 @@ begin
/options exch def % We are given an option string
/barcode exch def % We are given a barcode string
+ /ctx null def
/dontdraw false def
/includetext false def % Enable/disable text
- /textfont /NimbusMonL-Regu def
+ /textfont /Courier def
/textsize 10 def
/textxoffset 0 def
/textyoffset -7 def
/height 1 def
-
+
% Parse the input options
options type /stringtype eq {
1 dict begin
@@ -4662,7 +7976,7 @@ begin
/textsize textsize cvr def
/textxoffset textxoffset cvr def
/textyoffset textyoffset cvr def
- /height height cvr def
+ /height height cvr def
% Validate the input
barcode length 11 ne barcode length 12 ne and {
@@ -4679,7 +7993,7 @@ begin
0 1 10 {
/i exch def
/checksum checksum barcode i get 48 sub i 2 mod 0 eq {4 mul} {9 mul} ifelse add def
- } for
+ } for
/checksum 10 checksum 10 mod sub 10 mod def
barcode length 12 eq {
barcode 11 get checksum 48 add ne {
@@ -4708,12 +8022,14 @@ begin
args (textxalign) (center) put
args (opt) options put
args
-
+
dontdraw not //renlinear if
-
+
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/identcode dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -4722,15 +8038,15 @@ end
% --END ENCODER identcode--
% --BEGIN ENCODER leitcode--
-% --REQUIRES preamble raiseerror renlinear interleaved2of5--
+% --REQUIRES preamble loadctx unloadctx raiseerror renlinear interleaved2of5--
% --DESC: Deutsche Post Leitcode
% --EXAM: 21348075016401
% --EXOP: includetext
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp leitcode 0.0 2017040400 64209 67377
-%%BeginData: 91 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp leitcode 0.0 2022082100 62980 66374
+%%BeginData: 94 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
dup /interleaved2of5 dup /uk.co.terryburton.bwipp findresource put
@@ -4742,14 +8058,15 @@ begin
/options exch def % We are given an option string
/barcode exch def % We are given a barcode string
+ /ctx null def
/dontdraw false def
/includetext false def % Enable/disable text
- /textfont /NimbusMonL-Regu def
+ /textfont /Courier def
/textsize 10 def
/textxoffset 0 def
/textyoffset -7 def
/height 1 def
-
+
% Parse the input options
options type /stringtype eq {
1 dict begin
@@ -4765,7 +8082,7 @@ begin
/textsize textsize cvr def
/textxoffset textxoffset cvr def
/textyoffset textyoffset cvr def
- /height height cvr def
+ /height height cvr def
% Validate the input
barcode length 13 ne barcode length 14 ne and {
@@ -4782,7 +8099,7 @@ begin
0 1 12 {
/i exch def
/checksum checksum barcode i get 48 sub i 2 mod 0 eq {4 mul} {9 mul} ifelse add def
- } for
+ } for
/checksum 10 checksum 10 mod sub 10 mod def
barcode length 14 eq {
barcode 13 get checksum 48 add ne {
@@ -4811,12 +8128,14 @@ begin
args (textxalign) (center) put
args (opt) options put
args
-
+
dontdraw not //renlinear if
-
+
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/leitcode dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -4825,15 +8144,17 @@ end
% --END ENCODER leitcode--
% --BEGIN ENCODER databaromni--
-% --REQUIRES preamble raiseerror renlinear renmatrix--
+% --REQUIRES preamble loadctx unloadctx raiseerror renlinear renmatrix--
% --DESC: GS1 DataBar Omnidirectional
% --EXAM: (01)24012345678905
% --EXOP:
% --RNDR: renlinear renmatrix
-%%BeginResource: uk.co.terryburton.bwipp databaromni 0.0 2017040400 131912 137574
-%%BeginData: 420 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp databaromni 0.0 2022082100 115183 110835
+%%BeginData: 436 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+20 dict
+dup /loadctx dup /uk.co.terryburton.bwipp findresource put
+dup /unloadctx dup /uk.co.terryburton.bwipp findresource put
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
@@ -4845,12 +8166,13 @@ begin
/options exch def % We are given an option string
/barcode exch def % We are given a barcode string
+ /ctx null def
/dontdraw false def
/height 33 72 div def
/linkage false def
/format (omni) def
/barxmult 33 def
-
+
% Parse the input options
options type /stringtype eq {
1 dict begin
@@ -4861,11 +8183,13 @@ begin
currentdict end /options exch def
} if
options {def} forall
-
+
format (truncated) eq {/height 13 72 div def} if
/height height cvr def
/barxmult barxmult cvi def
+ /databaromni //loadctx exec
+
% Validate the input
barcode 0 4 getinterval (\(01\)) ne {
/bwipp.databaromniBadAI (GS1 DataBar Omnidirectional must begin with (01) application identifier) //raiseerror exec
@@ -4917,8 +8241,8 @@ begin
1 index idiv exch 1 add exch
} loop
exch pop exch pop
- } bind def
-
+ } def
+
/getRSSwidths {
/oe exch def
/el exch def
@@ -4929,7 +8253,7 @@ begin
/mask 0 def
0 1 el 2 sub {
/bar exch def
- /ew 1 def
+ /ew 1 def
/mask mask 1 bar bitshift or def {
/sval nm ew sub 1 sub el bar sub 2 sub ncr def
oe mask 0 eq and nm ew sub el 2 mul sub bar 2 mul add -2 ge and {
@@ -4949,20 +8273,20 @@ begin
val 0 lt {exit} if
/ew ew 1 add def
/mask mask 1 bar bitshift not and def
- } loop
+ } loop
/val val sval add def
/nm nm ew sub def
- out bar ew put
+ out bar ew put
} for
out el 1 sub nm put
out
- } bind def
-
- /binval [
+ } def
+
+ /binval [
linkage {1} {0} ifelse
barcode 4 13 getinterval {48 sub} forall
] def
-
+
0 1 12 {
/i exch def
binval i 1 add 2 copy get binval i get 4537077 mod 10 mul add put
@@ -4983,12 +8307,13 @@ begin
/left left 3 -1 roll 10 13 j sub exp cvi mul add def
} ifelse
} for
-
+
/d1 left 1597 idiv def
/d2 left 1597 mod def
/d3 right 1597 idiv def
/d4 right 1597 mod def
+{
/tab164 [
160 0 12 4 8 1 161 1
960 161 10 6 6 3 80 10
@@ -5003,6 +8328,7 @@ begin
1515 1036 9 6 6 3 48 10
1596 1516 11 4 8 1 81 1
] def
+} ctxdef
/i 0 def {
d1 tab164 i get le {
@@ -5051,7 +8377,7 @@ begin
} if
/i i 8 add def
} loop
-
+
/d1wo d1 d1gs sub d1te idiv d1elo d1mwo 4 false getRSSwidths def
/d1we d1 d1gs sub d1te mod d1ele d1mwe 4 true getRSSwidths def
/d2wo d2 d2gs sub d2to mod d2elo d2mwo 4 true getRSSwidths def
@@ -5074,14 +8400,14 @@ begin
d2w 7 i 2 mul sub d2wo i get put
d2w 6 i 2 mul sub d2we i get put
} for
-
+
/d3w 8 array def
0 1 3 {
/i exch def
d3w 7 i 2 mul sub d3wo i get put
d3w 6 i 2 mul sub d3we i get put
} for
-
+
/d4w 8 array def
0 1 3 {
/i exch def
@@ -5095,7 +8421,8 @@ begin
d3w {} forall
d4w {} forall
] def
-
+
+{
/checkweights [
1 3 9 27 2 6 18 54
58 72 24 8 29 36 12 4
@@ -5108,13 +8435,14 @@ begin
3 1 9 1 1 2 7 4 1 1 2 5 6 1 1
2 3 8 1 1 1 5 7 1 1 1 3 9 1 1
] def
-
+} ctxdef
+
/checksum 0 def
0 1 31 {
/i exch def
- /checksum checksum widths i get checkweights i get mul add def
+ /checksum checksum widths i get checkweights i get mul add def
} for
- /checksum checksum 79 mod def
+ /checksum checksum 79 mod def
checksum 8 ge {/checksum checksum 1 add def} if
checksum 72 ge {/checksum checksum 1 add def} if
/checklt checkwidths checksum 9 idiv 5 mul 5 getinterval def
@@ -5129,10 +8457,10 @@ begin
format (omni) eq format (truncated) eq or { % linear
/sbs [
- 1 d1w {} forall checklt {} forall d2w {} forall
+ 1 d1w {} forall checklt {} forall d2w {} forall
d4w {} forall checkrt {} forall d3w {} forall 1 1
] def
-
+
<<
/ren //renlinear
/sbs sbs
@@ -5142,19 +8470,19 @@ begin
/textxalign (center)
/opt options
>>
-
+
dontdraw not //renlinear if
} { % 2D - stacked or stackedomni
/top [ 1 1 d1w {} forall checklt {} forall d2w {} forall 1 1 0 ] def
- /bot [ 1 1 d4w {} forall checkrt {} forall d3w {} forall 1 1 0 ] def
+ /bot [ 1 1 d4w {} forall checkrt {} forall d3w {} forall 1 1 0 ] def
0 2 24 {
/i exch def
top i get {0} repeat
top i 1 add get {1} repeat
} for
- 50 array astore /top exch def
+ 50 array astore /top exch def
0 2 24 {
/i exch def
bot i get {1} repeat
@@ -5164,8 +8492,9 @@ begin
% Stacked
format (stacked) eq {
- /sep [ 50 {0} repeat ] def
- 4 1 45 {
+ /sep 50 array def
+ sep 0 0 put
+ 1 1 49 {
/i exch def
top i get bot i get eq {
sep i 1 top i get sub put
@@ -5173,6 +8502,8 @@ begin
sep i 1 sep i 1 sub get sub put
} ifelse
} for
+ sep 0 [ 0 0 0 0 ] putinterval
+ sep 46 [ 0 0 0 0 ] putinterval
/pixs [
5 {top aload pop} repeat
sep aload pop
@@ -5180,7 +8511,7 @@ begin
] def
/pixy pixs length 50 idiv def
} if
-
+
% Stacked omnidirectional
format (stackedomni) eq {
/sep1 [ top {1 exch sub} forall ] def
@@ -5230,7 +8561,7 @@ begin
] def
/pixy pixs length 50 idiv def
} if
-
+
% Return the arguments
<<
/ren //renmatrix
@@ -5241,14 +8572,18 @@ begin
/width 50 72 div
/opt options
>>
-
+
dontdraw not //renmatrix if
-
+
} ifelse
-
+
+ //unloadctx exec
+
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/databaromni dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -5257,15 +8592,15 @@ end
% --END ENCODER databaromni--
% --BEGIN ENCODER databarstacked--
-% --REQUIRES preamble raiseerror renlinear renmatrix databaromni--
+% --REQUIRES preamble loadctx unloadctx raiseerror renlinear renmatrix databaromni--
% --DESC: GS1 DataBar Stacked
% --EXAM: (01)24012345678905
% --EXOP:
% --RNDR: renmatrix
-%%BeginResource: uk.co.terryburton.bwipp databarstacked 0.0 2017040400 71113 67516
-%%BeginData: 73 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp databarstacked 0.0 2022082100 67310 63705
+%%BeginData: 76 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
dup /databaromni dup /uk.co.terryburton.bwipp findresource put
@@ -5277,6 +8612,7 @@ begin
/options exch def % We are given an option string
/barcode exch def % We are given a barcode string
+ /ctx null def
/dontdraw false def
% Parse the input options
@@ -5328,12 +8664,14 @@ begin
args (opt) options put
args
-
+
dontdraw not //renmatrix if
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/databarstacked dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -5342,15 +8680,15 @@ end
% --END ENCODER databarstacked--
% --BEGIN ENCODER databarstackedomni--
-% --REQUIRES preamble raiseerror renlinear renmatrix databaromni--
+% --REQUIRES preamble loadctx unloadctx raiseerror renlinear renmatrix databaromni--
% --DESC: GS1 DataBar Stacked Omnidirectional
% --EXAM: (01)24012345678905
% --EXOP:
% --RNDR: renmatrix
-%%BeginResource: uk.co.terryburton.bwipp databarstackedomni 0.0 2017040400 71213 67596
-%%BeginData: 73 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp databarstackedomni 0.0 2022082100 67410 63785
+%%BeginData: 76 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
dup /databaromni dup /uk.co.terryburton.bwipp findresource put
@@ -5362,6 +8700,7 @@ begin
/options exch def % We are given an option string
/barcode exch def % We are given a barcode string
+ /ctx null def
/dontdraw false def
% Parse the input options
@@ -5413,12 +8752,14 @@ begin
args (opt) options put
args
-
+
dontdraw not //renmatrix if
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/databarstackedomni dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -5427,15 +8768,15 @@ end
% --END ENCODER databarstackedomni--
% --BEGIN ENCODER databartruncated--
-% --REQUIRES preamble raiseerror renlinear renmatrix databaromni--
+% --REQUIRES preamble loadctx unloadctx raiseerror renlinear renmatrix databaromni--
% --DESC: GS1 DataBar Truncated
% --EXAM: (01)24012345678905
% --EXOP:
% --RNDR: renlinear renmatrix
-%%BeginResource: uk.co.terryburton.bwipp databartruncated 0.0 2017040400 71139 67532
-%%BeginData: 73 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp databartruncated 0.0 2022082100 67336 63721
+%%BeginData: 76 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
dup /databaromni dup /uk.co.terryburton.bwipp findresource put
@@ -5447,6 +8788,7 @@ begin
/options exch def % We are given an option string
/barcode exch def % We are given a barcode string
+ /ctx null def
/dontdraw false def
% Parse the input options
@@ -5498,12 +8840,14 @@ begin
args (opt) options put
args
-
+
dontdraw not //renlinear if
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/databartruncated dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -5512,15 +8856,17 @@ end
% --END ENCODER databartruncated--
% --BEGIN ENCODER databarlimited--
-% --REQUIRES preamble raiseerror renlinear--
+% --REQUIRES preamble loadctx unloadctx raiseerror renlinear--
% --DESC: GS1 DataBar Limited
% --EXAM: (01)15012345678907
% --EXOP:
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp databarlimited 0.0 2017040400 96545 95706
-%%BeginData: 276 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp databarlimited 0.0 2022082100 90886 86535
+%%BeginData: 291 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+20 dict
+dup /loadctx dup /uk.co.terryburton.bwipp findresource put
+dup /unloadctx dup /uk.co.terryburton.bwipp findresource put
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
begin
@@ -5531,6 +8877,7 @@ begin
/options exch def % We are given an option string
/barcode exch def % We are given a barcode string
+ /ctx null def
/dontdraw false def
/height 10 72 div def
/linkage false def
@@ -5545,9 +8892,11 @@ begin
currentdict end /options exch def
} if
options {def} forall
-
+
/height height cvr def
+ /databarlimited //loadctx exec
+
% Validate the input
barcode 0 4 getinterval (\(01\)) ne {
/bwipp.databarlimitedBadAI (GS1 DataBar Limited must begin with (01) application identifier) //raiseerror exec
@@ -5573,7 +8922,7 @@ begin
/checksum 10 checksum 10 mod sub 10 mod def
barcode length 18 eq {
barcode 17 get checksum 48 add ne {
- /bwipp.databaromniBadCheckDigit (Incorrect GS1 DataBar Limited check digit provided) //raiseerror exec
+ /bwipp.databarlimitedBadCheckDigit (Incorrect GS1 DataBar Limited check digit provided) //raiseerror exec
} if
} if
18 string
@@ -5582,16 +8931,18 @@ begin
/barcode exch def
% Strip the AI and optional check digit
- /binval [
+{
+ /linkval [ 2 0 1 5 1 3 3 5 3 1 0 9 6 ] def
+} ctxdef
+ /binval [
barcode 4 13 getinterval {48 sub} forall
] def
linkage {
- /linkval [ 2 0 1 5 1 3 3 5 3 1 0 9 6 ] def
0 1 binval length 1 sub {
/i exch def
binval i binval i get linkval i get add put
} for
- } if
+ } if
% Create the human readable text
/txt barcode length array def
@@ -5614,8 +8965,8 @@ begin
1 index idiv exch 1 add exch
} loop
exch pop exch pop
- } bind def
-
+ } def
+
/getRSSwidths {
/oe exch def
/el exch def
@@ -5626,7 +8977,7 @@ begin
/mask 0 def
0 1 el 2 sub {
/bar exch def
- /ew 1 def
+ /ew 1 def
/mask mask 1 bar bitshift or def {
/sval nm ew sub 1 sub el bar sub 2 sub ncr def
oe mask 0 eq and nm ew sub el 2 mul sub bar 2 mul add -2 ge and {
@@ -5646,15 +8997,15 @@ begin
val 0 lt {exit} if
/ew ew 1 add def
/mask mask 1 bar bitshift not and def
- } loop
+ } loop
/val val sval add def
/nm nm ew sub def
- out bar ew put
+ out bar ew put
} for
out el 1 sub nm put
out
- } bind def
-
+ } def
+
0 1 11 {
/i exch def
binval i 1 add 2 copy get binval i get 2013571 mod 10 mul add put
@@ -5675,7 +9026,8 @@ begin
/d1 d1 3 -1 roll 10 12 j sub exp cvi mul add def
} ifelse
} for
-
+
+{
/tab267 [
183063 0 17 9 6 3 6538 28
820063 183064 13 13 5 4 875 728
@@ -5685,6 +9037,7 @@ begin
1996938 1979845 19 7 8 1 17094 1
2013570 1996939 7 19 1 8 1 16632
] def
+} ctxdef
/i 0 def {
d1 tab267 i get le {
@@ -5710,9 +9063,9 @@ begin
/i i 8 add def
} loop
- /d1wo d1 d1gs sub d1te idiv d1elo d1mwo 7 false getRSSwidths def
+ /d1wo d1 d1gs sub d1te idiv d1elo d1mwo 7 false getRSSwidths def
/d1we d1 d1gs sub d1te mod d1ele d1mwe 7 true getRSSwidths def
- /d2wo d2 d2gs sub d2te idiv d2elo d2mwo 7 false getRSSwidths def
+ /d2wo d2 d2gs sub d2te idiv d2elo d2mwo 7 false getRSSwidths def
/d2we d2 d2gs sub d2te mod d2ele d2mwe 7 true getRSSwidths def
/d1w 14 array def
@@ -5733,7 +9086,8 @@ begin
d1w {} forall
d2w {} forall
] def
-
+
+{
/checkweights [
1 3 9 27 81 65 17 51 64 14 42 37 22 66
20 60 2 6 18 54 73 41 34 13 39 28 84 74
@@ -5754,7 +9108,8 @@ begin
322 323
326 337
] def
-
+} ctxdef
+
/checksum 0 def
0 1 27 {
/i exch def
@@ -5771,11 +9126,11 @@ begin
checkwidths i 2 mul swidths i get put
checkwidths i 2 mul 1 add bwidths i get put
} for
-
+
/sbs [
- 1 d1w {} forall checkwidths {} forall d2w {} forall 1 1
+ 1 d1w {} forall checkwidths {} forall d2w {} forall 1 1 5
] def
-
+
% Return the arguments
<<
/ren //renlinear
@@ -5789,9 +9144,13 @@ begin
dontdraw not //renlinear if
+ //unloadctx exec
+
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/databarlimited dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -5800,16 +9159,19 @@ end
% --END ENCODER databarlimited--
% --BEGIN ENCODER databarexpanded--
-% --REQUIRES preamble raiseerror renlinear renmatrix--
+% --REQUIRES preamble loadctx unloadctx raiseerror parseinput gs1process renlinear renmatrix--
% --DESC: GS1 DataBar Expanded
% --EXAM: (01)95012345678903(3103)000123
% --EXOP:
% --RNDR: renlinear renmatrix
-%%BeginResource: uk.co.terryburton.bwipp databarexpanded 0.0 2017040400 245708 247229
-%%BeginData: 880 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp databarexpanded 0.0 2022082100 246206 245007
+%%BeginData: 863 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
+dup /loadctx dup /uk.co.terryburton.bwipp findresource put
+dup /unloadctx dup /uk.co.terryburton.bwipp findresource put
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /gs1process dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
begin
@@ -5820,13 +9182,17 @@ begin
/options exch def % We are given an option string
/barcode exch def % We are given a barcode string
+ /ctx null def
+ /parse false def
+ /dontlint false def
+ /lintreqs true def
/dontdraw false def
/height 34 72 div def
/format (expanded) def
/segments -1 def
- /linkage false def
+ /linkage false def
/barxmult 34 def
-
+
% Parse the input options
options type /stringtype eq {
1 dict begin
@@ -5837,54 +9203,25 @@ begin
currentdict end /options exch def
} if
options {def} forall
-
+
/height height cvr def
/segments segments cvi def
/barxmult barxmult cvi def
+ /databarexpanded //loadctx exec
+
segments -1 eq {
/segments format (expandedstacked) eq {4} {22} ifelse def
- } if
+ } {
+ segments 2 lt segments 22 gt or segments 2 mod 0 ne or {
+ /bwipp.gs1databarexpandedBadSegments (The number of segments must be even from 2 to 22) //raiseerror exec
+ } if
+ } ifelse
- % Expand ordinals of the form ^NNN to ASCII
- /expand {
- /in exch def
- /out in length string def
- /j 0 def
- in
- { % loop
- (^) search {
- dup out exch j exch putinterval
- length j add 1 add /j exch def
- pop
- dup 0 3 getinterval cvi out exch j 1 sub exch put
- dup length 3 sub 3 exch getinterval
- } {
- dup out exch j exch putinterval
- length j add /j exch def
- out 0 j getinterval exit
- } ifelse
- } loop
- } bind def
-
- % Parse out AIs
- /ais [] def
- /vals [] def
- barcode dup length 1 sub 1 exch getinterval
- { % loop
- dup () eq {exit} if
- (\)) search pop
- exch pop
- exch (\() search {
- exch pop exch 3 1 roll
- } {
- () 3 1 roll
- } ifelse
- [ ais aload pop counttomark 2 add index ] /ais exch def
- [ vals aload pop counttomark 1 add index expand ] /vals exch def
- pop pop
- } loop
- pop
+ barcode /ai //gs1process exec
+ /fncs exch def
+ /vals exch def
+ /ais exch def
% Method selection
{ % common exit
@@ -5897,7 +9234,7 @@ begin
} if
} if
} if
-
+
% (01)9...(3202)...
ais length 2 eq {
ais 0 get (01) eq ais 1 get (3202) eq and {
@@ -5906,7 +9243,7 @@ begin
} if
} if
} if
-
+
% (01)9...(3203)...
ais length 2 eq {
ais 0 get (01) eq ais 1 get (3203) eq and {
@@ -5915,7 +9252,7 @@ begin
} if
} if
} if
-
+
% (01)9...(310x/320x)...[(11/13/15/17)...]
ais length dup 2 eq exch 3 eq or {
/ai310x false 3100 1 3109 {10 4 string cvrs ais 1 get eq or} for def
@@ -5929,7 +9266,8 @@ begin
ais length 3 eq {
vals 0 get 0 1 getinterval (9) eq
vals 1 get cvi 99999 le and
- vals 2 cvi 999999 le and {
+ vals 2 get 2 2 getinterval cvi dup 1 ge exch 12 le and and % Month 1-12
+ vals 2 get 4 2 getinterval cvi dup 0 ge exch 31 le and and { % Day 0-31
ai310x ais 2 get (11) eq and { (0111000) false exit } if
ai320x ais 2 get (11) eq and { (0111001) false exit } if
ai310x ais 2 get (13) eq and { (0111010) false exit } if
@@ -5948,7 +9286,7 @@ begin
} ifelse
} if
} if
-
+
% (01)9...(392x)...
ais length 2 ge {
/ai392x false 3920 1 3923 {10 4 string cvrs ais 1 get eq or} for def
@@ -5956,7 +9294,7 @@ begin
vals 0 get 0 1 getinterval (9) eq { (01100) true exit } if
} if
} if
-
+
% (01)9...(393x)...
ais length 2 ge {
/ai393x false 3930 1 3933 {10 4 string cvrs ais 1 get eq or} for def
@@ -5964,17 +9302,17 @@ begin
vals 0 get 0 1 getinterval (9) eq { (01101) true exit } if
} if
} if
-
+
% (01)...
ais 0 get (01) eq { (1) true exit } if
-
+
% Freeform
(00) true exit
-
+
} loop
/gpfallow exch def
/method exch def
-
+
/conv12to40 {
(0000000000000000000000000000000000000000) 40 string copy
2 copy 0 10 getinterval exch 0 3 getinterval cvi 2 10 string cvrs dup length 10 exch sub exch putinterval
@@ -5982,32 +9320,35 @@ begin
2 copy 20 10 getinterval exch 6 3 getinterval cvi 2 10 string cvrs dup length 10 exch sub exch putinterval
2 copy 30 10 getinterval exch 9 3 getinterval cvi 2 10 string cvrs dup length 10 exch sub exch putinterval
exch pop
- } bind def
-
+ } def
+
/conv13to44 {
(00000000000000000000000000000000000000000000) 44 string copy
2 copy 0 4 getinterval exch 0 1 getinterval cvi 2 4 string cvrs dup length 4 exch sub exch putinterval
dup 3 -1 roll 1 12 getinterval conv12to40 4 exch putinterval
- } bind def
-
+ } def
+
/tobin {
string dup length 1 sub 0 exch 1 exch {1 index exch 48 put} for
- dup 3 -1 roll 2 2 index length string cvrs dup length 2 index length exch sub exch putinterval
- } bind def
-
+ dup 3 -1 roll 2 2 index length string cvrs dup length 2 index length exch sub exch putinterval
+ } def
+
+ /fnc1 -1 def /lnumeric -2 def /lalphanumeric -3 def /liso646 -4 def
+
method (00) eq {
/cdf [] def
/gpf [] def
} if
-
+
method (1) eq {
/cdf vals 0 get 0 13 getinterval conv13to44 def
/cdf [ cdf {48 sub} forall ] def
/gpf [] def
/ais ais 1 ais length 1 sub getinterval def
/vals vals 1 vals length 1 sub getinterval def
+ /fncs fncs 1 fncs length 1 sub getinterval def
} if
-
+
method (0100) eq {
/cdf 55 string def
cdf 0 vals 0 get 1 12 getinterval conv12to40 putinterval
@@ -6016,8 +9357,9 @@ begin
/gpf [] def
/ais [] def
/vals [] def
+ /fncs [] def
} if
-
+
method (0101) eq {
/cdf 55 string def
cdf 0 vals 0 get 1 12 getinterval conv12to40 putinterval
@@ -6031,8 +9373,9 @@ begin
/gpf [] def
/ais [] def
/vals [] def
+ /fncs [] def
} if
-
+
method length 7 eq {
/cdf 76 string def
cdf 0 vals 0 get 1 12 getinterval conv12to40 putinterval
@@ -6052,29 +9395,32 @@ begin
/gpf [] def
/ais [] def
/vals [] def
+ /fncs [] def
} if
-
+
method (01100) eq {
/cdf 42 string def
cdf 0 vals 0 get 1 12 getinterval conv12to40 putinterval
cdf 40 ais 1 get 3 1 getinterval cvi 2 tobin putinterval
/cdf [ cdf {48 sub} forall ] def
- /gpf [ vals 1 get {} forall ] def
+ /gpf [ vals 1 get {} forall ais length 2 gt { fnc1 } if ] def
/ais ais 2 ais length 2 sub getinterval def
/vals vals 2 vals length 2 sub getinterval def
+ /fncs fncs 2 fncs length 2 sub getinterval def
} if
-
+
method (01101) eq {
/cdf 52 string def
cdf 0 vals 0 get 1 12 getinterval conv12to40 putinterval
cdf 40 ais 1 get 3 1 getinterval cvi 2 tobin putinterval
cdf 42 vals 1 get 0 3 getinterval cvi 10 tobin putinterval
/cdf [ cdf {48 sub} forall ] def
- /gpf [ vals 1 get dup length 3 sub 3 exch getinterval {} forall ] def
+ /gpf [ vals 1 get dup length 3 sub 3 exch getinterval {} forall ais length 2 gt { fnc1 } if ] def
/ais ais 2 ais length 2 sub getinterval def
/vals vals 2 vals length 2 sub getinterval def
+ /fncs fncs 2 fncs length 2 sub getinterval def
} if
-
+
% Variable length symbol field
gpfallow {
/vlf 2 array def
@@ -6082,39 +9428,20 @@ begin
/vlf [] def
} ifelse
- % Pre-defined fixed length data field AIs
- % any AI whose prefix is not included in this table must be
- % terminated with "FNC1", even if it's fixed length
- /aifixed 23 dict def
- [
- 0 1 4 {} for
- ] {
- (00) 2 string copy dup dup 1 5 -1 roll 48 add put aifixed 3 1 roll put
- } forall
- [
- 11 1 20 {} for
- 23
- 31 1 36 {} for
- 41
- ] {
- 10 2 string cvrs dup aifixed 3 1 roll put
- } forall
-
- /fnc1 -1 def /lnumeric -2 def /lalphanumeric -3 def /liso646 -4 def
-
+{
/numeric <<
0 1 119 {
dup (00) 2 string copy dup 3 -1 roll 11 2 string cvrs
- dup length 2 exch sub exch putinterval
- dup 0 get 65 eq {dup 0 94 put} if
- dup 1 get 65 eq {dup 1 94 put} if
+ dup length 2 exch sub exch putinterval
+ dup 0 get 65 eq {dup 0 94 put} if
+ dup 1 get 65 eq {dup 1 94 put} if
exch 8 add
- (0000000) 7 string copy dup 3 -1 roll 2 7 string cvrs
+ (0000000) 7 string copy dup 3 -1 roll 2 7 string cvrs
dup length 7 exch sub exch putinterval
} for
lalphanumeric (0000)
>> def
-
+
/alphanumeric <<
48 1 57 {dup 43 sub 5 tobin} for
fnc1 (01111)
@@ -6124,7 +9451,7 @@ begin
lnumeric (000)
liso646 (00100)
>> def
-
+
/iso646 <<
48 1 57 {dup 43 sub 5 tobin} for
fnc1 (01111)
@@ -6139,7 +9466,8 @@ begin
lnumeric (000)
lalphanumeric (00100)
>> def
-
+} ctxdef
+
% Append the remaining AI data
0 1 ais length 1 sub {
/i exch def
@@ -6150,7 +9478,7 @@ begin
dup gpf length ai [ exch {} forall ] putinterval
dup gpf length ai length add val [ exch {} forall ] putinterval
/gpf exch def
- i ais length 1 sub ne aifixed ai 0 2 getinterval known not and { % Append FNC1
+ i ais length 1 sub ne fncs i get and { % Append FNC1
gpf length 1 add array
dup 0 gpf putinterval
dup gpf length fnc1 put
@@ -6161,24 +9489,24 @@ begin
% Calculate the number of bits remaining to the next valid symbol size
/rembits {
dup
- 12 div ceiling cvi 12 mul % Round up to multiple of 12
+ 12 div ceiling cvi 12 mul % Round up to multiple of 12
48 2 copy lt {exch} if pop % At least 4 symbols
dup 12 idiv dup segments mod 1 eq { % At least 2 symbols on last row of stacked symbol
1 add 12 mul exch pop
} {
pop
- } ifelse
+ } ifelse
exch sub
- } bind def
-
+ } def
+
/encode {
dup /raw ne {exch get} {pop} ifelse
[ exch {48 sub} forall ]
dup length exch
gpfenc exch j exch putinterval
/j exch j add def
- } bind def
-
+ } def
+
% Pre-compute alphanumeric and numeric runlengths and position of next ISO646-only characters
/numericruns [ gpf length {0} repeat 0 -1 ] def
/alphanumericruns [ gpf length {0} repeat 0 ] def
@@ -6187,7 +9515,7 @@ begin
/i exch def
gpf i get
(00) 2 string copy
- dup 0 gpf i get dup fnc1 eq {pop 94} if put
+ dup 0 gpf i get dup fnc1 eq {pop 94} if put
i gpf length 1 sub lt {dup 1 gpf i 1 add get dup fnc1 eq {pop 94} if put} if
numeric exch known {
numericruns i numericruns i 2 add get 2 add put
@@ -6205,17 +9533,17 @@ begin
nextiso646only i nextiso646only i 1 add get 1 add put
} ifelse
} for
-
+
% Encode the general purpose field
/gpfenc 252 array def
/i 0 def /j 0 def /mode (numeric) def
{ % loop
i gpf length eq {exit} if
{ % not a loop but common exit point
-
+
mode (numeric) eq {
i gpf length 2 sub le {
- 2 string
+ 2 string
dup 0 gpf i get dup fnc1 eq {pop 94} if put
dup 1 gpf i 1 add get dup fnc1 eq {pop 94} if put
dup numeric exch known {
@@ -6224,7 +9552,7 @@ begin
exit
} if
pop
- lalphanumeric numeric encode
+ lalphanumeric numeric encode
/mode (alphanumeric) def
exit
} {
@@ -6241,13 +9569,13 @@ begin
/i i 1 add def
exit
} { % C1.FNC1
- 2 string dup 0 gpf i get put dup 1 94 put numeric encode
+ 2 string dup 0 gpf i get put dup 1 94 put numeric encode
/i i 1 add def
exit
} ifelse
} ifelse
} if
-
+
mode (alphanumeric) eq {
gpf i get fnc1 eq {
fnc1 alphanumeric encode
@@ -6274,7 +9602,7 @@ begin
/i i 1 add def
exit
} if
-
+
mode (iso646) eq {
gpf i get fnc1 eq {
fnc1 iso646 encode
@@ -6296,13 +9624,13 @@ begin
/i i 1 add def
exit
} if
-
+
} loop
} loop
/gpf gpfenc 0 j getinterval def
% Complete the variable length field and create pad
- 1 12 add method length add vlf length add cdf length add gpf length add
+ 1 12 add method length add vlf length add cdf length add gpf length add
dup rembits dup array /pad exch def
vlf length 0 ne {
add 12 idiv
@@ -6314,16 +9642,16 @@ begin
pad length 0 gt {
0 5 pad length 1 sub { % Fill with 00100
/i exch def
- pad i [ 0 0 1 0 0 ] 0 pad length i sub 5 2 copy gt {exch} if pop getinterval putinterval
- } for
+ pad i [ 0 0 1 0 0 ] 0 pad length i sub 5 2 copy gt {exch} if pop getinterval putinterval
+ } for
mode (numeric) eq { % Prefix shift from numeric to ASCII
/pad [ 0 0 0 0 pad aload pop ] 0 pad length getinterval def
} if
} if
-
- % Concatinate fields
+
+ % Concatenate fields
/binval [
- linkage {1} {0} ifelse
+ linkage {1} {0} ifelse
method {48 sub} forall
vlf aload pop
cdf aload pop
@@ -6331,7 +9659,7 @@ begin
pad aload pop
] def
/datalen binval length 12 idiv def
-
+
/ncr { % n r
2 copy sub 2 copy lt {exch} if % n r maxd mind
1 1 5 3 roll % mind j=1 v=1 n maxd
@@ -6346,8 +9674,8 @@ begin
1 index idiv exch 1 add exch
} loop
exch pop exch pop
- } bind def
-
+ } def
+
/getRSSwidths {
/oe exch def
/el exch def
@@ -6358,7 +9686,7 @@ begin
/mask 0 def
0 1 el 2 sub {
/bar exch def
- /ew 1 def
+ /ew 1 def
/mask mask 1 bar bitshift or def {
/sval nm ew sub 1 sub el bar sub 2 sub ncr def
oe mask 0 eq and nm ew sub el 2 mul sub bar 2 mul add -2 ge and {
@@ -6378,15 +9706,16 @@ begin
val 0 lt {exit} if
/ew ew 1 add def
/mask mask 1 bar bitshift not and def
- } loop
+ } loop
/val val sval add def
/nm nm ew sub def
- out bar ew put
+ out bar ew put
} for
out el 1 sub nm put
out
- } bind def
+ } def
+{
/tab174 [
347 0 12 5 7 2 87 4
1387 348 10 7 5 4 52 20
@@ -6394,9 +9723,10 @@ begin
3987 2948 6 11 3 6 10 104
4191 3988 4 13 1 8 1 204
] def
+} ctxdef
/dxw datalen array def
-
+
0 1 datalen 1 sub {
/x exch def
@@ -6419,14 +9749,14 @@ begin
/dwo d dgs sub dte idiv delo dmwo 4 true getRSSwidths def
/dwe d dgs sub dte mod dele dmwe 4 false getRSSwidths def
- /dw 8 array def
- x 2 mod 0 eq {
+ /dw 8 array def
+ x 2 mod 0 eq {
0 1 3 {
/j exch def
dw 7 j 2 mul sub dwo j get put
dw 6 j 2 mul sub dwe j get put
} for
- } {
+ } {
0 1 3 {
/j exch def
dw j 2 mul dwo j get put
@@ -6437,7 +9767,8 @@ begin
dxw x dw put
} for
-
+
+{
/finderwidths [
1 8 4 1 1 1 1 4 8 1
3 6 4 1 1 1 1 4 6 3
@@ -6459,6 +9790,7 @@ begin
[0 1 2 3 4 5 6 9 10 11]
[0 1 2 3 4 7 6 9 8 11 10]
] def
+} ctxdef
/seq finderseq datalen 2 sub 2 idiv get def
/fxw seq length array def
@@ -6467,12 +9799,13 @@ begin
fxw x finderwidths seq x get 5 mul 5 getinterval put
} for
+{
/checkweights [
-1 -1 -1 -1 -1 -1 -1 -1 % A1L
77 96 32 81 27 9 3 1 % A1R
20 60 180 118 143 7 21 63 % A2L
205 209 140 117 39 13 145 189 % A2R
- 193 157 49 147 19 57 171 91 % B1L
+ 193 157 49 147 19 57 171 91 % B1L
132 44 85 169 197 136 186 62 % B1R
185 133 188 142 4 12 36 108 % B2L
50 87 29 80 97 173 128 113 % B2R
@@ -6493,6 +9826,7 @@ begin
55 165 73 8 24 72 5 15 % F2L
89 100 174 58 160 194 135 45 % F2R
] def
+} ctxdef
/checkweightseq [
seq {16 mul checkweights exch 16 getinterval aload pop} forall
@@ -6501,11 +9835,11 @@ begin
/widths [
dxw {{} forall} forall
] def
-
+
/checksum 0 def
0 1 widths length 1 sub {
/i exch def
- /checksum checksum widths i get checkweightseq i get mul add def
+ /checksum checksum widths i get checkweightseq i get mul add def
} for
/checksum checksum 211 mod datalen 3 sub 211 mul add def
@@ -6524,7 +9858,7 @@ begin
/cwo checksum cgs sub cte idiv celo cmwo 4 true getRSSwidths def
/cwe checksum cgs sub cte mod cele cmwe 4 false getRSSwidths def
- /cw 8 array def
+ /cw 8 array def
0 1 3 {
/i exch def
cw i 2 mul cwo i get put
@@ -6547,7 +9881,7 @@ begin
0 1 segments 1 sub {
/pos exch r segments mul add def
pos datalen lt {
- dxw pos get {} forall
+ dxw pos get {} forall
pos 2 mod 0 eq {fxw pos 2 idiv get {} forall} if
} if
} for
@@ -6570,6 +9904,8 @@ begin
1 1
] def
+ options (parse) undef
+
<<
/ren //renlinear
/sbs sbs
@@ -6599,12 +9935,10 @@ begin
% Derive the separator pattern
/sep [ row {1 exch sub} forall ] def
- sep 0 [ 0 0 0 0 ] putinterval
- sep row length 4 sub [ 0 0 0 0 ] putinterval
/finderpos [ % Finder pattern module positions
19 98 row length 13 sub {} for
68 98 row length 13 sub {} for
- ] def
+ ] def
finderpos {
dup 14 add 1 exch {
/i exch def
@@ -6620,6 +9954,8 @@ begin
sep exch i exch put
} for
} forall
+ sep 0 [ 0 0 0 0 ] putinterval
+ sep row length 4 sub [ 0 0 0 0 ] putinterval
% For even segment-pair symbols reverse alternate rows
segments 4 mod 0 eq r 2 mod 1 eq and {
@@ -6643,9 +9979,9 @@ begin
% Extend last row and separator to fill width of symbol
/pixx rows 0 get length def
[ pixx {0} repeat ] dup 0 rows numrows 1 sub get putinterval
- rows exch numrows 1 sub exch put
+ rows exch numrows 1 sub exch put
[ pixx {0} repeat ] dup 0 seps numrows 1 sub get putinterval
- seps exch numrows 1 sub exch put
+ seps exch numrows 1 sub exch put
% Middle separator pattern
/sep [ pixx 2 idiv 1 add { 0 1 } repeat ] 0 pixx getinterval def
@@ -6667,6 +10003,8 @@ begin
} for
] def
+ options (parse) undef
+
<<
/ren //renmatrix
/pixs pixs
@@ -6681,9 +10019,13 @@ begin
} ifelse
+ //unloadctx exec
+
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/databarexpanded dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -6692,15 +10034,15 @@ end
% --END ENCODER databarexpanded--
% --BEGIN ENCODER databarexpandedstacked--
-% --REQUIRES preamble raiseerror renlinear renmatrix databarexpanded--
+% --REQUIRES preamble loadctx unloadctx raiseerror parseinput gs1process renlinear renmatrix databarexpanded--
% --DESC: GS1 DataBar Expanded Stacked
% --EXAM: (01)95012345678903(3103)000123
% --EXOP: segments=4
% --RNDR: renlinear renmatrix
-%%BeginResource: uk.co.terryburton.bwipp databarexpandedstacked 0.0 2017040400 62326 62296
-%%BeginData: 43 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp databarexpandedstacked 0.0 2022082100 72659 72245
+%%BeginData: 46 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
dup /databarexpanded dup /uk.co.terryburton.bwipp findresource put
@@ -6712,6 +10054,7 @@ begin
/options exch def % We are given an option string
/barcode exch def % We are given a barcode string
+ /ctx null def
/dontdraw false def
% Parse the input options
@@ -6733,12 +10076,14 @@ begin
args (opt) options put
args
-
+
dontdraw not //renmatrix if
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/databarexpandedstacked dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -6747,16 +10092,17 @@ end
% --END ENCODER databarexpandedstacked--
% --BEGIN ENCODER gs1northamericancoupon--
-% --REQUIRES preamble raiseerror renlinear renmatrix databarexpanded databarexpandedstacked--
+% --REQUIRES preamble loadctx unloadctx raiseerror parseinput gs1process renlinear renmatrix databarexpanded databarexpandedstacked--
% --DESC: GS1 North American Coupon
% --EXAM: (8110)106141416543213500110000310123196000
% --EXOP: includetext segments=8
% --RNDR: renlinear renmatrix
-%%BeginResource: uk.co.terryburton.bwipp gs1northamericancoupon 0.0 2017040400 84603 84322
-%%BeginData: 133 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp gs1northamericancoupon 0.0 2022082100 84394 87545
+%%BeginData: 105 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /gs1process dup /uk.co.terryburton.bwipp findresource put
dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
dup /databarexpandedstacked dup /uk.co.terryburton.bwipp findresource put
begin
@@ -6767,13 +10113,16 @@ begin
/options exch def % We are given an option string
/barcode exch def % We are given a barcode string
+ /ctx null def
/dontdraw false def
-
/includetext false def % Enable/disable coupon text
- /coupontextfont /NimbusSanL-Regu def
+ /coupontextfont /Helvetica def
/coupontextsize 9 def
/coupontextxoffset (unset) def
/coupontextyoffset (unset) def
+ /parse false def
+ /dontlint false def
+ /lintreqs true def
% Parse the input options
options type /stringtype eq {
@@ -6791,45 +10140,10 @@ begin
coupontextxoffset (unset) ne {/coupontextxoffset coupontextxoffset cvr def} if
coupontextyoffset (unset) ne {/coupontextyoffset coupontextyoffset cvr def} if
- % Expand ordinals of the form ^NNN to ASCII
- /expand {
- /in exch def
- /out in length string def
- /j 0 def
- in
- { % loop
- (^) search {
- dup out exch j exch putinterval
- length j add 1 add /j exch def
- pop
- dup 0 3 getinterval cvi out exch j 1 sub exch put
- dup length 3 sub 3 exch getinterval
- } {
- dup out exch j exch putinterval
- length j add /j exch def
- out 0 j getinterval exit
- } ifelse
- } loop
- } bind def
-
- % Parse out AIs
- /ais [] def
- /vals [] def
- barcode dup length 1 sub 1 exch getinterval
- { % loop
- dup () eq {exit} if
- (\)) search pop
- exch pop
- exch (\() search {
- exch pop exch 3 1 roll
- } {
- () 3 1 roll
- } ifelse
- [ ais aload pop counttomark 2 add index ] /ais exch def
- [ vals aload pop counttomark 1 add index expand ] /vals exch def
- pop pop
- } loop
+ barcode /ai //gs1process exec
pop
+ /vals exch def
+ /ais exch def
% Validate the AI structure
ais length 1 ne {
@@ -6853,6 +10167,7 @@ begin
coupontext gcp length 1 add cod putinterval
% Get the result of encoding with databarexpandedstacked
+ options (parse) undef
options (dontdraw) true put
/args barcode options //databarexpandedstacked exec def
@@ -6883,7 +10198,9 @@ begin
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/gs1northamericancoupon dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -6897,10 +10214,10 @@ end
% --EXAM: 117480
% --EXOP: showborder
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp pharmacode 0.0 2017040400 65042 61361
-%%BeginData: 91 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp pharmacode 0.0 2022082100 55057 54908
+%%BeginData: 94 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
begin
@@ -6911,11 +10228,12 @@ begin
/options exch def % We are given an option string
/barcode exch def % We are given a barcode string
+ /ctx null def
/dontdraw false def
/height 8 2.835 mul 72 div def
/nwidth 0.5 2.835 mul def
/wwidth 1.5 2.835 mul def
- /swidth 1.0 2.835 mul def
+ /swidth 1.0 2.835 mul def
% Parse the input options
options type /stringtype eq {
@@ -6927,7 +10245,7 @@ begin
currentdict end /options exch def
} if
options {def} forall
-
+
/height height cvr def
/nwidth nwidth cvr def
/wwidth wwidth cvr def
@@ -6953,7 +10271,7 @@ begin
txt i [barcode i 1 getinterval 0 0 () 0] put
} for
- % Convert the integer into the paramacode string
+ % Convert the integer into the paramacode string
/barcode barcode cvi 1 add 2 17 string cvrs def
/barcode barcode 1 barcode length 1 sub getinterval def
@@ -6986,7 +10304,9 @@ begin
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/pharmacode dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -7000,10 +10320,10 @@ end
% --EXAM: 117480
% --EXOP: includetext showborder
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp pharmacode2 0.0 2017040400 65777 62019
-%%BeginData: 96 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp pharmacode2 0.0 2022082100 55888 55662
+%%BeginData: 99 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
begin
@@ -7014,6 +10334,7 @@ begin
/options exch def % We are given an option string
/barcode exch def % We are given a barcode string
+ /ctx null def
/dontdraw false def
/includetext false def % Enable/disable text
/height 4 def % Height of short bars in millimetres
@@ -7052,12 +10373,10 @@ begin
} for
/encstr 16 string def
- /bhs 16 array def
- /bbs 16 array def
/sbs 32 array def
/bar 1 25.4 div height mul def % bar height (mm)
/spc 1 25.4 div 72 mul def % bar width & spacing (1mm)
-
+
% Convert number into a base3 representation
/i 15 def
/val barcode cvi def
@@ -7069,15 +10388,17 @@ begin
/i i 1 sub def
} loop
/encstr encstr i 1 add 15 i sub getinterval def
-
+
% Generate the bar pattern
+ /bhs encstr length array def
+ /bbs encstr length array def
0 1 encstr length 1 sub {
/i exch def
encstr i get dup
bhs i bar [1 1 2] 5 -1 roll get mul put
bbs i [0 bar 0] 4 -1 roll get put
} for
-
+
% Return the arguments
<<
/ren //renlinear
@@ -7094,7 +10415,9 @@ begin
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/pharmacode2 dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -7103,15 +10426,17 @@ end
% --END ENCODER pharmacode2--
% --BEGIN ENCODER code2of5--
-% --REQUIRES preamble raiseerror renlinear--
+% --REQUIRES preamble loadctx unloadctx raiseerror renlinear--
% --DESC: Code 25
% --EXAM: 01234567
% --EXOP: includetext includecheck includecheckintext
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp code2of5 0.0 2017040400 75739 71770
-%%BeginData: 150 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp code2of5 0.0 2022082100 73003 69031
+%%BeginData: 165 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
+dup /loadctx dup /uk.co.terryburton.bwipp findresource put
+dup /unloadctx dup /uk.co.terryburton.bwipp findresource put
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
begin
@@ -7122,12 +10447,13 @@ begin
/options exch def % We are given an option string
/barcode exch def % We are given a barcode string
+ /ctx null def
/dontdraw false def
/includecheck false def
/validatecheck false def
/includetext false def % Enable/disable text
/includecheckintext false def
- /textfont /NimbusMonL-Regu def
+ /textfont /Courier def
/textsize 10 def
/textyoffset -7 def
/height 1 def
@@ -7149,6 +10475,8 @@ begin
/textyoffset textyoffset cvr def
/height height cvr def
+ /code2of5 //loadctx exec
+
% Validate input
barcode {
dup 48 lt exch 57 gt or {
@@ -7173,12 +10501,13 @@ begin
} if
% Create an array containing the character mappings
- /versions <<
+{
+ /versions <<
/industrial
[ (1111313111) (3111111131) (1131111131) (3131111111)
(1111311131) (3111311111) (1131311111) (1111113131)
(3111113111) (1131113111) (313111) (31113)
- ]
+ ]
/iata
[ (1111313111) (3111111131) (1131111131) (3131111111)
(1111311131) (3111311111) (1131311111) (1111113131)
@@ -7197,6 +10526,8 @@ begin
(133111) (111331) (311311) (131311) (1111) (311)
]
>> def
+} ctxdef
+
versions version known not {
/bwipp.code2of5badVersion (Unrecognised Code 25 version) //raiseerror exec
} if
@@ -7204,13 +10535,16 @@ begin
/cs encs 0 get length def
/cw 0 encs 0 get {48 sub add} forall def
- /ss encs dup length 2 sub get length def
- /sw 0 encs dup length 2 sub get {48 sub add} forall def
+ /ss encs 10 get length def
+ /sw 0 encs 10 get {48 sub add} forall def
+ /es encs 11 get length def
% Create a string of the available characters
+{
/barchars (0123456789) def
+} ctxdef
- /sbs barlen includecheck {1 add} if cs mul ss add ss add string def
+ /sbs barlen includecheck {1 add} if cs mul ss add es add string def
/txt barlen includecheck {1 add} if array def
% Put the start character
@@ -7254,9 +10588,13 @@ begin
dontdraw not //renlinear if
+ //unloadctx exec
+
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/code2of5 dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -7265,15 +10603,15 @@ end
% --END ENCODER code2of5--
% --BEGIN ENCODER industrial2of5--
-% --REQUIRES preamble raiseerror renlinear code2of5--
+% --REQUIRES preamble loadctx unloadctx raiseerror renlinear code2of5--
% --DESC: Industrial 2 of 5
% --EXAM: 01234567
% --EXOP: includetext includecheck includecheckintext
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp industrial2of5 0.0 2017040400 57761 61035
-%%BeginData: 55 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp industrial2of5 0.0 2022082100 57292 60792
+%%BeginData: 58 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
dup /code2of5 dup /uk.co.terryburton.bwipp findresource put
@@ -7285,14 +10623,15 @@ begin
/options exch def % We are given an option string
/barcode exch def % We are given a barcode string
+ /ctx null def
/dontdraw false def
/includetext false def % Enable/disable text
- /textfont /NimbusMonL-Regu def
+ /textfont /Courier def
/textsize 10 def
/textxoffset 0 def
/textyoffset -7 def
/height 1 def
-
+
% Parse the input options
options type /stringtype eq {
1 dict begin
@@ -7308,7 +10647,7 @@ begin
/textsize textsize cvr def
/textxoffset textxoffset cvr def
/textyoffset textyoffset cvr def
- /height height cvr def
+ /height height cvr def
% Get the result of encoding with code2of5 with version=industrial
options (dontdraw) true put
@@ -7320,10 +10659,12 @@ begin
args
dontdraw not //renlinear if
-
+
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/industrial2of5 dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -7332,15 +10673,15 @@ end
% --END ENCODER industrial2of5--
% --BEGIN ENCODER iata2of5--
-% --REQUIRES preamble raiseerror renlinear code2of5--
+% --REQUIRES preamble loadctx unloadctx raiseerror renlinear code2of5--
% --DESC: IATA 2 of 5
% --EXAM: 01234567
% --EXOP: includetext includecheck includecheckintext
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp iata2of5 0.0 2017040400 57731 61011
-%%BeginData: 55 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp iata2of5 0.0 2022082100 57262 60768
+%%BeginData: 58 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
dup /code2of5 dup /uk.co.terryburton.bwipp findresource put
@@ -7352,14 +10693,15 @@ begin
/options exch def % We are given an option string
/barcode exch def % We are given a barcode string
+ /ctx null def
/dontdraw false def
/includetext false def % Enable/disable text
- /textfont /NimbusMonL-Regu def
+ /textfont /Courier def
/textsize 10 def
/textxoffset 0 def
/textyoffset -7 def
/height 1 def
-
+
% Parse the input options
options type /stringtype eq {
1 dict begin
@@ -7375,7 +10717,7 @@ begin
/textsize textsize cvr def
/textxoffset textxoffset cvr def
/textyoffset textyoffset cvr def
- /height height cvr def
+ /height height cvr def
% Get the result of encoding with code2of5 with version=iata
options (dontdraw) true put
@@ -7387,10 +10729,12 @@ begin
args
dontdraw not //renlinear if
-
+
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/iata2of5 dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -7399,15 +10743,15 @@ end
% --END ENCODER iata2of5--
% --BEGIN ENCODER matrix2of5--
-% --REQUIRES preamble raiseerror renlinear code2of5--
+% --REQUIRES preamble loadctx unloadctx raiseerror renlinear code2of5--
% --DESC: Matrix 2 of 5
% --EXAM: 01234567
% --EXOP: includetext includecheck includecheckintext
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp matrix2of5 0.0 2017040400 57741 61019
-%%BeginData: 55 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp matrix2of5 0.0 2022082100 57272 60776
+%%BeginData: 58 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
dup /code2of5 dup /uk.co.terryburton.bwipp findresource put
@@ -7419,14 +10763,15 @@ begin
/options exch def % We are given an option string
/barcode exch def % We are given a barcode string
+ /ctx null def
/dontdraw false def
/includetext false def % Enable/disable text
- /textfont /NimbusMonL-Regu def
+ /textfont /Courier def
/textsize 10 def
/textxoffset 0 def
/textyoffset -7 def
/height 1 def
-
+
% Parse the input options
options type /stringtype eq {
1 dict begin
@@ -7442,7 +10787,7 @@ begin
/textsize textsize cvr def
/textxoffset textxoffset cvr def
/textyoffset textyoffset cvr def
- /height height cvr def
+ /height height cvr def
% Get the result of encoding with code2of5 with version=matrix
options (dontdraw) true put
@@ -7454,10 +10799,12 @@ begin
args
dontdraw not //renlinear if
-
+
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/matrix2of5 dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -7466,15 +10813,15 @@ end
% --END ENCODER matrix2of5--
% --BEGIN ENCODER coop2of5--
-% --REQUIRES preamble raiseerror renlinear code2of5--
+% --REQUIRES preamble loadctx unloadctx raiseerror renlinear code2of5--
% --DESC: COOP 2 of 5
% --EXAM: 01234567
% --EXOP: includetext includecheck includecheckintext
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp coop2of5 0.0 2017040400 57731 61011
-%%BeginData: 55 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp coop2of5 0.0 2022082100 57262 60768
+%%BeginData: 58 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
dup /code2of5 dup /uk.co.terryburton.bwipp findresource put
@@ -7486,14 +10833,15 @@ begin
/options exch def % We are given an option string
/barcode exch def % We are given a barcode string
+ /ctx null def
/dontdraw false def
/includetext false def % Enable/disable text
- /textfont /NimbusMonL-Regu def
+ /textfont /Courier def
/textsize 10 def
/textxoffset 0 def
/textyoffset -7 def
/height 1 def
-
+
% Parse the input options
options type /stringtype eq {
1 dict begin
@@ -7509,7 +10857,7 @@ begin
/textsize textsize cvr def
/textxoffset textxoffset cvr def
/textyoffset textyoffset cvr def
- /height height cvr def
+ /height height cvr def
% Get the result of encoding with code2of5 with version=coop
options (dontdraw) true put
@@ -7521,10 +10869,12 @@ begin
args
dontdraw not //renlinear if
-
+
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/coop2of5 dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -7533,15 +10883,15 @@ end
% --END ENCODER coop2of5--
% --BEGIN ENCODER datalogic2of5--
-% --REQUIRES preamble raiseerror renlinear code2of5--
+% --REQUIRES preamble loadctx unloadctx raiseerror renlinear code2of5--
% --DESC: Datalogic 2 of 5
% --EXAM: 01234567
% --EXOP: includetext includecheck includecheckintext
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp datalogic2of5 0.0 2017040400 57756 61031
-%%BeginData: 55 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp datalogic2of5 0.0 2022082100 57287 60788
+%%BeginData: 58 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
dup /code2of5 dup /uk.co.terryburton.bwipp findresource put
@@ -7553,14 +10903,15 @@ begin
/options exch def % We are given an option string
/barcode exch def % We are given a barcode string
+ /ctx null def
/dontdraw false def
/includetext false def % Enable/disable text
- /textfont /NimbusMonL-Regu def
+ /textfont /Courier def
/textsize 10 def
/textxoffset 0 def
/textyoffset -7 def
/height 1 def
-
+
% Parse the input options
options type /stringtype eq {
1 dict begin
@@ -7576,7 +10927,7 @@ begin
/textsize textsize cvr def
/textxoffset textxoffset cvr def
/textyoffset textyoffset cvr def
- /height height cvr def
+ /height height cvr def
% Get the result of encoding with code2of5 with version=datalogic
options (dontdraw) true put
@@ -7588,10 +10939,12 @@ begin
args
dontdraw not //renlinear if
-
+
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/datalogic2of5 dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -7600,15 +10953,17 @@ end
% --END ENCODER datalogic2of5--
% --BEGIN ENCODER code11--
-% --REQUIRES preamble raiseerror renlinear--
+% --REQUIRES preamble loadctx unloadctx raiseerror renlinear--
% --DESC: Code 11
% --EXAM: 0123456789
% --EXOP: includetext includecheck includecheckintext
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp code11 0.0 2017040400 78331 78011
-%%BeginData: 158 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp code11 0.0 2022082100 74329 70384
+%%BeginData: 169 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
+dup /loadctx dup /uk.co.terryburton.bwipp findresource put
+dup /unloadctx dup /uk.co.terryburton.bwipp findresource put
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
begin
@@ -7619,16 +10974,17 @@ begin
/options exch def % We are given an option string
/barcode exch def % We are given a barcode string
+ /ctx null def
/dontdraw false def
/includecheck false def
/validatecheck false def
/includetext false def
/includecheckintext false def
- /textfont /NimbusMonL-Regu def
+ /textfont /Courier def
/textsize 10 def
/textyoffset -7 def
/height 1 def
-
+
% Parse the input options
options type /stringtype eq {
1 dict begin
@@ -7639,13 +10995,16 @@ begin
currentdict end /options exch def
} if
options {def} forall
-
+
/textfont textfont cvlit def
/textsize textsize cvr def
/textyoffset textyoffset cvr def
/height height cvr def
-
+
+ /code11 //loadctx exec
+
% Create an array containing the character mappings
+{
/encs
[ (111131) (311131) (131131) (331111) (113131)
(313111) (133111) (111331) (311311) (311111)
@@ -7656,6 +11015,7 @@ begin
/barchars (0123456789-) def
/charvals 11 dict def
0 1 10 {charvals exch dup barchars exch 1 getinterval exch put} for
+} ctxdef
% Validate the input
0 1 barcode length 1 sub {
@@ -7714,15 +11074,15 @@ begin
/xpos exch enc exch get 48 sub xpos add def
} for
} for
-
+
% Put the checksum and end characters
includecheck {
barlen 10 ge {
- sbs barlen 6 mul 6 add encs checksum1 get putinterval
+ sbs barlen 6 mul 6 add encs checksum1 get putinterval
sbs barlen 6 mul 12 add encs checksum2 get putinterval
includecheckintext {
txt barlen [barchars checksum1 1 getinterval xpos textyoffset textfont textsize] put
- /enc encs checksum1 get def
+ /enc encs checksum1 get def
0 1 5 { % xpos+=width of the character
/xpos exch enc exch get 48 sub xpos add def
} for
@@ -7733,7 +11093,7 @@ begin
} ifelse
sbs barlen 6 mul 18 add encs 11 get putinterval
} {
- sbs barlen 6 mul 6 add encs checksum1 get putinterval
+ sbs barlen 6 mul 6 add encs checksum1 get putinterval
includecheckintext {
txt barlen [barchars checksum1 1 getinterval xpos textyoffset textfont textsize] put
} {
@@ -7759,9 +11119,13 @@ begin
dontdraw not //renlinear if
+ //unloadctx exec
+
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/code11 dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -7770,15 +11134,17 @@ end
% --END ENCODER code11--
% --BEGIN ENCODER bc412--
-% --REQUIRES preamble raiseerror renlinear--
+% --REQUIRES preamble loadctx unloadctx raiseerror renlinear--
% --DESC: BC412
% --EXAM: BC412
% --EXOP: semi includetext includecheckintext
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp bc412 0.0 2017040400 72256 72010
-%%BeginData: 148 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp bc412 0.0 2022082100 75365 71341
+%%BeginData: 203 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
+dup /loadctx dup /uk.co.terryburton.bwipp findresource put
+dup /unloadctx dup /uk.co.terryburton.bwipp findresource put
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
begin
@@ -7789,6 +11155,7 @@ begin
/options exch def % We are given an option string
/barcode exch def % We are given a barcode string
+ /ctx null def
/dontdraw false def
/includecheck false def
/validatecheck false def
@@ -7796,11 +11163,11 @@ begin
/includecheckintext false def
/includestartstop false def
/semi false def
- /textfont /NimbusMonL-Regu def
+ /textfont /Courier def
/textsize 10 def
/textyoffset -7 def
/height 1 def
-
+
% Parse the input options
options type /stringtype eq {
1 dict begin
@@ -7811,21 +11178,25 @@ begin
currentdict end /options exch def
} if
options {def} forall
-
+
/textfont textfont cvlit def
/textsize textsize cvr def
/textyoffset textyoffset cvr def
/height height cvr def
-
+
semi {
- /includecheck true def
+ % Implies includecheck and includecheckintext also
/includestartstop true def
} if
+ /bc412 //loadctx exec
+
% Create a string of the available characters
+{
/barchars (0R9GLVHA8EZ4NTS1J2Q6C7DYKBUIX3FWP5M) def
/charvals 35 dict def
0 1 34 {charvals exch dup barchars exch 1 getinterval exch put} for
+} ctxdef
% Validate the input
0 1 barcode length 1 sub {
@@ -7834,33 +11205,77 @@ begin
} if
} for
- /barlen barcode length validatecheck {1 sub} if def
+ semi {
+ % Validate length
+ validatecheck {
+ barcode length 8 lt barcode length 19 gt or {
+ /bwipp.bc412semivalidateBadLength (BC412 semi with check digit must be 8 to 19 characters long) //raiseerror exec
+ } if
+ } {
+ barcode length 7 lt barcode length 18 gt or {
+ /bwipp.bc412semiBadLength (BC412 semi must be 7 to 18 characters long) //raiseerror exec
+ } if
+ } ifelse
- /checksum 0 def
- 0 1 barlen 1 sub {
- barcode exch 1 getinterval charvals exch get
- checksum add /checksum exch def
- } for
- /checksum checksum 35 mod def
- validatecheck {
- barcode barlen get barchars checksum get ne {
- /bwipp.bc412badCheckDigit (Incorrect BC412 check digit provided) //raiseerror exec
+ /barlen barcode length def
+ validatecheck not { % Place dummy (0) in checksum position (1-based 2nd)
+ /barlen barlen 1 add def
+ /sbarcode barlen string def
+ sbarcode 0 barcode 0 get put
+ sbarcode 1 48 put % (0)
+ sbarcode 2 barcode 1 barlen 2 sub getinterval putinterval
+ /barcode sbarcode def
} if
- /barcode barcode 0 barlen getinterval def
- /includecheck true def
- } if
+ /sumodd 0 def /sumeven 0 def
+ 0 1 barlen 1 sub {
+ /i exch def
+ barcode i 1 getinterval charvals exch get
+ i 2 mod 0 eq { % 1-based odd
+ sumodd add /sumodd exch def
+ } {
+ sumeven add /sumeven exch def
+ } ifelse
+ } for
+ /checksum sumodd 35 mod sumeven 35 mod 2 mul add 35 mod def % F = Mod35( Mod35( Fodd ) + 2 * Mod35( Feven ) )
+ validatecheck {
+ checksum 0 ne {
+ /bwipp.bc412semiBadCheckDigit (Incorrect BC412 semi check digit provided) //raiseerror exec
+ } if
+ } {
+ /checksum checksum 17 mul 35 mod def % CD = Mod35( 17 * F )
+ barcode 1 barchars checksum get put
+ } ifelse
+ } {
+ /barlen barcode length validatecheck {1 sub} if def
+
+ /checksum 0 def
+ 0 1 barlen 1 sub {
+ barcode exch 1 getinterval charvals exch get
+ checksum add /checksum exch def
+ } for
+ /checksum checksum 35 mod def
+ validatecheck {
+ barcode barlen get barchars checksum get ne {
+ /bwipp.bc412badCheckDigit (Incorrect BC412 check digit provided) //raiseerror exec
+ } if
+ /barcode barcode 0 barlen getinterval def
+ /includecheck true def
+ } if
+ } ifelse
% Create an array containing the character mappings
+{
/encs
- [ (11111115) (13111212) (11131113) (12111213) (12121311)
- (13131111) (12111312) (11131212) (11121411) (11151111)
- (15111111) (11111511) (12131211) (13121112) (13111212)
- (11111214) (12121113) (11111313) (13111113) (11121213)
- (11141112) (11121312) (11141211) (14121111) (12121212)
- (11131311) (13121211) (12111411) (14111211) (11111412)
- (12111114) (14111112) (12141111) (11121114) (12131112)
- (12) (111)
+ [ (11111115) (13111212) (11131113) (12111213) (12121311) % 0R9GL
+ (13131111) (12111312) (11131212) (11121411) (11151111) % VHA8E
+ (15111111) (11111511) (12131211) (13121112) (13111311) % Z4NTS
+ (11111214) (12121113) (11111313) (13111113) (11121213) % 1J2Q6
+ (11141112) (11121312) (11141211) (14121111) (12121212) % C7DYK
+ (11131311) (13121211) (12111411) (14111211) (11111412) % BUIX3
+ (12111114) (14111112) (12141111) (11121114) (12131112) % FWP5M
+ (12) (111) % Start Stop
] def
+} ctxdef
/sbs barlen 1 add 8 mul 5 add string def
includecheck {
@@ -7896,16 +11311,16 @@ begin
txt barlen [() barlen 12 mul txtpos add textyoffset textfont textsize] put
} ifelse
/pos pos 8 add def
- } if
+ } if
% Put the stop character
- includestartstop {
+ includestartstop {
sbs pos encs 36 get putinterval
- /pos pos 2 add def
+ /pos pos 3 add def
} if
% Return the arguments
- /sbs sbs 0 pos getinterval def
+ /sbs sbs 0 pos getinterval def
<<
/ren //renlinear
/sbs [sbs {48 sub} forall]
@@ -7919,9 +11334,13 @@ begin
dontdraw not //renlinear if
+ //unloadctx exec
+
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/bc412 dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -7930,15 +11349,17 @@ end
% --END ENCODER bc412--
% --BEGIN ENCODER rationalizedCodabar--
-% --REQUIRES preamble raiseerror renlinear--
+% --REQUIRES preamble loadctx unloadctx raiseerror renlinear--
% --DESC: Codabar
% --EXAM: A0123456789B
% --EXOP: includetext includecheck includecheckintext
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp rationalizedCodabar 0.0 2017040400 78699 78295
-%%BeginData: 156 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp rationalizedCodabar 0.0 2022082100 75010 71044
+%%BeginData: 167 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
+dup /loadctx dup /uk.co.terryburton.bwipp findresource put
+dup /unloadctx dup /uk.co.terryburton.bwipp findresource put
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
begin
@@ -7949,17 +11370,18 @@ begin
/options exch def % We are given an option string
/barcode exch def % We are given a barcode string
+ /ctx null def
/dontdraw false def
/altstartstop false def
/includecheck false def % Enable/disable checkdigit
/validatecheck false def
/includetext false def % Enable/disable text
/includecheckintext false def
- /textfont /NimbusMonL-Regu def
+ /textfont /Courier def
/textsize 10 def
/textyoffset -7 def
/height 1 def
-
+
% Parse the input options
options type /stringtype eq {
1 dict begin
@@ -7970,12 +11392,15 @@ begin
currentdict end /options exch def
} if
options {def} forall
-
+
/textfont textfont cvlit def
/textsize textsize cvr def
/textyoffset textyoffset cvr def
/height height cvr def
-
+
+ /rationalizedCodabar //loadctx exec
+
+{
% Create an array containing the character mappings
/encs
[ (11111331) (11113311) (11131131) (33111111) (11311311)
@@ -7985,11 +11410,12 @@ begin
] def
% Create a string of the available characters
- altstartstop {
- /barchars (0123456789-$:/.+TN*E) def
- } {
- /barchars (0123456789-$:/.+ABCD) def
- } ifelse
+ /barcharsnormal (0123456789-$:/.+ABCD) def
+ /barcharsalt (0123456789-$:/.+TN*E) def
+} ctxdef
+
+ /barchars altstartstop {barcharsalt} {barcharsnormal} ifelse def
+
/charvals 20 dict def
0 1 19 {charvals exch dup barchars exch 1 getinterval exch put} for
/bodyvals 16 dict def
@@ -7998,7 +11424,7 @@ begin
16 1 19 {ssvals exch dup barchars exch 1 getinterval exch put} for
% Validate the input
- barcode 0 1 getinterval ssvals exch known not
+ barcode 0 1 getinterval ssvals exch known not
barcode barcode length 1 sub 1 getinterval ssvals exch known not or {
altstartstop {
/bwipp.rationalizedCodabarBadAltStartStop (Codabar start and stop characters must be one of E N T or *) //raiseerror exec
@@ -8020,7 +11446,7 @@ begin
checksum add /checksum exch def
} for
barcode barcode length 1 sub 1 getinterval charvals exch get
- checksum add /checksum exch def
+ checksum add /checksum exch def
/checksum 16 checksum 16 mod sub 16 mod def
validatecheck {
barcode barlen 1 sub get barchars checksum get ne {
@@ -8087,9 +11513,13 @@ begin
dontdraw not //renlinear if
+ //unloadctx exec
+
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/rationalizedCodabar dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -8098,15 +11528,17 @@ end
% --END ENCODER rationalizedCodabar--
% --BEGIN ENCODER onecode--
-% --REQUIRES preamble raiseerror renlinear--
+% --REQUIRES preamble loadctx unloadctx raiseerror renlinear--
% --DESC: USPS Intelligent Mail
% --EXAM: 0123456709498765432101234567891
% --EXOP: barcolor=FF0000
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp onecode 0.0 2017040400 113701 113359
-%%BeginData: 335 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp onecode 0.0 2022082100 108651 104892
+%%BeginData: 348 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
+dup /loadctx dup /uk.co.terryburton.bwipp findresource put
+dup /unloadctx dup /uk.co.terryburton.bwipp findresource put
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
begin
@@ -8117,9 +11549,10 @@ begin
/options exch def % We are given an option string
/barcode exch def % We are given a barcode string
+ /ctx null def
/dontdraw false def
/height 0.15 def
-
+
% Parse the input options
options type /stringtype eq {
1 dict begin
@@ -8130,11 +11563,13 @@ begin
currentdict end /options exch def
} if
options {def} forall
-
+
/height height cvr def
+ /onecode //loadctx exec
+
/barlen barcode length def
-
+
% Create the human readable text
/txtdict <<
2 dup
@@ -8160,32 +11595,32 @@ begin
/base exch def
/num exch def
num length 1 sub -1 1 {
- /i exch def
+ /i exch def
num i 1 sub 2 copy get num i get base idiv add put
num i num i get base mod put
} for
{ %loop - extend input as necessary
num 0 get base lt {exit} if
- /num [0 num {} forall] def
+ /num [0 num {} forall] def
num 0 num 0 get num 1 get base idiv add put
num 1 num 1 get base mod put
} loop
% Trim leading zeros
- /num [/i true def num {dup 0 eq i and {pop} {/i false def} ifelse} forall] def
+ /num [/i true def num {dup 0 eq i and {pop} {/i false def} ifelse} forall] def
num length 0 eq {/num [0] def} if
num
- } bind def
+ } def
/bigadd {
2 copy length exch length
2 copy sub abs /offset exch def
lt {exch} if
- /a exch def /b exch def
+ /a exch def /b exch def
0 1 b length 1 sub {
dup a exch offset add 2 copy get b 5 -1 roll get add put
} for
a
- } bind def
+ } def
% Conversion of data fields into binary data
barlen 20 eq {[0]} if
@@ -8208,7 +11643,7 @@ begin
bintmp j bintmp j get 256 idiv put
} for
bytes i bintmp bintmp length 1 sub get 256 mod put
- bintmp bintmp length 1 sub 2 copy get 256 idiv put
+ bintmp bintmp length 1 sub 2 copy get 256 idiv put
} for
% Generation of 11-bit CRC on byte array
@@ -8216,7 +11651,7 @@ begin
/dat bytes 0 get 5 bitshift def
6 {
fcs dat xor 1024 and 0 ne {
- /fcs fcs 1 bitshift 3893 xor def
+ /fcs fcs 1 bitshift 3893 xor def
} {
/fcs fcs 1 bitshift def
} ifelse
@@ -8224,10 +11659,10 @@ begin
/dat dat 1 bitshift def
} repeat
1 1 12 {
- bytes exch get 3 bitshift /dat exch def
- 8 {
+ bytes exch get 3 bitshift /dat exch def
+ 8 {
fcs dat xor 1024 and 0 ne {
- /fcs fcs 1 bitshift 3893 xor def
+ /fcs fcs 1 bitshift 3893 xor def
} {
/fcs fcs 1 bitshift def
} ifelse
@@ -8249,7 +11684,7 @@ begin
/j exch def
binval j 1 add 2 copy get binval j get b mod 10 mul add put
binval j binval j get b idiv put
- } for
+ } for
codewords i binval binval length 1 sub get b mod put
binval binval length 1 sub 2 copy get b idiv put
} for
@@ -8261,109 +11696,111 @@ begin
} if
% Conversion from codewords to characters
+{
/tab513 [
- 31 7936 47 7808 55 7552 59 7040 61 6016 62 3968 79 7744 87
- 7488 91 6976 93 5952 94 3904 103 7360 107 6848 109 5824 110 3776
- 115 6592 117 5568 118 3520 121 5056 122 3008 124 1984 143 7712 151
- 7456 155 6944 157 5920 158 3872 167 7328 171 6816 173 5792 174 3744
- 179 6560 181 5536 182 3488 185 5024 186 2976 188 1952 199 7264 203
- 6752 205 5728 206 3680 211 6496 213 5472 214 3424 217 4960 218 2912
- 220 1888 227 6368 229 5344 230 3296 233 4832 234 2784 236 1760 241
- 4576 242 2528 244 1504 248 992 271 7696 279 7440 283 6928 285 5904
- 286 3856 295 7312 299 6800 301 5776 302 3728 307 6544 309 5520 310
- 3472 313 5008 314 2960 316 1936 327 7248 331 6736 333 5712 334 3664
- 339 6480 341 5456 342 3408 345 4944 346 2896 348 1872 355 6352 357
- 5328 358 3280 361 4816 362 2768 364 1744 369 4560 370 2512 372 1488
- 376 976 391 7216 395 6704 397 5680 398 3632 403 6448 405 5424 406
- 3376 409 4912 410 2864 412 1840 419 6320 421 5296 422 3248 425 4784
- 426 2736 428 1712 433 4528 434 2480 436 1456 440 944 451 6256 453
- 5232 454 3184 457 4720 458 2672 460 1648 465 4464 466 2416 468 1392
- 472 880 481 4336 482 2288 484 1264 488 752 527 7688 535 7432 539
- 6920 541 5896 542 3848 551 7304 555 6792 557 5768 558 3720 563 6536
- 565 5512 566 3464 569 5000 570 2952 572 1928 583 7240 587 6728 589
- 5704 590 3656 595 6472 597 5448 598 3400 601 4936 602 2888 604 1864
- 611 6344 613 5320 614 3272 617 4808 618 2760 620 1736 625 4552 626
- 2504 628 1480 632 968 647 7208 651 6696 653 5672 654 3624 659 6440
- 661 5416 662 3368 665 4904 666 2856 668 1832 675 6312 677 5288 678
- 3240 681 4776 682 2728 684 1704 689 4520 690 2472 692 1448 696 936
- 707 6248 709 5224 710 3176 713 4712 714 2664 716 1640 721 4456 722
- 2408 724 1384 728 872 737 4328 738 2280 740 1256 775 7192 779 6680
- 781 5656 782 3608 787 6424 789 5400 790 3352 793 4888 794 2840 796
- 1816 803 6296 805 5272 806 3224 809 4760 810 2712 812 1688 817 4504
- 818 2456 820 1432 824 920 835 6232 837 5208 838 3160 841 4696 842
- 2648 844 1624 849 4440 850 2392 852 1368 865 4312 866 2264 868 1240
- 899 6200 901 5176 902 3128 905 4664 906 2616 908 1592 913 4408 914
- 2360 916 1336 929 4280 930 2232 932 1208 961 4216 962 2168 964 1144
- 1039 7684 1047 7428 1051 6916 1053 5892 1054 3844 1063 7300 1067 6788 1069
- 5764 1070 3716 1075 6532 1077 5508 1078 3460 1081 4996 1082 2948 1084 1924
- 1095 7236 1099 6724 1101 5700 1102 3652 1107 6468 1109 5444 1110 3396 1113
- 4932 1114 2884 1116 1860 1123 6340 1125 5316 1126 3268 1129 4804 1130 2756
- 1132 1732 1137 4548 1138 2500 1140 1476 1159 7204 1163 6692 1165 5668 1166
- 3620 1171 6436 1173 5412 1174 3364 1177 4900 1178 2852 1180 1828 1187 6308
- 1189 5284 1190 3236 1193 4772 1194 2724 1196 1700 1201 4516 1202 2468 1204
- 1444 1219 6244 1221 5220 1222 3172 1225 4708 1226 2660 1228 1636 1233 4452
- 1234 2404 1236 1380 1249 4324 1250 2276 1287 7188 1291 6676 1293 5652 1294
- 3604 1299 6420 1301 5396 1302 3348 1305 4884 1306 2836 1308 1812 1315 6292
- 1317 5268 1318 3220 1321 4756 1322 2708 1324 1684 1329 4500 1330 2452 1332
- 1428 1347 6228 1349 5204 1350 3156 1353 4692 1354 2644 1356 1620 1361 4436
- 1362 2388 1377 4308 1378 2260 1411 6196 1413 5172 1414 3124 1417 4660 1418
- 2612 1420 1588 1425 4404 1426 2356 1441 4276 1442 2228 1473 4212 1474 2164
- 1543 7180 1547 6668 1549 5644 1550 3596 1555 6412 1557 5388 1558 3340 1561
- 4876 1562 2828 1564 1804 1571 6284 1573 5260 1574 3212 1577 4748 1578 2700
- 1580 1676 1585 4492 1586 2444 1603 6220 1605 5196 1606 3148 1609 4684 1610
- 2636 1617 4428 1618 2380 1633 4300 1634 2252 1667 6188 1669 5164 1670 3116
- 1673 4652 1674 2604 1681 4396 1682 2348 1697 4268 1698 2220 1729 4204 1730
- 2156 1795 6172 1797 5148 1798 3100 1801 4636 1802 2588 1809 4380 1810 2332
- 1825 4252 1826 2204 1857 4188 1858 2140 1921 4156 1922 2108 2063 7682 2071
- 7426 2075 6914 2077 5890 2078 3842 2087 7298 2091 6786 2093 5762 2094 3714
- 2099 6530 2101 5506 2102 3458 2105 4994 2106 2946 2119 7234 2123 6722 2125
- 5698 2126 3650 2131 6466 2133 5442 2134 3394 2137 4930 2138 2882 2147 6338
- 2149 5314 2150 3266 2153 4802 2154 2754 2161 4546 2162 2498 2183 7202 2187
- 6690 2189 5666 2190 3618 2195 6434 2197 5410 2198 3362 2201 4898 2202 2850
- 2211 6306 2213 5282 2214 3234 2217 4770 2218 2722 2225 4514 2226 2466 2243
- 6242 2245 5218 2246 3170 2249 4706 2250 2658 2257 4450 2258 2402 2273 4322
- 2311 7186 2315 6674 2317 5650 2318 3602 2323 6418 2325 5394 2326 3346 2329
- 4882 2330 2834 2339 6290 2341 5266 2342 3218 2345 4754 2346 2706 2353 4498
- 2354 2450 2371 6226 2373 5202 2374 3154 2377 4690 2378 2642 2385 4434 2401
- 4306 2435 6194 2437 5170 2438 3122 2441 4658 2442 2610 2449 4402 2465 4274
- 2497 4210 2567 7178 2571 6666 2573 5642 2574 3594 2579 6410 2581 5386 2582
- 3338 2585 4874 2586 2826 2595 6282 2597 5258 2598 3210 2601 4746 2602 2698
- 2609 4490 2627 6218 2629 5194 2630 3146 2633 4682 2641 4426 2657 4298 2691
- 6186 2693 5162 2694 3114 2697 4650 2705 4394 2721 4266 2753 4202 2819 6170
- 2821 5146 2822 3098 2825 4634 2833 4378 2849 4250 2881 4186 2945 4154 3079
- 7174 3083 6662 3085 5638 3086 3590 3091 6406 3093 5382 3094 3334 3097 4870
- 3107 6278 3109 5254 3110 3206 3113 4742 3121 4486 3139 6214 3141 5190 3145
- 4678 3153 4422 3169 4294 3203 6182 3205 5158 3209 4646 3217 4390 3233 4262
- 3265 4198 3331 6166 3333 5142 3337 4630 3345 4374 3361 4246 3393 4182 3457
- 4150 3587 6158 3589 5134 3593 4622 3601 4366 3617 4238 3649 4174 3713 4142
- 3841 4126 4111 7681 4119 7425 4123 6913 4125 5889 4135 7297 4139 6785 4141
- 5761 4147 6529 4149 5505 4153 4993 4167 7233 4171 6721 4173 5697 4179 6465
- 4181 5441 4185 4929 4195 6337 4197 5313 4201 4801 4209 4545 4231 7201 4235
- 6689 4237 5665 4243 6433 4245 5409 4249 4897 4259 6305 4261 5281 4265 4769
- 4273 4513 4291 6241 4293 5217 4297 4705 4305 4449 4359 7185 4363 6673 4365
- 5649 4371 6417 4373 5393 4377 4881 4387 6289 4389 5265 4393 4753 4401 4497
- 4419 6225 4421 5201 4425 4689 4483 6193 4485 5169 4489 4657 4615 7177 4619
- 6665 4621 5641 4627 6409 4629 5385 4633 4873 4643 6281 4645 5257 4649 4745
- 4675 6217 4677 5193 4739 6185 4741 5161 4867 6169 4869 5145 5127 7173 5131
- 6661 5133 5637 5139 6405 5141 5381 5155 6277 5157 5253 5187 6213 5251 6181
- 5379 6165 5635 6157 6151 7171 6155 6659 6163 6403 6179 6275 6211 5189 4681
- 4433 4321 3142 2634 2386 2274 1612 1364 1252 856 744 496
+ 31 7936 47 7808 55 7552 59 7040 61 6016 62 3968 79 7744 87
+ 7488 91 6976 93 5952 94 3904 103 7360 107 6848 109 5824 110 3776
+ 115 6592 117 5568 118 3520 121 5056 122 3008 124 1984 143 7712 151
+ 7456 155 6944 157 5920 158 3872 167 7328 171 6816 173 5792 174 3744
+ 179 6560 181 5536 182 3488 185 5024 186 2976 188 1952 199 7264 203
+ 6752 205 5728 206 3680 211 6496 213 5472 214 3424 217 4960 218 2912
+ 220 1888 227 6368 229 5344 230 3296 233 4832 234 2784 236 1760 241
+ 4576 242 2528 244 1504 248 992 271 7696 279 7440 283 6928 285 5904
+ 286 3856 295 7312 299 6800 301 5776 302 3728 307 6544 309 5520 310
+ 3472 313 5008 314 2960 316 1936 327 7248 331 6736 333 5712 334 3664
+ 339 6480 341 5456 342 3408 345 4944 346 2896 348 1872 355 6352 357
+ 5328 358 3280 361 4816 362 2768 364 1744 369 4560 370 2512 372 1488
+ 376 976 391 7216 395 6704 397 5680 398 3632 403 6448 405 5424 406
+ 3376 409 4912 410 2864 412 1840 419 6320 421 5296 422 3248 425 4784
+ 426 2736 428 1712 433 4528 434 2480 436 1456 440 944 451 6256 453
+ 5232 454 3184 457 4720 458 2672 460 1648 465 4464 466 2416 468 1392
+ 472 880 481 4336 482 2288 484 1264 488 752 527 7688 535 7432 539
+ 6920 541 5896 542 3848 551 7304 555 6792 557 5768 558 3720 563 6536
+ 565 5512 566 3464 569 5000 570 2952 572 1928 583 7240 587 6728 589
+ 5704 590 3656 595 6472 597 5448 598 3400 601 4936 602 2888 604 1864
+ 611 6344 613 5320 614 3272 617 4808 618 2760 620 1736 625 4552 626
+ 2504 628 1480 632 968 647 7208 651 6696 653 5672 654 3624 659 6440
+ 661 5416 662 3368 665 4904 666 2856 668 1832 675 6312 677 5288 678
+ 3240 681 4776 682 2728 684 1704 689 4520 690 2472 692 1448 696 936
+ 707 6248 709 5224 710 3176 713 4712 714 2664 716 1640 721 4456 722
+ 2408 724 1384 728 872 737 4328 738 2280 740 1256 775 7192 779 6680
+ 781 5656 782 3608 787 6424 789 5400 790 3352 793 4888 794 2840 796
+ 1816 803 6296 805 5272 806 3224 809 4760 810 2712 812 1688 817 4504
+ 818 2456 820 1432 824 920 835 6232 837 5208 838 3160 841 4696 842
+ 2648 844 1624 849 4440 850 2392 852 1368 865 4312 866 2264 868 1240
+ 899 6200 901 5176 902 3128 905 4664 906 2616 908 1592 913 4408 914
+ 2360 916 1336 929 4280 930 2232 932 1208 961 4216 962 2168 964 1144
+ 1039 7684 1047 7428 1051 6916 1053 5892 1054 3844 1063 7300 1067 6788 1069
+ 5764 1070 3716 1075 6532 1077 5508 1078 3460 1081 4996 1082 2948 1084 1924
+ 1095 7236 1099 6724 1101 5700 1102 3652 1107 6468 1109 5444 1110 3396 1113
+ 4932 1114 2884 1116 1860 1123 6340 1125 5316 1126 3268 1129 4804 1130 2756
+ 1132 1732 1137 4548 1138 2500 1140 1476 1159 7204 1163 6692 1165 5668 1166
+ 3620 1171 6436 1173 5412 1174 3364 1177 4900 1178 2852 1180 1828 1187 6308
+ 1189 5284 1190 3236 1193 4772 1194 2724 1196 1700 1201 4516 1202 2468 1204
+ 1444 1219 6244 1221 5220 1222 3172 1225 4708 1226 2660 1228 1636 1233 4452
+ 1234 2404 1236 1380 1249 4324 1250 2276 1287 7188 1291 6676 1293 5652 1294
+ 3604 1299 6420 1301 5396 1302 3348 1305 4884 1306 2836 1308 1812 1315 6292
+ 1317 5268 1318 3220 1321 4756 1322 2708 1324 1684 1329 4500 1330 2452 1332
+ 1428 1347 6228 1349 5204 1350 3156 1353 4692 1354 2644 1356 1620 1361 4436
+ 1362 2388 1377 4308 1378 2260 1411 6196 1413 5172 1414 3124 1417 4660 1418
+ 2612 1420 1588 1425 4404 1426 2356 1441 4276 1442 2228 1473 4212 1474 2164
+ 1543 7180 1547 6668 1549 5644 1550 3596 1555 6412 1557 5388 1558 3340 1561
+ 4876 1562 2828 1564 1804 1571 6284 1573 5260 1574 3212 1577 4748 1578 2700
+ 1580 1676 1585 4492 1586 2444 1603 6220 1605 5196 1606 3148 1609 4684 1610
+ 2636 1617 4428 1618 2380 1633 4300 1634 2252 1667 6188 1669 5164 1670 3116
+ 1673 4652 1674 2604 1681 4396 1682 2348 1697 4268 1698 2220 1729 4204 1730
+ 2156 1795 6172 1797 5148 1798 3100 1801 4636 1802 2588 1809 4380 1810 2332
+ 1825 4252 1826 2204 1857 4188 1858 2140 1921 4156 1922 2108 2063 7682 2071
+ 7426 2075 6914 2077 5890 2078 3842 2087 7298 2091 6786 2093 5762 2094 3714
+ 2099 6530 2101 5506 2102 3458 2105 4994 2106 2946 2119 7234 2123 6722 2125
+ 5698 2126 3650 2131 6466 2133 5442 2134 3394 2137 4930 2138 2882 2147 6338
+ 2149 5314 2150 3266 2153 4802 2154 2754 2161 4546 2162 2498 2183 7202 2187
+ 6690 2189 5666 2190 3618 2195 6434 2197 5410 2198 3362 2201 4898 2202 2850
+ 2211 6306 2213 5282 2214 3234 2217 4770 2218 2722 2225 4514 2226 2466 2243
+ 6242 2245 5218 2246 3170 2249 4706 2250 2658 2257 4450 2258 2402 2273 4322
+ 2311 7186 2315 6674 2317 5650 2318 3602 2323 6418 2325 5394 2326 3346 2329
+ 4882 2330 2834 2339 6290 2341 5266 2342 3218 2345 4754 2346 2706 2353 4498
+ 2354 2450 2371 6226 2373 5202 2374 3154 2377 4690 2378 2642 2385 4434 2401
+ 4306 2435 6194 2437 5170 2438 3122 2441 4658 2442 2610 2449 4402 2465 4274
+ 2497 4210 2567 7178 2571 6666 2573 5642 2574 3594 2579 6410 2581 5386 2582
+ 3338 2585 4874 2586 2826 2595 6282 2597 5258 2598 3210 2601 4746 2602 2698
+ 2609 4490 2627 6218 2629 5194 2630 3146 2633 4682 2641 4426 2657 4298 2691
+ 6186 2693 5162 2694 3114 2697 4650 2705 4394 2721 4266 2753 4202 2819 6170
+ 2821 5146 2822 3098 2825 4634 2833 4378 2849 4250 2881 4186 2945 4154 3079
+ 7174 3083 6662 3085 5638 3086 3590 3091 6406 3093 5382 3094 3334 3097 4870
+ 3107 6278 3109 5254 3110 3206 3113 4742 3121 4486 3139 6214 3141 5190 3145
+ 4678 3153 4422 3169 4294 3203 6182 3205 5158 3209 4646 3217 4390 3233 4262
+ 3265 4198 3331 6166 3333 5142 3337 4630 3345 4374 3361 4246 3393 4182 3457
+ 4150 3587 6158 3589 5134 3593 4622 3601 4366 3617 4238 3649 4174 3713 4142
+ 3841 4126 4111 7681 4119 7425 4123 6913 4125 5889 4135 7297 4139 6785 4141
+ 5761 4147 6529 4149 5505 4153 4993 4167 7233 4171 6721 4173 5697 4179 6465
+ 4181 5441 4185 4929 4195 6337 4197 5313 4201 4801 4209 4545 4231 7201 4235
+ 6689 4237 5665 4243 6433 4245 5409 4249 4897 4259 6305 4261 5281 4265 4769
+ 4273 4513 4291 6241 4293 5217 4297 4705 4305 4449 4359 7185 4363 6673 4365
+ 5649 4371 6417 4373 5393 4377 4881 4387 6289 4389 5265 4393 4753 4401 4497
+ 4419 6225 4421 5201 4425 4689 4483 6193 4485 5169 4489 4657 4615 7177 4619
+ 6665 4621 5641 4627 6409 4629 5385 4633 4873 4643 6281 4645 5257 4649 4745
+ 4675 6217 4677 5193 4739 6185 4741 5161 4867 6169 4869 5145 5127 7173 5131
+ 6661 5133 5637 5139 6405 5141 5381 5155 6277 5157 5253 5187 6213 5251 6181
+ 5379 6165 5635 6157 6151 7171 6155 6659 6163 6403 6179 6275 6211 5189 4681
+ 4433 4321 3142 2634 2386 2274 1612 1364 1252 856 744 496
] def
/tab213 [
- 3 6144 5 5120 6 3072 9 4608 10 2560 12 1536 17 4352 18
- 2304 20 1280 24 768 33 4224 34 2176 36 1152 40 640 48 384
- 65 4160 66 2112 68 1088 72 576 80 320 96 192 129 4128 130
- 2080 132 1056 136 544 144 288 257 4112 258 2064 260 1040 264 528
- 513 4104 514 2056 516 1032 1025 4100 1026 2052 2049 4098 4097 2050 1028
+ 3 6144 5 5120 6 3072 9 4608 10 2560 12 1536 17 4352 18
+ 2304 20 1280 24 768 33 4224 34 2176 36 1152 40 640 48 384
+ 65 4160 66 2112 68 1088 72 576 80 320 96 192 129 4128 130
+ 2080 132 1056 136 544 144 288 257 4112 258 2064 260 1040 264 528
+ 513 4104 514 2056 516 1032 1025 4100 1026 2052 2049 4098 4097 2050 1028
520 272 160
] def
+} ctxdef
/chars 10 array def
0 1 9 {
/i exch def
codewords i get dup 1286 le {
- tab513 exch get
+ tab513 exch get
} {
tab213 exch 1287 sub get
} ifelse
@@ -8378,6 +11815,7 @@ begin
} for
% Conversion from characters to the OneCode encoding
+{
/barmap [
7 2 4 3 1 10 0 0 9 12 2 8 5 5 6 11 8 9 3 1
0 1 5 12 2 5 1 8 4 4 9 11 6 3 8 10 3 9 7 6
@@ -8393,8 +11831,9 @@ begin
5 4 0 11 1 5 2 2 9 1 4 12 8 3 6 6 7 0 3 7
4 7 7 5 0 12 1 11 2 9 9 0 6 8 5 3 3 10 8 2
] def
+} ctxdef
- /bbs 65 array def
+ /bbs 65 array def
/bhs 65 array def
0 1 64 {
/i exch def
@@ -8406,18 +11845,18 @@ begin
} if
dec not asc and {
bbs i 3 height mul 8 div put
- bhs i 5 height mul 8 div put
+ bhs i 5 height mul 8 div put
} if
dec asc not and {
bbs i 0 height mul 8 div put
- bhs i 5 height mul 8 div put
+ bhs i 5 height mul 8 div put
} if
dec asc and {
bbs i 0 height mul 8 div put
- bhs i 8 height mul 8 div put
+ bhs i 8 height mul 8 div put
} if
} for
-
+
% Return the arguments
<<
/ren //renlinear
@@ -8426,7 +11865,7 @@ begin
/sbs [bhs length 1 sub {1.44 1.872} repeat 1.44]
/txt txt
/textxalign (left)
- /textfont /NimbusSanL-Regu
+ /textfont /Helvetica
/textyoffset 1
/textxoffset -0.3
/opt options
@@ -8434,9 +11873,13 @@ begin
dontdraw not //renlinear if
+ //unloadctx exec
+
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/onecode dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -8445,15 +11888,17 @@ end
% --END ENCODER onecode--
% --BEGIN ENCODER postnet--
-% --REQUIRES preamble raiseerror renlinear--
+% --REQUIRES preamble loadctx unloadctx raiseerror renlinear--
% --DESC: USPS POSTNET
% --EXAM: 01234
% --EXOP: includetext includecheckintext
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp postnet 0.0 2017040400 73030 72820
-%%BeginData: 140 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp postnet 0.0 2022082100 70644 66913
+%%BeginData: 151 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
+dup /loadctx dup /uk.co.terryburton.bwipp findresource put
+dup /unloadctx dup /uk.co.terryburton.bwipp findresource put
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
begin
@@ -8464,15 +11909,16 @@ begin
/options exch def % We are given an option string
/barcode exch def % We are given a barcode string
+ /ctx null def
/dontdraw false def
/includetext false def % Enable/disable text
/validatecheck false def
/includecheckintext false def
- /textfont /NimbusMonL-Regu def
+ /textfont /Courier def
/textsize 10 def
/textyoffset -7 def
/height 0.125 def
-
+
% Parse the input options
options type /stringtype eq {
1 dict begin
@@ -8483,12 +11929,14 @@ begin
currentdict end /options exch def
} if
options {def} forall
-
+
/textfont textfont cvlit def
/textsize textsize cvr def
/textyoffset textyoffset cvr def
/height height cvr def
-
+
+ /postnet //loadctx exec
+
/barlen barcode length validatecheck {1 sub} if def
% Validate the input
@@ -8501,9 +11949,18 @@ begin
} if
} forall
+{
% Create a string of the available characters
/barchars (0123456789) def
+ % Create an array containing the character mappings
+ /encs
+ [ (55222) (22255) (22525) (22552) (25225)
+ (25252) (25522) (52225) (52252) (52522)
+ (5) (5)
+ ] def
+} ctxdef
+
/checksum 0 def
0 1 barlen 1 sub {
/i exch def
@@ -8517,13 +11974,6 @@ begin
/barcode barcode 0 barlen getinterval def
} if
- % Create an array containing the character mappings
- /encs
- [ (55222) (22255) (22525) (22552) (25225)
- (25252) (25522) (52225) (52252) (52522)
- (5) (5)
- ] def
-
/bhs barlen 5 mul 7 add array def
/txt barlen 1 add array def
@@ -8555,14 +12005,14 @@ begin
/j exch def
heights j enc j 1 getinterval cvi height mul 5 div put
} for
- bhs barlen 5 mul 1 add heights putinterval
-
+ bhs barlen 5 mul 1 add heights putinterval
+
includecheckintext {
txt barlen [barchars checksum 1 getinterval barlen 5 mul 1 add 3.312 mul textyoffset textfont textsize] put
} {
txt barlen [( ) barlen 5 mul 1 add 72 mul 25 div textyoffset textfont textsize] put
} ifelse
-
+
% Put end character
/enc encs 11 get def
/heights enc length array def
@@ -8570,7 +12020,7 @@ begin
/j exch def
heights j enc j 1 getinterval cvi height mul 5 div put
} for
- bhs barlen 5 mul 6 add heights putinterval
+ bhs barlen 5 mul 6 add heights putinterval
% Return the arguments
<<
@@ -8586,9 +12036,13 @@ begin
dontdraw not //renlinear if
+ //unloadctx exec
+
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/postnet dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -8597,15 +12051,17 @@ end
% --END ENCODER postnet--
% --BEGIN ENCODER planet--
-% --REQUIRES preamble raiseerror renlinear--
+% --REQUIRES preamble loadctx unloadctx raiseerror renlinear--
% --DESC: USPS PLANET
% --EXAM: 01234567890
% --EXOP: includetext includecheckintext
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp planet 0.0 2017040400 72826 72620
-%%BeginData: 141 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp planet 0.0 2022082100 70504 66777
+%%BeginData: 152 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
+dup /loadctx dup /uk.co.terryburton.bwipp findresource put
+dup /unloadctx dup /uk.co.terryburton.bwipp findresource put
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
begin
@@ -8616,15 +12072,16 @@ begin
/options exch def % We are given an option string
/barcode exch def % We are given a barcode string
+ /ctx null def
/dontdraw false def
/includetext false def % Enable/disable text
/validatecheck false def
/includecheckintext false def
- /textfont /NimbusMonL-Regu def
+ /textfont /Courier def
/textsize 10 def
/textyoffset -7 def
/height 0.125 def
-
+
% Parse the input options
options type /stringtype eq {
1 dict begin
@@ -8635,12 +12092,14 @@ begin
currentdict end /options exch def
} if
options {def} forall
-
+
/textfont textfont cvlit def
/textsize textsize cvr def
/textyoffset textyoffset cvr def
/height height cvr def
+ /planet //loadctx exec
+
/barlen barcode length validatecheck {1 sub} if def
% Validate the input
@@ -8653,9 +12112,18 @@ begin
} if
} forall
+{
% Create a string of the available characters
/barchars (0123456789) def
+ % Create an array containing the character mappings
+ /encs
+ [ (22555) (55522) (55252) (55225) (52552)
+ (52525) (52255) (25552) (25525) (25255)
+ (5) (5)
+ ] def
+} ctxdef
+
% Calculate the checksum
/checksum 0 def
0 1 barlen 1 sub {
@@ -8670,13 +12138,6 @@ begin
/barcode barcode 0 barlen getinterval def
} if
- % Create an array containing the character mappings
- /encs
- [ (22555) (55522) (55252) (55225) (52552)
- (52525) (52255) (25552) (25525) (25255)
- (5) (5)
- ] def
-
/bhs barlen 5 mul 7 add array def
/txt barlen 1 add array def
@@ -8708,14 +12169,14 @@ begin
/j exch def
heights j enc j 1 getinterval cvi height mul 5 div put
} for
- bhs barlen 5 mul 1 add heights putinterval
-
+ bhs barlen 5 mul 1 add heights putinterval
+
includecheckintext {
txt barlen [barchars checksum 1 getinterval barlen 5 mul 1 add 3.312 mul textyoffset textfont textsize] put
} {
txt barlen [( ) barlen 5 mul 1 add 72 mul 25 div textyoffset textfont textsize] put
} ifelse
-
+
% Put end character
/enc encs 11 get def
/heights enc length array def
@@ -8723,7 +12184,7 @@ begin
/j exch def
heights j enc j 1 getinterval cvi height mul 5 div put
} for
- bhs barlen 5 mul 6 add heights putinterval
+ bhs barlen 5 mul 6 add heights putinterval
% Return the arguments
<<
@@ -8739,9 +12200,13 @@ begin
dontdraw not //renlinear if
+ //unloadctx exec
+
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/planet dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -8750,15 +12215,17 @@ end
% --END ENCODER planet--
% --BEGIN ENCODER royalmail--
-% --REQUIRES preamble raiseerror renlinear--
+% --REQUIRES preamble loadctx unloadctx raiseerror renlinear--
% --DESC: Royal Mail 4 State Customer Code
% --EXAM: LE28HS9Z
% --EXOP: includetext barcolor=FF0000
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp royalmail 0.0 2017040400 73773 73626
-%%BeginData: 145 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp royalmail 0.0 2022082100 71475 67703
+%%BeginData: 156 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
+dup /loadctx dup /uk.co.terryburton.bwipp findresource put
+dup /unloadctx dup /uk.co.terryburton.bwipp findresource put
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
begin
@@ -8769,15 +12236,16 @@ begin
/options exch def % We are given an option string
/barcode exch def % We are given a barcode string
+ /ctx null def
/dontdraw false def
/includetext false def % Enable/disable text
/validatecheck false def
/includecheckintext false def
- /textfont /NimbusMonL-Regu def
+ /textfont /Courier def
/textsize 10 def
/textyoffset -7 def
/height 0.175 def
-
+
% Parse the input options
options type /stringtype eq {
1 dict begin
@@ -8788,17 +12256,32 @@ begin
currentdict end /options exch def
} if
options {def} forall
-
+
/textfont textfont cvlit def
/textsize textsize cvr def
/textyoffset textyoffset cvr def
/height height cvr def
+ /royalmail //loadctx exec
+
+{
% Create a string of the available characters
/barchars (ZUVWXY501234B6789AHCDEFGNIJKLMTOPQRS) def
/charvals 36 dict def
0 1 35 {charvals exch dup barchars exch 1 getinterval exch put} for
+ % Create an array containing the character mappings
+ /encs
+ [ (3300) (2211) (2301) (2310) (3201) (3210)
+ (1122) (0033) (0123) (0132) (1023) (1032)
+ (1302) (0213) (0303) (0312) (1203) (1212)
+ (1320) (0231) (0321) (0330) (1221) (1230)
+ (3102) (2013) (2103) (2112) (3003) (3012)
+ (3120) (2031) (2121) (2130) (3021) (3030)
+ (2) (3)
+ ] def
+} ctxdef
+
% Validate the input
0 1 barcode length 1 sub {
barcode exch 1 getinterval charvals exch known not {
@@ -8814,7 +12297,7 @@ begin
/i exch def
/indx charvals barcode i 1 getinterval get def
/checksumrow checksumrow indx 6 idiv add def
- /checksumcol checksumcol indx 6 mod add def
+ /checksumcol checksumcol indx 6 mod add def
} for
/checksum checksumrow 6 mod 6 mul checksumcol 6 mod add def
validatecheck {
@@ -8824,23 +12307,12 @@ begin
/barcode barcode 0 barlen getinterval def
} if
- % Create an array containing the character mappings
- /encs
- [ (3300) (2211) (2301) (2310) (3201) (3210)
- (1122) (0033) (0123) (0132) (1023) (1032)
- (1302) (0213) (0303) (0312) (1203) (1212)
- (1320) (0231) (0321) (0330) (1221) (1230)
- (3102) (2013) (2103) (2112) (3003) (3012)
- (3120) (2031) (2121) (2130) (3021) (3030)
- (2) (3)
- ] def
-
/encstr barlen 4 mul 6 add string def
/txt barlen 1 add array def
% Put start character
encstr 0 encs 36 get putinterval
-
+
0 1 barlen 1 sub {
/i exch def
/indx charvals barcode i 1 getinterval get def
@@ -8855,11 +12327,11 @@ begin
} {
txt barlen [( ) barlen 4 mul 1 add 3.312 mul textyoffset textfont textsize] put
} ifelse
-
+
% Put end character
- encstr barlen 4 mul 5 add encs 37 get putinterval
+ encstr barlen 4 mul 5 add encs 37 get putinterval
- /bbs encstr length array def
+ /bbs encstr length array def
/bhs encstr length array def
0 1 encstr length 1 sub {
/i exch def
@@ -8881,7 +12353,7 @@ begin
bhs i 8 height mul 8 div put
} if
} for
-
+
% Return the arguments
<<
/ren //renlinear
@@ -8896,9 +12368,13 @@ begin
dontdraw not //renlinear if
+ //unloadctx exec
+
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/royalmail dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -8907,15 +12383,17 @@ end
% --END ENCODER royalmail--
% --BEGIN ENCODER auspost--
-% --REQUIRES preamble raiseerror renlinear--
+% --REQUIRES preamble loadctx unloadctx raiseerror renlinear--
% --DESC: AusPost 4 State Customer Code
% --EXAM: 5956439111ABA 9
% --EXOP: includetext custinfoenc=character
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp auspost 0.0 2017040400 85865 85800
-%%BeginData: 202 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp auspost 0.0 2022082100 82406 78597
+%%BeginData: 215 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
+dup /loadctx dup /uk.co.terryburton.bwipp findresource put
+dup /unloadctx dup /uk.co.terryburton.bwipp findresource put
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
begin
@@ -8926,14 +12404,15 @@ begin
/options exch def % We are given an option string
/barcode exch def % We are given a barcode string
+ /ctx null def
/dontdraw false def
/includetext false def % Enable/disable text
- /textfont /NimbusMonL-Regu def
+ /textfont /Courier def
/textsize 10 def
/textyoffset -7 def
/height 0.175 def
/custinfoenc (character) def
-
+
% Parse the input options
options type /stringtype eq {
1 dict begin
@@ -8944,13 +12423,16 @@ begin
currentdict end /options exch def
} if
options {def} forall
-
+
/textfont textfont cvlit def
/textsize textsize cvr def
/textyoffset textyoffset cvr def
/height height cvr def
+ /ausport //loadctx exec
+
% Create an array containing the character mappings
+{
/encs
[ (000) (001) (002) (010) (011) (012) (020) (021)
(022) (100) (101) (102) (110) (111) (112) (120)
@@ -8966,7 +12448,8 @@ begin
% Create a string of the available characters
/barchars (ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz #) def
-
+} ctxdef
+
/barlen barcode length def
barcode 0 2 getinterval (11) eq {37} if
barcode 0 2 getinterval (45) eq {37} if
@@ -8980,57 +12463,58 @@ begin
% Encode the FCC
0 1 1 {
- /i exch def
+ /i exch def
encs barcode i 1 getinterval cvi 64 add get
encstr i 2 mul 2 add 3 2 roll putinterval
} for
-
+
% Encode the DPID
2 1 9 {
- /i exch def
+ /i exch def
encs barcode i 1 getinterval cvi 64 add get
encstr i 2 mul 2 add 3 2 roll putinterval
txt i 2 sub [barcode i 1 getinterval i 2 sub 2 mul 6 add 3.312 mul textyoffset textfont textsize] put
} for
-
- % Encode the customer information
+
+ % Encode the customer information
custinfoenc (numeric) eq {
0 1 barlen 11 sub {
/i exch def
encs barcode i 10 add 1 getinterval cvi 64 add get
encstr i 2 mul 22 add 3 2 roll putinterval
txt i 8 add [barcode i 10 add 1 getinterval i 2 mul 22 add 3.312 mul textyoffset textfont textsize] put
- } for
+ } for
/ciflen barlen 10 sub 2 mul def
} {
0 1 barlen 11 sub {
- /i exch def
+ /i exch def
barcode i 10 add 1 getinterval barchars exch search
- pop
- length /indx exch def
- pop pop
- /enc encs indx get def
+ pop
+ length /indx exch def
+ pop pop
+ /enc encs indx get def
encstr i 3 mul 22 add enc putinterval
txt i 8 add [barcode i 10 add 1 getinterval i 3 mul 22 add 3.312 mul textyoffset textfont textsize] put
- } for
+ } for
/ciflen barlen 10 sub 3 mul def
} ifelse
% Add any filler characters
- 22 ciflen add 1 encstr length 14 sub {
+ 22 ciflen add 1 encstr length 14 sub {
encstr exch encs 75 get putinterval
} for
-
+
% Create the 64x64 Reed-Solomon table
+{
/rstable 64 64 mul array def
rstable 0 [ 64 {0} repeat ] putinterval
rstable 64 [ 0 1 63 {} for ] putinterval
/prev 1 def
- 64 {
+ 64 {
/next prev 1 bitshift def
next 64 and 0 ne {
/next next 67 xor def
- } if
+ } if
0 1 63 {
/j exch def
/nextcell {rstable 64 next mul j add} def
@@ -9041,7 +12525,8 @@ begin
} for
/prev next def
} repeat
-
+} ctxdef
+
% Calculate the Reed-Solomon codes for triples
/rscodes encstr length 16 sub 3 idiv 4 add array def
rscodes 0 [ 4 {0} repeat ] putinterval
@@ -9050,9 +12535,9 @@ begin
rscodes rscodes length i 2 sub 3 idiv sub 1 sub
encstr i 1 getinterval cvi 16 mul
encstr i 1 add 1 getinterval cvi 4 mul add
- encstr i 2 add 1 getinterval cvi add
+ encstr i 2 add 1 getinterval cvi add
put
- } for
+ } for
rscodes length 5 sub -1 0 {
/i exch def
0 1 4 {
@@ -9068,12 +12553,12 @@ begin
/enc rscodes 3 i sub get 4 3 string cvrs def
checkcode i 3 mul 3 enc length sub add enc putinterval
} for
-
+
% Put checkcode and end characters
encstr encstr length 14 sub checkcode putinterval
- encstr encstr length 2 sub encs 74 get putinterval
+ encstr encstr length 2 sub encs 74 get putinterval
- /bbs encstr length array def
+ /bbs encstr length array def
/bhs encstr length array def
0 1 encstr length 1 sub {
/i exch def
@@ -9094,8 +12579,8 @@ begin
bbs i 3 height mul 8 div put
bhs i 2 height mul 8 div put
} if
- } for
-
+ } for
+
% Return the arguments
<<
/ren //renlinear
@@ -9110,9 +12595,13 @@ begin
dontdraw not //renlinear if
+ //unloadctx exec
+
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/auspost dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -9121,15 +12610,17 @@ end
% --END ENCODER auspost--
% --BEGIN ENCODER kix--
-% --REQUIRES preamble raiseerror renlinear--
+% --REQUIRES preamble loadctx unloadctx raiseerror renlinear--
% --DESC: Royal Dutch TPG Post KIX
% --EXAM: 1231FZ13XHS
% --EXOP: includetext
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp kix 0.0 2017040400 67923 64189
-%%BeginData: 111 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp kix 0.0 2022082100 66705 63002
+%%BeginData: 122 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
+dup /loadctx dup /uk.co.terryburton.bwipp findresource put
+dup /unloadctx dup /uk.co.terryburton.bwipp findresource put
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
begin
@@ -9140,13 +12631,14 @@ begin
/options exch def % We are given an option string
/barcode exch def % We are given a barcode string
+ /ctx null def
/dontdraw false def
/includetext false def % Enable/disable text
- /textfont /NimbusMonL-Regu def
+ /textfont /Courier def
/textsize 10 def
/textyoffset -7 def
/height 0.175 def
-
+
% Parse the input options
options type /stringtype eq {
1 dict begin
@@ -9157,26 +12649,30 @@ begin
currentdict end /options exch def
} if
options {def} forall
-
+
/textfont textfont cvlit def
/textsize textsize cvr def
/textyoffset textyoffset cvr def
/height height cvr def
-
+
+ /kix //loadctx exec
+
+{
% Create an array containing the character mappings
/encs
[ (0033) (0123) (0132) (1023) (1032) (1122)
- (0213) (0303) (0312) (1203) (1212) (1302)
+ (0213) (0303) (0312) (1203) (1212) (1302)
(0231) (0321) (0330) (1221) (1230) (1320)
(2013) (2103) (2112) (3003) (3012) (3102)
- (2031) (2121) (2130) (3021) (3030) (3120)
- (2211) (2301) (2310) (3201) (3210) (3300)
+ (2031) (2121) (2130) (3021) (3030) (3120)
+ (2211) (2301) (2310) (3201) (3210) (3300)
] def
% Create a string of the available characters
/barchars (0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ) def
/charvals 36 dict def
0 1 35 {charvals exch dup barchars exch 1 getinterval exch put} for
+} ctxdef
% Validate the input
0 1 barcode length 1 sub {
@@ -9188,7 +12684,7 @@ begin
/barlen barcode length def
/encstr barlen 4 mul string def
/txt barlen array def
-
+
0 1 barlen 1 sub {
/i exch def
/indx charvals barcode i 1 getinterval get def
@@ -9196,7 +12692,7 @@ begin
txt i [barcode i 1 getinterval i 4 mul 3.312 mul textyoffset textfont textsize] put
} for
- /bbs encstr length array def
+ /bbs encstr length array def
/bhs encstr length array def
0 1 encstr length 1 sub {
/i exch def
@@ -9218,7 +12714,7 @@ begin
bhs i 8 height mul 8 div put
} if
} for
-
+
% Return the arguments
<<
/ren //renlinear
@@ -9233,9 +12729,13 @@ begin
dontdraw not //renlinear if
+ //unloadctx exec
+
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/kix dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -9244,15 +12744,17 @@ end
% --END ENCODER kix--
% --BEGIN ENCODER japanpost--
-% --REQUIRES preamble raiseerror renlinear--
+% --REQUIRES preamble loadctx unloadctx raiseerror renlinear--
% --DESC: Japan Post 4 State Customer Code
% --EXAM: 6540123789-A-K-Z
% --EXOP: includetext includecheckintext
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp japanpost 0.0 2017040400 74350 74174
-%%BeginData: 162 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp japanpost 0.0 2022082100 71516 67819
+%%BeginData: 174 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
+dup /loadctx dup /uk.co.terryburton.bwipp findresource put
+dup /unloadctx dup /uk.co.terryburton.bwipp findresource put
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
begin
@@ -9263,14 +12765,15 @@ begin
/options exch def % We are given an option string
/barcode exch def % We are given a barcode string
+ /ctx null def
/dontdraw false def
/includetext false def % Enable/disable text
/includecheckintext false def
- /textfont /NimbusMonL-Regu def
+ /textfont /Courier def
/textsize 10 def
/textyoffset -7 def
/height 0.175 def
-
+
% Parse the input options
options type /stringtype eq {
1 dict begin
@@ -9281,24 +12784,29 @@ begin
currentdict end /options exch def
} if
options {def} forall
-
+
/textfont textfont cvlit def
/textsize textsize cvr def
/textyoffset textyoffset cvr def
/height height cvr def
-
+
+ /barlen barcode length def
+
+ /japanpost //loadctx exec
+
+{
% Create an array containing the character mappings
% 0123456789- C1C2C3C4C5C6C7C8 ST EN
/encs
[ (300) (330) (312) (132) (321) (303) (123) (231) (213) (033) (030)
- (120) (102) (210) (012) (201) (021) (003) (333)
+ (120) (102) (210) (012) (201) (021) (003) (333)
(31) (13)
] def
% Create a string of the available characters
/barchars (0123456789-ABCDEFGHIJKLMNOPQRSTUVWXYZ) def
- /barlen barcode length def
-
+} ctxdef
+
/encstr 20 1 add 3 mul 4 add string def
/digits 20 array def
/txt barlen 1 add array def
@@ -9407,9 +12915,13 @@ begin
dontdraw not //renlinear if
+ //unloadctx exec
+
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/japanpost dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -9418,15 +12930,17 @@ end
% --END ENCODER japanpost--
% --BEGIN ENCODER msi--
-% --REQUIRES preamble raiseerror renlinear--
+% --REQUIRES preamble loadctx unloadctx raiseerror renlinear--
% --DESC: MSI Modified Plessey
% --EXAM: 0123456789
% --EXOP: includetext includecheck includecheckintext
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp msi 0.0 2017040400 77937 77655
-%%BeginData: 139 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp msi 0.0 2022082100 76335 72636
+%%BeginData: 150 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
+dup /loadctx dup /uk.co.terryburton.bwipp findresource put
+dup /unloadctx dup /uk.co.terryburton.bwipp findresource put
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
begin
@@ -9437,17 +12951,18 @@ begin
/options exch def % We are given an option string
/barcode exch def % We are given a barcode string
+ /ctx null def
/dontdraw false def
/includecheck false def % Enable/disable checkdigit
/includetext false def % Enable/disable text
/includecheckintext false def
/checktype (mod10) def
/badmod11 false def
- /textfont /NimbusMonL-Regu def
+ /textfont /Courier def
/textsize 10 def
/textyoffset -7 def
/height 1 def
-
+
% Parse the input options
options type /stringtype eq {
1 dict begin
@@ -9458,12 +12973,15 @@ begin
currentdict end /options exch def
} if
options {def} forall
-
+
/textfont textfont cvlit def
/textsize textsize cvr def
/textyoffset textyoffset cvr def
/height height cvr def
-
+
+ /msi //loadctx exec
+
+{
% Create an array containing the character mappings
/encs
[ (12121212) (12121221) (12122112) (12122121) (12211212)
@@ -9473,42 +12991,43 @@ begin
% Create a string of the available characters
/barchars (0123456789) def
+} ctxdef
/barlen barcode length def % Length of the code
/txtlen barlen def
/mod10 {
/code exch def
- 0 0 code {48 sub exch 10 mul add exch} forall pop 2 mul
+ 0 0 code {48 sub exch 10 mul add exch} forall pop 2 mul
0 {1 index 10 mod add exch 10 idiv dup 0 eq {pop exit} if exch} loop
0 0 code {48 sub add exch} forall exch pop add
10 mod 10 exch sub 10 mod
code length 1 add string dup 0 code putinterval dup code length 4 -1 roll 48 add put
- } bind def
+ } def
/mod11 {
/code exch def
code length 1 sub code {48 sub exch dup 1 sub exch 6 mod 2 add exch} forall pop
- 0 code length {3 1 roll mul add} repeat
+ 0 code length {3 1 roll mul add} repeat
11 mod 11 exch sub 11 mod
dup 10 eq badmod11 and {
pop code length 2 add string dup 0 code putinterval dup code length (10) putinterval
} {
code length 1 add string dup 0 code putinterval dup code length 4 -1 roll 48 add put
} ifelse
- } bind def
+ } def
/ncrmod11 {
/code exch def
code length 1 sub code {48 sub exch dup 1 sub exch 8 mod 2 add exch} forall pop
- 0 code length {3 1 roll mul add} repeat
+ 0 code length {3 1 roll mul add} repeat
11 mod 11 exch sub 11 mod
dup 10 eq badmod11 and {
pop code length 2 add string dup 0 code putinterval dup code length (10) putinterval
} {
code length 1 add string dup 0 code putinterval dup code length 4 -1 roll 48 add put
} ifelse
- } bind def
+ } def
% Calculate checksum
includecheck {
@@ -9558,9 +13077,13 @@ begin
dontdraw not //renlinear if
+ //unloadctx exec
+
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/msi dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -9569,15 +13092,17 @@ end
% --END ENCODER msi--
% --BEGIN ENCODER plessey--
-% --REQUIRES preamble raiseerror renlinear--
+% --REQUIRES preamble loadctx unloadctx raiseerror renlinear--
% --DESC: Plessey UK
% --EXAM: 01234ABCD
% --EXOP: includetext includecheckintext
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp plessey 0.0 2017040400 75943 75566
-%%BeginData: 146 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp plessey 0.0 2022082100 73069 69275
+%%BeginData: 157 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
+dup /loadctx dup /uk.co.terryburton.bwipp findresource put
+dup /unloadctx dup /uk.co.terryburton.bwipp findresource put
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
begin
@@ -9588,16 +13113,17 @@ begin
/options exch def % We are given an option string
/barcode exch def % We are given a barcode string
+ /ctx null def
/dontdraw false def
/includetext false def % Enable/disable text
/validatecheck false def
/includecheckintext false def
/unidirectional false def
- /textfont /NimbusMonL-Regu def
+ /textfont /Courier def
/textsize 10 def
/textyoffset -7 def
/height 1 def
-
+
% Parse the input options
options type /stringtype eq {
1 dict begin
@@ -9608,17 +13134,30 @@ begin
currentdict end /options exch def
} if
options {def} forall
-
+
/textfont textfont cvlit def
/textsize textsize cvr def
/textyoffset textyoffset cvr def
/height height cvr def
-
+
+ /plessey //loadctx exec
+
% Create a string of the available characters
+{
/barchars (0123456789ABCDEF) def
/charvals 16 dict def
0 1 15 {charvals exch dup barchars exch 1 getinterval exch put} for
+ % Create an array containing the character mappings
+ /encs
+ [ (14141414) (32141414) (14321414) (32321414)
+ (14143214) (32143214) (14323214) (32323214)
+ (14141432) (32141432) (14321432) (32321432)
+ (14143232) (32143232) (14323232) (32323232)
+ (32321432) (541412323) (323)
+ ] def
+} ctxdef
+
% Validate the input
0 1 barcode length 1 sub {
barcode exch 1 getinterval charvals exch known not {
@@ -9666,15 +13205,6 @@ begin
/barcode barcode 0 barlen getinterval def
} if
- % Create an array containing the character mappings
- /encs
- [ (14141414) (32141414) (14321414) (32321414)
- (14143214) (32143214) (14323214) (32323214)
- (14141432) (32141432) (14321432) (32321432)
- (14143232) (32143232) (14323232) (32323232)
- (32321432) (541412323) (323)
- ] def
-
/sbs barlen 8 mul unidirectional {27} {33} ifelse add string def
/txt barlen 2 add array def
@@ -9716,9 +13246,13 @@ begin
dontdraw not //renlinear if
+ //unloadctx exec
+
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/plessey dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -9727,16 +13261,19 @@ end
% --END ENCODER plessey--
% --BEGIN ENCODER telepen--
-% --REQUIRES preamble raiseerror renlinear--
+% --REQUIRES preamble loadctx unloadctx raiseerror parseinput renlinear--
% --DESC: Telepen
% --EXAM: ABCDEF
% --EXOP: includetext
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp telepen 0.0 2017040400 76901 76597
-%%BeginData: 173 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp telepen 0.0 2022082100 71738 74915
+%%BeginData: 174 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
+dup /loadctx dup /uk.co.terryburton.bwipp findresource put
+dup /unloadctx dup /uk.co.terryburton.bwipp findresource put
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /parseinput dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
begin
/telepen {
@@ -9746,10 +13283,11 @@ begin
/options exch def % We are given an option string
/barcode exch def % We are given a barcode string
+ /ctx null def
/numeric false def
/dontdraw false def
/includetext false def % Enable/disable text
- /textfont /NimbusMonL-Regu def
+ /textfont /Courier def
/textsize 10 def
/textyoffset -7 def
/height 1 def
@@ -9771,28 +13309,20 @@ begin
/textyoffset textyoffset cvr def
/height height cvr def
+ /telepen //loadctx exec
+
% Parse ordinals of the form ^NNN to ASCII
- parse {
- /msg barcode length string def
- /j 0 def
- barcode
- { % loop
- (^) search {
- dup msg exch j exch putinterval
- length j add 1 add /j exch def
- pop
- dup 0 3 getinterval cvi msg exch j 1 sub exch put
- dup length 3 sub 3 exch getinterval
- } {
- dup msg exch j exch putinterval
- length j add /j exch def
- /barcode msg 0 j getinterval def
- exit
- } ifelse
- } loop
- } if
+ /fncvals <<
+ /parse parse
+ /parseonly true
+ /parsefnc false
+ >> def
+ /barcode barcode fncvals //parseinput exec def
+ /barlen barcode length def
+ options (parse) undef
% Create an array containing the character mappings
+{
/encs
[ (31313131) (1131313111) (33313111) (1111313131)
(3111313111) (11333131) (13133131) (111111313111)
@@ -9827,6 +13357,7 @@ begin
(3113111113) (11311111111111) (331111111111) (111113111113)
(31111111111111) (111311111113) (131111111113) (1111111111111111)
] def
+} ctxdef
/barlen barcode length def % Length of the code
/sbs barlen 16 mul 48 add string def
@@ -9842,7 +13373,7 @@ begin
{ % loop
i barlen eq {exit} if
numeric { % numeric mode: 00-99 & 0X-9X
- barcode i get 16 gt {
+ barcode i get 16 gt {
/np barcode i 2 getinterval def
np 1 1 getinterval (X) eq { % X in even position amongst digits
/indx np 0 1 getinterval cvi 17 add def
@@ -9901,9 +13432,13 @@ begin
dontdraw not //renlinear if
+ //unloadctx exec
+
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/telepen dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -9912,15 +13447,15 @@ end
% --END ENCODER telepen--
% --BEGIN ENCODER telepennumeric--
-% --REQUIRES preamble raiseerror renlinear telepen--
+% --REQUIRES preamble loadctx unloadctx raiseerror parseinput renlinear telepen--
% --DESC: Telepen Numeric
% --EXAM: 01234567
% --EXOP: includetext
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp telepennumeric 0.0 2017040400 57741 61015
-%%BeginData: 55 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp telepennumeric 0.0 2022082100 63671 63649
+%%BeginData: 58 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
dup /telepen dup /uk.co.terryburton.bwipp findresource put
@@ -9932,14 +13467,15 @@ begin
/options exch def % We are given an option string
/barcode exch def % We are given a barcode string
+ /ctx null def
/dontdraw false def
/includetext false def % Enable/disable text
- /textfont /NimbusMonL-Regu def
+ /textfont /Courier def
/textsize 10 def
/textxoffset 0 def
/textyoffset -7 def
/height 1 def
-
+
% Parse the input options
options type /stringtype eq {
1 dict begin
@@ -9955,9 +13491,9 @@ begin
/textsize textsize cvr def
/textxoffset textxoffset cvr def
/textyoffset textyoffset cvr def
- /height height cvr def
+ /height height cvr def
- % Get the result of encoding with code2of5 with version=industrial
+ % Get the result of encoding with telepen with numeric=true
options (dontdraw) true put
options (numeric) true put
@@ -9967,10 +13503,12 @@ begin
args
dontdraw not //renlinear if
-
+
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/telepennumeric dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -9979,16 +13517,19 @@ end
% --END ENCODER telepennumeric--
% --BEGIN ENCODER posicode--
-% --REQUIRES preamble raiseerror renlinear--
+% --REQUIRES preamble loadctx unloadctx raiseerror parseinput renlinear--
% --DESC: PosiCode
% --EXAM: ABC123
% --EXOP: version=b inkspread=-0.5 parsefnc includetext
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp posicode 0.0 2017040400 128220 127472
-%%BeginData: 423 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp posicode 0.0 2022082100 113193 116240
+%%BeginData: 399 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
+dup /loadctx dup /uk.co.terryburton.bwipp findresource put
+dup /unloadctx dup /uk.co.terryburton.bwipp findresource put
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /parseinput dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
begin
/posicode {
@@ -9998,9 +13539,10 @@ begin
/options exch def % We are given an option string
/barcode exch def % We are given a barcode string
+ /ctx null def
/dontdraw false def
/includetext false def % Enable/disable text
- /textfont /NimbusMonL-Regu def
+ /textfont /Courier def
/textsize 10 def
/textxoffset 0 def
/textyoffset -7 def
@@ -10032,40 +13574,18 @@ begin
/checkoffset checkoffset cvi def
/height height cvr def
- % Parse ordinals of the form ^NNN to ASCII
- parse {
- /msg barcode length string def
- /j 0 def
- barcode
- { % loop
- (^) search {
- dup msg exch j exch putinterval
- length j add 1 add /j exch def
- pop
- dup 0 3 getinterval cvi msg exch j 1 sub exch put
- dup length 3 sub 3 exch getinterval
- } {
- dup msg exch j exch putinterval
- length j add /j exch def
- /barcode msg 0 j getinterval def
- exit
- } ifelse
- } loop
- } if
-
- /barlen barcode length def
+ /posicode //loadctx exec
+{
% Special function characters
- /la0 -1 def /la1 -2 def /la2 -3 def
- /sf0 -4 def /sf1 -5 def /sf2 -6 def
+ /la0 -1 def /la1 -2 def /la2 -3 def
+ /sf0 -4 def /sf1 -5 def /sf2 -6 def
/fn1 -7 def /fn2 -8 def /fn3 -9 def /fn4 -10 def
% Character maps for each state
- <<
- /normal
- [
+ /charmapsnormal [
% 0 1 2 0 1 2 0 1 2
- [ (0) (^) (') ] [ (1) (;) 27 ] [ (2) (<) 28 ] % 0-2
+ [ (0) (^) (') ] [ (1) (;) 27 ] [ (2) (<) 28 ] % 0-2
[ (3) (=) 29 ] [ (4) (>) 30 ] [ (5) (?) 31 ] % 3-5
[ (6) (@) (!) ] [ (7) ([) (") ] [ (8) 92 (#) ] % 6-8
[ (9) (]) (&) ] [ (A) (a) 1 ] [ (B) (b) 2 ] % 9-11
@@ -10081,9 +13601,8 @@ begin
[ ($) ({) (*) ] [ (/) (|) (,) ] [ (+) (}) (:) ] % 39-41
[ (%) (~) fn1 ] [ la1 la0 fn2 ] [ sf1 sf0 fn3 ] % 42-44
[ sf2 sf2 fn4 ] % 45
- ]
- /limited
- [
+ ] def
+ /chapmapslimited [
[ (0) -98 -98 ] [ (1) -98 -98 ] [ (2) -98 -98 ] % 0-2
[ (3) -98 -98 ] [ (4) -98 -98 ] [ (5) -98 -98 ] % 3-5
[ (6) -98 -98 ] [ (7) -98 -98 ] [ (8) -98 -98 ] % 6-8
@@ -10097,10 +13616,10 @@ begin
[ (U) -98 -98 ] [ (V) -98 -98 ] [ (W) -98 -98 ] % 30-32
[ (X) -98 -98 ] [ (Y) -98 -98 ] [ (Z) -98 -98 ] % 33-35
[ (-) -98 -98 ] [ (.) -98 -98 ] % 36-37
- ]
- >>
- version (a) eq version (b) eq or {/normal} {/limited} ifelse get
- /charmaps exch def
+ ] def
+} ctxdef
+
+ /charmaps version (a) eq version (b) eq or {charmapsnormal} {chapmapslimited} ifelse def
% Invert charmaps to give character to value maps for each state
/charvals [
@@ -10112,7 +13631,7 @@ begin
0 1 2 {
/j exch def
encs j get dup type /stringtype eq {0 get} if % convert string to ASCII if required
- charvals j get exch i put
+ charvals j get exch i put
} for
} for
/set0 charvals 0 get def
@@ -10122,10 +13641,10 @@ begin
raw {/encoding (raw) def} if
encoding (raw) eq {
- /cws barlen array def
+ /cws barcode length array def
/i 0 def /j 0 def
{ % loop
- i barlen eq {exit} if
+ i barcode length eq {exit} if
/cw barcode i 1 add 3 getinterval cvi def
cws j cw put
/i i 4 add def
@@ -10135,38 +13654,25 @@ begin
/text () def
} if
- encoding (auto) eq {
+ encoding (auto) eq {
+ % Parse the input
/fncvals <<
+ /parse parse
+ /parsefnc parsefnc
(FNC1) fn1
(FNC2) fn2
(FNC3) fn3
% (FNC4) fn4 Not user accessible as encoded automatically
>> def
-
- % Convert input into bytes accounting for FNC characters
- /msg barlen array def
- /text barlen string def
- /i 0 def /j 0 def {
- i barlen eq {exit} if
- /char barcode i get def
- text j char put
- parsefnc char 94 eq and i barlen 4 sub lt and {
- barcode i 1 add get 94 ne {
- /char fncvals barcode i 1 add 4 getinterval get def
- text j ( ) putinterval
- /i i 4 add def
- } {
- /i i 1 add def
- } ifelse
- } if
- msg j char put
- /i i 1 add def
- /j j 1 add def
- } loop
- /msg msg 0 j getinterval def
+ /msg barcode fncvals //parseinput exec def
/msglen msg length def
- /text text 0 j getinterval def
+
+ /text msglen string def
+ 0 1 msglen 1 sub {
+ /i exch def
+ text i msg i get dup 0 lt { pop 32 } if put
+ } for
% Standard and extended ASCII runlength at position
/numSA [ msglen {0} repeat 0 ] def
@@ -10206,13 +13712,13 @@ begin
/enc {
exch get cws exch j exch put
/j j 1 add def
- } bind def
+ } def
/cws msglen 2 mul array def
/i 0 def /j 0 def /cset (set0) def
{
i msglen eq {exit} if
-
+
{ % common exit
% Read next two characters
@@ -10220,7 +13726,7 @@ begin
/char2 i 1 add msglen lt {msg i 1 add get} {-99} ifelse def
% If current mode is sufficient then directly encode
- cset load char1 known {
+ cset load char1 known {
char1 cset load enc
/i i 1 add def
exit
@@ -10232,7 +13738,7 @@ begin
char1 set2 enc
/i i 1 add def
exit
- } if
+ } if
% If char2 is also not in this set then latch else shift encode
cset load char2 known not {
@@ -10244,27 +13750,28 @@ begin
/cset (set0) def
} ifelse
exit
- } {
+ } {
cset (set0) eq {
sf1 cset load enc
char1 set1 enc
} {
sf0 cset load enc
char1 set0 enc
- } ifelse
+ } ifelse
/i i 1 add def
exit
} ifelse
exit
} loop
-
+
} loop
/cws cws 0 j getinterval def
} if % auto encoding
% Create an array containing the character mappings
- << % ";"=11, "<"=12
+{
+ /encmaps << % ";"=11, "<"=12
/a
[ (141112) (131212) (121312) (111412) (131113)
(121213) (111313) (121114) (111214) (111115)
@@ -10309,16 +13816,19 @@ begin
(131415) (121515) (141216) (131316) (121416)
(131217) (121317) (121218) (141212) (1)
]
- >>
- version get /encs exch def
+ >> def
+} ctxdef
+ encmaps version get /encs exch def
+{
/c2w [
[ 495 330 210 126 70 35 15 5 ]
[ 165 120 84 56 35 20 10 4 ]
- [ 45 36 28 21 15 10 6 3 ]
+ [ 45 36 28 21 15 10 6 3 ]
[ 9 8 7 6 5 4 3 2 ]
[ 1 1 1 1 1 1 1 1 ]
] def
+} ctxdef
/v 0 def
cws {
/cw exch def
@@ -10328,7 +13838,7 @@ begin
} if
/v v -1 bitshift def
/cw cw -1 bitshift def
- } repeat
+ } repeat
} forall
/v v checkoffset add def
@@ -10336,7 +13846,7 @@ begin
/v v 1023 and def
v 824 gt v 853 lt and {
/v v 292 add def
- } if
+ } if
} {
/v v 1023 and 45 add def
} ifelse
@@ -10364,7 +13874,7 @@ begin
} loop
20 0 1 4 {d exch get sub} for
d exch 5 exch put
- version (b) eq version (limitedb) eq or {
+ version (b) eq version (limitedb) eq or {
/d [ d {1 add} forall ] def
} if
/cbs (111111111111) 12 string copy def
@@ -10375,8 +13885,8 @@ begin
% Concatenate the space bar successions
/sbs cws length 6 mul 31 add string def
- encs encs length 2 sub get dup
- sbs exch 0 exch putinterval
+ encs encs length 2 sub get dup
+ sbs exch 0 exch putinterval
length /j exch def
0 1 cws length 1 sub {
/i exch def
@@ -10403,9 +13913,13 @@ begin
dontdraw not //renlinear if
+ //unloadctx exec
+
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/posicode dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -10414,16 +13928,19 @@ end
% --END ENCODER posicode--
% --BEGIN ENCODER codablockf--
-% --REQUIRES preamble raiseerror renmatrix--
+% --REQUIRES preamble loadctx unloadctx raiseerror parseinput renmatrix--
% --DESC: Codablock F
% --EXAM: CODABLOCK F 34567890123456789010040digit
% --EXOP: columns=8
% --RNDR: renmatrix
-%%BeginResource: uk.co.terryburton.bwipp codablockf 0.0 2017040400 157635 163565
-%%BeginData: 520 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp codablockf 0.0 2022082100 134261 137478
+%%BeginData: 501 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
+dup /loadctx dup /uk.co.terryburton.bwipp findresource put
+dup /unloadctx dup /uk.co.terryburton.bwipp findresource put
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /parseinput dup /uk.co.terryburton.bwipp findresource put
dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
begin
/codablockf {
@@ -10433,6 +13950,7 @@ begin
/options exch def
/barcode exch def
+ /ctx null def
/dontdraw false def
/rows -1 def
/columns 8 def
@@ -10457,41 +13975,42 @@ begin
/rowheight rowheight cvi def
/sepheight sepheight cvi def
- columns 4 ge columns 62 le and
- rows 2 ge rows 44 le and rows -1 eq or and {/c columns def} if
+ /c columns 4 ge columns 62 le and {columns} {8} ifelse def
+ /rows rows 2 ge rows 44 le and {rows} {-1} ifelse def
- % Parse ordinals of the form ^NNN to ASCII
- parse {
- /msg barcode length string def
- /j 0 def
- barcode
- { % loop
- (^) search {
- dup msg exch j exch putinterval
- length j add 1 add /j exch def
- pop
- dup 0 3 getinterval cvi msg exch j 1 sub exch put
- dup length 3 sub 3 exch getinterval
- } {
- dup msg exch j exch putinterval
- length j add /j exch def
- /barcode msg 0 j getinterval def
- exit
- } ifelse
- } loop
- } if
+ /codablockf //loadctx exec
- /barlen barcode length def
-
- % Convert input into bytes accounting for FNC characters
+ % Convert input into bytes accounting for FNC characters
/swa -1 def /swb -2 def /swc -3 def /sft -4 def
/fn1 -5 def /fn2 -6 def /fn3 -7 def /fn4 -8 def
/sta -9 def /stp -10 def
+ % Parse the input
+ /fncvals <<
+ /parse parse
+ /parsefnc parsefnc
+ (FNC1) fn1
+% (FNC2) fn2 Not permitted for Codablock F
+ (FNC3) fn3
+% (FNC4) fn4 Not user accessible as encoded automatically
+ >> def
+ /msg barcode fncvals //parseinput exec def
+ /msglen msg length def
+
+ % FNC4 codeword insertion for extended ASCII
+ /msgtmp [] def
+ msg {
+ /char exch def
+ /msgtmp [ msgtmp aload pop char 128 lt {char} {fn4 char 127 and} ifelse ] def
+ } forall
+ /msg msgtmp def
+ /msglen msg length def
+
% Character maps for each state
+{
/charmaps [
% A B C A B C A B C
- [ 32 32 (00) ] [ (!) (!) (01) ] [ (") (") (02) ] % 0-2
+ [ 32 32 (00) ] [ (!) (!) (01) ] [ (") (") (02) ] % 0-2
[ (#) (#) (03) ] [ ($) ($) (04) ] [ (%) (%) (05) ] % 3-5
[ (&) (&) (06) ] [ (') (') (07) ] [ 40 40 (08) ] % 6-8
[ 41 41 (09) ] [ (*) (*) (10) ] [ (+) (+) (11) ] % 9-11
@@ -10527,7 +14046,7 @@ begin
[ swc swc (99) ] [ swb fn4 swb ] [ fn4 swa swa ] % 99-101
[ fn1 fn1 fn1 ] [ sta sta sta ] [ stp stp stp ] % 102-104
] def
-
+
% Invert charmaps to give character to value maps for each state
/charvals [ 105 dict 105 dict 105 dict ] def
0 1 charmaps length 1 sub {
@@ -10536,46 +14055,13 @@ begin
0 1 2 {
/j exch def
encs j get dup type /stringtype eq {0 get} if % convert string to ASCII if required
- charvals j get exch i put
+ charvals j get exch i put
} for
} for
/seta charvals 0 get def
/setb charvals 1 get def
/setc charvals 2 get def
-
- /fncvals <<
- (FNC1) fn1
-% (FNC2) fn2 Not permitted for Codablock F
- (FNC3) fn3
-% (FNC4) fn4 Not user accessible as encoded automatically
- >> def
- /msg barlen array def
- /i 0 def /j 0 def {
- i barlen eq {exit} if
- /char barcode i get def
- parsefnc char 94 eq and i barlen 4 sub lt and {
- barcode i 1 add get 94 ne {
- /char fncvals barcode i 1 add 4 getinterval get def
- /i i 4 add def
- } {
- /i i 1 add def
- } ifelse
- } if
- msg j char put
- /i i 1 add def
- /j j 1 add def
- } loop
- /msg msg 0 j getinterval def
- /msglen msg length def
-
- % FNC4 codeword insertion for extended ASCII
- /msgtmp [] def
- msg {
- /char exch def
- /msgtmp [ msgtmp aload pop char 128 lt {char} {fn4 char 127 and} ifelse ] def
- } forall
- /msg msgtmp def
- /msglen msg length def
+} ctxdef
% Determine digit runlength and characters from given position
/numsscr {
@@ -10593,17 +14079,17 @@ begin
/p p 1 add def
} loop
n s
- } bind def
+ } def
% Encoding for each alphabet
/enca {
seta exch get cws exch j exch put
/j j 1 add def
- } bind def
+ } def
/encb {
setb exch get cws exch j exch put
/j j 1 add def
- } bind def
+ } def
/encc {
dup type /arraytype ne {
setc exch get
@@ -10612,11 +14098,11 @@ begin
} ifelse
cws exch j exch put
/j j 1 add def
- } bind def
+ } def
% Character exclusively in either alphabet A or B
- /anotb {dup seta exch known exch setb exch known not and} bind def
- /bnota {dup setb exch known exch seta exch known not and} bind def
+ /anotb {dup seta exch known exch setb exch known not and} def
+ /bnota {dup setb exch known exch seta exch known not and} def
% Pre-compute relative position of next anotb and next bnota characters
/nextanotb [ msg length {0} repeat 9999 ] def
@@ -10636,8 +14122,8 @@ begin
} for
% Does a-only come before b-only after given position and vice versa
- /abeforeb {dup nextanotb exch get exch nextbnota exch get lt} bind def
- /bbeforea {dup nextbnota exch get exch nextanotb exch get lt} bind def
+ /abeforeb {dup nextanotb exch get exch nextbnota exch get lt} def
+ /bbeforea {dup nextbnota exch get exch nextanotb exch get lt} def
% Add padding to row
/padrow {
@@ -10648,14 +14134,14 @@ begin
cset (setc) eq {swb encc /cset (setb) def exit} if
} loop
} repeat
- } bind def
+ } def
% Convert message to codewords
- /cws c 5 add rows -1 ne {rows} {44} ifelse mul array def
+ /cws c 5 add 44 mul array def
/i 0 def /j 0 def /r 1 def
/lastrow false def {
-
+
lastrow {exit} if
% Add start character and code subset selector
@@ -10672,11 +14158,11 @@ begin
/cset (setc) def
exit
} if
- i abeforeb {
+ i abeforeb {
sft enca
/cset (seta) def
- exit
- } if
+ exit
+ } if
swb enca
/cset (setb) def
exit
@@ -10688,14 +14174,15 @@ begin
/rem c 3 add j c 5 add mod sub def % Codewords to end of row
i msglen eq endofrow or {exit} if
-
+
i numsscr /nums exch def /nchars exch def
+ /remnums nums rem 2 mul gt {rem 2 mul} {nums} ifelse def
% Determine switches and shifts
{ % common exit
- cset (seta) eq cset (setb) eq or nums 4 ge and
+ cset (seta) eq cset (setb) eq or remnums 4 ge and
msg i get fn1 ne and {
- nums 2 mod 0 eq
+ remnums 2 mod 0 eq
rem 3 ge and {
swc cset (seta) eq {enca} {encb} ifelse
/cset (setc) def
@@ -10710,7 +14197,7 @@ begin
} repeat
exit
} if
- nums 2 mod 0 ne
+ remnums 2 mod 0 ne
rem 4 ge and {
msg i get cset (seta) eq {enca} {encb} ifelse
/i i 1 add def
@@ -10728,10 +14215,10 @@ begin
exit
} if
} if
- cset (setb) eq msg i get anotb and
- rem 2 ge and {
+ cset (setb) eq msg i get anotb and
+ rem 2 ge and {
i msglen 1 sub lt {
- i 1 add bbeforea {
+ i 1 add bbeforea {
sft encb
msg i get enca
/i i 1 add def
@@ -10760,7 +14247,7 @@ begin
/i i 1 add def
exit
} if
- cset (setc) eq nums 2 lt and
+ cset (setc) eq remnums 2 lt and
rem 2 ge and {
i abeforeb {
swa encc
@@ -10775,7 +14262,7 @@ begin
/i i 1 add def
exit
} if
-
+
% No switches or latches so try to encode
cset (seta) eq seta msg i get known and
rem 1 ge and {
@@ -10789,14 +14276,14 @@ begin
/i i 1 add def
exit
} if
- cset (setc) eq nums 2 ge and
+ cset (setc) eq remnums 2 ge and
rem 1 ge and {
msg i get fn1 eq {
fn1 encc
/i i 1 add def
} {
msg i 2 getinterval encc
- /i i 2 add def
+ /i i 2 add def
} ifelse
exit
} if
@@ -10810,7 +14297,7 @@ begin
} loop
% Determine whether this is the final row
- r rows eq rows -1 eq or r 1 gt and i msglen eq and rem 2 ge and {
+ r rows ge rows -1 eq or r 1 gt and i msglen eq and rem 2 ge and {
rem 2 sub padrow
/j j 3 add def % Skip symbol and row checksum character positions
stp enca
@@ -10826,13 +14313,15 @@ begin
/cws cws 0 j getinterval def
% Maps for row indicators and symbol checksums
+{
/abmap [
64 1 95 {} for
0 1 15 {} for
26 1 63 {} for
] def
/cmap [ 0 1 85 {} for ] def
-
+} ctxdef
+
% Add symbol check characters to last row
/chkmsg msglen array def
/j 0 def
@@ -10872,6 +14361,7 @@ begin
} for
% Create an array containing the character mappings
+{
/encs
[ (212222) (222122) (222221) (121223) (121322) (131222) (122213)
(122312) (132212) (221213) (221312) (231212) (112232) (122132)
@@ -10889,6 +14379,7 @@ begin
(412121) (111143) (111341) (131141) (114113) (114311) (411113)
(411311) (113141) (114131) (311141) (411131) (211412) (2331112)
] def
+} ctxdef
% Derive the bits for each row
/rowbits r array def
@@ -10897,7 +14388,7 @@ begin
/sbs [
cws i c 5 add mul c 5 add getinterval {
encs exch get {48 sub} forall
- } forall
+ } forall
] def
mark
0 sbs {1 index 1 eq {{0}} {{1}} ifelse repeat} forall
@@ -10921,7 +14412,7 @@ begin
rowheight {rowbits r 1 sub get aload pop} repeat
symwid sepheight mul {1} repeat
] def
-
+
% Return the arguments
<<
/ren //renmatrix
@@ -10935,9 +14426,13 @@ begin
dontdraw not //renmatrix if
+ //unloadctx exec
+
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/codablockf dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -10946,16 +14441,19 @@ end
% --END ENCODER codablockf--
% --BEGIN ENCODER code16k--
-% --REQUIRES preamble raiseerror renmatrix--
+% --REQUIRES preamble loadctx unloadctx raiseerror parseinput renmatrix--
% --DESC: Code 16K
% --EXAM: Abcd-1234567890-wxyZ
% --EXOP:
% --RNDR: renmatrix
-%%BeginResource: uk.co.terryburton.bwipp code16k 0.0 2017040400 189660 202445
-%%BeginData: 744 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp code16k 0.0 2022082100 158983 161726
+%%BeginData: 725 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
+dup /loadctx dup /uk.co.terryburton.bwipp findresource put
+dup /unloadctx dup /uk.co.terryburton.bwipp findresource put
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /parseinput dup /uk.co.terryburton.bwipp findresource put
dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
begin
/code16k {
@@ -10965,6 +14463,7 @@ begin
/options exch def
/barcode exch def
+ /ctx null def
/dontdraw false def
/mode -1 def
/pos -1 def
@@ -10993,42 +14492,22 @@ begin
/rowheight rowheight cvi def
/sepheight sepheight cvi def
- pos -1 ne {/rows 16 def} if
+ /code16k //loadctx exec
- % Parse ordinals of the form ^NNN to ASCII
- parse {
- /msg barcode length string def
- /j 0 def
- barcode
- { % loop
- (^) search {
- dup msg exch j exch putinterval
- length j add 1 add /j exch def
- pop
- dup 0 3 getinterval cvi msg exch j 1 sub exch put
- dup length 3 sub 3 exch getinterval
- } {
- dup msg exch j exch putinterval
- length j add /j exch def
- /barcode msg 0 j getinterval def
- exit
- } ifelse
- } loop
- } if
-
- /barlen barcode length def
+ pos -1 ne {/rows 16 def} if
- % Convert input into bytes accounting for FNC characters
- /swa -1 def /swb -2 def /swc -3 def
- /sa1 -4 def /sb1 -5 def /sc1 -6 def
- /sa2 -7 def /sb2 -8 def /sc2 -9 def
+ % Convert input into bytes accounting for FNC characters
+{
+ /swa -1 def /swb -2 def /swc -3 def
+ /sa1 -4 def /sb1 -5 def /sc1 -6 def
+ /sa2 -7 def /sb2 -8 def /sc2 -9 def
/pad -10 def /sb3 -11 def /sc3 -12 def
/fn1 -13 def /fn2 -14 def /fn3 -15 def /fn4 -16 def
% Character maps for each state
/charmaps [
% A B C A B C A B C
- [ 32 32 (00) ] [ (!) (!) (01) ] [ (") (") (02) ] % 0-2
+ [ 32 32 (00) ] [ (!) (!) (01) ] [ (") (") (02) ] % 0-2
[ (#) (#) (03) ] [ ($) ($) (04) ] [ (%) (%) (05) ] % 3-5
[ (&) (&) (06) ] [ (') (') (07) ] [ 40 40 (08) ] % 6-8
[ 41 41 (09) ] [ (*) (*) (10) ] [ (+) (+) (11) ] % 9-11
@@ -11064,8 +14543,8 @@ begin
[ swc swc (99) ] [ swb fn4 swb ] [ fn4 swa swa ] % 99-101
[ fn1 fn1 fn1 ] [ pad pad pad ] [ sb2 sa2 sb1 ] % 102-104
[ sc2 sc2 sb2 ] [ sc3 sc3 sb3 ] % 105-106
- ] def
-
+ ] def
+
% Invert charmaps to give character to value maps for each state
/charvals [ 109 dict 109 dict 109 dict ] def
0 1 charmaps length 1 sub {
@@ -11074,56 +14553,44 @@ begin
0 1 2 {
/j exch def
encs j get dup type /stringtype eq {0 get} if % convert string to ASCII if required
- charvals j get exch i put
+ charvals j get exch i put
} for
} for
/seta charvals 0 get def
/setb charvals 1 get def
/setc charvals 2 get def
+} ctxdef
raw {/encoding (raw) def} if
encoding (raw) eq {
- /cws barlen array def
+ /cws barcode length array def
/i 0 def /j 0 def
{ % loop
- i barlen eq {exit} if
+ i barcode length eq {exit} if
/cw barcode i 1 add 3 getinterval cvi def
cws j cw put
/i i 4 add def
/j j 1 add def
} loop
/cws cws 0 j getinterval def
- /text () def
} if
- encoding (auto) eq {
+ encoding (auto) eq {
+ % Parse the input
/fncvals <<
+ /parse parse
+ /parsefnc parsefnc
+ /eci true
(FNC1) fn1
(FNC2) fn2
(FNC3) fn3
% (FNC4) fn4 Not user accessible as encoded automatically
>> def
- /msg barlen array def
- /i 0 def /j 0 def {
- i barlen eq {exit} if
- /char barcode i get def
- parsefnc char 94 eq and i barlen 4 sub lt and {
- barcode i 1 add get 94 ne {
- /char fncvals barcode i 1 add 4 getinterval get def
- /i i 4 add def
- } {
- /i i 1 add def
- } ifelse
- } if
- msg j char put
- /i i 1 add def
- /j j 1 add def
- } loop
- /msg msg 0 j getinterval def
+ /msg barcode fncvals //parseinput exec def
/msglen msg length def
-
+
% Standard and extended ASCII runlength at position
/numSA [ msglen {0} repeat 0 ] def
/numEA [ msglen {0} repeat 0 ] def
@@ -11157,7 +14624,7 @@ begin
} for
/msg msgtmp def
/msglen msg length def
-
+
% Determine digit runlength and characters from given position
/numsscr {
/n 0 def /s 0 def
@@ -11174,17 +14641,17 @@ begin
/p p 1 add def
} loop
n s
- } bind def
+ } def
% Encoding for each alphabet
/enca {
seta exch get cws exch j exch put
/j j 1 add def
- } bind def
+ } def
/encb {
setb exch get cws exch j exch put
/j j 1 add def
- } bind def
+ } def
/encc {
dup type /arraytype ne {
setc exch get
@@ -11193,11 +14660,11 @@ begin
} ifelse
cws exch j exch put
/j j 1 add def
- } bind def
+ } def
% Character exclusively in either alphabet A or B
- /anotb {dup seta exch known exch setb exch known not and} bind def
- /bnota {dup setb exch known exch seta exch known not and} bind def
+ /anotb {dup seta exch known exch setb exch known not and} def
+ /bnota {dup setb exch known exch seta exch known not and} def
% Pre-compute relative position of next anotb and next bnota characters
/nextanotb [ msg length {0} repeat 9999 ] def
@@ -11217,11 +14684,11 @@ begin
} for
% Does a-only come before b-only after given position and vice versa
- /abeforeb {dup nextanotb exch get exch nextbnota exch get lt} bind def
- /bbeforea {dup nextbnota exch get exch nextanotb exch get lt} bind def
-
+ /abeforeb {dup nextanotb exch get exch nextbnota exch get lt} def
+ /bbeforea {dup nextbnota exch get exch nextanotb exch get lt} def
+
/cws barcode length 2 mul 3 add array def
-
+
% Select mode and encode first characters
/i 0 def /j 0 def
{ % common exit
@@ -11229,7 +14696,7 @@ begin
pos -1 ne {
% encode one and two
cws 0 pos 10 idiv 1 sub put
- cws 1 pos 10 mod 1 sub put
+ cws 1 pos 10 mod 1 sub put
/j 2 def
/cset (setb) def
/mode 7 def
@@ -11281,7 +14748,7 @@ begin
/i 1 def
exit
} if
- % b . 3+ odd nums => c sb2 encode
+ % b . 3+ odd nums => c sb2 encode
setb msg 0 get known
1 numsscr exch pop dup 3 ge exch 2 mod 1 eq and and {
msg 0 get encb
@@ -11317,9 +14784,9 @@ begin
{ % Encode remainder
i msglen eq {exit} if
-
+
i numsscr /nums exch def /nchars exch def
-
+
% Determine switches and shifts
{ % common exit
cset (seta) eq {
@@ -11353,7 +14820,7 @@ begin
} if
% 4 nums . a => sc2 encode
i msglen 4 sub lt {
- nums 4 eq
+ nums 4 eq
seta msg i 4 add get known and {
sc2 enca
2 {
@@ -11362,15 +14829,15 @@ begin
/i i 1 add def
} {
msg i 2 getinterval encc
- /i i 2 add def
+ /i i 2 add def
} ifelse
} repeat
exit
} if
} if
% 6 nums . a => sc3 encode
- i msglen 6 sub lt {
- nums 6 eq
+ i msglen 6 sub lt {
+ nums 6 eq
seta msg i 6 add get known and {
sc3 enca
3 {
@@ -11409,7 +14876,7 @@ begin
} if
% anotb . anotb . bnota before anotb => sa2 encode
i msglen 2 sub lt {
- msg i get anotb
+ msg i get anotb
msg i 1 add get anotb and
i 2 add bbeforea and {
sa2 encb
@@ -11468,7 +14935,7 @@ begin
% otherwise => encode
msg i get encb
/i i 1 add def
- exit
+ exit
} if
cset (setc) eq {
% 2+ nums => encode
@@ -11530,7 +14997,7 @@ begin
} if
% b . b . b . 2+ even nums => sb3 encode
i msglen 3 sub lt {
- setb msg i get known
+ setb msg i get known
setb msg i 1 add get known and
setb msg i 2 add get known and
i 3 add numsscr exch pop dup 2 ge exch 2 mod 0 eq and and {
@@ -11539,7 +15006,7 @@ begin
msg i 1 add get encb
msg i 2 add get encb
/i i 3 add def
- exit
+ exit
} if
} if
% anotb before bnota => swa
@@ -11555,13 +15022,14 @@ begin
} if
exit
} loop
-
+
} loop
/cws cws 0 j getinterval def
} if % auto encoding
-
+
% Basic metrics for the each symbol
- % r dcws
+ % r dcws
+{
/metrics [
[ 2 7 ]
[ 3 12 ]
@@ -11579,6 +15047,7 @@ begin
[ 15 72 ]
[ 16 77 ]
] def
+} ctxdef
% Select metrics of an appropriate symbol
/urows rows def
@@ -11601,13 +15070,14 @@ begin
/cws [ r 2 sub 7 mul mode add cws aload pop ] def
% Calculate the check characters
- 0 0 1 dcws {dup 2 add exch cws exch get mul add} for
+ 0 0 1 dcws {dup 2 add exch cws exch get mul add} for
107 mod /c1 exch def
- 0 0 1 dcws {dup 1 add exch cws exch get mul add} for
+ 0 0 1 dcws {dup 1 add exch cws exch get mul add} for
c1 dcws 2 add mul add 107 mod /c2 exch def
/cws [ cws aload pop c1 c2 ] def
% Create an array containing the character mappings
+{
/encs
[ (212222) (222122) (222221) (121223) (121322) (131222) (122213)
(122312) (132212) (221213) (221312) (231212) (112232) (122132)
@@ -11628,7 +15098,7 @@ begin
] def
% Start/stop character encodings
- /startencs [
+ /startencs [
(3211) (2221) (2122) (1411) (1132) (1231) (1114) (3112)
(3211) (2221) (2122) (1411) (1132) (1231) (1114) (3112)
] def
@@ -11640,12 +15110,14 @@ begin
(2122) (1411) (1132) (1231) (1114) (3112) (1132) (1231)
(1114) (3112) (3211) (2221) (2122) (1411) (3211) (2221)
] def
+} ctxdef
+
pos -1 eq pos 10 idiv 2 mod 1 eq or {
/stopencs stopencsodd def
} {
/stopencs stopencseven def
} ifelse
-
+
% Derive the bits for each row
/rowbits r array def
0 1 r 1 sub {
@@ -11656,7 +15128,7 @@ begin
1
cws i 5 mul 5 getinterval {
encs exch get {48 sub} forall
- } forall
+ } forall
stopencs i get {48 sub} forall
1
] def
@@ -11677,7 +15149,7 @@ begin
rowheight {rowbits r 1 sub get aload pop} repeat
81 sepheight mul {1} repeat
] def
-
+
% Return the arguments
<<
/ren //renmatrix
@@ -11691,9 +15163,13 @@ begin
dontdraw not //renmatrix if
+ //unloadctx exec
+
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/code16k dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -11702,16 +15178,19 @@ end
% --END ENCODER code16k--
% --BEGIN ENCODER code49--
-% --REQUIRES preamble raiseerror renmatrix--
+% --REQUIRES preamble loadctx unloadctx raiseerror parseinput renmatrix--
% --DESC: Code 49
% --EXAM: MULTIPLE ROWS IN CODE 49
% --EXOP:
% --RNDR: renmatrix
-%%BeginResource: uk.co.terryburton.bwipp code49 0.0 2017040400 291373 297357
-%%BeginData: 1076 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp code49 0.0 2022082100 261468 264326
+%%BeginData: 1063 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
+dup /loadctx dup /uk.co.terryburton.bwipp findresource put
+dup /unloadctx dup /uk.co.terryburton.bwipp findresource put
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /parseinput dup /uk.co.terryburton.bwipp findresource put
dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
begin
/code49 {
@@ -11721,6 +15200,7 @@ begin
/options exch def
/barcode exch def
+ /ctx null def
/dontdraw false def
/mode -1 def
/pos -1 def
@@ -11747,55 +15227,24 @@ begin
/rowheight rowheight cvi def
/sepheight sepheight cvi def
- % Parse ordinals of the form ^NNN to ASCII
- parse {
- /msg barcode length string def
- /j 0 def
- barcode
- { % loop
- (^) search {
- dup msg exch j exch putinterval
- length j add 1 add /j exch def
- pop
- dup 0 3 getinterval cvi msg exch j 1 sub exch put
- dup length 3 sub 3 exch getinterval
- } {
- dup msg exch j exch putinterval
- length j add /j exch def
- /barcode msg 0 j getinterval def
- exit
- } ifelse
- } loop
- } if
-
- /barlen barcode length def
+ /code49 //loadctx exec
- % Convert input into bytes accounting for FNC characters
+{
/s1 -1 def /s2 -2 def /fn1 -3 def /fn2 -4 def /fn3 -5 def /ns -6 def
+} ctxdef
+
+ % Parse the input
/fncvals <<
+ /parse parse
+ /parsefnc parsefnc
(FNC1) fn1
(FNC2) fn2
(FNC3) fn3
>> def
- /msg barlen array def
- /i 0 def /j 0 def {
- i barlen eq {exit} if
- /char barcode i get def
- parsefnc char 94 eq and i barlen 4 sub lt and {
- barcode i 1 add get 94 ne {
- /char fncvals barcode i 1 add 4 getinterval get def
- /i i 4 add def
- } {
- /i i 1 add def
- } ifelse
- } if
- msg j char put
- /i i 1 add def
- /j j 1 add def
- } loop
- /msg msg 0 j getinterval def
+ /msg barcode fncvals //parseinput exec def
/msglen msg length def
+{
% Character encodings
/charmap [
(0) (1) (2) (3) (4) (5) (6) (7) (8) (9)
@@ -11809,9 +15258,9 @@ begin
/charvals 49 dict def
0 1 48 {
/i exch def
- charmap i get
+ charmap i get
dup type /stringtype eq {0 get} if % convert string to ASCII if required
- charvals exch i put
+ charvals exch i put
} for
% Shifted character encodings
@@ -11835,13 +15284,14 @@ begin
charvals i [ charvals s2 get charvals c2 get ] put
} if
} for
+} ctxdef
/encodealpha {
charvals exch get
dup type /arraytype ne {1 array astore} if
dup cws exch j exch putinterval
length j add /j exch def
- } bind def
+ } def
/base48 {
0 exch {48 sub exch 10 mul add} forall
@@ -11849,7 +15299,7 @@ begin
[ exch dup length 1 sub -1 0 {1 index exch get exch} for pop ]
dup cws exch j exch putinterval
length j add /j exch def
- } bind def
+ } def
/encodenumeric {
/nums exch def
@@ -11864,7 +15314,7 @@ begin
3 [49 48 nums 0 4 getinterval aload pop] base48
2 nums 4 3 getinterval base48
} if
- } bind def
+ } def
% Pre-compute alphanumeric and numeric runlengths
/numericruns [ msglen {0} repeat 0 ] def
@@ -11893,20 +15343,23 @@ begin
/cws msglen 2 mul 1 add array def
/method (alpha) def /i -1 def /j -1 def
+{
+ /posval [
+ 12 22
+ 13 23 33
+ 14 24 34 44
+ 15 25 35 45 55
+ 16 26 36 46 56 66
+ 17 27 37 47 57 67 77
+ 18 28 38 48 58 68 78 88
+ 19 29 39 49 59 69 79 89 99
+ ] def
+} ctxdef
+
% Handle start for each mode
- mode 0 eq mode 1 eq or {/method (alpha) def /i 0 def /j 0 def} if
+ mode 0 eq mode 1 eq or {/method (alpha) def /i 0 def /j 0 def} if
mode 2 eq {/method (numeric) def /i 0 def /j 0 def} if
mode 3 eq {
- /posval [
- 12 22
- 13 23 33
- 14 24 34 44
- 15 25 35 45 55
- 16 26 36 46 56 66
- 17 27 37 47 57 67 77
- 18 28 38 48 58 68 78 88
- 19 29 39 49 59 69 79 89 99
- ] def
cws 0 0 1 43 {dup posval exch get pos ne {pop} if} for 1 add put
/method (alpha) def /i 0 def /j 1 def
} if
@@ -11944,7 +15397,8 @@ begin
/cws cws 0 j getinterval def
% Basic metrics for the each symbol
- % r dcws
+ % r dcws
+{
/metrics [
[ 2 9 ]
[ 3 16 ]
@@ -11954,6 +15408,7 @@ begin
[ 7 42 ]
[ 8 49 ]
] def
+} ctxdef
% Select metrics of an appropriate symbol
/urows rows def
@@ -11978,7 +15433,7 @@ begin
0 1 r 2 sub {
/i exch def
/cc cws j 7 getinterval def
- ccs i 8 mul cc putinterval
+ ccs i 8 mul cc putinterval
ccs i 8 mul 7 add 0 cc {add} forall 49 mod put
/j j 7 add def
} for
@@ -11991,21 +15446,23 @@ begin
ccs ccs length 2 sub cr7 put
% Calculate the symbol check characters
+{
[ 1 9 31 26 2 12 17 23 37 18 22 6 27 44 15 43 39
11 13 5 41 33 36 8 4 32 3 19 40 25 29 10 24 30 ]
dup [ exch 20 exch 0 32 getinterval aload pop ] /weightx exch def
dup [ exch 16 exch 1 32 getinterval aload pop ] /weighty exch def
[ exch 38 exch 2 32 getinterval aload pop ] /weightz exch def
+} ctxdef
/calccheck {
/weights exch def
/score 0 def
0 1 r 1 sub 8 mul 2 idiv 1 sub {
/i exch def
- ccs i 2 mul get 49 mul ccs i 2 mul 1 add get add
+ ccs i 2 mul get 49 mul ccs i 2 mul 1 add get add
weights i 1 add get mul /score exch score add def
} for
score
- } bind def
+ } def
/lastrow ccs ccs length 8 sub 8 getinterval def
% wr1 check character
@@ -12017,10 +15474,10 @@ begin
/wr1 lastrow 0 get 49 mul lastrow 1 get add def
% wr2 check character
- cr7 weighty 0 get mul weighty calccheck add
+ cr7 weighty 0 get mul weighty calccheck add
wr1 weighty r 4 mul 3 sub get mul add
2401 mod dup /wr2 exch def
- dup 49 idiv exch 49 mod 2 array astore
+ dup 49 idiv exch 49 mod 2 array astore
lastrow 2 3 -1 roll putinterval
% wr3 check character
@@ -12028,13 +15485,14 @@ begin
wr1 weightx r 4 mul 3 sub get mul add
wr2 weightx r 4 mul 2 sub get mul add
2401 mod
- dup 49 idiv exch 49 mod 2 array astore
+ dup 49 idiv exch 49 mod 2 array astore
lastrow 4 3 -1 roll putinterval
% Place last row check character
ccs ccs length 8 sub 7 getinterval 0 exch {add} forall 49 mod
ccs ccs length 1 sub 3 -1 roll put
+{
/patterns [
[ % Even parity
(11521132) (25112131) (14212132) (25121221) (14221222) (12412132) (23321221)
@@ -12730,6 +16188,7 @@ begin
/parity [
(1001) (0101) (1100) (0011) (1010) (0110) (1111) (0000)
] def
+} ctxdef
% Derive the bits for each row
/rowbits r array def
@@ -12779,9 +16238,13 @@ begin
dontdraw not //renmatrix if
+ //unloadctx exec
+
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/code49 dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -12790,15 +16253,17 @@ end
% --END ENCODER code49--
% --BEGIN ENCODER channelcode--
-% --REQUIRES preamble raiseerror renlinear--
+% --REQUIRES preamble loadctx unloadctx raiseerror renlinear--
% --DESC: Channel Code
% --EXAM: 3493
-% --EXOP: height=0.5 includetext
+% --EXOP: height=0.5 includetext
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp channelcode 0.0 2017040400 74649 74470
-%%BeginData: 149 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp channelcode 0.0 2022082100 132918 128171
+%%BeginData: 262 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
+dup /loadctx dup /uk.co.terryburton.bwipp findresource put
+dup /unloadctx dup /uk.co.terryburton.bwipp findresource put
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
begin
@@ -12809,12 +16274,13 @@ begin
/options exch def % We are given an option string
/barcode exch def % We are given a barcode string
+ /ctx null def
/dontdraw false def
/shortfinder false def
/includetext false def
/includecheck false def
/height 1 def
-
+
% Parse the input options
options type /stringtype eq {
1 dict begin
@@ -12828,6 +16294,8 @@ begin
/height height cvr def
+ /channelcode //loadctx exec
+
% Validate the input
barcode length 2 lt barcode length 7 gt or {
/bwipp.channelcodeBadLength (Channel Code must be 2 to 7 digits) //raiseerror exec
@@ -12841,50 +16309,151 @@ begin
/bwipp.channelcodeTooBig (The Channel Code value is too big for the number of channels) //raiseerror exec
} if
- /nextb {
- dup
- dup s exch get exch
- dup b exch 1 sub get exch
- dup s exch 1 sub get exch
- b exch 2 sub get exch
- add add add 4 gt {1} {2} ifelse
- 1 index chan 2 add lt {
- dup 1 4 index {
- b 3 index 2 index put
- 3 index exch sub 1 add 4 index 3 index 1 add nexts
- } for
- } {
- dup 3 index le {
- b 2 index 4 index put
- value target eq {
- /out [
- 3 1 10 {dup s exch get exch b exch get} for
- ] 0 chan 2 mul getinterval def
- } if
- /value value 1 add def
- } if
- } ifelse
- pop pop pop pop
- } bind def
-
- /nexts {
- dup chan 2 add lt {1} {1 index} ifelse 1 3 index {
- s 2 index 2 index put
- 2 index exch sub 1 add 3 index 2 index nextb
- } for
- pop pop pop
- } bind def
+ % Tail-call optimisation FTW!
+ /loops1 { /s2max s1max 1 add s1 sub def /b1 1 def
+ s1 1 eq {nextb1} {loopb1} ifelse } def
+ /loopb1 { /b2max b1max 1 add b1 sub def /s2 1 def loops2 } def
+ /loops2 { /s3max s2max 1 add s2 sub def /b2 1 def
+ s1 b1 add s2 add 3 eq {nextb2} {loopb2} ifelse } def
+ /loopb2 { /b3max b2max 1 add b2 sub def /s3 1 def loops3 } def
+ /loops3 { /s4max s3max 1 add s3 sub def /b3 1 def
+ b1 s2 add b2 add s3 add 4 eq {nextb3} {loopb3} ifelse } def
+ /loopb3 { /b4max b3max 1 add b3 sub def /s4 1 def loops4 } def
+ /loops4 { /s5max s4max 1 add s4 sub def /b4 1 def
+ b2 s3 add b3 add s4 add 4 eq {nextb4} {loopb4} ifelse } def
+ /loopb4 { /b5max b4max 1 add b4 sub def /s5 1 def loops5 } def
+ /loops5 { /s6max s5max 1 add s5 sub def /b5 1 def
+ b3 s4 add b4 add s5 add 4 eq {nextb5} {loopb5} ifelse } def
+ /loopb5 { /b6max b5max 1 add b5 sub def /s6 1 def loops6 } def
+ /loops6 { /s7max s6max 1 add s6 sub def /b6 1 def
+ b4 s5 add b5 add s6 add 4 eq {nextb6} {loopb6} ifelse } def
+ /loopb6 { /b7max b6max 1 add b6 sub def /s7 1 def loops7 } def
+ /loops7 { /s8 s7max 1 add s7 sub def /b7 1 def
+ b5 s6 add b6 add s7 add 4 eq {nextb7} {loopb7} ifelse } def
+ /loopb7 { /b8 b7max 1 add b7 sub def
+ b6 s7 add b7 add s8 add b8 add 5 eq {nextb7} {chkchr} ifelse } def
+ /chkchr {
+ value target eq {
+ [s1 b1 s2 b2 s3 b3 s4 b4 s5 b5 s6 b6 s7 b7 s8 b8] exit
+ } if
+ /value value 1 add def
+ nextb7
+ } def
+ /nextb7 { /b7 b7 1 add def b7 b7max le {loopb7} {nexts7} ifelse } def
+ /nexts7 { /s7 s7 1 add def s7 s7max le {loops7} {nextb6} ifelse } def
+ /nextb6 { /b6 b6 1 add def b6 b6max le {loopb6} {nexts6} ifelse } def
+ /nexts6 { /s6 s6 1 add def s6 s6max le {loops6} {nextb5} ifelse } def
+ /nextb5 { /b5 b5 1 add def b5 b5max le {loopb5} {nexts5} ifelse } def
+ /nexts5 { /s5 s5 1 add def s5 s5max le {loops5} {nextb4} ifelse } def
+ /nextb4 { /b4 b4 1 add def b4 b4max le {loopb4} {nexts4} ifelse } def
+ /nexts4 { /s4 s4 1 add def s4 s4max le {loops4} {nextb3} ifelse } def
+ /nextb3 { /b3 b3 1 add def b3 b3max le {loopb3} {nexts3} ifelse } def
+ /nexts3 { /s3 s3 1 add def s3 s3max le {loops3} {nextb2} ifelse } def
+ /nextb2 { /b2 b2 1 add def b2 b2max le {loopb2} {nexts2} ifelse } def
+ /nexts2 { /s2 s2 1 add def s2 s2max le {loops2} {nextb1} ifelse } def
+ /nextb1 { /b1 b1 1 add def b1 b1max le {loopb1} {nexts1} ifelse } def
+ /nexts1 { /s1 s1 1 add def s1 s1max le {loops1} if } def
+
+{
+ /memo [ % Accelerate generation of bar patterns
+ [ % CH3
+ [ 0 [1 1 1 1 1 2 1 2] [1 1 1 1 1 1 1 3] [1 1 1 1 1 3 2] [1 1 1 1 1 3 3] ]
+ ]
+ [ % CH4
+ [ 0 [1 1 1 1 2 1 1 3] [1 1 1 1 1 1 1 4] [1 1 1 1 4 3 3] [1 1 1 1 4 4 4] ]
+ ]
+ [ % CH5
+ [ 0 [1 1 1 2 1 1 2 3] [1 1 1 1 1 1 1 5] [1 1 1 5 4 4 4] [1 1 1 5 5 5 5] ]
+ ]
+ [ % CH6
+ [ 0 [1 1 2 1 1 2 1 4] [1 1 1 1 1 1 1 6] [1 1 6 5 5 5 4] [1 1 6 6 6 6 6] ]
+ ]
+ [ % CH7
+ [ 0 [1 2 1 1 2 1 1 5] [1 1 1 1 1 1 1 7] [1 7 6 6 6 5 5] [1 7 7 7 7 7 7] ]
+ [ 150000 [1 3 1 1 2 4 1 1] [1 1 3 1 2 3 2 1] [1 7 5 5 5 4 1] [1 7 7 5 5 4 2] ]
+ [ 300000 [1 1 4 2 1 1 1 3] [1 2 4 1 1 1 2 2] [1 7 7 4 3 3 3] [1 7 6 3 3 3 3] ]
+ [ 450000 [1 1 4 1 1 4 1 1] [1 3 2 1 2 1 2 2] [1 7 7 4 4 4 1] [1 7 5 4 4 3 3] ]
+ ]
+ [ % CH8
+ [ 0 [2 1 1 2 1 1 2 5] [1 1 1 1 1 1 1 8] [8 7 7 7 6 6 6] [8 8 8 8 8 8 8] ]
+ [ 150000 [2 1 1 2 1 1 5 2] [1 1 2 1 5 2 1 2] [8 7 7 7 6 6 6] [8 8 8 7 7 3 2] ]
+ [ 300000 [2 1 1 4 2 2 2 1] [1 1 4 2 1 2 1 3] [8 7 7 7 4 3 2] [8 8 8 5 4 4 3] ]
+ [ 450000 [2 2 2 1 1 3 1 3] [1 1 2 1 1 2 4 3] [8 7 6 5 5 5 3] [8 8 8 7 7 7 6] ]
+ [ 600000 [2 3 1 1 4 2 1 1] [1 1 3 1 3 1 2 3] [8 7 5 5 5 2 1] [8 8 8 6 6 4 4] ]
+ [ 750000 [2 1 3 1 2 3 2 1] [1 2 1 1 3 4 1 2] [8 7 7 5 5 4 2] [8 8 7 7 7 5 2] ]
+ [ 900000 [2 2 1 4 1 2 2 1] [1 2 1 2 1 5 1 2] [8 7 6 6 3 3 2] [8 8 7 7 6 6 2] ]
+ [ 1050000 [2 4 1 1 1 2 2 2] [1 2 1 2 1 3 1 4] [8 7 4 4 4 4 3] [8 8 7 7 6 6 4] ]
+ [ 1200000 [2 2 1 5 2 1 1 1] [1 3 1 3 2 1 1 3] [8 7 6 6 2 1 1] [8 8 6 6 4 3 3] ]
+ [ 1350000 [2 2 1 3 3 1 1 2] [1 4 1 2 1 1 4 1] [8 7 6 6 4 2 2] [8 8 5 5 4 4 4] ]
+ [ 1500000 [3 1 2 2 2 1 1 3] [1 1 1 1 2 2 4 3] [8 6 6 5 4 3 3] [8 8 8 8 8 7 6] ]
+ [ 1650000 [3 2 1 2 3 1 2 1] [1 1 1 1 3 2 4 2] [8 6 5 5 4 2 2] [8 8 8 8 8 6 5] ]
+ [ 1800000 [3 1 1 3 2 3 1 1] [1 2 1 1 3 4 2 1] [8 6 6 6 4 3 1] [8 8 7 7 7 5 2] ]
+ [ 1950000 [3 2 1 2 1 2 2 2] [1 2 4 1 2 2 1 2] [8 6 5 5 4 4 3] [8 8 7 4 4 3 2] ]
+ [ 2100000 [3 1 2 1 4 2 1 1] [1 4 1 2 1 1 2 3] [8 6 6 5 5 2 1] [8 8 5 5 4 4 4] ]
+ [ 2250000 [4 1 1 4 1 1 2 1] [1 1 4 2 1 1 1 4] [8 5 5 5 2 2 2] [8 8 8 5 4 4 4] ]
+ [ 2400000 [4 3 1 2 1 2 1 1] [1 2 4 2 2 2 1 1] [8 5 3 3 2 2 1] [8 8 7 4 3 2 1] ]
+ [ 2550000 [5 1 1 1 1 1 3 2] [1 2 2 4 3 1 1 1] [8 4 4 4 4 4 4] [8 8 7 6 3 1 1] ]
+ [ 2700000 [1 1 3 6 1 1 1 1] [2 1 1 2 1 1 6 1] [8 8 8 6 1 1 1] [8 7 7 7 6 6 6] ]
+ [ 2850000 [1 1 1 2 2 3 2 3] [2 1 3 3 2 1 1 2] [8 8 8 8 7 6 4] [8 7 7 5 3 2 2] ]
+ [ 3000000 [1 2 3 3 3 1 1 1] [2 1 1 1 5 1 2 2] [8 8 7 5 3 1 1] [8 7 7 7 7 3 3] ]
+ [ 3150000 [1 3 1 2 2 2 3 1] [2 1 1 3 2 1 3 2] [8 8 6 6 5 4 3] [8 7 7 7 5 4 4] ]
+ [ 3300000 [1 5 1 1 3 1 1 2] [2 1 1 4 3 2 1 1] [8 8 4 4 4 2 2] [8 7 7 7 4 2 1] ]
+ [ 3450000 [1 1 2 2 2 5 1 1] [2 2 2 2 3 1 1 2] [8 8 8 7 6 5 1] [8 7 6 5 4 2 2] ]
+ [ 3600000 [1 2 1 1 3 4 2 1] [2 2 3 1 1 1 2 3] [8 8 7 7 7 5 2] [8 7 6 4 4 4 4] ]
+ [ 3750000 [1 1 2 1 1 5 3 1] [2 3 1 1 4 1 2 1] [8 8 8 7 7 7 3] [8 7 5 5 5 2 2] ]
+ [ 3900000 [1 3 1 2 4 2 1 1] [2 3 3 1 1 1 2 2] [8 8 6 6 5 2 1] [8 7 5 3 3 3 3] ]
+ [ 4050000 [1 3 1 2 3 1 2 2] [2 6 2 1 1 1 1 1] [8 8 6 6 5 3 3] [8 7 2 1 1 1 1] ]
+ [ 4200000 [2 1 1 2 1 2 2 4] [2 1 3 1 3 3 1 1] [8 7 7 7 6 6 5] [8 7 7 5 5 3 1] ]
+ [ 4350000 [2 2 1 4 1 2 2 1] [2 1 4 1 3 1 2 1] [8 7 6 6 3 3 2] [8 7 7 4 4 2 2] ]
+ [ 4500000 [2 1 1 1 2 1 3 4] [2 2 2 1 2 1 3 2] [8 7 7 7 7 6 6] [8 7 6 5 5 4 4] ]
+ [ 4650000 [2 4 2 1 2 2 1 1] [2 2 2 1 2 1 2 3] [8 7 4 3 3 2 1] [8 7 6 5 5 4 4] ]
+ [ 4800000 [2 3 2 1 1 2 2 2] [2 4 1 2 1 1 3 1] [8 7 5 4 4 4 3] [8 7 4 4 3 3 3] ]
+ [ 4950000 [3 2 2 1 2 1 1 3] [2 1 1 2 1 1 1 6] [8 6 5 4 4 3 3] [8 7 7 7 6 6 6] ]
+ [ 5100000 [3 2 1 1 1 3 3 1] [2 2 3 2 1 1 3 1] [8 6 5 5 5 5 3] [8 7 6 4 3 3 3] ]
+ [ 5250000 [4 1 2 1 2 2 1 2] [2 1 4 1 2 1 1 3] [8 5 5 4 4 3 2] [8 7 7 4 4 3 3] ]
+ [ 5400000 [5 1 2 1 2 1 1 2] [2 2 1 1 4 1 3 1] [8 4 4 3 3 2 2] [8 7 6 6 6 3 3] ]
+ [ 5550000 [1 1 4 4 1 2 1 1] [3 1 2 1 1 3 2 2] [8 8 8 5 2 2 1] [8 6 6 5 5 5 3] ]
+ [ 5700000 [1 2 1 1 2 1 3 4] [3 1 4 1 2 2 1 1] [8 8 7 7 7 6 6] [8 6 6 3 3 2 1] ]
+ [ 5850000 [1 1 3 3 2 2 2 1] [3 2 1 1 2 1 4 1] [8 8 8 6 4 3 2] [8 6 5 5 5 4 4] ]
+ [ 6000000 [1 4 3 1 1 2 1 2] [3 2 2 1 2 2 1 2] [8 8 5 3 3 3 2] [8 6 5 4 4 3 2] ]
+ [ 6150000 [2 1 1 4 1 2 1 3] [3 1 1 2 1 2 1 4] [8 7 7 7 4 4 3] [8 6 6 6 5 5 4] ]
+ [ 6300000 [2 2 2 1 3 2 2 1] [3 1 4 1 3 1 1 1] [8 7 6 5 5 3 2] [8 6 6 3 3 1 1] ]
+ [ 6450000 [2 5 1 3 1 1 1 1] [3 2 1 1 2 3 1 2] [8 7 3 3 1 1 1] [8 6 5 5 5 4 2] ]
+ [ 6600000 [3 2 3 1 2 1 2 1] [3 1 3 2 2 1 1 2] [8 6 5 3 3 2 2] [8 6 6 4 3 2 2] ]
+ [ 6750000 [4 1 2 2 1 1 3 1] [3 2 1 3 1 1 3 1] [8 5 5 4 3 3 3] [8 6 5 5 3 3 3] ]
+ [ 6900000 [1 2 1 4 2 2 2 1] [4 1 1 2 2 2 2 1] [8 8 7 7 4 3 2] [8 5 5 5 4 3 2] ]
+ [ 7050000 [1 2 5 2 1 2 1 1] [4 2 1 3 2 1 1 1] [8 8 7 3 2 2 1] [8 5 4 4 2 1 1] ]
+ [ 7200000 [2 2 2 1 3 1 3 1] [4 1 3 1 3 1 1 1] [8 7 6 5 5 3 3] [8 5 5 3 3 1 1] ]
+ [ 7350000 [3 1 4 2 1 1 1 2] [4 2 2 1 1 1 2 2] [8 6 6 3 2 2 2] [8 5 4 3 3 3 3] ]
+ [ 7500000 [1 1 1 4 1 1 3 3] [5 2 1 2 2 1 1 1] [8 8 8 8 5 5 5] [8 4 3 3 2 1 1] ]
+ [ 7650000 [5 2 1 2 1 2 1 1] [5 2 2 1 1 2 1 1] [8 4 3 3 2 2 1] [8 4 3 2 2 2 1] ]
+ ]
+ ] def
+} ctxdef
/encode {
/chan exch def
/target exch def
- /value 0 def
- /out -1 def
- /b [ 1 1 1 0 0 0 0 0 0 0 0 ] def
- /s [ 0 1 1 0 0 0 0 0 0 0 0 ] def
- chan dup 3 nexts
- out
- } bind def
+
+ % Lookup memoized starting value close to the target
+ memo chan 3 sub get {
+ /m exch def
+ m 0 get target gt {exit} if
+ /mv m 0 get def
+ /mb m 1 get def
+ /ms m 2 get def
+ /mbmax m 3 get def
+ /msmax m 4 get def
+ } forall
+ /value mv def
+ mb aload pop [/b8 /b7 /b6 /b5 /b4 /b3 /b2 /b1] {exch def} forall
+ ms aload pop [/s8 /s7 /s6 /s5 /s4 /s3 /s2 /s1] {exch def} forall
+ mbmax aload pop [/b7max /b6max /b5max /b4max /b3max /b2max /b1max] {exch def} forall
+ msmax aload pop [/s7max /s6max /s5max /s4max /s3max /s2max /s1max] {exch def} forall
+
+ 1 {chkchr} repeat 8 chan sub 2 mul dup 16 exch sub getinterval
+
+ } def
/barlen barcode length def
@@ -12895,17 +16464,20 @@ begin
/data barcode cvi barlen 1 add encode def
% Determine check data
- /check [] def
- includecheck {
- /mod23 [
+{
+ /mod23map [
[] []
[ 13 12 4 9 3 1 ]
- [ 13 2 12 3 18 16 4 1 ]
+ [ 8 2 12 3 18 16 4 1 ]
[ 11 16 17 8 20 4 10 2 5 1 ]
[ 1 4 16 18 3 12 2 8 9 13 6 1 ]
- [ 20 16 22 13 15 12 5 4 8 9 21 3 7 1 ]
+ [ 20 16 22 13 15 12 5 4 17 9 21 3 7 1 ]
[ 2 6 18 8 1 3 9 4 12 13 16 2 6 18 8 1 ]
- ] barlen get def
+ ] def
+} ctxdef
+ /check [] def
+ includecheck {
+ /mod23 mod23map barlen get def
0
0 1 data length 1 sub {
dup data exch get 1 sub exch mod23 exch get mul add
@@ -12940,9 +16512,13 @@ begin
dontdraw not //renlinear if
+ //unloadctx exec
+
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/channelcode dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -12951,15 +16527,17 @@ end
% --END ENCODER channelcode--
% --BEGIN ENCODER flattermarken--
-% --REQUIRES preamble raiseerror renlinear--
+% --REQUIRES preamble loadctx unloadctx raiseerror renlinear--
% --DESC: Flattermarken
% --EXAM: 11099
% --EXOP: inkspread=-0.25 showborder borderleft=0 borderright=0
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp flattermarken 0.0 2017040400 63805 60185
-%%BeginData: 93 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp flattermarken 0.0 2022082100 63195 59686
+%%BeginData: 104 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
+dup /loadctx dup /uk.co.terryburton.bwipp findresource put
+dup /unloadctx dup /uk.co.terryburton.bwipp findresource put
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
begin
@@ -12970,9 +16548,10 @@ begin
/options exch def % We are given an option string
/barcode exch def % We are given a barcode string
+ /ctx null def
/dontdraw false def
/includetext false def % Enable/disable text
- /textfont /NimbusMonL-Regu def
+ /textfont /Courier def
/textsize 10 def
/textyoffset -7 def
/height 0.3 def
@@ -13000,6 +16579,8 @@ begin
/textyoffset textyoffset cvr def
/height height cvr def
+ /flattermarken //loadctx exec
+
% Validate the input
barcode {
dup 48 lt exch 57 gt or {
@@ -13007,6 +16588,7 @@ begin
} if
} forall
+{
% Create an array containing the character mappings
/encs
[ (0018) (0117) (0216) (0315) (0414) (0513) (0612) (0711) (0810)
@@ -13015,6 +16597,7 @@ begin
% Create a string of the available characters
/barchars (1234567890) def
+} ctxdef
/barlen barcode length def % Length of the code
@@ -13045,9 +16628,13 @@ begin
dontdraw not //renlinear if
+ //unloadctx exec
+
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/flattermarken dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -13061,10 +16648,10 @@ end
% --EXAM: 331132131313411122131311333213114131131221323
% --EXOP: height=0.5
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp raw 0.0 2017040400 58495 55088
-%%BeginData: 52 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp raw 0.0 2022082100 49590 49483
+%%BeginData: 55 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
begin
@@ -13075,6 +16662,7 @@ begin
/options exch def % We are given an option string
/barcode exch def % We are given a barcode string
+ /ctx null def
/dontdraw false def
/height 1 def
@@ -13111,7 +16699,9 @@ begin
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/raw dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -13125,10 +16715,10 @@ end
% --EXAM: FATDAFTDAD
% --EXOP:
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp daft 0.0 2017040400 62389 58827
-%%BeginData: 76 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp daft 0.0 2022082100 52828 52694
+%%BeginData: 79 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
begin
@@ -13139,6 +16729,7 @@ begin
/options exch def % We are given an option string
/barcode exch def % We are given a barcode string
+ /ctx null def
/dontdraw false def
/height 0.175 def
@@ -13199,7 +16790,9 @@ begin
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/daft dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -13213,10 +16806,10 @@ end
% --EXAM: fima
% --EXOP: backgroundcolor=DD000011
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp symbol 0.0 2017040400 61969 58378
-%%BeginData: 72 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp symbol 0.0 2022082100 53420 53349
+%%BeginData: 80 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
begin
@@ -13227,6 +16820,7 @@ begin
/options exch def % We are given an option string
/barcode exch def % We are given a barcode string
+ /ctx null def
/dontdraw false def
% Parse the input options
@@ -13261,15 +16855,20 @@ begin
/bhs [.625 .625 .625 .625 .625 .625 .625] def
/bbs [0 0 0 0 0 0 0] def
} bind
+ /fime {
+ /sbs [2.25 6.75 2.25 15.75 2.25 6.75 2.25] def
+ /bhs [.625 .625 .625 .625 .625 .625 .625] def
+ /bbs [0 0 0 0 0 0 0] def
+ } bind
>> def
- % Valiate input
+ % Valiate input
symbols barcode known not {
- /bwipp.symbolUnknownSymbol (Unknown symbol name provided) //raiseerror exec
+ /bwipp.symbolUnknownSymbol (Unknown symbol name provided) //raiseerror exec
} if
symbols barcode get exec
-
+
% Return the arguments
<<
/ren //renlinear
@@ -13283,7 +16882,9 @@ begin
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/symbol dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -13292,16 +16893,19 @@ end
% --END ENCODER symbol--
% --BEGIN ENCODER pdf417--
-% --REQUIRES preamble raiseerror renmatrix--
+% --REQUIRES preamble loadctx unloadctx raiseerror parseinput renmatrix--
% --DESC: PDF417
% --EXAM: This is PDF417
% --EXOP: columns=2
% --RNDR: renmatrix
-%%BeginResource: uk.co.terryburton.bwipp pdf417 0.0 2017040400 225385 234487
-%%BeginData: 873 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp pdf417 0.0 2022082100 202024 204168
+%%BeginData: 911 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
+dup /loadctx dup /uk.co.terryburton.bwipp findresource put
+dup /unloadctx dup /uk.co.terryburton.bwipp findresource put
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /parseinput dup /uk.co.terryburton.bwipp findresource put
dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
begin
/pdf417 {
@@ -13311,6 +16915,7 @@ begin
/options exch def
/barcode exch def
+ /ctx null def
/dontdraw false def
/compact false def
/eclevel -1 def
@@ -13321,6 +16926,7 @@ begin
/ccc false def
/raw false def
/parse false def
+ /parsefnc false def
% Parse the input options
options type /stringtype eq {
@@ -13338,26 +16944,98 @@ begin
/rows rows cvi def
/rowmult rowmult cvr def
- % Parse ordinals of the form ^NNN to ASCII
- parse {
- /msg barcode length string def
- /j 0 def
- barcode
- { % loop
- (^) search {
- dup msg exch j exch putinterval
- length j add 1 add /j exch def
- pop
- dup 0 3 getinterval cvi msg exch j 1 sub exch put
- dup length 3 sub 3 exch getinterval
- } {
- dup msg exch j exch putinterval
- length j add /j exch def
- /barcode msg 0 j getinterval def
- exit
- } ifelse
- } loop
- } if
+ /pdf417 //loadctx exec
+
+{
+ % Modes and text submodes
+ /T 0 def /N 1 def /B 2 def
+ /A 0 def /L 1 def /M 2 def /P 3 def
+
+ % Special function characters for mode switching
+ /tl -1 def /nl -2 def /bl -3 def /bl6 -4 def /bs -5 def
+
+ % Special function characters for text mode
+ /al -6 def /ll -7 def /ml -8 def /pl -9 def /as -10 def /ps -11 def
+
+ % Character maps for each state
+ /charmaps [
+ % A L M P
+ [ (A) (a) (0) (;) ] % 0
+ [ (B) (b) (1) (<) ] % 1
+ [ (C) (c) (2) (>) ] % 2
+ [ (D) (d) (3) (@) ] % 3
+ [ (E) (e) (4) ([) ] % 4
+ [ (F) (f) (5) 92 ] % 5
+ [ (G) (g) (6) (]) ] % 6
+ [ (H) (h) (7) (_) ] % 7
+ [ (I) (i) (8) (`) ] % 8
+ [ (J) (j) (9) (~) ] % 9
+ [ (K) (k) (&) (!) ] % 10
+ [ (L) (l) 13 13 ] % 11
+ [ (M) (m) 9 9 ] % 12
+ [ (N) (n) (,) (,) ] % 13
+ [ (O) (o) (:) (:) ] % 14
+ [ (P) (p) (#) 10 ] % 15
+ [ (Q) (q) (-) (-) ] % 16
+ [ (R) (r) (.) (.) ] % 17
+ [ (S) (s) ($) ($) ] % 18
+ [ (T) (t) (/) (/) ] % 19
+ [ (U) (u) (+) (") ] % 20
+ [ (V) (v) (%) (|) ] % 21
+ [ (W) (w) (*) (*) ] % 22
+ [ (X) (x) (=) 40 ] % 23
+ [ (Y) (y) (^) 41 ] % 24
+ [ (Z) (z) pl (?) ] % 25
+ [ ( ) ( ) ( ) ({) ] % 26
+ [ ll as ll (}) ] % 27
+ [ ml ml al (') ] % 28
+ [ ps ps ps al ] % 29
+ ] def
+
+ % Invert charmaps to give character to value maps for each state
+ /charvals [ 30 dict 30 dict 30 dict 30 dict ] def
+ /alltext 104 dict def
+ 0 1 charmaps length 1 sub {
+ /i exch def
+ /encs charmaps i get def
+ 0 1 3 {
+ /j exch def
+ encs j get dup type /stringtype eq {0 get} if % convert string to ASCII if required
+ dup charvals j get exch i put
+ alltext exch -1 put
+ } for
+ } for
+
+ /e 10000 def % "Empty"
+
+ /latlen [ % Bit length of latch between submodes
+ % To: A L M P From
+ [ 0 1 1 2 ] % A
+ [ 2 0 1 2 ] % L
+ [ 1 1 0 1 ] % M
+ [ 1 2 2 0 ] % P
+ ] def
+
+ /latseq [ % Latch sequences between submodes
+ % To: A L M P From
+ [ [] [ll] [ml] [ml pl] ] % A
+ [ [ml al] [] [ml] [ml pl] ] % L
+ [ [al] [ll] [] [pl] ] % M
+ [ [al] [al ll] [al ml] [] ] % P
+ ] def
+
+ /shftlen [ % Bit length of shift to submode
+ % To: A L M P From
+ [ e e e 1 ] % A
+ [ 1 e e 1 ] % L
+ [ e e e 1 ] % M
+ [ e e e e ] % P
+ ] def
+
+ /latchcws <<
+ tl 900 bl 901 bl6 924 nl 902 bs 913
+ >> def
+} ctxdef
raw {/encoding (raw) def} if
@@ -13375,9 +17053,6 @@ begin
/datcws datcws 0 j getinterval def
} if
- /barcode [ barcode {} forall ] def
- /barlen barcode length def
-
ccc {/encoding (ccc) def} if
/encb {
@@ -13414,130 +17089,67 @@ begin
putinterval
} if
out
- } bind def
-
+ } def
+
encoding (byte) eq encoding (ccc) eq or {
+ /barlen barcode length def
/datcws barlen 6 idiv 5 mul barlen 6 mod add 1 add array def
datcws 0 barlen 6 mod 0 eq {924} {901} ifelse put
- datcws 1 barcode encb putinterval
+ datcws 1 [ barcode {} forall ] encb putinterval
encoding (ccc) eq {/datcws [920 datcws aload pop] def} if
} if
encoding (auto) eq {
- % Modes and text submodes
- /T 0 def /N 1 def /B 2 def
- /A 0 def /L 1 def /M 2 def /P 3 def
-
- % Special function characters for mode switching
- /tl -1 def /nl -2 def /bl -3 def /bl6 -4 def /bs -5 def
-
- % Special function characters for text mode
- /al -6 def /ll -7 def /ml -8 def /pl -9 def /as -10 def /ps -11 def
-
- % Character maps for each state
- /charmaps [
- % A L M P
- [ (A) (a) (0) (;) ] % 0
- [ (B) (b) (1) (<) ] % 1
- [ (C) (c) (2) (>) ] % 2
- [ (D) (d) (3) (@) ] % 3
- [ (E) (e) (4) ([) ] % 4
- [ (F) (f) (5) 92 ] % 5
- [ (G) (g) (6) (]) ] % 6
- [ (H) (h) (7) (_) ] % 7
- [ (I) (i) (8) (`) ] % 8
- [ (J) (j) (9) (~) ] % 9
- [ (K) (k) (&) (!) ] % 10
- [ (L) (l) 13 13 ] % 11
- [ (M) (m) 9 9 ] % 12
- [ (N) (n) (,) (,) ] % 13
- [ (O) (o) (:) (:) ] % 14
- [ (P) (p) (#) 10 ] % 15
- [ (Q) (q) (-) (-) ] % 16
- [ (R) (r) (.) (.) ] % 17
- [ (S) (s) ($) ($) ] % 18
- [ (T) (t) (/) (/) ] % 19
- [ (U) (u) (+) (") ] % 20
- [ (V) (v) (%) (|) ] % 21
- [ (W) (w) (*) (*) ] % 22
- [ (X) (x) (=) 40 ] % 23
- [ (Y) (y) (^) 41 ] % 24
- [ (Z) (z) pl (?) ] % 25
- [ ( ) ( ) ( ) ({) ] % 26
- [ ll as ll (}) ] % 27
- [ ml ml al (') ] % 28
- [ ps ps ps al ] % 29
- ] def
-
- % Invert charmaps to give character to value maps for each state
- /charvals [ 30 dict 30 dict 30 dict 30 dict ] def
- /alltext 104 dict def
- 0 1 charmaps length 1 sub {
- /i exch def
- /encs charmaps i get def
- 0 1 3 {
- /j exch def
- encs j get dup type /stringtype eq {0 get} if % convert string to ASCII if required
- dup charvals j get exch i put
- alltext exch -1 put
- } for
- } for
-
- /e 10000 def % "Empty"
-
- /latlen [ % Bit length of latch between submodes
- % To: A L M P From
- [ 0 1 1 2 ] % A
- [ 2 0 1 2 ] % L
- [ 1 1 0 1 ] % M
- [ 1 2 2 0 ] % P
- ] def
-
- /latseq [ % Latch sequences between submodes
- % To: A L M P From
- [ [] [ll] [ml] [ml pl] ] % A
- [ [ml al] [] [ml] [ml pl] ] % L
- [ [al] [ll] [] [pl] ] % M
- [ [al] [al ll] [al ml] [] ] % P
- ] def
-
- /shftlen [ % Bit length of shift to submode
- % To: A L M P From
- [ e e e 1 ] % A
- [ 1 e e 1 ] % L
- [ e e e 1 ] % M
- [ e e e e ] % P
- ] def
-
+ % Parse the input
+ /fncvals <<
+ /parse parse
+ /parsefnc parsefnc
+ /eci true
+ % Predates FNC non-data codewords, but supports ECI
+ >> def
+ /msg barcode fncvals //parseinput exec def
+ /msglen msg length def
+
% Determine runlengths of digits
- /numdigits [ barlen {0} repeat 0 ] def
- /numtext [ barlen {0} repeat 0 ] def
- /numbytes [ barlen {0} repeat 0 ] def
- barlen 1 sub -1 0 {
+ /numdigits [ msglen {0} repeat 0 ] def
+ /numtext [ msglen {0} repeat 0 ] def
+ /numbytes [ msglen {0} repeat 0 ] def
+ /iseci [ msglen {0} repeat 0 ] def
+ msglen 1 sub -1 0 {
/i exch def
- barcode i get dup 48 ge exch 57 le and {
+ msg i get dup 48 ge exch 57 le and {
numdigits i numdigits i 1 add get 1 add put
} if
- alltext barcode i get known numdigits i get 13 lt and {
+ alltext msg i get known numdigits i get 13 lt and {
numtext i numtext i 1 add get 1 add put
} if
- numtext i get 5 lt numdigits i get 13 lt and {
+ msg i get 0 ge numtext i get 5 lt and numdigits i get 13 lt and {
numbytes i numbytes i 1 add get 1 add put
} if
+ iseci i msg i get -1000000 le put
} for
- /numdigits numdigits 0 barlen getinterval def
- /numtext numtext 0 barlen getinterval def
- /numbytes numbytes 0 barlen getinterval def
-
+ /numdigits numdigits 0 msglen getinterval def
+ /numtext numtext 0 msglen getinterval def
+ /numbytes numbytes 0 msglen getinterval def
+
/seq [] def /seqlen 0 def /state T def /p 0 def { % loop
- p barlen eq {exit} if
+ p msglen eq {exit} if
+ iseci p get {
+ /eci msg p get def
+ /seq [
+ seq aload pop
+ [ eci ]
+ ] def
+ /p p 1 add def
+ /seqlen seqlen eci -1810900 le {2} {eci -1000900 le {3} {2} ifelse} ifelse add def
+ } {
/n numdigits p get def
n 13 ge {
/seq [
seq aload pop
nl
- [ barcode p n getinterval aload pop ]
+ [ msg p n getinterval aload pop ]
] def
/state N def
/p p n add def
@@ -13547,8 +17159,10 @@ begin
t 5 ge {
/seq [
seq aload pop
- state T ne {tl} if
- [ barcode p t getinterval aload pop ]
+ state T ne {
+ tl
+ } if
+ [ msg p t getinterval aload pop ]
] def
/state T def
/p p t add def
@@ -13559,7 +17173,7 @@ begin
/seq [
seq aload pop
bs
- [ barcode p get ]
+ [ msg p get ]
] def
/p p b add def
/seqlen seqlen 2 add def
@@ -13567,43 +17181,38 @@ begin
/seq [
seq aload pop
b 6 mod 0 ne {bl} {bl6} ifelse
- [ barcode p b getinterval aload pop ]
+ [ msg p b getinterval aload pop ]
] def
/state B def
/p p b add def
/seqlen seqlen 1 add b add def
- } ifelse } ifelse } ifelse
+ } ifelse } ifelse } ifelse } ifelse
} loop
-
- /latchcws <<
- tl 900 bl 901 bl6 924 nl 902 bs 913
- >> def
-
+
% Submode encoding functions
- /enca {charvals A get exch get} bind def
- /encl {charvals L get exch get} bind def
- /encm {charvals M get exch get} bind def
- /encp {charvals P get exch get} bind def
+ /enca {charvals A get exch get} def
+ /encl {charvals L get exch get} def
+ /encm {charvals M get exch get} def
+ /encp {charvals P get exch get} def
/textencfuncs [ /enca /encl /encm /encp ] def
-
+
/addtotext {
text exch l exch put
/l l 1 add def
- } bind def
-
+ } def
+
/enct {
-
/in exch def
-
+
/curlen [ e e e e ] def
curlen submode 0 put
/curseq [ [] [] [] [] ] def
-
+
% Derive the optimal sequences ending in each submode
in {
-
+
/char exch def
-
+
% Check for optimisations in the current sequences by latching from x to y
{ % loop
/imp false def
@@ -13624,25 +17233,25 @@ begin
} forall
imp not {exit} if % Repeat unless no improvement
} loop
-
+
% Determine optimal next sequences for each valid encoding
/nxtlen [ e e e e ] def
/nxtseq 4 array def
-
+
[ A L M P ] {
/x exch def
-
+
{ % loop for common exit
-
+
charvals x get char known not {exit} if
-
+
% Extend directly
/cost curlen x get 1 add def
cost nxtlen x get lt {
nxtlen x cost put
nxtseq x [ curseq x get aload pop char ] put
} if
-
+
% Optimise for direct shifts from y to x
[ A L M P ] {
/y exch def
@@ -13658,17 +17267,17 @@ begin
} if
} if
} forall
-
+
exit
} loop
-
+
} forall
-
+
/curlen nxtlen def
/curseq nxtseq def
-
+
} forall
-
+
% Select the optimal sequence
/minseq e def
[ A L M P ] {
@@ -13678,31 +17287,31 @@ begin
/txtseq curseq k get def
} if
} forall
-
+
% Encode the sequence
/text minseq array def
/k 0 def /l 0 def {
k txtseq length ge {exit} if
-
+
/char txtseq k get def
-
+
% Encode character
char textencfuncs submode get load exec addtotext
/k k 1 add def
-
+
% Encode shifted next character
char as eq char ps eq or {
txtseq k get char as eq {enca} {encp} ifelse addtotext
/k k 1 add def
} if
-
+
% Latches to new submode
char al eq {/submode A def} if
char ll eq {/submode L def} if
char ml eq {/submode M def} if
char pl eq {/submode P def} if
} loop
-
+
text length 2 mod 1 eq {
submode P eq {
/pad al encp def
@@ -13712,17 +17321,17 @@ begin
} ifelse
/text [ text aload pop pad ] def
} if
-
+
/out text length 2 idiv array def
0 1 out length 1 sub {
/k exch def
out k text k 2 mul get 30 mul text k 2 mul 1 add get add put
} for
-
+
out
-
- } bind def
-
+
+ } def
+
/encn {
/in exch def
/out [] def
@@ -13755,23 +17364,40 @@ begin
/out [ out aload pop cwn aload pop ] def
} for
out
- } bind def
-
+ } def
+
+ /ence {
+ 0 get neg 1000000 sub
+ dup 000899 le { % ECI 000000 - 000899
+ 927 exch 2 array astore
+ } { dup 810899 le { % ECI 000900 - 810899
+ 926 exch dup 900 idiv 1 sub exch 900 mod 3 array astore
+ } { dup 811799 le { % ECI 810900 - 811799
+ 925 exch 810900 sub 2 array astore
+ } {
+ /bwipp.pdf417badECI (PDF417 supports ECIs 000000 to 811799) //raiseerror exec
+ } ifelse } ifelse } ifelse
+ } def
+
/encfuncs [ /enct /encn /encb ] def
-
+
/addtocws {
dup datcws j 3 -1 roll putinterval
length j add /j exch def
- } bind def
-
+ } def
+
% Encode the sequence
/state T def /submode A def
/datcws seqlen array def
/i 0 def /j 0 def {
i seq length ge {exit} if
/chars seq i get def
- chars type /arraytype eq { % Encode data according to mode
- chars encfuncs state get load exec addtocws
+ chars type /arraytype eq {
+ chars 0 get -1000000 le { % ECI
+ chars ence addtocws
+ } { % Encode data according to mode
+ chars encfuncs state get load exec addtocws
+ } ifelse
} { % Encode the latch to new state or byte shift
[ latchcws chars get ] addtocws
chars tl eq {/state T def /submode A def} if
@@ -13803,13 +17429,18 @@ begin
% To determine size of matrix, number of columns if given by user...
columns 0 eq {/columns m k add 3 div sqrt round cvi def} if
- columns 1 ge columns 30 le and {/c columns def} if
+ /c columns 1 ge {columns} {1} ifelse def
% ... and rows is greater of those required and that given by user within limits
/r m k add 1 add columns div ceiling cvi def % Required
r rows lt rows 90 le and {/r rows def} if
r 3 lt {/r 3 def} if
+ % Symbol cannot exceed 90 rows
+ r 90 gt {
+ /bwipp.pdf417insufficientCapacity (Insufficient capacity in the symbol) //raiseerror exec
+ } if
+
% Opportunistically raise the error level if a better fit to the matrix is possible
/maxeclevel c r mul 1 sub m sub ln 2 ln div cvi 1 sub 8 2 copy gt {exch} if pop def
maxeclevel eclevel gt {
@@ -13837,17 +17468,17 @@ begin
} {
pop pop 0
} ifelse
- } bind def
+ } def
% Generate the coefficients
/coeffs [ 1 k {0} repeat ] def
1 1 k {
- /i exch def
+ /i exch def
coeffs i coeffs i 1 sub get put
i 1 sub -1 1 {
/j exch def
coeffs j coeffs j 1 sub get coeffs j get rsalog i get rsprod add 929 mod put
- } for
+ } for
coeffs 0 coeffs 0 get rsalog i get rsprod put
} for
/coeffs coeffs 0 coeffs length 1 sub getinterval def
@@ -13866,7 +17497,10 @@ begin
% Trim the working space from the end of the codewords
/cws cws 0 cws length 1 sub getinterval def
+ options /debugcws known { /bwipp.debugcws cws //raiseerror exec } if
+
% Base 10 encoding of the bar space successions for the codewords in each cluster
+{
/clusters [
[
120256 125680 128380 120032 125560 128318 108736 119920 108640 86080 108592 86048
@@ -14107,13 +17741,14 @@ begin
67476 69556 67474 69554 116714
]
] def
+} ctxdef
% Return the 17 bits for a codeword in a given cluster
/cwtobits {
clusters exch get exch get /v exch def
[ 17 {0} repeat v 2 17 string cvrs {48 sub} forall ]
dup length 17 sub 17 getinterval
- } bind def
+ } def
% Populate bitmap for the image
compact {
@@ -14123,7 +17758,7 @@ begin
} ifelse
/pixs rwid r mul array def
- 0 1 r 1 sub {
+ 0 1 r 1 sub {
/i exch def
i 3 mod 0 eq {
@@ -14166,9 +17801,13 @@ begin
dontdraw not //renmatrix if
+ //unloadctx exec
+
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/pdf417 dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -14177,15 +17816,15 @@ end
% --END ENCODER pdf417--
% --BEGIN ENCODER pdf417compact--
-% --REQUIRES preamble raiseerror renmatrix pdf417--
+% --REQUIRES preamble loadctx unloadctx raiseerror parseinput renmatrix pdf417--
% --DESC: Compact PDF417
% --EXAM: This is compact PDF417
% --EXOP: columns=2
% --RNDR: renmatrix
-%%BeginResource: uk.co.terryburton.bwipp pdf417compact 0.0 2017040400 59527 59274
-%%BeginData: 43 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp pdf417compact 0.0 2022082100 62537 62516
+%%BeginData: 46 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
dup /pdf417 dup /uk.co.terryburton.bwipp findresource put
@@ -14197,6 +17836,7 @@ begin
/options exch def % We are given an option string
/barcode exch def % We are given a barcode string
+ /ctx null def
/dontdraw false def
% Parse the input options
@@ -14218,12 +17858,14 @@ begin
args (opt) options put
args
-
+
dontdraw not //renmatrix if
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/pdf417compact dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -14232,16 +17874,19 @@ end
% --END ENCODER pdf417compact--
% --BEGIN ENCODER micropdf417--
-% --REQUIRES preamble raiseerror renmatrix--
+% --REQUIRES preamble loadctx unloadctx raiseerror parseinput renmatrix--
% --DESC: MicroPDF417
% --EXAM: MicroPDF417
% --EXOP:
% --RNDR: renmatrix
-%%BeginResource: uk.co.terryburton.bwipp micropdf417 0.0 2017040400 241907 247375
-%%BeginData: 959 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp micropdf417 0.0 2022082100 212812 214997
+%%BeginData: 998 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
+dup /loadctx dup /uk.co.terryburton.bwipp findresource put
+dup /unloadctx dup /uk.co.terryburton.bwipp findresource put
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /parseinput dup /uk.co.terryburton.bwipp findresource put
dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
begin
/micropdf417 {
@@ -14251,6 +17896,7 @@ begin
/options exch def
/barcode exch def
+ /ctx null def
/dontdraw false def
/version (unset) def
/columns 0 def
@@ -14261,6 +17907,7 @@ begin
/ccb false def
/raw false def
/parse false def
+ /parsefnc false def
% Parse the input options
options type /stringtype eq {
@@ -14283,26 +17930,94 @@ begin
/rows rows cvi def
/rowmult rowmult cvr def
- % Parse ordinals of the form ^NNN to ASCII
- parse {
- /msg barcode length string def
- /j 0 def
- barcode
- { % loop
- (^) search {
- dup msg exch j exch putinterval
- length j add 1 add /j exch def
- pop
- dup 0 3 getinterval cvi msg exch j 1 sub exch put
- dup length 3 sub 3 exch getinterval
- } {
- dup msg exch j exch putinterval
- length j add /j exch def
- /barcode msg 0 j getinterval def
- exit
- } ifelse
- } loop
- } if
+ /micropdf417 //loadctx exec
+
+{
+ % Modes and text submodes
+ /T 0 def /N 1 def /B 2 def
+ /A 0 def /L 1 def /M 2 def /P 3 def
+
+ % Special function characters for mode switching
+ /tl -1 def /nl -2 def /bl -3 def /bl6 -4 def /bs -5 def
+
+ % Special function characters for text mode
+ /al -6 def /ll -7 def /ml -8 def /pl -9 def /as -10 def /ps -11 def
+
+ % Character maps for each state
+ /charmaps [
+ % A L M P
+ [ (A) (a) (0) (;) ] % 0
+ [ (B) (b) (1) (<) ] % 1
+ [ (C) (c) (2) (>) ] % 2
+ [ (D) (d) (3) (@) ] % 3
+ [ (E) (e) (4) ([) ] % 4
+ [ (F) (f) (5) 92 ] % 5
+ [ (G) (g) (6) (]) ] % 6
+ [ (H) (h) (7) (_) ] % 7
+ [ (I) (i) (8) (`) ] % 8
+ [ (J) (j) (9) (~) ] % 9
+ [ (K) (k) (&) (!) ] % 10
+ [ (L) (l) 13 13 ] % 11
+ [ (M) (m) 9 9 ] % 12
+ [ (N) (n) (,) (,) ] % 13
+ [ (O) (o) (:) (:) ] % 14
+ [ (P) (p) (#) 10 ] % 15
+ [ (Q) (q) (-) (-) ] % 16
+ [ (R) (r) (.) (.) ] % 17
+ [ (S) (s) ($) ($) ] % 18
+ [ (T) (t) (/) (/) ] % 19
+ [ (U) (u) (+) (") ] % 20
+ [ (V) (v) (%) (|) ] % 21
+ [ (W) (w) (*) (*) ] % 22
+ [ (X) (x) (=) 40 ] % 23
+ [ (Y) (y) (^) 41 ] % 24
+ [ (Z) (z) pl (?) ] % 25
+ [ ( ) ( ) ( ) ({) ] % 26
+ [ ll as ll (}) ] % 27
+ [ ml ml al (') ] % 28
+ [ ps ps ps al ] % 29
+ ] def
+
+ % Invert charmaps to give character to value maps for each state
+ /charvals [ 30 dict 30 dict 30 dict 30 dict ] def
+ /alltext 104 dict def
+ 0 1 charmaps length 1 sub {
+ /i exch def
+ /encs charmaps i get def
+ 0 1 3 {
+ /j exch def
+ encs j get dup type /stringtype eq {0 get} if % convert string to ASCII if required
+ dup charvals j get exch i put
+ alltext exch -1 put
+ } for
+ } for
+
+ /e 10000 def % "Empty"
+
+ /latlen [ % Bit length of latch between submodes
+ % To: A L M P From
+ [ 0 1 1 2 ] % A
+ [ 2 0 1 2 ] % L
+ [ 1 1 0 1 ] % M
+ [ 1 2 2 0 ] % P
+ ] def
+
+ /latseq [ % Latch sequences between submodes
+ % To: A L M P From
+ [ [] [ll] [ml] [ml pl] ] % A
+ [ [ml al] [] [ml] [ml pl] ] % L
+ [ [al] [ll] [] [pl] ] % M
+ [ [al] [al ll] [al ml] [] ] % P
+ ] def
+
+ /shftlen [ % Bit length of shift to submode
+ % To: A L M P From
+ [ e e e 1 ] % A
+ [ 1 e e 1 ] % L
+ [ e e e 1 ] % M
+ [ e e e e ] % P
+ ] def
+} ctxdef
raw {/encoding (raw) def} if
cca {/encoding (cca) def} if
@@ -14321,9 +18036,6 @@ begin
/datcws datcws 0 j getinterval def
} if
- /barcode [ barcode {} forall ] def
- /barlen barcode length def
-
ccb {/encoding (ccb) def} if
/encb {
@@ -14360,130 +18072,67 @@ begin
putinterval
} if
out
- } bind def
+ } def
encoding (byte) eq encoding (ccb) eq or {
+ /barlen barcode length def
/datcws barlen 6 idiv 5 mul barlen 6 mod add 1 add array def
datcws 0 barlen 6 mod 0 eq {924} {901} ifelse put
- datcws 1 barcode encb putinterval
+ datcws 1 [ barcode {} forall ] encb putinterval
encoding (ccb) eq {/datcws [920 datcws aload pop] def} if
} if
encoding (auto) eq {
- % Modes and text submodes
- /T 0 def /N 1 def /B 2 def
- /A 0 def /L 1 def /M 2 def /P 3 def
-
- % Special function characters for mode switching
- /tl -1 def /nl -2 def /bl -3 def /bl6 -4 def /bs -5 def
-
- % Special function characters for text mode
- /al -6 def /ll -7 def /ml -8 def /pl -9 def /as -10 def /ps -11 def
-
- % Character maps for each state
- /charmaps [
- % A L M P
- [ (A) (a) (0) (;) ] % 0
- [ (B) (b) (1) (<) ] % 1
- [ (C) (c) (2) (>) ] % 2
- [ (D) (d) (3) (@) ] % 3
- [ (E) (e) (4) ([) ] % 4
- [ (F) (f) (5) 92 ] % 5
- [ (G) (g) (6) (]) ] % 6
- [ (H) (h) (7) (_) ] % 7
- [ (I) (i) (8) (`) ] % 8
- [ (J) (j) (9) (~) ] % 9
- [ (K) (k) (&) (!) ] % 10
- [ (L) (l) 13 13 ] % 11
- [ (M) (m) 9 9 ] % 12
- [ (N) (n) (,) (,) ] % 13
- [ (O) (o) (:) (:) ] % 14
- [ (P) (p) (#) 10 ] % 15
- [ (Q) (q) (-) (-) ] % 16
- [ (R) (r) (.) (.) ] % 17
- [ (S) (s) ($) ($) ] % 18
- [ (T) (t) (/) (/) ] % 19
- [ (U) (u) (+) (") ] % 20
- [ (V) (v) (%) (|) ] % 21
- [ (W) (w) (*) (*) ] % 22
- [ (X) (x) (=) 40 ] % 23
- [ (Y) (y) (^) 41 ] % 24
- [ (Z) (z) pl (?) ] % 25
- [ ( ) ( ) ( ) ({) ] % 26
- [ ll as ll (}) ] % 27
- [ ml ml al (') ] % 28
- [ ps ps ps al ] % 29
- ] def
-
- % Invert charmaps to give character to value maps for each state
- /charvals [ 30 dict 30 dict 30 dict 30 dict ] def
- /alltext 104 dict def
- 0 1 charmaps length 1 sub {
- /i exch def
- /encs charmaps i get def
- 0 1 3 {
- /j exch def
- encs j get dup type /stringtype eq {0 get} if % convert string to ASCII if required
- dup charvals j get exch i put
- alltext exch -1 put
- } for
- } for
-
- /e 10000 def % "Empty"
-
- /latlen [ % Bit length of latch between submodes
- % To: A L M P From
- [ 0 1 1 2 ] % A
- [ 2 0 1 2 ] % L
- [ 1 1 0 1 ] % M
- [ 1 2 2 0 ] % P
- ] def
-
- /latseq [ % Latch sequences between submodes
- % To: A L M P From
- [ [] [ll] [ml] [ml pl] ] % A
- [ [ml al] [] [ml] [ml pl] ] % L
- [ [al] [ll] [] [pl] ] % M
- [ [al] [al ll] [al ml] [] ] % P
- ] def
-
- /shftlen [ % Bit length of shift to submode
- % To: A L M P From
- [ e e e 1 ] % A
- [ 1 e e 1 ] % L
- [ e e e 1 ] % M
- [ e e e e ] % P
- ] def
-
+ % Parse the input
+ /fncvals <<
+ /parse parse
+ /parsefnc parsefnc
+ /eci true
+ % Predates FNC non-data codewords, but supports ECI
+ >> def
+ /msg barcode fncvals //parseinput exec def
+ /msglen msg length def
+
% Determine runlengths of digits
- /numdigits [ barlen {0} repeat 0 ] def
- /numtext [ barlen {0} repeat 0 ] def
- /numbytes [ barlen {0} repeat 0 ] def
- barlen 1 sub -1 0 {
+ /numdigits [ msglen {0} repeat 0 ] def
+ /numtext [ msglen {0} repeat 0 ] def
+ /numbytes [ msglen {0} repeat 0 ] def
+ /iseci [ msglen {0} repeat ] def
+ msglen 1 sub -1 0 {
/i exch def
- barcode i get dup 48 ge exch 57 le and {
+ msg i get dup 48 ge exch 57 le and {
numdigits i numdigits i 1 add get 1 add put
} if
- alltext barcode i get known numdigits i get 13 lt and {
+ alltext msg i get known numdigits i get 13 lt and {
numtext i numtext i 1 add get 1 add put
} if
- numtext i get 5 lt numdigits i get 13 lt and {
+ msg i get 0 ge numtext i get 5 lt and numdigits i get 13 lt and {
numbytes i numbytes i 1 add get 1 add put
} if
+ iseci i msg i get -1000000 le put
} for
- /numdigits numdigits 0 barlen getinterval def
- /numtext numtext 0 barlen getinterval def
- /numbytes numbytes 0 barlen getinterval def
-
+ /numdigits numdigits 0 msglen getinterval def
+ /numtext numtext 0 msglen getinterval def
+ /numbytes numbytes 0 msglen getinterval def
+
/seq [] def /seqlen 0 def /state B def /p 0 def { % loop
- p barlen eq {exit} if
+ p msglen eq {exit} if
+ iseci p get {
+ /eci msg p get def
+ /seq [
+ seq aload pop
+ [ eci ]
+ ] def
+ /p p 1 add def
+ /seqlen seqlen eci -1810900 le {2} {eci -1000900 le {3} {2} ifelse} ifelse add def
+ } {
/n numdigits p get def
n 13 ge {
/seq [
seq aload pop
nl
- [ barcode p n getinterval aload pop ]
+ [ msg p n getinterval aload pop ]
] def
/state N def
/p p n add def
@@ -14493,8 +18142,10 @@ begin
t 5 ge {
/seq [
seq aload pop
- state T ne {tl} if
- [ barcode p t getinterval aload pop ]
+ state T ne {
+ tl
+ } if
+ [ msg p t getinterval aload pop ]
] def
/state T def
/p p t add def
@@ -14505,7 +18156,7 @@ begin
/seq [
seq aload pop
bs
- [ barcode p get ]
+ [ msg p get ]
] def
/p p b add def
/seqlen seqlen 2 add def
@@ -14513,43 +18164,43 @@ begin
/seq [
seq aload pop
b 6 mod 0 ne {bl} {bl6} ifelse
- [ barcode p b getinterval aload pop ]
+ [ msg p b getinterval aload pop ]
] def
/state B def
/p p b add def
/seqlen seqlen 1 add b add def
- } ifelse } ifelse } ifelse
+ } ifelse } ifelse } ifelse } ifelse
} loop
-
+
/latchcws <<
tl 900 bl 901 bl6 924 nl 902 bs 913
>> def
-
+
% Submode encoding functions
- /enca {charvals A get exch get} bind def
- /encl {charvals L get exch get} bind def
- /encm {charvals M get exch get} bind def
- /encp {charvals P get exch get} bind def
+ /enca {charvals A get exch get} def
+ /encl {charvals L get exch get} def
+ /encm {charvals M get exch get} def
+ /encp {charvals P get exch get} def
/textencfuncs [ /enca /encl /encm /encp ] def
-
+
/addtotext {
text exch l exch put
/l l 1 add def
- } bind def
-
+ } def
+
/enct {
-
+
/in exch def
-
+
/curlen [ e e e e ] def
curlen submode 0 put
/curseq [ [] [] [] [] ] def
-
+
% Derive the optimal sequences ending in each submode
in {
-
+
/char exch def
-
+
% Check for optimisations in the current sequences by latching from x to y
{ % loop
/imp false def
@@ -14570,25 +18221,25 @@ begin
} forall
imp not {exit} if % Repeat unless no improvement
} loop
-
+
% Determine optimal next sequences for each valid encoding
/nxtlen [ e e e e ] def
/nxtseq 4 array def
-
+
[ A L M P ] {
/x exch def
-
+
{ % loop for common exit
-
+
charvals x get char known not {exit} if
-
+
% Extend directly
/cost curlen x get 1 add def
cost nxtlen x get lt {
nxtlen x cost put
nxtseq x [ curseq x get aload pop char ] put
} if
-
+
% Optimise for direct shifts from y to x
[ A L M P ] {
/y exch def
@@ -14604,17 +18255,17 @@ begin
} if
} if
} forall
-
+
exit
} loop
-
+
} forall
-
+
/curlen nxtlen def
/curseq nxtseq def
-
+
} forall
-
+
% Select the optimal sequence
/minseq e def
[ A L M P ] {
@@ -14624,31 +18275,31 @@ begin
/txtseq curseq k get def
} if
} forall
-
+
% Encode the sequence
/text minseq array def
/k 0 def /l 0 def {
k txtseq length ge {exit} if
-
+
/char txtseq k get def
-
+
% Encode character
char textencfuncs submode get load exec addtotext
/k k 1 add def
-
+
% Encode shifted next character
char as eq char ps eq or {
txtseq k get char as eq {enca} {encp} ifelse addtotext
/k k 1 add def
} if
-
+
% Latches to new submode
char al eq {/submode A def} if
char ll eq {/submode L def} if
char ml eq {/submode M def} if
char pl eq {/submode P def} if
} loop
-
+
text length 2 mod 1 eq {
submode P eq {
/pad al encp def
@@ -14658,17 +18309,17 @@ begin
} ifelse
/text [ text aload pop pad ] def
} if
-
+
/out text length 2 idiv array def
0 1 out length 1 sub {
/k exch def
out k text k 2 mul get 30 mul text k 2 mul 1 add get add put
} for
-
+
out
-
- } bind def
-
+
+ } def
+
/encn {
/in exch def
/out [] def
@@ -14701,23 +18352,40 @@ begin
/out [ out aload pop cwn aload pop ] def
} for
out
- } bind def
-
+ } def
+
+ /ence {
+ 0 get neg 1000000 sub
+ dup 000899 le { % ECI 000000 - 000899
+ 927 exch 2 array astore
+ } { dup 810899 le { % ECI 000900 - 810899
+ 926 exch dup 900 idiv 1 sub exch 900 mod 3 array astore
+ } { dup 811799 le { % ECI 810900 - 811799
+ 925 exch 810900 sub 2 array astore
+ } {
+ /bwipp.pdf417badECI (PDF417 supports ECIs 000000 to 811799) //raiseerror exec
+ } ifelse } ifelse } ifelse
+ } def
+
/encfuncs [ /enct /encn /encb ] def
-
+
/addtocws {
dup datcws j 3 -1 roll putinterval
length j add /j exch def
- } bind def
-
+ } def
+
% Encode the sequence
- /state T def /submode A def
+ % No need to set state as seq will always begin with a latch, unlike for pdf417
/datcws seqlen array def
/i 0 def /j 0 def {
i seq length ge {exit} if
/chars seq i get def
chars type /arraytype eq { % Encode data according to mode
- chars encfuncs state get load exec addtocws
+ chars 0 get -1000000 le { % ECI
+ chars ence addtocws
+ } { % Encode data according to mode
+ chars encfuncs state get load exec addtocws
+ } ifelse
} { % Encode the latch to new state or byte shift
[ latchcws chars get ] addtocws
chars tl eq {/state T def /submode A def} if
@@ -14733,9 +18401,32 @@ begin
/datcws datcws 0 j getinterval def
} if
+{
% Basic metrics for the each symbol
% c r ecw rl rc rr
- /metrics [
+ /ccametrics [
+ [ 2 5 4 39 0 19 ]
+ [ 2 6 4 1 0 33 ]
+ [ 2 7 5 32 0 12 ]
+ [ 2 8 5 8 0 40 ]
+ [ 2 9 6 14 0 46 ]
+ [ 2 10 6 43 0 23 ]
+ [ 2 12 7 20 0 52 ]
+ [ 3 4 4 11 43 23 ]
+ [ 3 5 5 1 33 13 ]
+ [ 3 6 6 5 37 17 ]
+ [ 3 7 7 15 47 27 ]
+ [ 3 8 7 21 1 33 ]
+ [ 4 3 4 40 20 52 ]
+ [ 4 4 5 43 23 3 ]
+ [ 4 5 6 46 26 6 ]
+ [ 4 6 7 34 14 46 ]
+ [ 4 7 8 29 9 41 ]
+ ] def
+
+ % Basic metrics for the each symbol
+ % c r ecw rl rc rr
+ /nonccametrics [
[ 1 11 7 1 0 9 ]
[ 1 14 7 8 0 8 ]
[ 1 17 7 36 0 36 ]
@@ -14771,29 +18462,9 @@ begin
[ 4 38 44 15 31 47 ]
[ 4 44 50 1 25 49 ]
] def
+} ctxdef
- % Basic metrics for the each symbol
- % c r ecw rl rc rr
- /ccametrics [
- [ 2 5 4 39 0 19 ]
- [ 2 6 4 1 0 33 ]
- [ 2 7 5 32 0 12 ]
- [ 2 8 5 8 0 40 ]
- [ 2 9 6 14 0 46 ]
- [ 2 10 6 43 0 23 ]
- [ 2 12 7 20 0 52 ]
- [ 3 4 4 11 43 23 ]
- [ 3 5 5 1 33 13 ]
- [ 3 6 6 5 37 17 ]
- [ 3 7 7 15 47 27 ]
- [ 3 8 7 21 1 33 ]
- [ 4 3 4 40 20 52 ]
- [ 4 4 5 43 23 3 ]
- [ 4 5 6 46 26 6 ]
- [ 4 6 7 34 14 46 ]
- [ 4 7 8 29 9 41 ]
- ] def
- cca {/metrics ccametrics def} if
+ /metrics cca {ccametrics} {nonccametrics} ifelse def
% Select metrics of an appropriate symbol
/urows rows def
@@ -14825,9 +18496,11 @@ begin
cws n [ k {0} repeat 0 ] putinterval
% Calculate the log and anti-log tables
+{
/rsalog [ 1 928 {dup 3 mul 929 mod} repeat ] def
/rslog 929 array def
1 1 928 {dup rsalog exch get exch rslog 3 1 roll put} for
+} ctxdef
% Function to calculate the product in the field
/rsprod {
@@ -14836,17 +18509,17 @@ begin
} {
pop pop 0
} ifelse
- } bind def
+ } def
% Generate the coefficients
/coeffs [ 1 k {0} repeat ] def
1 1 k {
- /i exch def
+ /i exch def
coeffs i coeffs i 1 sub get put
i 1 sub -1 1 {
/j exch def
coeffs j coeffs j 1 sub get coeffs j get rsalog i get rsprod add 929 mod put
- } for
+ } for
coeffs 0 coeffs 0 get rsalog i get rsprod put
} for
/coeffs coeffs 0 coeffs length 1 sub getinterval def
@@ -14865,6 +18538,9 @@ begin
% Trim the working space from the end of the codewords
/cws cws 0 cws length 1 sub getinterval def
+ options /debugcws known { /bwipp.debugcws cws //raiseerror exec } if
+
+{
% Base 10 encoding of the bar space successions for the codewords in each cluster
/clusters [
[
@@ -15121,20 +18797,21 @@ begin
654 652 668 664 696 688 656 720 592 600 604 732 734
]
] def
+} ctxdef
% Return the 17 bits for a codeword in a given cluster
/cwtobits {
clusters exch get exch get /v exch def
[ 17 {0} repeat v 2 17 string cvrs {48 sub} forall ]
dup length 17 sub 17 getinterval
- } bind def
+ } def
% Return the 10 bits for a row address pattern
/raptobits {
raps exch get exch get /v exch def
[ 10 {0} repeat v 2 10 string cvrs {48 sub} forall ]
dup length 10 sub 10 getinterval
- } bind def
+ } def
% Populate bitmap for the image
/rwid [38 55 82 99] c 1 sub get def
@@ -15192,9 +18869,13 @@ begin
dontdraw not //renmatrix if
+ //unloadctx exec
+
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/micropdf417 dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -15203,16 +18884,19 @@ end
% --END ENCODER micropdf417--
% --BEGIN ENCODER datamatrix--
-% --REQUIRES preamble raiseerror renmatrix--
+% --REQUIRES preamble loadctx unloadctx raiseerror parseinput renmatrix--
% --DESC: Data Matrix
% --EXAM: This is Data Matrix!
% --EXOP:
% --RNDR: renmatrix
-%%BeginResource: uk.co.terryburton.bwipp datamatrix 0.0 2017040400 258183 263444
-%%BeginData: 889 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp datamatrix 0.0 2022082100 213189 215115
+%%BeginData: 934 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
+dup /loadctx dup /uk.co.terryburton.bwipp findresource put
+dup /unloadctx dup /uk.co.terryburton.bwipp findresource put
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /parseinput dup /uk.co.terryburton.bwipp findresource put
dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
begin
/datamatrix {
@@ -15222,6 +18906,7 @@ begin
/options exch def
/barcode exch def
+ /ctx null def
/dontdraw false def
/columns 0 def
/rows 0 def
@@ -15229,7 +18914,12 @@ begin
/version (unset) def
/parse false def
/parsefnc false def
- /dmre false def
+ /encoding (auto) def
+ /mailmark false def
+ /raw false def
+ /dmre false def % Alias for isodmre
+ /dindmre false def
+ /isodmre false def
% Parse the input options
options type /stringtype eq {
@@ -15251,121 +18941,67 @@ begin
/columns columns cvi def
/rows rows cvi def
- % Parse ordinals of the form ^NNN to ASCII
- parse {
- /msg barcode length string def
- /j 0 def
- barcode
- { % loop
- (^) search {
- dup msg exch j exch putinterval
- length j add 1 add /j exch def
- pop
- dup 0 3 getinterval cvi msg exch j 1 sub exch put
- dup length 3 sub 3 exch getinterval
- } {
- dup msg exch j exch putinterval
- length j add /j exch def
- /barcode msg 0 j getinterval def
- exit
- } ifelse
- } loop
- } if
+ /isodmre dmre def
- % Macro 05/06 compression of [)>{RS}05/06{GS}...{RS}{EOT} structured data
- /mac05comp false def
- /mac06comp false def
- barcode length 9 ge {
- barcode 0 7 getinterval
- dup ([\)>\03605\035) eq
- exch ([\)>\03606\035) eq or
- barcode barcode length 2 sub 2 getinterval (\036\004) eq and {
- barcode 5 get 53 eq {/mac05comp} {/mac06comp} ifelse true def
- /barcode barcode 7 barcode length 9 sub getinterval def
- } if
- } if
-
- /barlen barcode length def
-
- % Convert input into bytes accounting for FNC characters
- /fnc1 -1 def /prog -2 def /m05 -3 def /m06 -4 def
- /fncvals <<
- (FNC1) fnc1
- (PROG) prog
- (MAC5) m05
- (MAC6) m06
- >> def
- /msg barlen array def
- /i 0 def /j 0 def {
- i barlen eq {exit} if
- /char barcode i get def
- parsefnc char 94 eq and i barlen 4 sub lt and {
- barcode i 1 add get 94 ne {
- /char fncvals barcode i 1 add 4 getinterval get def
- /i i 4 add def
- } {
- /i i 1 add def
- } ifelse
- } if
- msg j char put
- /i i 1 add def
- /j j 1 add def
- } loop
- /msg msg 0 j getinterval def
-
- % Prefix the Macro 05/06 compression indicator
- mac05comp { /msg [ m05 msg aload pop ] def } if
- mac06comp { /msg [ m06 msg aload pop ] def } if
-
- /msglen msg length def
+ /datamatrix //loadctx exec
+ % TODO make this "static"
% Basic metrics for the each symbol
- % rows cols regh regv rscw rsbl
+ % rows cols regh regv rscw rsbl
/metrics [
% Standard square symbols
- [ 10 10 1 1 5 1 ]
- [ 12 12 1 1 7 1 ]
- [ 14 14 1 1 10 1 ]
- [ 16 16 1 1 12 1 ]
- [ 18 18 1 1 14 1 ]
- [ 20 20 1 1 18 1 ]
- [ 22 22 1 1 20 1 ]
- [ 24 24 1 1 24 1 ]
- [ 26 26 1 1 28 1 ]
- [ 32 32 2 2 36 1 ]
- [ 36 36 2 2 42 1 ]
- [ 40 40 2 2 48 1 ]
- [ 44 44 2 2 56 1 ]
- [ 48 48 2 2 68 1 ]
- [ 52 52 2 2 84 2 ]
- [ 64 64 4 4 112 2 ]
- [ 72 72 4 4 144 4 ]
- [ 80 80 4 4 192 4 ]
- [ 88 88 4 4 224 4 ]
- [ 96 96 4 4 272 4 ]
- [ 104 104 4 4 336 6 ]
- [ 120 120 6 6 408 6 ]
- [ 132 132 6 6 496 8 ]
- [ 144 144 6 6 620 10 ]
+ [ 10 10 1 1 5 1 ]
+ [ 12 12 1 1 7 1 ]
+ [ 14 14 1 1 10 1 ]
+ [ 16 16 1 1 12 1 ]
+ [ 18 18 1 1 14 1 ]
+ [ 20 20 1 1 18 1 ]
+ [ 22 22 1 1 20 1 ]
+ [ 24 24 1 1 24 1 ]
+ [ 26 26 1 1 28 1 ]
+ [ 32 32 2 2 36 1 ]
+ [ 36 36 2 2 42 1 ]
+ [ 40 40 2 2 48 1 ]
+ [ 44 44 2 2 56 1 ]
+ [ 48 48 2 2 68 1 ]
+ [ 52 52 2 2 84 2 ]
+ [ 64 64 4 4 112 2 ]
+ [ 72 72 4 4 144 4 ]
+ [ 80 80 4 4 192 4 ]
+ [ 88 88 4 4 224 4 ]
+ [ 96 96 4 4 272 4 ]
+ [ 104 104 4 4 336 6 ]
+ [ 120 120 6 6 408 6 ]
+ [ 132 132 6 6 496 8 ]
+ [ 144 144 6 6 620 10 ]
% Optional rectangular symbols
- [ 8 18 1 1 7 1 ]
- [ 8 32 1 2 11 1 ]
- dmre { [ 8 48 1 2 15 1 ] } if
- dmre { [ 8 64 1 4 18 1 ] } if
- [ 12 26 1 1 14 1 ]
- [ 12 36 1 2 18 1 ]
- dmre { [ 12 64 1 4 27 1 ] } if
- [ 16 36 1 2 24 1 ]
- [ 16 48 1 2 28 1 ]
- dmre { [ 16 64 1 4 36 1 ] } if
- dmre { [ 24 32 1 2 28 1 ] } if
- dmre { [ 24 36 1 2 33 1 ] } if
- dmre { [ 24 48 1 2 41 1 ] } if
- dmre { [ 24 64 1 4 46 1 ] } if
- dmre { [ 26 32 1 2 32 1 ] } if
- dmre { [ 26 40 1 2 38 1 ] } if
- dmre { [ 26 48 1 2 42 1 ] } if
- dmre { [ 26 64 1 4 50 1 ] } if
+ [ 8 18 1 1 7 1 ]
+ [ 8 32 1 2 11 1 ]
+ dindmre isodmre or { [ 8 48 1 2 15 1 ] } if
+ dindmre isodmre or { [ 8 64 1 4 18 1 ] } if
+ isodmre { [ 8 80 1 4 22 1 ] } if
+ isodmre { [ 8 96 1 4 28 1 ] } if
+ isodmre { [ 8 120 1 6 32 1 ] } if
+ isodmre { [ 8 144 1 6 36 1 ] } if
+ [ 12 26 1 1 14 1 ]
+ [ 12 36 1 2 18 1 ]
+ dindmre isodmre or { [ 12 64 1 4 27 1 ] } if
+ isodmre { [ 12 88 1 4 36 1 ] } if
+ [ 16 36 1 2 24 1 ]
+ [ 16 48 1 2 28 1 ]
+ dindmre isodmre or { [ 16 64 1 4 36 1 ] } if
+ isodmre { [ 20 36 1 2 28 1 ] } if
+ isodmre { [ 20 44 1 2 34 1 ] } if
+ isodmre { [ 20 64 1 4 42 1 ] } if
+ isodmre { [ 22 48 1 2 38 1 ] } if
+ dindmre { [ 24 32 1 2 28 1 ] } if
+ dindmre { [ 24 36 1 2 33 1 ] } if
+ dindmre isodmre or { [ 24 48 1 2 41 1 ] } if
+ dindmre isodmre or { [ 24 64 1 4 46 1 ] } if
+ dindmre { [ 26 32 1 2 32 1 ] } if
+ dindmre isodmre or { [ 26 40 1 2 38 1 ] } if
+ dindmre isodmre or { [ 26 48 1 2 42 1 ] } if
+ dindmre isodmre or { [ 26 64 1 4 50 1 ] } if
] def
% Create array of codewords remaining to make a full symbol
@@ -15399,11 +19035,13 @@ begin
} if
} for
+{
% Special characters
+ /fnc1 -1 def /prog -2 def /m05 -3 def /m06 -4 def
/lC -5 def /lB -6 def /lX -7 def /lT -8 def /lE -9 def /unl -10 def
/sapp -11 def /usft -12 def /sft1 -13 def /sft2 -14 def /sft3 -15 def /eci -16 def /pad -17 def
/unlcw 254 def
-
+
/Avals <<
0 1 128 {dup 1 add} for
pad 129
@@ -15416,7 +19054,7 @@ begin
/Avals <<
Avals {[exch]} forall
>> def
-
+
/CNvals <<
sft1 0
sft2 1
@@ -15440,7 +19078,7 @@ begin
C2vals {[exch CNvals sft2 get exch]} forall
C3vals {[exch CNvals sft3 get exch]} forall
>> def
-
+
/TNvals <<
sft1 0
sft2 1
@@ -15468,7 +19106,7 @@ begin
T2vals {[exch TNvals sft2 get exch]} forall
T3vals {[exch TNvals sft3 get exch]} forall
>> def
-
+
% Extended ASCII mappings
128 1 255 {
/i exch def
@@ -15476,7 +19114,7 @@ begin
Cvals i [ Cvals usft get aload pop Cvals i 128 sub get aload pop ] put
Tvals i [ Tvals usft get aload pop Tvals i 128 sub get aload pop ] put
} for
-
+
/Xvals <<
13 0
42 1
@@ -15488,7 +19126,7 @@ begin
/Xvals <<
Xvals {[exch]} forall
>> def
-
+
/Evals <<
64 1 94 {dup 64 sub} for
unl 31
@@ -15497,345 +19135,425 @@ begin
/Evals <<
Evals {[exch]} forall
>> def
-
+
/Bvals <<
0 1 255 {dup} for
>> def
/Bvals <<
Bvals {[exch]} forall
>> def
-
+
/encvals [ Avals Cvals Tvals Xvals Evals Bvals ] def
-
- /numD [ msglen {0} repeat 0 ] def
- /nextXterm [ msglen {0} repeat 9999 ] def
- /nextNonX [ msglen {0} repeat 9999 ] def
- msglen 1 sub -1 0 {
- /i exch def
- /barchar msg i get def
- barchar 48 ge barchar 57 le and {
- numD i numD i 1 add get 1 add put
- } if
- barchar 13 eq barchar 42 eq or barchar 62 eq or {
- nextXterm i 0 put
- } {
- nextXterm i nextXterm i 1 add get 1 add put
- } ifelse
- Xvals barchar known not {
- nextNonX i 0 put
- } {
- nextNonX i nextNonX i 1 add get 1 add put
- } ifelse
- } for
- /nextXterm [nextXterm {dup 10000 gt {pop 10000} if} forall] def
- /nextNonX [nextNonX {dup 10000 gt {pop 10000} if} forall] def
-
- /isD {char 48 ge char 57 le and} bind def
- /isC {CNvals char known} bind def
- /isT {TNvals char known} bind def
- /isX {Xvals char known} bind def
- /isE {Evals char known} bind def
- /isEA {char 127 gt} bind def
- /isFN {char 0 lt} bind def
- /XtermFirst {dup nextXterm exch get exch nextNonX exch get lt} bind def
-
+
/A 0 def /C 1 def /T 2 def /X 3 def /E 4 def /B 5 def
+} ctxdef
- /lookup {
- /ac 1 def /cc 2 def /tc 2 def /xc 2 def /ec 2 def /bc 2.25 def
- mode A eq {/ac 0 def /cc 1 def /tc 1 def /xc 1 def /ec 1 def /bc 1.25 def} if
- mode C eq {/cc 0 def} if
- mode T eq {/tc 0 def} if
- mode X eq {/xc 0 def} if
- mode E eq {/ec 0 def} if
- mode B eq {/bc 0 def} if
- 1 { % common exit
- /k 0 def { % loop
- i k add msglen eq {
- [/ac /cc /tc /xc /ec /bc] {dup load ceiling def} forall
- true [ cc tc xc ec bc] {ac exch le and} forall {A exit} if
- true [ac cc tc xc ec ] {bc exch lt and} forall {B exit} if
- true [ac cc tc xc bc] {ec exch lt and} forall {E exit} if
- true [ac cc xc ec bc] {tc exch lt and} forall {T exit} if
- true [ac cc tc ec bc] {xc exch lt and} forall {X exit} if
- C exit
- } if
- /char msg i k add get def
- /ac ac isD {1 2 div add} {isEA {ceiling 2 add} {ceiling 1 add} ifelse} ifelse def
- /cc cc isC {2 3 div add} {isEA { 8 3 div add } { 4 3 div add } ifelse} ifelse def
- /tc tc isT {2 3 div add} {isEA { 8 3 div add } { 4 3 div add } ifelse} ifelse def
- /xc xc isX {2 3 div add} {isEA {13 3 div add } {10 3 div add } ifelse} ifelse def
- /ec ec isE {3 4 div add} {isEA {17 4 div add } {13 4 div add } ifelse} ifelse def
- /bc bc isFN {4 add} {1 add} ifelse def
- k 4 ge {
- true [ cc tc xc ec bc] {ac 1 add exch le and} forall {A exit} if
- bc 1 add ac le {B exit} if
- true [ cc tc xc ec ] {bc 1 add exch lt and} forall {B exit} if
- true [ac cc tc xc bc] {ec 1 add exch lt and} forall {E exit} if
- true [ac cc xc ec bc] {tc 1 add exch lt and} forall {T exit} if
- true [ac cc tc ec bc] {xc 1 add exch lt and} forall {X exit} if
- true [ac tc ec bc] {cc 1 add exch lt and} forall {
- cc xc lt {C exit} if
- cc xc eq {i k add 1 add XtermFirst {X exit} {C exit} ifelse} if
- } if
+ raw {/encoding (raw) def} if
+
+ encoding (raw) eq {
+ /cws barcode length array def
+ /i 0 def /j 0 def
+ { % loop
+ i barcode length eq {exit} if
+ /cw barcode i 1 add 3 getinterval cvi def
+ cws j cw put
+ /i i 4 add def
+ /j j 1 add def
+ } loop
+ /cws cws 0 j getinterval def
+ } if % encoding=raw
+
+ encoding (auto) eq {
+
+ % Parse the input
+ /fncvals <<
+ /parse parse
+ /parsefnc parsefnc
+ /eci true
+ (FNC1) fnc1
+ (PROG) prog
+% (MAC5) m05 Encoded automatically
+% (MAC6) m06 Encoded automatically
+ >> def
+ /msg barcode fncvals //parseinput exec def
+ /msglen msg length def
+
+ % Macro 05/06 compression of [)>{RS}05/06{GS}...{RS}{EOT} structured data
+ msglen 9 ge {
+ msg 0 7 getinterval aload pop
+ 29 eq exch pop exch 48 eq and exch % [)>{RS}0*{GS}...
+ 30 eq and exch 62 eq and exch 41 eq and exch 91 eq and {
+ msg msglen 2 sub 2 getinterval aload pop
+ 4 eq exch 30 eq and { % ...{RS}{EOT}
+ msg 5 get 53 eq { % ...5...
+ /msg [ m05 msg 7 msg length 9 sub getinterval aload pop ] def
+ } {
+ msg 5 get 54 eq { % ...6...
+ /msg [ m06 msg 7 msg length 9 sub getinterval aload pop ] def
+ } if
+ } ifelse
} if
- /k k 1 add def
- } loop
- } repeat
- } bind def
-
- /addtocws {
- dup cws exch j exch putinterval
- /j exch length j add def
- } bind def
-
- /encA {
- 1 { % Common exit
- numD i get 2 ge {
- 2 string dup 0 msg i get put dup 1 msg i 1 add get put Avals exch get addtocws
- /i i 2 add def
- exit
} if
- /newmode lookup def
- newmode mode ne {
- Avals [-1 lC lT lX lE lB] newmode get get addtocws
- /mode newmode def
- exit
+ } if
+ /msglen msg length def
+
+ /numD [ msglen {0} repeat 0 ] def
+ /nextXterm [ msglen {0} repeat 9999 ] def
+ /nextNonX [ msglen {0} repeat 9999 ] def
+ /isECI [ msglen {false} repeat false ] def
+ msglen 1 sub -1 0 {
+ /i exch def
+ /barchar msg i get def
+ barchar 48 ge barchar 57 le and {
+ numD i numD i 1 add get 1 add put
} if
- Avals msg i get get addtocws
- /i i 1 add def
- exit
- } repeat
- } bind def
-
- /CTXvalstocws {
- /in exch def
- mark
- 0 3 in length 1 sub {
- in exch 3 getinterval 0 exch {add 40 mul} forall 40 idiv 1 add
- dup 256 idiv exch 256 mod
+ barchar 13 eq barchar 42 eq or barchar 62 eq or {
+ nextXterm i 0 put
+ } {
+ nextXterm i nextXterm i 1 add get 1 add put
+ } ifelse
+ Xvals barchar known not {
+ nextNonX i 0 put
+ } {
+ nextNonX i nextNonX i 1 add get 1 add put
+ } ifelse
+ isECI i barchar -1000000 le put
} for
- counttomark array astore exch pop
- } bind def
-
- /encCTX {
- /p 0 def
- /ctxvals 2500 array def
-
- % Lookup the values for each character
- {
- i msglen eq {exit} if
- encvals mode get msg i get known not {exit} if
- p 3 mod 0 eq {
- lookup mode ne {
- ctxvals 0 p getinterval CTXvalstocws addtocws
- [unlcw] addtocws
- /mode A def
+ /nextXterm [nextXterm {dup 10000 gt {pop 10000} if} forall] def
+ /nextNonX [nextNonX {dup 10000 gt {pop 10000} if} forall] def
+
+ /isD {char 48 ge char 57 le and} def
+ /isC {CNvals char known} def
+ /isT {TNvals char known} def
+ /isX {Xvals char known} def
+ /isE {Evals char known} def
+ /isEA {char 127 gt} def
+ /isFN {char 0 lt} def
+ /XtermFirst {dup nextXterm exch get exch nextNonX exch get lt} def
+
+ /lookup {
+ /ac 1 def /cc 2 def /tc 2 def /xc 2 def /ec 2 def /bc 2.25 def
+ mode A eq {/ac 0 def /cc 1 def /tc 1 def /xc 1 def /ec 1 def /bc 1.25 def} if
+ mode C eq {/cc 0 def} if
+ mode T eq {/tc 0 def} if
+ mode X eq {/xc 0 def} if
+ mode E eq {/ec 0 def} if
+ mode B eq {/bc 0 def} if
+ 1 { % common exit
+ isECI i get {A exit} if % ECI only in ASCII
+ mailmark i 45 lt and {C exit} if % Mailmark is C40 only for 45 characters
+ /k 0 def { % loop
+ i k add msglen eq {
+ [/ac /cc /tc /xc /ec /bc] {dup load ceiling def} forall
+ true [ cc tc xc ec bc] {ac exch le and} forall {A exit} if
+ true [ac cc tc xc ec ] {bc exch lt and} forall {B exit} if
+ true [ac cc tc xc bc] {ec exch lt and} forall {E exit} if
+ true [ac cc xc ec bc] {tc exch lt and} forall {T exit} if
+ true [ac cc tc ec bc] {xc exch lt and} forall {X exit} if
+ C exit
+ } if
+ /char msg i k add get def
+ /ac ac isD {1 2 div add} {isEA {ceiling 2 add} {ceiling 1 add} ifelse} ifelse def
+ /cc cc isC {2 3 div add} {isEA { 8 3 div add } { 4 3 div add } ifelse} ifelse def
+ /tc tc isT {2 3 div add} {isEA { 8 3 div add } { 4 3 div add } ifelse} ifelse def
+ /xc xc isX {2 3 div add} {isEA {13 3 div add } {10 3 div add } ifelse} ifelse def
+ /ec ec isE {3 4 div add} {isEA {17 4 div add } {13 4 div add } ifelse} ifelse def
+ /bc bc isFN {4 add} {1 add} ifelse def
+ k 4 ge {
+ true [ cc tc xc ec bc] {ac 1 add exch le and} forall {A exit} if
+ bc 1 add ac le {B exit} if
+ true [ cc tc xc ec ] {bc 1 add exch lt and} forall {B exit} if
+ true [ac cc tc xc bc] {ec 1 add exch lt and} forall {E exit} if
+ true [ac cc xc ec bc] {tc 1 add exch lt and} forall {T exit} if
+ true [ac cc tc ec bc] {xc 1 add exch lt and} forall {X exit} if
+ true [ac tc ec bc] {cc 1 add exch lt and} forall {
+ cc xc lt {C exit} if
+ cc xc eq {i k add 1 add XtermFirst {X exit} {C exit} ifelse} if
+ } if
+ } if
+ /k k 1 add def
+ } loop
+ } repeat
+ } def
+
+ /addtocws {
+ dup cws exch j exch putinterval
+ /j exch length j add def
+ } def
+
+ /ECItocws {
+ neg 1000000 sub
+ dup 000126 le { % ECI 000000 - 000126
+ 1 add
+ 1 array astore
+ } { dup 016382 le { % ECI 000127 - 016382
+ 127 sub
+ dup 254 idiv 128 add exch
+ 254 mod 1 add
+ 2 array astore
+ } { % ECI 016383 - 999999
+ 16383 sub
+ dup 64516 idiv 192 add exch
+ dup 254 idiv 254 mod 1 add exch
+ 254 mod 1 add
+ 3 array astore
+ } ifelse } ifelse
+ } def
+
+ /encA {
+ 1 { % Common exit
+ isECI i get {
+ Avals eci get addtocws
+ msg i get ECItocws addtocws
+ /i i 1 add def
exit
} if
- msglen i sub 3 le { % Check end of data conditions
- /remcws numremcws j p 3 idiv 2 mul add get def
- /remvals [
- msg i msglen i sub getinterval {
- dup encvals mode get exch known {
- encvals mode get exch get aload pop
- } { % Unencodable X12 characters
- pop -1 -1 -1 -1
- } ifelse
- } forall
- ] def
- remcws 2 eq remvals length 3 eq and {
- % Encode and omit unlatch
- [
- ctxvals 0 p getinterval aload pop
- remvals aload pop
- ] CTXvalstocws addtocws
- /mode A def
- /i msglen def
- exit
- } if
- remcws 2 eq remvals length 2 eq and mode X ne and {
- % Encode with sft1 as third value, omit unlatch
- [
- ctxvals 0 p getinterval aload pop
- remvals aload pop
- encvals mode get sft1 get aload pop
- ] CTXvalstocws addtocws
- /mode A def
- /i msglen def
- exit
+ numD i get 2 ge {
+ 2 string dup 0 msg i get put dup 1 msg i 1 add get put Avals exch get addtocws
+ /i i 2 add def
+ exit
+ } if
+ /newmode lookup def
+ newmode mode ne {
+ Avals [-1 lC lT lX lE lB] newmode get get addtocws
+ /mode newmode def
+ exit
+ } if
+ Avals msg i get get addtocws
+ /i i 1 add def
+ exit
+ } repeat
+ } def
+
+ /CTXvalstocws {
+ /in exch def
+ mark
+ 0 3 in length 1 sub {
+ in exch 3 getinterval 0 exch {add 40 mul} forall 40 idiv 1 add
+ dup 256 idiv exch 256 mod
+ } for
+ counttomark array astore exch pop
+ } def
+
+ /encCTX {
+ /p 0 def
+ /ctxvals 2500 array def
+ /done false def
+
+ % Lookup the values for each character
+ {
+ i msglen eq {exit} if
+ encvals mode get msg i get known not {exit} if
+ p 3 mod 0 eq {
+ p 0 gt {
+ /newmode lookup def
+ newmode mode ne {
+ ctxvals 0 p getinterval CTXvalstocws addtocws
+ [unlcw] addtocws
+ newmode A ne {
+ Avals [-1 lC lT lX lE lB] newmode get get addtocws
+ } if
+ /mode newmode def
+ /done true def
+ exit
+ } if
} if
- remcws 2 eq remvals length 1 eq and {
- % Unlatch to ASCII
- ctxvals 0 p getinterval CTXvalstocws addtocws
- [unlcw] addtocws
- Avals msg i get get addtocws
- /mode A def
- /i msglen def
- exit
+ msglen i sub 3 le { % Check end of data conditions
+ /remcws numremcws j p 3 idiv 2 mul add get def
+ /remvals [
+ msg i msglen i sub getinterval {
+ dup encvals mode get exch known {
+ encvals mode get exch get aload pop
+ } { % Unencodable X12 characters
+ pop -1 -1 -1 -1
+ } ifelse
+ } forall
+ ] def
+ remcws 2 eq remvals length 3 eq and {
+ % Encode and omit unlatch
+ [
+ ctxvals 0 p getinterval aload pop
+ remvals aload pop
+ ] CTXvalstocws addtocws
+ /mode A def
+ /i msglen def
+ /done true def
+ exit
+ } if
+ remcws 2 eq remvals length 2 eq and mode X ne and {
+ % Encode with sft1 as third value, omit unlatch
+ [
+ ctxvals 0 p getinterval aload pop
+ remvals aload pop
+ encvals mode get sft1 get aload pop
+ ] CTXvalstocws addtocws
+ /mode A def
+ /i msglen def
+ /done true def
+ exit
+ } if
+ remcws 2 eq remvals length 1 eq and {
+ % Unlatch to ASCII
+ ctxvals 0 p getinterval CTXvalstocws addtocws
+ [unlcw] addtocws
+ Avals msg i get get addtocws
+ /mode A def
+ /i msglen def
+ /done true def
+ exit
+ } if
+ remcws 1 eq remvals length 1 eq and {
+ % Implied unlatch to ASCII
+ ctxvals 0 p getinterval CTXvalstocws addtocws
+ Avals msg i get get addtocws
+ /mode A def
+ /i msglen def
+ /done true def
+ exit
+ } if
} if
- remcws 1 eq remvals length 1 eq and {
- % Implied unlatch to ASCII
- ctxvals 0 p getinterval CTXvalstocws addtocws
+ } if
+ encvals mode get msg i get get
+ dup ctxvals exch p exch putinterval
+ /p exch length p add def
+ /i i 1 add def
+ } loop
+
+ % Backtrack to a boundary and return to ASCII
+ done not {
+ {
+ p 3 mod 0 eq {exit} if
+ /i i 1 sub def
+ /p p encvals mode get msg i get get length sub def
+ } loop
+ [
+ ctxvals 0 p getinterval aload pop
+ ] CTXvalstocws addtocws
+ [unlcw] addtocws
+ /mode A def
+ % Encode something to avoid latching immediately back
+ i msglen ne isECI i get not and {
+ numD i get 2 ge {
+ 2 string dup 0 msg i get put dup 1 msg i 1 add get put Avals exch get addtocws
+ /i i 2 add def
+ } {
Avals msg i get get addtocws
- /mode A def
- /i msglen def
- exit
- } if
+ /i i 1 add def
+ } ifelse
} if
} if
- encvals mode get msg i get get
- dup ctxvals exch p exch putinterval
- /p exch length p add def
- /i i 1 add def
- } loop
- % Backtrack to a boundary and return to ASCII
- mode A ne {
+ } def
+
+ /Evalstocws {
+ /in exch def
+ /inlen in length def
+ /outlen in length 4 div 3 mul ceiling cvi def
+ /in [ in aload pop 0 0 0 ] def
+ mark
+ 0 4 inlen 1 sub {
+ in exch 4 getinterval 0 exch {or 6 bitshift} forall -6 bitshift
+ dup -16 bitshift 255 and exch
+ dup -8 bitshift 255 and exch
+ 255 and
+ } for
+ counttomark array astore exch pop
+ 0 outlen getinterval
+ } def
+
+ /encE {
+ /p 0 def
+ /edifactvals 2100 array def
+
+ % Lookup the values for each character
{
- p 3 mod 0 eq {exit} if
- /i i 1 sub def
- /p p encvals mode get msg i get get length sub def
- } loop
- [
- ctxvals 0 p getinterval aload pop
- ] CTXvalstocws addtocws
- [unlcw] addtocws
- /mode A def
- % Encode something to avoid latching immediately back
- i msglen ne {
- numD i get 2 ge {
- 2 string dup 0 msg i get put dup 1 msg i 1 add get put Avals exch get addtocws
- /i i 2 add def
- } {
- Avals msg i get get addtocws
- /i i 1 add def
- } ifelse
- } if
- } if
-
- } bind def
-
- /Evalstocws {
- /in exch def
- /inlen in length def
- /outlen in length 4 div 3 mul ceiling cvi def
- /in [ in aload pop 0 0 0 ] def
- mark
- 0 4 inlen 1 sub {
- in exch 4 getinterval 0 exch {or 6 bitshift} forall -6 bitshift
- dup -16 bitshift 255 and exch
- dup -8 bitshift 255 and exch
- 255 and
- } for
- counttomark array astore exch pop
- 0 outlen getinterval
- } bind def
-
- /encE {
- /p 0 def
- /edifactvals 2100 array def
-
- % Lookup the values for each character
- {
- i msglen eq {exit} if
- Evals msg i get known not {exit} if
- p 4 mod 0 eq {
- lookup mode ne {exit} if
- msglen i sub 2 le { % Check end of data conditions
- /remcws numremcws j p 4 idiv 3 mul add get def
- /remvals [
- msg i msglen i sub getinterval {
- dup Evals exch known {
- Evals exch get aload pop
- } { % Unencodable EDIFACT characters
- pop -1 -1 -1 -1 -1
- } ifelse
- } forall
- ] def
- remcws 2 eq remvals length 2 eq and {
- % Implied unlatch to ASCII
- edifactvals 0 p getinterval Evalstocws addtocws
- Avals msg i get get addtocws
- Avals msg i 1 add get get addtocws
- /mode A def
- /i msglen def
- exit
- } if
- remcws 2 eq remcws 1 eq or remvals length 1 eq and {
- % Implied unlatch to ASCII
- edifactvals 0 p getinterval Evalstocws addtocws
- Avals msg i get get addtocws
- /mode A def
- /i msglen def
- exit
+ i msglen eq {exit} if
+ Evals msg i get known not {exit} if
+ p 4 mod 0 eq {
+ msglen i sub 2 le { % Check end of data condition
+ /remcws numremcws j p 4 idiv 3 mul add get def
+ /remvals [
+ msg i msglen i sub getinterval {
+ Avals exch get aload pop
+ } forall
+ ] def
+ remcws 1 eq remcws 2 eq or remvals length remcws le and {
+ % Implied unlatch to ASCII
+ edifactvals 0 p getinterval Evalstocws addtocws
+ remvals addtocws
+ /mode A def
+ /i msglen def
+ exit
+ } if
} if
+ lookup mode ne {exit} if
} if
- } if
- Evals msg i get get
- dup edifactvals exch p exch putinterval
- /p exch length p add def
- /i i 1 add def
- } loop
-
- % Unlatch and pad with zeros until boundary
- mode A ne {
- /remcws numremcws j p 4 idiv 3 mul add 1 sub get 1 sub def
- remcws 0 ne { % Unlatch if we haven't filled symbol
- Evals unl get
+ Evals msg i get get
dup edifactvals exch p exch putinterval
/p exch length p add def
+ /i i 1 add def
+ } loop
+
+ % Unlatch and pad with zeros until boundary
+ mode A ne {
+ /remcws numremcws j p 4 idiv 3 mul add 1 sub get 1 sub def
+ p 4 mod 0 ne i msglen ne or remcws 3 ge or { % Unlatch unless less than 3 codewords remain
+ Evals unl get
+ dup edifactvals exch p exch putinterval
+ /p exch length p add def
+ } if
+ edifactvals 0 p getinterval Evalstocws addtocws
+ /mode A def
+ % Encode something to avoid latching immediately back
+ i msglen ne isECI i get not and {
+ numD i get 2 ge {
+ 2 string dup 0 msg i get put dup 1 msg i 1 add get put Avals exch get addtocws
+ /i i 2 add def
+ } {
+ Avals msg i get get addtocws
+ /i i 1 add def
+ } ifelse
+ } if
} if
- edifactvals 0 p getinterval Evalstocws addtocws
- /mode A def
- % Encode something to avoid latching immediately back
- i msglen ne {
- numD i get 2 ge {
- 2 string dup 0 msg i get put dup 1 msg i 1 add get put Avals exch get addtocws
- /i i 2 add def
+
+ } def
+
+ /encB {
+ /p 0 def /bvals 1558 array def {
+ i msglen eq {exit} if
+ lookup mode ne {exit} if
+ bvals p msg i get put
+ /p p 1 add def
+ /i i 1 add def
+ } loop
+ /remcws numremcws j p add get 1 sub def
+ /bvals [
+ remcws 0 eq i msglen eq and { % Terminates symbol
+ 0
} {
- Avals msg i get get addtocws
- /i i 1 add def
+ p 250 lt {p} {p 250 idiv 249 add p 250 mod} ifelse
} ifelse
- } if
- } if
+ bvals 0 p getinterval aload pop
+ ] def
+ 0 1 bvals length 1 sub { % Pseudo-randomise based on codeword position
+ /p exch def
+ j p add 1 add 149 mul 255 mod 1 add bvals p get add
+ dup 256 ge {256 sub} if
+ bvals exch p exch put
+ } for
+ bvals addtocws
+ /mode A def
+ } def
- } bind def
-
- /encB {
- /p 0 def /bvals 1558 array def {
- i msglen eq {exit} if
- lookup mode ne {exit} if
- bvals p msg i get put
- /p p 1 add def
- /i i 1 add def
+ % Derive the codewords
+ /cws 1558 array def
+ /mode A def /i 0 def /j 0 def {
+ i msglen ge {exit} if
+ [ /encA /encCTX /encCTX /encCTX /encE /encB ] mode get load exec
} loop
- /remcws numremcws j p add get 1 sub def
- /bvals [
- remcws 0 eq i msglen eq and { % Terminates symbol
- 0
- } {
- p 250 lt {p} {p 250 idiv 249 add p 250 mod} ifelse
- } ifelse
- bvals 0 p getinterval aload pop
- ] def
- 0 1 bvals length 1 sub { % Pseudo-randomise based on codeword position
- /p exch def
- j p add 1 add 149 mul 255 mod 1 add bvals p get add
- dup 256 ge {256 sub} if
- bvals exch p exch put
- } for
- bvals addtocws
- /mode A def
- } bind def
-
- % Derive the codewords
- /cws 1558 array def
- /mode A def /i 0 def /j 0 def {
- i msglen ge {exit} if
- [ /encA /encCTX /encCTX /encCTX /encE /encB ] mode get load exec
- } loop
- /cws cws 0 j getinterval def
+ /cws cws 0 j getinterval def
+
+ } if % encoding=auto
% Extend codewords to fill symbol with pseudo-randomised pad characters
/datlen cws length def
@@ -15850,6 +19568,8 @@ begin
} for
} if
+ options /debugcws known { /bwipp.debugcws cws //raiseerror exec } if
+
% Lookup symbol metrics based on number of codewords and user specification
/i 0 def { % loop
/m metrics i get def
@@ -15884,38 +19604,40 @@ begin
} {
i 7 le {/cwbsize 156 def} {/cwbsize 155 def} ifelse
} ifelse
- /cwb cwbsize array def
+ /cwb cwbsize array def
0 1 cwbsize 1 sub {
/j exch def
cwb j cws j rsbl mul i add get put
- } for
+ } for
cwbs i cwb put
ecbs i [ rscw rsbl idiv {0} repeat ] put
} for
% Calculate the log and anti-log tables
+{
/rsalog [ 1 255 { dup 2 mul dup 256 ge {301 xor} if } repeat ] def
/rslog 256 array def
1 1 255 {dup rsalog exch get exch rslog 3 1 roll put} for
+} ctxdef
% Function to calculate the product in the field
/rsprod {
- 2 copy 0 ne exch 0 ne and {
+ 2 copy 0 ne exch 0 ne and {
rslog exch get exch rslog exch get add 255 mod rsalog exch get
} {
pop pop 0
} ifelse
- } bind def
+ } def
% Generate the coefficients
/coeffs [ 1 rscw rsbl idiv {0} repeat ] def
1 1 rscw rsbl idiv {
- /i exch def
+ /i exch def
coeffs i coeffs i 1 sub get put
i 1 sub -1 1 {
/j exch def
coeffs j coeffs j 1 sub get coeffs j get rsalog i get rsprod xor put
- } for
+ } for
coeffs 0 coeffs 0 get rsalog i get rsprod put
} for
/coeffs coeffs 0 coeffs length 1 sub getinterval def
@@ -15926,13 +19648,13 @@ begin
/cwb cwbs i get def
/ecb ecbs i get def
0 1 cwb length 1 sub {
- /t exch cwb exch get ecb 0 get xor def
+ /t exch cwb exch get ecb 0 get xor def
ecb length 1 sub -1 0 {
/j exch def
/p ecb length j sub 1 sub def
ecb p t coeffs j get rsprod put
j 0 gt { ecb p ecb p 1 add get ecb p get xor put } if
- } for
+ } for
} for
} for
@@ -15951,9 +19673,9 @@ begin
% Place the codewords into the matrix
/module {
% cw row col shape
- 4 -1 roll
- (00000000) 8 string copy dup 3 -1 roll 2 8 string cvrs
- dup length 8 exch sub exch putinterval
+ 4 -1 roll
+ (00000000) 8 string copy dup 3 -1 roll 2 8 string cvrs
+ dup length 8 exch sub exch putinterval
7 -1 0 {1 index exch get 48 sub exch} for pop
11 -3 roll
% 1 2 4 8 16 32 64 128 row col shape
@@ -15973,7 +19695,7 @@ begin
exch mcols mul add
mmat exch 5 -1 roll put
} forall
- } bind def
+ } def
% Placement patterns
/dmn [
@@ -15982,28 +19704,28 @@ begin
{ 2 copy exch 1 sub exch } bind { 2 copy 2 sub } bind
{ 2 copy 1 sub } bind { 2 copy } bind
] def
-
+
/dmc1 [
{ mrows 1 sub 0 } bind { mrows 1 sub 1 } bind
{ mrows 1 sub 2 } bind { 0 mcols 2 sub } bind
{ 0 mcols 1 sub } bind { 1 mcols 1 sub } bind
{ 2 mcols 1 sub } bind { 3 mcols 1 sub } bind
] def
-
+
/dmc2 [
{ mrows 3 sub 0 } bind { mrows 2 sub 0 } bind
{ mrows 1 sub 0 } bind { 0 mcols 4 sub } bind
{ 0 mcols 3 sub } bind { 0 mcols 2 sub } bind
{ 0 mcols 1 sub } bind { 1 mcols 1 sub } bind
] def
-
+
/dmc3 [
{ mrows 3 sub 0 } bind { mrows 2 sub 0 } bind
{ mrows 1 sub 0 } bind { 0 mcols 2 sub } bind
{ 0 mcols 1 sub } bind { 1 mcols 1 sub } bind
{ 2 mcols 1 sub } bind { 3 mcols 1 sub } bind
] def
-
+
/dmc4 [
{ mrows 1 sub 0 } bind { mrows 1 sub mcols 1 sub } bind
{ 0 mcols 3 sub } bind { 0 mcols 2 sub } bind
@@ -16065,8 +19787,8 @@ begin
/cwpos 0 def
0 1 rows 1 sub {
/i exch def
- i rrows 2 add mod 0 eq { pixs i cols mul [ cols 2 idiv {1 0} repeat ] putinterval } if
- i rrows 2 add mod rrows 1 add eq { pixs i cols mul [ cols {1} repeat ] putinterval } if
+ i rrows 2 add mod 0 eq { pixs i cols mul [ cols 2 idiv {1 0} repeat ] putinterval } if
+ i rrows 2 add mod rrows 1 add eq { pixs i cols mul [ cols {1} repeat ] putinterval } if
i rrows 2 add mod 0 ne i rrows 2 add mod rrows 1 add ne and {
0 1 cols 1 sub {
/j exch def
@@ -16077,7 +19799,7 @@ begin
/cwpos cwpos 1 add def
} if
} for
- } if
+ } if
} for
% Return the arguments
@@ -16093,9 +19815,13 @@ begin
dontdraw not //renmatrix if
+ //unloadctx exec
+
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/datamatrix dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -16104,15 +19830,15 @@ end
% --END ENCODER datamatrix--
% --BEGIN ENCODER datamatrixrectangular--
-% --REQUIRES preamble raiseerror renmatrix datamatrix--
+% --REQUIRES preamble loadctx unloadctx raiseerror parseinput renmatrix datamatrix--
% --DESC: Data Matrix Rectangular
% --EXAM: 1234
% --EXOP:
% --RNDR: renmatrix
-%%BeginResource: uk.co.terryburton.bwipp datamatrixrectangular 0.0 2017040400 59583 59426
-%%BeginData: 43 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp datamatrixrectangular 0.0 2022082100 62617 62460
+%%BeginData: 46 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
dup /datamatrix dup /uk.co.terryburton.bwipp findresource put
@@ -16124,6 +19850,7 @@ begin
/options exch def % We are given an option string
/barcode exch def % We are given a barcode string
+ /ctx null def
/dontdraw false def
% Parse the input options
@@ -16145,12 +19872,14 @@ begin
args (opt) options put
args
-
+
dontdraw not //renmatrix if
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/datamatrixrectangular dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -16158,17 +19887,181 @@ end
%%EndResource
% --END ENCODER datamatrixrectangular--
+% --BEGIN ENCODER datamatrixrectangularextension--
+% --REQUIRES preamble loadctx unloadctx raiseerror parseinput renmatrix datamatrix--
+% --DESC: Data Matrix Rectangular Extension
+% --EXAM: 1234
+% --EXOP: version=8x96
+% --RNDR: renmatrix
+%%BeginResource: uk.co.terryburton.bwipp datamatrixrectangularextension 0.0 2022082100 63804 63742
+%%BeginData: 56 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+20 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
+dup /datamatrix dup /uk.co.terryburton.bwipp findresource put
+begin
+/datamatrixrectangularextension {
+
+ 20 dict begin
+
+ /options exch def
+ /barcode exch def
+
+ /ctx null def
+ /dontdraw false def
+
+ /dmre false def
+ /dindmre false def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ % Get the result of encoding with datamatrix
+ options (dontdraw) true put
+ options (format) (rectangle) put
+
+ dindmre dmre or not { % Default is (ISO) DMRE
+ options (dmre) true put
+ } { % Otherwise enable formats as given
+ options (dmre) dmre put % ISO
+ options (dindmre) dindmre put % DIN
+ } ifelse
+
+ /args barcode options //datamatrix exec def
+
+ args (opt) options put
+ args
+
+ dontdraw not //renmatrix if
+
+ end
+
+}
+[/barcode] {null def} forall
+bind def
+/datamatrixrectangularextension dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
+%%EndData
+%%EndResource
+% --END ENCODER datamatrixrectangularextension--
+
+% --BEGIN ENCODER mailmark--
+% --REQUIRES preamble loadctx unloadctx raiseerror parseinput renmatrix datamatrix--
+% --DESC: Royal Mail Mailmark
+% --EXAM: JGB 012100123412345678AB19XY1A 0 www.xyz.com
+% --EXOP: type=29
+% --RNDR: renmatrix
+%%BeginResource: uk.co.terryburton.bwipp mailmark 0.0 2022082100 66101 65894
+%%BeginData: 81 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+10 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /parseinput dup /uk.co.terryburton.bwipp findresource put
+dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
+dup /datamatrix dup /uk.co.terryburton.bwipp findresource put
+begin
+/mailmark {
+
+ 20 dict begin % Confine variables to local scope
+
+ /options exch def % We are given an option string
+ /barcode exch def % We are given a barcode string
+
+ /ctx null def
+ /type (unset) def % 7, 9 or 29
+ /parse false def
+ /dontdraw false def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ % Parse ordinals of the form ^NNN to ASCII
+ /fncvals <<
+ /parse parse
+ /parseonly true
+ /parsefnc false
+ >> def
+ /barcode barcode fncvals //parseinput exec def
+ /barlen barcode length def
+ options (parse) undef
+
+ % Map the given type to a format and version of Data Matrix
+ <<
+ (7) (24x24)
+ (9) (32x32)
+ (29) (16x48)
+ >> /type load get /version exch def
+
+ <<
+ (7) (square)
+ (9) (square)
+ (29) (rectangle)
+ >> /type load get /format exch def
+
+ % Validate the input
+ barcode length 45 lt {
+ /bwipp.mailmarkBadLength (Royal Mail Mailmark must contain at least 45 characters of Mailmark formatted data, including any required space padding) //raiseerror exec
+ } if
+ barcode 0 4 getinterval (JGB ) ne {
+ /bwipp.mailmarkBadIndicator (Royal Mail Mailmark must begin with JGB<space> identifier) //raiseerror exec
+ } if
+
+ % Get the result of encoding with datamatrix
+ options (dontdraw) true put
+ options (version) version put
+ options (format) format put
+ options (mailmark) true put
+ /args barcode options //datamatrix exec def
+
+ args (opt) options put
+ args
+
+ dontdraw not //renmatrix if
+
+ end
+
+}
+[/barcode] {null def} forall
+bind def
+/mailmark dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
+%%EndData
+%%EndResource
+% --END ENCODER mailmark--
+
% --BEGIN ENCODER qrcode--
-% --REQUIRES preamble raiseerror renmatrix--
+% --REQUIRES preamble loadctx unloadctx raiseerror parseinput renmatrix--
% --DESC: QR Code
% --EXAM: http://goo.gl/0bis
% --EXOP: eclevel=M
% --RNDR: renmatrix
-%%BeginResource: uk.co.terryburton.bwipp qrcode 0.0 2017040400 322089 326433
-%%BeginData: 1028 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp qrcode 0.0 2022082100 320507 354887
+%%BeginData: 1369 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
+dup /loadctx dup /uk.co.terryburton.bwipp findresource put
+dup /unloadctx dup /uk.co.terryburton.bwipp findresource put
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /parseinput dup /uk.co.terryburton.bwipp findresource put
dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
begin
/qrcode {
@@ -16178,10 +20071,11 @@ begin
/options exch def
/barcode exch def
+ /ctx null def
/dontdraw false def
- /format (full) def % full or micro or any
- /version (unset) def % 1-40 or M1-M4
- /eclevel (unset) def % L, M, Q or H
+ /format (unset) def % full or micro. rMQR symbols are specified using version
+ /version (unset) def % 1-40 or M1-M4 or R7x43, etc
+ /eclevel (unset) def % full: L, M, Q, H; micro: L, M, Q; rmqr: M, H
/parse false def
/parsefnc false def
/mask -1 def
@@ -16199,51 +20093,32 @@ begin
/mask mask cvi def
- % Parse ordinals of the form ^NNN to ASCII
- parse {
- /msg barcode length string def
- /j 0 def
- barcode
- { % loop
- (^) search {
- dup msg exch j exch putinterval
- length j add 1 add /j exch def
- pop
- dup 0 3 getinterval cvi msg exch j 1 sub exch put
- dup length 3 sub 3 exch getinterval
- } {
- dup msg exch j exch putinterval
- length j add /j exch def
- /barcode msg 0 j getinterval def
- exit
- } ifelse
- } loop
- } if
+ /qrcode //loadctx exec
- /barlen barcode length def
+ % If version is supplied and format is not given then set format to correspond
+ version (unset) ne {
+ format (unset) eq {
+ (full)
+ version 0 1 getinterval (M) eq { pop (micro) } if
+ version 0 1 getinterval (R) eq { pop (rmqr) } if
+ /format exch def
+ } if
+ } {
+ format (unset) eq { /format (full) def } if % Default to full
+ } ifelse
- % Convert input into bytes accounting for FNC characters
+ % Default error correction level
+ eclevel (unset) eq {/eclevel format (micro) ne {(M)} {(L)} ifelse def} if
+
+ % Parse the input
/fn1 -1 def
/fncvals <<
+ /parse parse
+ /parsefnc parsefnc
+ /eci true
(FNC1) fn1
>> def
- /msg barlen array def
- /i 0 def /j 0 def {
- i barlen eq {exit} if
- /char barcode i get def
- parsefnc char 94 eq and i barlen 4 sub lt and {
- barcode i 1 add get 94 ne {
- /char fncvals barcode i 1 add 4 getinterval get def
- /i i 4 add def
- } {
- /i i 1 add def
- } ifelse
- } if
- msg j char put
- /i i 1 add def
- /j j 1 add def
- } loop
- /msg msg 0 j getinterval def
+ /msg barcode fncvals //parseinput exec def
/msglen msg length def
% If FNC1 in first position then escape % as %%
@@ -16256,18 +20131,32 @@ begin
} if
} if
- % Default error correction level
- eclevel (unset) eq {/eclevel format (full) eq {(M)} {(L)} ifelse def} if
+{ % context
+
+ % Enumerate vergrps
+ [
+ /v1to9 /v10to26 /v27to40
+ /vM1 /vM2 /vM3 /vM4
+ /vR7x43 /vR7x59 /vR7x77 /vR7x99 /vR7x139
+ /vR9x43 /vR9x59 /vR9x77 /vR9x99 /vR9x139
+ /vR11x27 /vR11x43 /vR11x59 /vR11x77 /vR11x99 /vR11x139
+ /vR13x27 /vR13x43 /vR13x59 /vR13x77 /vR13x99 /vR13x139
+ /vR15x43 /vR15x59 /vR15x77 /vR15x99 /vR15x139
+ /vR17x43 /vR17x59 /vR17x77 /vR17x99 /vR17x139
+ ] 0 exch {1 index def 1 add} forall pop
% Convert from input into message bitstream
- /N 0 def /A 1 def /B 2 def /K 3 def
-
+ %
+ % Modes: (N)umeric, (A)lphanumeric, (B)yte, (K)anji, (E)CI
+ %
+ /N 0 def /A 1 def /B 2 def /K 3 def /E 4 def
+
/Nexcl <<
[
16#30 1 16#39 {} for
] {-1} forall
>> def
-
+
/Aexcl <<
[
16#20 16#24 16#25 16#2A 16#2B 16#2D 16#2E 16#2F 16#3A
@@ -16275,61 +20164,104 @@ begin
fn1
] {-1} forall
>> def
-
- /Bexcl <<
- [
- 16#00 1 16#1F {} for
- 16#21 16#22 16#23 16#26 16#27 16#28 16#29 16#2C
- 16#3B 1 16#40 {} for
- 16#5B 1 16#7F {} for
- 16#A0 1 16#DF {} for
- ] {-1} forall
- >> def
-
+
+ % Binary exclusives calculated from "not others"
+
/Kexcl <<
[
16#81 1 16#9F {} for
16#E0 1 16#EB {} for
] {-1} forall
>> def
-
- /mids [ % N A B K
- [ (0001) (0010) (0100) (1000) ] % 1-9
- [ (0001) (0010) (0100) (1000) ] % 10-26
- [ (0001) (0010) (0100) (1000) ] % 27-40
- [ () -1 -1 -1 ] % M1
- [ (0) (1) -1 -1 ] % M2
- [ (00) (01) (10) (11) ] % M3
- [ (000) (001) (010) (011) ] % M4
+
+ /mids [
+ % N A B K E
+ [ (0001) (0010) (0100) (1000) (0111) ] % v1to9
+ [ (0001) (0010) (0100) (1000) (0111) ] % v10to26
+ [ (0001) (0010) (0100) (1000) (0111) ] % v27to40
+ [ () -1 -1 -1 -1 ] % vM1
+ [ (0) (1) -1 -1 -1 ] % vM2
+ [ (00) (01) (10) (11) -1 ] % vM3
+ [ (000) (001) (010) (011) -1 ] % vM4
+ 32 {
+ [ (001) (010) (011) (100) (111) ] % rMQR
+ } repeat
] def
-
+
/cclens [ % N A B K
- [ 10 9 8 8 ] % 1-9
- [ 12 11 16 10 ] % 10-26
- [ 14 13 16 12 ] % 27-40
- [ 3 -1 -1 -1 ] % M1
- [ 4 3 -1 -1 ] % M2
- [ 5 4 4 3 ] % M3
- [ 6 5 5 4 ] % M4
+ [ 10 9 8 8 ] % v1to9
+ [ 12 11 16 10 ] % v10to26
+ [ 14 13 16 12 ] % v27to40
+ [ 3 -1 -1 -1 ] % vM1
+ [ 4 3 -1 -1 ] % vM2
+ [ 5 4 4 3 ] % vM3
+ [ 6 5 5 4 ] % vM4
+ [ 4 3 3 2 ] % vR7x43
+ [ 5 5 4 3 ] % vR7x59
+ [ 6 5 5 4 ] % vR7x77
+ [ 7 6 5 5 ] % vR7x99
+ [ 7 6 6 5 ] % vR7x139
+ [ 5 5 4 3 ] % vR9x43
+ [ 6 5 5 4 ] % vR9x59
+ [ 7 6 5 5 ] % vR9x77
+ [ 7 6 6 5 ] % vR9x99
+ [ 8 7 6 6 ] % vR9x139
+ [ 4 4 3 2 ] % vR11x27
+ [ 6 5 5 4 ] % vR11x43
+ [ 7 6 5 5 ] % vR11x59
+ [ 7 6 6 5 ] % vR11x77
+ [ 8 7 6 6 ] % vR11x99
+ [ 8 7 7 6 ] % vR11x139
+ [ 5 5 4 3 ] % vR13x27
+ [ 6 6 5 5 ] % vR13x43
+ [ 7 6 6 5 ] % vR13x59
+ [ 7 7 6 6 ] % vR13x77
+ [ 8 7 7 6 ] % vR13x99
+ [ 8 8 7 7 ] % vR13x139
+ [ 7 6 6 5 ] % vR15x43
+ [ 7 7 6 5 ] % vR15x59
+ [ 8 7 7 6 ] % vR15x77
+ [ 8 7 7 6 ] % vR15x99
+ [ 9 8 7 7 ] % vR15x139
+ [ 7 6 6 5 ] % vR17x43
+ [ 8 7 6 6 ] % vR17x59
+ [ 8 7 7 6 ] % vR17x77
+ [ 8 8 7 6 ] % vR17x99
+ [ 9 8 8 7 ] % vR17x139
] def
-
- /termlens [ 4 4 4 3 5 7 9 ] def
-
- % Encoding functions
- /tobin {
- string dup length 1 sub 0 exch 1 exch {1 index exch 48 put} for
- dup 3 -1 roll 2 2 index length string cvrs dup length 2 index length exch sub exch putinterval
- } bind def
+
+ /termlens [
+ 3 {
+ 4 % Full
+ } repeat
+ 3 % vM1
+ 5 % vM2
+ 7 % vM3
+ 9 % vM4
+ 32 {
+ 3 % rMQR
+ } repeat
+ ] def
+
+ /padstrs [ (11101100) (00010001) ] def
% Alphanumeric character to value map
/charmap (0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:) def
/charvals 44 dict def
0 1 44 {dup charmap exch get exch charvals 3 1 roll put} for
+} ctxdef
+
+ % Encoding functions
+ /tobin {
+ string dup length 1 sub 0 exch 1 exch {1 index exch 48 put} for
+ dup 3 -1 roll 2 2 index length string cvrs dup length 2 index length exch sub exch putinterval
+ } def
+
/encA {
/in exch def
fnc1first { % FNC1 as %
- /in [ in { dup -1 eq {pop 37} if } forall ] def
+ /in [ in { dup fn1 eq {pop 37} if } forall ] def
} if
/out in length 11 mul 2 idiv 1 add string def
/k 0 def /m 0 def {
@@ -16345,8 +20277,8 @@ begin
length m add /m exch def
} loop
out 0 m getinterval
- } bind def
-
+ } def
+
/encN {
/in exch def
/out in length 10 mul 3 idiv 1 add string def
@@ -16368,12 +20300,12 @@ begin
length m add /m exch def
} loop
out 0 m getinterval
- } bind def
-
+ } def
+
/encB {
/in exch def
fnc1first { % FNC1 as GS
- /in [ in { dup -1 eq {pop 29} if } forall ] def
+ /in [ in { dup fn1 eq {pop 29} if } forall ] def
} if
/out in length 8 mul string def
0 1 in length 1 sub {
@@ -16382,8 +20314,8 @@ begin
out k 8 mul 3 -1 roll putinterval
} for
out
- } bind def
-
+ } def
+
/encK {
/in exch def
/out in length 2 idiv 13 mul string def
@@ -16397,73 +20329,175 @@ begin
/k k 2 add def
} loop
out
- } bind def
-
- /encfuncs [ /encN /encA /encB /encK ] def
-
+ } def
+
+ /encE {
+ 0 get neg 1000000 sub
+ dup 000127 le { % ECI 000000 - 000127
+ 8 tobin
+ } { dup 016383 le { % ECI 000128 - 016383
+ 2#1000000000000000 add 16 tobin
+ } { % ECI 016384 - 999999
+ 2#110000000000000000000000 add 24 tobin
+ } ifelse } ifelse
+ } def
+
+ /encfuncs [ /encN /encA /encB /encK /encE ] def
+
/addtobits {
dup bits j 3 -1 roll putinterval
length j add /j exch def
- } bind def
-
+ } def
+
/numNs [ msglen {0} repeat 0 ] def
/numAs [ msglen {0} repeat 0 ] def
+ /numAorNs [ msglen {0} repeat 0 ] def
/numBs [ msglen {0} repeat 0 ] def
- /numKs [ msglen {0} repeat -1 ] def
+ /numKs [ msglen {0} repeat 0 ] def
/nextNs [ msglen {0} repeat 9999 ] def
/nextBs [ msglen {0} repeat 9999 ] def
/nextAs [ msglen {0} repeat 9999 ] def
/nextKs [ msglen {0} repeat 9999 ] def
+ /isECI msglen array def
msglen 1 sub -1 0 {
/i exch def
/barchar msg i get def
Kexcl barchar known {
- nextKs i 0 put
- numKs i numKs i 1 add get 1 add put
+ /sjis i 1 add msglen lt { barchar 256 mul msg i 1 add get add } {0} ifelse def % Zero if last char
+ sjis 16#8140 ge sjis 16#9FFC le and sjis 16#E040 ge sjis 16#EBBF le and or {
+ nextKs i 0 put
+ numKs i numKs i 2 add get 1 add put
+ } {
+ nextKs i nextKs i 1 add get 1 add put
+ } ifelse
} {
nextKs i nextKs i 1 add get 1 add put
} ifelse
Nexcl barchar known {
nextNs i 0 put
numNs i numNs i 1 add get 1 add put
+ numAorNs i numAorNs i 1 add get 1 add put
} {
nextNs i nextNs i 1 add get 1 add put
} ifelse
- Bexcl barchar known {
- nextBs i 0 put
- numBs i numBs i 1 add get 1 add put
- } {
- nextBs i nextBs i 1 add get 1 add put
- } ifelse
Aexcl barchar known {
nextAs i 0 put
numAs i numAs i 1 add get 1 add put
+ numAorNs i numAorNs i 1 add get 1 add put
} {
nextAs i nextAs i 1 add get 1 add put
} ifelse
+ isECI i barchar -1000000 le put
} for
- /numKs [ numKs {1 add 2 idiv} forall ] def
-
- /KbeforeB {numK exch ver get ge nextBs numK 2 mul i add get 0 eq and} bind def
- /KbeforeA {numK exch ver get ge nextAs numK 2 mul i add get 0 eq and} bind def
- /KbeforeN {numK exch ver get ge nextNs numK 2 mul i add get 0 eq and} bind def
- /KbeforeE {numK exch ver get ge numK 2 mul i add msglen eq and} bind def
- /AbeforeK {numA exch ver get ge nextKs numA i add get 0 eq and} bind def
- /AbeforeB {numA exch ver get ge nextBs numA i add get 0 eq and} bind def
- /AbeforeN {numA exch ver get ge nextNs numA i add get 0 eq and} bind def
- /AbeforeE {numA exch ver get ge numA i add msglen eq and} bind def
- /NbeforeK {numN exch ver get ge nextKs numN i add get 0 eq and} bind def
- /NbeforeB {numN exch ver get ge nextBs numN i add get 0 eq and} bind def
- /NbeforeA {numN exch ver get ge nextAs numN i add get 0 eq and} bind def
- /NbeforeE {numN exch ver get ge numN i add msglen eq and} bind def
-
- % Encode unterminated bitsream for each version group separately
- /msgbits [-1 -1 -1 -1 -1 -1 -1] def
- /v1to9 0 def /v10to26 1 def /v27to40 2 def /vM1 3 def /vM2 4 def /vM3 5 def /vM4 6 def
+ 0 1 msglen 1 sub { % Scan forward to set any "2nd byte 1st byte" Kanji matches to zero
+ /i exch def
+ numKs i get 0 gt {
+ numKs i 1 add 0 put
+ nextKs i 1 add nextKs i 1 add get 1 add put
+ } if
+ } for
+ msglen 1 sub -1 0 { % Finally scan backwards again to set numBs/nextBs from "not others"
+ /i exch def
+ numNs i get numAs i get numKs i get add add 0 eq isECI i get not and {
+ nextBs i 0 put
+ numBs i numBs i 1 add get 1 add put
+ } {
+ nextBs i nextBs i 1 add get 1 add put
+ } ifelse
+ } for
+
+ /KbeforeB {numK exch ver get ge nextBs numK 2 mul i add get 0 eq and} def
+ /KbeforeA {numK exch ver get ge nextAs numK 2 mul i add get 0 eq and} def
+ /KbeforeN {numK exch ver get ge nextNs numK 2 mul i add get 0 eq and} def
+ /KbeforeE {numK exch ver get ge numK 2 mul i add msglen eq and} def
+ /AbeforeK {numA exch ver get ge nextKs numA i add get 0 eq and} def
+ /AbeforeB {numA exch ver get ge nextBs numA i add get 0 eq and} def
+ /AbeforeN {numA exch ver get ge nextNs numA i add get 0 eq and} def
+ /AbeforeE {numA exch ver get ge numA i add msglen eq and} def
+ /NbeforeK {numN exch ver get ge nextKs numN i add get 0 eq and} def
+ /NbeforeB {numN exch ver get ge nextBs numN i add get 0 eq and} def
+ /NbeforeA {numN exch ver get ge nextAs numN i add get 0 eq and} def
+ /NbeforeE {numN exch ver get ge numN i add msglen eq and} def
+ /AorNbeforeB {numAorN exch ver get ge nextBs numAorN i add get 0 eq and} def
+ /AorNbeforeE {numAorN exch ver get ge numAorN i add msglen eq and} def
+
+ /nextNslt { nextNs i get msglen ge { pop true } { numNs nextNs i get i add get exch ver get lt } ifelse } def
+
+ % Elements of the encoded message have differing lengths based on the
+ % resulting symbol size. The symbol sizes with different element lengths
+ % are batched into vergrps. To pick the smallest symbol that holds our
+ % content we encode the message according to each available vergrp, based
+ % on the format of symbol.
+
+ % Determine which groups we need to encode
+{
+ /versetmap <<
+ % Full
+ 0 1 9 { 10 2 string cvrs v1to9 } for
+ 10 1 26 { 10 2 string cvrs v10to26 } for
+ 27 1 40 { 10 2 string cvrs v27to40 } for
+
+ % Micro
+ (M1) vM1 (M2) vM2 (M3) vM3 (M4) vM4
+
+ % rMQR
+ (R7x43) vR7x43 (R7x59) vR7x59 (R7x77) vR7x77 (R7x99) vR7x99 (R7x139) vR7x139
+ (R9x43) vR9x43 (R9x59) vR9x59 (R9x77) vR9x77 (R9x99) vR9x99 (R9x139) vR9x139
+ (R11x27) vR11x27 (R11x43) vR11x43 (R11x59) vR11x59 (R11x77) vR11x77 (R11x99) vR11x99 (R11x139) vR11x139
+ (R13x27) vR13x27 (R13x43) vR13x43 (R13x59) vR13x59 (R13x77) vR13x77 (R13x99) vR13x99 (R13x139) vR13x139
+ (R15x43) vR15x43 (R15x59) vR15x59 (R15x77) vR15x77 (R15x99) vR15x99 (R15x139) vR15x139
+ (R17x43) vR17x43 (R17x59) vR17x59 (R17x77) vR17x77 (R17x99) vR17x99 (R17x139) vR17x139
+ >> def
+ /versetfull [v1to9 v10to26 v27to40] def
+ /versetmicro [vM1 vM2 vM3 vM4] def
+} ctxdef
+ version (unset) ne {
+ % A specific version of symbol is given so encode in just the corresponding vergrp
+ /verset versetmap version get [ exch ] def
+ } {
+ % Just the format is specified so encode in each vergrp for the type of symbol
+ format (full) eq { /verset versetfull def } if
+ format (micro) eq { /verset versetmicro def } if
+ % rMQR symbols are accessed with an explicit version
+ } ifelse
+
+ % Encode unterminated bitstream for each compatible vergrp separately
+ /msgbits [ 39 {-1} repeat ] def
/e 10000 def
- [v1to9 v10to26 v27to40 vM1 vM2 vM3 vM4] {
+
+ % Number of before characters per vergrp, depending on current mode, for optimising modes
+ % Generated by contrib/development/build-qr-mode-optim-arrs.php
+ % Full Micro R7 R9 R11 R13 R15 R17
+{
+ /mode0forceKB [ 1 1 1 e e 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1] def
+ /mode0forceA [ 1 1 1 e 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1] def
+ /mode0forceN [ 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1] def
+
+ /mode0NbeforeB [ 4 4 5 e e 2 3 2 2 3 3 3 2 3 3 3 3 2 3 3 3 3 3 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3] def
+
+ /modeBKbeforeB [ 9 12 13 e e 4 6 4 5 6 6 6 5 6 6 6 7 4 6 6 6 7 7 5 6 6 7 7 7 6 6 7 7 7 6 7 7 7 8] def
+ /modeBKbeforeA [ 8 10 11 e e 4 5 4 5 5 6 6 5 5 6 6 6 4 5 6 6 6 6 5 6 6 6 6 7 6 6 6 6 7 6 6 6 7 7] def
+ /modeBKbeforeN [ 8 9 11 e e 3 5 3 4 5 5 5 4 5 5 5 6 3 5 5 5 6 6 4 5 5 6 6 6 5 5 6 6 7 5 6 6 6 7] def
+ /modeBKbeforeE [ 5 5 6 e e 2 3 2 3 3 3 3 3 3 3 3 4 2 3 3 3 4 4 3 3 3 4 4 4 3 3 4 4 4 3 4 4 4 4] def
+
+ /modeBAbeforeK [11 12 14 e e 5 7 5 6 7 8 8 6 7 8 8 8 6 7 8 8 8 8 6 8 8 8 8 9 8 8 8 8 9 8 8 8 9 9] def
+ /modeBAbeforeB [11 15 16 e e 6 7 6 7 7 8 8 7 7 8 8 8 6 7 8 8 8 9 7 8 8 8 9 9 8 8 9 9 9 8 8 9 9 10] def
+ /modeBAbeforeN [12 13 15 e e 6 8 6 7 8 8 8 7 8 8 8 9 6 8 8 8 9 9 7 8 8 9 9 10 8 9 9 9 10 8 9 9 10 10] def
+ /modeBAbeforeE [ 6 7 8 e e 3 4 3 4 4 4 4 4 4 4 4 5 4 4 4 4 5 5 4 4 4 5 5 5 4 5 5 5 5 4 5 5 5 5] def
+
+ /modeBNbeforeK [ 6 7 8 e e 3 4 3 4 4 5 5 4 4 5 5 5 3 4 5 5 5 5 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5] def
+ /modeBNbeforeB [ 6 8 9 e e 3 4 3 4 4 5 5 4 4 5 5 5 3 4 5 5 5 5 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 6] def
+ /modeBNbeforeA [ 6 7 8 e e 3 4 3 4 4 5 5 4 4 5 5 5 4 4 5 5 5 5 4 5 5 5 5 5 5 5 5 5 6 5 5 5 5 6] def
+ /modeBNbeforeE [ 3 4 4 e e 2 3 2 2 3 3 3 2 3 3 3 3 2 3 3 3 3 3 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3] def
+
+ /modeANbeforeA [13 15 17 e 5 7 9 7 8 9 9 9 8 9 9 9 11 7 9 9 9 11 11 8 9 9 10 11 11 9 10 11 11 11 9 11 11 11 11] def
+ /modeANbeforeB [13 17 18 e e 7 9 7 8 9 9 9 8 9 9 9 10 7 9 9 9 10 11 8 9 9 9 11 11 9 9 11 11 11 9 10 11 11 11] def
+ /modeANbeforeE [ 7 8 9 e 3 4 5 4 5 5 5 5 5 5 5 5 6 4 5 5 5 6 6 5 5 5 5 6 6 5 5 6 6 6 5 6 6 6 6] def
+} ctxdef
+
+ verset {
/ver exch def
-
+
% Derive optimal sequence
/mode -1 def /seq [] def /i 0 def {
i msglen ge {exit} if
@@ -16471,51 +20505,60 @@ begin
/numB numBs i get def
/numA numAs i get def
/numN numNs i get def
+ /numAorN numAorNs i get def
+ /eci isECI i get def
ver vM1 eq numA 1 ge and {/seq -1 def exit} if
ver vM1 eq numB 1 ge and {/seq -1 def exit} if
ver vM1 eq numK 1 ge and {/seq -1 def exit} if
+ ver vM1 eq eci and {/seq -1 def exit} if
ver vM2 eq numB 1 ge and {/seq -1 def exit} if
ver vM2 eq numK 1 ge and {/seq -1 def exit} if
+ ver vM2 eq eci and {/seq -1 def exit} if
+ ver vM3 eq eci and {/seq -1 def exit} if
+ ver vM4 eq eci and {/seq -1 def exit} if
{ % common exit
- mode -1 eq { % Set initial mode
- [ 1 1 1 e e 1 1] KbeforeA {K exit} if
- [ 1 1 1 e e 1 1] KbeforeN {K exit} if
- [ 5 5 6 e e 2 3] KbeforeB {K exit} if
- [ 1 1 1 e e 1 1] KbeforeE {K exit} if
+ eci {
+ E exit
+ } if
+ mode -1 eq { % Set initial mode (or mode after ECI)
+ mode0forceKB KbeforeA {K exit} if
+ mode0forceKB KbeforeN {K exit} if
+ modeBKbeforeE KbeforeB {K exit} if % Re-using modeB KbeforeE array
+ mode0forceKB KbeforeE {K exit} if
numK 1 ge {B exit} if
- [ 6 7 8 e e 3 4] AbeforeB {A exit} if
- [ 1 1 1 e 1 1 1] AbeforeE {A exit} if
- numA 1 ge {
- ver vM2 ne {B} {A} ifelse exit
- } if
- [ 4 4 5 e e 2 3] NbeforeB {N exit} if
- [ 1 1 1 e e 1 1] NbeforeB {B exit} if
- [ 7 8 9 e 3 4 5] NbeforeA {N exit} if
- [ 1 1 1 e 1 1 1] NbeforeA {A exit} if
- numN 1 ge {N exit} if
+ mode0NbeforeB NbeforeB {N exit} if
+ mode0forceKB NbeforeB {B exit} if
+ modeANbeforeE NbeforeA {N exit} if % Re-using modeA NbeforeE array
+ mode0forceN NbeforeE {N exit} if
+ modeBAbeforeE AbeforeK {A exit} if % Re-using modeB AbeforeE array
+ modeBAbeforeE AorNbeforeB {A exit} if % Re-using modeB AbeforeE array
+ mode0forceA AorNbeforeE {A exit} if
B exit
} if
mode B eq {
- [ 9 12 13 e e 4 5] KbeforeB {K exit} if
- [ 9 10 12 e e 4 5] KbeforeA {K exit} if
- [ 9 10 11 e e 5 6] KbeforeN {K exit} if
- [ 4 5 6 e e 2 3] KbeforeE {K exit} if
- [11 12 14 e e 5 7] AbeforeK {A exit} if
- [11 15 16 e e 6 7] AbeforeB {A exit} if
- [12 13 15 e e 6 8] AbeforeN {A exit} if
- [ 6 7 8 e e 3 4] AbeforeE {A exit} if
- [ 6 7 8 e e 3 4] NbeforeK {N exit} if
- [ 6 8 9 e e 3 4] NbeforeB {N exit} if
- [ 6 7 8 e e 3 4] NbeforeA {N exit} if
- [ 3 4 5 e e 2 3] NbeforeE {N exit} if
+ modeBKbeforeB KbeforeB {K exit} if
+ modeBKbeforeA KbeforeA {K exit} if
+ modeBKbeforeN KbeforeN {K exit} if
+ modeBKbeforeE KbeforeE {K exit} if
+ modeBAbeforeK AbeforeK {A exit} if
+ modeBAbeforeB AbeforeB {A exit} if
+ modeBAbeforeN AbeforeN {A exit} if
+ modeBAbeforeE AbeforeE {A exit} if
+ modeBNbeforeK NbeforeK {N exit} if
+ modeBNbeforeB NbeforeB {N exit} if
+ modeBNbeforeA NbeforeA {N exit} if
+ modeBNbeforeE NbeforeE {N exit} if
+ modeBAbeforeE AorNbeforeE numAorN modeBAbeforeN ver get le and { % If A/N sequence at end and short
+ modeBNbeforeA nextNslt {A exit} if % And next N sequence shorter than NbeforeA
+ } if
B exit
} if
mode A eq {
numK 1 ge {K exit} if
numB 1 ge {B exit} if
- [13 15 17 e 5 7 9] NbeforeA {N exit} if
- [13 17 18 e e 7 9] NbeforeB {N exit} if
- [ 7 8 9 e 3 4 5] NbeforeE {N exit} if
+ modeANbeforeA NbeforeA {N exit} if
+ modeANbeforeB NbeforeB {N exit} if
+ modeANbeforeE NbeforeE {N exit} if
numA 1 ge numN 1 ge or {A exit} if
B exit
} if
@@ -16548,6 +20591,7 @@ begin
mode B eq {B msg i numB getinterval} if
mode A eq {A msg i numA getinterval} if
mode N eq {N msg i numN getinterval} if
+ mode E eq {E msg i 1 getinterval /mode -1 def} if
/dat exch def /sw exch def
/seq [ seq aload pop sw dat ] def
} ifelse
@@ -16559,18 +20603,23 @@ begin
seq -1 eq {exit} if % Sequence not available
/bits 23648 string def
/j 0 def
- fnc1first {(0101) addtobits} if
+ fnc1first {
+ ver vR7x43 lt { (0101) } { (101) } ifelse addtobits
+ } if
/abort false def
0 2 seq length 1 sub {
/i exch def
/mode seq i get def
mids ver get mode get addtobits
- /cclen cclens ver get mode get def
/chars seq i 1 add get def
- chars length 2 cclen exp cvi ge { % Too many characters for cc indicator
- /abort true def exit
+ /charslen chars length mode K eq {2 idiv} if def
+ mode E ne {
+ /cclen cclens ver get mode get def
+ charslen 2 cclen exp cvi ge { % Too many characters for cc indicator
+ /abort true def exit
+ } if
+ charslen cclen tobin addtobits
} if
- chars length mode K eq {2 idiv} if cclen tobin addtobits
chars encfuncs mode get load exec addtobits
} for
abort {exit} if
@@ -16581,81 +20630,118 @@ begin
} forall
% Lookup the most appropriate symbol specification
+{
/metrics [
- % format vers vergrp size align modules error codewords error correction blocks
- % L M Q H L1 L2 M1 M2 Q1 Q2 H1 H2
- [ (micro) (M1) vM1 11 98 99 36 [ 2 99 99 99 ] [ 1 0 -1 -1 -1 -1 -1 -1 ] ]
- [ (micro) (M2) vM2 13 98 99 80 [ 5 6 99 99 ] [ 1 0 1 0 -1 -1 -1 -1 ] ]
- [ (micro) (M3) vM3 15 98 99 132 [ 6 8 99 99 ] [ 1 0 1 0 -1 -1 -1 -1 ] ]
- [ (micro) (M4) vM4 17 98 99 192 [ 8 10 14 99 ] [ 1 0 1 0 1 0 -1 -1 ] ]
- [ (full) (1) v1to9 21 98 99 208 [ 7 10 13 17 ] [ 1 0 1 0 1 0 1 0 ] ]
- [ (full) (2) v1to9 25 18 99 359 [ 10 16 22 28 ] [ 1 0 1 0 1 0 1 0 ] ]
- [ (full) (3) v1to9 29 22 99 567 [ 15 26 36 44 ] [ 1 0 1 0 2 0 2 0 ] ]
- [ (full) (4) v1to9 33 26 99 807 [ 20 36 52 64 ] [ 1 0 2 0 2 0 4 0 ] ]
- [ (full) (5) v1to9 37 30 99 1079 [ 26 48 72 88 ] [ 1 0 2 0 2 2 2 2 ] ]
- [ (full) (6) v1to9 41 34 99 1383 [ 36 64 96 112 ] [ 2 0 4 0 4 0 4 0 ] ]
- [ (full) (7) v1to9 45 22 38 1568 [ 40 72 108 130 ] [ 2 0 4 0 2 4 4 1 ] ]
- [ (full) (8) v1to9 49 24 42 1936 [ 48 88 132 156 ] [ 2 0 2 2 4 2 4 2 ] ]
- [ (full) (9) v1to9 53 26 46 2336 [ 60 110 160 192 ] [ 2 0 3 2 4 4 4 4 ] ]
- [ (full) (10) v10to26 57 28 50 2768 [ 72 130 192 224 ] [ 2 2 4 1 6 2 6 2 ] ]
- [ (full) (11) v10to26 61 30 54 3232 [ 80 150 224 264 ] [ 4 0 1 4 4 4 3 8 ] ]
- [ (full) (12) v10to26 65 32 58 3728 [ 96 176 260 308 ] [ 2 2 6 2 4 6 7 4 ] ]
- [ (full) (13) v10to26 69 34 62 4256 [ 104 198 288 352 ] [ 4 0 8 1 8 4 12 4 ] ]
- [ (full) (14) v10to26 73 26 46 4651 [ 120 216 320 384 ] [ 3 1 4 5 11 5 11 5 ] ]
- [ (full) (15) v10to26 77 26 48 5243 [ 132 240 360 432 ] [ 5 1 5 5 5 7 11 7 ] ]
- [ (full) (16) v10to26 81 26 50 5867 [ 144 280 408 480 ] [ 5 1 7 3 15 2 3 13 ] ]
- [ (full) (17) v10to26 85 30 54 6523 [ 168 308 448 532 ] [ 1 5 10 1 1 15 2 17 ] ]
- [ (full) (18) v10to26 89 30 56 7211 [ 180 338 504 588 ] [ 5 1 9 4 17 1 2 19 ] ]
- [ (full) (19) v10to26 93 30 58 7931 [ 196 364 546 650 ] [ 3 4 3 11 17 4 9 16 ] ]
- [ (full) (20) v10to26 97 34 62 8683 [ 224 416 600 700 ] [ 3 5 3 13 15 5 15 10 ] ]
- [ (full) (21) v10to26 101 28 50 9252 [ 224 442 644 750 ] [ 4 4 17 0 17 6 19 6 ] ]
- [ (full) (22) v10to26 105 26 50 10068 [ 252 476 690 816 ] [ 2 7 17 0 7 16 34 0 ] ]
- [ (full) (23) v10to26 109 30 54 10916 [ 270 504 750 900 ] [ 4 5 4 14 11 14 16 14 ] ]
- [ (full) (24) v10to26 113 28 54 11796 [ 300 560 810 960 ] [ 6 4 6 14 11 16 30 2 ] ]
- [ (full) (25) v10to26 117 32 58 12708 [ 312 588 870 1050 ] [ 8 4 8 13 7 22 22 13 ] ]
- [ (full) (26) v10to26 121 30 58 13652 [ 336 644 952 1110 ] [ 10 2 19 4 28 6 33 4 ] ]
- [ (full) (27) v27to40 125 34 62 14628 [ 360 700 1020 1200 ] [ 8 4 22 3 8 26 12 28 ] ]
- [ (full) (28) v27to40 129 26 50 15371 [ 390 728 1050 1260 ] [ 3 10 3 23 4 31 11 31 ] ]
- [ (full) (29) v27to40 133 30 54 16411 [ 420 784 1140 1350 ] [ 7 7 21 7 1 37 19 26 ] ]
- [ (full) (30) v27to40 137 26 52 17483 [ 450 812 1200 1440 ] [ 5 10 19 10 15 25 23 25 ] ]
- [ (full) (31) v27to40 141 30 56 18587 [ 480 868 1290 1530 ] [ 13 3 2 29 42 1 23 28 ] ]
- [ (full) (32) v27to40 145 34 60 19723 [ 510 924 1350 1620 ] [ 17 0 10 23 10 35 19 35 ] ]
- [ (full) (33) v27to40 149 30 58 20891 [ 540 980 1440 1710 ] [ 17 1 14 21 29 19 11 46 ] ]
- [ (full) (34) v27to40 153 34 62 22091 [ 570 1036 1530 1800 ] [ 13 6 14 23 44 7 59 1 ] ]
- [ (full) (35) v27to40 157 30 54 23008 [ 570 1064 1590 1890 ] [ 12 7 12 26 39 14 22 41 ] ]
- [ (full) (36) v27to40 161 24 50 24272 [ 600 1120 1680 1980 ] [ 6 14 6 34 46 10 2 64 ] ]
- [ (full) (37) v27to40 165 28 54 25568 [ 630 1204 1770 2100 ] [ 17 4 29 14 49 10 24 46 ] ]
- [ (full) (38) v27to40 169 32 58 26896 [ 660 1260 1860 2220 ] [ 4 18 13 32 48 14 42 32 ] ]
- [ (full) (39) v27to40 173 26 54 28256 [ 720 1316 1950 2310 ] [ 20 4 40 7 43 22 10 67 ] ]
- [ (full) (40) v27to40 177 30 58 29648 [ 750 1372 2040 2430 ] [ 19 6 18 31 34 34 20 61 ] ]
+ % format vers vergrp rows cols align modules error codewords error correction blocks
+ % L M Q H L1 L2 M1 M2 Q1 Q2 H1 H2
+ [ (micro) (M1) vM1 11 11 98 99 36 [ 2 99 99 99 ] [ 1 0 -1 -1 -1 -1 -1 -1 ] ]
+ [ (micro) (M2) vM2 13 13 98 99 80 [ 5 6 99 99 ] [ 1 0 1 0 -1 -1 -1 -1 ] ]
+ [ (micro) (M3) vM3 15 15 98 99 132 [ 6 8 99 99 ] [ 1 0 1 0 -1 -1 -1 -1 ] ]
+ [ (micro) (M4) vM4 17 17 98 99 192 [ 8 10 14 99 ] [ 1 0 1 0 1 0 -1 -1 ] ]
+ [ (full) (1) v1to9 21 21 98 99 208 [ 7 10 13 17 ] [ 1 0 1 0 1 0 1 0 ] ]
+ [ (full) (2) v1to9 25 25 18 99 359 [ 10 16 22 28 ] [ 1 0 1 0 1 0 1 0 ] ]
+ [ (full) (3) v1to9 29 29 22 99 567 [ 15 26 36 44 ] [ 1 0 1 0 2 0 2 0 ] ]
+ [ (full) (4) v1to9 33 33 26 99 807 [ 20 36 52 64 ] [ 1 0 2 0 2 0 4 0 ] ]
+ [ (full) (5) v1to9 37 37 30 99 1079 [ 26 48 72 88 ] [ 1 0 2 0 2 2 2 2 ] ]
+ [ (full) (6) v1to9 41 41 34 99 1383 [ 36 64 96 112 ] [ 2 0 4 0 4 0 4 0 ] ]
+ [ (full) (7) v1to9 45 45 22 38 1568 [ 40 72 108 130 ] [ 2 0 4 0 2 4 4 1 ] ]
+ [ (full) (8) v1to9 49 49 24 42 1936 [ 48 88 132 156 ] [ 2 0 2 2 4 2 4 2 ] ]
+ [ (full) (9) v1to9 53 53 26 46 2336 [ 60 110 160 192 ] [ 2 0 3 2 4 4 4 4 ] ]
+ [ (full) (10) v10to26 57 57 28 50 2768 [ 72 130 192 224 ] [ 2 2 4 1 6 2 6 2 ] ]
+ [ (full) (11) v10to26 61 61 30 54 3232 [ 80 150 224 264 ] [ 4 0 1 4 4 4 3 8 ] ]
+ [ (full) (12) v10to26 65 65 32 58 3728 [ 96 176 260 308 ] [ 2 2 6 2 4 6 7 4 ] ]
+ [ (full) (13) v10to26 69 69 34 62 4256 [ 104 198 288 352 ] [ 4 0 8 1 8 4 12 4 ] ]
+ [ (full) (14) v10to26 73 73 26 46 4651 [ 120 216 320 384 ] [ 3 1 4 5 11 5 11 5 ] ]
+ [ (full) (15) v10to26 77 77 26 48 5243 [ 132 240 360 432 ] [ 5 1 5 5 5 7 11 7 ] ]
+ [ (full) (16) v10to26 81 81 26 50 5867 [ 144 280 408 480 ] [ 5 1 7 3 15 2 3 13 ] ]
+ [ (full) (17) v10to26 85 85 30 54 6523 [ 168 308 448 532 ] [ 1 5 10 1 1 15 2 17 ] ]
+ [ (full) (18) v10to26 89 89 30 56 7211 [ 180 338 504 588 ] [ 5 1 9 4 17 1 2 19 ] ]
+ [ (full) (19) v10to26 93 93 30 58 7931 [ 196 364 546 650 ] [ 3 4 3 11 17 4 9 16 ] ]
+ [ (full) (20) v10to26 97 97 34 62 8683 [ 224 416 600 700 ] [ 3 5 3 13 15 5 15 10 ] ]
+ [ (full) (21) v10to26 101 101 28 50 9252 [ 224 442 644 750 ] [ 4 4 17 0 17 6 19 6 ] ]
+ [ (full) (22) v10to26 105 105 26 50 10068 [ 252 476 690 816 ] [ 2 7 17 0 7 16 34 0 ] ]
+ [ (full) (23) v10to26 109 109 30 54 10916 [ 270 504 750 900 ] [ 4 5 4 14 11 14 16 14 ] ]
+ [ (full) (24) v10to26 113 113 28 54 11796 [ 300 560 810 960 ] [ 6 4 6 14 11 16 30 2 ] ]
+ [ (full) (25) v10to26 117 117 32 58 12708 [ 312 588 870 1050 ] [ 8 4 8 13 7 22 22 13 ] ]
+ [ (full) (26) v10to26 121 121 30 58 13652 [ 336 644 952 1110 ] [ 10 2 19 4 28 6 33 4 ] ]
+ [ (full) (27) v27to40 125 125 34 62 14628 [ 360 700 1020 1200 ] [ 8 4 22 3 8 26 12 28 ] ]
+ [ (full) (28) v27to40 129 129 26 50 15371 [ 390 728 1050 1260 ] [ 3 10 3 23 4 31 11 31 ] ]
+ [ (full) (29) v27to40 133 133 30 54 16411 [ 420 784 1140 1350 ] [ 7 7 21 7 1 37 19 26 ] ]
+ [ (full) (30) v27to40 137 137 26 52 17483 [ 450 812 1200 1440 ] [ 5 10 19 10 15 25 23 25 ] ]
+ [ (full) (31) v27to40 141 141 30 56 18587 [ 480 868 1290 1530 ] [ 13 3 2 29 42 1 23 28 ] ]
+ [ (full) (32) v27to40 145 145 34 60 19723 [ 510 924 1350 1620 ] [ 17 0 10 23 10 35 19 35 ] ]
+ [ (full) (33) v27to40 149 149 30 58 20891 [ 540 980 1440 1710 ] [ 17 1 14 21 29 19 11 46 ] ]
+ [ (full) (34) v27to40 153 153 34 62 22091 [ 570 1036 1530 1800 ] [ 13 6 14 23 44 7 59 1 ] ]
+ [ (full) (35) v27to40 157 157 30 54 23008 [ 570 1064 1590 1890 ] [ 12 7 12 26 39 14 22 41 ] ]
+ [ (full) (36) v27to40 161 161 24 50 24272 [ 600 1120 1680 1980 ] [ 6 14 6 34 46 10 2 64 ] ]
+ [ (full) (37) v27to40 165 165 28 54 25568 [ 630 1204 1770 2100 ] [ 17 4 29 14 49 10 24 46 ] ]
+ [ (full) (38) v27to40 169 169 32 58 26896 [ 660 1260 1860 2220 ] [ 4 18 13 32 48 14 42 32 ] ]
+ [ (full) (39) v27to40 173 173 26 54 28256 [ 720 1316 1950 2310 ] [ 20 4 40 7 43 22 10 67 ] ]
+ [ (full) (40) v27to40 177 177 30 58 29648 [ 750 1372 2040 2430 ] [ 19 6 18 31 34 34 20 61 ] ]
+ [ (rmqr) (R7x43) vR7x43 7 43 22 99 104 [ 99 7 99 10 ] [ -1 -1 1 0 -1 -1 1 0 ] ]
+ [ (rmqr) (R7x59) vR7x59 7 59 20 40 171 [ 99 9 99 14 ] [ -1 -1 1 0 -1 -1 1 0 ] ]
+ [ (rmqr) (R7x77) vR7x77 7 77 26 52 261 [ 99 12 99 22 ] [ -1 -1 1 0 -1 -1 1 0 ] ]
+ [ (rmqr) (R7x99) vR7x99 7 99 24 50 358 [ 99 16 99 30 ] [ -1 -1 1 0 -1 -1 1 0 ] ]
+ [ (rmqr) (R7x139) vR7x139 7 139 28 56 545 [ 99 24 99 44 ] [ -1 -1 1 0 -1 -1 2 0 ] ]
+ [ (rmqr) (R9x43) vR9x43 9 43 22 99 170 [ 99 9 99 14 ] [ -1 -1 1 0 -1 -1 1 0 ] ]
+ [ (rmqr) (R9x59) vR9x59 9 59 20 40 267 [ 99 12 99 22 ] [ -1 -1 1 0 -1 -1 1 0 ] ]
+ [ (rmqr) (R9x77) vR9x77 9 77 26 52 393 [ 99 18 99 32 ] [ -1 -1 1 0 -1 -1 1 1 ] ]
+ [ (rmqr) (R9x99) vR9x99 9 99 24 50 532 [ 99 24 99 44 ] [ -1 -1 1 0 -1 -1 2 0 ] ]
+ [ (rmqr) (R9x139) vR9x139 9 139 28 56 797 [ 99 36 99 66 ] [ -1 -1 1 1 -1 -1 3 0 ] ]
+ [ (rmqr) (R11x27) vR11x27 11 27 98 99 122 [ 99 8 99 10 ] [ -1 -1 1 0 -1 -1 1 0 ] ]
+ [ (rmqr) (R11x43) vR11x43 11 43 22 99 249 [ 99 12 99 20 ] [ -1 -1 1 0 -1 -1 1 0 ] ]
+ [ (rmqr) (R11x59) vR11x59 11 59 20 40 376 [ 99 16 99 32 ] [ -1 -1 1 0 -1 -1 1 1 ] ]
+ [ (rmqr) (R11x77) vR11x77 11 77 26 52 538 [ 99 24 99 44 ] [ -1 -1 1 0 -1 -1 1 1 ] ]
+ [ (rmqr) (R11x99) vR11x99 11 99 24 50 719 [ 99 32 99 60 ] [ -1 -1 1 1 -1 -1 1 1 ] ]
+ [ (rmqr) (R11x139) vR11x139 11 139 28 56 1062 [ 99 48 99 90 ] [ -1 -1 2 0 -1 -1 3 0 ] ]
+ [ (rmqr) (R13x27) vR13x27 13 27 98 99 172 [ 99 9 99 14 ] [ -1 -1 1 0 -1 -1 1 0 ] ]
+ [ (rmqr) (R13x43) vR13x43 13 43 22 99 329 [ 99 14 99 28 ] [ -1 -1 1 0 -1 -1 1 0 ] ]
+ [ (rmqr) (R13x59) vR13x59 13 59 20 40 486 [ 99 22 99 40 ] [ -1 -1 1 0 -1 -1 2 0 ] ]
+ [ (rmqr) (R13x77) vR13x77 13 77 26 52 684 [ 99 32 99 56 ] [ -1 -1 1 1 -1 -1 1 1 ] ]
+ [ (rmqr) (R13x99) vR13x99 13 99 24 50 907 [ 99 40 99 78 ] [ -1 -1 1 1 -1 -1 1 2 ] ]
+ [ (rmqr) (R13x139) vR13x139 13 139 28 56 1328 [ 99 60 99 112 ] [ -1 -1 2 1 -1 -1 2 2 ] ]
+ [ (rmqr) (R15x43) vR15x43 15 43 22 99 409 [ 99 18 99 36 ] [ -1 -1 1 0 -1 -1 1 1 ] ]
+ [ (rmqr) (R15x59) vR15x59 15 59 20 40 596 [ 99 26 99 48 ] [ -1 -1 1 0 -1 -1 2 0 ] ]
+ [ (rmqr) (R15x77) vR15x77 15 77 26 52 830 [ 99 36 99 72 ] [ -1 -1 1 1 -1 -1 2 1 ] ]
+ [ (rmqr) (R15x99) vR15x99 15 99 24 50 1095 [ 99 48 99 88 ] [ -1 -1 2 0 -1 -1 4 0 ] ]
+ [ (rmqr) (R15x139) vR15x139 15 139 28 56 1594 [ 99 72 99 130 ] [ -1 -1 2 1 -1 -1 1 4 ] ]
+ [ (rmqr) (R17x43) vR17x43 17 43 22 99 489 [ 99 22 99 40 ] [ -1 -1 1 0 -1 -1 1 1 ] ]
+ [ (rmqr) (R17x59) vR17x59 17 59 20 40 706 [ 99 32 99 60 ] [ -1 -1 2 0 -1 -1 2 0 ] ]
+ [ (rmqr) (R17x77) vR17x77 17 77 26 52 976 [ 99 44 99 84 ] [ -1 -1 2 0 -1 -1 1 2 ] ]
+ [ (rmqr) (R17x99) vR17x99 17 99 24 50 1283 [ 99 60 99 104 ] [ -1 -1 2 1 -1 -1 4 0 ] ]
+ [ (rmqr) (R17x139) vR17x139 17 139 28 56 1860 [ 99 80 99 156 ] [ -1 -1 4 0 -1 -1 2 4 ] ]
] def
+} ctxdef
+
/eclval (LMQH) eclevel search pop length exch pop exch pop def
- 0 1 43 {
+ 0 1 metrics length 1 sub {
/i exch def
/m metrics i get def
/frmt m 0 get def % Format of the symbol
/vers m 1 get def % Version of symbol
/vergrp m 2 get def % Version group
- /size m 3 get def % Length of side
- /asp2 m 4 get def % Position of second alignment symbol
- /asp3 m 5 get def % Position of third alignment symbol
- /nmod m 6 get def % Number of modules
+ /verind i 44 sub def % Version indicator for rMQR format info
+ /rows m 3 get def % Length of side
+ /cols m 4 get def % Length of side
+ /asp2 m 5 get def % Position of second alignment symbol
+ /asp3 m 6 get def % Position of third alignment symbol
+ /nmod m 7 get def % Number of modules
/ncws nmod 8 idiv def % Total number of codewords
/rbit nmod 8 mod def % Number of remainder bits
/lc4b false def % Last data codeword is 4 bits long
- size 11 eq size 15 eq or { % Adjustments for M1 and M3 symbols
+ vers (M1) eq vers (M3) eq or { % Adjustments for M1 and M3 symbols
/ncws ncws 1 add def
/rbit 0 def
/lc4b true def
} if
- /ecws m 7 get eclval get def % Number of error correction codewords
+ /ecws m 8 get eclval get def % Number of error correction codewords
/dcws ncws ecws sub def % Number of data codewords
/dmod dcws 8 mul lc4b {4} {0} ifelse sub def % Number of data modules
- /ecb1 m 8 get eclval 2 mul get def % First error correction blocks
- /ecb2 m 8 get eclval 2 mul 1 add get def % Second error correction blocks
+ /ecb1 m 9 get eclval 2 mul get def % First error correction blocks
+ /ecb2 m 9 get eclval 2 mul 1 add get def % Second error correction blocks
/okay true def
- format (any) ne format frmt ne and {/okay false def} if % The format must match that supplied
- frmt (micro) eq fnc1first and {/okay false def} if
+ format frmt ne {/okay false def} if % The format must match that supplied
+ frmt (micro) eq fnc1first and {/okay false def} if % FNC1 mode is only available in full and rmqr
version (unset) ne version vers ne and {/okay false def} if % The version must match that supplied
ecb1 -1 eq ecb2 -1 eq or {/okay false def} if % Error correction level must be valid
/verbits msgbits vergrp get def
@@ -16669,7 +20755,7 @@ begin
} for
okay not {
- /bwipp.qrcodeNoValidSymbol (No valid symbol available) //raiseerror exec
+ /bwipp.qrcodeNoValidSymbol (Maximum length exceeded or invalid content) //raiseerror exec
} if
/format frmt def
@@ -16678,7 +20764,7 @@ begin
/dcpb dcws ecb1 ecb2 add idiv def % Base data codewords per block
/ecpb ncws ecb1 ecb2 add idiv dcpb sub def % Error correction codewords per block
- % Complete the message bits by adding the terminator, truncated if neccessary
+ % Complete the message bits by adding the terminator, truncated if necessary
/term term 0 dmod msgbits length sub term length 2 copy gt {exch} if pop getinterval def
msgbits length term length add string
dup 0 msgbits putinterval
@@ -16689,15 +20775,14 @@ begin
/pad dmod string def
0 1 pad length 1 sub {pad exch 48 put} for
pad 0 msgbits putinterval
- /padstrs [ (11101100) (00010001) ] def
/padnum 0 def
msgbits length 8 div ceiling 8 mul cvi 8 dmod lc4b {5} {1} ifelse sub {
- pad exch padstrs padnum get putinterval
+ pad exch padstrs padnum get putinterval
/padnum padnum 1 add 2 mod def
} for
% Evaluate the padded message into codewords
- /cws dcws array def
+ /cws dcws array def
0 1 cws length 1 sub {
/c exch def
/bpcw 8 def
@@ -16707,36 +20792,40 @@ begin
0 1 bpcw 1 sub {
/i exch def
/cw cw 2 bpcw i sub 1 sub exp cvi cwb i get 48 sub mul add def
- } for
+ } for
cws c cw put
- } for
+ } for
% Short final data byte in M1 and M3 symbols has high-order value
lc4b {cws cws length 1 sub 2 copy get 4 bitshift put} if
+ options /debugcws known { /bwipp.debugcws cws //raiseerror exec } if
+
% Calculate the log and anti-log tables
+{
/rsalog [ 1 255 { dup 2 mul dup 256 ge {285 xor} if } repeat ] def
/rslog 256 array def
1 1 255 {dup rsalog exch get exch rslog 3 1 roll put} for
+} ctxdef
% Function to calculate the product in the field
/rsprod {
- 2 copy 0 ne exch 0 ne and {
+ 2 copy 0 ne exch 0 ne and {
rslog exch get exch rslog exch get add 255 mod rsalog exch get
} {
pop pop 0
} ifelse
- } bind def
+ } def
% Generate the coefficients for the Reed-Solomon algorithm
/coeffs [ 1 ecpb {0} repeat ] def
0 1 ecpb 1 sub {
- /i exch def
+ /i exch def
coeffs i 1 add coeffs i get put
i -1 1 {
/j exch def
coeffs j coeffs j 1 sub get coeffs j get rsalog i get rsprod xor put
- } for
+ } for
coeffs 0 coeffs 0 get rsalog i get rsprod put
} for
/coeffs coeffs 0 coeffs length 1 sub getinterval def
@@ -16755,7 +20844,7 @@ begin
} for
} for
rscws rsnd ecpb getinterval
- } bind def
+ } def
% Divide codewords into two groups of blocks and calculate the error correction codewords
/dcwsb ecb1 ecb2 add array def
@@ -16770,7 +20859,7 @@ begin
dcwsb ecb1 i add cws ecb1 dcpb mul i dcpb 1 add mul add dcpb 1 add getinterval put
ecwsb ecb1 i add dcwsb ecb1 i add get rscodes put
} for
-
+
% Reassemble the codewords
/cws ncws array def
/cw 0 def
@@ -16792,7 +20881,7 @@ begin
/cw cw 1 add def
} for
} for
-
+
% Extend codewords by one if there are remainder bits
rbit 0 gt {
/pad cws length 1 add array def
@@ -16800,10 +20889,10 @@ begin
pad pad length 1 sub 0 put
/cws pad def
} if
-
+
% Fixups for the short final data byte in M1 and M3 symbols
lc4b {
- cws dcws 1 sub 2 copy get -4 bitshift put
+ cws dcws 1 sub 2 copy get -4 bitshift put
dcws 1 sub 1 ncws 2 sub {
/i exch def
cws i cws i get 15 and 4 bitshift put
@@ -16812,11 +20901,49 @@ begin
cws ncws 1 sub cws ncws 1 sub get 15 and 4 bitshift put
} if
+ options /debugecc known { /bwipp.debugecc cws //raiseerror exec } if
+
% Create the bitmap
- /pixs [ size size mul {-1} repeat ] def
- /qmv {size mul add} bind def
-
+ /pixs [ rows cols mul {-1} repeat ] def
+ /qmv {cols mul add} def
+
+ % Timing patterns
+ format (full) eq {
+ 8 1 cols 9 sub {
+ /i exch def
+ pixs i 6 qmv i 1 add 2 mod put
+ pixs 6 i qmv i 1 add 2 mod put
+ } for
+ } if
+ format (micro) eq {
+ 8 1 cols 1 sub {
+ /i exch def
+ pixs i 0 qmv i 1 add 2 mod put
+ pixs 0 i qmv i 1 add 2 mod put
+ } for
+ } if
+ format (rmqr) eq {
+ 3 1 cols 4 sub { % Along top and bottom
+ /i exch def
+ pixs i 0 qmv i 1 add 2 mod put
+ pixs i rows 1 sub qmv i 1 add 2 mod put
+ } for
+ 3 1 rows 4 sub { % Along left and right
+ /i exch def
+ pixs 0 i qmv i 1 add 2 mod put
+ pixs cols 1 sub i qmv i 1 add 2 mod put
+ } for
+ asp2 1 sub asp3 asp2 sub cols 13 sub { % Down interior
+ /i exch def
+ 3 1 rows 4 sub {
+ /j exch def
+ pixs i j qmv j 1 add 2 mod put
+ } for
+ } for
+ } if
+
% Finder patterns
+{
/fpat [
[ 1 1 1 1 1 1 1 0 ]
[ 1 0 0 0 0 0 1 0 ]
@@ -16827,27 +20954,77 @@ begin
[ 1 1 1 1 1 1 1 0 ]
[ 0 0 0 0 0 0 0 0 ]
] def
- 0 1 fpat length 1 sub {
+ /fsubpat [
+ [ 1 1 1 1 1 9 9 9 ]
+ [ 1 0 0 0 1 9 9 9 ]
+ [ 1 0 1 0 1 9 9 9 ]
+ [ 1 0 0 0 1 9 9 9 ]
+ [ 1 1 1 1 1 9 9 9 ]
+ [ 9 9 9 9 9 9 9 9 ]
+ [ 9 9 9 9 9 9 9 9 ]
+ [ 9 9 9 9 9 9 9 9 ]
+ ] def
+ /fcorpat [
+ [ 1 1 1 9 9 9 9 9 ]
+ [ 1 0 9 9 9 9 9 9 ]
+ [ 1 9 9 9 9 9 9 9 ]
+ [ 9 9 9 9 9 9 9 9 ]
+ [ 9 9 9 9 9 9 9 9 ]
+ [ 9 9 9 9 9 9 9 9 ]
+ [ 9 9 9 9 9 9 9 9 ]
+ [ 9 9 9 9 9 9 9 9 ]
+ ] def
+ /fnullpat [
+ [ 9 9 9 9 9 9 9 9 ]
+ [ 9 9 9 9 9 9 9 9 ]
+ [ 9 9 9 9 9 9 9 9 ]
+ [ 9 9 9 9 9 9 9 9 ]
+ [ 9 9 9 9 9 9 9 9 ]
+ [ 9 9 9 9 9 9 9 9 ]
+ [ 9 9 9 9 9 9 9 9 ]
+ [ 9 9 9 9 9 9 9 9 ]
+ ] def
+ /fpatmap <<
+ % TL TR BL BR
+ (full) [ fpat fpat fpat fnullpat ]
+ (micro) [ fpat fnullpat fnullpat fnullpat ]
+ (rmqr) [ fpat fcorpat fcorpat fsubpat ]
+ >> def
+} ctxdef
+ /fpats fpatmap format get def
+ 0 1 7 {
/y exch def
- 0 1 fpat 0 get length 1 sub {
+ 0 1 7 {
/x exch def
- /fpb fpat y get x get def
- pixs x y qmv fpb put
- format (full) eq {
- pixs size x sub 1 sub y qmv fpb put
- pixs x size y sub 1 sub qmv fpb put
- } if
+ /fpb0 fpats 0 get y get x get def
+ /fpb1 fpats 1 get y get x get def
+ /fpb2 fpats 2 get y get x get def
+ /fpb3 fpats 3 get y get x get def
+ fpb0 9 ne y rows lt and {pixs x y qmv fpb0 put} if
+ fpb1 9 ne {pixs cols x sub 1 sub y qmv fpb1 put} if
+ fpb2 9 ne {pixs x rows y sub 1 sub qmv fpb2 put} if
+ fpb3 9 ne {pixs cols x sub 1 sub rows y sub 1 sub qmv fpb3 put} if
} for
} for
-
+
% Alignment patterns
- /algnpat [
+{
+ /algnpatfull [
[ 1 1 1 1 1 ]
[ 1 0 0 0 1 ]
[ 1 0 1 0 1 ]
[ 1 0 0 0 1 ]
[ 1 1 1 1 1 ]
] def
+ /algnpatrmqr [
+ [ 1 1 1 9 9 ]
+ [ 1 0 1 9 9 ]
+ [ 1 1 1 9 9 ]
+ [ 9 9 9 9 9 ]
+ [ 9 9 9 9 9 ]
+ ] def
+} ctxdef
+
/putalgnpat {
/py exch def
/px exch def
@@ -16855,70 +21032,79 @@ begin
/pb exch def
0 1 4 {
/pa exch def
- pixs px pa add py pb add qmv algnpat pb get pa get put
+ /algnb algnpat pb get pa get def
+ algnb 9 ne {
+ pixs px pa add py pb add qmv algnb put
+ } if
} for
} for
- } bind def
- asp2 2 sub asp3 asp2 sub size 13 sub {
- /i exch def
- i 4 putalgnpat
- 4 i putalgnpat
- } for
- asp2 2 sub asp3 asp2 sub size 9 sub {
- /x exch def
- asp2 2 sub asp3 asp2 sub size 9 sub {
- /y exch def
- x y putalgnpat
- } for
- } for
-
- % Timing patterns
+ } def
format (full) eq {
- 8 1 size 9 sub {
+ /algnpat algnpatfull def
+ asp2 2 sub asp3 asp2 sub cols 13 sub {
/i exch def
- pixs i 6 qmv i 1 add 2 mod put
- pixs 6 i qmv i 1 add 2 mod put
+ i 4 putalgnpat
+ 4 i putalgnpat
} for
- } {
- 8 1 size 1 sub {
+ asp2 2 sub asp3 asp2 sub cols 9 sub {
+ /x exch def
+ asp2 2 sub asp3 asp2 sub rows 9 sub {
+ /y exch def
+ x y putalgnpat
+ } for
+ } for
+ } if
+ format (rmqr) eq {
+ /algnpat algnpatrmqr def
+ asp2 2 sub asp3 asp2 sub cols 13 sub {
/i exch def
- pixs i 0 qmv i 1 add 2 mod put
- pixs 0 i qmv i 1 add 2 mod put
+ i 0 putalgnpat
+ i rows 3 sub putalgnpat
} for
- } ifelse
-
+ } if
+
% Format information modules
- format (full) eq {
- /formatmap [
- [ [ 0 8 ] [ 8 size 1 sub ] ] [ [ 1 8 ] [ 8 size 2 sub ] ] [ [ 2 8 ] [ 8 size 3 sub ] ]
- [ [ 3 8 ] [ 8 size 4 sub ] ] [ [ 4 8 ] [ 8 size 5 sub ] ] [ [ 5 8 ] [ 8 size 6 sub ] ]
- [ [ 7 8 ] [ 8 size 7 sub ] ] [ [ 8 8 ] [ size 8 sub 8 ] ] [ [ 8 7 ] [ size 7 sub 8 ] ]
- [ [ 8 5 ] [ size 6 sub 8 ] ] [ [ 8 4 ] [ size 5 sub 8 ] ] [ [ 8 3 ] [ size 4 sub 8 ] ]
- [ [ 8 2 ] [ size 3 sub 8 ] ] [ [ 8 1 ] [ size 2 sub 8 ] ] [ [ 8 0 ] [ size 1 sub 8 ] ]
- ] def
- } {
- /formatmap [
+{
+ /formatmapmicro [
[ [ 1 8 ] ] [ [ 2 8 ] ] [ [ 3 8 ] ] [ [ 4 8 ] ] [ [ 5 8 ] ]
[ [ 6 8 ] ] [ [ 7 8 ] ] [ [ 8 8 ] ] [ [ 8 7 ] ] [ [ 8 6 ] ]
[ [ 8 5 ] ] [ [ 8 4 ] ] [ [ 8 3 ] ] [ [ 8 2 ] ] [ [ 8 1 ] ]
- ] def
- } ifelse
+ ] def
+} ctxdef
+ /formatmap <<
+ (full) [
+ [ [ 0 8 ] [ 8 cols 1 sub ] ] [ [ 1 8 ] [ 8 cols 2 sub ] ] [ [ 2 8 ] [ 8 cols 3 sub ] ]
+ [ [ 3 8 ] [ 8 cols 4 sub ] ] [ [ 4 8 ] [ 8 cols 5 sub ] ] [ [ 5 8 ] [ 8 cols 6 sub ] ]
+ [ [ 7 8 ] [ 8 cols 7 sub ] ] [ [ 8 8 ] [ cols 8 sub 8 ] ] [ [ 8 7 ] [ cols 7 sub 8 ] ]
+ [ [ 8 5 ] [ cols 6 sub 8 ] ] [ [ 8 4 ] [ cols 5 sub 8 ] ] [ [ 8 3 ] [ cols 4 sub 8 ] ]
+ [ [ 8 2 ] [ cols 3 sub 8 ] ] [ [ 8 1 ] [ cols 2 sub 8 ] ] [ [ 8 0 ] [ cols 1 sub 8 ] ]
+ ]
+ (micro) formatmapmicro
+ (rmqr) [
+ [ [ 11 3 ] [ cols 3 sub rows 6 sub ] ] [ [ 11 2 ] [ cols 4 sub rows 6 sub ] ] [ [ 11 1 ] [ cols 5 sub rows 6 sub ] ]
+ [ [ 10 5 ] [ cols 6 sub rows 2 sub ] ] [ [ 10 4 ] [ cols 6 sub rows 3 sub ] ] [ [ 10 3 ] [ cols 6 sub rows 4 sub ] ]
+ [ [ 10 2 ] [ cols 6 sub rows 5 sub ] ] [ [ 10 1 ] [ cols 6 sub rows 6 sub ] ] [ [ 9 5 ] [ cols 7 sub rows 2 sub ] ]
+ [ [ 9 4 ] [ cols 7 sub rows 3 sub ] ] [ [ 9 3 ] [ cols 7 sub rows 4 sub ] ] [ [ 9 2 ] [ cols 7 sub rows 5 sub ] ]
+ [ [ 9 1 ] [ cols 7 sub rows 6 sub ] ] [ [ 8 5 ] [ cols 8 sub rows 2 sub ] ] [ [ 8 4 ] [ cols 8 sub rows 3 sub ] ]
+ [ [ 8 3 ] [ cols 8 sub rows 4 sub ] ] [ [ 8 2 ] [ cols 8 sub rows 5 sub ] ] [ [ 8 1 ] [ cols 8 sub rows 6 sub ] ]
+ ]
+ >> format get def
formatmap {
- { {} forall qmv pixs exch 0 put } forall
+ { {} forall qmv pixs exch 1 put } forall
} forall
-
+
% Version information modules
- size 45 ge {
+ format (full) eq cols 45 ge and {
/versionmap [
- [ [ size 9 sub 5 ] [ 5 size 9 sub ] ] [ [ size 10 sub 5 ] [ 5 size 10 sub ] ]
- [ [ size 11 sub 5 ] [ 5 size 11 sub ] ] [ [ size 9 sub 4 ] [ 4 size 9 sub ] ]
- [ [ size 10 sub 4 ] [ 4 size 10 sub ] ] [ [ size 11 sub 4 ] [ 4 size 11 sub ] ]
- [ [ size 9 sub 3 ] [ 3 size 9 sub ] ] [ [ size 10 sub 3 ] [ 3 size 10 sub ] ]
- [ [ size 11 sub 3 ] [ 3 size 11 sub ] ] [ [ size 9 sub 2 ] [ 2 size 9 sub ] ]
- [ [ size 10 sub 2 ] [ 2 size 10 sub ] ] [ [ size 11 sub 2 ] [ 2 size 11 sub ] ]
- [ [ size 9 sub 1 ] [ 1 size 9 sub ] ] [ [ size 10 sub 1 ] [ 1 size 10 sub ] ]
- [ [ size 11 sub 1 ] [ 1 size 11 sub ] ] [ [ size 9 sub 0 ] [ 0 size 9 sub ] ]
- [ [ size 10 sub 0 ] [ 0 size 10 sub ] ] [ [ size 11 sub 0 ] [ 0 size 11 sub ] ]
+ [ [ cols 9 sub 5 ] [ 5 cols 9 sub ] ] [ [ cols 10 sub 5 ] [ 5 cols 10 sub ] ]
+ [ [ cols 11 sub 5 ] [ 5 cols 11 sub ] ] [ [ cols 9 sub 4 ] [ 4 cols 9 sub ] ]
+ [ [ cols 10 sub 4 ] [ 4 cols 10 sub ] ] [ [ cols 11 sub 4 ] [ 4 cols 11 sub ] ]
+ [ [ cols 9 sub 3 ] [ 3 cols 9 sub ] ] [ [ cols 10 sub 3 ] [ 3 cols 10 sub ] ]
+ [ [ cols 11 sub 3 ] [ 3 cols 11 sub ] ] [ [ cols 9 sub 2 ] [ 2 cols 9 sub ] ]
+ [ [ cols 10 sub 2 ] [ 2 cols 10 sub ] ] [ [ cols 11 sub 2 ] [ 2 cols 11 sub ] ]
+ [ [ cols 9 sub 1 ] [ 1 cols 9 sub ] ] [ [ cols 10 sub 1 ] [ 1 cols 10 sub ] ]
+ [ [ cols 11 sub 1 ] [ 1 cols 11 sub ] ] [ [ cols 9 sub 0 ] [ 0 cols 9 sub ] ]
+ [ [ cols 10 sub 0 ] [ 0 cols 10 sub ] ] [ [ cols 11 sub 0 ] [ 0 cols 11 sub ] ]
] def
} {
/versionmap [] def
@@ -16929,29 +21115,31 @@ begin
% Reserve the solitary dark module in full symbols
format (full) eq {
- pixs 8 size 8 sub qmv 0 put
+ pixs 8 rows 8 sub qmv 0 put
} if
% Calculate the mask patterns
- format (full) eq {
- /maskfuncs [
- {add 2 mod} bind
- {exch pop 2 mod} bind
- {pop 3 mod} bind
- {add 3 mod} bind
- {2 idiv exch 3 idiv add 2 mod} bind
- {mul dup 2 mod exch 3 mod add} bind
- {mul dup 2 mod exch 3 mod add 2 mod} bind
- {2 copy mul 3 mod 3 1 roll add 2 mod add 2 mod} bind
- ] def
- } {
- /maskfuncs [
- {exch pop 2 mod} bind
- {2 idiv exch 3 idiv add 2 mod} bind
- {mul dup 2 mod exch 3 mod add 2 mod} bind
- {2 copy mul 3 mod 3 1 roll add 2 mod add 2 mod} bind
- ] def
- } ifelse
+ /maskfuncs <<
+ (full) [
+ {add 2 mod}
+ {exch pop 2 mod}
+ {pop 3 mod}
+ {add 3 mod}
+ {2 idiv exch 3 idiv add 2 mod}
+ {mul dup 2 mod exch 3 mod add}
+ {mul dup 2 mod exch 3 mod add 2 mod}
+ {2 copy mul 3 mod 3 1 roll add 2 mod add 2 mod}
+ ]
+ (micro) [
+ {exch pop 2 mod}
+ {2 idiv exch 3 idiv add 2 mod}
+ {mul dup 2 mod exch 3 mod add 2 mod}
+ {2 copy mul 3 mod 3 1 roll add 2 mod add 2 mod}
+ ]
+ (rmqr) [
+ {2 idiv exch 3 idiv add 2 mod}
+ ]
+ >> format get def
mask -1 ne { % User specifies a mask
/maskfuncs [maskfuncs mask 1 sub get] def
/bestmaskval mask 1 sub def
@@ -16959,22 +21147,22 @@ begin
/masks maskfuncs length array def
0 1 masks length 1 sub {
/m exch def
- /mask size size mul array def
- 0 1 size 1 sub {
+ /mask rows cols mul array def
+ 0 1 rows 1 sub {
/j exch def
- 0 1 size 1 sub {
+ 0 1 cols 1 sub {
/i exch def
- i j maskfuncs m get exec 0 eq
+ i j maskfuncs m get exec 0 eq
pixs i j qmv get -1 eq and {1} {0} ifelse
mask i j qmv 3 -1 roll put
} for
} for
masks m mask put
} for
-
+
% Walk the symbol placing the bitstream
- /posx size 1 sub def
- /posy size 1 sub def
+ /posx cols format (rmqr) ne {1} {2} ifelse sub def
+ /posy rows 1 sub def
/dir -1 def % -1 is upwards, 1 is downwards
/col 1 def % 0 is left bit, 1 is right bit
/num 0 def
@@ -16990,9 +21178,9 @@ begin
/posx posx 1 sub def
} {
/col 1 def
- /posx posx 1 add def
+ /posx posx 1 add def
/posy posy dir add def
- posy 0 lt posy size ge or { % Turn around at top and bottom
+ posy 0 lt posy rows ge or { % Turn around at top and bottom
/dir dir -1 mul def
/posy posy dir add def
/posx posx 2 sub def
@@ -17025,23 +21213,23 @@ begin
} if
} for
scr1 scr3
- } bind def
-
+ } def
+
% Evaluation algorithm for full symbols
/evalfull {
/sym exch def
/n1 0 def /n2 0 def /n3 0 def
- /rle size 1 add array def
- /lastpairs size array def
- /thispairs size array def
- /sizeadd1 size 1 add def
- 0 1 size 1 sub {
+ /rle cols 1 add array def
+ /lastpairs cols array def
+ /thispairs cols array def
+ /colsadd1 cols 1 add def
+ 0 1 cols 1 sub {
/i exch def
% Runlength encode (light, dark, light, ...) and evaluate each column
mark 0 0
- i size dup dup mul 1 sub {
+ i cols dup dup mul 1 sub {
sym exch get exch 1 index eq {exch 1 add exch} {1 exch} ifelse
} for
pop
@@ -17050,11 +21238,11 @@ begin
pop
% Runlength encode (light, dark, light, ...) and evaluate each row
- /symrow sym i size mul size getinterval def
- mark 0 0
- symrow {
+ /symrow sym i cols mul cols getinterval def
+ mark 0 0
+ symrow {
exch 1 index eq {exch 1 add exch} {1 exch} ifelse
- } forall
+ } forall
pop
rle 0 counttomark 2 sub getinterval astore
evalfulln1n3 n3 add /n3 exch def n1 add /n1 exch def
@@ -17069,52 +21257,52 @@ begin
i 0 gt {
mark
lastpairs aload pop thispairs aload pop
- n2 size { exch sizeadd1 index add 3 and 0 eq {3 add} if } repeat
+ n2 cols { exch colsadd1 index add 3 and 0 eq {3 add} if } repeat
/n2 exch def
cleartomark
} if
} for
-
- % Score dark/light imbalance
+
+ % Score dark/light imbalance
/dark 0 sym {add} forall def
- /n4 dark 100 mul size dup mul div 50 sub abs 5 div cvi 10 mul def
+ /n4 dark 100 mul cols dup mul div 50 sub abs 5 div cvi 10 mul def
n1 n2 add n3 add n4 add
- } bind def
-
+ } def
+
% Evaluation algorithm for micro symbols
/evalmicro {
/sym exch def
/dkrhs 0 def /dkbot 0 def
- 1 1 size 1 sub {
+ 1 1 cols 1 sub {
/i exch def
- /dkrhs dkrhs sym size 1 sub i qmv get add def
- /dkbot dkbot sym i size 1 sub qmv get add def
+ /dkrhs dkrhs sym cols 1 sub i qmv get add def
+ /dkbot dkbot sym i cols 1 sub qmv get add def
} for
dkrhs dkbot le {
dkrhs 16 mul dkbot add neg
} {
dkbot 16 mul dkrhs add neg
} ifelse
- } bind def
-
+ } def
+
% Evaluate the masked symbols to find the most suitable
/bestscore 999999999 def
0 1 masks length 1 sub {
/m exch def
- /masksym size size mul array def
- 0 1 size size mul 1 sub {
+ /masksym rows cols mul array def
+ 0 1 rows cols mul 1 sub {
/i exch def
masksym i pixs i get masks m get i get xor put
} for
- masks length 1 ne {
+ masks length 1 ne { % Not rMQR nor user-specified mask
format (full) eq {
masksym evalfull /score exch def
} {
masksym evalmicro /score exch def
} ifelse
- score bestscore lt {
+ score bestscore lt {
/bestsym masksym def
/bestmaskval m def
/bestscore score def
@@ -17127,46 +21315,85 @@ begin
% Set the solitary dark module in full symbols
format (full) eq {
- pixs 8 size 8 sub qmv 1 put
+ pixs 8 cols 8 sub qmv 1 put
} if
% Add the format information
+{
+ /fmtvalsfull [
+ 16#5412 16#5125 16#5e7c 16#5b4b 16#45f9 16#40ce 16#4f97 16#4aa0
+ 16#77c4 16#72f3 16#7daa 16#789d 16#662f 16#6318 16#6c41 16#6976
+ 16#1689 16#13be 16#1ce7 16#19d0 16#0762 16#0255 16#0d0c 16#083b
+ 16#355f 16#3068 16#3f31 16#3a06 16#24b4 16#2183 16#2eda 16#2bed
+ ] def
+ /fmtvalsmicro [
+ 16#4445 16#4172 16#4e2b 16#4b1c 16#55ae 16#5099 16#5fc0 16#5af7
+ 16#6793 16#62a4 16#6dfd 16#68ca 16#7678 16#734f 16#7c16 16#7921
+ 16#06de 16#03e9 16#0cb0 16#0987 16#1735 16#1202 16#1d5b 16#186c
+ 16#2508 16#203f 16#2f66 16#2a51 16#34e3 16#31d4 16#3e8d 16#3bba
+ ] def
+ /fmtvalsrmqr1 [
+ 16#1fab2 16#1e597 16#1dbdd 16#1c4f8 16#1b86c 16#1a749 16#19903 16#18626
+ 16#17f0e 16#1602b 16#15e61 16#14144 16#13dd0 16#122f5 16#11cbf 16#1039a
+ 16#0f1ca 16#0eeef 16#0d0a5 16#0cf80 16#0b314 16#0ac31 16#0927b 16#08d5e
+ 16#07476 16#06b53 16#05519 16#04a3c 16#036a8 16#0298d 16#017c7 16#008e2
+ 16#3f367 16#3ec42 16#3d208 16#3cd2d 16#3b1b9 16#3ae9c 16#390d6 16#38ff3
+ 16#376db 16#369fe 16#357b4 16#34891 16#33405 16#32b20 16#3156a 16#30a4f
+ 16#2f81f 16#2e73a 16#2d970 16#2c655 16#2bac1 16#2a5e4 16#29bae 16#2848b
+ 16#27da3 16#26286 16#25ccc 16#243e9 16#23f7d 16#22058 16#21e12 16#20137
+ ] def
+ /fmtvalsrmqr2 [
+ 16#20a7b 16#2155e 16#22b14 16#23431 16#248a5 16#25780 16#269ca 16#276ef
+ 16#28fc7 16#290e2 16#2aea8 16#2b18d 16#2cd19 16#2d23c 16#2ec76 16#2f353
+ 16#30103 16#31e26 16#3206c 16#33f49 16#343dd 16#35cf8 16#362b2 16#37d97
+ 16#384bf 16#39b9a 16#3a5d0 16#3baf5 16#3c661 16#3d944 16#3e70e 16#3f82b
+ 16#003ae 16#01c8b 16#022c1 16#03de4 16#04170 16#05e55 16#0601f 16#07f3a
+ 16#08612 16#09937 16#0a77d 16#0b858 16#0c4cc 16#0dbe9 16#0e5a3 16#0fa86
+ 16#108d6 16#117f3 16#129b9 16#1369c 16#14a08 16#1552d 16#16b67 16#17442
+ 16#18d6a 16#1924f 16#1ac05 16#1b320 16#1cfb4 16#1d091 16#1eedb 16#1f1fe
+ ] def
+} ctxdef
format (full) eq {
- /fmtvals [
- 16#5412 16#5125 16#5e7c 16#5b4b 16#45f9 16#40ce 16#4f97 16#4aa0
- 16#77c4 16#72f3 16#7daa 16#789d 16#662f 16#6318 16#6c41 16#6976
- 16#1689 16#13be 16#1ce7 16#19d0 16#0762 16#0255 16#0d0c 16#083b
- 16#355f 16#3068 16#3f31 16#3a06 16#24b4 16#2183 16#2eda 16#2bed
- ] def
/ecid (MLHQ) eclevel search pop length exch pop exch pop def
- /fmtval fmtvals ecid 3 bitshift bestmaskval add get def
- } {
- /fmtvals [
- 16#4445 16#4172 16#4e2b 16#4b1c 16#55ae 16#5099 16#5fc0 16#5af7
- 16#6793 16#62a4 16#6dfd 16#68ca 16#7678 16#734f 16#7c16 16#7921
- 16#06de 16#03e9 16#0cb0 16#0987 16#1735 16#1202 16#1d5b 16#186c
- 16#2508 16#203f 16#2f66 16#2a51 16#34e3 16#31d4 16#3e8d 16#3bba
- ] def
- /symid [ [0] [1 2] [3 4] [5 6 7] ] size 11 sub 2 idiv get eclval get def
- /fmtval fmtvals symid 2 bitshift bestmaskval add get def
- } ifelse
- 0 1 formatmap length 1 sub {
- /i exch def
- formatmap i get {
- pixs exch {} forall qmv fmtval 14 i sub neg bitshift 1 and put
- } forall
- } for
-
+ /fmtval fmtvalsfull ecid 3 bitshift bestmaskval add get def
+ 0 1 formatmap length 1 sub {
+ /i exch def
+ formatmap i get {
+ pixs exch aload pop qmv fmtval 14 i sub neg bitshift 1 and put
+ } forall
+ } for
+ } if
+ format (micro) eq {
+ /symid [ [0] [1 2] [3 4] [5 6 7] ] cols 11 sub 2 idiv get eclval get def
+ /fmtval fmtvalsmicro symid 2 bitshift bestmaskval add get def
+ 0 1 formatmap length 1 sub {
+ /i exch def
+ pixs formatmap i get 0 get aload pop qmv fmtval 14 i sub neg bitshift 1 and put
+ } for
+ } if
+ format (rmqr) eq {
+ /fmtvalu (MH) eclevel search pop length exch pop exch pop 5 bitshift verind add def
+ /fmtval1 fmtvalsrmqr1 fmtvalu get def
+ /fmtval2 fmtvalsrmqr2 fmtvalu get def
+ 0 1 formatmap length 1 sub {
+ /i exch def
+ pixs formatmap i get 0 get aload pop qmv fmtval1 17 i sub neg bitshift 1 and put
+ pixs formatmap i get 1 get aload pop qmv fmtval2 17 i sub neg bitshift 1 and put
+ } for
+ } if
+
% Add the version information
- size 45 ge {
- /vervals [
- 16#07c94 16#085bc 16#09a99 16#0a4d3 16#0bbf6 16#0c762 16#0d847
- 16#0e60d 16#0f928 16#10b78 16#1145d 16#12a17 16#13532 16#149a6
- 16#15683 16#168c9 16#177ec 16#18ec4 16#191e1 16#1afab 16#1b08e
- 16#1cc1a 16#1d33f 16#1ed75 16#1f250 16#209d5 16#216fd 16#228ba
- 16#2379f 16#24b0b 16#2542e 16#26a64 16#27541 16#28c69
- ] def
- /verval vervals size 17 sub 4 idiv 7 sub get def
+{
+ /vervals [
+ 16#07c94 16#085bc 16#09a99 16#0a4d3 16#0bbf6 16#0c762 16#0d847
+ 16#0e60d 16#0f928 16#10b78 16#1145d 16#12a17 16#13532 16#149a6
+ 16#15683 16#168c9 16#177ec 16#18ec4 16#191e1 16#1afab 16#1b08e
+ 16#1cc1a 16#1d33f 16#1ed75 16#1f250 16#209d5 16#216fd 16#228ba
+ 16#2379f 16#24b0b 16#2542e 16#26a64 16#27541 16#28c69
+ ] def
+} ctxdef
+ format (full) eq cols 45 ge and {
+ /verval vervals cols 17 sub 4 idiv 7 sub get def
0 1 versionmap length 1 sub {
/i exch def
versionmap i get {
@@ -17179,18 +21406,22 @@ begin
<<
/ren //renmatrix
/pixs pixs
- /pixx size
- /pixy size
- /height size 2 mul 72 div
- /width size 2 mul 72 div
+ /pixx cols
+ /pixy rows
+ /height rows 2 mul 72 div
+ /width cols 2 mul 72 div
/opt options
>>
dontdraw not //renmatrix if
+ //unloadctx exec
+
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/qrcode dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -17198,16 +21429,156 @@ end
%%EndResource
% --END ENCODER qrcode--
+% --BEGIN ENCODER swissqrcode--
+% --REQUIRES preamble loadctx unloadctx raiseerror parseinput renmatrix qrcode--
+% --DESC: Swiss QR Code
+% --EXAM:
+% --EXOP:
+% --RNDR: renmatrix
+%%BeginResource: uk.co.terryburton.bwipp swissqrcode 0.0 2022082100 68213 68020
+%%BeginData: 128 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+10 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /parseinput dup /uk.co.terryburton.bwipp findresource put
+dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
+dup /qrcode dup /uk.co.terryburton.bwipp findresource put
+begin
+/swissqrcode {
+
+ 20 dict begin % Confine variables to local scope
+
+ /options exch def % We are given an option string
+ /barcode exch def % We are given a barcode string
+
+ /ctx null def
+ /dontdraw false def
+
+ /parse false def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ % Parse ordinals of the form ^NNN to ASCII
+ /fncvals <<
+ /parse parse
+ /parseonly true
+ /parsefnc false
+ >> def
+ /barcode barcode fncvals //parseinput exec def
+ /barlen barcode length def
+ options (parse) undef
+
+ % Validate the input length
+ barcode length 997 gt {
+ /bwipp.swissqrcodeBadLength (Swiss QR Code input must not exceed 997 digits) //raiseerror exec
+ } if
+
+ % Get the result of encoding with qrcode
+ options (dontdraw) true put
+ /args barcode options //qrcode exec def
+
+ args (opt) options put
+ args
+
+ % The 7mm-wide Swiss Cross is defined by the specification as being an
+ % overlaid image, i.e. not made out of "modules", so very likely a
+ % different pitch. It cannot therefore be represented by our standard image
+ % dictionary and would be a nightmare to gridfit. The application assumes a
+ % sufficient high-resolution print process that such issues do not matter.
+ %
+ % So for now we simply do as we're told and paint over the top of the
+ % barcode image that has been scaled to 46mm, user be damned!
+ %
+ dontdraw not {
+
+ gsave
+ currentpoint translate
+ 72 25.4 div dup scale % pt to mm
+
+ % Clipping path with 7mm hole for the Swiss Cross
+ gsave
+ newpath
+ 0 0 moveto
+ 46 0 lineto
+ 46 46 lineto
+ 0 46 lineto
+ closepath
+ 19.5 19.5 moveto
+ 19.5 26.5 lineto
+ 26.5 26.5 lineto
+ 26.5 19.5 lineto
+ closepath
+ clip
+
+ % Scale the QR Code to fit within 46mm
+ gsave
+ 0 0 moveto
+ 46 args (pixx) get div 2 div dup scale
+ //renmatrix exec
+ grestore
+
+ grestore % Clipping
+
+ % Draw Swiss Cross
+ 19.5 dup translate
+ 7 83 div dup scale
+
+ newpath
+ 6 6 moveto
+ 6 77 lineto
+ 77 77 lineto
+ 77 6 lineto
+ closepath
+ 49 18 moveto
+ 49 34 lineto
+ 65 34 lineto
+ 65 49 lineto
+ 49 49 lineto
+ 49 65 lineto
+ 34 65 lineto
+ 34 49 lineto
+ 18 49 lineto
+ 18 34 lineto
+ 34 34 lineto
+ 34 18 lineto
+ closepath
+ 0 0 0 setrgbcolor fill
+
+ grestore
+
+ } if
+
+ end
+
+}
+[/barcode] {null def} forall
+bind def
+/swissqrcode dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
+%%EndData
+%%EndResource
+% --END ENCODER swissqrcode--
+
% --BEGIN ENCODER microqrcode--
-% --REQUIRES preamble raiseerror renmatrix qrcode--
+% --REQUIRES preamble loadctx unloadctx raiseerror parseinput renmatrix qrcode--
% --DESC: Micro QR Code
% --EXAM: 1234
% --EXOP:
% --RNDR: renmatrix
-%%BeginResource: uk.co.terryburton.bwipp microqrcode 0.0 2017040400 59531 59384
-%%BeginData: 43 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp microqrcode 0.0 2022082100 62905 62760
+%%BeginData: 46 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
dup /qrcode dup /uk.co.terryburton.bwipp findresource put
@@ -17219,6 +21590,7 @@ begin
/options exch def % We are given an option string
/barcode exch def % We are given a barcode string
+ /ctx null def
/dontdraw false def
% Parse the input options
@@ -17240,12 +21612,14 @@ begin
args (opt) options put
args
-
+
dontdraw not //renmatrix if
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/microqrcode dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -17253,17 +21627,78 @@ end
%%EndResource
% --END ENCODER microqrcode--
+% --BEGIN ENCODER rectangularmicroqrcode--
+% --REQUIRES preamble loadctx unloadctx raiseerror parseinput renmatrix qrcode--
+% --DESC: Rectangular Micro QR Code
+% --EXAM: 1234
+% --EXOP: version=R17x139
+% --RNDR: renmatrix
+%%BeginResource: uk.co.terryburton.bwipp rectangularmicroqrcode 0.0 2022082100 62948 62792
+%%BeginData: 46 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+10 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
+dup /qrcode dup /uk.co.terryburton.bwipp findresource put
+begin
+/rectangularmicroqrcode {
+
+ 20 dict begin % Confine variables to local scope
+
+ /options exch def % We are given an option string
+ /barcode exch def % We are given a barcode string
+
+ /ctx null def
+ /dontdraw false def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ % Get the result of encoding with qrcode with format=micro
+ options (dontdraw) true put
+ options (format) (rmqr) put
+
+ /args barcode options //qrcode exec def
+
+ args (opt) options put
+ args
+
+ dontdraw not //renmatrix if
+
+ end
+
+}
+[/barcode] {null def} forall
+bind def
+/rectangularmicroqrcode dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
+%%EndData
+%%EndResource
+% --END ENCODER rectangularmicroqrcode--
+
% --BEGIN ENCODER maxicode--
-% --REQUIRES preamble raiseerror renmaximatrix--
+% --REQUIRES preamble loadctx unloadctx raiseerror parseinput renmaximatrix--
% --DESC: MaxiCode
% --EXAM: [)>^03001^02996152382802^029840^029001^0291Z00004951^029UPSN^02906X610^029159^0291234567^0291/1^029^029Y^029634 ALPHA DR^029PITTSBURGH^029PA^029^004
% --EXOP: mode=2 parse
% --RNDR: renmaximatrix
-%%BeginResource: uk.co.terryburton.bwipp maxicode 0.0 2017040400 141526 147393
-%%BeginData: 564 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp maxicode 0.0 2022082100 132737 135002
+%%BeginData: 607 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
+dup /loadctx dup /uk.co.terryburton.bwipp findresource put
+dup /unloadctx dup /uk.co.terryburton.bwipp findresource put
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /parseinput dup /uk.co.terryburton.bwipp findresource put
dup /renmaximatrix dup /uk.co.terryburton.bwipp findresource put
begin
/maxicode {
@@ -17273,10 +21708,12 @@ begin
/options exch def % We are given an option string
/barcode exch def % We are given a barcode string
+ /ctx null def
/dontdraw false def
/mode -1 def
/sam -1 def
/parse false def
+ /parsefnc false def
% Parse the input options
options type /stringtype eq {
@@ -17292,64 +21729,66 @@ begin
/mode mode cvi def
/sam sam cvi def
- % Parse ordinals of the form ^NNN to ASCII
- parse {
- /msg barcode length string def
- /j 0 def
- barcode
- { % loop
- (^) search {
- dup msg exch j exch putinterval
- length j add 1 add /j exch def
- pop
- dup 0 3 getinterval cvi msg exch j 1 sub exch put
- dup length 3 sub 3 exch getinterval
- } {
- dup msg exch j exch putinterval
- length j add /j exch def
- /barcode msg 0 j getinterval def
- exit
- } ifelse
- } loop
- } if
-
- /msg barcode def
+ /maxicode //loadctx exec
+
+ % Parse the input
+ /fncvals <<
+ /parse parse
+ /parsefnc parsefnc
+ /eci true
+ % ECIs only
+ >> def
+ /msg barcode fncvals //parseinput exec def
/msglen msg length def
% Special message handling for modes 2 and 3
mode 2 eq mode 3 eq or {
- % Normalise messages that begin with a field identifier [)>RS01GSyy
- msg 0 7 getinterval <5b293e1e30311d> eq {
- /fid msg 0 9 getinterval def
- /msg msg 9 msglen 9 sub getinterval def
+ % Convert to a string for extracting the structured data
+ /barcode msglen string def
+ 0 1 msglen 1 sub {
+ /i exch def
+ msg i get 0 gt {
+ barcode i msg i get put
+ } if
+ } for
+ /barlen barcode length def
+
+ % Normalise messages that begin with a field identifier [)>{RS}01{GS}yy
+ barcode 0 7 getinterval <5b293e1e30311d> eq {
+ /fid barcode 0 9 getinterval def
+ /barcode barcode 9 barlen 9 sub getinterval def
} {
/fid () def
} ifelse
- % Read the postcode, country code and service code fields seperated by GS
- msg <1d> search pop /pcode exch def
+ % Read the postcode, country code and service code fields separated by GS
+ barcode <1d> search pop /pcode exch def
pop <1d> search pop /ccode exch def
pop <1d> search pop /scode exch def
- pop /msg exch def
+ pop /barcode exch def
% Prepend the field identifier
- msg length fid length add string dup
- 0 fid putinterval dup
- fid length msg putinterval
- /msg exch def
+ barcode length fid length add string dup
+ 0 fid putinterval dup
+ fid length barcode putinterval
+ /barcode exch def
+ /barlen barcode length def
+
+ /msg [ barcode {} forall ] def
/msglen msg length def
} if
+{
% Special function characters
/eci -1 def /pad -2 def /ns -3 def
/la -4 def /lb -5 def
/sa -6 def /sb -7 def /sc -8 def /sd -9 def /se -10 def
- /sa2 -11 def /sa3 -12 def
+ /sa2 -11 def /sa3 -12 def
/lkc -13 def /lkd -14 def /lke -15 def
- /pd2 -16 def /pd3 -17 def
-
+ /pd2 -16 def /pd3 -17 def
+
% Character maps for each state
/charmaps [
% A B C D E
@@ -17362,7 +21801,7 @@ begin
[ (F) (f) 198 230 6 ] % 6
[ (G) (g) 199 231 7 ] % 7
[ (H) (h) 200 232 8 ] % 8
- [ (I) (i) 201 233 9 ] % 9
+ [ (I) (i) 201 233 9 ] % 9
[ (J) (j) 202 234 10 ] % 10
[ (K) (k) 203 235 11 ] % 11
[ (L) (l) 204 236 12 ] % 12
@@ -17417,8 +21856,8 @@ begin
[ sd sd sd lkd sd ] % 61
[ se se se se lke ] % 62
[ lb la lb lb lb ] % 63
- ] def
-
+ ] def
+
% Invert charmaps to give character to value maps for each state
/charvals [ 64 dict 64 dict 64 dict 64 dict 64 dict ] def
0 1 charmaps length 1 sub {
@@ -17427,7 +21866,7 @@ begin
0 1 4 {
/j exch def
encs j get dup type /stringtype eq {0 get} if % convert string to ASCII if required
- charvals j get exch i put
+ charvals j get exch i put
} for
} for
/seta charvals 0 get def
@@ -17435,6 +21874,7 @@ begin
/setc charvals 2 get def
/setd charvals 3 get def
/sete charvals 4 get def
+} ctxdef
% Compute numeric runlengths
/nseq [ msglen 1 add {0} repeat ] def
@@ -17448,19 +21888,19 @@ begin
} for
/nseq nseq 0 msglen getinterval def
- % Encode the message from ASCII to codewords
+ % Encode the message from ASCII to codewords
/prefixinset {
0 {
- 2 copy exch length ge {exit} if
+ 2 copy exch length ge {exit} if
2 copy get 3 index exch known {1 add} {exit} ifelse
} loop
exch pop exch pop
- } bind def
-
+ } def
+
/enc {
exch get out exch j exch put
/j j 1 add def
- } bind def
+ } def
/out 144 array def
/i 0 def /j 0 def /cset (seta) def
@@ -17474,29 +21914,58 @@ begin
exit
} if
{ % not a loop but common exit point
-
+ % Immediately encode an ECI
+ msg i get -1000000 le {
+ eci cset load enc
+ msg i get neg 1000000 sub
+ dup 000031 le { % ECI 000000 - 000031
+ 63 and
+ 1 array astore
+ } { dup 001023 le { % ECI 000032 - 001023
+ dup -6 bitshift 31 and 32 or exch
+ 63 and
+ 2 array astore
+ } { dup 032767 le { % ECI 001024 - 032767
+ dup -12 bitshift 47 and 48 or exch
+ dup -6 bitshift 63 and exch
+ 63 and
+ 3 array astore
+ } { % ECI 032768 - 999999
+ dup -18 bitshift 55 and 56 or exch
+ dup -12 bitshift 63 and exch
+ dup -6 bitshift 63 and exch
+ 63 and
+ 4 array astore
+ } ifelse } ifelse } ifelse
+ dup out exch j exch putinterval
+ length j add /j exch def
+ /i i 1 add def
+ exit
+ } if
+
% If 9 numerals available then use NS
nseq i get 9 ge {
- msg i 9 getinterval cvi 4 { dup 63 and exch -6 bitshift } repeat cset load ns get
+ msg i 9 getinterval 0 exch {48 sub add 10 mul} forall 10 idiv
+ 4 { dup 63 and exch -6 bitshift } repeat cset load ns get
0 2 10 {index} for 6 array astore 7 1 roll 6 {pop} repeat
out exch j exch putinterval
/i i 9 add def
/j j 6 add def
exit
} if
-
+
% Read next three characters
/char1 msg i get def
/char2 i 1 add msglen lt {msg i 1 add get} {-99} ifelse def
/char3 i 2 add msglen lt {msg i 2 add get} {-99} ifelse def
-
+
% If current mode is sufficient then directly encode
- cset load char1 known {
+ cset load char1 known {
char1 cset load enc
/i i 1 add def
exit
} if
-
+
% For switching from A to B
cset (seta) eq setb char1 known and {
setb char2 known {
@@ -17509,7 +21978,7 @@ begin
} ifelse
exit
} if
-
+
% For switching from B to A encode according to length of prefix
cset (setb) eq seta char1 known and {
/p seta msg i 4 msglen i sub 2 copy gt {exch} if pop getinterval prefixinset def
@@ -17522,14 +21991,14 @@ begin
sa2 setb enc
char1 seta enc
char2 seta enc
- /i i 2 add def
+ /i i 2 add def
} if
p 3 eq {
sa3 setb enc
char1 seta enc
char2 seta enc
char3 seta enc
- /i i 3 add def
+ /i i 3 add def
} if
p 4 ge {
la setb enc
@@ -17537,24 +22006,24 @@ begin
} if
exit
} if
-
+
% If character is in A or B then directly latch
seta char1 known {
la cset load enc
/cset (seta) def
exit
- } if
+ } if
setb char1 known {
lb cset load enc
/cset (setb) def
exit
- } if
-
+ } if
+
% Determine which one of sets C, D or E the character is in
setc char1 known {/setx (setc) def /sx sc def /lkx lkc def} if
setd char1 known {/setx (setd) def /sx sd def /lkx lkd def} if
sete char1 known {/setx (sete) def /sx se def /lkx lke def} if
-
+
% Encode according to the length of the prefix
/p setx load msg i 4 msglen i sub 2 copy gt {exch} if pop getinterval prefixinset def
p 1 eq {
@@ -17581,20 +22050,20 @@ begin
p 4 ge {
sx cset load enc
lkx setx load enc
- /cset setx def
+ /cset setx def
} if
-
+
exit
} loop % out
} loop
/encmsg out 0 j getinterval def
- /padval cset load pad get def
+ /padval cset load pad get def
% Prefix the encoded message with the structured append insert
/sami [] def
sam -1 ne {
/sami 2 array def
- sami 0 seta pad get put
+ sami 0 seta pad get put
sami 1 sam 10 idiv 1 sub 8 mul sam 10 mod 1 sub add put
} if
/encmsg [ sami aload pop encmsg aload pop ] def
@@ -17613,8 +22082,8 @@ begin
pcb pcode cvi 2 30 string cvrs dup length 36 exch sub exch putinterval
} { % mode=3
% For alphanumeric postcode, trim or pad with spaces to 6 chars and encode to binary
- /pccw [
- ( ) 6 string copy dup 0 pcode length 6 gt {pcode 0 6 getinterval} {pcode} ifelse putinterval
+ /pccw [
+ ( ) 6 string copy dup 0 pcode length 6 gt {pcode 0 6 getinterval} {pcode} ifelse putinterval
{seta exch get} forall
] def
0 1 5 {
@@ -17641,7 +22110,7 @@ begin
% Evaluate the structured carrier message as codewords
/pri [ 0 0 0 0 0 0 0 0 0 0 ] def
- 0 1 59 {
+ 0 1 59 {
/i exch def
/ps i 6 idiv def
/ep 2 5 i 6 mod sub exp cvi scm i get 48 sub mul def
@@ -17685,7 +22154,7 @@ begin
} {
pop pop 0
} ifelse
- } bind def
+ } def
% Generate error correction codewords
/rscodes {
@@ -17720,7 +22189,7 @@ begin
ecb
- } bind def
+ } def
% Split secondary codeword into odd and even elements
/seco [ 0 2 sec length 1 sub { sec exch get } for ] def
@@ -17734,11 +22203,11 @@ begin
% Recompose the secondary parity codewords
/secchk [ 0 1 scodes 1 sub { dup secochk exch get exch secechk exch get } for ] def
- % Concatinate the data into final codewords
+ % Concatenate the data into final codewords
/codewords [
- pri aload pop
+ pri aload pop
pri 10 rscodes aload pop
- sec aload pop
+ sec aload pop
secchk aload pop
] def
@@ -17751,52 +22220,54 @@ begin
} for
% Maps modules to pixels in the grid
+{
/modmap [
- 469 529 286 316 347 346 673 672 703 702 647 676 283 282 313 312 370 610 618 379
- 378 409 408 439 705 704 559 589 588 619 458 518 640 701 675 674 285 284 315 314
- 310 340 531 289 288 319 349 348 456 486 517 516 471 470 369 368 399 398 429 428
- 549 548 579 578 609 608 649 648 679 678 709 708 639 638 669 668 699 698 279 278
- 309 308 339 338 381 380 411 410 441 440 561 560 591 590 621 620 547 546 577 576
- 607 606 367 366 397 396 427 426 291 290 321 320 351 350 651 650 681 680 711 710
- 1 0 31 30 61 60 3 2 33 32 63 62 5 4 35 34 65 64 7 6
- 37 36 67 66 9 8 39 38 69 68 11 10 41 40 71 70 13 12 43 42
- 73 72 15 14 45 44 75 74 17 16 47 46 77 76 19 18 49 48 79 78
- 21 20 51 50 81 80 23 22 53 52 83 82 25 24 55 54 85 84 27 26
- 57 56 87 86 117 116 147 146 177 176 115 114 145 144 175 174 113 112 143 142
- 173 172 111 110 141 140 171 170 109 108 139 138 169 168 107 106 137 136 167 166
- 105 104 135 134 165 164 103 102 133 132 163 162 101 100 131 130 161 160 99 98
- 129 128 159 158 97 96 127 126 157 156 95 94 125 124 155 154 93 92 123 122
- 153 152 91 90 121 120 151 150 181 180 211 210 241 240 183 182 213 212 243 242
- 185 184 215 214 245 244 187 186 217 216 247 246 189 188 219 218 249 248 191 190
- 221 220 251 250 193 192 223 222 253 252 195 194 225 224 255 254 197 196 227 226
- 257 256 199 198 229 228 259 258 201 200 231 230 261 260 203 202 233 232 263 262
- 205 204 235 234 265 264 207 206 237 236 267 266 297 296 327 326 357 356 295 294
- 325 324 355 354 293 292 323 322 353 352 277 276 307 306 337 336 275 274 305 304
- 335 334 273 272 303 302 333 332 271 270 301 300 331 330 361 360 391 390 421 420
- 363 362 393 392 423 422 365 364 395 394 425 424 383 382 413 412 443 442 385 384
- 415 414 445 444 387 386 417 416 447 446 477 476 507 506 537 536 475 474 505 504
- 535 534 473 472 503 502 533 532 455 454 485 484 515 514 453 452 483 482 513 512
- 451 450 481 480 511 510 541 540 571 570 601 600 543 542 573 572 603 602 545 544
- 575 574 605 604 563 562 593 592 623 622 565 564 595 594 625 624 567 566 597 596
- 627 626 657 656 687 686 717 716 655 654 685 684 715 714 653 652 683 682 713 712
- 637 636 667 666 697 696 635 634 665 664 695 694 633 632 663 662 693 692 631 630
- 661 660 691 690 721 720 751 750 781 780 723 722 753 752 783 782 725 724 755 754
- 785 784 727 726 757 756 787 786 729 728 759 758 789 788 731 730 761 760 791 790
- 733 732 763 762 793 792 735 734 765 764 795 794 737 736 767 766 797 796 739 738
- 769 768 799 798 741 740 771 770 801 800 743 742 773 772 803 802 745 744 775 774
- 805 804 747 746 777 776 807 806 837 836 867 866 897 896 835 834 865 864 895 894
- 833 832 863 862 893 892 831 830 861 860 891 890 829 828 859 858 889 888 827 826
- 857 856 887 886 825 824 855 854 885 884 823 822 853 852 883 882 821 820 851 850
- 881 880 819 818 849 848 879 878 817 816 847 846 877 876 815 814 845 844 875 874
- 813 812 843 842 873 872 811 810 841 840 871 870 901 900 931 930 961 960 903 902
- 933 932 963 962 905 904 935 934 965 964 907 906 937 936 967 966 909 908 939 938
- 969 968 911 910 941 940 971 970 913 912 943 942 973 972 915 914 945 944 975 974
- 917 916 947 946 977 976 919 918 949 948 979 978 921 920 951 950 981 980 923 922
- 953 952 983 982 925 924 955 954 985 984 927 926 957 956 987 986 58 89 88 118
- 149 148 178 209 208 238 269 268 298 329 328 358 389 388 418 449 448 478 509 508
- 538 569 568 598 629 628 658 689 688 718 749 748 778 809 808 838 869 868 898 929
+ 469 529 286 316 347 346 673 672 703 702 647 676 283 282 313 312 370 610 618 379
+ 378 409 408 439 705 704 559 589 588 619 458 518 640 701 675 674 285 284 315 314
+ 310 340 531 289 288 319 349 348 456 486 517 516 471 470 369 368 399 398 429 428
+ 549 548 579 578 609 608 649 648 679 678 709 708 639 638 669 668 699 698 279 278
+ 309 308 339 338 381 380 411 410 441 440 561 560 591 590 621 620 547 546 577 576
+ 607 606 367 366 397 396 427 426 291 290 321 320 351 350 651 650 681 680 711 710
+ 1 0 31 30 61 60 3 2 33 32 63 62 5 4 35 34 65 64 7 6
+ 37 36 67 66 9 8 39 38 69 68 11 10 41 40 71 70 13 12 43 42
+ 73 72 15 14 45 44 75 74 17 16 47 46 77 76 19 18 49 48 79 78
+ 21 20 51 50 81 80 23 22 53 52 83 82 25 24 55 54 85 84 27 26
+ 57 56 87 86 117 116 147 146 177 176 115 114 145 144 175 174 113 112 143 142
+ 173 172 111 110 141 140 171 170 109 108 139 138 169 168 107 106 137 136 167 166
+ 105 104 135 134 165 164 103 102 133 132 163 162 101 100 131 130 161 160 99 98
+ 129 128 159 158 97 96 127 126 157 156 95 94 125 124 155 154 93 92 123 122
+ 153 152 91 90 121 120 151 150 181 180 211 210 241 240 183 182 213 212 243 242
+ 185 184 215 214 245 244 187 186 217 216 247 246 189 188 219 218 249 248 191 190
+ 221 220 251 250 193 192 223 222 253 252 195 194 225 224 255 254 197 196 227 226
+ 257 256 199 198 229 228 259 258 201 200 231 230 261 260 203 202 233 232 263 262
+ 205 204 235 234 265 264 207 206 237 236 267 266 297 296 327 326 357 356 295 294
+ 325 324 355 354 293 292 323 322 353 352 277 276 307 306 337 336 275 274 305 304
+ 335 334 273 272 303 302 333 332 271 270 301 300 331 330 361 360 391 390 421 420
+ 363 362 393 392 423 422 365 364 395 394 425 424 383 382 413 412 443 442 385 384
+ 415 414 445 444 387 386 417 416 447 446 477 476 507 506 537 536 475 474 505 504
+ 535 534 473 472 503 502 533 532 455 454 485 484 515 514 453 452 483 482 513 512
+ 451 450 481 480 511 510 541 540 571 570 601 600 543 542 573 572 603 602 545 544
+ 575 574 605 604 563 562 593 592 623 622 565 564 595 594 625 624 567 566 597 596
+ 627 626 657 656 687 686 717 716 655 654 685 684 715 714 653 652 683 682 713 712
+ 637 636 667 666 697 696 635 634 665 664 695 694 633 632 663 662 693 692 631 630
+ 661 660 691 690 721 720 751 750 781 780 723 722 753 752 783 782 725 724 755 754
+ 785 784 727 726 757 756 787 786 729 728 759 758 789 788 731 730 761 760 791 790
+ 733 732 763 762 793 792 735 734 765 764 795 794 737 736 767 766 797 796 739 738
+ 769 768 799 798 741 740 771 770 801 800 743 742 773 772 803 802 745 744 775 774
+ 805 804 747 746 777 776 807 806 837 836 867 866 897 896 835 834 865 864 895 894
+ 833 832 863 862 893 892 831 830 861 860 891 890 829 828 859 858 889 888 827 826
+ 857 856 887 886 825 824 855 854 885 884 823 822 853 852 883 882 821 820 851 850
+ 881 880 819 818 849 848 879 878 817 816 847 846 877 876 815 814 845 844 875 874
+ 813 812 843 842 873 872 811 810 841 840 871 870 901 900 931 930 961 960 903 902
+ 933 932 963 962 905 904 935 934 965 964 907 906 937 936 967 966 909 908 939 938
+ 969 968 911 910 941 940 971 970 913 912 943 942 973 972 915 914 945 944 975 974
+ 917 916 947 946 977 976 919 918 949 948 979 978 921 920 951 950 981 980 923 922
+ 953 952 983 982 925 924 955 954 985 984 927 926 957 956 987 986 58 89 88 118
+ 149 148 178 209 208 238 269 268 298 329 328 358 389 388 418 449 448 478 509 508
+ 538 569 568 598 629 628 658 689 688 718 749 748 778 809 808 838 869 868 898 929
928 958 989 988
] def
+} ctxdef
% Lookup pixels for enabled modules from modmap
/pixs 864 array def
@@ -17819,9 +22290,13 @@ begin
dontdraw not //renmaximatrix if
+ //unloadctx exec
+
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/maxicode dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -17830,16 +22305,19 @@ end
% --END ENCODER maxicode--
% --BEGIN ENCODER azteccode--
-% --REQUIRES preamble raiseerror renmatrix--
+% --REQUIRES preamble loadctx unloadctx raiseerror parseinput renmatrix--
% --DESC: Aztec Code
% --EXAM: This is Aztec Code
% --EXOP: format=full
% --RNDR: renmatrix
-%%BeginResource: uk.co.terryburton.bwipp azteccode 0.0 2017040400 209943 222599
-%%BeginData: 679 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp azteccode 0.0 2022082100 189159 191319
+%%BeginData: 794 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
+dup /loadctx dup /uk.co.terryburton.bwipp findresource put
+dup /unloadctx dup /uk.co.terryburton.bwipp findresource put
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /parseinput dup /uk.co.terryburton.bwipp findresource put
dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
begin
/azteccode {
@@ -17849,6 +22327,7 @@ begin
/options exch def
/barcode exch def
+ /ctx null def
/dontdraw false def
/format (unset) def % full, compact or rune
/readerinit false def
@@ -17857,6 +22336,7 @@ begin
/ecaddchars 3 def
/raw false def
/parse false def
+ /parsefnc false def
% Parse the input options
options type /stringtype eq {
@@ -17868,149 +22348,170 @@ begin
currentdict end /options exch def
} if
options {def} forall
-
+
/layers layers cvi def
/eclevel eclevel cvr def
/ecaddchars ecaddchars cvi def
- % Parse ordinals of the form ^NNN to ASCII
- parse {
- /msg barcode length string def
- /j 0 def
- barcode
- { % loop
- (^) search {
- dup msg exch j exch putinterval
- length j add 1 add /j exch def
- pop
- dup 0 3 getinterval cvi msg exch j 1 sub exch put
- dup length 3 sub 3 exch getinterval
- } {
- dup msg exch j exch putinterval
- length j add /j exch def
- /barcode msg 0 j getinterval def
- exit
- } ifelse
- } loop
+ /azteccode //loadctx exec
+
+ format (rune) eq {
+ barcode length 0 eq {
+ /bwipp.aztecRuneNotNumeric (Aztec runes must be numeric) //raiseerror exec
+ } if
+ barcode {
+ dup 48 lt exch 57 gt or {
+ /bwipp.aztecRuneNotNumeric (Aztec runes must be numeric) //raiseerror exec
+ } if
+ } forall
+ barcode cvi dup 0 lt exch 255 gt or {
+ /bwipp.aztecRuneInvalid (Aztec runes must be 0 to 255) //raiseerror exec
+ } if
} if
- % Convert from input into message bitstream
- /msgbits () def
- format (rune) ne raw and {/msgbits barcode def} if
- format (rune) ne raw not and {
+ % Parse the input
+ /fn1 -1 def
+ /fncvals <<
+ /parse parse
+ /parsefnc parsefnc
+ /eci true
+ (FNC1) fn1
+ >> def
+ /msg barcode fncvals //parseinput exec def
+ /msglen msg length def
- % State key: "U"pper, "L"ower, "M"ixed, "P"unctuation, "D"igit, "B"inary
- /U 0 def /L 1 def /M 2 def /P 3 def /D 4 def /B 5 def
-
- % Special function characters
- /lu -1 def /ll -2 def /lm -3 def
- /lp -4 def /ld -5 def /su -6 def
- /sp -7 def /sb -8 def /fl -9 def
- /p2 -10 def /p3 -11 def /p4 -12 def /p5 -13 def
-
- % Character maps for each state
- /charmaps [
- % U L M P D
- [ sp sp sp fl sp ] % 0
- [ 32 32 32 13 32 ] % 1
- [ (A) (a) 1 p2 (0) ] % 2 p2 = CR LF
- [ (B) (b) 2 p3 (1) ] % 3 p3 = ". "
- [ (C) (c) 3 p4 (2) ] % 4 p4 = ", "
- [ (D) (d) 4 p5 (3) ] % 5 p5 = ": "
- [ (E) (e) 5 (!) (4) ] % 6
- [ (F) (f) 6 (") (5) ] % 7
- [ (G) (g) 7 (#) (6) ] % 8
- [ (H) (h) 8 ($) (7) ] % 9
- [ (I) (i) 9 (%) (8) ] % 10
- [ (J) (j) 10 (&) (9) ] % 11
- [ (K) (k) 11 (') (,) ] % 12
- [ (L) (l) 12 40 (.) ] % 13
- [ (M) (m) 13 41 lu ] % 14
- [ (N) (n) 27 (*) su ] % 15
- [ (O) (o) 28 (+) -99 ] % 16
- [ (P) (p) 29 (,) -99 ] % 17
- [ (Q) (q) 30 (-) -99 ] % 18
- [ (R) (r) 31 (.) -99 ] % 19
- [ (S) (s) (@) (/) -99 ] % 20
- [ (T) (t) 92 (:) -99 ] % 21
- [ (U) (u) (^) (;) -99 ] % 22
- [ (V) (v) (_) (<) -99 ] % 23
- [ (W) (w) (`) (=) -99 ] % 24
- [ (X) (x) (|) (>) -99 ] % 25
- [ (Y) (y) (~) (?) -99 ] % 26
- [ (Z) (z) 127 ([) -99 ] % 27
- [ ll su ll (]) -99 ] % 28
- [ lm lm lu ({) -99 ] % 29
- [ ld ld lp (}) -99 ] % 30
- [ sb sb sb lu -99 ] % 31
- ] def
-
- % Invert charmaps to give character to value maps for each state
- /charvals [ 32 dict 32 dict 32 dict 32 dict 16 dict ] def
- 0 1 charmaps length 1 sub {
- /i exch def
- /encs charmaps i get def
- 0 1 4 {
- /j exch def
- encs j get dup type /stringtype eq {0 get} if % convert string to ASCII if required
- charvals j get exch i put
- } for
+{
+ % State key: "U"pper, "L"ower, "M"ixed, "P"unctuation, "D"igit, "B"inary
+ /U 0 def /L 1 def /M 2 def /P 3 def /D 4 def /B 5 def
+
+ % Special function characters
+ /lu -2 def /ll -3 def /lm -4 def
+ /lp -5 def /ld -6 def /su -7 def
+ /sp -8 def /sb -9 def /fl -10 def
+ /p2 -11 def /p3 -12 def /p4 -13 def /p5 -14 def
+
+ % Character maps for each state
+ /charmaps [
+ % U L M P D
+ [ sp sp sp fl sp ] % 0
+ [ 32 32 32 13 32 ] % 1
+ [ (A) (a) 1 p2 (0) ] % 2 p2 = CR LF
+ [ (B) (b) 2 p3 (1) ] % 3 p3 = ". "
+ [ (C) (c) 3 p4 (2) ] % 4 p4 = ", "
+ [ (D) (d) 4 p5 (3) ] % 5 p5 = ": "
+ [ (E) (e) 5 (!) (4) ] % 6
+ [ (F) (f) 6 (") (5) ] % 7
+ [ (G) (g) 7 (#) (6) ] % 8
+ [ (H) (h) 8 ($) (7) ] % 9
+ [ (I) (i) 9 (%) (8) ] % 10
+ [ (J) (j) 10 (&) (9) ] % 11
+ [ (K) (k) 11 (') (,) ] % 12
+ [ (L) (l) 12 40 (.) ] % 13
+ [ (M) (m) 13 41 lu ] % 14
+ [ (N) (n) 27 (*) su ] % 15
+ [ (O) (o) 28 (+) -99 ] % 16
+ [ (P) (p) 29 (,) -99 ] % 17
+ [ (Q) (q) 30 (-) -99 ] % 18
+ [ (R) (r) 31 (.) -99 ] % 19
+ [ (S) (s) (@) (/) -99 ] % 20
+ [ (T) (t) 92 (:) -99 ] % 21
+ [ (U) (u) (^) (;) -99 ] % 22
+ [ (V) (v) (_) (<) -99 ] % 23
+ [ (W) (w) (`) (=) -99 ] % 24
+ [ (X) (x) (|) (>) -99 ] % 25
+ [ (Y) (y) (~) (?) -99 ] % 26
+ [ (Z) (z) 127 ([) -99 ] % 27
+ [ ll su ll (]) -99 ] % 28
+ [ lm lm lu ({) -99 ] % 29
+ [ ld ld lp (}) -99 ] % 30
+ [ sb sb sb lu -99 ] % 31
+ ] def
+
+ % Invert charmaps to give character to value maps for each state
+ /charvals [ 32 dict 32 dict 32 dict 32 dict 16 dict ] def
+ 0 1 charmaps length 1 sub {
+ /i exch def
+ /encs charmaps i get def
+ 0 1 4 {
+ /j exch def
+ encs j get dup type /stringtype eq {0 get} if % convert string to ASCII if required
+ charvals j get exch i put
} for
-
- % Punctuation compression
- /pcomp <<
- <0d0a> p2 % CR LF
- (. ) p3
- (, ) p4
- (: ) p5
- >> def
-
- /e 10000 def % "Empty"
-
- /latlen [ % Bit length of latch between states
- % To: U L M P D B From
- [ 0 5 5 10 5 10 ] % U
- [ 9 0 5 10 5 10 ] % L
- [ 5 5 0 5 10 10 ] % M
- [ 5 10 10 0 10 15 ] % P
- [ 4 9 9 14 0 14 ] % D
- [ 0 0 0 0 0 0 ] % B
- ] def
+ } for
- /latseq [ % Latch sequences between states
- % To: U L M P D B From
- [ [] [ll] [lm] [lm lp] [ld] [sb] ] % U
- [ [ld lu] [] [lm] [lm lp] [ld] [sb] ] % L
- [ [lu] [ll] [] [lp] [lu ld] [sb] ] % M
- [ [lu] [lu ll] [lu lm] [] [lu ld] [lu sb] ] % P
- [ [lu] [lu ll] [lu lm] [lu lm lp] [] [lu sb] ] % D
- [ [lu] [ll] [lm] [] [] [] ] % B
- ] def
+ % Punctuation compression
+ /pcomp <<
+ <0d0a> p2 % CR LF
+ (. ) p3
+ (, ) p4
+ (: ) p5
+ >> def
+
+ /e 10000 def % "Empty"
+
+ /latlen [ % Bit length of latch between states
+ % To: U L M P D B From
+ [ 0 5 5 10 5 10 ] % U
+ [ 9 0 5 10 5 10 ] % L
+ [ 5 5 0 5 10 10 ] % M
+ [ 5 10 10 0 10 15 ] % P
+ [ 4 9 9 14 0 14 ] % D
+ [ 0 0 0 0 0 0 ] % B
+ ] def
+
+ /latseq [ % Latch sequences between states
+ % To: U L M P D B From
+ [ [] [ll] [lm] [lm lp] [ld] [sb] ] % U
+ [ [ld lu] [] [lm] [lm lp] [ld] [sb] ] % L
+ [ [lu] [ll] [] [lp] [lu ld] [sb] ] % M
+ [ [lu] [lu ll] [lu lm] [] [lu ld] [lu sb] ] % P
+ [ [lu] [lu ll] [lu lm] [lu lm lp] [] [lu sb] ] % D
+ [ [lu] [ll] [lm] [] [] [] ] % B
+ ] def
+
+ /shftlen [ % Bit length of shift to state
+ % To: U L M P D From
+ [ e e e 5 e ] % U
+ [ 5 e e 5 e ] % L
+ [ e e e 5 e ] % M
+ [ e e e e e ] % P
+ [ 4 e e 4 e ] % D
+ ] def
+
+} ctxdef
+
+ % Convert from input into message bitstream
+ /msgbits () def
+ format (rune) ne raw and {/msgbits barcode def} if
+ format (rune) ne raw not and {
+
+ /charsize {
+ dup 0 ge {
+ % U L M P D B
+ pop [ 5 5 5 5 4 8 ] exch get
+ } { % FNC or ECI in P
+ exch pop
+ dup fn1 eq { % FNC1: PS{Flg(0)} + 3
+ pop 8
+ } { % ECI: PS{Flg(n)} + 3 + 4n
+ neg 1000000 sub dup 0 eq {pop 1} if
+ ln 10 ln div cvi 1 add 4 mul 8 add
+ } ifelse
+ } ifelse
+ } def
- /shftlen [ % Bit length of shift to state
- % To: U L M P D From
- [ e e e 5 e ] % U
- [ 5 e e 5 e ] % L
- [ e e e 5 e ] % M
- [ e e e e e ] % P
- [ 4 e e 4 e ] % D
- ] def
-
- % U L M P D B
- /charsize [ 5 5 5 5 4 8 ] def
-
% U L M P D B
/curlen [ 0 e e e e e ] def
/curseq [ [] [] [] [] [] [] ] def
-
+
/backto U def % U
/lastchar () def
-
+
% Derive the optimal sequences ending in each state
- barcode {
-
+ msg {
+
/char exch def
-
+
% Check for optimisations in the current sequences by latching from x to y
{ % loop
/imp false def
@@ -18037,31 +22538,35 @@ begin
imp not {exit} if % Repeat unless no improvement
} loop
- % Determine optimal next sequences for each valid encoding
- /nxtlen [ e e e e e e ] def
+ % Determine optimal next sequences for each valid encoding
+ /nxtlen [ e e e e e e ] def
/nxtseq 6 array def
-
+
[ U L M P D B ] {
/x exch def
-
+
{ % loop for common exit
-
+
% Skip states that cannot encode character
- x B ne {charvals x get char known not {exit} if} if
-
+ char 0 ge {
+ x B ne {charvals x get char known not {exit} if} if
+ } {
+ x P ne {exit} if % Only P can encode FNC1 and ECI
+ } ifelse
+
% Extend directly
- /cost curlen x get charsize x get add def
+ /cost curlen x get x char charsize add def
cost nxtlen x get lt {
nxtlen x cost put
nxtseq x [ curseq x get aload pop char ] put
} if
-
- % Optimise for direct shifts from y to x
+
+ % Optimise for direct shifts from y to x
x B eq {exit} if % B is treated as a latch
[ U L M P D ] {
/y exch def
x y ne {
- /cost curlen y get shftlen y get x get add charsize x get add def
+ /cost curlen y get shftlen y get x get add x char charsize add def
cost nxtlen y get lt {
nxtlen y cost put
nxtseq y [
@@ -18072,36 +22577,88 @@ begin
} if
} if
} forall
-
+
exit
} loop
-
+
} forall
-
+
% Optimise using P compression
- lastchar () ne {
+ lastchar () ne char 0 ge and {
/pchars 2 string dup 0 lastchar put dup 1 char put def
pcomp pchars known {
- curlen P get nxtlen P get lt {
- nxtlen P curlen P get put
- nxtseq P [ curseq P get aload pop pop pcomp pchars get ] put
- } if
+ [ U L M P D ] {
+ /i exch def
+ /inP true def % U and L can't encode CR, comma, dot or colon
+ i M eq { % M can encode CR
+ lastchar 13 eq { /inP false def } if
+ } {
+ i D eq { % D can encode comma and dot
+ lastchar 44 eq lastchar 46 eq or { /inP false def } if
+ } if
+ } ifelse
+ inP curlen i get nxtlen i get lt and {
+ /curseqi curseq i get def
+ /lastld false def
+ /lastsp false def
+ /lastidx -1 def
+ curseqi length 1 sub -1 0 { % Search backwards for lastchar
+ /idx exch def
+ /ch curseqi idx get def
+ lastidx -1 eq {
+ ch lastchar eq {
+ /lastidx idx def
+ idx 0 gt {
+ curseqi idx 1 sub get sp eq { /lastsp true def } if % Preceded by P/S
+ } if
+ } if
+ } { % Found lastchar, check latch
+ ch 0 lt ch ld ge and { % If have latch
+ i P eq {
+ ch ld eq { /lastld true def } if % Set flag if D/L for adjustment below
+ } {
+ ch lp ne { /inP lastsp def } if % If not P/L only in P if have P/S
+ } ifelse
+ exit
+ } if
+ } ifelse
+ } for
+ inP lastidx 0 ge and {
+ nxtlen i curlen i get put
+ lastidx curseqi length 1 sub lt { % If lastchar not at end of sequence
+ i P eq {
+ lastld { nxtlen i nxtlen i get 1 add put } if % Adjust count if D/L
+ % Move lastchar to end and replace
+ nxtseq i [ curseqi aload pop curseqi length lastidx sub -1 roll pop pcomp pchars get ] put
+ } {
+ % Replace lastchar in situ
+ nxtseq i [ curseqi aload pop ] put
+ nxtseq i get lastidx pcomp pchars get put
+ } ifelse
+ } {
+ nxtseq i [ curseqi aload pop pop pcomp pchars get ] put
+ } ifelse
+ } if
+ } if
+ } forall
} if
- } if
-
+ } if
+
% Account for binary extension for 32 or more bytes
- /numbytes 0 def
- nxtseq B get {
- sb eq {0} {numbytes 1 add} ifelse /numbytes exch def
- } forall
- numbytes 32 eq {nxtlen B nxtlen B get 11 add put} if
-
+ nxtseq B get null ne {
+ /numbytes 0 def
+ nxtseq B get {
+ sb eq {0} {numbytes 1 add} ifelse /numbytes exch def
+ } forall
+ numbytes 32 eq {nxtlen B nxtlen B get 11 add put} if
+ } if
+
/curlen nxtlen def
/curseq nxtseq def
- /lastchar char def
-
+ /lastchar char 0 ge {char} {()} ifelse def
+
} forall
-
+
% Select the optimal sequence
/minseq e def
[ U L M P D B ] {
@@ -18111,44 +22668,67 @@ begin
/seq curseq i get def
} if
} forall
-
+
% Encoding functions
/tobin {
string dup length 1 sub 0 exch 1 exch {1 index exch 48 put} for
- dup 3 -1 roll 2 2 index length string cvrs dup length 2 index length exch sub exch putinterval
- } bind def
- /encu {charvals U get exch get 5 tobin} bind def
- /encl {charvals L get exch get 5 tobin} bind def
- /encm {charvals M get exch get 5 tobin} bind def
- /encp {charvals P get exch get 5 tobin} bind def
- /encd {charvals D get exch get 4 tobin} bind def
+ dup 3 -1 roll 2 2 index length string cvrs dup length 2 index length exch sub exch putinterval
+ } def
+
+ /encu {charvals U get exch get 5 tobin} def
+ /encl {charvals L get exch get 5 tobin} def
+ /encm {charvals M get exch get 5 tobin} def
+ /encd {charvals D get exch get 4 tobin} def
+
+ /encp {
+ dup fn1 eq { % FNC1: Flg(0)
+ pop (00000000)
+ } {
+ dup -1000000 le { % ECI: Flg(n) + n-Digits
+ neg 1000000 sub dup dup 0 eq {pop 1} if
+ ln 10 ln div cvi
+ dup 1 add 4 mul 8 add string
+ dup 0 (00000) putinterval % Flg(n)
+ dup 2 index 1 add 3 tobin 5 exch putinterval % len
+ 3 1 roll -1 0 { % ECI digits in "Digit" encoding
+ 4 mul 8 add exch
+ dup 10 idiv 3 index 4 2 roll
+ 10 mod 2 add 4 tobin putinterval
+ } for
+ pop
+ } {
+ charvals P get exch get 5 tobin
+ } ifelse } ifelse
+ } def
+
/encfuncs [ /encu /encl /encm /encp /encd ] def
+
/addtomsgbits {
/v exch def
msgbits j v putinterval
/j j v length add def
- } bind def
-
+ } def
+
% Encode the sequence
/state U def
/msgbits minseq string def
/i 0 def /j 0 def {
i seq length ge {exit} if
-
+
state B ne {
-
+
/char seq i get def
-
+
% Encode character
char encfuncs state get load exec addtomsgbits
/i i 1 add def
-
+
% Encode shifted next character
char su eq char sp eq or {
seq i get char su eq {encu} {encp} ifelse addtomsgbits
/i i 1 add def
} if
-
+
% Latches to new state
char lu eq {/state U def} if
char ll eq {/state L def} if
@@ -18156,16 +22736,16 @@ begin
char lp eq {/state P def} if
char ld eq {/state D def} if
char sb eq {/state B def} if
-
+
} { % Binary
-
+
% Find number of bytes before latch or end
/numbytes 0 def {
i numbytes add seq length ge {exit} if
- seq i numbytes add get 0 lt {exit} if
+ seq i numbytes add get 0 lt {exit} if
/numbytes numbytes 1 add def
} loop
-
+
% Encode length
numbytes 31 le {
numbytes 5 tobin addtomsgbits
@@ -18173,13 +22753,13 @@ begin
0 5 tobin addtomsgbits
numbytes 31 sub 11 tobin addtomsgbits
} ifelse
-
+
% Encode bytes
numbytes {
- seq i get 8 tobin addtomsgbits
+ seq i get 8 tobin addtomsgbits
/i i 1 add def
} repeat
-
+
% Return to previous state as indicated
i seq length lt {
/char seq i get def
@@ -18188,14 +22768,15 @@ begin
char ll eq {/state L def} if
char lm eq {/state M def} if
} if
-
+
} ifelse
-
+
} loop
} if
- % Lookup the most appropriate symbol specification
+ % Lookup the most appropriate symbol specification
+{
/metrics [
[ (rune) 0 0 0 6 ] % Special metric for rune symbols
[ (compact) 1 1 17 6 ] [ (full) 1 1 21 6 ] [ (compact) 2 0 40 6 ]
@@ -18211,6 +22792,7 @@ begin
[ (full) 27 0 1224 12 ] [ (full) 28 0 1306 12 ] [ (full) 29 0 1392 12 ]
[ (full) 30 0 1480 12 ] [ (full) 31 0 1570 12 ] [ (full) 32 0 1664 12 ]
] def
+} ctxdef
/i 0 def
{ % loop
@@ -18221,12 +22803,12 @@ begin
/ncws m 3 get def % Total of codewords
/bpcw m 4 get def % Bits per codeword
/numecw ncws eclevel mul 100 div ecaddchars add ceiling cvi def
- msgbits length 0 eq {/numecw 0 def} if % Error correction codewords
+ msgbits length 0 eq {/numecw 0 def} if % Error correction codewords
/numdcw ncws numecw sub def % Data codewords
/okay true def
format (unset) ne format frmt ne and {/okay false def} if
readerinit icap 1 ne and {/okay false def} if
- layers -1 ne layers mlyr ne and {/okay false def} if
+ layers -1 ne layers mlyr ne and {/okay false def} if
msgbits length bpcw div ceiling cvi numdcw gt {/okay false def} if
okay {exit} if
/i i 1 add def
@@ -18235,8 +22817,8 @@ begin
/format frmt def
% Expand message bits into codewords avoiding codewords with all zeros or all ones
- /allzero {dup length (000000000000) 0 3 -1 roll getinterval eq} bind def
- /allones {dup length (111111111111) 0 3 -1 roll getinterval eq} bind def
+ /allzero {dup length (000000000000) 0 3 -1 roll getinterval eq} def
+ /allones {dup length (111111111111) 0 3 -1 roll getinterval eq} def
/cws ncws array def
/m 0 def /c 0 def
{
@@ -18246,8 +22828,8 @@ begin
/cwf msgbits m bpcw add 1 sub 1 getinterval def % Last bit
cwb allzero {/cwf (1) def /m m 1 sub def} if % Flip last bit to avoid zeros
cwb allones {/cwf (0) def /m m 1 sub def} if % Flip last bit to avoid ones
- % Concatinate the bits
- 12 string dup 0 cwb putinterval
+ % Concatenate the bits
+ 12 string dup 0 cwb putinterval
dup bpcw 1 sub cwf putinterval
0 bpcw getinterval
/cwb exch def
@@ -18263,11 +22845,13 @@ begin
/cw cw 2 bpcw i sub 1 sub exp cvi cwb i get 48 sub mul add def
} for
cws c cw put
- /m m bpcw add def
+ /m m bpcw add def
/c c 1 add def
- } loop
+ } loop
/cws cws 0 c getinterval def
+ options /debugcws known { /bwipp.debugcws cws //raiseerror exec } if
+
% Reed-Solomon algorithm
/rscodes {
@@ -18288,17 +22872,17 @@ begin
} {
pop pop 0
} ifelse
- } bind def
+ } def
% Generate the coefficients
/coeffs [ 1 rsnc {0} repeat ] def
1 1 rsnc {
- /i exch def
+ /i exch def
coeffs i coeffs i 1 sub get put
i 1 sub -1 1 {
/j exch def
coeffs j coeffs j 1 sub get coeffs j get rsalog i get rsprod xor put
- } for
+ } for
coeffs 0 coeffs 0 get rsalog i get rsprod put
} for
@@ -18306,17 +22890,17 @@ begin
/nd rscws length def
/rscws [ rscws {} forall rsnc {0} repeat 0 ] def
0 1 nd 1 sub {
- /k exch rscws exch get rscws nd get xor def
+ /k exch rscws exch get rscws nd get xor def
0 1 rsnc 1 sub {
- /j exch def
+ /j exch def
rscws nd j add rscws nd j add 1 add get k coeffs rsnc j sub 1 sub get rsprod xor put
- } for
+ } for
} for
% Return all but the last codeword
rscws 0 rscws length 1 sub getinterval
- } bind def
+ } def
% Create the codewords and bit string for the mode
format (full) eq {
@@ -18328,11 +22912,11 @@ begin
mode 2#0000000011110000 and -4 bitshift
mode 2#0000000000001111 and
] def
- /mode mode 6 16 19 rscodes def
+ /mode mode 6 16 19 rscodes def
} if
format (compact) eq {
/mode layers 1 sub 6 bitshift cws length 1 sub add def
- readerinit {/mode mode 2#00100000 or def} if
+ readerinit {/mode mode 2#00100000 or def} if
/mode [
mode 2#11110000 and -4 bitshift
mode 2#00001111 and
@@ -18352,36 +22936,38 @@ begin
0 1 modebits length 1 sub {modebits exch (0) putinterval} for
0 1 mode length 1 sub {
/i exch def
- modebits mode i get 2 4 string cvrs dup length 4 exch sub 4 i mul add exch putinterval
+ modebits mode i get 2 4 string cvrs dup length 4 exch sub 4 i mul add exch putinterval
} for
% Extend the data codewords with error correction codewords to create the bit string for the data
+{
/rsparams [
- [] [] [] [] [] []
- [ 64 67 ] % 6-bit codewords
+ [] [] [] [] [] []
+ [ 64 67 ] % 6-bit codewords
[]
[ 256 301 ] % 8-bit codewords
- []
+ []
[ 1024 1033 ] % 10-bit codewords
[]
[ 4096 4201 ] % 12-bit codewords
] def
+} ctxdef
/cws cws ncws cws length sub rsparams bpcw get {} forall rscodes def
format (full) eq {
- /databits layers layers mul 16 mul layers 112 mul add string def
+ /databits layers layers mul 16 mul layers 112 mul add string def
} {
- /databits layers layers mul 16 mul layers 88 mul add string def
+ /databits layers layers mul 16 mul layers 88 mul add string def
} ifelse
0 1 databits length 1 sub {databits exch (0) putinterval} for
- 0 1 ncws 1 sub {
+ 0 1 ncws 1 sub {
/i exch def
- databits cws i get 2 bpcw string cvrs
- dup length bpcw exch sub bpcw i mul add databits length ncws bpcw mul sub add
- exch putinterval
+ databits cws i get 2 bpcw string cvrs
+ dup length bpcw exch sub bpcw i mul add databits length ncws bpcw mul sub add
+ exch putinterval
} for
% Move to a point in the cartesian plane centered on the bullseye
- /cmv {size mul sub mid add} bind def
+ /cmv {size mul sub mid add} def
% Move to a bit position within a layer
/lmv {
@@ -18390,7 +22976,7 @@ begin
/lwid fw llyr 4 mul add def
/ldir lbit 2 idiv lwid idiv def
ldir 0 eq { % Top
- lwid 1 sub 2 idiv neg 1 add lbit 2 idiv lwid mod add
+ lwid 1 sub 2 idiv neg 1 add lbit 2 idiv lwid mod add
fw 1 sub 2 idiv llyr 2 mul add lbit 2 mod add
cmv
} if
@@ -18409,12 +22995,12 @@ begin
lwid 2 idiv 1 sub lbit 2 idiv lwid mod sub neg
cmv
} if
- } bind def
+ } def
% Create the pixel map
% For full symbols we disregard the reference grid at this stage
format (full) eq {/fw 12 def} {/fw 9 def} ifelse
- /size fw layers 4 mul add 2 add def
+ /size fw layers 4 mul add 2 add def
/pixs [size size mul {-1} repeat] def
/mid size 1 sub 2 idiv size mul size 1 sub 2 idiv add def
@@ -18444,7 +23030,7 @@ begin
npixs i size 2 idiv neg j add cmv [size 2 idiv j add i add 1 add 2 mod] putinterval
npixs i neg size 2 idiv neg j add cmv [size 2 idiv j add i add 1 add 2 mod] putinterval
} for
- } for
+ } for
/j 0 def
0 1 npixs length 1 sub {
/i exch def
@@ -18478,21 +23064,21 @@ begin
] {pixs exch {} forall 3 1 roll cmv exch put} forall
% Mode ring
- format (full) eq {
- /modemap [
- [-5 7] [-4 7] [-3 7] [-2 7] [-1 7] [ 1 7] [ 2 7] [ 3 7] [ 4 7] [ 5 7]
- [ 7 5] [ 7 4] [ 7 3] [ 7 2] [ 7 1] [ 7 -1] [ 7 -2] [ 7 -3] [ 7 -4] [ 7 -5]
- [ 5 -7] [ 4 -7] [ 3 -7] [ 2 -7] [ 1 -7] [-1 -7] [-2 -7] [-3 -7] [-4 -7] [-5 -7]
- [-7 -5] [-7 -4] [-7 -3] [-7 -2] [-7 -1] [-7 1] [-7 2] [-7 3] [-7 4] [-7 5]
- ] def
- } {
- /modemap [
- [-3 5] [-2 5] [-1 5] [ 0 5] [ 1 5] [ 2 5] [ 3 5]
- [ 5 3] [ 5 2] [ 5 1] [ 5 0] [ 5 -1] [ 5 -2] [ 5 -3]
- [ 3 -5] [ 2 -5] [ 1 -5] [ 0 -5] [-1 -5] [-2 -5] [-3 -5]
- [-5 -3] [-5 -2] [-5 -1] [-5 0] [-5 1] [-5 2] [-5 3]
- ] def
- } ifelse
+{
+ /modemapfull [
+ [-5 7] [-4 7] [-3 7] [-2 7] [-1 7] [ 1 7] [ 2 7] [ 3 7] [ 4 7] [ 5 7]
+ [ 7 5] [ 7 4] [ 7 3] [ 7 2] [ 7 1] [ 7 -1] [ 7 -2] [ 7 -3] [ 7 -4] [ 7 -5]
+ [ 5 -7] [ 4 -7] [ 3 -7] [ 2 -7] [ 1 -7] [-1 -7] [-2 -7] [-3 -7] [-4 -7] [-5 -7]
+ [-7 -5] [-7 -4] [-7 -3] [-7 -2] [-7 -1] [-7 1] [-7 2] [-7 3] [-7 4] [-7 5]
+ ] def
+ /modemapcompact [
+ [-3 5] [-2 5] [-1 5] [ 0 5] [ 1 5] [ 2 5] [ 3 5]
+ [ 5 3] [ 5 2] [ 5 1] [ 5 0] [ 5 -1] [ 5 -2] [ 5 -3]
+ [ 3 -5] [ 2 -5] [ 1 -5] [ 0 -5] [-1 -5] [-2 -5] [-3 -5]
+ [-5 -3] [-5 -2] [-5 -1] [-5 0] [-5 1] [-5 2] [-5 3]
+ ] def
+} ctxdef
+ /modemap format (full) eq {modemapfull} {modemapcompact} ifelse def
0 1 modemap length 1 sub {
/i exch def
pixs modemap i get {} forall cmv modebits i get 48 sub put
@@ -18510,9 +23096,13 @@ begin
dontdraw not //renmatrix if
+ //unloadctx exec
+
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/azteccode dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -18521,15 +23111,15 @@ end
% --END ENCODER azteccode--
% --BEGIN ENCODER azteccodecompact--
-% --REQUIRES preamble raiseerror renmatrix azteccode--
+% --REQUIRES preamble loadctx unloadctx raiseerror parseinput renmatrix azteccode--
% --DESC: Compact Aztec Code
% --EXAM: 1234
% --EXOP:
% --RNDR: renmatrix
-%%BeginResource: uk.co.terryburton.bwipp azteccodecompact 0.0 2017040400 59559 59303
-%%BeginData: 43 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp azteccodecompact 0.0 2022082100 62569 62441
+%%BeginData: 46 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
dup /azteccode dup /uk.co.terryburton.bwipp findresource put
@@ -18541,6 +23131,7 @@ begin
/options exch def % We are given an option string
/barcode exch def % We are given a barcode string
+ /ctx null def
/dontdraw false def
% Parse the input options
@@ -18562,12 +23153,14 @@ begin
args (opt) options put
args
-
+
dontdraw not //renmatrix if
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/azteccodecompact dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -18576,15 +23169,15 @@ end
% --END ENCODER azteccodecompact--
% --BEGIN ENCODER aztecrune--
-% --REQUIRES preamble raiseerror renmatrix azteccode--
+% --REQUIRES preamble loadctx unloadctx raiseerror parseinput renmatrix azteccode--
% --DESC: Aztec Runes
% --EXAM: 1
% --EXOP:
% --RNDR: renmatrix
-%%BeginResource: uk.co.terryburton.bwipp aztecrune 0.0 2017040400 59528 59279
-%%BeginData: 43 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp aztecrune 0.0 2022082100 62538 62417
+%%BeginData: 46 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
dup /azteccode dup /uk.co.terryburton.bwipp findresource put
@@ -18596,6 +23189,7 @@ begin
/options exch def % We are given an option string
/barcode exch def % We are given a barcode string
+ /ctx null def
/dontdraw false def
% Parse the input options
@@ -18617,12 +23211,14 @@ begin
args (opt) options put
args
-
+
dontdraw not //renmatrix if
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/aztecrune dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -18631,16 +23227,19 @@ end
% --END ENCODER aztecrune--
% --BEGIN ENCODER codeone--
-% --REQUIRES preamble raiseerror renmatrix--
+% --REQUIRES preamble loadctx unloadctx raiseerror parseinput renmatrix--
% --DESC: Code One
% --EXAM: Code One
% --EXOP:
% --RNDR: renmatrix
-%%BeginResource: uk.co.terryburton.bwipp codeone 0.0 2017040400 241249 250071
-%%BeginData: 856 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp codeone 0.0 2022082100 201282 203168
+%%BeginData: 903 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
+dup /loadctx dup /uk.co.terryburton.bwipp findresource put
+dup /unloadctx dup /uk.co.terryburton.bwipp findresource put
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /parseinput dup /uk.co.terryburton.bwipp findresource put
dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
begin
/codeone {
@@ -18650,6 +23249,7 @@ begin
/options exch def
/barcode exch def
+ /ctx null def
/dontdraw false def
/version (unset) def
/parse false def
@@ -18666,52 +23266,169 @@ begin
} if
options {def} forall
- % Parse ordinals of the form ^NNN to ASCII
- parse {
- /msg barcode length string def
- /j 0 def
- barcode
- { % loop
- (^) search {
- dup msg exch j exch putinterval
- length j add 1 add /j exch def
- pop
- dup 0 3 getinterval cvi msg exch j 1 sub exch put
- dup length 3 sub 3 exch getinterval
- } {
- dup msg exch j exch putinterval
- length j add /j exch def
- /barcode msg 0 j getinterval def
- exit
- } ifelse
- } loop
- } if
-
- /barlen barcode length def
+ /codeone //loadctx exec
/stype version 0 1 getinterval (S) eq def
+{
+ /stypevals [
+ (1)
+ (1010)
+ (1100100)
+ (1111101000)
+ (10011100010000)
+ (11000011010100000)
+ (11110100001001000000)
+ (100110001001011010000000)
+ (101111101011110000100000000)
+ (111011100110101100101000000000)
+ (1001010100000010111110010000000000)
+ (1011101001000011101101110100000000000)
+ (1110100011010100101001010001000000000000)
+ (10010001100001001110011100101010000000000000)
+ (10110101111001100010000011110100100000000000000)
+ (11100011010111111010100100110001101000000000000000)
+ (100011100001101111001001101111110000010000000000000000)
+ (101100011010001010111100001011101100010100000000000000000)
+ ] def
+
+ % Basic metrics for the each symbol
+ % ver row col dcol dcws rscw rsbl ro ri rl
+ /stypemetrics [
+ [ (S-10) 8 11 10 4 4 1 99 99 99 ]
+ [ (S-20) 8 21 20 8 8 1 99 99 99 ]
+ [ (S-30) 8 31 30 12 12 1 99 99 99 ]
+ ] def
+
+ % Basic metrics for the each symbol
+ % ver row col dcol dcws rscw rsbl ro ri rl
+ /nonstypemetrics [
+ [ (A) 16 18 16 10 10 1 4 99 6 ]
+ [ (B) 22 22 20 19 16 1 4 99 8 ]
+ [ (C) 28 32 28 44 26 1 4 22 11 ]
+ [ (D) 40 42 36 91 44 1 4 16 16 ]
+ [ (E) 52 54 48 182 70 1 4 22 22 ]
+ [ (F) 70 76 68 370 140 2 4 22 31 ]
+ [ (G) 104 98 88 732 280 4 6 21 47 ]
+ [ (H) 148 134 120 1480 560 8 6 20 69 ]
+ [ (T-16) 16 17 16 10 10 1 99 99 99 ]
+ [ (T-32) 16 33 32 24 16 1 99 99 99 ]
+ [ (T-48) 16 49 48 38 22 1 99 99 99 ]
+ ] def
+
+ % Special characters
+ /fnc1 -1 def /fnc3 -2 def
+ /lC -5 def /lB -6 def /lX -7 def /lT -8 def /lD -9 def /unl -10 def
+ /fnc2 -11 def /fnc4 -12 def /sft1 -13 def /sft2 -14 def /sft3 -15 def /eci -16 def /pad -17 def /fnc1lD -18 def
+ /unlcw 255 def
+
+ /Avals <<
+ 0 1 128 {dup 1 add} for
+ pad 129
+ 0 1 99 { % Double digits
+ dup 10 2 string cvrs (00) 2 string copy dup 2 3 index length sub 4 -1 roll putinterval
+ exch 130 add
+ } for
+ 229 [ lC lB fnc1 fnc2 fnc3 fnc4 fnc1lD ] {exch 1 add dup} forall pop
+ lX 238
+ lT 239
+ % 240-255 lD + 4 bits
+ >> def
+ /Avals <<
+ Avals {[exch]} forall
+ >> def
+
+ /CNvals <<
+ sft1 0
+ sft2 1
+ sft3 2
+ 32 3
+ 48 1 57 {dup 44 sub} for % 0-9
+ 65 1 90 {dup 51 sub} for % A-Z
+ >> def
+ /C1vals << 0 1 31 {dup} for >> def
+ /C2vals <<
+ 33 1 47 {dup 33 sub} for
+ 58 1 64 {dup 43 sub} for
+ 91 1 95 {dup 69 sub} for
+ fnc1 27
+ fnc2 28
+ fnc3 29
+ fnc4 30
+ pad 31
+ >> def
+ /C3vals << 96 1 127 {dup 96 sub} for >> def
+ /Cvals <<
+ CNvals {[exch]} forall
+ C1vals {[exch CNvals sft1 get exch]} forall
+ C2vals {[exch CNvals sft2 get exch]} forall
+ C3vals {[exch CNvals sft3 get exch]} forall
+ >> def
+
+ /TNvals <<
+ sft1 0
+ sft2 1
+ sft3 2
+ 32 3
+ 48 1 57 {dup 44 sub} for % 0-9
+ 97 1 122 {dup 83 sub} for % a-z
+ >> def
+ /T1vals << 0 1 31 {dup} for >> def
+ /T2vals <<
+ 33 1 47 {dup 33 sub} for
+ 58 1 64 {dup 43 sub} for
+ 91 1 95 {dup 69 sub} for
+ fnc1 27
+ fnc2 28
+ fnc3 29
+ fnc4 30
+ pad 31
+ >> def
+ /T3vals <<
+ 96 0
+ 65 1 90 {dup 64 sub} for
+ 123 1 127 {dup 96 sub} for
+ >> def
+ /Tvals <<
+ TNvals {[exch]} forall
+ T1vals {[exch TNvals sft1 get exch]} forall
+ T2vals {[exch TNvals sft2 get exch]} forall
+ T3vals {[exch TNvals sft3 get exch]} forall
+ >> def
+
+ % Extended ASCII mappings
+ 128 1 255 {
+ /i exch def
+ Avals i [ Avals fnc4 get aload pop Avals i 128 sub get aload pop ] put
+ Cvals i [ Cvals fnc4 get aload pop Cvals i 128 sub get aload pop ] put
+ Tvals i [ Tvals fnc4 get aload pop Tvals i 128 sub get aload pop ] put
+ } for
+
+ /Xvals <<
+ 13 0
+ 42 1
+ 62 2
+ 32 3
+ 48 1 57 {dup 44 sub} for
+ 65 1 90 {dup 51 sub} for
+ >> def
+ /Xvals <<
+ Xvals {[exch]} forall
+ >> def
+
+ /Bvals <<
+ 0 1 255 {dup} for
+ >> def
+ /Bvals <<
+ Bvals {[exch]} forall
+ >> def
+
+ /encvals [ Avals Cvals Tvals Xvals -1 Bvals ] def
+
+ /A 0 def /C 1 def /T 2 def /X 3 def /D 4 def /B 5 def
+} ctxdef
+
stype {
- /vals [
- (1)
- (1010)
- (1100100)
- (1111101000)
- (10011100010000)
- (11000011010100000)
- (11110100001001000000)
- (100110001001011010000000)
- (101111101011110000100000000)
- (111011100110101100101000000000)
- (1001010100000010111110010000000000)
- (1011101001000011101101110100000000000)
- (1110100011010100101001010001000000000000)
- (10010001100001001110011100101010000000000000)
- (10110101111001100010000011110100100000000000000)
- (11100011010111111010100100110001101000000000000000)
- (100011100001101111001001101111110000010000000000000000)
- (101100011010001010111100001011101100010100000000000000000)
- ] def
/normalize {
/base exch def
@@ -18731,7 +23448,7 @@ begin
/num [/i true def num {dup 0 eq i and {pop} {/i false def} ifelse} forall] def
num length 0 eq {/num [0] def} if
num
- } bind def
+ } def
/bigadd {
2 copy length exch length
@@ -18742,13 +23459,15 @@ begin
dup a exch offset add 2 copy get b 5 -1 roll get add put
} for
a
- } bind def
+ } def
+
+ /barlen barcode length def
% Convert value plus one to binary
/v [ 1 ] def
0 1 barlen 1 sub {
/i exch def
- [ vals i get {48 sub barcode barlen i sub 1 sub get 48 sub mul} forall ]
+ [ stypevals i get {48 sub barcode barlen i sub 1 sub get 48 sub mul} forall ]
v bigadd /v exch def
} for
/v v 2 normalize def
@@ -18763,57 +23482,54 @@ begin
cws exch i exch put
} for
- % Basic metrics for the each symbol
- % ver row col dcol dcws rscw rsbl ro ri rl
- /metrics [
- [ (S-10) 8 11 10 4 4 1 99 99 99 ]
- [ (S-20) 8 21 20 8 8 1 99 99 99 ]
- [ (S-30) 8 31 30 12 12 1 99 99 99 ]
- ] def
+ /metrics stypemetrics def
} { % Standard and type-T
% Convert input into bytes accounting for FNC characters
- /fnc1 -1 def /fnc3 -2 def
/fncvals <<
+ /parse parse
+ /parsefnc parsefnc
+ /eci true
(FNC1) fnc1
(FNC3) fnc3
>> def
- /msg barlen array def
- /i 0 def /j 0 def {
- i barlen eq {exit} if
- /char barcode i get def
- parsefnc char 94 eq and i barlen 4 sub lt and {
- barcode i 1 add get 94 ne {
- /char fncvals barcode i 1 add 4 getinterval get def
- /i i 4 add def
+ /msg barcode fncvals //parseinput exec def
+ /msglen msg length def
+
+ % Code One stores ECIs in data
+ /eciesc 16#5c def % We choose \ as a typical default
+ /numecis 0 msg { -1000000 le {1 add} if } forall def
+ numecis 0 gt {
+ /msgtmp msg length 2 mul numecis 6 mul add 2 add array def
+ msgtmp 0 pad put
+ msgtmp 1 eciesc put
+ /j 2 def
+ 0 1 msg length 1 sub {
+ msg exch get
+ dup -1000000 le {
+ neg 10 7 string cvrs 1 6 getinterval {} forall 6 array astore
+ msgtmp exch j 1 add exch putinterval
+ msgtmp j eciesc put
+ /j j 7 add def
} {
- /i i 1 add def
+ dup eciesc ne {
+ msgtmp exch j exch put
+ /j j 1 add def
+ } {
+ pop
+ msgtmp j eciesc put
+ msgtmp j 1 add eciesc put
+ /j j 2 add def
+ } ifelse
} ifelse
- } if
- msg j char put
- /i i 1 add def
- /j j 1 add def
- } loop
- /msg msg 0 j getinterval def
- /msglen msg length def
+ } for
+ /msg msgtmp 0 j getinterval def
+ /msglen msg length def
+ } if
+
+ /metrics nonstypemetrics def
- % Basic metrics for the each symbol
- % ver row col dcol dcws rscw rsbl ro ri rl
- /metrics [
- [ (A) 16 18 16 10 10 1 4 99 6 ]
- [ (B) 22 22 20 19 16 1 4 99 8 ]
- [ (C) 28 32 28 44 26 1 4 22 11 ]
- [ (D) 40 42 36 91 44 1 4 16 16 ]
- [ (E) 52 54 48 182 70 1 4 22 22 ]
- [ (F) 70 76 68 370 140 2 4 22 31 ]
- [ (G) 104 98 88 732 280 4 6 21 47 ]
- [ (H) 148 134 120 1480 560 8 6 20 69 ]
- [ (T-16) 16 17 16 10 10 1 99 99 99 ]
- [ (T-32) 16 33 32 24 16 1 99 99 99 ]
- [ (T-48) 16 49 48 38 22 1 99 99 99 ]
- ] def
-
% Select metrics of an appropriate symbol
/fullcws [] def
metrics {
@@ -18836,115 +23552,7 @@ begin
numremcws i numremcws i 1 add get 1 add put
} if
} for
-
- % Special characters
- /lC -5 def /lB -6 def /lX -7 def /lT -8 def /lD -9 def /unl -10 def
- /fnc2 -11 def /fnc4 -12 def /sft1 -13 def /sft2 -14 def /sft3 -15 def /eci -16 def /pad -17 def /fnc1lD -18 def
- /unlcw 255 def
-
- /Avals <<
- 0 1 128 {dup 1 add} for
- pad 129
- 0 1 99 { % Double digits
- dup 10 2 string cvrs (00) 2 string copy dup 2 3 index length sub 4 -1 roll putinterval
- exch 130 add
- } for
- 229 [ lC lB fnc1 fnc2 fnc3 fnc4 fnc1lD ] {exch 1 add dup} forall pop
- lX 238
- lT 239
- % 240-255 lD + 4 bits
- >> def
- /Avals <<
- Avals {[exch]} forall
- >> def
-
- /CNvals <<
- sft1 0
- sft2 1
- sft3 2
- 32 3
- 48 1 57 {dup 44 sub} for % 0-9
- 65 1 90 {dup 51 sub} for % A-Z
- >> def
- /C1vals << 0 1 31 {dup} for >> def
- /C2vals <<
- 33 1 47 {dup 33 sub} for
- 58 1 64 {dup 43 sub} for
- 91 1 95 {dup 69 sub} for
- fnc1 27
- fnc2 28
- fnc3 29
- fnc4 30
- pad 31
- >> def
- /C3vals << 96 1 127 {dup 96 sub} for >> def
- /Cvals <<
- CNvals {[exch]} forall
- C1vals {[exch CNvals sft1 get exch]} forall
- C2vals {[exch CNvals sft2 get exch]} forall
- C3vals {[exch CNvals sft3 get exch]} forall
- >> def
-
- /TNvals <<
- sft1 0
- sft2 1
- sft3 2
- 32 3
- 48 1 57 {dup 44 sub} for % 0-9
- 97 1 122 {dup 83 sub} for % a-z
- >> def
- /T1vals << 0 1 31 {dup} for >> def
- /T2vals <<
- 33 1 47 {dup 33 sub} for
- 58 1 64 {dup 43 sub} for
- 91 1 95 {dup 69 sub} for
- fnc1 27
- fnc2 28
- fnc3 29
- fnc4 30
- pad 31
- >> def
- /T3vals <<
- 96 0
- 65 1 90 {dup 64 sub} for
- 123 1 127 {dup 96 sub} for
- >> def
- /Tvals <<
- TNvals {[exch]} forall
- T1vals {[exch TNvals sft1 get exch]} forall
- T2vals {[exch TNvals sft2 get exch]} forall
- T3vals {[exch TNvals sft3 get exch]} forall
- >> def
-
- % Extended ASCII mappings
- 128 1 255 {
- /i exch def
- Avals i [ Avals fnc4 get aload pop Avals i 128 sub get aload pop ] put
- Cvals i [ Cvals fnc4 get aload pop Cvals i 128 sub get aload pop ] put
- Tvals i [ Tvals fnc4 get aload pop Tvals i 128 sub get aload pop ] put
- } for
-
- /Xvals <<
- 13 0
- 42 1
- 62 2
- 32 3
- 48 1 57 {dup 44 sub} for
- 65 1 90 {dup 51 sub} for
- >> def
- /Xvals <<
- Xvals {[exch]} forall
- >> def
-
- /Bvals <<
- 0 1 255 {dup} for
- >> def
- /Bvals <<
- Bvals {[exch]} forall
- >> def
-
- /encvals [ Avals Cvals Tvals Xvals -1 Bvals ] def
-
+
/numD [ msglen {0} repeat 0 ] def
/nextXterm [ msglen {0} repeat 9999 ] def
/nextNonX [ msglen {0} repeat 9999 ] def
@@ -18967,17 +23575,15 @@ begin
} for
/nextXterm [nextXterm {dup 10000 gt {pop 10000} if} forall] def
/nextNonX [nextNonX {dup 10000 gt {pop 10000} if} forall] def
-
- /isD {char 48 ge char 57 le and} bind def
- /isC {CNvals char known} bind def
- /isT {TNvals char known} bind def
- /isX {Xvals char known} bind def
- /isEA {char 127 gt} bind def
- /isFN {char 0 lt} bind def
- /XtermFirst {dup nextXterm exch get exch nextNonX exch get lt} bind def
-
- /A 0 def /C 1 def /T 2 def /X 3 def /D 4 def /B 5 def
-
+
+ /isD {char 48 ge char 57 le and} def
+ /isC {CNvals char known} def
+ /isT {TNvals char known} def
+ /isX {Xvals char known} def
+ /isEA {char 127 gt} def
+ /isFN {char 0 lt} def
+ /XtermFirst {dup nextXterm exch get exch nextNonX exch get lt} def
+
/lookup {
/ac 1 def /cc 2 def /tc 2 def /xc 2 def /bc 3 def
mode A eq {/ac 0 def /cc 1 def /tc 1 def /xc 1 def /bc 2 def} if
@@ -19000,32 +23606,32 @@ begin
/tc tc isT {2 3 div add} {isEA { 8 3 div add } { 4 3 div add } ifelse} ifelse def
/xc xc isX {2 3 div add} {isEA {13 3 div add } {10 3 div add } ifelse} ifelse def
/bc bc isFN {3 add} {1 add} ifelse def
- k 3 ge {
+ k 3 ge { % Checking after at least 4 characters (cf. Data Matrix), not 3 as in spec Step Q
true [ac cc tc xc ] {bc 1 add exch ceiling le and} forall {B exit} if
true [ cc tc xc bc] {ac 1 add exch ceiling le and} forall {A exit} if
- true [ac cc xc bc] {tc 1 add exch ceiling le and} forall {T exit} if
- true [ac tc ] {cc 1 add exch ceiling le and} forall {
+ true [ac cc xc bc] {tc ceiling 1 add exch ceiling le and} forall {T exit} if
+ true [ac tc ] {cc ceiling 1 add exch ceiling le and} forall {
cc ceiling xc ceiling lt {C exit} if
cc xc eq {i k add 1 add XtermFirst {X exit} {C exit} ifelse} if
} if
- true [ac cc tc bc] {xc 1 add exch lt and} forall {X exit} if
+ true [ac cc tc bc] {xc ceiling 1 add exch ceiling le and} forall {X exit} if
} if
/k k 1 add def
} loop
} repeat
- } bind def
-
+ } def
+
/addtocws {
dup cws exch j exch putinterval
/j exch length j add def
- } bind def
-
+ } def
+
/tobin {
string dup length 1 sub 0 exch 1 exch {1 index exch 48 put} for
dup 3 -1 roll 2 2 index length string cvrs dup length 2 index length exch sub exch putinterval
[ exch {48 sub} forall ]
- } bind def
-
+ } def
+
/encA {
1 { % Common exit
numD i get 21 ge {
@@ -19069,8 +23675,8 @@ begin
/i i 1 add def
exit
} repeat
- } bind def
-
+ } def
+
/CTXvalstocws {
/in exch def
mark
@@ -19079,33 +23685,52 @@ begin
dup 256 idiv exch 256 mod
} for
counttomark array astore exch pop
- } bind def
-
+ } def
+
/encCTX {
/p 0 def
/ctxvals 2220 array def
-
+
% Lookup the values for each character
{
i msglen eq {exit} if
- encvals mode get msg i get known not {exit} if
p 3 mod 0 eq {
numD i get 12 ge {
+ ctxvals 0 p getinterval CTXvalstocws addtocws
[unlcw] addtocws
/mode A def
exit
} if
numD i get dup 8 ge exch i add msglen eq and {
- [unlcw] addtocws
- /mode A def
- exit
- } if
- lookup mode ne {
ctxvals 0 p getinterval CTXvalstocws addtocws
[unlcw] addtocws
/mode A def
exit
} if
+ mode X eq { % Steps E1c, E2
+ Xvals msg i get known not {
+ ctxvals 0 p getinterval CTXvalstocws addtocws
+ % Unlatch to ASCII unless one codeword left and single ASCII to encode
+ numremcws j get 1 ne msg i get 127 gt or {
+ [unlcw] addtocws
+ } if
+ /mode A def
+ exit
+ } if
+ i 1 add msglen lt {
+ Xvals msg i 1 add get known not {exit} if
+ i 2 add msglen lt {
+ Xvals msg i 2 add get known not {exit} if
+ } if
+ } if
+ } {
+ lookup mode ne {
+ ctxvals 0 p getinterval CTXvalstocws addtocws
+ [unlcw] addtocws
+ /mode A def
+ exit
+ } if
+ } ifelse
msglen i sub 3 le { % Check end of data conditions
/remcws numremcws j p 3 idiv 2 mul add get def
/remvals [
@@ -19162,7 +23787,7 @@ begin
/p exch length p add def
/i i 1 add def
} loop
-
+
% Backtrack to a boundary and return to ASCII
mode A ne {
{
@@ -19186,11 +23811,11 @@ begin
} ifelse
} if
} if
-
- } bind def
-
+
+ } def
+
/encD {
-
+
{ % loop
numD i get 3 lt {
@@ -19199,13 +23824,19 @@ begin
/remcws numremcws j Dbits length 8 idiv add get def
% Final codeword with no data
- numremcws j Dbits length 8 idiv add 1 sub get 1 sub 0 eq
- i msglen eq and {exit} if
-
- % Final digit into final codeword as ASCII
+ numremcws j Dbits length 8 idiv add 1 sub get 1 sub 0 eq Drem 0 eq and % No remaining codewords and no bits
+ remcws 1 eq Drem 0 ne and or % Or 1 remaining codeword and some bits
+ i msglen eq and {
+ Drem 4 eq Drem 6 eq or { /Dbits [ Dbits aload pop 1 1 1 1 ] def } if
+ Drem 2 eq Drem 6 eq or { /Dbits [ Dbits aload pop 0 1 ] def } if
+ exit
+ } if
+
+ % Final digit or double-digit into final codeword as ASCII
i msglen 1 sub eq numD i get 1 eq and
+ i msglen 2 sub eq numD i get 2 eq and or
remcws 1 eq and Drem 0 eq and {exit} if
-
+
% Latch to ASCII unless 4 or 6 bits remain in final codeword
i msglen 1 sub eq numD i get 1 eq and
remcws 1 eq and Drem 4 eq Drem 6 eq or and not {
@@ -19229,9 +23860,9 @@ begin
} if
exit
-
+
} if
-
+
% Three digit value plus one to ten bits
/Dbits [
Dbits aload pop
@@ -19239,7 +23870,7 @@ begin
1 add 10 tobin aload pop
] def
/i i 3 add def
-
+
} loop
mark
@@ -19249,8 +23880,8 @@ begin
counttomark array astore exch pop addtocws
/mode A def
- } bind def
-
+ } def
+
/encB {
/p 0 def /bvals 1480 array def {
i msglen eq {exit} if
@@ -19271,7 +23902,7 @@ begin
] def
bvals addtocws
/mode A def
- } bind def
+ } def
% Derive the codewords
/cws 1480 array def
@@ -19280,7 +23911,7 @@ begin
[ /encA /encCTX /encCTX /encCTX /encD /encB ] mode get load exec
} loop
/cws cws 0 j getinterval def
-
+
} ifelse
% Select metrics of an appropriate symbol
@@ -19292,7 +23923,7 @@ begin
/cols m 2 get def % Columns in symbol
/dcol m 3 get def % Data columns in symbol
/dcws m 4 get def % Data codewords in symbol
- /rscw m 5 get def % Error correction codewords
+ /rscw m 5 get def % Error correction codewords
/rsbl m 6 get def % Error correction blocks
/riso m 7 get def % Riser offset
/risi m 8 get def % Riser interval
@@ -19313,16 +23944,18 @@ begin
/cws [ dcws cws length sub {0} repeat cws aload pop ] def
} ifelse
+ options /debugcws known { /bwipp.debugcws cws //raiseerror exec } if
+
% De-interleave the codewords into blocks
/cwbs rsbl array def % Array of data codeword blocks
/ecbs rsbl array def % Array of error correction blocks
0 1 rsbl 1 sub {
/i exch def
- /cwb dcpb array def
+ /cwb dcpb array def
0 1 dcpb 1 sub {
/j exch def
cwb j cws j rsbl mul i add get put
- } for
+ } for
cwbs i cwb put
} for
@@ -19334,22 +23967,22 @@ begin
/rslog gf array def
1 1 gf-1 {dup rsalog exch get exch rslog 3 1 roll put} for
/rsprod {
- 2 copy 0 ne exch 0 ne and {
+ 2 copy 0 ne exch 0 ne and {
rslog exch get exch rslog exch get add gf-1 mod rsalog exch get
} {
pop pop 0
} ifelse
- } bind def
+ } def
% Generate the coefficients for the Reed-Solomon algorithm
/coeffs [ 1 ecpb {0} repeat ] def
0 1 ecpb 1 sub {
- /i exch def
+ /i exch def
coeffs i 1 add coeffs i get put
i -1 1 {
/j exch def
coeffs j coeffs j 1 sub get coeffs j get rsalog i get rsprod xor put
- } for
+ } for
coeffs 0 coeffs 0 get rsalog i get rsprod put
} for
/coeffs coeffs 0 coeffs length 1 sub getinterval def
@@ -19403,21 +24036,22 @@ begin
} for
% Create bitmap and add finder patterns
- /mmv {cols mul add} bind def
+ /mmv {cols mul add} def
/pixs [ rows cols mul {-1} repeat ] def
% Centre pattern
/artifact [
- {cols {0} repeat} bind
- {cols {1} repeat} bind
- {0 cols 2 sub {1} repeat 0} bind
- {0 1 cols 4 sub {0} repeat 1 0} bind
- {cols 1 sub 2 idiv {-1} repeat 1 cols 1 sub 2 idiv {-1} repeat} bind
- {cols 1 sub 2 idiv {-1} repeat 0 cols 1 sub 2 idiv {-1} repeat} bind
- {1 cols 2 sub {0} repeat 1} bind
- {1 0 cols 4 sub {1} repeat 0 1} bind
+ {cols {0} repeat} bind
+ {cols {1} repeat} bind
+ {0 cols 2 sub {1} repeat 0} bind
+ {0 1 cols 4 sub {0} repeat 1 0} bind
+ {cols 1 sub 2 idiv {-1} repeat 1 cols 1 sub 2 idiv {-1} repeat} bind
+ {cols 1 sub 2 idiv {-1} repeat 0 cols 1 sub 2 idiv {-1} repeat} bind
+ {1 cols 2 sub {0} repeat 1} bind
+ {1 0 cols 4 sub {1} repeat 0 1} bind
] def
- /cpat <<
+{
+ /cpatmap <<
/A (121343)
/B (12134343)
/C (12121343)
@@ -19428,8 +24062,10 @@ begin
/H (121212134343)
/S (56661278)
/T (5666666666127878)
- >> vers 0 1 getinterval get def
- pixs 0 rows cpat length sub 2 idiv mmv
+ >> def
+} ctxdef
+ /cpat cpatmap vers 0 1 getinterval get def
+ pixs 0 rows cpat length sub 2 idiv mmv
[ cpat {artifact exch 49 sub get exec} forall ] putinterval
% Risers
@@ -19441,14 +24077,15 @@ begin
pixs j i mmv
3 -1 roll putinterval
i risl 1 sub ne {
- pixs cols j sub 2 sub rows i sub 1 sub mmv
+ pixs cols j sub 2 sub rows i sub 1 sub mmv
3 -1 roll putinterval
} {pop} ifelse
} for
} for
% Black dots
- <<
+{
+ /blackdotmap <<
/A [ [12 5] ]
/B [ [16 7] ]
/C [ [26 12] ]
@@ -19463,7 +24100,9 @@ begin
/T-16 [ [8 10] ]
/T-32 [ [16 10] [16 12] ]
/T-48 [ [24 10] [24 12] [24 14] ]
- >> vers get {pixs exch aload pop mmv 1 put} forall
+ >> def
+} ctxdef
+ blackdotmap vers get {pixs exch aload pop mmv 1 put} forall
% Place the modules onto a pixel map between alignment patterns
/j 0 def
@@ -19488,9 +24127,13 @@ begin
dontdraw not //renmatrix if
+ //unloadctx exec
+
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/codeone dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -19499,16 +24142,19 @@ end
% --END ENCODER codeone--
% --BEGIN ENCODER hanxin--
-% --REQUIRES preamble raiseerror renmatrix--
+% --REQUIRES preamble loadctx unloadctx raiseerror parseinput renmatrix--
% --DESC: Han Xin Code
% --EXAM: This is Han Xin
% --EXOP:
% --RNDR: renmatrix
-%%BeginResource: uk.co.terryburton.bwipp hanxin 0.0 2017040400 371193 376561
-%%BeginData: 886 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp hanxin 0.0 2022082100 304477 334267
+%%BeginData: 863 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
+dup /loadctx dup /uk.co.terryburton.bwipp findresource put
+dup /unloadctx dup /uk.co.terryburton.bwipp findresource put
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /parseinput dup /uk.co.terryburton.bwipp findresource put
dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
begin
/hanxin {
@@ -19518,6 +24164,7 @@ begin
/options exch def
/barcode exch def
+ /ctx null def
/dontdraw false def
/version (unset) def % 1-84
/eclevel (unset) def % L1, L2, L3 or L4
@@ -19538,50 +24185,15 @@ begin
/mask mask cvi def
- % Parse ordinals of the form ^NNN to ASCII
- parse {
- /msg barcode length string def
- /j 0 def
- barcode
- { % loop
- (^) search {
- dup msg exch j exch putinterval
- length j add 1 add /j exch def
- pop
- dup 0 3 getinterval cvi msg exch j 1 sub exch put
- dup length 3 sub 3 exch getinterval
- } {
- dup msg exch j exch putinterval
- length j add /j exch def
- /barcode msg 0 j getinterval def
- exit
- } ifelse
- } loop
- } if
+ /hanxin //loadctx exec
- /barlen barcode length def
-
- % Convert input into bytes accounting for FNC characters
+ % Parse the input
/fncvals <<
+ /parse parse
+ /parsefnc parsefnc
% No FNC characters defined
>> def
- /msg barlen array def
- /i 0 def /j 0 def {
- i barlen eq {exit} if
- /char barcode i get def
- parsefnc char 94 eq and i barlen 4 sub lt and {
- barcode i 1 add get 94 ne {
- /char fncvals barcode i 1 add 4 getinterval get def
- /i i 4 add def
- } {
- /i i 1 add def
- } ifelse
- } if
- msg j char put
- /i i 1 add def
- /j j 1 add def
- } loop
- /msg msg 0 j getinterval def
+ /msg barcode fncvals //parseinput exec def
/msglen msg length def
% Default error correction level
@@ -19591,7 +24203,7 @@ begin
string dup length 1 sub 0 exch 1 exch {1 index exch 48 put} for
dup 3 -1 roll 2 2 index length string cvrs
dup length 2 index length exch sub exch putinterval
- } bind def
+ } def
% Encode the data using byte mode encoding
/bits 4 13 add msglen 8 mul add string def
@@ -19603,6 +24215,7 @@ begin
} for
% Lookup the most appropriate symbol specification
+{
/metrics [
% vers size align modules error correction blocks
[ (1) 23 -1 0 205 [ 1 21 4 ] [ 0 -1 -1 ] [ 0 -1 -1 ]
@@ -19942,6 +24555,7 @@ begin
[ 2 26 26 ] [ 62 33 28 ] [ 0 -1 -1 ]
[ 79 18 28 ] [ 4 33 30 ] [ 0 -1 -1 ] ]
] def
+} ctxdef
/eclval eclevel 1 get 49 sub def
0 1 83 {
@@ -19964,9 +24578,9 @@ begin
bits length dmod gt {/okay false def} if % Bitstream must fit into data modules
okay {exit} if
} for
-
+
okay not {
- /bwipp.hanxinNoValidSymbol (No valid symbol available) //raiseerror exec
+ /bwipp.hanxinNoValidSymbol (Maximum length exceeded or invalid content) //raiseerror exec
} if
/version vers def
@@ -20012,7 +24626,7 @@ begin
} {
pop pop 0
} ifelse
- } bind def
+ } def
% Generate the coefficients
/coeffs [ 1 rsnc {0} repeat ] def
@@ -20040,7 +24654,7 @@ begin
% Return all but the last codeword
rscws 0 rscws length 1 sub getinterval
- } bind def
+ } def
% Divide codewords into two groups of blocks and calculate the error correction codewords
/dcwsb e1nb e2nb add e3nb add array def
@@ -20080,7 +24694,7 @@ begin
13 ncws 1 sub { dup ncws lt {cws exch get} {pop} ifelse } for
} for
] def
-
+
% Extend codewords by one if there are remainder bits
rbit 0 gt {
/pad cws length 1 add array def
@@ -20091,15 +24705,15 @@ begin
% Create the bitmap
/pixs [ size size mul {-1} repeat ] def
- /qmv {size mul add} bind def
+ /qmv {size mul add} def
% Alignment patterns
alnn 0 ne {
- /trmv {size mul size add 1 sub exch sub} bind def
+ /trmv {size mul size add 1 sub exch sub} def
/aplot {
3 1 roll 3 copy exch trmv pixs exch 3 -1 roll put
trmv pixs exch 3 -1 roll put
- } bind def
+ } def
/i 0 def /stag 0 def {
i size ge {exit} if
0 1 size 1 sub {
@@ -20153,6 +24767,7 @@ begin
} if
% Finder patterns
+{
/fpat [
[ 1 1 1 1 1 1 1 0 ]
[ 1 0 0 0 0 0 0 0 ]
@@ -20173,6 +24788,7 @@ begin
[ 1 1 1 1 1 1 1 0 ]
[ 0 0 0 0 0 0 0 0 ]
] def
+} ctxdef
0 1 fpat length 1 sub {
/y exch def
0 1 fpat 0 get length 1 sub {
@@ -20292,8 +24908,8 @@ begin
} if
} for
scr1 scr3
- } bind def
-
+ } def
+
% Evaluation algorithm
/evalfull {
/sym exch def
@@ -20330,8 +24946,8 @@ begin
} for
n1 n3 add
- } bind def
-
+ } def
+
% Evaluate the masked symbols to find the most suitable
/bestscore 999999999 def
0 1 masks length 1 sub {
@@ -20386,9 +25002,13 @@ begin
dontdraw not //renmatrix if
+ //unloadctx exec
+
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/hanxin dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -20396,34 +25016,2638 @@ end
%%EndResource
% --END ENCODER hanxin--
+% --BEGIN ENCODER dotcode--
+% --REQUIRES preamble loadctx unloadctx raiseerror parseinput renmatrix--
+% --DESC: DotCode
+% --EXAM: This is DotCode
+% --EXOP: inkspread=0.16
+% --RNDR: renmatrix
+%%BeginResource: uk.co.terryburton.bwipp dotcode 0.0 2022082100 238866 247484
+%%BeginData: 1067 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+10 dict
+dup /loadctx dup /uk.co.terryburton.bwipp findresource put
+dup /unloadctx dup /uk.co.terryburton.bwipp findresource put
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /parseinput dup /uk.co.terryburton.bwipp findresource put
+dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
+begin
+/dotcode {
+
+ 20 dict begin
+
+ /options exch def
+ /barcode exch def
+
+ /ctx null def
+ /dontdraw false def
+ /rows -1 def
+ /columns -1 def
+ /ratio -1 def
+ /parse false def
+ /parsefnc false def
+ /raw false def
+ /fast false def
+ /mask -1 def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ /rows rows cvi def
+ /columns columns cvi def
+ /ratio ratio cvr def
+ /mask mask cvi def
+
+ /dotcode //loadctx exec
+
+ % Set the ratio to 3:2 if no size is specified
+ ratio -1 eq rows -1 eq and columns -1 eq and {
+ /ratio 3 2 div def
+ } if
+
+ % Convert input into bytes accounting for FNC characters
+{
+ /laa -1 def /lab -2 def /lac -3 def /bin -4 def
+ /sfa -5 def /sfb -6 def /sb2 -7 def /sb3 -8 def
+ /sb4 -9 def /sb5 -10 def /sb6 -11 def /sfc -12 def
+ /sc2 -13 def /sc3 -14 def /sc4 -15 def /sc5 -16 def
+ /sc6 -17 def /sc7 -18 def /bsa -19 def /bsb -20 def
+ /tma -21 def /tmb -22 def /tmc -23 def /tms -24 def
+ /fn1 -25 def /fn2 -26 def /fn3 -27 def /crl -28 def
+ /aim -29 def /m05 -30 def /m06 -31 def /m12 -32 def
+ /mac -33 def
+} ctxdef
+
+ % Parse the input
+ /fncvals <<
+ /parse parse
+ /parsefnc parsefnc
+ /eci true
+ (FNC1) fn1
+ % (FNC2) fn2 % Use ^ECInnnnnn for ECI; Structured append not supported
+ (FNC3) fn3
+ >> def
+ /msg barcode fncvals //parseinput exec def
+ /msglen msg length def
+
+ % Special FNC2 semantics: Expand ECI characters into ^FNC2nnnnnn
+ /numecis 0 msg { -1000000 le {1 add} if } forall def
+ /msgtmp msg length numecis 6 mul add array def
+ /j 0 def
+ 0 1 msg length 1 sub {
+ msg exch get dup -1000000 le {
+ neg 10 7 string cvrs 1 6 getinterval {} forall 6 array astore
+ msgtmp exch j 1 add exch putinterval
+ msgtmp j fn2 put
+ /j j 7 add def
+ } {
+ msgtmp exch j exch put
+ /j j 1 add def
+ } ifelse
+ } for
+ /msg msgtmp def
+ /msglen msg length def
+
+ % Character maps for each state
+{
+ /charmaps [
+ % A B C A B C A B C
+ [ 32 32 (00) ] [ (!) (!) (01) ] [ (") (") (02) ] % 0-2
+ [ (#) (#) (03) ] [ ($) ($) (04) ] [ (%) (%) (05) ] % 3-5
+ [ (&) (&) (06) ] [ (') (') (07) ] [ 40 40 (08) ] % 6-8
+ [ 41 41 (09) ] [ (*) (*) (10) ] [ (+) (+) (11) ] % 9-11
+ [ (,) (,) (12) ] [ (-) (-) (13) ] [ (.) (.) (14) ] % 12-14
+ [ (/) (/) (15) ] [ (0) (0) (16) ] [ (1) (1) (17) ] % 15-17
+ [ (2) (2) (18) ] [ (3) (3) (19) ] [ (4) (4) (20) ] % 18-20
+ [ (5) (5) (21) ] [ (6) (6) (22) ] [ (7) (7) (23) ] % 21-23
+ [ (8) (8) (24) ] [ (9) (9) (25) ] [ (:) (:) (26) ] % 24-26
+ [ (;) (;) (27) ] [ (<) (<) (28) ] [ (=) (=) (29) ] % 27-29
+ [ (>) (>) (30) ] [ (?) (?) (31) ] [ (@) (@) (32) ] % 30-32
+ [ (A) (A) (33) ] [ (B) (B) (34) ] [ (C) (C) (35) ] % 33-35
+ [ (D) (D) (36) ] [ (E) (E) (37) ] [ (F) (F) (38) ] % 36-38
+ [ (G) (G) (39) ] [ (H) (H) (40) ] [ (I) (I) (41) ] % 39-41
+ [ (J) (J) (42) ] [ (K) (K) (43) ] [ (L) (L) (44) ] % 42-44
+ [ (M) (M) (45) ] [ (N) (N) (46) ] [ (O) (O) (47) ] % 45-47
+ [ (P) (P) (48) ] [ (Q) (Q) (49) ] [ (R) (R) (50) ] % 48-50
+ [ (S) (S) (51) ] [ (T) (T) (52) ] [ (U) (U) (53) ] % 51-53
+ [ (V) (V) (54) ] [ (W) (W) (55) ] [ (X) (X) (56) ] % 54-56
+ [ (Y) (Y) (57) ] [ (Z) (Z) (58) ] [ ([) ([) (59) ] % 57-59
+ [ 92 92 (60) ] [ (]) (]) (61) ] [ (^) (^) (62) ] % 60-62
+ [ (_) (_) (63) ] [ 0 (`) (64) ] [ 1 (a) (65) ] % 63-65
+ [ 2 (b) (66) ] [ 3 (c) (67) ] [ 4 (d) (68) ] % 66-68
+ [ 5 (e) (69) ] [ 6 (f) (70) ] [ 7 (g) (71) ] % 69-71
+ [ 8 (h) (72) ] [ 9 (i) (73) ] [ 10 (j) (74) ] % 72-74
+ [ 11 (k) (75) ] [ 12 (l) (76) ] [ 13 (m) (77) ] % 75-77
+ [ 14 (n) (78) ] [ 15 (o) (79) ] [ 16 (p) (80) ] % 78-80
+ [ 17 (q) (81) ] [ 18 (r) (82) ] [ 19 (s) (83) ] % 81-83
+ [ 20 (t) (84) ] [ 21 (u) (85) ] [ 22 (v) (86) ] % 84-86
+ [ 23 (w) (87) ] [ 24 (x) (88) ] [ 25 (y) (89) ] % 87-89
+ [ 26 (z) (90) ] [ 27 ({) (91) ] [ 28 (|) (92) ] % 90-92
+ [ 29 (}) (93) ] [ 30 (~) (94) ] [ 31 127 (95) ] % 93-95
+ [ sfb crl (96) ] [ sb2 9 (97) ] [ sb3 28 (98) ] % 96-98
+ [ sb4 29 (99) ] [ sb5 30 aim ] [ sb6 sfa laa ] % 99-101
+ [ lab laa sfb ] [ sc2 sc2 sb2 ] [ sc3 sc3 sb3 ] % 102-104
+ [ sc4 sc4 sb4 ] [ lac lac lab ] [ fn1 fn1 fn1 ] % 105-107
+ [ fn2 fn2 fn2 ] [ fn3 fn3 fn3 ] [ bsa bsa bsa ] % 108-110
+ [ bsb bsb bsb ] [ bin bin bin ] % 111-112
+ ] def
+
+ % Invert charmaps to give character to value maps for each state
+ /charvals [ 113 dict 117 dict 113 dict ] def
+ 0 1 charmaps length 1 sub {
+ /i exch def
+ /encs charmaps i get def
+ 0 1 2 {
+ /j exch def
+ encs j get dup type /stringtype eq {0 get} if % convert string to ASCII if required
+ charvals j get exch i put
+ } for
+ } for
+ /Avals charvals 0 get def
+ /Bvals charvals 1 get def
+ Bvals m05 97 put
+ Bvals m06 98 put
+ Bvals m12 99 put
+ Bvals mac 100 put
+ /Cvals charvals 2 get def
+ /BINvals <<
+ 102 [ sc2 sc3 sc4 sc5 sc6 sc7 tma tmb tmc tms ] {exch 1 add dup} forall pop
+ >> def
+
+ /A 0 def /B 1 def /C 2 def /BIN 3 def
+} ctxdef
+
+ % Pre-compute properties of the input at each point
+ /nDigits [ msglen 1 add {0} repeat ] def
+ /SeventeenTen [ msglen 1 add {false} repeat ] def
+ /ECI [ msglen 1 add {false} repeat ] def
+ /DatumA [ msglen 1 add {false} repeat ] def
+ /DatumB [ msglen 1 add {false} repeat ] def
+ /DatumC [ msglen 1 add {false} repeat ] def
+ /Binary [ msglen 8 add {false} repeat ] def
+ /AheadC [ msglen 1 add {0} repeat ] def
+ /TryC [ msglen 1 add {0} repeat ] def
+ /AheadA [ msglen 1 add {0} repeat ] def
+ /AheadB [ msglen 1 add {0} repeat ] def
+ /UntilEndSeg [ msglen 1 add {0} repeat ] def
+ msglen 1 sub -1 0 {
+ /i exch def
+ /barchar msg i get def
+ barchar 48 ge barchar 57 le and {
+ nDigits i nDigits i 1 add get 1 add put
+ } if
+ Avals barchar known {DatumA i true put} if
+ Bvals barchar known {DatumB i true put} if
+ /CRLF false def
+ barchar 13 eq i msglen 1 sub lt and {
+ msg i 1 add get 10 eq {/CRLF true def} if
+ } if
+ CRLF {DatumB i true put} if
+ nDigits i get 2 ge {DatumC i true put} if
+ barchar 0 lt {DatumC i true put} if % FNCx
+ barchar 128 ge {Binary i true put} if
+ nDigits i get 10 ge { % 17xxxxxx10
+ mark
+ msg i 10 getinterval aload pop
+ 1 { % common exit
+ 48 ne {false exit} if
+ 49 ne {false exit} if
+ pop pop pop pop pop pop
+ 55 ne {false exit} if
+ 49 ne {false exit} if
+ true
+ } repeat
+ SeventeenTen i 3 -1 roll put
+ cleartomark
+ } if
+ nDigits i 1 add get 6 ge msg i get fn2 eq and { % ^FNC2xxxxxx
+ ECI i true put
+ } if
+ barchar 0 lt barchar fn3 ne and { % FNCx, except FNC3
+ AheadC i AheadC i 1 add get 1 add put
+ } {
+ nDigits i get 1 le {
+ AheadC i 0 put
+ } {
+ AheadC i AheadC i 2 add get 1 add put
+ } ifelse
+ } ifelse
+ nDigits i get 0 gt AheadC i get AheadC i 1 add get gt and {
+ TryC i AheadC i get put
+ } if
+ DatumA i get TryC i get 2 lt and barchar fn3 ne and {
+ AheadA i AheadA i 1 add get 1 add put
+ } if
+ DatumB i get TryC i get 2 lt and barchar fn3 ne and {
+ AheadB i AheadB i 1 add CRLF {1 add} if get 1 add put
+ } if
+ barchar fn3 ne {
+ UntilEndSeg i UntilEndSeg i 1 add get 1 add put
+ } if
+ } for
+
+ /addtocws {
+ dup cws exch j exch putinterval
+ /j exch length j add def
+ } def
+
+ % Base 259 to one more in base 103
+ /base259to103 {
+ /in exch def
+ /inlen in length def
+ /in [ 5 inlen sub {0} repeat in aload pop ] def
+ /out 6 array def
+ /msbs [ in 0 2 getinterval aload pop ] def
+ /mscs [
+ msbs aload pop exch 259 mul add
+ 2 {dup 103 mod exch 103 idiv} repeat
+ ] def
+ /lsbs [ in 2 3 getinterval aload pop ] def
+ /lscs [
+ lsbs aload pop exch 259 mul add exch 67081 mul add
+ 3 {dup 103 mod exch 103 idiv} repeat
+ ] def
+ lscs 0 get mscs 0 get 42 mul add
+ out 5 2 index 103 mod put
+ 103 idiv lscs 1 get add mscs 0 get 68 mul add mscs 1 get 42 mul add
+ out 4 2 index 103 mod put
+ 103 idiv lscs 2 get add mscs 0 get 92 mul add mscs 1 get 68 mul add mscs 2 get 42 mul add
+ out 3 2 index 103 mod put
+ 103 idiv lscs 3 get add mscs 0 get 15 mul add mscs 1 get 92 mul add mscs 2 get 68 mul add
+ out 2 2 index 103 mod put
+ 103 idiv mscs 1 get 15 mul add mscs 2 get 92 mul add
+ out 1 2 index 103 mod put
+ 103 idiv mscs 2 get 15 mul add
+ out 0 3 -1 roll 103 mod put
+ out 6 inlen sub 1 sub inlen 1 add getinterval
+ } def
+
+ /finaliseBIN {
+ bpos 0 ne {
+ bvals 0 bpos getinterval base259to103 aload pop
+ /bpos 0 def
+ } if
+ } def
+
+ /addtobin {
+ bvals exch bpos exch put
+ /bpos bpos 1 add def
+ bpos 5 eq { finaliseBIN } if
+ } def
+
+ /ECIabc { % ECI encoding for modes A, B and C
+ msg i 1 add 6 getinterval 0 exch {48 sub add 10 mul} forall 10 idiv
+ dup 40 ge {
+ 40 sub
+ dup 12769 idiv 40 add exch 12769 mod
+ dup 113 idiv exch 113 mod
+ } if
+ } def
+
+ /ECIbin { % ECI encoding for binary mode
+ [
+ msg i 1 add 6 getinterval 0 exch {48 sub add 10 mul} forall 10 idiv
+ dup 65536 ge {
+ 258 exch dup 65536 idiv exch 65536 mod dup 256 idiv exch 256 mod
+ } {
+ dup 256 ge {
+ 257 exch dup 256 idiv exch 256 mod
+ } {
+ 256 exch
+ } ifelse
+ } ifelse
+ ] {
+ addtobin
+ } forall
+ } def
+
+ /encC {
+ 1 { % Common exit
+ i segstart eq { % Structured data macros
+ 1 { % common exit
+ i segend 7 sub gt {0 exit} if
+ msg segstart get 91 ne {0 exit} if % [
+ msg segstart 1 add get 41 ne {0 exit} if % )
+ msg segstart 2 add get 62 ne {0 exit} if % >
+ msg segstart 3 add get 30 ne {0 exit} if % {RS}
+ msg segstart 4 add get dup 48 lt exch 57 gt or {0 exit} if % digit
+ msg segstart 5 add get dup 48 lt exch 57 gt or {0 exit} if % digit
+ msg segend 1 sub get 4 ne {0 exit} if % End: {EOT}
+ msg segstart 4 add get 48 sub 10 mul msg segstart 5 add get 48 sub add
+ dup dup 05 ne exch dup 06 ne exch 12 ne and and {pop mac exit} if
+ msg segstart 6 add get 29 ne {pop 0 exit} if % {GS}
+ msg segend 2 sub get 30 ne {pop 0 exit} if % End: {RS}
+ dup 05 eq {pop m05 exit} if
+ 06 eq { m06 exit} if
+ m12 exit
+ } repeat
+ /inmac exch def
+ inmac 0 ne {
+ [ Cvals lab get ] addtocws
+ /mode B def
+ [ Bvals inmac get ] addtocws
+ inmac mac eq {
+ [ Bvals msg segstart 4 add get get ] addtocws
+ [ Bvals msg segstart 5 add get get ] addtocws
+ /i i 6 add def
+ } {
+ /i i 7 add def
+ } ifelse
+ exit
+ } if
+ } if
+ % Special treatment of FNC1 in First for Dotcode
+ i segstart eq {
+ % Encode an FNC1 if two digits start a segment
+ nDigits i get 2 ge {
+ [ Cvals fn1 get ] addtocws
+ } if
+ % Skip an FNC1 if followed by two digits at start of segment
+ msg i get fn1 eq nDigits i 1 add get 2 ge and {
+ /i i 1 add def
+ } if
+ } if
+ SeventeenTen i get {
+ [ % 17xxxxxx10 macro
+ Cvals aim get
+ msg i 2 add get 48 sub 10 mul msg i 3 add get 48 sub add
+ msg i 4 add get 48 sub 10 mul msg i 5 add get 48 sub add
+ msg i 6 add get 48 sub 10 mul msg i 7 add get 48 sub add
+ ] addtocws
+ /i i 10 add def
+ exit
+ } if
+ DatumC i get {
+ msg i get dup fn1 eq exch dup fn2 eq exch fn3 eq or or { % FNCx
+ [ Cvals msg i get get ] addtocws
+ ECI i get { % FNC2 then 6 digits
+ [ ECIabc ] addtocws
+ /i i 7 add def
+ exit
+ } if
+ msg i get fn3 eq segstart i ne and { % FNC3
+ /i i 1 add def
+ /inmac 0 def
+ /segstart i def
+ /segend i UntilEndSeg i get add def
+ exit
+ } if
+ /i i 1 add def
+ exit
+ } if
+ [ msg i get 48 sub 10 mul msg i 1 add get 48 sub add ] addtocws
+ /i i 2 add def
+ exit
+ } if
+ Binary i get { % Binary
+ nDigits i 1 add get 0 gt {
+ msg i get 160 lt {
+ [ Cvals bsa get Avals msg i get 128 sub get ] addtocws
+ } {
+ [ Cvals bsb get Bvals msg i get 128 sub get ] addtocws
+ } ifelse
+ /i i 1 add def
+ exit
+ } if
+ [ Cvals bin get ] addtocws
+ /mode BIN def
+ exit
+ } if
+ /m AheadA i get def /n AheadB i get def
+ m n gt {
+ [ Cvals laa get ] addtocws
+ /mode A def
+ exit
+ } if
+ i segstart eq {
+ msg i get dup 9 eq exch dup 28 eq exch dup 29 eq exch 30 eq or or or {
+ [ Cvals laa get ] addtocws
+ /mode A def
+ exit
+ } if
+ } if
+ n 4 gt {
+ [ Cvals lab get ] addtocws
+ /mode B def
+ exit
+ } if
+ [ Cvals [ sfb sb2 sb3 sb4 ] n 1 sub get get ] addtocws
+ n {
+ msg i get 13 eq {
+ [ Bvals crl get ] addtocws
+ /i i 2 add def
+ } {
+ [ Bvals msg i get get ] addtocws
+ /i i 1 add def
+ } ifelse
+ } repeat
+ exit
+ } repeat
+ } def % encC
+
+ /encB {
+ 1 { % Common exit
+ /n TryC i get def
+ n 2 ge {
+ n 4 gt {
+ [ Bvals lac get ] addtocws
+ /mode C def
+ exit
+ } if
+ [ Bvals [ sfc sc2 sc3 sc4 ] n 1 sub get get ] addtocws
+ n {
+ msg i get 0 lt {
+ [ Cvals msg i get get ] addtocws
+ /i i 1 add def
+ } {
+ [ msg i get 48 sub 10 mul msg i 1 add get 48 sub add ] addtocws
+ /i i 2 add def
+ } ifelse
+ } repeat
+ exit
+ } if
+ DatumB i get {
+ msg i get dup fn1 eq exch dup fn2 eq exch fn3 eq or or { % FNCx
+ [ Bvals msg i get get ] addtocws
+ ECI i get { % FNC2 then 6 digits
+ [ ECIabc ] addtocws
+ /i i 7 add def
+ exit
+ } if
+ msg i get fn3 eq i segstart ne and { % FNC3
+ /i i 1 add def
+ /mode C def
+ /inmac 0 def
+ /segstart i def
+ /segend i UntilEndSeg i get add def
+ exit
+ } if
+ /i i 1 add def
+ exit
+ } if
+ msg i get 13 eq i msglen 1 sub lt and {
+ msg i 1 add get 10 eq { % CRLF
+ [ Bvals crl get ] addtocws
+ /i i 2 add def
+ exit
+ } if
+ } if
+ [ Bvals msg i get get ] addtocws
+ /i i 1 add def
+ exit
+ } if
+ Binary i get { % Binary
+ DatumB i 1 add get {
+ msg i get 160 lt {
+ [ Bvals bsa get Avals msg i get 128 sub get ] addtocws
+ } {
+ [ Bvals bsb get Bvals msg i get 128 sub get ] addtocws
+ } ifelse
+ /i i 1 add def
+ exit
+ } if
+ [ Bvals bin get ] addtocws
+ /mode BIN def
+ exit
+ } if
+ AheadA i get 1 eq {
+ [ Bvals sfa get Avals msg i get get ] addtocws
+ /i i 1 add def
+ exit
+ } if
+ [ Bvals laa get ] addtocws
+ /mode A def
+ exit
+ } repeat
+ } def
+
+ /encA {
+ 1 { % Common exit
+ /n TryC i get def
+ n 2 ge {
+ n 4 gt {
+ [ Avals lac get ] addtocws
+ /mode C def
+ exit
+ } if
+ [ Avals [ sfc sc2 sc3 sc4 ] n 1 sub get get ] addtocws
+ n {
+ msg i get 0 lt {
+ [ Cvals msg i get get ] addtocws
+ /i i 1 add def
+ } {
+ [ msg i get 48 sub 10 mul msg i 1 add get 48 sub add ] addtocws
+ /i i 2 add def
+ } ifelse
+ } repeat
+ exit
+ } if
+ DatumA i get {
+ msg i get dup fn1 eq exch dup fn2 eq exch fn3 eq or or { % FNCx
+ [ Avals msg i get get ] addtocws
+ ECI i get { % FNC2 then 6 digits
+ [ ECIabc ] addtocws
+ /i i 7 add def
+ exit
+ } if
+ msg i get fn3 eq i segstart ne and { % FNC3
+ /i i 1 add def
+ /mode C def
+ /inmac 0 def
+ /segstart i def
+ /segend i UntilEndSeg i get add def
+ exit
+ } if
+ /i i 1 add def
+ exit
+ } if
+ [ Avals msg i get get ] addtocws
+ /i i 1 add def
+ exit
+ } if
+ Binary i get { % Binary
+ DatumA i 1 add get {
+ msg i get 160 lt {
+ [ Avals bsa get Avals msg i get 128 sub get ] addtocws
+ } {
+ [ Avals bsb get Bvals msg i get 128 sub get ] addtocws
+ } ifelse
+ /i i 1 add def
+ exit
+ } if
+ [ Avals bin get ] addtocws
+ /mode BIN def
+ exit
+ } if
+ /n AheadB i get def
+ n 6 gt {
+ [ Avals lab get ] addtocws
+ /mode B def
+ exit
+ } if
+ [ Avals [ sfb sb2 sb3 sb4 sb5 sb6 ] n 1 sub get get ] addtocws
+ n {
+ msg i get 13 eq {
+ [ Bvals crl get ] addtocws
+ /i i 2 add def
+ } {
+ [ Bvals msg i get get ] addtocws
+ /i i 1 add def
+ } ifelse
+ } repeat
+ exit
+ } repeat
+ } def
+
+ /encBIN {
+ 1 { % Common exit
+ /n TryC i get def
+ n 2 ge {
+ [ finaliseBIN ] addtocws
+ n 7 gt { % Terminate to C
+ [ BINvals tmc get ] addtocws
+ /mode C def
+ exit
+ } if
+ [ BINvals [ sc2 sc3 sc4 sc5 sc6 sc7 ] n 2 sub get get ] addtocws
+ n {
+ msg i get 0 lt {
+ [ Cvals msg i get get ] addtocws
+ /i i 1 add def
+ } {
+ [ msg i get 48 sub 10 mul msg i 1 add get 48 sub add ] addtocws
+ /i i 2 add def
+ } ifelse
+ } repeat
+ exit
+ } if
+ ECI i get Binary i 7 add get and { % ECI then binary
+ [ ECIbin ] addtocws
+ /i i 7 add def
+ i msglen eq { [ finaliseBIN ] addtocws } if
+ exit
+ } if
+ msg i get 0 ge { % Not FNCx
+ Binary i get Binary i 1 add get or
+ Binary i 2 add get or Binary i 3 add get or
+ ECI i 1 add get Binary i 8 add get and or {
+ [ msg i get addtobin ] addtocws
+ /i i 1 add def
+ i msglen eq { [ finaliseBIN ] addtocws } if
+ exit
+ } if
+ } if
+ [ finaliseBIN ] addtocws
+ i msglen 1 sub ne { % Not last character
+ msg i get fn3 eq i segstart ne and { % FNC3
+ [ BINvals tms get ] addtocws
+ /i i 1 add def
+ /mode C def
+ /inmac 0 def
+ /segstart i def
+ /segend i UntilEndSeg i get add def
+ exit
+ } if
+ AheadA i get AheadB i get gt {
+ [ BINvals tma get ] addtocws
+ /mode A def
+ } {
+ [ BINvals tmb get ] addtocws
+ /mode B def
+ } ifelse
+ exit
+ } if
+ exit
+ } repeat
+ } def
+
+ /cws msglen 2 mul 1 add array def
+ /mode C def
+ /bvals 5 array def /bpos 0 def
+ /inmac 0 def /segstart 0 def /segend UntilEndSeg 0 get def
+ /i 0 def /j 0 def {
+ i msglen ge {exit} if
+ inmac 0 ne { % Jump over macro trailers
+ inmac mac ne i segend 2 sub eq and { % {RS}{EOT}
+ /i i 2 add def
+ i msglen ge {exit} if
+ } if
+ inmac mac eq i segend 1 sub eq and { % {EOT}
+ /i i 1 add def
+ i msglen ge {exit} if
+ } if
+ } if
+ [ /encA /encB /encC /encBIN ] mode get load exec
+ } loop
+ /cws cws 0 j getinterval def
+
+ % Determine the symbol size
+ /nd cws length def
+ /minarea nd 3 add nd 2 idiv add 9 mul 2 add 2 mul def
+ ratio -1 ne { % Fixed ratio
+ /hgt minarea ratio div sqrt def
+ /wid minarea ratio mul sqrt def
+ /h hgt cvi def /w wid cvi def
+ h w add 2 mod 1 eq {
+ h w mul minarea lt {/h h 1 add def /w w 1 add def} if
+ } {
+ hgt w mul wid h mul lt {
+ /w w 1 add def
+ h w mul minarea lt {
+ /w w 1 sub def /h h 1 add def
+ h w mul minarea lt {/w w 2 add def} if
+ } if
+ } {
+ /h h 1 add def
+ h w mul minarea lt {
+ /h h 1 sub def /w w 1 add def
+ h w mul minarea lt {/h h 2 add def} if
+ } if
+ } ifelse
+ } ifelse
+ /rows h def /columns w def
+ } {
+ columns -1 eq { % Fixed height
+ /columns minarea rows add 1 sub rows idiv dup rows add 2 mod 0 eq {1 add} if def
+ } if
+ rows -1 eq { % Fixed width
+ /rows minarea columns add 1 sub columns idiv dup columns add 2 mod 0 eq {1 add} if def
+ } if
+ } ifelse
+
+ % Extend the codewords with padding
+ /ndots rows columns mul 2 idiv def
+ {
+ nd 1 add dup 2 idiv 3 add add 9 mul 2 add ndots gt {exit} if
+ /nd nd 1 add def
+ } loop
+ /nc nd 2 idiv 3 add def
+ /nw nd nc add def
+ /rembits ndots nw 9 mul 2 add sub def
+ nd cws length gt {
+ /cws [
+ cws aload pop
+ mode BIN eq {109} {106} ifelse
+ nd cws length sub 1 sub {106} repeat
+ ] def
+ } if
+
+ options /debugcws known { /bwipp.debugcws cws //raiseerror exec } if
+
+ % Create an array containing the character mappings
+{
+ /encs [
+ (101010101) (010101011) (010101101) (010110101) (011010101)
+ (101010110) (101011010) (101101010) (110101010) (010101110)
+ (010110110) (010111010) (011010110) (011011010) (011101010)
+ (100101011) (100101101) (100110101) (101001011) (101001101)
+ (101010011) (101011001) (101100101) (101101001) (110010101)
+ (110100101) (110101001) (001010111) (001011011) (001011101)
+ (001101011) (001101101) (001110101) (010010111) (010011011)
+ (010011101) (010100111) (010110011) (010111001) (011001011)
+ (011001101) (011010011) (011011001) (011100101) (011101001)
+ (100101110) (100110110) (100111010) (101001110) (101011100)
+ (101100110) (101101100) (101110010) (101110100) (110010110)
+ (110011010) (110100110) (110101100) (110110010) (110110100)
+ (111001010) (111010010) (111010100) (001011110) (001101110)
+ (001110110) (001111010) (010011110) (010111100) (011001110)
+ (011011100) (011100110) (011101100) (011110010) (011110100)
+ (100010111) (100011011) (100011101) (100100111) (100110011)
+ (100111001) (101000111) (101100011) (101110001) (110001011)
+ (110001101) (110010011) (110011001) (110100011) (110110001)
+ (111000101) (111001001) (111010001) (000101111) (000110111)
+ (000111011) (000111101) (001001111) (001100111) (001110011)
+ (001111001) (010001111) (011000111) (011100011) (011110001)
+ (100011110) (100111100) (101111000) (110001110) (110011100)
+ (110111000) (111000110) (111001100)
+ ] def
+} ctxdef
+
+ % Final six dots arranged at edges
+ rows 2 mod 0 eq {
+ /sixedges [
+ [ columns 1 sub rows 2 sub ]
+ [ 0 rows 2 sub ]
+ [ columns 2 sub rows 1 sub ]
+ [ 1 rows 1 sub ]
+ [ columns 1 sub 0 ]
+ [ 0 0 ]
+ ] def
+ } {
+ /sixedges [
+ [ columns 2 sub 0 ]
+ [ columns 2 sub rows 1 sub ]
+ [ columns 1 sub 1 ]
+ [ columns 1 sub rows 2 sub ]
+ [ 0 0 ]
+ [ 0 rows 1 sub ]
+ ] def
+ } ifelse
+
+ /dmv {columns mul add} def
+
+ % Construct the template
+ /outline rows columns mul array def
+ 0 1 rows 1 sub {
+ /y exch def
+ 0 1 columns 1 sub {
+ /x exch def
+ outline x y dmv x y add 2 mod 1 sub put
+ } for
+ } for
+ sixedges {
+ outline exch aload pop dmv 1 put
+ } forall
+
+ /clearcol {
+ /x exch def
+ true
+ x 1 and 2 rows 1 sub {
+ x exch dmv sym exch get 1 eq {pop false exit} if
+ } for
+ } def
+
+ /clearrow {
+ /y exch def
+ true
+ y 1 and 2 columns 1 sub {
+ y dmv sym exch get 1 eq {pop false exit} if
+ } for
+ } def
+
+ % Evaluate the symbol
+ /evalsymbol {
+ /sym exch def
+
+ % Identify the worst side
+ /worst 9999999 def
+ [ [ /x 0 ] [ /x 1 ] [ /y 0 ] [ /y 1 ] ] { % Top Bottom Left Right
+ aload pop /fl exch def /dir exch def
+ /sum 0 def /first -1 def /last -1 def
+ 0 1 dir /x eq {columns} {rows} ifelse 1 sub {
+ dir exch def
+ sym
+ dir load
+ dir /x eq {rows} {columns} ifelse 1 sub fl mul
+ dir /y eq {exch} if
+ dmv get 1 eq {
+ first -1 eq {/first dir load def} if
+ /last dir load def
+ /sum sum 1 add def
+ } if
+ } for
+ sum last add first sub
+ dir /x eq {rows} {columns} ifelse mul
+ dup worst lt {/worst exch def} {pop} ifelse
+ } forall
+
+ /pen 0 def
+
+ % Check for groups of blank columns unless data is encoded vertically
+ % in a symbol of sufficient height to overcome up to six consecutive 0s
+ % in two neighbouring 5 of 9 dot patterns
+ rows 2 mod 1 eq rows 12 le or {
+ /sum 0 def /p 0 def
+ 1 1 columns 2 sub {
+ clearcol {
+ /sum sum 1 add def
+ /p sum 1 eq {rows} {p rows mul} ifelse def
+ } {
+ /sum 0 def
+ /pen pen p add def
+ /p 0 def
+ } ifelse
+ } for
+ /pen pen p add def
+ } if
+
+ % Check for groups of blank rows unless data is encoded horizontally
+ % in a symbol of sufficient width to overcome up to six consecutive 0s
+ % in two neighbouring 5 of 9 dot patterns
+ rows 2 mod 0 eq columns 12 le or {
+ /sum 0 def /p 0 def
+ 1 1 rows 2 sub {
+ clearrow {
+ /sum sum 1 add def
+ /p sum 1 eq {columns} {p columns mul} ifelse def
+ } {
+ /sum 0 def
+ /pen pen p add def
+ /p 0 def
+ } ifelse
+ } for
+ /pen pen p add def
+ } if
+
+ % Pad twice on all sides
+ /symp [
+ columns 4 add 2 mul {0} repeat
+ 0 columns sym length 1 sub {
+ 0 exch 0 exch
+ sym exch columns getinterval aload pop
+ 0 0
+ } for
+ columns 4 add 2 mul {0} repeat
+ ] def
+
+ % Count voids and isolated dots
+ /columns columns 4 add def
+ /rows rows 4 add def
+ /sum 0 def
+ 2 1 rows 3 sub {
+ /y exch def
+ y 1 and 2 add 2 columns 3 sub {
+ /x exch def
+ 1 { % Common exit
+ symp x 1 sub y 1 sub dmv get 1 eq {exit} if
+ symp x 1 add y 1 sub dmv get 1 eq {exit} if
+ symp x 1 sub y 1 add dmv get 1 eq {exit} if
+ symp x 1 add y 1 add dmv get 1 eq {exit} if
+ symp x y dmv get 0 eq {/sum sum 1 add def exit} if
+ symp x 2 sub y dmv get 1 eq {exit} if
+ symp x y 2 sub dmv get 1 eq {exit} if
+ symp x 2 add y dmv get 1 eq {exit} if
+ symp x y 2 add dmv get 1 eq {exit} if
+ /sum sum 1 add def
+ } repeat
+ } for
+ } for
+ /columns columns 4 sub def
+ /rows rows 4 sub def
+
+ worst 0 eq { % Fixed penalty to disqualify a symbol with an unlit edge
+ -99999
+ } {
+ worst sum sum mul sub pen sub
+ } ifelse
+
+ } def
+
+ % Reed Solomon antilog table
+ /rsalog [ 1 112 { dup 3 mul 113 mod } repeat ] def
+ /step nw 112 idiv 1 add def
+ /offset {step mul start add} def
+
+ % Evaluate the symbols in the following order:
+ % fast mode: m3 -> m3' -> m2 -> m2' -> m1 -> m1' -> m0 -> m0'
+ % dflt mode: (m0 m1 m2 m3) -> (m0' m1' m2' m3')
+ % -> : Test if we have met the HxW/2 threshold
+ % m' : Symbols with six edge dots forcibly lit
+ % () : Best of
+ /bestscore -99999999 def
+ /masks mask -1 ne {
+ [ mask ]
+ } {
+ fast { [ 2#11 2#10 2#01 2#00 ] } { [ 2#00 2#01 2#10 2#11 ] } ifelse
+ } ifelse def
+ /litmasks 4 array def
+ masks { % For each mask pattern
+
+ /mask exch def
+
+ % Calculate the error correction codewords for each block
+ /rscws [
+ mask
+ [ 0 3 7 17 ] mask get 0 cws {1 index add 113 mod exch 2 index add exch 3 1 roll} forall pop pop
+ nc {0} repeat
+ ] def
+ 0 1 step 1 sub {
+ /start exch def
+ /ND nd 1 add start sub step add 1 sub step idiv def
+ /NW nw 1 add start sub step add 1 sub step idiv def
+ /NC NW ND sub def
+ /coeffs [ 1 NC {0} repeat ] def
+ 1 1 NC {
+ /i exch def
+ NC -1 1 {
+ /j exch def
+ coeffs j coeffs j get 113 add rsalog i get coeffs j 1 sub get mul 113 mod sub 113 mod put
+ } for
+ } for
+ 0 1 ND 1 sub {
+ /t exch rscws exch offset get rscws ND offset get add 113 mod def
+ 0 1 NC 2 sub {
+ /j exch def
+ rscws ND j add offset rscws ND j add 1 add offset get 113 add t coeffs j 1 add get mul 113 mod sub 113 mod put
+ } for
+ rscws ND NC add 1 sub offset 113 t coeffs NC get mul 113 mod sub 113 mod put
+ } for
+ ND 1 NW 1 sub { dup rscws exch offset 113 rscws 5 -1 roll offset get sub 113 mod put } for
+ } for
+
+ % Create the bitstream
+ /bits ndots string def
+ bits 0 [ (00) (01) (10) (11) ] mask get putinterval
+ 1 1 nw {
+ /i exch def
+ bits i 1 sub 9 mul 2 add encs rscws i get get putinterval
+ } for
+ rembits 0 gt {
+ bits nw 9 mul 2 add (11111111111111111) 0 rembits getinterval putinterval
+ } if
+
+ % Walk the symbol placing the bitstream
+ /pixs outline dup length array copy def
+ /posx 0 def
+ /posy rows 2 mod 0 eq {0} {rows 1 sub} ifelse def
+ bits 0 bits length 6 sub getinterval {
+ { % Move to next vacant position
+ pixs posx posy dmv get -1 eq {exit} if
+ rows 2 mod 0 eq {
+ /posy posy 1 add def
+ posy rows eq {
+ /posy 0 def
+ /posx posx 1 add def
+ } if
+ } {
+ /posx posx 1 add def
+ posx columns eq {
+ /posx 0 def
+ /posy posy 1 sub def
+ } if
+ } ifelse
+ } loop
+ pixs posx posy dmv 3 -1 roll 48 sub put
+ } forall
+ 0 1 5 { % Last six edge dots
+ /i exch def
+ pixs sixedges i get aload pop dmv
+ bits bits length 6 sub i add get 48 sub put
+ } for
+
+ % Evaluate the symbol to find the most suitable mask
+ /score pixs evalsymbol def
+ score bestscore gt {
+ /bestsym pixs def
+ /bestscore score def
+ fast bestscore rows columns mul 2 idiv gt and {exit} if
+ } if
+
+ % Make a copy with lit edges for possible later evaluation
+ /litmask pixs dup length array copy def
+ 0 1 5 { % Light last six edge dots
+ /i exch def
+ litmask sixedges i get aload pop dmv
+ 1 put
+ } for
+ litmasks mask litmask put
+
+ % In fast mode immediately score the lit symbol
+ fast {
+ /score litmask evalsymbol def
+ score bestscore gt {
+ /bestsym litmask def
+ /bestscore score def
+ bestscore rows columns mul 2 idiv gt {exit} if
+ } if
+ } if
+
+ } forall
+ /pixs bestsym def
+
+ % For default mode, if best mask fails threshold then recalculate with lit corners and pick best
+ fast not bestscore rows columns mul 2 idiv le and {
+ /bestscore -99999999 def
+ masks {
+ litmasks exch get /litmask exch def
+ /score litmask evalsymbol def
+ score bestscore gt {
+ /bestsym litmask def
+ /bestscore score def
+ } if
+ } forall
+ /pixs bestsym def
+ } if
+
+ % Return the arguments
+ <<
+ /ren //renmatrix
+ /dotty true
+ /pixs pixs
+ /pixx columns
+ /pixy rows
+ /height rows 2 mul 72 div
+ /width columns 2 mul 72 div
+ /opt options
+ >>
+
+ dontdraw not //renmatrix if
+
+ //unloadctx exec
+
+ end
+
+}
+[/barcode] {null def} forall
+bind def
+/dotcode dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
+%%EndData
+%%EndResource
+% --END ENCODER dotcode--
+
+% --BEGIN ENCODER ultracode--
+% --REQUIRES preamble loadctx unloadctx raiseerror parseinput renmatrix--
+% --DESC: Ultracode
+% --EXAM: Awesome colours!
+% --EXOP: eclevel=EC2
+% --RNDR: renmatrix
+%%BeginResource: uk.co.terryburton.bwipp ultracode 0.0 2022082100 96235 99035
+%%BeginData: 361 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+10 dict
+dup /loadctx dup /uk.co.terryburton.bwipp findresource put
+dup /unloadctx dup /uk.co.terryburton.bwipp findresource put
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /parseinput dup /uk.co.terryburton.bwipp findresource put
+dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
+begin
+/ultracode {
+
+ 20 dict begin
+
+ /options exch def
+ /barcode exch def
+
+ /ctx null def
+ /dontdraw false def
+ /eclevel (EC2) def % EC0-EC5
+ /encoding (auto) def
+ /parse false def
+ /parsefnc false def
+ /start 257 def % 8-bit ISO-8859-1, until we write high-level encoders
+ /link1 0 def
+ /raw false def
+ /rev 1 def % Ultracode specification revision
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ /start start cvi def
+ /link1 link1 cvi def
+ /rev rev cvi def
+
+ rev dup 1 ne exch 2 ne and {
+ /bwipp.ultracodeInvalidRevision (Valid revisions are 1 and 2) //raiseerror exec
+ } if
+
+ /ultracode //loadctx exec
+
+ raw {/encoding (raw) def} if
+
+ encoding (raw) eq {
+ /dcws barcode length array def
+ /i 0 def /j 0 def
+ { % loop
+ i barcode length eq {exit} if
+ /cw barcode i 1 add 3 getinterval cvi def
+ dcws j cw put
+ /i i 4 add def
+ /j j 1 add def
+ } loop
+ /dcws dcws 0 j getinterval def
+ } if
+
+ % Basic high level encoding
+ encoding (auto) eq {
+
+ % Parse the input
+ /fn1 -1 def /fn3 -2 def
+ /fncvals <<
+ /parse parse
+ /parsefnc parsefnc
+ (FNC1) fn1
+ (FNC3) fn3
+ >> def
+ /msg barcode fncvals //parseinput exec def
+ /msglen msg length def
+
+ /scr [] def % Empty symbol control region
+ /scp [] def % Empty start sequence parameters
+ /dcws [
+ scr aload pop
+ scp aload pop
+ msg {
+ dup fn1 eq {pop 268} if
+ dup fn3 eq {pop 269} if
+ } forall
+ ] def
+
+ } if
+
+ options /debugcws known { /bwipp.debugcws dcws //raiseerror exec } if
+
+ /mcc dcws length 3 add def % Message codewords: start mcc acc [dcws ...]
+
+ /eclval eclevel 2 get 48 sub def
+ eclval 0 ne {
+ /qcc [0 1 2 4 6 8] eclval get mcc 25 idiv mcc 25 mod 0 ne {1 add} if mul 5 add def
+ } {
+ /qcc 3 def
+ } ifelse
+ /acc qcc 3 sub 78 link1 mul add def
+ /tcc mcc qcc add def
+
+ % Lookup the most appropriate symbol specification
+{
+ /metrics [
+ % rows minc maxc mcol
+ [ 2 7 37 5 ]
+ [ 3 36 84 13 ]
+ [ 4 85 161 22 ]
+ [ 5 142 282 29 ]
+ ] def
+} ctxdef
+
+ 0 1 3 {
+ /i exch def
+ /m metrics i get def
+ /rows m 0 get def
+ /minc m 1 get def % Minimum permissible codewords
+ /maxc m 2 get def % Maximum permissible codewords
+ /mcol m 3 get def % Minimum tile columns
+ /okay true def
+ tcc minc lt tcc maxc gt or {/okay false def} if
+ okay {exit} if
+ } for
+
+ okay not {
+ /bwipp.ultracodeNoValidSymbol (Maximum length exceeded or invalid content) //raiseerror exec
+ } if
+
+ % Determine required number of columns and pads
+ mcol 1 61 {
+ /columns exch def
+ columns
+ columns 15 ge {1 sub} if
+ columns 31 ge {1 sub} if
+ columns 47 ge {1 sub} if
+ rows mul 3 sub tcc sub dup 0 ge {
+ /pads exch def
+ exit
+ } if
+ pop
+ } for
+ /dcc columns mcol sub def
+
+ % Reed-Solomon error correction
+ /rsseq [
+ start
+ mcc
+ acc
+ dcws aload pop
+ qcc {0} repeat
+ 0 % Working space
+ ] def
+
+ % Calculate the log and anti-log tables
+ /rsalog [ 1 282 {dup 3 mul 283 mod} repeat ] def
+ /rslog 283 array def
+ 1 1 282 {dup rsalog exch get exch rslog 3 1 roll put} for
+
+ % Function to calculate the product in the field
+ /rsprod {
+ 2 copy 0 ne exch 0 ne and {
+ rslog exch get exch rslog exch get add 282 mod rsalog exch get
+ } {
+ pop pop 0
+ } ifelse
+ } def
+
+ % Generate the coefficients
+ /n mcc def /k qcc def
+ /coeffs [ 1 k {0} repeat ] def
+ 1 1 k {
+ /i exch def
+ coeffs i coeffs i 1 sub get put
+ i 1 sub -1 1 {
+ /j exch def
+ coeffs j coeffs j 1 sub get coeffs j get rsalog i get rsprod add 283 mod put
+ } for
+ coeffs 0 coeffs 0 get rsalog i get rsprod put
+ } for
+ /coeffs coeffs 0 coeffs length 1 sub getinterval def
+ coeffs length 1 sub -2 0 {coeffs exch 2 copy get 283 exch sub put} for
+
+ % Derive the error codewords
+ 0 1 n 1 sub {
+ /t exch rsseq exch get rsseq n get add 283 mod def
+ 0 1 k 1 sub {
+ /j exch def
+ rsseq n j add rsseq n j add 1 add get 283 t coeffs k j sub 1 sub get mul 283 mod sub add 283 mod put
+ } for
+ } for
+ n 1 n k add { dup rsseq exch 283 rsseq 5 -1 roll get sub 283 mod put } for
+ /ecws rsseq n k getinterval def
+
+ options /debugecc known { /bwipp.debugecc ecws //raiseerror exec } if
+
+{
+ /tiles [
+ 13135 13136 13153 13156 13163 13165 13513 13515 13516 13531 % 0-9
+ 13535 13536 13561 13563 13565 13613 13615 13616 13631 13635 % 10-19
+ 13636 13651 13653 13656 15135 15136 15153 15163 15165 15313 % 20-29
+ 15315 15316 15351 15353 15356 15361 15363 15365 15613 15615 % 30-39
+ 15616 15631 15635 15636 15651 15653 15656 16135 16136 16153 % 40-49
+ 16156 16165 16313 16315 16316 16351 16353 16356 16361 16363 % 50-59
+ 16365 16513 16515 16516 16531 16535 16536 16561 16563 16565 % 60-69
+ 31315 31316 31351 31356 31361 31365 31513 31515 31516 31531 % 70-79
+ 31535 31536 31561 31563 31565 31613 31615 31631 31635 31636 % 80-89
+ 31651 31653 31656 35131 35135 35136 35151 35153 35156 35161 % 90-99
+ 35163 35165 35315 35316 35351 35356 35361 35365 35613 35615 % 100-109
+ 35616 35631 35635 35636 35651 35653 35656 36131 36135 36136 % 110-119
+ 36151 36153 36156 36163 36165 36315 36316 36351 36356 36361 % 120-129
+ 36365 36513 36515 36516 36531 36535 36536 36561 36563 36565 % 130-139
+ 51313 51315 51316 51351 51353 51356 51361 51363 51365 51513 % 140-149
+ 51516 51531 51536 51561 51563 51613 51615 51616 51631 51635 % 150-159
+ 51636 51651 51653 51656 53131 53135 53136 53151 53153 53156 % 160-169
+ 53161 53163 53165 53513 53516 53531 53536 53561 53563 53613 % 170-179
+ 53615 53616 53631 53635 53636 53651 53653 53656 56131 56135 % 180-189
+ 56136 56151 56153 56156 56161 56163 56165 56313 56315 56316 % 190-199
+ 56351 56353 56356 56361 56363 56365 56513 56516 56531 56536 % 200-209
+ 56561 56563 61313 61315 61316 61351 61353 61356 61361 61363 % 210-219
+ 61365 61513 61515 61516 61531 61535 61536 61561 61563 61565 % 220-229
+ 61615 61631 61635 61651 61653 63131 63135 63136 63151 63153 % 230-239
+ 63156 63161 63163 63165 63513 63515 63516 63531 63535 63536 % 240-249
+ 63561 63563 63565 63613 63615 63631 63635 63651 63653 65131 % 250-259
+ 65135 65136 65151 65153 65156 65161 65163 65165 65313 65315 % 260-269
+ 65316 65351 65353 65356 65361 65363 65365 65613 65615 65631 % 270-279
+ 65635 65651 65653 56565 51515 % 280-284
+ ] def
+
+ /dccurev1 [
+ 51363 51563 51653 53153 53163 53513 53563 53613 % 0-7
+ 53653 56153 56163 56313 56353 56363 56513 56563 % 8-15
+ 51316 51356 51536 51616 53156 53516 53536 53616 % 16-23
+ 53636 53656 56136 56156 56316 56356 56516 56536 % 24-31
+ ] def
+ /dcclrev1 [
+ 61351 61361 61531 61561 61631 61651 63131 63151 % 0-7
+ 63161 63531 63561 63631 65131 65161 65351 65631 % 8-15
+ 31351 31361 31531 31561 31631 31651 35131 35151 % 16-23
+ 35161 35361 35631 35651 36131 36151 36351 36531 % 24-31
+ ] def
+ /dccurev2 [
+ 15316 16316 13516 16516 13616 15616 13136 15136 % 0-7
+ 16136 13536 16536 13636 13156 16156 15356 13656 % 8-15
+ 15313 16313 13513 16513 13613 15613 13153 15153 % 16-23
+ 16153 16353 13653 15653 13163 15163 15363 13563 % 24-31
+ ] def
+ /dcclrev2 [
+ 36315 36515 35615 35135 36135 31535 36535 31635 % 0-7
+ 35635 35165 36165 31365 35365 36365 31565 36565 % 8-15
+ 61315 65315 63515 61615 65135 61535 63535 61635 % 16-23
+ 63635 65635 63165 65165 61365 65365 61565 63565 % 24-31
+ ] def
+} ctxdef
+
+ /dccu rev 1 eq {dccurev1} {dccurev2} ifelse def
+ /dccl rev 1 eq {dcclrev1} {dcclrev2} ifelse def
+
+ % Create the bitmap
+ /rows rows 6 mul 1 add def
+ /columns columns 6 add def
+ /pixs [ rows columns mul {-1} repeat ] def
+ /qmv {columns mul add} def
+ 0 1 columns 1 sub {
+ /i exch def
+ 0 6 rows 1 sub {
+ /j exch def
+ i 5 ge {pixs i j qmv i 2 mod 9 mul put} if
+ } for
+ pixs i 0 qmv 9 put
+ pixs i rows 1 sub qmv 9 put
+ } for
+ 1 1 rows 2 sub {
+ /i exch def
+ 3 16 columns 1 sub {
+ /j exch def
+ pixs j i qmv 1 i 2 mod sub 9 mul put
+ } for
+ pixs 0 i qmv 9 put
+ pixs 1 i qmv 1 i 2 mod sub 9 mul put
+ pixs 2 i qmv 0 put
+ pixs 3 i qmv 9 put
+ pixs 4 i qmv 0 put
+ pixs columns 1 sub i qmv 9 put
+ } for
+
+ % DCCU and DCCL tiles
+ /i rows 2 idiv 5 sub def
+ [
+ dccu dcc get 10 5 string cvrs {48 sub} forall
+ 0
+ dccl dcc get 10 5 string cvrs {48 sub} forall
+ ] {
+ pixs 2 i qmv 3 -1 roll put
+ /i i 1 add def
+ } forall
+
+ % Data tiles
+ /tileseq [
+ start
+ mcc
+ ecws aload pop
+ tcc
+ 283 % SEP
+ acc
+ dcws aload pop
+ pads {284} repeat
+ qcc
+ ] def
+
+ /x 5 def /y 1 def
+ tileseq {
+ tiles exch get 10 5 string cvrs {
+ pixs x y qmv 3 -1 roll 48 sub put
+ /y y 1 add def
+ } forall
+ y rows 1 sub ne {
+ /y y 1 add def % Jump horizontal timing pattern
+ } {
+ /x x 1 add def /y 1 def
+ pixs x y qmv get -1 ne {
+ /x x 1 add def % Jump vertical timing pattern
+ } if
+ } ifelse
+ } forall
+
+{
+ /colormap <<
+ 0 (FFFFFF) % W
+ 9 (000000) % K
+ 1 (00FFFF) % C
+ 3 (FF00FF) % M
+ 5 (FFFF00) % Y
+ 6 (00FF00) % G
+ >> def
+} ctxdef
+
+ % Return the arguments
+ <<
+ /ren //renmatrix
+ /pixs pixs
+ /pixx columns
+ /pixy rows
+ /height rows 72 div 2 mul
+ /width columns 72 div 2 mul
+ /colormap colormap
+ /opt options
+ >>
+
+ dontdraw not //renmatrix if
+
+ //unloadctx exec
+
+ end
+
+}
+[/barcode] {null def} forall
+bind def
+/ultracode dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
+%%EndData
+%%EndResource
+% --END ENCODER ultracode--
+
+% --BEGIN ENCODER jabcode--
+% --REQUIRES preamble loadctx unloadctx raiseerror parseinput renmatrix--
+% --DESC: JAB Code (Beta)
+% --EXAM: This is JAB Code
+% --EXOP: eclevel=6
+% --RNDR: renmatrix
+%%BeginResource: uk.co.terryburton.bwipp jabcode 0.0 2022082100 244344 255738
+%%BeginData: 1133 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+10 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /parseinput dup /uk.co.terryburton.bwipp findresource put
+dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
+begin
+/jabcode {
+
+ 20 dict begin
+
+ /options exch def
+ /barcode exch def
+
+ /ctx null def
+ /dontdraw false def
+ /rows -1 def
+ /columns -1 def
+ /slave false def
+ /colors 16 def
+ /eclevel 6 def % 0-10
+ /raw false def
+ /parse false def
+ /parsefnc false def
+ /mask -1 def % 0-7
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ /rows rows cvi def
+ /columns columns cvi def
+ /colors colors cvi def
+ /eclevel eclevel cvi def
+ /mask mask cvi def
+
+ /databpm colors ln 2 ln div round cvi def
+ /metabpm colors dup 8 gt {pop 8} if ln 2 ln div round cvi def
+
+ % Parse the input
+ /fn1 -1 def
+ /fncvals <<
+ /parse parse
+ /parsefnc parsefnc
+ (FNC1) fn1
+ >> def
+ /msg barcode fncvals //parseinput exec def
+ /msglen msg length def
+
+ % Wide array support, as needed
+ {65536 array} stopped {
+ pop
+ /arrayw {
+ dup 65535 idiv 1 add dup array exch 0 exch 1 sub {2 copy 65535 array put 1 add} repeat
+ 1 index 4 1 roll 3 -1 roll 65535 mod array put
+ } def
+ /getw {exch 1 index 65535 idiv get exch 65535 mod get} def
+ /putw {3 1 roll exch 1 index 65535 idiv get exch 65535 mod 3 -1 roll put} def
+ /copyw {exch 0 exch {dup length array copy 3 copy put pop 1 add} forall pop} def
+ } {
+ pop
+ /arrayw {array} def
+ /getw {get} def
+ /putw {put} def
+ /copyw {copy} def
+ } ifelse
+
+ /addtobits {
+ dup bits j 3 -1 roll putinterval
+ length j add /j exch def
+ } def
+
+ /tofixedbits { % Zero padded base 2 string
+ (0000000000000) 13 string copy dup 4 -1 roll 2 13 string cvrs
+ dup length 4 index exch sub exch putinterval
+ 0 3 -1 roll getinterval
+ } def
+
+ % Encode the data using byte mode encoding and terminate with EOM
+ /bits 7 msglen 15 le {4} {17} ifelse add msglen 8 mul add 12 add string def
+ /j 0 def
+ 31 5 tofixedbits addtobits % MS
+ (00) addtobits % S/B
+ msglen 15 le {
+ msglen 4 tofixedbits addtobits
+ } {
+ (0000) addtobits
+ msglen 16 sub 13 tofixedbits addtobits
+ } ifelse
+ 0 1 msglen 1 sub {
+ msg exch get 8 tofixedbits addtobits
+ } for
+ 28 5 tofixedbits addtobits % L/L
+ 31 5 tofixedbits addtobits % MS
+ (11) addtobits % EOM
+
+ % TODO Cascade
+ /diffside 21 def
+ /sameshape false def
+ /sameecc false def
+ /hasslaves false def
+
+ % Determine the metrics for a symbol of a given size
+ /metrics {
+ /mc exch def /mr exch def
+ mc mr mul % All modules
+ mc 25 sub 16 idiv 2 add mr 25 sub 16 idiv 2 add
+ mul 4 sub 7 mul % Alignment modules
+ 64 colors 2 copy gt {exch} if pop 2 mul % Palette modules
+ slave {7} {17} ifelse 4 mul % Finder modules
+
+ % Metadata bits and modules
+ slave not { % Master
+ /metass mr mc eq {0} {1} ifelse def
+ mr mc 2 copy lt {exch} if pop
+ 21 sub 16 idiv [ 0 1 2 2 3 3 3 3 ] exch get /metavf exch def
+ /metavlen metass 0 eq {[2 2 3 4]} {[4 6 8 10]} ifelse metavf get def
+ /metaelen metavf 2 mul 10 add def
+ 7 % II: SS VF MSK SF
+ metavlen add metaelen add % III: V E
+ hasslaves {4 add} if % III: S
+ 2 mul % LDPC
+ metabpm div ceiling cvi
+ dup metabpm mul 6 add /nummetabits exch def
+ 6 add % I: Nc into 6 modules
+ } { % Slave
+ 3 % I: SS SE SF
+ sameshape not {5 add} if % II: V
+ hasslaves {3 add} if % II: S
+ sameecc not {
+ mr mc 2 copy lt {exch} if pop
+ 21 sub 16 idiv [ 10 12 14 14 16 16 16 16 ] exch get
+ add % III: E
+ } if
+ 2 mul % LDPC
+ metabpm div ceiling cvi
+ dup metabpm mul /nummetabits exch def
+ } ifelse
+
+ dup /nummetamodules exch def
+ add add add sub /numdatamodules exch def
+ /numdatabits numdatamodules databpm mul def
+ } def
+
+ % Select a symbol size sufficient to carry the message
+ /coderate [ 0.67 0.63 0.57 0.55 0.50 0.43 0.34 0.25 0.20 0.17 0.14 ] eclevel get def
+ /grosslen bits length coderate div ceiling cvi def
+ /snapsize {ceiling cvi 18 sub dup 0 lt {pop 0} if 4 idiv 4 mul 21 add} def
+
+ rows -1 eq columns -1 eq and { % Square if neither rows or columns fixed
+ /size grosslen sqrt snapsize def
+ {
+ size size metrics
+ grosslen numdatabits le {exit} if
+ /size size 4 add def
+ } loop
+ /rows size def
+ /columns size def
+ } {
+ columns -1 eq rows -1 ne and { % Fixed height
+ /columns grosslen rows div snapsize def
+ {
+ rows columns metrics
+ grosslen numdatabits le {exit} if
+ /columns columns 4 add def
+ } loop
+ } if
+ rows -1 eq columns -1 ne and { % Fixed width
+ /rows grosslen columns div snapsize def
+ {
+ rows columns metrics
+ grosslen numdatabits le {exit} if
+ /rows rows 4 add def
+ } loop
+ } if
+ rows -1 ne columns -1 ne and { % Fixed height and width
+ rows columns metrics
+ } if
+ } ifelse
+ /C numdatabits def
+ /cols columns def
+
+ % TODO Reject all invalid sizes
+ rows 145 gt cols 145 gt or {
+ /bwipp.jabcodeNoValidSymbol (Maximum length exceeded or invalid content) //raiseerror exec
+ } if
+
+ % Pick ECC params to maximally fill symbol
+ /min C def
+ 3 1 8 {
+ /i exch def
+ i 1 add 1 9 {
+ /j exch def
+ /dist C j idiv j mul C j idiv i mul sub bits length sub def
+ dist min lt dist 0 ge and {
+ /datawc i def
+ /datawr j def
+ /min dist def
+ } if
+ } for
+ } for
+
+ % Extend the encoded data to fill the required data length
+ /tmpbits C datawr idiv datawr mul C datawr idiv datawc mul sub string def
+ tmpbits 0 bits putinterval
+ bits length 1 tmpbits length 1 sub {
+ dup 1 sub tmpbits exch get dup 2 mod 0 eq {1 add} {1 sub} ifelse
+ tmpbits 3 1 roll put
+ } for
+ /bits tmpbits def
+
+ % Avoid 15-bit overflow when multiplying the digits by stealing from the second digit
+ % m = 6364136223846793005 = 0x 5851 f42d 4c95 7f2d
+ /m0 16#5851 16#1 add def /m1 16#f42d 16#10000 sub def /m2 16#4c95 def /m3 16#7f2d def
+
+ /lcg64_temper {
+
+ % Multiply seed by 6364136223846793005 then add 1
+
+ /p00 m0 s0 mul def /p01 m0 s1 mul def /p02 m0 s2 mul def /p03 m0 s3 mul def
+ /p10 m1 s0 mul def /p11 m1 s1 mul def /p12 m1 s2 mul def /p13 m1 s3 mul def
+ /p20 m2 s0 mul def /p21 m2 s1 mul def /p22 m2 s2 mul def /p23 m2 s3 mul def
+ /p30 m3 s0 mul def /p31 m3 s1 mul def /p32 m3 s2 mul def /p33 m3 s3 mul def
+
+ /s3 p33 16#10000 mod 1 add def % 1 added here
+ /s2 p32 16#10000 mod p33 16#10000 idiv add
+ p23 16#10000 mod add def
+ /s1 p31 16#10000 mod p32 16#10000 idiv add
+ p22 16#10000 mod p23 16#10000 idiv add add
+ p13 16#10000 mod add def
+ /s0 p30 16#10000 mod p31 16#10000 idiv add
+ p21 16#10000 mod p22 16#10000 idiv add add
+ p12 16#10000 mod p13 16#10000 idiv add add
+ p03 16#10000 mod add def
+
+ % Simplify carry by making each digit positive by borrowing from more significant digit
+ /s3 s3 16#10000 add def
+ /s2 s2 16#ffff add def
+ /s1 s1 16#ffff add def
+ /s0 s0 16#ffff add def
+
+ % Carry
+ /s2 s3 16#10000 idiv s2 add def /s3 s3 16#10000 mod def
+ /s1 s2 16#10000 idiv s1 add def /s2 s2 16#10000 mod def
+ /s0 s1 16#10000 idiv s0 add def /s1 s1 16#10000 mod def
+ /s0 s0 16#10000 mod def
+
+ % Temper most significant 32 bits
+ s0 16#8000 sub 16#10000 mul s1 add 16#80000000 xor
+ 16#ffffffff and
+ dup -11 bitshift xor
+ dup 7 bitshift 16#62d3a980 neg and xor % 0x9D2C5680 - 0x100000000
+ dup 15 bitshift 16#103a0000 neg and xor % 0xEFC60000 - 0x100000000
+ 16#ffffffff and
+ dup -18 bitshift xor
+
+ } def
+
+ /createMatrixA {
+
+ /nb_pcb wr 4 lt {Pg_sub_block 2 idiv} {Pg_sub_block wr idiv wc mul} ifelse def
+ /offset Pg_sub_block 32 div ceiling cvi def
+ /effwidth offset 32 mul def
+ /matrixA offset nb_pcb mul arrayw def
+ 0 1 offset nb_pcb mul 1 sub {matrixA exch 0 putw} for
+ /permutation Pg_sub_block array def
+ 0 1 Pg_sub_block 1 sub {permutation exch dup put} for
+
+ 0 1 Pg_sub_block wr idiv 1 sub {
+ /i exch def
+ 0 1 wr 1 sub {
+ /j exch def
+ matrixA i effwidth wr add mul j add 32 idiv
+ 2 copy getw 1 31 i effwidth wr add mul j add 32 mod sub bitshift or putw
+ } for
+ } for
+
+ % Pseudorandom permutation
+ /s0 16#0000 def /s1 16#0000 def /s2 16#000B def /s3 16#FC39 def % s=785465
+ 1 1 wc 1 sub {
+ /i exch def
+ /off_index Pg_sub_block wr idiv i mul def
+ 0 1 Pg_sub_block 1 sub {
+ /j exch def
+ lcg64_temper
+ dup 0 lt {16#80000000 xor 2147483648.0 add} if
+ 4294967296.0 div Pg_sub_block j sub mul cvi % (float)UINT32_MAX = 65536.0 * 65536
+ /pos exch def
+ 0 1 Pg_sub_block wr idiv 1 sub {
+ /k exch def
+ matrixA off_index k add offset mul j 32 idiv add
+ 2 copy getw
+ matrixA permutation pos get 32 idiv k offset mul add getw
+ 31 permutation pos get 32 mod sub neg bitshift 1 and
+ 31 j 32 mod sub bitshift
+ or putw
+ } for
+ permutation pos permutation Pg_sub_block 1 sub j sub 2 copy get permutation pos get
+ exch 4 1 roll % p b p a p[a] p[b] -> p b p[a] p a p[b]
+ put put
+ } for
+ } for
+
+ } def
+
+ /createMetadataMatrixA {
+
+ /nb_pcb Pg_sub_block 2 idiv def
+ /offset Pg_sub_block 32 div ceiling cvi def
+ /matrixA offset nb_pcb mul arrayw def
+ 0 1 offset nb_pcb mul 1 sub {matrixA exch 0 putw} for
+ /permutation Pg_sub_block array def
+ 0 1 Pg_sub_block 1 sub {permutation exch dup put} for
+
+ % Pseudorandom permutation
+ /s0 16#0000 def /s1 16#0000 def /s2 16#0000 def /s3 16#9691 def % s=38545
+ /nb_once nb_pcb wc div Pg_sub_block mul 3 add cvi nb_pcb idiv def
+ 0 1 nb_pcb 1 sub {
+ /i exch def
+ 0 1 nb_once 1 sub {
+ /j exch def
+ lcg64_temper
+ dup 0 lt {16#80000000 xor 2147483648.0 add} if
+ 4294967296.0 div Pg_sub_block j sub mul cvi % (float)UINT32_MAX = 65536.0 * 65536
+ /pos exch def
+ matrixA i offset mul permutation pos get 32 idiv add
+ 2 copy getw 1 31 permutation pos get 32 mod sub bitshift or putw
+ permutation pos permutation Pg_sub_block 1 sub j sub 2 copy get permutation pos get
+ exch 4 1 roll % p b p a p[a] p[b] -> p b p[a] p a p[b]
+ put put
+ } for
+ } for
+
+ } def
+
+ /GaussJordan {
+
+ /nb_pcb wr 4 lt {Pg_sub_block 2 idiv} {Pg_sub_block wr idiv wc mul} ifelse def
+ /offset Pg_sub_block 32 div ceiling cvi def
+ /matrixH matrixA dup length array copyw def
+ /column_arrangement [ Pg_sub_block {0} repeat ] def
+ /processed_column [ Pg_sub_block {false} repeat ] def
+ /zero_lines_nb [ nb_pcb {0} repeat ] def
+ /swap_col [ Pg_sub_block 2 mul {0} repeat ] def
+ /zero_lines 0 def
+
+ /loop0 0 def
+ 0 1 nb_pcb 1 sub {
+ /i exch def
+ /pivot_column Pg_sub_block 1 add def
+ 0 1 Pg_sub_block 1 sub {
+ /j exch def
+ matrixH offset 32 mul i mul j add 32 idiv getw
+ 31 offset 32 mul i mul j add 32 mod sub neg bitshift 1 and 1 eq {
+ /pivot_column j def
+ exit
+ } if
+ } for
+ pivot_column Pg_sub_block lt {
+ processed_column pivot_column true put
+ column_arrangement pivot_column i put
+ pivot_column nb_pcb ge {
+ swap_col loop0 2 mul pivot_column put
+ /loop0 loop0 1 add def
+ } if
+ /off_index pivot_column 32 idiv def
+ /off_index1 pivot_column 32 mod def
+ 0 1 nb_pcb 1 sub {
+ /j exch def
+ i j ne {
+ matrixH off_index j offset mul add getw
+ 31 off_index1 sub neg bitshift 1 and 1 eq {
+ 0 1 offset 1 sub {
+ /k exch def
+ matrixH offset j mul k add
+ 2 copy getw matrixH offset i mul k add getw xor putw
+ } for
+ } if
+ } if
+ } for
+ } {
+ zero_lines_nb zero_lines i put
+ /zero_lines zero_lines 1 add def
+ } ifelse
+ } for
+
+ /matrix_rank nb_pcb zero_lines sub def
+ /loop2 0 def
+ matrix_rank 1 nb_pcb 1 sub {
+ /i exch def
+ column_arrangement i get 0 gt {
+ 0 1 nb_pcb 1 sub {
+ /j exch def
+ processed_column j get not {
+ column_arrangement j column_arrangement i get put
+ column_arrangement i 0 put
+ processed_column j true put
+ processed_column i false put
+ swap_col loop0 2 mul i put
+ swap_col loop0 2 mul 1 add j put
+ column_arrangement i j put
+ /loop0 loop0 1 add def
+ /loop2 loop2 1 add def
+ exit
+ } if
+ } for
+ } if
+ } for
+
+ /loop1 0 def
+ 0 1 nb_pcb 1 sub {
+ /kl exch def
+ processed_column kl get not loop1 loop0 loop2 sub lt and {
+ column_arrangement kl column_arrangement swap_col loop1 2 mul get get put
+ processed_column kl true put
+ swap_col loop1 2 mul 1 add kl put
+ /loop1 loop1 1 add def
+ } if
+ } for
+
+ /loop1 0 def
+ 0 1 nb_pcb 1 sub {
+ /kl exch def
+ processed_column kl get not {
+ column_arrangement kl zero_lines_nb loop1 get put
+ /loop1 loop1 1 add def
+ } if
+ } for
+
+ 0 1 nb_pcb 1 sub {
+ /i exch def
+ 0 1 offset 1 sub {
+ /j exch def
+ matrixH column_arrangement i get offset mul j add getw
+ matrixA exch i offset mul j add exch putw
+ } for
+ } for
+
+ /tmp 0 def
+ 0 1 loop0 1 sub {
+ /i exch def
+ 0 1 nb_pcb 1 sub {
+ /j exch def
+ matrixA swap_col i 2 mul get 32 idiv j offset mul add getw
+ 31 swap_col i 2 mul get 32 mod sub neg bitshift 1 and neg tmp xor 1 and
+ tmp xor /tmp exch def
+ matrixA swap_col i 2 mul get 32 idiv j offset mul add
+ 2 copy getw
+ matrixA swap_col i 2 mul 1 add get 32 idiv j offset mul add getw
+ 31 swap_col i 2 mul 1 add get 32 mod sub neg bitshift 1 and neg
+ matrixA swap_col i 2 mul get 32 idiv j offset mul add getw xor
+ 1 31 swap_col i 2 mul get 32 mod sub bitshift and
+ xor putw
+ matrixA swap_col i 2 mul 1 add get 32 idiv j offset mul add
+ 2 copy getw
+ tmp 1 and neg
+ matrixA swap_col i 2 mul 1 add get 32 idiv j offset mul add getw xor
+ 1 31 swap_col i 2 mul 1 add get 32 mod sub bitshift and
+ xor putw
+ } for
+ } for
+
+ } def
+
+ /createGeneratorMatrix {
+
+ /pn Pg_sub_block matrix_rank sub def
+ /offset pn 32 div ceiling cvi def
+ /effwidth offset 32 mul def
+ /offset_cap Pg_sub_block 32 div ceiling cvi def
+ /G offset Pg_sub_block mul arrayw def
+ 0 1 offset Pg_sub_block mul 1 sub {
+ G exch 0 putw
+ } for
+ 0 1 pn 1 sub {
+ /i exch def
+ G Pg_sub_block pn sub i add offset mul i 32 idiv add
+ 2 copy getw 1 31 i 32 mod sub bitshift or putw
+ } for
+ /matrix_index Pg_sub_block pn sub def
+ /loop0 0 def
+ 0 1 Pg_sub_block pn sub effwidth mul 1 sub {
+ /i exch def
+ matrix_index Pg_sub_block ge {
+ /loop0 loop0 1 add def
+ /matrix_index Pg_sub_block pn sub def
+ } if
+ i effwidth mod pn lt {
+ G i 32 idiv
+ 2 copy getw
+ matrixA matrix_index 32 idiv offset_cap loop0 mul add getw
+ 31 matrix_index 32 mod sub neg bitshift 1 and neg
+ G i 32 idiv getw xor
+ 1 31 i 32 mod sub bitshift and
+ xor putw
+ /matrix_index matrix_index 1 add def
+ } if
+ } for
+
+ } def
+
+ /ldpc {
+
+ /wr exch def
+ /wc exch def
+ [ exch {48 sub} forall ] /data exch def
+
+ /Pn data length def
+ wr -1 ne { % Message data
+ /Pg Pn wr mul wr wc sub div ceiling wr div ceiling wr mul cvi def
+ /nb_sub_blocks Pg 2700 idiv 1 add def
+ /Pg_sub_block Pg nb_sub_blocks idiv wr idiv wr mul def
+ /Pn_sub_block Pg_sub_block wr wc sub mul wr idiv def
+ /nb_sub_blocks Pg Pg_sub_block idiv def
+ /encoding_iterations Pg Pg_sub_block idiv Pn_sub_block nb_sub_blocks mul Pn lt {1 sub} if def
+ createMatrixA
+ } { % Metadata
+ /Pg Pn 2 mul def
+ /nb_sub_blocks 1 def
+ /Pg_sub_block Pg def
+ /Pn_sub_block Pn def
+ /encoding_iterations 1 def
+ createMetadataMatrixA
+ } ifelse
+ GaussJordan
+ createGeneratorMatrix
+
+ /ecc_encoded_data Pg array def
+
+ /offset Pg_sub_block matrix_rank sub 32 div ceiling cvi def
+ 0 1 encoding_iterations 1 sub {
+ /iter exch def
+ 0 1 Pg_sub_block 1 sub {
+ /i exch def
+ /temp 0 def
+ /loop0 0 def
+ /offset_index offset i mul def
+ iter Pn_sub_block mul 1 iter 1 add Pn_sub_block mul 1 sub {
+ data exch get
+ G offset_index loop0 32 idiv add getw 31 loop0 32 mod sub neg bitshift 1 and and
+ /temp exch temp xor def
+ /loop0 loop0 1 add def
+ } for
+ ecc_encoded_data i iter Pg_sub_block mul add temp put
+ } for
+ } for
+
+ encoding_iterations nb_sub_blocks ne {
+ /start encoding_iterations Pn_sub_block mul def
+ /last_index encoding_iterations Pg_sub_block mul def
+ /Pg_sub_block Pg encoding_iterations Pg_sub_block mul sub def
+ /Pn_sub_block Pg_sub_block wr wc sub mul wr idiv def
+ createMatrixA
+ GaussJordan
+ createGeneratorMatrix
+ /offset Pg_sub_block matrix_rank sub 32 div ceiling cvi def
+ 0 1 Pg_sub_block 1 sub {
+ /i exch def
+ /temp 0 def
+ /loop0 0 def
+ /offset_index offset i mul def
+ start 1 Pn 1 sub {
+ data exch get
+ G offset_index loop0 32 idiv add getw 31 loop0 32 mod sub neg bitshift 1 and and
+ /temp exch temp xor def
+ /loop0 loop0 1 add def
+ } for
+ ecc_encoded_data i last_index add temp put
+ } for
+ } if
+
+ /out Pg string def
+ 0 1 Pg 1 sub {
+ dup ecc_encoded_data exch get
+ out 3 1 roll 48 add put
+ } for
+ out
+
+ } def
+
+ % Replace data bitstream with LDPC error correction stream
+ /bits bits datawc datawr ldpc def
+
+ % Interleave via pseudorandom permutation
+ /s0 16#0000 def /s1 16#0000 def /s2 16#0003 def /s3 16#75C7 def % s=226759
+ bits length 1 sub -1 1 {
+ /l exch def
+ lcg64_temper
+ dup 0 lt {16#80000000 xor 2147483648.0 add} if
+ 4294967296.0 div l 1 add mul cvi % (float)UINT32_MAX = 65536.0 * 65536
+ /r exch def
+ bits l get bits r get
+ bits exch l exch put
+ bits exch r exch put
+ } for
+
+ % Append padding bits to the interleaved, ECC encoded data up to capacity
+ /tmpbits C string def
+ tmpbits 0 bits putinterval
+ /j bits length def
+ C j sub 1 add 2 idiv {
+ tmpbits j 48 put
+ j 1 add C lt {tmpbits j 1 add 49 put} if
+ /j j 2 add def
+ } repeat
+ /bits tmpbits def
+
+ % Define the color palette
+ colors 4 eq {
+ /bi 0 def /gi 1 def /mi 2 def /yi 3 def
+ /ki 4 def /wi 5 def % Extended
+ /palette <<
+ bi (0000FF) gi (00FF00) mi (FF00FF) yi (FFFF00)
+ ki (000000) wi (FFFFFF)
+ >> def
+ /metacolorindex [bi gi mi yi] def
+ /palettelayout [bi gi mi yi] def
+ } {
+ /rgbres <<
+ % r g b Graduations
+ 8 [ 2 2 2 ]
+ 16 [ 4 2 2 ]
+ 32 [ 4 4 2 ]
+ 64 [ 4 4 4 ]
+ 128 [ 8 4 4 ]
+ 256 [ 8 8 4 ]
+ >> colors get def
+
+ /rvals rgbres 0 get [ exch 1 sub dup 0 exch 1 exch {255 2 index div mul round cvi exch} for pop ] def
+ /gvals rgbres 1 get [ exch 1 sub dup 0 exch 1 exch {255 2 index div mul round cvi exch} for pop ] def
+ /bvals rgbres 2 get [ exch 1 sub dup 0 exch 1 exch {255 2 index div mul round cvi exch} for pop ] def
+
+ /palette colors dict def
+ /palettelayout 64 colors 2 copy gt {exch} if pop array def
+ /i 0 def /j 8 def
+ rvals {
+ /r exch def
+ gvals {
+ /g exch def
+ bvals {
+ /b exch def
+ r 16 bitshift g 8 bitshift or b or
+ (000000) 6 string copy dup 3 -1 roll 16 6 string cvrs dup length 6 exch sub exch putinterval
+ false
+ 1 index (000000) eq {/ki i def pop true} if
+ 1 index (0000FF) eq {/bi i def pop true} if
+ 1 index (00FF00) eq {/gi i def pop true} if
+ 1 index (00FFFF) eq {/ci i def pop true} if
+ 1 index (FF0000) eq {/ri i def pop true} if
+ 1 index (FF00FF) eq {/mi i def pop true} if
+ 1 index (FFFF00) eq {/yi i def pop true} if
+ 1 index (FFFFFF) eq {/wi i def pop true} if
+ not {
+ colors 64 le
+ colors 128 eq
+ r 0 eq r 73 eq or r 182 eq or r 255 eq or and
+ colors 256 eq
+ r 0 eq r 73 eq or r 182 eq or r 255 eq or and
+ g 0 eq g 73 eq or g 182 eq or g 255 eq or and
+ or or { % RGB space is sampled into 64 slots
+ palettelayout j i put
+ /j j 1 add def
+ } if
+ } if
+ palette exch i exch put
+ /i i 1 add def
+ } forall
+ } forall
+ } forall
+ palettelayout 0 [ki bi gi ci ri mi yi wi] putinterval
+ /metacolorindex [ki bi gi ci ri mi yi wi] def
+ } ifelse
+
+ % Create the pixel map
+ /pixs [rows cols mul {-1} repeat] def
+ /jmv {cols mul add} def
+
+ % Finder patterns
+ slave not { % Master alignment pattern
+ /fpat [
+ [ 1 1 1 0 0 ]
+ [ 1 2 2 0 0 ]
+ [ 1 2 1 2 1 ]
+ [ 0 0 2 2 1 ]
+ [ 0 0 1 1 1 ]
+ ] def
+ /fmap [
+ [ -1 bi yi ] % UL
+ [ -1 yi bi ] % LL
+ [ -1 gi mi ] % UR
+ [ -1 mi gi ] % LR
+ ] def
+ } { % Slave alignment pattern
+ /fpat [
+ [ 0 0 0 0 0 ]
+ [ 0 2 2 0 0 ]
+ [ 0 2 1 2 0 ]
+ [ 0 0 2 2 0 ]
+ [ 0 0 0 0 0 ]
+ ] def
+ /fmap [
+ [ -1 ki wi ] % UL
+ [ -1 ki wi ] % LL
+ [ -1 ki wi ] % UR
+ [ -1 ki wi ] % LR
+ ] def
+ } ifelse
+ 0 1 4 {
+ /y exch def
+ 0 1 4 {
+ /x exch def
+ /fpb fpat y get x get def
+ pixs x 1 add y 1 add jmv fmap 0 get fpb get put
+ pixs x 1 add rows y sub 2 sub jmv fmap 1 get fpb get put
+ pixs x cols add 6 sub y 1 add jmv fmap 2 get fpb get put
+ pixs x cols add 6 sub rows y sub 2 sub jmv fmap 3 get fpb get put
+ } for
+ } for
+
+ % Alignment patterns
+ /algnpat0 [
+ [ ki ki -1 ]
+ [ ki wi ki ]
+ [ -1 ki ki ]
+ ] def
+ /algnpat1 [
+ [ -1 ki ki ]
+ [ ki wi ki ]
+ [ ki ki -1 ]
+ ] def
+ /num cols 16 div round cvi 1 sub def
+ /algnrpos [ 3 17 ] def
+ num 0 gt {
+ /algnrpos [ 0 1 num {cols 7 sub num div mul cvi 3 add} for ] def
+ } if
+ /num rows 16 div round cvi 1 sub def
+ /algncpos [ 3 17 ] def
+ num 0 gt {
+ /algncpos [ 0 1 num {rows 7 sub num div mul cvi 3 add} for ] def
+ } if
+ /putalgnpat {
+ /pp exch def
+ /py exch def
+ /px exch def
+ 0 1 2 {
+ /pb exch def
+ 0 1 2 {
+ /pa exch def
+ pixs px pa add py pb add jmv pp pb get pa get put
+ } for
+ } for
+ } def
+ 0 1 algncpos length 1 sub {
+ /j exch def
+ /y algncpos j get def
+ 0 1 algnrpos length 1 sub {
+ /i exch def
+ /x algnrpos i get def
+ pixs x y jmv get -1 eq {
+ x 1 sub y 1 sub i j add 2 mod 0 eq {algnpat0} {algnpat1} ifelse putalgnpat
+ } if
+ } for
+ } for
+
+ slave not {
+
+ [ % Expanded to [ x y ] [ x -y ] [ -x -y ] [ x -y ]
+ % Metadata and palette
+ [ 6 1 ] [ 6 2 ] [ 6 3 ] [ 6 4 ] [ 6 5 ] [ 6 6 ] [ 5 6 ] [ 4 6 ] [ 3 6 ] [ 2 6 ] % 0-39
+ [ 1 6 ] [ 7 1 ] [ 7 2 ] [ 7 3 ] [ 7 4 ] [ 7 5 ] [ 7 6 ] [ 7 7 ] [ 6 7 ] [ 5 7 ] % 40-79
+ % Palette only
+ [ 4 7 ] [ 3 7 ] [ 2 7 ] [ 1 7 ] [ 8 1 ] [ 8 2 ] [ 8 3 ] [ 8 4 ] % 16-31
+ [ 8 5 ] [ 8 6 ] [ 8 7 ] [ 8 8 ] [ 7 8 ] [ 6 8 ] [ 5 8 ] [ 4 8 ] % 32-47
+ [ 3 8 ] [ 2 8 ] [ 1 8 ] [ 9 1 ] [ 9 2 ] [ 9 3 ] [ 9 4 ] [ 9 5 ] % 48-63
+ ] {
+ aload pop /y exch def /x exch def
+ [ x y ] [ x neg y ] [ x neg y neg ] [ x y neg ]
+ } forall
+ 176 array astore /metadatamap exch def
+
+ /palettemap1 [
+ [ 4 1 ] [ 4 2 ] [ 5 1 ] [ 5 2 ] [ 2 4 ] [ 2 5 ] [ 1 4 ] [ 1 5 ] % 0-7
+ [ -2 1 ] [ -2 2 ] [ -1 1 ] [ -1 2 ] [ -4 4 ] [ -4 5 ] [ -5 4 ] [ -5 5 ] % 8-15
+ ] def
+
+ /palettemap2 [
+ [ -4 -5 ] [ -4 -4 ] [ -5 -5 ] [ -5 -4 ] [ -2 -2 ] [ -2 -1 ] [ -1 -2 ] [ -1 -1 ] % 0-7
+ [ 2 -5 ] [ 2 -4 ] [ 1 -5 ] [ 1 -4 ] [ 4 -2 ] [ 4 -1 ] [ 5 -2 ] [ 5 -1 ] % 8-15
+ ] def
+
+ } { % Slave
+
+ % TODO Cascade
+
+ /metadatamap [
+ 1 1 19 {
+ /i exch def
+ [ 0 i ] [ 1 i ]
+ } for
+ 5 1 12 {
+ /i exch def
+ [ 2 i ] [ 3 i ]
+ } for
+ ] def
+
+ /palettemap1 [
+ 5 1 12 { [ exch 4 exch ] } for
+ 12 -1 5 { [ exch 5 exch ] } for
+ 5 1 12 { [ exch 6 exch ] } for
+ 12 -1 5 { [ exch 7 exch ] } for
+ ] def
+
+ /palettemap2 [
+ palettemap1 {[ exch aload pop neg exch neg exch]} forall
+ ] def
+
+ } ifelse
+
+ % Normalise wrapping
+ metadatamap {
+ dup 0 get dup 0 lt {cols add 1 sub 1 index 0 3 -1 roll put} {pop} ifelse
+ dup 1 get dup 0 lt {rows add 1 sub 1 index 1 3 -1 roll put} {pop} ifelse
+ pop
+ } forall
+ palettemap1 {
+ dup 0 get dup 0 lt {cols add 1 sub 1 index 0 3 -1 roll put} {pop} ifelse
+ dup 1 get dup 0 lt {rows add 1 sub 1 index 1 3 -1 roll put} {pop} ifelse
+ pop
+ } forall
+ palettemap2 {
+ dup 0 get dup 0 lt {cols add 1 sub 1 index 0 3 -1 roll put} {pop} ifelse
+ dup 1 get dup 0 lt {rows add 1 sub 1 index 1 3 -1 roll put} {pop} ifelse
+ pop
+ } forall
+
+ % Reserve the metadata modules to be placed once mask is determined
+ 0 1 nummetamodules 1 sub {
+ pixs exch metadatamap exch get aload pop jmv 0 put
+ } for
+
+ % Place the color palette
+ slave not {
+ % Up to first 16 colors into finder slots
+ 0 1 16 colors 2 copy gt {exch} if pop 1 sub {
+ /i exch def
+ palettelayout i get dup
+ pixs exch palettemap1 i get aload pop jmv exch put
+ pixs exch palettemap2 i get aload pop jmv exch put
+ } for
+ /i 16 def
+ } {
+ /i 0 def
+ } ifelse
+
+ % Continue palette placement after end of metadata modules
+ /j nummetamodules def
+ i 2 palettelayout length 1 sub {
+ /i exch def
+ palettelayout i get dup
+ pixs exch metadatamap j get aload pop jmv exch put
+ pixs exch metadatamap j 2 add get aload pop jmv exch put
+ palettelayout i 1 add get dup
+ pixs exch metadatamap j 1 add get aload pop jmv exch put
+ pixs exch metadatamap j 3 add get aload pop jmv exch put
+ /j j 4 add def
+ } for
+
+ % Calculate the mask patterns applied to data modules
+ /maskfuncs [
+ {add colors mod} bind
+ {pop colors mod} bind
+ {exch pop colors mod} bind
+ {3 idiv exch 2 idiv add colors mod} bind
+ {2 idiv exch 3 idiv add colors mod} bind
+ {add dup 2 idiv exch 3 idiv add colors mod} bind
+ {2 copy exch dup mul mul 7 mod 3 1 roll exch dup mul add 2 mul 19 mod add colors mod} bind
+ {2 copy dup mul mul 5 mod 3 1 roll dup mul exch 2 mul add 13 mod add colors mod} bind
+ ] def
+ mask -1 ne { % User specifies a mask
+ /maskfuncs [maskfuncs mask get] def
+ /bestmaskval mask def
+ } if
+ /masks maskfuncs length array def
+ 0 1 masks length 1 sub {
+ /m exch def
+ /mask rows cols mul array def
+ 0 1 rows 1 sub {
+ /j exch def
+ 0 1 cols 1 sub {
+ /i exch def
+ pixs i j jmv get -1 eq {i j maskfuncs m get exec} {0} ifelse
+ mask i j jmv 3 -1 roll put
+ } for
+ } for
+ masks m mask put
+ } for
+
+ % Walk the symbol placing the data bitstream
+ /posx 0 def /posy 0 def
+ /i 0 def
+ { % loop
+ posx cols eq {exit} if
+ pixs posx posy jmv get -1 eq {
+ bits i databpm getinterval 0 exch {48 sub add 2 mul} forall 2 idiv
+ pixs posx posy jmv 3 -1 roll put
+ /i i databpm add def
+ } if
+ /posy posy 1 add def
+ posy rows eq {/posy 0 def /posx posx 1 add def} if
+ } loop
+
+ % Evaluate runlength encoded rows or columns in full symbols
+ /evalrle {
+ /scrle exch def
+ /scr1 0 def /scr3 0 def
+ 0 2 scrle length 2 sub {
+ /j exch def
+ scrle j 1 add get -1 ne { % Skip over voids
+ % Detect runs of 5 or more like modules, except in voids
+ scrle j get dup 5 ge {2 sub /scr1 exch scr1 add def} {pop} ifelse
+ % Detect finder pattern
+ j 4 ge j scrle length 5 sub le and {
+ scrle j 4 sub 10 getinterval % n1 c1 ... n5 c5
+ dup {1 eq} forall pop 4 {exch pop and} repeat { % n{1-5}=1
+ mark exch aload pop
+ 8 index dup 6 index eq exch 2 index eq and % c1=c3=c5
+ 7 index 4 index eq and { % c2=c4
+ 2 index /c4 exch def /c5 exch def
+ c4 bi eq c5 yi eq and c4 yi eq c5 bi eq and
+ c4 gi eq c5 mi eq and c4 mi eq c5 gi eq and
+ or or or {/scr3 scr3 100 add def} if
+ } if
+ cleartomark
+ } {pop} ifelse
+ } if
+ } if
+ } for
+ scr1 scr3
+ } def
+
+ /evalmask {
+ /sym exch def
+
+ /n1 0 def /n2 0 def /n3 0 def
+ /rle rows cols 2 copy lt {exch} if pop 2 mul 2 add array def
+ /lastpairs cols array def
+ /thispairs cols array def
+
+ % Runlength encode and evaluate each column
+ 0 1 cols 1 sub {
+ /i exch def
+ mark 0 -1
+ i cols rows cols mul 1 sub {
+ sym exch get 2 copy eq {pop exch 1 add exch} {1 exch} ifelse
+ } for
+ rle 0 counttomark 2 sub getinterval astore
+ evalrle n3 add /n3 exch def n1 add /n1 exch def
+ pop
+ } for
+
+ 0 1 rows 1 sub {
+ /i exch def
+
+ % Runlength encode and evaluate each row
+ /symrow sym i cols mul cols getinterval def
+ mark 0 -1
+ symrow {
+ 2 copy eq {pop exch 1 add exch} {1 exch} ifelse
+ } forall
+ rle 0 counttomark 2 sub getinterval astore
+ evalrle n3 add /n3 exch def n1 add /n1 exch def
+ pop
+
+ % Count and score same coloured blocks
+ /lastpairs thispairs /thispairs lastpairs def def
+ -1 symrow {exch 2 copy ne {pop -1 exch} if} forall
+ pop
+ thispairs astore pop
+ i 0 gt {
+ mark
+ lastpairs aload pop thispairs aload pop
+ n2 cols { exch dup -1 ne { cols 1 add index eq {3 add} if } {pop} ifelse } repeat
+ /n2 exch def
+ cleartomark
+ } if
+ } for
+
+ n1 n2 add n3 add
+ } def
+
+ % Evaluate the masked symbols to find the most suitable
+ /bestscore 999999999 def
+ 0 1 masks length 1 sub {
+ /m exch def
+ /masksym rows cols mul array def
+ 0 1 rows cols mul 1 sub {
+ /i exch def
+ masksym i pixs i get masks m get i get xor put
+ } for
+ masks length 1 ne {
+ masksym evalmask /score exch def
+ score bestscore lt {
+ /bestsym masksym def
+ /bestmaskval m def
+ /bestscore score def
+ } if
+ } {
+ /bestsym masksym def
+ } ifelse
+ } for
+ /pixs bestsym def
+ /metamask bestmaskval def
+
+ % Derive the metadata bitstream
+ /addtometapart {
+ dup metapart p 3 -1 roll putinterval
+ length p add /p exch def
+ } def
+
+ /addtometabits {
+ dup metabits q 3 -1 roll putinterval
+ length q add /q exch def
+ } def
+
+ /metapart 40 string def
+ /metabits nummetabits string def
+ /p 0 def /q 0 def
+ slave not {
+
+ % Part I
+ colors ln 2 ln div round cvi 1 sub
+ 3 tofixedbits addtometapart % Nc
+ metapart 0 p getinterval 2 -1 ldpc addtometabits /p 0 def
+
+ % Part II
+ metass 1 tofixedbits addtometapart % SS
+ metavf 2 tofixedbits addtometapart % VF
+ metamask 3 tofixedbits addtometapart % MSK
+ hasslaves {(1)} {(0)} ifelse addtometapart % SF
+ metapart 0 p getinterval 2 -1 ldpc addtometabits /p 0 def
+
+ % Part III
+ metass 0 eq { % Square
+ cols 17 sub 4 idiv [ 0 4 8 16 ] metavf get sub 1 sub
+ metavlen tofixedbits addtometapart % V
+ } { % Rectangular
+ cols 17 sub 4 idiv 1 sub
+ metavlen 2 idiv tofixedbits addtometapart % V1
+ rows 17 sub 4 idiv 1 sub
+ metavlen 2 idiv tofixedbits addtometapart % V2
+ } ifelse
+ datawc 3 sub metaelen 2 idiv tofixedbits addtometapart % E1
+ datawr 4 sub metaelen 2 idiv tofixedbits addtometapart % E2
+ hasslaves { % TODO Cascading
+ 0 4 tofixedbits addtometapart % S
+ } if
+ metapart 0 p getinterval 2 -1 ldpc addtometabits /p 0 def
+
+ } { % slave
+
+ % Part I
+ sameshape {0} {1} ifelse 1 tofixedbits addtometapart % SS
+ sameecc {0} {1} ifelse 1 tofixedbits addtometapart % SE
+ hasslaves {1} {0} ifelse 1 tofixedbits addtometapart % SF
+ metapart 0 p getinterval 2 -1 ldpc addtometabits /p 0 def
+
+ % Part II
+ sameshape not {
+ diffside 17 sub 4 idiv 1 sub
+ 5 tofixedbits addtometapart % V
+ } if
+ hasslaves { % TODO Cascading
+ 0 3 tofixedbits addtometapart % S
+ } if
+ metapart 0 p getinterval 2 -1 ldpc addtometabits /p 0 def
+
+ % Part III
+ sameecc not {
+ datawc 3 sub metaelen 2 idiv tofixedbits addtometapart % E1
+ datawr 4 sub metaelen 2 idiv tofixedbits addtometapart % E2
+ } if
+ metapart 0 p getinterval 2 -1 ldpc addtometabits /p 0 def
+
+ } ifelse
+ q 1 nummetabits 1 sub { % Pad with 0s
+ metabits exch 48 put
+ } for
+
+ % Place the metadata
+ /i 0 def /j 0 def
+ slave not { % Two-color encoding of Part I (Nc) in master symbols
+ metabits i 6 getinterval {
+ colors 4 eq {[bi yi]} {[ki wi]} ifelse exch 48 sub get
+ pixs metadatamap j get aload pop jmv 3 -1 roll put
+ /j j 1 add def
+ } forall
+ /i i 6 add def
+ } if
+ nummetabits i sub metabpm idiv {
+ metabits i metabpm getinterval 0 exch {48 sub add 2 mul} forall 2 idiv
+ metacolorindex exch get
+ pixs metadatamap j get aload pop jmv 3 -1 roll put
+ /i i metabpm add def
+ /j j 1 add def
+ } repeat
+
+ <<
+ /ren //renmatrix
+ /pixs pixs
+ /pixx cols
+ /pixy rows
+ /colormap palette
+ /height rows 2 mul 72 div
+ /width cols 2 mul 72 div
+ /opt options
+ >>
+
+ dontdraw not //renmatrix if
+
+ end
+
+}
+[/barcode] {null def} forall
+bind def
+/jabcode dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
+%%EndData
+%%EndResource
+% --END ENCODER jabcode--
+
% --BEGIN ENCODER gs1-cc--
-% --REQUIRES preamble raiseerror renmatrix micropdf417 pdf417--
+% --REQUIRES preamble loadctx unloadctx raiseerror parseinput gs1process renmatrix micropdf417 pdf417--
% --DESC: GS1 Composite 2D Component
% --EXAM: (01)95012345678903(3103)000123
% --EXOP: ccversion=b cccolumns=4
% --RNDR: renmatrix
-%%BeginResource: uk.co.terryburton.bwipp gs1-cc 0.0 2017040400 208546 207818
-%%BeginData: 656 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp gs1-cc 0.0 2022082100 222469 205288
+%%BeginData: 639 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
+dup /loadctx dup /uk.co.terryburton.bwipp findresource put
+dup /unloadctx dup /uk.co.terryburton.bwipp findresource put
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /gs1process dup /uk.co.terryburton.bwipp findresource put
dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
dup /pdf417 dup /uk.co.terryburton.bwipp findresource put
dup /micropdf417 dup /uk.co.terryburton.bwipp findresource put
begin
/gs1-cc {
-
+
20 dict begin % Confine variables to local scope
/options exch def % We are given an option string
/barcode exch def % We are given a barcode string
+ /ctx null def
+ /parse false def
+ /dontlint false def
+ /lintreqs false def
/dontdraw false def
/ccversion (a) def
/cccolumns -1 def
/lintype () def
/linwidth -1 def
-
+
% Parse the input options
options type /stringtype eq {
1 dict begin
@@ -20434,10 +27658,12 @@ begin
currentdict end /options exch def
} if
options {def} forall
-
+
/cccolumns cccolumns cvi def
/linwidth linwidth cvi def
+ /gs1-cc //loadctx exec
+
% Select columns based on linear type
cccolumns -1 eq {
<<
@@ -20454,55 +27680,20 @@ begin
/databarlimited 3
/databarexpanded 4
/databarexpandedstacked 4
- >> lintype get /cccolumns exch def
+ >> lintype get /cccolumns exch def
} if
- % Expand ordinals of the form ^NNN to ASCII
- /expand {
- /in exch def
- /out in length string def
- /j 0 def
- in
- { % loop
- (^) search {
- dup out exch j exch putinterval
- length j add 1 add /j exch def
- pop
- dup 0 3 getinterval cvi out exch j 1 sub exch put
- dup length 3 sub 3 exch getinterval
- } {
- dup out exch j exch putinterval
- length j add /j exch def
- out 0 j getinterval exit
- } ifelse
- } loop
- } bind def
-
- % Parse out AIs
- /ais [] def
- /vals [] def
- barcode dup length 1 sub 1 exch getinterval
- { % loop
- dup () eq {exit} if
- (\)) search pop
- exch pop
- exch (\() search {
- exch pop exch 3 1 roll
- } {
- () 3 1 roll
- } ifelse
- [ ais aload pop counttomark 2 add index ] /ais exch def
- [ vals aload pop counttomark 1 add index expand ] /vals exch def
- pop pop
- } loop
- pop
+ barcode /ai //gs1process exec
+ /fncs exch def
+ /vals exch def
+ /ais exch def
% Method selection
- /isupper {dup 65 ge exch 90 le and} bind def % A-Z
- /isnum0 {dup 48 ge exch 57 le and} bind def % 0-9
- /isnum1 {dup 49 ge exch 57 le and} bind def % 1-9
+ /isupper {dup 65 ge exch 90 le and} def % A-Z
+ /isnum0 {dup 48 ge exch 57 le and} def % 0-9
+ /isnum1 {dup 49 ge exch 57 le and} def % 1-9
{ % common exit
-
+
% (10/11/17)...
ais length 1 ge {
ais 0 get (10) eq ais 0 get (11) eq or ais 0 get (17) eq or {
@@ -20545,18 +27736,20 @@ begin
% Freeform
-1 (0) exit
-
+
} loop
/method exch def
/npre exch def
- /fnc1 -1 def /lnumeric -2 def /lalphanumeric -3 def /liso646 -4 def
-
/tobin {
string dup length 1 sub 0 exch 1 exch {1 index exch 48 put} for
- dup 3 -1 roll 2 2 index length string cvrs dup length 2 index length exch sub exch putinterval
- } bind def
-
+ dup 3 -1 roll 2 2 index length string cvrs dup length 2 index length exch sub exch putinterval
+ } def
+
+{
+
+ /fnc1 -1 def /lnumeric -2 def /lalphanumeric -3 def /liso646 -4 def
+
/alpha <<
65 1 90 {dup 65 sub 5 tobin} for
48 1 57 {dup 4 add 6 tobin} for
@@ -20566,16 +27759,16 @@ begin
/numeric <<
0 1 119 {
dup (00) 2 string copy dup 3 -1 roll 11 2 string cvrs
- dup length 2 exch sub exch putinterval
- dup 0 get 65 eq {dup 0 94 put} if
- dup 1 get 65 eq {dup 1 94 put} if
+ dup length 2 exch sub exch putinterval
+ dup 0 get 65 eq {dup 0 94 put} if
+ dup 1 get 65 eq {dup 1 94 put} if
exch 8 add
- (0000000) 7 string copy dup 3 -1 roll 2 7 string cvrs
+ (0000000) 7 string copy dup 3 -1 roll 2 7 string cvrs
dup length 7 exch sub exch putinterval
} for
lalphanumeric (0000)
>> def
-
+
/alphanumeric <<
48 1 57 {dup 43 sub 5 tobin} for
fnc1 (01111)
@@ -20585,7 +27778,7 @@ begin
lnumeric (000)
liso646 (00100)
>> def
-
+
/iso646 <<
48 1 57 {dup 43 sub 5 tobin} for
fnc1 (01111)
@@ -20601,6 +27794,8 @@ begin
lalphanumeric (00100)
>> def
+} ctxdef
+
method (10) eq { % TODO: fixme
ais 0 get (11) eq ais 0 get (17) eq or {
vals 0 get
@@ -20615,6 +27810,7 @@ begin
] /cdf exch def
/ais ais 1 ais length 1 sub getinterval def
/vals vals 1 vals length 1 sub getinterval def
+ /fncs fncs 1 fncs length 1 sub getinterval def
} {
/cdf [ 1 0 1 1 ] def
} ifelse
@@ -20624,6 +27820,7 @@ begin
ais length 1 gt {/gpf [ gpf aload pop fnc1 ] def} if % TODO: check
/ais ais 1 ais length 1 sub getinterval def
/vals vals 1 vals length 1 sub getinterval def
+ /fncs fncs 1 fncs length 1 sub getinterval def
} {
/gpf [fnc1] def % TODO: check
} ifelse
@@ -20645,7 +27842,7 @@ begin
/ai90rem exch def
/nalpha 0 ai90rem {dup 65 ge exch 90 le and {1 add} if} forall def
/nnums 0 ai90rem {dup 48 ge exch 57 le and {1 add} if} forall def
- /mode nalpha nnums gt {(alpha)} {(numeric)} ifelse def
+ /mode nalpha nnums gt {(alpha)} { nalpha 0 eq {(numeric)} {(alphanumeric)} ifelse } ifelse def
nalpha nnums add ai90rem length ne {/mode (alphanumeric) def} if
/cdf [
cdf aload pop
@@ -20693,15 +27890,14 @@ begin
abits aload pop
] def
} ifelse
- mode (numeric) eq {
+ mode (alpha) ne {
/gpf [ ai90rem {} forall ais length 1 gt {fnc1} if ] def
} {
- /encs mode (alpha) eq {alpha} {alphanumeric} ifelse def
/in [ ai90rem {} forall ais length 1 gt {fnc1} if ] def
/out in length 6 mul array def
/j 0 def
0 1 in length 1 sub {
- in exch get encs exch get
+ in exch get alpha exch get
dup [ exch {48 sub} forall ] out exch j exch putinterval
length j add /j exch def
} for
@@ -20710,10 +27906,11 @@ begin
out 0 j getinterval aload pop
] def
/gpf [] def
- ais length 1 gt mode (alpha) ne or {/mode (numeric) def} if
+ ais length 1 gt {/mode (numeric) def} if
} ifelse
/ais ais 1 ais length 1 sub getinterval def
/vals vals 1 vals length 1 sub getinterval def
+ /fncs fncs 1 fncs length 1 sub getinterval def
ais length 0 ne {
ais1 (21) eq ais1 (8004) eq or {
/gpf [
@@ -20722,6 +27919,7 @@ begin
] def
/ais ais 1 ais length 1 sub getinterval def
/vals vals 1 vals length 1 sub getinterval def
+ /fncs fncs 1 fncs length 1 sub getinterval def
ais length 0 ne {/gpf [gpf aload pop fnc1] def} if
} if
} if
@@ -20733,24 +27931,6 @@ begin
/mode (numeric) def
} if
- % Pre-defined fixed length data field AIs
- % any AI whose prefix is not included in this table must be
- % terminated with "FNC1", even if it's fixed length
- /aifixed 23 dict def
- [
- 0 1 4 {} for
- ] {
- (00) 2 string copy dup dup 1 5 -1 roll 48 add put aifixed 3 1 roll put
- } forall
- [
- 11 1 20 {} for
- 23
- 31 1 36 {} for
- 41
- ] {
- 10 2 string cvrs dup aifixed 3 1 roll put
- } forall
-
% Append the remaining AI data
0 1 ais length 1 sub {
/i exch def
@@ -20761,7 +27941,7 @@ begin
dup gpf length ai [ exch {} forall ] putinterval
dup gpf length ai length add val [ exch {} forall ] putinterval
/gpf exch def
- i ais length 1 sub ne aifixed ai 0 2 getinterval known not and { % Append FNC1
+ i ais length 1 sub ne fncs i get and { % Append FNC1
gpf length 1 add array
dup 0 gpf putinterval
dup gpf length fnc1 put
@@ -20770,21 +27950,25 @@ begin
} for
% Calculate the number of bits remaining to the next valid symbol size
+{
+ /bitcapsmaps <<
+ /a [
+ [167 138 118 108 88 78 59]
+ [167 138 118 98 78]
+ [197 167 138 108 78]
+ ]
+ /b [
+ [ 336 296 256 208 160 104 56]
+ [ 768 648 536 416 304 208 152 112 72 32]
+ [1184 1016 840 672 496 352 264 208 152 96 56]
+ ]
+ >> def
+} ctxdef
+
/rembits {
/used exch def
ccversion (c) ne { % cc-a or cc-b
- <<
- /a [
- [167 138 118 108 88 78 59]
- [167 138 118 98 78]
- [197 167 138 108 78]
- ]
- /b [
- [ 336 296 256 208 160 104 56]
- [ 768 648 536 416 304 208 152 112 72 32]
- [1184 1016 840 672 496 352 264 208 152 96 56]
- ]
- >> ccversion get cccolumns 2 sub get /bitcaps exch def
+ /bitcaps bitcapsmaps ccversion get cccolumns 2 sub get def
-1 bitcaps {dup used ge {exch} if pop} forall
dup -1 ne {used sub} if
} {
@@ -20793,14 +27977,19 @@ begin
m 40 le {8 } if
m 41 ge m 160 le and {16} if
m 161 ge m 320 le and {32} if
- m 321 ge {64} if
+ m 321 ge m 833 le and {64} if % 833 = 900 - 3 - 64, where 900 = 30 rows x 30 cols limit
+ m 834 ge {32} if % Reduce to meet advertised "up to 2361 digits" (allows max 2372) within 900 limit
/eccws exch def
/m m eccws add 3 add def
- /c linwidth 52 sub 17 idiv def
- m c idiv 90 gt {/c c 1 add def} if
- /r m c div ceiling cvi def
- /tgt c r mul eccws sub 3 sub dup 5 idiv 6 mul exch 5 mod add 8 mul def
- used 8296 le {tgt used sub} {-1} ifelse
+ cccolumns 30 gt { /cccolumns 30 def } if
+ { % Loop until rows <= 30 or columns >= 30 (GS1 General Specifications 5.11.2.3)
+ m cccolumns div ceiling cvi 30 le cccolumns 30 ge or {exit} if
+ /cccolumns cccolumns 1 add def
+ } loop
+ /r m cccolumns div ceiling cvi def
+ r 3 lt { /r 3 def } if % GS1 General Specifications 5.11.2.3 "3 to 30 rows"
+ /tgt cccolumns r mul eccws sub 3 sub dup 5 idiv 6 mul exch 5 mod add 8 mul def
+ used 8304 le {tgt used sub} {-1} ifelse
} ifelse
dup -1 eq { % Upgrade CC-A to CC-B or CC-B to CC-C to fit
pop
@@ -20813,10 +28002,10 @@ begin
} {
/ccversion -1 def
} ifelse
- } ifelse
+ } ifelse
used rembits
} if
- } bind def
+ } def
/encode {
dup /raw ne {exch get} {pop} ifelse
@@ -20824,7 +28013,7 @@ begin
dup length exch
gpfenc exch j exch putinterval
/j exch j add def
- } bind def
+ } def
% Pre-compute alphanumeric and numeric runlengths and position of next ISO646-only characters
/numericruns [ gpf length {0} repeat 0 -1 ] def
@@ -20834,7 +28023,7 @@ begin
/i exch def
gpf i get
(00) 2 string copy
- dup 0 gpf i get dup fnc1 eq {pop 94} if put
+ dup 0 gpf i get dup fnc1 eq {pop 94} if put
i gpf length 1 sub lt {dup 1 gpf i 1 add get dup fnc1 eq {pop 94} if put} if
numeric exch known {
numericruns i numericruns i 2 add get 2 add put
@@ -20852,17 +28041,17 @@ begin
nextiso646only i nextiso646only i 1 add get 1 add put
} ifelse
} for
-
+
% Encode the general purpose field
- /gpfenc 8296 array def
+ /gpfenc 8304 array def % 8304 = (865 / 5) * 6 * 8, where 865 = 900 - 3 - 32
/i 0 def /j 0 def
{ % loop
i gpf length eq {exit} if
{ % not a loop but common exit point
-
+
mode (numeric) eq {
i gpf length 2 sub le {
- 2 string
+ 2 string
dup 0 gpf i get dup fnc1 eq {pop 94} if put
dup 1 gpf i 1 add get dup fnc1 eq {pop 94} if put
dup numeric exch known {
@@ -20871,7 +28060,7 @@ begin
exit
} if
pop
- lalphanumeric numeric encode
+ lalphanumeric numeric encode
/mode (alphanumeric) def
exit
} {
@@ -20888,13 +28077,13 @@ begin
/i i 1 add def
exit
} { % C1.FNC1
- 2 string dup 0 gpf i get put dup 1 94 put numeric encode
+ 2 string dup 0 gpf i get put dup 1 94 put numeric encode
/i i 1 add def
exit
} ifelse
} ifelse
} if
-
+
mode (alphanumeric) eq {
gpf i get fnc1 eq {
fnc1 alphanumeric encode
@@ -20921,7 +28110,7 @@ begin
/i i 1 add def
exit
} if
-
+
mode (iso646) eq {
gpf i get fnc1 eq {
fnc1 iso646 encode
@@ -20943,7 +28132,7 @@ begin
/i i 1 add def
exit
} if
-
+
} loop
} loop
/gpf gpfenc 0 j getinterval def
@@ -20953,38 +28142,41 @@ begin
pad length 0 gt {
0 5 pad length 1 sub { % Fill with 00100
/i exch def
- pad i [ 0 0 1 0 0 ] 0 pad length i sub 5 2 copy gt {exch} if pop getinterval putinterval
- } for
+ pad i [ 0 0 1 0 0 ] 0 pad length i sub 5 2 copy gt {exch} if pop getinterval putinterval
+ } for
mode (numeric) eq { % Prefix shift from numeric to ASCII
/pad [ 0 0 0 0 pad aload pop ] 0 pad length getinterval def
} if
- mode (alpha) eq { % Prefix FNC1
- /pad [ 1 1 1 1 1 pad aload pop ] 0 pad length getinterval def
+ mode (alpha) eq { % Prefix FNC1 + shift from numeric to ASCII
+ /pad [ 1 1 1 1 1 0 0 0 0 pad aload pop ] 0 pad length getinterval def
} if
} if
- % Concatinate fields
+ % Concatenate fields
/bits [
cdf aload pop
gpf aload pop
pad aload pop
] def
- ccversion (a) eq {
- /pwr928 [
- [ 0 0 0 0 0 0 1 ]
- 68 {7 array} repeat
- ] def
- 1 1 68 {
- /j exch def
- /v 0 def
- 6 -1 1 {
- /i exch def
- /v pwr928 j 1 sub get i get 2 mul v 928 idiv add def
- pwr928 j get i v 928 mod put
- } for
- pwr928 j get 0 pwr928 j 1 sub get 0 get 2 mul v 928 idiv add put
+{
+ /pwr928 [
+ [ 0 0 0 0 0 0 1 ]
+ 68 {7 array} repeat
+ ] def
+ 1 1 68 {
+ /j exch def
+ /v 0 def
+ 6 -1 1 {
+ /i exch def
+ /v pwr928 j 1 sub get i get 2 mul v 928 idiv add def
+ pwr928 j get i v 928 mod put
} for
+ pwr928 j get 0 pwr928 j 1 sub get 0 get 2 mul v 928 idiv add put
+ } for
+} ctxdef
+
+ ccversion (a) eq {
/cws [ 28 {0} repeat ] def
/b 0 def /c 0 def
{ % loop
@@ -21007,7 +28199,7 @@ begin
/i exch def
cs i 1 sub 2 copy get cs i get 928 idiv add put
cs i 2 copy get 928 mod put
- } for
+ } for
/b b bsl add def
/c c csl add def
} loop
@@ -21019,6 +28211,7 @@ begin
dup length 4 exch sub exch putinterval
barcode i 4 mul 3 -1 roll putinterval
} for
+ options (parse) undef
options (dontdraw) true put
options (cca) true put
options (columns) cccolumns put
@@ -21032,6 +28225,7 @@ begin
bits i 8 mul 8 getinterval 0 exch {add 2 mul} forall 2 idiv
barcode exch i exch put
} for
+ options (parse) undef
options (dontdraw) true put
options (ccb) true put
options (columns) cccolumns put
@@ -21045,18 +28239,24 @@ begin
bits i 8 mul 8 getinterval 0 exch {add 2 mul} forall 2 idiv
barcode exch i exch put
} for
+ options (parse) undef
options (dontdraw) true put
options (ccc) true put
options (columns) cccolumns put
+ options (eclevel) eccws ln 2 ln div cvi 1 sub put
/args barcode options //pdf417 exec def
} if
args
dontdraw not //renmatrix if
+ //unloadctx exec
+
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/gs1-cc dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -21065,18 +28265,19 @@ end
% --END ENCODER gs1-cc--
% --BEGIN ENCODER ean13composite--
-% --REQUIRES preamble raiseerror renlinear renmatrix ean5 ean2 ean13 micropdf417 pdf417 gs1-cc--
+% --REQUIRES preamble loadctx unloadctx raiseerror parseinput gs1process renlinear renmatrix ean5 ean2 ean13 micropdf417 pdf417 gs1-cc--
% --DESC: EAN-13 Composite
% --EXAM: 2112345678900|(99)1234-abcd
% --EXOP: includetext
% --RNDR: renlinear renmatrix
-%%BeginResource: uk.co.terryburton.bwipp ean13composite 0.0 2017040400 82022 81974
-%%BeginData: 72 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp ean13composite 0.0 2022082100 105183 107941
+%%BeginData: 159 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /ean13 dup /uk.co.terryburton.bwipp findresource put
dup /gs1-cc dup /uk.co.terryburton.bwipp findresource put
+dup /gs1process dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
begin
@@ -21087,8 +28288,13 @@ begin
/options exch def
/barcode exch def
+ /ctx null def
/dontdraw false def
-
+ /usematrix false def
+ /parse false def
+ /dontlint false def
+ /lintreqs true def
+
% Parse the input options
options type /stringtype eq {
1 dict begin
@@ -21100,6 +28306,8 @@ begin
} if
options {def} forall
+ dontdraw { /usematrix true def } if
+
% Split the linear and composite parts
barcode (|) search {
/linear exch def
@@ -21109,38 +28317,117 @@ begin
pop
} ifelse
- gsave
-
options (lintype) (ean13) put
options (inkspread) (0) put
options (dontdraw) true put
+ options (dontlint) true put
+
+ % Lint with a fake AI (01)
+ comp length 18 add string
+ dup 0 ((01)00000000000000) putinterval
+ dup 18 comp putinterval
+ /ai //gs1process exec pop pop pop
% Plot the linear part
- linear options //ean13 exec //renlinear exec
+ linear options //ean13 exec
+ usematrix not {
+ gsave
+
+ //renlinear exec
+
+ % Plot the separator
+ -1 72 rmoveto <<
+ /ren //renmatrix
+ /pixs [
+ 0 1 93 {0} repeat 1 0
+ 1 0 93 {0} repeat 0 1
+ 0 1 93 {0} repeat 1 0
+ ]
+ /pixx 97
+ /pixy 3
+ /height 6 72 div
+ /width 97 72 div
+ /opt options
+ >> //renmatrix exec
+
+ % Plot the 2D part
+ -2 6 rmoveto comp options //gs1-cc exec //renmatrix exec
+
+ grestore
+ } {
+ /linsym exch def
+ /sbs linsym /sbs get def
+ /bhs linsym /bhs get def
+ /bbs linsym /bbs get def
+ /linwidth 0 sbs {cvi add} forall def
+
+ /compsym comp options //gs1-cc exec def
+ /ccpixs compsym /pixs get def
+ /ccpixx compsym /pixx get def
+
+ /linpad [ ccpixx 97 sub {0} repeat ] def
+
+ /diff linwidth linpad length add 2 add ccpixx sub def % An add-on can make linear wider than composite
+ diff 0 gt { % Left align composite
+ /ccrpad [ diff {0} repeat ] def
+ /pixx ccpixx diff add def
+ } {
+ /ccrpad 0 array def
+ /pixx ccpixx def
+ } ifelse
- % Plot the separator
- -1 72 rmoveto <<
- /ren //renmatrix
/pixs [
- 0 1 93 {0} repeat 1 0
- 1 0 93 {0} repeat 0 1
- 0 1 93 {0} repeat 1 0
- ]
- /pixx 97
- /pixy 3
- /height 6 72 div
- /width 97 72 div
- /opt options
- >> //renmatrix exec
+ 0 ccpixx ccpixs length 1 sub {
+ /i exch def
+ 2 { ccpixs i ccpixx getinterval aload pop ccrpad aload pop } repeat
+ } for
+ 2 { linpad aload pop 0 1 93 {0} repeat 1 0 ccrpad aload pop } repeat
+ 2 { linpad aload pop 1 0 93 {0} repeat 0 1 ccrpad aload pop } repeat
+ 2 { linpad aload pop 0 1 93 {0} repeat 1 0 ccrpad aload pop } repeat
+ 71 -1 0 {
+ /y exch def
+ linpad aload pop
+ 0
+ 0 1 sbs length 1 sub {
+ /i exch def
+ i 2 mod 0 eq {
+ % Don't print when bbs > y || (bbs + bhs) < y (i.e. add-on or includetext offsets)
+ bbs i 2 idiv get 72 mul dup y gt exch bhs i 2 idiv get 72 mul add y lt or {
+ sbs i get cvi {0} repeat
+ } {
+ sbs i get cvi {1} repeat
+ } ifelse
+ } {
+ sbs i get cvi {0} repeat
+ } ifelse
+ } for
+ 0
+ } for
+ ] def
- % Plot the 2D part
- -2 6 rmoveto comp options //gs1-cc exec //renmatrix exec
+ /pixy pixs length pixx idiv def
+ <<
+ /ren //renmatrix
+ /pixs pixs
+ /pixx pixx
+ /pixy pixy
+ /height pixy 72 div
+ /width pixx 72 div
+ /opt options
+ >>
- grestore
+ dontdraw not {
+ gsave
+ //renmatrix exec
+ grestore
+ } if
+ } ifelse
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/ean13composite dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -21149,18 +28436,19 @@ end
% --END ENCODER ean13composite--
% --BEGIN ENCODER ean8composite--
-% --REQUIRES preamble raiseerror renlinear renmatrix ean5 ean2 ean8 micropdf417 pdf417 gs1-cc--
+% --REQUIRES preamble loadctx unloadctx raiseerror parseinput gs1process renlinear renmatrix ean5 ean2 ean8 micropdf417 pdf417 gs1-cc--
% --DESC: EAN-8 Composite
% --EXAM: 02345673|(21)A12345678
% --EXOP: includetext
% --RNDR: renlinear renmatrix
-%%BeginResource: uk.co.terryburton.bwipp ean8composite 0.0 2017040400 82363 82316
-%%BeginData: 75 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp ean8composite 0.0 2022082100 109084 108283
+%%BeginData: 162 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /ean8 dup /uk.co.terryburton.bwipp findresource put
dup /gs1-cc dup /uk.co.terryburton.bwipp findresource put
+dup /gs1process dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
begin
@@ -21171,8 +28459,13 @@ begin
/options exch def
/barcode exch def
+ /ctx null def
/dontdraw false def
-
+ /usematrix false def
+ /parse false def
+ /dontlint false def
+ /lintreqs true def
+
% Parse the input options
options type /stringtype eq {
1 dict begin
@@ -21184,6 +28477,8 @@ begin
} if
options {def} forall
+ dontdraw { /usematrix true def } if
+
% Split the linear and composite parts
barcode (|) search {
/linear exch def
@@ -21193,41 +28488,120 @@ begin
pop
} ifelse
- gsave
-
% Get the result of encoding with ean8 and gs1-cc
options (lintype) (ean8) put
options (inkspread) (0) put
options (dontdraw) true put
+ options (dontlint) true put
+
+ % Lint with a fake AI (01)
+ comp length 18 add string
+ dup 0 ((01)00000000000000) putinterval
+ dup 18 comp putinterval
+ /ai //gs1process exec pop pop pop
% Plot the linear part
- linear options //ean8 exec //renlinear exec
+ linear options //ean8 exec
+ usematrix not {
+ gsave
+
+ //renlinear exec
+
+ % Plot the separator
+ -1 72 rmoveto <<
+ /ren //renmatrix
+ /pixs [
+ 0 1 65 {0} repeat 1 0
+ 1 0 65 {0} repeat 0 1
+ 0 1 65 {0} repeat 1 0
+ ]
+ /pixx 69
+ /pixy 3
+ /height 6 72 div
+ /width 69 72 div
+ /opt options
+ >> //renmatrix exec
+
+ % Plot the 2D part
+ comp options //gs1-cc exec
+ dup (pixx) get 69 exch sub 6 rmoveto
+ //renmatrix exec
+
+ grestore
+ } {
+ /linsym exch def
+ /sbs linsym /sbs get def
+ /bhs linsym /bhs get def
+ /bbs linsym /bbs get def
+ /linwidth 0 sbs {cvi add} forall def
+
+ /compsym comp options //gs1-cc exec def
+ /ccpixs compsym /pixs get def
+ /ccpixx compsym /pixx get def
+
+ /linpad [ ccpixx 69 sub {0} repeat ] def
+
+ /diff linwidth linpad length add 2 add ccpixx sub def % An add-on can make linear wider than composite
+ diff 0 gt { % Left align composite
+ /ccrpad [ diff {0} repeat ] def
+ /pixx ccpixx diff add def
+ } {
+ /ccrpad 0 array def
+ /pixx ccpixx def
+ } ifelse
- % Plot the separator
- -1 72 rmoveto <<
- /ren //renmatrix
/pixs [
- 0 1 65 {0} repeat 1 0
- 1 0 65 {0} repeat 0 1
- 0 1 65 {0} repeat 1 0
- ]
- /pixx 69
- /pixy 3
- /height 6 72 div
- /width 69 72 div
- /opt options
- >> //renmatrix exec
+ 0 ccpixx ccpixs length 1 sub {
+ /i exch def
+ 2 { ccpixs i ccpixx getinterval aload pop ccrpad aload pop } repeat
+ } for
+ 2 { linpad aload pop 0 1 65 {0} repeat 1 0 ccrpad aload pop } repeat
+ 2 { linpad aload pop 1 0 65 {0} repeat 0 1 ccrpad aload pop } repeat
+ 2 { linpad aload pop 0 1 65 {0} repeat 1 0 ccrpad aload pop } repeat
+ 71 -1 0 {
+ /y exch def
+ linpad aload pop
+ 0
+ 0 1 sbs length 1 sub {
+ /i exch def
+ i 2 mod 0 eq {
+ % Don't print when bbs > y || (bbs + bhs) < y (i.e. add-on or includetext offsets)
+ bbs i 2 idiv get 72 mul dup y gt exch bhs i 2 idiv get 72 mul add y lt or {
+ sbs i get cvi {0} repeat
+ } {
+ sbs i get cvi {1} repeat
+ } ifelse
+ } {
+ sbs i get cvi {0} repeat
+ } ifelse
+ } for
+ 0
+ } for
+ ] def
- % Plot the 2D part
- comp options //gs1-cc exec
- dup (pixx) get 69 exch sub 6 rmoveto
- //renmatrix exec
+ /pixy pixs length pixx idiv def
+ <<
+ /ren //renmatrix
+ /pixs pixs
+ /pixx pixx
+ /pixy pixy
+ /height pixy 72 div
+ /width pixx 72 div
+ /opt options
+ >>
- grestore
+ dontdraw not {
+ gsave
+ //renmatrix exec
+ grestore
+ } if
+ } ifelse
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/ean8composite dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -21236,18 +28610,19 @@ end
% --END ENCODER ean8composite--
% --BEGIN ENCODER upcacomposite--
-% --REQUIRES preamble raiseerror renlinear renmatrix ean5 ean2 upca micropdf417 pdf417 gs1-cc--
+% --REQUIRES preamble loadctx unloadctx raiseerror parseinput gs1process renlinear renmatrix ean5 ean2 upca micropdf417 pdf417 gs1-cc--
% --DESC: UPC-A Composite
% --EXAM: 416000336108|(99)1234-abcd
% --EXOP: includetext
% --RNDR: renlinear renmatrix
-%%BeginResource: uk.co.terryburton.bwipp upcacomposite 0.0 2017040400 82104 82161
-%%BeginData: 72 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp upcacomposite 0.0 2022082100 105177 107936
+%%BeginData: 159 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-2 dict
+10 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /upca dup /uk.co.terryburton.bwipp findresource put
dup /gs1-cc dup /uk.co.terryburton.bwipp findresource put
+dup /gs1process dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
begin
@@ -21258,8 +28633,13 @@ begin
/options exch def
/barcode exch def
+ /ctx null def
/dontdraw false def
-
+ /usematrix false def
+ /parse false def
+ /dontlint false def
+ /lintreqs true def
+
% Parse the input options
options type /stringtype eq {
1 dict begin
@@ -21271,6 +28651,8 @@ begin
} if
options {def} forall
+ dontdraw { /usematrix true def } if
+
% Split the linear and composite parts
barcode (|) search {
/linear exch def
@@ -21280,38 +28662,117 @@ begin
pop
} ifelse
- gsave
-
options (lintype) (ean13) put
options (inkspread) (0) put
options (dontdraw) true put
+ options (dontlint) true put
+
+ % Lint with a fake AI (01)
+ comp length 18 add string
+ dup 0 ((01)00000000000000) putinterval
+ dup 18 comp putinterval
+ /ai //gs1process exec pop pop pop
% Plot the linear part
- linear options //upca exec //renlinear exec
+ linear options //upca exec
+ usematrix not {
+ gsave
+
+ //renlinear exec
+
+ % Plot the separator
+ -1 72 rmoveto <<
+ /ren //renmatrix
+ /pixs [
+ 0 1 93 {0} repeat 1 0
+ 1 0 93 {0} repeat 0 1
+ 0 1 93 {0} repeat 1 0
+ ]
+ /pixx 97
+ /pixy 3
+ /height 6 72 div
+ /width 97 72 div
+ /opt options
+ >> //renmatrix exec
+
+ % Plot the 2D part
+ -2 6 rmoveto comp options //gs1-cc exec //renmatrix exec
+
+ grestore
+ } {
+ /linsym exch def
+ /sbs linsym /sbs get def
+ /bhs linsym /bhs get def
+ /bbs linsym /bbs get def
+ /linwidth 0 sbs {cvi add} forall def
+
+ /compsym comp options //gs1-cc exec def
+ /ccpixs compsym /pixs get def
+ /ccpixx compsym /pixx get def
+
+ /linpad [ ccpixx 97 sub {0} repeat ] def
+
+ /diff linwidth linpad length add 2 add ccpixx sub def % An add-on can make linear wider than composite
+ diff 0 gt { % Left align composite
+ /ccrpad [ diff {0} repeat ] def
+ /pixx ccpixx diff add def
+ } {
+ /ccrpad 0 array def
+ /pixx ccpixx def
+ } ifelse
- % Plot the separator
- -1 72 rmoveto <<
- /ren //renmatrix
/pixs [
- 0 1 93 {0} repeat 1 0
- 1 0 93 {0} repeat 0 1
- 0 1 93 {0} repeat 1 0
- ]
- /pixx 97
- /pixy 3
- /height 6 72 div
- /width 97 72 div
- /opt options
- >> //renmatrix exec
+ 0 ccpixx ccpixs length 1 sub {
+ /i exch def
+ 2 { ccpixs i ccpixx getinterval aload pop ccrpad aload pop } repeat
+ } for
+ 2 { linpad aload pop 0 1 93 {0} repeat 1 0 ccrpad aload pop } repeat
+ 2 { linpad aload pop 1 0 93 {0} repeat 0 1 ccrpad aload pop } repeat
+ 2 { linpad aload pop 0 1 93 {0} repeat 1 0 ccrpad aload pop } repeat
+ 71 -1 0 {
+ /y exch def
+ linpad aload pop
+ 0
+ 0 1 sbs length 1 sub {
+ /i exch def
+ i 2 mod 0 eq {
+ % Don't print when bbs > y || (bbs + bhs) < y (i.e. add-on or includetext offsets)
+ bbs i 2 idiv get 72 mul dup y gt exch bhs i 2 idiv get 72 mul add y lt or {
+ sbs i get cvi {0} repeat
+ } {
+ sbs i get cvi {1} repeat
+ } ifelse
+ } {
+ sbs i get cvi {0} repeat
+ } ifelse
+ } for
+ 0
+ } for
+ ] def
- % Plot the 2D part
- -2 6 rmoveto comp options //gs1-cc exec //renmatrix exec
+ /pixy pixs length pixx idiv def
+ <<
+ /ren //renmatrix
+ /pixs pixs
+ /pixx pixx
+ /pixy pixy
+ /height pixy 72 div
+ /width pixx 72 div
+ /opt options
+ >>
- grestore
+ dontdraw not {
+ gsave
+ //renmatrix exec
+ grestore
+ } if
+ } ifelse
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/upcacomposite dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -21320,18 +28781,19 @@ end
% --END ENCODER upcacomposite--
% --BEGIN ENCODER upcecomposite--
-% --REQUIRES preamble raiseerror renlinear renmatrix ean5 ean2 upce micropdf417 pdf417 gs1-cc--
+% --REQUIRES preamble loadctx unloadctx raiseerror parseinput gs1process renlinear renmatrix ean5 ean2 upce micropdf417 pdf417 gs1-cc--
% --DESC: UPC-E Composite
% --EXAM: 00123457|(15)021231
% --EXOP: includetext
% --RNDR: renlinear renmatrix
-%%BeginResource: uk.co.terryburton.bwipp upcecomposite 0.0 2017040400 83282 83120
-%%BeginData: 87 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp upcecomposite 0.0 2022082100 108608 104503
+%%BeginData: 159 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-2 dict
+10 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /upce dup /uk.co.terryburton.bwipp findresource put
dup /gs1-cc dup /uk.co.terryburton.bwipp findresource put
+dup /gs1process dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
begin
@@ -21342,8 +28804,13 @@ begin
/options exch def
/barcode exch def
+ /ctx null def
/dontdraw false def
-
+ /usematrix false def
+ /parse false def
+ /dontlint false def
+ /lintreqs true def
+
% Parse the input options
options type /stringtype eq {
1 dict begin
@@ -21355,6 +28822,8 @@ begin
} if
options {def} forall
+ dontdraw { /usematrix true def } if
+
% Split the linear and composite parts
barcode (|) search {
/linear exch def
@@ -21364,53 +28833,117 @@ begin
pop
} ifelse
- % Define the separator
- /sep <<
- /ren //renmatrix
- /pixs [
- 0 1 49 {0} repeat 1 0
- 1 0 49 {0} repeat 0 1
- 0 1 49 {0} repeat 1 0
- ]
- /pixx 53
- /pixy 3
- /height 6 72 div
- /width 53 72 div
- /opt options
- >> def
-
- gsave
-
options (lintype) (upce) put
options (inkspread) (0) put
options (dontdraw) true put
+ options (dontlint) true put
+
+ % Lint with a fake AI (01)
+ comp length 18 add string
+ dup 0 ((01)00000000000000) putinterval
+ dup 18 comp putinterval
+ /ai //gs1process exec pop pop pop
% Plot the linear part
- linear options //upce exec //renlinear exec
+ linear options //upce exec
+ usematrix not {
+ gsave
+
+ //renlinear exec
+
+ % Plot the separator
+ -1 72 rmoveto <<
+ /ren //renmatrix
+ /pixs [
+ 0 1 49 {0} repeat 1 0
+ 1 0 49 {0} repeat 0 1
+ 0 1 49 {0} repeat 1 0
+ ]
+ /pixx 53
+ /pixy 3
+ /height 6 72 div
+ /width 53 72 div
+ /opt options
+ >> //renmatrix exec
+
+ % Plot the 2D part
+ -2 6 rmoveto comp options //gs1-cc exec //renmatrix exec
+
+ grestore
+ } {
+ /linsym exch def
+ /sbs linsym /sbs get def
+ /bhs linsym /bhs get def
+ /bbs linsym /bbs get def
+ /linwidth 0 sbs {cvi add} forall def
+
+ /compsym comp options //gs1-cc exec def
+ /ccpixs compsym /pixs get def
+ /ccpixx compsym /pixx get def
+
+ /linpad [ ccpixx 53 sub {0} repeat ] def
+
+ /diff linwidth linpad length add 2 add ccpixx sub def % An add-on can make linear wider than composite
+ diff 0 gt { % Left align composite
+ /ccrpad [ diff {0} repeat ] def
+ /pixx ccpixx diff add def
+ } {
+ /ccrpad 0 array def
+ /pixx ccpixx def
+ } ifelse
- % Plot the separator
- -1 72 rmoveto <<
- /ren //renmatrix
/pixs [
- 0 1 49 {0} repeat 1 0
- 1 0 49 {0} repeat 0 1
- 0 1 49 {0} repeat 1 0
- ]
- /pixx 53
- /pixy 3
- /height 6 72 div
- /width 53 72 div
- /opt options
- >> //renmatrix exec
+ 0 ccpixx ccpixs length 1 sub {
+ /i exch def
+ 2 { ccpixs i ccpixx getinterval aload pop ccrpad aload pop } repeat
+ } for
+ 2 { linpad aload pop 0 1 49 {0} repeat 1 0 ccrpad aload pop } repeat
+ 2 { linpad aload pop 1 0 49 {0} repeat 0 1 ccrpad aload pop } repeat
+ 2 { linpad aload pop 0 1 49 {0} repeat 1 0 ccrpad aload pop } repeat
+ 71 -1 0 {
+ /y exch def
+ linpad aload pop
+ 0
+ 0 1 sbs length 1 sub {
+ /i exch def
+ i 2 mod 0 eq {
+ % Don't print when bbs > y || (bbs + bhs) < y (i.e. add-on or includetext offsets)
+ bbs i 2 idiv get 72 mul dup y gt exch bhs i 2 idiv get 72 mul add y lt or {
+ sbs i get cvi {0} repeat
+ } {
+ sbs i get cvi {1} repeat
+ } ifelse
+ } {
+ sbs i get cvi {0} repeat
+ } ifelse
+ } for
+ 0
+ } for
+ ] def
- % Plot the 2D part
- -2 6 rmoveto comp options //gs1-cc exec //renmatrix exec
+ /pixy pixs length pixx idiv def
+ <<
+ /ren //renmatrix
+ /pixs pixs
+ /pixx pixx
+ /pixy pixy
+ /height pixy 72 div
+ /width pixx 72 div
+ /opt options
+ >>
- grestore
+ dontdraw not {
+ gsave
+ //renmatrix exec
+ grestore
+ } if
+ } ifelse
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/upcecomposite dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -21419,18 +28952,19 @@ end
% --END ENCODER upcecomposite--
% --BEGIN ENCODER databaromnicomposite--
-% --REQUIRES preamble raiseerror renlinear renmatrix databaromni micropdf417 pdf417 gs1-cc--
+% --REQUIRES preamble loadctx unloadctx raiseerror parseinput gs1process renlinear renmatrix databaromni micropdf417 pdf417 gs1-cc--
% --DESC: GS1 DataBar Omnidirectional Composite
% --EXAM: (01)03612345678904|(11)990102
% --EXOP:
% --RNDR: renlinear renmatrix
-%%BeginResource: uk.co.terryburton.bwipp databaromnicomposite 0.0 2017040400 82965 86277
-%%BeginData: 100 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp databaromnicomposite 0.0 2022082100 94570 94434
+%%BeginData: 114 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-2 dict
+10 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /databaromni dup /uk.co.terryburton.bwipp findresource put
dup /gs1-cc dup /uk.co.terryburton.bwipp findresource put
+dup /gs1process dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
begin
@@ -21441,8 +28975,12 @@ begin
/options exch def
/barcode exch def
+ /ctx null def
/dontdraw false def
-
+ /parse false def
+ /dontlint false def
+ /lintreqs true def
+
% Parse the input options
options type /stringtype eq {
1 dict begin
@@ -21469,6 +29007,13 @@ begin
options (linkage) true put
options (inkspread) (0) put
options (dontdraw) true put
+ options (dontlint) true put
+
+ % Lint the combined AI element strings
+ linear length comp length add string
+ dup 0 linear putinterval
+ dup linear length comp putinterval
+ /ai //gs1process exec pop pop pop
% Plot the linear part
linear options //databaromni exec
@@ -21497,7 +29042,7 @@ begin
% Right shifted module for value 3 finder
sep fp [ 0 0 0 0 0 0 0 0 0 0 1 0 0 ] putinterval
} if
- } bind def
+ } def
mark
0 linsbs {1 index 1 eq {{0}} {{1}} ifelse repeat} forall
counttomark 1 sub array astore /bot exch def pop pop
@@ -21522,7 +29067,9 @@ begin
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/databaromnicomposite dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -21531,18 +29078,19 @@ end
% --END ENCODER databaromnicomposite--
% --BEGIN ENCODER databarstackedcomposite--
-% --REQUIRES preamble raiseerror renlinear renmatrix databaromni databarstacked micropdf417 pdf417 gs1-cc--
+% --REQUIRES preamble loadctx unloadctx raiseerror parseinput gs1process renlinear renmatrix databaromni databarstacked micropdf417 pdf417 gs1-cc--
% --DESC: GS1 DataBar Stacked Composite
% --EXAM: (01)03412345678900|(17)010200
% --EXOP:
% --RNDR: renlinear renmatrix
-%%BeginResource: uk.co.terryburton.bwipp databarstackedcomposite 0.0 2017040400 88569 84684
-%%BeginData: 96 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp databarstackedcomposite 0.0 2022082100 96302 96201
+%%BeginData: 110 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-2 dict
+10 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /databarstacked dup /uk.co.terryburton.bwipp findresource put
dup /gs1-cc dup /uk.co.terryburton.bwipp findresource put
+dup /gs1process dup /uk.co.terryburton.bwipp findresource put
dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
begin
/databarstackedcomposite {
@@ -21552,8 +29100,12 @@ begin
/options exch def
/barcode exch def
+ /ctx null def
/dontdraw false def
-
+ /parse false def
+ /dontlint false def
+ /lintreqs true def
+
% Parse the input options
options type /stringtype eq {
1 dict begin
@@ -21580,6 +29132,13 @@ begin
options (linkage) true put
options (inkspread) (0) put
options (dontdraw) true put
+ options (dontlint) true put
+
+ % Lint the combined AI element strings
+ linear length comp length add string
+ dup 0 linear putinterval
+ dup linear length comp putinterval
+ /ai //gs1process exec pop pop pop
% Plot the linear part
linear options //databarstacked exec
@@ -21608,7 +29167,7 @@ begin
% Right shifted module for value 3 finder
sep fp [ 0 0 0 0 0 0 0 0 0 0 1 0 0 ] putinterval
} if
- } bind def
+ } def
/sep [ bot {1 exch sub} forall ] def
sep 0 [ 0 0 0 0 ] putinterval
sep sep length 4 sub [ 0 0 0 0 ] putinterval
@@ -21630,7 +29189,9 @@ begin
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/databarstackedcomposite dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -21639,18 +29200,19 @@ end
% --END ENCODER databarstackedcomposite--
% --BEGIN ENCODER databarstackedomnicomposite--
-% --REQUIRES preamble raiseerror renlinear renmatrix databaromni databarstackedomni micropdf417 pdf417 gs1-cc--
+% --REQUIRES preamble loadctx unloadctx raiseerror parseinput gs1process renlinear renmatrix databaromni databarstackedomni micropdf417 pdf417 gs1-cc--
% --DESC: GS1 DataBar Stacked Omnidirectional Composite
% --EXAM: (01)03612345678904|(11)990102
% --EXOP:
% --RNDR: renlinear renmatrix
-%%BeginResource: uk.co.terryburton.bwipp databarstackedomnicomposite 0.0 2017040400 88645 84756
-%%BeginData: 96 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp databarstackedomnicomposite 0.0 2022082100 96354 96225
+%%BeginData: 110 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-2 dict
+10 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /databarstackedomni dup /uk.co.terryburton.bwipp findresource put
dup /gs1-cc dup /uk.co.terryburton.bwipp findresource put
+dup /gs1process dup /uk.co.terryburton.bwipp findresource put
dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
begin
/databarstackedomnicomposite {
@@ -21660,8 +29222,12 @@ begin
/options exch def
/barcode exch def
+ /ctx null def
/dontdraw false def
-
+ /parse false def
+ /dontlint false def
+ /lintreqs true def
+
% Parse the input options
options type /stringtype eq {
1 dict begin
@@ -21688,6 +29254,13 @@ begin
options (linkage) true put
options (inkspread) (0) put
options (dontdraw) true put
+ options (dontlint) true put
+
+ % Lint the combined AI element strings
+ linear length comp length add string
+ dup 0 linear putinterval
+ dup linear length comp putinterval
+ /ai //gs1process exec pop pop pop
% Plot the linear part
linear options //databarstackedomni exec
@@ -21716,9 +29289,9 @@ begin
% Right shifted module for value 3 finder
sep fp [ 0 0 0 0 0 0 0 0 0 0 1 0 0 ] putinterval
} if
- } bind def
+ } def
/sep [ bot {1 exch sub} forall ] def
- sep 0 [ 0 0 0 ] putinterval
+ sep 0 [ 0 0 0 0 ] putinterval
sep sep length 4 sub [ 0 0 0 0 ] putinterval
18 sepfinder
0 linheight rmoveto <<
@@ -21738,7 +29311,9 @@ begin
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/databarstackedomnicomposite dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -21747,18 +29322,19 @@ end
% --END ENCODER databarstackedomnicomposite--
% --BEGIN ENCODER databartruncatedcomposite--
-% --REQUIRES preamble raiseerror renlinear renmatrix databaromni databartruncated micropdf417 pdf417 gs1-cc--
+% --REQUIRES preamble loadctx unloadctx raiseerror parseinput gs1process renlinear renmatrix databaromni databartruncated micropdf417 pdf417 gs1-cc--
% --DESC: GS1 DataBar Truncated Composite
% --EXAM: (01)03612345678904|(11)990102
% --EXOP:
% --RNDR: renlinear renmatrix
-%%BeginResource: uk.co.terryburton.bwipp databartruncatedcomposite 0.0 2017040400 89639 85738
-%%BeginData: 100 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp databartruncatedcomposite 0.0 2022082100 97436 97319
+%%BeginData: 114 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-2 dict
+10 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /databartruncated dup /uk.co.terryburton.bwipp findresource put
dup /gs1-cc dup /uk.co.terryburton.bwipp findresource put
+dup /gs1process dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
begin
@@ -21769,8 +29345,12 @@ begin
/options exch def
/barcode exch def
+ /ctx null def
/dontdraw false def
-
+ /parse false def
+ /dontlint false def
+ /lintreqs true def
+
% Parse the input options
options type /stringtype eq {
1 dict begin
@@ -21797,6 +29377,13 @@ begin
options (linkage) true put
options (inkspread) (0) put
options (dontdraw) true put
+ options (dontlint) true put
+
+ % Lint the combined AI element strings
+ linear length comp length add string
+ dup 0 linear putinterval
+ dup linear length comp putinterval
+ /ai //gs1process exec pop pop pop
% Plot the linear part
linear options //databartruncated exec
@@ -21825,7 +29412,7 @@ begin
% Right shifted module for value 3 finder
sep fp [ 0 0 0 0 0 0 0 0 0 0 1 0 0 ] putinterval
} if
- } bind def
+ } def
mark
0 linsbs {1 index 1 eq {{0}} {{1}} ifelse repeat} forall
counttomark 1 sub array astore /bot exch def pop pop
@@ -21850,7 +29437,9 @@ begin
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/databartruncatedcomposite dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -21859,18 +29448,19 @@ end
% --END ENCODER databartruncatedcomposite--
% --BEGIN ENCODER databarlimitedcomposite--
-% --REQUIRES preamble raiseerror renlinear renmatrix databarlimited micropdf417 pdf417 gs1-cc--
+% --REQUIRES preamble loadctx unloadctx raiseerror parseinput gs1process renlinear renmatrix databarlimited micropdf417 pdf417 gs1-cc--
% --DESC: GS1 DataBar Limited Composite
-% --EXAM: (01)03512345678907|(21)abcdefghijklmnopqrstuv
+% --EXAM: (01)03512345678907|(21)abcdefghijklmnopqrst
% --EXOP:
% --RNDR: renlinear renmatrix
-%%BeginResource: uk.co.terryburton.bwipp databarlimitedcomposite 0.0 2017040400 79414 79211
-%%BeginData: 79 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp databarlimitedcomposite 0.0 2022082100 87443 90776
+%%BeginData: 93 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-2 dict
+10 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /databarlimited dup /uk.co.terryburton.bwipp findresource put
dup /gs1-cc dup /uk.co.terryburton.bwipp findresource put
+dup /gs1process dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
begin
@@ -21881,8 +29471,12 @@ begin
/options exch def
/barcode exch def
+ /ctx null def
/dontdraw false def
-
+ /parse false def
+ /dontlint false def
+ /lintreqs true def
+
% Parse the input options
options type /stringtype eq {
1 dict begin
@@ -21909,6 +29503,13 @@ begin
options (linkage) true put
options (inkspread) (0) put
options (dontdraw) true put
+ options (dontlint) true put
+
+ % Lint the combined AI element strings
+ linear length comp length add string
+ dup 0 linear putinterval
+ dup linear length comp putinterval
+ /ai //gs1process exec pop pop pop
% Plot the linear part
linear options //databarlimited exec
@@ -21921,7 +29522,7 @@ begin
1 linsbs {1 index 0 eq {{1}} {{0}} ifelse repeat} forall
counttomark 1 sub array astore /sep exch def pop pop
sep 0 [0 0 0] putinterval
- sep sep length 4 sub [0 0 0 0] putinterval
+ sep sep length 9 sub [0 0 0 0 0 0 0 0 0] putinterval % 4 + 5 right guard spaces
0 linheight rmoveto <<
/ren //renmatrix
/pixs sep
@@ -21933,15 +29534,17 @@ begin
>> //renmatrix exec
% Plot the 2D part
- comp options //gs1-cc exec
- dup (pixx) get 72 exch sub 1 rmoveto
+ comp options //gs1-cc exec
+ dup (pixx) get 72 exch sub 1 rmoveto
//renmatrix exec
grestore
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/databarlimitedcomposite dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -21950,18 +29553,19 @@ end
% --END ENCODER databarlimitedcomposite--
% --BEGIN ENCODER databarexpandedcomposite--
-% --REQUIRES preamble raiseerror renlinear renmatrix databarexpanded micropdf417 pdf417 gs1-cc--
+% --REQUIRES preamble loadctx unloadctx raiseerror parseinput gs1process renlinear renmatrix databarexpanded micropdf417 pdf417 gs1-cc--
% --DESC: GS1 DataBar Expanded Composite
% --EXAM: (01)93712345678904(3103)001234|(91)1A2B3C4D5E
% --EXOP:
% --RNDR: renlinear renmatrix
-%%BeginResource: uk.co.terryburton.bwipp databarexpandedcomposite 0.0 2017040400 85836 82285
-%%BeginData: 98 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp databarexpandedcomposite 0.0 2022082100 93873 93874
+%%BeginData: 112 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-2 dict
+10 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /databarexpanded dup /uk.co.terryburton.bwipp findresource put
dup /gs1-cc dup /uk.co.terryburton.bwipp findresource put
+dup /gs1process dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
begin
@@ -21972,8 +29576,12 @@ begin
/options exch def
/barcode exch def
+ /ctx null def
/dontdraw false def
-
+ /parse false def
+ /dontlint false def
+ /lintreqs true def
+
% Parse the input options
options type /stringtype eq {
1 dict begin
@@ -22000,6 +29608,13 @@ begin
options (linkage) true put
options (inkspread) (0) put
options (dontdraw) true put
+ options (dontlint) true put
+
+ % Lint the combined AI element strings
+ linear length comp length add string
+ dup 0 linear putinterval
+ dup linear length comp putinterval
+ /ai //gs1process exec pop pop pop
% Plot the linear part
linear options //databarexpanded exec
@@ -22023,7 +29638,7 @@ begin
} ifelse
sep exch i exch put
} for
- } bind def
+ } def
mark
0 linsbs {1 index 1 eq {{0}} {{1}} ifelse repeat} forall
counttomark 1 sub array astore /bot exch def pop pop
@@ -22033,7 +29648,7 @@ begin
[ % Finder pattern module positions
18 98 bot length 13 sub {} for
69 98 bot length 13 sub {} for
- ] {sepfinder} forall
+ ] {sepfinder} forall
0 linheight rmoveto <<
/ren //renmatrix
/pixs sep
@@ -22051,7 +29666,9 @@ begin
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/databarexpandedcomposite dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -22060,18 +29677,19 @@ end
% --END ENCODER databarexpandedcomposite--
% --BEGIN ENCODER databarexpandedstackedcomposite--
-% --REQUIRES preamble raiseerror renlinear renmatrix databarexpanded databarexpandedstacked micropdf417 pdf417 gs1-cc--
+% --REQUIRES preamble loadctx unloadctx raiseerror parseinput gs1process renlinear renmatrix databarexpanded databarexpandedstacked micropdf417 pdf417 gs1-cc--
% --DESC: GS1 DataBar Expanded Stacked Composite
% --EXAM: (01)00012345678905(10)ABCDEF|(21)12345678
-% --EXOP: segments=4
+% --EXOP: segments=4
% --RNDR: renmatrix renlinear
-%%BeginResource: uk.co.terryburton.bwipp databarexpandedstackedcomposite 0.0 2017040400 88452 84444
-%%BeginData: 95 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp databarexpandedstackedcomposite 0.0 2022082100 96049 95929
+%%BeginData: 109 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-2 dict
+10 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /databarexpandedstacked dup /uk.co.terryburton.bwipp findresource put
dup /gs1-cc dup /uk.co.terryburton.bwipp findresource put
+dup /gs1process dup /uk.co.terryburton.bwipp findresource put
dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
begin
/databarexpandedstackedcomposite {
@@ -22081,8 +29699,12 @@ begin
/options exch def
/barcode exch def
+ /ctx null def
/dontdraw false def
-
+ /parse false def
+ /dontlint false def
+ /lintreqs true def
+
% Parse the input options
options type /stringtype eq {
1 dict begin
@@ -22109,6 +29731,13 @@ begin
options (linkage) true put
options (inkspread) (0) put
options (dontdraw) true put
+ options (dontlint) true put
+
+ % Lint the combined AI element strings
+ linear length comp length add string
+ dup 0 linear putinterval
+ dup linear length comp putinterval
+ /ai //gs1process exec pop pop pop
% Plot the linear part
linear options //databarexpandedstacked exec
@@ -22132,14 +29761,14 @@ begin
} ifelse
sep exch i exch put
} for
- } bind def
+ } def
/sep [ bot {1 exch sub} forall ] def
- sep 0 [ 0 0 0 ] putinterval
+ sep 0 [ 0 0 0 0 ] putinterval
sep sep length 4 sub [ 0 0 0 0 ] putinterval
[ % Finder pattern module positions
19 98 bot length 13 sub {} for
70 98 bot length 13 sub {} for
- ] {sepfinder} forall
+ ] {sepfinder} forall
0 linheight rmoveto <<
/ren //renmatrix
/pixs sep
@@ -22158,7 +29787,9 @@ begin
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/databarexpandedstackedcomposite dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -22167,18 +29798,19 @@ end
% --END ENCODER databarexpandedstackedcomposite--
% --BEGIN ENCODER gs1-128composite--
-% --REQUIRES preamble raiseerror renlinear renmatrix code128 gs1-128 micropdf417 pdf417 gs1-cc--
+% --REQUIRES preamble loadctx unloadctx raiseerror parseinput gs1process renlinear renmatrix code128 gs1-128 micropdf417 pdf417 gs1-cc--
% --DESC: GS1-128 Composite
% --EXAM: (00)030123456789012340|(02)13012345678909(37)24(10)1234567ABCDEFG
% --EXOP: ccversion=c
% --RNDR: renlinear renmatrix
-%%BeginResource: uk.co.terryburton.bwipp gs1-128composite 0.0 2017040400 85883 88824
-%%BeginData: 100 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp gs1-128composite 0.0 2022082100 97016 93461
+%%BeginData: 114 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-2 dict
+10 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /gs1-128 dup /uk.co.terryburton.bwipp findresource put
dup /gs1-cc dup /uk.co.terryburton.bwipp findresource put
+dup /gs1process dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
begin
@@ -22189,8 +29821,12 @@ begin
/options exch def
/barcode exch def
+ /ctx null def
/dontdraw false def
-
+ /parse false def
+ /dontlint false def
+ /lintreqs true def
+
% Parse the input options
options type /stringtype eq {
1 dict begin
@@ -22215,6 +29851,13 @@ begin
options (inkspread) (0) put
options (dontdraw) true put
+ options (dontlint) true put
+
+ % Lint the combined AI element strings
+ linear length comp length add string
+ dup 0 linear putinterval
+ dup linear length comp putinterval
+ /ai //gs1process exec pop pop pop
% Dummy plot of linear part with CC-A to get width
options (linkagea) true put
@@ -22225,7 +29868,7 @@ begin
options (lintype) (gs1-128) put
options (linwidth) linwidth put
comp options //gs1-cc exec /compsym exch def
- compsym (pixx) get 99 eq {(a)} {(c)} ifelse /linktype exch def
+ compsym (pixx) get 99 eq {(a)} {(c)} ifelse /linktype exch def
% Plot linear part
linktype (a) eq {
@@ -22261,7 +29904,7 @@ begin
/x s p sub 1 sub 11 mul 10 add p 0 eq {2 add} if 99 sub def
x 1 rmoveto
} {
- -7 1 rmoveto
+ -7 1 rmoveto
} ifelse
compsym //renmatrix exec
@@ -22270,7 +29913,9 @@ begin
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/gs1-128composite dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -22279,16 +29924,17 @@ end
% --END ENCODER gs1-128composite--
% --BEGIN ENCODER gs1datamatrix--
-% --REQUIRES preamble raiseerror renmatrix datamatrix--
+% --REQUIRES preamble loadctx unloadctx raiseerror parseinput gs1process renmatrix datamatrix--
% --DESC: GS1 Data Matrix
% --EXAM: (01)03453120000011(17)120508(10)ABCD1234(410)9501101020917
% --EXOP:
% --RNDR: renmatrix
-%%BeginResource: uk.co.terryburton.bwipp gs1datamatrix 0.0 2017040400 79986 76213
-%%BeginData: 135 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp gs1datamatrix 0.0 2022082100 77432 73954
+%%BeginData: 91 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /gs1process dup /uk.co.terryburton.bwipp findresource put
dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
dup /datamatrix dup /uk.co.terryburton.bwipp findresource put
begin
@@ -22299,8 +29945,13 @@ begin
/options exch def % We are given an option string
/barcode exch def % We are given a barcode string
+ /ctx null def
/dontdraw false def
-
+ /parse false def
+ /dontlint false def
+ /lintreqs true def
+ /gssep false def
+
% Parse the input options
options type /stringtype eq {
1 dict begin
@@ -22312,65 +29963,12 @@ begin
} if
options {def} forall
- % Expand ordinals of the form ^NNN to ASCII
- /expand {
- /in exch def
- /out in length string def
- /j 0 def
- in
- { % loop
- (^) search {
- dup out exch j exch putinterval
- length j add 1 add /j exch def
- pop
- dup 0 3 getinterval cvi out exch j 1 sub exch put
- dup length 3 sub 3 exch getinterval
- } {
- dup out exch j exch putinterval
- length j add /j exch def
- out 0 j getinterval exit
- } ifelse
- } loop
- } bind def
-
- % Parse out AIs
- /ais [] def
- /vals [] def
- barcode dup length 1 sub 1 exch getinterval
- { % loop
- dup () eq {exit} if
- (\)) search pop
- exch pop
- exch (\() search {
- exch pop exch 3 1 roll
- } {
- () 3 1 roll
- } ifelse
- [ ais aload pop counttomark 2 add index ] /ais exch def
- [ vals aload pop counttomark 1 add index expand ] /vals exch def
- pop pop
- } loop
- pop
-
- % Pre-defined fixed length data field AIs
- % any AI whose prefix is not included in this table must be
- % terminated with "FNC1", even if it's fixed length
- /aifixed 23 dict def
- [
- 0 1 4 {} for
- ] {
- (00) 2 string copy dup dup 1 5 -1 roll 48 add put aifixed 3 1 roll put
- } forall
- [
- 11 1 20 {} for
- 23
- 31 1 36 {} for
- 41
- ] {
- 10 2 string cvrs dup aifixed 3 1 roll put
- } forall
+ barcode /ai //gs1process exec
+ /fncs exch def
+ /vals exch def
+ /ais exch def
- % Create the datamatrix data
+ % Create the datamatrix data
/fnc1 -1 def
/dmtx [ fnc1 ] def
0 1 ais length 1 sub {
@@ -22382,10 +29980,10 @@ begin
dup dmtx length ai [ exch {} forall ] putinterval
dup dmtx length ai length add val [ exch {} forall ] putinterval
/dmtx exch def
- i ais length 1 sub ne aifixed ai 0 2 getinterval known not and { % Append FNC1
+ i ais length 1 sub ne fncs i get and { % Append FNC1
dmtx length 1 add array
dup 0 dmtx putinterval
- dup dmtx length fnc1 put
+ dup dmtx length gssep {29} {fnc1} ifelse put
/dmtx exch def
} if
} for
@@ -22406,18 +30004,21 @@ begin
/barcode barcode 0 j getinterval def
% Get the result of encoding with datamatrix
+ options (parse) undef
options (dontdraw) true put
options (parsefnc) true put
/args barcode options //datamatrix exec def
args (opt) options put
args
-
+
dontdraw not //renmatrix if
-
+
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/gs1datamatrix dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -22426,16 +30027,17 @@ end
% --END ENCODER gs1datamatrix--
% --BEGIN ENCODER gs1datamatrixrectangular--
-% --REQUIRES preamble raiseerror renmatrix datamatrix--
+% --REQUIRES preamble loadctx unloadctx raiseerror parseinput gs1process renmatrix datamatrix--
% --DESC: GS1 Data Matrix Rectangular
% --EXAM: (01)03453120000011(17)120508(10)ABCD1234(410)9501101020917
% --EXOP:
% --RNDR: renmatrix
-%%BeginResource: uk.co.terryburton.bwipp gs1datamatrixrectangular 0.0 2017040400 80189 79933
-%%BeginData: 136 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp gs1datamatrixrectangular 0.0 2022082100 77747 74258
+%%BeginData: 92 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /gs1process dup /uk.co.terryburton.bwipp findresource put
dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
dup /datamatrix dup /uk.co.terryburton.bwipp findresource put
begin
@@ -22446,8 +30048,13 @@ begin
/options exch def % We are given an option string
/barcode exch def % We are given a barcode string
+ /ctx null def
+ /parse false def
+ /dontlint false def
+ /lintreqs true def
/dontdraw false def
-
+ /gssep false def
+
% Parse the input options
options type /stringtype eq {
1 dict begin
@@ -22459,65 +30066,12 @@ begin
} if
options {def} forall
- % Expand ordinals of the form ^NNN to ASCII
- /expand {
- /in exch def
- /out in length string def
- /j 0 def
- in
- { % loop
- (^) search {
- dup out exch j exch putinterval
- length j add 1 add /j exch def
- pop
- dup 0 3 getinterval cvi out exch j 1 sub exch put
- dup length 3 sub 3 exch getinterval
- } {
- dup out exch j exch putinterval
- length j add /j exch def
- out 0 j getinterval exit
- } ifelse
- } loop
- } bind def
+ barcode /ai //gs1process exec
+ /fncs exch def
+ /vals exch def
+ /ais exch def
- % Parse out AIs
- /ais [] def
- /vals [] def
- barcode dup length 1 sub 1 exch getinterval
- { % loop
- dup () eq {exit} if
- (\)) search pop
- exch pop
- exch (\() search {
- exch pop exch 3 1 roll
- } {
- () 3 1 roll
- } ifelse
- [ ais aload pop counttomark 2 add index ] /ais exch def
- [ vals aload pop counttomark 1 add index expand ] /vals exch def
- pop pop
- } loop
- pop
-
- % Pre-defined fixed length data field AIs
- % any AI whose prefix is not included in this table must be
- % terminated with "FNC1", even if it's fixed length
- /aifixed 23 dict def
- [
- 0 1 4 {} for
- ] {
- (00) 2 string copy dup dup 1 5 -1 roll 48 add put aifixed 3 1 roll put
- } forall
- [
- 11 1 20 {} for
- 23
- 31 1 36 {} for
- 41
- ] {
- 10 2 string cvrs dup aifixed 3 1 roll put
- } forall
-
- % Create the datamatrix data
+ % Create the datamatrix data
/fnc1 -1 def
/dmtx [ fnc1 ] def
0 1 ais length 1 sub {
@@ -22529,10 +30083,10 @@ begin
dup dmtx length ai [ exch {} forall ] putinterval
dup dmtx length ai length add val [ exch {} forall ] putinterval
/dmtx exch def
- i ais length 1 sub ne aifixed ai 0 2 getinterval known not and { % Append FNC1
+ i ais length 1 sub ne fncs i get and { % Append FNC1
dmtx length 1 add array
dup 0 dmtx putinterval
- dup dmtx length fnc1 put
+ dup dmtx length gssep {29} {fnc1} ifelse put
/dmtx exch def
} if
} for
@@ -22553,6 +30107,7 @@ begin
/barcode barcode 0 j getinterval def
% Get the result of encoding with datamatrix
+ options (parse) undef
options (dontdraw) true put
options (parsefnc) true put
options (format) (rectangle) put
@@ -22560,12 +30115,14 @@ begin
args (opt) options put
args
-
+
dontdraw not //renmatrix if
-
+
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/gs1datamatrixrectangular dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -22573,16 +30130,88 @@ end
%%EndResource
% --END ENCODER gs1datamatrixrectangular--
+% --BEGIN ENCODER gs1dldatamatrix--
+% --REQUIRES preamble loadctx unloadctx raiseerror parseinput gs1process renmatrix datamatrix--
+% --DESC: GS1 Digital Link Data Matrix
+% --EXAM: https://id.gs1.org/01/12312312312333/22/ABC%2d123?99=XYZ%2f987#test
+% --EXOP:
+% --RNDR: renmatrix
+%%BeginResource: uk.co.terryburton.bwipp gs1dldatamatrix 0.0 2022082100 70572 63571
+%%BeginData: 59 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+10 dict
+dup /parseinput dup /uk.co.terryburton.bwipp findresource put
+dup /gs1process dup /uk.co.terryburton.bwipp findresource put
+dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
+dup /datamatrix dup /uk.co.terryburton.bwipp findresource put
+begin
+/gs1dldatamatrix {
+
+ 20 dict begin % Confine variables to local scope
+
+ /options exch def % We are given an option string
+ /barcode exch def % We are given a barcode string
+
+ /ctx null def
+ /parse false def
+ /dontlint false def
+ /lintreqs true def
+ /dontdraw false def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ % Parse the input
+ /fncvals <<
+ /parse parse
+ /parseonly true
+ /parsefnc false
+ >> def
+ /barcode barcode fncvals //parseinput exec def
+
+ barcode /dl //gs1process exec pop pop pop
+
+ % Get the result of encoding with datamatrix
+ options (parse) undef
+ options (dontdraw) true put
+ /args barcode options //datamatrix exec def
+
+ args (opt) options put
+ args
+
+ dontdraw not //renmatrix if
+
+ end
+
+}
+[/barcode] {null def} forall
+bind def
+/gs1dldatamatrix dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
+%%EndData
+%%EndResource
+% --END ENCODER gs1dldatamatrix--
+
% --BEGIN ENCODER gs1qrcode--
-% --REQUIRES preamble raiseerror renmatrix qrcode--
+% --REQUIRES preamble loadctx unloadctx raiseerror parseinput gs1process renmatrix qrcode--
% --DESC: GS1 QR Code
% --EXAM: (01)03453120000011(8200)http://www.abc.net(10)ABCD1234(410)9501101020917
% --EXOP:
% --RNDR: renmatrix
-%%BeginResource: uk.co.terryburton.bwipp gs1qrcode 0.0 2017040400 76420 79603
-%%BeginData: 134 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp gs1qrcode 0.0 2022082100 77214 73742
+%%BeginData: 89 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
+dup /gs1process dup /uk.co.terryburton.bwipp findresource put
dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
dup /qrcode dup /uk.co.terryburton.bwipp findresource put
begin
@@ -22593,8 +30222,12 @@ begin
/options exch def % We are given an option string
/barcode exch def % We are given a barcode string
+ /ctx null def
+ /parse false def
+ /dontlint false def
+ /lintreqs true def
/dontdraw false def
-
+
% Parse the input options
options type /stringtype eq {
1 dict begin
@@ -22606,63 +30239,10 @@ begin
} if
options {def} forall
- % Expand ordinals of the form ^NNN to ASCII
- /expand {
- /in exch def
- /out in length string def
- /j 0 def
- in
- { % loop
- (^) search {
- dup out exch j exch putinterval
- length j add 1 add /j exch def
- pop
- dup 0 3 getinterval cvi out exch j 1 sub exch put
- dup length 3 sub 3 exch getinterval
- } {
- dup out exch j exch putinterval
- length j add /j exch def
- out 0 j getinterval exit
- } ifelse
- } loop
- } bind def
-
- % Parse out AIs
- /ais [] def
- /vals [] def
- barcode dup length 1 sub 1 exch getinterval
- { % loop
- dup () eq {exit} if
- (\)) search pop
- exch pop
- exch (\() search {
- exch pop exch 3 1 roll
- } {
- () 3 1 roll
- } ifelse
- [ ais aload pop counttomark 2 add index ] /ais exch def
- [ vals aload pop counttomark 1 add index expand ] /vals exch def
- pop pop
- } loop
- pop
-
- % Pre-defined fixed length data field AIs
- % any AI whose prefix is not included in this table must be
- % terminated with "FNC1", even if it's fixed length
- /aifixed 23 dict def
- [
- 0 1 4 {} for
- ] {
- (00) 2 string copy dup dup 1 5 -1 roll 48 add put aifixed 3 1 roll put
- } forall
- [
- 11 1 20 {} for
- 23
- 31 1 36 {} for
- 41
- ] {
- 10 2 string cvrs dup aifixed 3 1 roll put
- } forall
+ barcode /ai //gs1process exec
+ /fncs exch def
+ /vals exch def
+ /ais exch def
% Create the qrcode data
/fnc1 -1 def
@@ -22676,7 +30256,7 @@ begin
dup qrc length ai [ exch {} forall ] putinterval
dup qrc length ai length add val [ exch {} forall ] putinterval
/qrc exch def
- i ais length 1 sub ne aifixed ai 0 2 getinterval known not and { % Append FNC1
+ i ais length 1 sub ne fncs i get and { % Append FNC1
qrc length 1 add array
dup 0 qrc putinterval
dup qrc length fnc1 put
@@ -22700,18 +30280,21 @@ begin
/barcode barcode 0 j getinterval def
% Get the result of encoding with qrcode
+ options (parse) undef
options (dontdraw) true put
options (parsefnc) true put
/args barcode options //qrcode exec def
args (opt) options put
args
-
+
dontdraw not //renmatrix if
-
+
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/gs1qrcode dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -22719,16 +30302,191 @@ end
%%EndResource
% --END ENCODER gs1qrcode--
+% --BEGIN ENCODER gs1dlqrcode--
+% --REQUIRES preamble loadctx unloadctx raiseerror parseinput gs1process renmatrix qrcode--
+% --DESC: GS1 Digital Link QR Code
+% --EXAM: https://id.gs1.org/01/12312312312333/22/ABC%2d123?99=XYZ%2f987#test
+% --EXOP:
+% --RNDR: renmatrix
+%%BeginResource: uk.co.terryburton.bwipp gs1dlqrcode 0.0 2022082100 67116 67111
+%%BeginData: 59 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+10 dict
+dup /parseinput dup /uk.co.terryburton.bwipp findresource put
+dup /gs1process dup /uk.co.terryburton.bwipp findresource put
+dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
+dup /qrcode dup /uk.co.terryburton.bwipp findresource put
+begin
+/gs1dlqrcode {
+
+ 20 dict begin % Confine variables to local scope
+
+ /options exch def % We are given an option string
+ /barcode exch def % We are given a barcode string
+
+ /ctx null def
+ /parse false def
+ /dontlint false def
+ /lintreqs true def
+ /dontdraw false def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ % Parse the input
+ /fncvals <<
+ /parse parse
+ /parseonly true
+ /parsefnc false
+ >> def
+ /barcode barcode fncvals //parseinput exec def
+
+ barcode /dl //gs1process exec pop pop pop
+
+ % Get the result of encoding with qrcode
+ options (parse) undef
+ options (dontdraw) true put
+ /args barcode options //qrcode exec def
+
+ args (opt) options put
+ args
+
+ dontdraw not //renmatrix if
+
+ end
+
+}
+[/barcode] {null def} forall
+bind def
+/gs1dlqrcode dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
+%%EndData
+%%EndResource
+% --END ENCODER gs1dlqrcode--
+
+% --BEGIN ENCODER gs1dotcode--
+% --REQUIRES preamble loadctx unloadctx raiseerror parseinput gs1process renmatrix dotcode--
+% --DESC: GS1 DotCode
+% --EXAM: (235)5vBZIF%!<B;?oa%(01)01234567890128(8008)19052001
+% --EXOP: rows=16
+% --RNDR: renmatrix
+%%BeginResource: uk.co.terryburton.bwipp gs1dotcode 0.0 2022082100 77157 73683
+%%BeginData: 90 ASCII Lines
+/setpacking where {pop currentpacking true setpacking} if
+10 dict
+dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
+dup /gs1process dup /uk.co.terryburton.bwipp findresource put
+dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
+dup /dotcode dup /uk.co.terryburton.bwipp findresource put
+begin
+/gs1dotcode {
+
+ 20 dict begin % Confine variables to local scope
+
+ /options exch def % We are given an option string
+ /barcode exch def % We are given a barcode string
+
+ /ctx null def
+ /dontdraw false def
+ /parse false def
+ /dontlint false def
+ /lintreqs true def
+
+ % Parse the input options
+ options type /stringtype eq {
+ 1 dict begin
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+ currentdict end /options exch def
+ } if
+ options {def} forall
+
+ barcode /ai //gs1process exec
+ /fncs exch def
+ /vals exch def
+ /ais exch def
+
+ % Create the dotcode data
+ /fnc1 -1 def
+ /dmtx [ fnc1 ] def
+ 0 1 ais length 1 sub {
+ /i exch def
+ /ai ais i get def
+ /val vals i get def
+ dmtx length ai length add val length add array
+ dup 0 dmtx putinterval
+ dup dmtx length ai [ exch {} forall ] putinterval
+ dup dmtx length ai length add val [ exch {} forall ] putinterval
+ /dmtx exch def
+ i ais length 1 sub ne fncs i get and { % Append FNC1
+ dmtx length 1 add array
+ dup 0 dmtx putinterval
+ dup dmtx length fnc1 put
+ /dmtx exch def
+ } if
+ } for
+
+ % Compose input to dotcode
+ /barcode dmtx length 1 add 5 mul string def
+ /i 0 def /j 0 def {
+ i dmtx length eq {exit} if
+ dmtx i get dup fnc1 eq {
+ pop barcode j (^FNC1) putinterval
+ /j j 4 add def
+ } {
+ barcode exch j exch put
+ } ifelse
+ /i i 1 add def
+ /j j 1 add def
+ } loop
+ /barcode barcode 0 j getinterval def
+
+ % Get the result of encoding with dotcode
+ options (parse) undef
+ options (dontdraw) true put
+ options (parsefnc) true put
+ /args barcode options //dotcode exec def
+
+ args (opt) options put
+ args
+
+ dontdraw not //renmatrix if
+
+ end
+
+}
+[/barcode] {null def} forall
+bind def
+/gs1dotcode dup load /uk.co.terryburton.bwipp defineresource pop
+end
+/setpacking where {pop setpacking} if
+%%EndData
+%%EndResource
+% --END ENCODER gs1dotcode--
+
% --BEGIN ENCODER hibccode39--
-% --REQUIRES preamble raiseerror renlinear code39--
+% --REQUIRES preamble loadctx unloadctx raiseerror renlinear code39--
% --DESC: HIBC Code 39
% --EXAM: A123BJC5D6E71
% --EXOP: includetext
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp hibccode39 0.0 2017040400 68512 68281
-%%BeginData: 92 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp hibccode39 0.0 2022082100 63587 67110
+%%BeginData: 103 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
+dup /loadctx dup /uk.co.terryburton.bwipp findresource put
+dup /unloadctx dup /uk.co.terryburton.bwipp findresource put
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
dup /code39 dup /uk.co.terryburton.bwipp findresource put
@@ -22740,8 +30498,9 @@ begin
/options exch def % We are given an option string
/barcode exch def % We are given a barcode string
+ /ctx null def
/dontdraw false def
- /textfont /NimbusMonL-Regu def
+ /textfont /Courier def
/textsize 10 def
/textyoffset -7 def
/textxoffset 0 def
@@ -22763,10 +30522,14 @@ begin
/textyoffset textyoffset cvr def
/textxoffset textxoffset cvr def
+ /hibccode39 //loadctx exec
+
% Create a string of the available characters
+{
/barchars (0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%) def
/charvals 43 dict def
0 1 42 {charvals exch dup barchars exch 1 getinterval exch put} for
+} ctxdef
% Validate the input
0 1 barcode length 1 sub {
@@ -22810,12 +30573,16 @@ begin
args (textxalign) (center) put
args (opt) options put
args
-
+
dontdraw not //renlinear if
+ //unloadctx exec
+
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/hibccode39 dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -22824,15 +30591,17 @@ end
% --END ENCODER hibccode39--
% --BEGIN ENCODER hibccode128--
-% --REQUIRES preamble raiseerror renlinear code128--
+% --REQUIRES preamble loadctx unloadctx raiseerror parseinput renlinear code128--
% --DESC: HIBC Code 128
% --EXAM: A123BJC5D6E71
% --EXOP: includetext
% --RNDR: renlinear
-%%BeginResource: uk.co.terryburton.bwipp hibccode128 0.0 2017040400 68415 68036
-%%BeginData: 91 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp hibccode128 0.0 2022082100 69879 69846
+%%BeginData: 102 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
+dup /loadctx dup /uk.co.terryburton.bwipp findresource put
+dup /unloadctx dup /uk.co.terryburton.bwipp findresource put
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
dup /code128 dup /uk.co.terryburton.bwipp findresource put
@@ -22844,8 +30613,9 @@ begin
/options exch def % We are given an option string
/barcode exch def % We are given a barcode string
+ /ctx null def
/dontdraw false def
- /textfont /NimbusMonL-Regu def
+ /textfont /Courier def
/textsize 10 def
/textyoffset -7 def
/textxoffset 0 def
@@ -22867,10 +30637,14 @@ begin
/textyoffset textyoffset cvr def
/textxoffset textxoffset cvr def
+ /hibccode128 //loadctx exec
+
% Create a string of the available characters
+{
/barchars (0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%) def
/charvals 43 dict def
0 1 42 {charvals exch dup barchars exch 1 getinterval exch put} for
+} ctxdef
% Validate the input
0 1 barcode length 1 sub {
@@ -22913,12 +30687,16 @@ begin
args (textxalign) (center) put
args (opt) options put
args
-
+
dontdraw not //renlinear if
+ //unloadctx exec
+
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/hibccode128 dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -22927,15 +30705,17 @@ end
% --END ENCODER hibccode128--
% --BEGIN ENCODER hibcdatamatrix--
-% --REQUIRES preamble raiseerror renmatrix datamatrix--
+% --REQUIRES preamble loadctx unloadctx raiseerror parseinput renmatrix datamatrix--
% --DESC: HIBC Data Matrix
% --EXAM: A123BJC5D6E71
% --EXOP:
% --RNDR: renmatrix
-%%BeginResource: uk.co.terryburton.bwipp hibcdatamatrix 0.0 2017040400 65202 64798
-%%BeginData: 74 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp hibcdatamatrix 0.0 2022082100 67458 67144
+%%BeginData: 85 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
+dup /loadctx dup /uk.co.terryburton.bwipp findresource put
+dup /unloadctx dup /uk.co.terryburton.bwipp findresource put
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
dup /datamatrix dup /uk.co.terryburton.bwipp findresource put
@@ -22947,6 +30727,7 @@ begin
/options exch def % We are given an option string
/barcode exch def % We are given a barcode string
+ /ctx null def
/dontdraw false def
/validatecheck false def
@@ -22961,10 +30742,14 @@ begin
} if
options {def} forall
+ /hibcdatamatrix //loadctx exec
+
% Create a string of the available characters
+{
/barchars (0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%) def
/charvals 43 dict def
0 1 42 {charvals exch dup barchars exch 1 getinterval exch put} for
+} ctxdef
% Validate the input
0 1 barcode length 1 sub {
@@ -22999,12 +30784,16 @@ begin
args (opt) options put
args
-
+
dontdraw not //renmatrix if
+ //unloadctx exec
+
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/hibcdatamatrix dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -23013,15 +30802,17 @@ end
% --END ENCODER hibcdatamatrix--
% --BEGIN ENCODER hibcdatamatrixrectangular--
-% --REQUIRES preamble raiseerror renmatrix datamatrix--
+% --REQUIRES preamble loadctx unloadctx raiseerror parseinput renmatrix datamatrix--
% --DESC: HIBC Data Matrix Rectangular
% --EXAM: A123BJC5D6E71
% --EXOP:
% --RNDR: renmatrix
-%%BeginResource: uk.co.terryburton.bwipp hibcdatamatrixrectangular 0.0 2017040400 65451 65014
-%%BeginData: 75 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp hibcdatamatrixrectangular 0.0 2022082100 67707 67360
+%%BeginData: 86 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
+dup /loadctx dup /uk.co.terryburton.bwipp findresource put
+dup /unloadctx dup /uk.co.terryburton.bwipp findresource put
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
dup /datamatrix dup /uk.co.terryburton.bwipp findresource put
@@ -23033,6 +30824,7 @@ begin
/options exch def % We are given an option string
/barcode exch def % We are given a barcode string
+ /ctx null def
/dontdraw false def
/validatecheck false def
@@ -23047,10 +30839,14 @@ begin
} if
options {def} forall
+ /hibcdatamatrixrectangular //loadctx exec
+
% Create a string of the available characters
+{
/barchars (0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%) def
/charvals 43 dict def
0 1 42 {charvals exch dup barchars exch 1 getinterval exch put} for
+} ctxdef
% Validate the input
0 1 barcode length 1 sub {
@@ -23086,12 +30882,16 @@ begin
args (opt) options put
args
-
+
dontdraw not //renmatrix if
+ //unloadctx exec
+
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/hibcdatamatrixrectangular dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -23100,15 +30900,17 @@ end
% --END ENCODER hibcdatamatrixrectangular--
% --BEGIN ENCODER hibcpdf417--
-% --REQUIRES preamble raiseerror renmatrix pdf417--
+% --REQUIRES preamble loadctx unloadctx raiseerror parseinput renmatrix pdf417--
% --DESC: HIBC PDF417
% --EXAM: A123BJC5D6E71
% --EXOP:
% --RNDR: renmatrix
-%%BeginResource: uk.co.terryburton.bwipp hibcpdf417 0.0 2017040400 65591 65215
-%%BeginData: 78 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp hibcpdf417 0.0 2022082100 67713 67465
+%%BeginData: 89 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
+dup /loadctx dup /uk.co.terryburton.bwipp findresource put
+dup /unloadctx dup /uk.co.terryburton.bwipp findresource put
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
dup /pdf417 dup /uk.co.terryburton.bwipp findresource put
@@ -23120,6 +30922,7 @@ begin
/options exch def % We are given an option string
/barcode exch def % We are given a barcode string
+ /ctx null def
/dontdraw false def
/columns 2 def
/validatecheck false def
@@ -23137,10 +30940,14 @@ begin
/columns columns cvi def
+ /hibcpdf417 //loadctx exec
+
% Create a string of the available characters
+{
/barchars (0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%) def
/charvals 43 dict def
0 1 42 {charvals exch dup barchars exch 1 getinterval exch put} for
+} ctxdef
% Validate the input
0 1 barcode length 1 sub {
@@ -23176,12 +30983,16 @@ begin
args (opt) options put
args
-
+
dontdraw not //renmatrix if
+ //unloadctx exec
+
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/hibcpdf417 dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -23190,15 +31001,17 @@ end
% --END ENCODER hibcpdf417--
% --BEGIN ENCODER hibcmicropdf417--
-% --REQUIRES preamble raiseerror renmatrix micropdf417--
+% --REQUIRES preamble loadctx unloadctx raiseerror parseinput renmatrix micropdf417--
% --DESC: HIBC MicroPDF417
% --EXAM: A123BJC5D6E71
% --EXOP:
% --RNDR: renmatrix
-%%BeginResource: uk.co.terryburton.bwipp hibcmicropdf417 0.0 2017040400 65641 65250
-%%BeginData: 78 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp hibcmicropdf417 0.0 2022082100 67787 67500
+%%BeginData: 89 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
+dup /loadctx dup /uk.co.terryburton.bwipp findresource put
+dup /unloadctx dup /uk.co.terryburton.bwipp findresource put
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
dup /micropdf417 dup /uk.co.terryburton.bwipp findresource put
@@ -23210,6 +31023,7 @@ begin
/options exch def % We are given an option string
/barcode exch def % We are given a barcode string
+ /ctx null def
/dontdraw false def
/columns 2 def
/validatecheck false def
@@ -23227,10 +31041,14 @@ begin
/columns columns cvi def
+ /hibcmicropdf417 //loadctx exec
+
% Create a string of the available characters
+{
/barchars (0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%) def
/charvals 43 dict def
0 1 42 {charvals exch dup barchars exch 1 getinterval exch put} for
+} ctxdef
% Validate the input
0 1 barcode length 1 sub {
@@ -23266,12 +31084,16 @@ begin
args (opt) options put
args
-
+
dontdraw not //renmatrix if
+ //unloadctx exec
+
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/hibcmicropdf417 dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -23280,15 +31102,17 @@ end
% --END ENCODER hibcmicropdf417--
% --BEGIN ENCODER hibcqrcode--
-% --REQUIRES preamble raiseerror renmatrix qrcode--
+% --REQUIRES preamble loadctx unloadctx raiseerror parseinput renmatrix qrcode--
% --DESC: HIBC QR Code
% --EXAM: A123BJC5D6E71
% --EXOP:
% --RNDR: renmatrix
-%%BeginResource: uk.co.terryburton.bwipp hibcqrcode 0.0 2017040400 65146 64770
-%%BeginData: 74 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp hibcqrcode 0.0 2022082100 68350 68090
+%%BeginData: 85 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
+dup /loadctx dup /uk.co.terryburton.bwipp findresource put
+dup /unloadctx dup /uk.co.terryburton.bwipp findresource put
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
dup /qrcode dup /uk.co.terryburton.bwipp findresource put
@@ -23300,6 +31124,7 @@ begin
/options exch def % We are given an option string
/barcode exch def % We are given a barcode string
+ /ctx null def
/dontdraw false def
/validatecheck false def
@@ -23314,10 +31139,14 @@ begin
} if
options {def} forall
+ /hibcqrcode //loadctx exec
+
% Create a string of the available characters
+{
/barchars (0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%) def
/charvals 43 dict def
0 1 42 {charvals exch dup barchars exch 1 getinterval exch put} for
+} ctxdef
% Validate the input
0 1 barcode length 1 sub {
@@ -23352,12 +31181,16 @@ begin
args (opt) options put
args
-
+
dontdraw not //renmatrix if
+ //unloadctx exec
+
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/hibcqrcode dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -23366,15 +31199,17 @@ end
% --END ENCODER hibcqrcode--
% --BEGIN ENCODER hibccodablockf--
-% --REQUIRES preamble raiseerror renmatrix codablockf--
+% --REQUIRES preamble loadctx unloadctx raiseerror parseinput renmatrix codablockf--
% --DESC: HIBC Codablock F
% --EXAM: A123BJC5D6E71
% --EXOP:
% --RNDR: renmatrix
-%%BeginResource: uk.co.terryburton.bwipp hibccodablockf 0.0 2017040400 65182 64798
-%%BeginData: 74 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp hibccodablockf 0.0 2022082100 67542 67272
+%%BeginData: 85 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
+dup /loadctx dup /uk.co.terryburton.bwipp findresource put
+dup /unloadctx dup /uk.co.terryburton.bwipp findresource put
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
dup /codablockf dup /uk.co.terryburton.bwipp findresource put
@@ -23386,6 +31221,7 @@ begin
/options exch def % We are given an option string
/barcode exch def % We are given a barcode string
+ /ctx null def
/dontdraw false def
/validatecheck false def
@@ -23400,10 +31236,14 @@ begin
} if
options {def} forall
+ /hibccodablockf //loadctx exec
+
% Create a string of the available characters
+{
/barchars (0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%) def
/charvals 43 dict def
0 1 42 {charvals exch dup barchars exch 1 getinterval exch put} for
+} ctxdef
% Validate the input
0 1 barcode length 1 sub {
@@ -23438,12 +31278,16 @@ begin
args (opt) options put
args
-
+
dontdraw not //renmatrix if
+ //unloadctx exec
+
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/hibccodablockf dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
@@ -23452,15 +31296,17 @@ end
% --END ENCODER hibccodablockf--
% --BEGIN ENCODER hibcazteccode--
-% --REQUIRES preamble raiseerror renmatrix azteccode--
+% --REQUIRES preamble loadctx unloadctx raiseerror parseinput renmatrix azteccode--
% --DESC: HIBC Aztec Code
% --EXAM: A123BJC5D6E71
% --EXOP:
% --RNDR: renmatrix
-%%BeginResource: uk.co.terryburton.bwipp hibcazteccode 0.0 2017040400 68614 64895
-%%BeginData: 74 ASCII Lines
+%%BeginResource: uk.co.terryburton.bwipp hibcazteccode 0.0 2022082100 67408 67137
+%%BeginData: 85 ASCII Lines
/setpacking where {pop currentpacking true setpacking} if
-1 dict
+10 dict
+dup /loadctx dup /uk.co.terryburton.bwipp findresource put
+dup /unloadctx dup /uk.co.terryburton.bwipp findresource put
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
dup /renmatrix dup /uk.co.terryburton.bwipp findresource put
dup /azteccode dup /uk.co.terryburton.bwipp findresource put
@@ -23472,6 +31318,7 @@ begin
/options exch def % We are given an option string
/barcode exch def % We are given a barcode string
+ /ctx null def
/dontdraw false def
/validatecheck false def
@@ -23486,10 +31333,14 @@ begin
} if
options {def} forall
+ /hibcazteccode //loadctx exec
+
% Create a string of the available characters
+{
/barchars (0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%) def
/charvals 43 dict def
0 1 42 {charvals exch dup barchars exch 1 getinterval exch put} for
+} ctxdef
% Validate the input
0 1 barcode length 1 sub {
@@ -23524,12 +31375,16 @@ begin
args (opt) options put
args
-
+
dontdraw not //renmatrix if
+ //unloadctx exec
+
end
-} bind def
+}
+[/barcode] {null def} forall
+bind def
/hibcazteccode dup load /uk.co.terryburton.bwipp defineresource pop
end
/setpacking where {pop setpacking} if
diff --git a/graphics/pstricks/contrib/pst-barcode/latex/pst-barcode.sty b/graphics/pstricks/contrib/pst-barcode/latex/pst-barcode.sty
index 08b7deacd6..049df4a35f 100644
--- a/graphics/pstricks/contrib/pst-barcode/latex/pst-barcode.sty
+++ b/graphics/pstricks/contrib/pst-barcode/latex/pst-barcode.sty
@@ -1,12 +1,12 @@
-%% $Id: pst-barcode.sty 445 2017-04-19 11:13:52Z herbert $
+%% $Id: pst-barcode.sty 590 2022-08-23 16:53:11Z herbert $
\RequirePackage{pstricks}
-\ProvidesPackage{pst-barcode}[2016/04/22 package wrapper for
+\ProvidesPackage{pst-barcode}[2022/08/23 package wrapper for
pst-barcode.tex (hv)]
\input{pst-barcode.tex}
\ProvidesFile{pst-barcode.tex}
[\filedate\space v\fileversion\space `PST-barcode' (hv)]
\IfFileExists{pst-barcode.pro}{%
\ProvidesFile{pst-barcode.pro}
- [2017/04/04 PostScript prologue file (hv)]
+ [2022/08/23 PostScript prologue file (hv)]
\@addtofilelist{pst-barcode.pro}}{}%
\endinput
diff --git a/graphics/pstricks/contrib/pst-barcode/tex/pst-barcode.tex b/graphics/pstricks/contrib/pst-barcode/tex/pst-barcode.tex
index f9e6868a40..ab77cff3df 100644
--- a/graphics/pstricks/contrib/pst-barcode/tex/pst-barcode.tex
+++ b/graphics/pstricks/contrib/pst-barcode/tex/pst-barcode.tex
@@ -1,4 +1,4 @@
-%% $Id: pst-barcode.tex 519 2017-08-22 07:47:55Z herbert $
+%% $Id: pst-barcode.tex 591 2022-08-23 16:54:56Z herbert $
%%
%% This is file `pst-barcode.tex',
%%
@@ -20,8 +20,8 @@
\let\PSTBarcodeLoaded\endinput
\ifx\PSTricksLoaded\endinput\else\input pstricks.tex\fi
%
-\def\fileversion{0.18}
-\def\filedate{2017/08/22}
+\def\fileversion{0.19}
+\def\filedate{2022/08/21}
\message{`PST-barcode' v\fileversion, \filedate\space (tb,hv)}
%
\edef\PstAtCode{\the\catcode`\@} \catcode`\@=11\relax
diff --git a/macros/latex/contrib/beamer-contrib/beamerswitch/README.md b/macros/latex/contrib/beamer-contrib/beamerswitch/README.md
index 732401540c..1ea04bbc08 100644
--- a/macros/latex/contrib/beamer-contrib/beamerswitch/README.md
+++ b/macros/latex/contrib/beamer-contrib/beamerswitch/README.md
@@ -88,7 +88,7 @@ first three steps.
## Licence
-Copyright 2016–2021 Alex Ball.
+Copyright 2016–2022 Alex Ball.
This work consists of the file beamerswitch.dtx and a Makefile.
diff --git a/macros/latex/contrib/beamer-contrib/beamerswitch/beamerswitch-example-article.pdf b/macros/latex/contrib/beamer-contrib/beamerswitch/beamerswitch-example-article.pdf
index 79a6084f41..c57bf4c0b6 100644
--- a/macros/latex/contrib/beamer-contrib/beamerswitch/beamerswitch-example-article.pdf
+++ b/macros/latex/contrib/beamer-contrib/beamerswitch/beamerswitch-example-article.pdf
Binary files differ
diff --git a/macros/latex/contrib/beamer-contrib/beamerswitch/beamerswitch-example-handout.pdf b/macros/latex/contrib/beamer-contrib/beamerswitch/beamerswitch-example-handout.pdf
index 64cf18c023..3b7fde4ef0 100644
--- a/macros/latex/contrib/beamer-contrib/beamerswitch/beamerswitch-example-handout.pdf
+++ b/macros/latex/contrib/beamer-contrib/beamerswitch/beamerswitch-example-handout.pdf
Binary files differ
diff --git a/macros/latex/contrib/beamer-contrib/beamerswitch/beamerswitch-example-trans.pdf b/macros/latex/contrib/beamer-contrib/beamerswitch/beamerswitch-example-trans.pdf
index bd9bf2845b..bef605e9a1 100644
--- a/macros/latex/contrib/beamer-contrib/beamerswitch/beamerswitch-example-trans.pdf
+++ b/macros/latex/contrib/beamer-contrib/beamerswitch/beamerswitch-example-trans.pdf
Binary files differ
diff --git a/macros/latex/contrib/beamer-contrib/beamerswitch/beamerswitch-example.pdf b/macros/latex/contrib/beamer-contrib/beamerswitch/beamerswitch-example.pdf
index 9ef988115a..57e0903ee3 100644
--- a/macros/latex/contrib/beamer-contrib/beamerswitch/beamerswitch-example.pdf
+++ b/macros/latex/contrib/beamer-contrib/beamerswitch/beamerswitch-example.pdf
Binary files differ
diff --git a/macros/latex/contrib/beamer-contrib/beamerswitch/beamerswitch.dtx b/macros/latex/contrib/beamer-contrib/beamerswitch/beamerswitch.dtx
index ee8b3498ee..4dbfb3f6af 100644
--- a/macros/latex/contrib/beamer-contrib/beamerswitch/beamerswitch.dtx
+++ b/macros/latex/contrib/beamer-contrib/beamerswitch/beamerswitch.dtx
@@ -93,7 +93,7 @@ first three steps.
## Licence
-Copyright 2016–2021 Alex Ball.
+Copyright 2016–2022 Alex Ball.
This work consists of the file beamerswitch.dtx and a Makefile.
@@ -194,7 +194,7 @@ See: http://www.latex-project.org/lppl.txt
\endpreamble
\postamble
-Copyright (C) 2016-2021 by Alex Ball <ab318@bath.ac.uk>
+Copyright (C) 2016-2022 by Alex Ball <ab318@bath.ac.uk>
\endpostamble
\usedir{tex/latex/\jobname}
@@ -229,7 +229,7 @@ Copyright (C) 2016-2021 by Alex Ball <ab318@bath.ac.uk>
%<class>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
%<class>\ProvidesClass{beamerswitch}
%<*class>
- [2021/04/12 v1.8 Convenient mode selection in Beamer documents]
+ [2022/08/20 v1.9 Convenient mode selection in Beamer documents]
%</class>
%<*driver>
\documentclass[12pt]{article}
@@ -723,9 +723,13 @@ The various options are described below.
\subsection{Passing options to the underlying classes}
+\begin{docKey}{articleclass}{=\meta{class}}{default and initially \val{article}}
+ Selects the \meta{class} to use when in \key{article} mode.
+\end{docKey}
+
\begin{docKey}{articleoptions}{=\marg{options}}{default and initially empty}
- Passes the \meta{options} to the \pkg{article} class when in \key{article}
- mode.
+ Passes the \meta{options} to the underlying class (selected by \key{articleclass})
+ when in \key{article} mode.
\end{docKey}
\begin{docKey}{beameroptions}{=\marg{options}}{default and initially \val{ignorenonframetext}}
@@ -882,6 +886,7 @@ If you want to switch to using \texttt{rubber}, say, pre-define
\begin{dispListing}
\newcommand*{\SpawnedCompiler}{rubber -q --synctex}
\newcommand*{\SpawnedPDFTeX}{\SpawnedCompiler -m pdftex}
+\newcommand*{\SpawnedLuaTeX}{\SpawnedCompiler -m lualatex} % needs v1.6.0+
\newcommand*{\SpawnedXeTeX}{\SpawnedCompiler -m xelatex}
\documentclass{beamerswitch}
\end{dispListing}
@@ -1266,10 +1271,12 @@ suggestions for improvements or new features to the
% \pkg{shellesc} for running parallel compilations
% \item
% \pkg{iftex} for determining which engine to use
+% \item
+% \pkg{expl3} for cleaning options passed onward to underlying classes.
% \end{itemize}
%
% \begin{macrocode}
-\RequirePackage{xkeyval,xkvltxp,etoolbox,xstring,shellesc,iftex}
+\RequirePackage{xkeyval,xkvltxp,etoolbox,xstring,shellesc,iftex,expl3}
% \end{macrocode}
%
% \subsection{Class options}
@@ -1376,10 +1383,22 @@ suggestions for improvements or new features to the
% \end{macrocode}
% \end{optionkey}
%
+% \changes{v1.9}{2022/08/20}{Add \key{articleclass} option.}
+% \begin{optionkey}{articleclass}
+%
+% The \key{articleclass} option allows the class used for article mode
+% to be customized.
+%
+% \begin{macrocode}
+\define@cmdkey[DC]{beamerswitch}{articleclass}[article]{}
+% \end{macrocode}
+% \end{optionkey}
+%
% \changes{v1.8}{2021/04/12}{Add \key{articleoptions} option.}
% \begin{optionkey}{articleoptions}
%
-% The \key{articleoptions} will passed to the \pkg{article} class.
+% The \key{articleoptions} will passed to the class used for
+% \key{article} mode.
%
% \begin{macrocode}
\define@cmdkey[DC]{beamerswitch}{articleoptions}[]{}
@@ -1409,7 +1428,8 @@ suggestions for improvements or new features to the
%
% \begin{macrocode}
\setkeys[DC]{beamerswitch}{beamer=true,alsobeamer=false,alsotrans=false,%
- alsohandout=false,alsoarticle=false,beameroptions,articleoptions}
+ alsohandout=false,alsoarticle=false,beameroptions,articleclass,%
+ articleoptions}
% \end{macrocode}
%
% Now we process the options given by the user.
@@ -1418,6 +1438,16 @@ suggestions for improvements or new features to the
\ProcessOptionsX[DC]<beamerswitch>
% \end{macrocode}
%
+% We remove problematic whitespace from \key{articleoptions} and
+% \key{beameroptions}.
+%
+% \begin{macrocode}
+\ExplSyntaxOn
+\tl_replace_all:Nnn \cmdDC@beamerswitch@articleoptions { ,~ } { , }
+\tl_replace_all:Nnn \cmdDC@beamerswitch@beameroptions { ,~ } { , }
+\ExplSyntaxOff
+% \end{macrocode}
+%
% \subsection{Jobname-based mode switching}\label{sec:switching}
%
% \begin{macro}{BeamerSuffix}
@@ -1530,20 +1560,20 @@ suggestions for improvements or new features to the
%
% \subsection{Setting up modes}
%
-% For article mode, we load the \pkg{article} class and the \pkg{beamerarticle}
-% support package. Apologies for anyone hoping for \pkg{scrartcl} or
-% \pkg{memoir} alternatives.
% \begin{macro}{beamer@insttitle}
% \begin{macro}{beamer@andtitle}
% \begin{macro}{beamer@instinst}
% \begin{macro}{beamer@andinst}
+% For article mode, we load the class selected by the \key{articleclass}
+% option and require the \pkg{beamerarticle} support package.
% We also add some beamer base macros that are needed for the
-%\cs{insertinstitute} command.
+% \cs{insertinstitute} command.
%
% \begin{macrocode}
\ifbool{DC@beamerswitch@article}{%
- \PassOptionsToClass{\cmdDC@beamerswitch@articleoptions}{article}
- \LoadClass{article}
+ \PassOptionsToClass{\cmdDC@beamerswitch@articleoptions}{%
+ \cmdDC@beamerswitch@articleclass}
+ \LoadClass{\cmdDC@beamerswitch@articleclass}
\RequirePackage{beamerarticle}
\def\beamer@insttitle#1{\textsuperscript{#1}}
\def\beamer@andtitle{\quad}
@@ -1592,27 +1622,17 @@ suggestions for improvements or new features to the
}{%
% \end{macrocode}
%
+% For the presentation modes, we load the \pkg{beamer} class with the
+% appropriate mode option as well those chosen using \key{beameroptions}.
%
-% For the presentation modes, we load the \pkg{beamer} class with appropriate
-% options. Since we are targeting users wanting different versions of their
-% presentations with the same code, we activate \key{ignorenonframetext}.
+% Handout mode lays multiple slides out on a single page. For this we use
+% \pkg{pgfpages}. The actual configuration is handled later.
%
% \begin{macrocode}
\ifbool{DC@beamerswitch@handout}{%
\PassOptionsToClass{\cmdDC@beamerswitch@beameroptions}{beamer}
\LoadClass[handout]{beamer}
-% \end{macrocode}
-%
-% Handout mode lays multiple slides out on a single page. For this we use
-% \pkg{pgfpages}. The actual configuration is handled later.
-%
-% \begin{macrocode}
\RequirePackage{pgfpages}
-% \end{macrocode}
-%
-% We also activate \key{ignorenonframetext} for the other two modes.
-%
-% \begin{macrocode}
}{%
\ifbool{DC@beamerswitch@trans}{%
\PassOptionsToClass{\cmdDC@beamerswitch@beameroptions}{beamer}
diff --git a/macros/latex/contrib/beamer-contrib/beamerswitch/beamerswitch.pdf b/macros/latex/contrib/beamer-contrib/beamerswitch/beamerswitch.pdf
index ebd182790b..c837e04832 100644
--- a/macros/latex/contrib/beamer-contrib/beamerswitch/beamerswitch.pdf
+++ b/macros/latex/contrib/beamer-contrib/beamerswitch/beamerswitch.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/CHANGES-ms.md b/macros/latex/contrib/biblatex-ms/CHANGES-ms.md
new file mode 100644
index 0000000000..864e7304d1
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/CHANGES-ms.md
@@ -0,0 +1,983 @@
+# RELEASE NOTES FOR VERSION 4.0
+ - This is a major update with support for multiscript entryfields
+ - **INCOMPATIBLE CHANGE** Default name list and plain list formats declared
+ with \DeclareNameFormat and \DeclareListFormat respectively have been
+ modified to support per-item language switching via the macros:
+
+ name:langswitchon/name:langswitchoff
+ list:langswitchon/list:langswitchoff
+
+ If you use or provide custom name/list formats, you may want to look at
+ the format definitions in biblatex.def to see where to place these in
+ your custom formats in order to provide multiscript support for
+ per-item automatic language switching. Nothing will break if you don't
+ do this but there may be a loss of some aspects of multiscript
+ functionality. In general, you should place the "on" macros *after*
+ name:delim/list:delim and the "off" macros at the end of the format.
+- **INCOMPATIBLE CHANGE** Data annotation test macros \if*annotation,
+ \has*annotation and \get*annotation now have multiscript form and
+ language as optional arguments in position 1 and 2, therefore, if you
+ are using these macros with any optional arguments, be sure to supply
+ the first two arguments (as "[][]"). For example:
+
+ \getitemannotation[somefield] -> \getitemannotation[][][somefield]
+ \ifpartannotation[][someannotationname][2]{family}{someval} ->
+ \ifpartannotation[][][][someannotationname][2]{family}{someval}
+- **INCOMPATIBLE CHANGE** Namelist-specific hashes of the form
+ <namelist>namehash, <namelist>bibnamehash or <namelist>fullhash now must
+ contain a multiscript form and language in order to differentiate
+ between multiscript name alternates. The format is now
+ <namelist><msform><mslang>namehash,
+ <namelist><msform><mslang>bibnamehash or
+ <namelist><msform><mslang>fullhash and biber 4.0+ always generates specific
+ name hashes in this format.
+# RELEASE NOTES FOR VERSION 3.18b
+- Reenable `\MakeUppercase`/`\MakeLowercase` "patches" for `\bibstring`
+ based on `\CaseSwitch`.
+
+# RELEASE NOTES FOR VERSION 3.18a
+- Disable `\MakeUppercase`/`\MakeLowercase` patches as emergency fix
+ for LaTeX 2022-06-01-PL4 compatibility.
+
+# RELEASE NOTES FOR VERSION 3.18
+- New sorting name key generation macro `\visibility` which allows
+ application of sorting name key generation to apply only to sorting
+ within citati
+ ons.
+- New sorting macro `\intciteorder` which allows sorting by order internal
+ to a cite command like \cite{a,b,c}.
+- New option `pluralothers` to force "et al." to be plural (i.e. only
+ replace two or more names). This is required for some styles (e.g. APA)
+- Added `\localrefcontext` as a local alternative
+ to the global `\newrefcontext`.
+ `\localrefcontext` can be nested and is only active in the current group.
+
+# RELEASE NOTES FOR VERSION 3.17
+- **INCOMPATIBLE CHANGE**
+ The behaviour of index-less granular xdata references to list fields has
+ changed. Before, a reference to an XDATA list field would select the
+ first element in the XDATA field list if no index was given but now this
+ will splice in all elements of the XDATA list field. To ensure the
+ previous behaviour, simply add "-1" (assuming the default value of "-"
+ for the biber 'xdatasep' option) to the end of all granaular list
+ XDATA references.
+- Added helper macros to enable calculations with non-ASCII numerals.
+ This is necessary to properly support languages like Marathi.
+ At the moment the 'translation' is very basic and uses a one-to-one
+ correspondence of US-ASCII (Arabic) digits and non-ASCII digits.
+ The translation also needs additional post-processing steps.
+ Use `\blx@defcomputableequivalent{<numeral digit>}{<ASCII digit>}` to
+ make `<numeral digit>` an equivalent of `<ASCII digit>`
+ (presumably this command will be used in `.lbx` files if the language
+ requires it).
+ `\hascomputableequivalent{<string>}` can be used to check if `<string>`
+ is a number that can be converted to a number with ASCII digits.
+ `\getcomputableequivalent{<string>}{<macro>}` does the conversion
+ and saves the number in `<macro>`.
+ There is `\ifiscomputable{<string>}` to check if a `<string>`
+ is an ASCII number OR has a computable equivalent.
+ There are analogous macros for fields instead of strings.
+- Added `\textouterlang` to select the last active language that
+ was not selected by `biblatex` itself.
+ This may help in multilingual setups where `biblatex` also changes the
+ language quite heavily.
+- Added `\DeclareBibstringSet`, `\DeclareBibstringSetFormat` etc.
+ to allow injecting additional formatting for a set of bibstrings.
+ Sets can be defined arbitrarily. These commands are primarily
+ intended for use in localisation modules.
+- Changed the definition of `\bibnamedelimi` to `\isdot\addnbspace`.
+ Previously the definition was just `\addnbspace`, which meant the `.`
+ would be treated as a period/full stop.
+- **BREAKING CHANGE**
+ `\DeclareDelimFormat` no longer accepts a list of names as argument.
+ It only accepts a single delimiter name.
+ A list of contexts is still supported.
+ Note that previously the optional argument would not work correctly
+ with a list of names.
+- **CRITICAL CHANGE**
+ `biblatex` no longer writes tracking and refsection initialisation code
+ to aux files.
+ Instead the `\...cite` commands are redefined locally to do that on demand.
+ This should keep the auxiliary files much cleaner of `biblatex`
+ intervention.
+- **CRITICAL CHANGE**
+ Generalised `season` date part to `yeardivision`. It can now also
+ hold quarter, quadrimester, semestral or seasons with hemisphere
+ designation.
+ Helper macros have been renamed accordingly. Limited backwards
+ compatibility is in place.
+- **(Possibly) CRITICAL CHANGE**
+ `\notecite` and friends no longer issue an explicit `\nocite`.
+ Since the commands are defined with `\DeclareCiteCommand`, they
+ already issue a normal cite request.
+ The additional `\nocite` from the loop code was superfluous
+ and would result in slightly instable `.bcf` files.
+
+
+# RELEASE NOTES FOR VERSION 3.16
+- Fixed an infinite loop caused by excessive aliasing of the `volcitepages`
+ format.
+ Reverted the alias `\DeclareFieldAlias{volcitepages}{postnote}`
+ and again define
+ ```
+ \DeclareFieldFormat{volcitepages}{\mkpageprefix[pagination][\mknormrange]{#1}}
+ ```
+ explicitly.
+# RELEASE NOTES FOR VERSION 3.15b
+- Fixed `.lbx` file loading behaviour. All `.lbx` files are now loaded
+ `\AtBeginDocument`. Languages that were not requested explicitly by packages
+ are recorded in the `.aux` file and loaded on the next run.
+ This may require a further LaTeX run in some situations, but now we can be
+ sure when `.lbx` files are read.
+- Added `label` option to `\printbibliography`.
+- Added more name wrapper aliases to make name aliasing smoother.
+- Deprecate `\mainlang` switch in favour of the text macro `\textmainlang`.
+- Deprecate `\mkrelatedstring` (which is defined as `\mainlang`)
+ in favour of `\mkrelatestringtext` (defined as `\textmainlang`).
+
+# RELEASE NOTES FOR VERSION 3.15a
+- Fixed bug with long argument for `\DeclareFieldFormat` and friends.
+
+# RELEASE NOTES FOR VERSION 3.15
+- Fixed a long-standing issue with `\intitlepunct`.
+ The old definition
+ ```
+ \newbibmacro*{in:}{%
+ \printtext{%
+ \bibstring{in}\intitlepunct}}
+ ```
+ would print `\intitlepunct` directly and not via the punctuation
+ buffer. Since the `\add...` punctuation macros guard against
+ undesired double punctuation, this would usually not show as an
+ issue (except in edge cases https://tex.stackexchange.com/q/175730/,
+ https://github.com/plk/biblatex/issues/943).
+ The new definition uses the punctuation tracker to print
+ `\intitlepunct`.
+ ```
+ \newbibmacro*{in:}{%
+ \bibstring{in}%
+ \printunit{\intitlepunct}}
+ ```
+ `\printunit` is needed instead of `\setunit` to stop subsequent
+ `\setunit`s from overriding `\intitlepunct` in case of missing
+ fields.
+- Define `volcitepages` and `multipostnote` as a field alias of `postnote`
+ and `multiprenote` as an alias of `prenote`.
+ That should make it easier to change all post- and prenote formats at once.
+ A change to `postnote` will automatically apply to `multipostnote`
+ and `volcitepages` as well. Similarly for `multiprenote`.
+ In case that is not desired, the original definitions can be restored with
+ ```
+ \DeclareFieldFormat{volcitepages}{\mkpageprefix[pagination][\mknormrange]{#1}}
+ \DeclareFieldFormat{multiprenote}{#1\isdot}
+ \DeclareFieldFormat{multipostnote}{\mkpageprefix[pagination][\mknormrange]{#1}}
+ ```
+
+ **NB** The definition of `volcitepages` caused an infinite loop and was
+ reverted in v3.15b.
+ This means that only `multiprenote` and `multipostnote` are aliased.
+- Unified DOI, eprint and URL printing across all entry types.
+ The fields `doi`, `eprint`, `eprintclass`, `eprinttype` and `url`
+ are now valid for all entry types.
+ `@online` and `@unpublished` now also use the bibmacro
+ `doi+eprint+url`.
+ This means `@online` now responds to the `url` option.
+ That does not mean, however, that a global `url=false,`
+ suppresses URLs for `@online` entries, since `url=true,`
+ is set on a per-type level to ensure backwards compatibility
+ as far as possible.
+ In case eprint information should be suppressed for `@online`
+ and `@unpublished`, add
+ ```
+ \ExecuteBibliographyOptions[online,unpublished]{eprint=false}
+ ```
+- Added `eid` to more entry types.
+ To avoid issues with backwards compatibility of widely used bibmacros,
+ the bibmacro `chapter+pages` was redefined from
+ ```
+ \newbibmacro*{chapter+pages}{%
+ \printfield{chapter}%
+ \setunit{\bibpagespunct}%
+ \printfield{pages}%
+ \newunit}
+ ```
+ to
+ ```
+ \newbibmacro*{chapter+pages}{%
+ \printfield{chapter}%
+ \setunit{\bibeidpunct}%
+ \printfield{eid}%
+ \setunit{\bibpagespunct}%
+ \printfield{pages}%
+ \newunit}
+ ```
+- Added `\bibeidpunct` in analogy to `\bibpagespunct`.
+- Added `issuetitleaddon` and `journaltitleaddon` fields.
+- Added options `backreffloats` and `trackfloats` to enable/disable
+ citation tracking and back references in floats.
+ Note that citation tracking in floats can lead to undesirable
+ results in case the float objects floats too far from its "natural"
+ position.
+- **INCOMPATIBLE CHANGE** `numeric-comp` compresses subentry set
+ references now.
+ This behaviour can be disabled with `subentrycomp=false`.
+- Added `subentrycomp` option to `numeric-comp` citation style.
+ The option is only relevant with `subentry=true`.
+ With `subentrycomp=true` set citations will be compressed
+ to "1a-c" instead of "1a; 1b; 1c".
+ The option is mainly intended for backwards compatibility;
+ the behaviour of previous `biblatex` versions can be restored
+ with `subentrycomp=false`.
+- Added `\multiciterangedelim`, `\multicitesubentrydelim`,
+ `\multicitesubentryrangedelim`, `\superciterangedelim`,
+ `\supercitesubentrydelim`, and `\supercitesubentryrangedelim` for
+ finer control over (compressed) subentry citations in `numeric-comp`.
+- **CRITICAL CHANGE**
+ The structure of the bibmacros in `numeric-comp`
+ has been reworked to make it easier to customise the printed output.
+ Documents that relied on patching internal bibmacros or heavily
+ redefined them may have to adapt.
+- **CRITICAL CHANGE**
+ Implemented better `@set` support for BibTeX, `@set`s should now
+ sort properly.
+ This is achieved with a two-pass structure and (hidden) copies of
+ the set entries.
+ The two-pass structure means that the compilation sequence becomes
+ LaTeX, BibTeX, LaTeX, BibTeX, LaTeX, LaTeX.
+- **CRITICAL CHANGE**
+ The case change functions now make use of the `expl3` module `l3text`
+ if the available `expl3` version is recent enough.
+ If `expl3` is too old the old LaTeX2e implementation is used.
+ If desired the implementation of the case changing functions
+ can be selected at load-time with the `casechanger` option, which
+ accepts the values `expl3`, `latex2e` and `auto` (which selects
+ `expl3` if the `expl3` version not older than 2020-04-06, this
+ is the default).
+
+ The `expl3` implementation of the case changer is slightly more
+ robust than the home-grown `latex2e` code.
+- The option `bibtexcaseprotection` can be used to turn off the
+ case protection via curly braces. This allows for a saner approach
+ to case protection where text is protected solely via a macro
+ like `\NoCaseChange`, e.g.
+ ```
+ title = {The Story of \NoCaseChange{HMS \emph{Erebus}}
+ in \emph{Really} Strong Wind},
+ ```
+ instead of
+ ```
+ title = {The Story of {HMS} \emph{Erebus}
+ in {\emph{Really}} Strong Wind},
+ ```
+- Added `\mautocite` and `\Mautocite`.
+- Added `\NumsCheckSetup` and `\PagesCheckSetup` for finer control
+ of the `\ifnumerals` and `\ifpages` checks.
+- Deprecate the starred `\DeclareDelimAlias*` in favour of
+ `\DeclareDelimAlias` with optional arguments.
+- **INCOMPATIBLE CHANGE**
+ `biblatex` no longer falls back to English for unknown languages.
+ Warnings will be triggered if undefined language strings or extras
+ are used.
+- **INCOMPATIBLE CHANGE**
+ Bibliography strings and bibliography extras can now be written
+ either to `\captions<language>` or to `\extras<language>`
+ (this is controlled with the `langhook` option).
+ Previously, they were written to `\extras<language>`, but upon
+ reflection `\captions<language>` appears to be a more sensible
+ place for these definitions.
+ The new default is to write to `\captions<language>`
+ (i.e. `langhook=captions`).
+ The previous behaviour can be restored with `langhook=extras`.
+- **INCOMPATIBLE CHANGE** Moved `\delimcontext{bib}` to `\AtUsedriver`,
+ this makes it easier to override the delimiter context in `\usedriver`
+ calls. `\AtUsedriver*` calls may have to be amended to include
+ `\delimcontext{bib}`. The new default is
+ ```
+ \AtUsedriver{%
+ \delimcontext{bib}%
+ \let\finentry\blx@finentry@usedrv
+ \let\newblock\relax
+ \let\abx@macro@bibindex\@empty
+ \let\abx@macro@pageref\@empty}
+ ```
+ Note that this definition is backwards compatible
+ and can be used in older versions as well (down to v3.4 2016-05-10).
+- `biblatex` now tests if a requested backend (re)run happened by
+ comparing the MD5 hashes of the new and old `.bbl` files.
+- Added file hooks `\blx@filehook@preload@<filename>`,
+ `\blx@filehook@postload@<filename>`
+ and `\blx@filehook@failure@<filename>`
+ to execute hooks before or after a file is loaded
+ or if the loading fails.
+ `\blx@lbxfilehook@simple@preload@<filename>`,
+ `\blx@lbxfilehook@simple@postload@<filename>`
+ and `\blx@lbxfilehook@simple@failure@<filename>`
+ as well as
+ `\blx@lbxfilehook@once@preload@<filename>`,
+ `\blx@lbxfilehook@once@postload@<filename>`
+ and `\blx@lbxfilehook@once@failure@<filename>`
+ are the equivalents for `.lbx` loading, where
+ files may be loaded several times in some situations.
+- Added limited support for 'nodate' with BibTeX.
+- Improved `babel` and `polyglossia` interfacing (avoids more or less
+ unsupported patches).
+ This should work with `babel` at least v3.9r (2016/04/23)
+ and polyglossia `polyglossia` v1.49 (2020/04/08) or later.
+- **INCOMPATIBLE CHANGE** Removed list and name index wrappers
+ (`\DeclareIndexNameWrapperFormat`, `\DeclareIndexListWrapperFormat`
+ and friends). Those wrappers make no sense, since the indexed
+ names are not printed 'together' in any useful sense of the word
+ and were never working anyway.
+- **CRITICAL CHANGE** Generalised some keyval macros.
+ `biblatex`-related uses of `\define@key` should ideally replaced with
+ `\blx@kv@defkey`.
+ Style authors are advised not to rely too much on the internal
+ implementation of certain keyval interfaces.
+ Users who want to experiment with using a different underlying
+ keyval parser need only provide replacements of the `\blx@kv@...`
+ macros (which are defined via `\provide...` so that they will
+ not overwrite existing definitions; in particular users can define
+ those replacements before loading `biblatex`).
+- Deprecate `\ifkomabibtotoc` and `\ifkomabibtotocnumbered`.
+ With newer versions of KOMA-Script these tests are no longer used
+ and their implementation was always a bit shifty (they would only pick
+ up globally set options).
+
+
+# RELEASE NOTES FOR VERSION 3.14
+- biber from version 2.14 has extended, granular XDATA functionality to
+ allow referencing from and to parts of fields. This makes XDATA entries into
+ more general data sharing containers.
+- Biber applies Perl's Unicode case folding to normalise the
+ capitalisation of field names and entry types when reading from the
+ `.bib` file. The output in the `.bbl` (what comes out on the
+ `biblatex` side uses the capitalisation from the data model; the only
+ exception are unknown entry types which are passed on *exactly*
+ as they are given in the `.bib` file - of course it is strongly
+ recommended to define all entry types one intends to use in the
+ data model).
+- `biblatex` now interfaces with `polyglossia` much better and can deal
+ with language variants.
+ Note that `polyglossia` v1.45 (2019/10/27) is required for this
+ to work properly, it is strongly recommended to update `polyglossia`
+ to this or a later (current) version.
+
+# RELEASE NOTES FOR VERSION 3.13
+- **INCOMPATIBLE CHANGE** Any custom per-entry options in datasources must
+ be defined with `\DeclareEntryOption` in order for biber to recognise
+ them and pass them out in the `.bbl`.
+ This should not adversely affect any code using the documented
+ `\Decalare...Option` interface, so should be uncritical for most users.
+- Added `\DeclareBiblatexOption` as a convenient interface to declare the same
+ option in different scopes. This should help avoid code duplication.
+ For example
+ ```
+ \DeclareBibliographyOption[boolean]{noroman}[true]{%
+ \settoggle{blx@noroman}{#1}}
+ \DeclareTypeOption[boolean]{noroman}[true]{%
+ \settoggle{blx@noroman}{#1}}
+ \DeclareEntryOption[boolean]{noroman}[true]{%
+ \settoggle{blx@noroman}{#1}}
+ ```
+ can be replaced with
+ ```
+ \DeclareBiblatexOption{global,type,entry}[boolean]{noroman}[true]{%
+ \settoggle{blx@noroman}{#1}}
+ ```
+- Following the introduction of `\DeclareBiblatexOption` extend the scope
+ of a few options (`abbreviate`, `citetracker`, `clearlang`, `dataonly`,
+ `dateabbrev`, `<namepart>inits`, `ibidtracker`, `idemtracker`, `labelalpha`,
+ `labelnumber`, `labeltitle`, `labeltitleyear`, `labeldateparts`,
+ `loccittracker`, `opcittracker`, `singletitle`, `skipbib`, `skipbiblist`,
+ `skipbiblab` `terseinits`, `uniquelist`, `uniquename`, `uniquetitle`,
+ `uniquebaretitle`, `uniquework`, `uniqueprimaryauthor`).
+- Furthermore, the standard style options `doi`, `eprint`, `isbn`, `url`,
+ `related` are now available also on a per-type and per-entry level.
+ The same holds for `mergedate`, `subentry` and the options of `reading.bbx`.
+ This change has the potential to clash with custom styles that already define
+ the standard options at these scopes.
+- Promote `@software` to regular entry type and define `@dataset`.
+ `@software` is aliased to the `@misc` driver,
+ `@dataset` has a dedicated driver.
+- Add `\ifvolcite` test to check if the current citation is in a `\volcite`
+ context.
+- Add the special fields `volcitevolume` and `volcitepages` for finer control
+ over the `\volcite` postnote.
+- Add `\AtVolcite` hook to initialise `\volcite` commands.
+- Add `\mkbibcompletename` as well as `\mkbibcompletename<formatorder>`
+ to format complete names.
+ The commands are analogous to `\mkbibname<namepart>` but apply to
+ the entire name printed in format order `<formatorder>`.
+ By default the predefined macros all expand to `\mkbibcompletename`.
+- Add `multiprenotedelim` and `multipostnotedelim` and make all
+ `(pre|post)notedelim`-like commands context sensitive.
+- Add rudimentary support for `labelprefix` with BibTeX backend.
+ Biber implements `labelprefix` via `refcontext`s, but BibTeX does not
+ actually support `refcontext`s. The user interface is retained, but BibTeX's
+ "`refcontext`s" support only the emulation of `labelprefix` and nothing more.
+ There might be subtle differences between Biber's and BibTeX's
+ `labelprefix` behaviour, but it should be better than nothing.
+ If you need full `labelprefix` support, please consider switching to Biber.
+- Add `\thefirstlistitem`, `\strfirstlistitem` and `\usefirstlistitem` to
+ grab and use the first item of a field.
+- Add `\isdot` to the format for `journaltitle` so that `.`s at the end of the
+ `journal(title)` field are automatically treated as abbreviation dots and not
+ sentence-ending periods. To restore the old behaviour add
+ ```
+ \DeclareFieldFormat{journaltitle}{\mkbibemph{#1}}
+ ```
+ to the preamble.
+- Add second optional item post processing argument to `\mkcomprange`,
+ `\mknormrange` and `\mkfirstpage`. It can be used to post process
+ every number item in the formatted range separately. It can for
+ example turn cardinal ranges into ordinal ranges (this is done in
+ the Latvian localisation module).
+- Add further customisation options for strings typeset with `url`'s `\url`
+ command (mainly URLs and DOIs). It is now possible to add a bit of
+ stretchable space after characters with `biburlnumskip`, `biburlucskip`
+ and `biburlucskip`. The previously hard-coded (stretacheble) space
+ `\biburlbigskip` as well as the penalties `biburlbigbreakpenalty` and
+ `biburlbreakpenalty` are also configurable now.
+- Add `\DeclarePrintbibliographyDefaults` to set default values for some
+ option keys to `\printbibliography` and friends.
+- `\nocite` is now enabled in the bibliography (previously it was
+ deactivated in the bibliography).
+ Please report any issues that this may cause.
+- The internals macros `\abx@aux@cite`, `\abx@aux@refcontext`
+ and `\abx@aux@biblist` are now called every time an entry is cite
+ (and appears in a bibliography or biblist, respectively).
+ This helps to avoid unwanted side-effects when writing to aux files
+ is disabled.
+- `\nohyphenation` and `\textnohyphenation` now rely on a (fake)
+ language without hyphenation patterns instead of `\lefthyphenmin`,
+ which means that the command can now be used anywhere in a paragraph,
+ see also <https://texfaq.org/FAQ-hyphoff>.
+ Note that switching languages with `babel` *within* those commands
+ removes the hyphenation protection.
+- Allow `doi` field for `@online` entries. This field was previously
+ not printed in the `@online` driver. In case DOIs appear where
+ they should not appear the output of earlier versions can be
+ recreated with
+ ```
+ \ExecuteBibliographyOptions[online]{doi=false}
+ ```
+ since the `doi` option is now available on a per-type level.
+
+
+# RELEASE NOTES FOR VERSION 3.12
+- **INCOMPATIBLE CHANGE** The syntax for defining data annotations in the
+ BibLaTeXML data source format has changed to accommodate named
+ annotations. Annotations are no longer attributes but are fully-fledged
+ elements. It is not expected that this will impact any current users.
+- **INCOMPATIBLE CHANGE** The field/fieldset argument to the `\translit`
+ command is now mandatory to allow for a new optional argument which
+ restricts transliteration to entries with particular `langid` fields.
+- The field `sortyear` is an integer field now and not a literal. This is
+ because the `sortX` fields should be the same datatype as the `X` field
+ as sorting depends on this. This fixes an issue where years were not
+ sorted properly as integers. `sortyear` was sometimes used to tune date
+ sorting as in "1984-1", "1984-2" etc. for multi-volume collections with
+ the same year. However, this is really an abuse of the sorting template
+ system since this should be done by having a semantically more granular
+ sorting item to differentiate below the year level (typically, `volume`
+ does this for multi-volume works and this is already part of all default
+ sorting templates). The example .bib that comes with biblatex has been
+ changed to remove such `sortyear` abuses and the sorting is not impacted
+ as they examples using this already have either `volume` or `sorttitle`
+ which made this abuse of `sortyear` unnecessary anyway.
+- The field `number` is a literal field now and not an integer. This allows for
+ a wider range of possible input such as "S1", "Suppl. 1", "1-3".
+ If you want to sort by `number` and only have integers in there, you should
+ consider using a custom data model to turn `number` back into an integer type
+ field, since sorting integers as literals has performance implications and
+ might lead to undesired sorting such as "1", "10", "2".
+- **INCOMPATIBLE CHANGE** Removed the 'semi-hidden' option `noerroretextools`.
+ If you want to load `noerroretextools` now, you need to define the macro
+ `\blx@noerroretextools` instead. This can for example be done with
+ ```
+ \usepackage{etoolbox}
+ \cslet{blx@noerroretextools}\empty
+ \usepackage{biblatex}
+ ```
+ or
+ ```
+ \makeatletter
+ \let\blx@noerroretextools\@empty
+ \makeatother
+ \usepackage{biblatex}
+ ```
+ You still need to make sure that all macros used by `biblatex` are restored
+ to their `etoolbox` definitions before loading `biblatex`.
+- New macro `\abx@missing@entry` to style missing entrykeys in citations.
+- Added field format deprecation macros `\DeprecateFieldFormatWithReplacement`
+ and friends.
+- Add `\ifdateyearsequal` to check if two dates have the same year and era
+ date part. Since `year`s are always non-negative integers and the 'sign' is
+ stored as the `era`, you should use `\ifdateyearsequal` instead of a simple
+ `\iffieldequals{#1year}{#2year}` to compare years. The latter can lead to
+ undesired results if the years have opposite signs, but are otherwise the
+ same.
+- New values `part+`, `chapter+`, `section+` and `subsection+` for 'section'-
+ valued options `refsection`, `refsegment` and `citereset`. These options
+ are then executed at not only the specified level of sectioning, but also
+ all higher levels.
+- Add second optional argument to `\DeclareDelimAlias*`.
+- Allow keywords for dataonly/skipped entries as well.
+- Added `maxcitecounter`.
+- Deprecate `\labelnamepunct` in favour of the context-sensitive
+ `nametitledelim`.
+ For compatibility reasons `\labelnamepunct` still pops up in the code here
+ and there, but `nametitledelim` should be preferred now.
+- The `xstring` package is not loaded by default any more.
+ Style developers whose styles make use of that package should load it
+ explicitly.
+- `authoryear.bbx` now has a macro `bbx:ifmergeddate` that can be used to
+ check whether the date has been printed at the beginning of an entry
+ and can thus be suppressed later in the `date` and `issue+date` macros.
+ The macro works like a test and expands to the `<true>` branch if the date
+ has been merged and can be suppressed, it expands to `<false>` if the date
+ has not been merged. In practice `\printdate` should then be issued
+ if and only if the test yields false.
+
+ This change means that the definition of the `date` macro can be the same for
+ all mergedate settings and that only `bbx:ifmergeddate` is redefined for
+ each different value. No backwards compatibility issues are expected,
+ but style authors are encouraged to test the changes and see if the new
+ macro could be useful for their styles.
+- For a long time `biblatex` has defined `\enquote` if `csquotes` was not
+ loaded. This behaviour was not documented, the official command intended
+ for quotation marks was always `\mkbibquote`. Because `biblatex` should not
+ (re)define user-level commands that are not primarily associated with
+ citations or the bibliography, from this release on `\enquote` is not defined
+ any more, instead the internal command `\blx@enquote` is defined and used.
+ The same holds for `\initoquote`, `\initiquote`, `\textooquote`,
+ `\textcoquote`, `\textoiquote`, `\textciquote`.
+ `biblatex` still defines the internal commands `\@quotelevel`, `\@quotereset`
+ and `\@setquotesfcodes` if `csquotes` is not loaded.
+
+ Users are encouraged to use `csquotes` for proper quotation marks, but can
+ get back the old behaviour with
+ ```
+ \makeatletter
+ \providerobustcmd*{\enquote}{\blx@enquote}
+ \makeatother
+ ```
+ or
+ ```
+ \newrobustcmd*{\enquote}{\mkbibquote}
+ ```
+- Add new list wrapper and name wrapper formats (`\DeclareListWrapperFormat`,
+ `\DeclareNameWrapperFormat`) to style a (name) lists in its entirety.
+ This is useful because name and lists formats normally style only one
+ particular item of the list. The wrapper format can be used to easily format
+ the entire list in italics, for example.
+- `\DeclareCitePunctuationPosition` can be used to configure the punctuation
+ position for citation commands similar to the optional `position` argument
+ of `\DeclareAutoCiteCommand`.
+- If the `\pdfmdfivesum` primitive is available (via `pdftexcmds`'
+ `\pdf@mdfivesum`) the `labelprefix` value is hashed for internal use, making
+ it safer for construction of macro names and the like. If you don't like
+ that you can turn off the behaviour by redefining `\blx@mdfivesum`. The
+ fallback in case `\pdf@mdfivesum` is unavailable is
+ ```
+ \let\blx@mdfivesum\@firstofone
+ ```
+
+ As before the labelprefix value is fully expanded before use. If its contents
+ are unexpandable you need to avoid expansion with `\detokenize`.
+
+# RELEASE NOTES FOR VERSION 3.11
+- `\printbiblist` now supports `driver` and `biblistfilter` options
+ to change the defaults set by the biblistname.
+- Add `\mknormrange` to normalise page ranges without compressing them.
+- **INCOMPATIBLE CHANGE** The format for `postnote` (`multipostnote`,
+ `volcitepages`) normalises page ranges with `\mknormrange`.
+ Since `\mknormrange` acts only on page ranges as detected by
+ `\ifpages`, this does not affect text other than page ranges.
+ Hyphens and dashes in page ranges will be transformed to
+ `\bibrangedash`, commas and semicolons to `\bibrangesep`.
+ This is analogous to Biber's treatment of page-like fields.
+ If you always separated page ranges with `--` or `\bibrangedash`
+ anyway, this should not change the output you get.
+ If you used a single hyphen to separate page ranges (e.g., `23-27`)
+ you will now get the arguably more aesthetically pleasing output
+ with `\bibrangedash`.
+ In case you want to restore the old behaviour where page ranges were
+ not normalised add the following three lines to your preamble.
+ ```
+ \DeclareFieldFormat{postnote}{\mkpageprefix[pagination]{#1}}
+ \DeclareFieldFormat{volcitepages}{\mkpageprefix[pagination]{#1}}
+ \DeclareFieldFormat{multipostnote}{\mkpageprefix[pagination]{#1}}
+ ```
+ Style developers may note that the field format for `pages`
+ was not changed to include `\mknormrange` because the contents
+ of that field are prepared by the backend and Biber already does
+ the page range normalisation out of the box.
+- The standard definitions for headings were changed to be as close to the
+ defaults of the standard document classes or KOMA/memoir as possible.
+ **PLEASE CHECK** if your document headers relied on the behaviour of older
+ versions.
+- The `@unpublished` entry type now also supports `type`, `eventtitle`,
+ `eventdate` and `venue`.
+- A long-standing bug with punctuation before `eventdate` and `venue` was fixed.
+ Originally the round brackets were supposed to be preceded only by a space,
+ the addition of other fields caused this space to be replaced by new unit
+ punctuation. **PLEASE CHECK** if you can accept the changed output.
+- Added `\ifdateannotation`. Added optional argument for field and item to
+ `\iffieldannotation`, `\ifitemannotation`, and `\ifpartannotation`.
+- `\DeclareSourcemap` can now be used multiple times.
+- **INCOMPATIBLE CHANGE** Language aliases are now also resolved when loading
+ localisation files, only infinite recursion is avoided.
+ Assuming `\DeclareLanguageMappingSuffix{-apa}`, loading `ngerman` localisation
+ causes `ngerman-apa.lbx` to be read. If that file inherits from `german`,
+ `german-apa.lbx` will be read. Previously only `german.lbx` would have been
+ read at that point. Of course if `german-apa.lbx` inherits from `german`,
+ `german.lbx` is loaded at that point, so infinite recursion is avoided.
+- **CRITICAL CHANGE** The code to load localisation files was changed.
+ This is a an internal change and should not influence document output,
+ save for a few bug fixes. Style authors should check if the changes introduce
+ any bugs for their localisation handling and report them.
+- Added `\begrelateddelim` and `\begrelateddelim<relatedtype>` for punctuation
+ before the related block. **PLEASE CHECK** that this change does not interfere
+ with your punctuation settings. The change should be backwards compatible,
+ but might give different results if `\usebibmacro{related}` is used in
+ unusual positions.
+- Added `locallabelwidth` option to control the label spacing in bibliographies,
+ if set to true, the label width will be calculated locally for the current
+ bibliography and not globally from a list of all citation.
+
+# RELEASE NOTES FOR VERSION 3.10
+- **INCOMPATIBLE CHANGE** The recent ISO8601:201x standard supersedes
+ the draft EDTF (Extended Date Time Format) extensions. Biblatex therefore
+ now supports the ISO8601-2 Clause 4, Level 1 Extended Format which is
+ equivalent to the draft EDTF standard but with different syntax. *This
+ syntax is in some cases not backwards compatible*. Biblatex will not
+ support backwards compatibility for the draft EDTF syntax because it is
+ too messy to do so and few people were using this anyway since it is a
+ relatively new and specialised feature. Please note these syntax changes
+ which effect only the formatting of DATE fields in bibliography datasources:
+ - The "unspecified" marker "u" is now "X"
+ - An approximate+uncertain date is now indicated with "%" rather than "?~"
+ - Open dates are now marked with ".." instead of "open" or blank
+ start/end dates.
+ - Unknown dates are now indicated by blank start/end dates rather than
+ "unknown" or "*"
+- Unicode support code that is problematic for non-Unicode engines,
+ but useful for XeTeX and LuaTeX now resides in `blx-unicode.def`.
+ That file is only read by XeTeX and LuaTeX.
+- The option `noerroretextools` demotes the incompatibility error for
+ `etextools` to a mere warning if set to `true`. Users still need
+ to make sure that `\forlistloop` has the definition from `etoolbox`
+ and not the completely incompatible definition from `etextools`.
+ This option is meant as a last resort for people who must at all
+ costs load `etextools` or a package that uses it.
+ `noerroretextools=true` will always cause a warning even if
+ `etextools` is not loaded.
+
+# RELEASE NOTES FOR VERSION 3.9
+## Bug fix release
+- Fix `\mkpagetotal`
+- Fix issue with refcontexts not appearing in some circumstances
+- **DEPRECATION NOTICE** The coming update to the ISO8601 standard
+ supercedes the draft EDTF (Extended Date Time Format) extensions.
+ When the new ISO8601 standard is public, biblatex will therefore
+ support the ISO8601-2 Clause 4, Level 1 Extended Format which is
+ equivalent to the draft EDTF standard but with different syntax. This
+ syntax is in some cases not backwards compatible. Biblatex will not
+ support backwards compatibility for the draft EDTF syntax because it is
+ too messy to do so and few people were using this anyway since it is a
+ relatively new and specialised feature. Please note these syntax changes
+ which will effect only the formatting of DATE fields in bibliography
+ datasources:
+ - The "unspecified" marker `u` is now `X`
+ - An approximate+uncertain date is now indicated with `%` rather than `?~`
+ - Open dates are now marked with `..` instead of `open` or blank start/end dates.
+ - Unknown dates are now indicated by blank start/end dates rather than `unknown` or `*`
+
+# RELEASE NOTES FOR VERSION 3.8a
+## Bug fix release
+- Documentation version fix and loop fix in certain styles
+
+# RELEASE NOTES FOR VERSION 3.8
+## Requirements
+Biber version 2.8 is required for biblatex 3.8
+
+## In order to standardise terminology, some commands and options have dropped the "scheme" naming convention and switched to "template"
+- `\DeclareSortingScheme` is now `\DeclareSortingTemplate`
+- `\DeclareSortingNamekeyScheme` is now `\DeclareSortingNamekeyTemplate`
+- The "sortingnamekeyscheme" option is now "sortingnamekeytemplate"
+
+## `\DeclareLabelalphaNameTemplate` no longer has entrytype scope
+- **INCOMPATIBLE CHANGE** The optional first argument to
+ `\DeclareLabelalphaNameTemplate` was previously an entrytype but is now an
+ arbitrary template name, as with `\DeclareUniquenameTemplate`. This is to
+ allow multiple definitions which can be referred to at different scopes.
+ It is unlikely that anyone used this with entrytype scope anyway.
+
+## `origlanguage` is now a list instead of a field.
+- **INCOMPATIBLE CHANGE** Since this is mostly used to generate localisation strings like
+ 'Translated from the <language>' via the internal macros `lbx@lfromlang`
+ and `\lbx@sfromlang`, users and style authors should not see any
+ differences. However, if your style prints `origlanguage` directly using
+ `\printfield`, this will need to be changed to `\printlist`.
+
+## Name handling enhancements
+- Name handling is now fully generalised to cover arbitrary name parts.
+ The final few pieces have been completed to allow fully customisable
+ name handling, allowing for better internationalisation. The code for
+ name uniqueness calculation and label generation for names is now fully
+ abstracted: templates created with `\DeclareUniquenameTemplate` and
+ `\DeclareLabelalphaNameTemplate` may now be specified at per-refcontext,
+ per-entry, per-namelist and per-name scope, which allows complete
+ control over all aspects of name usage. See the comments in the enhanced
+ `93-nameparts.tex` example file.
+
+## `extrayear` is now `extradate` and the information used to track this can be customised
+- **INCOMPATIBLE CHANGE** `extrayear` is called `extradate` now.
+ Limited backwards compatibility is
+ in place to allow a smooth transition, but style developers should use the new name.
+- The new `\DeclareExtradate` command allows users to track authoryear
+ disambiguation in arbitrary ways now, for example allowing disambiguation
+ at month or day level instead of just year. See the PDF doc for details.
+- **INCOMPATIBLE CHANGE** Some bibmacros from the `authoryear` style family
+ were renamed, `cite:labelyear+extrayear` becomes `cite:labeldate+extradate`,
+ `cite:extrayear` is `cite:extradate` now, and `date+extrayear`
+ is `date+extradate`. Some backwards compatibility code is present,
+ but developers should make sure their code works as expected.
+
+## Date formatting
+- The `mergedate` output has been restored to its earlier form,
+ it has also been extended to cover all EDTF date parts.
+ In order to facilitate this, a few date-related tests were introduced
+ `\iflabeldateisdate`, `\ifdatehasyearonlyprecision`, `\ifdatehastime`
+ and `\ifdateshavedifferentprecision`.
+- The `authoryear` citation styles now use `\printlabeldateextra`
+ instead of `\printfield{labelyear}\printfield{extrayear}`.
+ This should have no consequences for end users (except that
+ dates in citations and bibliography don't differ any more -
+ previously there were subtle differences when many EDTF features
+ were used), but style developers should check if they assume
+ anything about the bibmacros that have now changed.
+ Style developers are invited to have a look at the changes and
+ to get inspired to offer full EDTF format for their styles as well.
+
+## Set handling
+- Static entry sets used to have the behaviour that when citing a member of
+ a set, the data for the citation came from the set parent which was in
+ turn taken from the first member of the set. In most use cases, the only
+ part of the set parent data that was actually used was the labels but in
+ certain edge cases, other data was used which results in confusing
+ citations for set members. This has been refactored so that when citing
+ set members, the member data is used along with some labelling data
+ injected from the set parent. This means that things like
+ `\citeauthor{somesetmember}` now give the expected results.
+ *PLEASE NOTE* that this means that citing sets directly in default styles *not*
+ based on labels (`authoryear`, `authortitle`, `verbose` etc.) will result
+ in blank citations as it is not envisaged that sets are useful in such
+ styles.
+- The members of a set can now be sorted according to the active
+ sorting scheme, this is enabled via the `sortsets` option.
+ By default the option is set to false and set members appear
+ in the order given in the data source.
+- The `alphabetic` style family now also supports the `subentry`
+ option.
+
+## Localisation and styles
+- Styles which supply their own location strings in `.lbx` files typically
+ use `\DeclareLanguageMapping` to map a document language to the supplied
+ language files. This is not ideal because the mapping has to be done by
+ the user depending on the specific language. For example, for the APA
+ style, in a document using American English, this line is necessary in
+ every document:
+ ```
+ \DeclareLanguageMapping{american}{american-apa}
+ ```
+ so that the style supplied `america-apa.lbx` file is loaded.
+ In a document using the German language, the user would have to use:
+ ```
+ \DeclareLanguageMapping{german}{german-apa}
+ ```
+ A new macro `\DeclareLanguageMappingSuffix` is now supplied which allows
+ styles to register a global localisation file suffix which is appended to
+ any document language automatically. This removes the need for
+ `\DeclareLanguageMapping` in user documents as it ensures that the
+ correct localisation file will be read nomatter what the document language.
+ For example, the APA style (from version v7.5) now has this
+ in `apa.bbx`:
+ ```
+ \DeclareLanguageMappingSuffix{-apa}
+ ```
+ which means that for a given document language `<lang>`
+ the localisation file `<lang>-apa.lbx` will be loaded.
+ `\DeclareLanguageMapping`, if present, will override
+ `\DeclareLanguageMappingSuffix`.
+
+## Context-sensitive delimiters
+- Several delimiter macros now use the context-sensitive delimiter interface
+ introduced in version 3.4 (`\DeclareDelimFormat`). This change is fully
+ backwards compatible, but style developers should feel encouraged to use the
+ new commands `\DeclareDelimFormat` and `\printdelim`.
+- Three new delimiters are introduced. `authortypedelim`, `editortypedelim`,
+ and `translatortypedelim` control the delimiter between the respective name
+ and the following `<name>` bibstring.
+ This together with `\DeclareFieldFormat{<name>type}` allows one to go from
+ 'E. Ditor, ed.' to 'E. Ditor (ed.)' more easily without the need
+ to redefine entire bibmacros.
+- `\DeclareDelimAlias` allows one to alias one delimiter to another.
+ E.g. `\DeclareDelimAlias{finalnamedelim}{multinamedelim}`
+ will make `finalnamedelim` an alias for `multinamedelim`.
+ The starred version `\DeclareDelimAlias*` is local to the
+ specified contexts.
+
+## Misc changes
+- The initialisation code for `\usedriver` can now be modified via
+ `\AtUsedriver`, the code can be executed with `\UseUsedriverHook`.
+ The default settings retain backwards compatibility with earlier
+ versions.
+- The field `urlraw` contains the unencoded, raw version of the URL.
+ If the URL includes Unicode characters, `urlraw` will show them
+ unencoded while the standard `url` field will contain them in
+ percent-encoded form.
+- `\mkpagetotal` now has its own bibstrings `<pagination>total(s)`
+ Previously it relied on the `<pagination>(s)` bibstrings.
+- `sortyear` is now a literal field and not an integer.
+- The `etextools` package is now officially incompatible.
+- `bidi`-support for footnotes was improved.
+- `\ifentryseen`, `\ifentryinbib`, `\ifentrycategory`
+ and `\ifentrykeyword` can now be used outside of
+ `biblatex` macros directly in the document.
+- `\letbibmacro` can be used to create bibmacro aliases as if
+ using `\let`.
+- `\DeprecateFieldWithReplacement`, `\DeprecateListWithReplacement`
+ and `\DeprecateNameWithReplacement` can be used to deprecate a field,
+ name or list and replace it with a new one.
+
+# RELEASE NOTES FOR VERSION 3.7
+## Requirements
+Biber version 2.7 is required for biblatex 3.7
+
+Bugfix release.
+
+# RELEASE NOTES FOR VERSION 3.6
+## Requirements
+Biber version 2.6 is required for biblatex 3.6
+
+This is a minor bugfix release.
+
+# RELEASE NOTES FOR VERSION 3.5
+## Requirements
+Biber version 2.6 is required for biblatex 3.5
+
+## Name support
+- **INCOMPATIBLE CHANGE** The labelling system has been generalised
+ to be able to deal better with names. `\DeclareLabelalphaTemplate` no
+ longer uses hard-coded name parts (prefix, family) when extracting label
+ parts from name fields. Name field label extraction now obeys the new
+ `\DeclareLabelalphaNameTemplate` specification which details how to extract
+ label information from each namepart known to the data model. The default
+ setting is backwards compatible with the old hard-coded behaviour.
+ However, if you have custom `\DeclareLabelalphaTemplate` specifications,
+ you should note that the "pcompound" and "pstrwidth" options to `\field`
+ are now gone and replaced with the relevant settings on `\namepart` in
+ `\DeclareLabelalphaNameTemplate`. The old options will generate warnings.
+ It is too complex to provide backwards compat for this, sorry - please
+ update your templates if necessary. This is one of the last changes
+ needed to fully generalise name handling.
+
+## Date input and output
+Major enhancements to the dates parsed by biblatex and the output formats
+available. Biblatex now supports [[http://www.loc.gov/standards/datetime/pre-submission.html][EDTF]] level 0 and 1. This is an enhanced
+ISO8601v2004 format suitable for bibliographic data. The new support is a
+superset of the previous limited ISO8601 support. Times are now fully
+supported in various formats as online sources become more common and time
+specifications for such sources are increasingly important. Tests and
+localisation strings are provided to use EDTF information about date
+uncertainty, era, approximation etc. in styles. A new example document
+(96-dates.tex) is provided which demonstrates the new features. See the PDF
+manual and its changelog for details of usage. The new date format
+functionality is backwards compatible. The following changes are more
+detailed and mostly of interest to style authors:
+
+- The `iso8601` date output format is now called `edtf`. The old name will
+ automatically use `edtf` and issue a deprecation warning.
+- `\bibdatedash` is now `\bibdaterangesep` as this name is more
+ informative and more descriptive of how it is actually used. A backwards
+ compat alias is provided.
+- Pre-biblatex 2.0 legacy sorting scheme definition macros `\name` and
+ `\list` are now deprecated with warnings.
+- **INCOMPATIBLE CHANGE** The `labeldate` option is renamed to
+ `labeldateparts`. The `datelabel` option is renamed to `labeldate` to
+ provide consistency with all other date options. Backwards compatibility
+ is provided and warnings will be issued.
+- The new date system necessitated changes to the default year printing
+ routine for citations in the default authoryear styles. If you wish to
+ take advantage of the new date features like circa, uncertainty and eras,
+ when printing citations in authoryear styles, see the enhanced
+ `cite:labelyear+extrayear` macros in any of the default authoryear
+ styles.
+- The `labelyear` field was inconsistently implemented and in fact could
+ sometimes contain a date range which made handling it rather difficult.
+ It is now guaranteed to contain only one year, when it is a copy of an
+ existing datepart field found by `\DeclareLabeldate` (`labelyear` can
+ contain a literal/bibstring or non date field too). A new field
+ `labelendyear` will contain the end of the labeldate year range. The same
+ applies to labelmonth and labelday.
+- The internal macros `\mkbibrange*` have all been changed to
+ `\mkdaterange*` to make the name more obvious (since they only deal with
+ dates) and for consistency with the new `\mktimerange*` macros. These
+ macros are usually only used in style .lbx files and the old names will
+ generate a deprecation warning.
+- The option `datezeros` was inconsistent as it did not enforce zeros when
+ set to 'true', it merely preserved the field. In the new date internals,
+ leading zeros are not present after date parsing as this should always be
+ a formatting/style decision. Now, `datezeros` enforces leading zeros and
+ also handles all date parts.
+- `\mkdatezeros` has been replaced with `\mkyearzeros`, `\mkmonthzeros` and
+ `\mkdayzeros` due to the date internals changes which are more consistent
+ about integer formats of date parts. `\mkdatezeros` now generates a
+ deprecation warning and calls `\mkmonthzeros` which is backwards compatible
+ with its old behaviour.
+- **INCOMPATIBLE CHANGE** The .bbl field `datelabelsource` has been renamed to
+ `labeldatesource` to prevent confusion with other fields. In the unlikely
+ event that you referenced this field in a style, please change the name.
+- **INCOMPATIBLE CHANGE** The macro `\printdatelabel` has been renamed to
+ `\printlabeldate` in line with the naming of all other date printing
+ macros. Please use the new name. The old one will issue a deprecation warning.
+- **INCOMPATIBLE CHANGE** The macro `\printdatelabelextra` has been renamed to
+ `\printlabeldateextra` in line with the naming of all other date printing
+ macros. Please use the new name. The old one will issue a deprecation warning.
+
+## Misc changes
+- The experimental RIS format support is no longer available as it was
+ rarely used and made biber maintenance more complicated. RIS is a very
+ primitive format and not much use anyway.
+- **INCOMPATIBLE CHANGE** The `singletitle` option no longer considers the
+ presence of labeltitle if labelname does not exist. This has always been
+ potentially confusing. For several versions now, there has been a
+ separate test and option for labeltitle called "uniquetitle".
+- **INCOMPATIBLE CHANGE** The `sortgiveninits` option has been deprecated and
+ the functionality generalised. It is replaced by the "inits" option to
+ `\namepart` in `\DeclareSortingNamekeyScheme`. Any nameparts may now
+ therefore be sorted using initials only.
+- **INCOMPATIBLE CHANGE** The sorting subsystem in biber has been completely
+ re-engineered to support better sorting of different datatypes.
+ Previously, due to bibtex limitations, all sorting was lexical, even for
+ numbers. This is why the padding options for things like volume in the
+ default sorting specifications existed - so that lexical sorts for
+ numbers would work. With the enhancement of the date parsing routines to
+ include negative years, in order to sort these properly, it was time to
+ switch to a better sorting method. As a result, the datatypes of fields
+ is now a bit stricter, as it should be. Expect more changes in this
+ direction but for this release, the datatype of the following fields in
+ the default data model have been changed to 'integer':
+
+ - number
+ - sortyear
+ - volume
+ - volumes
+
+ Integer datatypes no longer need padding or literal fallbacks in the
+ sorting scheme definitions since they are now sorted properly as
+ integers. Such datatype changes only effect sorting.
+
+
diff --git a/macros/latex/contrib/biblatex-ms/README b/macros/latex/contrib/biblatex-ms/README
new file mode 100644
index 0000000000..6b3b1bf430
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/README
@@ -0,0 +1,165 @@
+ABOUT
+
+The biblatex package is a complete reimplementation of the
+bibliographic facilities provided by LaTeX. A custom backend "biber"
+by default is used which processed the BibTeX format data files and
+them performs all sorting, label generation (and a great deal
+more). Legacy BibTeX is also supported as a backend, albeit with a
+reduced feature set. Biblatex does not use the backend to format the
+bibliography information as with traditional BibTeX: instead of being
+implemented in BibTeX's style files, the formatting of the
+bibliography is entirely controlled by TeX macros. Good working
+knowledge in LaTeX should be sufficient to design new bibliography and
+citation styles. There is no need to learn BibTeX's postfix stack
+language. Just like the bibliography styles, all citation commands may
+be freely (re)defined.
+
+Apart from the features unique to biblatex, the package also
+incorporates core features of the following packages: babelbib,
+backref, bibtopic, bibunits, chapterbib, cite, citeref, inlinebib,
+mlbib, multibib, natbib, splitbib. There are also some conceptual
+parallels to the amsrefs package. The biblatex package supports
+split bibliographies, multiple bibliographies within one document,
+and separate lists of bibliographic shorthands. Bibliographies may
+be subdivided into parts (by chapter, by section, etc.) and/or
+segmented by topics (by type, by keyword, etc.). With biber as the
+backend, features such as customisable sorting, multiple bibliographies
+with different sorting, customisable labels, dynamic data modification
+are available. The package is fully localized and can interface with
+the babel package.
+
+LICENSE
+
+Copyright (c) 2006-2012 Philipp Lehman, 2012-present Philip Lehman,
+Joseph Wright, Audrey Boruvka, Philip Kime). Permission is granted to copy,
+distribute and/or modify this software under the terms of the LaTeX
+Project Public License (LPPL), version 1.3. This software is provided
+'as is', without warranty of any kind, either expressed or implied,
+including, but not limited to, the implied warranties of
+merchantability and fitness for a particular purpose.
+
+FEEDBACK
+
+Please use the biblatex project page on github to report bugs
+or submit feature requests:
+
+ https://github.com/plk/biblatex
+
+REQUIREMENTS
+
+Strictly required:
+
+- e-TeX
+- BibTeX, bibtex8, or Biber
+- etoolbox 2.1 or later
+- logreq 1.0 or later
+- keyval
+- ifthen
+- url
+
+Strongly recommended:
+
+- Biber
+- babel/polyglossia
+- csquotes 4.4 or later
+
+Biber is available from CTAN, via TeXLive or from
+
+https://sourceforge.net/projects/biblatex-biber/
+
+AUTOMATIC INSTALLATION
+
+TeX Live: The biblatex package is included in TeX Live.
+ Use the TeX Live package manager to install it.
+ Biber can also be installed with the package manager.
+
+MiKTeX: The biblatex package is included in MiKTeX.
+ Use the MiKTeX package manager to install it.
+ Biber can also be installed with the package manager.
+
+SEMI-AUTOMATIC INSTALLATION
+
+1. Get the file biblatex-<version>.tds.zip from
+
+ https://sourceforge.net/projects/biblatex/files/
+
+2. Unpack the archive in the root directory of the local TeX
+ installation tree, for example
+
+ /usr/local/share/texmf/
+ or
+ /usr/share/texmf-local/
+ or
+ C:\Local TeX Files\
+
+3. Update the file hash tables (also known as the file name
+ database).
+
+ On teTeX and TeX Live systems, run texhash as root ('sudo
+ texhash'). On MiKTeX, run 'initexmf --update-fndb' in a command
+ window or use the 'Refresh FNDB' button of the MiKTeX Options
+ window.
+
+MANUAL INSTALLATION
+
+1. Get the file biblatex-<version>.tar.gz from
+
+ https://sourceforge.net/projects/biblatex/files/
+
+ or download the file
+
+ http://mirror.ctan.org/macros/latex/contrib/biblatex.zip
+
+2. Unpack the archive in a temporary working directory.
+
+3. Copy all files and subdirectories in the 'latex' directory to:
+
+ <texmflocal>/tex/latex/biblatex/
+
+ where <texmflocal> denotes the root of the local TeX installation
+ tree, for example
+
+ /usr/local/share/texmf/
+ or
+ /usr/share/texmf-local/
+ or
+ C:\Local TeX Files\
+
+4. Copy all files in the 'bibtex/bst' subdirectory to:
+
+ <texmflocal>/bibtex/bst/biblatex/
+
+5. Copy all files in the 'bibtex/bib' subdirectory to:
+
+ <texmflocal>/bibtex/bib/biblatex/
+
+6. If you are using bibtex8, copy all files in the 'bibtex/csf'
+ subdirectory to:
+
+ <texmflocal>/bibtex/csf/biblatex/
+
+7. The manual and example files in 'doc' subdirectory go to
+
+ <texmflocal>/doc/latex/biblatex/
+
+8. Update the file hash tables (also known as the file name
+ database).
+
+ On teTeX and TeX Live systems, run texhash as root ('sudo
+ texhash'). On MiKTeX, run 'initexmf --update-fndb' in a command
+ window or use the 'Refresh FNDB' button of the MiKTeX Options
+ window.
+
+Note that you may have to create some or all of the above
+directories if this is the first package you're installing locally
+(as opposed to via a package manager).
+
+USAGE
+
+Refer to biblatex.pdf for a systematic reference manual and to the
+'doc/examples' subdirectory for usage examples.
+
+CHANGES
+
+A list of changes relevant to users of this package is included at
+the end of 'biblatex.pdf'. See also the release notes in 'CHANGES.md'.
diff --git a/macros/latex/contrib/biblatex-ms/biber/bltxml/biblatex-examples-ms.bltxml b/macros/latex/contrib/biblatex-ms/biber/bltxml/biblatex-examples-ms.bltxml
new file mode 100644
index 0000000000..b1d49c2e1a
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/biber/bltxml/biblatex-examples-ms.bltxml
@@ -0,0 +1,2840 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?xml-model href="biblatex-examples.rng" type="application/xml" schematypens="http://relaxng.org/ns/structure/1.0"?>
+<!-- Auto-generated by Biber::Output::biblatexml -->
+
+<bltx:entries xmlns:bltx="http://biblatex-biber.sourceforge.net/biblatexml">
+ <bltx:entry id="bulgakov" entrytype="book">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="given" initial="М">Михаи́л</bltx:namepart>
+ <bltx:namepart type="patronymic" initial="А">Афана́сьевич</bltx:namepart>
+ <bltx:namepart type="family" initial="Б">Булга́ков</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:title>Мастер и Маргарита</bltx:title>
+ <bltx:date>1966</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="westfahl:space" entrytype="incollection">
+ <bltx:crossref>westfahl:frontier</bltx:crossref>
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="W">Westfahl</bltx:namepart>
+ <bltx:namepart type="given" initial="G">Gary</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:annotation>A cross-referenced article from a \texttt{collection}. This is an \texttt{incollection} entry with a \texttt{crossref} field. Note the \texttt{subtitle} and \texttt{indextitle} fields</bltx:annotation>
+ <bltx:crossref>westfahl:frontier</bltx:crossref>
+ <bltx:indextitle>True Frontier, The</bltx:indextitle>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:subtitle>Confronting and Avoiding the Realities of Space in {American} Science Fiction Films</bltx:subtitle>
+ <bltx:title>The True Frontier</bltx:title>
+ <bltx:pages>
+ <bltx:list>
+ <bltx:item>
+ <bltx:start>55</bltx:start>
+ <bltx:end>65</bltx:end>
+ </bltx:item>
+ </bltx:list>
+ </bltx:pages>
+ </bltx:entry>
+ <bltx:entry id="set" entrytype="set">
+ <bltx:annotation>A \texttt{set} with three members. The \texttt{crossref} field in the \texttt{@set} entry and the \texttt{entryset} field in each set member entry is needed only when using BibTeX as the backend</bltx:annotation>
+ </bltx:entry>
+ <bltx:entry id="stdmodel" entrytype="set">
+ <bltx:annotation>A \texttt{set} with three members discussing the standard model of particle physics. The \texttt{crossref} field in the \texttt{@set} entry and the \texttt{entryset} field in each set member entry is needed only when using BibTeX as the backend</bltx:annotation>
+ </bltx:entry>
+ <bltx:entry id="aksin" entrytype="article">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="A">Aksın</bltx:namepart>
+ <bltx:namepart type="given" initial="Ö">Özge</bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="T">Türkmen</bltx:namepart>
+ <bltx:namepart type="given" initial="H">Hayati</bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="A">Artok</bltx:namepart>
+ <bltx:namepart type="given" initial="L">Levent</bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="Ç">Çetinkaya</bltx:namepart>
+ <bltx:namepart type="given" initial="B">Bekir</bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="N">Ni</bltx:namepart>
+ <bltx:namepart type="given" initial="C">Chaoying</bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="B">Büyükgüngör</bltx:namepart>
+ <bltx:namepart type="given" initial="O">Orhan</bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="Ö">Özkal</bltx:namepart>
+ <bltx:namepart type="given" initial="E">Erhan</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:indextitle>Effect of immobilization on catalytic characteristics</bltx:indextitle>
+ <bltx:journaltitle>J.~Organomet. Chem.</bltx:journaltitle>
+ <bltx:number>13</bltx:number>
+ <bltx:title>Effect of immobilization on catalytic characteristics of saturated {Pd-N}-heterocyclic carbenes in {Mizoroki-Heck} reactions</bltx:title>
+ <bltx:volume>691</bltx:volume>
+ <bltx:pages>
+ <bltx:list>
+ <bltx:item>
+ <bltx:start>3027</bltx:start>
+ <bltx:end>3036</bltx:end>
+ </bltx:item>
+ </bltx:list>
+ </bltx:pages>
+ <bltx:date>2006</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="angenendt" entrytype="article">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="A">Angenendt</bltx:namepart>
+ <bltx:namepart type="given" initial="A">Arnold</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:annotation>A German article in a French journal. Apart from that, a typical \texttt{article} entry. Note the \texttt{indextitle} field</bltx:annotation>
+ <bltx:indextitle>In Honore Salvatoris</bltx:indextitle>
+ <bltx:journaltitle>Revue d'Histoire Ecclésiastique</bltx:journaltitle>
+ <bltx:langid>german</bltx:langid>
+ <bltx:shorttitle>In Honore Salvatoris</bltx:shorttitle>
+ <bltx:title>In Honore Salvatoris~-- Vom Sinn und Unsinn der Patrozinienkunde</bltx:title>
+ <bltx:volume>97</bltx:volume>
+ <bltx:pages>
+ <bltx:list>
+ <bltx:item>
+ <bltx:start>431</bltx:start>
+ <bltx:end>456</bltx:end>
+ </bltx:item>
+ <bltx:item>
+ <bltx:start>791</bltx:start>
+ <bltx:end>823</bltx:end>
+ </bltx:item>
+ </bltx:list>
+ </bltx:pages>
+ <bltx:date>2002</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="baez/article" entrytype="article">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="B">Baez</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="J">John</bltx:namepart>
+ <bltx:namepart initial="C">C.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="L">Lauda</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="A">Aaron</bltx:namepart>
+ <bltx:namepart initial="D">D.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:annotation>An \texttt{article} with \texttt{eprint} and \texttt{eprinttype} fields. Note that the arXiv reference is transformed into a clickable link if \texttt{hyperref} support has been enabled. Compare \texttt{baez\slash online}, which is the same item given as an \texttt{online} entry</bltx:annotation>
+ <bltx:eprint>math/0307200v3</bltx:eprint>
+ <bltx:eprinttype>arxiv</bltx:eprinttype>
+ <bltx:journaltitle>Theory and Applications of Categories</bltx:journaltitle>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:title>Higher-Dimensional Algebra {V}: 2-Groups</bltx:title>
+ <bltx:version>3</bltx:version>
+ <bltx:volume>12</bltx:volume>
+ <bltx:pages>
+ <bltx:list>
+ <bltx:item>
+ <bltx:start>423</bltx:start>
+ <bltx:end>491</bltx:end>
+ </bltx:item>
+ </bltx:list>
+ </bltx:pages>
+ <bltx:date>2004</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="bertram" entrytype="article">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="B">Bertram</bltx:namepart>
+ <bltx:namepart type="given" initial="A">Aaron</bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="W">Wentworth</bltx:namepart>
+ <bltx:namepart type="given" initial="R">Richard</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:annotation>An \texttt{article} entry with a \texttt{volume} and a \texttt{number} field</bltx:annotation>
+ <bltx:journaltitle>J.~Amer. Math. Soc.</bltx:journaltitle>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:number>2</bltx:number>
+ <bltx:shorttitle>Gromov invariants</bltx:shorttitle>
+ <bltx:title>Gromov invariants for holomorphic maps on {Riemann} surfaces</bltx:title>
+ <bltx:volume>9</bltx:volume>
+ <bltx:pages>
+ <bltx:list>
+ <bltx:item>
+ <bltx:start>529</bltx:start>
+ <bltx:end>571</bltx:end>
+ </bltx:item>
+ </bltx:list>
+ </bltx:pages>
+ <bltx:date>1996</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="doody" entrytype="article">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="D">Doody</bltx:namepart>
+ <bltx:namepart type="given" initial="T">Terrence</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:annotation>An \texttt{article} entry cited as an excerpt from a \texttt{collection} entry. Note the format of the \texttt{related} and \texttt{relatedstring} fields</bltx:annotation>
+ <bltx:journaltitle>The Journal of Narrative Technique</bltx:journaltitle>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:number>3</bltx:number>
+ <bltx:relatedstring>\autocap{e}xcerpt in</bltx:relatedstring>
+ <bltx:title>Hemingway's Style and {Jake's} Narration</bltx:title>
+ <bltx:volume>4</bltx:volume>
+ <bltx:pages>
+ <bltx:list>
+ <bltx:item>
+ <bltx:start>212</bltx:start>
+ <bltx:end>225</bltx:end>
+ </bltx:item>
+ </bltx:list>
+ </bltx:pages>
+ <bltx:date>1974</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="matuz:doody" entrytype="collection">
+ <bltx:names type="editor">
+ <bltx:name>
+ <bltx:namepart type="family" initial="M">Matuz</bltx:namepart>
+ <bltx:namepart type="given" initial="R">Roger</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>Detroit</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>Gale</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>A \texttt{collection} entry providing the excerpt information for the \texttt{doody} entry. Note the format of the \texttt{pages} field</bltx:annotation>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:title>Contemporary Literary Criticism</bltx:title>
+ <bltx:volume>61</bltx:volume>
+ <bltx:pages>
+ <bltx:list>
+ <bltx:item>
+ <bltx:start>204</bltx:start>
+ <bltx:end>208</bltx:end>
+ </bltx:item>
+ </bltx:list>
+ </bltx:pages>
+ <bltx:date>1990</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="gillies" entrytype="article">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="G">Gillies</bltx:namepart>
+ <bltx:namepart type="given" initial="A">Alexander</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:annotation>An \texttt{article} entry with a \texttt{series} and a \texttt{volume} field. Note that format of the \texttt{series} field in the database file</bltx:annotation>
+ <bltx:journaltitle>Publications of the English Goethe Society</bltx:journaltitle>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=british</bltx:langidopts>
+ <bltx:series>newseries</bltx:series>
+ <bltx:title>Herder and the Preparation of {Goethe's} Idea of World Literature</bltx:title>
+ <bltx:volume>9</bltx:volume>
+ <bltx:pages>
+ <bltx:list>
+ <bltx:item>
+ <bltx:start>46</bltx:start>
+ <bltx:end>67</bltx:end>
+ </bltx:item>
+ </bltx:list>
+ </bltx:pages>
+ <bltx:date>1933</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="glashow" entrytype="article">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="G">Glashow</bltx:namepart>
+ <bltx:namepart type="given" initial="S">Sheldon</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:journaltitle>Nucl.~Phys.</bltx:journaltitle>
+ <bltx:title>Partial Symmetries of Weak Interactions</bltx:title>
+ <bltx:volume>22</bltx:volume>
+ <bltx:pages>
+ <bltx:list>
+ <bltx:item>
+ <bltx:start>579</bltx:start>
+ <bltx:end>588</bltx:end>
+ </bltx:item>
+ </bltx:list>
+ </bltx:pages>
+ <bltx:date>1961</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="herrmann" entrytype="article">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="H">Herrmann</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="W">Wolfgang</bltx:namepart>
+ <bltx:namepart initial="A">A.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="Ö">Öfele</bltx:namepart>
+ <bltx:namepart type="given" initial="K">Karl</bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="S">Schneider</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="S">Sabine</bltx:namepart>
+ <bltx:namepart initial="K">K.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="H">Herdtweck</bltx:namepart>
+ <bltx:namepart type="given" initial="E">Eberhardt</bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="H">Hoffmann</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="S">Stephan</bltx:namepart>
+ <bltx:namepart initial="D">D.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:indextitle>Carbocyclic carbene as an efficient catalyst, A</bltx:indextitle>
+ <bltx:journaltitle>Angew.~Chem. Int.~Ed.</bltx:journaltitle>
+ <bltx:number>23</bltx:number>
+ <bltx:title>A carbocyclic carbene as an efficient catalyst ligand for {C--C} coupling reactions</bltx:title>
+ <bltx:volume>45</bltx:volume>
+ <bltx:pages>
+ <bltx:list>
+ <bltx:item>
+ <bltx:start>3859</bltx:start>
+ <bltx:end>3862</bltx:end>
+ </bltx:item>
+ </bltx:list>
+ </bltx:pages>
+ <bltx:date>2006</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="kastenholz" entrytype="article">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="K">Kastenholz</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="M">M.</bltx:namepart>
+ <bltx:namepart initial="A">A.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="H">Hünenberger</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="P">Philippe</bltx:namepart>
+ <bltx:namepart initial="H">H.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:abstract>The computation of ionic solvation free energies from atomistic simulations is a surprisingly difficult problem that has found no satisfactory solution for more than 15 years. The reason is that the charging free energies evaluated from such simulations are affected by very large errors. One of these is related to the choice of a specific convention for summing up the contributions of solvent charges to the electrostatic potential in the ionic cavity, namely, on the basis of point charges within entire solvent molecules (M scheme) or on the basis of individual point charges (P scheme). The use of an inappropriate convention may lead to a charge-independent offset in the calculated potential, which depends on the details of the summation scheme, on the quadrupole-moment trace of the solvent molecule, and on the approximate form used to represent electrostatic interactions in the system. However, whether the M or P scheme (if any) represents the appropriate convention is still a matter of on-going debate. The goal of the present article is to settle this long-standing controversy by carefully analyzing (both analytically and numerically) the properties of the electrostatic potential in molecular liquids (and inside cavities within them).</bltx:abstract>
+ <bltx:annotation>An \texttt{article} entry with an \texttt{eid} and a \texttt{doi} field. Note that the \textsc{doi} is transformed into a clickable link if \texttt{hyperref} support has been enabled</bltx:annotation>
+ <bltx:doi>10.1063/1.2172593</bltx:doi>
+ <bltx:eid>124106</bltx:eid>
+ <bltx:indextitle>Computation of ionic solvation free energies</bltx:indextitle>
+ <bltx:journaltitle>J.~Chem. Phys.</bltx:journaltitle>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:subtitle>{I}. {The} electrostatic potential in molecular liquids</bltx:subtitle>
+ <bltx:title>Computation of methodology\hyphen independent ionic solvation free energies from molecular simulations</bltx:title>
+ <bltx:volume>124</bltx:volume>
+ <bltx:date>2006</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="murray" entrytype="article">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="H">Hostetler</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="M">Michael</bltx:namepart>
+ <bltx:namepart initial="J">J.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="W">Wingate</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="J">Julia</bltx:namepart>
+ <bltx:namepart initial="E">E.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="Z">Zhong</bltx:namepart>
+ <bltx:namepart type="given" initial="C-J">Chuan-Jian</bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="H">Harris</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="J">Jay</bltx:namepart>
+ <bltx:namepart initial="E">E.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="V">Vachet</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="R">Richard</bltx:namepart>
+ <bltx:namepart initial="W">W.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="C">Clark</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="M">Michael</bltx:namepart>
+ <bltx:namepart initial="R">R.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="L">Londono</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="J">J.</bltx:namepart>
+ <bltx:namepart initial="D">David</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="G">Green</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="S">Stephen</bltx:namepart>
+ <bltx:namepart initial="J">J.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="S">Stokes</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="J">Jennifer</bltx:namepart>
+ <bltx:namepart initial="J">J.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="W">Wignall</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="G">George</bltx:namepart>
+ <bltx:namepart initial="D">D.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="G">Glish</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="G">Gary</bltx:namepart>
+ <bltx:namepart initial="L">L.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="P">Porter</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="M">Marc</bltx:namepart>
+ <bltx:namepart initial="D">D.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="E">Evans</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="N">Neal</bltx:namepart>
+ <bltx:namepart initial="D">D.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="M">Murray</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="R">Royce</bltx:namepart>
+ <bltx:namepart initial="W">W.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:annotation>An \texttt{article} entry with \arabic{author} authors. By default, long author and editor lists are automatically truncated. This is configurable</bltx:annotation>
+ <bltx:indextitle>Alkanethiolate gold cluster molecules</bltx:indextitle>
+ <bltx:journaltitle>Langmuir</bltx:journaltitle>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:number>1</bltx:number>
+ <bltx:shorttitle>Alkanethiolate gold cluster molecules</bltx:shorttitle>
+ <bltx:subtitle>Core and monolayer properties as a function of core size</bltx:subtitle>
+ <bltx:title>Alkanethiolate gold cluster molecules with core diameters from 1.5 to 5.2~{nm}</bltx:title>
+ <bltx:volume>14</bltx:volume>
+ <bltx:pages>
+ <bltx:list>
+ <bltx:item>
+ <bltx:start>17</bltx:start>
+ <bltx:end>30</bltx:end>
+ </bltx:item>
+ </bltx:list>
+ </bltx:pages>
+ <bltx:date>1998</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="reese" entrytype="article">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="R">Reese</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="T">Trevor</bltx:namepart>
+ <bltx:namepart initial="R">R.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:annotation>An \texttt{article} entry with a \texttt{series} and a \texttt{volume} field. Note the format of the series. If the value of the \texttt{series} field is an integer, this number is printed as an ordinal and the string \enquote*{series} is appended automatically</bltx:annotation>
+ <bltx:journaltitle>William and Mary Quarterly</bltx:journaltitle>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:series>3</bltx:series>
+ <bltx:title>Georgia in {Anglo-Spanish} Diplomacy, 1736--1739</bltx:title>
+ <bltx:volume>15</bltx:volume>
+ <bltx:pages>
+ <bltx:list>
+ <bltx:item>
+ <bltx:start>168</bltx:start>
+ <bltx:end>190</bltx:end>
+ </bltx:item>
+ </bltx:list>
+ </bltx:pages>
+ <bltx:date>1958</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="sarfraz" entrytype="article">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="S">Sarfraz</bltx:namepart>
+ <bltx:namepart type="given" initial="M">M.</bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="R">Razzak</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="M">M.</bltx:namepart>
+ <bltx:namepart initial="F">F.</bltx:namepart>
+ <bltx:namepart initial="A">A.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:annotation>An \texttt{article} entry with an \texttt{issn} field</bltx:annotation>
+ <bltx:issn>0097-8493</bltx:issn>
+ <bltx:journaltitle>Computers and Graphics</bltx:journaltitle>
+ <bltx:number>5</bltx:number>
+ <bltx:title>Technical section: {An} algorithm for automatic capturing of the font outlines</bltx:title>
+ <bltx:volume>26</bltx:volume>
+ <bltx:pages>
+ <bltx:list>
+ <bltx:item>
+ <bltx:start>795</bltx:start>
+ <bltx:end>804</bltx:end>
+ </bltx:item>
+ </bltx:list>
+ </bltx:pages>
+ <bltx:date>2002</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="shore" entrytype="article">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="S">Shore</bltx:namepart>
+ <bltx:namepart type="given" initial="B">Bradd</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:annotation>An \texttt{article} entry with \texttt{series}, \texttt{volume}, and \texttt{number} fields. Note the format of the \texttt{series} which is a localization key</bltx:annotation>
+ <bltx:journaltitle>American Anthropologist</bltx:journaltitle>
+ <bltx:number>1</bltx:number>
+ <bltx:series>newseries</bltx:series>
+ <bltx:subtitle>Meaning Construction and Cultural Cognition</bltx:subtitle>
+ <bltx:title>Twice-Born, Once Conceived</bltx:title>
+ <bltx:volume>93</bltx:volume>
+ <bltx:pages>
+ <bltx:list>
+ <bltx:item>
+ <bltx:start>9</bltx:start>
+ <bltx:end>27</bltx:end>
+ </bltx:item>
+ </bltx:list>
+ </bltx:pages>
+ <bltx:date>1991-03</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="sigfridsson" entrytype="article">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="S">Sigfridsson</bltx:namepart>
+ <bltx:namepart type="given" initial="E">Emma</bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="R">Ryde</bltx:namepart>
+ <bltx:namepart type="given" initial="U">Ulf</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:abstract>Four methods for deriving partial atomic charges from the quantum chemical electrostatic potential (CHELP, CHELPG, Merz-Kollman, and RESP) have been compared and critically evaluated. It is shown that charges strongly depend on how and where the potential points are selected. Two alternative methods are suggested to avoid the arbitrariness in the point-selection schemes and van der Waals exclusion radii: CHELP-BOW, which also estimates the charges from the electrostatic potential, but with potential points that are Boltzmann-weighted after their occurrence in actual simulations using the energy function of the program in which the charges will be used, and CHELMO, which estimates the charges directly from the electrostatic multipole moments. Different criteria for the quality of the charges are discussed.</bltx:abstract>
+ <bltx:annotation>An \texttt{article} entry with \texttt{volume}, \texttt{number}, and \texttt{doi} fields. Note that the \textsc{doi} is transformed into a clickable link if \texttt{hyperref} support has been enabled</bltx:annotation>
+ <bltx:doi>10.1002/(SICI)1096-987X(199803)19:4&lt;377::AID-JCC1&gt;3.0.CO;2-P</bltx:doi>
+ <bltx:indextitle>Methods for deriving atomic charges</bltx:indextitle>
+ <bltx:journaltitle>Journal of Computational Chemistry</bltx:journaltitle>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:number>4</bltx:number>
+ <bltx:title>Comparison of methods for deriving atomic charges from the electrostatic potential and moments</bltx:title>
+ <bltx:volume>19</bltx:volume>
+ <bltx:pages>
+ <bltx:list>
+ <bltx:item>
+ <bltx:start>377</bltx:start>
+ <bltx:end>395</bltx:end>
+ </bltx:item>
+ </bltx:list>
+ </bltx:pages>
+ <bltx:date>1998</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="spiegelberg" entrytype="article">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="S">Spiegelberg</bltx:namepart>
+ <bltx:namepart type="given" initial="H">Herbert</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:annotation>An \texttt{article} entry. Note the \texttt{sorttitle} and \texttt{indexsorttitle} fields and the markup of the quotes in the database file</bltx:annotation>
+ <bltx:indexsorttitle>Intention und Intentionalitat in der Scholastik, bei Brentano und Husserl</bltx:indexsorttitle>
+ <bltx:journaltitle>Studia Philosophica</bltx:journaltitle>
+ <bltx:langid>german</bltx:langid>
+ <bltx:shorttitle>Intention und Intentionalität</bltx:shorttitle>
+ <bltx:sorttitle>Intention und Intentionalitat in der Scholastik, bei Brentano und Husserl</bltx:sorttitle>
+ <bltx:title>\mkbibquote{Intention} und \mkbibquote{Intentionalität} in der Scholastik, bei Brentano und Husserl</bltx:title>
+ <bltx:volume>29</bltx:volume>
+ <bltx:pages>
+ <bltx:list>
+ <bltx:item>
+ <bltx:start>189</bltx:start>
+ <bltx:end>216</bltx:end>
+ </bltx:item>
+ </bltx:list>
+ </bltx:pages>
+ <bltx:date>1969</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="springer" entrytype="article">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="S">Springer</bltx:namepart>
+ <bltx:namepart type="given" initial="O">Otto</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:annotation>A plain \texttt{article} entry</bltx:annotation>
+ <bltx:journaltitle>Mediaeval Studies</bltx:journaltitle>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=british</bltx:langidopts>
+ <bltx:shorttitle>Mediaeval Pilgrim Routes</bltx:shorttitle>
+ <bltx:title>Mediaeval Pilgrim Routes from {Scandinavia} to {Rome}</bltx:title>
+ <bltx:volume>12</bltx:volume>
+ <bltx:pages>
+ <bltx:list>
+ <bltx:item>
+ <bltx:start>92</bltx:start>
+ <bltx:end>122</bltx:end>
+ </bltx:item>
+ </bltx:list>
+ </bltx:pages>
+ <bltx:date>1950</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="weinberg" entrytype="article">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="W">Weinberg</bltx:namepart>
+ <bltx:namepart type="given" initial="S">Steven</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:journaltitle>Phys.~Rev.~Lett.</bltx:journaltitle>
+ <bltx:title>A Model of Leptons</bltx:title>
+ <bltx:volume>19</bltx:volume>
+ <bltx:pages>
+ <bltx:list>
+ <bltx:item>
+ <bltx:start>1264</bltx:start>
+ <bltx:end>1266</bltx:end>
+ </bltx:item>
+ </bltx:list>
+ </bltx:pages>
+ <bltx:date>1967</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="yoon" entrytype="article">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="Y">Yoon</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="M">Myeong</bltx:namepart>
+ <bltx:namepart initial="S">S.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="R">Ryu</bltx:namepart>
+ <bltx:namepart type="given" initial="D">Dowook</bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="K">Kim</bltx:namepart>
+ <bltx:namepart type="given" initial="J">Jeongryul</bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="A">Ahn</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="K">Kyo</bltx:namepart>
+ <bltx:namepart initial="H">Han</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:indextitle>Palladium pincer complexes</bltx:indextitle>
+ <bltx:journaltitle>Organometallics</bltx:journaltitle>
+ <bltx:number>10</bltx:number>
+ <bltx:title>Palladium pincer complexes with reduced bond angle strain: efficient catalysts for the {Heck} reaction</bltx:title>
+ <bltx:volume>25</bltx:volume>
+ <bltx:pages>
+ <bltx:list>
+ <bltx:item>
+ <bltx:start>2409</bltx:start>
+ <bltx:end>2411</bltx:end>
+ </bltx:item>
+ </bltx:list>
+ </bltx:pages>
+ <bltx:date>2006</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="aristotle:anima" entrytype="book">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="A">Aristotle</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:names type="editor">
+ <bltx:name>
+ <bltx:namepart type="family" initial="H">Hicks</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="R">Robert</bltx:namepart>
+ <bltx:namepart initial="D">Drew</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>Cambridge</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>Cambridge University Press</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>A \texttt{book} entry with an \texttt{author} and an \texttt{editor}</bltx:annotation>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=british</bltx:langidopts>
+ <bltx:title>De Anima</bltx:title>
+ <bltx:date>1907</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="aristotle:physics" entrytype="book">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="A">Aristotle</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:names type="translator">
+ <bltx:name>
+ <bltx:namepart type="family" initial="W">Wicksteed</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="P">P.</bltx:namepart>
+ <bltx:namepart initial="H">H.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="C">Cornford</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="F">F.</bltx:namepart>
+ <bltx:namepart initial="M">M.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>New York</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>G. P. Putnam</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>A \texttt{book} entry with a \texttt{translator} field</bltx:annotation>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:shorttitle>Physics</bltx:shorttitle>
+ <bltx:title>Physics</bltx:title>
+ <bltx:date>1929</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="aristotle:poetics" entrytype="book">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="A">Aristotle</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:names type="editor">
+ <bltx:name>
+ <bltx:namepart type="family" initial="L">Lucas</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="D">D.</bltx:namepart>
+ <bltx:namepart initial="W">W.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>Oxford</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>Clarendon Press</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>A \texttt{book} entry with an \texttt{author} and an \texttt{editor} as well as a \texttt{series} field</bltx:annotation>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=british</bltx:langidopts>
+ <bltx:series>Clarendon {Aristotle}</bltx:series>
+ <bltx:shorttitle>Poetics</bltx:shorttitle>
+ <bltx:title>Poetics</bltx:title>
+ <bltx:date>1968</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="aristotle:rhetoric" entrytype="book">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="A">Aristotle</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:names type="commentator">
+ <bltx:name>
+ <bltx:namepart type="family" initial="C">Cope</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="E">Edward</bltx:namepart>
+ <bltx:namepart initial="M">Meredith</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:names type="editor">
+ <bltx:name>
+ <bltx:namepart type="family" initial="C">Cope</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="E">Edward</bltx:namepart>
+ <bltx:namepart initial="M">Meredith</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:publisher>
+ <bltx:item>Cambridge University Press</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>A commented edition. Note the concatenation of the \texttt{editor} and \texttt{commentator} fields as well as the \texttt{volumes}, \texttt{sorttitle}, and \texttt{indextitle} fields</bltx:annotation>
+ <bltx:indextitle>Rhetoric of {Aristotle}, The</bltx:indextitle>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=british</bltx:langidopts>
+ <bltx:shorttitle>Rhetoric</bltx:shorttitle>
+ <bltx:sorttitle>Rhetoric of Aristotle</bltx:sorttitle>
+ <bltx:title>The Rhetoric of {Aristotle} with a commentary by the late {Edward Meredith Cope}</bltx:title>
+ <bltx:volumes>3</bltx:volumes>
+ <bltx:date>1877</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="augustine" entrytype="book">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="A">Augustine</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="R">Robert</bltx:namepart>
+ <bltx:namepart initial="L">L.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>New York</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>Marcel Dekker</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>A plain \texttt{book} entry</bltx:annotation>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:shorttitle>Heterogeneous catalysis</bltx:shorttitle>
+ <bltx:title>Heterogeneous catalysis for the synthetic chemist</bltx:title>
+ <bltx:date>1995</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="averroes/bland" entrytype="book">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="A">Averroes</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:names type="editor">
+ <bltx:name>
+ <bltx:namepart type="family" initial="B">Bland</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="K">Kalman</bltx:namepart>
+ <bltx:namepart initial="P">P.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:names type="translator">
+ <bltx:name>
+ <bltx:namepart type="family" initial="B">Bland</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="K">Kalman</bltx:namepart>
+ <bltx:namepart initial="P">P.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>New York</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>Jewish Theological Seminary of America</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>A \texttt{book} entry with a \texttt{series} and a \texttt{number}. Note the concatenation of the \texttt{editor} and \texttt{translator} fields as well as the \texttt{indextitle} field</bltx:annotation>
+ <bltx:indextitle>Epistle on the Possibility of Conjunction, The</bltx:indextitle>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:number>7</bltx:number>
+ <bltx:series>Moreshet: Studies in {Jewish} History, Literature and Thought</bltx:series>
+ <bltx:shorttitle>Possibility of Conjunction</bltx:shorttitle>
+ <bltx:title>The Epistle on the Possibility of Conjunction with the Active Intellect by {Ibn Rushd} with the Commentary of {Moses Narboni}</bltx:title>
+ <bltx:date>1982</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="averroes/hannes" entrytype="book">
+ <bltx:names type="annotator">
+ <bltx:name>
+ <bltx:namepart type="family" initial="H">Hannes</bltx:namepart>
+ <bltx:namepart type="given" initial="L">Ludwig</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="A">Averroes</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:names type="editor">
+ <bltx:name>
+ <bltx:namepart type="family" initial="H">Hannes</bltx:namepart>
+ <bltx:namepart type="given" initial="L">Ludwig</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:names type="translator">
+ <bltx:name>
+ <bltx:namepart type="family" initial="H">Hannes</bltx:namepart>
+ <bltx:namepart type="given" initial="L">Ludwig</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>Halle an der Saale</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>C.~A. Kaemmerer</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>An annotated edition. Note the concatenation of the \texttt{editor}, \texttt{translator}, and \texttt{annotator} fields. Also note the \texttt{shorttitle}, \texttt{indextitle}, \texttt{sorttitle}, and \texttt{indexsorttitle} fields</bltx:annotation>
+ <bltx:indexsorttitle>Uber die Moglichkeit der Conjunktion</bltx:indexsorttitle>
+ <bltx:indextitle>Über die Möglichkeit der Conjunktion</bltx:indextitle>
+ <bltx:langid>german</bltx:langid>
+ <bltx:shorttitle>Über die Möglichkeit der Conjunktion</bltx:shorttitle>
+ <bltx:sorttitle>Uber die Moglichkeit der Conjunktion</bltx:sorttitle>
+ <bltx:title>Des Averroës Abhandlung: \mkbibquote{Über die Möglichkeit der Conjunktion} oder \mkbibquote{Über den materiellen Intellekt}</bltx:title>
+ <bltx:date>1892</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="averroes/hercz" entrytype="book">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="A">Averroes</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:names type="editor">
+ <bltx:name>
+ <bltx:namepart type="family" initial="H">Hercz</bltx:namepart>
+ <bltx:namepart type="given" initial="J">J.</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:names type="translator">
+ <bltx:name>
+ <bltx:namepart type="family" initial="H">Hercz</bltx:namepart>
+ <bltx:namepart type="given" initial="J">J.</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>Berlin</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>S.~Hermann</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>A \texttt{book} entry. Note the concatenation of the \texttt{editor} and \texttt{translator} fields as well as the \texttt{indextitle} and \texttt{indexsorttitle} fields</bltx:annotation>
+ <bltx:indexsorttitle>Drei Abhandlungen uber die Conjunction</bltx:indexsorttitle>
+ <bltx:indextitle>Drei Abhandlungen über die Conjunction</bltx:indextitle>
+ <bltx:langid>german</bltx:langid>
+ <bltx:shorttitle>Drei Abhandlungen</bltx:shorttitle>
+ <bltx:subtitle>Von Averroes (Vater und Sohn), aus dem Arabischen übersetzt von Samuel Ibn Tibbon</bltx:subtitle>
+ <bltx:title>Drei Abhandlungen über die Conjunction des separaten Intellects mit dem Menschen</bltx:title>
+ <bltx:date>1869</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="cicero" entrytype="book">
+ <bltx:names type="afterword">
+ <bltx:name>
+ <bltx:namepart type="family" initial="T">Thraede</bltx:namepart>
+ <bltx:namepart type="given" initial="K">Klaus</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="C">Cicero</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="M">Marcus</bltx:namepart>
+ <bltx:namepart initial="T">Tullius</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:names type="editor">
+ <bltx:name>
+ <bltx:namepart type="family" initial="B-S">Blank-Sangmeister</bltx:namepart>
+ <bltx:namepart type="given" initial="U">Ursula</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:names type="translator">
+ <bltx:name>
+ <bltx:namepart type="family" initial="B-S">Blank-Sangmeister</bltx:namepart>
+ <bltx:namepart type="given" initial="U">Ursula</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:language>
+ <bltx:item>langlatin</bltx:item>
+ <bltx:item>langgerman</bltx:item>
+ </bltx:language>
+ <bltx:location>
+ <bltx:item>Stuttgart</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>Reclam</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>A bilingual edition of Cicero's \emph{De natura deorum}, with a German translation. Note the format of the \texttt{language} field in the database file, the concatenation of the \texttt{editor} and \texttt{translator} fields, and the \texttt{afterword} field</bltx:annotation>
+ <bltx:indextitle>De natura deorum</bltx:indextitle>
+ <bltx:langid>german</bltx:langid>
+ <bltx:shorttitle>De natura deorum</bltx:shorttitle>
+ <bltx:title>De natura deorum. Über das Wesen der Götter</bltx:title>
+ <bltx:date>1995</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="coleridge" entrytype="book">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="C">Coleridge</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="S">Samuel</bltx:namepart>
+ <bltx:namepart initial="T">Taylor</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:names type="editor">
+ <bltx:name>
+ <bltx:namepart type="family" initial="C">Coburn</bltx:namepart>
+ <bltx:namepart type="given" initial="K">Kathleen</bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="E">Engell</bltx:namepart>
+ <bltx:namepart type="given" initial="J">James</bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="B">Bate</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="W">W.</bltx:namepart>
+ <bltx:namepart initial="J">Jackson</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>London</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>Routledge {and} Kegan Paul</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>One (partial) volume of a multivolume book. This is a \texttt{book} entry with a \texttt{volume} and a \texttt{part} field which explicitly refers to the second (physical) part of the seventh (logical) volume. Also note the \texttt{series} and \texttt{number} fields</bltx:annotation>
+ <bltx:indextitle>Biographia literaria</bltx:indextitle>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=british</bltx:langidopts>
+ <bltx:maintitle>The collected works of {Samuel Taylor Coleridge}</bltx:maintitle>
+ <bltx:number>75</bltx:number>
+ <bltx:part>2</bltx:part>
+ <bltx:series>Bollingen Series</bltx:series>
+ <bltx:shorttitle>Biographia literaria</bltx:shorttitle>
+ <bltx:title>Biographia literaria, or {Biographical} sketches of my literary life and opinions</bltx:title>
+ <bltx:volume>7</bltx:volume>
+ <bltx:date>1983</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="companion" entrytype="book">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="G">Goossens</bltx:namepart>
+ <bltx:namepart type="given" initial="M">Michel</bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="M">Mittelbach</bltx:namepart>
+ <bltx:namepart type="given" initial="F">Frank</bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="S">Samarin</bltx:namepart>
+ <bltx:namepart type="given" initial="A">Alexander</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>Reading, Mass.</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>Addison-Wesley</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>A book with three authors. Note the formatting of the author list. By default, only the first name is reversed in the bibliography</bltx:annotation>
+ <bltx:edition>1</bltx:edition>
+ <bltx:indextitle>LaTeX Companion, The</bltx:indextitle>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:pagetotal>528</bltx:pagetotal>
+ <bltx:shorttitle>LaTeX Companion</bltx:shorttitle>
+ <bltx:sorttitle>LaTeX Companion</bltx:sorttitle>
+ <bltx:title>The {LaTeX} Companion</bltx:title>
+ <bltx:date>1994</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="cotton" entrytype="book">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="C">Cotton</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="F">Frank</bltx:namepart>
+ <bltx:namepart initial="A">Albert</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="W">Wilkinson</bltx:namepart>
+ <bltx:namepart type="given" initial="G">Geoffrey</bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="M">Murillio</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="C">Carlos</bltx:namepart>
+ <bltx:namepart initial="A">A.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="B">Bochmann</bltx:namepart>
+ <bltx:namepart type="given" initial="M">Manfred</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>Chichester</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>Wiley</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>A \texttt{book} entry with \arabic{author} authors and an \texttt{edition} field. By default, long \texttt{author} and \texttt{editor} lists are automatically truncated. This is configurable</bltx:annotation>
+ <bltx:edition>6</bltx:edition>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=british</bltx:langidopts>
+ <bltx:title>Advanced inorganic chemistry</bltx:title>
+ <bltx:date>1999</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="gerhardt" entrytype="book">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="G">Gerhardt</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="M">Michael</bltx:namepart>
+ <bltx:namepart initial="J">J.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>Durham</bltx:item>
+ <bltx:item>London</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>Duke University Press</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>This is a \texttt{book} entry. Note the format of the \texttt{location} field as well as the \texttt{sorttitle} and \texttt{indextitle} fields</bltx:annotation>
+ <bltx:indextitle>Federal Appointments Process, The</bltx:indextitle>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:shorttitle>Federal Appointments Process</bltx:shorttitle>
+ <bltx:sorttitle>Federal Appointments Process</bltx:sorttitle>
+ <bltx:subtitle>A Constitutional and Historical Analysis</bltx:subtitle>
+ <bltx:title>The Federal Appointments Process</bltx:title>
+ <bltx:date>2000</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="gonzalez" entrytype="book">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="G">Gonzalez</bltx:namepart>
+ <bltx:namepart type="given" initial="R">Ray</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>Tucson</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>The University of Arizona Press</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>A collection of short stories. This is a \texttt{book} entry. Note the \texttt{sorttitle} and \texttt{indextitle} fields in the database file. There's also an \texttt{isbn} field</bltx:annotation>
+ <bltx:indextitle>Ghost of {John Wayne} and Other Stories, The</bltx:indextitle>
+ <bltx:isbn>0-816-52066-6</bltx:isbn>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:shorttitle>Ghost of {John Wayne}</bltx:shorttitle>
+ <bltx:sorttitle>Ghost of John Wayne and Other Stories</bltx:sorttitle>
+ <bltx:title>The Ghost of {John Wayne} and Other Stories</bltx:title>
+ <bltx:date>2001</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="hammond" entrytype="book">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="H">Hammond</bltx:namepart>
+ <bltx:namepart type="given" initial="C">Christopher</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>Oxford</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>International Union of Crystallography</bltx:item>
+ <bltx:item>Oxford University Press</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>A \texttt{book} entry. Note the \texttt{sorttitle} and \texttt{indextitle} fields as well as the format of the \texttt{publisher} field</bltx:annotation>
+ <bltx:indextitle>Basics of crystallography and diffraction, The</bltx:indextitle>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=british</bltx:langidopts>
+ <bltx:shorttitle>Crystallography and diffraction</bltx:shorttitle>
+ <bltx:sorttitle>Basics of crystallography and diffraction</bltx:sorttitle>
+ <bltx:title>The basics of crystallography and diffraction</bltx:title>
+ <bltx:date>1997</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="iliad" entrytype="book">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="H">Homer</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:names type="introduction">
+ <bltx:name>
+ <bltx:namepart type="family" initial="L">Latacz</bltx:namepart>
+ <bltx:namepart type="given" initial="J">Joachim</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:names type="translator">
+ <bltx:name>
+ <bltx:namepart type="family" initial="S">Schadewaldt</bltx:namepart>
+ <bltx:namepart type="given" initial="W">Wolfgang</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>Düsseldorf</bltx:item>
+ <bltx:item>Zürich</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>Artemis \&amp; Winkler</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>A German translation of the \emph{Iliad}. Note the \texttt{translator} and \texttt{introduction} fields and the format of the \texttt{location} field in the database file. Also note the \texttt{sorttitle} and \texttt{indextitle} fields</bltx:annotation>
+ <bltx:edition>3</bltx:edition>
+ <bltx:indextitle>Ilias, Die</bltx:indextitle>
+ <bltx:langid>german</bltx:langid>
+ <bltx:shorttitle>Ilias</bltx:shorttitle>
+ <bltx:sorttitle>Ilias</bltx:sorttitle>
+ <bltx:title>Die Ilias</bltx:title>
+ <bltx:date>2004</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="knuth:ct" entrytype="book">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="K">Knuth</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="D">Donald</bltx:namepart>
+ <bltx:namepart initial="E">E.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>Reading, Mass.</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>Addison-Wesley</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>A five-volume book cited as a whole. This is a \texttt{book} entry, note the \texttt{volumes} field</bltx:annotation>
+ <bltx:indexsorttitle>Computers &amp; Typesetting</bltx:indexsorttitle>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:sorttitle>Computers &amp; Typesetting</bltx:sorttitle>
+ <bltx:sortyear>1984-0</bltx:sortyear>
+ <bltx:title>Computers \&amp; Typesetting</bltx:title>
+ <bltx:volumes>5</bltx:volumes>
+ <bltx:date>
+ <bltx:start>1984</bltx:start>
+ <bltx:end>1986</bltx:end>
+ </bltx:date>
+ </bltx:entry>
+ <bltx:entry id="knuth:ct:a" entrytype="book">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="K">Knuth</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="D">Donald</bltx:namepart>
+ <bltx:namepart initial="E">E.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>Reading, Mass.</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>Addison-Wesley</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>The first volume of a five-volume book. Note the \texttt{sorttitle} and \texttt{sortyear} fields. We want this volume to be listed after the entry referring to the entire five-volume set. Also note the \texttt{indextitle} and \texttt{indexsorttitle} fields. Indexing packages that don't generate robust index entries require some control sequences to be protected from expansion</bltx:annotation>
+ <bltx:indexsorttitle>The TeXbook</bltx:indexsorttitle>
+ <bltx:indextitle>\protect\TeX book, The</bltx:indextitle>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:maintitle>Computers \&amp; Typesetting</bltx:maintitle>
+ <bltx:shorttitle>\TeX book</bltx:shorttitle>
+ <bltx:sorttitle>Computers &amp; Typesetting A</bltx:sorttitle>
+ <bltx:sortyear>1984-1</bltx:sortyear>
+ <bltx:title>The {\TeX} book</bltx:title>
+ <bltx:volume>A</bltx:volume>
+ <bltx:date>1984</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="knuth:ct:b" entrytype="book">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="K">Knuth</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="D">Donald</bltx:namepart>
+ <bltx:namepart initial="E">E.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>Reading, Mass.</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>Addison-Wesley</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>The second volume of a five-volume book. Note the \texttt{sorttitle} and \texttt{sortyear} fields. Also note the \texttt{indexsorttitle} field</bltx:annotation>
+ <bltx:indexsorttitle>TeX: The Program</bltx:indexsorttitle>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:maintitle>Computers \&amp; Typesetting</bltx:maintitle>
+ <bltx:shorttitle>\TeX</bltx:shorttitle>
+ <bltx:sorttitle>Computers &amp; Typesetting B</bltx:sorttitle>
+ <bltx:sortyear>1986-1</bltx:sortyear>
+ <bltx:title>\TeX: The Program</bltx:title>
+ <bltx:volume>B</bltx:volume>
+ <bltx:date>1986</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="knuth:ct:c" entrytype="book">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="K">Knuth</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="D">Donald</bltx:namepart>
+ <bltx:namepart initial="E">E.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>Reading, Mass.</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>Addison-Wesley</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>The third volume of a five-volume book. Note the \texttt{sorttitle} and \texttt{sortyear} fields as well as the \texttt{indextitle} field</bltx:annotation>
+ <bltx:indextitle>METAFONTbook, The</bltx:indextitle>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:maintitle>Computers \&amp; Typesetting</bltx:maintitle>
+ <bltx:shorttitle>METAFONTbook</bltx:shorttitle>
+ <bltx:sorttitle>Computers &amp; Typesetting C</bltx:sorttitle>
+ <bltx:sortyear>1986-2</bltx:sortyear>
+ <bltx:title>The {METAFONTbook}</bltx:title>
+ <bltx:volume>C</bltx:volume>
+ <bltx:date>1986</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="knuth:ct:d" entrytype="book">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="K">Knuth</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="D">Donald</bltx:namepart>
+ <bltx:namepart initial="E">E.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>Reading, Mass.</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>Addison-Wesley</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>The fourth volume of a five-volume book. Note the \texttt{sorttitle} and \texttt{sortyear} fields</bltx:annotation>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:maintitle>Computers \&amp; Typesetting</bltx:maintitle>
+ <bltx:shorttitle>METAFONT</bltx:shorttitle>
+ <bltx:sorttitle>Computers &amp; Typesetting D</bltx:sorttitle>
+ <bltx:sortyear>1986-3</bltx:sortyear>
+ <bltx:title>METAFONT: The Program</bltx:title>
+ <bltx:volume>D</bltx:volume>
+ <bltx:date>1986</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="knuth:ct:e" entrytype="book">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="K">Knuth</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="D">Donald</bltx:namepart>
+ <bltx:namepart initial="E">E.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>Reading, Mass.</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>Addison-Wesley</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>The fifth volume of a five-volume book. Note the \texttt{sorttitle} and \texttt{sortyear} fields</bltx:annotation>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:maintitle>Computers \&amp; Typesetting</bltx:maintitle>
+ <bltx:sorttitle>Computers &amp; Typesetting E</bltx:sorttitle>
+ <bltx:sortyear>1986-4</bltx:sortyear>
+ <bltx:title>{Computer Modern} Typefaces</bltx:title>
+ <bltx:volume>E</bltx:volume>
+ <bltx:date>1986</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="knuth:ct:related" entrytype="book">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="K">Knuth</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="D">Donald</bltx:namepart>
+ <bltx:namepart initial="E">E.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>Reading, Mass.</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>Addison-Wesley</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>A five-volume book cited as a whole and related to its individual volumes. Note the \texttt{related} and \texttt{relatedtype} fields</bltx:annotation>
+ <bltx:indexsorttitle>Computers &amp; Typesetting</bltx:indexsorttitle>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:relatedtype>multivolume</bltx:relatedtype>
+ <bltx:sorttitle>Computers &amp; Typesetting</bltx:sorttitle>
+ <bltx:sortyear>1984-0</bltx:sortyear>
+ <bltx:title>Computers \&amp; Typesetting</bltx:title>
+ <bltx:volumes>5</bltx:volumes>
+ <bltx:date>
+ <bltx:start>1984</bltx:start>
+ <bltx:end>1986</bltx:end>
+ </bltx:date>
+ </bltx:entry>
+ <bltx:entry id="kullback" entrytype="book">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="K">Kullback</bltx:namepart>
+ <bltx:namepart type="given" initial="S">Solomon</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>New York</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>John Wiley \&amp; Sons</bltx:item>
+ </bltx:publisher>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:title>Information Theory and Statistics</bltx:title>
+ <bltx:date>1959</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="kullback:reprint" entrytype="book">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="K">Kullback</bltx:namepart>
+ <bltx:namepart type="given" initial="S">Solomon</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>New York</bltx:item>
+ </bltx:location>
+ <bltx:origpublisher>
+ <bltx:item>John Wiley \&amp; Sons</bltx:item>
+ </bltx:origpublisher>
+ <bltx:publisher>
+ <bltx:item>Dover Publications</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>A reprint of the \texttt{kullback} entry. Note the format of \texttt{origyear} and \texttt{origpublisher}. These fields are not used by the standard bibliography styles</bltx:annotation>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:title>Information Theory and Statistics</bltx:title>
+ <bltx:date>1997</bltx:date>
+ <bltx:date type="orig">1959</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="kullback:related" entrytype="book">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="K">Kullback</bltx:namepart>
+ <bltx:namepart type="given" initial="S">Solomon</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>New York</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>Dover Publications</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>A reprint of the \texttt{kullback} entry. Note the format of the \texttt{related} and \texttt{relatedtype} fields</bltx:annotation>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:relatedtype>origpubin</bltx:relatedtype>
+ <bltx:title>Information Theory and Statistics</bltx:title>
+ <bltx:date>1997</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="malinowski" entrytype="book">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="M">Malinowski</bltx:namepart>
+ <bltx:namepart type="given" initial="B">Bronis{ł}aw</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>London</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>Routledge {and} Kegan Paul</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>This is a \texttt{book} entry. Note the format of the \texttt{publisher} and \texttt{edition} fields as well as the \texttt{subtitle} field</bltx:annotation>
+ <bltx:edition>8</bltx:edition>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=british</bltx:langidopts>
+ <bltx:shorttitle>Argonauts</bltx:shorttitle>
+ <bltx:subtitle>An account of native enterprise and adventure in the Archipelagoes of {Melanesian New Guinea}</bltx:subtitle>
+ <bltx:title>Argonauts of the {Western Pacific}</bltx:title>
+ <bltx:date>1972</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="maron" entrytype="book">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="M">Maron</bltx:namepart>
+ <bltx:namepart type="given" initial="M">Monika</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:names type="translator">
+ <bltx:name>
+ <bltx:namepart type="family" initial="G">Goldstein</bltx:namepart>
+ <bltx:namepart type="given" initial="B">Brigitte</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>Lincoln</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>University of Nebraska Press</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>An English translation of a German novel with a French title. In other words: a \texttt{book} entry with a \texttt{translator} field. Note the \texttt{origlanguage} field which is concatenated with the \texttt{translator}</bltx:annotation>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:origlanguage>german</bltx:origlanguage>
+ <bltx:shorttitle>Animal Triste</bltx:shorttitle>
+ <bltx:title>Animal Triste</bltx:title>
+ <bltx:date>2000</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="massa" entrytype="book">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="M">Massa</bltx:namepart>
+ <bltx:namepart type="given" initial="W">Werner</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>Berlin</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>Spinger</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>A \texttt{book} entry with an \texttt{edition} field</bltx:annotation>
+ <bltx:edition>2</bltx:edition>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=british</bltx:langidopts>
+ <bltx:title>Crystal structure determination</bltx:title>
+ <bltx:date>2004</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="moore" entrytype="article">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="M">Moore</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="G">Gordon</bltx:namepart>
+ <bltx:namepart initial="E">E.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:journaltitle>Electronics</bltx:journaltitle>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:number>8</bltx:number>
+ <bltx:title>Cramming more components onto integrated circuits</bltx:title>
+ <bltx:volume>38</bltx:volume>
+ <bltx:pages>
+ <bltx:list>
+ <bltx:item>
+ <bltx:start>114</bltx:start>
+ <bltx:end>117</bltx:end>
+ </bltx:item>
+ </bltx:list>
+ </bltx:pages>
+ <bltx:date>1965</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="moore:related" entrytype="article">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="M">Moore</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="G">Gordon</bltx:namepart>
+ <bltx:namepart initial="E">E.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:annotation>A reprint of Moore's law. Note the \texttt{related} and \texttt{relatedtype} fields</bltx:annotation>
+ <bltx:journaltitle>Proceedings of the {IEEE}</bltx:journaltitle>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:number>1</bltx:number>
+ <bltx:relatedtype>reprintfrom</bltx:relatedtype>
+ <bltx:title>Cramming more components onto integrated circuits</bltx:title>
+ <bltx:volume>86</bltx:volume>
+ <bltx:pages>
+ <bltx:list>
+ <bltx:item>
+ <bltx:start>82</bltx:start>
+ <bltx:end>85</bltx:end>
+ </bltx:item>
+ </bltx:list>
+ </bltx:pages>
+ <bltx:date>1998</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="nietzsche:ksa" entrytype="book">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="N">Nietzsche</bltx:namepart>
+ <bltx:namepart type="given" initial="F">Friedrich</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:names type="editor">
+ <bltx:name>
+ <bltx:namepart type="family" initial="C">Colli</bltx:namepart>
+ <bltx:namepart type="given" initial="G">Giorgio</bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="M">Montinari</bltx:namepart>
+ <bltx:namepart type="given" initial="M">Mazzino</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>München</bltx:item>
+ <bltx:item>Berlin</bltx:item>
+ <bltx:item>New York</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>Deutscher Taschenbuch-Verlag</bltx:item>
+ <bltx:item>Walter de Gruyter</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>The critical edition of Nietzsche's works. This is a \texttt{book} entry referring to a 15-volume work as a whole. Note the \texttt{volumes} field and the format of the \texttt{publisher} and \texttt{location} fields in the database file. Also note the \texttt{sorttitle} and \texttt{sortyear} fields which are used to fine-tune the sorting order of the bibliography. We want this item listed first in the bibliography</bltx:annotation>
+ <bltx:edition>2</bltx:edition>
+ <bltx:indexsorttitle>Samtliche Werke</bltx:indexsorttitle>
+ <bltx:langid>german</bltx:langid>
+ <bltx:sorttitle>Werke-00-000</bltx:sorttitle>
+ <bltx:sortyear>1988-0</bltx:sortyear>
+ <bltx:subtitle>Kritische Studienausgabe</bltx:subtitle>
+ <bltx:title>Sämtliche Werke</bltx:title>
+ <bltx:volumes>15</bltx:volumes>
+ <bltx:date>1988</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="nietzsche:ksa1" entrytype="book">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="N">Nietzsche</bltx:namepart>
+ <bltx:namepart type="given" initial="F">Friedrich</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:names type="bookauthor">
+ <bltx:name>
+ <bltx:namepart type="family" initial="N">Nietzsche</bltx:namepart>
+ <bltx:namepart type="given" initial="F">Friedrich</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:names type="editor">
+ <bltx:name>
+ <bltx:namepart type="family" initial="C">Colli</bltx:namepart>
+ <bltx:namepart type="given" initial="G">Giorgio</bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="M">Montinari</bltx:namepart>
+ <bltx:namepart type="given" initial="M">Mazzino</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>München</bltx:item>
+ <bltx:item>Berlin</bltx:item>
+ <bltx:item>New York</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>Deutscher Taschenbuch-Verlag</bltx:item>
+ <bltx:item>Walter de Gruyter</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>A single volume from the critical edition of Nietzsche's works. This \texttt{book} entry explicitly refers to the first volume only. Note the \texttt{title} and \texttt{maintitle} fields. Also note the \texttt{sorttitle} and \texttt{sortyear} fields. We want this entry to be listed after the entry referring to the entire edition</bltx:annotation>
+ <bltx:edition>2</bltx:edition>
+ <bltx:indexsorttitle>Samtliche Werke I</bltx:indexsorttitle>
+ <bltx:indextitle>Sämtliche Werke I</bltx:indextitle>
+ <bltx:langid>german</bltx:langid>
+ <bltx:mainsubtitle>Kritische Studienausgabe</bltx:mainsubtitle>
+ <bltx:maintitle>Sämtliche Werke</bltx:maintitle>
+ <bltx:shorttitle>Sämtliche Werke I</bltx:shorttitle>
+ <bltx:sorttitle>Werke-01-000</bltx:sorttitle>
+ <bltx:sortyear>1988-1</bltx:sortyear>
+ <bltx:title>Die Geburt der Tragödie. Unzeitgemä{ß}e Betrachtungen I--IV. Nachgelassene Schriften 1870--1973</bltx:title>
+ <bltx:volume>1</bltx:volume>
+ <bltx:date>1988</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="nussbaum" entrytype="book">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="N">Nussbaum</bltx:namepart>
+ <bltx:namepart type="given" initial="M">Martha</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>Princeton</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>Princeton University Press</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>A \texttt{book} entry. Note the \texttt{sorttitle} and \texttt{indexsorttitle} fields and the markup of the quotes in the database file</bltx:annotation>
+ <bltx:indexsorttitle>Aristotle's De Motu Animalium</bltx:indexsorttitle>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:sorttitle>Aristotle's De Motu Animalium</bltx:sorttitle>
+ <bltx:title>Aristotle's \mkbibquote{De Motu Animalium}</bltx:title>
+ <bltx:date>1978</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="piccato" entrytype="book">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="P">Piccato</bltx:namepart>
+ <bltx:namepart type="given" initial="P">Pablo</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>Durham</bltx:item>
+ <bltx:item>London</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>Duke University Press</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>This is a \texttt{book} entry. Note the format of the \texttt{location} field in the database file</bltx:annotation>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:shorttitle>City of Suspects</bltx:shorttitle>
+ <bltx:subtitle>Crime in {Mexico City}, 1900--1931</bltx:subtitle>
+ <bltx:title>City of Suspects</bltx:title>
+ <bltx:date>2001</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="vangennep" entrytype="book">
+ <bltx:options>useprefix</bltx:options>
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="G">Gennep</bltx:namepart>
+ <bltx:namepart type="given" initial="A">Arnold</bltx:namepart>
+ <bltx:namepart type="prefix" initial="v">van</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>Paris</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>Nourry</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>A \texttt{book} entry. Note the format of the printed name and compare the \texttt{useprefix} option in the \texttt{options} field as well as \texttt{brandt} and \texttt{geer}</bltx:annotation>
+ <bltx:indextitle>Rites de passage, Les</bltx:indextitle>
+ <bltx:langid>french</bltx:langid>
+ <bltx:shorttitle>Rites de passage</bltx:shorttitle>
+ <bltx:sorttitle>Rites de passage</bltx:sorttitle>
+ <bltx:title>Les rites de passage</bltx:title>
+ <bltx:date>1909</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="vangennep:trans" entrytype="book">
+ <bltx:options>useprefix</bltx:options>
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="G">Gennep</bltx:namepart>
+ <bltx:namepart type="given" initial="A">Arnold</bltx:namepart>
+ <bltx:namepart type="prefix" initial="v">van</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:names type="translator">
+ <bltx:name>
+ <bltx:namepart type="family" initial="V">Vizedom</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="M">Monika</bltx:namepart>
+ <bltx:namepart initial="B">B.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="C">Caffee</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="G">Gabrielle</bltx:namepart>
+ <bltx:namepart initial="L">L.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:language>
+ <bltx:item>english</bltx:item>
+ </bltx:language>
+ <bltx:publisher>
+ <bltx:item>University of Chicago Press</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>A translation of the \texttt{vangennep} entry. Note the \texttt{translator} and \texttt{origlanguage} fields. Compare with the \texttt{vangennep:related} entry.</bltx:annotation>
+ <bltx:indextitle>Rites of Passage, The</bltx:indextitle>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:origlanguage>french</bltx:origlanguage>
+ <bltx:shorttitle>Rites of Passage</bltx:shorttitle>
+ <bltx:sorttitle>Rites of Passage</bltx:sorttitle>
+ <bltx:title>The Rites of Passage</bltx:title>
+ <bltx:date>1960</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="vangennep:related" entrytype="book">
+ <bltx:options>useprefix</bltx:options>
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="G">Gennep</bltx:namepart>
+ <bltx:namepart type="given" initial="A">Arnold</bltx:namepart>
+ <bltx:namepart type="prefix" initial="v">van</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>Paris</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>Nourry</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>A variant of the \texttt{vangennep} entry related to its translation. Note the format of the \texttt{related} and \texttt{relatedtype} fields</bltx:annotation>
+ <bltx:indextitle>Rites de passage, Les</bltx:indextitle>
+ <bltx:langid>french</bltx:langid>
+ <bltx:relatedtype>bytranslator</bltx:relatedtype>
+ <bltx:shorttitle>Rites de passage</bltx:shorttitle>
+ <bltx:sorttitle>Rites de passage</bltx:sorttitle>
+ <bltx:title>Les rites de passage</bltx:title>
+ <bltx:date>1909</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="vizedom:related" entrytype="book">
+ <bltx:options>usetranslator</bltx:options>
+ <bltx:names type="translator">
+ <bltx:name>
+ <bltx:namepart type="family" initial="V">Vizedom</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="M">Monika</bltx:namepart>
+ <bltx:namepart initial="B">B.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="C">Caffee</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="G">Gabrielle</bltx:namepart>
+ <bltx:namepart initial="L">L.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:language>
+ <bltx:item>english</bltx:item>
+ </bltx:language>
+ <bltx:publisher>
+ <bltx:item>University of Chicago Press</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>A translated work from \texttt{vangennep}. Note the format of the \texttt{related} and \texttt{relatedtype} fields</bltx:annotation>
+ <bltx:indextitle>Rites of Passage, The</bltx:indextitle>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:relatedtype>translationof</bltx:relatedtype>
+ <bltx:shorttitle>Rites of Passage</bltx:shorttitle>
+ <bltx:sorttitle>Rites of Passage</bltx:sorttitle>
+ <bltx:title>The Rites of Passage</bltx:title>
+ <bltx:date>1960</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="vazques-de-parga" entrytype="book">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family">
+ <bltx:namepart initial="V">Vázques{</bltx:namepart>
+ <bltx:namepart>de</bltx:namepart>
+ <bltx:namepart>}Parga</bltx:namepart>
+ </bltx:namepart>
+ <bltx:namepart type="given" initial="L">Luis</bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="L">Lacarra</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="J">José</bltx:namepart>
+ <bltx:namepart initial="M">María</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family">
+ <bltx:namepart initial="U">Uría</bltx:namepart>
+ <bltx:namepart initial="R">Ríu</bltx:namepart>
+ </bltx:namepart>
+ <bltx:namepart type="given" initial="J">Juan</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>Pamplona</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>Iberdrola</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>A multivolume book cited as a whole. This is a \texttt{book} entry with \texttt{volumes}, \texttt{note}, \texttt{sorttitle}, and \texttt{indextitle} fields</bltx:annotation>
+ <bltx:indextitle>Peregrinaciones a Santiago de Compostela, Las</bltx:indextitle>
+ <bltx:langid>spanish</bltx:langid>
+ <bltx:note>Ed. facs. de la realizada en 1948--49</bltx:note>
+ <bltx:shorttitle>Peregrinaciones</bltx:shorttitle>
+ <bltx:sorttitle>Peregrinaciones a Santiago de Compostela</bltx:sorttitle>
+ <bltx:title>Las Peregrinaciones a Santiago de Compostela</bltx:title>
+ <bltx:volumes>3</bltx:volumes>
+ <bltx:date>1993</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="wilde" entrytype="book">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="W">Wilde</bltx:namepart>
+ <bltx:namepart type="given" initial="O">Oscar</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:publisher>
+ <bltx:item>Leonard Smithers {and} Company</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>A \texttt{book} with \texttt{eprint} and \texttt{eprinttype} fields.</bltx:annotation>
+ <bltx:eprint>4HIWAAAAYAAJ</bltx:eprint>
+ <bltx:eprinttype>googlebooks</bltx:eprinttype>
+ <bltx:series>English and {American} drama of the Nineteenth Century</bltx:series>
+ <bltx:title>The Importance of Being Earnest: A Trivial Comedy for Serious People</bltx:title>
+ <bltx:date>1899</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="worman" entrytype="book">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="W">Worman</bltx:namepart>
+ <bltx:namepart type="given" initial="N">Nancy</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>Austin</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>University of Texas Press</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>A \texttt{book} entry. Note the \texttt{sorttitle} and \texttt{indextitle} fields</bltx:annotation>
+ <bltx:indextitle>Cast of Character, The</bltx:indextitle>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:shorttitle>Cast of Character</bltx:shorttitle>
+ <bltx:sorttitle>Cast of Character</bltx:sorttitle>
+ <bltx:subtitle>Style in {Greek} Literature</bltx:subtitle>
+ <bltx:title>The Cast of Character</bltx:title>
+ <bltx:date>2002</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="britannica" entrytype="collection">
+ <bltx:options>useeditor=false</bltx:options>
+ <bltx:names type="editor">
+ <bltx:name>
+ <bltx:namepart type="family" initial="P">Preece</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="W">Warren</bltx:namepart>
+ <bltx:namepart initial="E">E.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>Chicago, Ill.</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>Encyclop{æ}dia Britannica</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>This is a \texttt{collection} entry for an encyclopedia. Note the \texttt{useeditor} option in the \texttt{options} field as well as the \texttt{sorttitle} field. We want this entry to be cited and alphabetized by title even though there is an editor. In addition to that, we want the title to be alphabetized under \enquote*{E} rather than \enquote*{T}. Also note the \texttt{label} field which is provided for author-year citation styles</bltx:annotation>
+ <bltx:edition>15</bltx:edition>
+ <bltx:indextitle>{Encyclop{æ}dia Britannica}, The {New}</bltx:indextitle>
+ <bltx:label>EB</bltx:label>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=british</bltx:langidopts>
+ <bltx:shorttitle>{Encyclop{æ}dia Britannica}</bltx:shorttitle>
+ <bltx:sorttitle>Encyclop{æ}dia Britannica</bltx:sorttitle>
+ <bltx:title>The {New Encyclop{æ}dia Britannica}</bltx:title>
+ <bltx:volumes>32</bltx:volumes>
+ <bltx:date>2003</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="gaonkar" entrytype="collection">
+ <bltx:names type="editor">
+ <bltx:name>
+ <bltx:namepart type="family" initial="G">Gaonkar</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="D">Dilip</bltx:namepart>
+ <bltx:namepart initial="P">Parameshwar</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>Durham</bltx:item>
+ <bltx:item>London</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>Duke University Press</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>This is a \texttt{collection} entry. Note the format of the \texttt{location} field in the database file as well as the \texttt{isbn} field</bltx:annotation>
+ <bltx:isbn>0-822-32714-7</bltx:isbn>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:title>Alternative Modernities</bltx:title>
+ <bltx:date>2001</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="gaonkar:in" entrytype="incollection">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="G">Gaonkar</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="D">Dilip</bltx:namepart>
+ <bltx:namepart initial="P">Parameshwar</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:names type="editor">
+ <bltx:name>
+ <bltx:namepart type="family" initial="G">Gaonkar</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="D">Dilip</bltx:namepart>
+ <bltx:namepart initial="P">Parameshwar</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>Durham</bltx:item>
+ <bltx:item>London</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>Duke University Press</bltx:item>
+ </bltx:publisher>
+ <bltx:booktitle>Alternative Modernities</bltx:booktitle>
+ <bltx:isbn>0-822-32714-7</bltx:isbn>
+ <bltx:title>On Alternative Modernities</bltx:title>
+ <bltx:pages>
+ <bltx:list>
+ <bltx:item>
+ <bltx:start>1</bltx:start>
+ <bltx:end>23</bltx:end>
+ </bltx:item>
+ </bltx:list>
+ </bltx:pages>
+ <bltx:date>2001</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="jaffe" entrytype="collection">
+ <bltx:names type="editor">
+ <bltx:name>
+ <bltx:namepart type="family" initial="J">Jaffé</bltx:namepart>
+ <bltx:namepart type="given" initial="P">Philipp</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:names type="editora">
+ <bltx:name>
+ <bltx:namepart type="family" initial="L">Loewenfeld</bltx:namepart>
+ <bltx:namepart type="given" initial="S">Samuel</bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="K">Kaltenbrunner</bltx:namepart>
+ <bltx:namepart type="given" initial="F">Ferdinand</bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="E">Ewald</bltx:namepart>
+ <bltx:namepart type="given" initial="P">Paul</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>Leipzig</bltx:item>
+ </bltx:location>
+ <bltx:annotation>A \texttt{collection} entry with \texttt{edition} and \texttt{volumes} fields. Note the \texttt{editora} and \texttt{editoratype} fields</bltx:annotation>
+ <bltx:edition>2</bltx:edition>
+ <bltx:editoratype>redactor</bltx:editoratype>
+ <bltx:indextitle>Regesta Pontificum Romanorum</bltx:indextitle>
+ <bltx:langid>latin</bltx:langid>
+ <bltx:shorttitle>Regesta Pontificum Romanorum</bltx:shorttitle>
+ <bltx:title>Regesta Pontificum Romanorum ab condita ecclesia ad annum post Christum natum \textsc{mcxcviii}</bltx:title>
+ <bltx:volumes>2</bltx:volumes>
+ <bltx:date>
+ <bltx:start>1885</bltx:start>
+ <bltx:end>1888</bltx:end>
+ </bltx:date>
+ </bltx:entry>
+ <bltx:entry id="westfahl:frontier" entrytype="collection">
+ <bltx:names type="editor">
+ <bltx:name>
+ <bltx:namepart type="family" initial="W">Westfahl</bltx:namepart>
+ <bltx:namepart type="given" initial="G">Gary</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>Westport, Conn.</bltx:item>
+ <bltx:item>London</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>Greenwood</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>This is a \texttt{collection} entry. Note the format of the \texttt{location} field as well as the \texttt{subtitle} and \texttt{booksubtitle} fields</bltx:annotation>
+ <bltx:booksubtitle>The Frontier Theme in Science Fiction</bltx:booksubtitle>
+ <bltx:booktitle>Space and Beyond</bltx:booktitle>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:subtitle>The Frontier Theme in Science Fiction</bltx:subtitle>
+ <bltx:title>Space and Beyond</bltx:title>
+ <bltx:date>2000</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="kant:kpv" entrytype="inbook">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="K">Kant</bltx:namepart>
+ <bltx:namepart type="given" initial="I">Immanuel</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:names type="bookauthor">
+ <bltx:name>
+ <bltx:namepart type="family" initial="K">Kant</bltx:namepart>
+ <bltx:namepart type="given" initial="I">Immanuel</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>Berlin</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>Walter de Gruyter</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>An edition of Kant's \emph{Collected Works}, volume five. This is an \texttt{inbook} entry which explicitly refers to the \emph{Critique of Practical Reason} only, not to the entire fifth volume. Note the \texttt{author} and \texttt{bookauthor} fields in the database file. By default, the \texttt{bookauthor} is omitted if the values of the \texttt{author} and \texttt{bookauthor} fields are identical</bltx:annotation>
+ <bltx:booktitle>Kritik der praktischen Vernunft. Kritik der Urtheilskraft</bltx:booktitle>
+ <bltx:langid>german</bltx:langid>
+ <bltx:maintitle>Kants Werke. Akademie Textausgabe</bltx:maintitle>
+ <bltx:shorthand>KpV</bltx:shorthand>
+ <bltx:shorttitle>Kritik der praktischen Vernunft</bltx:shorttitle>
+ <bltx:title>Kritik der praktischen Vernunft</bltx:title>
+ <bltx:volume>5</bltx:volume>
+ <bltx:pages>
+ <bltx:list>
+ <bltx:item>
+ <bltx:start>1</bltx:start>
+ <bltx:end>163</bltx:end>
+ </bltx:item>
+ </bltx:list>
+ </bltx:pages>
+ <bltx:date>1968</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="kant:ku" entrytype="inbook">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="K">Kant</bltx:namepart>
+ <bltx:namepart type="given" initial="I">Immanuel</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:names type="bookauthor">
+ <bltx:name>
+ <bltx:namepart type="family" initial="K">Kant</bltx:namepart>
+ <bltx:namepart type="given" initial="I">Immanuel</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>Berlin</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>Walter de Gruyter</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>An edition of Kant's \emph{Collected Works}, volume five. This is an \texttt{inbook} entry which explicitly refers to the \emph{Critique of Judgment} only, not to the entire fifth volume</bltx:annotation>
+ <bltx:booktitle>Kritik der praktischen Vernunft. Kritik der Urtheilskraft</bltx:booktitle>
+ <bltx:langid>german</bltx:langid>
+ <bltx:maintitle>Kants Werke. Akademie Textausgabe</bltx:maintitle>
+ <bltx:shorthand>KU</bltx:shorthand>
+ <bltx:title>Kritik der Urtheilskraft</bltx:title>
+ <bltx:volume>5</bltx:volume>
+ <bltx:pages>
+ <bltx:list>
+ <bltx:item>
+ <bltx:start>165</bltx:start>
+ <bltx:end>485</bltx:end>
+ </bltx:item>
+ </bltx:list>
+ </bltx:pages>
+ <bltx:date>1968</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="nietzsche:historie" entrytype="inbook">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="N">Nietzsche</bltx:namepart>
+ <bltx:namepart type="given" initial="F">Friedrich</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:names type="bookauthor">
+ <bltx:name>
+ <bltx:namepart type="family" initial="N">Nietzsche</bltx:namepart>
+ <bltx:namepart type="given" initial="F">Friedrich</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:names type="editor">
+ <bltx:name>
+ <bltx:namepart type="family" initial="C">Colli</bltx:namepart>
+ <bltx:namepart type="given" initial="G">Giorgio</bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="M">Montinari</bltx:namepart>
+ <bltx:namepart type="given" initial="M">Mazzino</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>München</bltx:item>
+ <bltx:item>Berlin</bltx:item>
+ <bltx:item>New York</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>Deutscher Taschenbuch-Verlag</bltx:item>
+ <bltx:item>Walter de Gruyter</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>A single essay from the critical edition of Nietzsche's works. This \texttt{inbook} entry explicitly refers to an essay found in the first volume. Note the \texttt{title}, \texttt{booktitle}, and \texttt{maintitle} fields. Also note the \texttt{sorttitle} and \texttt{sortyear} fields. We want this entry to be listed after the entry referring to the entire first volume</bltx:annotation>
+ <bltx:booktitle>Die Geburt der Tragödie. Unzeitgemä{ß}e Betrachtungen I--IV. Nachgelassene Schriften 1870--1973</bltx:booktitle>
+ <bltx:indexsorttitle>Vom Nutzen und Nachtheil der Historie fur das Leben</bltx:indexsorttitle>
+ <bltx:indextitle>Vom Nutzen und Nachtheil der Historie für das Leben</bltx:indextitle>
+ <bltx:langid>german</bltx:langid>
+ <bltx:mainsubtitle>Kritische Studienausgabe</bltx:mainsubtitle>
+ <bltx:maintitle>Sämtliche Werke</bltx:maintitle>
+ <bltx:shorttitle>Vom Nutzen und Nachtheil der Historie</bltx:shorttitle>
+ <bltx:sorttitle>Werke-01-243</bltx:sorttitle>
+ <bltx:sortyear>1988-2</bltx:sortyear>
+ <bltx:subtitle>Vom Nutzen und Nachtheil der Historie für das Leben</bltx:subtitle>
+ <bltx:title>Unzeitgemässe Betrachtungen. Zweites Stück</bltx:title>
+ <bltx:volume>1</bltx:volume>
+ <bltx:pages>
+ <bltx:list>
+ <bltx:item>
+ <bltx:start>243</bltx:start>
+ <bltx:end>334</bltx:end>
+ </bltx:item>
+ </bltx:list>
+ </bltx:pages>
+ <bltx:date>1988</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="brandt" entrytype="incollection">
+ <bltx:options>useprefix=false</bltx:options>
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="B">Brandt</bltx:namepart>
+ <bltx:namepart type="given" initial="A">Ahasver</bltx:namepart>
+ <bltx:namepart type="prefix" initial="v">von</bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="H">Hoffmann</bltx:namepart>
+ <bltx:namepart type="given" initial="E">Erich</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:names type="editor">
+ <bltx:name>
+ <bltx:namepart type="family" initial="S">Seibt</bltx:namepart>
+ <bltx:namepart type="given" initial="F">Ferdinand</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>Stuttgart</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>Klett-Cotta</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>An \texttt{incollection} entry with a \texttt{series} and a \texttt{number}. Note the format of the printed name and compare the \texttt{useprefix} option in the \texttt{options} field as well as \texttt{vangennep}. Also note the \texttt{indextitle, and \texttt{indexsorttitle} fields}</bltx:annotation>
+ <bltx:booktitle>Europa im Hoch- und Spätmittelalter</bltx:booktitle>
+ <bltx:indexsorttitle>Nordischen Lander von der Mitte des 11. Jahrhunderts bis 1448</bltx:indexsorttitle>
+ <bltx:indextitle>Nordischen Länder von der Mitte des 11.~Jahrhunderts bis 1448, Die</bltx:indextitle>
+ <bltx:langid>german</bltx:langid>
+ <bltx:number>2</bltx:number>
+ <bltx:series>Handbuch der europäischen Geschichte</bltx:series>
+ <bltx:shorttitle>Die nordischen Länder</bltx:shorttitle>
+ <bltx:title>Die nordischen Länder von der Mitte des 11.~Jahrhunderts bis 1448</bltx:title>
+ <bltx:pages>
+ <bltx:list>
+ <bltx:item>
+ <bltx:start>884</bltx:start>
+ <bltx:end>917</bltx:end>
+ </bltx:item>
+ </bltx:list>
+ </bltx:pages>
+ <bltx:date>1987</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="hyman" entrytype="incollection">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="H">Hyman</bltx:namepart>
+ <bltx:namepart type="given" initial="A">Arthur</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:names type="editor">
+ <bltx:name>
+ <bltx:namepart type="family" initial="O">O'Meara</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="D">Dominic</bltx:namepart>
+ <bltx:namepart initial="J">J.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>Washington, D.C.</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>The Catholic University of America Press</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>An \texttt{incollection} entry with a \texttt{series} and \texttt{number} field</bltx:annotation>
+ <bltx:booktitle>Studies in {Aristotle}</bltx:booktitle>
+ <bltx:indextitle>Aristotle's Theory of the Intellect</bltx:indextitle>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:number>9</bltx:number>
+ <bltx:series>Studies in Philosophy and the History of Philosophy</bltx:series>
+ <bltx:shorttitle>Aristotle's Theory of the Intellect</bltx:shorttitle>
+ <bltx:title>Aristotle's Theory of the Intellect and its Interpretation by {Averroes}</bltx:title>
+ <bltx:pages>
+ <bltx:list>
+ <bltx:item>
+ <bltx:start>161</bltx:start>
+ <bltx:end>191</bltx:end>
+ </bltx:item>
+ </bltx:list>
+ </bltx:pages>
+ <bltx:date>1981</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="pines" entrytype="incollection">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="P">Pines</bltx:namepart>
+ <bltx:namepart type="given" initial="S">Shlomo</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:names type="editor">
+ <bltx:name>
+ <bltx:namepart type="family" initial="T">Twersky</bltx:namepart>
+ <bltx:namepart type="given" initial="I">Isadore</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>Cambridge, Mass.</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>Harvard University Press</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>A typical \texttt{incollection} entry. Note the \texttt{indextitle} field</bltx:annotation>
+ <bltx:booktitle>Studies in Medieval {Jewish} History and Literature</bltx:booktitle>
+ <bltx:indextitle>Limitations of Human Knowledge According to {Al-Farabi}, {ibn Bajja}, and {Maimonides}, The</bltx:indextitle>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:shorttitle>Limitations of Human Knowledge</bltx:shorttitle>
+ <bltx:title>The Limitations of Human Knowledge According to {Al-Farabi}, {ibn Bajja}, and {Maimonides}</bltx:title>
+ <bltx:pages>
+ <bltx:list>
+ <bltx:item>
+ <bltx:start>82</bltx:start>
+ <bltx:end>109</bltx:end>
+ </bltx:item>
+ </bltx:list>
+ </bltx:pages>
+ <bltx:date>1979</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="moraux" entrytype="inproceedings">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="M">Moraux</bltx:namepart>
+ <bltx:namepart type="given" initial="P">Paul</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:names type="editor">
+ <bltx:name>
+ <bltx:namepart type="family" initial="L">Lloyd</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="G">G.</bltx:namepart>
+ <bltx:namepart initial="E">E.</bltx:namepart>
+ <bltx:namepart initial="R">R.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="O">Owen</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="G">G.</bltx:namepart>
+ <bltx:namepart initial="E">E.</bltx:namepart>
+ <bltx:namepart initial="L">L.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>Cambridge</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>Cambridge University Press</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>This is a typical \texttt{inproceedings} entry. Note the \texttt{booksubtitle}, \texttt{shorttitle}, \texttt{indextitle}, and \texttt{indexsorttitle} fields. Also note the \texttt{eventdate} field.</bltx:annotation>
+ <bltx:booktitle>Aristotle on Mind and the Senses</bltx:booktitle>
+ <bltx:booktitleaddon>Proceedings of the Seventh Symposium Aristotelicum</bltx:booktitleaddon>
+ <bltx:indexsorttitle>De Anima dans la tradition grecque</bltx:indexsorttitle>
+ <bltx:indextitle>\emph{De Anima} dans la tradition grècque, Le</bltx:indextitle>
+ <bltx:langid>french</bltx:langid>
+ <bltx:shorttitle>\emph{De Anima} dans la tradition grècque</bltx:shorttitle>
+ <bltx:subtitle>Quelques aspects de l'interpretation du traité, de Theophraste à Themistius</bltx:subtitle>
+ <bltx:title>Le \emph{De Anima} dans la tradition grècque</bltx:title>
+ <bltx:pages>
+ <bltx:list>
+ <bltx:item>
+ <bltx:start>281</bltx:start>
+ <bltx:end>324</bltx:end>
+ </bltx:item>
+ </bltx:list>
+ </bltx:pages>
+ <bltx:date>1979</bltx:date>
+ <bltx:date type="event">1975</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="salam" entrytype="inproceedings">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="S">Salam</bltx:namepart>
+ <bltx:namepart type="given" initial="A">Abdus</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:names type="editor">
+ <bltx:name>
+ <bltx:namepart type="family" initial="S">Svartholm</bltx:namepart>
+ <bltx:namepart type="given" initial="N">Nils</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>Stockholm</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>Almquist \&amp; Wiksell</bltx:item>
+ </bltx:publisher>
+ <bltx:booksubtitle>Relativistic groups and analyticity</bltx:booksubtitle>
+ <bltx:booktitle>Elementary particle theory</bltx:booktitle>
+ <bltx:booktitleaddon>Proceedings of the {Eighth Nobel Symposium}</bltx:booktitleaddon>
+ <bltx:title>Weak and Electromagnetic Interactions</bltx:title>
+ <bltx:venue>Aspenäsgarden, Lerum</bltx:venue>
+ <bltx:pages>
+ <bltx:list>
+ <bltx:item>
+ <bltx:start>367</bltx:start>
+ <bltx:end>377</bltx:end>
+ </bltx:item>
+ </bltx:list>
+ </bltx:pages>
+ <bltx:date>1968</bltx:date>
+ <bltx:date type="event">
+ <bltx:start>1968-05-19</bltx:start>
+ <bltx:end>1968-05-25</bltx:end>
+ </bltx:date>
+ </bltx:entry>
+ <bltx:entry id="cms" entrytype="manual">
+ <bltx:location>
+ <bltx:item>Chicago, Ill.</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>University of Chicago Press</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>This is a \texttt{manual} entry without an \texttt{author} or \texttt{editor}. Note the \texttt{label} field in the database file which is provided for author-year citation styles. Also note the \texttt{sorttitle} and \texttt{indextitle} fields. By default, all entries without an \texttt{author} or \texttt{editor} are alphabetized by \texttt{title} but we want this entry to be alphabetized under \enquote*{C} rather than \enquote*{T}. There's also an \texttt{isbn} field</bltx:annotation>
+ <bltx:edition>15</bltx:edition>
+ <bltx:indextitle>Chicago Manual of Style, The</bltx:indextitle>
+ <bltx:isbn>0-226-10403-6</bltx:isbn>
+ <bltx:label>CMS</bltx:label>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:shorttitle>Chicago Manual of Style</bltx:shorttitle>
+ <bltx:sorttitle>Chicago Manual of Style</bltx:sorttitle>
+ <bltx:subtitle>The Essential Guide for Writers, Editors, and Publishers</bltx:subtitle>
+ <bltx:title>The {Chicago} Manual of Style</bltx:title>
+ <bltx:date>2003</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="baez/online" entrytype="online">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="B">Baez</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="J">John</bltx:namepart>
+ <bltx:namepart initial="C">C.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="L">Lauda</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="A">Aaron</bltx:namepart>
+ <bltx:namepart initial="D">D.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:annotation>An \texttt{online} reference from arXiv. Note the \texttt{eprint} and \texttt{eprinttype} fields. Compare \texttt{baez\slash article} which is the same item given as an \texttt{article} entry with eprint information</bltx:annotation>
+ <bltx:eprint>math/0307200v3</bltx:eprint>
+ <bltx:eprinttype>arxiv</bltx:eprinttype>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:title>Higher-Dimensional Algebra {V}: 2-Groups</bltx:title>
+ <bltx:version>3</bltx:version>
+ <bltx:date>2004-10-27</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="ctan" entrytype="online">
+ <bltx:annotation>This is an \texttt{online} entry. The \textsc{url}, which is given in the \texttt{url} field, is transformed into a clickable link if \texttt{hyperref} support has been enabled. Note the format of the \texttt{urldate} field (\texttt{yyyy-mm-dd}) in the database file. Also note the \texttt{label} field which may be used as a fallback by citation styles which need an \texttt{author} and\slash or a \texttt{year}</bltx:annotation>
+ <bltx:label>CTAN</bltx:label>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:subtitle>The {Comprehensive TeX Archive Network}</bltx:subtitle>
+ <bltx:title>CTAN</bltx:title>
+ <bltx:url>http://www.ctan.org</bltx:url>
+ <bltx:date>2006</bltx:date>
+ <bltx:date type="url">2006-10-01</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="itzhaki" entrytype="online">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="I">Itzhaki</bltx:namepart>
+ <bltx:namepart type="given" initial="N">Nissan</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:abstract>We discuss the limitations of 't Hooft's proposal for the black hole S-matrix. We find that the validity of the S-matrix implies violation of the semi-classical approximation at scales large compared to the Planck scale. We also show that the effect of the centrifugal barrier on the S-matrix is crucial even for large transverse distances.</bltx:abstract>
+ <bltx:annotation>An \texttt{online} reference from arXiv. Note the \texttt{eprint} and \texttt{eprinttype} fields. Also note that the arXiv reference is transformed into a clickable link if \texttt{hyperref} support has been enabled</bltx:annotation>
+ <bltx:eprint>hep-th/9603067</bltx:eprint>
+ <bltx:eprinttype>arxiv</bltx:eprinttype>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:title>Some remarks on {'t Hooft's} {S}-matrix for black holes</bltx:title>
+ <bltx:version>1</bltx:version>
+ <bltx:date>1996-03-11</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="markey" entrytype="online">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="M">Markey</bltx:namepart>
+ <bltx:namepart type="given" initial="N">Nicolas</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:annotation>An \texttt{online} entry for a tutorial. Note the format of the \texttt{date} field (\texttt{yyyy-mm-dd}) in the database file.</bltx:annotation>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:sorttitle>Tame the Beast</bltx:sorttitle>
+ <bltx:subtitle>The {B} to {X} of {BibTeX}</bltx:subtitle>
+ <bltx:title>Tame the {BeaST}</bltx:title>
+ <bltx:url>http://mirror.ctan.org/info/bibtex/tamethebeast/ttb_en.pdf</bltx:url>
+ <bltx:version>1.3</bltx:version>
+ <bltx:date>2005-10-16</bltx:date>
+ <bltx:date type="url">2006-10-01</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="wassenberg" entrytype="online">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="W">Wassenberg</bltx:namepart>
+ <bltx:namepart type="given" initial="J">Jan</bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="S">Sanders</bltx:namepart>
+ <bltx:namepart type="given" initial="P">Peter</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:abstract>Sorting algorithms are the deciding factor for the performance of common operations such as removal of duplicates or database sort-merge joins. This work focuses on 32-bit integer keys, optionally paired with a 32-bit value. We present a fast radix sorting algorithm that builds upon a microarchitecture-aware variant of counting sort</bltx:abstract>
+ <bltx:annotation>A recent \texttt{online} reference from arXiv using the new (April 2007 onward) identifier format. Note the \texttt{eprint}, \texttt{eprinttype}, and \texttt{eprintclass} fields. Also note that the arXiv reference is transformed into a clickable link if \texttt{hyperref} support has been enabled</bltx:annotation>
+ <bltx:eprint>1008.2849v1</bltx:eprint>
+ <bltx:eprintclass>cs.DS</bltx:eprintclass>
+ <bltx:eprinttype>arxiv</bltx:eprinttype>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:title>Faster Radix Sort via Virtual Memory and Write-Combining</bltx:title>
+ <bltx:version>1</bltx:version>
+ <bltx:date>2010-08-17</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="almendro" entrytype="patent">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="A">Almendro</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="J">José</bltx:namepart>
+ <bltx:namepart initial="L">L.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="M">Martín</bltx:namepart>
+ <bltx:namepart type="given" initial="J">Jacinto</bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="S">Sánchez</bltx:namepart>
+ <bltx:namepart type="given" initial="A">Alberto</bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="N">Nozal</bltx:namepart>
+ <bltx:namepart type="given" initial="F">Fernando</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>countryfr</bltx:item>
+ <bltx:item>countryuk</bltx:item>
+ <bltx:item>countryde</bltx:item>
+ </bltx:location>
+ <bltx:annotation>This is a \texttt{patent} entry with a \texttt{location} field. The number is given in the \texttt{number} field. Note the format of the \texttt{location} field in the database file. Compare \texttt{laufenberg}, \texttt{sorace}, and \texttt{kowalik}</bltx:annotation>
+ <bltx:langid>german</bltx:langid>
+ <bltx:number>EU-29702195U</bltx:number>
+ <bltx:title>Elektromagnetisches Signalhorn</bltx:title>
+ <bltx:date>1998</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="kowalik" entrytype="patent">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="K">Kowalik</bltx:namepart>
+ <bltx:namepart type="given" initial="F">F.</bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="I">Isard</bltx:namepart>
+ <bltx:namepart type="given" initial="M">M.</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:annotation>This is a \texttt{patent} entry for a French patent request with a full date. The number is given in the \texttt{number} field. Note the format of the \texttt{type} and \texttt{date} fields in the database file. Compare \texttt{almendro}, \texttt{laufenberg}, and \texttt{sorace}</bltx:annotation>
+ <bltx:indextitle>Estimateur d'un défaut de fonctionnement</bltx:indextitle>
+ <bltx:langid>french</bltx:langid>
+ <bltx:number>9500261</bltx:number>
+ <bltx:title>Estimateur d'un défaut de fonctionnement d'un modulateur en quadrature et étage de modulation l'utilisant</bltx:title>
+ <bltx:type>patreqfr</bltx:type>
+ <bltx:date>1995-01-11</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="laufenberg" entrytype="patent">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="L">Laufenberg</bltx:namepart>
+ <bltx:namepart type="given" initial="X">Xaver</bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="E">Eynius</bltx:namepart>
+ <bltx:namepart type="given" initial="D">Dominique</bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="S">Suelzle</bltx:namepart>
+ <bltx:namepart type="given" initial="H">Helmut</bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="U">Usbeck</bltx:namepart>
+ <bltx:namepart type="given" initial="S">Stephan</bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="S">Spaeth</bltx:namepart>
+ <bltx:namepart type="given" initial="M">Matthias</bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="N-H">Neuser-Hoffmann</bltx:namepart>
+ <bltx:namepart type="given" initial="M">Miriam</bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="M">Myrzik</bltx:namepart>
+ <bltx:namepart type="given" initial="C">Christian</bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="S">Schmid</bltx:namepart>
+ <bltx:namepart type="given" initial="M">Manfred</bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="N">Nietfeld</bltx:namepart>
+ <bltx:namepart type="given" initial="F">Franz</bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="T">Thiel</bltx:namepart>
+ <bltx:namepart type="given" initial="A">Alexander</bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="B">Braun</bltx:namepart>
+ <bltx:namepart type="given" initial="H">Harald</bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="E">Ebner</bltx:namepart>
+ <bltx:namepart type="given" initial="N">Norbert</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:names type="holder">
+ <bltx:name>
+ <bltx:namepart type="family">
+ <bltx:namepart initial="R">Robert</bltx:namepart>
+ <bltx:namepart>Bosch</bltx:namepart>
+ <bltx:namepart>GmbH</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family">
+ <bltx:namepart initial="D">Daimler</bltx:namepart>
+ <bltx:namepart>Chrysler</bltx:namepart>
+ <bltx:namepart>AG</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family">
+ <bltx:namepart initial="B">Bayerische</bltx:namepart>
+ <bltx:namepart>Motoren</bltx:namepart>
+ <bltx:namepart>Werke</bltx:namepart>
+ <bltx:namepart>AG</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:abstract>The invention relates to an electric device comprising a generator, in particular for use in the vehicle electric system of a motor vehicle and a controller for controlling the generator voltage. The device is equipped with a control zone, in which the voltage is controlled and zones, in which the torque is controlled. The invention also relates to methods for operating a device of this type.</bltx:abstract>
+ <bltx:annotation>This is a \texttt{patent} entry with a \texttt{holder} field. Note the format of the \texttt{type} and \texttt{location} fields in the database file. Compare \texttt{almendro}, \texttt{sorace}, and \texttt{kowalik}</bltx:annotation>
+ <bltx:file>http://v3.espacenet.com/textdoc?IDX=EP1700367</bltx:file>
+ <bltx:langid>german</bltx:langid>
+ <bltx:number>1700367</bltx:number>
+ <bltx:title>Elektrische Einrichtung und Betriebsverfahren</bltx:title>
+ <bltx:type>patenteu</bltx:type>
+ <bltx:date>2006-09-13</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="sorace" entrytype="patent">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="S">Sorace</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="R">Ronald</bltx:namepart>
+ <bltx:namepart initial="E">E.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="R">Reinhardt</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="V">Victor</bltx:namepart>
+ <bltx:namepart initial="S">S.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="V">Vaughn</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="S">Steven</bltx:namepart>
+ <bltx:namepart initial="A">A.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:names type="holder">
+ <bltx:name>
+ <bltx:namepart type="family">
+ <bltx:namepart initial="H">Hughes</bltx:namepart>
+ <bltx:namepart>Aircraft</bltx:namepart>
+ <bltx:namepart>Company</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:annotation>This is a \texttt{patent} entry with a \texttt{holder} field. Note the format of the \texttt{type} and \texttt{date} fields in the database file. Compare \texttt{almendro}, \texttt{laufenberg}, and \texttt{kowalik}</bltx:annotation>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:number>5668842</bltx:number>
+ <bltx:title>High-Speed Digital-to-{RF} Converter</bltx:title>
+ <bltx:type>patentus</bltx:type>
+ <bltx:date>1997-09-16</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="jcg" entrytype="periodical">
+ <bltx:annotation>This is a \texttt{periodical} entry with an \texttt{issn} field.</bltx:annotation>
+ <bltx:issn>0097-8493</bltx:issn>
+ <bltx:issuetitle>Semantic {3D} Media and Content</bltx:issuetitle>
+ <bltx:number>4</bltx:number>
+ <bltx:title>Computers and Graphics</bltx:title>
+ <bltx:volume>35</bltx:volume>
+ <bltx:date>2011</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="chiu" entrytype="report">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="C">Chiu</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="W">Willy</bltx:namepart>
+ <bltx:namepart initial="W">W.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="C">Chow</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="W">We</bltx:namepart>
+ <bltx:namepart initial="M">Min</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:institution>
+ <bltx:item>IBM</bltx:item>
+ </bltx:institution>
+ <bltx:annotation>This is a \texttt{report} entry for a research report. Note the format of the \texttt{type} field in the database file which uses a localization key. The number of the report is given in the \texttt{number} field. Also note the \texttt{sorttitle} and \texttt{indextitle} fields</bltx:annotation>
+ <bltx:indextitle>Hybrid Hierarchical Model, A</bltx:indextitle>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:number>RC-6947</bltx:number>
+ <bltx:sorttitle>Hybrid Hierarchical Model of a Multiple Virtual Storage (MVS) Operating System</bltx:sorttitle>
+ <bltx:title>A Hybrid Hierarchical Model of a {Multiple Virtual Storage} ({MVS}) Operating System</bltx:title>
+ <bltx:type>resreport</bltx:type>
+ <bltx:date>1978</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="padhye" entrytype="report">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="P">Padhye</bltx:namepart>
+ <bltx:namepart type="given" initial="J">Jitendra</bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="F">Firoiu</bltx:namepart>
+ <bltx:namepart type="given" initial="V">Victor</bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="T">Towsley</bltx:namepart>
+ <bltx:namepart type="given" initial="D">Don</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:institution>
+ <bltx:item>University of Massachusetts</bltx:item>
+ </bltx:institution>
+ <bltx:location>
+ <bltx:item>Amherst, Mass.</bltx:item>
+ </bltx:location>
+ <bltx:abstract>The steady state performance of a bulk transfer TCP flow (i.e. a flow with a large amount of data to send, such as FTP transfers) may be characterized by three quantities. The first is the send rate, which is the amount of data sent by the sender in unit time. The second is the throughput, which is the amount of data received by the receiver in unit time. Note that the throughput will always be less than or equal to the send rate due to losses. Finally, the number of non-duplicate packets received by the receiver in unit time gives us the goodput of the connection. The goodput is always less than or equal to the throughput, since the receiver may receive two copies of the same packet due to retransmissions by the sender. In a previous paper, we presented a simple model for predicting the steady state send rate of a bulk transfer TCP flow as a function of loss rate and round trip time. In this paper, we extend that work in two ways. First, we analyze the performance of bulk transfer TCP flows using more precise, stochastic analysis. Second, we build upon the previous analysis to provide both an approximate formula as well as a more accurate stochastic model for the steady state throughput of a bulk transfer TCP flow.</bltx:abstract>
+ <bltx:annotation>This is a \texttt{report} entry for a technical report. Note the format of the \texttt{type} field in the database file which uses a localization key. The number of the report is given in the \texttt{number} field. Also note the \texttt{sorttitle} and \texttt{indextitle} fields</bltx:annotation>
+ <bltx:file>ftp://gaia.cs.umass.edu/pub/Padhey99-markov.ps</bltx:file>
+ <bltx:indextitle>Stochastic Model of {TCP Reno} Congestion Avoidance and Control, A</bltx:indextitle>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:number>99-02</bltx:number>
+ <bltx:sorttitle>A Stochastic Model of TCP Reno Congestion Avoidance and Control</bltx:sorttitle>
+ <bltx:title>A Stochastic Model of {TCP Reno} Congestion Avoidance and Control</bltx:title>
+ <bltx:type>techreport</bltx:type>
+ <bltx:date>1999</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="geer" entrytype="thesis">
+ <bltx:options>useprefix=false</bltx:options>
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="G">Geer</bltx:namepart>
+ <bltx:namepart type="given" initial="I">Ingrid</bltx:namepart>
+ <bltx:namepart type="prefix" initial="d">de</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:institution>
+ <bltx:item>Uppsala Universitet</bltx:item>
+ </bltx:institution>
+ <bltx:location>
+ <bltx:item>Uppsala</bltx:item>
+ </bltx:location>
+ <bltx:annotation>This is a typical \texttt{thesis} entry for a PhD thesis. Note the \texttt{type} field in the database file which uses a localization key. Also note the format of the printed name and compare the \texttt{useprefix} option in the \texttt{options} field as well as \texttt{vangennep}</bltx:annotation>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=british</bltx:langidopts>
+ <bltx:subtitle>The {Orkney Earldom} of the Twelfth Century. {A} Musicological Study</bltx:subtitle>
+ <bltx:title>Earl, Saint, Bishop, Skald~-- and Music</bltx:title>
+ <bltx:type>phdthesis</bltx:type>
+ <bltx:date>1985</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="loh" entrytype="thesis">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="L">Loh</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="N">Nin</bltx:namepart>
+ <bltx:namepart initial="C">C.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:institution>
+ <bltx:item>Massachusetts Institute of Technology</bltx:item>
+ </bltx:institution>
+ <bltx:location>
+ <bltx:item>Cambridge, Mass.</bltx:item>
+ </bltx:location>
+ <bltx:annotation>This is a typical \texttt{thesis} entry for an MA thesis. Note the \texttt{type} field in the database file which uses a localization key</bltx:annotation>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:title>High-Resolution Micromachined Interferometric Accelerometer</bltx:title>
+ <bltx:type>mathesis</bltx:type>
+ <bltx:date>1992</bltx:date>
+ </bltx:entry>
+</bltx:entries>
diff --git a/macros/latex/contrib/biblatex-ms/bibtex/bib/biblatex/biblatex-examples-ms.bib b/macros/latex/contrib/biblatex-ms/bibtex/bib/biblatex/biblatex-examples-ms.bib
new file mode 100644
index 0000000000..5aaa9d2196
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/bibtex/bib/biblatex/biblatex-examples-ms.bib
@@ -0,0 +1,1661 @@
+@string{anch-ie = {Angew.~Chem. Int.~Ed.}}
+@string{cup = {Cambridge University Press}}
+@string{dtv = {Deutscher Taschenbuch-Verlag}}
+@string{hup = {Harvard University Press}}
+@string{jams = {J.~Amer. Math. Soc.}}
+@string{jchph = {J.~Chem. Phys.}}
+@string{jomch = {J.~Organomet. Chem.}}
+@string{pup = {Princeton University Press}}
+
+@incollection{westfahl:space,
+ author = {Westfahl, Gary},
+ title = {The True Frontier},
+ subtitle = {Confronting and Avoiding the Realities of Space in {American}
+ Science Fiction Films},
+ pages = {55-65},
+ crossref = {westfahl:frontier},
+ langid = {english},
+ langidopts = {variant=american},
+ indextitle = {True Frontier, The},
+ annotation = {A cross-referenced article from a \texttt{collection}. This is
+ an \texttt{incollection} entry with a \texttt{crossref}
+ field. Note the \texttt{subtitle} and \texttt{indextitle}
+ fields},
+}
+
+@set{set,
+ entryset = {herrmann,aksin,yoon},
+ annotation = {A \texttt{set} with three members.},
+}
+
+@set{stdmodel,
+ entryset = {glashow,weinberg,salam},
+ annotation = {A \texttt{set} with three members discussing the standard
+ model of particle physics.},
+}
+
+@article{aksin,
+ author = {Aks{\i}n, {\"O}zge and T{\"u}rkmen, Hayati and Artok, Levent
+ and {\c{C}}etinkaya, Bekir and Ni, Chaoying and
+ B{\"u}y{\"u}kg{\"u}ng{\"o}r, Orhan and {\"O}zkal, Erhan},
+ title = {Effect of immobilization on catalytic characteristics of
+ saturated {Pd-N}-heterocyclic carbenes in {Mizoroki-Heck}
+ reactions},
+ journaltitle = jomch,
+ date = 2006,
+ volume = 691,
+ number = 13,
+ pages = {3027-3036},
+ indextitle = {Effect of immobilization on catalytic characteristics},
+}
+
+@article{angenendt,
+ author = {Angenendt, Arnold},
+ title = {In Honore Salvatoris~-- Vom Sinn und Unsinn der
+ Patrozinienkunde},
+ journaltitle = {Revue d'Histoire Eccl{\'e}siastique},
+ date = 2002,
+ volume = 97,
+ pages = {431--456, 791--823},
+ langid = {german},
+ indextitle = {In Honore Salvatoris},
+ shorttitle = {In Honore Salvatoris},
+ annotation = {A German article in a French journal. Apart from that, a
+ typical \texttt{article} entry. Note the \texttt{indextitle}
+ field},
+}
+
+@article{baez/article,
+ author = {Baez, John C. and Lauda, Aaron D.},
+ title = {Higher-Dimensional Algebra {V}: 2-Groups},
+ journaltitle = {Theory and Applications of Categories},
+ date = 2004,
+ volume = 12,
+ pages = {423-491},
+ version = 3,
+ eprint = {math/0307200v3},
+ eprinttype = {arxiv},
+ langid = {english},
+ langidopts = {variant=american},
+ annotation = {An \texttt{article} with \texttt{eprint} and
+ \texttt{eprinttype} fields. Note that the arXiv reference is
+ transformed into a clickable link if \texttt{hyperref} support
+ has been enabled. Compare \texttt{baez\slash online}, which
+ is the same item given as an \texttt{online} entry},
+}
+
+@article{bertram,
+ author = {Bertram, Aaron and Wentworth, Richard},
+ title = {Gromov invariants for holomorphic maps on {Riemann} surfaces},
+ journaltitle = jams,
+ date = 1996,
+ volume = 9,
+ number = 2,
+ pages = {529-571},
+ langid = {english},
+ langidopts = {variant=american},
+ shorttitle = {Gromov invariants},
+ annotation = {An \texttt{article} entry with a \texttt{volume} and a
+ \texttt{number} field},
+}
+
+@article{doody,
+ author = {Doody, Terrence},
+ title = {Hemingway's Style and {Jake's} Narration},
+ year = 1974,
+ volume = 4,
+ number = 3,
+ pages = {212-225},
+ langid = {english},
+ langidopts = {variant=american},
+ related = {matuz:doody},
+ relatedstring= {\autocap{e}xcerpt in},
+ journal = {The Journal of Narrative Technique},
+ annotation = {An \texttt{article} entry cited as an excerpt from a
+ \texttt{collection} entry. Note the format of the
+ \texttt{related} and \texttt{relatedstring} fields},
+}
+
+@collection{matuz:doody,
+ editor = {Matuz, Roger},
+ title = {Contemporary Literary Criticism},
+ year = 1990,
+ volume = 61,
+ publisher = {Gale},
+ location = {Detroit},
+ pages = {204-208},
+ langid = {english},
+ langidopts = {variant=american},
+ annotation = {A \texttt{collection} entry providing the excerpt information
+ for the \texttt{doody} entry. Note the format of the
+ \texttt{pages} field},
+}
+
+@article{gillies,
+ author = {Gillies, Alexander},
+ title = {Herder and the Preparation of {Goethe's} Idea of World
+ Literature},
+ journaltitle = {Publications of the English Goethe Society},
+ date = 1933,
+ series = {newseries},
+ volume = 9,
+ pages = {46-67},
+ langid = {english},
+ langidopts = {variant=british},
+ annotation = {An \texttt{article} entry with a \texttt{series} and a
+ \texttt{volume} field. Note that format of the \texttt{series}
+ field in the database file},
+}
+
+@article{glashow,
+ author = {Glashow, Sheldon},
+ title = {Partial Symmetries of Weak Interactions},
+ journaltitle = {Nucl.~Phys.},
+ date = 1961,
+ volume = 22,
+ pages = {579-588},
+}
+
+@article{herrmann,
+ author = {Herrmann, Wolfgang A. and {\"O}fele, Karl and Schneider,
+ Sabine K. and Herdtweck, Eberhardt and Hoffmann, Stephan D.},
+ title = {A carbocyclic carbene as an efficient catalyst ligand for {C--C}
+ coupling reactions},
+ journaltitle = anch-ie,
+ date = 2006,
+ volume = 45,
+ number = 23,
+ pages = {3859-3862},
+ indextitle = {Carbocyclic carbene as an efficient catalyst, A},
+}
+
+@article{kastenholz,
+ author = {Kastenholz, M. A. and H{\"u}nenberger, Philippe H.},
+ title = {Computation of methodology\hyphen independent ionic solvation
+ free energies from molecular simulations},
+ journaltitle = jchph,
+ date = 2006,
+ subtitle = {{I}. {The} electrostatic potential in molecular liquids},
+ volume = 124,
+ eid = 124106,
+ doi = {10.1063/1.2172593},
+ langid = {english},
+ langidopts = {variant=american},
+ indextitle = {Computation of ionic solvation free energies},
+ annotation = {An \texttt{article} entry with an \texttt{eid} and a
+ \texttt{doi} field. Note that the \textsc{doi} is transformed
+ into a clickable link if \texttt{hyperref} support has been
+ enabled},
+ abstract = {The computation of ionic solvation free energies from
+ atomistic simulations is a surprisingly difficult problem that
+ has found no satisfactory solution for more than 15 years. The
+ reason is that the charging free energies evaluated from such
+ simulations are affected by very large errors. One of these is
+ related to the choice of a specific convention for summing up
+ the contributions of solvent charges to the electrostatic
+ potential in the ionic cavity, namely, on the basis of point
+ charges within entire solvent molecules (M scheme) or on the
+ basis of individual point charges (P scheme). The use of an
+ inappropriate convention may lead to a charge-independent
+ offset in the calculated potential, which depends on the
+ details of the summation scheme, on the quadrupole-moment
+ trace of the solvent molecule, and on the approximate form
+ used to represent electrostatic interactions in the
+ system. However, whether the M or P scheme (if any) represents
+ the appropriate convention is still a matter of on-going
+ debate. The goal of the present article is to settle this
+ long-standing controversy by carefully analyzing (both
+ analytically and numerically) the properties of the
+ electrostatic potential in molecular liquids (and inside
+ cavities within them).},
+}
+
+@article{murray,
+ author = {Hostetler, Michael J. and Wingate, Julia E. and Zhong,
+ Chuan-Jian and Harris, Jay E. and Vachet, Richard W. and
+ Clark, Michael R. and Londono, J. David and Green, Stephen
+ J. and Stokes, Jennifer J. and Wignall, George D. and Glish,
+ Gary L. and Porter, Marc D. and Evans, Neal D. and Murray,
+ Royce W.},
+ title = {Alkanethiolate gold cluster molecules with core diameters from
+ 1.5 to 5.2~{nm}},
+ journaltitle = {Langmuir},
+ date = 1998,
+ subtitle = {Core and monolayer properties as a function of core size},
+ volume = 14,
+ number = 1,
+ pages = {17-30},
+ langid = {english},
+ langidopts = {variant=american},
+ indextitle = {Alkanethiolate gold cluster molecules},
+ shorttitle = {Alkanethiolate gold cluster molecules},
+ annotation = {An \texttt{article} entry with \arabic{author} authors. By
+ default, long author and editor lists are automatically
+ truncated. This is configurable},
+}
+
+@article{reese,
+ author = {Reese, Trevor R.},
+ title = {Georgia in {Anglo-Spanish} Diplomacy, 1736--1739},
+ journaltitle = {William and Mary Quarterly},
+ date = 1958,
+ series = 3,
+ volume = 15,
+ pages = {168-190},
+ langid = {english},
+ langidopts = {variant=american},
+ annotation = {An \texttt{article} entry with a \texttt{series} and a
+ \texttt{volume} field. Note the format of the series. If the
+ value of the \texttt{series} field is an integer, this number
+ is printed as an ordinal and the string \enquote*{series} is
+ appended automatically},
+}
+
+@article{sarfraz,
+ author = {M. Sarfraz and M. F. A. Razzak},
+ title = {Technical section: {An} algorithm for automatic capturing of
+ the font outlines},
+ year = 2002,
+ volume = 26,
+ number = 5,
+ pages = {795-804},
+ issn = {0097-8493},
+ journal = {Computers and Graphics},
+ annotation = {An \texttt{article} entry with an \texttt{issn} field},
+}
+
+@article{shore,
+ author = {Shore, Bradd},
+ title = {Twice-Born, Once Conceived},
+ journaltitle = {American Anthropologist},
+ date = {1991-03},
+ subtitle = {Meaning Construction and Cultural Cognition},
+ series = {newseries},
+ volume = 93,
+ number = 1,
+ pages = {9-27},
+ annotation = {An \texttt{article} entry with \texttt{series},
+ \texttt{volume}, and \texttt{number} fields. Note the format
+ of the \texttt{series} which is a localization key},
+}
+
+@article{sigfridsson,
+ author = {Sigfridsson, Emma and Ryde, Ulf},
+ title = {Comparison of methods for deriving atomic charges from the
+ electrostatic potential and moments},
+ journaltitle = {Journal of Computational Chemistry},
+ date = 1998,
+ volume = 19,
+ number = 4,
+ pages = {377-395},
+ doi = {10.1002/(SICI)1096-987X(199803)19:4<377::AID-JCC1>3.0.CO;2-P},
+ langid = {english},
+ langidopts = {variant=american},
+ indextitle = {Methods for deriving atomic charges},
+ annotation = {An \texttt{article} entry with \texttt{volume},
+ \texttt{number}, and \texttt{doi} fields. Note that the
+ \textsc{doi} is transformed into a clickable link if
+ \texttt{hyperref} support has been enabled},
+ abstract = {Four methods for deriving partial atomic charges from the
+ quantum chemical electrostatic potential (CHELP, CHELPG,
+ Merz-Kollman, and RESP) have been compared and critically
+ evaluated. It is shown that charges strongly depend on how and
+ where the potential points are selected. Two alternative
+ methods are suggested to avoid the arbitrariness in the
+ point-selection schemes and van der Waals exclusion radii:
+ CHELP-BOW, which also estimates the charges from the
+ electrostatic potential, but with potential points that are
+ Boltzmann-weighted after their occurrence in actual
+ simulations using the energy function of the program in which
+ the charges will be used, and CHELMO, which estimates the
+ charges directly from the electrostatic multipole
+ moments. Different criteria for the quality of the charges are
+ discussed.},
+}
+
+@article{spiegelberg,
+ author = {Spiegelberg, Herbert},
+ title = {\mkbibquote{Intention} und \mkbibquote{Intentionalit{\"a}t} in
+ der Scholastik, bei Brentano und Husserl},
+ journaltitle = {Studia Philosophica},
+ date = 1969,
+ volume = 29,
+ pages = {189-216},
+ langid = {german},
+ sorttitle = {Intention und Intentionalitat in der Scholastik, bei Brentano
+ und Husserl},
+ indexsorttitle= {Intention und Intentionalitat in der Scholastik, bei Brentano
+ und Husserl},
+ shorttitle = {Intention und Intentionalit{\"a}t},
+ annotation = {An \texttt{article} entry. Note the \texttt{sorttitle} and
+ \texttt{indexsorttitle} fields and the markup of the quotes in
+ the database file},
+}
+
+@article{springer,
+ author = {Springer, Otto},
+ title = {Mediaeval Pilgrim Routes from {Scandinavia} to {Rome}},
+ journaltitle = {Mediaeval Studies},
+ date = 1950,
+ volume = 12,
+ pages = {92-122},
+ langid = {english},
+ langidopts = {variant=british},
+ shorttitle = {Mediaeval Pilgrim Routes},
+ annotation = {A plain \texttt{article} entry},
+}
+
+@article{weinberg,
+ author = {Weinberg, Steven},
+ title = {A Model of Leptons},
+ journaltitle = {Phys.~Rev.~Lett.},
+ date = 1967,
+ volume = 19,
+ pages = {1264-1266},
+}
+
+@article{yoon,
+ author = {Yoon, Myeong S. and Ryu, Dowook and Kim, Jeongryul and Ahn,
+ Kyo Han},
+ title = {Palladium pincer complexes with reduced bond angle strain:
+ efficient catalysts for the {Heck} reaction},
+ journaltitle = {Organometallics},
+ date = 2006,
+ volume = 25,
+ number = 10,
+ pages = {2409-2411},
+ indextitle = {Palladium pincer complexes},
+}
+
+@book{aristotle:anima,
+ author = {Aristotle},
+ title = {De Anima},
+ date = 1907,
+ editor = {Hicks, Robert Drew},
+ publisher = cup,
+ location = {Cambridge},
+ keywords = {primary},
+ langid = {english},
+ langidopts = {variant=british},
+ annotation = {A \texttt{book} entry with an \texttt{author} and an
+ \texttt{editor}},
+}
+
+@book{aristotle:physics,
+ author = {Aristotle},
+ title = {Physics},
+ date = 1929,
+ translator = {Wicksteed, P. H. and Cornford, F. M.},
+ publisher = {G. P. Putnam},
+ location = {New York},
+ keywords = {primary},
+ langid = {english},
+ langidopts = {variant=american},
+ shorttitle = {Physics},
+ annotation = {A \texttt{book} entry with a \texttt{translator} field},
+}
+
+@book{aristotle:poetics,
+ author = {Aristotle},
+ title = {Poetics},
+ date = 1968,
+ editor = {Lucas, D. W.},
+ series = {Clarendon {Aristotle}},
+ publisher = {Clarendon Press},
+ location = {Oxford},
+ keywords = {primary},
+ langid = {english},
+ langidopts = {variant=british},
+ shorttitle = {Poetics},
+ annotation = {A \texttt{book} entry with an \texttt{author} and an
+ \texttt{editor} as well as a \texttt{series} field},
+}
+
+@mvbook{aristotle:rhetoric,
+ author = {Aristotle},
+ title = {The Rhetoric of {Aristotle} with a commentary by the late {Edward
+ Meredith Cope}},
+ date = 1877,
+ editor = {Cope, Edward Meredith},
+ commentator = {Cope, Edward Meredith},
+ volumes = 3,
+ publisher = cup,
+ keywords = {primary},
+ langid = {english},
+ langidopts = {variant=british},
+ sorttitle = {Rhetoric of Aristotle},
+ indextitle = {Rhetoric of {Aristotle}, The},
+ shorttitle = {Rhetoric},
+ annotation = {A commented edition. Note the concatenation of the
+ \texttt{editor} and \texttt{commentator} fields as well as the
+ \texttt{volumes}, \texttt{sorttitle}, and \texttt{indextitle}
+ fields},
+}
+
+@book{augustine,
+ author = {Augustine, Robert L.},
+ title = {Heterogeneous catalysis for the synthetic chemist},
+ date = 1995,
+ publisher = {Marcel Dekker},
+ location = {New York},
+ langid = {english},
+ langidopts = {variant=american},
+ shorttitle = {Heterogeneous catalysis},
+ annotation = {A plain \texttt{book} entry},
+}
+
+@book{averroes/bland,
+ author = {Averroes},
+ title = {The Epistle on the Possibility of Conjunction with the Active
+ Intellect by {Ibn Rushd} with the Commentary of {Moses Narboni}},
+ date = 1982,
+ editor = {Bland, Kalman P.},
+ translator = {Bland, Kalman P.},
+ series = {Moreshet: Studies in {Jewish} History, Literature and Thought},
+ number = 7,
+ publisher = {Jewish Theological Seminary of America},
+ location = {New York},
+ keywords = {primary},
+ langid = {english},
+ langidopts = {variant=american},
+ indextitle = {Epistle on the Possibility of Conjunction, The},
+ shorttitle = {Possibility of Conjunction},
+ annotation = {A \texttt{book} entry with a \texttt{series} and a
+ \texttt{number}. Note the concatenation of the \texttt{editor}
+ and \texttt{translator} fields as well as the
+ \texttt{indextitle} field},
+}
+
+@book{averroes/hannes,
+ author = {Averroes},
+ title = {Des Averro{\"e}s Abhandlung: \mkbibquote{{\"U}ber die
+ M{\"o}glichkeit der Conjunktion} oder \mkbibquote{{\"U}ber den
+ materiellen Intellekt}},
+ date = 1892,
+ editor = {Hannes, Ludwig},
+ translator = {Hannes, Ludwig},
+ annotator = {Hannes, Ludwig},
+ publisher = {C.~A. Kaemmerer},
+ location = {Halle an der Saale},
+ keywords = {primary},
+ langid = {german},
+ sorttitle = {Uber die Moglichkeit der Conjunktion},
+ indexsorttitle= {Uber die Moglichkeit der Conjunktion},
+ indextitle = {{\"U}ber die M{\"o}glichkeit der Conjunktion},
+ shorttitle = {{\"U}ber die M{\"o}glichkeit der Conjunktion},
+ annotation = {An annotated edition. Note the concatenation of the
+ \texttt{editor}, \texttt{translator}, and \texttt{annotator}
+ fields. Also note the \texttt{shorttitle},
+ \texttt{indextitle}, \texttt{sorttitle}, and
+ \texttt{indexsorttitle} fields},
+}
+
+@book{averroes/hercz,
+ author = {Averroes},
+ title = {Drei Abhandlungen {\"u}ber die Conjunction des separaten
+ Intellects mit dem Menschen},
+ date = 1869,
+ editor = {Hercz, J.},
+ translator = {Hercz, J.},
+ publisher = {S.~Hermann},
+ location = {Berlin},
+ keywords = {primary},
+ langid = {german},
+ indexsorttitle= {Drei Abhandlungen uber die Conjunction},
+ indextitle = {Drei Abhandlungen {\"u}ber die Conjunction},
+ subtitle = {Von Averroes (Vater und Sohn), aus dem Arabischen
+ {\"u}bersetzt von Samuel Ibn Tibbon},
+ shorttitle = {Drei Abhandlungen},
+ annotation = {A \texttt{book} entry. Note the concatenation of the
+ \texttt{editor} and \texttt{translator} fields as well as the
+ \texttt{indextitle} and \texttt{indexsorttitle} fields},
+}
+
+@book{cicero,
+ author = {Cicero, Marcus Tullius},
+ title = {De natura deorum. {\"U}ber das Wesen der G{\"o}tter},
+ date = 1995,
+ editor = {Blank-Sangmeister, Ursula},
+ translator = {Blank-Sangmeister, Ursula},
+ afterword = {Thraede, Klaus},
+ language = {langlatin and langgerman},
+ publisher = {Reclam},
+ location = {Stuttgart},
+ langid = {german},
+ indextitle = {De natura deorum},
+ shorttitle = {De natura deorum},
+ annotation = {A bilingual edition of Cicero's \emph{De natura deorum}, with
+ a German translation. Note the format of the \texttt{language}
+ field in the database file, the concatenation of the
+ \texttt{editor} and \texttt{translator} fields, and the
+ \texttt{afterword} field},
+}
+
+@book{coleridge,
+ author = {Coleridge, Samuel Taylor},
+ title = {Biographia literaria, or {Biographical} sketches of my literary
+ life and opinions},
+ date = 1983,
+ editor = {Coburn, Kathleen and Engell, James and Bate, W. Jackson},
+ maintitle = {The collected works of {Samuel Taylor Coleridge}},
+ volume = 7,
+ part = 2,
+ series = {Bollingen Series},
+ number = 75,
+ publisher = {Routledge {and} Kegan Paul},
+ location = {London},
+ langid = {english},
+ langidopts = {variant=british},
+ indextitle = {Biographia literaria},
+ shorttitle = {Biographia literaria},
+ annotation = {One (partial) volume of a multivolume book. This is a
+ \texttt{book} entry with a \texttt{volume} and a \texttt{part}
+ field which explicitly refers to the second (physical) part of
+ the seventh (logical) volume. Also note the \texttt{series}
+ and \texttt{number} fields},
+}
+
+@book{companion,
+ author = {Goossens, Michel and Mittelbach, Frank and Samarin, Alexander},
+ title = {The {LaTeX} Companion},
+ date = 1994,
+ edition = 1,
+ publisher = {Addison-Wesley},
+ location = {Reading, Mass.},
+ pagetotal = 528,
+ langid = {english},
+ langidopts = {variant=american},
+ sorttitle = {LaTeX Companion},
+ indextitle = {LaTeX Companion, The},
+ shorttitle = {LaTeX Companion},
+ annotation = {A book with three authors. Note the formatting of the author
+ list. By default, only the first name is reversed in the
+ bibliography},
+}
+
+@book{cotton,
+ author = {Cotton, Frank Albert and Wilkinson, Geoffrey and Murillio,
+ Carlos A. and Bochmann, Manfred},
+ title = {Advanced inorganic chemistry},
+ date = 1999,
+ edition = 6,
+ publisher = {Wiley},
+ location = {Chichester},
+ langid = {english},
+ langidopts = {variant=british},
+ annotation = {A \texttt{book} entry with \arabic{author} authors and an
+ \texttt{edition} field. By default, long \texttt{author} and
+ \texttt{editor} lists are automatically truncated. This is
+ configurable},
+}
+
+@book{gerhardt,
+ author = {Gerhardt, Michael J.},
+ title = {The Federal Appointments Process},
+ date = 2000,
+ publisher = {Duke University Press},
+ location = {Durham and London},
+ langid = {english},
+ langidopts = {variant=american},
+ sorttitle = {Federal Appointments Process},
+ indextitle = {Federal Appointments Process, The},
+ subtitle = {A Constitutional and Historical Analysis},
+ shorttitle = {Federal Appointments Process},
+ annotation = {This is a \texttt{book} entry. Note the format of the
+ \texttt{location} field as well as the \texttt{sorttitle} and
+ \texttt{indextitle} fields},
+}
+
+@book{gonzalez,
+ author = {Gonzalez, Ray},
+ title = {The Ghost of {John Wayne} and Other Stories},
+ date = 2001,
+ publisher = {The University of Arizona Press},
+ location = {Tucson},
+ isbn = {0-816-52066-6},
+ langid = {english},
+ langidopts = {variant=american},
+ sorttitle = {Ghost of John Wayne and Other Stories},
+ indextitle = {Ghost of {John Wayne} and Other Stories, The},
+ shorttitle = {Ghost of {John Wayne}},
+ annotation = {A collection of short stories. This is a \texttt{book} entry.
+ Note the \texttt{sorttitle} and \texttt{indextitle} fields in
+ the database file. There's also an \texttt{isbn} field},
+}
+
+@book{hammond,
+ author = {Hammond, Christopher},
+ title = {The basics of crystallography and diffraction},
+ date = 1997,
+ publisher = {International Union of Crystallography and Oxford University
+ Press},
+ location = {Oxford},
+ langid = {english},
+ langidopts = {variant=british},
+ sorttitle = {Basics of crystallography and diffraction},
+ indextitle = {Basics of crystallography and diffraction, The},
+ shorttitle = {Crystallography and diffraction},
+ annotation = {A \texttt{book} entry. Note the \texttt{sorttitle} and
+ \texttt{indextitle} fields as well as the format of the
+ \texttt{publisher} field},
+}
+
+@book{iliad,
+ author = {Homer},
+ title = {Die Ilias},
+ date = 2004,
+ translator = {Schadewaldt, Wolfgang},
+ introduction = {Latacz, Joachim},
+ edition = 3,
+ publisher = {Artemis \& Winkler},
+ location = {D{\"u}sseldorf and Z{\"u}rich},
+ langid = {german},
+ sorttitle = {Ilias},
+ indextitle = {Ilias, Die},
+ shorttitle = {Ilias},
+ annotation = {A German translation of the \emph{Iliad}. Note the
+ \texttt{translator} and \texttt{introduction} fields and the
+ format of the \texttt{location} field in the database
+ file. Also note the \texttt{sorttitle} and \texttt{indextitle}
+ fields},
+}
+
+@mvbook{knuth:ct,
+ author = {Knuth, Donald E.},
+ title = {Computers \& Typesetting},
+ date = {1984/1986},
+ volumes = 5,
+ publisher = {Addison-Wesley},
+ location = {Reading, Mass.},
+ langid = {english},
+ langidopts = {variant=american},
+ sorttitle = {Computers & Typesetting},
+ indexsorttitle= {Computers & Typesetting},
+ annotation = {A five-volume book cited as a whole. This is a \texttt{mvbook}
+ entry, note the \texttt{volumes} field},
+}
+
+@book{knuth:ct:a,
+ author = {Knuth, Donald E.},
+ title = {The {\TeX book}},
+ date = 1984,
+ maintitle = {Computers \& Typesetting},
+ volume = {A},
+ publisher = {Addison-Wesley},
+ location = {Reading, Mass.},
+ langid = {english},
+ langidopts = {variant=american},
+ sorttitle = {Computers & Typesetting A},
+ indexsorttitle= {The TeXbook},
+ indextitle = {\protect\TeX book, The},
+ shorttitle = {\TeX book},
+ annotation = {The first volume of a five-volume book. Note the
+ \texttt{sorttitle} field. We want this
+ volume to be listed after the entry referring to the entire
+ five-volume set. Also note the \texttt{indextitle} and
+ \texttt{indexsorttitle} fields. Indexing packages that don't
+ generate robust index entries require some control sequences
+ to be protected from expansion},
+}
+
+@book{knuth:ct:b,
+ author = {Knuth, Donald E.},
+ title = {{\TeX}: The Program},
+ date = 1986,
+ maintitle = {Computers \& Typesetting},
+ volume = {B},
+ publisher = {Addison-Wesley},
+ location = {Reading, Mass.},
+ langid = {english},
+ langidopts = {variant=american},
+ sorttitle = {Computers & Typesetting B},
+ indexsorttitle= {TeX: The Program},
+ shorttitle = {\TeX},
+ annotation = {The second volume of a five-volume book. Note the
+ \texttt{sorttitle} field. Also note the
+ \texttt{indexsorttitle} field},
+}
+
+@book{knuth:ct:c,
+ author = {Knuth, Donald E.},
+ title = {The {METAFONTbook}},
+ date = 1986,
+ maintitle = {Computers \& Typesetting},
+ volume = {C},
+ publisher = {Addison-Wesley},
+ location = {Reading, Mass.},
+ langid = {english},
+ langidopts = {variant=american},
+ sorttitle = {Computers & Typesetting C},
+ indextitle = {METAFONTbook, The},
+ shorttitle = {METAFONTbook},
+ annotation = {The third volume of a five-volume book. Note the
+ \texttt{sorttitle} field as well as the
+ \texttt{indextitle} field},
+}
+
+@book{knuth:ct:d,
+ author = {Knuth, Donald E.},
+ title = {{METAFONT}: The Program},
+ date = 1986,
+ maintitle = {Computers \& Typesetting},
+ volume = {D},
+ publisher = {Addison-Wesley},
+ location = {Reading, Mass.},
+ langid = {english},
+ langidopts = {variant=american},
+ sorttitle = {Computers & Typesetting D},
+ shorttitle = {METAFONT},
+ annotation = {The fourth volume of a five-volume book. Note the
+ \texttt{sorttitle} field},
+}
+
+@book{knuth:ct:e,
+ author = {Knuth, Donald E.},
+ title = {{Computer Modern} Typefaces},
+ date = 1986,
+ maintitle = {Computers \& Typesetting},
+ volume = {E},
+ publisher = {Addison-Wesley},
+ location = {Reading, Mass.},
+ langid = {english},
+ langidopts = {variant=american},
+ sorttitle = {Computers & Typesetting E},
+ annotation = {The fifth volume of a five-volume book. Note the
+ \texttt{sorttitle} field},
+}
+
+@mvbook{knuth:ct:related,
+ author = {Knuth, Donald E.},
+ title = {Computers \& Typesetting},
+ date = {1984/1986},
+ volumes = 5,
+ publisher = {Addison-Wesley},
+ location = {Reading, Mass.},
+ langid = {english},
+ langidopts = {variant=american},
+ sorttitle = {Computers & Typesetting},
+ indexsorttitle= {Computers & Typesetting},
+ related = {knuth:ct:a,knuth:ct:b,knuth:ct:c,knuth:ct:d,knuth:ct:e},
+ relatedtype = {multivolume},
+ annotation = {A five-volume book cited as a whole and related to its
+ individual volumes. Note the \texttt{related} and
+ \texttt{relatedtype} fields},
+}
+
+@book{kullback,
+ author = {Kullback, Solomon},
+ title = {Information Theory and Statistics},
+ year = 1959,
+ publisher = {John Wiley \& Sons},
+ location = {New York},
+ langid = {english},
+ langidopts = {variant=american},
+}
+
+@book{kullback:reprint,
+ author = {Kullback, Solomon},
+ title = {Information Theory and Statistics},
+ year = 1997,
+ publisher = {Dover Publications},
+ location = {New York},
+ origyear = 1959,
+ origpublisher= {John Wiley \& Sons},
+ langid = {english},
+ langidopts = {variant=american},
+ annotation = {A reprint of the \texttt{kullback} entry. Note the format of
+ \texttt{origyear} and \texttt{origpublisher}. These fields are
+ not used by the standard bibliography styles},
+}
+
+@book{kullback:related,
+ author = {Kullback, Solomon},
+ title = {Information Theory and Statistics},
+ year = 1997,
+ publisher = {Dover Publications},
+ location = {New York},
+ langid = {english},
+ langidopts = {variant=american},
+ related = {kullback},
+ relatedtype = {origpubin},
+ annotation = {A reprint of the \texttt{kullback} entry. Note the format of
+ the \texttt{related} and \texttt{relatedtype} fields},
+}
+
+@book{malinowski,
+ author = {Malinowski, Bronis{\l}aw},
+ title = {Argonauts of the {Western Pacific}},
+ date = 1972,
+ edition = 8,
+ publisher = {Routledge {and} Kegan Paul},
+ location = {London},
+ langid = {english},
+ langidopts = {variant=british},
+ subtitle = {An account of native enterprise and adventure in the
+ Archipelagoes of {Melanesian New Guinea}},
+ shorttitle = {Argonauts},
+ annotation = {This is a \texttt{book} entry. Note the format of the
+ \texttt{publisher} and \texttt{edition} fields as well as the
+ \texttt{subtitle} field},
+}
+
+@book{maron,
+ author = {Maron, Monika},
+ title = {Animal Triste},
+ date = 2000,
+ translator = {Brigitte Goldstein},
+ origlanguage = {german},
+ publisher = {University of Nebraska Press},
+ location = {Lincoln},
+ langid = {english},
+ langidopts = {variant=american},
+ shorttitle = {Animal Triste},
+ annotation = {An English translation of a German novel with a French title.
+ In other words: a \texttt{book} entry with a
+ \texttt{translator} field. Note the \texttt{origlanguage}
+ field which is concatenated with the \texttt{translator}},
+}
+
+@book{massa,
+ author = {Werner Massa},
+ title = {Crystal structure determination},
+ date = 2004,
+ edition = 2,
+ publisher = {Spinger},
+ location = {Berlin},
+ langid = {english},
+ langidopts = {variant=british},
+ annotation = {A \texttt{book} entry with an \texttt{edition} field},
+}
+
+@article{moore,
+ author = {Moore, Gordon E.},
+ title = {Cramming more components onto integrated circuits},
+ journaltitle = {Electronics},
+ year = 1965,
+ volume = 38,
+ number = 8,
+ pages = {114-117},
+ langid = {english},
+ langidopts = {variant=american},
+}
+
+@article{moore:related,
+ author = {Moore, Gordon E.},
+ title = {Cramming more components onto integrated circuits},
+ journaltitle = {Proceedings of the {IEEE}},
+ year = 1998,
+ volume = 86,
+ number = 1,
+ pages = {82-85},
+ langid = {english},
+ langidopts = {variant=american},
+ related = {moore},
+ relatedtype = {reprintfrom},
+ annotation = {A reprint of Moore's law. Note the \texttt{related} and
+ \texttt{relatedtype} fields},
+}
+
+@mvbook{nietzsche:ksa,
+ author = {Nietzsche, Friedrich},
+ title = {S{\"a}mtliche Werke},
+ date = 1988,
+ editor = {Colli, Giorgio and Montinari, Mazzino},
+ edition = 2,
+ volumes = 15,
+ publisher = dtv # { and Walter de Gruyter},
+ location = {M{\"u}nchen and Berlin and New York},
+ langid = {german},
+ sorttitle = {Werke-00-000},
+ indexsorttitle= {Samtliche Werke},
+ subtitle = {Kritische Studienausgabe},
+ annotation = {The critical edition of Nietzsche's works. This is a
+ \texttt{mvbook} entry referring to a 15-volume work as a
+ whole. Note the \texttt{volumes} field and the format of the
+ \texttt{publisher} and \texttt{location} fields in the
+ database file. Also note the \texttt{sorttitle} and
+ field which is used to fine-tune the
+ sorting order of the bibliography. We want this item listed
+ first in the bibliography},
+}
+
+@book{nietzsche:ksa1,
+ author = {Nietzsche, Friedrich},
+ title = {Die Geburt der Trag{\"o}die. Unzeitgem{\"a}{\ss}e
+ Betrachtungen I--IV. Nachgelassene Schriften 1870--1973},
+ date = 1988,
+ editor = {Colli, Giorgio and Montinari, Mazzino},
+ maintitle = {S{\"a}mtliche Werke},
+ mainsubtitle = {Kritische Studienausgabe},
+ volume = 1,
+ edition = 2,
+ publisher = dtv # { and Walter de Gruyter},
+ location = {M{\"u}nchen and Berlin and New York},
+ langid = {german},
+ sorttitle = {Werke-01-000},
+ indexsorttitle= {Samtliche Werke I},
+ bookauthor = {Nietzsche, Friedrich},
+ indextitle = {S{\"a}mtliche Werke I},
+ shorttitle = {S{\"a}mtliche Werke I},
+ annotation = {A single volume from the critical edition of Nietzsche's
+ works. This \texttt{book} entry explicitly refers to the first
+ volume only. Note the \texttt{title} and \texttt{maintitle}
+ fields. Also note the \texttt{sorttitle}
+ field. We want this entry to be listed after the entry
+ referring to the entire edition},
+}
+
+@book{nussbaum,
+ author = {Nussbaum, Martha},
+ title = {Aristotle's \mkbibquote{De Motu Animalium}},
+ date = 1978,
+ publisher = pup,
+ location = {Princeton},
+ keywords = {secondary},
+ langid = {english},
+ langidopts = {variant=american},
+ sorttitle = {Aristotle's De Motu Animalium},
+ indexsorttitle= {Aristotle's De Motu Animalium},
+ annotation = {A \texttt{book} entry. Note the \texttt{sorttitle} and
+ \texttt{indexsorttitle} fields and the markup of the quotes in
+ the database file},
+}
+
+@book{piccato,
+ author = {Piccato, Pablo},
+ title = {City of Suspects},
+ date = 2001,
+ publisher = {Duke University Press},
+ location = {Durham and London},
+ langid = {english},
+ langidopts = {variant=american},
+ subtitle = {Crime in {Mexico City}, 1900--1931},
+ shorttitle = {City of Suspects},
+ annotation = {This is a \texttt{book} entry. Note the format of the
+ \texttt{location} field in the database file},
+}
+
+@book{vangennep,
+ author = {van Gennep, Arnold},
+ title = {Les rites de passage},
+ date = 1909,
+ publisher = {Nourry},
+ location = {Paris},
+ options = {useprefix},
+ langid = {french},
+ sorttitle = {Rites de passage},
+ indextitle = {Rites de passage, Les},
+ shorttitle = {Rites de passage},
+ annotation = {A \texttt{book} entry. Note the format of the printed name and
+ compare the \texttt{useprefix} option in the \texttt{options}
+ field as well as \texttt{brandt} and \texttt{geer}},
+}
+
+@book{vangennep:trans,
+ author = {van Gennep, Arnold},
+ title = {The Rites of Passage},
+ year = 1960,
+ translator = {Vizedom, Monika B. and Caffee, Gabrielle L.},
+ language = {english},
+ origlanguage = {french},
+ publisher = {University of Chicago Press},
+ options = {useprefix},
+ indextitle = {Rites of Passage, The},
+ sorttitle = {Rites of Passage},
+ shorttitle = {Rites of Passage},
+ langid = {english},
+ langidopts = {variant=american},
+ annotation = {A translation of the \texttt{vangennep} entry. Note the
+ \texttt{translator} and \texttt{origlanguage} fields. Compare
+ with the \texttt{vangennep:related} entry.},
+}
+
+@book{vangennep:related,
+ author = {van Gennep, Arnold},
+ title = {Les rites de passage},
+ date = 1909,
+ publisher = {Nourry},
+ location = {Paris},
+ options = {useprefix},
+ langid = {french},
+ related = {vizedom:related},
+ relatedtype = {bytranslator},
+ sorttitle = {Rites de passage},
+ indextitle = {Rites de passage, Les},
+ shorttitle = {Rites de passage},
+ annotation = {A variant of the \texttt{vangennep} entry related to its
+ translation. Note the format of the \texttt{related} and
+ \texttt{relatedtype} fields},
+}
+
+@book{vizedom:related,
+ title = {The Rites of Passage},
+ year = 1960,
+ translator = {Vizedom, Monika B. and Caffee, Gabrielle L.},
+ language = {english},
+ publisher = {University of Chicago Press},
+ langid = {english},
+ langidopts = {variant=american},
+ options = {usetranslator},
+ related = {vangennep},
+ relatedtype = {translationof},
+ indextitle = {Rites of Passage, The},
+ sorttitle = {Rites of Passage},
+ shorttitle = {Rites of Passage},
+ annotation = {A translated work from \texttt{vangennep}. Note the format of
+ the \texttt{related} and \texttt{relatedtype} fields},
+}
+
+@mvbook{vazques-de-parga,
+ author = {V{\'a}zques{ de }Parga, Luis and Lacarra, Jos{\'e} Mar{\'i}a
+ and Ur{\'i}a R{\'i}u, Juan},
+ title = {Las Peregrinaciones a Santiago de Compostela},
+ date = 1993,
+ volumes = 3,
+ note = {Ed. facs. de la realizada en 1948--49},
+ publisher = {Iberdrola},
+ location = {Pamplona},
+ langid = {spanish},
+ sorttitle = {Peregrinaciones a Santiago de Compostela},
+ indextitle = {Peregrinaciones a Santiago de Compostela, Las},
+ shorttitle = {Peregrinaciones},
+ annotation = {A multivolume book cited as a whole. This is a \texttt{mvbook}
+ entry with \texttt{volumes}, \texttt{note},
+ \texttt{sorttitle}, and \texttt{indextitle} fields},
+}
+
+@book{wilde,
+ author = {Wilde, Oscar},
+ title = {The Importance of Being Earnest: A Trivial Comedy for Serious
+ People},
+ year = 1899,
+ series = {English and {American} drama of the Nineteenth Century},
+ publisher = {Leonard Smithers {and} Company},
+ eprint = {4HIWAAAAYAAJ},
+ eprinttype = {googlebooks},
+ annotation = {A \texttt{book} with \texttt{eprint} and \texttt{eprinttype}
+ fields.},
+}
+
+@book{worman,
+ author = {Worman, Nancy},
+ title = {The Cast of Character},
+ date = 2002,
+ publisher = {University of Texas Press},
+ location = {Austin},
+ langid = {english},
+ langidopts = {variant=american},
+ sorttitle = {Cast of Character},
+ indextitle = {Cast of Character, The},
+ subtitle = {Style in {Greek} Literature},
+ shorttitle = {Cast of Character},
+ annotation = {A \texttt{book} entry. Note the \texttt{sorttitle} and
+ \texttt{indextitle} fields},
+}
+
+@mvcollection{britannica,
+ editor = {Preece, Warren E.},
+ title = {The {New Encyclop{\ae}dia Britannica}},
+ date = 2003,
+ edition = 15,
+ volumes = 32,
+ publisher = {Encyclop{\ae}dia Britannica},
+ location = {Chicago, Ill.},
+ options = {useeditor=false},
+ label = {EB},
+ langid = {english},
+ langidopts = {variant=british},
+ sorttitle = {Encyclop{\ae}dia Britannica},
+ indextitle = {{Encyclop{\ae}dia Britannica}, The {New}},
+ shorttitle = {{Encyclop{\ae}dia Britannica}},
+ annotation = {This is a \texttt{mvcollection} entry for an encyclopedia. Note
+ the \texttt{useeditor} option in the \texttt{options} field as
+ well as the \texttt{sorttitle} field. We want this entry to be
+ cited and alphabetized by title even though there is an
+ editor. In addition to that, we want the title to be
+ alphabetized under \enquote*{E} rather than \enquote*{T}. Also
+ note the \texttt{label} field which is provided for
+ author-year citation styles},
+}
+
+@collection{gaonkar,
+ editor = {Gaonkar, Dilip Parameshwar},
+ title = {Alternative Modernities},
+ date = 2001,
+ publisher = {Duke University Press},
+ location = {Durham and London},
+ isbn = {0-822-32714-7},
+ langid = {english},
+ langidopts = {variant=american},
+ annotation = {This is a \texttt{collection} entry. Note the format of the
+ \texttt{location} field in the database file as well as the
+ \texttt{isbn} field},
+}
+
+@incollection{gaonkar:in,
+ author = {Gaonkar, Dilip Parameshwar},
+ editor = {Gaonkar, Dilip Parameshwar},
+ title = {On Alternative Modernities},
+ date = 2001,
+ booktitle = {Alternative Modernities},
+ publisher = {Duke University Press},
+ location = {Durham and London},
+ isbn = {0-822-32714-7},
+ pages = {1-23},
+}
+
+@mvcollection{jaffe,
+ editor = {Jaff{\'e}, Philipp},
+ title = {Regesta Pontificum Romanorum ab condita ecclesia ad annum post
+ Christum natum \textsc{mcxcviii}},
+ date = {1885/1888},
+ editora = {Loewenfeld, Samuel and Kaltenbrunner, Ferdinand and Ewald,
+ Paul},
+ edition = 2,
+ volumes = 2,
+ location = {Leipzig},
+ langid = {latin},
+ editoratype = {redactor},
+ indextitle = {Regesta Pontificum Romanorum},
+ shorttitle = {Regesta Pontificum Romanorum},
+ annotation = {A \texttt{mvcollection} entry with \texttt{edition} and
+ \texttt{volumes} fields. Note the \texttt{editora} and
+ \texttt{editoratype} fields},
+}
+
+% booktitle and booksubtitle are only needed for BibTeX's less sophisticated
+% inheritance set-up to make sure westfahl:space shows correctly.
+% With Biber they are not needed.
+@collection{westfahl:frontier,
+ editor = {Westfahl, Gary},
+ title = {Space and Beyond},
+ date = 2000,
+ subtitle = {The Frontier Theme in Science Fiction},
+ publisher = {Greenwood},
+ location = {Westport, Conn. and London},
+ langid = {english},
+ langidopts = {variant=american},
+ booktitle = {Space and Beyond},
+ booksubtitle = {The Frontier Theme in Science Fiction},
+ annotation = {This is a \texttt{collection} entry. Note the format of the
+ \texttt{location} field as well as the \texttt{subtitle}
+ field},
+}
+
+@inbook{kant:kpv,
+ title = {Kritik der praktischen Vernunft},
+ date = 1968,
+ author = {Kant, Immanuel},
+ booktitle = {Kritik der praktischen Vernunft. Kritik der Urtheilskraft},
+ bookauthor = {Kant, Immanuel},
+ maintitle = {Kants Werke. Akademie Textausgabe},
+ volume = 5,
+ publisher = {Walter de Gruyter},
+ location = {Berlin},
+ pages = {1-163},
+ shorthand = {KpV},
+ langid = {german},
+ shorttitle = {Kritik der praktischen Vernunft},
+ annotation = {An edition of Kant's \emph{Collected Works}, volume five. This
+ is an \texttt{inbook} entry which explicitly refers to the
+ \emph{Critique of Practical Reason} only, not to the entire
+ fifth volume. Note the \texttt{author} and \texttt{bookauthor}
+ fields in the database file. By default, the
+ \texttt{bookauthor} is omitted if the values of the
+ \texttt{author} and \texttt{bookauthor} fields are identical},
+}
+
+@inbook{kant:ku,
+ title = {Kritik der Urtheilskraft},
+ date = 1968,
+ author = {Kant, Immanuel},
+ booktitle = {Kritik der praktischen Vernunft. Kritik der Urtheilskraft},
+ bookauthor = {Kant, Immanuel},
+ maintitle = {Kants Werke. Akademie Textausgabe},
+ volume = 5,
+ publisher = {Walter de Gruyter},
+ location = {Berlin},
+ pages = {165-485},
+ shorthand = {KU},
+ langid = {german},
+ annotation = {An edition of Kant's \emph{Collected Works}, volume five. This
+ is an \texttt{inbook} entry which explicitly refers to the
+ \emph{Critique of Judgment} only, not to the entire fifth
+ volume},
+}
+
+@inbook{nietzsche:historie,
+ title = {Unzeitgem{\"a}sse Betrachtungen. Zweites St{\"u}ck},
+ date = 1988,
+ author = {Nietzsche, Friedrich},
+ booktitle = {Die Geburt der Trag{\"o}die. Unzeitgem{\"a}{\ss}e
+ Betrachtungen I--IV. Nachgelassene Schriften 1870--1973},
+ bookauthor = {Nietzsche, Friedrich},
+ editor = {Colli, Giorgio and Montinari, Mazzino},
+ subtitle = {Vom Nutzen und Nachtheil der Historie f{\"u}r das Leben},
+ maintitle = {S{\"a}mtliche Werke},
+ mainsubtitle = {Kritische Studienausgabe},
+ volume = 1,
+ publisher = dtv # { and Walter de Gruyter},
+ location = {M{\"u}nchen and Berlin and New York},
+ pages = {243-334},
+ langid = {german},
+ sorttitle = {Werke-01-243},
+ indexsorttitle= {Vom Nutzen und Nachtheil der Historie fur das Leben},
+ indextitle = {Vom Nutzen und Nachtheil der Historie f{\"u}r das Leben},
+ shorttitle = {Vom Nutzen und Nachtheil der Historie},
+ annotation = {A single essay from the critical edition of Nietzsche's works.
+ This \texttt{inbook} entry explicitly refers to an essay found
+ in the first volume. Note the \texttt{title},
+ \texttt{booktitle}, and \texttt{maintitle} fields. Also note
+ the \texttt{sorttitle} field. We want
+ this entry to be listed after the entry referring to the
+ entire first volume},
+}
+
+@incollection{brandt,
+ author = {von Brandt, Ahasver and Erich Hoffmann},
+ editor = {Ferdinand Seibt},
+ title = {Die nordischen L{\"a}nder von der Mitte des 11.~Jahrhunderts
+ bis 1448},
+ date = 1987,
+ booktitle = {Europa im Hoch- und Sp{\"a}tmittelalter},
+ series = {Handbuch der europ{\"a}ischen Geschichte},
+ number = 2,
+ publisher = {Klett-Cotta},
+ location = {Stuttgart},
+ pages = {884-917},
+ options = {useprefix=false},
+ langid = {german},
+ indexsorttitle= {Nordischen Lander von der Mitte des 11. Jahrhunderts bis
+ 1448},
+ indextitle = {Nordischen L{\"a}nder von der Mitte des 11.~Jahrhunderts bis
+ 1448, Die},
+ shorttitle = {Die nordischen L{\"a}nder},
+ annotation = {An \texttt{incollection} entry with a \texttt{series} and a
+ \texttt{number}. Note the format of the printed name and
+ compare the \texttt{useprefix} option in the \texttt{options}
+ field as well as \texttt{vangennep}. Also note the
+ \texttt{indextitle, and \texttt{indexsorttitle} fields}},
+}
+
+@incollection{hyman,
+ author = {Arthur Hyman},
+ editor = {O'Meara, Dominic J.},
+ title = {Aristotle's Theory of the Intellect and its Interpretation by
+ {Averroes}},
+ date = 1981,
+ booktitle = {Studies in {Aristotle}},
+ series = {Studies in Philosophy and the History of Philosophy},
+ number = 9,
+ publisher = {The Catholic University of America Press},
+ location = {Washington, D.C.},
+ pages = {161-191},
+ keywords = {secondary},
+ langid = {english},
+ langidopts = {variant=american},
+ indextitle = {Aristotle's Theory of the Intellect},
+ shorttitle = {Aristotle's Theory of the Intellect},
+ annotation = {An \texttt{incollection} entry with a \texttt{series} and
+ \texttt{number} field},
+}
+
+@incollection{pines,
+ author = {Pines, Shlomo},
+ editor = {Twersky, Isadore},
+ title = {The Limitations of Human Knowledge According to {Al-Farabi}, {ibn
+ Bajja}, and {Maimonides}},
+ date = 1979,
+ booktitle = {Studies in Medieval {Jewish} History and Literature},
+ publisher = hup,
+ location = {Cambridge, Mass.},
+ pages = {82-109},
+ keywords = {secondary},
+ langid = {english},
+ langidopts = {variant=american},
+ indextitle = {Limitations of Human Knowledge According to {Al-Farabi}, {ibn
+ Bajja}, and {Maimonides}, The},
+ shorttitle = {Limitations of Human Knowledge},
+ annotation = {A typical \texttt{incollection} entry. Note the
+ \texttt{indextitle} field},
+}
+
+@inproceedings{moraux,
+ author = {Moraux, Paul},
+ editor = {Lloyd, G. E. R. and Owen, G. E. L.},
+ title = {Le \emph{De Anima} dans la tradition gr{\`e}cque},
+ date = 1979,
+ booktitle = {Aristotle on Mind and the Senses},
+ subtitle = {Quelques aspects de l'interpretation du trait{\'e}, de
+ Theophraste {\`a} Themistius},
+ booktitleaddon= {Proceedings of the Seventh Symposium Aristotelicum},
+ eventdate = 1975,
+ publisher = cup,
+ location = {Cambridge},
+ pages = {281-324},
+ keywords = {secondary},
+ langid = {french},
+ indexsorttitle= {De Anima dans la tradition grecque},
+ indextitle = {\emph{De Anima} dans la tradition gr{\`e}cque, Le},
+ shorttitle = {\emph{De Anima} dans la tradition gr{\`e}cque},
+ annotation = {This is a typical \texttt{inproceedings} entry. Note the
+ \texttt{booksubtitle}, \texttt{shorttitle},
+ \texttt{indextitle}, and \texttt{indexsorttitle} fields. Also
+ note the \texttt{eventdate} field.},
+}
+
+@inproceedings{salam,
+ author = {Salam, Abdus},
+ editor = {Svartholm, Nils},
+ title = {Weak and Electromagnetic Interactions},
+ date = 1968,
+ booktitle = {Elementary particle theory},
+ booksubtitle = {Relativistic groups and analyticity},
+ booktitleaddon= {Proceedings of the {Eighth Nobel Symposium}},
+ eventdate = {1968-05-19/1968-05-25},
+ venue = {Aspen{\"a}sgarden, Lerum},
+ publisher = {Almquist \& Wiksell},
+ location = {Stockholm},
+ pages = {367-377},
+}
+
+@manual{cms,
+ title = {The {Chicago} Manual of Style},
+ date = 2003,
+ subtitle = {The Essential Guide for Writers, Editors, and Publishers},
+ edition = 15,
+ publisher = {University of Chicago Press},
+ location = {Chicago, Ill.},
+ isbn = {0-226-10403-6},
+ label = {CMS},
+ langid = {english},
+ langidopts = {variant=american},
+ sorttitle = {Chicago Manual of Style},
+ indextitle = {Chicago Manual of Style, The},
+ shorttitle = {Chicago Manual of Style},
+ annotation = {This is a \texttt{manual} entry without an \texttt{author} or
+ \texttt{editor}. Note the \texttt{label} field in the database
+ file which is provided for author-year citation styles. Also
+ note the \texttt{sorttitle} and \texttt{indextitle} fields. By
+ default, all entries without an \texttt{author} or
+ \texttt{editor} are alphabetized by \texttt{title} but we want
+ this entry to be alphabetized under \enquote*{C} rather than
+ \enquote*{T}. There's also an \texttt{isbn} field},
+}
+
+@online{baez/online,
+ author = {Baez, John C. and Lauda, Aaron D.},
+ title = {Higher-Dimensional Algebra {V}: 2-Groups},
+ date = {2004-10-27},
+ version = 3,
+ langid = {english},
+ langidopts = {variant=american},
+ eprinttype = {arxiv},
+ eprint = {math/0307200v3},
+ annotation = {An \texttt{online} reference from arXiv. Note the
+ \texttt{eprint} and \texttt{eprinttype} fields. Compare
+ \texttt{baez\slash article} which is the same item given as an
+ \texttt{article} entry with eprint information},
+}
+
+@online{ctan,
+ title = {CTAN},
+ date = 2006,
+ url = {http://www.ctan.org},
+ subtitle = {The {Comprehensive TeX Archive Network}},
+ urldate = {2006-10-01},
+ label = {CTAN},
+ langid = {english},
+ langidopts = {variant=american},
+ annotation = {This is an \texttt{online} entry. The \textsc{url}, which is
+ given in the \texttt{url} field, is transformed into a
+ clickable link if \texttt{hyperref} support has been
+ enabled. Note the format of the \texttt{urldate} field
+ (\texttt{yyyy-mm-dd}) in the database file. Also note the
+ \texttt{label} field which may be used as a fallback by
+ citation styles which need an \texttt{author} and\slash or a
+ \texttt{year}},
+}
+
+@online{itzhaki,
+ author = {Itzhaki, Nissan},
+ title = {Some remarks on {'t Hooft's} {S}-matrix for black holes},
+ date = {1996-03-11},
+ version = 1,
+ langid = {english},
+ langidopts = {variant=american},
+ eprinttype = {arxiv},
+ eprint = {hep-th/9603067},
+ annotation = {An \texttt{online} reference from arXiv. Note the
+ \texttt{eprint} and \texttt{eprinttype} fields. Also note that
+ the arXiv reference is transformed into a clickable link if
+ \texttt{hyperref} support has been enabled},
+ abstract = {We discuss the limitations of 't Hooft's proposal for the
+ black hole S-matrix. We find that the validity of the S-matrix
+ implies violation of the semi-classical approximation at
+ scales large compared to the Planck scale. We also show that
+ the effect of the centrifugal barrier on the S-matrix is
+ crucial even for large transverse distances.},
+}
+
+@online{markey,
+ author = {Markey, Nicolas},
+ title = {Tame the {BeaST}},
+ date = {2005-10-16},
+ url = {http://mirror.ctan.org/info/bibtex/tamethebeast/ttb_en.pdf},
+ subtitle = {The {B} to {X} of {BibTeX}},
+ version = {1.3},
+ urldate = {2006-10-01},
+ langid = {english},
+ langidopts = {variant=american},
+ sorttitle = {Tame the Beast},
+ annotation = {An \texttt{online} entry for a tutorial. Note the format of
+ the \texttt{date} field (\texttt{yyyy-mm-dd}) in the database
+ file.},
+}
+
+@online{wassenberg,
+ author = {Wassenberg, Jan and Sanders, Peter},
+ title = {Faster Radix Sort via Virtual Memory and Write-Combining},
+ date = {2010-08-17},
+ version = 1,
+ langid = {english},
+ langidopts = {variant=american},
+ eprinttype = {arxiv},
+ eprintclass = {cs.DS},
+ eprint = {1008.2849v1},
+ annotation = {A recent \texttt{online} reference from arXiv using the new
+ (April 2007 onward) identifier format. Note the
+ \texttt{eprint}, \texttt{eprinttype}, and \texttt{eprintclass}
+ fields. Also note that the arXiv reference is transformed into
+ a clickable link if \texttt{hyperref} support has been
+ enabled},
+ abstract = {Sorting algorithms are the deciding factor for the performance
+ of common operations such as removal of duplicates or database
+ sort-merge joins. This work focuses on 32-bit integer keys,
+ optionally paired with a 32-bit value. We present a fast radix
+ sorting algorithm that builds upon a microarchitecture-aware
+ variant of counting sort},
+}
+
+@patent{almendro,
+ author = {Almendro, Jos{\'e} L. and Mart{\'i}n, Jacinto and S{\'a}nchez,
+ Alberto and Nozal, Fernando},
+ title = {Elektromagnetisches Signalhorn},
+ number = {EU-29702195U},
+ date = 1998,
+ location = {countryfr and countryuk and countryde},
+ langid = {german},
+ annotation = {This is a \texttt{patent} entry with a \texttt{location}
+ field. The number is given in the \texttt{number} field. Note
+ the format of the \texttt{location} field in the database
+ file. Compare \texttt{laufenberg}, \texttt{sorace}, and
+ \texttt{kowalik}},
+}
+
+@patent{kowalik,
+ author = {Kowalik, F. and Isard, M.},
+ title = {Estimateur d'un d{\'e}faut de fonctionnement d'un modulateur
+ en quadrature et {\'e}tage de modulation l'utilisant},
+ number = 9500261,
+ date = {1995-01-11},
+ type = {patreqfr},
+ langid = {french},
+ indextitle = {Estimateur d'un d{\'e}faut de fonctionnement},
+ annotation = {This is a \texttt{patent} entry for a French patent request
+ with a full date. The number is given in the \texttt{number}
+ field. Note the format of the \texttt{type} and \texttt{date}
+ fields in the database file. Compare \texttt{almendro},
+ \texttt{laufenberg}, and \texttt{sorace}},
+}
+
+@patent{laufenberg,
+ author = {Laufenberg, Xaver and Eynius, Dominique and Suelzle, Helmut
+ and Usbeck, Stephan and Spaeth, Matthias and Neuser-Hoffmann,
+ Miriam and Myrzik, Christian and Schmid, Manfred and Nietfeld,
+ Franz and Thiel, Alexander and Braun, Harald and Ebner,
+ Norbert},
+ title = {Elektrische Einrichtung und Betriebsverfahren},
+ number = 1700367,
+ date = {2006-09-13},
+ holder = {{Robert Bosch GmbH} and {Daimler Chrysler AG} and {Bayerische
+ Motoren Werke AG}},
+ type = {patenteu},
+ langid = {german},
+ annotation = {This is a \texttt{patent} entry with a \texttt{holder} field.
+ Note the format of the \texttt{type} and \texttt{location}
+ fields in the database file. Compare \texttt{almendro},
+ \texttt{sorace}, and \texttt{kowalik}},
+ abstract = {The invention relates to an electric device comprising a
+ generator, in particular for use in the vehicle electric
+ system of a motor vehicle and a controller for controlling the
+ generator voltage. The device is equipped with a control zone,
+ in which the voltage is controlled and zones, in which the
+ torque is controlled. The invention also relates to methods
+ for operating a device of this type.},
+ file = {http://v3.espacenet.com/textdoc?IDX=EP1700367},
+}
+
+@patent{sorace,
+ author = {Sorace, Ronald E. and Reinhardt, Victor S. and Vaughn, Steven
+ A.},
+ title = {High-Speed Digital-to-{RF} Converter},
+ number = 5668842,
+ date = {1997-09-16},
+ holder = {{Hughes Aircraft Company}},
+ type = {patentus},
+ langid = {english},
+ langidopts = {variant=american},
+ annotation = {This is a \texttt{patent} entry with a \texttt{holder} field.
+ Note the format of the \texttt{type} and \texttt{date} fields
+ in the database file. Compare \texttt{almendro},
+ \texttt{laufenberg}, and \texttt{kowalik}},
+}
+
+@periodical{jcg,
+ title = {Computers and Graphics},
+ year = 2011,
+ issuetitle = {Semantic {3D} Media and Content},
+ volume = 35,
+ number = 4,
+ issn = {0097-8493},
+ annotation = {This is a \texttt{periodical} entry with an \texttt{issn}
+ field.},
+}
+
+@report{chiu,
+ author = {Chiu, Willy W. and Chow, We Min},
+ title = {A Hybrid Hierarchical Model of a {Multiple Virtual Storage}
+ ({MVS}) Operating System},
+ type = {resreport},
+ institution = {IBM},
+ date = 1978,
+ number = {RC-6947},
+ langid = {english},
+ langidopts = {variant=american},
+ sorttitle = {Hybrid Hierarchical Model of a Multiple Virtual Storage (MVS)
+ Operating System},
+ indextitle = {Hybrid Hierarchical Model, A},
+ annotation = {This is a \texttt{report} entry for a research report. Note
+ the format of the \texttt{type} field in the database file
+ which uses a localization key. The number of the report is
+ given in the \texttt{number} field. Also note the
+ \texttt{sorttitle} and \texttt{indextitle} fields},
+}
+
+@report{padhye,
+ author = {Padhye, Jitendra and Firoiu, Victor and Towsley, Don},
+ title = {A Stochastic Model of {TCP Reno} Congestion Avoidance and
+ Control},
+ type = {techreport},
+ institution = {University of Massachusetts},
+ date = 1999,
+ number = {99-02},
+ location = {Amherst, Mass.},
+ langid = {english},
+ langidopts = {variant=american},
+ sorttitle = {A Stochastic Model of TCP Reno Congestion Avoidance and
+ Control},
+ indextitle = {Stochastic Model of {TCP Reno} Congestion Avoidance and Control,
+ A},
+ annotation = {This is a \texttt{report} entry for a technical report. Note
+ the format of the \texttt{type} field in the database file
+ which uses a localization key. The number of the report is
+ given in the \texttt{number} field. Also note the
+ \texttt{sorttitle} and \texttt{indextitle} fields},
+ abstract = {The steady state performance of a bulk transfer TCP flow
+ (i.e. a flow with a large amount of data to send, such as FTP
+ transfers) may be characterized by three quantities. The first
+ is the send rate, which is the amount of data sent by the
+ sender in unit time. The second is the throughput, which is
+ the amount of data received by the receiver in unit time. Note
+ that the throughput will always be less than or equal to the
+ send rate due to losses. Finally, the number of non-duplicate
+ packets received by the receiver in unit time gives us the
+ goodput of the connection. The goodput is always less than or
+ equal to the throughput, since the receiver may receive two
+ copies of the same packet due to retransmissions by the
+ sender. In a previous paper, we presented a simple model for
+ predicting the steady state send rate of a bulk transfer TCP
+ flow as a function of loss rate and round trip time. In this
+ paper, we extend that work in two ways. First, we analyze the
+ performance of bulk transfer TCP flows using more precise,
+ stochastic analysis. Second, we build upon the previous
+ analysis to provide both an approximate formula as well as a
+ more accurate stochastic model for the steady state throughput
+ of a bulk transfer TCP flow.},
+ file = {ftp://gaia.cs.umass.edu/pub/Padhey99-markov.ps},
+}
+
+@thesis{geer,
+ author = {de Geer, Ingrid},
+ title = {Earl, Saint, Bishop, Skald~-- and Music},
+ type = {phdthesis},
+ institution = {Uppsala Universitet},
+ date = 1985,
+ subtitle = {The {Orkney Earldom} of the Twelfth Century. {A} Musicological
+ Study},
+ location = {Uppsala},
+ options = {useprefix=false},
+ langid = {english},
+ langidopts = {variant=british},
+ annotation = {This is a typical \texttt{thesis} entry for a PhD thesis. Note
+ the \texttt{type} field in the database file which uses a
+ localization key. Also note the format of the printed name and
+ compare the \texttt{useprefix} option in the \texttt{options}
+ field as well as \texttt{vangennep}},
+}
+
+@thesis{loh,
+ author = {Loh, Nin C.},
+ title = {High-Resolution Micromachined Interferometric Accelerometer},
+ type = {mathesis},
+ institution = {Massachusetts Institute of Technology},
+ date = 1992,
+ location = {Cambridge, Mass.},
+ langid = {english},
+ langidopts = {variant=american},
+ annotation = {This is a typical \texttt{thesis} entry for an MA thesis. Note
+ the \texttt{type} field in the database file which uses a
+ localization key},
+}
diff --git a/macros/latex/contrib/biblatex-ms/bibtex/bst/biblatex-ms.bst b/macros/latex/contrib/biblatex-ms/bibtex/bst/biblatex-ms.bst
new file mode 100644
index 0000000000..3390dace61
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/bibtex/bst/biblatex-ms.bst
@@ -0,0 +1,2831 @@
+% Copyright (c) 2006-2011 Philipp Lehman.
+% 2012-2018 Philip Kime, Audrey Boruvka, Joseph Wright
+%
+% Permission is granted to copy, distribute and/or modify this
+% software under the terms of the LaTeX Project Public License
+% (LPPL), version 1.3c.
+%
+% This software is provided 'as is', without warranty of any kind,
+% either expressed or implied, including, but not limited to, the
+% implied warranties of merchantability and fitness for a
+% particular purpose.
+
+% -------------------------------------------------------------------
+% Initialization
+% -------------------------------------------------------------------
+
+ENTRY {
+ % special fields
+ fakeset
+ entryset
+ entrysubtype
+ execute
+ hyphenation
+ keywords
+ label
+ langid
+ langidopts
+ options
+ presort
+ shorthand
+ sortkey
+ sortname
+ sorttitle
+ sortyear
+ xref
+ % data fields
+ abstract
+ addendum
+ address
+ afterword
+ annotation
+ annote
+ annotator
+ author
+ authortype
+ bookauthor
+ booksubtitle
+ booktitle
+ booktitleaddon
+ chapter
+ commentator
+ date
+ doi
+ edition
+ editor
+ editora
+ editorb
+ editorc
+ editortype
+ editoratype
+ editorbtype
+ editorctype
+ eid
+ eprint
+ eprintclass
+ eprinttype
+ eventdate
+ eventtitle
+ eventtitleaddon
+ file
+ foreword
+ gender
+ howpublished
+ indexsorttitle
+ indextitle
+ institution
+ introduction
+ isan
+ isbn
+ ismn
+ isrn
+ issn
+ issue
+ issuetitle
+ issuesubtitle
+ iswc
+ journal
+ journaltitle
+ journalsubtitle
+ language
+ library
+ location
+ bookpagination
+ mainsubtitle
+ maintitle
+ maintitleaddon
+ month
+ nameaddon
+ note
+ number
+ organization
+ origlanguage
+ origlocation
+ origpublisher
+ origtitle
+ origdate
+ pages
+ pagetotal
+ pagination
+ part
+ pdf
+ pubstate
+ reprinttitle
+ holder
+ publisher
+ school
+ series
+ shortauthor
+ shorteditor
+ shorthandintro
+ shortjournal
+ shortseries
+ shorttitle
+ subtitle
+ title
+ titleaddon
+ translator
+ type
+ url
+ urldate
+ venue
+ version
+ volume
+ volumes
+ year
+ % aliases
+ archiveprefix
+ primaryclass
+ % custom fields
+ namea
+ nameb
+ namec
+ nameatype
+ namebtype
+ namectype
+ lista
+ listb
+ listc
+ listd
+ liste
+ listf
+ usera
+ userb
+ userc
+ userd
+ usere
+ userf
+ verba
+ verbb
+ verbc
+ }
+ { skipbib skiplos skiplab
+ useauthor useeditor usetranslator useprefix
+ singletitle }
+ { entryoptions labelhash namehash fullhash
+ dateyear dateendyear extradate labelalpha extraalpha label.name label.year
+ sortinit sortkey.nosort sortkey.name sortkey.year
+ sortkey.title sortkey.alpha sort.year sort.alph
+ warningmsg }
+
+INTEGERS { ctrl.debug ctrl.bibtex8 ctrl.maxline ctrl.sorting ctrl.cssort
+ ctrl.maxcitenames ctrl.mincitenames
+ ctrl.maxsortnames ctrl.minsortnames
+ ctrl.nohashothers ctrl.nosortothers
+ ctrl.maxalphanames ctrl.minalphanames
+ ctrl.useauthor ctrl.useeditor ctrl.usetranslator
+ ctrl.useprefix ctrl.labelalpha ctrl.singletitle
+ ctrl.labeldate citecount
+ tempctra tempctrb tempctrc resvctra resvctrb resvctrc
+ last.extra.num }
+
+STRINGS { ctrl.alphaothers ctrl.sortalphaothers ctrl.sortstr
+ templist tempstrga tempstrgb resvstrga resvstrgb resvstrgc
+ last.name last.hash last.year last.extra }
+
+FUNCTION {initialize} {
+ "$Revision: 4.0 $"
+ #12 entry.max$ substring$
+ #-3 entry.max$ substring$
+ "Biblatex version: " swap$ * top$
+ #0 'ctrl.debug :=
+ #0 'ctrl.labelalpha :=
+ #0 'ctrl.labeldate :=
+ #0 'ctrl.singletitle :=
+ #0 'ctrl.sorting :=
+ #1 'ctrl.useauthor :=
+ #1 'ctrl.useeditor :=
+ #0 'ctrl.usetranslator :=
+ #0 'ctrl.useprefix :=
+ #99 'ctrl.maxcitenames :=
+ #1 'ctrl.mincitenames :=
+ #99 'ctrl.maxsortnames :=
+ #1 'ctrl.minsortnames :=
+ #0 'ctrl.nohashothers :=
+ #0 'ctrl.nosortothers :=
+ #1 'ctrl.minalphanames :=
+ #3 'ctrl.maxalphanames :=
+ #79 'ctrl.maxline :=
+ "+" 'ctrl.alphaothers :=
+ " " 'ctrl.sortalphaothers :=
+ "nty" 'ctrl.sortstr :=
+}
+
+% -------------------------------------------------------------------
+% Strings
+% -------------------------------------------------------------------
+
+MACRO {jan} { "01" }
+MACRO {feb} { "02" }
+MACRO {mar} { "03" }
+MACRO {apr} { "04" }
+MACRO {may} { "05" }
+MACRO {jun} { "06" }
+MACRO {jul} { "07" }
+MACRO {aug} { "08" }
+MACRO {sep} { "09" }
+MACRO {oct} { "10" }
+MACRO {nov} { "11" }
+MACRO {dec} { "12" }
+
+% -------------------------------------------------------------------
+% Generic functions
+% -------------------------------------------------------------------
+
+FUNCTION {and} {
+ 'skip$
+ { pop$ #0 }
+ if$
+}
+
+FUNCTION {or} {
+ { pop$ #1 }
+ 'skip$
+ if$
+}
+
+FUNCTION {not} {
+ { #0 }
+ { #1 }
+ if$
+}
+
+FUNCTION {ctrl:control} {
+ type$ "control" =
+}
+
+FUNCTION {ctrl:set} {
+ type$ "set" =
+}
+
+
+FUNCTION {ctrl:skiplab} {
+ ctrl:control skiplab or
+ ctrl:set % fakeset empty$ and
+ or
+}
+
+FUNCTION {ctrl:labelalpha} {
+ ctrl.labelalpha
+ ctrl:skiplab not
+ and
+}
+
+FUNCTION {ctrl:labeldate} {
+ ctrl.labeldate
+ ctrl:skiplab not
+ and
+}
+
+FUNCTION {wrap:braces} {
+ duplicate$ empty$
+ { pop$ "{}" }
+ { "{" swap$ * "}" * }
+ if$
+}
+
+FUNCTION {combine:key:value} {
+ "=" *
+ swap$
+ wrap:braces *
+ "," *
+}
+
+FUNCTION {delimiter.1} {
+ ctrl.bibtex8
+ { "0" }
+ { " " }
+ if$
+}
+
+FUNCTION {delimiter.2} {
+ ctrl.bibtex8
+ { "1" }
+ { " " }
+ if$
+}
+
+FUNCTION {delimiter.3} {
+ ctrl.bibtex8
+ { "2" }
+ { " " }
+ if$
+}
+
+FUNCTION {open.ended} {
+ "9999"
+}
+
+FUNCTION {maxline} {
+ duplicate$ empty$
+ 'skip$
+ { #1 ctrl.maxline substring$ }
+ if$
+}
+
+FUNCTION {truncate} {
+ duplicate$ empty$
+ { pop$ "" }
+ { #1 entry.max$ substring$ }
+ if$
+}
+
+FUNCTION {purify} {
+ duplicate$ empty$
+ { pop$ "" }
+ { purify$
+ ctrl.bibtex8
+ ctrl.cssort
+ and
+ 'skip$
+ { "l" change.case$ }
+ if$
+ truncate
+ }
+ if$
+}
+
+FUNCTION {normalize} {
+ duplicate$ empty$
+ { pop$ "" }
+ { ctrl.bibtex8
+ ctrl.cssort
+ and
+ 'skip$
+ { "l" change.case$ }
+ if$
+ truncate
+ }
+ if$
+}
+
+FUNCTION {enquote} {
+ "'" swap$ * "'" *
+}
+
+FUNCTION {str:length} {
+ #1 'resvctra :=
+ { duplicate$ duplicate$ #1 resvctra substring$ = not }
+ { resvctra #1 + 'resvctra := }
+ while$
+ pop$
+ resvctra
+}
+
+FUNCTION {str:replace} {
+ 'resvstrga :=
+ 'resvstrgb :=
+ 'resvstrgc :=
+ resvstrgb str:length 'resvctra :=
+ ""
+ { resvstrgc empty$ not }
+ { resvstrgc #1 resvctra substring$ resvstrgb =
+ { resvstrga *
+ resvstrgc #1 resvctra + global.max$ substring$ 'resvstrgc :=
+ }
+ { resvstrgc #1 #1 substring$ *
+ resvstrgc #2 global.max$ substring$ 'resvstrgc :=
+ }
+ if$
+ }
+ while$
+}
+
+FUNCTION {bol.to.int} {
+ "true" =
+ { #1 }
+ { #0 }
+ if$
+}
+
+FUNCTION {str.to.int} {
+ 'resvstrga :=
+ resvstrga text.length$ 'resvctra :=
+ #1 'resvctrb :=
+ #0
+ { resvctrb resvctra > not }
+ { 'resvctrc :=
+ resvstrga resvctrb #1 substring$
+ chr.to.int$ "0" chr.to.int$ -
+ #0
+ { resvctrc #0 > }
+ { resvctrc #1 - 'resvctrc :=
+ #10 +
+ }
+ while$
+ +
+ resvctrb #1 + 'resvctrb :=
+ }
+ while$
+}
+
+FUNCTION {andothers} {
+ duplicate$ num.names$ "{ff}{vv}{ll}{jj}" format.name$ "others" =
+}
+
+FUNCTION {push} {
+ duplicate$ empty$
+ { pop$ "" }
+ { truncate }
+ if$
+}
+
+FUNCTION {push:cite} {
+ cite$ empty$
+ { "Missing citation key" warning$ "" }
+ { cite$ }
+ if$
+}
+
+FUNCTION {push:presort} {
+ presort empty$
+ { "mm" }
+ { presort purify
+ #1 #2 substring$
+ "l" change.case$ }
+ if$
+}
+
+FUNCTION {push:fullname} {
+ author empty$ not
+ useauthor
+ and
+ { author }
+ { editor empty$ not
+ useeditor
+ and
+ { editor }
+ { translator empty$ not
+ usetranslator
+ and
+ { translator }
+ { "" }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {push:labelname:translator} {
+ translator empty$ not
+ usetranslator
+ and
+ { "translator" }
+ { "" }
+ if$
+}
+
+FUNCTION {push:labelname:editor} {
+ useeditor
+ { shorteditor empty$
+ { editor empty$
+ { push:labelname:translator }
+ { "editor" }
+ if$
+ }
+ { "shorteditor" }
+ if$
+ }
+ { push:labelname:translator }
+ if$
+}
+
+FUNCTION {push:shortname:translator} {
+ translator empty$ not
+ usetranslator
+ and
+ { translator }
+ { "" }
+ if$
+}
+
+FUNCTION {push:shortname:editor} {
+ useeditor
+ { shorteditor empty$
+ { editor empty$
+ { push:shortname:translator }
+ { editor }
+ if$
+ }
+ { shorteditor }
+ if$
+ }
+ { push:shortname:translator }
+ if$
+}
+
+FUNCTION {push:shortname} {
+ useauthor
+ { shortauthor empty$
+ { author empty$
+ { push:shortname:editor }
+ { author }
+ if$
+ }
+ { shortauthor }
+ if$
+ }
+ { push:shortname:editor }
+ if$
+}
+
+FUNCTION {push:sorttitle} {
+ sorttitle empty$
+ { title empty$
+ { "" }
+ { title }
+ if$
+ }
+ { sorttitle }
+ if$
+ push
+}
+
+FUNCTION {shortname:hash} {
+ 'tempctrc :=
+ 'templist :=
+ #1 'tempctra :=
+ templist num.names$ 'tempctrb :=
+ templist andothers
+ { tempctrb #1 - 'tempctrb := }
+ 'skip$
+ if$
+ tempctrc #0 =
+ { tempctrb 'tempctrc := }
+ { tempctrb tempctrc >
+ { ctrl.mincitenames 'tempctrc := }
+ { ctrl.maxcitenames 'tempctrc := }
+ if$
+ }
+ if$
+ ""
+ { tempctra tempctrc > not
+ tempctrb #0 >
+ and }
+ { templist tempctra "{vv{}}{ll{}}{ff{}}{jj{}}" format.name$ *
+ tempctra #1 + 'tempctra :=
+ tempctrb #1 - 'tempctrb :=
+ }
+ while$
+ templist andothers
+ tempctrb #0 >
+ or
+ ctrl.nohashothers not
+ and
+ { "+" * }
+ 'skip$
+ if$
+}
+
+FUNCTION {push:name:namehash} {
+ push:shortname duplicate$ empty$
+ { pop$ push:sorttitle duplicate$ empty$
+ { pop$ push:cite purify }
+ 'skip$
+ if$
+ }
+ { ctrl.maxcitenames shortname:hash }
+ if$
+}
+
+FUNCTION {push:name:fullhash} {
+ push:fullname duplicate$ empty$
+ { pop$ push:sorttitle duplicate$ empty$
+ { pop$ push:cite purify }
+ 'skip$
+ if$
+ }
+ { #0 shortname:hash }
+ if$
+}
+
+FUNCTION {push:labelname} {
+ useauthor
+ { shortauthor empty$
+ { author empty$
+ { push:labelname:editor }
+ { "author" }
+ if$
+ }
+ { "shortauthor" }
+ if$
+ }
+ { push:labelname:editor }
+ if$
+}
+
+FUNCTION {check:sortname} {
+ sortname empty$
+ 'skip$
+ { pop$ sortname }
+ if$
+}
+
+FUNCTION {warning} {
+ "\item " swap$ *
+ warningmsg empty$
+ 'skip$
+ { warningmsg " " * swap$ * }
+ if$
+ 'warningmsg :=
+}
+
+FUNCTION {warning:invalid} {
+ "Invalid format of field " swap$ enquote * warning
+}
+
+FUNCTION {warning:duplicate} {
+ "Can't use " swap$ enquote * " + " * swap$ enquote * warning
+}
+
+FUNCTION {pad.number} {
+ 'tempctra :=
+ duplicate$ empty$
+ { pop$ "" }
+ 'skip$
+ if$
+ { duplicate$ text.length$ tempctra < }
+ { "0" swap$ * }
+ while$
+}
+
+FUNCTION {extract.number} {
+ purify$ 'tempstrga :=
+ ""
+ { tempstrga empty$ not }
+ { tempstrga #1 #1 substring$ chr.to.int$ duplicate$
+ #47 > swap$
+ #58 < and
+ { tempstrga #1 #1 substring$ * }
+ 'skip$
+ if$
+ tempstrga #2 global.max$ substring$ 'tempstrga :=
+ }
+ while$
+ #1 #9 substring$
+}
+
+FUNCTION {format.range}
+{ 'tempstrga :=
+ ""
+ { tempstrga empty$ not }
+ { tempstrga #1 #1 substring$ "-" =
+ { "\bibrangedash " *
+ tempstrga #2 global.max$ substring$ 'tempstrga :=
+ { tempstrga #1 #1 substring$ "-" = }
+ { tempstrga #2 global.max$ substring$ 'tempstrga := }
+ while$
+ }
+ { tempstrga #1 #1 substring$ *
+ tempstrga #2 global.max$ substring$ 'tempstrga :=
+ }
+ if$
+ }
+ while$
+}
+
+FUNCTION {format:name:part} {
+ "\~" "[[[TILDE ACCENT]]]" str:replace
+ "~" "\bibnamedelima " str:replace
+ "[[[TILDE ACCENT]]]" "\~" str:replace
+}
+
+FUNCTION {format:name:initials} {
+ "\." "[[[DOT ACCENT]]]" str:replace
+ ".-" "\bibinithyphendelim " str:replace
+ ".~" "\bibinitperiod\bibinitdelim " str:replace
+ ". " "\bibinitperiod\bibinitdelim " str:replace
+ "." "\bibinitperiod" str:replace
+ "[[[DOT ACCENT]]]" "\." str:replace
+}
+
+FUNCTION {is.number} {
+ #1
+ { #0 > }
+ { duplicate$ #1 #1 substring$ chr.to.int$
+ duplicate$ #47 >
+ swap$ #58 <
+ and
+ { #2 global.max$ substring$
+ duplicate$ empty$
+ { #0 }
+ { #1 }
+ if$
+ }
+ { #0 }
+ if$
+ }
+ while$
+ empty$
+}
+
+FUNCTION {split.date:invalid} {
+ #0 'tempctra :=
+}
+
+FUNCTION {split.date:check.day} {
+ duplicate$ empty$
+ 'skip$
+ { duplicate$ is.number
+ { duplicate$ str.to.int
+ duplicate$ #0 >
+ swap$ #32 <
+ and
+ { duplicate$ text.length$ #2 <
+ { "0" swap$ * }
+ 'skip$
+ if$
+ }
+ { pop$ "" split.date:invalid }
+ if$
+ }
+ { pop$ "" split.date:invalid }
+ if$
+ }
+ if$
+}
+
+FUNCTION {split.date:check.month} {
+ duplicate$ empty$
+ 'skip$
+ { duplicate$ is.number
+ { duplicate$ str.to.int
+ duplicate$ #0 >
+ swap$ #13 <
+ and
+ { duplicate$ text.length$ #2 <
+ { "0" swap$ * }
+ 'skip$
+ if$
+ }
+ { pop$ "" split.date:invalid }
+ if$
+ }
+ { pop$ "" split.date:invalid }
+ if$
+ }
+ if$
+}
+
+FUNCTION {split.date:check.year} {
+ duplicate$ empty$
+ 'skip$
+ { duplicate$ is.number
+ { duplicate$ "0" =
+ 'skip$
+ { duplicate$
+ duplicate$ str.to.int #0 >
+ swap$ text.length$ #5 <
+ and
+ 'skip$
+ { pop$ "" split.date:invalid }
+ if$
+ }
+ if$
+ }
+ { pop$ "" split.date:invalid }
+ if$
+ }
+ if$
+}
+
+FUNCTION {split.date:check.date} {
+ duplicate$ empty$
+ 'skip$
+ { duplicate$
+ duplicate$ text.length$ #0 >
+ swap$ text.length$ #11 <
+ and
+ 'skip$
+ { pop$ "" split.date:invalid }
+ if$
+ }
+ if$
+}
+
+FUNCTION {split.date:check.range} {
+ duplicate$ empty$
+ 'skip$
+ { duplicate$
+ duplicate$ text.length$ #0 >
+ swap$ text.length$ #22 <
+ and
+ 'skip$
+ { pop$ "" split.date:invalid }
+ if$
+ }
+ if$
+}
+
+FUNCTION {split.date:date:part} {
+ 'tempstrgb :=
+ ""
+ { tempstrgb #1 #1 substring$
+ duplicate$ empty$
+ { pop$ #0 }
+ { "-" = not }
+ if$
+ }
+ { tempstrgb #1 #1 substring$ *
+ tempstrgb #2 global.max$ substring$ 'tempstrgb :=
+ }
+ while$
+ tempstrgb #2 global.max$ substring$
+}
+
+FUNCTION {split.date:date} {
+ duplicate$ empty$
+ { pop$ "" "" "" }
+ { split.date:date:part swap$ split.date:check.year swap$
+ split.date:date:part swap$ split.date:check.month swap$
+ split.date:date:part pop$ split.date:check.day
+ }
+ if$
+}
+
+FUNCTION {split.date:range} {
+ duplicate$ empty$
+ { pop$ "" "" }
+ { 'tempstrgb :=
+ ""
+ #0 'tempctrb :=
+ { tempstrgb #1 #1 substring$
+ duplicate$ empty$
+ { pop$ #0 }
+ { "/" =
+ { #1 'tempctrb :=
+ #0
+ }
+ { #1 }
+ if$
+ }
+ if$
+ }
+ { tempstrgb #1 #1 substring$ *
+ tempstrgb #2 global.max$ substring$ 'tempstrgb :=
+ }
+ while$
+ split.date:check.date
+ tempstrgb #2 global.max$ substring$
+ duplicate$ empty$
+ tempctrb #1 =
+ and
+ { pop$ open.ended }
+ 'skip$
+ if$
+ split.date:check.date
+ }
+ if$
+}
+
+FUNCTION {split.date} {
+ duplicate$ empty$
+ { pop$ pop$ "" "" "" "" "" "" }
+ { swap$ 'templist :=
+ #1 'tempctra :=
+ split.date:check.range
+ split.date:range swap$ 'tempstrga :=
+ split.date:date tempstrga
+ split.date:date
+ tempctra
+ 'skip$
+ { pop$ pop$ pop$ pop$ pop$ pop$ "" "" "" "" "" ""
+ templist warning:invalid
+ }
+ if$
+ }
+ if$
+}
+
+% -------------------------------------------------------------------
+% Sorting
+% -------------------------------------------------------------------
+
+FUNCTION {sortkey:name:format} {
+ 'templist :=
+ #1 'tempctra :=
+ templist num.names$ 'tempctrb :=
+ templist andothers
+ { tempctrb #1 - 'tempctrb := }
+ 'skip$
+ if$
+ tempctrb ctrl.maxsortnames >
+ { ctrl.minsortnames 'tempctrc := }
+ { ctrl.maxsortnames 'tempctrc := }
+ if$
+ ""
+ { duplicate$ text.length$ entry.max$ #50 - <
+ tempctra tempctrc > not and
+ tempctrb #0 > and
+ }
+ { useprefix
+ { templist tempctra "{vv}" format.name$
+ duplicate$ empty$
+ { pop$ "" }
+ { "u" change.case$ "t" change.case$
+ delimiter.3 * }
+ if$
+ templist tempctra
+ "{ll}{" delimiter.3 *
+ "ff}{" delimiter.3 * *
+ "jj}" *
+ format.name$ *
+ }
+ { templist tempctra
+ "{ll}{" delimiter.3 *
+ "ff}{" delimiter.3 * *
+ "vv}{" delimiter.3 * *
+ "jj}" *
+ format.name$ }
+ if$
+ tempctra #1 >
+ { delimiter.2 swap$ * }
+ 'skip$
+ if$
+ *
+ tempctra #1 + 'tempctra :=
+ tempctrb #1 - 'tempctrb :=
+ }
+ while$
+ templist andothers
+ tempctrb #0 >
+ or
+ ctrl.nosortothers not
+ and
+ { delimiter.2 * "zzzz" * }
+ 'skip$
+ if$
+}
+
+FUNCTION {sortkey:init:label} {
+ push:shortname duplicate$ empty$
+ { pop$ push:sorttitle }
+ { check:sortname sortkey:name:format }
+ if$
+ purify 'sortkey.name :=
+ sortyear empty$
+ { dateyear
+ dateendyear empty$
+ 'skip$
+ { dateyear dateendyear =
+ 'skip$
+ { dateendyear open.ended =
+ 'skip$
+ { "-" * dateendyear * }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ { sortyear }
+ if$
+ purify 'sortkey.year :=
+ push:sorttitle purify 'sortkey.title :=
+}
+
+FUNCTION {sortkey:init:main} {
+ push:fullname duplicate$ empty$
+ { pop$ push:sorttitle }
+ { check:sortname sortkey:name:format }
+ if$
+ purify 'sortkey.name :=
+}
+
+FUNCTION {sortkey:main:string} {
+ duplicate$ #1 =
+ { pop$
+ sortkey.name delimiter.1 *
+ sortkey.title * delimiter.1 *
+ sortkey.year * delimiter.1 *
+ volume purify #4 pad.number * delimiter.1 *
+ }
+ { duplicate$ #2 =
+ { pop$
+ sortkey.name delimiter.1 *
+ sortkey.year * delimiter.1 *
+ sortkey.title * delimiter.1 *
+ volume purify #4 pad.number * delimiter.1 *
+ }
+ { #3 =
+ { sortkey.name delimiter.1 *
+ sortkey.year * delimiter.1 *
+ volume purify #4 pad.number * delimiter.1 *
+ sortkey.title *
+ }
+ { "" }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {sortkey:main:date:year} {
+ duplicate$ empty$
+ { pop$ }
+ { extract.number #1 #4 substring$
+ duplicate$ empty$
+ { pop$ }
+ { swap$ pop$ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {sortkey:main:date} {
+ duplicate$ #1 =
+ { pop$
+ sortyear empty$
+ { "9999" dateyear sortkey:main:date:year }
+ { sortyear purify }
+ if$
+ }
+ { #2 =
+ { sortyear empty$
+ { "0" dateyear sortkey:main:date:year }
+ { sortyear purify }
+ if$
+ str.to.int #9999 swap$ - int.to.str$
+ }
+ { "" }
+ if$
+ }
+ if$
+ sortkey.name * delimiter.1 *
+ sortkey.title * delimiter.1 *
+ volume purify #4 pad.number * delimiter.1 *
+}
+
+FUNCTION {sortkey:main} {
+ ctrl.sorting #0 =
+ { sortkey.nosort }
+ { sortkey:init:main
+ ""
+ ctrl.sorting #10 <
+ { sortkey empty$
+ { ctrl.sorting sortkey:main:string }
+ { sortkey }
+ if$
+ }
+ { ctrl.sorting #20 <
+ { shorthand empty$
+ { sortkey.alpha * }
+ { shorthand purify * }
+ if$
+ duplicate$ empty$
+ 'skip$
+ { delimiter.1 * }
+ if$
+ ctrl.sorting #10 - sortkey:main:string
+ }
+ { ctrl.sorting #30 <
+ { sortkey empty$
+ { ctrl.sorting #20 - sortkey:main:date }
+ { sortkey }
+ if$
+ }
+ { push:cite purify }
+ if$
+ }
+ if$
+ }
+ if$
+ *
+ duplicate$ #1 text.prefix$ "u" change.case$ 'sortinit :=
+ push:presort delimiter.1 * swap$ *
+ }
+ if$
+ truncate
+}
+
+% -------------------------------------------------------------------
+% Output
+% -------------------------------------------------------------------
+
+FUNCTION {output:indent:field} {
+ duplicate$ empty$
+ 'skip$
+ { " " swap$ * write$ newline$ }
+ if$
+}
+
+FUNCTION {output:indent:subfield} {
+ duplicate$ empty$
+ 'skip$
+ { " " swap$ * write$ newline$ }
+ if$
+}
+
+FUNCTION {output:indent:subfield:keyval} {
+ duplicate$ empty$
+ 'skip$
+ { " " swap$ * write$ newline$ }
+ if$
+}
+
+FUNCTION {output:write:field:maybeempty} {
+ swap$ "\field" swap$ wrap:braces *
+ swap$ wrap:braces * output:indent:field
+}
+
+FUNCTION {output:write:fieldsource:maybeempty} {
+ swap$ "\fieldmssource" swap$ wrap:braces *
+ swap$ wrap:braces * "{}{}" * output:indent:field
+}
+
+FUNCTION {output:write:field} {
+ duplicate$ empty$
+ { pop$ pop$ }
+ { output:write:field:maybeempty }
+ if$
+}
+
+FUNCTION {output:write:fieldsource} {
+ duplicate$ empty$
+ { pop$ pop$ }
+ { output:write:fieldsource:maybeempty }
+ if$
+}
+
+FUNCTION {output:write:year} {
+ duplicate$ empty$
+ { pop$ pop$ }
+ { duplicate$ open.ended =
+ { pop$ "" }
+ 'skip$
+ if$
+ swap$ "\field" swap$ wrap:braces *
+ swap$ wrap:braces * output:indent:field
+ }
+ if$
+}
+
+FUNCTION {output:write:multi} {
+ duplicate$ empty$
+ { pop$ pop$ }
+ { swap$ "\field" swap$ wrap:braces * "{%" * output:indent:field
+ "%" * output:indent:field
+ "}" output:indent:field
+ }
+ if$
+}
+
+FUNCTION {output:write:bool} {
+ #0 >
+ { "\true" }
+ { "\false" }
+ if$
+ swap$ wrap:braces * output:indent:field
+}
+
+FUNCTION {output:write:count} {
+ int.to.str$ swap$ "\count" swap$ wrap:braces *
+ swap$ wrap:braces * output:indent:field
+}
+
+FUNCTION {output:write:string} {
+ duplicate$ empty$
+ { pop$ pop$ }
+ { swap$ "\strng" swap$ wrap:braces *
+ swap$ wrap:braces * output:indent:field }
+ if$
+}
+
+FUNCTION {output:write:range} {
+ duplicate$ empty$
+ { pop$ pop$ }
+ { format.range output:write:field }
+ if$
+}
+
+FUNCTION {output:write:number} {
+ duplicate$ empty$
+ { pop$ pop$ }
+ { duplicate$ is.number
+ 'skip$
+ { swap$ warning:invalid "" }
+ if$
+ output:write:field
+ }
+ if$
+}
+
+FUNCTION {output:write:gender} {
+ duplicate$ empty$
+ { pop$ pop$ }
+ { 'tempstrga :=
+ tempstrga "sf" =
+ tempstrga "sm" = or
+ tempstrga "sn" = or
+ tempstrga "pf" = or
+ tempstrga "pm" = or
+ tempstrga "pn" = or
+ tempstrga "pp" = or
+ { tempstrga output:write:field }
+ { warning:invalid }
+ if$
+ }
+ if$
+}
+
+FUNCTION {output:write:verb} {
+ duplicate$ empty$
+ { pop$ pop$ }
+ { 'tempstrga :=
+ "\verb" swap$ wrap:braces * output:indent:field
+ { tempstrga empty$ not }
+ { "\verb " tempstrga #1 ctrl.maxline #10 - substring$ *
+ output:indent:field
+ tempstrga ctrl.maxline #9 - global.max$ substring$ 'tempstrga :=
+ }
+ while$
+ "\endverb" output:indent:field }
+ if$
+}
+
+FUNCTION {output:write:name:hash} {
+ templist tempctra "{v{}}{l{}}{f{}}{j{}}" format.name$ purify$
+}
+
+FUNCTION {output:write:name:last} {
+ templist tempctra "{ll}" format.name$
+ duplicate$ 'tempstrga :=
+ duplicate$ empty$
+ 'pop$
+ { format:name:part
+ "family" combine:key:value output:indent:subfield:keyval
+ templist tempctra "{l.}" format.name$
+ duplicate$ tempstrga "." * =
+ { duplicate$ text.length$ #1 - text.prefix$ }
+ 'skip$
+ if$
+ format:name:initials
+ "familyi" combine:key:value output:indent:subfield:keyval
+ }
+ if$
+}
+
+FUNCTION {output:write:name:first} {
+ templist tempctra "{ff}" format.name$
+ duplicate$ 'tempstrga :=
+ duplicate$ empty$
+ 'pop$
+ { format:name:part
+ "given" combine:key:value output:indent:subfield:keyval
+ templist tempctra "{f.}" format.name$
+ duplicate$ tempstrga "." * =
+ { duplicate$ text.length$ #1 - text.prefix$ }
+ 'skip$
+ if$
+ format:name:initials
+ "giveni" combine:key:value output:indent:subfield:keyval
+ }
+ if$
+}
+
+FUNCTION {output:write:name:prefix} {
+ templist tempctra "{vv}" format.name$
+ duplicate$ 'tempstrga :=
+ duplicate$ duplicate$ text.length$ duplicate$ substring$ "'" =
+ { #1 'tempctrc := }
+ { #0 'tempctrc := }
+ if$
+ duplicate$ empty$
+ 'pop$
+ { format:name:part
+ "prefix" combine:key:value output:indent:subfield:keyval
+ templist tempctra "{v.}" format.name$
+ tempctrc
+ { duplicate$ text.length$ #1 - text.prefix$ "'" * }
+ { duplicate$ tempstrga "." * =
+ { duplicate$ text.length$ #1 - text.prefix$ }
+ 'skip$
+ if$
+ }
+ if$
+ format:name:initials
+ "prefixi" combine:key:value output:indent:subfield:keyval
+ }
+ if$
+}
+
+FUNCTION {output:write:name:suffix} {
+ templist tempctra "{jj}" format.name$
+ duplicate$ 'tempstrga :=
+ duplicate$ empty$
+ 'pop$
+ { format:name:part
+ "suffix" combine:key:value output:indent:subfield:keyval
+ templist tempctra "{j.}" format.name$
+ duplicate$ tempstrga "." * =
+ { duplicate$ text.length$ #1 - text.prefix$ }
+ 'skip$
+ if$
+ format:name:initials
+ "suffixi" combine:key:value output:indent:subfield:keyval
+ }
+ if$
+}
+
+FUNCTION {output:write:name} {
+ duplicate$ empty$
+ { pop$ pop$ }
+ { 'templist :=
+ 'tempstrga :=
+ #1 'tempctra :=
+ templist num.names$ 'tempctrb :=
+ templist andothers
+ { tempctrb #1 - 'tempctrb :=
+ "more" tempstrga * #1 output:write:bool
+ % not actually required, biblatex should resolve this
+ tempstrga push:labelname =
+ { "morelabelname" #1 output:write:bool }
+ 'skip$
+ if$
+ }
+ 'skip$
+ if$
+ "\name" tempstrga wrap:braces *
+ tempctrb int.to.str$ wrap:braces *
+ "" wrap:braces *
+ "{%" * output:indent:field
+ { tempctrb #0 > }
+ { "{{hash=" output:write:name:hash * "}{%" * output:indent:subfield
+ output:write:name:prefix
+ output:write:name:last
+ output:write:name:suffix
+ output:write:name:first
+ "}}%" output:indent:subfield
+ tempctra #1 + 'tempctra :=
+ tempctrb #1 - 'tempctrb :=
+ }
+ while$
+ "}" output:indent:field
+ }
+ if$
+}
+
+FUNCTION {output:write:list} {
+ duplicate$ empty$
+ { pop$ pop$ }
+ { 'templist :=
+ 'tempstrga :=
+ templist num.names$ 'tempctra :=
+ templist andothers
+ { tempctra #1 - 'tempctra :=
+ "more" tempstrga * #1 output:write:bool
+ }
+ 'skip$
+ if$
+ "\list" tempstrga wrap:braces *
+ tempctra int.to.str$ wrap:braces *
+ "{%" * output:indent:field
+ #1 'tempctra :=
+ #1 'tempctrb :=
+ #0 'tempctrc :=
+ { templist purify tempctrb global.max$ substring$ num.names$ #0 > }
+ { templist tempctrb #1 substring$ "{" =
+ { tempctrc #1 + 'tempctrc :=
+ tempctrb #1 + 'tempctrb := }
+ { templist tempctrb #1 substring$ "}" =
+ { tempctrc #1 - 'tempctrc :=
+ tempctrb #1 + 'tempctrb := }
+ { templist tempctrb #5 substring$
+ duplicate$ " AND " =
+ swap$ " and " =
+ or
+ tempctrc #1 <
+ and
+ { templist tempctra tempctrb tempctra - substring$
+ wrap:braces "%" * output:indent:subfield
+ tempctrb #5 + duplicate$
+ 'tempctra :=
+ 'tempctrb :=
+ }
+ { tempctrb #1 + 'tempctrb := }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ while$
+ templist tempctra global.max$ substring$
+ duplicate$ "others" =
+ { pop$ }
+ { wrap:braces "%" * output:indent:subfield }
+ if$
+ "}" output:indent:field
+ }
+ if$
+}
+
+FUNCTION {output:specials} {
+ fakeset empty$
+ 'skip$
+ { ctrl:set
+ { "\fakeset" fakeset wrap:braces * output:indent:field }
+ { "fakeset can only be used for @set entries" warning * }
+ if$
+ }
+ if$
+ entryset empty$
+ 'skip$
+ { ctrl:set
+ { "\set" }
+ { "\inset" }
+ if$
+ entryset wrap:braces * output:indent:field
+ }
+ if$
+ xref empty$
+ 'skip$
+ { "\xref" xref wrap:braces * output:indent:field }
+ if$
+ keywords empty$
+ 'skip$
+ { "\keyw" keywords wrap:braces * output:indent:field }
+ if$
+ "entrysubtype" entrysubtype output:write:field
+ "crossref" crossref output:write:string
+ "execute" execute output:write:field
+ "namehash" namehash output:write:string
+ "fullhash" fullhash output:write:string
+ "gender" gender output:write:gender
+ "shorthand" shorthand output:write:field
+ shorthand empty$
+ { label }
+ { shorthand }
+ if$
+ "label" swap$ output:write:field
+ "labelname" push:labelname output:write:fieldsource
+ shorttitle empty$
+ { title empty$
+ { "" }
+ { "title" }
+ if$
+ }
+ { "shorttitle" }
+ if$
+ "labeltitle" swap$ output:write:fieldsource
+ ctrl.labelalpha
+ { "labelalpha" labelalpha output:write:field
+ "extraalpha" extraalpha output:write:field
+ }
+ 'skip$
+ if$
+ ctrl:labeldate
+ { dateyear empty$ not
+ { "labelyear" dateyear output:write:field
+ dateendyear empty$
+ 'skip$
+ { dateyear dateendyear =
+ 'skip$
+ { dateendyear open.ended =
+ 'skip$
+ { "labelendyear" dateendyear output:write:field }
+ if$
+ }
+ if$
+ }
+ if$
+ "extradate" extradate output:write:field
+ "labeldatesource" "" output:write:field:maybeempty
+ }
+ { "extradate" extradate output:write:field
+ "labeldatesource" "nodate" output:write:field
+ }
+ if$
+ }
+ 'skip$
+ if$
+ "sortinit" sortinit output:write:field
+ "sortinithash" sortinit output:write:field
+ singletitle
+ { "singletitle" #1 output:write:bool }
+ 'skip$
+ if$
+}
+
+FUNCTION {output:names} {
+ "author" author output:write:name
+ "authortype" authortype output:write:field
+ "shortauthor" shortauthor output:write:name
+ "bookauthor" bookauthor output:write:name
+ "editor" editor output:write:name
+ "editortype" editortype output:write:field
+ "editora" editora output:write:name
+ "editoratype" editoratype output:write:field
+ "editorb" editorb output:write:name
+ "editorbtype" editorbtype output:write:field
+ "editorc" editorc output:write:name
+ "editorctype" editorctype output:write:field
+ "shorteditor" shorteditor output:write:name
+ "translator" translator output:write:name
+ "annotator" annotator output:write:name
+ "commentator" commentator output:write:name
+ "introduction" introduction output:write:name
+ "foreword" foreword output:write:name
+ "afterword" afterword output:write:name
+ "holder" holder output:write:name
+}
+
+FUNCTION {output:lists} {
+ "language" language output:write:list
+ "organization" organization output:write:list
+ "origlanguage" origlanguage output:write:list
+ "origlocation" origlocation output:write:list
+ "origpublisher" origpublisher output:write:list
+ "publisher" publisher output:write:list
+}
+
+FUNCTION {output:fields.1} {
+ "abstract" abstract output:write:multi
+ "addendum" addendum output:write:field
+ "bookpagination" bookpagination output:write:field
+ "booksubtitle" booksubtitle output:write:field
+ "booktitleaddon" booktitleaddon output:write:field
+ "booktitle" booktitle output:write:field
+ "chapter" chapter output:write:field
+ "doi" doi output:write:verb
+ "edition" edition output:write:field
+ "eid" eid output:write:field
+ "eprint" eprint output:write:verb
+ "eventtitle" eventtitle output:write:field
+ "eventtitleaddon" eventtitleaddon output:write:field
+ "howpublished" howpublished output:write:field
+ "indexsorttitle" indexsorttitle output:write:field
+ "indextitle" indextitle output:write:field
+ "isan" isan output:write:field
+ "isbn" isbn output:write:field
+ "ismn" ismn output:write:field
+}
+
+FUNCTION {output:fields.2} {
+ "isrn" isrn output:write:field
+ "issn" issn output:write:field
+ "issue" issue output:write:field
+ "issuesubtitle" issuesubtitle output:write:field
+ "issuetitle" issuetitle output:write:field
+ "iswc" iswc output:write:field
+ "journalsubtitle" journalsubtitle output:write:field
+ "langidopts" langidopts output:write:field
+ "library" library output:write:field
+ "mainsubtitle" mainsubtitle output:write:field
+ "maintitleaddon" maintitleaddon output:write:field
+ "maintitle" maintitle output:write:field
+ "nameaddon" nameaddon output:write:field
+ "note" note output:write:field
+ "number" number output:write:field
+ "origtitle" origtitle output:write:field
+ "pages" pages output:write:range
+ "pagetotal" pagetotal output:write:range
+ "pagination" pagination output:write:field
+ "part" part output:write:range
+}
+
+FUNCTION {output:fields.3} {
+ "pubstate" pubstate output:write:field
+ "reprinttitle" reprinttitle output:write:field
+ "series" series output:write:field
+ "shorthandintro" shorthandintro output:write:field
+ "shortjournal" shortjournal output:write:field
+ "shortseries" shortseries output:write:field
+ "shorttitle" shorttitle output:write:field
+ "subtitle" subtitle output:write:field
+ "titleaddon" titleaddon output:write:field
+ "title" title output:write:field
+ "url" url output:write:verb
+ "venue" venue output:write:field
+ "version" version output:write:field
+ "volumes" volumes output:write:field
+ "volume" volume output:write:field
+}
+
+FUNCTION {output:dates.1} {
+ "date" date split.date
+ "day" swap$ output:write:field
+ duplicate$ empty$
+ { month empty$
+ 'skip$
+ { month is.number
+ { month str.to.int
+ duplicate$ #0 >
+ swap$ #13 <
+ and
+ { pop$ month #2 pad.number }
+ { "month" warning:invalid }
+ if$
+ }
+ { "month" warning:invalid }
+ if$
+ }
+ if$
+ }
+ { month empty$
+ 'skip$
+ { "month" "date" warning:duplicate }
+ if$
+ }
+ if$
+ "month" swap$ output:write:field
+ duplicate$ empty$
+ { year empty$
+ 'skip$
+ { pop$ year }
+ if$
+ }
+ { year empty$
+ 'skip$
+ { "year" "date" warning:duplicate }
+ if$
+ }
+ if$
+ "year" swap$ output:write:field
+ "endday" swap$ output:write:field
+ "endmonth" swap$ output:write:field
+ "endyear" swap$ output:write:year
+}
+
+FUNCTION {output:dates.2} {
+ "origdate" origdate split.date
+ "origday" swap$ output:write:field
+ "origmonth" swap$ output:write:field
+ "origyear" swap$ output:write:field
+ "origendday" swap$ output:write:field
+ "origendmonth" swap$ output:write:field
+ "origendyear" swap$ output:write:year
+ "eventdate" eventdate split.date
+ "eventday" swap$ output:write:field
+ "eventmonth" swap$ output:write:field
+ "eventyear" swap$ output:write:field
+ "eventendday" swap$ output:write:field
+ "eventendmonth" swap$ output:write:field
+ "eventendyear" swap$ output:write:year
+ "urldate" urldate split.date
+ "urlday" swap$ output:write:field
+ "urlmonth" swap$ output:write:field
+ "urlyear" swap$ output:write:field
+ "urlendday" swap$ output:write:field
+ "urlendmonth" swap$ output:write:field
+ "urlendyear" swap$ output:write:year
+}
+
+FUNCTION {output:user} {
+ "namea" namea output:write:name
+ "nameatype" nameatype output:write:field
+ "nameb" nameb output:write:name
+ "namebtype" namebtype output:write:field
+ "namec" namec output:write:name
+ "namectype" namectype output:write:field
+ "lista" lista output:write:list
+ "listb" listb output:write:list
+ "listc" listc output:write:list
+ "listd" listd output:write:list
+ "liste" liste output:write:list
+ "listf" listf output:write:list
+ "usera" usera output:write:field
+ "userb" userb output:write:field
+ "userc" userc output:write:field
+ "userd" userd output:write:field
+ "usere" usere output:write:field
+ "userf" userf output:write:field
+ "verba" verba output:write:verb
+ "verbb" verbb output:write:verb
+ "verbc" verbc output:write:verb
+}
+
+FUNCTION {output:warning} {
+ warningmsg empty$
+ 'skip$
+ { "\warn" warningmsg wrap:braces * output:indent:field }
+ if$
+}
+
+FUNCTION {output:compat.1} {
+ "langid" langid
+ duplicate$ empty$
+ { pop$ hyphenation }
+ { hyphenation empty$
+ 'skip$
+ { "hyphenation" "langid" warning:duplicate }
+ if$
+ }
+ if$
+ output:write:field
+ "location" location
+ duplicate$ empty$
+ { pop$ address }
+ { address empty$
+ 'skip$
+ { "address" "location" warning:duplicate }
+ if$
+ }
+ if$
+ output:write:list
+ "institution" institution
+ duplicate$ empty$
+ { pop$ school }
+ { school empty$
+ 'skip$
+ { "school" "institution" warning:duplicate }
+ if$
+ }
+ if$
+ output:write:list
+ "file" file
+ duplicate$ empty$
+ { pop$ pdf }
+ { pdf empty$
+ 'skip$
+ { "pdf" "file" warning:duplicate }
+ if$
+ }
+ if$
+ output:write:verb
+}
+
+FUNCTION {output:compat.2} {
+ "type" type
+ duplicate$ empty$
+ { type$ "patent" =
+ type$ "techreport" = or
+ type$ "phdthesis" = or
+ { pop$ type$ }
+ { type$ "mastersthesis" =
+ { pop$ "mathesis" }
+ 'skip$
+ if$
+ }
+ if$
+ }
+ 'skip$
+ if$
+ output:write:field
+ "journaltitle" journaltitle
+ duplicate$ empty$
+ { pop$ journal }
+ { journal empty$
+ 'skip$
+ { "journal" "journaltitle" warning:duplicate }
+ if$
+ }
+ if$
+ output:write:field
+ "annotation" annotation
+ duplicate$ empty$
+ { pop$ annote }
+ { annote empty$
+ 'skip$
+ { "annote" "annotation" warning:duplicate }
+ if$
+ }
+ if$
+ output:write:multi
+}
+
+FUNCTION {output:compat.3} {
+ "eprinttype" eprinttype
+ duplicate$ empty$
+ { pop$ archiveprefix }
+ { archiveprefix empty$
+ 'skip$
+ { "archiveprefix" "eprinttype" warning:duplicate }
+ if$
+ }
+ if$
+ output:write:field
+ "eprintclass" eprintclass
+ duplicate$ empty$
+ { pop$ primaryclass }
+ { primaryclass empty$
+ 'skip$
+ { "primaryclass" "eprintclass" warning:duplicate }
+ if$
+ }
+ if$
+ output:write:field
+}
+
+FUNCTION {output:debug} {
+ "% sort.key$ = " sort.key$ * maxline write$ newline$
+ sort.year empty$
+ 'skip$
+ { "% sort.year = " sort.year * maxline write$ newline$ }
+ if$
+ sort.alph empty$
+ 'skip$
+ { "% sort.alph = " sort.alph * maxline write$ newline$ }
+ if$
+}
+
+FUNCTION {output:entry} {
+ 'tempstrga :=
+ newline$
+ ctrl.debug
+ { output:debug }
+ 'skip$
+ if$
+ " \entry"
+ push:cite wrap:braces *
+ tempstrga wrap:braces *
+ entryoptions wrap:braces *
+ write$ newline$
+ output:names
+ output:lists
+ output:specials
+ output:fields.1
+ output:fields.2
+ output:fields.3
+ output:compat.1
+ output:compat.2
+ output:compat.3
+ output:dates.1
+ output:dates.2
+ output:user
+ output:warning
+ " \endentry" write$ newline$
+}
+
+FUNCTION {control} { skip$ }
+FUNCTION {set} { type$ output:entry }
+
+FUNCTION {article} { type$ output:entry }
+FUNCTION {bibnote} { type$ output:entry }
+FUNCTION {book} { type$ output:entry }
+FUNCTION {mvbook} { type$ output:entry }
+FUNCTION {inbook} { type$ output:entry }
+FUNCTION {bookinbook} { type$ output:entry }
+FUNCTION {booklet} { type$ output:entry }
+FUNCTION {collection} { type$ output:entry }
+FUNCTION {mvcollection} { type$ output:entry }
+FUNCTION {incollection} { type$ output:entry }
+FUNCTION {manual} { type$ output:entry }
+FUNCTION {misc} { type$ output:entry }
+FUNCTION {online} { type$ output:entry }
+FUNCTION {patent} { type$ output:entry }
+FUNCTION {periodical} { type$ output:entry }
+FUNCTION {proceedings} { type$ output:entry }
+FUNCTION {mvproceedings} { type$ output:entry }
+FUNCTION {inproceedings} { type$ output:entry }
+FUNCTION {reference} { type$ output:entry }
+FUNCTION {mvreference} { type$ output:entry }
+FUNCTION {inreference} { type$ output:entry }
+FUNCTION {report} { type$ output:entry }
+FUNCTION {suppbook} { type$ output:entry }
+FUNCTION {suppcollection} { type$ output:entry }
+FUNCTION {suppperiodical} { type$ output:entry }
+FUNCTION {thesis} { type$ output:entry }
+FUNCTION {unpublished} { type$ output:entry }
+
+FUNCTION {artwork} { type$ output:entry }
+FUNCTION {audio} { type$ output:entry }
+FUNCTION {commentary} { type$ output:entry }
+FUNCTION {image} { type$ output:entry }
+FUNCTION {jurisdiction} { type$ output:entry }
+FUNCTION {legal} { type$ output:entry }
+FUNCTION {legislation} { type$ output:entry }
+FUNCTION {letter} { type$ output:entry }
+FUNCTION {movie} { type$ output:entry }
+FUNCTION {music} { type$ output:entry }
+FUNCTION {performance} { type$ output:entry }
+FUNCTION {review} { type$ output:entry }
+FUNCTION {software} { type$ output:entry }
+FUNCTION {standard} { type$ output:entry }
+FUNCTION {video} { type$ output:entry }
+
+FUNCTION {customa} { type$ output:entry }
+FUNCTION {customb} { type$ output:entry }
+FUNCTION {customc} { type$ output:entry }
+FUNCTION {customd} { type$ output:entry }
+FUNCTION {custome} { type$ output:entry }
+FUNCTION {customf} { type$ output:entry }
+
+FUNCTION {conference} { "inproceedings" output:entry }
+FUNCTION {electronic} { "online" output:entry }
+FUNCTION {mastersthesis} { "thesis" output:entry }
+FUNCTION {other} { "misc" output:entry }
+FUNCTION {phdthesis} { "thesis" output:entry }
+FUNCTION {techreport} { "report" output:entry }
+FUNCTION {www} { "online" output:entry }
+FUNCTION {default.type} { "misc" output:entry }
+
+% -------------------------------------------------------------------
+% Input
+% -------------------------------------------------------------------
+
+FUNCTION {input:control:parse} {
+ 'tempstrga :=
+ "" 'tempstrgb :=
+ #1 'tempctra :=
+ { tempstrga empty$ not
+ tempctra and }
+ { tempstrga #1 #1 substring$ ":" =
+ { #0 'tempctra := }
+ { tempstrgb tempstrga #1 #1 substring$ * 'tempstrgb := }
+ if$
+ tempstrga #2 global.max$ substring$ 'tempstrga :=
+ }
+ while$
+ tempstrga
+ tempstrgb
+}
+
+FUNCTION {input:control:options} {
+ input:control:parse str.to.int
+}
+
+% This version corresponds to the .bcf version, *not* the biblatex version!
+FUNCTION {input:control:version} {
+ input:control:parse
+ "$Revision: 4.0 $"
+ #12 entry.max$ substring$
+ #-3 entry.max$ substring$
+ 'tempstrga :=
+ duplicate$ tempstrga =
+ { pop$ }
+ { "bcf version mismatch: biblatex.bst has " tempstrga *
+ ", but biblatex.sty has " * swap$ * warning$
+ " The bcf version need not be the same as the biblatex version."
+ top$
+ pop$ "" }
+ if$
+}
+
+FUNCTION {input:control} {
+ options empty$
+ 'skip$
+ { options input:control:version
+ duplicate$ empty$
+ { pop$ }
+ { input:control:options 'ctrl.debug :=
+ input:control:options 'ctrl.bibtex8 :=
+ input:control:options 'ctrl.cssort :=
+ input:control:options 'ctrl.useprefix :=
+ input:control:options 'ctrl.useauthor :=
+ input:control:options 'ctrl.useeditor :=
+ input:control:options 'ctrl.usetranslator :=
+ input:control:options 'ctrl.labelalpha :=
+ input:control:options 'ctrl.labeldate :=
+ input:control:options 'ctrl.singletitle :=
+ input:control:options 'ctrl.sorting :=
+ input:control:options 'ctrl.maxcitenames :=
+ input:control:options 'ctrl.mincitenames :=
+ input:control:options 'ctrl.maxsortnames :=
+ input:control:options 'ctrl.minsortnames :=
+ input:control:options 'ctrl.nohashothers :=
+ input:control:options 'ctrl.nosortothers :=
+ input:control:options 'ctrl.maxalphanames :=
+ input:control:options 'ctrl.minalphanames :=
+ input:control:options 'ctrl.maxline :=
+ input:control:parse 'ctrl.alphaothers :=
+ input:control:parse 'ctrl.sortalphaothers :=
+ 'ctrl.sortstr :=
+ }
+ if$
+ ctrl.maxline #49 <
+ { #49 'ctrl.maxline := }
+ { ctrl.maxline #79 >
+ { #79 'ctrl.maxline := }
+ 'skip$
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {input:options:add} {
+ entryoptions empty$
+ 'skip$
+ { entryoptions ", " * 'entryoptions := }
+ if$
+ entryoptions swap$ * 'entryoptions :=
+ duplicate$ empty$
+ { pop$ }
+ { "=" swap$ * entryoptions swap$ * 'entryoptions := }
+ if$
+}
+
+FUNCTION {input:options:known} {
+ duplicate$ empty$
+ { tempstrgb input:options:add
+ #1 }
+ { duplicate$ "true" =
+ { pop$ "" tempstrgb input:options:add
+ #1 }
+ { duplicate$ tempstrgb input:options:add
+ bol.to.int
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {input:options:parse} {
+ 'tempstrgb :=
+ tempstrgb "useprefix" =
+ { input:options:known 'useprefix := }
+ { tempstrgb "useauthor" =
+ { input:options:known 'useauthor := }
+ { tempstrgb "useeditor" =
+ { input:options:known 'useeditor := }
+ { tempstrgb "usetranslator" =
+ { input:options:known 'usetranslator := }
+ { tempstrgb "skipbib" =
+ { input:options:known 'skipbib := }
+ { tempstrgb "skiplos" =
+ { input:options:known 'skiplos := }
+ { tempstrgb "skiplab" =
+ { input:options:known 'skiplab := }
+ { tempstrgb "dataonly" =
+ { input:options:known
+ duplicate$ 'skipbib :=
+ duplicate$ 'skiplos :=
+ 'skiplab :=
+ }
+ { tempstrgb input:options:add }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {input:options:extract} {
+ 'tempstrgb :=
+ #1 'tempctrb :=
+ { tempstrgb text.length$ #0 > }
+ { tempstrgb tempctrb #1 substring$ "=" =
+ { tempstrgb tempctrb #1 + global.max$ substring$
+ tempstrgb #1 tempctrb #1 - substring$
+ input:options:parse
+ "" 'tempstrgb :=
+ }
+ { tempstrgb text.length$ tempctrb =
+ { "" tempstrgb input:options:parse
+ "" 'tempstrgb :=
+ }
+ { tempctrb #1 + 'tempctrb := }
+ if$
+ }
+ if$
+ }
+ while$
+}
+
+FUNCTION {input:options} {
+ options 'tempstrga :=
+ #1 'tempctra :=
+ { tempstrga text.length$ #0 > }
+ { tempstrga tempctra #1 substring$ "," =
+ { tempstrga #1 tempctra #1 - substring$ input:options:extract
+ tempctra #1 + 'tempctra :=
+ { tempstrga tempctra #1 substring$ " " =
+ tempctra tempstrga text.length$ > not
+ and
+ }
+ { tempctra #1 + 'tempctra := }
+ while$
+ tempstrga tempctra global.max$ substring$ 'tempstrga :=
+ #1 'tempctra :=
+ }
+ { tempstrga text.length$ tempctra =
+ { tempstrga input:options:extract
+ "" 'tempstrga :=
+ }
+ { tempctra #1 + 'tempctra := }
+ if$
+ }
+ if$
+ }
+ while$
+}
+
+FUNCTION {input:iterate} {
+ ctrl:control
+ { input:control }
+ { citecount #1 + 'citecount :=
+ citecount int.to.str$ #9 pad.number 'sortkey.nosort :=
+ ctrl.useprefix 'useprefix :=
+ ctrl.useauthor 'useauthor :=
+ ctrl.useeditor 'useeditor :=
+ ctrl.usetranslator 'usetranslator :=
+ ctrl.singletitle
+ { #1 'singletitle := }
+ 'skip$
+ if$
+ options empty$
+ 'skip$
+ { input:options }
+ if$
+ ctrl:set entryset empty$ or
+ 'skip$
+ { #1 'skipbib :=
+ #1 'skiplos :=
+ #1 'skiplab :=
+ }
+ if$
+ "date" date split.date
+ pop$ pop$ 'dateyear :=
+ pop$ pop$ 'dateendyear :=
+ dateyear empty$
+ { year empty$
+ 'skip$
+ { year 'dateyear := }
+ if$
+ }
+ 'skip$
+ if$
+ }
+ if$
+}
+
+READ
+
+EXECUTE {initialize}
+
+ITERATE {input:iterate}
+
+% -------------------------------------------------------------------
+% Generate labels
+% -------------------------------------------------------------------
+
+FUNCTION {makelabel:name:format} {
+ 'templist :=
+ #1 'tempctra :=
+ templist num.names$ 'tempctrb :=
+ templist andothers
+ { tempctrb #1 - 'tempctrb := }
+ 'skip$
+ if$
+ tempctrb ctrl.maxcitenames >
+ { ctrl.mincitenames 'tempctrc := }
+ { ctrl.maxcitenames 'tempctrc := }
+ if$
+ ""
+ { duplicate$ text.length$ entry.max$ #50 - <
+ tempctra tempctrc > not and
+ tempctrb #0 > and
+ }
+ { useprefix
+ { templist tempctra "{vv}" format.name$
+ duplicate$ empty$
+ { pop$ "" }
+ { "u" change.case$ "t" change.case$
+ delimiter.3 * }
+ if$
+ }
+ { "" }
+ if$
+ templist tempctra "{ll}" format.name$ *
+ tempctra #1 >
+ { delimiter.2 swap$ * }
+ 'skip$
+ if$
+ *
+ tempctra #1 + 'tempctra :=
+ tempctrb #1 - 'tempctrb :=
+ }
+ while$
+ templist andothers
+ tempctrb #0 >
+ or
+ ctrl.nohashothers not
+ and
+ { delimiter.2 * "zzzz" * }
+ 'skip$
+ if$
+}
+
+
+FUNCTION {makelabel:name:full} {
+ duplicate$ num.names$ #1 =
+ { #1
+ "{ll}{" delimiter.3 *
+ "ff}{" delimiter.3 * *
+ "vv}{" delimiter.3 * *
+ "jj}" *
+ format.name$
+ }
+ { pop$ "" }
+ if$
+}
+
+FUNCTION {makelabel:alpha:format} {
+ duplicate$ empty$
+ { pop$ "" }
+ { 'templist :=
+ #1 'tempctra :=
+ templist andothers
+ { templist num.names$ #1 - 'tempctrb := }
+ { templist num.names$ 'tempctrb := }
+ if$
+ tempctrb ctrl.maxalphanames >
+ { ctrl.minalphanames 'tempctrb := }
+ 'skip$
+ if$
+ tempctrb #1 >
+ { ""
+ { tempctrb #0 > }
+ { templist tempctra "{l{}}" format.name$ *
+ tempctra #1 + 'tempctra :=
+ tempctrb #1 - 'tempctrb :=
+ }
+ while$
+ }
+ { templist #1 "{l{}}" format.name$ }
+ if$
+ duplicate$ text.length$ #2 <
+ { pop$
+ useprefix
+ { templist #1 "{v{}}" format.name$ #2 text.prefix$
+ templist #1 "{ll}" format.name$ *
+ }
+ { templist #1 "{ll}" format.name$ }
+ if$
+ #3 text.prefix$
+ }
+ 'skip$
+ if$
+ }
+ if$
+ templist num.names$ ctrl.maxalphanames >
+ templist andothers
+ or
+ { ctrl.alphaothers * }
+ 'skip$
+ if$
+}
+
+FUNCTION {makelabel:alpha:year} {
+ dateyear purify
+ #1 #4 substring$
+ #-1 #2 substring$
+}
+
+FUNCTION {makelabel:hash:format} {
+ 'templist :=
+ #1 'tempctra :=
+ templist num.names$ 'tempctrb :=
+ templist andothers
+ { tempctrb #1 - 'tempctrb := }
+ 'skip$
+ if$
+ tempctrb ctrl.maxcitenames >
+ { ctrl.mincitenames 'tempctrc := }
+ { ctrl.maxcitenames 'tempctrc := }
+ if$
+ ""
+ { tempctra tempctrc > not
+ tempctrb #0 >
+ and }
+ { templist tempctra
+ useprefix
+ { "{v{}}{l{}}{j{}}{f{}}" }
+ { "{l{}}{j{}}{f{}}{v{}}" }
+ if$
+ format.name$ purify$ *
+ tempctra #1 + 'tempctra :=
+ tempctrb #1 - 'tempctrb :=
+ }
+ while$
+ templist andothers
+ tempctrb #0 >
+ or
+ ctrl.nohashothers not
+ and
+ { "+" * }
+ 'skip$
+ if$
+}
+
+FUNCTION {makelabel:hash:format:full} {
+ 'templist :=
+ #1 'tempctra :=
+ templist num.names$ 'tempctrb :=
+ templist andothers
+ { tempctrb #1 - 'tempctrb := }
+ 'skip$
+ if$
+ ""
+ { tempctrb #0 > }
+ { templist tempctra
+ useprefix
+ { "{v{}}{l{}}{j{}}{f{}}" }
+ { "{l{}}{j{}}{f{}}{v{}}" }
+ if$
+ format.name$ purify$ *
+ tempctra #1 + 'tempctra :=
+ tempctrb #1 - 'tempctrb :=
+ }
+ while$
+ templist andothers
+ ctrl.nohashothers not
+ and
+ { "+" * }
+ 'skip$
+ if$
+}
+
+FUNCTION {makelabel:ctrl:alpha} {
+ ctrl:labelalpha
+ { shorthand empty$
+ { label empty$
+ { push:cite purify #1 #3 substring$
+ "u" change.case$ "t" change.case$ }
+ { label makelabel:alpha:year * }
+ if$
+ }
+ { shorthand }
+ if$
+ }
+ { "" }
+ if$
+}
+
+FUNCTION {makelabel:ctrl:alpha:format} {
+ ctrl:labelalpha
+ { shorthand empty$
+ { label empty$
+ { makelabel:alpha:format }
+ { pop$ label }
+ if$
+ makelabel:alpha:year *
+ }
+ { pop$
+ shorthand
+ }
+ if$
+ }
+ { pop$
+ ""
+ }
+ if$
+}
+
+FUNCTION {makelabel:label} {
+ push:shortname empty$
+ { push:sorttitle 'label.name :=
+ makelabel:ctrl:alpha 'labelalpha :=
+ }
+ { push:shortname
+ duplicate$ makelabel:name:format 'label.name :=
+ duplicate$ makelabel:hash:format 'namehash :=
+ makelabel:ctrl:alpha:format 'labelalpha :=
+ }
+ if$
+ push:fullname empty$
+ 'skip$
+ { push:fullname makelabel:hash:format:full 'fullhash := }
+ if$
+}
+
+% -------------------------------------------------------------------
+% Sort labels
+% -------------------------------------------------------------------
+
+FUNCTION {labelsort:label} {
+ sortkey:init:label
+ makelabel:label
+}
+
+FUNCTION {labelsort:main} {
+ ctrl:skiplab not
+ ctrl.singletitle ctrl.labeldate or
+ and
+ { label.name purify delimiter.1 *
+ sortkey.year * delimiter.1 *
+ push:presort * delimiter.1 *
+ sortkey empty$
+ { sortkey.name * delimiter.1 * sortkey.title }
+ { sortkey }
+ if$
+ *
+ truncate
+ }
+ { "" }
+ if$
+ duplicate$
+ 'sort.key$ :=
+ 'sort.year :=
+}
+
+FUNCTION {labelsort:alph} {
+ ctrl:labelalpha
+ { labelalpha ctrl.alphaothers ctrl.sortalphaothers str:replace
+ purify delimiter.1 *
+ push:presort * delimiter.1 *
+ sortkey empty$
+ { ctrl.sorting #10 >
+ ctrl.sorting #20 <
+ and
+ { ctrl.sorting #10 - }
+ { #2 }
+ if$
+ sortkey:main:string
+ }
+ { sortkey }
+ if$
+ *
+ truncate
+ }
+ { "" }
+ if$
+ duplicate$
+ 'sort.key$ :=
+ 'sort.alph :=
+}
+
+FUNCTION {labelsort:hash} {
+ ctrl:control
+ namehash empty$
+ or
+ { "zzzz" 'sort.key$ := }
+ { namehash purify delimiter.1 *
+ push:shortname duplicate$ empty$
+ { pop$ "zzzz" * }
+ { sortkey:name:format purify * }
+ if$
+ truncate 'sort.key$ :=
+ }
+ if$
+}
+
+FUNCTION {labelsort:fullhash} {
+ ctrl:control
+ fullhash empty$
+ or
+ { "zzzz" 'sort.key$ := }
+ { fullhash purify delimiter.1 *
+ push:shortname duplicate$ empty$
+ { pop$ "zzzz" * }
+ { sortkey:name:format purify * }
+ if$
+ truncate 'sort.key$ :=
+ }
+ if$
+}
+
+% -------------------------------------------------------------------
+
+FUNCTION {labelsort:init} {
+ "" 'last.name :=
+ "" 'last.year :=
+ "" 'last.hash :=
+ "" 'last.extra :=
+ #1 'last.extra.num :=
+}
+
+FUNCTION {labelsort:main:init} {
+ "" 'last.name :=
+}
+
+FUNCTION {labelsort:hash:init} {
+ "" 'last.name :=
+ #1 'last.extra.num :=
+}
+
+FUNCTION {labelsort:namehash:iterate} {
+ ctrl:control
+ namehash empty$
+ or
+ 'skip$
+ { namehash last.hash =
+ { push:name:namehash last.name =
+ 'skip$
+ { last.extra.num #1 + 'last.extra.num := }
+ if$
+ last.extra.num int.to.str$ 'labelhash :=
+ }
+ { #1 'last.extra.num :=
+ "1" 'labelhash :=
+ }
+ if$
+ namehash 'last.hash :=
+ push:name:namehash 'last.name :=
+ }
+ if$
+}
+
+FUNCTION {labelsort:namehash:reverse} {
+ ctrl:control
+ namehash empty$
+ or
+ 'skip$
+ { push:name:namehash last.name =
+ { last.extra "1" =
+ { "1" 'labelhash := }
+ 'skip$
+ if$
+ }
+ { last.extra "2" =
+ { "1" 'labelhash := }
+ 'skip$
+ if$
+ }
+ if$
+ labelhash 'last.extra :=
+ push:name:namehash 'last.name :=
+ namehash labelhash * 'namehash :=
+ }
+ if$
+}
+
+FUNCTION {labelsort:fullhash:iterate} {
+ ctrl:control
+ fullhash empty$
+ or
+ 'skip$
+ { fullhash last.hash =
+ { push:name:fullhash last.name =
+ 'skip$
+ { last.extra.num #1 + 'last.extra.num := }
+ if$
+ last.extra.num int.to.str$ 'labelhash :=
+ }
+ { #1 'last.extra.num :=
+ "1" 'labelhash :=
+ }
+ if$
+ fullhash 'last.hash :=
+ push:name:fullhash 'last.name :=
+ }
+ if$
+}
+
+FUNCTION {labelsort:fullhash:reverse} {
+ ctrl:control
+ fullhash empty$
+ or
+ 'skip$
+ { push:name:fullhash last.name =
+ { last.extra "1" =
+ { "1" 'labelhash := }
+ 'skip$
+ if$
+ }
+ { last.extra "2" =
+ { "1" 'labelhash := }
+ 'skip$
+ if$
+ }
+ if$
+ labelhash 'last.extra :=
+ push:name:fullhash 'last.name :=
+ fullhash labelhash * 'fullhash :=
+ }
+ if$
+}
+
+FUNCTION {labelsort:main:singletitle} {
+ ctrl.singletitle
+ { label.name last.name =
+ { #0 'singletitle := }
+ 'skip$
+ if$
+ label.name 'last.name :=
+ }
+ 'skip$
+ if$
+}
+
+FUNCTION {labelsort:main:year:iterate} {
+ ctrl:labeldate
+ { label.name
+ dateyear empty$
+ 'skip$
+ { " " * dateyear *
+ dateendyear empty$
+ 'skip$
+ { dateyear dateendyear =
+ 'skip$
+ { dateendyear open.ended =
+ 'skip$
+ { "-" * dateendyear * }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+ 'label.year :=
+ label.year last.year =
+ { last.extra.num #1 + 'last.extra.num :=
+ last.extra.num int.to.str$ 'extradate :=
+ }
+ { #1 'last.extra.num :=
+ "" 'extradate :=
+ label.year 'last.year :=
+ }
+ if$
+ }
+ 'skip$
+ if$
+}
+
+FUNCTION {labelsort:main:year:reverse} {
+ ctrl:labeldate
+ { last.extra "2" =
+ { "1" 'extradate := }
+ 'skip$
+ if$
+ extradate 'last.extra :=
+ }
+ 'skip$
+ if$
+}
+
+FUNCTION {labelsort:main:iterate} {
+ ctrl:skiplab
+ 'skip$
+ { labelsort:main:singletitle
+ labelsort:main:year:iterate
+ }
+ if$
+}
+
+FUNCTION {labelsort:main:reverse} {
+ ctrl:skiplab
+ 'skip$
+ { labelsort:main:singletitle
+ labelsort:main:year:reverse
+ }
+ if$
+}
+
+FUNCTION {labelsort:alph:iterate} {
+ ctrl:labelalpha
+ { labelalpha last.year =
+ { last.extra.num #1 + 'last.extra.num :=
+ last.extra.num int.to.str$ 'extraalpha :=
+ }
+ { #1 'last.extra.num :=
+ "" 'extraalpha :=
+ }
+ if$
+ labelalpha 'last.year :=
+ }
+ 'skip$
+ if$
+}
+
+FUNCTION {labelsort:alph:reverse} {
+ ctrl:labelalpha
+ { last.extra "2" =
+ { "1" 'extraalpha := }
+ 'skip$
+ if$
+ extraalpha 'last.extra :=
+ labelalpha empty$
+ 'skip$
+ { extraalpha empty$
+ { labelalpha ctrl.alphaothers ctrl.sortalphaothers str:replace
+ purify
+ 'sortkey.alpha := }
+ { labelalpha ctrl.alphaothers ctrl.sortalphaothers str:replace
+ purify
+ extraalpha #4 pad.number *
+ 'sortkey.alpha := }
+ if$
+ }
+ if$
+ }
+ 'skip$
+ if$
+}
+
+ITERATE {labelsort:label}
+
+EXECUTE {labelsort:init}
+
+ITERATE {labelsort:hash}
+
+SORT
+
+EXECUTE {labelsort:hash:init}
+
+ITERATE {labelsort:namehash:iterate}
+
+EXECUTE {labelsort:hash:init}
+
+REVERSE {labelsort:namehash:reverse}
+
+EXECUTE {labelsort:init}
+
+ITERATE {labelsort:fullhash}
+
+SORT
+
+EXECUTE {labelsort:hash:init}
+
+ITERATE {labelsort:fullhash:iterate}
+
+EXECUTE {labelsort:hash:init}
+
+REVERSE {labelsort:fullhash:reverse}
+
+EXECUTE {labelsort:init}
+
+ITERATE {labelsort:main}
+
+SORT
+
+EXECUTE {labelsort:init}
+
+EXECUTE {labelsort:main:init}
+
+ITERATE {labelsort:main:iterate}
+
+EXECUTE {labelsort:main:init}
+
+REVERSE {labelsort:main:reverse}
+
+EXECUTE {labelsort:init}
+
+ITERATE {labelsort:alph}
+
+SORT
+
+ITERATE {labelsort:alph:iterate}
+
+REVERSE {labelsort:alph:reverse}
+
+% -------------------------------------------------------------------
+% Sort bibliography, write .bbl file
+% -------------------------------------------------------------------
+
+FUNCTION {mainsort} {
+ ctrl:control
+ { "" }
+ { sortkey:main }
+ if$
+ 'sort.key$ :=
+}
+
+ITERATE {mainsort}
+
+SORT
+
+% This version corresponds to the .bbl version, *not* the biblatex version!
+FUNCTION {output:main:begin} {
+ "% $ biblatex auxiliary file $" write$ newline$
+ "% $ biblatex bbl format version " "$Revision: 4.0 $"
+ #12 entry.max$ substring$ #-3 entry.max$ substring$ * " $" * write$ newline$
+ "% Do not modify the above lines!" write$ newline$
+ "%" write$ newline$
+ "% This is an auxiliary file used by the 'biblatex-ms' package." write$ newline$
+ "% This file may safely be deleted. It will be recreated as" write$ newline$
+ "% required." write$ newline$
+ "%" write$ newline$
+ "\begingroup" write$ newline$
+ "\makeatletter" write$ newline$
+ "\@ifundefined{ver@biblatex-ms.sty}" write$ newline$
+ " {\@latex@error" write$ newline$
+ " {Missing 'biblatex-ms' package}" write$ newline$
+ " {The bibliography requires the 'biblatex-ms' package.}" write$ newline$
+ " \aftergroup\endinput}" write$ newline$
+ " {}" write$ newline$
+ "\endgroup" write$ newline$
+ newline$
+ "\datalist[entry]{" ctrl.sortstr * "/global//global/global}" * write$
+}
+
+FUNCTION {output:main:preamble} {
+ preamble$ empty$
+ 'skip$
+ { newline$
+ "\preamble{%" write$ newline$
+ preamble$ write$ newline$
+ "}" write$ newline$
+ }
+ if$
+}
+
+FUNCTION {output:main:end} {
+ "\enddatalist" write$ newline$
+ "\endinput" write$ newline$
+}
+
+EXECUTE {output:main:begin}
+
+EXECUTE {output:main:preamble}
+
+ITERATE {call.type$}
+
+EXECUTE {output:main:end}
+
+% -------------------------------------------------------------------
diff --git a/macros/latex/contrib/biblatex-ms/doc/biblatex-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/biblatex-ms.pdf
new file mode 100644
index 0000000000..6e1fc932b5
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/biblatex-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/biblatex-ms.tex b/macros/latex/contrib/biblatex-ms/doc/biblatex-ms.tex
new file mode 100644
index 0000000000..586aea9add
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/biblatex-ms.tex
@@ -0,0 +1,17269 @@
+\documentclass{ltxdockit}[2011/03/25]
+\usepackage{btxdockit}
+\usepackage{fontspec}
+\newfontfamily{\quickch}{MS PGothic}
+\usepackage{hyperref}
+\usepackage{zref-xr}
+
+\setmonofont{Courier New}
+\setmainfont[Ligatures=TeX]{Linux Libertine O}
+\setsansfont[Ligatures=TeX]{Linux Biolinum O}
+\newfontfamily\devanagarifont{Shobhika}[%
+ Script=Devanagari,
+ Renderer=Harfbuzz]
+\newcommand*{\textdevanagari}[1]{{\devanagarifont #1}}
+\usepackage[american]{babel}
+\usepackage[strict]{csquotes}
+\usepackage{tabularx}
+\usepackage{longtable}
+\usepackage{booktabs}
+\usepackage{shortvrb}
+\usepackage{pifont}
+\usepackage{microtype}
+\usepackage{typearea}
+\usepackage{mdframed}
+\areaset[current]{370pt}{700pt}
+\lstset{
+ basicstyle=\ttfamily,
+ keepspaces=true,
+ upquote=true,
+ frame=single,
+ breaklines=true,
+ postbreak=\raisebox{0ex}[0ex][0ex]{\ensuremath{\color{red}\hookrightarrow\space}}
+}
+\KOMAoptions{numbers=noenddot}
+\addtokomafont{title}{\sffamily}
+\addtokomafont{disposition}{\spotcolor}
+\addtokomafont{descriptionlabel}{\spotcolor}
+\setkomafont{caption}{\bfseries\sffamily\spotcolor}
+\setkomafont{captionlabel}{\bfseries\sffamily\spotcolor}
+\pretocmd{\cmd}{\sloppy}{}{}
+\pretocmd{\bibfield}{\sloppy}{}{}
+\pretocmd{\bibtype}{\sloppy}{}{}
+\makeatletter
+\RedeclareSectionCommand[%
+ beforeskip=-3.25ex\@plus -1ex \@minus -.2ex,%
+ afterskip=1.5ex \@plus .2ex,%
+]{paragraph}
+\RedeclareSectionCommand[%
+ beforeskip=-3.25ex\@plus -1ex \@minus -.2ex,%
+ indent=\z@,%
+]{subparagraph}
+\makeatother
+
+\MakeAutoQuote{«}{»}
+\MakeAutoQuote*{<}{>}
+\MakeShortVerb{\|}
+
+\newcommand*{\allowbreakhere}{\discretionary{}{}{}}
+
+\newcommand*{\biber}{\sty{biber}\xspace}
+\newcommand*{\biblatex}{\sty{biblatex}\xspace}
+\newcommand*{\biblatexml}{\sty{biblatexml}\xspace}
+\newcommand*{\biblatexhome}{https://sourceforge.net/projects/biblatex/}
+\newcommand*{\biblatexctan}{https://ctan.org/pkg/biblatex/}
+
+\titlepage{%
+ title={The \biblatex Package},
+ subtitle={Programmable Bibliographies and Citations},
+ url={\biblatexhome},
+ author={Philip Kime, Moritz Wemheuer, Philipp Lehman},
+ email={},
+ revision={4.0},
+ date={\today}}
+
+\hypersetup{%
+ pdftitle={The \biblatex Package},
+ pdfsubject={Programmable Bibliographies and Citations},
+ pdfauthor={Philipp Lehman, Philip Kime, Moritz Wemheuer},
+ pdfkeywords={tex, latex, bibtex, bibliography, references, citation}}
+
+% tables
+
+\newcolumntype{H}{>{\sffamily\bfseries\spotcolor}l}
+\newcolumntype{L}{>{\raggedright\let\\=\tabularnewline}p}
+\newcolumntype{R}{>{\raggedleft\let\\=\tabularnewline}p}
+\newcolumntype{C}{>{\centering\let\\=\tabularnewline}p}
+\newcolumntype{V}{>{\raggedright\let\\=\tabularnewline\ttfamily}p}
+
+\newcommand*{\sorttablesetup}{%
+ \tablesetup
+ \ttfamily
+ \def\new{\makebox[1.25em][r]{\ensuremath\rightarrow}\,}%
+ \def\alt{\par\makebox[1.25em][r]{\ensuremath\hookrightarrow}\,}%
+ \def\note##1{\textrm{##1}}}
+
+\newcommand{\tickmarkyes}{\Pisymbol{psy}{183}}
+\newcommand{\tickmarkno}{\textendash}
+\providecommand*{\textln}[1]{#1}
+\providecommand*{\lnstyle}{}
+
+% markup and misc
+
+\setcounter{secnumdepth}{4}
+
+\makeatletter
+
+\newenvironment{nameparts}
+ {\trivlist\item
+ \tabular{@{}ll@{}}}
+ {\endtabular\endtrivlist}
+
+\newenvironment{namedelims}
+ {\trivlist\item
+ \tabularx{\textwidth}{@{}c@{=}l>{\raggedright\let\\=\tabularnewline}X@{}}}
+ {\endtabularx\endtrivlist}
+
+\newenvironment{namesample}
+ {\def\delim##1##2{\@delim{##1}{\normalfont\tiny\bfseries##2}}%
+ \def\@delim##1##2{{%
+ \setbox\@tempboxa\hbox{##1}%
+ \@tempdima=\wd\@tempboxa
+ \wd\@tempboxa=\z@
+ \box\@tempboxa
+ \begingroup\spotcolor
+ \setbox\@tempboxa\hb@xt@\@tempdima{\hss##2\hss}%
+ \vrule\lower1.25ex\box\@tempboxa
+ \endgroup}}%
+ \ttfamily\trivlist
+ \setlength\itemsep{0.5\baselineskip}}
+ {\endtrivlist}
+
+\makeatother
+
+\newrobustcmd*{\Deprecated}{%
+ \textcolor{spot}{\margnotefont Deprecated}}
+\newrobustcmd*{\DeprecatedMark}{%
+ \leavevmode\marginpar{\Deprecated}}
+\newrobustcmd*{\LF}{%
+ \textcolor{spot}{\margnotefont Label field}}
+\newrobustcmd*{\LFMark}{%
+ \leavevmode\marginpar{\LF}}
+\newrobustcmd*{\CSdelim}{%
+ \textcolor{spot}{\margnotefont Context Sensitive}}
+\newrobustcmd*{\CSdelimMark}{%
+ \leavevmode\marginpar{\CSdelim}}
+
+
+\newcommand*{\seestyleexample}[1]{%
+ \leavevmode
+ \marginpar{%
+ \raggedright
+ \footnotesize
+ Style example:\\
+ \href{file:examples/#1.pdf}{local},
+ \href{http://mirrors.ctan.org/macros/latex/contrib/biblatex/doc/examples/#1.pdf}
+ {online}.}%
+ \ignorespaces}
+
+% following snippet is based on code by Michael Ummels (TeX Stack Exchange)
+% <http://tex.stackexchange.com/a/13073/8305>
+\makeatletter
+ \newcommand\fnurl@[1]{\footnote{\url@{#1}}}
+ \DeclareRobustCommand{\fnurl}{\hyper@normalise\fnurl@}
+\makeatother
+
+\hyphenation{%
+ star-red
+ bib-lio-gra-phy
+ white-space
+}
+
+\begin{document}
+
+\printtitlepage
+\tableofcontents
+\listoftables
+
+\section{Introduction}
+\label{int}
+
+\textcolor{red}{\textbf{NOTE}: This is the documentation for the
+ <multiscript> version of \biblatex. The package name is
+ <\texttt{biblatex-ms}> and it requires the multiscript version of \biber
+ (\texttt{biber-ms}). This version is expected in the future to be the
+ default and only version of \biblatex but currently, in order to garner
+ feedback and testing, it is a separate package which can be installed in
+ parallel with the standard version. It should be fully backwards
+ compatible with the standard \biblatex package but is considered
+ experimental and feedback is encourage via the \biblatex github
+ repository\fnurl{https://github.com/plk/biblatex}.}\\
+
+This document is a systematic reference manual for the \biblatex package. Look at the sample documents which come with \biblatex to get a first impression.\fnurl{https://ctan.org/tex-archive/macros/latex/contrib/biblatex/doc/examples}
+For a quick start guide, browse \secref{int:abt, bib:typ, bib:fld, bib:use, use:opt, use:xbx, use:bib, use:cit, use:use}.
+
+\subsection[About]{About \biblatex}
+\label{int:abt}
+
+This package provides advanced bibliographic facilities for use with \latex. The package is a complete reimplementation of the bibliographic facilities provided by \latex. The \biblatex\ package works with the \enquote{backend} (program) \biber, which is used to process \bibtex\ format data files and them performs all sorting, label generation (and a great deal more). Formatting of the bibliography is entirely controlled by \tex\ macros. Good working knowledge in \latex should be sufficient to design new bibliography and citation styles. This package also supports subdivided bibliographies, multiple bibliographies within one document, and separate lists of bibliographic information such as abbreviations of various fields. Bibliographies may be subdivided into parts and\slash or segmented by topics. Just like the bibliography styles, all citation commands may be freely defined. Features such as full Unicode support for bibliography data, customisable sorting, multiple bibliographies with different sorting, customisable labels and dynamic data modification are available. Please refer to \secref{int:pre:bibercompat} for information on \biber/\biblatex version compatibility. The package is completely localised and can interface with the \sty{babel} and \sty{polyglossia} packages. Please refer to \tabref{bib:fld:tab1} for a list of languages currently supported by this package.
+
+\subsection{License}
+
+Copyright \textcopyright\ 2006--2012 Philipp Lehman, 2012--2017 Philip Kime, Audrey Boruvka, Joseph Wright, 2018-- Philip Kime and Moritz Wemheuer. Permission is granted to copy, distribute and\slash or modify this software under the terms of the \lppl, version~1.3.\fnurl{https://www.latex-project.org/lppl.txt}
+
+\subsection{Feedback}
+\label{int:feb}
+
+Please use the \biblatex project page on GitHub to report bugs and submit feature requests.\fnurl{https://github.com/plk/biblatex} Before making a feature request, please ensure that you have thoroughly studied this manual. If you do not want to report a bug or request a feature but are simply in need of assistance, you might want to consider posting your question on the \texttt{comp.text.tex} newsgroup or \tex-\latex Stack Exchange.\fnurl{https://tex.stackexchange.com/questions/tagged/biblatex}
+
+\subsection{Acknowledgements}
+
+The package was originally written by Philipp Lehman and much of his excellent
+original code remains in the core. Philip Kime took over the package in
+2012 with Moritz Wemheuer making regular and valuable contributions from 2017.
+The main authors would like to acknowledge the valuable help of Audrey
+Boruvka and Joseph Wright who helped with the transition of ownership in
+2012 and following years.
+
+The language modules of this package are made possible thanks to the following contributors:\\
+Ander Zarketa-Astigarraga (Basque);
+Augusto Ritter Stoffel, Mateus Araújo, Gustavo Barros (Brazilian);
+Kaloyan Ganev (Bulgarian);
+Sebastià Vila-Marta (Catalan);
+Ivo Pletikosić (Croatian);
+Michal Hoftich (Czech);
+Christian Mondrup, Jonas Nyrup (Danish);
+Johannes Wilm (Danish\slash Norwegian);
+Alexander van Loon, Pieter Belmans, Hendrik Maryns (Dutch);
+Kristian Kankainen, Benson Muite (Estonian);
+Hannu Väisänen, Janne Kujanpää (Finnish);
+Denis Bitouzé (French);
+Apostolos Syropoulos, Prokopis (Greek);
+Márton Marczell, Bence Ferdinandy (Hungarian);
+Baldur Kristinsson (Icelandic);
+Enrico Gregorio, Andrea Marchitelli (Italian);
+Rihards Skuja (Latvian);
+Valdemaras Klumbys (Lithuanian);
+\textdevanagari{निरंजन} (Marathi);
+Håkon Malmedal, Hans Fredrik Nordhaug (Norwegian);
+Anastasia Kandulina, Yuriy Chernyshov (Polish);
+José Carlos Santos (Portuguese);
+Patrick Danilevici (Romanian);
+Oleg Domanov (Russian);
+Andrej Radović (Serbian);
+Martin Vrábel, Dávid Lupták (Slovak);
+Tea Tušar, Bogdan Filipič (Slovene);
+Ignacio Fernández Galván (Spanish);
+Per Starbäck, Carl-Gustav Werner, Filip Åsblom (Swedish);
+Abdulkerim Gok (Turkish);
+Sergiy M. Ponomarenko (Ukrainian).
+
+\subsection{Prerequisites}
+\label{int:pre}
+
+This section gives an overview of all resources required by this package and discusses compatibility issues.
+
+\subsubsection{Requirements}
+\label{int:pre:req}
+
+The resources listed in this section are strictly required for \biblatex to function. The package will not work if they are not available.
+
+\begin{marglist}
+
+\item[\etex]
+The \biblatex package requires \etex. \tex distributions have been providing \etex binaries for quite some time, the popular distributions use them by default these days. The \biblatex package checks if it is running under \etex. Simply try compiling your documents as you usually do, the chances are that it just works. If you get an error message, try compiling the document with \bin{elatex} instead of \bin{latex} or \bin{pdfelatex} instead of \bin{pdflatex}, respectively.
+
+\item[\biber]
+\biber is the backend of \biblatex used to transfer data from source files to the \latex code. \biber comes with TeX Live and is also available from SourceForge.\fnurl{https://biblatex-biber.sourceforge.net/}. \biber uses the \texttt{btparse} C library for \bibtex format file parsing which aimed to be compatible with \bibtex's parsing rules but also aimed at correcting some of the common problems. For details, see the manual page for the Perl \texttt{Text::BibTeX} module\fnurl{https://metacpan.org/release/Text-BibTeX}.
+
+\item[etoolbox]
+This \latex package, which is loaded automatically, provides generic programming facilities required by \biblatex. It is available from \acr{CTAN}.\fnurl{https://ctan.org/pkg/etoolbox}
+
+\item[kvoptions]
+This \latex package, which is also loaded automatically, is used for internal option handling. It is available from \acr{CTAN}.\fnurl{https://ctan.org/pkg/kvoptions}
+
+\item[logreq]
+This \latex package, which is also loaded automatically, provides a frontend for writing machine-readable messages to an auxiliary log file. It is available from \acr{CTAN}.\fnurl{https://ctan.org/pkg/logreq/}
+
+\item[pdftexcmds]
+This \latex package, which is loaded automatically, implements \pdftex primitives for \luatex, it also offers a unified interface for these primitives across engines. It is available from \acr{CTAN}.\fnurl{https://ctan.org/pkg/pdftexcmds/}
+
+\biblatex uses \sty{pdftexcmds} to access the MD5 hash primitives, so version~0.27 (2018/01/30) or above is strongly recommended.
+
+\end{marglist}
+
+Apart from the above resources, \biblatex also requires the standard \latex packages \sty{keyval} and \sty{ifthen} as well as the \sty{url} package. These package are included in all common \tex distributions and will be loaded automatically.
+
+\subsubsection{Recommended Packages}
+\label{int:pre:rec}
+
+The packages listed in this section are not strictly required for \biblatex to function, but they provide recommended additional functions or enhance existing features.
+
+\begin{marglist}
+
+\item[babel/polyglossia]
+The \sty{babel} and \sty{polyglossia} packages provides the core architecture for multilingual typesetting. If you are writing in a language other than American English, using one of these packages is strongly recommended. You should load \sty{babel} or \sty{polyglossia} before \biblatex and then \biblatex will detect \sty{babel} or \sty{polyglossia} automatically. (While \sty{babel} may be loaded after \biblatex if so desired, \sty{polyglossia} must always be loaded before \biblatex.)
+
+\biblatex has only limited support for \sty{polyglossia} versions prior to~v1.45 (2019/10/27). Additional useful features for \biblatex were added in version~1.49. If \sty{polyglossia} is used, it should be updated to version~1.49 (2020/04/08) or above.
+
+The minimum supported \sty{babel} version is~v3.9r (2016/04/23).
+
+\item[csquotes]
+If this package is available, \biblatex will use its language sensitive quotation facilities to enclose certain titles in quotation marks. If not, \biblatex uses quotes suitable for American English as a fallback. When writing in a language other than American English, loading \sty{csquotes} is strongly recommended.\fnurl{https://ctan.org/pkg/csquotes/}
+
+\end{marglist}
+
+\subsubsection{Additional Useful Packages}
+\label{int:pre:add}
+
+The packages listed in this section are not required for \biblatex to function, but provide additional specialist functions or enhance existing features. These packages generally only need to be loaded if their functionality is explicitly desired. The package loading order usually does not matter.
+
+\begin{marglist}
+
+\item[xpatch]
+The \sty{xpatch} package extends the patching commands of \sty{etoolbox} to \biblatex bibliography macros, drivers and formatting directives.\fnurl{https://ctan.org/pkg/xpatch/} Its commands are useful to apply surgical-precision changes to bibliography macros, drivers or formatting directives without having to restate the whole definition to change it. The \biblatex core does not need or use these patching commands and styles that make use of them should load the package themselves.
+
+\end{marglist}
+
+\subsubsection{Compatible Classes and Packages}
+\label{int:pre:cmp}
+
+The \biblatex package provides dedicated compatibility code for the classes and packages listed in this section.
+
+\begin{marglist}
+
+\item[hyperref]
+The \sty{hyperref} package transforms citations into hyperlinks. See the \opt{hyperref} and \opt{backref} package options in \secref{use:opt:pre:gen} for further details. When using the \sty{hyperref} package, it is preferable to load it after \biblatex.
+
+\item[showkeys]
+The \sty{showkeys} package prints the internal keys of, among other things, citations in the text and items in the bibliography. The package loading order does not matter.
+
+\item[memoir]
+When using the \sty{memoir} class, the default bibliography headings are adapted such that they blend well with the default layout of this class. See \secref{use:cav:mem} for further usage hints.
+
+\item[\acr{KOMA}-Script]
+When using any of the \sty{scrartcl}, \sty{scrbook}, or \sty{scrreprt} classes, the default bibliography headings are adapted such that they blend with the default layout of these classes. See \secref{use:cav:scr} for further usage hints.
+
+If available \biblatex makes use of some of the more recent of \acr{KOMA}-Script's \emph{do-hooks}. The relevant hooks are present from version~3.27 (2019/10/12) onwards, which is therefore the minimum version recommendation.
+
+\end{marglist}
+
+\subsubsection{Incompatible Packages}
+\label{int:pre:inc}
+
+The packages listed in this section are not compatible with \biblatex. Since it reimplements the bibliographic facilities of \latex from the ground up, \biblatex naturally conflicts with all packages modifying the same facilities. This is not specific to \biblatex. Some of the packages listed below are also incompatible with each other for the same reason.
+
+\begin{marglist}
+
+\item[babelbib]
+The \sty{babelbib} package provides support for multilingual bibliographies. This is a standard feature of \biblatex. Use the \bibfield{langid} field and the package option \opt{autolang} for similar functionality. Note that \biblatex automatically adjusts to the main document language if \sty{babel} or \sty{polyglossia} is loaded. You only need the above mentioned features if you want to switch languages on a per"=entry basis within the bibliography. See \secref{bib:fld:spc, use:opt:pre:gen} for details. Also see \secref{use:lng}.
+
+\item[backref]
+The \sty{backref} package creates back references in the bibliography. See the package options \opt{hyperref} and \opt{backref} in \secref{use:opt:pre:gen} for comparable functionality.
+
+\item[bibtopic]
+The \sty{bibtopic} package provides support for bibliographies subdivided by topic, type, or other criteria. For bibliographies subdivided by topic, see the category feature in \secref{use:bib:cat} and the corresponding filters in \secref{use:bib:bib}. Alternatively, you may use the \bibfield{keywords} field in conjunction with the \opt{keyword} and \opt{notkeyword} filters for comparable functionality, see \secref{bib:fld:spc, use:bib:bib} for details. For bibliographies subdivided by type, use the \opt{type} and \opt{nottype} filters. Also see \secref{use:use:div} for examples.
+
+\item[bibunits]
+The \sty{bibunits} package provides support for multiple partial (\eg per chapter) bibliographies. See \sty{chapterbib}.
+
+\item[chapterbib]
+The \sty{chapterbib} package provides support for multiple partial bibliographies. Use the \env{refsection} environment and the \opt{section} filter for comparable functionality. Alternatively, you might also want to use the \env{refsegment} environment and the \opt{segment} filter. See \secref{use:bib:sec, use:bib:seg, use:bib:bib} for details. Also see \secref{use:use:mlt} for examples.
+
+\item[cite]
+The \sty{cite} package automatically sorts numeric citations and can compress a list of consecutive numbers to a range. It also makes the punctuation used in citations configurable. For sorted and compressed numeric citations, see the \opt{sortcites} package option in \secref{use:opt:pre:gen} and the \texttt{numeric-comp} citation style in \secref{use:xbx:cbx}. For configurable punctuation, see \secref{use:fmt}.
+
+\item[citeref]
+Another package for creating back references in the bibliography. See \sty{backref}.
+
+\item[inlinebib]
+The \sty{inlinebib} package is designed for traditional citations given in footnotes. For comparable functionality, see the verbose citation styles in \secref{use:xbx:cbx}.
+
+\item[jurabib]
+Originally designed for citations in law studies and (mostly German) judicial documents, the \sty{jurabib} package also provides features aimed at users in the humanities. In terms of the features provided, there are some similarities between \sty{jurabib} and \biblatex but the approaches taken by both packages are quite different. Since both \sty{jurabib} and \biblatex are full"=featured packages, the list of similarities and differences is too long to be discussed here.
+
+\item[mcite]
+The \sty{mcite} package provides support for grouped citations, \ie multiple items can be cited as a single reference and listed as a single block in the bibliography. The citation groups are defined as the items are cited. This only works with unsorted bibliographies. The \biblatex package also supports grouped citations, which are called <entry sets> or <reference sets> in this manual. See \secref{use:use:set,use:bib:set,use:cit:mct} for details.
+
+\item[mciteplus]
+A significantly enhanced reimplementation of the \sty{mcite} package which supports grouping in sorted bibliographies. See \sty{mcite}.
+
+\item[multibib]
+The \sty{multibib} package provides support for bibliographies subdivided by topic or other criteria. See \sty{bibtopic}.
+
+\item[natbib]
+The \sty{natbib} package supports numeric and author"=year citation schemes, incorporating sorting and compression code found in the \sty{cite} package. It also provides additional citation commands and several configuration options. See the \texttt{numeric} and \texttt{author-year} citation styles and their variants in \secref{use:xbx:cbx}, the \opt{sortcites} package option in \secref{use:opt:pre:gen}, the citation commands in \secref{use:cit}, and the facilities discussed in \secref{use:bib:hdg, use:bib:nts, use:fmt} for comparable functionality. Also see \secref{use:cit:nat}.
+
+\item[splitbib]
+The \sty{splitbib} package provides support for bibliographies subdivided by topic. See \sty{bibtopic}.
+
+\item[titlesec]
+The \sty{titlesec} package redefines user-level document division commands such as \cmd{chapter} or \cmd{section}. This approach is not compatible with internal command changes applied by the \biblatex \opt{refsection}, \opt{refsegment} and \opt{citereset} option settings described in \secref{use:opt:pre:gen}.
+
+\item[ucs]
+The \sty{ucs} package provides support for \utf encoded input, but it does so in a way incompatible with \biblatex.
+
+If you get an error about \sty{ucs} being loaded, but you don't load it explicitly in your preamble, check that you don't load \sty{inputenc}'s \file{utf8x} module: \verb|\usepackage[utf8x]{inputenc}| will also load \sty{ucs}.
+
+Instead of \sty{ucs}/\file{utf8x} use a Unicode engine such as \xetex or \luatex if you want full Unicode support. If you use \pdftex or \tex, the Unicode characters predefined by the \latex format are usually enough for many use cases (this is true for \latex from April 2018 or later, in older versions load \sty{inputenc} with the \file{utf8} module) and missing characters can be defined using \cmd{DeclareUnicodeCharacter} or \sty{newunicodechar}'s \cmd{newunicodechar}.
+
+\item[etextools]
+The \sty{etextools} package provides enhancements to list macros defined by \sty{etoolbox} and a few other tools for command definitions.
+The package redefines list handling macros in a way incompatible with \biblatex.
+
+If you must load the \sty{etextools} package at all costs, define the control sequence \cs{blx@noerroretextools} before you load \biblatex.
+If \cs{blx@noerroretextools} is defined, no error will be issued if \sty{etextools} is loaded, the message is degraded to a warning instead.
+In that case you need to make sure that all redefined macros used by \biblatex\ (currently only \cmd{forlistloop}) have their original \sty{etoolbox} definitions when \biblatex\ is loaded.
+
+\end{marglist}
+
+\subsubsection{Compatibility Matrix for \biber}
+\label{int:pre:bibercompat}
+
+\biber\ versions are closely coupled with \biblatex\ versions. You
+need to have the right combination of the two. \biber\ will throw a fatal error
+during processing if it encounters information which comes from a
+\biblatex\ version which is incompatible. \Tabref{tab:int:pre:bibercompat} shows a
+compatibility matrix for the recent versions.
+
+\begin{table}
+\caption{\biber/\biblatex\ compatibility matrix}
+\label{tab:int:pre:bibercompat}
+\tablesetup\centering
+\begin{tabular}{cc}
+\toprule
+\sffamily\bfseries\spotcolor Biber version
+ & \sffamily\bfseries\spotcolor \biblatex\ version\\
+\midrule
+2.18 & 3.18\\
+2.17 & 3.17\\
+2.16 & 3.16\\
+2.15 & 3.15\\
+2.14 & 3.14\\
+2.13 & 3.13\\
+2.12 & 3.12\\
+2.11 & 3.11\\
+2.10 & 3.10\\
+2.9 & 3.9\\
+2.8 & 3.8\\
+2.7 & 3.7\\
+2.6 & 3.5, 3.6\\
+2.5 & 3.4\\
+2.4 & 3.3\\
+2.3 & 3.2\\
+2.2 & 3.1\\
+2.1 & 3.0\\
+2.0 & 3.0\\
+1.9 & 2.9\\
+1.8 & 2.8\\
+1.7 & 2.7\\
+1.6 & 2.6\\
+1.5 & 2.5\\
+1.4 & 2.4\\
+1.3 & 2.3\\
+1.2 & 2.1, 2.2\\
+1.1 & 2.1\\
+1.0 & 2.0\\
+0.9.9 & 1.7x\\
+0.9.8 & 1.7x\\
+0.9.7 & 1.7x\\
+0.9.6 & 1.7x\\
+0.9.5 & 1.6x\\
+0.9.4 & 1.5x\\
+0.9.3 & 1.5x\\
+0.9.2 & 1.4x\\
+0.9.1 & 1.4x\\
+0.9 & 1.4x\\
+\bottomrule
+\end{tabular}
+\end{table}
+
+\section{Database Guide}
+\label{bib}
+
+This section describes the default data model defined in the \file{blx-dm.def} file which is part of \path{biblatex}. The data model is defined using the macros documented in \secref{aut:ctm:dm}. It is possible to redefine the data model which both \biblatex and \biber use so that datasources can contain new entrytypes and fields (which of course will need style support). The data model specification also allows for constraints to be defined so that data sources can be validated against the data model (using \biber's \opt{--validate-datamodel} option). Users who want to customise the data model need to look at the \file{blx-dm.def} file and to read \secref{aut:ctm:dm}.
+
+All entry types and field names are given in all-lowercase form here. This is how the entry types and field names are given in the data model. While the \biber/\bibtex input side is case insensitive, the \latex side is case sensitive and uses the exact capitalisation from the data model. This means that the input in the \file{bib} file may use any capitalisation of entry types and field names, but when the fields are used in the \latex document---for example in \cmd{citefield}---the capitalisation must match the captalisation in the data model, for standard types and fields that would be all lowercase.
+
+\subsection{Entry Types}
+\label{bib:typ}
+
+This section gives an overview of the entry types supported by the default \biblatex data model along with the fields supported by each type.
+
+\subsubsection{Regular Types}
+\label{bib:typ:blx}
+
+The lists below indicate the fields supported by each entry type. Note that the mapping of fields to an entry type is ultimately at the discretion of the bibliography style. The lists below therefore serve two purposes. They indicate the fields supported by the standard styles which come with this package and they also serve as a model for custom styles. Note that the <required> fields are not strictly required in all cases, see \secref{bib:use:key} for details. The fields marked as <optional> are optional in a technical sense. Bibliographical formatting rules usually require more than just the <required> fields. The default data model defined a few constraints for the format of date fields, ISBNs and some special fields like \bibfield{gender} but the constraints are only used if validating against the data model with \biber's \opt{--validate-datamodel} option. Generic fields like \bibfield{abstract} and \bibfield{annotation} or \bibfield{label} and \bibfield{shorthand} are not included in the lists below because they are independent of the entry type. The special fields discussed in \secref{bib:fld:spc}, which are also independent of the entry type, are not included in the lists either. See the default data model specification in the file \file{blx-dm.def} which comes with \biblatex for a complete specification.
+
+The <alias> relation referred to in this subsection is the <soft alias> defined with \cmd{DeclareBibliographyAlias}. That means that the alias will use the same bibliography driver as the type it is aliased to, but that its type-specific formatting is still handled independently of the aliased type.
+
+\begin{typelist}
+
+\typeitem{article}
+
+An article in a journal, magazine, newspaper, or other periodical which forms a self"=contained unit with its own title. The title of the periodical is given in the \bibfield{journaltitle} field. If the issue has its own title in addition to the main title of the periodical, it goes in the \bibfield{issuetitle} field. Note that \bibfield{editor} and related fields refer to the journal while \bibfield{translator} and related fields refer to the article.
+
+\reqitem{author, title, journaltitle, year/date}
+\optitem{translator, annotator, commentator, subtitle, titleaddon, editor, editora, editorb, editorc, journalsubtitle, journaltitleaddon, issuetitle, issuesubtitle, issuetitleaddon, language, origlanguage, series, volume, number, eid, issue, month, pages, version, note, issn, addendum, pubstate, doi, eprint, eprintclass, eprinttype, url, urldate}
+
+\typeitem{book}
+
+A single"=volume book with one or more authors where the authors share credit for the work as a whole. This entry type also covers the function of the \bibtype{inbook} type of traditional \bibtex, see \secref{bib:use:inb} for details.
+
+\reqitem{author, title, year/date}
+\optitem{editor, editora, editorb, editorc, translator, annotator, commentator, introduction, foreword, afterword, subtitle, titleaddon, maintitle, mainsubtitle, maintitleaddon, language, origlanguage, volume, part, edition, volumes, series, number, note, publisher, location, isbn, eid, chapter, pages, pagetotal, addendum, pubstate, doi, eprint, eprintclass, eprinttype, url, urldate}
+
+\typeitem{mvbook}
+
+A multi"=volume \bibtype{book}. For backwards compatibility, multi"=volume books are also supported by the entry type \bibtype{book}. However, it is advisable to make use of the dedicated entry type \bibtype{mvbook}.
+
+\reqitem{author, title, year/date}
+\optitem{editor, editora, editorb, editorc, translator, annotator, commentator, introduction, foreword, afterword, subtitle, titleaddon, language, origlanguage, edition, volumes, series, number, note, publisher, location, isbn, pagetotal, addendum, pubstate, doi, eprint, eprintclass, eprinttype, url, urldate}
+
+\typeitem{inbook}
+
+A part of a book which forms a self"=contained unit with its own title. Note that the profile of this entry type is different from standard \bibtex, see \secref{bib:use:inb}.
+
+\reqitem{author, title, booktitle, year/date}
+\optitem{bookauthor, editor, editora, editorb, editorc, translator, annotator, commentator, introduction, foreword, afterword, subtitle, titleaddon, maintitle, mainsubtitle, maintitleaddon, booksubtitle, booktitleaddon, language, origlanguage, volume, part, edition, volumes, series, number, note, publisher, location, isbn, eid, chapter, pages, addendum, pubstate, doi, eprint, eprintclass, eprinttype, url, urldate}
+
+\typeitem{bookinbook}
+
+This type is similar to \bibtype{inbook} but intended for works originally published as a stand-alone book. A typical example are books reprinted in the collected works of an author.
+
+\typeitem{suppbook}
+
+Supplemental material in a \bibtype{book}. This type is closely related to the \bibtype{inbook} entry type. While \bibtype{inbook} is primarily intended for a part of a book with its own title (\eg a single essay in a collection of essays by the same author), this type is provided for elements such as prefaces, introductions, forewords, afterwords, etc. which often have a generic title only. Style guides may require such items to be formatted differently from other \bibtype{inbook} items. The standard styles will treat this entry type as an alias for \bibtype{inbook}.
+
+\typeitem{booklet}
+
+A book"=like work without a formal publisher or sponsoring institution. Use the field \bibfield{howpublished} to supply publishing information in free format, if applicable. The field \bibfield{type} may be useful as well.
+
+\reqitem{author/editor, title, year/date}
+\optitem{subtitle, titleaddon, language, howpublished, type, note, location, eid, chapter, pages, pagetotal, addendum, pubstate, doi, eprint, eprintclass, eprinttype, url, urldate}
+
+\typeitem{collection}
+
+A single"=volume collection with multiple, self"=contained contributions by distinct authors which have their own title. The work as a whole has no overall author but it will usually have an editor.
+
+\reqitem{editor, title, year/date}
+\optitem{editora, editorb, editorc, translator, annotator, commentator, introduction, foreword, afterword, subtitle, titleaddon, maintitle, mainsubtitle, maintitleaddon, language, origlanguage, volume, part, edition, volumes, series, number, note, publisher, location, isbn, eid, chapter, pages, pagetotal, addendum, pubstate, doi, eprint, eprintclass, eprinttype, url, urldate}
+
+\typeitem{mvcollection}
+
+A multi"=volume \bibtype{collection}. For backwards compatibility, multi"=volume collections are also supported by the entry type \bibtype{collection}. However, it is advisable to make use of the dedicated entry type \bibtype{mvcollection}.
+
+\reqitem{editor, title, year/date}
+\optitem{editora, editorb, editorc, translator, annotator, commentator, introduction, foreword, afterword, subtitle, titleaddon, language, origlanguage, edition, volumes, series, number, note, publisher, location, isbn, pagetotal, addendum, pubstate, doi, eprint, eprintclass, eprinttype, url, urldate}
+
+\typeitem{incollection}
+
+A contribution to a collection which forms a self"=contained unit with a distinct author and title. The \bibfield{author} refers to the \bibfield{title}, the \bibfield{editor} to the \bibfield{booktitle}, \ie the title of the collection.
+
+\reqitem{author, title, editor, booktitle, year/date}
+\optitem{editor, editora, editorb, editorc, translator, annotator, commentator, introduction, foreword, afterword, subtitle, titleaddon, maintitle, mainsubtitle, maintitleaddon, booksubtitle, booktitleaddon, language, origlanguage, volume, part, edition, volumes, series, number, note, publisher, location, isbn, eid, chapter, pages, addendum, pubstate, doi, eprint, eprintclass, eprinttype, url, urldate}
+
+\typeitem{suppcollection}
+
+Supplemental material in a \bibtype{collection}. This type is similar to \bibtype{suppbook} but related to the \bibtype{collection} entry type. The standard styles will treat this entry type as an alias for \bibtype{incollection}.
+
+\typeitem{dataset}
+
+A data set or a similar collection of (mostly) raw data.
+
+\reqitem{author/editor, title, year/date}
+\optitem{subtitle, titleaddon, language, edition, type, series, number, version, note, organization, publisher, location, addendum, pubstate, doi, eprint, eprintclass, eprinttype, url, urldate}
+
+\typeitem{manual}
+
+Technical or other documentation, not necessarily in printed form. The \bibfield{author} or \bibfield{editor} is omissible in terms of \secref{bib:use:key}.
+
+\reqitem{author/editor, title, year/date}
+\optitem{subtitle, titleaddon, language, edition, type, series, number, version, note, organization, publisher, location, isbn, eid, chapter, pages, pagetotal, addendum, pubstate, doi, eprint, eprintclass, eprinttype, url, urldate}
+
+\typeitem{misc}
+
+A fallback type for entries which do not fit into any other category. Use the field \bibfield{howpublished} to supply publishing information in free format, if applicable. The field \bibfield{type} may be useful as well. \bibfield{author}, \bibfield{editor}, and \bibfield{year} are omissible in terms of \secref{bib:use:key}.
+
+\reqitem{author/editor, title, year/date}
+\optitem{subtitle, titleaddon, language, howpublished, type, version, note, organization, location, month, addendum, pubstate, doi, eprint, eprintclass, eprinttype, url, urldate}
+
+\typeitem{online}
+
+An online resource. \bibfield{author}, \bibfield{editor}, and \bibfield{year} are omissible in terms of \secref{bib:use:key}. This entry type is intended for sources such as web sites which are intrinsically online resources. Note that all entry types support the \bibfield{url} field. For example, when adding an article from an online journal, it may be preferable to use the \bibtype{article} type and its \bibfield{url} field.
+
+\reqitem{author/editor, title, year/date, doi/eprint/url}
+\optitem{subtitle, titleaddon, language, version, note, organization, month, addendum, pubstate, eprintclass, eprinttype, urldate}
+
+\typeitem{patent}
+
+A patent or patent request. The number or record token is given in the \bibfield{number} field. Use the \bibfield{type} field to specify the type and the \bibfield{location} field to indicate the scope of the patent, if different from the scope implied by the \bibfield{type}. Note that the \bibfield{location} field is treated as a key list with this entry type, see \secref{bib:fld:typ} for details.
+
+\reqitem{author, title, number, year/date}
+\optitem{holder, subtitle, titleaddon, type, version, location, note, month, addendum, pubstate, doi, eprint, eprintclass, eprinttype, url, urldate}
+
+\typeitem{periodical}
+
+An complete issue of a periodical, such as a special issue of a journal. The title of the periodical is given in the \bibfield{title} field. If the issue has its own title in addition to the main title of the periodical, it goes in the \bibfield{issuetitle} field. The \bibfield{editor} is omissible in terms of \secref{bib:use:key}.
+
+\reqitem{editor, title, year/date}
+\optitem{editora, editorb, editorc, subtitle, titleaddon, issuetitle, issuesubtitle, issuetitleaddon, language, series, volume, number, issue, month, note, issn, addendum, pubstate, doi, eprint, eprintclass, eprinttype, url, urldate}
+
+\typeitem{suppperiodical}
+
+Supplemental material in a \bibtype{periodical}. This type is similar to \bibtype{suppbook} but related to the \bibtype{periodical} entry type. The role of this entry type may be more obvious if you bear in mind that the \bibtype{article} type could also be called \bibtype{inperiodical}. This type may be useful when referring to items such as regular columns, obituaries, letters to the editor, etc. which only have a generic title. Style guides may require such items to be formatted differently from articles in the strict sense of the word. The standard styles will treat this entry type as an alias for \bibtype{article}.
+
+\typeitem{proceedings}
+
+A single"=volume conference proceedings. This type is very similar to \bibtype{collection}. It supports an optional \bibfield{organization} field which holds the sponsoring institution. The \bibfield{editor} is omissible in terms of \secref{bib:use:key}.
+
+\reqitem{title, year/date}
+\optitem{editor, subtitle, titleaddon, maintitle, mainsubtitle, maintitleaddon, eventtitle, eventtitleaddon, eventdate, venue, language, volume, part, volumes, series, number, note, organization, publisher, location, month, isbn, eid, chapter, pages, pagetotal, addendum, pubstate, doi, eprint, eprintclass, eprinttype, url, urldate}
+
+\typeitem{mvproceedings}
+
+A multi"=volume \bibtype{proceedings} entry. For backwards compatibility, multi"=volume proceedings are also supported by the entry type \bibtype{proceedings}. However, it is advisable to make use of the dedicated entry type \bibtype{mvproceedings}
+
+\reqitem{title, year/date}
+\optitem{editor, subtitle, titleaddon, eventtitle, eventtitleaddon, eventdate, venue, language, volumes, series, number, note, organization, publisher, location, month, isbn, pagetotal, addendum, pubstate, doi, eprint, eprintclass, eprinttype, url, urldate}
+
+\typeitem{inproceedings}
+
+An article in a conference proceedings. This type is similar to \bibtype{incollection}. It supports an optional \bibfield{organization} field.
+
+\reqitem{author, title, booktitle, year/date}
+\optitem{editor, subtitle, titleaddon, maintitle, mainsubtitle, maintitleaddon, booksubtitle, booktitleaddon, eventtitle, eventtitleaddon, eventdate, venue, language, volume, part, volumes, series, number, note, organization, publisher, location, month, isbn, eid, chapter, pages, addendum, pubstate, doi, eprint, eprintclass, eprinttype, url, urldate}
+
+\typeitem{reference}
+
+A single"=volume work of reference such as an encyclopedia or a dictionary. This is a more specific variant of the generic \bibtype{collection} entry type. The standard styles will treat this entry type as an alias for \bibtype{collection}.
+
+\typeitem{mvreference}
+
+A multi"=volume \bibtype{reference} entry. The standard styles will treat this entry type as an alias for \bibtype{mvcollection}. For backwards compatibility, multi"=volume references are also supported by the entry type \bibtype{reference}. However, it is advisable to make use of the dedicated entry type \bibtype{mvreference}.
+
+\typeitem{inreference}
+
+An article in a work of reference. This is a more specific variant of the generic \bibtype{incollection} entry type. The standard styles will treat this entry type as an alias for \bibtype{incollection}.
+
+\typeitem{report}
+
+A technical report, research report, or white paper published by a university or some other institution. Use the \bibfield{type} field to specify the type of report. The sponsoring institution goes in the \bibfield{institution} field.
+
+\reqitem{author, title, type, institution, year/date}
+\optitem{subtitle, titleaddon, language, number, version, note, location, month, isrn, eid, chapter, pages, pagetotal, addendum, pubstate, doi, eprint, eprintclass, eprinttype, url, urldate}
+
+\typeitem{set}
+
+An entry set. This entry type is special, see \secref{use:use:set} for details.
+
+\typeitem{software}
+
+Computer software. The standard styles will treat this entry type as an alias for \bibtype{misc}.
+
+\typeitem{thesis}
+
+A thesis written for an educational institution to satisfy the requirements for a degree. Use the \bibfield{type} field to specify the type of thesis.
+
+\reqitem{author, title, type, institution, year/date}
+\optitem{subtitle, titleaddon, language, note, location, month, isbn, eid, chapter, pages, pagetotal, addendum, pubstate, doi, eprint, eprintclass, eprinttype, url, urldate}
+
+\typeitem{unpublished}
+
+A work with an author and a title which has not been formally published, such as a manuscript or the script of a talk. Use the fields \bibfield{howpublished} and \bibfield{note} to supply additional information in free format, if applicable.
+
+\reqitem{author, title, year/date}
+\optitem{subtitle, titleaddon, type, eventtitle, eventtitleaddon, eventdate, venue, language, howpublished, note, location, isbn, month, addendum, pubstate, doi, eprint, eprintclass, eprinttype, url, urldate}
+
+\typeitem{xdata}
+
+This entry type is special. \bibtype{xdata} entries hold data which may be inherited by other entries using the \bibfield{xdata} field. Entries of this type only serve as data containers; they may not be cited or added to the bibliography. See \secref{use:use:xdat} for details.
+
+\typeitem{custom[a--f]}
+
+Custom types for special bibliography styles. The standard styles defined no bibliography drivers for these types and will fall back to using the driver for \bibtype{misc}.
+
+\end{typelist}
+
+\subsubsection{Type Aliases}
+\label{bib:typ:als}
+
+The entry types listed in this section are provided for backwards compatibility with traditional \bibtex styles. These aliases are resolved by the backend as the data is processed. \biblatex and the styles will see only the entry type the alias points to (the target), not the alias name (the source). In particular \biblatex-side per-type operations like type-specific formatting and filtering only work for the target type, not the source type. This <hard alias> is unlike the <soft alias> relation in the previous subsection. The relevant mappings for the \opt{bibtex} driver can be found in~\secref{apx:maps:bibtex}.
+
+\begin{typelist}
+
+\typeitem{conference} A legacy alias for \bibtype{inproceedings}.
+
+\typeitem{electronic} An alias for \bibtype{online}.
+
+\typeitem{mastersthesis} Similar to \bibtype{thesis} except that the \bibfield{type} field is optional and defaults to the localised term <Master's thesis>. You may still use the \bibfield{type} field to override that.
+
+\typeitem{phdthesis} Similar to \bibtype{thesis} except that the \bibfield{type} field is optional and defaults to the localised term <PhD thesis>. You may still use the \bibfield{type} field to override that.
+
+\typeitem{techreport} Similar to \bibtype{report} except that the \bibfield{type} field is optional and defaults to the localised term <technical report>. You may still use the \bibfield{type} field to override that.
+
+\typeitem{www}
+
+An alias for \bibtype{online}, provided for \sty{jurabib} compatibility.
+
+\end{typelist}
+
+\subsubsection{Non-standard Types}
+\label{bib:typ:ctm}
+
+The types in this section are similar to the custom types \bibtype{custom[a--f]}, \ie the standard bibliography styles provide no bibliography drivers for these types. In the standard styles they will use the bibliography driver for \bibtype{misc} entries---exceptions to this rule are noted in the descriptions below. The types are known to the default data model and will be happily accepted by \biber.
+
+\begin{typelist}
+
+\typeitem{artwork}
+
+Works of the visual arts such as paintings, sculpture, and installations.
+
+\typeitem{audio}
+
+Audio recordings, typically on audio \acr{CD}, \acr{DVD}, audio cassette, or similar media. See also \bibtype{music}.
+
+\typeitem{bibnote}
+
+This special entry type is not meant to be used in the \file{bib} file like other types. It is provided for third-party packages like \sty{notes2bib} which merge notes into the bibliography. The notes should go into the \bibfield{note} field. Be advised that the \bibtype{bibnote} type is not related to the \cmd{defbibnote} command in any way. \cmd{defbibnote} is for adding comments at the beginning or the end of the bibliography, whereas the \bibtype{bibnote} type is meant for packages which render endnotes as bibliography entries.
+
+\typeitem{commentary}
+
+Commentaries which have a status different from regular books, such as legal commentaries.
+
+\typeitem{image}
+
+Images, pictures, photographs, and similar media.
+
+\typeitem{jurisdiction}
+
+Court decisions, court recordings, and similar things.
+
+\typeitem{legislation}
+
+Laws, bills, legislative proposals, and similar things.
+
+\typeitem{legal}
+
+Legal documents such as treaties.
+
+\typeitem{letter}
+
+Personal correspondence such as letters, emails, memoranda, etc.
+
+\typeitem{movie}
+
+Motion pictures. See also \bibtype{video}.
+
+\typeitem{music}
+
+Musical recordings. This is a more specific variant of \bibtype{audio}.
+
+\typeitem{performance}
+
+Musical and theatrical performances as well as other works of the performing arts. This type refers to the event as opposed to a recording, a score, or a printed play.
+
+\typeitem{review}
+
+Reviews of some other work. This is a more specific variant of the \bibtype{article} type. The standard styles will treat this entry type as an alias for \bibtype{article}.
+
+\typeitem{standard}
+
+National and international standards issued by a standards body such as the International Organization for Standardization.
+
+\typeitem{video}
+
+Audiovisual recordings, typically on \acr{DVD}, \acr{VHS} cassette, or similar media. See also \bibtype{movie}.
+
+\end{typelist}
+
+\subsection{Entry Fields}
+\label{bib:fld}
+
+This section gives an overview of the fields supported by the \biblatex default data model. See \secref{bib:fld:typ} for an introduction to the data types used by the data model specification and \secref{bib:fld:dat, bib:fld:spc} for the actual field listings.
+
+\subsubsection{Data Types}
+\label{bib:fld:typ}
+
+In datasources such as a \file{bib} file, all bibliographic data is specified in fields. Some of those fields, for example \bibfield{author} and \bibfield{editor}, may contain a list of items. This list structure is implemented by the \bibtex file format via the keyword <|and|>, which is used to separate the individual items in the list. The \biblatex package implements three distinct data types to handle bibliographic data: name lists, literal lists, and fields. There are also several list and field subtypes and a content type which can be used to semantically distinguish fields which are otherwise not distinguishable on the basis of only their datatype (see \secref{aut:ctm:dm}). This section gives an overview of the data types supported by this package. See \secref{bib:fld:dat, bib:fld:spc} for information about the mapping of the \bibtex file format fields to \biblatex's data types.
+
+Entry fields of any data type may be multiscript entry fields which means that they can have multiple <alternates> which are combinations of a multiscript <form> and <language>. Multiscript entry fields must be declared to be such in the data model. See \ref{use:multiscript}.
+
+\begin{description}
+
+\item[Name lists] are parsed and split up into the individual items at the \texttt{and} delimiter. Each item in the list is then dissected into the name part components: by default the given name, the name prefix (von, van, of, da, de, della, \dots), the family name, and the name suffix (junior, senior, \dots). The valid name parts can be customised by changing the datamodel definition described in \secref{aut:bbx:drv}. Name lists may be truncated in the \file{bib} file with the keyword <\texttt{and others}>. Typical examples of name lists are \bibfield{author} and \bibfield{editor}.
+
+Name list fields automatically have an \cmd{ifuse*} test created as per the name lists in the default data model (see \secref{aut:aux:tst}). They are also automatically have a \opt{ifuse*} option created which controls labelling and sorting behaviour with the name (see \secref{use:opt:bib:hyb}). \biber supports a customisable set of name parts but currently this is defined to be the same set of parts as supported by traditional \bibtex:
+
+\begin{itemize}
+\item Family name (also known as <last> part)
+\item Given name (also known as <first> part)
+\item Name prefix (also known as <von> part)
+\item Name suffix (also known as <Jr> part)
+\end{itemize}
+
+The supported list of name parts is defined as a constant list in the default data model using the \cmd{DeclareDatamodelConstant} command (see \secref{aut:ctm:dm}). However, it is not enough to simply add to this list in order to add support for another name part as name parts typically have to be hard coded into bibliography drivers and the backend processing. See the example file \file{93-nameparts.tex} for details on how to define and use custom name parts. Also see \cmd{DeclareUniquenameTemplate} in \secref{aut:cav:amb} for information on how to customise name disambiguation using custom name parts.
+
+\item[Literal lists] are parsed and split up into the individual items at the \texttt{and} delimiter but not dissected further. Literal lists may be truncated in the \file{bib} file with the keyword <\texttt{and others}>. There are two subtypes:
+
+\begin{description}
+
+\item[Literal lists] in the strict sense are handled as described above. The individual items are simply printed as is. Typical examples of such literal lists are \bibfield{publisher} and \bibfield{location}.
+
+\item[Key lists] are a variant of literal lists which may hold printable data or localisation keys. For each item in the list, styles should perform a test to determine whether it is a known localisation key (the localisation keys defined by default are listed in \secref{aut:lng:key}). If so, the localised string should be printed. If not, the item should be printed as is. The standard styles are set up to exhibit this behaviour for all key lists listed below. New key lists do not automatically perform this test, it has to be implemented explicitly via the list format. A typical example of a key list is \bibfield{language}.
+
+\end{description}
+\end{description}
+
+\begin{description}
+
+\item[Fields] are usually printed as a whole. There are several subtypes:
+
+\begin{description}
+
+\item[Literal fields] are printed as is. Typical examples of literal fields are \bibfield{title} and \bibfield{note}.
+
+\item[Range fields] consist of one or more ranges where all dashes are normalized and replaced by the command \cmd{bibrangedash}. A range is something optionally followed by one or more dashes optionally followed by some non-dash (e.g. \texttt{5--7}). Any number of consecutive dashes will only yield a single range dash. A typical example of a range field is the \bibfield{pages} field. See also the \cmd{bibrangessep} command which can be used to customise the separator between multiple ranges. Range fields will be skipped and will generate a warning if they do not consist of one or more ranges. You can normalise messy range fields before they are parsed using \cmd{DeclareSourcemap} (see \secref{aut:ctm:map}).
+
+\item[Integer fields] hold integers which may be converted to ordinals or strings as they are printed. A typical example is the \bibfield{extradate} or \bibfield{volume} field. Such fields are sorted as integers. \biber makes a (quite serious) effort to map non-arabic representations (roman numerals for example) to integers for sorting purposes. See the \opt{noroman} option which can be used to suppress roman numeral parsing. This can help in cases where there is an ambiguity between parsing as roman numerals or alphanumeric (e.g. <C>), see \secref{use:opt:pre:int}.
+
+\item[Datepart fields] hold unformatted integers which may be converted to ordinals or strings as they are printed. A typical example is the \bibfield{month} field. For every field of datatype \bibfield{date} in the datamodel, datepart fields are automatically created with the following names: \bibfield{$<$datetype$>$year}, \bibfield{$<$datetype$>$endyear}, \bibfield{$<$datetype$>$month}, \bibfield{$<$datetype$>$endmonth}, \bibfield{$<$datetype$>$day}, \bibfield{$<$datetype$>$endday}, \bibfield{$<$datetype$>$hour}, \bibfield{$<$datetype$>$endhour}, \bibfield{$<$datetype$>$minute}, \bibfield{$<$datetype$>$endminute}, \bibfield{$<$datetype$>$second}, \bibfield{$<$datetype$>$endsecond}, \bibfield{$<$datetype$>$timezone}, \bibfield{$<$datetype$>$endtimezone}. $<$datetype$>$ is the string preceding <date> for any datamodel field of \kvopt{datatype}{date}. For example, in the default datamodel, <event>, <orig>, <url> and the empty string <> for the date field \bibfield{date}.
+
+\item[Date fields] hold a date specification in \texttt{yyyy-mm-ddThh:nn[+|-][hh[:nn]|Z]} format or a date range in \texttt{yyyy-mm-ddThh:nn[+|-][hh[:nn]|Z]/yyyy-mm-ddThh:nn[+|-][hh[:nn]|Z]} format and other formats permitted by \acr{ISO8601-2} Clause 4, level 1, see \secref{bib:use:dat}. Date fields are special in that the date is parsed and split up into its datepart type components. The \bibfield{datepart} components (see above) are automatically defined and recognised when a field of datatype \bibfield{date} is defined in the datamodel. A typical example is the \bibfield{date} field.
+
+\item[Verbatim fields] are processed in verbatim mode and may contain special characters. Typical examples of verbatim fields are \bibfield{file} and \bibfield{doi}.
+
+\item[URI fields] are processed in verbatim mode and may contain special characters. They are also URL-escaped if they don't look like they already are. The typical example of a uri field is \bibfield{url}.
+
+\item[Separated value fields] A separated list of literal values. Examples are the \bibfield{keywords} and \bibfield{options} fields. The separator can be configured to be any Perl regular expression via the \opt{xsvsep} option which defaults to the usual \bibtex comma surrounded by optional whitespace.
+
+\item[Pattern fields] A literal field which must match a particular pattern. An example is the \bibfield{gender} field from \secref{bib:fld:spc}.
+
+\item[Key fields] May hold printable data or localisation keys. Styles should perform a test to determine whether the value of the field is a known localisation key (the localisation keys defined by default are listed in \secref{aut:lng:key}). If so, the localised string should be printed. If not, the value should be printed as is. The standard styles are set up to handle all key fields listed below in that way. New key fields do not automatically perform the test, it has to be enabled explicitly in the field format. A typical example is the \bibfield{type} field.
+
+\item[Code fields] Holds \tex code.
+
+\end{description}
+\end{description}
+
+\subsubsection{Data Fields}
+\label{bib:fld:dat}
+
+The fields listed in this section are the regular ones holding printable data in the default data model. The name on the left is the default data model name of the field as used by \biblatex and its backend. The \biblatex data type is given to the right of the name. See \secref{bib:fld:typ} for explanation of the various data types.
+
+Some fields are marked as <label> fields which means that they are often used as abbreviation labels when printing bibliography lists in the sense of section \secref{use:bib:biblist}. \biblatex automatically creates supporting macros for such fields. See \secref{use:bib:biblist}.
+
+\begin{fieldlist}
+
+\fielditem{abstract}{literal}
+
+This field is intended for recording abstracts in a \file{bib} file, to be printed by a special bibliography style. It is not used by all standard bibliography styles.
+
+\fielditem{addendum}{literal}
+
+Miscellaneous bibliographic data to be printed at the end of the entry. This is similar to the \bibfield{note} field except that it is printed at the end of the bibliography entry.
+
+\listitem{afterword}{name}
+
+The author(s) of an afterword to the work. If the author of the afterword is identical to the \bibfield{editor} and\slash or \bibfield{translator}, the standard styles will automatically concatenate these fields in the bibliography. See also \bibfield{introduction} and \bibfield{foreword}.
+
+\fielditem{annotation}{literal}
+
+This field may be useful when implementing a style for annotated bibliographies. It is not used by all standard bibliography styles. Note that this field is completely unrelated to \bibfield{annotator}. The \bibfield{annotator} is the author of annotations which are part of the work cited.
+
+\listitem{annotator}{name}
+
+The author(s) of annotations to the work. If the annotator is identical to the \bibfield{editor} and\slash or \bibfield{translator}, the standard styles will automatically concatenate these fields in the bibliography. See also \bibfield{commentator}.
+
+\listitem{author}{name}
+
+The author(s) of the \bibfield{title}.
+
+\fielditem{authortype}{key}
+
+The type of author. This field will affect the string (if any) used to introduce the author.
+
+\listitem{bookauthor}{name}
+
+The author(s) of the \bibfield{booktitle}.
+
+\fielditem{bookpagination}{key}
+
+If the work is published as part of another one, this is the pagination scheme of the enclosing work, \ie \bibfield{bookpagination} relates to \bibfield{pagination} like \bibfield{booktitle} to \bibfield{title}. The value of this field will affect the formatting of the \bibfield{pages} and \bibfield{pagetotal} fields. The key should be given in the singular form. Possible keys are \texttt{page}, \texttt{column}, \texttt{line}, \texttt{verse}, \texttt{section}, and \texttt{paragraph}. See also \bibfield{pagination} as well as \secref{bib:use:pag}.
+
+\fielditem{booksubtitle}{literal}
+
+The subtitle related to the \bibfield{booktitle}. If the \bibfield{subtitle} field refers to a work which is part of a larger publication, a possible subtitle of the main work is given in this field. See also \bibfield{subtitle}.
+
+\fielditem{booktitle}{literal}
+
+If the \bibfield{title} field indicates the title of a work which is part of a larger publication, the title of the main work is given in this field. See also \bibfield{title}.
+
+\fielditem{booktitleaddon}{literal}
+
+An annex to the \bibfield{booktitle}, to be printed in a different font.
+
+\fielditem{chapter}{literal}
+
+A chapter or section or any other unit of a work.
+
+\listitem{commentator}{name}
+
+The author(s) of a commentary to the work. Note that this field is intended for commented editions which have a commentator in addition to the author. If the work is a stand"=alone commentary, the commentator should be given in the \bibfield{author} field. If the commentator is identical to the \bibfield{editor} and\slash or \bibfield{translator}, the standard styles will automatically concatenate these fields in the bibliography. See also \bibfield{annotator}.
+
+\fielditem{date}{date}
+
+The publication date. See also \bibfield{month} and \bibfield{year} as well as \secref{bib:use:dat,bib:use:yearordate}.
+
+\fielditem{doi}{verbatim}
+
+The Digital Object Identifier of the work.
+
+\fielditem{edition}{integer or literal}
+
+The edition of a printed publication. This must be an integer, not an ordinal. Don't say |edition={First}| or |edition={1st}| but |edition={1}|. The bibliography style converts this to a language dependent ordinal. It is also possible to give the edition as a literal string, for example «Third, revised and expanded edition».
+
+\listitem{editor}{name}
+
+The editor(s) of the \bibfield{title}, \bibfield{booktitle}, or \bibfield{maintitle}, depending on the entry type. Use the \bibfield{editortype} field to specify the role if it is different from <\texttt{editor}>. See \secref{bib:use:edr} for further hints.
+
+\listitem{editora}{name}
+
+A secondary editor performing a different editorial role, such as compiling, redacting, etc. Use the \bibfield{editoratype} field to specify the role. See \secref{bib:use:edr} for further hints.
+
+\listitem{editorb}{name}
+
+Another secondary editor performing a different role. Use the \bibfield{editorbtype} field to specify the role. See \secref{bib:use:edr} for further hints.
+
+\listitem{editorc}{name}
+
+Another secondary editor performing a different role. Use the \bibfield{editorctype} field to specify the role. See \secref{bib:use:edr} for further hints.
+
+\fielditem{editortype}{key}
+
+The type of editorial role performed by the \bibfield{editor}. Roles supported by default are \texttt{editor}, \texttt{compiler}, \texttt{founder}, \texttt{continuator}, \texttt{redactor}, \texttt{reviser}, \texttt{collaborator}, \texttt{organizer}. The role <\texttt{editor}> is the default. In this case, the field is omissible. See \secref{bib:use:edr} for further hints.
+
+\fielditem{editoratype}{key}
+
+Similar to \bibfield{editortype} but referring to the \bibfield{editora} field. See \secref{bib:use:edr} for further hints.
+
+\fielditem{editorbtype}{key}
+
+Similar to \bibfield{editortype} but referring to the \bibfield{editorb} field. See \secref{bib:use:edr} for further hints.
+
+\fielditem{editorctype}{key}
+
+Similar to \bibfield{editortype} but referring to the \bibfield{editorc} field. See \secref{bib:use:edr} for further hints.
+
+\fielditem{eid}{literal}
+
+The electronic identifier of an \bibtype{article} or chapter-like section of a larger work often called <article number>, <paper number> or the like. This field may replace the \bibfield{pages} field for journals deviating from the classic pagination scheme of printed journals by only enumerating articles or papers and not pages.
+
+Not to be confused with \bibfield{number}, which for \bibtype{article}s subdivides the \bibfield{volume}.
+
+\fielditem{entrysubtype}{literal}
+
+This field, which is not used by the standard styles, may be used to specify a subtype of an entry type. This may be useful for bibliography styles which support a finer"=grained set of entry types.
+
+\fielditem{eprint}{verbatim}
+
+The electronic identifier of an online publication. This is roughly comparable to a \acr{doi} but specific to a certain archive, repository, service, or system. See \secref{use:use:epr} for details. Also see \bibfield{eprinttype} and \bibfield{eprintclass}.
+
+\fielditem{eprintclass}{literal}
+
+Additional information related to the resource indicated by the \bibfield{eprinttype} field. This could be a section of an archive, a path indicating a service, a classification of some sort, etc. See \secref{use:use:epr} for details. Also see \bibfield{eprint} and \bibfield{eprinttype}.
+
+\fielditem{eprinttype}{literal}
+
+The type of \bibfield{eprint} identifier, \eg the name of the archive, repository, service, or system the \bibfield{eprint} field refers to. See \secref{use:use:epr} for details. Also see \bibfield{eprint} and \bibfield{eprintclass}.
+
+\fielditem{eventdate}{date}
+
+The date of a conference, a symposium, or some other event in \bibtype{proceedings} and \bibtype{inproceedings} entries. This field may also be useful for the custom types listed in \secref{bib:typ:ctm}. See also \bibfield{eventtitle} and \bibfield{venue} as well as \secref{bib:use:dat}.
+
+\fielditem{eventtitle}{literal}
+
+The title of a conference, a symposium, or some other event in \bibtype{proceedings} and \bibtype{inproceedings} entries. This field may also be useful for the custom types listed in \secref{bib:typ:ctm}. Note that this field holds the plain title of the event. Things like «Proceedings of the Fifth XYZ Conference» go into the \bibfield{titleaddon} or \bibfield{booktitleaddon} field, respectively. See also \bibfield{eventdate} and \bibfield{venue}.
+
+\fielditem{eventtitleaddon}{literal}
+
+An annex to the \bibfield{eventtitle} field. Can be used for known event acronyms, for example.
+
+\fielditem{file}{verbatim}
+
+A local link to a \acr{pdf} or other version of the work. Not used by the standard bibliography styles.
+
+\listitem{foreword}{name}
+
+The author(s) of a foreword to the work. If the author of the foreword is identical to the \bibfield{editor} and\slash or \bibfield{translator}, the standard styles will automatically concatenate these fields in the bibliography. See also \bibfield{introduction} and \bibfield{afterword}.
+
+\listitem{holder}{name}
+
+The holder(s) of a \bibtype{patent}, if different from the \bibfield{author}. Note that corporate holders need to be wrapped in an additional set of braces, see \secref{bib:use:inc} for details. This list may also be useful for the custom types listed in \secref{bib:typ:ctm}.
+
+\fielditem{howpublished}{literal}
+
+A publication notice for unusual publications which do not fit into any of the common categories.
+
+\fielditem{indextitle}{literal}
+
+A title to use for indexing instead of the regular \bibfield{title} field. This field may be useful if you have an entry with a title like «An Introduction to \dots» and want that indexed as «Introduction to \dots, An». Style authors should note that \biblatex automatically copies the value of the \bibfield{title} field to \bibfield{indextitle} if the latter field is undefined. It the \bibfield{title} field is a multiscript field (it is in the default datamodel), then the currently active multiscript form and language (if the entry has a \bibfield{langid} field, this is used to override the currently active multiscript language) are used to determine which alternate to copy to the \bibfield{indextitle} field. If this default behaviour is not what is required, use an explicit \bibfield{indextitle} field in the entry.
+
+\listitem{institution}{literal}
+
+The name of a university or some other institution, depending on the entry type. Traditional \bibtex uses the field name \bibfield{school} for theses, which is supported as an alias. See also \secref{bib:fld:als, bib:use:and}.
+
+\listitem{introduction}{name}
+
+The author(s) of an introduction to the work. If the author of the introduction is identical to the \bibfield{editor} and\slash or \bibfield{translator}, the standard styles will automatically concatenate these fields in the bibliography. See also \bibfield{foreword} and \bibfield{afterword}.
+
+\fielditem{isan}{literal}
+
+The International Standard Audiovisual Number of an audiovisual work. Not used by the standard bibliography styles.
+
+\fielditem{isbn}{literal}
+
+The International Standard Book Number of a book.
+
+\fielditem{ismn}{literal}
+
+The International Standard Music Number for printed music such as musical scores. Not used by the standard bibliography styles.
+
+\fielditem{isrn}{literal}
+
+The International Standard Technical Report Number of a technical report.
+
+\fielditem{issn}{literal}
+
+The International Standard Serial Number of a periodical.
+
+\fielditem{issue}{literal}
+
+The issue of a journal. This field is intended for journals whose individual issues are identified by a designation such as <Spring> or <Summer> rather than the month or a number. The placement of \bibfield{issue} is similar to \bibfield{month} and \bibfield{number}. Integer ranges and short designators are better written to the \bibfield{number} field. See also \bibfield{month}, \bibfield{number} and \secref{bib:use:iss, bib:use:issnum}.
+
+\fielditem{issuesubtitle}{literal}
+
+The subtitle of a specific issue of a journal or other periodical.
+
+\fielditem{issuetitle}{literal}
+
+The title of a specific issue of a journal or other periodical.
+
+\fielditem{issuetitleaddon}{literal}
+
+An annex to the \bibfield{issuetitle}, to be printed in a different font.
+
+\fielditem{iswc}{literal}
+
+The International Standard Work Code of a musical work. Not used by the standard bibliography styles.
+
+\fielditem{journalsubtitle}{literal}
+
+The subtitle of a journal, a newspaper, or some other periodical.
+
+\fielditem{journaltitle}{literal}
+
+The name of a journal, a newspaper, or some other periodical.
+
+\fielditem{journaltitleaddon}{literal}
+
+An annex to the \bibfield{journaltitle}, to be printed in a different font.
+
+
+\fielditem{label}{literal}
+
+A designation to be used by the citation style as a substitute for the regular label if any data required to generate the regular label is missing. For example, when an author"=year citation style is generating a citation for an entry which is missing the author or the year, it may fall back to \bibfield{label}. See \secref{bib:use:key} for details. Note that, in contrast to \bibfield{shorthand}, \bibfield{label} is only used as a fallback. See also \bibfield{shorthand}.
+
+\listitem{language}{key}
+
+The language(s) of the work. Languages may be specified literally or as localisation keys. If localisation keys are used, the prefix \texttt{lang} is omissible. See also \bibfield{origlanguage} and compare \bibfield{langid} in \secref{bib:fld:spc}.
+
+\fielditem{library}{literal}
+
+This field may be useful to record information such as a library name and a call number. This may be printed by a special bibliography style if desired. Not used by the standard bibliography styles.
+
+\listitem{location}{literal}
+
+The place(s) of publication, \ie the location of the \bibfield{publisher} or \bibfield{institution}, depending on the entry type. Traditional \bibtex uses the field name \bibfield{address}, which is supported as an alias. See also \secref{bib:fld:als, bib:use:and}. With \bibtype{patent} entries, this list indicates the scope of a patent. This list may also be useful for the custom types listed in \secref{bib:typ:ctm}.
+
+\fielditem{mainsubtitle}{literal}
+
+The subtitle related to the \bibfield{maintitle}. See also \bibfield{subtitle}.
+
+\fielditem{maintitle}{literal}
+
+The main title of a multi"=volume book, such as \emph{Collected Works}. If the \bibfield{title} or \bibfield{booktitle} field indicates the title of a single volume which is part of multi"=volume book, the title of the complete work is given in this field.
+
+\fielditem{maintitleaddon}{literal}
+
+An annex to the \bibfield{maintitle}, to be printed in a different font.
+
+\fielditem{month}{literal}
+
+The publication month. This must be an integer, not an ordinal or a string. Don't say |month={January}| but |month={1}|. The bibliography style converts this to a language dependent string or ordinal where required. This field is a literal field only when given
+explicitly in the data (for plain \bibtex compatibility for example). It is
+however better to use the \bibfield{date} field as this supports many more features. See \secref{bib:use:dat,bib:use:yearordate}.
+
+\fielditem{nameaddon}{literal}
+
+An addon to be printed immediately after the author name in the bibliography. Not used by the standard bibliography styles.
+
+\fielditem{note}{literal}
+
+Miscellaneous bibliographic data which does not fit into any other field. The \bibfield{note} field may be used to record bibliographic data in a free format. Publication facts such as «Reprint of the edition London 1831» are typical candidates for the \bibfield{note} field. See also \bibfield{addendum}.
+
+\fielditem{number}{literal}
+
+The number of a journal or the volume\slash number of a book in a \bibfield{series}. See also \bibfield{issue} as well as \secref{bib:use:ser, bib:use:iss, bib:use:issnum}. With \bibtype{patent} entries, this is the number or record token of a patent or patent request. Normally this field will be an integer or an integer range, but it may also be a short designator that is not entirely numeric such as «S1», «Suppl.\ 2», «3es». In these cases the output should be scrutinised carefully.
+
+Since \bibfield{number} is---maybe counterintuitively given its name---a literal field, sorting templates will not treat its contents as integers, but as literal strings, which means that «11» may sort between «1» and «2». If integer sorting is desired, the field can be declared an integer field in a custom data model (see \secref{aut:ctm:dm}). But then the sorting of non-integer values is not well defined.
+
+The <article number> or <paper number>, which can be used instead of---or along with---a page range to pinpoint a specific article within another work, goes into the \bibfield{eid} field.
+
+\listitem{organization}{literal}
+
+The organization(s) that published a \bibtype{manual} or an \bibtype{online} resource, or sponsored a conference. See also \secref{bib:use:and}.
+
+\fielditem{origdate}{date}
+
+If the work is a translation, a reprint, or something similar, the publication date of the original edition. Not used by the standard bibliography styles. See also \bibfield{date}.
+
+\listitem{origlanguage}{key}
+
+If the work is a translation, the language(s) of the original work. See also \bibfield{language}.
+
+\listitem{origlocation}{literal}
+
+If the work is a translation, a reprint, or something similar, the \bibfield{location} of the original edition. Not used by the standard bibliography styles. See also \bibfield{location} and \secref{bib:use:and}.
+
+\listitem{origpublisher}{literal}
+
+If the work is a translation, a reprint, or something similar, the \bibfield{publisher} of the original edition. Not used by the standard bibliography styles. See also \bibfield{publisher} and \secref{bib:use:and}.
+
+\fielditem{origtitle}{literal}
+
+If the work is a translation, the \bibfield{title} of the original work. Not used by the standard bibliography styles. See also \bibfield{title}.
+
+\fielditem{pages}{range}
+
+One or more page numbers or page ranges. If the work is published as part of another one, such as an article in a journal or a collection, this field holds the relevant page range in that other work. It may also be used to limit the reference to a specific part of a work (a chapter in a book, for example). For papers in electronic journals with a non-classical pagination setup the \bibfield{eid} field may be more suitable.
+
+\fielditem{pagetotal}{literal}
+
+The total number of pages of the work.
+
+\fielditem{pagination}{key}
+
+The pagination of the work. The value of this field will affect the formatting the \prm{postnote} argument to a citation command. The key should be given in the singular form. Possible keys are \texttt{page}, \texttt{column}, \texttt{line}, \texttt{verse}, \texttt{section}, and \texttt{paragraph}. See also \bibfield{bookpagination} as well as \secref{bib:use:pag, use:cav:pag}.
+
+\fielditem{part}{literal}
+
+The number of a partial volume. This field applies to books only, not to journals. It may be used when a logical volume consists of two or more physical ones. In this case the number of the logical volume goes in the \bibfield{volume} field and the number of the part of that volume in the \bibfield{part} field. See also \bibfield{volume}.
+
+\listitem{publisher}{literal}
+
+The name(s) of the publisher(s). See also \secref{bib:use:and}.
+
+\fielditem{pubstate}{key}
+
+The publication state of the work, \eg\ <in press>. See \secref{aut:lng:key:pst} for known publication states.
+
+\fielditem{reprinttitle}{literal}
+
+The title of a reprint of the work. Not used by the standard styles.
+
+\fielditem{series}{literal}
+
+The name of a publication series, such as «Studies in \dots», or the number of a journal series. Books in a publication series are usually numbered. The number or volume of a book in a series is given in the \bibfield{number} field. Note that the \bibtype{article} entry type makes use of the \bibfield{series} field as well, but handles it in a special way. See \secref{bib:use:ser} for details.
+
+\listitem{shortauthor}{name\LFMark}
+
+The author(s) of the work, given in an abbreviated form. This field is mainly intended for abbreviated forms of corporate authors, see \secref{bib:use:inc} for details.
+
+\listitem{shorteditor}{name\LFMark}
+
+The editor(s) of the work, given in an abbreviated form. This field is mainly intended for abbreviated forms of corporate editors, see \secref{bib:use:inc} for details.
+
+\fielditem{shorthand}{literal\LFMark}
+
+A special designation to be used by the citation style instead of the usual label. If defined, it overrides the default label. See also \bibfield{label}.
+
+\fielditem{shorthandintro}{literal}
+
+The verbose citation styles which comes with this package use a phrase like «henceforth cited as [shorthand]» to introduce shorthands on the first citation. If the \bibfield{shorthandintro} field is defined, it overrides the standard phrase. Note that the alternative phrase must include the shorthand.
+
+\fielditem{shortjournal}{literal\LFMark}
+
+A short version or an acronym of the \bibfield{journaltitle}. Not used by the standard bibliography styles.
+
+\fielditem{shortseries}{literal\LFMark}
+
+A short version or an acronym of the \bibfield{series} field. Not used by the standard bibliography styles.
+
+\fielditem{shorttitle}{literal\LFMark}
+
+The title in an abridged form. This field is usually not included in the bibliography. It is intended for citations in author"=title format. If present, the author"=title citation styles use this field instead of \bibfield{title}.
+
+\fielditem{subtitle}{literal}
+
+The subtitle of the work.
+
+\fielditem{title}{literal}
+
+The title of the work.
+
+\fielditem{titleaddon}{literal}
+
+An annex to the \bibfield{title}, to be printed in a different font.
+
+\listitem{translator}{name}
+
+The translator(s) of the \bibfield{title} or \bibfield{booktitle}, depending on the entry type. If the translator is identical to the \bibfield{editor}, the standard styles will automatically concatenate these fields in the bibliography.
+
+\fielditem{type}{key}
+
+The type of a \bibfield{manual}, \bibfield{patent}, \bibfield{report}, or \bibfield{thesis}. This field may also be useful for the custom types listed in \secref{bib:typ:ctm}.
+
+\fielditem{url}{uri}
+
+The \acr{URL} of an online publication. If it is not URL-escaped (no <\%> chars) it will be URI-escaped according to RFC 3987, that is, even Unicode chars will be correctly escaped.
+
+\fielditem{urldate}{date}
+
+The access date of the address specified in the \bibfield{url} field. See also \secref{bib:use:dat}.
+
+\fielditem{venue}{literal}
+
+The location of a conference, a symposium, or some other event in \bibtype{proceedings} and \bibtype{inproceedings} entries. This field may also be useful for the custom types listed in \secref{bib:typ:ctm}. Note that the \bibfield{location} list holds the place of publication. It therefore corresponds to the \bibfield{publisher} and \bibfield{institution} lists. The location of the event is given in the \bibfield{venue} field. See also \bibfield{eventdate} and \bibfield{eventtitle}.
+
+\fielditem{version}{literal}
+
+The revision number of a piece of software, a manual, etc.
+
+\fielditem{volume}{integer}
+
+The volume of a multi"=volume book or a periodical. It is expected to be an integer, not necessarily in arabic numerals since \biber will automatically convert from roman numerals or arabic letter to integers internally for sorting purposes. See also \bibfield{part}. See the \opt{noroman} option which can be used to suppress roman numeral parsing. This can help in cases where there is an ambiguity between parsing as roman numerals or alphanumeric (e.g. <C>), see \secref{use:opt:pre:int}.
+
+\fielditem{volumes}{integer}
+
+The total number of volumes of a multi"=volume work. Depending on the entry type, this field refers to \bibfield{title} or \bibfield{maintitle}. It is expected to be an integer, not necessarily in arabic numerals since \biber will automatically convert from roman numerals or arabic letter to integers internally for sorting purposes. See the \opt{noroman} option which can be used to suppress roman numeral parsing. This can help in cases where there is an ambiguity between parsing as roman numerals or alphanumeric (e.g. <C>), see \secref{use:opt:pre:int}.
+
+\fielditem{year}{literal}
+
+The year of publication. This field is a literal field only when given
+explicitly in the data (for plain \bibtex compatibility for example). It is
+however better to use the \bibfield{date} field as this is compatible with
+plain years too and supports many more features. See \secref{bib:use:dat,bib:use:yearordate}.
+
+\end{fieldlist}
+
+\subsubsection{Special Fields}
+\label{bib:fld:spc}
+
+The fields listed in this section do not hold printable data but serve a different purpose. They apply to all entry types in the default data model.
+
+\begin{fieldlist}
+
+\fielditem{crossref}{entry key}
+
+This field holds an entry key for the cross"=referencing feature. Child entries with a \bibfield{crossref} field inherit data from the parent entry specified in the \bibfield{crossref} field. If the number of child entries referencing a specific parent entry hits a certain threshold, the parent entry is automatically added to the bibliography even if it has not been cited explicitly. The threshold is settable with the \opt{mincrossrefs} package option from \secref{use:opt:pre:gen}. Style authors should note that whether or not the \bibfield{crossref} fields of the child entries are defined on the \biblatex level depends on the availability of the parent entry. If the parent entry is available, the \bibfield{crossref} fields of the child entries will be defined. If not, the child entries still inherit the data from the parent entry but their \bibfield{crossref} fields will be undefined. Whether the parent entry is added to the bibliography implicitly because of the threshold or explicitly because it has been cited does not matter. See also the \bibfield{xref} field in this section as well as \secref{bib:cav:ref}.
+
+\fielditem{entryset}{separated values}
+
+This field is specific to entry sets. See \secref{use:use:set} for details. This field is consumed by the backend processing and does not appear in the \path{.bbl}.
+
+\fielditem{execute}{code}
+
+A special field which holds arbitrary \tex code to be executed whenever the data of the respective entry is accessed. This may be useful to handle special cases. Conceptually, this field is comparable to the hooks \cmd{AtEveryBibitem}, \cmd{AtEveryLositem}, and \cmd{AtEveryCitekey} from \secref{aut:fmt:hok}, except that it is definable on a per"=entry basis in the \file{bib} file. Any code in this field is executed automatically immediately after these hooks.
+
+\fielditem{gender}{Pattern matching one of: \opt{sf}, \opt{sm}, \opt{sn}, \opt{pf}, \opt{pm}, \opt{pn}, \opt{pp}}
+
+The gender of the author or the gender of the editor, if there is no author. The following identifiers are supported: \opt{sf} (feminine singular, a single female name), \opt{sm} (masculine singular, a single male name), \opt{sn} (neuter singular, a single neuter name), \opt{pf} (feminine plural, a list of female names), \opt{pm} (masculine plural, a list of male names), \opt{pn} (neuter plural, a list of neuter names), \opt{pp} (plural, a mixed gender list of names). This information is only required by special bibliography and citation styles and only in certain languages. For example, a citation style may replace recurrent author names with a term such as <idem>. If the Latin word is used, as is custom in English and French, there is no need to specify the gender. In German publications, however, such key terms are usually given in German and in this case they are gender"=sensitive.
+
+\begin{table}
+\caption{Supported Languages}
+\label{bib:fld:tab1}
+\tablesetup
+\begin{tabularx}{\textwidth}{@{}p{90pt}@{}p{160pt}@{}X@{}}
+\toprule
+\multicolumn{1}{@{}H}{Language} &
+\multicolumn{1}{@{}H}{Region/Dialect} &
+\multicolumn{1}{@{}H}{Identifiers} \\
+\cmidrule(r){1-1}\cmidrule(r){2-2}\cmidrule{3-3}
+Basque & France, Spain & \opt{basque} \\
+Bulgarian & Bulgaria & \opt{bulgarian} \\
+Catalan & Spain, France, Andorra, Italy & \opt{catalan} \\
+Croatian & Croatia, Bosnia and Herzegovina, Serbia & \opt{croatian} \\
+Czech & Czech Republic & \opt{czech} \\
+Danish & Denmark & \opt{danish} \\
+Dutch & Netherlands & \opt{dutch} \\
+English & USA & \opt{american}, \opt{USenglish}, \opt{english} \\
+ & United Kingdom & \opt{british}, \opt{UKenglish} \\
+ & Canada & \opt{canadian} \\
+ & Australia & \opt{australian} \\
+ & New Zealand & \opt{newzealand} \\
+Estonian & Estonia & \opt{estonian} \\
+Finnish & Finland & \opt{finnish} \\
+French & France, Canada & \opt{french} \\
+German & Germany & \opt{german} \\
+ & Austria & \opt{austrian} \\
+ & Switzerland & \opt{swissgerman} \\
+German (new) & Germany & \opt{ngerman} \\
+ & Austria & \opt{naustrian} \\
+ & Switzerland & \opt{nswissgerman} \\
+Greek & Greece & \opt{greek} \\
+Hungarian & Hungary & \opt{magyar}, \opt{hungarian} \\
+Icelandic & Iceland & \opt{icelandic} \\
+Italian & Italy & \opt{italian} \\
+Latvian & Latvia & \opt{latvian} \\
+Lithuanian & Lithuania & \opt{lithuanian} \\
+Marathi & India & \opt{marathi} \\
+Norwegian (Bokmål) & Norway & \opt{norsk} \\
+Norwegian (Nynorsk) & Norway & \opt{nynorsk} \\
+Polish & Poland & \opt{polish} \\
+Portuguese & Brazil & \opt{brazil} \\
+ & Portugal & \opt{portuguese}, \opt{portuges} \\
+Romanian & Romania & \opt{romanian} \\
+Russian & Russia & \opt{russian} \\
+Serbian (Latin) & Serbia & \opt{serbian} \\
+Serbian (Cyrillic) & Serbia & \opt{serbianc} \\
+Slovak & Slovakia & \opt{slovak} \\
+Slovene & Slovenia & \opt{slovene}, \opt{slovenian} \\
+Spanish & Spain & \opt{spanish} \\
+Swedish & Sweden & \opt{swedish} \\
+Turkish & Turkey & \opt{turkish} \\
+Ukrainian & Ukraine & \opt{ukrainian} \\
+\bottomrule
+\end{tabularx}
+\end{table}
+
+\fielditem{langid}{identifier}
+
+The language id of the bibliography entry. The alias \bibfield{hyphenation} is provided for backwards compatibility. The identifier must be a language name known to the \sty{babel}/\sty{polyglossia} packages. This information may be used to switch hyphenation patterns and localise strings in the bibliography. Note that the language names are case sensitive. The languages currently supported by this package are given in \tabref{bib:fld:tab1}. Note that \sty{babel} treats the identifier \opt{english} as an alias for \opt{british} or \opt{american}, depending on the \sty{babel} version. The \biblatex package always treats it as an alias for \opt{american}. It is preferable to use the language identifiers \opt{american} and \opt{british} (\sty{babel}) or a language specific option to specify a language variant (\sty{polyglossia}, using the \bibfield{langidopts} field) to avoid any possible confusion. Compare \bibfield{language} in \secref{bib:fld:dat}.
+
+\fielditem{langidopts}{literal}
+
+For \sty{polyglossia} users, allows per-entry language specific options. The literal value of this field is passed to \sty{polyglossia}'s language switching facility when using the package option \opt{autolang=langname}. For example, the fields:
+
+\begin{lstlisting}[style=bibtex]{}
+langid = {english},
+langidopts = {variant=british},
+\end{lstlisting}
+%
+would wrap the bibliography entry in:
+
+\begin{ltxexample}
+\english[variant=british]
+...
+\endenglish
+\end{ltxexample}
+%
+
+\fielditem{ids}{separated list of entrykeys}
+
+Citation key aliases for the main citation key. An entry may be cited by any of its aliases and \biblatex will treat the citation as if it had used the primary citation key. This is to aid users who change their citation keys but have legacy documents which use older keys for the same entry. This field is consumed by the backend processing and does not appear in the \path{.bbl}.
+
+\fielditem{indexsorttitle}{literal}
+
+The title used when sorting the index. In contrast to \bibfield{indextitle}, this field is used for sorting only. The printed title in the index is the \bibfield{indextitle} or the \bibfield{title} field. This field may be useful if the title contains special characters or commands which interfere with the sorting of the index. Consider this example:
+
+\begin{lstlisting}[style=bibtex]{}
+title = {The \LaTeX\ Companion},
+indextitle = {\LaTeX\ Companion, The},
+indexsorttitle = {LATEX Companion},
+\end{lstlisting}
+%
+Style authors should note that \biblatex automatically copies the value of either the \bibfield{indextitle} or the \bibfield{title} field to \bibfield{indexsorttitle} if the latter field is undefined.
+
+\fielditem{keywords}{separated values}
+
+A separated list of keywords. These keywords are intended for the bibliography filters (see \secref{use:bib:bib, use:use:div}), they are usually not printed. Note that with the default separator (comma), spaces around the separator are ignored.
+
+\fielditem{options}{separated \keyval options}
+
+A separated list of entry options in \keyval notation. This field is used to set options on a per"=entry basis. See \secref{use:opt:bib} for details. Note that citation and bibliography styles may define additional entry options.
+
+\fielditem{presort}{string}
+
+A special field used to modify the sorting order of the bibliography. This field is the first item the sorting routine considers when sorting the bibliography, hence it may be used to arrange the entries in groups. This may be useful when creating subdivided bibliographies with the bibliography filters. Please refer to \secref{use:srt} for further details. Also see \secref{aut:ctm:srt}. This field is consumed by the backend processing and does not appear in the \path{.bbl}.
+
+\fielditem{related}{separated values}
+
+Citation keys of other entries which have a relationship to this entry. The relationship is specified by the \bibfield{relatedtype} field. Please refer to \secref{use:rel} for further details.
+
+\fielditem{relatedoptions}{separated values}
+
+Per"=type options to set for a related entry. Note that this does not set the options on the related entry itself, only the \opt{dataonly} clone which is used as a datasource for the parent entry.
+
+\fielditem{relatedtype}{identifier}
+
+An identifier which specified the type of relationship for the keys listed in the \bibfield{related} field. The identifier is a localised bibliography string printed
+before the data from the related entry list. It is also used to identify type-specific
+formatting directives and bibliography macros for the related entries. Please refer to \secref{use:rel} for further details.
+
+\fielditem{relatedstring}{literal}
+
+A field used to override the bibliography string specified by \bibfield{relatedtype}. Please refer to \secref{use:rel} for further details.
+
+\fielditem{sortkey}{literal}
+
+A field used to modify the sorting order of the bibliography. Think of this field as the master sort key. If present, \biblatex uses this field during sorting and ignores everything else, except for the \bibfield{presort} field. Please refer to \secref{use:srt} for further details. This field is consumed by the backend processing and does not appear in the \path{.bbl}.
+
+\listitem{sortname}{name}
+
+A name or a list of names used to modify the sorting order of the bibliography. If present, this list is used instead of \bibfield{author} or \bibfield{editor} when sorting the bibliography. Please refer to \secref{use:srt} for further details. This field is consumed by the backend processing and does not appear in the \path{.bbl}.
+
+\fielditem{sortshorthand}{literal}
+
+Similar to \bibfield{sortkey} but used in the list of shorthands. If present, \biblatex uses this field instead of \bibfield{shorthand} when sorting the list of shorthands. This is useful if the \bibfield{shorthand} field holds shorthands with formatting commands such as \cmd{emph} or \cmd{textbf}. This field is consumed by the backend processing and does not appear in the \path{.bbl}.
+
+\fielditem{sorttitle}{literal}
+
+A field used to modify the sorting order of the bibliography. If present, this field is used instead of the \bibfield{title} field when sorting the bibliography. The \bibfield{sorttitle} field may come in handy if you have an entry with a title like «An Introduction to\dots» and want that alphabetized under <I> rather than <A>. In this case, you could put «Introduction to\dots» in the \bibfield{sorttitle} field. Please refer to \secref{use:srt} for further details. This field is consumed by the backend processing and does not appear in the \path{.bbl}.
+
+\fielditem{sortyear}{integer}
+
+A field used to modify the sorting order of the bibliography. In the default sorting templates, if this field is present, it is used instead of the \bibfield{year} field when sorting the bibliography. Please refer to \secref{use:srt} for further details. This field is consumed by the backend processing and does not appear in the \path{.bbl}.
+
+\fielditem{xdata}{separated list of entrykeys}
+
+This field inherits data from one or more \bibtype{xdata} entries. Conceptually, the \bibfield{xdata} field is related to \bibfield{crossref} and \bibfield{xref}: \bibfield{crossref} establishes a logical parent/child relation and inherits data; \bibfield{xref} establishes as logical parent/child relation without inheriting data; \bibfield{xdata} inherits data without establishing a relation. The value of the \bibfield{xdata} may be a single entry key or a separated list of keys. See \secref{use:use:xdat} for further details. This field is consumed by the backend processing and does not appear in the \path{.bbl}.
+
+\fielditem{xref}{entry key}
+
+This field is an alternative cross"=referencing mechanism. It differs from \bibfield{crossref} in that the child entry will not inherit any data from the parent entry specified in the \bibfield{xref} field. If the number of child entries referencing a specific parent entry hits a certain threshold, the parent entry is automatically added to the bibliography even if it has not been cited explicitly. The threshold is settable with the \opt{minxrefs} package option from \secref{use:opt:pre:gen}. Style authors should note that whether or not the \bibfield{xref} fields of the child entries are defined on the \biblatex level depends on the availability of the parent entry. If the parent entry is available, the \bibfield{xref} fields of the child entries will be defined. If not, their \bibfield{xref} fields will be undefined. Whether the parent entry is added to the bibliography implicitly because of the threshold or explicitly because it has been cited does not matter. See also the \bibfield{crossref} field in this section as well as \secref{bib:cav:ref}.
+
+\end{fieldlist}
+
+\subsubsection{Custom Fields}
+\label{bib:fld:ctm}
+
+The fields listed in this section are intended for special bibliography styles. They are not used by the standard bibliography styles.
+
+\begin{fieldlist}
+
+\listitem{name{[a--c]}}{name}
+
+Custom lists for special bibliography styles. Not used by the standard bibliography styles.
+
+\fielditem{name{[a--c]}type}{key}
+
+Similar to \bibfield{authortype} and \bibfield{editortype} but referring to the fields \bibfield{name{[a--c]}}. Not used by the standard bibliography styles.
+
+\listitem{list{[a--f]}}{literal}
+
+Custom lists for special bibliography styles. Not used by the standard bibliography styles.
+
+\fielditem{user{[a--f]}}{literal}
+
+Custom fields for special bibliography styles. Not used by the standard bibliography styles.
+
+\fielditem{verb{[a--c]}}{literal}
+
+Similar to the custom fields above except that these are verbatim fields. Not used by the standard bibliography styles.
+
+\end{fieldlist}
+
+\subsubsection{Field Aliases}
+\label{bib:fld:als}
+
+The aliases listed in this section are provided for backwards compatibility with traditional \bibtex and other applications based on traditional \bibtex styles. Note that these aliases are immediately resolved as the \file{bib} file is processed. All bibliography and citation styles must use the names of the fields they point to, not the alias. In \file{bib} files, you may use either the alias or the field name but not both at the same time.
+
+\begin{fieldlist}
+
+\listitem{address}{literal}
+
+An alias for \bibfield{location}, provided for \bibtex compatibility. Traditional \bibtex uses the slightly misleading field name \bibfield{address} for the place of publication, \ie the location of the publisher, while \biblatex uses the generic field name \bibfield{location}. See \secref{bib:fld:dat,bib:use:and}.
+
+\fielditem{annote}{literal}
+
+An alias for \bibfield{annotation}, provided for \sty{jurabib} compatibility. See \secref{bib:fld:dat}.
+
+\fielditem{archiveprefix}{literal}
+
+An alias for \bibfield{eprinttype}, provided for arXiv compatibility. See \secref{bib:fld:dat,use:use:epr}.
+
+\fielditem{journal}{literal}
+
+An alias for \bibfield{journaltitle}, provided for \bibtex compatibility. See \secref{bib:fld:dat}.
+
+\fielditem{key}{literal}
+
+An alias for \bibfield{sortkey}, provided for \bibtex compatibility. See \secref{bib:fld:spc}.
+
+\fielditem{pdf}{verbatim}
+
+An alias for \bibfield{file}, provided for JabRef compatibility. See \secref{bib:fld:dat}.
+
+\fielditem{primaryclass}{literal}
+
+An alias for \bibfield{eprintclass}, provided for arXiv compatibility. See \secref{bib:fld:dat,use:use:epr}.
+
+\listitem{school}{literal}
+
+An alias for \bibfield{institution}, provided for \bibtex compatibility. The \bibfield{institution} field is used by traditional \bibtex for technical reports whereas the \bibfield{school} field holds the institution associated with theses. The \biblatex package employs the generic field name \bibfield{institution} in both cases. See \secref{bib:fld:dat,bib:use:and}.
+
+\end{fieldlist}
+
+\subsection{Usage Notes}
+\label{bib:use}
+
+The entry types and fields supported by this package should for the most part be intuitive to use for anyone familiar with \bibtex. However, apart from the additional types and fields provided by this package, some of the familiar ones are handled in a way which is in need of explanation.
+This package includes some compatibility code for \file{bib} files which were generated with a traditional \bibtex style in mind. Unfortunately, it is not possible to handle all legacy files automatically because \biblatex's data model is slightly different from traditional \bibtex. Therefore, such \file{bib} files will most likely require editing in order to work properly with this package. In sum, the following items are different from traditional \bibtex styles:
+
+\begin{itemize}
+\setlength{\itemsep}{0pt}
+\item The entry type \bibtype{inbook}. See \secref{bib:typ:blx, bib:use:inb} for details.
+\item The fields \bibfield{institution}, \bibfield{organization}, and \bibfield{publisher} as well as the aliases \bibfield{address} and \bibfield{school}. See \secref{bib:fld:dat, bib:fld:als, bib:use:and} for details.
+\item The handling of certain types of titles. See \secref{bib:use:ttl} for details.
+\item The field \bibfield{series}. See \secref{bib:fld:dat, bib:use:ser} for details.
+\item The fields \bibfield{year} and \bibfield{month}. See \secref{bib:fld:dat, bib:use:dat, bib:use:yearordate, bib:use:iss} for details.
+\item The field \bibfield{edition}. See \secref{bib:fld:dat} for details.
+\item The field \bibfield{key}. See \secref{bib:use:key} for details.
+\end{itemize}
+
+Users of the \sty{jurabib} package should note that the \bibfield{shortauthor} field is treated as a name list by \biblatex, see \secref{bib:use:inc} for details.
+
+\subsubsection{The Entry Type \bibtype{inbook}}
+\label{bib:use:inb}
+
+Use the \bibtype{inbook} entry type for a self"=contained part of a book with its own title only. It relates to \bibtype{book} just like \bibtype{incollection} relates to \bibtype{collection}. See \secref{bib:use:ttl} for examples. If you want to refer to a chapter or section of a book, simply use the \bibfield{book} type and add a \bibfield{chapter} and\slash or \bibfield{pages} field. Whether a bibliography should at all include references to chapters or sections is controversial because a chapter is not a bibliographic entity.
+
+\subsubsection{Missing and Omissible Data}
+\label{bib:use:key}
+
+The fields marked as <required> in \secref{bib:typ:blx} are not strictly required in all cases. The bibliography styles which come with this package can get by with as little as a \bibfield{title} field for most entry types. A book published anonymously, a periodical without an explicit editor, or a software manual without an explicit author should pose no problem as far as the bibliography is concerned. Citation styles, however, may have different requirements. For example, an author"=year citation scheme obviously requires an \bibfield{author}\slash \bibfield{editor} and a \bibfield{year} field.
+
+You may generally use the \bibfield{label} field to provide a substitute for any missing data required for citations. How the \bibfield{label} field is employed depends on the citation style. The author"=year citation styles which come with this package use the \bibfield{label} field as a fallback if either the \bibfield{author}\slash \bibfield{editor} or the \bibfield{year} is missing. The numeric styles, on the other hand, do not use it at all since the numeric scheme is independent of the available data. The author"=title styles ignore it as well, because the bare \bibfield{title} is usually sufficient to form a unique citation and a title is expected to be available in any case. The \bibfield{label} field may also be used to override the non"=numeric portion of the automatically generated \bibfield{labelalpha} field used by alphabetic citation styles. See \secref{aut:bbx:fld} for details.
+
+Note that traditional \bibtex styles support a \bibfield{key} field which is used for alphabetizing if both \bibfield{author} and \bibfield{editor} are missing. The \biblatex package treats \bibfield{key} as an alias for \bibfield{sortkey}. In addition to that, it offers very fine-grained sorting controls, see \secref{bib:fld:spc, use:srt} for details. The \sty{natbib} package employs the \bibfield{key} field as a fallback label for citations. Use the \bibfield{label} field instead.
+
+\subsubsection{Corporate Authors and Editors}
+\label{bib:use:inc}
+
+Corporate authors and editors are given in the \bibfield{author} or \bibfield{editor} field, respectively. Note that they must be wrapped in an extra pair of curly braces to prevent data parsing from treating them as personal names which are to be dissected into their components. Use the \bibfield{shortauthor} field if you want to give an abbreviated form of the name or an acronym for use in citations.
+
+\begin{lstlisting}[style=bibtex]{}
+author = {<<{National Aeronautics and Space Administration}>>},
+shortauthor = {NASA},
+\end{lstlisting}
+%
+The default citation styles will use the short name in all citations while the full name is printed in the bibliography. For corporate editors, use the corresponding fields \sty{editor} and \sty{shorteditor}. Since all of these fields are treated as name lists, it is possible to mix personal names and corporate names, provided that the names of all corporations and institutions are wrapped in braces.
+
+\begin{lstlisting}[style=bibtex]{}
+editor = {<<{National Aeronautics and Space Administration}>>
+ and Doe, John},
+shorteditor = {NASA and Doe, John},
+\end{lstlisting}
+%
+Users switching from the \sty{jurabib} package to \biblatex should note that the \bibfield{shortauthor} field is treated as a name list.
+
+\subsubsection{Literal Lists}
+\label{bib:use:and}
+
+The fields \bibfield{institution}, \bibfield{organization}, \bibfield{publisher}, and \bibfield{location} are literal lists in terms of \secref{bib:fld}. This also applies to \bibfield{origlocation}, \bibfield{origpublisher} and to the field aliases \bibfield{address} and \bibfield{school}. All of these fields may contain a list of items separated by the keyword <|and|>. If they contain a literal <|and|>, it must be wrapped in braces.
+
+\begin{lstlisting}[style=bibtex]{}
+publisher = {William Reid <<{and}>> Company},
+institution = {Office of Information Management <<{and}>> Communications},
+organization = {American Society for Photogrammetry <<{and}>> Remote Sensing
+ and
+ American Congress on Surveying <<{and}>> Mapping},
+\end{lstlisting}
+%
+Note the difference between a literal <|{and}|> and the list separator <|and|> in the above examples. You may also wrap the entire name in braces:
+
+\begin{lstlisting}[style=bibtex]{}
+publisher = {<<{William Reid and Company}>>},
+institution = {<<{Office of Information Management and Communications}>>},
+organization = {<<{American Society for Photogrammetry and Remote Sensing}>>
+ and
+ <<{American Congress on Surveying and Mapping}>>},
+\end{lstlisting}
+%
+Legacy files which have not been updated for use with \biblatex will still work if these fields do not contain a literal <and>. However, note that you will miss out on the additional features of literal lists in this case, such as configurable formatting and automatic truncation.
+
+\subsubsection{Titles}
+\label{bib:use:ttl}
+
+The following examples demonstrate how to handle different types of titles. Let's start with a five"=volume work which is referred to as a whole:
+
+\begin{lstlisting}[style=bibtex]{}
+@MvBook{works,
+ author = {Shakespeare, William},
+ title = {Collected Works},
+ volumes = {5},
+ ...
+\end{lstlisting}
+%
+The individual volumes of a multi"=volume work usually have a title of their own. Suppose the fourth volume of the \emph{Collected Works} includes Shakespeare's sonnets and we are referring to this volume only:
+
+\begin{lstlisting}[style=bibtex]{}
+@Book{works:4,
+ author = {Shakespeare, William},
+ maintitle = {Collected Works},
+ title = {Sonnets},
+ volume = {4},
+ ...
+\end{lstlisting}
+%
+If the individual volumes do not have a title, we put the main title in the \bibfield{title} field and include a volume number:
+
+\begin{lstlisting}[style=bibtex]{}
+@Book{works:4,
+ author = {Shakespeare, William},
+ title = {Collected Works},
+ volume = {4},
+ ...
+\end{lstlisting}
+%
+In the next example, we are referring to a part of a volume, but this part is a self"=contained work with its own title. The respective volume also has a title and there is still the main title of the entire edition:
+
+\begin{lstlisting}[style=bibtex]{}
+@InBook{lear,
+ author = {Shakespeare, William},
+ bookauthor = {Shakespeare, William},
+ maintitle = {Collected Works},
+ booktitle = {Tragedies},
+ title = {King Lear},
+ volume = {1},
+ pages = {53-159},
+ ...
+\end{lstlisting}
+%
+Suppose the first volume of the \emph{Collected Works} includes a reprinted essay by a well"=known scholar. This is not the usual introduction by the editor but a self"=contained work. The \emph{Collected Works} also have a separate editor:
+
+\begin{lstlisting}[style=bibtex]{}
+@InBook{stage,
+ author = {Expert, Edward},
+ title = {Shakespeare and the Elizabethan Stage},
+ bookauthor = {Shakespeare, William},
+ editor = {Bookmaker, Bernard},
+ maintitle = {Collected Works},
+ booktitle = {Tragedies},
+ volume = {1},
+ pages = {7-49},
+ ...
+\end{lstlisting}
+%
+See \secref{bib:use:ser} for further examples.
+
+\subsubsection{Editorial Roles}
+\label{bib:use:edr}
+
+The type of editorial role performed by an editor in one of the \bibfield{editor} fields (\ie \bibfield{editor}, \bibfield{editora}, \bibfield{editorb}, \bibfield{editorc}) may be specified in the corresponding \bibfield{editor...type} field. The following roles are supported by default. The role <\texttt{editor}> is the default. In this case, the \bibfield{editortype} field is omissible.
+
+\begin{marglist}
+\setlength{\itemsep}{0pt}
+\item[editor] The main editor. This is the most generic editorial role and the default value.
+\item[compiler] Similar to \texttt{editor} but used if the task of the editor is mainly compiling.
+\item[founder] The founding editor of a periodical or a comprehensive publication project such as a <Collected Works> edition or a long"=running legal commentary.
+\item[continuator] An editor who continued the work of the founding editor (\texttt{founder}) but was subsequently replaced by the current editor (\texttt{editor}).
+\item[redactor] A secondary editor whose task is redacting the work.
+\item[reviser] A secondary editor whose task is revising the work.
+\item[collaborator] A secondary editor or a consultant to the editor.
+\item[organizer] Similar to \texttt{editor} but used if the task of the editor is mainly organizing.
+\end{marglist}
+%
+For example, if the task of the editor is compiling, you may indicate that in the corresponding \bibfield{editortype} field:
+
+\begin{lstlisting}[style=bibtex]{}
+@Collection{...,
+ editor = {Editor, Edward},
+ editortype = {compiler},
+ ...
+\end{lstlisting}
+%
+There may also be secondary editors in addition to the main editor:
+
+\begin{lstlisting}[style=bibtex]{}
+@Book{...,
+ author = {...},
+ editor = {Editor, Edward},
+ editora = {Redactor, Randolph},
+ editoratype = {redactor},
+ editorb = {Consultant, Conrad},
+ editorbtype = {collaborator},
+ ...
+\end{lstlisting}
+%
+Periodicals or long"=running publication projects may see several generations of editors. For example, there may be a founding editor in addition to the current editor:
+
+\begin{lstlisting}[style=bibtex]{}
+@Book{...,
+ author = {...},
+ editor = {Editor, Edward},
+ editora = {Founder, Frederic},
+ editoratype = {founder},
+ ...
+\end{lstlisting}
+%
+Note that only the \bibfield{editor} is considered in citations and when sorting the bibliography. If an entry is typically cited by the founding editor (and sorted accordingly in the bibliography), the founder goes into the \bibfield{editor} field and the current editor moves to one of the \bibfield{editor...} fields:
+
+\begin{lstlisting}[style=bibtex]{}
+@Collection{...,
+ editor = {Founder, Frederic},
+ editortype = {founder},
+ editora = {Editor, Edward},
+ ...
+\end{lstlisting}
+%
+You may add more roles by initializing and defining a new localisation key whose name corresponds to the identifier in the \bibfield{editor...type} field. See \secref{use:lng,aut:lng:cmd} for details.
+
+\subsubsection{Publication and Journal Series}
+\label{bib:use:ser}
+
+The \bibfield{series} field is used by traditional \bibtex styles both for the main title of a multi"=volume work and for a publication series, \ie a loosely related sequence of books by the same publisher which deal with the same general topic or belong to the same field of research. This may be ambiguous. This package introduces a \bibfield{maintitle} field for multi"=volume works and employs \bibfield{series} for publication series only. The volume or number of a book in the series goes in the \bibfield{number} field in this case:
+
+\begin{lstlisting}[style=bibtex]{}
+@Book{...,
+ author = {Expert, Edward},
+ title = {Shakespeare and the Elizabethan Age},
+ series = {Studies in English Literature and Drama},
+ number = {57},
+ ...
+\end{lstlisting}
+%
+The \bibtype{article} entry type makes use of the \bibfield{series} field as well, but handles it in a special way. First, a test is performed to determine whether the value of the field is an integer. If so, it will be printed as an ordinal. If not, another test is performed to determine whether it is a localisation key. If so, the localised string is printed. If not, the value is printed as is. Consider the following example of a journal published in numbered series:
+
+\begin{lstlisting}[style=bibtex]{}
+@Article{...,
+ journal = {Journal Name},
+ series = {3},
+ volume = {15},
+ number = {7},
+ year = {1995},
+ ...
+\end{lstlisting}
+%
+This entry will be printed as «\emph{Journal Name}. 3rd ser. 15.7 (1995)». Some journals use designations such as «old series» and «new series» instead of a number. Such designations may be given in the \bibfield{series} field as well, either as a literal string or as a localisation key. Consider the following example which makes use of the localisation key \texttt{newseries}:
+
+\begin{lstlisting}[style=bibtex]{}
+@Article{...,
+ journal = {Journal Name},
+ series = {newseries},
+ volume = {9},
+ year = {1998},
+ ...
+\end{lstlisting}
+%
+This entry will be printed as «\emph{Journal Name}. New ser. 9 (1998)». See \secref{aut:lng:key} for a list of localisation keys defined by default.
+
+\subsubsection{Date and Time Specifications}
+\label{bib:use:dat}
+
+\begin{table}
+\caption{Date Specifications}
+\label{bib:use:tab1}
+\tablesetup
+\begin{tabularx}{\textwidth}{@{}>{\ttfamily}llX@{}}
+\toprule
+\multicolumn{1}{@{}H}{Date Specification} &
+\multicolumn{2}{H}{Formatted Date (Examples)} \\
+\cmidrule(l){2-3}
+&
+\multicolumn{1}{H}{Short/12-hour Format} &
+\multicolumn{1}{H}{Long/24-hour Format} \\
+\cmidrule{1-1}\cmidrule(l){2-2}\cmidrule(l){3-3}
+1850 & 1850 & 1850 \\
+1997/ & 1997-- & 1997-- \\
+/1997 & --1997 & --1997 \\
+1997/.. & 1997-- & 1997-- \\
+../1997 & --1997 & --1997 \\
+1967-02 & 02/1967 & February 1967 \\
+2009-01-31 & 31/01/2009 & 31st January 2009 \\
+1988/1992 & 1988--1992 & 1988--1992 \\
+2002-01/2002-02 & 01/2002--02/2002 & January 2002--February 2002 \\
+1995-03-30/1995-04-05 & 30/03/1995--05/04/1995 & 30th March 1995--5th April 1995 \\
+2004-04-05T14:34:00 & 05/04/2004 2:34 PM & 5th April 2004 14:34:00\\
+\bottomrule
+\end{tabularx}
+\end{table}
+
+Date fields such as the default data model dates \bibfield{date}, \bibfield{origdate}, \bibfield{eventdate}, and \bibfield{urldate} adhere to \acr{ISO8601-2} Extended Format specification level 1. In addition to the \acr{ISO8601-2} empty date range markers, you may also specify an open ended/start date range by giving the range separator and omitting the end/start date (\eg \texttt{YYYY/}, \texttt{/YYYY}). See \tabref{bib:use:tab1} for some examples of valid date specifications and the formatted dates automatically generated by \biblatex. The formatted date is language specific and will be adapted automatically. If there is no \bibfield{date} field in an entry, \biblatex will also consider the fields \bibfield{year} and \bibfield{month} for backwards compatibility with traditional \bibtex but this is not encouraged as explicit \bibfield{year} and \bibfield{month} are not parsed for date meta-information markers or times and are used as-is. Style authors should note that date fields like \bibfield{date} or \bibfield{origdate} are only available in the \file{bib} file. All dates are parsed and dissected into their components as the \file{bib} file is processed. The date and time components are made available to styles by way of the special fields discussed in \secref{aut:bbx:fld:dat}. See this section and \tabref{aut:bbx:fld:tab1} on page~\pageref{aut:bbx:fld:tab1} for further information.
+
+\acr{ISO8601-2} Extended Format dates are astronomical dates in which year <0> exists. When outputting dates in BCE or BC era (see the \opt{dateera} option below), note that they will typically be one year earlier since BCE/BC era do not have a year 0 (year 0 is 1 BCE/BC). This conversion is automatic. See examples in \tabref{bib:use:tab2}.
+
+Date field names \emph{must} end with the string <date>, as with the default date fields. Bear this in mind when adding new date fields to the datamodel (see \secref{aut:ctm:dm}). \biblatex will check all date fields after reading the data model and will exit with an error if it finds a date field which does not adhere to this naming convention.
+
+\acr{ISO8601-2} supports dates before common era (BCE/BC) by way of a negative date format and supports <approximate> (circa) and uncertain dates. Such date formats set internal markers which can be tested for so that appropriate localised markers (such as \opt{circa} or \opt{beforecommonera}) can be inserted. Also supported are <unspecified> dates (\acr{ISO8601-2} 4.3) which are automatically expanded into appropriate data ranges accompanied by a field \bibfield{$<$datetype$>$dateunspecified} which details the granularity of the unspecified data. Styles may use this information to format such dates appropriately but the standard styles do not do this. See \tabref{bib:use:tab3} on page~\pageref{bib:use:tab3} for the allowed \acr{ISO8601-2} <unspecified> formats, their range expansions and \bibfield{$<$datetype$>$dateunspecified} values (see \secref{aut:bbx:fld:gen}).
+
+\begin{table}
+\caption{ISO8601-2 4.3 Unspecified Date Parsing}
+\label{bib:use:tab3}
+\tablesetup
+\begin{tabularx}{\textwidth}{@{}>{\ttfamily}llX@{}}
+\toprule
+\multicolumn{1}{@{}H}{Date Specification} &
+\multicolumn{1}{H}{Expanded Range} &
+\multicolumn{1}{H}{Meta-information} \\
+\cmidrule{1-1}\cmidrule(l){2-2}\cmidrule(l){3-3}
+199X & 1990/1999 & yearindecade \\
+19XX & 1900/1999 & yearincentury \\
+1999-XX & 1999-01/1999-12 & monthinyear \\
+1999-01-XX & 1999-01-01/1999-01-31 & dayinmonth \\
+1999-XX-XX & 1999-01-01/1999-12-31 & dayinyear \\
+\bottomrule
+\end{tabularx}
+\end{table}
+
+\Tabref{bib:use:tab2} shows formats which use appropriate tests and formatting. See the date meta-information tests in \secref{aut:aux:tst} and the localisation strings in \secref{aut:lng:key:dt}. See also the \file{96-dates.tex} example file for complete examples of the tests and localisation strings use.
+
+The output of <circa>, uncertainty and era information in standard styles (or custom styles not customising the internal \cmd{mkdaterange*} macros) is controlled by the package options \opt{datecirca}, \opt{dateuncertain}, \opt{dateera} and \opt{dateeraauto} (see \secref{use:opt:pre:gen}). See \tabref{bib:use:tab2} on page~\pageref{bib:use:tab2} for examples which assumes these options are all used.
+
+\begin{table}
+\caption{Enhanced Date Specifications}
+\label{bib:use:tab2}
+\tablesetup
+\begin{tabularx}{\textwidth}{@{}>{\ttfamily}llX@{}}
+\toprule
+\multicolumn{1}{@{}H}{Date Specification} &
+\multicolumn{2}{H}{Formatted Date (Examples)} \\
+\cmidrule(l){2-3}
+&
+\multicolumn{1}{H}{Output Format} &
+\multicolumn{1}{H}{Output Format Notes} \\
+\cmidrule{1-1}\cmidrule(l){2-2}\cmidrule(l){3-3}
+0000 & 1 BC & \kvopt{dateera}{christian} prints \opt{beforechrist} localisation\\
+-0876 & 877 BCE & \kvopt{dateera}{secular} prints \opt{beforecommonera} localisation string\\
+-0877/-0866 & 878 BC--867 BC & using \cmd{ifdateera} test and \opt{beforechrist} localisation string\\
+0768 & 0768 CE & using \opt{dateeraauto} set to <1000> and \opt{commonera} localisation string\\
+-0343-02 & 344-02 BCE & \\
+0343-02-03 & 343-02-03 CE & with \opt{dateeraauto=400} \\
+0343-02-03 & 343-02-02 CE & with \opt{dateeraauto=400} and \opt{julian} \\
+1723\textasciitilde & circa 1723 & using \cmd{ifdatecirca} test\\
+1723? & 1723? & using \cmd{ifdateuncertain} test\\
+1723\% & circa 1723? & using \cmd{ifdateuncertain} and \cmd{ifdatecirca} tests\\
+2004-22 & 2004 & also, \bibfield{yeardivision} is set to the localisation string <summer>\\
+2004-24 & 2004 & also, \bibfield{yeardivision} is set to the localisation string <winter>\\
+\bottomrule
+\end{tabularx}
+\end{table}
+
+\subsubsection{Year, Month and Date}
+\label{bib:use:yearordate}
+
+The fields \bibfield{year} and \bibfield{month} are still supported by \biblatex, but the full set of date features (day and time precision, ranges, \dots) can only be used with \bibfield{date}. It is therefore recommended to prefer \bibfield{date} over \bibfield{year} and \bibfield{month} unless backwards compatibility of the \file{bib} file with classical \bibtex is required.
+
+\subsubsection{Months and Journal Issues}
+\label{bib:use:iss}
+
+The \bibfield{month} field is an integer field. The bibliography style converts the month to a language"=dependent string as required. For backwards compatibility, you may also use the following three"=letter abbreviations in the \bibfield{month} field: \texttt{jan}, \texttt{feb}, \texttt{mar}, \texttt{apr}, \texttt{may}, \texttt{jun}, \texttt{jul}, \texttt{aug}, \texttt{sep}, \texttt{oct}, \texttt{nov}, \texttt{dec}. Note that these abbreviations are \bibtex strings which must be given without any braces or quotes. When using them, don't say |month={jan}| or |month="jan"| but |month=jan|. It is not possible to specify a month such as |month={8/9}|. Use the \bibfield{date} field for date ranges instead. Quarterly journals are typically identified by a designation such as <Spring> or <Summer> which should be given in the \bibfield{issue} field. The placement of the \bibfield{issue} field in \bibtype{article} entries is similar to and overrides the \bibfield{month} field.
+
+\subsubsection{Journal Numbers and Issues}
+\label{bib:use:issnum}
+
+The terms <number>, <issue> and even <issue number> are often used synonymously by journals to refer to the subdvision of a \bibfield{volume}. The fact that \biblatex's data model has fields of both names can sometimes lead to confusion about which field should be used. First and foremost the word that the journal uses for the subdivsion of a \bibfield{volume} should be of minor importance, what matters is the role in the data model. As a rule of thumb \bibfield{number} is the right field in most circumstances. In the standard styles \bibfield{number} modifies \bibfield{volume}, whereas \bibfield{issue} modifies the date (year) of the entry. Numeric identifiers and short designators that are not necessarily (entirely) numeric such as <A>, <S1>, <C2>, <Suppl.\ 3>, <4es> would go into the \bibfield{number} field, because they usually modify the \bibfield{volume}. The output of---especially longer---non-numeric input for \bibfield{number} should be checked since it could potentially look odd with some styles. The field \bibfield{issue} can be used for designations such as <Spring>, <Winter> or <Michaelmas term> if that is commonly used to refer to the journal.
+
+The <article number> or <paper number>, which can be used instead of---or along with---a page range to pinpoint a specific article within another work, goes into the \bibfield{eid} field, whose placement in the standard styles is similar to the analogous \bibfield{pages} field.
+
+\subsubsection{Pagination}
+\label{bib:use:pag}
+
+When specifying a page or page range, either in the \bibfield{pages} field of an entry or in the \prm{postnote} argument to a citation command, it is convenient to have \biblatex add prefixes like <p.> or <pp.> automatically and this is indeed what this package does by default. However, some works may use a different pagination scheme or may not be cited by page but rather by verse or line number. This is when the \bibfield{pagination} and \bibfield{bookpagination} fields come into play. As an example, consider the following entry:
+
+\begin{lstlisting}[style=bibtex]{}
+@InBook{key,
+ title = {...},
+ pagination = {verse},
+ booktitle = {...},
+ bookpagination = {page},
+ pages = {53--65},
+ ...
+\end{lstlisting}
+%
+The \bibfield{bookpagination} field affects the formatting of the \bibfield{pages} and \bibfield{pagetotal} fields in the list of references. Since \texttt{page} is the default, this field is omissible in the above example. In this case, the page range will be formatted as <pp.~53--65>. Suppose that, when quoting from this work, it is customary to use verse numbers rather than page numbers in citations. This is reflected by the \bibfield{pagination} field, which affects the formatting of the \prm{postnote} argument to any citation command. With a citation like |\cite[17]{key}|, the postnote will be formatted as <v.~17>. Setting the \bibfield{pagination} field to \texttt{section} would yield <\S~17>. See \secref{use:cav:pag} for further usage instructions.
+
+The \bibfield{pagination} and \bibfield{bookpagination} fields are key fields. This package will try to use their value as a localisation key, provided that the key is defined. Always use the singular form of the key name in \file{bib} files, the plural is formed automatically. The keys \texttt{page}, \texttt{column}, \texttt{line}, \texttt{verse}, \texttt{section}, and \texttt{paragraph} are predefined, with \texttt{page} being the default. The string <\texttt{none}> has a special meaning when used in a \bibfield{pagination} or \bibfield{bookpagination} field. It suppresses the prefix for the respective entry. If there are no predefined localisation keys for the pagination scheme required by a certain entry, you can simply add them. See the commands \cmd{NewBibliographyString} and \cmd{DefineBibliographyStrings} in \secref{use:lng}. You need to define two localisation strings for each additional pagination scheme: the singular form (whose localisation key corresponds to the value of the \bibfield{pagination} field) and the plural form (whose localisation key must be the singular plus the letter <\texttt{s}>). See the predefined keys in \secref{aut:lng:key} for examples.
+
+\subsection{Hints and Caveats}
+\label{bib:cav}
+
+This section provides some additional hints concerning the data interface of this package. It also addresses some common problems.
+
+\subsubsection{Cross-referencing}
+\label{bib:cav:ref}
+
+\biber features a highly customizable cross-referencing mechanism with flexible data inheritance rules. Duplicating certain fields in the parent entry or adding empty fields to the child entry is no longer required. Entries are specified in a natural way:
+
+\begin{lstlisting}[style=bibtex]{}
+@Book{book,
+ author = {Author},
+ title = {Booktitle},
+ subtitle = {Booksubtitle},
+ publisher = {Publisher},
+ location = {Location},
+ date = {1995},
+}
+@InBook{inbook,
+ crossref = {book},
+ title = {Title},
+ pages = {5--25},
+}
+\end{lstlisting}
+%
+The \bibfield{title} field of the parent will be copied to the \bibfield{booktitle} field of the child, the \bibfield{subtitle} becomes the \bibfield{booksubtitle}. The \bibfield{author} of the parent becomes the \bibfield{bookauthor} of the child and, since the child does not provide an \bibfield{author} field, it is also duplicated as the \bibfield{author} of the child. After data inheritance, the child entry is similar to this:
+
+\begin{lstlisting}[style=bibtex]{}
+author = {Author},
+bookauthor = {Author},
+title = {Title},
+booktitle = {Booktitle},
+booksubtitle = {Booksubtitle},
+publisher = {Publisher},
+location = {Location},
+date = {1995},
+pages = {5--25},
+\end{lstlisting}
+%
+See \apxref{apx:ref} for a list of mapping rules set up by default. Note that all of this is customizable. See \secref{aut:ctm:ref} on how to configure \biber's cross"=referencing mechanism. See also \secref{bib:fld:spc}.
+
+\paragraph{The \bibfield{xref} field}
+\label{bib:cav:ref:ref}
+
+In addition to the \bibfield{crossref} field, \biblatex supports a simplified cross"=referencing mechanism based on the \bibfield{xref} field. This is useful if you want to establish a parent\slash child relation between two associated entries but prefer to keep them independent as far as the data is concerned. The \bibfield{xref} field differs from \bibfield{crossref} in that the child entry will not inherit any data from the parent. If the parent is referenced by a certain number of child entries, \biblatex will automatically add it to the bibliography. The threshold is controlled by the \opt{minxrefs} package option from \secref{use:opt:pre:gen}.u See also \secref{bib:fld:spc}.
+
+\subsubsection{Sorting and Encoding Issues}
+\label{bib:cav:enc}
+
+\biber handles \acr{US-ASCII}, 8-bit encodings such as Latin\,1, and \utf. It features true Unicode support and is capable of reencoding the \file{bib} data on the fly in a robust way. For sorting, \biber uses a Perl implementation of the Unicode Collation Algorithm (\acr{UCA}), as outlined in Unicode Technical Standard \#10.\fnurl{https://unicode.org/reports/tr10/} Collation tailoring based on the Unicode Common Locale Data Repository (\acr{CLDR}) is also supported.\fnurl{http://cldr.unicode.org/}
+
+Supporting Unicode implies much more than handling \utf input. Unicode is a complex standard covering more than its most well-known parts, the Unicode character encoding and transport encodings such as \utf. It also standardizes aspects such as string collation, which is required for language-sensitive sorting. For example, by using the Unicode Collation Algorithm, \biber can handle the character <ß> without any manual intervention. All you need to do to get localised sorting is specify the locale:
+
+\begin{ltxexample}
+\usepackage[sortlocale=de]{biblatex}
+\end{ltxexample}
+%
+or if you are using German as the main document language via \sty{babel} or \sty{polyglossia}:
+
+\begin{ltxexample}
+\usepackage[sortlocale=auto]{biblatex}
+\end{ltxexample}
+%
+This will make \biblatex pass the \sty{babel}/\sty{polyglossia} main document language
+as the locale which \biber will map into a suitable default locale. \biber
+will not try to get locale information from its environment as this makes
+document processing dependent on something not in the document which is
+against \tex's spirit of reproducibility. This also makes sense since
+\sty{babel}/\sty{polyglossia} are in fact the relevant environment for a document. Note
+that this will also work with 8-bit encodings such as Latin\,9, \ie you can
+take advantage of Unicode-based sorting even though you are not using \utf
+input. See \secref{bib:cav:enc:enc} on how to specify input and data
+encodings properly.
+
+\paragraph{Specifying Encodings}
+\label{bib:cav:enc:enc}
+When using a non-\acr{US-ASCII} encoding in the \file{bib} file, it is important to understand what \biblatex can do for you and what may require manual intervention. The package takes care of the \latex side, \ie it ensures that the data imported from the \file{bbl} file is interpreted correctly, provided that the \opt{bibencoding} package option (or the datasource specific override for this, see \secref{use:bib:res}) is set properly. All of this is handled automatically and no further steps, apart from setting the \opt{bibencoding} option in certain cases (namely when the encoding of the \file{bib} file differs from the encoding of the \file{tex} file), are required provided that you set up your document encoding (\ie load \sty{inputenc} or related packages if required) \emph{before} \biblatex is loaded. Here are a few typical usage scenarios along with the relevant lines from the document preamble:
+
+\begin{itemize}
+\setlength{\itemsep}{0pt}
+
+\item \acr{US-ASCII} notation in both the \file{tex} and the \file{bib} file with \pdftex or traditional \tex:
+
+\begin{ltxexample}
+\usepackage{biblatex}
+\end{ltxexample}
+
+\item Latin\,1 encoding (\acr{ISO}-8859-1) in the \file{tex} file, \acr{US-ASCII} notation in the \file{bib} file with \pdftex or traditional \tex :
+
+\begin{ltxexample}
+\usepackage[latin1]{inputenc}
+\usepackage[bibencoding=ascii]{biblatex}
+\end{ltxexample}
+
+\item Latin\,9 encoding (\acr{ISO}-8859-15) in both the \file{tex} and the \file{bib} file with \pdftex or traditional:
+
+\begin{ltxexample}
+\usepackage[latin9]{inputenc}
+\usepackage[bibencoding=auto]{biblatex}
+\end{ltxexample}
+%
+Since \kvopt{bibencoding}{auto} is the default setting, the option is omissible. The following setup will have the same effect:
+
+\begin{ltxexample}
+\usepackage[latin9]{inputenc}
+\usepackage{biblatex}
+\end{ltxexample}
+
+\item \utf encoding in the \file{tex} file, Latin\,1 (\acr{ISO}-8859-1) in the \file{bib} file with \pdftex or traditional \tex:
+
+\begin{ltxexample}
+\usepackage[utf8]{inputenc}
+\usepackage[bibencoding=latin1]{biblatex}
+\end{ltxexample}
+
+The same scenario with \latex release 2018-04-01 or above, \xetex or \luatex in native \utf mode:
+
+\begin{ltxexample}
+\usepackage[bibencoding=latin1]{biblatex}
+\end{ltxexample}
+
+\end{itemize}
+
+\biber can handle \acr{US-ASCII} notation, 8-bit encodings such as Latin\,1, and \utf. It is also capable of reencoding the \file{bib} data on the fly (replacing the limited macro-level reencoding feature of \biblatex). This will happen automatically if required, provided that you specify the encoding of the \file{bib} files properly. In addition to the scenarios discussed above, \biber can also handle the following cases:
+
+\begin{itemize}
+
+\item Transparent \utf workflow, \ie \utf encoding in both the \file{tex} and the \file{bib} file with \pdftex or traditional \tex:
+
+\begin{ltxexample}
+\usepackage[utf8]{inputenc}
+\usepackage[bibencoding=auto]{biblatex}
+\end{ltxexample}
+%
+Since \kvopt{bibencoding}{auto} is the default setting, the option is omissible:
+
+\begin{ltxexample}
+\usepackage[utf8]{inputenc}
+\usepackage{biblatex}
+\end{ltxexample}
+
+The same scenario with \xetex or \luatex in native \utf mode:
+
+\begin{ltxexample}
+\usepackage{biblatex}
+\end{ltxexample}
+
+\item It is even possible to combine an 8-bit encoded \file{tex} file with \utf encoding in the \file{bib} file, provided that all characters in the \file{bib} file are also covered by the selected 8-bit encoding:
+
+\begin{ltxexample}
+\usepackage[latin1]{inputenc}
+\usepackage[bibencoding=utf8]{biblatex}
+\end{ltxexample}
+
+\end{itemize}
+
+Some workarounds may be required when using traditional \tex or \pdftex with \utf encoding because \sty{inputenc}'s \file{utf8} module does not cover all of Unicode. Roughly speaking, it only covers the Western European Unicode range. When loading \sty{inputenc} with the \file{utf8} option, \biblatex will normally instruct \biber to reencode the \file{bib} data to \utf. This may lead to \sty{inputenc} errors if some of the characters in the \file{bib} file are outside the limited Unicode range supported by \sty{inputenc}.
+
+\begin{itemize}
+
+\item If you are affected by this problem, try setting the \opt{safeinputenc} option:
+
+\begin{ltxexample}
+\usepackage[utf8]{inputenc}
+\usepackage[safeinputenc]{biblatex}
+\end{ltxexample}
+%
+If this option is enabled, \biblatex will ignore \sty{inputenc}'s \opt{utf8} option and use \acr{US-ASCII}. \biber will then try to convert the \file{bib} data to \acr{US-ASCII} notation. For example, it will convert \k{S} to |\k{S}|. This option is similar to setting \kvopt{texencoding}{ascii} but will only take effect in this specific scenario (\sty{inputenc}\slash \sty{inputenx} with \utf). This workaround takes advantage of the fact that both Unicode and the \utf transport encoding are backwards compatible with \acr{US-ASCII}.
+
+\end{itemize}
+
+This solution may be acceptable as a workaround if the data in the \file{bib} file is mostly \acr{US-ASCII} anyway, with only a few strings, such as some authors' names, causing problems. However, keep in mind that it will not magically make traditional \tex or \pdftex support Unicode. It may help if the occasional odd character is not supported by \sty{inputenc}, but may still be processed by \tex when using an accent command (\eg |\d{S}| instead of \d{S}). If you need full Unicode support, however, switch to \xetex or \luatex.
+
+Typical errors when \sty{inputenc} cannot handle a certain UTF-8 character are:
+
+\begin{verbatim}
+! Package inputenc Error: Unicode char <char> (U+<codepoint>)
+(inputenc) not set up for use with LaTeX.
+\end{verbatim}
+%
+but also less obvious things like:
+
+\begin{verbatim}
+! Argument of \UTFviii@three@octets has an extra }.
+\end{verbatim}
+
+\section{User Guide}
+\label{use}
+
+This part of the manual documents the user interface of the \biblatex package. The user guide covers everything you need to know in order to use \biblatex with the default styles that come with this package. You should read the user guide first in any case. If you want to write your own citation and\slash or bibliography styles, continue with the author guide afterwards.
+
+\subsection{Package Options}
+\label{use:opt}
+
+All package options are given in \keyval notation. The value \texttt{true} is omissible with all boolean keys. For example, giving \opt{sortcites} without a value is equivalent to \kvopt{sortcites}{true}.
+
+\subsubsection{Load-time Options}
+\label{use:opt:ldt}
+
+The following options must be used as \biblatex is loaded, \ie in the optional argument to \cmd{usepackage}.
+
+\begin{optionlist}
+
+\optitem[biber]{backend}{\opt{bibtex}, \opt{bibtex8}, \opt{biber}}
+
+Specifies the database backend. The following backends are supported:
+
+\begin{valuelist}
+
+\item[biber] \biber, the default backend of \biblatex, supports \acr{US-ASCII}, 8-bit encodings, \utf, on-the-fly reencoding, locale"=specific sorting, and many other features. Locale"=specific sorting, case"=sensitive sorting, and upper\slash lowercase precedence are controlled by the options \opt{sortlocale}, \opt{sortcase}, and \opt{sortupper}, respectively.
+
+\item[bibtex] Legacy \bibtex. Traditional \bibtex supports \acr{US-ASCII} encoding only. Sorting is always case"=insensitive.
+
+\item[bibtex8] \bin{bibtex8}, the 8-bit implementation of \bibtex, supports \acr{US-ASCII} and 8-bit encodings such as Latin~1.
+
+
+\end{valuelist}
+
+See \secref{use:bibtex} for details of using \bibtex as a backend.
+
+\valitem[numeric]{style}{file}
+
+Loads the bibliography style \prm{file}\path{.bbx} and the citation style \prm{file}\path{.cbx}. See \secref{use:xbx} for an overview of the standard styles.
+
+\valitem[numeric]{bibstyle}{file}
+
+Loads the bibliography style \prm{file}\path{.bbx}. See \secref{use:xbx:bbx} for an overview of the standard bibliography styles.
+
+\valitem[numeric]{citestyle}{file}
+
+Loads the citation style \prm{file}\path{.cbx}. See \secref{use:xbx:cbx} for an overview of the standard citation styles.
+
+\boolitem[false]{natbib}
+
+Loads compatibility module which provides aliases for the citation commands of the \sty{natbib} package. See \secref{use:cit:nat} for details.
+
+\boolitem[false]{mcite}
+
+Loads a citation module which provides \sty{mcite}\slash\sty{mciteplus}-like citation commands. See \secref{use:cit:mct} for details.
+
+\optitem[auto]{casechanger}{\opt{auto}, \opt{latex2e}, \opt{expl3}}
+
+This option selects the implementation of \biblatex's case changing functions, most prominently \cmd{MakeSentenceCase*}. \opt{expl3} selects the new implementation based on the \latex3 module \sty{l3text}. Note that the \sty{l3text} module assumes \utf input and that your \sty{expl3} version should be new enough (at least version 2020-04-06). \opt{latex2e} selects the original implementation, which has tricky brace protection behaviour and some shortcomings when dealing with non-\acr{US-ASCII} characters. The default \opt{auto} selects the case changing code based on the available \sty{expl3} version and detected document encoding (\opt{expl3} is selected if \sty{expl3} is at least version 2020-04-06 and the document encoding is detected as \utf).
+
+\end{optionlist}
+
+\subsubsection{Preamble Options}
+\label{use:opt:pre}
+
+\paragraph{General}
+\label{use:opt:pre:gen}
+
+The following options may be used in the optional argument to \cmd{usepackage} as well as in the configuration file and the document preamble. The default value listed to the right is the package default. Note that bibliography and citation styles may modify the default setting at load time, see \secref{use:xbx} for details.
+
+\begin{optionlist}
+
+\valitem[default]{msform}{form}
+
+The default multiscript field alternate <form>. Must be one of the forms declared in <multiscriptforms> constant. This controls the default <form> selected by \biber and also the default <form> selected by citations. Can be overridden on a per-refcontext basis. See \ref{use:multiscript}.
+
+\valitem[en]{mslang}{bcp47tag}
+
+The default multiscript field alternate <language> as a BCP47 tag. This controls the default <language> selected by \biber and also the default <language> selected by citations. Can be overridden on a per-refcontext basis. See \ref{use:multiscript}. If \sty{babel} or \sty{polyglossia} are used, this is determined from the main language selected at the beginning of the document. If neither \sty{babel} or \sty{polyglossia} is loaded, the default is as show above.
+
+\boolitem[false]{dynamiclabel}
+
+Normally the multiscript entryfield alternates pointed to by \bibfield{labelname} and \bibfield{labeltitle} are determined for the document via the \cmd{DeclareLabelname} and \cmd{DeclareLabeltitle} commands and this determination is static. If this option is <true>, then the multiscript alternate entryfield pointed by \bibfield{labelname} and \bibfield{labeltitle} are determined dynamically by the setting of the \opt{msform} and \opt{mslang} options at the point where the \bibfield{labelname} or \bibfield{labeltitle} are printed. See \secref{use:multiscript}.
+
+\optitem[nty]{sorting}{\opt{nty}, \opt{nyt}, \opt{nyvt}, \opt{anyt}, \opt{anyvt}, \opt{ynt}, \opt{ydnt}, \opt{count}, \opt{none}, \opt{debug}, \prm{name}}
+
+The sorting order of the bibliography. Unless stated otherwise, the entries are sorted in ascending order. The following choices are available by default:
+
+\begin{valuelist}
+\item[nty] Sort by name, title, year.
+\item[nyt] Sort by name, year, title.
+\item[nyvt] Sort by name, year, volume, title.
+\item[anyt] Sort by alphabetic label, name, year, title.
+\item[anyvt] Sort by alphabetic label, name, year, volume, title.
+\item[ynt] Sort by year, name, title.
+\item[ydnt] Sort by year (descending), name, title.
+\item[none] Do not sort at all. All entries are processed in citation order.
+\item[count] Sort in descending order of number of times cited
+\item[debug] Sort by entry key. This is intended for debugging only.
+\item[\prm{name}] Use \prm{name}, as defined with \cmd{DeclareSortingTemplate} (\secref{aut:ctm:srt})
+\end{valuelist}
+
+Using any of the <alphabetic> sorting templates only makes sense in conjunction with a bibliography style which prints the corresponding labels. Note that some bibliography styles initialize this package option to a value different from the package default (\opt{nty}). See \secref{use:xbx:bbx} for details. Please refer to \secref{use:srt} for an in"=depth explanation of the above sorting options as well as the fields considered in the sorting process. See also \secref{aut:ctm:srt} on how to adapt the predefined templates or define new ones.
+
+\boolitem[true]{sortcase}
+
+Whether or not to sort the bibliography and the list of shorthands case"=sensitively.
+
+\boolitem[true]{sortupper}
+
+This option corresponds to \biber's \opt{--sortupper} command-line option. If enabled, the bibliography is sorted in <uppercase before lowercase> order. Disabling this option means <lowercase before uppercase> order.
+
+\optitem[auto]{sortlocale}{\opt{auto}, \prm{locale}}
+
+This option sets the global sorting locale. Every sorting template inherits this locale if none is specified using the \prm{locale} option to \cmd{printbibliography}. Setting this to \opt{auto} requests that it be set to the \sty{babel}/\sty{polyglossia} main document language identifier, if these packages are used and \texttt{en\_US} otherwise. \biber will map \sty{babel}/\sty{polyglossia} language identifiers into sensible locale identifiers (see the \biber documentation). You can therefore specify either a normal locale identifier like \texttt{de\_DE\_phonebook}, \texttt{es\_ES} or one of the supported \sty{babel}/\sty{polyglossia} language identifiers if the mapping \biber makes of this is fine for you.
+
+\boolitem[false]{sortcites}
+
+Whether or not to sort citations if multiple entry keys are passed to a citation command. If this option is enabled, citations are sorted according to the current bibliography context sorting template (see \secref{use:bib:context}). This feature works with all citation styles.
+
+\boolitem[false]{sortsets}
+
+Whether or not to sort set members according to the active reference context sorting scheme. By default this is false and set members appear in the order given in the data source.
+
+\boolitem[false]{pluralothers}
+
+Controls whether the localised <and others> string (e.g. <et al>) is forced
+to be plural. If true, it will only be printed in place of two or more
+names and if there is only one name it would replace, the name itself is
+printed instead. Defaults to false.
+
+\intitem[3]{maxnames}
+
+A threshold affecting all lists of names (\bibfield{author}, \bibfield{editor}, etc.). If a list exceeds this threshold, \ie if it holds more than \prm{integer} names, it is automatically truncated according to the setting of the \opt{minnames} option. \opt{maxnames} is the master option which sets \opt{maxbibnames}, \opt{maxcitenames} and \opt{maxsortnames}. Note that the \opt{uniquelist} feature can locally override \opt{maxnames}, see the documentation of the \opt{uniquelist} option in \secref{use:opt:pre:int} and \secref{aut:cav:amb}.
+
+\intitem[1]{minnames}
+
+A limit affecting all lists of names (\bibfield{author}, \bibfield{editor}, etc.). If a list holds more than \prm{maxnames} names, it is automatically truncated to \prm{minnames} names. The \prm{minnames} value must be smaller than or equal to \prm{maxnames}. \opt{minnames} is the master option which sets both \opt{minbibnames} and \opt{mincitenames}. Like \opt{maxnames} the value of \opt{minnames} can be overridden by \opt{uniquelist}.
+
+\intitem[\prm{maxnames}]{maxbibnames}
+
+Similar to \opt{maxnames} but affects only the bibliography.
+
+\intitem[\prm{minnames}]{minbibnames}
+
+Similar to \opt{minnames} but affects only the bibliography.
+
+\intitem[\prm{maxnames}]{maxcitenames}
+
+Similar to \opt{maxnames} but affects only the citations in the document body.
+
+
+\intitem[\prm{minnames}]{mincitenames}
+
+Similar to \opt{minnames} but affects only the citations in the document body.
+
+\intitem[\prm{maxbibnames}]{maxsortnames}
+
+Similar to \opt{maxnames} but affects only the names visible to sorting. Since this defaults to \prm{maxbibnames}, you should set this after \opt{maxbibnames} if \opt{maxbibnames} is explicitly set.
+
+\intitem[\prm{minbibnames}]{minsortnames}
+
+Similar to \opt{minnames} but affects only the names visible to sorting. Since this defaults to \prm{minbibnames}, you should set this after \opt{minbibnames} if \opt{minbibnames} is explicitly set.
+
+\intitem[3]{maxitems}
+
+Similar to \opt{maxnames}, but affecting all literal lists (\bibfield{publisher}, \bibfield{location}, etc.).
+
+\intitem[1]{minitems}
+
+Similar to \opt{minnames}, but affecting all literal lists (\bibfield{publisher}, \bibfield{location}, etc.).
+
+\optitem{autocite}{\opt{plain}, \opt{inline}, \opt{footnote}, \opt{superscript}, \opt{...}}
+
+This option controls the behavior of the \cmd{autocite} command discussed in \secref{use:cit:aut}. The \opt{plain} option makes \cmd{autocite} behave like \cmd{cite}, \opt{inline} makes it behave like \cmd{parencite}, \opt{footnote} makes it behave like \cmd{footcite}, and \opt{superscript} makes it behave like \cmd{supercite}. The options \opt{plain}, \opt{inline}, and \opt{footnote} are always available, the \opt{superscript} option is only provided by the numeric citation styles which come with this package. The citation style may also define additional options. The default setting of this option depends on the selected citation style, see \secref{use:xbx:cbx}.
+
+\boolitem[true]{autopunct}
+
+This option controls whether the citation commands scan ahead for punctuation marks. See \secref{use:cit} and \cmd{DeclareAutoPunctuation} in \secref{aut:pct:cfg} for details.
+
+\optitem[autobib]{language}{\opt{autobib}, \opt{autocite}, \opt{auto}, \prm{language}}
+
+This option controls multilingual support. By default \biblatex automatically picks up the active surrounding language from the \sty{babel}/\sty{polyglossia} package\footnote{Note that \biblatex has only limited support for \sty{polyglossia} versions prior to v1.45. If \sty{polyglossia} is used, it should be updated to version~1.45 (2019/10/27) or above.} (and fall back to English if \sty{babel}/\sty{polyglossia} is not available). \opt{autobib} switches the language for each entry in the bibliography using the \bibfield{langid} field and the language environment specified by the \opt{autolang} option. \opt{autocite} switches the language for each citation using the \bibfield{langid} field and the language environment specified by the \opt{autolang} option. \opt{auto} is a shorthand to set both \opt{autobib} and \opt{autocite}. It is also possible to select the package language manually. In this case, the language chosen will override the \bibfield{langid} of entries and you should still choose a language switching environment with the \opt{autolang} option to select how the switch to the manually chosen language is handled. Please refer to \tabref{bib:fld:tab1} for a list of supported languages and the corresponding identifiers.
+
+\boolitem[true]{clearlang}
+
+If this option is enabled, \biblatex will automatically clear the \bibfield{language} field of all entries whose language matches the \sty{babel}/\sty{polyglossia} language of the document (or the language specified explicitly with the \opt{language} option) in order to omit redundant language specifications. The language mappings required by this feature are provided by the \cmd{DeclareRedundantLanguages} command from \secref{aut:lng:cmd}.
+This option is also settable on a per-type and per-entry basis.
+
+\optitem[none]{autolang}{\opt{none}, \opt{hyphen}, \opt{other}, \opt{other*}, \opt{langname}}
+
+This option controls which \sty{babel} language environment\footnote{\sty{polyglossia} understands the \sty{babel} language environments too and so this option controls both the \sty{babel} and \sty{polyglossia} language environments.} is used if the \sty{babel}/\sty{polyglossia} package is loaded and a bibliography entry includes a \bibfield{langid} field (see \secref{bib:fld:spc}). Note that regardless of the selected value \biblatex automatically adjusts to the main document language if \sty{babel}/\sty{polyglossia} is loaded. In multilingual documents, it will also continually adjust to the current language as far as citations and the default language of the bibliography is concerned. The effect of additional language adjustment, which can negate the effect of picking up the surrounding language, depends on the language environment selected by this option. The possible choices are:
+
+\begin{valuelist}
+
+\item[none]
+Do not use any additional enclosing language environment at all. This means that citations and the bibliography are set in the currently active language---this need not be the main language.
+
+\item[hyphen]
+Enclose the entry in a \env{hyphenrules} environment. This will load hyphenation patterns for the language specified in the \bibfield{langid} field of the entry, if available. Localisation strings and extra language definitions are not changed and taken from the surrounding language environment.
+
+\item[other]
+Enclose the entry in an \env{otherlanguage} environment. This will load hyphenation patterns for the specified language, enable all extra definitions which \sty{babel}/\sty{polyglossia} and \biblatex provide for the respective language, and translate key terms such as <editor> and <volume>. The extra definitions include localisations of the date format, of ordinals, and similar things.
+
+\item[other*]
+Enclose the entry in an \env{otherlanguage*} environment. Please note that \biblatex treats \env{otherlanguage*} like \env{otherlanguage} if \opt{langhook} is set to \opt{extras}.
+
+\item[langname]
+\sty{polyglossia} only. Enclose the entry in a \env{$<$languagename$>$} environment. The benefit of this option value for \sty{polyglossia} users is that it takes note of the \bibfield{langidopts} field so that you can add per-language options to an entry (like selecting a language variant). When using \sty{babel}, this option does the same as the \opt{other} option value.
+
+\end{valuelist}
+
+\optitem[captions]{langhook}{\opt{captions}, \opt{extras}}
+
+This option controls whether bibliography strings and extras are written to \cmd{captions$<$language$>$} or \cmd{extras$<$language$>$}. The exact effect of this option depend on the language package (\sty{babel}/\sty{polyglossia}). Broadly speaking, the language switching environments provided by those packages (except \env{hyphenrules}) either switch language captions and extras or only language extras. Hence, if this option is set to \opt{extras}, all language switches will affect \biblatex, whereas with \opt{captions} only language switches that also switch other parts of the document language affect \biblatex.
+
+\optitem[none]{autofieldlang}{\opt{none}, \opt{hyphen}, \opt{other}, \opt{other*}, \opt{langname}}
+
+As \opt{autolang} but controls the language environment at the level of individual multiscript fields or list items in a multiscript field. This environment overrides \opt{autolang} at a more granular level.
+
+\boolitem[false]{autofieldlangstrings}
+
+Whether to also switch \biblatex languages strings when \opt{autofieldlang} is set to <none> or <hyphen> (with \opt{autolang}, this only happens with <other> or <other*>). This allows more fine-grained control over language switching at the entryfield and entryfield item level.
+
+\optitem[none]{block}{\opt{none}, \opt{space}, \opt{par}, \opt{nbpar}, \opt{ragged}}
+
+This option controls the extra spacing between blocks, \ie larger segments of a bibliography entry. The possible choices are:
+
+\begin{valuelist}
+
+\item[none] Do not add anything at all.
+
+\item[space] Insert additional horizontal space between blocks. This is similar to the default behavior of the standard \latex document classes.
+
+\item[par] Start a new paragraph for every block. This is similar to the \opt{openbib} option of the standard \latex document classes.
+
+\item[nbpar] Similar to the \opt{par} option, but disallows page breaks at block boundaries and within an entry.
+
+\item[ragged] Inserts a small negative penalty to encourage line breaks at block boundaries and sets the bibliography ragged right.
+
+\end{valuelist}
+
+The \cmd{newblockpunct} command may also be redefined directly to achieve different results, see \secref{use:fmt:fmt}. Also see \secref{aut:pct:new} for additional information.
+
+\boolitem[false]{locallabelwidth}
+
+This option controls whether \cmd{printbibliography} uses a locally calculated value for \cmd{labelnumberwidth} and \cmd{labelalphawidth} or the global value calculated from all entries. The local value is calculated separately for each bibliography and takes into account only the entries displayed in that bibliography. This option is useful if there are several bibliographies with wildly varying label lengths in the same document.
+
+\optitem[foot+end]{notetype}{\opt{foot+end}, \opt{footonly}, \opt{endonly}}
+
+This option controls the behavior of \cmd{mkbibfootnote}, \cmd{mkbibendnote}, and similar wrappers from \secref{aut:fmt:ich}. The possible choices are:
+
+\begin{valuelist}
+\item[foot+end] Support both footnotes and endnotes, \ie \cmd{mkbibfootnote} will generate footnotes and \cmd{mkbibendnote} will generate endnotes.
+\item[footonly] Force footnotes, \ie make \cmd{mkbibendnote} generate footnotes.
+\item[endonly] Force endnotes, \ie make \cmd{mkbibfootnote} generate endnotes.
+\end{valuelist}
+
+\optitem[auto]{hyperref}{\opt{true}, \opt{false}, \opt{auto}, \opt{manual}}
+
+Whether or not to transform citations and back references into clickable hyperlinks. This feature requires the \sty{hyperref} package. It also requires support by the selected citation style. All standard styles which ship with this package support hyperlinks. \kvopt{hyperref}{auto} automatically detects if the \sty{hyperref} package has been loaded. This is the default setting. \kvopt{hyperref}{false} explicitly disables links even if \sty{hyperref} is loaded. \kvopt{hyperref}{true} enables links when \sty{hyperref} is loaded, it cannot explicitly enable links if \sty{hyperref} is not loaded, as such it works exactly like \kvopt{hyperref}{auto} except that it will issue a warning if \sty{hyperref} is not loaded. \kvopt{hyperref}{manual} gives full manual control over \sty{hyperref} interaction, it should only be needed by package authors in very special circumstances. With the \kvopt{hyperref}{manual} setting you are responsible to enable or disable \sty{hyperref} support manually with \cmd{BiblatexManualHyperrefOn} or \cmd{BiblatexManualHyperrefOff} yourself. One of the two commands must be called exactly once; \cmd{BiblatexManualHyperrefOn} can only be called after \sty{hyperref} is loaded.
+
+\boolitem[false]{backref}
+
+Whether or not to print back references in the bibliography. The back references are a list of page numbers indicating the pages on which the respective bibliography entry is cited. If there are \env{refsection} environments in the document, the back references are local to the reference sections. Strictly speaking, this option only controls whether the \biblatex package collects the data required to print such references. This feature still has to be supported by the selected bibliography style. All standard styles which come with this package do so.
+
+\optitem[three]{backrefstyle}{\opt{none}, \opt{three}, \opt{two}, \opt{two+}, \opt{three+}, \opt{all+}}
+
+This option controls how sequences of consecutive pages in the list of back references are formatted. The following styles are available:
+
+\begin{valuelist}
+
+\item[none] Disable this feature, \ie do not compress the page list.
+
+\item[three] Compress any sequence of three or more consecutive pages to a range, \eg the list <1, 2, 11, 12, 13, 21, 22, 23, 24> is compressed to <1, 2, 11--13, 21--24>.
+
+\item[two] Compress any sequence of two or more consecutive pages to a range, \eg the above list is compressed to <1--2, 11--13, 21--24>.
+
+\item[two+] Similar in concept to \opt{two} but a sequence of exactly two consecutive pages is printed using the starting page and the localisation string \texttt{sequens}, \eg the above list is compressed to <1\,sq., 11--13, 21--24>.
+
+\item[three+] Similar in concept to \opt{two+} but a sequence of exactly three consecutive pages is printed using the starting page and the localisation string \texttt{sequentes}, \eg the above list is compressed to <1\,sq., 11\,sqq., 21--24>.
+
+\item[all+] Similar in concept to \opt{three+} but any sequence of consecutive pages is printed as an open-ended range, \eg the above list is compressed to <1\,sq., 11\,sqq., 21\,sqq.>.
+
+\end{valuelist}
+
+All styles support both Arabic and Roman numerals. In order to avoid potentially ambiguous lists, different sets of numerals will not be mixed when generating ranges, \eg the list <iii, iv, v, 6, 7, 8> is compressed to <iii--v, 6--8>.
+
+\optitem[setonly]{backrefsetstyle}{\opt{setonly}, \opt{memonly}, \opt{setormem}, \opt{setandmem}, \opt{memandset}, \opt{setplusmem}}
+
+This option controls how back references to \bibtype{set} entries and their members are handled. The following options are available:
+
+\begin{valuelist}
+
+\item[setonly] All back references are added to the \bibtype{set} entry. The \bibfield{pageref} lists of set members remain blank.
+
+\item[memonly] References to set members are added to the respective member. References to the \bibtype{set} entry are added to all members. The \bibfield{pageref} list of the \bibtype{set} entry remains blank.
+
+\item[setormem] References to the \bibtype{set} entry are added to the \bibtype{set} entry. References to set members are added to the respective member.
+
+\item[setandmem] References to the \bibtype{set} entry are added to the \bibtype{set} entry. References to set members are added to the respective member and to the \bibtype{set} entry.
+
+\item[memandset] References to the \bibtype{set} entry are added to the \bibtype{set} entry and to all members. References to set members are added to the respective member.
+
+\item[setplusmem] References to the \bibtype{set} entry are added to the \bibtype{set} entry and to all members. References to set members are added to the respective member and to the \bibtype{set} entry.
+
+\end{valuelist}
+
+\boolitem[true]{backreffloats}
+
+Whether to enable back references to citations in floats.
+
+
+\optitem[false]{indexing}{\opt{true}, \opt{false}, \opt{cite}, \opt{bib}}
+
+This option controls indexing in citations and in the bibliography. More precisely, it affects the \cmd{ifciteindex} and \cmd{ifbibindex} commands from \secref{aut:aux:tst}. The option is settable on a global, a per-type, or on a per-entry basis. The possible choices are:
+
+\begin{valuelist}
+\item[true] Enable indexing globally.
+\item[false] Disable indexing globally.
+\item[cite] Enable indexing in citations only.
+\item[bib] Enable indexing in the bibliography only.
+\end{valuelist}
+
+This feature requires support by the selected citation style. All standard styles which come with this package support indexing of both citations and entries in the bibliography. Note that you still need to enable indexing globally with \cmd{makeindex} to get an index.
+
+\boolitem[false]{loadfiles}
+
+This option controls whether external files requested by way of the \cmd{printfile} command are loaded. See also \secref{use:use:prf} and \cmd{printfile} in \secref{aut:bib:dat}. Note that this feature is disabled by default for performance reasons.
+
+\optitem[none]{refsection}{\opt{none}, \opt{part}, \opt{chapter}, \opt{chapter+}, \opt{section}, \opt{section+}, \opt{subsection}, \opt{subsection+}}
+
+This option automatically starts a new reference section at a document division such as a chapter or a section. This is equivalent to the \cmd{newrefsection} command, see \secref{use:bib:sec} for details. The following choice of document divisions is available:
+
+\begin{valuelist}
+\item[none] Disable this feature.
+\item[part] Start a reference section at every \cmd{part} command.
+\item[chapter] Start a reference section at every \cmd{chapter} command.
+\item[chapter+] Start a reference section at every \cmd{chapter} and every higher level of sectioning, i.e. \cmd{part}.
+\item[section] Start a reference section at every \cmd{section} command.
+\item[section+] Start a reference section at every \cmd{section} and every higher level of sectioning, i.e. \cmd{part} and \cmd{chapter} (if available).
+\item[subsection] Start a reference section at every \cmd{subsection} command.
+\item[subsection+] Start a reference section at every \cmd{subsection} and every higher level of sectioning, i.e. \cmd{part}, \cmd{chapter} (if available) and \cmd{section}.
+\end{valuelist}
+%
+The starred versions of these commands will not start a new reference section.
+
+\optitem[none]{refsegment}{\opt{none}, \opt{part}, \opt{chapter}, \opt{chapter+}, \opt{section}, \opt{section+}, \opt{subsection}, \opt{subsection+}}
+
+Similar to the \opt{refsection} option but starts a new reference segment. This is equivalent to the \cmd{newrefsegment} command, see \secref{use:bib:seg} for details. When using both options, note that you can only apply this option to a lower"=level document division than the one \opt{refsection} is applied to and that nested reference segments will be local to the enclosing reference section.
+
+\optitem[none]{citereset}{\opt{none}, \opt{part}, \opt{chapter}, \opt{chapter+}, \opt{section}, \opt{section+}, \opt{subsection}, \opt{subsection+}}
+
+This option automatically executes the \cmd{citereset} command from \secref{use:cit:msc} at a document division such as a chapter or a section. The following choice of document divisions is available:
+
+\begin{valuelist}
+\item[none] Disable this feature.
+\item[part] Perform a reset at every \cmd{part} command.
+\item[chapter] Perform a reset at every \cmd{chapter} command.
+\item[chapter+] Perform a reset at every \cmd{chapter} and \cmd{part} command.
+\item[section] Perform a reset at every \cmd{section} command.
+\item[section+] Perform a reset at every \cmd{section}, \prm{chapter} (if supported by the class) and \cmd{part} command.
+\item[subsection] Perform a reset at every \cmd{subsection} command.
+\item[subsection+] Perform a reset at every \cmd{subsection}, \cmd{section}, \prm{chapter} (if supported by the class) and \cmd{part} command.
+\end{valuelist}
+
+\boolitem[true]{abbreviate}
+
+Whether or not to use long or abbreviated strings in citations and in the bibliography. This option affects the localisation modules. If this option is enabled, key terms such as <editor> are abbreviated. If not, they are written out.
+This option is also settable on a per-type or per-entry basis.
+
+\optitem[comp]{date}{\opt{year}, \opt{short}, \opt{long}, \opt{terse}, \opt{comp}, \opt{ymd}, \opt{iso}}
+
+This option controls the basic format of printed date specifications. The following choices are available:
+
+\begin{valuelist}
+\item[year] Use only years, for example:\par
+2010\par
+2010--2012\par
+\item[short] Use the short format with verbose ranges, for example:\par
+01/01/2010\par
+21/01/2010--30/01/2010\par
+01/21/2010--01/30/2010
+\item[long] Use the long format with verbose ranges, for example:\par
+1st January 2010\par
+21st January 2010--30th January 2010\par
+January 21, 2010--January 30, 2010\par
+\item[terse] Use the short format with compact ranges, for example:\par
+21--30/01/2010\par
+01/21--01/30/2010
+\item[comp] Use the long format with compact ranges, for example:\par
+21st--30th January 2010\par
+January 21--30, 2010\par
+\item[iso] Use ISO8601 Extended Format (\texttt{yyyy-mm-dd}), for example:\par
+2010-01-01\par
+2010-01-21/2010-01-30
+\item[ymd] A year-month-day format which can be modified by other options unlike strict \acr{ISO8601-2}, for example:\par
+2010-1-1\par
+2010-1-21/2010-1-30
+\end{valuelist}
+%
+Note that \opt{iso} format will enforce \kvopt{dateera}{astronomical}, \kvopt{datezeros}{true}, \kvopt{timezeros}{true}, \kvopt{seconds}{true}, \kvopt{$<$datetype$>$time}{24h} and \kvopt{julian}{false}. \opt{ymd} is an EDTF-like format but which can change the various options which the strict \opt{iso} option does not allow for.
+
+As seen in the above examples, the actual date format is language specific. Note that the month name in all long formats is responsive to the \opt{abbreviate} package option. The leading zeros for months and days in all short formats may be controlled separately with the \opt{datezeros} package option. The leading zeros for hours, minutes and seconds in all short formats may be controlled separately with the \opt{timezeros} package option. If outputting times, the printing of seconds and timezones is controlled by the \opt{seconds} and \opt{timezones} options respectively.
+
+The options \opt{julian} and \opt{gregorianstart} may be used to control when to output Julian Calendar dates.
+
+\optitem[year]{labeldate}{\opt{year}, \opt{short}, \opt{long}, \opt{terse}, \opt{comp}, \opt{ymd}, \opt{iso}}
+
+Similar to the \opt{date} option but controls the format of the date field selected with \cmd{DeclareLabeldate}.
+
+\optitem[comp]{$<$datetype$>$date}{\opt{year}, \opt{short}, \opt{long}, \opt{terse}, \opt{comp}, \opt{ymd}, \opt{iso}}
+
+Similar to the \opt{date} option but controls the format of the \bibfield{$<$datetype$>$date} field in the datamodel.
+
+\optitem{alldates}{\opt{year}, \opt{short}, \opt{long}, \opt{terse}, \opt{comp}, \opt{ymd}, \opt{iso}}
+
+Sets the option for all dates in the datamodel to the same value. The date fields in the default data model are \bibfield{date}, \bibfield{origdate}, \bibfield{eventdate} and \bibfield{urldate}.
+
+\boolitem[false]{julian}
+
+This option controls whether dates before the date specified in the \opt{gregorianstart} option will be converted automatically to the Julian Calendar. Dates so changed will return <true> for the \cmd{ifdatejulian} and \cmd{if$<$datetype$>$datejulian} tests (see \secref{aut:aux:tst}). Please bear in mind that dates consisting of just a year like <1565> will never be converted to a Julian Calendar date because a date without a month and day has an ambiguous Julian Calendar representation\footnote{This is potentially true for dates missing times too but this is not relevant for bibliographic work.}. For example, in the case of <1565>, this is Julian year <1564> until after the Gregorian date <10th January 1565> when the Julian year becomes <1565>.
+
+\valitem{gregorianstart}{YYYY-MM-DD}
+
+This option controls the date before which dates are converted to the Julian Calendar. It is a strict format string, 4-digit year, 2-digit month and day, separated by a single dash character (any valid Unicode character with the <Dash> property). The default is '1582-10-15', the date of the instigation of the standard Gregorian Calendar. This option does not nothing unless \opt{julian} is set to <true>.
+
+\boolitem[true]{datezeros}
+
+This option controls whether \texttt{short} and \texttt{terse} date components are printed with leading zeros unless overridden by specific formatting.
+
+\boolitem[true]{timezeros}
+
+This option controls whether time components are printed with leading zeros unless overridden by specific formatting.
+
+\boolitem[false]{timezones}
+
+This option controls whether timezones are printed when printing times.
+
+\boolitem[false]{seconds}
+
+This option controls whether seconds are printed when printing times.
+
+\boolitem[true]{dateabbrev}
+
+This option controls whether \texttt{long} and \texttt{comp} dates are printed with long or abbreviated month/yeardivision names. The option is similar to the generic \opt{abbreviate} option but specific to the date formatting.
+This option is also settable on a per-type and per-entry basis.
+
+\boolitem[false]{datecirca}
+
+This option controls whether to output <circa> information about dates. If set to \opt{true}, dates will be preceded by the expansion of the \cmd{datecircaprint} macro (\secref{use:fmt:fmt}).
+
+\boolitem[false]{dateuncertain}
+
+This option controls whether to output uncertainty information about dates. If set to \opt{true}, dates will be followed by the expansion of the \cmd{dateuncertainprint} macro and end dates will be followed by the \cmd{enddateuncertainprint} macro (\secref{use:fmt:fmt}).
+
+\optitem[astronomical]{dateera}{\opt{astronomical}, \opt{secular}, \opt{christian}}
+
+This option controls how date era information is printed. <astronomical> uses \cmd{dateeraprintpre} to print era information \emph{before} start/end dates. <secular> and <christian> uses \cmd{dateeraprint} to print era information \emph{after} the start/end/dates. By default <astronomical> results in a minus sign before BCE/BC dates and <secular>/<christian> results in the relevant localisation strings like <BCE> or <BC> after BCE/BC dates. See the relevant comments in \secref{use:fmt:fmt} and the localisation strings in \secref{aut:lng:key:dt}.
+
+\intitem[0]{dateeraauto}
+
+This option sets the astronomical year, below which era localisation strings are automatically added. This option does nothing without \opt{dateera} being set to <secular> or <christian>.
+
+\optitem[24h]{time}{\opt{12h}, \opt{24h}, \opt{24hcomp}}
+
+This option controls the basic format of printed time specifications. The following choices are available:
+
+\begin{valuelist}
+\item[24h] 24-hour format, for example:\par
+14:03:23\par
+14:3:23\par
+14:03:23+05:00\par
+14:03:23Z\par
+14:21:23--14:23:45\par
+14:23:23--14:23:45\par
+\item[24hcomp] 24-hour format with compressed ranges, for example:\par
+14:21--23 (hours are the same)\par
+14:23:23--45 (hour and minute are the same)\par
+\item[12h] 12-hour format with (localised) AM/PM markers, for example:\par
+2:34 PM\par
+2:34 PM--3:50 PM\par
+\end{valuelist}
+%
+As seen in the above examples, the actual time format is language specific. Note that the AM/PM string is responsive to the \opt{abbreviate} package option, if this makes a difference in the specific locale. The leading zeros in the 24-hour formats may be controlled separately with the \opt{timezeros} package option. The separator between time components (\cmd{bibtimesep} and \cmd{bibtzminsep}) and between the time and any timezone (\cmd{bibtimezonesep}) are also language specific and customisable, see \secref{use:fmt:lng}. There are global package options which determine whether seconds and timezones are printed (\opt{seconds} and \opt{timezones}, respectively, see \secref{use:opt:pre:gen}). Timezones, if present, are either <Z> or a numeric positive or negative offset. No default styles print time information. Custom styles may print times by using the \cmd{print$<$datetype$>$time} commands, see \secref{aut:bib:dat}.
+
+\optitem[24h]{labeltime}{\opt{12h}, \opt{24h}, \opt{24hcomp}}
+
+Similar to the \opt{time} option but controls the format of the time part fields obtained from the field selected with \cmd{DeclareLabeldate}.
+
+\optitem[24h]{$<$datetype$>$time}{\opt{12h}, \opt{24h}, \opt{24hcomp}}
+
+Similar to the \opt{time} option but controls the format of the time part fields obtained from the \bibfield{$<$datetype$>$date} field in the datamodel.
+
+\optitem{alltimes}{\opt{12h}, \opt{24h}, \opt{24hcomp}}
+
+Sets \opt{labeltime} and the \opt{$<$datetype$>$time} option for all times in the datamodel to the same value. The date fields supporting time parts in the default data model are \bibfield{date}, \bibfield{origdate}, \bibfield{eventdate} and \bibfield{urldate}.
+
+\boolitem[false]{dateusetime}
+
+Specifies whether to print any time component of a date field after the date component. The separator between the date and time components is \cmd{bibdatetimesep} from \secref{use:fmt:lng}.
+
+\boolitem[false]{labeldateusetime}
+
+Similar to the \opt{dateusetime} option but controls the whether to print time components for the field selected with \cmd{DeclareLabeldate}.
+
+\boolitem[false]{$<$datetype$>$dateusetime}
+
+Similar to the \opt{dateusetime} option but controls the whether to print time components for the \bibfield{$<$datetype$>$date} field in the datamodel.
+
+\boolitem[false]{alldatesusetime}
+
+Sets \opt{labeldateusetime} and the \opt{$<$datetype$>$dateusetime} option for all \bibfield{$<$datetype$>$date} fields in the datamoel.
+
+\boolitem[false]{defernumbers}
+
+In contrast to standard \latex, the numeric labels generated by this package are normally assigned to the full list of references at the beginning of the document body. If this option is enabled, numeric labels (\ie the \bibfield{labelnumber} field discussed in \secref{aut:bbx:fld}) are assigned the first time an entry is printed in any bibliography. See \secref{use:cav:lab} for further explanation. This option requires two \latex runs after the data has been exported to the \file{bbl} file by the backend (in addition to any other runs required by page breaks changing etc.). An important thing to note is that if you are using this option, then changes to options, the \file{bib} file or certain commands like \cmd{printbibliography} will usually require that you delete your current \file{aux} file and re-run \latex to obtain the correct numbering. See \secref{aut:int}.
+
+\boolitem[false]{punctfont}
+
+This option enables an alternative mechanism for dealing with unit punctuation after a field printed in a different font (for example, a title printed in italics). See \cmd{setpunctfont} in \secref{aut:pct:new} for details.
+
+\optitem[abs]{arxiv}{\opt{abs}, \opt{ps}, \opt{pdf}, \opt{format}}
+
+Path selector for arXiv links. If hyperlink support is enabled, this option controls which version of the document the arXiv \bibfield{eprint} links will point to. The following choices are available:
+
+\begin{valuelist}
+\item[abs] Link to the abstract page.
+\item[ps] Link to the PostScript version.
+\item[pdf] Link to the \pdf version.
+\item[format] Link to the format selector page.
+\end{valuelist}
+
+See \secref{use:use:epr} for details on support for arXiv and electronic publishing information.
+
+\optitem[auto]{texencoding}{\opt{auto}, \prm{encoding}}
+
+Specifies the encoding of the \file{tex} file. This option affects the data transferred from the backend to \biblatex. This corresponds to \biber's \opt{--output-encoding} option. The following choices are available:
+
+\begin{valuelist}
+
+\item[auto] Try to auto-detect the input encoding. If the \sty{inputenc}\slash \sty{inputenx}\slash \sty{luainputenc} package is available, \biblatex will get the main encoding from that package. If not, it assumes \utf encoding if a \latex format using at least the April 2018 version of the kernel, \xetex or \luatex has been detected, and \acr{US-ASCII} otherwise.
+
+\item[\prm{encoding}] Specifies the \prm{encoding} explicitly. This is for odd cases in which auto-detection fails or you want to force a certain encoding for some reason.
+
+\end{valuelist}
+%
+Note that setting \kvopt{texencoding}{\prm{encoding}} will also affect the \opt{bibencoding} option if \kvopt{bibencoding}{auto}.
+
+\optitem[auto]{bibencoding}{\opt{auto}, \prm{encoding}}
+
+Specifies the default encoding of the \file{bib} files. This can be overridden on a per-datasource basis using the \opt{bibencoding} option to \cmd{addbibresource}, see \secref{use:bib:res}. This option corresponds to \biber's \opt{--input-encoding} option. The following choices are available:
+
+\begin{valuelist}
+
+\item[auto] Use this option if the workflow is transparent, \ie if the encoding of the \file{bib} file is identical to the encoding of the \file{tex} file.
+
+\item[\prm{encoding}] If the encoding of the \file{bib} file is different from the one of the \file{tex} file, you need to specify it explicitly.
+
+\end{valuelist}
+
+By default, \biblatex assumes that the \file{tex} file and the \file{bib} file use the same encoding (\kvopt{bibencoding}{auto}).
+
+\boolitem[false]{safeinputenc}
+
+If this option is enabled, \biblatex will automatically force \kvopt{texencoding}{ascii} if the \sty{inputenc}\slash \sty{inputenx} package has been loaded and the input encoding is \utf, \ie it will ignore any macro-based \utf support and use \acr{US-ASCII} only. \biber will then try to convert any non-\acr{US-ASCII} data in the \file{bib} file to \acr{US-ASCII}. For example, it will convert \texttt{\d{S}} to |\d{S}|. See \secref{bib:cav:enc:enc} for an explanation of why you may want to enable this option.
+
+\boolitem[true]{bibwarn}
+
+By default, \biblatex will report warnings issued by the backend concerning the data in the \file{bib} file as \latex warnings. Use this option to suppress such warnings.
+
+\intitem[2]{mincrossrefs}
+
+Sets the minimum number of cross references to \prm{integer} when requesting a backend run.\footnote{If an entry which is cross-referenced by other entries in the \file{bib} file hits this threshold, it is included in the bibliography even if it has not been cited explicitly. This is a standard feature of the \bibtex format and not specific to \biblatex. See the description of the \bibfield{crossref} field in \secref{bib:fld:spc} for further information.} This option also affects the handling of the \bibfield{xref} field. See the field description in \secref{bib:fld:spc} as well as \secref{bib:cav:ref} for details.
+
+\intitem[2]{minxrefs}
+
+As \opt{mincrossrefs} but for \bibfield{xref} fields.
+
+\boolitem[true]{bibtexcaseprotection}
+
+This option only has an effect when the \sty{expl3} implementation of the case changing functions is selected. If the option is set to \opt{true}, \cmd{MakeSentenceCase*} supports brace protection of words from case change as in classical \bibtex. If the option is set to \opt{false}, pairs of braces no longer imply case protection, which can now be enforced by wrapping the relevant word in \cmd{NoCaseChange}---this makes for a less confusing, if more verbose, markup of case protection.
+
+\end{optionlist}
+
+\paragraph{Style-specific}
+\label{use:opt:pre:bbx}
+
+The following options are provided by all standard bibliography styles (as opposed to the core package). The options are available as preamble options like those in \secref{use:opt:pre:gen} and at a per-type and per-entry scope.
+
+\begin{optionlist}
+
+\boolitem[true]{isbn}
+
+This option controls whether the fields \bibfield{isbn}\slash \bibfield{issn}\slash \bibfield{isrn} are printed.
+
+\boolitem[true]{url}
+
+This option controls whether the \bibfield{url} field and the access date is printed. The option only affects entry types whose \bibfield{url} information is optional. The \bibfield{url} field of \bibtype{online} entries is always printed.
+
+\boolitem[true]{doi}
+
+This option controls whether the field \bibfield{doi} is printed.
+
+\boolitem[true]{eprint}
+
+This option controls whether \bibfield{eprint} information is printed.
+
+\boolitem[true]{related}
+
+Whether to use information from related entries or not. See \secref{use:rel}.
+
+\end{optionlist}
+
+\subparagraph{\texttt{alphabetic}/\texttt{numeric}} Additionally, styles of the \texttt{alphabetic} and \texttt{numeric} family support the \opt{subentry} option in global, per-type and per-entry scope.
+
+\begin{optionlist}
+
+\boolitem[false]{subentry}
+
+This option affects the handling of citations to set members and the display of sets in the bibliography. If the option is enabled, citations to individual set members feature an additional letter that identifies the member, that letter is also printed in the bibliography. If the option is disabled, a citation to the member of a set will display just as a citation to the entire set and there will be no additional letters in the bibliography entries enumerating the members.
+
+Suppose \texttt{key1} and \texttt{key2} are members of the set \texttt{set1}. With \opt{subentry} set to \texttt{true} in a numeric style a citation to \texttt{key1} will show as <[1a]> and a citation to \texttt{key2} as <[1b]>, while the entire set \texttt{set1} will be cited as <[1]>. Furthermore <(a)> and <(b)> will be added in front of the entry data for the set members in the bibliography entry for the set. With \opt{subentry} set to \texttt{false} citations to all three keys will show as <[1]>, no additional letter will be printed in the bibliography.
+
+\end{optionlist}
+
+\subparagraph{\texttt{numeric-comp}} The citation style \texttt{numeric-comp} supports the \opt{subentrycomp} option in global, per-type and per-entry scope.
+
+\begin{optionlist}
+
+\boolitem[true]{subentrycomp}
+
+This option determines whether or not citations to set members are compressed similar to non-set citations. The option only has an effect if \opt{subentry} is set to \texttt{true}.
+
+Suppose \texttt{key1}, \texttt{key2} and \texttt{key3} are members of the set \texttt{set1}. With \opt{subentrycomp} set to \texttt{true} the three entries will be compressed to <[1a--c]> in citations. With \opt{subentry} set to \texttt{false} the citation will show in the more verbose form <[1a, 1b, 1c]>.
+
+The option is intended mainly for backwards compatibility, because earlier versions of \biblatex did not compress set member citations.
+
+\end{optionlist}
+
+\subparagraph{\texttt{authortitle}/\texttt{authoryear}} All bibliography styles of the \texttt{authoryear} and \texttt{authortitle} family as well as all bibliography styles of the \texttt{verbose} family---whose bibliography styles are based on \texttt{authortitle}---support the option \opt{dashed} in global scope.
+
+\begin{optionlist}
+
+\boolitem[true]{dashed}
+
+This option controls whether recurrent the same author\slash editor list in the bibliography are replaced by a dash (\cmd{bibnamdeash}, see \secref{use:fmt:fmt}). If the option is enabled, subsequent mentions of the same name list at the beginning of an entry are replaced by a dash provided the entry is not the first on the current page. If the option is disabled, name lists are never replaced by a dash.
+
+\end{optionlist}
+
+\subparagraph{\texttt{authoryear}} Bibliography styles of the \texttt{authoryear} family provide the option \opt{mergedate} in global, per-type and per-entry scope.
+
+\begin{optionlist}
+
+\optitem[true]{mergedate}{\opt{false}, \opt{minimum}, \opt{basic}, \opt{compact}, \opt{maximum}, \opt{true}}
+
+This option controls whether and how the date specification in the entry is merged with the date label shown directly after the author\slash editor list.
+
+\begin{valuelist}
+\item[false] Strictly separate the date specification shown in the entry (styled with \opt{date}) from the date label (styled with \opt{labeldate}). The date will always be shown twice.
+\item[minimum] Omit the date specification whenever it coincides \emph{exactly}---including \bibfield{extradate} information---with the output of the date label.
+\item[basic] Similar to \opt{minimum}, but the date specification will also be omitted if it differs from the date label only by the absence of the \bibfield{extradate} letter.
+\item[compact] Merges all date specifications with the date label. The date format of that merged date label is controlled by \opt{date}, not \opt{labeldate}, even if it is printed in the position of the date label. The \bibfield{issue} field is not merged.
+\item[maximum] Like \opt{compact}, but if present the \bibfield{issue} field will also be moved into the date label at the beginning of the entry.
+\item[true] An alias for \opt{compact}.
+\end{valuelist}
+
+More in-depth examples of this option can be found in the style examples.
+\end{optionlist}
+
+\subparagraph{<ibid> styles} Citation styles with <ibid.>\ function, namely \texttt{authortitle-ibid}, \texttt{author\allowbreakhere title-icomp}, \texttt{author\allowbreakhere year-ibid}, \texttt{authoryear-icomp}, \texttt{ver\allowbreakhere bose-ibid}, \texttt{verbose-inote}, \texttt{verbose-trad1}, \texttt{verbose-trad2} and \texttt{verbose-trad3} provide the global \opt{ibidpage} option.
+
+\begin{optionlist}
+
+\boolitem[false]{ibidpage}
+
+Whether \emph{ibidem} without page reference means <same work> or <same work + same page>. If set to \texttt{true} a page range postnote will be suppressed in an \emph{ibidem} citation if the last citation was to the same page range. With \texttt{ibidpage=false} the postnote is not omitted. Citations to different page ranges than the previous always produce the page ranges with either setting.
+
+\end{optionlist}
+
+\subparagraph{\texttt{verbose}} All citation styles of the \texttt{verbose} family provide the global option \opt{citepages}.
+
+\begin{optionlist}
+
+\optitem[permit]{citepages}{\opt{permit}, \opt{suppress}, \opt{omit}, \opt{separate}}
+
+This option controls the output of the \bibfield{page}\slash\bibfield{pagetotal} field in the full citation in combination with a postnote containing a page range. The option can be used to suppress references to two page ranges in full citations like the following
+
+\begin{quote}
+Author. \enquote{Title.} In: \emph{Book,} pp.\,100--150, p.\,125.
+\end{quote}
+
+Here <p.\,125> is the \bibfield{postnote} argument and <pp.\,100--150> is the value of the \bibfield{pages} field.
+
+\begin{valuelist}
+\item[permit] Allow duplication of page specifications, i.e.\ print both \bibfield{page}\slash\bibfield{pagetotal} and \bibfield{postnote}.
+\item[suppress] Unconditionally suppress the \bibfield{pages}\slash \bibfield{pagetotal} fields in citations, regardless of the \bibfield{postnote}.
+\item[omit] Suppress the \bibfield{pages}\slash \bibfield{pagetotal} if the \bibfield{postnote} contains a page range. They are still printed if there is no \bibfield{postnote} or if the \bibfield{postnote} is not a number or range.
+\item[separate] Separate the \bibfield{pages}\slash \bibfield{pagetotal} from the \bibfield{postnote} if the latter contains a page range. The string \texttt{thiscite} is added to separate the two page ranges.
+\end{valuelist}
+
+\end{optionlist}
+
+\subparagraph{\texttt{verbose-trad}} The citation styles of the \texttt{verbose-trad} family support the global option \opt{strict}.
+
+\begin{optionlist}
+
+\boolitem[false]{strict}
+
+This option allows to restrict the use of the scholarly abbreviations <ibid.> and <op.~cit.> to avoid ambiguities. If the option is set to \texttt{true} these terms will only be used if the relevant work was cited in the same or previous footnote.
+
+\end{optionlist}
+
+\subparagraph{\texttt{reading}} The \texttt{reading} style supports a number of additional options, but these are not of general interest and can be found in the style example.
+
+
+\paragraph{Internal}
+\label{use:opt:pre:int}
+
+The default settings of the following preamble options are controlled by bibliography and citation styles. Apart from the \opt{pagetracker} and \opt{$<$name$>$inits} options, which you may want to adapt, there is normally no need to set them explicitly.
+
+\begin{optionlist}
+
+\optitem[false]{pagetracker}{\opt{true}, \opt{false}, \opt{page}, \opt{spread}}
+
+This option controls the page tracker which is required by the \cmd{ifsamepage} and \cmd{iffirstonpage} tests from \secref{aut:aux:tst}. The possible choices are:
+
+\begin{valuelist}
+\item[true] Enable the tracker in automatic mode. This is like \opt{spread} if \latex is in twoside mode, and like \opt{page} otherwise.
+\item[false] Disable the tracker.
+\item[page] Enable the tracker in page mode. In this mode, tracking works on a per"=page basis.
+\item[spread] Enable the tracker in spread mode. In this mode, tracking works on a per"=spread (double page) basis.
+\end{valuelist}
+
+Note that this tracker is disabled in all floats unless explicitly requested with \opt{trackfloats}, see \secref{aut:cav:flt}.
+
+\optitem[false]{citecounter}{\opt{true}, \opt{false}, \opt{context}}
+
+This option controls the citation counter which is required by \cnt{citecounter} from \secref{aut:aux:tst}. The possible choices are:
+
+\begin{valuelist}
+\item[true] Enable the citation counter in global mode.
+\item[false] Disable the citation counter.
+\item[context] Enable the citation counter in context"=sensitive mode. In this mode, citations in footnotes and in the body text are counted independently.
+\end{valuelist}
+
+\optitem[false]{citetracker}{\opt{true}, \opt{false}, \opt{context}, \opt{strict}, \opt{constrict}}
+
+This option controls the citation tracker which is required by the \cmd{ifciteseen} and \cmd{ifentryseen} tests from \secref{aut:aux:tst}. The possible choices are:
+
+\begin{valuelist}
+\item[true] Enable the tracker in global mode.
+\item[false] Disable the tracker.
+\item[context] Enable the tracker in context"=sensitive mode. In this mode, citations in footnotes and in the body text are tracked independently.
+\item[strict] Enable the tracker in strict mode. In this mode, an item is only considered by the tracker if it appeared in a stand-alone citation, \ie if a single entry key was passed to the citation command.
+\item[constrict] This mode combines the features of \opt{context} and \opt{strict}.
+\end{valuelist}
+
+Note that this tracker is disabled in all floats unless explicitly requested with \opt{trackfloats}, see \secref{aut:cav:flt}.
+This option is also settable on a per-type or per-entry basis.
+
+\optitem[false]{ibidtracker}{\opt{true}, \opt{false}, \opt{context}, \opt{strict}, \opt{constrict}}
+
+This option controls the <ibidem> tracker which is required by the \cmd{ifciteibid} test from \secref{aut:aux:tst}. The possible choices are:
+
+\begin{valuelist}
+\item[true] Enable the tracker in global mode.
+\item[false] Disable the tracker.
+\item[context] Enable the tracker in context"=sensitive mode. In this mode, citations in footnotes and in the body text are tracked separately.
+\item[strict] Enable the tracker in strict mode. In this mode, potentially ambiguous references are suppressed. A reference is considered ambiguous if either the current citation (the one including the <ibidem>) or the previous citation (the one the <ibidem> refers to) consists of a list of references.\footnote{For example, suppose the initial citation is «Jones, \emph{Title}; Williams, \emph{Title}» and the following one «ibidem». From a technical point of view, it is fairly clear that the <ibidem> refers to <Williams> because this is the last reference processed by the previous citation command. To a human reader, however, this may not be obvious because the <ibidem> may also refer to both titles. The strict mode avoids such ambiguous references.}
+\item[constrict] This mode combines the features of \opt{context} and \opt{strict}. It also keeps track of footnote numbers and detects potentially ambiguous references in footnotes in a stricter way than the \opt{strict} option. In addition to the conditions imposed by the \opt{strict} option, a reference in a footnote will only be considered as unambiguous if the current citation and the previous citation are given in the same footnote or in immediately consecutive footnotes.
+\end{valuelist}
+
+Note that this tracker is disabled in all floats unless explicitly requested with \opt{trackfloats}, see \secref{aut:cav:flt}.
+This option is also settable on a per-type or per-entry basis.
+
+\optitem[false]{opcittracker}{\opt{true}, \opt{false}, \opt{context}, \opt{strict}, \opt{constrict}}
+
+This option controls the <opcit> tracker which is required by the \cmd{ifopcit} test from \secref{aut:aux:tst}. This feature is similar to the <ibidem> tracker, except that it tracks citations on a per-author/editor basis, \ie \cmd{ifopcit} will yield \texttt{true} if the cited item is the same as the last one by this author\slash editor. The possible choices are:
+
+\begin{valuelist}
+\item[true] Enable the tracker in global mode.
+\item[false] Disable the tracker.
+\item[context] Enable the tracker in context"=sensitive mode. In this mode, citations in footnotes and in the body text are tracked separately.
+\item[strict] Enable the tracker in strict mode. In this mode, potentially ambiguous references are suppressed. See \kvopt{ibidtracker}{strict} for details.
+\item[constrict] This mode combines the features of \opt{context} and \opt{strict}. See the explanation of \kvopt{ibidtracker}{constrict} for details.
+\end{valuelist}
+
+Note that this tracker is disabled in all floats unless explicitly requested with \opt{trackfloats}, see \secref{aut:cav:flt}.
+This option is also settable on a per-type or per-entry basis.
+
+\optitem[false]{loccittracker}{\opt{true}, \opt{false}, \opt{context}, \opt{strict}, \opt{constrict}}
+
+This option controls the <loccit> tracker which is required by the \cmd{ifloccit} test from \secref{aut:aux:tst}. This feature is similar to the <opcit> tracker except that it also checks whether the \prm{postnote} arguments match, \ie \cmd{ifloccit} will yield \texttt{true} if the citation refers to the same page cited before. The possible choices are:
+
+\begin{valuelist}
+\item[true] Enable the tracker in global mode.
+\item[false] Disable the tracker.
+\item[context] Enable the tracker in context"=sensitive mode. In this mode, citations in footnotes and in the body text are tracked separately.
+\item[strict] Enable the tracker in strict mode. In this mode, potentially ambiguous references are suppressed. See \kvopt{ibidtracker}{strict} for details. In addition to that, this mode also checks if the \prm{postnote} argument is numerical (based on \cmd{ifnumerals} from \secref{aut:aux:tst}).
+\item[constrict] This mode combines the features of \opt{context} and \opt{strict}. See the explanation of \kvopt{ibidtracker}{constrict} for details. In addition to that, this mode also checks if the \prm{postnote} argument is numerical (based on \cmd{ifnumerals} from \secref{aut:aux:tst}).
+\end{valuelist}
+
+Note that this tracker is disabled in all floats unless explicitly requested with \opt{trackfloats}, see \secref{aut:cav:flt}.
+This option is also settable on a per-type or per-entry basis.
+
+\optitem[false]{idemtracker}{\opt{true}, \opt{false}, \opt{context}, \opt{strict}, \opt{constrict}}
+
+This option controls the <idem> tracker which is required by the \cmd{ifciteidem} test from \secref{aut:aux:tst}. The possible choices are:
+
+\begin{valuelist}
+\item[true] Enable the tracker in global mode.
+\item[false] Disable the tracker.
+\item[context] Enable the tracker in context"=sensitive mode. In this mode, citations in footnotes and in the body text are tracked separately.
+\item[strict] This is an alias for \texttt{true}, provided only for consistency with the other trackers. Since <idem> replacements do not get ambiguous in the same way as <ibidem> or <op.~cit.>, the \texttt{strict} tracking mode does not apply to them.
+\item[constrict] This mode is similar to \opt{context} with one additional condition: a reference in a footnote will only be considered as unambiguous if the current citation and the previous citation are given in the same footnote or in immediately consecutive footnotes.
+\end{valuelist}
+
+Note that this tracker is disabled in all floats unless explicitly requested with \opt{trackfloats}, see \secref{aut:cav:flt}.
+This option is also settable on a per-type or per-entry basis.
+
+\boolitem[false]{trackfloats}
+
+Whether to enable citation tracking in floats. Citation tracking in floats can be tricky, so this option should only be enabled if absolutely necessary and the output should be scrutinised carefully, see also \secref{aut:cav:flt}.
+
+\boolitem[true]{parentracker}
+
+This option controls the parenthesis tracker which keeps track of nested parentheses and brackets. This information is used by \cmd{parentext} and \cmd{brackettext} from \secref{use:cit:txt}, \cmd{mkbibparens} and \cmd{mkbibbrackets} from \secref{aut:fmt:ich} and \cmd{bibopenparen}, \cmd{bibcloseparen}, \cmd{bibopenbracket}, \cmd{bibclosebracket} (also \secref{aut:fmt:ich}).
+
+\intitem[3]{maxparens}
+
+The maximum permitted nesting level of parentheses and brackets. If parentheses and brackets are nested deeper than this value, \biblatex will issue errors.
+
+\boolitem[false]{$<$namepart$>$inits}
+
+The option sets the \cmd{if$<$namepart$>$inits} test from \secref{aut:aux:tst}. \texttt{$<$namepart$>$} is any valid name part as defined in the data model by the \cmd{DeclareDatamodelConstant} command (\secref{aut:bbx:drv}). For the given name, for example, the option becomes \opt{giveninits}.
+This option is also settable on a per-type, per-entry, per-namelist and per-name basis.
+
+If \opt{giveninits} is set to \opt{true}, the default name formats will only render the given name initials and not the full given name. The standard styles only use the test \cmd{ifgiveninits} and hence only respond to the option \opt{giveninits}. Setting the option for a name part different from \texttt{given} has no effect on the default name formats.
+
+Note that sorting and name uniqueness are not automatically affected by this option, these have to be requested explicitly via \cmd{DeclareSortingNamekeyTemplate} and the \opt{uniquename} option (or \cmd{DeclareUniquenameTemplate}), respectively. A warning will be issued if \opt{giveninits} is used together with \opt{uniquename} set to one of the \opt{full} values and \opt{uniquename} is automatically set to the corresponding \opt{init} value.
+
+\boolitem[false]{terseinits}
+
+This option controls the format of all initials generated by \biblatex. If enabled, initials are rendered using a terse format without dots and spaces. For example, the initials of Donald Ervin Knuth would be rendered as <D.~E.> by default, and as <DE> if this option is enabled. The option will affect the \cmd{ifterseinits} test from \secref{aut:aux:tst}. The option works by redefining some macros which control the format of initials. See \secref{use:cav:nam} for details.
+This option is also settable on a per-type, per-entry, per-name and per-namelist basis.
+
+\boolitem[false]{labelalpha}
+
+Whether or not to provide the special fields \bibfield{labelalpha} and \bibfield{extraalpha}, see \secref{aut:bbx:fld} for details.
+This option is also settable on a per-type and per-entry basis. See also \opt{maxalphanames} and \opt{minalphanames}. Table \ref{use:opt:tab1} summarises the various \opt{extra*} disambiguation counters and what they track.
+
+\intitem[3]{maxalphanames}
+
+Similar to the \opt{maxnames} option but customizes the format of the \bibfield{labelalpha} field.
+
+\intitem[1]{minalphanames}
+
+Similar to the \opt{minnames} option but customizes the format of the \bibfield{labelalpha} field.
+
+\boolitem[false]{labelnumber}
+
+Whether or not to provide the special field \bibfield{labelnumber}, see \secref{aut:bbx:fld} for details.
+This option is also settable on a per-type and per-entry basis.
+
+\boolitem[false]{noroman}
+
+Whether or not to try to parse roman numerals encountered in integer fields for sorting purposes. Since \biber also tries to parse alphanumeric values when sorting integer fields, this roman numeral parsing can be a problem when, for example, <C> is encountered as this could be a roman numeral or a simple alphanumeric string which would have a different integer value depending on how it was parsed. It is likely that this is most useful on a per-entry basis for entries that have, for example, a \bibfield{volume} field with values such as <A>, <B>, <C>, <D> which should not be parsed as roman numerals since this would give incorrect integer values for <C> and <D>.
+
+This option is also settable on a per-type and per-entry basis.
+
+\boolitem[false]{labeltitle}
+
+Whether or not to provide the special field \bibfield{extratitle}, see \secref{aut:bbx:fld} for details. Note that the special field \bibfield{labeltitle} is always provided and this option controls rather whether \bibfield{labeltitle} is used to generate \bibfield{extratitle} information. This option is also settable on a per-type and per-entry basis. Table \ref{use:opt:tab1} summarises the various \opt{extra*} disambiguation counters and what they track.
+
+\boolitem[false]{labeltitleyear}
+
+Whether or not to provide the special field \bibfield{extratitleyear}, see \secref{aut:bbx:fld} for details. Note that the special field \bibfield{labeltitle} is always provided and this option controls rather whether \bibfield{labeltitle} is used to generate \bibfield{extratitleyear} information. This option is also settable on a per-type and per-entry basis. Table \ref{use:opt:tab1} summarises the various \opt{extra*} disambiguation counters and what they track.
+
+\boolitem[false]{labeldateparts}
+
+Whether or not to provide the special fields \bibfield{labelyear}, \bibfield{labelmonth}, \bibfield{labelday}, \bibfield{labelendyear}, \bibfield{labelendmonth}, \bibfield{labelendday}, \bibfield{labelhour}, \bibfield{labelendhour}, \bibfield{labelminute}, \bibfield{labelendminute}, \bibfield{labelsecond}, \bibfield{labelendsecond}, \bibfield{labelyeardivision}, \bibfield{labelendyeardivision}, \bibfield{labeltimezone}, \bibfield{labelendtimeone} and \bibfield{extradate}, see \secref{aut:bbx:fld} for details.
+This option is also settable on a per-type and per-entry basis. Table \ref{use:opt:tab1} summarises the various \opt{extra*} disambiguation counters and what they track.
+
+\begin{table}
+\caption{Work Uniqueness options}
+\label{use:opt:wu}
+\footnotesize
+\ttfamily
+\tablesetup
+\begin{tabularx}{\textwidth}{XXX}
+\toprule
+\multicolumn{1}{@{}H}{Option} &
+\multicolumn{1}{@{}H}{Test} &
+\multicolumn{1}{@{}H}{Tracks} \\
+\cmidrule(r){1-1}\cmidrule(r){2-2}\cmidrule(r){3-3}
+singletitle & \cmd{ifsingletitle} & labelname\\
+uniquetitle & \cmd{ifuniquetitle} & labeltitle\\
+uniquebaretitle & \cmd{ifuniquebaretitle} & labeltitle {\rmfamily when} labelname {\rmfamily is null}\\
+uniquework & \cmd{ifuniquework} & labelname+labeltitle\\
+\bottomrule
+\end{tabularx}
+\end{table}
+
+\boolitem[false]{singletitle}
+
+Whether or not to provide the data required by the \cmd{ifsingletitle} test, see \secref{aut:aux:tst} for details. See \tabref{use:opt:wu} for details on what determines the data for this test.
+This option is also settable on a per-type and per-entry basis.
+
+\boolitem[false]{uniquetitle}
+
+Whether or not to provide the data required by the \cmd{ifuniquetitle} test, see \secref{aut:aux:tst} for details. See \tabref{use:opt:wu} for details on what determines the data for this test.
+This option is also settable on a per-type and per-entry basis.
+
+\boolitem[false]{uniquebaretitle}
+
+Whether or not to provide the data required by the \cmd{ifuniquebaretitle} test, see \secref{aut:aux:tst} for details. See \tabref{use:opt:wu} for details on what determines the data for this test.
+This option is also settable on a per-type and per-entry basis.
+
+\boolitem[false]{uniquework}
+
+Whether or not to provide the data required by the \cmd{ifuniquework} test, see \secref{aut:aux:tst} for details. See \tabref{use:opt:wu} for details on what determines the data for this test.
+This option is also settable on a per-type and per-entry basis.
+
+\boolitem[false]{uniqueprimaryauthor}
+
+Whether or not to provide the data required by the \cmd{ifuniqueprimaryauthor} test, see \secref{aut:aux:tst} for details.
+This option is also settable on a per-type and per-entry basis.
+
+\optitem[false]{uniquename}{\opt{true}, \opt{false}, \opt{init}, \opt{full}, \opt{allinit}, \opt{allfull},
+\opt{mininit}, \opt{minfull}}
+
+Whether or not to update the \cnt{uniquename} counter, see \secref{aut:aux:tst} for details. This feature will disambiguate individual names in the \bibfield{labelname} list. This option is also settable on a per-type, per-entry, per-namelist and per-name basis. The possible choices are:
+
+\begin{valuelist}
+\item[true] An alias for \opt{full}.
+\item[false] Disable this feature.
+\item[init] Disambiguate using initials only.
+\item[full] Disambiguate using initials or full names, as required.
+\item[allinit] Similar to \opt{init} but disambiguates all names in the \bibfield{labelname} list, beyond \opt{maxnames}\slash \opt{minnames}\slash \opt{uniquelist}.
+\item[allfull] Similar to \opt{full} but disambiguates all names in the \bibfield{labelname} list, beyond \opt{maxnames}\slash \opt{minnames}\slash \opt{uniquelist}.
+\item[mininit] A variant of \texttt{init} which only disambiguates names in identical lists of base nameparts (by default, lists of family names).
+\item[minfull] A variant of \texttt{full} which only disambiguates names in identical lists of base nameparts (by default, lists of family names).
+\end{valuelist}
+%
+Note that the \opt{uniquename} option will also affect \opt{uniquelist}, the \cmd{ifsingletitle} test, and the \bibfield{extradate} and \bibfield{extraname} fields. See \secref{aut:cav:amb} for further details and practical examples.
+
+\optitem[false]{uniquelist}{\opt{true}, \opt{false}, \opt{minyear}}
+
+Whether or not to update the \cnt{uniquelist} counter, see \secref{aut:aux:tst} for details. This feature will disambiguate the \bibfield{labelname} list if it has become ambiguous after \opt{maxnames}\slash \opt{minnames} truncation. Essentially, it overrides \opt{maxnames}\slash \opt{minnames} on a per-field basis. This option is also settable on a per-type, per-entry and per-namelist basis. The possible choices are:
+
+\begin{valuelist}
+\item[true] Disambiguate the \bibfield{labelname} list.
+\item[false] Disable this feature.
+\item[minyear] Disambiguate the \bibfield{labelname} list only if the truncated list is identical to another one with the same \bibfield{labelyear}. This mode of operation is useful for author-year styles and requires \kvopt{labeldateparts}{true}.
+\end{valuelist}
+%
+Note that the \opt{uniquelist} option will also affect the \cmd{ifsingletitle} test and the \bibfield{extradate} and \bibfield{extraname} fields. See \secref{aut:cav:amb} for further details and practical examples.
+
+\boolitem[false]{nohashothers}
+
+By default, name lists which are truncated with <et al>--either explicitly by <and others> in the data source or the \opt{uniquelist} and \opt{min/maxnames} options--result in different name list hashes (and therefore different \opt{extraname} and \opt{extradate} values) and different sorting. This option allows this behaviour to be tuned. When set to \prm{true}, \biber ignores <et al> truncations for the purposes of generating name list hashes. Consider:
+
+\begin{lstlisting}{}
+Jones 1972
+Jones/and others 1972
+Smith 2000
+Smith/Vogel/Beast/Tremble 2000
+\end{lstlisting}
+%
+With \kvopt{maxnames}{3}, \kvopt{minnames}{1}, \kvopt{nohashothers}{false}, the result would be:
+
+\begin{lstlisting}{}
+ Jones 1972
+ Jones et al. 1972
+ Smith 2000
+ Smith et al. 2000
+\end{lstlisting}
+%
+Whereas with \kvopt{maxnames}{3}, \kvopt{minnames}{1}, \kvopt{nohashothers}{true}, the result would be:
+
+\begin{lstlisting}{}
+ Jones 1972a
+ Jones et al. 1972b
+ Smith 2000a
+ Smith et al. 2000b
+\end{lstlisting}
+
+If desired, this could be further simplified by removing the <et al.\@>
+to obtain:
+
+\begin{lstlisting}{}
+ Jones 1972a
+ Jones 1972b
+ Smith 2000a
+ Smith 2000b
+\end{lstlisting}
+%
+Note that the \opt{nohashothers} option will affect the \bibfield{extradate} and \bibfield{extraname} fields.
+
+This option is also settable on a per-type, per-entry and per-namelist basis.
+
+\boolitem[false]{nosortothers}
+
+The option has a related to effect to \opt{nohashothers} but applies to sorting--the visible list of names (which is the \opt{minsortnames} value) used to determine sorting will ignore any truncation. This means that with \kvopt{nosortothers}{true}, the name lists:
+
+\begin{lstlisting}{}
+Jones, Smith
+Jones, Smith et al
+\end{lstlisting}
+%
+will sort exactly the same. The default setting of \opt{nosortothers} always sorts in the order shown in the example, that is, by default, truncated names lists always sort after any name lists identical to the point of truncation.
+
+This option is also settable on a per-type, per-entry and per-namelist basis.
+\end{optionlist}
+
+\begin{table}
+\caption{Disambiguation counters}
+\label{use:opt:tab1}
+\footnotesize
+\ttfamily
+\tablesetup
+\begin{tabularx}{\textwidth}{XXXX}
+\toprule
+\multicolumn{1}{@{}H}{Option} &
+\multicolumn{1}{@{}H}{Enabled field(s)} &
+\multicolumn{1}{@{}H}{Enabled counter} &
+\multicolumn{1}{@{}H}{Counter tracks} \\
+\cmidrule(r){1-1}\cmidrule(r){2-2}\cmidrule(r){3-3}\cmidrule{4-4}
+labelalpha & labelalpha & extraalpha & label\\
+labeldateparts & labelyear & extradate & extradate context+labelyear\\
+ & labelmonth & & \\
+ & labelday & & \\
+ & labelendyear & & \\
+ & labelendmonth & & \\
+ & labelendday & & \\
+ & labelhour & & \\
+ & labelminute & & \\
+ & labelsecond & & \\
+ & labelendhour & & \\
+ & labelendminute & & \\
+ & labelendsecond & & \\
+ & labelyeardivision & & \\
+ & labelendyeardivision & & \\
+ & labeltimezone & & \\
+ & labelendtimezone & & \\
+labeltitle & {\rmfamily ---} & extratitle & labelname+labeltitle\\
+labeltitleyear & {\rmfamily ---} & extratitleyear & labeltitle+labelyear\\
+{\rmfamily ---} & {\rmfamily ---} & extraname & labelname\\
+\bottomrule
+\end{tabularx}
+\end{table}
+
+\subsubsection{Entry Options}
+\label{use:opt:bib}
+
+Entry options are package options which determine how bibliography data entries are handled. They may be set at various scopes defined below.
+
+\paragraph{Preamble/Type/Entry Options}
+\label{use:opt:bib:hyb}
+
+The following options are settable on a per"=type basis or on a per"=entry in the \bibfield{options} field. In addition to that, they may also be used in the optional argument to \cmd{usepackage} as well as in the configuration file and the document preamble. This is useful if you want to change the default behaviour globally.
+
+\begin{optionlist}
+
+\boolitem[true]{useauthor}
+
+Whether the \bibfield{author} is used in labels and considered during sorting. This may be useful if an entry includes an \bibfield{author} field but is usually not cited by author for some reason. Setting \kvopt{useauthor}{false} does not mean that the \bibfield{author} is ignored completely. It means that the \bibfield{author} is not used in labels and ignored during sorting. The entry will then be alphabetized by \bibfield{editor} or \bibfield{title}. With the standard styles, the \bibfield{author} is printed after the title in this case. See also \secref{use:srt}.
+This option is also settable on a per-type and per-entry basis.
+
+\boolitem[true]{useeditor}
+
+Whether the \bibfield{editor} replaces a missing \bibfield{author} in labels and during sorting. This may be useful if an entry includes an \bibfield{editor} field but is usually not cited by editor. Setting \kvopt{useeditor}{false} does not mean that the \bibfield{editor} is ignored completely. It means that the \bibfield{editor} does not replace a missing \bibfield{author} in labels and during sorting. The entry will then be alphabetized by \bibfield{title}. With the standard styles, the \bibfield{editor} is printed after the title in this case. See also \secref{use:srt}.
+This option is also settable on a per-type and per-entry basis.
+
+\boolitem[false]{usetranslator}
+
+Whether the \bibfield{translator} replaces a missing \bibfield{author}\slash \bibfield{editor} in labels and during sorting. Setting \kvopt{usetranslator}{true} does not mean that the \bibfield{translator} overrides the \bibfield{author}\slash \bibfield{editor}. It means that the \bibfield{translator} is considered as a fallback if the \bibfield{author}\slash \bibfield{editor} is missing or if \opt{useauthor} and \opt{useeditor} are set to \texttt{false}. In other words, in order to cite a book by translator rather than by author, you need to set the following options:
+This option is also settable on a per-type and per-entry basis.
+
+\begin{lstlisting}[style=bibtex]{}
+@Book{...,
+ options = {useauthor=false,usetranslator=true},
+ author = {...},
+ translator = {...},
+ ...
+\end{lstlisting}
+%
+With the standard styles, the \bibfield{translator} is printed after the title by default. See also \secref{use:srt}.
+
+\boolitem[true]{use$<$name$>$}
+
+As per \opt{useauthor}, \opt{useeditor} and \opt{usetranslator}, all name lists defined in the data model have an option controlling their behaviour in sorting and labelling automatically
+defined. Global, per-type and per-entry options called <use$<$name$>$>are automatically created.
+
+\boolitem[false]{useprefix}
+
+Whether the default data model name part <prefix> (von, van, of, da, de, della, etc.) is considered when:
+
+\begin{itemize}
+\item Printing the family name in citations
+\item Sorting
+\item Generation of certain types of labels
+\item Generating name uniqueness information
+\item Formatting aspects of the bibliography
+\end{itemize}
+%
+For example, if this option is enabled, \biblatex precedes the family name with the prefix---Ludwig van Beethoven would be cited as «van Beethoven» and alphabetized as «Van Beethoven, Ludwig». If this option is disabled (the default), he is cited as «Beethoven» and alphabetized as «Beethoven, Ludwig van» instead.
+This option is also settable on a per-type scope. With \biblatexml datasources and the \bibtex extended name format supported by \biber (see \secref{use:enf}), this is also settable on per-namelist and per-name scopes.
+
+\optitem{indexing}{\opt{true}, \opt{false}, \opt{cite}, \opt{bib}}
+
+The \opt{indexing} option is also settable per-type or per-entry basis. See \secref{use:opt:pre:gen} for details.
+
+\boolitem[false]{skipbib}
+
+If this option is enabled, the entry is excluded from the bibliography but it may still be cited.
+This option is also settable on a per-type basis.
+
+\boolitem[false]{skipbiblist}
+
+If this option is enabled, the entry is excluded from bibliography lists. It is still included in the bibliography and it may also be cited by shorthand etc.
+This option is also settable on a per-type basis.
+
+\boolitem[false]{skiplab}
+
+If this option is enabled, \biblatex will not assign any labels to the entry. It is not required for normal operation. Use it with care. If enabled, \biblatex can not guarantee unique citations for the respective entry and citations styles which require labels may fail to create valid citations for the entry.
+This option is also settable on a per-type basis.
+
+\boolitem[false]{dataonly}
+
+Setting this option is equivalent to \kvopt{uniquename}{false}, \kvopt{uniquelist}{false, }\opt{skipbib}, \opt{skipbiblist}, and \opt{skiplab}. It is not required for normal operation. Use it with care.
+This option is also settable on a per-type basis.
+
+\paragraph{Entry Only Options}
+\label{use:opt:bib:entry}
+
+The following options are settable only on a per"=entry in the \bibfield{options} field. They are not available globally or per"=type.
+
+\valitem{labelnamefield}{fieldname}
+
+Specifies the field to consider first when looking for a \bibfield{labelname} candidate. It is essentially prepended to the search list created by \cmd{DeclareLabelname} for just this entry.
+
+\valitem{labeltitlefield}{fieldname}
+
+Specifies the field to consider first when looking for a \bibfield{labeltitle} candidate. It is essentially prepended to the search list created by \cmd{DeclareLabeltitle} for just this entry.
+
+\end{optionlist}
+
+\subsubsection{Legacy Options}
+
+The following legacy option may be used globally in the optional argument to \cmd{documentclass} or locally in the optional argument to \cmd{usepackage}:
+
+\begin{optionlist}
+
+\legitem{openbib}\DeprecatedMark This option is provided for backwards compatibility with the standard LaTeX document classes. \opt{openbib} is similar to \kvopt{block}{par}.
+
+\end{optionlist}
+
+\subsection{Global Customization}
+\label{use:cfg}
+
+Apart from writing new citation and bibliography styles, there are numerous ways to customize the styles which come with this package. Customization will usually take place in the preamble, but there is also a configuration file for permanent adaptions. The configuration file may also be used to initialize the package options to a value different from the package default.
+
+\subsubsection{Configuration File}
+\label{use:cfg:cfg}
+
+If available, this package will load the configuration file \path{biblatex.cfg}. This file is read at the end of the package, immediately after the citation and bibliography styles have been loaded.
+
+\subsubsection{Setting Package Options}
+\label{use:cfg:opt}
+
+The load-time package options in \secref{use:opt:ldt} must be given in the optional argument to \cmd{usepackage}. The package options in \secref{use:opt:pre} may also be given in the preamble. The options are executed with the following command:
+
+\begin{ltxsyntax}
+
+\cmditem{ExecuteBibliographyOptions}[entrytype, \dots]{key=value, \dots}
+
+This command may also be used in the configuration file to modify the default setting of a package option. Certain options are also settable on a per-type basis. In this case, the optional \prm{entrytype} argument specifies the entry type. The \prm{entrytype} argument may be a comma"=separated list of values.
+
+\end{ltxsyntax}
+
+\subsection{Standard Styles}
+\label{use:xbx}
+
+This section provides a short description of all bibliography and citation styles which come with the \biblatex package. Each style is further illustrated in a style example which is linked in the right margin. The local link may not be available if this document does not reside in the expected folder structure. If you want to write your own styles, see \secref{aut}.
+
+\subsubsection{Citation Styles}
+\label{use:xbx:cbx}
+
+The citation styles which come with this package implement several common citation schemes. All standard styles cater for the \bibfield{shorthand} field and support hyperlinks as well as indexing.
+
+\begin{marglist}
+
+\item[numeric]\seestyleexample{30-style-numeric-biber}
+This style implements a numeric citation scheme similar to the standard bibliographic facilities of \latex. It should be employed in conjunction with a numeric bibliography style which prints the corresponding labels in the bibliography. It is intended for in-text citations. The style will set the following package options at load time: \kvopt{autocite}{inline}, \kvopt{labelnumber}{true}. This style also provides an additional preamble option called \opt{subentry} which affects the handling of entry sets. If this option is disabled, citations referring to a member of a set will point to the entire set. If it is enabled, the style supports citations like «[5c]» which point to a subentry in a set (the third one in this example). See the style example for details.
+
+\item[numeric-comp]\seestyleexample{31-style-numeric-comp-biber}
+A compact variant of the \texttt{numeric} style which prints a list of more than two consecutive numbers as a range. This style is similar to the \sty{cite} package and the \opt{sort\&compress} option of the \sty{natbib} package in numerical mode. For example, instead of «[8, 3, 1, 7, 2]» this style would print «[1--3, 7, 8]». It is intended for in-text citations. The style will set the following package options at load time: \kvopt{autocite}{inline}, \kvopt{sortcites}{true}, \kvopt{labelnumber}{true}. It also provides the \opt{subentry} and \opt{subentrycomp} options.
+
+\item[numeric-verb]\seestyleexample{32-style-numeric-verb-biber}
+A verbose variant of the \texttt{numeric} style. The difference affects the handling of a list of citations and is only apparent when multiple entry keys are passed to a single citation command. For example, instead of «[2, 5, 6]» this style would print «[2]; [5]; [6]». It is intended for in-text citations. The style will set the following package options at load time: \kvopt{autocite}{inline}, \kvopt{labelnumber}{true}. It also provides the \opt{subentry} option.
+
+\item[alphabetic]\seestyleexample{40-style-alphabetic-biber}
+This style implements an alphabetic citation scheme similar to the \path{alpha.bst} style of traditional \bibtex. The alphabetic labels resemble a compact author"=year style to some extent, but the way they are employed is similar to a numeric citation scheme. For example, instead of «Jones 1995» this style would use the label «[Jon95]». «Jones and Williams 1986» would be rendered as «[JW86]». This style should be employed in conjunction with an alphabetic bibliography style which prints the corresponding labels in the bibliography. It is intended for in-text citations. The style will set the following package options at load time: \kvopt{autocite}{inline}, \kvopt{labelalpha}{true}. This style also provides an additional preamble option called \opt{subentry} which affects the handling of entry sets. If this option is disabled, citations referring to a member of a set will point to the entire set. If it is enabled, the style supports citations like «[SGW(c)]» which point to a subentry in a set (the third one in this example). See the style example for details.
+
+\item[alphabetic-verb]\seestyleexample{41-style-alphabetic-verb-biber}
+A verbose variant of the \texttt{alphabetic} style. The difference affects the handling of a list of citations and is only apparent when multiple entry keys are passed to a single citation command. For example, instead of «[Doe92; Doe95; Jon98]» this style would print «[Doe92]; [Doe95]; [Jon98]». It is intended for in-text citations. The style will set the following package options at load time: \kvopt{autocite}{inline}, \kvopt{labelalpha}{true}. It also provides the subentry option.
+
+\item[authoryear]\seestyleexample{50-style-authoryear-biber}
+This style implements an author"=year citation scheme. If the bibliography contains two or more works by the same author which were all published in the same year, a letter is appended to the year. For example, this style would print citations such as «Doe 1995a; Doe 1995b; Jones 1998». This style should be employed in conjunction with an author"=year bibliography style which prints the corresponding labels in the bibliography. It is primarily intended for in-text citations, but it could also be used with citations given in footnotes. The style will set the following package options at load time: \kvopt{autocite}{inline}, \kvopt{labeldateparts}{true}, \kvopt{uniquename}{full}, \kvopt{uniquelist}{true}.
+
+\item[authoryear-comp]\seestyleexample{52-style-authoryear-comp-biber}
+A compact variant of the \texttt{authoryear} style which prints the author only once if subsequent references passed to a single citation command share the same author. If they share the same year as well, the year is also printed only once. For example, instead of «Doe 1995b; Doe 1992; Jones 1998; Doe 1995a» this style would print «Doe 1992, 1995a,b; Jones 1998». It is primarily intended for in-text citations, but it could also be used with citations given in footnotes. The style will set the following package options at load time: \kvopt{autocite}{inline}, \kvopt{sortcites}{true}, \kvopt{labeldateparts}{true}, \kvopt{uniquename}{full}, \kvopt{uniquelist}{true}.
+
+\item[authoryear-ibid]\seestyleexample{51-style-authoryear-ibid-biber}
+A variant of the \texttt{authoryear} style which replaces repeated citations by the abbreviation \emph{ibidem} unless the citation is the first one on the current page or double-page spread, or the \emph{ibidem} would be ambiguous in the sense of the package option \kvopt{ibidtracker}{constrict}. The style will set the following package options at load time: \kvopt{autocite}{inline}, \kvopt{labeldateparts}{true}, \kvopt{uniquename}{full}, \kvopt{uniquelist}{true}, \kvopt{ibidtracker}{constrict}, \kvopt{pagetracker}{true}. This style also provides an additional preamble option called \opt{ibidpage}. See the style example for details.
+
+\item[authoryear-icomp]\seestyleexample{53-style-authoryear-icomp-biber}
+A style combining \texttt{authoryear-comp} and \texttt{authoryear-ibid}. The style will set the following package options at load time: \kvopt{autocite}{inline}, \kvopt{labeldateparts}{true}, \kvopt{uniquename}{full}, \kvopt{uniquelist}{true}, \kvopt{ibidtracker}{constrict}, \kvopt{pagetracker}{true}, \kvopt{sortcites}{true}. This style also provides an additional preamble option called \opt{ibidpage}. See the style example for details.
+
+\item[authortitle]\seestyleexample{60-style-authortitle-biber}
+This style implements a simple author"=title citation scheme. It will make use of the \bibfield{shorttitle} field, if available. It is intended for citations given in footnotes. The style will set the following package options at load time: \kvopt{autocite}{footnote}, \kvopt{uniquename}{full}, \kvopt{uniquelist}{true}.
+
+\item[authortitle-comp]\seestyleexample{62-style-authortitle-comp-biber}
+A compact variant of the \texttt{authortitle} style which prints the author only once if subsequent references passed to a single citation command share the same author. For example, instead of «Doe, \emph{First title}; Doe, \emph{Second title}» this style would print «Doe, \emph{First title}, \emph{Second title}». It is intended for citations given in footnotes. The style will set the following package options at load time: \kvopt{autocite}{footnote}, \kvopt{sortcites}{true}, \kvopt{uniquename}{full}, \kvopt{uniquelist}{true}.
+
+\item[authortitle-ibid]\seestyleexample{61-style-authortitle-ibid-biber}
+A variant of the \texttt{authortitle} style which replaces repeated citations by the abbreviation \emph{ibidem} unless the citation is the first one on the current page or double-page spread, or the \emph{ibidem} would be ambiguous in the sense of the package option \kvopt{ibidtracker}{constrict}. It is intended for citations given in footnotes. The style will set the following package options at load time: \kvopt{autocite}{footnote}, \kvopt{uniquename}{full}, \kvopt{uniquelist}{true}, \kvopt{ibidtracker}{constrict}, \kvopt{pagetracker}{true}. This style also provides an additional preamble option called \opt{ibidpage}. See the style example for details.
+
+\item[authortitle-icomp]\seestyleexample{63-style-authortitle-icomp-biber}
+A style combining the features of \texttt{authortitle-comp} and \texttt{authortitle-ibid}. The style will set the following package options at load time: \kvopt{autocite}{footnote}, \kvopt{uniquename}{full}, \kvopt{uniquelist}{true}, \kvopt{ibidtracker}{constrict}, \kvopt{pagetracker}{true}, \kvopt{sortcites}{true}. This style also provides an additional preamble option called \opt{ibidpage}. See the style example for details.
+
+\item[authortitle-terse]\seestyleexample{64-style-authortitle-terse-biber}
+A terse variant of the \texttt{authortitle} style which only prints the title if the bibliography contains more than one work by the respective author\slash editor. This style will make use of the \bibfield{shorttitle} field, if available. It is suitable for in-text citations as well as citations given in footnotes. The style will set the following package options at load time: \kvopt{autocite}{inline}, \kvopt{singletitle}{true}, \kvopt{uniquename}{full}, \kvopt{uniquelist}{true}.
+
+\item[authortitle-tcomp]\seestyleexample{65-style-authortitle-tcomp-biber}
+A style combining the features of \texttt{authortitle-comp} and \texttt{authortitle-terse}. This style will make use of the \bibfield{shorttitle} field, if available. It is suitable for in-text citations as well as citations given in footnotes. The style will set the following package options at load time: \kvopt{autocite}{inline}, \kvopt{sortcites}{true}, \kvopt{singletitle}{true}, \kvopt{uniquename}{full}, \kvopt{uniquelist}{true}.
+
+\item[authortitle-ticomp]\seestyleexample{66-style-authortitle-ticomp-biber}
+A style combining the features of \texttt{authortitle-icomp} and \texttt{authortitle-terse}. In other words: a variant of the \texttt{authortitle-tcomp} style with an \emph{ibidem} feature. This style is suitable for in-text citations as well as citations given in footnotes. It will set the following package options at load time: \kvopt{autocite}{inline}, \kvopt{ibidtracker}{constrict}, \kvopt{pagetracker}{true}, \kvopt{sortcites}{true}, \kvopt{singletitle}{true}, \kvopt{uniquename}{full}, \kvopt{uniquelist}{true}. This style also provides an additional preamble option called \opt{ibidpage}. See the style example for details.
+
+\item[verbose]\seestyleexample{70-style-verbose-biber}
+A verbose citation style which prints a full citation similar to a bibliography entry when an entry is cited for the first time, and a short citation afterwards. If available, the \bibfield{shorttitle} field is used in all short citations. If the \bibfield{shorthand} field is defined, the shorthand is introduced on the first citation and used as the short citation thereafter. This style may be used without a list of references and shorthands since all bibliographic data is provided on the first citation. It is intended for citations given in footnotes. The style will set the following package options at load time: \kvopt{autocite}{footnote}, \kvopt{citetracker}{context}. This style also provides an additional preamble option called \opt{citepages}. See the style example for details.
+
+\item[verbose-ibid]\seestyleexample{71-style-verbose-ibid-biber}
+A variant of the \texttt{verbose} style which replaces repeated citations by the abbreviation \emph{ibidem} unless the citation is the first one on the current page or double-page spread, or the \emph{ibidem} would be ambiguous in the sense of \kvopt{ibidtracker}{strict}. This style is intended for citations given in footnotes. The style will set the following package options at load time: \kvopt{autocite}{footnote}, \kvopt{citetracker}{context}, \kvopt{ibidtracker}{constrict}, \kvopt{pagetracker}{true}. This style also provides additional preamble options called \opt{ibidpage} and \opt{citepages}. See the style example for details.
+
+\item[verbose-note]\seestyleexample{72-style-verbose-note-biber}
+This style is similar to the \texttt{verbose} style in that it prints a full citation similar to a bibliography entry when an entry is cited for the first time, and a short citation afterwards. In contrast to the \texttt{verbose} style, the short citation is a pointer to the footnote with the full citation. If the bibliography contains more than one work by the respective author\slash editor, the pointer also includes the title. If available, the \bibfield{shorttitle} field is used in all short citations. If the \bibfield{shorthand} field is defined, it is handled as with the \texttt{verbose} style. This style may be used without a list of references and shorthands since all bibliographic data is provided on the first citation. It is exclusively intended for citations given in footnotes. The style will set the following package options at load time: \kvopt{autocite}{footnote}, \kvopt{citetracker}{context}, \kvopt{singletitle}{true}. This style also provides additional preamble options called \opt{pageref} and \opt{citepages}. See the style example for details.
+
+\item[verbose-inote]\seestyleexample{73-style-verbose-inote-biber}
+A variant of the \texttt{verbose"=note} style which replaces repeated citations by the abbreviation \emph{ibidem} unless the citation is the first one on the current page or double-page spread, or the \emph{ibidem} would be ambiguous in the sense of \kvopt{ibidtracker}{strict}. This style is exclusively intended for citations given in footnotes. It will set the following package options at load time: \kvopt{autocite}{footnote}, \kvopt{citetracker}{context}, \kvopt{ibidtracker}{constrict}, \kvopt{singletitle}{true}, \kvopt{pagetracker}{true}. This style also provides additional preamble options called \opt{ibidpage}, \opt{pageref}, and \opt{citepages}. See the style example for details.
+
+\item[verbose-trad1]\seestyleexample{74-style-verbose-trad1-biber}
+This style implements a traditional citation scheme. It is similar to the \texttt{verbose} style in that it prints a full citation similar to a bibliography entry when an item is cited for the first time, and a short citation afterwards. Apart from that, it uses the scholarly abbreviations \emph{ibidem}, \emph{idem}, \emph{op.~cit.}, and \emph{loc.~cit.} to replace recurrent authors, titles, and page numbers in repeated citations in a special way. If the \bibfield{shorthand} field is defined, the shorthand is introduced on the first citation and used as the short citation thereafter. This style may be used without a list of references and shorthands since all bibliographic data is provided on the first citation. It is intended for citations given in footnotes. The style will set the following package options at load time: \kvopt{autocite}{footnote}, \kvopt{citetracker}{context}, \kvopt{ibidtracker}{constrict}, \kvopt{idemtracker}{constrict}, \kvopt{opcittracker}{context}, \kvopt{loccittracker}{context}. This style also provides additional preamble options called \opt{ibidpage}, \opt{strict}, and \opt{citepages}. See the style example for details.
+
+\item[verbose-trad2]\seestyleexample{75-style-verbose-trad2-biber}
+Another traditional citation scheme. It is also similar to the \texttt{verbose} style but uses scholarly abbreviations like \emph{ibidem} and \emph{idem} in repeated citations. In contrast to the \texttt{verbose-trad1} style, the logic of the \emph{op.~cit.} abbreviations is different in this style and \emph{loc.~cit.} is not used at all. It is in fact more similar to \texttt{verbose-ibid} and \texttt{verbose-inote} than to \texttt{verbose-trad1}. The style will set the following package options at load time: \kvopt{autocite}{footnote}, \kvopt{citetracker}{context}, \kvopt{ibidtracker}{constrict}, \kvopt{idemtracker}{constrict}. This style also provides additional preamble options called \opt{ibidpage}, \opt{strict}, and \opt{citepages}. See the style example for details.
+
+\item[verbose-trad3]\seestyleexample{76-style-verbose-trad3-biber}
+Yet another traditional citation scheme. It is similar to the \texttt{verbose-trad2} style but uses the scholarly abbreviations \emph{ibidem} and \emph{op.~cit.} in a slightly different way. The style will set the following package options at load time: \kvopt{autocite}{footnote}, \kvopt{citetracker}{context}, \kvopt{ibidtracker}{constrict}, \kvopt{loccittracker}{constrict}. This style also provides additional preamble options called \opt{strict} and \opt{citepages}. See the style example for details.
+
+\item[reading]\seestyleexample{80-style-reading-biber}
+A citation style which goes with the bibliography style by the same name. It simply loads the \texttt{authortitle} style.
+
+\end{marglist}
+
+The following citation styles are special purpose styles. They are not intended for the final version of a document:
+
+\begin{marglist}
+
+\item[draft]\seestyleexample{81-style-draft-biber}
+A draft style which uses the entry keys in citations. The style will set the following package options at load time: \kvopt{autocite}{plain}.
+
+\item[debug]\seestyleexample{82-style-debug-biber}
+This style prints the entry key rather than some kind of label. It is intended for debugging only and will set the following package options at load time: \kvopt{autocite}{plain}.
+
+\end{marglist}
+
+\subsubsection{Bibliography Styles}
+\label{use:xbx:bbx}
+
+All bibliography styles which come with this package use the same basic format for the individual bibliography entries. They only differ in the kind of label printed in the bibliography and the overall formatting of the list of references. There is a matching bibliography style for every citation style. Note that some bibliography styles are not mentioned below because they simply load a more generic style. For example, the bibliography style \texttt{authortitle-comp} will load the \texttt{authortitle} style.
+
+\begin{marglist}
+
+\item[numeric]\seestyleexample{30-style-numeric-biber}
+This style prints a numeric label similar to the standard bibliographic facilities of \latex. It is intended for use in conjunction with a numeric citation style. Note that the \bibfield{shorthand} field overrides the default label. The style will set the following package options at load time: \kvopt{labelnumber}{true}. This style also provides an additional preamble option called \opt{subentry} which affects the formatting of entry sets. If this option is enabled, all members of a set are marked with a letter which may be used in citations referring to a set member rather than the entire set. See the style example for details.
+
+\item[alphabetic]\seestyleexample{40-style-alphabetic-biber}
+This style prints an alphabetic label similar to the \path{alpha.bst} style of traditional \bibtex. It is intended for use in conjunction with an alphabetic citation style. Note that the \bibfield{shorthand} field overrides the default label. The style will set the following package options at load time: \kvopt{labelalpha}{true}, \kvopt{sorting}{anyt}.
+
+\item[authoryear]\seestyleexample{50-style-authoryear-biber}
+This style differs from the other styles in that the publication date is not printed towards the end of the entry but rather after the author\slash editor. It is intended for use in conjunction with an author"=year citation style. Recurring author and editor names are replaced by a dash unless the entry is the first one on the current page or double-page spread. This style provides an additional preamble option called \opt{dashed} which controls this feature. It also provided a preamble option called \opt{mergedate}. See the style example for details. The style will set the following package options at load time: \kvopt{labeldateparts}{true}, \kvopt{sorting}{nyt}, \kvopt{pagetracker}{true}, \kvopt{mergedate}{true}.
+
+\item[authortitle]\seestyleexample{60-style-authortitle-biber}
+This style does not print any label at all. It is intended for use in conjunction with an author"=title citation style. Recurring author and editor names are replaced by a dash unless the entry is the first one on the current page or double-page spread. This style also provides an additional preamble option called \opt{dashed} which controls this feature. See the style example for details. The style will set the following package options at load time: \kvopt{pagetracker}{true}.
+
+\item[verbose]\seestyleexample{70-style-verbose-biber}
+This style is similar to the \texttt{authortitle} style. It also provides an additional preamble option called \opt{dashed}. See the style example for details. The style will set the following package options at load time: \kvopt{pagetracker}{true}.
+
+\item[reading]\seestyleexample{80-style-reading-biber}
+This special bibliography style is designed for personal reading lists, annotated bibliographies, and similar applications. It optionally includes the fields \bibfield{annotation}, \bibfield{abstract}, \bibfield{library}, and \bibfield{file} in the bibliography. If desired, it also adds various kinds of short headers to the bibliography. This style also provides the additional preamble options \opt{entryhead}, \opt{entrykey}, \opt{annotation}, \opt{abstract}, \opt{library}, and \opt{file} which control whether or not the corresponding items are printed in the bibliography. See the style example for details. See also \secref{use:use:prf}. The style will set the following package options at load time: \kvopt{loadfiles}{true}, \kvopt{entryhead}{true}, \kvopt{entrykey}{true}, \kvopt{annotation}{true}, \kvopt{abstract}{true}, \kvopt{library}{true}, \kvopt{file}{true}.
+
+\end{marglist}
+
+The following bibliography styles are special purpose styles. They are not intended for the final version of a document:
+
+\begin{marglist}
+
+\item[draft]\seestyleexample{81-style-draft-biber}
+This draft style includes the entry keys in the bibliography. The bibliography will be sorted by entry key. The style will set the following package options at load time: \kvopt{sorting}{debug}.
+
+\item[debug]\seestyleexample{82-style-debug-biber}
+This style prints all bibliographic data in tabular format. It is intended for debugging only and will set the following package options at load time: \kvopt{sorting}{debug}.
+
+\end{marglist}
+
+\subsection{Extended Name Format}
+\label{use:enf}
+The parsing rules for \bibtex names are rather archaic and not suited to
+many international name formats. \biber supports an extended name format
+which allows explicit specification of the parts of names. This allows the
+use of custom name parts apart from the four standard \bibtex parts. Extended
+name formats are supported in all name fields and can be used along with
+the usual \bibtex name format. Recognition of extended name format can be
+disabled with the \biber option \opt{--noxname} in case you do not need the
+extended format and the auto-detection causes problems with normal name
+parsing. The separator \verb+=+ which comes between the namepart names and
+values is customisable with the \biber option \opt{--xnamesep}. Here is an
+example:
+
+\begin{lstlisting}[style=bibtex]{}
+AUTHOR = {Hans Harman and Simon de Beumont}
+AUTHOR = {given=Hans, family=Harman and given=Simon, prefix=de, family=Beumont}
+\end{lstlisting}
+%
+These two name specifications are equivalent but the extended format
+explicitly names the parts. The supported parts are those specified by the
+\biblatex data mode constant \opt{nameparts}, see \secref{aut:bbx:drv}. As
+with traditional \bibtex name parsing, initials are automatically generated
+but it is also possible to specify these explicitly:
+
+\begin{lstlisting}[style=bibtex]{}
+AUTHOR = {given=Jean, prefix=de la, prefix-i=d, family=Rousse}
+AUTHOR = {given={Jean Pierre Simon}, given-i=JPS}
+\end{lstlisting}
+%
+Initials are specified by adding the suffix \verb+-i+ to the namepart name.
+Compound parts may be protected with braces:
+
+\begin{lstlisting}[style=bibtex]{}
+AUTHOR = {given={Jean Pierre}}
+\end{lstlisting}
+%
+If a namepart contains a comma, the whole namepart should be protected with
+quotes:
+
+\begin{lstlisting}[style=bibtex]{}
+AUTHOR = {"family={Robert and Sons, Inc.}"}
+\end{lstlisting}
+%
+Traditional \bibtex name formats and the extended form may be used together:
+
+\begin{lstlisting}[style=bibtex]{}
+AUTHOR = {Hans Harman and given=Simon, prefix=de, family=Beumont}
+\end{lstlisting}
+%
+Per-namelist and per-name options may be specified in the extended name
+format, see \secref{use:opt:bib:hyb}:
+
+\begin{lstlisting}[style=bibtex]{}
+AUTHOR = {nosortothers=true and Hans Harman and
+ given=Simon, family=Beumont, prefix=de, useprefix=true}
+\end{lstlisting}
+
+\subsection{Related Entries}
+\label{use:rel}
+
+Almost all bibliography styles require authors to specify certain types of relationship between entries such as «Reprint of», «Reprinted in» etc. It is impossible to provide data fields to cover all of these relationships and so \biblatex provides a general mechanism for this using the entry fields \bibfield{related}, \bibfield{relatedtype} and \bibfield{relatedstring}. A related entry does not need to be cited and does not appear in the bibliography itself (unless of course it is also cited itself independently) as a clone is taken of the related entry to be used as a data source. The \bibfield{relatedtype} field should specify a localisation string which will be printed before the information from the related entries is printed, for example «Orig. Pub. as». The \bibfield{relatedstring} field can be used to override the string determined via \bibfield{relatedtype}. Some examples:
+
+\begin{lstlisting}[style=bibtex]{}
+@Book{key1,
+ ...
+ related = {key2},
+ relatedtype = {reprintof},
+ ...
+}
+
+@Book{key2,
+ ...
+}
+\end{lstlisting}
+%
+Here we specify that entry \texttt{key1} is a reprint of entry \texttt{key2}. In the bibliography driver for \texttt{Book} entries, when \cmd{usebibmacro\{related\}} is called for entry \texttt{key1}:
+
+\begin{itemize}
+\item If the localisation string «\texttt{reprintof}» is defined, it is printed in the \texttt{relatedstring:reprintof} format. If this formatting directive is undefined, the string is printed in the \texttt{relatedstring:default} format.
+\item If the \texttt{related:reprintof} macro is defined, it is used to format the information contained in entry \texttt{key2}, otherwise the \texttt{related:default} macro is used
+\item If the \texttt{related:reprintof} format is defined, it is used to format both the localisation string and data. If this format is not defined, then the \texttt{related} format is used instead.
+\end{itemize}
+%
+It is also supported to have cascading and/or circular relations:
+
+\begin{lstlisting}[style=bibtex]{}
+@Book{key1,
+ ...
+ related = {key2},
+ relatedtype = {reprintof},
+ ...
+}
+
+@Book{key2,
+ ...
+ related = {key3},
+ relatedtype = {translationof},
+ ...
+}
+
+@Book{key3,
+ ...
+ related = {key2},
+ relatedtype = {translatedas},
+ ...
+}
+\end{lstlisting}
+%
+Multiple relations to the same entry are also possible:
+\begin{lstlisting}[style=bibtex]{}
+@MVBook{key1,
+ ...
+ related = {key2,key3},
+ relatedtype = {multivolume},
+ ...
+}
+
+@Book{key2,
+ ...
+}
+
+@Book{key3,
+ ...
+}
+\end{lstlisting}
+%
+Note the order of the keys in lists of multiple related entries is important. The data from multiple related entries is printed in the order of the keys listed in this field. See \secref{aut:ctm:rel} for a more details on the mechanisms behind this feature. You can turn this feature off using the package option \opt{related} from \secref{use:opt:pre:gen}.
+
+You can use the \bibfield{relatedoptions} to set options on the related entry data clone. This is useful if you need to override the \opt{dataonly} option which is set by default on all related entry clones. For example, if you will expose some of the names in the related clone in your document, you may want to have them disambiguated from names in other entries but normally this won't happen as related clones have the per"=entry \opt{dataonly} option set and this in turn sets \kvopt{uniquename}{false} and \kvopt{uniquelist}{false}. In such a case, you can set \bibfield{relatedoptions} to just \opt{skiplab, skipbib, skipbiblist}.
+
+\subsection{Sorting Options}
+\label{use:srt}
+
+This package supports fully customisable sorting templates for the bibliography. The default global sorting template is selected with the \opt{sorting} package option from \secref{use:opt:pre:gen}. Apart from the regular data fields there are also some special fields which may be used to optimize the sorting of the bibliography. \Apxref{apx:srt:a1, apx:srt:a2} give an outline of the default alphabetic sorting templates supported by \biblatex. Chronological sorting templates are listed in \apxref{apx:srt:chr}. A few explanations concerning the default templates are in order.
+
+The first item considered in the sorting process is always the \bibfield{presort} field of the entry. If this field is undefined, \biblatex will use the default value <\texttt{mm}> as a presort string. The next item considered is the \bibfield{sortkey} field. If this field is defined, it serves as the master sort key. Apart from the \bibfield{presort} field, no further data is considered in this case. If the \bibfield{sortkey} field is undefined, sorting continues with the name. The package will try using the \bibfield{sortname}, \bibfield{author}, \bibfield{editor}, and \bibfield{translator} fields, in this order. Which fields are considered also depends on the setting of the \opt{use$<$name$>$} options. If all such options are disabled, the \bibfield{sortname} field is ignored as well. Note that all name fields are responsive to \opt{maxnames} and \opt{minnames}. If no name field is available, either because all of them are undefined or because all \opt{use$<$name$>$} options are disabled, \biblatex will fall back to the \bibfield{sorttitle} and \bibfield{title} fields as a last resort. The remaining items are, in various order: the \bibfield{sortyear} field, if defined, or the first four digits of the \bibfield{year} field otherwise; the \bibfield{sorttitle} field, if defined, or the \bibfield{title} field otherwise; the \bibfield{volume} field. Note that the sorting templates shown in \apxref{apx:srt:a2} include an additional item: \bibfield{labelalpha} is the label used by <alphabetic> bibliography styles. Strictly speaking, the string used for sorting is \bibfield{labelalpha}~+ \bibfield{extraalpha}. The sorting templates in \apxref{apx:srt:a2} are intended to be used in conjunction with alphabetic styles only.
+
+The chronological sorting templates presented in \apxref{apx:srt:chr} also make use of the \bibfield{presort} and \bibfield{sortkey} fields, if defined. The next item considered is the \bibfield{sortyear} or the \bibfield{year} field, depending on availability. The \opt{ynt} template extracts the first four Arabic figures from the field. If both fields are undefined, the string \texttt{9999} is used as a fallback value. This means that all entries without a year will be moved to the end of the list. The \opt{ydnt} template is similar in concept but sorts the year in descending order. As with the \opt{ynt} template, the string \texttt{9999} is used as a fallback value. The remaining items are similar to the alphabetic sorting templates discussed above. Note that the \opt{ydnt} sorting template will only sort the date in descending order. All other items are sorted in ascending order as usual.
+
+Using special fields such as \bibfield{sortkey}, \bibfield{sortname}, or \bibfield{sorttitle} is usually not required. The \biblatex package is quite capable of working out the desired sorting order by using the data found in the regular fields of an entry. You will only need them if you want to manually modify the sorting order of the bibliography or if any data required for sorting is missing. Please refer to the field descriptions in \secref{bib:fld:spc} for details on possible uses of the special fields.
+
+\subsection{Data Annotations}
+\label{use:annote}
+Ideally, there should be no formatting information in a bibliography data file, however, sometimes such questionable practice seems to the only way in which the desired results can be achieved. Data annotations are a way of addressing this by allowing users to attach semantic information (rather than typographical markup) to information in a bibliography data source so that the information can be used at markup time by a style. For example, if you wanted to highlight certain names in a work depending on whether they were a student author (indicated by a superscript asterisk in the references) or a corresponding author (indicated by bold face), then you might be tempted to try:
+
+\begin{lstlisting}[style=bibtex]{}
+@MISC{Article1,
+ AUTHOR = {Last1\textsuperscript{*}, First1 and \textbf{Last2}, \textbf{First2} and Last3, First3}
+}
+\end{lstlisting}
+%
+There are several problems with this. Firstly, it will break \bibtex's fragile name parsing routines and probably won't compile at all. Secondly, it is not only mixing up data with markup, it does so in a hard-coded way: this data can't easily be shared and used with other styles. While it is possible to achieve this formatting using \biblatex internals in a style or document, this is a complex and unreliable method which many users will not wish to use.
+
+In order to address these issues, \biblatex has a general data annotation facility which allows you to attach any number of a comma"=separated list of annotations to data fields, items within data field lists (like names) and even parts of specific items such as parts of names (given name, family name etc.). There are macros provided to check for annotations which can be used in formatting directives.
+
+There are three «scopes» for data annotations, in order of increasing specificity:
+
+\begin{itemize}
+\item \opt{field}---applied to top-level fields in a data source entry
+\item \opt{item}---applied to items within a list field in a data source entry
+\item \opt{part}---applied to parts within items within a list field in a data source entry
+\end{itemize}
+%
+Data annotations are supported for \bibtex and \biblatexml data sources.
+
+\begin{lstlisting}[style=bibtex]{}
+@MISC{ann1,
+ AUTHOR = {Last1, First1 and Last2, First2 and Last3, First3},
+ AUTHOR+an = {1:family=student;2=corresponding},
+ TITLE = {The Title},
+ TITLE+an:default = {=titleannotation},
+ TITLE+an:cat = {="Provisional"}
+}
+\end{lstlisting}
+%
+Here the field name suffix \texttt{+an} is a user-definable\footnote{See \biber's \opt{--annotation-marker} option.} suffix which marks a data field as an annotation of the unsuffixed field. Multiple annotations can be provided for the same field since all annotations are named. After the annotation marker is the optional named annotation marker \footnote{See \biber's \opt{--named-annotation-marker} option.} and an optional annotation name. The annotation name is <default> if not specified and so in the above example the following two are equivalent:
+
+\begin{lstlisting}[style=bibtex]{}
+TITLE+an = {=titleannotation},
+TITLE+an:default = {=titleannotation},
+\end{lstlisting}
+%
+The format of annotation fields in \bibtex data sources is is as follows:
+
+\begin{lstlisting}
+<annotationspecs> ::= <annotationspec> [ ";" <annotationspec> ]
+<annotationspec> ::= [ <itemcount> [ ":" <part> ] ] "=" <annotations>
+<annotations> ::= <annotation> [ "," <annotation> ]
+<annotation> ::= ["] (string) ["]
+\end{lstlisting}
+%
+That is, one or more specifications separated by semicolons. Each specification is an equals sign followed by a comma"=separated list of annotation keywords or a string enclosed in double-quotes (a <literal> annotation, see below). To annotate a specific item in a list, put the number of the list item before the equals sign (lists start at 1). If you need to annotate a specific part of the list item, give its name after the list item number, preceded by a colon. Name part names are defined in the data model, see \secref{aut:bbx:drv}. Some further examples:
+
+\begin{lstlisting}[style=bibtex]{}
+AUTHOR = {Last1, First1 and Last2, First2 and Last3, First3},
+AUTHOR+an = {3:given=annotation1, annotation2},
+TITLE = {A title},
+TITLE+an = {=a title annotation, another title annotation},
+LANGUAGE = {english and french},
+LANGUAGE+an = {1=annotation3; 2=annotation4}
+}
+\end{lstlisting}
+%
+Attaching annotations to data is similar in \biblatexml data sources. Using the example above, we would have:
+
+\begin{lstlisting}[language=xml]
+<bltx:entries xmlns:bltx="http://biblatex-biber.sourceforge.net/biblatexml">
+ <bltx:entry id="test" entrytype="misc">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="given" initial="F">First1</bltx:namepart>
+ <bltx:namepart type="family" initial="L">Last1</bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="given" initial="F">First2</bltx:namepart>
+ <bltx:namepart type="family" initial="L">Last2</bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="given" initial="F">First3</bltx:namepart>
+ <bltx:namepart type="family" initial="L">Last3</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ </bltx:annotation field="author" item="1" part="family">student</bltx:annotation>
+ </bltx:annotation field="author" item="2">corresponding</bltx:annotation>
+ </bltx:entry>
+</bltx:entries>
+\end{lstlisting}
+%
+To access the annotation information when formatting bibliography data, macros are provided, corresponding to the three annotation scopes:
+
+\begin{ltxsyntax}
+
+\cmditem{iffieldannotation}[msform][mslang][entryfield][annotationname]{annotation}{true}{false}
+
+Executes \prm{true} if the data field \prm{entryfield} (optionally a multiscript field of \prm{msform}/\prm{mslang}) has an annotation \prm{annotation} for the annotation called \prm{annotationname} and false otherwise. If \prm{annotationname} is not given, then the annotation named <default> is assumed (this is the name given to annotations defined without an explicit name). If \prm{entryfield} is not given, the current data field as indicated by \cmd{currentfield}, \cmd{currentlist} or \cmd{currentname} (see \secref{aut:bib:fmt}) is assumed. Of course, this is only possible if these commands are defined, that is, inside formatting directives.
+
+\cmditem{ifitemannotation}[msform][mslang][entryfield][annotationname][item]{annotation}{true}{false}
+
+Executes \prm{true} if the item \prm{item} in the data field \prm{entryfield} (optionally a multiscript field of \prm{msform}/\prm{mslang}) has an annotation \prm{annotation} and false otherwise. If \prm{annotationname} is not given, then the annotation named <default> is assumed (this is the name given to annotations defined without an explicit name). The optional argument \prm{entryfield} can be inferred if not provided as with \cmd{iffieldannotation}. If \prm{item} is not given, the number of the item currently being processed as given by \cnt{listcount} is used.
+
+\cmditem{ifpartannotation}[msform][mslang][entryfield][annotationname][item]{part}{annotation}{true}{false}
+
+Executes \prm{true} if the part named \prm{part} in item \prm{item} in the data field \prm{entryfield} (optionally a multiscript field of \prm{msform}/\prm{mslang}) has an annotation \prm{annotation} and false otherwise. If \prm{annotationname} is not given, then the annotation named <default> is assumed (this is the name given to annotations defined without an explicit name). The two optional arguments \prm{entryfield} and \prm{item} can be inferred as in \cmd{ifitemannotation}. The parameter \prm{part} can never be inferred and is therefore a mandatory argument.
+
+Date fields are special and handled in a context where \cmd{currentfield} is not accessible. Thus there is a fourth command to test annotations for dates.
+
+\cmditem{ifdateannotation}[annotationname]{datetype}{annotation}{true}{false}
+
+Executes \prm{true} if the date field \prm{datetype} has an annotation \prm{annotation} and false otherwise. If \prm{annotationname} is not given, then the annotation named <default> is assumed (this is the name given to annotations defined without an explicit name). The \prm{datetype} argument is mandatory, because it cannot be inferred in most contexts where \cmd{ifdateannotation} will be used.
+
+\cmditem{hasfieldannotation}[msform][mslang][entryfield][annotationname]{true}{false}
+
+Executes \prm{true} if the data field \prm{entryfield} (optionally a multiscript field of \prm{msform}/\prm{mslang}) has a literal annotation \prm{annotationname} defined and false otherwise. If \prm{annotationname} is not given, then the annotation named <default> is assumed (this is the name given to annotations defined without an explicit name). If \prm{entryfield} is not given, the current data field as indicated by \cmd{currentfield}, \cmd{currentlist} or \cmd{currentname} (see \secref{aut:bib:fmt}) is assumed. Of course, this is only possible if these commands are defined, that is, inside formatting directives.
+
+\cmditem{hasitemannotation}[msform][mslang][entryfield][annotationname][item]{true}{false}
+
+Executes \prm{true} if the item \prm{item} in the data field \prm{entryfield} (optionally a multiscript field of \prm{msform}/\prm{mslang}) has a literal annotation \prm{annotationname} defined and false otherwise. If \prm{annotationname} is not given, then the annotation named <default> is assumed (this is the name given to annotations defined without an explicit name). The optional argument \prm{entryfield} can be inferred if not provided as with \cmd{iffieldannotation}. If \prm{item} is not given, the number of the item currently being processed as given by \cnt{listcount} is used.
+
+\cmditem{haspartannotation}[msform][mslang][entryfield][annotationname][item]{part}{true}{false}
+
+Executes \prm{true} if the part named \prm{part} in the item \prm{item} in the data field \prm{entryfield} (optionally a multiscript field of \prm{msform}/\prm{mslang}) has a literal annotation \prm{annotationname} defined and false otherwise. If \prm{annotationname} is not given, then the annotation named <default> is assumed (this is the name given to annotations defined without an explicit name). The two optional arguments \prm{entryfield} and \prm{item} can be inferred as in \cmd{ifitemannotation}. The parameter \prm{part} can never be inferred and is therefore a mandatory argument.
+
+Date fields are special and handled in a context where \cmd{currentfield} is not accessible. Thus there is a fourth command to test the existence of annotations for dates.
+
+\cmditem{hasdateannotation}[annotationname]{datetype}{true}{false}
+
+Executes \prm{true} if the date field \prm{datetype} has any annotation \prm{annotationname} defined and false otherwise. If \prm{annotationname} is not given, then the annotation named <default> is assumed (this is the name given to annotations defined without an explicit name). The \prm{datetype} argument is mandatory, because it cannot be inferred in most contexts where \cmd{ifdateannotation} will be used.
+
+\end{ltxsyntax}
+%
+As an example of how to use the annotation information to solve the problem originally presented in this section, this could be used in the name formatting directives to put an asterisk after all family names annotated as «student»:
+
+\begin{lstlisting}[style=latex]{}
+ \ifpartannotation{family}{student}
+ {\textsuperscript{*}}
+ {}%
+\end{lstlisting}
+%
+To put the given and family names of name list items annotated as «corresponding» in boldface:
+
+\begin{lstlisting}[style=latex]{}
+\renewcommand*{\mkbibnamegiven}[1]{%
+ \ifitemannotation{corresponding}
+ {\textbf{#1}}
+ {#1}}
+
+\renewcommand*{\mkbibnamefamily}[1]{%
+ \ifitemannotation{corresponding}
+ {\textbf{#1}}
+ {#1}}
+\end{lstlisting}
+
+\subsubsection{Literal Annotations}
+
+If the annotation is a string enclosed in double-quotes, the annotation is a <literal> annotation. In this case the annotation can be retrieved and used as a string rather than as meta-information used to determine formatting. This is useful in order to be able to attached specific annotations to data which are to be printed as-is. For example:
+
+\begin{lstlisting}[style=bibtex]{}
+AUTHOR = {{American Educational Research Association} and {American Psychological Association}
+ and {National Council on Measurement in Education}},
+AUTHOR+an = {1:family="AERA"; 2:family="APA"; 3:family="NCME"}
+}
+\end{lstlisting}
+%
+Such annotations are not keys whose presence can be tested for but are rather literal information attached to the data. The values are retrieved by the following macros
+
+\begin{ltxsyntax}
+
+\cmditem{getfieldannotation}[msform][mslang][entryfield][annotationname]
+
+Retrieves any literal annotation for the field \prm{entryfield} (optionally a multiscript field of \prm{msform}/\prm{mslang}). If \prm{annotationname} is not given, then the annotation named <default> is assumed (this is the name given to annotations defined without an explicit name). If \prm{entryfield} is not given, the current data field as indicated by \cmd{currentfield}, \cmd{currentlist} or \cmd{currentname} (see \secref{aut:bib:fmt}) is assumed. Of course, this is only possible if these commands are defined, that is, inside formatting directives.
+
+\cmditem{getitemannotation}[entryfield][annotationname][item]
+
+Retrieves any literal annotation for the item \prm{item} in the field \prm{entryfield} (optionally a multiscript field of \prm{msform}/\prm{mslang}). If \prm{annotationname} is not given, then the annotation named <default> is assumed (this is the name given to annotations defined without an explicit name). The optional argument \prm{entryfield} can be inferred if not provided as with \cmd{getfieldannotation}. If \prm{item} is not given, the number of the item currently being processed as given by \cnt{listcount} is used.
+
+\cmditem{getpartannotation}[msform][mslang][entryfield][annotationname][item]{part}
+
+Retrieves any literal annotation for the part \prm{part} of the item number \prm{item} in the field \prm{entryfield} (optionally a multiscript field of \prm{msform}/\prm{mslang}). If \prm{annotationname} is not given, then the annotation named <default> is assumed (this is the name given to annotations defined without an explicit name). The two optional arguments \prm{entryfield} and \prm{item} can be inferred as in \cmd{getitemannotation}. The parameter \prm{part} can never be inferred and is therefore a mandatory argument.
+
+Date fields are special and handled in a context where \cmd{currentfield} is not accessible. Thus there is a fourth command to access literal annotations for dates.
+
+\cmditem{getdateannotation}[annotationname]{datetype}
+
+Retrieve a literal annotation for the datefield \prm{datetype}. If \prm{annotationname} is not given, then the annotation named <default> is assumed (this is the name given to annotations defined without an explicit name). The \prm{datetype} argument is mandatory, because it cannot be inferred in most contexts where \cmd{getdateannotation} will be used.
+
+\end{ltxsyntax}
+%
+So, for example, given the bibliography entry above, we could put the following in the preamble:
+
+\begin{ltxexample}[style=latex]
+\renewcommand*{\mkbibnamefamily}[1]{%
+ #1\space\mkbibparens{\getpartannotation{family}}}
+\end{ltxexample}
+%
+In order to get something like this in the bibliography when formatting names:
+
+\begin{lstlisting}[style=bibtex]{}
+ American Educational Research Association (AERA) and
+ American Psychological Association (APA), and
+ National Council on Measurement in Education (NCME)
+}
+\end{lstlisting}
+%
+Naturally there are semantically more elegant ways of dealing with corporate authors without using the <family> namepart (see \secref{aut:bbx:drv}) but this example demonstrates clearly a use for literal annotations.
+
+\subsection{Bibliography Commands}
+\label{use:bib}
+
+\subsubsection{Resources}
+\label{use:bib:res}
+
+\begin{ltxsyntax}
+
+\cmditem{addbibresource}[options]{resource}
+
+Adds a \prm{resource}, such as a \file{.bib} file, to the default resource list. This command is only available in the preamble. It replaces the \cmd{bibliography} legacy command. Note that files must be specified with their full name, including the extension. With \biber, the resource name can be a BSD-style glob pattern. This only makes sense when resources refer to files with an absolute or relative path and does not work when looking for data resources in \biber s input/output directories or with resources located by \prm{kpsewhich} etc. When running on Windows, \biber will switch to a Windows compatible globbing mode where backslashes are also useable as path separators and case does not matter. If the resources contain duplicate entries (that is, duplicate \bibfield{entrykey}s), it is backend dependent what then happens. For example, by default \biber will ignore further occurrence of \bibfield{entrykey}s unless its \opt{--noskipduplicates} options is used. Invoke \cmd{addbibresource} multiple times to add more resources, for example:
+
+\begin{ltxexample}
+\addbibresource{bibfile1.bib}
+\addbibresource{bibfile2.bib}
+\addbibresource[glob]{bibfiles/bibfile*.bib}
+\addbibresource[glob]{bibfile-num?.bib}
+\addbibresource[glob]{bibfile{1,2,3}.bib}
+\addbibresource[location=remote]{https://raw.githubusercontent.com/plk/biblatex/master/bibtex/bib/biblatex/biblatex-examples.bib}
+\addbibresource[location=remote,label=lan]{ftp://192.168.1.57/~user/file.bib}
+\end{ltxexample}
+%
+Since the \prm{resource} string is read in a verbatim-like mode, it may contain arbitrary characters. The only restriction is that any curly braces must be balanced. The following \prm{options} are available:
+
+\begin{optionlist*}
+
+\valitem{bibencoding}{bibencoding}
+
+This option can be used to override the global \opt{bibencoding} option for a particular \prm{resource}.
+
+\valitem{label}{identifier}
+
+Assigns a label to a resource. The \prm{identifier} may be used in place of the full resource name in the optional argument of \env{refsection} (see \secref{use:bib:sec}). The label is a \emph{unique} identifier for the \prm{resource}, so each label should only be used once.
+
+\valitem[local]{location}{location}
+
+The location of the resource. The \prm{location} may be either \texttt{local} for local resources or \texttt{remote} for \acr{URL}s. Remote resources require \biber. The protocols \acr{HTTP/HTTPS} and \acr{FTP} are supported. The remote \acr{URL} must be a fully qualified path to a \file{bib} file or a \acr{URL} which returns a \file{bib} file.
+
+\valitem[file]{type}{type}
+
+The type of resource. Currently, the only supported type is \texttt{file}.
+
+\valitem[bibtex]{datatype}{datatype}
+
+The data type (format) of the resource. The following formats are currently supported:
+
+\begin{valuelist}
+
+\item[bibtex] \bibtex format.
+
+\item[biblatexml] Experimental XML format for \biblatex. See \secref{apx:biblatexml}.
+
+\end{valuelist}
+
+\boolitem{glob}
+
+Whether \biber should glob (expand according to pattern) the datasource name. There is
+a global setting for this in \biber (false by default and settable to true
+using the \opt{--glob-datasources} option). This option allows overriding
+the \biber default on a per-resource basis.
+
+\end{optionlist*}
+
+\cmditem{addglobalbib}[options]{resource}
+
+This command differs from \cmd{addbibresource} in that the \prm{resource} is added to the global resource list. The difference between default resources and global resources is only relevant if there are reference sections in the document and the optional argument of \env{refsection} (\secref{use:bib:sec}) is used to specify alternative resources which replace the default resource list. Any global resources are added to all reference sections.
+
+\cmditem{addsectionbib}[options]{resource}
+
+This command differs from \cmd{addbibresource} in that the resource \prm{options} are registered but the \prm{resource} not added to any resource list. This is only required for resources which 1) are given exclusively in the optional argument of \env{refsection} (\secref{use:bib:sec}) and 2) require options different from the default settings. In this case, \cmd{addsectionbib} is employed to qualify the \prm{resource} prior to using it by setting the appropriate \prm{options} in the preamble. The \opt{label} option may be useful to assign a short name to the resource.
+
+\cmditem{bibliography}{bibfile, \dots}\DeprecatedMark
+
+The legacy command for adding bibliographic resources, supported for backwards compatibility. Like \cmd{addbibresource}, this command is only available in the preamble and adds resources to the default resource list. Its argument is a comma"=separated list of \file{bib} files. The \file{.bib} extension may be omitted from the filename. Invoking this command multiple times to add more files is permissible. This command is deprecated. Please consider using \cmd{addbibresource} instead.
+
+\subsubsection{The Bibliography}
+\label{use:bib:bib}
+
+\cmditem{printbibliography}[key=value, \dots]
+
+This command prints the bibliography. It takes one optional argument, which is a list of options given in \keyval notation. The following options are available:
+
+\end{ltxsyntax}
+
+\begin{optionlist*}
+
+\valitem[bibliography/shorthands]{env}{name}
+
+The <high-level> layout of the bibliography and the list of shorthands is controlled by environments defined with \cmd{defbibenvironment}. This option selects an environment. The \prm{name} corresponds to the identifier used when defining the environment with \cmd{defbibenvironment}. By default, the \cmd{printbibliography} command uses the identifier \texttt{bibliography}; \cmd{printbiblist} uses \texttt{shorthands}. See also \secref{use:bib:biblist,use:bib:hdg}.
+
+\valitem[bibliography/shorthands]{heading}{name}
+
+The bibliography and the list of shorthands typically have a chapter or section heading. This option selects the heading \prm{name}, as defined with \cmd{defbibheading}. By default, the \cmd{printbibliography} command uses the heading \texttt{bibliography}; \cmd{printbiblist} uses \texttt{shorthands}. See also \secref{use:bib:biblist,use:bib:hdg}.
+
+\valitem{title}{text}
+
+This option overrides the default title provided by the heading selected with the \opt{heading} option, if supported by the heading definition. See \secref{use:bib:hdg} for details.
+
+\valitem{label}{label}
+
+If \prm{label} is nonempty, issue \texttt{\textbackslash label\{\prm{label}\}} after typesetting the heading. No sanity checking is done whether or not it is useful to set a label after the heading (\eg if the heading is not numbered a \texttt{\textbackslash ref} to the label might not result in useful output).
+
+\optitem[\normalfont\emph{global setting} (\opt{none})]{block}{\opt{none}, \opt{space}, \opt{par}, \opt{nbpar}, \opt{ragged}}
+
+This option overrides the global \opt{block} option (see \secref{use:opt:pre:gen}, the meaning of the settings is explained there as well).
+
+\valitem{prenote}{name}
+
+The prenote is an arbitrary piece of text to be printed after the heading but before the list of references. This option selects the prenote \prm{name}, as defined with \cmd{defbibnote}. By default, no prenote is printed. The note is printed in the standard text font. It is not affected by \cmd{bibsetup} and \cmd{bibfont} but it may contain its own font declarations. See \secref{use:bib:nts} for details.
+
+\valitem{postnote}{name}
+
+The postnote is an arbitrary piece of text to be printed after the list of references. This option selects the postnote \prm{name}, as defined with \cmd{defbibnote}. By default, no postnote is printed. The note is printed in the standard text font. It is not affected by \cmd{bibsetup} and \cmd{bibfont} but it may contain its own font declarations. See \secref{use:bib:nts} for details.
+
+\intitem[\normalfont\em current section]{section}
+
+Print only entries cited in reference section \prm{integer}. The reference sections are numbered starting at~1. All citations given outside a \env{refsection} environment are assigned to section~0. See \secref{use:bib:sec} for details and \secref{use:use:mlt} for usage examples.
+
+\intitem{segment}
+
+Print only entries cited in reference segment \prm{integer}. The reference segments are numbered starting at~1. All citations given outside a \env{refsegment} environment are assigned to segment~0. See \secref{use:bib:seg} for details and \secref{use:use:mlt} for usage examples. Remember that segments within a section are numbered local to the section so the segment you request will be the nth segment in the requested (or currently active enclosing) section.
+
+\valitem{type}{entrytype}
+
+Print only entries whose entry type is \prm{entrytype}.
+
+\valitem{nottype}{entrytype}
+
+Print only entries whose entry type is not \prm{entrytype}. This option may be used multiple times.
+
+\valitem{subtype}{subtype}
+
+Print only entries whose \bibfield{entrysubtype} is defined and \prm{subtype}.
+
+\valitem{notsubtype}{subtype}
+
+Print only entries whose \bibfield{entrysubtype} is undefined or not \prm{subtype}. This option may be used multiple times.
+
+\valitem{keyword}{keyword}
+
+Print only entries whose \bibfield{keywords} field includes \prm{keyword}. This option may be used multiple times.
+
+\valitem{notkeyword}{keyword}
+
+Print only entries whose \bibfield{keywords} field does not include \prm{keyword}. This option may be used multiple times.
+
+\valitem{category}{category}
+
+Print only entries assigned to category \prm{category}. This option may be used multiple times.
+
+\valitem{notcategory}{category}
+
+Print only entries not assigned to category \prm{category}. This option may be used multiple times.
+
+\valitem{filter}{name}
+
+Filter the entries with filter \prm{name}, as defined with \cmd{defbibfilter}. See \secref{use:bib:flt} for details.
+
+\valitem{check}{name}
+
+Filter the entries with check \prm{name}, as defined with \cmd{defbibcheck}. See \secref{use:bib:flt} for details.
+
+\valitem{resetnumbers}{true,false,number}
+
+This option applies to numerical citation\slash bibliography styles only and requires that the \opt{defernumbers} option from \secref{use:opt:pre:gen} be enabled globally. If enabled, it will reset the numerical labels assigned to the entries in the respective bibliography, \ie the numbering will restart at~1. You can also pass a number to this option, for example: \texttt{resetnumbers=10} to reset numbering to the specified number to aid numbering continuity across documents. Use this option with care as \biblatex can not guarantee unique labels globally if they are reset manually.
+
+\boolitem{omitnumbers}
+
+This option applies to numerical citation\slash bibliography styles only and requires that the \opt{defernumbers} option from \secref{use:opt:pre:gen} be enabled globally. If enabled, \biblatex will not assign a numerical label to the entries in the respective bibliography. This is useful when mixing a numerical subbibliography with one or more subbibliographies using a different scheme (\eg author-title or author-year).
+
+\boolitem[false]{locallabelwidth}
+
+Calculate \cmd{labelnumberwidth}, \cmd{labelalphawidth} and similar lengths locally for the present bibliography and not globally for all entries. See also \opt{labelnumberwidth} in \secref{use:opt:pre:gen}.
+
+\end{optionlist*}
+
+\begin{ltxsyntax}
+
+\cmditem{bibbysection}[key=value, \dots]
+
+This command automatically loops over all reference sections. This is equivalent to giving one \cmd{printbibliography} command for every section but has the additional benefit of automatically skipping sections without references. Note that \cmd{bibbysection} starts looking for references in section \texttt{1}. It will ignore references given outside of \env{refsection} environments since they are assigned to section~0. See \secref{use:use:mlt} for usage examples. The options are a subset of those supported by \cmd{printbibliography}. Valid options are \opt{env}, \opt{heading}, \opt{prenote}, \opt{postnote}. The current bibliography context sorting template is used for all sections (see \secref{use:bib:context}).
+
+\cmditem{bibbysegment}[key=value, \dots]
+
+This command automatically loops over all reference segments. This is equivalent to giving one \cmd{printbibliography} command for every segment in the current \env{refsection} but has the additional benefit of automatically skipping segments without references. Note that \cmd{bibbysegment} starts looking for references in segment \texttt{1}. It will ignore references given outside of \env{refsegment} environments since they are assigned to segment~0. See \secref{use:use:mlt} for usage examples. The options are a subset of those supported by \cmd{printbibliography}. Valid options are \opt{env}, \opt{heading}, \opt{prenote}, \opt{postnote}. The current bibliography context sorting template is used for all segments (see \secref{use:bib:context}).
+
+\cmditem{bibbycategory}[key=value, \dots]
+
+This command loops over all bibliography categories. This is equivalent to giving one \cmd{printbibliography} command for every category but has the additional benefit of automatically skipping empty categories. The categories are processed in the order in which they were declared. See \secref{use:use:mlt} for usage examples. The options are a subset of those supported by \cmd{printbibliography}. Valid options are \opt{env}, \opt{prenote}, \opt{postnote}, \opt{section}. Note that \opt{heading} is not available with this command. The name of the current category is automatically used as the heading name. This is equivalent to passing \texttt{heading=\prm{category}} to \cmd{printbibliography} and implies that there must be a matching heading definition for every category. The current bibliography context sorting template is used for all categories (see \secref{use:bib:context}).
+
+\cmditem{printbibheading}[key=value, \dots]
+
+This command prints a bibliography heading defined with \cmd{defbibheading}. It takes one optional argument, which is a list of options given in \keyval notation. The options are a small subset of those supported by \cmd{printbibliography}. Valid options are \opt{heading}, \opt{title} and \opt{label}. By default, this command uses the heading \texttt{bibliography}. See \secref{use:bib:hdg} for details. Also see \secref{use:use:mlt,use:use:div} for usage examples.
+
+\cmditem{DeclarePrintbibliographyDefaults}{key=value, \dots}
+
+This command can be used to globally set defaults for some options to \cmd{printbibliography}, the \cmd{bibby...} bibliography commands and \cmd{printbibheading}.
+The supported keys are
+\begin{itemize}
+ \item \opt{env}
+ \item \opt{heading}
+ \item \opt{title}
+ \item \opt{prenote}
+ \item \opt{postnote}
+ \item \opt{filter}
+\end{itemize}
+
+\end{ltxsyntax}
+%
+To print a bibliography with a different sorting template than the global sorting template, use the bibliography context switching commands from \secref{use:bib:context}.
+
+\subsubsection{Bibliography Lists}
+\label{use:bib:biblist}
+
+\biblatex can, in addition to printing normal bibliographies, also print arbitrary lists of information derived from the bibliography data such as a list of shorthand abbreviations for particular entries or a list of abbreviations of journal titles.
+
+A bibliography list differs from a normal bibliography in that the same bibliography driver is used to print all entries rather than a specific driver being used for each entry depending on the entry type.
+
+\begin{ltxsyntax}
+
+\cmditem{printbiblist}[key=value, \dots]{biblistname}
+
+This command prints a bibliography list. It takes an optional argument, which is a list of options given in \keyval notation. Valid options are all options supported by \cmd{printbibliography} (\secref{use:bib:bib}) except \opt{resetnumbers} and \opt{omitnumbers}. Additionaly, the two options \opt{driver} and \opt{biblistfilter} are available. If there are any \env{refsection} environments in the document, the bibliography list will be local to these environments; see \secref{use:bib:sec} for details. By default, this command uses the heading \texttt{biblist}. See \secref{use:bib:hdg} for details.
+
+
+The \prm{biblistname} is a mandatory argument which names the bibliography list. This name is used to identify:
+\begin{itemize}
+\item The default bibliography driver used to print the list entries
+\item A default bibliography list filter declared with \cmd{DeclareBiblistFilter} (see \secref{aut:ctm:bibfilt}) used to filter the entries returned from \biber
+\item A default check declared with \cmd{defbibcheck} (see \secref{use:bib:flt}) used to post-process the list entries
+\item The default bib environment to use
+\item The default sorting template to use
+\end{itemize}
+
+The two additional options can be used to change some of the defaults set by the mandatory argument.
+
+\begin{optionlist*}
+\valitem[\prm{biblistname}]{driver}{driver}
+
+Change the bibliography driver used to print the list entries.
+% \prm{driver} must be a valid driver declared with \cmd{DeclareBibliographyDriver} (see \secref{aut:bbx:bbx}).
+
+\valitem[\prm{biblistname}]{biblistfilter}{biblistfilter}
+
+Change the bibliography list filter used to filter the entries. \prm{biblistfilter} must be a valid bibliography list filter defined with \cmd{DeclareBiblistFilter} (see \secref{aut:ctm:bibfilt}).
+\end{optionlist*}
+
+In terms of sorting the list, the default is to sort using the sorting template named after the bibliography list (if it exists) and only then to fall back to the current context sorting template if this is not defined (see \secref{use:bib:context}).
+
+The most common bibliography list is a list of shorthand abbreviations for certain entries and so this has a convenience alias \cmd{printshorthands[\dots]} for backwards compatibility which is defined as:
+
+\begin{ltxexample}
+\printbiblist[...]{shorthand}
+\end{ltxexample}
+
+\biblatex provides automatic support for data source fields in the default data model marked as <Label fields> (See \secref{bib:fld:dat}). Such fields automatically have defined for them:
+
+\begin{itemize}
+\item A default bib environment (See \secref{use:bib:hdg})
+\item A bibliography list filter (See \secref{aut:ctm:bibfilt})
+\item Some supporting formats and lengths (See \secref{aut:fmt:ilc} and \secref{aut:fmt:ich})
+\end{itemize}
+%
+Therefore only a minimal setup is required to print bibliography lists with such fields. For example, to print a list of journal title abbreviations, you can minimally put this in your preamble:
+
+\begin{ltxexample}
+\DeclareBibliographyDriver{shortjournal}{%
+ \printfield{journaltitle}}
+\end{ltxexample}
+%
+Then you can put this in your document where you want to print the list:
+
+\begin{ltxexample}
+\printbiblist[title={Journal Shorthands}]{shortjournal}
+\end{ltxexample}
+%
+Since \bibfield{shortjournal} is defined in the default data model as a <Label field>, this example:
+\begin{itemize}
+\item Uses the automatically created <shortjournal> bib environment
+\item Uses the automatically created <shortjournal> bibliography list filter to return only entries with a \bibfield{shortjournal} field in the \file{.bbl}
+\item Uses the defined <shortjournal> bibliography driver to print the entries
+\item Uses the default <biblist> heading but overrides the title with <Journal Shorthands>
+\item Uses the current bibliography context sorting template if no template exists with the name \bibfield{shortjournal}
+\end{itemize}
+%
+Often, you will want to sort on the label field of the list and since a sorting template is automatically picked up if it is named after the list, in this case you could simply do:
+
+\begin{ltxexample}
+\DeclareSortingTemplate{shortjournal}{
+ \sort{
+ \field{shortjournal}
+ }
+}
+\end{ltxexample}
+
+Naturally all defaults can be overridden by options to \cmd{printbiblist} and definitions of the environments, filters etc. and in this way arbitrary types of bibliography lists can be printed containing a variety of information from the bibliography data.
+\end{ltxsyntax}
+
+Bibliography lists are often used to print lists of various kinds of shorthands and this can result in duplicate entries if more than one bibliography entry has the same shorthand. For example, several journal articles in the same journal would result in duplicate entries in a list of journal shorthands. You can use the fact that such lists automatically pick up a \cmd{bibcheck} with the same name as the list to define a check to remove duplicates. If you are defining a list to print all of the journal shorthands using the \bibfield{shortjournal} field, you could define a \cmd{bibcheck} like this:
+
+\begin{ltxexample}[basicstyle=\displayverbfont\footnotesize]
+\defbibcheck{shortjournal}{%
+ \iffieldundef{shortjournal}
+ {\skipentry}
+ {\iffieldundef{journaltitle}
+ {\skipentry}
+ {\ifcsdef{sjcheck@\therefsection
+ -\strfield{shortjournal}=\strfield{journaltitle}}
+ {\skipentry}
+ {\savefieldcs{journaltitle}{sjcheck@\therefsection
+ -\strfield{shortjournal}=\strfield{journaltitle}}}}}}
+\end{ltxexample}
+
+\subsubsection{Bibliography Sections}
+\label{use:bib:sec}
+
+The \env{refsection} environment is used in the document body to mark a reference section. This environment is useful if you want separate, independent bibliographies and bibliography lists in each chapter, section, or any other part of a document. Within a reference section, all cited works are assigned labels which are local to the environment. Technically, reference sections are completely independent from document divisions such as \cmd{chapter} and \cmd{section} even though they will most likely be used per chapter or section. See the \opt{refsection} package option in \secref{use:opt:pre:gen} for a way to automate this. Also see \secref{use:use:mlt} for usage examples.
+
+\begin{ltxsyntax}
+
+\envitem{refsection}[resource, \dots]
+
+The optional argument is a comma"=separated list of resources specific to the reference section. If the argument is omitted, the reference section will use the default resource list, as specified with \cmd{addbibresource} in the preamble. If the argument is provided, it replaces the default resource list. Global resources specified with \cmd{addglobalbib} are always considered. \env{refsection} environments may not be nested, but you may use \env{refsegment} environments within a \env{refsection} to subdivide it into segments. Use the \opt{section} option of \cmd{printbibliography} to select a section when printing the bibliography, and the corresponding option of \cmd{printbiblist} when printing bibliography lists. Bibliography sections are numbered starting at~\texttt{1}. The number of the current section is also written to the transcript file. All citations given outside a \env{refsection} environment are assigned to section~0. If \cmd{printbibliography} is used within a \env{refsection}, it will automatically select the current section. The \opt{section} option is not required in this case. This also applies to \cmd{printbiblist}. Beginning a new reference section automatically ends the active reference context (see \secref{use:bib:context}).
+
+\cmditem{newrefsection}[resource, \dots]
+
+This command is similar to the \env{refsection} environment except that it is a stand"=alone command rather than an environment. It automatically ends the previous reference section (if any) and immediately starts a new one. Note that the reference section started by the last \cmd{newrefsection} command in the document will extend to the very end of the document. Use \cmd{endrefsection} if you want to terminate it earlier.
+
+\end{ltxsyntax}
+
+\subsubsection{Bibliography Segments}
+\label{use:bib:seg}
+
+The \env{refsegment} environment is used in the document body to mark a reference segment. This environment is useful if you want one global bibliography which is subdivided by chapter, section, or any other part of the document. Technically, reference segments are completely independent from document divisions such as \cmd{chapter} and \cmd{section} even though they will typically be used per chapter or section. See the \opt{refsegment} package option in \secref{use:opt:pre:gen} for a way to automate this. Also see \secref{use:use:mlt} for usage examples.
+
+\begin{ltxsyntax}
+
+\envitem{refsegment}
+
+The difference between a \env{refsection} and a \env{refsegment} environment is that the former creates labels which are local to the environment whereas the latter provides a target for the \opt{segment} filter of \cmd{printbibliography} without affecting the labels. They will be unique across the entire document. \env{refsegment} environments may not be nested, but you may use them in conjunction with \env{refsection} to subdivide a reference section into segments. In this case, the segments are local to the enclosing \env{refsection} environment. Use the \env{segment} option of \cmd{printbibliography} to select a segment when printing the bibliography. Within a section, the reference segments are numbered starting at~\texttt{1} and the number of the current segment will be written to the transcript file. All citations given outside a \env{refsegment} environment are assigned to segment~0. In contrast to the \env{refsection} environment, the current segment is not selected automatically if \cmd{printbibliography} is used within a \env{refsegment} environment.
+
+\csitem{newrefsegment}
+
+This command is similar to the \env{refsegment} environment except that it is a stand"=alone command rather than an environment. It automatically ends the previous reference segment (if any) and immediately starts a new one. Note that the reference segment started by the last \cmd{newrefsegment} command will extend to the end of the document. Use \cmd{endrefsegment} if you want to terminate it earlier.
+
+\end{ltxsyntax}
+
+\subsubsection{Bibliography Categories}
+\label{use:bib:cat}
+
+Bibliography categories allow you to split the bibliography into multiple parts dedicated to different topics or different types of references, for example primary and secondary sources. See \secref{use:use:div} for usage examples.
+
+\begin{ltxsyntax}
+
+\cmditem{DeclareBibliographyCategory}{category}
+
+Declares a new \prm{category}, to be used in conjunction with \cmd{addtocategory} and the
+\opt{category} and \opt{notcategory} filters of \cmd{printbibliography}. This command is used in the document preamble.
+
+\cmditem{addtocategory}{category}{key}
+
+Assigns a \prm{key} to a \prm{category}, to be used in conjunction with the \opt{category} and \opt{notcategory} filters of \cmd{printbibliography}. This command may be used in the preamble and in the document body. The \prm{key} may be a single entry key or a comma"=separated list of keys. The assignment is global.
+
+\end{ltxsyntax}
+
+\subsubsection{Bibliography Headings and Environments}
+\label{use:bib:hdg}
+
+\begin{ltxsyntax}
+
+\cmditem{defbibenvironment}{name}{begin code}{end code}{item code}
+
+This command defines bibliography environments. The \prm{name} is an identifier passed to the \opt{env} option of \cmd{printbibliography} and \cmd{printbiblist} when selecting the environment. The \prm{begin code} is \latex code to be executed at the beginning of the environment; the \prm{end code} is executed at the end of the environment; the \prm{item code} is code to be executed at the beginning of each entry in the bibliography or a bibliography list. Here is an example of a definition based on the standard \latex \env{list} environment:
+
+\begin{ltxexample}
+\defbibenvironment{bibliography}
+ {\list{}
+ {\setlength{\leftmargin}{\bibhang}%
+ \setlength{\itemindent}{-\leftmargin}%
+ \setlength{\itemsep}{\bibitemsep}%
+ \setlength{\parsep}{\bibparsep}}}
+ {\endlist}
+ {\item}
+\end{ltxexample}
+%
+As seen in the above example, usage of \cmd{defbibenvironment} is roughly similar to \cmd{newenvironment} except that there is an additional mandatory argument for the \prm{item code}.
+
+\cmditem{defbibheading}{name}[title]{code}
+
+This command defines bibliography headings. The \prm{name} is an identifier to be passed to the \opt{heading} option of \cmd{printbibliography} or \cmd{printbibheading} and \cmd{printbiblist} when selecting the heading. The \prm{code} should be \latex code generating a fully"=fledged heading, including page headers and an entry in the table of contents, if desired. If \cmd{printbibliography} or \cmd{printbiblist} are invoked with a \opt{title} option, the title will be passed to the heading definition as |#1|. If not, the default title specified by the optional \prm{title} argument is passed as |#1| instead. The \prm{title} argument will typically be \cmd{bibname}, \cmd{refname}, or \cmd{biblistname} (see \secref{aut:lng:key:bhd}). This command is often needed after changes to document headers in the preamble. Here is an example of a simple heading definition:
+
+\begin{ltxexample}
+\defbibheading{bibliography}[\bibname]{%
+ \chapter*{#1}%
+ \markboth{#1}{#1}}
+\end{ltxexample}
+
+\end{ltxsyntax}
+
+The following headings, which are intended for use with \cmd{printbibliography} and \cmd{printbibheading}, are predefined:
+
+\begin{valuelist*}
+
+\item[bibliography]
+This is the default heading used by \cmd{printbibliography} if the \opt{heading} option is not given. Its default definition depends on the document class. If the class provides a \cmd{chapter} command, the heading is similar to the bibliography heading of the standard \latex \texttt{book} class, \ie it uses \cmd{chapter*} to create an unnumbered chapter heading which is not included in the table of contents. If there is no \cmd{chapter} command, it is similar to the bibliography heading of the standard \latex \texttt{article} class, \ie it uses \cmd{section*} to create an unnumbered section heading which is not included in the table of contents. The string used in the heading also depends on the document class. With \texttt{book}-like classes the localisation string \texttt{bibliography} is used, with other classes it is \texttt{references} (see \secref{aut:lng:key}). See also \secref{use:cav:scr, use:cav:mem} for class-specific hints.
+
+\item[subbibliography]
+Similar to \texttt{bibliography} but one sectioning level lower. This heading definition uses \cmd{section*} instead of \cmd{chapter*} with a \texttt{book}-like class and \cmd{subsection*} instead of \cmd{section*} otherwise.
+
+\item[bibintoc]
+Similar to \texttt{bibliography} above but adds an entry to the table of contents.
+
+\item[subbibintoc]
+Similar to \texttt{subbibliography} above but adds an entry to the table of contents.
+
+\item[bibnumbered]
+Similar to \texttt{bibliography} above but uses \cmd{chapter} or \cmd{section} to create a numbered heading which is also added to the table of contents.
+
+\item[subbibnumbered]
+Similar to \texttt{subbibliography} above but uses \cmd{section} or \cmd{subsection} to create a numbered heading which is also added to the table of contents.
+
+\item[none]
+A blank heading definition. Use this to suppress the heading.
+
+\end{valuelist*}
+
+The following headings intended for use with \cmd{printbiblist} are predefined:
+
+\begin{valuelist*}
+
+\item[biblist]
+This is the default heading used by \cmd{printbiblist} if the \opt{heading} option is not given. It is similar to \texttt{bibliography} above except that it uses the localisation string \texttt{shorthands} instead of \texttt{bibliography} or \texttt{references} (see \secref{aut:lng:key}). See also \secref{use:cav:scr, use:cav:mem} for class-specific hints.
+
+\item[biblistintoc]
+Similar to \texttt{biblist} above but adds an entry to the table of contents.
+
+\item[biblistnumbered]
+Similar to \texttt{biblist} above but uses \cmd{chapter} or \cmd{section} to create a numbered heading which is also added to the table of contents.
+
+\end{valuelist*}
+
+\subsubsection{Bibliography Notes}
+\label{use:bib:nts}
+
+\begin{ltxsyntax}
+
+\cmditem{defbibnote}{name}{text}
+
+Defines the bibliography note \prm{name}, to be used via the \opt{prenote} and \opt{postnote} options of \cmd{printbibliography} and \cmd{printbiblist}. The \prm{text} may be any arbitrary piece of text, possibly spanning several paragraphs and containing font declarations. Also see \secref{use:cav:act}.
+
+\end{ltxsyntax}
+
+\subsubsection{Bibliography Filters and Checks}
+\label{use:bib:flt}
+
+\begin{ltxsyntax}
+
+\cmditem{defbibfilter}{name}{expression}
+
+Defines the custom bibliography filter \prm{name}, to be used via the \opt{filter} option of \cmd{printbibliography}. The \prm{expression} is a complex test based on the logical operators \texttt{and}, \texttt{or}, \texttt{not}, the group separator \texttt{(...)}, and the following atomic tests:
+
+\end{ltxsyntax}
+
+\begin{optionlist*}
+
+\valitem{segment}{integer}
+
+Matches all entries cited in reference segment \prm{integer}.
+
+\valitem{type}{entrytype}
+
+Matches all entries whose entry type is \prm{entrytype}.
+
+\valitem{subtype}{subtype}
+
+Matches all entries whose \bibfield{entrysubtype} is \prm{subtype}.
+
+\valitem{keyword}{keyword}
+
+Matches all entries whose \bibfield{keywords} field includes \prm{keyword}. If the \prm{keyword} contains spaces, it needs to be wrapped in braces.
+
+\valitem{category}{category}
+
+Matches all entries assigned to \prm{category} with \cmd{addtocategory}.
+
+\end{optionlist*}
+
+Here is an example of a filter expression:
+
+\begin{ltxexample}[style=latex,keywords={and,or,not,type,keyword}]
+\defbibfilter{example}{%
+ ( type=book or type=inbook )
+ and keyword=abc
+ and not keyword={x y z}
+}
+\end{ltxexample}
+%
+This filter will match all entries whose entry type is either \bibtype{book} or \bibtype{inbook} and whose \bibfield{keywords} field includes the keyword <\texttt{abc}> but not <\texttt{x y z}>. As seen in the above example, all elements are separated by whitespace (spaces, tabs, or line endings). There is no spacing around the equal sign. The logical operators are evaluated with the \cmd{ifboolexpr} command from the \sty{etoolbox} package. See the \sty{etoolbox} manual for details about the syntax. The syntax of the \cmd{ifthenelse} command from the \sty{ifthen} package, which has been employed in older versions of \biblatex, is still supported. This is the same test using \sty{ifthen}-like syntax:
+
+\begin{ltxexample}[style=ifthen,morekeywords={\\type,\\keyword}]
+\defbibfilter{example}{%
+ \( \type{book} \or \type{inbook} \)
+ \and \keyword{abc}
+ \and \not \keyword{x y z}
+}
+\end{ltxexample}
+%
+Note that custom filters are local to the reference section in which they are used. Use the \texttt{section} filter of \cmd{printbibliography} to select a different section. This is not possible from within a custom filter.
+
+\begin{ltxsyntax}
+
+\cmditem{defbibcheck}{name}{code}
+
+Defines the custom bibliography filter \prm{name}, to be used via the \opt{check} option of \cmd{printbibliography}. \cmd{defbibcheck} is similar in concept to \cmd{defbibfilter} but much more low-level. Rather than a high-level expression, the \prm{code} is \latex code, much like the code used in driver definitions, which may perform arbitrary tests to decide whether or not a given entry is to be printed. The bibliographic data of the respective entry is available when the \prm{code} is executed. Issuing the command \cmd{skipentry} in the \prm{code} will cause the current entry to be skipped. For example, the following filter will only output entries with an \bibfield{abstract} field:
+
+\begin{ltxexample}
+\defbibcheck{<<abstract>>}{%
+ \iffieldundef{abstract}{<<\skipentry>>}{}}
+...
+\printbibliography[<<check=abstract>>]
+\end{ltxexample}
+%
+The following check will exclude all entries published before the year 2000:
+
+\begin{ltxexample}
+\defbibcheck{recent}{%
+ \iffieldint{year}
+ {\ifnumless{\thefield{year}}{2000}
+ {\skipentry}
+ {}}
+ {\skipentry}}
+\end{ltxexample}
+%
+See the author guide, in particular \secref{aut:aux:tst,aut:aux:ife}, for further details.
+
+\end{ltxsyntax}
+
+\subsubsection{Reference Contexts}
+\label{use:bib:context}
+
+References in a bibliography are cited and printed in a <context>. The context determines the data which is actually used to cite or provide bibliographic data for an entry. A context consists of the following information:
+
+\begin{itemize}
+ \item A sorting template
+ \item A template for constructing the sorting keys for names
+ \item A string prefix for citation schemes which use alphabetic or numeric labels
+ \item A template for calculating name uniqueness information
+ \item A template for constructing alphabetic labels for names
+ \item A multiscript default <form>
+ \item A multiscript default <language>
+\end{itemize}
+%
+The purpose of bibliography contexts is twofold. Firstly, they are used to set options which influence a printed bibliography and secondly to influence the data printed by citation commands.
+The former use is the most common when one needs to print more than one bibliography list with different, for example, sorting.
+
+\begin{ltxexample}
+\usepackage[sorting=nyt]{biblatex}
+\begin{document}
+\cite{one}
+\cite{two}
+\printbibliography
+\newrefcontext[sorting=ydnt]
+\printbibliography
+\end{ltxexample}
+%
+Here we print two bibliographies, one with the default <nyt> sorting template and one with the <ydnt> sorting template.
+
+To demonstrate the second type of use of bibliography contexts, we have to understand that the actual data for an entry can vary depending on the context. This is most obvious in the case of the \bibfield{extra*} fields like \bibfield{extradate} which are generated by the backend according to the order of entries \emph{after} sorting so that they come out in the expected <a, b, c> order. This clearly shows that the \emph{data} in an entry can be different between sorting templates. If a document contains more than one bibliography list with different sorting templates, it can happen then that the \file{.bbl} contains sorting lists with the same entry but containing different data (a different value for \bibfield{extradate}, for example). The purpose of bibliography contexts is to encapsulate things inside a context so that \biblatex can use the correct entry data. An example is printing a bibliography list with a different sorting order to the global sorting order where the \opt{extra*} fields are different for the same entry between sorting lists:
+
+\begin{ltxexample}
+\usepackage[sorting=nyt,style=authoryear]{biblatex}
+\DeclareSortingTemplate{yntd}{
+ \sort{
+ \field[strside=left,strwidth=4]{sortyear}
+ \field[strside=left,strwidth=4]{year}
+ \literal{9999}
+ }
+ \sort{
+ \field{sortname}
+ \field{author}
+ \field{editor}
+ }
+ \sort[direction=descending]{
+ \field{sorttitle}
+ \field{title}
+ }
+}
+\begin{document}
+\cite{one}
+\cite{two}
+\printbibliography
+\newrefcontext[sorting=yntd]
+\cite{one}
+\cite{two}
+\printbibliography
+\end{ltxexample}
+%
+Here, the second use of the citations, along with the \cmd{printbibliography} command will use data from the context of the custom <yntd> sorting template which may well be different from the data associated with the default <nyt> template. That is, the citation labels (in an authoryear style which uses \opt{extradate}) may be different \emph{for the exact same entries} between different bibliography contexts and so the citations themselves may look different.
+
+Reference contexts can be declared with \cmd{DeclareRefcontext} and referred to by name, see below.
+
+By default, data for a citation is drawn from the reference context of the last bibliography in which it was printed. For example:
+
+\begin{ltxexample}[style=latex]
+\DeclareRefcontext{ap}{labelprefix=A}
+\begin{document}
+
+\cite{book, article, misc}
+
+\printbibliography[type=book]
+
+\newrefcontext{ap}
+\printbibliography[type=article]
+
+\newrefcontext[sorting=ydnt]
+\printbibliography[type=misc]
+
+\end{document}
+\end{ltxexample}
+%
+This example also shows the declaration and use of a named reference context. Assuming the entrykeys are indicative of their entrytypes, this is the default situation for the citations which corresponds to what users normally expect:
+
+\begin{itemize}
+\item The citation of entry \bibfield{book} would draw its data from the global reference context, because the last bibliography in which it was printed was the one in the global reference context.
+\item The citation of entry \bibfield{article} would draw its data from reference context with \opt{labelprefix=A} and would therefore have a <A> prefix when cited.
+\item The citation of entry \bibfield{misc} would draw its data from the reference context with \opt{sorting=ydnt}
+\end{itemize}
+%
+In cases where the user has entries which occur in multiple bibliographies in different forms or with potentially different labels (in a numeric scheme with different \bibfield{labelprefix} values for example), it may be necessary to tell \biblatex from which reference context you wish to draw the citation information. As shown above this can be done by explicitly putting citations inside reference contexts. This can be onerous in a large document and so there is specific functionality for assigning citations to reference contexts programatically, see the \cmd{assignrefcontext*} macros below.
+
+\begin{ltxsyntax}
+
+\cmditem{DeclareRefcontext}{name}{key=value, \dots}
+
+Declares a named reference context with name \prm{name}. The \prm{key=value} options define the context attributes. All context attributes are optional and default to the global settings if absent. The valid options are:
+
+\begin{optionlist*}
+
+\valitem[default]{msform}{form}
+
+The default multiscript field alternate <form>. Must be one of the forms declared in <multiscriptforms> constant. This controls the default <form> for multiscript aware macros and citations within the scope of the refcontext. See \ref{use:multiscript}.
+
+\valitem[en-us]{mslang}{bcp47tag}
+
+The default multiscript field alternate <language> as a BCP47 tag. This controls the default <language> for multiscript aware macros and citations within the scope of the refcontext. See \ref{use:multiscript}.
+
+\valitem{sorting}{name}
+
+Specify a sorting template defined previously with \cmd{DeclareSortingTemplate}. This template is used to determine which data to retrieve and/or print for an entry in the commands inside the context.
+
+\valitem{sortingnamekeytemplatename}{name}
+
+Specify a sorting name key template defined previously with \cmd{DeclareSortingNamekeyTemplate}. This template is used to construct sorting keys for names inside the context. The template name can also be specified (in increasing order of preference) per"=entry, per"=name list and per"=name. See \secref{apx:opt} for information on setting per"=option, per"=namelist and per"=name options.
+
+\valitem{uniquenametemplatename}{name}
+
+Specify a uniquename template defined previously with \cmd{DeclareUniquenameTemplate} (see \secref{aut:cav:amb}). This template is used to calculate uniqueness information for names inside the context. The template name can also be specified (in increasing order of preference) per"=entry, per"=name list and per"=name. See \secref{apx:opt} for information on setting per"=option, per"=namelist and per"=name options.
+
+\valitem{labelalphanametemplatename}{name}
+
+Specify a template defined previously with \cmd{DeclareLabelalphaNameTemplate} (see \secref{aut:ctm:lab}). This template is used to construct name parts of alphabetic labels for names inside the context. The template name can also be specified (in increasing order of preference) per"=entry, per"=name list and per"=name. See \secref{apx:opt} for information on setting per"=option, per"=namelist and per"=name options.
+
+\valitem{nametemplates}{name}
+
+A convenience meta-option which sets \opt{sortingnamekeytemplate}, \opt{uniquenametemplate} and \opt{labelalphanametemplate} to the same template name. This option can also be specified (in increasing order of preference) per"=entry, per"=name list and per"=name. See \secref{apx:opt} for information on setting per"=option, per"=namelist and per"=name options.
+
+\valitem{labelprefix}{string}
+
+This option applies to numerical citation\slash bibliography styles only and requires that the \opt{defernumbers} option from \secref{use:opt:pre:gen} be enabled globally. Setting this option will implicitly enable \opt{resetnumbers} for the any \cmd{printbibliography} in the scope of the context (unless overridden by a user-specified value for \opt{resetnumbers}). The option assigns the \prm{string} as a prefix to all entries in the reference context. For example, if the \prm{string} is \texttt{A}, the numerical labels printed will be \texttt{[A1]}, \texttt{[A2]}, \texttt{[A3]}, etc. This is useful for subdivided numerical bibliographies where each subbibliography uses a different prefix. The \prm{string} is available to styles in the \bibfield{labelprefix} field of all affected entries. Note that the \prm{string} is fully expanded, which means that you can use context-dependent macros like \cmd{thechapter}, but not unexpandable commands such as \cmd{dag}. If you need to pass unexpandable code to \prm{string}, protect it from expansion with \cmd{detokenize}. See \secref{aut:bbx:fld:lab} for details.
+
+\end{optionlist*}
+%
+
+\envitem{refcontext}[key=value, \dots]{name}
+
+Wraps a reference context environment. The possible \prm{key=value} optional arguments are as for \cmd{DeclareRefcontext} and override options given for the named reference context \prm{name}. \prm{name} can also be omitted as \verb+{}+ or by omitting even the empty braces\footnote{This slightly odd syntax possibility is a result of backwards compatibility with \biblatex $<$3.5}.
+
+The \opt{refcontext} environment cannot be nested and \biblatex will generate an error if you try to do so.
+
+\cmditem{newrefcontext}[key=value, \dots]{name}
+
+This command is similar to the \env{refcontext} environment except that it is a stand"=alone command rather than an environment. It automatically ends any previous reference context section begun with \cmd{newrefcontext} (if any) and immediately starts a new one. Note that the context section started by the last \cmd{newrefcontext} command in the document will extend to the very end of the document. Use \cmd{endrefcontext} if you want to terminate it earlier.
+
+\cmditem{localrefcontext}[key=value, \dots]{name}
+
+This command is similar to the \env{newrefcontext} command except that it sets up the reference context only locally.
+This is useful if the reference context needs to be changed within a group. There is no need to end a local reference context, it will automatically be reset once the group ends.
+\end{ltxsyntax}
+%
+At the beginning of the document, there is always a global context containing global settings for each of the reference context options. Here is an example summarising the reference contexts with various settings:
+
+\begin{ltxexample}[style=latex]
+\usepackage[sorting=nty]{biblatex}
+
+\DeclareRefcontext{testrc}{sorting=nyt}
+
+% Global reference context:
+% sorting=nty
+% sortingnamekeytemplate=global
+% labelprefix=
+
+\begin{document}
+
+\begin{refcontext}{testrc}
+% reference context:
+% sorting=nyt
+% sortingnamekeytemplate=global
+% labelprefix=
+\end{refcontext}
+
+\begin{refcontext}[labelprefix=A]{testrc}
+% reference context:
+% sorting=nyt
+% sortingnamekeytemplate=global
+% labelprefix=A
+\end{refcontext}
+
+\begin{refcontext}[sorting=ydnt,labelprefix=A]
+% reference context:
+% sorting=ydnt
+% sortingnamekeytemplate=global
+% labelprefix=A
+\end{refcontext}
+
+\newrefcontext}[labelprefix=B]
+% reference context:
+% sorting=nty
+% sortingnamekeytemplate=global
+% labelprefix=B
+\endrefcontext
+
+\newrefcontext}[sorting=ynt,labelprefix=C]{testrc}
+% reference context:
+% sorting=ynt
+% sortingnamekeytemplate=global
+% labelprefix=C
+\endrefcontext
+\end{ltxexample}
+
+\begin{ltxsyntax}
+
+\cmditem{assignrefcontextkeyws}[key=value, \dots]{keyword1,keyword2, ...}
+\cmditem{assignrefcontextkeyws*}[key=value, \dots]{keyword1,keyword2, ...}
+\cmditem{assignrefcontextcats}[key=value, \dots]{category1, category2, ...}
+\cmditem{assignrefcontextcats*}[key=value, \dots]{category1, category2, ...}
+\cmditem{assignrefcontextentries}[key=value, \dots]{entrykey1, entrykey2, ...}
+\cmditem{assignrefcontextentries*}[key=value, \dots]{entrykey1, entrykey2, ...}
+\cmditem{assignrefcontextentries}[key=value, \dots]{*}
+\cmditem{assignrefcontextentries*}[key=value, \dots]{*}
+
+\end{ltxsyntax}
+These commands automate putting citations into refcontexts when the default behaviour is not sufficient. The \prm{key=value} options are as for \cmd{DeclareRefcontext} with the addition of the \kvopt{name}{refcontextname} option which sets all options from those defined for the named refcontext \prm{refcontextname}. Use \kvopt{name}{default} to use the global default refcontext options. The specific \keyval options override those set by any named \prm{refcontextname}. The default behaviour is that the data for a citation is drawn from the refcontext of the most recently processed bibliography in which it was printed\footnote{This does not always mean what one might think. In a document containing multiple bibliographies, the last bibliography will be the context for any citations \emph{before} the first bibliography because all bibliographies are processed when the \file{.bbl} is read.}. For citations that are used in some way but not printed in a bibliography or bibliography list, they default to drawing their data from the global refcontext established at the beginning of the document. To override this behaviour, instead of manually wrapping citation commands in \env{refcontext} environments, which might be error-prone and tedious, you can register a comma"=separated list of \prm{keywords}, \prm{categories} or \prm{entrykeys} which, respectively, make the entries with any of the specified keywords, entries in any of the specified categories (see \secref{use:use:div}) or entries with any of the specified citation keys draw their data from a particular named refcontext and/or specified \prm{refcontext key/values}. Such refcontext auto-assignments are specific to the current refsection. You may specify the same citation key in any of these commands but be aware that assignment is done in the order \prm{keywords}, \prm{categories}, \prm{entrykeys} with the later specifications overriding the earlier. \cmd{assignrefcontextentries} accepts a single asterisk instead of a list of entrykeys which allows the assignment of all keys in a refsection to a refcontext with having to explicitly list them. An example:
+
+\begin{ltxexample}[style=latex]
+\assignrefcontextentries[labelprefix=A]{key2}
+\cite{key1}
+\begin{refcontext}[labelprefix=B]
+\cite{key2}
+\end{refcontext}
+\end{ltxexample}
+%
+Here, the data for the citation of \bibfield{key2} will be drawn from refcontext \opt{labelprefix=A} and not \opt{labelprefix=B} (resulting in a label with prefix <A> and not <B>).
+The starred versions do not override a local refcontext and so with:
+
+\begin{ltxexample}[style=latex]
+\assignrefcontextentries*[labelprefix=A]{key2}
+\cite{key1}
+\begin{refcontext}[labelprefix=B]
+\cite{key2}
+\end{refcontext}
+\end{ltxexample}
+%
+the data for the citation of \bibfield{key2} will be drawn from refcontext \opt{labelprefix=B}. Note that these commands are rarely necessary unless you have multiple bibliographies in which the same citations occur and \biblatex\ cannot by default tell which bibliography list a citation should refer to. See the example file \file{94-labelprefix.tex} for more details.
+
+\begin{ltxexample}[style=latex]
+\DeclareRefcontext{testrc}{labelprefix=A}
+\assignrefcontextentries[name=testrc]{key2}
+\cite{key1}
+\begin{refcontext}[labelprefix=B]
+\cite{key2}
+\end{refcontext}
+\end{ltxexample}
+%
+Here, the data for the citation of \bibfield{key2} will be drawn from the refcontext named <testrc> which has \opt{labelprefix=A} and not \opt{labelprefix=B} (resulting in a label with prefix <A> and not <B>).
+
+\begin{ltxexample}[style=latex]
+\DeclareRefcontext{testrc}{labelprefix=A}
+\assignrefcontextentries[name=testrc,labelprefix=C]{key2}
+\cite{key1}
+\begin{refcontext}[labelprefix=B]
+\cite{key2}
+\end{refcontext}
+\end{ltxexample}
+%
+Here, the data for the citation of \bibfield{key2} will be drawn from refcontext with \opt{labelprefix=C} and not \opt{labelprefix=A} since the explicit options override the named refcontext (resulting in a label with prefix <C> and not <A> or <B>).
+
+\begin{ltxsyntax}
+\cmditem{GenRefcontextData}{key=value, \dots}
+
+This command takes the same key/value options as \cmd{DeclareRefcontext}. It forces the currently active refcontext, optionally modified by the key/value options, to be written to the \file{.bcf} so that \biber will create a sorted data list for the specified refcontext. Normally this is automatic when \cmd{printbibliography}/\cmd{prinbiblist} is used in a reference context but there are situations where the data for a refcontext will be needed but no reference list is generated in that context e.g. to sort citations with the \opt{sortcites} option when the sorting of citations requires a different refcontext to that used for the actual reference list.
+\end{ltxsyntax}
+
+\subsubsection{Dynamic Entry Sets}
+\label{use:bib:set}
+
+In addition to the \bibtype{set} entry type, \biblatex also supports dynamic entry sets defined on a per-document\slash per-refsection basis. The following command, which may be used in the document preamble or the document body, defines the set \prm{key}:
+
+\begin{ltxsyntax}
+
+\cmditem{defbibentryset}{key}{key1,key2,key3, \dots}
+
+The \prm{key} is the entry key of the set, which is used like any other entry key when referring to the set. The \prm{key} must be unique and it must not conflict with any other entry key. The second argument is a comma"=separated list of the entry keys which make up the set. \cmd{defbibentryset} implies the equivalent of a \cmd{nocite} command, \ie all sets which are declared are also added to the bibliography. When declaring the same set more than once, only the first invocation of \cmd{defbibentryset} will define the set. Subsequent definitions of the same \prm{key} are ignored and work like \cmd{nocite}\prm{key}. Dynamic entry sets defined in the document body are local to the enclosing \env{refsection} environment, if any. Otherwise, they are assigned to reference section~0. Those defined in the preamble are assigned to reference section~0. See \secref{use:use:set} for further details.
+
+\end{ltxsyntax}
+
+\subsection{Citation Commands}
+\label{use:cit}
+
+All citation commands generally take one mandatory and two optional arguments. The \prm{prenote} is text to be printed at the beginning of the citation. This is usually a notice such as <see> or <compare>. The \prm{postnote} is text to be printed at the very end of the citation. This is usually a page number. If only one of these arguments is given, it is taken as a postnote. If you want to specify a prenote but no postnote, you need to leave the second optional argument empty, as in |\cite[see][]{key}|. The \prm{key} argument to all citation commands is mandatory. This is the entry key or a comma"=separated list of keys corresponding to the entry keys in the \file{bib} file. In sum, all basic citations commands listed further down have the following syntax:
+
+\begin{ltxsyntax}
+
+\cmditem*{command}[prenote][postnote]{keys}<punctuation>
+
+If the \opt{autopunct} package option from \secref{use:opt:pre:gen} is enabled, they will scan ahead for any \prm{punctuation} immediately following their last argument. This is useful to avoid spurious punctuation marks after citations. This feature is configured with \cmd{DeclareAutoPunctuation}, see \secref{aut:pct:cfg} for details.
+
+\end{ltxsyntax}
+
+\subsubsection{Standard Commands}
+\label{use:cit:std}
+
+The following commands are defined by the citation style. Citation styles may provide any arbitrary number of specialized commands, but these are the standard commands typically provided by general-purpose styles.
+
+\begin{ltxsyntax}
+
+\cmditem{cite}[prenote][postnote]{key}
+\cmditem{Cite}[prenote][postnote]{key}
+
+These are the bare citation commands. They print the citation without any additions such as parentheses. The numeric and alphabetic styles still wrap the label in square brackets since the reference may be ambiguous otherwise. \cmd{Cite} is similar to \cmd{cite} but capitalizes the name prefix of the first name in the citation if the \opt{useprefix} option is enabled, provided that there is a name prefix and the citation style prints any name at all.
+
+\cmditem{parencite}[prenote][postnote]{key}
+\cmditem{Parencite}[prenote][postnote]{key}
+
+These commands use a format similar to \cmd{cite} but enclose the entire citation in parentheses. The numeric and alphabetic styles use square brackets instead. \cmd{Parencite} is similar to \cmd{parencite} but capitalizes the name prefix of the first name in the citation if the \opt{useprefix} option is enabled, provided that there is a name prefix and the citation style prints any name at all.
+
+\cmditem{footcite}[prenote][postnote]{key}
+\cmditem{footcitetext}[prenote][postnote]{key}
+
+These command use a format similar to \cmd{cite} but put the entire citation in a footnote and add a period at the end. In the footnote, they automatically capitalize the name prefix of the first name if the \opt{useprefix} option is enabled, provided that there is a name prefix and the citation style prints any name at all. \cmd{footcitetext} differs from \cmd{footcite} in that it uses \cmd{footnotetext} instead of \cmd{footnote}.
+
+\end{ltxsyntax}
+
+\subsubsection{Style-specific Commands}
+\label{use:cit:cbx}
+
+The following additional citation commands are only provided by some of the citation styles which come with this package.
+
+\begin{ltxsyntax}
+
+\cmditem{textcite}[prenote][postnote]{key}
+\cmditem{Textcite}[prenote][postnote]{key}
+
+These citation commands are provided by all styles that come with this package. They are intended for use in the flow of text, replacing the subject of a sentence. They print the authors or editors followed by a citation label which is enclosed in parentheses. Depending on the citation style, the label may be a number, the year of publication, an abridged version of the title, or something else. The numeric and alphabetic styles use square brackets instead of parentheses. In the verbose styles, the label is provided in a footnote. Trailing punctuation is moved between the author or editor names and the footnote mark. \cmd{Textcite} is similar to \cmd{textcite} but capitalizes the name prefix of the first name in the citation if the \opt{useprefix} option is enabled, provided that there is a name prefix.
+
+\cmditem{smartcite}[prenote][postnote]{key}
+\cmditem{Smartcite}[prenote][postnote]{key}
+
+Like \cmd{parencite} in a footnote and like \cmd{footcite} in the body.
+
+\cmditem{cite*}[prenote][postnote]{key}
+
+This command is provided by all author-year and author-title styles. It is similar to the regular \cmd{cite} command but merely prints the year or the title, respectively.
+
+\cmditem{parencite*}[prenote][postnote]{key}
+
+This command is provided by all author-year and author-title styles. It is similar to the regular \cmd{parencite} command but merely prints the year or the title, respectively.
+
+\cmditem{supercite}{key}
+
+This command, which is only provided by the numeric styles, prints numeric citations as superscripts without brackets. It uses \cmd{supercitedelim} instead of \cmd{multicitedelim} as citation delimiter. Note that any \prm{prenote} and \prm{postnote} arguments are ignored. If they are given, \cmd{supercite} will discard them and issue a warning message.
+
+\end{ltxsyntax}
+
+\subsubsection{Qualified Citation Lists}
+\label{use:cit:mlt}
+
+This package supports a class of special citation commands called <multicite> commands. The point of these commands is that their argument is a list of citations where each item forms a fully qualified citation with a pre- and\slash or postnote. This is particularly useful with parenthetical citations and citations given in footnotes. It is also possible to assign a pre- and\slash or postnote to the entire list. The multicite commands are built on top of backend commands like \cmd{parencite} and \cmd{footcite}. The citation style provides a multicite definition with \cmd{DeclareMultiCiteCommand} (see \secref{aut:cbx:cbx}). The following example illustrates the syntax of multicite commands:
+
+\begin{ltxexample}
+\parencites[35]{key1}[88--120]{key2}[23]{key3}
+\end{ltxexample}
+%
+The format of the arguments is similar to that of the regular citation commands, except that only one citation command is given. If only one optional argument is given for an item in the list, it is taken as a postnote. If you want to specify a prenote but no postnote, you need to leave the second optional argument of the respective item empty:
+
+\begin{ltxexample}
+\parencites[35]{key1}[chapter 2 in][]{key2}[23]{key3}
+\end{ltxexample}
+%
+In addition to that, the entire citation list may also have a pre- and\slash or postnote. The syntax of these global notes differs from other optional arguments in that they are given in parentheses rather than the usual brackets:
+
+\begin{ltxexample}
+\parencites<<(>>and chapter 3<<)>>[35]{key1}[78]{key2}[23]{key3}
+\parencites<<(>>Compare<<)()>>[35]{key1}[78]{key2}[23]{key3}
+\parencites<<(>>See<<)(>>and the introduction<<)>>[35]{key1}[78]{key2}[23]{key3}
+\end{ltxexample}
+%
+Note that the multicite commands keep on scanning for arguments until they encounter a token that is not the start of an optional or mandatory argument. If a left brace or bracket follows a multicite command, you need to mask it by adding \cmd{relax} or a control space (a backslash followed by a space) after the last valid argument. This will cause the scanner to stop.
+
+\begin{ltxexample}[style=latex,showspaces]
+\parencites[35]{key1}[78]{key2}<<\relax>>[...]
+\parencites[35]{key1}[78]{key2}<<\ >>{...}
+\end{ltxexample}
+%
+By default, this package provides the following multicite commands which correspond to regular commands from \secref{use:cit:std, use:cit:cbx}:
+
+\begin{ltxsyntax}
+
+\cmditem{cites}(multiprenote)(multipostnote)[prenote][postnote]{key}|...|[prenote][postnote]{key}
+\cmditem{Cites}(multiprenote)(multipostnote)[prenote][postnote]{key}|...|[prenote][postnote]{key}
+
+The multicite version of \cmd{cite} and \cmd{Cite}, respectively.
+
+\cmditem{parencites}(multiprenote)(multipostnote)[prenote][postnote]{key}|...|[prenote][postnote]{key}
+\cmditem{Parencites}(multiprenote)(multipostnote)[prenote][postnote]{key}|...|[prenote][postnote]{key}
+
+The multicite version of \cmd{parencite} and \cmd{Parencite}, respectively.
+
+\cmditem{footcites}(multiprenote)(multipostnote)[prenote][postnote]{key}|...|[prenote][postnote]{key}
+\cmditem{footcitetexts}(multiprenote)(multipostnote)[prenote][postnote]{key}|...|[prenote][postnote]{key}
+
+The multicite version of \cmd{footcite} and \cmd{footcitetext}, respectively.
+
+\cmditem{smartcites}(multiprenote)(multipostnote)[prenote][postnote]{key}|...|[prenote][postnote]{key}
+\cmditem{Smartcites}(multiprenote)(multipostnote)[prenote][postnote]{key}|...|[prenote][postnote]{key}
+
+The multicite version of \cmd{smartcite} and \cmd{Smartcite}, respectively.
+
+\cmditem{textcites}(multiprenote)(multipostnote)[prenote][postnote]{key}|...|[prenote][postnote]{key}
+\cmditem{Textcites}(multiprenote)(multipostnote)[prenote][postnote]{key}|...|[prenote][postnote]{key}
+
+The multicite version of \cmd{textcite} and \cmd{Textcite}, respectively.
+
+\cmditem{supercites}(multiprenote)(multipostnote)[prenote][postnote]{key}|...|[prenote][postnote]{key}
+
+The multicite version of \cmd{supercite}. This command is only provided by the numeric styles.
+
+\end{ltxsyntax}
+
+\subsubsection{Style-independent Commands}
+\label{use:cit:aut}
+
+Sometimes it is desirable to give the citations in the source file in a format that is not tied to a specific citation style and can be modified globally in the preamble. The format of the citations is easily changed by loading a different citation style. However, when using commands such as \cmd{parencite} or \cmd{footcite}, the way the citations are integrated with the text is still effectively hard"=coded. The idea behind the \cmd{autocite} command is to provide higher"=level citation markup which makes global switching from inline citations to citations given in footnotes (or as superscripts) possible. The \cmd{autocite} command is built on top of backend commands like \cmd{parencite} and \cmd{footcite}. The citation style provides an \cmd{autocite} definition with \cmd{DeclareAutoCiteCommand} (see \secref{aut:cbx:cbx}). This definition may be activated with the \opt{autocite} package option from \secref{use:opt:pre:gen}. The citation style will usually initialize this package option to a value which is suitable for the style, see \secref{use:xbx:cbx} for details. Note that there are certain limits to high"=level citation markup. For example, inline author-year citation schemes often integrate citations so tightly with the text that it is virtually impossible to automatically convert them to footnotes. The \cmd{autocite} command is only applicable in cases in which you would normally use \cmd{parencite} or \cmd{footcite} (or \cmd{supercite}, with a numeric style). The citations should be given at the end of a sentence or a partial sentence, immediately preceding the terminal punctuation mark, and they should not be a part of the sentence in a grammatical sense (like \cmd{textcite}, for example).
+
+\begin{ltxsyntax}
+
+\cmditem{autocite}[prenote][postnote]{key}
+\cmditem{Autocite}[prenote][postnote]{key}
+
+In contrast to other citation commands, the \cmd{autocite} command does not only scan ahead for punctuation marks following its last argument to avoid double punctuation marks, it actually moves them around if required. For example, with \kvopt{autocite}{footnote}, a trailing punctuation mark will be moved such that the footnote mark is printed after the punctuation. \cmd{Autocite} is similar to \cmd{autocite} but capitalizes the name prefix of the first name in the citation if the \opt{useprefix} option is enabled, provided that there is a name prefix and the citation style prints any name at all.
+
+\cmditem*{autocite*}[prenote][postnote]{key}
+\cmditem*{Autocite*}[prenote][postnote]{key}
+
+The starred variants of \cmd{autocite} do not behave differently from the regular ones. The asterisk is simply passed on to the backend command. For example, if \cmd{autocite} is configured to use \cmd{parencite}, then \cmd{autocite*} will execute \cmd{parencite*}.
+
+\cmditem{autocites}(multiprenote)(multipostnote)[prenote][postnote]{key}|...|[prenote][postnote]{key}
+\cmditem{Autocites}(multiprenote)(multipostnote)[prenote][postnote]{key}|...|[prenote][postnote]{key}
+
+This is the multicite version of \cmd{autocite}. It also detects and moves punctuation if required. Note that there is no starred variant. \cmd{Autocites} is similar to \cmd{autocites} but capitalizes the name prefix of the first name in the citation if the \opt{useprefix} option is enabled, provided that there is a name prefix and the citation style prints any name at all.
+
+\end{ltxsyntax}
+
+\subsubsection{Text Commands}
+\label{use:cit:txt}
+
+The following commands are provided by the core of \biblatex. They are intended for use in the flow of text. Note that all text commands are excluded from citation tracking.
+
+\begin{ltxsyntax}
+
+\cmditem{citeauthor}[prenote][postnote]{key}
+\cmditem*{citeauthor*}[prenote][postnote]{key}
+\cmditem{Citeauthor}[prenote][postnote]{key}
+\cmditem*{Citeauthor*}[prenote][postnote]{key}
+
+These commands print the authors. Strictly speaking, it prints the \bibfield{labelname} list, which may be the
+\bibfield{author}, the \bibfield{editor}, or the \bibfield{translator}. \cmd{Citeauthor} is similar to \cmd{citeauthor} but capitalizes the name prefix of the first name in the citation if the \opt{useprefix} option is enabled, provided that there is a name prefix. The starred variants effectively force maxcitenames to 1 for just this command on so only print the first name in the labelname list (potentially followed by the «et al» string if there are more names). This allows more natural textual flow when refering to a paper in the singular when otherwise \cmd{citeauthor} would generate a (naturally plural) list of names.
+
+\cmditem{citetitle}[prenote][postnote]{key}
+\cmditem*{citetitle*}[prenote][postnote]{key}
+
+This command prints the title. It will use the abridged title in the \bibfield{shorttitle} field, if available. Otherwise it falls back to the full title found in the \bibfield{title} field. The starred variant always prints the full title.
+
+\cmditem{citeyear}[prenote][postnote]{key}
+\cmditem*{citeyear*}[prenote][postnote]{key}
+
+This command prints the year (\bibfield{year} field or year component of \bibfield{date}). The starred variant includes the \bibfield{extradate} information, if any.
+
+\cmditem{citedate}[prenote][postnote]{key}
+\cmditem*{citedate*}[prenote][postnote]{key}
+
+This command prints the full date (\bibfield{date} or \bibfield{year}). The starred variant includes the \bibfield{extradate} information, if any.
+
+\cmditem{citeurl}[prenote][postnote]{key}
+
+This command prints the \bibfield{url} field.
+
+\cmditem{parentext}{text}
+
+This command wraps the \prm{text} in context sensitive parentheses.
+
+\cmditem{brackettext}{text}
+
+This command wraps the \prm{text} in context sensitive brackets.
+
+\end{ltxsyntax}
+
+\subsubsection{Special Commands}
+\label{use:cit:spc}
+
+The following special commands are also provided by the core of \biblatex.
+
+\begin{ltxsyntax}
+
+\cmditem{nocite}{key}
+\cmditem*{nocite}|\{*\}|
+
+This command is similar to the standard \latex \cmd{nocite} command. It
+adds the \prm{key} to the bibliography without printing a citation. If the
+\prm{key} is an asterisk, all entries available in the in-scope bibliography datasource(s) are added to the bibliography. Like all other citation commands, \cmd{nocite} commands in the document body are local to the enclosing \env{refsection} environment, if any. In contrast to standard \latex, \cmd{nocite} may also be used in the document preamble. In this case, the references are assigned to reference section~0. For the purposes of ordering citations by appearance \cmd{nocite} will behave like all other cite commands, with the added rule that a \cmd{nocite} issued in the preamble is treated as coming before all explicit citations in reference section~0 from the document body.
+
+\cmditem{fullcite}[prenote][postnote]{key}
+
+This command uses the bibliography driver for the respective entry type to create a full citation similar to the bibliography entry. It is thus related to the bibliography style rather than the citation style.
+
+\cmditem{footfullcite}[prenote][postnote]{key}
+
+Similar to \cmd{fullcite} but puts the entire citation in a footnote and adds a period at the end.
+
+\cmditem{volcite}[prenote]{volume}[pages]{key}
+\cmditem{Volcite}[prenote]{volume}[pages]{key}
+
+These commands are similar to \cmd{cite} and \cmd{Cite} but intended for references to multi"=volume works which are cited by volume and page number. Instead of the \prm{postnote}, they take a mandatory \prm{volume} and an optional \prm{pages} argument. Since they merely compose the postnote and pass it to the \cmd{cite} command provided by the citation style as a \prm{postnote} argument, these commands are style independent. The volume and pages/text portion are formatted with the macro \cmd{mkvolcitenote} when they are passed on to the citation command. Additionally they are made available in the special fields \bibfield{volcitevolume} and \bibfield{volcitevolume} (\secref{aut:cbx:fld}) The format of the volume portion is controlled by the field formatting directive \opt{volcitevolume}, the format of the pages/text portion is controlled by the field formatting directive \opt{volcitepages} (\secref{aut:fmt:ich}). The delimiter printed between the volume portion and the pages/text portion may be modified by redefining the macro \cmd{volcitedelim} (\secref{aut:fmt:fmt}).
+
+\cmditem{volcites}(multiprenote)(multipostnote)[prenote]{volume}[pages]{key}|\\...|[prenote]{volume}[pages]{key}
+\cmditem{Volcites}(multiprenote)(multipostnote)[prenote]{volume}[pages]{key}|\\...|[prenote]{volume}[pages]{key}
+
+The multicite version of \cmd{volcite} and \cmd{Volcite}, respectively.
+
+\cmditem{pvolcite}[prenote]{volume}[pages]{key}
+\cmditem{Pvolcite}[prenote]{volume}[pages]{key}
+
+Similar to \cmd{volcite} but based on \cmd{parencite}.
+
+\cmditem{pvolcites}(multiprenote)(multipostnote)[prenote]{volume}[pages]{key}|\\...|[prenote]{volume}[pages]{key}
+\cmditem{Pvolcites}(multiprenote)(multipostnote)[prenote]{volume}[pages]{key}|\\...|[prenote]{volume}[pages]{key}
+
+The multicite version of \cmd{pvolcite} and \cmd{Pvolcite}, respectively.
+
+\cmditem{fvolcite}[prenote]{volume}[pages]{key}
+\cmditem{ftvolcite}[prenote]{volume}[pages]{key}
+
+Similar to \cmd{volcite} but based on \cmd{footcite} and \cmd{footcitetext}, respectively.
+
+\cmditem{fvolcites}(multiprenote)(multipostnote)[prenote]{volume}[pages]{key}|\\...|[prenote]{volume}[pages]{key}
+\cmditem{Fvolcites}(multiprenote)(multipostnote)[prenote]{volume}[pages]{key}|\\...|[prenote]{volume}[pages]{key}
+
+The multicite version of \cmd{fvolcite} and \cmd{Fvolcite}, respectively.
+
+\cmditem{svolcite}[prenote]{volume}[pages]{key}
+\cmditem{Svolcite}[prenote]{volume}[pages]{key}
+
+Similar to \cmd{volcite} but based on \cmd{smartcite}.
+
+\cmditem{svolcites}(multiprenote)(multipostnote)[prenote]{volume}[pages]{key}|\\...|[prenote]{volume}[pages]{key}
+\cmditem{Svolcites}(multiprenote)(multipostnote)[prenote]{volume}[pages]{key}|\\...|[prenote]{volume}[pages]{key}
+
+The multicite version of \cmd{svolcite} and \cmd{Svolcite}, respectively.
+
+\cmditem{tvolcite}[prenote]{volume}[pages]{key}
+\cmditem{Tvolcite}[prenote]{volume}[pages]{key}
+
+Similar to \cmd{volcite} but based on \cmd{textcite}.
+
+\cmditem{tvolcites}(multiprenote)(multipostnote)[prenote]{volume}[pages]{key}|\\...|[prenote]{volume}[pages]{key}
+\cmditem{Tvolcites}(multiprenote)(multipostnote)[prenote]{volume}[pages]{key}|\\...|[prenote]{volume}[pages]{key}
+
+The multicite version of \cmd{tvolcite} and \cmd{Tvolcite}, respectively.
+
+\cmditem{avolcite}[prenote]{volume}[pages]{key}
+\cmditem{Avolcite}[prenote]{volume}[pages]{key}
+
+Similar to \cmd{volcite} but based on \cmd{autocite}.
+
+\cmditem{avolcites}(multiprenote)(multipostnote)[prenote]{volume}[pages]{key}|\\...|[prenote]{volume}[pages]{key}
+\cmditem{Avolcites}(multiprenote)(multipostnote)[prenote]{volume}[pages]{key}|\\...|[prenote]{volume}[pages]{key}
+
+The multicite version of \cmd{avolcite} and \cmd{Avolcite}, respectively.
+
+\cmditem{notecite}[prenote][postnote]{key}
+\cmditem{Notecite}[prenote][postnote]{key}
+
+These commands print the \prm{prenote} and \prm{postnote} arguments but no citation. This may be useful for authors who incorporate implicit citations in their writing, only giving information not mentioned before in the running text, but who still want to take advantage of the automatic \prm{postnote} formatting and citation tracking. This is a generic, style"=independent citation command. Special citation styles may provide smarter facilities for the same purpose. The capitalized version forces capitalization (note that this is only applicable if the note starts with a command which is sensitive to \biblatex's punctuation tracker).
+
+\cmditem{pnotecite}[prenote][postnote]{key}
+\cmditem{Pnotecite}[prenote][postnote]{key}
+
+Similar to \cmd{notecite} but the notes are printed in parentheses.
+
+\cmditem{fnotecite}[prenote][postnote]{key}
+
+Similar to \cmd{notecite} but the notes are printed in a footnote.
+
+\end{ltxsyntax}
+
+\subsubsection{Low-level Commands}
+\label{use:cit:low}
+
+The following commands are also provided by the core of \biblatex. They grant access to all lists and fields at a lower level.
+
+\begin{ltxsyntax}
+
+\cmditem{citefield}[prenote][postnote]{key}[format][msform][mslang]{field}
+
+The \prm{format} is a formatting directive defined with \cmd{DeclareFieldFormat}. Formatting directives are discussed in \secref{aut:bib:fmt}. If this optional argument is omitted, this command falls back to the format \texttt{citefield}. The last argument is the name of a \prm{field} (optionally a multiscript field of \prm{msform}/\prm{mslang}), in the sense explained in \secref{bib:fld}.
+
+\cmditem{citelist}[prenote][postnote]{key}[format][msform][mslang]{literal list}
+
+The \prm{format} is a formatting directive defined with \cmd{DeclareListFormat}. Formatting directives are discussed in \secref{aut:bib:fmt}. If this optional argument is omitted, this command falls back to the format \texttt{citelist}. The last argument is the name of a \prm{literal list} (optionally a multiscript list of \prm{msform}/\prm{mslang}), in the sense explained in \secref{bib:fld}.
+
+\cmditem{citename}[prenote][postnote]{key}[format][msform][mslang]{name list}
+
+The \prm{format} is a formatting directive defined with \cmd{DeclareNameFormat}. Formatting directives are discussed in \secref{aut:bib:fmt}. If this optional argument is omitted, this command falls back to the format \texttt{citename}. The last argument is the name of a \prm{name list} (optionally a multiscript name of \prm{msform}/\prm{mslang}), in the sense explained in \secref{bib:fld}.
+
+\end{ltxsyntax}
+
+\subsubsection{Miscellaneous Commands}
+\label{use:cit:msc}
+
+The commands in this section are little helpers related to citations.
+
+\begin{ltxsyntax}
+
+\csitem{citereset}
+
+This command resets the citation style. This may be useful if the style replaces repeated citations with abbreviations like \emph{ibidem}, \emph{idem}, \emph{op. cit.}, etc. and you want to force a full citation at the beginning of a new chapter, section, or some other location. The command executes a style specific initialization hook defined with the \cmd{InitializeCitationStyle} command from \secref{aut:cbx:cbx}. It also resets the internal citation trackers of this package. The reset will affect the \cmd{ifciteseen}, \cmd{ifentryseen}, \cmd{ifciteibid}, and \cmd{ifciteidem} tests discussed in \secref{aut:aux:tst}. When used inside a \env{refsection} environment, the reset of the citation tracker is local to the current \env{refsection} environment. Also see the \opt{citereset} package option in \secref{use:opt:pre:gen}.
+
+\csitem{citereset*}
+
+Similar to \cmd{citereset} but only executes the style's initialization hook, without resetting the internal citation trackers.
+
+\csitem{mancite}
+
+Use this command to mark manually inserted citations if you mix automatically generated and manual citations. This is particularly useful if the citation style replaces repeated citations by an abbreviation like \emph{ibidem} which may get ambiguous or misleading otherwise. Always use \cmd{mancite} in the same context as the manual citation, \eg if the citation is given in a footnote, include \cmd{mancite} in the footnote. The \cmd{mancite} command executes a style specific reset hook defined with the \cmd{OnManualCitation} command from \secref{aut:cbx:cbx}. It also resets the internal <ibidem> and <idem> trackers of this package. The reset will affect the \cmd{ifciteibid} and \cmd{ifciteidem} tests discussed in \secref{aut:aux:tst}.
+
+\csitem{pno}
+
+This command forces a single page prefix in the \prm{postnote} argument to a citation command. See \secref{use:cav:pag} for further details and usage instructions. Note that this command is only available locally in citations and the bibliography.
+
+\csitem{ppno}
+
+Similar to \cmd{pno} but forces a range prefix. See \secref{use:cav:pag} for further details and usage instructions. Note that this command is only available locally in citations and the bibliography.
+
+\csitem{nopp}
+
+Similar to \cmd{pno} but suppresses all prefixes. See \secref{use:cav:pag} for further details and usage instructions. Note that this command is only available locally in citations and the bibliography.
+
+\csitem{psq}
+
+In the \prm{postnote} argument to a citation command, this command indicates a range of two pages where only the starting page is given. See \secref{use:cav:pag} for further details and usage instructions. The suffix printed is the localisation string \texttt{sequens}, see \secref{aut:lng:key}. The spacing inserted between the suffix and the page number may be modified by redefining the macro \cmd{sqspace}. The default is an unbreakable interword space. Note that this command is only available locally in citations and the bibliography.
+
+\csitem{psqq}
+
+Similar to \cmd{psq} but indicates an open-ended page range. See \secref{use:cav:pag} for further details and usage instructions. The suffix printed is the localisation string \texttt{sequentes}, see \secref{aut:lng:key}. This command is only available locally in citations and the bibliography.
+
+\cmditem{pnfmt}{text}
+
+This command formats its argument \prm{text} in the same format as \bibfield{postnote}. The command can be used to format a page range while adding additional text in the postnote argument of a cite command.
+
+\begin{ltxexample}
+\autocite[\pnfmt{378-381, 383} and more]{sigfridsson}
+\end{ltxexample}
+
+\cmditem{RN}{integer}
+
+This command prints an integer as an uppercase Roman numeral. The formatting applied to the numeral may be modified by redefining the macro \cmd{RNfont}.
+
+\cmditem{Rn}{integer}
+
+Similar to \cmd{RN} but prints a lowercase Roman numeral. The formatting applied to the numeral may be modified by redefining the macro \cmd{Rnfont}.
+
+\end{ltxsyntax}
+
+\subsubsection{\sty{natbib} Compatibility Commands}
+\label{use:cit:nat}
+
+The \opt{natbib} package option loads a \sty{natbib} compatibility module. The module defines aliases for the citation commands provided by the \sty{natbib} package. This includes aliases for the core citation commands \cmd{citet} and \cmd{citep} as well as the variants \cmd{citealt} and \cmd{citealp}. The starred variants of these commands, which print the full author list, are also supported. The \cmd{cite} command, which is handled in a particular way by \sty{natbib}, is not treated in a special way. The text commands (\cmd{citeauthor}, \cmd{citeyear}, etc.) are also supported, as are all commands which capitalize the name prefix (\cmd{Citet}, \cmd{Citep}, \cmd{Citeauthor}, etc.). Aliasing with \cmd{defcitealias}, \cmd{citetalias}, and \cmd{citepalias} is possible as well. Note that the compatibility commands will not emulate the citation format of the \sty{natbib} package. They merely alias \sty{natbib}'s commands to functionally equivalent facilities of the \biblatex package. The citation format depends on the main citation style. However, the compatibility style will adapt \cmd{nameyeardelim} to match the default style of the \sty{natbib} package.
+
+\subsubsection[\sty{mcite}-like Citation Commands]{\sty{mcite}-like Citation Commands}
+\label{use:cit:mct}
+
+The \opt{mcite} package option loads a special citation module which provides \sty{mcite}\slash \sty{mciteplus}-like citation commands. Strictly speaking, what the module provides are wrappers for the commands of the main citation style. For example, the following command:
+
+\begin{ltxexample}
+\mcite{key1,setA,*keyA1,*keyA2,*keyA3,key2,setB,*keyB1,*keyB2,*keyB3}
+\end{ltxexample}
+%
+is essentially equivalent to this:
+
+\begin{ltxexample}
+\defbibentryset{setA}{keyA1,keyA2,keyA3}%
+\defbibentryset{setB}{keyB1,keyB2,keyB3}%
+\cite{key1,setA,key2,setB}
+\end{ltxexample}
+%
+The \cmd{mcite} command will work with any style since the \cmd{cite} backend command is controlled by the main citation style as usual. The \texttt{mcite} module provides wrappers for the standard commands in \secref{use:cit:std,use:cit:cbx}. See \tabref{use:cit:mct:tab2} for an overview. Pre and postnotes as well as starred variants of all commands are also supported. The parameters will be passed to the backend command. For example:
+
+\begin{ltxexample}
+\mcite*[pre][post]{setA,*keyA1,*keyA2,*keyA3}
+\end{ltxexample}
+%
+will execute:
+
+\begin{ltxexample}
+\defbibentryset{setA}{keyA1,keyA2,keyA3}%
+\cite*[pre][post]{setA}
+\end{ltxexample}
+%
+Note that the \texttt{mcite} module is not a compatibility module. It provides commands which are very similar but not identical in syntax and function to \sty{mcite}'s commands. When migrating from \sty{mcite}\slash\sty{mciteplus} to \biblatex, legacy files must be updated. With \sty{mcite}, the first member of the citation group is also the identifier of the group as a whole. Borrowing an example from the \sty{mcite} manual, this group:
+
+\begin{table}
+\caption{\sty{mcite}-like commands}
+\label{use:cit:mct:tab1}
+\tablesetup
+\begin{tabular}{@{}V{0.5\textwidth}@{}V{0.5\textwidth}@{}}
+\toprule
+\multicolumn{1}{@{}H}{Standard Command} &
+\multicolumn{1}{@{}H}{\sty{mcite}-like Command} \\
+\cmidrule(r){1-1}\cmidrule{2-2}
+|\cite| & |\mcite| \\
+|\Cite| & |\Mcite| \\
+|\parencite| & |\mparencite| \\
+|\Parencite| & |\Mparencite| \\
+|\footcite| & |\mfootcite| \\
+|\footcitetext| & |\mfootcitetext| \\
+|\textcite| & |\mtextcite| \\
+|\Textcite| & |\Mtextcite| \\
+|\supercite| & |\msupercite| \\
+|\autocite| & |\mautocite| \\
+|\Autocite| & |\Mautocite| \\
+\bottomrule
+\end{tabular}
+\end{table}
+
+\begin{ltxexample}
+\cite{<<glashow>>,*salam,*weinberg}
+\end{ltxexample}
+%
+consists of three entries and the entry key of the first one also serves as identifier of the entire group. In contrast to that, a \biblatex entry set is an entity in its own right. Therefore, it requires a unique entry key which is assigned to the set as it is defined:
+
+\begin{ltxexample}
+\mcite{<<set1>>,*glashow,*salam,*weinberg}
+\end{ltxexample}
+%
+Once defined, an entry set is handled like any regular entry in a \file{bib} file. When using one of the \texttt{numeric} styles which come with \biblatex and activating its \opt{subentry} option, it is even possible to refer to set members. See \tabref{use:cit:mct:tab2} for some examples. Restating the original definition of the set is redundant, but permissible. In contrast to \sty{mciteplus}, however, restating a part of the original definition is invalid. Use the entry key of the set instead.
+
+\begin{table}
+\caption[\sty{mcite}-like syntax]
+{\sty{mcite}-like syntax (sample output with \kvopt{style}{numeric} and \opt{subentry} option)}
+\label{use:cit:mct:tab2}
+\tablesetup
+\begin{tabular}{@{}V{0.6\textwidth}@{}V{0.1\textwidth}@{}p{0.3\textwidth}@{}}
+\toprule
+\multicolumn{1}{@{}H}{Input} &
+\multicolumn{1}{@{}H}{Output} &
+\multicolumn{1}{@{}H}{Comment} \\
+\cmidrule(r){1-1}\cmidrule(r){2-2}\cmidrule{3-3}
+|\mcite{set1,*glashow,*salam,*weinberg}|& [1] & Defining and citing the set \\
+|\mcite{set1}| & [1] & Subsequent citation of the set \\
+|\cite{set1}| & [1] & Regular |\cite| works as usual \\
+|\mcite{set1,*glashow,*salam,*weinberg}|& [1] & Redundant, but permissible \\
+|\mcite{glashow}| & [1a] & Citing a set member \\
+|\cite{weinberg}| & [1c] & Regular |\cite| works as well \\
+\bottomrule
+\end{tabular}
+\end{table}
+
+\subsection{Localization Commands}
+\label{use:lng}
+
+The \biblatex package provides translations for key terms such as <edition> or <volume> as well as definitions for language specific features such as the date format and ordinals. These definitions, which are loaded automatically, may be modified or extended in the document preamble or the configuration file with the commands introduced in this section.
+
+\begin{ltxsyntax}
+
+\cmditem{DefineBibliographyStrings}{language}{definitions}
+
+This command is used to define localisation strings. The \prm{language} must be a language name known to the \sty{babel}/\sty{polyglossia} packages, \ie one of the identifiers listed in \tabref{bib:fld:tab1} on page \pageref{bib:fld:tab1}. The \prm{definitions} are \keyval pairs which assign an expression to an identifier:
+
+\begin{ltxexample}
+\DefineBibliographyStrings{american}{%
+ bibliography = {Bibliography},
+ shorthands = {Abbreviations},
+ editor = {editor},
+ editors = {editors},
+}
+\end{ltxexample}
+%
+A complete list of all keys supported by default is given is \secref{aut:lng:key}. Note that all expressions should be capitalized as they usually are when used in the middle of a sentence. The \biblatex package will automatically capitalize the first word when required at the beginning of a sentence. Expressions intended for use in headings should be capitalized in a way that is suitable for titling. In contrast to \cmd{DeclareBibliographyStrings}, \cmd{DefineBibliographyStrings} overrides both the full and the abbreviated version of the string. See \secref{aut:lng:cmd} for further details.
+
+\cmditem{DefineBibliographyExtras}{language}{code}
+
+This command is used to adapt language specific features such as the date format and ordinals. The \prm{language} must be a language name known to the \sty{babel}/\sty{polyglossia} packages. The \prm{code}, which may be arbitrary \latex code, will usually consist of redefinitions of the formatting commands from \secref{use:fmt:lng}.
+
+\cmditem{UndefineBibliographyExtras}{language}{code}
+
+This command is used to restore the original definition of any commands modified with \cmd{DefineBibliographyExtras}. If a redefined command is included in \secref{use:fmt:lng}, there is no need to restore its previous definition since these commands are adapted by all language modules anyway.
+
+\cmditem{DefineHyphenationExceptions}{language}{text}
+
+This is a \latex frontend to \tex's \cmd{hyphenation} command which defines hyphenation exceptions.
+The \prm{language} must be a language name known to the \sty{babel}/\sty{polyglossia} packages. The \prm{text} is a whitespace"=separated list of words. Hyphenation points are marked with a dash:
+
+\begin{ltxexample}
+\DefineHyphenationExceptions{american}{%
+ hy-phen-ation ex-cep-tion
+}
+\end{ltxexample}
+
+\cmditem{NewBibliographyString}{key}
+
+This command declares new localisation strings, \ie it initializes a new \prm{key} to be used in the
+\prm{definitions} of \cmd{DefineBibliographyStrings}. The \prm{key} argument may also be a comma"=separated
+list of key names. The keys listed in \secref{aut:lng:key} are defined by default.
+
+\end{ltxsyntax}
+
+\subsection{Entry Querying Commands}
+\label{use:eq}
+The commands in this section are user-facing equivalents of the identically-named commands in section \secref{aut:aux:tst}. They can be used to test for the presence and attributes of specific bibliography entries. See section \secref{aut:aux:tst} for usage.
+
+\begin{ltxsyntax}
+\cmditem{ifentryseen}{entrykey}{true}{false}
+\cmditem{ifentryinbib}{entrykey}{true}{false}
+\cmditem{ifentrycategory}{entrykey}{category}{true}{false}
+\cmditem{ifentrykeyword}{entrykey}{keyword}{true}{false}
+\end{ltxsyntax}
+
+\subsection{Formatting Commands}
+\label{use:fmt}
+
+The commands and facilities presented in this section may be used to adapt the format of citations and the bibliography.
+
+\subsubsection{Generic Commands and Hooks}
+\label{use:fmt:fmt}
+
+The commands in this section may be redefined with \cmd{renewcommand} in the document preamble. Those marked as <Context Sensitive> in the margin can also (and generally should) be customised with \cmd{DeclareDelimFormat} and are printed with \cmd{printdelim} (\secref{use:fmt:csd}). Note that all commands starting with \cmd{mk\dots} take one argument. All of these commands are defined in \path{biblatex.def}.
+
+\begin{ltxsyntax}
+
+\csitem{bibsetup}
+Arbitrary code to be executed at the beginning of the bibliography, intended for commands which affect the layout of the bibliography.
+
+\csitem{bibfont}
+Arbitrary code setting the font used in the bibliography. This is very similar to \cmd{bibsetup} but intended for switching fonts.
+
+\csitem{citesetup}
+Arbitrary code to be executed at the beginning of each citation command.
+
+\csitem{newblockpunct}
+The separator inserted between <blocks> in the sense explained in \secref{aut:pct:new}. The default definition is controlled by the package option \opt{block} (see \secref{use:opt:pre:gen}).
+
+\csitem{newunitpunct}
+The separator inserted between <units> in the sense explained in \secref{aut:pct:new}. This will usually be a period or a comma plus an interword space. The default definition is a period and a space.
+
+\csitem{finentrypunct}
+The punctuation printed at the very end of every bibliography entry, usually a period. The default definition is a period.
+
+\csitem{entrysetpunct}
+The punctuation printed between bibliography subentries of an entry set. The default definition is a semicolon and a space.
+
+\csitem{bibnamedelima}
+This delimiter controls the spacing between the elements which make up a name part. It is inserted automatically by the backend after the first name element if the element is less than three characters long and before the last element. The default definition is \cmd{addhighpenspace}, \ie a space penalized by the value of the \cnt{highnamepenalty} counter (\secref{use:fmt:len}). Please refer to \secref{use:cav:nam} for further details.
+
+\csitem{bibnamedelimb}
+This delimiter controls the spacing between the elements which make up a name part. It is inserted automatically by the backend between all name elements where \cmd{bibnamedelima} does not apply. The default definition is \cmd{addlowpenspace}, \ie a space penalized by the value of the \cnt{lownamepenalty} counter (\secref{use:fmt:len}). Please refer to \secref{use:cav:nam} for further details.
+
+\csitem{bibnamedelimc}
+This delimiter controls the spacing between name parts. The default name formats use it between the name prefix and the family name if \kvopt{useprefix}{true}. The default definition is \cmd{addhighpenspace}, \ie a space penalized by the value of the \cnt{highnamepenalty} counter (\secref{use:fmt:len}). Please refer to \secref{use:cav:nam} for further details.
+
+\csitem{bibnamedelimd}
+This delimiter controls the spacing between name parts. The default name formats use it between all name parts where \cmd{bibnamedelimc} does not apply. The default definition is \cmd{addlowpenspace}, \ie a space penalized by the value of the \cnt{lownamepenalty} counter (\secref{use:fmt:len}). Please refer to \secref{use:cav:nam} for further details.
+
+\csitem{bibnamedelimi}
+This delimiter replaces \cmd{bibnamedelima/b} after initials. Note that this only applies to initials given as such in the \file{bib} file, not to the initials automatically generated by \biblatex which use their own set of delimiters.
+
+\csitem{bibinitperiod}
+The punctuation inserted automatically by the backend after all initials unless \cmd{bibinithyphendelim} applies. The default definition is a period (\cmd{adddot}). Please refer to \secref{use:cav:nam} for further details.
+
+\csitem{bibinitdelim}
+The spacing inserted automatically by the backend between multiple initials unless \cmd{bibinithyphendelim} applies. The default definition is an unbreakable interword space. Please refer to \secref{use:cav:nam} for further details.
+
+\csitem{bibinithyphendelim}
+The punctuation inserted automatically by the backend between the initials of hyphenated name parts, replacing \cmd{bibinitperiod} and \cmd{bibinitdelim}. The default definition is a period followed by an unbreakable hyphen. Please refer to \secref{use:cav:nam} for further details.
+
+\csitem{bibindexnamedelima}
+Replaces \cmd{bibnamedelima} in the index.
+
+\csitem{bibindexnamedelimb}
+Replaces \cmd{bibnamedelimb} in the index.
+
+\csitem{bibindexnamedelimc}
+Replaces \cmd{bibnamedelimc} in the index.
+
+\csitem{bibindexnamedelimd}
+Replaces \cmd{bibnamedelimd} in the index.
+
+\csitem{bibindexnamedelimi}
+Replaces \cmd{bibnamedelimi} in the index.
+
+\csitem{bibindexinitperiod}
+Replaces \cmd{bibinitperiod} in the index.
+
+\csitem{bibindexinitdelim}
+Replaces \cmd{bibinitdelim} in the index.
+
+\csitem{bibindexinithyphendelim}
+Replaces \cmd{bibinithyphendelim} in the index.
+
+\csitem{revsdnamepunct}
+The punctuation to be printed between the given and family name parts when a name is reversed. The default is a comma. Here is an example showing a name with the default comma as \cmd{revsdnamedelim}:
+
+\begin{ltxexample}
+Jones<<,>> Edward
+\end{ltxexample}
+
+This command should be used with \cmd{bibnamedelimd} as a reversed-name separator in formatting directives for name lists. Please refer to \secref{use:cav:nam} for further details.
+
+\csitem{bibnamedash}
+The dash to be used as a replacement for recurrent authors or editors in the bibliography. The default is an <em> or an <en> dash, depending on the indentation of the list of references.
+
+\csitem{labelnamepunct}\DeprecatedMark
+A separator to be printed after the name used for alphabetizing in the bibliography (\bibfield{author} or \bibfield{editor}, if the \bibfield{author} field is undefined) instead of \cmd{newunitpunct}. The default is \cmd{newunitpunct}, \ie it is not handled differently from regular unit punctuation but permits convenient reconfiguration. This punctuation command is deprecated and has been superseded by the context-sensitive \cmd{nametitledelim} (see \secref{use:fmt:csd}). For backwards compatibility reasons, however, \cmd{nametitledelim} still defaults to \cmd{labelnamepunct} in the \texttt{bib} and \texttt{biblist} contexts. Style authors may want to consider replacing \cmd{labelnampunct} with \texttt{\textbackslash printdelim\{nametitledelim\}} and users may want to prefer modifying the context-sensitive \texttt{nametitledelim} in the \texttt{bib} context with \cmd{DeclareDelimFormat} over redefining \cmd{labelnamepunct}, \eg
+\begin{ltxexample}
+\DeclareDelimFormat[bib]{nametitledelim}{%
+ \addcolon\space}
+\end{ltxexample}
+
+\csitem{subtitlepunct}
+The separator printed between the fields \bibfield{title} and \bibfield{subtitle}, \bibfield{booktitle} and \bibfield{booksubtitle}, as well as \bibfield{maintitle} and \bibfield{mainsubtitle}. With the default styles, this separator replaces \cmd{newunitpunct} at this location. The default definition is \cmd{newunitpunct}, \ie it is not handled differently from regular unit punctuation.
+
+\csitem{intitlepunct}
+The separator between the word «in» and the following title in entry types such as \bibtype{article}, \bibtype{inbook}, \bibtype{incollection}, etc. The default definition is a colon plus an interword space (\eg «Article, in: \emph{Journal}» or «Title, in: \emph{Book}»). Note that this is the separator string, not only the punctuation mark. If you don't want a colon after «in», \cmd{intitlepunct} should still insert a space.
+
+\csitem{bibpagespunct}
+The separator printed before the \bibfield{pages} field. The default is a comma plus an interword space.
+
+\csitem{bibpagerefpunct}
+The separator printed before the \bibfield{pageref} field. The default is an interword space.
+
+\csitem{bibeidpunct}
+The separator printed before the \bibfield{eid} field (similar to \cmd{bibpagespunct}). The default is a comma plus an interword space.
+
+\csitem{multinamedelim}\CSdelimMark
+The delimiter printed between multiple items in a name list like \bibfield{author} or \bibfield{editor} if there are more than two names in the list. The default is a comma plus an interword space. See \cmd{finalnamedelim} for an example.\footnote{Note that \cmd{multinamedelim} is not used at all if there are only two names in the list. In this case, the default styles use the \cmd{finalnamedelim}.}
+
+\csitem{finalnamedelim}\CSdelimMark
+The delimiter printed instead of \cmd{multinamedelim} before the final name in a name list. The default is the localised term <and>, separated by interword spaces. Here is an example:
+
+\begin{ltxexample}
+Michel Goossens<<,>> Frank Mittelbach <<and>> Alexander Samarin
+Edward Jones <<and>> Joe Williams
+\end{ltxexample}
+%
+The comma in the first example is the \cmd{multinamedelim} whereas the string <and> in both examples is the \cmd{finalnamedelim}. See also \cmd{finalandcomma} in \secref{use:fmt:lng}.
+
+\csitem{revsdnamedelim}\CSdelimMark
+An extra delimiter printed after the first name in a name list if the first name is reversed (only in lists with two names). The default is an empty string, \ie no extra delimiter will be printed. Here is an example showing a name list with a comma as \cmd{revsdnamedelim}:
+
+\begin{ltxexample}
+Jones, Edward<<, and>> Joe Williams
+\end{ltxexample}
+%
+In this example, the comma after <Edward> is the \cmd{revsdnamedelim} whereas the string <and> is the \cmd{finalnamedelim}, printed in addition to the former.
+
+\csitem{andothersdelim}\CSdelimMark
+The delimiter printed before the localisation string <\texttt{andothers}> if a name list like \bibfield{author} or \bibfield{editor} is truncated. The default is an interword space.
+
+\csitem{multilistdelim}\CSdelimMark
+The delimiter printed between multiple items in a literal list like \bibfield{publisher} or \bibfield{location} if there are more than two items in the list. The default is a comma plus an interword space. See \cmd{multinamedelim} for further explanation.
+
+\csitem{finallistdelim}\CSdelimMark
+The delimiter printed instead of \cmd{multilistdelim} before the final item in a literal list. The default is the localised term <and>, separated by interword spaces. See \cmd{finalnamedelim} for further explanation.
+
+\csitem{andmoredelim}\CSdelimMark
+The delimiter printed before the localisation string <\texttt{andmore}> if a literal list like \bibfield{publisher} or \bibfield{location} is truncated. The default is an interword space.
+
+\csitem{multicitedelim}
+The delimiter printed between citations if multiple entry keys are passed to a single citation command. The default is a semicolon plus an interword space.
+
+\csitem{multiciterangedelim}
+The delimiter printed between two citations if they are compressed to a range. The default is \cmd{bibrangedash}.
+
+\csitem{multicitesubentrydelim}
+The delimiter printed between subentry citations of the same set. This delimiter is only used in citation styles that reduce citations of the same set to a more compact form (\opt{subentry} of \texttt{numeric-comp}). The default is a comma.
+
+\csitem{multicitesubentryrangedelim}
+The delimiter printed between two citations of the same set if they are compressed to a range. The default is \cmd{multiciterangedelim}.
+
+\csitem{supercitedelim}
+Similar to \cmd{multicitedelim}, but used by the \cmd{supercite} command only. The default is a comma.
+
+\csitem{superciterangedelim}
+Analogue of \cmd{multiciterangedelim} for \cmd{supercite}. The default is \cmd{bibrangedash}.
+
+\csitem{supercitesubentrydelim}
+Analogue of \cmd{multicitesubentrydelim} for \cmd{supercite}. The default is \cmd{supercitedelim}.
+
+\csitem{supercitesubentryrangedelim}
+Analogue of \cmd{multicitesubentryrangedelim} for \cmd{supercite}. The default is \cmd{superciterangedelim}.
+
+\csitem{compcitedelim}
+Similar to \cmd{multicitedelim}, but used by certain citation styles when <compressing> multiple citations. The default definition is a comma plus an interword space.
+
+\csitem{textcitedelim}
+Similar to \cmd{multicitedelim}, but used by \cmd{textcite} and related commands (\secref{use:cit:cbx}). The default is a comma plus an interword space. The standard styles modify this provisional definition to ensure that the delimiter before the final citation is the localised term <and>, separated by interword spaces. See also \cmd{finalandcomma} and \cmd{finalandsemicolon} in \secref{use:fmt:lng}.
+
+\csitem{nametitledelim}\CSdelimMark
+The delimiter printed between the author\slash editor and the title by author-title and some verbose citation styles and in the bibliography. In author-year bibliography styles this delimiter is placed after the author\slash editor and year and before the title. The default definition inside bibliographies is the now deprecated \cmd{labelnamepunct} and is a comma plus an interword space otherwise.
+
+\csitem{nameyeardelim}\CSdelimMark
+The delimiter printed between the author\slash editor and the year by author-year citation and bibliography styles. The default definition is an interword space.
+
+\csitem{namelabeldelim}\CSdelimMark
+The delimiter printed between the name\slash title and the label by alphabetic and numeric citation styles. The default definition is an interword space.
+
+\csitem{nonameyeardelim}\CSdelimMark
+The delimiter printed between the substitute for the labelname when it does not exist (usually the label or title in standard styles) and the year in author-year citation and bibliography styles. This is only used when there is no labelname since when the labelname exists, \cmd{nameyeardelim} is used. The default definition is an interword space.
+
+\csitem{authortypedelim}\CSdelimMark
+The delimiter printed between the author and the \texttt{authortype}. The default is a comma followed by a space.
+
+\csitem{editortypedelim}\CSdelimMark
+The delimiter printed between the editor and the \texttt{editor} or \texttt{editortype} string. The default is a comma followed by a space.
+
+\csitem{translatortypedelim}\CSdelimMark
+The delimiter printed between the translator and the \texttt{translator} string. The default is a comma followed by a space.
+
+\csitem{labelalphaothers}
+A string to be appended to the non"=numeric portion of the \bibfield{labelalpha} field (\ie the field holding the citation label used by alphabetic citation styles) if the number of authors\slash editors exceeds the \opt{maxalphanames} threshold or the \bibfield{author}\slash \bibfield{editor} list was truncated in the \file{bib} file with the keyword <\texttt{and others}>. This will typically be a single character such as a plus sign or an asterisk. The default is a plus sign. This command may also be redefined to an empty string to disable this feature. In any case, it must be redefined in the preamble.
+
+\csitem{sortalphaothers}
+Similar to \cmd{labelalphaothers} but used in the sorting process. Setting it to a different value is advisable if the latter contains formatting commands, for example:
+
+\begin{ltxexample}
+\renewcommand*{\labelalphaothers}{\textbf{+}}
+\renewcommand*{\sortalphaothers}{+}
+\end{ltxexample}
+%
+If \cmd{sortalphaothers} is not redefined, it defaults to \cmd{labelalphaothers}.
+
+\csitem{volcitedelim}
+The delimiter printed between the volume portion and the page/text portion of \cmd{volcite} and related commands (\secref{use:cit:spc}).
+
+\cmditem{mkvolcitenote}{volume}{pages}
+
+This macro formats the \prm{volume} and \prm{pages} arguments of \cmd{volcite} and related commands (\secref{use:cit:spc}) when they are passed on to the underlying citation command.
+
+\csitem{prenotedelim}\CSdelimMark
+The delimiter printed after the \prm{prenote} argument of a citation command. See \secref{use:cit} for details. The default is an interword space.
+
+\csitem{postnotedelim}\CSdelimMark
+The delimiter printed before the \prm{postnote} argument of a citation command. See \secref{use:cit} for details. The default is a comma plus an interword space.
+
+\csitem{extpostnotedelim}\CSdelimMark
+The delimiter printed between the citation and the parenthetical \prm{postnote} argument of a citation command when the postnote occurs outside of the citation parentheses. In the standard styles, this occurs when the citation uses the shorthand field of the entry. See \secref{use:cit} for details. The default is an interword space.
+
+\csitem{multiprenotedelim}\CSdelimMark
+The delimiter printed after the \prm{multiprenote} argument of a citation command. See \secref{use:cit} for details. The default is \cs{prenotedelim}.
+
+\csitem{multipostnotedelim}\CSdelimMark
+The delimiter printed before the \prm{multipostnote} argument of a citation command. See \secref{use:cit} for details. The default is \cs{postnotedelim}.
+
+\cmditem{mkbibname<namepart>}{text}
+This command, which takes one argument, is used to format the name part <namepart> of name list fields. The default datamodel defines the name parts <family>, <given>, <prefix> and <suffix> and therefore the following macros are automatically defined:
+
+\begin{ltxexample}
+\mkbibnamefamily
+\mkbibnamegiven
+\mkbibnameprefix
+\mkbibnamesuffix
+\end{ltxexample}
+%
+For backwards compatibility with the legacy \bibtex name parts, the following are also defined, will generate warnings and will set the correct macro:
+
+\begin{ltxexample}
+\mkbibnamelast
+\mkbibnamefirst
+\mkbibnameaffix
+\end{ltxexample}
+
+\cmditem{mkbibcompletenamefamily}{text}
+This command, which takes one argument, is used to format the complete name in \texttt{family} format order.
+
+\cmditem{mkbibcompletenamefamilygiven}{text}
+This command, which takes one argument, is used to format the complete name in \texttt{family-given} format order.
+
+\cmditem{mkbibcompletenamegivenfamily}{text}
+This command, which takes one argument, is used to format the complete name in \texttt{given-family} format order.
+
+\cmditem{mkbibcompletename}{text}
+The initial value of all default formatting hooks \cmd{mkbibcompletename<formatorder>}.
+
+\csitem{datecircadelim}\CSdelimMark
+When formatting dates with the global option \opt{datecirca} enabled, the delimiter printed after any localised <circa> term. Defaults to interword space.
+
+\csitem{dateeradelim}\CSdelimMark
+When formatting dates with the global option \opt{dateera} set, the delimiter printed before the localisation era term. Defaults to interword space.
+
+\csitem{dateuncertainprint}
+Prints date uncertainty information when the global option \opt{dateuncertain} is enabled and the \cmd{ifdateuncertain} test is true. By default, prints the language specific \cmd{bibdateuncertain} string (\secref{use:fmt:lng}).
+
+\csitem{enddateuncertainprint}
+Prints date uncertainty information when the global option \opt{dateuncertain} is enabled and the \cmd{ifenddateuncertain} test is true. By default, prints the language specific \cmd{bibdateuncertain} string (\secref{use:fmt:lng}).
+
+\csitem{datecircaprint}
+Prints date circa information when the global option \opt{datecirca} is enabled and the \cmd{ifdatecirca} test is true. By default, prints the <circa> localised term (\secref{aut:lng:key:dt}) and the \opt{datecircadelim} delimiter.
+
+\csitem{enddatecircaprint}
+Prints date circa information when the global option \opt{datecirca} is enabled and the \cmd{ifenddatecirca} test is true. By default, prints the <circa> localised term (\secref{aut:lng:key:dt}) and the \opt{datecircadelim} delimiter.
+
+\csitem{datecircaprintiso}
+Prints \acr{ISO8601-2} format date circa information when the global option \opt{datecirca} is enabled and the \cmd{ifdatecirca} test is true. Prints \cmd{textasciitilde}.
+
+\csitem{enddatecircaprintiso}
+Prints \acr{ISO8601-2} format date circa information when the global option \opt{datecirca} is enabled and the \cmd{ifenddatecirca} test is true. Prints \cmd{textasciitilde}.
+
+\cmditem{dateeraprint}{yearfield}
+Prints date era information when the global option \opt{dateera} is set to <secular> or <christian>. By default, prints the \opt{dateeradelim} delimiter and the appropriate localised era term (\secref{aut:lng:key:dt}). If the \opt{dateeraauto} option is set, then the passed \prm{yearfield} (which is the name of a year field such as <year>, <origyear>, <endeventyear> etc.) is tested to see if its value is earlier than the \opt{dateeraauto} threshold and if so, then the BCE/CE localisation will be output too. The default setting for \opt{dateeraauto} is 0 and so only BCE/BC localisation strings are candidates for output. Detects whether the start or end year era information is to be printed by looking at the \prm{yearfield} name passed to it.
+
+\csitem{dateeraprintpre}
+Prints date era information when the global option \opt{dateera} is set to <astronomical>. By default, prints \opt{bibdataeraprefix}. Detects whether the start or end year era information is to be printed by looking at the \prm{yearfield} name passed to it.
+
+\csitem{relatedpunct}
+The separator between the \bibfield{relatedtype} bibliography localisation string and the data from the first related entry. Here is an example with \cmd{relatedpunct} set to a dash:
+
+\begin{ltxexample}
+A. Smith. Title. 2000, (Orig. pub. as<<->>Origtitle)
+\end{ltxexample}
+
+\csitem{relateddelim}
+The generic separator between the data of multiple related entries. The default definition is an optional dot plus linebreak. Here is an example where volumes A-E are related entries of the 5 volume main work:
+
+\begin{ltxexample}
+Donald E. Knuth. Computers & Typesetting. 5 vols. Reading, Mass.: Addison-Wesley, 1984-1986.
+Vol. A: The TEXbook. 1984.
+Vol. B: TEX: The Program. 1986.
+Vol. C: The METAFONTbook. By. 1986.
+Vol. D: METAFONT: The Program. 1986.
+Vol. E: Computer Modern Typefaces. 1986.
+\end{ltxexample}
+
+\csitem{relateddelim$<$relatedtype$>$}
+The separator between the data of multiple related entries inside related entries of type <relatedtype>. There is no default, if such a type-specific delimiter does not exist, \cmd{relateddelim} is used.
+
+\csitem{begrelateddelim}
+The generic separator before the block of related entries. The default definition is \cmd{newunitpunct}.
+
+\csitem{begrelateddelim$<$relatedtype$>$}
+The separator between the block of related entries of type <relatedtype>. There is no default, if such a type-specific delimiter does not exist, \cmd{relateddelim} is used.
+
+\end{ltxsyntax}
+
+\subsubsection{Context-sensitive Delimiters}
+\label{use:fmt:csd}
+Many delimiters described in \secref{use:fmt:fmt} are globally defined. That is, no matter where you use them, they print the same thing. This is not necessarily desirable for delimiters which you might want to print different things in different contexts. Here <context> means things like <inside a text citation> or <inside a bibliography item>. For this reason, \biblatex\ provides a more sophisticated delimiter specification and user interface alongside the standard one based on normal macros defined with \cmd{newcommand}.
+
+ For backwards compatibility reasons all context-sensitive delimiters (\ie all delimiters marked as <context sensitive> in \secref{use:fmt:fmt}) can be redefined with \cmd{renewcommand} in the global context. It is, however, strongly recommended to use the interface documented below (primarily \cmd{DeclareDelimFormat}) to redefine these delimiters---even if \cmd{renewcommand} would suffice for the job at hand.
+\begin{ltxsyntax}
+
+\cmditem{DeclareDelimFormat}[context, \dots]{name}{code}
+\cmditem*{DeclareDelimFormat}*[context, \dots]{name}{code}
+
+Declares the delimiter macro \prm{name} with the replacement text \prm{code}. If the optional comma"=separated list of \prm{contexts} is given, declare \prm{name} only for those contexts. \prm{name} defined without any \prm{contexts} behaves just like the global delimiter definitions which \cmd{newcommand} gives---just a plain macro with a replacement which can be used as \cmd{name}. However, you can also call delimiter macros defined in this way by using \cmd{printdelim}, which is context-aware. The starred version clears all \prm{context} specific declarations for all \prm{names} first.
+
+\cmditem{DeclareDelimAlias}[alias context, \dots]{alias}[delim context]{delim}
+
+Declares \prm{alias} to be an alias for the delimiter \prm{delim}. If the optional \prm{alias context, \dots} nor \prm{delim context} are given, the assigment is performed for all existing contexts of the target \prm{delim} separately, so that \prm{alias} becomes an exact copy of \prm{delim} in all contexts. If only the second optional argument \prm{delim context} is given, all existing contexts of \prm{alias} will be cleared and the global/empty context becomes an alias of \prm{delim} in the context \prm{delim context}. The first optional argument \prm{alias context, \dots} may hold a list of contexts for which the alias is assigned. In that case the second optional argument \prm{delim context} specifies the context of the target delimiter. This argument may not be a list, it can only hold one context. If it is missing, the \prm{alias context} is assumed (if \prm{alias context} is a list, the assignment is performed separately for each list item), if it is empty the global context is used.
+
+
+\begin{ltxexample}[style=latex]
+\DeclareDelimAlias[bib,biblist]{finalnamedelim}[]{multinamedelim}
+\end{ltxexample}
+%
+Defines the \opt{bib} and \opt{biblist} contexts of \cmd{finalnamedelim} as aliases of \cmd{multinamedelim} in global context.
+On the other hand
+\begin{ltxexample}[style=latex]
+\DeclareDelimAlias[bib,biblist]{finalnamedelim}{multinamedelim}
+\end{ltxexample}
+%
+defines \cmd{finalnamedelim} in the context \opt{bib} to be an alias of \cmd{multinamedelim} in the \opt{bib} context and defines \cmd{finalnamedelim} in \opt{biblist} context to be an alias of \cmd{multinamedelim} in \opt{biblist}.
+
+\cmditem*{DeclareDelimAlias}*[alias context, \dots]{alias}[delim context]{delim}\DeprecatedMark
+
+The starred version of \cmd{DeclareDelimAlias} is deprecated in favour of using unstarred \cmd{DeclareDelimAlias} with optional arguments.
+
+It assigns the delimiter alias for specific contexts only. The first optional argument \prm{alias context} holds a list of contexts for which the assignment is going to be performed. If it is empty or missing the global/empty context is assumed. The second optional argument \prm{delim context} specifies the context of the target delimiter. This argument may not be a list, it can only hold one context. If it is missing the \prm{alias context} is assumed (if \prm{alias context} is a list, the assignment is performed separately for each list item), if it is empty the global context is used.
+
+\cmditem{printdelim}[context]{name}
+
+Prints a delimiter with name \prm{name}, locally establishing a optional \prm{context} first. Without the optional \prm{context}, \cmd{printdelim} uses the currently active delimiter context.
+
+Delimiter contexts are simply a string, the value of the internal macro \cmd{blx@delimcontext} which can be set manually by the command \cmd{delimcontext}
+
+\cmditem{delimcontext}{context}
+
+Set the delimiter context to \prm{context}. This setting is not global so that delimiter contexts can be nested using the usual \latex group method.
+
+\cmditem{DeclareDelimcontextAlias}{alias}{name}
+
+The context-sensitive delimiter system creates delimiter contexts based on
+the name of citation commands (<parencite>, <textcite> etc.) passed to
+\cmd{DeclareCiteCommand}. In certain cases where there are nested
+definitions of citation commands where \cmd{DeclareCiteCommand} calls
+itself (see the definition of \cmd{textcite} in \sty{authoryear-icomp}
+for example). The delimiter context is then usually incorrect and the
+delimiter specifications do not work. For example, the definition of
+\cmd{textcite} in fact defines and uses \cmd{cbx@textcite} and so the
+context is automatically set to \opt{cbx@textcite} when printing the
+citation. Delimiter definitions expecting to see the context \opt{textcite}
+therefore do not work. Therefore this command is provided for style authors
+which aliases the context \prm{alias} to the context \prm{name}. For
+example:
+
+\begin{ltxexample}[style=latex]
+\DeclareDelimcontextAlias{cbx@textcite}{textcite}
+\end{ltxexample}
+%
+This (which is a default setting), makes sure that when inside the
+\cmd{cbx@textcite} citation command, the context is in fact \opt{textcite}
+as expected.
+
+\cmditem{UndeclareDelimcontextAlias}{alias}
+
+Removes the delimiter context alias declared for \prm{alias}.
+
+\end{ltxsyntax}
+%
+\biblatex\ has several default contexts which are established automatically in various places:
+
+\begin{description}
+\item[none] At begin document
+\item[bib] Inside a bibliography begun with \cmd{printbibliography} or inside a \cmd{usedriver}
+\item[biblist] Inside a bibliography list begun with \cmd{printbiblist}
+\item[<citecommand>] Inside a citation command \cmd{citecommand} defined with \cmd{DeclareCiteCommand}
+\end{description}
+
+For example, the defaults for \cmd{nametitledelim} are:
+
+\begin{ltxexample}[style=latex]
+\DeclareDelimFormat{nametitledelim}{\addcomma\space}
+\DeclareDelimFormat[bib,biblist]{nametitledelim}{\labelnamepunct}
+\DeclareDelimFormat[textcite]{nametitledelim}{\addspace}
+\end{ltxexample}
+%
+This means that \cmd{nametitledelim} is defined globally as <\cmd{addcomma}\cmd{space}> as per the standard delimiter interface. However, in addition, the delimiter can be printed using \cmd{printdelim} which would print the same as \cmd{nametitledelim} apart from inside a \cmd{textcite}, in which it would print \cmd{addspace} which is more suitable for running text, and in a bibliography (list) in which it takes the value of \cmd{labelnamepunct} for compatibility reasons. If desired, a context can be forced with the optional argument to \cmd{printdelim}, so
+
+\begin{ltxexample}[style=latex]
+\printdelim[textcite]{nametitledelim}
+\end{ltxexample}
+%
+would print \cmd{addspace} regardless of the surrounding context of the \cmd{printdelim}. Contexts are just arbitrary strings and so you can establish them at any time, using \cmd{delimcontext}. If \cmd{printdelim} finds no special value for the delimiter \prm{name} in the current context, it simply prints \cmd{name}. This means that style authors can use \cmd{printdelim} and users expecting to be able to use \cmd{renewcommand} to redefine delimiters can do so with one caveat---such a definition won't change any context-specific delimiters which are defined:
+
+\begin{ltxexample}[style=latex]
+\DeclareDelimFormat{delima}{X}
+\DeclareDelimFormat[textcite]{delima}{Y}
+\renewcommand*{\delima}{Z}
+\end{ltxexample}
+%
+Here, \cmd{delima} always prints <Z>. \verb+\printdelim{delima}+ in any context other than <textcite> also prints \cmd{delima} and hence <Z> but in a <textcite> context prints <Y>. See the \file{04-delimiters.tex} example file that comes with \biblatex\ for more information.
+
+\subsubsection{Language-specific Commands}
+\label{use:fmt:lng}
+
+The commands in this section are language specific. When redefining them, you need to wrap the new definition in a \cmd{DeclareBibliographyExtras} command (in an \file{.lbx} file) or a \cmd{DefineBibliographyExtras} command (user documents), see \secref{use:lng} for details. Note that all commands starting with \cmd{mk\dots} take one or more arguments.
+
+\begin{ltxsyntax}
+
+\csitem{bibrangedash}
+
+The language specific dash to be used for ranges of numbers. Defaults to \cmd{textendash}.
+
+\csitem{bibrangessep}
+
+The language specific separator to be used between multiple ranges. Defaults to a comma followed by a space.
+
+\csitem{bibdatesep}
+
+The language specific separator used between date components in terse date formats. Defaults to \cmd{hyphen}.
+
+\csitem{bibdaterangesep}
+
+The language specific separator to be used for date ranges. Defaults to \cmd{textendash} for all date formats apart from \opt{ymd} which defaults to a \cmd{slash}. The date format option \opt{iso} is hard-coded to \cmd{slash} since this is a standards compliant format.
+
+\csitem{mkbibdatelong}
+
+Takes the names of three field as arguments which correspond to three date components (in the order year\slash month\slash day) and uses their values to print the date in the language specific long date format.
+
+\csitem{mkbibdateshort}
+
+Similar to \cmd{mkbibdatelong} but using the language specific short date format.
+
+\csitem{mkbibtimezone}
+
+Modifies a timezone string passed in as the only argument. By default this changes <Z> to the value of \cmd{bibtimezone}.
+
+\csitem{bibdateuncertain}
+
+The language specific marker to be used after uncertain dates when the global option \opt{dateuncertain} is enabled. Defaults to a space followed by a question mark.
+
+\csitem{bibdateeraprefix}
+
+The language specific marker which is printed as a prefix to beginning BCE/BC dates in a date range when the option \opt{dateera} is set to <astronomical>. Defaults to \cmd{textminus}, if defined and \cmd{textendash} otherwise.
+
+\csitem{bibdateeraendprefix}
+
+The language specific marker which is printed as a prefix to end BCE/BC dates in a date range when the option \opt{dateera} is set to <astronomical>. Defaults to a thin space followed by \cmd{bibdateeraprefix} when \cmd{bibdaterangesep} is set to a dash and to \cmd{bibdateeraprefix} otherwise. This is a separate macro so that you may add extra space before a negative date marker which, for example follows a dash date range marker as this can look a little odd.
+
+\csitem{bibtimesep}
+
+The language specific marker which separates time components. Defaults to a colon.
+
+\csitem{bibutctimezone}
+
+The language specific string printed for the UTC timezone. Defaults to <Z>.
+
+\csitem{bibtimezonesep}
+
+The language specific marker which separates an optional time zone component from a time. Empty by default.
+
+\csitem{bibtzminsep}
+
+The language specific marker which separates hour and minute component of offset timezones. Defaults to a \cmd{bibtimesep}.
+
+\csitem{bibdatetimesep}
+
+The language specific separator printed between date and time components when printing time components along with date components (see the \opt{$<$datetype$>$dateusetime} option in \secref{use:opt:pre:gen}). Defaults to a space for non-\acr{ISO8601-2} output formats, and 'T' for \acr{ISO8601-2} output format.
+
+\csitem{finalandcomma}
+
+Prints the comma to be inserted before the final <and> in a list, if applicable in the respective language. Here is an example:
+
+\begin{ltxexample}
+Michel Goossens, Frank Mittelbach<<,>> and Alexander Samarin
+\end{ltxexample}
+%
+\cmd{finalandcomma} is the comma before the word <and>. See also \cmd{multinamedelim}, \cmd{finalnamedelim}, \cmd{textcitedelim}, and \cmd{revsdnamedelim} in \secref{use:fmt:fmt}.
+
+\csitem{finalandsemicolon}
+
+Prints the semicolon to be inserted before the final <and> in a list of lists, if applicable in the respective language. Here is an example:
+
+\begin{ltxexample}
+Goossens, Mittelbach, and Samarin; Bertram and Wenworth<<;>> and Knuth
+\end{ltxexample}
+%
+\cmd{finalandsemicolon} is the semicolon before the word <and>. See also \cmd{textcitedelim} in \secref{use:fmt:fmt}.
+
+\cmditem{mkbibordinal}{integer}
+
+This command, which takes an integer as its argument, prints an ordinal number.
+
+\cmditem{mkbibmascord}{integer}
+
+Similar to \cmd{mkbibordinal}, but prints a masculine ordinal, if applicable in the respective language.
+
+\cmditem{mkbibfemord}{integer}
+
+Similar to \cmd{mkbibordinal}, but prints a feminine ordinal, if applicable in the respective language.
+
+\cmditem{mkbibneutord}{integer}
+
+Similar to \cmd{mkbibordinal}, but prints a neuter ordinal, if applicable in the respective language.
+
+\cmditem{mkbibordedition}{integer}
+
+Similar to \cmd{mkbibordinal}, but intended for use with the term <edition>.
+
+\cmditem{mkbibordseries}{integer}
+
+Similar to \cmd{mkbibordinal}, but intended for use with the term <series>.
+
+\end{ltxsyntax}
+
+\subsubsection{Lengths and Counters}
+\label{use:fmt:len}
+
+The length registers and counters in this section may be changed in the document preamble with \cmd{setlength} and \cmd{setcounter}, respectively.
+
+\begin{ltxsyntax}
+
+\lenitem{bibhang}
+
+The hanging indentation of the bibliography, if applicable. This length is initialized to \cmd{parindent} at load-time. If \cmd{parindent} is zero length for some reason, \cmd{bibhang} will default to \texttt{1em}.
+
+\lenitem{biblabelsep}
+
+The horizontal space between entries and their corresponding labels in the bibliography. This only applies to bibliography styles which print labels, such as the \texttt{numeric} and \texttt{alphabetic} styles. This length is initialized to twice the value of \cmd{labelsep} at load-time.
+
+\lenitem{bibitemsep}
+
+The vertical space between the individual entries in the bibliography. This length is initialized to \cmd{itemsep} at load-time. Note that \len{bibitemsep}, \len{bibnamesep}, and \len{bibinitsep} obey the rules for \cmd{addvspace}, that is, when vertical space introduced by any of these commands immediately follows on from space introduced by another of them, the resulting total space is equal to the largest of them.
+
+\lenitem{bibnamesep}
+
+Vertical space to be inserted between two entries in the bibliography whenever an entry starts with a name which is different from the initial name of the previous entry. The default value is zero. Setting this length to a positive value greater than \len{bibitemsep} will group the bibliography by author\slash editor name. Note that \len{bibitemsep}, \len{bibnamesep}, and \len{bibinitsep} obey the rules for \cmd{addvspace}, that is, when vertical space introduced by any of these commands immediately follows on from space introduced by another of them, the resulting total space is equal to the largest of them.
+
+\lenitem{bibinitsep}
+
+Vertical space to be inserted between two entries in the bibliography whenever an entry starts with a letter which is different from the initial letter of the previous entry. The default value is zero. Setting this length to a positive value greater than \len{bibitemsep} will group the bibliography alphabetically. Note that \len{bibitemsep}, \len{bibnamesep}, and \len{bibinitsep} obey the rules for \cmd{addvspace}, that is, when vertical space introduced by any of these commands immediately follows on from space introduced by another of them, the resulting total space is equal to the largest of them.
+
+\lenitem{bibparsep}
+
+The vertical space between paragraphs within an entry in the bibliography. The default value is zero.
+
+\cntitem{abbrvpenalty}
+
+This counter, which is used by the localisation modules, holds the penalty used in short or abbreviated localisation strings. For example, a linebreak in expressions such as «et al.» or «ed. by» is unfortunate, but should still be possible to prevent overfull boxes. This counter is initialized to \cmd{hyphenpenalty} at load-time. The idea is making \tex treat the whole expression as if it were a single, hyphenatable word as far as line"=breaking is concerned. If you dislike such linebreaks, use a higher value. If you do not mind them at all, set this counter to zero. If you want to suppress them unconditionally, set it to <infinite> (10\,000 or higher).\footnote{The default values assigned to \cnt{abbrvpenalty}, \cnt{lownamepenalty}, and \cnt{highnamepenalty} are deliberately very low to prevent overfull boxes. This implies that you will hardly notice any effect on line-breaking if the text is set justified. If you set these counters to 10\,000 to suppress the respective breakpoints, you will notice their effect but you may also be confronted with overfull boxes. Keep in mind that line-breaking in the bibliography is often more difficult than in the body text and that you can not resort to rephrasing a sentence. In some cases it may be preferable to set the entire bibliography \cmd{raggedright} to prevent suboptimal linebreaks. In this case, even the fairly low default penalties will make a visible difference.}
+
+\cntitem{highnamepenalty}
+
+This counter holds a penalty affecting line"=breaking in names. Please refer to \secref{use:cav:nam,use:fmt:fmt} for explanation. The counter is initialized to \cmd{hyphenpenalty} at load-time. Use a higher value if you dislike the respective linebreaks. If you do not mind them at all, set this counter to zero. If you prefer the traditional \bibtex behavior (no linebreaks at \cnt{highnamepenalty} breakpoints), set it to <infinite> (10\,000 or higher).
+
+\cntitem{lownamepenalty}
+
+Similar to \cnt{highnamepenalty}. Please refer to \secref{use:cav:nam,use:fmt:fmt} for explanation. The counter is initialized to half the \cmd{hyphenpenalty} at load-time. Use a higher value if you dislike the respective linebreaks. If you do not mind them at all, set this counter to zero.
+
+\cntitem{biburlnumpenalty}
+
+If this counter is set to a value greater than zero, \biblatex will permit linebreaks after numbers in all strings formatted with the \cmd{url} command from the \sty{url} package. This will affect \acr{url}s and \acr{doi}s in the bibliography. The breakpoints will be penalized by the value of this counter. If \acr{url}s and/or \acr{doi}s in the bibliography run into the margin, try setting this counter to a value greater than zero but less than 10000 (you normally want to use a high value like 9000). Setting the counter to zero disables this feature. This is the default setting.
+
+\cntitem{biburlucpenalty}
+
+Similar to \cnt{biburlnumpenalty}, except that it will add a breakpoint after all uppercase letters.
+
+\cntitem{biburllcpenalty}
+
+Similar to \cnt{biburlnumpenalty}, except that it will add a breakpoint after all lowercase letters.
+
+\cntitem{biburlbigbreakpenalty}
+
+The \sty{biblatex} version of \sty{url}'s \len{UrlBigBreakPenalty}. The default value is \texttt{100}.
+
+\cntitem{biburlbreakpenalty}
+
+The \sty{biblatex} version of \sty{url}'s \len{UrlBreakPenalty}. The default value is \texttt{200}.
+
+\lenitem{biburlbigskip}
+
+The \sty{biblatex} version of \len{Urlmuskip}. This length holds the additional (stretchable) space inserted around breakable characters in the \cmd{url} command from the \sty{url} package. The default value is \texttt{0mu plus 3mu}.
+
+\lenitem{biburlnumskip}
+
+The additional space inserted after numbers in strings formatted with the \cmd{url} command from the \sty{url} package. This will affect \acr{url}s and \acr{doi}s in the bibliography. If \acr{url}s and/or \acr{doi}s in the bibliography run into the margin, it may help to set this length to add some small stretchable space, for example \texttt{0mu plus 1mu}. The default setting is \texttt{0mu}. This value is only used if \cnt{biburlnumpenalty} is set to a value different from zero.
+
+\lenitem{biburlucskip}
+
+Similar to \cnt{biburlnumskip}, except that it will add space after all uppercase letters.
+
+\lenitem{biburllcskip}
+
+Similar to \cnt{biburlnumskip}, except that it will add space after all uppercase letters.
+
+\end{ltxsyntax}
+
+\subsubsection{All-purpose Commands}
+\label{use:fmt:aux}
+
+The commands in this section are all-purpose text commands which are generally available, not only in citations and the bibliography.
+
+\begin{ltxsyntax}
+
+\csitem{bibellipsis}
+
+An ellipsis symbol with brackets: <[\dots\unkern]>.
+
+\csitem{noligature}
+
+Disables ligatures at this position and adds some space. Use this command to break up standard ligatures like <fi> and <fl>. It is similar to the \verb+"|+ shorthand provided by some language modules of the \sty{babel}/\sty{polyglossia} packages.
+
+\csitem{hyphenate}
+
+A conditional hyphen. In contrast to the standard \cmd{-} command, this one allows hyphenation in the rest of the word. It is similar to the \verb|"-| shorthand provided by some language modules of the \sty{babel}/\sty{polyglossia} packages.
+
+\csitem{hyphen}
+
+An explicit, breakable hyphen intended for compound words. In contrast to a literal <\texttt{-}>, this command allows hyphenation in the rest of the word. It is similar to the \verb|"=| shorthand provided by some language modules of the \sty{babel}/\sty{polyglossia} packages.
+
+\csitem{nbhyphen}
+
+An explicit, non-breakable hyphen intended for compound words. In contrast to a literal <\texttt{-}>, this command does not permit line breaks at the hyphen but still allows hyphenation in the rest of the word. It is similar to the \verb|"~| shorthand provided by some language modules of the \sty{babel}/\sty{polyglossia} packages.
+
+\csitem{nohyphenation}
+
+A generic switch which suppresses hyphenation locally. Its scope should normally be confined to a group. The command uses a language without hyphenation patterns to suppress hyphenation. The idea was taken from Peter Wilson's \sty{hyphenat} package. Note that this command should only be used for small portions of text and that its effects are negated if \sty{babel}/\sty{polyglossia} is used to switch the language while it is active.
+
+\cmditem{textnohyphenation}{text}
+
+Similar to \cmd{nohyphenation} but restricted to the \prm{text} argument.
+
+\cmditem{mknumalph}{integer}
+
+Takes an integer in the range 1--702 as its argument and converts it to a string as follows: 1=a, \textellipsis, 26=z, 27=aa, \textellipsis, 702=zz. This is intended for use in formatting directives for the \bibfield{extradate}, \bibfield{extraname} and \bibfield{extraalpha} fields.
+
+\cmditem{mkbibacro}{text}
+
+Generic command which typesets an acronym using the small caps variant of the current font, if available, and as-is otherwise. The acronym should be given in uppercase letters.
+
+\cmditem{autocap}{character}
+
+Automatically converts the \prm{character} to its uppercase form if \biblatex's punctuation tracker would capitalize a localisation string at the current location. This command is robust. It is useful for conditional capitalization of certain strings in an entry. Note that the \prm{character} argument is a single character given in lowercase. For example:
+
+\begin{ltxexample}
+\autocap{s}pecial issue
+\end{ltxexample}
+%
+will yield <Special issue> or <special issue>, as appropriate. If the string to be capitalized starts with an inflected character given in \acr{US-ASCII} notation, include the accent command in the \prm{character} argument as follows:
+
+\begin{ltxexample}
+\autocap{\'e}dition sp\'eciale
+\end{ltxexample}
+%
+This will yield <Édition spéciale> or <édition spéciale>. If the string to be capitalized starts with a command which prints a character, such as \cmd{ae} or \cmd{oe}, simply put the command in the \prm{character} argument:
+
+\begin{ltxexample}
+\autocap{\oe}uvres
+\end{ltxexample}
+%
+This will yield <Œuvres> or <œuvres>.
+
+\end{ltxsyntax}
+
+\subsection[Language notes]{Language-specific Notes}
+\label{use:loc}
+
+The facilities discussed in this section are specific to certain localisation modules.
+
+\subsubsection{American}
+\label{use:loc:us}
+
+The American localisation module uses \cmd{uspunctuation} from \secref{aut:pct:cfg} to enable <American-style> punctuation. If this feature is enabled, all trailing commas and periods after \cmd{mkbibquote} will be moved inside the quotes. If you want to disable this feature, use \cmd{stdpunctuation} as follows:
+
+\begin{ltxexample}
+\DefineBibliographyExtras{american}{%
+ \stdpunctuation
+}
+\end{ltxexample}
+%
+By default, the <American punctuation> feature is enabled by the \texttt{american} localisation module only. The above code is only required if you want American localisation without American punctuation. Since standard punctuation is the package default, it would be redundant with any other language.
+
+It is highly advisable to always specify \texttt{american}, \texttt{british}, \texttt{australian}, etc. rather than \texttt{english} when loading the \sty{babel}/\sty{polyglossia} packages to avoid any possible confusion. Older versions of the \sty{babel} package used to treat \opt{english} as an alias for \opt{british}; more recent ones treat it as an alias for \opt{american}. The \biblatex package essentially treats \texttt{english} as an alias for \opt{american}, except for the above feature which is only enabled if \texttt{american} is requested explicitly.
+
+\subsubsection{Bulgarian}
+\label{use:loc:bul}
+
+Like the Greek localisation module, the Bulgarian module also requires \utf support. It will not work with any other encoding.
+
+\subsubsection{Greek}
+\label{use:loc:grk}
+
+The Greek localisation module requires \utf support. It will not work with any other encoding. Generally speaking, the \biblatex package is compatible with the \sty{inputenc} package and with the Unicode engines \lualatex and \xelatex. The \sty{ucs} package will not work. Note that you may need to load additional packages which set up Greek fonts. As a rule of thumb, a setup which works for regular Greek documents should also work with \biblatex. However, there is one fundamental limitation. As of this writing, \biblatex has no support for switching scripts. Greek titles in the bibliography should work fine, but English and other titles in the bibliography may be rendered in Greek letters. If you need multi-script bibliographies, using a Unicode engine is the only sensible choice.
+
+\subsubsection{Hungarian}
+\label{use:loc:hun}
+
+The Hungarian localisation module needs to redefine certain field formats to obtain the grammatically correct word order. This means that these field formats are overwritten whenever the Hungarian localisation is active, no matter whether they were defined in the preamble or by a custom style. So please be aware that using the Hungarian localisation module may cause the bibliography output to deviate from the format dictated by the loaded style and preamble definitions. Changes to this behaviour need to be made using \cmd{DefineBibliographyExtras}. In particular \cmd{mkpageprefix} is redefined to output the <page> or <pages> string as a suffix after the page number following Hungarian conventions, and all formats of fields involving pages, chapters and volumes were modified so that numbers are printed as ordinals.
+
+\subsubsection{Latvian}
+\label{use:loc:lav}
+
+The Latvian localisation module, like the Hungarian language module, needs to redefine certain field formats to obtain the grammatically correct word order. This means that these field formats are overwritten whenever the Latvian localisation is active, no matter whether they were defined in the preamble or by a custom style. So please be aware that using the Latvian localisation module may cause the bibliography output to deviate from the format dictated by the loaded style and preamble definitions. Changes to this behaviour need to be made using \cmd{DefineBibliographyExtras}. In particular \cmd{mkpageprefix} is redefined to output the <page> or <pages> string as a suffix after the page number following Latvian conventions, and all formats of fields involving pages, chapters and volumes were modified so that numbers are printed as ordinals.
+
+\subsubsection{Lithuanian}
+\label{use:loc:lit}
+
+The Lithuanian localisation module needs \utf support and will only work with this encoding.
+
+\subsubsection{Marathi}
+\label{use:loc:mar}
+
+The Marathi localisation module needs \utf support and will only work with this encoding, but users typesetting significant portions of Marathi will probably be using a Unicode engine anyway.
+
+Like the Hungarian language module, the Marathi localisation needs to redefine certain field formats and internal formatting macros to obtain acceptable output. This means that these field formats are overwritten whenever the Marathi localisation is active, no matter whether they were defined in the preamble or by a custom style. So please be aware that using the Marathi localisation module may cause the bibliography output to deviate from the format dictated by the loaded style and preamble definitions. Changes to this behaviour need to be made using \cmd{DefineBibliographyExtras}.
+
+There is some limited support for numeric operations with non-\acr{US-ASCII} Devanagari numerals. Due to the limitations of arithmetic operations to \acr{US-ASCII} numerals and backwards compatibility reasons additional work may be needed to support Devanagari numerals in places where they do not work at the moment.
+
+\subsubsection{Romanian}
+\label{use:loc:ron}
+
+The Romanian localisation module needs \utf support and will only work with this encoding.
+
+Like the Hungarian and Latvian localisation modules, the Romanian \file{lbx} file applies some changes to macros that are usually not affected by localisation. \cmd{newunitpunct} is set to produce a comma followed by a space. \cmd{intitlepunct} only produces a space.
+
+\subsubsection{Russian}
+\label{use:loc:rus}
+
+Like the Greek and Lithuanian localisation module, the Russian module also requires \utf support. It will not work with any other encoding.
+
+\subsubsection{Spanish}
+\label{use:loc:esp}
+
+Handling the word <and> is more difficult in Spanish than in the other languages supported by this package because it may be <y> or <e>, depending on the initial sound of the following word. Therefore, the Spanish localisation module does not use the localisation string <\texttt{and}> but a special internal <smart and> command. The behavior of this command is controlled by the \cnt{smartand} counter.
+
+\begin{ltxsyntax}
+
+\cntitem{smartand}
+
+This counter controls the behavior of the internal <smart and> command. When set to 1, it prints <y> or <e>, depending on the context. When set to 2, it always prints <y>. When set to 3, it always prints <e>. When set to 0, the <smart and> feature is disabled. This counter is initialized to 1 at load-time and may be changed in the preamble. Note that setting this counter to a positive value implies that the Spanish localisation module ignores \cmd{finalnamedelim} and \cmd{finallistdelim}.
+
+\csitem{forceE}
+
+Use this command in \file{bib} files if \biblatex gets the <and> before a certain name wrong. As its name suggests, it will enforce <e>. This command must be used in a special way to be correct \bibtex datafile format. Here is an example:
+
+\begin{lstlisting}[style=bibtex]{}
+author = {Edward Jones and Eoin Maguire},
+author = {Edward Jones and <<{\forceE{E}}>>oin Maguire},
+\end{lstlisting}
+%
+Note that the initial letter of the respective name component is given as an argument to \cmd{forceE} and that the entire construct is wrapped in an additional pair of curly braces.
+
+\csitem{forceY}
+
+Similar to \cmd{forceE} but enforces <y>.
+
+\end{ltxsyntax}
+
+\subsubsection{Turkish}
+\label{use:loc:tur}
+
+By default \sty{babel}'s Turkish localisation module makes <\texttt{=}> a <shorthand>, which breaks the \keyval parser uses by \biblatex. This problem can be resolved by telling \sty{babel} not to make <\texttt{=}> a shorthand (for example by loading \sty{babel} with the option \texttt{shorthands=:!}) or by loading a \keyval package that can deal with active characters (\sty{kvsetkeys} and \sty{xkeyval})\fnurl{https://tex.stackexchange.com/a/160428/35864}.
+
+
+\subsection{Usage Notes}
+\label{use:use}
+
+The following sections give a basic overview of the \biblatex package and discuss some typical usage scenarios.
+
+\subsubsection{Overview}
+\label{use:use:int}
+
+Using the \biblatex package is slightly different from using traditional \bibtex styles and related packages. Before we get to specific usage scenarios, we will therefore have a look at the structure of a typical document first:
+
+\begin{ltxexample}
+\documentclass{...}
+\usepackage[...]{biblatex}
+<<\addbibresource>>{<<bibfile.bib>>}
+\begin{document}
+<<\cite>>{...}
+...
+<<\printbibliography>>
+\end{document}
+\end{ltxexample}
+%
+With traditional \bibtex, the \cmd{bibliography} command serves two purposes. It marks the location of the bibliography and it also specifies the \file{bib} file(s). The file extension is omitted. With \biblatex, resources are specified in the preamble with \cmd{addbibresource} using the full name with \file{.bib} suffix. The bibliography is printed using the \cmd{printbibliography} command which may be used multiple times (see \secref{use:bib} for details). The document body may contain any number of citation commands (\secref{use:cit}). Processing this example file requires that a certain procedure be followed. Suppose our example file is called \path{example.tex} and our bibliographic data is in \path{bibfile.bib}. The procedure, then, is as follows:
+
+\begin{enumerate}
+
+\item Run \bin{latex} on \path{example.tex}. If the file contains any citations, \biblatex will request the respective data from \biber by writing commands to the auxiliary file \path{example.bcf}.
+\item Run \bin{biber} on \path{example.bcf}. \biber will retrieve the data from \path{bibfile.bib} and write it to the auxiliary file \path{example.bbl} in a format which can be processed by \biblatex.
+\item Run \bin{latex} on \path{example.tex}. \biblatex will read the data from \path{example.bbl} and print all citations as well as the bibliography.
+
+\end{enumerate}
+
+\subsubsection{Auxiliary Files}
+\label{use:use:aux}
+
+The \biblatex package uses one auxiliary \file{bcf} file only. Even if there are citation commands in a file included via \cmd{include}, you only need to run \biber on the main \file{bcf} file. All information \biber needs is in the \file{bcf} file, including information about all refsections if using multiple \env{refsection} environments (see \secref{use:use:mlt}).
+
+\subsubsection{Multiple Bibliographies}
+\label{use:use:mlt}
+
+In a collection of articles by different authors, such as a conference proceedings volume for example, it is very common to have one bibliography for each article rather than a global one for the entire book. In the example below, each article would be presented as a separate \cmd{chapter} with its own bibliography.
+
+\begin{ltxexample}
+\documentclass{...}
+\usepackage{biblatex}
+\addbibresource{...}
+\begin{document}
+\chapter{...}
+<<\begin{refsection}>>
+...
+<<\printbibliography[heading=subbibliography]>>
+<<\end{refsection}>>
+\chapter{...}
+<<\begin{refsection}>>
+...
+<<\printbibliography[heading=subbibliography]>>
+<<\end{refsection}>>
+\end{document}
+\end{ltxexample}
+%
+If \cmd{printbibliography} is used inside a \env{refsection} environment, it automatically restricts the scope of the list of references to the enclosing \env{refsection} environment. For a cumulative bibliography which is subdivided by chapter but printed at the end of the book, use the \opt{section} option of \cmd{printbibliography} to select a reference section, as shown in the next example.
+
+\begin{ltxexample}
+\documentclass{...}
+\usepackage{biblatex}
+<<\defbibheading>>{<<subbibliography>>}{%
+ \section*{References for Chapter \ref{<<refsection:\therefsection>>}}}
+\addbibresource{...}
+\begin{document}
+\chapter{...}
+<<\begin{refsection}>>
+...
+<<\end{refsection}>>
+\chapter{...}
+<<\begin{refsection}>>
+...
+<<\end{refsection}>>
+\printbibheading
+<<\printbibliography>>[<<section=1>>,<<heading=subbibliography>>]
+<<\printbibliography>>[<<section=2>>,<<heading=subbibliography>>]
+\end{document}
+\end{ltxexample}
+%
+Note the definition of the bibliography heading in the above example. This is the definition taking care of the subheadings in the bibliography. The main heading is generated with a plain \cmd{chapter} command in this case. The \biblatex package automatically sets a label at the beginning of every \env{refsection} environment, using the standard \cmd{label} command. The identifier used is the string \texttt{refsection:} followed by the number of the respective \env{refsection} environment. The number of the current section is accessible via the \cnt{refsection} counter. When using the \opt{section} option of \cmd{printbibliography}, this counter is also set locally. This means that you may use the counter in heading definitions to print subheadings like «References for Chapter 3», as shown above. You could also use the title of the respective chapter as a subheading by loading the \sty{nameref} package and using \cmd{nameref} instead of \cmd{ref}:
+
+\begin{ltxexample}
+\usepackage{<<nameref>>}
+\defbibheading{subbibliography}{%
+ \section*{<<\nameref{refsection:\therefsection}>>}}
+\end{ltxexample}
+%
+Since giving one \cmd{printbibliography} command for each part of a subdivided bibliography is tedious, \biblatex provides a shorthand. The \cmd{bibbysection} command automatically loops over all reference sections. This is equivalent to giving one \cmd{printbibliography} command for every section but has the additional benefit of automatically skipping sections without references. In the example above, the bibliography would then be generated as follows:
+
+\begin{ltxexample}
+\printbibheading
+<<\bibbysection[heading=subbibliography]>>
+\end{ltxexample}
+%
+When using a format with one cumulative bibliography subdivided by chapter (or any other document division) it may be more appropriate to use \env{refsegment} rather than \env{refsection} environments. The difference is that the \env{refsection} environment generates labels local to the environment while \env{refsegment} does not affect the generation of labels, hence they will be unique across the entire document. The next example could also be given in \secref{use:use:div} because, visually, it creates one global bibliography subdivided into multiple segments.
+
+\begin{ltxexample}
+\documentclass{...}
+\usepackage{biblatex}
+<<\defbibheading>>{<<subbibliography>>}{%
+ \section*{References for Chapter \ref{<<refsegment:\therefsection\therefsegment>>}}}
+\addbibresource{...}
+\begin{document}
+\chapter{...}
+<<\begin{refsegment}>>
+...
+<<\end{refsegment}>>
+\chapter{...}
+<<\begin{refsegment}>>
+...
+<<\end{refsegment}>>
+\printbibheading
+<<\printbibliography>>[<<segment=1>>,<<heading=subbibliography>>]
+<<\printbibliography>>[<<segment=2>>,<<heading=subbibliography>>]
+\end{document}
+\end{ltxexample}
+%
+The use of \env{refsegment} is similar to \env{refsection} and there is also a corresponding \opt{segment} option for \cmd{printbibliography}. The \biblatex package automatically sets a label at the beginning of every \env{refsegment} environment using the string \texttt{refsegment:} followed by the number of the respective \env{refsegment} environment as an identifier. There is a matching \cnt{refsegment} counter which may be used in heading definitions, as shown above. As with reference sections, there is also a shorthand command which automatically loops over all reference segments:
+
+\begin{ltxexample}
+\printbibheading
+<<\bibbysegment[heading=subbibliography]>>
+\end{ltxexample}
+%
+This is equivalent to giving one \cmd{printbibliography} command for every segment in the current \env{refsection}.
+
+\subsubsection{Subdivided Bibliographies}
+\label{use:use:div}
+
+It is very common to subdivide a bibliography by certain criteria. For example, you may want to list printed and online resources separately or divide a bibliography into primary and secondary sources. The former case is straightforward because you can use the entry type as a criterion for the \opt{type} and \opt{nottype} filters of \cmd{printbibliography}. The next example also demonstrates how to generate matching subheadings for the two parts of the bibliography.
+
+\begin{ltxexample}
+\documentclass{...}
+\usepackage{biblatex}
+\addbibresource{...}
+\begin{document}
+...
+\printbibheading
+\printbibliography[<<nottype=online>>,heading=subbibliography,
+ <<title={Printed Sources}>>]
+\printbibliography[<<type=online>>,heading=subbibliography,
+ <<title={Online Sources}>>]
+
+\end{document}
+\end{ltxexample}
+%
+You may also use more than two subdivisions:
+
+\begin{ltxexample}
+\printbibliography[<<type=article>>,...]
+\printbibliography[<<type=book>>,...]
+\printbibliography[<<nottype=article>>,<<nottype=book>>,...]
+\end{ltxexample}
+%
+It is even possible to give a chain of different types of filters:
+
+\begin{ltxexample}
+\printbibliography[<<section=2>>,<<type=book>>,<<keyword=abc>>,<<notkeyword=xyz>>]
+\end{ltxexample}
+%
+This would print all works cited in reference section~2 whose entry type is \bibtype{book} and whose \bibfield{keywords} field includes the keyword <abc> but not <xyz>. When using bibliography filters in conjunction with a numeric style, see \secref{use:cav:lab}. If you need complex filters with conditional expressions, use the \opt{filter} option in conjunction with a custom filter defined with \cmd{defbibfilter}. See \secref{use:bib:flt} for details on custom filters.
+
+\begin{ltxexample}
+\documentclass{...}
+\usepackage{biblatex}
+\addbibresource{...}
+\begin{document}
+...
+\printbibheading
+\printbibliography[<<keyword=primary>>,heading=subbibliography,%
+ <<title={Primary Sources}>>]
+\printbibliography[<<keyword=secondary>>,heading=subbibliography,%
+ <<title={Secondary Sources}>>]
+\end{document}
+\end{ltxexample}
+%
+Dividing a bibliography into primary and secondary sources is possible with a \bibfield{keyword} filter, as shown in the above example. In this case, with only two subdivisions, it would be sufficient to use one keyword as filter criterion:
+
+\begin{ltxexample}
+\printbibliography[<<keyword=primary>>,...]
+\printbibliography[<<notkeyword=primary>>,...]
+\end{ltxexample}
+%
+Since \biblatex has no way of knowing if an item in the bibliography is considered to be primary or secondary literature, we need to supply the bibliography filter with the required data by adding a \bibfield{keywords} field to each entry in the \file{bib} file. These keywords may then be used as targets for the \opt{keyword} and \opt{notkeyword} filters, as shown above. It may be a good idea to add such keywords right away while building a \file{bib} file.
+
+\begin{lstlisting}[style=bibtex]{}
+@Book{key,
+ <<keywords>> = {<<primary>>,some,other,keywords},
+ ...
+\end{lstlisting}
+%
+An alternative way of subdividing the list of references are bibliography categories. They differ from the keywords"=based approach shown in the example above in that they work on the document level and do not require any changes to the \file{bib} file.
+
+\begin{ltxexample}
+\documentclass{...}
+\usepackage{biblatex}
+<<\DeclareBibliographyCategory>>{<<primary>>}
+<<\DeclareBibliographyCategory>>{<<secondary>>}
+<<\addtocategory>>{<<primary>>}{key1,key3,key6}
+<<\addtocategory>>{<<secondary>>}{key2,key4,key5}
+\addbibresource{...}
+\begin{document}
+...
+\printbibheading
+\printbibliography[<<category=primary>>,heading=subbibliography,%
+ <<title={Primary Sources}>>]
+\printbibliography[<<category=secondary>>,heading=subbibliography,%
+ <<title={Secondary Sources}>>]
+\end{document}
+\end{ltxexample}
+%
+In this case it would also be sufficient to use one category only:
+
+\begin{ltxexample}
+\printbibliography[<<category=primary>>,...]
+\printbibliography[<<notcategory=primary>>,...]
+\end{ltxexample}
+%
+It is still a good idea to declare all categories used in the bibliography explicitly because there is a \cmd{bibbycategory} command which automatically loops over all categories. This is equivalent to giving one \cmd{printbibliography} command for every category, in the order in which they were declared.
+
+\begin{ltxexample}
+\documentclass{...}
+\usepackage{biblatex}
+<<\DeclareBibliographyCategory>>{<<primary>>}
+<<\DeclareBibliographyCategory>>{<<secondary>>}
+\addtocategory{primary}{key1,key3,key6}
+\addtocategory{secondary}{key2,key4,key5}
+<<\defbibheading>>{<<primary>>}{\section*{Primary Sources}}
+<<\defbibheading>>{<<secondary>>}{\section*{Secondary Sources}}
+\addbibresource{...}
+\begin{document}
+...
+\printbibheading
+<<\bibbycategory>>
+\end{document}
+\end{ltxexample}
+%
+The handling of the headings is different from \cmd{bibbysection} and \cmd{bibbysegment} in this case. \cmd{bibbycategory} uses the name of the current category as a heading name. This is equivalent to passing \texttt{heading=\prm{category}} to \cmd{printbibliography} and implies that you need to provide a matching heading for every category.
+
+\subsubsection{Entry Sets}
+\label{use:use:set}
+
+An entry set is a group of entries which are cited as a single reference and listed as a single item in the bibliography. The individual entries in the set are separated by \cmd{entrysetpunct} (\secref{aut:fmt:fmt}). The \biblatex package supports two types of entry sets. Static entry sets are defined in the \file{bib} file like any other entry. Dynamic entry sets are defined with \cmd{defbibentryset} (\secref{use:bib:set}) on a per-document\slash per-refsection basis in the document preamble or the document body. This section deals with the definition of entry sets; style authors should also see \secref{aut:cav:set} for further information. Please note that entry sets only make sense for styles which refer to entries by labels such as the provided \texttt{numeric} and \texttt{alphabetic} styles. Styles which refer to entries via names, titles etc. (\texttt{authoryear}, \texttt{authortitle}, \texttt{verbose} etc.) rarely employ sets and do not support them by default when they are cited directly. Custom styles may of course choose to implement some manner of set citation support in any manner they choose.
+
+\paragraph{Static entry sets}
+
+Static entry sets are defined in the \file{bib} file like any other entry. Defining an entry set is as simple as adding an entry of type \bibtype{set}. The entry has an \bibfield{entryset} field defining the members of the set as a separated list of entry keys:
+
+\begin{lstlisting}[style=bibtex]{}
+<<@Set>>{<<set1>>,
+ <<entryset>> = {<<key1,key2,key3>>},
+}
+\end{lstlisting}
+%
+Entries may be part of a set in one document\slash refsection and stand-alone references in another one, depending on the presence of the \bibtype{set} entry. If the \bibtype{set} entry is cited, the set members are grouped automatically. If not, they will work like any regular entry. Note that with \bibtex as the backend, there must also be an \bibfield{entryset} field in the set members which point to the set parent. With \biber, this is not necessary.
+
+\paragraph[Dynamic entry sets]{Dynamic entry sets}
+
+Dynamic entry sets are set up and work much like static ones. The main difference is that they are defined in the document preamble or on the fly in the document body using the \cmd{defbibentryset} command from \secref{use:bib:set}:
+
+\begin{lstlisting}[style=bibtex]{}
+\defbibentryset{set1}{key1,key2,key3}
+\end{lstlisting}
+%
+Dynamic entry sets in the document body are local to the enclosing \env{refsection} environment, if any. Otherwise, they are assigned to reference section~0. Those defined in the preamble are assigned to reference section~0.
+
+\subsubsection[Data Containers]{Data Containers}
+\label{use:use:xdat}
+
+The \bibtype{xdata} entry type serves as a data container holding one or more fields. Data in \bibtype{xdata} entries may be referenced and used by other entries. \bibtype{xdata} entries may not be cited or added to the bibliography, they only serve as a data source for other entries (including other \bibtype{xdata} entries). This data inheritance mechanism is useful for fixed field combinations such as \bibfield{publisher}\slash \bibfield{location} and for other frequently used data:
+
+\begin{lstlisting}[style=bibtex]{}
+<<@XData>>{<<hup>>,
+ publisher = {Harvard University Press},
+ location = {Cambridge, Mass.},
+}
+@Book{...,
+ author = {...},
+ title = {...},
+ date = {...},
+ <<xdata>> = {<<hup>>},
+}
+\end{lstlisting}
+%
+Using a separated list of keys in its \bibfield{xdata} field, an entry may inherit data from several \bibtype{xdata} entries. Cascading \bibtype{xdata} entries are supported as well, \ie an \bibtype{xdata} entry may reference one or more other \bibtype{xdata} entries:
+
+\begin{lstlisting}[style=bibtex]{}
+@XData{macmillan:name,
+ publisher = {Macmillan},
+}
+@XData{macmillan:place,
+ location = {New York and London},
+}
+@XData{macmillan,
+ xdata = {macmillan:name,macmillan:place},
+}
+@Book{...,
+ author = {...},
+ title = {...},
+ date = {...},
+ xdata = {macmillan},
+}
+\end{lstlisting}
+%
+More granular \bibtype{xdata} entry data may be referenced. It is not necessary to reference only entire fields. For example:
+
+\begin{lstlisting}[style=bibtex]{}
+@XData{someauthors,
+ author = {John Smith and Brian Brown}
+}
+@XData{somelocations,
+ location = {Location1 and Location2}
+}
+@XData{somenotes,
+ note = {A note}
+}
+@Book{...,
+ author = {Alan Drudge and xdata=someauthors-author-2},
+ editor = {xdata=someauthors-author and Ann Editor},
+ location = {xdata=somelocations-location-1 and Location3},
+ note = {xdata=somenotes-note}
+}
+\end{lstlisting}
+%
+The format of granular \bibtype{xdata} references are as follows:
+
+\begin{namesample}
+\item~\delim{x}{1}data\delim{=}{2}\delim{$<$}{3}key$>$\delim{-}{4}\delim{$<$}{5}field$>$\delim{-}{6}\delim{$<$}{7}index$>$
+\end{namesample}
+
+\begin{enumerate}
+ \item The value of the \biber option \opt{--xdatamarker} (by default '\texttt{xdata}')
+ \item The value of the \biber option \opt{--xnamesep} (by default '\texttt{=}')
+ \item A valid entry key of an \bibtype{xdata} entry
+ \item The value of the \biber option \opt{--xdatasep} (by default '\texttt{-}')
+ \item A valid entry field in the source \bibtype {xdata} entry
+ \item (Optional) The value of the \biber option \opt{--xdatasep} (by default '\texttt{-}')
+ \item (Optional) A valid 1-based index into a list/name field in the source \bibtype {xdata} entry
+\end{enumerate}
+%
+There are \opt{--output-*} variants of the above options for \biber tool mode output so that these separators and markers can be programatically changed. Taking the example above, this \bibtype{book} would resolve to:
+
+\begin{lstlisting}[style=bibtex]{}
+@Book{...,
+ author = {Alan Drudge and Brian Brown},
+ editor = {John Smith and Brian Brown and Ann Editor},
+ location = {Location1 and Location3},
+ note = {A note}
+}
+\end{lstlisting}
+%
+Things to note with granular \bibtype{xdata} references:
+
+\begin{itemize}
+ \item References must be made only to \bibtype{xdata} fields. A warning will be generated otherwise and the reference will not be resolved
+ \item References must be made only to \bibtype{xdata} fields of the same type (list/name and datatype) as the referencing field. A warning will be generated otherwise and the reference will not be resolved
+ \item References to fields of datatype 'date' are not possible. References to legacy \bibfield{year} and \bibfield{month} fields are possible
+ \item References to missing entries, fields or list/name indices will generate a warning and the reference will not be resolved
+ \item If an index is missing for a reference to a list/name field, the
+ entire xdata name/list field will be spliced into the referencing field
+ at the desired position.
+\end{itemize}
+%
+See also \secref{bib:typ:blx,bib:fld:spc}.
+
+\subsubsection{Electronic Publishing Information}
+\label{use:use:epr}
+
+The \biblatex package provides three fields for electronic publishing information: \bibfield{eprint}, \bibfield{eprinttype}, and \bibfield{eprintclass}. The \bibfield{eprint} field is a verbatim field similar to \bibfield{doi} which holds the identifier of the item. The \bibfield{eprinttype} field holds the resource name, \ie the name of the site or electronic archive. The optional \bibfield{eprintclass} field is intended for additional information specific to the resource indicated by the \bibfield{eprinttype} field. This could be a section, a path, classification information, etc. If the \bibfield{eprinttype} field is available, the standard styles will use it as a literal label. In the following example, they would print «Resource: identifier» rather than the generic «eprint: identifier»:
+
+\begin{lstlisting}[style=bibtex]{}
+<<eprint>> = {<<identifier>>},
+<<eprinttype>> = {<<Resource>>},
+\end{lstlisting}
+%
+The standard styles feature dedicated support for a few online archives. For arXiv references, put the identifier in the \bibfield{eprint} field and the string \texttt{arxiv} in the \bibfield{eprinttype} field:
+
+\begin{lstlisting}[style=bibtex]{}
+<<eprint>> = {<<math/0307200v3>>},
+<<eprinttype>> = {<<arxiv>>},
+\end{lstlisting}
+%
+For papers which use the new identifier scheme (April 2007 and later) add the primary classification in the \bibfield{eprintclass} field:
+
+\begin{lstlisting}[style=bibtex]{}
+eprint = {1008.2849v1},
+eprinttype = {arxiv},
+<<eprintclass>> = {<<cs.DS>>},
+\end{lstlisting}
+%
+There are two aliases which ease the integration of arXiv entries. \bibfield{archiveprefix} is treated as an alias for \bibfield{eprinttype}; \bibfield{primaryclass} is an alias for \bibfield{eprintclass}. If hyperlinks are enabled, the eprint identifier will be transformed into a link to \nolinkurl{arxiv.org}. See the package option \opt{arxiv} in \secref{use:opt:pre:gen} for further details.
+
+For \acr{JSTOR} references, put the stable \acr{JSTOR} number in the \bibfield{eprint} field and the string \texttt{jstor} in the \bibfield{eprinttype} field:
+
+\begin{lstlisting}[style=bibtex]{}
+<<eprint>> = {<<number>>},
+<<eprinttype>> = {<<jstor>>},
+\end{lstlisting}
+%
+When using \acr{JSTOR}'s export feature to export citations in \bibtex format, \acr{JSTOR} uses the \bibfield{url} field by default (where the \prm{number} is a unique and stable identifier):
+
+\begin{lstlisting}[style=bibtex]{}
+url = {http://www.jstor.org/stable/<<number>>},
+\end{lstlisting}
+%
+While this will work as expected, full \acr{URL}s tend to clutter the bibliography. With the \bibfield{eprint} fields, the standard styles will use the more readable «\acr{JSTOR}: \prm{number}» format which also supports hyperlinks. The \prm{number} becomes a clickable link if \sty{hyperref} support is enabled.
+
+For PubMed references, put the stable PubMed identifier in the \bibfield{eprint} field and the string \texttt{pubmed} in the \bibfield{eprinttype} field. This means that:
+
+\begin{lstlisting}[style=bibtex]{}
+url = {http://www.ncbi.nlm.nih.gov/pubmed/<<pmid>>},
+\end{lstlisting}
+%
+becomes:
+
+\begin{lstlisting}[style=bibtex]{}
+<<eprint>> = {<<pmid>>},
+<<eprinttype>> = {<<pubmed>>},
+\end{lstlisting}
+%
+and the standard styles will print «\acr{PMID}: \prm{pmid}» instead of the lengthy \acr{URL}. If hyperref support is enabled, the \prm{pmid} will be a clickable link to PubMed.
+
+For handles (\acr{HDL}s), put the handle in the \bibfield{eprint} field and the string \texttt{hdl} in the \bibfield{eprinttype} field:
+
+\begin{lstlisting}[style=bibtex]{}
+<<eprint>> = {<<handle>>},
+<<eprinttype>> = {<<hdl>>},
+\end{lstlisting}
+%
+For Google Books references, put Google's identifier in the \bibfield{eprint} field and the string \texttt{googlebooks} in the \bibfield{eprinttype} field. This means that, for example:
+
+\begin{lstlisting}[style=bibtex]{}
+url = {http://books.google.com/books?id=<<XXu4AkRVBBoC>>},
+\end{lstlisting}
+%
+would become:
+
+\begin{lstlisting}[style=bibtex]{}
+<<eprint>> = {<<XXu4AkRVBBoC>>},
+<<eprinttype>> = {<<googlebooks>>},
+\end{lstlisting}
+%
+and the standard styles would print «Google Books: |XXu4AkRVBBoC|» instead of the full \acr{URL}. If hyperref support is enabled, the identifier will be a clickable link to Google Books.\footnote{Note that the Google Books \acr{id} seems to be a bit of an <internal> value. As of this writing, there does not seem to be any way to search for an \acr{id} on Google Books. You may prefer to use the \bibfield{url} in this case.}
+
+Note that \bibfield{eprint} is a verbatim field. Always give the identifier in its unmodified form. For example, there is no need to replace |_| with |\_|. Also see \secref{aut:cav:epr} on how to add dedicated support for other eprint resources.
+
+\subsubsection{External Abstracts and Annotations}
+\label{use:use:prf}
+
+Styles which print the fields \bibfield{abstract} and\slash or \bibfield{annotation} may support an alternative way of adding abstracts or annotations to the bibliography. Instead of including the text in the \file{bib} file, it may also be stored in an external \latex file. For example, instead of saying
+
+\begin{ltxexample}[style=bibtex]
+@Article{key1,
+ ...
+ abstract = {This is an abstract of entry `key1'.}
+}
+\end{ltxexample}
+%
+in the \file{bib} file, you may create a file named \path{bibabstract-key1.tex} and put the abstract in this file:
+
+\begin{ltxexample}
+This is an abstract of entry `key1'.
+\endinput
+\end{ltxexample}
+%
+The name of the external file must be the entry key prefixed with \texttt{bibabstract-} or \texttt{bibannotation-}, respectively. You can change these prefixes by redefining \cmd{bibabstractprefix} and \cmd{bibannotationprefix}. Note that this feature needs to be enabled explicitly by setting the package option \opt{loadfiles} from \secref{use:opt:pre:gen}. The option is disabled by default for performance reasons. Also note that any \bibfield{abstract} and \bibfield{annotation} fields in the \file{bib} file take precedence over the external files. Using external files is strongly recommended if you have long abstracts or a lot of annotations since this may increase memory requirements significantly. It is also more convenient to edit the text in a dedicated \latex file. Style authors should see \secref{aut:cav:prf} for further information.
+
+\subsection{Hints and Caveats}
+\label{use:cav}
+
+This section provides additional usage hints and addresses some common problems and potential misconceptions.
+
+\subsubsection{Usage with \acr{KOMA}-Script Classes}
+\label{use:cav:scr}
+
+When used in conjunction with a recent version\footnote{At least \acr{KOMA}-Script 3.25 (2018/03/30).} one of the \sty{scrbook}, \sty{scrreprt}, or \sty{scrartcl} classes, \biblatex passes control over the (default) headings \texttt{bibliography} and \texttt{biblist} from \secref{use:bib:hdg} to the class. Hence, bibliography-heading-related class options can be used as usual. You can override the default headings by using the \opt{heading} option of \cmd{printbibliography}, \cmd{printbibheading} and \cmd{printbiblist}. See \secref{use:bib:bib, use:bib:biblist, use:bib:hdg} for details.
+
+\biblatex also tries to detect bibliography-related class options and settings itself.\footnote{This applies to the traditional syntax of these options (\opt{bibtotoc} and \opt{bibtotocnumbered}) as well as to the \keyval syntax introduced in \acr{KOMA}-Script 3.x, \ie to \kvopt{bibliography}{nottotoc}, \kvopt{bibliography}{totoc}, and \kvopt{bibliography}{totocnumbered}. The global \kvopt{toc}{bibliography} and \kvopt{toc}{bibliographynumbered} options as well as their aliases are detected as well. In any case, the options must be set globally in the optional argument to \cmd{documentclass}.} This was required to be able to adapt the bibliography headings to the class settings in older versions of \acr{KOMA}-Script. If one of the above classes is detected, \biblatex will provide the following additional tests which may be useful in custom heading definitions. Since these tests rely on the error-prone external detection of \acr{KOMA}-Script settings and are no longer used with newer \acr{KOMA}-Script versions, these tests are deprecated and should no longer be used.
+
+\begin{ltxsyntax}
+
+\cmditem{ifkomabibtotoc}{true}{false}\DeprecatedMark
+
+Expands to \prm{true} if the class would add the bibliography to the table of contents, and to \prm{false} otherwise. This test is deprecated.
+
+\cmditem{ifkomabibtotocnumbered}{true}{false}\DeprecatedMark
+
+Expands to \prm{true} if the class would add the bibliography to the table of contents as a numbered section, and to \prm{false} otherwise. If this test yields \prm{true}, \cmd{ifkomabibtotoc} will always yield \prm{true} as well, but not vice versa. This test is deprecated.
+
+\end{ltxsyntax}
+
+\subsubsection{Usage with the Memoir Class}
+\label{use:cav:mem}
+
+When using \biblatex with the \sty{memoir} class, most class facilities for adapting the bibliography have no effect. Use the corresponding facilities of this package instead (\secref{use:bib:bib, use:bib:hdg, use:bib:nts}). Instead of redefining \sty{memoir}'s \cmd{bibsection}, use the \opt{heading} option of \cmd{printbibliography} and \cmd{defbibheading} (\secref{use:bib:bib, use:bib:hdg}). Instead of \cmd{prebibhook} and \cmd{postbibhook}, use the \opt{prenote} and \opt{postnote} options of \cmd{printbibliography} and \cmd{defbibnote} (\secref{use:bib:bib, use:bib:nts}). All default headings are adapted at load-time such that they blend well with the default layout of this class. The default headings \texttt{bibliography} and \texttt{biblist} (\secref{use:bib:hdg}) are also responsive to \sty{memoir}'s \cmd{bibintoc} and \cmd{nobibintoc} switches. The length register \len{bibitemsep} is used by \biblatex in a way similar to \sty{memoir} (\secref{use:fmt:len}). This section also introduces some additional length registers which correspond to \sty{memoir}'s \cmd{biblistextra}. Lastly, \cmd{setbiblabel} does not map to a single facility of the \biblatex package since the style of all labels in the bibliography is controlled by the bibliography style. See \secref{aut:bbx:env} in the author section of this manual for details. If the \sty{memoir} class is detected, \biblatex will also provide the following additional test which may be useful in custom heading definitions:
+
+\begin{ltxsyntax}
+
+\cmditem{ifmemoirbibintoc}{true}{false}
+
+Expands to \prm{true} or \prm{false}, depending on \sty{memoir}'s \cmd{bibintoc} and \cmd{nobibintoc} switches. This is a \latex frontend to \sty{memoir}'s \cmd{ifnobibintoc} test. Note that the logic of the test is reversed.
+
+\end{ltxsyntax}
+
+\subsubsection{Page Numbers in Citations}
+\label{use:cav:pag}
+
+If the \prm{postnote} argument to a citation command is a page number or page range, \biblatex will automatically prefix it with <p.> or <pp.> by default. This works reliably in typical cases, but sometimes manual intervention may be required. In this case, it is important to understand how this argument is handled in detail. First, \biblatex checks if the postnote is an Arabic or Roman numeral (case insensitive). If this test succeeds, the postnote is considered as a single page or other number which will be prefixed with <p.> or some other string which depends on the \sty{pagination} field (see \secref{bib:use:pag}). If it fails, a second test is performed to find out if the postnote is a range or a list of Arabic or Roman numerals. If this test succeeds, the postnote will be prefixed with <pp.> or some other string in the plural form. If it fails as well, the postnote is printed as is. Note that both tests expand the \prm{postnote}. All commands used in this argument must therefore be robust or prefixed with \cmd{protect}. Here are a few examples of \prm{postnote} arguments which will be correctly recognized as a single number, a range of numbers, or a list of numbers, respectively:
+
+\begin{ltxexample}
+\cite[25]{key}
+\cite[vii]{key}
+\cite[XIV]{key}
+\cite[34--38]{key}
+\cite[iv--x]{key}
+\cite[185/86]{key}
+\cite[XI \& XV]{key}
+\cite[3, 5, 7]{key}
+\cite[vii--x; 5, 7]{key}
+\end{ltxexample}
+%
+In some other cases, however, the tests may get it wrong and you need to resort to the auxiliary commands \cmd{pnfmt}, \cmd{pno}, \cmd{ppno}, and \cmd{nopp} from \secref{use:cit:msc}. For example, suppose a work is cited by a special pagination scheme consisting of numbers and letters. In this scheme, the string <|27a|> would mean <page~27, part~a>. Since this string does not look like a number or a range to \biblatex, you need to force the prefix for a single number manually:
+
+\begin{ltxexample}
+\cite[\pno~27a]{key}
+\end{ltxexample}
+%
+There is also a \cmd{ppno} command which forces a range prefix as well as a \cmd{nopp} command which suppresses all prefixes:
+
+\begin{ltxexample}
+\cite[\ppno~27a--28c]{key}
+\cite[\nopp 25]{key}
+\end{ltxexample}
+%
+These commands may be used anywhere in the \prm{postnote} argument. They may also be used multiple times. For example, when citing by volume and page number, you may want to suppress the prefix at the beginning of the postnote and add it in the middle of the string:
+
+\begin{ltxexample}
+\cite[VII, \pno~5]{key}
+\cite[VII, \pno~3, \ppno~40--45]{key}
+\cite[see][\ppno~37--46, in particular \pno~40]{key}
+\end{ltxexample}
+%
+The command \cmd{pnfmt} can be used for \prm{postnote}s consisting of a page range and some additional text. \cmd{pnfmt} prints its argument in the format specified for the postnote and can be used to format the page range automatically without the need for \cmd{pno} and \cmd{ppno}.
+
+\begin{ltxexample}
+\cite[\pnfmt{37-46}, in particular \pnfmt{40}]{key}
+\end{ltxexample}
+%
+There are also two auxiliary command for suffixes like <the following page(s)>. Instead of inserting such suffixes literally (which would require \cmd{ppno} to force a prefix):
+
+\begin{ltxexample}
+\cite[\ppno~27~sq.]{key}
+\cite[\ppno~55~sqq.]{key}
+\end{ltxexample}
+%
+use the auxiliary commands \cmd{psq} and \cmd{psqq}. Note that there is no space between the number and the command. This space will be inserted automatically and may be modified by redefining the macro \cmd{sqspace}.
+
+\begin{ltxexample}
+\cite[27\psq]{key}
+\cite[55\psqq]{key}
+\end{ltxexample}
+%
+Since the postnote is printed without any prefix if it includes any character which is not an Arabic or Roman numeral, you may also type the prefix manually---though this is discouraged:
+
+\begin{ltxexample}
+\cite[p.~5]{key}
+\end{ltxexample}
+%
+It is possible to suppress the prefix on a per"=entry basis by setting the \bibfield{pagination} field of an entry to <\texttt{none}>, see \secref{bib:use:pag} for details. If you do not want any prefixes at all or prefer to type them manually, you can also disable the entire mechanism in the document preamble or the configuration file as follows:
+
+\begin{ltxexample}
+\DeclareFieldFormat{postnote}{#1}
+\end{ltxexample}
+%
+The \prm{postnote} argument is handled as a field and the formatting of this field is controlled by a field formatting directive which may be freely redefined. The above definition will simply print the postnote as is. See \secref{aut:cbx:fld, aut:bib:fmt} in the author guide for further details.
+
+\subsubsection{Name Parts and Name Spacing}
+\label{use:cav:nam}
+
+The \biblatex package gives users and style authors very fine"=grained control of name spacing and the line"=breaking behavior of names. The commands discussed in the following are documented in \secref{use:fmt:fmt,aut:fmt:fmt}. This section is meant to give an overview of how they are put together. A note on terminology: a name \emph{part} is a basic part of the name, for example the given or the family name. Each part of a name may be a single name or it may be composed of multiple names. For example, the name part \enquote*{given name} may be composed of a given and a middle name. The latter are referred to as name \emph{elements} in this section. Let's consider a simple name first: \enquote{John Edward Doe}. This name is composed of the following parts:
+
+\begin{nameparts}
+Given & John Edward \\
+Prefix & --- \\
+Family & Doe \\
+Suffix & --- \\
+\end{nameparts}
+%
+The spacing, punctuation and line"=breaking behavior of names is controlled by six macros:
+
+\begin{namedelims}
+a & \cmd{bibnamedelima} & Inserted by the backend after the first element of every name part if that element is less than three characters long and before the last element of every name part. \\
+b & \cmd{bibnamedelimb} & Inserted by the backend between all elements of a name part where \cmd{bibnamedelima} does not apply. \\
+c & \cmd{bibnamedelimc} & Inserted by a formatting directive between the name prefix and the family name if \kvopt{useprefix}{true}. If \kvopt{useprefix}{false}, \cmd{bibnamedelimd} is used instead. \\
+d & \cmd{bibnamedelimd} & Inserted by a formatting directive between name parts where \cmd{bibnamedelimc} does not apply. \\
+i & \cmd{bibnamedelimi} & Replaces \cmd{bibnamedelima/b} after initials \\
+p & \cmd{revsdnamepunct} & Inserted by a formatting directive after the family name when the name parts are reversed.
+\end{namedelims}
+%
+This is how the delimiters are employed:
+
+\begin{namesample}
+\item John\delim{~}{a}Edward\delim{ }{d}Doe
+\item Doe\delim{,}{p}\delim{ }{d}John\delim{~}{a}Edward
+\end{namesample}
+%
+Initials in the \file{bib} file get a special delimiter:
+
+\begin{namesample}
+\item J.\delim{~}{i}Edward\delim{ }{d}Doe
+\end{namesample}
+%
+Let's consider a more complex name: \enquote{Charles-Jean Étienne Gustave Nicolas de La Vallée Poussin}. This name is composed of the following parts:
+
+\begin{nameparts}
+Given & Charles-Jean Étienne Gustave Nicolas \\
+Prefix & de \\
+Family & La Vallée Poussin \\
+Suffix & --- \\
+\end{nameparts}
+%
+The delimiters:
+
+\begin{namesample}
+\item Charles-Jean\delim{~}{b}Étienne\delim{~}{b}Gustave\delim{~}{a}Nicolas\delim{ }{d}%
+ de\delim{ }{c}%
+ La\delim{~}{a}Vallée\delim{~}{a}Poussin
+\end{namesample}
+%
+Note that \cmd{bibnamedelima/b/i} are inserted by the backend. The backend processes the name parts and takes care of the delimiters between the elements that make up a name part, processing each part individually. In contrast to that, the delimiters between the parts of the complete name (\cmd{bibnamedelimc/d}) are added by name formatting directives at a later point in the processing chain. The spacing and punctuation of initials is also handled by the backend and may be customized by redefining the following three macros:
+
+\begin{namedelims}
+a & \cmd{bibinitperiod} & Inserted by the backend after initials.\\
+b & \cmd{bibinitdelim} & Inserted by the backend between multiple initials.\\
+c & \cmd{bibinithyphendelim} & Inserted by the backend between the initials of hyphenated name parts, replacing \cmd{bibinitperiod} and \cmd{bibinitdelim}.\\
+\end{namedelims}
+%
+This is how they are employed:
+
+\begin{namesample}
+\item J\delim{.}{a}\delim{~}{b}E\delim{.}{a} Doe
+\item K\delim{.-}{c}H\delim{.}{a} Mustermann
+\end{namesample}
+
+\subsubsection{Split Bibliographies and Citation Labels}
+\label{use:cav:lab}
+
+The citation labels generated by this package are assigned to the full list of references before it is split up by any bibliography filters. They are guaranteed to be unique across the entire document (or a \env{refsection} environment), no matter how many bibliography filters you are using. When using a numeric citation scheme, however, this will most likely lead to discontinuous numbering in split bibliographies. Use the \opt{defernumbers} package option to avoid this problem. If this option is enabled, numeric labels are assigned the first time an entry is printed in any bibliography.
+
+Compare the output of the following example with \texttt{defernumbers=true} and \texttt{defernumbers=false}.
+%
+\begin{ltxexample}
+\documentclass{article}
+\usepackage[defernumbers=true]{biblatex}
+
+\addbibresource{biblatex-examples.bib}
+
+\begin{document}
+Lorem \autocite{worman} ipsum \autocite{sigfridsson}
+dolor \autocite{nussbaum} sit \autocite{aksin}
+
+\printbibheading[title={Bibliography}]
+\printbibliography[heading=subbibliography,
+ type=book, title={Books}]
+\printbibliography[heading=subbibliography,
+ type=article, title={Articles}]
+\end{document}
+\end{ltxexample}
+
+There are pathological cases where neither \texttt{defernumbers=true} nor \texttt{defernumbers=false} produce fully desirable output. This may be the case when entries can end up in several of the split bibliographies---or if there is an additional global bibliography. But in most cases with non-overlapping split bibliographies \texttt{defernumbers=true} produces better results. \sty{biblatex} will therefore suggest setting \opt{defernumbers} to \opt{true} in a warning when a split bibliography setup is detected. That warning can be suppressed in case setting \opt{defernumbers} to \opt{true} is not desirable.
+
+\subsubsection{Active Characters in Bibliography Headings}
+\label{use:cav:act}
+
+Packages using active characters, such as \sty{babel}, \sty{polyglossia}, \sty{csquotes}, or \sty{underscore}, usually do not make them active until the beginning of the document body to avoid interference with other packages. A typical example of such an active character is the \acr{US-ASCII} quote |"|, which is used by various language modules of the \sty{babel}/\sty{polyglossia} packages. If shorthands such as |"<| and |"a| are used in the argument to \cmd{defbibheading} and the headings are defined in the document preamble, the non-active form of the characters is saved in the heading definition. When the heading is typeset, they do not function as a command but are simply printed literally. The most straightforward solution consists in moving \cmd{defbibheading} after |\begin{document}|. Alternatively, you may use \sty{babel}'s \cmd{shorthandon} and \cmd{shorthandoff} commands to temporarily make the shorthands active in the preamble. The above also applies to bibliography notes and the \cmd{defbibnote} command.
+
+\subsubsection{Grouping in Reference Sections and Segments}
+\label{use:cav:grp}
+
+All \latex environments enclosed in \cmd{begin} and \cmd{end} form a group. This may have undesirable side effects if the environment contains anything that does not expect to be used within a group. This issue is not specific to \env{refsection} and \env{refsegment} environments, but it obviously applies to them as well. Since these environments will usually enclose much larger portions of the document than a typical \env{itemize} or similar environment, they are simply more likely to trigger problems related to grouping. If you observe any malfunctions after adding \env{refsection} environments to a document (for example, if anything seems to be <trapped> inside the environment), try the following syntax instead:
+
+\begin{ltxexample}
+\chapter{...}
+<<\refsection>>
+...
+<<\endrefsection>>
+\end{ltxexample}
+%
+This will not form a group, but otherwise works as usual. As far as \biblatex is concerned, it does not matter which syntax you use. The alternative syntax is also supported by the \env{refsegment} environment. Note that the commands \cmd{newrefsection} and \cmd{newrefsegment} do not form a group. See \secref{use:bib:sec, use:bib:seg} for details.
+
+\subsection{Using the fallback \bibtex\ backend}
+\label{use:bibtex}
+
+To utilise all of the features described here, \biblatex must be used with the
+\biber program as a backend. Indeed, the documentation in general assumes this. However, for a \emph{limited} subset of use cases it is possible to use the
+long-established \bibtex program (either the 7-bit \texttt{bibtex} or
+8-bit \texttt{bibtex8}) as the supporting backend. This works in much the
+same way as for \biber with the only proviso being that \bibtex is much more
+limited as a backend.
+
+Using \bibtex as the backend requires that the option \opt{backend=bibtex}
+or \opt{backend=bibtex8} is given at load time. The \biblatex package will
+then write appropriate data for use by \bibtex into the auxiliary file(s)
+and a special data file (automatically included in those to be read by
+\bibtex). The \bibtex(8) program should then be run on each auxiliary file:
+\biblatex will list all of the required files in the log.
+
+Key limitations of the \bibtex backend are:
+\begin{itemize}
+\item Sorting is global and is limited to \acr{US-ASCII} ordering
+\item No re-encoding is possible and thus database entries must be in
+ LICR form to work reliably
+\item The data model is fixed
+\item Cross-referencing is more limited and entry sets must be written
+ into the \path{.bib} file
+\item Fixed memory capacity (using the \verb|--wolfgang| option with
+ \verb|bibtex8| is strongly recommended to minimize the likelihood of
+ an issue here)
+\end{itemize}
+
+\subsection{Multiscript Support}
+\label{use:multiscript}
+
+\biblatex and \biber allow the user to specify <alternates> for entryfields designated as <multiscript> in the bibliography data. Here and below <entryfield> is any bibliography field, whether a plain field, list or name. The <alternates> are simply alternative <form> and <language> combinations of the same entryfield data. Multiscript support consists of the following features:
+
+\begin{itemize}
+\item Data entryfields in the datasources (\file{.bib}, \file{.bltxml} etc.) may have more than one <alternates>
+\item All macros which accept the name of an entryfield have optional <msform> and <mslang> arguments to allow the specification of a particular <alternate> of the entryfield, with the default <alternate> determined by the global/per-refcontext \opt{msform} and \opt{mslang} options. \item The language of individual items in name list or plain list entryfields can be specified using a dedicated data annotation to allow script/language switching on a per-item basis.
+\item For name list and plain list entryfields, all alternates of the item being printed are available as macros
+\item Options are available to determine how automatic script/language switching is performed at a per-field and per-listitem level.
+\item The alternate for \bibfield{labelname} and \bibfield{labeltitle} can be determined dynamically depending on the current \opt{msform} and \opt{mslang} settings at time of printing.
+\end{itemize}
+
+The <form> of an alternate entryfield value is one of the vales of the <multiscriptforms> constant, the default for which is:
+
+\begin{ltxexample}
+\DeclareDatamodelConstant[type=list]{multiscriptforms}{default,transliteration,transcription,translation}
+\end{ltxexample}
+%
+The <language> of an alternate entryfield value is a standard IETF BCP47\footnote{https://tools.ietf.org/html/bcp47} language tag which specifies a language code along with optional subtags specifying dialects etc. In most cases, these are obvious and well-known tags such as <en> for English, <en-us> for US-english, <fr> for French, <de> for German etc.
+
+The default multiscript language used when selecting entryfields to print etc. is determined from the babel/polyglossia main language with a fallback to <en-us>. The \opt{langid} datasource entry option plays an important role in multiscript support as it determines the default alternate language on a per-entry basis. \biber has a \opt{mslang} option which sets the default alternate language for all multiscript entryfields which do not specify a language explicitly for the field or for the entry using \bibfield{langid} as described above. \biber will by default use the global \opt{mslang} option setting from \biblatex but this can be overridden using \biber's own \opt{mslang} option (which defaults to <en-us>). For maximum control over multiscript functionality, it is recommended to consistently set the \bibfield{langid} field in your datasource entries so that you always know which multiscript language will be used by default when printing data from an entry. See below for details on how alternates are selected for printing.
+
+Bibliographic entryfields which support multiscript alternates are specified in the datamodel using \cmd{DeclareDatamodelMultiscriptEntryfields}. The default includes most name, list and literal fields in the standard datamodel. Multiscript enabled entryfields always have a <form> and <language> associated with them which default to the global \opt{msform} and \opt{mslang} options respectively. These global defaults can be overriden on a per-refcontext basis by the \opt{msform} and \opt{mslang} options to the refcontext macros.
+
+The \biblatex options:
+
+\begin{itemize}
+ \item \cmd{DeclareLabelname}
+ \item \cmd{DeclareLabeltitle}
+ \item \cmd{DeclareSortingTemplate}
+ \item \cmd{DeclareLabelalphaTemplate}
+\end{itemize}
+%
+are multiscript aware and allow the selection of specific entryfield alternates by use of the \opt{form} and \opt{lang} options. For example, declaring the \opt{labelname} template like this:
+
+\begin{ltxexample}
+\DeclareLabelname{%
+ \field[form=transliteration,lang=ru-Cyrl]{author}
+ \field{author}
+}
+\end{ltxexample}
+%
+Would set the \opt{labelname} to a Russian Cyrillic alternate of the \bibfield{author} name field, if found, before trying the default alternate <form> and <language> alternate of the \bibfield{author} name field.
+
+Here is an example of the \biber multiscript support syntax for \file{.bib} datasources:
+{\footnotesize
+\begin{lstlisting}[style=bibtex,escapeinside={(*@}{@*)}]{}
+@ARTICLE{mstest,
+ AUTHOR = {Bill Smith and Пушкин, Александр and (*@\quickch{徐冰}@*)},
+ AUTHOR+an:mslang = {2="ru-Cyrl";3="zh-Hant"},
+ AUTHOR_transliteration_ru-Latn = {Bill Smith and Pushkin, Aleksandr and Xu, Bing},
+ AUTHOR_transliteration_ru-Latn+an:mslang = {1="en-US";3="zh-Latn"},
+ AUTHOR_transliteration_ru-Grek = {Bill Smith and Πούσκιν, Ἀλεξάντρ and Ξού, Μπίνγκ},
+ AUTHOR_transliteration_ru-Grek+an:mslang = {1="en-US";3="zh-Grek"},
+ LOCATION = {locationa and Standortb},
+ LOCATION+an:mslang = {2="de"},
+ LOCATION_translation_fr = {emplacementa and Standortb},
+ LOCATION_translation_fr+an:mslang = {2="de"},
+ TITLE = {Title},
+ TITLE_translation_fr = {Titre},
+ DATE = {1995}
+}
+\end{lstlisting}
+}
+%
+This example demonstrates the multiscript entryfield alternate syntax where the
+<form> and <language> follow the entryfield name, separated by a (customisable)
+separator (the default is an underscore). Notice that there are alternates
+for the \bibfield{author}, \bibfield{location} and \bibfield{title} entryfields.
+
+It is also possible to override the <language> of an alternate on a
+per-item basis using the \biber data annotation feature (see
+\ref{use:annote}). \biber's multiscript support reserves the \bibfield{mslang}
+named literal annotation for this purpose. These annotations are available via the
+interfaces described in \ref{use:annote}.
+
+Within formats, \cmd{currentmsform} and \cmd{currentmslang} contain the multiscript form and BCP47 language tag respectively for the current field/list item. \cmd{currentmsforms} and \cmd{currentmslangs} contain \sty{etoolbox} lists of all multiscript forms and BCP47 language tags respectively of the current entryfield. The macros are all empty in non-multiscript fields.
+
+The standard \bibfield{langid} entryfield plays a special role in multiscript support as it is a per-entry override for the default alternate <language> for all entryfields in the entry. For example:
+
+\begin{lstlisting}[style=bibtex]{}
+@ARTICLE{mstest,
+ LANGID = {russian},
+ AUTHOR = {Bill Smith and Пушкин, Александр},
+ AUTHOR+an:mslang = {1="en-US"},
+}
+\end{lstlisting}
+%
+The name <Пушкин, Александр> will be processed by \biber with the <language> \opt{ru-Cyrl} due to the \bibfield{langid} entryfield which overrides the global \opt{mslang} setting of \biblatex which is passed to \biber.
+
+Within field, list and name formatting directives, the macros \cmd{currentmsforms} and \cmd{currentmslangs} are \sty{etoolbox} lists of valid multiscript forms/langs for the current entryfield which allow, for example, looping over valid multiscript forms and languages for the entryfield being processed. See \ref{aut:bib:fmt} and \ref{aut:fmt:ilc}.
+
+Inside the formats for multiscript name list and plain list fields, macros are automatically made available which contain all alternates of the current list item/nameparts. See \ref{aut:bbx:drv} and \ref{aut:bib:fmt}.
+
+Automatic \sty{babel}/\sty{polyglossia} language and \sty{biblatex} bibstring switching on a per-list item/namepart basis is controlled by the options \opt{autofieldlang} and \opt{autofieldlangstrings} which allow switching at a more granular level than \opt{autolang}. Granular automatic language switching relies on a mapping of BCP47 language tags to \biblatex/\sty{babel}/\sty{polyglossia} language identifiers so that these packages know which language to switch to (this is necessary until BCP47 support is native to \biblatex, \sty{babel} and \sty{polyglossia}. \biblatex has default mappings as defined in Appendix \secref{apx:bcp}. In addition, you may override or add new mappings with the \cmd{maplangtag} command:
+
+\begin{ltxsyntax}
+
+\cmditem{maplangtag}{BCP47tag}{langid}
+
+Provides a mapping between the BCP47 language tags used in multiscript entryfield alternate specifications and \biblatex/\sty{babel}/\sty{polyglossia} language identifiers.
+
+\end{ltxsyntax}
+
+The \biblatex option \opt{dynamiclabel} allows dynamic selection of \bibfield{labelname} and \bibfield{labeltitle} depending on the current \opt{msform} and \opt{mslang} settings. For example, suppose the following:
+
+\begin{lstlisting}[style=bibtex]{}
+@ARTICLE{mstest,
+ AUTHOR = {Pushkin, Alexander},
+ AUTHOR_transliteration_ru = {Пушкин, Александр},
+}
+\end{lstlisting}
+%
+The default \cmd{DeclareLabelname} setting would select the English \bibfield{author} field alternate as the value of \bibfield{labelname} and the following would print <Pushkin> for both citations in an \sty{authoryear} style since citations in such styles use \bibfield{labelname} by default:
+
+\begin{ltxexample}
+ \cite{mtest}
+ \begin{refcontext}[msform=transliteration,mslang=ru]
+ \cite{mtest}
+ \end{refcontext}
+\end{ltxexample}
+%
+\bibfield{labelname} here is the same in both refcontexts, as determined by the \cmd{DeclareLabelname} setting. However, with <\kvopt{dynamiclabel}{true}>, the second citation would determine \bibfield{labelname} from the current (refcontext) settings for \opt{msform} and \opt{mslang} and the second citation would read <Пушкин>. It is also possible to select particular alternates of name list fields using the optional arguments to \cmd{DeclareLabelname} but bear in mind that these are still static settings--\bibfield{labelname} selection will not be dynamic and override the \cmd{DeclareLabelname} choice unless <\kvopt{dynamiclabel}{true}>. Similar considerations apply to \bibfield{labeltitle}.
+
+\subsection{Selection of Multiscript Alternates}
+\label{use:multiscript:select}
+When selecting or printing a multiscript alternate with:
+
+\begin{itemize}
+ \item \cmd{printfield}
+ \item \cmd{printlist}
+ \item \cmd{printname}
+ \item \cmd{indexfield}
+ \item \cmd{indexlist}
+ \item \cmd{indexname}
+\end{itemize}
+%
+the multiscript alternate to use is selected using the following rules:
+
+\begin{itemize}
+\item If an explicit form/lang is specified, then only this alternate is considered
+\item If no explicit form/lang is specified, then the following are considered, in order
+ \begin{itemize}
+ \item The alternate identified by the currently active form/lang (see below)
+ \item The first alternate found in the multiscript select list for the entry \bibfield{langid} (if it exists) or else the currently active multiscript language
+ \item The alternate identified by the currently active multiscipt form and the entry \bibfield{langid} (if it exists) or else the currently active multiscript language
+ \end{itemize}
+\end{itemize}
+
+The active multiscript form/language are determined by, in ascending order of override:
+
+\begin{itemize}
+\item The global \opt{msform} and \opt{mslang} settings derived respectively from the global option and babel/polyglossia document language
+\item The refcontext \opt{msform}/\opt{mslang} options
+\end{itemize}
+
+The multiscript select list for a \bibfield{langid} is defined using the following macro:
+
+\begin{ltxsyntax}
+
+\cmditem{DeclareMsselect}{langid}{specification}
+
+Defines the multiscript alternates to look for, in order, when attempting to print a multiscript field in the context of the language with \prm{langid}. \prm{langid} can be a babel/polyglossia language specifier or BCP47 language tag. The language context is either the \bibfield{langid} of the entry (if it exists) or the active \bibfield{mslang}. The \prm{specification} is one or more \cmd{alternate} macros:
+
+\begin{optionlist*}
+
+\cmditem{alternate}{form}{BCP47tag}
+
+A multiscript alternate to look for, specified by \opt{form} and \opt{BCP47tag}.
+
+\end{optionlist*}
+
+\end{ltxsyntax}
+%
+For example, to specify a multiscript select list for entries with \bibfield{langid} of <japanese> (or entries with no \bibfield{langid} field in a context where the active \opt{mslang} is the BCP47 language tag equivalent <ja-jp>).
+
+\begin{ltxexample}
+\DeclareMsselect{japanese}{
+ \alternate{transcription}{ja-hira}
+ \alternate{transliteration}{ja-latn}
+}
+\end{ltxexample}
+%
+This could also be specified as:
+
+\begin{ltxexample}
+\DeclareMsselect{ja-jp}{
+ \alternate{transcription}{ja-hira}
+ \alternate{transliteration}{ja-latn}
+}
+\end{ltxexample}
+%
+For example, consider the following data with two multiscript entryfields
+(the logic is the same for lists and names):
+\begin{lstlisting}[style=bibtex]{}
+@ARTICLE{mstest,
+ LANGID = {lang4},
+ MSFIELD1 = {Value1},
+ MSFIELD1_form1_lang1 = {Value2},
+ MSFIELD1_form2_lang2 = {Value3},
+ MSFIELD1_form4_lang4 = {Value4},
+ MSFIELD2 = {Value5},
+ MSFIELD2_form1_lang1 = {Value6},
+ MSFIELD2_form3_lang3 = {Value7},
+}
+\end{lstlisting}
+%
+the values selected to be printed would be:
+{\footnotesize
+\begin{ltxexample}
+ % Assume global defaults of form=form1, lang=lang1
+
+ \DeclareMsselect{lang4}{
+ \alternate{form2}{lang2}
+ }
+
+ % Explicit form/lang
+ \printfield[form1][lang1]{MSFIELD1} => "Value2"
+ \printfield[form3][lang3]{MSFIELD1} => ""
+ \printfield[form1][lang1]{MSFIELD2} => "Value6"
+
+ % global form/lang alternates exist for both fields
+ \printfield{MSFIELD1} => "Value2"
+ \printfield{MSFIELD2} => "Value6"
+
+ % refcontext can change defaults for form/lang
+ % but doesn't effect explicit form/lang
+ \newrefcontext[msform=form3,mslang=lang3]
+ \printfield[form1][lang1]{MSFIELD1} => "Value2"
+ \printfield[form3][lang3]{MSFIELD1} => ""
+ \printfield[form1][lang1]{MSFIELD2} => "Value6"
+
+ % MSFIELD2 has a value for refcontext default form3/lang3
+ \printfield{MSFIELD2} => "Value7"
+
+ % MSFIELD1 does not have an alternate for refcontext
+ % default form3/lang3 but due to \DeclareMsselect, we
+ % can use form2/lang2 for MSFIELD1
+ \printfield{MSFIELD1} => "Value3"
+
+ \newrefcontext[msform=form4,mslang=lang4]
+ \printfield{MSFIELD1} => "Value4"
+ % MSFIELD2 does not have an alternate for refcontext
+ % default form4/lang4 alternate for MSFIELD2, also there
+ % is no form2/lang2 in the select list for the LANGID
+ % of the entry and no form1/lang4 alternate
+ \printfield{MSFIELD2} => ""
+\end{ltxexample}
+}
+\section{Author Guide}
+\label{aut}
+
+This part of the manual documents the author interface of the \biblatex package. The author guide covers everything you need to know in order to write new citation and bibliography styles or localisation modules. You should read the user guide first before continuing with this part of the manual.
+
+\subsection{Overview}
+\label{aut:int}
+
+Before we get to the commands and facilities provided by \biblatex, we will have a look at some of its fundamental concepts. The \biblatex package uses auxiliary files in a special way. Most notably, the \file{bbl} file is used differently and there is no concept of a style-dependent \file{bst} file. With \latex's standard bibliographic facilities, a document includes any number of citation commands in the document body plus \cmd{bibliographystyle} and \cmd{bibliography}, usually towards the end of the document. The location of the former is arbitrary, the latter marks the spot where the list of references is to be printed:
+
+\begin{ltxexample}
+\documentclass{...}
+\begin{document}
+\cite{...}
+...
+\bibliographystyle{...}
+\bibliography{...}
+\end{document}
+\end{ltxexample}
+%
+Processing this files requires that a certain procedure be followed. This procedure is as follows:
+
+\begin{enumerate}
+
+\item Run \bin{latex}: On the first run, \cmd{bibstyle} and \cmd{bibdata} commands are written to the \file{aux} file, along with \cmd{citation} commands for all citations. At this point, the references are undefined because \latex is waiting for \bibtex to supply the required data. There is also no bibliography yet.
+
+\item Run \bin{bibtex}: \bibtex writes a \env{thebibliography} environment to the \file{bbl} file, supplying all entries from the \file{bib} file which were requested by the \cmd{citation} commands in the \file{aux} file.
+
+\item Run \bin{latex}: Starting with the second run, the \cmd{bibitem} commands in the \env{thebibliography} environment write one \cmd{bibcite} command for each bibliography entry to the \file{aux} file. These \cmd{bibcite} commands define the citation labels used by \cmd{cite}. However, the references are still undefined because the labels are not available until the end of this run.
+
+\item Run \bin{latex}: Starting with the third run, the citation labels are defined as the \file{aux} file is read in at the end of the preamble. All citations can now be printed.
+
+\end{enumerate}
+
+Note that all bibliographic data is written to the \file{bbl} file in the final format. The \file{bbl} file is read in and processed like any printable section of the document. For example, consider the following entry in a \file{bib} file:
+
+\begin{lstlisting}[style=bibtex]{}
+@Book{companion,
+ author = {Michel Goossens and Frank Mittelbach and Alexander Samarin},
+ title = {The LaTeX Companion},
+ publisher = {Addison-Wesley},
+ address = {Reading, Mass.},
+ year = {1994},
+}
+\end{lstlisting}
+%
+With the \path{plain.bst} style, \bibtex exports this entry to the \file{bbl} file as follows:
+
+\begin{ltxexample}
+\bibitem{companion}
+Michel Goossens, Frank Mittelbach, and Alexander Samarin.
+\newblock {\em The LaTeX Companion}.
+\newblock Addison-Wesley, Reading, Mass., 1994.
+\end{ltxexample}
+%
+By default, \latex generates numeric citation labels, hence \cmd{bibitem} writes lines such as the following to the \file{aux} file:
+
+\begin{ltxexample}
+\bibcite{companion}{1}
+\end{ltxexample}
+%
+Implementing a different citation style implies that more data has to be transferred via the \file{aux} file. With the \sty{natbib} package, for example, the \file{aux} file contains lines like this one:
+
+\begin{ltxexample}
+\bibcite{companion}{{1}{1994}{{Goossens et~al.}}{{Goossens, Mittelbach,
+and Samarin}}}
+\end{ltxexample}
+%
+The \biblatex package supports citations in any arbitrary format, hence citation commands need access to all bibliographic data. What this would mean within the scope of the procedure outlined above becomes obvious when looking at the output of the \sty{jurabib} package which also makes all bibliographic data available in citations:
+
+\begin{ltxexample}
+\bibcite{companion}{{Goossens\jbbfsasep Mittelbach\jbbstasep Samarin}%
+ {}{{0}{}{book}{1994}{}{}{}{}{Reading, Mass.\bpubaddr{}Addison-Wesley%
+ \bibbdsep{} 1994}}{{The LaTeX Companion}{}{}{2}{}{}{}{}{}}{\bibnf
+ {Goossens}{Michel}{M.}{}{}\Bibbfsasep\bibnf{Mittelbach}{Frank}{F.}%
+ {}{}\Bibbstasep\bibnf{Samarin}{Alexander}{A.}{}{}}{\bibtfont{The
+ LaTeX Companion}.\ \apyformat{Reading, Mass.\bpubaddr{}
+ Addison-Wesley\bibbdsep{} 1994}}}
+\end{ltxexample}
+%
+In this case, the contents of the entire \env{thebibliography} environment are effectively transferred via the \file{aux} file. The data is read from the \file{bbl} file, written to the \file{aux} file, read back from the \file{aux} file and then kept in memory. The bibliography itself is still generated as the \file{bbl} file is read in. The \biblatex package would also be forced to cycle all data through the \file{aux} file. This implies processing overhead and is also redundant because the data has to be kept in memory anyway.
+
+The traditional procedure is based on the assumption that the full bibliographic data of an entry is only required in the bibliography and that all citations use short labels. This makes it very effective in terms of memory requirements, but it also implies that it does not scale well. That is why \biblatex takes a different approach. First of all, the document structure is slightly different. Instead of using \cmd{bibliography} in the document body, database files are specified in the preamble with \cmd{addbibresource}, \cmd{bibliographystyle} is omitted entirely (all features are controlled by package options), and the bibliography is printed using \cmd{printbibliography}:
+
+\begin{ltxexample}
+\documentclass{...}
+\usepackage[...]{biblatex}
+\addbibresource{...}
+\begin{document}
+\cite{...}
+...
+\printbibliography
+\end{document}
+\end{ltxexample}
+%
+In order to streamline the whole procedure, \biblatex essentially employs the \file{bbl} file like an \file{aux} file, rendering \cmd{bibcite} obsolete. We then get the following procedure:
+
+\begin{enumerate}
+
+\item Run \bin{latex}: The first step is similar to the traditional procedure described above: \cmd{bibstyle} and \cmd{bibdata} commands are written to th \file{bcf} file, along with \cmd{citation} commands for all citations. We then wait for the backend to supply the required data.
+
+\item Run \bin{biber}: The backend supplies those entries from the \file{bib} file which were requested by the \cmd{citation} commands in the auxiliary file. However, it does not write a printable bibliography to the \file{bbl} file, but rather a structured representation of the bibliographic data. Just like an \file{aux} file, this \file{bbl} file does not print anything when read in. It merely puts data in memory.
+
+\item Run \bin{latex}: Starting with the second run, the \file{bbl} file is processed right at the beginning of the document body, just like an \file{aux} file. From this point on, all bibliographic data is available in memory so that all citations can be printed right away.\footnote{If the \opt{defernumbers} package option is enabled \biblatex uses an algorithm similar to the traditional procedure to generate numeric labels. In this case, the numbers are assigned as the bibliography is printed and then cycled through the backend auxiliary file. It will take an additional \latex run for them to be picked up in citations.} The citation commands have access to the complete bibliographic data, not only to a predefined label. The bibliography is generated from memory using the same data and may be filtered or split as required.
+
+\end{enumerate}
+
+Let's consider the sample entry given above once more:
+
+\begin{lstlisting}[style=bibtex]{}
+@Book{companion,
+ author = {Michel Goossens and Frank Mittelbach and Alexander Samarin},
+ title = {The LaTeX Companion},
+ publisher = {Addison-Wesley},
+ address = {Reading, Mass.},
+ year = {1994},
+}
+\end{lstlisting}
+%
+This entry is essentially exported in the following format:
+
+\begin{ltxexample}
+\entry{companion}{book}{}
+ \labelname{author}{3}{}{%
+ {{uniquename=0,hash=...}{Goossens}{G.}{Michel}{M.}{}{}{}{}}%
+ {{uniquename=0,hash=...}{Mittelbach}{M.}{Frank}{F.}{}{}{}{}}%
+ {{uniquename=0,hash=...}{Samarin}{S.}{Alexander}{A.}{}{}{}{}}%
+ }
+ \name{author}{3}{}{%
+ {{uniquename=0,hash=...}{Goossens}{G.}{Michel}{M.}{}{}{}{}}%
+ {{uniquename=0,hash=...}{Mittelbach}{M.}{Frank}{F.}{}{}{}{}}%
+ {{uniquename=0,hash=...}{Samarin}{S.}{Alexander}{A.}{}{}{}{}}%
+ }
+ \list{publisher}{1}{%
+ {Addison-Wesley}%
+ }
+ \list{location}{1}{%
+ {Reading, Mass.}%
+ }
+ \field{title}{The LaTeX Companion}
+ \field{year}{1994}
+\endentry
+\end{ltxexample}
+%
+As seen in this example, the data is presented in a structured format that resembles the structure of a \file{bib} file to some extent. At this point, no decision concerning the final format of the bibliography entry has been made. The formatting of the bibliography and all citations is controlled by \latex macros, which are defined in bibliography and citation style files.
+
+\subsection{Bibliography Styles}
+\label{aut:bbx}
+
+A bibliography style is a set of macros which print the entries in the bibliography. Such styles are defined in files with the suffix \file{bbx}. The \biblatex package loads the selected bibliography style file at the end of the package. Note that a small repertory of frequently used macros shared by several of the standard bibliography styles is included in \path{biblatex.def}. This file is loaded at the end of the package as well, prior to the selected bibliography style.
+
+\subsubsection{Bibliography Style Files}
+\label{aut:bbx:bbx}
+
+Before we go over the individual components of a bibliography style, consider this example of the overall structure of a typical \file{bbx} file:
+
+\begin{ltxexample}
+\ProvidesFile{example.bbx}[2006/03/15 v1.0 biblatex bibliography style]
+
+\defbibenvironment{bibliography}
+ {...}
+ {...}
+ {...}
+\defbibenvironment{shorthand}
+ {...}
+ {...}
+ {...}
+\InitializeBibliographyStyle{...}
+\DeclareBibliographyDriver{article}{...}
+\DeclareBibliographyDriver{book}{...}
+\DeclareBibliographyDriver{inbook}{...}
+...
+\DeclareBibliographyDriver{shorthand}{...}
+\endinput
+\end{ltxexample}
+%
+The main structure of a bibliography style file consists of the following commands:
+
+\begin{ltxsyntax}
+
+\cmditem{RequireBibliographyStyle}{style}
+
+This command is optional and intended for specialized bibliography styles built on top of a more generic style. It loads the bibliography style \path{style.bbx}.
+
+\cmditem{InitializeBibliographyStyle}{code}
+
+Specifies arbitrary \prm{code} to be inserted at the beginning of the bibliography, but inside the group formed by the bibliography. This command is optional. It may be useful for definitions which are shared by several bibliography drivers but not used outside the bibliography. Keep in mind that there may be several bibliographies in a document. If the bibliography drivers make any global assignments, they should be reset at the beginning of the next bibliography.
+
+\cmditem{DeclareBibliographyDriver}{entrytype}{code}
+
+Defines a bibliography driver. A <driver> is a macro which handles a specific entry type (when printing bibliography lists) or a specific named bibliography list (when printing bibliography lists). The \prm{entrytype} corresponds to the entry type used in \file{bib} files, specified in lowercase letters (see \secref{bib:typ}). The \prm{entrytype} argument may also be an asterisk. In this case, the driver serves as a fallback which is used if no specific driver for the entry type has been defined. The \prm{code} is arbitrary code which typesets all bibliography entries of the respective \prm{entrytype}. This command is mandatory. Every bibliography style should provide a driver for each entry type.
+
+\cmditem{DeclareBibliographyAlias}{alias}{entrytype}
+
+If a bibliography driver covers more than one entry type, this command may be used to define an alias where \prm{entrytype} is the name of a defined driver. This command is optional. The \prm{alias} argument may also be an asterisk. In this case, the \prm{entrytype} driver serves as a fallback which is used if no specific driver for an entry has been defined.
+
+Note that an alias declared with \cmd{DeclareBibliographyAlias} only <reroutes> the bibliography driver from \prm{alias} to \prm{entrytype}. Type-specific formatting directives still operate with the old \prm{alias} name. \cmd{DeclareBibliographyAlias} thus provides only a <soft> alias. If a complete alias is desired so that \prm{alias} and \prm{entrytype} are completely indistinguishable and use the same type-specific formatting, an approach with source mapping would be more appropriate (cf.~the mappings for \secref{bib:typ:als} in \secref{apx:maps:bibtex}, this would give a <hard> alias).
+
+\cmditem{DeclareBibliographyOption}[datatype]{key}[value]{code}
+
+This command defines additional preamble options in \keyval format. The \prm{key} is the option key. The \prm{code} is arbitrary \tex code to be executed whenever the option is used. The value passed to the option is passed on to the \prm{code} as |#1|. The optional \prm{value} is a default value to be used if the bare key is given without any value. This is useful for boolean switches.
+The \prm{datatype} is a the datatype for the option. If omitted, it defaults to <boolean>. For example, with a definition like the following:
+
+\begin{ltxexample}
+\DeclareBibliographyOption[boolean]{somekey}[true]{...}
+\end{ltxexample}
+%
+giving <\texttt{somekey}> without a value is equivalent to <\kvopt{somekey}{true}>. Valid \prm{datatype} values are defined in the default \biber Datamodel as:
+
+\begin{ltxexample}
+\DeclareDatamodelConstant[type=list]{optiondatatypes}{boolean,integer,string,xml}
+\end{ltxexample}
+
+\cmditem{DeclareTypeOption}[datatype]{key}[value]{code}
+
+Similar to \cmd{DeclareBibliographyOption} but defines options which are settable on a per"=type basis using the optional argument of \cmd{ExecuteBibliographyOptions} (see \secref{use:cfg:opt}). The \prm{code} is executed whenever \biblatex prepares the data of an entry of the type for which the option has been set for use by a citation command or a bibliography driver.
+
+\cmditem{DeclareEntryOption}[datatype]{key}[value]{code}
+
+Similar to \cmd{DeclareBibliographyOption} but defines options which are settable on a per"=entry basis in the \bibfield{options} field from \secref{bib:fld:spc}. The \prm{code} is executed whenever \biblatex prepares the data of the entry for use by a citation command or a bibliography driver.
+
+\cmditem{DeclareBiblatexOption}{scope,\dots}[datatype]{key}[value]{code}
+
+This command is a convenient interface to declare an option for several scopes at once. The \prm{scope} argument may be a comma"=separated list of scopes for which the option will be declared. Currently the scopes \opt{global}, \opt{type}, \opt{entry}, \opt{namelist} and \opt{name} are supported, the first three of which are equivalent to defining the option with \cmd{DeclareBibliographyOption}, \cmd{DeclareTypeOption} and \cmd{DeclareEntryOption}, respectively.
+
+\end{ltxsyntax}
+
+\subsubsection{Bibliography Environments}
+\label{aut:bbx:env}
+
+Apart from defining bibliography drivers, the bibliography style is also responsible for the environments which control the layout of the bibliography and bibliography lists. These environments are defined with \cmd{defbibenvironment}. By default, \cmd{printbibliography} uses the environment \opt{bibliography}. Here is a definition suitable for a bibliography style which does not print any labels in the bibliography:
+
+\begin{ltxexample}
+\defbibenvironment{bibliography}
+ {\list
+ {}
+ {\setlength{\leftmargin}{\bibhang}%
+ \setlength{\itemindent}{-\leftmargin}%
+ \setlength{\itemsep}{\bibitemsep}%
+ \setlength{\parsep}{\bibparsep}}}
+ {\endlist}
+ {\item}
+\end{ltxexample}
+%
+This definition employs a \env{list} environment with hanging indentation, using the \cmd{bibhang} length register provided by \biblatex. It allows for a certain degree of configurability by using \cmd{bibitemsep} and \cmd{bibparsep}, two length registers provided by \biblatex for this very purpose (see \secref{aut:fmt:len}). The \texttt{authoryear} and \texttt{authortitle} bibliography styles use a definition similar to this example.
+
+\begin{ltxexample}
+\defbibenvironment{bibliography}
+ {\list
+ {\printfield[labelnumberwidth]{labelnumber}}
+ {\setlength{\labelwidth}{\labelnumberwidth}%
+ \setlength{\leftmargin}{\labelwidth}%
+ \setlength{\labelsep}{\biblabelsep}%
+ \addtolength{\leftmargin}{\labelsep}%
+ \setlength{\itemsep}{\bibitemsep}%
+ \setlength{\parsep}{\bibparsep}}%
+ \renewcommand*{\makelabel}[1]{\hss##1}}
+ {\endlist}
+ {\item}
+\end{ltxexample}
+%
+Some bibliography styles print labels in the bibliography. For example, a bibliography style designed for a numeric citation scheme will print the number of every entry such that the bibliography looks like a numbered list. In the first example, the first argument to \cmd{list} was empty. In this example, we need it to insert the number, which is provided by \biblatex in the \bibfield{labelnumber} field. We also employ several length registers and other facilities provided by \biblatex, see \secref{aut:fmt:ich, aut:fmt:ilc} for details. The \texttt{numeric} bibliography style uses the definition given above. The \texttt{alphabetic} style is similar, except that \textsf{\texttt{labelnumber}} is replaced by \texttt{labelalpha} and \texttt{labelnumberwidth} by \texttt{labelalphawidth}.
+
+Bibliography lists are handled in a similar way. \cmd{printbiblist} uses the environment named after the bibliography list by default. A typical example is given below. See \secref{aut:fmt:ich, aut:fmt:ilc} for details on the length registers and facilities used in this example.
+
+\begin{ltxexample}
+\defbibenvironment{shorthand}
+ {\list
+ {\printfield[shorthandwidth]{shorthand}}
+ {\setlength{\labelwidth}{\shorthandwidth}%
+ \setlength{\leftmargin}{\labelwidth}%
+ \setlength{\labelsep}{\biblabelsep}%
+ \addtolength{\leftmargin}{\labelsep}%
+ \setlength{\itemsep}{\bibitemsep}%
+ \setlength{\parsep}{\bibparsep}%
+ \renewcommand*{\makelabel}[1]{##1\hss}}}
+ {\endlist}
+ {\item}
+\end{ltxexample}
+
+\subsubsection{Bibliography Drivers}
+\label{aut:bbx:drv}
+
+Before we go over the commands which form the data interface of the \biblatex package, it may be instructive to have a look at the structure of a bibliography driver. Note that the example given below is greatly simplified, but still functional. For the sake of readability, we omit several fields which may be part of a \bibtype{book} entry and also simplify the handling of those which are considered. The main point is to give you an idea of how a driver is structured. For information about the mapping of the \bibtex file format fields to \biblatex's data types, see \secref{bib:fld}.
+
+\begin{ltxexample}
+\DeclareBibliographyDriver{book}{%
+ \printnames{author}%
+ \newunit\newblock
+ \printfield{title}%
+ \newunit\newblock
+ \printlist{publisher}%
+ \newunit
+ \printlist{location}%
+ \newunit
+ \printfield{year}%
+ \finentry}
+\end{ltxexample}
+%
+The standard bibliography styles employ two bibliography macros \texttt{begentry} and \texttt{finentry}:
+
+\begin{ltxexample}
+\DeclareBibliographyDriver{<<entrytype>>}{%
+ \usebibmacro{begentry}
+ ...
+ \usebibmacro{finentry}}
+\end{ltxexample}
+%
+with the default definitions
+\begin{ltxexample}
+\newbibmacro*{begentry}{}
+\newbibmacro*{finentry}{\finentry}
+\end{ltxexample}
+%
+Use of these macros is recommended for easy hooks into the beginning and end of the driver.
+
+Returning to the driver for the \texttt{book} entrytype above, there is still one piece missing: the formatting directives used by \cmd{printnames}, \cmd{printlist}, and \cmd{printfield}. To give you an idea of what a formatting directive looks like, here are some fictional ones used by our sample driver. Field formats are straightforward, the value of the field is passed to the formatting directive as an argument which may be formatted as desired. The following directive will simply wrap its argument in an \cmd{emph} command:
+
+\begin{ltxexample}
+\DeclareFieldFormat{title}{\emph{#1}}
+\end{ltxexample}
+%
+List formats are slightly more complex. After splitting up the list into individual items, \biblatex will execute the formatting directive once for every item in the list. The item is passed to the directive as an argument. The separator to be inserted between the individual items in the list is also handled by the corresponding directive, hence we have to check whether we are in the middle of the list or at the end when inserting it.
+
+\begin{ltxexample}
+\DeclareListFormat{location}{%
+ #1%
+ \ifthenelse{\value{listcount}<\value{liststop}}
+ {\addcomma\space}
+ {}}
+\end{ltxexample}
+%
+Formatting directives for names are similar to those for literal lists.
+
+Names depend on the datamodel constant <nameparts> which has the default definition:
+
+\begin{ltxexample}
+\DeclareDatamodelConstant[type=list]{nameparts}
+ {prefix,family,suffix,given}
+\end{ltxexample}
+%
+This can be customised to add more name parts to deal with things like patronymics (see the example file \file{93-nameparts.tex}). This needs an extended name format for data sources since the standard \bibtex name format is very limited. \biblatexml (\secref{apx:biblatexml}) handles this natively and there is an extended name format which can handle custom nameparts when using \biber (see \secref{use:enf}).
+
+Inside name formats, the <nameparts> constant declaration makes available two or three macros for each name part defined in the datamodel:
+
+\begin{ltxexample}
+\namepart<namepart> \% The full <namepart>
+\namepart<namepart>i \% The initials of the <namepart>
+\namepart<namepart>un \% Numeric value indicating uniqueness level for <namepart>
+\end{ltxexample}
+%
+\cmd{namepart<namepart>un} only exists if the package option \opt{uniquename} is not set to <false> and can take the following values.
+
+\begin{argumentlist}{00}
+\item[0] <namepart> was not used in disambiguating the name (because \opt{disambiguation=none} was set in \cmd{DeclareUniquenameTemplate}, see \secref{aut:cav:amb}). In this case the style should decide what to print for this <namepart>
+\item[1] Initials only should be printed for <namepart> to ensure uniqueness according to the \opt{uniquename} package option setting
+\item[2] The full <namepart> should be printed to ensure uniqueness according to the \opt{uniquename} package option setting
+\end{argumentlist}
+
+Note these per-namepart uniqueness macros are essentially an override of the \opt{uniquename} value (see \secref{aut:aux:tst}) for the name as a whole. Styles can choose to use either the less granular \opt{uniquename} value or the more detailed per-namepart values. Usually the general \opt{uniquename} value is enough for ordinary Western names but the more granular information per-namepart is provided to allow sophisticated name uniqueness processing for more complex name schemata.
+
+For multiscript name lists, these macros refer to the particular name list multiscript alternate being printed. It is also useful to be able to access alternates of the particular name list item being printed and so all available alternates of the current name list item are available in name formats via macros:
+
+\begin{ltxexample}
+\namepart<namepart><msform><mslang>
+\end{ltxexample}
+%
+Note that <mslang> is a BCP47 tag which may contain hyphens and so raw macro use will not work. It is therefore safer to refer to these macros with \cmd{csuse} e.g.:
+
+\begin{ltxexample}
+\csuse{namepartfamilydefaulten-us}
+\end{ltxexample}
+%
+Also note that any \sty{babel} shorthands in the value of these macros will not work as they are automatically defined in the preamble.
+%
+The name formatting directive is executed once for each name in the name list. Here is a simplified example---the standard name formats are more intricate:
+
+\begin{ltxexample}
+\DeclareNameFormat{author}{%
+ \ifthenelse{\value{listcount}=1}
+ {\namepartfamily%
+ \ifdefvoid{\namepartgiven}{}{\addcomma\space\namepartgiven}}
+ {\ifdefvoid{\namepartgiven}{}{\namepartgiven\space}%
+ \namepartfamily}%
+ \ifthenelse{\value{listcount}<\value{liststop}}
+ {\addcomma\space}
+ {}}
+\end{ltxexample}
+%
+The above directive reverses the name of the first author («Family, Given») and prints the remaining names in their regular sequence («Given Family»). Note that the only component which is guaranteed to be available is the family name, hence we have to check which parts of the name are actually present. If a certain name part is not available, the corresponding macro will be empty. As with directives for literal lists, the separator to be inserted between the individual items in the name list is also handled by the formatting directive, hence we have to check whether we are in the middle of the list or at the end when inserting it. This is what the second \cmd{ifthenelse} test does. See also \secref{aut:bib:fmt}.
+
+A similar output that also respects the \cmd{multinamedelim} and \cmd{finalnamedelim} commands as well as the <prefix> and <suffix> name parts can be achieved with
+\begin{ltxexample}
+\DeclareNameAlias{author}{family-given/given-family}
+\end{ltxexample}
+
+\subsubsection{Special Fields}
+\label{aut:bbx:fld}
+
+The following lists and fields are used by \biblatex to pass data to bibliography drivers and citation commands. They are not used in \file{bib} files but defined automatically by the package. From the perspective of a bibliography or citation style, they are not different from the fields in a \file{bib} file.
+
+\paragraph{Generic Fields}
+\label{aut:bbx:fld:gen}
+
+\begin{fieldlist}
+
+\fielditem{$<$datetype$>$dateunspecified}{string}
+
+If $<$datetype$>$date held an \acr{ISO8601-2} 4.3 <unspecified>, this field will be set to one of \opt{yearindecade}, \opt{yearincentury}, \opt{monthinyear}, \opt{dayinmonth} or \opt{dayinyear} which specifies the granularity of the unspecified information. These strings can be tested for and along with the date ranges which are automatically created for such <unspecified> dates, a style may choose to format the date in a special way. See \secref{bib:use:dat}. For example, an entry with dates such as:
+
+\begin{lstlisting}[style=bibtex]{}
+@book{key,
+ date = {19uu},
+ origdate = {199u}
+}
+\end{lstlisting}
+%
+would result in the same information in the \file{.bbl} as:
+\begin{lstlisting}[style=bibtex]{}
+@book{key,
+ date = {1900/1999},
+ origdate = {1990/1999}
+}
+\end{lstlisting}
+%
+but would additionally have the field \bibfield{dateunspecified} set to <yearincentury> and \bibfield{origdateunspecified} set to <yearindecade>. This information could be used to render the \bibfield{date} as perhaps <20th century> and \bibfield{origdate} as <The 1990s>, information which cannot be derived from the date ranges alone. Since such auto-generated ranges have known values, given the <unspecified> meta-information, it is relatively easy to use the range values to format special cases. While the standard styles do not do this, examples are given in the file \file{96-dates.tex}.
+
+\fielditem{entrykey}{string}
+
+The entry key of an item in the \file{bib} file. This is the string used by \biblatex and the backend to identify an entry in the \file{bib} file.
+
+Note that the set of characters allowed and usable in the string for \bibfield{entrykey} depends on the backend (\biber, \bibtex) as well as the \latex engine (\pdflatex, \lualatex, \xelatex).
+Generally, \acr{US-ASCII}-letters (\texttt{a-z}, \texttt{A-Z}) and numbers (\texttt{0-9}) are safe, so are the punctuation characters full stop (\texttt{.}) and solidus (\texttt{/}). The punctuation characters \texttt{-\_:;!?} are also safe even if they are made active by \sty{babel}/\sty{polyglossia}. If a Unicode engine is used, non-\acr{US-ASCII} characters are also acceptable.
+Curly braces (\texttt{\{\}}), commas, spaces, backslashes (\texttt{\textbackslash}), hashes (\texttt{\#}), percent characters (\texttt{\%}) and tildes (\texttt{\textasciitilde}) are always forbidden. \biber additionally forbids round brackets (\texttt{()}), quotation marks (\texttt{\textquotedbl}, \texttt{\textquotesingle}), and the equals sign (\texttt{=}).
+The \bibfield{entrykey} is case sensitive, but it is not recommended to exploit that fact too much by introducing two different entries whose key differs only in capitalisation (\eg\ \texttt{sigfridsson} and \texttt{Sigfridsson}).
+For full portability it is advisable to stick to a scheme of lowercase (and if so desired uppercase) \acr{US-ASCII}-letters, numbers and a small set of acceptable punctuation characters, say \texttt{.:-}.
+
+\fielditem{childentrykey}{string}
+
+This field is no longer necessary or recommended.\DeprecatedMark For backwards
+compatibility, it is merely a copy of the \bibfield{entrykey} field in any
+set children.
+
+\fielditem{labelnamesource}{literal}
+
+Holds the name of the field used to populate \bibfield{labelname},
+determined by \cmd{DeclareLabelname}.
+
+\fielditem{labeltitlesource}{literal}
+
+Holds the name of the field used to populate \bibfield{labeltitle},
+determined by \cmd{DeclareLabeltitle}.
+
+\fielditem{labeldatesource}{literal}
+
+Holds one of:
+
+\begin{itemize}
+\item The prefix coming before <date> of the date field name chosen by
+ \cmd{DeclareLabeldate}
+\item The name of a field
+\item A literal or localisation string
+\end{itemize}
+%
+Normally holds the prefix coming before <date> of the date field name chosen by \cmd{DeclareLabeldate}. For example, if the labeldate field is \bibfield{eventdate}, then \bibfield{labeldatesource} will be <event>. In case \cmd{DeclareLabeldate} selects the \bibfield{date} field, then \bibfield{labeldatesource} will be defined but will be an empty string as the prefix coming before <date> in the date label name is empty. This is so that the contents of \bibfield{labeldatesource} can be used in constructing references to the field which \cmd{DeclareLabeldate} chooses. Since \cmd{DeclareLabeldate} can also select literal strings for fallbacks, \bibfield{labeldatesource} may not refer to a field or may be undefined. Bear in mind that \cmd{DeclareLabeldate} can also be used to select non-date fields as a fallback and so \bibfield{labeldatesource} might contain a field name. So, in summary, the rules are
+
+\begin{ltxexample}
+\iffieldundef{labeldatesource}
+ {}% labeldate package option is not set
+ {\iffieldundef{\thefield{labeldatesource}year}
+ % \DeclareLabeldate resolved to either a literal/localisation
+ % string or a non-date field since
+ % if a date is defined by a date field, there is
+ % at least a year
+ {\iffieldundef{\thefield{labeldatesource}}
+ {}% \DeclareLabeldate resolved to a literal/localisation string
+ {}% \DeclareLabeldate resolved to a non-date field
+ }
+ {} % \DeclareLabeldate resolved a date field name prefix like "" or "orig"
+ }
+\end{ltxexample}
+
+\fielditem{entrytype}{string}
+
+The entry type (\bibtype{book}, \bibtype{inbook}, etc.), given in lowercase letters.
+
+\fielditem{childentrytype}{string}
+
+This field is no longer necessary or recommended.\DeprecatedMark For backwards
+compatibility, it is merely a copy of the \bibfield{entrytype} field in any
+set children.
+
+\fielditem{entrysetcount}{integer}
+
+This field holds an integer indicating the position of a set member in the entry set (starting at \texttt{1}). This field is only available in the subentries of an entry set.
+
+\fielditem{hash}{string}
+
+This field is special in that it is only available locally in name formatting directives. It holds a hash string which uniquely identifies individual names in a name list. This information is available for all names in all name lists. See also \bibfield{namehash} and \bibfield{fullhash}.
+
+\fielditem{namehash}{string}
+
+A hash string which uniquely identifies the \bibfield{labelname} list. This is useful for recurrence checks. For example, a citation style which replaces recurrent authors or editors with a string like <idem> could save the \bibfield{namehash} field with \cmd{savefield} and use it in a comparison with \cmd{iffieldequals} later (see \secref{aut:aux:dat, aut:aux:tst}). The \bibfield{namehash} is derived from the truncated \bibfield{labelname} list, \ie it is responsive to \opt{maxcitenames} and \opt{mincitenames}. See also \bibfield{hash} and \bibfield{fullhash}.
+
+\fielditem{bibnamehash}{string}
+
+As \bibfield{namehash} but responsive to \opt{maxbibnames} and
+\opt{minbibnames}. This is not used in standard styles but may be used to
+make tests in bibliography lists (such as those used to determine whether
+dashes should replace repeated authors) behave differently.
+
+\fielditem{$<$namelist$><$msform$><$mslang$>$namehash}{string}
+
+As \bibfield{namehash} for the name list <namelist> with multiscript form
+<msform> and multiscript language <mslang>. For example <\texttt{authortranslationdenamehash}>.
+
+\fielditem{$<$namelist$><$msform$><$mslang$>$bibnamehash}{string}
+
+As \bibfield{bibnamehash} for the name list <namelist> with multiscript form
+<msform> and multiscript language <mslang>. For example <\texttt{authortransliterationru-cyrlbibnamehash}>.
+
+\fielditem{fullhash}{string}
+
+A hash string which uniquely identifies the \bibfield{labelname} list. This fields differs from \bibfield{namehash} in two details: 1) The \bibfield{shortauthor} and \bibfield{shorteditor} lists are ignored when generating the hash. 2) The hash always refers to the full list, ignoring \opt{maxnames} and \opt{minnames}. See also \bibfield{hash} and \bibfield{namehash}.
+
+\fielditem{$<$namelist$><$msform$><$mslang$>$fullhash}{string}
+
+As \bibfield{fullhash} for the name list <namelist> with multiscript form
+<msform> and multiscript language <mslang>. For example <\texttt{authortranslationdefullhash}>.
+
+\listitem{pageref}{literal}
+
+If the \opt{backref} package option is enabled, this list holds the page numbers of the pages on which the respective bibliography entry is cited. If there are \env{refsection} environments in the document, the back references are local to the reference sections.
+
+\fielditem{sortinit}{literal}
+
+This field holds the initial character of the information used during sorting.
+
+\fielditem{sortinithash}{string}
+
+This field holds a hash of the (locale-specific) Unicode Collation Algorithm primary weight of the first extended grapheme cluster (essentially the first character) of the string used during sorting. This is useful when subdividing the bibliography alphabetically and is used internally by \cmd{bibinitsep} (see \secref{use:fmt:len}).
+
+\fielditem{clonesourcekey}{string}
+
+This field holds the entry key of the entry from which an entry was cloned. Clones are created for
+entries which are mentioned in \bibfield{related} fields as part of related entry processing, for example.
+
+\fielditem{urlraw}{verbatim}
+
+This is the unencoded, raw version of any \bibfield{url}. This is intended for use when the display version and clickable link version of a URL are different. This can be the case when the URL contains special or Unicode characters. In the case where no such characters occur, may be identical to the \bibfield{url}.
+\end{fieldlist}
+
+\paragraph{Fields for Use in Citation Labels}
+\label{aut:bbx:fld:lab}
+
+\begin{fieldlist}
+
+\fielditem{labelalpha}{literal}
+
+A label similar to the labels generated by the \path{alpha.bst} style of traditional \bibtex. This default label consists of initials drawn from the \bibfield{labelname} list plus the last two digits of the publication year. The \bibfield{label} field may be used to override its non"=numeric portion. If the \bibfield{label} field is defined, \biblatex will use its value and append the last two digits of the publication year when generating \bibfield{labelalpha}. The \bibfield{shorthand} field may be used to override the entire label. If defined, \bibfield{labelalpha} is the \bibfield{shorthand} rather than an automatically generated label. Users can specify a template used to construct the alphabetic label (see \secref{aut:ctm:lab}) and the default template mirrors the format mentioned for bibtex above. A complete <alphabetic> label consists of the fields \bibfield{labelalpha} plus \bibfield{extraalpha}. Note that the \bibfield{labelalpha} and \bibfield{extraalpha} fields need to be requested with the package option \opt{labelalpha} (\secref{use:opt:pre:int}). See also \bibfield{extraalpha} as well as \cmd{labelalphaothers} in \secref{use:fmt:fmt}.
+
+\fielditem{extraalpha}{integer}
+
+The <alphabetic> citation scheme usually requires a letter to be appended to the label if the bibliography contains two or more works by the same author which were all published in the same year. In this case, the \bibfield{extraalpha} field holds an integer which may be converted to a letter with \cmd{mknumalph} or formatted in some other way. This field is similar to the role of \bibfield{extradate} in the author"=year scheme. A complete <alphabetic> label consists of the fields \bibfield{labelalpha} plus \bibfield{extraalpha}. Note that the \bibfield{labelalpha} and \bibfield{extraalpha} fields need to be requested with the package option \opt{labelalpha}, see \secref{use:opt:pre:int} for details. See also \bibfield{labelalpha} as well as \cmd{labelalphaothers} in \secref{use:fmt:fmt}. Table \ref{use:opt:tab1} summarises the various \opt{extra*} disambiguation counters and what they track.
+
+\listitem{labelname}{name}
+
+The name to be printed in citations. This list is a copy of either the \bibfield{shortauthor}, the \bibfield{author}, the \bibfield{shorteditor}, the \bibfield{editor}, or the \bibfield{translator} list, which are normally checked for in this order. If no authors and editors are available, this list is undefined. Note that this list is also responsive to the \opt{use$<$name$>$}, options, see \secref{use:opt:bib}. Citation styles should use this list when printing the name in a citation. This list is provided for convenience only and does not carry any additional meaning.
+This field may be customized. See \secref{aut:ctm:fld} for details.
+
+\fielditem{extraname}{integer}
+
+Holds a count of the number of bibliography entries within a refsection which derive from the same \bibfield{labelname} list. This counter takes account of \opt{uniquename} settings (see \secref{use:opt:pre:int}). While not used by any standard styles, this field is useful in styles which wish to number bibliography entries on a per-\bibfield{labelname} basis. This field will only exist if there is a \bibfield{labelname}. The \bibfield{extraname} counter is related to, but conceptually different from \cmd{ifsingletitle} (see \secref{use:opt:pre:int} and \secref{aut:aux:tst}).
+
+\fielditem{labelnumber}{literal}
+
+The number of the bibliography entry, as required by numeric citation schemes. If the \bibfield{shorthand} field is defined, \biblatex does not assign a number to the respective entry. In this case \bibfield{labelnumber} is the shorthand rather than a number. Numeric styles must use the value of this field instead of a counter. Note that this field needs to be requested with the package option \opt{labelnumber}, see \secref{use:opt:pre:int} for details. Also see the package option \opt{defernumbers} in \secref{use:opt:pre:gen}.
+
+\fielditem{labelprefix}{literal}
+
+If the \opt{labelprefix} option of \cmd{newrefcontext} has been set in order to prefix all entries in a subbibliography with a fixed string, this string is available in the \bibfield{labelprefix} field of all affected entries. If no prefix has been set, the \bibfield{labelprefix} field of the respective entry is undefined. See the \opt{labelprefix} option of \cmd{newrefcontext} in \secref{use:bib:context} for details. If the \bibfield{shorthand} field is defined, \biblatex does not assign the prefix to the \bibfield{labelprefix} field of the respective entry. In this case, the \bibfield{labelprefix} field is undefined.
+
+\fielditem{labeltitle}{literal}
+
+The printable title of a work. In some circumstances, a style might need to choose a title from a list of a possible title fields. For example, citation styles printing short titles may want to print the \bibfield{shorttitle} field if it exists but otherwise print the \bibfield{title} field. The list of fields to be considered when constructing \bibfield{labeltitle} may be customized. See \secref{aut:ctm:fld} for details. Note that the \bibfield{extratitle} field needs to be requested with the package option \opt{labeltitle}, see \secref{use:opt:pre:int} for details. See also \bibfield{extratitle}. Note also that the \bibfield{extratitleyear} field needs to be requested with the package option \opt{labeltitleyear}. See also \bibfield{extratitleyear}.
+
+\fielditem{extratitle}{integer}
+
+It is sometimes useful, for example in author"=title citation schemes, to be able to disambiguate works with the same title. For works by the same \bibfield{labelname} with the same \bibfield{labeltitle}, the \bibfield{extratitle} field holds an integer which may be converted to a letter with \cmd{mknumalph} or formatted in some other way (or it can be merely used as a flag to say that some other field such as a date should be used in conjunction with the \bibfield{labeltitle} field). This field is undefined if there is only one work with the same \bibfield{labeltitle} by the same \bibfield{labelname} in the bibliography. Note that the \bibfield{extratitle} field needs to be requested with the package option \opt{labeltitle}, see \secref{use:opt:pre:int} for details. See also \bibfield{labeltitle}. Table \ref{use:opt:tab1} summarises the various \opt{extra*} disambiguation counters and what they track.
+
+\fielditem{extratitleyear}{integer}
+
+It is sometimes useful, for example in author"=title citation schemes, to be able to disambiguate works with the same title in the same year but with no author. For works with the same \bibfield{labeltitle} and with the same \bibfield{labelyear}, the \bibfield{extratitleyear} field holds an integer which may be converted to a letter with \cmd{mknumalph} or formatted in some other way (or it can be merely used as a flag to say that some other field such as a publisher should be used in conjunction with the \bibfield{labelyear} field). This field is undefined if there is only one work with the same \bibfield{labeltitle} and \bibfield{labelyear} in the bibliography. Note that the \bibfield{extratitleyear} field needs to be requested with the package option \opt{labeltitleyear}, see \secref{use:opt:pre:int} for details. See also \bibfield{labeltitleyear}. Table \ref{use:opt:tab1} summarises the various \opt{extra*} disambiguation counters and what they track.
+
+\fielditem{labelyear}{literal}
+
+The year of the date field selected by \cmd{DeclareLabeldate} (\secref{aut:ctm:fld}) or the \bibfield{year} field, for use in author-year labels. A complete author-year label consists of the fields \bibfield{labelyear} plus \bibfield{extradate}. Note that the \bibfield{labelyear} and \bibfield{extradate} fields need to be requested with the package option \opt{labeldateparts}, see \secref{use:opt:pre:int} for details. See also \bibfield{extradate}.
+
+\fielditem{labelendyear}{literal}
+
+The end year of the date field selected by \cmd{DeclareLabeldate} (\secref{aut:ctm:fld}) if the selected date is a range.
+
+\fielditem{labelmonth}{datepart}
+
+The month of the date field selected by \cmd{DeclareLabeldate} (\secref{aut:ctm:fld}), or the \bibfield{month} field for use in author-year labels. Note that the \bibfield{labelmonth} field needs to be requested with the package option \opt{labeldateparts}, see \secref{use:opt:pre:int} for details.
+
+\fielditem{labelendmonth}{datepart}
+
+The end month of the date field selected by \cmd{DeclareLabeldate} (\secref{aut:ctm:fld}) if the selected date is a range.
+
+\fielditem{labelday}{datepart}
+
+The month of the date field selected by \cmd{DeclareLabeldate} (\secref{aut:ctm:fld}) for use in author-year labels. Note that the \bibfield{labelday} field needs to be requested with the package option \opt{labeldateparts}, see \secref{use:opt:pre:int} for details.
+
+\fielditem{labelendday}{datepart}
+
+The end day of the date field selected by \cmd{DeclareLabeldate} (\secref{aut:ctm:fld}) if the selected date is a range.
+
+\fielditem{extradate}{integer}
+
+The author"=year citation scheme usually requires a letter to be appended to the year if the bibliography contains two or more works by the same author (actually the \bibfield{labelname}, which is usually the author by default but which need not be) which were all published in the same year. In this case, the \bibfield{extradate} field holds an integer which may be converted to a letter with \cmd{mknumalph} or formatted in some other way. This field is undefined if there is only one work by the author in the bibliography or if all works by the author have different publication years. A complete author-year label consists of the fields \bibfield{labelyear} plus \bibfield{extradate}. Note that the \bibfield{labelyear} and \bibfield{extradate} fields need to be requested with the package option \opt{labeldateparts}, see \secref{use:opt:pre:int} for details. See also \bibfield{labelyear}. Table \ref{use:opt:tab1} summarises the various \opt{extra*} disambiguation counters and what they track. Note that \biblatex allows a generalisation of this behaviour and the default context for \bibfield{extradate} disambiguation can be changed to allow other contexts than the author. The default will fall back to the \bibfield{labeltitle} if there is no \bibfield{labelname} (which is usually the author). See \cmd{DeclareExtradateContext} in \secref{aut:ctm:fld} to customise the \bibfield{extradate} context.
+
+\fielditem{extradatescope}{literal}
+
+This field contains the name of the most specific date part which determined the value of \bibfield{extradate}. It is not used by the standard styles but may be useful in controlling the placement of the \bibfield{extradate} field value. For example, if two works by the same author with dates <2020-05-04> and <2020-06-04> were disambiguated by \bibfield{extradate}, then \bibfield{extradatascope} would contain <labelyear> for both entries as the most specific difference is the (label)year. If the dates were <2020-05-04> and <2020-05-02>, then \bibfield{extradatascope} would contain <labelmonth>. See also \cmd{DeclareExtradate} (\secref{aut:ctm:fld}) which describes how to change the scope used to track dates.
+
+\end{fieldlist}
+
+\paragraph{Date Component Fields}
+\label{aut:bbx:fld:dat}
+
+Note that it is possible to define new date fields in the datamodel which behave exactly like the default data model date fields described in this section.
+
+See \tabref{aut:bbx:fld:tab1} for an overview of how the date fields in \file{bib} files are related to the date fields provided by the style interface. When testing for a field like \bibfield{origdate} in a style, use code like:
+
+\begin{ltxcode}
+<<\iffieldundef>>{orig<<year>>}{...}{...}
+\end{ltxcode}
+%
+This will tell you if the corresponding date is defined at all. This test:
+
+\begin{ltxcode}
+<<\iffieldundef>>{orig<<endyear>>}{...}{...}
+\end{ltxcode}
+%
+will tell you if the corresponding date is defined and a (fully specified) range. This test:
+
+\begin{ltxcode}
+<<\iffieldequalstr>>{orig<<endyear>>}{}{...}{...}
+\end{ltxcode}
+%
+will tell you if the corresponding date is defined and an open"=ended range. Open"=ended ranges are indicated by an empty \texttt{endyear} component (as opposed to an undefined \texttt{endyear} component). See \secref{bib:use:dat} and \tabref{bib:use:tab1} on page~\pageref{bib:use:tab1} for further examples.
+
+\begingroup
+\tablesetup
+\begin{longtable}[l]{%
+ @{}V{0.15\textwidth}%
+ @{}V{0.4\textwidth}%
+ @{}V{0.3\textwidth}%
+ @{}V{0.2\textwidth}@{}}
+\caption{Date Interface}
+\label{aut:bbx:fld:tab1}
+\endfirsthead
+\caption[]{Date Interface (cont'd)}
+\endhead
+\toprule
+\multicolumn{2}{@{}H}{\file{bib} File} &
+\multicolumn{2}{H}{Data Interface} \\
+\cmidrule(r){1-2}\cmidrule(l){3-4}
+\multicolumn{1}{@{}H}{Field} &
+\multicolumn{1}{H}{Value (Example)} &
+\multicolumn{1}{H}{Field} &
+\multicolumn{1}{H}{Value (Example)} \\
+\cmidrule{1-1}\cmidrule(lr){2-2}\cmidrule(l){3-3}\cmidrule(l){4-4}
+date & 1988 & day & undefined \\
+ & & month & undefined \\
+ & & year & 1988 \\
+ & & yeardivision & undefined \\
+ & & endday & undefined \\
+ & & endmonth & undefined \\
+ & & endyear & undefined \\
+ & & endyeardivision & undefined \\
+ & & hour & undefined \\
+ & & minute & undefined \\
+ & & second & undefined \\
+ & & timezone & undefined \\
+ & & endhour & undefined \\
+ & & endminute & undefined \\
+ & & endsecond & undefined \\
+ & & endtimezone & undefined \\
+date & 1997/ & day & undefined \\
+ & & month & undefined \\
+ & & year & 1997 \\
+ & & yeardivision & undefined \\
+ & & endday & undefined \\
+ & & endmonth & undefined \\
+ & & endyear & empty \\
+ & & endyeardivision & undefined \\
+ & & hour & undefined \\
+ & & minute & undefined \\
+ & & second & undefined \\
+ & & timezone & undefined \\
+ & & endhour & undefined \\
+ & & endminute & undefined \\
+ & & endsecond & undefined \\
+ & & endtimezone & undefined \\
+urldate & 2009-01-31 & urlday & 31 \\
+ & & urlmonth & 01 \\
+ & & urlyear & 2009 \\
+ & & urlyeardivision & undefined \\
+ & & urlendday & undefined \\
+ & & urlendmonth & undefined \\
+ & & urlendyear & undefined \\
+ & & urlendyeardivision & undefined \\
+ & & urlhour & undefined \\
+ & & urlminute & undefined \\
+ & & urlsecond & undefined \\
+ & & urltimezone & undefined \\
+ & & urlendhour & undefined \\
+ & & urlendminute & undefined \\
+ & & urlendsecond & undefined \\
+ & & urlendtimezone & undefined \\
+urldate & 2009-01-31T15:34:04Z & urlday & 31 \\
+ & & urlmonth & 01 \\
+ & & urlyear & 2009 \\
+ & & urlyeardivision & undefined \\
+ & & urlendday & undefined \\
+ & & urlendmonth & undefined \\
+ & & urlendyear & undefined \\
+ & & urlendyeardivision & undefined \\
+ & & urlhour & 15 \\
+ & & urlminute & 34 \\
+ & & urlsecond & 04 \\
+ & & urltimezone & Z \\
+ & & urlendhour & undefined \\
+ & & urlendminute & undefined \\
+ & & urlendsecond & undefined \\
+ & & urlendtimezone & undefined \\
+urldate & 2009-01-31T15:34:04+05:00 & urlday & 31 \\
+ & & urlmonth & 01 \\
+ & & urlyear & 2009 \\
+ & & urlyeardivision & undefined \\
+ & & urlendday & undefined \\
+ & & urlendmonth & undefined \\
+ & & urlendyear & undefined \\
+ & & urlendyeardivision & undefined \\
+ & & urlhour & 15 \\
+ & & urlminute & 34 \\
+ & & urlsecond & 04 \\
+ & & urltimezone & +0500 \\
+ & & urlendhour & undefined \\
+ & & urlendminute & undefined \\
+ & & urlendsecond & undefined \\
+ & & urlendtimezone & undefined \\
+urldate & \parbox[t]{0.4\textwidth}{2009-01-31T15:34:04/\\2009-01-31T16:04:34}& urlday & 31 \\
+ & & urlmonth & 1 \\
+ & & urlyear & 2009 \\
+ & & urlyeardivision & undefined \\
+ & & urlendday & 31 \\
+ & & urlendmonth & 1 \\
+ & & urlendyear & 2009 \\
+ & & urlendyeardivision & undefined \\
+ & & urlhour & 15 \\
+ & & urlminute & 34 \\
+ & & urlsecond & 4 \\
+ & & urltimezone & floating \\
+ & & urlendhour & 16 \\
+ & & urlendminute & 4 \\
+ & & urlendsecond & 34 \\
+ & & urlendtimezone & floating \\
+origdate & 2002-21/2002-23 & origday & undefined \\
+ & & origmonth & 01 \\
+ & & origyear & 2002 \\
+ & & origyeardivision & spring \\
+ & & origendday & undefined \\
+ & & origendmonth & 02 \\
+ & & origendyear & 2002 \\
+ & & origendyeardivision & autumn \\
+ & & orighour & undefined \\
+ & & origminute & undefined \\
+ & & origsecond & undefined \\
+ & & origtimezone & undefined \\
+ & & origendhour & undefined \\
+ & & origendminute & undefined \\
+ & & origendsecond & undefined \\
+ & & origendtimezone & undefined \\
+eventdate & 1995-01-31/1995-02-05 & eventday & 31 \\
+ & & eventmonth & 01 \\
+ & & eventyear & 1995 \\
+ & & eventyeardivision & undefined \\
+ & & eventendday & 05 \\
+ & & eventendmonth & 02 \\
+ & & eventendyear & 1995 \\
+ & & eventendyeardivision & undefined \\
+ & & eventhour & undefined \\
+ & & eventminute & undefined \\
+ & & eventsecond & undefined \\
+ & & eventtimezone & undefined \\
+ & & eventendhour & undefined \\
+ & & eventendminute & undefined \\
+ & & eventendsecond & undefined \\
+ & & eventendtimezone & undefined \\
+\bottomrule
+%\end{tabularx}
+\end{longtable}
+\endgroup
+\begin{fieldlist}
+
+\fielditem{hour}{datepart}
+
+This field holds the hour component of the \bibfield{date} field. If the date is a range, it holds the hour component of the start date.
+
+\fielditem{minute}{datepart}
+
+This field holds the minute component of the \bibfield{date} field. If the date is a range, it holds the minute component of the start date.
+
+\fielditem{second}{datepart}
+
+This field holds the second component of the \bibfield{date} field. If the date is a range, it holds the second component of the start date.
+
+\fielditem{timezone}{datepart}
+
+This field holds the timezone component of the \bibfield{date} field. If the date is a range, it holds the timezone component of the start date.
+
+\fielditem{day}{datepart}
+
+This field holds the day component of the \bibfield{date} field. If the date is a range, it holds the day component of the start date.
+
+\fielditem{month}{datepart}
+
+This field is the \bibfield{month} as given in the database file or it holds the month component of the \bibfield{date} field. If the date is a range, it holds the month component of the start date.
+
+\fielditem{year}{datepart}
+
+This field is the \bibfield{year} as given in the database file or it holds the year component of the \bibfield{date} field. If the date is a range, it holds the year component of the start date.
+
+\fielditem{yeardivision}{datepart}
+
+This field holds the year division (season, quarter, quadrimester etc.) component of the \bibfield{date} field as specified by \acr{ISO8601-2} 4.8 (\secref{bib:use:dat}). It contains a localisation string (\secref{aut:lng:key:dt}). If the date is a range, it holds the year division component of the start date.
+
+\fielditem{season}{datepart}\DeprecatedMark
+
+This field holds the season component of the \bibfield{date} field as specified by \acr{ISO8601-2} 4.8 (\secref{bib:use:dat}). It contains a season localisation string (\secref{aut:lng:key:dt}). If the date is a range, it holds the season component of the start date. This is deprecated in favour of \bibfield{yeardivision} which is more generalised.
+
+\fielditem{endhour}{datepart}
+
+If the date specification in the \bibfield{date} field is a range, this field holds the hour component of the end date.
+
+\fielditem{endminute}{datepart}
+
+If the date specification in the \bibfield{date} field is a range, this field holds the minute component of the end date.
+
+\fielditem{endsecond}{datepart}
+
+If the date specification in the \bibfield{date} field is a range, this field holds the second component of the end date.
+
+\fielditem{endtimezone}{datepart}
+
+If the date specification in the \bibfield{date} field is a range, this field holds the timezone component of the end date.
+
+\fielditem{endday}{datepart}
+
+If the date specification in the \bibfield{date} field is a range, this field holds the day component of the end date.
+
+\fielditem{endmonth}{datepart}
+
+If the date specification in the \bibfield{date} field is a range, this field holds the month component of the end date.
+
+\fielditem{endyear}{datepart}
+
+If the date specification in the \bibfield{date} field is a range, this field holds the year component of the end date. A blank (but defined) \bibfield{endyear} component indicates an open ended \bibfield{date} range.
+
+\fielditem{endyeardivision}{datepart}
+
+If the date specification in the \bibfield{date} field is a range, this field holds the year division (season, quarter, quadrimester etc.) component of the end date as specified by \acr{ISO8601-2} 4.8 (\secref{bib:use:dat}). It contains a year division localisation string (\secref{aut:lng:key:dt}). A blank (but defined) \bibfield{endyeardivision} component indicates an open ended \bibfield{date} range.
+
+\fielditem{endseason}{datepart}\DeprecatedMark
+
+If the date specification in the \bibfield{date} field is a range, this field holds the season component of the end date as specified by \acr{ISO8601-2} 4.8 (\secref{bib:use:dat}). It contains a season localisation string (\secref{aut:lng:key:dt}). A blank (but defined) \bibfield{endseason} component indicates an open ended \bibfield{date} range. This is deprecated in favour of \bibfield{endyeardivision} which is more generalised.
+
+\fielditem{orighour}{datepart}
+
+This field holds the hour component of the \bibfield{origdate} field. If the date is a range, it holds the hour component of the start date.
+
+\fielditem{origminute}{datepart}
+
+This field holds the minute component of the \bibfield{origdate} field. If the date is a range, it holds the minute component of the start date.
+
+\fielditem{origsecond}{datepart}
+
+This field holds the second component of the \bibfield{origdate} field. If the date is a range, it holds the second component of the start date.
+
+\fielditem{origtimezone}{datepart}
+
+This field holds the timezone component of the \bibfield{origdate} field. If the date is a range, it holds the timezone component of the start date.
+
+\fielditem{origday}{datepart}
+
+This field holds the day component of the \bibfield{origdate} field. If the date is a range, it holds the day component of the start date.
+
+\fielditem{origmonth}{datepart}
+
+This field holds the month component of the \bibfield{origdate} field. If the date is a range, it holds the month component of the start date.
+
+\fielditem{origyear}{datepart}
+
+This field holds the year component of the \bibfield{origdate} field. If the date is a range, it holds the year component of the start date.
+
+\fielditem{origyeardivision}{datepart}
+
+This field holds the year division (season, quarter, quadrimester etc.) component of the \bibfield{origdate} field as specified by \acr{ISO8601-2} 4.7 (\secref{bib:use:dat}). It contains a year division localisation string (\secref{aut:lng:key:dt}). If the date is a range, it holds the year division component of the start date. This is deprecated in favour of \bibfield{origyeardivision} which is more generalised.
+
+\fielditem{origseason}{datepart}\DeprecatedMark
+
+This field holds the season component of the \bibfield{origdate} field as specified by \acr{ISO8601-2} 4.7 (\secref{bib:use:dat}). It contains a season localisation string (\secref{aut:lng:key:dt}). If the date is a range, it holds the season component of the start date. This is deprecated in favour of \bibfield{origyeardivision} which is more generalised.
+
+\fielditem{origendhour}{datepart}
+
+If the date specification in the \bibfield{origdate} field is a range, this field holds the hour component of the end date.
+
+\fielditem{origendminute}{datepart}
+
+If the date specification in the \bibfield{origdate} field is a range, this field holds the minute component of the end date.
+
+\fielditem{origendsecond}{datepart}
+
+If the date specification in the \bibfield{origdate} field is a range, this field holds the second component of the end date.
+
+\fielditem{origendtimezone}{datepart}
+
+If the date specification in the \bibfield{origdate} field is a range, this field holds the timezone component of the end date.
+
+\fielditem{origendday}{datepart}
+
+If the date specification in the \bibfield{origdate} field is a range, this field holds the day component of the end date.
+
+\fielditem{origendmonth}{datepart}
+
+If the date specification in the \bibfield{origdate} field is a range, this field holds the month component of the end date.
+
+\fielditem{origendyear}{datepart}
+
+If the date specification in the \bibfield{origdate} field is a range, this field holds the year component of the end date. A blank (but defined) \bibfield{origendyear} component indicates an open ended \bibfield{origdate} range.
+
+\fielditem{origendyeardivision}{datepart}
+
+If the date specification in the \bibfield{origdate} field is a range, this field holds the year division (season, quarter, quadrimester etc.) component of the end date as specified by \acr{ISO8601-2} 4.8 (\secref{bib:use:dat}). It contains a year division localisation string (\secref{aut:lng:key:dt}). A blank (but defined) \bibfield{origendyeardivision} component indicates an open ended \bibfield{origdate} range.
+
+\fielditem{origendseason}{datepart}\DeprecatedMark
+
+If the date specification in the \bibfield{origdate} field is a range, this field holds the season component of the end date as specified by \acr{ISO8601-2} 4.8 (\secref{bib:use:dat}). It contains a season localisation string (\secref{aut:lng:key:dt}). A blank (but defined) \bibfield{origendseason} component indicates an open ended \bibfield{origdate} range. This is deprecated in favour of \bibfield{origendyeardivision} which is more generalised.
+
+\fielditem{eventhour}{datepart}
+
+This field holds the hour component of the \bibfield{eventdate} field. If the date is a range, it holds the hour component of the start date.
+
+\fielditem{eventminute}{datepart}
+
+This field holds the minute component of the \bibfield{eventdate} field. If the date is a range, it holds the minute component of the start date.
+
+\fielditem{eventsecond}{datepart}
+
+This field holds the second component of the \bibfield{eventdate} field. If the date is a range, it holds the second component of the start date.
+
+\fielditem{eventtimezone}{datepart}
+
+This field holds the timezone component of the \bibfield{eventdate} field. If the date is a range, it holds the timezone component of the start date.
+
+\fielditem{eventday}{datepart}
+
+This field holds the day component of the \bibfield{eventdate} field. If the date is a range, it holds the day component of the start date.
+
+\fielditem{eventmonth}{datepart}
+
+This field holds the month component of the \bibfield{eventdate} field. If the date is a range, it holds the month component of the start date.
+
+\fielditem{eventyear}{datepart}
+
+This field holds the year component of the \bibfield{eventdate} field. If the date is a range, it holds the year component of the start date.
+
+\fielditem{eventyeardivision}{datepart}
+
+This field holds the year division (season, quarter, quadrimester etc.) component of the \bibfield{eventdate} field as specified by \acr{ISO8601-2} 4.8 (\secref{bib:use:dat}). It contains a year division localisation string (\secref{aut:lng:key:dt}). If the date is a range, it holds the year division component of the start date.
+
+\fielditem{eventseason}{datepart}\DeprecatedMark
+
+This field holds the season component of the \bibfield{eventdate} field as specified by \acr{ISO8601-2} 4.8 (\secref{bib:use:dat}). It contains a season localisation string (\secref{aut:lng:key:dt}). If the date is a range, it holds the season component of the start date. This is deprecated in favour of \bibfield{eventyeardivision} which is more generalised.
+
+\fielditem{eventendhour}{datepart}
+
+If the date specification in the \bibfield{eventdate} field is a range, this field holds the hour component of the end date.
+
+\fielditem{eventendminute}{datepart}
+
+If the date specification in the \bibfield{eventdate} field is a range, this field holds the minute component of the end date.
+
+\fielditem{eventendsecond}{datepart}
+
+If the date specification in the \bibfield{eventdate} field is a range, this field holds the second component of the end date.
+
+\fielditem{eventendtimezone}{datepart}
+
+If the date specification in the \bibfield{eventdate} field is a range, this field holds the timezone component of the end date.
+
+\fielditem{eventendday}{datepart}
+
+If the date specification in the \bibfield{eventdate} field is a range, this field holds the day component of the end date.
+
+\fielditem{eventendmonth}{datepart}
+
+If the date specification in the \bibfield{eventdate} field is a range, this field holds the month component of the end date.
+
+\fielditem{eventendyear}{datepart}
+
+If the date specification in the \bibfield{eventdate} field is a range, this field holds the year component of the end date. A blank (but defined) \bibfield{eventendyear} component indicates an open ended \bibfield{eventdate} range.
+
+\fielditem{eventendyeardivision}{datepart}
+
+If the date specification in the \bibfield{eventdate} field is a range, this field holds the year division (season, quarter, quadrimester etc.) component of the end date as specified by \acr{ISO8601-2} 4.8 (\secref{bib:use:dat}). It contains a year division localisation string (\secref{aut:lng:key:dt}). A blank (but defined) \bibfield{eventendyeardivision} component indicates an open ended \bibfield{eventdate} range.
+
+\fielditem{eventendseason}{datepart}\DeprecatedMark
+
+If the date specification in the \bibfield{eventdate} field is a range, this field holds the season component of the end date as specified by \acr{ISO8601-2} 4.8 (\secref{bib:use:dat}). It contains a season localisation string (\secref{aut:lng:key:dt}). A blank (but defined) \bibfield{eventendseason} component indicates an open ended \bibfield{eventdate} range. This is deprecated in favour of \bibfield{eventendyeardivision} which is more generalised.
+
+\fielditem{urlhour}{datepart}
+
+This field holds the hour component of the \bibfield{urldate} field. If the date is a range, it holds the hour component of the start date.
+
+\fielditem{urlminute}{datepart}
+
+This field holds the minute component of the \bibfield{urldate} field. If the date is a range, it holds the minute component of the start date.
+
+\fielditem{urlsecond}{datepart}
+
+This field holds the second component of the \bibfield{urldate} field. If the date is a range, it holds the second component of the start date.
+
+\fielditem{timezone}{urldatepart}
+
+This field holds the timezone component of the \bibfield{urldate} field. If the date is a range, it holds the timezone component of the start date.
+
+\fielditem{urlday}{datepart}
+
+This field holds the day component of the \bibfield{urldate} field.
+
+\fielditem{urlmonth}{datepart}
+
+This field holds the month component of the \bibfield{urldate} field.
+
+\fielditem{urlyear}{datepart}
+
+This field holds the year component of the \bibfield{urldate} field.
+
+\fielditem{urlyeardivision}{datepart}
+
+This field holds the year division (season, quarter, quadrimester etc.) component of the \bibfield{urldate} field as specified by \acr{ISO8601-2} 4.8 (\secref{bib:use:dat}). It contains a year division localisation string (\secref{aut:lng:key:dt}). If the date is a range, it holds the year division component of the start date.
+
+\fielditem{urlseason}{datepart}\DeprecatedMark
+
+This field holds the season component of the \bibfield{urldate} field as specified by \acr{ISO8601-2} 4.8 (\secref{bib:use:dat}). It contains a season localisation string (\secref{aut:lng:key:dt}). If the date is a range, it holds the season component of the start date. This is deprecated in favour of \bibfield{urlyeardivision} which is more generalised.
+
+\fielditem{urlendhour}{datepart}
+
+If the date specification in the \bibfield{urldate} field is a range, this field holds the hour component of the end date.
+
+\fielditem{urlendminute}{datepart}
+
+If the date specification in the \bibfield{urldate} field is a range, this field holds the minute component of the end date.
+
+\fielditem{urlendsecond}{datepart}
+
+If the date specification in the \bibfield{urldate} field is a range, this field holds the second component of the end date.
+
+\fielditem{urlendtimezone}{datepart}
+
+If the date specification in the \bibfield{urldate} field is a range, this field holds the timezone component of the end date.
+
+\fielditem{urlendday}{datepart}
+
+If the date specification in the \bibfield{urldate} field is a range, this field holds the day component of the end date.
+
+\fielditem{urlendmonth}{datepart}
+
+If the date specification in the \bibfield{urldate} field is a range, this field holds the month component of the end date.
+
+\fielditem{urlendyear}{datepart}
+
+If the date specification in the \bibfield{urldate} field is a range, this field holds the year component of the end date. A blank (but defined) \bibfield{urlendyear} component indicates an open ended \bibfield{urldate} range.
+
+\fielditem{urlendyeardivision}{datepart}
+
+If the date specification in the \bibfield{urldate} field is a range, this field holds the year division (season, quarter, quadrimester etc.) component of the end date as specified by \acr{ISO8601-2} 4.8 (\secref{bib:use:dat}). It contains a year division localisation string (\secref{aut:lng:key:dt}). A blank (but defined) \bibfield{urlendyeardivision} component indicates an open ended \bibfield{urldate} range.
+
+\fielditem{urlendseason}{datepart}\DeprecatedMark
+
+If the date specification in the \bibfield{urldate} field is a range, this field holds the season component of the end date as specified by \acr{ISO8601-2} 4.8 (\secref{bib:use:dat}). It contains a season localisation string (\secref{aut:lng:key:dt}). A blank (but defined) \bibfield{urlendseason} component indicates an open ended \bibfield{urldate} range. This is deprecated in favour of \bibfield{urlendyeardivision} which is more generalised.
+
+\end{fieldlist}
+
+\subsection{Citation Styles}
+\label{aut:cbx}
+
+A citation style is a set of commands such as \cmd{cite} which print different types of citations. Such styles are defined in files with the suffix \file{cbx}. The \biblatex package loads the selected citation style file at the end of the package. Note that a small repertory of frequently used macros shared by several of the standard citation styles is also included in \path{biblatex.def}. This file is loaded at the end of the package as well, prior to the selected citation style. It also contains the definitions of the commands from \secref{use:cit:txt}.
+
+\subsubsection{Citation Style Files}
+\label{aut:cbx:cbx}
+
+Before we go over the individual commands available in citation style files, consider this example of the overall structure of a typical \file{cbx} file:
+
+\begin{ltxexample}
+\ProvidesFile{example.cbx}[2006/03/15 v1.0 biblatex citation style]
+
+\DeclareCiteCommand{\cite}{...}{...}{...}{...}
+\DeclareCiteCommand{\parencite}[\mkbibparens]{...}{...}{...}{...}
+\DeclareCiteCommand{\footcite}[\mkbibfootnote]{...}{...}{...}{...}
+\DeclareCiteCommand{\textcite}{...}{...}{...}{...}
+\endinput
+\end{ltxexample}
+
+\begin{ltxsyntax}
+
+\cmditem{RequireCitationStyle}{style}
+
+This command is optional and intended for specialized citation styles built on top of a more generic style. It loads the citation style \path{style.cbx}.
+
+\cmditem{InitializeCitationStyle}{code}
+
+Specifies arbitrary \prm{code} required to initialize or reset the citation style. This hook will be executed once at package load-time and every time the \cmd{citereset} command from \secref{use:cit:msc} is used. The \cmd{citereset} command also resets the internal citation trackers of this package. The reset will affect the \cmd{ifciteseen}, \cmd{ifentryseen}, \cmd{ifciteibid}, and \cmd{ifciteidem} tests discussed in \secref{aut:aux:tst}. When used in a \env{refsection} environment, the reset of the citation tracker is local to the current \env{refsection} environment.
+
+\cmditem{OnManualCitation}{code}
+
+Specifies arbitrary \prm{code} required for a partial reset of the citation style. This hook will be executed every time the \cmd{mancite} command from \secref{use:cit:msc} is used. It is particularly useful in citation styles which replace repeated citations by abbreviations like <ibidem> or <op. cit.> which may get ambiguous if automatically generated and manual citations are mixed. The \cmd{mancite} command also resets the internal <ibidem> and <idem> trackers of this package. The reset will affect the \cmd{ifciteibid} and \cmd{ifciteidem} tests discussed in \secref{aut:aux:tst}.
+
+\cmditem{DeclareCiteCommand}{command}[wrapper]{precode}{loopcode}{sepcode}{postcode} \cmditem*{DeclareCiteCommand*}{command}[wrapper]{precode}{loopcode}{sepcode}{postcode}
+
+This is the core command used to define all citation commands. It takes one optional and five mandatory arguments. The \prm{command} is the command to be defined, for example \cmd{cite}. If the optional \prm{wrapper} argument is given, the entire citation will be passed to the \prm{wrapper} as an argument, \ie the wrapper command must take one mandatory argument.\footnote{Typical examples of wrapper commands are \cmd{mkbibparens} and \cmd{mkbibfootnote}.} The \prm{precode} is arbitrary code to be executed at the beginning of the citation. It will typically handle the \prm{prenote} argument which is available in the \bibfield{prenote} field. It may also be used to initialize macros required by the \prm{loopcode}. The \prm{loopcode} is arbitrary code to be executed for each entry key passed to the \prm{command}. This is the core code which prints the citation labels or any other data. The \prm{sepcode} is arbitrary code to be executed after each iteration of the \prm{loopcode}. It will only be executed if a list of entry keys is passed to the \prm{command}. The \prm{sepcode} will usually insert some kind of separator, such as a comma or a semicolon. The \prm{postcode} is arbitrary code to be executed at the end of the citation. The \prm{postcode} will typically handle the \prm{postnote} argument which is available in the \bibfield{postnote} field.\footnote{The bibliographic data available to the \prm{loopcode} is the data of the entry currently being processed. In addition to that, the data of the first entry is available to the \prm{precode} and the data of the last one is available to the \prm{postcode}. <First> and <last> refer to the order in which the citations are printed. If the \opt{sortcites} package option is active, this is the order of the list after sorting. Note that no bibliographic data is available to the \prm{sepcode}.} The starred variant of \cmd{DeclareCiteCommand} defines a starred \prm{command}. For example, |\DeclareCiteCommand*{cite}| would define |\cite*|.\footnote{Note that the regular variant of \cmd{DeclareCiteCommand} defines a starred version of the \prm{command} implicitly, unless the starred version has been defined before. This is intended as a fallback. The implicit definition is an alias for the regular variant.}
+
+\cmditem{DeclareMultiCiteCommand}{command}[wrapper]{cite}{delimiter}
+
+This command defines <multicite> commands (\secref{use:cit:mlt}). The \prm{command} is the multicite command to be defined, for example \cmd{cites}. It is automatically made robust. Multicite commands are built on top of backend commands defined with \cmd{DeclareCiteCommand} and the \prm{cite} argument specifies the name of the backend command to be used. Note that the wrapper of the backend command (\ie the \prm{wrapper} argument passed to \cmd{DeclareCiteCommand}) is ignored. Use the optional \prm{wrapper} argument to specify an alternative wrapper. The \prm{delimiter} is the string to be printed as a separator between the individual citations in the list. This will typically be \cmd{multicitedelim}. The following examples are real definitions taken from \path{biblatex.def}:
+
+\begin{ltxexample}
+\DeclareMultiCiteCommand{\cites}%
+ {\cite}{\multicitedelim}
+\DeclareMultiCiteCommand{\parencites}[\mkbibparens]%
+ {\parencite}{\multicitedelim}
+\DeclareMultiCiteCommand{\footcites}[\mkbibfootnote]%
+ {\footcite}{\multicitedelim}
+\end{ltxexample}
+
+\cmditem{DeclareAutoCiteCommand}{name}[position]{cite}{multicite}
+
+This command provides definitions for the \cmd{autocite} and \cmd{autocites} commands from \secref{use:cit:aut}. The definitions are enabled with the \opt{autocite} package option from \secref{use:opt:pre:gen}. The \prm{name} is an identifier which serves as the value passed to the package option. The autocite commands are built on top of backend commands like \cmd{parencite} and \cmd{parencites}. The arguments \prm{cite} and \prm{multicite} specify the backend commands to use. The \prm{cite} argument refers to \cmd{autocite} and \prm{multicite} refers to \cmd{autocites}. The \prm{position} argument controls the handling of any punctuation marks after the citation. Possible values are \texttt{l}, \texttt{r}, \texttt{f}. \texttt{r} means that the punctuation is placed to the right of the citation, \ie it will not be moved around. \texttt{l} means that any punctuation after the citation is moved to the left of the citation. \texttt{f} is like \texttt{r} in a footnote and like \texttt{l} otherwise. This argument is optional and defaults to \texttt{r}. See also \cmd{DeclareAutoPunctuation} in \secref{aut:pct:cfg} and the \opt{autopunct} package option in \secref{use:opt:pre:gen}. The following examples are real definitions taken from \path{biblatex.def}:
+
+\begin{ltxexample}
+\DeclareAutoCiteCommand{plain}{\cite}{\cites}
+\DeclareAutoCiteCommand{inline}{\parencite}{\parencites}
+\DeclareAutoCiteCommand{footnote}[l]{\footcite}{\footcites}
+\DeclareAutoCiteCommand{footnote}[f]{\smartcite}{\smartcites}
+\end{ltxexample}
+%
+A definition provided in the document preamble can be subsequently adopted with the following: (see \secref{use:cfg:opt}).
+
+\begin{ltxexample}
+\ExecuteBibliographyOptions{autocite=<<name>>}
+\end{ltxexample}
+
+\cmditem{DeclareCitePunctuationPosition}{command}{position}
+
+Set up the cite command \prm{command} to move punctuation marks after the citation like \cmd{autocite}. The \prm{position} argument can take the values \opt{r}, \opt{l}, \opt{f}, \opt{c}, \opt{o} and \opt{d}.
+If an unknown \prm{position} identifier is used, it defaults to \opt{o}.
+\begin{valuelist}
+\item[r] The punctuation mark is not moved and remains to the right of the citation.
+\item[l] The punctuation mark is moved to the left of the citation and thus appears before it.
+\item[f] Like \opt{r} in footnotes and like \opt{l} otherwise.
+\item[c] Pass the punctuation on to the internal implementation of the citation commands. It will then be executed within the \prm{wrapper} command if given.
+\item[o] Retain the default setup of \opt{c} for citation defined commands without \prm{wrapper} command and \opt{l} for citation commands defined with a \prm{wrapper} command.
+\item[d] Drop the explicit punctuation mark. It will only be available as the field \bibfield{postpunct}.
+\end{valuelist}
+%
+This command can not be used for \cmd{autocite}, to configure \cmd{autocite} use the optional \prm{position} argument for \cmd{DeclareAutoCiteCommand}.
+\end{ltxsyntax}
+
+\subsubsection{Special Fields}
+\label{aut:cbx:fld}
+
+The following fields are used by \biblatex to pass data to citation commands. They are not used in \file{bib} files but defined automatically by the package. From the perspective of a citation style, they are not different from the fields in a \file{bib} file. See also \secref{aut:bbx:fld}.
+
+\begin{fieldlist}
+
+\fielditem{prenote}{literal}
+
+The \prm{prenote} argument passed to a citation command. This field is specific to citations and not available in the bibliography. If the \prm{prenote} argument is missing or empty, this field is undefined.
+
+\fielditem{postnote}{literal}
+
+The \prm{postnote} argument passed to a citation command. This field is specific to citations and not available in the bibliography. If the \prm{postnote} argument is missing or empty, this field is undefined.
+
+\fielditem{multiprenote}{literal}
+
+The \prm{multiprenote} argument passed to a multicite command. This field is specific to citations and not available in the bibliography. If the \prm{multiprenote} argument is missing or empty, this field is undefined.
+
+\fielditem{multipostnote}{literal}
+
+The \prm{multipostnote} argument passed to a multicite command. This field is specific to citations and not available in the bibliography. If the \prm{multipostnote} argument is missing or empty, this field is undefined.
+
+\fielditem{volcitevolume}{literal}
+
+The \prm{volume} argument passed to \cmd{volcite} or a related citation command (\secref{use:cit:spc}). This field is specific to \cmd{volcite} citations and not available in the bibliography or other citations.
+
+\fielditem{volcitepages}{literal}
+
+The \prm{pages} argument passed to \cmd{volcite} or a related citation command (\secref{use:cit:spc}). This field is specific to \cmd{volcite} citations and not available in the bibliography or other citations. If the \prm{pages} argument is missing or empty, this field is undefined.
+
+\fielditem{postpunct}{punctuation command}
+
+The trailing punctuation argument implicitly passed to a citation command. This field is specific to citations and not available in the bibliography. If the character following a given citation command is not specified in \cmd{DeclareAutoPunctuation} (\secref{aut:pct:cfg}), this field is undefined.
+
+\end{fieldlist}
+
+\subsection{Data Interface}
+\label{aut:bib}
+
+The data interface are the facilities used to format and print all bibliographic data. These facilities are available in both bibliography and citation styles.
+
+\subsubsection{Data Commands}
+\label{aut:bib:dat}
+
+This section introduces the main data interface of the \biblatex package. These are the commands doing most of the work, \ie they actually print the data provided in lists and fields.
+
+\begin{ltxsyntax}
+
+\cmditem{DeprecateField}{field}{message}
+\cmditem{DeprecateList}{list}{message}
+\cmditem{DeprecateName}{name}{message}
+
+When an attempt is made to print \prm{field}, \prm{list}, \prm{name}, a
+deprecation warning is issued with the additional \prm{message}. This aids
+style authors who are changing field names in their style. Note that the
+deprecated item must no longer be defined in the datamodel for this to work;
+\prm{field}, \prm{list} or \prm{name} cannot be listed anywhere as an
+argument to \cmd{DeclareDatamodelFields}.
+
+\cmditem{DeprecateFieldWithReplacement}{field}{replacement}
+\cmditem{DeprecateListWithReplacement}{list}{replacement}
+\cmditem{DeprecateNameWithReplacement}{name}{replacement}
+
+Similar to \cmd{DeprecateField}, \cmd{DeprecateList} and
+\cmd{DeprecateName}. The commands do not only issue a deprecation warning,
+they try to define a replacement for the deprecated field that is printed
+in its stead. The \cmd{replacement} must be of the same type as the
+deprecated \prm{field}, \prm{list} or \prm{name}. If the \prm{field},
+\prm{list} or \prm{name} is multiscript enabled, \prm{replacement} must
+also be. If the formatting of \prm{replacement} should be applied when
+printing the deprecated field, that needs to be requested with
+\cmd{DeclareFieldAlias} (see \secref{aut:bib:fmt}). Note that the
+deprecated item must no longer be defined in the datamodel for this work;
+\prm{field}, \prm{list} or \prm{name} cannot be listed anywhere as an
+argument to \cmd{DeclareDatamodelFields}.
+
+\cmditem{printfield}[format][msform][mslang]{field}
+
+This command prints a \prm{field} (for a multiscript field, \prm{msform}/\prm{mslang} may be specified, otherwise, see \secref{use:multiscript:select} for the rules which select the form/lang alternate to print) using the formatting directive \prm{format}, as defined with \cmd{DeclareFieldFormat}. If a type"=specific \prm{format} has been declared, the type"=specific formatting directive takes precedence over the generic one. If the \prm{field} is undefined, nothing is printed. If the \prm{format} is omitted, \cmd{printfield} tries using the name of the field as a format name. For example, if the \bibfield{title} field is to be printed and the \prm{format} is not specified, it will try to use the field format \texttt{title}.\footnote{In other words, \texttt{\textbackslash printfield\{title\}} is equivalent to \texttt{\textbackslash printfield[title]\{title\}}.} In this case, any type"=specific formatting directive will also take precedence over the generic one. If all of these formats are undefined, it falls back to \texttt{default} as a last resort. Note that \cmd{printfield} provides the name of the field currently being processed in \cmd{currentfield} for use in field formatting directives.
+
+\cmditem{printlist}[format][start\ensuremath\rangle--\ensuremath\langle stop][msform][mslang]{literal list}
+
+This command loops over all items in a \prm{literal list} (for a multiscript list, \prm{msform}/\prm{mslang} may be specified, otherwise, see \secref{use:multiscript:select} for the rules which select the form/lang alternate to print), starting at item number \prm{start} and stopping at item number \prm{stop}, including \prm{start} and \prm{stop} (all lists are numbered starting at~1). Each item is printed using the formatting directive \prm{format}, as defined with \cmd{DeclareListFormat}. If a type"=specific \prm{format} has been declared, the type"=specific formatting directive takes precedence over the generic one. If the \prm{literal list} is undefined, nothing is printed. If the \prm{format} is omitted, \cmd{printlist} tries using the name of the list as a format name. In this case, any type"=specific formatting directive will also take precedence over the generic one. If all of these formats are undefined, it falls back to \texttt{default} as a last resort. The \prm{start} argument defaults to 1; \prm{stop} defaults to the total number of items in the list. If the total number is greater than \prm{maxitems}, \prm{stop} defaults to \prm{minitems} (see \secref{use:opt:pre:gen}). See \cmd{printnames} for further details. Note that \cmd{printlist} provides the name of the literal list currently being processed in \cmd{currentlist} for use in list formatting directives.
+
+In multiscript lists, macros of the format:
+
+\begin{ltxexample}
+\listitem<msform><mslang>
+\end{ltxexample}
+%
+Are available for all valid combinations of <msform> and <mslang>. They refer to alternates of the current list item. Note that <mslang> is a BCP47 tag which may contain hyphens and so raw macro use will not work. It is therefore safer to refer to these macros with \cmd{csuse} e.g.:
+
+\begin{ltxexample}
+\csuse{listitemdefaulten-us}
+\end{ltxexample}
+%
+Note that any \sty{babel} shorthands in the value of these macros will not work as they are automatically defined in the preamble.
+
+\cmditem{printnames}[format][start\ensuremath\rangle--\ensuremath\langle stop][msform][mslang]{name list}
+
+This command loops over all items in a \prm{name list} (for a multiscript name, \prm{msform}/\prm{mslang} may be specified, otherwise, see \secref{use:multiscript:select} for the rules which select the form/lang alternate to print), starting at item number \prm{start} and stopping at item number \prm{stop}, including \prm{start} and \prm{stop} (all lists are numbered starting at~1). Each item is printed using the formatting directive \prm{format}, as defined with \cmd{DeclareNameFormat}. If a type"=specific \prm{format} has been declared, the type"=specific formatting directive takes precedence over the generic one. If the \prm{name list} is undefined, nothing is printed. If the \prm{format} is omitted, \cmd{printnames} tries using the name of the list as a format name. In this case, any type"=specific formatting directive will also take precedence over the generic one. If all of these formats are undefined, it falls back to \texttt{default} as a last resort. The \prm{start} argument defaults to 1; \prm{stop} defaults to the total number of items in the list. If the total number is greater than \prm{maxnames}, \prm{stop} defaults to \prm{minnames} (see \secref{use:opt:pre:gen}). If you want to select a range but use the default list format, the first optional argument must still be given, but is left empty:
+
+\begin{ltxexample}
+\printnames[][1-3]{...}
+\end{ltxexample}
+
+One of \prm{start} and \prm{stop} may be omitted, hence the following arguments are all valid:
+
+\begin{ltxexample}
+\printnames[...][-1]{...}
+\printnames[...][2-]{...}
+\printnames[...][1-3]{...}
+\end{ltxexample}
+
+If you want to override \prm{maxnames} and \prm{minnames} and force printing of the entire list, you may refer to the \cnt{listtotal} counter in the second optional argument:
+
+\begin{ltxexample}
+\printnames[...][-\value{listtotal}]{...}
+\end{ltxexample}
+
+Whenever \cmd{printnames} and \cmd{printlist} process a list, information concerning the current state is accessible by way of four counters: the \cnt{listtotal} counter holds the total number of items in the current list, \cnt{listcount} holds the number of the item currently being processed, \cnt{liststart} is the \prm{start} argument passed to \cmd{printnames} or \cmd{printlist}, \cnt{liststop} is the \prm{stop} argument. These counters are intended for use in list formatting directives. \cnt{listtotal} may also be used in the second optional argument to \cmd{printnames} and \cmd{printlist}. Note that these counters are local to list formatting directives and do not hold meaningful values when used anywhere else. For every list, there is also a counter by the same name which holds the total number of items in the corresponding list. For example, the \cnt{author} counter holds the total number of items in the \bibfield{author} list. These counters are similar to \cnt{listtotal} except that they may also be used independently of list formatting directives. There are also \cnt{maxnames} and \cnt{minnames} as well as \cnt{maxitems} and \cnt{minitems} counters which hold the values of the corresponding package options. See \secref{aut:fmt:ilc} for a complete list of such internal counters. Note that \cmd{printnames} provides the name of the name list currently being processed in \cmd{currentname} for use in name formatting directives.
+
+\cmditem{printtext}[format]{text}
+
+This command prints \prm{text}, which may be printable text or arbitrary code generating printable text. It clears the punctuation buffer before inserting \prm{text} and informs \biblatex that printable text has been inserted. This ensures that all preceding and following \cmd{newblock} and \cmd{newunit} commands have the desired effect. \cmd{printfield} and \cmd{printnames} as well as \cmd{bibstring} and its companion commands (see \secref{aut:str}) do that automatically. Using this command is required if a bibliography styles inserts literal text (including the commands from \secref{aut:pct:pct, aut:pct:spc}) to ensure that block and unit punctuation works as advertised in \secref{aut:pct:new}. The optional \prm{format} argument specifies a field formatting directive to be used to format \prm{text}. This may also be useful when several fields are to be printed as one chunk, for example, by enclosing the entire chunk in parentheses or quotation marks. If a type"=specific \prm{format} has been declared, the type"=specific formatting directive takes precedence over the generic one. If the \prm{format} is omitted, the \prm{text} is printed as is. See also \secref{aut:cav:pct} for some practical hints.
+
+\cmditem{printfile}[format]{file}
+
+This command is similar to \cmd{printtext} except that the second argument is a file name rather than literal text. The \prm{file} argument must be the name of a valid \latex file found in \tex's search path. \cmd{printfile} will use \cmd{input} to load this \prm{file}. If there is no such file, \cmd{printfile} does nothing. The optional \prm{format} argument specifies a field formatting directive to be applied to the \prm{file}. If a type"=specific \prm{format} has been declared, the type"=specific formatting directive takes precedence over the generic one. If the \prm{format} is omitted, the \prm{file} is printed as is. Note that this feature needs to be enabled explicitly by setting the package option \opt{loadfiles} from \secref{use:opt:pre:gen}. By default, \cmd{printfile} will not input any files.
+
+\csitem{printdate}
+
+This command prints the date of the entry, as specified in the fields \bibfield{date} or \bibfield{month}\slash \bibfield{year}. The date format is controlled by the package option \opt{date} from \secref{use:opt:pre:gen}. Additional formatting (fonts etc.) may be applied by adjusting the field format \texttt{date} (\secref{aut:fmt:ich}). Note that this command interfaces with the punctuation tracker. There is no need to wrap it in a \cmd{printtext} command.
+
+\csitem{printdateextra}
+
+Similar to \cmd{printdate} but incorporates the \bibfield{extradate} field in the date specification. This is useful for bibliography styles designed for author-year citations.
+
+\csitem{printlabeldate}
+
+Similar to \cmd{printdate} but prints the date field determined by \cmd{DeclareLabeldate}. The date format is controlled by the package option \opt{labeldate} from \secref{use:opt:pre:gen}. Additional formatting may be applied by adjusting the field format \texttt{labeldate} (\secref{aut:fmt:ich}).
+
+\csitem{printlabeldateextra}
+
+Similar to \cmd{printlabeldate} but incorporates the \bibfield{extradate} field in the date specification. This is useful for bibliography styles designed for author-year citations.
+
+\csitem{print$<$datetype$>$date}
+
+As \cmd{printdate} but prints the \bibfield{$<$datetype$>$date} of the entry. The date format is controlled by the package option \opt{$<$datetype$>$date} from \secref{use:opt:pre:gen}. Additional formatting may be applied by adjusting the field format \texttt{$<$datetype$>$date} (\secref{aut:fmt:ich}). The $<$datetype$>$s in the default data model are <> (for the main \bibfield{date} field), <orig>, <event> and <url>.
+
+\csitem{printtime}
+
+This command prints the time range of the entry, as specified in the \bibfield{date} field (see \secref{bib:use:dat}). The time format is controlled by the package option \opt{time} from \secref{use:opt:pre:gen}. Additional formatting (fonts etc.) may be applied by adjusting the field format \texttt{time} (\secref{aut:fmt:ich}). Relevant to time formatting are the \opt{timezeros} option and the \cmd{bibtimesep} and \cmd{bibtimezonesep} macros (\secref{use:fmt:lng}). Note that this command interfaces with the punctuation tracker. There is no need to wrap it in a \cmd{printtext} command. Note that this command prints a stand-alone time range apart from the date elements. With the \opt{$<$datepart$>$dateusetime} option, you can have the time printed along with a date when printing a date range instead of printing the time range completely separately, which is what this command allows for.
+
+\csitem{print$<$datetype$>$time}
+
+As \cmd{printtime} but prints the \bibfield{$<$datetype$>$time} of the entry. The time format is controlled by the package option \opt{$<$datetype$>$time} from \secref{use:opt:pre:gen}. Additional formatting may be applied by adjusting the field format \texttt{$<$datetype$>$time} (\secref{aut:fmt:ich}). The $<$datetype$>$s in the default data model are <> (for the main \bibfield{date} field), <orig>, <event> and <url>.
+
+\cmditem{indexfield}[format][msform][mslang]{field}
+
+This command is similar to \cmd{printfield} except that the \prm{field} is not printed but added to the index using the formatting directive \prm{format}, as defined with \cmd{DeclareIndexFieldFormat}. For a multiscript field, \prm{msform}/\prm{mslang} may be specified, otherwise, the global or refcontext override values of \opt{msform}/\opt{mslang} are used. If a type"=specific \prm{format} has been declared, it takes precedence over the generic one. If the \prm{field} is undefined, this command does nothing. If the \prm{format} is omitted, \cmd{indexfield} tries using the name of the field as a format name. In this case, any type"=specific formatting directive will also take precedence over the generic one. If all of these formats are undefined, it falls back to \texttt{default} as a last resort.
+
+\cmditem{indexlist}[format][start\ensuremath\rangle--\ensuremath\langle stop][msform][mslang]{literal list}
+
+This command is similar to \cmd{printlist} except that the items in the list are not printed but added to the index using the formatting directive \prm{format}, as defined with \cmd{DeclareIndexListFormat}. For a multiscript list, \prm{msform}/\prm{mslang} may be specified, otherwise, the global or refcontext override values of \opt{msform}/\opt{mslang} are used. If a type"=specific \prm{format} has been declared, the type"=specific formatting directive takes precedence over the generic one. If the \prm{literal list} is undefined, this command does nothing. If the \prm{format} is omitted, \cmd{indexlist} tries using the name of the list as a format name. In this case, any type"=specific formatting directive will also take precedence over the generic one. If all of these formats are undefined, it falls back to \texttt{default} as a last resort.
+
+\cmditem{indexnames}[format][start\ensuremath\rangle--\ensuremath\langle stop][msform][mslang]{name list}
+
+This command is similar to \cmd{printnames} except that the items in the list are not printed but added to the index using the formatting directive \prm{format}, as defined with \cmd{DeclareIndexNameFormat}. For a multiscript name, \prm{msform}/\prm{mslang} may be specified, otherwise, the global or refcontext override values of \opt{msform}/\opt{mslang} are used. If a type"=specific \prm{format} has been declared, the type"=specific formatting directive takes precedence over the generic one. If the \prm{name list} is undefined, this command does nothing. If the \prm{format} is omitted, \cmd{indexnames} tries using the name of the list as a format name. In this case, any type"=specific formatting directive will also take precedence over the generic one. If all of these formats are undefined, it falls back to \texttt{default} as a last resort.
+
+\cmditem{entrydata}{key}{code}
+\cmditem*{entrydata*}{key}{code}
+
+Data commands like \cmd{printfield} normally use the data of the entry currently being processed. You may use \cmd{entrydata} to switch contexts locally. The \prm{key} is the entry key of the entry to use locally. The \prm{code} is arbitrary code to be executed in this context. This code will be executed in a group. See \secref{aut:cav:mif} for an example. Note that this command will automatically switch languages if the \opt{autolang} package option is enabled. The starred version \cmd{entrydata*} will clone all fields of the enclosing entry, using field, counter, and other resource names prefixed with the string <\texttt{saved}>. This is useful when comparing two data sets. For example, inside the \prm{code} argument, the \bibfield{author} field holds the author of entry \prm{key} and the author of the enclosing entry is available as \bibfield{savedauthor}. The \cnt{author} counter holds the number of names in the \bibfield{author} field of \prm{key}; the \bibfield{savedauthor} counter refers to the author count of the enclosing entry.
+
+\cmditem{entryset}{precode}{postcode}
+
+This command is intended for use in bibliography drivers handling \bibtype{set} entries. It will loop over all members of the set, as indicated by the \bibfield{entryset} field, and execute the appropriate driver for the respective set member. This is similar to executing the \cmd{usedriver} command from \secref{aut:aux:msc} for each set member. The \prm{precode} is arbitrary code to be executed prior to processing each item in the set. The \prm{postcode} is arbitrary code to be executed immediately after processing each item. Both arguments are mandatory in terms of the syntax but may be left empty. See \secref{aut:cav:set} for usage examples.
+
+\cmditem{DeclareFieldInputHandler}{field}{code}
+
+This command can be used to define a data input handler for \prm{field} when it is read from the \file{.bbl}. The \prm{code} is passed one argument (\lstinline{#1}), which contains the input field value, it should then redefine the command \cmd{NewValue}, which holds the desired output field value. For example, to ignore the \bibfield{volumes} field when it appears, you could do
+
+\begin{ltxexample}
+\DeclareFieldInputHandler{volumes}{\def\NewValue{}}
+\end{ltxexample}
+%
+Generally, you would want to use \cmd{DeclareSourcemap} (see \secref{aut:ctm:map}) to remove and modify fields but this alternative method may be useful in some circumstances when the emphasis is on appearance rather than data since the \prm{code} can be arbitraty \tex.
+
+In general, \cmd{DeclareFieldInputHandler} should not be used to apply formatting to a field, since that should happen with \cmd{DeclareFieldFormat}, so the following is just a toy example that shows how \cmd{DeclareFieldInputHandler} works.
+
+\begin{ltxexample}
+\DeclareFieldInputHandler{volumes}{\def\NewValue{\textbf{#1}}}
+\end{ltxexample}
+
+\cmditem{DeclareListInputHandler}{list}{code}
+
+As \cmd{DeclareFieldInputHandler} but for lists. Within the \prm{code}, the macro \cmd{NewValue}
+contains the value of the list and \cmd{NewCount} contains the number of items in the list.
+Note that \cmd{NewValue} as well as the single argument to \prm{code} contain the internal representation of the list.
+
+\cmditem{DeclareNameInputHandler}{name}{code}
+
+As \cmd{DeclareFieldInputHandler} but for names. Within the \prm{code}, the macro \cmd{NewValue}
+contains the value of the name, \cmd{NewCount} contains the number of individual names in the name and \cmd{NewOption} contains any per-name options passed in the \file{.bbl}.
+Note that \cmd{NewValue} as well as the single argument to \prm{code} contain the internal representation of the name list.
+
+\end{ltxsyntax}
+
+\subsubsection{Formatting Directives}
+\label{aut:bib:fmt}
+
+This section introduces the commands used to define the formatting directives required by the data commands from \secref{aut:bib:dat}. Note that all standard formats are defined in \path{biblatex.def}.
+
+\begin{ltxsyntax}
+
+\cmditem{DeclareFieldFormat}[entrytype, \dots]{format}{code}
+\cmditem*{DeclareFieldFormat}*{format}{code}
+
+Defines the field format \prm{format}. This formatting directive is arbitrary \prm{code} to be executed by \cmd{printfield}. The value of the field will be passed to the \prm{code} as its first and only argument. The name of the field currently being processed is available to the \prm{code} as \cmd{currentfield}. For multiscript fields, the defined forms/langs of all alternates are provided as \sty{etoolbox} lists \cmd{currentmsforms} and \cmd{currentmslangs}. If an \prm{entrytype} is specified, the format is specific to that type. The \prm{entrytype} argument may be a comma"=separated list of values. The starred variant of this command is similar to the regular version, except that all type-specific formats are cleared. \emph{Do not put any whitespace between the arguments to this macro as the definitions are quite complex and you will get unexpected results}.
+
+\cmditem{DeclareListFormat}[entrytype, \dots]{format}{code}
+\cmditem*{DeclareListFormat}*{format}{code}
+
+Defines the literal list format \prm{format}. This formatting directive is arbitrary \prm{code} to be executed for every item in a list processed by \cmd{printlist}. The current item will be passed to the \prm{code} as its first and only argument. The name of the literal list currently being processed is available to the \prm{code} as \cmd{currentlist}. For multiscript fields, the defined forms/langs of all alternates are provided as \sty{etoolbox} lists \cmd{currentmsforms} and \cmd{currentmslangs}. If an \prm{entrytype} is specified, the format is specific to that type. The \prm{entrytype} argument may be a comma"=separated list of values. Note that the formatting directive also handles the punctuation to be inserted between the individual items in the list. You need to check whether you are in the middle of or at the end of the list, \ie whether \cnt{listcount} is smaller than or equal to \cnt{liststop}. The starred variant of this command is similar to the regular version, except that all type-specific formats are cleared. \emph{Do not put any whitespace between the arguments to this macro as the definitions are quite complex and you will get unexpected results}.
+
+
+\cmditem{DeclareNameFormat}[entrytype, \dots]{format}{code}
+\cmditem*{DeclareNameFormat}*{format}{code}
+
+Defines the name list format \prm{format}. This formatting directive is arbitrary \prm{code} to be executed for every name in a list processed by \cmd{printnames}. If an \prm{entrytype} is specified, the format is specific to that type. The \prm{entrytype} argument may be a comma"=separated list of values. The individual parts of a name will be available in automatically created macros (see below). The default data mode defines four name part which correspond to the standard \bibtex name parts arguments:
+
+\begin{argumentlist}{00}
+\item[family] The family name(s), know as <last> in \bibtex. If a name consists of a single part only (for example, <Aristotle>), this part will be treated as the family name.
+\item[given] The given name(s). Note that given names are referred to as the <first> names in the \bibtex file format documentation.
+\item[prefix] Any name prefices, for example von, van, of, da, de, del, della, etc. Note that name prefices are referred to as the <von> part of the name in the \bibtex file format documentation.
+\item[suffix] Any name suffices, for example Jr, Sr. Note that name suffices are referred to as the <Jr> part of the name in the \bibtex file format documentation.
+\end{argumentlist}
+%
+The value of the datamodel <nameparts> constant (see \secref{aut:bbx:drv}) creates two macros for each name part in the datamodel for the name. So, for example, in the default data model, name formats will have defined the following macros:
+
+\begin{ltxexample}
+\namepartprefix
+\namepartprefixi
+\namepartfamily
+\namepartfamilyi
+\namepartsuffix
+\namepartsuffixi
+\namepartgiven
+\namepartgiveni
+\end{ltxexample}
+%
+If a certain part of a name is not available, the corresponding macro will be empty, hence you may use, for example, the \sty{etoolbox} tests like \cmd{ifdefvoid} to check for the individual parts of a name. The name of the name list currently being processed is available to the \prm{code} as \cmd{currentname}. For multiscript fields, the defined forms/langs of all alternates are provided as \sty{etoolbox} lists \cmd{currentmsforms} and \cmd{currentmslangs}.
+
+For multiscript name lists, all available alternates of the current name list item are available in name formats via macros:
+
+\begin{ltxexample}
+\namepart<namepart><msform><mslang>
+\end{ltxexample}
+%
+Note that <mslang> is a BCP47 tag which may contain hyphens and so raw macro use will not work. It is therefore safer to refer to these macros with \cmd{csuse} e.g.:
+
+\begin{ltxexample}
+\csuse{namepartfamilydefaulten-us}
+\end{ltxexample}
+%
+Also note that any \sty{babel} shorthands in the value of these macros will not work as they are automatically defined in the preamble.
+
+Note that the formatting directive also handles the punctuation to be inserted between separate names and between the individual parts of a name. You need to check whether you are in the middle of or at the end of the list, \ie whether \cnt{listcount} is smaller than or equal to \cnt{liststop}. See also \secref{use:cav:nam}. The starred variant of this command is similar to the regular version, except that all type-specific formats are cleared. \emph{Do not put any whitespace between the arguments to this macro as the definitions are quite complex and you will get unexpected results}.
+
+\cmditem{DeclareListWrapperFormat}[entrytype, \dots]{format}{code}
+\cmditem*{DeclareListWrapperFormat}*{format}{code}
+
+Defines the list wrapper format \prm{format}. This formatting directive is arbitrary \prm{code} to be executed once for the entire list processed by \cmd{printlist}. The name of the literal list currently being processed is available to the \prm{code} as \cmd{currentlist}. If an \prm{entrytype} is specified, the format is specific to that type. The \prm{entrytype} argument may be a comma"=separated list of values. The starred variant of this command is similar to the regular version, except that all type-specific formats are cleared.
+
+\cmditem{DeclareNameWrapperFormat}[entrytype, \dots]{format}{code}
+\cmditem*{DeclareNameWrapperFormat}*{format}{code}
+
+Defines the name list wrapper format \prm{format}. This formatting directive is arbitrary \prm{code} to be executed once for the entire name list processed by \cmd{printnames}. The name of the name list currently being processed is available to the \prm{code} as \cmd{currentname}. If an \prm{entrytype} is specified, the format is specific to that type. The \prm{entrytype} argument may be a comma"=separated list of values. The starred variant of this command is similar to the regular version, except that all type-specific formats are cleared.
+
+\cmditem{DeclareIndexFieldFormat}[entrytype, \dots]{format}{code}
+\cmditem*{DeclareIndexFieldFormat}*{format}{code}
+
+Defines the field format \prm{format}. This formatting directive is arbitrary \prm{code} to be executed by \cmd{indexfield}. The value of the field will be passed to the \prm{code} as its first and only argument. The name of the field currently being processed is available to the \prm{code} as \cmd{currentfield}. If an \prm{entrytype} is specified, the format is specific to that type. The \prm{entrytype} argument may be a comma"=separated list of values. This command is similar to \cmd{DeclareFieldFormat} except that the data handled by the \prm{code} is not intended to be printed but written to the index. Note that \cmd{indexfield} will execute the \prm{code} as is, \ie the \prm{code} must include \cmd{index} or a similar command. The starred variant of this command is similar to the regular version, except that all type-specific formats are cleared.
+
+\cmditem{DeclareIndexListFormat}[entrytype, \dots]{format}{code}
+\cmditem*{DeclareIndexListFormat}*{format}{code}
+
+Defines the literal list format \prm{format}. This formatting directive is arbitrary \prm{code} to be executed for every item in a list processed by \cmd{indexlist}. The current item will be passed to the \prm{code} as its only argument. The name of the literal list currently being processed is available to the \prm{code} as \cmd{currentlist}. If an \prm{entrytype} is specified, the format is specific to that type. The \prm{entrytype} argument may be a comma"=separated list of values. This command is similar to \cmd{DeclareListFormat} except that the data handled by the \prm{code} is not intended to be printed but written to the index. Note that \cmd{indexlist} will execute the \prm{code} as is, \ie the \prm{code} must include \cmd{index} or a similar command. The starred variant of this command is similar to the regular version, except that all type-specific formats are cleared.
+
+\cmditem{DeclareIndexNameFormat}[entrytype, \dots]{format}{code}
+\cmditem*{DeclareIndexNameFormat}*{format}{code}
+
+Defines the name list format \prm{format}. This formatting directive is arbitrary \prm{code} to be executed for every name in a list processed by \cmd{indexnames}. The name of the name list currently being processed is available to the \prm{code} as \cmd{currentname}. If an \prm{entrytype} is specified, the format is specific to that type. The \prm{entrytype} argument may be a comma"=separated list of values. The parts of the name will be passed to the \prm{code} as separate arguments. This command is very similar to \cmd{DeclareNameFormat} except that the data handled by the \prm{code} is not intended to be printed but written to the index. Note that \cmd{indexnames} will execute the \prm{code} as is, \ie the \prm{code} must include \cmd{index} or a similar command. The starred variant of this command is similar to the regular version, except that all type-specific formats are cleared.
+
+\cmditem{DeclareFieldAlias}[entry type]{alias}[format entry type]{format}
+
+Declares \prm{alias} to be an alias for the field format \prm{format}. If an \prm{entrytype} is specified, the alias is specific to that type. The \prm{format entry type} is the entry type of the backend format. This is only required when declaring an alias for a type"=specific formatting directive.
+
+\cmditem{DeclareListAlias}[entry type]{alias}[format entry type]{format}
+
+Declares \prm{alias} to be an alias for the literal list format \prm{format}. If an \prm{entrytype} is specified, the alias is specific to that type. The \prm{format entry type} is the entry type of the backend format. This is only required when declaring an alias for a type"=specific formatting directive.
+
+\cmditem{DeclareNameAlias}[entry type]{alias}[format entry type]{format}
+
+Declares \prm{alias} to be an alias for the name list format \prm{format}. If an \prm{entrytype} is specified, the alias is specific to that type. The \prm{format entry type} is the entry type of the backend format. This is only required when declaring an alias for a type"=specific formatting directive.
+
+\cmditem{DeclareListWrapperAlias}[entry type]{alias}[format entry type]{format}
+
+Declares \prm{alias} to be an alias for the outer list format \prm{format}. If an \prm{entrytype} is specified, the alias is specific to that type. The \prm{format entry type} is the entry type of the backend format. This is only required when declaring an alias for a type"=specific formatting directive.
+
+\cmditem{DeclareNameWrapperAlias}[entry type]{alias}[format entry type]{format}
+
+Declares \prm{alias} to be an alias for the outer name list format \prm{format}. If an \prm{entrytype} is specified, the alias is specific to that type. The \prm{format entry type} is the entry type of the backend format. This is only required when declaring an alias for a type"=specific formatting directive.
+
+\cmditem{DeclareIndexFieldAlias}[entry type]{alias}[format entry type]{format}
+
+Declares \prm{alias} to be an alias for the field format \prm{format}. If an \prm{entrytype} is specified, the alias is specific to that type. The \prm{format entry type} is the entry type of the backend format. This is only required when declaring an alias for a type"=specific formatting directive.
+
+\cmditem{DeclareIndexListAlias}[entry type]{alias}[format entry type]{format}
+
+Declares \prm{alias} to be an alias for the literal list format \prm{format}. If an \prm{entrytype} is specified, the alias is specific to that type. The \prm{format entry type} is the entry type of the backend format. This is only required when declaring an alias for a type"=specific formatting directive.
+
+\cmditem{DeclareIndexNameAlias}[entry type]{alias}[format entry type]{format}
+
+Declares \prm{alias} to be an alias for the name list format \prm{format}. If an \prm{entrytype} is specified, the alias is specific to that type. The \prm{format entry type} is the entry type of the backend format. This is only required when declaring an alias for a type"=specific formatting directive.
+
+\cmditem{DeprecateFieldFormatWithReplacement}[entry type]{alias}[format entry type]{format}
+
+Declares \prm{alias} to be an alias for the name list format \prm{format} and issue a deprecation warning. If an \prm{entrytype} is specified, the alias is specific to that type. The \prm{format entry type} is the entry type of the backend format. This is only required when declaring an alias for a type"=specific formatting directive.
+
+\cmditem{DeprecateListFormatWithReplacement}[entry type]{alias}[format entry type]{format}
+
+Similar to \cmd{DeprecateFieldFormatWithReplacement} but for list formats.
+
+\cmditem{DeprecateNameFormatWithReplacement}[entry type]{alias}[format entry type]{format}
+
+Similar to \cmd{DeprecateFieldFormatWithReplacement} but for name formats.
+
+\cmditem{DeprecateListWrapperFormatWithReplacement}[entry type]{alias}[format entry type]{format}
+
+Similar to \cmd{DeprecateFieldFormatWithReplacement} but for outer list formats.
+
+\cmditem{DeprecateNameWrapperFormatWithReplacement}[entry type]{alias}[format entry type]{format}
+
+Similar to \cmd{DeprecateFieldFormatWithReplacement} but for outer name formats.
+
+\cmditem{DeprecateIndexFieldFormatWithReplacement}[entry type]{alias}[format entry type]{format}
+
+Similar to \cmd{DeprecateFieldFormatWithReplacement} but for index field formats.
+
+\cmditem{DeprecateIndexListFormatWithReplacement}[entry type]{alias}[format entry type]{format}
+
+Similar to \cmd{DeprecateFieldFormatWithReplacement} but for index list formats.
+
+\cmditem{DeprecateIndexNameFormatWithReplacement}[entry type]{alias}[format entry type]{format}
+
+Similar to \cmd{DeprecateFieldFormatWithReplacement} but for index name formats.
+
+\end{ltxsyntax}
+
+\subsection{Customization}
+\label{aut:ctm}
+
+\subsubsection{Related Entries}
+\label{aut:ctm:rel}
+The related entries feature comprises the following components:
+\begin{itemize}
+\item Special fields in an entry to set up and describe relationships
+\item Optionally, localisation strings to prefix the related data
+\item Macros to extract and print the related data
+\item Formats to format the localisation string and related data
+\end{itemize}
+%
+The special fields are \bibfield{related}, \bibfield{relatedtype}, \bibfield{relatedstring} and \bibfield{relatedoptions}:
+\begin{keymarglist}
+\item[related] A separated list of keys of entries which are related to this entry in some way. Note the order of the keys is important. The data from multiple related entries is printed in the order of the keys listed in this field.
+\item[relatedtype] The type of relationship. This serves three purposes. If the value of this field resolves to a localisation string identifier, then the resulting localised string is printed before the data from the related entries. Secondly, if there is a macro called \texttt{related:\prm{relatedtype}}, this is used to format the data from the related entries. If no such macro exists, then the macro \texttt{related:default} is used. Lastly, if there is a format named \texttt{related:\prm{relatedtype}}, then it is used to format both the localised string and related entry data. If there is no related type specific format, the \texttt{related} format is used.
+\item[relatedstring] If an entry contains this field, then if value of the field resolves to a localisation string identifier, the localisation key value specified is printed before data from the related entries. If the field does not specify a localisation key, its value is printed literally. If both \bibfield{relatedtype} and \bibfield{relatedstring} are present in an entry, \bibfield{relatedstring} is used for the pre-data string (but \bibfield{relatedtype} is still used to determine the macro and format to use when printing the data).
+\item[relatedoptions] A list of per"=entry options to set on the related entry (actually on the clone of the related entry which is used as a data source---the actual related entry is not modified because it might be cited directly itself).
+\end{keymarglist}
+
+The related entry feature is enabled by default by the package option \opt{related} from \secref{use:opt:pre:gen}. The related information entry data from the related entries is included via a \cmd{usebibmacro\{related\}} call. Standard styles call this macro towards the end of each driver. Style authors should ensure the existence of (or take note of existing) localisation strings which are useful as values for the \bibfield{relatedtype} field, such as \texttt{translationof} or perhaps \texttt{translatedas}. A plural variant can be identified with the localisation key \prm{relatedtype}\texttt{s}. This key's corresponding string is printed whenever more than one entry is specified in \bibfield{related}. Bibliography macros and formatting directives for printing entries related by \prm{relatedtype} should be defined using the name \texttt{related:\prm{relatedtype}}. The file \path{biblatex.def} contains macros and formats for some common relation types which can be used as templates. In particular, the \cmd{entrydata*} command is essential in such macros in order to make the data of the related entries available. Examples of entries using this feature can be found in the \biblatex distribution examples file \path{biblatex-examples.bib}. There are some specific formatting macros for this feature which control delimiters and separators in related entry information, see \secref{aut:fmt:fmt}.
+
+\subsubsection{Datasource Sets}
+\label{aut:ctm:dsets}
+
+It is useful to be able to define named sets of datasource field names for use in loops etc. In addition, \biber can use such sets in order to apply options and perform operations on particular sets of datasource fields. The following macros allow the user to define arbitrary sets of datasource fields, exposed to \biblatex as \sty{etoolbox} lists and to \biber in the \file{.bcf}.
+
+
+\begin{ltxsyntax}
+
+\cmditem{DeclareDatafieldSet}{name}{specification}
+
+Declare a set of datasource fields with name \prm{name}.
+
+\begin{optionlist*}
+
+\valitem{name}{set name}
+
+The name of the set.
+
+\end{optionlist*}
+
+The \prm{specification} is one or more \cmd{member} items:
+
+\cmditem{member}
+
+\begin{optionlist*}
+
+\valitem{fieldtype}{fieldtype}
+\valitem{datatype}{datatype}
+\valitem{field}{fieldname}
+
+\end{optionlist*}
+
+A \cmd{member} specification appends fields to the set. Fields can be specified by datamodel \prm{fieldtype} and/or \prm{datatype} (see \secref{aut:ctm:dm}). Alternatively, fields can be explicitly added by name using the \prm{field} option. Once defined, the set is available as an \sty{etoolbox} list called \cmd{datafieldset<setname>} and is also passed via the \file{.bcf} to \biber.
+
+For example, here are the default sets defined by \biblatex for name fields and title fields:
+
+\end{ltxsyntax}
+
+\begin{ltxexample}[style=latex]
+\DeclareDatafieldSet{setnames}{
+ \member[datatype=name, fieldtype=list]
+}
+
+\DeclareDatafieldSet{settitles}{
+ \member[field=title]
+ \member[field=booktitle]
+ \member[field=eventtitle]
+ \member[field=issuetitle]
+ \member[field=journaltitle]
+ \member[field=maintitle]
+ \member[field=origtitle]
+}
+\end{ltxexample}
+%
+This defines the macros \cmd{datafieldsetsetnames} and \cmd{datafieldsetsettitles} as \sty{etoolbox} lists containing the names of the member datasource fields specified.
+
+\subsubsection{Dynamic Modification of Data}
+\label{aut:ctm:map}
+
+Bibliographic data sources which are automatically generated or which you have no control over can be a problem if you need to edit them in some way. For this reason, \biber has the ability to modify data as it is read so that you can apply modifications to the source data stream without actually changing it. The modification can be defined in \biber's config file (see \biber docs), or via \biblatex macros in which case you can apply the modification only for specific documents, styles or globally.
+
+Source mapping happens during data parsing and therefore before any other operation such as inheritance and sorting.
+
+Source mappings can be defined at different «levels» which are applied
+in a defined order. See the \biblatex\ manual regarding these macros:\\[2ex]
+
+\noindent \texttt{user}-level maps defined with \cmd{DeclareSourcemap}$\rightarrow$\\
+\hspace*{1em}\texttt{user}-level maps defined in the \biber config file (see \biber docs)$\rightarrow$\\
+\hspace*{2em}\texttt{style}-level maps defined with \cmd{DeclareStyleSourcemap}$\rightarrow$\\
+\hspace*{3em}\texttt{driver}-level maps defined with \cmd{DeclareDriverSourcemap}\\[2ex]
+
+\begin{ltxsyntax}
+
+\cmditem{DeclareSourcemap}{specification}
+
+Defines source data modification (mapping) rules which can be used to perform any combination of the following tasks:
+
+\begin{itemize}
+\item Map data source entrytypes to different entrytypes
+\item Map datasource fields to different fields
+\item Add new fields to an entry
+\item Remove fields from an entry
+\item Modify the contents of a field using standard Perl regular expression
+ match and replace\footnote{See for example \url{https://perldoc.perl.org/perlretut.html}, \url{https://perldoc.perl.org/perlrequick.html} and \url{https://perldoc.perl.org/perlre.html}. There are many more resources available about regular expessions in Perl.}
+\item Restrict any of the above operations to entries coming from
+ particular datasources which you defined in \cmd{addresource} macros
+\item Restrict any of the above operations to entries only of a certain
+ entrytype
+\item Restrict any of the above operations to entries in a particular
+ reference section
+\end{itemize}
+
+The \prm{specification} is an undelimited list of \cmd{maps} directives which specify containers for mappings rules applying to a particular data source type (\secref{use:bib:res}). Spaces, tabs, and line endings may be used freely to visually arrange the \prm{specification}. Blank lines are not permissible. This command may only be used in the preamble and can be used multiple times, the maps being run in order of definition.
+
+\cmditem{maps}[options]{elements}
+
+Contains an ordered set of \cmd{map} elements each of which is a logically related set of mapping steps to apply to the data source. The \prm{options} are:
+
+\begin{optionlist*}
+
+\choitem[bibtex]{datatype}{bibtex, biblatexml}
+
+Data source type to which the contained \cmd{map} directives apply (\secref{use:bib:res}).
+
+\boolitem[false]{overwrite}
+
+Specify whether a mapping rule is allowed to overwrite already existing data in an entry. If this option is not specified, the default is \texttt{false}. The short form \opt{overwrite} is equivalent to \kvopt{overwrite}{true}.
+
+\end{optionlist*}
+
+\cmditem{map}[options]{restrictions,steps}
+
+A container for an ordered set of map \cmd{step}s, optionally restricted to particular entrytypes or data sources. This is a grouping element to allow a set of mapping steps to apply only to specific entrytypes or data sources. Mapping steps must always be contained within a \cmd{map} element. The \prm{options} are:
+
+\begin{optionlist*}
+
+\boolitem{overwrite}
+
+As the same option on the parent \cmd{maps} element. This option allows an override on a per-map group basis. If this option is not specified, the default is the parent \cmd{maps} element option value. The short form \opt{overwrite} is equivalent to \kvopt{overwrite}{true}.
+
+\valitem{foreach}{loopval}
+
+Loop over all \cmd{step}s in this \cmd{map}, setting the special variable |$MAPLOOP| %$
+to each of the comma-separated values contained in \prm{loopval}. \prm{loopval} can either be the name of a datafield set defined with \cmd{DeclareDatafieldSet} (see \secref{aut:ctm:dsets}), a datasource field which is fetched and parsed as a comma"=separated values list or an explicit comma"=separated values list. \prm{loopval} is determined in this order. This allows the user to repeat a group of \cmd{step}s for each value \prm{loopval}. Using regexp maps, it is possible to create a CSV field for use with this functionality. The special variable |$MAPUNIQ| %$
+may also be used in the \cmd{step}s to generate a random unique string. This can be useful when creating keys for new entries. An example:
+
+\begin{ltxexample}[style=latex]
+\DeclareSourcemap{
+ \maps[datatype=bibtex]{
+ \map[overwrite, foreach={author,editor, translator}]{
+ \step[fieldsource=\regexp{$MAPLOOP}, match={Smith}, replace={Jones}]
+ }
+ }
+}
+\end{ltxexample}
+%$<- to stop emacs highlighting breaking
+
+\intitem{refsection}
+
+Only apply the contained \cmd{step} commands to entries in the reference section with number \prm{refsection}.
+
+\end{optionlist*}
+
+\cmditem{perdatasource}{datasource}
+
+Restricts all \cmd{step}s in this \cmd{map} element to entries from the named \prm{datasource}. The \prm{datasource} name should be exactly as given in a \cmd{addresource} macro defining a data source for the document. Multiple \cmd{perdatasource} restrictions are allowed within a \cmd{map} element.
+
+\cmditem{pertype}{entrytype}
+
+Restricts all \cmd{step}s in this \cmd{map} element to entries of the named \prm{entrytype}. Multiple \cmd{pertype} restrictions are allowed within a \cmd{map} element.
+
+\cmditem{pernottype}{entrytype}
+
+Restricts all \cmd{step}s in this \cmd{map} element to entries not of the named \prm{entrytype}. Multiple \cmd{pernottype} restrictions are allowed within a \cmd{map} element.
+
+\cmditem{step}[options]
+
+A mapping step. Each step is applied sequentially to every relevant entry where <relevant> means those entries which correspond to the data source type, entrytype and data source name restrictions mentioned above. Each step is applied to the entry as it appears after the application of all previous steps. The mapping performed by the step is determined by the following \prm{option}s:
+
+\begin{optionlist*}
+
+\valitem{typesource}{entrytype}
+\valitem{typetarget}{entrytype}
+\valitem{fieldsource}{entryfield}
+\valitem{fieldsourcemsform}{msform}
+\valitem{fieldsourcemslang}{mslang}
+\valitem{notfield}{entryfield}
+\valitem{fieldtarget}{entryfield}
+\valitem{fieldtargetmsform}{msform}
+\valitem{fieldtargetmslang}{mslang}
+\valitem{match}{regexp}
+\valitem{matchi}{regexp}
+\valitem{notmatch}{regexp}
+\valitem{notmatchi}{regexp}
+\valitem{matches}{regexp}
+\valitem{matchesi}{regexp}
+\valitem{replace}{regexp}
+\valitem{fieldset}{entryfield}
+\valitem{fieldvalue}{string}
+\valitem{entryclone}{clonekey}
+\valitem{entrynew}{entrynewkey}
+\valitem{entrynewtype}{string}
+\valitem{entrytarget}{string}
+\boolitem[false]{cited}
+\boolitem[false]{nocited}
+\boolitem[false]{citedornocited}
+\boolitem[false]{allnocited}
+\boolitem[false]{starnocited}
+\boolitem[false]{entrynocite}
+\boolitem[false]{entrynull}
+\boolitem[false]{append}
+\boolitem[false]{appendstrict}
+\boolitem[false]{final}
+\boolitem[false]{null}
+\boolitem[false]{origfield}
+\boolitem[false]{origfieldval}
+\boolitem[false]{origentrytype}
+%
+For all boolean \cmd{step} options, the short form \opt{option} is equivalent to \kvopt{option}{true}. The following rules for a mapping step apply:
+
+\renewcommand{\labelitemii}{$\circ$}
+
+Note that the options \opt{cited}, \opt{nocited}, \opt{citedornocited},
+\opt{allnocited} and \opt{starnocited} are unique in that they can make the
+results of a sourcemap differ depending on the refsection. This is because
+a datasource to which source mapping applies may be used in several
+refsections and source mappings are applied when fetching the data from the
+datasources for a refsection. Citation commands are local to a refsection
+and therefore may differ for the same entry from refsection to refsection.
+For example, the same entry may be \cmd{cite}d in one refsection but
+\cmd{nocite}d in another, resulting in different source map results and
+therefore data between the refsections. This can be avoided if desired, by
+limiting source maps to specific refsections only (see \opt{refsection}
+option to the \cmd{map} command above).
+
+\begin{itemize}
+\item If \texttt{entrynew} is set, a new entry is created with the entry key \texttt{entrynewkey} and the entry type given in the option \texttt{entrynewtype}. This
+ entry is only in-scope during the processing of the current entry and can be referenced by
+ \texttt{entrytarget}. In \texttt{entrynewkey}, you may use standard Perl regular expression
+ backreferences to captures from a previous \texttt{match} step.
+\item When a \texttt{fieldset} step has \texttt{entrytarget} set to the entrykey of an entry
+ created by \texttt{entrynew}, the target for the field set will be the \texttt{entrytarget} entry
+ rather than the entry being currently processed. This allows users to create new entries and set
+ fields in them.
+\item If \texttt{entrynocite} is used in a \texttt{entrynew} or
+ \texttt{entryclone} step, the new/clone entry will be included in the
+ \file{.bbl} as if the entry/clone had been \cmd{nocite}ed in the document.
+\item If \texttt{entrynull} is set, processing of the \cmd{map}
+ immediately terminates and the current entry is not created. It is
+ as if it did not exist in the datasource. Obviously, you should
+ select the entries which you want to apply this to using prior
+ mapping steps.
+\item If \texttt{entryclone} is set, a clone of the entry is created with an entry key
+ \texttt{clonekey}. Obviously this may cause labelling problems in author/year styles etc.
+ and should be used with care. The cloned entry is in-scope during the processing of the
+ current entry and can be modified by passing its key as the value to \texttt{entrytarget}.
+ In \texttt{clonekey}, you may use standard Perl regular expression backreferences to
+ captures from a previous \texttt{match} step.
+\item If \texttt{cited} is used then only apply the step if the entry key
+ of an entry was specifically cited via \cmd{cite}.
+\item If \texttt{nocited} is used then only apply the step if the entry key
+ of an entry was specifically nocited via \cmd{nocite} or was included via \cmd{nocite\{*\}}.
+\item If \texttt{citedornocited} is used then only apply the step if the entry key
+ of an entry was specifically cited via \cmd{cite} or specifically nocited via \cmd{nocite}.
+\item If \texttt{allnocited} is used then only apply the step if the entry key
+ of an entry was included via \cmd{nocite\{*\}}.
+\item If \texttt{starnocited} is used then only apply the step if the entry key
+ of an entry was included solely because of \cmd{nocite\{*\}}. This
+ implies that the entry was neither explicitly \cmd{cite}ed nor explicitly \cmd{nocite}ed.
+\item Change the \texttt{typesource} \prm{entrytype} to the
+ \texttt{typetarget} \prm{entrytype}, if defined. If
+ \texttt{final} is \texttt{true} then if the \prm{entrytype} of the entry is not \texttt{typesource}, processing of the parent \cmd{map} immediately terminates.
+\item Change the \texttt{fieldsource} \prm{entryfield} (optionally a
+ particular alternate of the \texttt{fieldsource} as specified by
+ \texttt{fieldsourcemsform} and \texttt{fieldsourcemslang}) to
+ \texttt{fieldtarget} (optionally a particular alternate of the
+ \texttt{fieldtarget} as specified by \texttt{fieldtargetmsform} and
+ \texttt{fieldtargetmslang}), if defined. Any data annotations of a renamed field are automatically renamed appropriately. If \texttt{final} is
+ \texttt{true} then if there is no \texttt{fieldsource} \prm{entryfield}
+ in the entry, processing of the parent \cmd{map} immediately terminates.
+\item If \texttt{notfield} is true only if the \prm{entryfield} does not
+ exist. Usually used with \texttt{final} so that if an entry does contain
+ \prm{entryfield}, the map terminates.
+\item If \texttt{match} is defined but
+ \texttt{replace} is not, only apply the step if the \texttt{fieldsource} \prm{entryfield} matches the
+ \texttt{match} regular expression (logic is reversed if you use \texttt{notmatch} and case-insensitive if you use the versions ending in <i>)\footnote{Regular expressions are full Perl 5.16 regular expressions. This means you may need to deal with special characters, see examples.}. You may use capture parenthesis as usual and refer to these (\$1\ldots\$9) in later \texttt{fieldvalue} specifications. This allows you to pull out parts of some fields and put these parts in other fields.
+\item Perform a regular expression match and replace on the value of the \texttt{fieldsource} \prm{entryfield} if \texttt{match} and \texttt{replace} are defined.
+\item If \texttt{matches} is defined, it should be a comma-separated list of literal strings which are replaced by corresponding locations in a comma-separated list provided in \texttt{replace}. The lists must have the same number of elements or the step will be skipped. \texttt{matchesi} is the same but case-insensitive.
+\item If \texttt{fieldset} is defined, then its value is \prm{entryfield}
+ which will be set to a value specified by further options. If
+ \texttt{overwrite} is false for this step and the field to set already
+ exists then the map step is ignored. If \texttt{final} is also true for
+ this step, then processing of the parent map stops at this point. If
+ \texttt{append} is true, then the value to set is appended to the current
+ value of \prm{entryfield}. \texttt{appendstrict} only appends to
+ \prm{entryfield} if \prm{entryfield} is not empty. The value to set is
+ specified by a mandatory one and only one of the following options:
+ \begin{itemize}
+ \item\ \texttt{fieldvalue} --- The \texttt{fieldset} \prm{entryfield} is set to the \texttt{fieldvalue} \prm{string}
+ \item\ \texttt{null} --- The \texttt{fieldset} \prm{entryfield} is ignored, as if it did not exist in the datasource
+ \item\ \texttt{origentrytype} --- The \texttt{fieldset} \prm{entryfield} is set to the most recently mentioned \texttt{typesource} \prm{entrytype} name
+ \item\ \texttt{origfield} --- The \texttt{fieldset} \prm{entryfield} is set to the most recently mentioned \texttt{fieldsource} \prm{entryfield} name
+ \item\ \texttt{origfieldval} --- The \texttt{fieldset} \prm{entryfield} is set to the most recently mentioned \texttt{fieldsource} value
+ \end{itemize}
+\end{itemize}
+
+\end{optionlist*}
+
+\end{ltxsyntax}
+
+\noindent With \bibtex\ datasources, you may specify the
+pseudo-field \bibfield{entrykey} for \texttt{fieldsource}
+which is the citation key of the entry. With \biblatexml\ the \bibfield{entrykey} is a normal attribute and can be reference like any other attribute. Naturally, this <field> cannot
+be changed (used as \texttt{fieldset}, \texttt{fieldtarget} or changed using \texttt{replace}).
+
+Macros used in \cmd{step} are expanded. Unexpandable contents should be protected with \cmd{detokenize}, regular expressions can be escaped using the dedicated \cmd{regexp} command (see the examples below).
+
+\begin{ltxsyntax}
+
+\cmditem{DeclareStyleSourcemap}{specification}
+
+This command sets the source mappings used by a style. Such mappings are conceptually separate from user mappings defined with \cmd{DeclareSourcemap} and are applied directly after user maps. The syntax is identical to \cmd{DeclareSourcemap}. This command is provided for style authors so that any maps defined for the style do not interfere with user maps or the default driver maps defined with \cmd{DeclareDriverSourcemap}. This command is for use in style files and can be used multiple times, the maps being run in order of definition.
+
+\end{ltxsyntax}
+
+\begin{ltxsyntax}
+
+\cmditem{DeclareDriverSourcemap}[datatype=driver]{specification}
+
+This command sets the driver default source mappings for the specified \prm{driver}. Such mappings are conceptually separate from user mappings defined with \cmd{DeclareSourcemap} and style mapping defined with \cmd{DeclareStyleSourcemap}. They consist of mappings which are part of the driver setup. Users should not normally need to change these. Driver default mapping are applied after user mappings (\cmd{DeclareSourcemap}) and style mappings (\cmd{DeclareStyleSourcemap}). These defaults are described in Appendix \secref{apx:maps}. The \prm{specification} is identical to that for \cmd{DeclareSourcemap} but without the \cmd{maps} elements: the \prm{specification} is just a list of \cmd{map} elements since each \cmd{DeclareDriverSourcemap} only applies to one datatype driver. See the default definitions in Appendix \secref{apx:maps} for examples.
+
+\end{ltxsyntax}
+
+\begin{ltxsyntax}
+
+\cmditem{regexp}{PCRE}
+
+This command can be used with any command accepting a regular expression key to protect a regular expression from being interpreted by \TeX\ so that it is passed through to \biber correctly. Regular expressions often contain sequences of characters that are also valid \TeX\ commands but which should not be interpreted as such. The argument is a normal PCRE (Perl Compatible Regular Expression\fnurl{https://perldoc.perl.org/perlre}). Perl escape sequences like \cmd{t} for a tab, \cmd{n} for a newline, \cmd{A} for the start of a string or \cmd{d} for a digit can be used, without \TeX\ trying to execute them as commands, as can be special characters like \verb|^|, \verb|_| or \verb|{..}| and \verb|#|. Only the \% must be protected: to match a single \% in the bib, use \textbackslash\% in the regular expression, a \textbackslash\% is matched by \textbackslash\textbackslash\%.
+
+\end{ltxsyntax}
+
+Here are some data source mapping examples:
+
+\begin{ltxexample}
+\DeclareSourcemap{
+ \maps[datatype=bibtex]{
+ \map{
+ \perdatasource{<<example1.bib>>}
+ \perdatasource{<<example2.bib>>}
+ \step[fieldset=<<keywords>>, fieldvalue={<<keyw1, keyw2>>}]
+ \step[fieldsource=<<entrykey>>]
+ \step[fieldset=<<note>>, origfieldval]
+ }
+ }
+}
+\end{ltxexample}
+%
+This would add a \bibfield{keywords} field with value <keyw1, keyw2> and set the \bibfield{note} field to the entry key to all entries which are found in either the
+\texttt{examples1.bib} or \texttt{examples2.bib} files.
+%
+\begin{ltxexample}
+\DeclareSourcemap{
+ \maps[datatype=bibtex]{
+ \map{
+ \step[fieldsource=<<title>>]
+ \step[fieldset=<<note>>, origfieldval]
+ }
+ }
+}
+\end{ltxexample}
+%
+Copy the \bibfield{title} field to the \bibfield{note} field unless the
+\bibfield{note} field already exists.
+%
+\begin{ltxexample}
+\DeclareSourcemap{
+ \maps[datatype=bibtex]{
+ \map{
+ \step[typesource=<<chat>>, typetarget=<<customa>>, final]
+ \step[fieldset=<<type>>, origentrytype]
+ }
+ }
+}
+\end{ltxexample}
+%
+Any \bibfield{chat} entrytypes would become \bibfield{customa} entrytypes and
+would automatically have a \bibfield{type} field set to
+<chat> unless the \bibfield{type} field already exists in the entry (because
+\texttt{overwrite} is false by default). This mapping applies only to entries of type
+\bibtype{chat} since the first step has \texttt{final} set and so if the
+\texttt{typesource} does not match the entry entrytype, processing of this
+\cmd{map} immediately terminates.
+%
+\begin{ltxexample}
+\DeclareSourcemap{
+ \maps[datatype=bibtex]{
+ \map{
+ \perdatasource{<<examples.bib>>}
+ \pertype{<<article>>}
+ \pertype{<<book>>}
+ \step[fieldset=<<abstract>>, null]
+ \step[fieldset=<<note>>, fieldvalue={<<Auto-created this field>>}]
+ }
+ }
+}
+\end{ltxexample}
+%
+Any entries of entrytype \bibtype{article} or \bibtype{book} from the
+\texttt{examples.bib} datasource would have their \bibfield{abstract}
+fields removed and a \bibfield{note} field added with value <Auto-created this field>.
+%
+\begin{ltxexample}
+\DeclareSourcemap{
+ \maps[datatype=bibtex]{
+ \map{
+ \step[fieldset=<<abstract>>, null]
+ \step[fieldsource=<<conductor>>, fieldtarget=<<namea>>]
+ \step[fieldsource=<<gps>>, fieldtarget=<<usera>>]
+ }
+ }
+}
+\end{ltxexample}
+%
+This removes \bibfield{abstract} fields from any entry, changes
+\bibfield{conductor} fields to \bibfield{namea} fields and changes \bibfield{gps}
+fields to \bibfield{usera} fields.
+%
+\begin{ltxexample}
+\DeclareSourcemap{
+ \maps[datatype=bibtex]{
+ \map{
+ \step[fieldsource=<<pubmedid>>, fieldtarget=<<eprint>>, final]
+ \step[fieldset=<<eprinttype>>, origfield]
+ \step[fieldset=<<userd>>, fieldvalue={<<Some string of things>>}]
+ }
+ }
+}
+\end{ltxexample}
+%
+Applies only to entries with \bibfield{pubmed} fields and maps
+\bibfield{pubmedid} fields to \bibfield{eprint} fields, sets the \bibfield{eprinttype}
+field to <pubmedid> and also sets the \bibfield{userd} field to the string
+<Some string of things>.
+%
+\begin{ltxexample}
+\DeclareSourcemap{
+ \maps[datatype=bibtex]{
+ \map{
+ \step[fieldsource=<<series>>,
+ match=\regexp{<<\A\d*(.+)>>},
+ replace=\regexp{<<\L$1>>}]
+ }
+ }
+}
+\end{ltxexample}
+%$<- to stop emacs highlighting breaking
+Here, the contents of the \bibfield{series} field have leading numbers stripped and the remainder of the contents lowercased. Since regular expressions usually contain all sort of special characters, it is best to enclose them in the provided \cmd{regexp} macro as shown---this will pass the expression through to \biber\ correctly.
+%
+\begin{ltxexample}
+\DeclareSourcemap{
+ \maps[datatype=bibtex]{
+ \map{
+ \step[fieldsource=<<maintitle>>,
+ match=\regexp{<<Collected\s+Works.+Freud>>},
+ final]
+ \step[fieldset=<<keywords>>, fieldvalue=<<freud>>]
+ }
+ }
+}
+\end{ltxexample}
+%$<- to stop emacs highlighting breaking
+Here, if for an entry, the \bibfield{maintitle} field matches a particular regular expression, we set a special keyword so we can, for example, make a references section just for certain items.
+%
+\begin{ltxexample}
+\DeclareSourcemap{
+ \maps[datatype=bibtex]{
+ \map{
+ \step[fieldsource=<<lista>>, match=\regexp{<<regexp>>}, final]
+ \step[fieldset=<<lista>>, null]
+ }
+ }
+}
+\end{ltxexample}
+%
+If an entry has a \bibfield{lista} field which matches regular expression <regexp>, then it is removed.
+%
+\begin{ltxexample}
+\DeclareSourcemap{
+ \maps[datatype=bibtex]{
+ \map[overwrite=false]{
+ \step[fieldsource=<<author>>]
+ \step[fieldset=<<editor>>, origfieldval, final]
+ \step[fieldsource=<<editor>>, match=\regexp{<<\A(.+?)\s+and.*>>}, replace={<<$1>>}]
+ }
+ }
+}
+\end{ltxexample}
+%$<- to stop emacs highlighting breaking
+For any entry with an \bibfield{author} field, try to set
+\bibfield{editor} to the same as \bibfield{author}. If this fails because
+\bibfield{editor} already exists, stop, otherwise truncate
+\bibfield{editor} to just the first name in the name list.
+%
+\begin{ltxexample}
+\DeclareSourcemap{
+ \maps[datatype=bibtex]{
+ \map{
+ \step[fieldsource=<<author>>,
+ match={<<Smith, Bill>>},
+ replace={<<Smith, William>>}]
+ \step[fieldsource=<<author>>,
+ match={<<Jones, Baz>>},
+ replace={<<Jones, Barry>>}]
+ }
+ }
+}
+\end{ltxexample}
+%
+Here, we use multiple match/replace for the same field to regularise some inconstant name variants. Bear in mind that \cmd{step} processing within a \opt{map} element is sequential and so the changes from a previous \cmd{step}s are already committed. Note that we don't need the \cmd{regexp} macro to protect the regular expressions in this example as they contain no characters which need special escaping. Please note that due to the difficulty of protecting regular expressions in \latex, there should be no literal spaces in the argument to \cmd{regexp}. Please use escape code equivalents if spaces are needed. For example, this example, if using \cmd{regexp}, should be:
+%
+\begin{ltxexample}
+\DeclareSourcemap{
+ \maps[datatype=bibtex]{
+ \map{
+ \step[fieldsource=<<author>>,
+ match=\regexp{<<Smith,\s+Bill>>},
+ replace=\regexp{<<Smith,\x20William>>}]
+ \step[fieldsource=<<author>>,
+ match=\regexp{<<Jones,\s+Baz>>},
+ replace=\regexp{<<Jones,\x20Barry>>}]
+ }
+ }
+}
+\end{ltxexample}
+%
+Here, we have used the hexadecimal escape sequence <|\x20|> in place of literal spaces in the replacement strings.
+%
+\begin{ltxexample}
+\DeclareSourcemap{
+ \maps[datatype=bibtex]{
+ \map[overwrite]{
+ \step[fieldsource=<<author>>, match={<<Doe,>>}, final]
+ \step[fieldset=<<shortauthor>>, origfieldval]
+ \step[fieldset=<<sortname>>, origfieldval]
+ \step[fieldsource=<<shortauthor>>,
+ match=\regexp{<<Doe,\s*(?:\.|ohn)(?:[-]*)(?:P\.|Paul)*>>},
+ replace={<<Doe, John Paul>>}]
+ \step[fieldsource=<<sortname>>,
+ match=\regexp{<<Doe,\s*(?:\.|ohn)(?:[-]*)(?:P\.|Paul)*>>},
+ replace={<<Doe, John Paul>>}]
+ }
+ }
+}
+\end{ltxexample}
+%
+Only applies to entries with an \bibfield{author} field matching <Doe,>. First the \bibfield{author} field is copied to both the \bibfield{shortauthor} and \bibfield{sortname} fields, overwriting them if they already exist. Then, these two new fields are modified to canonicalise a particular name, which presumably has some variants in the data source.
+%
+\begin{ltxexample}
+\DeclareSourcemap{
+ \maps[datatype=bibtex]{
+ \map[overwrite]{
+ \step[fieldsource=<<verba>>, final]
+ \step[fieldset=<<verbb>>, fieldvalue=<</>>, append]
+ \step[fieldset=<<verbb>>, origfieldval, append]
+ \step[fieldsource=<<verbb>>, final]
+ \step[fieldset=<<verbc>>, fieldvalue=<</>>, append]
+ \step[fieldset=<<verbc>>, origfieldval, append]
+ }
+ }
+}
+\end{ltxexample}
+%
+This example demonstrates the sequential nature of the step processing and the \opt{append} option. If an entry has a \bibfield{verba} field then first, a forward slash is appended to the \bibfield{verbb} field. Then, the contents of \bibfield{verba} are appended to the \bibfield{verbb} field. A slash is then appended to the \bibfield{verbc} field and the contents of \bibfield{verbb} are appended to the \bibfield{verbc} field.
+%
+\begin{ltxexample}
+\DeclareSourcemap{
+ \maps[datatype=bibtex]{
+ \map[overwrite]{
+ \step[fieldset=<<autourl>>, fieldvalue={<<http://scholar.google.com/scholar?q=">>}]
+ \step[fieldsource=<<title>>]
+ \step[fieldset=<<autourl>>, origfieldval, append]
+ \step[fieldset=<<autourl>>, fieldvalue={<<"+author:>>}, append]
+ \step[fieldsource=<<author>>, match=\regexp{<<\A([^,]+)\s*,>>}]
+ \step[fieldset=<<autourl>>, fieldvalue={<<$1>>}, append]
+ \step[fieldset=<<autourl>>, fieldvalue={<<&as_ylo=>>}, append]
+ \step[fieldsource=<<year>>]
+ \step[fieldset=<<autourl>>, origfieldval, append]
+ \step[fieldset=<<autourl>>, fieldvalue={<<&as_yhi=>>}, append]
+ \step[fieldset=<<autourl>>, origfieldval, append]
+ }
+ }
+}
+\end{ltxexample}%$ <- keep AucTeX highlighting happy
+%
+This example assumes you have created a field called \bibfield{autourl} using the datamodel macros from \secref{aut:ctm:dm} in order to hold, for example, a Google Scholar query URL auto-created from elements of the entry. The example progressively extracts information from the entry, constructing the URL as it goes. It demonstrates that it is possible to refer to parenthetical matches from the most recent \texttt{match} in any following \texttt{fieldvalue} which allows extracting the family name from the \bibfield{author}, assuming a <family, given> format. The resulting field could then be used as a hyperlink from, for example, the title of the work in the bibliography.
+%
+\begin{ltxexample}
+\DeclareSourcemap{
+ \maps[datatype=bibtex]{
+ \map{
+ \step[fieldsource=<<title>>, match={A Title}, final]
+ \step[entrynull]
+ }
+ }
+}
+\end{ltxexample}
+%
+Any entry with a \bibfield{title} field matching <A Title> will be completely ignored.
+%
+\begin{ltxexample}
+\DeclareSourcemap{
+ \maps[datatype=bibtex]{
+ \map{
+ \pernottype{book}
+ \pernottype{article}
+ \step[entrynull]
+ }
+ }
+}
+\end{ltxexample}
+%
+Any entry which is not a \bibtype{book} or \bibtype{article} will be ignored.
+%
+\begin{ltxexample}
+\DeclareSourcemap{
+ \maps[datatype=bibtex]{
+ \map{
+ \perdatasource{<<biblatex-examples.bib>>}
+ \step[entryclone={rel-}]
+ }
+ }
+}
+\end{ltxexample}
+%
+Here, a clone of an entry from the specified data source will be created. The entry key of the clone will be the same as the original but prefixed by the value of the \texttt{entryclone} parameter. The cloned entry would still need to be cited in the document using its new entry key. This type of mapping step should be used with care as it may produce labelling problems in authoryear styles which use, for example, \opt{extradate}. One use case is for numeric styles which contain multiple bibliographies containing the same entry. In this case, you may need different bibliography number labeld for the same entry and this is very tricky when there is only one entry which needs different labels. Creating clones with different entry keys solves this problem.
+
+\begin{ltxexample}
+\DeclareSourcemap{
+ \maps[datatype=bibtex]{
+ \map{
+ \step[fieldsource=<<note>>]
+ \step[fieldset=<<usera>>, origfieldval]
+ \step[fieldsource=<<usera>>, matchesi={string1,string2,StriNg3}, replace={1,2,3}]
+ }
+ }
+}
+\end{ltxexample}
+%
+Here, any \bibfield{note} field is copied to \bibfield{usera} and then <string1>, <string2> and <string3> are matched case-insensitively in the \bibfield{usera} field and replaced with <1>, <2> and <3> respectively. The value of \texttt{matches} and \texttt{matchesi} are not regular expressions, they are CSV lists of literal strings, as is the value of \texttt{replace} when either of \texttt{matches} or \texttt{matchesi} are used. The lengths of the match/replace CSV lists must be the same. This is useful when creating a new field to sort by in a custom sorting scheme when the field you wish to sort by has a defined order which is not alphabetical or numeric, such as when sorting by level of court in legal bibliographies. Using \texttt{matches} is simply more efficient than using many individual \texttt{match} maps in serial.
+
+\biblatexml\ datasources are more structured than \bibtex\ since they are XML. Sourcemapping is possible with \biblatexml\ too but the specifications of source and target fields etc. also support XPath 1.0 paths in order to be able to work with the structured data. Fields can be specified as per the \bibtex\ examples above and these are converted into XPath 1.0 queries internally as necessary. For example:
+
+\begin{ltxexample}
+\DeclareSourcemap{
+ \maps[datatype=biblatexml]{
+ \map{
+ \step[fieldsource=\regexp{./bltx:names[@type='author']/bltx:name[2]/bltx:namepart[@type='family']},
+ match=\regexp{\ASmith},
+ replace={Jones}]
+ }
+ \map{
+ \step[fieldsource=editor, fieldtarget=translator]
+ }
+ \map{
+ \step[fieldsource=\regexp{./bltx:names[@type='editor']},
+ fieldtarget=\regexp{./bltx:names[@type='translator']}]
+ }
+ \map{
+ \step[fieldset=\regexp{./bltx:names[@type='author']/bltx:name[2]/@useprefix},
+ fieldvalue={false}]
+ }
+ }
+}
+\end{ltxexample}
+%
+These maps, respectively,
+
+\begin{itemize}
+\item Replace the family name <Smith> of the second \bibfield{author} name with <Jones>
+\item Move the \bibfield{editor} to \bibfield{translator}
+\item Move the \bibfield{editor} to \bibfield{translator} but with explicit XPaths
+\item Set the per-namelist \opt{useprefix} option on the \bibfield{author} name list to <false>
+\end{itemize}
+
+\subsubsection{Data Model Specification}
+\label{aut:ctm:dm}
+
+The data model which \biblatex uses consists of four main elements:
+
+\begin{itemize}
+\item Specification of constant strings and lists of strings
+\item Specification of valid Entrytypes
+\item Specification of valid Fields along with their type, datatype and any special flags
+\item Specification of which Fields are valid in which Entrytypes
+\item Specification of constraints which can be used to validate data against the data model
+\end{itemize}
+
+The default data model is defined in the core \biblatex file \file{blx-dm.def} using the macros described in this section. The default data model is described in detail in \secref{bib}. The data model is used internally by \biblatex and also by the backend. In practice, changing the data model means that you can define the entrytypes and fields for your datasources and validate your data against the data model. Naturally, this is not much use unless your style supports any new entrytypes or fields and it raises issues of portability between styles (although this can be mitigated by using the dynamic data modification functionality described in \secref{aut:ctm:map}).
+
+Note that while the \biber/\bibtex input site is not case sensitive when it comes to entry types and field names (Perl's Unicode case folding is used to normalise field names and entry types), the \latex side is case sensitive and uses the exact capitalisation from the data model.
+
+Validation against the data model means that after mapping your data sources into the data model, \biber (using its \path{--validate_datamodel} option) can check:
+
+\begin{itemize}
+\item Whether all entrytypes are valid entrytypes
+\item Whether all fields are valid fields for their entrytype
+\item Whether the fields obey various constraints on their format which you specify
+\end{itemize}
+%
+Redefining the data model can be done in several places. Style authors can create a \file{.dbx} file which contains the data model macros required and this will be loaded automatically when using the \biblatex package \opt{style} option by looking for a file named after the style with a \file{.dbx} extension (just like the \file{.cbx} and \file{.bbx} files for a style). If the \opt{style} option is not used but rather the \opt{citestyle} and \opt{bibstyle} options, then the package will try to load \file{.dbx} files called \file{$<$citestyle$>$.dbx} and \file{$<$bibstyle$>$.dbx}.
+Alternatively, the name of the data model file can be different from any of the style option names by specifying the name (without \file{.dbx} extension) to the package \opt{datamodel} option. After loading the style data model file, \biblatex then loads, if present, a users \file{biblatex-dm.cfg} which should be put somewhere \biblatex can find it, just like the main configuration file \sty{biblatex.cfg}. To summarise, the data model is determined by adding to the data model from each of these locations, in order:\\
+
+\noindent\file{blx-dm.def}$\rightarrow$\\
+\hspace*{1em}\file{$<$datamodel option$>$.dbx} $\rightarrow$\\
+\hspace*{2em}\file{$<$style option$>$.dbx} $\rightarrow$\\
+\hspace*{3em}\file{$<$citestyle option$>$.dbx} and \file{$<$bibstyle option$>$.dbx} $\rightarrow$\\
+\hspace*{4em}\file{biblatex-dm.cfg}\\
+
+\noindent It is not possible to add to a loaded data model by using the macros below in your preamble as the preamble is read after \biblatex has defined critical internal macros based on the data model. If any data model macro is used in a document, it will be ignored and a warning will be generated. The data model is defined using the following macros:
+
+\begin{ltxsyntax}
+
+\cmditem{DeclareDatamodelConstant}[options]{name}{constantdef}
+
+Declares the \prm{name} as a datamodel constant with definition \prm{constantdef}. Such constants are typically used internally by \biber.
+
+\begin{optionlist*}
+
+\choitem[string]{type}{string, list}
+
+A constant can be a simple string (default if the \prm{type} option is omitted) or a comma"=separated list of strings.
+
+\end{optionlist*}
+
+\cmditem{DeclareDatamodelEntrytypes}[options]{entrytypes}
+
+Declares the comma"=separated list of \prm{entrytypes} to be valid entrytypes in the data model. As usual in \tex csv lists, make sure each element is immediately followed by a comma or the closing brace---no extraneous whitespace.
+
+\begin{optionlist*}
+
+\boolitem[false]{skipout}
+
+This entrytype is not output to the \file{.bbl}. Typically used for special entrytypes which are processed and consumed by the backend such as \bibtype{xdata}.
+
+\end{optionlist*}
+
+\cmditem{DeclareDatamodelFields}[options]{fields}
+
+Declares the comma"=separated list of \prm{fields} to be valid fields in the data model with associated comma"=separated \prm{options}. The \prm{type} and \prm{datatype} options are mandatory. All valid \prm{options} are:
+
+\begin{optionlist*}
+
+\valitem{type}{field type}
+
+Set the type of the field as described in \secref{bib:fld:typ}, typically <field> or <list>.
+
+\valitem{format}{field format}
+
+Any special format of the field. Normally unspecified but can take the value <xsv> which tells \biber that this field has a separated values format. The exact separator can be controlled with the \biber option \opt{xsvsep} and defaults to the expected comma surrounded by optional whitespace.
+
+\valitem{datatype}{field datatype}
+
+Set the datatype of the field as described in \secref{bib:fld:typ}. For example, <name> or <literal>.
+
+\boolitem[false]{nullok}
+
+The field is allowed to be defined but empty.
+
+\boolitem[false]{skipout}
+
+The field is not output to the \file{.bbl} and is therefore not present during \biblatex style processing. As usual in \tex csv lists, make sure each element is immediately followed by a comma or the closing brace---no extraneous whitespace.
+
+\boolitem[false]{label}
+
+The field can be used as a label in a bibliography or bibliography list. Specifying this causes \biblatex to create several helper macros for the field so that there are some internal lengths and headings etc. defined.
+
+\end{optionlist*}
+
+\cmditem{DeclareDatamodelEntryfields}[entrytypes]{fields}
+
+Declares that the comma"=separated list of \prm{fields} is valid for the comma"=separated list of \prm{entrytypes}. If \prm{entrytypes} is not given, the fields are valid for all entrytypes. As usual in \tex csv lists, make sure each element is immediately followed by a comma or the closing brace---no extraneous whitespace.
+
+\cmditem{DeclareDatamodelMultiscriptEntryfields}{fields}
+
+Declares that the comma"=separated list of \prm{fields} are valid multiscript enabled fields. See \ref{use:multiscript}. As usual in \tex csv lists, make sure each element is immediately followed by a comma or the closing brace---no extraneous whitespace.
+
+\cmditem{DeclareDatamodelConstraints}[entrytypes]{specification}
+
+If a comma"=separated list of \prm{entrytypes} is given, the constraints apply only to those entrytypes. The \prm{specification} is an undelimited list of \cmd{constraint} directives which specify a constraint. Spaces, tabs, and line endings may be used freely to visually arrange the \prm{specification}. Blank lines are not permissible.
+
+\cmditem{constraint}[type=constrainttype]{elements}
+
+Specifies a constraint of type \prm{constrainttype}. Valid constraint types are:
+
+\begin{optionlist*}
+
+\choitem{type}{data, mandatory, conditional}
+
+Constraints of type <data> put restrictions on the value of a field. Constraints of type <mandatory> specify which fields or combinations of fields an entrytype should have. Constraints of type <conditional> allow more sophisticated conditional and quantified field constraints.
+
+\choitem{datatype}{integer, isbn, issn, ismn, datepart, pattern}
+
+For constraints of type \prm{data}, constrain field values to be the given datatype.
+
+\valitem{rangemin}{num}
+
+For constraints of \prm{type} <data> and \prm{datatype} <integer>, constrain field values to be at least \prm{num}.
+
+\valitem{rangemax}{num}
+
+For constraints of \prm{type} <data> and \prm{datatype} <integer>, constrain field values to be at most \prm{num}.
+
+\valitem{pattern}{patt}
+
+For constraints of \prm{type} <data> and \prm{datatype} <pattern>, constrain field values to match regular expression pattern \prm{patt}. It is best to wrap any regular expression in the macro \cmd{regexp}, see \secref{aut:ctm:map}.
+
+\end{optionlist*}
+
+A \cmd{constraint} macro may contain any of the following:
+
+\cmditem{constraintfieldsor}{fields}
+
+For constraints of \prm{type} <mandatory>, specifies that an entry must contain a boolean OR of the \cmd{constraintfield}s.
+
+\cmditem{constraintfieldsxor}{fields}
+
+For constraints of \prm{type} <mandatory>, specifies that an entry must contain a boolean XOR of the \cmd{constraintfield}s.
+
+\cmditem{antecedent}[quantifier=quantspec]{fields}
+
+For constraints of \prm{type} <conditional>, specifies a quantified set of \cmd{constraintfield}s which must be satisfied before the \cmd{consequent} of the constraint is checked. \prm{quantspec} should have one of the following values:
+
+\begin{optionlist*}
+
+\choitem{quantifier}{all, one, none}
+
+Specifies how many of the \cmd{constrainfield}'s inside the \cmd{antecedent} have to be present to satisfy the antecedent of the conditional constraint.
+
+\end{optionlist*}
+
+\cmditem{consequent}[quantifier=quantspec]{fields}
+
+For constraints of \prm{type} <conditional>, specifies a quantified set of \cmd{constraintfield}s which must be satisfied if the preceding \cmd{antecedent} of the constraint was satisfied. \prm{quantspec} should have one of the following values:
+
+\begin{optionlist*}
+
+\choitem{quantifier}{all, one, none}
+
+Specifies how many of the \cmd{constraintfield}'s inside the \cmd{consequent} have to be present to satisfy the consequent of the conditional constraint.
+
+\end{optionlist*}
+
+\cmditem{constraintfield}{field}
+
+For constraints of \prm{type} <data>, the constraint applies to this \prm{field}. For constraints of \prm{type} <mandatory>, the entry must contain this \prm{field}.
+
+The data model declaration macros may be used multiple times as they append to the previous definitions. In order to replace, change or remove existing definitions (such as the default model which is loaded with \biblatex), you should reset (clear) the current definition and then set what you want using the following macros. Typically, these macros will be the first things in any \file{biblatex-dm.cfg} file:
+
+\cmditem{ResetDatamodelEntrytypes}
+
+Clear all data model entrytype information.
+
+\cmditem{ResetDatamodelFields}
+
+Clear all data model field information.
+
+\cmditem{ResetDatamodelEntryfields}
+
+Clear all data model fields for entrytypes information.
+
+\cmditem{ResetDatamodelMultiscriptEntryfields}
+
+Clear all data model multiscript fields information.
+
+\cmditem{ResetDatamodelConstraints}
+
+Clear all data model fields Constraints information.
+
+\end{ltxsyntax}
+
+Here is an example of a simple data model. Refer to the core \biblatex file \file{blx-dm.def} for the default data model specification.
+
+\begin{ltxexample}
+\ResetDatamodelEntrytypes
+\ResetDatamodelFields
+\ResetDatamodelEntryfields
+\ResetDatamodelConstraints
+
+\DeclareDatamodelEntrytypes{<<entrytype1, entrytype2>>}
+
+\DeclareDatamodelFields[type=field, datatype=literal]{<<field1,field2,field3,field4>>}
+
+\DeclareDatamodelEntryfields{<<field1>>}
+\DeclareDatamodelEntryfields[entrytype1]{<<field2,field3>>}
+\DeclareDatamodelEntryfields[entrytype2]{<<field2,field3,field4>>}
+
+\DeclareDatamodelConstraints[<<entrytype1>>]{
+ \constraint[type=data, datatype=integer, rangemin=3, rangemax=10]{
+ \constraintfield{<<field1>>}
+ }
+ \constraint[type=mandatory]{
+ \constraintfield{<<field1>>}
+ \constraintfieldsxor{
+ \constraintfield{<<field2>>}
+ \constraintfield{<<field3>>}
+ }
+ }
+}
+\DeclareDatamodelConstraints{
+ \constraint[type=conditional]{
+ \antecedent[quantifier=none]{
+ \constraintfield{<<field2>>}
+ }
+ \consequent[quantifier=all]{
+ \constraintfield{<<field3>>}
+ \constraintfield{<<field4>>}
+ }
+ }
+}
+\end{ltxexample}
+%
+This model specifies:
+
+\begin{itemize}
+\item Clear the default data model completely
+\item Two valid entry types \bibtype{entrytype1} and \bibtype{entrytype2}
+\item Four valid literal field fields
+\item \bibfield{field1} is valid for all entrytypes
+\item \bibfield{field2} and \bibfield{field3} are valid for \bibfield{entrytype1}
+\item \bibfield{field2}, \bibfield{field3} and \bibfield{field4} are valid for \bibtype{entrytype2}
+\item For \bibtype{entrytype1}:
+ \begin{itemize}
+ \item \bibfield{field1} must be an integer between 3 and 10
+ \item \bibfield{field1} must be present
+ \item One and only one of \bibfield{field2} or \bibfield{field3} must be present
+ \end{itemize}
+\item For any entrytype, if \bibfield{field2} is not present, \bibfield{field3} and \bibfield{field4} must be present
+\end{itemize}
+
+\subsubsection{Labels}
+\label{aut:ctm:lab}
+
+Alphabetic styles use a label to identify bibliography entries. This label is constructed from components of the entry using a template which describes how to build the label. The template can be customised on a global or per-type basis. A separate template is used to specify how to extract parts of name fields for labels, since names can be quite complex fields.
+
+\begin{ltxsyntax}
+
+\cmditem{DeclareLabelalphaTemplate}[]{specification}
+
+Defines the alphabetic label template for the given entrytypes. If no entrytypes are specified in the first argument, then the global label template is defined. The \prm{specification} is an undelimited list of \cmd{labelelement} directives which specify the elements used to build the label. Spaces, tabs, and line endings may be used freely to visually arrange the \prm{specification}. Blank lines are not permissible. This command may only be used in the preamble.
+
+\cmditem{labelelement}{elements}
+
+Specifies the elements used to build the label. The \prm{elements} are an undelimited list of \cmd{field} or \cmd{literal} commands which are evaluated in the order in which they are given. The first \cmd{field} or \cmd{literal} which expands to a non-empty string is used as the \cmd{labelelement} expansion and the next \cmd{labelelement}, if any, is then processed.
+
+\cmditem{field}[key=value, \dots]{field}
+
+If \prm{field} is non-empty, use it as the current label \cmd{labelelement}, subject to the options below. Useful values for \prm{field} are typically the name list type fields, date fields, and title fields. You may also use the `citekey' or `entrykey` pseudo-fields to specify the citation/entry key as part of the label. Name list fields are treated specially and when a name list field is specified, the template defined with \cmd{DeclareLabelalphaNameTemplate} is used to extract parts from the name which then returns the string that the \cmd{field} option uses. Non-name list fields are treated specially in that the result of the labelpart for the field is the concatenation of applying the template to each item in the list.
+
+\begin{optionlist*}
+
+\valitem{form}{string}
+
+The multiscript form of the \prm{field}. Must be one of the <multiscriptforms> constants declared with \cmd{DeclareDatamodelConstant}. See \ref{use:multiscript}. Defaults to the global \opt{msform} option.
+
+\valitem{lang}{bcp47tag}
+
+The multiscript BCP47 language tag of the \prm{field}. Defaults to the global \opt{mslang} option.
+
+\boolitem[false]{final}
+
+This option marks a \cmd{field} directive as the final one in the \prm{specification}. If the \prm{field} is non-empty, then this field is used for the label and the remainder of the \prm{specification} will be ignored. The short form \opt{final} is equivalent to \kvopt{final}{true}.
+
+\boolitem[false]{lowercase}
+
+Forces the label part derived from the field to lowercase. By default, the case is taken from the field source and not modified.
+
+\intitem[1]{strwidth}
+
+The number of characters of the \prm{field} to use. This setting may be overridden by an individual name part when extracting characters from a name. See \cmd{DeclareLabelalphaNameTemplate} below.
+
+\choitem[left]{strside}{left, right}
+
+The side of the string from which to take the \texttt{strwidth} number of characters. This setting may be overridden by an individual name part when extracting characters from a name. See \cmd{DeclareLabelalphaNameTemplate} below.
+
+\choitem[right]{padside}{left, right}
+
+Side to pad the label part when using the \texttt{padchar} option. Only for use with fixed-width label strings (\texttt{strwidth}).
+
+\valitem{padchar}{character}
+
+If present, pads the label part on the \texttt{padside} side with the specified character to the length of \texttt{strwidth}. Only for use with fixed-width label strings (\texttt{strwidth}).
+
+\boolitem[false]{uppercase}
+
+Forces the label part derived from the field to uppercase. By default, the case is taken from the field source and not modified.
+
+\boolitem[false]{varwidth}
+
+Use a variable width, left-side substring of characters from the string returned for \prm{field}. The length of the string is determined by the minimum length needed to disambiguate the substring from all other \prm{field} elements in the same position in the label. For name list fields, this means that each name substring is disambiguated from all other name substrings which occur in the same position in the name list (see examples below). This option overrides \texttt{strwidth} if both are used. The short form \opt{varwidth} is equivalent to \kvopt{varwidth}{true}. For name list fields, the \cmd{namepart}s with the \opt{pre} option set are prepended to the string returned from this disambiguation.
+
+\boolitem[false]{varwidthnorm}
+
+As \texttt{varwidth} but will force the disambiguated substrings for the \prm{field} to be the same length as the longest disambiguated substring. This can be used to regularise the format of the labels if desired. This option overrides \texttt{strwidth} if both are used. The short form \opt{varwidthnorm} is equivalent to \kvopt{varwidthnorm}{true}.
+
+\boolitem[false]{varwidthlist}
+
+Alternative method of automatic label disambiguation where the field as a whole is disambiguated from all other fields in the same label position. For non-name list fields, this is equivalent to \texttt{varwidth}. For name list fields, names in a name list are not disambiguated from other names in the same position in their name lists but instead the entire name list is disambiguated as a whole from other name lists (see examples below). This option overrides \texttt{strwidth} if both are used. The short form \opt{varwidthlist} is equivalent to \kvopt{varwidthlist}{true}. For name list fields, the \cmd{namepart}s with the \opt{pre} option set are prepended to the string returned from this disambiguation.
+
+\intitem{strwidthmax}
+
+When using \texttt{varwidth}, this option sets a limit (in number of characters) on the length of variable width substrings. This option can be used to regularise the label.
+
+\intitem[1]{strfixedcount}
+
+When using \texttt{varwidthnorm}, there must be at least \texttt{strfixedcount} disambiguated substrings with the same, maximal length to trigger the forcing of all disambiguated substrings to this same maximal length.
+
+\valitem{ifnames}{range}
+
+Only use this \cmd{field} specification if it is a name list field with a number of names matching the \texttt{ifnames} range value. This allows a \cmd{labelelement} to be conditionalised on name length (see below). The range can specified as in the following examples:
+
+\begin{lstlisting}[language=xml]
+ifnames=3 -> Only apply to name lists containing exactly 3 names
+ifnames={2-4} -> Only apply to name lists containing minimum 2 and maximum 4 names
+ifnames={-3} -> Only apply to name lists containing at most 3 names
+ifnames={2-} -> Only apply to name lists containing at least 2 names
+\end{lstlisting}
+
+\valitem{names}{range}
+
+By default, for name list fields, the names used range from the first name to the \cnt{maxalphanames}\slash \cnt{minalphanames} truncation. This option can be used to override this with an explicit range of names to consider. The plus <+> sign is a special end of range marker denoting the truncation point of max/minalphanames. The range separator can be any number of characters with the Unicode Dash property. For example:
+
+\begin{lstlisting}[language=xml]
+names=3 -> Use first 3 names in the name list
+names={2-3} -> Use second and thirds names only
+names={-3} -> Same as 1-3
+names={2-} -> Use all names starting with the second name (ignoring max/minalphanames truncation)
+names={2-+} -> Use all names starting with the second name (respecting max/minalphanames truncation)
+\end{lstlisting}
+
+\valitem[empty]{namessep}{string}
+
+An arbitrary string separator to put between names in a namelist.
+
+\boolitem[false]{noalphaothers}
+
+By default, \cmd{labelalphaothers} is appended to label parts derived from name lists if there are more names in the list than are shown in the label part. This option can be used to disable the default behaviour.
+
+\end{optionlist*}
+
+\cmditem{literal}{characters}
+
+Insert the literal \prm{characters} into the label at this point.
+
+\end{ltxsyntax}
+%
+When a name list \cmd{field} is specified, the method of extracting the string is specified by a separate template specified by the following command:
+
+\begin{ltxsyntax}
+
+\cmditem{DeclareLabelalphaNameTemplate}[name]{specification}
+
+Defines the \opt{labelalphaname} template \prm{name}. The \prm{name} is optional and defaults to \prm{<global>}.
+
+Such templates specify how to extract a label string from a name list when a \cmd{field} specification in \cmd{DeclareLabelalphaTemplate} contains a name list.
+
+\cmditem{namepart}[options]{namepart}
+
+\prm{namepart} is one of the datamodel nameparts defined with the \cmd{DeclareDatamodelConstant} command (see \secref{aut:bbx:drv}). The \prm{options} are:
+
+\begin{optionlist*}
+
+\boolitem[false]{use}
+
+Only use the \prm{namepart} in constructing the label information if there is a corresponding option \opt{use<namepart>} and that option is true.
+
+\boolitem[false]{pre}
+
+When constructing label strings from names, the \cmd{namepart} \emph{without} a \opt{pre} option will be used to construct label string, passing through disambiguation, substring etc. operations as specified by the \cmd{field} options in \cmd{DeclareLabelalpaTemplate}. Then the \cmd{namepart} options \emph{with} the \opt{pre} option set will be prepended to the result, (in the order given, if there are more than one such \cmd{namepart}s). This allows to unconditionally prepend certain namepart information to name label strings, like name prefices. Note that the \opt{uppercase} and \opt{lowercase} options of \cmd{field} in \cmd{DeclareLabelalphaTemplate} are applied to the entire label returned from \cmd{DeclareLabelalphaTemplate}, both \opt{pre} parts and non \opt{pre}.
+
+\boolitem[false]{compound}
+
+For static (non-varwidth) disambiguation in \cmd{DeclareLabelalphaTemplate}, treat nameparts separated by whitespace or hyphens (compound names) as separate names for label generation. This means that when forming a label out of, for example the surname <Ballam Forsyth> with a 1 character, left-side substring, this name would give <BF> with \kvopt{compound}{true} and <B> with \kvopt{compound}{false}. The short form \opt{compound} is equivalent to \kvopt{compound}{true}.
+
+\intitem[1]{strwidth}
+
+The number of characters of the \prm{namepart} to use.
+
+\choitem[left]{strside}{left, right}
+
+The side of the string from which to take the \texttt{strwidth} number of characters.
+
+\end{optionlist*}
+
+\end{ltxsyntax}
+
+Note that the templates for labels can be defined per-type and you should be aware of this when using the automatically disambiguated label functionality. Disambiguation is not per-type as this might lead to ambiguity due to different label formats for different types being isolated from each others disambiguation process. Normally, you will want to use very different label formats for different types to make the type obvious by the label.
+
+Here are some examples. The default global \biblatex alphabetic label template is defined below. Firstly, \bibfield{shorthand} has \kvopt{final}{true} and so if there is a \bibfield{shorthand} field, it is used as the label and nothing more of the template is considered. Next, the \bibfield{label} field is used as the first label element if it exists. Otherwise, if there is only one name (\kvopt{ifnames}{1}) in the \bibfield{labelname} list, then three characters from the left side of the family name in the \bibfield{labelname} are used as the first label element. If the \bibfield{labelname} has more than one name in it, one character from the left side of each family name is used as the first label element. The second label element consists of 2 characters from the right side of the \bibfield{year} field.
+
+The default template for constructing labels from names is also shown. This prepends the first character from the left side of any prefix (if the \opt{useprefix} option is true) to a label extracted from the family name (according to the options on the calling \cmd{field} option from \cmd{DeclareLabelalphaTemplate}), allowing for compound family names.
+
+\begin{ltxexample}
+\DeclareLabelalphaTemplate{
+ \labelelement{
+ \field[final]{<<shorthand>>}
+ \field{<<label>>}
+ \field[strwidth=3,strside=left,ifnames=1]{<<labelname>>}
+ \field[strwidth=1,strside=left]{<<labelname>>}
+ }
+ \labelelement{
+ \field[strwidth=2,strside=right]{<<year>>}
+ }
+}
+
+\DeclareLabelalphaNameTemplate{
+ \namepart[use=true, pre=true, strwidth=1, compound=true]{prefix}
+ \namepart{family}
+}
+
+\end{ltxexample}
+%
+To get an idea of how the label automatic disambiguation works, consider the following author lists:
+
+\begin{lstlisting}{}
+Agassi, Chang, Laver (2000)
+Agassi, Connors, Lendl (2001)
+Agassi, Courier, Laver (2002)
+Borg, Connors, Edberg (2003)
+Borg, Connors, Emerson (2004)
+\end{lstlisting}
+%
+Assuming a template declaration such as:
+
+\begin{ltxexample}
+\DeclareLabelalphaTemplate{
+ \labelelement{
+ \field[varwidth]{<<labelname>>}
+ }
+}
+\end{ltxexample}
+%
+Then the labels would be:
+
+\begin{lstlisting}{}
+Agassi, Chang, Laver [AChLa]
+Agassi, Connors, Lendl [AConLe]
+Agassi, Courier, Laver [ACouLa]
+Borg, Connors, Edberg [BConEd]
+Borg, Connors, Emerson [BConEm]
+\end{lstlisting}
+%
+With normalised variable width labels defined:
+
+\begin{ltxexample}
+\DeclareLabelalphaTemplate{
+ \labelelement{
+ \field[varwidthnorm]{<<labelname>>}
+ }
+}
+\end{ltxexample}
+%
+You would get the following as the substrings of names in each position are extended to the length of the longest substring in that same position:
+
+\begin{lstlisting}{}
+Agassi, Chang, Laver [AChaLa]
+Agassi, Connors, Lendl [AConLe]
+Agassi, Courier, Laver [ACouLa]
+Borg, Connors, Edberg [BConEd]
+Borg, Connors, Emerson [BConEm]
+\end{lstlisting}
+%
+With a restriction to two characters for the name components of the label element defined like this:
+
+\begin{ltxexample}
+\DeclareLabelalphaTemplate{
+ \labelelement{
+ \field[varwidthnorm,strwidthmax=2]{<<labelname>>}
+ }
+}
+\end{ltxexample}
+%
+This would be the result (note that the individual family name label parts are no longer unambiguous):
+
+\begin{lstlisting}{}
+Agassi, Chang, Laver [AChLa]
+Agassi, Connors, Lendl [ACoLe]
+Agassi, Courier, Laver [ACoLa]
+Borg, Connors, Edberg [BCoEd]
+Borg, Connors, Emerson [BCoEm]
+\end{lstlisting}
+%
+Alternatively, you could choose to disambiguate the name lists as a whole with:
+
+\begin{ltxexample}
+\DeclareLabelalphaTemplate{
+ \labelelement{
+ \field[varwidthlist]{<<labelname>>}
+ }
+}
+\end{ltxexample}
+%
+Which would result in:
+
+\begin{lstlisting}{}
+Agassi, Chang, Laver [AChL]
+Agassi, Connors, Lendl [ACoL]
+Agassi, Courier, Laver [ACL]
+Borg, Connors, Edberg [BCEd]
+Borg, Connors, Emerson [BCE]
+\end{lstlisting}
+%
+Perhaps you only want to consider at most two names for label generation but disambiguate at the whole name list level:
+\begin{ltxexample}
+\DeclareLabelalphaTemplate{
+ \labelelement{
+ \field[varwidthlist,names=2]{<<labelname>>}
+ }
+}
+\end{ltxexample}
+%
+Which would result in:
+\begin{lstlisting}{}
+Agassi, Chang, Laver [ACh+]
+Agassi, Connors, Lendl [ACo+]
+Agassi, Courier, Laver [AC+]
+Borg, Connors, Edberg [BC+a]
+Borg, Connors, Emerson [BC+b]
+\end{lstlisting}
+%
+In this last example, you can see \cmd{labelalphaothers} has been appended to show that there are more names. The last two labels now require disambiguating with \cmd{extraalpha} as there is no way of disambiguating this label name list with only two names.
+
+Finally, here is an example using multiple label elements:
+
+\begin{ltxexample}
+\DeclareLabelalphaTemplate{
+ \labelelement{
+ \field[varwidthlist]{<<labelname>>}
+ }
+ \labelelement{
+ \literal{-}
+ }
+ \labelelement{
+ \field[strwidth=3,strside=right]{<<labelyear>>}
+ }
+}
+\end{ltxexample}
+%
+Which would result in:
+\begin{lstlisting}{}
+Agassi, Chang, Laver [AChL-000]
+Agassi, Connors, Lendl [AConL-001]
+Agassi, Courier, Laver [ACouL-002]
+Borg, Connors, Edberg [BCEd-003]
+Borg, Connors, Emerson [BCEm-004]
+\end{lstlisting}
+%
+Here is another rather contrived example showing that you don't need to specially quote \latex special characters (apart from <\%>, obviously) when specifying padding characters and literals:
+
+\begin{ltxexample}
+\DeclareLabelalphaTemplate{
+ \labelelement{
+ \literal{>}
+ }
+ \labelelement{
+ \literal{\%}
+ }
+ \labelelement{
+ \field[namessep={/}, strwidth=4, padchar=_]{<<labelname>>}
+ }
+ \labelelement{
+ \field[strwidth=3, padchar=&, padside=left]{title}
+ }
+ \labelelement{
+ \field[strwidth=2,strside=right]{<<year>>}
+ }
+}
+\end{ltxexample}
+%
+which given:
+\begin{lstlisting}[style=bibtex]{}
+@Book{test,
+ author = {XXX YY and WWW ZZ},
+ title = {T},
+ year = {2007},
+}
+\end{lstlisting}
+would resulting a label looking like this:
+\begin{verbatim}
+[>%YY/ZZ__&&T07]
+\end{verbatim}
+
+Generating labels from fields may involve some difficulties when you have fields containing diacritics, hyphens, spaces etc. Often, you want to ignore things like separator characters or spaces when generating labels. An option is provided to customise the regular expression(s) to strip from a field before it is passed to the label generation system.
+
+\begin{ltxsyntax}
+
+\cmditem{DeclareNolabel}{specification}
+
+Defines regular expressions to strip from any field before generating a label part for the field. The \prm{specification} is an undelimited list of \cmd{nolabel} directives which specify the regular expressions to remove from fields. Spaces, tabs and line endings may be used freely to visually arrange the \prm{specification}. Blank lines are not permissible. This command may only be used in the preamble.
+
+\cmditem{nolabel}{regexp}
+
+Any number of \cmd{nolabel} commands can be given each of which specifies to remove the \prm{regexp} from the copy of the field which the label generation system sees. Since regular expressions usually contain special characters, it is best to enclose them in the provided \cmd{regexp} macro as shown---this will pass the expression through to \biber correctly.
+
+\end{ltxsyntax}
+
+If there is no \cmd{DeclareNolabel} specification, \biber will default to:
+
+\begin{ltxexample}
+\DeclareNolabel{
+ % strip punctuation, symbols, separator and control characters
+ \nolabel{\regexp{<<[\p{P}\p{S}\p{C}]+>>}}
+}
+\end{ltxexample}
+%
+This \biber default strips punctuation, symbol, separator and control characters from fields before passing the field string to the label generation system.
+
+\begin{ltxsyntax}
+
+\cmditem{DeclareNolabelwidthcount}{specification}
+
+Defines regular expressions to ignore from any field when counting characters in fixed-width substrings. The \prm{specification} is an undelimited list of \cmd{nolabelwidthcount} directives which specify the regular expressions to ignore when counting characters for fixed-width substrings. Spaces, tabs and line endings may be used freely to visually arrange the \prm{specification}. Blank lines are not permissible. This command may only be used in the preamble.
+
+\cmditem{nolabelwidthcount}{regexp}
+
+Any number of \cmd{nolabelwidthcount} commands can be given each of which specifies to ignore the \prm{regexp} when generating fixed-width substrings during label generation. Since regular expressions usually contain special characters, it is best to enclose them in the provided \cmd{regexp} macro as shown---this will pass the expression through to \biber correctly.
+
+\end{ltxsyntax}
+
+There is no default \cmd{DeclareNolabelwidthcount} specification. Note that
+this setting is only taken into account when using fixed-width substrings
+(non-varwidth) during label part generation. See \secref{aut:ctm:lab}.
+
+\subsubsection{Sorting}
+\label{aut:ctm:srt}
+
+In addition to the predefined sorting templates discussed in \secref{use:srt}, it is possible to define new ones or modify the default definitions. The sorting process may be customized further by excluding certain fields from sorting on a per-type basis and by automatically populating the \bibfield{presort} field on a per-type basis.
+
+\begin{ltxsyntax}
+
+\cmditem{DeclareSortingTemplate}[options]{name}{specification}
+
+Defines the sorting template \prm{name}. The \prm{name} is the identifier passed to the \opt{sorting} option (\secref{use:opt:pre:gen}) when selecting the sorting template. The \cmd{DeclareSortingTemplate} command supports the following optional arguments:
+
+\begin{optionlist*}
+
+\choitem{locale}{\prm{locale}}
+
+The locale for the sorting template which then overrides the global sorting locale in the \opt{sortlocale} option discussed in \secref{use:opt:pre:gen}.
+
+\end{optionlist*}
+
+The \prm{specification} is an undelimited list of \cmd{sort} directives which specify the elements to be considered in the sorting process. Spaces, tabs, and line endings may be used freely to visually arrange the \prm{specification}. Blank lines are not permissible. This command may only be used in the preamble.
+
+\cmditem{sort}{elements}
+
+Specifies the elements considered in the sorting process. The \prm{elements} are an undelimited list of \cmd{field}, \cmd{literal}, \cmd{citecount}, \cmd{intciteorder} and \cmd{citeorder} commands which are evaluated in the order in which they are given. If an element is defined, it is added to the sort key and the sorting routine skips to the next \cmd{sort} directive. If it is undefined, the next element is evaluated. Since literal strings are always defined, any \cmd{literal} commands should be the sole or the last element in a \cmd{sort} directive. All \prm{elements} should be the same datatype as described in \secref{bib:fld:dat} since they will be potentially compared to any of the other \prm{elements} in other entries.. The \cmd{sort} command supports the following optional arguments:
+
+\begin{optionlist*}
+
+\choitem{locale}{\prm{locale}}
+
+Override the locale used for sorting at the level of a particular set of sorting elements. If specified, the locale overrides the locale set at the level of \cmd{DeclareSortingTemplate} and also the global setting. See also the discussion of the global sorting locale option \opt{sortlocale} in \secref{use:opt:pre:gen}.
+
+\choitem[ascending]{direction}{ascending, descending}
+
+The sort direction, which may be either \texttt{ascending} or \texttt{descending}. The default is ascending order.
+
+\boolitem[false]{final}
+
+This option marks a \cmd{sort} directive as the final one in the \prm{specification}. If one of the \prm{elements} is available, the remainder of the \prm{specification} will be ignored. The short form \opt{final} is equivalent to \kvopt{final}{true}.
+
+\boolitem{sortcase}
+
+Whether or not to sort case"=sensitively. The default setting depends on the global \opt{sortcase} option.
+
+\boolitem{sortupper}
+
+Whether or not to sort in <uppercase before lowercase> (\texttt{true}) or <lowercase before uppercase> order (\texttt{false}). The default setting depends on the global \opt{sortupper} option.
+
+\end{optionlist*}
+
+\cmditem{field}[key=value, \dots]{field}
+
+The \cmd{field} element adds a \prm{field} to the sorting specification. If the \prm{field} is undefined, the element is skipped. The \cmd{field} command supports the following optional arguments:
+
+\begin{optionlist*}
+
+\valitem{form}{string}
+
+The multiscript form of the \prm{field}. Must be one of the <multiscriptforms> constants declared with \cmd{DeclareDatamodelConstant}. See \ref{use:multiscript}. Defaults to the global \opt{msform} option.
+
+\valitem{lang}{bcp47tag}
+
+The multiscript BCP47 language tag of the \prm{field}. Defaults to the global \opt{mslang} option.
+
+\choitem[left]{padside}{left, right}
+
+Pads a field on the \texttt{left} or \texttt{right} side using \opt{padchar} so that its width is \opt{padwidth}. If no padding option is set, no padding is done at all. If any padding option is specified, then padding is performed and the missing options are assigned built-in default values. If padding and substring matching are both specified, the substring match is performed first.
+
+\intitem[4]{padwidth}
+
+The target width in characters.
+
+\valitem[0]{padchar}{character}
+
+The character to be used when padding the field.
+
+\choitem[left]{strside}{left, right}
+
+Performs a substring match on the \texttt{left} or \texttt{right} side of the field. The number of characters to match is specified by the corresponding \texttt{strwidth} option. If no substring option is set, no substring matching is performed at all. If any substring option is specified, then substring matching is performed and the missing options are assigned built-in default values. If padding and substring matching are both specified, the substring match is performed first.
+
+\intitem[4]{strwidth}
+
+The number of characters to match.
+
+\end{optionlist*}
+
+\cmditem{literal}{string}
+
+The \cmd{literal} element adds a literal \prm{string} to the sorting specification. This is useful as a fallback if some fields are not available.
+
+\csitem{citecount}
+
+The \cmd{citecount} element has a special meaning. It requests a sort based on the number of times an item was cited. The standard \texttt{count} sorting template uses this to provide a sort in descending order of number of citations. Note that the option \opt{citecounter} must also be enabled for this to work. In addition, an additional \biber run is required in order to calculate the data for this option correctly and so the typical invocation sequence for this option is \emph{latex}$\rightarrow$\emph{biber}$\rightarrow$\emph{latex}$\rightarrow$\emph{latex}$\rightarrow$\emph{biber}$\rightarrow$\emph{latex}.
+
+\csitem{citeorder}
+
+The \cmd{citeorder} element has a special meaning. It requests a sort based on the lexical order of the actual citations. For entries cited within the same citation command like:
+
+\begin{ltxexample}
+\cite{one,two}
+\end{ltxexample}
+%
+there is a distinction between the lexical order and the semantic order. Here «one» and «two» have the same semantic order but a unique lexical order. The semantic order only matters if you specify further sorting to disambiguate entries with the same semantic order. For example, this is the definition of the \opt{none} sorting template:
+
+\begin{ltxexample}
+\DeclareSortingTemplate{lexical}{
+ \sort{\citeorder}
+}
+\end{ltxexample}
+%
+This sorts the bibliography purely lexically by the order of the keys in the citation commands. In the example above, it sorts «one» before «two». However, suppose that you consider «one» and «two» to have the same order (semantic order) since they are cited at the same time and want to further sort these by year. Suppose «two» has an earlier \bibfield{year} than «one»:
+
+\begin{ltxexample}
+\DeclareSortingTemplate{lexicalyear}{
+ \sort{\citeorder}
+ \sort{<<year>>}
+}
+\end{ltxexample}
+%
+This sorts «two» before «one», even though lexically, «one» would sort before «two». This is possible because the semantic order can be disambiguated by the further sorting on year. With the standard \opt{none} sorting template, the lexical order and semantic order are identical because there is nothing further to disambiguate them. This means that you can use \cmd{citeorder} just like any other sorting specification element, choosing how to further sort entries cited at the same time (in the same citation command).
+
+See also \cmd{intciteorder} below.
+
+\csitem{intciteorder}
+
+The \cmd{intciteorder} element has a special meaning. It requests a sort based on the lexical order internal to the same citation command. For example:
+
+\begin{ltxexample}
+\cite{one,two}
+\end{ltxexample}
+%
+Here both citations have the same \cmd{citeorder} but different \cmd{intciteorder}. This sorting command is basically a more granular form of \cmd{citeorder} so that order can be distinguished for citations within the same citation command. So, for example, with the above example, this will guarantee sorting of <one> before <two>:
+
+\begin{ltxexample}
+\DeclareSortingTemplate{fulllexical}{
+ \sort{\citeorder}
+ \sort{\intciteorder}
+}
+\end{ltxexample}
+
+\cmditem{DeclareSortingNamekeyTemplate}[name]{specification}
+
+Defines how the sorting keys for names are constructed. This can change the sorting order of names arbitrarily because you can choose how to put together the name parts when constructing the string to compare when sorting. The sorting key construction template so defined is called \prm{name} which defaults to «global» if this optional parameter is absent. When constructing the sorting key for a name, a sorting key for each name part is constructed and the key for each name is formed into an ordered key list with a special internal separator. The point of this option is to accommodate languages or situations where sorting of names needs to be customised (for example, Icelandic names are sometimes sorted by given names rather than by family names). This macro may be used multiple times to define templates with different names which can then be referred to later. Sorting name key templates can be specified at the following scopes, in order of increasing precedence:
+
+\begin{itemize}
+\item The default template defined without the optional name argument
+\item Given as the \opt{sortingnamekeytemplate} option to a reference context (see \secref{use:bib:context})
+\item Given as a per-entry option \opt{sortnamekeytemplate} in a bibliography data source entry
+\item Given as a per-namelist option \opt{sortnamekeytemplate}
+\item Given as a per-name option \opt{sortnamekeytemplate}
+\end{itemize}
+
+By default there is only a global template which has the following \prm{specification}:
+
+\begin{ltxexample}
+\DeclareSortingNamekeyTemplate{
+ \keypart{
+ \namepart[use=true]{<<prefix>>}
+ \namepart{<<family>>}
+ }
+ \keypart{
+ \namepart{<<given>>}
+ }
+ \keypart{
+ \namepart{<<suffix>>}
+ }
+ \keypart{
+ \namepart[use=false]{<<prefix>>}
+ }
+}
+\end{ltxexample}
+%
+This means that the key is constructed by concatenating, in order, the name prefix (only if the \opt{useprefix} option is true) with the family name(s), the given names(s), the name suffix and then the name prefix (only if the \opt{useprefix} option is false). The visible number of names in the name list used to construct the key is the default sorting visibility, see below.
+
+\cmditem{visibility}{visibilityscope}
+
+\prm{visibilityscope} determines which visibility settings to use for the name list. This determines how many names in the name list are visible to the sorting algorithm. This is by default set to <sort>, which is the standard visibility for sorting determined by the \opt{max*/min*names} and \opt{uniquelist} options. \cmd{visibility} can be omitted entirely if this default is desired. The only other scope is <cite> which forces the sorting algorithm to use the name list visibility of the citations rather than that of the reference list sorting. This is useful when using the \opt{sortcites} option in the situation when a style has different name list truncation rules for citations than it has for the reference list. Citations can then be forced to sort using a different reference context that uses a modified sorting name key template that enforces the correct name list truncation for citation sorting with:
+
+\begin{ltxexample}
+\DeclareSortingNamekeyTemplate[mycitesorttemplate]{
+ \visibilty{cite}
+ .
+ .
+ .
+\end{ltxexample}
+%
+and then force this to be used with e.g.:
+
+\begin{ltxexample}
+ \newrefcontext[sortingnamekeytemplate=mycitesorttemplate]
+ \cite{a,b,c}
+\end{ltxexample}
+%
+One thing to note is that a reference context will not be written to the \file{.bcf} if no \cmd{printbibliography} or \cmd{printbiblist} occurs within it which will mean that \biber will not generate any sorted data for the refcontext. Therefore if the requirement is to just correctly sort citations using this refcontext, you will need to force the writing of the refcontext using \cmd{GenRefcontextData} (see \secref{use:bib:context}):
+
+\begin{ltxexample}
+ % make sure sorting data using this template is
+ % generated since no \printbibliography/\printbiblist
+ % occurs in the refcontext with
+ % sortingnamekeytemplatename=mycitesorttemplate,
+ % this won't happen by default
+ \GenRefcontextData{sortingnamekeytemplatename=mycitesorttemplate}
+ % Switch to this refcontext to use the correct
+ % sorted data using the sorting name key template
+ % which uses "cite" visibility for the name lists
+ \newrefcontext[sortingnamekeytemplate=mycitesorttemplate]
+ % citations are correctly sorted
+ \cite{a,b,c}
+ % Switch to the default sorting name key template
+ % for the actual list of references which uses the
+ % default sorting visibility for the name lists
+ \newrefcontext[sortingnamekeytemplate=global]
+ % references are correctly sorted
+ \printbibliography
+\end{ltxexample}
+
+\cmditem{keypart}{part}
+
+\prm{part} is an ordered list of of \cmd{namepart} and \cmd{literal} specifications which are concatenated together when constructing a part of the name sorting key. The \cmd{keyparts} are then concatenated together with terminal padding to ensure correct sorting.
+
+\cmditem{literal}{string}
+
+A literal string to insert into the name sorting key.
+
+\cmditem{namepart}{name}
+
+Specifies the \prm{name} of a namepart to use in constructing the name sorting key.
+
+\begin{optionlist*}
+
+\boolitem[true]{use}
+
+Indicates that the namepart \prm{name} is only to be used in this concatenation position if the corresponding \opt{use<name>} option is set to the specified boolean value.
+
+\boolitem[true]{inits}
+
+Indicates that only the initials of namepart \prm{name} are to be used in
+constructing the sorting specification.
+
+\end{optionlist*}
+
+\end{ltxsyntax}
+
+As an example, suppose you wanted to be able to sort names by given name rather than family name, you could define a sorting name key template like this:
+
+\begin{ltxexample}
+\DeclareNamekeyTemplate[givenfirst]{
+ \keypart{
+ \namepart{<<given>>}
+ }
+ \keypart{
+ \namepart[use=true]{<<prefix>>}
+ }
+ \keypart{
+ \namepart{<<family>>}
+ }
+ \keypart{
+ \namepart[use=false]{<<prefix>>}
+ }
+}
+\end{ltxexample}
+%
+You can then use the name \opt{givenfirst} at the appropriate scope in order to make \biber use this template when constructing sorting name keys. For example, you could enable this for one bibliography list like this:
+
+\begin{ltxexample}
+\begin{refcontext}[sortnamekeytemplate=givenfirst]
+\printbibliography
+\end{refcontext}
+\end{ltxexample}
+%
+or perhaps you only want to do this for a particular entry:
+
+\begin{lstlisting}[style=bibtex]{}
+@BOOK{key,
+ OPTIONS = {sortnamekeytemplate=givenfirst},
+ AUTHOR = {Arnar Vigfusson}
+}
+\end{lstlisting}
+%
+or just a name list by using the option as a pseudo-name which will be ignored:
+
+\begin{lstlisting}[style=bibtex]{}
+@BOOK{key,
+ AUTHOR = {sortnamekeytemplate=givenfirst and Arnar Vigfusson}
+}
+\end{lstlisting}
+%
+or just a single name by passing the option as part of the extended name information
+format which \biber supports (see \secref{use:enf}):
+
+\begin{lstlisting}[style=bibtex]{}
+@BOOK{key,
+ AUTHOR = {given=Arnar, family=Vigfusson, sortnamekeytemplate=givenfirst}
+}
+\end{lstlisting}
+%
+Now we give some examples of sorting templates. In the first example, we define a simple name\slash title\slash year template. The name element may be either the \bibfield{author}, the \bibfield{editor}, or the \bibfield{translator}. Given this specification, the sorting routine will use the first element which is available and continue with the \bibfield{title}. Note that the options \opt{use$<$name$>$} options are considered automatically in the sorting process:
+
+\begin{ltxexample}
+\DeclareSortingTemplate{sample}{
+ \sort{
+ \field{<<author>>}
+ \field{<<editor>>}
+ \field{<<translator>>}
+ }
+ \sort{
+ \field{<<title>>}
+ }
+ \sort{
+ \field{<<year>>}
+ }
+}
+\end{ltxexample}
+%
+In the next example, we define the same template in a more elaborate way, considering special fields such as \bibfield{presort}, \bibfield{sortkey}, \bibfield{sortname}, etc. Since the \bibfield{sortkey} field specifies the master sort key, it needs to override all other elements except for \bibfield{presort}. This is indicated by the \opt{final} option. If the \bibfield{sortkey} field is available, processing will stop at this point. If not, the sorting routine continues with the next \cmd{sort} directive. This setup corresponds to the default definition of the \texttt{nty} template:
+
+\begin{ltxexample}
+\DeclareSortingTemplate{nty}{
+ \sort{
+ \field{<<presort>>}
+ }
+ \sort[final]{
+ \field{<<sortkey>>}
+ }
+ \sort{
+ \field{<<sortname>>}
+ \field{<<author>>}
+ \field{<<editor>>}
+ \field{<<translator>>}
+ \field{<<sorttitle>>}
+ \field{<<title>>}
+ }
+ \sort{
+ \field{<<sorttitle>>}
+ \field{<<title>>}
+ }
+ \sort{
+ \field{<<sortyear>>}
+ \field{<<year>>}
+ }
+}
+\end{ltxexample}
+%
+Finally, here is an example of a sorting template which overrides the global sorting locale and additionally overrides again when sorting by the \bibfield{origtitle} field. Note the use in the template-level override of a babel/polyglossia language name instead of a real locale identifier. \biber will map this to a suitable, real locale identifier (in this case, \texttt{sv\_SE}):
+
+\begin{ltxexample}
+\DeclareSortingTemplate[locale=swedish]{custom}{
+ \sort{
+ \field{<<sortname>>}
+ \field{<<author>>}
+ \field{<<editor>>}
+ \field{<<translator>>}
+ \field{<<sorttitle>>}
+ \field{<<title>>}
+ }
+ \sort[locale=de_DE_phonebook]{
+ \field{<<origtitle>>}
+ }
+}
+\end{ltxexample}
+
+\begin{ltxsyntax}
+
+\cmditem{DeclareSortExclusion}{entrytype, \dots}{field, \dots}
+
+Specifies fields to be excluded from sorting on a per-type basis. The \prm{entrytype} argument and the \prm{field} argument may be a comma"=separated list of values. A blank \prm{field} argument will clear all exclusions for this \prm{entrytype}. A value of <*> for \prm{entrytype} will exclude \prm{field,\dots} for every entrytype. This is equivalent to simply deleting the field from the sorting specification and is only normally used in combination with \cmd{DeclareSortInclusion} when one wishes to exclude a field for all but explicitly included entrytypes. See example in \cmd{DeclareSortInclusion} below. This command may only be used in the preamble.
+
+\cmditem{DeclareSortInclusion}{entrytype, \dots}{field, \dots}
+
+Only used along with \cmd{DeclareSortExclusion}. Specifies fields to be included in sorting on a per-type basis. This allows the user to exclude a field from sorting for all entrytypes and then to override this for certain entrytypes. This is easier sometimes than using \cmd{DeclareSortExclusion} to list exclusions for many entrytypes. The \prm{entrytype} argument and the \prm{field} argument may be a comma"=separated list of values. This command may only be used in the preamble. For example, this would use \bibfield{title} during sorting only for \bibtype{article}s:
+
+\begin{ltxexample}
+\DeclareSortExclusion{*}{title}
+\DeclareSortInclusion{article}{title}
+\end{ltxexample}
+
+\cmditem{DeclarePresort}[entrytype, \dots]{string}
+
+Specifies a string to be used to automatically populate the \bibfield{presort} field of entries without a \bibfield{presort} field. The \bibfield{presort} may be defined globally or on a per-type basis. If the optional \prm{entrytype} argument is given, the \prm{string} applies to the respective entry type. If not, it serves as the global default value. Specifying an \prm{entrytype} in conjunction with a blank \prm{string} will clear the type-specific setting. The \prm{entrytype} argument may be a comma"=separated list of values. This command may only be used in the preamble.
+
+\cmditem{DeclareSortTranslit}[entrytype]{specification}
+
+Languages which can be written in different scripts or alphabets often only have CLDR sorting tailoring for one script and it is expected that you transliterate into the supported script for sorting purposes. A common example is Sanskrit which is often written in academic contexts in IAST
+romanised script but which needs to be sorted in the <sa> locale which expects the Devanāgarī script. Another common case is transliteration of Russian Cyrillic into Latin as defined by the ALA-LC standard. Such requirement means that it is necessary to transliterate into the sorting script internally. \cmd{DeclareSortTranslit} declares which parts of an entry you would like to transliterate for sorting purposes. Without the \prm{entrytype} parameter, the \prm{specification} applies to all entrytypes. The \prm{specification} is one or more \cmd{translit} commands:
+
+\cmditem{translit}[langids]{field or fieldset}{from}{to}
+
+Specifies that the data field \bibfield{field} or all fields in a fieldset \prm{fieldset} declared with \cmd{DeclareDatafieldSet} (see \secref{aut:ctm:dsets}) should be transliterated from script \prm{from} to script \prm{to} for sorting purposes. The field/set argument should be <*> to apply transliteration to all fields. The valid \prm{from} and \prm{to} values are given in table \ref{tab:translit}. The optional \prm{langids} parameter is a comma-separated list of \bibfield{langid} fields and the transliteration will apply only to bibliography entries containing one of the \bibfield{langid}s in the list. Note that \biblatex does not aim to support general transliteration, only those which are useful for sorting purposes. Please open a GitHub ticket for \biblatex\ if you think you need additional transliterations.
+
+An example of transliterating titles so that they sort correctly in Sanskrit. This example assumes that entries that should have their title fields transliterated have a \bibfield{langid} field set to <sanskrit>.
+
+\begin{ltxexample}
+\DeclareDatafieldSet{settitles}{
+ \member[field=title]
+ \member[field=booktitle]
+ \member[field=eventtitle]
+ \member[field=issuetitle]
+ \member[field=journaltitle]
+ \member[field=maintitle]
+ \member[field=origtitle]
+}
+
+\DeclareSortTranslit{
+ \translit[sanskrit]{settitles}{iast}{devanagari}
+}
+\end{ltxexample}
+
+\end{ltxsyntax}
+
+\begin{table}
+\caption{Valid transliteration pairs}
+\label{tab:translit}
+\tablesetup\centering
+\begin{tabular}{lll}
+\toprule
+\sffamily\bfseries\spotcolor From
+ & \sffamily\bfseries\spotcolor To
+ & Description\\
+\midrule
+iast & devanagari & Sanskrit IAST to Devanāgarī\\
+russian & ala-lc & ALA-LC romanisation for Russian\\
+russian & bgn/pcgn-standard & BGN/PCGN:1947 (Standard Variant), Cyrillic to Latin, Russian\\
+ \bottomrule
+\end{tabular}
+\end{table}
+
+\subsubsection[Bibliography List Filters]{Bibliography List Filters}
+\label{aut:ctm:bibfilt}
+
+When using customisable bibliography lists (See \secref{use:bib:biblist}), usually one wants to return in the \file{.bbl} only those entries which have the particular fields which the bibliography list is summarising. For example, when printing a normal list of shorthands, you want the list returned by \biber in the \file{.bbl} to contain only those entries which have a \bibfield{shorthand} field. This is accomplished by defining a bibliography list filter using the \cmd{DeclareBiblistFilter} command. This differs from the filters defined using \cmd{defbibfilter} (see \secref{use:bib:flt}) since the filters defined by \cmd{defbibfilter} run inside \biblatex after the \file{.bbl} has been generated.
+
+\begin{ltxsyntax}
+\cmditem{DeclareBiblistFilter}{name}{specification}
+
+Defines a bibliography list filter with \prm{name}. The \prm{specification} consists of one or more \cmd{filter} or \cmd{filteror} macros, all of which must be satisfied for the entry to pass the filter:
+
+\cmditem{filter}[filterspec]{filter}
+
+Filter entries according to the \prm{filterspec} and \prm{filter}. \prm{filterspec} can be one of:
+
+\end{ltxsyntax}
+
+\begin{description}
+\item[type/nottype] Entry is/is not of \bibfield{entrytype} \prm{filter}
+\item[subtype/notsubtype] Entry is/is not of \bibfield{subtype} \prm{filter}
+\item[keyword/notkeyword] Entry has/does not have \bibfield{keyword} \prm{filter}
+\item[field/notfield] Entry has/does not have a field called \prm{filter}
+\end{description}
+
+\begin{ltxsyntax}
+\cmditem{filteror}{type}{filters}
+
+A wrapper around one or more \cmd{filter} commands specifying that they form a disjunctive set, i.e. any one of the \prm{filters} must be satisfied.
+
+\end{ltxsyntax}
+
+Fields in the datamodel which are marked as <Label fields> (see \secref{aut:ctm:dm}) automatically have a filter defined for them with the same name and which filters out any entries which do no contain the field. For example, \biblatex automatically generates a filter for the \bibfield{shorthand} field:
+
+\begin{ltxexample}
+\DeclareBiblistFilter{<<shorthand>>}{
+ \filter[type=field,filter=shorthand]
+}
+\end{ltxexample}
+
+\subsubsection{Controlling Name Initials Generation}
+\label{aut:ctm:noinit}
+
+Generating initials for name parts from a given name involves some difficulties when you have names with prefixes, diacritics, hyphens etc. Often, you want to ignore things like prefixes when generating initials so that the initials for «al-Hasan» is just «H» instead of «a-H». This is tricky when you also have names like «Ho-Pun» where you want the initials to be «H-P», for example.
+
+\begin{ltxsyntax}
+
+\cmditem{DeclareNoinit}{specification}
+
+Defines regular expressions to strip from names before generating initials. The \prm{specification} is an undelimited list of \cmd{noinit} directives which specify the regular expressions to remove from the name. Spaces, tabs and line endings may be used freely to visually arrange the \prm{specification}. Blank lines are not permissible. This command may only be used in the preamble.
+
+\cmditem{noinit}{regexp}
+
+Any number of \cmd{noinit} commands can be given each of which specifies to remove the \prm{regexp} from the copy of the name which the initials generation system sees. Since regular expressions usually contain special characters, it is best to enclose them in the provided \cmd{regexp} macro as shown---this will pass the expression through to \biber correctly.
+
+\end{ltxsyntax}
+
+If there is no \cmd{DeclareNoinit} specification, \biber will default to:
+
+\begin{ltxexample}
+\DeclareNoinit{
+ % strip lowercase prefixes like 'al-' when generating initials from names
+ \noinit{\regexp{<<\b\p{Ll}{2}\p{Pd}>>}}
+ % strip some common diacritics when generating initials from names
+ \noinit{\regexp{<<[\x{2bf}\x{2018}]>>}}
+}
+\end{ltxexample}
+%
+This \biber default strips a couple of diacritics and also strips lowercase prefixes from names before generating initials.
+
+\subsubsection{Fine Tuning Sorting}
+\label{aut:ctm:nosort}
+
+It can be useful to fine tune sorting so that it ignores certain parts of particular fields.
+
+\begin{ltxsyntax}
+
+\cmditem{DeclareNosort}{specification}
+
+Defines regular expressions to strip from particular fields or types of fields when sorting. The \prm{specification} is an undelimited list of \cmd{nosort} directives which specify the regular expressions to remove from particular fields or type of field. Spaces, tabs and line endings may be used freely to visually arrange the \prm{specification}. Blank lines are not permissible. This command may only be used in the preamble.
+
+\cmditem{nosort}{field or datafield set}{regexp}
+
+Any number of \cmd{nosort} commands can be given each of which specifies to remove the \prm{regexp} from the \prm{field} or \prm{datafield set}. A \prm{datafield set} is simply a convenience grouping of semantically similar fields from which you might want to remove a regexp. See \secref{aut:ctm:dsets} for the available sets, their members and customisation. Since regular expressions usually contain special characters, it is best to enclose them in the provided \cmd{regexp} macro as shown---this will pass the expression through to \biber correctly.
+
+\end{ltxsyntax}
+
+The default is:
+
+\begin{ltxexample}
+\DeclareNosort{
+ % strip prefixes like 'al-' when sorting names
+ \nosort{setnames}{\regexp{<<\A\p{L}{2}\p{Pd}>>}}
+ % strip some diacritics when sorting names
+ \nosort{setnames}{\regexp{<<[\x{2bf}\x{2018}]>>}}
+}
+\end{ltxexample}
+%
+This \biber default strips a couple of diacritics and also strips two-letter prefixes (like «Al-») from names when sorting. Suppose you wanted to ignore «The» at the beginning of the \bibfield{title} field when sorting:
+
+\begin{ltxexample}
+\DeclareNosort{
+ \nosort{<<title>>}{\regexp{<<\AThe\s+>>}}
+}
+\end{ltxexample}
+%
+Or if you wanted to ignore «The» at the beginning of any title field:
+
+\begin{ltxexample}
+\DeclareNosort{
+ \nosort{<<settitles>>}{\regexp{<<\AThe\s+>>}}
+}
+\end{ltxexample}
+
+\subsubsection{Fine Tuning hashing and uniquename}
+\label{aut:ctm:nonamestring}
+
+\begin{ltxsyntax}
+\cmditem{DeclareNonamestring}{specification}
+
+Defines regular expressions to strip from name fields when
+generating \bibfield{fullhash} and \bibfield{uniquename}. The \prm{specification} is an undelimited list of \cmd{nonamestring} directives which specify the regular expressions to remove from particular name fields. Spaces, tabs and line endings may be used freely to visually arrange the \prm{specification}. Blank lines are not permissible. This command may only be used in the preamble.
+
+\cmditem{nonamestring}{namefield or datafield name set}{regexp}
+
+Any number of \cmd{nonamestring} commands can be given each of which
+specifies to remove the \prm{regexp} from the \prm{namefield} or
+\prm{datafield name set}. A \prm{datafield name set} is simply a
+convenience grouping of semantically similar fields from which you might
+want to remove a regexp. See \secref{aut:ctm:dsets} for the available sets,
+their members and customisation. Only set of name lists are relevant to
+this command. Since regular expressions usually contain special characters,
+it is best to enclose them in the provided \cmd{regexp} macro as
+shown---this will pass the expression through to \biber correctly.
+
+\end{ltxsyntax}
+
+Suppose you wanted to ignore square brackets in names in the
+\bibfield{author} name field and treat <D[onald] Knuth> the same as <Donald
+Knuth> for purposes \bibfield{uniquename} and hashing so that both variants
+appeared together in a dashed bibliography style and were also treated the
+same when calculating \bibfield{uniquename}:
+
+\begin{ltxexample}
+\DeclareNonamestring{
+ \nonamestring{<<author>>}{\regexp{<<[\[\]]>>}}
+}
+\end{ltxexample}
+%
+For consistency, it is often desirable to use the same regexp in \cmd{DeclareNosort}.
+
+
+\subsubsection{Special Fields}
+\label{aut:ctm:fld}
+
+Some of the automatically generated fields from \secref{aut:bbx:fld:lab} may be customized.
+
+\begin{ltxsyntax}
+
+\cmditem{DeclareLabelname}[entrytype, \dots]{specification}
+
+Defines the fields to consider when generating the \bibfield{labelname} field (see \secref{aut:bbx:fld:lab}). The \prm{specification} is an ordered list of \cmd{field} commands. The fields are checked in the order listed and the first field which is available will be used as \bibfield{labelname}. This is the default definition:
+
+\begin{ltxexample}
+\DeclareLabelname{%
+ \field{shortauthor}
+ \field{author}
+ \field{shorteditor}
+ \field{editor}
+ \field{translator}
+}
+\end{ltxexample}
+%
+The \bibfield{labelname} field may be customized globally or on a per-type basis. If the optional \prm{entrytype} argument is given, the specification applies to the respective entry type. If not, it is applied globally. The \prm{entrytype} argument may be a comma"=separated list of values. This command may only be used in the preamble.
+
+\cmditem{field}[key=value, \dots]{field}
+
+\begin{optionlist*}
+
+\valitem{form}{string}
+
+The multiscript form of the \prm{field}. Must be one of the <multiscriptforms> constants declared with \cmd{DeclareDatamodelConstant}. See \ref{use:multiscript}. Defaults to the global \opt{msform} option.
+
+\valitem{lang}{bcp47tag}
+
+The multiscript BCP47 language tag of the \prm{field}. Defaults to the global \opt{mslang} option.
+
+\end{optionlist*}
+
+\cmditem{DeclareLabeldate}[entrytype, \dots]{specification}
+
+Defines the date components to consider when generating \bibfield{labelyear}, \bibfield{labelmonth}, \bibfield{labelday}, \bibfield{labelendyear}, \bibfield{labelendmonth} and \bibfield{labelendday} fields (see \secref{aut:bbx:fld:lab}). The \prm{specification} is an ordered list of \cmd{field} or \cmd{literal} commands. The items are checked in the order listed and the first item which is available will be used to popluate the mentioned fields. Note that the \cmd{field} items do not have to be datetype <date> in the data model so that you can create pseudo-year labels by, for example, using a \bibfield{pubstate} field contents, if available, as the year label by defining \cmd{DeclareLabeldate} suitably. Note also that a \cmd{literal} command will always be used when found and so this should always be the last thing in the list. If the value of a \cmd{literal} command is a valid localisation string, then this will be resolved in the current language, otherwise the value is used as a literal string as-is. This is the default definition:
+
+\begin{ltxexample}
+\DeclareLabeldate{%
+ \field{date}
+ \field{year}
+ \field{eventdate}
+ \field{origdate}
+ \field{urldate}
+ \literal{nodate}
+}
+\end{ltxexample}
+%
+Note that the \bibfield{date} field is split by the backend into \bibfield{year}, \bibfield{month} which are also valid fields in the default data model. In order to support legacy data which directly sets \bibfield{year} and/or \bibfield{month}, the specification <\bibfield{date}> in \cmd{DeclareLabeldate} will also match \bibfield{year} and \bibfield{month} fields, if present.
+The \bibfield{label*} fields may be customized globally or on a per-type basis. If the optional \prm{entrytype} argument is given, the specification applies to the respective entry type. If not, it is applied globally. The \prm{entrytype} argument may be a comma"=separated list of values. This command may only be used in the preamble. See also \secref{aut:bbx:fld:dat}.
+
+\cmditem{DeclareExtradate}{specification}
+
+Defines which date information used to construct the \bibfield{extradate} field. With the default setting for \cmd{DeclareExtradateContext}, this field (see \secref{aut:bbx:fld:lab}) is printed to disambiguate works by the same \bibfield{labelname} (usually the author) or \bibfield{labeltitle} (usually the main title) which occur in the same date scope. By default, the date scope is the year and so two works by the same author/title within the same year will have different \bibfield{extradate} values which are used to disambiguate the works in the bibliography in the usual manner seen in many authoryear type styles. The \prm{specification} is one or more \cmd{scope} specifications which can contain one or more \cmd{field} specifications. Within a \cmd{scope}, the existence of each \cmd{field} will be checked and if found, the first \cmd{field} is used and the rest are ignored. This allows a fallback in case certain fields are not available in all entries. All \cmd{scope}s are used to track information and \cmd{scope}s should be specified in decreasing order of generality (e.g. year then month then day etc) The default definition is:
+
+\begin{ltxexample}
+\DeclareExtradate{%
+ \scope{
+ \field{labelyear}
+ \field{year}
+ }
+}
+\end{ltxexample}
+%
+This means that the \bibfield{labelyear} field only (or \bibfield{year} if this does not exist) will be used to track works by the same author. With the following datasource entries:
+
+\begin{lstlisting}[style=bibtex]{}
+@BOOK{extra1,
+ AUTHOR = {John Doe},
+ DATE = {2001-01}
+}
+
+@BOOK{extra2,
+ AUTHOR = {John Doe},
+ DATE = {2001-02}
+}
+\end{lstlisting}
+%
+The default definition would result in:
+
+\begin{lstlisting}{}
+Doe 2001a
+Doe 2001b
+\end{lstlisting}
+%
+Here, \bibfield{extradate} only considers the \bibfield((label)year) information and since this is identical, disambiguation is required. However, consider the following definition:
+\begin{ltxexample}
+\DeclareExtradate{%
+ \scope{
+ \field{labelyear}
+ \field{year}
+ }
+ \scope{
+ \field{labelmonth}
+ }
+}
+\end{ltxexample}
+%
+The result would be:
+\begin{lstlisting}{}
+Doe 2001
+Doe 2001
+\end{lstlisting}
+%
+If only years were printed, this would be ambiguous because \bibfield{extradate} now considers \bibfield{labelmonth} and since this differs, no disambiguation is necessary. Care should therefore be taken to synchronise the printed information with the \bibfield{extradate} disambiguation settings. Notice that the second definition is <month-in-year> disambiguation and quite different from:
+\begin{ltxexample}
+\DeclareExtradate{%
+ \scope{
+ \field{labelmonth}
+ }
+}
+\end{ltxexample}
+%
+which is just plain <month> disambiguation which is very unlikely to be what you ever want to do since this disambiguation only based on month and ignores the year entirely. \bibfield{extradate} calculation should almost always be based on all information down to the resolution you require. For example, if you wish to disambiguate right down to the hour level (perhaps useful in large bibliographies of rapidly changing online material), you would specify something like this:
+\begin{ltxexample}
+\DeclareExtradate{%
+ \scope{
+ \field{labelyear}
+ \field{year}
+ }
+ \scope{
+ \field{labelmonth}
+ }
+ \scope{
+ \field{labelday}
+ }
+ \scope{
+ \field{labelhour}
+ }
+}
+\end{ltxexample}
+%
+Entries without the specified granularity of information will disambiguate at the lowest granularity they contain, so, for example, with:
+\begin{ltxexample}
+\DeclareExtradate{%
+ \scope{
+ \field{labelyear}
+ \field{year}
+ }
+ \scope{
+ \field{labelmonth}
+ }
+}
+\end{ltxexample}
+%
+\begin{lstlisting}[style=bibtex]{}
+@BOOK{extra1,
+ AUTHOR = {John Doe},
+ DATE = {2001}
+}
+
+@BOOK{extra2,
+ AUTHOR = {John Doe},
+ DATE = {2001}
+}
+\end{lstlisting}
+%
+The result would still be:
+
+\begin{lstlisting}{}
+Doe 2001a
+Doe 2001b
+\end{lstlisting}
+%
+This command may only be used in the preamble.
+
+\cmditem{DeclareExtradateContext}[entrytype, \dots]{specification}
+
+Defines the context in which identical dates (as determined by \cmd{DeclareExtradate}) are tracked so that \bibfield{extradate} can be appended for disambiguation purposes. Normally this context is the author name so that works of the same date by the same author can be disambiguated in authoryear type styles. Often, when there is no author, the title appears in the author position and the title is used as the context to disambiguate instead. Therefore, the default definition is:
+
+\begin{ltxexample}
+\DeclareExtradateContext{%
+ \field{labelname}
+ \field{labeltitle}
+}
+\end{ltxexample}
+%
+It is unlikely that this will need to be customised for normal use cases.
+
+\cmditem{DeclareLabeltitle}[entrytype, \dots]{specification}
+
+Defines the fields to consider when generating the \bibfield{labeltitle} field (see \secref{aut:bbx:fld:lab}). The \prm{specification} is an ordered list of \cmd{field} commands. The fields are checked in the order listed and the first field which is available will be used as \bibfield{labeltitle}. This is the default definition:
+
+\begin{ltxexample}
+\DeclareLabeltitle{%
+ \field{shorttitle}
+ \field{title}
+}
+\end{ltxexample}
+%
+The \bibfield{labeltitle} field may be customized globally or on a per-type basis. If the optional \prm{entrytype} argument is given, the specification applies to the respective entry type. If not, it is applied globally. The \prm{entrytype} argument may be a comma"=separated list of values. This command may only be used in the preamble.
+
+\cmditem{field}[key=value, \dots]{field}
+
+\begin{optionlist*}
+
+\valitem{form}{string}
+
+The multiscript form of the \prm{field}. Must be one of the <multiscriptforms> constants declared with \cmd{DeclareDatamodelConstant}. See \ref{use:multiscript}. Defaults to the global \opt{msform} option.
+
+\valitem{lang}{bcp47tag}
+
+The multiscript BCP47 language tag of the \prm{field}. Defaults to the global \opt{mslang} option.
+
+\end{optionlist*}
+
+\end{ltxsyntax}
+
+\subsubsection{Data Inheritance (\bibfield{crossref})}
+\label{aut:ctm:ref}
+
+\biber features a highly customizable cross-referencing mechanism with flexible data inheritance rules. This sections deals with the configuration interface. See \apxref{apx:ref} for the default configuration. A note on terminology: the \emph{child} or \emph{target} is the entry with the \bibfield{crossref} field, the \emph{parent} or \emph{source} is the entry the \bibfield{crossref} field points to. The child inherits data from the parent. For multiscript enabled fields (\ref{use:multiscript}), all alternates of the field are inherited.
+
+\begin{ltxsyntax}
+
+\cmditem{DefaultInheritance}[exceptions]{options}
+
+Configures the default inheritance behavior. This command may only be used in the preamble. The default behavior may be customized be setting the following \prm{options}:
+
+\begin{optionlist*}
+
+\boolitem[true]{all} Whether or not to inherit all fields from the parent by default.
+
+\kvopt{all}{true} means that the child entry inherits all fields from the parent, unless a more specific inheritance rule has been set up with \cmd{DeclareDataInheritance}. If an inheritance rule is defined for a field, data inheritance is controlled by that rule. \kvopt{all}{false} means that no data is inherited from the parent by default and each field to be inherited requires an explicit inheritance rule set up with \cmd{DeclareDataInheritance}. The package default is \kvopt{all}{true}.
+
+\boolitem[false]{override} Whether or not to overwrite target fields with source fields if both are defined. This applies both to automatic inheritance and to explicit inheritance rules. The package default is \kvopt{override}{false}, \ie existing fields of the child entry are not overwritten.
+
+\valitem{ignore}{csv list of uniqueness options}
+
+This option takes a comma-separated list of one of more of <singletitle>, <uniquetitle>, <uniquebaretitle> and/or <uniquework>. The purpose of this option is to ignore tracking information for these three options when the field which would trigger the tracking (\tabref{use:opt:wu}) is inherited. An example---Suppose that you have several \bibtype{book} entries which all crossref a \bibtype{mvbook} from which they get their \bibfield{author} field. You might reasonably want the \cmd{ifsingletitle} test to return <true> for this author as their only <work> is the \bibtype{mvbook}. Similar comments would apply to situations involving the \cmd{ifuniquetitle}, \cmd{ifuniquebaretitle} and \cmd{ifuniquework} tests. The \opt{ignore} option lists which of these should have their tracking information ignored when the fields which would trigger them are inherited. The idea is that the presence of an inherited field does not contribute towards the determination of whether some combination of name/title is unique in the bibliographic data. For example, this modified default setting would ignore \opt{singletitle} and \opt{uniquetitle} tracking:
+
+\begin{ltxexample}
+\DefaultInheritance{ignore={singletitle,uniquetitle}, all=true, override=false}
+\end{ltxexample}
+%
+Of course, the ignoring of tracking does nothing if the fields inherited do not play a role in tracking. Only the fields listed in \tabref{use:opt:wu} are relevant to this option.
+
+\end{optionlist*}
+
+The optional \prm{exceptions} are an undelimited list of \cmd{except} directives. Spaces, tabs, and line endings may be used freely to visually arrange the \prm{exceptions}. Blank lines are not permissible.
+
+\cmditem{except}{source}{target}{options}
+
+Defines an exception to the default inheritance rules.
+
+\cmd{DeclareDataInheritance} sets the inheritance \prm{options} for a specific \prm{source} and \prm{target} combination. The \prm{source} and \prm{target} arguments specify the parent and the child entry type. The asterisk matches all types and is permissible in either argument.
+
+\cmditem{DeclareDataInheritance}[options]{source, \dots}{target, \dots}{rules}
+
+Declares inheritance rules. The \prm{source} and \prm{target} arguments specify the parent and the child entry type. Either argument may be a single entry type, a comma"=separated list of types, or an asterisk. The asterisk matches all entry types. The \prm{rules} are an undelimited list of \cmd{inherit} and\slash or \cmd{noinherit} directives. Spaces, tabs, and line endings may be used freely to visually arrange the \prm{rules}. Blank lines are not permissible. This command may only be used in the preamble. The options are:
+
+\begin{optionlist*}
+
+\valitem{ignore}{csv list of uniqueness options}
+
+As the \opt{ignore} option on \cmd{DefaultInheritance} explained above. When set here, it takes precedence over any global options set with \cmd{DefaultInheritance}. For example, this would ignore \opt{singletitle} and \opt{uniquetitle} tracking for a \bibtype{book} inheriting from a \bibtype{mvbook}.
+
+\begin{ltxexample}
+\DeclareDataInheritance[ignore={singletitle,uniquetitle}]{mvbook}{book}{<<...>>}
+\end{ltxexample}
+
+\end{optionlist*}
+
+\cmditem{inherit}[option]{source}{target}
+
+Defines an inheritance rule by mapping a \prm{source} field to a \prm{target} field. \prm{option} can be one of
+
+\begin{optionlist*}
+
+\boolitem[false]{override}
+
+As the \opt{override} option for \cmd{DefaultInheritance} explained above. When set here, it takes precedence over any global options set with \cmd{DefaultInheritance}.
+
+\end{optionlist*}
+
+\cmditem{noinherit}{source}
+
+Unconditionally prevents inheritance of the \prm{source} field.
+
+\csitem{ResetDataInheritance}
+
+Clears all inheritance rules defined with \cmd{DeclareDataInheritance}. This command may only be used in the preamble.
+
+\end{ltxsyntax}
+
+Here are some practical examples:
+
+\begin{ltxexample}
+\DefaultInheritance{<<all=true>>,<<override=false>>}
+\end{ltxexample}
+%
+This example shows how to configure the default inheritance behavior. The above settings are the package defaults.
+
+\begin{ltxexample}
+\DefaultInheritance[
+ \except{<<*>>}{<<online>>}{<<all=false>>}
+]{all=true,override=false}
+\end{ltxexample}
+%
+This example is similar to the one above but adds one exception: entries of type \bibtype{online} will, by default, not inherit any data from any parent.
+
+\begin{ltxexample}
+\DeclareDataInheritance{<<collection>>}{<<incollection>>}{
+ \inherit{<<title>>}{<<booktitle>>}
+ \inherit{<<subtitle>>}{<<booksubtitle>>}
+ \inherit{<<titleaddon>>}{<<booktitleaddon>>}
+}
+\end{ltxexample}
+%
+So far we have looked at setting up standard inheritance. For example, \kvopt{all}{true} means that the \bibfield{publisher} field of a source entry is copied to the \bibfield{publisher} field of the target entry. In some cases, however, asymmetric mappings are required. They are defined with \cmd{DeclareDataInheritance}. The above example sets up three typical rules for \bibtype{incollection} entries referencing a \bibtype{collection}. We map the \bibfield{title} and related fields of the source to the corresponding \bibfield{booktitle} fields of the target.
+
+\begin{ltxexample}
+\DeclareDataInheritance{<<mvbook,book>>}{<<inbook,bookinbook>>}{
+ \inherit{<<author>>}{<<author>>}
+ \inherit{<<author>>}{<<bookauthor>>}
+}
+\end{ltxexample}
+%
+This rule is an example of one-to-many mapping: it maps the \bibfield{author} field of the source to both the \bibfield{author} and the \bibfield{bookauthor} fields of the target in order to allow for compact \bibfield{inbook}\slash \bibfield{bookinbook} entries. The source may be either a \bibtype{mvbook} or a \bibtype{book} entry, the target either an \bibtype{inbook} or a \bibtype{bookinbook} entry.
+
+\begin{ltxexample}
+\DeclareDataInheritance{<<*>>}{<<inbook,incollection>>}{
+ \noinherit{<<introduction>>}
+}
+\end{ltxexample}
+%
+This rule prevents inheritance of the \bibfield{introduction} field. It applies to all targets of type
+\bibtype{inbook} or \bibtype{incollection}, regardless of the source entry type.
+
+\begin{ltxexample}
+\DeclareDataInheritance{<<*>>}{<<*>>}{
+ \noinherit{<<abstract>>}
+}
+\end{ltxexample}
+%
+This rule, which applies to all entries, regardless of the source and target entry types, prevents inheritance of the \bibfield{abstract} field.
+
+\begin{ltxexample}
+\DefaultInheritance{all=true,override=false}
+\ResetDataInheritance
+\end{ltxexample}
+%
+This example demonstrates how to emulate traditional \bibtex's cross"=referencing mechanism. It enables inheritance by default, disables overwriting, and clears all other inheritance rules and mappings.
+
+In a bibliography entry, you can give an option <noinherit> where the value
+is a datafield set defined with \cmd{DeclareDatafieldSet}
+(\secref{aut:ctm:dsets}). This will block inheritance of the fields in the
+set on a per-entry basis. For example:
+
+\begin{ltxexample}
+\DeclareDatafieldSet{nobtitle}{
+ \member[field=booktitle]
+}
+\end{ltxexample}
+
+\begin{lstlisting}[style=bibtex]{}
+@INBOOK{s1,
+ OPTIONS = {noinherit=nobtitle},
+ TITLE = {Subtitle},
+ CROSSREF = {s2}
+}
+
+@BOOK{s2,
+ TITLE = {Title}
+}
+\end{lstlisting}
+%
+Here, \bibfield{s1} will not inherit the \bibfield{TITLE} of \bibfield{s2}
+as \bibfield{BOOKTITLE} as this is blocked by the datafield set given as
+the value to the \opt{noinherit} option.
+%
+One important thing to note is that children will never inherit any dateparts of a given type if they already contain a datepart of that type. So, for example:
+
+\begin{lstlisting}[style=bibtex]{}
+@INBOOK{b1,
+ DATE = {2004-03-03},
+ ORIGDATE = {2004-03},
+ CROSSREF = {b2}
+}
+
+@BOOK{b2,
+ DATE = {2004-03-03/2005-08-09},
+ ORIGDATE = {2004-03/2005-08},
+ EVENTDATE = {2004-03/2005-08},
+}
+\end{lstlisting}
+%
+Here, \bibfield{b1} will not inherit any of \bibfield{endyear}, \bibfield{endmonth}, \bibfield{endday}, \bibfield{origendyear} or \bibfield{origendmonth} as this would make a mess of its own dates. It will, given the inheritance defaults, inherit all of the \bibfield{event*} date parts.
+
+\subsection{Auxiliary Commands}
+\label{aut:aux}
+
+The facilities in this section are intended for analyzing and saving bibliographic data rather than formatting and printing it.
+
+\subsubsection{Data Commands}
+\label{aut:aux:dat}
+
+The commands in this section grant low"=level access to the unformatted bibliographic data. They are not intended for typesetting but rather for things like saving data to a temporary macro so that it may be used in a comparison later.
+
+\begin{ltxsyntax}
+
+\cmditem{thefield}[msform][mslang]{field}
+
+Expands to the unformatted \prm{field} (for a multiscript field, \prm{msform}/\prm{mslang} may be specified, otherwise, the global or refcontext override values of \opt{msform}/\opt{mslang} are used). If the \prm{field} is undefined, this command expands to an empty string.
+
+\cmditem{strfield}[msform][mslang]{field}
+
+Similar to \cmd{thefield}, except that the field is automatically sanitized such that its value may safely be used in the formation of a control sequence name.
+
+\cmditem{csfield}[msform][mslang]{field}
+
+Similar to \cmd{thefield}, but prevents expansion.
+
+\cmditem{usefield}{command}[msform][mslang]{field}
+
+Executes \prm{command} using the unformatted \prm{field} as its argument (for a multiscript field, \prm{msform}/\prm{mslang} may be specified, otherwise, the global or refcontext override values of \opt{msform}/\opt{mslang} are used).
+
+\cmditem{thelist}[msform][mslang]{literal list}
+
+Expands to the unformatted \prm{literal list} (for a multiscript list, \prm{msform}/\prm{mslang} may be specified, otherwise, the global or refcontext override values of \opt{msform}/\opt{mslang} are used). If the list is undefined, this command expands to an empty string. Note that this command will dump the \prm{literal list} in the internal format used by this package. This format is not suitable for printing.
+
+\cmditem{strlist}[msform][mslang]{literal list}
+
+Similar to \cmd{thelist} (for a multiscript list, \prm{msform}/\prm{mslang} may be specified, otherwise, the global or refcontext override values of \opt{msform}/\opt{mslang} are used), except that the list internal representation is automatically sanitized such that its value may safely be used in the formation of a control sequence name.
+
+\cmditem{thefirstlistitem}[msform][mslang]{literal list}
+
+Expands to the unformatted first item in \prm{literal list} (for a multiscript list, \prm{msform}/\prm{mslang} may be specified, otherwise, the global or refcontext override values of \opt{msform}/\opt{mslang} are used). If the \prm{literal list} is undefined, this command expands to an empty string.
+
+\cmditem{strfirstlistitem}[msform][mslang]{literal list}
+
+Similar to \cmd{thefirstlistitem}, except that the item is automatically sanitized such that its value may safely be used in the formation of a control sequence name.
+
+\cmditem{usefirstlistitem}{command}[msform][mslang]{literal list}
+
+Executes \prm{command} using the unformatted first item of \prm{literal list} as its argument (for a multiscript list, \prm{msform}/\prm{mslang} may be specified, otherwise, the global or refcontext override values of \opt{msform}/\opt{mslang} are used).
+
+\cmditem{thename}[msform][mslang]{name list}
+
+Expands to the unformatted \prm{name list} (for a multiscript name, \prm{msform}/\prm{mslang} may be specified, otherwise, the global or refcontext override values of \opt{msform}/\opt{mslang} are used). If the list is undefined, this command expands to an empty string. Note that this command will dump the \prm{name list} in the internal format used by this package. This format is not suitable for printing.
+
+\cmditem{strname}[msform][mslang]{name list}
+
+Similar to \cmd{thename}, except that the name internal representation is automatically sanitized such that its value may safely be used in the formation of a control sequence name.
+
+\cmditem{savefield}[msform][mslang]{field}{macro}
+\cmditem*{savefield*}{field}{macro}
+
+Copies an unformatted \prm{field} (optionally a multiscript field of \prm{msform}/\prm{mslang}) to a \prm{macro}. The regular variant of this command defines the \prm{macro} globally, the starred one works locally.
+
+\cmditem{savelist}[msform][mslang]{literal list}{macro}
+\cmditem*{savelist*}{literal list}{macro}
+
+Copies an unformatted \prm{literal list} (optionally a multiscript list of \prm{msform}/\prm{mslang}) to a \prm{macro}. The regular variant of this command defines the \prm{macro} globally, the starred one works locally.
+
+\cmditem{savename}[msform][mslang]{name list}{macro}
+\cmditem*{savename*}{name list}{macro}
+
+Copies an unformatted \prm{name list} (optionally a multiscript name of \prm{msform}/\prm{mslang}) to a \prm{macro}. The regular variant of this command defines the \prm{macro} globally, the starred one works locally.
+
+\cmditem{savefieldcs}[msform][mslang]{field}{csname}
+\cmditem*{savefieldcs*}{field}{csname}
+
+Similar to \cmd{savefield}, but takes the control sequence name \prm{csname} (without a leading backslash) as an argument, rather than a macro name.
+
+\cmditem{savelistcs}[msform][mslang]{literal list}{csname}
+\cmditem*{savelistcs*}{literal list}{csname}
+
+Similar to \cmd{savelist}, but takes the control sequence name \prm{csname} (without a leading backslash) as an argument, rather than a macro name.
+
+\cmditem{savenamecs}[msform][mslang]{name list}{csname}
+\cmditem*{savenamecs*}{name list}{csname}
+
+Similar to \cmd{savename}, but takes the control sequence name \prm{csname} (without a leading backslash) as an argument, rather than a macro name.
+
+\cmditem{restorefield}[msform][mslang]{field}{macro}
+
+Restores a \prm{field} (optionally a multiscript field of \prm{msform}/\prm{mslang}) from a \prm{macro} defined with \cmd{savefield} before. The field is restored within a local scope.
+
+\cmditem{restorelist}[msform][mslang]{literal list}{macro}
+
+Restores a \prm{literal list} (optionally a multiscript list of \prm{msform}/\prm{mslang}) from a \prm{macro} defined with \cmd{savelist} before. The list is restored within a local scope.
+
+\cmditem{restorename}[msform][mslang]{name list}{macro}
+
+Restores a \prm{name list} (optionally a multiscript name of \prm{msform}/\prm{mslang}) from a \prm{macro} defined with \cmd{savename} before. The list is restored within a local scope.
+
+\cmditem[msform][mslang]{clearfield}{field}
+
+Clears the \prm{field} (optionally a multiscript field of \prm{msform}/\prm{mslang} of which both or neither optional arguments must be provided) within a local scope. A field cleared this way is treated as undefined by subsequent data commands. When no optional \prm{msform}/\prm{mslang} arguments are provided, clears all alternates of a multiscript field.
+
+\cmditem[msform][mslang]{clearlist}{literal list}
+
+Clears the \prm{literal list} (optionally a multiscript list of \prm{msform}/\prm{mslang} of which both or neither optional arguments must be provided) within a local scope. A list cleared this way is treated as undefined by subsequent data commands. When no optional \prm{msform}/\prm{mslang} arguments are provided, clears all alternates of a multiscript list. Clearing only one alternate of a multiscript list does not clear the associated counters for the list.
+
+\cmditem{clearname}{name list}
+
+Clears the \prm{name list} (optionally a multiscript name of \prm{msform}/\prm{mslang} of which both or neither optional arguments must be provided) within a local scope. A name cleared this way is treated as undefined by subsequent data commands. When no optional \prm{msform}/\prm{mslang} arguments are provided, clears all alternates of a multiscript name. Clearing only one alternate of a multiscript name does not clear the associated counters for the list.
+
+\end{ltxsyntax}
+
+\subsubsection{Stand-alone Tests}
+\label{aut:aux:tst}
+
+The commands in this section are various kinds of stand"=alone tests for use in bibliography and citation styles.
+
+\begin{ltxsyntax}
+
+\cmditem{ifmsentryfield}{entryfield}{true}{false}
+
+Returns true if the \prm{entryfield} (i.e. data source field name, regardless of \biblatex type of field) is a multiscript field and false otherwise. Only multiscript fields have alternate forms and languages which can be selected with the \prm{msform} and \prm{mslang} options to various macros.
+
+\cmditem{if$<$datetype$>$julian}{true}{false}
+
+Expands to \prm{true} if the date <datetype>date (\opt{date}, \opt{urldate}, \opt{eventdate} etc.) Was converted to the Julian Calendar due to the settings of the \opt{julian}and \opt{gregorianstart} options.
+
+\cmditem{ifdatejulian}{true}{false}
+
+As \cmd{if$<$datetype$>$julian} but for use in \cmd{mkbibdate*} formatting commands (\secref{aut:fmt:lng}) inside which the appropriate \cmd{if$<$datetype$>$julian} command is aliased to this command.
+
+\cmditem{if$<$datetype$>$dateera}{era}{true}{false}
+
+Expands to \prm{true} if the date <datetype>date (\opt{date}, \opt{urldate}, \opt{eventdate} etc.) has an era specification equal to \prm{era} and \prm{false} otherwise. The supported \prm{era} strings which \biber determines and passes in the \file{.bbl} are:
+
+\begin{description}
+\item[bce]~BCE/BC era
+\item[ce]~CE/AD era
+\end{description}
+
+This command is useful for determining whether to print the location
+strings in \secref{aut:lng:key:dt}.
+
+\cmditem{ifdateera}{era}{true}{false}
+
+As \cmd{if$<$datetype$>$dateera} but for use in \cmd{mkbibdate*} formatting commands (\secref{aut:fmt:lng}) inside which the appropriate \cmd{if$<$datetype$>$dateera} command is aliased to this command.
+
+\cmditem{if$<$datetype$>$datecirca}{true}{false}
+
+Expands to \prm{true} if the date <datetype>date (\opt{date}, \opt{urldate}, \opt{eventdate} etc.) had a <circa> marker in the source and \prm{false} otherwise. See \secref{bib:use:dat}. This command is useful for determining whether to print the location strings in \secref{aut:lng:key:dt}.
+
+\cmditem{ifdatecirca}{true}{false}
+
+As \cmd{if$<$datetype$>$datecirca} but for use in \cmd{mkbibdate*} formatting commands (\secref{aut:fmt:lng}) inside which the appropriate \cmd{if$<$datetype$>$datecirca} command is aliased to this command.
+
+\cmditem{if$<$datetype$>$dateuncertain}{true}{false}
+
+Expands to \prm{true} if the date <datetype>date (\opt{date}, \opt{urldate}, \opt{eventdate} etc.) had an uncertainty marker in the source and \prm{false} otherwise. See \secref{bib:use:dat}. This command is useful for determining whether to print, for example, a question mark after a year.
+
+\cmditem{ifdateuncertain}{true}{false}
+
+As \cmd{if$<$datetype$>$dateuncertain} but for use in \cmd{mkbibdate*} formatting commands (\secref{aut:fmt:lng}) inside which the appropriate \cmd{if$<$datetype$>$dateuncertain} command is aliased to this command.
+
+\cmditem{ifenddateuncertain}{true}{false}
+
+As \cmd{ifend$<$datetype$>$dateuncertain} but for use in \cmd{mkbibdate*} formatting commands (\secref{aut:fmt:lng}) inside which the appropriate \cmd{ifend$<$datetype$>$dateuncertain} command is aliased to this command.
+
+\cmditem{if$<$datetype$>$dateunknown}{true}{false}
+
+Expands to \prm{true} if the date <datetype>date (\opt{date}, \opt{urldate}, \opt{eventdate} etc.) is marked as unknown (as opposed to open) in the source and \prm{false} otherwise. See \secref{bib:use:dat}.
+
+\cmditem{ifdateunknown}{true}{false}
+
+As \cmd{if$<$datetype$>$dateunknown} but for use in \cmd{mkbibdate*} formatting commands (\secref{aut:fmt:lng}) inside which the appropriate \cmd{if$<$datetype$>$dateunknown} command is aliased to this command.
+
+\cmditem{ifenddateunknown}{true}{false}
+
+As \cmd{ifend$<$datetype$>$dateunknown} but for use in \cmd{mkbibdate*} formatting commands (\secref{aut:fmt:lng}) inside which the appropriate \cmd{ifend$<$datetype$>$dateunknown} command is aliased to this command.
+
+\cmditem{iflabeldateisdate}{true}{false}
+
+Expands to \prm{true} if labeldate is defined and was obtained from date, and to \prm{false} otherwise.
+
+\cmditem{ifdatehasyearonlyprecision}{datetype}{true}{false}
+
+Expands to \prm{true} if the \prm{datetype}date is defined and would be shown with year precision \cmd{print$<$datetype$>$date}, and to false otherwise.
+
+\cmditem{ifdatehastime}{datetype}{true}{false}
+
+Expands to \prm{true} if the \prm{datetype}date is defined, has a time component and \opt{$<$datetype$>$dateusetime} is true, and to false otherwise.
+
+\cmditem{ifdateshavedifferentprecision}{datetype1}{datetype2}{true}{false}
+
+Expands to \prm{true} if the two dates \prm{datetype1} and \prm{datetype2} would show in different precision when printed with \cmd{print$<$datetype1$>$date} and \cmd{print$<$datetype2$>$date} respectively, and to \prm{false} otherwise.
+
+\cmditem{ifdateyearsequal}{datetype1}{datetype2}{true}{false}
+
+Expands to \prm{true} if the two dates \prm{datetype1} and \prm{datetype2} have the same year and era. Since the sign of the date is saved in the era field, years should be compared using this command to avoid confusion when the two years have opposite signs
+
+\cmditem{ifdatesequal}{datetype1}{datetype2}{true}{false}
+
+Expands to \prm{true} if the two dates \prm{datetype1} and \prm{datetype2} are the same. Here \prm{datetype2} may be the <end> bit of \prm{datetype1} (or vice versa).
+
+\cmditem{ifdaterangesequal}{datetype1}{datetype2}{true}{false}
+
+Expands to \prm{true} if the two date ranges---that is the start and the end date---\prm{datetype1} and \prm{datetype2} are the same.
+
+
+\cmditem{ifcaselang}[language]{true}{false}
+
+Expands to \prm{true} if the optional \prm{language} is one of those
+declared by \cmd{DeclareCaseLangs} (see \secref{aut:aux:msc}) and to
+\prm{false} otherwise. Without the optional argument, checks the current
+value of \cmd{currentlang}.
+
+\cmditem{ifsortingnamekeytemplatename}{string}{true}{false}
+
+Expands to \prm{true} if the \prm{string} is equal to the current in scope sorting name key template name (see \secref{aut:ctm:srt}), and to \prm{false} otherwise.
+
+\cmditem{ifuniquenametemplatename}{string}{true}{false}
+
+Expands to \prm{true} if the \prm{string} is equal to the current in scope uniqueness name key template name (see \secref{aut:ctm:srt}), and to \prm{false} otherwise.
+
+\cmditem{iflabelalphanametemplatename}{string}{true}{false}
+
+Expands to \prm{true} if the \prm{string} is equal to the current in scope alphabetic label name template name (see \secref{aut:ctm:srt}), and to \prm{false} otherwise.
+
+\cmditem{ifentryfieldundef}{entryfield}{true}{false}
+
+Expands to \prm{true} if the \prm{entryfield} is undefined, and to \prm{false} otherwise. \prm{entryfield} is the name of any entry field, regardless of type (field, list, name etc.). This allows testing to see if there are \emph{any} alternates of an entryfield defined.
+
+\cmditem{iffieldundef}[msform][mslang]{field}{true}{false}
+
+Expands to \prm{true} if the \prm{field} is undefined, and to \prm{false} otherwise. For a multiscript field, \prm{msform}/\prm{mslang} may be specified to test a specific field alternate. If \prm{msform} and \prm{mslang} are not specified, this macro tests to see if \emph{any} alternates for a field are defined.
+
+\cmditem{iflistundef}{literal list}{true}{false}
+
+Expands to \prm{true} if the \prm{literal list} is undefined, and to \prm{false} otherwise. For a multiscript list, \prm{msform}/\prm{mslang} may be specified to test a specific list alternate. If \prm{msform} and \prm{mslang} are not specified, this macro tests to see if \emph{any} alternates for a field are defined.
+
+\cmditem{ifnameundef}[msform][mslang]{name list}{true}{false}
+
+Expands to \prm{true} if the \prm{name list} is undefined, and to \prm{false} otherwise. For a multiscript name, \prm{msform}/\prm{mslang} may be specified to test a specific name alternate. If \prm{msform} and \prm{mslang} are not specified, this macro tests to see if \emph{any} alternates for a field are defined.
+
+\cmditem{iffieldsequal}[msform1][mslang1]{field 1}[msform2][mslang2]{field 2}{true}{false}
+
+Expands to \prm{true} if the values of \prm{field 1} (optionally a multiscript field of \prm{msform1}/\prm{mslang1}) and \prm{field 2} (optionally a multiscript field of \prm{msform2}/\prm{mslang2}) are equal, and to \prm{false} otherwise.
+
+\cmditem{iflistsequal}[msform1][mslang1]{literal list 1}[msform2][mslang2]{literal list 2}{true}{false}
+
+Expands to \prm{true} if the values of \prm{literal list 1} (optionally a multiscript list of \prm{msform1}/\prm{mslang1}) and \prm{literal list 2} (optionally a multiscript list of \prm{msform2}/\prm{mslang2}) are equal, and to \prm{false} otherwise.
+
+\cmditem{ifnamesequal}[msform1][mslang1]{name list 1}[msform2][mslang2]{name list 2}{true}{false}
+
+Expands to \prm{true} if the values of \prm{name list 1} (optionally a multiscript name of \prm{msform1}/\prm{mslang1}) and \prm{name list 2} (optionally a multiscript name of \prm{msform2}/\prm{mslang2}) are equal, and to \prm{false} otherwise.
+
+\cmditem{iffieldequals}[msform][mslang]{field}{macro}{true}{false}
+
+Expands to \prm{true} if the value of the \prm{field} (optionally a multiscript field of \prm{msform}/\prm{mslang}) is equal to the definition of \prm{macro}, and to \prm{false} otherwise.
+
+\cmditem{iflistequals}[msform][mslang]{literal list}{macro}{true}{false}
+
+Expands to \prm{true} if the value of the \prm{literal list} (optionally a multiscript list of \prm{msform}/\prm{mslang}) is equal to the definition of \prm{macro}, and to \prm{false} otherwise.
+
+\cmditem{ifnameequals}[msform][mslang]{name list}{macro}{true}{false}
+
+Expands to \prm{true} if the value of the \prm{name list} (optionally a multiscript name of \prm{msform}/\prm{mslang}) is equal to the definition of \prm{macro}, and to \prm{false} otherwise.
+
+\cmditem{iffieldequalcs}[msform][mslang]{field}{csname}{true}{false}
+
+Similar to \cmd{iffieldequals} but takes the control sequence name \prm{csname} (without a leading backslash) as an argument, rather than a macro name.
+
+\cmditem{iflistequalcs}[msform][mslang]{literal list}{csname}{true}{false}
+
+Similar to \cmd{iflistequals} but takes the control sequence name \prm{csname} (without a leading backslash) as an argument, rather than a macro name.
+
+\cmditem{ifnameequalcs}[msform][mslang]{name list}{csname}{true}{false}
+
+Similar to \cmd{ifnameequals} but takes the control sequence name \prm{csname} (without a leading backslash) as an argument, rather than a macro name.
+
+\cmditem{iffieldequalstr}[msform][mslang]{field}{string}{true}{false}
+
+Executes \prm{true} if the value of the \prm{field} (optionally a multiscript field of \prm{msform}/\prm{mslang}) is equal to \prm{string}, and \prm{false} otherwise. This command is robust.
+
+\cmditem{iffieldxref}[msform][mslang]{field}{true}{false}
+
+If the \bibfield{crossref}\slash \bibfield{xref} field of an entry is defined, this command checks if the \prm{field} (optionally a multiscript field of \prm{msform}/\prm{mslang}) is related to the cross"=referenced parent entry. It executes \prm{true} if the \prm{field} of the child entry is equal to the corresponding \prm{field} of the parent entry, and \prm{false} otherwise. If the \bibfield{crossref}\slash \bibfield{xref} field is undefined, it always executes \prm{false}. This command is robust. See the description of the \bibfield{crossref} and \bibfield{xref} fields in \secref{bib:fld:spc} as well as \secref{bib:cav:ref} for further information concerning cross"=referencing.
+
+\cmditem{iflistxref}[msform][mslang]{literal list}{true}{false}
+
+Similar to \cmd{iffieldxref} but checks if a \prm{literal list} (optionally a multiscript list of \prm{msform}/\prm{mslang}) is related to the cross"=referenced parent entry. See the description of the \bibfield{crossref} and \bibfield{xref} fields in \secref{bib:fld:spc} as well as \secref{bib:cav:ref} for further information concerning cross"=referencing.
+
+\cmditem{ifnamexref}[msform][mslang]{name list}{true}{false}
+
+Similar to \cmd{iffieldxref} but checks if a \prm{name list} (optionally a multiscript name of \prm{msform}/\prm{mslang}) is related to the cross"=referenced parent entry. See the description of the \bibfield{crossref} and \bibfield{xref} fields in \secref{bib:fld:spc} as well as \secref{bib:cav:ref} for further information concerning cross"=referencing.
+
+\cmditem{ifcurrentfield}{field}{true}{false}
+
+Executes \prm{true} if the current field is \prm{field}, and \prm{false} otherwise. This command is robust. It is intended for use in field formatting directives and always executes \prm{false} when used in any other context.
+
+\cmditem{ifcurrentlist}{literal list}{true}{false}
+
+Executes \prm{true} if the current list is \prm{literal list}, and \prm{false} otherwise. This command is robust. It is intended for use in list formatting directives and always executes \prm{false} when used in any other context.
+
+\cmditem{ifcurrentname}{name list}{true}{false}
+
+Executes \prm{true} if the current list is \prm{name list}, and \prm{false} otherwise. This command is robust. It is intended for use in list formatting directives and always executes \prm{false} when used in any other context.
+
+\cmditem{ifuseprefix}{true}{false}
+
+Expands to \prm{true} if the \opt{useprefix} option is enabled (either globally or for the current entry), and \prm{false} otherwise. See \secref{use:opt:bib} for details on this option.
+
+\cmditem{ifuseauthor}{true}{false}
+
+This is just a particular case of the \cmd{ifuse$<$name$>$} macro below but is mentioned here as \bibfield{author} is part of the default data model. Expands to \prm{true} if the \opt{useauthor} option is enabled (either globally or for the current entry), and \prm{false} otherwise. See \secref{use:opt:bib} for details on this option.
+
+\cmditem{ifuseeditor}{true}{false}
+
+This is just a particular case of the \cmd{ifuse$<$name$>$} macro below but is mentioned here as \bibfield{editor} is part of the default data model. Expands to \prm{true} if the \opt{useeditor} option is enabled (either globally or for the current entry), and \prm{false} otherwise. See \secref{use:opt:bib} for details on this option.
+
+\cmditem{ifusetranslator}{true}{false}
+
+This is just a particular case of the \cmd{ifuse$<$name$>$} macro below but is mentioned here as \bibfield{translator} is part of the default data model. Expands to \prm{true} if the \opt{usetranslator} option is enabled (either globally or for the current entry), and \prm{false} otherwise. See \secref{use:opt:bib} for details on this option.
+
+\cmditem{ifuse$<$name$>$}{true}{false}
+
+Expands to \prm{true} if the \opt{use$<$name$>$} option is enabled (either globally or for the current entry), and \prm{false} otherwise. See \secref{use:opt:bib} for details on this option.
+
+\cmditem{ifcrossrefsource}{true}{false}
+
+Expands to \prm{true} if the entry was inclued in the \file{.bbl} due to being referenced more than \opt{mincrossrefs} times and false otherwise. See \secref{use:opt:pre:gen}. Also expands to false if the entry was directly cited.
+
+\cmditem{ifxrefsource}{true}{false}
+
+Expands to \prm{true} if the entry was inclued in the \file{.bbl} due to being referenced more than \opt{minxrefs} times and false otherwise. See \secref{use:opt:pre:gen}. Also expands to false if the entry was directly cited.
+
+\cmditem{ifsingletitle}{true}{false}
+
+Expands to \prm{true} if there is only one work by the \opt{labelname} name in the bibliography, and to \prm{false} otherwise. If \opt{labelname} is not set for an entry, this will always expand to \prm{false}. Note that this feature needs to be enabled explicitly with the package option \opt{singletitle}.
+
+\cmditem{ifnocite}{true}{false}
+
+Expands to \prm{true} if the entry was \emph{only} included in the \file{.bbl} via \cmd{nocite}. That is, returns \prm{false} if an entry was both \cmd{nocite}'d and \cmd{cite}'d.
+
+\cmditem{ifuniquetitle}{true}{false}
+
+Expands to \prm{true} if there is only one work with the title \opt{labeltitle} and to \prm{false} otherwise. If \opt{labeltitle} is not set for an entry, this will always expand to \prm{false}. Note that this feature needs to be enabled explicitly with the package option \opt{uniquetitle}.
+
+\cmditem{ifuniquebaretitle}{true}{false}
+
+Expands to \prm{true} if \bibfield{labelname} is empty and there is only one work with the title \opt{labeltitle} and to \prm{false} otherwise. If \opt{labeltitle} is not set for an entry, this will always expand to \prm{false}. Note that this feature needs to be enabled explicitly with the package option \opt{uniquebaretitle}.
+
+\cmditem{ifuniquework}{true}{false}
+
+Expands to \prm{true} if there is only one work by the \opt{labelname} name with the \opt{labeltitle} title in the bibliography, and to \prm{false} otherwise. If neither \opt{labelname} nor \opt{labeltitle} are set for an entry, this will always expand to \prm{false}. Note that this feature needs to be enabled explicitly with the package option \opt{uniquework}. If both \bibfield{singletitle} and \bibfield{uniquetitle} are false for the same entry, this could be because another entry has the same \bibfield{labdlname} and yet another, different, entry has the same \bibfield{labeltitle}. \bibfield{uniquework} would let you know that there is another entry that has \emph{both} the same \bibfield{labelname} \emph{and} the same \bibfield{labeltitle}. This could be helpful in cases where multiple people maintain bibliography datasources and there is a risk of adding the same work with different keys without other parties realising this. This test could help to find such duplicates.
+
+\cmditem{ifuniqueprimaryauthor}{true}{false}
+
+Expands to \prm{true} if the primary (first) author name of \opt{labelname} is unique in the bibliography list and to \prm{false} otherwise. This effectively answers the question <is there more than one author with the same base name>. The base name parts are defined by \cmd{DeclareUniquenameTemplate} see \secref{aut:cav:amb}. This is required by some styles (e.g. APA) which mandates primary author disambiguation only and only if there are (different) primary authors with the same family name. If \opt{labelname} is not set for an entry, this will always expand to \prm{false}. Note that this feature needs to be enabled explicitly with the package option \opt{uniqueprimaryauthor}.
+
+\cmditem{ifandothers}{list}{true}{false}
+
+Expands to \prm{true} if the \prm{list} is defined and has been truncated in the \file{bib} file with the keyword <\texttt{and others}>, and to \prm{false} otherwise. The \prm{list} may be a literal list or a name list.
+
+\cmditem{ifmorenames}{true}{false}
+
+Expands to \prm{true} if the current name list has been or will be truncated, and to \prm{false} otherwise. This command is intended for use in formatting directives for name lists. It will always expand to \prm{false} when used elsewhere. This command performs the equivalent of an \cmd{ifandothers} test for the current list. If this test is negative, it also checks if the \cnt{listtotal} counter is larger than \cnt{liststop}. This command may be used in a formatting directive to decide if a note such as «and others» or «et al.» is to be printed at the end of the list. Note that you still need to check whether you are in the middle or at the end of the list, \ie whether \cnt{listcount} is smaller than or equal to \cnt{liststop}, see \secref{aut:bib:dat} for details.
+
+\cmditem{ifmoreitems}{true}{false}
+
+This command is similar to \cmd{ifmorenames} but checks the current literal list. It is intended for use in formatting directives for literal lists. It will always expand to \prm{false} when used elsewhere.
+
+\cmditem{if$<$namepart$>$inits}{true}{false}
+
+Expands to \prm{true} or \prm{false}, depending on the state of the \opt{$<$namepart$>$inits} package option (see \secref{use:opt:pre:int}). This command is intended for use in formatting directives for name lists.
+
+\cmditem{ifterseinits}{true}{false}
+
+Expands to \prm{true} or \prm{false}, depending on the state of the \opt{terseinits} package option (see \secref{use:opt:pre:int}). This command is intended for use in formatting directives for name lists.
+
+\cmditem{ifentrytype}{type}{true}{false}
+
+Executes \prm{true} if the entry type of the entry currently being processed is \prm{type}, and \prm{false} otherwise.
+
+\cmditem{ifkeyword}{keyword}{true}{false}
+
+Executes \prm{true} if the \prm{keyword} is found in the \bibfield{keywords} field of the entry currently being processed, and \prm{false} otherwise.
+
+\cmditem{ifentrykeyword}{entrykey}{keyword}{true}{false}
+
+A variant of \cmd{ifkeyword} which takes an entry key as its first argument. This is useful for testing an entry other than the one currently processed. A user-facing version of this command is available for use in documents see \secref{use:eq}.
+
+\cmditem{ifcategory}{category}{true}{false}
+
+Executes \prm{true} if the entry currently being processed has been assigned to a \prm{category} with \cmd{addtocategory}, and \prm{false} otherwise.
+
+\cmditem{ifentrycategory}{entrykey}{category}{true}{false}
+
+A variant of \cmd{ifcategory} which takes an entry key as its first argument. This is useful for testing an entry other than the one currently processed. A user-facing version of this command is available for use in documents see \secref{use:eq}
+
+\cmditem{ifciteseen}{true}{false}
+
+Executes \prm{true} if the entry currently being processed has been cited before, and \prm{false} otherwise. This command is robust and intended for use in citation styles. If there are any \env{refsection} environments in the document, the citation tracking is local to these environments. Note that the citation tracker needs to be enabled explicitly with the package option \opt{citetracker}. The behavior of this test depends on the mode the citation tracker is operating in, see \secref{use:opt:pre:int} for details. If the citation tracker is disabled, the test always yields \prm{false}. Also see the \cmd{citetrackertrue} and \cmd{citetrackerfalse} switches in \secref{aut:aux:msc}.
+
+\cmditem{ifentryseen}{entrykey}{true}{false}
+
+A variant of \cmd{ifciteseen} which takes an entry key as its first argument. Since the \prm{entrykey} is expanded prior to performing the test, it is possible to test for entry keys in a field such as \bibfield{xref}:
+
+\begin{ltxexample}
+\ifentryseen{<<\thefield{xref}>>}{true}{false}
+\end{ltxexample}
+%
+Apart from the additional argument, \cmd{ifentryseen} behaves like \cmd{ifciteseen}. A user-facing version of this command is available for use in documents see \secref{use:eq}.
+
+\cmditem{ifentryinbib}{entrykey}{true}{false}
+
+Executes \prm{true} if the entry \prm{entrykey} appears in the current bibliography, and \prm{false} otherwise. A user-facing version of this command is available for use in documents see \secref{use:eq}.
+
+\cmditem{iffirstcitekey}{true}{false}
+
+Executes \prm{true} if the entry currently being processed is the first one in the citation list, and \prm{false} otherwise. This command relies on the \cnt{citecount}, \cnt{citetotal}, \cnt{multicitecount} and \cnt{multicitetotal} counters (\secref{aut:fmt:ilc}) and thus is intended for use only in the \prm{loopcode} of a citation command defined with \cmd{DeclareCiteCommand}.
+
+\cmditem{iflastcitekey}{true}{false}
+
+Similar \cmd{iffirstcitekey}, but executes \prm{true} if the entry currently being processed is the last one in the citation list, and \prm{false} otherwise.
+
+\cmditem{ifciteibid}{true}{false}
+
+Expands to \prm{true} if the entry currently being processed is the same as the last one, and to \prm{false} otherwise. This command is intended for use in citation styles. If there are any \env{refsection} environments in the document, the tracking is local to these environments. Note that the <ibidem> tracker needs to be enabled explicitly with the package option \opt{ibidtracker}. The behavior of this test depends on the mode the tracker is operating in, see \secref{use:opt:pre:int} for details. If the tracker is disabled, the test always yields \prm{false}. Also see the \cmd{citetrackertrue} and \cmd{citetrackerfalse} switches in \secref{aut:aux:msc}.
+
+\cmditem{ifciteidem}{true}{false}
+
+Expands to \prm{true} if the primary name (\ie the author or editor) in the entry currently being processed is the same as the last one, and to \prm{false} otherwise. This command is intended for use in citation styles. If there are any \env{refsection} environments in the document, the tracking is local to these environments. Note that the <idem> tracker needs to be enabled explicitly with the package option \opt{idemtracker}. The behavior of this test depends on the mode the tracker is operating in, see \secref{use:opt:pre:int} for details. If the tracker is disabled, the test always yields \prm{false}. Also see \cmd{citetrackertrue} and \cmd{citetrackerfalse} in \secref{aut:aux:msc}.
+
+\cmditem{ifopcit}{true}{false}
+
+This command is similar to \cmd{ifciteibid} except that it expands to \prm{true} if the entry currently being processed is the same as the last one \emph{by this author or editor}. Note that the <opcit> tracker needs to be enabled explicitly with the package option \opt{opcittracker}. The behavior of this test depends on the mode the tracker is operating in, see \secref{use:opt:pre:int} for details. If the tracker is disabled, the test always yields \prm{false}. Also see the \cmd{citetrackertrue} and \cmd{citetrackerfalse} switches in \secref{aut:aux:msc}.
+
+\cmditem{ifloccit}{true}{false}
+
+This command is similar to \cmd{ifopcit} except that it also compares the \prm{postnote} arguments and expands to \prm{true} only if they match and are numerical (in the sense of \cmd{ifnumerals} from \secref{aut:aux:tst}), \ie \cmd{ifloccit} will yield \texttt{true} if the citation refers to the same page cited before. Note that the <loccit> tracker needs to be enabled explicitly with the package option \opt{loccittracker}. The behavior of this test depends on the mode the tracker is operating in, see \secref{use:opt:pre:int} for details. If the tracker is disabled, the test always yields \prm{false}. Also see the \cmd{citetrackertrue} and \cmd{citetrackerfalse} switches in \secref{aut:aux:msc}.
+
+\cmditem{iffirstonpage}{true}{false}
+
+The behavior of this command is responsive to the package option \opt{pagetracker}. If the option is set to \texttt{page}, it expands to \prm{true} if the current item is the first one on the page, and to \prm{false} otherwise. If the option is set to \texttt{spread}, it expands to \prm{true} if the current item is the first one on the double-page spread, and to \prm{false} otherwise. If the page tracker is disabled, this test always yields \prm{false}. Depending on the context, the <item> may be a citation or an entry in the bibliography or a bibliography list. Note that this test distinguishes between body text and footnotes. For example, if used in the first footnote on a page, it will expand to \prm{true} even if there is a citation in the body text prior to the footnote. Also see the \cmd{pagetrackertrue} and \cmd{pagetrackerfalse} switches in \secref{aut:aux:msc}.
+
+\cmditem{ifsamepage}{instance 1}{instance 2}{true}{false}
+
+This command expands to \prm{true} if two instances of a reference are located on the same page or double-page spread, and to \prm{false} otherwise. An instance of a reference may be a citation or an entry in the bibliography or a bibliography list. These instances are identified by the value of the \cnt{instcount} counter, see \secref{aut:fmt:ilc}. The behavior of this command is responsive to the package option \opt{pagetracker}. If this option is set to \texttt{spread}, \cmd{ifsamepage} is in fact an <if same spread> test. If the page tracker is disabled, this test always yields \prm{false}. The arguments \prm{instance 1} and \prm{instance 2} are treated as integer expressions in the sense of \etex's \cmd{numexpr}. This implies that it is possible to make calculations within these arguments, for example:
+
+\begin{ltxexample}
+\ifsamepage{<<\value>>{instcount}}{<<\value>>{instcount}<<-1>>}{true}{false}
+\end{ltxexample}
+
+Note that \cmd{value} is not prefixed by \cmd{the} and that the subtraction is included in the second argument in the above example. If \prm{instance 1} or \prm{instance 2} is an invalid number (for example, a negative one), the test yields \prm{false}. Also note that this test does not distinguish between body text and footnotes. Also see the \cmd{pagetrackertrue} and \cmd{pagetrackerfalse} switches in \secref{aut:aux:msc}.
+
+\cmditem{ifinteger}{string}{true}{false}
+
+Executes \prm{true} if the \prm{string} is a positive integer, and \prm{false} otherwise. This command is robust.
+
+\cmditem{hascomputableequivalent}{string}{true}{false}
+
+Executes \prm{true} if the \prm{string} can be transformed into a \latex-computable integer consisting only of \acr{US-ASCII} characters via \cmd{getcomputableequivalent} and \prm{false} otherwise.
+The mapping from non-\acr{US-ASCII} to \acr{US-ASCII} numerals will usually be given in the \file{lbx} file.
+
+\cmditem{ifiscomputable}{string}{true}{false}
+
+Returns \prm{true} if \cmd{ifinteger} or \cmd{hascomputableequivalent} retrurns \prm{true} on \prm{string} and \prm{false} otherwise.
+
+\cmditem{getcomputableequivalent}{string}{macro}
+
+Saves the \acr{US-ASCII} representation of the number given as \prm{string} in \prm{macro}.
+
+\cmditem{ifnumeral}{string}{true}{false}
+
+Executes \prm{true} if the \prm{string} is an Arabic or Roman numeral, and \prm{false} otherwise. This command is robust. See also \cmd{DeclareNumChars} and \cmd{NumCheckSetup} in \secref{aut:aux:msc}.
+
+\cmditem{ifnumerals}{string}{true}{false}
+
+Executes \prm{true} if the \prm{string} is a range or a list of Arabic or Roman numerals, and \prm{false} otherwise. This command is robust. In contrast to \cmd{ifnumeral}, it will also execute \prm{true} with arguments like «52--58», «14/15», «1,~3,~5», and so on. See also \cmd{DeclareNumChars}, \cmd{DeclareRangeChars}, \cmd{DeclareRangeCommands}, \cmd{NumCheckSetup}, and \cmd{NumsCheckSetup} in \secref{aut:aux:msc}.
+
+\cmditem{ifpages}{string}{true}{false}
+
+Similar to \cmd{ifnumerals}, but also considers \cmd{DeclarePageCommands} and \cmd{PagesCheckSetup} from \secref{aut:aux:msc}.
+
+\cmditem{iffieldint}[msform][mslang]{field}{true}{false}
+
+Similar to \cmd{ifinteger}, but uses the value of a \prm{field} (optionally a multiscript field of \prm{msform}/\prm{mslang}) rather than a literal string in the test. If the \prm{field} is undefined, it executes \prm{false}.
+
+\cmditem{fieldhascomputableequivalent}[msform][mslang]{field}{true}{false}
+
+Similar to \cmd{hascomputableequivalent}, but uses the value of a \prm{field} rather than a literal string in the test. If the \prm{field} is undefined, it executes \prm{false}.
+
+\cmditem{iffieldiscomputable}[msform][mslang]{field}{true}{false}
+
+Similar to \cmd{ifiscomputable}, but uses the value of a \prm{field} rather than a literal string in the test. If the \prm{field} is undefined, it executes \prm{false}.
+
+\cmditem{iffieldnum}[msform][mslang]{field}{true}{false}
+
+Similar to \cmd{ifnumeral}, but uses the value of a \prm{field} (optionally a multiscript field of \prm{msform}/\prm{mslang}) rather than a literal string in the test. If the \prm{field} is undefined, it executes \prm{false}.
+
+\cmditem{iffieldnums}[msform][mslang]{field}{true}{false}
+
+Similar to \cmd{ifnumerals}, but uses the value of a \prm{field} (optionally a multiscript field of \prm{msform}/\prm{mslang}) rather than a literal string in the test. If the \prm{field} is undefined, it executes \prm{false}.
+
+\cmditem{iffieldpages}[msform][mslang]{field}{true}{false}
+
+Similar to \cmd{ifpages}, but uses the value of a \prm{field} (optionally a multiscript field of \prm{msform}/\prm{mslang}) rather than a literal string in the test. If the \prm{field} is undefined, it executes \prm{false}.
+
+\cmditem{ifbibstring}{string}{true}{false}
+
+Expands to \prm{true} if the \prm{string} is a known localisation key, and to \prm{false} otherwise. The localisation keys defined by default are listed in \secref{aut:lng:key}. New ones may be defined with \cmd{NewBibliographyString}.
+
+\cmditem{ifbibxstring}{string}{true}{false}
+
+Similar to \cmd{ifbibstring}, but the \prm{string} is expanded.
+
+\cmditem{iffieldbibstring}[msform][mslang]{field}{true}{false}
+
+Similar to \cmd{ifbibstring}, but uses the value of a \prm{field} (optionally a multiscript field of \prm{msform}/\prm{mslang}) rather than a literal string in the test. If the \prm{field} is undefined, it expands to \prm{false}.
+
+\cmditem{iffieldplusstringbibstring}[msform][mslang]{field}{string}{true}{false}
+
+Similar to \cmd{iffieldbibstring}, but appends \prm{string} to the value of \prm{field} (optionally a multiscript field of \prm{msform}/\prm{mslang}) and checks if the resulting string is a known localisation key. Expands to \prm{false} if \prm{field} is undefined.
+
+\cmditem{ifdriver}{entrytype}{true}{false}
+
+Expands to \prm{true} if a driver for the \prm{entrytype} is available, and to \prm{false} otherwise.
+
+\cmditem{ifcapital}{true}{false}
+
+Executes \prm{true} if \biblatex's punctuation tracker would capitalize a localisation string at the current location, and \prm{false} otherwise. This command is robust. It may be useful for conditional capitalization of certain parts of a name in a formatting directive.
+
+\cmditem{ifcitation}{true}{false}
+
+Expands to \prm{true} when located in a citation, and to \prm{false} otherwise. Note that this command is responsive to the outermost context in which it is used. For example, if a citation command defined with \cmd{DeclareCiteCommand} executes a driver defined with \cmd{DeclareBibliographyDriver}, any \cmd{ifcitation} tests in the driver code will yield \prm{true}. See \secref{aut:cav:mif} for a practical example.
+
+\cmditem{ifvolcite}{true}{false}
+
+Expands to \prm{true} when located in \cmd{volcite} or a related citation command (\secref{use:cit:spc}), and to \prm{false} otherwise.
+
+\cmditem{ifbibliography}{true}{false}
+
+Expands to \prm{true} when located in a bibliography, and to \prm{false} otherwise. Note that this command is responsive to the outermost context in which it is used. For example, if a driver defined with \cmd{DeclareBibliographyDriver} executes a citation command defined with \cmd{DeclareCiteCommand}, any \cmd{ifbibliography} tests in the citation code will yield \prm{true}. See \secref{aut:cav:mif} for a practical example.
+
+\cmditem{ifnatbibmode}{true}{false}
+
+Expands to \prm{true} or \prm{false} depending on the \opt{natbib} option from \secref{use:opt:ldt}.
+
+\cmditem{ifciteindex}{true}{false}
+
+Expands to \prm{true} or \prm{false} depending on the \opt{indexing} option from \secref{use:opt:pre:gen}.
+
+\cmditem{ifbibindex}{true}{false}
+
+Expands to \prm{true} or \prm{false} depending on the \opt{indexing} option from \secref{use:opt:pre:gen}.
+
+\cmditem{iffootnote}{true}{false}
+
+Expands to \prm{true} when located in a footnote, and to \prm{false} otherwise. Note that footnotes in \env{minipage} environments are considered to be part of the body text. This command will only expand to \prm{true} in footnotes a the bottom of the page and in endnotes as provided by the \sty{endnotes} package.
+
+\cntitem{citecounter}
+
+This counter indicates how many times the entry currently being processed is cited in the current reference section. Note that this feature needs to be enabled explicitly with the package option \opt{citecounter}. If the option is set to \texttt{context}, citations in the body text and in footnotes are counted separately. In this case, \cnt{citecounter} will hold the value of the context it is used in.
+
+\cntitem{maxcitecounter}
+
+This counter holds the maximum value of \cnt{citecounter} across all entries in the current reference section. Like \cnt{citecounter} it is only available if the \opt{citecounter} option is enabled and tracks footnotes and text separately if the option is set to \texttt{context}.
+
+\cntitem{uniquename}
+This counter refers to the \bibfield{labelname} list. It is set on a per-name basis. Its value is \texttt{0} if the base parts of the name (by default just the <family> part of the name) are unique, \texttt{1} if adding the other non-base parts of the name (as specified in the uniquename template defined by \cmd{DeclareUniquenameTemplate}) as initials will make it unique, and \texttt{2} if adding the full form of the non-base parts of the name are required to disambiguate the name. This information is required by author-year and author-title citation schemes which add additional parts of the name when citing different authors with the same family name. For example, (given the default \cmd{DeclareUniquenameTemplate} definition) if there is one <John Doe> and one <Edward Doe> in the list of references, this counter will be set to \texttt{1}. If there is one <John Doe> and one <Jane Doe>, the value of the counter will be \texttt{2}. If the option is set to \texttt{init}\slash \texttt{allinit}\slash \texttt{mininit}, the counter will be limited to \texttt{1}. This is useful for citations styles which use initials to disambiguate names but never print the full name in citations. If adding the initials is not sufficient to disambiguate the name, \cnt{uniquename} will also be set to \texttt{0} for that name. This feature needs to be enabled explicitly with the package option \opt{uniquename}. Note that the \cnt{uniquename} counter is local to \cmd{printnames} and that it is only set for the \bibfield{labelname} list and for the name list that \bibfield{labelname} has been derived from (typically \bibfield{author} or \bibfield{editor}). Its value is zero in any other context, i.e., it must be evaluated in the name formatting directives handling name lists. See \secref{aut:cav:amb} for further details and practical examples. This counter can be overridden on a per-namepart basis by consulting the \cmd{namepart<namepart>un} macros during name formatting, see \secref{aut:bbx:drv}.
+
+\cntitem{uniquelist}
+This counter refers to the \bibfield{labelname} list. It is set on a per-field basis. Its value indicates the number of names required to disambiguate the name list if automatic \cnt{maxnames}\slash \cnt{minnames} truncation would lead to ambiguous citations. For example, if there is one work by <Doe\slash Smith\slash Johnson> and another one by <Doe\slash Edwards\slash Williams>, setting \kvopt{maxnames}{1} would lead to <Doe et al.> in both cases. In this case, \cnt{uniquelist} would be set to \texttt{2} on the \bibfield{labelname} lists of both entries because at least the first two names are required to disambiguate them. Note that the \cnt{uniquelist} counter is local to \cmd{printnames} and that it is only set for the \bibfield{labelname} list and to the name list \bibfield{labelname} has been derived from (typically \bibfield{author} or \bibfield{editor}). Its value is zero in any other context. If available, the \cnt{uniquelist} value will be used automatically by \cmd{printnames} when processing the name list, \ie it will automatically override \cnt{maxnames}\slash \cnt{minnames}. This feature needs to be enabled explicitly with the package option \opt{uniquelist}. See \secref{aut:cav:amb} for further details and practical examples.
+
+\cmditem{uniquepart}{namepart}
+
+A field containing one of the valid values for the <nameparts> constant defined with \cmd{DeclareDatamodelConstant}. This is defined on a per-name basis when the package \opt{uniquename} option is not false. It contains the name of the namepart component declared by \cmd{DeclareUniquenameTemplate} which determined the setting of the \opt{uniquename} counter.
+
+\cmditem{mslang}{bcp47tag}
+
+A field set on a per-name basis containing the BCP47 language tag for the name.
+
+\cntitem{parenlevel}
+
+The current nesting level of parentheses and\slash or brackets. This information is only available if the \opt{parentracker} from \secref{use:opt:pre:int} is enabled.
+
+\end{ltxsyntax}
+
+\subsubsection{Tests with \cmd{ifboolexpr} and \cmd{ifthenelse}}
+\label{aut:aux:ife}
+
+The tests introduced in \secref{aut:aux:tst} may also be used with the \cmd{ifboolexpr} command provided by the \sty{etoolbox} package and the \cmd{ifthenelse} command provided by the \sty{ifthen} package. The syntax of the tests is slightly different in this case: the \prm{true} and \prm{false} arguments are omitted from the test itself and passed to the \cmd{ifboolexpr} or \cmd{ifthenelse} command instead. Note that the use of these commands implies some processing overhead. If you do not need any boolean operators, it is more efficient to use the stand"=alone tests from \secref{aut:aux:tst}.
+
+\begin{ltxsyntax}
+
+\cmditem{ifboolexpr}{expression}{true}{false}
+
+\sty{etoolbox} command which allows for complex tests with boolean operators and grouping:
+
+\begin{lstlisting}[style=ifthen]{}
+\ifboolexpr{ (
+ test {\ifnameundef{editor}}
+ and
+ not test {\iflistundef{location}}
+ )
+ or test {\iffieldundef{year}}
+ }
+ {...}
+ {...}
+\end{lstlisting}
+
+\cmditem{ifthenelse}{tests}{true}{false}
+
+\sty{ifthen} command which allows for complex tests with boolean operators and grouping:
+
+\begin{lstlisting}[style=ifthen]{}
+\ifthenelse{ \(
+ \ifnameundef{editor}
+ \and
+ \not \iflistundef{location}
+ \)
+ \or \iffieldundef{year}
+ }
+ {...}
+ {...}
+\end{lstlisting}
+%
+The additional tests provided by \biblatex are only available when \cmd{ifboolexpr} or \cmd{ifthenelse} are used in citation commands and in the bibliography.
+
+\end{ltxsyntax}
+
+\subsubsection{Miscellaneous Commands}
+\label{aut:aux:msc}
+
+The section introduces miscellaneous commands and little helpers for use in bibliography and citation styles.
+
+\begin{ltxsyntax}
+
+\cmditem{newbibmacro}{name}[arguments][optional]{definition}
+\cmditem*{newbibmacro*}{name}[arguments][optional]{definition}
+
+Defines a macro to be executed via \cmd{usebibmacro} later. The syntax of this command is very similar to \cmd{newcommand} except that \prm{name} may contain characters such as numbers and punctuation marks and does not start with a backslash. The optional argument \prm{arguments} is an integer specifying the number of arguments taken by the macro. If \prm{optional} is given, it specifies a default value for the first argument of the macro, which automatically becomes an optional argument. In contrast to \cmd{newcommand}, \cmd{newbibmacro} issues a warning message if the macro is already defined, and automatically falls back to \cmd{renewbibmacro}. As with \cmd{newcommand}, the regular variant of this command uses the \cmd{long} prefix in the definition while the starred one does not. If a macro has been declared to be long, it may take arguments containing \cmd{par} tokens. \cmd{newbibmacro} and \cmd{renewbibmacro} are provided for convenience. Style authors are free to use \cmd{newcommand} or \cmd{def} instead. However, note that most shared definitions found in \path{biblatex.def} are defined with \cmd{newbibmacro}, hence they must be used and modified accordingly.
+
+\cmditem{renewbibmacro}{name}[arguments][optional]{definition}
+\cmditem*{renewbibmacro*}{name}[arguments][optional]{definition}
+
+Similar to \cmd{newbibmacro} but redefines \prm{name}. In contrast to \cmd{renewcommand}, \cmd{renewbibmacro} issues a warning message if the macro is undefined, and automatically falls back to \cmd{newbibmacro}.
+
+\cmditem{providebibmacro}{name}[arguments][optional]{definition}
+\cmditem*{providebibmacro*}{name}[arguments][optional]{definition}
+
+Similar to \cmd{newbibmacro} but only defines \prm{name} if it is undefined. This command is similar in concept to \cmd{providecommand}.
+
+\cmditem{letbibmacro}{alias}{name}
+\cmditem*{letbibmacro*}{alias}{name}
+
+This command defines the macro \prm{alias} to be an alias of the macro \prm{name}. The definition is perfomed by \cmd{csletcs}.
+An error is issued if \prm{name} is undefined.
+The regular variant of this command sanitizes \prm{name} while the starred variant does not.
+
+\cmditem{usebibmacro}{name}
+\cmditem*{usebibmacro*}{name}
+
+This command executes the macro \prm{name}, as defined with \cmd{newbibmacro}. If the macro takes any arguments, they are simply appended after \prm{name}. The regular variant of this command sanitizes
+\prm{name} while the starred variant does not.
+
+\cmditem{savecommand}{command}
+\cmditem{restorecommand}{command}
+
+These commands save and restore any \prm{command}, which must be a command name starting with a backslash. Both commands work within a local scope. They are mainly provided for use in localisation files.
+
+\cmditem{savebibmacro}{name}
+\cmditem{restorebibmacro}{name}
+
+These commands save and restore the macro \prm{name}, where \prm{name} is the identifier of a macro defined with \cmd{newbibmacro}. Both commands work within a local scope. They are mainly provided for use in localisation files.
+
+\cmditem{savefieldformat}[entry type]{format}
+\cmditem{restorefieldformat}[entry type]{format}
+
+These commands save and restore the formatting directive \prm{format}, as defined with \cmd{DeclareFieldFormat}. Both commands work within a local scope. They are mainly provided for use in localisation files.
+
+\cmditem{savelistformat}[entry type]{format}
+\cmditem{restorelistformat}[entry type]{format}
+
+These commands save and restore the formatting directive \prm{format}, as defined with \cmd{DeclareListFormat}. Both commands work within a local scope. They are mainly provided for use in localisation files.
+
+\cmditem{savenameformat}[entry type]{format}
+\cmditem{restorenameformat}[entry type]{format}
+
+These commands save and restore the formatting directive \prm{format}, as defined with \cmd{DeclareNameFormat}. Both commands work within a local scope. They are mainly provided for use in localisation files.
+
+\cmditem{savelistwrapperformat}[entry type]{format}
+\cmditem{restorelistwrapperformat}[entry type]{format}
+
+These commands save and restore the formatting directive \prm{format}, as defined with \cmd{DeclareListWrapperFormat}. Both commands work within a local scope. They are mainly provided for use in localisation files.
+
+\cmditem{savenamewrapperformat}[entry type]{format}
+\cmditem{restorenamewrapperformat}[entry type]{format}
+
+These commands save and restore the formatting directive \prm{format}, as defined with \cmd{DeclareNameWrapperFormat}. Both commands work within a local scope. They are mainly provided for use in localisation files.
+
+\cmditem{ifbibmacroundef}{name}{true}{false}
+
+Expands to \prm{true} if the bibliography macro \prm{name} is undefined, and to \prm{false} otherwise.
+
+This bibliography macro can be used in the following idiom to make a bibliography macro more type specific.
+%
+\begin{ltxexample}
+\letbibmacro{cite:*}{cite}
+\newbibmacro{cite:patent}{%
+ \printtext{\color{red}%
+ Some citation format specific to patents}}
+
+\renewbibmacro*{cite}{%
+ \ifbibmacroundef{cite:\thefield{entrytype}}
+ {\usebibmacro{cite:*}}
+ {\usebibmacro*{cite:\thefield{entrytype}}}%
+}
+\end{ltxexample}
+
+\cmditem{iffieldformatundef}[entry type]{name}{true}{false}
+\cmditem{iflistformatundef}[entry type]{name}{true}{false}
+\cmditem{ifnameformatundef}[entry type]{name}{true}{false}
+\cmditem{iflistwrapperformatundef}[entry type]{name}{true}{false}
+\cmditem{ifnamewrapperformatundef}[entry type]{name}{true}{false}
+
+Expands to \prm{true} if the formatting directive \prm{format} is undefined, and to \prm{false}
+otherwise.
+
+\cmditem{usedriver}{code}{entrytype}
+
+Executes the bibliography driver for an \prm{entrytype}. Calling this command in the \prm{loopcode} of a citation command defined with \cmd{DeclareCiteCommand} is a simple way to print full citations similar to a bibliography entry. Commands such as \cmd{newblock}, which are not applicable in a citation, are disabled automatically by default. The global initialization can be changed with \cmd{AtUsedriver}, see \secref{aut:fmt:hok}. Additional local initialization commands may be passed as the \prm{code} argument. This argument is executed inside the group in which \cmd{usedriver} runs the respective driver. Note that it is mandatory in terms of the syntax but may be left empty. Also note that this command will automatically switch languages if the \opt{autolang} package option is enabled.
+
+\cmditem{bibhypertarget}{name}{text}
+
+A wrapper for \sty{hyperref}'s \cmd{hypertarget} command. The \prm{name} is the name of the anchor, the \prm{text} is arbitrary printable text or code which serves as an anchor. If there are any \env{refsection} environments in the document, the \prm{name} is local to the current environment. If the \opt{hyperref} package option is disabled or the \sty{hyperref} package has not been loaded, this command will simply pass on its \prm{text} argument. See also the formatting directive \texttt{bibhypertarget} in \secref{aut:fmt:ich}.
+
+\cmditem{bibhyperlink}{name}{text}
+
+A wrapper for \sty{hyperref}'s \cmd{hyperlink} command. The \prm{name} is the name of an anchor defined with \cmd{bibhypertarget}, the \prm{text} is arbitrary printable text or code to be transformed into a link. If there are any \env{refsection} environments in the document, the \prm{name} is local to the current environment. If the \opt{hyperref} package option is disabled or the \sty{hyperref} package has not been loaded, this command will simply pass on its \prm{text} argument. See also the formatting directive \texttt{bibhyperlink} in \secref{aut:fmt:ich}.
+
+\cmditem{bibhyperref}[entrykey]{text}
+
+Transforms \prm{text} into an internal link pointing to \prm{entrykey} in the bibliography. If \prm{entrykey} is omitted, this command uses the key of the entry currently being processed. This command is employed to transform citations into clickable links pointing to the corresponding entry in the bibliography. The link target is marked automatically by \biblatex. If there are multiple bibliographies in a document, the target will be the first occurence of \prm{entrykey} in one of the bibliographies. If there are \env{refsection} environments, the links are local to the environment. See also the formatting directive \texttt{bibhyperref} in \secref{aut:fmt:ich}.
+
+\cmditem{ifhyperref}{true}{false}
+
+Expands to \prm{true} if the \opt{hyperref} package option is enabled (which implies that the \sty{hyperref} package has been loaded), and to \prm{false} otherwise.
+
+\cmditem{docsvfield}[msform][mslang]{field}
+
+Similar to the \cmd{docsvlist} command from the \sty{etoolbox} package, except that it takes a field name as its argument (optionally a multiscript field of \prm{msform}/\prm{mslang}). The value of this field is parsed as a comma"=separated list. If the \prm{field} is undefined, this command expands to an empty string.
+
+\cmditem{forcsvfield}{handler}[msform][mslang]{field}
+
+Similar to the \cmd{forcsvlist} command from the \sty{etoolbox} package, except that it takes a field name as its argument (optionally a multiscript field of \prm{msform}/\prm{mslang}). The value of this field is parsed as a comma"=separated list. If the \prm{field} is undefined, this command expands to an empty string.
+
+\cmditem{MakeCapital}{text}
+
+Similar to \cmd{MakeUppercase} but only converts the first printable character in \prm{text} to uppercase. Note that the restrictions that apply to \cmd{MakeUppercase} also apply to this command. Namely, all commands in \prm{text} must either be robust or prefixed with \cmd{protect} since the \prm{text} is expanded during capitalization. Apart from \acr{US-ASCII} characters and the standard accent commands, this command also handles the active characters of the \sty{inputenc} package as well as the shorthands of the \sty{babel} package. If the \prm{text} starts with a control sequence, nothing is capitalized. This command is robust.
+
+\cmditem{MakeSentenceCase}{text}
+\cmditem*{MakeSentenceCase*}{text}
+
+Converts its \prm{text} argument to sentence case, \ie the first word is capitalized and the remainder of the string is converted to lowercase. This command is robust. The starred variant differs from the regular version in that it considers the language of the entry, as specified in the \bibfield{langid} field. If the \bibfield{langid} field is defined and holds a language declared with \cmd{DeclareCaseLangs} (see below)\footnote{By default, converting to sentence case is enabled for the following language identifiers: \texttt{american}, \texttt{british}, \texttt{canadian}, \texttt{english}, \texttt{australian}, \texttt{newzealand} as well as the aliases \texttt{USenglish} and \texttt{UKenglish}. Use \cmd{DeclareCaseLangs} to extend or change this list.}, then the sentence case conversion is performed. If the \bibfield{langid} field is undefined, then the language list declared with \cmd{DeclareCaseLangs} is checked for the presence of the main document language derived from the \opt{language} option. If found, sentence case conversion is performed, if not, the \prm{text} is not altered in any way. It is recommended to use \cmd{MakeSentenceCase*} rather than the regular variant in formatting directives.
+
+Depending on the option \opt{casechanger} \cmd{MakeCaseChange} and \cmd{MakeCaseChange*} are either implemented using the \sty{expl3} module \sty{l3text} or original \LaTeXe code.
+
+Both variants support the traditional \bibtex convention for \file{bib} files that anything wrapped in a pair of curly braces is not modified when changing the case. For example:
+
+\begin{ltxexample}
+\MakeSentenceCase{an Introduction to LaTeX}
+\MakeSentenceCase{an Introduction to {LaTeX}}
+\end{ltxexample}
+%
+would yield:
+
+\begin{lstlisting}[style=plain]{}
+An introduction to latex
+An introduction to LaTeX
+\end{lstlisting}
+%
+In \file{bib} files designed with traditional \bibtex in mind, it has been fairly common to only wrap single letters in braces to prevent case"=changing:
+
+\begin{lstlisting}[style=bibtex]{}
+title = {An Introduction to {L}a{T}e{X}}
+\end{lstlisting}
+%
+The problem with this convention is that the braces will suppress the kerning on both sides of the enclosed letter. It is preferable to wrap the entire word in braces as shown in the first example.
+Macros in titles must also be protected with braces
+\begin{lstlisting}[style=bibtex]{}
+title = {The {\TeX book}},
+\end{lstlisting}
+
+%
+The behaviour of \cmd{MakeSentenceCase} differs slightly between the \opt{latex2e} and \opt{expl3} implementation. Generally speaking, the \opt{expl3} code is closer to the \bibtex behaviour of \texttt{change.case\$}. It is also better equipped to deal with non-\acr{US-ASCII} input and macros than the \opt{latex2e} implementation. \cmd{MakeSentenceCase} behaves as follows.
+\begin{itemize}\setlength{\labelsep}{1em}
+ \item The first letter of its argument is capitalised with \cmd{MakeUppercase}. This is different from \bibtex's \texttt{change.case\$}, which does not touch the first letter of its argument.
+
+ Note that with the \opt{latex2e} code a pair of braces that starts with a control sequence will be treated as a single character for capitalisation purposes. This means that the entire argument of a command protected with a single pair of braces is capitalised.
+ \item With the \opt{latex2e} code expandable commands are expanded before the case change, which means that the case change applies to the replacement text. Unexpandable commands are not touched.
+
+ \bibtex does not interpret macros and therefore passes commands through unchanged (this does not necessarily apply to the \emph{arguments} of those commands). The \opt{expl3} implementation also does not expand commands and only applies case change to the arguments.
+ \item Text wrapped in one or more pairs of braces is protected from case change \emph{unless} it starts with a control sequence. This is the same behaviour as with \bibtex. Note that the braces could either be explicit groups or argument delimiters.
+ \item Text in a single pair of braces that starts with a control sequence is not protected and will be subject to case changes. Note that this need not apply to braces that are argument delimiters, in fact the \opt{latex2e} implementation of \cmd{MakeSentenceCase} may in some cases produce an error or otherwise undesirable output if the argument of a command starts with a control sequence. \bibtex's case change function does not differentiate between argument delimiters and brace groups and always subjects text at brace level~1 to case change if it starts with a control sequence.
+\end{itemize}
+
+For most intents and purposes the following rules should give a sensible result.
+\begin{itemize}\setlength{\labelsep}{1em}
+ \item Protect all words whose case should not be changed by wrapping them in one pair of braces.
+ \item If words are already in the braced argument of a command such as \cmd{mkbibquote} or \cmd{emph}, they are automatically protected.
+ \begin{itemize}
+ \item To \emph{undo} this protection wrap the command in braces again.
+ \item It is not possible to selectively re-apply protection if it has been undone with an additional pair of braces. If a more fine-grained control is needed, work-arounds like splitting the argument could be tried.
+ \end{itemize}
+ \item While it is possible to protect words from case change at the beginning of a field with a pair of braces, it is not possible to undo the case protection that a command automatically implies by wrapping it in braces in that position. In that case work-arounds are necessary.
+\end{itemize}
+%
+\begin{lstlisting}[style=bibtex]{}
+title = {The Story of {HMS} \emph{Erebus}
+ in {\emph{Really}} Strong Wind},
+\end{lstlisting}
+would be converted to sentence case by \cmd{MakeSentenceCase} as
+\begin{quote}
+The story of HMS \emph{Erebus} in {\emph{really}} strong wind
+\end{quote}
+
+If the \sty{expl3} implementation of the case changing functions is selected, the \bibtex case protection behaviour can be exchanged for a slightly simpler version. When \opt{bibtexcaseprotection} set to \opt{false}, braces no longer automatically imply case protection. Instead words can be protected from case change with \cmd{NoCaseChange}. The examples from above would then read
+\begin{lstlisting}[style=bibtex]{}
+title = {An Introduction to \NoCaseChange{LaTeX}},
+title = {The Story of \NoCaseChange{HMS \emph{Erebus}}
+ in \emph{Really} Strong Wind},
+\end{lstlisting}
+Generally, this option should allow for a saner case protection input, because curly braces are no longer overloaded with different levels of meaning, but it is a big departure from the standard case protection input that has been with the \latex world for a long time.
+
+Due to its complex implementation \cmd{MakeSentenceCase} can not accept arbitrary input, it only safely operates on raw text or field data. In the standard styles the \bibfield{title} and other \bibfield{title}-like field formats do not work together with \cmd{MakeSentenceCase} because of their argument structure, so the standard styles offer a dedicated \texttt{titlecase} field format to apply this command. To enable sentence casing in standard styles for languages that support it you would use:
+\begin{ltxexample}
+\DeclareFieldFormat{titlecase}{<<\MakeSentenceCase*{#1}>>}
+\end{ltxexample}
+%
+Sentence casing can then be disabled by resetting that field format to
+\begin{ltxexample}
+\DeclareFieldFormat{titlecase}{<<#1>>}
+\end{ltxexample}
+Custom styles may follow a different approach, but style authors are encouraged to apply the same general ideas to their styles.
+
+\cmditem{mkpageprefix}[pagination][postpro]{text}
+
+This command is intended for use in field formatting directives which format the page numbers in the \prm{postnote} argument of citation commands and the \bibfield{pages} field of bibliography entries. It will parse its \prm{text} argument and prefix it with <p.> or <pp.> by default. The optional \prm{pagination} argument holds the name of a field indicating the pagination type. This may be either \bibfield{pagination} or \bibfield{bookpagination}, with \bibfield{pagination} being the default. The spacing between the prefix and the \prm{text} may be modified by redefining \cmd{ppspace}. The default is an unbreakable interword space. See \secref{bib:use:pag, use:cav:pag} for further details. See also \cmd{DeclareNumChars}, \cmd{DeclareRangeChars}, \cmd{DeclareRangeCommands}, and \cmd{NumCheckSetup}. The optional \prm{postpro} argument specifies a macro to be used for post-processing the \prm{text}. If only one optional argument is given, it is taken as \prm{pagination}. Here are two typical examples:
+
+\begin{ltxexample}
+\DeclareFieldFormat{postnote}{<<\mkpageprefix[pagination][\mknormrange]{#1}>>}
+\DeclareFieldFormat{pages}{<<\mkpageprefix[bookpagination]{#1}>>}
+\end{ltxexample}
+%
+
+\cmditem{mkpagetotal}[pagination][postpro]{text}
+
+This command is similar to \cmd{mkpageprefix} except that it is intended for the \bibfield{pagetotal} field of bibliography entries, \ie it will print «123 pages» rather than «page 123». The optional \prm{pagination} argument defaults to \bibfield{bookpagination}. The spacing inserted between the pagination suffix and the \prm{text} may be modified by redefining the macro \cmd{ppspace}. The optional \prm{postpro} argument specifies a macro to be used for post-processing the \prm{text}. If only one optional argument is given, it is taken as \prm{pagination}. Here is a typical example:
+
+\begin{ltxexample}
+\DeclareFieldFormat{pagetotal}{<<\mkpagetotal[bookpagination]{#1}>>}
+\end{ltxexample}
+%
+The optional argument \bibfield{bookpagination} is omissible in this case.
+The pagination strings are taken from \texttt{$<$pagination$>$total} and \texttt{$<$pagination$>$totals}.
+
+\begin{table}
+\caption{\cmd{mkcomprange} setup}
+\label{aut:aux:tab1}
+\tablesetup\lnstyle
+\begin{tabularx}{\textwidth}{@{}>{\ttfamily}X@{}p{0.25\textwidth}@{}p{0.25\textwidth}@{}p{0.25\textwidth}@{}}
+\toprule
+\multicolumn{1}{@{}H}{Input} &
+\multicolumn{3}{@{}H}{Output} \\
+\cmidrule(r){1-1}\cmidrule{2-4}
+& \multicolumn{1}{@{}H}{\ttfamily mincomprange=10}
+& \multicolumn{1}{@{}H}{\ttfamily mincomprange=100}
+& \multicolumn{1}{@{}H}{\ttfamily mincomprange=1000} \\
+\cmidrule(r){2-2}\cmidrule(r){3-3}\cmidrule{4-4}
+11--15 & 11--5 & 11--15 & 11--15 \\
+111--115 & 111--5 & 111--5 & 111--115 \\
+1111--1115 & 1111--5 & 1111--5 & 1111--5 \\
+\cmidrule{2-4}
+& \multicolumn{1}{@{}H}{\ttfamily maxcomprange=1000}
+& \multicolumn{1}{@{}H}{\ttfamily maxcomprange=100}
+& \multicolumn{1}{@{}H}{\ttfamily maxcomprange=10} \\
+\cmidrule(r){2-2}\cmidrule(r){3-3}\cmidrule{4-4}
+1111--1115 & 1111--5 & 1111--5 & 1111--5 \\
+1111--1155 & 1111--55 & 1111--55 & 1111--1155 \\
+1111--1555 & 1111--555 & 1111--1555 & 1111--1555 \\
+\cmidrule{2-4}
+& \multicolumn{1}{@{}H}{\ttfamily mincompwidth=1}
+& \multicolumn{1}{@{}H}{\ttfamily mincompwidth=10}
+& \multicolumn{1}{@{}H}{\ttfamily mincompwidth=100} \\
+\cmidrule(r){2-2}\cmidrule(r){3-3}\cmidrule{4-4}
+1111--1115 & 1111--5 & 1111--15 & 1111--115 \\
+1111--1155 & 1111--55 & 1111--55 & 1111--155 \\
+1111--1555 & 1111--555 & 1111--555 & 1111--555 \\
+\bottomrule
+\end{tabularx}
+\end{table}
+
+\cmditem{mkcomprange}[postpro][itempostpro]{text}
+\cmditem*{mkcomprange*}[postpro][itempostpro]{text}
+
+This command, which is intended for use in field formatting directives, will parse its \prm{text} argument for page ranges and compress them. For example, «125--129» may be formatted as «125--9». You may configure the behavior of \cmd{mkcomprange} by adjusting the \latex counters \cnt{mincomprange}, \cnt{maxcomprange}, and \cnt{mincompwidth}, as illustrated in \tabref{aut:aux:tab1}. The default settings are \texttt{10}, \texttt{100000}, and \texttt{1}, respectively. This means that the command tries to compress as much as possible by default. Use \cmd{setcounter} to adjust the parameters. The scanner recognises \cmd{bibrangedash} and hyphens as range dashes. It will normalize the dash by replacing any number of consecutive hyphens with \cmd{bibrangedash}. Lists of ranges delimited with \cmd{bibrangessep} are also supported. The scanner will normalise any comma or semicolons surrounded by optional space by replacing them with \cmd{bibrangessep}. If you want to hide a character from the list/range scanner for some reason, wrap the character or the entire string in curly braces. The optional \prm{postpro} argument specifies a macro to be used for post-processing the \prm{text}. This is important if you want to combine \cmd{mkcomprange} with other formatting macros which also need to parse their \prm{text} argument, such as \cmd{mkpageprefix}. Simply nesting these commands will not work as expected. Use the \prm{postpro} argument to set up the processing chain as follows:
+
+\begin{ltxexample}
+\DeclareFieldFormat{postnote}{\mkcomprange[<<{>>\mkpageprefix[pagination]<<}>>]{#1}}
+\end{ltxexample}
+%
+Note that \cmd{mkcomprange} is executed first, using \cmd{mkpageprefix} as post-processor. Also note that the \prm{postpro} argument is wrapped in an additional pair of braces. This is only required in this particular case to prevent \latex's optional argument scanner from getting confused by the nested brackets. The starred version of this command differs from the regular one in the way the \prm{postpro} argument is applied to a list of values. For example:
+
+\begin{ltxexample}
+\mkcomprange[\mkpageprefix]{5, 123-129, 423-439}
+\mkcomprange*[\mkpageprefix]{5, 123-129, 423-439}
+\end{ltxexample}
+%
+will output:
+
+\begin{ltxexample}
+pp. 5, 123-9, 423-39
+p. 5, pp. 123-9, pp. 423-39
+\end{ltxexample}
+%
+The second optional argument \prm{itempostpro} is used to post-process each individual number item in the formatted list. It can be used to convert numbers from cardinals to ordinals. If only one optional argument is present, it is treated as \prm{postpro}.
+
+\cmditem{mknormrange}[postpro][itempostpro]{text}
+\cmditem*{mknormrange*}[postpro][itempostpro]{text}
+
+This command, which is intended for use in field formatting directives, will parse its \prm{text} argument for page ranges and will normalise them. The command is similar to \cmd{mkcomprange} except that the page ranges will not be compressed. The scanner recognises \cmd{bibrangedash} and hyphens as range dashes. It will normalize the dash by replacing any number of consecutive hyphens with \cmd{bibrangedash}. Lists of ranges delimited with \cmd{bibrangessep} are also supported. The scanner will normalise any comma or semicolons surrounded by optional space by replacing them with \cmd{bibrangessep}. If you want to hide a character from the list/range scanner for some reason, wrap the character or the entire string in curly braces. The optional \prm{postpro} argument specifies a macro to be used for post-processing the \prm{text}. See \cmd{mkcomprange} on how to use this argument. The starred version of this command differs from the regular one in the way the \prm{postpro} argument is applied to a list of values. The second optional argument \prm{itempostpro} is used to post-process each individual number item in the formatted list. It can be used to convert numbers from cardinals to ordinals. If only one optional argument is present, it is treated as \prm{postpro}.
+
+\cmditem{mkfirstpage}[postpro][itempostpro]{text}
+\cmditem*{mkfirstpage*}[postpro][itempostpro]{text}
+
+This command, which is intended for use in field formatting directives, will parse its \prm{text} argument for page ranges and print the start page of the range only. The scanner recognizes \cmd{bibrangedash} and hyphens as range dashes. Lists of ranges delimited with \cmd{bibrangessep} are also supported. If you want to hide a character from the list/range scanner for some reason, wrap the character or the entire string in curly braces. The optional \prm{postpro} argument specifies a macro to be used for post-processing the \prm{text}. See \cmd{mkcomprange} on how to use this argument. The starred version of this command differs from the regular one in the way the \prm{postpro} argument is applied to a list of values. The second optional argument \prm{itempostpro} is used to post-process each individual number item in the formatted list. It can be used to convert numbers from cardinals to ordinals. If only one optional argument is present, it is treated as \prm{postpro}. For example:
+
+\begin{ltxexample}
+\mkfirstpage[\mkpageprefix]{5, 123-129, 423-439}
+\mkfirstpage*[\mkpageprefix]{5, 123-129, 423-439}
+\end{ltxexample}
+%
+will output:
+
+\begin{ltxexample}
+pp. 5, 123, 423
+p. 5, p. 123, p. 423
+\end{ltxexample}
+
+\cmditem{rangelen}{rangefield}
+
+Takes the name of a bibfield declared as a range field in the data model and returns the length of the range. This is calculated by \biber and can handle many special cases. It will return $-1$ for open ended ranges. Specifically \cmd{rangelen} can:
+
+\begin{itemize}
+\item Calculate the total of multiple ranges in the same field such as <1-10, 20-30>
+\item Handle implicit ranges such as <22-4> and <130-33>
+\item Handle roman numeral ranges in upper and lower case and consisting of both \acr{US-ASCII} and Unicode roman numeral representations.
+\end{itemize}
+%
+Here are some examples:
+
+\begin{tabular}{ll}
+pages = <10> & |\rangelen{pages}| returns '1'\\
+pages = <10-15> & |\rangelen{pages}| returns '6'\\
+pages = <10-15,47-53> & |\rangelen{pages}| returns '13'\\
+pages = <10-> & |\rangelen{pages}| returns '-1'\\
+pages = <-10> & |\rangelen{pages}| returns '-1'\\
+pages = <48-9> & |\rangelen{pages}| returns '2'\\
+pages = <172-77> & |\rangelen{pages}| returns '6'\\
+pages = <i-vi> & |\rangelen{pages}| returns '6'\\
+pages = <X-XX> & |\rangelen{pages}| returns '11'\\
+pages = <ⅥⅠ-ⅻ> & |\rangelen{pages}| returns '6'\\
+pages = <ⅥⅠ-ⅻ, 145-7, 135-39> & |\rangelen{pages}| returns '14'
+\end{tabular}
+
+The \cmd{rangelen} command can be used in tests:
+
+\begin{ltxexample}
+\ifnumcomp{\rangelen{pages}}{=}{1}{add 'f'}{do nothing}
+\end{ltxexample}
+
+\cmditem{DeclareNumChars}{characters}
+\cmditem*{DeclareNumChars*}{characters}
+
+This command configures the \cmd{ifnumeral}, \cmd{ifnumerals}, and \cmd{ifpages} tests from \secref{aut:aux:tst}. The setup will also affect \cmd{iffieldnum}, \cmd{iffieldnums}, \cmd{iffieldpages} as well as \cmd{mkpageprefix} and \cmd{mkpagetotal}. The \prm{characters} argument is an undelimited list of characters which are to be considered as being part of a number. The regular version of this command replaces the current setting, the starred version appends its argument to the current list. The default setting is:
+
+\begin{ltxexample}
+\DeclareNumChars{.}
+\end{ltxexample}
+%
+This means that a (section or other) number like <3.4.5> will be considered as a number. Note that Arabic and Roman numerals are detected by default, there is no need to declare them explicitly.
+
+\cmditem{DeclareRangeChars}{characters}
+\cmditem*{DeclareRangeChars*}{characters}
+
+This command configures the \cmd{ifnumerals} and \cmd{ifpages} tests from \secref{aut:aux:tst}. The setup will also affect \cmd{iffieldnums} and \cmd{iffieldpages} as well as \cmd{mkpageprefix} and \cmd{mkpagetotal}. The \prm{characters} argument is an undelimited list of characters which are to be considered as range indicators. The regular version of this command replaces the current setting, the starred version appends its argument to the current list. The default setting is:
+
+\begin{ltxexample}
+\DeclareRangeChars{~,;-+/}
+\end{ltxexample}
+
+For engines that fully support Unicode these defaults are extended with
+\begin{ltxexample}[escapeinside={(*@}{@*)}]
+\DeclareRangeChars*{(*@–—@*)}
+\end{ltxexample}
+%
+This means that strings like <3--5>, <35+>, <8/9> and so on will be considered as a range by \cmd{ifnumerals} and \cmd{ifpages}. Non-range characters in such strings are recognized as numbers. So strings like <3a--5a> and <35b+> are not deemed to be ranges by default. See also \secref{bib:use:pag, use:cav:pag} for further details.
+
+\cmditem{DeclareRangeCommands}{commands}
+\cmditem*{DeclareRangeCommands*}{commands}
+
+This command is similar to \cmd{DeclareRangeChars}, except that the \prm{commands} argument is an undelimited list of commands which are to be considered as range indicators. The regular version of this command replaces the current setting, the starred version appends its argument to the current list. The default list is rather long and should cover all common cases; here is a shorter example:
+
+\begin{ltxexample}
+\DeclareRangeCommands{\&\bibrangedash\textendash\textemdash\psq\psqq}
+\end{ltxexample}
+%
+See also \secref{bib:use:pag, use:cav:pag} for further details.
+
+\cmditem{DeclarePageCommands}{commands}
+\cmditem*{DeclarePageCommands*}{commands}
+
+This command is similar to \cmd{DeclareRangeCommands}, except that it only affects the \cmd{ifpages} and \cmd{iffieldpages} tests but not \cmd{ifnumerals} and \cmd{iffieldnums}. The default setting is:
+
+\begin{ltxexample}
+\DeclarePageCommands{\pno\ppno}
+\end{ltxexample}
+
+\cmditem{NumCheckSetup}{code}
+
+Use this command to temporarily redefine any commands which interfere with the tests performed by \cmd{ifnumeral}, \cmd{ifnumerals}, and \cmd{ifpages} from \secref{aut:aux:tst}. The setup will also affect \cmd{iffieldnum}, \cmd{iffieldnums}, \cmd{iffieldpages} as well as \cmd{mkpageprefix} and \cmd{mkpagetotal}. The \prm{code} will be executed in a group by these commands. Since the above mentioned commands will expand the string to be analyzed, it is possible to remove commands to be ignored by the tests by making them expand to an empty string. See also \secref{bib:use:pag, use:cav:pag} for further details.
+
+\cmditem{NumsCheckSetup}{code}
+
+Like \cmd{NumCheckSetup} but only applies to \cmd{ifnumerals} and \cmd{ifpages} from \secref{aut:aux:tst} and their derivative tests.
+
+\cmditem{PagesCheckSetup}{code}
+
+Like \cmd{NumCheckSetup} but only applies to \cmd{ifpages} from \secref{aut:aux:tst} and its derivative tests. The default setting is makes \cmd{pnfmt} transparent to the test:
+
+\begin{ltxexample}
+\PagesCheckSetup{\let\pnfmt\@firstofone}
+\end{ltxexample}
+
+\cmditem{DeclareBabelToExplLanguageMapping}{babel language}{expl language}
+
+This command is only available if the \sty{expl3} case changing code is used.
+
+Use \prm{expl language} as \prm{language} argument for the \sty{l3text} case changing functions when \sty{babel language} is active. This command is only required if \prm{babel language} should correspond to a language for which \sty{l3text} has special rules set up. The default invocations of this command are
+\begin{ltxexample}
+\DeclareBabelToExplLanguageMapping{dutch}{nl}
+\DeclareBabelToExplLanguageMapping{greek}{el}
+\DeclareBabelToExplLanguageMapping{turkish}{tr}
+\end{ltxexample}
+
+\cmditem{UndeclareBabelToExplLanguageMapping}{babel language}
+
+This command is only available if the \sty{expl3} case changing code is used.
+
+Removes the \sty{babel}-to-\sty{expl3} language mapping for \prm{babel language}. If the argument is an asterisk \texttt{*}, all language mappings are removed.
+
+\cmditem{DeclareCaseLangs}{languages}
+\cmditem*{DeclareCaseLangs*}{languages}
+
+Defines the list of languages which are considered by the \cmd{MakeSentenceCase*} command as it converts a string to sentence case. The \prm{languages} argument is a comma"=separated list of \sty{babel}/\sty{polyglossia} language identifiers. The regular version of this command replaces the current setting, the starred version appends its argument to the current list. The default setting is:
+
+\begin{ltxexample}
+\DeclareCaseLangs{%
+ american,british,canadian,english,australian,newzealand,USenglish,UKenglish}
+\end{ltxexample}
+%
+See the \sty{babel}/\sty{polyglossia} manuals and \tabref{bib:fld:tab1} for a list of languages identifiers.
+
+\cmditem{BibliographyWarning}{message}
+
+This command is similar to \cmd{PackageWarning} but prints the entry key of the entry currently being processed in addition to the input line number. It may be used in the bibliography as well as in citation commands. If the \prm{message} is fairly long, use \cmd{MessageBreak} to include line breaks. Note that the standard \cmd{PackageWarning} command does not provide a meaningful clue when used in the bibliography since the input line number is the line on which the \cmd{printbibliography} command was given.
+
+\boolitem{pagetracker}
+\leavevmode\vspace{\numexpr2\baselineskip}% fix margin spilling into the text
+
+These commands activate or deactivate the citation tracker locally (this will affect the \cmd{iffirstonpage} and \cmd{ifsamepage} test from \secref{aut:aux:tst}). They are intended for use in the definition of citation commands or anywhere in the document body. If a citation command is to be excluded from page tracking, use \cmd{pagetrackerfalse} in the \prm{precode} argument of \cmd{DeclareCiteCommand}. See \secref{aut:cbx:cbx} for details. Note that these commands have no effect if page tracking has been disabled globally.
+
+\boolitem{citetracker}
+\leavevmode\vspace{\numexpr2\baselineskip}% fix margin spilling into the text
+
+These commands activate or deactivate all citation trackers locally (this will affect the \cmd{ifciteseen}, \cmd{ifentryseen}, \cmd{ifciteibid}, and \cmd{ifciteidem} tests from \secref{aut:aux:tst}). They are intended for use in the definition of citation commands or anywhere in the document body. If a citation command is to be excluded from tracking, use \cmd{citetrackerfalse} in the \prm{precode} argument of \cmd{DeclareCiteCommand}. See \secref{aut:cbx:cbx} for details. Note that these commands have no effect if tracking has been disabled globally.
+
+\boolitem{backtracker}
+\leavevmode\vspace{\numexpr2\baselineskip}% fix margin spilling into the text
+
+These commands activate or deactivate the \texttt{backref} tracker locally. They are intended for use in the definition of citation commands or anywhere in the document body. If a citation command is to be excluded from backtracking, use \cmd{backtrackerfalse} in the \prm{precode} argument of \cmd{DeclareCiteCommand}. Note that these commands have no effect if the \texttt{backref} option has been not been set globally.
+
+\end{ltxsyntax}
+
+\subsection[Punctuation]{Punctuation and Spacing}
+\label{aut:pct}
+
+The \biblatex package provides elaborate facilities designed to manage and track punctuation and spacing in the bibliography and in citations. These facilities work on two levels. The high"=level commands discussed in \secref{aut:pct:new} deal with punctuation and whitespace inserted by the bibliography style between the individual segments of a bibliography entry. The commands in \secref{aut:pct:chk, aut:pct:pct, aut:pct:spc} work at a lower level. They use \tex's space factor and modified space factor codes to track punctuation in a robust and efficient way. This way it is possible to detect trailing punctuation marks within fields, not only those explicitly inserted between fields. The same technique is also used for automatic capitalization of localisation strings, see \cmd{DeclareCapitalPunctuation} in \secref{aut:pct:cfg} as well as \secref{aut:str} for details. Note that these facilities are only made available locally in citations and bibliographies. They will not affect any other part of a document.
+
+\subsubsection{Block and Unit Punctuation}
+\label{aut:pct:new}
+
+The major segments of a bibliography entry are <blocks> and <units>. A block is the larger segment of the two, a unit is shorter or at most equal in length. For example, the values of fields such as \bibfield{title} or \bibfield{note} usually form a unit which is separated from subsequent data by a period or a comma. A block may comprise several fields which are treated as separate units, for example \bibfield{publisher}, \bibfield{location}, and \bibfield{year}. The segmentation of an entry into blocks and units is at the discretion of the bibliography style. An entry is segmented by inserting \cmd{newblock} and \cmd{newunit} commands at suitable places and \cmd{finentry} at the very end (see \secref{aut:bbx:drv} for an example). See also \secref{aut:cav:pct} for some practical hints.
+
+\begin{ltxsyntax}
+
+\csitem{newblock}
+
+Records the end of a block. This command does not print anything, it merely marks the end of the block. The block delimiter \cmd{newblockpunct} will be inserted by a subsequent \cmd{printtext}, \cmd{printfield}, \cmd{printlist}, \cmd{printnames}, or \cmd{bibstring} command. You may use \cmd{newblock} at suitable places without having to worry about spurious blocks. A new block will only be started by the next \cmd{printfield} (or similar) command if this command prints anything. See \secref{aut:cav:pct} for further details.
+
+\csitem{newunit}
+
+Records the end of a unit and puts the default delimiter \cmd{newunitpunct} in the punctuation buffer. This command does not print anything, it merely marks the end of the unit. The punctuation buffer will be inserted by the next \cmd{printtext}, \cmd{printfield}, \cmd{printlist}, \cmd{printnames}, or \cmd{bibstring} command. You may use \cmd{newunit} after commands like \cmd{printfield} without having to worry about spurious punctuation and whitespace. The buffer will only be inserted by the next \cmd{printfield} or similar command if \emph{both} fields are non"=empty. This also applies to \cmd{printtext}, \cmd{printlist}, \cmd{printnames}, and \cmd{bibstring}. See \secref{aut:cav:pct} for further details.
+
+\csitem{finentry}
+
+Inserts \cmd{finentrypunct}. This command should be used at the very end of every bibliography entry.
+
+\cmditem{setunit}{punctuation}
+\cmditem*{setunit*}{punctuation}
+
+The \cmd{setunit} command is similar to \cmd{newunit} except that it uses \prm{punctuation} instead of \cmd{newunitpunct}. The starred variant differs from the regular version in that it checks if the last \cmd{printtext}, \cmd{printfield}, \cmd{printlist}, \cmd{printnames}, or \cmd{bibstring} command did actually print anything. If not, it does nothing.
+
+\cmditem{printunit}{punctuation}
+\cmditem*{printunit*}{punctuation}
+
+The \cmd{printunit} command is similar to \cmd{setunit} except that \prm{punctuation} persists in the buffer. This ensures that \prm{punctuation} is inserted before the next non"=empty field printed by the \cmd{printtext}, \cmd{printfield}, \cmd{printlist}, \cmd{printnames}, or \cmd{bibstring} commands---regardless of any intermediate calls to \cmd{newunit} or \cmd{setunit}.
+
+\cmditem{setpunctfont}{command}
+
+This command, which is intended for use in field formatting directives, provides an alternative way of dealing with unit punctuation after a field printed in a different font (for example, a title printed in italics). The standard \latex way of dealing with this is adding a small amount of space, the so-called italic correction. This command allows adapting the punctuation to the font of the preceding field. The \prm{command} should be a text font command which takes one argument, such as \cmd{emph} or \cmd{textbf}. This command will only affect punctuation marks inserted by one of the commands from \secref{aut:pct:pct}. The font adaption is applied to the next punctuation mark only and will be reset automatically thereafter. If you want to reset it manually before it takes effect, issue \cmd{resetpunctfont}. If the \opt{punctfont} package option is disabled, this command does nothing. Note that the \cmd{mkbibemph}, \cmd{mkbibitalic} and \cmd{mkbibbold} wrappers from \secref{aut:fmt:ich} incorporate this feature by default.
+
+\csitem{resetpunctfont}
+
+This command resets the unit punctuation font defined with \cmd{setpunctfont} before it takes effect. If the \opt{punctfont} package option is disabled, this command does nothing.
+
+\end{ltxsyntax}
+
+\subsubsection{Punctuation Tests}
+\label{aut:pct:chk}
+
+The following commands may be used to test for preceding punctuation marks at any point in citations and the bibliography.
+
+\begin{ltxsyntax}
+
+\cmditem{ifpunct}{true}{false}
+
+Executes \prm{true} if preceded by any punctuation mark except for an abbreviation dot, and \prm{false} otherwise.
+
+\cmditem{ifterm}{true}{false}
+
+Executes \prm{true} if preceded by a terminal punctuation mark, and \prm{false} otherwise. A terminal punctuation mark is any punctuation mark which has been registered for automatic capitalization, either with \cmd{DeclareCapitalPunctuation} or by default, see \secref{aut:pct:cfg} for details. By default, this applies to periods, exclamation marks, and question marks.
+
+\cmditem{ifpunctmark}{character}{true}{false}
+
+Executes \prm{true} if preceded by the punctuation mark \prm{character}, and \prm{false} otherwise. The \prm{character} may be a comma, a semicolon, a colon, a period, an exclamation mark, a question mark, or an asterisk. Note that a period denotes an end-of"=sentence period. Use the asterisk to test for the dot after an abbreviation. If this command is used in a formatting directive for name lists, \ie in the argument to \cmd{DeclareNameFormat}, the \prm{character} may also be an apostrophe.
+
+\cmditem{ifprefchar}{true}{false}
+
+Executes \prm{true} if preceded by any prefix character declared by \cmd{DeclarePrefChars}.
+
+\end{ltxsyntax}
+
+\subsubsection{Adding Punctuation}
+\label{aut:pct:pct}
+
+The following commands are designed to prevent double punctuation marks. Bibliography and citation styles should always use these commands instead of literal punctuation marks. All \cmd{add...} commands in this section automatically remove preceding whitespace with \cmd{unspace} (see \secref{aut:pct:spc}). Note that the behavior of all \cmd{add...} commands discussed below is the package default, which is restored whenever \biblatex switches languages. This behavior may be adjusted with \cmd{DeclarePunctuationPairs} from \secref{aut:pct:cfg}.
+
+\begin{ltxsyntax}
+
+\csitem{adddot}
+
+Adds a period unless it is preceded by any punctuation mark. The purpose of this command is inserting the dot after an abbreviation. Any dot inserted this way is recognized as such by the other punctuation commands. This command may also be used to turn a previously inserted literal period into an abbreviation dot.
+
+\csitem{addcomma}
+
+Adds a comma unless it is preceded by another comma, a semicolon, a colon, or a period.
+
+\csitem{addsemicolon}
+
+Adds a semicolon unless it is preceded by a comma, another semicolon, a colon, or a period.
+
+\csitem{addcolon}
+
+Adds a colon unless it is preceded by a comma, a semicolon, another colon, or a period.
+
+\csitem{addperiod}
+
+Adds a period unless it is preceded by an abbreviation dot or any other punctuation mark. This command may also be used to turn a previously inserted abbreviation dot into a period, for example at the end of a sentence.
+
+\csitem{addexclam}
+Adds an exclamation mark unless it is preceded by any punctuation mark except for an abbreviation dot.
+
+\csitem{addquestion}
+
+Adds a question mark unless it is preceded by any punctuation mark except for an abbreviation dot.
+
+\csitem{isdot}
+
+Turns a previously inserted literal period into an abbreviation dot. In contrast to \cmd{adddot}, nothing is inserted if this command is not preceded by a period.
+
+\csitem{nopunct}
+
+Adds an internal marker which will cause the next punctuation command to print nothing.
+
+\end{ltxsyntax}
+
+\subsubsection{Adding Whitespace}
+\label{aut:pct:spc}
+
+The following commands are designed to prevent spurious whitespace. Bibliography and citation styles should always use these commands instead of literal whitespace. In contrast to the commands in \secref{aut:pct:chk, aut:pct:pct}, they are not restricted to citations and the bibliography but available globally.
+
+\begin{ltxsyntax}
+
+\csitem{unspace}
+
+Removes preceding whitespace, \ie removes all skips and penalties from the end of the current horizontal list. This command is implicitly executed by all of the following commands.
+
+\csitem{addspace}
+
+Adds a breakable interword space.
+
+\csitem{addnbspace}
+
+Adds a non"=breakable interword space.
+
+\csitem{addthinspace}
+
+Adds a \emph{breakable} thin space.
+
+\csitem{addnbthinspace}
+
+Adds a non"=breakable thin space. This is similar to \cmd{,} and \cmd{thinspace}.
+
+\csitem{addlowpenspace}
+
+Adds a space penalized by the value of the \cnt{lownamepenalty} counter, see \secref{use:fmt:len, aut:fmt:len} for details.
+
+\csitem{addhighpenspace}
+
+Adds a space penalized by the value of the \cnt{highnamepenalty} counter, see \secref{use:fmt:len, aut:fmt:len} for details.
+
+\csitem{addlpthinspace}
+
+Similar to \cmd{addlowpenspace} but adds a breakable thin space.
+
+\csitem{addhpthinspace}
+
+Similar to \cmd{addhighpenspace} but adds a breakable thin space.
+
+\csitem{addabbrvspace}
+
+Adds a space penalized by the value of the \cnt{abbrvpenalty} counter, see \secref{use:fmt:len, aut:fmt:len} for details.
+
+\csitem{addabthinspace}
+
+Similar to \cmd{addabbrvspace} but using a thin space.
+
+\csitem{adddotspace}
+
+Executes \cmd{adddot} and adds a space penalized by the value of the \cnt{abbrvpenalty} counter, see \secref{use:fmt:len, aut:fmt:len} for details.
+
+\csitem{addslash}
+
+Adds a breakable slash. This command differs from the \cmd{slash} command in the \latex kernel in that a linebreak after the slash is not penalized at all.
+
+\end{ltxsyntax}
+
+Note that the commands in this section implicitly execute \cmd{unspace} to remove spurious whitespace, hence they may be used to override each other. For example, you may use \cmd{addnbspace} to transform a previously inserted interword space into a non"=breakable one and \cmd{addspace} to turn a non"=breakable space into a breakable one.
+
+\subsubsection{Configuring Punctuation and Capitalization}
+\label{aut:pct:cfg}
+
+The following commands configure various features related to punctuation and automatic capitalization.
+
+\begin{ltxsyntax}
+
+\cmditem{DeclarePrefChars}{characters}
+\cmditem*{DeclarePrefChars*}{characters}
+
+This command declares characters that are to be treated specially when testing to see if \cmd{bibnamedelimc} is to be inserted between a name prefix and a family name. If a character is in the list of \prm{characters}, \cmd{bibnamedelimc} is not inserted. It is used to allow abbreviated name prefices like <d'Argent> where no space should be inserted after the apostrophe. The starred version appends its argument to the list of prefix characters, the unstarred version replaces the current setting. The default setting is:
+
+\begin{ltxexample}
+\DeclarePrefChars{'-}
+\end{ltxexample}
+
+For engines that fully support Unicode these defaults are extended with
+\begin{ltxexample}[escapeinside={(*@}{@*)}]
+\DeclarePrefChars*{(*@’@*)}
+\end{ltxexample}
+
+\cmditem{DeclareAutoPunctuation}{characters}
+
+This command defines the punctuation marks to be considered by the citation commands as they scan ahead for punctuation. Note that \prm{characters} is an undelimited list of characters. Valid \prm{characters} are period, comma, semicolon, colon, exclamation and question mark. The default setting is:
+
+\begin{ltxexample}
+\DeclareAutoPunctuation{.,;:!?}
+\end{ltxexample}
+%
+This definition is restored automatically whenever the \opt{autopunct} package option is set to \texttt{true}. Executing |\DeclareAutoPunctuation{}| is equivalent to setting \kvopt{autopunct}{false}, \ie it disables this feature.
+
+\cmditem{DeclareCapitalPunctuation}{characters}
+
+When \biblatex inserts localisation strings, \ie key terms such as <edition> or <volume>, it automatically capitalizes them after terminal punctuation marks. This command defines the punctuation marks which will cause localisation strings to be capitalized if one of them precedes a string. Note that \prm{characters} is an undelimited list of characters. Valid \prm{characters} are period, comma, semicolon, colon, exclamation and question mark. The package default is:
+
+\begin{ltxexample}
+\DeclareCapitalPunctuation{.!?}
+\end{ltxexample}
+%
+Using \cmd{DeclareCapitalPunctuation} with an empty argument is equivalent to disabling automatic capitalization. Since this feature is language specific, this command must be used in the argument to \cmd{DefineBibliographyExtras} (when used in the preamble) or \cmd{DeclareBibliographyExtras} (when used in a localisation module). See \secref{use:lng, aut:lng} for details. By default, strings are capitalized after periods, exclamation marks, and question marks. All strings are generally capitalized at the beginning of a paragraph (in fact whenever \tex is in vertical mode).
+
+\cmditem{DeclarePunctuationPairs}{identifier}{characters}
+
+Use this command to declare valid pairs of punctuation marks. This will affect the punctuation commands discussed in \secref{aut:pct:pct}. For example, the description of \cmd{addcomma} states that this command adds a comma unless it is preceded by another comma, a semicolon, a colon, or a period. In other words, commas after abbreviation dots, exclamation marks, and question marks are permitted. These valid pairs are declared as follows:
+
+\begin{ltxexample}
+\DeclarePunctuationPairs{comma}{*!?}
+\end{ltxexample}
+%
+The \prm{identifier} selects the command to be configured. The identifiers correspond to the names of the punctuation commands from \secref{aut:pct:pct} without the \cmd{add} prefix, \ie valid \prm{identifier} strings are \texttt{dot}, \texttt{comma}, \texttt{semicolon}, \texttt{colon}, \texttt{period}, \texttt{exclam}, \texttt{question}. The \prm{characters} argument is an undelimited list of punctuation marks. Valid \prm{characters} are comma, semicolon, colon, period, exclamation mark, question mark, and asterisk. A period in the \prm{characters} argument denotes an end-of"=sentence period, an asterisk the dot after an abbreviation. This is the default setup, which is automatically restored whenever \biblatex switches languages and corresponds to the behavior described in \secref{aut:pct:pct}:
+
+\begin{ltxexample}
+\DeclarePunctuationPairs{dot}{}
+\DeclarePunctuationPairs{comma}{*!?}
+\DeclarePunctuationPairs{semicolon}{*!?}
+\DeclarePunctuationPairs{colon}{*!?}
+\DeclarePunctuationPairs{period}{}
+\DeclarePunctuationPairs{exclam}{*}
+\DeclarePunctuationPairs{question}{*}
+\end{ltxexample}
+%
+Since this feature is language specific, \cmd{DeclarePunctuationPairs} must be used in the argument to \cmd{DefineBibliographyExtras} (when used in the preamble) or \cmd{DeclareBibliographyExtras} (when used in a localisation module). See \secref{use:lng, aut:lng} for details. Note that some localisation modules may use a setup which is different from the package default.\footnote{As of this writing, the \texttt{american} module uses different settings for <American-style> punctuation.}
+
+\cmditem{DeclareQuotePunctuation}{characters}
+
+This command controls <American-style> punctuation. The \cmd{mkbibquote} wrapper from \secref{aut:fmt:ich} can interact with the punctuation facilities discussed in \secref{aut:pct:new, aut:pct:pct, aut:pct:spc}. Punctuation marks after \cmd{mkbibquote} will be moved inside the quotes if they have been registered with \cmd{DeclareQuotePunctuation}. Note that \prm{characters} is an undelimited list of characters. Valid \prm{characters} are period, comma, semicolon, colon, exclamation and question mark. Here is an example:
+
+\begin{ltxexample}
+\DeclareQuotePunctuation{.,}
+\end{ltxexample}
+%
+Executing |\DeclareQuotePunctuation{}| is equivalent to disabling this feature. This is the package default. Since this feature is language specific, this command must be used in the argument to \cmd{DefineBibliographyExtras} (when used in the preamble) or \cmd{DeclareBibliographyExtras} (when used in a localisation module). See \secref{use:lng, aut:lng} for details. See also \secref{use:loc:us}.
+
+\csitem{uspunctuation}
+
+A shorthand using the lower-level commands \cmd{DeclareQuotePunctuation} and \cmd{DeclarePunctuationPairs} to activate <American-style> punctuation. See \secref{use:loc:us} for details. This shorthand is provided for convenience only. The effective settings are applied by the lower-level commands.
+
+\csitem{stdpunctuation}
+
+Undoes the settings applied by \cmd{uspunctuation}, restoring standard punctuation. As standard punctuation is the default setting, you only need this command to override a previously executed \cmd{uspunctuation} command. See \secref{use:loc:us} for details.
+
+\end{ltxsyntax}
+
+\subsubsection{Correcting Punctuation Tracking}
+\label{aut:pct:ctr}
+
+The facilities for punctuation tracking and automatic capitalization are very reliable under normal circumstances, but there are always marginal cases which may require manual intervention. Typical cases are localisation strings printed as the first word in a footnote (which is usually treated as the beginning of a paragraph as far as capitalization is concerned, but \tex is not in vertical mode at this point) or punctuation after periods which are not really end"=of"=sentence periods (for example, after an ellipsis like «[\dots\unkern]» a command such as \cmd{addperiod} would do nothing since parentheses and brackets are transparent to the punctuation tracker). In such cases, use the following commands in bibliography and citation styles to mark the beginning or middle of a sentence if and where required:
+
+\begin{ltxsyntax}
+
+\csitem{bibsentence}
+
+This command marks the beginning of a sentence. A localisation string immediately after this command will be capitalized and the punctuation tracker is reset, \ie this command hides all preceding punctuation marks from the punctuation tracker and enforces capitalization.
+
+\csitem{midsentence}
+
+This command marks the middle of a sentence. A localisation string immediately after this command will not be capitalized and the punctuation tracker is reset, \ie this command hides all preceding punctuation marks from the punctuation tracker and suppresses capitalization.
+
+\csitem*{midsentence*}
+
+The starred variant of \cmd{midsentence} differs from the regular one in that a preceding abbreviation dot is not hidden from the punctuation tracker, \ie any code after \cmd{midsentence*} will see a preceding abbreviation dot. All other punctuation marks are hidden from the punctuation tracker and capitalization is suppressed.
+
+\end{ltxsyntax}
+
+\subsection{Localization Strings}
+\label{aut:str}
+
+Localization strings are key terms such as <edition> or <volume> which are automatically translated by \biblatex's localisation modules. See \secref{aut:lng} for an overview and \secref{aut:lng:key} for a list of all strings supported by default. The commands in this section are used to print the localised term.
+
+\begin{ltxsyntax}
+
+\cmditem{bibstring}[wrapper]{key}
+
+Prints the localisation string \prm{key}, where \prm{key} is an identifier in lowercase letters (see \secref{aut:lng:key}). The string will be capitalized as required, see \secref{aut:pct:cfg} for details.
+Depending on the \opt{abbreviate} package option from \secref{use:opt:pre:gen}, \cmd{bibstring} prints the short or the long version of the string. If localisation strings are nested, \ie if \cmd{bibstring} is used in another string, it will behave like \cmd{bibxstring}.
+If the \prm{wrapper} argument is given, the string is passed to the \prm{wrapper} for formatting. This is intended for font commands such as \cmd{emph}.
+
+\cmditem{biblstring}[wrapper]{key}
+
+Similar to \cmd{bibstring} but always prints the long string, ignoring the \opt{abbreviate} option.
+
+\cmditem{bibsstring}[wrapper]{key}
+
+Similar to \cmd{bibstring} but always prints the short string, ignoring the \opt{abbreviate} option.
+
+\cmditem{bibncpstring}[wrapper]{key}
+
+Similar to \cmd{bibstring} but the term is never capitalized.
+
+\cmditem{bibncplstring}[wrapper]{key}
+
+Similar to \cmd{biblstring} but the term is never capitalized.
+
+\cmditem{bibncpsstring}[wrapper]{key}
+
+Similar to \cmd{bibsstring} but the term is never capitalized.
+
+\cmditem{bibcpstring}[wrapper]{key}
+
+Similar to \cmd{bibstring} but the term is always capitalized.
+
+\cmditem{bibcplstring}[wrapper]{key}
+
+Similar to \cmd{biblstring} but the term is always capitalized.
+
+\cmditem{bibcpsstring}[wrapper]{key}
+
+Similar to \cmd{bibsstring} but the term is always capitalized.
+
+\cmditem{bibucstring}[wrapper]{key}
+
+Similar to \cmd{bibstring} but the whole term is uppercased.
+
+\cmditem{bibuclstring}[wrapper]{key}
+
+Similar to \cmd{biblstring} but the whole term is uppercased.
+
+\cmditem{bibucsstring}[wrapper]{key}
+
+Similar to \cmd{bibsstring} but the whole term is uppercased.
+
+\cmditem{biblcstring}[wrapper]{key}
+
+Similar to \cmd{bibstring} but the whole term is lowercased.
+
+\cmditem{biblclstring}[wrapper]{key}
+
+Similar to \cmd{biblstring} but the whole term is lowercased.
+
+\cmditem{biblcsstring}[wrapper]{key}
+
+Similar to \cmd{bibsstring} but the whole term is lowercased.
+
+\cmditem{bibxstring}{key}
+
+A simplified but expandable version of \cmd{bibstring}. Note that this variant does not capitalize automatically, nor does it hook into the punctuation tracker. It is intended for special cases in which strings are nested or an expanded localisation string is required in a test.
+
+\cmditem{bibxlstring}[wrapper]{key}
+
+Similar to \cmd{bibxstring} but always uses the long string, ignoring the \opt{abbreviate} option.
+
+\cmditem{bibxsstring}[wrapper]{key}
+
+Similar to \cmd{bibxstring} but always uses the short string, ignoring the \opt{abbreviate} option.
+
+\cmditem{mainlang}\DeprecatedMark
+
+Switches from the current language to the main document language. This command is deprecated. Use the text-macro \cmd{textmainlang} instead. With \sty{babel} this command will need to be wrapped into \emph{two} groups to have purely local effect.
+
+\cmditem{textmainlang}{text}
+
+Locally switches from the current language to the main document language to typeset \prm{text}. This can be used the \prm{wrapper} argument in the localisation string commands above.
+
+\cmditem{texouterlang}{text}
+
+Locally switches from the current language to the surrounding language (which was not selected by \sty{biblatex}) to typeset \prm{text}. This can be used the \prm{wrapper} argument in the localisation string commands above.
+
+\end{ltxsyntax}
+
+It is possible to add bibliography strings to a bibliography string set to apply additional formatting.
+
+\begin{ltxsyntax}
+
+\cmditem{DeclareBibstringSet}{setname}{key, \dots}
+
+This commands assigns all \prm{key}s to the bibliography string set \prm{setname}.
+
+\cmditem{UndeclareBibstringSet}{setname}
+
+Remove the bibliography string set \prm{setname}. Any formatting definitions will also be cleared.
+
+\cmditem{UndeclareBibstringSets}
+
+Remove all existing bibliography string sets with \cmd{UndeclareBibstringSet}.
+
+\cmditem{DeclareBibstringSetFormat}{setname}{code}
+
+Defines the bibliography string format for \prm{setname}. The format works exactly like an additional \prm{wrapper} format for \cmd{bibstring}. \prm{code} is executed whenever a bibliography string of \prm{setname} is printed. The text of the bibliography string is passed to \prm{code} as first and only argument.
+
+\cmditem{UneclareBibstringSetFormat}{setname}
+
+Remove any bibliography string set format defined for \prm{setname}.
+
+\end{ltxsyntax}
+
+Bibliography string sets can be useful to apply additional formatting to a number of bibliography strings at the same time. These commands are intended for use in language modules. For example in French typography it is customary to italicise Latin terms. The French language module can define a new bibliography string set called \texttt{latin} for all Latin strings and apply additional formatting only to these strings. It is not recommended to apply the formatting dierctly in the bibliography string definitions, since that can interfere with the capitalisation function. Assuming that the French language \texttt{.lbx} file only defines two Latin strings, \texttt{andothers} and \texttt{andothers}, the \texttt{.lbx} file would contain.
+
+\begin{ltxexample}[escapeinside={(*@}{@*)}]
+\DeclareBibliographyExtras{%
+ (*@\dots@*)
+ \DeclareBibstringSet{latin}{andothers,ibidem}%
+ \DeclareBibstringSetFormat{latin}{\mkbibemph{#1}}%
+ (*@\dots@*)
+}
+
+\UndeclareBibliographyExtras{%
+ (*@\dots@*)
+ \UndeclareBibstringSet{latin}%
+ (*@\dots@*)
+}
+\end{ltxexample}
+Note that the defined sets should be undeclared after use to avoid side effects for other languages.
+
+
+\subsection{Localization Modules}
+\label{aut:lng}
+
+A localisation module provides translations for key terms such as <edition> or <volume> as well as definitions for language specific features such as the date format and ordinals. These definitions are provided in files with the suffix \file{lbx}. The base name of the file must be a language name known to the \sty{babel}/\sty{polyglossia} packages. The \file{lbx} files may also be used to map \sty{babel}/\sty{polyglossia} language names to the backend modules of the \biblatex package. All localisation modules are loaded on demand in the document body. Note that the contents of the file are processed in a group and that the category code of the character \texttt{@} is temporarily set to <letter>.
+
+\subsubsection{Localization Commands}
+\label{aut:lng:cmd}
+
+The user"=level versions of the localisation commands were already introduced in \secref{use:lng}. When used in \file{lbx} files, however, the syntax of localisation commands is different from the user syntax in the preamble and the configuration file. When used in localisation files, there is no need to specify the \prm{language} because the mapping of strings to a language is already provided by the name of the \file{lbx} file.
+
+\begin{ltxsyntax}
+
+\cmditem{DeclareBibliographyStrings}{definitions}
+
+This command is only available in \file{lbx} files. It is used to define localisation strings. The \prm{definitions} consist of \keyval pairs which assign an expression to an identifier. A complete list of all keys supported by default is given is \secref{aut:lng:key}. Note that the syntax of the value is different in \file{lbx} files. The value assigned to a key consists of two expressions, each of which is wrapped in an additional pair of brackets. This is best shown by example:
+
+\begin{ltxexample}
+\DeclareBibliographyStrings{%
+ bibliography = {{Bibliography}{Bibliography}},
+ shorthands = {{List of Abbreviations}{Abbreviations}},
+ editor = {{editor}{ed.}},
+ editors = {{editors}{eds.}},
+}
+\end{ltxexample}
+%
+The first value is the long, written out expression, the second one is an abbreviated or short form. Both strings must always be given even though they may be identical if an expression is always (or never) abbreviated. Depending on the setting of the \opt{abbreviate} package option (see \secref{use:opt:pre:gen}), \biblatex selects one expression when loading the \file{lbx} file. There is also a special key named \texttt{inherit} which copies the strings from a different language. This is intended for languages which only differ in a few expressions, such as German and Austrian or American and British English. For example, here are the complete definitions for Austrian:
+
+\begin{ltxexample}
+\DeclareBibliographyStrings{%
+ inherit = {german},
+ january = {{J\"anner}{J\"an.}},
+}
+\end{ltxexample}
+
+The above examples are slightly simplified. Real localisation files should use the punctuation and formatting commands discussed in \secref{aut:pct:pct, use:fmt} instead of literal punctuation. Here is an excerpt from a real localisation file:
+
+\begin{ltxexample}
+ bibliography = {{Bibliography}{Bibliography}},
+ shorthands = {{List of Abbreviations}{Abbreviations}},
+ editor = {{editor}{ed\adddot}},
+ editors = {{editors}{eds\adddot}},
+ byeditor = {{edited by}{ed\adddotspace by}},
+ mathesis = {{Master's thesis}{MA\addabbrvspace thesis}},
+\end{ltxexample}
+%
+Note the handling of abbreviation dots, the spacing in abbreviated expressions, and the capitalization in the example above. All expressions should be capitalized as they usually are when used in the middle of a sentence. The \biblatex package will automatically capitalize the first word when required at the beginning of a sentence, see \cmd{DeclareCapitalPunctuation} in \secref{aut:pct:cfg} for details. Expressions intended for use in headings are special. They should be capitalized in a way that is suitable for titling and should not be abbreviated (but they may have a short form).
+
+\cmditem{InheritBibliographyStrings}{language}
+
+This command is only available in \file{lbx} files. It copies the localisation strings for \prm{language} to the current language, as specified by the name of the \file{lbx} file.
+
+\cmditem{DeclareBibliographyExtras}{code}
+
+This command is only available in \file{lbx} files. It is used to adapt language specific features such as the date format and ordinals. The \prm{code}, which may be arbitrary \latex code, will usually consist of redefinitions of the formatting commands from \secref{aut:fmt:lng}.
+
+\cmditem{UndeclareBibliographyExtras}{code}
+
+This command is only available in \file{lbx} files. It is used to restore any formatting commands modified with \cmd{DeclareBibliographyExtras}. If a redefined command is included in \secref{aut:fmt:lng}, there is no need to restore its previous definition since these commands are localised by all language modules anyway.
+
+\cmditem{InheritBibliographyExtras}{language}
+
+This command is only available in \file{lbx} files. It copies the bibliography extras for \prm{language} to the current language, as specified by the name of the \file{lbx} file.
+
+\cmditem{DeclareHyphenationExceptions}{text}
+
+This command corresponds to \cmd{DefineHyphenationExceptions} from \secref{use:lng}. The difference is that it is only available in \file{lbx} files and that the \prm{language} argument is omitted. The hyphenation exceptions will affect the language of the \file{lbx} file currently being processed.
+
+\cmditem{DeclareRedundantLanguages}{language, language, ...}{langid, langid, ...}
+
+This command provides the language mappings required by the \opt{clearlang} option from \secref{use:opt:pre:gen}.
+The \prm{language} is the string given in the \bibfield{language} field (without the optional \texttt{lang} prefix); \prm{langid} is \sty{babel}/\sty{polyglossia}'s language identifier, as given in the optional argument of \cmd{usepackage} when loading \sty{babel} or the argument of \cmd{setdefaultlanguage} or \cmd{setotherlanguages} when using \sty{polyglossia}. This command may be used in \file{lbx} files or in the document preamble. Here are some examples:
+
+\begin{ltxexample}
+\DeclareRedundantLanguages{french}{french}
+\DeclareRedundantLanguages{german}{german,ngerman,austrian,naustrian,
+ nswissgerman,swissgerman}
+\DeclareRedundantLanguages{english,american}{english,american,british,
+ canadian,australian,newzealand,USenglish,UKenglish}
+\end{ltxexample}
+%
+Note that this feature needs to be enabled globally with the \opt{clearlang} option from \secref{use:opt:pre:gen}. If it is disabled, all mappings will be ignored. If the \prm{langid} parameter is blank, \biblatex will clear the mappings for the corresponding \prm{language}, \ie the feature will be disabled for this \prm{language} only.
+
+\cmditem{DeclareLanguageMapping}{language}{file}
+
+This command maps a \sty{babel}/\sty{polyglossia} language identifier to an \file{lbx} file. The \prm{language} must be a language name known to the \sty{babel}/\sty{polyglossia} package, \ie one of the identifiers listed in \tabref{bib:fld:tab1}. The \prm{file} argument is the name of an alternative \file{lbx} file without the \texttt{.lbx} suffix. Declaring the same mapping more than once is possible. Subsequent declarations will simply overwrite any previous ones. This command may only be used in the preamble. See \secref{aut:cav:lng} for further details.
+
+\cmditem{DeclareLanguageMappingSuffix}{suffix}
+
+This command defines a language file suffix which will be added when looking for \file{.lbx} language string definition files. This is intended for styles which provide their own \file{.lbx} files so that they will be used automatically. For example, the APA style defines:
+
+\begin{ltxexample}
+\DeclareLanguageMappingSuffix{-apa}
+\end{ltxexample}
+%
+When the document language is <german>, \biblatex will look for the file \file{german-apa.lbx} which defines some APA specific strings and in turn loads \file{german.lbx}. If \cmd{DeclareLanguageMapping} is defined for a language, this overrides \cmd{DeclareLanguageMappingSuffix}.
+
+The suffix will be applied to other language files loaded recursively by the loading of a language file. For example, given the suffix defined above, when loading <ngerman>, \biblatex will look for the file \file{ngerman-apa.lbx} and if this recursively loads <german>, then biblatex will look for \file{german-apa.lbx}. Infinite recursion is of course avoided.
+
+\cmditem{NewBibliographyString}{key}
+
+This command, which may be used in the preamble (including \file{cbx} and \file{bbx} files) as well as in \file{lbx} files, declares new localisation strings, \ie it initializes a new \prm{key} to be used in the \prm{definitions} of \cmd{DefineBibliographyStrings} or \cmd{DeclareBibliographyStrings}. The \prm{key} argument may also be a comma"=separated list of key names. When used in an \file{lbx}, the \prm{key} is initialized only for the language specified by the name of the \file{lbx} file. The keys listed in \secref{aut:lng:key} are defined by default.
+
+\end{ltxsyntax}
+
+\subsubsection{Localization Keys}
+\label{aut:lng:key}
+
+The localisation keys in this section are defined by default and covered by the localisation files which come with \biblatex. Note that these strings are only available in citations, the bibliography and bibliography lists. All expressions should be capitalized as they usually are when used in the middle of a sentence. \biblatex will capitalize them automatically at the beginning of a sentence. The only exceptions to these rules are the three strings intended for use in headings.
+
+\paragraph{Headings}
+\label{aut:lng:key:bhd}
+
+The following strings are special because they are intended for use in headings and made available globally via macros. For this reason, they should be capitalized for use in headings and they must not include any local commands which are part of \biblatex's author interface.
+
+\begin{keymarglist}
+\item[bibliography] The term <bibliography>, also available as \cmd{bibname}.
+\item[references] The term <references>, also available as \cmd{refname}.
+\item[shorthands] The term <list of shorthands> or <list of abbreviations>, also available as \cmd{biblistname}.
+\end{keymarglist}
+
+\paragraph{Roles, Expressed as Functions}
+\label{aut:lng:key:efn}
+
+The following keys refer to roles which are expressed as a function (<editor>, <translator>) rather than as an action (<edited by>, <translated by>).
+
+\begin{keymarglist}
+\item[editor] The term <editor>, referring to the main editor. This is the most generic editorial role.
+\item[editors] The plural form of \texttt{editor}.
+\item[compiler] The term <compiler>, referring to an editor whose task is to compile a work.
+\item[compilers] The plural form of \texttt{compiler}.
+\item[founder] The term <founder>, referring to a founding editor.
+\item[founders] The plural form of \texttt{founder}.
+\item[continuator] An expression like <continuator>, <continuation>, or <continued>, referring to a past editor who continued the work of the founding editor but was subsequently replaced by the current editor.
+\item[continuators] The plural form of \texttt{continuator}.
+\item[redactor] The term <redactor>, referring to a secondary editor.
+\item[redactors] The plural form of \texttt{redactor}.
+\item[reviser] The term <reviser>, referring to a secondary editor.
+\item[revisers] The plural form of \texttt{reviser}.
+\item[collaborator] A term like <collaborator>, <collaboration>, <cooperator>, or <cooperation>, referring to a secondary editor.
+\item[collaborators] The plural form of \texttt{collaborator}.
+\item[translator] The term <translator>.
+\item[translators] The plural form of \texttt{translator}.
+\item[commentator] The term <commentator>, referring to the author of a commentary to a work.
+\item[commentators] The plural form of \texttt{commentators}.
+\item[annotator] The term <annotator>, referring to the author of annotations to a work.
+\item[annotators] The plural form of \texttt{annotators}.
+\item[organizer] The term <organizer>, referring to the organizer of an
+ event or work.
+\item[organizers] The plural form of \texttt{organizer}.
+\end{keymarglist}
+
+\paragraph{Concatenated Editor Roles, Expressed as Functions}
+\label{aut:lng:key:cef}
+
+The following keys are similar in function to \texttt{editor}, \texttt{translator}, etc. They are used to indicate additional roles of the editor, \eg\ <editor and translator>, <editor and foreword>.
+
+\begin{keymarglist}
+\item[editortr] Used if \bibfield{editor}\slash \bibfield{translator} are identical.
+\item[editorstr] The plural form of \texttt{editortr}.
+\item[editorco] Used if \bibfield{editor}\slash \bibfield{commentator} are identical.
+\item[editorsco] The plural form of \texttt{editorco}.
+\item[editoran] Used if \bibfield{editor}\slash \bibfield{annotator} are identical.
+\item[editorsan] The plural form of \texttt{editoran}.
+\item[editorin] Used if \bibfield{editor}\slash \bibfield{introduction} are identical.
+\item[editorsin] The plural form of \texttt{editorin}.
+\item[editorfo] Used if \bibfield{editor}\slash \bibfield{foreword} are identical.
+\item[editorsfo] The plural form of \texttt{editorfo}.
+\item[editoraf] Used if \bibfield{editor}\slash \bibfield{aftword} are identical.
+\item[editorsaf] The plural form of \texttt{editoraf}.
+\end{keymarglist}
+%
+Keys for \bibfield{editor}\slash \bibfield{translator}\slash \prm{role} combinations:
+
+\begin{keymarglist}
+\item[editortrco] Used if \bibfield{editor}\slash \bibfield{translator}\slash \bibfield{commentator} are identical.
+\item[editorstrco] The plural form of \texttt{editortrco}.
+\item[editortran] Used if \bibfield{editor}\slash \bibfield{translator}\slash \bibfield{annotator} are identical.
+\item[editorstran] The plural form of \texttt{editortran}.
+\item[editortrin] Used if \bibfield{editor}\slash \bibfield{translator}\slash \bibfield{introduction} are identical.
+\item[editorstrin] The plural form of \texttt{editortrin}.
+\item[editortrfo] Used if \bibfield{editor}\slash \bibfield{translator}\slash \bibfield{foreword} are identical.
+\item[editorstrfo] The plural form of \texttt{editortrfo}.
+\item[editortraf] Used if \bibfield{editor}\slash \bibfield{translator}\slash \bibfield{aftword} are identical.
+\item[editorstraf] The plural form of \texttt{editortraf}.
+\end{keymarglist}
+%
+Keys for \bibfield{editor}\slash \bibfield{commentator}\slash \prm{role} combinations:
+
+\begin{keymarglist}
+\item[editorcoin] Used if \bibfield{editor}\slash \bibfield{commentator}\slash \bibfield{introduction} are identical.
+\item[editorscoin] The plural form of \texttt{editorcoin}.
+\item[editorcofo] Used if \bibfield{editor}\slash \bibfield{commentator}\slash \bibfield{foreword} are identical.
+\item[editorscofo] The plural form of \texttt{editorcofo}.
+\item[editorcoaf] Used if \bibfield{editor}\slash \bibfield{commentator}\slash \bibfield{aftword} are identical.
+\item[editorscoaf] The plural form of \texttt{editorcoaf}.
+\end{keymarglist}
+%
+Keys for \bibfield{editor}\slash \bibfield{annotator}\slash \prm{role} combinations:
+
+\begin{keymarglist}
+\item[editoranin] Used if \bibfield{editor}\slash \bibfield{annotator}\slash \bibfield{introduction} are identical.
+\item[editorsanin] The plural form of \texttt{editoranin}.
+\item[editoranfo] Used if \bibfield{editor}\slash \bibfield{annotator}\slash \bibfield{foreword} are identical.
+\item[editorsanfo] The plural form of \texttt{editoranfo}.
+\item[editoranaf] Used if \bibfield{editor}\slash \bibfield{annotator}\slash \bibfield{aftword} are identical.
+\item[editorsanaf] The plural form of \texttt{editoranaf}.
+\end{keymarglist}
+%
+Keys for \bibfield{editor}\slash \bibfield{translator}\slash \bibfield{commentator}\slash \prm{role} combinations:
+
+\begin{keymarglist}
+\item[editortrcoin] Used if \bibfield{editor}\slash \bibfield{translator}\slash \bibfield{commentator}\slash \bibfield{introduction} are identical.
+\item[editorstrcoin] The plural form of \texttt{editortrcoin}.
+\item[editortrcofo] Used if \bibfield{editor}\slash \bibfield{translator}\slash \bibfield{commentator}\slash \bibfield{foreword} are identical.
+\item[editorstrcofo] The plural form of \texttt{editortrcofo}.
+\item[editortrcoaf] Used if \bibfield{editor}\slash \bibfield{translator}\slash \bibfield{commentator}\slash \bibfield{aftword} are identical.
+\item[editorstrcoaf] The plural form of \texttt{editortrcoaf}.
+\end{keymarglist}
+%
+Keys for \bibfield{editor}\slash \bibfield{annotator}\slash \bibfield{commentator}\slash \prm{role} combinations:
+
+\begin{keymarglist}
+\item[editortranin] Used if \bibfield{editor}\slash \bibfield{annotator}\slash \bibfield{commentator}\slash \bibfield{introduction} are identical.
+\item[editorstranin] The plural form of \texttt{editortranin}.
+\item[editortranfo] Used if \bibfield{editor}\slash \bibfield{annotator}\slash \bibfield{commentator}\slash \bibfield{foreword} are identical.
+\item[editorstranfo] The plural form of \texttt{editortranfo}.
+\item[editortranaf] Used if \bibfield{editor}\slash \bibfield{annotator}\slash \bibfield{commentator}\slash \bibfield{aftword} are identical.
+\item[editorstranaf] The plural form of \texttt{editortranaf}.
+\end{keymarglist}
+
+\paragraph{Concatenated Translator Roles, Expressed as Functions}
+\label{aut:lng:key:ctf}
+
+The following keys are similar in function to \texttt{translator}. They are used to indicate additional roles of the translator, \eg\ <translator and commentator>, <translator and introduction>.
+
+\begin{keymarglist}
+\item[translatorco] Used if \bibfield{translator}\slash \bibfield{commentator} are identical.
+\item[translatorsco] The plural form of \texttt{translatorco}.
+\item[translatoran] Used if \bibfield{translator}\slash \bibfield{annotator} are identical.
+\item[translatorsan] The plural form of \texttt{translatoran}.
+\item[translatorin] Used if \bibfield{translator}\slash \bibfield{introduction} are identical.
+\item[translatorsin] The plural form of \texttt{translatorin}.
+\item[translatorfo] Used if \bibfield{translator}\slash \bibfield{foreword} are identical.
+\item[translatorsfo] The plural form of \texttt{translatorfo}.
+\item[translatoraf] Used if \bibfield{translator}\slash \bibfield{aftword} are identical.
+\item[translatorsaf] The plural form of \texttt{translatoraf}.
+\end{keymarglist}
+%
+Keys for \bibfield{translator}\slash \bibfield{commentator}\slash \prm{role} combinations:
+
+\begin{keymarglist}
+\item[translatorcoin] Used if \bibfield{translator}\slash \bibfield{commentator}\slash \bibfield{introduction} are identical.
+\item[translatorscoin] The plural form of \texttt{translatorcoin}.
+\item[translatorcofo] Used if \bibfield{translator}\slash \bibfield{commentator}\slash \bibfield{foreword} are identical.
+\item[translatorscofo] The plural form of \texttt{translatorcofo}.
+\item[translatorcoaf] Used if \bibfield{translator}\slash \bibfield{commentator}\slash \bibfield{aftword} are identical.
+\item[translatorscoaf] The plural form of \texttt{translatorcoaf}.
+\end{keymarglist}
+%
+Keys for \bibfield{translator}\slash \bibfield{annotator}\slash \prm{role} combinations:
+
+\begin{keymarglist}
+\item[translatoranin] Used if \bibfield{translator}\slash \bibfield{annotator}\slash \bibfield{introduction} are identical.
+\item[translatorsanin] The plural form of \texttt{translatoranin}.
+\item[translatoranfo] Used if \bibfield{translator}\slash \bibfield{annotator}\slash \bibfield{foreword} are identical.
+\item[translatorsanfo] The plural form of \texttt{translatoranfo}.
+\item[translatoranaf] Used if \bibfield{translator}\slash \bibfield{annotator}\slash \bibfield{aftword} are identical.
+\item[translatorsanaf] The plural form of \texttt{translatoranaf}.
+\end{keymarglist}
+
+\paragraph{Roles, Expressed as Actions}
+\label{aut:lng:key:eac}
+
+The following keys refer to roles which are expressed as an action (<edited by>, <translated by>) rather than as a function (<editor>, <translator>).
+
+\begin{keymarglist}
+\item[byauthor] The expression <[created] by \prm{name}>.
+\item[byeditor] The expression <edited by \prm{name}>.
+\item[bycompiler] The expression <compiled by \prm{name}>.
+\item[byfounder] The expression <founded by \prm{name}>.
+\item[bycontinuator] The expression <continued by \prm{name}>.
+\item[byredactor] The expression <redacted by \prm{name}>.
+\item[byreviser] The expression <revised by \prm{name}>.
+\item[byreviewer] The expression <reviewed by \prm{name}>.
+\item[bycollaborator] An expression like <in collaboration with \prm{name}> or <in cooperation with \prm{name}>.
+\item[bytranslator] The expression <translated by \prm{name}> or <translated from \prm{language} by \prm{name}>.
+\item[bycommentator] The expression <commented by \prm{name}>.
+\item[byannotator] The expression <annotated by \prm{name}>.
+\item[byorganizer] The expression <[organized] by \prm{name}>.
+\end{keymarglist}
+
+\paragraph{Concatenated Editor Roles, Expressed as Actions}
+\label{aut:lng:key:cea}
+
+The following keys are similar in function to \texttt{byeditor}, \texttt{bytranslator}, etc. They are used to indicate additional roles of the editor, \eg\ <edited and translated by>, <edited and furnished with an introduction by>, <edited, with a foreword, by>.
+
+\begin{keymarglist}
+\item[byeditortr] Used if \bibfield{editor}\slash \bibfield{translator} are identical.
+\item[byeditorco] Used if \bibfield{editor}\slash \bibfield{commentator} are identical.
+\item[byeditoran] Used if \bibfield{editor}\slash \bibfield{annotator} are identical.
+\item[byeditorin] Used if \bibfield{editor}\slash \bibfield{introduction} are identical.
+\item[byeditorfo] Used if \bibfield{editor}\slash \bibfield{foreword} are identical.
+\item[byeditoraf] Used if \bibfield{editor}\slash \bibfield{aftword} are identical.
+\end{keymarglist}
+%
+Keys for \bibfield{editor}\slash \bibfield{translator}\slash \prm{role} combinations:
+
+\begin{keymarglist}
+\item[byeditortrco] Used if \bibfield{editor}\slash \bibfield{translator}\slash \bibfield{commentator} are identical.
+\item[byeditortran] Used if \bibfield{editor}\slash \bibfield{translator}\slash \bibfield{annotator} are identical.
+\item[byeditortrin] Used if \bibfield{editor}\slash \bibfield{translator}\slash \bibfield{introduction} are identical.
+\item[byeditortrfo] Used if \bibfield{editor}\slash \bibfield{translator}\slash \bibfield{foreword} are identical.
+\item[byeditortraf] Used if \bibfield{editor}\slash \bibfield{translator}\slash \bibfield{aftword} are identical.
+\end{keymarglist}
+%
+Keys for \bibfield{editor}\slash \bibfield{commentator}\slash \prm{role} combinations:
+
+\begin{keymarglist}
+\item[byeditorcoin] Used if \bibfield{editor}\slash \bibfield{commentator}\slash \bibfield{introduction} are identical.
+\item[byeditorcofo] Used if \bibfield{editor}\slash \bibfield{commentator}\slash \bibfield{foreword} are identical.
+\item[byeditorcoaf] Used if \bibfield{editor}\slash \bibfield{commentator}\slash \bibfield{aftword} are identical.
+\end{keymarglist}
+%
+Keys for \bibfield{editor}\slash \bibfield{annotator}\slash \prm{role} combinations:
+
+\begin{keymarglist}
+\item[byeditoranin] Used if \bibfield{editor}\slash \bibfield{annotator}\slash \bibfield{introduction} are identical.
+\item[byeditoranfo] Used if \bibfield{editor}\slash \bibfield{annotator}\slash \bibfield{foreword} are identical.
+\item[byeditoranaf] Used if \bibfield{editor}\slash \bibfield{annotator}\slash \bibfield{aftword} are identical.
+\end{keymarglist}
+%
+Keys for \bibfield{editor}\slash \bibfield{translator}\slash \bibfield{commentator}\slash \prm{role} combinations:
+
+\begin{keymarglist}
+\item[byeditortrcoin] Used if \bibfield{editor}\slash \bibfield{translator}\slash \bibfield{commentator}\slash \bibfield{introduction} are identical.
+\item[byeditortrcofo] Used if \bibfield{editor}\slash \bibfield{translator}\slash \bibfield{commentator}\slash \bibfield{foreword} are identical.
+\item[byeditortrcoaf] Used if \bibfield{editor}\slash \bibfield{translator}\slash \bibfield{commentator}\slash \bibfield{aftword} are identical.
+\end{keymarglist}
+%
+Keys for \bibfield{editor}\slash \bibfield{translator}\slash \bibfield{annotator}\slash \prm{role} combinations:
+
+\begin{keymarglist}
+\item[byeditortranin] Used if \bibfield{editor}\slash \bibfield{annotator}\slash \bibfield{commentator}\slash \bibfield{introduction} are identical.
+\item[byeditortranfo] Used if \bibfield{editor}\slash \bibfield{annotator}\slash \bibfield{commentator}\slash \bibfield{foreword} are identical.
+\item[byeditortranaf] Used if \bibfield{editor}\slash \bibfield{annotator}\slash \bibfield{commentator}\slash \bibfield{aftword} are identical.
+\end{keymarglist}
+
+\paragraph{Concatenated Translator Roles, Expressed as Actions}
+\label{aut:lng:key:cta}
+
+The following keys are similar in function to \texttt{bytranslator}. They are used to indicate additional roles of the translator, \eg\ <translated and commented by>, <translated and furnished with an introduction by>, <translated, with a foreword, by>.
+
+\begin{keymarglist}
+\item[bytranslatorco] Used if \bibfield{translator}\slash \bibfield{commentator} are identical.
+\item[bytranslatoran] Used if \bibfield{translator}\slash \bibfield{annotator} are identical.
+\item[bytranslatorin] Used if \bibfield{translator}\slash \bibfield{introduction} are identical.
+\item[bytranslatorfo] Used if \bibfield{translator}\slash \bibfield{foreword} are identical.
+\item[bytranslatoraf] Used if \bibfield{translator}\slash \bibfield{aftword} are identical.
+\end{keymarglist}
+%
+Keys for \bibfield{translator}\slash \bibfield{commentator}\slash \prm{role} combinations:
+
+\begin{keymarglist}
+\item[bytranslatorcoin] Used if \bibfield{translator}\slash \bibfield{commentator}\slash \bibfield{introduction} are identical.
+\item[bytranslatorcofo] Used if \bibfield{translator}\slash \bibfield{commentator}\slash \bibfield{foreword} are identical.
+\item[bytranslatorcoaf] Used if \bibfield{translator}\slash \bibfield{commentator}\slash \bibfield{aftword} are identical.
+\end{keymarglist}
+%
+Keys for \bibfield{translator}\slash \bibfield{annotator}\slash \prm{role} combinations:
+
+\begin{keymarglist}
+\item[bytranslatoranin] Used if \bibfield{translator}\slash \bibfield{annotator}\slash \bibfield{introduction} are identical.
+\item[bytranslatoranfo] Used if \bibfield{translator}\slash \bibfield{annotator}\slash \bibfield{foreword} are identical.
+\item[bytranslatoranaf] Used if \bibfield{translator}\slash \bibfield{annotator}\slash \bibfield{aftword} are identical.
+\end{keymarglist}
+
+\paragraph{Roles, Expressed as Objects}
+\label{aut:lng:key:rob}
+
+Roles which are related to supplementary material may also be expressed as objects (<with a commentary by>) rather than as functions (<commentator>) or as actions (<commented by>).
+
+\begin{keymarglist}
+\item[withcommentator] The expression <with a commentary by \prm{name}>.
+\item[withannotator] The expression <with annotations by \prm{name}>.
+\item[withintroduction] The expression <with an introduction by \prm{name}>.
+\item[withforeword] The expression <with a foreword by \prm{name}>.
+\item[withafterword] The expression <with an afterword by \prm{name}>.
+\end{keymarglist}
+
+\paragraph{Supplementary Material}
+\label{aut:lng:key:mat}
+
+\begin{keymarglist}
+\item[commentary] The term <commentary>.
+\item[annotations] The term <annotations>.
+\item[introduction] The term <introduction>.
+\item[foreword] The term <foreword>.
+\item[afterword] The term <afterword>.
+\end{keymarglist}
+
+\paragraph{Publication Details}
+\label{aut:lng:key:pdt}
+
+\begin{keymarglist}
+\item[volume] The term <volume>, referring to a book.
+\item[volumes] The plural form of \texttt{volume}.
+\item[involumes] The term <in>, as used in expressions like <in \prm{number of volumes} volumes>.
+\item[jourvol] The term <volume>, referring to a journal.
+\item[jourser] The term <series>, referring to a journal.
+\item[book] The term <book>, referring to a document division.
+\item[part] The term <part>, referring to a part of a book or a periodical.
+\item[issue] The term <issue>, referring to a periodical.
+\item[newseries] The expression <new series>, referring to a journal.
+\item[oldseries] The expression <old series>, referring to a journal.
+\item[edition] The term <edition>.
+\item[in] The term <in>, referring to the title of a work published as part of another one, \eg\ <\prm{title of article} in \prm{title of journal}>.
+\item[inseries] The term <in>, as used in expressions like <volume \prm{number} in \prm{name of series}>.
+\item[ofseries] The term <of>, as used in expressions like <volume \prm{number} of \prm{name of series}>.
+\item[number] The term <number>, referring to an issue of a journal.
+\item[chapter] The term <chapter>, referring to a chapter in a book.
+\item[version] The term <version>, referring to a revision number.
+\item[reprint] The term <reprint>.
+\item[reprintof] The expression <reprint of \prm{title}>.
+\item[reprintas] The expression <reprinted as \prm{title}>.
+\item[reprintfrom] The expression <reprinted from \prm{title}>.
+\item[translationof] The expression <translation of \prm{title}>.
+\item[translationas] The expression <translated as \prm{title}>.
+\item[translationfrom] The expression <translated from [the] \prm{language}>.
+\item[reviewof] The expression <review of \prm{title}>.
+\item[origpubas] The expression <originally published as \prm{title}>.
+\item[origpubin] The expression <originally published in \prm{year}>.
+\item[astitle] The term <as>, as used in expressions like <published by \prm{publisher} as \prm{title}>.
+\item[bypublisher] The term <by>, as used in expressions like <published by \prm{publisher}>.
+\end{keymarglist}
+
+\paragraph{Publication State}
+\label{aut:lng:key:pst}
+
+\begin{keymarglist}
+\item[inpreparation] The expression <in preparation> (the manuscript is being prepared for publication).
+\item[submitted] The expression <submitted> (the manuscript has been submitted to a journal or conference).
+\item[forthcoming] The expression <forthcoming> (the manuscript has been accepted by a press or journal).
+\item[inpress] The expression <in press> (the manuscript is fully copyedited and out of the author's hands; it is in the final stages of the production process).
+\item[prepublished] The expression <pre-published> (the manuscript is published in a preliminary form or location, such as online version in advance of print publication).
+\end{keymarglist}
+
+\paragraph{Pagination}
+\label{aut:lng:key:pag}
+
+\begin{keymarglist}
+\item[page] The term <page>.
+\item[pages] The plural form of \texttt{page}.
+\item[column] The term <column>, referring to a column on a page.
+\item[columns] The plural form of \texttt{column}.
+\item[section] The term <section>, referring to a document division (usually abbreviated as \S).
+\item[sections] The plural form of \texttt{section} (usually abbreviated as \S\S).
+\item[paragraph] The term <paragraph> (\ie a block of text, not to be confused with \texttt{section}).
+\item[paragraphs] The plural form of \texttt{paragraph}.
+\item[verse] The term <verse> as used when referring to a work which is cited by verse numbers.
+\item[verses] The plural form of \texttt{verse}.
+\item[line] The term <line> as used when referring to a work which is cited by line numbers.
+\item[lines] The plural form of \texttt{line}.
+\item[pagetotal] The term <page> as used in \cmd{mkpageprefix}.
+\item[pagetotals] The plural form of \texttt{pagetotal}.
+\item[columntotal] The term <column>, referring to a column on a page, as used in \cmd{mkpageprefix}.
+\item[columntotals] The plural form of \texttt{columntotal}.
+\item[sectiontotal] The term <section>, referring to a document division (usually abbreviated as \S), as used in \cmd{mkpageprefix}.
+\item[sectiontotals] The plural form of \texttt{sectiontotal} (usually abbreviated as \S\S).
+\item[paragraphtotal] The term <paragraph> (\ie a block of text, not to be confused with \texttt{section}) as used in \cmd{mkpageprefix}.
+\item[paragraphtotals] The plural form of \texttt{paragraphtotal}.
+\item[versetotal] The term <verse> as used when referring to a work which is cited by verse numbers when used in \cmd{mkpageprefix}.
+\item[versetotals] The plural form of \texttt{versetotal}.
+\item[linetotal] The term <line> as used when referring to a work which is cited by line numbers when used in \cmd{mkpageprefix}.
+\item[linetotals] The plural form of \texttt{linetotal}.
+\end{keymarglist}
+
+\paragraph{Types}
+\label{aut:lng:key:typ}
+
+The following keys are typically used in the \bibfield{type} field of \bibtype{thesis}, \bibtype{report}, \bibtype{misc}, and other entries:
+
+\begin{keymarglist}
+\item[bathesis] An expression equivalent to the term <Bachelor's thesis>.
+\item[mathesis] An expression equivalent to the term <Master's thesis>.
+\item[phdthesis] The term <PhD thesis>, <PhD dissertation>, <doctoral thesis>, etc.
+\item[candthesis] An expression equivalent to the term <Candidate thesis>. Used for <Candidate> degrees that have no clear equivalent to the Master's or doctoral level.
+\item[techreport] The term <technical report>.
+\item[resreport] The term <research report>.
+\item[software] The term <computer software>.
+\item[datacd] The term <data \textsc{cd}> or <\textsc{cd-rom}>.
+\item[audiocd] The term <audio \textsc{cd}>.
+\end{keymarglist}
+
+\paragraph{Miscellaneous}
+\label{aut:lng:key:msc}
+
+\begin{keymarglist}
+\item[nodate] The term to use in place of a date when there is no date for an entry \eg\ <n.d.>
+\item[and] The term <and>, as used in a list of authors or editors, for example.
+\item[andothers] The expression <and others> or <et alii>, used to mark the truncation of a name list.
+\item[andmore] Like \texttt{andothers} but used to mark the truncation of a literal list.
+\end{keymarglist}
+
+\paragraph{Labels}
+\label{aut:lng:key:lab}
+
+The following strings are intended for use as labels, \eg\ <Address: \prm{url}> or <Abstract: \prm{abstract}>.
+
+\begin{keymarglist}
+\item[url] The term <address> in the sense of an internet address.
+\item[urlfrom] An expression like <available from \prm{url}> or <available at \prm{url}>.
+\item[urlseen] An expression like <accessed on \prm{date}>, <retrieved on \prm{date}>, <visited on \prm{date}>, referring to the access date of an online resource.
+\item[file] The term <file>.
+\item[library] The term <library>.
+\item[abstract] The term <abstract>.
+\item[annotation] The term <annotations>.
+\end{keymarglist}
+
+\paragraph{Citations}
+\label{aut:lng:key:cit}
+
+Traditional scholarly expressions used in citations:
+
+\begin{keymarglist}
+\item[idem] The term equivalent to the Latin <idem> (<the same [person]>).
+\item[idemsf] The feminine singular form of \texttt{idem}.
+\item[idemsm] The masculine singular form of \texttt{idem}.
+\item[idemsn] The neuter singular form of \texttt{idem}.
+\item[idempf] The feminine plural form of \texttt{idem}.
+\item[idempm] The masculine plural form of \texttt{idem}.
+\item[idempn] The neuter plural form of \texttt{idem}.
+\item[idempp] The plural form of \texttt{idem} suitable for a mixed gender list of names.
+\item[ibidem] The term equivalent to the Latin <ibidem> (<in the same place>).
+\item[opcit] The term equivalent to the Latin term <opere citato> (<[in] the work [already] cited>).
+\item[loccit] The term equivalent to the Latin term <loco citato> (<[at] the place [already] cited>).
+\item[confer] The term equivalent to the Latin <confer> (<compare>).
+\item[sequens] The term equivalent to the Latin <sequens> (<[and] the following [page]>), as used to indicate a range of two pages when only the starting page is provided (\eg\ <25\,sq.> or <25\,f.> instead of <25--26>).
+\item[sequentes] The term equivalent to the Latin <sequentes> (<[and] the following [pages]>), as used to indicate an open"=ended range of pages when only the starting page is provided (\eg\ <25\,sqq.> or <25\,ff.>).
+\item[passim] The term equivalent to the Latin <passim> (<throughout>, <here and there>, <scatteredly>).
+\end{keymarglist}
+%
+Other expressions frequently used in citations:
+
+\begin{keymarglist}
+\item[see] The term <see>.
+\item[seealso] The expression <see also>.
+\item[seenote] An expression like <see note \prm{footnote}> or <as in \prm{footnote}>, used to refer to a previous footnote in a citation.
+\item[backrefpage] An expression like <see page \prm{page}> or <cited on page \prm{page}>, used to introduce back references in the bibliography.
+\item[backrefpages] The plural form of \texttt{backrefpage}, \eg\ <see pages \prm{pages}> or <cited on pages \prm{pages}>.
+\item[quotedin] An expression like <quoted in \prm{citation}>, used when quoting a passage which was already a quotation in the cited work.
+\item[citedas] An expression like <henceforth cited as \prm{shorthand}>, used to introduce a shorthand in a citation.
+\item[thiscite] The expression used in some verbose citation styles to differentiate between the page range of the cited item (typically an article in a journal, collection, or conference proceedings) and the page number the citation refers to. For example: \enquote{Author, Title, in: Book, pp. 45--61, \texttt{thiscite} p. 52.}
+\end{keymarglist}
+
+\paragraph{Month Names}
+\label{aut:lng:key:mon}
+
+\begin{keymarglist}
+\item[january] The name <January>.
+\item[february] The name <February>.
+\item[march] The name <March>.
+\item[april] The name <April>.
+\item[may] The name <May>.
+\item[june] The name <June>.
+\item[july] The name <July>.
+\item[august] The name <August>.
+\item[september] The name <September>.
+\item[october] The name <October>.
+\item[november] The name <November>.
+\item[december] The name <December>.
+\end{keymarglist}
+
+\paragraph{Language Names}
+\label{aut:lng:key:lng}
+
+\begin{keymarglist}
+\item[langamerican] The language <American> or <American English>.
+\item[langbasque] The language <Basque>.
+\item[langbrazilian] The language <Brazilian> or <Brazilian Portuguese>.
+\item[langbulgarian] The language <Bulgarian>.
+\item[langcatalan] The language <Catalan>.
+\item[langcroatian] The language <Croatian>.
+\item[langczech] The language <Czech>.
+\item[langdanish] The language <Danish>.
+\item[langdutch] The language <Dutch>.
+\item[langenglish] The language <English>.
+\item[langestonian] The language <Estonian>.
+\item[langfinnish] The language <Finnish>.
+\item[langfrench] The language <French>.
+\item[langgerman] The language <German>.
+\item[langgreek] The language <Greek>.
+\item[langhungarian] The language <Hungarian>.
+\item[langitalian] The language <Italian>.
+\item[langjapanese] The language <Japanese>.
+\item[langlatin] The language <Latin>.
+\item[langlatvian] The language <Latvian>.
+\item[langlithuanian] The language <Lithuanian>.
+\item[langmarathi] The language <Marathi>.
+\item[langnorwegian] The language <Norwegian>.
+\item[langpolish] The language <Polish>.
+\item[langportuguese] The language <Portuguese>.
+\item[langromanian] The language <Romanian>.
+\item[langrussian] The language <Russian>.
+\item[langserbian] The language <Serbian>.
+\item[langslovak] The language <Slovak>.
+\item[langslovene] The language <Slovene>.
+\item[langspanish] The language <Spanish>.
+\item[langswedish] The language <Swedish>.
+\item[langturkish] The language <Turkish>.
+\item[langukrainian] The language <Ukrainian>.
+\end{keymarglist}
+%
+The following strings are intended for use in phrases like <translated from [the] English by \prm{translator}>:
+
+\begin{keymarglist}
+\item[fromamerican] The expression <from [the] American> or <from [the] American English>.
+\item[frombasque] The expression <from [the] Basque>.
+\item[frombrazilian] The expression <from [the] Brazilian> or <from [the] Brazilian Portuguese>.
+\item[frombulgarian] The expression <from [the] Bulgarian>.
+\item[fromcatalan] The expression <from [the] Catalan>.
+\item[fromcroatian] The expression <from [the] Croatian>.
+\item[fromczech] The expression <from [the] Czech>.
+\item[fromdanish] The expression <from [the] Danish>.
+\item[fromdutch] The expression <from [the] Dutch>.
+\item[fromenglish] The expression <from [the] English>.
+\item[fromestonian] The expression <from [the] Estonian>.
+\item[fromfinnish] The expression <from [the] Finnish>.
+\item[fromfrench] The expression <from [the] French>.
+\item[fromgerman] The expression <from [the] German>.
+\item[fromgreek] The expression <from [the] Greek>.
+\item[fromhungarian] The language <from [the] Hungarian>.
+\item[fromitalian] The expression <from [the] Italian>.
+\item[fromjapanese] The expression <from [the] Japanese>.
+\item[fromlatin] The expression <from [the] Latin>.
+\item[fromlatvian] The expression <from [the] Latvian>.
+\item[fromlithuanian] The language <from [the] Lithuanian>.
+\item[frommarathi] The expression <from [the] Marathi>.
+\item[fromnorwegian] The expression <from [the] Norwegian>.
+\item[frompolish] The expression <from [the] Polish>.
+\item[fromportuguese] The expression <from [the] Portuguese>.
+\item[fromromanian] The expression <from [the] Romanian>.
+\item[fromrussian] The expression <from [the] Russian>.
+\item[fromserbian] The expression <from [the] Serbian>.
+\item[fromslovak] The expression <from [the] Slovak>.
+\item[fromslovene] The expression <from [the] Slovene>.
+\item[fromspanish] The expression <from [the] Spanish>.
+\item[fromswedish] The expression <from [the] Swedish>.
+\item[fromturkish] The expression <from [the] Turkish>.
+\item[fromukrainian] The expression <from [the] Ukrainian>.
+\end{keymarglist}
+
+\paragraph{Country Names}
+\label{aut:lng:key:cnt}
+
+Country names are localised by using the string \texttt{country} plus the \acr{ISO}-3166 country code as the key. The short version of the translation should be the \acr{ISO}-3166 country code. Note that only a small number of country names is defined by default, mainly to illustrate this scheme. These keys are used in the \bibfield{location} list of \bibtype{patent} entries but they may be useful for other purposes as well.
+
+\begin{keymarglist}
+\item[countryde] The name <Germany>, abbreviated as \texttt{DE}.
+\item[countryeu] The name <European Union>, abbreviated as \texttt{EU}.
+\item[countryep] Similar to \opt{countryeu} but abbreviated as \texttt{EP}. This is intended for \bibfield{patent} entries.
+\item[countryfr] The name <France>, abbreviated as \texttt{FR}.
+\item[countryuk] The name <United Kingdom>, abbreviated (according to \acr{ISO}-3166) as \texttt{GB}.
+\item[countryus] The name <United States of America>, abbreviated as \texttt{US}.
+\end{keymarglist}
+
+\paragraph{Patents and Patent Requests}
+\label{aut:lng:key:pat}
+
+Strings related to patents are localised by using the term \texttt{patent} plus the \acr{ISO}-3166 country code as the key. Note that only a small number of patent keys is defined by default, mainly to illustrate this scheme. These keys are used in the \bibfield{type} field of \bibtype{patent} entries.
+
+\begin{keymarglist}
+\item[patent] The generic term <patent>.
+\item[patentde] The expression <German patent>.
+\item[patenteu] The expression <European patent>.
+\item[patentfr] The expression <French patent>.
+\item[patentuk] The expression <British patent>.
+\item[patentus] The expression <U.S. patent>.
+\end{keymarglist}
+%
+Patent requests are handled in a similar way, using the string \texttt{patreq} as the base name of the key:
+
+\begin{keymarglist}
+\item[patreq] The generic term <patent request>.
+\item[patreqde] The expression <German patent request>.
+\item[patreqeu] The expression <European patent request>.
+\item[patreqfr] The expression <French patent request>.
+\item[patrequk] The expression <British patent request>.
+\item[patrequs] The expression <U.S. patent request>.
+\end{keymarglist}
+
+\paragraph{Dates and Times}
+\label{aut:lng:key:dt}
+
+Abbreviation strings for standard eras. Both secular and Christian variants
+are supported.
+
+\begin{keymarglist}
+\item[commonera] The era <CE>
+\item[beforecommonera] The era <BCE>
+\item[annodomini] The era <AD>
+\item[beforechrist] The era <BC>
+\end{keymarglist}
+
+Abbreviation strings for <circa> dates:
+
+\begin{keymarglist}
+\item[circa] The string <circa>
+\end{keymarglist}
+
+Abbreviation strings for year divisions parsed from \acr{ISO8601-2} Extended Format dates:
+
+\begin{keymarglist}
+\item[spring] The string <spring>
+\item[summer] The string <summer>
+\item[autumn] The string <autumn>
+\item[winter] The string <winter>
+\item[springN] The string <spring (Northern Hemisphere)>
+\item[summerN] The string <summer (Northern Hemisphere)>
+\item[autumnN] The string <autumn (Northern Hemisphere)>
+\item[winterN] The string <winter (Northern Hemisphere)>
+\item[springS] The string <spring (Southern Hemisphere)>
+\item[summerS] The string <summer (Southern Hemisphere)>
+\item[autumnS] The string <autumn (Southern Hemisphere)>
+\item[winterS] The string <winter (Southern Hemisphere)>
+\item[Q1] The string <Quarter 1>
+\item[Q2] The string <Quarter 2>
+\item[Q3] The string <Quarter 3>
+\item[Q4] The string <Quarter 3>
+\item[QD1] The string <Quadrimester 1>
+\item[QD2] The string <Quadrimester 2>
+\item[QD3] The string <Quadrimester 3>
+\item[S1] The string <Semestral 1>
+\item[S2] The string <Semestral 2>
+\end{keymarglist}
+
+Abbreviation strings for AM/PM:
+
+\begin{keymarglist}
+\item[am] The string <AM>
+\item[pm] The string <PM>
+\end{keymarglist}
+
+\subsection{Formatting Commands}
+\label{aut:fmt}
+
+This section corresponds to \secref{use:fmt} in the user part of this manual. Bibliography and citation styles should incorporate the commands and facilities discussed in this section in order to provide a certain degree of high"=level configurability. Users should not be forced to write new styles if all they want to do is modify the spacing in the bibliography or the punctuation used in citations.
+
+\subsubsection{User-definable Commands and Hooks}
+\label{aut:fmt:fmt}
+
+This section corresponds to \secref{use:fmt:fmt} in the user part of the manual. The commands and hooks discussed here are meant to be redefined by users, but bibliography and citation styles may provide a default definition which is different from the package default. These commands are defined in \path{biblatex.def}. Note that all commands starting with \cmd{mk\dots} take one mandatory argument.
+
+\begin{ltxsyntax}
+\csitem{bibsetup}
+Arbitrary code to be executed at the beginning of the bibliography, intended for commands which affect the layout of the bibliography.
+
+\csitem{bibfont}
+Arbitrary code setting the font used in the bibliography. This is very similar to \cmd{bibsetup} but intended for switching fonts.
+
+\csitem{citesetup}
+Arbitrary code to be executed at the beginning of each citation command.
+
+\csitem{newblockpunct}
+The separator inserted between <blocks> in the sense explained in \secref{aut:pct:new}. The default definition is controlled by the package option \opt{block} (see \secref{use:opt:pre:gen}).
+
+\csitem{newunitpunct}
+The separator inserted between <units> in the sense explained in \secref{aut:pct:new}. This will usually be a period or a comma plus an interword space. The default definition is a period and a space.
+
+\csitem{finentrypunct}
+The punctuation printed at the very end of every bibliography entry, usually a period. The default definition is a period.
+
+\csitem{entrysetpunct}
+The punctuation printed between bibliography subentries of an entry set. The default definition is a semicolon and a space.
+
+\csitem{bibnamedelima}
+This delimiter controls the spacing between the elements which make up a name part. It is inserted automatically by the backend after the first name element if the element is less than three characters long and before the last element. The default definition is \cmd{addhighpenspace}, \ie a space penalized by the value of the \cnt{highnamepenalty} counter (\secref{use:fmt:len}). Please refer to \secref{use:cav:nam} for further details.
+
+\csitem{bibnamedelimb}
+This delimiter controls the spacing between the elements which make up a name part. It is inserted automatically by the backend between all name elements where \cmd{bibnamedelima} does not apply. The default definition is \cmd{addlowpenspace}, \ie a space penalized by the value of the \cnt{lownamepenalty} counter (\secref{use:fmt:len}). Please refer to \secref{use:cav:nam} for further details.
+
+\csitem{bibnamedelimc}
+This delimiter controls the spacing between name parts. The default name formats use it between the name prefix and the family name if \kvopt{useprefix}{true}. The default definition is \cmd{addhighpenspace}, \ie a space penalized by the value of the \cnt{highnamepenalty} counter (\secref{use:fmt:len}). Please refer to \secref{use:cav:nam} for further details.
+
+\csitem{bibnamedelimd}
+This delimiter controls the spacing between name parts. The default name formats use it between all name parts where \cmd{bibnamedelimc} does not apply. The default definition is \cmd{addlowpenspace}, \ie a space penalized by the value of the \cnt{lownamepenalty} counter (\secref{use:fmt:len}). Please refer to \secref{use:cav:nam} for further details.
+
+\csitem{bibnamedelimi}
+This delimiter replaces \cmd{bibnamedelima/b} after initials. Note that this only applies to initials given as such in the \file{bib} file, not to the initials automatically generated by \biblatex which use their own set of delimiters.
+
+\csitem{bibinitperiod}
+The punctuation inserted automatically by the backend after all initials unless \cmd{bibinithyphendelim} applies. The default definition is a period (\cmd{adddot}). Please refer to \secref{use:cav:nam} for further details.
+
+\csitem{bibinitdelim}
+The spacing inserted automatically by the backend between multiple initials unless \cmd{bibinithyphendelim} applies. The default definition is an unbreakable interword space. Please refer to \secref{use:cav:nam} for further details.
+
+\csitem{bibinithyphendelim}
+The punctuation inserted automatically by the backend between the initials of hyphenated name parts, replacing \cmd{bibinitperiod} and \cmd{bibinitdelim}. The default definition is a period followed by an unbreakable hyphen. Please refer to \secref{use:cav:nam} for further details.
+
+\csitem{bibindexnamedelima}
+Replaces \cmd{bibnamedelima} in the index.
+
+\csitem{bibindexnamedelimb}
+Replaces \cmd{bibnamedelimb} in the index.
+
+\csitem{bibindexnamedelimc}
+Replaces \cmd{bibnamedelimc} in the index.
+
+\csitem{bibindexnamedelimd}
+Replaces \cmd{bibnamedelimd} in the index.
+
+\csitem{bibindexnamedelimi}
+Replaces \cmd{bibnamedelimi} in the index.
+
+\csitem{bibindexinitperiod}
+Replaces \cmd{bibinitperiod} in the index.
+
+\csitem{bibindexinitdelim}
+Replaces \cmd{bibinitdelim} in the index.
+
+\csitem{bibindexinithyphendelim}
+Replaces \cmd{bibinithyphendelim} in the index.
+
+\csitem{revsdnamepunct}
+The punctuation to be printed between the given and family name parts when a name is reversed. The default is a comma. This command should be incorporated in formatting directives for name lists. Please refer to \secref{use:cav:nam} for further details.
+
+\csitem{bibnamedash}
+The dash to be used as a replacement for recurrent authors or editors in the bibliography. The default is an <em> or an <en> dash, depending on the indentation of the list of references.
+
+\csitem{labelnamepunct}\DeprecatedMark
+A separator to be printed after the name used for alphabetizing in the bibliography (\bibfield{author} or \bibfield{editor}, if the \bibfield{author} field is undefined) instead of \cmd{newunitpunct}. The default is \cmd{newunitpunct}, \ie it is not handled differently from regular unit punctuation but permits convenient reconfiguration. This punctuation command is deprecated and has been superseded by the context-sensitive \cmd{nametitledelim} (see \secref{use:fmt:csd}). For backwards compatibility reasons, however, \cmd{nametitledelim} still defaults to \cmd{labelnamepunct} in the \texttt{bib} and \texttt{biblist} contexts. Style authors may want to consider replacing \cmd{labelnampunct} with \texttt{\textbackslash printdelim\{nametitledelim\}} and users may want to prefer modifying the context-sensitive \texttt{nametitledelim} with \cmd{DeclareDelimFormat} over redefining \cmd{labelnamepunct}, \eg
+\begin{ltxexample}
+\DeclareDelimFormat[bib]{nametitledelim}{%
+ \addcolon\space}
+\end{ltxexample}
+
+
+\csitem{subtitlepunct}
+The separator to be printed between the fields \bibfield{title} and \bibfield{subtitle}, \bibfield{booktitle} and \bibfield{booksubtitle}, as well as \bibfield{maintitle} and \bibfield{mainsubtitle}. Use this separator instead of \cmd{newunitpunct} at this location. The default is \cmd{newunitpunct}, \ie it is not handled differently from regular unit punctuation but permits convenient reconfiguration.
+
+\csitem{intitlepunct}
+The separator to be printed between the word «in» and the following title in entry types such as \bibtype{article}, \bibtype{inbook}, \bibtype{incollection}, etc. Use this separator instead of \cmd{newunitpunct} at this location. The default definition is a colon plus an interword space.
+
+\csitem{bibpagespunct}
+The separator to be printed before the \bibfield{pages} field. Use this separator instead of \cmd{newunitpunct} at this location. The default is a comma plus an interword space.
+
+\csitem{bibpagerefpunct}
+The separator to be printed before the \bibfield{pageref} field. Use this separator instead of \cmd{newunitpunct} at this location. The default is an interword space.
+
+\csitem{bibeidpunct}
+The separator printed before the \bibfield{eid} field (similar to \cmd{bibpagespunct}). The default is a comma plus an interword space.
+
+\csitem{multinamedelim}\CSdelimMark
+The delimiter to be printed between multiple items in a name list like \bibfield{author} or \bibfield{editor} if there are more than two names in the list. If there are only two names in the list, use the \cmd{finalnamedelim} instead. This command should be incorporated in all formatting directives for name lists. The default is a comma followed by an interword space.
+
+\csitem{finalnamedelim}\CSdelimMark
+Use this command instead of \cmd{multinamedelim} before the final name in a name list. The default is the localised term <and>, separated by interword spaces.
+
+\csitem{revsdnamedelim}\CSdelimMark
+The extra delimiter to be printed after the first name in a name list consisting of two names (in addition to \cmd{finalnamedelim}) if the first name is reversed. This command should be incorporated in all formatting directives for name lists.
+
+\csitem{andothersdelim}\CSdelimMark
+The delimiter to be printed before the localisation string <\texttt{andothers}> if a name list like \bibfield{author} or \bibfield{editor} is truncated. This command should be incorporated in all formatting directives for name lists. The default is an interword space.
+
+\csitem{multilistdelim}\CSdelimMark
+The delimiter to be printed between multiple items in a literal list like \bibfield{publisher} or \bibfield{location} if there are more than two names in the list. If there are only two items in the list, use the \cmd{finallistdelim} instead. This command should be incorporated in all formatting directives for literal lists. The default is a comma plus an interword space.
+
+\csitem{finallistdelim}\CSdelimMark
+Use this command instead of \cmd{multilistdelim} before the final item in a literal list. The default is the localised term <and>, separated by interword spaces.
+
+\csitem{andmoredelim}\CSdelimMark
+The delimiter to be printed before the localisation string <\texttt{andmore}> if a literal list like \bibfield{publisher} or \bibfield{location} is truncated. This command should be incorporated in all formatting directives for literal lists. The default is an interword space.
+
+\csitem{multicitedelim}
+The delimiter printed between citations if multiple entry keys are passed to a single citation command. This command should be incorporated in the definition of all citation commands, for example in the \prm{sepcode} argument passed to \cmd{DeclareCiteCommand}. See \secref{aut:cbx:cbx} for details. The default is a semicolon plus an interword space.
+
+\csitem{multiciterangedelim}
+The delimiter printed between two citations if they are compressed to a range. The default is \cmd{bibrangedash}.
+
+\csitem{multicitesubentrydelim}
+The delimiter printed between subentry citations of the same set. This delimiter is only used in citation styles that reduce citations of the same set to a more compact form (\opt{subentry} of \texttt{numeric-comp}). The default is a comma.
+
+\csitem{multicitesubentryrangedelim}
+The delimiter printed between two citations of the same set if they are compressed to a range. The default is \cmd{multiciterangedelim}.
+
+\csitem{supercitedelim}
+Similar to \cmd{multinamedelim}, but intended for the \cmd{supercite} command only. The default is a comma.
+
+\csitem{superciterangedelim}
+Analogue of \cmd{multiciterangedelim} for \cmd{supercite}. The default is \cmd{bibrangedash}.
+
+\csitem{supercitesubentrydelim}
+Analogue of \cmd{multicitesubentrydelim} for \cmd{supercite}. The default is \cmd{supercitedelim}.
+
+\csitem{supercitesubentryrangedelim}
+Analogue of \cmd{multicitesubentryrangedelim} for \cmd{supercite}. The default is \cmd{superciterangedelim}.
+
+\csitem{compcitedelim}
+Similar to \cmd{multicitedelim}, but intended for citation styles that <compress> multiple citations, \ie print the author only once if subsequent citations share the same author etc. The default definition is a comma plus an interword space.
+
+\csitem{textcitedelim}
+Similar to \cmd{multicitedelim}, but intended for \cmd{textcite} and related commands (\secref{use:cit:cbx}). The default is a comma plus an interword space. The standard styles modify this provisional definition to ensure that the delimiter before the final citation is the localised term <and>, separated by interword spaces.
+
+\csitem{nametitledelim}\CSdelimMark
+The delimiter to be printed between the author\slash editor and the title. This command should be incorporated in the definition of all citation commands of author-title and some verbose citation styles and in the bibliography drivers---in author-year bibliographies \cs{nametitledelim} may be printed between the author\slash editor-year block and the title. The default definition inside bibliographies (\ie in the \texttt{bib} and \texttt{biblist} contexts) is the now deprecated \cmd{labelnamepunct} (for backwards compatibility reasons), in \texttt{textcite} context it is a space and it is a comma plus an interword space otherwise.
+
+\csitem{nameyeardelim}\CSdelimMark
+The delimiter to be printed between the author\slash editor and the year. This command should be incorporated in the definition of all citation commands of author-year citation styles and in the bibliography drivers. The default definition is an interword space. For backwards compatibility reasons there are separate definitions in the \texttt{bib}, \texttt{biblist}, \texttt{textcite} and global context.
+
+\csitem{namelabeldelim}\CSdelimMark
+The delimiter printed between the name\slash title and the label. This command should be incorporated in the definition of all citation commands of alphabetic and numeric citation styles. The default definition is an interword space.
+
+\csitem{nonameyeardelim}\CSdelimMark
+The delimiter printed between the substitute for the labelname when it does not exist (usually the label or title in standard styles) and the year citation styles and the bibliography drivers. This command should be incorporated in the definition of all citation commands of author-year citation styles and in the bibliography drivers. The default definition is an interword space. For backwards compatibility reasons there are separate definitions in the \texttt{bib}, \texttt{biblist}, \texttt{textcite} and global context.
+
+\csitem{authortypedelim}\CSdelimMark
+The delimiter printed between the author and the \texttt{authortype}. The default is a comma followed by a space.
+
+\csitem{editortypedelim}\CSdelimMark
+The delimiter printed between the editor and the \texttt{editor} or \texttt{editortype} string. The default is a comma followed by a space.
+
+\csitem{translatortypedelim}\CSdelimMark
+The delimiter printed between the translator and the \texttt{translator} string. The default is a comma followed by a space.
+
+\csitem{labelalphaothers}
+A string to be appended to the non"=numeric portion of the \bibfield{labelalpha} field (\ie the field holding the citation label used by alphabetic citation styles) if the number of authors\slash editors exceeds the \opt{maxalphanames} threshold or the \bibfield{author}\slash \bibfield{editor} list was truncated in the \file{bib} file with the keyword <\texttt{and others}>. This will typically be a single character such as a plus sign or an asterisk. The default is a plus sign. This command may also be redefined to an empty string to disable this feature. In any case, it must be redefined in the preamble.
+
+\csitem{sortalphaothers}
+Similar to \cmd{labelalphaothers} but used in the sorting process. Setting it to a different value is advisable if the latter contains formatting commands. If \cmd{sortalphaothers} is not redefined, it defaults to \cmd{labelalphaothers}.
+
+\csitem{volcitedelim}
+The delimiter to be printed between the volume portion and the page/text portion of \cmd{volcite} and related commands (\secref{use:cit:spc}).
+
+\csitem{prenotedelim}\CSdelimMark
+The delimiter to be printed after the \prm{prenote} argument of a citation command. The default is an interword space.
+
+\csitem{postnotedelim}\CSdelimMark
+The delimiter to be printed before the \prm{postnote} argument of a citation command. The default is a comma plus an interword space.
+
+\csitem{extpostnotedelim}\CSdelimMark
+The delimiter printed between the citation and the parenthetical \prm{postnote} argument of a citation command when the postnote occurs outside of the citation parentheses. In the standard styles, this occurs when the citation uses the shorthand field of the entry. The default is an interword space.
+
+\csitem{multiprenotedelim}\CSdelimMark
+The delimiter to be printed after the \prm{multiprenote} argument of a citation command.
+
+\csitem{multipostnotedelim}\CSdelimMark
+The delimiter to be printed before the \prm{multipostnote} argument of a citation command.
+
+\cmditem{mkbibname<namepart>}{text}
+Formatting hook for the name part <namepart>, to be used in all formatting directives for name lists. The default datamodel defines the name parts <family>, <given>, <prefix> and <suffix> and therefore the following macros are automatically defined:
+
+\begin{ltxexample}
+\mkbibnamefamily
+\mkbibnamegiven
+\mkbibnameprefix
+\mkbibnamesuffix
+\end{ltxexample}
+
+\cmditem{mkbibcompletename<formatorder>}{text}
+Formatting hook for the complete name in format order <formatorder>. The default styles use the name format orders <family>, <family-given> and <given-family>, therefore the following macros are automatically defined:
+
+\begin{ltxexample}
+\mkbibcompletenamefamily
+\mkbibcompletenamefamilygiven
+\mkbibcompletenamegivenfamily
+\end{ltxexample}
+%
+These formatting hooks should enclose the complete name in the bibliography macro \cmd{name:<formatorder>}. Initially all hooks expand to \cmd{mkbibcompletename}.
+
+\cmditem{mkbibcompletename}{text}
+The initial value of all default formatting hooks \cmd{mkbibcompletename<formatorder>}.
+
+\csitem{datecircadelim}\CSdelimMark
+When formatting dates with the global option \opt{datecirca} enabled, the delimiter printed after any localised <circa> term. Defaults to interword space.
+
+\csitem{dateeradelim}\CSdelimMark
+When formatting dates with the global option \opt{dateera} set, the delimiter printed before the localisation era term. Defaults to interword space.
+
+\csitem{dateuncertainprint}
+Prints date uncertainty information when the global option \opt{dateuncertain} is enabled and the \cmd{ifdateuncertain} test is true. By default, prints the language specific \cmd{bibdateuncertain} string (\secref{use:fmt:lng}).
+
+\csitem{enddateuncertainprint}
+Prints date uncertainty information when the global option \opt{dateuncertain} is enabled and the \cmd{ifenddateuncertain} test is true. By default, prints the language specific \cmd{bibdateuncertain} string (\secref{use:fmt:lng}).
+
+\csitem{datecircaprint}
+Prints date circa information when the global option \opt{datecirca} is enabled and the \cmd{ifdatecirca} test is true. By default, prints the <circa> localised term (\secref{aut:lng:key:dt}) and the \opt{datecircadelim} delimiter.
+
+\csitem{enddatecircaprint}
+Prints date circa information when the global option \opt{datecirca} is enabled and the \cmd{ifenddatecirca} test is true. By default, prints the <circa> localised term (\secref{aut:lng:key:dt}) and the \opt{datecircadelim} delimiter.
+
+\csitem{datecircaprintiso}
+Prints \acr{ISO8601-2} format date circa information when the global option \opt{datecirca} is enabled and the \cmd{ifdatecirca} test is true. Prints \cmd{textasciitilde}.
+
+\csitem{enddatecircaprintiso}
+Prints \acr{ISO8601-2} format date circa information when the global option \opt{datecirca} is enabled and the \cmd{ifenddatecirca} test is true. Prints \cmd{textasciitilde}.
+
+\csitem{dateeraprint}{yearfield}
+Prints date era information when the global option \opt{dateera} is set to <secular> or <christian>. By default, prints the \opt{dateeradelim} delimiter and the appropriate localised era term (\secref{aut:lng:key:dt}). If the \opt{dateeraauto} option is set, then the passed \prm{yearfield} (which is the name of a year field such as <year>, <origyear>, <endeventyear> etc.) is tested to see if its value is earlier than the \opt{dateeraauto} threshold and if so, then the BCE/CE localisation will be output too. The default setting for \opt{dateeraauto} is 0 and so only BCE/BC localisation strings are candidates for output. Detects whether the start or end year era information is to be printed by looking at the \prm{yearfield} name passed to it.
+
+\csitem{dateeraprintpre}
+Prints date era information when the global option \opt{dateera} is set to <astronomical>. By default, prints \opt{bibdataeraprefix}. Detects whether the start or end year era information is to be printed by looking at the \prm{yearfield} name passed to it.
+
+\csitem{relatedpunct}
+The separator between the \bibfield{relatedtype} bibliography localisation string and the data from the first related entry.
+
+\csitem{relateddelim}
+The generic separator between the data of multiple related entries. The default definition is an optional dot plus linebreak.
+
+\csitem{relateddelim$<$relatedtype$>$}
+The separator between the data of multiple related entries inside related entries of type <relatedtype>. There is no default, if such a type-specific delimiter does not exist, \cmd{relateddelim} is used.
+
+\csitem{begrelateddelim}
+The generic separator before the block of related entries. The default definition is \cmd{newunitpunct}.
+
+\csitem{begrelateddelim$<$relatedtype$>$}
+The separator between the block of related entries of type <relatedtype>. There is no default, if such a type-specific delimiter does not exist, \cmd{relateddelim} is used.
+
+\end{ltxsyntax}
+
+\subsubsection{Language-specific Commands}
+\label{aut:fmt:lng}
+
+This section corresponds to \secref{use:fmt:lng} in the user part of the manual. The commands discussed here are usually handled by the localisation modules, but may also be redefined by users on a per"=language basis. Note that all commands starting with \cmd{mk\dots} take one or more mandatory arguments.
+
+\begin{ltxsyntax}
+
+\csitem{bibrangedash}
+
+The language specific dash to be used for ranges of numbers. Defaults to \cmd{textendash}.
+
+\csitem{bibrangessep}
+
+The language specific separator to be used between multiple ranges. Defaults to a comma followed by a space.
+
+\csitem{bibdatesep}
+
+The language specific separator used between date components in terse date formats. Defaults to \cmd{hyphen}.
+
+\csitem{bibdaterangesep}
+
+The language specific separator to be used for date ranges. Defaults to \cmd{textendash} for all date formats apart from \opt{ymd} which defaults to a \cmd{slash}. The date format option \opt{iso} is hard-coded to \cmd{slash} since this is a standards compliant format.
+
+\csitem{mkbibdatelong}
+
+Takes the names of three field as arguments which correspond to three date components (in the order year\slash month\slash day) and uses their values to print the date in the language specific long date format.
+
+\csitem{mkbibdateshort}
+
+Similar to \cmd{mkbibdatelong} but using the language specific short date format.
+
+\csitem{mkbibtimezone}
+
+Modifies a timezone string passed in as the only argument. By default this changes <Z> to the value of \cmd{bibtimezone}.
+
+\csitem{bibdateuncertain}
+
+The language specific marker to be used after uncertain dates when the global option \opt{dateuncertain} is enabled. Defaults to a space followed by a question mark.
+
+
+\csitem{bibdateeraprefix}
+
+The language specific marker which is printed as a prefix to beginning BCE/BC dates in a date range when the option \opt{dateera} is set to <astronomical>. Defaults to \cmd{textminus}, if defined and \cmd{textendash} otherwise.
+
+\csitem{bibdateeraendprefix}
+
+The language specific marker which is printed as a prefix to end BCE/BC dates in a date range when the option \opt{dateera} is set to <astronomical>. Defaults to a thin space followed by \cmd{bibdateeraprefix} when \cmd{bibdaterangesep} is set to a dash and to \cmd{bibdateeraprefix} otherwise. This is a separate macro so that you may add extra space before a negative date marker which, for example follows a dash date range marker as this can look a little odd.
+
+\csitem{bibtimesep}
+
+The language specific marker which separates time components. Default to a colon.
+
+\csitem{bibutctimezone}
+
+The language specific string printed for the UTC timezone. Defaults to <Z>.
+
+\csitem{bibtimezonesep}
+
+The language specific marker which separates an optional time zone component from a time. Empty by default.
+
+\csitem{bibtzminsep}
+
+The language specific marker which separates hour and minute component of offset timezones. Defaults to a \cmd{bibtimesep}.
+
+\csitem{bibdatetimesep}
+
+The language specific separator printed between date and time components when printing time components along with date components (see the \opt{$<$datetype$>$dateusetime} option in \secref{use:opt:pre:gen}). Defaults to a space for non-\acr{ISO8601-2} output formats, and 'T' for \acr{ISO8601-2} output format.
+
+\csitem{finalandcomma}
+
+Prints the comma to be inserted before the final <and> in an enumeration, if applicable in the respective language.
+
+\csitem{finalandsemicolon}
+
+Prints the semicolon to be inserted before the final <and> in an enumeration, if applicable in the respective language.
+
+\cmditem{mkbibordinal}{integer}
+
+Takes an integer argument and prints it as an ordinal number.
+
+\cmditem{mkbibmascord}{integer}
+
+Similar to \cmd{mkbibordinal}, but prints a masculine ordinal, if applicable in the respective language.
+
+\cmditem{mkbibfemord}{integer}
+
+Similar to \cmd{mkbibordinal}, but prints a feminine ordinal, if applicable in the respective language.
+
+\cmditem{mkbibneutord}{integer}
+
+Similar to \cmd{mkbibordinal}, but prints a neuter ordinal, if applicable in the respective language.
+
+\cmditem{mkbibordedition}{integer}
+
+Similar to \cmd{mkbibordinal}, but intended for use with the term <edition>.
+
+\cmditem{mkbibordseries}{integer}
+
+Similar to \cmd{mkbibordinal}, but intended for use with the term <series>.
+
+\end{ltxsyntax}
+
+\subsubsection{User-definable Lengths and Counters}
+\label{aut:fmt:len}
+
+This section corresponds to \secref{use:fmt:len} in the user part of the manual. The length registers and counters discussed here are meant to be altered by users. Bibliography and citation styles should incorporate them where applicable and may also provide a default setting which is different from the package default.
+
+\begin{ltxsyntax}
+
+\lenitem{bibhang}
+
+The hanging indentation of the bibliography, if applicable. This length is initialized to \cmd{parindent} at load-time. If \cmd{parindent} is zero length for some reason, \cmd{bibhang} will default to \texttt{1em}.
+
+\lenitem{biblabelsep}
+
+The horizontal space between entries and their corresponding labels. Bibliography styles which use \env{list} environments and print a label should set \len{labelsep} to \len{biblabelsep} in the definition of the respective environment. This length is initialized to twice the value of \cmd{labelsep} at load-time.
+
+\lenitem{bibitemsep}
+
+The vertical space between the individual entries in the bibliography. Bibliography styles using \env{list} environments should set \len{itemsep} to \len{bibitemsep} in the definition of the respective environment. This length is initialized to \cmd{itemsep} at load-time.
+
+\lenitem{bibnamesep}
+
+Vertical space to be inserted between two entries in the bibliography whenever an entry starts with a name which is different from the initial name of the previous entry. The default value is zero. Setting this length to a positive value greater than \len{bibitemsep} will group the bibliography by author\slash editor name. Note that \len{bibitemsep}, \len{bibnamesep}, and \len{bibinitsep} obey the rules for \cmd{addvspace}, that is, when vertical space introduced by any of these commands immediately follows on from space introduced by another of them, the resulting total space is equal to the largest of them.
+
+\lenitem{bibinitsep}
+
+Vertical space to be inserted between two entries in the bibliography whenever an entry starts with a letter which is different from the initial letter of the previous entry. The default value is zero. Setting this length to a positive value greater than \len{bibitemsep} will group the bibliography alphabetically. Note that \len{bibitemsep}, \len{bibnamesep}, and \len{bibinitsep} obey the rules for \cmd{addvspace}, that is, when vertical space introduced by any of these commands immediately follows on from space introduced by another of them, the resulting total space is equal to the largest of them.
+
+\lenitem{bibparsep}
+
+The vertical space between paragraphs within an entry in the bibliography. Bibliography styles using \env{list} environments should set \len{parsep} to \len{bibparsep} in the definition of the respective environment. The default value is zero.
+
+\cntitem{abbrvpenalty}
+
+The penalty used by \cmd{addabbrvspace}, \cmd{addabthinspace}, and \cmd{adddotspace}, see \secref{aut:pct:spc} for details. This counter is initialized to \cmd{hyphenpenalty} at load-time.
+
+\cntitem{highnamepenalty}
+
+The penalty used by \cmd{addhighpenspace} and \cmd{addhpthinspace}, see \secref{aut:pct:spc} for details. The counter is initialized to \cmd{hyphenpenalty} at load-time.
+
+\cntitem{lownamepenalty}
+
+The penalty used by \cmd{addlowpenspace} and \cmd{addlpthinspace}, see \secref{aut:pct:spc} for details. The counter is initialized to half the \cmd{hyphenpenalty} at load-time.
+
+\cntitem{biburlbigbreakpenalty}
+
+The \sty{biblatex} version of \sty{url}'s \len{UrlBigBreakPenalty}. The default value is \texttt{100}.
+
+\cntitem{biburlbreakpenalty}
+
+The \sty{biblatex} version of \sty{url}'s \len{UrlBreakPenalty}. The default value is \texttt{200}.
+
+\cntitem{biburlnumpenalty}
+
+If this counter is set to a value greater than zero, \biblatex will permit linebreaks after numbers in all strings formatted with the \cmd{url} command from the \sty{url} package. This will affect \acr{url}s and \acr{doi}s in the bibliography. The breakpoints will be penalized by the value of this counter. If \acr{url}s and/or \acr{doi}s in the bibliography run into the margin, try setting this counter to a value greater than zero but less than 10000 (you normally want to use a high value like 9000). Setting the counter to zero disables this feature. This is the default setting.
+
+\cntitem{biburlucpenalty}
+
+Similar to \cnt{biburlnumpenalty}, except that it will add a breakpoint after all uppercase letters.
+
+\cntitem{biburllcpenalty}
+
+Similar to \cnt{biburlnumpenalty}, except that it will add a breakpoint after all lowercase letters.
+
+\lenitem{biburlbigskip}
+
+The \sty{biblatex} version of \len{Urlmuskip}. This length holds the additional (stretchable) space inserted around breakable characters in the \cmd{url} command from the \sty{url} package. The default value is \texttt{0mu plus 3mu}.
+
+\lenitem{biburlnumskip}
+
+The additional space inserted after numbers in strings formatted with the \cmd{url} command from the \sty{url} package. This will affect \acr{url}s and \acr{doi}s in the bibliography. If \acr{url}s and/or \acr{doi}s in the bibliography run into the margin, it may help to set this length to add some small stretchable space, for example \texttt{0mu plus 1mu}. The default setting is \texttt{0mu}. This value is only used if \cnt{biburlnumpenalty} is set to a value different from zero.
+
+\lenitem{biburlucskip}
+
+Similar to \cnt{biburlnumskip}, except that it will add space after all uppercase letters.
+
+\lenitem{biburllcskip}
+
+Similar to \cnt{biburlnumskip}, except that it will add space after all uppercase letters.
+
+\end{ltxsyntax}
+
+\subsubsection{Auxiliary Commands and Hooks}
+\label{aut:fmt:ich}
+
+The auxiliary commands and facilities in this section serve a special purpose. Some of them are used by \biblatex to communicate with bibliography and citation styles in some way or other.
+
+\begin{ltxsyntax}
+
+\cmditem{mkbibemph}{text}
+
+A generic command which prints its argument as emphasized text. This is a simple wrapper around the standard \cmd{emph} command. Apart from that, it uses \cmd{setpunctfont} from \secref{aut:pct:new} to adapt the font of the next punctuation mark following the text set in italics. If the \opt{punctfont} package option is disabled, this command behaves like \cmd{emph}.
+
+\cmditem{mkbibitalic}{text}
+
+Similar in concept to \cmd{mkbibemph} but prints italicized text. This is a simple wrapper around the standard \cmd{textit} command which incorporates \cmd{setpunctfont}. If the \opt{punctfont} package option is disabled, this command behaves like \cmd{textit}.
+
+\cmditem{mkbibbold}{text}
+
+Similar in concept to \cmd{mkbibemph} but prints bold text. This is a simple wrapper around the standard \cmd{textbf} command which incorporates \cmd{setpunctfont}. If the \opt{punctfont} package option is disabled, this command behaves like \cmd{textbf}.
+
+\cmditem{mkbibquote}{text}
+
+A generic command which wraps its argument in quotation marks. If the \sty{csquotes} package is loaded, this command uses the language sensitive quotation marks provided by that package. \cmd{mkbibquote} also supports <American-style> punctuation, see \cmd{DeclareQuotePunctuation} in \secref{aut:pct:cfg} for details.
+
+\cmditem{mkbibparens}{text}
+
+A generic command which wraps its argument in parentheses. This command is nestable. When nested, it will alternate between parentheses and brackets, depending on the nesting level.
+
+\cmditem{mkbibbrackets}{text}
+
+A generic command which wraps its argument in square brackets. This command is nestable. When nested, it will alternate between brackets and parentheses, depending on the nesting level.
+
+\cmditem{bibopenparen}<text>|{\ltxsyntaxlabelfont\cmd{bibcloseparen}}|
+
+Alternative syntax for \cmd{mkbibparens}. This will also work across groups. Note that \cmd{bibopenparen} and \cmd{bibcloseparen} must always be balanced.
+
+\cmditem{bibopenbracket}<text>|{\ltxsyntaxlabelfont\cmd{bibclosebracket}}|
+
+Alternative syntax for \cmd{mkbibbrackets}. This will also work across groups. Note that \cmd{bibopenbracket} and \cmd{bibclosebracket} must always be balanced.
+
+\cmditem{mkbibfootnote}{text}
+
+A generic command which prints its argument as a footnote. This is a wrapper around the standard \latex \cmd{footnote} command which removes spurious whitespace preceding the footnote mark and prevents nested footnotes. By default, \cmd{mkbibfootnote} requests capitalization at the beginning of the note and automatically adds a period at the end. You may change this behavior by redefining the \cmd{bibfootnotewrapper} macro introduced below.
+
+\cmditem{mkbibfootnotetext}{text}
+
+Similar to \cmd{mkbibfootnote} but uses the \cmd{footnotetext} command.
+
+\cmditem{mkbibendnote}{text}
+
+Similar in concept to \cmd{mkbibfootnote} except that it prints its argument as an endnote. \cmd{mkbibendnote} removes spurious whitespace preceding the endnote mark and prevents nested notes. It supports the \cmd{endnote} command provided by the \sty{endnotes} package as well as the \cmd{pagenote} command provided by the \sty{pagenote} package and the \sty{memoir} class. If both commands are available, \cmd{endnote} takes precedence. If no endnote support is available, \cmd{mkbibendnote} issues an error and falls back to \cmd{footnote}. By default, \cmd{mkbibendnote} requests capitalization at the beginning of the note and automatically adds a period at the end. You may change this behavior by redefining the \cmd{bibendnotewrapper} macro introduced below.
+
+\cmditem{mkbibendnotetext}{text}
+
+Similar to \cmd{mkbibendnote} but uses the \cmd{endnotetext} command. Please note that as of this writing, neither the \sty{pagenote} package nor the \sty{memoir} class provide a corresponding \cmd{pagenotetext} command. In this case, \cmd{mkbibendnote} will issue an error and fall back to \cmd{footnotetext}.
+
+\cmditem{bibfootnotewrapper}{text}
+
+An inner wrapper which encloses the \prm{text} argument of \cmd{mkbibfootnote} and \cmd{mkbibfootnotetext}. For example, \cmd{mkbibfootnote} eventually boils down to this:
+
+\begin{ltxexample}
+\footnote{<<\bibfootnotewrapper{>>text<<}>>}
+\end{ltxexample}
+%
+The wrapper ensures capitalization at the beginning of the note and adds a period at the end. The default definition is:
+
+\begin{ltxexample}
+\newcommand{\bibfootnotewrapper}[1]{<<\bibsentence>> #1<<\addperiod>>}
+\end{ltxexample}
+%
+If you don't want capitalization at the beginning or a period at the end of the note, do not modify \cmd{mkbibfootnote} but redefine \cmd{bibfootnotewrapper} instead.
+
+\cmditem{bibendnotewrapper}{text}
+
+Similar in concept to \cmd{bibfootnotewrapper} but related to the \cmd{mkbibendnote} and \cmd{mkbibendnotetext} commands.
+
+\cmditem{mkbibsuperscript}{text}
+
+A generic command which prints its argument as superscripted text. This is a simple wrapper around the standard \latex \cmd{textsuperscript} command which removes spurious whitespace and allows hyphenation of the preceding word.
+
+\cmditem{mkbibmonth}{integer}
+
+This command takes an integer argument and prints it as a month name. Even though the output of this command is language specific, its definition is not, hence it is normally not redefined in localisation modules.
+
+\cmditem{mkbibyeardivision}{string}\DeprecatedMark
+
+This command takes a year division localisation string and prints the version of the string corresponding to the setting of the \opt{dateabbrev} package option. Even though the output of this command is language specific, its definition is not, hence it is normally not redefined in localisation modules.
+
+\cmditem{mkbibseason}{string}\DeprecatedMark
+
+This command takes a season localisation string and prints the version of the string corresponding to the setting of the \opt{dateabbrev} package option. Even though the output of this command is language specific, its definition is not, hence it is normally not redefined in localisation modules.
+
+\cmditem{mkyearzeros}{integer}
+
+This command strips leading zeros from a year or enforces them, depending on the \opt{datezeros} package option (\secref{use:opt:pre:gen}). It is intended for use in the definition of date formatting macros. If zeros are enforced, this command calls \cmd{forcezerosy} and thus expands its argument with \cmd{protected@edef}.
+
+\cmditem{mkmonthzeros}{integer}
+
+This command strips leading zeros from a month or enforces them, depending on the \opt{datezeros} package option (\secref{use:opt:pre:gen}). It is intended for use in the definition of date formatting macros. If zeros are enforced, this command calls \cmd{forcezerosmdt} and thus expands its argument with \cmd{protected@edef}.
+
+\cmditem{mkdayzeros}{integer}
+
+This command strips leading zeros from a day or enforces them, depending on the \opt{datezeros} package option (\secref{use:opt:pre:gen}). It is intended for use in the definition of date formatting macros. If zeros are enforced, this command calls \cmd{forcezerosmdt} and thus expands its argument with \cmd{protected@edef}.
+
+\cmditem{mktimezeros}{integer}
+
+This command strips leading zeros from a number or preserves them, depending on the \opt{timezeros} package option (\secref{use:opt:pre:gen}). It is intended for use in the definition of time formatting macros. If zeros are enforced, this command calls \cmd{forcezerosmdt} and thus expands its argument with \cmd{protected@edef}.
+
+\cmditem{forcezerosy}{integer}
+
+This command adds zeros to a year (or any number supposed to be 4-digits). It is intended for date formatting and ordinals. The argument is expanded with \cmd{protected@edef} before it is processed.
+
+\cmditem{forcezerosmdt}{integer}
+
+This command adds zeros to a month, day or time part (or any number supposed to be 2-digits). It is intended for date/time formatting and ordinals. The argument is expanded with \cmd{protected@edef} before it is processed.
+
+\cmditem{stripzeros}{integer}
+
+This command strips leading zeros from a number. It is intended for date formatting and ordinals.
+
+\optitem{$<$labelfield$>$width}
+
+For every field marked as a <Label field> in the data model, a formatting directive is created as per \texttt{shorthandwidth} above. Since \bibfield{shorthand} is so marked in the default data model, this functionality is a superset of that described for \texttt{shorthandwidth}.
+
+\optitem{labelnumberwidth}
+
+Similar to \texttt{shorthandwidth}, but referring to the \bibfield{labelnumber} field and the length register \cmd{labelnumberwidth}. Numeric styles should adjust this directive such that it corresponds to the format used in the bibliography.
+
+\optitem{labelalphawidth}
+
+Similar to \texttt{shorthandwidth}, but referring to the \bibfield{labelalpha} field and the length register \cmd{labelalphawidth}. Alphabetic styles should adjust this directive such that it corresponds to the format used in the bibliography.
+
+\optitem{bibhyperref}
+
+A special formatting directive for use with \cmd{printfield} and \cmd{printtext}. This directive wraps its argument in a \cmd{bibhyperref} command, see \secref{aut:aux:msc} for details.
+
+\optitem{bibhyperlink}
+
+A special formatting directive for use with \cmd{printfield} and \cmd{printtext}. It wraps its argument in a \cmd{bibhyperlink} command, see \secref{aut:aux:msc} for details. The \prm{name} argument passed to \cmd{bibhyperlink} is the value of the \bibfield{entrykey} field.
+
+\optitem{bibhypertarget}
+
+A special formatting directive for use with \cmd{printfield} and \cmd{printtext}. It wraps its argument in a \cmd{bibhypertarget} command, see \secref{aut:aux:msc} for details. The \prm{name} argument passed to \cmd{bibhypertarget} is the value of the \bibfield{entrykey} field.
+
+\optitem{volcitepages}
+
+A special formatting directive which controls the format of the page\slash text portion in the argument of citation commands like \cmd{volcite}.
+
+\optitem{volcitevolume}
+
+A special formatting directive which controls the format of the volume portion in the argument of citation commands like \cmd{volcite}.
+
+\optitem{date}
+
+A special formatting directive which controls the format of \cmd{printdate} (\secref{aut:bib:dat}). Note that the date format (long/short etc.) is controlled by the package option \opt{date} from \secref{use:opt:pre:gen}. This formatting directive only controls additional formatting such as fonts etc.
+
+\optitem{labeldate}
+
+As \texttt{date} but controls the format of \cmd{printlabeldate}.
+
+\optitem{$<$datetype$>$date}
+
+As \texttt{date} but controls the format of \cmd{print$<$datetype$>$date}.
+
+\optitem{time}
+
+A special formatting directive which controls the format of \cmd{printtime} (\secref{aut:bib:dat}). Note that the time format (24h/12h etc.) is controlled by the package option \opt{time} from \secref{use:opt:pre:gen}. This formatting directive only controls additional formatting such as fonts etc.
+
+\optitem{labeltime}
+
+As \texttt{time} but controls the format of \cmd{printlabeltime}.
+
+\optitem{$<$datetype$>$time}
+
+As \texttt{time} but controls the format of \cmd{print$<$datetype$>$time}.
+
+\end{ltxsyntax}
+
+\subsubsection{Auxiliary Lengths, Counters, and Other Features}
+\label{aut:fmt:ilc}
+
+The length registers and counters discussed here are used by \biblatex to pass information to bibliography and citation styles. Think of them as read"=only registers. Note that all counters are \latex counters. Use |\value{counter}| to read out the current value.
+
+\begin{ltxsyntax}
+
+\lenitem{$<$labelfield$>$width}
+
+For every field marked as a <label> field in the data model, a length register is created as per \texttt{shorthandwidth} above. Since \bibfield{shorthand} is so marked in the default data model, this functionality is a superset of that described for \texttt{shorthandwidth}.
+
+\lenitem{labelnumberwidth}
+
+This length register indicates the width of the widest \bibfield{labelnumber}. Numeric bibliography styles
+should incorporate this length in the definition of the bibliography environment.
+
+\lenitem{labelalphawidth}
+
+This length register indicates the width of the widest \bibfield{labelalpha}. Alphabetic bibliography styles should incorporate this length in the definition of the bibliography environment.
+
+\cntitem{maxextraalpha}
+
+This counter holds the highest number found in any \bibfield{extraalpha} field.
+
+\cntitem{maxextradate}
+
+This counter holds the highest number found in any \bibfield{extradate} field.
+
+\cntitem{maxextraname}
+
+This counter holds the highest number found in any \bibfield{extraname} field.
+
+\cntitem{maxextratitle}
+
+This counter holds the highest number found in any \bibfield{extratitle} field.
+
+\cntitem{maxextratitleyear}
+
+This counter holds the highest number found in any \bibfield{extratitleyear} field.
+
+\cntitem{refsection}
+
+This counter indicates the current \env{refsection} environment. When queried in a bibliography heading, the counter returns the value of the \opt{refsection} option passed to \cmd{printbibliography}.
+
+\cntitem{refsegment}
+
+This counter indicates the current \env{refsegment} environment. When queried in a bibliography heading, this counter returns the value of the \opt{refsegment} option passed to \cmd{printbibliography}.
+
+\cntitem{maxnames}
+
+This counter holds the setting of the \opt{maxnames} package option.
+
+\cntitem{minnames}
+
+This counter holds the setting of the \opt{minnames} package option.
+
+\cntitem{maxitems}
+
+This counter holds the setting of the \opt{maxitems} package option.
+
+\cntitem{minitems}
+
+This counter holds the setting of the \opt{minitems} package option.
+
+\cntitem{instcount}
+
+This counter is incremented by \biblatex for every citation as well as for every entry in the bibliography and bibliography lists. The value of this counter uniquely identifies a single instance of a reference in the document.
+
+\cntitem{citetotal}
+
+This counter, which is only available in the \prm{loopcode} of a citation command defined with \cmd{DeclareCiteCommand}, holds the total number of valid entry keys passed to the citation command.
+
+\cntitem{citecount}
+
+This counter, which is only available in the \prm{loopcode} of a citation command defined with \cmd{DeclareCiteCommand}, holds the number of the entry key currently being processed by the \prm{loopcode}.
+
+\cntitem{multicitetotal}
+
+This counter is similar to \cnt{citetotal} but only available in multicite commands. It holds the total number of citations passed to the multicite command. Note that each of these citations may consist of more than one entry key. This information is provided by the \cnt{citetotal} counter.
+
+\cntitem{multicitecount}
+
+This counter is similar to \cnt{citecount} but only available in multicite commands. It holds the number of the citation currently being processed. Note that this citation may consist of more than one entry key. This information is provided by the \cnt{citetotal} and \cnt{citecount} counters.
+
+\cntitem{listtotal}
+
+This counter holds the total number of items in the current list. It is intended for use in list formatting directives and does not hold a meaningful value when used anywhere else. As an exception, it may also be used in the second optional argument to \cmd{printnames} and \cmd{printlist}, see \secref{aut:bib:dat} for details. For every list, there is also a counter by the same name which holds the total number of items in the corresponding list. For example, the \cnt{author} counter holds the total number of items in the \bibfield{author} list. This applies to both name lists and literal lists. These counters are similar to \cnt{listtotal} except that they may also be used independently of list formatting directives. For example, a bibliography style might check the \cnt{editor} counter to decide Whether or not to print the term «editor» or rather its plural form «editors» after the list of editors.
+
+\cntitem{listcount}
+
+This counter holds the number of the list item currently being processed. It is intended for use in list formatting directives and does not hold a meaningful value when used anywhere else.
+
+\cntitem{liststart}
+
+This counter holds the \prm{start} argument passed to \cmd{printnames} or \cmd{printlist}. It is intended for use in list formatting directives and does not hold a meaningful value when used anywhere else.
+
+\cntitem{liststop}
+
+This counter holds the \prm{stop} argument passed to \cmd{printnames} or \cmd{printlist}. It is intended for use in list formatting directives and does not hold a meaningful value when used anywhere else.
+
+\csitem{currentlang}
+
+The name of the currently active language for \biblatex. Can be used anywhere and
+defaults to the main document language. This is automatically switched
+inside entries which define \bibfield{langid}, given suitable settings of the
+\opt{autolang} and \opt{language} options. Note that this does not track
+all document language changes, only the current \biblatex\ setting.
+
+\csitem{currentfield}
+
+The name of the field currently being processed by \cmd{printfield}. This information is only available locally in field formatting directives.
+
+\csitem{currentlist}
+
+The name of the literal list currently being processed by \cmd{printlist}. This information is only available locally in list formatting directives.
+
+\csitem{currentname}
+
+The name of the name list currently being processed by \cmd{printnames}. This information is only available locally in name formatting directives.
+
+\csitem{currentmsform}
+
+Contains the multiscript form of the entry field. This information is only available locally in name formatting directives. It is empty for non-multiscript fields.
+
+\csitem{currentmslang}
+
+Contains the multiscript BCPP47 language tag of the entry field. This information is only available locally in name formatting directives. It is empty for non-multiscript fields.
+
+\csitem{currentmsforms}
+
+An \sty{etoolbox} list of all defined multiscript forms of the current entryfield. This information is only available locally in name formatting directives. It is empty for non-multiscript fields.
+
+\csitem{currentmslangs}
+
+An \sty{etoolbox} list of all defined multiscript BCP47 language tags of the current entryfield. This information is only available locally in name formatting directives. It is empty for non-multiscript fields.
+
+\cmditem{fieldmsforms}{entryfield}
+
+As \cmd{currentmsforms} but for entryfield \prm{entryfield}. It is intended for use in formatting directives and does not hold meaningful data when used anywhere else.
+
+\cmditem{fieldmslangs}{entryfield}
+
+As \cmd{currentmslangs} but for entryfield \prm{entryfield}. It is intended for use in formatting directives and does not hold meaningful data when used anywhere else.
+
+\end{ltxsyntax}
+
+\subsubsection{General Purpose Hooks}
+\label{aut:fmt:hok}
+
+\begin{ltxsyntax}
+
+\cmditem{AtBeginRefsection}{code}
+
+Appends the \prm{code} to an internal hook executed at the beginning of every reference section. The \prm{code} is executed just after setting the reference section number. This command may only be used in the preamble.
+
+\cmditem{AtBeginBibliography}{code}
+
+Appends the \prm{code} to an internal hook executed at the beginning of the bibliography. The \prm{code} is executed at the beginning of the list of references, immediately after the \prm{begin code} of \cmd{defbibenvironment}. This command may only be used in the preamble.
+
+\cmditem{AtBeginShorthands}{code}
+
+Appends the \prm{code} to an internal hook executed at the beginning of the list of shorthands. The \prm{code} is executed at the beginning of the list of shorthands, immediately after the \prm{begin code} of \cmd{defbibenvironment}. This command may only be used in the preamble.
+
+This is just an alias for:
+
+\begin{ltxexample}
+\AtBeginBiblist{shorthand}{code}
+\end{ltxexample}
+
+\cmditem{AtBeginBiblist}{biblistname}{code}
+
+Appends the \prm{code} to an internal hook executed at the beginning of the bibliography list \prm{biblistname}. The \prm{code} is executed at the beginning of the bibliography list, immediately after the \prm{begin code} of \cmd{defbibenvironment}. This command may only be used in the preamble.
+
+\cmditem{AtEveryBibitem}{code}
+
+Appends the \prm{code} to an internal hook executed at the beginning of every item in the bibliography. The \prm{code} is executed immediately after the \prm{item code} of \cmd{defbibenvironment}. The bibliographic data of the respective entry is available at this point. This command may only be used in the preamble.
+
+\cmditem{AtEveryLositem}{code}
+
+Appends the \prm{code} to an internal hook executed at the beginning of every item in the list of shorthands. The \prm{code} is executed immediately after the \prm{item code} of \cmd{defbibenvironment}. The bibliographic data of the respective entry is available at this point. This command may only be used in the preamble.
+
+This is just an alias for:
+
+\begin{ltxexample}
+\AtEveryBiblistitem{shorthand}{code}
+\end{ltxexample}
+
+\cmditem{AtEveryBiblistitem}{biblistname}{code}
+
+Appends the \prm{code} to an internal hook executed at the beginning of every item in the bibliography list named \prm{biblistname}. The \prm{code} is executed immediately after the \prm{item code} of \cmd{defbibenvironment}. The bibliographic data of the respective entry is available at this point. This command may only be used in the preamble.
+
+\cmditem{AtNextBibliography}{code}
+
+Similar to \cmd{AtBeginBibliography} but only affecting the next \cmd{printbibliography}. The internal hook is cleared after being executed once. This command may be used in the document body.
+
+\cmditem{AtUsedriver}{code}
+\cmditem*{AtUsedriver}*{code}
+
+Appends the \prm{code} to an internal hook executed when initializing \cmd{usedriver}. The starred variant of the command clears the initialisation hook, so the defaults can be overwritten. This command may only be used in the preamble.
+The default setting is:
+
+\begin{ltxexample}
+\AtUsedriver{%
+ \delimcontext{bib}%
+ \let\finentry\blx@finentry@usedrv
+ \let\newblock\relax
+ \let\abx@macro@bibindex\@empty
+ \let\abx@macro@pageref\@empty}
+\end{ltxexample}
+
+\cmditem{AtEveryCite}{code}
+
+Appends the \prm{code} to an internal hook executed at the beginning of every citation command. The \prm{code} is executed immediately before the \prm{precode} of the command (see \secref{aut:cbx:cbx}). No bibliographic data is available at this point. This command may only be used in the preamble.
+
+\cmditem{AtEveryCitekey}{code}
+
+Appends the \prm{code} to an internal hook executed once for every entry key passed to a citation command. The \prm{code} is executed immediately before the \prm{loopcode} of the command (see \secref{aut:cbx:cbx}). The bibliographic data of the respective entry is available at this point. This command may only be used in the preamble.
+
+\cmditem{AtEveryMultiCite}{code}
+
+Appends the \prm{code} to an internal hook executed at the beginning of every multicite command. The \prm{code} is executed immediately before the \bibfield{multiprenote} field (\secref{aut:cbx:fld}) is printed. No bibliographic data is available at this point. This command may only be used in the preamble.
+
+\cmditem{AtNextCite}{code}
+
+Similar to \cmd{AtEveryCite} but only affecting the next citation command. The internal hook is cleared after being executed once. This command may be used in the document body.
+
+\cmditem{AtEachCitekey}{code}
+
+Similar to \cmd{AtEveryCitekey} but only affecting the current citation command. This command may be used in the document body. The \prm{code} is appended to the internal hook locally when located in a citation, as determined by \cmd{ifcitation}.
+
+\cmditem{AtNextCitekey}{code}
+
+Similar to \cmd{AtEveryCitekey} but only affecting the next entry key. The internal hook is cleared after being executed once. This command may be used in the document body.
+
+\cmditem{AtNextMultiCite}{code}
+
+Similar to \cmd{AtEveryMultiCite} but only affecting the next multicite command. The internal hook is cleared after being executed once. This command may be used in the document body.
+
+\cmditem{AtVolcite}{code}
+\cmditem*{AtVolcite}*{code}
+
+Appends the \prm{code} to an internal hook executed when initializing \cmd{volcite}. The starred variant of the command clears the initialisation hook, so the defaults can be overwritten. This command may only be used in the preamble.
+The default setting is:
+
+\begin{ltxexample}
+\AtVolcite{%
+ \DeclareFieldAlias{postnote}{volcitenote}}
+\end{ltxexample}
+
+\cmditem{AtDataInput}[entrytype]{code}
+
+Appends the \prm{code} to an internal hook executed once for every entry as the bibliographic data is imported from the \file{bbl} file. The \prm{entrytype} is the entry type the \prm{code} applies to. If it applies to all entry types, omit the optional argument. The \prm{code} is executed immediately after the entry has been imported. This command may only be used in the preamble. Note that \prm{code} may be executed multiple times for an entry. This occurs when the same entry is cited in different \env{refsection} environments or the \opt{sorting} option settings incorporate more than one sorting template. The \cnt{refsection} counter holds the number of the respective reference section while the data is imported.
+
+\cmditem{UseBibitemHook}
+
+Executes the internal hook corresponding to \cmd{AtEveryBibitem}.
+
+\cmditem{UseUsedriverHook}
+
+Executes the internal hook corresponding to \cmd{AtUsedriver}.
+
+\cmditem{UseEveryCiteHook}
+
+Executes the internal hook corresponding to \cmd{AtEveryCite}.
+
+\cmditem{UseEveryCitekeyHook}
+
+Executes the internal hook corresponding to \cmd{AtEveryCitekey}.
+
+\cmditem{UseEveryMultiCiteHook}
+
+Executes the internal hook corresponding to \cmd{AtMultiEveryCite}.
+
+\cmditem{UseNextCiteHook}
+
+Executes and clears the internal hook corresponding to \cmd{AtNextCite}.
+
+\cmditem{UseNextCitekeyHook}
+
+Executes and clears the internal hook corresponding to \cmd{AtNextCitekey}.
+
+\cmditem{UseNextMultiCiteHook}
+
+Executes and clears the internal hook corresponding to \cmd{AtNextMultiCite}.
+
+\cmditem{UseVolciteHook}
+
+Executes the internal hook corresponding to \cmd{AtVolcite}.
+
+\cmditem{DeferNextCitekeyHook}
+
+Locally un-defines the internal hook specified by \cmd{AtNextCitekey}. This essentially defers the hook to the next entry key in the citation list, when executed in the \prm{precode} argument of \cmd{DeclareCiteCommand} (\secref{aut:cbx:cbx}).
+
+\cmditem{AtEveryEntrykey}{code}{success}{failure}
+
+Appends \prm{code} to an internal hook executed every time an entrykey is processed for a citation command or \cmd{nocite}. The \prm{code} is passed one argument (\lstinline{#1}), which contains the entrykey. If the code can be appended to the hook \prm{success} is executed, otherwise \prm{failure} is executed. Unlike \cmd{AtEveryCitekey} the entry data of the current entrykey is not available when \prm{code} is processed, indeed it is not even known whether or not there is any entry data at all.
+
+\end{ltxsyntax}
+
+\subsubsection{File hooks}
+\label{aut:fmt:hok:fil}
+\biblatex has rudimentary support for injecting arbitrary code before and after a file is loaded via file hooks. For files that are loaded using \biblatex's file interface---that includes all bibliography and citation styles---the following three hooks are available
+
+\begin{ltxsyntax}
+\cmditem{blx@filehook@preload@$<$filename with extension$>$}
+
+If \file{$<$filename with extension$>$} is found, this hook is exected before it is loaded.
+
+\cmditem{blx@filehook@postload@$<$filename with extension$>$}
+
+If \file{$<$filename with extension$>$} is found, this hook is exected after it is loaded.
+
+\cmditem{blx@filehook@failure@$<$filename with extension$>$}
+
+This hook is executed if \file{$<$filename with extension$>$} can not be found.
+\end{ltxsyntax}
+
+\biblatex generally only loads files once even if they were requested multiple times,
+so the hooks will only be executed once.
+Naturally, the file hooks need to be populated before the files are loaded, so the safest would be to populate them before \biblatex is loaded.
+It is advisable to only append code to avoid overwriting previous hook contents.
+Since the name of the file hook include the dot and the file extension they will usually have to be defined with a command like \cmd{csappto} from \sty{etoolbox}.
+
+The \file{.lbx} files are special and may have to be loaded several times in some situations.
+Their file hooks are
+
+\begin{ltxsyntax}
+\cmditem{blx@lbxfilehook@once@preload@$<$filename with extension$>$}
+
+If \file{$<$filename with extension$>$} is found, this hook is exected before it is loaded in a situation where the \file{.lbx} files are loaded only once.
+
+\cmditem{blx@lbxfilehook@once@postload@$<$filename with extension$>$}
+
+If \file{$<$filename with extension$>$} is found, this hook is exected after it is loaded in a situation where the \file{.lbx} files are loaded only once.
+
+\cmditem{blx@lbxfilehook@once@failure@$<$filename with extension$>$}
+
+This hook is executed if \file{$<$filename with extension$>$} can not be found in a situation where the \file{.lbx} files are loaded only once.
+
+\cmditem{blx@lbxfilehook@simple@preload@$<$filename with extension$>$}
+
+If \file{$<$filename with extension$>$} is found, this hook is exected before it is loaded in a situation where the \file{.lbx} files may be loaded multiple times.
+
+\cmditem{blx@lbxfilehook@simple@postload@$<$filename with extension$>$}
+
+If \file{$<$filename with extension$>$} is found, this hook is exected after it is loaded in a situation where the \file{.lbx} files may be loaded multiple times.
+
+\cmditem{blx@lbxfilehook@simple@failure@$<$filename with extension$>$}
+
+This hook is executed if \file{$<$filename with extension$>$} can not be found in a situation where the \file{.lbx} files may be loaded multiple times.
+\end{ltxsyntax}
+
+The following code sets up \sty{beamer} to print the bibliography labels instead of its bibliography icons when \file{numeric.bbx} after is loaded
+\begin{ltxexample}
+\csappto{blx@filehook@postload@numeric.bbx}{%
+ \mode<presentation>{%
+ \setbeamertemplate{bibliography item}{%
+ \insertbiblabel}}}
+\end{ltxexample}
+
+
+\subsection{Hints and Caveats}
+\label{aut:cav}
+
+This section provides some additional hints concerning the author interface of this package. It also addresses common problems and potential misconceptions.
+
+\subsubsection{Entry Sets}
+\label{aut:cav:set}
+
+Entry sets have already been introduced in \secref{use:use:set}. This section discusses how to process entry sets in a bibliography style. From the perspective of the driver, there is no difference between static and dynamic entry sets. Both types are handled in the same way. You will normally use the \cmd{entryset} command from \secref{aut:bib:dat} to loop over all set members (in the order in which they are listed in the \bibfield{entryset} field of the \bibtype{set} entry, or in the order in which they were passed to \cmd{defbibentryset}, respectively) and append \cmd{finentry} at the end. That's it. The formatting is handled by the drivers for the entry types of the individual set members:
+
+\begin{ltxexample}
+\DeclareBibliographyDriver{set}{%
+ <<\entryset>>{}{}%
+ \finentry}
+\end{ltxexample}
+%
+You may have noticed that the \texttt{numeric} styles which come with this package support subdivided entry sets, \ie the members of the set are marked with a letter or some other marker such that citations may either refer to the entire set or to a specific set member. The markers are generated as follows by the bibliography style:
+
+\begin{ltxexample}
+\DeclareBibliographyDriver{set}{%
+ \entryset
+ {<<\printfield{entrysetcount}>>%
+ <<\setunit*{\addnbspace}>>}
+ {}%
+ \finentry}
+\end{ltxexample}
+%
+The \bibfield{entrysetcount} field holds an integer indicating the position of a set member in the entry set. The conversion of this number to a letter or some other marker is handled by the formatting directive of the \bibfield{entrysetcount} field. All the driver needs to do is print the field and add some white space (or start a new line). Printing the markers in citations works in a similar way. Where a numeric style normally says |\printfield{labelnumber}|, you simply append the \bibfield{entrysetcount} field:
+
+\begin{ltxexample}
+\printfield{labelnumber}<<\printfield{entrysetcount}>>
+\end{ltxexample}
+%
+Since this field is only defined when processing citations referring to a set member, there is no need to add any additional tests.
+
+Citing entry sets directly requires that a meaningful way of identifying sets is available in the style. This is obvious for styles based on numeric or alphabetic labels but not obvious (and rarely required) in styles which construct citations based on textual names/titles/dates etc. The default provided styles which no not construct citations based on labels (\texttt{authoryear}, \texttt{authortitle}, \texttt{verbose} etc.) therefore do not support citing sets directly as there is no obvious default identifier to use in such cases and such styles rarely, if ever, employ sets anyway. Custom styles may of course choose to define and print a citation identifier for directly cited sets.
+
+\subsubsection{Electronic Publishing Information}
+\label{aut:cav:epr}
+
+The standard styles feature dedicated support for arXiv references. Support for other resources is easily added. The standard styles handle the \bibfield{eprint} field as follows:
+
+\begin{ltxexample}
+\iffieldundef{eprinttype}
+ {\printfield{eprint}}
+ {\printfield[<<eprint:\strfield{eprinttype}>>]{eprint}}
+\end{ltxexample}
+%
+If an \bibfield{eprinttype} field is available, the above code tries to use the field format \texttt{eprint:\prm{eprinttype}}. If this format is undefined, \cmd{printfield} automatically falls back to the field format \texttt{eprint}. There are two predefined field formats, the type"=specific format \texttt{eprint:arxiv} and the fallback format \texttt{eprint}:
+
+\begin{ltxexample}
+\DeclareFieldFormat{<<eprint>>}{...}
+\DeclareFieldFormat{<<eprint:arxiv>>}{...}
+\end{ltxexample}
+%
+In other words, adding support for additional resources is as easy as defining a field format named \texttt{eprint:\prm{resource}} where \prm{resource} is an identifier to be used in the \bibfield{eprinttype} field.
+
+\subsubsection{External Abstracts and Annotations}
+\label{aut:cav:prf}
+
+External abstracts and annotations have been discussed in \secref{use:use:prf}. This section provides some more background for style authors. The standard styles use the following macros (from \path{biblatex.def}) to handle abstracts and annotations:
+
+\begin{ltxexample}
+\newbibmacro*{annotation}{%
+ \iffieldundef{annotation}
+ {\printfile[annotation]{<<\bibannotationprefix\thefield{entrykey}.tex>>}}%
+ {\printfield{annotation}}}
+\newcommand*{<<\bibannotationprefix>>}{bibannotation-}
+
+\newbibmacro*{abstract}{%
+ \iffieldundef{abstract}
+ {\printfile[abstract]{<<\bibabstractprefix\thefield{entrykey}.tex>>}}%
+ {\printfield{abstract}}}
+\newcommand*{<<\bibabstractprefix>>}{bibabstract-}
+\end{ltxexample}
+%
+If the \bibfield{abstract}\slash \bibfield{annotation} field is undefined, the above code tries to load the abstracts\slash annotations from an external file. The \cmd{printfile} commands also incorporate file name prefixes which may be redefined by users. Note that you must enable \cmd{printfile} explicitly by setting the \opt{loadfiles} package option from \secref{use:opt:pre:gen}. This feature is disabled by default for performance reasons.
+
+\subsubsection[Name Disambiguation]{Name Disambiguation}
+\label{aut:cav:amb}
+
+The \opt{uniquename} and \opt{uniquelist} options introduced in \secref{use:opt:pre:int} support various modes of operation. This section explains the differences between these modes by way of example. The \opt{uniquename} option disambiguates individual names in the \bibfield{labelname} list. The \opt{uniquelist} option disambiguates the \bibfield{labelname} list if it has become ambiguous after \opt{maxnames}\slash \opt{minnames} truncation. You can use either option stand-alone or combine both.
+
+Name disambiguation works by taking a <base> which is composed of one or more nameparts and then determining what needs to be added, if anything, to this <base> to make the name unique in the current refsection. Name disambiguation is controlled by the uniquename template declared with the following command:
+
+\begin{ltxsyntax}
+
+\cmditem{DeclareUniquenameTemplate}[name]{specification}
+
+Defines the \opt{uniquename} template \prm{name}. The \prm{name} is optional and defaults to \prm{<global>}.
+
+The \prm{specification} is an ordered list of \cmd{namepart} commands which define the nameparts to use in determining the uniquename information.
+
+\cmditem{namepart}[options]{namepart}
+
+\prm{namepart} is one of the datamodel nameparts defined with the \cmd{DeclareDatamodelConstant} command (see \secref{aut:bbx:drv}). The \prm{options} are:
+
+\begin{optionlist*}
+
+\boolitem[false]{use}
+
+Only use the \prm{namepart} in constructing the uniquename information if there is a corresponding option \opt{use<namepart>} and that option is true.
+
+\boolitem[false]{base}
+
+The \prm{namepart} is part of the <base> which is the main piece of namepart(s) information which is being disambiguated by uniqueness information. For example, a family name which may be disambiguated by further given names. <base> \prm{namepart}s must occur before any non-<base> \prm{nameparts}. There \emph{must} be at least one <base> \prm{namepart} and \biber will report an error if this is not the case.
+
+\choitem{disambiguation}{none, init, initorfull, full}
+
+The \prm{namepart} will be disambiguated at most by information at the given value. If this option is not present then the default is inferred from the \opt{uniquename} package option setting (see \secref{use:opt:wu}). The <disambiguation> option is ignored for \prm{namepart}s which have the <base> option set to <true> since it is these nameparts which are being disambiguated by the value of the non-base \prm{namepart}s and therefore <disambiguation> does not apply.
+
+\begin{description}
+\item[none]~Do not use the \prm{namepart} to perform any name disambiguation
+\item[init]~Use only the initials of the \prm{namepart} to perform name disambiguation
+\item[initorfull]~Use initials and if necessary the full \prm{namepart} to perform name disambiguation
+\item[full]~Use only the full \prm{namepart} to perform name
+ disambiguation even if initials would suffice
+\end{description}
+
+\end{optionlist*}
+
+\end{ltxsyntax}
+%
+The default uniquename template is:
+
+\begin{ltxexample}
+\DeclareUniquenameTemplate{
+ \namepart[use=true, base=true]{prefix}
+ \namepart[base=true]{family}
+ \namepart{given}
+}
+\end{ltxexample}
+%
+This means that the <base> to be disambiguated consists of the <family> namepart, along with any prefix, if the \opt{useprefix} option is true. The disambiguation is performed by adding anything up to the full namepart of any non <base> nameparts in the specification, here just the <given> namepart.
+
+\paragraph{Individual Names (\opt{uniquename})}
+
+Let's start off with some \opt{uniquename} examples. Consider the following data:
+
+\begin{lstlisting}{}
+John Doe 2008
+Edward Doe 2008
+John Smith 2008
+Jane Smith 2008
+\end{lstlisting}
+%
+Let's assume we're using an author-year style and set \kvopt{uniquename}{false}. In this case, we would get the following citations:
+
+\begin{lstlisting}{}
+Doe 2008a
+Doe 2008b
+Smith 2008a
+Smith 2008b
+\end{lstlisting}
+%
+Since the family names are ambiguous and all works have been published in the same year, an extra letter is appended to the year to disambiguate the citations. Many style guides, however, mandate that the extra letter be used to disambiguate works by the same authors only, not works by different authors with the same family name. In order to disambiguate the author's family name, you are expected to add additional parts of the name, either as initials or in full. This requirement is addressed by the \opt{uniquename} option. Here are the same citations with \kvopt{uniquename}{init}:
+
+\begin{lstlisting}{}
+J. Doe 2008
+E. Doe 2008
+Smith 2008a
+Smith 2008b
+\end{lstlisting}
+%
+\kvopt{uniquename}{init} restricts name disambiguation to initials. Since <J. Smith> would still be ambiguous, no additional name parts are added for the <Smiths>. With \kvopt{uniquename}{full}, names are printed in full where required:
+
+\begin{lstlisting}{}
+J. Doe 2008
+E. Doe 2008
+John Smith 2008
+Jane Smith 2008
+\end{lstlisting}
+%
+In order to illustrate the difference between \kvopt{uniquename}{init\slash full} and \texttt{allinit\slash allfull}, we need to introduce the notion of a <visible> name. In the following, <visible> names are all names at a position before the \opt{maxnames}\slash \opt{minnames}\slash \opt{uniquelist} truncation point. For example, given this data:
+
+\begin{lstlisting}{}
+William Jones/Edward Doe/Jane Smith
+John Doe
+John Smith
+\end{lstlisting}
+%
+and \kvopt{maxnames}{1}, \kvopt{minnames}{1}, \kvopt{uniquename}{init/full}, we would get the following names in citations:
+
+\begin{lstlisting}{}
+Jones et al.
+Doe
+Smith
+\end{lstlisting}
+%
+When disambiguating names, \kvopt{uniquename}{init/full} only consider the visible names. Since all visible family names are distinct in this example, no further name parts are added. Let's compare that to the output of \kvopt{uniquename}{allinit}:
+
+\begin{lstlisting}{}
+Jones et al.
+J. Doe
+Smith
+\end{lstlisting}
+%
+\texttt{allinit} considers all names in all \bibfield{labelname} lists, including those which are hidden and replaced by <et al.> as the list is truncated. In this example, <John Doe> is disambiguated from <Edward Doe>. Since the ambiguity of the two <Smiths> can't be resolved by adding initials, no initials are added in this case. Now let's compare that to the output of \kvopt{uniquename}{allfull} which also disambiguates <John Smith> from <Jane Smith>:
+
+\begin{lstlisting}{}
+Jones et al.
+J. Doe
+John Smith
+\end{lstlisting}
+%
+The options \kvopt{uniquename}{mininit/minfull} are similar to \texttt{init\slash full} in that they only consider visible names, but they perform minimal disambiguation. That is, they will disambiguate individual names only if they occur in identical lists of base nameparts (for the concept of <base> nameparts, see \cmd{DeclareUniquenameTemplate in \secref{aut:cav:amb}}). Consider the following data:
+
+\begin{lstlisting}{}
+John Doe/William Jones
+Edward Doe/William Jones
+John Smith/William Edwards
+Edward Smith/Allan Johnson
+\end{lstlisting}
+%
+With \kvopt{uniquename}{init/full}, we would get:
+
+\begin{lstlisting}{}
+J. Doe and Jones
+E. Doe and Jones
+J. Smith and Edwards
+E. Smith and Johnson
+\end{lstlisting}
+%
+With \kvopt{uniquename}{mininit/minfull}:
+
+\begin{lstlisting}{}
+J. Doe and Jones
+E. Doe and Jones
+Smith and Edwards
+Smith and Johnson
+\end{lstlisting}
+%
+The <Smiths> are not disambiguated because the visible name lists are not ambiguous and the \opt{mininit/minfull} options serve to disambiguate names occurring in identical base namepart lists only. Another way of looking at this is that they globally disambiguate base namepart lists. When it comes to ambiguous lists, note that a truncated list is considered to be distinct from an untruncated one even if the visible names are identical. For example, consider the following data:
+
+\begin{lstlisting}{}
+John Doe/William Jones
+Edward Doe
+\end{lstlisting}
+%
+With \kvopt{maxnames}{1}, \kvopt{uniquename}{init/full}, we would get:
+
+\begin{lstlisting}{}
+J. Doe et al.
+E. Doe
+\end{lstlisting}
+%
+With \kvopt{uniquename}{mininit/minfull}:
+
+\begin{lstlisting}{}
+Doe et al.
+Doe
+\end{lstlisting}
+%
+Because the lists differ in the <et al.>, the names are not disambiguated.
+
+\paragraph{Lists of Names (\opt{uniquelist})}
+
+Ambiguity is also an issue with name lists. If the \bibfield{labelname} list is truncated by the \opt{maxnames}\slash \opt{minnames} options, it may become ambiguous. This type of ambiguity is addressed by the \opt{uniquelist} option. Consider the following data:
+
+\begin{lstlisting}{}
+Doe/Jones/Smith 2005
+Smith/Johnson/Doe 2005
+Smith/Doe/Edwards 2005
+Smith/Doe/Jones 2005
+\end{lstlisting}
+%
+Many author-year styles truncate long author/editor lists in citations. For example, with \kvopt{maxnames}{1} we would get:
+
+\begin{lstlisting}{}
+Doe et al. 2005
+Smith et al. 2005a
+Smith et al. 2005b
+Smith et al. 2005c
+\end{lstlisting}
+%
+Since the authors are ambiguous after truncation, the extra letter is added to the year to ensure unique citations. Here again, many style guides mandate that the extra letter be used to disambiguate works by the same authors only. In order to disambiguate author lists, you are usually required to add more names, exceeding the \opt{maxnames}\slash \opt{minnames} truncation point. The \opt{uniquelist} feature addresses this requirement. With \kvopt{uniquelist}{true}, we would get:
+
+\begin{lstlisting}{}
+Doe et al. 2005
+Smith, Johnson et al. 2005
+Smith, Doe and Edwards 2005
+Smith, Doe and Jones 2005
+\end{lstlisting}
+%
+The \opt{uniquelist} option overrides \opt{maxnames}\slash \opt{minnames} on a per-entry basis. Essentially, what happens is that the <et al.> part of the citation is expanded to the point of no ambiguity---but no further than that. \opt{uniquelist} may also be combined with \opt{uniquename}. Consider the following data:
+
+\begin{lstlisting}{}
+John Doe/Allan Johnson/William Jones 2009
+John Doe/Edward Johnson/William Jones 2009
+John Doe/Jane Smith/William Jones 2009
+John Doe/John Smith/William Jones 2009
+John Doe/John Edwards/William Jones 2009
+John Doe/John Edwards/Jack Johnson 2009
+\end{lstlisting}
+%
+With \kvopt{maxnames}{1}:
+
+\begin{lstlisting}{}
+Doe et al. 2009a
+Doe et al. 2009b
+Doe et al. 2009c
+Doe et al. 2009d
+Doe et al. 2009e
+Doe et al. 2009f
+\end{lstlisting}
+%
+With \kvopt{maxnames}{1}, \kvopt{uniquename}{full}, \kvopt{uniquelist}{true}:
+
+\begin{lstlisting}{}
+Doe, A. Johnson et al. 2009
+Doe, E. Johnson et al. 2009
+Doe, Jane Smith et al. 2009
+Doe, John Smith et al. 2009
+Doe, Edwards and Jones 2009
+Doe, Edwards and Johnson 2009
+\end{lstlisting}
+%
+With \kvopt{uniquelist}{minyear}, list disambiguation only happens if the visible list is identical to another visible list with the same \bibfield{labelyear}. This is useful for author-year styles which only require that the citation as a whole be unique, but do not guarantee unambiguous authorship information in citations. This mode is conceptually related to \kvopt{uniquename}{mininit/minfull}. Consider this example:
+
+\begin{lstlisting}{}
+Smith/Jones 2000
+Smith/Johnson 2001
+\end{lstlisting}
+%
+With \kvopt{maxnames}{1} and \kvopt{uniquelist}{true}, we would get:
+
+\begin{lstlisting}{}
+Smith and Jones 2000
+Smith and Johnson 2001
+\end{lstlisting}
+%
+With \kvopt{uniquelist}{minyear}:
+
+\begin{lstlisting}{}
+Smith et al. 2000
+Smith et al. 2001
+\end{lstlisting}
+%
+With \kvopt{uniquelist}{minyear}, it is not clear that the authors are different for the two works but the citations as a whole are still unambiguous since the year is different. In contrast to that, \kvopt{uniquelist}{true} disambiguates the authorship even if this information is not required to uniquely locate the works in the bibliography. Let's consider another example:
+
+\begin{lstlisting}{}
+Vogel/Beast/Garble/Rook 2000
+Vogel/Beast/Tremble/Bite 2000
+Vogel/Beast/Acid/Squeeze 2001
+\end{lstlisting}
+%
+With \kvopt{maxnames}{3}, \kvopt{minnames}{1}, \kvopt{uniquelist}{true}, we would get:
+
+\begin{lstlisting}{}
+Vogel, Beast, Garble et al. 2000
+Vogel, Beast, Tremble et al. 2000
+Vogel, Beast, Acid et al. 2001
+\end{lstlisting}
+%
+With \kvopt{uniquelist}{minyear}:
+
+\begin{lstlisting}{}
+Vogel, Beast, Garble et al. 2000
+Vogel, Beast, Tremble et al. 2000
+Vogel et al. 2001
+\end{lstlisting}
+%
+In the last citation, \kvopt{uniquelist}{minyear} does not override \opt{maxnames}\slash \opt{minnames} as the citation does not need disambiguating from the other two because the year is different.
+
+\subsubsection{Trackers in Floats and \acr{TOC}/\acr{LOT}/\acr{LOF}}
+\label{aut:cav:flt}
+
+If a citation is given in a float (typically in the caption of a figure or table), scholarly back references like <ibidem> or back references based on the page tracker get ambiguous because floats are objects which are (physically and logically) placed outside the flow of text, hence the logic of such references applies poorly to them. To avoid any such ambiguities, the citation and page trackers are temporarily disabled in all floats unless explicitly requested with \opt{trackfloats}. In addition to that, these trackers plus the back reference tracker (\opt{backref}) are temporarily disabled in the table of contents, the list of figures, and the list of tables.
+
+\subsubsection{Mixing Programming Interfaces}
+\label{aut:cav:mif}
+
+The \biblatex package provides two main programming interfaces for style authors. The \cmd{DeclareBibliographyDriver} command, which defines a handler for an entry type, is typically used in \file{bbx} files. \cmd{DeclareCiteCommand}, which defines a new citation command, is typically used in \file{cbx} files. However, in some cases it is convenient to mix these two interfaces. For example, the \cmd{fullcite} command prints a verbose citation similar to the full bibliography entry. It is essentially defined as follows:
+
+\begin{ltxexample}
+\DeclareCiteCommand{\fullcite}
+ {...}
+ {<<\usedriver>>{...}{<<\thefield{entrytype}>>}}
+ {...}
+ {...}
+\end{ltxexample}
+%
+As you can see, the core code which prints the citations simply executes the bibliography driver defined with \cmd{DeclareBibliographyDriver} for the type of the current entry. When writing a citation style for a verbose citation scheme, it is often convenient to use the following structure:
+
+\begin{ltxexample}
+\ProvidesFile{example.cbx}[2007/06/09 v1.0 biblatex citation style]
+
+\DeclareCiteCommand{\cite}
+ {...}
+ {<<\usedriver>>{...}{<<cite:\thefield{entrytype}>>}}
+ {...}
+ {...}
+
+\DeclareBibliographyDriver{<<cite:article>>}{...}
+\DeclareBibliographyDriver{<<cite:book>>}{...}
+\DeclareBibliographyDriver{<<cite:inbook>>}{...}
+...
+\end{ltxexample}
+%
+Another case in which mixing interfaces is helpful are styles using cross"=references within the bibliography. For example, when printing an \bibtype{incollection} entry, the data inherited from the \bibtype{collection} parent entry would be replaced by a short pointer to the respective parent entry:
+
+\begin{enumerate}
+\renewcommand*\labelenumi{[\theenumi]}
+\setlength{\leftskip}{0.5em}
+\item Audrey Author: \emph{Title of article}. In: [\textln{2}], pp.~134--165.
+\item Edward Editor, ed.: \emph{Title of collection}. Publisher: Location, 1995.
+\end{enumerate}
+
+One way to implement such cross"=references within the bibliography is to think of them as citations which use the value of the \bibfield{xref} or \bibfield{crossref} field as the entry key. Here is an example:
+
+\begin{ltxexample}
+\ProvidesFile{example.bbx}[2007/06/09 v1.0 biblatex bibliography style]
+
+\DeclareCiteCommand{<<\bbx@xref>>}
+ {}
+ {...}% code for cross-references
+ {}
+ {}
+
+\DeclareBibliographyDriver{incollection}{%
+ ...
+ \iffieldundef{xref}
+ {...}% code if no cross-reference
+ {<<\bbx@xref>>{<<\thefield{xref}>>}}%
+ ...
+}
+\end{ltxexample}
+%
+When defining \cmd{bbx@xref}, the \prm{precode}, \prm{postcode}, and \prm{sepcode} arguments of \cmd{DeclareCiteCommand} are left empty in the above example because they will not be used anyway. The cross"=reference is printed by the \prm{loopcode} of \cmd{bbx@xref}. For further details on the \bibfield{xref} field, refer to \secref{bib:fld:spc} and to the hints in \secref{bib:cav:ref}. Also see the \cmd{iffieldxref}, \cmd{iflistxref}, and \cmd{ifnamexref} tests in \secref{aut:aux:tst}. The above could also be implemented using the \cmd{entrydata} command from \secref{aut:bib:dat}:
+
+\begin{ltxexample}
+\ProvidesFile{example.bbx}[2007/06/09 v1.0 biblatex bibliography style]
+
+\DeclareBibliographyDriver{incollection}{%
+ ...
+ \iffieldundef{xref}
+ {...}% code if no cross-reference
+ {<<\entrydata>>{<<\thefield{xref}>>}{%
+ % code for cross-references
+ ...
+ }}%
+ ...
+}
+\end{ltxexample}
+
+\subsubsection{Using the Punctuation Tracker}
+\label{aut:cav:pct}
+
+\paragraph{The Basics}
+
+There is one fundamental principle style authors should keep in mind when designing a bibliography driver: block and unit punctuation is handled asynchronously. This is best explained by way of example. Consider the following code snippet:
+
+\begin{ltxexample}
+\printfield{title}%
+\newunit
+\printfield{edition}%
+\newunit
+\printfield{note}%
+\end{ltxexample}
+%
+If there is no \bibfield{edition} field, this piece of code will not print:
+
+\begin{lstlisting}[style=highlight]{}
+Title. . Note
+\end{lstlisting}
+%
+but rather:
+
+\begin{lstlisting}[style=highlight]{}
+Title. Note
+\end{lstlisting}
+%
+because the unit punctuation tracker works asynchronously. \cmd{newunit} will not print the unit punctuation immediately. It merely records a unit boundary and puts \cmd{newunitpunct} on the punctuation buffer. This buffer will be handled by \emph{subsequent} \cmd{printfield}, \cmd{printlist}, or similar commands but only if the respective field or list is defined. Commands like \cmd{printfield} will consider three factors prior to inserting any block or unit punctuation:
+
+\begin{itemize}
+\item Has a new unit/block been requested at all?\par
+= Is there any preceding \cmd{newunit} or \cmd{newblock} command?
+\item Did the preceding commands print anything?\par
+= Is there any preceding \cmd{printfield} or similar command?\par
+= Did this command actually print anything?\par
+\item Are we about to print anything now?\par
+= Is the field/list to be processed now defined?
+\end{itemize}
+%
+Block and unit punctuation will only be inserted if \emph{all} of these conditions apply. Let's reconsider the above example:
+
+\begin{ltxexample}
+\printfield{title}%
+\newunit
+\printfield{edition}%
+\newunit
+\printfield{note}%
+\end{ltxexample}
+%
+Here's what happens if the \bibfield{edition} field is undefined. The first \cmd{printfield} command prints the title and sets an internal <new~text> flag. The first \cmd{newunit} sets an internal <new~unit> flag. No punctuation has been printed at this point. The second \cmd{printfield} does nothing because the \bibfield{edition} field is undefined. The next \cmd{newunit} command sets the internal flag <new unit> again. Still no punctuation has been printed. The third \cmd{printfield} checks if the \bibfield{note} field is defined. If so, it looks at the <new~text> and <new~unit> flags. If both are set, it inserts the punctuation buffer before printing the note. It then clears the <new~unit> flag and sets the <new~text> flag again.
+
+This may all sound more complicated than it is. In practice, it means that it is possible to write large parts of a bibliography driver in a sequential way. The advantage of this approach becomes obvious when trying to write the above code without using the punctuation tracker. Such an attempt will lead to a rather convoluted set of \cmd{iffieldundef} tests required to check for all possible field combinations (note that the code below handles three fields; a typical driver may need to cater for some two dozen fields):
+
+\begin{ltxexample}
+\iffieldundef{title}%
+ {\iffieldundef{edition}
+ {\printfield{note}}
+ {\printfield{edition}%
+ \iffieldundef{note}%
+ {}
+ {. \printfield{note}}}}
+ {\printfield{title}%
+ \iffieldundef{edition}
+ {}
+ {. \printfield{edition}}%
+ \iffieldundef{note}
+ {}
+ {. \printfield{note}}}%
+\end{ltxexample}
+
+\paragraph{Common Mistakes}
+
+It is a fairly common misconception to think of the unit punctuation as something that is handled synchronously. This typically causes problems if the driver includes any literal text. Consider this erroneous code snippet which will generate misplaced unit punctuation:
+
+\begin{ltxexample}
+\printfield{title}%
+\newunit
+<<(>>\printfield{series} \printfield{number}<<)>>%
+\end{ltxexample}
+%
+This code will yield the following result:
+
+\begin{lstlisting}[style=highlight]{}
+Title <<(.>> Series Number<<)>>
+\end{lstlisting}
+%
+Here's what happens. The first \cmd{printfield} prints the title. Then \cmd{newunit} marks a unit boundary but does not print anything. The unit punctuation is printed by the \emph{next} \cmd{printfield} command. That's the asynchronous part mentioned before. However, the opening parenthesis is printed immediately before the next \cmd{printfield} inserts the unit punctuation, leading to a misplaced period. When inserting \emph{any} literal text such as parentheses (including those printed by commands such as \cmd{bibopenparen} and \cmd{mkbibparens}), always wrap the text in a \cmd{printtext} command. For the punctuation tracker to work as expected, it needs to know about all literal text inserted by a driver. This is what \cmd{printtext} is all about. \cmd{printtext} interfaces with the punctuation tracker and ensures that the punctuation buffer is inserted before the literal text gets printed. It also sets the internal <new~text> flag. Note there is in fact a third piece of literal text in this example: the space after |\printfield{series}|. In the corrected example, we will use the punctuation tracker to handle that space.
+
+\begin{ltxexample}
+\printfield{title}%
+\newunit
+<<\printtext{(}>>%
+\printfield{series}%
+<<\setunit*{\addspace}>>%
+\printfield{number}%
+<<\printtext{)}>>%
+\end{ltxexample}
+%
+While the above code will work as expected, the recommended way to handle parentheses, quotes, and other things which enclose more than one field, is to define a field format:
+
+\begin{ltxexample}
+\DeclareFieldFormat{<<parens>>}{<<\mkbibparens{#1}>>}
+\end{ltxexample}
+%
+Field formats may be used with both \cmd{printfield} and \cmd{printtext}, hence we can use them to enclose several fields in a single pair of parentheses:
+
+\begin{ltxexample}
+<<\printtext[parens]{>>%
+ \printfield{series}%
+ \setunit*{\addspace}%
+ \printfield{number}%
+<<}>>%
+\end{ltxexample}
+%
+We still need to handle cases in which there is no series information at all, so let's improve the code some more:
+
+\begin{ltxexample}
+<<\iffieldundef{series}>>
+ {}
+ {\printtext[parens]{%
+ \printfield{series}%
+ \setunit*{\addspace}%
+ \printfield{number}}}%
+\end{ltxexample}
+%
+One final hint: localisation strings are not literal text as far as the punctuation tracker is concerned. Since \cmd{bibstring} and similar commands interface with the punctuation tracker, there is no need to wrap them in a \cmd{printtext} command.
+
+\paragraph{Advanced Usage}
+
+The punctuation tracker may also be used to handle more complex scenarios. For example, suppose that we want the fields \bibfield{location}, \bibfield{publisher}, and \bibfield{year} to be rendered in one of the following formats, depending on the available data:
+
+\begin{ltxexample}
+...text<<. Location: Publisher, Year.>> Text...
+...text<<. Location: Publisher.>> Text...
+...text<<. Location: Year.>> Text...
+...text<<. Publisher, Year.>> Text...
+...text<<. Location.>> Text...
+...text<<. Publisher.>> Text...
+...text<<. Year.>> Text...
+\end{ltxexample}
+%
+This problem can be solved with a rather convoluted set of \cmd{iflistundef} and \cmd{iffieldundef} tests which check for all possible field combinations:
+
+\begin{ltxexample}
+\iflistundef{location}
+ {\iflistundef{publisher}
+ {\printfield{year}}
+ {\printlist{publisher}%
+ \iffieldundef{year}
+ {}
+ {, \printfield{year}}}}
+ {\printlist{location}%
+ \iflistundef{publisher}%
+ {\iffieldundef{year}
+ {}
+ {: \printfield{year}}}
+ {: \printlist{publisher}%
+ \iffieldundef{year}
+ {}
+ {, \printfield{year}}}}%
+\end{ltxexample}
+%
+The above could be written in a somewhat more readable way by employing \cmd{ifthenelse} and the boolean operators discussed in \secref{aut:aux:ife}. The approach would still be essentially the same. However, it may also be written sequentially:
+
+\begin{ltxexample}
+\newunit
+\printlist{location}%
+\setunit*{\addcolon\space}%
+\printlist{publisher}%
+\setunit*{\addcomma\space}%
+\printfield{year}%
+\newunit
+\end{ltxexample}
+%
+In practice, you will often use a combination of explicit tests and the implicit tests performed by the punctuation tracker. For example, consider the following format (note the punctuation after the location if there is no publisher):
+
+\begin{ltxexample}
+...text. Location: Publisher, Year. Text...
+...text. Location: Publisher. Text...
+...text<<. Location, Year.>> Text...
+...text. Publisher, Year. Text...
+...text. Location. Text...
+...text. Publisher. Text...
+...text. Year. Text...
+\end{ltxexample}
+%
+This can be handled by the following code:
+
+\begin{ltxexample}
+\newunit
+\printlist{location}%
+\iflistundef{publisher}
+ {\setunit*{\addcomma\space}}
+ {\setunit*{\addcolon\space}}%
+\printlist{publisher}%
+\setunit*{\addcomma\space}%
+\printfield{year}%
+\newunit
+\end{ltxexample}
+%
+Since the punctuation after the location is special if there is no publisher, we need one \cmd{iflistundef} test to catch this case. Everything else is handled by the punctuation tracker.
+
+\subsubsection{Custom Localization Modules}
+\label{aut:cav:lng}
+
+Style guides may include provisions as to how strings like <edition> should be abbreviated or they may mandate certain fixed expressions. For example, the \acr{mla} style guide requires authors to use the term <Works~Cited> rather than <Bibliography> or <References> in the heading of the bibliography. Localization commands such as \cmd{DefineBibliographyStrings} from \secref{use:lng} may indeed be used in \file{cbx} and \file{bbx} files to handle such cases. However, overloading style files with translations is rather inconvenient. This is where \cmd{DeclareLanguageMapping} from \secref{aut:lng:cmd} comes into play. This command maps an \file{lbx} file with alternative translations to a \sty{babel}/\sty{polyglossia} language. For example, you could create a file named \path{french-humanities.lbx} which provides French translations adapted for use in the humanities and map it to the \sty{babel}/\sty{polyglossia} language \texttt{french} in the preamble or in the configuration file:
+
+\begin{ltxexample}
+\DeclareLanguageMapping{french}{french-humanities}
+\end{ltxexample}
+%
+If the document language is set to \texttt{french}, \path{french-humanities.lbx} will replace \path{french.lbx}. Coming back to the \acr{mla} example mentioned above, an \acr{mla} style may come with an \path{american-mla.lbx} file to provide strings which comply with the \acr{mla} style guide. It would declare the following mapping in the \file{cbx} and/or \file{bbx} file:
+
+\begin{ltxexample}
+\DeclareLanguageMapping{american}{american-mla}
+\end{ltxexample}
+%
+Use \cmd{DeclareLanguageMappingSuffix} (see \secref{aut:lng:cmd}) to define such a mapping for all languages.
+
+Since the alternative \file{lbx} file can inherit strings from the standard \path{american.lbx} module, \path{american-mla.lbx} may be as short as this:
+
+\begin{ltxexample}
+\ProvidesFile{american-mla.lbx}[2008/10/01 v1.0 biblatex localization]
+<<\InheritBibliographyExtras>>{<<american>>}
+\DeclareBibliographyStrings{%
+ <<inherit>> = {<<american>>},
+ bibliography = {{Works Cited}{Works Cited}},
+ references = {{Works Cited}{Works Cited}},
+}
+\endinput
+\end{ltxexample}
+%
+Alternative \file{lbx} files must ensure that the localisation module is complete. They should do so by inheriting data from the corresponding standard module. If the language \texttt{american} is mapped to \path{american-mla.lbx}, \biblatex will not load \path{american.lbx} unless this module is requested explicitly. In the above example, inheriting <strings> and <extras> will cause \biblatex to load \path{american.lbx} before applying the modifications in \path{american-mla.lbx}.
+
+Note that \cmd{DeclareLanguageMapping} is not intended to handle language variants (\eg American English vs. British English) or \sty{babel}/\sty{polyglossia} language aliases (\eg \texttt{USenglish} vs. \texttt{american}). For example, \sty{babel}/\sty{polyglossia} offers the \texttt{USenglish} option which is similar to \texttt{american}. Therefore, \biblatex comes with an \path{USenglish.lbx} file which simply inherits all data from \path{american.lbx} (which in turn gets the <strings> from \path{english.lbx}). In other words, the mapping of language variants and \sty{babel}/\sty{polyglossia} language aliases happens on the file level, the point being that \biblatex's language support can be extended simply by adding additional \file{lbx} files. There is no need for centralized mapping. If you need support for, say, Portuguese (babel/polyglossia: \file{portuges}), you create a file named \path{portuges.lbx}. If \sty{babel}/\sty{polyglossia} offered an alias named \texttt{brasil}, you would create \path{brasil.lbx} and inherit the data from \path{portuges.lbx}. In contrast to that, the point of \cmd{DeclareLanguageMapping} is handling \emph{stylistic} variants like <humanities vs. natural sciences> or <\acr{mla} vs. \acr{apa}> etc. which will typically be built on top of existing \file{lbx} files.
+
+\subsubsection{Grouping}
+\label{aut:cav:grp}
+
+In a citation or bibliography style, you may need to set flags or store certain values for later use. In this case, it is crucial to understand the basic grouping structure imposed by this package. As a rule of thumb, you are working in a large group whenever author commands such as those discussed in \secref{aut:aux} are available because the author interface of this package is only enabled locally. If any bibliographic data is available, there is at least one additional group. Here are some general rules:
+
+\begin{itemize}
+
+\item The entire list of references printed by \cmd{printbibliography} and similar commands is processed in a group. Each entry in the list is processed in an additional group which encloses the \prm{item code} of \cmd{defbibenvironment} as well as all driver code.
+
+\item The entire bibliography list printed by \cmd{printbiblist} is processed in a group. Each entry in the list is processed in an additional group which encloses the \prm{item code} of \cmd{defbibenvironment} as well as all driver code.
+
+\item All citation commands defined with \cmd{DeclareCiteCommand} are processed in a group holding the complete citation code consisting of the \prm{precode}, \prm{sepcode}, \prm{loopcode}, and \prm{postcode} arguments. The \prm{loopcode} is enclosed in an additional group every time it is executed. If any \prm{wrapper} code has been specified, the entire unit consisting of the wrapper code and the citation code is wrapped in an additional group.
+
+\item In addition to the grouping imposed by all backend commands defined with \cmd{DeclareCiteCommand}, all <autocite> and <multicite> definitions imply an additional group.
+
+\item \cmd{printfile}, \cmd{printtext}, \cmd{printfield}, \cmd{printlist}, and \cmd{printnames} form groups. This implies that all formatting directives will be processed within a group of their own.
+
+\item All \file{lbx} files are loaded and processed in a group. If an \file{lbx} file contains any code which is not part of \cmd{DeclareBibliographyExtras}, the definitions must be global.
+
+\end{itemize}
+
+Note that using \cmd{aftergroup} in citation and bibliography styles is unreliable because the precise number of groups employed in a certain context may change in future versions of this package. If the above list states that something is processed in a group, this means that there is \emph{at least one} group. There may also be several nested ones.
+
+\subsubsection{Namespaces}
+\label{aut:cav:nam}
+
+In order to minimize the risk of name clashes, \latex packages typically prefix the names of internal macros with a short string specific to the package. For example, if the \sty{foobar} package requires a macro for internal use, it would typically be called \cmd{FB@macro} or \cmd{foo@macro} rather than \cmd{macro} or \cmd{@macro}. Here is a list of the prefixes used or recommended by \biblatex:
+
+\begin{marglist}
+
+\item[\texttt{blx}] All macros with names like \cmd{blx@name} are strictly reserved for internal use. This also applies to counter names, length registers, boolean switches, and so on. These macros may be altered in backwards"=incompatible ways, they may be renamed or even removed at any time without further notice. Such changes will not even be mentioned in the revision history or the release notes. In short: never use any macros with the string \texttt{blx} in their name in any styles.
+
+\item[\texttt{abx}] Macros prefixed with \texttt{abx} are also internal macros but they are fairly stable. It is always preferable to use the facilities provided by the official author interface, but there may be cases in which using an \texttt{abx} macro is convenient.
+
+\item[\texttt{bbx}] This is the recommended prefix for internal macros defined in bibliography styles.
+
+\item[\texttt{cbx}] This is the recommended prefix for internal macros defined in citation styles.
+
+\item[\texttt{lbx}] This is the recommended base prefix for internal macros defined in localisation modules. The localisation module should add a second prefix to specify the language. For example, an internal macro defined by the Spanish localisation module would be named \cmd{lbx@es@macro}.
+
+\end{marglist}
+
+\appendix
+\section*{Appendix}
+\addcontentsline{toc}{section}{Appendix}
+
+\section{Default Driver Source Mappings}
+\label{apx:maps}
+
+These are the driver default source mappings.
+
+\subsection{\opt{bibtex}}\label{apx:maps:bibtex}
+The \opt{bibtex} driver is of course the most comprehensive and mature of the \biblatex/\biber supported data formats. These source mapping defaults are how the aliases from sections \secref{bib:typ:als} and \secref{bib:fld:als} are implemented.
+
+\begin{ltxexample}
+\DeclareDriverSourcemap[datatype=bibtex]{
+ \map{
+ \step[typesource=conference, typetarget=inproceedings]
+ \step[typesource=electronic, typetarget=online]
+ \step[typesource=www, typetarget=online]
+ }
+ \map{
+ \step[typesource=mastersthesis, typetarget=thesis, final]
+ \step[fieldset=type, fieldvalue=mathesis]
+ }
+ \map{
+ \step[typesource=phdthesis, typetarget=thesis, final]
+ \step[fieldset=type, fieldvalue=phdthesis]
+ }
+ \map{
+ \step[typesource=techreport, typetarget=report, final]
+ \step[fieldset=type, fieldvalue=techreport]
+ }
+ \map{
+ \step[fieldsource=address, fieldtarget=location]
+ \step[fieldsource=school, fieldtarget=institution]
+ \step[fieldsource=annote, fieldtarget=annotation]
+ \step[fieldsource=archiveprefix, fieldtarget=eprinttype]
+ \step[fieldsource=journal, fieldtarget=journaltitle]
+ \step[fieldsource=primaryclass, fieldtarget=eprintclass]
+ \step[fieldsource=key, fieldtarget=sortkey]
+ \step[fieldsource=pdf, fieldtarget=file]
+ }
+}
+\end{ltxexample}
+
+\section{Default Inheritance Setup}
+\label{apx:ref}
+
+The following table shows the \biber cross-referencing rules defined by default.
+Please refer to \secref{bib:cav:ref, aut:ctm:ref} for explanation.
+
+\begingroup
+\tablesetup
+\def\sep{\textrm{, }}
+\def\skip{\textrm{--}}
+\def\note#1{\textrm{#1}}
+\begin{longtable}[l]{%
+ @{}V{0.2\textwidth}%
+ @{}V{0.4\textwidth}%
+ @{}V{0.3\textwidth}%
+ @{}V{0.3\textwidth}@{}}
+\toprule
+\multicolumn{2}{@{}H}{Types} & \multicolumn{2}{@{}H}{Fields} \\
+\cmidrule(r){1-2}\cmidrule{3-4}
+\multicolumn{1}{@{}H}{Source} & \multicolumn{1}{@{}H}{Target} &
+\multicolumn{1}{@{}H}{Source} & \multicolumn{1}{@{}H}{Target} \\
+\cmidrule(r){1-1}\cmidrule(r){2-2}\cmidrule(r){3-3}\cmidrule{4-4}
+\endhead
+\bottomrule
+\endfoot
+{\normalsize*} & {\normalsize*} &
+ ids\par
+ crossref\par
+ xref\par
+ entryset\par
+ entrysubtype\par
+ execute\par
+ label\par
+ options\par
+ presort\par
+ related\par
+ relatedoptions\par
+ relatedstring\par
+ relatedtype\par
+ shorthand\par
+ shorthandintro\par
+ sortkey &
+ \skip\par \skip\par \skip\par \skip\par
+ \skip\par \skip\par \skip\par \skip\par
+ \skip\par \skip\par \skip\par \skip\par
+ \skip\par \skip\par \skip\par \skip \\\addlinespace
+mvbook\sep book &
+ inbook\sep bookinbook\sep suppbook &
+ author\par author &
+ author\par bookauthor \\\addlinespace
+mvbook &
+ book\sep inbook\sep bookinbook\sep suppbook &
+ title\par subtitle\par titleaddon\par
+ shorttitle\par sorttitle\par indextitle\par indexsorttitle &
+ maintitle\par mainsubtitle\par maintitleaddon\par
+ \skip\par \skip\par \skip\par \skip \\\addlinespace
+mvcollection\sep mvreference &
+ collection\sep reference\sep incollection\sep inreference\sep suppcollection &
+ title\par subtitle\par titleaddon\par
+ shorttitle\par sorttitle\par indextitle\par indexsorttitle &
+ maintitle\par mainsubtitle\par maintitleaddon\par
+ \skip\par \skip\par \skip\par \skip \\\addlinespace
+mvproceedings &
+ proceedings\sep inproceedings &
+ title\par subtitle\par titleaddon\par
+ shorttitle\par sorttitle\par indextitle\par indexsorttitle &
+ maintitle\par mainsubtitle\par maintitleaddon\par
+ \skip\par \skip\par \skip\par \skip \\\addlinespace
+book &
+ inbook\sep bookinbook\sep suppbook &
+ title\par subtitle\par titleaddon\par
+ shorttitle\par sorttitle\par indextitle\par indexsorttitle &
+ booktitle\par booksubtitle\par booktitleaddon\par
+ \skip\par \skip\par \skip\par \skip \\\addlinespace
+collection\sep reference &
+ incollection\sep inreference\sep suppcollection &
+ title\par subtitle\par titleaddon\par
+ shorttitle\par sorttitle\par indextitle\par indexsorttitle &
+ booktitle\par booksubtitle\par booktitleaddon\par
+ \skip\par \skip\par \skip\par \skip \\\addlinespace
+proceedings &
+ inproceedings &
+ title\par subtitle\par titleaddon\par
+ shorttitle\par sorttitle\par indextitle\par indexsorttitle &
+ booktitle\par booksubtitle\par booktitleaddon\par
+ \skip\par \skip\par \skip\par \skip \\\addlinespace
+periodical &
+ article\sep suppperiodical &
+ title\par subtitle\par
+ shorttitle\par sorttitle\par indextitle\par indexsorttitle &
+ journaltitle\par journalsubtitle\par
+ \skip\par \skip\par \skip\par \skip \\\addlinespace
+{\normalsize*} & {\normalsize*} & {\normalsize*} & {\normalsize*}\\
+\end{longtable}
+\endgroup
+
+\section{Default Sorting Templates}
+\label{apx:srt}
+
+\subsection[Alphabetic 1]{Alphabetic Templates 1}
+\label{apx:srt:a1}
+
+The following table shows the standard alphabetic sorting templates defined by default. Please refer to \secref{use:srt} for explanation.
+
+\begingroup
+\sorttablesetup
+\begin{longtable}[l]{@{}%
+ V{0.100\textwidth}@{}%
+ L{0.100\textwidth}@{}%
+ L{0.175\textwidth}@{}%
+ L{0.175\textwidth}@{}%
+ L{0.150\textwidth}@{}%
+ L{0.300\textwidth}@{}}
+\toprule
+\multicolumn{1}{@{}H}{Option} & \multicolumn{5}{@{}H}{Template name} \\
+\cmidrule(r){1-1}\cmidrule{2-6}
+\endhead
+\bottomrule
+\endfoot
+nty & presort\alt mm &
+ \new sortname\alt author\alt editor\alt translator\alt sorttitle\alt title &
+ \new sorttitle\alt title &
+ \new sortyear\alt year &
+ \new volume\\
+nyt & presort\alt mm &
+ \new sortname\alt author\alt editor\alt translator\alt sorttitle\alt title &
+ \new sortyear\alt year &
+ \new sorttitle\alt title &
+ \new volume\\
+nyvt & presort\alt mm &
+ \new sortname\alt author\alt editor\alt translator\alt sorttitle\alt title &
+ \new sortyear\alt year &
+ \new volume &
+ \new sorttitle\alt title \\
+\textrm{all} & presort\alt mm &
+ \new sortkey \\
+\end{longtable}
+\endgroup
+
+\subsection[Alphabetic 2]{Alphabetic Templates 2}
+\label{apx:srt:a2}
+
+The following table shows the alphabetic sorting templates for \texttt{alphabetic} styles defined by default. Please refer to \secref{use:srt} for explanation.
+
+\begingroup
+\sorttablesetup
+\begin{longtable}[l]{@{}%
+ V{0.100\textwidth}@{}%
+ L{0.100\textwidth}@{}%
+ L{0.175\textwidth}@{}%
+ L{0.175\textwidth}@{}%
+ L{0.150\textwidth}@{}%
+ L{0.150\textwidth}@{}%
+ L{0.150\textwidth}@{}}
+\toprule
+\multicolumn{1}{@{}H}{Option} & \multicolumn{6}{@{}H}{Template name} \\
+\cmidrule(r){1-1}\cmidrule{2-7}
+\endhead
+\bottomrule
+\endfoot
+anyt & presort\alt mm &
+ \new labelalpha &
+ \new sortname\alt author\alt editor\alt translator\alt sorttitle\alt title &
+ \new sortyear\alt year &
+ \new sorttitle\alt title &
+ \new volume\\
+anyvt & presort\alt mm &
+ \new labelalpha &
+ \new sortname\alt author\alt editor\alt translator\alt sorttitle\alt title &
+ \new sortyear\alt year &
+ \new volume &
+ \new sorttitle\alt title \\
+\textrm{all} & presort\alt mm &
+ \new labelalpha &
+ \new sortkey \\
+\end{longtable}
+\endgroup
+
+\subsection[Chronological]{Chronological Templates}
+\label{apx:srt:chr}
+
+The following table shows the chronological sorting templates defined by default. Please refer to \secref{use:srt} for explanation.
+
+\begingroup
+\sorttablesetup
+\begin{longtable}[l]{@{}%
+ V{0.100\textwidth}@{}%
+ L{0.100\textwidth}@{}%
+ L{0.225\textwidth}@{}%
+ L{0.175\textwidth}@{}%
+ L{0.400\textwidth}@{}}
+\toprule
+\multicolumn{1}{@{}H}{Option} & \multicolumn{4}{@{}H}{Template name} \\
+\cmidrule(r){1-1}\cmidrule{2-5}
+\endhead
+\bottomrule
+\endfoot
+ynt & presort\alt mm &
+ \new sortyear\alt year \alt 9999 &
+ \new sortname\alt author\alt editor\alt translator\alt sorttitle\alt title &
+ \new sorttitle\alt title \\
+ydnt & presort\alt mm &
+ \new sortyear\note{ (desc.)}\alt year\note{ (desc.)} \alt 9999 &
+ \new sortname\alt author\alt editor\alt translator\alt sorttitle\alt title &
+ \new sorttitle\alt title \\
+\textrm{all} & presort\alt mm &
+ \new sortkey \\
+\end{longtable}
+\endgroup
+
+\section{\biblatexml}
+\label{apx:biblatexml}
+The \biblatexml\ XML datasource format is designed to be an extensible and modern data source format for \biblatex\ users. There are limitations with \bibtex\ format \file{.bib} files, in particular one might mention UTF-8 support and name formats. \biber\ goes some way to addressing the UTF-8 limitations by using a modified version of the \texttt{btparse} C library but the rather archaic name parsing rules for \bibtex\ are hard-coded and specific to simple Western names.
+
+\biblatexml is an XML format for bibliographic data. When \biber\ either reads or writes \biblatexml\ format datasources, it automatically writes a RelaXNG XML schema for the datasources which is dynamically generated from the active \biblatex\ datamodel. There is no static schema for \biblatexml\ datasources because the allowable fields etc. depend on the data model. The format of \biblatexml\ datasources is relatively self-explanatory---it is usually only necessary to generate a \biblatexml\ datasource from existing \bibtex\ format datasources (using \biber's <tool> mode) in order to understand the format. \biber also allows users to validate \biblatexml\ datasources against the data model generated schema.
+
+Since the \biblatexml\ format is XML and depends on the data model and the data model is extensible by the user (see \secref{aut:ctm:dm}), the \biblatexml\ format can deal with extensions that \bibtex\ format data sources cannot, e.g. new nameparts, options at sub-entry scope. Since it is an XML format, it is relatively easy to transform it into other XML formats or HTML using standard XML processing libraries and tools.
+
+Here is an explanation of the format with examples. By convention, \biblatexml\ files have a \file{.bltxml} extension and \file{kpsewhich} understands this file extension.
+
+\subsection{Header}
+\biblatexml\ files begin with the standard XML header:
+
+\begin{lstlisting}[language=xml]
+<?xml version="1.0" encoding="UTF-8"?>
+\end{lstlisting}
+%
+The schema model, type and schema type namespace are given in the following line:
+
+\begin{lstlisting}[language=xml]
+<?xml-model href="biblatexml.rng"
+ type="application/xml"
+ schematypens="http://relaxng.org/ns/structure/1.0"?>
+\end{lstlisting}
+%
+When \biber\ generates \biblatexml\ data sources, it automatically adds this line and points the schema model (href) attribute at the automatically generated RelaXNG XML schema for ease of validation.
+
+\subsection{Body}
+
+The body of a \biblatexml\ data source looks like:
+
+\begin{lstlisting}[language=xml]
+<bltx:entries
+ xmlns:bltx="http://biblatex-biber.sourceforge.net/biblatexml">
+
+ <bltx:entry id="" entrytype="">
+ </bltx:entry>
+ .
+ .
+ .
+ <bltx:entry id="" entrytype="">
+ </bltx:entry>
+
+</bltx:entries>
+\end{lstlisting}
+%
+The body is one or more \bibfield{entry} elements inside the top-level \bibfield{entries} element and everything is in the \bibfield{bltx} namespace. An entry has an \bibfield{id} attribute corresponding to a \bibtex\ entry key and a \bibfield{entrytype} attribute corresponding to a \bibtex\ entrytype. For example, the \biblatexml\
+
+\begin{lstlisting}[language=xml]
+<?xml version="1.0" encoding="UTF-8"?>
+<?xml-model href="biblatexml.rng"
+ type="application/xml"
+ schematypens="http://relaxng.org/ns/structure/1.0"?>
+<bltx:entries
+ xmlns:bltx="http://biblatex-biber.sourceforge.net/biblatexml">
+ <bltx:entry id="key1" entrytype="book">
+ </bltx:entry>
+</bltx:entries>
+\end{lstlisting}
+%
+Corresponds to the \bibtex\ \file{.bib}
+
+\begin{lstlisting}[style=bibtex]{}
+@book{key1,
+}
+\end{lstlisting}
+%
+In general, the XML elements in a \biblatexml\ format datasource file have names corresponding to the fields in the datamodel, just like \bibtex\ format datasources. So for example, the \bibtex\ format source
+
+\begin{lstlisting}[style=bibtex]{}
+@book{key1,
+ TITLE = {...},
+ ISSUE = {...},
+ NOTE = {...}
+}
+\end{lstlisting}
+%
+would be, in \biblatexml
+
+\begin{lstlisting}[language=xml]
+ <bltx:entry id="key1" entrytype="book">
+ <bltx:title>...</bltx:title>
+ <bltx:issue>...</bltx:issue>
+ <bltx:note>...</bltx:note>
+ </bltx:entry>
+\end{lstlisting}
+%
+The following exceptions to this simple mapping are to be noted
+
+\subsubsection{Key aliases}
+Citation key aliases are specified like this:
+
+\begin{lstlisting}[language=xml]
+ <bltx:ids>
+ <bltx:key>alias1</bltx:key>
+ <bltx:key>alias2</bltx:key>
+ </bltx:ids>
+\end{lstlisting}
+%
+this corresponds to the \bibtex\ format
+
+\begin{lstlisting}[style=bibtex]{}
+@book{key1,
+ IDS = {alias1,alias2}
+}
+\end{lstlisting}
+
+\subsubsection{Names}
+
+Name specifications in \biblatexml\ are somewhat more complex in order to generalise the name handling abilities of \biblatex. The user has to be more explicit about the name parts and this allows a much great scope for the handling of different types of names and name parts. A name in \biblatexml\ format looks like this
+
+\begin{lstlisting}[language=xml]
+ <bltx:names type="author" morenames="1" useprefix="true">
+ <bltx:name gender="sm">
+ <bltx:namepart type="given">
+ <bltx:namepart initial="J">John</bltx:namepart>
+ <bltx:namepart initial="A">Arthur</bltx:namepart>
+ </bltx:namepart>
+ <bltx:namepart type="family">Smith</bltx:namepart>
+ <bltx:namepart type="prefix" initial="v">von</bltx:namepart>
+ </bltx:name>
+ <bltx:name useprefix="false">
+ <bltx:namepart type="given">
+ <bltx:namepart>Raymond</bltx:namepart>
+ </bltx:namepart>
+ <bltx:namepart type="family">Brown</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+\end{lstlisting}
+%
+A name list field is contained in the \bibfield{names} element with the mandatory \bibfield{type} attribute giving the name of the name list. Things to note:
+
+\begin{itemize}
+ \item The optional \bibfield{morenames} attribute performs the same task as the \bibtex\ datasource format <and others> string at the end of a name.
+ \item Note that optional \opt{useprefix} option can be specified at the level of a name list or an individual name in the name list. This is impossible with \bibtex\ datasources.
+ \item Individual names may have an optional \bibfield{gender} attribute which must be one of those defined in the datamodel <gender> constant list. This is currently not used by standard styles but is available in \biblatex name formats if necessary.
+ \item A name list is composed of one or more \bibfield{name} elements.
+ \item Each name is composed of name parts of a \bibfield{type} defined by the data model <nameparts> constant.
+ \item Each name part may have an option \bibfield{initial} attribute which makes explicit the initial of the name part. If this is not present, \biber\ attempts to automatically determine the initial from the name part.
+ \item Name parts may have name parts so that compound names can be handled.
+\end{itemize}
+%
+Ignoring the \biblatexml-only features, a corresponding \bibtex\ format datasource would look like this:
+
+\begin{lstlisting}[style=bibtex]{}
+ AUTHOR = {von Smith, John Arthur and Brown, Raymond and others}
+\end{lstlisting}
+
+\subsubsection{Lists}
+Datasource list fields (see \secref{bib:fld:typ}) can be represented in two ways, depending on whether there is more than one element in the list:
+
+\begin{lstlisting}[language=xml]
+ <bltx:publisher>London</bltx:publisher>
+ <bltx:location>
+ <bltx:item>London</bltx:item>
+ <bltx:item>Moscow</bltx:item>
+ </bltx:location>
+\end{lstlisting}
+
+\subsubsection{Ranges}
+Datasource range fields (see \secref{bib:fld:typ}) are represented like this:
+
+\begin{lstlisting}[language=xml]
+ <bltx:pages>
+ <bltx:item>
+ <bltx:start>1</bltx:start>
+ <bltx:end>10</bltx:end>
+ </bltx:item>
+ <bltx:item>
+ <bltx:start>30</bltx:start>
+ <bltx:end>34</bltx:end>
+ </bltx:item>
+ </bltx:pages>
+\end{lstlisting}
+%
+A range field is a list of ranges, each with its own \bibfield{item}. A range item has a \bibfield{start} element and an optional \bibfield{end} element, since ranges can be open-ended.
+
+\subsubsection{Dates}
+Datasource date fields (see \secref{bib:fld:typ}) can be represented in two ways, depending on whether they constitute a date range:
+
+\begin{lstlisting}[language=xml]
+ <bltx:date>1985-04-02</bltx:date>
+ <bltx:date type="event">
+ <bltx:start>1990-05-16</bltx:start>
+ <bltx:end>1990-05-17</bltx:end>
+ </bltx:date>
+\end{lstlisting}
+%
+The \bibfield{type} attribute on a date element corresponds to a particular type of date defined in the data model.
+
+\subsubsection{Related Entries}
+
+Related entries are specified as follows:
+\begin{lstlisting}[language=xml]
+ <bltx:related>
+ <bltx:item type="reprint"
+ ids="rel1,rel2"
+ string="Somestring"
+ options="skipbiblist"/>
+ </bltx:related>
+\end{lstlisting}
+%
+This corresponds to the \bibtex\ format:
+
+\begin{lstlisting}[style=bibtex]{}
+@book{key1,
+ RELATED = {rel2,rel2},
+ RELATEDTYPE = {reprint},
+ RELATEDSTRING = {Somestring},
+ RELATEDOPTIONS = {skipbiblist}
+}
+\end{lstlisting}
+%
+As per \secref{aut:ctm:rel}, the \bibfield{string} and \bibfield{options} attributes are optional.
+
+\section{Option Scope}
+\label{apx:opt}
+
+The following table provides an overview of the scope of various options.
+
+Per-entry, per-namelist and per-name options are set in the datasource, for
+example, in a \file{.bib}file. See the \biber documentation for details
+but here are a few examples. Per-entry:
+
+\begin{lstlisting}[style=bibtex]{}
+@BOOK{key,
+ OPTIONS = {sortingnamekeytemplatename=template1},
+}
+\end{lstlisting}
+%
+Per-namelist and per-name options require either the \biblatexml datasource
+format or the extend \bibtex name format supported by \biber (see the
+\biber documentation for details). Per-namelist:
+
+\begin{lstlisting}[style=bibtex]{}
+@BOOK{key,
+ AUTHOR = {sortingnamekeytemplatename=template1 and Arthur Smith and Bill Brown},
+}
+\end{lstlisting}
+%
+Per-name:
+
+\begin{lstlisting}[style=bibtex]{}
+@BOOK{key,
+ AUTHOR = {sortingnamekeytemplatename=template1, family=Smith, given=Arthur and Bill Brown},
+}
+\end{lstlisting}
+
+\begingroup
+\tablesetup
+\let\+\tickmarkyes
+\let\_\tickmarkno
+\begin{longtable}[l]{@{}%
+ V{0.3\textwidth}@{}%
+ C{0.1\textwidth}@{}%
+ C{0.1\textwidth}@{}%
+ C{0.1\textwidth}@{}%
+ C{0.1\textwidth}@{}%
+ C{0.1\textwidth}@{}%
+ C{0.1\textwidth}@{}%
+ C{0.1\textwidth}@{}}
+\toprule
+\multicolumn{1}{@{}H}{Option} &
+\multicolumn{7}{@{}H}{Scope} \\
+\cmidrule{2-8}
+& \multicolumn{1}{@{}H}{Load-time} &
+\multicolumn{1}{@{}H}{Global} &
+\multicolumn{1}{@{}H}{Per-refcontext} &
+\multicolumn{1}{@{}H}{Per-type} &
+\multicolumn{1}{@{}H}{Per-entry} &
+\multicolumn{1}{@{}H}{Per-namelist} &
+\multicolumn{1}{@{}H}{Per-name} \\
+\cmidrule(r){1-1}\cmidrule(r){2-2}\cmidrule(r){3-3}\cmidrule(r){4-4}\cmidrule(r){5-5}\cmidrule(r){6-6}\cmidrule(r){7-7}\cmidrule(r){8-8}
+\endhead
+\bottomrule
+\endfoot
+abbreviate &\+&\+&\_&\+&\+&\_&\_\\
+alldates &\+&\+&\_&\_&\_&\_&\_\\
+alldatesusetime &\+&\+&\_&\_&\_&\_&\_\\
+alltimes &\+&\+&\_&\_&\_&\_&\_\\
+arxiv &\+&\+&\_&\_&\_&\_&\_\\
+autocite &\+&\+&\_&\_&\_&\_&\_\\
+autopunct &\+&\+&\_&\_&\_&\_&\_\\
+autolang &\+&\+&\_&\_&\_&\_&\_\\
+autofieldlang &\+&\+&\_&\_&\_&\_&\_\\
+autofieldlangstrings &\+&\+&\_&\_&\_&\_&\_\\
+backend &\+&\_&\_&\_&\_&\_&\_\\
+backref &\+&\+&\_&\_&\_&\_&\_\\
+backrefsetstyle &\+&\+&\_&\_&\_&\_&\_\\
+backrefstyle &\+&\+&\_&\_&\_&\_&\_\\
+bibencoding &\+&\+&\_&\_&\_&\_&\_\\
+bibstyle &\+&\_&\_&\_&\_&\_&\_\\
+bibtexcaseprotection &\+&\+&\_&\+&\+&\_&\_\\
+bibwarn &\+&\+&\_&\_&\_&\_&\_\\
+block &\+&\+&\_&\_&\_&\_&\_\\
+casechanger &\+&\_&\_&\_&\_&\_&\_\\
+citecounter &\+&\+&\_&\_&\_&\_&\_\\
+citereset &\+&\+&\_&\_&\_&\_&\_\\
+citestyle &\+&\_&\_&\_&\_&\_&\_\\
+citetracker &\+&\+&\_&\+&\+&\_&\_\\
+clearlang &\+&\+&\_&\+&\+&\_&\_\\
+datamodel &\+&\_&\_&\_&\_&\_&\_\\
+dataonly &\+&\+&\_&\+&\+&\_&\_\\
+date &\+&\+&\_&\_&\_&\_&\_\\
+labeldate &\+&\+&\_&\_&\_&\_&\_\\
+$<$datetype$>$date &\+&\+&\_&\_&\_&\_&\_\\
+dateabbrev &\+&\+&\_&\+&\+&\_&\_\\
+datecirca &\+&\+&\_&\_&\_&\_&\_\\
+dateera &\+&\+&\_&\_&\_&\_&\_\\
+dateerauto &\+&\+&\_&\_&\_&\_&\_\\
+dateuncertain &\+&\+&\_&\_&\_&\_&\_\\
+datezeros &\+&\+&\_&\_&\_&\_&\_\\
+defernumbers &\+&\+&\_&\_&\_&\_&\_\\
+doi &\+&\+&\_&\+&\+&\_&\_\\ % style
+eprint &\+&\+&\_&\+&\+&\_&\_\\ % style
+$<$namepart$>$inits &\+&\+&\_&\+&\+&\+&\+\\
+gregorianstart &\+&\+&\_&\_&\_&\_&\_\\
+hyperref &\+&\+&\_&\_&\_&\_&\_\\
+ibidtracker &\+&\+&\_&\+&\+&\_&\_\\
+idemtracker &\+&\+&\_&\+&\+&\_&\_\\
+indexing &\+&\+&\_&\+&\+&\_&\_\\
+isbn &\+&\+&\_&\+&\+&\_&\_\\ % style
+julian &\+&\+&\_&\_&\_&\_&\_\\
+labelalpha &\+&\+&\_&\+&\+&\_&\_\\
+labelalphanametemplatename &\_&\_&\+&\_&\+&\+&\+\\
+labelnamefield &\_&\_&\_&\_&\+&\_&\_\\
+labelnumber &\+&\+&\_&\+&\+&\_&\_\\
+labeltitle &\+&\+&\_&\+&\+&\_&\_\\
+labeltitlefield &\_&\_&\_&\_&\+&\_&\_\\
+labeltitleyear &\+&\+&\_&\+&\+&\_&\_\\
+labeldateparts &\+&\+&\_&\+&\+&\_&\_\\
+labeltime &\+&\+&\_&\_&\_&\_&\_\\
+labeldateusetime &\+&\+&\_&\_&\_&\_&\_\\
+labelprefix &\_&\_&\+&\_&\_&\_&\_\\
+$<$datetype$>$time &\+&\+&\_&\_&\_&\_&\_\\
+$<$datetype$>$dateusetime &\+&\+&\_&\_&\_&\_&\_\\
+language &\+&\+&\_&\_&\_&\_&\_\\
+loadfiles &\+&\+&\_&\_&\_&\_&\_\\
+loccittracker &\+&\+&\_&\+&\+&\_&\_\\
+maxalphanames &\+&\+&\_&\+&\+&\_&\_\\
+maxbibnames &\+&\+&\_&\+&\+&\_&\_\\
+maxcitenames &\+&\+&\_&\+&\+&\_&\_\\
+maxsortnames &\+&\+&\_&\+&\+&\_&\_\\
+maxitems &\+&\+&\_&\+&\+&\_&\_\\
+maxnames &\+&\+&\_&\+&\+&\_&\_\\
+maxparens &\+&\+&\_&\_&\_&\_&\_\\
+mcite &\+&\_&\_&\_&\_&\_&\_\\
+minalphanames &\+&\+&\_&\+&\+&\_&\_\\
+minbibnames &\+&\+&\_&\+&\+&\_&\_\\
+mincitenames &\+&\+&\_&\+&\+&\_&\_\\
+minsortnames &\+&\+&\_&\+&\+&\_&\_\\
+mincrossrefs &\+&\+&\_&\_&\_&\_&\_\\
+minxrefs &\+&\+&\_&\_&\_&\_&\_\\
+minitems &\+&\+&\_&\+&\+&\_&\_\\
+minnames &\+&\+&\_&\+&\+&\_&\_\\
+nametemplates &\_&\_&\+&\_&\+&\+&\+\\
+natbib &\+&\_&\_&\_&\_&\_&\_\\
+nohashothers &\+&\+&\_&\+&\+&\+&\_\\
+nosortothers &\+&\+&\_&\+&\+&\+&\_\\
+noinherit &\_&\_&\_&\_&\+&\_&\_\\
+notetype &\+&\+&\_&\_&\_&\_&\_\\
+opcittracker &\+&\+&\_&\+&\+&\_&\_\\
+openbib &\+&\+&\_&\_&\_&\_&\_\\
+pagetracker &\+&\+&\_&\_&\_&\_&\_\\
+parentracker &\+&\+&\_&\_&\_&\_&\_\\
+punctfont &\+&\+&\_&\_&\_&\_&\_\\
+refsection &\+&\+&\_&\_&\_&\_&\_\\
+refsegment &\+&\+&\_&\_&\_&\_&\_\\
+related &\+&\+&\_&\+&\+&\_&\_\\ % style
+safeinputenc &\+&\+&\_&\_&\_&\_&\_\\
+seconds &\+&\+&\_&\_&\_&\_&\_\\
+singletitle &\+&\+&\_&\+&\+&\_&\_\\
+skipbib &\+&\+&\_&\+&\+&\_&\_\\
+skipbiblist &\+&\+&\_&\+&\+&\_&\_\\
+skiplab &\+&\+&\_&\+&\+&\_&\_\\
+sortcase &\+&\+&\_&\_&\_&\_&\_\\
+sortcites &\+&\+&\_&\_&\_&\_&\_\\
+sorting &\+&\+&\_&\_&\_&\_&\_\\
+sortingnamekeytemplatename &\_&\_&\+&\_&\+&\+&\+\\
+
+sortlocale &\+&\+&\_&\_&\_&\_&\_\\
+sortlos &\+&\+&\_&\_&\_&\_&\_\\
+sortupper &\+&\+&\_&\_&\_&\_&\_\\
+style &\+&\_&\_&\_&\_&\_&\_\\
+terseinits &\+&\+&\_&\+&\+&\+&\+\\
+texencoding &\+&\+&\_&\_&\_&\_&\_\\
+timezeros &\+&\+&\_&\_&\_&\_&\_\\
+timezones &\+&\+&\_&\_&\_&\_&\_\\
+uniquelist &\+&\+&\_&\+&\+&\+&\_\\
+uniquename &\+&\+&\_&\+&\+&\+&\+\\
+uniquenametemplatename &\_&\_&\+&\_&\+&\+&\+\\
+uniquetitle &\+&\+&\_&\+&\+&\_&\_\\
+uniquebaretitle &\+&\+&\_&\+&\+&\_&\_\\
+uniquework &\+&\+&\_&\+&\+&\_&\_\\
+uniqueprimaryauthor &\+&\+&\_&\+&\+&\_&\_\\
+url &\+&\+&\_&\+&\+&\_&\_\\ % style
+useprefix &\+&\+&\_&\+&\+&\+&\+\\
+use$<$name$>$ &\+&\+&\_&\+&\+&\_&\_\\
+\end{longtable}
+\endgroup
+
+\section{Default BCP47 to babel/polyglossia language identifiers}
+\label{apx:bcp}
+
+\begin{tabular}{ll}
+af & afrikaans\\
+af-za & afrikaans\\
+am & ethiopia\\
+am-et & amharic\\
+ar & arabic\\
+ar-001 & arabic\\
+ast & asturian\\
+ast-es & asturian\\
+bg & bulgarian\\
+bg-bg & bulgarian\\
+bn & bengali\\
+bn-bd & bengali\\
+bo & tibetan\\
+bo-cn & tibetan\\
+br & breton\\
+br-fr & breton\\
+ca & catalan\\
+ca-ad & catalan\\
+ca-es & catalan\\
+cop & coptic\\
+cs & czech\\
+cs-cz & czech\\
+cy & welsh\\
+cy-gb & welsh\\
+da & danish\\
+da-dk & danish\\
+de-1996 & ngerman\\
+de-at & austrian\\
+de-at-1996 & naustrian\\
+de-ch & swissgerman\\
+de-ch-1996 & nswissgerman\\
+de & german\\
+de-de & german\\
+de-de-1996 & ngerman\\
+dsb & lowersorbian\\
+dsb-de & lowersorbian\\
+dv & divehi\\
+dv-mv & divehi\\
+el & greek\\
+el-cy & ibygreek\\
+el-gr & greek\\
+en & english\\
+en-au & australian\\
+en-ca & canadian\\
+en-uk & ukenglish\\
+en-gb & british\\
+en-nz & newzealand\\
+en-us & usenglish\\
+en-us & american\\
+en-us & english\\
+eo & esperanto\\
+eo-001 & esperanto\\
+es & spanish\\
+es-es & spanish\\
+et & estonian\\
+et-ee & estonian\\
+eu & basque\\
+eu-es & basque\\
+fa & farsi\\
+fa-ir & farsi\\
+fi & finnish\\
+fi-fi & finnish\\
+fr & french\\
+fr-ca & acadian\\
+fr-ca & canadien\\
+fr-fr & french\\
+fur & friulan\\
+fur-it & friulan\\
+ga & irish\\
+ga-ie & irish\\
+gd & scottish\\
+gd-gb & scottish\\
+gl & galician\\
+gl-es & galician\\
+ha & nko\\
+ha-ng & nko\\
+he & hebrew\\
+he-il & hebrew\\
+hi & hindi\\
+hi-in & hindi\\
+hr & croatian\\
+hr-hr & croatian\\
+hsb & uppersorbian\\
+hsb-de & uppersorbian\\
+hu & magyar\\
+hu-hu & magyar\\
+hy & armenian\\
+hy-am & armenian\\
+ia & interlingua\\
+ia-fr & interlingua\\
+id & indonesia\\
+is & icelandic\\
+is-is & icelandic\\
+it & italian\\
+it-it & italian\\
+ja & japanese\\
+ja-jp & japanese\\
+kn & kannada\\
+kn-in & kannada\\
+lo & lao\\
+lo-la & lao\\
+lt & lithuanian\\
+lt-lt & lithuanian\\
+lv & latvian\\
+lv-lv & latvian\\
+ml & malayalam\\
+ml-in & malayalam\\
+mn & mongolian\\
+mn-cyrl & mongolian\\
+mr & marathi\\
+mr-in & marathi\\
+nb & norsk\\
+nb-no & norsk\\
+nl & dutch\\
+nl-nl & dutch\\
+nn & nynorsk\\
+nn-no & nynorsk\\
+oc & occitan\\
+oc-fr & occitan\\
+pl & polish\\
+pl-pl & polish\\
+pms & piedmontese\\
+pms-it & piedmontese\\
+pny & pinyin\\
+pt & portuguese\\
+pt-br & brazilian\\
+pt-pt & portuguese\\
+rm & romansh\\
+rm-ch & romansh\\
+ro & romanian\\
+ro-ro & romanian\\
+ru & russian\\
+ru-ru & russian\\
+ru-grek & greek\\
+ru-latn & latin\\
+sa & sanskrit\\
+sa-in & sanskrit\\
+se & samin\\
+se-no & samin\\
+sk & slovak\\
+sk-sk & slovak\\
+sl & slovenian\\
+sl-si & slovenian\\
+sq & albanian\\
+sq-al & albanian\\
+sr & serbian\\
+sr-cyrl & serbian\\
+sr-latn & latin\\
+sv & swedish\\
+sv-se & swedish\\
+syc & syriac\\
+ta & tamil\\
+ta-in & tamil\\
+te & telugu\\
+te-in & telugu\\
+th & thai\\
+th-th & thai\\
+tk & turkmen\\
+tk-tm & turkmen\\
+tr & turkish\\
+tr-tr & turkish\\
+uk & ukrainian\\
+uk-ua & ukrainian\\
+ur & urdu\\
+ur-in & urdu\\
+vi & vietnamese\\
+vi-vn & vietnamese\\
+\end{tabular}
+
+\section{Revision History}
+\label{apx:log}
+
+This revision history is a list of changes relevant to users of this package. Changes of a more technical nature which do not affect the user interface or the behavior of the package are not included in the list. More technical details are to be found in the \file{CHANGES.md} file. The numbers on the right indicate the relevant section of this manual.
+
+\begin{changelog}
+\begin{release}{4.0}{2022-}
+\item Multiscript support\see{use:multiscript}
+\end{release}
+\begin{release}{3.19}{2022}
+\item Added \cmd{DeclareExtradateContext} option\see{aut:ctm:fld}
+\item Modified warning for using bibtex backend
+\item Enhanced \bibfield{extradate} tracking to fallback on \bibfield{labeltitle} when there is no author
+\end{release}
+ \begin{release}{3.18b}{2022-07-12}
+\item Reenable \cmd{MakeUppercase}/\cmd{MakeLowercase} <patches>
+ based on \cmd{CaseSwitch}
+\end{release}
+\begin{release}{3.18a}{2022-07-02}
+\item Disable \cmd{MakeUppercase}/\cmd{MakeLowercase} patches as emergency
+ fix for \latex 2022-06-01-PL4 compatibility.
+\end{release}
+\begin{release}{3.18}{2022-06-22}
+\item Added sorting option \cmd{intciteorder}\see{aut:ctm:srt}
+\item Added global option \opt{pluralothers}\see{use:opt:pre:gen}
+\item Added \cmd{localrefcontext}\see{use:bib:context}
+\item Added \cmd{visibility} option to \cmd{DeclareSortingNamekeyTemplate}\see{aut:ctm:srt}
+\item Added \cmd{GenRefcontextData}\see{use:bib:context}
+\item Added \cmd{AtBeginRefsection}\see{aut:fmt:hok}
+\end{release}
+\begin{release}{3.17}{2022-01-25}
+\item Changed behaviour of index-less granular XDATA references\see{use:use:xdat}
+\item Added \cmd{DeclareNonamestring} \see{aut:ctm:nonamestring}
+\item Added new \cmd{citecount} sort option and
+ associated default sorting scheme\see{aut:ctm:srt} and \see{use:opt:pre:gen}
+\item Added new sourcemap verbs \texttt{matches} and \texttt{matchesi}\see{aut:ctm:map}
+\item Deprecated season fields and macros in favour of generalised year
+ divisions\see{aut:bbx:fld:dat}
+\item Added \cmd{textouterlang}\see{aut:str}
+\item Added \cmd{UndeclareDelimcontextAlias}\see{use:fmt:csd}
+\item Added \cmd{DeclareBibstringSet}, \cmd{DeclareBibstringSetFormat} etc.\see{aut:str}
+\item Added Marathi localisation (\textdevanagari{निरंजन})
+\item Added Romanian localisation (Patrick Danilevici)
+\item Added some support for calculating with non-\acr{US-ASCII} numerals\see{aut:aux:tst}
+\item Removed list support for \prm{name} argument of \cmd{DeclareDelimFormat}\see{use:fmt:csd}
+\end{release}
+\begin{release}{3.16}{2020-12-31}
+\item Added named refcontext support to \cmd{assignrefcontext*}\see{use:bib:context}
+\item Fixed infinite loop with \bibfield{volcitepages} field format
+\item Added Extended Name Format documentation\see{use:enf}
+\item Added \opt{label} option to \cmd{printbibliography}\see{use:bib:bib}
+\item Deprecate \cmd{mainlang} in favour of \cmd{textmainlang}\see{aut:str}
+\item Added Basque localisation (Ander Zarketa-Astigarraga)
+\end{release}
+\begin{release}{3.15a}{2020-08-23}
+\item Fixed bug with long arguments in \cmd{DeclareFieldFormat} and friends
+\end{release}
+\begin{release}{3.15}{2020-08-16}
+\item Added \opt{starnocited} option to sourcemaps\see{aut:ctm:map}
+\item Added the \opt{glob} option to \cmd{addbibresource}\see{use:bib:res}
+\item Added \bibfield{eid} to more entry types\see{bib:typ:blx}
+\item Added \cmd{bibeidpunct}\see{use:fmt:fmt}
+\item Added \bibfield{issuetitleaddon} and \bibfield{journaltitleaddon}\see{bib:fld:dat}
+\item \texttt{numeric-comp} compresses \opt{subentry} set references now\see{use:opt:pre:bbx}
+\item Added \opt{subentrycomp} to \texttt{numeric-comp} style\see{use:opt:pre:bbx}
+\item Added \cmd{multiciterangedelim}, \cmd{multicitesubentrydelim},
+ \cmd{multicitesubentryrangedelim}, \cmd{superciterangedelim},
+ \cmd{supercitesubentrydelim}, \cmd{supercitesubentryrangedelim}%
+ \see{use:fmt:fmt}
+\item Implemented \opt{expl3} case changing functions\see{aut:aux:msc}
+\item Added \opt{casechanger} option\see{use:opt:ldt}
+\item Added \opt{bibtexcaseprotection} option\see{use:opt:pre:gen}
+\item Added \cmd{mautocite} and \cmd{Mautocite}\see{use:cit:mct}
+\item Added \opt{trackfloats} and \opt{backreffloats}\see{use:opt:pre:gen}
+\item Added \opt{block} option to \cmd{printbibliography} and friends\see{use:bib:bib}
+\item Added \cmd{NumsCheckSetup} and \cmd{PagesCheckSetup}\see{aut:aux:msc}
+\item Added \cmd{AtEveryEntrykey}\see{aut:fmt:hok}
+\item Added \cmd{ifdatesequal} and \cmd{ifdaterangesequal}\see{aut:aux:tst}
+\item Clarified \cmd{ifuniqueprimaryauthor} semantics\see{aut:aux:tst}
+\item Added \cmd{bibncpstring}, \cmd{bibncplstring} and \cmd{bibncpsstring}\see{aut:str}
+\item Added Lithuanian localisation (Valdemaras Klumbys)
+\item Added Serbian localisation (Andrej Radović)
+\item Added Turkish localisation (Abdulkerim Gok)
+\item Added file hooks\see{aut:fmt:hok:fil}
+\item Deprecated \cmd{ifkomabibtotoc} and \cmd{ifkomabibtotocnumbered}\see{use:cav:scr}
+\end{release}
+\begin{release}{3.14}{2019-12-01}
+\item Added new mapping verbs for citation sources\see{aut:ctm:map}
+\item Added documentation for new \biber granular \bibtype{xdata} functionality\see{use:use:xdat}
+\item Enhanced \sty{polyglossia} support
+\end{release}
+\begin{release}{3.13a}{2019-08-31}
+\item Bugfix release
+\end{release}
+\begin{release}{3.13}{2019-08-17}
+\item Added new \bibtype{dataset} entry type\see{bib:typ:blx}
+\item Promoted \bibtype{software} to regular entry type\see{bib:typ:blx}
+\item Added \bibfield{entrykey} alias for entry keys in labels\see{aut:ctm:lab}
+\item Added \opt{appendstrict} sourcemapping option\see{aut:ctm:map}
+\item Added \opt{nohashothers} and \opt{nosortothers}\see{use:opt:pre:int}
+\item Enhanced \cmd{addbibresource} with globbing\see{use:bib:res}
+\item Added \cmd{DeclareBiblatexOption}\see{aut:bbx:bbx}
+\item Expanded scope possibilities for several options\see{apx:opt}
+\item Added \cmd{ifvolcite} test\see{aut:aux:tst}
+\item Added special fields \bibfield{volcitevolume} and \bibfield{volcitepages}%
+ \see{aut:cbx:fld}
+\item Added \cmd{AtVolcite} hook\see{aut:fmt:hok}
+\item Added \cmd{pnfmt} \see{use:cit:msc}
+\item Added \cmd{mkbibcompletename} and \cmd{mkbibcompletename<formatorder>}\see{use:fmt:fmt}
+\item Made \cmd{postnotedelim} and friends context sensitive\see{use:fmt:fmt}
+\item Added \cmd{multipostnotedelim} and \cmd{multiprenotedelim}\see{use:fmt:fmt}
+\item Added \cmd{thefirstlistitem} and friends\see{aut:aux:dat}
+\item Added \prm{itempostpro} argument to \cmd{mkcomprange}, \cmd{mknormrange} and \cmd{mkfirstpage}\see{aut:aux:msc}
+\item Added \len{biburlbigskip} and friends\see{use:fmt:len}
+\item Added \cnt{biburlbigbreakpenalty} and \cnt{biburlbreakpenalty} and friends\see{use:fmt:len}
+\item Added \cmd{DeclarePrintbibliographyDefaults}\see{use:bib:bib}
+\item Added \bibfield{doi} to \bibtype{online}\see{bib:typ:blx}
+\end{release}
+
+\begin{release}{3.12}{2018-10-30}
+\item Added literal and named annotation functionality\see{use:annote}
+\item Added \cmd{ifnocite}\see{aut:aux:tst}
+\item Added case-insensitive versions of matching operators\see{aut:ctm:map}
+\item Added \bibfield{langid}s optional argument to \cmd{DeclareSortTranslit}\see{aut:ctm:srt}
+\item Added \opt{noroman} option\see{use:opt:pre:int}
+\item Changed \bibfield{sortyear} to an integer field\see{bib:fld:spc}
+\item Added \bibfield{extraname}\see{aut:bbx:fld:lab}
+\item Added \opt{bibencoding} option to \cmd{addbibresource}\see{use:bib:res}
+\item Changed type of \bibfield{number} from integer to literal \see{bib:fld:dat}
+\item Removed \opt{noerroretextools} option\see{int:pre:inc}
+\item Added \opt{maxsortnames} and \opt{minsortnames}\see{use:opt:pre:gen}
+\item Added \cmd{DeprecateFieldFormatWithReplacement} and friends\see{aut:bib:fmt}
+\item Added list and name wrappers\see{aut:bib:fmt}
+\item Added \cs{ifdateyearsequal}\see{aut:aux:tst}
+\item Added <and higher> sectioning values for \opt{citereset}, \opt{refsection} and \opt{refsegment} options\see{use:opt:pre:gen}
+\item Added Hungarian localisation\see{use:loc:hun}
+\item Added \cmd{DeclareCitePunctuationPosition}\see{aut:cbx:cbx}
+\end{release}
+
+\begin{release}{3.11}{2018-02-20}
+\item Added \opt{entrynocite} option to sourcemapping\see{aut:ctm:map}
+\item Added \opt{driver} and \opt{biblistfilter} options to \cmd{printbiblist}\see{use:bib:biblist}
+\item Added \cmd{mknormrange}\see{aut:aux:msc}
+\item Added \cmd{ifdateannotation}\see{use:annote}
+\item Extended \cmd{iffieldannotation} and friends\see{use:annote}
+\item Changed \cmd{DeclareSourcemap} so that it can be used multiple times\see{aut:ctm:map}
+\item Added Latvian localisation (Rihards Skuja)
+\item Added \opt{locallabelwidth} option\see{use:opt:pre:gen}
+\end{release}
+
+\begin{release}{3.10}{2017-12-19}
+\item Changed \opt{edtf} to \opt{iso}\see{use:opt:pre:gen}
+\item Added \opt{noerroretextools} option\see{int:pre:inc}
+\end{release}
+
+\begin{release}{3.9}{2017-11-21}
+\item Added \cmd{iffieldplusstringbibstring}\see{aut:aux:tst}
+\item Fixed \cmd{mkpagetotal}\see{aut:aux:msc}
+\end{release}
+
+\begin{release}{3.8}{2017-11-04}
+\item Added \kvopt{hyperref}{manual} option\see{use:opt:pre:gen}
+\item Added field \bibfield{extradatescope}\see{aut:bbx:fld:lab}
+\item Added \cmd{DeclareExtradate}\see{aut:ctm:fld}
+\item Added \cmd{DeprecateFieldWithReplacement}, \cmd{DeprecateListWithReplacement} and \cmd{DeprecateNameWithReplacement}\see{aut:bib:dat}
+\item Added \cmd{letbibmacro}\see{aut:aux:msc}
+\item Renamed \opt{extrayear} to \opt{extradate}\see{aut:bbx:fld:lab}
+\item Added \opt{sortsets} global option\see{use:opt:pre:gen}
+\item Added \cmd{iflabelalphanametemplatename} and \cmd{uniquenametemplatename}\see{aut:aux:tst}
+\item Renamed \cmd{ifsortingnamescheme} to \cmd{ifsortingnamekeytemplatename}\see{aut:aux:tst}
+\item Renamed \opt{sortingnamekeyscheme} to \opt{sortingnamekeytemplate}\see{use:bib:context}
+\item Renamed \cmd{DeclareSortingNamekeyScheme} to \cmd{DeclareSortingNamekeyTemplate}\see{aut:ctm:srt}
+\item Renamed \cmd{DeclareSortingScheme} to \cmd{DeclareSortingTemplate}\see{aut:ctm:srt}
+\item Changes to \cmd{DeclareUniquenameTemplate} and \cmd{DeclareLabelalphaNameTemplate} scopes\see{aut:cav:amb} and \see{aut:ctm:lab}
+\item Added new \opt{disambiguation} option to \cmd{DeclareUniquenameTemplate}\see{aut:cav:amb}
+\item Added new user-facing versions of some entry-querying commands\see{use:eq}
+\item Changed \bibfield{origlanguage} to a list in line with \bibfield{language}\see{bib:fld:dat}
+\item Deprecated \bibfield{childentrykey} and \bibfield{childentrytype}\see{aut:bbx:fld:gen}
+\item Added \bibfield{bibnamehash} and name list specific variants\see{aut:bbx:fld:gen}
+\item Added ALA-LC Russian romanisation transliteration support\see{aut:ctm:srt}
+\item Added \bibfield{urlraw}\see{aut:bbx:fld:gen}
+\item Added \cmd{AtUsedriver}\see{aut:fmt:hok}
+\item Added Bulgarian localisation (Kaloyan Ganev)
+\item \bibfield{sortyear} is now a literal, not an integer\see{bib:fld:spc}
+\item Added \cmd{DeclareLanguageMappingSuffix}\see{aut:lng:cmd}
+\item Changed default for \cmd{DeclarePrefChars}\see{aut:pct:cfg}
+\item Added \cmd{authortypedelim}, \cmd{editortypedelim} and \cmd{translatortypedelim}\see{use:fmt:fmt}
+\item Added \cmd{DeclareDelimAlias}\see{use:fmt:csd}
+\item Added \opt{slovenian} as alias for \opt{slovene} due to Polyglossia
+ name for the language\see{bib:fld:spc}
+\item Added Ukrainian localisation (Sergiy M. Ponomarenko)
+\end{release}
+
+\begin{release}{3.7}{2016-12-08}
+\item Corrected default for \cmd{bibdateeraprefix}\see{aut:fmt:lng}
+\item Added \cmd{DeclareSortInclusion}\see{aut:ctm:srt}
+\item Added \cmd{relateddelim$<$relatedtype$>$}\see{use:fmt:fmt}
+\end{release}
+
+\begin{release}{3.6}{2016-09-15}
+\item Corrected some documentation and fixed a bug with labeldate
+ localisation strings.
+\end{release}
+
+\begin{release}{3.5}{2016-09-10}
+\item Added \cmd{ifuniquebaretitle} test\see{aut:aux:tst}
+\item Documented \cmd{labelnamesource} and \cmd{labeltitlesource}\see{aut:bbx:fld:gen}
+\item Added \cmd{bibdaterangesep}\see{use:fmt:lng}
+\item Added \opt{refsection} option to \cmd{DeclareSourcemap}\see{aut:ctm:map}
+\item Added \opt{suppress} option to inheritance specifications\see{aut:ctm:ref}
+\item Added \cmd{ifuniquework}\see{aut:aux:tst}
+\item Changed \cmd{DeclareStyleSourcemap} so that it can be used multiple times\see{aut:ctm:map}
+\item Added \cmd{forcezerosy} and \cmd{forcezerosmdt}\see{aut:fmt:ich}
+\item Changed \cmd{mkdatezeros} to \cmd{mkyearzeros}, \cmd{mkmonthszeros}
+ and \cmd{mkdayzeros}\see{aut:fmt:ich}
+\item Added \bibfield{namehash} and \bibfield{fullhash} for all name list fields\see{aut:bbx:fld:gen}
+\item Generalised \opt{giveninits} option to all nameparts\see{use:opt:pre:int}
+\item Added \opt{inits} option to \cmd{DeclareSortingNamekeyScheme}\see{aut:ctm:srt}
+\item Removed option \opt{sortgiveninits}. Use the option \opt{inits} to \cmd{DeclareSortingNamekeyScheme} instead
+\item Added \cmd{DeclareLabelalphaNameTemplate}\see{aut:ctm:lab}
+\item Added full \acr{EDTF} Levels 0 and 1 compliance for parsing and printing times\see{bib:use:dat}
+\item Changed dates to be fully \acr{EDTF} Levels 0 and 1 compliant. Associated tests and localisation strings\see{bib:use:dat}
+\item Added \opt{timezeros}\see{use:opt:pre:gen}
+\item Added \opt{mktimezeros}\see{aut:fmt:ich}
+\item Changed \opt{iso8601} to \opt{edtf}\see{use:opt:pre:gen}
+\item Added \cmd{DeclareUniquenameTemplate}\see{aut:cav:amb}
+\item Removed experimental RIS support
+\item \opt{sortnamekeyscheme} and \opt{useprefix} can be now be set per-namelist and per-name for
+ \bibtex datasources\see{aut:ctm:srt}
+\item Added \cmd{DeclareDelimcontextAlias}\see{use:fmt:csd}
+\item Added Estonian localisation (Benson Muite)
+\item Reference contexts may now be named\see{use:bib:context}
+\item Added \opt{notfield} step in Sourcemaps\see{aut:ctm:map}
+\end{release}
+
+\begin{release}{3.4}{2016-05-10}
+\item Added \cmd{ifcrossrefsource} and \cmd{ifxrefsource}\see{aut:aux:tst}
+\item Added data annotation feature\see{use:annote}
+\item Added package option \opt{minxrefs}\see{use:opt:pre:gen}
+\item Added \cmd{ifuniqueprimaryauthor} and associated global option\see{aut:aux:tst}
+\item Added \cmd{DeprecateField}, \cmd{DeprecateList} and \cmd{DeprecateName}\see{aut:bib:dat}
+\item Added \cmd{ifcaselang}\see{aut:aux:tst}
+\item Added \cmd{DeclareSortTranslit}\see{aut:ctm:srt}
+\item Added \opt{uniquetitle} test\see{aut:aux:tst}
+\item Added \cmd{namelabeldelim}\see{use:fmt:fmt}
+\item New starred variants of the \cmd{assignrefcontext*} macros\see{use:bib:context}
+\item New context-sensitive delimiter interface\see{use:fmt:csd}
+\item Moved \opt{prefixnumbers} option to \cmd{newrefcontext} and renamed to \opt{labelprefix}\see{use:bib:context}
+\item Added \cmd{DeclareDatafieldSet}\see{aut:ctm:dsets}
+\end{release}
+
+\begin{release}{3.3}{2016-03-01}
+\item New macros for auto-assignment of refcontexts\see{use:bib:context}
+\item Schema documentation for \biblatexml\see{apx:biblatexml}
+\item Sourcemapping documentation and examples for \biblatexml\see{aut:ctm:map}
+\item Changes for name formats to generalise available name parts\see{aut:bib:fmt}
+\item \opt{useprefix} can now be specified per-namelist and per-name in \biblatexml datasources
+\item New sourcemapping options for creating new entries dynamically and looping over map steps\see{aut:ctm:map}
+\item Added \opt{noalphaothers} and enhanced name range selection in \cmd{DeclareLabelalphaTemplate}\see{aut:ctm:lab}
+\item Added \cmd{DeclareDatamodelConstant}\see{aut:ctm:dm}
+\item Renamed \opt{firstinits} to \opt{giveninits} and \opt{sortfirstinits} to \opt{sortgiveninits}\see{use:opt:pre:int}
+\item Added \cmd{DeclareSortingNamekeyScheme}\see{aut:ctm:srt}
+\item Removed messy experimental endnote and zoterordf support for \biber
+\item Added \cmd{nonameyeardelim}\see{use:fmt:fmt}
+\item Added \cmd{extpostnotedelim}\see{use:fmt:fmt}
+\end{release}
+
+\begin{release}{3.2}{2015-12-28}
+\item Added \opt{pstrwidth} and \opt{pcompound} to \cmd{DeclareLabelalphaTemplate}\see{aut:ctm:lab}
+\item Added \cmd{AtEachCitekey}\see{aut:fmt:hok}
+\end{release}
+
+\begin{release}{3.1}{2015-09}
+\item Added \cmd{DeclareNolabel}\see{aut:ctm:lab}
+\item Added \cmd{DeclareNolabelwidthcount}\see{aut:ctm:lab}
+\end{release}
+
+\begin{release}{3.0}{2015-04-20}
+\item Improved Danish (Jonas Nyrup) and Spanish (ludenticus) translations
+\item \bibfield{labelname} and \bibfield{labeltitle} are now resolved by \biblatex instead of \biber for more flexibility and future extensibility
+\item New \cmd{entryclone} sourcemap verb for cloning entries during sourcemapping\see{aut:ctm:map}
+\item New \cmd{pernottype} negated per-type sourcemap verb\see{aut:ctm:map}
+\item New range calculation command \cmd{frangelen}\see{aut:aux:msc}
+\item New bibliography context functionality\see{use:bib:context}
+\item Name lists in the data model now automatically create internals for \cmd{ifuse$<$name$>$} tests and booleans\see{use:opt:bib:hyb} and \see{aut:aux:tst}
+\end{release}
+
+\begin{release}{2.9a}{2014-06-25}
+\item \texttt{resetnumbers} now allows passing a number to reset to\see{use:bib:bib}
+\end{release}
+
+\begin{release}{2.9}{2014-02-25}
+\item Generalised shorthands facility\see{use:bib:biblist}
+\item Sorting locales can now be defined as part of a sorting scheme\see{aut:ctm:srt}
+\item Added \bibfield{sortinithash}\see{aut:bbx:fld:gen}
+\item Added Slovene localisation (Tea Tušar and Bogdan Filipič)
+\item Added \cmd{mkbibitalic}\see{aut:fmt:ich}
+\item Recommend \texttt{begentry} and \texttt{finentry} bibliography macros\see{aut:bbx:drv}
+\end{release}
+
+\begin{release}{2.8a}{2013-11-25}
+\item Split option \opt{language=auto} into \opt{language=autocite} and \opt{language=autobib}\see{use:opt:pre:gen}
+\end{release}
+
+\begin{release}{2.8}{2013-10-21}
+\item New \bibfield{langidopts}\see{bib:fld:spc}
+\item \bibfield{hyphenation} field renamed to \bibfield{langid}\see{bib:fld:spc}
+\item \sty{polyglossia} support
+\item Renamed \opt{babel} option to \opt{autolang}\see{use:opt:pre:gen}
+\item Corrected Dutch localisation
+\item Added \opt{datelabel=year} option\see{use:opt:pre:gen}
+\item Added \bibfield{datelabelsource} field\see{aut:bbx:fld:gen}
+\end{release}
+
+\begin{release}{2.7a}{2013-07-14}
+\item Bugfix - respect maxnames and uniquelist in \cmd{finalandsemicolon}
+\item Corrected French localisation
+\end{release}
+
+\begin{release}{2.7}{2013-07-07}
+\item Added field \bibfield{eventtitleaddon} to default datamodel and styles\see{bib:fld:dat}
+\item Added \cmd{ifentryinbib}, \cmd{iffirstcitekey} and \cmd{iflastcitekey}\see{aut:aux:tst}
+\item Added \bibfield{postpunct} special field, documented \bibfield{multiprenote} and \bibfield{multipostnote} special fields\see{aut:cbx:fld}
+\item Added \cmd{UseBibitemHook}, \cmd{AtEveryMultiCite}, \cmd{AtNextMultiCite}, \cmd{UseEveryCiteHook}, \cmd{UseEveryCitekeyHook}, \cmd{UseEveryMultiCiteHook}, \cmd{UseNextCiteHook}, \cmd{UseNextCitekeyHook}, \cmd{UseNextMultiCiteHook}, \cmd{DeferNextCitekeyHook}\see{aut:fmt:hok}
+\item Fixed \cmd{textcite} and related commands in the numeric and verbose styles\see{use:cit:cbx}
+\item Added multicite variants of \cmd{volcite} and related commands\see{use:cit:spc}
+\item Added \cmd{finalandsemicolon}\see{use:fmt:lng}
+\item Added citation delimiter \cmd{textcitedelim} for \cmd{textcite} and related commands to styles\see{aut:fmt:fmt}
+\item Updated Russian localisation (Oleg Domanov)
+\item Fixed Brazilian and Finnish localisation
+\end{release}
+
+\begin{release}{2.6}{2013-04-30}
+\item Added \cmd{printunit}\see{aut:pct:new}
+\item Added field \bibfield{clonesourcekey}\see{aut:bbx:fld:gen}
+\item New options for \cmd{DeclareLabelalphaTemplate}\see{aut:ctm:lab}
+\item Added \cmd{DeclareLabeldate} and retired \cmd{DeclareLabelyear}\see{aut:ctm:fld}
+\item Added \texttt{nodate} localisation string\see{aut:lng:key:msc}
+\item Added \cmd{rangelen}\see{aut:aux:msc}
+\item Added starred variants of \cmd{citeauthor} and \cmd{Citeauthor}\see{use:cit:txt}
+\item Restored original \texttt{url} format. Added \texttt{urlfrom} localisation key\see{aut:lng:key:lab}
+\item Added \cmd{AtNextBibliography}\see{aut:fmt:hok}
+\item Fixed related entry processing to allow nested and cyclic related entries
+\item Added Croatian localisation (Ivo Pletikosić)
+\item Added Polish localisation (Anastasia Kandulina, Yuriy Chernyshov)
+\item Fixed Catalan localisation
+\item Added smart ``of'' for titles to Catalan and French localisation
+\item Misc bug fixes
+\end{release}
+
+\begin{release}{2.5}{2013-01-10}
+\item Made \texttt{url} work as a localisation string, defaulting to previously hard-coded value <\textsc{URL}>.
+\item Changed some \biber\ option names to cohere with \biber\ 1.5.
+\item New sourcemap step for conditionally removing entire entries\see{aut:ctm:map}
+\item Updated Catalan localisation (Sebastià Vila-Marta)
+\end{release}
+
+\begin{release}{2.4}{2012-11-28}
+\item Added \bibfield{relatedoptions} field\see{aut:ctm:rel}
+\item Added \cmd{DeclareStyleSourcemap}\see{aut:ctm:map}
+\item Renamed \cmd{DeclareDefaultSourcemap} to \cmd{DeclareDriverSourcemap}\see{aut:ctm:map}
+\item Documented \cmd{DeclareFieldInputHandler}, \cmd{DeclareListInputHandler} and \cmd{DeclareNameInputHandler}.
+\item Added Czech localisation (Michal Hoftich)
+\item Updated Catalan localisation (Sebastià Vila-Marta)
+\end{release}
+
+\begin{release}{2.3}{2012-11-01}
+\item Better detection of situations which require a \biber\ or \LaTeX\ re-run
+\item New append mode for \cmd{DeclareSourcemap} so that fields can be combined\see{aut:ctm:map}
+\item Extended auxiliary indexing macros
+\item Added support for plural localisation strings with \bibfield{relatedtype}\see{aut:ctm:rel}
+\item Added \cmd{csfield} and \cmd{usefield}\see{aut:aux:dat}
+\item Added starred variant of \cmd{usebibmacro}\see{aut:aux:msc}
+\item Added \cmd{ifbibmacroundef}, \cmd{iffieldformatundef}, \cmd{iflistformatundef}
+ and \cmd{ifnameformatundef}\see{aut:aux:msc}
+\item Added Catalan localisation (Sebastià Vila-Marta)
+\item Misc bug fixes
+\end{release}
+
+\begin{release}{2.2}{2012-08-17}
+\item Misc bug fixes
+\item Added \cmd{revsdnamepunct}\see{use:fmt:fmt}
+\item Added \cmd{ifterseinits}\see{aut:aux:tst}
+\end{release}
+
+\begin{release}{2.1}{2012-08-01}
+\item Misc bug fixes
+\item Updated Norwegian localisation (Håkon Malmedal)
+\item Increased data model auto-loading possibilities\see{aut:ctm:dm}
+\end{release}
+
+\begin{release}{2.0}{2012-07-01}
+\item Misc bug fixes
+\item Generalised \opt{singletitle} test a little\see{aut:aux:tst}
+\item Added new special field \bibfield{extratitleyear}\see{aut:bbx:fld}
+\item Customisable data model\see{aut:ctm:dm}
+\item Added \cmd{DeclareDefaultSourcemap}\see{aut:ctm:map}
+\item Added \opt{labeltitle} option\see{use:opt:pre:int}
+\item Added new special field \bibfield{extratitle}\see{aut:bbx:fld}
+\item Made special field \bibfield{labeltitle} customisable\see{aut:bbx:fld}
+\item Removed field \bibfield{reprinttitle}\see{use:rel}
+\item Added related entry feature\see{use:rel}
+\item Added \cmd{DeclareNoinit}\see{aut:ctm:noinit}
+\item Added \cmd{DeclareNosort}\see{aut:ctm:nosort}
+\item Added \opt{sorting} option for \cmd{printbibliography} and \cmd{printshorthands}\see{use:bib:bib}
+\item Added \texttt{ids} field for citekey aliasing\see{bib:fld}
+\item Added \opt{sortfirstinits} option\see{use:opt:pre:int}
+\item Added data stream modification feature\see{aut:ctm:map}
+\item Added customisable labels feature\see{aut:ctm:lab}
+\item Added \cmd{citeyear*} and \cmd{citedate*}\see{use:cit:txt}
+\end{release}
+
+% \begin{release}{1.7}{2011-11-13}
+% \item Added \texttt{xdata} containers\see{use:use:xdat}
+% \item Added special entry type \bibfield{xdata}\see{bib:typ:blx}
+% \item Added special field \bibfield{xdata}\see{bib:fld:spc}
+% \item Support \opt{maxnames}/\opt{minnames} globally/per-type/per-entry\see{use:opt:pre:gen}
+% \item Support \opt{maxbibnames}/\opt{minbibnames} globally/per-type/per-entry\see{use:opt:pre:gen}
+% \item Support \opt{maxcitenames}/\opt{mincitenames} globally/per-type/per-entry\see{use:opt:pre:gen}
+% \item Support \opt{maxitems}/\opt{minitems} globally/per-type/per-entry\see{use:opt:pre:gen}
+% \item Support \opt{maxalphanames}/\opt{minalphanames} globally/per-type/per-entry\see{use:opt:pre:int}
+% \item Support \opt{uniquelist} globally/per-type/per-entry\see{use:opt:pre:int}
+% \item Support \opt{uniquename} globally/per-type/per-entry\see{use:opt:pre:int}
+% \item Added \cmd{textcite} and \cmd{textcites} to all \texttt{verbose} citation styles\see{use:xbx:cbx}
+% \item Added special field formats \texttt{date}, \texttt{urldate}, \texttt{origdate}, \texttt{eventdate}\see{aut:fmt:ich}
+% \item Added \cmd{mkcomprange*}\see{aut:aux:msc}
+% \item Added \cmd{mkfirstpage*}\see{aut:aux:msc}
+% \item Added \cmd{volcitedelim}\see{aut:fmt:fmt}
+% \item Added missing documentation for \cmd{ifentrytype}\see{aut:aux:tst}
+% \item Added \cmd{mkbibneutord}\see{use:fmt:lng}
+% \item Added counter \cnt{biburlnumpenalty}\see{aut:fmt:len}
+% \item Added counter \cnt{biburlucpenalty}\see{aut:fmt:len}
+% \item Added counter \cnt{biburllcpenalty}\see{aut:fmt:len}
+% \item Added localisation keys \texttt{book}, \texttt{part}, \texttt{issue}, \texttt{forthcoming}\see{aut:lng:key}
+% \item Added some \texttt{lang...} and \texttt{from...} localisation keys\see{aut:lng:key}
+% \item Expanded documentation\see{apx:opt}
+% \item Added support for Russian (Oleg Domanov)
+% \item Updated support for Dutch (Pieter Belmans)
+% \item Fixed compatibility issue with \sty{textcase} package
+% \item Fixed some bugs
+% \end{release}
+
+% \begin{release}{1.6}{2011-07-29}
+% \item Added special field \bibfield{sortshorthand}\see{bib:fld:spc}
+% \item Revised options \opt{maxnames}/\opt{minnames}\see{use:opt:pre:gen}
+% \item Options \opt{maxcitenames}/\opt{mincitenames} now supported by backend\see{use:opt:pre:gen}
+% \item Options \opt{maxbibnames}/\opt{minbibnames} now supported by backend\see{use:opt:pre:gen}
+% \item Added options \opt{maxalphanames}/\opt{minalphanames}\see{use:opt:pre:int}
+% \item Removed local options \opt{maxnames}/\opt{minnames} from \cmd{printbibliography}\see{use:bib:bib}
+% \item Removed local options \opt{maxitems}/\opt{minitems} from \cmd{printbibliography}\see{use:bib:bib}
+% \item Removed local options \opt{maxnames}/\opt{minnames} from \cmd{bibbysection}\see{use:bib:bib}
+% \item Removed local options \opt{maxitems}/\opt{minitems} from \cmd{bibbysection}\see{use:bib:bib}
+% \item Removed local options \opt{maxnames}/\opt{minnames} from \cmd{bibbysegment}\see{use:bib:bib}
+% \item Removed local options \opt{maxitems}/\opt{minitems} from \cmd{bibbysegment}\see{use:bib:bib}
+% \item Removed local options \opt{maxnames}/\opt{minnames} from \cmd{bibbycategory}\see{use:bib:bib}
+% \item Removed local options \opt{maxitems}/\opt{minitems} from \cmd{bibbycategory}\see{use:bib:bib}
+% \item Removed local options \opt{maxnames}/\opt{minnames} from \cmd{printshorthands}\see{use:bib:biblist}
+% \item Removed local options \opt{maxitems}/\opt{minitems} from \cmd{printshorthands}\see{use:bib:biblist}
+% \item Added special field format \bibfield{volcitevolume}\see{use:cit:spc}
+% \item Added special field format \bibfield{volcitepages}\see{use:cit:spc}
+% \item Added special field \bibfield{hash}\see{aut:bbx:fld:gen}
+% \item Added \cmd{mkcomprange}\see{aut:aux:msc}
+% \item Added \cmd{mkfirstpage}\see{aut:aux:msc}
+% \item Removed \cmd{mkpagefirst}\see{aut:aux:msc}
+% \item Fixed some bugs
+% \end{release}
+
+% \begin{release}{1.5a}{2011-06-17}
+% \item Fixed some bugs
+% \end{release}
+
+% \begin{release}{1.5}{2011-06-08}
+% \item Added option \kvopt{uniquename}{mininit/minfull}\see{use:opt:pre:int}
+% \item Added option \kvopt{uniquelist}{minyear}\see{use:opt:pre:int}
+% \item Updated documentation of \cnt{uniquename} counter\see{aut:aux:tst}
+% \item Updated documentation of \cnt{uniquelist} counter\see{aut:aux:tst}
+% \item Expanded documentation for \opt{uniquename/uniquelist} options\see{aut:cav:amb}
+% \item Added editorial role \texttt{reviser}\see{bib:use:edr}
+% \item Added localisation keys \texttt{reviser}, \texttt{revisers}, \texttt{byreviser}\see{aut:lng:key}
+% \item Added bibliography heading \texttt{none}\see{use:bib:hdg}
+% \item Fixed some \sty{memoir} compatibility issues
+% \end{release}
+
+% \begin{release}{1.4c}{2011-05-12}
+% \item Fixed some bugs
+% \end{release}
+
+% \begin{release}{1.4b}{2011-04-12}
+% \item Fixed some bugs
+% \end{release}
+
+% \begin{release}{1.4a}{2011-04-06}
+% \item Enable \opt{uniquename} and \opt{uniquelist} in all \texttt{authortitle} styles\see{use:xbx:cbx}
+% \item Enable \opt{uniquename} and \opt{uniquelist} in all \texttt{authoryear} styles\see{use:xbx:cbx}
+% \item Fixed some bugs
+% \end{release}
+
+% \begin{release}{1.4}{2011-03-31}
+% \item Added package option \opt{uniquelist}\see{use:opt:pre:int}
+% \item Added special counter \cnt{uniquelist}\see{aut:aux:tst}
+% \item Revised and improved package option \opt{uniquename}\see{use:opt:pre:int}
+% \item Revised and improved special counter \cnt{uniquename}\see{aut:aux:tst}
+% \item Added \cmd{bibnamedelimi}\see{use:fmt:fmt}
+% \item Added \cmd{bibindexnamedelima}\see{use:fmt:fmt}
+% \item Added \cmd{bibindexnamedelimb}\see{use:fmt:fmt}
+% \item Added \cmd{bibindexnamedelimc}\see{use:fmt:fmt}
+% \item Added \cmd{bibindexnamedelimd}\see{use:fmt:fmt}
+% \item Added \cmd{bibindexnamedelimi}\see{use:fmt:fmt}
+% \item Added \cmd{bibindexinitperiod}\see{use:fmt:fmt}
+% \item Added \cmd{bibindexinitdelim}\see{use:fmt:fmt}
+% \item Added \cmd{bibindexinithyphendelim}\see{use:fmt:fmt}
+% \item Fixed conflict with some \acr{AMS} classes
+% \end{release}
+
+% \begin{release}{1.3a}{2011-03-18}
+% \item Fixed some bugs
+% \end{release}
+
+% \begin{release}{1.3}{2011-03-14}
+% \item Support \bibtype{thesis} with \bibfield{isbn}\see{bib:typ:blx}
+% \item Updated \opt{terseinits} option\see{use:opt:pre:gen}
+% \item Allow macros in argument to \cmd{addbibresource} and friends\see{use:bib:res}
+% \item Allow macros in argument to \cmd{bibliography}\see{use:bib:res}
+% \item Introducing experimental support for Zotero \acr{RDF}/\acr{XML}\see{use:bib:res}
+% \item Introducing experimental support for EndNote \acr{XML}\see{use:bib:res}
+% \item Added option \opt{citecounter}\see{use:opt:pre:int}
+% \item Added \cnt{citecounter}\see{aut:aux:tst}
+% \item Added \cmd{smartcite} and \cmd{Smartcite}\see{use:cit:cbx}
+% \item Added \cmd{smartcites} and \cmd{Smartcites}\see{use:cit:mlt}
+% \item Added \cmd{svolcite} and \cmd{Svolcite}\see{use:cit:spc}
+% \item Added \cmd{bibnamedelima}\see{use:fmt:fmt}
+% \item Added \cmd{bibnamedelimb}\see{use:fmt:fmt}
+% \item Added \cmd{bibnamedelimc}\see{use:fmt:fmt}
+% \item Added \cmd{bibnamedelimd}\see{use:fmt:fmt}
+% \item Added \cmd{bibinitperiod}\see{use:fmt:fmt}
+% \item Added \cmd{bibinitdelim}\see{use:fmt:fmt}
+% \item Added \cmd{bibinithyphendelim}\see{use:fmt:fmt}
+% \item Expanded documentation\see{use:cav:nam}
+% \item Added \prm{position} parameter \texttt{f} to \cmd{DeclareAutoCiteCommand}\see{aut:cbx:cbx}
+% \end{release}
+
+% \begin{release}{1.2a}{2011-02-13}
+% \item Fix in \cmd{mkbibmonth}\see{aut:fmt:ich}
+% \end{release}
+
+% \begin{release}{1.2}{2011-02-12}
+% \item Added entry type \bibtype{mvbook}\see{bib:typ:blx}
+% \item Added entry type \bibtype{mvcollection}\see{bib:typ:blx}
+% \item Added entry type \bibtype{mvproceedings}\see{bib:typ:blx}
+% \item Added entry type \bibtype{mvreference}\see{bib:typ:blx}
+% \item Introducing remote resources\see{use:bib:res}
+% \item Introducing experimental \acr{RIS} support\see{use:bib:res}
+% \item Added \cmd{addbibresource}\see{use:bib:res}
+% \item \cmd{bibliography} now deprecated\see{use:bib:res}
+% \item \cmd{bibliography*} replaced by \cmd{addglobalbib}\see{use:bib:res}
+% \item Added \cmd{addsectionbib}\see{use:bib:res}
+% \item Updated and expanded documentation\see{bib:cav:ref}
+% \item Introducing smart \bibfield{crossref} data inheritance\see{bib:cav:ref:bbr}
+% \item Introducing \bibfield{crossref} configuration interface\see{aut:ctm:ref}
+% \item Added \cmd{DefaultInheritance}\see{aut:ctm:ref}
+% \item Added \cmd{DeclareDataInheritance}\see{aut:ctm:ref}
+% \item Added \cmd{ResetDataInheritance}\see{aut:ctm:ref}
+% \item Added \cmd{ifkeyword}\see{aut:aux:tst}
+% \item Added \cmd{ifentrykeyword}\see{aut:aux:tst}
+% \item Added \cmd{ifcategory}\see{aut:aux:tst}
+% \item Added \cmd{ifentrycategory}\see{aut:aux:tst}
+% \item Added \cmd{ifdriver}\see{aut:aux:tst}
+% \item Added \cmd{forcsvfield}\see{aut:aux:msc}
+% \item Extended \cmd{mkpageprefix}\see{aut:aux:msc}
+% \item Extended \cmd{mkpagetotal}\see{aut:aux:msc}
+% \item Extended \cmd{mkpagefirst}\see{aut:aux:msc}
+% \item Added localisation key \texttt{inpreparation}\see{aut:lng:key}
+% \item Rearranged manual slightly, moving some tables to the appendix
+% \end{release}
+
+% \begin{release}{1.1b}{2011-02-04}
+% \item Added option \opt{texencoding}\see{use:opt:pre:gen}
+% \item Added option \opt{safeinputenc}\see{use:opt:pre:gen}
+% \item Expanded documentation\see{bib:cav:enc:enc}
+% \item Improved \opt{mergedate} option of bibliography style \texttt{authoryear}\see{use:xbx:bbx}
+% \item Removed \opt{pass} option of \cmd{DeclareSortingScheme}\see{aut:ctm:srt}
+% \item Fixed some bugs
+% \end{release}
+
+% \begin{release}{1.1a}{2011-01-08}
+% \item Added unsupported entry type \bibtype{bibnote}\see{bib:typ:ctm}
+% \item Added \cmd{bibliography*}\see{use:bib:res}
+% \item Fixed some bugs
+% \end{release}
+
+% \begin{release}{1.1}{2011-01-05}
+% \item Added option \opt{maxbibnames}\see{use:opt:pre:gen}
+% \item Added option \opt{minbibnames}\see{use:opt:pre:gen}
+% \item Added option \opt{maxcitenames}\see{use:opt:pre:gen}
+% \item Added option \opt{mincitenames}\see{use:opt:pre:gen}
+% \item Fixed \kvopt{idemtracker}{strict} and \kvopt{idemtracker}{constrict}\see{use:opt:pre:int}
+% \item Added option \opt{mergedate} to bibliography style \texttt{authoryear}\see{use:xbx:bbx}
+% \item Added support for \opt{prefixnumbers} to bibliography style \texttt{alphabetic}\see{use:xbx:bbx}
+% \item Made option \bibfield{useprefix} settable on a per-type basis\see{use:opt:bib}
+% \item Made option \bibfield{useauthor} settable on a per-type basis\see{use:opt:bib}
+% \item Made option \bibfield{useeditor} settable on a per-type basis\see{use:opt:bib}
+% \item Made option \opt{usetranslator} settable on a per-type basis\see{use:opt:bib}
+% \item Made option \opt{skipbib} settable on a per-type basis\see{use:opt:bib}
+% \item Made option \opt{skiplos} settable on a per-type basis\see{use:opt:bib}
+% \item Made option \opt{skiplab} settable on a per-type basis\see{use:opt:bib}
+% \item Made option \opt{dataonly} settable on a per-type basis\see{use:opt:bib}
+% \item Made option \opt{labelalpha} settable on a per-type basis\see{use:opt:pre:int}
+% \item Made option \opt{labelnumber} settable on a per-type basis\see{use:opt:pre:int}
+% \item Made option \opt{labelyear} settable on a per-type basis\see{use:opt:pre:int}
+% \item Made option \opt{singletitle} settable on a per-type basis\see{use:opt:pre:int}
+% \item Made option \opt{uniquename} settable on a per-type basis\see{use:opt:pre:int}
+% \item Made option \opt{indexing} settable on a per-type basis\see{use:opt:pre:gen}
+% \item Made option \opt{indexing} settable on a per-entry basis\see{use:opt:pre:gen}
+% \item Extended \cmd{ExecuteBibliographyOptions}\see{use:cfg:opt}
+% \item Added \cmd{citedate}\see{use:cit:txt}
+% \item Improved static entry sets\see{use:use:set}
+% \item Introducing dynamic entry sets\see{use:use:set}
+% \item Added \cmd{defbibentryset}\see{use:bib:set}
+% \item Added option \opt{mcite}\see{use:opt:ldt}
+% \item Added \sty{mcite}\slash\sty{mciteplus}-like commands\see{use:cit:mct}
+% \item Added \cmd{sortalphaothers}\see{use:fmt:fmt}
+% \item Extended \cmd{DeclareNameFormat}\see{aut:bib:fmt}
+% \item Extended \cmd{DeclareIndexNameFormat}\see{aut:bib:fmt}
+% \item Extended \cmd{DeclareListFormat}\see{aut:bib:fmt}
+% \item Extended \cmd{DeclareIndexListFormat}\see{aut:bib:fmt}
+% \item Extended \cmd{DeclareFieldFormat}\see{aut:bib:fmt}
+% \item Extended \cmd{DeclareIndexFieldFormat}\see{aut:bib:fmt}
+% \item Added \cmd{DeclareNameFormat*}\see{aut:bib:fmt}
+% \item Added \cmd{DeclareIndexNameFormat*}\see{aut:bib:fmt}
+% \item Added \cmd{DeclareListFormat*}\see{aut:bib:fmt}
+% \item Added \cmd{DeclareIndexListFormat*}\see{aut:bib:fmt}
+% \item Added \cmd{DeclareFieldFormat*}\see{aut:bib:fmt}
+% \item Added \cmd{DeclareIndexFieldFormat*}\see{aut:bib:fmt}
+% \item Introducing configurable sorting schemes
+% \item Added \cmd{DeclareSortingScheme}\see{aut:ctm:srt}
+% \item Added \cmd{DeclarePresort}\see{aut:ctm:srt}
+% \item Added \cmd{DeclareSortExclusion}\see{aut:ctm:srt}
+% \item Added \cmd{DeclareLabelname}\see{aut:ctm:fld}
+% \item Added \cmd{DeclareLabelyear}\see{aut:ctm:fld}
+% \item Improved special field \bibfield{labelname}\see{aut:bbx:fld}
+% \item Improved special field \bibfield{labelyear}\see{aut:bbx:fld}
+% \item Added \cmd{entrydata*}\see{aut:bib:dat}
+% \item Added \cmd{RequireBiber}\see{aut:aux:msc}
+% \item Added option \opt{check} to \cmd{printbibliography}\see{use:bib:bib}
+% \item Added option \opt{check} to \cmd{printshorthands}\see{use:bib:biblist}
+% \item Added \cmd{defbibcheck}\see{use:bib:flt}
+% \item Updated support for Portuguese (José Carlos Santos)
+% \item Fixed conflict with \sty{titletoc}
+% \item Fixed some bugs
+% \end{release}
+
+% \begin{release}{1.0}{2010-11-19}
+% \item First officially stable release
+% \item Renamed option \kvopt{bibencoding}{inputenc} to \kvopt{bibencoding}{auto}\see{use:opt:pre:gen}
+% \item Made \kvopt{bibencoding}{auto} the package default\see{use:opt:pre:gen}
+% \item Added option \kvopt{backend}{bibtexu}\see{use:opt:pre:gen}
+% \item Slightly updated documentation\see{bib:cav:enc}
+% \item Updated support for Dutch (Alexander van Loon)
+% \item Updated support for Italian (Andrea Marchitelli)
+% \end{release}
+
+%\begin{release}{0.9e}{2010-10-09}
+%\item Updated and expanded manual\see{bib:cav:enc}
+%\item Added option \opt{sortupper}\see{use:opt:pre:gen}
+%\item Added option \opt{sortlocale}\see{use:opt:pre:gen}
+%\item Added option \opt{backrefsetstyle}\see{use:opt:pre:gen}
+%\item Added \cmd{bibpagerefpunct}\see{use:fmt:fmt}
+%\item Added \cmd{backtrackertrue} and \cmd{backtrackerfalse}\see{aut:aux:msc}
+%\item Disable back reference tracking in \acr{TOC}/\acr{LOT}/\acr{LOF}\see{aut:cav:flt}
+%\item Improved back reference tracking for \bibtype{set} entries
+%\item Fixed some bugs
+%\end{release}
+%
+%\begin{release}{0.9d}{2010-09-03}
+%\item Added workaround for \sty{hyperref} space factor issue
+%\item Added workaround for \sty{xkeyval}'s flawed class option inheritance
+%\item Added workaround for \sty{fancyvrb}'s flawed brute-force \cmd{VerbatimFootnotes}
+%\item Removed option \kvopt{date}{none}\see{use:opt:pre:gen}
+%\item Removed option \kvopt{urldate}{none}\see{use:opt:pre:gen}
+%\item Removed option \kvopt{origdate}{none}\see{use:opt:pre:gen}
+%\item Removed option \kvopt{eventdate}{none}\see{use:opt:pre:gen}
+%\item Removed option \kvopt{alldates}{none}\see{use:opt:pre:gen}
+%\item Added option \kvopt{date}{iso8601}\see{use:opt:pre:gen}
+%\item Added option \kvopt{urldate}{iso8601}\see{use:opt:pre:gen}
+%\item Added option \kvopt{origdate}{iso8601}\see{use:opt:pre:gen}
+%\item Added option \kvopt{eventdate}{iso8601}\see{use:opt:pre:gen}
+%\item Added option \kvopt{alldates}{iso8601}\see{use:opt:pre:gen}
+%\end{release}
+%
+%\begin{release}{0.9c}{2010-08-29}
+%\item Added field \bibfield{eprintclass}\see{bib:fld:dat}
+%\item Added field alias \bibfield{archiveprefix}\see{bib:fld:als}
+%\item Added field alias \bibfield{primaryclass}\see{bib:fld:als}
+%\item Updated documentation\see{use:use:epr}
+%\item Tweaked package option \kvopt{babel}{other*}\see{use:opt:pre:gen}
+%\item Updated support for Brazilian (Mateus Araújo)
+%\item Fixed some bugs
+%\end{release}
+%
+%\begin{release}{0.9b}{2010-08-04}
+%
+%\item New dependency on \sty{logreq} package\see{int:pre:req}
+%\item Improved separator masking in literal lists\see{bib:use:and}
+%\item Added citation style \texttt{authortitle-ticomp}\see{use:xbx:cbx}
+%\item Added option \opt{citepages} to all \texttt{verbose} citation styles\see{use:xbx:cbx}
+%\item Added support for prefixes to all \texttt{numeric} citation styles\see{use:xbx:cbx}
+%\item Added support for prefixes to all \texttt{numeric} bibliography styles\see{use:xbx:bbx}
+%\item Renamed package option \opt{defernums} to \opt{defernumbers}\see{use:opt:pre:gen}
+%\item Added option \opt{sortcase}\see{use:opt:pre:gen}
+%\item Added option \opt{dateabbrev}\see{use:opt:pre:gen}
+%\item Added option \kvopt{date}{none}\see{use:opt:pre:gen}
+%\item Added option \kvopt{urldate}{none}\see{use:opt:pre:gen}
+%\item Added option \kvopt{origdate}{none}\see{use:opt:pre:gen}
+%\item Added option \kvopt{eventdate}{none}\see{use:opt:pre:gen}
+%\item Added option \kvopt{alldates}{none}\see{use:opt:pre:gen}
+%\item Added option \opt{clearlang}\see{use:opt:pre:gen}
+%\item Added option \opt{prefixnumbers} to \cmd{printbibliography}\see{use:bib:bib}
+%\item Added option \opt{resetnumbers} to \cmd{printbibliography}\see{use:bib:bib}
+%\item Added option \opt{omitnumbers} to \cmd{printbibliography}\see{use:bib:bib}
+%\item Added special field \bibfield{prefixnumber}\see{aut:bbx:fld}
+%\item Added \cmd{DeclareRedundantLanguages}\see{aut:lng:cmd}
+%\item Added support for handles (\acr{HDL}s)\see{use:use:epr}
+%\item Extended \cmd{defbibfilter}\see{use:bib:flt}
+%\item Added \cmd{nametitledelim}\see{use:fmt:fmt}
+%\item Improved \cmd{newbibmacro}\see{aut:aux:msc}
+%\item Improved \cmd{renewbibmacro}\see{aut:aux:msc}
+%\item Added \cmd{biblstring}\see{aut:str}
+%\item Added \cmd{bibsstring}\see{aut:str}
+%\item Added \cmd{bibcplstring}\see{aut:str}
+%\item Added \cmd{bibcpsstring}\see{aut:str}
+%\item Added \cmd{bibuclstring}\see{aut:str}
+%\item Added \cmd{bibucsstring}\see{aut:str}
+%\item Added \cmd{biblclstring}\see{aut:str}
+%\item Added \cmd{biblcsstring}\see{aut:str}
+%\item Added \cmd{bibxlstring}\see{aut:str}
+%\item Added \cmd{bibxsstring}\see{aut:str}
+%\item Added \cmd{mkbibbold}\see{aut:fmt:ich}
+%\item Modified and extended log messages\see{bib:cav:ide}
+%\item Fixed some bugs
+%
+%\end{release}
+%
+%\begin{release}{0.9a}{2010-03-19}
+%
+%\item Modified citation style \texttt{numeric}\see{use:xbx:cbx}
+%\item Modified citation style \texttt{numeric-comp}\see{use:xbx:cbx}
+%\item Modified citation style \texttt{numeric-verb}\see{use:xbx:cbx}
+%\item Modified citation style \texttt{alphabetic}\see{use:xbx:cbx}
+%\item Modified citation style \texttt{alphabetic-verb}\see{use:xbx:cbx}
+%\item Modified citation style \texttt{authoryear}\see{use:xbx:cbx}
+%\item Modified citation style \texttt{authoryear-comp}\see{use:xbx:cbx}
+%\item Modified citation style \texttt{authoryear-ibid}\see{use:xbx:cbx}
+%\item Modified citation style \texttt{authoryear-icomp}\see{use:xbx:cbx}
+%\item Modified citation style \texttt{authortitle}\see{use:xbx:cbx}
+%\item Modified citation style \texttt{authortitle-comp}\see{use:xbx:cbx}
+%\item Modified citation style \texttt{authortitle-ibid}\see{use:xbx:cbx}
+%\item Modified citation style \texttt{authortitle-icomp}\see{use:xbx:cbx}
+%\item Modified citation style \texttt{authortitle-terse}\see{use:xbx:cbx}
+%\item Modified citation style \texttt{authortitle-tcomp}\see{use:xbx:cbx}
+%\item Modified citation style \texttt{draft}\see{use:xbx:cbx}
+%\item Modified citation style \texttt{debug}\see{use:xbx:cbx}
+%\item Added option \opt{bibwarn}\see{use:opt:pre:gen}
+%\item Added \cmd{printbibheading}\see{use:bib:bib}
+%\item Added option \opt{env} to \cmd{printbibliography}\see{use:bib:bib}
+%\item Added option \opt{env} to \cmd{printshorthands}\see{use:bib:biblist}
+%\item Added \cmd{defbibenvironment}\see{use:bib:hdg}
+%\item Removed \env{thebibliography}\see{aut:bbx:bbx}
+%\item Removed \env{theshorthands}\see{aut:bbx:bbx}
+%\item Removed \cmd{thebibitem}\see{aut:bbx:bbx}
+%\item Removed \cmd{thelositem}\see{aut:bbx:bbx}
+%\item Updated documentation\see{aut:bbx:bbx}
+%\item Updated documentation\see{aut:bbx:env}
+%\item Added \cmd{intitlepunct}\see{use:fmt:fmt}
+%\item Added option \opt{parentracker}\see{use:opt:pre:int}
+%\item Added option \opt{maxparens}\see{use:opt:pre:int}
+%\item Added counter \cnt{parenlevel}\see{aut:aux:tst}
+%\item Added \cmd{parentext}\see{use:cit:txt}
+%\item Added \cmd{brackettext}\see{use:cit:txt}
+%\item Improved \cmd{mkbibparens}\see{aut:fmt:ich}
+%\item Improved \cmd{mkbibbrackets}\see{aut:fmt:ich}
+%\item Added \cmd{bibopenparen} and \cmd{bibcloseparen}\see{aut:fmt:ich}
+%\item Added \cmd{bibopenbracket} and \cmd{bibclosebracket}\see{aut:fmt:ich}
+%\item Added special field \bibfield{childentrykey}\see{aut:bbx:fld}
+%\item Added special field \bibfield{childentrytype}\see{aut:bbx:fld}
+%\item Added \cmd{ifnatbibmode}\see{aut:aux:tst}
+%\item Added missing documentation of \cmd{ifbibxstring}\see{aut:aux:tst}
+%\item Added \cmd{providebibmacro}\see{aut:aux:msc}
+%\item Added localisation key \texttt{backrefpage}\see{aut:lng:key}
+%\item Added localisation key \texttt{backrefpages}\see{aut:lng:key}
+%\item Slightly expanded documentation\see{bib:use:dat}
+%\item Slightly expanded documentation\see{aut:bbx:fld:dat}
+%\item Added support for Finnish (translations by Hannu Väisänen)
+%\item Updated support for Greek (translations by Prokopis)
+%
+%\end{release}
+%
+%\begin{release}{0.9}{2010-02-14}
+%
+%\item Added entry type \bibtype{bookinbook}\see{bib:typ:blx}
+%\item Support \bibfield{eventtitle}/\bibfield{eventdate}/\bibfield{venue} in \bibtype{proceedings}\see{bib:typ:blx}
+%\item Support \bibfield{eventtitle}/\bibfield{eventdate}/\bibfield{venue} in \bibtype{inproceedings}\see{bib:typ:blx}
+%\item Added support for multiple editorial roles\see{bib:use:edr}
+%\item Added field \bibfield{editora}\see{bib:fld:dat}
+%\item Added field \bibfield{editorb}\see{bib:fld:dat}
+%\item Added field \bibfield{editorc}\see{bib:fld:dat}
+%\item Added field \bibfield{editoratype}\see{bib:fld:dat}
+%\item Added field \bibfield{editorbtype}\see{bib:fld:dat}
+%\item Added field \bibfield{editorctype}\see{bib:fld:dat}
+%\item Removed field \bibfield{redactor}\see{bib:fld:dat}
+%\item Added field \bibfield{pubstate}\see{bib:fld:dat}
+%\item Support \bibfield{pubstate} in all entry types\see{bib:typ:blx}
+%\item Support full dates in all entry types\see{bib:typ:blx}
+%\item Modified and extended date handling\see{bib:use:dat}
+%\item Updated documentation\see{bib:use:iss}
+%\item Removed field \bibfield{day}\see{bib:fld:dat}
+%\item Modified data type of field \bibfield{year}\see{bib:fld:dat}
+%\item Extended field \bibfield{date}\see{bib:fld:dat}
+%\item Removed field \bibfield{origyear}\see{bib:fld:dat}
+%\item Added field \bibfield{origdate}\see{bib:fld:dat}
+%\item Added field \bibfield{eventdate}\see{bib:fld:dat}
+%\item Removed fields \bibfield{urlday}/\bibfield{urlmonth}/\bibfield{urlyear}\see{bib:fld:dat}
+%\item Updated documentation\see{bib:use:dat}
+%\item Extended option \opt{date}\see{use:opt:pre:gen}
+%\item Extended option \opt{urldate}\see{use:opt:pre:gen}
+%\item Added option \opt{origdate}\see{use:opt:pre:gen}
+%\item Added option \opt{eventdate}\see{use:opt:pre:gen}
+%\item Added option \opt{alldates}\see{use:opt:pre:gen}
+%\item Added option \opt{datezeros}\see{use:opt:pre:gen}
+%\item Added option \opt{language}\see{use:opt:pre:gen}
+%\item Added option \cnt{notetype}\see{use:opt:pre:gen}
+%\item Added option \cnt{backrefstyle}\see{use:opt:pre:gen}
+%\item Modified option \opt{indexing}\see{use:opt:pre:gen}
+%\item Made option \kvopt{hyperref}{auto} the default\see{use:opt:pre:gen}
+%\item Added option \kvopt{backend}{biber}\see{use:opt:pre:gen}
+%\item Updated documentation\see{bib:cav:enc}
+%\item Added option \opt{isbn}\see{use:opt:pre:bbx}
+%\item Added option \opt{url}\see{use:opt:pre:bbx}
+%\item Added option \opt{doi}\see{use:opt:pre:bbx}
+%\item Added option \opt{eprint}\see{use:opt:pre:bbx}
+%\item Improved citation style \texttt{authortitle-comp}\see{use:xbx:cbx}
+%\item Improved citation style \texttt{authortitle-icomp}\see{use:xbx:cbx}
+%\item Improved citation style \texttt{authortitle-tcomp}\see{use:xbx:cbx}
+%\item Improved citation style \texttt{authoryear-comp}\see{use:xbx:cbx}
+%\item Added citation style \texttt{authoryear-icomp}\see{use:xbx:cbx}
+%\item Added citation style \texttt{verbose-trad3}\see{use:xbx:cbx}
+%\item Improved bibliography style \texttt{authortitle}\see{use:xbx:bbx}
+%\item Improved bibliography style \texttt{authoryear}\see{use:xbx:bbx}
+%\item Improved bibliography style \texttt{verbose}\see{use:xbx:bbx}
+%\item Added option \opt{title} to \cmd{printbibliography}\see{use:bib:bib}
+%\item Added option \opt{title} to \cmd{printshorthands}\see{use:bib:biblist}
+%\item Extended \cmd{defbibheading}\see{use:bib:hdg}
+%\item Added options \opt{subtype}/\opt{notsubtype} to \cmd{printbibliography}\see{use:bib:biblist}
+%\item Added options \opt{subtype}/\opt{notsubtype} to \cmd{printshorthands}\see{use:bib:biblist}
+%\item Added test \opt{subtype} to \cmd{defbibfilter}\see{use:bib:flt}
+%\item Added option \opt{segment} to \cmd{printshorthands}\see{use:bib:biblist}
+%\item Added options \opt{type}/\opt{nottype} to \cmd{printshorthands}\see{use:bib:biblist}
+%\item Added options \opt{keyword}/\opt{notkeyword} to \cmd{printshorthands}\see{use:bib:biblist}
+%\item Added options \opt{category}/\opt{notcategory} to \cmd{printshorthands}\see{use:bib:biblist}
+%\item Added option \opt{filter} to \cmd{printshorthands}\see{use:bib:biblist}
+%\item Added \cmd{footcitetext}\see{use:cit:std}
+%\item Added \cmd{footcitetexts}\see{use:cit:mlt}
+%\item Added \cmd{ftvolcite}\see{use:cit:spc}
+%\item Added \cmd{textcites} and \cmd{Textcites}\see{use:cit:mlt}
+%\item Added \cmd{nohyphenation}\see{use:fmt:aux}
+%\item Added \cmd{textnohyphenation}\see{use:fmt:aux}
+%\item Added \cmd{mkpagefirst}\see{aut:aux:msc}
+%\item Added \cmd{pagenote} support to \cmd{mkbibendnote}\see{aut:fmt:ich}
+%\item Added \cmd{mkbibfootnotetext}\see{aut:fmt:ich}
+%\item Added \cmd{mkbibendnotetext}\see{aut:fmt:ich}
+%\item Added \cmd{bibfootnotewrapper}\see{aut:fmt:ich}
+%\item Added \cmd{bibendnotewrapper}\see{aut:fmt:ich}
+%\item Added \cmd{mkdatezeros}\see{aut:fmt:ich}
+%\item Added \cmd{stripzeros}\see{aut:fmt:ich}
+%\item Added support for \acr{jstor} links\see{use:use:epr}
+%\item Added support for PubMed links\see{use:use:epr}
+%\item Added support for Google Books links\see{use:use:epr}
+%\item Improved \cmd{DeclareBibliographyDriver}\see{aut:bbx:bbx}
+%\item Improved \cmd{DeclareBibliographyAlias}\see{aut:bbx:bbx}
+%\item Added special fields \bibfield{day}/\bibfield{month}/\bibfield{year}\see{aut:bbx:fld}
+%\item Added special fields \bibfield{endday}/\bibfield{endmonth}/\bibfield{endyear}\see{aut:bbx:fld}
+%\item Added special fields \bibfield{origday}/\bibfield{origmonth}/\bibfield{origyear}\see{aut:bbx:fld}
+%\item Added special fields \bibfield{origendday}/\bibfield{origendmonth}/\bibfield{origendyear}\see{aut:bbx:fld}
+%\item Added special fields \bibfield{eventday}/\bibfield{eventmonth}/\bibfield{eventyear}\see{aut:bbx:fld}
+%\item Added special fields \bibfield{eventendday}/\bibfield{eventendmonth}/\bibfield{eventendyear}\see{aut:bbx:fld}
+%\item Added special fields \bibfield{urlday}/\bibfield{urlmonth}/\bibfield{urlyear}\see{aut:bbx:fld}
+%\item Added special fields \bibfield{urlendday}/\bibfield{urlendmonth}/\bibfield{urlendyear}\see{aut:bbx:fld}
+%\item Renamed special field \bibfield{labelyear} to \bibfield{extrayear}\see{aut:bbx:fld}
+%\item Added new special field \bibfield{labelyear}\see{aut:bbx:fld}
+%\item Renamed \cnt{maxlabelyear} to \cnt{maxextrayear}\see{aut:fmt:ilc}
+%\item Renamed \cmd{bibdate} to \cmd{printdate}, modified \cmd{printdate}\see{aut:bib:dat}
+%\item Added \cmd{printdateextra}\see{aut:bib:dat}
+%\item Renamed \cmd{biburldate} to \cmd{printurldate}, modified \cmd{printurldate}\see{aut:bib:dat}
+%\item Added \cmd{printorigdate}\see{aut:bib:dat}
+%\item Added \cmd{printeventdate}\see{aut:bib:dat}
+%\item Added \cmd{bibdatedash}\see{use:fmt:lng}
+%\item Added \cmd{mkbibdatelong} and \cmd{mkbibdateshort}\see{use:fmt:lng}
+%\item Removed \cmd{bibdatelong} and \cmd{bibdateshort}\see{use:fmt:lng}
+%\item Removed \cmd{biburldatelong} and \cmd{biburldateshort}\see{use:fmt:lng}
+%\item Added \cmd{ifciteindex}\see{aut:aux:tst}
+%\item Added \cmd{ifbibindex}\see{aut:aux:tst}
+%\item Added \cmd{iffieldint}\see{aut:aux:tst}
+%\item Added \cmd{iffieldnum}\see{aut:aux:tst}
+%\item Added \cmd{iffieldnums}\see{aut:aux:tst}
+%\item Added \cmd{ifpages}\see{aut:aux:tst}
+%\item Added \cmd{iffieldpages}\see{aut:aux:tst}
+%\item Added \cmd{DeclarePageCommands} and \cmd{DeclarePageCommands*}\see{aut:aux:msc}
+%\item Improved \cmd{NewBibliographyString}\see{aut:lng:cmd}
+%\item Removed localisation key \texttt{editor}\see{aut:lng:key}
+%\item Removed localisation key \texttt{editors}\see{aut:lng:key}
+%\item Renamed localisation key \texttt{typeeditor} to \texttt{editor}\see{aut:lng:key}
+%\item Renamed localisation key \texttt{typeeditors} to \texttt{editors}\see{aut:lng:key}
+%\item Renamed localisation key \texttt{typecompiler} to \texttt{compiler}\see{aut:lng:key}
+%\item Renamed localisation key \texttt{typecompilers} to \texttt{compilers}\see{aut:lng:key}
+%\item Added localisation key \texttt{founder}\see{aut:lng:key}
+%\item Added localisation key \texttt{founders}\see{aut:lng:key}
+%\item Added localisation key \texttt{continuator}\see{aut:lng:key}
+%\item Added localisation key \texttt{continuators}\see{aut:lng:key}
+%\item Added localisation key \texttt{collaborator}\see{aut:lng:key}
+%\item Added localisation key \texttt{collaborators}\see{aut:lng:key}
+%\item Removed localisation key \texttt{byauthor}\see{aut:lng:key}
+%\item Renamed localisation key \texttt{bytypeauthor} to \texttt{byauthor}\see{aut:lng:key}
+%\item Removed localisation key \texttt{byeditor}\see{aut:lng:key}
+%\item Renamed localisation key \texttt{bytypeeditor} to \texttt{byeditor}\see{aut:lng:key}
+%\item Renamed localisation key \texttt{bytypecompiler} to \texttt{bycompiler}\see{aut:lng:key}
+%\item Added localisation key \texttt{byfounder}\see{aut:lng:key}
+%\item Added localisation key \texttt{bycontinuator}\see{aut:lng:key}
+%\item Added localisation key \texttt{bycollaborator}\see{aut:lng:key}
+%\item Added localisation key \texttt{inpress}\see{aut:lng:key}
+%\item Added localisation key \texttt{submitted}\see{aut:lng:key}
+%\item Added support for Dutch (translations by Alexander van Loon)
+%\item Added support for Greek (translations by Apostolos Syropoulos)
+%\item Added notes on Greek\see{use:loc:grk}
+%
+%\end{release}
+%
+%\begin{release}{0.8i}{2009-09-20}
+%
+%\item Fixed some bugs
+%
+%\end{release}
+%
+%\begin{release}{0.8h}{2009-08-10}
+%
+%\item Fixed some bugs
+%
+%\end{release}
+%
+%\begin{release}{0.8g}{2009-08-06}
+%
+%\item Fixed some bugs
+%
+%\end{release}
+%
+%\begin{release}{0.8f}{2009-07-25}
+%
+%\item Fixed some bugs
+%
+%\end{release}
+%
+%\begin{release}{0.8e}{2009-07-04}
+%
+%\item Added \cmd{mkbibordedition}\see{use:fmt:lng}
+%\item Added \cmd{mkbibordseries}\see{use:fmt:lng}
+%\item Added \cmd{mkbibendnote}\see{aut:fmt:ich}
+%\item Added several localisation keys related to \texttt{editor}\see{aut:lng:key}
+%\item Added several localisation keys related to \texttt{translator}\see{aut:lng:key}
+%\item Added localisation key \texttt{thiscite}\see{aut:lng:key}
+%\item Removed several \texttt{country...} localisation keys\see{aut:lng:key}
+%\item Removed several \texttt{patent...} localisation keys\see{aut:lng:key}
+%\item Removed several \texttt{patreq...} localisation keys\see{aut:lng:key}
+%\item Updated and clarified documentation\see{aut:lng:key}
+%\item Added support for Brazilian Portuguese (by Augusto Ritter Stoffel)
+%\item Added preliminary support for Portuguese/Portugal\see{use:opt:pre:gen}
+%\item Added revised Swedish translations (by Per Starbäck)\see{use:opt:pre:gen}
+%\item Expanded documentation\see{aut:cav:nam}
+%\item Improved concatenation of editorial and other roles
+%\item Fixed some bugs
+%
+%\end{release}
+%
+%\begin{release}{0.8d}{2009-05-30}
+%
+%\item Removed package option \opt{bibtex8}\see{use:opt:pre:gen}
+%\item Added package option \opt{backend}\see{use:opt:pre:gen}
+%\item Slightly modified package option \bibfield{loccittracker}\see{use:opt:pre:int}
+%\item Added \cmd{volcite} and \cmd{Volcite}\see{use:cit:spc}
+%\item Added \cmd{pvolcite} and \cmd{Pvolcite}\see{use:cit:spc}
+%\item Added \cmd{fvolcite}\see{use:cit:spc}
+%\item Added \cmd{tvolcite} and \cmd{Tvolcite}\see{use:cit:spc}
+%\item Added \cmd{avolcite} and \cmd{Avolcite}\see{use:cit:spc}
+%\item Added \cmd{notecite} and \cmd{Notecite}\see{use:cit:spc}
+%\item Added \cmd{Pnotecite} and \cmd{Pnotecite}\see{use:cit:spc}
+%\item Added \cmd{fnotecite}\see{use:cit:spc}
+%\item Added \cmd{addabthinspace}\see{aut:pct:spc}
+%\item Disable citation and page trackers in \acr{TOC}/\acr{LOT}/\acr{LOF}\see{aut:cav:flt}
+%\item Disable citation and page trackers in floats\see{aut:cav:flt}
+%\item Improved on-demand loading of localisation modules
+%\item Fixed some bugs
+%
+%\end{release}
+%
+%\begin{release}{0.8c}{2009-01-10}
+%
+%\item Added <idem> tracker\see{use:opt:pre:int}
+%\item Added package option \opt{idemtracker}\see{use:opt:pre:int}
+%\item Added \cmd{ifciteidem}\see{aut:aux:tst}
+%\item Added \cmd{ifentryseen}\see{aut:aux:tst}
+%\item Improved citation style \texttt{verbose-trad1}\see{use:xbx:cbx}
+%\item Improved citation style \texttt{verbose-trad2}\see{use:xbx:cbx}
+%\item Renamed \len{bibitemextrasep} to \len{bibnamesep}\see{use:fmt:len}
+%\item Slightly modified \len{bibnamesep}\see{use:fmt:len}
+%\item Added \len{bibinitsep}\see{use:fmt:len}
+%\item Increased default value of \cnt{highnamepenalty}\see{use:fmt:len}
+%\item Increased default value of \cnt{lownamepenalty}\see{use:fmt:len}
+%\item Updated documentation\see{use:loc:us}
+%\item Added \cmd{uspunctuation}\see{aut:pct:cfg}
+%\item Added \cmd{stdpunctuation}\see{aut:pct:cfg}
+%\item Added \cmd{midsentence*}\see{aut:pct:ctr}
+%\item Fixed some bugs
+%
+%\end{release}
+%
+%\begin{release}{0.8b}{2008-12-13}
+%
+%\item Added package/entry option \opt{usetranslator}\see{use:opt:bib}
+%\item Added \cmd{ifusetranslator}\see{aut:aux:tst}
+%\item Consider \bibfield{translator} when sorting\see{use:srt}
+%\item Consider \bibfield{translator} when generating \bibfield{labelname}\see{aut:bbx:fld}
+%\item Added field \bibfield{eventtitle}\see{bib:fld:dat}
+%\item Support \bibfield{eventtitle} in \bibtype{proceedings} entries\see{bib:typ:blx}
+%\item Support \bibfield{eventtitle} in \bibtype{inproceedings} entries\see{bib:typ:blx}
+%\item Added unsupported entry type \bibtype{commentary}\see{bib:typ:ctm}
+%\item Permit \cmd{NewBibliographyString} in \file{lbx} files\see{aut:lng:cmd}
+%\item Improved behavior of \cmd{mkbibquote} in <American-punctuation> mode\see{aut:fmt:ich}
+%\item Fixed some bugs
+%
+%\end{release}
+%
+%\begin{release}{0.8a}{2008-11-29}
+%
+%\item Updated documentation (important, please read)\see{int:feb}
+%\item Added package option \kvopt{hyperref}{auto}\see{use:opt:pre:gen}
+%\item Improved bibliography style \texttt{reading}\see{use:xbx:bbx}
+%\item Updated \acr{KOMA}-Script support for version 3.x\see{use:cav:scr}
+%\item Slightly modified special field \bibfield{fullhash}\see{aut:bbx:fld}
+%\item Added documentation of \cmd{DeclareNumChars*}\see{aut:aux:msc}
+%\item Added documentation of \cmd{DeclareRangeChars*}\see{aut:aux:msc}
+%\item Added documentation of \cmd{DeclareRangeCommands*}\see{aut:aux:msc}
+%\item Added \cmd{MakeSentenceCase}\see{aut:aux:msc}
+%\item Added \cmd{DeclareCaseLangs}\see{aut:aux:msc}
+%\item Support nested \cmd{mkbibquote} with American punctuation\see{aut:fmt:ich}
+%\item Improved \cmd{ifpunctmark}\see{aut:pct:chk}
+%\item Improved punctuation tracker\see{aut:pct:pct}
+%\item Added \cmd{DeclarePunctuationPairs}\see{aut:pct:cfg}
+%\item Added \cmd{DeclareLanguageMapping}\see{aut:lng:cmd}
+%\item Added support for custom localisation modules\see{aut:cav:lng}
+%\item Added extended \pdf bookmarks to this manual
+%\item Fixed various bugs
+%
+%\end{release}
+%
+%\begin{release}{0.8}{2008-10-02}
+%
+%\item Added \cmd{DefineHyphenationExceptions}\see{use:lng}
+%\item Added \cmd{DeclareHyphenationExceptions}\see{aut:lng:cmd}
+%\item Added \cmd{mkpagetotal}\see{aut:aux:msc}
+%\item Improved \acr{KOMA}-Script support\see{use:cav:scr}
+%\item Added \cmd{ifkomabibtotoc}\see{use:cav:scr}
+%\item Added \cmd{ifkomabibtotocnumbered}\see{use:cav:scr}
+%\item Added \cmd{ifmemoirbibintoc}\see{use:cav:mem}
+%\item Updated documentation\see{use:bib:hdg}
+%\item Updated documentation of \cmd{iffootnote}\see{aut:aux:tst}
+%\item Added several new localisation keys\see{aut:lng:key}
+%\item Rearranged some localisation keys (\texttt{section} vs. \texttt{paragraph})\see{aut:lng:key}
+%\item Added unsupported entry type \bibtype{letter}\see{bib:typ:ctm}
+%\item Added entry type \bibtype{suppbook}\see{bib:typ:blx}
+%\item Added entry type \bibtype{suppcollection}\see{bib:typ:blx}
+%\item Added entry type \bibtype{suppperiodical}\see{bib:typ:blx}
+%\item Support \bibtype{reference} and \bibtype{inreference}\see{bib:typ:blx}
+%\item Support \bibtype{review} as an alias\see{bib:typ:ctm}
+%\item Added field \bibfield{origpublisher}\see{bib:fld:dat}
+%\item Added field alias \bibfield{annote}\see{bib:fld:als}
+%\item Expanded documentation\see{bib:cav:enc}
+%\item Added \cmd{DeclareCapitalPunctuation}\see{aut:pct:cfg}
+%\item Removed \cmd{EnableCapitalAfter} and \cmd{DisableCapitalAfter}\see{aut:pct:cfg}
+%\item Added support for <American-style> punctuation\see{aut:pct:cfg}
+%\item Added \cmd{DeclareQuotePunctuation}\see{aut:pct:cfg}
+%\item Improved \cmd{mkbibquote}\see{aut:fmt:ich}
+%\item Expanded documentation\see{use:loc:us}
+%\item Improved all \texttt{numeric} citation styles\see{use:xbx:cbx}
+%\item Improved \texttt{numeric} bibliography style\see{use:xbx:bbx}
+%\item Added citation style \texttt{authoryear-ibid}\see{use:xbx:cbx}
+%\item Improved all \texttt{authoryear} citation styles\see{use:xbx:cbx}
+%\item Improved \texttt{authoryear} bibliography style\see{use:xbx:bbx}
+%\item Added \opt{pageref} option to \texttt{verbose-note} style\see{use:xbx:cbx}
+%\item Added \opt{pageref} option to \texttt{verbose-inote} style\see{use:xbx:cbx}
+%\item Added citation style \texttt{reading}\see{use:xbx:cbx}
+%\item Added bibliography style \texttt{reading}\see{use:xbx:bbx}
+%\item Added citation style \texttt{draft}\see{use:xbx:cbx}
+%\item Added bibliography style \texttt{draft}\see{use:xbx:bbx}
+%\item Improved \sty{natbib} compatibility style\see{use:cit:nat}
+%\item Added \cmd{ifcitation}\see{aut:aux:tst}
+%\item Added \cmd{ifbibliography}\see{aut:aux:tst}
+%\item Added \cmd{printfile}\see{aut:bib:dat}
+%\item Added package option \opt{loadfiles}\see{use:opt:pre:gen}
+%\item Added support for bibliographic data in external files\see{use:use:prf}
+%\item Expanded documentation\see{aut:cav:prf}
+%\item Modified field \bibfield{edition}\see{bib:fld:dat}
+%\item Modified special field \bibfield{labelyear}\see{aut:bbx:fld}
+%\item Modified special field \bibfield{labelalpha}\see{aut:bbx:fld}
+%\item Added special field \bibfield{extraalpha}\see{aut:bbx:fld}
+%\item Added counter \cnt{maxlabelyear}\see{aut:fmt:ilc}
+%\item Added counter \cnt{maxextraalpha}\see{aut:fmt:ilc}
+%\item Added \cmd{mknumalph}\see{use:fmt:aux}
+%\item Added \cmd{mkbibacro}\see{use:fmt:aux}
+%\item Added \cmd{autocap}\see{use:fmt:aux}
+%\item Added package option \opt{firstinits}\see{use:opt:pre:gen}
+%\item Added \cmd{iffirstinits}\see{aut:aux:tst}
+%\item Added support for eprint data\see{use:use:epr}
+%\item Added support for arXiv\see{use:use:epr}
+%\item Expanded documentation \see{aut:cav:epr}
+%\item Added field \bibfield{eprint}\see{bib:fld:dat}
+%\item Added field \bibfield{eprinttype}\see{bib:fld:dat}
+%\item Added eprint support to all standard entry types\see{bib:typ:blx}
+%\item Added package option \opt{arxiv}\see{use:opt:pre:gen}
+%\item Introduced concept of an entry set\see{use:use:set}
+%\item Expanded documentation\see{aut:cav:set}
+%\item Added entry type \bibtype{set}\see{bib:typ:blx}
+%\item Added field \bibfield{entryset}\see{bib:fld:spc}
+%\item Added special field \bibfield{entrysetcount}\see{aut:bbx:fld}
+%\item Added \cmd{entrydata}\see{aut:bib:dat}
+%\item Expanded documentation\see{aut:cav:mif}
+%\item Added \cmd{entryset}\see{aut:bib:dat}
+%\item Added \cmd{strfield}\see{aut:aux:dat}
+%\item Improved \cmd{usedriver}\see{aut:aux:msc}
+%\item Added \cmd{bibpagespunct}\see{use:fmt:fmt}
+%\item Expanded documentation\see{aut:cav:pct}
+%\item Added entry option \opt{skipbib}\see{use:opt:bib}
+%\item Added entry option \opt{skiplos}\see{use:opt:bib}
+%\item Added entry option \opt{skiplab}\see{use:opt:bib}
+%\item Added entry option \opt{dataonly}\see{use:opt:bib}
+%\item Modified special field \bibfield{namehash}\see{aut:bbx:fld}
+%\item Added special field \bibfield{fullhash}\see{aut:bbx:fld}
+%\item Added \cmd{DeclareNumChars}\see{aut:aux:msc}
+%\item Added \cmd{DeclareRangeChars}\see{aut:aux:msc}
+%\item Added \cmd{DeclareRangeCommands}\see{aut:aux:msc}
+%\item Added support for Swedish (translations by Per Starbäck and others)
+%\item Updated various localisation files
+%\item Various minor improvements throughout
+%\item Fixed some bugs
+%
+%\end{release}
+%
+%\begin{release}{0.7}{2007-12-09}
+%
+%\item Expanded documentation\see{int:feb}
+%\item New dependency on \sty{etoolbox} package\see{int:pre:req}
+%\item Made \sty{url} a required package\see{int:pre:req}
+%\item Modified package option \opt{sorting}\see{use:opt:pre:gen}
+%\item Introduced concept of an entry option\see{use:opt:bib}
+%\item Added option \bibfield{useauthor}\see{use:opt:bib}
+%\item Added option \bibfield{useeditor}\see{use:opt:bib}
+%\item Modified option \bibfield{useprefix}\see{use:opt:bib}
+%\item Removed field \bibfield{useprefix}\see{bib:fld:spc}
+%\item Added field \bibfield{options}\see{bib:fld:spc}
+%\item Updated documentation\see{use:srt}
+%\item Added citation style \texttt{authortitle-ibid}\see{use:xbx:cbx}
+%\item Added citation style \texttt{authortitle-icomp}\see{use:xbx:cbx}
+%\item Renamed citation style \texttt{authortitle-cterse} to \texttt{authortitle-tcomp}\see{use:xbx:cbx}
+%\item Renamed citation style \texttt{authortitle-verb} to \texttt{verbose}\see{use:xbx:cbx}
+%\item Renamed citation style \texttt{authortitle-cverb} to \texttt{verbose-ibid}\see{use:xbx:cbx}
+%\item Added citation style \texttt{verbose-note}\see{use:xbx:cbx}
+%\item Added citation style \texttt{verbose-inote}\see{use:xbx:cbx}
+%\item Renamed citation style \texttt{authortitle-trad} to \texttt{verbose-trad1}\see{use:xbx:cbx}
+%\item Removed citation style \texttt{authortitle-strad}\see{use:xbx:cbx}
+%\item Added citation style \texttt{verbose-trad2}\see{use:xbx:cbx}
+%\item Improved citation style \texttt{authoryear}\see{use:xbx:cbx}
+%\item Improved citation style \texttt{authoryear-comp}\see{use:xbx:cbx}
+%\item Improved citation style \texttt{authortitle-terse}\see{use:xbx:cbx}
+%\item Improved citation style \texttt{authortitle-tcomp}\see{use:xbx:cbx}
+%\item Improved all verbose citation styles\see{use:xbx:cbx}
+%\item Expanded documentation\see{bib:fld:typ}
+%\item Modified entry type \bibtype{article}\see{bib:typ:blx}
+%\item Added entry type \bibtype{periodical}\see{bib:typ:blx}
+%\item Added entry type \bibtype{patent}\see{bib:typ:blx}
+%\item Extended entry types \bibfield{proceedings} and \bibfield{inproceedings}\see{bib:typ:blx}
+%\item Extended entry type \bibfield{article}\see{bib:typ:blx}
+%\item Extended entry type \bibfield{booklet}\see{bib:typ:blx}
+%\item Extended entry type \bibfield{misc}\see{bib:typ:blx}
+%\item Added entry type alias \bibtype{electronic}\see{bib:typ:als}
+%\item Added new custom types\see{bib:typ:ctm}
+%\item Support \bibfield{pagetotal} field where applicable\see{bib:typ:blx}
+%\item Added field \bibfield{holder}\see{bib:fld:dat}
+%\item Added field \bibfield{venue}\see{bib:fld:dat}
+%\item Added field \bibfield{version}\see{bib:fld:dat}
+%\item Added field \bibfield{journaltitle}\see{bib:fld:dat}
+%\item Added field \bibfield{journalsubtitle}\see{bib:fld:dat}
+%\item Added field \bibfield{issuetitle}\see{bib:fld:dat}
+%\item Added field \bibfield{issuesubtitle}\see{bib:fld:dat}
+%\item Removed field \bibfield{journal}\see{bib:fld:dat}
+%\item Added field alias \bibfield{journal}\see{bib:fld:als}
+%\item Added field \bibfield{shortjournal}\see{bib:fld:dat}
+%\item Added field \bibfield{shortseries}\see{bib:fld:dat}
+%\item Added field \bibfield{shorthandintro}\see{bib:fld:dat}
+%\item Added field \bibfield{xref}\see{bib:fld:spc}
+%\item Added field \bibfield{authortype}\see{bib:fld:dat}
+%\item Added field \bibfield{editortype}\see{bib:fld:dat}
+%\item Added field \bibfield{reprinttitle}\see{bib:fld:dat}
+%\item Improved handling of field \bibfield{type}\see{bib:fld:dat}
+%\item Improved handling of field \bibfield{series}\see{bib:fld:dat}
+%\item Updated documentation\see{bib:use:ser}
+%\item Renamed field \bibfield{id} to \bibfield{eid}\see{bib:fld:dat}
+%\item Added field \bibfield{pagination}\see{bib:fld:dat}
+%\item Added field \bibfield{bookpagination}\see{bib:fld:dat}
+%\item Added special field \bibfield{sortinit}\see{aut:bbx:fld}
+%\item Introduced concept of a multicite command\see{use:cit:mlt}
+%\item Added \cmd{cites}\see{use:cit:mlt}
+%\item Added \cmd{Cites}\see{use:cit:mlt}
+%\item Added \cmd{parencites}\see{use:cit:mlt}
+%\item Added \cmd{Parencites}\see{use:cit:mlt}
+%\item Added \cmd{footcites}\see{use:cit:mlt}
+%\item Added \cmd{supercites}\see{use:cit:mlt}
+%\item Added \cmd{Autocite}\see{use:cit:aut}
+%\item Added \cmd{autocites}\see{use:cit:aut}
+%\item Added \cmd{Autocites}\see{use:cit:aut}
+%\item Added \cmd{DeclareMultiCiteCommand}\see{aut:cbx:cbx}
+%\item Added counter \cnt{multicitecount}\see{aut:fmt:ilc}
+%\item Added counter \cnt{multicitetotal}\see{aut:fmt:ilc}
+%\item Renamed \cmd{citefulltitle} to \cmd{citetitle*}\see{use:cit:txt}
+%\item Added \cmd{cite*}\see{use:cit:cbx}
+%\item Added \cmd{citeurl}\see{use:cit:txt}
+%\item Added documentation of field \bibfield{nameaddon}\see{bib:fld:dat}
+%\item Added field \bibfield{entrysubtype}\see{bib:fld:spc}
+%\item Added field \bibfield{execute}\see{bib:fld:spc}
+%\item Added custom fields \bibfield{verb{[a--c]}}\see{bib:fld:ctm}
+%\item Added custom fields \bibfield{name{[a--c]}type}\see{bib:fld:ctm}
+%\item Consider \bibfield{sorttitle} field when falling back to \bibfield{title}\see{use:srt}
+%\item Removed package option \opt{labelctitle}\see{use:opt:pre:int}
+%\item Removed field \opt{labelctitle}\see{aut:bbx:fld}
+%\item Added package option \opt{singletitle}\see{use:opt:pre:int}
+%\item Added \cmd{ifsingletitle}\see{aut:aux:tst}
+%\item Added \cmd{ifuseauthor}\see{aut:aux:tst}
+%\item Added \cmd{ifuseeditor}\see{aut:aux:tst}
+%\item Added \cmd{ifopcit}\see{aut:aux:tst}
+%\item Added \cmd{ifloccit}\see{aut:aux:tst}
+%\item Added package option \opt{uniquename}\see{use:opt:pre:int}
+%\item Added special counter \cnt{uniquename}\see{aut:aux:tst}
+%\item Added package option \opt{natbib}\see{use:opt:ldt}
+%\item Added compatibility commands for the \sty{natbib} package\see{use:cit:nat}
+%\item Added package option \opt{defernums}\see{use:opt:pre:gen}
+%\item Improved support for numeric labels\see{use:cav:lab}
+%\item Added package option \opt{mincrossrefs}\see{use:opt:pre:gen}
+%\item Added package option \opt{bibencoding}\see{use:opt:pre:gen}
+%\item Expanded documentation\see{bib:cav:enc}
+%\item Updated documentation\see{bib:cav:ide}
+%\item Added package option \opt{citetracker}\see{use:opt:pre:int}
+%\item Added package option \opt{ibidtracker}\see{use:opt:pre:int}
+%\item Added package option \bibfield{opcittracker}\see{use:opt:pre:int}
+%\item Added package option \bibfield{loccittracker}\see{use:opt:pre:int}
+%\item Added \cmd{citetrackertrue} and \cmd{citetrackerfalse}\see{aut:aux:msc}
+%\item Modified package option \opt{pagetracker}\see{use:opt:pre:int}
+%\item Added \cmd{pagetrackertrue} and \cmd{pagetrackerfalse}\see{aut:aux:msc}
+%\item Text commands now excluded from tracking\see{use:cit:txt}
+%\item Updated documentation of \cmd{iffirstonpage}\see{aut:aux:tst}
+%\item Updated documentation of \cmd{ifsamepage}\see{aut:aux:tst}
+%\item Removed package option \opt{keywsort}\see{use:opt:pre:gen}
+%\item Added package option \opt{refsection}\see{use:opt:pre:gen}
+%\item Added package option \opt{refsegment}\see{use:opt:pre:gen}
+%\item Added package option \opt{citereset}\see{use:opt:pre:gen}
+%\item Added option \opt{section} to \cmd{bibbysegment}\see{use:bib:bib}
+%\item Added option \opt{section} to \cmd{bibbycategory}\see{use:bib:bib}
+%\item Added option \opt{section} to \cmd{printshorthands}\see{use:bib:biblist}
+%\item Extended documentation of \env{refsection} environment\see{use:bib:sec}
+%\item Added \cmd{newrefsection}\see{use:bib:sec}
+%\item Added \cmd{newrefsegment}\see{use:bib:seg}
+%\item Added heading definition \texttt{subbibliography}\see{use:bib:hdg}
+%\item Added heading definition \texttt{subbibintoc}\see{use:bib:hdg}
+%\item Added heading definition \texttt{subbibnumbered}\see{use:bib:hdg}
+%\item Make all citation commands scan ahead for punctuation\see{use:cit}
+%\item Updated documentation of \cmd{DeclareAutoPunctuation}\see{aut:pct:cfg}
+%\item Removed \cmd{usecitecmd}\see{aut:cbx:cbx}
+%\item Updated documentation of \opt{autocite} package option\see{use:opt:pre:gen}
+%\item Updated documentation of \opt{autopunct} package option\see{use:opt:pre:gen}
+%\item Added \cmd{citereset}\see{use:cit:msc}
+%\item Added \cmd{citereset*}\see{use:cit:msc}
+%\item Added \cmd{mancite}\see{use:cit:msc}
+%\item Added \cmd{citesetup}\see{use:fmt:fmt}
+%\item Added \cmd{compcitedelim}\see{use:fmt:fmt}
+%\item Added \cmd{labelnamepunct}\see{use:fmt:fmt}
+%\item Added \cmd{subtitlepunct}\see{use:fmt:fmt}
+%\item Added \cmd{finallistdelim}\see{use:fmt:fmt}
+%\item Added \cmd{andmoredelim}\see{use:fmt:fmt}
+%\item Added \cmd{labelalphaothers}\see{use:fmt:fmt}
+%\item Added \len{bibitemextrasep}\see{use:fmt:len}
+%\item Renamed \cmd{blxauxprefix} to \cmd{blxauxsuffix}\see{use:use:aux}
+%\item Added \cmd{DeclareBibliographyOption}\see{aut:bbx:bbx}
+%\item Added \cmd{DeclareEntryOption}\see{aut:bbx:bbx}
+%\item Renamed \cmd{InitializeBibliographyDrivers} to \cmd{InitializeBibliographyStyle}\see{aut:bbx:bbx}
+%\item Added \cmd{InitializeCitationStyle}\see{aut:cbx:cbx}
+%\item Added \cmd{OnManualCitation}\see{aut:cbx:cbx}
+%\item Extended documentation of \cmd{DeclareCiteCommand}\see{aut:cbx:cbx}
+%\item Modified \cmd{DeclareAutoCiteCommand}\see{aut:cbx:cbx}
+%\item Improved \cmd{printtext}\see{aut:bib:dat}
+%\item Improved \cmd{printfield}\see{aut:bib:dat}
+%\item Improved \cmd{printlist}\see{aut:bib:dat}
+%\item Improved \cmd{printnames}\see{aut:bib:dat}
+%\item Improved \cmd{indexfield}\see{aut:bib:dat}
+%\item Improved \cmd{indexlist}\see{aut:bib:dat}
+%\item Improved \cmd{indexnames}\see{aut:bib:dat}
+%\item Modified \cmd{DeclareFieldFormat}\see{aut:bib:fmt}
+%\item Modified \cmd{DeclareListFormat}\see{aut:bib:fmt}
+%\item Modified \cmd{DeclareNameFormat}\see{aut:bib:fmt}
+%\item Modified \cmd{DeclareFieldAlias}\see{aut:bib:fmt}
+%\item Modified \cmd{DeclareListAlias}\see{aut:bib:fmt}
+%\item Modified \cmd{DeclareNameAlias}\see{aut:bib:fmt}
+%\item Modified \cmd{DeclareIndexFieldFormat}\see{aut:bib:fmt}
+%\item Modified \cmd{DeclareIndexListFormat}\see{aut:bib:fmt}
+%\item Modified \cmd{DeclareIndexNameFormat}\see{aut:bib:fmt}
+%\item Modified \cmd{DeclareIndexFieldAlias}\see{aut:bib:fmt}
+%\item Modified \cmd{DeclareIndexListAlias}\see{aut:bib:fmt}
+%\item Modified \cmd{DeclareIndexNameAlias}\see{aut:bib:fmt}
+%\item Improved \cmd{iffirstonpage}\see{aut:aux:tst}
+%\item Improved \cmd{ifciteseen}\see{aut:aux:tst}
+%\item Improved \cmd{ifandothers}\see{aut:aux:tst}
+%\item Added \cmd{ifinteger}\see{aut:aux:tst}
+%\item Added \cmd{ifnumeral}\see{aut:aux:tst}
+%\item Added \cmd{ifnumerals}\see{aut:aux:tst}
+%\item Removed \cmd{ifpage}\see{aut:aux:tst}
+%\item Removed \cmd{ifpages}\see{aut:aux:tst}
+%\item Moved \cmd{ifblank} to \sty{etoolbox} package\see{aut:aux:tst}
+%\item Removed \cmd{xifblank}\see{aut:aux:tst}
+%\item Moved \cmd{docsvlist} to \sty{etoolbox} package\see{aut:aux:msc}
+%\item Updated documentation of \cmd{docsvfield}\see{aut:aux:msc}
+%\item Added \cmd{ifciteibid}\see{aut:aux:tst}
+%\item Added \cmd{iffootnote}\see{aut:aux:tst}
+%\item Added \cmd{iffieldxref}\see{aut:aux:tst}
+%\item Added \cmd{iflistxref}\see{aut:aux:tst}
+%\item Added \cmd{ifnamexref}\see{aut:aux:tst}
+%\item Added \cmd{ifmoreitems}\see{aut:aux:tst}
+%\item Added \cmd{ifbibstring}\see{aut:aux:tst}
+%\item Added \cmd{iffieldbibstring}\see{aut:aux:tst}
+%\item Added \cmd{mkpageprefix}\see{aut:aux:msc}
+%\item Added \cmd{NumCheckSetup}\see{aut:aux:msc}
+%\item Added \cmd{pno}\see{use:cit:msc}
+%\item Added \cmd{ppno}\see{use:cit:msc}
+%\item Added \cmd{nopp}\see{use:cit:msc}
+%\item Added \cmd{ppspace}\see{aut:aux:msc}
+%\item Added \cmd{psq}\see{use:cit:msc}
+%\item Added \cmd{psqq}\see{use:cit:msc}
+%\item Added \cmd{sqspace}\see{aut:aux:msc}
+%\item Expanded documentation\see{bib:use:pag}
+%\item Expanded documentation\see{use:cav:pag}
+%\item Added \cmd{RN}\see{use:cit:msc}
+%\item Added \cmd{Rn}\see{use:cit:msc}
+%\item Added \cmd{RNfont}\see{use:cit:msc}
+%\item Added \cmd{Rnfont}\see{use:cit:msc}
+%\item Added package option \opt{punctfont}\see{use:opt:pre:gen}
+%\item Added \cmd{setpunctfont}\see{aut:pct:new}
+%\item Added \cmd{resetpunctfont}\see{aut:pct:new}
+%\item Added \cmd{nopunct}\see{aut:pct:pct}
+%\item Added \cmd{bibxstring}\see{aut:str}
+%\item Added \cmd{mkbibemph}\see{aut:fmt:ich}
+%\item Added \cmd{mkbibquote}\see{aut:fmt:ich}
+%\item Added \cmd{mkbibfootnote}\see{aut:fmt:ich}
+%\item Added \cmd{mkbibsuperscript}\see{aut:fmt:ich}
+%\item Added \cmd{currentfield}\see{aut:fmt:ilc}
+%\item Added \cmd{currentlist}\see{aut:fmt:ilc}
+%\item Added \cmd{currentname}\see{aut:fmt:ilc}
+%\item Added \cmd{AtNextCite}\see{aut:fmt:hok}
+%\item Added \cmd{AtNextCitekey}\see{aut:fmt:hok}
+%\item Added \cmd{AtDataInput}\see{aut:fmt:hok}
+%\item Added several new localisation keys\see{aut:lng:key}
+%\item Added support for Norwegian (translations by Johannes Wilm)
+%\item Added support for Danish (translations by Johannes Wilm)
+%\item Expanded documentation\see{aut:cav:grp}
+%\item Expanded documentation\see{aut:cav:mif}
+%\item Numerous improvements under the hood
+%\item Fixed some bugs
+%
+%\end{release}
+%
+%\begin{release}{0.6}{2007-01-06}
+%
+%\item Added package option \kvopt{sorting}{none}\see{use:opt:pre:gen}
+%\item Renamed package option \kvopt{block}{penalty} to \kvopt{block}{ragged}\see{use:opt:pre:gen}
+%\item Changed data type of \bibfield{origlanguage} back to field\see{bib:fld:dat}
+%\item Support \bibfield{origlanguage} field if \bibfield{translator} is present\see{bib:typ:blx}
+%\item Renamed field \bibfield{articleid} to \bibfield{id}\see{bib:fld:dat}
+%\item Support \bibfield{id} field in \bibfield{article} entries\see{bib:typ:blx}
+%\item Support \bibfield{series} field in \bibfield{article} entries\see{bib:typ:blx}
+%\item Support \bibfield{doi} field\see{bib:typ:blx}
+%\item Updated documentation of all entry types\see{bib:typ:blx}
+%\item Updated documentation of field \bibfield{series}\see{bib:fld:dat}
+%\item Added field \bibfield{redactor}\see{bib:fld:dat}
+%\item Added field \bibfield{shortauthor}\see{bib:fld:dat}
+%\item Added field \bibfield{shorteditor}\see{bib:fld:dat}
+%\item Improved support for corporate authors and editors\see{bib:use:inc}
+%\item Updated documentation of field \bibfield{labelname}\see{aut:bbx:fld}
+%\item Added field alias \bibfield{key}\see{bib:fld:als}
+%\item Added package option \opt{autocite}\see{use:opt:pre:gen}
+%\item Added package option \opt{autopunct}\see{use:opt:pre:gen}
+%\item Added \cmd{autocite}\see{use:cit:aut}
+%\item Added \cmd{DeclareAutoCiteCommand}\see{aut:cbx:cbx}
+%\item Added \cmd{DeclareAutoPunctuation}\see{aut:pct:cfg}
+%\item Added option \opt{filter} to \cmd{printbibliography}\see{use:bib:bib}
+%\item Added \cmd{defbibfilter}\see{use:bib:flt}
+%\item Added package option \opt{maxitems}\see{use:opt:pre:gen}
+%\item Added package option \opt{minitems}\see{use:opt:pre:gen}
+%\item Added option \opt{maxitems} to \cmd{printbibliography}\see{use:bib:bib}
+%\item Added option \opt{minitems} to \cmd{printbibliography}\see{use:bib:bib}
+%\item Added option \opt{maxitems} to \cmd{bibbysection}\see{use:bib:bib}
+%\item Added option \opt{minitems} to \cmd{bibbysection}\see{use:bib:bib}
+%\item Added option \opt{maxitems} to \cmd{bibbysegment}\see{use:bib:bib}
+%\item Added option \opt{minitems} to \cmd{bibbysegment}\see{use:bib:bib}
+%\item Added option \opt{maxitems} to \cmd{bibbycategory}\see{use:bib:bib}
+%\item Added option \opt{minitems} to \cmd{bibbycategory}\see{use:bib:bib}
+%\item Added option \opt{maxitems} to \cmd{printshorthands}\see{use:bib:biblist}
+%\item Added option \opt{minitems} to \cmd{printshorthands}\see{use:bib:biblist}
+%\item Added counter \cnt{maxitems}\see{aut:fmt:ilc}
+%\item Added counter \cnt{minitems}\see{aut:fmt:ilc}
+%\item Added adapted headings for \sty{scrartcl}, \sty{scrbook}, \sty{scrreprt}\see{int:pre:cmp}
+%\item Added adapted headings for \sty{memoir}\see{int:pre:cmp}
+%\item Added \cmd{Cite}\see{use:cit:std}
+%\item Added \cmd{Parencite}\see{use:cit:std}
+%\item Added \cmd{Textcite}\see{use:cit:cbx}
+%\item Added \cmd{parencite*}\see{use:cit:cbx}
+%\item Added \cmd{supercite}\see{use:cit:cbx}
+%\item Added \cmd{Citeauthor}\see{use:cit:txt}
+%\item Added \cmd{nameyeardelim}\see{use:fmt:fmt}
+%\item Added \cmd{multilistdelim}\see{use:fmt:fmt}
+%\item Completed documenation\see{use:fmt:fmt}
+%\item Completed documenation\see{aut:fmt:fmt}
+%\item Added \cmd{usecitecmd}\see{aut:cbx:cbx}
+%\item Added \cmd{hyphenate}\see{use:fmt:aux}
+%\item Added \cmd{hyphen}\see{use:fmt:aux}
+%\item Added \cmd{nbhyphen}\see{use:fmt:aux}
+%\item Improved \cmd{ifsamepage}\see{aut:aux:tst}
+%\item Removed \cmd{ifnameequalstr}\see{aut:aux:tst}
+%\item Removed \cmd{iflistequalstr}\see{aut:aux:tst}
+%\item Added \cmd{ifcapital}\see{aut:aux:tst}
+%\item Added documentation of \cmd{MakeCapital}\see{aut:aux:msc}
+%\item Added starred variant to \cmd{setunit}\see{aut:pct:new}
+%\item Improved \cmd{ifterm}\see{aut:pct:chk}
+%\item Straightened out documentation of \cmd{thelist}\see{aut:aux:dat}
+%\item Straightened out documentation of \cmd{thename}\see{aut:aux:dat}
+%\item Added \cmd{docsvfield}\see{aut:aux:msc}
+%\item Added \cmd{docsvlist}\see{aut:aux:msc}
+%\item Removed \cmd{CopyFieldFormat}\see{aut:bib:fmt}
+%\item Removed \cmd{CopyIndexFieldFormat}\see{aut:bib:fmt}
+%\item Removed \cmd{CopyListFormat}\see{aut:bib:fmt}
+%\item Removed \cmd{CopyIndexListFormat}\see{aut:bib:fmt}
+%\item Removed \cmd{CopyNameFormat}\see{aut:bib:fmt}
+%\item Removed \cmd{CopyIndexNameFormat}\see{aut:bib:fmt}
+%\item Added \cmd{savefieldformat}\see{aut:aux:msc}
+%\item Added \cmd{restorefieldformat}\see{aut:aux:msc}
+%\item Added \cmd{savelistformat}\see{aut:aux:msc}
+%\item Added \cmd{restorelistformat}\see{aut:aux:msc}
+%\item Added \cmd{savenameformat}\see{aut:aux:msc}
+%\item Added \cmd{restorenameformat}\see{aut:aux:msc}
+%\item Added \cmd{savebibmacro}\see{aut:aux:msc}
+%\item Added \cmd{restorebibmacro}\see{aut:aux:msc}
+%\item Added \cmd{savecommand}\see{aut:aux:msc}
+%\item Added \cmd{restorecommand}\see{aut:aux:msc}
+%\item Added documentation of \texttt{shorthands} driver\see{aut:bbx:bbx}
+%\item Rearranged, renamed, and extended localisation keys\see{aut:lng:key}
+%\item Renamed counter \cnt{citecount} to \cnt{instcount}\see{aut:fmt:ilc}
+%\item Added new counter \cnt{citecount}\see{aut:fmt:ilc}
+%\item Added counter \cnt{citetotal}\see{aut:fmt:ilc}
+%\item Rearranged and expanded documentation\see{bib:use}
+%\item Expanded documentation\see{bib:cav}
+%\item Expanded documentation\see{use:cav:scr}
+%\item Expanded documentation\see{use:cav:mem}
+%\item Completed support for Spanish\see{use:loc:esp}
+%\item Added support for Italian (translations by Enrico Gregorio)
+%\item Added language alias \opt{australian}\see{bib:fld:spc}
+%\item Added language alias \opt{newzealand}\see{bib:fld:spc}
+%\item Various minor improvements throughout
+%
+%\end{release}
+%
+%\begin{release}{0.5}{2006-11-12}
+%
+%\item Added \cmd{usedriver}\see{aut:aux:msc}
+%\item Added package option \opt{pagetracker}\see{use:opt:pre:gen}
+%\item Added \cmd{iffirstonpage}\see{aut:aux:tst}
+%\item Added \cmd{ifsamepage}\see{aut:aux:tst}
+%\item Corrected documentation of \cmd{ifciteseen}\see{aut:aux:tst}
+%\item Added package option \opt{terseinits}\see{use:opt:pre:gen}
+%\item Modified default value of package option \opt{maxnames}\see{use:opt:pre:gen}
+%\item Renamed package option \opt{index} to \opt{indexing}\see{use:opt:pre:gen}
+%\item Extended package option \opt{indexing}\see{use:opt:pre:gen}
+%\item Removed package option \opt{citeindex}\see{use:opt:pre:gen}
+%\item Removed package option \opt{bibindex}\see{use:opt:pre:gen}
+%\item Added package option \opt{labelalpha}\see{use:opt:pre:int}
+%\item Updated documentation of field \bibfield{labelalpha}\see{aut:bbx:fld}
+%\item Added package option \opt{labelctitle}\see{use:opt:pre:int}
+%\item Updated documentation of field \bibfield{labelctitle}\see{aut:bbx:fld}
+%\item Added package option \opt{labelnumber}\see{use:opt:pre:int}
+%\item Updated documentation of field \bibfield{labelnumber}\see{aut:bbx:fld}
+%\item Added package option \opt{labelyear}\see{use:opt:pre:int}
+%\item Updated documentation of field \bibfield{labelyear}\see{aut:bbx:fld}
+%\item Added citation style \texttt{authortitle-verb}\see{use:xbx:cbx}
+%\item Added citation style \texttt{authortitle-cverb}\see{use:xbx:cbx}
+%\item Renamed citation style \texttt{traditional} to \texttt{authortitle-trad}\see{use:xbx:cbx}
+%\item Improved citation style \texttt{authortitle-trad}\see{use:xbx:cbx}
+%\item Added citation style \texttt{authortitle-strad}\see{use:xbx:cbx}
+%\item Improved bibliography style \texttt{authoryear}\see{use:xbx:bbx}
+%\item Improved bibliography style \texttt{authortitle}\see{use:xbx:bbx}
+%\item Added option \opt{maxnames} to \cmd{printbibliography}\see{use:bib:bib}
+%\item Added option \opt{minnames} to \cmd{printbibliography}\see{use:bib:bib}
+%\item Added option \opt{maxnames} to \cmd{bibbysection}\see{use:bib:bib}
+%\item Added option \opt{minnames} to \cmd{bibbysection}\see{use:bib:bib}
+%\item Added option \opt{maxnames} to \cmd{bibbysegment}\see{use:bib:bib}
+%\item Added option \opt{minnames} to \cmd{bibbysegment}\see{use:bib:bib}
+%\item Added option \opt{maxnames} to \cmd{bibbycategory}\see{use:bib:bib}
+%\item Added option \opt{minnames} to \cmd{bibbycategory}\see{use:bib:bib}
+%\item Added option \opt{maxnames} to \cmd{printshorthands}\see{use:bib:biblist}
+%\item Added option \opt{minnames} to \cmd{printshorthands}\see{use:bib:biblist}
+%\item Renamed \env{bibsection} to \env{refsection} (conflict with \sty{memoir})\see{use:bib:sec}
+%\item Renamed \env{bibsegment} to \env{refsegment} (consistency)\see{use:bib:seg}
+%\item Extended \env{refsection} environment\see{use:bib:sec}
+%\item Renamed \env{bibsection} counter to \env{refsection}\see{aut:fmt:ilc}
+%\item Renamed \env{bibsegment} counter to \env{refsegment}\see{aut:fmt:ilc}
+%\item Updated documentation\see{use:use:mlt}
+%\item Added counter \cnt{citecount}\see{aut:fmt:ilc}
+%\item Modified default definition of \cmd{blxauxprefix}\see{use:use:aux}
+%\item Added \cmd{CopyFieldFormat}\see{aut:bib:fmt}
+%\item Added \cmd{CopyIndexFieldFormat}\see{aut:bib:fmt}
+%\item Added \cmd{CopyListFormat}\see{aut:bib:fmt}
+%\item Added \cmd{CopyIndexListFormat}\see{aut:bib:fmt}
+%\item Added \cmd{CopyNameFormat}\see{aut:bib:fmt}
+%\item Added \cmd{CopyIndexNameFormat}\see{aut:bib:fmt}
+%\item Added \cmd{clearfield}\see{aut:aux:dat}
+%\item Added \cmd{clearlist}\see{aut:aux:dat}
+%\item Added \cmd{clearname}\see{aut:aux:dat}
+%\item Added \cmd{restorefield}\see{aut:aux:dat}
+%\item Added \cmd{restorelist}\see{aut:aux:dat}
+%\item Added \cmd{restorename}\see{aut:aux:dat}
+%\item Renamed \cmd{bibhyperlink} to \cmd{bibhyperref}\see{aut:aux:msc}
+%\item Added new command \cmd{bibhyperlink}\see{aut:aux:msc}
+%\item Added \cmd{bibhypertarget}\see{aut:aux:msc}
+%\item Renamed formatting directive \texttt{bibhyperlink} to \texttt{bibhyperref}\see{aut:fmt:ich}
+%\item Added new formatting directive \texttt{bibhyperlink}\see{aut:fmt:ich}
+%\item Added formatting directive \texttt{bibhypertarget}\see{aut:fmt:ich}
+%\item Added \cmd{addlpthinspace}\see{aut:pct:spc}
+%\item Added \cmd{addhpthinspace}\see{aut:pct:spc}
+%\item Added field \bibfield{annotator}\see{bib:fld:dat}
+%\item Added field \bibfield{commentator}\see{bib:fld:dat}
+%\item Added field \bibfield{introduction}\see{bib:fld:dat}
+%\item Added field \bibfield{foreword}\see{bib:fld:dat}
+%\item Added field \bibfield{afterword}\see{bib:fld:dat}
+%\item Updated documentation of field \bibfield{translator}\see{bib:fld:dat}
+%\item Added field \bibfield{articleid}\see{bib:fld:dat}
+%\item Added field \bibfield{doi}\see{bib:fld:dat}
+%\item Added field \bibfield{file}\see{bib:fld:dat}
+%\item Added field alias \bibfield{pdf}\see{bib:fld:als}
+%\item Added field \bibfield{indextitle}\see{bib:fld:dat}
+%\item Added field \bibfield{indexsorttitle}\see{bib:fld:spc}
+%\item Changed data type of \bibfield{language}\see{bib:fld:dat}
+%\item Changed data type of \bibfield{origlanguage}\see{bib:fld:dat}
+%\item Updated documentation of entry type \bibfield{book}\see{bib:typ:blx}
+%\item Updated documentation of entry type \bibfield{collection}\see{bib:typ:blx}
+%\item Updated documentation of entry type \bibfield{inbook}\see{bib:typ:blx}
+%\item Updated documentation of entry type \bibfield{incollection}\see{bib:typ:blx}
+%\item Extended entry type \bibfield{misc}\see{bib:typ:blx}
+%\item Added \cmd{UndefineBibliographyExtras}\see{use:lng}
+%\item Added \cmd{UndeclareBibliographyExtras}\see{aut:lng:cmd}
+%\item Added \cmd{finalandcomma}\see{use:fmt:lng}
+%\item Added localisation key \texttt{citedas}\see{aut:lng:key}
+%\item Renamed localisation key \texttt{editby} to \texttt{edited}\see{aut:lng:key}
+%\item Renamed localisation key \texttt{transby} to \texttt{translated}\see{aut:lng:key}
+%\item Added localisation key \texttt{annotated}\see{aut:lng:key}
+%\item Added localisation key \texttt{commented}\see{aut:lng:key}
+%\item Added localisation key \texttt{introduced}\see{aut:lng:key}
+%\item Added localisation key \texttt{foreworded}\see{aut:lng:key}
+%\item Added localisation key \texttt{afterworded}\see{aut:lng:key}
+%\item Added localisation key \texttt{commentary}\see{aut:lng:key}
+%\item Added localisation key \texttt{annotations}\see{aut:lng:key}
+%\item Added localisation key \texttt{introduction}\see{aut:lng:key}
+%\item Added localisation key \texttt{foreword}\see{aut:lng:key}
+%\item Added localisation key \texttt{afterword}\see{aut:lng:key}
+%\item Added localisation key \texttt{doneby}\see{aut:lng:key}
+%\item Added localisation key \texttt{itemby}\see{aut:lng:key}
+%\item Added localisation key \texttt{spanish}\see{aut:lng:key}
+%\item Added localisation key \texttt{latin}\see{aut:lng:key}
+%\item Added localisation key \texttt{greek}\see{aut:lng:key}
+%\item Modified localisation key \texttt{fromenglish}\see{aut:lng:key}
+%\item Modified localisation key \texttt{fromfrench}\see{aut:lng:key}
+%\item Modified localisation key \texttt{fromgerman}\see{aut:lng:key}
+%\item Added localisation key \texttt{fromspanish}\see{aut:lng:key}
+%\item Added localisation key \texttt{fromlatin}\see{aut:lng:key}
+%\item Added localisation key \texttt{fromgreek}\see{aut:lng:key}
+%\item Expanded documentation\see{bib:use}
+%\item Updated documentation\see{use:xbx:cbx}
+%\item Updated documentation\see{use:xbx:bbx}
+%\item Updated documentation\see{use:fmt:fmt}
+%\item Updated documentation\see{aut:fmt:fmt}
+%\item Updated and completed documentation\see{use:fmt:lng}
+%\item Updated and completed documentation\see{aut:fmt:lng}
+%\item Added support for Spanish (translations by Ignacio Fernández Galván)
+%\item Various memory-related optimizations in \path{biblatex.bst}
+%
+%\end{release}
+%
+%\begin{release}{0.4}{2006-10-01}
+%
+%\item Added package option \opt{sortlos}\see{use:opt:pre:gen}
+%\item Added package option \opt{bibtex8}\see{use:opt:pre:gen}
+%\item Made \bibfield{pageref} field local to \env{refsection} environment\see{aut:bbx:fld}
+%\item Renamed field \bibfield{labeltitle} to \bibfield{labelctitle}\see{aut:bbx:fld}
+%\item Added new field \bibfield{labeltitle}\see{aut:bbx:fld}
+%\item Added new field \bibfield{sortkey}\see{bib:fld:spc}
+%\item Updated documentation\see{use:srt}
+%\item Removed \cmd{iffieldtrue}\see{aut:aux:tst}
+%\item Renamed counter \cnt{namepenalty} to \cnt{highnamepenalty}\see{use:fmt:len}
+%\item Added counter \cnt{lownamepenalty}\see{use:fmt:len}
+%\item Added documentation of \cmd{noligature}\see{use:fmt:aux}
+%\item Added \cmd{addlowpenspace}\see{aut:pct:spc}
+%\item Added \cmd{addhighpenspace}\see{aut:pct:spc}
+%\item Added \cmd{addabbrvspace}\see{aut:pct:spc}
+%\item Added \cmd{adddotspace}\see{aut:pct:spc}
+%\item Added \cmd{addslash}\see{aut:pct:spc}
+%\item Expanded documentation\see{use:cav}
+%\item Various minor improvements throughout
+%\item Fixed some bugs
+%
+%\end{release}
+%
+%\begin{release}{0.3}{2006-09-24}
+%
+%\item Renamed citation style \texttt{authortitle} to \texttt{authortitle-terse}\see{use:xbx:cbx}
+%\item Renamed citation style \texttt{authortitle-comp} to \texttt{authortitle-cterse}\see{use:xbx:cbx}
+%\item Renamed citation style \texttt{authortitle-verb} to \texttt{authortitle}\see{use:xbx:cbx}
+%\item Added new citation style \texttt{authortitle-comp}\see{use:xbx:cbx}
+%\item Citation style \texttt{traditional} now supports <loc.~cit.>\see{use:xbx:cbx}
+%\item Added package option \opt{date}\see{use:opt:pre:gen}
+%\item Added package option \opt{urldate}\see{use:opt:pre:gen}
+%\item Introduced new data type: literal lists\see{bib:fld}
+%\item Renamed \cmd{citename} to \cmd{citeauthor}\see{use:cit:txt}
+%\item Renamed \cmd{citelist} to \cmd{citename}\see{use:cit:low}
+%\item Added new \cmd{citelist} command\see{use:cit:low}
+%\item Renamed \cmd{printlist} to \cmd{printnames}\see{aut:bib:dat}
+%\item Added new \cmd{printlist} command\see{aut:bib:dat}
+%\item Renamed \cmd{indexlist} to \cmd{indexnames}\see{aut:bib:dat}
+%\item Added new \cmd{indexlist} command\see{aut:bib:dat}
+%\item Renamed \cmd{DeclareListFormat} to \cmd{DeclareNameFormat}\see{aut:bib:fmt}
+%\item Added new \cmd{DeclareListFormat} command\see{aut:bib:fmt}
+%\item Renamed \cmd{DeclareListAlias} to \cmd{DeclareNameAlias}\see{aut:bib:fmt}
+%\item Added new \cmd{DeclareListAlias} command\see{aut:bib:fmt}
+%\item Renamed \cmd{DeclareIndexListFormat} to \cmd{DeclareIndexNameFormat}\see{aut:bib:fmt}
+%\item Added new \cmd{DeclareIndexListFormat} command\see{aut:bib:fmt}
+%\item Renamed \cmd{DeclareIndexListAlias} to \cmd{DeclareIndexNameAlias}\see{aut:bib:fmt}
+%\item Added new \cmd{DeclareIndexListAlias} command\see{aut:bib:fmt}
+%\item Renamed \cmd{biblist} to \cmd{thename}\see{aut:aux:dat}
+%\item Added new \cmd{thelist} command\see{aut:aux:dat}
+%\item Renamed \cmd{bibfield} to \cmd{thefield}\see{aut:aux:dat}
+%\item Renamed \cmd{savelist} to \cmd{savename}\see{aut:aux:dat}
+%\item Added new \cmd{savelist} command\see{aut:aux:dat}
+%\item Renamed \cmd{savelistcs} to \cmd{savenamecs}\see{aut:aux:dat}
+%\item Added new \cmd{savelistcs} command\see{aut:aux:dat}
+%\item Renamed \cmd{iflistundef} to \cmd{ifnameundef}\see{aut:aux:tst}
+%\item Added new \cmd{iflistundef} test\see{aut:aux:tst}
+%\item Renamed \cmd{iflistsequal} to \cmd{ifnamesequal}\see{aut:aux:tst}
+%\item Added new \cmd{iflistsequal} test\see{aut:aux:tst}
+%\item Renamed \cmd{iflistequals} to \cmd{ifnameequals}\see{aut:aux:tst}
+%\item Added new \cmd{iflistequals} test\see{aut:aux:tst}
+%\item Renamed \cmd{iflistequalcs} to \cmd{ifnameequalcs}\see{aut:aux:tst}
+%\item Added new \cmd{iflistequalcs} test\see{aut:aux:tst}
+%\item Renamed \cmd{iflistequalstr} to \cmd{ifnameequalstr}\see{aut:aux:tst}
+%\item Added new \cmd{iflistequalstr} test\see{aut:aux:tst}
+%\item Renamed \cmd{ifcurrentlist} to \cmd{ifcurrentname}\see{aut:aux:tst}
+%\item Added new \cmd{ifcurrentlist} test\see{aut:aux:tst}
+%\item Entry type alias \bibtype{conference} now resolved by \bibtex\see{bib:typ:als}
+%\item Entry type alias \bibtype{mastersthesis} now resolved by \bibtex\see{bib:typ:als}
+%\item Entry type alias \bibtype{phdthesis} now resolved by \bibtex\see{bib:typ:als}
+%\item Entry type alias \bibtype{techreport} now resolved by \bibtex\see{bib:typ:als}
+%\item Entry type alias \bibtype{www} now resolved by \bibtex\see{bib:typ:als}
+%\item Added new custom fields \bibfield{lista} through \bibfield{listf}\see{bib:fld:ctm}
+%\item Changed data type of \bibfield{location}\see{bib:fld:dat}
+%\item Changed data type of \bibfield{origlocation}\see{bib:fld:dat}
+%\item Changed data type of \bibfield{publisher}\see{bib:fld:dat}
+%\item Changed data type of \bibfield{institution}\see{bib:fld:dat}
+%\item Changed data type of \bibfield{organization}\see{bib:fld:dat}
+%\item Modified values of \bibfield{gender} field for \sty{jurabib} compatibility\see{bib:fld:spc}
+%\item Modified and extended \texttt{idem\dots} keys for \sty{jurabib} compatibility\see{aut:lng:key}
+%\item Improved \cmd{addtocategory}\see{use:bib:cat}
+%\item Removed formatting command \cmd{mkshorthand}\see{use:fmt:fmt}
+%\item Added field formatting directive \texttt{shorthandwidth}\see{aut:fmt:ich}
+%\item Added documentation of \cmd{shorthandwidth}\see{aut:fmt:ilc}
+%\item Removed formatting command \cmd{mklabelnumber}\see{use:fmt:fmt}
+%\item Added field formatting directive \texttt{labelnumberwidth}\see{aut:fmt:ich}
+%\item Added documentation of \cmd{labelnumberwidth}\see{aut:fmt:ilc}
+%\item Removed formatting command \cmd{mklabelalpha}\see{use:fmt:fmt}
+%\item Added field formatting directive \texttt{labelalphawidth}\see{aut:fmt:ich}
+%\item Added documentation of \cmd{labelalphawidth}\see{aut:fmt:ilc}
+%\item Renamed \cmd{bibitem} to \cmd{thebibitem}\see{aut:bbx:env}
+%\item Renamed \cmd{lositem} to \cmd{thelositem}\see{aut:bbx:env}
+%\item Modified \cmd{AtBeginBibliography}\see{aut:fmt:hok}
+%\item Added \cmd{AtBeginShorthands}\see{aut:fmt:hok}
+%\item Added \cmd{AtEveryLositem}\see{aut:fmt:hok}
+%\item Extended \sty{showkeys} compatibility to list of shorthands\see{int:pre:cmp}
+%\item Added compatibility code for the \sty{hyperref} package\see{int:pre:cmp}
+%\item Added package option \opt{hyperref}\see{use:opt:pre:gen}
+%\item Added package option \opt{backref}\see{use:opt:pre:gen}
+%\item Added field \bibfield{pageref}\see{aut:bbx:fld}
+%\item Added \cmd{ifhyperref}\see{aut:aux:msc}
+%\item Added \cmd{bibhyperlink}\see{aut:aux:msc}
+%\item Added field formatting directive \texttt{bibhyperlink}\see{aut:fmt:ich}
+%\item Renamed \cmd{ifandothers} to \cmd{ifmorenames}\see{aut:aux:tst}
+%\item Added new \cmd{ifandothers} test\see{aut:aux:tst}
+%\item Removed field \bibfield{moreauthor}\see{aut:bbx:fld}
+%\item Removed field \bibfield{morebookauthor}\see{aut:bbx:fld}
+%\item Removed field \bibfield{moreeditor}\see{aut:bbx:fld}
+%\item Removed field \bibfield{morelabelname}\see{aut:bbx:fld}
+%\item Removed field \bibfield{moretranslator}\see{aut:bbx:fld}
+%\item Removed field \bibfield{morenamea}\see{aut:bbx:fld}
+%\item Removed field \bibfield{morenameb}\see{aut:bbx:fld}
+%\item Removed field \bibfield{morenamec}\see{aut:bbx:fld}
+%\item Updated documentation\see{aut:int}
+%\item Updated documentation\see{aut:bbx:bbx}
+%\item Updated documentation\see{aut:bbx:env}
+%\item Updated documentation\see{aut:bbx:drv}
+%\item Expanded documentation\see{aut:fmt}
+%\item Modified internal \bibtex interface
+%\item Fixed some typos in the manual
+%\item Fixed some bugs
+%
+%\end{release}
+%
+%\begin{release}{0.2}{2006-09-06}
+%
+%\item Added bibliography categories\see{use:bib:cat}
+%\item Added \cmd{DeclareBibliographyCategory}\see{use:bib:cat}
+%\item Added \cmd{addtocategory}\see{use:bib:cat}
+%\item Added \texttt{category} and \texttt{notcategory} filters\see{use:bib:bib}
+%\item Added \cmd{bibbycategory}\see{use:bib:bib}
+%\item Added usage examples for bibliography categories\see{use:use:div}
+%\item Added documentation of configuration file\see{use:cfg:cfg}
+%\item Added documentation of \cmd{ExecuteBibliographyOptions}\see{use:cfg:opt}
+%\item Added documentation of \cmd{AtBeginBibliography}\see{aut:fmt:hok}
+%\item Added \cmd{AtEveryBibitem}\see{aut:fmt:hok}
+%\item Added \cmd{AtEveryCite}\see{aut:fmt:hok}
+%\item Added \cmd{AtEveryCitekey}\see{aut:fmt:hok}
+%\item Added optional argument to \cmd{printtext}\see{aut:bib:dat}
+%\item Added \cmd{ifpage}\see{aut:aux:tst}
+%\item Added \cmd{ifpages}\see{aut:aux:tst}
+%\item Added field \bibfield{titleaddon}\see{bib:fld:dat}
+%\item Added field \bibfield{booktitleaddon}\see{bib:fld:dat}
+%\item Added field \bibfield{maintitleaddon}\see{bib:fld:dat}
+%\item Added field \bibfield{library}\see{bib:fld:dat}
+%\item Added field \bibfield{part}\see{bib:fld:dat}
+%\item Added field \bibfield{origlocation}\see{bib:fld:dat}
+%\item Added field \bibfield{origtitle}\see{bib:fld:dat}
+%\item Added field \bibfield{origyear}\see{bib:fld:dat}
+%\item Added field \bibfield{origlanguage}\see{bib:fld:dat}
+%\item Modified profile of field \bibfield{language}\see{bib:fld:dat}
+%\item Extended entry type \bibtype{book}\see{bib:typ:blx}
+%\item Extended entry type \bibtype{inbook}\see{bib:typ:blx}
+%\item Extended entry type \bibtype{collection}\see{bib:typ:blx}
+%\item Extended entry type \bibtype{incollection}\see{bib:typ:blx}
+%\item Extended entry type \bibtype{proceedings}\see{bib:typ:blx}
+%\item Extended entry type \bibtype{inproceedings}\see{bib:typ:blx}
+%\item Added entry type alias \bibtype{www}\see{bib:typ:als}
+%\item Added compatibility code for the \sty{showkeys} package\see{int:pre:cmp}
+%\item Support printable characters in \bibfield{keyword} and \texttt{notkeyword} filters\see{use:bib:bib}
+%\item Support printable characters in \bibfield{keywords} field\see{bib:fld:spc}
+%\item Ignore spaces after commas in \bibfield{keywords} field\see{bib:fld:spc}
+%\item Internal rearrangement of all bibliography styles
+%\item Fixed various bugs
+%
+%\end{release}
+%
+%\begin{release}{0.1}{2006-09-02}
+%
+%\item Initial public release
+%
+%\end{release}
+
+\end{changelog}
+
+\end{document}
+%%% Local Variables:
+%%% coding: utf-8
+%%% eval: (auto-fill-mode -1)
+%%% eval: (visual-line-mode)
+%%% End:
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/01-introduction-biber-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/01-introduction-biber-ms.pdf
new file mode 100644
index 0000000000..36fd473bae
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/01-introduction-biber-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/01-introduction-bibtex-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/01-introduction-bibtex-ms.pdf
new file mode 100644
index 0000000000..ebaf66e8c5
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/01-introduction-bibtex-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/01-introduction-ms.tex b/macros/latex/contrib/biblatex-ms/doc/examples/01-introduction-ms.tex
new file mode 100644
index 0000000000..6a79b52d89
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/01-introduction-ms.tex
@@ -0,0 +1,170 @@
+%
+% This file briefly presents the main citation commands. It also
+% illustrates the typical structure of a document based on biblatex.
+%
+\documentclass[a4paper]{article}
+\usepackage[T1]{fontenc}
+\usepackage[utf8]{inputenc}
+%
+% We load the babel package and specify the main language of the
+% document. If babel is detected, biblatex will automatically adjust
+% to the default language of the document.
+\usepackage[american]{babel}
+%
+% We load the csquotes package, which is required for
+% language-specific quotation marks. See the csquotes manual for
+% further information about this package.
+\usepackage{csquotes}
+%
+% We are using the 'authoryear' style in this example.
+% The default is the 'numerical' style.
+\usepackage[style=authoryear,backend=biber]{biblatex-ms}
+%
+% We use the database biblatex-examples.bib.
+\addbibresource{biblatex-examples.bib}
+%
+% Some generic settings.
+\newcommand{\cmd}[1]{\texttt{\textbackslash #1}}
+\setlength{\parindent}{0pt}
+\begin{document}
+
+\section*{Standard citation commands}
+
+\subsection*{The \cmd{cite} command}
+
+% The \cite command prints a bare citation without parentheses.
+
+\cite{companion}
+
+\cite[59]{companion}
+
+\cite[see][]{companion}
+
+\cite[see][59--63]{companion}
+
+\subsection*{The \cmd{parencite} command}
+
+% The \parencite command, which is intended for in-text citations,
+% encloses the citation in parentheses. Note that the 'numeric' and
+% 'alphabetic' styles use square brackets instead.
+
+This is just filler text \parencite{companion}.
+
+This is just filler text \parencite[59]{companion}.
+
+This is just filler text \parencite[see][]{companion}.
+
+This is just filler text \parencite[see][59--63]{companion}.
+
+\subsection*{The \cmd{footcite} command}
+
+% The \footcite command is similar to \parencite, except that the
+% citation is given in a footnote.
+
+This is just filler text.\footcite{companion}
+
+This is just filler text.\footcite[59]{companion}
+
+This is just filler text.\footcite[See][]{companion}
+
+This is just filler text.\footcite[See][59--63]{companion}
+
+\subsection*{The \cmd{textcite} command}
+
+% The \textcite command is intended for citations integrated in the
+% flow of text, replacing the subject of the sentence.
+
+\textcite{companion} show that this is just filler text.
+
+\textcite[59]{companion} show that this is just filler text.
+
+% With \textcite, the first optional argument is of limited use
+% only, since you could simply place the prenote in front of the
+% citation. It is still supported for the sake of consistency.
+
+\textcite[see][]{companion} show that this is just filler text.
+
+\textcite[see][59--63]{companion} show that this is just filler text.
+
+\section*{Style-independent commands}
+
+\subsection*{The \cmd{autocite} command}
+
+% The point of the \autocite command is that it automatically adapts
+% to the predominant citation format (inline or footnote) normally
+% used with the selected citation style. It should be used at the
+% end of the sentence and usually works like \parencite or
+% \footcite, depending on the citation style and the setting of the
+% 'autocite' package option. With the author-year style used in this
+% example, it works like \parencite:
+
+This is just filler text \autocite{companion}.
+
+\section*{Text commands}
+
+% There are a few predefined commands for bibliographic data which
+% is frequently used in the flow of text. Note that biblatex also
+% grants access to all lists and fields at a lower level, see below.
+
+\citeauthor{companion} show that this is just filler text.
+
+% Note that \citetitle will use the 'shorttitle' field, if
+% available.
+
+See the \citetitle{companion} for more filler text.
+
+% \citetitle*, on the other hand, always prints the 'title'
+% field.
+
+See also: \citetitle*{companion}. It has more filler text.
+
+\citetitle*{companion} by \citeauthor{companion} was
+published in \citeyear{companion}.
+
+\section*{Special commands}
+
+% The \nocite command adds an entry to the bibliography without
+% printing any citation. If the argument is an asterisk (i.e.,
+% '\nocite{*}'), all entries found in the bib file are added to the
+% bibliography.
+
+No citation here.\nocite{knuth:ct}
+
+% The \fullcite command prints a verbose citation similar to the
+% full bibliography entry.
+
+\fullcite{companion}
+
+% \footfullcite is similar to \fullcite, except that the citation is
+% put in a footnote.
+
+This is just filler text.\footfullcite{companion}
+
+\section*{Low-level commands}
+
+% The commands in this section grant low-level access to all
+% bibliographic data. See the biblatex manual for details about the
+% different data types (name lists, literal lists, fields).
+
+% The \citename command prints a name list. For example, the
+% \citeauthor command shown above is similar to the following
+% low-level command:
+
+\citename{companion}{author}
+
+% The \citelist command is similar to \citename but prints literal
+% lists.
+
+\citelist{companion}{publisher}
+
+% The \citefield command prints fields. For example, the
+% \citetitle* command shown above is similar to the following
+% low-level command (except for the formatting):
+
+\citefield{companion}{title}
+
+% The list of references is printed by way of \printbibliography.
+
+\printbibliography
+
+\end{document}
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/01-introduction.run-ms.xml b/macros/latex/contrib/biblatex-ms/doc/examples/01-introduction.run-ms.xml
new file mode 100644
index 0000000000..4b744a395c
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/01-introduction.run-ms.xml
@@ -0,0 +1,93 @@
+<?xml version="1.0" standalone="yes"?>
+<!-- logreq request file -->
+<!-- logreq version 1.0 / dtd version 1.0 -->
+<!-- Do not edit this file! -->
+<!DOCTYPE requests [
+ <!ELEMENT requests (internal | external)*>
+ <!ELEMENT internal (generic, (provides | requires)*)>
+ <!ELEMENT external (generic, cmdline?, input?, output?, (provides | requires)*)>
+ <!ELEMENT cmdline (binary, (option | infile | outfile)*)>
+ <!ELEMENT input (file)+>
+ <!ELEMENT output (file)+>
+ <!ELEMENT provides (file)+>
+ <!ELEMENT requires (file)+>
+ <!ELEMENT generic (#PCDATA)>
+ <!ELEMENT binary (#PCDATA)>
+ <!ELEMENT option (#PCDATA)>
+ <!ELEMENT infile (#PCDATA)>
+ <!ELEMENT outfile (#PCDATA)>
+ <!ELEMENT file (#PCDATA)>
+ <!ATTLIST requests
+ version CDATA #REQUIRED
+ >
+ <!ATTLIST internal
+ package CDATA #REQUIRED
+ priority (9) #REQUIRED
+ active (0 | 1) #REQUIRED
+ >
+ <!ATTLIST external
+ package CDATA #REQUIRED
+ priority (1 | 2 | 3 | 4 | 5 | 6 | 7 | 8) #REQUIRED
+ active (0 | 1) #REQUIRED
+ >
+ <!ATTLIST provides
+ type (static | dynamic | editable) #REQUIRED
+ >
+ <!ATTLIST requires
+ type (static | dynamic | editable) #REQUIRED
+ >
+ <!ATTLIST file
+ type CDATA #IMPLIED
+ >
+]>
+<requests version="1.0">
+ <internal package="biblatex" priority="9" active="1">
+ <generic>latex</generic>
+ <provides type="dynamic">
+ <file>01-introduction.aux</file>
+ <file>01-introduction-blx.bib</file>
+ </provides>
+ <requires type="dynamic">
+ <file>01-introduction.bbl</file>
+ </requires>
+ <requires type="static">
+ <file>blx-dm.def</file>
+ <file>blx-compat.def</file>
+ <file>blx-bibtex.def</file>
+ <file>biblatex.def</file>
+ <file>standard.bbx</file>
+ <file>authoryear.bbx</file>
+ <file>authoryear.cbx</file>
+ <file>biblatex.cfg</file>
+ <file>english.lbx</file>
+ <file>american.lbx</file>
+ </requires>
+ </internal>
+ <external package="biblatex" priority="5" active="1">
+ <generic>bibtex</generic>
+ <cmdline>
+ <binary>bibtex</binary>
+ <option>-min-crossrefs 2</option>
+ <infile>01-introduction</infile>
+ </cmdline>
+ <input>
+ <file>01-introduction.aux</file>
+ </input>
+ <output>
+ <file>01-introduction.bbl</file>
+ </output>
+ <provides type="dynamic">
+ <file>01-introduction.bbl</file>
+ </provides>
+ <requires type="dynamic">
+ <file>01-introduction.aux</file>
+ <file>01-introduction-blx.bib</file>
+ </requires>
+ <requires type="editable">
+ <file>biblatex-examples.bib</file>
+ </requires>
+ <requires type="static">
+ <file>biblatex.bst</file>
+ </requires>
+ </external>
+</requests>
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/02-annotations-biber-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/02-annotations-biber-ms.pdf
new file mode 100644
index 0000000000..f224541c20
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/02-annotations-biber-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/02-annotations-bibtex-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/02-annotations-bibtex-ms.pdf
new file mode 100644
index 0000000000..188b707462
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/02-annotations-bibtex-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/02-annotations-ms.tex b/macros/latex/contrib/biblatex-ms/doc/examples/02-annotations-ms.tex
new file mode 100644
index 0000000000..a3a6c1f7c3
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/02-annotations-ms.tex
@@ -0,0 +1,18 @@
+%
+% The example entries in examples.bib feature 'annotation' fields
+% with some remarks about the respective entry. The sole purpose of
+% this file is to print an annotated bibliography which includes
+% these fields.
+%
+\documentclass[a4paper]{article}
+\usepackage[T1]{fontenc}
+\usepackage[utf8]{inputenc}
+\usepackage[american]{babel}
+\usepackage{csquotes}
+\usepackage[style=reading,abstract=false,backend=biber]{biblatex-ms}
+\addbibresource{biblatex-examples.bib}
+\usepackage{hyperref}
+\begin{document}
+\nocite{*}
+\printbibliography
+\end{document}
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/03-localization-keys-biber-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/03-localization-keys-biber-ms.pdf
new file mode 100644
index 0000000000..2fcd02a82a
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/03-localization-keys-biber-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/03-localization-keys-bibtex-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/03-localization-keys-bibtex-ms.pdf
new file mode 100644
index 0000000000..8278820ded
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/03-localization-keys-bibtex-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/03-localization-keys-ms.tex b/macros/latex/contrib/biblatex-ms/doc/examples/03-localization-keys-ms.tex
new file mode 100644
index 0000000000..59f6d3bb17
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/03-localization-keys-ms.tex
@@ -0,0 +1,725 @@
+%
+% This file presents default localization keys for the module specified by
+% the main document language passed to 'babel'.
+%
+\documentclass{article}
+
+% localization modules
+% - ascii
+\usepackage[T1]{fontenc}
+\usepackage[utf8]{inputenc}
+%\usepackage[brazilian]{babel}
+%\usepackage[catalan]{babel}
+%\usepackage[croatian]{babel}
+%\usepackage[czech]{babel}
+%\usepackage[danish]{babel}
+%\usepackage[dutch]{babel}
+\usepackage[english]{babel}
+%\usepackage[estonian]{babel}
+%\usepackage[finnish]{babel}
+%\usepackage[french]{babel}
+%\usepackage[galician]{babel}
+%\usepackage[german]{babel}
+%\usepackage[icelandic]{babel}
+%\usepackage[italian]{babel}
+%\usepackage[latvian]{babel}
+%\usepackage[lithuanian]{babel}
+%\usepackage[magyar]{babel}
+%\usepackage[norsk]{babel}
+%\usepackage[nynorsk]{babel}
+%\usepackage[polish]{babel}
+%\usepackage[portuguese]{babel}
+%\usepackage[slovak]{babel}
+%\usepackage[slovene]{babel}
+%\usepackage[spanish]{babel}
+%\usepackage[swedish]{babel}
+%\usepackage[turkish, shorthands=:!]{babel}% avoid = becoming active
+% - UTF-8
+% -- Russian
+%\usepackage[T1,T2A]{fontenc}
+%\usepackage[utf8]{inputenc}
+%\usepackage[bulgarian]{babel}
+%\usepackage[russian]{babel}
+%\usepackage[ukrainian]{babel}
+% -- Greek
+%\usepackage[T1]{fontenc}
+%\usepackage[utf8]{inputenx}
+%\usepackage[english,greek]{babel}
+
+\usepackage[autostyle]{csquotes}
+\DeclareQuoteAlias{spanish}{catalan}
+\DeclareQuoteAlias{croatian}{polish}
+\DeclareQuoteAlias{croatian}{slovene}
+\usepackage[backend=biber]{biblatex-ms}
+\usepackage[colorlinks]{hyperref}
+
+% list format
+\newcommand*{\ie}{i.\,e.}
+\newcommand*{\eg}{e.\,g.}
+\newcommand{\cmd}[1]{\vrb{\textbackslash #1}}
+\newcommand{\vrb}[1]{\mbox{\ttfamily #1}}
+\newcommand{\acr}[1]{\textsc{#1}}
+\newrobustcmd*{\bibfield}[1]{\mbox{\ttfamily #1}}
+\newrobustcmd*{\bibtype}[1]{\mbox{\ttfamily @#1}}
+\newcommand{\prm}[1]{%
+ \mbox{%
+ \ensuremath\langle
+ \normalfont\textit{#1}%
+ \ensuremath\rangle}}
+\newenvironment*{keylist}
+ {\list{}{%
+ \setlength{\labelwidth}{1.25in}%
+ \setlength{\labelsep}{10pt}%
+ \setlength{\leftmargin}{0pt}%
+ \setlength{\itemsep}{0pt}%
+ \raggedright%
+ \renewcommand*{\makelabel}[1]{\hss\bfseries##1}}}
+ {\endlist}
+\makeatletter
+\def\keyitem#1{%
+ \item[#1]
+ \begingroup
+ \keyitemhook%
+ \blx@bibinit%
+ \midsentence\ifbibstring{#1}{}{\latintext}\biblstring{#1}%
+ \expandafter\lbx@initnamehook\lsmartoftext%
+ \par\nobreak
+ \midsentence\ifbibstring{#1}{}{\latintext}\bibsstring{#1}%
+ \expandafter\lbx@initnamehook\ssmartoftext%
+ \endgroup
+ \par\nobreak}
+\makeatother
+\ifdefstring{\languagename}{greek}{%
+ \AtBeginDocument{%
+ \appto{\keyitemhook}{\greektext}%
+ \latintext}
+ \preto{\UrlFont}{\latintext}
+ \pretocmd{\printbibliography}{\greektext}{}{}}{}
+\AtBeginBibliography{\raggedright}
+\AtBeginDocument{\MakeAutoQuote*{<}{>}}
+
+% user-configurable commands
+\newcommand{\keyitemhook}{}
+\newcommand{\lsmartoftext}{A}
+\newcommand{\ssmartoftext}{B}
+
+\addbibresource{biblatex-examples.bib}
+\nocite{*}
+
+\begin{document}
+\section*{Localization Strings for \vrb{\languagename}}
+
+The localization keys listed in this document are defined by default. Each key is printed with its description from the manual and strings specified by \vrb{\languagename.lbx} in following format.
+\begin{verbatim}
+<key name> <long string>
+ <short string>
+\end{verbatim}
+Long and short strings ending with \cmd{smartof}-type commands are respectively given the arguments \cmd{lsmarttext} and \cmd{ssmarttext}, which can be redefined in this document's preamble. Any unspecified keys will appear in boldface and generate warnings in the \vrb{log} file. String definitions or corrections are welcome at:
+\begin{center}
+\url{http://github.com/plk/biblatex/issues}
+\end{center}
+
+\subsection*{Headings}
+
+The following strings are special because they are intended for use in headings and made available globally via macros. For this reason, they should be capitalized for use in headings and they must not include any local commands which are part of the author interface.
+
+\begin{keylist}
+\keyitem{bibliography} The term <bibliography>, also available as \cmd{bibname}.
+\keyitem{references} The term <references>, also available as \cmd{refname}.
+\keyitem{shorthands} The term <list of shorthands> or <list of abbreviations>, also available as \cmd{biblistname}.
+\end{keylist}
+
+\subsection*{Roles, Expressed as Functions}
+
+The following keys refer to roles which are expressed as a function (<editor>, <translator>) rather than as an action (<edited by>, <translated by>).
+
+\begin{keylist}
+\keyitem{editor} The term <editor>, referring to the main editor. This is the most generic editorial role.
+\keyitem{editors} The plural form of \texttt{editor}.
+\keyitem{compiler} The term <compiler>, referring to an editor whose task is to compile a work.
+\keyitem{compilers} The plural form of \texttt{compiler}.
+\keyitem{founder} The term <founder>, referring to a founding editor.
+\keyitem{founders} The plural form of \texttt{founder}.
+\keyitem{continuator} An expression like <continuator>, <continuation>, or <continued>, referring to a past editor who continued the work of the founding editor but was subsequently replaced by the current editor.
+\keyitem{continuators} The plural form of \texttt{continuator}.
+\keyitem{redactor} The term <redactor>, referring to a secondary editor.
+\keyitem{redactors} The plural form of \texttt{redactor}.
+\keyitem{reviser} The term <reviser>, referring to a secondary editor.
+\keyitem{revisers} The plural form of \texttt{reviser}.
+\keyitem{collaborator} A term like <collaborator>, <collaboration>, <cooperator>, or <cooperation>, referring to a secondary editor.
+\keyitem{collaborators} The plural form of \texttt{collaborator}.
+\keyitem{translator} The term <translator>.
+\keyitem{translators} The plural form of \texttt{translator}.
+\keyitem{commentator} The term <commentator>, referring to the author of a commentary to a work.
+\keyitem{commentators} The plural form of \texttt{commentators}.
+\keyitem{annotator} The term <annotator>, referring to the author of annotations to a work.
+\keyitem{annotators} The plural form of \texttt{annotators}.
+\keyitem{organizer} The term <organizer>, referring to the organizer of an
+ event or work.
+\keyitem{organizers} The plural form of \texttt{organizer}.
+\end{keylist}
+
+\subsection*{Concatenated Editor Roles, Expressed as Functions}
+
+The following keys are similar in function to \texttt{editor}, \texttt{translator}, etc. They are used to indicate additional roles of the editor, \eg\ <editor and translator>, <editor and foreword>.
+
+\begin{keylist}
+\keyitem{editortr} Used if \bibfield{editor}\slash \bibfield{translator} are identical.
+\keyitem{editorstr} The plural form of \texttt{editortr}.
+\keyitem{editorco} Used if \bibfield{editor}\slash \bibfield{commentator} are identical.
+\keyitem{editorsco} The plural form of \texttt{editorco}.
+\keyitem{editoran} Used if \bibfield{editor}\slash \bibfield{annotator} are identical.
+\keyitem{editorsan} The plural form of \texttt{editoran}.
+\keyitem{editorin} Used if \bibfield{editor}\slash \bibfield{introduction} are identical.
+\keyitem{editorsin} The plural form of \texttt{editorin}.
+\keyitem{editorfo} Used if \bibfield{editor}\slash \bibfield{foreword} are identical.
+\keyitem{editorsfo} The plural form of \texttt{editorfo}.
+\keyitem{editoraf} Used if \bibfield{editor}\slash \bibfield{afterword} are identical.
+\keyitem{editorsaf} The plural form of \texttt{editoraf}.
+\end{keylist}
+%
+Keys for \bibfield{editor}\slash \bibfield{translator}\slash \prm{role} combinations:
+
+\begin{keylist}
+\keyitem{editortrco} Used if \bibfield{editor}\slash \bibfield{translator}\slash \bibfield{commentator} are identical.
+\keyitem{editorstrco} The plural form of \texttt{editortrco}.
+\keyitem{editortran} Used if \bibfield{editor}\slash \bibfield{translator}\slash \bibfield{annotator} are identical.
+\keyitem{editorstran} The plural form of \texttt{editortran}.
+\keyitem{editortrin} Used if \bibfield{editor}\slash \bibfield{translator}\slash \bibfield{introduction} are identical.
+\keyitem{editorstrin} The plural form of \texttt{editortrin}.
+\keyitem{editortrfo} Used if \bibfield{editor}\slash \bibfield{translator}\slash \bibfield{foreword} are identical.
+\keyitem{editorstrfo} The plural form of \texttt{editortrfo}.
+\keyitem{editortraf} Used if \bibfield{editor}\slash \bibfield{translator}\slash \bibfield{afterword} are identical.
+\keyitem{editorstraf} The plural form of \texttt{editortraf}.
+\end{keylist}
+%
+Keys for \bibfield{editor}\slash \bibfield{commentator}\slash \prm{role} combinations:
+
+\begin{keylist}
+\keyitem{editorcoin} Used if \bibfield{editor}\slash \bibfield{commentator}\slash \bibfield{introduction} are identical.
+\keyitem{editorscoin} The plural form of \texttt{editorcoin}.
+\keyitem{editorcofo} Used if \bibfield{editor}\slash \bibfield{commentator}\slash \bibfield{foreword} are identical.
+\keyitem{editorscofo} The plural form of \texttt{editorcofo}.
+\keyitem{editorcoaf} Used if \bibfield{editor}\slash \bibfield{commentator}\slash \bibfield{afterword} are identical.
+\keyitem{editorscoaf} The plural form of \texttt{editorcoaf}.
+\end{keylist}
+%
+Keys for \bibfield{editor}\slash \bibfield{annotator}\slash \prm{role} combinations:
+
+\begin{keylist}
+\keyitem{editoranin} Used if \bibfield{editor}\slash \bibfield{annotator}\slash \bibfield{introduction} are identical.
+\keyitem{editorsanin} The plural form of \texttt{editoranin}.
+\keyitem{editoranfo} Used if \bibfield{editor}\slash \bibfield{annotator}\slash \bibfield{foreword} are identical.
+\keyitem{editorsanfo} The plural form of \texttt{editoranfo}.
+\keyitem{editoranaf} Used if \bibfield{editor}\slash \bibfield{annotator}\slash \bibfield{afterword} are identical.
+\keyitem{editorsanaf} The plural form of \texttt{editoranaf}.
+\end{keylist}
+%
+Keys for \bibfield{editor}\slash \bibfield{translator}\slash \bibfield{commentator}\slash \prm{role} combinations:
+
+\begin{keylist}
+\keyitem{editortrcoin} Used if \bibfield{editor}\slash \bibfield{translator}\slash \bibfield{commentator}\slash \bibfield{introduction} are identical.
+\keyitem{editorstrcoin} The plural form of \texttt{editortrcoin}.
+\keyitem{editortrcofo} Used if \bibfield{editor}\slash \bibfield{translator}\slash \bibfield{commentator}\slash \bibfield{foreword} are identical.
+\keyitem{editorstrcofo} The plural form of \texttt{editortrcofo}.
+\keyitem{editortrcoaf} Used if \bibfield{editor}\slash \bibfield{translator}\slash \bibfield{commentator}\slash \bibfield{afterword} are identical.
+\keyitem{editorstrcoaf} The plural form of \texttt{editortrcoaf}.
+\end{keylist}
+%
+Keys for \bibfield{editor}\slash \bibfield{annotator}\slash \bibfield{commentator}\slash \prm{role} combinations:
+
+\begin{keylist}
+\keyitem{editortranin} Used if \bibfield{editor}\slash \bibfield{annotator}\slash \bibfield{commentator}\slash \bibfield{introduction} are identical.
+\keyitem{editorstranin} The plural form of \texttt{editortranin}.
+\keyitem{editortranfo} Used if \bibfield{editor}\slash \bibfield{annotator}\slash \bibfield{commentator}\slash \bibfield{foreword} are identical.
+\keyitem{editorstranfo} The plural form of \texttt{editortranfo}.
+\keyitem{editortranaf} Used if \bibfield{editor}\slash \bibfield{annotator}\slash \bibfield{commentator}\slash \bibfield{afterword} are identical.
+\keyitem{editorstranaf} The plural form of \texttt{editortranaf}.
+\end{keylist}
+
+\subsection*{Concatenated Translator Roles, Expressed as Functions}
+
+The following keys are similar in function to \texttt{translator}. They are used to indicate additional roles of the translator, e.g. <translator and commentator>, <translator and introduction>.
+
+\begin{keylist}
+\keyitem{translatorco} Used if \bibfield{translator}\slash \bibfield{commentator} are identical.
+\keyitem{translatorsco} The plural form of \texttt{translatorco}.
+\keyitem{translatoran} Used if \bibfield{translator}\slash \bibfield{annotator} are identical.
+\keyitem{translatorsan} The plural form of \texttt{translatoran}.
+\keyitem{translatorin} Used if \bibfield{translator}\slash \bibfield{introduction} are identical.
+\keyitem{translatorsin} The plural form of \texttt{translatorin}.
+\keyitem{translatorfo} Used if \bibfield{translator}\slash \bibfield{foreword} are identical.
+\keyitem{translatorsfo} The plural form of \texttt{translatorfo}.
+\keyitem{translatoraf} Used if \bibfield{translator}\slash \bibfield{afterword} are identical.
+\keyitem{translatorsaf} The plural form of \texttt{translatoraf}.
+\end{keylist}
+%
+Keys for \bibfield{translator}\slash \bibfield{commentator}\slash \prm{role} combinations:
+
+\begin{keylist}
+\keyitem{translatorcoin} Used if \bibfield{translator}\slash \bibfield{commentator}\slash \bibfield{introduction} are identical.
+\keyitem{translatorscoin} The plural form of \texttt{translatorcoin}.
+\keyitem{translatorcofo} Used if \bibfield{translator}\slash \bibfield{commentator}\slash \bibfield{foreword} are identical.
+\keyitem{translatorscofo} The plural form of \texttt{translatorcofo}.
+\keyitem{translatorcoaf} Used if \bibfield{translator}\slash \bibfield{commentator}\slash \bibfield{afterword} are identical.
+\keyitem{translatorscoaf} The plural form of \texttt{translatorcoaf}.
+\end{keylist}
+%
+Keys for \bibfield{translator}\slash \bibfield{annotator}\slash \prm{role} combinations:
+
+\begin{keylist}
+\keyitem{translatoranin} Used if \bibfield{translator}\slash \bibfield{annotator}\slash \bibfield{introduction} are identical.
+\keyitem{translatorsanin} The plural form of \texttt{translatoranin}.
+\keyitem{translatoranfo} Used if \bibfield{translator}\slash \bibfield{annotator}\slash \bibfield{foreword} are identical.
+\keyitem{translatorsanfo} The plural form of \texttt{translatoranfo}.
+\keyitem{translatoranaf} Used if \bibfield{translator}\slash \bibfield{annotator}\slash \bibfield{afterword} are identical.
+\keyitem{translatorsanaf} The plural form of \texttt{translatoranaf}.
+\end{keylist}
+
+\subsection*{Roles, Expressed as Actions}
+
+The following keys refer to roles which are expressed as an action (<edited by>, <translated by>) rather than as a function (<editor>, <translator>).
+
+\begin{keylist}
+\keyitem{byauthor} The expression <[created] by \prm{name}>.
+\keyitem{byeditor} The expression <edited by \prm{name}>.
+\keyitem{bycompiler} The expression <compiled by \prm{name}>.
+\keyitem{byfounder} The expression <founded by \prm{name}>.
+\keyitem{bycontinuator} The expression <continued by \prm{name}>.
+\keyitem{byredactor} The expression <redacted by \prm{name}>.
+\keyitem{byreviser} The expression <revised by \prm{name}>.
+\keyitem{byreviewer} The expression <reviewed by \prm{name}>.
+\keyitem{bycollaborator} An expression like <in collaboration with \prm{name}> or <in cooperation with \prm{name}>.
+\keyitem{bytranslator} The expression <translated by \prm{name}> or <translated from \prm{language} by \prm{name}>.
+\keyitem{bycommentator} The expression <commented by \prm{name}>.
+\keyitem{byannotator} The expression <annotated by \prm{name}>.
+\keyitem{byorganizer} The expression <[organized] by \prm{name}>.
+\end{keylist}
+
+\subsection*{Concatenated Editor Roles, Expressed as Actions}
+
+The following keys are similar in function to \bibfield{byeditor}, \bibfield{bytranslator}, etc. They are used to indicate additional roles of the editor, e.g. <edited and translated by>, <edited and furnished with an introduction by>, <edited, with a foreword, by>.
+
+\begin{keylist}
+\keyitem{byeditortr} Used if \bibfield{editor}\slash \bibfield{translator} are identical.
+\keyitem{byeditorco} Used if \bibfield{editor}\slash \bibfield{commentator} are identical.
+\keyitem{byeditoran} Used if \bibfield{editor}\slash \bibfield{annotator} are identical.
+\keyitem{byeditorin} Used if \bibfield{editor}\slash \bibfield{introduction} are identical.
+\keyitem{byeditorfo} Used if \bibfield{editor}\slash \bibfield{foreword} are identical.
+\keyitem{byeditoraf} Used if \bibfield{editor}\slash \bibfield{afterword} are identical.
+\end{keylist}
+%
+Keys for \bibfield{editor}\slash \bibfield{translator}\slash \prm{role} combinations:
+
+\begin{keylist}
+\keyitem{byeditortrco} Used if \bibfield{editor}\slash \bibfield{translator}\slash \bibfield{commentator} are identical.
+\keyitem{byeditortran} Used if \bibfield{editor}\slash \bibfield{translator}\slash \bibfield{annotator} are identical.
+\keyitem{byeditortrin} Used if \bibfield{editor}\slash \bibfield{translator}\slash \bibfield{introduction} are identical.
+\keyitem{byeditortrfo} Used if \bibfield{editor}\slash \bibfield{translator}\slash \bibfield{foreword} are identical.
+\keyitem{byeditortraf} Used if \bibfield{editor}\slash \bibfield{translator}\slash \bibfield{afterword} are identical.
+\end{keylist}
+%
+Keys for \bibfield{editor}\slash \bibfield{commentator}\slash \prm{role} combinations:
+
+\begin{keylist}
+\keyitem{byeditorcoin} Used if \bibfield{editor}\slash \bibfield{commentator}\slash \bibfield{introduction} are identical.
+\keyitem{byeditorcofo} Used if \bibfield{editor}\slash \bibfield{commentator}\slash \bibfield{foreword} are identical.
+\keyitem{byeditorcoaf} Used if \bibfield{editor}\slash \bibfield{commentator}\slash \bibfield{afterword} are identical.
+\end{keylist}
+%
+Keys for \bibfield{editor}\slash \bibfield{annotator}\slash \prm{role} combinations:
+
+\begin{keylist}
+\keyitem{byeditoranin} Used if \bibfield{editor}\slash \bibfield{annotator}\slash \bibfield{introduction} are identical.
+\keyitem{byeditoranfo} Used if \bibfield{editor}\slash \bibfield{annotator}\slash \bibfield{foreword} are identical.
+\keyitem{byeditoranaf} Used if \bibfield{editor}\slash \bibfield{annotator}\slash \bibfield{afterword} are identical.
+\end{keylist}
+%
+Keys for \bibfield{editor}\slash \bibfield{translator}\slash \bibfield{commentator}\slash \prm{role} combinations:
+
+\begin{keylist}
+\keyitem{byeditortrcoin} Used if \bibfield{editor}\slash \bibfield{translator}\slash \bibfield{commentator}\slash \bibfield{introduction} are identical.
+\keyitem{byeditortrcofo} Used if \bibfield{editor}\slash \bibfield{translator}\slash \bibfield{commentator}\slash \bibfield{foreword} are identical.
+\keyitem{byeditortrcoaf} Used if \bibfield{editor}\slash \bibfield{translator}\slash \bibfield{commentator}\slash \bibfield{afterword} are identical.
+\end{keylist}
+%
+Keys for \bibfield{editor}\slash \bibfield{translator}\slash \bibfield{annotator}\slash \prm{role} combinations:
+
+\begin{keylist}
+\keyitem{byeditortranin} Used if \bibfield{editor}\slash \bibfield{annotator}\slash \bibfield{commentator}\slash \bibfield{introduction} are identical.
+\keyitem{byeditortranfo} Used if \bibfield{editor}\slash \bibfield{annotator}\slash \bibfield{commentator}\slash \bibfield{foreword} are identical.
+\keyitem{byeditortranaf} Used if \bibfield{editor}\slash \bibfield{annotator}\slash \bibfield{commentator}\slash \bibfield{afterword} are identical.
+\end{keylist}
+
+\subsection*{Concatenated Translator Roles, Expressed as Actions}
+
+The following keys are similar in function to \texttt{bytranslator}. They are used to indicate additional roles of the translator, e.g. <translated and commented by>, <translated and furnished with an introduction by>, <translated, with a foreword, by>.
+
+\begin{keylist}
+\keyitem{bytranslatorco} Used if \bibfield{translator}\slash \bibfield{commentator} are identical.
+\keyitem{bytranslatoran} Used if \bibfield{translator}\slash \bibfield{annotator} are identical.
+\keyitem{bytranslatorin} Used if \bibfield{translator}\slash \bibfield{introduction} are identical.
+\keyitem{bytranslatorfo} Used if \bibfield{translator}\slash \bibfield{foreword} are identical.
+\keyitem{bytranslatoraf} Used if \bibfield{translator}\slash \bibfield{afterword} are identical.
+\end{keylist}
+%
+Keys for \bibfield{translator}\slash \bibfield{commentator}\slash \prm{role} combinations:
+
+\begin{keylist}
+\keyitem{bytranslatorcoin} Used if \bibfield{translator}\slash \bibfield{commentator}\slash \bibfield{introduction} are identical.
+\keyitem{bytranslatorcofo} Used if \bibfield{translator}\slash \bibfield{commentator}\slash \bibfield{foreword} are identical.
+\keyitem{bytranslatorcoaf} Used if \bibfield{translator}\slash \bibfield{commentator}\slash \bibfield{afterword} are identical.
+\end{keylist}
+%
+Keys for \bibfield{translator}\slash \bibfield{annotator}\slash \prm{role} combinations:
+
+\begin{keylist}
+\keyitem{bytranslatoranin} Used if \bibfield{translator}\slash \bibfield{annotator}\slash \bibfield{introduction} are identical.
+\keyitem{bytranslatoranfo} Used if \bibfield{translator}\slash \bibfield{annotator}\slash \bibfield{foreword} are identical.
+\keyitem{bytranslatoranaf} Used if \bibfield{translator}\slash \bibfield{annotator}\slash \bibfield{afterword} are identical.
+\end{keylist}
+
+\subsection*{Roles, Expressed as Objects}
+
+Roles which are related to supplementary material may also be expressed as objects (<with a commentary by>) rather than as functions (<commentator>) or as actions (<commented by>).
+
+\begin{keylist}
+\keyitem{withcommentator} The expression <with a commentary by \prm{name}>.
+\keyitem{withannotator} The expression <with annotations by \prm{name}>.
+\keyitem{withintroduction} The expression <with an introduction by \prm{name}>.
+\keyitem{withforeword} The expression <with a foreword by \prm{name}>.
+\keyitem{withafterword} The expression <with an afterword by \prm{name}>.
+\end{keylist}
+
+\subsection*{Supplementary Material}
+
+\begin{keylist}
+\keyitem{commentary} The term <commentary>.
+\keyitem{annotations} The term <annotations>.
+\keyitem{introduction} The term <introduction>.
+\keyitem{foreword} The term <foreword>.
+\keyitem{afterword} The term <afterword>.
+\end{keylist}
+
+\subsection*{Publication Details}
+
+\begin{keylist}
+\keyitem{volume} The term <volume>, referring to a book.
+\keyitem{volumes} The plural form of \texttt{volume}.
+\keyitem{involumes} The term <in>, as used in expressions like <in \prm{number of volumes} volumes>.
+\keyitem{jourvol} The term <volume>, referring to a journal.
+\keyitem{jourser} The term <series>, referring to a journal.
+\keyitem{book} The term <book>, referring to a document division.
+\keyitem{part} The term <part>, referring to a part of a book or a periodical.
+\keyitem{issue} The term <issue>, referring to a periodical.
+\keyitem{newseries} The expression <new series>, referring to a journal.
+\keyitem{oldseries} The expression <old series>, referring to a journal.
+\keyitem{edition} The term <edition>.
+\keyitem{in} The term <in>, referring to the title of a work published as part of another one, e.g. <\prm{title of article} in \prm{title of journal}>.
+\keyitem{inseries} The term <in>, as used in expressions like <volume \prm{number} in \prm{name of series}>.
+\keyitem{ofseries} The term <of>, as used in expressions like <volume \prm{number} of \prm{name of series}>.
+\keyitem{number} The term <number>, referring to an issue of a journal.
+\keyitem{chapter} The term <chapter>, referring to a chapter in a book.
+\keyitem{version} The term <version>, referring to a revision number.
+\keyitem{reprint} The term <reprint>.
+\keyitem{reprintof} The expression <reprint of \prm{title}>.
+\keyitem{reprintas} The expression <reprinted as \prm{title}>.
+\keyitem{reprintfrom} The expression <reprinted from \prm{title}>.
+\keyitem{translationof} The expression <translation of \prm{title}>.
+\keyitem{translationas} The expression <translated as \prm{title}>.
+\keyitem{translationfrom} The expression <translated from [the] \prm{language}>.
+\keyitem{reviewof} The expression <review of \prm{title}>.
+\keyitem{origpubas} The expression <originally published as \prm{title}>.
+\keyitem{origpubin} The expression <originally published in \prm{year}>.
+\keyitem{astitle} The term <as>, as used in expressions like <published by \prm{publisher} as \prm{title}>.
+\keyitem{bypublisher} The term <by>, as used in expressions like <published by \prm{publisher}>.
+\end{keylist}
+
+\subsection*{Publication State}
+
+\begin{keylist}
+\keyitem{inpreparation} The expression <in preparation> (the manuscript is being prepared for publication).
+\keyitem{submitted} The expression <submitted> (the manuscript has been submitted to a journal or conference).
+\keyitem{forthcoming} The expression <forthcoming> (the manuscript has been accepted by a press or journal).
+\keyitem{inpress} The expression <in press> (the manuscript is fully copyedited and out of the author's hands; it is in the final stages of the production process).
+\keyitem{prepublished} The expression <pre-published> (the manuscript is published in a preliminary form or location, such as online version in advance of print publication).
+\end{keylist}
+
+\subsection*{Pagination}
+
+\begin{keylist}
+\keyitem{page} The term <page>.
+\keyitem{pages} The plural form of \texttt{page}.
+\keyitem{column} The term <column>, referring to a column on a page.
+\keyitem{columns} The plural form of \texttt{column}.
+\keyitem{section} The term <section>, referring to a document division (usually abbreviated as \S).
+\keyitem{sections} The plural form of \texttt{section} (usually abbreviated as \S\S).
+\keyitem{paragraph} The term <paragraph> (\ie\ a block of text, not to be confused with \texttt{section}).
+\keyitem{paragraphs} The plural form of \texttt{paragraph}.
+\keyitem{verse} The term <verse> as used when referring to a work which is cited by verse numbers.
+\keyitem{verses} The plural form of \texttt{verse}.
+\keyitem{line} The term <line> as used when referring to a work which is cited by line numbers.
+\keyitem{lines} The plural form of \texttt{line}.
+\keyitem{pagetotal} The term <page> as used in \cmd{mkpageprefix}.
+\keyitem{pagetotals} The plural form of \texttt{pagetotal}.
+\keyitem{columntotal} The term <column>, referring to a column on a page, as used in \cmd{mkpageprefix}.
+\keyitem{columntotals} The plural form of \texttt{columntotal}.
+\keyitem{sectiontotal} The term <section>, referring to a document division (usually abbreviated as \S), as used in \cmd{mkpageprefix}.
+\keyitem{sectiontotals} The plural form of \texttt{sectiontotal} (usually abbreviated as \S\S).
+\keyitem{paragraphtotal} The term <paragraph> (\ie\ a block of text, not to be confused with \texttt{section}) as used in \cmd{mkpageprefix}.
+\keyitem{paragraphtotals} The plural form of \texttt{paragraphtotal}.
+\keyitem{versetotal} The term <verse> as used when referring to a work which is cited by verse numbers when used in \cmd{mkpageprefix}.
+\keyitem{versetotals} The plural form of \texttt{versetotal}.
+\keyitem{linetotal} The term <line> as used when referring to a work which is cited by line numbers when used in \cmd{mkpageprefix}.
+\keyitem{linetotals} The plural form of \texttt{linetotal}.
+\end{keylist}
+
+\subsection*{Types}
+
+The following keys are typically used in the \bibfield{type} field of \bibtype{thesis}, \bibtype{report}, \bibtype{misc}, and other entries:
+
+\begin{keylist}
+\keyitem{bathesis} An expression equivalent to the term <Bachelor's thesis>.
+\keyitem{mathesis} An expression equivalent to the term <Master's thesis>.
+\keyitem{phdthesis} The term <PhD thesis>, <PhD dissertation>, <doctoral thesis>, etc.
+\keyitem{candthesis} An expression equivalent to the term <Candidate thesis>. Used for <Candidate> degrees that have no clear equivalent to the Master's or doctoral level.
+\keyitem{techreport} The term <technical report>.
+\keyitem{resreport} The term <research report>.
+\keyitem{software} The term <computer software>.
+\keyitem{datacd} The term <data \textsc{cd}> or <\textsc{cd-rom}>.
+\keyitem{audiocd} The term <audio \textsc{cd}>.
+\end{keylist}
+
+\subsection*{Dates and Times}
+\begin{keylist}
+\keyitem{commonera} The term used to denote the secular era modern term \eg\ <CE>.
+\keyitem{beforecommonera} The term used to denote the secular era pre-modern term \eg\ <BCE>.
+\keyitem{annodomini} The term used to denote the christian era modern term \eg\ <AD>.
+\keyitem{beforechrist} The term used to denote the christian era pre-modern term \eg\ <BC>.
+\keyitem{circa} The string prefix used to denote approximate dates \eg\ <circa>.
+\keyitem{spring} The string <spring>.
+\keyitem{summer} The string <summer>.
+\keyitem{autumn} The string <autumn>.
+\keyitem{winter} The string <winter>.
+\keyitem{am} The string <AM>.
+\keyitem{pm} The string <PM>.
+\end{keylist}
+
+\subsection*{Miscellaneous}
+
+\begin{keylist}
+\keyitem{nodate} The term to use in place of a date when there is no date for an entry \eg\ <n.d.>
+\keyitem{and} The term <and>, as used in a list of authors or editors, for example.
+\keyitem{andothers} The expression <and others> or <et alii>, used to mark the truncation of a name list.
+\keyitem{andmore} Like \texttt{andothers} but used to mark the truncation of a literal list.
+\end{keylist}
+
+\subsection*{Labels}
+
+The following strings are intended for use as labels, \eg\ <Address: \prm{url}> or <Abstract: \prm{abstract}>.
+
+\begin{keylist}
+\keyitem{url} The term <address> in the sense of an internet address.
+\keyitem{urlfrom} An expression like <available from \prm{url}> or <available at \prm{url}>.
+\keyitem{urlseen} An expression like <accessed on \prm{date}>, <retrieved on \prm{date}>, <visited on \prm{date}>, referring to the access date of an online resource.
+\keyitem{file} The term <file>.
+\keyitem{library} The term <library>.
+\keyitem{abstract} The term <abstract>.
+\keyitem{annotation} The term <annotations>.
+\end{keylist}
+
+\subsection*{Citations}
+
+Traditional scholarly expressions used in citations:
+
+\begin{keylist}
+\keyitem{idem} The term equivalent to the Latin <idem> (<the same [person]>).
+\keyitem{idemsf} The feminine singular form of \texttt{idem}.
+\keyitem{idemsm} The masculine singular form of \texttt{idem}.
+\keyitem{idemsn} The neuter singular form of \texttt{idem}.
+\keyitem{idempf} The feminine plural form of \texttt{idem}.
+\keyitem{idempm} The masculine plural form of \texttt{idem}.
+\keyitem{idempn} The neuter plural form of \texttt{idem}.
+\keyitem{idempp} The plural form of \texttt{idem} suitable for a mixed gender list of names.
+\keyitem{ibidem} The term equivalent to the Latin <ibidem> (<in the same place>).
+\keyitem{opcit} The term equivalent to the Latin term <opere citato> (<[in] the work [already] cited>).
+\keyitem{loccit} The term equivalent to the Latin term <loco citato> (<[at] the place [already] cited>).
+\keyitem{confer} The term equivalent to the Latin <confer> (<compare>).
+\keyitem{sequens} The term equivalent to the Latin <sequens> (<[and] the following [page]>), as used to indicate a range of two pages when only the starting page is provided (\eg\ <25\,sq.> or <25\,f.> instead of <25--26>).
+\keyitem{sequentes} The term equivalent to the Latin <sequentes> (<[and] the following [pages]>), as used to indicate an open"=ended range of pages when only the starting page is provided (\eg\ <25\,sqq.> or <25\,ff.>).
+\keyitem{passim} The term equivalent to the Latin <passim> (<throughout>, <here and there>, <scatteredly>).
+\end{keylist}
+%
+Other expressions frequently used in citations:
+
+\begin{keylist}
+\keyitem{see} The term <see>.
+\keyitem{seealso} The expression <see also>.
+\keyitem{seenote} An expression like <see note \prm{footnote}> or <as in \prm{footnote}>, used to refer to a previous footnote in a citation.
+\keyitem{backrefpage} An expression like <see page \prm{page}> or <cited on page \prm{page}>, used to introduce back references in the bibliography.
+\keyitem{backrefpages} The plural form of \texttt{backrefpage}, \eg\ <see pages \prm{pages}> or <cited on pages \prm{pages}>.
+\keyitem{quotedin} An expression like <quoted in \prm{citation}>, used when quoting a passage which was already a quotation in the cited work.
+\keyitem{citedas} An expression like <henceforth cited as \prm{shorthand}>, used to introduce a shorthand in a citation.
+\keyitem{thiscite} The expression used in some verbose citation styles to differentiate between the page range of the cited item (typically an article in a journal, collection, or conference proceedings) and the page number the citation refers to. For example: \enquote{Author, Title, in: Book, pp. 45--61, \texttt{thiscite} p. 52.}
+\end{keylist}
+
+\subsection*{Month Names}
+
+\begin{keylist}
+\keyitem{january} The name <January>.
+\keyitem{february} The name <February>.
+\keyitem{march} The name <March>.
+\keyitem{april} The name <April>.
+\keyitem{may} The name <May>.
+\keyitem{june} The name <June>.
+\keyitem{july} The name <July>.
+\keyitem{august} The name <August>.
+\keyitem{september} The name <September>.
+\keyitem{october} The name <October>.
+\keyitem{november} The name <November>.
+\keyitem{december} The name <December>.
+\end{keylist}
+
+\subsection*{Language Names}
+
+\begin{keylist}
+\keyitem{langamerican} The language <American> or <American English>.
+\keyitem{langbasque} The language <Basque>.
+\keyitem{langbrazilian} The language <Brazilian> or <Brazilian Portuguese>.
+\keyitem{langbulgarian} The language <Bulgarian>.
+\keyitem{langcatalan} The language <Catalan>.
+\keyitem{langcroatian} The language <Croatian>.
+\keyitem{langczech} The language <Czech>.
+\keyitem{langdanish} The language <Danish>.
+\keyitem{langdutch} The language <Dutch>.
+\keyitem{langenglish} The language <English>.
+\keyitem{langestonian} The language <Estonian>.
+\keyitem{langfinnish} The language <Finnish>.
+\keyitem{langfrench} The language <French>.
+\keyitem{langgerman} The language <German>.
+\keyitem{langgreek} The language <Greek>.
+\keyitem{langhungarian} The language <Hungarian>.
+\keyitem{langitalian} The language <Italian>.
+\keyitem{langjapanese} The language <Japanese>.
+\keyitem{langlatin} The language <Latin>.
+\keyitem{langlatvian} The language <Latvian>.
+\keyitem{langlithuanian} The language <Lithuanian>.
+\keyitem{langmarathi} The language <Marathi>.
+\keyitem{langnorwegian} The language <Norwegian>.
+\keyitem{langpolish} The language <Polish>.
+\keyitem{langportuguese} The language <Portuguese>.
+\keyitem{langromanian} The language <Romanian>.
+\keyitem{langrussian} The language <Russian>.
+\keyitem{langserbian} The language <Serbian>.
+\keyitem{langslovak} The language <Slovak>.
+\keyitem{langslovene} The language <Slovene>.
+\keyitem{langspanish} The language <Spanish>.
+\keyitem{langswedish} The language <Swedish>.
+\keyitem{langturkish} The language <Turkish>.
+\keyitem{langukrainian} The language <Ukrainian>.
+\end{keylist}
+%
+The following strings are intended for use in phrases like <translated from [the] English by \prm{translator}>:
+
+\begin{keylist}
+\keyitem{fromamerican} The expression <from [the] American> or <from [the] American English>.
+\keyitem{frombasque} The expression <from [the] Basque>.
+\keyitem{frombrazilian} The expression <from [the] Brazilian> or <from [the] Brazilian Portuguese>.
+\keyitem{frombulgarian} The expression <from [the] Bulgarian>.
+\keyitem{fromcatalan} The expression <from [the] Catalan>.
+\keyitem{fromcroatian} The expression <from [the] Croatian>.
+\keyitem{fromczech} The expression <from [the] Czech>.
+\keyitem{fromdanish} The expression <from [the] Danish>.
+\keyitem{fromdutch} The expression <from [the] Dutch>.
+\keyitem{fromenglish} The expression <from [the] English>.
+\keyitem{fromestonian} The expression <from [the] Estonian>.
+\keyitem{fromfinnish} The expression <from [the] Finnish>.
+\keyitem{fromfrench} The expression <from [the] French>.
+\keyitem{fromgerman} The expression <from [the] German>.
+\keyitem{fromgreek} The expression <from [the] Greek>.
+\keyitem{fromhungarian} The language <from [the] Hungarian>.
+\keyitem{fromitalian} The expression <from [the] Italian>.
+\keyitem{fromjapanese} The expression <from [the] Japanese>.
+\keyitem{fromlatin} The expression <from [the] Latin>.
+\keyitem{fromlatvian} The expression <from [the] Latvian>.
+\keyitem{fromlithuanian} The expression <from [the] Lithuanian>.
+\keyitem{frommarathi} The expression <from [the] Marathi>.
+\keyitem{fromnorwegian} The expression <from [the] Norwegian>.
+\keyitem{frompolish} The expression <from [the] Polish>.
+\keyitem{fromportuguese} The expression <from [the] Portuguese>.
+\keyitem{fromromanian} The expression <from [the] Romanian>.
+\keyitem{fromrussian} The expression <from [the] Russian>.
+\keyitem{fromserbian} The expression <from [the] Serbian>.
+\keyitem{fromslovak} The expression <from [the] Slovak>.
+\keyitem{fromslovene} The expression <from [the] Slovene>.
+\keyitem{fromspanish} The expression <from [the] Spanish>.
+\keyitem{fromswedish} The expression <from [the] Swedish>.
+\keyitem{fromturkish} The expression <from [the] Turkish>.
+\keyitem{fromukrainian} The expression <from [the] Ukrainian>.
+\end{keylist}
+
+\subsection*{Country Names}
+
+Country names are localised by using the string \texttt{country} plus the \acr{ISO}-3166 country code as the key. The short version of the translation should be the \acr{ISO}-3166 country code. Note that only a small number of country names is defined by default, mainly to illustrate this scheme. These keys are used in the \bibfield{location} list of \bibtype{patent} entries but they may be useful for other purposes as well.
+
+\begin{keylist}
+\keyitem{countryde} The name <Germany>, abbreviated as \texttt{DE}.
+\keyitem{countryeu} The name <European Union>, abbreviated as \texttt{EU}.
+\keyitem{countryep} Similar to \texttt{countryeu} but abbreviated as \texttt{EP}. This is intended for \bibfield{patent} entries.
+\keyitem{countryfr} The name <France>, abbreviated as \texttt{FR}.
+\keyitem{countryuk} The name <United Kingdom>, abbreviated (according to \acr{ISO}-3166) as \texttt{GB}.
+\keyitem{countryus} The name <United States of America>, abbreviated as \texttt{US}.
+\end{keylist}
+
+\subsection*{Patents and Patent Requests}
+
+Strings related to patents are localised by using the term \texttt{patent} plus the \acr{ISO}-3166 country code as the key. Note that only a small number of patent keys is defined by default, mainly to illustrate this scheme. These keys are used in the \bibfield{type} field of \bibtype{patent} entries.
+
+\begin{keylist}
+\keyitem{patent} The generic term <patent>.
+\keyitem{patentde} The expression <German patent>.
+\keyitem{patenteu} The expression <European patent>.
+\keyitem{patentfr} The expression <French patent>.
+\keyitem{patentuk} The expression <British patent>.
+\keyitem{patentus} The expression <U.S. patent>.
+\end{keylist}
+%
+Patent requests are handled in a similar way, using the string \texttt{patreq} as the base name of the key:
+
+\begin{keylist}
+\keyitem{patreq} The generic term <patent request>.
+\keyitem{patreqde} The expression <German patent request>.
+\keyitem{patreqeu} The expression <European patent request>.
+\keyitem{patreqfr} The expression <French patent request>.
+\keyitem{patrequk} The expression <British patent request>.
+\keyitem{patrequs} The expression <U.S. patent request>.
+\end{keylist}
+
+\subsection*{Dates and Times}
+
+\begin{keylist}
+\keyitem{commonera} The era <CE>
+\keyitem{beforecommonera} The era <BCE>
+\keyitem{annodomini} The era <AD>
+\keyitem{beforechrist} The era <BC>
+\end{keylist}
+
+\begin{keylist}
+\keyitem{circa} The string <circa>
+\end{keylist}
+
+\begin{keylist}
+\keyitem{spring} The string <spring>
+\keyitem{summer} The string <summer>
+\keyitem{autumn} The string <autumn>
+\keyitem{winter} The string <winter>
+\end{keylist}
+
+\begin{keylist}
+\keyitem{am} The string <AM>
+\keyitem{pm} The string <PM>
+\end{keylist}
+
+\clearpage
+\printbibliography
+\end{document}
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/04-delimiters-biber-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/04-delimiters-biber-ms.pdf
new file mode 100644
index 0000000000..deb19f11c2
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/04-delimiters-biber-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/04-delimiters-bibtex-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/04-delimiters-bibtex-ms.pdf
new file mode 100644
index 0000000000..595e17da68
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/04-delimiters-bibtex-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/04-delimiters-ms.tex b/macros/latex/contrib/biblatex-ms/doc/examples/04-delimiters-ms.tex
new file mode 100644
index 0000000000..6a8fcfc90a
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/04-delimiters-ms.tex
@@ -0,0 +1,68 @@
+\documentclass[a4paper]{article}
+\usepackage[T1]{fontenc}
+\usepackage[utf8]{inputenc}
+\usepackage[american]{babel}
+\usepackage{csquotes}
+\usepackage{verbatim}
+\usepackage[style=authortitle,backend=biber]{biblatex-ms}
+\addbibresource{biblatex-examples.bib}
+\setlength{\parindent}{0pt}
+\newcommand{\cmd}[1]{\texttt{\textbackslash #1}}
+
+\DeclareDelimFormat[bib]{space}{X}
+\DeclareDelimFormat[test]{space}{Y}
+\DeclareDelimFormat{testb}{B}
+\DeclareDelimFormat[testbcontext]{testb}{C}
+\DeclareDelimFormat{testc}{D}
+\DeclareDelimFormat[testccontext]{testc}{E}
+\makeatletter
+% Some of these tests generate definition warnins which we don't want in tests
+\def\blx@warn@delimdeclare#1#2{\relax}
+\makeatother
+\begin{document}
+\section*{Context-Sensitive Delimiters}
+
+Normal cite uses global delim definition with comma:\\\\
+\cite{averroes/hannes}\\\\
+Textual cite uses "textcite" context without comma:\\\\
+\textcite{averroes/hannes}\\\\
+Reset of global delimiter with traditional method:\\\\
+\renewcommand*{\nametitledelim}{\addcomma\space}
+\cite{averroes/hannes}\\\\
+Textual cite in "textcite" context is not reset:\\\\
+\textcite{averroes/hannes}\\\\
+\begingroup
+\def\addcomma{,}
+\let\space\textvisiblespace
+Invoke default delimiter in context-sensitive interface:\\
+\printdelim{nametitledelim}\\\\
+Invoke global delimiter via normal macro:\\
+\nametitledelim\\\\
+Invoke delimiter in context-sensitive interface with explicit context:\\\\
+\printdelim[textcite]{nametitledelim}\\\\
+\endgroup
+Default delimiter "testb":\\\\
+\printdelim{testb}\\\\
+Setting "testbcontext" with \cmd{delimcontext}:\\\\
+\delimcontext{testbcontext}\printdelim{testb}\\\\
+Redefine "testb" delim with starred version to remove all contexts:\\\\
+\DeclareDelimFormat*{testb}{B}
+\printdelim{testb}\\\\
+Check nesting\\\\
+\begingroup
+\delimcontext{testccontext}\printdelim{testc}\\\\
+\endgroup
+\printdelim{testc}\\\\
+\printbibliography
+
+Reset the \cmd{space} command for this bibliography to use the
+context-sensitive interface. First we use the default "bib" context:
+\AtNextBibliography{\renewcommand*{\space}{\printdelim{space}}}
+\printbibliography
+
+Now use a custom context "test" and \cmd{space} expands to something
+different. Also, "nametitledelim" is back to default because we override
+the default "bib" context:
+\AtNextBibliography{\renewcommand*{\space}{\printdelim{space}}\delimcontext{test}}
+\printbibliography
+\end{document}
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/10-references-per-section-biber-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/10-references-per-section-biber-ms.pdf
new file mode 100644
index 0000000000..c858827e28
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/10-references-per-section-biber-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/10-references-per-section-bibtex-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/10-references-per-section-bibtex-ms.pdf
new file mode 100644
index 0000000000..780f394fd9
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/10-references-per-section-bibtex-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/10-references-per-section-ms.tex b/macros/latex/contrib/biblatex-ms/doc/examples/10-references-per-section-ms.tex
new file mode 100644
index 0000000000..2ee27931ac
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/10-references-per-section-ms.tex
@@ -0,0 +1,64 @@
+%
+% This file demonstrates a setup typically used in a collection of
+% articles by different authors, such as a conference proceedings
+% volume for example. Each article is presented as a separate
+% chapter with its own bibliography. The citation labels are local
+% to the 'refsection' environments.
+%
+% With Biber, this file is processed as follows:
+%
+% latex file
+% biber file
+% latex file
+%
+% With BibTeX, this file is processed as follows:
+%
+% latex file
+% bibtex file1-blx
+% bibtex file2-blx
+% bibtex file3-blx
+% latex file
+%
+% Note that the file name suffix may generally be omitted. It's
+% 'latex file' and 'bibtex file' rather than 'latex file.tex' and
+% 'bibtex file.aux'. Depending on the TeX distribution, omitting the
+% 'aux' file prefix when invoking BibTeX may even by mandatory.
+%
+\documentclass[a4paper,oneside]{book}
+\usepackage[T1]{fontenc}
+\usepackage[utf8]{inputenc}
+\usepackage[american]{babel}
+\usepackage{csquotes}
+\usepackage[style=numeric,backend=biber]{biblatex-ms}
+\usepackage{hyperref}
+\addbibresource{biblatex-examples.bib}
+\begin{document}
+
+\chapter{Title of first chapter}
+\begin{refsection}
+This is just filler text \parencite{massa}.
+This is just filler text \parencite{augustine}.
+This is just filler text \parencite{cotton}.
+This is just filler text \parencite{hammond}.
+\printbibliography[heading=subbibliography]
+\end{refsection}
+
+\chapter{Title of second chapter}
+\begin{refsection}
+This is just filler text \parencite{hammond}.
+This is just filler text \parencite{massa}.
+This is just filler text \parencite{cotton}.
+This is just filler text \parencite{murray}.
+\printbibliography[heading=subbibliography]
+\end{refsection}
+
+\chapter{Title of third chapter}
+\begin{refsection}
+This is just filler text \parencite{murray}.
+This is just filler text \parencite{augustine}.
+This is just filler text \parencite{cotton}.
+This is just filler text \parencite{bertram}.
+\printbibliography[heading=subbibliography]
+\end{refsection}
+
+\end{document}
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/11-references-by-section-biber-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/11-references-by-section-biber-ms.pdf
new file mode 100644
index 0000000000..2c2d6b9fe5
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/11-references-by-section-biber-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/11-references-by-section-bibtex-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/11-references-by-section-bibtex-ms.pdf
new file mode 100644
index 0000000000..5e39a13403
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/11-references-by-section-bibtex-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/11-references-by-section-ms.tex b/macros/latex/contrib/biblatex-ms/doc/examples/11-references-by-section-ms.tex
new file mode 100644
index 0000000000..5fb8436ac5
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/11-references-by-section-ms.tex
@@ -0,0 +1,68 @@
+%
+% This file is similar to the 'per section' example except that
+% all references are printed at the end of the document. The
+% citation labels are still local to the 'refsection' environments.
+%
+% With Biber, this file is processed as follows:
+%
+% latex file
+% biber file
+% latex file
+%
+% With BibTeX, this file is processed as follows:
+%
+% latex file
+% bibtex file1-blx
+% bibtex file2-blx
+% bibtex file3-blx
+% latex file
+%
+% Note that the file name suffix may generally be omitted. It's
+% 'latex file' and 'bibtex file' rather than 'latex file.tex' and
+% 'bibtex file.aux'. Depending on the TeX distribution, omitting the
+% 'aux' file prefix when invoking BibTeX may even by mandatory.
+%
+\documentclass[a4paper,oneside]{book}
+\usepackage[T1]{fontenc}
+\usepackage[utf8]{inputenc}
+\usepackage[american]{babel}
+\usepackage{csquotes}
+\usepackage[style=authoryear,backend=biber]{biblatex-ms}
+\usepackage{hyperref}
+\usepackage{nameref}
+\addbibresource{biblatex-examples.bib}
+\defbibheading{subbibliography}{%
+ \section*{%
+ Chapter \therefsection:
+ \nameref{refsection:\therefsection}}}
+\begin{document}
+
+\chapter{Title of first chapter}
+\begin{refsection}
+This is just filler text \parencite{westfahl:space}.
+This is just filler text \parencite{nietzsche:ksa}.
+\end{refsection}
+
+\chapter{Title of second chapter}
+\begin{refsection}
+This is just filler text \parencite{nietzsche:historie}.
+This is just filler text \parencite{westfahl:frontier}.
+\end{refsection}
+
+\chapter{Title of third chapter}
+\begin{refsection}
+This is just filler text \parencite{aristotle:anima}.
+This is just filler text \parencite{averroes/bland}.
+\end{refsection}
+
+\printbibheading
+\bibbysection[heading=subbibliography]
+%
+% \bibbysection is a shorthand for:
+%
+% \printbibliography[section=1]
+% \printbibliography[section=2]
+% \printbibliography[section=3]
+% ...
+
+\end{document}
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/12-references-by-segment-biber-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/12-references-by-segment-biber-ms.pdf
new file mode 100644
index 0000000000..a7c8d1dcbd
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/12-references-by-segment-biber-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/12-references-by-segment-bibtex-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/12-references-by-segment-bibtex-ms.pdf
new file mode 100644
index 0000000000..71347c8ccb
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/12-references-by-segment-bibtex-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/12-references-by-segment-ms.tex b/macros/latex/contrib/biblatex-ms/doc/examples/12-references-by-segment-ms.tex
new file mode 100644
index 0000000000..2e7f07926f
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/12-references-by-segment-ms.tex
@@ -0,0 +1,49 @@
+%
+% This file differs from the 'by section' example in that the
+% citation labels are assigned globally. They are not local to the
+% 'refsegment' environments.
+%
+\documentclass[a4paper,oneside]{book}
+\usepackage[T1]{fontenc}
+\usepackage[utf8]{inputenc}
+\usepackage[american]{babel}
+\usepackage{csquotes}
+\usepackage[style=authoryear,backend=biber]{biblatex-ms}
+\usepackage{hyperref}
+\usepackage{nameref}
+\addbibresource{biblatex-examples.bib}
+\defbibheading{subbibliography}{%
+ \section*{%
+ Chapter \therefsegment:
+ \nameref{refsegment:\therefsection\therefsegment}}}
+\begin{document}
+
+\chapter{Title of first chapter}
+\begin{refsegment}
+This is just filler text \parencite{westfahl:space}.
+This is just filler text \parencite{nietzsche:ksa}.
+\end{refsegment}
+
+\chapter{Title of second chapter}
+\begin{refsegment}
+This is just filler text \parencite{nietzsche:historie}.
+This is just filler text \parencite{westfahl:frontier}.
+\end{refsegment}
+
+\chapter{Title of third chapter}
+\begin{refsegment}
+This is just filler text \parencite{aristotle:anima}.
+This is just filler text \parencite{averroes/bland}.
+\end{refsegment}
+
+\printbibheading
+\bibbysegment[heading=subbibliography]
+%
+% \bibbysegment is a shorthand for:
+%
+% \printbibliography[segment=1]
+% \printbibliography[segment=2]
+% \printbibliography[segment=3]
+% ...
+
+\end{document}
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/13-references-by-keyword-biber-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/13-references-by-keyword-biber-ms.pdf
new file mode 100644
index 0000000000..d997b90155
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/13-references-by-keyword-biber-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/13-references-by-keyword-bibtex-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/13-references-by-keyword-bibtex-ms.pdf
new file mode 100644
index 0000000000..763b7cbbd9
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/13-references-by-keyword-bibtex-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/13-references-by-keyword-ms.tex b/macros/latex/contrib/biblatex-ms/doc/examples/13-references-by-keyword-ms.tex
new file mode 100644
index 0000000000..fa40662463
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/13-references-by-keyword-ms.tex
@@ -0,0 +1,44 @@
+%
+% It is common requirement to subdivide a bibliography by certain
+% criteria. This example demonstrates how to use keyword filters to
+% subdivide the list of references into primary and secondary
+% sources.
+%
+% The keyword filter depends on the 'keywords' fields in the bib
+% file. The entries cited in this example are set up like this:
+%
+% @Type{key,
+% keywords = {primary},
+% ...
+% }
+%
+% @Type{key,
+% keywords = {secondary},
+% ...
+% }
+%
+\documentclass[a4paper,oneside]{book}
+\usepackage[T1]{fontenc}
+\usepackage[utf8]{inputenc}
+\usepackage[american]{babel}
+\usepackage{csquotes}
+\usepackage[style=authortitle,backend=biber]{biblatex-ms}
+\usepackage{hyperref}
+\addbibresource{biblatex-examples.bib}
+\begin{document}
+
+\chapter{References by keyword}
+
+This is just filler text.\footcite{aristotle:anima}
+This is just filler text.\footcite{nussbaum}
+This is just filler text.\footcite{averroes/bland}
+This is just filler text.\footcite{hyman}
+This is just filler text.\footcite{aristotle:physics}
+This is just filler text.\footcite{moraux}
+This is just filler text.\footcite{pines}
+
+\printbibheading
+\printbibliography[keyword=primary,heading=subbibliography,title={Primary Sources}]
+\printbibliography[keyword=secondary,heading=subbibliography,title={Secondary Sources}]
+
+\end{document}
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/14-references-by-category-biber-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/14-references-by-category-biber-ms.pdf
new file mode 100644
index 0000000000..b9770f3eee
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/14-references-by-category-biber-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/14-references-by-category-bibtex-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/14-references-by-category-bibtex-ms.pdf
new file mode 100644
index 0000000000..f8358d5fa3
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/14-references-by-category-bibtex-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/14-references-by-category-ms.tex b/macros/latex/contrib/biblatex-ms/doc/examples/14-references-by-category-ms.tex
new file mode 100644
index 0000000000..5f76b0dd1c
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/14-references-by-category-ms.tex
@@ -0,0 +1,46 @@
+%
+% This example will yield the same output as the 'keywords' example
+% but the approach is different. Instead of adding the filter
+% criteria to the bib file, we assign keys to categories in the
+% document preamble and use 'category' filters to create a
+% subdivided bibliography.
+%
+\documentclass[a4paper,oneside]{book}
+\usepackage[T1]{fontenc}
+\usepackage[utf8]{inputenc}
+\usepackage[american]{babel}
+\usepackage{csquotes}
+\usepackage[style=authortitle,backend=biber]{biblatex-ms}
+\usepackage{hyperref}
+\addbibresource{biblatex-examples.bib}
+\DeclareBibliographyCategory{primary}
+\DeclareBibliographyCategory{secondary}
+\addtocategory{primary}{aristotle:anima,aristotle:physics,averroes/bland}
+\addtocategory{secondary}{hyman,moraux,nussbaum,pines}
+\defbibheading{primary}{\section*{Primary Sources}}
+\defbibheading{secondary}{\section*{Secondary Sources}}
+\begin{document}
+
+\chapter{References by category}
+
+This is just filler text.\footcite{aristotle:anima}
+This is just filler text.\footcite{nussbaum}
+This is just filler text.\footcite{averroes/bland}
+This is just filler text.\footcite{hyman}
+This is just filler text.\footcite{aristotle:physics}
+This is just filler text.\footcite{moraux}
+This is just filler text.\footcite{pines}
+
+\printbibheading
+\bibbycategory
+%
+% \bibbycategory processes the categories in the order in which they
+% were declared. Note that the category name also serves as a heading
+% identifier, i.e. you need to define a matching heading for every
+% category. In this document, \bibbycategory is a shorthand for:
+%
+% \printbibliography[heading=primary,category=primary]
+% \printbibliography[heading=secondary,category=secondary]
+% ...
+
+\end{document}
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/15-references-by-type-biber-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/15-references-by-type-biber-ms.pdf
new file mode 100644
index 0000000000..d90e1c6cd3
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/15-references-by-type-biber-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/15-references-by-type-bibtex-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/15-references-by-type-bibtex-ms.pdf
new file mode 100644
index 0000000000..e29b63e57d
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/15-references-by-type-bibtex-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/15-references-by-type-ms.tex b/macros/latex/contrib/biblatex-ms/doc/examples/15-references-by-type-ms.tex
new file mode 100644
index 0000000000..68946acdca
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/15-references-by-type-ms.tex
@@ -0,0 +1,26 @@
+%
+% This example demonstrates how to subdivide a bibliography by type,
+% using 'type' filters.
+%
+\documentclass[a4paper,oneside]{book}
+\usepackage[T1]{fontenc}
+\usepackage[utf8]{inputenc}
+\usepackage[american]{babel}
+\usepackage{csquotes}
+\usepackage[style=authoryear,backend=biber]{biblatex-ms}
+\usepackage{hyperref}
+\addbibresource{biblatex-examples.bib}
+\begin{document}
+
+\chapter{References by type}
+
+This is just filler text \parencite{knuth:ct:a}.
+This is just filler text \parencite{ctan}.
+This is just filler text \parencite{companion}.
+This is just filler text \parencite{markey}.
+
+\printbibheading
+\printbibliography[nottype=online,heading=subbibliography,title={Printed Sources}]
+\printbibliography[type=online,heading=subbibliography,title={Online Sources}]
+
+\end{document}
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/16-numeric-prefixed-1-biber-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/16-numeric-prefixed-1-biber-ms.pdf
new file mode 100644
index 0000000000..5eef1ea440
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/16-numeric-prefixed-1-biber-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/16-numeric-prefixed-1-bibtex-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/16-numeric-prefixed-1-bibtex-ms.pdf
new file mode 100644
index 0000000000..64db9af5a6
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/16-numeric-prefixed-1-bibtex-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/16-numeric-prefixed-1-ms.tex b/macros/latex/contrib/biblatex-ms/doc/examples/16-numeric-prefixed-1-ms.tex
new file mode 100644
index 0000000000..af0672fa10
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/16-numeric-prefixed-1-ms.tex
@@ -0,0 +1,58 @@
+%
+% This file demonstrates how to configure biblatex to prefix
+% numerical citations with a letter or a string. This will work with
+% all numerical styles which ship with biblatex. Note that you must
+% set defernumbers=true globally when using prefixes.
+%
+% Since the prefixes are assigned as the bibliography is generated,
+% you may use any filter supported by biblatex to subdivide the
+% references (by type, by category, by keyword, etc.).
+%
+\documentclass[a4paper,oneside]{article}
+\usepackage[T1]{fontenc}
+\usepackage[utf8]{inputenc}
+\usepackage[american]{babel}
+\usepackage{csquotes}
+% When using prefixed numerical labels, the labels must be assigned
+% as the bibliography is generated. That's why we set
+% defernumbers=true here:
+\usepackage[style=numeric,defernumbers,backend=biber]{biblatex-ms}
+\usepackage{hyperref}
+\usepackage{nameref}
+\addbibresource{biblatex-examples.bib}
+% A catch-all filter for all items which are not assigned to a
+% dedicated sub-bibliography:
+\defbibfilter{other}{
+ not type=article
+ and
+ not type=book
+ and
+ not type=collection
+}
+
+\begin{document}
+
+\section*{Prefixed numerical citations}
+
+% Some citations:
+\cite{angenendt, kastenholz, augustine, companion, jaffe, ctan}
+
+\nocite{*}
+
+% Let's print the overall heading of the bibliography first:
+\printbibheading
+
+% And now the sub-bibliographies: we use three of them (based on the
+% entry type). Each sub-bibliography assigns a different prefix:
+\newrefcontext[labelprefix={A}]
+\printbibliography[heading=subbibliography,title={Articles},type=article]
+\newrefcontext[labelprefix={B}]
+\printbibliography[heading=subbibliography,title={Books},type=book]
+\newrefcontext[labelprefix={C}]
+\printbibliography[heading=subbibliography,title={Collections},type=collection]
+
+% The catch-all sub-bibliography for all remaining types:
+\newrefcontext[labelprefix={O}]
+\printbibliography[heading=subbibliography,title={Other Sources},filter=other]
+
+\end{document}
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/17-numeric-prefixed-2-biber-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/17-numeric-prefixed-2-biber-ms.pdf
new file mode 100644
index 0000000000..6ae7e98faa
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/17-numeric-prefixed-2-biber-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/17-numeric-prefixed-2-bibtex-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/17-numeric-prefixed-2-bibtex-ms.pdf
new file mode 100644
index 0000000000..1660f1fa12
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/17-numeric-prefixed-2-bibtex-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/17-numeric-prefixed-2-ms.tex b/macros/latex/contrib/biblatex-ms/doc/examples/17-numeric-prefixed-2-ms.tex
new file mode 100644
index 0000000000..8c03cdff33
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/17-numeric-prefixed-2-ms.tex
@@ -0,0 +1,45 @@
+%
+% This example is almost the same as the previous one except that
+% the catch-all sub-bibliography does not assign any prefix.
+%
+\documentclass[a4paper,oneside]{article}
+\usepackage[T1]{fontenc}
+\usepackage[utf8]{inputenc}
+\usepackage[american]{babel}
+\usepackage{csquotes}
+\usepackage[style=numeric,defernumbers,backend=biber]{biblatex-ms}
+\usepackage{hyperref}
+\usepackage{nameref}
+\addbibresource{biblatex-examples.bib}
+\defbibfilter{other}{
+ not type=article
+ and
+ not type=book
+ and
+ not type=collection
+}
+\begin{document}
+
+\section*{Prefixed numerical citations}
+
+% Some citations:
+\cite{angenendt, kastenholz, augustine, companion, jaffe, ctan}
+
+\nocite{*}
+
+\printbibheading
+
+\newrefcontext[labelprefix={A}]
+\printbibliography[heading=subbibliography,title={Articles},type=article]
+\newrefcontext[labelprefix={B}]
+\printbibliography[heading=subbibliography,title={Books},type=book]
+\newrefcontext[labelprefix={C}]
+\printbibliography[heading=subbibliography,title={Collections},type=collection]
+\endrefcontext
+
+% The catch-all sub-bibliography for all remaining types. We don't
+% use a prefix but we still need to set resetnumbers=true to restart
+% the item numbering:
+\printbibliography[heading=subbibliography,title={Other Sources},filter=other,resetnumbers]
+
+\end{document}
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/18-numeric-hybrid-biber-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/18-numeric-hybrid-biber-ms.pdf
new file mode 100644
index 0000000000..edc86c484e
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/18-numeric-hybrid-biber-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/18-numeric-hybrid-bibtex-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/18-numeric-hybrid-bibtex-ms.pdf
new file mode 100644
index 0000000000..3b5713ac71
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/18-numeric-hybrid-bibtex-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/18-numeric-hybrid-ms.tex b/macros/latex/contrib/biblatex-ms/doc/examples/18-numeric-hybrid-ms.tex
new file mode 100644
index 0000000000..00b5e4e1ec
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/18-numeric-hybrid-ms.tex
@@ -0,0 +1,87 @@
+%
+% This example demonstrates how hybrid citations, i.e., two
+% citations styles in a single document, may be implemented.
+% Note that the default styles which ship with bibatex do not
+% support hybrid citation schemes out of the box. This example
+% is merely a proof of concept.
+%
+\documentclass[a4paper,oneside]{article}
+\usepackage[T1]{fontenc}
+\usepackage[american]{babel}
+\usepackage[utf8]{inputenc}
+\usepackage{csquotes}
+% We use the authoryear style as a basis but we want numerical
+% labels for all online references. Therefore, we request numeric
+% labels by setting 'labelnumber=true'. We also set
+% 'defernumbers=true'. This will be required by the 'omitnumbers'
+% option used below.
+\usepackage[style=authoryear,labelnumber,defernumbers,backend=biber]{biblatex-ms}
+\usepackage{hyperref}
+\usepackage{nameref}
+\addbibresource{biblatex-examples.bib}
+
+% We define a dedicated citation command for online references which
+% uses numerical labels instead of the author-year scheme. Instead
+% of defining a dedicated command, it is also possible (and usually
+% preferable) to build smart citation commands which are able to
+% switch citation styles depending on the entry type (or other
+% criteria). It's just easier to demonstrate the point of the
+% 'omitnumbers' option this way:
+
+\DeclareCiteCommand{\citeonline}[\mkbibbrackets]
+ {\usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \printtext[bibhyperref]{%
+ \printfield{labelprefix}%
+ \printfield{labelnumber}}}
+ {\multicitedelim}
+ {\usebibmacro{postnote}}
+
+% The matching environment for the online sub-bibliography:
+
+\defbibenvironment{online}
+ {\list
+ {\printtext[labelnumberwidth]{%
+ \iffieldundef{shorthand}
+ {\printfield{labelprefix}%
+ \printfield{labelnumber}}
+ {\printfield{shorthand}}}}
+ {\setlength{\labelwidth}{\labelnumberwidth}%
+ \setlength{\leftmargin}{\labelwidth}%
+ \setlength{\labelsep}{\biblabelsep}%
+ \addtolength{\leftmargin}{\labelsep}%
+ \setlength{\itemsep}{\bibitemsep}%
+ \setlength{\parsep}{\bibparsep}}%
+ \renewcommand*{\makelabel}[1]{\hss##1}}
+ {\endlist}
+ {\item}
+
+\DeclareFieldFormat{labelnumberwidth}{\mkbibbrackets{#1}}
+
+\begin{document}
+
+\section*{Hybrid citations}
+
+\subsection*{Regular citations (author-year)}
+
+\cite{augustine},
+\cite{bertram},
+\cite{companion}
+
+\subsection*{Online citations (numeric)}
+
+\citeonline{ctan},
+\citeonline{markey}
+
+% Let's print the overall heading of the bibliography first:
+\printbibheading
+
+% We set omitnumbers=true for the author-year sub-bibliography.
+% Without that, the first item of the online bibliography would be
+% labeled as "[4]".
+\printbibliography[heading=subbibliography,title={Printed References},nottype=online,omitnumbers]
+
+% The online sub-bibliography requires a different environment:
+\printbibliography[heading=subbibliography,title={Online References},env=online,type=online]
+
+\end{document}
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/19-alphabetic-prefixed-biber-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/19-alphabetic-prefixed-biber-ms.pdf
new file mode 100644
index 0000000000..44fe840374
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/19-alphabetic-prefixed-biber-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/19-alphabetic-prefixed-bibtex-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/19-alphabetic-prefixed-bibtex-ms.pdf
new file mode 100644
index 0000000000..fd02d3ee77
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/19-alphabetic-prefixed-bibtex-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/19-alphabetic-prefixed-ms.tex b/macros/latex/contrib/biblatex-ms/doc/examples/19-alphabetic-prefixed-ms.tex
new file mode 100644
index 0000000000..fa9a627535
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/19-alphabetic-prefixed-ms.tex
@@ -0,0 +1,47 @@
+%
+% Prefixes also work with alphabetic the styles.
+%
+\documentclass[a4paper,oneside]{article}
+\usepackage[T1]{fontenc}
+\usepackage[utf8]{inputenc}
+\usepackage[american]{babel}
+\usepackage{csquotes}
+\usepackage[style=alphabetic,defernumbers,backend=biber]{biblatex-ms}
+\usepackage{hyperref}
+\usepackage{nameref}
+\addbibresource{biblatex-examples.bib}
+% A catch-all filter for all items which are not assigned to a
+% dedicated sub-bibliography:
+\defbibfilter{other}{
+ not type=article
+ and
+ not type=book
+ and
+ not type=collection
+}
+\begin{document}
+
+\section*{Prefixed alphabetic citations}
+
+% Some citations:
+\cite{angenendt, kastenholz, augustine, companion, jaffe, ctan}
+
+\nocite{*}
+
+% Let's print the overall heading of the bibliography first:
+\printbibheading
+
+% And now the sub-bibliographies: we use three of them (based on the
+% entry type). Each sub-bibliography assigns a different prefix.
+\newrefcontext[labelprefix={A-}]
+\printbibliography[heading=subbibliography,title={Articles},type=article]
+\newrefcontext[labelprefix={B-}]
+\printbibliography[heading=subbibliography,title={Books},type=book]
+\newrefcontext[labelprefix={C-}]
+\printbibliography[heading=subbibliography,title={Collections},type=collection]
+
+% The catch-all sub-bibliography for all remaining types:
+\newrefcontext[labelprefix={O-}]
+\printbibliography[heading=subbibliography,title={Other Sources},filter=other]
+
+\end{document}
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/20-indexing-single-biber-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/20-indexing-single-biber-ms.pdf
new file mode 100644
index 0000000000..cc0daad610
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/20-indexing-single-biber-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/20-indexing-single-bibtex-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/20-indexing-single-bibtex-ms.pdf
new file mode 100644
index 0000000000..b41bf9968e
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/20-indexing-single-bibtex-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/20-indexing-single-ms.tex b/macros/latex/contrib/biblatex-ms/doc/examples/20-indexing-single-ms.tex
new file mode 100644
index 0000000000..71918e5b53
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/20-indexing-single-ms.tex
@@ -0,0 +1,75 @@
+%
+% This file demonstrates indexing with the 'makeidx' package.
+% This file is processed as follows:
+%
+% latex file
+% bibtex/biber file
+% latex file
+% makeindex file
+% latex file
+%
+% Note that the file name suffix may be omitted. It's 'latex file'
+% and not 'latex file.tex'.
+%
+\documentclass[a4paper]{article}
+\usepackage[T1]{fontenc}
+\usepackage[utf8]{inputenc}
+\usepackage[american]{babel}
+\usepackage{csquotes}
+%
+% We set the 'indexing' package option ('indexing' is similar to
+% 'indexing=true') to enable indexing in both citations and the
+% bibliography. It is rather unusual to add bibliography entries to
+% the index so you will normally use 'indexing=cite' instead. The
+% only reason we're indexing the bibliography in this example is to
+% get a larger index. For a change, let's also use the 'authortitle'
+% style in this example.
+\usepackage[indexing,style=authortitle,backend=biber]{biblatex-ms}
+\addbibresource{biblatex-examples.bib}
+%
+% The 'makeidx' package provides indexing facilities on a fairly
+% basic level. It is highly advisable to use the 'index' package
+% instead, even if you do not need the additional facilities
+% provided by this package, such as multiple indexes. The reason is
+% that the \index command defined by this package is more robust
+% than the basic command provided by 'makeidx'.
+\usepackage{makeidx}
+% We need to enable indexing globally by way of \makeindex.
+% Otherwise, no index is created at all, regardless of the
+% 'indexing' option of biblatex.
+\makeindex
+%
+% Note that biblatex uses makeindex's 'actual' operator to pass the
+% 'indexsorttitle' field to makeindex. The default character used
+% is '@'. If the makeindex style uses a different character, i.e.,
+% if the .ist file contains a line like this
+%
+% actual '='
+%
+% you need to redefine \actualoperator accordingly:
+%
+% \renewcommand*{\actualoperator}{=}
+%
+\begin{document}
+
+\section*{Indexing with the \texttt{makeidx} package}
+
+% We add the contents of the entire bib file to the bibliography.
+% Note that \nocite does not add anything to the index on its own.
+\nocite{*}
+
+% We cite a few items. These citations will be added to the index.
+\cite{piccato,gaonkar,malinowski,coleridge,gerhardt,cicero}
+
+% We also add an explicit index entry.
+\index{Example entry}
+
+\clearpage
+
+% We print the printbibliography...
+\printbibliography
+% ...and the index
+\raggedright
+\printindex
+
+\end{document}
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/21-indexing-multiple-biber-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/21-indexing-multiple-biber-ms.pdf
new file mode 100644
index 0000000000..f0c4739af3
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/21-indexing-multiple-biber-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/21-indexing-multiple-bibtex-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/21-indexing-multiple-bibtex-ms.pdf
new file mode 100644
index 0000000000..2d2de8ea76
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/21-indexing-multiple-bibtex-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/21-indexing-multiple-ms.tex b/macros/latex/contrib/biblatex-ms/doc/examples/21-indexing-multiple-ms.tex
new file mode 100644
index 0000000000..6f91a87aa6
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/21-indexing-multiple-ms.tex
@@ -0,0 +1,151 @@
+%
+% This file demonstrates indexing with the 'index' package.
+% This file is processed as follows:
+%
+% latex file
+% bibtex/biber file
+% latex file
+% makeindex -o file.ind file.idx (= makeindex file)
+% makeindex -o file.nnd file.ndx
+% makeindex -o file.tnd file.tdx
+% latex file
+%
+% Note that the file name suffix may be omitted. It's 'latex file'
+% and not 'latex file.tex'. Also note that '-t <file>' is optional.
+%
+\documentclass[a4paper]{article}
+\usepackage[T1]{fontenc}
+\usepackage[utf8]{inputenc}
+%
+% The 'index' package provides advanced indexing facilities with
+% support for multiple indexes.
+\usepackage{index}
+\usepackage[american]{babel}
+\usepackage{csquotes}
+%
+% We set the 'indexing' package option and use the 'authortitle'
+% style in this example.
+\usepackage[indexing,style=authortitle,autolang=hyphen,backend=biber]{biblatex-ms}
+\addbibresource{biblatex-examples.bib}
+%
+% We want three indexes: a general index, an index of names, and an
+% index of titles. They are defined by way of \newindex, see the
+% documentation of the 'index' package for details.
+\newindex{default}{idx}{ind}{Subject Index}
+\newindex{names}{ndx}{nnd}{Name Index}
+\newindex{titles}{tdx}{tnd}{Title Index}
+%
+% We need to redefine some index formatting directives such that
+% biblatex adds names and titles to separate indexes. All names
+% should go to the name index, hence we simply redefine the default
+% index formatting directive for names. The default definition,
+% which is found in biblatex.def, looks like this:
+%
+% \DeclareIndexNameFormat{default}{%
+% \usebibmacro{index:name}{\index}{#1}{#3}{#5}{#7}%
+% }
+%
+% As you can see, the data is simply passed on to a 'bibmacro' which
+% takes care of the formatting of the name. The definition of the
+% bibmacro, which is also found in biblatex.def, is not relevant in
+% our example because all we want to do is change or rather extend
+% the \index command, which happens to be the first argument of the
+% 'index:name' bibmacro.
+%
+\makeatletter
+\@ifpackageloaded{biblatex_legacy}
+ {\DeclareIndexNameFormat{default}{%
+ \usebibmacro{index:name}{\index[names]}{#1}{#3}{#5}{#7}}}
+ {\DeclareIndexNameFormat{default}{%
+ \usebibmacro{index:name}{\index[names]}
+ {\namepartfamily}
+ {\namepartgiven}
+ {\namepartprefix}
+ {\namepartsuffix}}}
+\makeatother
+%
+% Titles are handled in a similar way. The formatting directive we
+% need to modify is 'indextitle'. It's default definition looks like
+% this:
+%
+% \DeclareIndexFieldFormat{indextitle}{%
+% \usebibmacro{index:title}{\index}{#1}%
+% }
+%
+% We modify it such that the \index command writes to the index of
+% titles:
+%
+\DeclareIndexFieldFormat{indextitle}{%
+ \usebibmacro{index:title}{\index[titles]}{#1}%
+}
+%
+% That's it as far as splitting the index is concerned. Let's have a
+% look at some other facilities you may want to customize. By
+% default, biblatex will index the author or editor and the title of
+% all references. This behavior may be modified as desired. The
+% indexing facilities are not hard-coded. All standard styles which
+% ship with this package call two 'bibmacros' which handle the
+% indexing. These macros are called 'citeindex' and 'bibindex', both
+% of which are defined in biblatex.def. The former handles indexing
+% in citations, the latter in the bibliography. Their default
+% definitions are as follows:
+%
+% \newbibmacro*{citeindex}{%
+% \ifciteindex
+% {\indexnames{labelname}%
+% \indexfield{indextitle}}
+% {}}
+%
+% \newbibmacro*{bibindex}{%
+% \ifbibindex
+% {\indexnames{labelname}%
+% \indexfield{indextitle}}
+% {}}
+%
+% The 'labelname' field is a copy of the 'author' field, if there is
+% an author, or a copy of the 'editor' field otherwise. 'indextitle'
+% is the 'indextitle' field, if defined in the bib file, or a copy
+% of the 'title' field otherwise.
+%
+% The mechanism works like this: the \indexnames and \indexfield
+% fields tell biblatex which data to add to the index, the indexing
+% directives tell it how to index the data.
+%
+% The default settings should be fine in most cases. As an example,
+% we will modify them here such that author, editors, translators,
+% and commentators in the bibliography are indexed:
+%
+\renewbibmacro*{bibindex}{%
+ \ifbibindex
+ {\indexnames{author}%
+ \indexnames{editor}%
+ \indexnames{translator}%
+ \indexnames{commentator}%
+ \indexfield{indextitle}}
+ {}}
+%
+\begin{document}
+
+\section*{Indexing with the \texttt{index} package}
+
+% We add the contents of the entire bib file to the bibliography.
+% Note that \nocite does not add anything to the index on its own.
+\nocite{*}
+
+% We cite a few items. These citations will be added to the index.
+\cite{piccato,gaonkar,malinowski,coleridge,gerhardt,cicero}
+
+% We also add an explicit index entry.
+\index{Example entry}
+
+\clearpage
+
+% We print the printbibliography...
+\printbibliography
+% ...and the indexes
+\raggedright
+\printindex % the general index
+\printindex[names] % the name index
+\printindex[titles] % the title index
+
+\end{document}
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/22-indexing-subentry-biber-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/22-indexing-subentry-biber-ms.pdf
new file mode 100644
index 0000000000..6ba7a75b2b
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/22-indexing-subentry-biber-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/22-indexing-subentry-bibtex-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/22-indexing-subentry-bibtex-ms.pdf
new file mode 100644
index 0000000000..46330346b0
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/22-indexing-subentry-bibtex-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/22-indexing-subentry-ms.tex b/macros/latex/contrib/biblatex-ms/doc/examples/22-indexing-subentry-ms.tex
new file mode 100644
index 0000000000..a4ba9312fa
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/22-indexing-subentry-ms.tex
@@ -0,0 +1,103 @@
+%
+% This file demonstrates indexing with the 'imakeidx' package.
+% This file is processed as follows:
+%
+% latex file
+% bibtex/biber file
+% latex file
+% latex file
+%
+% Note that the file name suffix may be omitted. It's 'latex file' and not
+% 'latex file.tex'. Also note that '-t <file>' is optional.
+%
+\documentclass[a4paper]{article}
+\usepackage[T1]{fontenc}
+\usepackage[utf8]{inputenc}
+%
+% The 'imakeidx' package provides advanced indexing facilities with support for
+% multiple indexes. Unlike the 'index' package, 'imakeidx' does not generate
+% "self-protecting" index entries. So we need to protect control sequences in
+% indexing fields from expansion. For an example see the 'knuth:ct:a' entry in
+% biblatex-examples.bib.
+%
+\usepackage{imakeidx}
+\usepackage[american]{babel}
+\usepackage{csquotes}
+%
+% We set the 'indexing' package option and use the 'authortitle'
+% style in this example.
+%
+\usepackage[indexing=cite,style=authortitle,autolang=hyphen,backend=biber]{biblatex-ms}
+\addbibresource{biblatex-examples.bib}
+%
+% We want two indexes: an index of names with title subentries, an index of
+% titles organized by year. They are defined by way of \makeindex, see the
+% documentation of the 'imakeidx' package for details.
+%
+\makeindex[name=name-title,title={Name and Title Index}]
+\makeindex[name=year-title,title={Year and Title Index}]
+%
+% A 'name:title' indexing bibmacro can be found in biblatex.def. It takes the same
+% arguments as the 'index:name' bibmacro. Note that the title fields are accessed
+% inside the name indexing directive. So we have to test for missing titles.
+%
+\makeatletter
+\@ifpackageloaded{biblatex_legacy}
+ {\DeclareIndexNameFormat{name:title}{%
+ \iffieldundef{title}
+ {\usebibmacro{index:name}{\index[name-title]}{#1}{#3}{#5}{#7}}
+ {\usebibmacro{index:name:title}{\index[name-title]}{#1}{#3}{#5}{#7}}}}
+ {\DeclareIndexNameFormat{name:title}{%
+ \iffieldundef{title}
+ {\usebibmacro{index:name}{\index[name-title]}
+ {\namepartfamily}
+ {\namepartgiven}
+ {\namepartprefix}
+ {\namepartsuffix}}
+ {\usebibmacro{index:name:title}{\index[name-title]}
+ {\namepartfamily}
+ {\namepartgiven}
+ {\namepartprefix}
+ {\namepartsuffix}}}}
+\makeatother
+%
+% Auxiliary indexing macros in biblatex.def can be used to define additional
+% indexing directives with subentries. The following directive creates entries
+% for the year-title index.
+%
+\DeclareIndexFieldFormat{with:year}{%
+ \iffieldundef{year}
+ {\usebibmacro{index:entry}{\index[year-title]}{%
+ \mkbibindexentry{0}{Not dated}%
+ \subentryoperator%
+ \mkbibindexfield{\thefield{indexsorttitle}}{\emph{#1}}}}
+ {\usebibmacro{index:entry}{\index[year-title]}{%
+ \thefield{year}\subentryoperator%
+ \mkbibindexfield{\thefield{indexsorttitle}}{\emph{#1}}}}}
+%
+% We redefine the 'citeindex' bibmacro to use the new indexing directives.
+%
+\renewbibmacro*{citeindex}{%
+ \ifciteindex
+ {\indexnames[name:title]{labelname}%
+ \indexfield[with:year]{indextitle}}
+ {}}
+
+\begin{document}
+
+\section*{Indexing with the \texttt{imakeidx} package}
+
+% We cite a few items. These citations will be added to the indexes.
+\cite{knuth:ct,knuth:ct:a,knuth:ct:c,knuth:ct:d}
+\cite{aristotle:anima,aristotle:poetics,aristotle:physics,aristotle:rhetoric}
+
+\clearpage
+
+% We print the printbibliography...
+\printbibliography
+% ...and the indexes
+\raggedright
+\printindex[name-title] % the name-title index
+\printindex[year-title] % the year-title index
+
+\end{document}
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/30-style-numeric-biber-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/30-style-numeric-biber-ms.pdf
new file mode 100644
index 0000000000..3f8dd32b3d
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/30-style-numeric-biber-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/30-style-numeric-bibtex-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/30-style-numeric-bibtex-ms.pdf
new file mode 100644
index 0000000000..3240cb507d
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/30-style-numeric-bibtex-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/30-style-numeric-ms.tex b/macros/latex/contrib/biblatex-ms/doc/examples/30-style-numeric-ms.tex
new file mode 100644
index 0000000000..4302f9950d
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/30-style-numeric-ms.tex
@@ -0,0 +1,98 @@
+%
+% This file presents the 'numeric' style
+%
+\documentclass[a4paper]{article}
+\usepackage[T1]{fontenc}
+\usepackage[utf8]{inputenc}
+\usepackage[american]{babel}
+\usepackage{csquotes}
+\usepackage[style=numeric,subentry,backend=biber]{biblatex-ms}
+\usepackage{hyperref}
+\addbibresource{biblatex-examples.bib}
+% Some generic settings.
+\newcommand{\cmd}[1]{\texttt{\textbackslash #1}}
+\setlength{\parindent}{0pt}
+\begin{document}
+
+\section*{The \texttt{numeric} style}
+
+This style prints numeric citations in square brackets. It is
+similar to the standard bibliographic facilities provided by LaTeX
+and to the \texttt{plain.bst} style of legacy BibTeX.
+
+\subsection*{Additional package options}
+
+\subsubsection*{The \texttt{subentry} option}
+
+The option \texttt{subentry} affects the handling of citations
+referring to members of a reference set. If this option is enabled,
+such citations get an extra letter which identifies the member
+(it is also printed in the bibliography):
+\cite{glashow,yoon,salam,aksin,companion}.
+
+This option is disabled by default, but it has been enabled
+in this example. If disabled, citations referring to a set member
+will point to the entire set, i.e., the above citations would
+come out as
+\cite{stdmodel,set,stdmodel,set,companion}.
+
+
+\subsection*{\cmd{cite} examples}
+
+\cite{companion}
+
+\cite[59]{companion}
+
+\cite[see][]{companion}
+
+\cite[see][59--63]{companion}
+
+\subsection*{\cmd{parencite} examples}
+With the numeric style, \cmd{parencite} and \cmd{cite}
+behave the exactly the same.
+
+This is just filler text \parencite{companion}.
+
+This is just filler text \parencite[59]{companion}.
+
+This is just filler text \parencite[see][]{companion}.
+
+This is just filler text \parencite[see][59--63]{companion}.
+
+\subsection*{\cmd{textcite} examples}
+
+% The \textcite command is intended for citations integrated in the
+% flow of text, replacing the subject of the sentence.
+
+\textcite{companion} show that this is just filler text.
+
+\textcite[59]{companion} show that this is just filler text.
+
+\textcite[see][]{companion} show that this is just filler text.
+
+\textcite[see][59--63]{companion} show that this is just filler text.
+
+\subsection*{\cmd{supercite} examples}
+
+This is just filler text.\supercite{companion}
+
+\subsection*{\cmd{autocite} examples}
+
+% By default, the \autocite command works like \parencite.
+
+This is just filler text \autocite{companion}.
+
+\subsection*{Multiple citations}
+
+% By default, a list of multiple citations is not sorted. You can
+% enable sorting by setting the 'sortcites' package option.
+
+\cite{companion,augustine,bertram,cotton,hammond,massa,murray}
+
+
+% The list of references
+
+\clearpage
+\printbibliography
+
+\end{document}
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/31-style-numeric-comp-biber-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/31-style-numeric-comp-biber-ms.pdf
new file mode 100644
index 0000000000..8d278929b7
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/31-style-numeric-comp-biber-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/31-style-numeric-comp-bibtex-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/31-style-numeric-comp-bibtex-ms.pdf
new file mode 100644
index 0000000000..ea794ca134
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/31-style-numeric-comp-bibtex-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/31-style-numeric-comp-ms.tex b/macros/latex/contrib/biblatex-ms/doc/examples/31-style-numeric-comp-ms.tex
new file mode 100644
index 0000000000..ee65dc6986
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/31-style-numeric-comp-ms.tex
@@ -0,0 +1,92 @@
+%
+% This file presents the 'numeric-comp' style
+%
+\documentclass[a4paper]{article}
+\usepackage[T1]{fontenc}
+\usepackage[utf8]{inputenc}
+\usepackage[american]{babel}
+\usepackage{csquotes}
+\usepackage[style=numeric-comp,subentry,backend=biber]{biblatex-ms}
+\usepackage{hyperref}
+\addbibresource{biblatex-examples.bib}
+% Some generic settings.
+\newcommand{\cmd}[1]{\texttt{\textbackslash #1}}
+\setlength{\parindent}{0pt}
+\begin{document}
+
+\section*{The \texttt{numeric-comp} style}
+
+This style is similar to \texttt{numeric} except that a list of
+multiple citations is sorted and any sequence of more than two
+consecutive numbers is formatted as a range. This style will
+implicitly enable the \texttt{sortcites} package option at load
+time.
+
+\subsection*{Additional package options}
+
+\subsubsection*{The \texttt{subentry} option}
+
+The option \texttt{subentry} affects the handling of citations
+referring to members of a reference set. If this option is enabled,
+such citations get an extra letter which identifies the member
+(it is also printed in the bibliography):
+\cite{glashow,yoon,salam,aksin,companion}.
+
+This option is disabled by default, but it has been enabled
+in this example. If disabled, citations referring to a set member
+will point to the entire set, i.e., the above citations would
+come out as
+\begingroup\boolfalse{bbx:subentry}% don't try this at home
+\cite{stdmodel,set,stdmodel,set,companion}.
+\endgroup
+
+\subsection*{The \texttt{subentrycomp} option}
+
+The option \texttt{subentrycomp} controls whether or not citations
+to subentries of the same sets are compressed as well.
+It only becomes relevant if \texttt{subentry} is set to \texttt{true},
+with \texttt{subentry=false} it has no effect.
+If \texttt{subentrycomp} is enabled,
+subentries that belong to the same
+set are shown in a more compact form:
+\cite{glashow,herrmann,aksin,yoon,salam,companion}.
+
+If the option is disabled, subentries of sets are shown as in
+the \texttt{numeric} style:
+\begingroup\togglefalse{cbx:subentrycomp}% don't try this at home
+\cite{glashow,herrmann,aksin,yoon,salam,companion}.
+\endgroup
+
+This option is implemented for backwards compatibility,
+earlier versions behaved like
+\texttt{subentrycomp=false}, current versions have
+\texttt{subentrycomp=true} enabled.
+
+\subsection*{Multiple citations}
+
+\cite{bertram,augustine}
+
+\cite{murray,bertram,augustine,companion,cotton}
+
+\cite{augustine,bertram,cotton,hammond,set,massa,murray}
+
+\cite{bertram,companion,cotton,augustine,massa,set,hammond,murray,stdmodel}
+
+\cite{yoon,weinberg}
+
+\subsection*{Multiple citations with \cmd{supercite}}
+
+This is just filler text.\supercite{bertram,augustine}
+
+This is just filler text.\supercite{murray,bertram,augustine,companion,cotton}
+
+This is just filler text.\supercite{augustine,bertram,cotton,hammond,set,massa,murray}
+
+This is just filler text.\supercite{bertram,companion,cotton,augustine,massa,set,hammond,murray,stdmodel}
+
+This is just filler text.\supercite{yoon,weinberg}
+
+\clearpage
+\printbibliography
+
+\end{document}
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/32-style-numeric-verb-biber-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/32-style-numeric-verb-biber-ms.pdf
new file mode 100644
index 0000000000..ab689ebb03
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/32-style-numeric-verb-biber-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/32-style-numeric-verb-bibtex-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/32-style-numeric-verb-bibtex-ms.pdf
new file mode 100644
index 0000000000..ad9234e1f4
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/32-style-numeric-verb-bibtex-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/32-style-numeric-verb-ms.tex b/macros/latex/contrib/biblatex-ms/doc/examples/32-style-numeric-verb-ms.tex
new file mode 100644
index 0000000000..5dd117110f
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/32-style-numeric-verb-ms.tex
@@ -0,0 +1,51 @@
+%
+% This file presents the 'numeric-verb' style
+%
+\documentclass[a4paper]{article}
+\usepackage[T1]{fontenc}
+\usepackage[utf8]{inputenc}
+\usepackage[american]{babel}
+\usepackage{csquotes}
+\usepackage[style=numeric-verb,subentry,backend=biber]{biblatex-ms}
+\usepackage{hyperref}
+\addbibresource{biblatex-examples.bib}
+% Some generic settings.
+\newcommand{\cmd}[1]{\texttt{\textbackslash #1}}
+\setlength{\parindent}{0pt}
+\begin{document}
+
+\section*{The \texttt{numeric-verb} style}
+
+This style is similar to \texttt{numeric} except that a list of
+multiple citations is printed in a slightly more verbose format.
+
+\subsubsection*{The \texttt{subentry} option}
+
+The option \texttt{subentry} affects the handling of citations
+referring to members of a reference set. If this option is enabled,
+such citations get an extra letter which identifies the member
+(it is also printed in the bibliography):
+\cite{glashow,yoon,salam,aksin,companion}.
+
+This option is disabled by default, but it has been enabled
+in this example. If disabled, citations referring to a set member
+will point to the entire set, i.e., the above citations would
+come out as
+\cite{stdmodel,set,stdmodel,set,companion}.
+
+\subsection*{Multiple citations}
+
+\cite{hammond,massa,augustine,cotton,set,murray,bertram,stdmodel}
+
+\cite{yoon,salam}
+
+\subsection*{Multiple citations with \cmd{supercite}}
+
+This is just filler text.\supercite{hammond,massa,augustine,cotton,set,murray,bertram,stdmodel}
+
+This is just filler text.\supercite{yoon,salam}
+
+\clearpage
+\printbibliography
+
+\end{document}
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/40-style-alphabetic-biber-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/40-style-alphabetic-biber-ms.pdf
new file mode 100644
index 0000000000..17f5db2dce
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/40-style-alphabetic-biber-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/40-style-alphabetic-bibtex-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/40-style-alphabetic-bibtex-ms.pdf
new file mode 100644
index 0000000000..1095df8ce6
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/40-style-alphabetic-bibtex-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/40-style-alphabetic-ms.tex b/macros/latex/contrib/biblatex-ms/doc/examples/40-style-alphabetic-ms.tex
new file mode 100644
index 0000000000..6da7107b1d
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/40-style-alphabetic-ms.tex
@@ -0,0 +1,78 @@
+%
+% This file presents the 'alphabetic' style
+%
+\documentclass[a4paper]{article}
+\usepackage[T1]{fontenc}
+\usepackage[utf8]{inputenc}
+\usepackage[american]{babel}
+\usepackage{csquotes}
+\usepackage[style=alphabetic,backend=biber]{biblatex-ms}
+\usepackage{hyperref}
+\addbibresource{biblatex-examples.bib}
+% Some generic settings.
+\newcommand{\cmd}[1]{\texttt{\textbackslash #1}}
+\setlength{\parindent}{0pt}
+\begin{document}
+
+\section*{The \texttt{alphabetic} style}
+
+This style prints alphabetic citations similar to the
+\texttt{alpha.bst} style of legacy BibTeX. The alphabetic labels
+resemble a compact author-year style to some extent, but the way
+they are employed is similar to a numeric citation scheme.
+
+\subsection*{\cmd{cite} examples}
+
+\cite{companion}
+
+\cite[59]{companion}
+
+\cite[see][]{companion}
+
+\cite[see][59--63]{companion}
+
+\subsection*{\cmd{parencite} examples}
+
+% With this style, the \parencite command is similar to \cite at
+% first glance, but the placement of the prenote argument is
+% different.
+
+This is just filler text \parencite{companion}.
+
+This is just filler text \parencite[59]{companion}.
+
+This is just filler text \parencite[see][]{companion}.
+
+This is just filler text \parencite[see][59--63]{companion}.
+
+\subsection*{\cmd{textcite} examples}
+
+\textcite{companion} show that this is just filler text.
+
+\textcite[59]{companion} show that this is just filler text.
+
+\textcite[see][]{companion} show that this is just filler text.
+
+\textcite[see][59--63]{companion} show that this is just filler text.
+
+\subsection*{\cmd{autocite} examples}
+
+% By default, the \autocite command works like \parencite.
+
+This is just filler text \autocite{companion}.
+
+\subsection*{Multiple citations}
+
+% By default, a list of multiple citations is not sorted. You can
+% enable sorting by setting the 'sortcites' package option.
+
+\cite{companion,augustine,bertram,cotton,hammond,massa,murray}
+
+\clearpage
+
+% The list of references
+
+\nocite{*}
+\printbibliography
+
+\end{document}
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/41-style-alphabetic-verb-biber-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/41-style-alphabetic-verb-biber-ms.pdf
new file mode 100644
index 0000000000..3129efe80c
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/41-style-alphabetic-verb-biber-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/41-style-alphabetic-verb-bibtex-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/41-style-alphabetic-verb-bibtex-ms.pdf
new file mode 100644
index 0000000000..2bfe80084d
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/41-style-alphabetic-verb-bibtex-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/41-style-alphabetic-verb-ms.tex b/macros/latex/contrib/biblatex-ms/doc/examples/41-style-alphabetic-verb-ms.tex
new file mode 100644
index 0000000000..aebf75a333
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/41-style-alphabetic-verb-ms.tex
@@ -0,0 +1,29 @@
+%
+% This file presents the 'alphabetic-verb' style
+%
+\documentclass[a4paper]{article}
+\usepackage[T1]{fontenc}
+\usepackage[utf8]{inputenc}
+\usepackage[american]{babel}
+\usepackage{csquotes}
+\usepackage[style=alphabetic-verb,backend=biber]{biblatex-ms}
+\usepackage{hyperref}
+\addbibresource{biblatex-examples.bib}
+% Some generic settings.
+\newcommand{\cmd}[1]{\texttt{\textbackslash #1}}
+\setlength{\parindent}{0pt}
+\begin{document}
+
+\section*{The \texttt{alphabetic-verb} style}
+
+This style is similar to \texttt{alphabetic} except that a list of
+multiple citations is printed in a slightly more verbose format.
+
+\subsection*{Multiple citations}
+
+\cite{hammond,massa,augustine,cotton,murray,bertram}
+
+\clearpage
+\printbibliography
+
+\end{document}
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/42-style-alphabetic-template-biber-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/42-style-alphabetic-template-biber-ms.pdf
new file mode 100644
index 0000000000..ab18405a1b
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/42-style-alphabetic-template-biber-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/42-style-alphabetic-template-bibtex-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/42-style-alphabetic-template-bibtex-ms.pdf
new file mode 100644
index 0000000000..e98fbcc4df
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/42-style-alphabetic-template-bibtex-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/42-style-alphabetic-template-ms.tex b/macros/latex/contrib/biblatex-ms/doc/examples/42-style-alphabetic-template-ms.tex
new file mode 100644
index 0000000000..be8fbfad58
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/42-style-alphabetic-template-ms.tex
@@ -0,0 +1,29 @@
+%
+% This file presents the 'alphabetic' style with labels formatted with
+% '\DeclareLabelalphaTemplate'.
+%
+\documentclass[a4paper]{article}
+\usepackage[T1]{fontenc}
+\usepackage[utf8]{inputenc}
+\usepackage[american]{babel}
+\usepackage{csquotes}
+\usepackage[style=alphabetic,backend=biber]{biblatex-ms}
+\usepackage{hyperref}
+\addbibresource{biblatex-examples.bib}
+
+\DeclareLabelalphaTemplate{
+ \labelelement{
+ \field[final]{shorthand}
+ \field{label}
+ \field[strwidth=3,strside=left,ifnames=1]{labelname}
+ \field[strwidth=1,strside=left]{labelname}
+ }
+ \labelelement{
+ \field[strwidth=2,strside=right]{year}
+ }
+}
+
+\begin{document}
+Filler text \parencite{wassenberg,cicero,companion,kant:kpv,kant:ku,cms,ctan}.
+\printbibliography
+\end{document}
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/50-style-authoryear-biber-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/50-style-authoryear-biber-ms.pdf
new file mode 100644
index 0000000000..dbf2370b9d
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/50-style-authoryear-biber-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/50-style-authoryear-bibtex-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/50-style-authoryear-bibtex-ms.pdf
new file mode 100644
index 0000000000..371dcc0e4c
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/50-style-authoryear-bibtex-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/50-style-authoryear-ms.tex b/macros/latex/contrib/biblatex-ms/doc/examples/50-style-authoryear-ms.tex
new file mode 100644
index 0000000000..cb91530dc5
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/50-style-authoryear-ms.tex
@@ -0,0 +1,224 @@
+%
+% This file presents the 'authoryear' style
+%
+\documentclass[a4paper]{article}
+\usepackage[T1]{fontenc}
+\usepackage[utf8]{inputenc}
+\usepackage[american]{babel}
+\usepackage{csquotes}
+\usepackage[style=authoryear,backend=biber]{biblatex-ms}
+\usepackage{hyperref}
+\addbibresource{biblatex-examples.bib}
+\setlength{\parindent}{0pt}
+% Some generic settings.
+\newcommand{\cmd}[1]{\texttt{\textbackslash #1}}
+\setlength{\parindent}{0pt}
+\newenvironment{bibsample}
+ {\trivlist\samepage
+ \setlength{\itemsep}{0pt}}
+ {\endtrivlist}
+\begin{document}
+
+\section*{The \texttt{authoryear} style}
+
+This style implements the author-year citation scheme.
+
+\subsection*{Additional package options}
+
+\subsubsection*{The \texttt{dashed} option}
+
+By default, this style replaces recurrent authors/editors in the
+bibliography by a dash so that items by the same author or editor
+are visually grouped. This feature is controlled by the package
+option \texttt{dashed}. Setting \texttt{dashed=false} in the
+preamble will disable this feature. The default setting is
+\texttt{dashed=true}.
+
+\subsubsection*{The \texttt{mergedate} option}
+
+Since this style prints the date label after the author/editor in the
+bibliography, there are effectively two dates in the bibliography:
+the full date specification (e.g., \enquote{2001}, \enquote{June
+2006}, \enquote{5th~Jan. 2008}, whose format is controlled by the
+\texttt{date} option) and the date label (e.g., \enquote{2006a},
+whose format is controlled with the \texttt{labeldate} option),
+as found in citations. The \texttt{mergedate} option controls whether
+or not date specifications are merged with the date label.
+This option is best explained by example. Note that
+it only affects the bibliography. Citations use the date label only.
+
+\begin{bibsample}
+\item Doe 2000
+\item Doe 2003a
+\item Doe 2003b
+\item Doe 2006a
+\item Doe 2006b
+\item Doe 2017
+\end{bibsample}
+
+\texttt{mergedate=false} strictly separates the date specification
+(following \texttt{date}) from the date label (following \texttt{labeldate}).
+The year will always be printed twice:
+
+\begin{bibsample}
+\item Doe, John (2000). \emph{Book~1}. Location: Publisher, 2000.
+\item Doe, John (2003a). \emph{Book~2}. Location: Publisher, 2003.
+\item Doe, John (2003b). \emph{Book~3}. Location: Publisher, 2003.
+\item Doe, John (2006a). \enquote{Article~1}. In: \emph{Monthly Journal} 25.6
+(June~2006), pp.~70--85.
+\item Doe, John (2006b). \enquote{Article~2}. In: \emph{Quarterly Journal} 14.3
+(Fall~2006), pp.~5--25.
+\item Doe, John (2017). \emph{Webpage}. 7th Aug. 2017.
+\end{bibsample}
+
+\texttt{mergedate=minimum} omits the date whenever the full date
+and the date label have exactly the same precision (date-time granularity).
+
+\begin{bibsample}
+\item Doe, John (2000). \emph{Book~1}. Location: Publisher.
+\item Doe, John (2003a). \emph{Book~2}. Location: Publisher, 2003.
+\item Doe, John (2003b). \emph{Book~3}. Location: Publisher, 2003.
+\item Doe, John (2006a). \enquote{Article~1}. In: \emph{Monthly Journal} 25.6
+(June~2006), pp.~70--85.
+\item Doe, John (2006b). \enquote{Article~2}. In: \emph{Quarterly Journal} 14.3
+(Fall~2006), pp.~5--25.
+\item Doe, John (2017). \emph{Webpage}. 7th Aug. 2017.
+\end{bibsample}
+
+\texttt{mergedate=basic} is similar in concept but more economical.
+It will also omit the date if it differs from the date label only by
+\texttt{extradate}.
+
+\begin{bibsample}
+\item Doe, John (2000). \emph{Book~1}. Location: Publisher.
+\item Doe, John (2003a). \emph{Book~2}. Location: Publisher.
+\item Doe, John (2003b). \emph{Book~3}. Location: Publisher.
+\item Doe, John (2006a). \enquote{Article~1}. In: \emph{Monthly Journal} 25.6
+(June~2006), pp.~70--85.
+\item Doe, John (2006b). \enquote{Article~2}. In: \emph{Quarterly Journal} 14.3
+(Fall~2006), pp.~5--25.
+\item Doe, John (2017). \emph{Webpage}. 7th Aug. 2017.
+\end{bibsample}
+
+\texttt{mergedate=compact} merges all date specifications with the
+date labels. The merged date is printed in \texttt{date} format,
+not \texttt{labeldate}, even if it is printed in the position of
+the date label. The \texttt{issue} field is still treated specially:
+
+\begin{bibsample}
+\item Doe, John (2000). \emph{Book~1}. Location: Publisher.
+\item Doe, John (2003a). \emph{Book~2}. Location: Publisher.
+\item Doe, John (2003b). \emph{Book~3}. Location: Publisher.
+\item Doe, John (June 2006a). \enquote{Article~1}. In: \emph{Monthly Journal} 25.6, pp.~70--85.
+\item Doe, John (2006b). \enquote{Article~2}. In: \emph{Quarterly Journal} 14.3
+(Fall), pp.~5--25.
+\item Doe, John (7th Aug. 2017).\emph{Webpage}.
+\end{bibsample}
+
+\texttt{mergedate=maximum} strives for maximum compactness.
+Like \texttt{mergedate=compact} this option merges the date
+into the date label.
+Even the \texttt{issue} field is merged with the date label:
+
+\begin{bibsample}
+\item Doe, John (2000). \emph{Book~1}. Location: Publisher.
+\item Doe, John (2003a). \emph{Book~2}. Location: Publisher.
+\item Doe, John (2003b). \emph{Book~3}. Location: Publisher.
+\item Doe, John (June 2006a). \enquote{Article~1}. In: \emph{Monthly Journal} 25.6, pp.~70--85.
+\item Doe, John (Fall 2006b). \enquote{Article~2}. In: \emph{Quarterly Journal} 14.3, pp.~5--25.
+\item Doe, John (7th Aug. 2017).\emph{Webpage}.
+\end{bibsample}
+
+\texttt{mergedate=true} is an alias for \texttt{mergedate=compact}.
+This is the default setting.
+
+\subsection*{\cmd{cite} examples}
+
+\cite{companion}
+
+\cite[59]{companion}
+
+\cite[see][]{companion}
+
+\cite[see][59--63]{companion}
+
+\subsection*{\cmd{parencite} examples}
+
+This is just filler text \parencite{companion}.
+
+This is just filler text \parencite[59]{companion}.
+
+This is just filler text \parencite[see][]{companion}.
+
+This is just filler text \parencite[see][59--63]{companion}.
+
+\subsection*{\cmd{parencite*} examples}
+
+\citeauthor{companion} show that this is just filler
+text \parencite*{companion}.
+
+\subsection*{\cmd{footcite} examples}
+
+% Even though the author-year scheme is usually employed in
+% conjuntion with in-text citations, it works just fine in
+% footnotes, too.
+
+This is just filler text.\footcite{companion}
+
+This is just filler text.\footcite[59]{companion}
+
+This is just filler text.\footcite[See][]{companion}
+
+This is just filler text.\footcite[See][59--63]{companion}
+
+\subsection*{\cmd{textcite} examples}
+
+\textcite{companion} show that this is just filler text.
+
+\textcite[59]{companion} show that this is just filler text.
+
+\textcite[see][]{companion} show that this is just filler text.
+
+\textcite[see][59--63]{companion} show that this is just filler text.
+
+\subsection*{\cmd{autocite} examples}
+
+% By default, the \autocite command works like \parencite.
+% The starred version works like \parencite*.
+
+This is just filler text \autocite{companion}.
+
+\citeauthor{companion} show that this is just filler
+text \autocite*{companion}.
+
+\subsection*{Multiple citations}
+
+% By default, a list of multiple citations is not sorted. You can
+% enable sorting by setting the 'sortcites' package option.
+
+\cite{knuth:ct:c,aristotle:physics,knuth:ct:b,aristotle:poetics,aristotle:rhetoric,knuth:ct:d}
+
+\subsection*{Shorthand examples}
+
+% If an entry in the bib file includes a 'shorthand' field, the
+% shorthand replaces the regular author-title citation.
+
+\cite{kant:kpv,kant:ku}
+
+\clearpage
+
+% The list of shorthands.
+
+\printshorthands
+
+% The list of references. Note that the year is printed after the
+% author or editor and that recurring author and editor names are
+% replaced by a dash unless the entry is the first one on the
+% current page or double page spread (depending on the setting of
+% the 'pagetracker' package option). This style will implicitly set
+% 'pagetracker=spread' at load time.
+
+\nocite{*}
+\printbibliography
+
+\end{document}
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/51-style-authoryear-ibid-biber-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/51-style-authoryear-ibid-biber-ms.pdf
new file mode 100644
index 0000000000..5920b14fc4
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/51-style-authoryear-ibid-biber-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/51-style-authoryear-ibid-bibtex-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/51-style-authoryear-ibid-bibtex-ms.pdf
new file mode 100644
index 0000000000..6408631c78
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/51-style-authoryear-ibid-bibtex-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/51-style-authoryear-ibid-ms.tex b/macros/latex/contrib/biblatex-ms/doc/examples/51-style-authoryear-ibid-ms.tex
new file mode 100644
index 0000000000..0914131139
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/51-style-authoryear-ibid-ms.tex
@@ -0,0 +1,208 @@
+%
+% This file presents the 'authoryear-ibid' style
+%
+\documentclass[a4paper]{article}
+\usepackage[T1]{fontenc}
+\usepackage[utf8]{inputenc}
+\usepackage[american]{babel}
+\usepackage{csquotes}
+\usepackage[style=authoryear-ibid,backend=biber]{biblatex-ms}
+\usepackage{hyperref}
+\addbibresource{biblatex-examples.bib}
+% Some generic settings:
+\newcommand{\cmd}[1]{\texttt{\textbackslash #1}}
+\setlength{\parindent}{0pt}
+\newenvironment{bibsample}
+ {\trivlist\samepage
+ \setlength{\itemsep}{0pt}}
+ {\endtrivlist}
+\begin{document}
+
+\section*{The \texttt{authoryear-ibid} style}
+
+This citation style is a variant of the \texttt{authoryear} style.
+Immediately repeated citations are replaced by the abbreviation
+`ibidem' unless the citation is the first one on the current page or
+double page spread (depending on the setting of the
+\texttt{pagetracker} package option). This style is intended for
+citations given in footnotes.
+
+\subsection*{Additional package options}
+
+\subsubsection*{The \texttt{ibidpage} option}
+
+The scholarly abbreviation \emph{ibidem} is sometimes taken to mean
+both `same author~+ same title' and `same author~+ same title~+ same
+page' in traditional citation schemes. By default, this is not the
+case with this style because it may lead to ambiguous citations.
+With \texttt{ibidpage=true} a page range postnote will be suppressed
+in an \emph{ibidem} citation if the last citation was to the same
+page range. With \texttt{ibidpage=false} the postnote is not omitted.
+Citations to different page ranges than the previous always produce
+the page ranges with either setting.
+The default setting is \texttt{ibidpage=false}.
+
+Consider the following example citations
+\begin{verbatim}
+\cite[378]{sigfridsson}
+\cite[378]{sigfridsson}
+\cite[12]{worman}
+\cite[13]{worman}
+\end{verbatim}
+%
+If \texttt{ibidpage} is set to \texttt{true}, the citations
+come out as
+\begin{quote}
+Sigfridsson and Ryde 1998, p.~378
+
+ibid.
+
+Worman 2002, p.~12
+
+ibid., p.~13
+\end{quote}
+%
+The result for \texttt{ibidpage=false} is
+\begin{quote}
+Sigfridsson and Ryde 1998, p.~378
+
+ibid., p.~378
+
+Worman 2002, p.~12
+
+ibid., p.~13
+\end{quote}
+
+\subsubsection*{The \texttt{dashed} option}
+
+By default, this style replaces recurrent authors/editors in the
+bibliography by a dash so that items by the same author or editor
+are visually grouped. This feature is controlled by the package
+option \texttt{dashed}. Setting \texttt{dashed=false} in the
+preamble will disable this feature. The default setting is
+\texttt{dashed=true}.
+
+\subsubsection*{The \texttt{mergedate} option}
+
+Since this style prints the date label after the author/editor in the
+bibliography, there are effectively two dates in the bibliography:
+the full date specification (e.g., \enquote{2001}, \enquote{June
+2006}, \enquote{5th~Jan. 2008}, whose format is controlled by the
+\texttt{date} option) and the date label (e.g., \enquote{2006a},
+whose format is controlled with the \texttt{labeldate} option),
+as found in citations. The \texttt{mergedate} option controls whether
+or not date specifications are merged with the date label.
+This option is best explained by example. Note that
+it only affects the bibliography. Citations use the date label only.
+
+\begin{bibsample}
+\item Doe 2000
+\item Doe 2003a
+\item Doe 2003b
+\item Doe 2006a
+\item Doe 2006b
+\item Doe 2017
+\end{bibsample}
+
+\texttt{mergedate=false} strictly separates the date specification
+(following \texttt{date}) from the date label (following \texttt{labeldate}).
+The year will always be printed twice:
+
+\begin{bibsample}
+\item Doe, John (2000). \emph{Book~1}. Location: Publisher, 2000.
+\item Doe, John (2003a). \emph{Book~2}. Location: Publisher, 2003.
+\item Doe, John (2003b). \emph{Book~3}. Location: Publisher, 2003.
+\item Doe, John (2006a). \enquote{Article~1}. In: \emph{Monthly Journal} 25.6
+(June~2006), pp.~70--85.
+\item Doe, John (2006b). \enquote{Article~2}. In: \emph{Quarterly Journal} 14.3
+(Fall~2006), pp.~5--25.
+\item Doe, John (2017). \emph{Webpage}. 7th Aug. 2017.
+\end{bibsample}
+
+\texttt{mergedate=minimum} omits the date whenever the full date
+and the date label have exactly the same precision (date-time granularity).
+
+\begin{bibsample}
+\item Doe, John (2000). \emph{Book~1}. Location: Publisher.
+\item Doe, John (2003a). \emph{Book~2}. Location: Publisher, 2003.
+\item Doe, John (2003b). \emph{Book~3}. Location: Publisher, 2003.
+\item Doe, John (2006a). \enquote{Article~1}. In: \emph{Monthly Journal} 25.6
+(June~2006), pp.~70--85.
+\item Doe, John (2006b). \enquote{Article~2}. In: \emph{Quarterly Journal} 14.3
+(Fall~2006), pp.~5--25.
+\item Doe, John (2017). \emph{Webpage}. 7th Aug. 2017.
+\end{bibsample}
+
+\texttt{mergedate=basic} is similar in concept but more economical.
+It will also omit the date if it differs from the date label only by
+\texttt{extradate}.
+
+\begin{bibsample}
+\item Doe, John (2000). \emph{Book~1}. Location: Publisher.
+\item Doe, John (2003a). \emph{Book~2}. Location: Publisher.
+\item Doe, John (2003b). \emph{Book~3}. Location: Publisher.
+\item Doe, John (2006a). \enquote{Article~1}. In: \emph{Monthly Journal} 25.6
+(June~2006), pp.~70--85.
+\item Doe, John (2006b). \enquote{Article~2}. In: \emph{Quarterly Journal} 14.3
+(Fall~2006), pp.~5--25.
+\item Doe, John (2017). \emph{Webpage}. 7th Aug. 2017.
+\end{bibsample}
+
+\texttt{mergedate=compact} merges all date specifications with the
+date labels. The merged date is printed in \texttt{date} format,
+not \texttt{labeldate}, even if it is printed in the position of
+the date label. The \texttt{issue} field is still treated specially:
+
+\begin{bibsample}
+\item Doe, John (2000). \emph{Book~1}. Location: Publisher.
+\item Doe, John (2003a). \emph{Book~2}. Location: Publisher.
+\item Doe, John (2003b). \emph{Book~3}. Location: Publisher.
+\item Doe, John (June 2006a). \enquote{Article~1}. In: \emph{Monthly Journal} 25.6, pp.~70--85.
+\item Doe, John (2006b). \enquote{Article~2}. In: \emph{Quarterly Journal} 14.3
+(Fall), pp.~5--25.
+\item Doe, John (7th Aug. 2017).\emph{Webpage}.
+\end{bibsample}
+
+\texttt{mergedate=maximum} strives for maximum compactness.
+Like \texttt{mergedate=compact} this option merges the date
+into the date label.
+Even the \texttt{issue} field is merged with the date label:
+
+\begin{bibsample}
+\item Doe, John (2000). \emph{Book~1}. Location: Publisher.
+\item Doe, John (2003a). \emph{Book~2}. Location: Publisher.
+\item Doe, John (2003b). \emph{Book~3}. Location: Publisher.
+\item Doe, John (June 2006a). \enquote{Article~1}. In: \emph{Monthly Journal} 25.6, pp.~70--85.
+\item Doe, John (Fall 2006b). \enquote{Article~2}. In: \emph{Quarterly Journal} 14.3, pp.~5--25.
+\item Doe, John (7th Aug. 2017).\emph{Webpage}.
+\end{bibsample}
+
+\texttt{mergedate=true} is an alias for \texttt{mergedate=compact}.
+This is the default setting.
+
+\subsection*{Hints}
+
+If you want terms such as \emph{ibidem} to be printed in italics,
+redefine \cmd{mkibid} as follows:
+
+\begin{verbatim}
+\renewcommand*{\mkibid}{\emph}
+\end{verbatim}
+
+\subsection*{\cmd{footcite} examples}
+
+This is just filler text.\footcite{companion}
+% Immediately repeated citations are replaced by the
+% abbreviation 'ibidem'...
+This is just filler text.\footcite{companion}
+\clearpage
+% ... unless the citation is the first one on the current page
+% or double page spread (depending on the setting of the
+% 'pagetracker' package option).
+This is just filler text.\footcite[55]{companion}
+This is just filler text.\footcite[55]{companion}
+
+\clearpage
+\printbibliography
+
+\end{document}
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/52-style-authoryear-comp-biber-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/52-style-authoryear-comp-biber-ms.pdf
new file mode 100644
index 0000000000..49a106d3cf
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/52-style-authoryear-comp-biber-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/52-style-authoryear-comp-bibtex-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/52-style-authoryear-comp-bibtex-ms.pdf
new file mode 100644
index 0000000000..7edceaae23
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/52-style-authoryear-comp-bibtex-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/52-style-authoryear-comp-ms.tex b/macros/latex/contrib/biblatex-ms/doc/examples/52-style-authoryear-comp-ms.tex
new file mode 100644
index 0000000000..3bee0e78ee
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/52-style-authoryear-comp-ms.tex
@@ -0,0 +1,146 @@
+%
+% This file presents the 'authoryear-comp' style
+%
+\documentclass[a4paper]{article}
+\usepackage[T1]{fontenc}
+\usepackage[utf8]{inputenc}
+\usepackage[american]{babel}
+\usepackage{csquotes}
+\usepackage[style=authoryear-comp,backend=biber]{biblatex-ms}
+\usepackage{hyperref}
+\addbibresource{biblatex-examples.bib}
+% Some generic settings.
+\newcommand{\cmd}[1]{\texttt{\textbackslash #1}}
+\setlength{\parindent}{0pt}
+\newenvironment{bibsample}
+ {\trivlist\samepage
+ \setlength{\itemsep}{0pt}}
+ {\endtrivlist}
+\begin{document}
+
+\section*{The \texttt{authoryear-comp} style}
+
+This style is a compact version of the \texttt{authoryear} style
+which prints the author only once if subsequent references passed to
+a single citation command share the same author. If they share the
+same year as well, the year is also printed only once. This style
+will implicitly enable the \texttt{sortcites} package option at load
+time.
+
+\subsection*{Additional package options}
+
+\subsubsection*{The \texttt{dashed} option}
+
+By default, this style replaces recurrent authors/editors in the
+bibliography by a dash so that items by the same author or editor
+are visually grouped. This feature is controlled by the package
+option \texttt{dashed}. Setting \texttt{dashed=false} in the
+preamble will disable this feature. The default setting is
+\texttt{dashed=true}.
+
+\subsubsection*{The \texttt{mergedate} option}
+
+Since this style prints the date label after the author/editor in the
+bibliography, there are effectively two dates in the bibliography:
+the full date specification (e.g., \enquote{2001}, \enquote{June
+2006}, \enquote{5th~Jan. 2008}, whose format is controlled by the
+\texttt{date} option) and the date label (e.g., \enquote{2006a},
+whose format is controlled with the \texttt{labeldate} option),
+as found in citations. The \texttt{mergedate} option controls whether
+or not date specifications are merged with the date label.
+This option is best explained by example. Note that
+it only affects the bibliography. Citations use the date label only.
+
+\begin{bibsample}
+\item Doe 2000
+\item Doe 2003a
+\item Doe 2003b
+\item Doe 2006a
+\item Doe 2006b
+\item Doe 2017
+\end{bibsample}
+
+\texttt{mergedate=false} strictly separates the date specification
+(following \texttt{date}) from the date label (following \texttt{labeldate}).
+The year will always be printed twice:
+
+\begin{bibsample}
+\item Doe, John (2000). \emph{Book~1}. Location: Publisher, 2000.
+\item Doe, John (2003a). \emph{Book~2}. Location: Publisher, 2003.
+\item Doe, John (2003b). \emph{Book~3}. Location: Publisher, 2003.
+\item Doe, John (2006a). \enquote{Article~1}. In: \emph{Monthly Journal} 25.6
+(June~2006), pp.~70--85.
+\item Doe, John (2006b). \enquote{Article~2}. In: \emph{Quarterly Journal} 14.3
+(Fall~2006), pp.~5--25.
+\item Doe, John (2017). \emph{Webpage}. 7th Aug. 2017.
+\end{bibsample}
+
+\texttt{mergedate=minimum} omits the date whenever the full date
+and the date label have exactly the same precision (date-time granularity).
+
+\begin{bibsample}
+\item Doe, John (2000). \emph{Book~1}. Location: Publisher.
+\item Doe, John (2003a). \emph{Book~2}. Location: Publisher, 2003.
+\item Doe, John (2003b). \emph{Book~3}. Location: Publisher, 2003.
+\item Doe, John (2006a). \enquote{Article~1}. In: \emph{Monthly Journal} 25.6
+(June~2006), pp.~70--85.
+\item Doe, John (2006b). \enquote{Article~2}. In: \emph{Quarterly Journal} 14.3
+(Fall~2006), pp.~5--25.
+\item Doe, John (2017). \emph{Webpage}. 7th Aug. 2017.
+\end{bibsample}
+
+\texttt{mergedate=basic} is similar in concept but more economical.
+It will also omit the date if it differs from the date label only by
+\texttt{extradate}.
+
+\begin{bibsample}
+\item Doe, John (2000). \emph{Book~1}. Location: Publisher.
+\item Doe, John (2003a). \emph{Book~2}. Location: Publisher.
+\item Doe, John (2003b). \emph{Book~3}. Location: Publisher.
+\item Doe, John (2006a). \enquote{Article~1}. In: \emph{Monthly Journal} 25.6
+(June~2006), pp.~70--85.
+\item Doe, John (2006b). \enquote{Article~2}. In: \emph{Quarterly Journal} 14.3
+(Fall~2006), pp.~5--25.
+\item Doe, John (2017). \emph{Webpage}. 7th Aug. 2017.
+\end{bibsample}
+
+\texttt{mergedate=compact} merges all date specifications with the
+date labels. The merged date is printed in \texttt{date} format,
+not \texttt{labeldate}, even if it is printed in the position of
+the date label. The \texttt{issue} field is still treated specially:
+
+\begin{bibsample}
+\item Doe, John (2000). \emph{Book~1}. Location: Publisher.
+\item Doe, John (2003a). \emph{Book~2}. Location: Publisher.
+\item Doe, John (2003b). \emph{Book~3}. Location: Publisher.
+\item Doe, John (June 2006a). \enquote{Article~1}. In: \emph{Monthly Journal} 25.6, pp.~70--85.
+\item Doe, John (2006b). \enquote{Article~2}. In: \emph{Quarterly Journal} 14.3
+(Fall), pp.~5--25.
+\item Doe, John (7th Aug. 2017).\emph{Webpage}.
+\end{bibsample}
+
+\texttt{mergedate=maximum} strives for maximum compactness.
+Like \texttt{mergedate=compact} this option merges the date
+into the date label.
+Even the \texttt{issue} field is merged with the date label:
+
+\begin{bibsample}
+\item Doe, John (2000). \emph{Book~1}. Location: Publisher.
+\item Doe, John (2003a). \emph{Book~2}. Location: Publisher.
+\item Doe, John (2003b). \emph{Book~3}. Location: Publisher.
+\item Doe, John (June 2006a). \enquote{Article~1}. In: \emph{Monthly Journal} 25.6, pp.~70--85.
+\item Doe, John (Fall 2006b). \enquote{Article~2}. In: \emph{Quarterly Journal} 14.3, pp.~5--25.
+\item Doe, John (7th Aug. 2017).\emph{Webpage}.
+\end{bibsample}
+
+\texttt{mergedate=true} is an alias for \texttt{mergedate=compact}.
+This is the default setting.
+
+\subsection*{Multiple citations}
+
+\cite{knuth:ct:c,aristotle:physics,knuth:ct:b,aristotle:poetics,aristotle:rhetoric,knuth:ct:d}
+
+\clearpage
+\printbibliography
+
+\end{document}
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/53-style-authoryear-icomp-biber-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/53-style-authoryear-icomp-biber-ms.pdf
new file mode 100644
index 0000000000..28c7857f2a
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/53-style-authoryear-icomp-biber-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/53-style-authoryear-icomp-bibtex-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/53-style-authoryear-icomp-bibtex-ms.pdf
new file mode 100644
index 0000000000..f40d0d95b7
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/53-style-authoryear-icomp-bibtex-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/53-style-authoryear-icomp-ms.tex b/macros/latex/contrib/biblatex-ms/doc/examples/53-style-authoryear-icomp-ms.tex
new file mode 100644
index 0000000000..d7900a4ddd
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/53-style-authoryear-icomp-ms.tex
@@ -0,0 +1,203 @@
+%
+% This file presents the 'authoryear-icomp' style
+%
+\documentclass[a4paper]{article}
+\usepackage[T1]{fontenc}
+\usepackage[utf8]{inputenc}
+\usepackage[american]{babel}
+\usepackage{csquotes}
+\usepackage[style=authoryear-icomp,backend=biber]{biblatex-ms}
+\usepackage{hyperref}
+\addbibresource{biblatex-examples.bib}
+% Some generic settings.
+\newcommand{\cmd}[1]{\texttt{\textbackslash #1}}
+\setlength{\parindent}{0pt}
+\newenvironment{bibsample}
+ {\trivlist\samepage
+ \setlength{\itemsep}{0pt}}
+ {\endtrivlist}
+\begin{document}
+
+\section*{The \texttt{authoryear-icomp} style}
+
+This style combines the features of \texttt{authoryear-ibid} and
+\texttt{authoryear-comp}. It will implicitly enable the
+\texttt{sortcites} package option at load time. This style is
+intended for citations given in footnotes.
+
+\subsection*{Additional package options}
+
+\subsubsection*{The \texttt{ibidpage} option}
+
+The scholarly abbreviation \emph{ibidem} is sometimes taken to mean
+both `same author~+ same title' and `same author~+ same title~+ same
+page' in traditional citation schemes. By default, this is not the
+case with this style because it may lead to ambiguous citations.
+With \texttt{ibidpage=true} a page range postnote will be suppressed
+in an \emph{ibidem} citation if the last citation was to the same
+page range. With \texttt{ibidpage=false} the postnote is not omitted.
+Citations to different page ranges than the previous always produce
+the page ranges with either setting.
+The default setting is \texttt{ibidpage=false}.
+
+Consider the following example citations
+\begin{verbatim}
+\cite[378]{sigfridsson}
+\cite[378]{sigfridsson}
+\cite[12]{worman}
+\cite[13]{worman}
+\end{verbatim}
+%
+If \texttt{ibidpage} is set to \texttt{true}, the citations
+come out as
+\begin{quote}
+Sigfridsson and Ryde 1998, p.~378
+
+ibid.
+
+Worman 2002, p.~12
+
+ibid., p.~13
+\end{quote}
+%
+The result for \texttt{ibidpage=false} is
+\begin{quote}
+Sigfridsson and Ryde 1998, p.~378
+
+ibid., p.~378
+
+Worman 2002, p.~12
+
+ibid., p.~13
+\end{quote}
+
+\subsubsection*{The \texttt{dashed} option}
+
+By default, this style replaces recurrent authors/editors in the
+bibliography by a dash so that items by the same author or editor
+are visually grouped. This feature is controlled by the package
+option \texttt{dashed}. Setting \texttt{dashed=false} in the
+preamble will disable this feature. The default setting is
+\texttt{dashed=true}.
+
+\subsubsection*{The \texttt{mergedate} option}
+
+Since this style prints the date label after the author/editor in the
+bibliography, there are effectively two dates in the bibliography:
+the full date specification (e.g., \enquote{2001}, \enquote{June
+2006}, \enquote{5th~Jan. 2008}, whose format is controlled by the
+\texttt{date} option) and the date label (e.g., \enquote{2006a},
+whose format is controlled with the \texttt{labeldate} option),
+as found in citations. The \texttt{mergedate} option controls whether
+or not date specifications are merged with the date label.
+This option is best explained by example. Note that
+it only affects the bibliography. Citations use the date label only.
+
+\begin{bibsample}
+\item Doe 2000
+\item Doe 2003a
+\item Doe 2003b
+\item Doe 2006a
+\item Doe 2006b
+\item Doe 2017
+\end{bibsample}
+
+\texttt{mergedate=false} strictly separates the date specification
+(following \texttt{date}) from the date label (following \texttt{labeldate}).
+The year will always be printed twice:
+
+\begin{bibsample}
+\item Doe, John (2000). \emph{Book~1}. Location: Publisher, 2000.
+\item Doe, John (2003a). \emph{Book~2}. Location: Publisher, 2003.
+\item Doe, John (2003b). \emph{Book~3}. Location: Publisher, 2003.
+\item Doe, John (2006a). \enquote{Article~1}. In: \emph{Monthly Journal} 25.6
+(June~2006), pp.~70--85.
+\item Doe, John (2006b). \enquote{Article~2}. In: \emph{Quarterly Journal} 14.3
+(Fall~2006), pp.~5--25.
+\item Doe, John (2017). \emph{Webpage}. 7th Aug. 2017.
+\end{bibsample}
+
+\texttt{mergedate=minimum} omits the date whenever the full date
+and the date label have exactly the same precision (date-time granularity).
+
+\begin{bibsample}
+\item Doe, John (2000). \emph{Book~1}. Location: Publisher.
+\item Doe, John (2003a). \emph{Book~2}. Location: Publisher, 2003.
+\item Doe, John (2003b). \emph{Book~3}. Location: Publisher, 2003.
+\item Doe, John (2006a). \enquote{Article~1}. In: \emph{Monthly Journal} 25.6
+(June~2006), pp.~70--85.
+\item Doe, John (2006b). \enquote{Article~2}. In: \emph{Quarterly Journal} 14.3
+(Fall~2006), pp.~5--25.
+\item Doe, John (2017). \emph{Webpage}. 7th Aug. 2017.
+\end{bibsample}
+
+\texttt{mergedate=basic} is similar in concept but more economical.
+It will also omit the date if it differs from the date label only by
+\texttt{extradate}.
+
+\begin{bibsample}
+\item Doe, John (2000). \emph{Book~1}. Location: Publisher.
+\item Doe, John (2003a). \emph{Book~2}. Location: Publisher.
+\item Doe, John (2003b). \emph{Book~3}. Location: Publisher.
+\item Doe, John (2006a). \enquote{Article~1}. In: \emph{Monthly Journal} 25.6
+(June~2006), pp.~70--85.
+\item Doe, John (2006b). \enquote{Article~2}. In: \emph{Quarterly Journal} 14.3
+(Fall~2006), pp.~5--25.
+\item Doe, John (2017). \emph{Webpage}. 7th Aug. 2017.
+\end{bibsample}
+
+\texttt{mergedate=compact} merges all date specifications with the
+date labels. The merged date is printed in \texttt{date} format,
+not \texttt{labeldate}, even if it is printed in the position of
+the date label. The \texttt{issue} field is still treated specially:
+
+\begin{bibsample}
+\item Doe, John (2000). \emph{Book~1}. Location: Publisher.
+\item Doe, John (2003a). \emph{Book~2}. Location: Publisher.
+\item Doe, John (2003b). \emph{Book~3}. Location: Publisher.
+\item Doe, John (June 2006a). \enquote{Article~1}. In: \emph{Monthly Journal} 25.6, pp.~70--85.
+\item Doe, John (2006b). \enquote{Article~2}. In: \emph{Quarterly Journal} 14.3
+(Fall), pp.~5--25.
+\item Doe, John (7th Aug. 2017).\emph{Webpage}.
+\end{bibsample}
+
+\texttt{mergedate=maximum} strives for maximum compactness.
+Like \texttt{mergedate=compact} this option merges the date
+into the date label.
+Even the \texttt{issue} field is merged with the date label:
+
+\begin{bibsample}
+\item Doe, John (2000). \emph{Book~1}. Location: Publisher.
+\item Doe, John (2003a). \emph{Book~2}. Location: Publisher.
+\item Doe, John (2003b). \emph{Book~3}. Location: Publisher.
+\item Doe, John (June 2006a). \enquote{Article~1}. In: \emph{Monthly Journal} 25.6, pp.~70--85.
+\item Doe, John (Fall 2006b). \enquote{Article~2}. In: \emph{Quarterly Journal} 14.3, pp.~5--25.
+\item Doe, John (7th Aug. 2017).\emph{Webpage}.
+\end{bibsample}
+
+\texttt{mergedate=true} is an alias for \texttt{mergedate=compact}.
+This is the default setting.
+
+\subsection*{Hints}
+
+If you want terms such as \emph{ibidem} to be printed in italics,
+redefine \cmd{mkibid} as follows:
+
+\begin{verbatim}
+\renewcommand*{\mkibid}{\emph}
+\end{verbatim}
+
+\subsection*{\cmd{footcite} examples}
+
+This is just filler text.\footcite{aristotle:physics,aristotle:poetics,aristotle:rhetoric,}
+This is just filler text.\footcite{companion}
+This is just filler text.\footcite{companion}
+\clearpage
+This is just filler text.\footcite{knuth:ct:c,knuth:ct:b,knuth:ct:d}
+This is just filler text.\footcite[55]{companion}
+This is just filler text.\footcite[55]{companion}
+
+\clearpage
+\printbibliography
+
+\end{document}
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/60-style-authortitle-biber-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/60-style-authortitle-biber-ms.pdf
new file mode 100644
index 0000000000..161e5a5ce7
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/60-style-authortitle-biber-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/60-style-authortitle-bibtex-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/60-style-authortitle-bibtex-ms.pdf
new file mode 100644
index 0000000000..c148d4278c
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/60-style-authortitle-bibtex-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/60-style-authortitle-ms.tex b/macros/latex/contrib/biblatex-ms/doc/examples/60-style-authortitle-ms.tex
new file mode 100644
index 0000000000..7fa522ad44
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/60-style-authortitle-ms.tex
@@ -0,0 +1,125 @@
+%
+% This file presents the 'authortitle' style
+%
+\documentclass[a4paper]{article}
+\usepackage[T1]{fontenc}
+\usepackage[utf8]{inputenc}
+\usepackage[american]{babel}
+\usepackage{csquotes}
+\usepackage[style=authortitle,backend=biber]{biblatex-ms}
+\usepackage{hyperref}
+\addbibresource{biblatex-examples.bib}
+% Some generic settings:
+\newcommand{\cmd}[1]{\texttt{\textbackslash #1}}
+\setlength{\parindent}{0pt}
+\begin{document}
+
+\section*{The \texttt{authortitle} style}
+
+This style prints author-title citations. If an entry in the
+database file includes a \texttt{shorttitle} field, the short
+title is used instead of the \texttt{title} field.
+
+\subsection*{Additional package options}
+
+\subsubsection*{The \texttt{dashed} option}
+
+By default, this style replaces recurrent authors/editors in the
+bibliography by a dash so that items by the same author or editor
+are visually grouped. This feature is controlled by the package
+option \texttt{dashed}. Setting \texttt{dashed=false} in the
+preamble will disable this feature. The default setting is
+\texttt{dashed=true}.
+
+\subsection*{\cmd{cite} examples}
+
+\cite{aristotle:rhetoric}
+
+\cite[59]{aristotle:rhetoric}
+
+\cite[see][]{aristotle:rhetoric}
+
+\cite[see][59--63]{aristotle:rhetoric}
+
+\subsection*{\cmd{parencite} examples}
+
+This is just filler text \parencite{aristotle:rhetoric}.
+
+This is just filler text \parencite[59]{aristotle:rhetoric}.
+
+This is just filler text \parencite[see][]{aristotle:rhetoric}.
+
+This is just filler text \parencite[see][59--63]{aristotle:rhetoric}.
+
+\subsection*{\cmd{parencite*} examples}
+
+\citeauthor{aristotle:rhetoric} shows that this is just filler
+text \parencite*{aristotle:rhetoric}.
+
+\citeauthor{aristotle:rhetoric} shows that this is just filler
+text \parencite*[59]{aristotle:rhetoric}.
+
+\citeauthor{aristotle:rhetoric} shows that this is just filler
+text \parencite*[see][]{aristotle:rhetoric}.
+
+\citeauthor{aristotle:rhetoric} shows that this is just filler
+text \parencite*[see][59--63]{aristotle:rhetoric}.
+
+\subsection*{\cmd{footcite} examples}
+
+This is just filler text.\footcite{aristotle:rhetoric}
+
+This is just filler text.\footcite[59]{aristotle:rhetoric}
+
+This is just filler text.\footcite[See][]{aristotle:rhetoric}
+
+This is just filler text.\footcite[See][59--63]{aristotle:rhetoric}
+
+\subsection*{\cmd{textcite} examples}
+
+\textcite{aristotle:rhetoric} shows that this is just filler text.
+
+\textcite[59]{aristotle:rhetoric} shows that this is just filler text.
+
+\textcite[see][]{aristotle:rhetoric} shows that this is just filler text.
+
+\textcite[see][59--63]{aristotle:rhetoric} shows that this is just filler text.
+
+\subsection*{\cmd{autocite} examples}
+
+% By default, the \autocite command works like \footcite. Note that
+% the period is moved and placed before the footnote.
+
+This is just filler text \autocite{aristotle:rhetoric}.
+
+\subsection*{Multiple citations}
+
+% By default, a list of multiple citations is not sorted. You can
+% enable sorting by setting the 'sortcites' package option.
+
+\cite{aristotle:rhetoric,aristotle:physics,aristotle:poetics}
+
+\subsection*{Shorthand examples}
+
+% If an entry in the bib file includes a 'shorthand' field, the
+% shorthand replaces the regular author-title citation.
+
+\cite{kant:kpv,kant:ku}
+
+\clearpage
+
+% The list of shorthands.
+
+\printshorthands
+
+% The list of references. Note that the year is printed after the
+% author or editor and that recurring author and editor names are
+% replaced by a dash unless the entry is the first one on the
+% current page or double page spread (depending on the setting of
+% the 'pagetracker' package option). This style will implicitly set
+% 'pagetracker=true' at load time.
+
+\nocite{*}
+\printbibliography
+
+\end{document}
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/61-style-authortitle-ibid-biber-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/61-style-authortitle-ibid-biber-ms.pdf
new file mode 100644
index 0000000000..0dd1a74e7a
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/61-style-authortitle-ibid-biber-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/61-style-authortitle-ibid-bibtex-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/61-style-authortitle-ibid-bibtex-ms.pdf
new file mode 100644
index 0000000000..462184e913
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/61-style-authortitle-ibid-bibtex-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/61-style-authortitle-ibid-ms.tex b/macros/latex/contrib/biblatex-ms/doc/examples/61-style-authortitle-ibid-ms.tex
new file mode 100644
index 0000000000..79eb672195
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/61-style-authortitle-ibid-ms.tex
@@ -0,0 +1,106 @@
+%
+% This file presents the 'authortitle-ibid' style
+%
+\documentclass[a4paper]{article}
+\usepackage[T1]{fontenc}
+\usepackage[utf8]{inputenc}
+\usepackage[american]{babel}
+\usepackage{csquotes}
+\usepackage[style=authortitle-ibid,backend=biber]{biblatex-ms}
+\usepackage{hyperref}
+\addbibresource{biblatex-examples.bib}
+% Some generic settings:
+\newcommand{\cmd}[1]{\texttt{\textbackslash #1}}
+\setlength{\parindent}{0pt}
+\begin{document}
+
+\section*{The \texttt{authortitle-ibid} style}
+
+This citation style is a variant of the \texttt{authortitle} style.
+Immediately repeated citations are replaced by the abbreviation
+`ibidem' unless the citation is the first one on the current page or
+double page spread (depending on the setting of the
+\texttt{pagetracker} package option). This style is intended for
+citations given in footnotes.
+
+\subsection*{Additional package options}
+
+\subsubsection*{The \texttt{ibidpage} option}
+
+The scholarly abbreviation \emph{ibidem} is sometimes taken to mean
+both `same author~+ same title' and `same author~+ same title~+ same
+page' in traditional citation schemes. By default, this is not the
+case with this style because it may lead to ambiguous citations.
+With \texttt{ibidpage=true} a page range postnote will be suppressed
+in an \emph{ibidem} citation if the last citation was to the same
+page range. With \texttt{ibidpage=false} the postnote is not omitted.
+Citations to different page ranges than the previous always produce
+the page ranges with either setting.
+The default setting is \texttt{ibidpage=false}.
+
+Consider the following example citations
+\begin{verbatim}
+\cite[12]{cicero}
+\cite[12]{cicero}
+\cite[12]{worman}
+\cite[13]{worman}
+\end{verbatim}
+%
+If \texttt{ibidpage} is set to \texttt{true}, the citations
+come out as
+\begin{quote}
+Cicero, \emph{De natura deorum,} p.~12
+
+ibid.
+
+Worman, \emph{The Cast of Character,} p.~12
+
+ibid., p.~13
+\end{quote}
+%
+The result for \texttt{ibidpage=false} is
+\begin{quote}
+Cicero, \emph{De natura deorum,} p.~12
+
+ibid., p.~12
+
+Worman, \emph{The Cast of Character,} p.~12
+
+ibid., p.~13
+\end{quote}
+
+\subsubsection*{The \texttt{dashed} option}
+
+By default, this style replaces recurrent authors/editors in the
+bibliography by a dash so that items by the same author or editor
+are visually grouped. This feature is controlled by the package
+option \texttt{dashed}. Setting \texttt{dashed=false} in the
+preamble will disable this feature. The default setting is
+\texttt{dashed=true}.
+
+\subsection*{Hints}
+
+If you want terms such as \emph{ibidem} to be printed in italics,
+redefine \cmd{mkibid} as follows:
+
+\begin{verbatim}
+\renewcommand*{\mkibid}{\emph}
+\end{verbatim}
+
+\subsection*{\cmd{footcite} examples}
+
+This is just filler text.\footcite{aristotle:rhetoric}
+% Immediately repeated citations are replaced by the
+% abbreviation 'ibidem'...
+This is just filler text.\footcite{aristotle:rhetoric}
+\clearpage
+% ... unless the citation is the first one on the current page
+% or double page spread (depending on the setting of the
+% 'pagetracker' package option).
+This is just filler text.\footcite[55]{aristotle:rhetoric}
+This is just filler text.\footcite[55]{aristotle:rhetoric}
+
+\clearpage
+\printbibliography
+
+\end{document}
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/62-style-authortitle-comp-biber-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/62-style-authortitle-comp-biber-ms.pdf
new file mode 100644
index 0000000000..7c7dfb84f4
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/62-style-authortitle-comp-biber-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/62-style-authortitle-comp-bibtex-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/62-style-authortitle-comp-bibtex-ms.pdf
new file mode 100644
index 0000000000..af120dde72
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/62-style-authortitle-comp-bibtex-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/62-style-authortitle-comp-ms.tex b/macros/latex/contrib/biblatex-ms/doc/examples/62-style-authortitle-comp-ms.tex
new file mode 100644
index 0000000000..d226a75c71
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/62-style-authortitle-comp-ms.tex
@@ -0,0 +1,43 @@
+%
+% This file presents the 'authortitle-comp' style
+%
+\documentclass[a4paper]{article}
+\usepackage[T1]{fontenc}
+\usepackage[utf8]{inputenc}
+\usepackage[american]{babel}
+\usepackage{csquotes}
+\usepackage[style=authortitle-comp,backend=biber]{biblatex-ms}
+\usepackage{hyperref}
+\addbibresource{biblatex-examples.bib}
+% Some generic settings:
+\newcommand{\cmd}[1]{\texttt{\textbackslash #1}}
+\setlength{\parindent}{0pt}
+\begin{document}
+
+\section*{The \texttt{authortitle-comp} style}
+
+This style is a compact version of the \texttt{authortitle} style
+which prints the author only once if subsequent references passed to
+a single citation command share the same author. This style will
+implicitly enable the \texttt{sortcites} package option at load
+time.
+
+\subsection*{Additional package options}
+
+\subsubsection*{The \texttt{dashed} option}
+
+By default, this style replaces recurrent authors/editors in the
+bibliography by a dash so that items by the same author or editor
+are visually grouped. This feature is controlled by the package
+option \texttt{dashed}. Setting \texttt{dashed=false} in the
+preamble will disable this feature. The default setting is
+\texttt{dashed=true}.
+
+\subsection*{Multiple citations}
+
+\cite{aristotle:rhetoric,averroes/bland,aristotle:physics,aristotle:poetics}
+
+\clearpage
+\printbibliography
+
+\end{document}
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/63-style-authortitle-icomp-biber-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/63-style-authortitle-icomp-biber-ms.pdf
new file mode 100644
index 0000000000..d74d03421b
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/63-style-authortitle-icomp-biber-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/63-style-authortitle-icomp-bibtex-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/63-style-authortitle-icomp-bibtex-ms.pdf
new file mode 100644
index 0000000000..0f0b7baf83
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/63-style-authortitle-icomp-bibtex-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/63-style-authortitle-icomp-ms.tex b/macros/latex/contrib/biblatex-ms/doc/examples/63-style-authortitle-icomp-ms.tex
new file mode 100644
index 0000000000..bbfdb55af2
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/63-style-authortitle-icomp-ms.tex
@@ -0,0 +1,97 @@
+%
+% This file presents the 'authortitle-icomp' style
+%
+\documentclass[a4paper]{article}
+\usepackage[T1]{fontenc}
+\usepackage[utf8]{inputenc}
+\usepackage[american]{babel}
+\usepackage{csquotes}
+\usepackage[style=authortitle-icomp,backend=biber]{biblatex-ms}
+\usepackage{hyperref}
+\addbibresource{biblatex-examples.bib}
+% Some generic settings:
+\newcommand{\cmd}[1]{\texttt{\textbackslash #1}}
+\setlength{\parindent}{0pt}
+\begin{document}
+
+\section*{The \texttt{authortitle-icomp} style}
+
+This style combines the features of \texttt{authortitle-ibid} and
+\texttt{authortitle-comp}. It will implicitly enable the
+\texttt{sortcites} package option at load time. This style is
+intended for citations given in footnotes.
+
+\subsection*{Additional package options}
+
+\subsubsection*{The \texttt{ibidpage} option}
+
+The scholarly abbreviation \emph{ibidem} is sometimes taken to mean
+both `same author~+ same title' and `same author~+ same title~+ same
+page' in traditional citation schemes. By default, this is not the
+case with this style because it may lead to ambiguous citations.
+With \texttt{ibidpage=true} a page range postnote will be suppressed
+in an \emph{ibidem} citation if the last citation was to the same
+page range. With \texttt{ibidpage=false} the postnote is not omitted.
+Citations to different page ranges than the previous always produce
+the page ranges with either setting.
+The default setting is \texttt{ibidpage=false}.
+
+Consider the following example citations
+\begin{verbatim}
+\cite[12]{cicero}
+\cite[12]{cicero}
+\cite[12]{worman}
+\cite[13]{worman}
+\end{verbatim}
+%
+If \texttt{ibidpage} is set to \texttt{true}, the citations
+come out as
+\begin{quote}
+Cicero, \emph{De natura deorum,} p.~12
+
+ibid.
+
+Worman, \emph{The Cast of Character,} p.~12
+
+ibid., p.~13
+\end{quote}
+%
+The result for \texttt{ibidpage=false} is
+\begin{quote}
+Cicero, \emph{De natura deorum,} p.~12
+
+ibid., p.~12
+
+Worman, \emph{The Cast of Character,} p.~12
+
+ibid., p.~13
+\end{quote}
+
+\subsubsection*{The \texttt{dashed} option}
+
+By default, this style replaces recurrent authors/editors in the
+bibliography by a dash so that items by the same author or editor
+are visually grouped. This feature is controlled by the package
+option \texttt{dashed}. Setting \texttt{dashed=false} in the
+preamble will disable this feature. The default setting is
+\texttt{dashed=true}.
+
+\subsection*{Hints}
+
+If you want terms such as \emph{ibidem} to be printed in italics,
+redefine \cmd{mkibid} as follows:
+
+\begin{verbatim}
+\renewcommand*{\mkibid}{\emph}
+\end{verbatim}
+
+\subsection*{\cmd{footcite} examples}
+
+This is just filler text.\footcite{aristotle:rhetoric,averroes/bland,aristotle:physics,aristotle:poetics}
+This is just filler text.\footcite{aristotle:rhetoric}
+This is just filler text.\footcite{aristotle:rhetoric}
+
+\clearpage
+\printbibliography
+
+\end{document}
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/64-style-authortitle-terse-biber-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/64-style-authortitle-terse-biber-ms.pdf
new file mode 100644
index 0000000000..9e7abd045e
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/64-style-authortitle-terse-biber-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/64-style-authortitle-terse-bibtex-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/64-style-authortitle-terse-bibtex-ms.pdf
new file mode 100644
index 0000000000..7e7f2f313c
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/64-style-authortitle-terse-bibtex-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/64-style-authortitle-terse-ms.tex b/macros/latex/contrib/biblatex-ms/doc/examples/64-style-authortitle-terse-ms.tex
new file mode 100644
index 0000000000..fcf470ad4d
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/64-style-authortitle-terse-ms.tex
@@ -0,0 +1,89 @@
+%
+% This file presents the 'authortitle-terse' style
+%
+\documentclass[a4paper]{article}
+\usepackage[T1]{fontenc}
+\usepackage[utf8]{inputenc}
+\usepackage[american]{babel}
+\usepackage{csquotes}
+\usepackage[style=authortitle-terse,backend=biber]{biblatex-ms}
+\usepackage{hyperref}
+\addbibresource{biblatex-examples.bib}
+% Some generic settings.
+\newcommand{\cmd}[1]{\texttt{\textbackslash #1}}
+\setlength{\parindent}{0pt}
+\begin{document}
+
+\section*{The \texttt{authortitle-terse} style}
+
+This style implements a terse author-title citation scheme suitable
+for both in-text citations and citations given in footnotes. It
+differs form the regular \texttt{authortitle} style in that the
+title is only printed if the bibliography contains more than one
+work by the respective author or editor.
+
+\subsection*{Additional package options}
+
+\subsubsection*{The \texttt{dashed} option}
+
+By default, this style replaces recurrent authors/editors in the
+bibliography by a dash so that items by the same author or editor
+are visually grouped. This feature is controlled by the package
+option \texttt{dashed}. Setting \texttt{dashed=false} in the
+preamble will disable this feature. The default setting is
+\texttt{dashed=true}.
+
+\subsection*{\cmd{cite} examples}
+
+\cite{averroes/bland}
+
+\cite{aristotle:physics}
+
+\cite{aristotle:rhetoric}
+
+\subsection*{\cmd{parencite} examples}
+
+This is just filler text \parencite{averroes/bland}.
+
+This is just filler text \parencite{aristotle:rhetoric}.
+
+\subsection*{\cmd{parencite*} examples}
+
+\citeauthor{aristotle:rhetoric} shows that this is just filler
+text \parencite*{aristotle:rhetoric}.
+
+\subsection*{\cmd{footcite} examples}
+
+This is just filler text.\footcite{aristotle:rhetoric}
+
+\subsection*{\cmd{textcite} examples}
+
+\textcite{aristotle:rhetoric} shows that this is just filler text.
+
+\textcite[59]{aristotle:rhetoric} shows that this is just filler text.
+
+\textcite[see][]{aristotle:rhetoric} shows that this is just filler text.
+
+\textcite[see][59--63]{aristotle:rhetoric} shows that this is just filler text.
+
+\subsection*{\cmd{autocite} examples}
+
+% By default, the \autocite command works like \parencite.
+% The starred version works like \parencite*.
+
+This is just filler text \autocite{aristotle:rhetoric}.
+
+\citeauthor{aristotle:rhetoric} shows that this is just filler
+text \autocite*{aristotle:rhetoric}.
+
+\subsection*{Multiple citations}
+
+% By default, a list of multiple citations is not sorted. You can
+% enable sorting by setting the 'sortcites' package option.
+
+\cite{aristotle:rhetoric,averroes/bland,aristotle:physics,aristotle:poetics}
+
+\clearpage
+\printbibliography
+
+\end{document}
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/65-style-authortitle-tcomp-biber-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/65-style-authortitle-tcomp-biber-ms.pdf
new file mode 100644
index 0000000000..1aee3f220b
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/65-style-authortitle-tcomp-biber-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/65-style-authortitle-tcomp-bibtex-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/65-style-authortitle-tcomp-bibtex-ms.pdf
new file mode 100644
index 0000000000..210db877ab
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/65-style-authortitle-tcomp-bibtex-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/65-style-authortitle-tcomp-ms.tex b/macros/latex/contrib/biblatex-ms/doc/examples/65-style-authortitle-tcomp-ms.tex
new file mode 100644
index 0000000000..3fe9607d7a
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/65-style-authortitle-tcomp-ms.tex
@@ -0,0 +1,49 @@
+%
+% This file presents the 'authortitle-tcomp' style
+%
+\documentclass[a4paper]{article}
+\usepackage[T1]{fontenc}
+\usepackage[utf8]{inputenc}
+\usepackage[american]{babel}
+\usepackage{csquotes}
+\usepackage[style=authortitle-tcomp,backend=biber]{biblatex-ms}
+\usepackage{hyperref}
+\addbibresource{biblatex-examples.bib}
+% Some generic settings.
+\newcommand{\cmd}[1]{\texttt{\textbackslash #1}}
+\setlength{\parindent}{0pt}
+\begin{document}
+
+\section*{The \texttt{authortitle-tcomp} style}
+
+This style essentially combines \texttt{authortitle-terse} and
+\texttt{authortitle-comp}. It will implicitly enable the
+\texttt{sortcites} package option at load time.
+
+\subsection*{Additional package options}
+
+\subsubsection*{The \texttt{dashed} option}
+
+By default, this style replaces recurrent authors/editors in the
+bibliography by a dash so that items by the same author or editor
+are visually grouped. This feature is controlled by the package
+option \texttt{dashed}. Setting \texttt{dashed=false} in the
+preamble will disable this feature. The default setting is
+\texttt{dashed=true}.
+
+\subsection*{\cmd{cite} examples}
+
+\cite{averroes/bland}
+
+\cite{aristotle:physics}
+
+\cite{aristotle:rhetoric}
+
+\subsection*{Multiple citations}
+
+\cite{aristotle:rhetoric,averroes/bland,aristotle:physics,aristotle:poetics}
+
+\clearpage
+\printbibliography
+
+\end{document}
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/66-style-authortitle-ticomp-biber-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/66-style-authortitle-ticomp-biber-ms.pdf
new file mode 100644
index 0000000000..2f01ac6c27
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/66-style-authortitle-ticomp-biber-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/66-style-authortitle-ticomp-bibtex-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/66-style-authortitle-ticomp-bibtex-ms.pdf
new file mode 100644
index 0000000000..7ec66aa6af
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/66-style-authortitle-ticomp-bibtex-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/66-style-authortitle-ticomp-ms.tex b/macros/latex/contrib/biblatex-ms/doc/examples/66-style-authortitle-ticomp-ms.tex
new file mode 100644
index 0000000000..d201d91261
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/66-style-authortitle-ticomp-ms.tex
@@ -0,0 +1,95 @@
+%
+% This file presents the 'authortitle-ticomp' style
+%
+\documentclass[a4paper]{article}
+\usepackage[T1]{fontenc}
+\usepackage[utf8]{inputenc}
+\usepackage[american]{babel}
+\usepackage{csquotes}
+\usepackage[style=authortitle-ticomp,backend=biber]{biblatex-ms}
+\usepackage{hyperref}
+\addbibresource{biblatex-examples.bib}
+% Some generic settings.
+\newcommand{\cmd}[1]{\texttt{\textbackslash #1}}
+\setlength{\parindent}{0pt}
+\begin{document}
+
+\section*{The \texttt{authortitle-ticomp} style}
+
+This style essentially combines \texttt{authortitle-terse} and
+\texttt{authortitle-icomp}. It will implicitly enable the
+\texttt{sortcites} package option at load time.
+
+\subsection*{Additional package options}
+
+\subsubsection*{The \texttt{ibidpage} option}
+
+The scholarly abbreviation \emph{ibidem} is sometimes taken to mean
+both `same author~+ same title' and `same author~+ same title~+ same
+page' in traditional citation schemes. By default, this is not the
+case with this style because it may lead to ambiguous citations.
+With \texttt{ibidpage=true} a page range postnote will be suppressed
+in an \emph{ibidem} citation if the last citation was to the same
+page range. With \texttt{ibidpage=false} the postnote is not omitted.
+Citations to different page ranges than the previous always produce
+the page ranges with either setting.
+The default setting is \texttt{ibidpage=false}.
+
+Consider the following example citations
+\begin{verbatim}
+\cite[12]{cicero}
+\cite[12]{cicero}
+\cite[12]{worman}
+\cite[13]{worman}
+\end{verbatim}
+%
+If \texttt{ibidpage} is set to \texttt{true}, the citations
+come out as
+\begin{quote}
+Cicero, \emph{De natura deorum,} p.~12
+
+ibid.
+
+Worman, \emph{The Cast of Character,} p.~12
+
+ibid., p.~13
+\end{quote}
+%
+The result for \texttt{ibidpage=false} is
+\begin{quote}
+Cicero, \emph{De natura deorum,} p.~12
+
+ibid., p.~12
+
+Worman, \emph{The Cast of Character,} p.~12
+
+ibid., p.~13
+\end{quote}
+
+\subsubsection*{The \texttt{dashed} option}
+
+By default, this style replaces recurrent authors/editors in the
+bibliography by a dash so that items by the same author or editor
+are visually grouped. This feature is controlled by the package
+option \texttt{dashed}. Setting \texttt{dashed=false} in the
+preamble will disable this feature. The default setting is
+\texttt{dashed=true}.
+
+\subsection*{\cmd{cite} examples}
+
+\cite{averroes/bland}
+
+\cite{aristotle:physics}
+
+\cite{aristotle:rhetoric}
+
+\cite{aristotle:rhetoric}
+
+\subsection*{Multiple citations}
+
+\cite{aristotle:rhetoric,averroes/bland,aristotle:physics,aristotle:poetics}
+
+\clearpage
+\printbibliography
+
+\end{document}
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/70-style-verbose-biber-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/70-style-verbose-biber-ms.pdf
new file mode 100644
index 0000000000..e3f5e3cc3a
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/70-style-verbose-biber-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/70-style-verbose-bibtex-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/70-style-verbose-bibtex-ms.pdf
new file mode 100644
index 0000000000..71c6874acd
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/70-style-verbose-bibtex-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/70-style-verbose-ms.tex b/macros/latex/contrib/biblatex-ms/doc/examples/70-style-verbose-ms.tex
new file mode 100644
index 0000000000..d86af98d76
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/70-style-verbose-ms.tex
@@ -0,0 +1,153 @@
+%
+% This file presents the 'verbose' style
+%
+\documentclass[a4paper]{article}
+\usepackage[T1]{fontenc}
+\usepackage[utf8]{inputenc}
+\usepackage[american]{babel}
+\usepackage{csquotes}
+\usepackage[style=verbose,backend=biber]{biblatex-ms}
+\usepackage{hyperref}
+\addbibresource{biblatex-examples.bib}
+\newcommand{\cmd}[1]{\texttt{\textbackslash #1}}
+\begin{document}
+
+\section*{The \texttt{verbose} style}
+
+This citation style prints a verbose citation similar to the full
+bibliography entry when an item is cited for the first time. All
+subsequent citations will then use a shorter author-title format.
+This style is intended for citations given in footnotes.
+
+\subsection*{Additional package options}
+
+\subsubsection*{The \texttt{citepages} option}
+
+Use this option to fine-tune the formatting of the \texttt{pages}
+and \texttt{pagetotal} fields in verbose citations. When an entry
+with a \texttt{pages} field is cited for the first time and the
+\texttt{postnote} is a page number or a page range, the citation
+will end with two page specifications:
+
+\begin{quote}
+Author. \enquote{Title.} In: \emph{Book,} pp.\,100--150, p.\,125.
+\end{quote}
+%
+In this example, \enquote{125} is the \texttt{postnote} and
+\enquote{100--150} is the \texttt{pages} field (there are similar
+issues with the \texttt{pagetotal} field). This may be confusing to
+the reader. The \texttt{citepages} option controls how to deal with
+these fields in this case. The option works as follows, given these
+citations as an example:
+
+\begin{verbatim}
+\cite{key}
+\cite[a note]{key}
+\cite[125]{key}
+\end{verbatim}
+%
+\texttt{citepages=permit} allows duplicates, i.e., the style will
+print both the \texttt{pages}\slash \texttt{pagetotal} and the
+\texttt{postnote}. This is the default setting:
+
+\begin{quote}
+Author. \enquote{Title.} In: \emph{Book,} pp.\,100--150.
+
+Author. \enquote{Title.} In: \emph{Book,} pp.\,100--150, a note.
+
+Author. \enquote{Title.} In: \emph{Book,} pp.\,100--150, p.\,125.
+\end{quote}
+%
+\texttt{citepages=suppress} unconditionally suppresses the
+\texttt{pages}\slash \texttt{pagetotal} fields in citations,
+regardless of the \texttt{postnote}:
+
+\begin{quote}
+Author. \enquote{Title.} In: \emph{Book.}
+
+Author. \enquote{Title.} In: \emph{Book,} a note.
+
+Author. \enquote{Title.} In: \emph{Book,} p.\,125.
+\end{quote}
+%
+\texttt{citepages=omit} suppresses the \texttt{pages}\slash
+\texttt{pagetotal} in the third case only. They are still printed if
+there is no \texttt{postnote} or if the \texttt{postnote} is not a
+number or range:
+
+\begin{quote}
+Author. \enquote{Title.} In: \emph{Book,} pp.\,100--150.
+
+Author. \enquote{Title.} In: \emph{Book,} pp.\,100--150, a note.
+
+Author. \enquote{Title.} In: \emph{Book,} p.\,125.
+\end{quote}
+%
+\texttt{citepages=separate} separates the \texttt{pages}\slash
+\texttt{pagetotal} from the \texttt{postnote} in the third case:
+
+\begin{quote}
+Author. \enquote{Title.} In: \emph{Book,} pp.\,100--150.
+
+Author. \enquote{Title.} In: \emph{Book,} pp.\,100--150, a note.
+
+Author. \enquote{Title.} In: \emph{Book,} pp.\,100--150, esp. p.\,125.
+\end{quote}
+%
+The string \enquote{especially} in the third case is the bibliography
+string \texttt{thiscite}, which may be redefined.
+
+\subsubsection*{The \texttt{dashed} option}
+
+By default, this style replaces recurrent authors/editors in the
+bibliography by a dash so that items by the same author or editor
+are visually grouped. This feature is controlled by the package
+option \texttt{dashed}. Setting \texttt{dashed=false} in the
+preamble will disable this feature. The default setting is
+\texttt{dashed=true}.
+
+\clearpage
+
+\subsection*{\cmd{footcite} examples}
+
+% The initial citation of an entry includes all the data.
+This is just filler text.\footcite{aristotle:anima}
+This is just filler text.\footcite{aristotle:physics}
+% Subsequent citations use a more compact format.
+This is just filler text.\footcite{aristotle:anima}
+This is just filler text.\footcite{aristotle:physics}
+
+\clearpage
+
+% If the 'shorthand' field is defined, the shorthand is introduced
+% on the first citation.
+This is just filler text.\footcite{kant:kpv}
+This is just filler text.\footcite{kant:ku}
+% All subsequent citations will then use the shorthand.
+This is just filler text.\footcite[24]{kant:kpv}
+This is just filler text.\footcite[59--63]{kant:ku}
+
+\clearpage
+
+\subsection*{\cmd{autocite} examples}
+
+% The \autocite command works like \footcite. Note that
+% the period is moved and placed before the footnote.
+
+This is just filler text \autocite{aristotle:rhetoric}.
+This is just filler text \autocite{averroes/bland}.
+This is just filler text \autocite{aristotle:rhetoric}.
+This is just filler text \autocite{aristotle:anima}.
+This is just filler text \autocite{aristotle:physics}.
+This is just filler text \autocite{aristotle:physics}.
+
+\clearpage
+
+% Since all bibliographic data is provided on the first citation,
+% this style may be used without a list of references and
+% shorthands. Of course these lists may still be printed if desired.
+
+\printshorthands
+\printbibliography
+
+\end{document}
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/71-style-verbose-ibid-biber-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/71-style-verbose-ibid-biber-ms.pdf
new file mode 100644
index 0000000000..00f3529432
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/71-style-verbose-ibid-biber-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/71-style-verbose-ibid-bibtex-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/71-style-verbose-ibid-bibtex-ms.pdf
new file mode 100644
index 0000000000..3ef3736146
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/71-style-verbose-ibid-bibtex-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/71-style-verbose-ibid-ms.tex b/macros/latex/contrib/biblatex-ms/doc/examples/71-style-verbose-ibid-ms.tex
new file mode 100644
index 0000000000..bf021f63e6
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/71-style-verbose-ibid-ms.tex
@@ -0,0 +1,217 @@
+%
+% This file presents the 'verbose-ibid' style
+%
+\documentclass[a4paper]{article}
+\usepackage[T1]{fontenc}
+\usepackage[utf8]{inputenc}
+\usepackage[american]{babel}
+\usepackage{csquotes}
+\usepackage[style=verbose-ibid,backend=biber]{biblatex-ms}
+\usepackage{hyperref}
+\addbibresource{biblatex-examples.bib}
+\newcommand{\cmd}[1]{\texttt{\textbackslash #1}}
+\begin{document}
+
+\section*{The \texttt{verbose-ibid} style}
+
+This citation style is a slightly more compact variant of the
+\texttt{verbose} style. Immediately repeated citations are replaced
+by the abbreviation `ibidem' unless the citation is the first one on
+the current page or double page spread (depending on the setting of
+the \texttt{pagetracker} package option). This style is also
+intended for citations given in footnotes.
+
+\subsection*{Additional package options}
+
+\subsubsection*{The \texttt{ibidpage} option}
+
+The scholarly abbreviation \emph{ibidem} is sometimes taken to mean
+both `same author~+ same title' and `same author~+ same title~+ same
+page' in traditional citation schemes. By default, this is not the
+case with this style because it may lead to ambiguous citations.
+With \texttt{ibidpage=true} a page range postnote will be suppressed
+in an \emph{ibidem} citation if the last citation was to the same
+page range. With \texttt{ibidpage=false} the postnote is not omitted.
+Citations to different page ranges than the previous always produce
+the page ranges with either setting.
+The default setting is \texttt{ibidpage=false}.
+
+Consider the following example citations
+\begin{verbatim}
+\cite[12]{cicero}
+\cite[12]{cicero}
+\cite[12]{worman}
+\cite[13]{worman}
+\end{verbatim}
+%
+If \texttt{ibidpage} is set to \texttt{true}, the citations
+come out -- shortened -- as
+\begin{quote}
+Cicero, \emph{De natura deorum,} p.~12
+
+ibid.
+
+Worman, \emph{The Cast of Character,} p.~12
+
+ibid., p.~13
+\end{quote}
+%
+The shortened result for \texttt{ibidpage=false} is
+\begin{quote}
+Cicero, \emph{De natura deorum,} p.~12
+
+ibid., p.~12
+
+Worman, \emph{The Cast of Character,} p.~12
+
+ibid., p.~13
+\end{quote}
+
+\subsubsection*{The \texttt{dashed} option}
+
+Use this option to fine-tune the formatting of the \texttt{pages}
+and \texttt{pagetotal} fields in verbose citations. When an entry
+with a \texttt{pages} field is cited for the first time and the
+\texttt{postnote} is a page number or a page range, the citation
+will end with two page specifications:
+
+\begin{quote}
+Author. \enquote{Title.} In: \emph{Book,} pp.\,100--150, p.\,125.
+\end{quote}
+%
+In this example, \enquote{125} is the \texttt{postnote} and
+\enquote{100--150} is the \texttt{pages} field (there are similar
+issues with the \texttt{pagetotal} field). This may be confusing to
+the reader. The \texttt{citepages} option controls how to deal with
+these fields in this case. The option works as follows, given these
+citations as an example:
+
+\begin{verbatim}
+\cite{key}
+\cite[a note]{key}
+\cite[125]{key}
+\end{verbatim}
+%
+\texttt{citepages=permit} allows duplicates, i.e., the style will
+print both the \texttt{pages}\slash \texttt{pagetotal} and the
+\texttt{postnote}. This is the default setting:
+
+\begin{quote}
+Author. \enquote{Title.} In: \emph{Book,} pp.\,100--150.
+
+Author. \enquote{Title.} In: \emph{Book,} pp.\,100--150, a note.
+
+Author. \enquote{Title.} In: \emph{Book,} pp.\,100--150, p.\,125.
+\end{quote}
+%
+\texttt{citepages=suppress} unconditionally suppresses the
+\texttt{pages}\slash \texttt{pagetotal} fields in citations,
+regardless of the \texttt{postnote}:
+
+\begin{quote}
+Author. \enquote{Title.} In: \emph{Book.}
+
+Author. \enquote{Title.} In: \emph{Book,} a note.
+
+Author. \enquote{Title.} In: \emph{Book,} p.\,125.
+\end{quote}
+%
+\texttt{citepages=omit} suppresses the \texttt{pages}\slash
+\texttt{pagetotal} in the third case only. They are still printed if
+there is no \texttt{postnote} or if the \texttt{postnote} is not a
+number or range:
+
+\begin{quote}
+Author. \enquote{Title.} In: \emph{Book,} pp.\,100--150.
+
+Author. \enquote{Title.} In: \emph{Book,} pp.\,100--150, a note.
+
+Author. \enquote{Title.} In: \emph{Book,} p.\,125.
+\end{quote}
+%
+\texttt{citepages=separate} separates the \texttt{pages}\slash
+\texttt{pagetotal} from the \texttt{postnote} in the third case:
+
+\begin{quote}
+Author. \enquote{Title.} In: \emph{Book,} pp.\,100--150.
+
+Author. \enquote{Title.} In: \emph{Book,} pp.\,100--150, a note.
+
+Author. \enquote{Title.} In: \emph{Book,} pp.\,100--150, esp. p.\,125.
+\end{quote}
+%
+The string \enquote{especially} in the third case is the bibliography
+string \texttt{thiscite}, which may be redefined.
+
+\subsubsection*{The \texttt{dashed} option}
+
+By default, this style replaces recurrent authors/editors in the
+bibliography by a dash so that items by the same author or editor
+are visually grouped. This feature is controlled by the package
+option \texttt{dashed}. Setting \texttt{dashed=false} in the
+preamble will disable this feature. The default setting is
+\texttt{dashed=true}.
+
+\subsection*{Hints}
+
+If you want terms such as \emph{ibidem} to be printed in italics,
+redefine \cmd{mkibid} as follows:
+
+\begin{verbatim}
+\renewcommand*{\mkibid}{\emph}
+\end{verbatim}
+
+\clearpage
+
+\subsection*{\cmd{footcite} examples}
+
+% The initial citation of an entry includes all the data.
+This is just filler text.\footcite{aristotle:anima}
+This is just filler text.\footcite{aristotle:physics}
+% Subsequent citations use a more compact format.
+This is just filler text.\footcite{aristotle:anima}
+This is just filler text.\footcite{aristotle:physics}
+% Immediately repeated citations are replaced by the
+% abbreviation `ibidem'...
+This is just filler text.\footcite{aristotle:physics}
+\clearpage
+% ... unless the citation is the first one on the current page
+% or double page spread (depending on the setting of the
+% `pagetracker' package option).
+This is just filler text.\footcite{aristotle:physics}
+This is just filler text.\footcite{aristotle:physics}
+
+\clearpage
+
+% If the `shorthand' field is defined, the shorthand is introduced
+% on the first citation.
+This is just filler text.\footcite{kant:kpv}
+This is just filler text.\footcite{kant:ku}
+% All subsequent citations will then use the shorthand.
+This is just filler text.\footcite[24]{kant:kpv}
+This is just filler text.\footcite[59--63]{kant:ku}
+
+\clearpage
+
+\subsection*{\cmd{autocite} examples}
+
+% The \autocite command works like \footcite. Note that
+% the period is moved and placed before the footnote.
+
+This is just filler text \autocite{aristotle:rhetoric}.
+This is just filler text \autocite{averroes/bland}.
+This is just filler text \autocite{aristotle:rhetoric}.
+This is just filler text \autocite{aristotle:anima}.
+This is just filler text \autocite{aristotle:physics}.
+This is just filler text \autocite{aristotle:physics}.
+
+\clearpage
+
+% Since all bibliographic data is provided on the first citation,
+% this style may be used without a list of references and
+% shorthands. Of course these lists may still be printed if desired.
+
+\printshorthands
+\printbibliography
+
+\end{document}
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/72-style-verbose-note-biber-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/72-style-verbose-note-biber-ms.pdf
new file mode 100644
index 0000000000..dc0c7607c7
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/72-style-verbose-note-biber-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/72-style-verbose-note-bibtex-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/72-style-verbose-note-bibtex-ms.pdf
new file mode 100644
index 0000000000..af4735f2d1
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/72-style-verbose-note-bibtex-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/72-style-verbose-note-ms.tex b/macros/latex/contrib/biblatex-ms/doc/examples/72-style-verbose-note-ms.tex
new file mode 100644
index 0000000000..7681bb2b94
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/72-style-verbose-note-ms.tex
@@ -0,0 +1,169 @@
+%
+% This file presents the 'verbose-note' style
+%
+\documentclass[a4paper]{article}
+\usepackage[T1]{fontenc}
+\usepackage[utf8]{inputenc}
+\usepackage[american]{babel}
+\usepackage{csquotes}
+\usepackage[style=verbose-note,backend=biber]{biblatex-ms}
+\usepackage{hyperref}
+\addbibresource{biblatex-examples.bib}
+\newcommand{\cmd}[1]{\texttt{\textbackslash #1}}
+\begin{document}
+
+\section*{The \texttt{verbose-note} style}
+
+This citation style is similar to \texttt{verbose} in that it prints
+a verbose citation similar to the full bibliography entry when an
+item is cited for the first time. All subsequent citations are
+pointers to the footnote containing the verbose citation. This style
+is exclusively intended for citations given in footnotes.
+
+\subsection*{Additional package options}
+
+\subsubsection*{The \texttt{pageref} option}
+
+By default, this style does not add a page reference to the footnote
+pointers, i.e., they are rendered as `see note~3'. If you want such
+references to be rendered as `see note~3, page~5' instead, set the
+package option \texttt{pageref=true} or simply \texttt{pageref} in
+the preamble. This will add the page number to the footnote pointer
+whenever the footnote to which the pointer refers is located on a
+different page or page spread (depending on the setting of the
+\texttt{pagetracker} option). The default setting is
+\texttt{pageref=false}.
+
+\subsubsection*{The \texttt{citepages} option}
+
+Use this option to fine-tune the formatting of the \texttt{pages}
+and \texttt{pagetotal} fields in verbose citations. When an entry
+with a \texttt{pages} field is cited for the first time and the
+\texttt{postnote} is a page number or a page range, the citation
+will end with two page specifications:
+
+\begin{quote}
+Author. \enquote{Title.} In: \emph{Book,} pp.\,100--150, p.\,125.
+\end{quote}
+%
+In this example, \enquote{125} is the \texttt{postnote} and
+\enquote{100--150} is the \texttt{pages} field (there are similar
+issues with the \texttt{pagetotal} field). This may be confusing to
+the reader. The \texttt{citepages} option controls how to deal with
+these fields in this case. The option works as follows, given these
+citations as an example:
+
+\begin{verbatim}
+\cite{key}
+\cite[a note]{key}
+\cite[125]{key}
+\end{verbatim}
+%
+\texttt{citepages=permit} allows duplicates, i.e., the style will
+print both the \texttt{pages}\slash \texttt{pagetotal} and the
+\texttt{postnote}. This is the default setting:
+
+\begin{quote}
+Author. \enquote{Title.} In: \emph{Book,} pp.\,100--150.
+
+Author. \enquote{Title.} In: \emph{Book,} pp.\,100--150, a note.
+
+Author. \enquote{Title.} In: \emph{Book,} pp.\,100--150, p.\,125.
+\end{quote}
+%
+\texttt{citepages=suppress} unconditionally suppresses the
+\texttt{pages}\slash \texttt{pagetotal} fields in citations,
+regardless of the \texttt{postnote}:
+
+\begin{quote}
+Author. \enquote{Title.} In: \emph{Book.}
+
+Author. \enquote{Title.} In: \emph{Book,} a note.
+
+Author. \enquote{Title.} In: \emph{Book,} p.\,125.
+\end{quote}
+%
+\texttt{citepages=omit} suppresses the \texttt{pages}\slash
+\texttt{pagetotal} in the third case only. They are still printed if
+there is no \texttt{postnote} or if the \texttt{postnote} is not a
+number or range:
+
+\begin{quote}
+Author. \enquote{Title.} In: \emph{Book,} pp.\,100--150.
+
+Author. \enquote{Title.} In: \emph{Book,} pp.\,100--150, a note.
+
+Author. \enquote{Title.} In: \emph{Book,} p.\,125.
+\end{quote}
+%
+\texttt{citepages=separate} separates the \texttt{pages}\slash
+\texttt{pagetotal} from the \texttt{postnote} in the third case:
+
+\begin{quote}
+Author. \enquote{Title.} In: \emph{Book,} pp.\,100--150.
+
+Author. \enquote{Title.} In: \emph{Book,} pp.\,100--150, a note.
+
+Author. \enquote{Title.} In: \emph{Book,} pp.\,100--150, esp. p.\,125.
+\end{quote}
+%
+The string \enquote{especially} in the third case is the bibliography
+string \texttt{thiscite}, which may be redefined.
+
+\subsubsection*{The \texttt{dashed} option}
+
+By default, this style replaces recurrent authors/editors in the
+bibliography by a dash so that items by the same author or editor
+are visually grouped. This feature is controlled by the package
+option \texttt{dashed}. Setting \texttt{dashed=false} in the
+preamble will disable this feature. The default setting is
+\texttt{dashed=true}.
+
+\clearpage
+
+\subsection*{\cmd{footcite} examples}
+
+% The initial citation of an entry includes all the data.
+This is just filler text.\footcite{aristotle:anima}
+This is just filler text.\footcite{aristotle:physics}
+This is just filler text \footcite{averroes/bland}.
+% Subsequent citations are pointers to the initial citation.
+This is just filler text.\footcite{aristotle:anima}
+This is just filler text.\footcite{aristotle:physics}
+% If there is only one work by an author in the bibliography, the
+% title is omitted from the pointer.
+This is just filler text \footcite{averroes/bland}.
+
+\clearpage
+
+% If the 'shorthand' field is defined, the shorthand is introduced
+% on the first citation.
+This is just filler text.\footcite{kant:kpv}
+This is just filler text.\footcite{kant:ku}
+% All subsequent citations will then use the shorthand.
+This is just filler text.\footcite[24]{kant:kpv}
+This is just filler text.\footcite[59--63]{kant:ku}
+
+\clearpage
+
+\subsection*{\cmd{autocite} examples}
+
+% The \autocite command works like \footcite. Note that
+% the period is moved and placed before the footnote.
+
+This is just filler text \autocite{aristotle:rhetoric}.
+This is just filler text \autocite{aristotle:rhetoric}.
+This is just filler text \autocite{aristotle:anima}.
+This is just filler text \autocite{aristotle:physics}.
+This is just filler text \autocite{averroes/bland}.
+
+\clearpage
+
+% Since all bibliographic data is provided on the first citation,
+% this style may be used without a list of references and
+% shorthands. Of course these lists may still be printed if desired.
+
+\printshorthands
+\printbibliography
+
+\end{document}
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/73-style-verbose-inote-biber-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/73-style-verbose-inote-biber-ms.pdf
new file mode 100644
index 0000000000..258242aeca
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/73-style-verbose-inote-biber-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/73-style-verbose-inote-bibtex-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/73-style-verbose-inote-bibtex-ms.pdf
new file mode 100644
index 0000000000..2d45927a5f
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/73-style-verbose-inote-bibtex-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/73-style-verbose-inote-ms.tex b/macros/latex/contrib/biblatex-ms/doc/examples/73-style-verbose-inote-ms.tex
new file mode 100644
index 0000000000..38341d8b7e
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/73-style-verbose-inote-ms.tex
@@ -0,0 +1,240 @@
+%
+% This file presents the 'verbose-inote' style
+%
+\documentclass[a4paper]{article}
+\usepackage[T1]{fontenc}
+\usepackage[utf8]{inputenc}
+\usepackage[american]{babel}
+\usepackage{csquotes}
+\usepackage[style=verbose-inote,backend=biber]{biblatex-ms}
+\usepackage{hyperref}
+\addbibresource{biblatex-examples.bib}
+\newcommand{\cmd}[1]{\texttt{\textbackslash #1}}
+\begin{document}
+
+\section*{The \texttt{verbose-inote} style}
+
+This citation style is a slightly more compact variant of the
+\texttt{verbose-note} style. Immediately repeated citations are
+replaced by the abbreviation `ibidem' unless the citation is the
+first one on the current page or double page spread. This style is
+exclusively intended for citations given in footnotes.
+
+\subsection*{Additional package options}
+
+\subsubsection*{The \texttt{pageref} option}
+
+By default, this style does not add a page reference to the footnote
+pointers, i.e., they are rendered as `see note~3'. If you want such
+references to be rendered as `see note~3, page~5' instead, set the
+package option \texttt{pageref=true} or simply \texttt{pageref} in
+the preamble. This will add the page number to the footnote pointer
+whenever the footnote to which the pointer refers is located on a
+different page or page spread (depending on the setting of the
+\texttt{pagetracker} option). The default setting is
+\texttt{pageref=false}.
+
+\subsubsection*{The \texttt{ibidpage} option}
+
+The scholarly abbreviation \emph{ibidem} is sometimes taken to mean
+both `same author~+ same title' and `same author~+ same title~+ same
+page' in traditional citation schemes. By default, this is not the
+case with this style because it may lead to ambiguous citations.
+With \texttt{ibidpage=true} a page range postnote will be suppressed
+in an \emph{ibidem} citation if the last citation was to the same
+page range. With \texttt{ibidpage=false} the postnote is not omitted.
+Citations to different page ranges than the previous always produce
+the page ranges with either setting.
+The default setting is \texttt{ibidpage=false}.
+
+Consider the following example citations
+\begin{verbatim}
+\cite[12]{cicero}
+\cite[12]{cicero}
+\cite[12]{worman}
+\cite[13]{worman}
+\end{verbatim}
+%
+If \texttt{ibidpage} is set to \texttt{true}, the citations
+come out -- shortened -- as
+\begin{quote}
+Cicero, \emph{De natura deorum,} p.~12
+
+ibid.
+
+Worman, \emph{The Cast of Character,} p.~12
+
+ibid., p.~13
+\end{quote}
+%
+The shortened result for \texttt{ibidpage=false} is
+\begin{quote}
+Cicero, \emph{De natura deorum,} p.~12
+
+ibid., p.~12
+
+Worman, \emph{The Cast of Character,} p.~12
+
+ibid., p.~13
+\end{quote}
+
+\subsubsection*{The \texttt{dashed} option}
+
+Use this option to fine-tune the formatting of the \texttt{pages}
+and \texttt{pagetotal} fields in verbose citations. When an entry
+with a \texttt{pages} field is cited for the first time and the
+\texttt{postnote} is a page number or a page range, the citation
+will end with two page specifications:
+
+\begin{quote}
+Author. \enquote{Title.} In: \emph{Book,} pp.\,100--150, p.\,125.
+\end{quote}
+%
+In this example, \enquote{125} is the \texttt{postnote} and
+\enquote{100--150} is the \texttt{pages} field (there are similar
+issues with the \texttt{pagetotal} field). This may be confusing to
+the reader. The \texttt{citepages} option controls how to deal with
+these fields in this case. The option works as follows, given these
+citations as an example:
+
+\begin{verbatim}
+\cite{key}
+\cite[a note]{key}
+\cite[125]{key}
+\end{verbatim}
+%
+\texttt{citepages=permit} allows duplicates, i.e., the style will
+print both the \texttt{pages}\slash \texttt{pagetotal} and the
+\texttt{postnote}. This is the default setting:
+
+\begin{quote}
+Author. \enquote{Title.} In: \emph{Book,} pp.\,100--150.
+
+Author. \enquote{Title.} In: \emph{Book,} pp.\,100--150, a note.
+
+Author. \enquote{Title.} In: \emph{Book,} pp.\,100--150, p.\,125.
+\end{quote}
+%
+\texttt{citepages=suppress} unconditionally suppresses the
+\texttt{pages}\slash \texttt{pagetotal} fields in citations,
+regardless of the \texttt{postnote}:
+
+\begin{quote}
+Author. \enquote{Title.} In: \emph{Book.}
+
+Author. \enquote{Title.} In: \emph{Book,} a note.
+
+Author. \enquote{Title.} In: \emph{Book,} p.\,125.
+\end{quote}
+%
+\texttt{citepages=omit} suppresses the \texttt{pages}\slash
+\texttt{pagetotal} in the third case only. They are still printed if
+there is no \texttt{postnote} or if the \texttt{postnote} is not a
+number or range:
+
+\begin{quote}
+Author. \enquote{Title.} In: \emph{Book,} pp.\,100--150.
+
+Author. \enquote{Title.} In: \emph{Book,} pp.\,100--150, a note.
+
+Author. \enquote{Title.} In: \emph{Book,} p.\,125.
+\end{quote}
+%
+\texttt{citepages=separate} separates the \texttt{pages}\slash
+\texttt{pagetotal} from the \texttt{postnote} in the third case:
+
+\begin{quote}
+Author. \enquote{Title.} In: \emph{Book,} pp.\,100--150.
+
+Author. \enquote{Title.} In: \emph{Book,} pp.\,100--150, a note.
+
+Author. \enquote{Title.} In: \emph{Book,} pp.\,100--150, esp. p.\,125.
+\end{quote}
+%
+The string \enquote{especially} in the third case is the bibliography
+string \texttt{thiscite}, which may be redefined.
+
+\subsubsection*{The \texttt{dashed} option}
+
+By default, this style replaces recurrent authors/editors in the
+bibliography by a dash so that items by the same author or editor
+are visually grouped. This feature is controlled by the package
+option \texttt{dashed}. Setting \texttt{dashed=false} in the
+preamble will disable this feature. The default setting is
+\texttt{dashed=true}.
+
+\subsection*{Hints}
+
+If you want terms such as \emph{ibidem} to be printed in italics,
+redefine \cmd{mkibid} as follows:
+
+\begin{verbatim}
+\renewcommand*{\mkibid}{\emph}
+\end{verbatim}
+
+\clearpage
+
+\subsection*{\cmd{footcite} examples}
+
+% The initial citation of an entry includes all the data.
+This is just filler text.\footcite{aristotle:anima}
+This is just filler text.\footcite{aristotle:physics}
+This is just filler text \footcite{averroes/bland}.
+% Subsequent citations are pointers to the initial citation.
+This is just filler text.\footcite{aristotle:anima}
+This is just filler text.\footcite{aristotle:physics}
+% If there is only one work by an author in the bibliography, the
+% title is omitted from the pointer.
+This is just filler text \footcite{averroes/bland}.
+
+\clearpage
+
+% Immediately repeated citations are replaced by the
+% abbreviation 'ibidem'...
+This is just filler text.\footcite{aristotle:anima}
+This is just filler text.\footcite{aristotle:anima}
+This is just filler text.\footcite{aristotle:physics}
+This is just filler text.\footcite{aristotle:physics}
+\clearpage
+% ... unless the citation is the first one on the current page
+% or double page spread (depending on the setting of the
+% 'pagetracker' package option).
+This is just filler text.\footcite{aristotle:physics}
+This is just filler text.\footcite{aristotle:physics}
+
+\clearpage
+
+% If the 'shorthand' field is defined, the shorthand is introduced
+% on the first citation.
+This is just filler text.\footcite{kant:kpv}
+This is just filler text.\footcite{kant:ku}
+% All subsequent citations will then use the shorthand instead of
+% a reference to a previous footnote.
+This is just filler text.\footcite[24]{kant:kpv}
+This is just filler text.\footcite[59--63]{kant:ku}
+
+\clearpage
+
+\subsection*{\cmd{autocite} examples}
+
+% The \autocite command works like \footcite. Note that
+% the period is moved and placed before the footnote.
+
+This is just filler text \autocite{aristotle:rhetoric}.
+This is just filler text \autocite{averroes/bland}.
+This is just filler text \autocite{aristotle:rhetoric}.
+This is just filler text \autocite{aristotle:anima}.
+This is just filler text \autocite{aristotle:anima}.
+This is just filler text \autocite{aristotle:physics}.
+This is just filler text \autocite{aristotle:physics}.
+
+\clearpage
+
+% Since all bibliographic data is provided on the first citation,
+% this style may be used without a list of references and
+% shorthands. Of course these lists may still be printed if desired.
+
+\printshorthands
+\printbibliography
+
+\end{document}
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/74-style-verbose-trad1-biber-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/74-style-verbose-trad1-biber-ms.pdf
new file mode 100644
index 0000000000..4e50b69c8a
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/74-style-verbose-trad1-biber-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/74-style-verbose-trad1-bibtex-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/74-style-verbose-trad1-bibtex-ms.pdf
new file mode 100644
index 0000000000..f0f96a1122
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/74-style-verbose-trad1-bibtex-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/74-style-verbose-trad1-ms.tex b/macros/latex/contrib/biblatex-ms/doc/examples/74-style-verbose-trad1-ms.tex
new file mode 100644
index 0000000000..733792a3d2
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/74-style-verbose-trad1-ms.tex
@@ -0,0 +1,401 @@
+%
+% This file presents the 'verbose-trad1' style
+%
+\documentclass[a4paper]{article}
+\usepackage[T1]{fontenc}
+\usepackage[utf8]{inputenc}
+\usepackage[german,american]{babel}
+\usepackage{csquotes}
+\usepackage[style=verbose-trad1,backend=biber]{biblatex-ms}
+\usepackage{tabularx}
+\usepackage{booktabs}
+\addbibresource{biblatex-examples.bib}
+% Some generic settings:
+\newcommand*{\cmd}[1]{\texttt{\textbackslash #1}}
+\newcolumntype{H}{>{\bfseries}l}
+\newcolumntype{C}{>{\ttfamily}c}
+\newcolumntype{V}{>{\ttfamily}l}
+\newenvironment*{inlinetable}
+ {\trivlist\footnotesize\item}
+ {\endtrivlist}
+\newcommand*{\code}[1]{%
+ \detokenize\expandafter{\string#1}}
+\newenvironment*{pseudofootnotes}
+ {\list\labelenumi{%
+ \def\makelabel##1{\hss\llap{##1}}%
+ \def\labelenumi{\theenumi}%
+ \usecounter{enumi}%
+ \setlength{\leftmargin}{0pt}%
+ \setlength{\labelsep}{0.75em}%
+ \setlength{\itemsep}{0pt}%
+ \setlength{\parsep}{0pt}}%
+ \citereset
+ \footnotesize
+ \def\footcite##1{\item\Cite{##1}.}%
+ \def\footnote##1{\item##1}}
+ {\endlist}
+\newenvironment*{pseudofootnotes*}
+ {\pseudofootnotes
+ \def\footnote##1{\item##1\mancite}}
+ {\endpseudofootnotes}
+\begin{document}
+
+\section*{The \texttt{verbose-trad1} style}
+
+This is a traditional citation style which uses scholarly
+abbreviations like \emph{ibidem}, \emph{idem}, \emph{opere citato},
+and \emph{loco citato} in a special way to replace recurrent
+authors, titles, and page ranges across separate citation commands.
+This style is best explained by example.
+
+\subsection*{Outline}
+
+Let's assume a \texttt{bib} file with the following entries:
+
+\begin{inlinetable}
+\begin{tabularx}{\linewidth}{@{}CX@{}}
+\toprule
+\multicolumn{1}{@{}H}{Entry Key} &
+\multicolumn{1}{H}{Entry Data} \\
+\cmidrule(r){1-1}\cmidrule(l){2-2}
+a1 & Author A, Title 1 \\
+a2 & Author A, Title 2 \\
+a3 & Author A, Title 3 \\
+b1 & Author B, Title 1 \\
+\bottomrule
+\end{tabularx}
+\end{inlinetable}
+%
+Here's an example of how this citation scheme works:
+
+\begin{inlinetable}
+\begin{tabularx}{\linewidth}{@{}VlX@{}}
+\toprule
+\multicolumn{1}{@{}H}{Command} &
+\multicolumn{1}{H}{Conditions} &
+\multicolumn{1}{H}{Citation} \\
+\cmidrule(r){1-1}\cmidrule(lr){2-2}\cmidrule(l){3-3}
+\code{\cite{a1}} & Initial reference & Verbose citation \\
+\cmidrule(r){1-1}\cmidrule(lr){2-2}\cmidrule(l){3-3}
+\code{\cite{b1}} & Initial reference & Verbose citation \\
+\cmidrule(r){1-1}\cmidrule(lr){2-2}\cmidrule(l){3-3}
+\code{\cite[26]{a1}} & Author changed & Author, \emph{op.~cit.}, page \\
+ & + Title is last title by \emph{this} author \\
+ & + Page is new/different from last page cited \\
+\cmidrule(r){1-1}\cmidrule(lr){2-2}\cmidrule(l){3-3}
+\code{\cite[59]{b1}} & Author changed & Author, \emph{op.~cit.}, page \\
+ & + Title is last title by \emph{this} author \\
+ & + Page is new/different from last page cited \\
+\cmidrule(r){1-1}\cmidrule(lr){2-2}\cmidrule(l){3-3}
+\code{\cite[26]{a1}} & Author changed & Author, \emph{loc.~cit.} \\
+ & + Title is last title by \emph{this} author \\
+ & + Page is last page cited from \emph{this} work \\
+\cmidrule(r){1-1}\cmidrule(lr){2-2}\cmidrule(l){3-3}
+\code{\cite[59]{b1}} & Author changed & Author, \emph{loc.~cit.} \\
+ & + Title is last title by \emph{this} author \\
+ & + Page is last page cited from \emph{this} work \\
+\cmidrule(r){1-1}\cmidrule(lr){2-2}\cmidrule(l){3-3}
+\code{\cite{a2}} & Initial reference & Verbose citation \\
+\cmidrule(r){1-1}\cmidrule(lr){2-2}\cmidrule(l){3-3}
+\code{\cite{b1}} & Author changed & Author, \emph{op.~cit.} \\
+ & + Title is last title by \emph{this} author \\
+\cmidrule(r){1-1}\cmidrule(lr){2-2}\cmidrule(l){3-3}
+\code{\cite{a1}} & Author changed & Author, Title \\
+ & + Title different from last title by \emph{this} author \\
+ & + Title has been cited before \\
+\cmidrule(r){1-1}\cmidrule(lr){2-2}\cmidrule(l){3-3}
+\code{\cite[55]{a2}} & Same author & \emph{idem}, Title, page \\
+ & + Title different from last title by \emph{this} author \\
+ & + Title has been cited before \\
+\cmidrule(r){1-1}\cmidrule(lr){2-2}\cmidrule(l){3-3}
+\code{\cite[25]{a2}} & Same author and title & \emph{ibidem}, page \\
+ & + Page is different from last page cited \\
+\cmidrule(r){1-1}\cmidrule(lr){2-2}\cmidrule(l){3-3}
+\code{\cite[25]{a2}} & Same author and title and page
+ & \emph{ibidem}, page \\
+\code{\cite[25]{a2}} & (with option \texttt{ibidpage=true})
+ & \emph{ibidem} \\
+\bottomrule
+\end{tabularx}
+\end{inlinetable}
+
+\clearpage
+
+\subsection*{Additional package options}
+
+\subsubsection*{The \texttt{ibidpage} option}
+
+The scholarly abbreviation \emph{ibidem} is sometimes taken to mean
+both `same author~+ same title' and `same author~+ same title~+ same
+page' in traditional citation schemes. By default, this is not the
+case with this style because it may lead to ambiguous citations.
+With \texttt{ibidpage=true} a page range postnote will be suppressed
+in an \emph{ibidem} citation if the last citation was to the same
+page range. With \texttt{ibidpage=false} the postnote is not omitted.
+Citations to different page ranges than the previous always produce
+the page ranges with either setting.
+The default setting is \texttt{ibidpage=false}.
+
+Consider the following example citations
+\begin{verbatim}
+\cite[12]{cicero}
+\cite[12]{cicero}
+\cite[12]{worman}
+\cite[13]{worman}
+\end{verbatim}
+%
+If \texttt{ibidpage} is set to \texttt{true}, the citations
+come out -- shortened -- as
+\begin{quote}
+Cicero, \emph{De natura deorum,} p.~12
+
+ibid.
+
+Worman, \emph{The Cast of Character,} p.~12
+
+ibid., p.~13
+\end{quote}
+%
+The shortened result for \texttt{ibidpage=false} is
+\begin{quote}
+Cicero, \emph{De natura deorum,} p.~12
+
+ibid., p.~12
+
+Worman, \emph{The Cast of Character,} p.~12
+
+ibid., p.~13
+\end{quote}
+
+\subsubsection*{The \texttt{dashed} option}
+
+A case related to the definition of \emph{ibidem} is the scope of
+the \emph{ibidem} and \emph{idem} replacements. By default, this
+style will only use such abbreviations if the respective citations
+are given in the same footnote or in consecutive footnotes. The
+point of this restriction is also to avoid potentially ambiguous
+citations. Here's an example:
+
+\begin{verbatim}
+...\footcite{aristotle:anima}
+...\footcite{aristotle:anima}
+...\footnote{Averroes touches upon this issue in his \emph{Epistle
+ on the Possibility of Conjunction}.}
+...\footcite{aristotle:anima}
+\end{verbatim}
+%
+This could be rendered as follows:
+
+\begin{pseudofootnotes}
+\footcite{aristotle:anima}
+\footcite{aristotle:anima}
+\footnote{Averroes touches upon this issue in his \emph{Epistle on
+the Possibility of Conjunction}.}
+\footcite{aristotle:anima}
+\end{pseudofootnotes}
+%
+What does the \emph{ibidem} in the last footnote refer to? The last
+formal citation, as given in the first and the second footnote
+(Aristotle), or the informal reference in the third one (Averroes)?
+Too avoid such citations, this style will only use \emph{ibidem} and
+\emph{idem} replacements if the respective citations are given in
+the same footnote or in consecutive footnotes:
+
+\begin{pseudofootnotes*}
+\footcite{aristotle:anima}
+\footcite{aristotle:anima}
+\footnote{Averroes touches upon this issue in his \emph{Epistle on
+the Possibility of Conjunction}.}
+\footcite{aristotle:anima}
+\end{pseudofootnotes*}
+%
+Depending on your writing and citing habits, however, you may prefer
+the less strict \emph{ibidem} and \emph{idem} handling. You can
+force that by setting the package option \texttt{strict=false} in
+the preamble. It is still possible to mark a manually inserted
+discursive citation with \cmd{mancite} when required:
+
+\begin{verbatim}
+...\footcite{aristotle:anima}
+...\footnote{\mancite Averroes touches upon this issue in his
+ \emph{Epistle on the Possibility of Conjunction}.}
+...\footcite{aristotle:anima}
+\end{verbatim}
+%
+This will suppress the \emph{ibidem} in the last footnote.
+
+\subsubsection*{The \texttt{citepages} option}
+
+Use this option to fine-tune the formatting of the \texttt{pages}
+and \texttt{pagetotal} fields in verbose citations. When an entry
+with a \texttt{pages} field is cited for the first time and the
+\texttt{postnote} is a page number or a page range, the citation
+will end with two page specifications:
+
+\begin{quote}
+Author. \enquote{Title.} In: \emph{Book,} pp.\,100--150, p.\,125.
+\end{quote}
+%
+In this example, \enquote{125} is the \texttt{postnote} and
+\enquote{100--150} is the \texttt{pages} field (there are similar
+issues with the \texttt{pagetotal} field). This may be confusing to
+the reader. The \texttt{citepages} option controls how to deal with
+these fields in this case. The option works as follows, given these
+citations as an example:
+
+\begin{verbatim}
+\cite{key}
+\cite[a note]{key}
+\cite[125]{key}
+\end{verbatim}
+%
+\texttt{citepages=permit} allows duplicates, i.e., the style will
+print both the \texttt{pages}\slash \texttt{pagetotal} and the
+\texttt{postnote}. This is the default setting:
+
+\begin{quote}
+Author. \enquote{Title.} In: \emph{Book,} pp.\,100--150.
+
+Author. \enquote{Title.} In: \emph{Book,} pp.\,100--150, a note.
+
+Author. \enquote{Title.} In: \emph{Book,} pp.\,100--150, p.\,125.
+\end{quote}
+%
+\texttt{citepages=suppress} unconditionally suppresses the
+\texttt{pages}\slash \texttt{pagetotal} fields in citations,
+regardless of the \texttt{postnote}:
+
+\begin{quote}
+Author. \enquote{Title.} In: \emph{Book.}
+
+Author. \enquote{Title.} In: \emph{Book,} a note.
+
+Author. \enquote{Title.} In: \emph{Book,} p.\,125.
+\end{quote}
+%
+\texttt{citepages=omit} suppresses the \texttt{pages}\slash
+\texttt{pagetotal} in the third case only. They are still printed if
+there is no \texttt{postnote} or if the \texttt{postnote} is not a
+number or range:
+
+\begin{quote}
+Author. \enquote{Title.} In: \emph{Book,} pp.\,100--150.
+
+Author. \enquote{Title.} In: \emph{Book,} pp.\,100--150, a note.
+
+Author. \enquote{Title.} In: \emph{Book,} p.\,125.
+\end{quote}
+%
+\texttt{citepages=separate} separates the \texttt{pages}\slash
+\texttt{pagetotal} from the \texttt{postnote} in the third case:
+
+\begin{quote}
+Author. \enquote{Title.} In: \emph{Book,} pp.\,100--150.
+
+Author. \enquote{Title.} In: \emph{Book,} pp.\,100--150, a note.
+
+Author. \enquote{Title.} In: \emph{Book,} pp.\,100--150, esp. p.\,125.
+\end{quote}
+%
+The string \enquote{especially} in the third case is the bibliography
+string \texttt{thiscite}, which may be redefined.
+
+\subsubsection*{The \texttt{dashed} option}
+
+By default, this style replaces recurrent authors/editors in the
+bibliography by a dash so that items by the same author or editor
+are visually grouped. This feature is controlled by the package
+option \texttt{dashed}. Setting \texttt{dashed=false} in the
+preamble will disable this feature. The default setting is
+\texttt{dashed=true}.
+
+\subsection*{Hints and caveats}
+
+If you want terms such as \emph{ibidem} to be printed in italics,
+redefine \cmd{mkibid} as follows:
+
+\begin{verbatim}
+\renewcommand*{\mkibid}{\emph}
+\end{verbatim}
+%
+German users should note that the scholarly abbreviations typically
+used in German do not make a clear distinction between
+\emph{op.~cit.} and \emph{loc.~cit.} Both are rendered as
+\emph{a.a.O.}, possibly causing some citations to be misleading. It
+may be preferable to use the \texttt{verbose-trad2} style in German
+documents. If you really want to use \texttt{verbose-trad1}, use the
+Latin keywords. This is accomplished by putting the following in the
+preamble or the configuration file:
+
+\begin{verbatim}
+\DefineBibliographyStrings{german}{%
+ idem = {idem},
+ idemsm = {idem},
+ idemsf = {eadem},
+ idemsn = {idem},
+ idempm = {eidem},
+ idempf = {eaedem},
+ idempn = {eadem},
+ idempp = {eidem},
+ ibidem = {ibid\adddot},
+ opcit = {op\adddotspace cit\adddot},
+ loccit = {loc\adddotspace cit\adddot},
+}
+\end{verbatim}
+%
+Now let's go over the previous examples again, using real
+bibliography entries this time.
+
+\clearpage
+
+\subsection*{\cmd{footcite} examples}
+
+This is just filler text.\footcite{aristotle:anima}
+This is just filler text.\footcite{averroes/bland}
+This is just filler text.\footcite[26]{aristotle:anima}
+This is just filler text.\footcite[59--61]{averroes/bland}
+This is just filler text.\footcite[26]{aristotle:anima}
+This is just filler text.\footcite[59--61]{averroes/bland}
+This is just filler text.\footcite{aristotle:physics}
+This is just filler text.\footcite{averroes/bland}
+This is just filler text.\footcite{aristotle:anima}
+This is just filler text.\footcite[55]{aristotle:physics}
+This is just filler text.\footcite[25]{aristotle:physics}
+% ibidpage=true would suppress the following page number:
+This is just filler text.\footcite[25]{aristotle:physics}
+
+\clearpage
+
+% If the 'shorthand' field is defined, the shorthand is introduced
+% on the first citation. All subsequent citations will then use the
+% shorthand.
+
+This is just filler text.\footcite{kant:kpv}
+This is just filler text.\footcite{kant:ku}
+This is just filler text.\footcite[24]{kant:kpv}
+This is just filler text.\footcite[59--63]{kant:ku}
+
+\clearpage
+
+\subsection*{\cmd{autocite} examples}
+
+% The \autocite command works like \footcite. Note that
+% the period is moved and placed before the footnote.
+
+This is just filler text \autocite{aristotle:rhetoric}.
+This is just filler text \autocite{averroes/bland}.
+This is just filler text \autocite{aristotle:rhetoric}.
+This is just filler text \autocite{aristotle:anima}.
+This is just filler text \autocite{aristotle:physics}.
+This is just filler text \autocite{aristotle:physics}.
+
+\clearpage
+
+% Since all bibliographic data is provided on the first citation,
+% this style may be used without a list of references and
+% shorthands. Of course these lists may still be printed if desired.
+
+\printshorthands
+\printbibliography
+
+\end{document}
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/75-style-verbose-trad2-biber-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/75-style-verbose-trad2-biber-ms.pdf
new file mode 100644
index 0000000000..b494bd863a
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/75-style-verbose-trad2-biber-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/75-style-verbose-trad2-bibtex-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/75-style-verbose-trad2-bibtex-ms.pdf
new file mode 100644
index 0000000000..5fa4322976
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/75-style-verbose-trad2-bibtex-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/75-style-verbose-trad2-ms.tex b/macros/latex/contrib/biblatex-ms/doc/examples/75-style-verbose-trad2-ms.tex
new file mode 100644
index 0000000000..42fc953475
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/75-style-verbose-trad2-ms.tex
@@ -0,0 +1,293 @@
+%
+% This file presents the 'verbose-trad2' style
+%
+\documentclass[a4paper]{article}
+\usepackage[T1]{fontenc}
+\usepackage[utf8]{inputenc}
+\usepackage[american]{babel}
+\usepackage{csquotes}
+\usepackage[style=verbose-trad2,backend=biber]{biblatex-ms}
+\addbibresource{biblatex-examples.bib}
+% Some generic settings:
+\newcommand{\cmd}[1]{\texttt{\textbackslash #1}}
+\newenvironment*{pseudofootnotes}
+ {\list\labelenumi{%
+ \def\makelabel##1{\hss\llap{##1}}%
+ \def\labelenumi{\theenumi}%
+ \usecounter{enumi}%
+ \setlength{\leftmargin}{0pt}%
+ \setlength{\labelsep}{0.75em}%
+ \setlength{\itemsep}{0pt}%
+ \setlength{\parsep}{0pt}}%
+ \citereset
+ \footnotesize
+ \def\footcite##1{\item\Cite{##1}.}%
+ \def\footnote##1{\item##1}}
+ {\endlist}
+\newenvironment*{pseudofootnotes*}
+ {\pseudofootnotes
+ \def\footnote##1{\item##1\mancite}}
+ {\endpseudofootnotes}
+\begin{document}
+
+\section*{The \texttt{verbose-trad2} style}
+
+This is another traditional style which uses scholarly abbreviations
+like \emph{ibidem} and \emph{idem}. Despite its name, the `logic' of
+this style is more closely related to styles like
+\texttt{verbose-ibid} and \texttt{verbose-inote} than to the rather
+special citation scheme implemented in the \texttt{verbose-trad1}
+style.
+
+\subsection*{Additional package options}
+
+\subsubsection*{The \texttt{ibidpage} option}
+
+The scholarly abbreviation \emph{ibidem} is sometimes taken to mean
+both `same author~+ same title' and `same author~+ same title~+ same
+page' in traditional citation schemes. By default, this is not the
+case with this style because it may lead to ambiguous citations.
+With \texttt{ibidpage=true} a page range postnote will be suppressed
+in an \emph{ibidem} citation if the last citation was to the same
+page range. With \texttt{ibidpage=false} the postnote is not omitted.
+Citations to different page ranges than the previous always produce
+the page ranges with either setting.
+The default setting is \texttt{ibidpage=false}.
+
+Consider the following example citations
+\begin{verbatim}
+\cite[12]{cicero}
+\cite[12]{cicero}
+\cite[12]{worman}
+\cite[13]{worman}
+\end{verbatim}
+%
+If \texttt{ibidpage} is set to \texttt{true}, the citations
+come out -- shortened -- as
+\begin{quote}
+Cicero, \emph{De natura deorum,} p.~12
+
+ibid.
+
+Worman, \emph{The Cast of Character,} p.~12
+
+ibid., p.~13
+\end{quote}
+%
+The shortened result for \texttt{ibidpage=false} is
+\begin{quote}
+Cicero, \emph{De natura deorum,} p.~12
+
+ibid., p.~12
+
+Worman, \emph{The Cast of Character,} p.~12
+
+ibid., p.~13
+\end{quote}
+
+\subsubsection*{The \texttt{dashed} option}
+
+A case related to the definition of \emph{ibidem} is the scope of
+the \emph{ibidem} and \emph{idem} replacements. By default, this
+style will only use such abbreviations if the respective citations
+are given in the same footnote or in consecutive footnotes. The
+point of this restriction is also to avoid potentially ambiguous
+citations. Here's an example:
+
+\begin{verbatim}
+...\footcite{aristotle:anima}
+...\footcite{aristotle:anima}
+...\footnote{Averroes touches upon this issue in his \emph{Epistle
+ on the Possibility of Conjunction}.}
+...\footcite{aristotle:anima}
+\end{verbatim}
+%
+This could be rendered as follows:
+
+\begin{pseudofootnotes}
+\footcite{aristotle:anima}
+\footcite{aristotle:anima}
+\footnote{Averroes touches upon this issue in his \emph{Epistle on
+the Possibility of Conjunction}.}
+\footcite{aristotle:anima}
+\end{pseudofootnotes}
+%
+What does the \emph{ibidem} in the last footnote refer to? The last
+formal citation, as given in the first and the second footnote
+(Aristotle), or the informal reference in the third one (Averroes)?
+Too avoid such citations, this style will only use \emph{ibidem} and
+\emph{idem} replacements if the respective citations are given in
+the same footnote or in consecutive footnotes:
+
+\begin{pseudofootnotes*}
+\footcite{aristotle:anima}
+\footcite{aristotle:anima}
+\footnote{Averroes touches upon this issue in his \emph{Epistle on
+the Possibility of Conjunction}.}
+\footcite{aristotle:anima}
+\end{pseudofootnotes*}
+%
+Depending on your writing and citing habits, however, you may prefer
+the less strict \emph{ibidem} and \emph{idem} handling. You can
+force that by setting the package option \texttt{strict=false} in
+the preamble. It is still possible to mark a manually inserted
+discursive citation with \cmd{mancite} when required:
+
+\begin{verbatim}
+...\footcite{aristotle:anima}
+...\footnote{\mancite Averroes touches upon this issue in his
+ \emph{Epistle on the Possibility of Conjunction}.}
+...\footcite{aristotle:anima}
+\end{verbatim}
+%
+This will suppress the \emph{ibidem} in the last footnote.
+
+\subsubsection*{The \texttt{citepages} option}
+
+Use this option to fine-tune the formatting of the \texttt{pages}
+and \texttt{pagetotal} fields in verbose citations. When an entry
+with a \texttt{pages} field is cited for the first time and the
+\texttt{postnote} is a page number or a page range, the citation
+will end with two page specifications:
+
+\begin{quote}
+Author. \enquote{Title.} In: \emph{Book,} pp.\,100--150, p.\,125.
+\end{quote}
+%
+In this example, \enquote{125} is the \texttt{postnote} and
+\enquote{100--150} is the \texttt{pages} field (there are similar
+issues with the \texttt{pagetotal} field). This may be confusing to
+the reader. The \texttt{citepages} option controls how to deal with
+these fields in this case. The option works as follows, given these
+citations as an example:
+
+\begin{verbatim}
+\cite{key}
+\cite[a note]{key}
+\cite[125]{key}
+\end{verbatim}
+%
+\texttt{citepages=permit} allows duplicates, i.e., the style will
+print both the \texttt{pages}\slash \texttt{pagetotal} and the
+\texttt{postnote}. This is the default setting:
+
+\begin{quote}
+Author. \enquote{Title.} In: \emph{Book,} pp.\,100--150.
+
+Author. \enquote{Title.} In: \emph{Book,} pp.\,100--150, a note.
+
+Author. \enquote{Title.} In: \emph{Book,} pp.\,100--150, p.\,125.
+\end{quote}
+%
+\texttt{citepages=suppress} unconditionally suppresses the
+\texttt{pages}\slash \texttt{pagetotal} fields in citations,
+regardless of the \texttt{postnote}:
+
+\begin{quote}
+Author. \enquote{Title.} In: \emph{Book.}
+
+Author. \enquote{Title.} In: \emph{Book,} a note.
+
+Author. \enquote{Title.} In: \emph{Book,} p.\,125.
+\end{quote}
+%
+\texttt{citepages=omit} suppresses the \texttt{pages}\slash
+\texttt{pagetotal} in the third case only. They are still printed if
+there is no \texttt{postnote} or if the \texttt{postnote} is not a
+number or range:
+
+\begin{quote}
+Author. \enquote{Title.} In: \emph{Book,} pp.\,100--150.
+
+Author. \enquote{Title.} In: \emph{Book,} pp.\,100--150, a note.
+
+Author. \enquote{Title.} In: \emph{Book,} p.\,125.
+\end{quote}
+%
+\texttt{citepages=separate} separates the \texttt{pages}\slash
+\texttt{pagetotal} from the \texttt{postnote} in the third case:
+
+\begin{quote}
+Author. \enquote{Title.} In: \emph{Book,} pp.\,100--150.
+
+Author. \enquote{Title.} In: \emph{Book,} pp.\,100--150, a note.
+
+Author. \enquote{Title.} In: \emph{Book,} pp.\,100--150, esp. p.\,125.
+\end{quote}
+%
+The string \enquote{especially} in the third case is the bibliography
+string \texttt{thiscite}, which may be redefined.
+
+\subsubsection*{The \texttt{dashed} option}
+
+By default, this style replaces recurrent authors/editors in the
+bibliography by a dash so that items by the same author or editor
+are visually grouped. This feature is controlled by the package
+option \texttt{dashed}. Setting \texttt{dashed=false} in the
+preamble will disable this feature. The default setting is
+\texttt{dashed=true}.
+
+\subsection*{Hints}
+
+If you want terms such as \emph{ibidem} to be printed in italics,
+redefine \cmd{mkibid} as follows:
+
+\begin{verbatim}
+\renewcommand*{\mkibid}{\emph}
+\end{verbatim}
+
+\clearpage
+
+\subsection*{\cmd{footcite} examples}
+
+% The initial citation of an entry includes all the data.
+This is just filler text.\footcite{aristotle:anima}
+This is just filler text.\footcite{averroes/bland}
+% Subsequent citations use a shorter format.
+This is just filler text.\footcite[26]{aristotle:anima}
+This is just filler text.\footcite[59--61]{averroes/bland}
+This is just filler text.\footcite{aristotle:physics}
+% Repeated authors are replaced by the abbreviation 'idem':
+This is just filler text.\footcite{aristotle:anima}
+This is just filler text.\footcite[55]{aristotle:physics}
+% Immediately repeated citations are replaced by the
+% abbreviation 'ibidem'.
+This is just filler text.\footcite[25]{aristotle:physics}
+% ibidpage=true would suppress the following page number:
+This is just filler text.\footcite[25]{aristotle:physics}
+
+\clearpage
+
+% If the 'shorthand' field is defined, the shorthand is introduced
+% on the first citation.
+This is just filler text.\footcite{kant:kpv}
+This is just filler text.\footcite{kant:ku}
+% All subsequent citations will then use the shorthand instead of
+% the short author-title format.
+This is just filler text.\footcite[24]{kant:kpv}
+This is just filler text.\footcite[59--63]{kant:ku}
+
+\clearpage
+
+\subsection*{\cmd{autocite} examples}
+
+% The \autocite command works like \footcite. Note that
+% the period is moved and placed before the footnote.
+
+This is just filler text \autocite{aristotle:rhetoric}.
+This is just filler text \autocite{averroes/bland}.
+This is just filler text \autocite{aristotle:rhetoric}.
+This is just filler text \autocite{aristotle:anima}.
+This is just filler text \autocite{aristotle:physics}.
+This is just filler text \autocite{aristotle:physics}.
+
+\clearpage
+
+% Since all bibliographic data is provided on the first citation,
+% this style may be used without a list of references and
+% shorthands. Of course these lists may still be printed if desired.
+
+\printshorthands
+\printbibliography
+
+\end{document}
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/76-style-verbose-trad3-biber-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/76-style-verbose-trad3-biber-ms.pdf
new file mode 100644
index 0000000000..123210172c
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/76-style-verbose-trad3-biber-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/76-style-verbose-trad3-bibtex-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/76-style-verbose-trad3-bibtex-ms.pdf
new file mode 100644
index 0000000000..390fee5db5
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/76-style-verbose-trad3-bibtex-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/76-style-verbose-trad3-ms.tex b/macros/latex/contrib/biblatex-ms/doc/examples/76-style-verbose-trad3-ms.tex
new file mode 100644
index 0000000000..b3d958974f
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/76-style-verbose-trad3-ms.tex
@@ -0,0 +1,242 @@
+%
+% This file presents the 'verbose-trad3' style
+%
+\documentclass[a4paper]{article}
+\usepackage[T1]{fontenc}
+\usepackage[utf8]{inputenc}
+\usepackage[american]{babel}
+\usepackage{csquotes}
+\usepackage[style=verbose-trad3,backend=biber]{biblatex-ms}
+\addbibresource{biblatex-examples.bib}
+% Some generic settings:
+\newcommand{\cmd}[1]{\texttt{\textbackslash #1}}
+\newenvironment*{pseudofootnotes}
+ {\list\labelenumi{%
+ \def\makelabel##1{\hss\llap{##1}}%
+ \def\labelenumi{\theenumi}%
+ \usecounter{enumi}%
+ \setlength{\leftmargin}{0pt}%
+ \setlength{\labelsep}{0.75em}%
+ \setlength{\itemsep}{0pt}%
+ \setlength{\parsep}{0pt}}%
+ \citereset
+ \footnotesize
+ \def\footcite##1{\item\Cite{##1}.}%
+ \def\footnote##1{\item##1}}
+ {\endlist}
+\newenvironment*{pseudofootnotes*}
+ {\pseudofootnotes
+ \def\footnote##1{\item##1\mancite}}
+ {\endpseudofootnotes}
+\begin{document}
+
+\section*{The \texttt{verbose-trad3} style}
+
+This is another traditional style which uses the scholarly
+abbreviations \emph{ibidem} and \emph{op.~cit.} In contrast to
+\texttt{verbose-trad2}, \emph{ibidem} denotes `same author~+ same
+title~+ same page' and \emph{op.~cit.} denotes `same author~+ same
+title' in this style. All other citations are based on the title.
+
+\subsection*{Additional package options}
+
+\subsubsection*{The \texttt{strict} option}
+
+By default, this style will only use \emph{ibidem} and
+\emph{op.~cit.} if the respective citations are given in the same
+footnote or in consecutive footnotes. The point of this restriction
+is also to avoid potentially ambiguous citations. Here's an example:
+
+\begin{verbatim}
+...\footcite{aristotle:anima}
+...\footcite{aristotle:anima}
+...\footnote{Aristotle touches upon this issue
+ in his \emph{Rhetoric}.}
+...\footcite{aristotle:anima}
+\end{verbatim}
+%
+This could be rendered as follows:
+
+\begin{pseudofootnotes}
+\footcite{aristotle:anima}
+\footcite{aristotle:anima}
+\footnote{Aristotle touches upon this issue in his \emph{Rhetoric}.}
+\footcite{aristotle:anima}
+\end{pseudofootnotes}
+%
+What does the \emph{op.~cit.} in the last footnote refer to? The
+last formal citation, as given in the first and the second footnote
+(\emph{De Anima}), or the informal reference in the third one
+(\emph{Rhetoric})? Too avoid such citations, this style will only
+use abbreviations if the respective citations are given in the same
+footnote or in consecutive footnotes:
+
+\begin{pseudofootnotes*}
+\footcite{aristotle:anima}
+\footcite{aristotle:anima}
+\footnote{Aristotle touches upon this issue in his \emph{Rhetoric}.}
+\footcite{aristotle:anima}
+\end{pseudofootnotes*}
+%
+Depending on your writing and citing habits, however, you may prefer
+the less strict \emph{ibidem} and \emph{op.~cit.} handling. You can
+force that by setting the package option \texttt{strict=false} in
+the preamble. It is still possible to mark a manually inserted
+discursive citation with \cmd{mancite} when required:
+
+\begin{verbatim}
+...\footcite{aristotle:anima}
+...\footnote{\mancite Aristotle touches upon this issue
+ in his \emph{Rhetoric}.}
+...\footcite{aristotle:anima}
+\end{verbatim}
+%
+This will suppress the \emph{op.~cit.} in the last footnote.
+
+\subsubsection*{The \texttt{citepages} option}
+
+Use this option to fine-tune the formatting of the \texttt{pages}
+and \texttt{pagetotal} fields in verbose citations. When an entry
+with a \texttt{pages} field is cited for the first time and the
+\texttt{postnote} is a page number or a page range, the citation
+will end with two page specifications:
+
+\begin{quote}
+Author. \enquote{Title.} In: \emph{Book,} pp.\,100--150, p.\,125.
+\end{quote}
+%
+In this example, \enquote{125} is the \texttt{postnote} and
+\enquote{100--150} is the \texttt{pages} field (there are similar
+issues with the \texttt{pagetotal} field). This may be confusing to
+the reader. The \texttt{citepages} option controls how to deal with
+these fields in this case. The option works as follows, given these
+citations as an example:
+
+\begin{verbatim}
+\cite{key}
+\cite[a note]{key}
+\cite[125]{key}
+\end{verbatim}
+%
+\texttt{citepages=permit} allows duplicates, i.e., the style will
+print both the \texttt{pages}\slash \texttt{pagetotal} and the
+\texttt{postnote}. This is the default setting:
+
+\begin{quote}
+Author. \enquote{Title.} In: \emph{Book,} pp.\,100--150.
+
+Author. \enquote{Title.} In: \emph{Book,} pp.\,100--150, a note.
+
+Author. \enquote{Title.} In: \emph{Book,} pp.\,100--150, p.\,125.
+\end{quote}
+%
+\texttt{citepages=suppress} unconditionally suppresses the
+\texttt{pages}\slash \texttt{pagetotal} fields in citations,
+regardless of the \texttt{postnote}:
+
+\begin{quote}
+Author. \enquote{Title.} In: \emph{Book.}
+
+Author. \enquote{Title.} In: \emph{Book,} a note.
+
+Author. \enquote{Title.} In: \emph{Book,} p.\,125.
+\end{quote}
+%
+\texttt{citepages=omit} suppresses the \texttt{pages}\slash
+\texttt{pagetotal} in the third case only. They are still printed if
+there is no \texttt{postnote} or if the \texttt{postnote} is not a
+number or range:
+
+\begin{quote}
+Author. \enquote{Title.} In: \emph{Book,} pp.\,100--150.
+
+Author. \enquote{Title.} In: \emph{Book,} pp.\,100--150, a note.
+
+Author. \enquote{Title.} In: \emph{Book,} p.\,125.
+\end{quote}
+%
+\texttt{citepages=separate} separates the \texttt{pages}\slash
+\texttt{pagetotal} from the \texttt{postnote} in the third case:
+
+\begin{quote}
+Author. \enquote{Title.} In: \emph{Book,} pp.\,100--150.
+
+Author. \enquote{Title.} In: \emph{Book,} pp.\,100--150, a note.
+
+Author. \enquote{Title.} In: \emph{Book,} pp.\,100--150, esp. p.\,125.
+\end{quote}
+%
+The string \enquote{especially} in the third case is the bibliography
+string \texttt{thiscite}, which may be redefined.
+
+\subsubsection*{The \texttt{dashed} option}
+
+By default, this style replaces recurrent authors/editors in the
+bibliography by a dash so that items by the same author or editor
+are visually grouped. This feature is controlled by the package
+option \texttt{dashed}. Setting \texttt{dashed=false} in the
+preamble will disable this feature. The default setting is
+\texttt{dashed=true}.
+
+\subsection*{Hints}
+
+If you want terms such as \emph{ibidem} to be printed in italics,
+redefine \cmd{mkibid} as follows:
+
+\begin{verbatim}
+\renewcommand*{\mkibid}{\emph}
+\end{verbatim}
+
+\clearpage
+
+\subsection*{\cmd{footcite} examples}
+
+% The initial citation of an entry includes all the data.
+This is just filler text.\footcite{aristotle:anima}
+This is just filler text.\footcite{averroes/bland}
+% Subsequent citations use a shorter format.
+This is just filler text.\footcite[26]{aristotle:anima}
+This is just filler text.\footcite[59--61]{averroes/bland}
+This is just filler text.\footcite{aristotle:anima}
+% Immediately repeated citations are replaced by the
+% abbreviation 'op. cit.'.
+This is just filler text.\footcite{aristotle:anima}
+This is just filler text.\footcite[25]{aristotle:anima}
+% Only repeated citations with the same page number
+% are replaced by the abbreviation 'ibidem'.
+This is just filler text.\footcite[25]{aristotle:anima}
+
+\clearpage
+
+% If the 'shorthand' field is defined, the shorthand is introduced
+% on the first citation.
+This is just filler text.\footcite{kant:kpv}
+This is just filler text.\footcite{kant:ku}
+% All subsequent citations will then use the shorthand instead of
+% the short author-title format.
+This is just filler text.\footcite[24]{kant:kpv}
+This is just filler text.\footcite[59--63]{kant:ku}
+
+\clearpage
+
+\subsection*{\cmd{autocite} examples}
+
+% The \autocite command works like \footcite. Note that
+% the period is moved and placed before the footnote.
+
+This is just filler text \autocite{aristotle:rhetoric}.
+This is just filler text \autocite{averroes/bland}.
+This is just filler text \autocite{aristotle:anima}.
+This is just filler text \autocite[55]{aristotle:anima}.
+This is just filler text \autocite[55]{aristotle:anima}.
+
+\clearpage
+
+% Since all bibliographic data is provided on the first citation,
+% this style may be used without a list of references and
+% shorthands. Of course these lists may still be printed if desired.
+
+\printshorthands
+\printbibliography
+
+\end{document}
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/80-style-reading-biber-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/80-style-reading-biber-ms.pdf
new file mode 100644
index 0000000000..9b688abd3c
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/80-style-reading-biber-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/80-style-reading-bibtex-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/80-style-reading-bibtex-ms.pdf
new file mode 100644
index 0000000000..ff312a3f11
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/80-style-reading-bibtex-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/80-style-reading-ms.tex b/macros/latex/contrib/biblatex-ms/doc/examples/80-style-reading-ms.tex
new file mode 100644
index 0000000000..d0ccc64de3
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/80-style-reading-ms.tex
@@ -0,0 +1,77 @@
+%
+% This file presents the 'reading' style
+%
+\documentclass[a4paper]{article}
+\usepackage[T1]{fontenc}
+\usepackage[utf8]{inputenc}
+\usepackage[american]{babel}
+\usepackage{csquotes}
+\usepackage[style=reading,backend=biber]{biblatex-ms}
+\usepackage{tabularx}
+\usepackage{hyperref}
+\usepackage{booktabs}
+\addbibresource{biblatex-examples.bib}
+% Some generic settings:
+\newcommand*{\cmd}[1]{\texttt{\textbackslash #1}}
+\newcolumntype{K}{>{\ttfamily}l}
+\newcolumntype{V}{>{\ttfamily\raggedright\let\\\tabularnewline}p{55pt}}
+\newcolumntype{E}{>{\raggedright\let\\\tabularnewline}X}
+\newcolumntype{H}{>{\bfseries}l}
+\newenvironment*{inlinetable}
+ {\trivlist\footnotesize\item}
+ {\endtrivlist}
+\begin{document}
+
+\section*{The \texttt{reading} style}
+
+This style is useful for personal reading lists, annotated
+biblographies, and similar applications. It optionally adds short
+headers to the bibliography and includes the fields
+\texttt{annotation}, \texttt{abstract}, \texttt{library}, and
+\texttt{file}. Which items are printed depends on package options.
+
+\subsection*{Additional package options}
+
+This package provides the following additional package options:
+
+\begin{inlinetable}
+\begin{tabularx}{\linewidth}{@{}KVKE@{}}
+\toprule
+\multicolumn{1}{@{}H}{Key} &
+\multicolumn{1}{H}{Values} &
+\multicolumn{1}{H}{Default} &
+\multicolumn{1}{H}{Function} \\
+\cmidrule(r){1-1}\cmidrule(lr){2-2}
+\cmidrule(lr){3-3}\cmidrule(l){4-4}
+entryhead & true, false, full, name & true &
+The kind of header to print; \texttt{true} or \texttt{full} adds
+a full header including the name, the title, and the entry key
+(depending on the \texttt{entrykey} option) to each entry,
+\texttt{name} adds a name header once for each author,
+\texttt{false} disables the header\\
+entrykey & true, false & true &
+Whether to include the \texttt{entrykey} field in the
+\texttt{full} header\\
+annotation & true, false & true &
+Whether to print the \texttt{annotation} field\\
+abstract & true, false & true &
+Whether to print the \texttt{abstract} field\\
+library & true, false & true &
+Whether to print the \texttt{library} field\\
+file & true, false & true &
+Whether to print the \texttt{file} field\\
+loadfiles & true, false & true &
+Whether to load annotations and abstracts from external files
+(this is a standard option; see the manual for details)\\
+\bottomrule
+\end{tabularx}
+\end{inlinetable}
+%
+On the next page, there are some examples with all options at their default setting.
+
+\clearpage
+
+\nocite{laufenberg,kastenholz,padhye,sigfridsson,itzhaki,wassenberg}
+\printbibliography
+
+\end{document}
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/81-style-draft-biber-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/81-style-draft-biber-ms.pdf
new file mode 100644
index 0000000000..a8a75c0b97
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/81-style-draft-biber-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/81-style-draft-bibtex-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/81-style-draft-bibtex-ms.pdf
new file mode 100644
index 0000000000..35faadc49d
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/81-style-draft-bibtex-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/81-style-draft-ms.tex b/macros/latex/contrib/biblatex-ms/doc/examples/81-style-draft-ms.tex
new file mode 100644
index 0000000000..9d07437c0a
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/81-style-draft-ms.tex
@@ -0,0 +1,32 @@
+%
+% This file presents the 'draft' style
+%
+\documentclass[a4paper]{article}
+\usepackage[T1]{fontenc}
+\usepackage[utf8]{inputenc}
+\usepackage[american]{babel}
+\usepackage{csquotes}
+\usepackage[style=draft,backend=biber]{biblatex-ms}
+\usepackage{hyperref}
+\addbibresource{biblatex-examples.bib}
+% Some generic settings:
+\newcommand{\cmd}[1]{\texttt{\textbackslash #1}}
+\begin{document}
+
+\section*{The \texttt{draft} style}
+
+This is a draft style which simply uses the entry keys as citations.
+The entry keys are also included the in the bibliography which will
+be sorted by entry key.
+
+\subsection*{\cmd{cite} examples}
+
+\cite{bertram,companion,gillies,aristotle:anima}
+
+\subsection*{\cmd{autocite} examples}
+
+\autocite{baez/article,hammond,reese,spiegelberg}
+
+\printbibliography
+
+\end{document}
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/82-style-debug-biber-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/82-style-debug-biber-ms.pdf
new file mode 100644
index 0000000000..d737632db1
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/82-style-debug-biber-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/82-style-debug-bibtex-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/82-style-debug-bibtex-ms.pdf
new file mode 100644
index 0000000000..7bea4ffb11
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/82-style-debug-bibtex-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/82-style-debug-ms.tex b/macros/latex/contrib/biblatex-ms/doc/examples/82-style-debug-ms.tex
new file mode 100644
index 0000000000..f1ff8ca28a
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/82-style-debug-ms.tex
@@ -0,0 +1,35 @@
+%
+% This file presents the 'debug' style
+%
+\documentclass[a4paper]{article}
+\usepackage[T1]{fontenc}
+\usepackage[utf8]{inputenc}
+\usepackage[american]{babel}
+\usepackage{csquotes}
+\usepackage[style=debug,backend=biber]{biblatex-ms}
+\usepackage{hyperref}
+\addbibresource{biblatex-examples.bib}
+% Some generic settings:
+\newcommand{\cmd}[1]{\texttt{\textbackslash #1}}
+\setlength{\parindent}{0pt}
+\begin{document}
+
+\section*{The \texttt{debug} style}
+
+This style is intended for debugging only. The citations are printed as a list of all arguments passed to the citation command. The bibliography lists all bibliographic data in tabular format.
+
+\subsection*{Citation examples}
+
+\cite{companion}
+
+\parencite[30]{companion}
+
+\footcite[see][]{companion}
+
+\cite[see][30]{companion}
+
+\cites(see)()[30]{companion}
+
+\printbibliography
+
+\end{document}
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/90-related-entries-biber-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/90-related-entries-biber-ms.pdf
new file mode 100644
index 0000000000..52f4534e5a
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/90-related-entries-biber-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/90-related-entries-ms.tex b/macros/latex/contrib/biblatex-ms/doc/examples/90-related-entries-ms.tex
new file mode 100644
index 0000000000..0fadf0abfa
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/90-related-entries-ms.tex
@@ -0,0 +1,12 @@
+\documentclass[a4paper]{article}
+\usepackage{fontspec}
+\usepackage[american]{babel}
+\usepackage{csquotes}
+\usepackage[style=reading,backend=biber]{biblatex-ms}
+\usepackage{hyperref}
+\addbibresource{biblatex-examples.bib}
+\begin{document}
+\nocite{knuth:ct:related,kullback:related,moore:related}
+\nocite{doody,vangennep:trans,vangennep:related,vizedom:related}
+\printbibliography
+\end{document}
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/91-sorting-schemes-biber-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/91-sorting-schemes-biber-ms.pdf
new file mode 100644
index 0000000000..96507a9657
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/91-sorting-schemes-biber-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/91-sorting-schemes-ms.tex b/macros/latex/contrib/biblatex-ms/doc/examples/91-sorting-schemes-ms.tex
new file mode 100644
index 0000000000..39498d475a
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/91-sorting-schemes-ms.tex
@@ -0,0 +1,18 @@
+\documentclass[a4paper]{article}
+\usepackage{fontspec}
+\usepackage[american]{babel}
+\usepackage{csquotes}
+\usepackage[style=authoryear,sortcites,sorting=ynt,backend=biber]{biblatex-ms}
+\usepackage{hyperref}
+\addbibresource{biblatex-examples.bib}
+\begin{document}
+% This demonstrates that the sorting of citations can be difference to the
+% bibliography. However, this is not always advisable in case of multiple
+% citations in the same year for the same author list. This is because
+% extradate (the "a", "b" etc. in "Smith 2010a" and "Smith 2010b" etc.)
+% depends on the sorting order and if the sorting order is different
+% between citations and bibliography, this can cause confusion.
+Filler text \parencite{wassenberg,cicero,companion,angenendt}.
+\newrefcontext[sorting=nyt]
+\printbibliography
+\end{document}
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/92-bibliographylists-biber-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/92-bibliographylists-biber-ms.pdf
new file mode 100644
index 0000000000..b37b763903
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/92-bibliographylists-biber-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/92-bibliographylists-ms.tex b/macros/latex/contrib/biblatex-ms/doc/examples/92-bibliographylists-ms.tex
new file mode 100644
index 0000000000..e366706368
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/92-bibliographylists-ms.tex
@@ -0,0 +1,45 @@
+\documentclass[a4paper]{article}
+\usepackage{fontspec}
+\usepackage[american]{babel}
+\usepackage{csquotes}
+\usepackage[style=authoryear,backend=biber]{biblatex-ms}
+\usepackage{hyperref}
+\addbibresource{biblatex-examples.bib}
+
+% This is needed as printbiblist looks for a driver named after the biblist
+% name
+\DeclareBibliographyDriver{shorttitle}{%
+ \printfield{title}}
+
+% This is optional. If no sorting scheme is specified to \printbiblist, a
+% sorting scheme with the same name as the biblist is used if found.
+% Otherwise as a last resort the global sorting scheme is used
+\DeclareSortingTemplate{shorttitle}{
+ \sort{
+ \field{shorttitle}
+ }
+}
+
+% This is optional and in fact equivalent to the automatically created
+% filter for all fields like "shorttitle" which are declared as "label
+% fields" in the data model. However, if you define it, you can overwrite
+% the default definition which is shown here
+\DeclareBiblistFilter{shorttitle}{
+ \filter[type=field,filter=shorttitle]
+}
+
+% biblatex also creates automatically a "shorttitle" bibliography
+% environment (using \defbibenvironment) which is used by default. You can
+% either redefine this or use the "env" option to \printbiblist to use
+% another one instead.
+
+% The default "biblist" heading is used for all bibliography lists. This
+% can be changed using the "heading" option to \printbiblist
+
+\begin{document}
+\nocite{*}
+
+\printshorthands% With biber, just an alias for \printbiblist{shorthand}
+\printbiblist[title={Title Shorthands}]{shorttitle}
+\printbibliography
+\end{document}
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/93-nameparts-biber-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/93-nameparts-biber-ms.pdf
new file mode 100644
index 0000000000..2115a5c215
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/93-nameparts-biber-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/93-nameparts-ms.dbx b/macros/latex/contrib/biblatex-ms/doc/examples/93-nameparts-ms.dbx
new file mode 100644
index 0000000000..98bafea301
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/93-nameparts-ms.dbx
@@ -0,0 +1 @@
+\DeclareDatamodelConstant[type=list]{nameparts}{prefix,family,suffix,given,patronymic,papponymic,cjk}
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/93-nameparts-ms.tex b/macros/latex/contrib/biblatex-ms/doc/examples/93-nameparts-ms.tex
new file mode 100644
index 0000000000..8460170c6e
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/93-nameparts-ms.tex
@@ -0,0 +1,429 @@
+\documentclass[a4paper]{article}
+\usepackage{fontspec}
+\usepackage{libertine}
+\usepackage[fallback]{xeCJK}
+%\setCJKmainfont{Malgun Gothic}
+\setCJKmainfont{PingFang TC}% OSX
+
+\usepackage[english]{babel}
+\usepackage{csquotes}
+\begin{filecontents}[force]{\jobname.bib}
+@book{tolstoy,
+ author = {given=Лев, patronymic=Николаевич, family=Толстой, nametemplates=russian},
+ title = {Война и мир},
+ date = {1877},
+ langid = {russian},
+}
+@book{bulgakov,
+ author = {given=Михаил, patronymic=Афанасьевич, family=Булгаков, nametemplates=russian},
+ title = {Мастер и Маргарита},
+ date = {1966},
+ langid = {russian},
+}
+@book{bulgakov:val,
+ author = {given=Валентин, patronymic=Фёдорович, family=Булгаков, nametemplates=russian},
+ title = {Л. Н. Толстой в последний год его жизни},
+ date = {1911},
+ langid = {russian},
+}
+
+@book{dosto:1,
+ author = {given=Александр , patronymic=Андреевич, family=Достоевский, nametemplates=russian},
+ title = {О строении телец Грандри},
+ date = {1885},
+ langid = {russian},
+}
+@book{dosto:2,
+ author = {given=Андрей , patronymic=Андреевич, family=Достоевский, nametemplates=russian},
+ title = {П. П. Семенов-Тян-Шанский как исследователь, географ и статистик},
+ date = {1914},
+ langid = {russian},
+}
+
+@book{demeke,
+ author = {given=Kebede, patronymic=Daniel, papponymic=Demeke, nametemplates=ethiopian},
+ title = {One},
+ date = {1983}
+}
+@book{dameke,
+ author = {given=Kebede, patronymic=Daniel, papponymic=Dameke, nametemplates=ethiopian},
+ title = {Two},
+ date = {1983}
+}
+@book{james,
+ author = {given=Kebede, patronymic=James, papponymic=Demeke, nametemplates=ethiopian},
+ title = {Three},
+ date = {1983}
+}
+@book{jonathan,
+ author = {given=Kebede, patronymic=Jonathan, papponymic=Kebede, nametemplates=ethiopian},
+ title = {Four},
+ date = {1986}
+}
+@book{william,
+ author = {given=Kebede, patronymic=William, papponymic=Kebede, nametemplates=ethiopian},
+ title = {Four},
+ date = {1987}
+}
+
+@book{zhangx1,
+ title = {Shuming},
+ titleaddon = {書名},
+ author = {family=Zhang, cjk=章學成, given=Xuecheng, nametemplates=cjk},
+ location = {Beijing},
+ publisher = {Zhonghua Shuju},
+ date = {2017},
+}
+@book{zhangx2,
+ title = {Shuming er},
+ titleaddon = {書名二},
+ author = {family=Zhang, cjk=張學成, given=Xuecheng, nametemplates=cjk},
+ location = {Shanghai},
+ publisher = {Shangwu Yinshuguan},
+ date = {2016},
+}
+
+@book{bronte:c,
+ author = {Charlotte Brontë},
+ date = {1847},
+ title = {Jane Eyre},
+}
+@book{bronte:e,
+ author = {Emily Brontë},
+ date = {1847},
+ title = {Wuthering Heights},
+}
+
+@book{austen:jane,
+ author = {Jane Austen},
+ date = {1813},
+ title = {Pride and Prejudice},
+}
+@collection{austen:john,
+ editor = {John Austen},
+ editortype = {compiler},
+ date = {1924},
+ title = {Rogues in Porcelain: A Miscellany of 18th Poems},
+}
+\end{filecontents}
+\usepackage[style=authoryear,datamodel=93-nameparts,backend=biber, autolang=hyphen]{biblatex-ms}
+\addbibresource{biblatex-examples.bib}
+\addbibresource{\jobname.bib}
+
+
+% Use transliteration to sort Cyrillic among Latin script
+\DeclareSortTranslit{
+ \translit[russian]{*}{russian}{bgn/pcgn-standard}
+}
+
+\makeatletter
+%% CJK names
+% the idea is to sort family -> given -> cjk (full name)
+% and disambiguate in the same manner using only full
+% forms of the name, no initials
+% the order should always be family -> given -> cjk
+% names are not reversed
+\DeclareSortingNamekeyTemplate[cjk]{
+ \keypart{
+ \namepart{family}
+ }
+ \keypart{
+ \namepart{given}
+ }
+ \keypart{
+ \namepart{cjk}
+ }
+}
+
+\DeclareUniquenameTemplate[cjk]{
+ \namepart[base=true]{family}
+ \namepart[disambiguation=full]{given}
+ \namepart[disambiguation=full]{cjk}
+}
+
+\newbibmacro*{name:cjk}[3]{%
+ \usebibmacro{name:delim}{#2#3#1}%
+ \usebibmacro{name:hook}{#2#3#1}%
+ \mkbibnamefamily{#1}%
+ \ifdefvoid{#2}{}{\bibnamedelimd\mkbibnamegiven{#2}}%
+ \ifdefvoid{#3}{}{\bibnamedelimd\mkbibnamecjk{#3}}}
+
+%% Ethiopian names
+% Ethiopian names are given -> patronymic -> papponymic
+% the latter two are only needed for disambiguation
+% names order is never reversed
+\DeclareSortingNamekeyTemplate[ethiopian]{
+ \keypart{
+ \namepart{given}
+ }
+ \keypart{
+ \namepart{patronymic}
+ }
+ \keypart{
+ \namepart{papponymic}
+ }
+}
+
+\DeclareUniquenameTemplate[ethiopian]{
+ \namepart[base=true]{given}
+ \namepart[disambiguation=full]{patronymic}
+ \namepart[disambiguation=full]{papponymic}
+}
+
+\newbibmacro*{name:ethiopian}[3]{%
+ \usebibmacro{name:delim}{#1#2#3}%
+ \usebibmacro{name:hook}{#1#2#3}%
+ \mkbibethgiven{#1}%
+ \ifdefvoid{#2}{}{\bibnamedelimd\mkbibethpat{#2}\isdot}%
+ \ifdefvoid{#3}{}{\bibnamedelimd\mkbibethpap{#3}\isdot}}
+
+\let\mkbibethgiven\mkbibnamefamily
+\let\mkbibethpat\mkbibnamegiven
+\let\mkbibethpap\mkbibnamegiven
+
+%% Russian names
+% family -> given -> patronymic
+% we never show the given name alone, it is always accompanied
+% by the patronymic
+% (patronymic could just be treated as another given name)
+% reversed name order is 'family, given patronymic'
+\DeclareSortingNamekeyTemplate[russian]{
+ \keypart{
+ \namepart{family}
+ }
+ \keypart{
+ \namepart{given}
+ }
+ \keypart{
+ \namepart{patronymic}
+ }
+}
+
+\DeclareUniquenameTemplate[russian]{
+ \namepart[base=true]{family}
+ \namepart{given}
+ \namepart{patronymic}
+}
+
+\newbibmacro*{name:russian}[3]{%
+ \usebibmacro{name:delim}{#1#2#3}%
+ \usebibmacro{name:hook}{#1#2#3}%
+ \ifdefvoid{#2}
+ {}
+ {\mkbibnamegiven{#2}\isdot\bibnamedelimd
+ \ifdefvoid{#3}
+ {}
+ {\mkbibnamepatronymic{#3}\isdot\bibnamedelimd}}%
+ \mkbibnamefamily{#1}}
+
+\newbibmacro*{name:russian-rev}[3]{%
+ \usebibmacro{name:delim}{#1#2#3}%
+ \usebibmacro{name:hook}{#1#2#3}%
+ \mkbibnamefamily{#1}%
+ \ifdefvoid{#2}
+ {}
+ {\revsdnamepunct\bibnamedelimd
+ \mkbibnamegiven{#2}\isdot
+ \ifdefvoid{#3}
+ {}
+ {\bibnamedelimd\mkbibnamepatronymic{#3}\isdot}}}
+
+%% sortname
+% helper to select the sorting template in \ifcase
+\newcommand*{\abx@sortingnamekeytemplate}{0}
+\newcommand*{\abx@getsortingnamekeytemplate}{%
+ \ifsortingnamekeytemplatename{cjk}
+ {\def\abx@sortingnamekeytemplate{1}}
+ {\ifsortingnamekeytemplatename{ethiopian}
+ {\def\abx@sortingnamekeytemplate{2}}
+ {\ifsortingnamekeytemplatename{russian}
+ {\def\abx@sortingnamekeytemplate{3}}
+ {}}}}
+
+% show fullest version of names,
+% reverse Russian and western names for sorting
+% all other names are always in the correct order for sorting
+\DeclareNameFormat{sortname}{%
+ \abx@getsortingnamekeytemplate
+ \ifcase\abx@sortingnamekeytemplate\relax
+ \usebibmacro{name:family-given}
+ {\namepartfamily}
+ {\namepartgiven}
+ {\namepartprefix}
+ {\namepartsuffix}%
+ \or
+ \usebibmacro{name:cjk}
+ {\namepartfamily}
+ {\namepartgiven}
+ {\namepartcjk}%
+ \or
+ \usebibmacro{name:ethiopian}
+ {\namepartgiven}
+ {\namepartpatronymic}
+ {\namepartpapponymic}%
+ \or
+ \usebibmacro{name:russian-rev}
+ {\namepartfamily}
+ {\namepartgiven}
+ {\namepartpatronymic}%
+ \fi
+ \usebibmacro{name:andothers}}
+
+%% labelname
+% copy of the standard definition in biblatex.def
+% uses the 'old way' of finding the disambiguating name part
+\newbibmacro{labelname:western}{%
+ \ifcase\value{uniquename}%
+ \usebibmacro{name:family}
+ {\namepartfamily}
+ {\namepartgiven}
+ {\namepartprefix}
+ {\namepartsuffix}%
+ \or
+ \ifuseprefix
+ {\usebibmacro{name:given-family}
+ {\namepartfamily}
+ {\namepartgiveni}
+ {\namepartprefix}
+ {\namepartsuffixi}}
+ {\usebibmacro{name:given-family}
+ {\namepartfamily}
+ {\namepartgiveni}
+ {\namepartprefixi}
+ {\namepartsuffixi}}%
+ \or
+ \usebibmacro{name:given-family}
+ {\namepartfamily}
+ {\namepartgiven}
+ {\namepartprefix}
+ {\namepartsuffix}%
+ \fi
+ \usebibmacro{name:andothers}}
+
+% Uses \iffieldequalstr{uniquepart} to find the disambiguating
+% name part.
+% If neither base (i.e. family) nor given name are enough,
+% go with the full name.
+% Uses \empty for suppressed name parts, so we don't have to define
+% dedicated macros for the shorter name forms.
+\newbibmacro{labelname:cjk}{%
+ \iffieldequalstr{uniquepart}{base}%
+ {\usebibmacro{name:cjk}
+ {\namepartfamily}
+ {\empty}
+ {\empty}}
+ {\iffieldequalstr{uniquepart}{given}%
+ {\usebibmacro{name:cjk}
+ {\namepartfamily}
+ {\namepartgiven}
+ {\empty}}
+ {\usebibmacro{name:cjk}
+ {\namepartfamily}
+ {\namepartgiven}
+ {\namepartcjk}}}}
+
+% similar to the CJK format
+\newbibmacro{labelname:ethiopian}{%
+ \iffieldequalstr{uniquepart}{base}%
+ {\usebibmacro{name:ethiopian}
+ {\namepartgiven}
+ {\empty}
+ {\empty}}
+ {\iffieldequalstr{uniquepart}{patronymic}%
+ {\usebibmacro{name:ethiopian}
+ {\namepartgiven}
+ {\namepartpatronymic}
+ {\empty}}
+ {\usebibmacro{name:ethiopian}
+ {\namepartgiven}
+ {\namepartpatronymic}
+ {\namepartpapponymic}}}}
+
+% Uses \iffieldequalstr{uniquepart} to get the disambiguating
+% name part.
+% We only choose between 'Given Patronymic Family' and
+% 'G. P. Family', the decision whether or not to use
+% initials is for the given name to decide.
+% If the given initial is enough to disambiguate the name,
+% the given name and patronymic become initials.
+% Even if the initial of the patronymic would make the name
+% unique we go with the full name instead.
+% There is no 'Given P. Family' format.
+% \namepart<>un=1 says initials are enough
+% 2 means the full name is required
+% 0 means not used
+\newbibmacro{labelname:russian}{%
+ \iffieldequalstr{uniquepart}{base}%
+ {\usebibmacro{name:russian}
+ {\namepartfamily}
+ {\empty}
+ {\empty}}
+ {\ifnum\namepartgivenun=1\relax
+ \usebibmacro{name:russian}
+ {\namepartfamily}
+ {\namepartgiveni}
+ {\namepartpatronymici}%
+ \else
+ \usebibmacro{name:russian}
+ {\namepartfamily}
+ {\namepartgiven}
+ {\namepartpatronymic}%
+ \fi}}
+
+% helper to select the uniquename template in \ifcase
+\newcommand*{\abx@uniquenametemplatename}{0}
+\newcommand*{\abx@getuniquenametemplatename}{%
+ \ifuniquenametemplatename{cjk}
+ {\def\abx@uniquenametemplatename{1}}
+ {\ifuniquenametemplatename{ethiopian}
+ {\def\abx@uniquenametemplatename{2}}
+ {\ifuniquenametemplatename{russian}
+ {\def\abx@uniquenametemplatename{3}}
+ {}}}}
+
+\DeclareNameFormat{labelname}{%
+ \abx@getuniquenametemplatename
+ \ifcase\abx@uniquenametemplatename\relax
+ \usebibmacro{labelname:western}%
+ \or
+ \usebibmacro{labelname:cjk}%
+ \or
+ \usebibmacro{labelname:ethiopian}%
+ \or
+ \usebibmacro{labelname:russian}%
+ \fi
+ \usebibmacro{name:andothers}}
+\makeatother
+
+\begin{document}
+% Historically, name handling in latex bibliographies has been determined by
+% the name parsing rules of bibtex. In a modern context, this name handling
+% is rather archaic, restricted to Western names with the four parts
+% "family", "given", "prefix", "suffix" (often referred to in bibtex
+% documentation as "last", "first", "von" and "Jr" parts). When using biber,
+% it is possible to define arbitrary name parts since the allowable name
+% parts are defined in the data model (see accompanying file 93-nameparts.dbx).
+
+% Here we demonstrate the possibility of adding a new name parts to the
+% datamodel and then using it in formatting, sorting etc.
+% Notice that we can use the new name part types in the datasource
+% which is now allowable due to the enhanced datamodel constant definition.
+% We have also defined a new name format and method of sorting names which
+% are aware of the new name parts.
+%
+\textcite{tolstoy,bulgakov,bulgakov:val}
+
+\textcite{dosto:1}
+
+\textcite{dosto:2}
+
+\textcite{demeke,dameke,james,jonathan,william}
+
+\textcite{sigfridsson,worman,geer,knuth:ct:a,cicero,companion,vangennep}
+
+\textcite{bronte:c,bronte:e,austen:jane,austen:john}
+
+\textcite{zhangx1,zhangx2}
+
+\printbibliography
+\end{document}
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/94-labelprefix-biber-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/94-labelprefix-biber-ms.pdf
new file mode 100644
index 0000000000..c9cfda585e
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/94-labelprefix-biber-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/94-labelprefix-ms.tex b/macros/latex/contrib/biblatex-ms/doc/examples/94-labelprefix-ms.tex
new file mode 100644
index 0000000000..3b955331f5
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/94-labelprefix-ms.tex
@@ -0,0 +1,85 @@
+\documentclass[a4paper]{article}
+\usepackage{fontspec}
+\usepackage{csquotes}
+\usepackage[style=numeric, sorting=none, defernumbers=true, backend=biber]{biblatex-ms}
+\addbibresource{biblatex-examples.bib}
+
+\DeclareBibliographyCategory{cat1}
+\addtocategory{cat1}{yoon}
+\DeclareBibliographyCategory{cat2}
+\addtocategory{cat2}{piccato}
+\assignrefcontextcats[sorting=none,labelprefix=Q]{cat2}
+\assignrefcontextentries[labelprefix=Q]{yoon}
+\assignrefcontextkeyws*[sorting=none,labelprefix=S]{secondary}
+\defbibfilter{cats}{category=cat1 or category=cat2}
+
+\DeclareRefcontext{rcone}{labelprefix=R}
+\DeclareRefcontext{rctwo}{labelprefix=T}
+\DeclareRefcontext{rcthree}{sorting=nty}
+
+\setlength{\parindent}{0pt}
+\newcommand{\cmd}[1]{\texttt{\textbackslash #1}}
+\begin{document}
+This example demonstrates the quite complex options for assigning
+labelprefices to bibliographies and how citations decide which bibliography
+to point to. The default rule is that a citation will point to its entry in
+the last bibliography in which it appears. This can be overridden by
+explicit assignment to particular refcontexts with the
+\cmd{assignrefcontext*} macros.\\
+
+% refcontext=none/global//global/global
+
+This is a publication by Aristotle:
+\cite{aristotle:anima} % comes from refcontext=none/global/R/global/global
+
+These are not publications by Aristotle:
+\cite{yoon} % comes from default refcontext=none/global/Q/global/global due
+ % to \assignrefcontextentries
+\cite{worman} % comes from default refcontext=nty/global//global/global and not from
+ % nty/global/T/global/global in next refsection even though that is the
+ % last printed bib/biblist with worman in it. This is because
+ % refcontext defaults are local to refcontexts
+\cite{piccato} % comes from refcontext=none/global/Q/global/global due to \assignrefcontextcats
+\cite{nussbaum} % comes from refcontext=none/global/S/global/global due to \assignrefcontextkeyws*
+
+This is another publication by Aristotle:
+\cite{aristotle:physics} % comes from refcontext=none/global/R/global/global
+
+\begin{refcontext}{rcone}
+% refcontext=none/global/R/global/global
+\printbibliography[keyword=primary, title={Aristotle Publications}]
+% aristotle:anima and aristotle:physics default refcontext is this one
+\end{refcontext}
+
+% Alternative style of specifying refcontext
+% Note here that the optional argument to \newrefcontext overrides the
+% value set with the named refcontext
+\newrefcontext[labelprefix=S]{rctwo}
+% refcontext=none/global/S/global/global
+\printbibliography[notkeyword=primary, title={Other publications}]
+\endrefcontext
+
+\begin{refcontext}[labelprefix=Q]
+% refcontext=none/global/Q/global/global
+\printbibliography[filter=cats, title={Other publications}]
+\end{refcontext}
+
+\begin{refcontext}[sorting=nty]
+% refcontext=nty/global//global/global
+\printbibliography[resetnumbers, notkeyword=primary, title={More Other publications}]
+% Nussbaum default refcontext is this one
+% piccato default refcontext is this one
+% yoon default refcontext is this one
+% worman default refcontext is this one
+\cite{nussbaum} % comes from refcontext=nty/global//global/global due to weak \assignrefcontextkeyws*
+\end{refcontext}
+
+\section*{New Refsection}
+\newrefsection
+\cite{worman} % comes from default refcontext=nty/global/T/global/global
+\begin{refcontext}[labelprefix=T]{rcone}
+% refcontext=nty/global//global/global
+\printbibliography[resetnumbers, notkeyword=primary, title={More Other publications}]
+\end{refcontext}
+
+\end{document} \ No newline at end of file
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/95-customlists-biber-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/95-customlists-biber-ms.pdf
new file mode 100644
index 0000000000..294bc527bf
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/95-customlists-biber-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/95-customlists-ms.bib b/macros/latex/contrib/biblatex-ms/doc/examples/95-customlists-ms.bib
new file mode 100644
index 0000000000..611798f6b4
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/95-customlists-ms.bib
@@ -0,0 +1,23 @@
+@ARTICLE{test1,
+ AUTHOR = {Arthur Smith and James Jones and Bill Smiley and Jake Wrath},
+ JOURNALTITLE = {A Journal},
+ YEAR = {2010}
+}
+
+@ARTICLE{test2,
+ AUTHOR = {Philippa Smyth and Arthur Smith and Bill Likely},
+ JOURNALTITLE = {Another Journal},
+ YEAR = {2011}
+}
+
+@ARTICLE{test3,
+ AUTHOR = {Arthur Smith},
+ JOURNALTITLE = {The Best Journal},
+ YEAR = {2013}
+}
+
+@ARTICLE{test4,
+ AUTHOR = {Philippa Smyth and Arthur Smith and James Jones},
+ JOURNALTITLE = {Again Another Journal},
+ YEAR = {2014}
+}
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/95-customlists-ms.dbx b/macros/latex/contrib/biblatex-ms/doc/examples/95-customlists-ms.dbx
new file mode 100644
index 0000000000..5abddf79e6
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/95-customlists-ms.dbx
@@ -0,0 +1,3 @@
+\DeclareDatamodelFields[type=list, datatype=name, label=true]{coauthor}
+\DeclareDatamodelEntrytypes{coauthor}
+\DeclareDatamodelEntryfields[coauthor]{coauthor}
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/95-customlists-ms.tex b/macros/latex/contrib/biblatex-ms/doc/examples/95-customlists-ms.tex
new file mode 100644
index 0000000000..8cfc12d91c
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/95-customlists-ms.tex
@@ -0,0 +1,93 @@
+\documentclass[a4paper]{article}
+\usepackage{fontspec}
+% Using a custom data model to declare the "coauthor" field
+\usepackage[style=authoryear,datamodel=95-customlists,backend=biber]{biblatex-ms}
+\addbibresource{95-customlists.bib}
+
+% 1. First, check if the author list contain me, here, "Arthur Smith" (and
+% isn't *just* me as then we can ignore this entry as there are no coauthors)
+% 2. Copy the author field to a temporary field "coauthortext". We don't need
+% datamodel declarations for this as this will be deleted after use and
+% will never get anywhere near code that queries the data model.
+% 3. Remove me (Arthur Smith) from this temporary copy of the author list
+% 4. Turn the resulting field into a comma-separated list
+% 5. Loop over this comma-separated list, creating new entries of type
+% "coauthor" each with a "coauthor" name list field containing the data
+% from the loop variable
+% 6. Remove the temporary author field copy "coauthortext"
+%
+% The special $MAPLOOP variable holds each value of the csv field named by
+% the "foreach" option on the \map macro.
+% The special $MAPUNIQ variable is a random string generated automatically
+% at the beginning of each \map section. This is useful when you need a unique
+% string as we do here because citation keys should be unique.
+% $MAPLOOPVAL can be used to refer to the last created $MAPUNIQ
+\DeclareSourcemap{
+ \maps[datatype=bibtex]{
+ \map[overwrite]{
+ \step[fieldsource=author,
+ match=\regexp{Arthur\s+Smith}, final]
+ \step[fieldsource=author,
+ notmatch=\regexp{^Arthur\s+Smith$}, final]
+ \step[fieldsource=author, fieldset=coauthortext, origfieldval]
+ \step[fieldsource=coauthortext,
+ match=\regexp{Arthur\s+Smith\s+and\s+},
+ replace={}]
+ \step[fieldsource=coauthortext,
+ match=\regexp{\s+and\s+Arthur\s+Smith},
+ replace={}]
+ \step[fieldsource=coauthortext,
+ match=\regexp{\s+and\s+},
+ replace={,}]
+ }
+ \map[overwrite, foreach=coauthortext]{
+ \step[fieldsource=coauthortext, match=\regexp{.}, final]
+ \step[entrynew=\regexp{$MAPUNIQ}, entrynewtype=coauthor]
+ \step[entrytarget=\regexp{$MAPUNIQVAL}, fieldset=coauthor, fieldvalue=\regexp{$MAPLOOP}]
+ \step[entrytarget=\regexp{$MAPUNIQVAL}, fieldset=options, fieldvalue=skipbib]
+ }
+ \map[overwrite]{
+ \step[fieldsource=coauthortext, null]
+ }
+ }
+}
+
+% Sort the biblist by coauthor name
+\DeclareSortingTemplate{coauthor}{
+ \sort{
+ \field{coauthor}
+ }
+}
+
+% Driver to print the biblist items
+\DeclareBibliographyDriver{coauthor}{%
+ \printnames{coauthor}}
+
+% bibcheck to strip duplicates
+\defbibcheck{coauthor}{%
+ \ifcsdef{\strname{coauthor}}
+ {\skipentry}
+ {\savenamecs{coauthor}{\strname{coauthor}}}}
+
+% Simple bibenvironment to print the biblist
+\defbibenvironment{coauthor}
+{\list{}
+ {\setlength{\leftmargin}{\bibhang}%
+ \setlength{\itemindent}{-\leftmargin}%
+ \setlength{\itemsep}{\bibitemsep}%
+ \setlength{\parsep}{\bibparsep}}}
+{\endlist}
+{\item}
+
+\begin{document}
+\nocite{*}
+\printbibliography
+% This will automatically use the "coauthor" sorting scheme/biblist/driver etc.
+\printbiblist[title=CoAuthors]{coauthor}
+\end{document}
+
+
+
+
+
+
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/96-dates-biber-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/96-dates-biber-ms.pdf
new file mode 100644
index 0000000000..52e1a2f310
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/96-dates-biber-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/96-dates-ms.tex b/macros/latex/contrib/biblatex-ms/doc/examples/96-dates-ms.tex
new file mode 100644
index 0000000000..fc0a6c1e11
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/96-dates-ms.tex
@@ -0,0 +1,197 @@
+%
+% This file demonstrates various date formats and tests which apply to them
+% for output
+%
+\documentclass[a4paper]{article}
+\usepackage{fontspec}
+\usepackage[american]{babel}
+\usepackage{csquotes}
+\begin{filecontents}[force]{\jobname.bib}
+@misc{date1,
+ note = {Years with implicit era},
+ author = {Author1},
+ date = {-0099-07-11/-0043-03-13}, % Negative date range
+ origdate = {-0477}, % Negative date
+ eventdate = {0477/0566}, % Forced CE era due to dateeraauto setting
+ urldate = {-0020/0100}, % Cross BCE/CE range
+}
+@misc{date2,
+ note = {Dates with circa and uncertain markers},
+ author = {Author2},
+ date = {1723%}, % year with ISO8601-2 approximate (circa) and uncertainty markers
+ origdate = {1934-02~}, % year and month with circa marker
+ eventdate = {1976?}, % year with uncertainty marker
+ urldate = {1922~}, % year with ISO8601-2 approximate (circa) marker
+}
+@misc{date3,
+ note = {Date ranges},
+ author = {Author3},
+ date = {1934~/1936~}, % year range with circa markers
+ origdate = {1723~/..}, % open-ended year range with circa marker
+ eventdate = {1976?/..}, % open-ended year range with uncertainty marker
+ urldate = {1976/..} % open-ended year range with open marker
+}
+@misc{date4,
+ note = {Times},
+ author = {Author4},
+ date = {2004-04-25T14:34:00/2004-04-25T14:37:06}, % Date with time, floating timezone
+ origdate = {2004-04-25T14:34:00Z/2004-04-25T14:34:05Z}, % Date with time, UTC timezone
+ eventdate = {2004-04-25T14:34:00+05:00/2004-04-25T15:34:00+05:00}, % Date with time, explicit timezone
+ urldate = {2004-04-25T14:34:00/2004-04-25T15:00:00}, % Datetime range
+}
+@misc{date5,
+ note = {Seasons},
+ author = {Author5},
+ date = {1723-21}, % year divisions (21=spring)
+ origdate = {1934-24~}, % uncertain year plus season
+ eventdate = {1934-22/1934-23}, % range with seasons
+}
+@misc{date6,
+ % uses the 'nodate' localisation string due to default \DeclareLabeldate setting
+ note = {Date from literal/localisation string},
+ author = {Author6},
+}
+@misc{date7,
+ note = {Unspecified dates can be used to do amusing things},
+ author = {Author7},
+ date = {19XX}, % unspecified year in century
+ origdate = {199X}, % unspecified year in decade
+}
+@misc{date8,
+ note = {Astronomical year era},
+ author = {Author8},
+ date = {0001}, % with dateera=astronomical, 1, otherwise 1 CE
+ origdate = {0000}, % with dateera=astronomical, 0, otherwise 1 BCE
+ eventdate = {-0001}, % with dateera=astronomical, -1, otherwise 2 BCE
+ urldate = {-0379} % with dateera=astronomical, -379, otherwise 380 BCE
+}
+@misc{date9,
+ note = {Automatic era setting},
+ author = {Author9},
+ date = {1066},
+ origdate = {0876},
+ eventdate = {0402},
+ urldate = {-0382}
+}
+@misc{date10,
+ note = {More Date ranges},
+ author = {Author10},
+ date = {1034/}, % unknown
+ origdate = {/1034}, % unknown
+ eventdate = {../1034}, % open-start to year range
+ urldate = {../1034} % open
+}
+\end{filecontents}
+\usepackage[style=authoryear,%
+ % dateabbrev=false,% when false, don't abbreviate months/year divisions
+ % julian=true,% convert dates before gregorianstart to Julian Calendar
+ % gregorianstart=1582-10-15,% Default
+ alldates=short,%
+ % alldates=ymd,% Year-Month-Day format
+ % alldates=iso,% ISO8601 format
+ alldatesusetime=true, % print time components in non-compact date ranges
+ alltimes=12h,%
+ % alltimes=24h,% prints 24 hour format times (default)
+ % alltimes=24hcomp,% prints 24 hour compressed format times
+ % seconds=true,% uncomment to print seconds
+ % timezones=true,% uncomment to print timezones
+ datezeros=false,% pad date components with zeros?
+ dateera=secular,% prints BCE/CE controlled by dateerauto, datezeros
+ % dateera=christian,% prints BC/AD controlled by dateerauto, datezeros
+ % dateera=astronomical,% prints astronomical dates, controlled by datezeros
+ dateeraauto=600,% Sets the max year ceiling for automatic printing of era
+ % abbreviate=false,% prints full date localisation strings
+ dateuncertain=true,%
+ datecirca=true,%
+ sorting=none,%
+ backend=biber]{biblatex-ms}
+\addbibresource{\jobname.bib}
+
+\defbibenvironment{simple}
+{\list{}
+ {\setlength{\leftmargin}{0pt}%
+ \setlength{\itemindent}{0pt}%
+ \setlength{\bibitemsep}{1ex}%
+ \setlength{\itemsep}{\bibitemsep}%
+ \setlength{\parsep}{\bibparsep}}}
+{\endlist}
+{\item}
+
+\DeclareFieldFormat{urldate}{#1}
+\DeclareFieldFormat{time}{\mkbibemph{#1}}
+\DeclareFieldFormat{labeltime}{\mkbibemph{#1}}
+\DeclareFieldFormat{origtime}{\mkbibemph{#1}}
+\DeclareFieldFormat{eventtime}{\mkbibemph{#1}}
+\DeclareFieldFormat{urltime}{\mkbibemph{#1}}
+
+\makeatletter
+
+\DeclareBibliographyDriver{misc}{%
+ \printfield[emph]{note}\\
+ \iffieldundef{labelyear}{}{%
+ \printtext[bold]{labeldate = }\printlabeldate
+ \iffieldundef{labelhour}{}
+ {\\\printtext[bold]{labeltime = }\printlabeltime}}\\%
+ \iffieldundef{year}{}{%
+ \iffieldequalstr{dateunspecified}{yearincentury}
+ {\printtext[bold]{date = }\number\numexpr\thefield{year}/100+1\relax th Century}
+ {\printtext[bold]{date = }\printdate
+ \iffieldundef{hour}{}
+ {\\\printtext[bold]{time = }\printtime}}}\\%
+ \iffieldundef{origyear}{}{%
+ \iffieldequalstr{origdateunspecified}{yearindecade}
+ {\printtext[bold]{date = }The \expandafter\@gobbletwo\number\thefield{origyear}s}
+ {\printtext[bold]{origdate = }\printorigdate
+ \iffieldundef{orighour}{}
+ {\\\printtext[bold]{origtime = }\printorigtime}}}\\%
+ \iffieldundef{eventyear}{}{%
+ \printtext[bold]{eventdate = }\printeventdate
+ \iffieldundef{eventhour}{}
+ {\\\printtext[bold]{eventtime = }\printeventtime}}\\%
+ \iffieldundef{urlyear}{}{%
+ \printtext[bold]{urldate = }\printurldate
+ \iffieldundef{urlhour}{}
+ {\\\printtext[bold]{urltime = }\printurltime}}%
+ }
+
+\begin{document}
+\section*{Date formats}
+This example file parses and formats some of the supported date formats and
+demonstrates the output options. See the source for details. You can change
+the options in the source file and this document will show you the options chosen.
+\subsection*{Options used to format this test document}
+\begingroup
+datecirca=\textbf{\iftoggle{blx@datecirca}{1}{0}}\\
+dateuncertain=\textbf{\iftoggle{blx@dateuncertain}{1}{0}}\\
+dateera=\textbf{\blx@dateera}\\
+dateerauto=\textbf{\blx@dateeraauto}\\
+datezeros=\textbf{\iftoggle{blx@datezeros}{1}{0}}\\
+timezeros=\textbf{\iftoggle{blx@timezeros}{1}{0}}\\
+timezones=\textbf{\iftoggle{blx@timezones}{1}{0}}\\
+seconds=\textbf{\iftoggle{blx@seconds}{1}{0}}\\
+julian=\textbf{\iftoggle{blx@julian}{1}{0}}\\
+gregorianstart=\textbf{\blx@gregorianstart}\\
+\def\do#1{%
+ #1=\textbf{\csuse{blx@dateformat@#1}}\\}
+\do{labeldate}
+\abx@dodates
+\def\do#1{%
+ #1time=\textbf{\csuse{blx@timeformat@#1time}}\\
+ #1dateusetime=\textbf{\iftoggle{blx@#1dateusetime}{1}{0}}\\}
+\do{label}
+\abx@dodatetypes
+\endgroup
+\subsection*{Example Citation Formats}
+\textcite{date1,date2,date3,date4,date5,date6,date7,date8,date9,date10}\\[1ex]
+\cite{date1}\\
+\cite{date2}\\
+\cite{date3}\\
+\cite{date4}\\
+\cite{date5}\\
+\cite{date6}\\
+\cite{date7}\\
+\cite{date8}\\
+\cite{date9}\\
+\cite{date10}
+\printbibliography[env=simple,title={Example Bibliography Formats}]
+\end{document}
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/97-annotations-biber-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/97-annotations-biber-ms.pdf
new file mode 100644
index 0000000000..722f97a54e
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/97-annotations-biber-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/97-annotations-ms.bib b/macros/latex/contrib/biblatex-ms/doc/examples/97-annotations-ms.bib
new file mode 100644
index 0000000000..0738b2fe2f
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/97-annotations-ms.bib
@@ -0,0 +1,12 @@
+%% LaTeX2e file `97-annotations.bib'
+%% generated by the `filecontents' environment
+%% from source `97-annotations' on 2018/10/04.
+%%
+@MISC{ann1,
+ AUTHOR = {Last1, First1 and Last2, First2 and Last3, First3},
+ AUTHOR+an = {1:family=student;2=corresponding},
+ TITLE = {The Title},
+ TITLE+an:default = {=titleannotation},
+ TITLE+an:french = {="Le titre"},
+ TITLE+an:german = {="Der Titel"}
+}
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/97-annotations-ms.tex b/macros/latex/contrib/biblatex-ms/doc/examples/97-annotations-ms.tex
new file mode 100644
index 0000000000..07083cb3a0
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/97-annotations-ms.tex
@@ -0,0 +1,52 @@
+%
+% This file demonstrates the data annotation feature
+%
+\documentclass[a4paper]{article}
+\usepackage{fontspec}
+\usepackage[american]{babel}
+\usepackage{csquotes}
+\begin{filecontents}[force]{\jobname.bib}
+@MISC{ann1,
+ AUTHOR = {Last1, First1 and Last2, First2 and Last3, First3},
+ AUTHOR+an = {1:family=student;2=corresponding},
+ TITLE = {The Title},
+ TITLE+an:default = {=titleannotation},
+ TITLE+an:french = {="Le titre"},
+ TITLE+an:german = {="Der Titel"}
+}
+\end{filecontents}
+\usepackage[backend=biber]{biblatex-ms}
+\addbibresource{\jobname.bib}
+
+\renewcommand*{\mkbibnamefamily}[1]{%
+ \ifitemannotation{corresponding}
+ {\textbf{#1}}
+ {#1}%
+ \ifpartannotation{family}{student}
+ {\textsuperscript{*}}
+ {}}
+
+% Default for numeric style so we are overriding the active format for titles
+\DeclareFieldFormat{titlecase}{
+ \iffieldannotation{titleannotation}{\textsc{#1}}{#1}%
+ \hasfieldannotation[][][][french]{\mkbibparens{\getfieldannotation[][][][french]}}{}%
+ \hasfieldannotation[][][][german]{\mkbibparens{\getfieldannotation[][][][german]}}{}}
+
+\begin{document}
+The annotation feature allows the user to attache metadata, either in the
+form of strings to be tested for in formatting commands, or in the form of
+strings to be printed as-is. This example demonstrates all aspects of the
+annotation feature:
+
+\begin{itemize}
+\item Metadata attaching to fields, items in a list or parts of an item in
+ a list (e.g. name parts)
+\item Literal annotations where the annotation is a string to be printed
+ rather than used as a metadata test for other formatting.
+\item Multiple named annotations for the same data field.
+\item The ``default'' name for annotations with no explicit name.
+\end{itemize}
+
+\cite{ann1}
+\printbibliography
+\end{document}
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/98-multiscript-biber-ms.pdf b/macros/latex/contrib/biblatex-ms/doc/examples/98-multiscript-biber-ms.pdf
new file mode 100644
index 0000000000..0a0f559871
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/98-multiscript-biber-ms.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/98-multiscript-ms.tex b/macros/latex/contrib/biblatex-ms/doc/examples/98-multiscript-ms.tex
new file mode 100644
index 0000000000..da65ed9d83
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/98-multiscript-ms.tex
@@ -0,0 +1,120 @@
+%
+% This file demonstrates the multiscript features
+%
+\documentclass[a4paper]{article}
+\usepackage{fontspec}
+\setmainfont{Linux Libertine O}
+\setsansfont{Linux Biolinum O}
+
+\usepackage[russian,greek,french,german,main=english]{babel}
+\usepackage{csquotes}
+\begin{filecontents}[force]{\jobname.bib}
+@BOOK{mstest,
+ AUTHOR = {Bill Smith and Пушкин, Александр},
+ AUTHOR+an:mslang = {2="ru"},
+ AUTHOR_transliteration_el = {Bill Smith and Πούσκιν, Ἀλεξάντρ},
+ AUTHOR_transliteration_el+an:mslang = {1="en"},
+ LOCATION = {locationa and Standort"s},
+ LOCATION+an:mslang = {2="de"},
+ LOCATION_translation_fr = {emplacementa and Standortb},
+ LOCATION_translation_fr+an:mslang = {2="de"},
+ TITLE = {Title},
+ TITLE_translation_fr = {Titre},
+ DATE = {1995}
+}
+\end{filecontents}
+\usepackage[style=authoryear,%
+ dynamiclabel=true,%
+ language=auto,%
+ autolang=other,%
+ autofieldlang=other]{biblatex-ms}
+\addbibresource{\jobname.bib}
+
+\begin{document}
+% Here we are citing and printing the bibliography using data contained in
+% the entryfields of alternate msform="default" and mslang="en" (due to the
+% main babel language of "english" which maps to "en")
+\cite{mstest}
+
+% Due to "autofieldlang=other" and the langtags annotation for the default author
+% name field, the second, russian name in the author field is automatically printed inside
+% a babel \otherlanguage{russian} context where additionally, all biblatex russian bibstrings
+% are activated
+
+% Inside the name format which \printnames uses, macros are automatically defined for every
+% alternate of the current name list item. This means when printing the first name in the author
+% list, in addition to the usual \namepartfamily, \namepartgiven etc. macros, also available are:
+
+% \namepartfamilydefaulten={Smith}
+% \namepartfamilydefaulteni={S\bibinitperiod}
+% \namepartgivendefaulten={Bill}
+% \namepartgivendefaulteni={B\bibinitperiod}
+% \namepartfamilytransliterationen={Smith}
+% \namepartfamilytransliterationeni={S\bibinitperiod}
+% \namepartgiventransliterationen={Bill}
+% \namepartgiventransliterationeni={B\bibinitperiod}
+
+% and for the second name, also available are:
+
+% \namepartfamilydefaultru={Пушкин},
+% \namepartfamilydefaultrui={П\bibinitperiod},
+% \namepartgivendefaultru={Александр},
+% \namepartgivendefaultrui={А\bibinitperiod},
+% \namepartfamilytransliterationel={Πούσκιν},
+% \namepartfamilytransliterationeli={Π\bibinitperiod},
+% \namepartgiventransliterationel={Ἀλεξάντρ},
+% \namepartgiventransliterationeli={Ἀ\bibinitperiod}
+
+
+% The location list is in the context of a babel "english" otherlanguage environment
+% (the global default) but the second item in the list is switched to the \otherlanguage{german}
+% due to the langtags annotation and you can see this by the use of the german "s babel shorthand
+% being correctly interpreted
+
+% Inside the list format which \printlist uses, macros are automatically defined for every
+% alternate of the current plain list item. This means when printing the first item in the location
+% list, also available are:
+
+% \listitemdefaulten={locationa}
+% \listitemtranslationfr={emplacementa}
+
+% and for the second list item, also available are:
+
+% \listitemdefaultde={Standort"s}
+% \listitemtranslationde={Standortb}
+
+% The translated french alternate of the location list could be printed in a driver
+% using \printlist[][][translated][fr]{location} and this would automatically (due to
+% autofieldlang=other) be inside a \otherlanguage{french} environment with all french biblatex
+% bibstrings being activated.
+\printbibliography
+
+% Here we are citing and printing the bibliography using data contain in
+% the entryfields of alternate msform="transliteration" and mslang="el"
+\begin{refcontext}[msform=transliteration,mslang=el]
+
+ % Notice that due to the "dynamiclabel=true" option, the labelname printed in the citation
+ % is not the static labelname as determined by \DeclareLabelname but the alternate
+ % of the labelname determined by the current (refcontext) msform/mslang options
+ \cite{mstest}
+
+ % Note that the default msform/mslang used to determine which alternates to print in the
+ % bibliography for multiscript entryfields are determined by the current (refcontext)
+ % msform/mslang options
+
+ % Note that the "and" in the name list is in Greek. This is because the "autofieldlang"
+ % is set to "other", which automatically loads the greek language strings for the whole
+ % msform=transliteration/mslang=el author field. This alternate is being printed due to
+ % the refcontext settings for msform and mslang.
+
+ % Note also that due to "autofieldlang=other" and the langtags annotation for the first, english
+ % name in the transliterated greek author name list, this english name is automatically printed
+ % inside a babel \otherlanguage{english} context where additionally, all biblatex english
+ % bibstrings are activated
+
+ % No location field is printed in the bibliography because there is no transliterated greek
+ % alternate for this field, only a translated french alternate. The same applied to the title
+ % field
+ \printbibliography
+\end{refcontext}
+\end{document}
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/biblatex-examples-ms.bib b/macros/latex/contrib/biblatex-ms/doc/examples/biblatex-examples-ms.bib
new file mode 100644
index 0000000000..5aaa9d2196
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/biblatex-examples-ms.bib
@@ -0,0 +1,1661 @@
+@string{anch-ie = {Angew.~Chem. Int.~Ed.}}
+@string{cup = {Cambridge University Press}}
+@string{dtv = {Deutscher Taschenbuch-Verlag}}
+@string{hup = {Harvard University Press}}
+@string{jams = {J.~Amer. Math. Soc.}}
+@string{jchph = {J.~Chem. Phys.}}
+@string{jomch = {J.~Organomet. Chem.}}
+@string{pup = {Princeton University Press}}
+
+@incollection{westfahl:space,
+ author = {Westfahl, Gary},
+ title = {The True Frontier},
+ subtitle = {Confronting and Avoiding the Realities of Space in {American}
+ Science Fiction Films},
+ pages = {55-65},
+ crossref = {westfahl:frontier},
+ langid = {english},
+ langidopts = {variant=american},
+ indextitle = {True Frontier, The},
+ annotation = {A cross-referenced article from a \texttt{collection}. This is
+ an \texttt{incollection} entry with a \texttt{crossref}
+ field. Note the \texttt{subtitle} and \texttt{indextitle}
+ fields},
+}
+
+@set{set,
+ entryset = {herrmann,aksin,yoon},
+ annotation = {A \texttt{set} with three members.},
+}
+
+@set{stdmodel,
+ entryset = {glashow,weinberg,salam},
+ annotation = {A \texttt{set} with three members discussing the standard
+ model of particle physics.},
+}
+
+@article{aksin,
+ author = {Aks{\i}n, {\"O}zge and T{\"u}rkmen, Hayati and Artok, Levent
+ and {\c{C}}etinkaya, Bekir and Ni, Chaoying and
+ B{\"u}y{\"u}kg{\"u}ng{\"o}r, Orhan and {\"O}zkal, Erhan},
+ title = {Effect of immobilization on catalytic characteristics of
+ saturated {Pd-N}-heterocyclic carbenes in {Mizoroki-Heck}
+ reactions},
+ journaltitle = jomch,
+ date = 2006,
+ volume = 691,
+ number = 13,
+ pages = {3027-3036},
+ indextitle = {Effect of immobilization on catalytic characteristics},
+}
+
+@article{angenendt,
+ author = {Angenendt, Arnold},
+ title = {In Honore Salvatoris~-- Vom Sinn und Unsinn der
+ Patrozinienkunde},
+ journaltitle = {Revue d'Histoire Eccl{\'e}siastique},
+ date = 2002,
+ volume = 97,
+ pages = {431--456, 791--823},
+ langid = {german},
+ indextitle = {In Honore Salvatoris},
+ shorttitle = {In Honore Salvatoris},
+ annotation = {A German article in a French journal. Apart from that, a
+ typical \texttt{article} entry. Note the \texttt{indextitle}
+ field},
+}
+
+@article{baez/article,
+ author = {Baez, John C. and Lauda, Aaron D.},
+ title = {Higher-Dimensional Algebra {V}: 2-Groups},
+ journaltitle = {Theory and Applications of Categories},
+ date = 2004,
+ volume = 12,
+ pages = {423-491},
+ version = 3,
+ eprint = {math/0307200v3},
+ eprinttype = {arxiv},
+ langid = {english},
+ langidopts = {variant=american},
+ annotation = {An \texttt{article} with \texttt{eprint} and
+ \texttt{eprinttype} fields. Note that the arXiv reference is
+ transformed into a clickable link if \texttt{hyperref} support
+ has been enabled. Compare \texttt{baez\slash online}, which
+ is the same item given as an \texttt{online} entry},
+}
+
+@article{bertram,
+ author = {Bertram, Aaron and Wentworth, Richard},
+ title = {Gromov invariants for holomorphic maps on {Riemann} surfaces},
+ journaltitle = jams,
+ date = 1996,
+ volume = 9,
+ number = 2,
+ pages = {529-571},
+ langid = {english},
+ langidopts = {variant=american},
+ shorttitle = {Gromov invariants},
+ annotation = {An \texttt{article} entry with a \texttt{volume} and a
+ \texttt{number} field},
+}
+
+@article{doody,
+ author = {Doody, Terrence},
+ title = {Hemingway's Style and {Jake's} Narration},
+ year = 1974,
+ volume = 4,
+ number = 3,
+ pages = {212-225},
+ langid = {english},
+ langidopts = {variant=american},
+ related = {matuz:doody},
+ relatedstring= {\autocap{e}xcerpt in},
+ journal = {The Journal of Narrative Technique},
+ annotation = {An \texttt{article} entry cited as an excerpt from a
+ \texttt{collection} entry. Note the format of the
+ \texttt{related} and \texttt{relatedstring} fields},
+}
+
+@collection{matuz:doody,
+ editor = {Matuz, Roger},
+ title = {Contemporary Literary Criticism},
+ year = 1990,
+ volume = 61,
+ publisher = {Gale},
+ location = {Detroit},
+ pages = {204-208},
+ langid = {english},
+ langidopts = {variant=american},
+ annotation = {A \texttt{collection} entry providing the excerpt information
+ for the \texttt{doody} entry. Note the format of the
+ \texttt{pages} field},
+}
+
+@article{gillies,
+ author = {Gillies, Alexander},
+ title = {Herder and the Preparation of {Goethe's} Idea of World
+ Literature},
+ journaltitle = {Publications of the English Goethe Society},
+ date = 1933,
+ series = {newseries},
+ volume = 9,
+ pages = {46-67},
+ langid = {english},
+ langidopts = {variant=british},
+ annotation = {An \texttt{article} entry with a \texttt{series} and a
+ \texttt{volume} field. Note that format of the \texttt{series}
+ field in the database file},
+}
+
+@article{glashow,
+ author = {Glashow, Sheldon},
+ title = {Partial Symmetries of Weak Interactions},
+ journaltitle = {Nucl.~Phys.},
+ date = 1961,
+ volume = 22,
+ pages = {579-588},
+}
+
+@article{herrmann,
+ author = {Herrmann, Wolfgang A. and {\"O}fele, Karl and Schneider,
+ Sabine K. and Herdtweck, Eberhardt and Hoffmann, Stephan D.},
+ title = {A carbocyclic carbene as an efficient catalyst ligand for {C--C}
+ coupling reactions},
+ journaltitle = anch-ie,
+ date = 2006,
+ volume = 45,
+ number = 23,
+ pages = {3859-3862},
+ indextitle = {Carbocyclic carbene as an efficient catalyst, A},
+}
+
+@article{kastenholz,
+ author = {Kastenholz, M. A. and H{\"u}nenberger, Philippe H.},
+ title = {Computation of methodology\hyphen independent ionic solvation
+ free energies from molecular simulations},
+ journaltitle = jchph,
+ date = 2006,
+ subtitle = {{I}. {The} electrostatic potential in molecular liquids},
+ volume = 124,
+ eid = 124106,
+ doi = {10.1063/1.2172593},
+ langid = {english},
+ langidopts = {variant=american},
+ indextitle = {Computation of ionic solvation free energies},
+ annotation = {An \texttt{article} entry with an \texttt{eid} and a
+ \texttt{doi} field. Note that the \textsc{doi} is transformed
+ into a clickable link if \texttt{hyperref} support has been
+ enabled},
+ abstract = {The computation of ionic solvation free energies from
+ atomistic simulations is a surprisingly difficult problem that
+ has found no satisfactory solution for more than 15 years. The
+ reason is that the charging free energies evaluated from such
+ simulations are affected by very large errors. One of these is
+ related to the choice of a specific convention for summing up
+ the contributions of solvent charges to the electrostatic
+ potential in the ionic cavity, namely, on the basis of point
+ charges within entire solvent molecules (M scheme) or on the
+ basis of individual point charges (P scheme). The use of an
+ inappropriate convention may lead to a charge-independent
+ offset in the calculated potential, which depends on the
+ details of the summation scheme, on the quadrupole-moment
+ trace of the solvent molecule, and on the approximate form
+ used to represent electrostatic interactions in the
+ system. However, whether the M or P scheme (if any) represents
+ the appropriate convention is still a matter of on-going
+ debate. The goal of the present article is to settle this
+ long-standing controversy by carefully analyzing (both
+ analytically and numerically) the properties of the
+ electrostatic potential in molecular liquids (and inside
+ cavities within them).},
+}
+
+@article{murray,
+ author = {Hostetler, Michael J. and Wingate, Julia E. and Zhong,
+ Chuan-Jian and Harris, Jay E. and Vachet, Richard W. and
+ Clark, Michael R. and Londono, J. David and Green, Stephen
+ J. and Stokes, Jennifer J. and Wignall, George D. and Glish,
+ Gary L. and Porter, Marc D. and Evans, Neal D. and Murray,
+ Royce W.},
+ title = {Alkanethiolate gold cluster molecules with core diameters from
+ 1.5 to 5.2~{nm}},
+ journaltitle = {Langmuir},
+ date = 1998,
+ subtitle = {Core and monolayer properties as a function of core size},
+ volume = 14,
+ number = 1,
+ pages = {17-30},
+ langid = {english},
+ langidopts = {variant=american},
+ indextitle = {Alkanethiolate gold cluster molecules},
+ shorttitle = {Alkanethiolate gold cluster molecules},
+ annotation = {An \texttt{article} entry with \arabic{author} authors. By
+ default, long author and editor lists are automatically
+ truncated. This is configurable},
+}
+
+@article{reese,
+ author = {Reese, Trevor R.},
+ title = {Georgia in {Anglo-Spanish} Diplomacy, 1736--1739},
+ journaltitle = {William and Mary Quarterly},
+ date = 1958,
+ series = 3,
+ volume = 15,
+ pages = {168-190},
+ langid = {english},
+ langidopts = {variant=american},
+ annotation = {An \texttt{article} entry with a \texttt{series} and a
+ \texttt{volume} field. Note the format of the series. If the
+ value of the \texttt{series} field is an integer, this number
+ is printed as an ordinal and the string \enquote*{series} is
+ appended automatically},
+}
+
+@article{sarfraz,
+ author = {M. Sarfraz and M. F. A. Razzak},
+ title = {Technical section: {An} algorithm for automatic capturing of
+ the font outlines},
+ year = 2002,
+ volume = 26,
+ number = 5,
+ pages = {795-804},
+ issn = {0097-8493},
+ journal = {Computers and Graphics},
+ annotation = {An \texttt{article} entry with an \texttt{issn} field},
+}
+
+@article{shore,
+ author = {Shore, Bradd},
+ title = {Twice-Born, Once Conceived},
+ journaltitle = {American Anthropologist},
+ date = {1991-03},
+ subtitle = {Meaning Construction and Cultural Cognition},
+ series = {newseries},
+ volume = 93,
+ number = 1,
+ pages = {9-27},
+ annotation = {An \texttt{article} entry with \texttt{series},
+ \texttt{volume}, and \texttt{number} fields. Note the format
+ of the \texttt{series} which is a localization key},
+}
+
+@article{sigfridsson,
+ author = {Sigfridsson, Emma and Ryde, Ulf},
+ title = {Comparison of methods for deriving atomic charges from the
+ electrostatic potential and moments},
+ journaltitle = {Journal of Computational Chemistry},
+ date = 1998,
+ volume = 19,
+ number = 4,
+ pages = {377-395},
+ doi = {10.1002/(SICI)1096-987X(199803)19:4<377::AID-JCC1>3.0.CO;2-P},
+ langid = {english},
+ langidopts = {variant=american},
+ indextitle = {Methods for deriving atomic charges},
+ annotation = {An \texttt{article} entry with \texttt{volume},
+ \texttt{number}, and \texttt{doi} fields. Note that the
+ \textsc{doi} is transformed into a clickable link if
+ \texttt{hyperref} support has been enabled},
+ abstract = {Four methods for deriving partial atomic charges from the
+ quantum chemical electrostatic potential (CHELP, CHELPG,
+ Merz-Kollman, and RESP) have been compared and critically
+ evaluated. It is shown that charges strongly depend on how and
+ where the potential points are selected. Two alternative
+ methods are suggested to avoid the arbitrariness in the
+ point-selection schemes and van der Waals exclusion radii:
+ CHELP-BOW, which also estimates the charges from the
+ electrostatic potential, but with potential points that are
+ Boltzmann-weighted after their occurrence in actual
+ simulations using the energy function of the program in which
+ the charges will be used, and CHELMO, which estimates the
+ charges directly from the electrostatic multipole
+ moments. Different criteria for the quality of the charges are
+ discussed.},
+}
+
+@article{spiegelberg,
+ author = {Spiegelberg, Herbert},
+ title = {\mkbibquote{Intention} und \mkbibquote{Intentionalit{\"a}t} in
+ der Scholastik, bei Brentano und Husserl},
+ journaltitle = {Studia Philosophica},
+ date = 1969,
+ volume = 29,
+ pages = {189-216},
+ langid = {german},
+ sorttitle = {Intention und Intentionalitat in der Scholastik, bei Brentano
+ und Husserl},
+ indexsorttitle= {Intention und Intentionalitat in der Scholastik, bei Brentano
+ und Husserl},
+ shorttitle = {Intention und Intentionalit{\"a}t},
+ annotation = {An \texttt{article} entry. Note the \texttt{sorttitle} and
+ \texttt{indexsorttitle} fields and the markup of the quotes in
+ the database file},
+}
+
+@article{springer,
+ author = {Springer, Otto},
+ title = {Mediaeval Pilgrim Routes from {Scandinavia} to {Rome}},
+ journaltitle = {Mediaeval Studies},
+ date = 1950,
+ volume = 12,
+ pages = {92-122},
+ langid = {english},
+ langidopts = {variant=british},
+ shorttitle = {Mediaeval Pilgrim Routes},
+ annotation = {A plain \texttt{article} entry},
+}
+
+@article{weinberg,
+ author = {Weinberg, Steven},
+ title = {A Model of Leptons},
+ journaltitle = {Phys.~Rev.~Lett.},
+ date = 1967,
+ volume = 19,
+ pages = {1264-1266},
+}
+
+@article{yoon,
+ author = {Yoon, Myeong S. and Ryu, Dowook and Kim, Jeongryul and Ahn,
+ Kyo Han},
+ title = {Palladium pincer complexes with reduced bond angle strain:
+ efficient catalysts for the {Heck} reaction},
+ journaltitle = {Organometallics},
+ date = 2006,
+ volume = 25,
+ number = 10,
+ pages = {2409-2411},
+ indextitle = {Palladium pincer complexes},
+}
+
+@book{aristotle:anima,
+ author = {Aristotle},
+ title = {De Anima},
+ date = 1907,
+ editor = {Hicks, Robert Drew},
+ publisher = cup,
+ location = {Cambridge},
+ keywords = {primary},
+ langid = {english},
+ langidopts = {variant=british},
+ annotation = {A \texttt{book} entry with an \texttt{author} and an
+ \texttt{editor}},
+}
+
+@book{aristotle:physics,
+ author = {Aristotle},
+ title = {Physics},
+ date = 1929,
+ translator = {Wicksteed, P. H. and Cornford, F. M.},
+ publisher = {G. P. Putnam},
+ location = {New York},
+ keywords = {primary},
+ langid = {english},
+ langidopts = {variant=american},
+ shorttitle = {Physics},
+ annotation = {A \texttt{book} entry with a \texttt{translator} field},
+}
+
+@book{aristotle:poetics,
+ author = {Aristotle},
+ title = {Poetics},
+ date = 1968,
+ editor = {Lucas, D. W.},
+ series = {Clarendon {Aristotle}},
+ publisher = {Clarendon Press},
+ location = {Oxford},
+ keywords = {primary},
+ langid = {english},
+ langidopts = {variant=british},
+ shorttitle = {Poetics},
+ annotation = {A \texttt{book} entry with an \texttt{author} and an
+ \texttt{editor} as well as a \texttt{series} field},
+}
+
+@mvbook{aristotle:rhetoric,
+ author = {Aristotle},
+ title = {The Rhetoric of {Aristotle} with a commentary by the late {Edward
+ Meredith Cope}},
+ date = 1877,
+ editor = {Cope, Edward Meredith},
+ commentator = {Cope, Edward Meredith},
+ volumes = 3,
+ publisher = cup,
+ keywords = {primary},
+ langid = {english},
+ langidopts = {variant=british},
+ sorttitle = {Rhetoric of Aristotle},
+ indextitle = {Rhetoric of {Aristotle}, The},
+ shorttitle = {Rhetoric},
+ annotation = {A commented edition. Note the concatenation of the
+ \texttt{editor} and \texttt{commentator} fields as well as the
+ \texttt{volumes}, \texttt{sorttitle}, and \texttt{indextitle}
+ fields},
+}
+
+@book{augustine,
+ author = {Augustine, Robert L.},
+ title = {Heterogeneous catalysis for the synthetic chemist},
+ date = 1995,
+ publisher = {Marcel Dekker},
+ location = {New York},
+ langid = {english},
+ langidopts = {variant=american},
+ shorttitle = {Heterogeneous catalysis},
+ annotation = {A plain \texttt{book} entry},
+}
+
+@book{averroes/bland,
+ author = {Averroes},
+ title = {The Epistle on the Possibility of Conjunction with the Active
+ Intellect by {Ibn Rushd} with the Commentary of {Moses Narboni}},
+ date = 1982,
+ editor = {Bland, Kalman P.},
+ translator = {Bland, Kalman P.},
+ series = {Moreshet: Studies in {Jewish} History, Literature and Thought},
+ number = 7,
+ publisher = {Jewish Theological Seminary of America},
+ location = {New York},
+ keywords = {primary},
+ langid = {english},
+ langidopts = {variant=american},
+ indextitle = {Epistle on the Possibility of Conjunction, The},
+ shorttitle = {Possibility of Conjunction},
+ annotation = {A \texttt{book} entry with a \texttt{series} and a
+ \texttt{number}. Note the concatenation of the \texttt{editor}
+ and \texttt{translator} fields as well as the
+ \texttt{indextitle} field},
+}
+
+@book{averroes/hannes,
+ author = {Averroes},
+ title = {Des Averro{\"e}s Abhandlung: \mkbibquote{{\"U}ber die
+ M{\"o}glichkeit der Conjunktion} oder \mkbibquote{{\"U}ber den
+ materiellen Intellekt}},
+ date = 1892,
+ editor = {Hannes, Ludwig},
+ translator = {Hannes, Ludwig},
+ annotator = {Hannes, Ludwig},
+ publisher = {C.~A. Kaemmerer},
+ location = {Halle an der Saale},
+ keywords = {primary},
+ langid = {german},
+ sorttitle = {Uber die Moglichkeit der Conjunktion},
+ indexsorttitle= {Uber die Moglichkeit der Conjunktion},
+ indextitle = {{\"U}ber die M{\"o}glichkeit der Conjunktion},
+ shorttitle = {{\"U}ber die M{\"o}glichkeit der Conjunktion},
+ annotation = {An annotated edition. Note the concatenation of the
+ \texttt{editor}, \texttt{translator}, and \texttt{annotator}
+ fields. Also note the \texttt{shorttitle},
+ \texttt{indextitle}, \texttt{sorttitle}, and
+ \texttt{indexsorttitle} fields},
+}
+
+@book{averroes/hercz,
+ author = {Averroes},
+ title = {Drei Abhandlungen {\"u}ber die Conjunction des separaten
+ Intellects mit dem Menschen},
+ date = 1869,
+ editor = {Hercz, J.},
+ translator = {Hercz, J.},
+ publisher = {S.~Hermann},
+ location = {Berlin},
+ keywords = {primary},
+ langid = {german},
+ indexsorttitle= {Drei Abhandlungen uber die Conjunction},
+ indextitle = {Drei Abhandlungen {\"u}ber die Conjunction},
+ subtitle = {Von Averroes (Vater und Sohn), aus dem Arabischen
+ {\"u}bersetzt von Samuel Ibn Tibbon},
+ shorttitle = {Drei Abhandlungen},
+ annotation = {A \texttt{book} entry. Note the concatenation of the
+ \texttt{editor} and \texttt{translator} fields as well as the
+ \texttt{indextitle} and \texttt{indexsorttitle} fields},
+}
+
+@book{cicero,
+ author = {Cicero, Marcus Tullius},
+ title = {De natura deorum. {\"U}ber das Wesen der G{\"o}tter},
+ date = 1995,
+ editor = {Blank-Sangmeister, Ursula},
+ translator = {Blank-Sangmeister, Ursula},
+ afterword = {Thraede, Klaus},
+ language = {langlatin and langgerman},
+ publisher = {Reclam},
+ location = {Stuttgart},
+ langid = {german},
+ indextitle = {De natura deorum},
+ shorttitle = {De natura deorum},
+ annotation = {A bilingual edition of Cicero's \emph{De natura deorum}, with
+ a German translation. Note the format of the \texttt{language}
+ field in the database file, the concatenation of the
+ \texttt{editor} and \texttt{translator} fields, and the
+ \texttt{afterword} field},
+}
+
+@book{coleridge,
+ author = {Coleridge, Samuel Taylor},
+ title = {Biographia literaria, or {Biographical} sketches of my literary
+ life and opinions},
+ date = 1983,
+ editor = {Coburn, Kathleen and Engell, James and Bate, W. Jackson},
+ maintitle = {The collected works of {Samuel Taylor Coleridge}},
+ volume = 7,
+ part = 2,
+ series = {Bollingen Series},
+ number = 75,
+ publisher = {Routledge {and} Kegan Paul},
+ location = {London},
+ langid = {english},
+ langidopts = {variant=british},
+ indextitle = {Biographia literaria},
+ shorttitle = {Biographia literaria},
+ annotation = {One (partial) volume of a multivolume book. This is a
+ \texttt{book} entry with a \texttt{volume} and a \texttt{part}
+ field which explicitly refers to the second (physical) part of
+ the seventh (logical) volume. Also note the \texttt{series}
+ and \texttt{number} fields},
+}
+
+@book{companion,
+ author = {Goossens, Michel and Mittelbach, Frank and Samarin, Alexander},
+ title = {The {LaTeX} Companion},
+ date = 1994,
+ edition = 1,
+ publisher = {Addison-Wesley},
+ location = {Reading, Mass.},
+ pagetotal = 528,
+ langid = {english},
+ langidopts = {variant=american},
+ sorttitle = {LaTeX Companion},
+ indextitle = {LaTeX Companion, The},
+ shorttitle = {LaTeX Companion},
+ annotation = {A book with three authors. Note the formatting of the author
+ list. By default, only the first name is reversed in the
+ bibliography},
+}
+
+@book{cotton,
+ author = {Cotton, Frank Albert and Wilkinson, Geoffrey and Murillio,
+ Carlos A. and Bochmann, Manfred},
+ title = {Advanced inorganic chemistry},
+ date = 1999,
+ edition = 6,
+ publisher = {Wiley},
+ location = {Chichester},
+ langid = {english},
+ langidopts = {variant=british},
+ annotation = {A \texttt{book} entry with \arabic{author} authors and an
+ \texttt{edition} field. By default, long \texttt{author} and
+ \texttt{editor} lists are automatically truncated. This is
+ configurable},
+}
+
+@book{gerhardt,
+ author = {Gerhardt, Michael J.},
+ title = {The Federal Appointments Process},
+ date = 2000,
+ publisher = {Duke University Press},
+ location = {Durham and London},
+ langid = {english},
+ langidopts = {variant=american},
+ sorttitle = {Federal Appointments Process},
+ indextitle = {Federal Appointments Process, The},
+ subtitle = {A Constitutional and Historical Analysis},
+ shorttitle = {Federal Appointments Process},
+ annotation = {This is a \texttt{book} entry. Note the format of the
+ \texttt{location} field as well as the \texttt{sorttitle} and
+ \texttt{indextitle} fields},
+}
+
+@book{gonzalez,
+ author = {Gonzalez, Ray},
+ title = {The Ghost of {John Wayne} and Other Stories},
+ date = 2001,
+ publisher = {The University of Arizona Press},
+ location = {Tucson},
+ isbn = {0-816-52066-6},
+ langid = {english},
+ langidopts = {variant=american},
+ sorttitle = {Ghost of John Wayne and Other Stories},
+ indextitle = {Ghost of {John Wayne} and Other Stories, The},
+ shorttitle = {Ghost of {John Wayne}},
+ annotation = {A collection of short stories. This is a \texttt{book} entry.
+ Note the \texttt{sorttitle} and \texttt{indextitle} fields in
+ the database file. There's also an \texttt{isbn} field},
+}
+
+@book{hammond,
+ author = {Hammond, Christopher},
+ title = {The basics of crystallography and diffraction},
+ date = 1997,
+ publisher = {International Union of Crystallography and Oxford University
+ Press},
+ location = {Oxford},
+ langid = {english},
+ langidopts = {variant=british},
+ sorttitle = {Basics of crystallography and diffraction},
+ indextitle = {Basics of crystallography and diffraction, The},
+ shorttitle = {Crystallography and diffraction},
+ annotation = {A \texttt{book} entry. Note the \texttt{sorttitle} and
+ \texttt{indextitle} fields as well as the format of the
+ \texttt{publisher} field},
+}
+
+@book{iliad,
+ author = {Homer},
+ title = {Die Ilias},
+ date = 2004,
+ translator = {Schadewaldt, Wolfgang},
+ introduction = {Latacz, Joachim},
+ edition = 3,
+ publisher = {Artemis \& Winkler},
+ location = {D{\"u}sseldorf and Z{\"u}rich},
+ langid = {german},
+ sorttitle = {Ilias},
+ indextitle = {Ilias, Die},
+ shorttitle = {Ilias},
+ annotation = {A German translation of the \emph{Iliad}. Note the
+ \texttt{translator} and \texttt{introduction} fields and the
+ format of the \texttt{location} field in the database
+ file. Also note the \texttt{sorttitle} and \texttt{indextitle}
+ fields},
+}
+
+@mvbook{knuth:ct,
+ author = {Knuth, Donald E.},
+ title = {Computers \& Typesetting},
+ date = {1984/1986},
+ volumes = 5,
+ publisher = {Addison-Wesley},
+ location = {Reading, Mass.},
+ langid = {english},
+ langidopts = {variant=american},
+ sorttitle = {Computers & Typesetting},
+ indexsorttitle= {Computers & Typesetting},
+ annotation = {A five-volume book cited as a whole. This is a \texttt{mvbook}
+ entry, note the \texttt{volumes} field},
+}
+
+@book{knuth:ct:a,
+ author = {Knuth, Donald E.},
+ title = {The {\TeX book}},
+ date = 1984,
+ maintitle = {Computers \& Typesetting},
+ volume = {A},
+ publisher = {Addison-Wesley},
+ location = {Reading, Mass.},
+ langid = {english},
+ langidopts = {variant=american},
+ sorttitle = {Computers & Typesetting A},
+ indexsorttitle= {The TeXbook},
+ indextitle = {\protect\TeX book, The},
+ shorttitle = {\TeX book},
+ annotation = {The first volume of a five-volume book. Note the
+ \texttt{sorttitle} field. We want this
+ volume to be listed after the entry referring to the entire
+ five-volume set. Also note the \texttt{indextitle} and
+ \texttt{indexsorttitle} fields. Indexing packages that don't
+ generate robust index entries require some control sequences
+ to be protected from expansion},
+}
+
+@book{knuth:ct:b,
+ author = {Knuth, Donald E.},
+ title = {{\TeX}: The Program},
+ date = 1986,
+ maintitle = {Computers \& Typesetting},
+ volume = {B},
+ publisher = {Addison-Wesley},
+ location = {Reading, Mass.},
+ langid = {english},
+ langidopts = {variant=american},
+ sorttitle = {Computers & Typesetting B},
+ indexsorttitle= {TeX: The Program},
+ shorttitle = {\TeX},
+ annotation = {The second volume of a five-volume book. Note the
+ \texttt{sorttitle} field. Also note the
+ \texttt{indexsorttitle} field},
+}
+
+@book{knuth:ct:c,
+ author = {Knuth, Donald E.},
+ title = {The {METAFONTbook}},
+ date = 1986,
+ maintitle = {Computers \& Typesetting},
+ volume = {C},
+ publisher = {Addison-Wesley},
+ location = {Reading, Mass.},
+ langid = {english},
+ langidopts = {variant=american},
+ sorttitle = {Computers & Typesetting C},
+ indextitle = {METAFONTbook, The},
+ shorttitle = {METAFONTbook},
+ annotation = {The third volume of a five-volume book. Note the
+ \texttt{sorttitle} field as well as the
+ \texttt{indextitle} field},
+}
+
+@book{knuth:ct:d,
+ author = {Knuth, Donald E.},
+ title = {{METAFONT}: The Program},
+ date = 1986,
+ maintitle = {Computers \& Typesetting},
+ volume = {D},
+ publisher = {Addison-Wesley},
+ location = {Reading, Mass.},
+ langid = {english},
+ langidopts = {variant=american},
+ sorttitle = {Computers & Typesetting D},
+ shorttitle = {METAFONT},
+ annotation = {The fourth volume of a five-volume book. Note the
+ \texttt{sorttitle} field},
+}
+
+@book{knuth:ct:e,
+ author = {Knuth, Donald E.},
+ title = {{Computer Modern} Typefaces},
+ date = 1986,
+ maintitle = {Computers \& Typesetting},
+ volume = {E},
+ publisher = {Addison-Wesley},
+ location = {Reading, Mass.},
+ langid = {english},
+ langidopts = {variant=american},
+ sorttitle = {Computers & Typesetting E},
+ annotation = {The fifth volume of a five-volume book. Note the
+ \texttt{sorttitle} field},
+}
+
+@mvbook{knuth:ct:related,
+ author = {Knuth, Donald E.},
+ title = {Computers \& Typesetting},
+ date = {1984/1986},
+ volumes = 5,
+ publisher = {Addison-Wesley},
+ location = {Reading, Mass.},
+ langid = {english},
+ langidopts = {variant=american},
+ sorttitle = {Computers & Typesetting},
+ indexsorttitle= {Computers & Typesetting},
+ related = {knuth:ct:a,knuth:ct:b,knuth:ct:c,knuth:ct:d,knuth:ct:e},
+ relatedtype = {multivolume},
+ annotation = {A five-volume book cited as a whole and related to its
+ individual volumes. Note the \texttt{related} and
+ \texttt{relatedtype} fields},
+}
+
+@book{kullback,
+ author = {Kullback, Solomon},
+ title = {Information Theory and Statistics},
+ year = 1959,
+ publisher = {John Wiley \& Sons},
+ location = {New York},
+ langid = {english},
+ langidopts = {variant=american},
+}
+
+@book{kullback:reprint,
+ author = {Kullback, Solomon},
+ title = {Information Theory and Statistics},
+ year = 1997,
+ publisher = {Dover Publications},
+ location = {New York},
+ origyear = 1959,
+ origpublisher= {John Wiley \& Sons},
+ langid = {english},
+ langidopts = {variant=american},
+ annotation = {A reprint of the \texttt{kullback} entry. Note the format of
+ \texttt{origyear} and \texttt{origpublisher}. These fields are
+ not used by the standard bibliography styles},
+}
+
+@book{kullback:related,
+ author = {Kullback, Solomon},
+ title = {Information Theory and Statistics},
+ year = 1997,
+ publisher = {Dover Publications},
+ location = {New York},
+ langid = {english},
+ langidopts = {variant=american},
+ related = {kullback},
+ relatedtype = {origpubin},
+ annotation = {A reprint of the \texttt{kullback} entry. Note the format of
+ the \texttt{related} and \texttt{relatedtype} fields},
+}
+
+@book{malinowski,
+ author = {Malinowski, Bronis{\l}aw},
+ title = {Argonauts of the {Western Pacific}},
+ date = 1972,
+ edition = 8,
+ publisher = {Routledge {and} Kegan Paul},
+ location = {London},
+ langid = {english},
+ langidopts = {variant=british},
+ subtitle = {An account of native enterprise and adventure in the
+ Archipelagoes of {Melanesian New Guinea}},
+ shorttitle = {Argonauts},
+ annotation = {This is a \texttt{book} entry. Note the format of the
+ \texttt{publisher} and \texttt{edition} fields as well as the
+ \texttt{subtitle} field},
+}
+
+@book{maron,
+ author = {Maron, Monika},
+ title = {Animal Triste},
+ date = 2000,
+ translator = {Brigitte Goldstein},
+ origlanguage = {german},
+ publisher = {University of Nebraska Press},
+ location = {Lincoln},
+ langid = {english},
+ langidopts = {variant=american},
+ shorttitle = {Animal Triste},
+ annotation = {An English translation of a German novel with a French title.
+ In other words: a \texttt{book} entry with a
+ \texttt{translator} field. Note the \texttt{origlanguage}
+ field which is concatenated with the \texttt{translator}},
+}
+
+@book{massa,
+ author = {Werner Massa},
+ title = {Crystal structure determination},
+ date = 2004,
+ edition = 2,
+ publisher = {Spinger},
+ location = {Berlin},
+ langid = {english},
+ langidopts = {variant=british},
+ annotation = {A \texttt{book} entry with an \texttt{edition} field},
+}
+
+@article{moore,
+ author = {Moore, Gordon E.},
+ title = {Cramming more components onto integrated circuits},
+ journaltitle = {Electronics},
+ year = 1965,
+ volume = 38,
+ number = 8,
+ pages = {114-117},
+ langid = {english},
+ langidopts = {variant=american},
+}
+
+@article{moore:related,
+ author = {Moore, Gordon E.},
+ title = {Cramming more components onto integrated circuits},
+ journaltitle = {Proceedings of the {IEEE}},
+ year = 1998,
+ volume = 86,
+ number = 1,
+ pages = {82-85},
+ langid = {english},
+ langidopts = {variant=american},
+ related = {moore},
+ relatedtype = {reprintfrom},
+ annotation = {A reprint of Moore's law. Note the \texttt{related} and
+ \texttt{relatedtype} fields},
+}
+
+@mvbook{nietzsche:ksa,
+ author = {Nietzsche, Friedrich},
+ title = {S{\"a}mtliche Werke},
+ date = 1988,
+ editor = {Colli, Giorgio and Montinari, Mazzino},
+ edition = 2,
+ volumes = 15,
+ publisher = dtv # { and Walter de Gruyter},
+ location = {M{\"u}nchen and Berlin and New York},
+ langid = {german},
+ sorttitle = {Werke-00-000},
+ indexsorttitle= {Samtliche Werke},
+ subtitle = {Kritische Studienausgabe},
+ annotation = {The critical edition of Nietzsche's works. This is a
+ \texttt{mvbook} entry referring to a 15-volume work as a
+ whole. Note the \texttt{volumes} field and the format of the
+ \texttt{publisher} and \texttt{location} fields in the
+ database file. Also note the \texttt{sorttitle} and
+ field which is used to fine-tune the
+ sorting order of the bibliography. We want this item listed
+ first in the bibliography},
+}
+
+@book{nietzsche:ksa1,
+ author = {Nietzsche, Friedrich},
+ title = {Die Geburt der Trag{\"o}die. Unzeitgem{\"a}{\ss}e
+ Betrachtungen I--IV. Nachgelassene Schriften 1870--1973},
+ date = 1988,
+ editor = {Colli, Giorgio and Montinari, Mazzino},
+ maintitle = {S{\"a}mtliche Werke},
+ mainsubtitle = {Kritische Studienausgabe},
+ volume = 1,
+ edition = 2,
+ publisher = dtv # { and Walter de Gruyter},
+ location = {M{\"u}nchen and Berlin and New York},
+ langid = {german},
+ sorttitle = {Werke-01-000},
+ indexsorttitle= {Samtliche Werke I},
+ bookauthor = {Nietzsche, Friedrich},
+ indextitle = {S{\"a}mtliche Werke I},
+ shorttitle = {S{\"a}mtliche Werke I},
+ annotation = {A single volume from the critical edition of Nietzsche's
+ works. This \texttt{book} entry explicitly refers to the first
+ volume only. Note the \texttt{title} and \texttt{maintitle}
+ fields. Also note the \texttt{sorttitle}
+ field. We want this entry to be listed after the entry
+ referring to the entire edition},
+}
+
+@book{nussbaum,
+ author = {Nussbaum, Martha},
+ title = {Aristotle's \mkbibquote{De Motu Animalium}},
+ date = 1978,
+ publisher = pup,
+ location = {Princeton},
+ keywords = {secondary},
+ langid = {english},
+ langidopts = {variant=american},
+ sorttitle = {Aristotle's De Motu Animalium},
+ indexsorttitle= {Aristotle's De Motu Animalium},
+ annotation = {A \texttt{book} entry. Note the \texttt{sorttitle} and
+ \texttt{indexsorttitle} fields and the markup of the quotes in
+ the database file},
+}
+
+@book{piccato,
+ author = {Piccato, Pablo},
+ title = {City of Suspects},
+ date = 2001,
+ publisher = {Duke University Press},
+ location = {Durham and London},
+ langid = {english},
+ langidopts = {variant=american},
+ subtitle = {Crime in {Mexico City}, 1900--1931},
+ shorttitle = {City of Suspects},
+ annotation = {This is a \texttt{book} entry. Note the format of the
+ \texttt{location} field in the database file},
+}
+
+@book{vangennep,
+ author = {van Gennep, Arnold},
+ title = {Les rites de passage},
+ date = 1909,
+ publisher = {Nourry},
+ location = {Paris},
+ options = {useprefix},
+ langid = {french},
+ sorttitle = {Rites de passage},
+ indextitle = {Rites de passage, Les},
+ shorttitle = {Rites de passage},
+ annotation = {A \texttt{book} entry. Note the format of the printed name and
+ compare the \texttt{useprefix} option in the \texttt{options}
+ field as well as \texttt{brandt} and \texttt{geer}},
+}
+
+@book{vangennep:trans,
+ author = {van Gennep, Arnold},
+ title = {The Rites of Passage},
+ year = 1960,
+ translator = {Vizedom, Monika B. and Caffee, Gabrielle L.},
+ language = {english},
+ origlanguage = {french},
+ publisher = {University of Chicago Press},
+ options = {useprefix},
+ indextitle = {Rites of Passage, The},
+ sorttitle = {Rites of Passage},
+ shorttitle = {Rites of Passage},
+ langid = {english},
+ langidopts = {variant=american},
+ annotation = {A translation of the \texttt{vangennep} entry. Note the
+ \texttt{translator} and \texttt{origlanguage} fields. Compare
+ with the \texttt{vangennep:related} entry.},
+}
+
+@book{vangennep:related,
+ author = {van Gennep, Arnold},
+ title = {Les rites de passage},
+ date = 1909,
+ publisher = {Nourry},
+ location = {Paris},
+ options = {useprefix},
+ langid = {french},
+ related = {vizedom:related},
+ relatedtype = {bytranslator},
+ sorttitle = {Rites de passage},
+ indextitle = {Rites de passage, Les},
+ shorttitle = {Rites de passage},
+ annotation = {A variant of the \texttt{vangennep} entry related to its
+ translation. Note the format of the \texttt{related} and
+ \texttt{relatedtype} fields},
+}
+
+@book{vizedom:related,
+ title = {The Rites of Passage},
+ year = 1960,
+ translator = {Vizedom, Monika B. and Caffee, Gabrielle L.},
+ language = {english},
+ publisher = {University of Chicago Press},
+ langid = {english},
+ langidopts = {variant=american},
+ options = {usetranslator},
+ related = {vangennep},
+ relatedtype = {translationof},
+ indextitle = {Rites of Passage, The},
+ sorttitle = {Rites of Passage},
+ shorttitle = {Rites of Passage},
+ annotation = {A translated work from \texttt{vangennep}. Note the format of
+ the \texttt{related} and \texttt{relatedtype} fields},
+}
+
+@mvbook{vazques-de-parga,
+ author = {V{\'a}zques{ de }Parga, Luis and Lacarra, Jos{\'e} Mar{\'i}a
+ and Ur{\'i}a R{\'i}u, Juan},
+ title = {Las Peregrinaciones a Santiago de Compostela},
+ date = 1993,
+ volumes = 3,
+ note = {Ed. facs. de la realizada en 1948--49},
+ publisher = {Iberdrola},
+ location = {Pamplona},
+ langid = {spanish},
+ sorttitle = {Peregrinaciones a Santiago de Compostela},
+ indextitle = {Peregrinaciones a Santiago de Compostela, Las},
+ shorttitle = {Peregrinaciones},
+ annotation = {A multivolume book cited as a whole. This is a \texttt{mvbook}
+ entry with \texttt{volumes}, \texttt{note},
+ \texttt{sorttitle}, and \texttt{indextitle} fields},
+}
+
+@book{wilde,
+ author = {Wilde, Oscar},
+ title = {The Importance of Being Earnest: A Trivial Comedy for Serious
+ People},
+ year = 1899,
+ series = {English and {American} drama of the Nineteenth Century},
+ publisher = {Leonard Smithers {and} Company},
+ eprint = {4HIWAAAAYAAJ},
+ eprinttype = {googlebooks},
+ annotation = {A \texttt{book} with \texttt{eprint} and \texttt{eprinttype}
+ fields.},
+}
+
+@book{worman,
+ author = {Worman, Nancy},
+ title = {The Cast of Character},
+ date = 2002,
+ publisher = {University of Texas Press},
+ location = {Austin},
+ langid = {english},
+ langidopts = {variant=american},
+ sorttitle = {Cast of Character},
+ indextitle = {Cast of Character, The},
+ subtitle = {Style in {Greek} Literature},
+ shorttitle = {Cast of Character},
+ annotation = {A \texttt{book} entry. Note the \texttt{sorttitle} and
+ \texttt{indextitle} fields},
+}
+
+@mvcollection{britannica,
+ editor = {Preece, Warren E.},
+ title = {The {New Encyclop{\ae}dia Britannica}},
+ date = 2003,
+ edition = 15,
+ volumes = 32,
+ publisher = {Encyclop{\ae}dia Britannica},
+ location = {Chicago, Ill.},
+ options = {useeditor=false},
+ label = {EB},
+ langid = {english},
+ langidopts = {variant=british},
+ sorttitle = {Encyclop{\ae}dia Britannica},
+ indextitle = {{Encyclop{\ae}dia Britannica}, The {New}},
+ shorttitle = {{Encyclop{\ae}dia Britannica}},
+ annotation = {This is a \texttt{mvcollection} entry for an encyclopedia. Note
+ the \texttt{useeditor} option in the \texttt{options} field as
+ well as the \texttt{sorttitle} field. We want this entry to be
+ cited and alphabetized by title even though there is an
+ editor. In addition to that, we want the title to be
+ alphabetized under \enquote*{E} rather than \enquote*{T}. Also
+ note the \texttt{label} field which is provided for
+ author-year citation styles},
+}
+
+@collection{gaonkar,
+ editor = {Gaonkar, Dilip Parameshwar},
+ title = {Alternative Modernities},
+ date = 2001,
+ publisher = {Duke University Press},
+ location = {Durham and London},
+ isbn = {0-822-32714-7},
+ langid = {english},
+ langidopts = {variant=american},
+ annotation = {This is a \texttt{collection} entry. Note the format of the
+ \texttt{location} field in the database file as well as the
+ \texttt{isbn} field},
+}
+
+@incollection{gaonkar:in,
+ author = {Gaonkar, Dilip Parameshwar},
+ editor = {Gaonkar, Dilip Parameshwar},
+ title = {On Alternative Modernities},
+ date = 2001,
+ booktitle = {Alternative Modernities},
+ publisher = {Duke University Press},
+ location = {Durham and London},
+ isbn = {0-822-32714-7},
+ pages = {1-23},
+}
+
+@mvcollection{jaffe,
+ editor = {Jaff{\'e}, Philipp},
+ title = {Regesta Pontificum Romanorum ab condita ecclesia ad annum post
+ Christum natum \textsc{mcxcviii}},
+ date = {1885/1888},
+ editora = {Loewenfeld, Samuel and Kaltenbrunner, Ferdinand and Ewald,
+ Paul},
+ edition = 2,
+ volumes = 2,
+ location = {Leipzig},
+ langid = {latin},
+ editoratype = {redactor},
+ indextitle = {Regesta Pontificum Romanorum},
+ shorttitle = {Regesta Pontificum Romanorum},
+ annotation = {A \texttt{mvcollection} entry with \texttt{edition} and
+ \texttt{volumes} fields. Note the \texttt{editora} and
+ \texttt{editoratype} fields},
+}
+
+% booktitle and booksubtitle are only needed for BibTeX's less sophisticated
+% inheritance set-up to make sure westfahl:space shows correctly.
+% With Biber they are not needed.
+@collection{westfahl:frontier,
+ editor = {Westfahl, Gary},
+ title = {Space and Beyond},
+ date = 2000,
+ subtitle = {The Frontier Theme in Science Fiction},
+ publisher = {Greenwood},
+ location = {Westport, Conn. and London},
+ langid = {english},
+ langidopts = {variant=american},
+ booktitle = {Space and Beyond},
+ booksubtitle = {The Frontier Theme in Science Fiction},
+ annotation = {This is a \texttt{collection} entry. Note the format of the
+ \texttt{location} field as well as the \texttt{subtitle}
+ field},
+}
+
+@inbook{kant:kpv,
+ title = {Kritik der praktischen Vernunft},
+ date = 1968,
+ author = {Kant, Immanuel},
+ booktitle = {Kritik der praktischen Vernunft. Kritik der Urtheilskraft},
+ bookauthor = {Kant, Immanuel},
+ maintitle = {Kants Werke. Akademie Textausgabe},
+ volume = 5,
+ publisher = {Walter de Gruyter},
+ location = {Berlin},
+ pages = {1-163},
+ shorthand = {KpV},
+ langid = {german},
+ shorttitle = {Kritik der praktischen Vernunft},
+ annotation = {An edition of Kant's \emph{Collected Works}, volume five. This
+ is an \texttt{inbook} entry which explicitly refers to the
+ \emph{Critique of Practical Reason} only, not to the entire
+ fifth volume. Note the \texttt{author} and \texttt{bookauthor}
+ fields in the database file. By default, the
+ \texttt{bookauthor} is omitted if the values of the
+ \texttt{author} and \texttt{bookauthor} fields are identical},
+}
+
+@inbook{kant:ku,
+ title = {Kritik der Urtheilskraft},
+ date = 1968,
+ author = {Kant, Immanuel},
+ booktitle = {Kritik der praktischen Vernunft. Kritik der Urtheilskraft},
+ bookauthor = {Kant, Immanuel},
+ maintitle = {Kants Werke. Akademie Textausgabe},
+ volume = 5,
+ publisher = {Walter de Gruyter},
+ location = {Berlin},
+ pages = {165-485},
+ shorthand = {KU},
+ langid = {german},
+ annotation = {An edition of Kant's \emph{Collected Works}, volume five. This
+ is an \texttt{inbook} entry which explicitly refers to the
+ \emph{Critique of Judgment} only, not to the entire fifth
+ volume},
+}
+
+@inbook{nietzsche:historie,
+ title = {Unzeitgem{\"a}sse Betrachtungen. Zweites St{\"u}ck},
+ date = 1988,
+ author = {Nietzsche, Friedrich},
+ booktitle = {Die Geburt der Trag{\"o}die. Unzeitgem{\"a}{\ss}e
+ Betrachtungen I--IV. Nachgelassene Schriften 1870--1973},
+ bookauthor = {Nietzsche, Friedrich},
+ editor = {Colli, Giorgio and Montinari, Mazzino},
+ subtitle = {Vom Nutzen und Nachtheil der Historie f{\"u}r das Leben},
+ maintitle = {S{\"a}mtliche Werke},
+ mainsubtitle = {Kritische Studienausgabe},
+ volume = 1,
+ publisher = dtv # { and Walter de Gruyter},
+ location = {M{\"u}nchen and Berlin and New York},
+ pages = {243-334},
+ langid = {german},
+ sorttitle = {Werke-01-243},
+ indexsorttitle= {Vom Nutzen und Nachtheil der Historie fur das Leben},
+ indextitle = {Vom Nutzen und Nachtheil der Historie f{\"u}r das Leben},
+ shorttitle = {Vom Nutzen und Nachtheil der Historie},
+ annotation = {A single essay from the critical edition of Nietzsche's works.
+ This \texttt{inbook} entry explicitly refers to an essay found
+ in the first volume. Note the \texttt{title},
+ \texttt{booktitle}, and \texttt{maintitle} fields. Also note
+ the \texttt{sorttitle} field. We want
+ this entry to be listed after the entry referring to the
+ entire first volume},
+}
+
+@incollection{brandt,
+ author = {von Brandt, Ahasver and Erich Hoffmann},
+ editor = {Ferdinand Seibt},
+ title = {Die nordischen L{\"a}nder von der Mitte des 11.~Jahrhunderts
+ bis 1448},
+ date = 1987,
+ booktitle = {Europa im Hoch- und Sp{\"a}tmittelalter},
+ series = {Handbuch der europ{\"a}ischen Geschichte},
+ number = 2,
+ publisher = {Klett-Cotta},
+ location = {Stuttgart},
+ pages = {884-917},
+ options = {useprefix=false},
+ langid = {german},
+ indexsorttitle= {Nordischen Lander von der Mitte des 11. Jahrhunderts bis
+ 1448},
+ indextitle = {Nordischen L{\"a}nder von der Mitte des 11.~Jahrhunderts bis
+ 1448, Die},
+ shorttitle = {Die nordischen L{\"a}nder},
+ annotation = {An \texttt{incollection} entry with a \texttt{series} and a
+ \texttt{number}. Note the format of the printed name and
+ compare the \texttt{useprefix} option in the \texttt{options}
+ field as well as \texttt{vangennep}. Also note the
+ \texttt{indextitle, and \texttt{indexsorttitle} fields}},
+}
+
+@incollection{hyman,
+ author = {Arthur Hyman},
+ editor = {O'Meara, Dominic J.},
+ title = {Aristotle's Theory of the Intellect and its Interpretation by
+ {Averroes}},
+ date = 1981,
+ booktitle = {Studies in {Aristotle}},
+ series = {Studies in Philosophy and the History of Philosophy},
+ number = 9,
+ publisher = {The Catholic University of America Press},
+ location = {Washington, D.C.},
+ pages = {161-191},
+ keywords = {secondary},
+ langid = {english},
+ langidopts = {variant=american},
+ indextitle = {Aristotle's Theory of the Intellect},
+ shorttitle = {Aristotle's Theory of the Intellect},
+ annotation = {An \texttt{incollection} entry with a \texttt{series} and
+ \texttt{number} field},
+}
+
+@incollection{pines,
+ author = {Pines, Shlomo},
+ editor = {Twersky, Isadore},
+ title = {The Limitations of Human Knowledge According to {Al-Farabi}, {ibn
+ Bajja}, and {Maimonides}},
+ date = 1979,
+ booktitle = {Studies in Medieval {Jewish} History and Literature},
+ publisher = hup,
+ location = {Cambridge, Mass.},
+ pages = {82-109},
+ keywords = {secondary},
+ langid = {english},
+ langidopts = {variant=american},
+ indextitle = {Limitations of Human Knowledge According to {Al-Farabi}, {ibn
+ Bajja}, and {Maimonides}, The},
+ shorttitle = {Limitations of Human Knowledge},
+ annotation = {A typical \texttt{incollection} entry. Note the
+ \texttt{indextitle} field},
+}
+
+@inproceedings{moraux,
+ author = {Moraux, Paul},
+ editor = {Lloyd, G. E. R. and Owen, G. E. L.},
+ title = {Le \emph{De Anima} dans la tradition gr{\`e}cque},
+ date = 1979,
+ booktitle = {Aristotle on Mind and the Senses},
+ subtitle = {Quelques aspects de l'interpretation du trait{\'e}, de
+ Theophraste {\`a} Themistius},
+ booktitleaddon= {Proceedings of the Seventh Symposium Aristotelicum},
+ eventdate = 1975,
+ publisher = cup,
+ location = {Cambridge},
+ pages = {281-324},
+ keywords = {secondary},
+ langid = {french},
+ indexsorttitle= {De Anima dans la tradition grecque},
+ indextitle = {\emph{De Anima} dans la tradition gr{\`e}cque, Le},
+ shorttitle = {\emph{De Anima} dans la tradition gr{\`e}cque},
+ annotation = {This is a typical \texttt{inproceedings} entry. Note the
+ \texttt{booksubtitle}, \texttt{shorttitle},
+ \texttt{indextitle}, and \texttt{indexsorttitle} fields. Also
+ note the \texttt{eventdate} field.},
+}
+
+@inproceedings{salam,
+ author = {Salam, Abdus},
+ editor = {Svartholm, Nils},
+ title = {Weak and Electromagnetic Interactions},
+ date = 1968,
+ booktitle = {Elementary particle theory},
+ booksubtitle = {Relativistic groups and analyticity},
+ booktitleaddon= {Proceedings of the {Eighth Nobel Symposium}},
+ eventdate = {1968-05-19/1968-05-25},
+ venue = {Aspen{\"a}sgarden, Lerum},
+ publisher = {Almquist \& Wiksell},
+ location = {Stockholm},
+ pages = {367-377},
+}
+
+@manual{cms,
+ title = {The {Chicago} Manual of Style},
+ date = 2003,
+ subtitle = {The Essential Guide for Writers, Editors, and Publishers},
+ edition = 15,
+ publisher = {University of Chicago Press},
+ location = {Chicago, Ill.},
+ isbn = {0-226-10403-6},
+ label = {CMS},
+ langid = {english},
+ langidopts = {variant=american},
+ sorttitle = {Chicago Manual of Style},
+ indextitle = {Chicago Manual of Style, The},
+ shorttitle = {Chicago Manual of Style},
+ annotation = {This is a \texttt{manual} entry without an \texttt{author} or
+ \texttt{editor}. Note the \texttt{label} field in the database
+ file which is provided for author-year citation styles. Also
+ note the \texttt{sorttitle} and \texttt{indextitle} fields. By
+ default, all entries without an \texttt{author} or
+ \texttt{editor} are alphabetized by \texttt{title} but we want
+ this entry to be alphabetized under \enquote*{C} rather than
+ \enquote*{T}. There's also an \texttt{isbn} field},
+}
+
+@online{baez/online,
+ author = {Baez, John C. and Lauda, Aaron D.},
+ title = {Higher-Dimensional Algebra {V}: 2-Groups},
+ date = {2004-10-27},
+ version = 3,
+ langid = {english},
+ langidopts = {variant=american},
+ eprinttype = {arxiv},
+ eprint = {math/0307200v3},
+ annotation = {An \texttt{online} reference from arXiv. Note the
+ \texttt{eprint} and \texttt{eprinttype} fields. Compare
+ \texttt{baez\slash article} which is the same item given as an
+ \texttt{article} entry with eprint information},
+}
+
+@online{ctan,
+ title = {CTAN},
+ date = 2006,
+ url = {http://www.ctan.org},
+ subtitle = {The {Comprehensive TeX Archive Network}},
+ urldate = {2006-10-01},
+ label = {CTAN},
+ langid = {english},
+ langidopts = {variant=american},
+ annotation = {This is an \texttt{online} entry. The \textsc{url}, which is
+ given in the \texttt{url} field, is transformed into a
+ clickable link if \texttt{hyperref} support has been
+ enabled. Note the format of the \texttt{urldate} field
+ (\texttt{yyyy-mm-dd}) in the database file. Also note the
+ \texttt{label} field which may be used as a fallback by
+ citation styles which need an \texttt{author} and\slash or a
+ \texttt{year}},
+}
+
+@online{itzhaki,
+ author = {Itzhaki, Nissan},
+ title = {Some remarks on {'t Hooft's} {S}-matrix for black holes},
+ date = {1996-03-11},
+ version = 1,
+ langid = {english},
+ langidopts = {variant=american},
+ eprinttype = {arxiv},
+ eprint = {hep-th/9603067},
+ annotation = {An \texttt{online} reference from arXiv. Note the
+ \texttt{eprint} and \texttt{eprinttype} fields. Also note that
+ the arXiv reference is transformed into a clickable link if
+ \texttt{hyperref} support has been enabled},
+ abstract = {We discuss the limitations of 't Hooft's proposal for the
+ black hole S-matrix. We find that the validity of the S-matrix
+ implies violation of the semi-classical approximation at
+ scales large compared to the Planck scale. We also show that
+ the effect of the centrifugal barrier on the S-matrix is
+ crucial even for large transverse distances.},
+}
+
+@online{markey,
+ author = {Markey, Nicolas},
+ title = {Tame the {BeaST}},
+ date = {2005-10-16},
+ url = {http://mirror.ctan.org/info/bibtex/tamethebeast/ttb_en.pdf},
+ subtitle = {The {B} to {X} of {BibTeX}},
+ version = {1.3},
+ urldate = {2006-10-01},
+ langid = {english},
+ langidopts = {variant=american},
+ sorttitle = {Tame the Beast},
+ annotation = {An \texttt{online} entry for a tutorial. Note the format of
+ the \texttt{date} field (\texttt{yyyy-mm-dd}) in the database
+ file.},
+}
+
+@online{wassenberg,
+ author = {Wassenberg, Jan and Sanders, Peter},
+ title = {Faster Radix Sort via Virtual Memory and Write-Combining},
+ date = {2010-08-17},
+ version = 1,
+ langid = {english},
+ langidopts = {variant=american},
+ eprinttype = {arxiv},
+ eprintclass = {cs.DS},
+ eprint = {1008.2849v1},
+ annotation = {A recent \texttt{online} reference from arXiv using the new
+ (April 2007 onward) identifier format. Note the
+ \texttt{eprint}, \texttt{eprinttype}, and \texttt{eprintclass}
+ fields. Also note that the arXiv reference is transformed into
+ a clickable link if \texttt{hyperref} support has been
+ enabled},
+ abstract = {Sorting algorithms are the deciding factor for the performance
+ of common operations such as removal of duplicates or database
+ sort-merge joins. This work focuses on 32-bit integer keys,
+ optionally paired with a 32-bit value. We present a fast radix
+ sorting algorithm that builds upon a microarchitecture-aware
+ variant of counting sort},
+}
+
+@patent{almendro,
+ author = {Almendro, Jos{\'e} L. and Mart{\'i}n, Jacinto and S{\'a}nchez,
+ Alberto and Nozal, Fernando},
+ title = {Elektromagnetisches Signalhorn},
+ number = {EU-29702195U},
+ date = 1998,
+ location = {countryfr and countryuk and countryde},
+ langid = {german},
+ annotation = {This is a \texttt{patent} entry with a \texttt{location}
+ field. The number is given in the \texttt{number} field. Note
+ the format of the \texttt{location} field in the database
+ file. Compare \texttt{laufenberg}, \texttt{sorace}, and
+ \texttt{kowalik}},
+}
+
+@patent{kowalik,
+ author = {Kowalik, F. and Isard, M.},
+ title = {Estimateur d'un d{\'e}faut de fonctionnement d'un modulateur
+ en quadrature et {\'e}tage de modulation l'utilisant},
+ number = 9500261,
+ date = {1995-01-11},
+ type = {patreqfr},
+ langid = {french},
+ indextitle = {Estimateur d'un d{\'e}faut de fonctionnement},
+ annotation = {This is a \texttt{patent} entry for a French patent request
+ with a full date. The number is given in the \texttt{number}
+ field. Note the format of the \texttt{type} and \texttt{date}
+ fields in the database file. Compare \texttt{almendro},
+ \texttt{laufenberg}, and \texttt{sorace}},
+}
+
+@patent{laufenberg,
+ author = {Laufenberg, Xaver and Eynius, Dominique and Suelzle, Helmut
+ and Usbeck, Stephan and Spaeth, Matthias and Neuser-Hoffmann,
+ Miriam and Myrzik, Christian and Schmid, Manfred and Nietfeld,
+ Franz and Thiel, Alexander and Braun, Harald and Ebner,
+ Norbert},
+ title = {Elektrische Einrichtung und Betriebsverfahren},
+ number = 1700367,
+ date = {2006-09-13},
+ holder = {{Robert Bosch GmbH} and {Daimler Chrysler AG} and {Bayerische
+ Motoren Werke AG}},
+ type = {patenteu},
+ langid = {german},
+ annotation = {This is a \texttt{patent} entry with a \texttt{holder} field.
+ Note the format of the \texttt{type} and \texttt{location}
+ fields in the database file. Compare \texttt{almendro},
+ \texttt{sorace}, and \texttt{kowalik}},
+ abstract = {The invention relates to an electric device comprising a
+ generator, in particular for use in the vehicle electric
+ system of a motor vehicle and a controller for controlling the
+ generator voltage. The device is equipped with a control zone,
+ in which the voltage is controlled and zones, in which the
+ torque is controlled. The invention also relates to methods
+ for operating a device of this type.},
+ file = {http://v3.espacenet.com/textdoc?IDX=EP1700367},
+}
+
+@patent{sorace,
+ author = {Sorace, Ronald E. and Reinhardt, Victor S. and Vaughn, Steven
+ A.},
+ title = {High-Speed Digital-to-{RF} Converter},
+ number = 5668842,
+ date = {1997-09-16},
+ holder = {{Hughes Aircraft Company}},
+ type = {patentus},
+ langid = {english},
+ langidopts = {variant=american},
+ annotation = {This is a \texttt{patent} entry with a \texttt{holder} field.
+ Note the format of the \texttt{type} and \texttt{date} fields
+ in the database file. Compare \texttt{almendro},
+ \texttt{laufenberg}, and \texttt{kowalik}},
+}
+
+@periodical{jcg,
+ title = {Computers and Graphics},
+ year = 2011,
+ issuetitle = {Semantic {3D} Media and Content},
+ volume = 35,
+ number = 4,
+ issn = {0097-8493},
+ annotation = {This is a \texttt{periodical} entry with an \texttt{issn}
+ field.},
+}
+
+@report{chiu,
+ author = {Chiu, Willy W. and Chow, We Min},
+ title = {A Hybrid Hierarchical Model of a {Multiple Virtual Storage}
+ ({MVS}) Operating System},
+ type = {resreport},
+ institution = {IBM},
+ date = 1978,
+ number = {RC-6947},
+ langid = {english},
+ langidopts = {variant=american},
+ sorttitle = {Hybrid Hierarchical Model of a Multiple Virtual Storage (MVS)
+ Operating System},
+ indextitle = {Hybrid Hierarchical Model, A},
+ annotation = {This is a \texttt{report} entry for a research report. Note
+ the format of the \texttt{type} field in the database file
+ which uses a localization key. The number of the report is
+ given in the \texttt{number} field. Also note the
+ \texttt{sorttitle} and \texttt{indextitle} fields},
+}
+
+@report{padhye,
+ author = {Padhye, Jitendra and Firoiu, Victor and Towsley, Don},
+ title = {A Stochastic Model of {TCP Reno} Congestion Avoidance and
+ Control},
+ type = {techreport},
+ institution = {University of Massachusetts},
+ date = 1999,
+ number = {99-02},
+ location = {Amherst, Mass.},
+ langid = {english},
+ langidopts = {variant=american},
+ sorttitle = {A Stochastic Model of TCP Reno Congestion Avoidance and
+ Control},
+ indextitle = {Stochastic Model of {TCP Reno} Congestion Avoidance and Control,
+ A},
+ annotation = {This is a \texttt{report} entry for a technical report. Note
+ the format of the \texttt{type} field in the database file
+ which uses a localization key. The number of the report is
+ given in the \texttt{number} field. Also note the
+ \texttt{sorttitle} and \texttt{indextitle} fields},
+ abstract = {The steady state performance of a bulk transfer TCP flow
+ (i.e. a flow with a large amount of data to send, such as FTP
+ transfers) may be characterized by three quantities. The first
+ is the send rate, which is the amount of data sent by the
+ sender in unit time. The second is the throughput, which is
+ the amount of data received by the receiver in unit time. Note
+ that the throughput will always be less than or equal to the
+ send rate due to losses. Finally, the number of non-duplicate
+ packets received by the receiver in unit time gives us the
+ goodput of the connection. The goodput is always less than or
+ equal to the throughput, since the receiver may receive two
+ copies of the same packet due to retransmissions by the
+ sender. In a previous paper, we presented a simple model for
+ predicting the steady state send rate of a bulk transfer TCP
+ flow as a function of loss rate and round trip time. In this
+ paper, we extend that work in two ways. First, we analyze the
+ performance of bulk transfer TCP flows using more precise,
+ stochastic analysis. Second, we build upon the previous
+ analysis to provide both an approximate formula as well as a
+ more accurate stochastic model for the steady state throughput
+ of a bulk transfer TCP flow.},
+ file = {ftp://gaia.cs.umass.edu/pub/Padhey99-markov.ps},
+}
+
+@thesis{geer,
+ author = {de Geer, Ingrid},
+ title = {Earl, Saint, Bishop, Skald~-- and Music},
+ type = {phdthesis},
+ institution = {Uppsala Universitet},
+ date = 1985,
+ subtitle = {The {Orkney Earldom} of the Twelfth Century. {A} Musicological
+ Study},
+ location = {Uppsala},
+ options = {useprefix=false},
+ langid = {english},
+ langidopts = {variant=british},
+ annotation = {This is a typical \texttt{thesis} entry for a PhD thesis. Note
+ the \texttt{type} field in the database file which uses a
+ localization key. Also note the format of the printed name and
+ compare the \texttt{useprefix} option in the \texttt{options}
+ field as well as \texttt{vangennep}},
+}
+
+@thesis{loh,
+ author = {Loh, Nin C.},
+ title = {High-Resolution Micromachined Interferometric Accelerometer},
+ type = {mathesis},
+ institution = {Massachusetts Institute of Technology},
+ date = 1992,
+ location = {Cambridge, Mass.},
+ langid = {english},
+ langidopts = {variant=american},
+ annotation = {This is a typical \texttt{thesis} entry for an MA thesis. Note
+ the \texttt{type} field in the database file which uses a
+ localization key},
+}
diff --git a/macros/latex/contrib/biblatex-ms/doc/examples/biblatex-examples-ms.bltxml b/macros/latex/contrib/biblatex-ms/doc/examples/biblatex-examples-ms.bltxml
new file mode 100644
index 0000000000..b1d49c2e1a
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/doc/examples/biblatex-examples-ms.bltxml
@@ -0,0 +1,2840 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?xml-model href="biblatex-examples.rng" type="application/xml" schematypens="http://relaxng.org/ns/structure/1.0"?>
+<!-- Auto-generated by Biber::Output::biblatexml -->
+
+<bltx:entries xmlns:bltx="http://biblatex-biber.sourceforge.net/biblatexml">
+ <bltx:entry id="bulgakov" entrytype="book">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="given" initial="М">Михаи́л</bltx:namepart>
+ <bltx:namepart type="patronymic" initial="А">Афана́сьевич</bltx:namepart>
+ <bltx:namepart type="family" initial="Б">Булга́ков</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:title>Мастер и Маргарита</bltx:title>
+ <bltx:date>1966</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="westfahl:space" entrytype="incollection">
+ <bltx:crossref>westfahl:frontier</bltx:crossref>
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="W">Westfahl</bltx:namepart>
+ <bltx:namepart type="given" initial="G">Gary</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:annotation>A cross-referenced article from a \texttt{collection}. This is an \texttt{incollection} entry with a \texttt{crossref} field. Note the \texttt{subtitle} and \texttt{indextitle} fields</bltx:annotation>
+ <bltx:crossref>westfahl:frontier</bltx:crossref>
+ <bltx:indextitle>True Frontier, The</bltx:indextitle>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:subtitle>Confronting and Avoiding the Realities of Space in {American} Science Fiction Films</bltx:subtitle>
+ <bltx:title>The True Frontier</bltx:title>
+ <bltx:pages>
+ <bltx:list>
+ <bltx:item>
+ <bltx:start>55</bltx:start>
+ <bltx:end>65</bltx:end>
+ </bltx:item>
+ </bltx:list>
+ </bltx:pages>
+ </bltx:entry>
+ <bltx:entry id="set" entrytype="set">
+ <bltx:annotation>A \texttt{set} with three members. The \texttt{crossref} field in the \texttt{@set} entry and the \texttt{entryset} field in each set member entry is needed only when using BibTeX as the backend</bltx:annotation>
+ </bltx:entry>
+ <bltx:entry id="stdmodel" entrytype="set">
+ <bltx:annotation>A \texttt{set} with three members discussing the standard model of particle physics. The \texttt{crossref} field in the \texttt{@set} entry and the \texttt{entryset} field in each set member entry is needed only when using BibTeX as the backend</bltx:annotation>
+ </bltx:entry>
+ <bltx:entry id="aksin" entrytype="article">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="A">Aksın</bltx:namepart>
+ <bltx:namepart type="given" initial="Ö">Özge</bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="T">Türkmen</bltx:namepart>
+ <bltx:namepart type="given" initial="H">Hayati</bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="A">Artok</bltx:namepart>
+ <bltx:namepart type="given" initial="L">Levent</bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="Ç">Çetinkaya</bltx:namepart>
+ <bltx:namepart type="given" initial="B">Bekir</bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="N">Ni</bltx:namepart>
+ <bltx:namepart type="given" initial="C">Chaoying</bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="B">Büyükgüngör</bltx:namepart>
+ <bltx:namepart type="given" initial="O">Orhan</bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="Ö">Özkal</bltx:namepart>
+ <bltx:namepart type="given" initial="E">Erhan</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:indextitle>Effect of immobilization on catalytic characteristics</bltx:indextitle>
+ <bltx:journaltitle>J.~Organomet. Chem.</bltx:journaltitle>
+ <bltx:number>13</bltx:number>
+ <bltx:title>Effect of immobilization on catalytic characteristics of saturated {Pd-N}-heterocyclic carbenes in {Mizoroki-Heck} reactions</bltx:title>
+ <bltx:volume>691</bltx:volume>
+ <bltx:pages>
+ <bltx:list>
+ <bltx:item>
+ <bltx:start>3027</bltx:start>
+ <bltx:end>3036</bltx:end>
+ </bltx:item>
+ </bltx:list>
+ </bltx:pages>
+ <bltx:date>2006</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="angenendt" entrytype="article">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="A">Angenendt</bltx:namepart>
+ <bltx:namepart type="given" initial="A">Arnold</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:annotation>A German article in a French journal. Apart from that, a typical \texttt{article} entry. Note the \texttt{indextitle} field</bltx:annotation>
+ <bltx:indextitle>In Honore Salvatoris</bltx:indextitle>
+ <bltx:journaltitle>Revue d'Histoire Ecclésiastique</bltx:journaltitle>
+ <bltx:langid>german</bltx:langid>
+ <bltx:shorttitle>In Honore Salvatoris</bltx:shorttitle>
+ <bltx:title>In Honore Salvatoris~-- Vom Sinn und Unsinn der Patrozinienkunde</bltx:title>
+ <bltx:volume>97</bltx:volume>
+ <bltx:pages>
+ <bltx:list>
+ <bltx:item>
+ <bltx:start>431</bltx:start>
+ <bltx:end>456</bltx:end>
+ </bltx:item>
+ <bltx:item>
+ <bltx:start>791</bltx:start>
+ <bltx:end>823</bltx:end>
+ </bltx:item>
+ </bltx:list>
+ </bltx:pages>
+ <bltx:date>2002</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="baez/article" entrytype="article">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="B">Baez</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="J">John</bltx:namepart>
+ <bltx:namepart initial="C">C.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="L">Lauda</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="A">Aaron</bltx:namepart>
+ <bltx:namepart initial="D">D.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:annotation>An \texttt{article} with \texttt{eprint} and \texttt{eprinttype} fields. Note that the arXiv reference is transformed into a clickable link if \texttt{hyperref} support has been enabled. Compare \texttt{baez\slash online}, which is the same item given as an \texttt{online} entry</bltx:annotation>
+ <bltx:eprint>math/0307200v3</bltx:eprint>
+ <bltx:eprinttype>arxiv</bltx:eprinttype>
+ <bltx:journaltitle>Theory and Applications of Categories</bltx:journaltitle>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:title>Higher-Dimensional Algebra {V}: 2-Groups</bltx:title>
+ <bltx:version>3</bltx:version>
+ <bltx:volume>12</bltx:volume>
+ <bltx:pages>
+ <bltx:list>
+ <bltx:item>
+ <bltx:start>423</bltx:start>
+ <bltx:end>491</bltx:end>
+ </bltx:item>
+ </bltx:list>
+ </bltx:pages>
+ <bltx:date>2004</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="bertram" entrytype="article">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="B">Bertram</bltx:namepart>
+ <bltx:namepart type="given" initial="A">Aaron</bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="W">Wentworth</bltx:namepart>
+ <bltx:namepart type="given" initial="R">Richard</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:annotation>An \texttt{article} entry with a \texttt{volume} and a \texttt{number} field</bltx:annotation>
+ <bltx:journaltitle>J.~Amer. Math. Soc.</bltx:journaltitle>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:number>2</bltx:number>
+ <bltx:shorttitle>Gromov invariants</bltx:shorttitle>
+ <bltx:title>Gromov invariants for holomorphic maps on {Riemann} surfaces</bltx:title>
+ <bltx:volume>9</bltx:volume>
+ <bltx:pages>
+ <bltx:list>
+ <bltx:item>
+ <bltx:start>529</bltx:start>
+ <bltx:end>571</bltx:end>
+ </bltx:item>
+ </bltx:list>
+ </bltx:pages>
+ <bltx:date>1996</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="doody" entrytype="article">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="D">Doody</bltx:namepart>
+ <bltx:namepart type="given" initial="T">Terrence</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:annotation>An \texttt{article} entry cited as an excerpt from a \texttt{collection} entry. Note the format of the \texttt{related} and \texttt{relatedstring} fields</bltx:annotation>
+ <bltx:journaltitle>The Journal of Narrative Technique</bltx:journaltitle>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:number>3</bltx:number>
+ <bltx:relatedstring>\autocap{e}xcerpt in</bltx:relatedstring>
+ <bltx:title>Hemingway's Style and {Jake's} Narration</bltx:title>
+ <bltx:volume>4</bltx:volume>
+ <bltx:pages>
+ <bltx:list>
+ <bltx:item>
+ <bltx:start>212</bltx:start>
+ <bltx:end>225</bltx:end>
+ </bltx:item>
+ </bltx:list>
+ </bltx:pages>
+ <bltx:date>1974</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="matuz:doody" entrytype="collection">
+ <bltx:names type="editor">
+ <bltx:name>
+ <bltx:namepart type="family" initial="M">Matuz</bltx:namepart>
+ <bltx:namepart type="given" initial="R">Roger</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>Detroit</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>Gale</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>A \texttt{collection} entry providing the excerpt information for the \texttt{doody} entry. Note the format of the \texttt{pages} field</bltx:annotation>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:title>Contemporary Literary Criticism</bltx:title>
+ <bltx:volume>61</bltx:volume>
+ <bltx:pages>
+ <bltx:list>
+ <bltx:item>
+ <bltx:start>204</bltx:start>
+ <bltx:end>208</bltx:end>
+ </bltx:item>
+ </bltx:list>
+ </bltx:pages>
+ <bltx:date>1990</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="gillies" entrytype="article">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="G">Gillies</bltx:namepart>
+ <bltx:namepart type="given" initial="A">Alexander</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:annotation>An \texttt{article} entry with a \texttt{series} and a \texttt{volume} field. Note that format of the \texttt{series} field in the database file</bltx:annotation>
+ <bltx:journaltitle>Publications of the English Goethe Society</bltx:journaltitle>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=british</bltx:langidopts>
+ <bltx:series>newseries</bltx:series>
+ <bltx:title>Herder and the Preparation of {Goethe's} Idea of World Literature</bltx:title>
+ <bltx:volume>9</bltx:volume>
+ <bltx:pages>
+ <bltx:list>
+ <bltx:item>
+ <bltx:start>46</bltx:start>
+ <bltx:end>67</bltx:end>
+ </bltx:item>
+ </bltx:list>
+ </bltx:pages>
+ <bltx:date>1933</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="glashow" entrytype="article">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="G">Glashow</bltx:namepart>
+ <bltx:namepart type="given" initial="S">Sheldon</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:journaltitle>Nucl.~Phys.</bltx:journaltitle>
+ <bltx:title>Partial Symmetries of Weak Interactions</bltx:title>
+ <bltx:volume>22</bltx:volume>
+ <bltx:pages>
+ <bltx:list>
+ <bltx:item>
+ <bltx:start>579</bltx:start>
+ <bltx:end>588</bltx:end>
+ </bltx:item>
+ </bltx:list>
+ </bltx:pages>
+ <bltx:date>1961</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="herrmann" entrytype="article">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="H">Herrmann</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="W">Wolfgang</bltx:namepart>
+ <bltx:namepart initial="A">A.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="Ö">Öfele</bltx:namepart>
+ <bltx:namepart type="given" initial="K">Karl</bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="S">Schneider</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="S">Sabine</bltx:namepart>
+ <bltx:namepart initial="K">K.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="H">Herdtweck</bltx:namepart>
+ <bltx:namepart type="given" initial="E">Eberhardt</bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="H">Hoffmann</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="S">Stephan</bltx:namepart>
+ <bltx:namepart initial="D">D.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:indextitle>Carbocyclic carbene as an efficient catalyst, A</bltx:indextitle>
+ <bltx:journaltitle>Angew.~Chem. Int.~Ed.</bltx:journaltitle>
+ <bltx:number>23</bltx:number>
+ <bltx:title>A carbocyclic carbene as an efficient catalyst ligand for {C--C} coupling reactions</bltx:title>
+ <bltx:volume>45</bltx:volume>
+ <bltx:pages>
+ <bltx:list>
+ <bltx:item>
+ <bltx:start>3859</bltx:start>
+ <bltx:end>3862</bltx:end>
+ </bltx:item>
+ </bltx:list>
+ </bltx:pages>
+ <bltx:date>2006</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="kastenholz" entrytype="article">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="K">Kastenholz</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="M">M.</bltx:namepart>
+ <bltx:namepart initial="A">A.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="H">Hünenberger</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="P">Philippe</bltx:namepart>
+ <bltx:namepart initial="H">H.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:abstract>The computation of ionic solvation free energies from atomistic simulations is a surprisingly difficult problem that has found no satisfactory solution for more than 15 years. The reason is that the charging free energies evaluated from such simulations are affected by very large errors. One of these is related to the choice of a specific convention for summing up the contributions of solvent charges to the electrostatic potential in the ionic cavity, namely, on the basis of point charges within entire solvent molecules (M scheme) or on the basis of individual point charges (P scheme). The use of an inappropriate convention may lead to a charge-independent offset in the calculated potential, which depends on the details of the summation scheme, on the quadrupole-moment trace of the solvent molecule, and on the approximate form used to represent electrostatic interactions in the system. However, whether the M or P scheme (if any) represents the appropriate convention is still a matter of on-going debate. The goal of the present article is to settle this long-standing controversy by carefully analyzing (both analytically and numerically) the properties of the electrostatic potential in molecular liquids (and inside cavities within them).</bltx:abstract>
+ <bltx:annotation>An \texttt{article} entry with an \texttt{eid} and a \texttt{doi} field. Note that the \textsc{doi} is transformed into a clickable link if \texttt{hyperref} support has been enabled</bltx:annotation>
+ <bltx:doi>10.1063/1.2172593</bltx:doi>
+ <bltx:eid>124106</bltx:eid>
+ <bltx:indextitle>Computation of ionic solvation free energies</bltx:indextitle>
+ <bltx:journaltitle>J.~Chem. Phys.</bltx:journaltitle>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:subtitle>{I}. {The} electrostatic potential in molecular liquids</bltx:subtitle>
+ <bltx:title>Computation of methodology\hyphen independent ionic solvation free energies from molecular simulations</bltx:title>
+ <bltx:volume>124</bltx:volume>
+ <bltx:date>2006</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="murray" entrytype="article">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="H">Hostetler</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="M">Michael</bltx:namepart>
+ <bltx:namepart initial="J">J.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="W">Wingate</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="J">Julia</bltx:namepart>
+ <bltx:namepart initial="E">E.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="Z">Zhong</bltx:namepart>
+ <bltx:namepart type="given" initial="C-J">Chuan-Jian</bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="H">Harris</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="J">Jay</bltx:namepart>
+ <bltx:namepart initial="E">E.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="V">Vachet</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="R">Richard</bltx:namepart>
+ <bltx:namepart initial="W">W.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="C">Clark</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="M">Michael</bltx:namepart>
+ <bltx:namepart initial="R">R.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="L">Londono</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="J">J.</bltx:namepart>
+ <bltx:namepart initial="D">David</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="G">Green</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="S">Stephen</bltx:namepart>
+ <bltx:namepart initial="J">J.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="S">Stokes</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="J">Jennifer</bltx:namepart>
+ <bltx:namepart initial="J">J.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="W">Wignall</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="G">George</bltx:namepart>
+ <bltx:namepart initial="D">D.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="G">Glish</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="G">Gary</bltx:namepart>
+ <bltx:namepart initial="L">L.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="P">Porter</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="M">Marc</bltx:namepart>
+ <bltx:namepart initial="D">D.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="E">Evans</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="N">Neal</bltx:namepart>
+ <bltx:namepart initial="D">D.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="M">Murray</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="R">Royce</bltx:namepart>
+ <bltx:namepart initial="W">W.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:annotation>An \texttt{article} entry with \arabic{author} authors. By default, long author and editor lists are automatically truncated. This is configurable</bltx:annotation>
+ <bltx:indextitle>Alkanethiolate gold cluster molecules</bltx:indextitle>
+ <bltx:journaltitle>Langmuir</bltx:journaltitle>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:number>1</bltx:number>
+ <bltx:shorttitle>Alkanethiolate gold cluster molecules</bltx:shorttitle>
+ <bltx:subtitle>Core and monolayer properties as a function of core size</bltx:subtitle>
+ <bltx:title>Alkanethiolate gold cluster molecules with core diameters from 1.5 to 5.2~{nm}</bltx:title>
+ <bltx:volume>14</bltx:volume>
+ <bltx:pages>
+ <bltx:list>
+ <bltx:item>
+ <bltx:start>17</bltx:start>
+ <bltx:end>30</bltx:end>
+ </bltx:item>
+ </bltx:list>
+ </bltx:pages>
+ <bltx:date>1998</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="reese" entrytype="article">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="R">Reese</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="T">Trevor</bltx:namepart>
+ <bltx:namepart initial="R">R.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:annotation>An \texttt{article} entry with a \texttt{series} and a \texttt{volume} field. Note the format of the series. If the value of the \texttt{series} field is an integer, this number is printed as an ordinal and the string \enquote*{series} is appended automatically</bltx:annotation>
+ <bltx:journaltitle>William and Mary Quarterly</bltx:journaltitle>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:series>3</bltx:series>
+ <bltx:title>Georgia in {Anglo-Spanish} Diplomacy, 1736--1739</bltx:title>
+ <bltx:volume>15</bltx:volume>
+ <bltx:pages>
+ <bltx:list>
+ <bltx:item>
+ <bltx:start>168</bltx:start>
+ <bltx:end>190</bltx:end>
+ </bltx:item>
+ </bltx:list>
+ </bltx:pages>
+ <bltx:date>1958</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="sarfraz" entrytype="article">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="S">Sarfraz</bltx:namepart>
+ <bltx:namepart type="given" initial="M">M.</bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="R">Razzak</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="M">M.</bltx:namepart>
+ <bltx:namepart initial="F">F.</bltx:namepart>
+ <bltx:namepart initial="A">A.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:annotation>An \texttt{article} entry with an \texttt{issn} field</bltx:annotation>
+ <bltx:issn>0097-8493</bltx:issn>
+ <bltx:journaltitle>Computers and Graphics</bltx:journaltitle>
+ <bltx:number>5</bltx:number>
+ <bltx:title>Technical section: {An} algorithm for automatic capturing of the font outlines</bltx:title>
+ <bltx:volume>26</bltx:volume>
+ <bltx:pages>
+ <bltx:list>
+ <bltx:item>
+ <bltx:start>795</bltx:start>
+ <bltx:end>804</bltx:end>
+ </bltx:item>
+ </bltx:list>
+ </bltx:pages>
+ <bltx:date>2002</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="shore" entrytype="article">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="S">Shore</bltx:namepart>
+ <bltx:namepart type="given" initial="B">Bradd</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:annotation>An \texttt{article} entry with \texttt{series}, \texttt{volume}, and \texttt{number} fields. Note the format of the \texttt{series} which is a localization key</bltx:annotation>
+ <bltx:journaltitle>American Anthropologist</bltx:journaltitle>
+ <bltx:number>1</bltx:number>
+ <bltx:series>newseries</bltx:series>
+ <bltx:subtitle>Meaning Construction and Cultural Cognition</bltx:subtitle>
+ <bltx:title>Twice-Born, Once Conceived</bltx:title>
+ <bltx:volume>93</bltx:volume>
+ <bltx:pages>
+ <bltx:list>
+ <bltx:item>
+ <bltx:start>9</bltx:start>
+ <bltx:end>27</bltx:end>
+ </bltx:item>
+ </bltx:list>
+ </bltx:pages>
+ <bltx:date>1991-03</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="sigfridsson" entrytype="article">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="S">Sigfridsson</bltx:namepart>
+ <bltx:namepart type="given" initial="E">Emma</bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="R">Ryde</bltx:namepart>
+ <bltx:namepart type="given" initial="U">Ulf</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:abstract>Four methods for deriving partial atomic charges from the quantum chemical electrostatic potential (CHELP, CHELPG, Merz-Kollman, and RESP) have been compared and critically evaluated. It is shown that charges strongly depend on how and where the potential points are selected. Two alternative methods are suggested to avoid the arbitrariness in the point-selection schemes and van der Waals exclusion radii: CHELP-BOW, which also estimates the charges from the electrostatic potential, but with potential points that are Boltzmann-weighted after their occurrence in actual simulations using the energy function of the program in which the charges will be used, and CHELMO, which estimates the charges directly from the electrostatic multipole moments. Different criteria for the quality of the charges are discussed.</bltx:abstract>
+ <bltx:annotation>An \texttt{article} entry with \texttt{volume}, \texttt{number}, and \texttt{doi} fields. Note that the \textsc{doi} is transformed into a clickable link if \texttt{hyperref} support has been enabled</bltx:annotation>
+ <bltx:doi>10.1002/(SICI)1096-987X(199803)19:4&lt;377::AID-JCC1&gt;3.0.CO;2-P</bltx:doi>
+ <bltx:indextitle>Methods for deriving atomic charges</bltx:indextitle>
+ <bltx:journaltitle>Journal of Computational Chemistry</bltx:journaltitle>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:number>4</bltx:number>
+ <bltx:title>Comparison of methods for deriving atomic charges from the electrostatic potential and moments</bltx:title>
+ <bltx:volume>19</bltx:volume>
+ <bltx:pages>
+ <bltx:list>
+ <bltx:item>
+ <bltx:start>377</bltx:start>
+ <bltx:end>395</bltx:end>
+ </bltx:item>
+ </bltx:list>
+ </bltx:pages>
+ <bltx:date>1998</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="spiegelberg" entrytype="article">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="S">Spiegelberg</bltx:namepart>
+ <bltx:namepart type="given" initial="H">Herbert</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:annotation>An \texttt{article} entry. Note the \texttt{sorttitle} and \texttt{indexsorttitle} fields and the markup of the quotes in the database file</bltx:annotation>
+ <bltx:indexsorttitle>Intention und Intentionalitat in der Scholastik, bei Brentano und Husserl</bltx:indexsorttitle>
+ <bltx:journaltitle>Studia Philosophica</bltx:journaltitle>
+ <bltx:langid>german</bltx:langid>
+ <bltx:shorttitle>Intention und Intentionalität</bltx:shorttitle>
+ <bltx:sorttitle>Intention und Intentionalitat in der Scholastik, bei Brentano und Husserl</bltx:sorttitle>
+ <bltx:title>\mkbibquote{Intention} und \mkbibquote{Intentionalität} in der Scholastik, bei Brentano und Husserl</bltx:title>
+ <bltx:volume>29</bltx:volume>
+ <bltx:pages>
+ <bltx:list>
+ <bltx:item>
+ <bltx:start>189</bltx:start>
+ <bltx:end>216</bltx:end>
+ </bltx:item>
+ </bltx:list>
+ </bltx:pages>
+ <bltx:date>1969</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="springer" entrytype="article">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="S">Springer</bltx:namepart>
+ <bltx:namepart type="given" initial="O">Otto</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:annotation>A plain \texttt{article} entry</bltx:annotation>
+ <bltx:journaltitle>Mediaeval Studies</bltx:journaltitle>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=british</bltx:langidopts>
+ <bltx:shorttitle>Mediaeval Pilgrim Routes</bltx:shorttitle>
+ <bltx:title>Mediaeval Pilgrim Routes from {Scandinavia} to {Rome}</bltx:title>
+ <bltx:volume>12</bltx:volume>
+ <bltx:pages>
+ <bltx:list>
+ <bltx:item>
+ <bltx:start>92</bltx:start>
+ <bltx:end>122</bltx:end>
+ </bltx:item>
+ </bltx:list>
+ </bltx:pages>
+ <bltx:date>1950</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="weinberg" entrytype="article">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="W">Weinberg</bltx:namepart>
+ <bltx:namepart type="given" initial="S">Steven</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:journaltitle>Phys.~Rev.~Lett.</bltx:journaltitle>
+ <bltx:title>A Model of Leptons</bltx:title>
+ <bltx:volume>19</bltx:volume>
+ <bltx:pages>
+ <bltx:list>
+ <bltx:item>
+ <bltx:start>1264</bltx:start>
+ <bltx:end>1266</bltx:end>
+ </bltx:item>
+ </bltx:list>
+ </bltx:pages>
+ <bltx:date>1967</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="yoon" entrytype="article">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="Y">Yoon</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="M">Myeong</bltx:namepart>
+ <bltx:namepart initial="S">S.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="R">Ryu</bltx:namepart>
+ <bltx:namepart type="given" initial="D">Dowook</bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="K">Kim</bltx:namepart>
+ <bltx:namepart type="given" initial="J">Jeongryul</bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="A">Ahn</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="K">Kyo</bltx:namepart>
+ <bltx:namepart initial="H">Han</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:indextitle>Palladium pincer complexes</bltx:indextitle>
+ <bltx:journaltitle>Organometallics</bltx:journaltitle>
+ <bltx:number>10</bltx:number>
+ <bltx:title>Palladium pincer complexes with reduced bond angle strain: efficient catalysts for the {Heck} reaction</bltx:title>
+ <bltx:volume>25</bltx:volume>
+ <bltx:pages>
+ <bltx:list>
+ <bltx:item>
+ <bltx:start>2409</bltx:start>
+ <bltx:end>2411</bltx:end>
+ </bltx:item>
+ </bltx:list>
+ </bltx:pages>
+ <bltx:date>2006</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="aristotle:anima" entrytype="book">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="A">Aristotle</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:names type="editor">
+ <bltx:name>
+ <bltx:namepart type="family" initial="H">Hicks</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="R">Robert</bltx:namepart>
+ <bltx:namepart initial="D">Drew</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>Cambridge</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>Cambridge University Press</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>A \texttt{book} entry with an \texttt{author} and an \texttt{editor}</bltx:annotation>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=british</bltx:langidopts>
+ <bltx:title>De Anima</bltx:title>
+ <bltx:date>1907</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="aristotle:physics" entrytype="book">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="A">Aristotle</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:names type="translator">
+ <bltx:name>
+ <bltx:namepart type="family" initial="W">Wicksteed</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="P">P.</bltx:namepart>
+ <bltx:namepart initial="H">H.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="C">Cornford</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="F">F.</bltx:namepart>
+ <bltx:namepart initial="M">M.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>New York</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>G. P. Putnam</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>A \texttt{book} entry with a \texttt{translator} field</bltx:annotation>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:shorttitle>Physics</bltx:shorttitle>
+ <bltx:title>Physics</bltx:title>
+ <bltx:date>1929</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="aristotle:poetics" entrytype="book">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="A">Aristotle</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:names type="editor">
+ <bltx:name>
+ <bltx:namepart type="family" initial="L">Lucas</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="D">D.</bltx:namepart>
+ <bltx:namepart initial="W">W.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>Oxford</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>Clarendon Press</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>A \texttt{book} entry with an \texttt{author} and an \texttt{editor} as well as a \texttt{series} field</bltx:annotation>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=british</bltx:langidopts>
+ <bltx:series>Clarendon {Aristotle}</bltx:series>
+ <bltx:shorttitle>Poetics</bltx:shorttitle>
+ <bltx:title>Poetics</bltx:title>
+ <bltx:date>1968</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="aristotle:rhetoric" entrytype="book">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="A">Aristotle</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:names type="commentator">
+ <bltx:name>
+ <bltx:namepart type="family" initial="C">Cope</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="E">Edward</bltx:namepart>
+ <bltx:namepart initial="M">Meredith</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:names type="editor">
+ <bltx:name>
+ <bltx:namepart type="family" initial="C">Cope</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="E">Edward</bltx:namepart>
+ <bltx:namepart initial="M">Meredith</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:publisher>
+ <bltx:item>Cambridge University Press</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>A commented edition. Note the concatenation of the \texttt{editor} and \texttt{commentator} fields as well as the \texttt{volumes}, \texttt{sorttitle}, and \texttt{indextitle} fields</bltx:annotation>
+ <bltx:indextitle>Rhetoric of {Aristotle}, The</bltx:indextitle>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=british</bltx:langidopts>
+ <bltx:shorttitle>Rhetoric</bltx:shorttitle>
+ <bltx:sorttitle>Rhetoric of Aristotle</bltx:sorttitle>
+ <bltx:title>The Rhetoric of {Aristotle} with a commentary by the late {Edward Meredith Cope}</bltx:title>
+ <bltx:volumes>3</bltx:volumes>
+ <bltx:date>1877</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="augustine" entrytype="book">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="A">Augustine</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="R">Robert</bltx:namepart>
+ <bltx:namepart initial="L">L.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>New York</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>Marcel Dekker</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>A plain \texttt{book} entry</bltx:annotation>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:shorttitle>Heterogeneous catalysis</bltx:shorttitle>
+ <bltx:title>Heterogeneous catalysis for the synthetic chemist</bltx:title>
+ <bltx:date>1995</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="averroes/bland" entrytype="book">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="A">Averroes</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:names type="editor">
+ <bltx:name>
+ <bltx:namepart type="family" initial="B">Bland</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="K">Kalman</bltx:namepart>
+ <bltx:namepart initial="P">P.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:names type="translator">
+ <bltx:name>
+ <bltx:namepart type="family" initial="B">Bland</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="K">Kalman</bltx:namepart>
+ <bltx:namepart initial="P">P.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>New York</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>Jewish Theological Seminary of America</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>A \texttt{book} entry with a \texttt{series} and a \texttt{number}. Note the concatenation of the \texttt{editor} and \texttt{translator} fields as well as the \texttt{indextitle} field</bltx:annotation>
+ <bltx:indextitle>Epistle on the Possibility of Conjunction, The</bltx:indextitle>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:number>7</bltx:number>
+ <bltx:series>Moreshet: Studies in {Jewish} History, Literature and Thought</bltx:series>
+ <bltx:shorttitle>Possibility of Conjunction</bltx:shorttitle>
+ <bltx:title>The Epistle on the Possibility of Conjunction with the Active Intellect by {Ibn Rushd} with the Commentary of {Moses Narboni}</bltx:title>
+ <bltx:date>1982</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="averroes/hannes" entrytype="book">
+ <bltx:names type="annotator">
+ <bltx:name>
+ <bltx:namepart type="family" initial="H">Hannes</bltx:namepart>
+ <bltx:namepart type="given" initial="L">Ludwig</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="A">Averroes</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:names type="editor">
+ <bltx:name>
+ <bltx:namepart type="family" initial="H">Hannes</bltx:namepart>
+ <bltx:namepart type="given" initial="L">Ludwig</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:names type="translator">
+ <bltx:name>
+ <bltx:namepart type="family" initial="H">Hannes</bltx:namepart>
+ <bltx:namepart type="given" initial="L">Ludwig</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>Halle an der Saale</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>C.~A. Kaemmerer</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>An annotated edition. Note the concatenation of the \texttt{editor}, \texttt{translator}, and \texttt{annotator} fields. Also note the \texttt{shorttitle}, \texttt{indextitle}, \texttt{sorttitle}, and \texttt{indexsorttitle} fields</bltx:annotation>
+ <bltx:indexsorttitle>Uber die Moglichkeit der Conjunktion</bltx:indexsorttitle>
+ <bltx:indextitle>Über die Möglichkeit der Conjunktion</bltx:indextitle>
+ <bltx:langid>german</bltx:langid>
+ <bltx:shorttitle>Über die Möglichkeit der Conjunktion</bltx:shorttitle>
+ <bltx:sorttitle>Uber die Moglichkeit der Conjunktion</bltx:sorttitle>
+ <bltx:title>Des Averroës Abhandlung: \mkbibquote{Über die Möglichkeit der Conjunktion} oder \mkbibquote{Über den materiellen Intellekt}</bltx:title>
+ <bltx:date>1892</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="averroes/hercz" entrytype="book">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="A">Averroes</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:names type="editor">
+ <bltx:name>
+ <bltx:namepart type="family" initial="H">Hercz</bltx:namepart>
+ <bltx:namepart type="given" initial="J">J.</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:names type="translator">
+ <bltx:name>
+ <bltx:namepart type="family" initial="H">Hercz</bltx:namepart>
+ <bltx:namepart type="given" initial="J">J.</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>Berlin</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>S.~Hermann</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>A \texttt{book} entry. Note the concatenation of the \texttt{editor} and \texttt{translator} fields as well as the \texttt{indextitle} and \texttt{indexsorttitle} fields</bltx:annotation>
+ <bltx:indexsorttitle>Drei Abhandlungen uber die Conjunction</bltx:indexsorttitle>
+ <bltx:indextitle>Drei Abhandlungen über die Conjunction</bltx:indextitle>
+ <bltx:langid>german</bltx:langid>
+ <bltx:shorttitle>Drei Abhandlungen</bltx:shorttitle>
+ <bltx:subtitle>Von Averroes (Vater und Sohn), aus dem Arabischen übersetzt von Samuel Ibn Tibbon</bltx:subtitle>
+ <bltx:title>Drei Abhandlungen über die Conjunction des separaten Intellects mit dem Menschen</bltx:title>
+ <bltx:date>1869</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="cicero" entrytype="book">
+ <bltx:names type="afterword">
+ <bltx:name>
+ <bltx:namepart type="family" initial="T">Thraede</bltx:namepart>
+ <bltx:namepart type="given" initial="K">Klaus</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="C">Cicero</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="M">Marcus</bltx:namepart>
+ <bltx:namepart initial="T">Tullius</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:names type="editor">
+ <bltx:name>
+ <bltx:namepart type="family" initial="B-S">Blank-Sangmeister</bltx:namepart>
+ <bltx:namepart type="given" initial="U">Ursula</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:names type="translator">
+ <bltx:name>
+ <bltx:namepart type="family" initial="B-S">Blank-Sangmeister</bltx:namepart>
+ <bltx:namepart type="given" initial="U">Ursula</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:language>
+ <bltx:item>langlatin</bltx:item>
+ <bltx:item>langgerman</bltx:item>
+ </bltx:language>
+ <bltx:location>
+ <bltx:item>Stuttgart</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>Reclam</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>A bilingual edition of Cicero's \emph{De natura deorum}, with a German translation. Note the format of the \texttt{language} field in the database file, the concatenation of the \texttt{editor} and \texttt{translator} fields, and the \texttt{afterword} field</bltx:annotation>
+ <bltx:indextitle>De natura deorum</bltx:indextitle>
+ <bltx:langid>german</bltx:langid>
+ <bltx:shorttitle>De natura deorum</bltx:shorttitle>
+ <bltx:title>De natura deorum. Über das Wesen der Götter</bltx:title>
+ <bltx:date>1995</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="coleridge" entrytype="book">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="C">Coleridge</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="S">Samuel</bltx:namepart>
+ <bltx:namepart initial="T">Taylor</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:names type="editor">
+ <bltx:name>
+ <bltx:namepart type="family" initial="C">Coburn</bltx:namepart>
+ <bltx:namepart type="given" initial="K">Kathleen</bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="E">Engell</bltx:namepart>
+ <bltx:namepart type="given" initial="J">James</bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="B">Bate</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="W">W.</bltx:namepart>
+ <bltx:namepart initial="J">Jackson</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>London</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>Routledge {and} Kegan Paul</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>One (partial) volume of a multivolume book. This is a \texttt{book} entry with a \texttt{volume} and a \texttt{part} field which explicitly refers to the second (physical) part of the seventh (logical) volume. Also note the \texttt{series} and \texttt{number} fields</bltx:annotation>
+ <bltx:indextitle>Biographia literaria</bltx:indextitle>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=british</bltx:langidopts>
+ <bltx:maintitle>The collected works of {Samuel Taylor Coleridge}</bltx:maintitle>
+ <bltx:number>75</bltx:number>
+ <bltx:part>2</bltx:part>
+ <bltx:series>Bollingen Series</bltx:series>
+ <bltx:shorttitle>Biographia literaria</bltx:shorttitle>
+ <bltx:title>Biographia literaria, or {Biographical} sketches of my literary life and opinions</bltx:title>
+ <bltx:volume>7</bltx:volume>
+ <bltx:date>1983</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="companion" entrytype="book">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="G">Goossens</bltx:namepart>
+ <bltx:namepart type="given" initial="M">Michel</bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="M">Mittelbach</bltx:namepart>
+ <bltx:namepart type="given" initial="F">Frank</bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="S">Samarin</bltx:namepart>
+ <bltx:namepart type="given" initial="A">Alexander</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>Reading, Mass.</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>Addison-Wesley</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>A book with three authors. Note the formatting of the author list. By default, only the first name is reversed in the bibliography</bltx:annotation>
+ <bltx:edition>1</bltx:edition>
+ <bltx:indextitle>LaTeX Companion, The</bltx:indextitle>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:pagetotal>528</bltx:pagetotal>
+ <bltx:shorttitle>LaTeX Companion</bltx:shorttitle>
+ <bltx:sorttitle>LaTeX Companion</bltx:sorttitle>
+ <bltx:title>The {LaTeX} Companion</bltx:title>
+ <bltx:date>1994</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="cotton" entrytype="book">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="C">Cotton</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="F">Frank</bltx:namepart>
+ <bltx:namepart initial="A">Albert</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="W">Wilkinson</bltx:namepart>
+ <bltx:namepart type="given" initial="G">Geoffrey</bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="M">Murillio</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="C">Carlos</bltx:namepart>
+ <bltx:namepart initial="A">A.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="B">Bochmann</bltx:namepart>
+ <bltx:namepart type="given" initial="M">Manfred</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>Chichester</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>Wiley</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>A \texttt{book} entry with \arabic{author} authors and an \texttt{edition} field. By default, long \texttt{author} and \texttt{editor} lists are automatically truncated. This is configurable</bltx:annotation>
+ <bltx:edition>6</bltx:edition>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=british</bltx:langidopts>
+ <bltx:title>Advanced inorganic chemistry</bltx:title>
+ <bltx:date>1999</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="gerhardt" entrytype="book">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="G">Gerhardt</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="M">Michael</bltx:namepart>
+ <bltx:namepart initial="J">J.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>Durham</bltx:item>
+ <bltx:item>London</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>Duke University Press</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>This is a \texttt{book} entry. Note the format of the \texttt{location} field as well as the \texttt{sorttitle} and \texttt{indextitle} fields</bltx:annotation>
+ <bltx:indextitle>Federal Appointments Process, The</bltx:indextitle>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:shorttitle>Federal Appointments Process</bltx:shorttitle>
+ <bltx:sorttitle>Federal Appointments Process</bltx:sorttitle>
+ <bltx:subtitle>A Constitutional and Historical Analysis</bltx:subtitle>
+ <bltx:title>The Federal Appointments Process</bltx:title>
+ <bltx:date>2000</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="gonzalez" entrytype="book">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="G">Gonzalez</bltx:namepart>
+ <bltx:namepart type="given" initial="R">Ray</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>Tucson</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>The University of Arizona Press</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>A collection of short stories. This is a \texttt{book} entry. Note the \texttt{sorttitle} and \texttt{indextitle} fields in the database file. There's also an \texttt{isbn} field</bltx:annotation>
+ <bltx:indextitle>Ghost of {John Wayne} and Other Stories, The</bltx:indextitle>
+ <bltx:isbn>0-816-52066-6</bltx:isbn>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:shorttitle>Ghost of {John Wayne}</bltx:shorttitle>
+ <bltx:sorttitle>Ghost of John Wayne and Other Stories</bltx:sorttitle>
+ <bltx:title>The Ghost of {John Wayne} and Other Stories</bltx:title>
+ <bltx:date>2001</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="hammond" entrytype="book">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="H">Hammond</bltx:namepart>
+ <bltx:namepart type="given" initial="C">Christopher</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>Oxford</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>International Union of Crystallography</bltx:item>
+ <bltx:item>Oxford University Press</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>A \texttt{book} entry. Note the \texttt{sorttitle} and \texttt{indextitle} fields as well as the format of the \texttt{publisher} field</bltx:annotation>
+ <bltx:indextitle>Basics of crystallography and diffraction, The</bltx:indextitle>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=british</bltx:langidopts>
+ <bltx:shorttitle>Crystallography and diffraction</bltx:shorttitle>
+ <bltx:sorttitle>Basics of crystallography and diffraction</bltx:sorttitle>
+ <bltx:title>The basics of crystallography and diffraction</bltx:title>
+ <bltx:date>1997</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="iliad" entrytype="book">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="H">Homer</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:names type="introduction">
+ <bltx:name>
+ <bltx:namepart type="family" initial="L">Latacz</bltx:namepart>
+ <bltx:namepart type="given" initial="J">Joachim</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:names type="translator">
+ <bltx:name>
+ <bltx:namepart type="family" initial="S">Schadewaldt</bltx:namepart>
+ <bltx:namepart type="given" initial="W">Wolfgang</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>Düsseldorf</bltx:item>
+ <bltx:item>Zürich</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>Artemis \&amp; Winkler</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>A German translation of the \emph{Iliad}. Note the \texttt{translator} and \texttt{introduction} fields and the format of the \texttt{location} field in the database file. Also note the \texttt{sorttitle} and \texttt{indextitle} fields</bltx:annotation>
+ <bltx:edition>3</bltx:edition>
+ <bltx:indextitle>Ilias, Die</bltx:indextitle>
+ <bltx:langid>german</bltx:langid>
+ <bltx:shorttitle>Ilias</bltx:shorttitle>
+ <bltx:sorttitle>Ilias</bltx:sorttitle>
+ <bltx:title>Die Ilias</bltx:title>
+ <bltx:date>2004</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="knuth:ct" entrytype="book">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="K">Knuth</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="D">Donald</bltx:namepart>
+ <bltx:namepart initial="E">E.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>Reading, Mass.</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>Addison-Wesley</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>A five-volume book cited as a whole. This is a \texttt{book} entry, note the \texttt{volumes} field</bltx:annotation>
+ <bltx:indexsorttitle>Computers &amp; Typesetting</bltx:indexsorttitle>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:sorttitle>Computers &amp; Typesetting</bltx:sorttitle>
+ <bltx:sortyear>1984-0</bltx:sortyear>
+ <bltx:title>Computers \&amp; Typesetting</bltx:title>
+ <bltx:volumes>5</bltx:volumes>
+ <bltx:date>
+ <bltx:start>1984</bltx:start>
+ <bltx:end>1986</bltx:end>
+ </bltx:date>
+ </bltx:entry>
+ <bltx:entry id="knuth:ct:a" entrytype="book">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="K">Knuth</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="D">Donald</bltx:namepart>
+ <bltx:namepart initial="E">E.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>Reading, Mass.</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>Addison-Wesley</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>The first volume of a five-volume book. Note the \texttt{sorttitle} and \texttt{sortyear} fields. We want this volume to be listed after the entry referring to the entire five-volume set. Also note the \texttt{indextitle} and \texttt{indexsorttitle} fields. Indexing packages that don't generate robust index entries require some control sequences to be protected from expansion</bltx:annotation>
+ <bltx:indexsorttitle>The TeXbook</bltx:indexsorttitle>
+ <bltx:indextitle>\protect\TeX book, The</bltx:indextitle>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:maintitle>Computers \&amp; Typesetting</bltx:maintitle>
+ <bltx:shorttitle>\TeX book</bltx:shorttitle>
+ <bltx:sorttitle>Computers &amp; Typesetting A</bltx:sorttitle>
+ <bltx:sortyear>1984-1</bltx:sortyear>
+ <bltx:title>The {\TeX} book</bltx:title>
+ <bltx:volume>A</bltx:volume>
+ <bltx:date>1984</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="knuth:ct:b" entrytype="book">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="K">Knuth</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="D">Donald</bltx:namepart>
+ <bltx:namepart initial="E">E.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>Reading, Mass.</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>Addison-Wesley</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>The second volume of a five-volume book. Note the \texttt{sorttitle} and \texttt{sortyear} fields. Also note the \texttt{indexsorttitle} field</bltx:annotation>
+ <bltx:indexsorttitle>TeX: The Program</bltx:indexsorttitle>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:maintitle>Computers \&amp; Typesetting</bltx:maintitle>
+ <bltx:shorttitle>\TeX</bltx:shorttitle>
+ <bltx:sorttitle>Computers &amp; Typesetting B</bltx:sorttitle>
+ <bltx:sortyear>1986-1</bltx:sortyear>
+ <bltx:title>\TeX: The Program</bltx:title>
+ <bltx:volume>B</bltx:volume>
+ <bltx:date>1986</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="knuth:ct:c" entrytype="book">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="K">Knuth</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="D">Donald</bltx:namepart>
+ <bltx:namepart initial="E">E.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>Reading, Mass.</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>Addison-Wesley</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>The third volume of a five-volume book. Note the \texttt{sorttitle} and \texttt{sortyear} fields as well as the \texttt{indextitle} field</bltx:annotation>
+ <bltx:indextitle>METAFONTbook, The</bltx:indextitle>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:maintitle>Computers \&amp; Typesetting</bltx:maintitle>
+ <bltx:shorttitle>METAFONTbook</bltx:shorttitle>
+ <bltx:sorttitle>Computers &amp; Typesetting C</bltx:sorttitle>
+ <bltx:sortyear>1986-2</bltx:sortyear>
+ <bltx:title>The {METAFONTbook}</bltx:title>
+ <bltx:volume>C</bltx:volume>
+ <bltx:date>1986</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="knuth:ct:d" entrytype="book">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="K">Knuth</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="D">Donald</bltx:namepart>
+ <bltx:namepart initial="E">E.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>Reading, Mass.</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>Addison-Wesley</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>The fourth volume of a five-volume book. Note the \texttt{sorttitle} and \texttt{sortyear} fields</bltx:annotation>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:maintitle>Computers \&amp; Typesetting</bltx:maintitle>
+ <bltx:shorttitle>METAFONT</bltx:shorttitle>
+ <bltx:sorttitle>Computers &amp; Typesetting D</bltx:sorttitle>
+ <bltx:sortyear>1986-3</bltx:sortyear>
+ <bltx:title>METAFONT: The Program</bltx:title>
+ <bltx:volume>D</bltx:volume>
+ <bltx:date>1986</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="knuth:ct:e" entrytype="book">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="K">Knuth</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="D">Donald</bltx:namepart>
+ <bltx:namepart initial="E">E.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>Reading, Mass.</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>Addison-Wesley</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>The fifth volume of a five-volume book. Note the \texttt{sorttitle} and \texttt{sortyear} fields</bltx:annotation>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:maintitle>Computers \&amp; Typesetting</bltx:maintitle>
+ <bltx:sorttitle>Computers &amp; Typesetting E</bltx:sorttitle>
+ <bltx:sortyear>1986-4</bltx:sortyear>
+ <bltx:title>{Computer Modern} Typefaces</bltx:title>
+ <bltx:volume>E</bltx:volume>
+ <bltx:date>1986</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="knuth:ct:related" entrytype="book">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="K">Knuth</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="D">Donald</bltx:namepart>
+ <bltx:namepart initial="E">E.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>Reading, Mass.</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>Addison-Wesley</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>A five-volume book cited as a whole and related to its individual volumes. Note the \texttt{related} and \texttt{relatedtype} fields</bltx:annotation>
+ <bltx:indexsorttitle>Computers &amp; Typesetting</bltx:indexsorttitle>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:relatedtype>multivolume</bltx:relatedtype>
+ <bltx:sorttitle>Computers &amp; Typesetting</bltx:sorttitle>
+ <bltx:sortyear>1984-0</bltx:sortyear>
+ <bltx:title>Computers \&amp; Typesetting</bltx:title>
+ <bltx:volumes>5</bltx:volumes>
+ <bltx:date>
+ <bltx:start>1984</bltx:start>
+ <bltx:end>1986</bltx:end>
+ </bltx:date>
+ </bltx:entry>
+ <bltx:entry id="kullback" entrytype="book">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="K">Kullback</bltx:namepart>
+ <bltx:namepart type="given" initial="S">Solomon</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>New York</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>John Wiley \&amp; Sons</bltx:item>
+ </bltx:publisher>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:title>Information Theory and Statistics</bltx:title>
+ <bltx:date>1959</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="kullback:reprint" entrytype="book">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="K">Kullback</bltx:namepart>
+ <bltx:namepart type="given" initial="S">Solomon</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>New York</bltx:item>
+ </bltx:location>
+ <bltx:origpublisher>
+ <bltx:item>John Wiley \&amp; Sons</bltx:item>
+ </bltx:origpublisher>
+ <bltx:publisher>
+ <bltx:item>Dover Publications</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>A reprint of the \texttt{kullback} entry. Note the format of \texttt{origyear} and \texttt{origpublisher}. These fields are not used by the standard bibliography styles</bltx:annotation>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:title>Information Theory and Statistics</bltx:title>
+ <bltx:date>1997</bltx:date>
+ <bltx:date type="orig">1959</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="kullback:related" entrytype="book">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="K">Kullback</bltx:namepart>
+ <bltx:namepart type="given" initial="S">Solomon</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>New York</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>Dover Publications</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>A reprint of the \texttt{kullback} entry. Note the format of the \texttt{related} and \texttt{relatedtype} fields</bltx:annotation>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:relatedtype>origpubin</bltx:relatedtype>
+ <bltx:title>Information Theory and Statistics</bltx:title>
+ <bltx:date>1997</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="malinowski" entrytype="book">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="M">Malinowski</bltx:namepart>
+ <bltx:namepart type="given" initial="B">Bronis{ł}aw</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>London</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>Routledge {and} Kegan Paul</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>This is a \texttt{book} entry. Note the format of the \texttt{publisher} and \texttt{edition} fields as well as the \texttt{subtitle} field</bltx:annotation>
+ <bltx:edition>8</bltx:edition>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=british</bltx:langidopts>
+ <bltx:shorttitle>Argonauts</bltx:shorttitle>
+ <bltx:subtitle>An account of native enterprise and adventure in the Archipelagoes of {Melanesian New Guinea}</bltx:subtitle>
+ <bltx:title>Argonauts of the {Western Pacific}</bltx:title>
+ <bltx:date>1972</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="maron" entrytype="book">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="M">Maron</bltx:namepart>
+ <bltx:namepart type="given" initial="M">Monika</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:names type="translator">
+ <bltx:name>
+ <bltx:namepart type="family" initial="G">Goldstein</bltx:namepart>
+ <bltx:namepart type="given" initial="B">Brigitte</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>Lincoln</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>University of Nebraska Press</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>An English translation of a German novel with a French title. In other words: a \texttt{book} entry with a \texttt{translator} field. Note the \texttt{origlanguage} field which is concatenated with the \texttt{translator}</bltx:annotation>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:origlanguage>german</bltx:origlanguage>
+ <bltx:shorttitle>Animal Triste</bltx:shorttitle>
+ <bltx:title>Animal Triste</bltx:title>
+ <bltx:date>2000</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="massa" entrytype="book">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="M">Massa</bltx:namepart>
+ <bltx:namepart type="given" initial="W">Werner</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>Berlin</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>Spinger</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>A \texttt{book} entry with an \texttt{edition} field</bltx:annotation>
+ <bltx:edition>2</bltx:edition>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=british</bltx:langidopts>
+ <bltx:title>Crystal structure determination</bltx:title>
+ <bltx:date>2004</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="moore" entrytype="article">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="M">Moore</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="G">Gordon</bltx:namepart>
+ <bltx:namepart initial="E">E.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:journaltitle>Electronics</bltx:journaltitle>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:number>8</bltx:number>
+ <bltx:title>Cramming more components onto integrated circuits</bltx:title>
+ <bltx:volume>38</bltx:volume>
+ <bltx:pages>
+ <bltx:list>
+ <bltx:item>
+ <bltx:start>114</bltx:start>
+ <bltx:end>117</bltx:end>
+ </bltx:item>
+ </bltx:list>
+ </bltx:pages>
+ <bltx:date>1965</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="moore:related" entrytype="article">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="M">Moore</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="G">Gordon</bltx:namepart>
+ <bltx:namepart initial="E">E.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:annotation>A reprint of Moore's law. Note the \texttt{related} and \texttt{relatedtype} fields</bltx:annotation>
+ <bltx:journaltitle>Proceedings of the {IEEE}</bltx:journaltitle>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:number>1</bltx:number>
+ <bltx:relatedtype>reprintfrom</bltx:relatedtype>
+ <bltx:title>Cramming more components onto integrated circuits</bltx:title>
+ <bltx:volume>86</bltx:volume>
+ <bltx:pages>
+ <bltx:list>
+ <bltx:item>
+ <bltx:start>82</bltx:start>
+ <bltx:end>85</bltx:end>
+ </bltx:item>
+ </bltx:list>
+ </bltx:pages>
+ <bltx:date>1998</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="nietzsche:ksa" entrytype="book">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="N">Nietzsche</bltx:namepart>
+ <bltx:namepart type="given" initial="F">Friedrich</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:names type="editor">
+ <bltx:name>
+ <bltx:namepart type="family" initial="C">Colli</bltx:namepart>
+ <bltx:namepart type="given" initial="G">Giorgio</bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="M">Montinari</bltx:namepart>
+ <bltx:namepart type="given" initial="M">Mazzino</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>München</bltx:item>
+ <bltx:item>Berlin</bltx:item>
+ <bltx:item>New York</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>Deutscher Taschenbuch-Verlag</bltx:item>
+ <bltx:item>Walter de Gruyter</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>The critical edition of Nietzsche's works. This is a \texttt{book} entry referring to a 15-volume work as a whole. Note the \texttt{volumes} field and the format of the \texttt{publisher} and \texttt{location} fields in the database file. Also note the \texttt{sorttitle} and \texttt{sortyear} fields which are used to fine-tune the sorting order of the bibliography. We want this item listed first in the bibliography</bltx:annotation>
+ <bltx:edition>2</bltx:edition>
+ <bltx:indexsorttitle>Samtliche Werke</bltx:indexsorttitle>
+ <bltx:langid>german</bltx:langid>
+ <bltx:sorttitle>Werke-00-000</bltx:sorttitle>
+ <bltx:sortyear>1988-0</bltx:sortyear>
+ <bltx:subtitle>Kritische Studienausgabe</bltx:subtitle>
+ <bltx:title>Sämtliche Werke</bltx:title>
+ <bltx:volumes>15</bltx:volumes>
+ <bltx:date>1988</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="nietzsche:ksa1" entrytype="book">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="N">Nietzsche</bltx:namepart>
+ <bltx:namepart type="given" initial="F">Friedrich</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:names type="bookauthor">
+ <bltx:name>
+ <bltx:namepart type="family" initial="N">Nietzsche</bltx:namepart>
+ <bltx:namepart type="given" initial="F">Friedrich</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:names type="editor">
+ <bltx:name>
+ <bltx:namepart type="family" initial="C">Colli</bltx:namepart>
+ <bltx:namepart type="given" initial="G">Giorgio</bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="M">Montinari</bltx:namepart>
+ <bltx:namepart type="given" initial="M">Mazzino</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>München</bltx:item>
+ <bltx:item>Berlin</bltx:item>
+ <bltx:item>New York</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>Deutscher Taschenbuch-Verlag</bltx:item>
+ <bltx:item>Walter de Gruyter</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>A single volume from the critical edition of Nietzsche's works. This \texttt{book} entry explicitly refers to the first volume only. Note the \texttt{title} and \texttt{maintitle} fields. Also note the \texttt{sorttitle} and \texttt{sortyear} fields. We want this entry to be listed after the entry referring to the entire edition</bltx:annotation>
+ <bltx:edition>2</bltx:edition>
+ <bltx:indexsorttitle>Samtliche Werke I</bltx:indexsorttitle>
+ <bltx:indextitle>Sämtliche Werke I</bltx:indextitle>
+ <bltx:langid>german</bltx:langid>
+ <bltx:mainsubtitle>Kritische Studienausgabe</bltx:mainsubtitle>
+ <bltx:maintitle>Sämtliche Werke</bltx:maintitle>
+ <bltx:shorttitle>Sämtliche Werke I</bltx:shorttitle>
+ <bltx:sorttitle>Werke-01-000</bltx:sorttitle>
+ <bltx:sortyear>1988-1</bltx:sortyear>
+ <bltx:title>Die Geburt der Tragödie. Unzeitgemä{ß}e Betrachtungen I--IV. Nachgelassene Schriften 1870--1973</bltx:title>
+ <bltx:volume>1</bltx:volume>
+ <bltx:date>1988</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="nussbaum" entrytype="book">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="N">Nussbaum</bltx:namepart>
+ <bltx:namepart type="given" initial="M">Martha</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>Princeton</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>Princeton University Press</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>A \texttt{book} entry. Note the \texttt{sorttitle} and \texttt{indexsorttitle} fields and the markup of the quotes in the database file</bltx:annotation>
+ <bltx:indexsorttitle>Aristotle's De Motu Animalium</bltx:indexsorttitle>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:sorttitle>Aristotle's De Motu Animalium</bltx:sorttitle>
+ <bltx:title>Aristotle's \mkbibquote{De Motu Animalium}</bltx:title>
+ <bltx:date>1978</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="piccato" entrytype="book">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="P">Piccato</bltx:namepart>
+ <bltx:namepart type="given" initial="P">Pablo</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>Durham</bltx:item>
+ <bltx:item>London</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>Duke University Press</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>This is a \texttt{book} entry. Note the format of the \texttt{location} field in the database file</bltx:annotation>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:shorttitle>City of Suspects</bltx:shorttitle>
+ <bltx:subtitle>Crime in {Mexico City}, 1900--1931</bltx:subtitle>
+ <bltx:title>City of Suspects</bltx:title>
+ <bltx:date>2001</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="vangennep" entrytype="book">
+ <bltx:options>useprefix</bltx:options>
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="G">Gennep</bltx:namepart>
+ <bltx:namepart type="given" initial="A">Arnold</bltx:namepart>
+ <bltx:namepart type="prefix" initial="v">van</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>Paris</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>Nourry</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>A \texttt{book} entry. Note the format of the printed name and compare the \texttt{useprefix} option in the \texttt{options} field as well as \texttt{brandt} and \texttt{geer}</bltx:annotation>
+ <bltx:indextitle>Rites de passage, Les</bltx:indextitle>
+ <bltx:langid>french</bltx:langid>
+ <bltx:shorttitle>Rites de passage</bltx:shorttitle>
+ <bltx:sorttitle>Rites de passage</bltx:sorttitle>
+ <bltx:title>Les rites de passage</bltx:title>
+ <bltx:date>1909</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="vangennep:trans" entrytype="book">
+ <bltx:options>useprefix</bltx:options>
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="G">Gennep</bltx:namepart>
+ <bltx:namepart type="given" initial="A">Arnold</bltx:namepart>
+ <bltx:namepart type="prefix" initial="v">van</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:names type="translator">
+ <bltx:name>
+ <bltx:namepart type="family" initial="V">Vizedom</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="M">Monika</bltx:namepart>
+ <bltx:namepart initial="B">B.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="C">Caffee</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="G">Gabrielle</bltx:namepart>
+ <bltx:namepart initial="L">L.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:language>
+ <bltx:item>english</bltx:item>
+ </bltx:language>
+ <bltx:publisher>
+ <bltx:item>University of Chicago Press</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>A translation of the \texttt{vangennep} entry. Note the \texttt{translator} and \texttt{origlanguage} fields. Compare with the \texttt{vangennep:related} entry.</bltx:annotation>
+ <bltx:indextitle>Rites of Passage, The</bltx:indextitle>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:origlanguage>french</bltx:origlanguage>
+ <bltx:shorttitle>Rites of Passage</bltx:shorttitle>
+ <bltx:sorttitle>Rites of Passage</bltx:sorttitle>
+ <bltx:title>The Rites of Passage</bltx:title>
+ <bltx:date>1960</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="vangennep:related" entrytype="book">
+ <bltx:options>useprefix</bltx:options>
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="G">Gennep</bltx:namepart>
+ <bltx:namepart type="given" initial="A">Arnold</bltx:namepart>
+ <bltx:namepart type="prefix" initial="v">van</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>Paris</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>Nourry</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>A variant of the \texttt{vangennep} entry related to its translation. Note the format of the \texttt{related} and \texttt{relatedtype} fields</bltx:annotation>
+ <bltx:indextitle>Rites de passage, Les</bltx:indextitle>
+ <bltx:langid>french</bltx:langid>
+ <bltx:relatedtype>bytranslator</bltx:relatedtype>
+ <bltx:shorttitle>Rites de passage</bltx:shorttitle>
+ <bltx:sorttitle>Rites de passage</bltx:sorttitle>
+ <bltx:title>Les rites de passage</bltx:title>
+ <bltx:date>1909</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="vizedom:related" entrytype="book">
+ <bltx:options>usetranslator</bltx:options>
+ <bltx:names type="translator">
+ <bltx:name>
+ <bltx:namepart type="family" initial="V">Vizedom</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="M">Monika</bltx:namepart>
+ <bltx:namepart initial="B">B.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="C">Caffee</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="G">Gabrielle</bltx:namepart>
+ <bltx:namepart initial="L">L.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:language>
+ <bltx:item>english</bltx:item>
+ </bltx:language>
+ <bltx:publisher>
+ <bltx:item>University of Chicago Press</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>A translated work from \texttt{vangennep}. Note the format of the \texttt{related} and \texttt{relatedtype} fields</bltx:annotation>
+ <bltx:indextitle>Rites of Passage, The</bltx:indextitle>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:relatedtype>translationof</bltx:relatedtype>
+ <bltx:shorttitle>Rites of Passage</bltx:shorttitle>
+ <bltx:sorttitle>Rites of Passage</bltx:sorttitle>
+ <bltx:title>The Rites of Passage</bltx:title>
+ <bltx:date>1960</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="vazques-de-parga" entrytype="book">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family">
+ <bltx:namepart initial="V">Vázques{</bltx:namepart>
+ <bltx:namepart>de</bltx:namepart>
+ <bltx:namepart>}Parga</bltx:namepart>
+ </bltx:namepart>
+ <bltx:namepart type="given" initial="L">Luis</bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="L">Lacarra</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="J">José</bltx:namepart>
+ <bltx:namepart initial="M">María</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family">
+ <bltx:namepart initial="U">Uría</bltx:namepart>
+ <bltx:namepart initial="R">Ríu</bltx:namepart>
+ </bltx:namepart>
+ <bltx:namepart type="given" initial="J">Juan</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>Pamplona</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>Iberdrola</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>A multivolume book cited as a whole. This is a \texttt{book} entry with \texttt{volumes}, \texttt{note}, \texttt{sorttitle}, and \texttt{indextitle} fields</bltx:annotation>
+ <bltx:indextitle>Peregrinaciones a Santiago de Compostela, Las</bltx:indextitle>
+ <bltx:langid>spanish</bltx:langid>
+ <bltx:note>Ed. facs. de la realizada en 1948--49</bltx:note>
+ <bltx:shorttitle>Peregrinaciones</bltx:shorttitle>
+ <bltx:sorttitle>Peregrinaciones a Santiago de Compostela</bltx:sorttitle>
+ <bltx:title>Las Peregrinaciones a Santiago de Compostela</bltx:title>
+ <bltx:volumes>3</bltx:volumes>
+ <bltx:date>1993</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="wilde" entrytype="book">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="W">Wilde</bltx:namepart>
+ <bltx:namepart type="given" initial="O">Oscar</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:publisher>
+ <bltx:item>Leonard Smithers {and} Company</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>A \texttt{book} with \texttt{eprint} and \texttt{eprinttype} fields.</bltx:annotation>
+ <bltx:eprint>4HIWAAAAYAAJ</bltx:eprint>
+ <bltx:eprinttype>googlebooks</bltx:eprinttype>
+ <bltx:series>English and {American} drama of the Nineteenth Century</bltx:series>
+ <bltx:title>The Importance of Being Earnest: A Trivial Comedy for Serious People</bltx:title>
+ <bltx:date>1899</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="worman" entrytype="book">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="W">Worman</bltx:namepart>
+ <bltx:namepart type="given" initial="N">Nancy</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>Austin</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>University of Texas Press</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>A \texttt{book} entry. Note the \texttt{sorttitle} and \texttt{indextitle} fields</bltx:annotation>
+ <bltx:indextitle>Cast of Character, The</bltx:indextitle>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:shorttitle>Cast of Character</bltx:shorttitle>
+ <bltx:sorttitle>Cast of Character</bltx:sorttitle>
+ <bltx:subtitle>Style in {Greek} Literature</bltx:subtitle>
+ <bltx:title>The Cast of Character</bltx:title>
+ <bltx:date>2002</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="britannica" entrytype="collection">
+ <bltx:options>useeditor=false</bltx:options>
+ <bltx:names type="editor">
+ <bltx:name>
+ <bltx:namepart type="family" initial="P">Preece</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="W">Warren</bltx:namepart>
+ <bltx:namepart initial="E">E.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>Chicago, Ill.</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>Encyclop{æ}dia Britannica</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>This is a \texttt{collection} entry for an encyclopedia. Note the \texttt{useeditor} option in the \texttt{options} field as well as the \texttt{sorttitle} field. We want this entry to be cited and alphabetized by title even though there is an editor. In addition to that, we want the title to be alphabetized under \enquote*{E} rather than \enquote*{T}. Also note the \texttt{label} field which is provided for author-year citation styles</bltx:annotation>
+ <bltx:edition>15</bltx:edition>
+ <bltx:indextitle>{Encyclop{æ}dia Britannica}, The {New}</bltx:indextitle>
+ <bltx:label>EB</bltx:label>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=british</bltx:langidopts>
+ <bltx:shorttitle>{Encyclop{æ}dia Britannica}</bltx:shorttitle>
+ <bltx:sorttitle>Encyclop{æ}dia Britannica</bltx:sorttitle>
+ <bltx:title>The {New Encyclop{æ}dia Britannica}</bltx:title>
+ <bltx:volumes>32</bltx:volumes>
+ <bltx:date>2003</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="gaonkar" entrytype="collection">
+ <bltx:names type="editor">
+ <bltx:name>
+ <bltx:namepart type="family" initial="G">Gaonkar</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="D">Dilip</bltx:namepart>
+ <bltx:namepart initial="P">Parameshwar</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>Durham</bltx:item>
+ <bltx:item>London</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>Duke University Press</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>This is a \texttt{collection} entry. Note the format of the \texttt{location} field in the database file as well as the \texttt{isbn} field</bltx:annotation>
+ <bltx:isbn>0-822-32714-7</bltx:isbn>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:title>Alternative Modernities</bltx:title>
+ <bltx:date>2001</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="gaonkar:in" entrytype="incollection">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="G">Gaonkar</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="D">Dilip</bltx:namepart>
+ <bltx:namepart initial="P">Parameshwar</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:names type="editor">
+ <bltx:name>
+ <bltx:namepart type="family" initial="G">Gaonkar</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="D">Dilip</bltx:namepart>
+ <bltx:namepart initial="P">Parameshwar</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>Durham</bltx:item>
+ <bltx:item>London</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>Duke University Press</bltx:item>
+ </bltx:publisher>
+ <bltx:booktitle>Alternative Modernities</bltx:booktitle>
+ <bltx:isbn>0-822-32714-7</bltx:isbn>
+ <bltx:title>On Alternative Modernities</bltx:title>
+ <bltx:pages>
+ <bltx:list>
+ <bltx:item>
+ <bltx:start>1</bltx:start>
+ <bltx:end>23</bltx:end>
+ </bltx:item>
+ </bltx:list>
+ </bltx:pages>
+ <bltx:date>2001</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="jaffe" entrytype="collection">
+ <bltx:names type="editor">
+ <bltx:name>
+ <bltx:namepart type="family" initial="J">Jaffé</bltx:namepart>
+ <bltx:namepart type="given" initial="P">Philipp</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:names type="editora">
+ <bltx:name>
+ <bltx:namepart type="family" initial="L">Loewenfeld</bltx:namepart>
+ <bltx:namepart type="given" initial="S">Samuel</bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="K">Kaltenbrunner</bltx:namepart>
+ <bltx:namepart type="given" initial="F">Ferdinand</bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="E">Ewald</bltx:namepart>
+ <bltx:namepart type="given" initial="P">Paul</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>Leipzig</bltx:item>
+ </bltx:location>
+ <bltx:annotation>A \texttt{collection} entry with \texttt{edition} and \texttt{volumes} fields. Note the \texttt{editora} and \texttt{editoratype} fields</bltx:annotation>
+ <bltx:edition>2</bltx:edition>
+ <bltx:editoratype>redactor</bltx:editoratype>
+ <bltx:indextitle>Regesta Pontificum Romanorum</bltx:indextitle>
+ <bltx:langid>latin</bltx:langid>
+ <bltx:shorttitle>Regesta Pontificum Romanorum</bltx:shorttitle>
+ <bltx:title>Regesta Pontificum Romanorum ab condita ecclesia ad annum post Christum natum \textsc{mcxcviii}</bltx:title>
+ <bltx:volumes>2</bltx:volumes>
+ <bltx:date>
+ <bltx:start>1885</bltx:start>
+ <bltx:end>1888</bltx:end>
+ </bltx:date>
+ </bltx:entry>
+ <bltx:entry id="westfahl:frontier" entrytype="collection">
+ <bltx:names type="editor">
+ <bltx:name>
+ <bltx:namepart type="family" initial="W">Westfahl</bltx:namepart>
+ <bltx:namepart type="given" initial="G">Gary</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>Westport, Conn.</bltx:item>
+ <bltx:item>London</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>Greenwood</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>This is a \texttt{collection} entry. Note the format of the \texttt{location} field as well as the \texttt{subtitle} and \texttt{booksubtitle} fields</bltx:annotation>
+ <bltx:booksubtitle>The Frontier Theme in Science Fiction</bltx:booksubtitle>
+ <bltx:booktitle>Space and Beyond</bltx:booktitle>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:subtitle>The Frontier Theme in Science Fiction</bltx:subtitle>
+ <bltx:title>Space and Beyond</bltx:title>
+ <bltx:date>2000</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="kant:kpv" entrytype="inbook">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="K">Kant</bltx:namepart>
+ <bltx:namepart type="given" initial="I">Immanuel</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:names type="bookauthor">
+ <bltx:name>
+ <bltx:namepart type="family" initial="K">Kant</bltx:namepart>
+ <bltx:namepart type="given" initial="I">Immanuel</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>Berlin</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>Walter de Gruyter</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>An edition of Kant's \emph{Collected Works}, volume five. This is an \texttt{inbook} entry which explicitly refers to the \emph{Critique of Practical Reason} only, not to the entire fifth volume. Note the \texttt{author} and \texttt{bookauthor} fields in the database file. By default, the \texttt{bookauthor} is omitted if the values of the \texttt{author} and \texttt{bookauthor} fields are identical</bltx:annotation>
+ <bltx:booktitle>Kritik der praktischen Vernunft. Kritik der Urtheilskraft</bltx:booktitle>
+ <bltx:langid>german</bltx:langid>
+ <bltx:maintitle>Kants Werke. Akademie Textausgabe</bltx:maintitle>
+ <bltx:shorthand>KpV</bltx:shorthand>
+ <bltx:shorttitle>Kritik der praktischen Vernunft</bltx:shorttitle>
+ <bltx:title>Kritik der praktischen Vernunft</bltx:title>
+ <bltx:volume>5</bltx:volume>
+ <bltx:pages>
+ <bltx:list>
+ <bltx:item>
+ <bltx:start>1</bltx:start>
+ <bltx:end>163</bltx:end>
+ </bltx:item>
+ </bltx:list>
+ </bltx:pages>
+ <bltx:date>1968</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="kant:ku" entrytype="inbook">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="K">Kant</bltx:namepart>
+ <bltx:namepart type="given" initial="I">Immanuel</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:names type="bookauthor">
+ <bltx:name>
+ <bltx:namepart type="family" initial="K">Kant</bltx:namepart>
+ <bltx:namepart type="given" initial="I">Immanuel</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>Berlin</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>Walter de Gruyter</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>An edition of Kant's \emph{Collected Works}, volume five. This is an \texttt{inbook} entry which explicitly refers to the \emph{Critique of Judgment} only, not to the entire fifth volume</bltx:annotation>
+ <bltx:booktitle>Kritik der praktischen Vernunft. Kritik der Urtheilskraft</bltx:booktitle>
+ <bltx:langid>german</bltx:langid>
+ <bltx:maintitle>Kants Werke. Akademie Textausgabe</bltx:maintitle>
+ <bltx:shorthand>KU</bltx:shorthand>
+ <bltx:title>Kritik der Urtheilskraft</bltx:title>
+ <bltx:volume>5</bltx:volume>
+ <bltx:pages>
+ <bltx:list>
+ <bltx:item>
+ <bltx:start>165</bltx:start>
+ <bltx:end>485</bltx:end>
+ </bltx:item>
+ </bltx:list>
+ </bltx:pages>
+ <bltx:date>1968</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="nietzsche:historie" entrytype="inbook">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="N">Nietzsche</bltx:namepart>
+ <bltx:namepart type="given" initial="F">Friedrich</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:names type="bookauthor">
+ <bltx:name>
+ <bltx:namepart type="family" initial="N">Nietzsche</bltx:namepart>
+ <bltx:namepart type="given" initial="F">Friedrich</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:names type="editor">
+ <bltx:name>
+ <bltx:namepart type="family" initial="C">Colli</bltx:namepart>
+ <bltx:namepart type="given" initial="G">Giorgio</bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="M">Montinari</bltx:namepart>
+ <bltx:namepart type="given" initial="M">Mazzino</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>München</bltx:item>
+ <bltx:item>Berlin</bltx:item>
+ <bltx:item>New York</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>Deutscher Taschenbuch-Verlag</bltx:item>
+ <bltx:item>Walter de Gruyter</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>A single essay from the critical edition of Nietzsche's works. This \texttt{inbook} entry explicitly refers to an essay found in the first volume. Note the \texttt{title}, \texttt{booktitle}, and \texttt{maintitle} fields. Also note the \texttt{sorttitle} and \texttt{sortyear} fields. We want this entry to be listed after the entry referring to the entire first volume</bltx:annotation>
+ <bltx:booktitle>Die Geburt der Tragödie. Unzeitgemä{ß}e Betrachtungen I--IV. Nachgelassene Schriften 1870--1973</bltx:booktitle>
+ <bltx:indexsorttitle>Vom Nutzen und Nachtheil der Historie fur das Leben</bltx:indexsorttitle>
+ <bltx:indextitle>Vom Nutzen und Nachtheil der Historie für das Leben</bltx:indextitle>
+ <bltx:langid>german</bltx:langid>
+ <bltx:mainsubtitle>Kritische Studienausgabe</bltx:mainsubtitle>
+ <bltx:maintitle>Sämtliche Werke</bltx:maintitle>
+ <bltx:shorttitle>Vom Nutzen und Nachtheil der Historie</bltx:shorttitle>
+ <bltx:sorttitle>Werke-01-243</bltx:sorttitle>
+ <bltx:sortyear>1988-2</bltx:sortyear>
+ <bltx:subtitle>Vom Nutzen und Nachtheil der Historie für das Leben</bltx:subtitle>
+ <bltx:title>Unzeitgemässe Betrachtungen. Zweites Stück</bltx:title>
+ <bltx:volume>1</bltx:volume>
+ <bltx:pages>
+ <bltx:list>
+ <bltx:item>
+ <bltx:start>243</bltx:start>
+ <bltx:end>334</bltx:end>
+ </bltx:item>
+ </bltx:list>
+ </bltx:pages>
+ <bltx:date>1988</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="brandt" entrytype="incollection">
+ <bltx:options>useprefix=false</bltx:options>
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="B">Brandt</bltx:namepart>
+ <bltx:namepart type="given" initial="A">Ahasver</bltx:namepart>
+ <bltx:namepart type="prefix" initial="v">von</bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="H">Hoffmann</bltx:namepart>
+ <bltx:namepart type="given" initial="E">Erich</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:names type="editor">
+ <bltx:name>
+ <bltx:namepart type="family" initial="S">Seibt</bltx:namepart>
+ <bltx:namepart type="given" initial="F">Ferdinand</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>Stuttgart</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>Klett-Cotta</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>An \texttt{incollection} entry with a \texttt{series} and a \texttt{number}. Note the format of the printed name and compare the \texttt{useprefix} option in the \texttt{options} field as well as \texttt{vangennep}. Also note the \texttt{indextitle, and \texttt{indexsorttitle} fields}</bltx:annotation>
+ <bltx:booktitle>Europa im Hoch- und Spätmittelalter</bltx:booktitle>
+ <bltx:indexsorttitle>Nordischen Lander von der Mitte des 11. Jahrhunderts bis 1448</bltx:indexsorttitle>
+ <bltx:indextitle>Nordischen Länder von der Mitte des 11.~Jahrhunderts bis 1448, Die</bltx:indextitle>
+ <bltx:langid>german</bltx:langid>
+ <bltx:number>2</bltx:number>
+ <bltx:series>Handbuch der europäischen Geschichte</bltx:series>
+ <bltx:shorttitle>Die nordischen Länder</bltx:shorttitle>
+ <bltx:title>Die nordischen Länder von der Mitte des 11.~Jahrhunderts bis 1448</bltx:title>
+ <bltx:pages>
+ <bltx:list>
+ <bltx:item>
+ <bltx:start>884</bltx:start>
+ <bltx:end>917</bltx:end>
+ </bltx:item>
+ </bltx:list>
+ </bltx:pages>
+ <bltx:date>1987</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="hyman" entrytype="incollection">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="H">Hyman</bltx:namepart>
+ <bltx:namepart type="given" initial="A">Arthur</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:names type="editor">
+ <bltx:name>
+ <bltx:namepart type="family" initial="O">O'Meara</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="D">Dominic</bltx:namepart>
+ <bltx:namepart initial="J">J.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>Washington, D.C.</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>The Catholic University of America Press</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>An \texttt{incollection} entry with a \texttt{series} and \texttt{number} field</bltx:annotation>
+ <bltx:booktitle>Studies in {Aristotle}</bltx:booktitle>
+ <bltx:indextitle>Aristotle's Theory of the Intellect</bltx:indextitle>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:number>9</bltx:number>
+ <bltx:series>Studies in Philosophy and the History of Philosophy</bltx:series>
+ <bltx:shorttitle>Aristotle's Theory of the Intellect</bltx:shorttitle>
+ <bltx:title>Aristotle's Theory of the Intellect and its Interpretation by {Averroes}</bltx:title>
+ <bltx:pages>
+ <bltx:list>
+ <bltx:item>
+ <bltx:start>161</bltx:start>
+ <bltx:end>191</bltx:end>
+ </bltx:item>
+ </bltx:list>
+ </bltx:pages>
+ <bltx:date>1981</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="pines" entrytype="incollection">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="P">Pines</bltx:namepart>
+ <bltx:namepart type="given" initial="S">Shlomo</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:names type="editor">
+ <bltx:name>
+ <bltx:namepart type="family" initial="T">Twersky</bltx:namepart>
+ <bltx:namepart type="given" initial="I">Isadore</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>Cambridge, Mass.</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>Harvard University Press</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>A typical \texttt{incollection} entry. Note the \texttt{indextitle} field</bltx:annotation>
+ <bltx:booktitle>Studies in Medieval {Jewish} History and Literature</bltx:booktitle>
+ <bltx:indextitle>Limitations of Human Knowledge According to {Al-Farabi}, {ibn Bajja}, and {Maimonides}, The</bltx:indextitle>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:shorttitle>Limitations of Human Knowledge</bltx:shorttitle>
+ <bltx:title>The Limitations of Human Knowledge According to {Al-Farabi}, {ibn Bajja}, and {Maimonides}</bltx:title>
+ <bltx:pages>
+ <bltx:list>
+ <bltx:item>
+ <bltx:start>82</bltx:start>
+ <bltx:end>109</bltx:end>
+ </bltx:item>
+ </bltx:list>
+ </bltx:pages>
+ <bltx:date>1979</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="moraux" entrytype="inproceedings">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="M">Moraux</bltx:namepart>
+ <bltx:namepart type="given" initial="P">Paul</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:names type="editor">
+ <bltx:name>
+ <bltx:namepart type="family" initial="L">Lloyd</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="G">G.</bltx:namepart>
+ <bltx:namepart initial="E">E.</bltx:namepart>
+ <bltx:namepart initial="R">R.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="O">Owen</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="G">G.</bltx:namepart>
+ <bltx:namepart initial="E">E.</bltx:namepart>
+ <bltx:namepart initial="L">L.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>Cambridge</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>Cambridge University Press</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>This is a typical \texttt{inproceedings} entry. Note the \texttt{booksubtitle}, \texttt{shorttitle}, \texttt{indextitle}, and \texttt{indexsorttitle} fields. Also note the \texttt{eventdate} field.</bltx:annotation>
+ <bltx:booktitle>Aristotle on Mind and the Senses</bltx:booktitle>
+ <bltx:booktitleaddon>Proceedings of the Seventh Symposium Aristotelicum</bltx:booktitleaddon>
+ <bltx:indexsorttitle>De Anima dans la tradition grecque</bltx:indexsorttitle>
+ <bltx:indextitle>\emph{De Anima} dans la tradition grècque, Le</bltx:indextitle>
+ <bltx:langid>french</bltx:langid>
+ <bltx:shorttitle>\emph{De Anima} dans la tradition grècque</bltx:shorttitle>
+ <bltx:subtitle>Quelques aspects de l'interpretation du traité, de Theophraste à Themistius</bltx:subtitle>
+ <bltx:title>Le \emph{De Anima} dans la tradition grècque</bltx:title>
+ <bltx:pages>
+ <bltx:list>
+ <bltx:item>
+ <bltx:start>281</bltx:start>
+ <bltx:end>324</bltx:end>
+ </bltx:item>
+ </bltx:list>
+ </bltx:pages>
+ <bltx:date>1979</bltx:date>
+ <bltx:date type="event">1975</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="salam" entrytype="inproceedings">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="S">Salam</bltx:namepart>
+ <bltx:namepart type="given" initial="A">Abdus</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:names type="editor">
+ <bltx:name>
+ <bltx:namepart type="family" initial="S">Svartholm</bltx:namepart>
+ <bltx:namepart type="given" initial="N">Nils</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>Stockholm</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>Almquist \&amp; Wiksell</bltx:item>
+ </bltx:publisher>
+ <bltx:booksubtitle>Relativistic groups and analyticity</bltx:booksubtitle>
+ <bltx:booktitle>Elementary particle theory</bltx:booktitle>
+ <bltx:booktitleaddon>Proceedings of the {Eighth Nobel Symposium}</bltx:booktitleaddon>
+ <bltx:title>Weak and Electromagnetic Interactions</bltx:title>
+ <bltx:venue>Aspenäsgarden, Lerum</bltx:venue>
+ <bltx:pages>
+ <bltx:list>
+ <bltx:item>
+ <bltx:start>367</bltx:start>
+ <bltx:end>377</bltx:end>
+ </bltx:item>
+ </bltx:list>
+ </bltx:pages>
+ <bltx:date>1968</bltx:date>
+ <bltx:date type="event">
+ <bltx:start>1968-05-19</bltx:start>
+ <bltx:end>1968-05-25</bltx:end>
+ </bltx:date>
+ </bltx:entry>
+ <bltx:entry id="cms" entrytype="manual">
+ <bltx:location>
+ <bltx:item>Chicago, Ill.</bltx:item>
+ </bltx:location>
+ <bltx:publisher>
+ <bltx:item>University of Chicago Press</bltx:item>
+ </bltx:publisher>
+ <bltx:annotation>This is a \texttt{manual} entry without an \texttt{author} or \texttt{editor}. Note the \texttt{label} field in the database file which is provided for author-year citation styles. Also note the \texttt{sorttitle} and \texttt{indextitle} fields. By default, all entries without an \texttt{author} or \texttt{editor} are alphabetized by \texttt{title} but we want this entry to be alphabetized under \enquote*{C} rather than \enquote*{T}. There's also an \texttt{isbn} field</bltx:annotation>
+ <bltx:edition>15</bltx:edition>
+ <bltx:indextitle>Chicago Manual of Style, The</bltx:indextitle>
+ <bltx:isbn>0-226-10403-6</bltx:isbn>
+ <bltx:label>CMS</bltx:label>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:shorttitle>Chicago Manual of Style</bltx:shorttitle>
+ <bltx:sorttitle>Chicago Manual of Style</bltx:sorttitle>
+ <bltx:subtitle>The Essential Guide for Writers, Editors, and Publishers</bltx:subtitle>
+ <bltx:title>The {Chicago} Manual of Style</bltx:title>
+ <bltx:date>2003</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="baez/online" entrytype="online">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="B">Baez</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="J">John</bltx:namepart>
+ <bltx:namepart initial="C">C.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="L">Lauda</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="A">Aaron</bltx:namepart>
+ <bltx:namepart initial="D">D.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:annotation>An \texttt{online} reference from arXiv. Note the \texttt{eprint} and \texttt{eprinttype} fields. Compare \texttt{baez\slash article} which is the same item given as an \texttt{article} entry with eprint information</bltx:annotation>
+ <bltx:eprint>math/0307200v3</bltx:eprint>
+ <bltx:eprinttype>arxiv</bltx:eprinttype>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:title>Higher-Dimensional Algebra {V}: 2-Groups</bltx:title>
+ <bltx:version>3</bltx:version>
+ <bltx:date>2004-10-27</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="ctan" entrytype="online">
+ <bltx:annotation>This is an \texttt{online} entry. The \textsc{url}, which is given in the \texttt{url} field, is transformed into a clickable link if \texttt{hyperref} support has been enabled. Note the format of the \texttt{urldate} field (\texttt{yyyy-mm-dd}) in the database file. Also note the \texttt{label} field which may be used as a fallback by citation styles which need an \texttt{author} and\slash or a \texttt{year}</bltx:annotation>
+ <bltx:label>CTAN</bltx:label>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:subtitle>The {Comprehensive TeX Archive Network}</bltx:subtitle>
+ <bltx:title>CTAN</bltx:title>
+ <bltx:url>http://www.ctan.org</bltx:url>
+ <bltx:date>2006</bltx:date>
+ <bltx:date type="url">2006-10-01</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="itzhaki" entrytype="online">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="I">Itzhaki</bltx:namepart>
+ <bltx:namepart type="given" initial="N">Nissan</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:abstract>We discuss the limitations of 't Hooft's proposal for the black hole S-matrix. We find that the validity of the S-matrix implies violation of the semi-classical approximation at scales large compared to the Planck scale. We also show that the effect of the centrifugal barrier on the S-matrix is crucial even for large transverse distances.</bltx:abstract>
+ <bltx:annotation>An \texttt{online} reference from arXiv. Note the \texttt{eprint} and \texttt{eprinttype} fields. Also note that the arXiv reference is transformed into a clickable link if \texttt{hyperref} support has been enabled</bltx:annotation>
+ <bltx:eprint>hep-th/9603067</bltx:eprint>
+ <bltx:eprinttype>arxiv</bltx:eprinttype>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:title>Some remarks on {'t Hooft's} {S}-matrix for black holes</bltx:title>
+ <bltx:version>1</bltx:version>
+ <bltx:date>1996-03-11</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="markey" entrytype="online">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="M">Markey</bltx:namepart>
+ <bltx:namepart type="given" initial="N">Nicolas</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:annotation>An \texttt{online} entry for a tutorial. Note the format of the \texttt{date} field (\texttt{yyyy-mm-dd}) in the database file.</bltx:annotation>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:sorttitle>Tame the Beast</bltx:sorttitle>
+ <bltx:subtitle>The {B} to {X} of {BibTeX}</bltx:subtitle>
+ <bltx:title>Tame the {BeaST}</bltx:title>
+ <bltx:url>http://mirror.ctan.org/info/bibtex/tamethebeast/ttb_en.pdf</bltx:url>
+ <bltx:version>1.3</bltx:version>
+ <bltx:date>2005-10-16</bltx:date>
+ <bltx:date type="url">2006-10-01</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="wassenberg" entrytype="online">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="W">Wassenberg</bltx:namepart>
+ <bltx:namepart type="given" initial="J">Jan</bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="S">Sanders</bltx:namepart>
+ <bltx:namepart type="given" initial="P">Peter</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:abstract>Sorting algorithms are the deciding factor for the performance of common operations such as removal of duplicates or database sort-merge joins. This work focuses on 32-bit integer keys, optionally paired with a 32-bit value. We present a fast radix sorting algorithm that builds upon a microarchitecture-aware variant of counting sort</bltx:abstract>
+ <bltx:annotation>A recent \texttt{online} reference from arXiv using the new (April 2007 onward) identifier format. Note the \texttt{eprint}, \texttt{eprinttype}, and \texttt{eprintclass} fields. Also note that the arXiv reference is transformed into a clickable link if \texttt{hyperref} support has been enabled</bltx:annotation>
+ <bltx:eprint>1008.2849v1</bltx:eprint>
+ <bltx:eprintclass>cs.DS</bltx:eprintclass>
+ <bltx:eprinttype>arxiv</bltx:eprinttype>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:title>Faster Radix Sort via Virtual Memory and Write-Combining</bltx:title>
+ <bltx:version>1</bltx:version>
+ <bltx:date>2010-08-17</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="almendro" entrytype="patent">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="A">Almendro</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="J">José</bltx:namepart>
+ <bltx:namepart initial="L">L.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="M">Martín</bltx:namepart>
+ <bltx:namepart type="given" initial="J">Jacinto</bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="S">Sánchez</bltx:namepart>
+ <bltx:namepart type="given" initial="A">Alberto</bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="N">Nozal</bltx:namepart>
+ <bltx:namepart type="given" initial="F">Fernando</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:location>
+ <bltx:item>countryfr</bltx:item>
+ <bltx:item>countryuk</bltx:item>
+ <bltx:item>countryde</bltx:item>
+ </bltx:location>
+ <bltx:annotation>This is a \texttt{patent} entry with a \texttt{location} field. The number is given in the \texttt{number} field. Note the format of the \texttt{location} field in the database file. Compare \texttt{laufenberg}, \texttt{sorace}, and \texttt{kowalik}</bltx:annotation>
+ <bltx:langid>german</bltx:langid>
+ <bltx:number>EU-29702195U</bltx:number>
+ <bltx:title>Elektromagnetisches Signalhorn</bltx:title>
+ <bltx:date>1998</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="kowalik" entrytype="patent">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="K">Kowalik</bltx:namepart>
+ <bltx:namepart type="given" initial="F">F.</bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="I">Isard</bltx:namepart>
+ <bltx:namepart type="given" initial="M">M.</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:annotation>This is a \texttt{patent} entry for a French patent request with a full date. The number is given in the \texttt{number} field. Note the format of the \texttt{type} and \texttt{date} fields in the database file. Compare \texttt{almendro}, \texttt{laufenberg}, and \texttt{sorace}</bltx:annotation>
+ <bltx:indextitle>Estimateur d'un défaut de fonctionnement</bltx:indextitle>
+ <bltx:langid>french</bltx:langid>
+ <bltx:number>9500261</bltx:number>
+ <bltx:title>Estimateur d'un défaut de fonctionnement d'un modulateur en quadrature et étage de modulation l'utilisant</bltx:title>
+ <bltx:type>patreqfr</bltx:type>
+ <bltx:date>1995-01-11</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="laufenberg" entrytype="patent">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="L">Laufenberg</bltx:namepart>
+ <bltx:namepart type="given" initial="X">Xaver</bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="E">Eynius</bltx:namepart>
+ <bltx:namepart type="given" initial="D">Dominique</bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="S">Suelzle</bltx:namepart>
+ <bltx:namepart type="given" initial="H">Helmut</bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="U">Usbeck</bltx:namepart>
+ <bltx:namepart type="given" initial="S">Stephan</bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="S">Spaeth</bltx:namepart>
+ <bltx:namepart type="given" initial="M">Matthias</bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="N-H">Neuser-Hoffmann</bltx:namepart>
+ <bltx:namepart type="given" initial="M">Miriam</bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="M">Myrzik</bltx:namepart>
+ <bltx:namepart type="given" initial="C">Christian</bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="S">Schmid</bltx:namepart>
+ <bltx:namepart type="given" initial="M">Manfred</bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="N">Nietfeld</bltx:namepart>
+ <bltx:namepart type="given" initial="F">Franz</bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="T">Thiel</bltx:namepart>
+ <bltx:namepart type="given" initial="A">Alexander</bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="B">Braun</bltx:namepart>
+ <bltx:namepart type="given" initial="H">Harald</bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="E">Ebner</bltx:namepart>
+ <bltx:namepart type="given" initial="N">Norbert</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:names type="holder">
+ <bltx:name>
+ <bltx:namepart type="family">
+ <bltx:namepart initial="R">Robert</bltx:namepart>
+ <bltx:namepart>Bosch</bltx:namepart>
+ <bltx:namepart>GmbH</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family">
+ <bltx:namepart initial="D">Daimler</bltx:namepart>
+ <bltx:namepart>Chrysler</bltx:namepart>
+ <bltx:namepart>AG</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family">
+ <bltx:namepart initial="B">Bayerische</bltx:namepart>
+ <bltx:namepart>Motoren</bltx:namepart>
+ <bltx:namepart>Werke</bltx:namepart>
+ <bltx:namepart>AG</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:abstract>The invention relates to an electric device comprising a generator, in particular for use in the vehicle electric system of a motor vehicle and a controller for controlling the generator voltage. The device is equipped with a control zone, in which the voltage is controlled and zones, in which the torque is controlled. The invention also relates to methods for operating a device of this type.</bltx:abstract>
+ <bltx:annotation>This is a \texttt{patent} entry with a \texttt{holder} field. Note the format of the \texttt{type} and \texttt{location} fields in the database file. Compare \texttt{almendro}, \texttt{sorace}, and \texttt{kowalik}</bltx:annotation>
+ <bltx:file>http://v3.espacenet.com/textdoc?IDX=EP1700367</bltx:file>
+ <bltx:langid>german</bltx:langid>
+ <bltx:number>1700367</bltx:number>
+ <bltx:title>Elektrische Einrichtung und Betriebsverfahren</bltx:title>
+ <bltx:type>patenteu</bltx:type>
+ <bltx:date>2006-09-13</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="sorace" entrytype="patent">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="S">Sorace</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="R">Ronald</bltx:namepart>
+ <bltx:namepart initial="E">E.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="R">Reinhardt</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="V">Victor</bltx:namepart>
+ <bltx:namepart initial="S">S.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="V">Vaughn</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="S">Steven</bltx:namepart>
+ <bltx:namepart initial="A">A.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:names type="holder">
+ <bltx:name>
+ <bltx:namepart type="family">
+ <bltx:namepart initial="H">Hughes</bltx:namepart>
+ <bltx:namepart>Aircraft</bltx:namepart>
+ <bltx:namepart>Company</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:annotation>This is a \texttt{patent} entry with a \texttt{holder} field. Note the format of the \texttt{type} and \texttt{date} fields in the database file. Compare \texttt{almendro}, \texttt{laufenberg}, and \texttt{kowalik}</bltx:annotation>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:number>5668842</bltx:number>
+ <bltx:title>High-Speed Digital-to-{RF} Converter</bltx:title>
+ <bltx:type>patentus</bltx:type>
+ <bltx:date>1997-09-16</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="jcg" entrytype="periodical">
+ <bltx:annotation>This is a \texttt{periodical} entry with an \texttt{issn} field.</bltx:annotation>
+ <bltx:issn>0097-8493</bltx:issn>
+ <bltx:issuetitle>Semantic {3D} Media and Content</bltx:issuetitle>
+ <bltx:number>4</bltx:number>
+ <bltx:title>Computers and Graphics</bltx:title>
+ <bltx:volume>35</bltx:volume>
+ <bltx:date>2011</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="chiu" entrytype="report">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="C">Chiu</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="W">Willy</bltx:namepart>
+ <bltx:namepart initial="W">W.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="C">Chow</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="W">We</bltx:namepart>
+ <bltx:namepart initial="M">Min</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:institution>
+ <bltx:item>IBM</bltx:item>
+ </bltx:institution>
+ <bltx:annotation>This is a \texttt{report} entry for a research report. Note the format of the \texttt{type} field in the database file which uses a localization key. The number of the report is given in the \texttt{number} field. Also note the \texttt{sorttitle} and \texttt{indextitle} fields</bltx:annotation>
+ <bltx:indextitle>Hybrid Hierarchical Model, A</bltx:indextitle>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:number>RC-6947</bltx:number>
+ <bltx:sorttitle>Hybrid Hierarchical Model of a Multiple Virtual Storage (MVS) Operating System</bltx:sorttitle>
+ <bltx:title>A Hybrid Hierarchical Model of a {Multiple Virtual Storage} ({MVS}) Operating System</bltx:title>
+ <bltx:type>resreport</bltx:type>
+ <bltx:date>1978</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="padhye" entrytype="report">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="P">Padhye</bltx:namepart>
+ <bltx:namepart type="given" initial="J">Jitendra</bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="F">Firoiu</bltx:namepart>
+ <bltx:namepart type="given" initial="V">Victor</bltx:namepart>
+ </bltx:name>
+ <bltx:name>
+ <bltx:namepart type="family" initial="T">Towsley</bltx:namepart>
+ <bltx:namepart type="given" initial="D">Don</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:institution>
+ <bltx:item>University of Massachusetts</bltx:item>
+ </bltx:institution>
+ <bltx:location>
+ <bltx:item>Amherst, Mass.</bltx:item>
+ </bltx:location>
+ <bltx:abstract>The steady state performance of a bulk transfer TCP flow (i.e. a flow with a large amount of data to send, such as FTP transfers) may be characterized by three quantities. The first is the send rate, which is the amount of data sent by the sender in unit time. The second is the throughput, which is the amount of data received by the receiver in unit time. Note that the throughput will always be less than or equal to the send rate due to losses. Finally, the number of non-duplicate packets received by the receiver in unit time gives us the goodput of the connection. The goodput is always less than or equal to the throughput, since the receiver may receive two copies of the same packet due to retransmissions by the sender. In a previous paper, we presented a simple model for predicting the steady state send rate of a bulk transfer TCP flow as a function of loss rate and round trip time. In this paper, we extend that work in two ways. First, we analyze the performance of bulk transfer TCP flows using more precise, stochastic analysis. Second, we build upon the previous analysis to provide both an approximate formula as well as a more accurate stochastic model for the steady state throughput of a bulk transfer TCP flow.</bltx:abstract>
+ <bltx:annotation>This is a \texttt{report} entry for a technical report. Note the format of the \texttt{type} field in the database file which uses a localization key. The number of the report is given in the \texttt{number} field. Also note the \texttt{sorttitle} and \texttt{indextitle} fields</bltx:annotation>
+ <bltx:file>ftp://gaia.cs.umass.edu/pub/Padhey99-markov.ps</bltx:file>
+ <bltx:indextitle>Stochastic Model of {TCP Reno} Congestion Avoidance and Control, A</bltx:indextitle>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:number>99-02</bltx:number>
+ <bltx:sorttitle>A Stochastic Model of TCP Reno Congestion Avoidance and Control</bltx:sorttitle>
+ <bltx:title>A Stochastic Model of {TCP Reno} Congestion Avoidance and Control</bltx:title>
+ <bltx:type>techreport</bltx:type>
+ <bltx:date>1999</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="geer" entrytype="thesis">
+ <bltx:options>useprefix=false</bltx:options>
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="G">Geer</bltx:namepart>
+ <bltx:namepart type="given" initial="I">Ingrid</bltx:namepart>
+ <bltx:namepart type="prefix" initial="d">de</bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:institution>
+ <bltx:item>Uppsala Universitet</bltx:item>
+ </bltx:institution>
+ <bltx:location>
+ <bltx:item>Uppsala</bltx:item>
+ </bltx:location>
+ <bltx:annotation>This is a typical \texttt{thesis} entry for a PhD thesis. Note the \texttt{type} field in the database file which uses a localization key. Also note the format of the printed name and compare the \texttt{useprefix} option in the \texttt{options} field as well as \texttt{vangennep}</bltx:annotation>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=british</bltx:langidopts>
+ <bltx:subtitle>The {Orkney Earldom} of the Twelfth Century. {A} Musicological Study</bltx:subtitle>
+ <bltx:title>Earl, Saint, Bishop, Skald~-- and Music</bltx:title>
+ <bltx:type>phdthesis</bltx:type>
+ <bltx:date>1985</bltx:date>
+ </bltx:entry>
+ <bltx:entry id="loh" entrytype="thesis">
+ <bltx:names type="author">
+ <bltx:name>
+ <bltx:namepart type="family" initial="L">Loh</bltx:namepart>
+ <bltx:namepart type="given">
+ <bltx:namepart initial="N">Nin</bltx:namepart>
+ <bltx:namepart initial="C">C.</bltx:namepart>
+ </bltx:namepart>
+ </bltx:name>
+ </bltx:names>
+ <bltx:institution>
+ <bltx:item>Massachusetts Institute of Technology</bltx:item>
+ </bltx:institution>
+ <bltx:location>
+ <bltx:item>Cambridge, Mass.</bltx:item>
+ </bltx:location>
+ <bltx:annotation>This is a typical \texttt{thesis} entry for an MA thesis. Note the \texttt{type} field in the database file which uses a localization key</bltx:annotation>
+ <bltx:langid>english</bltx:langid>
+ <bltx:langidopts>variant=american</bltx:langidopts>
+ <bltx:title>High-Resolution Micromachined Interferometric Accelerometer</bltx:title>
+ <bltx:type>mathesis</bltx:type>
+ <bltx:date>1992</bltx:date>
+ </bltx:entry>
+</bltx:entries>
diff --git a/macros/latex/contrib/biblatex-ms/latex/bbx/alphabetic-ms.bbx b/macros/latex/contrib/biblatex-ms/latex/bbx/alphabetic-ms.bbx
new file mode 100644
index 0000000000..17a44b81cf
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/bbx/alphabetic-ms.bbx
@@ -0,0 +1,60 @@
+\ProvidesFile{alphabetic-ms.bbx}
+[\abx@bbxid]
+
+\RequireBibliographyStyle{standard}
+\ExecuteBibliographyOptions{labelalpha,sorting=anyt}
+
+\providebool{bbx:subentry}
+
+\DeclareBiblatexOption{global,type,entry}[boolean]{subentry}[true]{%
+ \setbool{bbx:subentry}{#1}}
+
+\DeclareNameAlias{author}{default}
+\DeclareNameAlias{editor}{default}
+\DeclareNameAlias{translator}{default}
+
+\DeclareFieldFormat{bibentrysetcount}{\mkbibparens{\mknumalph{#1}}}
+\DeclareFieldFormat{labelalphawidth}{\mkbibbrackets{#1}}
+\DeclareFieldFormat{shorthandwidth}{\mkbibbrackets{#1}}
+
+\defbibenvironment{bibliography}
+ {\list
+ {\printtext[labelalphawidth]{%
+ \printfield{labelprefix}%
+ \printfield{labelalpha}%
+ \printfield{extraalpha}}}
+ {\setlength{\labelwidth}{\labelalphawidth}%
+ \setlength{\leftmargin}{\labelwidth}%
+ \setlength{\labelsep}{\biblabelsep}%
+ \addtolength{\leftmargin}{\labelsep}%
+ \setlength{\itemsep}{\bibitemsep}%
+ \setlength{\parsep}{\bibparsep}}%
+ \renewcommand*{\makelabel}[1]{##1\hss}}
+ {\endlist}
+ {\item}
+
+\defbibenvironment{shorthand}
+ {\list
+ {\printfield[shorthandwidth]{shorthand}}
+ {\setlength{\labelwidth}{\shorthandwidth}%
+ \setlength{\leftmargin}{\labelwidth}%
+ \setlength{\labelsep}{\biblabelsep}%
+ \addtolength{\leftmargin}{\labelsep}%
+ \setlength{\itemsep}{\bibitemsep}%
+ \setlength{\parsep}{\bibparsep}%
+ \renewcommand*{\makelabel}[1]{##1\hss}}}
+ {\endlist}
+ {\item}
+
+\DeclareBibliographyDriver{set}{%
+ \entryset
+ {\ifbool{bbx:subentry}
+ {\printfield[bibentrysetcount]{entrysetcount}%
+ \printunit*{\addnbspace}}
+ {}}
+ {}%
+ \newunit\newblock
+ \usebibmacro{setpageref}%
+ \finentry}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/bbx/alphabetic-verb-ms.bbx b/macros/latex/contrib/biblatex-ms/latex/bbx/alphabetic-verb-ms.bbx
new file mode 100644
index 0000000000..0ba5ad6a2b
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/bbx/alphabetic-verb-ms.bbx
@@ -0,0 +1,6 @@
+\ProvidesFile{alphabetic-verb-ms.bbx}
+[\abx@bbxid]
+
+\RequireBibliographyStyle{alphabetic}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/bbx/authortitle-comp-ms.bbx b/macros/latex/contrib/biblatex-ms/latex/bbx/authortitle-comp-ms.bbx
new file mode 100644
index 0000000000..614ac9de83
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/bbx/authortitle-comp-ms.bbx
@@ -0,0 +1,6 @@
+\ProvidesFile{authortitle-comp-ms.bbx}
+[\abx@bbxid]
+
+\RequireBibliographyStyle{authortitle}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/bbx/authortitle-ibid-ms.bbx b/macros/latex/contrib/biblatex-ms/latex/bbx/authortitle-ibid-ms.bbx
new file mode 100644
index 0000000000..0f9048018a
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/bbx/authortitle-ibid-ms.bbx
@@ -0,0 +1,6 @@
+\ProvidesFile{authortitle-ibid-ms.bbx}
+[\abx@bbxid]
+
+\RequireBibliographyStyle{authortitle}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/bbx/authortitle-icomp-ms.bbx b/macros/latex/contrib/biblatex-ms/latex/bbx/authortitle-icomp-ms.bbx
new file mode 100644
index 0000000000..9535ef4119
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/bbx/authortitle-icomp-ms.bbx
@@ -0,0 +1,6 @@
+\ProvidesFile{authortitle-icomp-ms.bbx}
+[\abx@bbxid]
+
+\RequireBibliographyStyle{authortitle}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/bbx/authortitle-ms.bbx b/macros/latex/contrib/biblatex-ms/latex/bbx/authortitle-ms.bbx
new file mode 100644
index 0000000000..1987eb46d2
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/bbx/authortitle-ms.bbx
@@ -0,0 +1,134 @@
+\ProvidesFile{authortitle-ms.bbx}
+[\abx@bbxid]
+
+\RequireBibliographyStyle{standard}
+\ExecuteBibliographyOptions{pagetracker}
+
+\DeclareBibliographyOption[boolean]{dashed}[true]{%
+ \ifstrequal{#1}{true}
+ {\ExecuteBibliographyOptions{pagetracker}%
+ \renewbibmacro*{bbx:savehash}{\savefield{fullhash}{\bbx@lasthash}}}
+ {\renewbibmacro*{bbx:savehash}{}}}
+
+\DeclareFieldFormat{shorthandwidth}{#1}
+\setlength{\bibitemsep}{0pt}
+
+\DeclareNameAlias{author}{sortname}
+\DeclareNameAlias{editor}{sortname}
+\DeclareNameAlias{translator}{sortname}
+
+\DeclareNameWrapperAlias{author}{sortname}
+\DeclareNameWrapperAlias{editor}{sortname}
+\DeclareNameWrapperAlias{translator}{sortname}
+
+\defbibenvironment{bibliography}
+ {\list
+ {}
+ {\setlength{\leftmargin}{\bibhang}%
+ \setlength{\itemindent}{-\leftmargin}%
+ \setlength{\itemsep}{\bibitemsep}%
+ \setlength{\parsep}{\bibparsep}}}
+ {\endlist}
+ {\item}
+
+\defbibenvironment{shorthand}
+ {\list
+ {\printfield[shorthandwidth]{shorthand}}
+ {\setlength{\labelwidth}{\shorthandwidth}%
+ \setlength{\leftmargin}{\labelwidth}%
+ \setlength{\labelsep}{\biblabelsep}%
+ \addtolength{\leftmargin}{\labelsep}%
+ \setlength{\itemsep}{\bibitemsep}%
+ \setlength{\parsep}{\bibparsep}%
+ \renewcommand*{\makelabel}[1]{##1\hss}}}
+ {\endlist}
+ {\item}
+
+\InitializeBibliographyStyle{%
+ \global\undef\bbx@lasthash}
+
+\newbibmacro*{bbx:savehash}{%
+ \savefield{fullhash}{\bbx@lasthash}}
+
+\newbool{bbx@inset}
+\DeclareBibliographyDriver{set}{%
+ \booltrue{bbx@inset}%
+ \entryset{}{}%
+ \newunit\newblock
+ \usebibmacro{setpageref}%
+ \finentry}
+
+\renewbibmacro*{begrelated}{%
+ \booltrue{bbx@inset}}
+
+\renewbibmacro*{endrelated}{%
+ \usebibmacro*{bbx:savehash}}
+
+\renewbibmacro*{author}{%
+ \ifboolexpr{
+ test \ifuseauthor
+ and
+ not test {\ifnameundef{author}}
+ }
+ {\usebibmacro{bbx:dashcheck}
+ {\bibnamedash}
+ {\printnames{author}%
+ \setunit{\printdelim{authortypedelim}}%
+ \usebibmacro{bbx:savehash}}%
+ \usebibmacro{authorstrg}}
+ {\global\undef\bbx@lasthash}}
+
+\renewbibmacro*{editor}{%
+ \usebibmacro{bbx:editor}{editorstrg}}
+\renewbibmacro*{editor+others}{%
+ \usebibmacro{bbx:editor}{editor+othersstrg}}
+\newbibmacro*{bbx:editor}[1]{%
+ \ifboolexpr{
+ test \ifuseeditor
+ and
+ not test {\ifnameundef{editor}}
+ }
+ {\usebibmacro{bbx:dashcheck}
+ {\bibnamedash}
+ {\printnames{editor}%
+ \setunit{\printdelim{editortypedelim}}%
+ \usebibmacro{bbx:savehash}}%
+ \usebibmacro{#1}%
+ \clearname{editor}}
+ {\global\undef\bbx@lasthash}}
+
+\renewbibmacro*{translator}{%
+ \usebibmacro{bbx:translator}{translatorstrg}}
+\renewbibmacro*{translator+others}{%
+ \usebibmacro{bbx:translator}{translator+othersstrg}}
+\newbibmacro*{bbx:translator}[1]{%
+ \ifboolexpr{
+ test \ifusetranslator
+ and
+ not test {\ifnameundef{translator}}
+ }
+ {\usebibmacro{bbx:dashcheck}
+ {\bibnamedash}
+ {\printnames{translator}%
+ \setunit{\printdelim{translatortypedelim}}%
+ \usebibmacro{bbx:savehash}}%
+ \usebibmacro{#1}%
+ \clearname{translator}}
+ {\global\undef\bbx@lasthash}}
+
+\newbibmacro*{bbx:dashcheck}[2]{%
+ \ifboolexpr{
+ test {\iffieldequals{fullhash}{\bbx@lasthash}}
+ and
+ not test \iffirstonpage
+ and
+ (
+ not bool {bbx@inset}
+ or
+ test {\iffieldequalstr{entrysetcount}{1}}
+ )
+ }
+ {#1}
+ {#2}}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/bbx/authortitle-tcomp-ms.bbx b/macros/latex/contrib/biblatex-ms/latex/bbx/authortitle-tcomp-ms.bbx
new file mode 100644
index 0000000000..3bd7066c68
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/bbx/authortitle-tcomp-ms.bbx
@@ -0,0 +1,6 @@
+\ProvidesFile{authortitle-tcomp-ms.bbx}
+[\abx@bbxid]
+
+\RequireBibliographyStyle{authortitle}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/bbx/authortitle-terse-ms.bbx b/macros/latex/contrib/biblatex-ms/latex/bbx/authortitle-terse-ms.bbx
new file mode 100644
index 0000000000..8b49254463
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/bbx/authortitle-terse-ms.bbx
@@ -0,0 +1,6 @@
+\ProvidesFile{authortitle-terse-ms.bbx}
+[\abx@bbxid]
+
+\RequireBibliographyStyle{authortitle}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/bbx/authortitle-ticomp-ms.bbx b/macros/latex/contrib/biblatex-ms/latex/bbx/authortitle-ticomp-ms.bbx
new file mode 100644
index 0000000000..daaf2cc668
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/bbx/authortitle-ticomp-ms.bbx
@@ -0,0 +1,6 @@
+\ProvidesFile{authortitle-ticomp-ms.bbx}
+[\abx@bbxid]
+
+\RequireBibliographyStyle{authortitle}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/bbx/authoryear-comp-ms.bbx b/macros/latex/contrib/biblatex-ms/latex/bbx/authoryear-comp-ms.bbx
new file mode 100644
index 0000000000..6d9a1a33d4
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/bbx/authoryear-comp-ms.bbx
@@ -0,0 +1,6 @@
+\ProvidesFile{authoryear-comp-ms.bbx}
+[\abx@bbxid]
+
+\RequireBibliographyStyle{authoryear}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/bbx/authoryear-ibid-ms.bbx b/macros/latex/contrib/biblatex-ms/latex/bbx/authoryear-ibid-ms.bbx
new file mode 100644
index 0000000000..59f1e4ce9c
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/bbx/authoryear-ibid-ms.bbx
@@ -0,0 +1,6 @@
+\ProvidesFile{authoryear-ibid-ms.bbx}
+[\abx@bbxid]
+
+\RequireBibliographyStyle{authoryear}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/bbx/authoryear-icomp-ms.bbx b/macros/latex/contrib/biblatex-ms/latex/bbx/authoryear-icomp-ms.bbx
new file mode 100644
index 0000000000..04747e73a7
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/bbx/authoryear-icomp-ms.bbx
@@ -0,0 +1,6 @@
+\ProvidesFile{authoryear-icomp-ms.bbx}
+[\abx@bbxid]
+
+\RequireBibliographyStyle{authoryear}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/bbx/authoryear-ms.bbx b/macros/latex/contrib/biblatex-ms/latex/bbx/authoryear-ms.bbx
new file mode 100644
index 0000000000..643180d0ea
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/bbx/authoryear-ms.bbx
@@ -0,0 +1,293 @@
+\ProvidesFile{authoryear-ms.bbx}
+[\abx@bbxid]
+
+\RequireBibliographyStyle{standard}
+
+\DeclareBibliographyOption[boolean]{dashed}[true]{%
+ \ifstrequal{#1}{true}
+ {\ExecuteBibliographyOptions{pagetracker}%
+ \renewbibmacro*{bbx:savehash}{\savefield{fullhash}{\bbx@lasthash}}}
+ {\renewbibmacro*{bbx:savehash}{}}}
+
+\DeclareBiblatexOption{global,type,entry}[boolean]{mergedate}[true]{%
+ \ifcsdef{bbx@opt@mergedate@#1}
+ {\csuse{bbx@opt@mergedate@#1}}
+ {\PackageError{biblatex}
+ {Invalid option 'mergedate=#1'}
+ {Valid values are 'maximum', 'compact', 'basic', 'minimum',\MessageBreak
+ 'true' (=compact), and 'false'.}}}
+
+\providebibmacro*{date+extradate}{}
+\providebibmacro*{date+extrayear}{%
+ \blx@warning{bibmacro 'date+extrayear' is deprecated.\MessageBreak
+ Please use 'date+extradate'.\MessageBreak
+ Using 'date+extradate' instead}%
+ \usebibmacro{date+extradate}}
+
+\newbibmacro*{bbx:ifmergeddate}{\@secondoftwo}
+
+\renewbibmacro*{date}{%
+ \usebibmacro{bbx:ifmergeddate}
+ {}
+ {\printdate}}%
+
+\def\bbx@opt@mergedate@true{\bbx@opt@mergedate@compact}
+
+% merge date/issue with date label
+\def\bbx@opt@mergedate@maximum{%
+ \renewbibmacro*{date+extradate}{%
+ \iffieldundef{labelyear}
+ {}
+ {\printtext[parens]{%
+ \iflabeldateisdate
+ {\printfield{issue}%
+ \setunit*{\addspace}%
+ \printdateextra}
+ {\printlabeldateextra}}}}%
+ \renewbibmacro*{bbx:ifmergeddate}{\iflabeldateisdate}%
+ \renewbibmacro*{issue+date}{%
+ \usebibmacro{bbx:ifmergeddate}
+ {}
+ {\printtext[parens]{%
+ \printfield{issue}%
+ \setunit*{\addspace}%
+ \printdate}}}}
+
+% merge date with date label
+\def\bbx@opt@mergedate@compact{%
+ \renewbibmacro*{date+extradate}{%
+ \iffieldundef{labelyear}
+ {}
+ {\printtext[parens]{%
+ \iflabeldateisdate
+ {\printdateextra}
+ {\printlabeldateextra}}}}%
+ \renewbibmacro*{bbx:ifmergeddate}{\iflabeldateisdate}%
+ \renewbibmacro*{issue+date}{%
+ \ifboolexpr{test {\usebibmacro{bbx:ifmergeddate}}
+ and
+ test {\iffieldundef{issue}}}
+ {}
+ {\printtext[parens]{%
+ \printfield{issue}%
+ \setunit*{\addspace}%
+ \usebibmacro{bbx:ifmergeddate}
+ {}
+ {\printdate}}}%
+ \newunit}}
+
+% merge year-only date with date label
+\def\bbx@opt@mergedate@basic{%
+ \renewbibmacro*{date+extradate}{%
+ \iffieldundef{labelyear}
+ {}
+ {\printtext[parens]{\printlabeldateextra}}}%
+ \renewbibmacro*{bbx:ifmergeddate}{%
+ \ifboolexpr{
+ test {\iflabeldateisdate}
+ and
+ not test {\ifdateshavedifferentprecision{label}{}}
+ }%
+ }%
+ \renewbibmacro*{issue+date}{%
+ \ifboolexpr{
+ test {\usebibmacro{bbx:ifmergeddate}}
+ and
+ test {\iffieldundef{issue}}
+ }
+ {}
+ {\printtext[parens]{%
+ \printfield{issue}%
+ \setunit*{\addspace}%
+ \printdate}}%
+ \newunit}}
+
+% merge year-only date with year-only date label
+\def\bbx@opt@mergedate@minimum{%
+ \renewbibmacro*{date+extradate}{%
+ \iffieldundef{labelyear}
+ {}
+ {\printtext[parens]{\printlabeldateextra}}}%
+ \renewbibmacro*{bbx:ifmergeddate}{%
+ \ifboolexpr{
+ test {\iflabeldateisdate}
+ and
+ not test {\ifdateshavedifferentprecision{label}{}}
+ and
+ test {\iffieldundef{extradate}}
+ }%
+ }%
+ \renewbibmacro*{issue+date}{%
+ \ifboolexpr{
+ test {\usebibmacro{bbx:ifmergeddate}}
+ and
+ test {\iffieldundef{issue}}
+ }
+ {}
+ {\printtext[parens]{%
+ \printfield{issue}%
+ \setunit*{\addspace}%
+ \printdate}}%
+ \newunit}}
+
+% don't merge date/issue with date label
+\def\bbx@opt@mergedate@false{%
+ \renewbibmacro*{date+extradate}{%
+ \iffieldundef{labelyear}
+ {}
+ {\printtext[parens]{\printlabeldateextra}}}%
+ \renewbibmacro*{bbx:ifmergeddate}{\@secondoftwo}%
+ \renewbibmacro*{issue+date}{%
+ \printtext[parens]{%
+ \printfield{issue}%
+ \setunit*{\addspace}%
+ \usebibmacro{date}}%
+ \newunit}}
+
+\ExecuteBibliographyOptions{labeldateparts,sorting=nyt,pagetracker,mergedate}
+
+\DeclareFieldFormat{shorthandwidth}{#1}
+\setlength{\bibitemsep}{0pt}
+
+\DeclareNameAlias{author}{sortname}
+\DeclareNameAlias{editor}{sortname}
+\DeclareNameAlias{translator}{sortname}
+
+\DeclareNameWrapperAlias{author}{sortname}
+\DeclareNameWrapperAlias{editor}{sortname}
+\DeclareNameWrapperAlias{translator}{sortname}
+
+\defbibenvironment{bibliography}
+ {\list
+ {}
+ {\setlength{\leftmargin}{\bibhang}%
+ \setlength{\itemindent}{-\leftmargin}%
+ \setlength{\itemsep}{\bibitemsep}%
+ \setlength{\parsep}{\bibparsep}}}
+ {\endlist}
+ {\item}
+
+\defbibenvironment{shorthand}
+ {\list
+ {\printfield[shorthandwidth]{shorthand}}
+ {\setlength{\labelwidth}{\shorthandwidth}%
+ \setlength{\leftmargin}{\labelwidth}%
+ \setlength{\labelsep}{\biblabelsep}%
+ \addtolength{\leftmargin}{\labelsep}%
+ \setlength{\itemsep}{\bibitemsep}%
+ \setlength{\parsep}{\bibparsep}%
+ \renewcommand*{\makelabel}[1]{##1\hss}}}
+ {\endlist}
+ {\item}
+
+\InitializeBibliographyStyle{\global\undef\bbx@lasthash}
+
+\newbibmacro*{bbx:savehash}{%
+ \savefield{fullhash}{\bbx@lasthash}}
+
+\newbool{bbx@inset}
+\DeclareBibliographyDriver{set}{%
+ \booltrue{bbx@inset}%
+ \entryset{}{}%
+ \newunit\newblock
+ \usebibmacro{setpageref}%
+ \finentry}
+
+\renewbibmacro*{begrelated}{%
+ \booltrue{bbx@inset}}
+
+\renewbibmacro*{endrelated}{%
+ \usebibmacro*{bbx:savehash}}
+
+\renewbibmacro*{author}{%
+ \ifboolexpr{
+ test \ifuseauthor
+ and
+ not test {\ifnameundef{author}}
+ }
+ {\usebibmacro{bbx:dashcheck}
+ {\bibnamedash}
+ {\usebibmacro{bbx:savehash}%
+ \printnames{author}%
+ \iffieldundef{authortype}
+ {\setunit{\printdelim{nameyeardelim}}}
+ {\setunit{\printdelim{authortypedelim}}}}%
+ \iffieldundef{authortype}
+ {}
+ {\usebibmacro{authorstrg}%
+ \setunit{\printdelim{nameyeardelim}}}}%
+ {\global\undef\bbx@lasthash
+ \usebibmacro{labeltitle}%
+ \setunit*{\printdelim{nonameyeardelim}}}%
+ \usebibmacro{date+extradate}}
+
+\renewbibmacro*{editor}{%
+ \usebibmacro{bbx:editor}{editorstrg}}
+\renewbibmacro*{editor+others}{%
+ \usebibmacro{bbx:editor}{editor+othersstrg}}
+\newbibmacro*{bbx:editor}[1]{%
+ \ifboolexpr{
+ test \ifuseeditor
+ and
+ not test {\ifnameundef{editor}}
+ }
+ {\usebibmacro{bbx:dashcheck}
+ {\bibnamedash}
+ {\printnames{editor}%
+ \setunit{\printdelim{editortypedelim}}%
+ \usebibmacro{bbx:savehash}}%
+ \usebibmacro{#1}%
+ \clearname{editor}%
+ \setunit{\printdelim{nameyeardelim}}}%
+ {\global\undef\bbx@lasthash
+ \usebibmacro{labeltitle}%
+ \setunit*{\printdelim{nonameyeardelim}}}%
+ \usebibmacro{date+extradate}}
+
+\renewbibmacro*{translator}{%
+ \usebibmacro{bbx:translator}{translatorstrg}}
+\renewbibmacro*{translator+others}{%
+ \usebibmacro{bbx:translator}{translator+othersstrg}}
+\newbibmacro*{bbx:translator}[1]{%
+ \ifboolexpr{
+ test \ifusetranslator
+ and
+ not test {\ifnameundef{translator}}
+ }
+ {\usebibmacro{bbx:dashcheck}
+ {\bibnamedash}
+ {\printnames{translator}%
+ \setunit{\printdelim{translatortypedelim}}%
+ \usebibmacro{bbx:savehash}}%
+ \usebibmacro{#1}%
+ \clearname{translator}%
+ \setunit{\printdelim{nameyeardelim}}}%
+ {\global\undef\bbx@lasthash
+ \usebibmacro{labeltitle}%
+ \setunit*{\printdelim{nonameyeardelim}}}%
+ \usebibmacro{date+extradate}}
+
+\newbibmacro*{bbx:dashcheck}[2]{%
+ \ifboolexpr{
+ test {\iffieldequals{fullhash}{\bbx@lasthash}}
+ and
+ not test \iffirstonpage
+ and
+ (
+ not bool {bbx@inset}
+ or
+ test {\iffieldequalstr{entrysetcount}{1}}
+ )
+ }
+ {#1}
+ {#2}}
+
+\newbibmacro*{labeltitle}{%
+ \iffieldundef{label}
+ {\iffieldundef{shorttitle}
+ {\printfield{title}%
+ \clearfield{title}}
+ {\printfield[title]{shorttitle}}}
+ {\printfield{label}}}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/bbx/debug-ms.bbx b/macros/latex/contrib/biblatex-ms/latex/bbx/debug-ms.bbx
new file mode 100644
index 0000000000..6c479a6e43
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/bbx/debug-ms.bbx
@@ -0,0 +1,111 @@
+\ProvidesFile{debug-ms.bbx}
+[\abx@bbxid]
+
+\ExecuteBibliographyOptions{sorting=debug}
+\DeclareFieldFormat{entrykey}{\ttfamily[#1]}
+\DeclareFieldFormat{shorthandwidth}{#1}
+
+\defbibenvironment{bibliography}
+ {\list
+ {}
+ {\setlength{\leftmargin}{8em}%
+ \setlength{\itemindent}{-\leftmargin}%
+ \setlength{\itemsep}{0pt}%
+ \setlength{\parsep}{0pt}%
+ \interlinepenalty\@M
+ \raggedbottom\raggedright
+ \frenchspacing
+ \normalfont\footnotesize}}
+ {\endlist}
+ {\item}
+
+\defbibenvironment{shorthand}
+ {\list
+ {\printfield[shorthandwidth]{shorthand}}
+ {\setlength{\labelwidth}{8em}%
+ \setlength{\leftmargin}{\labelwidth}%
+ \addtolength{\labelwidth}{-\labelsep}%
+ \setlength{\itemsep}{0pt}%
+ \setlength{\parsep}{0pt}%
+ \renewcommand*{\makelabel}[1]{##1\hss}%
+ \interlinepenalty\@M
+ \raggedbottom\raggedright
+ \frenchspacing
+ \normalfont\footnotesize}}
+ {\endlist}
+ {\item}
+
+\@ifpackageloaded{biblatex_legacy}
+ {\DeclareNameFormat{debug}{%
+ \bbx@mklabel{\currentname}%
+ \ifblank{#3}{}{\detokenize{#3}\space}%
+ \ifblank{#5}{}{\detokenize{#5}\ifpunctmark{'}{}{\space}}%
+ \detokenize{#1}%
+ \ifblank{#7}{}{\space\detokenize{#7}}%
+ \ifblank{#3}{}{\bbx@mksublabel{given}\detokenize{#3}}%
+ \ifblank{#1}{}{\bbx@mksublabel{family}\detokenize{#1}}%
+ \ifblank{#5}{}{\bbx@mksublabel{prefix}\detokenize{#5}}%
+ \ifblank{#7}{}{\bbx@mksublabel{affix}\detokenize{#7}}%
+ \bbx@mksublabel{inits}%
+ \ifblank{#4}{}{\detokenize{#4}\space}%
+ \ifblank{#6}{}{\detokenize{#6}\ifpunctmark{'}{}{\space}}%
+ \detokenize{#2}%
+ \ifblank{#8}{}{\space\detokenize{#8}}}}
+ {\DeclareNameFormat{debug}{%
+ \bbx@mklabel{\currentname}%
+ \ifdefvoid{\namepartgiven}{}{\expandafter\detokenize\expandafter{\namepartgiven}\space}%
+ \ifdefvoid{\namepartprefix}{}{\expandafter\detokenize\expandafter{\namepartprefix}\ifpunctmark{'}{}{\space}}%
+ \expandafter\detokenize\expandafter{\namepartfamily}%
+ \ifdefvoid{\namepartsuffix}{}{\expandafter\space\expandafter\detokenize\expandafter{\namepartsuffix}}%
+ \ifdefvoid{\namepartgiven}{}{\bbx@mksublabel{given}\expandafter\detokenize\expandafter{\namepartgiven}}%
+ \ifdefvoid{\namepartfamily}{}{\bbx@mksublabel{family}\expandafter\detokenize\expandafter{\namepartfamily}}%
+ \ifdefvoid{\namepartprefix}{}{\bbx@mksublabel{prefix}\expandafter\detokenize\expandafter{\namepartprefix}}%
+ \ifdefvoid{\namepartsuffix}{}{\bbx@mksublabel{suffix}\expandafter\detokenize\expandafter{\namepartsuffix}}%
+ \bbx@mksublabel{inits}%
+ \ifdefvoid{\namepartgiveni}{}{\expandafter\detokenize\expandafter{\namepartgiveni}\space}%
+ \ifdefvoid{\namepartprefixi}{}{\expandafter\detokenize\expandafter{\namepartprefixi}\ifpunctmark{'}{}{\space}}%
+ \expandafter\detokenize\expandafter{\namepartfamilyi}%
+ \ifdefvoid{\namepartsuffixi}{}{\expandafter\space\expandafter\detokenize\expandafter{\namepartsuffixi}}}}
+
+\DeclareListFormat{debug}{%
+ \bbx@mklabel{\currentlist}%
+ \detokenize{#1}}
+
+\DeclareFieldFormat{debug}{%
+ \bbx@mklabel{\currentfield}%
+ \detokenize{#1}}
+
+\newcommand*{\bbx@mklabel}[1]{%
+ \item
+ \makebox[\leftmargin][l]{\ttfamily [#1]}}
+
+\newcommand*{\bbx@mksublabel}[1]{%
+ \par\nobreak
+ \makebox[6em][l]{\ttfamily [#1]}}
+
+\DeclareBibliographyDriver{debug}{%
+ \item\begingroup\ttfamily\leavevmode
+ \xleaders\hbox to 0.75em{\hss-\hss}\hfill\kern\z@
+ \space\printfield{entrykey}\space
+ \xleaders\hbox to 0.75em{\hss-\hss}\hfill\kern\z@
+ \endgroup
+ \def\do{\printnames[debug][-\value{listtotal}]}%
+ \abx@donames
+ \def\do{\printlist[debug][-\value{listtotal}]}%
+ \abx@dolists
+ \def\do{\printfield[debug]}%
+ \abx@dointernalfields
+ \abx@dofields\do{options}\do{execute}%
+ \item\begingroup\ttfamily\leavevmode
+ \xleaders\hbox to 0.75em{\hss-\hss}\hfill\kern\z@
+ \endgroup
+ \clearpage}
+
+\def\do#1{\DeclareBibliographyAlias{#1}{debug}}
+\abx@doentrytypes
+\do{*}
+
+\DeclareBibliographyDriver{shorthand}{%
+ \texttt{\printfield{entrykey}}}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/bbx/draft-ms.bbx b/macros/latex/contrib/biblatex-ms/latex/bbx/draft-ms.bbx
new file mode 100644
index 0000000000..6ec3eb2225
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/bbx/draft-ms.bbx
@@ -0,0 +1,42 @@
+\ProvidesFile{draft-ms.bbx}
+[\abx@bbxid]
+
+\RequireBibliographyStyle{standard}
+\ExecuteBibliographyOptions{sorting=debug}
+
+\DeclareNameAlias{author}{default}
+\DeclareNameAlias{editor}{default}
+\DeclareNameAlias{translator}{default}
+
+\DeclareNameWrapperAlias{author}{default}
+\DeclareNameWrapperAlias{editor}{default}
+\DeclareNameWrapperAlias{translator}{default}
+
+\DeclareFieldFormat{shorthandwidth}{#1}
+
+\defbibenvironment{bibliography}
+ {\list
+ {\printfield{entrykey}}
+ {\setlength{\labelwidth}{0pt}%
+ \setlength{\itemindent}{-\leftmargin}%
+ \setlength{\itemsep}{\bibitemsep}%
+ \setlength{\parsep}{\bibparsep}%
+ \renewcommand*{\makelabel}[1]{%
+ \hspace\labelsep\bfseries##1}}}
+ {\endlist}
+ {\item}
+
+\defbibenvironment{shorthand}
+ {\list
+ {\printfield[shorthandwidth]{shorthand}}
+ {\setlength{\labelwidth}{\shorthandwidth}%
+ \setlength{\leftmargin}{\labelwidth}%
+ \setlength{\labelsep}{\biblabelsep}%
+ \addtolength{\leftmargin}{\labelsep}%
+ \setlength{\itemsep}{\bibitemsep}%
+ \setlength{\parsep}{\bibparsep}%
+ \renewcommand*{\makelabel}[1]{##1\hss}}}
+ {\endlist}
+ {\item}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/bbx/numeric-comp-ms.bbx b/macros/latex/contrib/biblatex-ms/latex/bbx/numeric-comp-ms.bbx
new file mode 100644
index 0000000000..0328e2cffb
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/bbx/numeric-comp-ms.bbx
@@ -0,0 +1,6 @@
+\ProvidesFile{numeric-comp-ms.bbx}
+[\abx@bbxid]
+
+\RequireBibliographyStyle{numeric}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/bbx/numeric-ms.bbx b/macros/latex/contrib/biblatex-ms/latex/bbx/numeric-ms.bbx
new file mode 100644
index 0000000000..98f83ad227
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/bbx/numeric-ms.bbx
@@ -0,0 +1,63 @@
+\ProvidesFile{numeric-ms.bbx}
+[\abx@bbxid]
+
+\RequireBibliographyStyle{standard}
+\ExecuteBibliographyOptions{labelnumber}
+
+\providebool{bbx:subentry}
+
+\DeclareBiblatexOption{global,type,entry}[boolean]{subentry}[true]{%
+ \setbool{bbx:subentry}{#1}}
+
+\DeclareNameAlias{author}{default}
+\DeclareNameAlias{editor}{default}
+\DeclareNameAlias{translator}{default}
+
+\DeclareNameWrapperAlias{author}{default}
+\DeclareNameWrapperAlias{editor}{default}
+\DeclareNameWrapperAlias{translator}{default}
+
+\DeclareFieldFormat{bibentrysetcount}{\mkbibparens{\mknumalph{#1}}}
+\DeclareFieldFormat{labelnumberwidth}{\mkbibbrackets{#1}}
+\DeclareFieldFormat{shorthandwidth}{\mkbibbrackets{#1}}
+
+\defbibenvironment{bibliography}
+ {\list
+ {\printtext[labelnumberwidth]{%
+ \printfield{labelprefix}%
+ \printfield{labelnumber}}}
+ {\setlength{\labelwidth}{\labelnumberwidth}%
+ \setlength{\leftmargin}{\labelwidth}%
+ \setlength{\labelsep}{\biblabelsep}%
+ \addtolength{\leftmargin}{\labelsep}%
+ \setlength{\itemsep}{\bibitemsep}%
+ \setlength{\parsep}{\bibparsep}}%
+ \renewcommand*{\makelabel}[1]{\hss##1}}
+ {\endlist}
+ {\item}
+
+\defbibenvironment{shorthand}
+ {\list
+ {\printfield[shorthandwidth]{shorthand}}
+ {\setlength{\labelwidth}{\shorthandwidth}%
+ \setlength{\leftmargin}{\labelwidth}%
+ \setlength{\labelsep}{\biblabelsep}%
+ \addtolength{\leftmargin}{\labelsep}%
+ \setlength{\itemsep}{\bibitemsep}%
+ \setlength{\parsep}{\bibparsep}%
+ \renewcommand*{\makelabel}[1]{\hss##1}}}
+ {\endlist}
+ {\item}
+
+\DeclareBibliographyDriver{set}{%
+ \entryset
+ {\ifbool{bbx:subentry}
+ {\printfield[bibentrysetcount]{entrysetcount}%
+ \printunit*{\addnbspace}}
+ {}}
+ {}%
+ \newunit\newblock
+ \usebibmacro{setpageref}%
+ \finentry}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/bbx/numeric-verb-ms.bbx b/macros/latex/contrib/biblatex-ms/latex/bbx/numeric-verb-ms.bbx
new file mode 100644
index 0000000000..1e1de4ae6a
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/bbx/numeric-verb-ms.bbx
@@ -0,0 +1,6 @@
+\ProvidesFile{numeric-verb-ms.bbx}
+[\abx@bbxid]
+
+\RequireBibliographyStyle{numeric}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/bbx/reading-ms.bbx b/macros/latex/contrib/biblatex-ms/latex/bbx/reading-ms.bbx
new file mode 100644
index 0000000000..f659bb930b
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/bbx/reading-ms.bbx
@@ -0,0 +1,177 @@
+\ProvidesFile{reading-ms.bbx}
+[\abx@bbxid]
+
+\RequireBibliographyStyle{standard}
+
+\DeclareNameAlias{author}{default}
+\DeclareNameAlias{editor}{default}
+\DeclareNameAlias{translator}{default}
+
+\DeclareNameWrapperAlias{author}{default}
+\DeclareNameWrapperAlias{editor}{default}
+\DeclareNameWrapperAlias{translator}{default}
+
+\DeclareFieldFormat{entrykey}{\mbox{\bfseries#1}}
+\DeclareFieldFormat{annotation}{\bibstring{annotation}\addcolon\space #1}
+\DeclareFieldFormat{abstract}{\bibstring{abstract}\addcolon\space #1}
+\DeclareFieldFormat{library}{\bibstring{library}\addcolon\space #1}
+\DeclareFieldFormat{file}{\bibstring{file}\addcolon\space \url{#1}}
+\DeclareFieldFormat{shorthandwidth}{#1}
+
+\InitializeBibliographyStyle{%
+ \global\undef\bbx@lasthash}
+
+\setlength{\bibitemsep}{0.5\baselineskip}
+\setlength{\bibparsep}{0pt}
+
+\defbibenvironment{bibliography}
+ {\list
+ {}
+ {\setlength{\leftmargin}{0pt}%
+ \setlength{\itemindent}{0pt}%
+ \setlength{\itemsep}{\bibitemsep}%
+ \setlength{\parsep}{\bibparsep}}}
+ {\endlist}
+ {\bbx@item}
+
+\defbibenvironment{shorthand}
+ {\list
+ {\printfield[shorthandwidth]{shorthand}}
+ {\setlength{\labelwidth}{\shorthandwidth}%
+ \setlength{\leftmargin}{\labelwidth}%
+ \setlength{\labelsep}{\biblabelsep}%
+ \addtolength{\leftmargin}{\labelsep}%
+ \setlength{\itemsep}{\bibitemsep}%
+ \setlength{\parsep}{\bibparsep}%
+ \renewcommand*{\makelabel}[1]{##1\hss}}}
+ {\endlist}
+ {\item}
+
+\def\bbx@item@false{%
+ \itemsep2\bibitemsep
+ \item\relax
+ \itemsep\bibitemsep}
+
+\def\bbx@item@true{%
+ \bbx@item@full}
+
+\def\bbx@item@full{%
+ \itemsep2\bibitemsep
+ \@itempenalty\z@
+ \item\relax
+ \begingroup
+ \samepage\bfseries
+ \def\finentrypunct{\strut}%
+ \usebibmacro{entryhead:full}%
+ \ifbool{bbx:entrykey}
+ {\def\newblockpunct{%
+ \nobreak\hskip\z@skip\strut
+ \hfill\penalty100\hskip1em\relax
+ \hbox{}\nobreak\hfill\strut}%
+ \def\finentrypunct{%
+ \parfillskip\z@\finalhyphendemerits\z@
+ \par\nobreak}%
+ \newblock
+ \printfield{entrykey}}
+ {}%
+ \finentry
+ \endgroup
+ \hrule height 1.25pt\relax
+ \itemsep\bibitemsep
+ \@itempenalty\@M
+ \item\strut
+ \@itempenalty\z@}
+
+\def\bbx@item@name{%
+ \iffieldequals{fullhash}{\bbx@lasthash}
+ {\bbx@item@false}
+ {\itemsep2\bibitemsep
+ \@itempenalty\z@
+ \item\relax
+ \begingroup
+ \samepage\bfseries
+ \def\finentrypunct{\strut}%
+ \usebibmacro{entryhead:name}%
+ \finentry
+ \endgroup
+ \hrule height 1.25pt\relax
+ \itemsep\bibitemsep
+ \@itempenalty\@M
+ \item\strut
+ \@itempenalty\z@}}
+
+\newbool{bbx:entrykey}
+\newbool{bbx:annotation}
+\newbool{bbx:abstract}
+\newbool{bbx:library}
+\newbool{bbx:file}
+
+\DeclareBiblatexOption{global,type,entry}[boolean]{entryhead}[true]{%
+ \ifcsdef{bbx@item@#1}
+ {\letcs\bbx@item{bbx@item@#1}}
+ {\PackageError{biblatex}
+ {Invalid option 'header=#1'}
+ {Valid values: header=true, false, full, name.}}}
+\DeclareBiblatexOption{global,type,entry}[boolean]{entrykey}[true]{%
+ \setbool{bbx:entrykey}{#1}}
+\DeclareBiblatexOption{global,type,entry}[boolean]{annotation}[true]{%
+ \setbool{bbx:annotation}{#1}}
+\DeclareBiblatexOption{global,type,entry}[boolean]{abstract}[true]{%
+ \setbool{bbx:abstract}{#1}}
+\DeclareBiblatexOption{global,type,entry}[boolean]{library}[true]{%
+ \setbool{bbx:library}{#1}}
+\DeclareBiblatexOption{global,type,entry}[boolean]{file}[true]{%
+ \setbool{bbx:file}{#1}}
+
+\ExecuteBibliographyOptions{loadfiles,entryhead,entrykey,annotation,abstract,library,file}
+
+\newbibmacro*{entryhead:full}{%
+ \printnames[labelname][-1]{labelname}%
+ \setunit*{\addcolon\space}%
+ \printfield{labeltitle}}
+
+\newbibmacro*{entryhead:name}{%
+ \ifnameundef{labelname}
+ {\printfield{labeltitle}}
+ {\printnames[labelname]{labelname}}%
+ \savefield{fullhash}{\bbx@lasthash}}
+
+\newbibmacro*{entrytail}{%
+ \newunit\newblock
+ \begingroup
+ \def\newblockpunct{\item}%
+ \ifbool{bbx:annotation}
+ {\usebibmacro{annotation}%
+ \newunit\newblock}
+ {}%
+ \ifbool{bbx:abstract}
+ {\usebibmacro{abstract}%
+ \newunit\newblock}
+ {}%
+ \ifbool{bbx:file}
+ {\printfield{file}%
+ \newunit\newblock}
+ {}%
+ \ifbool{bbx:library}
+ {\printfield{library}%
+ \newunit\newblock}
+ {}%
+ \endgroup}
+
+\renewbibmacro*{finentry}{%
+ \ifbibliography
+ {\usebibmacro{entrytail}}
+ {}%
+ \finentry}
+
+\DeclareBibliographyDriver{set}{%
+ \renewbibmacro*{finentry}{\finentry}%
+ \entryset{}{}%
+ \newunit\newblock
+ \usebibmacro{setpageref}%
+ \ifbibliography
+ {\usebibmacro{entrytail}}
+ {}%
+ \finentry}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/bbx/standard-ms.bbx b/macros/latex/contrib/biblatex-ms/latex/bbx/standard-ms.bbx
new file mode 100644
index 0000000000..e27dd0dfe0
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/bbx/standard-ms.bbx
@@ -0,0 +1,1000 @@
+\ProvidesFile{standard-ms.bbx}
+[\abx@bbxid]
+
+\newtoggle{bbx:isbn}
+\newtoggle{bbx:url}
+\newtoggle{bbx:doi}
+\newtoggle{bbx:eprint}
+\newtoggle{bbx:related}
+
+\DeclareBiblatexOption{global,type,entry}[boolean]{isbn}[true]{%
+ \settoggle{bbx:isbn}{#1}}
+\DeclareBiblatexOption{global,type,entry}[boolean]{url}[true]{%
+ \settoggle{bbx:url}{#1}}
+\DeclareBiblatexOption{global,type,entry}[boolean]{doi}[true]{%
+ \settoggle{bbx:doi}{#1}}
+\DeclareBiblatexOption{global,type,entry}[boolean]{eprint}[true]{%
+ \settoggle{bbx:eprint}{#1}}
+\DeclareBiblatexOption{global,type,entry}[boolean]{related}[true]{%
+ \settoggle{bbx:related}{#1}}
+
+\ExecuteBibliographyOptions{isbn,url,doi,eprint,related}
+% @online url is shown even if url=false, globally
+\ExecuteBibliographyOptions[online]{url=true}
+
+\newbibmacro*{begentry}{}
+\newbibmacro*{finentry}{\finentry}
+
+\DeclareBibliographyDriver{article}{%
+ \usebibmacro{bibindex}%
+ \usebibmacro{begentry}%
+ \usebibmacro{author/translator+others}%
+ \setunit{\printdelim{nametitledelim}}\newblock
+ \usebibmacro{title}%
+ \newunit
+ \printlist{language}%
+ \newunit\newblock
+ \usebibmacro{byauthor}%
+ \newunit\newblock
+ \usebibmacro{bytranslator+others}%
+ \newunit\newblock
+ \printfield{version}%
+ \newunit\newblock
+ \usebibmacro{in:}%
+ \usebibmacro{journal+issuetitle}%
+ \newunit
+ \usebibmacro{byeditor+others}%
+ \newunit
+ \usebibmacro{note+pages}%
+ \newunit\newblock
+ \iftoggle{bbx:isbn}
+ {\printfield{issn}}
+ {}%
+ \newunit\newblock
+ \usebibmacro{doi+eprint+url}%
+ \newunit\newblock
+ \usebibmacro{addendum+pubstate}%
+ \setunit{\bibpagerefpunct}\newblock
+ \usebibmacro{pageref}%
+ \newunit\newblock
+ \iftoggle{bbx:related}
+ {\usebibmacro{related:init}%
+ \usebibmacro{related}}
+ {}%
+ \usebibmacro{finentry}}
+
+\DeclareBibliographyDriver{book}{%
+ \usebibmacro{bibindex}%
+ \usebibmacro{begentry}%
+ \usebibmacro{author/editor+others/translator+others}%
+ \setunit{\printdelim{nametitledelim}}\newblock
+ \usebibmacro{maintitle+title}%
+ \newunit
+ \printlist{language}%
+ \newunit\newblock
+ \usebibmacro{byauthor}%
+ \newunit\newblock
+ \usebibmacro{byeditor+others}%
+ \newunit\newblock
+ \printfield{edition}%
+ \newunit
+ \iffieldundef{maintitle}
+ {\printfield{volume}%
+ \printfield{part}}
+ {}%
+ \newunit
+ \printfield{volumes}%
+ \newunit\newblock
+ \usebibmacro{series+number}%
+ \newunit\newblock
+ \printfield{note}%
+ \newunit\newblock
+ \usebibmacro{publisher+location+date}%
+ \newunit\newblock
+ \usebibmacro{chapter+pages}%
+ \newunit
+ \printfield{pagetotal}%
+ \newunit\newblock
+ \iftoggle{bbx:isbn}
+ {\printfield{isbn}}
+ {}%
+ \newunit\newblock
+ \usebibmacro{doi+eprint+url}%
+ \newunit\newblock
+ \usebibmacro{addendum+pubstate}%
+ \setunit{\bibpagerefpunct}\newblock
+ \usebibmacro{pageref}%
+ \newunit\newblock
+ \iftoggle{bbx:related}
+ {\usebibmacro{related:init}%
+ \usebibmacro{related}}
+ {}%
+ \usebibmacro{finentry}}
+
+\DeclareBibliographyDriver{booklet}{%
+ \usebibmacro{bibindex}%
+ \usebibmacro{begentry}%
+ \usebibmacro{author/editor+others/translator+others}%
+ \setunit{\printdelim{nametitledelim}}\newblock
+ \usebibmacro{title}%
+ \newunit
+ \printlist{language}%
+ \newunit\newblock
+ \usebibmacro{byauthor}%
+ \newunit\newblock
+ \usebibmacro{byeditor+others}%
+ \newunit\newblock
+ \printfield{howpublished}%
+ \newunit\newblock
+ \printfield{type}%
+ \newunit\newblock
+ \printfield{note}%
+ \newunit\newblock
+ \usebibmacro{location+date}%
+ \newunit\newblock
+ \usebibmacro{chapter+pages}%
+ \newunit
+ \printfield{pagetotal}%
+ \newunit\newblock
+ \usebibmacro{doi+eprint+url}%
+ \newunit\newblock
+ \usebibmacro{addendum+pubstate}%
+ \setunit{\bibpagerefpunct}\newblock
+ \usebibmacro{pageref}%
+ \newunit\newblock
+ \iftoggle{bbx:related}
+ {\usebibmacro{related:init}%
+ \usebibmacro{related}}
+ {}%
+ \usebibmacro{finentry}}
+
+\DeclareBibliographyDriver{collection}{%
+ \usebibmacro{bibindex}%
+ \usebibmacro{begentry}%
+ \usebibmacro{editor+others}%
+ \setunit{\printdelim{nametitledelim}}\newblock
+ \usebibmacro{maintitle+title}%
+ \newunit
+ \printlist{language}%
+ \newunit\newblock
+ \usebibmacro{byeditor+others}%
+ \newunit\newblock
+ \printfield{edition}%
+ \newunit
+ \iffieldundef{maintitle}
+ {\printfield{volume}%
+ \printfield{part}}
+ {}%
+ \newunit
+ \printfield{volumes}%
+ \newunit\newblock
+ \usebibmacro{series+number}%
+ \newunit\newblock
+ \printfield{note}%
+ \newunit\newblock
+ \usebibmacro{publisher+location+date}%
+ \newunit\newblock
+ \usebibmacro{chapter+pages}%
+ \newunit
+ \printfield{pagetotal}%
+ \newunit\newblock
+ \iftoggle{bbx:isbn}
+ {\printfield{isbn}}
+ {}%
+ \newunit\newblock
+ \usebibmacro{doi+eprint+url}%
+ \newunit\newblock
+ \usebibmacro{addendum+pubstate}%
+ \setunit{\bibpagerefpunct}\newblock
+ \usebibmacro{pageref}%
+ \newunit\newblock
+ \iftoggle{bbx:related}
+ {\usebibmacro{related:init}%
+ \usebibmacro{related}}
+ {}%
+ \usebibmacro{finentry}}
+
+\DeclareBibliographyDriver{inbook}{%
+ \usebibmacro{bibindex}%
+ \usebibmacro{begentry}%
+ \usebibmacro{author/translator+others}%
+ \setunit{\printdelim{nametitledelim}}\newblock
+ \usebibmacro{title}%
+ \newunit
+ \printlist{language}%
+ \newunit\newblock
+ \usebibmacro{byauthor}%
+ \newunit\newblock
+ \usebibmacro{in:}%
+ \usebibmacro{bybookauthor}%
+ \newunit\newblock
+ \usebibmacro{maintitle+booktitle}%
+ \newunit\newblock
+ \usebibmacro{byeditor+others}%
+ \newunit\newblock
+ \printfield{edition}%
+ \newunit
+ \iffieldundef{maintitle}
+ {\printfield{volume}%
+ \printfield{part}}
+ {}%
+ \newunit
+ \printfield{volumes}%
+ \newunit\newblock
+ \usebibmacro{series+number}%
+ \newunit\newblock
+ \printfield{note}%
+ \newunit\newblock
+ \usebibmacro{publisher+location+date}%
+ \newunit\newblock
+ \usebibmacro{chapter+pages}%
+ \newunit\newblock
+ \iftoggle{bbx:isbn}
+ {\printfield{isbn}}
+ {}%
+ \newunit\newblock
+ \usebibmacro{doi+eprint+url}%
+ \newunit\newblock
+ \usebibmacro{addendum+pubstate}%
+ \setunit{\bibpagerefpunct}\newblock
+ \usebibmacro{pageref}%
+ \newunit\newblock
+ \iftoggle{bbx:related}
+ {\usebibmacro{related:init}%
+ \usebibmacro{related}}
+ {}%
+ \usebibmacro{finentry}}
+
+\DeclareBibliographyDriver{incollection}{%
+ \usebibmacro{bibindex}%
+ \usebibmacro{begentry}%
+ \usebibmacro{author/translator+others}%
+ \setunit{\printdelim{nametitledelim}}\newblock
+ \usebibmacro{title}%
+ \newunit
+ \printlist{language}%
+ \newunit\newblock
+ \usebibmacro{byauthor}%
+ \newunit\newblock
+ \usebibmacro{in:}%
+ \usebibmacro{maintitle+booktitle}%
+ \newunit\newblock
+ \usebibmacro{byeditor+others}%
+ \newunit\newblock
+ \printfield{edition}%
+ \newunit
+ \iffieldundef{maintitle}
+ {\printfield{volume}%
+ \printfield{part}}
+ {}%
+ \newunit
+ \printfield{volumes}%
+ \newunit\newblock
+ \usebibmacro{series+number}%
+ \newunit\newblock
+ \printfield{note}%
+ \newunit\newblock
+ \usebibmacro{publisher+location+date}%
+ \newunit\newblock
+ \usebibmacro{chapter+pages}%
+ \newunit\newblock
+ \iftoggle{bbx:isbn}
+ {\printfield{isbn}}
+ {}%
+ \newunit\newblock
+ \usebibmacro{doi+eprint+url}%
+ \newunit\newblock
+ \usebibmacro{addendum+pubstate}%
+ \setunit{\bibpagerefpunct}\newblock
+ \usebibmacro{pageref}%
+ \newunit\newblock
+ \iftoggle{bbx:related}
+ {\usebibmacro{related:init}%
+ \usebibmacro{related}}
+ {}%
+ \usebibmacro{finentry}}
+
+\DeclareBibliographyDriver{inproceedings}{%
+ \usebibmacro{bibindex}%
+ \usebibmacro{begentry}%
+ \usebibmacro{author/translator+others}%
+ \setunit{\printdelim{nametitledelim}}\newblock
+ \usebibmacro{title}%
+ \newunit
+ \printlist{language}%
+ \newunit\newblock
+ \usebibmacro{byauthor}%
+ \newunit\newblock
+ \usebibmacro{in:}%
+ \usebibmacro{maintitle+booktitle}%
+ \newunit\newblock
+ \usebibmacro{event+venue+date}%
+ \newunit\newblock
+ \usebibmacro{byeditor+others}%
+ \newunit\newblock
+ \iffieldundef{maintitle}
+ {\printfield{volume}%
+ \printfield{part}}
+ {}%
+ \newunit
+ \printfield{volumes}%
+ \newunit\newblock
+ \usebibmacro{series+number}%
+ \newunit\newblock
+ \printfield{note}%
+ \newunit\newblock
+ \printlist{organization}%
+ \newunit
+ \usebibmacro{publisher+location+date}%
+ \newunit\newblock
+ \usebibmacro{chapter+pages}%
+ \newunit\newblock
+ \iftoggle{bbx:isbn}
+ {\printfield{isbn}}
+ {}%
+ \newunit\newblock
+ \usebibmacro{doi+eprint+url}%
+ \newunit\newblock
+ \usebibmacro{addendum+pubstate}%
+ \setunit{\bibpagerefpunct}\newblock
+ \usebibmacro{pageref}%
+ \newunit\newblock
+ \iftoggle{bbx:related}
+ {\usebibmacro{related:init}%
+ \usebibmacro{related}}
+ {}%
+ \usebibmacro{finentry}}
+
+\DeclareBibliographyDriver{dataset}{%
+ \usebibmacro{bibindex}%
+ \usebibmacro{begentry}%
+ \usebibmacro{author/editor+others/translator+others}%
+ \setunit{\printdelim{nametitledelim}}\newblock
+ \usebibmacro{title}%
+ \newunit
+ \printlist{language}%
+ \newunit\newblock
+ \usebibmacro{byauthor}%
+ \newunit\newblock
+ \usebibmacro{byeditor+others}%
+ \newunit\newblock
+ \printfield{type}%
+ \newunit
+ \printfield{edition}%
+ \newunit
+ \printfield{version}%
+ \newunit\newblock
+ \usebibmacro{series+number}%
+ \newunit\newblock
+ \printfield{note}%
+ \newunit\newblock
+ \printlist{organization}%
+ \newunit
+ \usebibmacro{publisher+location+date}%
+ \newunit\newblock
+ \usebibmacro{doi+eprint+url}%
+ \newunit\newblock
+ \usebibmacro{addendum+pubstate}%
+ \setunit{\bibpagerefpunct}\newblock
+ \usebibmacro{pageref}%
+ \newunit\newblock
+ \iftoggle{bbx:related}
+ {\usebibmacro{related:init}%
+ \usebibmacro{related}}
+ {}%
+ \usebibmacro{finentry}}
+
+\DeclareBibliographyDriver{manual}{%
+ \usebibmacro{bibindex}%
+ \usebibmacro{begentry}%
+ \usebibmacro{author/editor}%
+ \setunit{\printdelim{nametitledelim}}\newblock
+ \usebibmacro{title}%
+ \newunit
+ \printlist{language}%
+ \newunit\newblock
+ \usebibmacro{byauthor}%
+ \newunit\newblock
+ \usebibmacro{byeditor}%
+ \newunit\newblock
+ \printfield{edition}%
+ \newunit\newblock
+ \usebibmacro{series+number}%
+ \newunit\newblock
+ \printfield{type}%
+ \newunit
+ \printfield{version}%
+ \newunit
+ \printfield{note}%
+ \newunit\newblock
+ \printlist{organization}%
+ \newunit
+ \usebibmacro{publisher+location+date}%
+ \newunit\newblock
+ \usebibmacro{chapter+pages}%
+ \newunit
+ \printfield{pagetotal}%
+ \newunit\newblock
+ \iftoggle{bbx:isbn}
+ {\printfield{isbn}}
+ {}%
+ \newunit\newblock
+ \usebibmacro{doi+eprint+url}%
+ \newunit\newblock
+ \usebibmacro{addendum+pubstate}%
+ \setunit{\bibpagerefpunct}\newblock
+ \usebibmacro{pageref}%
+ \newunit\newblock
+ \iftoggle{bbx:related}
+ {\usebibmacro{related:init}%
+ \usebibmacro{related}}
+ {}%
+ \usebibmacro{finentry}}
+
+\DeclareBibliographyDriver{misc}{%
+ \usebibmacro{bibindex}%
+ \usebibmacro{begentry}%
+ \usebibmacro{author/editor+others/translator+others}%
+ \setunit{\printdelim{nametitledelim}}\newblock
+ \usebibmacro{title}%
+ \newunit
+ \printlist{language}%
+ \newunit\newblock
+ \usebibmacro{byauthor}%
+ \newunit\newblock
+ \usebibmacro{byeditor+others}%
+ \newunit\newblock
+ \printfield{howpublished}%
+ \newunit\newblock
+ \printfield{type}%
+ \newunit
+ \printfield{version}%
+ \newunit
+ \printfield{note}%
+ \newunit\newblock
+ \usebibmacro{organization+location+date}%
+ \newunit\newblock
+ \usebibmacro{doi+eprint+url}%
+ \newunit\newblock
+ \usebibmacro{addendum+pubstate}%
+ \setunit{\bibpagerefpunct}\newblock
+ \usebibmacro{pageref}%
+ \newunit\newblock
+ \iftoggle{bbx:related}
+ {\usebibmacro{related:init}%
+ \usebibmacro{related}}
+ {}%
+ \usebibmacro{finentry}}
+
+\DeclareBibliographyDriver{online}{%
+ \usebibmacro{bibindex}%
+ \usebibmacro{begentry}%
+ \usebibmacro{author/editor+others/translator+others}%
+ \setunit{\printdelim{nametitledelim}}\newblock
+ \usebibmacro{title}%
+ \newunit
+ \printlist{language}%
+ \newunit\newblock
+ \usebibmacro{byauthor}%
+ \newunit\newblock
+ \usebibmacro{byeditor+others}%
+ \newunit\newblock
+ \printfield{version}%
+ \newunit
+ \printfield{note}%
+ \newunit\newblock
+ \printlist{organization}%
+ \newunit\newblock
+ \usebibmacro{date}%
+ \newunit\newblock
+ \usebibmacro{doi+eprint+url}%
+ \newunit\newblock
+ \usebibmacro{addendum+pubstate}%
+ \setunit{\bibpagerefpunct}\newblock
+ \usebibmacro{pageref}%
+ \newunit\newblock
+ \iftoggle{bbx:related}
+ {\usebibmacro{related:init}%
+ \usebibmacro{related}}
+ {}%
+ \usebibmacro{finentry}}
+
+\DeclareBibliographyDriver{patent}{%
+ \usebibmacro{bibindex}%
+ \usebibmacro{begentry}%
+ \usebibmacro{author}%
+ \setunit{\printdelim{nametitledelim}}\newblock
+ \usebibmacro{title}%
+ \newunit
+ \printlist{language}%
+ \newunit\newblock
+ \usebibmacro{byauthor}%
+ \newunit\newblock
+ \printfield{type}%
+ \setunit*{\addspace}%
+ \printfield{number}%
+ \iflistundef{location}
+ {}
+ {\setunit*{\addspace}%
+ \printtext[parens]{%
+ \printlist[][-\value{listtotal}]{location}}}%
+ \newunit\newblock
+ \usebibmacro{byholder}%
+ \newunit\newblock
+ \printfield{note}%
+ \newunit\newblock
+ \usebibmacro{date}%
+ \newunit\newblock
+ \usebibmacro{doi+eprint+url}%
+ \newunit\newblock
+ \usebibmacro{addendum+pubstate}%
+ \setunit{\bibpagerefpunct}\newblock
+ \usebibmacro{pageref}%
+ \newunit\newblock
+ \iftoggle{bbx:related}
+ {\usebibmacro{related:init}%
+ \usebibmacro{related}}
+ {}%
+ \usebibmacro{finentry}}
+
+\DeclareBibliographyDriver{periodical}{%
+ \usebibmacro{bibindex}%
+ \usebibmacro{begentry}%
+ \usebibmacro{editor}%
+ \setunit{\printdelim{nametitledelim}}\newblock
+ \usebibmacro{title+issuetitle}%
+ \newunit
+ \printlist{language}%
+ \newunit\newblock
+ \usebibmacro{byeditor}%
+ \newunit\newblock
+ \printfield{note}%
+ \newunit\newblock
+ \iftoggle{bbx:isbn}
+ {\printfield{issn}}
+ {}%
+ \newunit\newblock
+ \usebibmacro{doi+eprint+url}%
+ \newunit\newblock
+ \usebibmacro{addendum+pubstate}%
+ \setunit{\bibpagerefpunct}\newblock
+ \usebibmacro{pageref}%
+ \newunit\newblock
+ \iftoggle{bbx:related}
+ {\usebibmacro{related:init}%
+ \usebibmacro{related}}
+ {}%
+ \usebibmacro{finentry}}
+
+\DeclareBibliographyDriver{proceedings}{%
+ \usebibmacro{bibindex}%
+ \usebibmacro{begentry}%
+ \usebibmacro{editor+others}%
+ \setunit{\printdelim{nametitledelim}}\newblock
+ \usebibmacro{maintitle+title}%
+ \newunit
+ \printlist{language}%
+ \newunit\newblock
+ \usebibmacro{event+venue+date}%
+ \newunit\newblock
+ \usebibmacro{byeditor+others}%
+ \newunit\newblock
+ \iffieldundef{maintitle}
+ {\printfield{volume}%
+ \printfield{part}}
+ {}%
+ \newunit
+ \printfield{volumes}%
+ \newunit\newblock
+ \usebibmacro{series+number}%
+ \newunit\newblock
+ \printfield{note}%
+ \newunit\newblock
+ \printlist{organization}%
+ \newunit
+ \usebibmacro{publisher+location+date}%
+ \newunit\newblock
+ \usebibmacro{chapter+pages}%
+ \newunit
+ \printfield{pagetotal}%
+ \newunit\newblock
+ \iftoggle{bbx:isbn}
+ {\printfield{isbn}}
+ {}%
+ \newunit\newblock
+ \usebibmacro{doi+eprint+url}%
+ \newunit\newblock
+ \usebibmacro{addendum+pubstate}%
+ \setunit{\bibpagerefpunct}\newblock
+ \usebibmacro{pageref}%
+ \newunit\newblock
+ \iftoggle{bbx:related}
+ {\usebibmacro{related:init}%
+ \usebibmacro{related}}
+ {}%
+ \usebibmacro{finentry}}
+
+\DeclareBibliographyDriver{report}{%
+ \usebibmacro{bibindex}%
+ \usebibmacro{begentry}%
+ \usebibmacro{author}%
+ \setunit{\printdelim{nametitledelim}}\newblock
+ \usebibmacro{title}%
+ \newunit
+ \printlist{language}%
+ \newunit\newblock
+ \usebibmacro{byauthor}%
+ \newunit\newblock
+ \printfield{type}%
+ \setunit*{\addspace}%
+ \printfield{number}%
+ \newunit\newblock
+ \printfield{version}%
+ \newunit
+ \printfield{note}%
+ \newunit\newblock
+ \usebibmacro{institution+location+date}%
+ \newunit\newblock
+ \usebibmacro{chapter+pages}%
+ \newunit
+ \printfield{pagetotal}%
+ \newunit\newblock
+ \iftoggle{bbx:isbn}
+ {\printfield{isrn}}
+ {}%
+ \newunit\newblock
+ \usebibmacro{doi+eprint+url}%
+ \newunit\newblock
+ \usebibmacro{addendum+pubstate}%
+ \setunit{\bibpagerefpunct}\newblock
+ \usebibmacro{pageref}%
+ \newunit\newblock
+ \iftoggle{bbx:related}
+ {\usebibmacro{related:init}%
+ \usebibmacro{related}}
+ {}%
+ \usebibmacro{finentry}}
+
+\DeclareBibliographyDriver{thesis}{%
+ \usebibmacro{bibindex}%
+ \usebibmacro{begentry}%
+ \usebibmacro{author}%
+ \setunit{\printdelim{nametitledelim}}\newblock
+ \usebibmacro{title}%
+ \newunit
+ \printlist{language}%
+ \newunit\newblock
+ \usebibmacro{byauthor}%
+ \newunit\newblock
+ \printfield{note}%
+ \newunit\newblock
+ \printfield{type}%
+ \newunit
+ \usebibmacro{institution+location+date}%
+ \newunit\newblock
+ \usebibmacro{chapter+pages}%
+ \newunit
+ \printfield{pagetotal}%
+ \newunit\newblock
+ \iftoggle{bbx:isbn}
+ {\printfield{isbn}}
+ {}%
+ \newunit\newblock
+ \usebibmacro{doi+eprint+url}%
+ \newunit\newblock
+ \usebibmacro{addendum+pubstate}%
+ \setunit{\bibpagerefpunct}\newblock
+ \usebibmacro{pageref}%
+ \newunit\newblock
+ \iftoggle{bbx:related}
+ {\usebibmacro{related:init}%
+ \usebibmacro{related}}
+ {}%
+ \usebibmacro{finentry}}
+
+\DeclareBibliographyDriver{unpublished}{%
+ \usebibmacro{bibindex}%
+ \usebibmacro{begentry}%
+ \usebibmacro{author}%
+ \setunit{\printdelim{nametitledelim}}\newblock
+ \usebibmacro{title}%
+ \newunit
+ \printlist{language}%
+ \newunit\newblock
+ \usebibmacro{byauthor}%
+ \newunit\newblock
+ \printfield{howpublished}%
+ \newunit\newblock
+ \printfield{type}%
+ \newunit\newblock
+ \usebibmacro{event+venue+date}%
+ \newunit\newblock
+ \printfield{note}%
+ \newunit\newblock
+ \usebibmacro{location+date}%
+ \newunit\newblock
+ \usebibmacro{doi+eprint+url}%
+ \newunit\newblock
+ \usebibmacro{addendum+pubstate}%
+ \setunit{\bibpagerefpunct}\newblock
+ \usebibmacro{pageref}%
+ \newunit\newblock
+ \iftoggle{bbx:related}
+ {\usebibmacro{related:init}%
+ \usebibmacro{related}}
+ {}%
+ \usebibmacro{finentry}}
+
+\DeclareBibliographyDriver{shorthand}{%
+ \usedriver
+ {\DeclareNameAlias{sortname}{default}}
+ {\thefield{entrytype}}%
+ \finentry}
+
+\DeclareBibliographyDriver{set}{%
+ \entryset{}{}%
+ \newunit\newblock
+ \usebibmacro{setpageref}%
+ \finentry}
+
+\DeclareBibliographyAlias{mvbook}{book}
+\DeclareBibliographyAlias{bookinbook}{inbook}
+\DeclareBibliographyAlias{suppbook}{inbook}
+\DeclareBibliographyAlias{mvcollection}{collection}
+\DeclareBibliographyAlias{suppcollection}{incollection}
+\DeclareBibliographyAlias{mvproceedings}{proceedings}
+\DeclareBibliographyAlias{reference}{collection}
+\DeclareBibliographyAlias{mvreference}{reference}
+\DeclareBibliographyAlias{inreference}{incollection}
+\DeclareBibliographyAlias{suppperiodical}{article}
+\DeclareBibliographyAlias{review}{article}
+\DeclareBibliographyAlias{software}{misc}
+\DeclareBibliographyAlias{*}{misc}
+
+\newbibmacro*{maintitle+title}{%
+ \iffieldsequal{maintitle}{title}
+ {\clearfield{maintitle}%
+ \clearfield{mainsubtitle}%
+ \clearfield{maintitleaddon}}
+ {\iffieldundef{maintitle}
+ {}
+ {\usebibmacro{maintitle}%
+ \newunit\newblock
+ \iffieldundef{volume}
+ {}
+ {\printfield{volume}%
+ \printfield{part}%
+ \setunit{\addcolon\space}}}}%
+ \usebibmacro{title}%
+ \newunit}
+
+\newbibmacro*{maintitle+booktitle}{%
+ \iffieldundef{maintitle}
+ {}
+ {\usebibmacro{maintitle}%
+ \newunit\newblock
+ \iffieldundef{volume}
+ {}
+ {\printfield{volume}%
+ \printfield{part}%
+ \setunit{\addcolon\space}}}%
+ \usebibmacro{booktitle}%
+ \newunit}
+
+\newbibmacro*{journal+issuetitle}{%
+ \usebibmacro{journal}%
+ \setunit*{\addspace}%
+ \iffieldundef{series}
+ {}
+ {\newunit
+ \printfield{series}%
+ \setunit{\addspace}}%
+ \usebibmacro{volume+number+eid}%
+ \setunit{\addspace}%
+ \usebibmacro{issue+date}%
+ \setunit{\addcolon\space}%
+ \usebibmacro{issue}%
+ \newunit}
+
+\newbibmacro*{volume+number+eid}{%
+ \printfield{volume}%
+ \setunit*{\adddot}%
+ \printfield{number}%
+ \setunit{\bibeidpunct}%
+ \printfield{eid}}
+
+\newbibmacro*{title+issuetitle}{%
+ \usebibmacro{periodical}%
+ \setunit*{\addspace}%
+ \iffieldundef{series}
+ {}
+ {\newunit
+ \printfield{series}%
+ \setunit{\addspace}}%
+ \usebibmacro{volume+number+eid}%
+ \setunit{\addspace}%
+ \usebibmacro{issue+date}%
+ \setunit{\addcolon\space}%
+ \usebibmacro{issue}%
+ \newunit}
+
+\newbibmacro*{issue+date}{%
+ \printtext[parens]{%
+ \printfield{issue}%
+ \setunit*{\addspace}%
+ \usebibmacro{date}}%
+ \newunit}
+
+\newbibmacro*{event+venue+date}{%
+ \printfield{eventtitle}%
+ \newunit
+ \printfield{eventtitleaddon}%
+ \ifboolexpr{
+ test {\iffieldundef{venue}}
+ and
+ test {\iffieldundef{eventyear}}
+ }
+ {}
+ {\setunit{\addspace}%
+ \printtext[parens]{%
+ \printfield{venue}%
+ \setunit*{\addcomma\space}%
+ \printeventdate}}%
+ \newunit}
+
+\newbibmacro*{series+number}{%
+ \printfield{series}%
+ \setunit*{\addspace}%
+ \printfield{number}%
+ \newunit}
+
+\newbibmacro*{publisher+location+date}{%
+ \printlist{location}%
+ \iflistundef{publisher}
+ {\setunit*{\addcomma\space}}
+ {\setunit*{\addcolon\space}}%
+ \printlist{publisher}%
+ \setunit*{\addcomma\space}%
+ \usebibmacro{date}%
+ \newunit}
+
+\newbibmacro*{institution+location+date}{%
+ \printlist{location}%
+ \iflistundef{institution}
+ {\setunit*{\addcomma\space}}
+ {\setunit*{\addcolon\space}}%
+ \printlist{institution}%
+ \setunit*{\addcomma\space}%
+ \usebibmacro{date}%
+ \newunit}
+
+\newbibmacro*{organization+location+date}{%
+ \printlist{location}%
+ \iflistundef{organization}
+ {\setunit*{\addcomma\space}}
+ {\setunit*{\addcolon\space}}%
+ \printlist{organization}%
+ \setunit*{\addcomma\space}%
+ \usebibmacro{date}%
+ \newunit}
+
+\newbibmacro*{location+date}{%
+ \printlist{location}%
+ \setunit*{\addcomma\space}%
+ \usebibmacro{date}%
+ \newunit}
+
+\newbibmacro*{chapter+pages}{%
+ \printfield{chapter}%
+ \setunit{\bibpagespunct}%
+ \printfield{eid}%
+ \setunit{\bibpagespunct}%
+ \printfield{pages}%
+ \newunit}
+
+\newbibmacro*{note+pages}{%
+ \printfield{note}%
+ \setunit{\bibpagespunct}%
+ \printfield{pages}%
+ \newunit}
+
+\newbibmacro*{doi+eprint+url}{%
+ \iftoggle{bbx:doi}
+ {\printfield{doi}}
+ {}%
+ \newunit\newblock
+ \iftoggle{bbx:eprint}
+ {\usebibmacro{eprint}}
+ {}%
+ \newunit\newblock
+ \iftoggle{bbx:url}
+ {\usebibmacro{url+urldate}}
+ {}}
+
+\newbibmacro*{addendum+pubstate}{%
+ \printfield{addendum}%
+ \newunit\newblock
+ \printfield{pubstate}}
+
+\newcounter{bbx:relatedcount}
+\newcounter{bbx:relatedtotal}
+
+\newbibmacro*{related:init}{%
+ \csundef{bbx:relatedloop}}
+
+\newbibmacro*{begrelated}{}
+\newbibmacro*{endrelated}{}
+\newbibmacro*{begrelatedloop}{}
+\newbibmacro*{endrelatedloop}{}
+
+\def\ifrelatedloop{%
+ \ifboolexpr{ test {\xifinlistcs{\strfield{entrykey}}{bbx:relatedloop}}
+ or test {\xifinlistcs{\strfield{clonesourcekey}}{bbx:relatedloop}} }}
+
+\newbibmacro*{related}{%
+ \ifboolexpr{ test {\iffieldundef{related}} or test {\ifrelatedloop} }
+ {}
+ {\ifcsundef{begrelateddelim\strfield{relatedtype}}
+ {\printunit{\begrelateddelim}}
+ {\printunit{\csuse{begrelateddelim\strfield{relatedtype}}}}%
+ \usebibmacro{begrelated}%
+ \def\bbx@tempa{}%
+ \setcounter{bbx:relatedtotal}{0}%
+ \def\do##1{%
+ \entrydata{##1}{%
+ \ifrelatedloop
+ {}
+ {\stepcounter{bbx:relatedtotal}%
+ \gappto{\bbx@tempa}{##1,}}}}%
+ \docsvfield{related}%
+ \restorefield{related}{\bbx@tempa}%
+ \ifnumgreater{\value{bbx:relatedtotal}}{0}
+ {\listcsxadd{bbx:relatedloop}{\strfield{entrykey}}%
+ \iffieldundef{clonesourcekey}
+ {}
+ {\listcsxadd{bbx:relatedloop}{\strfield{clonesourcekey}}}%
+ \setcounter{bbx:relatedcount}{0}%
+ \def\do{%
+ \stepcounter{bbx:relatedcount}%
+ \ifnumgreater{\value{bbx:relatedcount}}{1}
+ {\ifcsundef{relateddelim\strfield{relatedtype}}
+ {\printunit{\relateddelim}}
+ {\expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\printunit
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter{%
+ \csuse{relateddelim\strfield{relatedtype}}}}}
+ {}}%
+ \ifbibmacroundef{related:\strfield{relatedtype}}
+ {\appto{\do}{\usebibmacro{related:default}}}
+ {\appto{\do}{\usebibmacro*{related:\strfield{relatedtype}}}}%
+ \iffieldformatundef{related:\strfield{relatedtype}}
+ {\def\bbx@tempa{related}}
+ {\def\bbx@tempa{related:\strfield{relatedtype}}}%
+ \iffieldformatundef{relatedstring:\strfield{relatedtype}}
+ {\def\bbx@tempb{relatedstring:default}}
+ {\def\bbx@tempb{relatedstring:\strfield{relatedtype}}}%
+ \printtext[\bbx@tempa]{%
+ \usebibmacro{begrelatedloop}%
+ \iffieldundef{relatedstring}
+ {\ifboolexpr{
+ test {\ifnumgreater{\value{bbx:relatedtotal}}{1}}
+ and
+ test {\ifbibxstring{\thefield{relatedtype}s}}
+ }
+ {\printtext[\bbx@tempb]{%
+ \bibstring[\mkrelatedstringtext]{\thefield{relatedtype}s}}}
+ {\iffieldbibstring{relatedtype}
+ {\printtext[\bbx@tempb]{%
+ \bibstring[\mkrelatedstringtext]{\thefield{relatedtype}}}}
+ {}}}
+ {\iffieldbibstring{relatedstring}
+ {\printtext[\bbx@tempb]{%
+ \bibstring[\mkrelatedstringtext]{\thefield{relatedstring}}}}
+ {\printfield[\bbx@tempb]{relatedstring}}}%
+ \docsvfield{related}%
+ \usebibmacro{endrelatedloop}}}%
+ {}%
+ \usebibmacro{endrelated}}}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/bbx/verbose-ibid-ms.bbx b/macros/latex/contrib/biblatex-ms/latex/bbx/verbose-ibid-ms.bbx
new file mode 100644
index 0000000000..9283a0efc8
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/bbx/verbose-ibid-ms.bbx
@@ -0,0 +1,6 @@
+\ProvidesFile{verbose-ibid-ms.bbx}
+[\abx@bbxid]
+
+\RequireBibliographyStyle{authortitle}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/bbx/verbose-inote-ms.bbx b/macros/latex/contrib/biblatex-ms/latex/bbx/verbose-inote-ms.bbx
new file mode 100644
index 0000000000..c47a379cbb
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/bbx/verbose-inote-ms.bbx
@@ -0,0 +1,6 @@
+\ProvidesFile{verbose-inote-ms.bbx}
+[\abx@bbxid]
+
+\RequireBibliographyStyle{authortitle}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/bbx/verbose-ms.bbx b/macros/latex/contrib/biblatex-ms/latex/bbx/verbose-ms.bbx
new file mode 100644
index 0000000000..6fbc74e1fa
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/bbx/verbose-ms.bbx
@@ -0,0 +1,6 @@
+\ProvidesFile{verbose-ms.bbx}
+[\abx@bbxid]
+
+\RequireBibliographyStyle{authortitle}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/bbx/verbose-note-ms.bbx b/macros/latex/contrib/biblatex-ms/latex/bbx/verbose-note-ms.bbx
new file mode 100644
index 0000000000..16d1454ceb
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/bbx/verbose-note-ms.bbx
@@ -0,0 +1,6 @@
+\ProvidesFile{verbose-note-ms.bbx}
+[\abx@bbxid]
+
+\RequireBibliographyStyle{authortitle}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/bbx/verbose-trad1-ms.bbx b/macros/latex/contrib/biblatex-ms/latex/bbx/verbose-trad1-ms.bbx
new file mode 100644
index 0000000000..0427575bac
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/bbx/verbose-trad1-ms.bbx
@@ -0,0 +1,6 @@
+\ProvidesFile{verbose-trad1-ms.bbx}
+[\abx@bbxid]
+
+\RequireBibliographyStyle{authortitle}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/bbx/verbose-trad2-ms.bbx b/macros/latex/contrib/biblatex-ms/latex/bbx/verbose-trad2-ms.bbx
new file mode 100644
index 0000000000..51d05be547
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/bbx/verbose-trad2-ms.bbx
@@ -0,0 +1,6 @@
+\ProvidesFile{verbose-trad2-ms.bbx}
+[\abx@bbxid]
+
+\RequireBibliographyStyle{authortitle}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/bbx/verbose-trad3-ms.bbx b/macros/latex/contrib/biblatex-ms/latex/bbx/verbose-trad3-ms.bbx
new file mode 100644
index 0000000000..ab0d2ca4e5
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/bbx/verbose-trad3-ms.bbx
@@ -0,0 +1,6 @@
+\ProvidesFile{verbose-trad3-ms.bbx}
+[\abx@bbxid]
+
+\RequireBibliographyStyle{authortitle}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/biblatex-ms.cfg b/macros/latex/contrib/biblatex-ms/latex/biblatex-ms.cfg
new file mode 100644
index 0000000000..353d85b279
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/biblatex-ms.cfg
@@ -0,0 +1,5 @@
+\ProvidesFile{biblatex-ms.cfg}
+
+% Put your definitions here.
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/biblatex-ms.def b/macros/latex/contrib/biblatex-ms/latex/biblatex-ms.def
new file mode 100644
index 0000000000..c5c5bfe3ea
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/biblatex-ms.def
@@ -0,0 +1,3206 @@
+\ProvidesFile{biblatex-ms.def}
+[\abx@cptid]
+
+% ------------------------------------------------------------------
+% FORMATTING COMMANDS
+% ------------------------------------------------------------------
+
+% Generic formatting commands and hooks
+% ------------------------------------------------------------------
+
+% Used in citations, bibliography and bibliography lists
+
+% Define namepart keys from datamodel constant list
+% \namepart<namepart> -> \namepartfamily
+% \namepart<namepart>i -> \namepartfamilyi
+% \namepart<namepart>un -> \namepartfamilyun
+\def\do#1{%
+ \csdef{mkbibname#1}##1{##1}%
+ \blx@kv@defkey{blx@opt@namepart}{#1}{\csdef{namepart#1}{##1}}%
+ \blx@kv@defkey{blx@opt@namepart}{#1i}{\csdef{namepart#1i}{##1}}%
+ \blx@kv@defkey{blx@opt@namepart}{#1un}{\csdef{namepart#1un}{##1}}}
+\expandafter\docsvlist\expandafter{\blx@datamodel@constant@nameparts}
+
+% legacy aliases
+% set empty defaults so we can check if they have been redefined
+\let\mkbibnamefirst\@empty
+\let\mkbibnamelast\@empty
+\let\mkbibnameaffix\@empty
+
+\AtEndPreamble{%
+ \ifdefempty\mkbibnamelast
+ {\let\@mkbibnamelastsaved\mkbibnamefamily}% not redefined by user
+ {\blx@warning@noline{%
+ Attempt to redefine deprecated '\string\mkbibnamelast'.\MessageBreak
+ Please use '\string\mkbibnamefamily' instead.\MessageBreak
+ Using '\string\mkbibnamefamily'}%
+ \let\@mkbibnamelastsaved\mkbibnamelast
+ \let\mkbibnamefamily\@mkbibnamelastsaved}%
+ % Now redefine it in case it's used
+ \def\mkbibnamelast{%
+ \blx@warning@noline{%
+ '\string\mkbibnamelast' is deprecated.\MessageBreak
+ Please use '\string\mkbibnamefamily'.\MessageBreak
+ Using '\string\mkbibnamefamily'}%
+ \@mkbibnamelastsaved}
+
+ \ifdefempty\mkbibnamefirst
+ {\let\@mkbibnamefirstsaved\mkbibnamegiven}% not redefined by user
+ {\blx@warning@noline{%
+ Attempt to redefine deprecated '\string\mkbibnamefirst'.\MessageBreak
+ Please use '\string\mkbibnamegiven' instead.\MessageBreak
+ Using '\string\mkbibnamegiven'}%
+ \let\@mkbibnamefirstsaved\mkbibnamefirst
+ \let\mkbibnamegiven\@mkbibnamefirstsaved}%
+ % Now redefine it in case it's used
+ \def\mkbibnamefirst{%
+ \blx@warning@noline{%
+ '\string\mkbibnamefirst' is deprecated.\MessageBreak
+ Please use '\string\mkbibnamegiven'.\MessageBreak
+ Using '\string\mkbibnamegiven'}%
+ \@mkbibnamefirstsaved}
+
+ \ifdefempty\mkbibnameaffix
+ {\let\@mkbibnameaffixsaved\mkbibnamesuffix}% not redefined by user
+ {\blx@warning@noline{%
+ Attempt to redefine deprecated '\string\mkbibnameaffix'.\MessageBreak
+ Please use '\string\mkbibnamesuffix' instead.\MessageBreak
+ Using '\string\mkbibnamesuffix'}%
+ \let\@mkbibnameaffixsaved\mkbibnameaffix
+ \let\mkbibnamesuffix\@mkbibnameaffixsaved}%
+ % Now redefine it in case it's used
+ \def\mkbibnameaffix{%
+ \blx@warning@noline{%
+ '\string\mkbibnameaffix' is deprecated.\MessageBreak
+ Please use '\string\mkbibnamesuffix'.\MessageBreak
+ Using \string\mkbibnamesuffix}%
+ \@mkbibnameaffixsaved}}
+
+\newcommand*{\bibellipsis}{[\textellipsis\unkern]\midsentence}
+
+% Delimiters used in citations, bibliography and bibliography lists
+\DeclareDelimFormat{multinamedelim}{\addcomma\space}
+\DeclareDelimFormat{finalnamedelim}{%
+ \ifnumgreater{\value{liststop}}{2}{\finalandcomma}{}%
+ \addspace\bibstring{and}\space}
+\DeclareDelimFormat{revsdnamedelim}{}
+\DeclareDelimFormat{andothersdelim}{\addspace}
+
+\DeclareDelimFormat{multilistdelim}{\addcomma\space}
+\DeclareDelimFormat{finallistdelim}{%
+ \ifnumgreater{\value{liststop}}{2}{\finalandcomma}{}%
+ \addspace\bibstring{and}\space}
+\DeclareDelimFormat{andmoredelim}{\addspace}
+
+\newcommand*{\multicitedelim}{\addsemicolon\space}
+\newcommand*{\multicitesubentrydelim}{\addcomma}
+\newcommand*{\multiciterangedelim}{\bibrangedash}
+\newcommand*{\multicitesubentryrangedelim}{\multiciterangedelim}
+
+\newcommand*{\compcitedelim}{\addcomma\space}
+
+\newcommand*{\supercitedelim}{\addcomma}
+\newcommand*{\supercitesubentrydelim}{\supercitedelim}
+\newcommand*{\superciterangedelim}{\bibrangedash}
+\newcommand*{\supercitesubentryrangedelim}{\superciterangedelim}
+
+\DeclareDelimFormat{prenotedelim}{\addspace}
+\DeclareDelimFormat{postnotedelim}{\addcomma\space}
+\DeclareDelimAlias{multiprenotedelim}{prenotedelim}
+\DeclareDelimAlias{multipostnotedelim}{postnotedelim}
+\DeclareDelimFormat{extpostnotedelim}{\addspace}
+\newcommand*{\volcitedelim}{\addcomma\space}
+\newcommand*{\textcitedelim}{%
+ \iffinalcitedelim
+ {\ifnumgreater{\value{textcitetotal}}{2}
+ {\iftextcitepunct{\finalandsemicolon}{\finalandcomma}}{}%
+ \addspace\bibstring{and}}
+ {\iftextcitepunct{\addsemicolon}{\addcomma}}%
+ \space}
+
+
+% context-sensitive delimiters
+% retain compatibility with \labelnamepunct et al.
+% The seemingly redundant definitions are needed because
+% hard-coded punctuation was replaced by context-sensitive
+% delimiters, changes to here need to be made explicitly
+% to avoid unwanted effects of redefining the global delimiter.
+\DeclareDelimFormat{authortypedelim}{\addcomma\space}
+\DeclareDelimFormat{editortypedelim}{\addcomma\space}
+\DeclareDelimFormat{translatortypedelim}{\addcomma\space}
+\DeclareDelimFormat{namelabeldelim}{\addspace}
+\DeclareDelimFormat{nametitledelim}{\addcomma\space}
+\DeclareDelimFormat[bib,biblist]{nametitledelim}{\labelnamepunct}
+\DeclareDelimFormat[textcite]{nametitledelim}{\addspace}
+\DeclareDelimFormat{nameyeardelim}{\addspace}
+\DeclareDelimFormat[textcite]{nameyeardelim}{\addspace}
+\DeclareDelimFormat[bib,biblist]{nameyeardelim}{\addspace}
+\DeclareDelimFormat{nonameyeardelim}{\addspace}
+\DeclareDelimFormat[textcite]{nonameyeardelim}{\addspace}
+\DeclareDelimFormat[bib,biblist]{nonameyeardelim}{\addspace}
+\DeclareDelimFormat{dateeradelim}{\addspace}
+\DeclareDelimFormat{datecircadelim}{\addspace}
+
+% This is a provisional definition for \iffinalcitedelim{<true>}{<false>}, a
+% test that should expand <true> if the next non-compact citation delimiter
+% is the last one in the citation list printed by \textcite or \textcites.
+\newcommand*{\iffinalcitedelim}{\@secondoftwo}
+
+% Expand <true> if the citation labels in the citation list printed by \textcite
+% or \textcites contains the serial comma \finalandcomma
+\newcommand*{\iftextcitepunct}{%
+ \ifboolexpr{ not test {\ifdefempty{\finalandsemicolon}}
+ and test {\ifnumgreater{\value{textcitemaxnames}}{2}} }}
+
+% Counters for the number of citation labels separated by non-compact delimiters
+% in the citation list printed by \textcite or \textcites. Counter values should
+% be managed by the citation style.
+\newcounter{textcitecount}
+\newcounter{textcitetotal}
+\setcounter{textcitecount}{0}
+\setcounter{textcitetotal}{0}
+
+% Counters for the maximum number of names among citation labels in the citation
+% list printed by \textcite or \textcites. Counter value should be managed by
+% the citation style.
+\newcounter{textcitemaxnames}
+\setcounter{textcitemaxnames}{0}
+
+% Used in the bibliography and bibliography lists
+
+\newcommand*{\newunitpunct}{\addperiod\space}
+\newcommand*{\entrysetpunct}{\addsemicolon\space}
+\newcommand*{\finentrypunct}{\addperiod}
+\newcommand*{\labelnamepunct}{\newunitpunct}
+\newcommand*{\subtitlepunct}{\newunitpunct}
+\newcommand*{\intitlepunct}{\addcolon\space}
+\newcommand*{\bibpagespunct}{\addcomma\space}
+\newcommand*{\bibeidpunct}{\addcomma\space}
+\newcommand*{\bibpagerefpunct}{\addspace}
+\newcommand*{\revsdnamepunct}{\addcomma}
+\newcommand*{\bibnamedash}{%
+ \ifdimless{\leftmargin}{0.75em}
+ {\mbox{\textemdash\space}}
+ {\makebox[\leftmargin][l]{%
+ \ifdimless{\leftmargin}{1.25em}
+ {\textendash}
+ {\textemdash}}}}
+\newcommand*{\relatedpunct}{\addspace}
+\newcommand*{\relateddelim}{\adddot\par\nobreak}
+\newcommand*{\begrelateddelim}{\newunitpunct}
+\newcommand*{\begrelateddelimmultivolume}{\newunitpunct\par\nobreak}
+% Examples of use, uncommenting these would break backwards compatibility
+%\newcommand*{\begrelateddelimorigpubin}{\addspace}
+%\newcommand*{\begrelateddelimorigpubas}{\addspace}
+\newcommand{\mkrelatedstringtext}{\textmainlang}
+
+% Used for indexing
+
+\newcommand*{\bibindexnamedelima}{ }
+\newcommand*{\bibindexnamedelimb}{ }
+\newcommand*{\bibindexnamedelimc}{ }
+\newcommand*{\bibindexnamedelimd}{ }
+\newcommand*{\bibindexnamedelimi}{ }
+\newcommand*{\bibindexinitperiod}{.}
+\newcommand*{\bibindexinitdelim}{ }
+\newcommand*{\bibindexinithyphendelim}{.-}
+
+% \bibsetup is a generic hook controlling the (low-level) layout of
+% the bibliography and bibliography lists. The default
+% definition should work fine in most cases.
+% There are a few other penalties and parameters that could be adjusted
+% here, but we don't do that by default for backwards compatibility
+% reasons.
+% * \finalhyphendemerits can be set to 0 to allow hyphenation
+% in the penultimate line
+
+\newcommand*{\bibsetup}{%
+ \interlinepenalty=5000\relax
+ \widowpenalty=10000\relax
+ \clubpenalty=10000\relax
+ \raggedbottom
+ \frenchspacing
+ \biburlsetup}
+
+% The penalties above are not specific to biblatex. These are
+% low-level TeX features. \interlinepenalty is the penalty assigned
+% to page breaks within a paragraph (i.e., in this case, a
+% bibliography entry); \clubpenalty is an additional penalty
+% assigned to page breaks after the first line of a paragraph;
+% \widowpenalty is an additional penalty assigned to page breaks
+% before the last line of a paragraph. Note that the value 10000
+% means 'infinite' as far as TeX is concerned. Setting a penalty to
+% 10000 will unconditionally suppress the respective breakpoint.
+%
+% The net effect of the above settings is as follows. Breaking a
+% bibliography entry across pages is discouraged, but not suppressed
+% altogether. If a bibliography entry spans less than four lines,
+% TeX will always keep it on one page. If it spans four or more
+% lines, it may be broken across pages, provided that there are at
+% least two lines on the page before and after the break.
+%
+% These penalties should normally be used in conjunction with
+% \raggedbottom. If you don't like that and remove \raggedbottom
+% from the definition of \bibsetup, make sure to provide some
+% stretchability between bibliography entries by setting \bibitemsep
+% to a suitable value, e.g.:
+%
+% \setlength{\bibitemsep}{0.5\baselineskip plus 0.5\baselineskip}
+%
+% Using \frenchspacing in the bibliography is recommended. If you
+% want more visual separation, try the package option 'block=space'.
+% This will yield better results than \nonfrenchspacing.
+
+% If \frenchspacing is removed here, it may also have to be removed
+% from \blx@beglang@spacefactors, for example with
+% \let\blx@beglang@spacefactors\@empty
+
+% \citesetup is a generic hook for citations.
+
+\newcommand*{\citesetup}{%
+ \biburlsetup}
+
+% Local setup for \url; see comments in url.sty for details.
+
+\newcounter{biburlbigbreakpenalty}
+\newcounter{biburlbreakpenalty}
+\newcounter{biburlnumpenalty}
+\newcounter{biburlucpenalty}
+\newcounter{biburllcpenalty}
+
+\setcounter{biburlbigbreakpenalty}{100}
+\setcounter{biburlbreakpenalty}{200}
+
+\newmuskip\biburlbigskip
+\newmuskip\biburlnumskip
+\newmuskip\biburlucskip
+\newmuskip\biburllcskip
+
+% I'd have preferred \setlength here, but calc does not support
+% muglue (yet?).
+% https://github.com/plk/biblatex/issues/889
+% See also https://tex.stackexchange.com/q/188215/
+\biburlbigskip=0mu plus 3mu\relax
+\biburlnumskip=0mu\relax
+\biburlucskip=0mu\relax
+\biburllcskip=0mu\relax
+
+\newcommand*{\biburlsetup}{%
+ \Urlmuskip\biburlbigskip
+ \mathchardef\UrlBigBreakPenalty=\value{biburlbigbreakpenalty}\relax
+ \mathchardef\UrlBreakPenalty=\value{biburlbreakpenalty}\relax
+ \def\UrlBigBreaks{\do\:\do\-}%
+ \def\UrlBreaks{%
+ \do\.\do\@\do\/\do\\\do\!\do\_\do\|\do\;\do\>\do\]\do\)\do\}%
+ \do\,\do\?\do\'\do\+\do\=\do\#\do\$\do\&\do\*\do\^\do\"}%
+ \ifnumgreater{\value{biburlnumpenalty}}{0}
+ {\def\do##1{%
+ \appto\UrlSpecials{%
+ \do##1{%
+ \mathchar`##1
+ \mskip\biburlnumskip
+ \penalty\value{biburlnumpenalty}}}}%
+ \do\1\do\2\do\3\do\4\do\5\do\6\do\7\do\8\do\9\do\0}
+ {}%
+ \ifnumgreater{\value{biburlucpenalty}}{0}
+ {\def\do##1{%
+ \appto\UrlSpecials{%
+ \do##1{%
+ \mathchar`##1
+ \mskip\biburlucskip
+ \penalty\value{biburlucpenalty}}}}%
+ \do\A\do\B\do\C\do\D\do\E\do\F\do\G\do\H\do\I\do\J
+ \do\K\do\L\do\M\do\N\do\O\do\P\do\Q\do\R\do\S\do\T
+ \do\U\do\V\do\W\do\X\do\Y\do\Z}
+ {}%
+ \ifnumgreater{\value{biburllcpenalty}}{0}
+ {\def\do##1{%
+ \appto\UrlSpecials{%
+ \do##1{%
+ \mathchar`##1
+ \mskip\biburllcskip
+ \penalty\value{biburllcpenalty}}}}%
+ \do\a\do\b\do\c\do\d\do\e\do\f\do\g\do\h\do\i\do\j
+ \do\k\do\l\do\m\do\n\do\o\do\p\do\q\do\r\do\s\do\t
+ \do\u\do\v\do\w\do\x\do\y\do\z}
+ {}%
+ \let\do=\noexpand}
+
+% The above code allows linebreaks before numbers and letters.
+% This is often the only way to break DOIs. It also allows breaks
+% after hyphens and adjusts \Urlmuskip to add some stretchability
+% to URLs.
+
+% The default font of the bibliography and the bibliography lists.
+% We simply reset the current font to the global defaults.
+
+\newcommand*{\bibfont}{\normalfont\normalsize}
+
+% Some length registers which may be used to fine-tune the
+% (high-level) layout of the bibliography.
+
+% Default \bibhang to 1em if \parindent is 0 for some reason
+\setlength{\bibhang}{\ifnumequal{\parindent}{0}{1em}{\parindent}}
+\setlength{\biblabelsep}{2\labelsep}
+\setlength{\bibitemsep}{\itemsep}
+\setlength{\bibnamesep}{0pt}
+\setlength{\bibinitsep}{0pt}
+\setlength{\bibparsep}{0pt}
+
+% Miscellaneous facilities
+% ------------------------------------------------------------------
+
+% The counter 'abbrvpenalty' holds the penalty used in short or
+% abbreviated bibliography strings. For example, a linebreak in
+% expressions such as "et al." or "ed. by" is unfortunate, but should
+% still be possible to prevent overfull boxes. We use TeX's
+% \hyphenpenalty (normally 50) as the default value. The idea is
+% making TeX treat the whole expression as if it were a single,
+% hyphenatable word as far as line-breaking is concerned. If you
+% dislike such linebreaks, use a higher value. If you do not mind
+% them at all, set this counter to zero. If you want to suppress them
+% unconditionally, set it to 10000.
+\defcounter{abbrvpenalty}{\hyphenpenalty}
+
+% The counter 'highnamepenalty' also holds a penalty affecting the
+% line-breaking of names. This penalty is inserted between smaller
+% chunks of a name, for example between the first and the middle
+% name. The default value is \hyphenpenalty. If you dislike such
+% linebreaks, use a higher value. If you do not mind them at all,
+% set this counter to zero. If you prefer the traditional BibTeX
+% behavior, set it to 10000.
+\defcounter{highnamepenalty}{\hyphenpenalty}
+
+% The counter 'lownamepenalty' holds a penalty which affects the
+% line-breaking of names. This penalty is inserted between larger
+% chunks of a name, for example between the chunk consisting of all
+% first names and the last name. The default value is half the
+% \hyphenpenalty. If you dislike such linebreaks, use a higher
+% value. If you do not mind them at all, set this counter to zero.
+\defcounter{lownamepenalty}{\hyphenpenalty/2}
+
+% Note that default values assigned to the above counters are
+% deliberately very low to prevent overfull boxes. This implies that
+% you will hardly notice any effect on line-breaking if the text is
+% set justified. If you set these counters to 10000 to suppress the
+% respective breakpoints, you will notice their effect but you may
+% also be confronted with overfull boxes. Keep in mind that
+% line-breaking in the bibliography is often more difficult than in
+% the body text and that you can not resort to rephrasing a
+% sentence. In some cases it may be preferable to set the entire
+% bibliography \raggedright (by modifying \bibsetup) to prevent
+% suboptimal linebreaks. In this case, even the very low default
+% penalties will make a visible difference.
+
+% File name prefixes for external abstracts and annotations
+\newcommand*{\bibabstractprefix}{bibabstract-}
+\newcommand*{\bibannotationprefix}{bibannotation-}
+
+% Print acronyms in small caps if possible
+\newcommand*{\mkbibacro}[1]{%
+ \ifcsundef{\f@encoding/\f@family/\f@series/sc}
+ {#1}
+ {\textsc{\MakeLowercase{#1}}}}
+
+% Convert HH to hh for time formatting
+\newcommand*{\mktimehh}[1]{%
+ \ifnumless{#1}{13}
+ {#1}
+ {\number\numexpr#1-12\relax}}
+
+% ------------------------------------------------------------------
+% ADDITIONAL PACKAGE OPTIONS
+% ------------------------------------------------------------------
+
+% Style of compressed page ranges in back references
+
+\DeclareBibliographyOption[string]{backrefstyle}{%
+ \ifcsdef{abx@opt@pagerefstyle@#1}
+ {\letcs\abx@pagerefstyle{abx@opt@pagerefstyle@#1}}
+ {\PackageError{biblatex}
+ {Option 'backrefstyle=#1' invalid}
+ {The option you have supplied is invalid.\MessageBreak
+ See the biblatex manual for valid option keys
+ and possible values}}}
+\newcommand*{\abx@pagerefstyle}{1}
+\csdef{abx@opt@pagerefstyle@none}{-1}
+\csdef{abx@opt@pagerefstyle@two}{0}
+\csdef{abx@opt@pagerefstyle@three}{1}
+\csdef{abx@opt@pagerefstyle@two+}{2}
+\csdef{abx@opt@pagerefstyle@three+}{3}
+\csdef{abx@opt@pagerefstyle@all+}{4}
+
+% arXiv path/format selector
+%
+% abs = abstract page
+% ps = PostScript version
+% pdf = PDF version
+% format = format selector
+
+\DeclareBibliographyOption[string]{arxiv}{\def\abx@arxivpath{#1}}
+\newcommand*{\abx@arxivpath}{abs}
+
+% ------------------------------------------------------------------
+% FIELD FORMATS (#1 is the value of the field)
+% ------------------------------------------------------------------
+
+% The fallback used by \printfield
+
+\DeclareFieldFormat{default}{#1}
+
+% The default used by \citefield
+
+\DeclareFieldFormat{citefield}{#1}
+
+% Used in citations
+
+\DeclareFieldFormat{citetitle}{\mkbibemph{#1}}
+\DeclareFieldFormat
+ [article,inbook,incollection,inproceedings,patent,thesis,unpublished]
+ {citetitle}{\mkbibquote{#1\isdot}}
+\DeclareFieldFormat
+ [suppbook,suppcollection,suppperiodical]
+ {citetitle}{#1}
+% label{end}year can be a localisation string to allow for "no date" etc.
+\DeclareFieldFormat{labelyear}{% = the '1995' part in 'Jones 1995a'
+ \ifbibstring{#1}{\bibstring{#1}}{\mkyearzeros{#1}}}
+\DeclareFieldFormat{labelendyear}{% = the '1995' part in 'Jones 1995a'
+ \ifbibstring{#1}{\bibstring{#1}}{\mkyearzeros{#1}}}
+\DeclareFieldFormat{extradate}{%
+ \iffieldnums{labelyear}
+ {\mknumalph{#1}}
+ {\mkbibparens{\mknumalph{#1}}}}
+\DeclareFieldFormat{labelalpha}{#1}%
+\DeclareFieldFormat{extraalpha}{\mknumalph{#1}}%
+\DeclareFieldFormat{shorthand}{#1\isdot}
+\DeclareFieldFormat{shorthandintro}{%
+ \ifcapital{\MakeCapital{#1}}{#1}\isdot}
+% citation commands
+\DeclareFieldFormat{prenote}{#1\isdot}
+\DeclareFieldFormat{postnote}{\mkpageprefix[pagination][\mknormrange]{#1}}
+\DeclareFieldFormat{volcitevolume}{\bibstring{volume}\ppspace#1}
+\DeclareFieldFormat{volcitepages}{\mkpageprefix[pagination][\mknormrange]{#1}}
+\DeclareFieldFormat{volcitenote}{\mkvolcitenote#1}
+\newrobustcmd*{\mkvolcitenote}[2]{%
+ \printtext[volcitevolume]{#1}%
+ \ifblank{#2}{}{\volcitedelim\printtext[volcitepages]{#2}}}
+
+% multicite commands
+\DeclareFieldAlias{multiprenote}{prenote}
+\DeclareFieldAlias{multipostnote}{postnote}
+
+% Used by \citeurl
+
+\DeclareFieldFormat{citeurl}{\url{#1}}
+
+% Used in the bibliography and bibliography lists
+
+\DeclareFieldFormat{doi}{%
+ \mkbibacro{DOI}\addcolon\space
+ \ifhyperref
+ {\href{https://doi.org/#1}{\nolinkurl{#1}}}
+ {\nolinkurl{#1}}}
+\DeclareFieldFormat{edition}{%
+ \ifinteger{#1}
+ {\mkbibordedition{#1}~\bibstring{edition}}
+ {#1\isdot}}
+\DeclareFieldFormat{eprint}{%
+ \iffieldundef{eprinttype}
+ {eprint}
+ {\thefield{eprinttype}}%
+ \addcolon\space
+ \ifhyperref
+ {\url{#1}}
+ {\nolinkurl{#1}}%
+ \iffieldundef{eprintclass}
+ {}
+ {\addspace\mkbibparens{\thefield{eprintclass}}}}
+\DeclareFieldFormat{eprint:hdl}{%
+ HDL\addcolon\space
+ \ifhyperref
+ {\href{http://hdl.handle.net/#1}{\nolinkurl{#1}}}
+ {\nolinkurl{#1}}}
+\DeclareFieldAlias{eprint:HDL}{eprint:hdl}
+\DeclareFieldFormat{eprint:arxiv}{%
+ arXiv\addcolon\space
+ \ifhyperref
+ {\href{https://arxiv.org/\abx@arxivpath/#1}{%
+ \nolinkurl{#1}%
+ \iffieldundef{eprintclass}
+ {}
+ {\addspace\texttt{\mkbibbrackets{\thefield{eprintclass}}}}}}
+ {\nolinkurl{#1}%
+ \iffieldundef{eprintclass}
+ {}
+ {\addspace\texttt{\mkbibbrackets{\thefield{eprintclass}}}}}}
+\DeclareFieldAlias{eprint:arXiv}{eprint:arxiv}
+\DeclareFieldFormat{eprint:jstor}{%
+ JSTOR\addcolon\space
+ \ifhyperref
+ {\href{http://www.jstor.org/stable/#1}{\nolinkurl{#1}}}
+ {\nolinkurl{#1}}}
+\DeclareFieldAlias{eprint:JSTOR}{eprint:jstor}
+\DeclareFieldFormat{eprint:pubmed}{%
+ PMID\addcolon\space
+ \ifhyperref
+ {\href{http://www.ncbi.nlm.nih.gov/pubmed/#1}{\nolinkurl{#1}}}
+ {\nolinkurl{#1}}}
+\DeclareFieldAlias{eprint:PubMed}{eprint:pubmed}
+\DeclareFieldFormat{eprint:googlebooks}{%
+ Google Books\addcolon\space
+ \ifhyperref
+ {\href{http://books.google.com/books?id=#1}{\nolinkurl{#1}}}
+ {\nolinkurl{#1}}}
+\DeclareFieldAlias{eprint:Google Books}{eprint:googlebooks}
+\DeclareFieldFormat{file}{\url{#1}}
+\DeclareFieldFormat{isbn}{\mkbibacro{ISBN}\addcolon\space #1}
+\DeclareFieldFormat{isrn}{\mkbibacro{ISRN}\addcolon\space #1}
+\DeclareFieldFormat{issn}{\mkbibacro{ISSN}\addcolon\space #1}
+\DeclareFieldFormat{journaltitle}{\mkbibemph{#1\isdot}}
+\DeclareFieldFormat{issuetitle}{\mkbibemph{#1}}
+\DeclareFieldFormat{maintitle}{\mkbibemph{#1}}
+\DeclareFieldFormat{booktitle}{\mkbibemph{#1}}
+\DeclareFieldFormat{chapter}{\bibstring{chapter}~#1}
+\DeclareFieldFormat{month}{\mkbibmonth{#1}}
+\DeclareFieldFormat{note}{#1\isdot}
+\DeclareFieldFormat{number}{#1}% number in a series
+\DeclareFieldFormat[article,periodical]{number}{#1}% number of a journal
+\DeclareFieldFormat{pages}{\mkpageprefix[bookpagination]{#1}}
+\DeclareFieldFormat{pagetotal}{\mkpagetotal[bookpagination]{#1}}
+\DeclareFieldFormat{part}{.#1}% physical part of a logical volume
+\DeclareFieldFormat{series}{#1}% publication series
+\DeclareFieldFormat[article,periodical]{series}{% series of a journal
+ \ifinteger{#1}
+ {\mkbibordseries{#1}~\bibstring{jourser}}
+ {\ifbibstring{#1}{\bibstring{#1}}{#1}}}
+\DeclareFieldFormat{pubstate}{\ifbibstring{#1}{\bibstring{#1}}{#1}}
+\DeclareFieldFormat{title}{\mkbibemph{#1}}
+\DeclareFieldFormat
+ [article,inbook,incollection,inproceedings,patent,thesis,unpublished]
+ {title}{\mkbibquote{#1\isdot}}
+\DeclareFieldFormat
+ [suppbook,suppcollection,suppperiodical]
+ {title}{#1}
+\DeclareFieldFormat{type}{\ifbibstring{#1}{\bibstring{#1}}{#1}}
+\DeclareFieldFormat{url}{\mkbibacro{URL}\addcolon\space\url{#1}}
+\DeclareFieldFormat{urldate}{\mkbibparens{\bibstring{urlseen}\space#1}}
+\DeclareFieldFormat{version}{\bibstring{version}~#1}
+\DeclareFieldFormat{volume}{\bibstring{volume}~#1}% volume of a book
+\DeclareFieldFormat[article,periodical]{volume}{#1}% volume of a journal
+\DeclareFieldFormat{volumes}{#1~\bibstring{volumes}}
+\DeclareFieldFormat{related}{#1}
+\DeclareFieldFormat{related:multivolume}{#1}
+\DeclareFieldFormat{related:origpubin}{\mkbibparens{#1}}
+\DeclareFieldFormat{related:origpubas}{\mkbibparens{#1}}
+\DeclareFieldFormat{relatedstring:default}{#1\printunit{\relatedpunct}}
+\DeclareFieldFormat{relatedstring:reprintfrom}{#1\addspace}
+
+% Generic formats for \printtext and \printfield
+
+\DeclareFieldFormat{emph}{\mkbibemph{#1}}
+\DeclareFieldFormat{bold}{\mkbibbold{#1}}
+\DeclareFieldFormat{smallcaps}{\textsc{#1}}
+\DeclareFieldFormat{parens}{\mkbibparens{#1}}
+\DeclareFieldFormat{brackets}{\mkbibbrackets{#1}}
+\DeclareFieldFormat{bibhyperref}{\bibhyperref{#1}}
+\DeclareFieldFormat{bibhyperlink}{\bibhyperlink{\thefield{entrykey}}{#1}}
+\DeclareFieldFormat{bibhypertarget}{\bibhypertarget{\thefield{entrykey}}{#1}}
+\DeclareFieldFormat{titlecase}{#1}
+\DeclareFieldFormat{noformat}{#1}
+
+% ------------------------------------------------------------------
+% LITERAL LIST FORMATS (#1 is the current item)
+% ------------------------------------------------------------------
+
+% Formatting directives for literal lists
+% ------------------------------------------------------------------
+
+\DeclareListWrapperFormat{default}{#1}
+
+% The fallback used by \printlist
+
+\DeclareListFormat{default}{%
+ \usebibmacro{list:delim}{#1}%
+ \usebibmacro{list:langswitchon}%
+ #1\isdot
+ \usebibmacro{list:langswitchoff}%
+ \usebibmacro{list:andothers}}
+
+% The default used by \citelist
+
+\DeclareListAlias{citelist}{default}
+\DeclareListWrapperAlias{citelist}{default}
+
+% Used in the bibliography
+
+\DeclareListFormat{publisher}{%
+ \usebibmacro{list:delim}{#1}%
+ \usebibmacro{list:langswitchon}%
+ #1\isdot
+ \usebibmacro{list:langswitchoff}%
+ \usebibmacro{list:andothers}}
+
+\DeclareListFormat{language}{%
+ \usebibmacro{list:delim}{%
+ \ifbibstring{#1}
+ {\bibxstring{#1}}
+ {\ifbibstring{lang#1}
+ {\bibxstring{lang#1}}
+ {#1}}}%
+ \usebibmacro{list:langswitchon}%
+ \ifbibstring{#1}
+ {\bibstring{#1}}
+ {\ifbibstring{lang#1}
+ {\bibstring{lang#1}}
+ {#1}}%
+ \usebibmacro{list:langswitchoff}%
+ \usebibmacro{list:andothers}}
+
+\DeclareListFormat{origlanguage}{%
+ \usebibmacro{list:delim}{%
+ \ifbibstring{#1}
+ {\bibxstring{#1}}
+ {\ifbibstring{lang#1}
+ {\bibxstring{lang#1}}
+ {#1}}}%
+ \usebibmacro{list:langswitchon}%
+ \ifbibstring{#1}
+ {\bibstring{#1}}
+ {\ifbibstring{lang#1}
+ {\bibstring{lang#1}}
+ {#1}}%
+ \usebibmacro{list:langswitchoff}%
+ \usebibmacro{list:andothers}}
+
+
+\DeclareListFormat{lfromoriglanguage}{%
+ \begingroup
+ \blx@bibstringnormal
+ \usebibmacro{list:delim}{%
+ \ifbibstring{from#1}
+ {\bibxlstring{from#1}}
+ {\ifbibstring{lang#1}
+ {\bibxlstring{lang#1}}
+ {#1}}}%
+ \usebibmacro{list:langswitchon}%
+ \ifbibstring{from#1}
+ {\bibstring{from#1}}
+ {\ifbibstring{lang#1}
+ {\biblstring{lang#1}}
+ {#1}}%
+ \usebibmacro{list:langswitchoff}%
+ \usebibmacro{list:andothers}%
+ \endgroup}
+
+\DeclareListFormat{sfromoriglanguage}{%
+ \begingroup
+ \blx@bibstringnormal
+ \usebibmacro{list:delim}{%
+ \ifbibstring{from#1}
+ {\bibxsstring{from#1}}
+ {\ifbibstring{lang#1}
+ {\bibxsstring{lang#1}}
+ {#1}}}%
+ \usebibmacro{list:langswitchon}%
+ \ifbibstring{from#1}
+ {\bibstring{from#1}}
+ {\ifbibstring{lang#1}
+ {\bibsstring{lang#1}}
+ {#1}}%
+ \usebibmacro{list:langswitchoff}%
+ \usebibmacro{list:andothers}%
+ \endgroup}
+
+\newbibmacro*{list:langswitchon}{%
+ % begin language for list item mslang
+ % Overide language from list item langtag annotation
+ % This does two checks since only multiscript fields would have such an annotation
+ \begingroup
+ \ifcsdef{abx@annotation@literal@item@\currentmsform @\currentmslang @\currentlist @mslang@\thelistcount}
+ {\edef\blx@tempb{\csuse{abx@annotation@literal@item@\currentmsform @\currentmslang @\currentlist @mslang@\thelistcount}}%
+ \edef\blx@tempa{\csuse{blx@msmaplang@\blx@tempb}}%
+ \begingroup
+ \let\currentmslang\blx@tempb
+ \ifdef\blx@thefieldlangenv
+ {\iftoggle{blx@autofieldlangstrings}
+ {\blx@langsetup{\blx@tempa}% must call this to load the .lbx
+ \csuse{abx@extras@\blx@tempa}%
+ \csuse{abx@strings@\blx@tempa}}
+ {}%
+ \blx@hook@initfieldlang
+ \csname\blx@thefieldlangenv\expandafter\endcsname\expandafter{\blx@tempa}}
+ {}}
+ {}}
+
+\newbibmacro*{list:langswitchoff}{%
+ \endgroup
+ \ifcsdef{abx@annotation@literal@item@\currentmsform @\currentmslang @\currentlist @mslang@\thelistcount}
+ {% end language for list mslang
+ \ifdef\blx@thefieldlangenv
+ {\blx@hook@endfieldlang
+ \csname end\blx@thefieldlangenv\endcsname}
+ {}%
+ \endgroup}
+ {}}
+
+\DeclareListFormat{location}{%
+ \usebibmacro{list:delim}{#1}%
+ \usebibmacro{list:langswitchon}%
+ #1\isdot
+ \usebibmacro{list:langswitchoff}%
+ \usebibmacro{list:andothers}}
+
+\DeclareListFormat[patent]{location}{%
+ \usebibmacro{list:plain}%
+ \ifbibstring{#1}{\bibstring{#1}}{#1\isdot}%
+ \usebibmacro{list:andothers}}
+
+\DeclareListFormat{pageref}{%
+ \ifnumless{\abx@pagerefstyle}{0}
+ {\usebibmacro{list:plain}%
+ \ifhyperref
+ {\hyperlink{page.#1}{#1}}
+ {#1}}
+ {\ifnumequal{\value{listcount}}{1}
+ {\usebibmacro{pageref:init}}
+ {}%
+ \usebibmacro{pageref:comp}{#1}%
+ \ifnumequal{\value{listcount}}{\value{liststop}}
+ {\usebibmacro{pageref:dump}}
+ {}}}
+
+\DeclareListAlias{origlocation}{location}
+\DeclareListAlias{origpublisher}{publisher}
+\DeclareListAlias{institution}{default}
+\DeclareListAlias{organization}{default}
+
+\DeclareListWrapperAlias{origlocation}{location}
+\DeclareListWrapperAlias{origpublisher}{publisher}
+\DeclareListWrapperAlias{institution}{default}
+\DeclareListWrapperAlias{organization}{default}
+
+% Auxiliary macros for list formatting directives
+% ------------------------------------------------------------------
+
+\newbibmacro*{list:delim}[1]{%
+ \ifnumgreater{\value{listcount}}{\value{liststart}}
+ {\ifboolexpr{
+ test {\ifnumless{\value{listcount}}{\value{liststop}}}
+ or
+ test \ifmoreitems
+ }
+ {\printdelim{multilistdelim}}
+ {\lbx@finallistdelim{#1}}}
+ {}}
+
+\newbibmacro*{list:plain}{%
+ \ifnumgreater{\value{listcount}}{\value{liststart}}
+ {\printdelim{multilistdelim}}
+ {}}
+
+\newbibmacro*{list:andothers}{%
+ \ifboolexpr{
+ test {\ifnumequal{\value{listcount}}{\value{liststop}}}
+ and
+ test \ifmoreitems
+ }
+ {\ifnumgreater{\value{liststop}}{1}
+ {\finalandcomma}
+ {}%
+ \printdelim{andmoredelim}\bibstring{andmore}}
+ {}}
+
+\newbibmacro*{pageref:init}{%
+ \let\abx@range@hold=\empty
+ \def\abx@range@diff{0}%
+ \def\abx@range@prev{-1}%
+ \def\abx@range@this{0}%
+ \def\abx@range@last{-1}}
+
+\newbibmacro*{pageref:comp}[1]{%
+ \numdef\abx@range@prev{\abx@range@prev+1}%
+ \ifinteger{#1}
+ {\def\abx@range@num{#1}%
+ \def\abx@range@this{1}%
+ \ifnumequal{\abx@range@this}{\abx@range@last}
+ {}
+ {\def\abx@range@prev{-1}}}
+ {\ifrmnum{#1}
+ {\numdef\abx@range@num{\rmntonum{#1}}%
+ \def\abx@range@this{2}%
+ \ifnumequal{\abx@range@this}{\abx@range@last}
+ {}
+ {\def\abx@range@prev{-1}}}
+ {\undef\abx@range@num
+ \def\abx@range@this{0}%
+ \def\abx@range@prev{-1}}}%
+ \ifdef\abx@range@num
+ {\ifnumequal{\abx@range@num}{\abx@range@prev}
+ {\def\abx@range@hold{#1}%
+ \numdef\abx@range@diff{\abx@range@diff+1}}
+ {\usebibmacro{pageref:dump}%
+ \ifnumgreater{\abx@range@last}{-1}
+ {\printdelim{multilistdelim}}
+ {}%
+ \ifhyperref
+ {\hyperlink{page.#1}{#1}}
+ {#1}}%
+ \edef\abx@range@prev{\abx@range@num}}
+ {\usebibmacro{pageref:dump}%
+ \ifnumgreater{\abx@range@last}{-1}
+ {\printdelim{multilistdelim}}
+ {}%
+ \ifhyperref
+ {\hyperlink{page.#1}{#1}}
+ {#1}%
+ \def\abx@range@prev{-1}}%
+ \edef\abx@range@last{\abx@range@this}}
+
+\newbibmacro*{pageref:dump}{%
+ \ifnumgreater{\abx@range@diff}{0}
+ {\ifcase\abx@pagerefstyle\relax % two
+ \bibrangedash
+ \ifhyperref
+ {\hyperlink{page.\abx@range@hold}{\abx@range@hold}}
+ {\abx@range@hold}%
+ \or % three
+ \ifnumless{\abx@range@diff}{2}
+ {\printdelim{multilistdelim}}
+ {\bibrangedash}%
+ \ifhyperref
+ {\hyperlink{page.\abx@range@hold}{\abx@range@hold}}
+ {\abx@range@hold}%
+ \or % two+
+ \ifnumless{\abx@range@diff}{2}
+ {\sqspace
+ \ifhyperref
+ {\hyperlink{page.\abx@range@hold}{\bibstring{sequens}}}
+ {\bibstring{sequens}}}
+ {\bibrangedash
+ \ifhyperref
+ {\hyperlink{page.\abx@range@hold}{\abx@range@hold}}
+ {\abx@range@hold}}%
+ \or % three+
+ \ifnumless{\abx@range@diff}{2}
+ {\sqspace
+ \ifhyperref
+ {\hyperlink{page.\abx@range@hold}{\bibstring{sequens}}}
+ {\bibstring{sequens}}}
+ {\ifnumless{\abx@range@diff}{3}
+ {\sqspace
+ \ifhyperref
+ {\hyperlink{page.\abx@range@hold}{\bibstring{sequentes}}}
+ {\bibstring{sequentes}}}
+ {\bibrangedash
+ \ifhyperref
+ {\hyperlink{page.\abx@range@hold}{\abx@range@hold}}
+ {\abx@range@hold}}}%
+ \else % all+
+ \ifnumless{\abx@range@diff}{2}
+ {\sqspace
+ \ifhyperref
+ {\hyperlink{page.\abx@range@hold}{\bibstring{sequens}}}
+ {\bibstring{sequens}}}
+ {\sqspace
+ \ifhyperref
+ {\hyperlink{page.\abx@range@hold}{\bibstring{sequentes}}}
+ {\bibstring{sequentes}}}%
+ \fi
+ \def\abx@range@diff{0}}
+ {}}
+
+% ------------------------------------------------------------------
+% NAME LIST FORMATS
+% ------------------------------------------------------------------
+
+% Formatting directives for name lists
+% ------------------------------------------------------------------
+
+\DeclareNameWrapperFormat{default}{#1}
+
+\DeclareNameFormat{given-family}{%
+ \ifgiveninits
+ {\usebibmacro{name:given-family}
+ {\namepartfamily}
+ {\namepartgiveni}
+ {\namepartprefix}
+ {\namepartsuffix}}
+ {\usebibmacro{name:given-family}
+ {\namepartfamily}
+ {\namepartgiven}
+ {\namepartprefix}
+ {\namepartsuffix}}%
+ \usebibmacro{name:andothers}}
+
+\DeprecateNameFormatWithReplacement{first-last}{given-family}
+
+\DeclareNameFormat{family-given}{%
+ \ifgiveninits
+ {\usebibmacro{name:family-given}
+ {\namepartfamily}
+ {\namepartgiveni}
+ {\namepartprefix}
+ {\namepartsuffix}}
+ {\usebibmacro{name:family-given}
+ {\namepartfamily}
+ {\namepartgiven}
+ {\namepartprefix}
+ {\namepartsuffix}}%
+ \usebibmacro{name:andothers}}
+
+\DeprecateNameFormatWithReplacement{last-first}{family-given}
+
+
+\DeclareNameFormat{family-given/given-family}{%
+ \ifnumequal{\value{listcount}}{1}
+ {\ifgiveninits
+ {\usebibmacro{name:family-given}
+ {\namepartfamily}
+ {\namepartgiveni}
+ {\namepartprefix}
+ {\namepartsuffix}}
+ {\usebibmacro{name:family-given}
+ {\namepartfamily}
+ {\namepartgiven}
+ {\namepartprefix}
+ {\namepartsuffix}}%
+ \ifboolexpe{%
+ test {\ifdefvoid\namepartgiven}
+ and
+ test {\ifdefvoid\namepartprefix}}
+ {}
+ {\usebibmacro{name:revsdelim}}}
+ {\ifgiveninits
+ {\usebibmacro{name:given-family}
+ {\namepartfamily}
+ {\namepartgiveni}
+ {\namepartprefix}
+ {\namepartsuffix}}
+ {\usebibmacro{name:given-family}
+ {\namepartfamily}
+ {\namepartgiven}
+ {\namepartprefix}
+ {\namepartsuffix}}}%
+ \usebibmacro{name:andothers}}
+
+\DeprecateNameFormatWithReplacement{last-first/first-last}{family-given/given-family}
+
+\DeclareNameFormat{initsonly}{%
+ \usebibmacro{name:given-family}
+ {\namepartfamilyi}
+ {\namepartgiveni}
+ {\namepartprefixi}
+ {\namepartsuffixi}%
+ \usebibmacro{name:andothers}}
+
+% Fallback used by \printnames
+\DeclareNameAlias{default}{given-family}
+
+% Default used by \citename
+\DeclareNameAlias{citename}{default}
+\DeclareNameWrapperAlias{citename}{default}
+
+% Used in some citations
+\DeclareNameFormat{labelname}{%
+ \ifcase\value{uniquename}%
+ \usebibmacro{name:family}
+ {\namepartfamily}
+ {\namepartgiven}
+ {\namepartprefix}
+ {\namepartsuffix}%
+ \or
+ \ifuseprefix
+ {\usebibmacro{name:given-family}
+ {\namepartfamily}
+ {\namepartgiveni}
+ {\namepartprefix}
+ {\namepartsuffixi}}
+ {\usebibmacro{name:given-family}
+ {\namepartfamily}
+ {\namepartgiveni}
+ {\namepartprefixi}
+ {\namepartsuffixi}}%
+ \or
+ \usebibmacro{name:given-family}
+ {\namepartfamily}
+ {\namepartgiven}
+ {\namepartprefix}
+ {\namepartsuffix}%
+ \fi
+ \usebibmacro{name:andothers}}
+
+% Used in the bibliography
+\DeclareNameAlias{sortname}{family-given/given-family}
+
+\DeclareNameAlias{author}{default}
+\DeclareNameAlias{bookauthor}{author}
+\DeclareNameAlias{editor}{default}
+\DeclareNameAlias{editora}{editor}
+\DeclareNameAlias{editorb}{editor}
+\DeclareNameAlias{editorc}{editor}
+\DeclareNameAlias{translator}{default}
+
+\DeclareNameAlias{byauthor}{default}
+\DeclareNameAlias{bybookauthor}{byauthor}
+\DeclareNameAlias{byeditor}{default}
+\DeclareNameAlias{byeditora}{byeditor}
+\DeclareNameAlias{byeditorb}{byeditor}
+\DeclareNameAlias{byeditorc}{byeditor}
+\DeclareNameAlias{bytranslator}{default}
+
+\DeclareNameAlias{withcommentator}{default}
+\DeclareNameAlias{withannotator}{default}
+\DeclareNameAlias{withintroduction}{default}
+\DeclareNameAlias{withforeword}{default}
+\DeclareNameAlias{withafterword}{default}
+
+\DeclareNameWrapperAlias{author}{default}
+\DeclareNameWrapperAlias{bookauthor}{author}
+\DeclareNameWrapperAlias{editor}{default}
+\DeclareNameWrapperAlias{editora}{editor}
+\DeclareNameWrapperAlias{editorb}{editor}
+\DeclareNameWrapperAlias{editorc}{editor}
+\DeclareNameWrapperAlias{translator}{default}
+
+\DeclareNameWrapperAlias{byauthor}{default}
+\DeclareNameWrapperAlias{bybookauthor}{byauthor}
+\DeclareNameWrapperAlias{byeditor}{default}
+\DeclareNameWrapperAlias{byeditora}{byeditor}
+\DeclareNameWrapperAlias{byeditorb}{byeditor}
+\DeclareNameWrapperAlias{byeditorc}{byeditor}
+\DeclareNameWrapperAlias{bytranslator}{default}
+
+\DeclareNameWrapperAlias{withcommentator}{default}
+\DeclareNameWrapperAlias{withannotator}{default}
+\DeclareNameWrapperAlias{withintroduction}{default}
+\DeclareNameWrapperAlias{withforeword}{default}
+\DeclareNameWrapperAlias{withafterword}{default}
+
+\DeclareFieldFormat{authortype}{#1}
+\DeclareFieldFormat{editortype}{#1}
+\DeclareFieldFormat{translatortype}{#1}
+
+% Auxiliary macros for name formatting directives
+% ------------------------------------------------------------------
+
+\newcommand{\mkbibcompletename}[1]{#1}
+
+\newcommand{\mkbibcompletenamefamily}{\mkbibcompletename}
+
+\newbibmacro*{name:langswitchon}{%
+ % begin language for name list item mslang
+ \ifdefempty\blx@nmslang
+ {}
+ {\let\currentmslang\blx@nmslang
+ \edef\blx@nmslang{\csuse{blx@msmaplang@\blx@nmslang}}%
+ \ifdef\blx@thefieldlangenv
+ {\iftoggle{blx@autofieldlangstrings}
+ {\blx@langsetup{\blx@nmslang}% must call this to load the .lbx
+ \csuse{abx@extras@\blx@nmslang}%
+ \csuse{abx@strings@\blx@nmslang}}
+ {}%
+ \blx@hook@initfieldlang
+ \begingroup
+ \csname\blx@thefieldlangenv\expandafter\endcsname\expandafter{\blx@nmslang}}
+ {}}}
+
+\newbibmacro*{name:langswitchoff}{%
+ \ifdefempty\blx@nmslang
+ {}
+ {\ifdef\blx@thefieldlangenv
+ {\blx@hook@endfieldlang
+ \csname end\blx@thefieldlangenv\endcsname
+ \endgroup}
+ {}}}
+
+\newbibmacro*{name:family}[4]{%
+ \ifuseprefix
+ {\usebibmacro{name:delim}{#3#1}%
+ \usebibmacro{name:hook}{#3#1}%
+ \usebibmacro{name:langswitchon}%
+ \mkbibcompletenamefamily{%
+ \ifdefvoid{#3}
+ {}
+ {\ifcapital
+ {\mkbibnameprefix{\MakeCapital{#3}}\isdot}
+ {\mkbibnameprefix{#3}\isdot}%
+ \ifprefchar{}{\bibnamedelimc}}%
+ \mkbibnamefamily{#1}\isdot}}
+ {\usebibmacro{name:delim}{#1}%
+ \usebibmacro{name:hook}{#1}%
+ \usebibmacro{name:langswitchon}%
+ \mkbibcompletenamefamily{%
+ \mkbibnamefamily{#1}\isdot}}%
+ \usebibmacro{name:langswitchoff}}%
+\newbibmacro*{name:last}[4]{% legacy alias
+ \blx@warning@noline{%
+ 'name:last' is deprecated, please use 'name:family'}%
+ \usebibmacro{name:family}{#1}{#2}{#3}{#4}}
+
+\newcommand{\mkbibcompletenamegivenfamily}{\mkbibcompletename}
+
+\newbibmacro*{name:given-family}[4]{%
+ \usebibmacro{name:delim}{#2#3#1}%
+ \usebibmacro{name:hook}{#2#3#1}%
+ \usebibmacro{name:langswitchon}%
+ \mkbibcompletenamegivenfamily{%
+ \ifdefvoid{#2}
+ {}
+ {\mkbibnamegiven{#2}\isdot\bibnamedelimd}%
+ \ifdefvoid{#3}
+ {}
+ {\mkbibnameprefix{#3}\isdot
+ \ifprefchar
+ {}
+ {\ifuseprefix{\bibnamedelimc}{\bibnamedelimd}}}%
+ \mkbibnamefamily{#1}\isdot
+ \ifdefvoid{#4}{}{\bibnamedelimd\mkbibnamesuffix{#4}\isdot}}%
+ \usebibmacro{name:langswitchoff}}
+\newbibmacro*{name:first-last}[4]{% legacy alias
+ \blx@warning@noline{%
+ 'name:first-last' is deprecated, please use 'name:given-family'}%
+ \usebibmacro{name:given-family}{#1}{#2}{#3}{#4}}
+
+\newcommand{\mkbibcompletenamefamilygiven}{\mkbibcompletename}
+
+\newbibmacro*{name:family-given}[4]{%
+ \ifuseprefix
+ {\usebibmacro{name:delim}{#3#1}%
+ \usebibmacro{name:hook}{#3#1}%
+ \usebibmacro{name:langswitchon}%
+ \mkbibcompletenamefamilygiven{%
+ \ifdefvoid{#3}
+ {}
+ {\ifcapital
+ {\mkbibnameprefix{\MakeCapital{#3}}\isdot}
+ {\mkbibnameprefix{#3}\isdot}%
+ \ifprefchar{}{\bibnamedelimc}}%
+ \mkbibnamefamily{#1}\isdot
+ \ifdefvoid{#4}
+ {}
+ {\bibnamedelimd\mkbibnamesuffix{#4}\isdot}%
+ \ifdefvoid{#2}
+ {}
+ {\revsdnamepunct\bibnamedelimd\mkbibnamegiven{#2}\isdot}}}
+ {\usebibmacro{name:delim}{#1}%
+ \usebibmacro{name:hook}{#1}%
+ \usebibmacro{name:langswitchon}%
+ \mkbibcompletenamefamilygiven{%
+ \mkbibnamefamily{#1}\isdot
+ \ifdefvoid{#4}
+ {}
+ {\bibnamedelimd\mkbibnamesuffix{#4}\isdot}%
+ \ifboolexpe{%
+ test {\ifdefvoid{#2}}
+ and
+ test {\ifdefvoid{#3}}}
+ {}
+ {\revsdnamepunct}%
+ \ifdefvoid{#2}
+ {}
+ {\bibnamedelimd\mkbibnamegiven{#2}\isdot}%
+ \ifdefvoid{#3}
+ {}
+ {\bibnamedelimd\mkbibnameprefix{#3}\isdot}}}%
+ \usebibmacro{name:langswitchoff}}
+\newbibmacro*{name:last-first}[4]{% legacy alias
+ \blx@warning@noline{%
+ 'name:last-first' is deprecated, please use 'name:family-given'}%
+ \usebibmacro{name:family-given}{#1}{#2}{#3}{#4}}
+
+\newbibmacro*{name:hook}[1]{%
+ \ifnumequal{\value{listcount}}{1}
+ {\lbx@initnamehook{#1}}
+ {}}
+
+\newbibmacro*{name:delim}[1]{%
+ \ifnumgreater{\value{listcount}}{\value{liststart}}
+ {\ifboolexpr{
+ test {\ifnumless{\value{listcount}}{\value{liststop}}}
+ or
+ test \ifmorenames
+ }
+ {\printdelim{multinamedelim}}
+ {\lbx@finalnamedelim{#1}}}
+ {}}
+
+\newbibmacro*{name:revsdelim}{%
+ \ifboolexpr{
+ (
+ test {\ifnumequal{\value{liststop}}{1}}
+ and
+ test \ifmorenames
+ )
+ or
+ test {\ifnumequal{\value{liststop}}{2}}
+ }
+ {\printdelim{revsdnamedelim}}
+ {}}
+
+\newbibmacro*{name:andothers}{%
+ \ifboolexpr{
+ test {\ifnumequal{\value{listcount}}{\value{liststop}}}
+ and
+ test \ifmorenames
+ }
+ {\ifnumgreater{\value{liststop}}{1}
+ {\finalandcomma}
+ {}%
+ \printdelim{andothersdelim}\bibstring{andothers}}
+ {}}
+
+% ------------------------------------------------------------------
+% INDEX FORMATS FOR FIELDS (#1 is the value of the field)
+% ------------------------------------------------------------------
+
+% There is no need to test if a field to be indexed is empty because
+% \indexfield performs this test implicitly.
+
+% The fallback used by \indexfield
+
+\DeclareIndexFieldFormat{default}{\index{#1}}
+
+% Used in the bibliography and in citations
+
+\DeclareIndexFieldFormat{indextitle}{%
+ \usebibmacro{index:title}{\index}{#1}}
+
+\newbibmacro*{index:title}[2]{%
+ \usebibmacro{index:field}{#1}{\thefield{indexsorttitle}}{\emph{#2}}}
+
+\newbibmacro*{index:field}[3]{%
+ \usebibmacro{index:entry}{#1}{\mkbibindexfield{#2}{#3}}}
+
+% Auxiliary macros for field indexing directives
+% ------------------------------------------------------------------
+
+\newbibmacro*{index:entry}[2]{%
+ \begingroup
+ \protected@edef\theindexentry{\unexpanded{#1}{#2}}%
+ \theindexentry
+ \endgroup}
+
+\newcommand*{\mkbibindexfield}[2]{\mkbibindexentry{#1}{\unexpanded{#2}}}
+\newcommand*{\mkbibindexentry}[2]{#1\actualoperator#2}
+
+% ------------------------------------------------------------------
+% INDEX FORMATS FOR LITERAL LISTS (#1 is the current item)
+% ------------------------------------------------------------------
+
+% The fallback used by \indexlist
+
+\DeclareIndexListFormat{default}{\index{#1}}
+
+% ------------------------------------------------------------------
+% INDEX FORMATS FOR NAME LISTS
+% ------------------------------------------------------------------
+
+% Indexing directives for name lists
+% ------------------------------------------------------------------
+
+% The fallback used by \indexnames
+
+\DeclareIndexNameFormat{default}{%
+ \usebibmacro{index:name}
+ {\index}
+ {\namepartfamily}
+ {\namepartgiven}
+ {\namepartprefix}
+ {\namepartsuffix}}
+
+% Used in citations
+
+\DeclareIndexNameAlias{labelname}{default}
+
+% Used in the bibliography
+
+\DeclareIndexNameAlias{author}{default}
+\DeclareIndexNameAlias{editor}{default}
+\DeclareIndexNameAlias{bookauthor}{default}
+
+% Auxiliary macros for name indexing directives
+% ------------------------------------------------------------------
+
+% When generating an index entry, we need to test which parts of a
+% name are actually available to prevent spurious punctuation and
+% spaces.
+%
+% Note that the standard LaTeX \index command simply writes its
+% argument to the .idx file without preventing expansion. This means
+% that all \ifblank etc. tests are expanded on the way and will not end
+% up in the index. The index package, however, prevents expansion.
+% This would lead to \ifblank etc. ending up in the .idx file. To avoid
+% that, we preprocess the index entry inside an \edef. We use
+% \unexpanded to protect the \index command and the actual data from
+% expansion. This definition will work with both index.sty and the
+% standard indexing facilities.
+%
+% We also use \ifuseprefix to ensure that the name prefix is handled
+% properly. \actualoperator is the so-called actual operator, as
+% defined by the 'actual' specifier in the .ist file. The makeindex
+% program will use the part preceeding the \actualoperator
+% delimiter for sorting. The part after the delimiter is used as the
+% index is printed. Note that this is not specific to biblatex, see
+% the makeindex documentation for details.
+
+\newcommand*{\actualoperator}{@}
+\newcommand*{\subentryoperator}{!}
+
+\newbibmacro*{index:name}[5]{%
+ \usebibmacro{index:entry}{#1}{\mkbibindexname{#2}{#3}{#4}{#5}}}
+
+% {<family name>}{<given name>}{<prefix>}{<suffix>}
+\newcommand*{\mkbibindexname}[4]{%
+ \ifuseprefix
+ {\ifdefvoid{#3}{}{#3 }%
+ \@firstofone #1% remove spurious braces
+ \ifdefvoid{#4}{}{ #4}%
+ \ifdefvoid{#2}{}{, #2}%
+ \ifdefvoid{#3}{}{%
+ \actualoperator
+ \MakeCapital{#3} %
+ #1%
+ \ifdefvoid{#4}{}{ #4}%
+ \ifdefvoid{#2}{}{, #2}}}
+ {\@firstofone #1% remove spurious braces
+ \ifdefvoid{#4}{}{ #4}%
+ \ifboolexpe{%
+ test {\ifdefvoid{#2}}
+ and
+ test {\ifdefvoid{#3}}}
+ {}
+ {,}%
+ \ifdefvoid{#2}{}{ #2}%
+ \ifdefvoid{#3}{}{ #3}}}
+
+% {<control sequence>}{<control sequence>}
+\newcommand*{\mkbibindexsubentry}[2]{%
+ \ifblank{#1}{}{\subentryoperator#1\actualoperator#2}}
+
+% Additional macros with subentries
+
+\newbibmacro*{index:name:field}[6]{%
+ \usebibmacro{index:name:subentry}{#1}{#2}{#3}{#4}{#5}
+ {\thefield{#6}}{\csfield{#6}}}
+
+\newbibmacro*{index:name:title}[5]{%
+ \usebibmacro{index:name:subentry}{#1}{#2}{#3}{#4}{#5}
+ {\thefield{indexsorttitle}}{\emph{\csfield{indextitle}}}}
+
+\newbibmacro*{index:name:subentry}[7]{%
+ \usebibmacro{index:entry}{#1}{%
+ \mkbibindexname{#2}{#3}{#4}{#5}\mkbibindexsubentry{#6}{#7}}}
+
+% ------------------------------------------------------------------
+% datafieldsets
+% ------------------------------------------------------------------
+
+% Some defaults for backwards compat for the biber nosort option
+\DeclareDatafieldSet{setnames}{
+ \member[datatype=name, fieldtype=list]
+}
+
+\DeclareDatafieldSet{settitles}{
+ \member[field=title]
+ \member[field=booktitle]
+ \member[field=eventtitle]
+ \member[field=issuetitle]
+ \member[field=journaltitle]
+ \member[field=maintitle]
+ \member[field=origtitle]
+}
+
+% ------------------------------------------------------------------
+% Driver sourcemaps
+% ------------------------------------------------------------------
+
+\DeclareDriverSourcemap[datatype=bibtex]{
+ \map{
+ \step[fieldset=day, null]
+ }
+ \map{
+ \step[typesource=conference, typetarget=inproceedings]
+ \step[typesource=electronic, typetarget=online]
+ \step[typesource=www, typetarget=online]
+ }
+ \map{
+ \step[typesource=mastersthesis, typetarget=thesis, final]
+ \step[fieldset=type, fieldvalue=mathesis]
+ }
+ \map{
+ \step[typesource=phdthesis, typetarget=thesis, final]
+ \step[fieldset=type, fieldvalue=phdthesis]
+ }
+ \map{
+ \step[typesource=techreport, typetarget=report, final]
+ \step[fieldset=type, fieldvalue=techreport]
+ }
+ \map{
+ \step[fieldsource=hyphenation, fieldtarget=langid]
+ \step[fieldsource=address, fieldtarget=location]
+ \step[fieldsource=school, fieldtarget=institution]
+ \step[fieldsource=annote, fieldtarget=annotation]
+ \step[fieldsource=archiveprefix, fieldtarget=eprinttype]
+ \step[fieldsource=journal, fieldtarget=journaltitle]
+ \step[fieldsource=primaryclass, fieldtarget=eprintclass]
+ \step[fieldsource=key, fieldtarget=sortkey]
+ \step[fieldsource=pdf, fieldtarget=file]
+ }
+}
+
+% ------------------------------------------------------------------
+% META-FIELDS
+% ------------------------------------------------------------------
+
+\DeclareLabelname{%
+ \field{shortauthor}
+ \field{author}
+ \field{shorteditor}
+ \field{editor}
+ \field{translator}
+}
+
+\DeclareLabeldate{%
+ \field{date}
+ \field{year}
+ \field{eventdate}
+ \field{origdate}
+ \field{urldate}
+ \literal{nodate}
+}
+
+\DeclareExtradate{%
+ \scope{
+ \field{labelyear}
+ \field{year}
+ }
+}
+
+\DeclareExtradateContext{%
+ \field{labelname}
+ \field{labeltitle}
+}
+
+\DeclareLabeltitle{%
+ \field{shorttitle}
+ \field{title}
+ \field{maintitle}
+}
+
+% ------------------------------------------------------------------
+% LABELALPHA TEMPLATE
+% ------------------------------------------------------------------
+
+\DeclareLabelalphaTemplate{
+ \labelelement{
+ \field[final]{shorthand}
+ \field{label}
+ \field[strwidth=3,strside=left,ifnames=1]{labelname}
+ \field[strwidth=1,strside=left]{labelname}
+ }
+ \labelelement{
+ \field[strwidth=2,strside=right]{year}
+ }
+}
+
+% ------------------------------------------------------------------
+% LABELALPHA NAME TEMPLATE
+% ------------------------------------------------------------------
+
+\DeclareLabelalphaNameTemplate{
+ \namepart[use=true, pre=true, strwidth=1, compound=true]{prefix}
+ \namepart{family}
+}
+
+% ------------------------------------------------------------------
+% UNIQUENAME TEMPLATE
+% ------------------------------------------------------------------
+
+\DeclareUniquenameTemplate{
+ \namepart[use=true, base=true]{prefix}
+ \namepart[base=true]{family}
+ \namepart{given}
+}
+
+% ------------------------------------------------------------------
+% SORTING
+% ------------------------------------------------------------------
+
+\DeclareSortingNamekeyTemplate{
+ \keypart{
+ \namepart[use=true]{prefix}
+ \namepart{family}
+ }
+ \keypart{
+ \namepart{given}
+ }
+ \keypart{
+ \namepart{suffix}
+ }
+ \keypart{
+ \namepart[use=false]{prefix}
+ }
+}
+
+\DeclarePresort{mm}
+
+\DeclareSortingTemplate{shorthand}{
+ \sort[final]{
+ \field{sortshorthand}
+ }
+ \sort{
+ \field{shorthand}
+ }
+}
+
+\DeclareSortingTemplate{none}{
+ \sort{\citeorder}
+ \sort{\intciteorder}
+}
+
+\DeclareSortingTemplate{count}{
+ \sort[direction=descending]{\citecount}
+}
+
+\DeclareSortingTemplate{debug}{
+ \sort{
+ \field{entrykey}
+ }
+}
+
+\DeclareSortingTemplate{nty}{
+ \sort{
+ \field{presort}
+ }
+ \sort[final]{
+ \field{sortkey}
+ }
+ \sort{
+ \field{sortname}
+ \field{author}
+ \field{editor}
+ \field{translator}
+ \field{sorttitle}
+ \field{title}
+ }
+ \sort{
+ \field{sorttitle}
+ \field{title}
+ }
+ \sort{
+ \field{sortyear}
+ \field{year}
+ }
+ \sort{
+ \field{volume}
+ \literal{0}
+ }
+}
+
+\DeclareSortingTemplate{nyt}{
+ \sort{
+ \field{presort}
+ }
+ \sort[final]{
+ \field{sortkey}
+ }
+ \sort{
+ \field{sortname}
+ \field{author}
+ \field{editor}
+ \field{translator}
+ \field{sorttitle}
+ \field{title}
+ }
+ \sort{
+ \field{sortyear}
+ \field{year}
+ }
+ \sort{
+ \field{sorttitle}
+ \field{title}
+ }
+ \sort{
+ \field{volume}
+ \literal{0}
+ }
+}
+
+\DeclareSortingTemplate{nyvt}{
+ \sort{
+ \field{presort}
+ }
+ \sort[final]{
+ \field{sortkey}
+ }
+ \sort{
+ \field{sortname}
+ \field{author}
+ \field{editor}
+ \field{translator}
+ \field{sorttitle}
+ \field{title}
+ }
+ \sort{
+ \field{sortyear}
+ \field{year}
+ }
+ \sort{
+ \field{volume}
+ \literal{0}
+ }
+ \sort{
+ \field{sorttitle}
+ \field{title}
+ }
+}
+
+\DeclareSortingTemplate{anyt}{
+ \sort{
+ \field{presort}
+ }
+ \sort{
+ \field{labelalpha}
+ }
+ \sort[final]{
+ \field{sortkey}
+ }
+ \sort{
+ \field{sortname}
+ \field{author}
+ \field{editor}
+ \field{translator}
+ \field{sorttitle}
+ \field{title}
+ }
+ \sort{
+ \field{sortyear}
+ \field{year}
+ }
+ \sort{
+ \field{sorttitle}
+ \field{title}
+ }
+ \sort{
+ \field{volume}
+ \literal{0}
+ }
+}
+
+\DeclareSortingTemplate{anyvt}{
+ \sort{
+ \field{presort}
+ }
+ \sort{
+ \field{labelalpha}
+ }
+ \sort[final]{
+ \field{sortkey}
+ }
+ \sort{
+ \field{sortname}
+ \field{author}
+ \field{editor}
+ \field{translator}
+ \field{sorttitle}
+ \field{title}
+ }
+ \sort{
+ \field{sortyear}
+ \field{year}
+ }
+ \sort{
+ \field{volume}
+ \literal{0}
+ }
+ \sort{
+ \field{sorttitle}
+ \field{title}
+ }
+}
+
+\DeclareSortingTemplate{ynt}{
+ \sort{
+ \field{presort}
+ }
+ \sort[final]{
+ \field{sortkey}
+ }
+ \sort{
+ \field{sortyear}
+ \field{year}
+ \literal{9999}
+ }
+ \sort{
+ \field{sortname}
+ \field{author}
+ \field{editor}
+ \field{translator}
+ \field{sorttitle}
+ \field{title}
+ }
+ \sort{
+ \field{sorttitle}
+ \field{title}
+ }
+}
+
+\DeclareSortingTemplate{ydnt}{
+ \sort{
+ \field{presort}
+ }
+ \sort[final]{
+ \field{sortkey}
+ }
+ \sort[direction=descending]{
+ \field{sortyear}
+ \field{year}
+ \literal{9999}
+ }
+ \sort{
+ \field{sortname}
+ \field{author}
+ \field{editor}
+ \field{translator}
+ \field{sorttitle}
+ \field{title}
+ }
+ \sort{
+ \field{sorttitle}
+ \field{title}
+ }
+}
+
+% ------------------------------------------------------------------
+% DATA INHERITANCE (CROSSREF)
+% ------------------------------------------------------------------
+
+\DefaultInheritance{all=true,override=false}
+
+\DeclareDataInheritance{mvbook,book}{inbook,bookinbook,suppbook}{%
+ \inherit{author}{author}
+ \inherit{author}{bookauthor}
+}
+
+\DeclareDataInheritance{mvbook}{book,inbook,bookinbook,suppbook}{%
+ \inherit{title}{maintitle}
+ \inherit{subtitle}{mainsubtitle}
+ \inherit{titleaddon}{maintitleaddon}
+ \noinherit{shorttitle}
+ \noinherit{sorttitle}
+ \noinherit{indextitle}
+ \noinherit{indexsorttitle}
+}
+
+\DeclareDataInheritance{mvcollection,mvreference}
+{collection,reference,incollection,inreference,suppcollection}{%
+ \inherit{title}{maintitle}
+ \inherit{subtitle}{mainsubtitle}
+ \inherit{titleaddon}{maintitleaddon}
+ \noinherit{shorttitle}
+ \noinherit{sorttitle}
+ \noinherit{indextitle}
+ \noinherit{indexsorttitle}
+}
+
+\DeclareDataInheritance{mvproceedings}{proceedings,inproceedings}{%
+ \inherit{title}{maintitle}
+ \inherit{subtitle}{mainsubtitle}
+ \inherit{titleaddon}{maintitleaddon}
+ \noinherit{shorttitle}
+ \noinherit{sorttitle}
+ \noinherit{indextitle}
+ \noinherit{indexsorttitle}
+}
+
+\DeclareDataInheritance{book}{inbook,bookinbook,suppbook}{%
+ \inherit{title}{booktitle}
+ \inherit{subtitle}{booksubtitle}
+ \inherit{titleaddon}{booktitleaddon}
+ \noinherit{shorttitle}
+ \noinherit{sorttitle}
+ \noinherit{indextitle}
+ \noinherit{indexsorttitle}
+}
+
+\DeclareDataInheritance{collection,reference}
+{incollection,inreference,suppcollection}{%
+ \inherit{title}{booktitle}
+ \inherit{subtitle}{booksubtitle}
+ \inherit{titleaddon}{booktitleaddon}
+ \noinherit{shorttitle}
+ \noinherit{sorttitle}
+ \noinherit{indextitle}
+ \noinherit{indexsorttitle}
+}
+
+\DeclareDataInheritance{proceedings}{inproceedings}{%
+ \inherit{title}{booktitle}
+ \inherit{subtitle}{booksubtitle}
+ \inherit{titleaddon}{booktitleaddon}
+ \noinherit{shorttitle}
+ \noinherit{sorttitle}
+ \noinherit{indextitle}
+ \noinherit{indexsorttitle}
+}
+
+\DeclareDataInheritance{periodical}{article,suppperiodical}{%
+ \inherit{title}{journaltitle}
+ \inherit{subtitle}{journalsubtitle}
+ \inherit{titleaddon}{journaltitleaddon}
+ \noinherit{shorttitle}
+ \noinherit{sorttitle}
+ \noinherit{indextitle}
+ \noinherit{indexsorttitle}
+}
+
+\DeclareDataInheritance{*}{*}{%
+ \noinherit{ids}
+ \noinherit{crossref}
+ \noinherit{xref}
+ \noinherit{entryset}
+ \noinherit{entrysubtype}
+ \noinherit{execute}
+ \noinherit{label}
+ \noinherit{options}
+ \noinherit{presort}
+ \noinherit{related}
+ \noinherit{relatedoptions}
+ \noinherit{relatedstring}
+ \noinherit{relatedtype}
+ \noinherit{shorthand}
+ \noinherit{shorthandintro}
+ \noinherit{sortkey}
+ \noinherit{langid}
+}
+
+% ------------------------------------------------------------------
+% MACROS FOR LBX FILES
+% ------------------------------------------------------------------
+
+\newcommand*{\lbx@initnamehook}[1]{}
+\newcommand*{\lbx@inittitlehook}[1]{}
+\newcommand*{\lbx@finalnamedelim}[1]{\printdelim{finalnamedelim}}
+\newcommand*{\lbx@finallistdelim}[1]{\printdelim{finallistdelim}}
+
+\newcommand*{\lbx@lfromlang}{%
+ \iflistundef{origlanguage}
+ {\unspace}
+ {\printlist[lfromoriglanguage]{origlanguage}}}
+
+\newcommand*{\lbx@sfromlang}{%
+ \iflistundef{origlanguage}
+ {\unspace}
+ {\printlist[sfromoriglanguage]{origlanguage}}}
+
+% ------------------------------------------------------------------
+% MISCELLANEOUS
+% ------------------------------------------------------------------
+
+% ordinals
+
+\newcommand*{\mkbibordedition}{\mkbibordinal}
+\newcommand*{\mkbibordseries}{\mkbibordinal}
+
+% american
+
+\newrobustcmd*{\uspunctuation}{%
+ \DeclareQuotePunctuation{.,}%
+ \DeclarePunctuationPairs{comma}{*}}
+\newrobustcmd*{\stdpunctuation}{%
+ \DeclareQuotePunctuation{}%
+ \DeclarePunctuationPairs{comma}{*!?}}
+
+% catalan and french
+
+\newtoggle{smartof}
+\newrobustcmd*{\smartof}{\global\toggletrue{smartof}}
+\newrobustcmd*{\forceD}[1]{#1}
+\newrobustcmd*{\forceDE}[1]{#1}
+
+\AtBeginDocument{%
+ \@ifpackageloaded{babel}
+ {\ifdef\AutoSpaceBeforeFDP
+ {\newrobustcmd*{\EnsureAutoSpaceBeforeFDP}{%
+ \iflanguage{french}
+ {\AutoSpaceBeforeFDP}
+ {}}%
+ \appto\bibsetup{\EnsureAutoSpaceBeforeFDP}%
+ \appto\citesetup{\EnsureAutoSpaceBeforeFDP}}
+ {}}
+ {}}
+
+% spanish
+
+\newcounter{smartand}
+\defcounter{smartand}{1}
+\newrobustcmd*{\forceY}[1]{#1}
+\newrobustcmd*{\forceE}[1]{#1}
+
+% ------------------------------------------------------------------
+% PREDEFINED HEADINGS
+% ------------------------------------------------------------------
+
+\newcommand*{\abx@classtype}{0}
+\@ifclassloaded{article}
+ {}
+ {\@ifclassloaded{book}
+ {\def\abx@classtype{1}}
+ {\@ifclassloaded{report}
+ {\def\abx@classtype{1}}
+ {\@ifclassloaded{scrartcl}
+ {\def\abx@classtype{2}}
+ {\@ifclassloaded{scrbook}
+ {\def\abx@classtype{3}}
+ {\@ifclassloaded{scrreprt}
+ {\def\abx@classtype{3}}
+ {\@ifclassloaded{memoir}
+ {\ifbool{artopt}
+ {\def\abx@classtype{4}}
+ {\def\abx@classtype{5}}}
+ {\ifundef\chapter
+ {}
+ {\def\abx@classtype{1}}}}}}}}}
+
+\defbibheading{none}{}
+
+\def\abx@MakeMarkcase{\MakeUppercase}
+\AtBeginDocument{%
+ \ifcsundef{MakeMarkcase}{}{\def\abx@MakeMarkcase{\MakeMarkcase}}}
+
+\ifcase\abx@classtype\relax % article
+ \defbibheading{bibliography}[\refname]{%
+ \section*{#1}%
+ \@mkboth{\abx@MakeMarkcase{#1}}{\abx@MakeMarkcase{#1}}}
+ \defbibheading{biblist}[\biblistname]{%
+ \section*{#1}%
+ \@mkboth{\abx@MakeMarkcase{#1}}{\abx@MakeMarkcase{#1}}}
+ \defbibheading{bibintoc}[\refname]{%
+ \section*{#1}%
+ \addcontentsline{toc}{section}{#1}%
+ \@mkboth{\abx@MakeMarkcase{#1}}{\abx@MakeMarkcase{#1}}}
+ \defbibheading{biblistintoc}[\biblistname]{%
+ \section*{#1}%
+ \addcontentsline{toc}{section}{#1}%
+ \@mkboth{\abx@MakeMarkcase{#1}}{\abx@MakeMarkcase{#1}}}
+ \defbibheading{bibnumbered}[\refname]{%
+ \section{#1}}
+ \defbibheading{biblistnumbered}[\biblistname]{%
+ \section{#1}}
+ \defbibheading{subbibliography}[\refname]{%
+ \subsection*{#1}}
+ \defbibheading{subbibintoc}[\refname]{%
+ \subsection*{#1}%
+ \addcontentsline{toc}{subsection}{#1}}
+ \defbibheading{subbibnumbered}[\refname]{%
+ \subsection{#1}}
+
+\or % book/report
+ \defbibheading{bibliography}[\bibname]{%
+ \chapter*{#1}%
+ \@mkboth{\abx@MakeMarkcase{#1}}{\abx@MakeMarkcase{#1}}}
+ \defbibheading{biblist}[\biblistname]{%
+ \chapter*{#1}%
+ \@mkboth{\abx@MakeMarkcase{#1}}{\abx@MakeMarkcase{#1}}}
+ \defbibheading{bibintoc}[\bibname]{%
+ \chapter*{#1}%
+ \addcontentsline{toc}{chapter}{#1}%
+ \@mkboth{\abx@MakeMarkcase{#1}}{\abx@MakeMarkcase{#1}}}
+ \defbibheading{biblistintoc}[\biblistname]{%
+ \chapter*{#1}%
+ \addcontentsline{toc}{chapter}{#1}%
+ \@mkboth{\abx@MakeMarkcase{#1}}{\abx@MakeMarkcase{#1}}}
+ \defbibheading{bibnumbered}[\bibname]{%
+ \chapter{#1}}
+ \defbibheading{biblistnumbered}[\biblistname]{%
+ \chapter{#1}}
+ \defbibheading{subbibliography}[\refname]{%
+ \section*{#1}%
+ \if@twoside\markright{\abx@MakeMarkcase{#1}}\fi}
+ \defbibheading{subbibintoc}[\refname]{%
+ \section*{#1}%
+ \addcontentsline{toc}{section}{#1}%
+ \if@twoside\markright{\abx@MakeMarkcase{#1}}\fi}
+ \defbibheading{subbibnumbered}[\refname]{%
+ \section{#1}}
+
+\or % scrartcl
+ \defbibheading{bibliography}[\refname]{%
+ \ifcsundef{bibliography@heading}
+ {\ifkomabibtotocnumbered
+ {\section{#1}}
+ {\ifkomabibtotoc
+ {\addsec{#1}}
+ {\section*{#1}%
+ \ifcsundef{@mkdouble}
+ {\@mkboth{\abx@MakeMarkcase{#1}}{\abx@MakeMarkcase{#1}}}
+ {\@mkdouble{\abx@MakeMarkcase{#1}}}}}}
+ {\bibliography@heading{#1}}}
+ \defbibheading{biblist}[\biblistname]{%
+ \ifcsundef{bibliography@heading}
+ {\ifkomabibtotocnumbered
+ {\section{#1}}
+ {\ifkomabibtotoc
+ {\addsec{#1}}
+ {\section*{#1}%
+ \ifcsundef{@mkdouble}
+ {\@mkboth{\abx@MakeMarkcase{#1}}{\abx@MakeMarkcase{#1}}}
+ {\@mkdouble{\abx@MakeMarkcase{#1}}}}}}
+ {\bibliography@heading{#1}}}
+ \defbibheading{bibintoc}[\refname]{%
+ \addsec{#1}}
+ \defbibheading{biblistintoc}[\biblistname]{%
+ \addsec{#1}}
+ \defbibheading{bibnumbered}[\refname]{%
+ \section{#1}}
+ \defbibheading{biblistnumbered}[\biblistname]{%
+ \section{#1}}
+ \defbibheading{subbibliography}[\refname]{%
+ \subsection*{#1}%
+ \ifcsundef{@mkright}
+ {\ifx\@mkboth\@gobbletwo\else\markright{\abx@MakeMarkcase{#1}}\fi}
+ {\@mkright{\abx@MakeMarkcase{#1}}}}
+ \defbibheading{subbibintoc}[\refname]{%
+ \subsection*{#1}%
+ \addcontentsline{toc}{subsection}{#1}%
+ \ifcsundef{@mkright}
+ {\ifx\@mkboth\@gobbletwo\else\markright{\abx@MakeMarkcase{#1}}\fi}
+ {\@mkright{\abx@MakeMarkcase{#1}}}}
+ \defbibheading{subbibnumbered}[\refname]{%
+ \subsection{#1}}
+
+\or % scrbook/scrreprt
+ \defbibheading{bibliography}[\bibname]{%
+ \ifcsundef{bibliography@heading}
+ {\ifkomabibtotocnumbered
+ {\chapter{#1}}
+ {\ifkomabibtotoc
+ {\addchap{#1}}
+ {\chapter*{#1}
+ \ifcsundef{@mkdouble}
+ {\@mkboth{\abx@MakeMarkcase{#1}}{\abx@MakeMarkcase{#1}}}
+ {\@mkdouble{\abx@MakeMarkcase{#1}}}}}}
+ {\bibliography@heading{#1}}}
+ \defbibheading{biblist}[\biblistname]{%
+ \ifcsundef{bibliography@heading}
+ {\ifkomabibtotocnumbered
+ {\chapter{#1}}
+ {\ifkomabibtotoc
+ {\addchap{#1}}
+ {\chapter*{#1}
+ \ifcsundef{@mkdouble}
+ {\@mkboth{\abx@MakeMarkcase{#1}}{\abx@MakeMarkcase{#1}}}
+ {\@mkdouble{\abx@MakeMarkcase{#1}}}}}}
+ {\bibliography@heading{#1}}}
+ \defbibheading{bibintoc}[\bibname]{%
+ \addchap{#1}}
+ \defbibheading{biblistintoc}[\biblistname]{%
+ \addchap{#1}}
+ \defbibheading{bibnumbered}[\bibname]{%
+ \chapter{#1}}
+ \defbibheading{biblistnumbered}[\biblistname]{%
+ \chapter{#1}}
+ \defbibheading{subbibliography}[\refname]{%
+ \section*{#1}%
+ \ifcsundef{@mkright}
+ {\ifx\@mkboth\@gobbletwo\else\markright{\abx@MakeMarkcase{#1}}\fi}
+ {\@mkright{\abx@MakeMarkcase{#1}}}}
+ \defbibheading{subbibintoc}[\refname]{%
+ \addsec{#1}}
+ \defbibheading{subbibnumbered}[\refname]{%
+ \section{#1}}
+
+\or % memoir (article)
+ \ifcsundef{memUChead}{}{\def\abx@MakeMarkcase{\memUChead}}%
+ \defbibheading{bibliography}[\refname]{%
+ \chapter*{#1}%
+ \if@twoside
+ \markboth{\abx@MakeMarkcase{#1}}{\abx@MakeMarkcase{#1}}%
+ \else
+ \markright{\abx@MakeMarkcase{#1}}%
+ \fi
+ \ifmemoirbibintoc
+ {\phantomsection
+ \addcontentsline{toc}{chapter}{#1}}
+ {}}
+ \defbibheading{biblist}[\biblistname]{%
+ \chapter*{#1}%
+ \if@twoside
+ \markboth{\abx@MakeMarkcase{#1}}{\abx@MakeMarkcase{#1}}%
+ \else
+ \markright{\abx@MakeMarkcase{#1}}%
+ \fi
+ \ifmemoirbibintoc
+ {\phantomsection
+ \addcontentsline{toc}{chapter}{#1}}
+ {}}
+ \defbibheading{bibintoc}[\refname]{%
+ \chapter*{#1}%
+ \if@twoside
+ \markboth{\abx@MakeMarkcase{#1}}{\abx@MakeMarkcase{#1}}%
+ \else
+ \markright{\abx@MakeMarkcase{#1}}%
+ \fi
+ \phantomsection
+ \addcontentsline{toc}{chapter}{#1}}
+ \defbibheading{biblistintoc}[\biblistname]{%
+ \chapter*{#1}%
+ \if@twoside
+ \markboth{\abx@MakeMarkcase{#1}}{\abx@MakeMarkcase{#1}}%
+ \else
+ \markright{\abx@MakeMarkcase{#1}}%
+ \fi
+ \phantomsection
+ \addcontentsline{toc}{chapter}{#1}}
+ \defbibheading{bibnumbered}[\refname]{%
+ \chapter{#1}}
+ \defbibheading{biblistnumbered}[\biblistname]{%
+ \chapter{#1}}
+ \defbibheading{subbibliography}[\refname]{%
+ \section*{#1}%
+ \if@twoside\markright{\abx@MakeMarkcase{#1}}\fi
+ \ifmemoirbibintoc
+ {\phantomsection
+ \addcontentsline{toc}{section}{#1}}
+ {}}
+ \defbibheading{subbibintoc}[\refname]{%
+ \section*{#1}%
+ \if@twoside\markright{\abx@MakeMarkcase{#1}}\fi
+ \phantomsection
+ \addcontentsline{toc}{section}{#1}}
+ \defbibheading{subbibnumbered}[\refname]{%
+ \section{#1}}
+
+\or % memoir (book)
+ \ifcsundef{memUChead}{}{\def\abx@MakeMarkcase{\memUChead}}%
+ \defbibheading{bibliography}[\bibname]{%
+ \chapter*{#1}%
+ \if@twoside
+ \markboth{\abx@MakeMarkcase{#1}}{\abx@MakeMarkcase{#1}}%
+ \else
+ \markright{\abx@MakeMarkcase{#1}}%
+ \fi
+ \ifmemoirbibintoc
+ {\phantomsection
+ \addcontentsline{toc}{chapter}{#1}}
+ {}}
+ \defbibheading{biblist}[\biblistname]{%
+ \chapter*{#1}%
+ \if@twoside
+ \markboth{\abx@MakeMarkcase{#1}}{\abx@MakeMarkcase{#1}}%
+ \else
+ \markright{\abx@MakeMarkcase{#1}}%
+ \fi
+ \ifmemoirbibintoc
+ {\phantomsection
+ \addcontentsline{toc}{chapter}{#1}}
+ {}}
+ \defbibheading{bibintoc}[\bibname]{%
+ \chapter*{#1}%
+ \if@twoside
+ \markboth{\abx@MakeMarkcase{#1}}{\abx@MakeMarkcase{#1}}%
+ \else
+ \markright{\abx@MakeMarkcase{#1}}%
+ \fi
+ \phantomsection
+ \addcontentsline{toc}{chapter}{#1}}
+ \defbibheading{biblistintoc}[\biblistname]{%
+ \chapter*{#1}%
+ \if@twoside
+ \markboth{\abx@MakeMarkcase{#1}}{\abx@MakeMarkcase{#1}}%
+ \else
+ \markright{\abx@MakeMarkcase{#1}}%
+ \fi
+ \phantomsection
+ \addcontentsline{toc}{chapter}{#1}}
+ \defbibheading{bibnumbered}[\bibname]{%
+ \chapter{#1}}
+ \defbibheading{biblistnumbered}[\biblistname]{%
+ \chapter{#1}}
+ \defbibheading{subbibliography}[\refname]{%
+ \section*{#1}%
+ \if@twoside\markright{\abx@MakeMarkcase{#1}}\fi
+ \ifmemoirbibintoc
+ {\phantomsection
+ \addcontentsline{toc}{section}{#1}}
+ {}}
+ \defbibheading{subbibintoc}[\refname]{%
+ \section*{#1}%
+ \if@twoside\markright{\abx@MakeMarkcase{#1}}\fi
+ \phantomsection
+ \addcontentsline{toc}{section}{#1}}
+ \defbibheading{subbibnumbered}[\refname]{%
+ \section{#1}}
+
+\fi
+
+% ------------------------------------------------------------------
+% GENERIC CITATION COMMANDS
+% ------------------------------------------------------------------
+
+\DeclareCiteCommand{\fullcite}
+ {\usebibmacro{prenote}}
+ {\usedriver
+ {\DeclareNameAlias{sortname}{default}}
+ {\thefield{entrytype}}}
+ {\multicitedelim}
+ {\usebibmacro{postnote}}
+
+\DeclareCiteCommand{\footfullcite}[\mkbibfootnote]
+ {\usebibmacro{prenote}}
+ {\usedriver
+ {\DeclareNameAlias{sortname}{default}}
+ {\thefield{entrytype}}}
+ {\multicitedelim}
+ {\usebibmacro{postnote}}
+
+\DeclareCiteCommand{\citeauthor}
+ {\boolfalse{citetracker}%
+ \boolfalse{pagetracker}%
+ \usebibmacro{prenote}}
+ {\ifciteindex
+ {\indexnames{labelname}}
+ {}%
+ \printnames{labelname}}
+ {\multicitedelim}
+ {\usebibmacro{postnote}}
+
+\DeclareCiteCommand*{\citeauthor}
+ {\boolfalse{citetracker}%
+ \boolfalse{pagetracker}%
+ \usebibmacro{prenote}}
+ {\ifciteindex
+ {\indexnames{labelname}}
+ {}%
+ \printnames[][1-1]{labelname}}
+ {\multicitedelim}
+ {\usebibmacro{postnote}}
+
+\DeclareCiteCommand{\citetitle}
+ {\boolfalse{citetracker}%
+ \boolfalse{pagetracker}%
+ \usebibmacro{prenote}}
+ {\ifciteindex
+ {\indexfield{indextitle}}
+ {}%
+ \printfield[citetitle]{labeltitle}}
+ {\multicitedelim}
+ {\usebibmacro{postnote}}
+
+\DeclareCiteCommand*{\citetitle}
+ {\boolfalse{citetracker}%
+ \boolfalse{pagetracker}%
+ \usebibmacro{prenote}}
+ {\ifciteindex
+ {\indexfield{indextitle}}
+ {}%
+ \printfield[citetitle]{title}}
+ {\multicitedelim}
+ {\usebibmacro{postnote}}
+
+\DeclareCiteCommand{\citeyear}
+ {\boolfalse{citetracker}%
+ \boolfalse{pagetracker}%
+ \usebibmacro{prenote}}
+ {\printfield{year}}
+ {\multicitedelim}
+ {\usebibmacro{postnote}}
+
+\DeclareCiteCommand*{\citeyear}
+ {\boolfalse{citetracker}%
+ \boolfalse{pagetracker}%
+ \usebibmacro{prenote}}
+ {\printfield{year}\printfield{extradate}}
+ {\multicitedelim}
+ {\usebibmacro{postnote}}
+
+\DeclareCiteCommand{\citedate}
+ {\boolfalse{citetracker}%
+ \boolfalse{pagetracker}%
+ \usebibmacro{prenote}}
+ {\printdate}
+ {\multicitedelim}
+ {\usebibmacro{postnote}}
+
+\DeclareCiteCommand*{\citedate}
+ {\boolfalse{citetracker}%
+ \boolfalse{pagetracker}%
+ \usebibmacro{prenote}}
+ {\printdateextra}
+ {\multicitedelim}
+ {\usebibmacro{postnote}}
+
+\DeclareCiteCommand{\citeurl}
+ {\boolfalse{citetracker}%
+ \boolfalse{pagetracker}%
+ \usebibmacro{prenote}}
+ {\printfield[citeurl]{url}}
+ {\multicitedelim}
+ {\usebibmacro{postnote}}
+
+\DeclareCiteCommand{\notecite}
+ {\printfield{prenote}%
+ \setunit*{\printdelim{prenotedelim}}}
+ {}
+ {}
+ {\printfield{postnote}}
+
+\DeclareCiteCommand{\pnotecite}[\mkbibparens]
+ {\printfield{prenote}%
+ \setunit*{\printdelim{prenotedelim}}}
+ {}
+ {}
+ {\printfield{postnote}}
+
+\DeclareCiteCommand{\fnotecite}[\mkbibfootnote]
+ {\printfield{prenote}%
+ \setunit*{\printdelim{prenotedelim}}}
+ {}
+ {}
+ {\printfield{postnote}}
+
+\newrobustcmd*{\volcite}{\volcitecmd\cite}
+\newrobustcmd*{\pvolcite}{\volcitecmd\parencite}
+\newrobustcmd*{\fvolcite}{\volcitecmd\footcite}
+\newrobustcmd*{\ftvolcite}{\volcitecmd\footcitetext}
+\newrobustcmd*{\svolcite}{\volcitecmd\smartcite}
+\newrobustcmd*{\tvolcite}{\volcitecmd\textcite}
+\newrobustcmd*{\avolcite}{\volcitecmd\autocite}
+
+\newrobustcmd*{\volcites}{\multivolcitecmd\cites}
+\newrobustcmd*{\pvolcites}{\multivolcitecmd\parencites}
+\newrobustcmd*{\fvolcites}{\multivolcitecmd\footcites}
+\newrobustcmd*{\ftvolcites}{\multivolcitecmd\footcitetexts}
+\newrobustcmd*{\svolcites}{\multivolcitecmd\smartcites}
+\newrobustcmd*{\tvolcites}{\multivolcitecmd\textcites}
+\newrobustcmd*{\avolcites}{\multivolcitecmd\autocites}
+
+\newrobustcmd*{\Cite}{\bibsentence\cite}
+\newrobustcmd*{\Parencite}{\bibsentence\parencite}
+\newrobustcmd*{\Footcite}{\footcite}
+\newrobustcmd*{\Footcitetext}{\footcitetext}
+\newrobustcmd*{\Smartcite}{\bibsentence\smartcite}
+\newrobustcmd*{\Textcite}{\bibsentence\textcite}
+\newrobustcmd*{\Citeauthor}{%
+ \@ifstar{\bibsentence\citeauthor*}{\bibsentence\citeauthor}}
+\newrobustcmd*{\Citetitle}{\bibsentence\citetitle}
+
+\newrobustcmd*{\Volcite}{\volcitecmd\Cite}
+\newrobustcmd*{\Pvolcite}{\volcitecmd\Parencite}
+\newrobustcmd*{\Fvolcite}{\volcitecmd\Footcite}
+\newrobustcmd*{\Ftvolcite}{\volcitecmd\Footcitetext}
+\newrobustcmd*{\Svolcite}{\volcitecmd\Smartcite}
+\newrobustcmd*{\Tvolcite}{\volcitecmd\Textcite}
+\newrobustcmd*{\Avolcite}{\volcitecmd\Autocite}
+
+\newrobustcmd*{\Volcites}{\multivolcitecmd\Cites}
+\newrobustcmd*{\Pvolcites}{\multivolcitecmd\Parencites}
+\newrobustcmd*{\Fvolcites}{\multivolcitecmd\Footcites}
+\newrobustcmd*{\Ftvolcites}{\multivolcitecmd\Footcitetext}
+\newrobustcmd*{\Svolcites}{\multivolcitecmd\Smartcites}
+\newrobustcmd*{\Tvolcites}{\multivolcitecmd\Textcites}
+\newrobustcmd*{\Avolcites}{\multivolcitecmd\Autocites}
+
+\newrobustcmd*{\Notecite}{\bibsentence\notecite}
+\newrobustcmd*{\Pnotecite}{\bibsentence\pnotecite}
+\newrobustcmd*{\Fnotecite}{\fnotecite}
+
+\DeclareMultiCiteCommand{\cites}{\cite}{\multicitedelim}
+\DeclareMultiCiteCommand{\parencites}[\mkbibparens]{\parencite}{\multicitedelim}
+\DeclareMultiCiteCommand{\footcites}[\mkbibfootnote]{\footcite}{\multicitedelim}
+\DeclareMultiCiteCommand{\footcitetexts}[\mkbibfootnotetext]
+ {\footcitetext}{\multicitedelim}
+\DeclareMultiCiteCommand{\smartcites}[\iffootnote\mkbibparens\mkbibfootnote]
+ {\smartcite}{\multicitedelim}
+\DeclareMultiCiteCommand{\supercites}[\mkbibsuperscript]
+ {\supercite}{\supercitedelim}
+\DeclareMultiCiteCommand{\textcites}{\textcite}{\multicitedelim}
+
+\newrobustcmd*{\Cites}{\bibsentence\cites}
+\newrobustcmd*{\Parencites}{\bibsentence\parencites}
+\newrobustcmd*{\Footcites}{\footcites}
+\newrobustcmd*{\Footcitetexts}{\footcitetexts}
+\newrobustcmd*{\Smartcites}{\bibsentence\smartcites}
+\newrobustcmd*{\Textcites}{\bibsentence\textcites}
+
+\DeclareAutoCiteCommand{plain}{\cite}{\cites}
+\DeclareAutoCiteCommand{inline}{\parencite}{\parencites}
+%\DeclareAutoCiteCommand{footnote}[l]{\footcite}{\footcites}
+\DeclareAutoCiteCommand{footnote}[f]{\smartcite}{\smartcites}
+\DeclareAutoCiteCommand{superscript}[l]{\supercite}{\supercites}
+
+\newrobustcmd*{\Autocite}{\bibsentence\autocite}
+\newrobustcmd*{\Autocites}{\bibsentence\autocites}
+
+% ------------------------------------------------------------------
+% GENERIC CITATION MACROS
+% ------------------------------------------------------------------
+
+\newbibmacro*{citeindex}{%
+ \ifciteindex
+ {\indexnames{labelname}%
+ \indexfield{indextitle}}
+ {}}
+
+\newbibmacro*{shorthandintro}{%
+ \iffieldundef{shorthandintro}
+ {\iffieldundef{shorthand}
+ {}
+ {\setunit{\addspace}%
+ \printtext[parens]{%
+ \bibstring{citedas}\space
+ \printfield{shorthand}}}}
+ {\setunit{\addspace}%
+ \printtext[parens]{\printfield{shorthandintro}}}}
+
+% citation commands
+
+\newbibmacro*{prenote}{%
+ \iffieldundef{prenote}
+ {}
+ {\printfield{prenote}%
+ \setunit{\printdelim{prenotedelim}}}}
+
+\newbibmacro*{postnote}{%
+ \iffieldundef{postnote}
+ {}
+ {\setunit{\printdelim{postnotedelim}}%
+ \printfield{postnote}}}
+
+% multicite commands
+
+\newbibmacro*{multiprenote}{%
+ \iffieldundef{multiprenote}
+ {}
+ {\printfield{multiprenote}%
+ \printdelim{multiprenotedelim}}}
+
+\newbibmacro*{multipostnote}{%
+ \iffieldundef{multipostnote}
+ {}
+ {\printdelim{multipostnotedelim}%
+ \printfield{multipostnote}}}
+
+% ------------------------------------------------------------------
+% GENERIC BIBLIOGRAPHY MACROS
+% ------------------------------------------------------------------
+
+\newbibmacro*{bibindex}{%
+ \ifbibindex
+ {\indexnames{labelname}%
+ \indexfield{indextitle}}
+ {}}
+
+\newbibmacro*{author/editor}{%
+ \ifboolexpr{
+ test \ifuseauthor
+ and
+ not test {\ifnameundef{author}}
+ }
+ {\usebibmacro{author}}
+ {\usebibmacro{editor}}}
+
+\newbibmacro*{author/editor+others}{%
+ \ifboolexpr{
+ test \ifuseauthor
+ and
+ not test {\ifnameundef{author}}
+ }
+ {\usebibmacro{author}}
+ {\usebibmacro{editor+others}}}
+
+\newbibmacro*{author/translator}{%
+ \ifboolexpr{
+ test \ifuseauthor
+ and
+ not test {\ifnameundef{author}}
+ }
+ {\usebibmacro{author}}
+ {\usebibmacro{translator}}}
+
+\newbibmacro*{author/translator+others}{%
+ \ifboolexpr{
+ test \ifuseauthor
+ and
+ not test {\ifnameundef{author}}
+ }
+ {\usebibmacro{author}}
+ {\usebibmacro{translator+others}}}
+
+\newbibmacro*{author/editor/translator}{%
+ \ifboolexpr{
+ test \ifuseauthor
+ and
+ not test {\ifnameundef{author}}
+ }
+ {\usebibmacro{author}}
+ {\ifboolexpr{
+ test \ifuseeditor
+ and
+ not test {\ifnameundef{editor}}
+ }
+ {\usebibmacro{editor}}
+ {\usebibmacro{translator}}}}
+
+\newbibmacro*{author/editor+others/translator+others}{%
+ \ifboolexpr{
+ test \ifuseauthor
+ and
+ not test {\ifnameundef{author}}
+ }
+ {\usebibmacro{author}}
+ {\ifboolexpr{
+ test \ifuseeditor
+ and
+ not test {\ifnameundef{editor}}
+ }
+ {\usebibmacro{editor+others}}
+ {\usebibmacro{translator+others}}}}
+
+\newbibmacro*{author}{%
+ \ifboolexpr{
+ test \ifuseauthor
+ and
+ not test {\ifnameundef{author}}
+ }
+ {\printnames{author}%
+ \iffieldundef{authortype}
+ {}
+ {\setunit{\printdelim{authortypedelim}}%
+ \usebibmacro{authorstrg}}}
+ {}}
+
+\newbibmacro*{editor}{%
+ \ifboolexpr{
+ test \ifuseeditor
+ and
+ not test {\ifnameundef{editor}}
+ }
+ {\printnames{editor}%
+ \setunit{\printdelim{editortypedelim}}%
+ \usebibmacro{editorstrg}%
+ \clearname{editor}}
+ {}}
+
+\newbibmacro*{editor+others}{%
+ \ifboolexpr{
+ test \ifuseeditor
+ and
+ not test {\ifnameundef{editor}}
+ }
+ {\printnames{editor}%
+ \setunit{\printdelim{editortypedelim}}%
+ \usebibmacro{editor+othersstrg}%
+ \clearname{editor}}
+ {}}
+
+\newbibmacro*{translator}{%
+ \ifboolexpr{
+ test \ifusetranslator
+ and
+ not test {\ifnameundef{translator}}
+ }
+ {\printnames{translator}%
+ \setunit{\printdelim{translatortypedelim}}%
+ \usebibmacro{translatorstrg}%
+ \clearname{translator}}
+ {}}
+
+\newbibmacro*{translator+others}{%
+ \ifboolexpr{
+ test \ifusetranslator
+ and
+ not test {\ifnameundef{translator}}
+ }
+ {\printnames{translator}%
+ \setunit{\printdelim{translatortypedelim}}%
+ \usebibmacro{translator+othersstrg}%
+ \clearname{translator}}
+ {}}
+
+\newbibmacro*{authorstrg}{%
+ \iffieldundef{authortype}
+ {}
+ {\printtext[authortype]{%
+ \ifbibxstring{\thefield{authortype}}
+ {\ifboolexpr{
+ test {\ifnumgreater{\value{author}}{1}}
+ or
+ test {\ifandothers{author}}
+ }
+ {\bibstring{\thefield{authortype}s}}
+ {\bibstring{\thefield{authortype}}}}
+ {\thefield{authortype}}}}}
+
+\newbibmacro*{editorstrg}{%
+ \printtext[editortype]{%
+ \iffieldundef{editortype}
+ {\ifboolexpr{
+ test {\ifnumgreater{\value{editor}}{1}}
+ or
+ test {\ifandothers{editor}}
+ }
+ {\bibstring{editors}}
+ {\bibstring{editor}}}
+ {\ifbibxstring{\thefield{editortype}}
+ {\ifboolexpr{
+ test {\ifnumgreater{\value{editor}}{1}}
+ or
+ test {\ifandothers{editor}}
+ }
+ {\bibstring{\thefield{editortype}s}}
+ {\bibstring{\thefield{editortype}}}}
+ {\thefield{editortype}}}}}
+
+\newbibmacro*{editor+othersstrg}{%
+ \iffieldundef{editortype}
+ {\ifboolexpr{
+ test {\ifnumgreater{\value{editor}}{1}}
+ or
+ test {\ifandothers{editor}}
+ }
+ {\def\abx@tempa{editors}}
+ {\def\abx@tempa{editor}}}
+ {\ifboolexpr{
+ test {\ifnumgreater{\value{editor}}{1}}
+ or
+ test {\ifandothers{editor}}
+ }
+ {\edef\abx@tempa{\thefield{editortype}s}}
+ {\edef\abx@tempa{\thefield{editortype}}}}%
+ \let\abx@tempb=\empty
+ \ifnamesequal{editor}{translator}
+ {\appto\abx@tempa{tr}%
+ \appto\abx@tempb{\clearname{translator}}}
+ {}%
+ \ifnamesequal{editor}{commentator}
+ {\appto\abx@tempa{co}%
+ \appto\abx@tempb{\clearname{commentator}}}
+ {\ifnamesequal{editor}{annotator}
+ {\appto\abx@tempa{an}%
+ \appto\abx@tempb{\clearname{annotator}}}
+ {}}%
+ \ifnamesequal{editor}{introduction}
+ {\appto\abx@tempa{in}%
+ \appto\abx@tempb{\clearname{introduction}}}
+ {\ifnamesequal{editor}{foreword}
+ {\appto\abx@tempa{fo}%
+ \appto\abx@tempb{\clearname{foreword}}}
+ {\ifnamesequal{editor}{afterword}
+ {\appto\abx@tempa{af}%
+ \appto\abx@tempb{\clearname{afterword}}}
+ {}}}%
+ \ifbibxstring{\abx@tempa}
+ {\printtext[editortype]{\bibstring{\abx@tempa}}\abx@tempb}
+ {\usebibmacro{editorstrg}}}
+
+\newbibmacro*{translatorstrg}{%
+ \printtext[translatortype]{%
+ \ifboolexpr{
+ test {\ifnumgreater{\value{translator}}{1}}
+ or
+ test {\ifandothers{translator}}
+ }
+ {\bibstring{translators}}
+ {\bibstring{translator}}}}
+
+\newbibmacro*{translator+othersstrg}{%
+ \ifboolexpr{
+ test {\ifnumgreater{\value{translator}}{1}}
+ or
+ test {\ifandothers{translator}}
+ }
+ {\def\abx@tempa{translators}}
+ {\def\abx@tempa{translator}}%
+ \ifnamesequal{translator}{commentator}
+ {\appto\abx@tempa{co}%
+ \clearname{commentator}}
+ {\ifnamesequal{translator}{annotator}
+ {\appto\abx@tempa{an}%
+ \clearname{annotator}}
+ {}}%
+ \ifnamesequal{translator}{introduction}
+ {\appto\abx@tempa{in}%
+ \clearname{introduction}}
+ {\ifnamesequal{translator}{foreword}
+ {\appto\abx@tempa{fo}%
+ \clearname{foreword}}
+ {\ifnamesequal{translator}{afterword}
+ {\appto\abx@tempa{af}%
+ \clearname{afterword}}
+ {}}}%
+ \printtext[translatortype]{\bibstring{\abx@tempa}}}
+
+\newbibmacro*{byauthor}{%
+ \ifboolexpr{
+ test \ifuseauthor
+ or
+ test {\ifnameundef{author}}
+ }
+ {}
+ {\usebibmacro{bytypestrg}{author}{author}%
+ \setunit{\addspace}%
+ \printnames[byauthor]{author}}}
+
+\newbibmacro*{bybookauthor}{%
+ \ifnamesequal{author}{bookauthor}
+ {}
+ {\printnames{bookauthor}}}
+
+\newbibmacro*{byeditor}{%
+ \ifnameundef{editor}
+ {}
+ {\usebibmacro{bytypestrg}{editor}{editor}%
+ \setunit{\addspace}%
+ \printnames[byeditor]{editor}%
+ \newunit}%
+ \usebibmacro{byeditorx}}
+
+\newbibmacro*{byeditorx}{%
+ \ifnameundef{editora}
+ {}
+ {\usebibmacro{bytypestrg}{editora}{editor}%
+ \setunit{\addspace}%
+ \printnames[byeditora]{editora}%
+ \newunit}%
+ \ifnameundef{editorb}
+ {}
+ {\usebibmacro{bytypestrg}{editorb}{editor}%
+ \setunit{\addspace}%
+ \printnames[byeditorb]{editorb}%
+ \newunit}%
+ \ifnameundef{editorc}
+ {}
+ {\usebibmacro{bytypestrg}{editorc}{editor}%
+ \setunit{\addspace}%
+ \printnames[byeditorc]{editorc}%
+ \newunit}}
+
+\newbibmacro*{bytranslator}{%
+ \ifnameundef{translator}
+ {}
+ {\bibstring{bytranslator}%
+ \setunit{\addspace}%
+ \printnames[bytranslator]{translator}}}
+
+\newbibmacro*{byholder}{%
+ \printnames{holder}}
+
+\newbibmacro*{byeditor+others}{%
+ \ifnameundef{editor}
+ {}
+ {\usebibmacro{byeditor+othersstrg}%
+ \setunit{\addspace}%
+ \printnames[byeditor]{editor}%
+ \clearname{editor}%
+ \newunit}%
+ \usebibmacro{byeditorx}%
+ \usebibmacro{bytranslator+others}}
+
+\newbibmacro*{bytranslator+others}{%
+ \ifnameundef{translator}
+ {}
+ {\usebibmacro{bytranslator+othersstrg}%
+ \setunit{\addspace}%
+ \printnames[bytranslator]{translator}%
+ \clearname{translator}%
+ \newunit}%
+ \usebibmacro{withothers}}
+
+\newbibmacro*{bytypestrg}[2]{%
+ \iffieldundef{#1type}
+ {\bibstring{by#2}}
+ {\ifbibxstring{by\thefield{#1type}}
+ {\bibstring{by\thefield{#1type}}}
+ {\printtext{\thefield{#1type}}}}}
+
+\newbibmacro*{byeditor+othersstrg}{%
+ \iffieldundef{editortype}
+ {\def\abx@tempa{byeditor}}
+ {\edef\abx@tempa{by\thefield{editortype}}}%
+ \let\abx@tempb=\empty
+ \ifnamesequal{editor}{translator}
+ {\appto\abx@tempa{tr}%
+ \appto\abx@tempb{\clearname{translator}}}
+ {}%
+ \ifnamesequal{editor}{commentator}
+ {\appto\abx@tempa{co}%
+ \appto\abx@tempb{\clearname{commentator}}}
+ {\ifnamesequal{editor}{annotator}
+ {\appto\abx@tempa{an}%
+ \appto\abx@tempb{\clearname{annotator}}}
+ {}}%
+ \ifnamesequal{editor}{introduction}
+ {\appto\abx@tempa{in}%
+ \appto\abx@tempb{\clearname{introduction}}}
+ {\ifnamesequal{editor}{foreword}
+ {\appto\abx@tempa{fo}%
+ \appto\abx@tempb{\clearname{foreword}}}
+ {\ifnamesequal{editor}{afterword}
+ {\appto\abx@tempa{af}%
+ \appto\abx@tempb{\clearname{afterword}}}
+ {}}}%
+ \ifbibxstring{\abx@tempa}
+ {\printtext{\bibstring{\abx@tempa}}\abx@tempb}
+ {\usebibmacro{bytypestrg}{editor}{editor}}}
+
+\newbibmacro*{bytranslator+othersstrg}{%
+ \def\abx@tempa{bytranslator}%
+ \ifnamesequal{translator}{commentator}
+ {\appto\abx@tempa{co}%
+ \clearname{commentator}}
+ {\ifnamesequal{translator}{annotator}
+ {\appto\abx@tempa{an}%
+ \clearname{annotator}}
+ {}}%
+ \ifnamesequal{translator}{introduction}
+ {\appto\abx@tempa{in}%
+ \clearname{introduction}}
+ {\ifnamesequal{translator}{foreword}
+ {\appto\abx@tempa{fo}%
+ \clearname{foreword}}
+ {\ifnamesequal{translator}{afterword}
+ {\appto\abx@tempa{af}%
+ \clearname{afterword}}
+ {}}}%
+ \bibstring{\abx@tempa}}
+
+\newbibmacro*{withcommentator}{%
+ \ifnameundef{commentator}
+ {}
+ {\bibstring{withcommentator}%
+ \setunit{\addspace}%
+ \printnames[withcommentator]{commentator}}}
+
+\newbibmacro*{withannotator}{%
+ \ifnameundef{annotator}
+ {}
+ {\bibstring{withannotator}%
+ \setunit{\addspace}%
+ \printnames[withannotator]{annotator}}}
+
+\newbibmacro*{withintroduction}{%
+ \ifnameundef{introduction}
+ {}
+ {\bibstring{withintroduction}%
+ \setunit{\addspace}%
+ \printnames[withintroduction]{introduction}}}
+
+\newbibmacro*{withforeword}{%
+ \ifnameundef{foreword}
+ {}
+ {\bibstring{withforeword}%
+ \setunit{\addspace}%
+ \printnames[withforeword]{foreword}}}
+
+\newbibmacro*{withafterword}{%
+ \ifnameundef{afterword}
+ {}
+ {\bibstring{withafterword}%
+ \setunit{\addspace}%
+ \printnames[withafterword]{afterword}}}
+
+\newbibmacro*{withothers}{%
+ \usebibmacro{withcommentator}%
+ \clearname{commentator}%
+ \newunit
+ \usebibmacro{withannotator}%
+ \clearname{annotator}%
+ \newunit
+ \usebibmacro{withintroduction}%
+ \clearname{introduction}%
+ \newunit
+ \usebibmacro{withforeword}%
+ \clearname{foreword}%
+ \newunit
+ \usebibmacro{withafterword}%
+ \clearname{afterword}}
+
+\newbibmacro*{title}{%
+ \ifboolexpr{
+ test {\iffieldundef{title}}
+ and
+ test {\iffieldundef{subtitle}}
+ }
+ {}
+ {\printtext[title]{%
+ \printfield[titlecase]{title}%
+ \setunit{\subtitlepunct}%
+ \printfield[titlecase]{subtitle}}%
+ \newunit}%
+ \printfield{titleaddon}}
+
+\newbibmacro*{booktitle}{%
+ \ifboolexpr{
+ test {\iffieldundef{booktitle}}
+ and
+ test {\iffieldundef{booksubtitle}}
+ }
+ {}
+ {\printtext[booktitle]{%
+ \printfield[titlecase]{booktitle}%
+ \setunit{\subtitlepunct}%
+ \printfield[titlecase]{booksubtitle}}%
+ \newunit}%
+ \printfield{booktitleaddon}}
+
+\newbibmacro*{maintitle}{%
+ \ifboolexpr{
+ test {\iffieldundef{maintitle}}
+ and
+ test {\iffieldundef{mainsubtitle}}
+ }
+ {}
+ {\printtext[maintitle]{%
+ \printfield[titlecase]{maintitle}%
+ \setunit{\subtitlepunct}%
+ \printfield[titlecase]{mainsubtitle}}%
+ \newunit}%
+ \printfield{maintitleaddon}}
+
+% The \iffieldundef{journaltitleaddon} is usually not necessary.
+% We need it to ensure that a \setunit* after this macro does the right thing
+% for backwards compatibility.
+\newbibmacro*{journal}{%
+ \ifboolexpr{
+ test {\iffieldundef{journaltitle}}
+ and
+ test {\iffieldundef{journalsubtitle}}
+ }
+ {}
+ {\printtext[journaltitle]{%
+ \printfield[titlecase]{journaltitle}%
+ \setunit{\subtitlepunct}%
+ \printfield[titlecase]{journalsubtitle}}%
+ \newunit}%
+ \iffieldundef{journaltitleaddon}
+ {}
+ {\printfield{journaltitleaddon}}}
+
+% Re \iffieldundef{titleaddon} see the comment about
+% \iffieldundef{journaltitleaddon} above.
+\newbibmacro*{periodical}{%
+ \ifboolexpr{
+ test {\iffieldundef{title}}
+ and
+ test {\iffieldundef{subtitle}}
+ }
+ {}
+ {\printtext[title]{%
+ \printfield[titlecase]{title}%
+ \setunit{\subtitlepunct}%
+ \printfield[titlecase]{subtitle}}%
+ \newunit}%
+ \iffieldundef{titleaddon}
+ {}
+ {\printfield{titleaddon}}}
+
+\newbibmacro*{issue}{%
+ \ifboolexpr{
+ test {\iffieldundef{issuetitle}}
+ and
+ test {\iffieldundef{issuesubtitle}}
+ }
+ {}
+ {\printtext[issuetitle]{%
+ \printfield[titlecase]{issuetitle}%
+ \setunit{\subtitlepunct}%
+ \printfield[titlecase]{issuesubtitle}}%
+ \newunit}%
+ \printfield{issuetitleaddon}}
+
+\newbibmacro*{in:}{%
+ \bibstring{in}%
+ \printunit{\intitlepunct}}
+
+\newbibmacro*{date}{\printdate}
+
+\newbibmacro*{url+urldate}{%
+ \usebibmacro{url}%
+ \iffieldundef{urlyear}
+ {}
+ {\setunit*{\addspace}%
+ \usebibmacro{urldate}}}
+
+\newbibmacro*{url}{\printfield{url}}
+\newbibmacro*{urldate}{\printurldate}
+
+\newbibmacro*{pageref}{%
+ \iflistundef{pageref}
+ {}
+ {\printtext[parens]{%
+ \ifnumgreater{\value{pageref}}{1}
+ {\bibstring{backrefpages}\ppspace}
+ {\bibstring{backrefpage}\ppspace}%
+ \printlist[pageref][-\value{listtotal}]{pageref}}}}
+
+\newbibmacro*{setpageref}{%
+ \iflistundef{pageref}
+ {}
+ {\printtext{%
+ \ifnumgreater{\value{pageref}}{1}
+ {\bibstring{backrefpages}\ppspace}
+ {\bibstring{backrefpage}\ppspace}%
+ \printlist[pageref][-\value{listtotal}]{pageref}}}}
+
+\newbibmacro*{eprint}{%
+ \iffieldundef{eprinttype}
+ {\printfield{eprint}}
+ {\printfield[eprint:\strfield{eprinttype}]{eprint}}}
+
+\newbibmacro*{annotation}{%
+ \begingroup
+ \togglefalse{blx@bibliography}%
+ \iffieldundef{annotation}
+ {\printfile[annotation]{\bibannotationprefix\thefield{entrykey}.tex}}
+ {\printfield{annotation}}%
+ \endgroup}
+
+\newbibmacro*{abstract}{%
+ \iffieldundef{abstract}
+ {\printfile[abstract]{\bibabstractprefix\thefield{entrykey}.tex}}
+ {\printfield{abstract}}}
+
+\newbibmacro*{related:default}[1]{%
+ \entrydata*{#1}{%
+ \usedriver
+ {\ifnameundef{savedauthor}
+ {\ifnameundef{savededitor}
+ {}
+ {\ifnamesequal{editor}{savededitor}
+ {\clearname{editor}}
+ {}}}
+ {\ifnamesequal{author}{savedauthor}
+ {\clearname{author}}
+ {}}%
+ \DeclareNameAlias{sortname}{default}%
+ % from authortitle and authoryear
+ \ifbibmacroundef{bbx:dashcheck}
+ {}
+ {\renewbibmacro*{bbx:dashcheck}[2]{##2}}%
+ % authoryear
+ \ifbibmacroundef{labeltitle}
+ {}
+ {\renewbibmacro*{labeltitle}{}}%
+ \ifbibmacroundef{date+extradate}
+ {}
+ {\renewbibmacro*{date+extradate}{}%
+ \renewbibmacro*{bbx:ifmergeddate}{\@secondoftwo}}%
+ \renewbibmacro*{pageref}{}%
+ \renewbibmacro*{related:init}{}}
+ {\thefield{entrytype}}}}
+
+\newbibmacro*{related:bytranslator}[1]{%
+ \entrydata{#1}{%
+ \renewbibmacro*{name:hook}[1]{%
+ \ifnumequal{\value{listcount}}{1}
+ {\mkrelatedstringtext{\lbx@initnamehook{##1}}}
+ {}}%
+ \printnames[bytranslator]{translator}%
+ \setunit*{\addspace\bibstring[\mkrelatedstringtext]{astitle}\space}%
+ \usebibmacro{title}%
+ \setunit{\addspace}%
+ \printtext[parens]{%
+ \printlist{location}%
+ \iflistundef{publisher}
+ {\setunit*{\addcomma\space}}
+ {\setunit*{\addcolon\space}}%
+ \printlist{publisher}%
+ \setunit*{\addcomma\space}%
+ \printdate}}}
+
+\newbibmacro*{related:multivolume}[1]{%
+ \entrydata*{#1}{%
+ \printtext{%
+ \printfield{volume}%
+ \printfield{part}}%
+ \setunit*{\addcolon\space}%
+ \usebibmacro{title}%
+ \ifboolexpr{
+ test {\ifnamesequal{author}{savedauthor}}
+ or
+ test {\ifnameundef{author}}
+ }
+ {}
+ {\usebibmacro{bytypestrg}{author}{author}%
+ \setunit{\addspace}%
+ \printnames[byauthor]{author}
+ \newunit\newblock}%
+ \ifboolexpr{
+ test {\ifnamesequal{editor}{savededitor}}
+ or
+ test {\ifnameundef{editor}}
+ }
+ {}
+ {\usebibmacro{byeditor+others}%
+ \newunit\newblock}%
+ \printdate}}
+
+\newbibmacro*{related:origpubin}[1]{%
+ \entrydata*{#1}{%
+ \printfield{year}%
+ \ifboolexpr{
+ test {\iflistsequal{publisher}{savedpublisher}}
+ or
+ test {\iflistundef{publisher}}
+ }
+ {}
+ {\setunit{\addspace\bibstring[\mkrelatedstringtext]{bypublisher}\space}%
+ \printlist{publisher}%
+ \setunit{\addcomma\space}%
+ \iflistsequal{location}{savedlocation}
+ {}
+ {\printlist{location}}}}}
+
+\newbibmacro*{related:origpubas}[1]{%
+ \entrydata*{#1}{%
+ \usebibmacro{title}%
+ \ifboolexpr{
+ test {\iflistsequal{publisher}{savedpublisher}}
+ or
+ test {\iflistundef{publisher}}
+ }
+ {}
+ {\setunit{\addspace\bibstring[\mkrelatedstringtext]{bypublisher}\space}%
+ \printlist{publisher}%
+ \setunit{\addcomma\space}%
+ \iflistsequal{location}{savedlocation}
+ {}
+ {\printlist{location}}}}}
+
+\DeclareFieldFormat{title:hook}{%
+ \mkrelatedstringtext{\lbx@inittitlehook{#1}}%
+ \mkbibemph{#1}}
+
+\newbibmacro*{related:reprintfrom}[1]{%
+ \entrydata*{#1}{%
+ \iffieldundef{journaltitle}
+ {\iffieldundef{maintitle}
+ {\printfield[title:hook]{booktitle}}
+ {\printfield[title:hook]{maintitle}}%
+ \newunit\newblock
+ \usebibmacro{byeditor+others}%
+ \newunit\newblock
+ \printfield{edition}%
+ \newunit
+ \iffieldundef{volume}
+ {}
+ {\printfield{volume}%
+ \printfield{part}}
+ \newunit\newblock
+ \usebibmacro{series+number}%
+ \newunit\newblock
+ \printfield{note}%
+ \newunit\newblock
+ \usebibmacro{publisher+location+date}%
+ \newunit\newblock
+ \usebibmacro{chapter+pages}}
+ {\renewbibmacro*{journal}{%
+ \printfield[title:hook]{journaltitle}}%
+ \usebibmacro{journal+issuetitle}%
+ \newunit\newblock
+ \usebibmacro{byeditor+others}%
+ \newunit\newblock
+ \usebibmacro{note+pages}}}}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/biblatex-ms.sty b/macros/latex/contrib/biblatex-ms/latex/biblatex-ms.sty
new file mode 100644
index 0000000000..560628f8d2
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/biblatex-ms.sty
@@ -0,0 +1,17802 @@
+% Copyright (c) 2006-2011 Philipp Lehman.
+% 2012-2017 Philip Kime, Audrey Boruvka, Joseph Wright
+% 2018- Philip Kime, Moritz Wemheuer
+%
+% Permission is granted to copy, distribute and/or modify this
+% software under the terms of the LaTeX Project Public License
+% (LPPL), version 1.3c.
+%
+% This software is provided 'as is', without warranty of any kind,
+% either expressed or implied, including, but not limited to, the
+% implied warranties of merchantability and fitness for a
+% particular purpose.
+
+% Set up the version strings here
+\def\abx@date{2022/08/21}
+\def\abx@version{4.0}
+\def\abx@bbxid{\abx@date\space v\abx@version\space biblatex bibliography style (PK/MW)}
+\def\abx@cbxid{\abx@date\space v\abx@version\space biblatex citation style (PK/MW)}
+\def\abx@lbxid{\abx@date\space v\abx@version\space biblatex localization (PK/MW)}
+\def\abx@cptid{\abx@date\space v\abx@version\space biblatex compatibility (PK/MW)}
+
+% This is not updated by build script as the control file version
+% does not necessarily change with the package version.
+% This is used when writing the .bcf
+\def\blx@bcfversion{4.0}
+
+% This is not updated by build script as the bbl version
+% does not necessarily change with the package version.
+% This is used when checking the .bbl
+\def\blx@bblversion{4.0}
+
+% Postfix for biblatex internal files in case this version is supposed to be installed
+% in parallel with a standard biblatex installation. This postfix will be appended to
+% all searched for files like this:
+%
+% <filename><postfix>.<extension>
+%
+% If a file with this name is found it will be used, otherwise the filename
+% without the postfix will be used. Normally, this will be empty.
+% The build script will normally put something in here before packaging or install
+% rather than it being set manually
+\def\abx@filespf{-ms}
+
+
+\NeedsTeXFormat{LaTeX2e}[2005/12/01]
+\ProvidesPackage{biblatex-ms}
+[\abx@date\space v\abx@version\space programmable bibliographies (PK/MW)]
+
+%% Dependencies
+\RequirePackage{pdftexcmds}[2018/01/30]
+\RequirePackage{etoolbox}
+\RequirePackage{keyval}
+\RequirePackage{kvoptions}
+\RequirePackage{logreq}
+\RequirePackage{ifthen}
+\RequirePackage{url}
+\RequirePackage{xparse}
+%\RequirePackage{trace}
+
+% pretend we're the real biblatex
+\ifcsundef{ver@biblatex.sty}
+ {\cslet{ver@biblatex.sty}\abx@date}
+ {}
+
+% Turn off xparse redefine warnings as we do this a lot
+\ExplSyntaxOn
+ \msg_redirect_name:nnn { LaTeX } { xparse / redefine-command } { none }
+\ExplSyntaxOff
+
+% Globals holding the name of the filename being resolved
+% Better to have globals to avoid messy localisation code
+% as these are used in heavily nested macros
+\let\blx@fnext\@empty
+\let\blx@fnnoext\@empty
+
+\@ifpackagelater{etoolbox}{2010/11/29}
+ {}
+ {\PackageError{biblatex}
+ {Outdated 'etoolbox' package}
+ {Upgrade to etoolbox v2.1 (2010/11/29) or later.\MessageBreak
+ I found: '\csuse{ver@etoolbox.sty}'.\MessageBreak
+ This is a fatal error. I'm aborting now}%
+ \endinput}
+
+% The new hook management system in LaTeX 2020-10-01 and above
+% no longer guarantees that \AtBeginDocument/AfterPreamble
+% are executed in order of use.
+% Instead each use of those commands gets a 'label'
+% and code for the same label is chunked together.
+% We give our \AfterPreamble invocations a new label and set up a rule to
+% have it executed after all normal biblatex \AtBeginDocument stuff.
+% Note that begindocument is a one-time hook, so we are guaranteed
+% immediate execution when inside \begin{document}...\end{document}.
+\providecommand\IfFormatAtLeastTF{\@ifl@t@r\fmtversion}
+\IfFormatAtLeastTF{2020/10/01}
+ {\def\blx@AfterPreamble{\AddToHook{begindocument}[biblatex/afterpreamble]}%
+ \DeclareHookRule{begindocument}{biblatex/afterpreamble}{after}{biblatex}%
+ \def\blx@AtEndDocument{\AddToHook{enddocument/afterlastpage}}}
+ {\def\blx@AfterPreamble{\AfterPreamble}%
+ \def\blx@AtEndDocument{\AtEndDocument}}
+
+% generalised keyval interface
+% define a new key (possibly with a default value)
+% {<family>}{<key>}[<default>]{<code>}
+\providerobustcmd*{\blx@kv@defkey}{\define@key}
+
+% globally define new key (should only be the last resort)
+% {<family>}{<key>}[<default>]{<code>}
+\providerobustcmd*{\blx@kv@gdefkey}[2]{%
+ \@ifnextchar[%
+ {\blx@kv@gdefkey@default{#1}{#2}}
+ {\blx@kv@gdefkey@nodefault{#1}{#2}}}
+
+\ifundef\blx@kv@gdefkey@nodefault
+ {\protected\def\blx@kv@gdefkey@nodefault#1#2{\csgdef{KV@#1@#2}##1}}
+ {}
+\ifundef\blx@kv@gdefkey@default
+ {\protected\def\blx@kv@gdefkey@default#1#2[#3]{%
+ \csgdef{KV@#1@#2@default}{\csuse{KV@#1@#2}{#3}}%
+ \csgdef{KV@#1@#2}##1}}
+ {}
+
+% test if key is undefined
+% {<family>}{<key>}{<true>}{<false>}
+\providecommand*{\blx@kv@ifkeyundef}[2]{%
+ \ifcsundef{KV@#1@#2}}
+
+% undefine key
+% {<family>}{<key>}
+\providerobustcmd*{\blx@kv@undef}[2]{\csundef{KV@#1@#2}}
+
+% {<family>}{<key-vals>}
+\providerobustcmd*{\blx@kv@setkeys}{\setkeys}
+
+%% Category codes
+
+\def\blx@docatcodes{%
+ \do\=\do\<\do\>\do\-\do\"\do\'\do\`\do\.%
+ \do\,\do\;\do\:\do\!\do\?\do\/}
+\def\do#1{\catcode\number`#1=\the\catcode`#1\relax}
+\edef\blx@catcodes{\blx@docatcodes\do\^\do\~\do\&\do\|}
+\let\do\noexpand
+
+\def\blx@saneccodes{%
+ \catcode`\~=\active
+ \let\do\@makeother
+ \blx@docatcodes
+ \let\do\noexpand}
+
+\blx@saneccodes
+\catcode`\&=3
+\catcode`\|=3
+\catcode`\^=7
+\def\blx@nl{^^J}
+
+\protected\def\blx@safe@actives{%
+ \let\blx@if@safe@actives\if@safe@actives
+ \let\if@safe@actives\iftrue}
+
+\protected\def\blx@rest@actives{%
+ \let\if@safe@actives\blx@if@safe@actives}
+
+%% Early errors and warnings
+\protected\def\blx@error#1#2{%
+ \begingroup
+ \blx@safe@actives
+ \PackageError{biblatex}{#1}{#2.}%
+ \endgroup}
+
+\protected\def\blx@warning@noline#1{%
+ \begingroup
+ \blx@safe@actives
+ \PackageWarningNoLine{biblatex}{#1}%
+ \endgroup}
+\let\blx@warning\blx@warning@noline
+\AtEndOfPackage{%
+ \protected\def\blx@warning#1{%
+ \begingroup
+ \blx@safe@actives
+ \PackageWarning{biblatex}{#1}%
+ \endgroup}}
+
+\def\blx@err@patch#1{%
+ \blx@error
+ {Patching #1 failed}
+ {This is an internal issue typically caused by a
+ conflict\MessageBreak between biblatex and some
+ other package. Modifying\MessageBreak the package
+ loading order may fix the problem}}
+
+%% Compatibility
+% this hook is executed once at the beginning of loading the package
+% just a few lines down
+% and again later in an \AtEndPreamble hook
+\def\blx@packageincompatibility{%
+ \def\do##1{%
+ \@ifpackageloaded{##1}
+ {\ifcsundef{blx@pkgloaded@##1}
+ {\global\cslet{blx@pkgloaded@##1}\@empty
+ \blx@error
+ {Incompatible package '##1'}
+ {The '##1' package and biblatex are incompatible}}
+ {}}
+ {}}%
+ \docsvlist{%
+ amsrefs,apacite,babelbib,backref,bibtopic,bibunits,chapterbib,
+ cite,citeref,drftcite,footbib,inlinebib,jurabib,mcite,mciteplus,
+ mlbib,multibbl,multibib,natbib,opcit,overcite,splitbib,ucs}%
+ % etextools is special, it gets an option to demote the error to a warning
+ % remind people to restore \forlistloop
+ \ifcsdef{blx@noerroretextools}
+ {\@ifpackageloaded{etextools}
+ {\ifcsundef{blx@pkgloaded@etextools}
+ {\global\cslet{blx@pkgloaded@etextools}\@empty
+ \blx@warning@noline{%
+ Incompatible package 'etextools' loaded,\MessageBreak
+ no error is thrown because you defined\MessageBreak
+ '\string\blx@noerroretextools'.\MessageBreak
+ 'etextools' redefines '\string\forlistloop', you must\MessageBreak
+ restore the definition from 'etoolbox'\MessageBreak
+ before you load biblatex}}
+ {}}
+ {}}
+ {\@ifpackageloaded{etextools}
+ {\ifcsundef{blx@pkgloaded@etextools}
+ {\global\cslet{blx@pkgloaded@etextools}\@empty
+ \blx@error
+ {Incompatible package 'etextools'}
+ {The 'etextools' package and biblatex are
+ incompatible.\MessageBreak
+ If you must load 'etextools' at all costs, define the command%
+ \MessageBreak '\string\blx@noerroretextools'}}
+ {}}
+ {}}}
+
+% Call this right here, almost immediately after loading to give sensible
+% errors for incompatibilities that arise at loading-time.
+% The macro is called again a second time in \AtEndPreamble when all packages
+% should be loaded.
+% This still can't catch all cases, \usepackage{biblatex}\usepackage{natbib}
+% still gives a weird error.
+\blx@packageincompatibility
+
+% this part is only executed now
+\@ifpackageloaded{polyglossia}
+ {\global\cslet{blx@pkgloaded@polyglossia}\@empty}
+ {}
+
+\@ifpackageloaded{inputenc}
+ {\global\cslet{blx@pkgloaded@inputenc}\@empty}
+ {}
+
+\@ifpackageloaded{inputenx}
+ {\global\cslet{blx@pkgloaded@inputenx}\@empty}
+ {}
+
+% this part is deferred to \AtEndPreamble
+\def\blx@packageincompatibility@endpreambleonly{%
+ % people should not be abusing noerroretextools,
+ % so warn if it is not needed
+ \ifcsdef{blx@noerroretextools}
+ {\@ifpackageloaded{etextools}
+ {}
+ {\blx@warning@noline{%
+ You defined '\string\blx@noerroretextools',\MessageBreak
+ but 'etextools' is not loaded.\MessageBreak
+ Please do not define '\string\blx@noerroretextools'\MessageBreak
+ unless you really need it}}}
+ {}%
+ \@ifpackageloaded{inputenc}
+ {\ifcsundef{blx@pkgloaded@inputenc}
+ {\blx@warning@noline{Load 'inputenc' before biblatex}}
+ {}}
+ {}%
+ \@ifpackageloaded{inputenx}
+ {\ifcsundef{blx@pkgloaded@inputenx}
+ {}
+ {\blx@warning@noline{Load 'inputenx' before biblatex}}
+ {}}
+ {}%
+ % polyglossia pretends to be babel, so the nested structure helps
+ % to make sure that babel really is babel
+ \@ifpackageloaded{polyglossia}
+ {\ifcsundef{blx@pkgloaded@polyglossia}
+ {\blx@error
+ {'polyglossia' loaded after biblatex}
+ {'polyglossia' must be loaded before biblatex}}
+ {}%
+ \@ifpackagelater{polyglossia}{2020/04/08}
+ {}
+ {\blx@warning@noline
+ {biblatex works best with 'polyglossia' 1.49\MessageBreak
+ or above.\MessageBreak
+ Please update 'polyglossia' to v1.49 (2020/04/08)\MessageBreak
+ or later.\MessageBreak
+ Variant detection will not work properly with\MessageBreak
+ older versions}}}
+ {\@ifpackageloaded{babel}
+ {\@ifpackagelater{babel}{2016/04/23}
+ {}
+ {\blx@error
+ {Outdated 'babel' package}
+ {Upgrade to babel 3.9r (2016/04/23) or later.\MessageBreak
+ I found: '\csuse{ver@babel.sty}'.\MessageBreak
+ This is a fatal error. I'm aborting now}%
+ \endinput}}
+ {}}}
+
+\begingroup
+\catcode`\#=12
+\gdef\blx@patchbidifootnotes{%
+ \patchcmd\@footnotetext
+ {#1}
+ {\toggletrue{blx@footnote}#1}
+ {\togglefalse{blx@tempa}}
+ {}%
+ \patchcmd\@LTRfootnotetext
+ {#1}
+ {\toggletrue{blx@footnote}#1}
+ {\togglefalse{blx@tempa}}
+ {}%
+ \patchcmd\@RTLfootnotetext
+ {#1}
+ {\toggletrue{blx@footnote}#1}
+ {\togglefalse{blx@tempa}}
+ {}}
+\endgroup
+
+\AtEndPreamble{%
+ \blx@packageincompatibility
+ \blx@packageincompatibility@endpreambleonly
+ \ifnum\blx@hyperref=\thr@@
+ \else
+ \ifnum\blx@hyperref=\z@
+ \blx@mknohyperref
+ \else
+ \@ifpackageloaded{hyperref}
+ {\blx@mkhyperref}
+ {\ifnum\blx@hyperref=\@ne
+ \blx@warning@noline{%
+ Missing 'hyperref' package.\MessageBreak
+ Setting 'hyperref=false'}%
+ \fi
+ \blx@mknohyperref}%
+ \fi
+ \undef\blx@mkhyperref
+ \undef\blx@mknohyperref
+ \fi
+ \providecommand*{\nolinkurl}{\url}%
+ \ifundef\TE@hook
+ {\let\TE@hook\@empty
+ \toggletrue{blx@tempa}%
+ \def\do#1{%
+ \patchcmd#1%
+ {\let\isundefined\TE@undef}
+ {\let\isundefined\TE@undef\TE@hook}
+ {\togglefalse{blx@tempa}\listbreak}
+ {}}%
+ \docsvlist{%
+ \ifthenelse,% ifthen
+ \org@ifthenelse,% babel
+ \HyOrg@ifthenelse,% hyperref
+ \NROrg@ifthenelse}% nameref
+ \iftoggle{blx@tempa}
+ {\blx@err@patch{'ifthen' package}}
+ {}}
+ {}%
+ \appto\TE@hook{\blx@TE@hook}%
+ % we need to patch \addtocontents
+ \toggletrue{blx@tempa}%
+ % kernel definition
+ \patchcmd\addtocontents
+ {\let\glossary\@gobble}
+ {\let\glossary\@gobble
+ \blx@contentssafe@citecommands}
+ {}
+ {\togglefalse{blx@tempa}}%
+ % try tag.sto's definition
+ \iftoggle{blx@tempa}
+ {}
+ {\patchcmd\addtocontents
+ {\let\glossary\Gobble}
+ {\let\glossary\Gobble
+ \blx@contentssafe@citecommands}
+ {}
+ {% give up
+ \blx@err@patch{\string\addtocontents}}}%
+ % patch footnote
+ \toggletrue{blx@tempa}%
+ \def\do#1{%
+ \patchcmd#1%
+ {\color@begingroup}
+ {\color@begingroup\toggletrue{blx@footnote}}
+ {\togglefalse{blx@tempa}\listbreak}
+ {}}%
+ \docsvlist{%
+ \@footnotetext,% latex
+ \H@@footnotetext,% hyperref
+ \V@@footnotetext,% fancyvrb
+ \scr@saved@footnotetext,% koma-script 3.x
+ \l@dold@footnotetext,% ledmac
+ \l@doldold@footnotetext,% ledmac
+ \predefinedfootnotetext,% linguex
+ \@fntORI}% frenchle
+ \iftoggle{blx@tempa}% ams classes ...
+ {\def\do#1{%
+ \patchcmd#1
+ {\@makefntext}
+ {\toggletrue{blx@footnote}\@makefntext}
+ {\togglefalse{blx@tempa}}
+ {}}%
+ \docsvlist{\@footnotetext,% ams classes standard
+ \H@@footnotetext}}% hyperref
+ {}%
+ \@ifpackageloaded{bidi}% bidi
+ {\blx@patchbidifootnotes}
+ {}%
+ \@ifclassloaded{memoir}
+ {\def\do#1{%
+ \patchcmd#1%
+ {\color@begingroup}
+ {\color@begingroup\toggletrue{blx@footnote}}
+ {}
+ {}}%
+ \docsvlist{%
+ \m@mold@footnotetext,%
+ \@plainfootnotetext,%
+ \@twocolfootnotetext,%
+ \@threecolfootnotetext,%
+ \@parafootnotetext}%
+ \def\do#1{%
+ \patchcmd#1%
+ {\color@begingroup\@makefntext}
+ {\color@begingroup\toggletrue{blx@footnote}\@makefntext}
+ {}
+ {}}%
+ \docsvlist{%
+ \@footnotetext,% patch twice
+ \H@@footnotetext,% patch twice
+ \@plainfootnotetext}}
+ {}%
+ \@ifclassloaded{beamer}
+ {\expandafter\patchcmd\csname beamerx@\string\beamer@framefootnotetext\endcsname
+ {\color@begingroup}
+ {\color@begingroup\toggletrue{blx@footnote}}
+ {\togglefalse{blx@tempa}}
+ {}%
+ \expandafter\patchcmd\csname beamerx@\string\@mpfootnotetext\endcsname
+ {\color@begingroup}
+ {\color@begingroup\toggletrue{blx@footnote}}
+ {}
+ {}}
+ {}%
+ \iftoggle{blx@tempa}
+ {\blx@warning@noline{%
+ Patching footnotes failed.\MessageBreak
+ Footnote detection will not work}}
+ {}%
+ \def\do#1{%
+ \patchcmd#1%
+ {\color@begingroup}
+ {\color@begingroup\toggletrue{blx@footnote}}
+ {\listbreak}
+ {}}%
+ \docsvlist{%
+ \@mpfootnotetext,% minipages
+ \H@@mpfootnotetext}% hyperref minipages
+ \@ifpackageloaded{endnotes}
+ {\patchcmd\theendnotes
+ {\enoteformat}
+ {\toggletrue{blx@footnote}\enoteformat}
+ {}
+ {\blx@err@patch{'endnotes' package}}}
+ {}%
+ \@ifpackageloaded{bigfoot}
+ {\apptocmd\@makefnstartbox
+ {\toggletrue{blx@footnote}}
+ {}
+ {\blx@err@patch{'bigfoot' package}}}
+ {}%
+ \@ifpackageloaded{showkeys}
+ {\ifdef\SK@
+ {\AtEveryBibitem{\SK@\SK@@label{\thefield{entrykey}}}%
+ \AtEveryLositem{\SK@\SK@@label{\thefield{entrykey}}}%
+ \ifundef\SK@cite % = 'notcite' disabled
+ {\AtEveryCitekey{\SK@\SK@@ref{\thefield{entrykey}}}}
+ {}}
+ {}}
+ {}%
+ \iftoggle{blx@trackfloats}
+ {}
+ {\apptocmd\@floatboxreset
+ {\boolfalse{citetracker}%
+ \boolfalse{pagetracker}}
+ {}
+ {\blx@err@patch{floats}}}%
+ \iftoggle{blx@backreffloats}
+ {}
+ {\apptocmd\@floatboxreset
+ {\boolfalse{backtracker}}
+ {}
+ {\blx@err@patch{floats}}}%
+ \ifdef\TX@endtabularx % tabularx/memoir
+ {\pretocmd\TX@endtabularx
+ {\addtocounter{tabx@nest}{1}}% track nested tabularx environments
+ {}
+ {\blx@err@patch{'tabularx'}}%
+ % no need to conditionalise on top-level tabx as the search/replace
+ % will only match once anyway
+ \patchcmd\TX@endtabularx
+ {\edef\TX@ckpt{\cl@@ckpt}}
+ {\edef\TX@ckpt{\cl@@ckpt\abx@resttrackers}%
+ \abx@savetrackers}
+ {}
+ {\blx@err@patch{'tabularx'}}%
+ \apptocmd\TX@endtabularx
+ {\ifnum\value{tabx@nest}=1% only clear trackers for top-level tabularx
+ \abx@cleartrackers
+ \fi
+ \addtocounter{tabx@nest}{-1}}
+ {}
+ {\blx@err@patch{'tabularx'}}}
+ {}%
+ \@ifpackageloaded{csquotes}
+ {\@ifpackagelater{csquotes}{2009/05/30}
+ {}
+ {\blx@error
+ {Outdated 'csquotes' package}
+ {Upgrade to csquotes v4.4 (2009/05/30) or later.\MessageBreak
+ I found: '\csuse{ver@csquotes.sty}'}}%
+ \BlockquoteDisable{\let\blx@thecheckpunct\@gobble}%
+ \@ifpackagelater{csquotes}{2009/08/27}
+ {\appto\@blockquote@prehook{\abx@savetrackers}%
+ \appto\@blockquote@posthook{\abx@resttrackers\abx@cleartrackers}}
+ {}%
+ \@ifpackagelater{csquotes}{2010/06/09}
+ {}
+ {\newcommand*{\@quotereset}{}\newcount\@quotereset}%
+ \newcommand*{\blx@initoquote}{\initoquote}%
+ \newcommand*{\blx@textooquote}{\textooquote}%
+ \newcommand*{\blx@textcoquote}{\textcoquote}%
+ \newcommand*{\blx@initiquote}{\initiquote}%
+ \newcommand*{\blx@textoiquote}{\textoiquote}%
+ \newcommand*{\blx@textciquote}{\textciquote}%
+ \newcommand*{\blx@enquote}{\enquote}}
+ {\@ifpackageloaded{babel}
+ {\blx@warning@noline{%
+ 'babel/polyglossia' detected but 'csquotes' missing.\MessageBreak
+ Loading 'csquotes' recommended}}
+ {}%
+ \newcommand*{\@quotelevel}{}%
+ \newcount\@quotelevel
+ \newcommand*{\@quotereset}{}%
+ \newcount\@quotereset
+ \newcommand*{\@setquotesfcodes}{}%
+ \let\@setquotesfcodes\relax
+ \newrobustcmd*{\blx@initoquote}{\@quotelevel\@ne}%
+ \newrobustcmd*{\blx@initiquote}{\@quotelevel\tw@}%
+ \newrobustcmd*{\blx@textooquote}{``}%
+ \newrobustcmd*{\blx@textcoquote}{''}%
+ \newrobustcmd*{\blx@textoiquote}{`\relax}% block ligs
+ \newrobustcmd*{\blx@textciquote}{'\relax}% block ligs
+ \newrobustcmd*{\blx@enquote}
+ {\@ifstar\blx@enquote@iii\blx@enquote@i}%
+ \def\blx@enquote@i{%
+ \ifnum\@quotelevel>\z@
+ \expandafter\blx@enquote@iii
+ \else
+ \expandafter\blx@enquote@ii
+ \fi}%
+ \long\def\blx@enquote@ii#1{%
+ \begingroup\blx@initoquote
+ \blx@textooquote#1\blx@textcoquote
+ \endgroup}%
+ \long\def\blx@enquote@iii#1{%
+ \begingroup\blx@initiquote
+ \blx@textoiquote#1\blx@textciquote
+ \endgroup}%
+ \appto\blx@setsfcodes{%
+ \sfcode`\`=\z@
+ \sfcode`\'=\z@}}%
+ \let\do\noexpand}
+
+% no longer needed, keep for backwards compatibility
+\let\blx@langstrings\relax
+
+\def\blx@ifhyphenationundef#1{\ifcsundef{l@#1}}
+
+% polyglossia makes heavy use of \AtBeginDocument, so we need to use
+% it too to get in later than polyglossia's setup.
+% This means that load-order is relevant, boo ...
+\AtBeginDocument{%
+ \@ifpackageloaded{polyglossia}
+ {\ifundef\xpg@ifdefined
+ {}
+ {\def\blx@ifhyphenationundef#1#2#3{\xpg@ifdefined{#1}{#3}{#2}}}%
+ % This is required for languages which are never explicitly selected
+ % \xpg@bloaded is not defined in polyglossia < v1.45
+ \ifundef\xpg@bloaded
+ {\ifundef\xpg@loaded
+ {\let\xpg@bloaded\@empty}
+ {\let\xpg@bloaded\xpg@loaded}}
+ {}%
+ \global\let\blx@maplang\blx@maplang@polyglossia
+ \def\do#1{\blx@langsetup@from@pkglist{#1}}%
+ \expandafter\docsvlist\expandafter{\xpg@bloaded}%
+ \def\do#1{\blx@langsetup@from@auxlist{#1}}%
+ \dolistloop\blx@lbx@auxloadlist
+ \ifboolexpr{
+ not togl {blx@autolangbib}
+ and
+ not togl {blx@autolangcite}}
+ {\blx@mknoautolang}
+ {\blx@mkautolangpoly}%
+ }
+ {\global\let\blx@maplang\blx@maplang@babel
+ \@ifpackageloaded{babel}
+ {% This is required for languages which are never explicitly selected
+ \def\do#1{\blx@langsetup@from@pkglist{#1}}%
+ \expandafter\docsvlist\expandafter{\bbl@loaded}%
+ \def\do#1{\blx@langsetup@from@auxlist{#1}}%
+ \dolistloop\blx@lbx@auxloadlist
+ \ifboolexpr{
+ not togl {blx@autolangbib}
+ and
+ not togl {blx@autolangcite}}
+ {\blx@mknoautolang}
+ {\blx@mkautolangbabel}}
+ {\blx@mknoautolang}}%
+ % These already have defaults set to basically do nothing
+ % so if the toggles are true, we need to define again since
+ % mkautolang* redefines \blx@beglang
+ % In turn, \blx@beglang defines \blx@endlang and so \blx@beglangcite and
+ % \blx@endlangcite need redefining inside \blx@beglang after \blx@endlang
+ % has been defined.
+ \iftoggle{blx@autolangbib}
+ {\let\blx@beglangbib\blx@beglang}
+ {}%
+ \iftoggle{blx@autolangcite}
+ {\let\blx@beglangcite\blx@beglang}
+ {}%
+ % babel/polyglossia has loaded the (main document) language already,
+ % so we need to explicitly enable our captions (abx@strings@)
+ % and extras (abx@extras@) now
+ \ifdefstring{\blx@langhook}{captions}
+ {\blx@etb@inittoggle{blx@lang@captions@\blx@languagename}%
+ \toggletrue{blx@lang@captions@\blx@languagename}}
+ {}%
+ \csuse{abx@extras@\blx@languagename}%
+ \csuse{abx@strings@\blx@languagename}%
+ % avoid accidental re-initialization
+ \undef\blx@mkautolangbabel
+ \undef\blx@mkautolangpoly
+ \undef\blx@mknoautolang
+ % pick up the main document language as sortlocale if
+ % auto-detection is desired
+ \ifdefstring\blx@sortlocale{auto}
+ {\ifdef\blx@main@language% babel or polyglossia is loaded
+ {\edef\blx@sortlocale{\blx@main@language}}
+ {\def\blx@sortlocale{english}}}
+ {}%
+
+ % There are several scopes of blx@mslang - they are summarised here for clarity
+ % \blx@gmslang - global option setting as this needs passing to biber
+ % \blx@mslang - setting which varies depending on refcontext
+ % \blx@lmslang - if the langid field exists, the BCP47 tag for this, otherwise same as \blx@mslang
+ % \blx@nmslang - the value of an individual name "mslang" data annotation, if it exists. This is
+ % just a convenient was of getting such an annotation as individual names have
+ % a keyval list in which to store it, the "mslang" data annotation is also available
+ % too. Non-name list "mslang" data annotations don't have this convenience variable
+ % because there is nowhere to store them in the .bbl format and so the annotation
+ % must be fetched directly using the annotation macros.
+
+ % Set default mslang from babel/polyglossia or a fallback
+ % mslang is a biblatex global option but we don't identify it as one as it is not
+ % passed in the .bcf as a biblatex option but rather as a biber option since it is used
+ % to set the default biber option.
+ \ifdef\blx@main@language
+ {\edef\blx@mslang{\csuse{blx@msmaplangr@\blx@main@language}}}
+ {\def\blx@mslang{en-us}}% fallback when no babel/polyglossia
+ \let\blx@gmslang\blx@mslang
+}
+
+
+\protected\def\blx@providecount#1{%
+ \ifcscounter{#1}
+ {}
+ {\expandafter\newcount\csname #1\endcsname}}
+
+\def\blx@citecmds{}
+% \autocite and \autocites are not defined via \DeclareCiteCommand
+\listadd\blx@citecmds{autocite}
+\listadd\blx@citecmds{autocites}
+
+\newcommand*{\blx@contentssafe@citecommands}{%
+ \forlistloop{\blx@mkcitecmd@contentssafe}{\blx@citecmds}}
+
+\def\blx@mkcitecmd@contentssafe#1{%
+ \csdef{#1}{%
+ \blx@tocontentsinit{\the\c@refsection}%
+ \noexpand\csuse{#1}}}
+
+\protected\def\blx@tocontentsinit#1{%
+ \boolfalse{citerequest}%
+ \boolfalse{citetracker}%
+ \boolfalse{pagetracker}%
+ \boolfalse{backtracker}%
+ \defcounter{refsection}{#1}}
+
+% trick hyperref into believing we're natbib
+\let\NAT@parse\@empty
+% trick showkeys into believing we're havard
+\let\HAR@checkdef\@empty
+
+\providecommand{\@gobblefive}[5]{}
+\providecommand{\@gobblethree}[3]{}
+
+% etoolbox helpers
+
+% \ifinlist{<item>}{<list>} is not a good idea
+% for printable stuff according to the etoolbox docs
+% for \ifinlist (p. 31)
+\newrobustcmd{\blx@ifprintableinlist}[2]{%
+ \begingroup
+ \def\blx@tempa{\endgroup
+ \@secondoftwo}%
+ \def\do##1{%
+ \ifstrequal{##1}{#1}
+ {\def\blx@tempa{\endgroup
+ \@firstoftwo}%
+ \listbreak}
+ {}}%
+ \dolistloop{#2}%
+ \expandafter\blx@tempa}
+
+\newrobustcmd{\blx@ifprintableinlistcs}[2]{%
+ \expandafter\blx@ifprintableinlistcs@i\csname #2\endcsname{#1}}
+\long\def\blx@ifprintableinlistcs@i#1#2{\blx@ifprintableinlist{#2}{#1}}
+
+\ifundef\pdf@mdfivesum
+ {\let\blx@mdfivesum\@firstofone
+ \blx@warning@noline{Command '\string\pdf@mdfivesum' undefined.\MessageBreak
+ 'labelprefix' may not be able to accept all input.\MessageBreak
+ The command is available (via 'pdftexcmds')\MessageBreak
+ in recent versions of pdfTeX, LuaTeX and XeTeX}}
+ {\let\blx@mdfivesum\pdf@mdfivesum}
+
+\newtoggle{blx@bbl@rerun@requested}
+
+\ifundef\pdf@filemdfivesum
+ {\blx@warning@noline{Command '\string\pdf@filemdfivesum' undefined.\MessageBreak
+ Biber rerun detection may not work as expected.\MessageBreak
+ The command is available (via 'pdftexcmds')\MessageBreak
+ in recent versions of pdfTeX, LuaTeX and XeTeX}%
+ \let\blx@generate@bbl@mdfivesum@found\@gobble
+ \let\blx@generate@bbl@mdfivesum@notfound\relax
+ \let\abx@aux@read@bblrerun\relax
+ \let\abx@aux@read@bbl@mdfivesum\@gobble
+ \let\blx@aux@write@bbl@mdfivesum\relax
+ \let\blx@check@bbl@rerun@mdfivesum\relax}
+ {\let\blx@filemdfivesum\pdf@filemdfivesum
+
+ \def\blx@generate@bbl@mdfivesum@found#1{%
+ \xdef\blx@bbl@mdfivesum@new{\blx@filemdfivesum{#1}}}
+
+ % 'nobblfile' can never be equal to any md5 hash
+ \def\blx@generate@bbl@mdfivesum@notfound{%
+ \gdef\blx@bbl@mdfivesum@new{nobblfile}}
+
+ \def\abx@aux@read@bblrerun{\global\toggletrue{blx@bbl@rerun@requested}}
+
+ \def\abx@aux@read@bbl@mdfivesum{%
+ \gdef\blx@bbl@mdfivesum@old}
+
+ % If we need Biber to rerun, save the hash of the current .bbl.
+ % That way we can detect if the Biber rerun really happened when
+ % we run LaTeX the next time.
+ \def\blx@aux@write@bbl@mdfivesum{%
+ \blx@auxwrite\@mainaux{}{%
+ \string\abx@aux@read@bbl@mdfivesum{%
+ \ifundef\blx@bbl@mdfivesum@old
+ {nohash}
+ {\blx@bbl@mdfivesum@new}}}%
+ \iftoggle{blx@runbiber}
+ {\blx@auxwrite\@mainaux{}{\string\abx@aux@read@bblrerun}}
+ {}}
+
+ % There was a Biber rerun request last time (\blx@bbl@mdfivesum@old),
+ % yet the bbl files are the same (as far as md5 hashes are concerned),
+ % that means *no* Biber rerun happened.
+ % So we need to re-request a rerun.
+ \def\blx@check@bbl@rerun@mdfivesum{%
+ \iftoggle{blx@bbl@rerun@requested}
+ {\ifdefstrequal\blx@bbl@mdfivesum@old\blx@bbl@mdfivesum@new}
+ {\@secondoftwo}
+ {\blx@logreq@active{}}
+ {}}}
+
+
+% xstring replacements
+
+% reverse a given string
+% idea by egreg (https://tex.stackexchange.com/users/4427/egreg)
+% from https://tex.stackexchange.com/q/36034/
+% relicensed under LPPL according to
+% https://tex.meta.stackexchange.com/a/3333/
+\def\blx@revstr#1{%
+ \ifblank{#1}
+ {}
+ {\blx@revstr@l #1\blx@revstr@b@i\blx@revstr@b@ii}}
+
+\def\blx@revstr@l#1#2\blx@revstr@b@i#3\blx@revstr@b@ii{%
+ \ifblank{#2}
+ {#1#3}
+ {\blx@revstr@l#2\blx@revstr@b@i#1#3\blx@revstr@b@ii}}
+
+% these tests are inspired by Stephan v. Bechtolsheim's TUGboat article
+% https://www.tug.org/TUGboat/tb09-1/tb20bechtolsheim.pdf
+% but we need to test for start and end and not for generic substring
+% start is easy, delimited arguments help there
+\protected\def\blx@ifstrstartswith#1#2{%
+ \def\blx@ifstrstartswith@i ##1#2##2&{%
+ \ifblank{##1}}%
+ \blx@ifstrstartswith@i #1#2&}
+
+% end is harder, so we reverse everything and apply the start test
+\protected\def\blx@ifstrendswith#1#2{%
+ \begingroup
+ \edef\blx@tempa{\endgroup
+ \noexpand\blx@ifstrstartswith{\blx@revstr{#1}}{\blx@revstr{#2}}}%
+ \blx@tempa}
+
+% not expandable, so write the result to the macro given in #3
+% {<string>}{<strip>}{<result>}
+% <result> will contain the bit of <string>
+% after the first occurrence of <strip>
+\protected\def\blx@stripfromstartinto#1#2#3{%
+ \def\blx@stripfromstart@i ##1#2##2&{%
+ \def#3{##2}}%
+ \blx@stripfromstart@i #1&}
+
+% {<string>}{<strip>}{<result>}
+% <result> will contain the bit of <string>
+% before the last occurence of <strip>
+\protected\def\blx@stripfromendinto#1#2#3{%
+ \begingroup
+ \edef\blx@tempa{\endgroup
+ \noexpand\blx@stripfromstartinto{\blx@revstr{#1}}{\blx@revstr{#2}}}%
+ \blx@tempa{#3}%
+ \edef#3{\noexpand\blx@revstr{#3}}%
+ \edef#3{#3}}
+
+%% Allocation
+
+% Counter to track nested tabularx environemnts so we don't
+% try to patch the commands more than once below as this undefs some
+% macros and an error is thrown
+\newcounter{tabx@nest}
+\setcounter{tabx@nest}{0}
+
+\newcounter{listtotal}
+\def\thelisttotal{\the\c@listtotal}
+\newcounter{listcount}
+\def\thelistcount{\the\c@listcount}
+\newcounter{liststart}
+\def\theliststart{\the\c@liststart}
+\newcounter{liststop}
+\def\theliststop{\the\c@liststop}
+\newcounter{citecount}
+\def\thecitecount{\the\c@citecount}
+\newcounter{citetotal}
+\def\thecitetotal{\the\c@citetotal}
+\newcounter{multicitecount}
+\def\themulticitecount{\the\c@multicitecount}
+\newcounter{multicitetotal}
+\def\themulticitetotal{\the\c@multicitetotal}
+\newcounter{instcount}
+\def\theinstcount{\the\c@instcount}
+\newcounter{maxnames}
+\def\themaxnames{\the\c@maxnames}
+\newcounter{minnames}
+\def\theminnames{\the\c@minnames}
+\newcounter{maxitems}
+\def\themaxitems{\the\c@maxitems}
+\newcounter{minitems}
+\def\theminitems{\the\c@minitems}
+\newcounter{citecounter}
+\def\thecitecount{\the\c@citecounter}
+\newcounter{maxcitecounter}
+\def\themaxcitecounter{\the\c@maxcitecounter}
+\newcounter{savedcitecounter}
+\def\thecitecount{\the\c@savedcitecounter}
+\newcounter{uniquelist}
+\def\theuniquelist{\the\c@uniquelist}
+\newcounter{uniquename}
+\def\theuniquename{\the\c@uniquename}
+\newcounter{refsection}
+\def\therefsection{\the\c@refsection}
+\newcounter{refsegment}
+\def\therefsegment{\the\c@refsegment}
+\newcounter{maxextratitle}
+\def\themaxextratitle{\the\c@maxextratitle}
+\newcounter{maxextratitleyear}
+\def\themaxextratitleyear{\the\c@maxextratitleyear}
+\newcounter{maxextraname}
+\def\themaxextraname{\the\c@maxextraname}
+\newcounter{maxextradate}
+\def\themaxextradate{\the\c@maxextradate}
+\newcounter{maxextraalpha}
+\def\themaxextraalpha{\the\c@maxextraalpha}
+\newcounter{abbrvpenalty}
+\def\theabbrvpenalty{\the\c@abbrvpenalty}
+\newcounter{highnamepenalty}
+\def\thehighnamepenalty{\the\c@highnamepenalty}
+\newcounter{lownamepenalty}
+\def\thelownamepenalty{\the\c@lownamepenalty}
+\newcounter{maxparens}
+\def\themaxparens{\the\c@maxparens}
+\newcounter{parenlevel}
+\def\theparenlevel{\the\c@parenlevel}
+
+\newcount\blx@tempcnta
+\newcount\blx@tempcntb
+\newcount\blx@tempcntc
+\newcounter{blx@maxsection}
+\def\theblx@maxsection{\the\c@blx@maxsection}
+\expandafter\newcount\csname blx@maxsegment@0\endcsname
+\newcount\blx@notetype
+\newcount\blx@parenlevel@text
+\newcount\blx@parenlevel@foot
+\expandafter\newcount\csname blx@sectionciteorder@0\endcsname
+\expandafter\newcount\csname blx@sectionciteorderinternal@0\endcsname
+\newcount\blx@entrysetcounter
+\newcount\blx@biblioinstance
+
+\def\blx@uniquename{false}
+\def\blx@uniquelist{false}
+\def\blx@maxbibnames{0}
+\def\blx@minbibnames{0}
+\def\blx@maxcitenames{0}
+\def\blx@mincitenames{0}
+\def\blx@maxsortnames{0}
+\def\blx@minsortnames{0}
+\def\blx@maxalphanames{0}
+\def\blx@minalphanames{0}
+\def\blx@maxitems{0}
+\def\blx@minitems{0}
+
+\newlength{\labelnumberwidth}
+\newlength{\labelalphawidth}
+\newlength{\biblabelsep}
+\ifdef\bibitemsep % memoir
+ {}
+ {\newlength{\bibitemsep}}
+\newlength{\bibnamesep}
+\newlength{\bibinitsep}
+\newlength{\bibparsep}
+\newlength{\bibhang}
+
+\newbool{sourcemap}
+\newbool{citetracker}
+\newbool{pagetracker}
+\newbool{backtracker}
+\newbool{citerequest}
+\booltrue{citerequest}
+\newbool{sortcites}
+\newbool{selectms}
+
+\newtoggle{blx@bbldone}
+\newtoggle{blx@tempa}
+\newtoggle{blx@tempb}
+\newtoggle{blx@runltx}
+\newtoggle{blx@runbiber}
+\newtoggle{blx@block}
+\newtoggle{blx@unit}
+\newtoggle{blx@skipentry}
+\newtoggle{blx@insert}
+\newtoggle{blx@lastins}
+\newtoggle{blx@keepunit}
+\newtoggle{blx@bibtex}
+\newtoggle{blx@debug}
+\newtoggle{blx@sortcase}
+\newtoggle{blx@sortupper}
+\newtoggle{blx@dynamiclabel}
+\newtoggle{blx@autolangbib}
+\newtoggle{blx@autofieldlangstrings}
+\newtoggle{blx@autolangcite}
+\newtoggle{blx@clearlang}
+\newtoggle{blx@defernumbers}
+\newtoggle{blx@omitnumbers}
+\newtoggle{blx@footnote}
+\newtoggle{blx@labelalpha}
+\newtoggle{blx@labelnumber}
+\newtoggle{blx@labeltitle}
+\newtoggle{blx@labeltitleyear}
+\newtoggle{blx@labeldateparts}
+\newtoggle{blx@pluralothers}
+\newtoggle{blx@natbib}
+\newtoggle{blx@mcite}
+\newtoggle{blx@loadfiles}
+\newtoggle{blx@sortsets}
+\newtoggle{blx@crossrefsource}
+\newtoggle{blx@xrefsource}
+\newtoggle{blx@terseinits}
+\newtoggle{blx@useprefix}
+\newtoggle{blx@addset}
+\newtoggle{blx@setonly}
+\newtoggle{blx@dataonly}
+\newtoggle{blx@skipbib}
+\newtoggle{blx@skipbiblist}
+\newtoggle{blx@skiplab}
+\newtoggle{blx@citation}
+\newtoggle{blx@volcite}
+\newtoggle{blx@bibliography}
+\newtoggle{blx@citeindex}
+\newtoggle{blx@bibindex}
+\newtoggle{blx@localnumber}
+\newtoggle{blx@refcontext}
+\newtoggle{blx@noroman}
+\newtoggle{blx@nohashothers}
+\newtoggle{blx@nosortothers}
+\newtoggle{blx@singletitle}
+\newtoggle{blx@uniquebaretitle}
+\newtoggle{blx@uniqueprimaryauthor}
+\newtoggle{blx@uniquetitle}
+\newtoggle{blx@uniquework}
+
+\newcommand*{\blx@xifstrequal}[2]{%
+ \begingroup
+ \edef\blx@tempa{%
+ \endgroup
+ \noexpand\ifstrequal{#1}{#2}}%
+ \blx@tempa}
+
+% Special fields which need resolution using the information provided by biber
+\listadd\abx@rfields{labeltitle}
+\def\abx@dorfields{%
+ \dolistloop\abx@rfields}
+\listadd\abx@rnames{labelname}
+\def\abx@dornames{%
+ \dolistloop\abx@rnames}
+
+% Used to track document forms and langs
+\global\let\blx@msforms\@empty
+\global\let\blx@mslangs\@empty
+
+% Used to track default refcontexts for citations
+\cslet{blx@defaultrefcontexts@0}\@empty
+\listadd\blx@allrefsections{0}
+\listadd\blx@alllastrefsections{0}
+
+% Used to track defernumbers from .aux
+\global\let\blx@localnumbers\@empty
+
+% Used to track sorting name key specifications
+\global\let\blx@sortingnamekeytemplates\@empty
+
+% Used to track uniquename templates
+\global\let\blx@untemplatespecs\@empty
+
+% Used to track labelalphaname templates
+\global\let\blx@lantemplatespecs\@empty
+
+% Used to track transliterations
+\global\let\blx@translits\@empty
+
+% Initialise some lists which track changing citations/sortingtemplates
+% etc. between runs
+\global\let\blx@nocites\@empty
+\global\let\blx@directcites\@empty
+\global\let\blx@refcontexts\@empty
+\global\let\blx@lastrefcontexts\@empty
+\global\let\blx@sortingtemplatenames\@empty
+\global\let\blx@dlistnames\@empty
+\global\let\blx@biblists\@empty
+\global\let\blx@lastbiblists\@empty
+\global\let\blx@localnumaux\@empty
+\global\cslet{blx@cites@0}\@empty
+
+\newread\blx@bcfin
+\newwrite\blx@bcfout
+
+\def\blx@onlypreamble#1{%
+ \gappto\blx@dopreamblecmds{\do#1}}
+
+\def\blx@dopreamblecmds{%
+ \do\blx@dopreamblecmds
+ \do\blx@onlypreamble}
+
+% Deprecations
+\newrobustcmd*{\DeprecateField}[2]{%
+ \blx@imc@ifmsentryfield{#1}
+ {\def\blx@tempa{abx@field@\blx@msform@\blx@mslang@#1}}
+ {\def\blx@tempa{abx@field@@@#1}}%
+ \csdef{\blx@tempa}{%
+ \ifcsundef{abx@legacywarning@field@#1}
+ {\blx@warning@noline{Field '#1' is deprecated. #2}}
+ {}%
+ \global\cslet{abx@legacywarning@field@#1}\@empty}}%
+\newrobustcmd*{\DeprecateList}[2]{%
+ \blx@imc@ifmsentryfield{#1}
+ {\def\blx@tempa{abx@list@\blx@msform@\blx@mslang@#1}}
+ {\def\blx@tempa{abx@list@@@#1}}%
+ \csdef{\blx@tempa}{%
+ \ifcsundef{abx@legacywarning@list@#1}
+ {\blx@warning@noline{List '#1' is deprecated. #2}}
+ {}%
+ \global\cslet{abx@legacywarning@list@#1}\@empty}}
+\newrobustcmd*{\DeprecateName}[2]{%
+ \blx@imc@ifmsentryfield{#1}
+ {\def\blx@tempa{abx@name@\blx@msform@\blx@mslang@#1}}
+ {\def\blx@tempa{abx@name@@@#1}}%
+ \csdef{\blx@tempa}{%
+ \ifcsundef{abx@legacywarning@name@#1}
+ {\blx@warning@noline{Name '#1' is deprecated. #2}}
+ {}%
+ \global\cslet{abx@legacywarning@name@#1}\@empty}}
+
+\let\blx@aliasfields\@empty
+
+\newrobustcmd*{\DeprecateFieldWithReplacement}[2]{%
+ \appto\blx@aliasfields{%
+ \ifcsundef{abx@field@#2}
+ {}%
+ {\blx@imc@ifmsentryfield{#2}
+ {\begingroup
+ \csgdef{blx@datamodel@multiscript@entryfield@#1}{1}%
+ \def\do##1{%
+ \begingroup
+ \def\do####1{%
+ \csgdef{abx@field@##1@####1@#1}{%
+ \csuse{abx@field@##1@####1@#2}%
+ \ifcsundef{abx@legacywarning@field@#1}
+ {\blx@warning@noline{Field '#1' is deprecated.\MessageBreak
+ Please use '#2' instead.\MessageBreak
+ Using '#2' now}}
+ {}%
+ \global\cslet{abx@legacywarning@field@#1}\@empty}}%
+ \dolistcsloop{abx@fieldmslangs@#2}%
+ \endgroup}%
+ \dolistcsloop{abx@fieldmsforms@#2}%
+ \endgroup}
+ {\csdef{abx@field@@@#1}{%
+ \csuse{abx@field@@@#2}%
+ \ifcsundef{abx@legacywarning@field@#1}
+ {\blx@warning@noline{Field '#1' is deprecated.\MessageBreak
+ Please use '#2' instead.\MessageBreak
+ Using '#2' now}}
+ {}%
+ \global\cslet{abx@legacywarning@field@#1}\@empty}}}}}
+
+\newrobustcmd*{\DeprecateListWithReplacement}[2]{%
+ \appto\blx@aliasfields{%
+ \ifcsundef{abx@list@#2}
+ {}%
+ {\blx@imc@ifmsentryfield{#2}
+ {\begingroup
+ \csgdef{blx@datamodel@multiscript@entryfield@#1}{1}%
+ \def\do##1{%
+ \begingroup
+ \def\do####1{%
+ \csgdef{abx@list@##1@####1@#1}{%
+ \csuse{abx@list@##1@####1@#2}%
+ \ifcsundef{abx@legacywarning@list@#1}
+ {\blx@warning@noline{List '#1' is deprecated.\MessageBreak
+ Please use '#2' instead.\MessageBreak
+ Using '#2' now}}
+ {}%
+ \global\cslet{abx@legacywarning@list@#1}\@empty}}%
+ \dolistcsloop{abx@fieldmslangs@#2}%
+ \endgroup}%
+ \dolistcsloop{abx@fieldmsforms@#2}%
+ \endgroup}
+ {\csdef{abx@list@@@#1}{%
+ \csuse{abx@list@@@#2}%
+ \ifcsundef{abx@legacywarning@list@#1}
+ {\blx@warning@noline{List '#1' is deprecated.\MessageBreak
+ Please use '#2' instead.\MessageBreak
+ Using '#2' now}}
+ {}%
+ \global\cslet{abx@legacywarning@list@#1}\@empty}}}}}
+
+\newrobustcmd*{\DeprecateNameWithReplacement}[2]{%
+ \appto\blx@aliasfields{%
+ \ifcsundef{abx@name@#2}
+ {}%
+ {\blx@imc@ifmsentryfield{#2}
+ {\begingroup
+ \csgdef{blx@datamodel@multiscript@entryfield@#1}{1}%
+ \def\do##1{%
+ \begingroup
+ \def\do####1{%
+ \csgdef{abx@name@##1@####1@#1}{%
+ \csuse{abx@name@##1@####1@#2}%
+ \ifcsundef{abx@legacywarning@name@#1}
+ {\blx@warning@noline{Name '#1' is deprecated.\MessageBreak
+ Please use '#2' instead.\MessageBreak
+ Using '#2' now}}
+ {}%
+ \global\cslet{abx@legacywarning@name@#1}\@empty}}%
+ \dolistcsloop{abx@fieldmslangs@#2}%
+ \endgroup}%
+ \dolistcsloop{abx@fieldmsforms@#2}%
+ \endgroup}
+ {\csdef{abx@name@@@#1}{%
+ \csuse{abx@name@@@#2}%
+ \ifcsundef{abx@legacywarning@name@#1}
+ {\blx@warning@noline{Name '#1' is deprecated.\MessageBreak
+ Please use '#2' instead.\MessageBreak
+ Using '#2' now}}
+ {}%
+ \global\cslet{abx@legacywarning@name@#1}\@empty}}}}}
+
+%% Initialisation
+\def\blx@blxinit{%
+ \let\blx@blxinit\relax
+ \blx@initunit}
+
+\def\blx@secinit{%
+ \csgdef{blx@sections@\the\c@refsection}{true}% just to say we have a section for tests later
+ \ifcsundef{blx@bsee@\the\c@refsection}
+ {\global\cslet{blx@bsee@\the\c@refsection}\@empty}
+ {}%
+ \ifcsundef{blx@fsee@\the\c@refsection}
+ {\global\cslet{blx@fsee@\the\c@refsection}\@empty}
+ {}%
+ \blx@ibidreset@force
+ \blx@idemreset@force
+ \blx@opcitreset@force
+ \blx@loccitreset@force
+ % List to track all aliases in a section. We need to output all aliases
+ % to the .bcf every time so that they are visible to biber
+ % Reset only if undefined
+ \ifcsundef{blx@keyaliases@\the\c@refsection}
+ {\global\cslet{blx@keyaliases@\the\c@refsection}\@empty}
+ {}%
+ \ifcsundef{blx@segm@\the\c@refsection @\the\c@refsegment}
+ {\global\cslet{blx@segm@\the\c@refsection @\the\c@refsegment}\@empty}
+ {}}
+
+%% Auxiliary commands
+\protected\def\blx@regimc#1{%
+ \xappto\blx@blxinit{%
+ \let\noexpand#1\expandafter\noexpand\csname
+ blx@imc@\expandafter\@gobble\string#1\endcsname}}
+
+\protected\def\blx@regimcs#1{\blx@regimcs@i#1&}
+\def\blx@regimcs@i#1{%
+ \ifx#1&\else
+ \blx@regimc#1%
+ \expandafter\blx@regimcs@i
+ \fi}
+
+% [<msform>][<mslang>]{<field>} => \do{<item1>}\do{<item2>}...
+\DeclareExpandableDocumentCommand{\blx@imc@docsvfield}
+ {O{\blx@msform} O{\blx@lmslang} m}
+ {\blx@imc@iffieldundef[{#1}][{#2}]{#3}
+ {}
+ {\blx@imc@ifmsentryfield{#3}
+ {\def\blx@tempa{abx@field@#1@#2@#3}}
+ {\def\blx@tempa{abx@field@@@#3}}%
+ \expandafter\expandafter\expandafter\docsvlist
+ \expandafter\expandafter\expandafter{%
+ \csname\blx@tempa\endcsname}}}
+
+% {<handler>}[<msform>][<mslang>]{<field>} => <handler>{<item1>}<handler>{<item2>}...
+\DeclareExpandableDocumentCommand{\blx@imc@forcsvfield}
+ {m O{\blx@msform} O{\blx@lmslang} m}
+ {\blx@imc@iffieldundef[{#2}][{#3}]{#4}
+ {}
+ {\blx@imc@ifmsentryfield{#4}
+ {\def\blx@tempa{abx@field@#2@#3@#4}}
+ {\def\blx@tempa{abx@field@@@#4}}%
+ \expandafter\expandafter\expandafter\blx@imc@forcsvfield@i
+ \expandafter\expandafter\expandafter{%
+ \csname\blx@tempa\endcsname}{#1}}}
+
+\def\blx@imc@forcsvfield@i#1#2{\forcsvlist{#2}{#1}}
+
+\blx@regimcs{\docsvfield \forcsvfield}
+
+% {<list>|<listmacro>}
+\protected\long\def\blx@listloop#1{%
+ \expandafter\blx@listloop@i#1|&}
+\long\def\blx@listloop@i#1|{%
+ \ifblank{#1}
+ {\blx@break}
+ {\blx@do{#1}\blx@listloop@i}}
+
+\long\def\blx@break#1&{%
+ \blx@done
+ \undef\blx@do
+ \undef\blx@done}
+
+% {<listmacro>}{<listcsname>} => matches in <listmacro>
+\protected\def\blx@filter#1#2{%
+ \def\do##1{%
+ \ifinlistcs{##1}{#2}
+ {\listadd#1{##1}}
+ {}}%
+ \blx@runfilter#1}
+
+% {<listmacro>}{<listcsname>} => matches in <listmacro>
+% Slightly odd use of filtering to do citation sorting.
+% Same as blx@filter but it keeps \tempcnta in step with the
+% resulting number of things in the filtered list. This is
+% because \tempcnta is used to set citetotal - this use
+% of filtering for cite sorting has the side-effect of stripping
+% duplicates like \cite{foo,foo} but we need then to keep citetotal
+% in sync.
+\protected\def\blx@filtercitesort#1#2{%
+ \blx@tempcnta\z@
+ \def\do##1{%
+ \ifinlistcs{##1}{#2}
+ {\listadd#1{##1}%
+ \advance\blx@tempcnta\@ne}
+ {}}%
+ \blx@runfilter#1}
+
+% {<listmacro>}{<listcsname>} => neg. matches in <listmacro>
+\protected\def\blx@notfilter#1#2{%
+ \def\do##1{%
+ \ifinlistcs{##1}{#2}
+ {}
+ {\listadd#1{##1}}}%
+ \blx@runfilter#1}
+
+\def\blx@runfilter#1{%
+ \begingroup\edef#1{\endgroup
+ \unexpanded{\let#1\@empty\dolistloop}{#1}}%
+ #1\let\do\noexpand}
+
+% {<code>}{<string>} => <code>{<string>}
+\protected\def\blx@xsanitizeafter#1#2{%
+ \begingroup
+ \abx@hook@xsanitize
+ \def\blx@tempa{\endgroup#1}%
+ \edef\blx@tempb{#2}%
+ \expandafter\blx@tempa
+ \expandafter{\detokenize\expandafter{\blx@tempb}}}
+
+\def\abx@hook@xsanitize{%
+ \blx@safe@actives
+ \let\protect\string}
+
+% {<code>}{<string>} => <code>{<string>}
+\begingroup
+\catcode`\<=\active
+\catcode`\>=\active
+\catcode`\&=\active
+\catcode`\"=\active
+\catcode`\'=\active
+\protected\gdef\blx@xmlsanitizeafter#1#2{%
+ \begingroup
+ \abx@hook@xsanitize
+ \def\blx@tempa{\endgroup#1}%
+ \edef\blx@tempb{#2}%
+ \let\do\@makeother
+ \dospecials
+ \catcode`\<=\active
+ \catcode`\>=\active
+ \catcode`\&=\active
+ \catcode`\"=\active
+ \catcode`\'=\active
+ \edef<{\string&lt\string;}%
+ \edef>{\string&gt\string;}%
+ \edef&{\string&amp\string;}%
+ \edef"{\string&quot\string;}%
+ \edef'{\string&apos\string;}%
+ \endlinechar\m@ne
+ \everyeof{\noexpand}%
+ \edef\blx@tempb{\scantokens\expandafter{\blx@tempb}}%
+ \expandafter\blx@tempa
+ \expandafter{\detokenize\expandafter{\blx@tempb}}}
+\endgroup
+
+% Generate altername filename with any global package postfix and then test
+% for existence of file with postfix, then bare file.
+% Used to look for files in versions of biblatex which are installed in parallel
+% with the standard version. Such versions have a suffix appended to all filenames
+% which is stored in \abx@filespf
+% Returns the found filename in \blx@fnext (with extension) and \blx@fnnoext (without extension) or
+% both \@empty if no file found
+\def\blx@altfile#1{%
+ \begingroup
+ \edef\blx@tempa{#1}% filename can contain macros
+ \let\blx@tempb\@empty
+ \let\blx@tempc\@empty
+ \global\let\blx@fnext\@empty
+ \global\let\blx@fnnoext\@empty
+ % Gives everything up to extension
+ \expandafter\blx@stripfromendinto\expandafter{\blx@tempa}{.}\blx@tempb
+ % Gives the extension
+ \expandafter\expandafter\expandafter\blx@stripfromstartinto\expandafter\expandafter\expandafter{\expandafter\blx@tempa\expandafter}\expandafter{\blx@tempb.}\blx@tempc
+ \xdef\blx@fnext{\blx@tempb\abx@filespf.\blx@tempc}%
+ \xdef\blx@fnnoext{\blx@tempb\abx@filespf}%
+ \expandafter\IfFileExists\expandafter{\blx@fnext}
+ {}
+ {\expandafter\IfFileExists\expandafter{\blx@tempa}
+ {\global\let\blx@fnext\blx@tempa
+ \global\let\blx@fnnoext\blx@tempb}
+ {\global\let\blx@fnext\@empty
+ \global\let\blx@fnnoext\@empty}}
+ \endgroup}
+
+% {<file>}{<message>}{<preload>}{<postload>}{<success>}{<failure>}
+\protected\long\def\blx@inputonce#1{%
+ \blx@altfile{#1}%
+ \ifdefempty\blx@fnext
+ {\blx@inputonce@i{#1}}
+ {\expandafter\blx@inputonce@i\expandafter{\blx@fnext}}}
+
+\protected\long\def\blx@inputonce@i#1#2#3#4#5#6{%
+ \ifcsundef{blx@file@#1}
+ {\blx@info@noline{Trying to load #2..}%
+ \IfFileExists{#1}
+ {\blx@info@noline{... file '#1' found}%
+ \csuse{blx@filehook@preload@#1}%
+ #3\@@input\@filef@und#4%
+ \csuse{blx@filehook@postload@#1}%
+ #5%
+ \listxadd\blx@list@req@stat{#1}%
+ \@addtofilelist{#1}}
+ {\blx@info@noline{... file '#1' not found}%
+ \csuse{blx@filehook@failure@#1}%
+ #6}%
+ \global\cslet{blx@file@#1}\@empty}
+ {#5}}
+
+% {<write>}{<precode>}{<string>}
+\protected\def\blx@auxwrite#1#2#3{%
+ \if@filesw
+ \begingroup
+ \blx@safe@actives
+ \let\protect\string
+ #2%
+ \immediate\write#1{#3}%
+ \endgroup
+ \fi}
+
+% {<file>}{<signature>}{<true>}{<false>}
+\def\blx@ifsigned#1#2{%
+ \begingroup
+ \let\blx@tempa\@firstoftwo
+ \edef\blx@tempb{\csuse{blx@sig@#2}}%
+ \edef\blx@tempb{\detokenize\expandafter{\blx@tempb}}%
+ \openin\blx@bcfin #1.#2\relax
+ \ifeof\blx@bcfin
+ \else
+ \endlinechar\m@ne
+ \readline\blx@bcfin to \blx@tempc
+ \ifeof\blx@bcfin
+ \else
+ \ifx\blx@tempb\blx@tempc
+ \readline\blx@bcfin to \blx@tempc
+ \edef\blx@tempb{\csuse{blx@ver@#2}}%
+ \edef\blx@tempb{\detokenize\expandafter{\blx@tempb}}%
+ \ifx\blx@tempb\blx@tempc
+ \else
+ \blx@warning@noline{%
+ File '#1.#2' is wrong format version - expected \blx@bblversion}
+ \fi
+ \else
+ \blx@error
+ {File '#1.#2' not created by biblatex}
+ {This file was apparently not created by biblatex.
+ Rename it or\MessageBreak move it to a location were
+ TeX will not find it. If this error\MessageBreak
+ persists, consider redefining \string\blxauxsuffix.%
+ See the biblatex\MessageBreak manual for details}%
+ \let\blx@tempa\@secondoftwo
+ \fi
+ \fi
+ \fi
+ \closein\blx@bcfin
+ \expandafter\endgroup\blx@tempa}
+
+\edef\blx@sig@bbl{\@percentchar\space $ biblatex auxiliary file $}
+\edef\blx@ver@bbl{\@percentchar\space $ biblatex bbl format version \blx@bblversion\space $}
+\edef\blx@sig@bcf{\detokenize{<?xml version="1.0" encoding="UTF-8"?>}}
+\edef\blx@ver@bcf{%
+ \detokenize{<bcf:controlfile version="}\blx@bcfversion
+ \detokenize{" bltxversion="}\abx@version
+ \detokenize{" xmlns:bcf="https://sourceforge.net/projects/biblatex">}}
+
+% {<true>}{<false>}
+\newrobustcmd*{\lbx@ifutfinput}{%
+ \ifboolexpr{%
+ test {\ifdefstring\inputencodingname{utf8}}
+ or
+ test {\ifdefstring\inputencodingname{utf8x}}
+ or
+ test {\ifdefstring\inputencodingname{lutf8}}
+ or
+ ( test {\ifundef\inputencodingname}
+ and
+ ( not test {\ifundef\XeTeXrevision}
+ or
+ not test {\ifundef\luatexversion}
+ )
+ )
+ }%
+}
+
+%% More user feedback
+\protected\def\blx@warning@entry#1{%
+ \ifdef\abx@field@@@entrykey
+ {\blx@warning{#1\MessageBreak at entry '\abx@field@@@entrykey'}}
+ {\blx@warning{#1}}}
+
+\protected\def\blx@info@noline#1{%
+ \begingroup
+ \blx@safe@actives
+ \PackageInfo{biblatex}{#1\@gobble}%
+ \endgroup}
+\let\blx@info\blx@info@noline
+\AtEndOfPackage{%
+ \protected\def\blx@info#1{%
+ \begingroup
+ \blx@safe@actives
+ \PackageInfo{biblatex}{#1}%
+ \endgroup}}
+
+\let\blx@noline\@gobble
+\AtEndOfPackage{\let\blx@noline\@empty}
+\def\blx@imc@BibliographyWarning{\blx@warning@entry}
+\blx@regimc\BibliographyWarning
+
+\protected\def\abx@missing#1{%
+ \mbox{\reset@font\bfseries#1}}
+
+
+\def\blx@err@nolang#1{%
+ \blx@error
+ {Language '#1' not found}
+ {The localization module for '#1' could not be found}}
+
+\def\blx@err@invarg#1#2{%
+ \blx@error
+ {Argument '#1' invalid}
+ {\ifblank{#2}
+ {The argument you have supplied is invalid.\MessageBreak
+ See the biblatex manual for details}
+ {#2}}}
+
+\def\blx@err@invopt#1#2{%
+ \blx@error
+ {Option '#1' invalid}
+ {\ifblank{#2}
+ {The option you have supplied is invalid.\MessageBreak
+ See the biblatex manual for valid option keys and
+ possible values}
+ {#2}}}
+
+\def\blx@err@confopt#1#2{%
+ \blx@error
+ {Conflicting options\ifblank{#1}{}{ (#1)}}
+ {\ifblank{#2}
+ {The option you have supplied conflicts with another one.\MessageBreak
+ See the biblatex manual for valid option keys and possible values}
+ {#2}}}
+
+\def\blx@err@optdef#1#2{%
+ \blx@error
+ {Option '#1' already defined}
+ {The option '#1' is already defined in scope '#2'}}
+
+\def\blx@err@nodocdiv#1{%
+ \blx@error
+ {\@backslashchar#1 not provided by class}
+ {The document class does not seems to support #1s}}
+
+\def\blx@err@nosec#1{%
+ \blx@error
+ {Section '#1' not found}
+ {The reference section '#1' could not be found}}
+
+\def\blx@err@nosort#1{%
+ \blx@error
+ {Sorting template '#1' not found}
+ {The sorting template '#1' does not seem to have been defined anywhere}}
+
+\def\blx@err@secfirst{%
+ \blx@error
+ {'section' not first filter}
+ {When passing multiple filter options,
+ the 'section' filter must be given first}}
+
+\protected\def\blx@err@nestcite{%
+ \blx@error
+ {Nested citation command}
+ {Citation commands may not be nested}}
+
+\def\blx@err@nestenv#1{%
+ \blx@error
+ {Nested '#1' environment}
+ {This environment may not be nested}}
+
+\protected\def\blx@err@citecmd#1{%
+ \begingroup
+ \escapechar\m@ne
+ \blx@error
+ {Command '\@backslashchar\string#1' undefined}
+ {The citation command '\@backslashchar\string#1'
+ has not been defined\MessageBreak by the
+ selected citation style}%
+ \endgroup}
+
+\def\blx@err@endnote#1{%
+ \blx@error
+ {Missing or incomplete endnote support}
+ {There does not seem to be endnote support available\MessageBreak
+ or the available support is incomplete.\MessageBreak
+ If you continue, I will fall back to '\string#1'}%
+ #1}
+
+\def\blx@err@matchparen#1{%
+ \blx@error
+ {Unbalanced parentheses or brackets}
+ {\iftoggle{blx@footnote}{#1 in foot or endnote}{#1}.\MessageBreak
+ This error is triggered if \string\bibopenparen\space and
+ \string\bibcloseparen\MessageBreak or
+ \string\bibopenbracket\space and \string\bibclosebracket\space
+ are unbalanced\MessageBreak or mismatched}}
+
+\def\blx@err@nestparen#1{%
+ \blx@error
+ {Too deeply nested parentheses or brackets}
+ {#1 nested too deeply%
+ \iftoggle{blx@footnote}{\space in foot or endnote}{}.\MessageBreak
+ This error may also be triggered if \string\mkbibparens\MessageBreak
+ or \string\mkbibbrackets\space are nested too deeply}}
+
+\def\blx@err@filter{%
+ \blx@error
+ {Invalid filter expression}
+ {The filter expression you have supplied is invalid.\MessageBreak
+ See the biblatex manual for details}}
+
+\def\blx@warn@nohyph#1{%
+ \blx@warning{No hyphenation patterns for '#1'}}
+
+\protected\def\blx@warn@citecmd#1#2{%
+ \blx@warning{%
+ '\string#1' not defined by citation style.\MessageBreak
+ Falling back to '\string#2'}%
+ #2}
+
+\protected\def\blx@warn@nostring#1{%
+ \blx@warning@entry{Bibliography string '#1'
+ \blx@kv@ifkeyundef{blx@lbx}{#1}{undefined}{untranslated}}%
+ \abx@missing{#1}}
+
+\def\blx@warn@conflopt#1{%
+ \blx@warning{Conflicting options.\MessageBreak#1}}
+
+\def\blx@warn@badoptdt#1{%
+ \blx@warning{Invalid option datatype '#1'.\MessageBreak
+ Defaulting to 'boolean'}}
+
+\def\blx@warn@depropt#1{%
+ \blx@warning{Deprecated option.\MessageBreak Ignoring '#1'}}
+
+\def\blx@warn@bibempty{%
+ \@latex@warning{Empty bibliography}}
+
+\def\blx@warn@biblistempty#1{%
+ \@latex@warning{Empty biblist '#1'}}
+
+\def\blx@inf@refsec{%
+ \blx@info{Reference section=\the\c@refsection}}%
+
+\def\blx@inf@delimdeclare#1#2{%
+ \blx@info{Delimiter '#1' in context '#2' already defined, overwriting}}
+
+\def\blx@warn@delimuse#1#2{%
+ \blx@warning{Delimiter '#1' in context '#2' undefined}}
+
+\def\blx@inf@refseg{%
+ \ifnum\c@refsection=\z@
+ \blx@info{Reference segment=\the\c@refsegment}%
+ \else
+ \blx@info{%
+ Reference section/segment=%
+ \the\c@refsection/\the\c@refsegment}%
+ \fi}
+
+\def\blx@inf@creset{%
+ \blx@info{Resetting trackers}}%
+
+\def\blx@msg@cundef#1{%
+ Citation '#1' undefined}
+\def\blx@msg@cundefon#1{%
+ Citation '#1' on page \the\c@page\space undefined}
+
+% Dummy as backend is biber by default. Some style may still use this to
+% check though.
+\newrobustcmd*{\RequireBiber}[1][2]{}
+
+% \blx@list@active active aux files (basename)
+% [internal list]
+% \blx@list@inactive inactive aux files (basename)
+% [internal list]
+% \blx@list@bibfiles@<auxfile> aux file -> bib file mapping (refsections)
+% aux file (basename) -> bib files (full)
+% [internal list]
+
+\let\blx@list@active\@empty
+\let\blx@list@inactive\@empty
+\listeadd\blx@list@inactive{\jobname}
+
+\protected\def\blx@regbibfiles#1#2{%
+ \forlistloop{\blx@regbibfile{#1}}{#2}}
+
+\def\blx@regbibfile#1#2{%
+ \ifcsundef{blx@res@loca@#2}
+ {\blx@regbibfile@i{#1}{#2}}
+ {\ifcsstring{blx@res@loca@#2}{local}
+ {\blx@regbibfile@i{#1}{#2}}
+ {}}}
+
+\def\blx@regbibfile@i#1#2{%
+ \ifinlistcs{#2}{blx@list@bibfiles@#1}
+ {}
+ {\listcsxadd{blx@list@bibfiles@#1}{#2}}}
+
+\def\blx@check@logreq{%
+ \begingroup
+ \ltxrequest{biblatex}{{\iftoggle{blx@runltx}{1}{0}}}{%
+ \provides[type=dynamic]{
+ \file{\jobname.bcf}
+ }
+ \requires[type=dynamic]{
+ \file{\jobname.bbl}
+ }
+ \ifdef\blx@list@req@edit
+ {\requires[type=editable]{
+ \forlistloop\file\blx@list@req@edit
+ }}
+ {}
+ \ifdef\blx@list@req@stat
+ {\requires[type=static]{
+ \forlistloop\file\blx@list@req@stat
+ }}
+ {}
+ }%
+ \logrequest[package=biblatex,priority=5,active={{\iftoggle{blx@runbiber}{1}{0}}}]{%
+ \generic{biber}
+ \cmdline{
+ \binary{biber}
+ \infile{\jobname}
+ }
+ \input{
+ \file{\jobname.bcf}
+ }
+ \output{
+ \file{\jobname.bbl}
+ }
+ \provides[type=dynamic]{
+ \file{\jobname.bbl}
+ }
+ \requires[type=dynamic]{
+ \file{\jobname.bcf}
+ }
+ \ifcsdef{blx@list@bibfiles@\jobname}
+ {\requires[type=editable]{
+ \def\do{\file}
+ \dolistcsloop{blx@list@bibfiles@\jobname}
+ }}
+ {}
+ }%
+ \endgroup}
+
+\def\blx@logreq@active#1{%
+ \ifblank{#1}
+ {}
+ {\@latex@warning{#1}}%
+ \blx@rerun@latex
+ \blx@rerun@biber}
+
+\def\blx@rerun@latex{%
+ \G@refundefinedtrue
+ \global\toggletrue{blx@runltx}%
+ \global\let\blx@rerun@latex\relax}
+
+\def\blx@rerun@biber{%
+ \global\toggletrue{blx@runbiber}%
+ \global\let\blx@rerun@biber\relax}
+
+
+\let\blx@checksum@old\@empty
+\let\blx@checksum@new\@empty
+\let\blx@pagesum@old\@empty
+\let\blx@pagesum@new\@empty
+
+\def\blx@checksum#1#2#3{%
+ \begingroup
+ \blx@tempcnta\the\numexpr0#2*0#3\relax
+ \blx@tempcntb\blx@tempcnta
+ \divide\blx@tempcntb10
+ \multiply\blx@tempcntb10
+ \advance\blx@tempcnta-\blx@tempcntb
+ \xdef#1{#1\the\blx@tempcnta}%
+ \endgroup}
+
+\def\blx@addchecksum{\blx@checksum\blx@checksum@old}
+\def\blx@addpagesum{\blx@checksum\blx@pagesum@old}
+\blx@AtEndDocument{%
+ \def\blx@addchecksum{\blx@checksum\blx@checksum@new}%
+ \def\blx@addpagesum{\blx@checksum\blx@pagesum@new}}
+
+\protected\def\blx@check@rerun{%
+ \begingroup
+ \blx@tempcnta\z@
+ \iftoggle{blx@runltx}
+ {\blx@tempcnta\@ne}
+ {\ifx\blx@checksum@old\blx@checksum@new
+ \ifx\blx@pagesum@old\blx@pagesum@new
+ \else
+ \blx@tempcnta\@ne
+ \fi
+ \else
+ \blx@tempcnta\@ne
+ \fi}%
+ \iftoggle{blx@runbiber}
+ {\advance\blx@tempcnta\tw@}
+ {}%
+ \ifcase\blx@tempcnta
+ \or
+ \blx@rerun@latex
+ \blx@warning@noline{%
+ Please rerun LaTeX%
+ \ifx\blx@pagesum@old\blx@pagesum@new\else
+ .\MessageBreak Page breaks have changed%
+ \fi}%
+ \else
+ \blx@rerun@latex
+ \blx@warn@auxlist
+ \fi
+ \endgroup}
+
+\def\blx@warn@auxlist{%
+ \blx@warning@noline{%
+ Please (re)run Biber on the file:\MessageBreak
+ \jobname\MessageBreak
+ and rerun LaTeX afterwards}}
+
+\AfterEndDocument{%
+ \blx@check@rerun
+ \blx@check@logreq}
+
+%% Punctuation and capitalization
+
+% 1001 prefix sep for names (e.g. d'Argent ... \printnames only)
+% 1002 abbreviation period (dot)
+% 1003/1250 comma
+% 1004/1500 semicolon
+% 1005/2000 colon
+% 1006/3000 period
+% 1007/3001 exclamation mark
+% 1008/3002 question mark
+% 1009 suppress punctuation
+% 1010 new paragaph
+
+\mathchardef\blx@sf@prefixchar=1001% e.g. apostrophe or equivalent for prefix handling
+\mathchardef\blx@sf@dot=1002
+\mathchardef\blx@sf@comma=1003
+\mathchardef\blx@sf@semicolon=1004
+\mathchardef\blx@sf@colon=1005
+\mathchardef\blx@sf@period=1006
+\mathchardef\blx@sf@exclam=1007
+\mathchardef\blx@sf@question=1008
+\mathchardef\blx@sf@nopunct=1009
+\mathchardef\blx@sf@par=1010
+\mathchardef\blx@sf@threshold@low=1002
+\mathchardef\blx@sf@threshold@high=1009
+
+\csdef{blx@sf@1250}{\the\blx@sf@comma}
+\csdef{blx@sf@1500}{\the\blx@sf@semicolon}
+\csdef{blx@sf@2000}{\the\blx@sf@colon}
+\csdef{blx@sf@3000}{\the\blx@sf@period}
+\csdef{blx@sf@3001}{\the\blx@sf@exclam}
+\csdef{blx@sf@3002}{\the\blx@sf@question}
+
+\csdef{blx@pm@,}{comma}
+\csdef{blx@pm@;}{semicolon}
+\csdef{blx@pm@:}{colon}
+\csdef{blx@pm@.}{period}
+\csdef{blx@pm@!}{exclam}
+\csdef{blx@pm@?}{question}
+
+\def\blx@setsfcodes{%
+ \let\blx@setsfcodes\relax
+ \let\frenchspacing\blx@setfrcodes
+ \let\nonfrenchspacing\blx@setencodes
+ \ifnum\sfcode`\.>2000
+ \blx@setencodes
+ \else
+ \blx@setfrcodes
+ \fi
+ \@setquotesfcodes
+ \sfcode`\(=\z@
+ \sfcode`\)=\z@
+ \sfcode`\[=\z@
+ \sfcode`\]=\z@
+ \sfcode`\<=\z@
+ \sfcode`\>=\z@}
+
+\def\blx@setfrcodes{%
+ \ifnum\sfcode`\A=\@m
+ \else
+ \blx@setazcodes
+ \fi
+ \sfcode`\,=\blx@sf@comma
+ \sfcode`\;=\blx@sf@semicolon
+ \sfcode`\:=\blx@sf@colon
+ \sfcode`\.=\blx@sf@period
+ \sfcode`\!=\blx@sf@exclam
+ \sfcode`\?=\blx@sf@question
+}
+
+\def\blx@setencodes{%
+ \sfcode`\,=1250
+ \sfcode`\;=1500
+ \sfcode`\:=2000
+ \sfcode`\.=3000
+ \sfcode`\!=3001
+ \sfcode`\?=3002
+}
+
+\def\abx@dosingleaccents{%
+ \do\"\do\'\do\`\do\^\do\~\do\=\do\.%
+ \do\H\do\b\do\c\do\d\do\r\do\u\do\v}
+\def\abx@dodoubleaccents{%
+ \do\t}
+
+% Defining characters that count as prefices in names like d'Argent
+% Code from moewe
+\let\blx@prefchars\@empty
+
+\def\blx@defprefchars@loop#1{%
+ \ifx#1\relax
+ \else
+ \listadd{\blx@prefchars}{#1}%
+ \expandafter\blx@defprefchars@loop
+ \fi}
+
+\def\blx@defprefchars#1{%
+ \expandafter\blx@defprefchars@loop\detokenize{#1}\relax}
+
+\newrobustcmd*{\DeclarePrefChars}{%
+ \@ifstar
+ {\blx@defprefchars}
+ {\global\let\blx@prefchars\@empty
+ \blx@defprefchars}}
+\DeclarePrefChars{'-}
+
+\protected\def\blx@imc@ifprefchar{%
+ \ifhmode
+ \begingroup
+ \ifnum\spacefactor=\blx@sf@prefixchar
+ \endgroup
+ \expandafter\expandafter
+ \expandafter\@firstoftwo
+ \else
+ \endgroup
+ \expandafter\expandafter
+ \expandafter\@secondoftwo
+ \fi
+ \else
+ \expandafter\@secondoftwo
+ \fi}
+
+\blx@regimcs{\ifprefchar}
+
+\def\blx@namecodes{%
+ \ifnum\sfcode`\A=\@m
+ \else
+ \blx@setazcodes
+ \fi
+ \def\do##1{\sfcode`##1=\blx@sf@prefixchar}%
+ \dolistloop\blx@prefchars
+}
+
+\begingroup
+\let\blx@setazcodes\@empty
+\def\blx@tempa{%
+ \xdef\blx@setazcodes{%
+ \blx@setazcodes
+ \sfcode\the\blx@tempcnta=\@m}
+ \ifnum\blx@tempcnta<\blx@tempcntb
+ \advance\blx@tempcnta\@ne
+ \expandafter\blx@tempa
+ \fi}
+\blx@tempcnta`\A
+\blx@tempcntb`\Z
+\blx@tempa
+\ifnum\inputlineno=\m@ne\else
+ \blx@tempcnta"80
+ \blx@tempcntb"9C
+ \blx@tempa
+ \blx@tempcnta"C0
+ \blx@tempcntb"DF
+ \blx@tempa
+\fi
+\endgroup
+
+\def\blx@spacefactor{%
+ \ifhmode
+ \ifcsundef{blx@sf@\the\spacefactor}
+ {\the\spacefactor}
+ {\csname blx@sf@\the\spacefactor\endcsname}%
+ \else
+ \the\blx@sf@par
+ \fi}
+
+\protected\def\blx@leavevmode{%
+ \ifhmode
+ \else
+ \leavevmode\spacefactor\blx@sf@par
+ \fi}
+
+\protected\def\blx@leavevmode@cite{%
+ \ifhmode
+ \ifnum\spacefactor=\blx@sf@par
+ \else
+ \spacefactor\@m
+ \fi
+ \else
+ \leavevmode
+ \fi}
+
+\protected\def\blx@imc@setpunctfont#1{%
+ \blx@ifpuncthook
+ {\gdef\abx@puncthook{%
+ \ifdim\lastkern>\z@\unkern\fi
+ \blx@imc@resetpunctfont#1}}
+ {}}
+\protected\def\blx@imc@resetpunctfont{%
+ \blx@ifpuncthook
+ {\global\let\abx@puncthook\@firstofone}
+ {}}
+
+\protected\def\blx@setpostpunct#1{%
+ \blx@ifuspunct
+ {\global\let\blx@postpunct\blx@dopostpunct
+ \ifdef\blx@thepostpunct
+ {\gappto\blx@thepostpunct{#1}}
+ {\gdef\blx@thepostpunct{#1}}}
+ {}}
+
+\def\blx@dopostpunct{%
+ \blx@thepostpunct
+ \global\let\blx@postpunct\@empty
+ \global\undef\blx@thepostpunct}
+
+\protected\def\blx@postpunct@agroup{%
+ \aftergroup\blx@postpunct
+ \let\blx@postpunct@agroup\@empty}
+
+% {<characters>}
+\newrobustcmd*{\DeclareCapitalPunctuation}[1]{%
+ \cslet{blx@cap@\the\blx@sf@par}\@empty
+ \csundef{blx@cap@\the\blx@sf@comma}%
+ \csundef{blx@cap@\the\blx@sf@semicolon}%
+ \csundef{blx@cap@\the\blx@sf@colon}%
+ \csundef{blx@cap@\the\blx@sf@period}%
+ \csundef{blx@cap@\the\blx@sf@exclam}%
+ \csundef{blx@cap@\the\blx@sf@question}%
+ \ifblank{#1}
+ {}
+ {\expandafter\blx@defcapstring\detokenize{#1}\relax}}
+
+\def\blx@defcapstring#1{%
+ \ifx#1\relax
+ \else
+ \begingroup
+ \blx@setfrcodes
+ \ifcsdef{blx@pm@#1}
+ {\expandafter\endgroup
+ \expandafter\let
+ \csname blx@cap@\the\sfcode`#1\endcsname\@empty}
+ {\blx@warning{Ignoring invalid punctuation mark '#1'}%
+ \endgroup}%
+ \expandafter\blx@defcapstring
+ \fi}
+
+% {<characters>}
+\newrobustcmd*{\DeclareQuotePunctuation}[1]{%
+ \csdef{blx@qp@comma}{\blx@postpunct}%
+ \csdef{blx@qp@semicolon}{\blx@postpunct}%
+ \csdef{blx@qp@colon}{\blx@postpunct}%
+ \csdef{blx@qp@period}{\blx@postpunct}%
+ \csdef{blx@qp@exclam}{\blx@postpunct}%
+ \csdef{blx@qp@question}{\blx@postpunct}%
+ \cslet{blx@pq@comma}\@empty
+ \cslet{blx@pq@semicolon}\@empty
+ \cslet{blx@pq@colon}\@empty
+ \cslet{blx@pq@period}\@empty
+ \cslet{blx@pq@exclam}\@empty
+ \cslet{blx@pq@question}\@empty
+ \let\blx@quotepunct\@empty
+ \ifblank{#1}
+ {\let\blx@ifuspunct\@secondoftwo}
+ {\let\blx@ifuspunct\@firstoftwo
+ \expandafter\blx@defquotepunct\detokenize{#1}&}}
+
+\def\blx@defquotepunct#1{%
+ \ifx&#1\relax
+ \else
+ \ifcsdef{blx@pm@#1}
+ {\appto\blx@quotepunct{#1}%
+ \cslet{blx@qp@\csuse{blx@pm@#1}}\@empty
+ \csdef{blx@pq@\csuse{blx@pm@#1}}{\blx@postpunct}}
+ {\blx@warning{Ignoring invalid punctuation mark '#1'}}%
+ \expandafter\blx@defquotepunct
+ \fi}
+
+% {<mark>}{<characters>}
+\newrobustcmd*{\DeclarePunctuationPairs}[2]{%
+ \ifcsdef{blx@sf@\detokenize{#1}}
+ {\ifnum\csname blx@sf@\detokenize{#1}\endcsname>\blx@sf@prefixchar
+ \ifnum\csname blx@sf@\detokenize{#1}\endcsname<\blx@sf@nopunct
+ \expandafter\blx@defpunctpairs
+ \expandafter{\the\csname blx@sf@\detokenize{#1}\endcsname}{#2}%
+ \else
+ \blx@err@invarg{\detokenize{#1}{}}%
+ \fi
+ \else
+ \blx@err@invarg{\detokenize{#1}{}}%
+ \fi}
+ {\blx@err@invarg{\detokenize{#1}{}}}}
+
+\def\blx@defpunctpairs#1#2{%
+ \blx@undefpair{#1}{\the\blx@sf@dot}%
+ \blx@undefpair{#1}{\the\blx@sf@comma}%
+ \blx@undefpair{#1}{\the\blx@sf@semicolon}%
+ \blx@undefpair{#1}{\the\blx@sf@colon}%
+ \blx@undefpair{#1}{\the\blx@sf@period}%
+ \blx@undefpair{#1}{\the\blx@sf@exclam}%
+ \blx@undefpair{#1}{\the\blx@sf@question}%
+ \ifblank{#2}
+ {}
+ {\begingroup
+ \def\blx@tempa{#1}%
+ \let\blx@tempb\@empty
+ \blx@setfrcodes
+ \sfcode`\*=\blx@sf@dot
+ \expandafter\blx@defpair\detokenize{#2}&%
+ \expandafter\endgroup\blx@tempb}}
+
+\def\blx@defpair#1{%
+ \ifx&#1%
+ \else
+ \ifnum\the\sfcode`#1>\blx@sf@prefixchar
+ \ifnum\the\sfcode`#1<\blx@sf@nopunct
+ \eappto\blx@tempb{%
+ \cslet{blx@pp@\blx@tempa @\the\sfcode`#1}\noexpand\@empty}%
+ \else
+ \blx@err@invarg{#1}{}%
+ \fi
+ \else
+ \blx@err@invarg{#1}{}%
+ \fi
+ \expandafter\blx@defpair
+ \fi}
+
+\def\blx@undefpair#1#2{%
+ \ifcsdef{blx@pp@#1@#2}
+ {\csundef{blx@pp@#1@#2}}
+ {}}
+
+\protected\def\blx@resetpunct{%
+ \DeclareCapitalPunctuation{.!?}%
+ \DeclarePunctuationPairs{dot}{}%
+ \DeclarePunctuationPairs{comma}{*!?}%
+ \DeclarePunctuationPairs{semicolon}{*!?}%
+ \DeclarePunctuationPairs{colon}{*!?}%
+ \DeclarePunctuationPairs{period}{}%
+ \DeclarePunctuationPairs{exclam}{*}%
+ \DeclarePunctuationPairs{question}{*}%
+ \DeclareQuotePunctuation{}%
+ \def\abx@dot{\ifdim\lastkern>\z@\unkern\fi.\spacefactor\blx@sf@dot}%
+ \def\abx@comma{\ifdim\lastkern>\z@\unkern\fi\abx@puncthook{,}}%
+ \def\abx@semicolon{\abx@puncthook{;}}%
+ \def\abx@colon{\abx@puncthook{:}}%
+ \def\abx@period{\ifdim\lastkern>\z@\unkern\fi\abx@puncthook{.}}%
+ \def\abx@exclam{\abx@puncthook{!}}%
+ \def\abx@question{\abx@puncthook{?}}%
+ \global\let\abx@puncthook\@firstofone
+ \global\let\blx@postpunct\@empty}
+
+\blx@resetpunct
+
+% {<character>}{<true>}{<false>}
+\protected\def\blx@imc@ifpunctmark#1{%
+ \ifhmode
+ \begingroup
+ \sfcode`\*=\blx@sf@dot
+ \ifnum\sfcode`#1=\spacefactor
+ \endgroup
+ \expandafter\expandafter
+ \expandafter\@firstoftwo
+ \else
+ \endgroup
+ \expandafter\expandafter
+ \expandafter\@secondoftwo
+ \fi
+ \else
+ \expandafter\@secondoftwo
+ \fi}
+
+% {<true>}{<false>}
+\protected\def\blx@imc@ifterm{%
+ \ifhmode
+ \expandafter\blx@imc@ifcapital
+ \else
+ \expandafter\@secondoftwo
+ \fi}
+
+% {<true>}{<false>}
+\protected\def\blx@imc@ifcapital{%
+ \ifcsdef{blx@cap@\blx@spacefactor}}
+
+% {<true>}{<false>}
+\protected\def\blx@imc@ifpunct{%
+ \ifnum\blx@spacefactor>\blx@sf@threshold@low
+ \ifnum\blx@spacefactor<\blx@sf@threshold@high
+ \expandafter\expandafter
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\expandafter
+ \expandafter\@secondoftwo
+ \fi
+ \else
+ \expandafter\@secondoftwo
+ \fi}
+
+% {<character>}
+\newrobustcmd*{\autocap}[1]{#1}
+
+\protected\def\blx@imc@autocap{%
+ \blx@imc@ifcapital\MakeCapital\@firstofone}
+
+\protected\def\blx@imc@nopunct{%
+ \leavevmode\spacefactor\blx@sf@nopunct}
+
+\protected\def\blx@imc@isdot{%
+ \ifnum\blx@spacefactor=\blx@sf@period
+ \spacefactor\blx@sf@dot
+ \fi}
+
+\protected\def\blx@imc@adddot{%
+ \blx@addpunct{dot}%
+ \ifnum\blx@spacefactor=\blx@sf@period
+ \spacefactor\blx@sf@dot
+ \fi}
+
+\protected\def\blx@imc@addperiod{%
+ \blx@addpunct{period}%
+ \ifnum\blx@spacefactor=\blx@sf@dot
+ \spacefactor\blx@sf@period
+ \fi}
+
+\protected\def\blx@imc@addcomma{\blx@addpunct{comma}}
+\protected\def\blx@imc@addsemicolon{\blx@addpunct{semicolon}}
+\protected\def\blx@imc@addcolon{\blx@addpunct{colon}}
+\protected\def\blx@imc@addexclam{\blx@addpunct{exclam}}
+\protected\def\blx@imc@addquestion{\blx@addpunct{question}}
+
+\def\blx@addpunct#1{%
+ \unspace
+ \ifnum\blx@spacefactor<\blx@sf@threshold@low
+ \csuse{blx@qp@#1}\csuse{abx@#1}%
+ \else
+ \ifnum\blx@spacefactor>\blx@sf@threshold@high
+ \csuse{blx@qp@#1}\csuse{abx@#1}%
+ \else
+ \ifcsdef{blx@pp@\the\csname blx@sf@#1\endcsname @\blx@spacefactor}
+ {\csuse{blx@qp@#1}\csuse{abx@#1}}
+ {\csuse{blx@qp@#1}}%
+ \fi
+ \fi
+ \csuse{blx@pq@#1}}
+
+\providerobustcmd*{\unspace}{%
+ \ifbool{hmode}
+ {\ifdimgreater\lastskip\z@
+ {\unskip\unspace}
+ {\ifnumgreater\lastpenalty\z@
+ {\unpenalty\unspace}
+ {}}}
+ {}}
+
+\newrobustcmd*{\bibsentence}{%
+ \leavevmode\spacefactor\blx@sf@par
+ \ignorespaces}
+
+\newrobustcmd*{\midsentence}{%
+ \leavevmode
+ \@ifstar
+ {\ifnum\spacefactor=\blx@sf@dot
+ \else
+ \spacefactor\@m
+ \fi}
+ {\spacefactor\@m}}
+
+\newrobustcmd*{\addslash}{%
+ \unspace/\penalty\hyphenpenalty\hskip\z@skip}
+
+\newrobustcmd*{\addspace}{%
+ \unspace\blx@postpunct
+ \space\blx@imc@resetpunctfont}
+
+\newrobustcmd*{\addnbspace}{%
+ \unspace\blx@postpunct
+ \nobreak\space\blx@imc@resetpunctfont}
+
+\newrobustcmd*{\addthinspace}{%
+ \unspace\blx@postpunct
+ \hskip0.16667em\relax
+ \blx@imc@resetpunctfont}
+
+\newrobustcmd*{\addnbthinspace}{%
+ \unspace\blx@postpunct
+ \nobreak\hskip0.16667em\relax
+ \blx@imc@resetpunctfont}
+
+\newrobustcmd*{\addlowpenspace}{%
+ \unspace\blx@postpunct
+ \penalty\value{lownamepenalty}\space
+ \blx@imc@resetpunctfont}
+
+\newrobustcmd*{\addhighpenspace}{%
+ \unspace\blx@postpunct
+ \penalty\value{highnamepenalty}\space
+ \blx@imc@resetpunctfont}
+
+\newrobustcmd*{\addlpthinspace}{%
+ \unspace\blx@postpunct
+ \penalty\value{lownamepenalty}%
+ \hskip0.16667em\relax\blx@imc@resetpunctfont}
+
+\newrobustcmd*{\addhpthinspace}{%
+ \unspace\blx@postpunct
+ \penalty\value{highnamepenalty}%
+ \hskip0.16667em\relax\blx@imc@resetpunctfont}
+
+\newrobustcmd*{\addabbrvspace}{%
+ \unspace\blx@postpunct
+ \penalty\value{abbrvpenalty}%
+ \space\blx@imc@resetpunctfont}
+
+\newrobustcmd*{\addabthinspace}{%
+ \unspace\blx@postpunct
+ \penalty\value{abbrvpenalty}%
+ \hskip0.16667em\relax
+ \blx@imc@resetpunctfont}
+
+\newrobustcmd*{\adddotspace}{%
+ \unspace\adddot\blx@postpunct
+ \penalty\value{abbrvpenalty}%
+ \space\blx@imc@resetpunctfont}
+
+\providerobustcmd*{\noligature}{%
+ \penalty\@M\discretionary{-}{}{\kern0.03em}%
+ \nobreak\hskip\z@skip}
+
+\providerobustcmd*{\hyphen}{%
+ \nobreak-\nobreak\hskip\z@skip}
+
+\providerobustcmd*{\nbhyphen}{%
+ \nobreak\mbox{-}\nobreak\hskip\z@skip}
+
+\providerobustcmd*{\hyphenate}{%
+ \nobreak\-\nobreak\hskip\z@skip}
+
+\providerobustcmd*{\allowhyphens}{%
+ \nobreak\hskip\z@skip}
+
+% Idea from Peter Wilson's hyphenat package
+% https://ctan.org/pkg/hyphenat
+% also https://texfaq.org/FAQ-hyphoff
+\newlanguage\blx@langwohyphens
+
+\providerobustcmd*{\nohyphenation}{%
+ \language\blx@langwohyphens}
+
+% First part of workaround for odd XeTeX/babel-french behaviour
+% https://github.com/plk/biblatex/issues/979
+% fix by Ulrike Fischer
+% https://tex.stackexchange.com/a/544914/.
+% The second bit lives in blx-unicode.def.
+\ifundef\XeTeXrevision
+ {\providerobustcmd*{\textnohyphenation}[1]{%
+ \bgroup\nohyphenation#1\egroup}}
+ {}
+
+\blx@regimcs{%
+ \setpunctfont \resetpunctfont \ifcapital \autocap \ifpunctmark
+ \ifpunct \ifterm \nopunct \isdot \adddot \addperiod \addcomma
+ \addsemicolon \addcolon \addexclam \addquestion}
+
+\appto\blx@blxinit{%
+ \appto\nocorrlist{\isdot\adddot\addperiod\addcomma}}
+
+%% Style definition
+
+% {<bibstyle>}
+\newrobustcmd*{\RequireBibliographyStyle}[1]{%
+ \blx@inputonce{#1.bbx}{bibliography style '#1'}{}{}{}
+ {\blx@error
+ {Style '#1' not found}
+ {The bibliography style '#1' could not be found}}}
+\@onlypreamble\RequireBibliographyStyle
+
+% {<code>}
+\newrobustcmd*{\InitializeBibliographyStyle}{\appto\blx@hook@bbxinit}
+\@onlypreamble\InitializeBibliographyStyle
+
+% {<entry type>}{<driverdef>}
+\newrobustcmd*{\DeclareBibliographyDriver}[1]{%
+ \blx@declarebibdriver{#1}}
+\@onlypreamble\DeclareBibliographyDriver
+
+\long\def\blx@declarebibdriver#1#2{\long\csdef{blx@bbx@#1}{#2}}
+
+
+
+% {<entry type>}
+\def\blx@driver#1{%
+ \ifcsdef{blx@bbx@#1}
+ {\csuse{blx@bbx@#1}}
+ {\ifcsdef{blx@bbx@*}
+ {\blx@warning{%
+ No driver for '#1'.\MessageBreak
+ Using fallback driver}%
+ \csuse{blx@bbx@*}}
+ {\blx@error
+ {No driver for '#1' found}
+ {I can't find a driver for
+ '#1'\MessageBreak
+ (entry type '\abx@field@@@entrytype')\MessageBreak
+ and there is no fallback driver either}}}}
+
+% {<type>}{<true>}{<false>}
+\def\blx@imc@ifdriver#1{\ifcsdef{blx@bbx@#1}}
+
+% {<alias>}{<type>}
+\newrobustcmd*{\DeclareBibliographyAlias}[2]{%
+ \csedef{blx@bbx@#1}{%
+ \expandafter\noexpand\csname blx@bbx@#2\endcsname}}
+\@onlypreamble\DeclareBibliographyAlias
+
+%% Auxiliary commands
+\newrobustcmd*{\citereset}{%
+ \csuse{blx@hook@cbxinit}%
+ \@ifstar
+ {}
+ {\global\cslet{blx@bsee@\the\c@refsection}\@empty
+ \global\cslet{blx@fsee@\the\c@refsection}\@empty
+ \blx@ibidreset@force
+ \blx@idemreset@force
+ \blx@opcitreset@force
+ \blx@loccitreset@force}}
+
+\def\blx@save#1{%
+ \ifcsdef{blx@saved@#1}
+ {}
+ {\blx@safe@actives
+ \csletcs{blx@saved@#1}{#1}%
+ \blx@rest@actives}}
+
+\def\blx@restore#1{%
+ \ifcsdef{blx@saved@#1}
+ {\blx@safe@actives
+ \csletcs{#1}{blx@saved@#1}%
+ \csundef{blx@saved@#1}%
+ \blx@rest@actives}
+ {}}
+
+\newrobustcmd*{\savecommand}[1]{%
+ \ifcsdef{blx@saved@cmd@\detokenize{#1}}
+ {}
+ {\cslet{blx@saved@cmd@\detokenize{#1}}{#1}}}
+
+\newrobustcmd*{\restorecommand}[1]{%
+ \ifcsdef{blx@saved@cmd@\detokenize{#1}}
+ {\letcs{#1}{blx@saved@cmd@\detokenize{#1}}%
+ \csundef{blx@saved@cmd@\detokenize{#1}}}
+ {}}
+
+% {<name>}
+\newrobustcmd*{\savebibmacro}[1]{%
+ \blx@save{abx@macro@\detokenize{#1}}}
+
+\newrobustcmd*{\restorebibmacro}[1]{%
+ \blx@restore{abx@macro@\detokenize{#1}}}
+
+% {<name>}[<args>][<optarg>]{<definition>}
+\newrobustcmd*{\newbibmacro}{%
+ \@star@or@long\blx@newbibmacro}
+
+\def\blx@newbibmacro#1{%
+ \ifcsundef{abx@macro@\detokenize{#1}}
+ {\blx@defbibmacro\new@command{#1}}
+ {\blx@warning{%
+ Macro '\detokenize{#1}' already defined.\MessageBreak
+ Using \string\renewbibmacro}
+ \blx@defbibmacro\renew@command{#1}}}
+
+\newrobustcmd*{\renewbibmacro}{%
+ \@star@or@long\blx@renewbibmacro}
+
+\def\blx@renewbibmacro#1{%
+ \ifcsundef{abx@macro@\detokenize{#1}}
+ {\blx@warning{%
+ Macro '\detokenize{#1}' undefined.\MessageBreak
+ Using \string\newbibmacro}
+ \blx@defbibmacro\new@command{#1}}
+ {\blx@defbibmacro\renew@command{#1}}}
+
+\newrobustcmd*{\providebibmacro}{%
+ \@star@or@long{\blx@defbibmacro\provide@command}}
+
+\def\blx@defbibmacro#1#2{%
+ \expandafter#1\csname abx@macro@\detokenize{#2}\endcsname}
+
+% {<alias>}{<name>}
+\newrobustcmd*{\letbibmacro}{%
+ \@ifstar
+ {\blx@letbibmacro@i}
+ {\blx@letbibmacro}}
+
+\def\blx@letbibmacro#1#2{%
+ \blx@letbibmacro@i{\detokenize{#1}}{\detokenize{#2}}}
+
+\def\blx@letbibmacro@i#1#2{%
+ \ifcsundef{abx@macro@#2}
+ {\blx@error
+ {Bibliography macro '#2' undefined}
+ {Use '\string\newbibmacro' to define this macro}}
+ {\csletcs{abx@macro@#1}{abx@macro@#2}}}
+
+% {<name>}
+\newrobustcmd*{\usebibmacro}{%
+ \@ifstar
+ {\blx@usebibmacro@i}
+ {\blx@usebibmacro}}
+
+\def\blx@usebibmacro#1{%
+ \blx@usebibmacro@i{\detokenize{#1}}}
+
+\def\blx@usebibmacro@i#1{%
+ \ifcsundef{abx@macro@#1}
+ {\blx@error
+ {Bibliography macro '#1' undefined}
+ {Use '\string\newbibmacro' to define this macro}}
+ {\csuse{abx@macro@#1}}}
+
+% {<name>}{<true>}{<false>}
+\def\blx@imc@ifbibmacroundef#1{%
+ \ifcsundef{abx@macro@#1}}
+
+\def\ifbibmacroundef{\blx@imc@ifbibmacroundef}
+
+% [<msform>][<mslang>]{<field>}
+\DeclareExpandableDocumentCommand{\blx@imc@thefield}
+ {O{\blx@msform} O{\blx@lmslang} m}
+ {\blx@imc@ifmsentryfield{#3}
+ {\csuse{abx@field@#1@#2@#3}}
+ {\csuse{abx@field@@@#3}}}
+
+% [<msform>][<mslang>]{<field>}
+\DeclareExpandableDocumentCommand{\blx@imc@strfield}
+ {O{\blx@msform} O{\blx@lmslang} m}
+ {\blx@imc@ifmsentryfield{#3}
+ {\ifcsdef{abx@field@#1@#2@#3}
+ {\detokenize\expandafter\expandafter\expandafter
+ {\csname abx@field@#1@#2@#3\endcsname}}
+ {}}
+ {\ifcsdef{abx@field@@@#3}
+ {\detokenize\expandafter\expandafter\expandafter
+ {\csname abx@field@@@#3\endcsname}}
+ {}}}
+
+\def\blx@imc@csfield{\usefield{\unexpanded}}
+
+% {<command>}[msform][mslang]{<field>}
+\DeclareExpandableDocumentCommand{\blx@imc@usefield}
+ {m O{\blx@msform} O{\blx@lmslang} m}
+ {\blx@imc@ifmsentryfield{#4}
+ {\expandafter\expandafter\expandafter#1%
+ \expandafter\expandafter\expandafter{\csname abx@field@#2@#3@#4\endcsname}}
+ {\expandafter\expandafter\expandafter#1%
+ \expandafter\expandafter\expandafter{\csname abx@field@@@#4\endcsname}}}
+
+% [msform][mslang]{<plainlist>}
+\DeclareExpandableDocumentCommand{\blx@imc@thelist}
+ {O{\blx@msform} O{\blx@lmslang} m}
+ {\blx@imc@ifmsentryfield{#3}
+ {\csuse{abx@list@#1@#2@#3}}
+ {\csuse{abx@list@@@#3}}}
+
+\DeclareExpandableDocumentCommand{\blx@imc@strlist}
+ {O{\blx@msform} O{\blx@lmslang} m}
+ {\blx@imc@ifmsentryfield{#3}
+ {\ifcsdef{abx@list@#1@#2@#3}
+ {\detokenize\expandafter\expandafter\expandafter
+ {\csname abx@list@#1@#2@#3\endcsname}}
+ {}}
+ {\ifcsdef{abx@list@@@#3}
+ {\detokenize\expandafter\expandafter\expandafter
+ {\csname abx@list@@@#3\endcsname}}
+ {}}}
+
+\DeclareExpandableDocumentCommand{\blx@imc@thefirstlistitem}
+ {O{\blx@msform} O{\blx@lmslang} m}
+ {\blx@imc@ifmsentryfield{#3}
+ {\expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \blx@imc@thefirstlistitem@grab
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ {\csuse{abx@list@#1@#2@#3}}}
+ {\expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \blx@imc@thefirstlistitem@grab
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ {\csuse{abx@list@@@#3}}}}
+
+\def\blx@imc@thefirstlistitem@grab#1{%
+ \blx@imc@thefirstlistitem@grab@i
+ #1{}{}%
+ \blx@imc@thefirstlistitem@grab@i@end}
+\def\blx@imc@thefirstlistitem@grab@i#1#2\blx@imc@thefirstlistitem@grab@i@end{#1}
+
+% {<command>}[msform][mslang]{<field>}
+% needs 7 levels of expansion, i.e. 2^7-1=127 '\expandafter's
+\DeclareExpandableDocumentCommand{\blx@imc@usefirstlistitem}
+ {m O{\blx@msform} O{\blx@lmslang} m}
+ {\blx@imc@ifmsentryfield{#3}
+ {\expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter
+ #1%
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter
+ {\blx@imc@thefirstlistitem[{#2}][{#3}]{#4}}}
+ {\expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter
+ #1%
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter
+ {\blx@imc@thefirstlistitem{#4}}}}
+
+\DeclareExpandableDocumentCommand{\blx@imc@strfirstlistitem}
+ {O{\blx@msform} O{\blx@lmslang} m}
+ {\blx@imc@ifmsentryfield{#3}
+ {\ifcsdef{abx@list@#1@#2@#3}
+ {\blx@imc@usefirstlistitem{\detokenize}[{#1}][{#2}]{#3}}
+ {}}
+ {\ifcsdef{abx@list@@@#3}
+ {\blx@imc@usefirstlistitem{\detokenize}{#3}}
+ {}}}
+
+% [msform][mslang]{<namelist>}
+\DeclareExpandableDocumentCommand{\blx@imc@thename}
+ {O{\blx@msform} O{\blx@lmslang} m}
+ {\blx@imc@ifmsentryfield{#3}
+ {\csuse{abx@name@#1@#2@#3}}
+ {\csuse{abx@name@@@#3}}}
+
+\DeclareExpandableDocumentCommand{\blx@imc@strname}
+ {O{\blx@msform} O{\blx@lmslang} m}
+ {\blx@imc@ifmsentryfield{#3}
+ {\ifcsdef{abx@name@#1@#2@#3}
+ {\detokenize\expandafter\expandafter\expandafter
+ {\csname abx@name@#1@#2@#3\endcsname}}
+ {}}
+ {\ifcsdef{abx@name@@@#3}
+ {\detokenize\expandafter\expandafter\expandafter
+ {\csname abx@name@@@#3\endcsname}}
+ {}}}
+
+% We have to save cleared fields/lists/names in case a related entry
+% needs them for tests
+\let\abx@dorelfields\@empty
+\let\abx@dorellists\@empty
+\let\abx@dorelnames\@empty
+
+% [<msform>][<mslang>]{<field>}
+% If there is a related field in the entry, save a special copy in case
+% the related entry needs it for tests. See the corresponding tests in
+% \blx@saverelfield
+\DeclareDocumentCommand{\blx@imc@clearfield}
+ {O{} O{} m}
+ {\blx@imc@ifmsentryfield{#3}
+ {\ifboolexpr{ test {\ifblank{#1}}
+ and test {\ifblank{#2}} }
+ % clear all alternates of a multiscript field
+ {\blx@imc@iffieldundef{#3}
+ {}
+ {\let\blx@tempi\@empty
+ \begingroup
+ \def\do##1{%
+ \begingroup
+ \def\do####1{%
+ \ifdef\abx@field@@@related
+ {\gappto\blx@tempi{\csletcs{abx@field@##1@####1@relsaved#3}{abx@field@##1@####1@#3}}%
+ \gappto\blx@tempi{\listadd\abx@dorelfields{{{##1}{####1}{#3}}}}}
+ {}%
+ \gappto\blx@tempi{\csundef{abx@field@##1@####1@#3}}}%
+ \dolistcsloop{abx@fieldmslangs@#3}%
+ \endgroup}%
+ \dolistcsloop{abx@fieldmsforms@#3}%
+ \endgroup
+ \blx@tempi\global\undef\blx@tempi}}
+ % clear specific alternate of a multiscript field
+ {\blx@imc@iffieldundef[{#1}][{#2}]{#3}
+ {}
+ {\ifdef\abx@field@@@related
+ {\csletcs{abx@field@#1@#2@relsaved#3}{abx@field@#1@#2@#3}%
+ \listadd\abx@dorelfields{{{#1}{#2}{#3}}}}
+ {}%
+ \csundef{abx@field@#1@#2@#3}}}%
+ \csundef{abx@field@#3}}
+ % clear non multiscript field
+ {\blx@imc@iffieldundef{#3}
+ {}
+ {\ifdef\abx@field@@@related
+ {\csletcs{abx@field@@@relsaved#3}{abx@field@@@#3}%
+ \listadd\abx@dorelfields{{{}{}{#3}}}}
+ {}%
+ \csundef{abx@field@@@#3}%
+ \csundef{abx@field@#3}}}}
+
+% [<msform>][<mslang>]{<plainlist>}
+% If there is a related field in the entry, save a special copy in case
+% the related entry needs it for tests. See the corresponding tests in
+% \blx@saverellist
+\DeclareDocumentCommand{\blx@imc@clearlist}
+ {O{} O{} m}
+ {\blx@imc@ifmsentryfield{#3}
+ {\ifboolexpr{ test {\ifblank{#1}}
+ and test {\ifblank{#2}} }
+ % clear all alternates of a multiscript list
+ {\blx@imc@iflistundef{#3}
+ {}
+ {\let\blx@tempi\@empty
+ \begingroup
+ \def\do##1{%
+ \begingroup
+ \def\do####1{%
+ \ifdef\abx@field@@@related
+ {\gappto\blx@tempi{\csletcs{abx@list@##1@####1@relsaved#3}{abx@list@##1@####1@#3}}%
+ \gappto\blx@tempi{\csletcs{etb@tgl@abx@bool@morerelsaved#3}{etb@tgl@abx@bool@more#3}}%
+ \gappto\blx@tempi{\csletcs{c@relsaved#3}{c@#3}}%
+ \gappto\blx@tempi{\listadd\abx@dorellists{{##1}{####1}{#3}}}}
+ {}%
+ \gappto\blx@tempi{\togglefalse{abx@bool@more#3}}%
+ \gappto\blx@tempi{\csundef{abx@list@##1@####1@#3}}%
+ \gappto\blx@tempi{\csname c@#3\endcsname\z@}}%
+ \dolistcsloop{abx@fieldmslangs@#3}%
+ \endgroup}%
+ \dolistcsloop{abx@fieldmsforms@#3}%
+ \endgroup
+ \blx@tempi\global\undef\blx@tempi}}
+ % clear specific alternate of a multiscript list
+ {\blx@imc@iflistundef[{#1}][{#2}]{#3}
+ {}
+ {\ifdef\abx@field@@@related
+ {\csletcs{abx@list@#1@#2@relsaved#3}{abx@list@#1@#2@#3}%
+ \listadd\abx@dorellists{{#1}{#2}{#3}}}
+ {}%
+ \csundef{abx@list@#1@#2@#3}}}%
+ \csundef{abx@list@#3}}
+ % clear non multiscript list
+ {\blx@imc@iflistundef{#3}
+ {}
+ {\ifdef\abx@field@@@related
+ {\csletcs{abx@list@@@relsaved#3}{abx@list@@@#3}%
+ \csletcs{etb@tgl@abx@bool@morerelsaved#3}{etb@tgl@abx@bool@more#3}%
+ \csletcs{c@relsaved#3}{c@#3}%
+ \listadd\abx@dorellists{{}{}{#3}}}
+ {}%
+ \togglefalse{abx@bool@more#3}%
+ \csundef{abx@list@@@#3}%
+ \csname c@#3\endcsname\z@
+ \csundef{abx@list@#3}}}}
+
+% [<msform>][<mslang>]{<namelist>}
+% If there is a related field in the entry, save a special copy in case
+% the related entry needs it for tests. See the corresponding tests in
+% \blx@saverelname
+\DeclareDocumentCommand{\blx@imc@clearname}
+ {O{} O{} m}
+ {\blx@imc@ifmsentryfield{#3}
+ {\ifboolexpr{ test {\ifblank{#1}}
+ and test {\ifblank{#2}} }
+ % clear all alternates of a multiscript list
+ {\blx@imc@ifnameundef{#3}
+ {}
+ {\let\blx@tempi\@empty
+ \begingroup
+ \def\do##1{%
+ \begingroup
+ \def\do####1{%
+ \ifdef\abx@field@@@related
+ {\gappto\blx@tempi{\csletcs{abx@name@##1@####1@relsaved#3}{abx@name@##1@####1@#3}}%
+ \gappto\blx@tempi{\csletcs{etb@tgl@abx@bool@morerelsaved#3}{etb@tgl@abx@bool@more#3}}%
+ \gappto\blx@tempi{\csletcs{c@relsaved#3}{c@#3}}%
+ \gappto\blx@tempi{\listadd\abx@dorelnames{{##1}{####1}{#3}}}}
+ {}%
+ \gappto\blx@tempi{\togglefalse{abx@bool@more#3}}%
+ \gappto\blx@tempi{\csundef{abx@name@##1@####1@#3}}%
+ \gappto\blx@tempi{\csname c@#3\endcsname\z@}}%
+ \dolistcsloop{abx@fieldmslangs@#3}%
+ \endgroup}%
+ \dolistcsloop{abx@fieldmsforms@#3}%
+ \endgroup
+ \blx@tempi\global\undef\blx@tempi}}
+ % clear specific alternate of a multiscript list
+ {\blx@imc@ifnameundef[{#1}][{#2}]{#3}
+ {}
+ {\ifdef\abx@field@@@related
+ {\csletcs{abx@name@#1@#2@relsaved#3}{abx@name@#1@#2@#3}%
+ \listadd\abx@dorelnames{{#1}{#2}{#3}}}
+ {}%
+ \csundef{abx@name@#1@#2@#3}}}%
+ \csundef{abx@name@#3}}
+ % clear non multiscript list
+ {\blx@imc@ifnameundef{#3}
+ {}
+ {\ifdef\abx@field@@@related
+ {\csletcs{abx@name@@@relsaved#3}{abx@name@@@#3}%
+ \csletcs{etb@tgl@abx@bool@morerelsaved#3}{etb@tgl@abx@bool@more#3}%
+ \csletcs{c@relsaved#3}{c@#3}%
+ \listadd\abx@dorelnames{{}{}{#3}}}
+ {}%
+ \togglefalse{abx@bool@more#3}%
+ \csundef{abx@name@@@#3}%
+ \csname c@#3\endcsname\z@
+ \csundef{abx@name@#3}}}}
+
+% {field|list|name}[<msform>][<mslang>]{<field>}{<macro>}
+\DeclareExpandableDocumentCommand{\blx@savedata}
+ {m O{\blx@msform} O{\blx@lmslang} m m}
+ {\blx@imc@ifmsentryfield{#4}
+ {\letcs#5{abx@#1@#2@#3@#4}}
+ {\letcs#5{abx@#1@@@#4}}}
+
+% {field|list|name}[<msform>][<mslang>]{<field>}{<macro>}
+\DeclareExpandableDocumentCommand{\blx@savedatacs}
+ {m O{\blx@msform} O{\blx@lmslang} m m}
+ {\blx@imc@ifmsentryfield{#4}
+ {\csletcs{#5}{abx@#1@#2@#3@#4}}
+ {\csletcs{#5}{abx@#1@@@#4}}}
+
+% [<msform>][<mslang>]{<field>}{<macro>}
+\DeclareDocumentCommand{\blx@imc@restorefield}
+ {O{\blx@msform} O{\blx@lmslang} m}
+ {\blx@imc@ifmsentryfield{#3}
+ {\cslet{abx@field@#1@#2@#3}}
+ {\cslet{abx@field@@@#3}}}
+
+% [<msform>][<mslang>]{<plainlist>}{<macro>}
+\DeclareDocumentCommand{\blx@imc@restorelist}
+ {O{\blx@msform} O{\blx@lmslang} m}
+ {\blx@imc@ifmsentryfield{#3}
+ {\cslet{abx@list@#1@#2@#3}}
+ {\cslet{abx@list@@@#3}}}
+
+% [<msform>][<mslang>]{<namelist>}{<macro>}
+\DeclareDocumentCommand{\blx@imc@restorename}
+ {O{\blx@msform} O{\blx@lmslang} m}
+ {\blx@imc@ifmsentryfield{#3}
+ {\cslet{abx@name@#1@#2@#3}}
+ {\cslet{abx@name@@@#3}}}
+
+% [<msform>][<mslang>]{<field>}{<macro>}
+\protected\def\blx@imc@savefield{%
+ \@ifstar{\blx@savedata{field}}{\global\blx@savedata{field}}}
+
+% {<plainlist>}{<macro>}
+\protected\def\blx@imc@savelist{%
+ \@ifstar{\blx@savedata{list}}{\global\blx@savedata{list}}}
+
+% {<namelist>}{<macro>}
+\protected\def\blx@imc@savename{%
+ \@ifstar{\blx@savedata{name}}{\global\blx@savedata{name}}}
+
+% {<field>}{<csname>}
+\protected\def\blx@imc@savefieldcs{%
+ \@ifstar{\blx@savedatacs{field}}{\global\blx@savedatacs{field}}}
+
+% {<plainlist>}{<csname>}
+\protected\def\blx@imc@savelistcs{%
+ \@ifstar{\blx@savedatacs{list}}{\global\blx@savedatacs{list}}}
+
+% {<namelist>}{<csname>}
+\protected\def\blx@imc@savenamecs{%
+ \@ifstar{\blx@savedatacs{name}}{\global\blx@savedatacs{name}}}
+
+% {<entryfield>}
+\def\blx@imc@ifentryfieldundef#1{%
+ \ifcsundef{abx@entryfield@#1}}
+
+% {field|list|name}[<msform>][<mslang>]{<entryfield>}{<true>}{<false>}
+\DeclareExpandableDocumentCommand{\blx@ifmsundef}
+ {m O{} O{} m}
+ {\blx@imc@ifmsentryfield{#4}
+ {\ifstrempty{#2}
+ {\ifstrempty{#3}
+ {\ifcsundef{abx@#1@#4}}
+ {\ifcsundef{abx@#1@\blx@msform @#3@#4}}}
+ {\ifstrempty{#3}
+ {\ifcsundef{abx@#1@#2@\blx@mslang @#4}}
+ {\ifcsundef{abx@#1@#2@#3@#4}}}}
+ {\ifcsundef{abx@#1@@@#4}}}% ignore form/lang for non-multiscript
+
+% [<msform>][<mslang>]{<field>}{<true>}{<false>}
+\def\blx@imc@iffieldundef{%
+ \blx@ifmsundef{field}}
+
+% [<msform>][<mslang>]{<plainlist>}{<true>}{<false>}
+\def\blx@imc@iflistundef{%
+ \blx@ifmsundef{list}}
+
+% [<msform>][<mslang>]{<namelist>}{<true>}{<false>}
+\def\blx@imc@ifnameundef{%
+ \blx@ifmsundef{name}}
+
+% [<msform>][<mslang>]{<field1>}[<msform>][<mslang>]{<field2>}{<true>}{<false>}
+\DeclareExpandableDocumentCommand{\blx@imc@iffieldsequal}
+ {O{\blx@msform} O{\blx@lmslang} m O{\blx@msform} O{\blx@lmslang} m}
+ {\blx@imc@ifmsentryfield{#3}
+ {\def\blx@tempa{abx@field@#1@#2@#3}}
+ {\def\blx@tempa{abx@field@@@#3}}%
+ \blx@imc@ifmsentryfield{#6}
+ {\def\blx@tempb{abx@field@#4@#5@#6}}
+ {\def\blx@tempb{abx@field@@@#6}}%
+ \ifcsequal{\blx@tempa}{\blx@tempb}}
+
+% [<msform>][<mslang>]{<plainlist1>}[<msform>][<mslang>]{<plainlist2>}{<true>}{<false>}
+\DeclareExpandableDocumentCommand{\blx@imc@iflistsequal}
+ {O{\blx@msform} O{\blx@lmslang} m O{\blx@msform} O{\blx@lmslang} m}
+ {\blx@imc@ifmsentryfield{#3}
+ {\def\blx@tempa{abx@list@#1@#2@#3}}
+ {\def\blx@tempa{abx@list@@@#3}}%
+ \blx@imc@ifmsentryfield{#6}
+ {\def\blx@tempb{abx@list@#4@#5@#6}}
+ {\def\blx@tempb{abx@list@@@#6}}%
+ \ifcsequal\blx@tempa\blx@tempb}
+
+% This works by extracting a list of all of the name list hashes "{hash1}{hash2}..."
+% from the individual names and comparing these lists of hashes
+% [<msform>][<mslang>]{<namelist1>}[<msform>][<mslang>]{<namelist2>}{<true>}{<false>}
+\DeclareExpandableDocumentCommand{\blx@imc@ifnamesequal}
+ {O{\blx@msform} O{\blx@lmslang} m O{\blx@msform} O{\blx@lmslang} m}
+ {\blx@imc@ifmsentryfield{#3}
+ {\def\blx@tempa{abx@name@#1@#2@#3}}
+ {\def\blx@tempa{abx@name@@@#3}}%
+ \blx@imc@ifmsentryfield{#6}
+ {\def\blx@tempb{abx@name@#4@#5@#6}}
+ {\def\blx@tempb{abx@name@@@#6}}%
+ \ifcsundef\blx@tempa
+ {\@secondoftwo}
+ {\ifcsundef\blx@tempb
+ {\@secondoftwo}
+ {\blx@ifnamesequal\blx@tempa\blx@tempb}}}
+
+\def\blx@ifnamesequal#1#2{%
+ \begingroup
+ \let\blx@tempc\@empty
+ \expandafter\expandafter
+ \expandafter\blx@ifnamesequal@i\csname #2\endcsname
+ \let\blx@tempd\blx@tempc
+ \let\blx@tempc\@empty
+ \expandafter\expandafter
+ \expandafter\blx@ifnamesequal@i\csname #1\endcsname
+ \expandafter\endgroup
+ \ifx\blx@tempc\blx@tempd
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi}
+
+\def\blx@ifnamesequal@i#1#2{%
+ \expandafter\blx@ifnamesequal@ii#2{}&}
+
+\def\blx@ifnamesequal@ii#1{%
+ \ifblank{#1}
+ {\blx@namebreak}
+ {\blx@ifnamesequal@iii#1%
+ \blx@ifnamesequal@ii}}
+
+% These explicit nameparts are alright as they are for bibtex only
+% biber names will always have a hash generated from all nameparts in datamodel
+\def\blx@ifnamesequal@iii#1#2{%
+ \blx@kv@setkeys{blx@opt@name}{#1}%
+ \blx@kv@setkeys{blx@opt@namepart}{#2}%
+ \ifdef\abx@field@@@hash
+ {\eappto\blx@tempc{{\abx@field@@@hash}}}
+ {\eappto\blx@tempc{{{\namepartfamily}{\namepartgiven}{\namepartprefix}{\namepartsuffix}}}}}
+
+% [<msform>][<mslang>]{<field>}{<macro>}{<true>}{<false>}
+\DeclareExpandableDocumentCommand{\blx@imc@iffieldequals}
+ {O{\blx@msform} O{\blx@lmslang} m m}
+ {\blx@imc@iffieldundef[{#1}][{#2}]{#3}
+ {\@secondoftwo}
+ {\blx@imc@ifmsentryfield{#3}
+ {\edef\blx@tempa{\csuse{abx@field@#1@#2@#3}}}
+ {\edef\blx@tempa{\csuse{abx@field@@@#3}}}%
+ \ifundef#4%
+ {\@secondoftwo}
+ {\ifx\blx@tempa#4%
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi}}}
+
+% [<msform>][<mslang>]{<plainlist>}{<macro>}{<true>}{<false>}
+\DeclareExpandableDocumentCommand{\blx@imc@iflistequals}
+ {O{\blx@msform} O{\blx@lmslang} m m}
+ {\blx@imc@iflistundef[{#1}][{#2}]{#3}
+ {\@secondoftwo}
+ {\blx@imc@ifmsentryfield{#3}
+ {\edef\blx@tempa{\csuse{abx@list@#1@#2@#3}}}
+ {\edef\blx@tempa{\csuse{abx@list@@@#3}}}%
+ \ifundef#4%
+ {\@secondoftwo}
+ {\ifx\blx@tempa#4%
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi}}}
+
+% This works in much the same way as \blx@imc@ifnamesequal and shares some macros with it
+% [<msform>][<mslang>]{<namelist>}{<macro>}{<true>}{<false>}
+\DeclareExpandableDocumentCommand{\blx@imc@ifnameequals}
+ {O{\blx@msform} O{\blx@lmslang} m m}
+ {\blx@imc@ifnameundef[{#1}][{#2}]{#3}
+ {\@secondoftwo}
+ {\blx@imc@ifmsentryfield{#3}
+ {\def\blx@tempa{abx@name@#1@#2@#3}}
+ {\def\blx@tempa{abx@name@@@#3}}%
+ \ifundef#4%
+ {\@secondoftwo}
+ {\blx@ifnameequals\blx@tempa#4}}}
+
+\def\blx@ifnameequals#1#2{%
+ \begingroup
+ \let\blx@tempc\@empty
+ \expandafter\blx@ifnamesequal@i#2
+ \let\blx@tempd\blx@tempc
+ \let\blx@tempc\@empty
+ \expandafter\expandafter
+ \expandafter\blx@ifnamesequal@i\csname #1\endcsname
+ \expandafter\endgroup
+ \ifx\blx@tempc\blx@tempd
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi}
+
+% [<msform>][<mslang>]{<field>}{<csname>}{<true>}{<false>}
+\DeclareExpandableDocumentCommand{\blx@imc@iffieldequalcs}
+ {O{\blx@msform} O{\blx@lmslang} m m}
+ {\blx@imc@ifmsentryfield{#3}
+ {\ifcsequal{abx@field@#1@#2@#3}{#4}}
+ {\ifcsequal{abx@field@@@#3}{#4}}}
+
+% [<msform>][<mslang>]{<plainlist>}{<csname>}{<true>}{<false>}
+\DeclareExpandableDocumentCommand{\blx@imc@iflistequalcs}
+ {O{\blx@msform} O{\blx@lmslang} m}
+ {\blx@imc@ifmsentryfield{#3}
+ {\ifcsequal{abx@list@#1@#2@#3}}
+ {\ifcsequal{abx@list@@@#3}}}
+
+% [<msform>][<mslang>]{<namelist>}{<csname>}{<true>}{<false>}
+\DeclareExpandableDocumentCommand{\blx@imc@ifnameequalcs}
+ {O{\blx@msform} O{\blx@lmslang} m m}
+ {\blx@imc@ifnameundef[{#1}][{#2}]{#3}
+ {\@secondoftwo}
+ {\blx@imc@ifmsentryfield{#3}
+ {\def\blx@tempa{abx@name@#1@#2@#3}}
+ {\def\blx@tempa{abx@name@@@#3}}%
+ \ifcsundef{#4}%
+ {\@secondoftwo}
+ {\blx@ifnameequalcs\blx@tempa{#4}}}}
+
+\def\blx@ifnameequalcs#1#2{%
+ \begingroup
+ \let\blx@tempc\@empty
+ \expandafter\expandafter\expandafter\blx@ifnamesequal@i\csname #2\endcsname
+ \let\blx@tempd\blx@tempc
+ \let\blx@tempc\@empty
+ \expandafter\expandafter
+ \expandafter\blx@ifnamesequal@i\csname #1\endcsname
+ \expandafter\endgroup
+ \ifx\blx@tempc\blx@tempd
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi}
+
+% [<msform>][<mslang>]{<field>}{<string>}{<true>}{<false>}
+\DeclareDocumentCommand{\blx@imc@iffieldequalstr}
+ {O{\blx@msform} O{\blx@lmslang} m m}
+ {\blx@imc@iffieldundef[{#1}][{#2}]{#3}
+ {\@secondoftwo}
+ {\blx@imc@ifmsentryfield{#3}
+ {\def\blx@tempa{abx@field@#1@#2@#3}}
+ {\def\blx@tempa{abx@field@@@#3}}%
+ \expandafter\expandafter\expandafter\ifstrequal
+ \expandafter\expandafter\expandafter{%
+ \csname\blx@tempa\endcsname}{#4}}}
+
+% [<msform>][<mslang>]{<field>}{<true>}{<false>}
+\DeclareExpandableDocumentCommand{\blx@imc@iffieldxref}
+ {O{\blx@msform} O{\blx@lmslang} m}
+ {\blx@imc@iffieldundef[{#1}][{#2}]{#3}
+ {\@secondoftwo}
+ {\blx@whichxref
+ {\blx@iffieldxref{#1}{#2}{#3}}
+ {\@secondoftwo}}}
+
+% {<msform>}{<mslang>}{field}{xref|crossref}
+\def\blx@iffieldxref#1#2#3#4{%
+ \begingroup
+ \blx@imc@ifmsentryfield{#3}
+ {\letcs\blx@tempb{abx@field@#1@#2@#3}}
+ {\letcs\blx@tempb{abx@field@@@#3}}%
+ \letcs\blx@tempa{abx@field@@@#4}% xref|crossref - non multi
+ \blx@resetdata
+ \blx@getdata{\blx@tempa}%
+ \blx@imc@iffieldequals[{#1}][{#2}]{#3}\blx@tempb
+ {\aftergroup\@firstoftwo}
+ {\aftergroup\@secondoftwo}%
+ \endgroup}
+
+\def\blx@whichxref#1#2{%
+ \blx@imc@iffieldundef{crossref}
+ {\blx@imc@iffieldundef{xref}
+ {#2}
+ {#1{xref}}}
+ {#1{crossref}}}
+
+% [<msform>][<mslang>]{<plainlist>}{<true>}{<false>}
+\DeclareDocumentCommand{\blx@imc@iflistxref}
+ {O{\blx@msform} O{\blx@lmslang} m}
+ {\blx@imc@iflistundef[{#1}][{#2}]{#3}
+ {\@secondoftwo}
+ {\blx@whichxref
+ {\blx@iflistxref{#1}{#2}{#3}}
+ {\@secondoftwo}}}
+
+% {<msform>}{<mslang>}{field}{xref|crossref}
+\def\blx@iflistxref#1#2#3#4{%
+ \begingroup
+ \blx@imc@ifmsentryfield{#3}
+ {\letcs\blx@tempb{abx@list@#1@#2@#3}}
+ {\letcs\blx@tempb{abx@list@@@#3}}%
+ \letcs\blx@tempa{abx@field@@@#4}% xref|crossref - non multi
+ \blx@resetdata
+ \blx@getdata{\blx@tempa}%
+ \blx@imc@iflistequals[{#1}][{#2}]{#3}\blx@tempb
+ {\aftergroup\@firstoftwo}
+ {\aftergroup\@secondoftwo}%
+ \endgroup}
+
+% [<msform>][<mslang>]{<namelist>}{<true>}{<false>}
+\DeclareDocumentCommand{\blx@imc@ifnamexref}
+ {O{\blx@msform} O{\blx@lmslang} m}
+ {\blx@imc@ifnameundef[{#1}][{#2}]{#3}
+ {\@secondoftwo}
+ {\blx@whichxref
+ {\blx@ifnamexref{#1}{#2}{#3}}
+ {\@secondoftwo}}}
+
+% {<msform>}{<mslang>}{field}{xref|crossref}
+\def\blx@ifnamexref#1#2#3#4{%
+ \begingroup
+ \blx@imc@ifmsentryfield{#3}
+ {\letcs\blx@tempb{abx@name@#1@#2@#3}}
+ {\letcs\blx@tempb{abx@name@@@#3}}%
+ \letcs\blx@tempa{abx@field@@@#4}% xref|crossref - non multi
+ \blx@resetdata
+ \blx@getdata{\blx@tempa}%
+ \blx@imc@ifnameequals[{#1}][{#2}]{#3}\blx@tempb
+ {\aftergroup\@firstoftwo}
+ {\aftergroup\@secondoftwo}%
+ \endgroup}
+
+% {<string>}{<true>}{<false>}
+\protected\def\blx@imc@ifcurrentfield#1{%
+ \begingroup
+ \def\blx@tempa{#1}%
+ \ifx\currentfield\blx@tempa
+ \aftergroup\@firstoftwo
+ \else
+ \aftergroup\@secondoftwo
+ \fi
+ \endgroup}
+
+% {<string>}{<true>}{<false>}
+\protected\def\blx@imc@ifcurrentlist#1{%
+ \begingroup
+ \def\blx@tempa{#1}%
+ \ifx\currentlist\blx@tempa
+ \aftergroup\@firstoftwo
+ \else
+ \aftergroup\@secondoftwo
+ \fi
+ \endgroup}
+
+% {<string>}{<true>}{<false>}
+\protected\def\blx@imc@ifcurrentname#1{%
+ \begingroup
+ \def\blx@tempa{#1}%
+ \ifx\currentname\blx@tempa
+ \aftergroup\@firstoftwo
+ \else
+ \aftergroup\@secondoftwo
+ \fi
+ \endgroup}
+
+% {<string>}{<true>}{<false>}
+\protected\def\blx@imc@ifentrytype#1{%
+ \begingroup
+ \def\blx@tempa{#1}%
+ \ifx\abx@field@@@entrytype\blx@tempa
+ \aftergroup\@firstoftwo
+ \else
+ \aftergroup\@secondoftwo
+ \fi
+ \endgroup}
+
+% {<true>}{<false>}
+\def\blx@imc@ifmorenames{%
+ \ifundef\currentname
+ {\@secondoftwo}
+ {\iftoggle{abx@bool@more\currentname}
+ {\@firstoftwo}
+ {\ifnum\c@listtotal>\c@liststop
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi}}}
+
+% {<true>}{<false>}
+\def\blx@imc@ifmoreitems{%
+ \ifundef\currentlist
+ {\@secondoftwo}
+ {\iftoggle{abx@bool@more\currentlist}
+ {\@firstoftwo}
+ {\ifnum\c@listtotal>\c@liststop
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi}}}
+
+
+% {<true>}{<false>}
+%\def\blx@imc@iffirstcitekey{%
+% \ifboolexpr{ ( test {\ifnumequal\c@multicitetotal\z@}
+% and test {\ifnumequal\c@citecount\@ne} )
+% or ( test {\ifnumgreater\c@multicitetotal\z@}
+% and test {\ifnumequal\c@multicitecount\@ne}
+% and test {\ifnumequal\c@citecount\@ne} ) }}
+\def\blx@imc@iffirstcitekey{%
+ \ifnumequal\c@citecount\@ne
+ {\ifnumequal\c@multicitetotal\z@
+ {\@firstoftwo}
+ {\ifnumequal\c@multicitecount\@ne}}
+ {\@secondoftwo}}
+
+\def\blx@imc@iflastcitekey{%
+ \ifnumequal\c@citecount\c@citetotal
+ {\ifnumequal\c@multicitecount\c@multicitetotal}
+ {\@secondoftwo}}
+
+% {<category>}{<true>}{<false>}
+\protected\def\blx@imc@ifcategory{%
+ \ifdef\abx@field@@@entrykey
+ {\blx@imc@ifentrycategory\abx@field@@@entrykey}
+ {\expandafter\@secondoftwo\@gobble}}
+
+% {<entrykey>}{<category>}{<true>}{<false>}
+\protected\def\blx@imc@ifentrycategory{%
+ \blx@xsanitizeafter\blx@imc@ifentrycategory@i}
+
+\def\blx@imc@ifentrycategory@i#1#2{%
+ \ifcsdef{blx@catg@\detokenize{#2}}
+ {\ifinlistcs{#1}{blx@catg@\detokenize{#2}}}
+ {\@secondoftwo}}
+
+% {<keyword>}{<true>}{<false>}
+\protected\def\blx@imc@ifkeyword{%
+ \ifdef\abx@field@@@entrykey
+ {\blx@imc@ifentrykeyword\abx@field@@@entrykey}
+ {\expandafter\@secondoftwo\@gobble}}
+
+% {<entrykey>}{<keyword>}{<true>}{<false>}
+\protected\def\blx@imc@ifentrykeyword{%
+ \blx@xsanitizeafter\blx@imc@ifentrykeyword@i}
+
+\def\blx@imc@ifentrykeyword@i#1#2{%
+ \ifcsdef{blx@keyw@\the\c@refsection @\detokenize{#2}}
+ {\ifinlistcs{#1}{blx@keyw@\the\c@refsection @\detokenize{#2}}}
+ {\@secondoftwo}}
+
+% {<true>}{<false>}
+\protected\def\blx@ifciteseen@global{%
+ \ifbool{citetracker}
+ {\ifdef\abx@field@@@entrykey
+ {\expandafter\blx@ifseen@global
+ \expandafter{\abx@field@@@entrykey}}
+ {\@secondoftwo}}
+ {\@secondoftwo}}
+
+\protected\def\blx@ifciteseen@context{%
+ \ifbool{citetracker}
+ {\ifdef\abx@field@@@entrykey
+ {\expandafter\blx@ifseen@context
+ \expandafter{\abx@field@@@entrykey}}
+ {\@secondoftwo}}
+ {\@secondoftwo}}
+
+\protected\def\blx@ifciteseen@context{%
+ \ifbool{citetracker}
+ {\ifdef\abx@field@@@entrykey
+ {\expandafter\blx@ifseen@context
+ \expandafter{\abx@field@@@entrykey}}
+ {\@secondoftwo}}
+ {\@secondoftwo}}
+
+% {<entrykey>}{<true>}{<false>}
+\protected\def\blx@ifentryseen@global{%
+ \blx@xsanitizeafter\blx@ifseen@global}
+
+\protected\def\blx@ifentryseen@context{%
+ \blx@xsanitizeafter\blx@ifseen@context}
+
+\def\blx@ifseen@global#1{%
+ \ifbool{citetracker}
+ {\ifinlistcs{#1}{blx@bsee@\the\c@refsection}}
+ {\@secondoftwo}}
+
+\def\blx@ifseen@context#1{%
+ \ifbool{citetracker}
+ {\iftoggle{blx@footnote}
+ {\ifinlistcs{#1}{blx@fsee@\the\c@refsection}}
+ {\ifinlistcs{#1}{blx@bsee@\the\c@refsection}}}
+ {\@secondoftwo}}
+
+% {<true>}{<false>}
+\def\blx@ifciteibid@global{%
+ \ifbool{citetracker}
+ {\blx@imc@iffieldequals{entrykey}\blx@lastkey@text}
+ {\@secondoftwo}}
+
+\def\blx@ifciteibid@context{%
+ \ifbool{citetracker}
+ {\iftoggle{blx@footnote}
+ {\blx@imc@iffieldequals{entrykey}\blx@lastkey@foot}
+ {\blx@imc@iffieldequals{entrykey}\blx@lastkey@text}}
+ {\@secondoftwo}}
+
+\def\blx@ifciteibid@strict{%
+ \ifbool{citetracker}
+ {\blx@ifcitesingle
+ {\blx@ifciteibid@global}
+ {\@secondoftwo}}
+ {\@secondoftwo}}
+
+\def\blx@ifciteibid@constrict{%
+ \ifbool{citetracker}
+ {\blx@ifcitesingle
+ {\iftoggle{blx@footnote}
+ {\blx@ifmpfncheck
+ {\blx@imc@iffieldequals{entrykey}\blx@lastkey@foot}
+ {\@secondoftwo}}
+ {\blx@imc@iffieldequals{entrykey}\blx@lastkey@text}}
+ {\@secondoftwo}}
+ {\@secondoftwo}}
+
+% {<true>}{<false>}
+\def\blx@ifciteidem@global{%
+ \ifbool{citetracker}
+ {\blx@imc@iffieldequals{fullhash}\blx@lasthash@text}
+ {\@secondoftwo}}
+
+\def\blx@ifciteidem@context{%
+ \ifbool{citetracker}
+ {\iftoggle{blx@footnote}
+ {\blx@imc@iffieldequals{fullhash}\blx@lasthash@foot}
+ {\blx@imc@iffieldequals{fullhash}\blx@lasthash@text}}
+ {\@secondoftwo}}
+
+\let\blx@ifciteidem@strict\blx@ifciteidem@global
+
+\def\blx@ifciteidem@constrict{%
+ \ifbool{citetracker}
+ {\iftoggle{blx@footnote}
+ {\blx@ifmpfncheck
+ {\blx@imc@iffieldequals{fullhash}\blx@lasthash@foot}
+ {\@secondoftwo}}
+ {\blx@imc@iffieldequals{fullhash}\blx@lasthash@text}}
+ {\@secondoftwo}}
+
+% {<true>}{<false>}
+\def\blx@ifopcit@global{%
+ \ifbool{citetracker}
+ {\blx@imc@iffieldundef{namehash}
+ {\@secondoftwo}
+ {\blx@imc@iffieldequalcs{entrykey}{blx@lastkey@text@\abx@field@@@namehash}}}
+ {\@secondoftwo}}
+
+\def\blx@ifopcit@context{%
+ \ifbool{citetracker}
+ {\blx@imc@iffieldundef{namehash}
+ {\@secondoftwo}
+ {\iftoggle{blx@footnote}
+ {\blx@imc@iffieldequalcs{entrykey}{blx@lastkey@foot@\abx@field@@@namehash}}
+ {\blx@imc@iffieldequalcs{entrykey}{blx@lastkey@text@\abx@field@@@namehash}}}}
+ {\@secondoftwo}}
+
+\def\blx@ifopcit@strict{%
+ \ifbool{citetracker}
+ {\blx@ifcitesingle
+ {\blx@ifopcit@global}
+ {\@secondoftwo}}
+ {\@secondoftwo}}
+
+\def\blx@ifopcit@constrict{%
+ \ifbool{citetracker}
+ {\blx@ifcitesingle
+ {\blx@imc@iffieldundef{namehash}
+ {\@secondoftwo}
+ {\iftoggle{blx@footnote}
+ {\blx@ifmpfncheck
+ {\blx@imc@iffieldequalcs{entrykey}{blx@lastkey@foot@\abx@field@@@namehash}}
+ {\@secondoftwo}}
+ {\blx@imc@iffieldequalcs{entrykey}{blx@lastkey@text@\abx@field@@@namehash}}}}
+ {\@secondoftwo}}
+ {\@secondoftwo}}
+
+% {<true>}{<false>}
+\def\blx@ifloccit@global{%
+ \ifbool{citetracker}
+ {\blx@loccit@check{text}}
+ {\@secondoftwo}}
+
+\def\blx@ifloccit@context{%
+ \ifbool{citetracker}
+ {\iftoggle{blx@footnote}
+ {\blx@loccit@check{foot}}
+ {\blx@loccit@check{text}}}
+ {\@secondoftwo}}
+
+\def\blx@ifloccit@strict{%
+ \ifbool{citetracker}
+ {\blx@ifcitesingle
+ {\blx@loccit@numcheck{text}}
+ {\@secondoftwo}}
+ {\@secondoftwo}}
+
+\def\blx@ifloccit@constrict{%
+ \ifbool{citetracker}
+ {\blx@ifcitesingle
+ {\iftoggle{blx@footnote}
+ {\blx@ifmpfncheck
+ {\blx@loccit@numcheck{foot}}
+ {\@secondoftwo}}
+ {\blx@loccit@numcheck{text}}}
+ {\@secondoftwo}}
+ {\@secondoftwo}}
+
+\def\blx@loccit@check#1{%
+ \blx@imc@iffieldundef{postnote}
+ {\@secondoftwo}
+ {\blx@imc@iffieldequalcs{postnote}{blx@lastnote@#1@\abx@field@@@entrykey}}}
+
+\def\blx@loccit@numcheck#1{%
+ \blx@imc@iffieldundef{postnote}
+ {\@secondoftwo}
+ {\expandafter\blx@imc@ifpages
+ \expandafter{\abx@field@@@postnote}
+ {\blx@imc@iffieldequalcs{postnote}{blx@lastnote@#1@\abx@field@@@entrykey}}
+ {\@secondoftwo}}}
+
+% {<true>}{<false>}
+\def\blx@ifmpfncheck{%
+ \ifnum\numexpr\value\@mpfn-\blx@lastmpfn<\tw@
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi}
+
+\def\blx@mpfnsave{%
+ \xdef\blx@lastmpfn{\the\value\@mpfn}}
+
+\def\blx@mpfnreset{%
+ \global\let\blx@lastmpfn\z@}
+
+\blx@mpfnreset
+
+% {<true>}{<false>}
+\def\blx@imc@iffirstonpage{%
+ \ifbool{pagetracker}
+ {\iftoggle{blx@footnote}
+ {\blx@iffirstonpage{fnpage}}
+ {\blx@iffirstonpage{page}}}
+ {\@secondoftwo}}
+
+\def\blx@iffirstonpage#1{%
+ \ifcsundef{blx@#1@\number\c@instcount}
+ {\@secondoftwo}
+ {\expandafter\blx@iffirstonpage@i
+ \expandafter{\number\numexpr\c@instcount-1}{#1}}}
+
+\def\blx@iffirstonpage@i#1#2{%
+ \ifcsundef{blx@#2@#1}
+ {\ifnum#1>\@ne
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi
+ {\expandafter\blx@iffirstonpage@i
+ \expandafter{\number\numexpr#1-1}{#2}}
+ {\@firstoftwo}}
+ {\ifnum\csuse{blx@#2@\number\c@instcount}=%
+ \csuse{blx@#2@#1} %
+ \expandafter\@secondoftwo
+ \else
+ \expandafter\@firstoftwo
+ \fi}}
+
+% {<count1>}{<count2>}{<true>}{<false>}
+\def\blx@imc@ifsamepage#1#2{%
+ \ifbool{pagetracker}
+ {\ifcsundef{blx@page@\number\numexpr#1}
+ {\ifcsundef{blx@fnpage@\number\numexpr#1}
+ {\@secondoftwo}
+ {\blx@ifsamepage{#1}{#2}{fnpage}}}
+ {\blx@ifsamepage{#1}{#2}{page}}}
+ {\@secondoftwo}}
+
+\def\blx@ifsamepage#1#2#3{%
+ \ifcsundef{blx@page@\number\numexpr#2}
+ {\ifcsundef{blx@fnpage@\number\numexpr#2}
+ {\@secondoftwo}
+ {\blx@ifsamepage@i{#1}{#2}{#3}{fnpage}}}
+ {\blx@ifsamepage@i{#1}{#2}{#3}{page}}}
+
+\def\blx@ifsamepage@i#1#2#3#4{%
+ \ifnum\csuse{blx@#3@\number\numexpr#1}=%
+ \csuse{blx@#4@\number\numexpr#2} %
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi}
+
+% {<string>}{<true>}{<false>}
+\protected\long\def\blx@imc@ifinteger#1{%
+ \begingroup
+ \def\do##1{\uccode`##1=`\%}%
+ \do\0\do\1\do\2\do\3\do\4\do\5\do\6\do\7\do\8\do\9%
+ \catcode`\@=11
+ \catcode`\%=9
+ \endlinechar\m@ne
+ \uppercase{\scantokens{\def\blx@tempa{#1}}}%
+ \ifx\blx@tempa\@empty
+ \aftergroup\@firstoftwo
+ \else
+ \aftergroup\@secondoftwo
+ \fi
+ \endgroup}
+
+% {\<non-ASCII numeral>}{\<ASCII number>}
+\protected\def\blx@defcomputableequivalent#1#2{%
+ \appto\blx@dononasciicomputablenumerals{\do#1}%
+ \appto\blx@initcomputableequivs{\uccode`#1=`#2}}
+
+% {<string>}{<true>}{<false>}
+\protected\long\def\blx@imc@hascomputableequivalent#1{%
+ \begingroup
+ \def\do##1{\uccode`##1=`\%}%
+ \blx@dononasciicomputablenumerals
+ \catcode`\@=11
+ \catcode`\%=9
+ \endlinechar\m@ne
+ \uppercase{\scantokens{\def\blx@tempa{#1}}}%
+ \ifx\blx@tempa\@empty
+ \aftergroup\@firstoftwo
+ \else
+ \aftergroup\@secondoftwo
+ \fi
+ \endgroup}
+
+% {<string>}{<true>}{<false>}
+\protected\long\def\blx@imc@ifiscomputable#1{%
+ \blx@imc@ifinteger{#1}
+ {\@firstofone}
+ {\blx@imc@hascomputableequivalent{#1}}}
+
+% {<string>}{<macro>}
+\protected\long\def\blx@imc@getcomputableequivalent#1#2{%
+ \blx@imc@hascomputableequivalent{#1}
+ {\begingroup
+ \blx@initcomputableequivs
+ \uppercase{\def\blx@tempa{#1}}%
+ \edef\blx@tempb{\endgroup
+ \noexpand\def\noexpand#2{\expandonce{\blx@tempa}}}%
+ \blx@tempb}
+ {\def#2{#1}}}
+
+% [<msform>][<mslang>]{<field>}{<true>}{<false>}
+\DeclareDocumentCommand{\blx@imc@iffieldint}
+ {O{\blx@msform} O{\blx@lmslang} m}
+ {\blx@imc@iffieldundef[{#1}][{#2}]{#3}
+ {\@secondoftwo}
+ {\blx@imc@ifmsentryfield{#3}
+ {\def\blx@tempa{abx@field@#1@#2@#3}}
+ {\def\blx@tempa{abx@field@@@#3}}%
+ \expandafter\expandafter
+ \expandafter\blx@imc@ifinteger
+ \expandafter\expandafter
+ \expandafter{\csname\blx@tempa\endcsname}}}
+
+% [<msform>][<mslang>]{<field>}{<true>}{<false>}
+\DeclareDocumentCommand{\blx@imc@fieldhascomputableequivalent}
+ {O{\blx@msform} O{\blx@lmslang} m}
+ {\blx@imc@iffieldundef[{#1}][{#2}]{#3}
+ {\@secondoftwo}
+ {\blx@imc@ifmsentryfield{#3}
+ {\def\blx@tempa{abx@field@#1@#2@#3}}
+ {\def\blx@tempa{abx@field@@@#3}}%
+ \expandafter\expandafter
+ \expandafter\blx@imc@hascomputableequivalent
+ \expandafter\expandafter
+ \expandafter{\csname\blx@tempa\endcsname}}}
+
+% [<msform>][<mslang>]{<field>}{<true>}{<false>}
+\DeclareDocumentCommand{\blx@imc@iffieldiscomputable}
+ {O{\blx@msform} O{\blx@lmslang} m}
+ {\blx@imc@iffieldundef[{#1}][{#2}]{#3}
+ {\@secondoftwo}
+ {\blx@imc@ifmsentryfield{#3}
+ {\def\blx@tempa{abx@field@#1@#2@#3}}
+ {\def\blx@tempa{abx@field@@@#3}}%
+ \expandafter\expandafter
+ \expandafter\blx@imc@ifiscomputable
+ \expandafter\expandafter
+ \expandafter{\csname\blx@tempa\endcsname}}}
+
+% {<string>}{<true>}{<false>}
+\protected\def\blx@imc@ifnumeral{%
+ \blx@ifnum\blx@hook@ifnum}
+
+\protected\def\blx@imc@ifnumerals{%
+ \blx@ifnum\blx@hook@ifnums}
+
+\protected\def\blx@imc@ifpages{%
+ \blx@ifnum\blx@hook@ifpages}
+
+\long\def\blx@ifnum#1#2{%
+ \begingroup
+ \let\protect\@unexpandable@protect
+ \uppercase{\edef\blx@tempa{#2}}%
+ \ifx\blx@tempa\@empty
+ \aftergroup\@secondoftwo
+ \else
+ \catcode`\@=11
+ \catcode`\%=9
+ \endlinechar\m@ne
+ \everyeof{\noexpand}#1%
+ \uppercase{\edef\blx@tempa{\scantokens{#2}}}%
+ \ifx\blx@tempa\@empty
+ \aftergroup\@firstoftwo
+ \else
+ \aftergroup\@secondoftwo
+ \fi
+ \fi
+ \endgroup}
+
+% valid numerals set by the lbx file
+\let\lbx@dononasciinumerals\relax
+
+\def\blx@hook@ifnum{%
+ \def\do##1{\uccode`##1=`\%}%
+ \do\ \do\0\do\1\do\2\do\3\do\4\do\5\do\6\do\7\do\8\do\9%
+ \do\i\do\v\do\x\do\l\do\c\do\d\do\m
+ \do\I\do\V\do\X\do\L\do\C\do\D\do\M
+ \lbx@dononasciinumerals
+ \blx@donumchars
+ \let\RN\@firstofone
+ \let\Rn\@firstofone}
+
+\def\blx@hook@ifnums{%
+ \blx@hook@ifnum
+ \def\do##1{\uccode`##1=`\%}%
+ \blx@dorangechars
+ \def\do##1{\let##1\@empty}%
+ \blx@dorangecmds}
+
+\def\blx@hook@ifpages{%
+ \blx@hook@ifnum
+ \blx@hook@ifnums
+ \def\do##1{\let##1\@empty}%
+ \blx@dopagecmds}
+
+% [msform][mslang]{<field>}{<true>}{<false>}
+\DeclareDocumentCommand{\blx@imc@iffieldnum}
+ {O{\blx@msform} O{\blx@lmslang} m}
+ {\blx@imc@iffieldundef[{#1}][{#2}]{#3}
+ {\@secondoftwo}
+ {\blx@imc@ifmsentryfield{#3}
+ {\def\blx@tempa{abx@field@#1@#2@#3}}
+ {\def\blx@tempa{abx@field@@@#3}}%
+ \expandafter\expandafter
+ \expandafter\blx@imc@ifnumeral
+ \expandafter\expandafter
+ \expandafter{\csname\blx@tempa\endcsname}}}
+
+\DeclareDocumentCommand{\blx@imc@iffieldnums}
+ {O{\blx@msform} O{\blx@lmslang} m}
+ {\blx@imc@iffieldundef[{#1}][{#2}]{#3}
+ {\@secondoftwo}
+ {\blx@imc@ifmsentryfield{#3}
+ {\def\blx@tempa{abx@field@#1@#2@#3}}
+ {\def\blx@tempa{abx@field@@@#3}}%
+ \expandafter\expandafter
+ \expandafter\blx@imc@ifnumerals
+ \expandafter\expandafter
+ \expandafter{\csname\blx@tempa\endcsname}}}
+
+\DeclareDocumentCommand{\blx@imc@iffieldpages}
+ {O{\blx@msform} O{\blx@lmslang} m}
+ {\blx@imc@iffieldundef[{#1}][{#2}]{#3}
+ {\@secondoftwo}
+ {\blx@imc@ifmsentryfield{#3}
+ {\def\blx@tempa{abx@field@#1@#2@#3}}
+ {\def\blx@tempa{abx@field@@@#3}}%
+ \expandafter\expandafter
+ \expandafter\blx@imc@ifpages
+ \expandafter\expandafter
+ \expandafter{\csname\blx@tempa\endcsname}}}
+
+% {<chars>}
+\newrobustcmd*{\DeclareNumChars}{%
+ \@ifstar
+ {\blx@defnumchars}
+ {\global\let\blx@donumchars\@empty
+ \blx@defnumchars}}
+
+\def\blx@defnumchars#1{%
+ \ifblank{#1}
+ {}
+ {\expandafter\blx@defdochars
+ \expandafter\blx@donumchars
+ \detokenize{#1}\relax}}
+
+% {<chars>}
+\newrobustcmd*{\DeclareRangeChars}{%
+ \@ifstar
+ {\blx@defrangechars}
+ {\global\let\blx@dorangechars\@empty
+ \blx@defrangechars}}
+
+\def\blx@defrangechars#1{%
+ \ifblank{#1}
+ {}
+ {\expandafter\blx@defdochars
+ \expandafter\blx@dorangechars
+ \detokenize{#1}\relax}}
+
+\def\blx@defdochars#1#2{%
+ \ifx#2\relax
+ \else
+ \xdef#1{%
+ \expandonce#1\noexpand\do
+ \expandafter\noexpand\csname#2\endcsname}%
+ \expandafter\blx@defdochars
+ \expandafter#1%
+ \fi}
+
+% {<cstokens>}
+\newrobustcmd*{\DeclareRangeCommands}{%
+ \@ifstar
+ {\blx@defrangecmds}
+ {\global\let\blx@dorangecmds\@empty
+ \blx@defrangecmds}}
+
+\def\blx@defrangecmds#1{%
+ \ifblank{#1}
+ {}
+ {\blx@defrangecmds@i#1&}}
+
+\def\blx@defrangecmds@i#1{%
+ \ifx&#1%
+ \else
+ \gappto\blx@dorangecmds{\do#1}%
+ \expandafter\blx@defrangecmds@i
+ \fi}
+
+% {<cstokens>}
+\newrobustcmd*{\DeclarePageCommands}{%
+ \@ifstar
+ {\blx@defpagecmds}
+ {\global\let\blx@dopagecmds\@empty
+ \blx@defpagecmds}}
+
+\def\blx@defpagecmds#1{%
+ \ifblank{#1}
+ {}
+ {\blx@defpagecmds@i#1&}}
+
+\def\blx@defpagecmds@i#1{%
+ \ifx&#1%
+ \else
+ \gappto\blx@dopagecmds{\do#1}%
+ \expandafter\blx@defpagecmds@i
+ \fi}
+
+\DeclareNumChars{.}
+\DeclareRangeChars{~,;-+/}
+\DeclareRangeCommands{%
+ \ \,\space\nobreakspace\addspace\addnbspace
+ \addthinspace\addnbthinspace\addlowpenspace
+ \addhighpenspace\addlpthinspace\addhpthinspace
+ \adddotspace\addabbrvspace\&\psq\psqq
+ \bibrangedash\bibdaterangesep\bibtimerangesep\textendash\textemdash\bibrangessep}
+\DeclarePageCommands{\pno\ppno}
+
+% *{<code>}
+\newrobustcmd*{\NumCheckSetup}{\appto\blx@hook@ifnum}
+\newcommand*{\NumcheckSetup}{\NumCheckSetup}
+
+\newrobustcmd*{\NumsCheckSetup}{\appto\blx@hook@ifnums}
+
+\newrobustcmd*{\PagesCheckSetup}{\appto\blx@hook@ifpages}
+
+\PagesCheckSetup{\let\pnfmt\@firstofone}
+
+% [<pagination>][<postpro>]{<string>}
+\newrobustcmd*{\blx@imc@mkpageprefix}[1][pagination]{%
+ \begingroup
+ \def\blx@tempa{\blx@mkpageprefix{page}}%
+ \iffieldundef{#1}
+ {}
+ {\iffieldequalstr{#1}{none}
+ {\def\blx@tempa{\blx@mkpageprefix@i}}
+ {\iffieldbibstring{#1}
+ {\edef\blx@tempa{\blx@mkpageprefix{\thefield{#1}}}}
+ {\blx@warning@entry{%
+ Unknown pagination type '\strfield{#1}'}}}}%
+ \@ifnextchar[%]
+ {\blx@tempa}
+ {\blx@tempa[\@firstofone]}}
+
+\protected\long\def\blx@mkpageprefix#1[#2]#3{%
+ \ifnumeral{#3}
+ {\bibstring{#1}\ppspace}
+ {\ifnumerals{#3}
+ {\bibstring{#1s}\ppspace}
+ {\def\pno{\bibstring{#1}}%
+ \def\ppno{\bibstring{#1s}}}}%
+ \blx@mkpageprefix@i[{#2}]{#3}}
+
+\long\def\blx@mkpageprefix@i[#1]#2{#1{#2}\endgroup}
+
+% [<pagination>][<postpro>]{<string>}
+\newrobustcmd*{\blx@imc@mkpagetotal}[1][bookpagination]{%
+ \begingroup
+ \def\blx@tempa{\blx@mkpagetotal{pagetotal}}%
+ \iffieldundef{#1}
+ {}
+ {\iffieldequalstr{#1}{none}
+ {\def\blx@tempa{\blx@mkpagetotal@i}}
+ {\iffieldplusstringbibstring{#1}{total}
+ {\edef\blx@tempa{\blx@mkpagetotal{\thefield{#1}total}}}
+ {\blx@warning@entry{%
+ Unknown pagination type '\strfield{#1}total'}}}}%
+ \@ifnextchar[%]
+ {\blx@tempa}
+ {\blx@tempa[\@firstofone]}}
+
+\protected\long\def\blx@mkpagetotal#1[#2]#3{%
+ \ifnumeral{#3}
+ {\setbox\@tempboxa=\hbox{%
+ \blx@tempcnta0#3\relax
+ \ifnum\blx@tempcnta=\@ne
+ \aftergroup\@firstoftwo
+ \else
+ \aftergroup\@secondoftwo
+ \fi}%
+ {#2{#3}\ppspace\bibstring{#1}}
+ {#2{#3}\ppspace\bibstring{#1s}}}
+ {\def\pno{\bibstring{#1}}%
+ \def\ppno{\bibstring{#1s}}%
+ #2{#3}}%
+ \endgroup}
+
+\long\def\blx@mkpagetotal@i[#1]#2{#1{#2}\endgroup}
+
+\newcounter{mincomprange}
+\newcounter{maxcomprange}
+\newcounter{mincompwidth}
+\setcounter{mincomprange}{10}
+\setcounter{maxcomprange}{100000}
+\setcounter{mincompwidth}{1}
+\def\abx@rangeproclimit{100000}
+
+% {<rangefield>}
+\newcommand*{\rangelen}[1]{%
+ \ifcsdef{abx@range@#1}
+ {\csuse{abx@range@#1}}
+ {}}
+
+% <*>[<postpro>]{<string>}
+\newrobustcmd*{\mknormrange}{%
+ \begingroup
+ \@ifstar
+ {\blx@range@aux\blx@normrange@ii}
+ {\blx@range@aux\blx@normrange@i}}
+
+\def\blx@range@aux#1{%
+ \@ifnextchar[{\blx@range@aux@i#1}{#1[\@firstofone][\@firstofone]}}
+
+\def\blx@range@aux@i#1[#2]{%
+ \@ifnextchar[{#1[{#2}]}{#1[{#2}][\@firstofone]}}
+
+\def\blx@normrange@i[#1][#2]#3{%
+ \let\blx@tempa\@empty
+ \protected\def\blx@range@out@value{\appto\blx@tempa}%
+ \def\blx@range@out@item@process{#2}%
+ \let\blx@range@out@delim\blx@range@out@value
+ \let\blx@range@split\blx@genrange@split
+ \let\blx@range@process\blx@normrange@process
+ \blx@range@chunk{#3}%
+ \begingroup
+ \edef\blx@tempa{\endgroup
+ \unexpanded{#1}{\expandonce\blx@tempa}}%
+ \blx@tempa
+ \endgroup}
+
+\def\blx@normrange@ii[#1][#2]#3{%
+ \protected\def\blx@range@out@value{#1}%
+ \def\blx@range@out@item@process{#2}%
+ \let\blx@range@out@delim\@firstofone
+ \let\blx@range@split\blx@genrange@split
+ \let\blx@range@process\blx@normrange@process
+ \blx@range@chunk{#3}%
+ \endgroup}
+
+\def\blx@range@chunk#1{%
+ \blx@range@chunk@semcol#1;&}
+
+\def\blx@range@chunk@semcol#1;#2&{%
+ \notblank{#1}
+ {\blx@range@chunk@comma#1,&}
+ {}%
+ \notblank{#2}
+ {\notblank{#1}{\blx@range@out@delim{\bibrangessep}}{}%
+ \blx@range@chunk@semcol#2&}
+ {}}
+
+\def\blx@range@chunk@comma#1,#2&{%
+ \notblank{#1}
+ {\blx@range@chunk@sep#1\bibrangessep&}
+ {}%
+ \notblank{#2}
+ {\notblank{#1}{\blx@range@out@delim{\bibrangessep}}{}%
+ \blx@range@chunk@comma#2&}
+ {}}
+
+\def\blx@range@chunk@sep#1\bibrangessep#2&{%
+ \notblank{#1}
+ {\expandafter\blx@range@split
+ \expandafter{\@firstofone#1}}
+ {}%
+ \notblank{#2}
+ {\notblank{#1}{\blx@range@out@delim{\bibrangessep}}{}%
+ \blx@range@chunk@sep#2&}
+ {}}
+
+% Unicode en-dashes are supported in blx-unicode.def
+\def\blx@genrange@split#1{%
+ \protected@edef\blx@normrange@abort{%
+ \blx@range@out@value{%
+ \blx@range@out@item@process{\unexpanded{#1}}}}%
+ \blx@imc@ifpages{#1}
+ {\blx@normrange@range#1\bibrangedash\bibrangedash&}
+ {\blx@normrange@abort}}
+
+\def\blx@normrange@range#1\bibrangedash#2\bibrangedash#3&{%
+ \ifblank{#3}
+ {\blx@normrange@hyphen#1--&}
+ {\ifblank{#2}
+ {\begingroup
+ \protected@edef\blx@tempc{\endgroup
+ \blx@range@out@value{%
+ \blx@range@out@item@process{\unexpanded{#1}}%
+ \noexpand\bibrangedash}}%
+ \blx@tempc}
+ {\ifblank{#1}
+ {\begingroup
+ \protected@edef\blx@tempc{\endgroup
+ \blx@range@out@value{%
+ \noexpand\bibrangedash
+ \blx@range@out@item@process{%
+ \unexpanded{#2}}}}%
+ \blx@tempc}
+ {\blx@range@process{#1}{#2}}}}}
+
+\def\blx@normrange@hyphen#1-#2-#3&{%
+ \ifblank{#3}
+ {\blx@normrange@abort}
+ {\ifblank{#2}
+ {\ifblank{#1}
+ {\let\blx@tempb\@empty}
+ {\def\blx@tempb{#1}}%
+ \blx@normrange@hyphen@i#3&}
+ {\ifblank{#1}
+ {\begingroup
+ \protected@edef\blx@tempc{\endgroup
+ \blx@range@out@value{%
+ \noexpand\bibrangedash
+ \blx@range@out@item@process{%
+ \unexpanded{#2}}}}%
+ \blx@tempc}
+ {\blx@range@process{#1}{#2}}}}}
+
+\def\blx@normrange@hyphen@i#1-#2&{%
+ \ifblank{#1#2}
+ {\begingroup
+ \protected@edef\blx@tempc{\endgroup
+ \blx@range@out@value{%
+ \blx@range@out@item@process{\expandonce\blx@tempb}%
+ \noexpand\bibrangedash}}%
+ \blx@tempc}
+ {\notblank{#1}
+ {\ifdefempty\blx@tempb
+ {\begingroup
+ \protected@edef\blx@tempc{\endgroup
+ \blx@range@out@value{%
+ \noexpand\bibrangedash
+ \blx@range@out@item@process{%
+ \unexpanded{#1}}}}%
+ \blx@tempc}
+ {\expandafter\blx@range@process
+ \expandafter{\blx@tempb}{#1}}}
+ {\blx@normrange@hyphen@i#2&}}}
+
+\def\blx@normrange@process#1#2{%
+ \begingroup
+ \protected@edef\blx@tempc{\endgroup
+ \blx@range@out@value{%
+ \blx@range@out@item@process{\unexpanded{#1}}%
+ \noexpand\bibrangedash
+ \blx@range@out@item@process{\unexpanded{#2}}}}%
+ \blx@tempc}
+
+% <*>[<postpro>]{<string>}
+\newrobustcmd*{\mkcomprange}{%
+ \begingroup
+ \@ifstar
+ {\blx@range@aux\blx@comprange@ii}
+ {\blx@range@aux\blx@comprange@i}}
+
+\def\blx@comprange@i[#1][#2]#3{%
+ \let\blx@tempa\@empty
+ \protected\def\blx@range@out@value{\appto\blx@tempa}%
+ \def\blx@range@out@item@process{#2}%
+ \let\blx@range@out@delim\blx@range@out@value
+ \let\blx@range@split\blx@genrange@split
+ \let\blx@range@process\blx@comprange@check
+ \blx@range@chunk{#3}%
+ \begingroup
+ \edef\blx@tempa{\endgroup
+ \unexpanded{#1}{\expandonce\blx@tempa}}%
+ \blx@tempa
+ \endgroup}
+
+\def\blx@comprange@ii[#1][#2]#3{%
+ \protected\def\blx@range@out@value{#1}%
+ \def\blx@range@out@item@process{#2}%
+ \let\blx@range@out@delim\@firstofone
+ \let\blx@range@split\blx@genrange@split
+ \let\blx@range@process\blx@comprange@check
+ \blx@range@chunk{#3}%
+ \endgroup}
+
+\def\blx@comprange@check#1#2{%
+ \blx@imc@ifinteger{#1}
+ {\blx@imc@ifinteger{#2}
+ {\@firstoftwo}
+ {\@secondoftwo}}
+ {\@secondoftwo}
+ {\blx@comprange@comp{#1}{#2}}
+ {\begingroup
+ \protected@edef\blx@tempc{\endgroup
+ \blx@range@out@value{%
+ \blx@range@out@item@process{\unexpanded{#1}}%
+ \noexpand\bibrangedash
+ \blx@range@out@item@process{\unexpanded{#2}}}}%
+ \blx@tempc}}
+
+\def\blx@comprange@comp#1#2{%
+ \def\blx@tempb{#1}%
+ \def\blx@tempc{#2}%
+ \let\blx@tempd\blx@tempc
+ \ifnum\c@maxcomprange<\abx@rangeproclimit\relax
+ \numdef\blx@tempe\abx@rangeproclimit
+ \else
+ \numdef\blx@tempe\c@maxcomprange
+ \fi
+ \blx@tempcntc=\blx@tempe\relax
+ \ifnum
+ \ifnum\c@mincompwidth<1\space1\fi
+ \ifnum\c@maxcomprange<10\space1\fi
+ \ifnum\c@mincomprange<\blx@tempb\space\else1\fi
+ \ifnum\blx@tempb<\numexpr\blx@tempcntc*10\relax\else1\fi
+ 0=\z@
+ \expandafter\blx@comprange@comp@div
+ \else
+ \expandafter\blx@comprange@end
+ \fi}
+
+\def\blx@comprange@end{%
+ \numdef\blx@tempb\blx@tempb
+ \ifnum\blx@tempe>\c@maxcomprange\relax
+ \numdef\blx@tempc\blx@tempc
+ \else
+ \numdef\blx@tempc\blx@tempd
+ \fi
+ \begingroup
+ \protected@edef\blx@tempb{\endgroup
+ \blx@range@out@value{%
+ \blx@range@out@item@process{\blx@tempb}%
+ \noexpand\bibrangedash
+ \blx@range@out@item@process{\blx@tempc}}}%
+ \blx@tempb}
+
+\def\blx@comprange@comp@div{%
+ \unless\ifnum\blx@tempb<\blx@tempcntc
+ \blx@tempcnta\blx@tempb\relax
+ \blx@tempcntb\blx@tempc\relax
+ \divide\blx@tempcnta\blx@tempcntc
+ \divide\blx@tempcntb\blx@tempcntc
+ \ifnum\blx@tempcnta=\blx@tempcntb
+ \edef\blx@tempd{\expandafter\@gobble\blx@tempd}%
+ \numdef\blx@tempe\blx@tempcntc
+ \fi
+ \fi
+ \divide\blx@tempcntc10\relax
+ \ifnum
+ \ifnum\blx@tempcntc<10 1\fi
+ \ifnum\blx@tempcntc>\c@mincompwidth\else 1\fi
+ 0=\z@
+ \expandafter\blx@comprange@comp@div
+ \else
+ \expandafter\blx@comprange@end
+ \fi}
+
+% <*>[<postpro>]{<string>}
+\newrobustcmd*{\mkfirstpage}{%
+ \begingroup
+ \@ifstar
+ {\blx@range@aux\blx@firstpage@ii}
+ {\blx@range@aux\blx@firstpage@i}}
+
+\def\blx@firstpage@i[#1][#2]#3{%
+ \let\blx@tempa\@empty
+ \protected\def\blx@range@out@value{\appto\blx@tempa}%
+ \def\blx@range@out@item@process{#2}%
+ \let\blx@range@out@delim\blx@range@out@value
+ \let\blx@range@split\blx@firstpage@split
+ \blx@range@chunk{#3}%
+ \begingroup
+ \edef\blx@tempa{\endgroup
+ \unexpanded{#1}{\expandonce\blx@tempa}}%
+ \blx@tempa
+ \endgroup}
+
+\def\blx@firstpage@ii[#1][#2]#3{%
+ \protected\def\blx@range@out@value{#1}%
+ \def\blx@range@out@item@process{#2}%
+ \let\blx@range@out@delim\@firstofone
+ \let\blx@range@split\blx@firstpage@split
+ \blx@range@chunk{#3}%
+ \endgroup}
+
+% Unicode en-dashes are supported in blx-unicode.def
+\def\blx@firstpage@split#1{%
+ \protected@edef\blx@firstpage@abort{%
+ \blx@range@out@value{%
+ \blx@range@out@item@process{\unexpanded{#1}}}}%
+ \blx@firstpage@range#1\bibrangedash\bibrangedash&}
+
+\def\blx@firstpage@range#1\bibrangedash#2\bibrangedash#3&{%
+ \ifblank{#3}
+ {\blx@firstpage@hyphen#1--&}
+ {\ifblank{#1}
+ {\begingroup
+ \protected@edef\blx@tempc{\endgroup
+ \blx@range@out@value{%
+ \noexpand\bibrangedash
+ \blx@range@out@item@process{\unexpanded{#2}}}}%
+ \blx@tempc}
+ {\begingroup
+ \protected@edef\blx@tempc{\endgroup
+ \blx@range@out@value{%
+ \blx@range@out@item@process{\unexpanded{#1}}}}%
+ \blx@tempc}}}
+
+\def\blx@firstpage@hyphen#1-#2-#3&{%
+ \ifblank{#3}
+ {\blx@firstpage@abort}
+ {\ifblank{#1}
+ {\ifblank{#2}
+ {\blx@firstpage@hyphen@i#3&}
+ {\begingroup
+ \protected@edef\blx@tempc{\endgroup
+ \blx@range@out@value{%
+ \noexpand\bibrangedash
+ \blx@range@out@item@process{%
+ \unexpanded{#2}}}}%
+ \blx@tempc}}
+ {\begingroup
+ \protected@edef\blx@tempc{\endgroup
+ \blx@range@out@value{%
+ \blx@range@out@item@process{\unexpanded{#1}}}}%
+ \blx@tempc}}}
+
+\def\blx@firstpage@hyphen@i#1-#2&{%
+ \ifblank{#1}
+ {\ifblank{#2}
+ {\blx@firstpage@abort}
+ {\blx@firstpage@hyphen@i#2&}}
+ {\begingroup
+ \protected@edef\blx@tempc{\endgroup
+ \blx@range@out@value{%
+ \noexpand\bibrangedash
+ \blx@range@out@item@process{%
+ \unexpanded{#1}}}}%
+ \blx@tempc}}
+
+\newcommand*{\ppspace}{\addnbspace}
+\newcommand*{\sqspace}{\addnbspace}
+
+\newrobustcmd*{\RN}[1]{%
+ \begingroup
+ \expandafter\RNfont
+ \expandafter{\romannumeral#1}%
+ \endgroup}
+\newrobustcmd*{\Rn}[1]{%
+ \begingroup
+ \expandafter\Rnfont
+ \expandafter{\romannumeral#1}%
+ \endgroup}
+
+\newcommand*{\RNfont}{\uppercase}
+\newcommand*{\Rnfont}{}
+
+% Delimiter interface
+
+% [<contextname, ...>]{<name>}{<code>}
+\newrobustcmd*{\DeclareDelimFormat}{%
+ \@ifstar
+ {\blx@declaredelimclear}
+ {\blx@declaredelim}}
+
+\def\blx@cleardelim#1{%
+ \ifcsvoid{blx@declaredelimcontexts@#1}
+ {}
+ {\def\do##1{\csundef{blx@printdelim@##1@#1}}%
+ \dolistcsloop{blx@declaredelimcontexts@#1}}%
+ \cslet{blx@declaredelimcontexts@#1}\@empty}
+
+\newrobustcmd*{\blx@declaredelimclear}[3][]{%
+ \blx@cleardelim{#2}%
+ \ifblank{#1}
+ {\blx@declaredelim{#2}{#3}}
+ {\blx@declaredelim[{#1}]{#2}{#3}}}
+
+\newrobustcmd*{\blx@declaredelim}[3][]{%
+ \ifblank{#1}
+ {\blx@declaredelim@i{}{}{#2}{#3}}
+ {\def\do##1{%
+ \listcsadd{blx@declaredelimcontexts@#2}{##1}%
+ \blx@declaredelim@i{blx@printdelim@##1@}{##1}{#2}{#3}}%
+ \docsvlist{#1}}}%
+
+\def\blx@declaredelim@i#1#2#3#4{%
+ \ifcsdef{#1#3}
+ {\blx@inf@delimdeclare{#3}{#2}}
+ {}%
+ \csdef{#1#3}{#4}}
+
+% [<alias context, ...>]{<alias>}[<delim context>]{<delim>}
+% deprecated: *[<alias context, ...>]{<alias>}[<delim context>]{<delim>}
+% the starred version is only implemented for backwards compatibility
+% the only difference is that a missing first argument
+% implies the global/empty context
+\newrobustcmd*{\DeclareDelimAlias}{%
+ \@ifstar
+ {\blx@declaredelimalias@s}
+ {\blx@declaredelimalias@a}}
+
+\def\blx@declaredelimalias@s{%
+ \blx@warning{%
+ The starred command '\string\DeclareDelimAlias*' is\MessageBreak
+ deprecated.%
+ \MessageBreak
+ Use the unstarred version '\string\DeclareDelimAlias'\MessageBreak
+ instead}%
+ \@ifnextchar[%]
+ {\blx@declaredelimalias@om}
+ {\blx@declaredelimalias@om[]}}
+
+\def\blx@declaredelimalias@a{%
+ \@ifnextchar[%]
+ {\blx@declaredelimalias@om}
+ {\blx@declaredelimalias@m}}
+
+\def\blx@declaredelimalias@m#1{%
+ \@ifnextchar[%]
+ {\blx@declaredelimalias@mom{#1}}
+ {\blx@declaredelimalias@mm{#1}}}
+
+\def\blx@declaredelimalias@mm{%
+ \blx@declaredelimalias@auto}
+
+\def\blx@declaredelimalias@mom{%
+ \blx@declaredelimalias@omom[]}
+
+\def\blx@declaredelimalias@om[#1]#2{%
+ \@ifnextchar[%]
+ {\blx@declaredelimalias@omom[{#1}]{#2}}
+ {\blx@declaredelimalias@omm[{#1}]{#2}}}
+
+% hrmpf ... remember that \docsvlist doesn't do anthing for empty
+% lists/list items
+\def\blx@declaredelimalias@omom[#1]#2[#3]#4{%
+ \ifstrequal{#1}{*}
+ {\ifstrequal{#3}{*}
+ {\blx@declaredelimalias@auto{#2}{#4}}
+ {\blx@cleardelim{#1}%
+ \blx@declaredelimalias@manual{}{#2}{#3}{#4}}}
+ {\def\do##1{\blx@declaredelimalias@manual{##1}{#2}{#3}{#4}}%
+ \ifblank{#1}
+ {\do{}}
+ {\docsvlist{#1}}}}
+
+\def\blx@declaredelimalias@omm[#1]#2#3{%
+ \ifstrequal{#1}{*}
+ {\blx@declaredelimalias@auto{#2}{#3}}
+ {\def\do##1{\blx@declaredelimalias@manual{##1}{#2}{##1}{#3}}%
+ \ifblank{#1}
+ {\do{}}
+ {\docsvlist{#1}}}}
+
+% {<alias>}{<source>}
+\def\blx@declaredelimalias@auto#1#2{%
+ \blx@cleardelim{#1}%
+ \blx@declaredelimalias@manual{}{#1}{}{#2}%
+ \ifcsvoid{blx@declaredelimcontexts@#2}
+ {}
+ {\def\do##1{%
+ \blx@declaredelimalias@manual{##1}{#1}{##1}{#2}}%
+ \dolistcsloop{blx@declaredelimcontexts@#2}}}
+
+% {<alias context>}{<alias>}{<source context>}{<source>}
+\def\blx@declaredelimalias@manual#1#2#3#4{%
+ \begingroup
+ \ifblank{#1}
+ {\def\blx@tempa{{}{}}}
+ {\def\blx@tempa{{blx@printdelim@#1@}{#1}}}%
+ \ifblank{#3}
+ {\def\blx@tempb{{}{}}}
+ {\def\blx@tempb{{blx@printdelim@#3@}{#3}}}%
+ \edef\blx@tempc{\endgroup
+ \noexpand\blx@declaredelimalias@def%
+ \expandonce\blx@tempa {\unexpanded{#2}}%
+ \expandonce\blx@tempb {\unexpanded{#4}}}%
+ \blx@tempc}
+
+% {<alias context internal id>}{<alias context name>}{<alias>}
+% {<source context internal id>}{<source context name>}{<source>}
+\def\blx@declaredelimalias@def#1#2#3#4#5#6{%
+ \ifcsdef{#1#3}
+ {\blx@inf@delimdeclare{#3}{#2}}
+ {}%
+ \ifblank{#2}
+ {}
+ {\ifinlistcs{#2}{blx@declaredelimcontexts@#3}
+ {}
+ {\listcsadd{blx@declaredelimcontexts@#3}{#2}}}%
+ \csdef{#1#3}{\ifcsundef{#4#6}{\csuse{#6}}{\csuse{#4#6}}}}
+
+\def\blx@delimcontext{none}
+\newcommand*{\printdelim}[2][]{%
+ \ifblank{#1}
+ {\ifcsdef{blx@printdelim@\blx@delimcontext @#2}
+ {\csuse{blx@printdelim@\blx@delimcontext @#2}}
+ {\ifcsdef{#2}% fall back on legacy macros
+ {\csuse{#2}}
+ {\blx@warn@delimuse{#2}{*}}}}
+ {\ifcsdef{blx@printdelim@#1@#2}
+ {\csuse{blx@printdelim@#1@#2}}
+ {\blx@warn@delimuse{#2}{#1}}}}
+
+\newcommand*{\delimcontext}[1]{%
+ \edef\blx@delimcontext{\blx@delimcontextalias{#1}}}
+
+\def\blx@delimcontextalias#1{%
+ \ifcsdef{blx@delimcontextalias@#1}
+ {\csuse{blx@delimcontextalias@#1}}
+ {#1}}
+
+\newcommand*{\DeclareDelimcontextAlias}[2]{%
+ \csdef{blx@delimcontextalias@#1}{#2}}
+
+\newcommand*{\UndeclareDelimcontextAlias}[1]{%
+ \csundef{blx@delimcontextalias@#1}}
+
+\newrobustcmd*{\AtUsedriver}{%
+ \@ifstar
+ {\global\undef\blx@hook@usedriver
+ \gappto\blx@hook@usedriver}
+ {\gappto\blx@hook@usedriver}}
+\@onlypreamble\AtUsedriver
+\def\blx@imc@UseUsedriverHook{\csuse{blx@hook@usedriver}}
+\blx@regimcs{\UseUsedriverHook}
+
+\AtUsedriver{%
+ \delimcontext{bib}%
+ \let\finentry\blx@finentry@usedrv
+ \let\newblock\relax
+ \let\abx@macro@bibindex\@empty
+ \let\abx@macro@pageref\@empty}
+
+% {<init>}{<entrytype>}
+\protected\def\blx@imc@usedriver#1#2{%
+ \begingroup
+ \csuse{blx@hook@usedriver}%
+ \csuse{blx@hook@bbxinit}#1%
+ \blx@beglangbib
+ \blx@driver{#2}%
+ \blx@endlangbib
+ \endgroup}
+
+% Punctuation
+
+\protected\def\blx@initunit{%
+ \global\togglefalse{blx@block}%
+ \global\togglefalse{blx@unit}%
+ \global\togglefalse{blx@insert}%
+ \global\togglefalse{blx@lastins}%
+ \global\togglefalse{blx@keepunit}%
+ \global\let\blx@unitpunct\newunitpunct
+ \blx@imc@resetpunctfont}
+
+\def\blx@begunit{%
+ \toggletrue{blx@tempa}%
+ \iftoggle{blx@insert}
+ {\iftoggle{blx@unit}
+ {\begingroup
+ \let\blx@begunit\@empty
+ \let\blx@endunit\@empty
+ \let\blx@endnounit\@empty
+ \blx@unitpunct\blx@postpunct
+ \endgroup
+ \global\togglefalse{blx@unit}%
+ \togglefalse{blx@tempa}}
+ {\blx@postpunct}%
+ \iftoggle{blx@block}
+ {\begingroup
+ \let\blx@begunit\@empty
+ \let\blx@endunit\@empty
+ \let\blx@endnounit\@empty
+ \newblockpunct
+ \endgroup
+ \global\togglefalse{blx@block}%
+ \togglefalse{blx@tempa}}
+ {}}
+ {}%
+ \blx@postpunct
+ \blx@imc@resetpunctfont
+ \iftoggle{blx@tempa}
+ {}
+ {\global\togglefalse{blx@insert}}%
+ \blx@leavevmode
+ \begingroup}
+
+\def\blx@endunit{%
+ \endgroup
+ \global\toggletrue{blx@insert}%
+ \global\toggletrue{blx@lastins}}
+
+\def\blx@nounit{%
+ \global\togglefalse{blx@lastins}}
+
+\def\blx@endnounit{%
+ \endgroup\blx@nounit}
+
+\protected\def\blx@imc@newblock{%
+ \global\toggletrue{blx@block}}%
+
+\protected\def\blx@imc@newunit{%
+ \iftoggle{blx@keepunit}
+ {}
+ {\global\let\blx@unitpunct\newunitpunct
+ \global\toggletrue{blx@unit}}}
+
+\protected\def\blx@imc@setunit{%
+ \@ifstar\blx@setunit@i\blx@setunit}
+
+\long\def\blx@setunit#1{%
+ \iftoggle{blx@keepunit}
+ {}
+ {\long\gdef\blx@unitpunct{#1}%
+ \global\toggletrue{blx@unit}}}
+
+\def\blx@setunit@i{%
+ \iftoggle{blx@lastins}
+ {\blx@setunit}
+ {\@gobble}}
+
+\protected\def\blx@imc@printunit{%
+ \@ifstar\blx@printunit@i\blx@printunit}
+
+\def\blx@printunit#1{%
+ \long\gdef\blx@unitpunct{#1\global\togglefalse{blx@keepunit}}%
+ \global\toggletrue{blx@keepunit}%
+ \global\toggletrue{blx@unit}}
+
+\def\blx@printunit@i{%
+ \iftoggle{blx@lastins}
+ {\blx@printunit}
+ {\@gobble}}
+
+\protected\def\blx@imc@finentry{%
+ \unspace\finentrypunct
+ \blx@postpunct
+ \blx@initunit}
+
+\protected\def\blx@finentry@usedrv{%
+ \blx@setunit\relax}
+
+\protected\def\blx@finentry@inset{%
+ \blx@setunit\entrysetpunct
+ \global\toggletrue{blx@block}}
+
+\def\ifentryseen{\blx@imc@ifentryseen}
+\def\ifentryinbib{\blx@imc@ifentryinbib}
+\def\ifentrycategory{\blx@imc@ifentrycategory}
+\def\ifentrykeyword{\blx@imc@ifentrykeyword}
+
+
+\def\blx@imc@iflabeldateisdate{%
+ \iftoggle{blx@labeldateparts}
+ {\iffieldundef{labeldatesource}
+ {\@secondoftwo}
+ {\iffieldequalstr{labeldatesource}{}
+ {\@firstoftwo}
+ {\iffieldequalstr{labeldatesource}{year}}}}
+ {\@secondoftwo}}
+
+
+\def\blx@imc@ifdatehasyearonlyprecision#1{%
+ \iffieldundef{#1year}
+ {\@secondoftwo}
+ {\ifcsstring{blx@dateformat@#1date}{year}
+ {\@firstoftwo}
+ {\iffieldundef{#1month}
+ {\iffieldundef{#1yeardivision}}
+ {\@secondoftwo}}}}
+
+\def\blx@imc@ifdatehastime#1{%
+ \iftoggle{blx@#1dateusetime}
+ {\iffieldundef{#1hour}
+ {\@secondoftwo}
+ {\@firstoftwo}}
+ {\@secondoftwo}}
+
+\def\blx@imc@ifdateshavedifferentprecision#1#2{%
+ \ifboolexpr{ ( test {\ifdatehasyearonlyprecision{#1}}
+ and not test {\ifdatehasyearonlyprecision{#2}})
+ or ( not test {\ifdatehasyearonlyprecision{#1}}
+ and test {\ifdatehasyearonlyprecision{#2}})
+ or ( test {\ifdatehastime{#1}}
+ and not test {\ifdatehastime{#2}})
+ or ( not test {\ifdatehastime{#1}}
+ and test {\ifdatehastime{#2}})}}
+
+\def\blx@imc@ifdateyearsequal#1#2{%
+ \iffieldsequal{#1year}{#2year}
+ {\iffieldundef{#1dateera}
+ {\iffieldundef{#2dateera}}
+ {\iffieldsequal{#1dateera}{#2dateera}}}
+ {\@secondoftwo}}
+
+\def\blx@reconstruct@comparabledate#1{%
+ \thefield{#1year}-\thefield{#1month}(\thefield{#1yeardivision})-%
+ \thefield{#1day}T%
+ \thefield{#1hour}:\thefield{#1minute}:\thefield{#1second}Z%
+ \thefield{#1timezone}//%
+ e\thefield{#1dateera}E%
+ c\csuse{if#1datecirca}{T}{F}%
+ j\csuse{if#1datejulian}{T}{F}%
+ r\csuse{if#1dateuncertain}{T}{F}%
+ k\csuse{if#1dateunknown}{T}{F}%
+}
+
+\def\blx@imc@ifdatesequal#1#2{%
+ \begingroup
+ \edef\blx@tempa{\blx@reconstruct@comparabledate{#1}}%
+ \edef\blx@tempb{\blx@reconstruct@comparabledate{#2}}%
+ \edef\blx@tempc{\endgroup
+ \ifstrequal{\blx@tempa}{\blx@tempb}}%
+ \blx@tempc
+}
+
+\def\blx@imc@ifdaterangesequal#1#2{%
+ \blx@imc@ifdatesequal{#1}{#2}
+ {\blx@imc@ifdatesequal{#1end}{#2end}}
+ {\@secondoftwo}}
+
+\def\blx@imc@ifmsentryfield#1{%
+ \ifcsdef{blx@datamodel@multiscript@entryfield@#1}}
+
+\blx@regimcs{%
+ \ifdriver \thefield \strfield \csfield \usefield \thelist \strlist
+ \thefirstlistitem \usefirstlistitem \strfirstlistitem
+ \thename \strname
+ \clearfield \clearlist \clearname \restorefield \restorelist \restorename
+ \ifcategory \ifkeyword
+ \ifciteseen \ifciteibid \ifciteidem \ifopcit \ifloccit
+ \ifcurrentfield \ifcurrentlist \ifcurrentname \ifentrytype
+ \iffieldequalcs \iffieldequals \iffieldequalstr \iffieldsequal
+ \ifentryfieldundef \iffieldundef \iffieldxref \iflistequalcs \iflistequals
+ \iflistsequal \iflistundef \iflistxref
+ \ifmorenames \ifmoreitems \iffirstcitekey \iflastcitekey
+ \ifnameequalcs \ifnameequals \ifnamesequal \ifnameundef \ifnamexref
+ \iffirstonpage \ifsamepage \savefield \savefieldcs \savelist
+ \savelistcs \savename \savenamecs \usedriver
+ \ifinteger \hascomputableequivalent \ifiscomputable \getcomputableequivalent
+ \ifnumeral \ifnumerals \ifpages
+ \iffieldint \fieldhascomputableequivalent \iffieldiscomputable
+ \iffieldnum \iffieldnums \iffieldpages
+ \iflabeldateisdate \ifdatehasyearonlyprecision \ifdatehastime
+ \ifdateshavedifferentprecision
+ \ifdateyearsequal \ifdatesequal \ifdaterangesequal
+ \mkpageprefix \mkpagetotal
+ \newblock \newunit \setunit \printunit \finentry \ifmsentryfield}
+
+\appto\blx@blxinit{%
+ \def\ifnatbibmode{\iftoggle{blx@natbib}}%
+ \def\ifcitation{\iftoggle{blx@citation}}%
+ \def\ifvolcite{\iftoggle{blx@volcite}}%
+ \def\ifbibliography{\iftoggle{blx@bibliography}}%
+ \def\ifciteindex{\iftoggle{blx@citeindex}}%
+ \def\ifbibindex{\iftoggle{blx@bibindex}}%
+ \def\iffootnote{\iftoggle{blx@footnote}}%
+ \def\ifuseprefix{\iftoggle{blx@useprefix}}%
+ \def\ifterseinits{\iftoggle{blx@terseinits}}%
+ \def\ifcrossrefsource{\iftoggle{abx@bool@crossrefsource}}%
+ \def\ifxrefsource{\iftoggle{abx@bool@xrefsource}}%
+ \def\ifsingletitle{\iftoggle{abx@bool@singletitle}}%
+ \def\ifnocite{\iftoggle{abx@bool@nocite}}%
+ \def\ifuniquetitle{\iftoggle{abx@bool@uniquetitle}}%
+ \def\ifuniquebaretitle{\iftoggle{abx@bool@uniquebaretitle}}%
+ \def\ifuniquework{\iftoggle{abx@bool@uniquework}}%
+ \def\ifuniqueprimaryauthor{\iftoggle{abx@bool@uniqueprimaryauthor}}%
+ \def\ifandothers#1{\iftoggle{abx@bool@more#1}}%
+ \protected\def\pnfmt{\printtext[postnote]}%
+ \protected\def\pno{\bibstring{page}}%
+ \protected\def\ppno{\bibstring{pages}}%
+ \let\nopp\relax
+ \protected\def\psq{\sqspace\bibstring{sequens}}%
+ \protected\def\psqq{\sqspace\bibstring{sequentes}}}
+
+% Make sure that commands which might pop up inside an \edef will be defined
+% as something. If they are taken \AtBeginDocument then we assume that all will
+% be well. If not, then provide a definition which will give an error outside
+% of a citation context.
+\AtBeginDocument{%
+ \protected\def\do#1{%
+ \ifdefined#1%
+ \else
+ \protected\def#1{\ERROR}%
+ \fi
+ }%
+ \docsvlist{\pnfmt,\pno,\ppno,\nopp,\psq,\psqq}%
+}
+
+%% Global formatting hooks
+
+%% Main formatting commands
+% They work by creating a \let alias:
+% \abx@<class>@<entrytype>@<formatname> -> \blx@defformat@d
+% for later use in \print*
+% Then, \blx@defformat@d is defined by calling
+% \def\blx@defformat@d#1{format body}
+
+% [<entrytype>]{<name>}{<definiton>}
+\newrobustcmd*{\DeclareNameFormat}{%
+ \@ifstar
+ {\blx@defformat\blx@defnameformat{nfd}*}
+ {\blx@defformat\blx@defnameformat{nfd}{}}}
+
+\newrobustcmd*{\DeclareIndexNameFormat}{%
+ \@ifstar
+ {\blx@defformat\blx@defnameformat{nid}*}
+ {\blx@defformat\blx@defnameformat{nid}{}}}
+
+\newrobustcmd*{\DeclareListFormat}{%
+ \@ifstar
+ {\blx@defformat\blx@defplainformat{lfd}*}
+ {\blx@defformat\blx@defplainformat{lfd}{}}}
+\newrobustcmd*{\DeclareIndexListFormat}{%
+ \@ifstar
+ {\blx@defformat\blx@defplainformat{lid}*}
+ {\blx@defformat\blx@defplainformat{lid}{}}}
+
+\newrobustcmd*{\DeclareFieldFormat}{%
+ \@ifstar
+ {\blx@defformat\blx@defplainformat{ffd}*}
+ {\blx@defformat\blx@defplainformat{ffd}{}}}
+\newrobustcmd*{\DeclareIndexFieldFormat}{%
+ \@ifstar
+ {\blx@defformat\blx@defplainformat{fid}*}
+ {\blx@defformat\blx@defplainformat{fid}{}}}
+
+\newrobustcmd*{\DeclareNameWrapperFormat}{%
+ \@ifstar
+ {\blx@defformat\blx@defnameformat{nwd}*}
+ {\blx@defformat\blx@defnameformat{nwd}{}}}
+
+\newrobustcmd*{\DeclareListWrapperFormat}{%
+ \@ifstar
+ {\blx@defformat\blx@defplainformat{lwd}*}
+ {\blx@defformat\blx@defplainformat{lwd}{}}}
+
+% {<macro>}{<class>}{<*>}
+\def\blx@defformat#1#2#3{%
+ \@ifnextchar[%]
+ {\blx@defformat@i{#1}{#2}{#3}}
+ {\blx@defformat@i{#1}{#2}{#3}[*]}}
+
+% {<macro>}{<class>}{<*>}[<entrytype>]{<name>}
+\def\blx@defformat@i#1#2#3[#4]#5{%
+ \notblank{#3}
+ {\blx@resetformat{#2}{#5}}
+ {}%
+ \def\blx@defformat@a{#2}%
+ \def\blx@defformat@b{#4}%
+ \blx@xsanitizeafter{\def\blx@defformat@c}{#5}%
+ \afterassignment\blx@defformat@ii
+ #1}
+
+\def\blx@defformat@ii{%
+ \expandafter\forcsvlist
+ \expandafter\blx@defformat@iii
+ \expandafter{\blx@defformat@b}}
+
+\def\blx@defformat@iii#1{%
+ \cslet{abx@\blx@defformat@a @#1@\blx@defformat@c}\blx@defformat@d}
+
+% grab the argument explicitly, this avoids issues with spaces making it
+% into the argument specification of the macros
+% cf. \def\foo#1{<stuff>} vs. \def\foo#1 {<stuff>}
+\long\def\blx@defplainformat#1{%
+ \long\def\blx@defformat@d##1{#1}}
+
+\long\def\blx@defnameformat#1{%
+ \long\def\blx@defformat@d##1{#1}}
+
+\def\blx@resetformat#1#2{%
+ \let\blx@saved@do\do
+ \def\do##1{\blx@resetformat@i{#1}{#2}{##1}}%
+ \blx@safe@actives
+ \abx@doentrytypes
+ \blx@rest@actives
+ \let\do\blx@saved@do}
+
+\def\blx@resetformat@i#1#2#3{%
+ \ifcsdef{abx@#1@#3@#2}
+ {\csundef{abx@#1@#3@#2}}
+ {}}
+
+% {<name>}{<name>}
+\def\blx@letformat#1#2{%
+ \blx@safe@actives
+ \afterassignment\blx@rest@actives
+ \csletcs{#1}{#2}}
+
+% [aliastype]{aliasname}[formattype]{formatname}
+\def\blx@defalias#1{%
+ \@ifnextchar[%]
+ {\blx@defalias@i{#1}}
+ {\blx@defalias@i{#1}[*]}}
+\def\blx@defalias@i#1[#2]#3{%
+ \@ifnextchar[%]
+ {\blx@defalias@ii{#1}{#2}{#3}}
+ {\blx@defalias@ii{#1}{#2}{#3}[*]}}
+\def\blx@defalias@ii#1#2#3[#4]#5{%
+ \blx@safe@actives
+ \afterassignment\blx@rest@actives
+ \csedef{abx@#1@#2@#3}{%
+ \expandonce{\csname abx@#1@#4@#5\endcsname}}}
+
+% {<macro>}{<class>}{<name>}{<field>}
+\def\blx@getformat#1#2#3#4{%
+ \blx@safe@actives
+ \afterassignment\blx@rest@actives
+ \ifcsundef{abx@#2@\blx@imc@thefield{entrytype}@#3}
+ {\ifcsundef{abx@#2@*@#3}
+ {\ifcsundef{abx@#2@\blx@imc@thefield{entrytype}@#4}
+ {\ifcsundef{abx@#2@*@#4}
+ {\letcs#1{abx@#2@*@default}}
+ {\letcs#1{abx@#2@*@#4}}}
+ {\letcs#1{abx@#2@\blx@imc@thefield{entrytype}@#4}}}
+ {\letcs#1{abx@#2@*@#3}}}
+ {\letcs#1{abx@#2@\blx@imc@thefield{entrytype}@#3}}}
+
+% [<entrytype>]{<name>}
+\newrobustcmd*{\savefieldformat}[2][*]{\blx@save{abx@ffd@#1@#2}}
+\newrobustcmd*{\savelistformat}[2][*]{\blx@save{abx@lfd@#1@#2}}
+\newrobustcmd*{\savenameformat}[2][*]{\blx@save{abx@nfd@#1@#2}}
+\newrobustcmd*{\savelistwrapperformat}[2][*]{\blx@save{abx@lwd@#1@#2}}
+\newrobustcmd*{\savenamewrapperformat}[2][*]{\blx@save{abx@nwd@#1@#2}}
+
+\newrobustcmd*{\restorefieldformat}[2][*]{\blx@restore{abx@ffd@#1@#2}}
+\newrobustcmd*{\restorelistformat}[2][*]{\blx@restore{abx@lfd@#1@#2}}
+\newrobustcmd*{\restorenameformat}[2][*]{\blx@restore{abx@nfd@#1@#2}}
+\newrobustcmd*{\restorelistwrapperformat}[2][*]{\blx@restore{abx@lwd@#1@#2}}
+\newrobustcmd*{\restorenamewrapperformat}[2][*]{\blx@restore{abx@nwd@#1@#2}}
+
+% [<entrytype>]{<name>}{<true>}{<false>}
+\newrobustcmd*{\iffieldformatundef}[2][*]{\ifcsundef{abx@ffd@#1@#2}}
+\newrobustcmd*{\iflistformatundef}[2][*]{\ifcsundef{abx@lfd@#1@#2}}
+\newrobustcmd*{\ifnameformatundef}[2][*]{\ifcsundef{abx@nfd@#1@#2}}
+\newrobustcmd*{\iflistwrapperformatundef}[2][*]{\ifcsundef{abx@lwd@#1@#2}}
+\newrobustcmd*{\ifnamewrapperformatundef}[2][*]{\ifcsundef{abx@nwd@#1@#2}}
+
+% [<entrytype>]{<alias>}[<entrytype>]{<name>}
+\newrobustcmd*{\DeclareNameAlias}{\blx@defalias{nfd}}
+\newrobustcmd*{\DeclareIndexNameAlias}{\blx@defalias{nid}}
+
+\newrobustcmd*{\DeclareListAlias}{\blx@defalias{lfd}}
+\newrobustcmd*{\DeclareIndexListAlias}{\blx@defalias{lid}}
+
+\newrobustcmd*{\DeclareFieldAlias}{\blx@defalias{ffd}}
+\newrobustcmd*{\DeclareIndexFieldAlias}{\blx@defalias{fid}}
+
+\newrobustcmd*{\DeclareNameWrapperAlias}{\blx@defalias{nwd}}
+
+\newrobustcmd*{\DeclareListWrapperAlias}{\blx@defalias{lwd}}
+
+% #1: internal type signature, #2: type text for warning
+% #3 #4 #5 #6
+% [aliastype]{aliasname}[formattype]{formatname}
+\def\blx@deprecateformat#1#2{%
+ \@ifnextchar[%]
+ {\blx@deprecateformat@i{#1}{#2}}
+ {\blx@deprecateformat@i{#1}{#2}[*]}}
+\def\blx@deprecateformat@i#1#2[#3]#4{%
+ \@ifnextchar[%]
+ {\blx@deprecateformat@ii{#1}{#2}{#3}{#4}}
+ {\blx@deprecateformat@ii{#1}{#2}{#3}{#4}[*]}}
+\def\blx@deprecateformat@ii#1#2#3#4[#5]#6{%
+ \blx@safe@actives
+ \afterassignment\blx@rest@actives
+ \csdef{abx@#1@#3@#4}{%
+ \ifcsundef{abx@legacywarning@#1@#3@#4}
+ {\global\cslet{abx@legacywarning@#1@#3@#4}\@empty
+ \blx@warning@noline{%
+ #2 '#4' deprecated.\MessageBreak
+ Please use '#6' instead.\MessageBreak
+ Using '#6' now}}
+ {}%
+ \csname abx@#1@#5@#6\endcsname}}
+
+% [<entrytype>]{<alias>}[<entrytype>]{<name>}
+\newrobustcmd*{\DeprecateNameFormatWithReplacement}{%
+ \blx@deprecateformat{nfd}{Name format}}
+\newrobustcmd*{\DeprecateIndexNameFormatWithReplacement}{%
+ \blx@deprecateformat{nid}{Index name format}}
+
+\newrobustcmd*{\DeprecateListFormatWithReplacement}{%
+ \blx@deprecateformat{lfd}{List format}}
+\newrobustcmd*{\DeprecateIndexListFormatWithReplacement}{%
+ \blx@deprecateformat{lid}{Index list format}}
+
+\newrobustcmd*{\DeprecateFieldFormatWithReplacement}{%
+ \blx@deprecateformat{ffd}{Field format}}
+\newrobustcmd*{\DeprecateIndexFieldFormatWithReplacement}{%
+ \blx@deprecateformat{fid}{Index field format}}
+
+\newrobustcmd*{\DeprecateNameWrapperFormatWithReplacement}{%
+ \blx@deprecateformat{nwd}{Name wrapper format}}
+
+\newrobustcmd*{\DeprecateListWrapperFormatWithReplacement}{%
+ \blx@deprecateformat{lwd}{List wrapper format}}
+
+% [<format>]{<text>}
+\newrobustcmd{\blx@imc@printtext}[2][]{%
+ \ifblank{#2}
+ {\blx@nounit}
+ {\ifblank{#1}
+ {\let\blx@theformat\@firstofone}
+ {\blx@getformat\blx@theformat{ffd}{#1}{}}%
+ \ifdefvoid\blx@theformat
+ {\blx@nounit}
+ {\blx@begunit
+ \blx@theformat{#2}%
+ \blx@endunit}}}
+
+% This loops over all form/lang pairs defined for a lang and uses the first one it finds
+% by defining \blx@cmsform/\blx@cmslang according to what it finds
+% {bcp47tag}{entryfield}{entryfieldtype}
+\DeclareDocumentCommand{\blx@ifmsselect}
+ {m m m}
+ {\blx@imc@ifmsentryfield{#2}
+ {\boolfalse{selectms}%
+ % First check the current \blx@msform/\blx@mslang
+ % Must explicitly specify form/lang here and not rely on defaults as \blx@ifmsundef
+ % checks if *any* alternates are defined if no form/lang is passed
+ \blx@ifmsundef{#3}[\blx@msform][\blx@mslang]{#2}
+ % If not defined, then check the select list for the language (tag) of the entry
+ {\ifcsdef{blx@msselect@#1}
+ {\let\blx@tempa\@empty
+ \begingroup
+ \def\do##1{\do@i##1}% \blx@msselect@* list contains pairs like {form}{lang}|{form}{lang}
+ \def\do@i##1##2{%
+ \blx@ifmsundef{#3}[{##1}][{##2}]{#2}
+ {}
+ {% Found a field alternate, save form/lang values and exit listloop
+ \gappto\blx@tempa{\def\blx@cmsform{##1}}%
+ \gappto\blx@tempa{\def\blx@cmslang{##2}}%
+ \gappto\blx@tempa{\booltrue{selectms}}%
+ \listbreak}}%
+ \dolistcsloop{blx@msselect@#1}%
+ \endgroup
+ \blx@tempa\undef\blx@tempa}
+ {}}
+ {\booltrue{selectms}%
+ \let\blx@cmsform\blx@msform
+ \let\blx@cmslang\blx@mslang}% Found the current form/lang alternate
+ \ifbool{selectms}
+ {\@secondoftwo}% found an alternate
+ {\blx@imc@iffieldundef{langid}% No alternate found, check form/langid as last resort
+ {\@firstoftwo}
+ {\blx@ifmsundef{#3}[\blx@msform][\blx@lmslang]{#2}
+ {\@firstoftwo}
+ {\let\blx@cmsform\blx@msform
+ \let\blx@cmslang\blx@lmslang}%
+ \@secondoftwo}}}
+ {\blx@ifmsundef{#3}{#2}}} % Not a multiscript field, just do a normal undef check
+
+% [<format>][<msform>][<mslang>]{field}
+% O{} is an optional arg which defaults to nothing rather than xparse "-NoValue-"
+\DeclareDocumentCommand{\blx@imc@printfield}
+ {O{} O{} O{} m}
+ {\ifboolexpr {test {\ifblank{#2}} and test {\ifblank{#3}}}
+ {\blx@imc@iffieldundef{langid}
+ {\blx@ifmsselect{\blx@mslang}{#4}{field}}
+ {\blx@ifmsselect{\blx@lmslang}{#4}{field}}}
+ {\let\blx@cmsform\blx@msform%
+ \let\blx@cmslang\blx@mslang%
+ \ifblank{#2}{}{\edef\blx@cmsform{#2}}%
+ \ifblank{#3}{}{\edef\blx@cmslang{#3}}%
+ \blx@imc@iffieldundef[\blx@cmsform][\blx@cmslang]{#4}}%
+ {\blx@nounit}
+ {\blx@getformat\blx@theformat{ffd}{#1}{#4}%
+ \ifdefvoid\blx@theformat
+ {\blx@nounit}
+ {\blx@begunit
+ \edef\currentfield{#4}%
+ \blx@imc@ifmsentryfield{#4}
+ {\let\currentmsform\@empty
+ \let\currentmslang\@empty
+ \let\currentmsforms\@empty
+ \let\currentmslangs\@empty
+ \begingroup
+ % begin language for field mslang
+ \let\currentmsform\blx@cmsform%
+ \let\currentmslang\blx@cmslang%
+ \letcs\currentmsforms{abx@fieldmsforms@#4}%
+ \letcs\currentmslangs{abx@fieldmslangs@#4}%
+ \edef\blx@tempa{\csuse{blx@msmaplang@\currentmslang}}%
+ % Override language from any field-level mslang annotation
+ \ifcsdef{abx@annotation@literal@field@\currentmsform @\currentmslang @\currentfield @mslang}
+ {\edef\currentmslang{\csuse{abx@annotation@literal@field@\currentmsform @\currentmslang @\currentfield @mslang}}%
+ \edef\blx@tempa{\csuse{blx@msmaplang@\currentmslang}}}%
+ {}%
+ \ifdef\blx@thefieldlangenv
+ {\iftoggle{blx@autofieldlangstrings}
+ {\blx@langsetup{\blx@tempa}% must call this to load the .lbx
+ \csuse{abx@extras@\blx@tempa}%
+ \csuse{abx@strings@\blx@tempa}}
+ {}%
+ \blx@hook@initfieldlang
+ \csname\blx@thefieldlangenv\expandafter\endcsname\expandafter{\blx@tempa}}
+ {}%
+ \expandafter\expandafter
+ \expandafter\blx@theformat
+ \expandafter\expandafter
+ \expandafter{\csname abx@field@\currentmsform @\currentmslang @#4\endcsname}%
+ % end language for field mslang
+ \ifdef\blx@thefieldlangenv
+ {\blx@hook@endfieldlang
+ \csname end\blx@thefieldlangenv\endcsname}
+ {}%
+ \endgroup}
+ {\expandafter\expandafter
+ \expandafter\blx@theformat
+ \expandafter\expandafter
+ \expandafter{\csname abx@field@@@#4\endcsname}}%
+ \blx@endunit}}}
+
+% [<format>][<msform>][<mslang>]{field}
+\DeclareExpandableDocumentCommand{\blx@imc@indexfield}
+ {O{} O{} O{} m}
+ {\ifboolexpr {test {\ifblank{#2}} and test {\ifblank{#3}}}
+ {\blx@imc@iffieldundef{langid}
+ {\blx@ifmsselect{\blx@mslang}{#4}{field}}
+ {\blx@ifmsselect{\blx@lmslang}{#4}{field}}}
+ {\let\blx@cmsform\blx@msform%
+ \let\blx@cmslang\blx@mslang%
+ \ifblank{#2}{}{\edef\blx@cmsform{#2}}%
+ \ifblank{#3}{}{\edef\blx@cmslang{#3}}%
+ \blx@imc@iffieldundef[\blx@cmsform][\blx@cmslang]{#4}}%
+ {}
+ {\blx@getformat\blx@theformat{fid}{#1}{#4}%
+ \ifdefvoid\blx@theformat
+ {}
+ {\begingroup
+ \edef\currentfield{#4}%
+ \let\currentmsform\@empty
+ \let\currentmslang\@empty
+ \let\currentmsforms\@empty
+ \let\currentmslangs\@empty
+ \blx@imc@ifmsentryfield{#4}
+ {\let\currentmsform\blx@cmsform%
+ \let\currentmslang\blx@cmslang%
+ \letcs\currentmsforms{abx@fieldmsforms@#4}%
+ \letcs\currentmslangs{abx@fieldmslangs@#4}%
+ \edef\blx@tempa{\csuse{blx@msmaplang@\curentmslang}}%
+ \letcs\blx@tempb{abx@field@\currentmsform @\currentmslang @#4}%
+ \expandafter\blx@theformat\expandafter{\blx@tempb}}
+ {\letcs\blx@tempb{abx@field@@@#4}%
+ \expandafter\blx@theformat\expandafter{\blx@tempb}}%
+ \endgroup}}}
+
+% [<format>]{<file>}
+\newrobustcmd*{\blx@imc@printfile}[2][]{%
+ \iftoggle{blx@loadfiles}
+ {\IfFileExists{#2}
+ {\listxadd\blx@list@req@edit{#2}%
+ \blx@imc@printtext[{#1}]{\input{#2}\unspace}}
+ {\blx@nounit}}
+ {\blx@nounit}}
+
+% {<macro>}[<format>][<start>-<stop>][<msform>][<mslang>]
+% => <macro>{<format>}{<start>}{<stop>}{<msform>}{<mslang>}
+\DeclareDocumentCommand\blx@listargs
+ {m O{} >{\SplitArgument{1}{-}}O{} O{} O{}}
+ {\let\Start\@empty%
+ \let\Stop\@empty%
+ \ifblank{#3}
+ {}%
+ {\edef\Start{\@firstoftwo#3}%
+ \edef\Stop{\@secondoftwo#3}}%
+ \expandafter\IfNoValueTF\expandafter{\Stop}% Work around bug in xparse
+ {\def\Stop{}}
+ {}%
+ \protected@edef\z{\noexpand#1{#2}{\Start}{\Stop}{#4}{#5}}\z}
+
+% [<format>][<start>-<stop>]{<namelist>}
+\protected\def\blx@imc@printnames{%
+ \blx@listargs\blx@printnames}
+
+% {<format>}{<start>}{<stop>}{<msform>}{<mslang>}{<namelist>}
+\def\blx@printnames#1#2#3#4#5#6{%
+ \ifboolexpr {test {\ifblank{#4}} and test {\ifblank{#5}}}
+ {\blx@imc@iffieldundef{langid}
+ {\blx@ifmsselect{\blx@mslang}{#6}{name}}
+ {\blx@ifmsselect{\blx@lmslang}{#6}{name}}}
+ {\let\blx@cmsform\blx@msform%
+ \let\blx@cmslang\blx@mslang%
+ \ifblank{#4}{}{\edef\blx@cmsform{#4}}%
+ \ifblank{#5}{}{\edef\blx@cmslang{#5}}%
+ \blx@imc@ifnameundef[\blx@cmsform][\blx@cmslang]{#6}}%
+ {\blx@nounit}
+ {\blx@getformat\blx@thewrapperformat{nwd}{#1}{#6}%
+ \ifdefvoid\blx@thewrapperformat
+ {\blx@nounit}
+ {\blx@getformat\blx@theformat{nfd}{#1}{#6}%
+ \ifdefvoid\blx@theformat
+ {\blx@nounit}
+ {\blx@begunit
+ \blx@namesetup{#2}{#3}{\blx@cmsform}{\blx@cmslang}{#6}%
+ \blx@imc@ifmsentryfield{\currentname}
+ {% begin language for name list mslang
+ \begingroup
+ \edef\blx@tempa{\csuse{blx@msmaplang@\currentmslang}}%
+ % Override language from any field-level mslang annotation
+ \ifcsdef{abx@annotation@literal@field@\currentmsform @\currentmslang @\currentname @mslang}
+ {\edef\currentmslang{\csuse{abx@annotation@literal@field@\currentmsform @\currentmslang @\currentname @mslang}}%
+ \edef\blx@tempa{\csuse{blx@msmaplang@\currentmslang}}}%
+ {}%
+ \ifdef\blx@thefieldlangenv
+ {\iftoggle{blx@autofieldlangstrings}
+ {\blx@langsetup{\blx@tempa}% must call this to load the .lbx
+ \csuse{abx@extras@\blx@tempa}%
+ \csuse{abx@strings@\blx@tempa}}
+ {}%
+ \blx@hook@initfieldlang
+ \csname\blx@thefieldlangenv\expandafter\endcsname\expandafter{\blx@tempa}}
+ {}}
+ {}%
+ \blx@thewrapperformat{\expandafter\blx@nameparser\blx@thedata{}&}%
+ \blx@imc@ifmsentryfield{\currentname}
+ {% end language for name list mslang
+ \ifdef\blx@thefieldlangenv
+ {\blx@hook@endfieldlang
+ \csname end\blx@thefieldlangenv\endcsname}
+ {}%
+ \endgroup}
+ {}%
+ \blx@endunit}}}}
+
+\def\blx@namesetup#1#2#3#4#5{%
+ \def\currentname{#5}%
+ \let\currentmsform\@empty
+ \let\currentmslang\@empty
+ \let\currentmsforms\@empty
+ \let\currentmslangs\@empty
+ \c@listcount\@ne
+ \c@listtotal\csname c@#5\endcsname
+ \blx@namesetup@i{#3}{#4}{#5}%
+ \ifblank{#1}
+ {\c@liststart\@ne}
+ {\ifnum#1<\@ne
+ \c@liststart\@ne
+ \else
+ \c@liststart#1\relax
+ \fi}%
+ \ifblank{#2}
+ {\c@liststop\c@listtotal
+ \ifnum\c@liststop>\c@maxnames
+ \c@liststop\c@minnames
+ \ifnum\c@uniquelist>\c@liststop
+ \c@liststop\c@uniquelist
+ \fi
+ \fi}
+ {\ifnum#2>\c@listtotal
+ \c@liststop\c@listtotal
+ \else
+ \ifnum#2<\@ne
+ \c@liststop\@ne
+ \else
+ \c@liststop#2\relax
+ \fi
+ \fi}%
+ \ifboolexpr{test {\iftoggle{blx@pluralothers}}
+ and
+ test {\ifnumcomp{\value{listtotal}-\value{liststop}}{=}{1}}}
+ {\c@liststop\c@listtotal}
+ {}%
+ \blx@namecodes}
+
+\def\blx@namesetup@i#1#2#3{%
+ \blx@imc@ifmsentryfield{#3}
+ {\edef\currentmsform{#1}%
+ \edef\currentmslang{#2}%
+ \letcs\currentmsforms{abx@fieldmsforms@#3}%
+ \letcs\currentmslangs{abx@fieldmslangs@#3}%
+ \expandafter\expandafter
+ \expandafter\blx@namesetup@ii\csname abx@name@#1@#2@#3\endcsname}
+ {\expandafter\expandafter
+ \expandafter\blx@namesetup@ii\csname abx@name@@@#3\endcsname}}
+
+\def\blx@namesetup@ii#1#2{%
+ \c@uniquelist\z@
+ \ifblank{#1}
+ {}
+ {\blx@kv@setkeys{blx@opt@namelist}{#1}}%
+ \def\blx@thedata{#2}}
+
+% Biber-calculated info passed back to biblatex as an option in the .bbl
+% unlike stuff defined with \DeclareBiblatexOption and
+% \blx@DeclareBackendOption these are not 'real' options
+\blx@kv@defkey{blx@opt@namelist}{ul}{\c@uniquelist#1\relax}
+\blx@kv@defkey{blx@opt@name}{mslang}{\def\blx@nmslang{#1}}
+\blx@kv@defkey{blx@opt@name}{un}{\c@uniquename#1\relax}
+\blx@kv@defkey{blx@opt@name}{uniquepart}{\def\abx@field@@@uniquepart{#1}}
+\blx@kv@defkey{blx@opt@name}{hash}{\edef\abx@field@@@hash{\detokenize{#1}}}
+
+\newrobustcmd*{\bibinitperiod}{\adddot}
+\newrobustcmd*{\bibinitdelim}{\addnbspace}
+\newrobustcmd*{\bibinithyphendelim}{.\mbox{-}}
+\newrobustcmd*{\bibnamedelima}{\addhighpenspace}
+\newrobustcmd*{\bibnamedelimb}{\addlowpenspace}
+\newrobustcmd*{\bibnamedelimc}{\addhighpenspace}
+\newrobustcmd*{\bibnamedelimd}{\addlowpenspace}
+\newrobustcmd*{\bibnamedelimi}{\isdot\addnbspace}
+
+% [<format>][<start>-<stop>]{<namelist>}
+\protected\def\blx@imc@indexnames{%
+ \blx@listargs\blx@indexnames}
+
+% {<format>}{<start>}{<stop>}{<msform>}{<mslang>}{<namelist>}
+\def\blx@indexnames#1#2#3#4#5#6{%
+ \ifboolexpr {test {\ifblank{#4}} and test {\ifblank{#5}}}
+ {\blx@imc@iffieldundef{langid}
+ {\blx@ifmsselect{\blx@mslang}{#6}{name}}
+ {\blx@ifmsselect{\blx@lmslang}{#6}{name}}}
+ {\let\blx@cmsform\blx@msform%
+ \let\blx@cmslang\blx@mslang%
+ \ifblank{#4}{}{\edef\blx@cmsform{#4}}%
+ \ifblank{#5}{}{\edef\blx@cmslang{#5}}%
+ \blx@imc@ifnameundef[\blx@cmsform][\blx@cmslang]{#6}}%
+ {}
+ {\blx@getformat\blx@theformat{nid}{#1}{#6}%
+ \ifdefvoid\blx@theformat
+ {}
+ {\begingroup
+ \blx@namesetup{#2}{#3}{\blx@cmsform}{\blx@cmslang}{#6}%
+ \blx@indexnamesetup
+ \expandafter\blx@nameparser\blx@thedata{}&%
+ \endgroup}}}
+
+\def\blx@indexnamesetup{%
+ \let\bibinitperiod\bibindexinitperiod
+ \let\bibinitdelim\bibindexinitdelim
+ \let\bibinithyphendelim\bibindexinithyphendelim
+ \let\bibnamedelima\bibindexnamedelima
+ \let\bibnamedelimb\bibindexnamedelimb
+ \let\bibnamedelimc\bibindexnamedelimc
+ \let\bibnamedelimd\bibindexnamedelimd
+ \let\bibnamedelimi\bibindexnamedelimi}
+
+% {<name1>}{<name2>}{...}
+\long\def\blx@indexnameparser#1{%
+ \ifblank{#1}
+ {\blx@namebreak}
+ {\ifnum\c@listcount<\c@liststart
+ \else
+ \blx@indexnameparser@i#1%
+ \fi
+ \advance\c@listcount\@ne
+ \ifnum\c@listcount>\c@liststop
+ \expandafter\blx@namebreak
+ \fi
+ \blx@indexnameparser}}
+
+% {name opts}{nameparts}
+\long\def\blx@indexnameparser@i#1#2{%
+ \begingroup
+ \ifblank{#1}
+ {}
+ {\blx@kv@setkeys{blx@opt@name}{#1}}%
+ % reset all the nameparts to empty between names
+ \def\do##1{%
+ \cslet{namepart##1}\@empty
+ \cslet{namepart##1i}\@empty
+ \cslet{namepart##1un}\@empty}%
+ \expandafter\docsvlist\expandafter{\blx@datamodel@constant@nameparts}%
+ \blx@kv@setkeys{blx@opt@namepart}{#2}% Extract nameparts information
+ \blx@theformat{}%
+ \endgroup}
+
+% {<name1>}{<name2>}{...}
+\long\def\blx@nameparser#1{%
+ \ifblank{#1}
+ {\blx@namebreak}
+ {\ifnum\c@listcount<\c@liststart
+ \else
+ \blx@nameparser@i#1%
+ \fi
+ \advance\c@listcount\@ne
+ \ifnum\c@listcount>\c@liststop
+ \expandafter\blx@namebreak
+ \fi
+ \blx@nameparser}}
+
+% {name opts}{nameparts}
+\long\def\blx@nameparser@i#1#2{%
+ \begingroup
+ \let\blx@nmslang\@empty
+ \ifblank{#1}
+ {}
+ {\blx@kv@setkeys{blx@opt@name}{#1}}%
+ % reset all the nameparts to empty between names
+ \def\do##1{%
+ \cslet{namepart##1}\@empty
+ \cslet{namepart##1i}\@empty
+ \cslet{namepart##1un}\@empty}%
+ \expandafter\docsvlist\expandafter{\blx@datamodel@constant@nameparts}%
+ \blx@kv@setkeys{blx@opt@namepart}{#2}% Extract nameparts information
+ % Extract all alternate nameparts for use in format
+ \begingroup
+ \edef\blx@tempc{\endgroup
+ \noexpand\blx@kv@setkeys{blx@opt@nameparts}{\csuse{abx@nameparts@\currentname @\thelistcount}}}%
+ \blx@tempc
+ % For per-name lang switching, see name:langswitchon/off in biblatex.def
+ % This is because the format wraps everything, including namelist delims like "and"
+ % which then are set according to the lang strings of the name list item and this is
+ % not what we want - putting the lang switching in the format makes it granular
+ % to just the name list item data
+ \blx@theformat{}%
+ \endgroup}
+
+\long\def\blx@namebreak#1&{}
+
+% [<format>][<start>-<stop>][<msform>][<mslang>]{<plainlist>}
+\protected\def\blx@imc@printlist{%
+ \blx@listargs\blx@printlist}
+
+% {<format>}{<start>}{<stop>}{<msform>}{<mslang>}{<plainlist>}
+\def\blx@printlist#1#2#3#4#5#6{%
+ \ifboolexpr {test {\ifblank{#4}} and test {\ifblank{#5}}}
+ {\blx@imc@iffieldundef{langid}
+ {\blx@ifmsselect{\blx@mslang}{#6}{list}}
+ {\blx@ifmsselect{\blx@lmslang}{#6}{list}}}
+ {\let\blx@cmsform\blx@msform%
+ \let\blx@cmslang\blx@mslang%
+ \ifblank{#4}{}{\edef\blx@cmsform{#4}}%
+ \ifblank{#5}{}{\edef\blx@cmslang{#5}}%
+ \blx@imc@iflistundef[\blx@cmsform][\blx@cmslang]{#6}}%
+ {\blx@nounit}
+ {\blx@getformat\blx@thewrapperformat{lwd}{#1}{#6}%
+ \ifdefvoid\blx@thewrapperformat
+ {\blx@nounit}
+ {\blx@getformat\blx@theformat{lfd}{#1}{#6}%
+ \ifdefvoid\blx@theformat
+ {\blx@nounit}
+ {\blx@begunit
+ \blx@listsetup{#2}{#3}{\blx@cmsform}{\blx@cmslang}{#6}%
+ \blx@imc@ifmsentryfield{\currentlist}
+ {% begin language for list mslang
+ \begingroup
+ \edef\blx@tempa{\csuse{blx@msmaplang@\currentmslang}}%
+ % Override language from any field-level mslang annotation
+ \ifcsdef{abx@annotation@literal@field@\currentmsform @\currentmslang @\currentlist @mslang}
+ {\edef\currentmslang{\csuse{abx@annotation@literal@field@\currentmsform @\currentmslang @\currentlist @mslang}}%
+ \edef\blx@tempa{\csuse{blx@msmaplang@\currentmslang}}}%
+ {}%
+ \ifdef\blx@thefieldlangenv
+ {\iftoggle{blx@autofieldlangstrings}
+ {\blx@langsetup{\blx@tempa}% must call this to load the .lbx
+ \csuse{abx@extras@\blx@tempa}%
+ \csuse{abx@strings@\blx@tempa}}
+ \blx@hook@initfieldlang
+ \csname\blx@thefieldlangenv\expandafter\endcsname\expandafter{\blx@tempa}}
+ {}}
+ {}%
+ \blx@thewrapperformat{\expandafter\blx@listparser\blx@thedata{}&}%
+ \blx@imc@ifmsentryfield{\currentlist}
+ {% end language for list mslang
+ \ifdef\blx@thefieldlangenv
+ {\blx@hook@endfieldlang
+ \csname end\blx@thefieldlangenv\endcsname}
+ {}%
+ \endgroup}
+ {}%
+ \blx@endunit}}}}
+
+\def\blx@listsetup#1#2#3#4#5{%
+ \def\currentlist{#5}%
+ \let\currentmsform\@empty
+ \let\currentmslang\@empty
+ \let\currentmsforms\@empty
+ \let\currentmslangs\@empty
+ \c@listcount\@ne
+ \expandafter\c@listtotal\csname c@#5\endcsname
+ \blx@imc@ifmsentryfield{#5}
+ {\letcs\blx@thedata{abx@list@#3@#4@#5}%
+ \edef\currentmsform{#3}%
+ \edef\currentmslang{#4}%
+ \letcs\currentmsforms{abx@fieldmsforms@#5}%
+ \letcs\currentmslangs{abx@fieldmslangs@#5}}
+ {\letcs\blx@thedata{abx@list@@@#5}}%
+ \ifblank{#1}
+ {\c@liststart\@ne}
+ {\ifnum#1<\@ne
+ \c@liststart\@ne
+ \else
+ \c@liststart#1\relax
+ \fi}%
+ \ifblank{#2}
+ {\c@liststop\c@listtotal
+ \ifnum\c@listtotal>\c@maxitems
+ \c@liststop\c@minitems
+ \fi}
+ {\ifnum#2>\c@listtotal
+ \c@liststop\c@listtotal
+ \else
+ \ifnum#2<\@ne
+ \c@liststop\@ne
+ \else
+ \c@liststop#2\relax
+ \fi
+ \fi}}
+
+% [<format>][<start>-<stop>]{<plainlist>}
+\protected\def\blx@imc@indexlist{%
+ \blx@listargs\blx@indexlist}
+
+% {<format>}{<start>}{<stop>}{<msform>}{<mslang>}{<plainlist>}
+\def\blx@indexlist#1#2#3#4#5#6{%
+ \ifboolexpr {test {\ifblank{#4}} and test {\ifblank{#5}}}
+ {\blx@imc@iffieldundef{langid}
+ {\blx@ifmsselect{\blx@mslang}{#6}{list}}
+ {\blx@ifmsselect{\blx@lmslang}{#6}{list}}}
+ {\let\blx@cmsform\blx@msform%
+ \let\blx@cmslang\blx@mslang%
+ \ifblank{#4}{}{\edef\blx@cmsform{#4}}%
+ \ifblank{#5}{}{\edef\blx@cmslang{#5}}%
+ \blx@imc@iflistundef[\blx@cmsform][\blx@cmslang]{#6}}%
+ {}
+ {\blx@getformat\blx@theformat{lid}{#1}{#6}%
+ \ifdefvoid\blx@theformat
+ {}
+ {\begingroup
+ \blx@listsetup{#2}{#3}{\blx@cmsform}{\blx@cmslang}{#6}%
+ \expandafter\blx@listparser\blx@thedata{}&%
+ \endgroup}}}
+
+% {<item1>}{<item2>}{...}
+\long\def\blx@indexlistparser#1{%
+ \ifblank{#1}
+ {\blx@listbreak}
+ {\ifnum\c@listcount<\c@liststart
+ \else
+ \blx@theformat{#1}%
+ \fi
+ \advance\c@listcount\@ne
+ \ifnum\c@listcount>\c@liststop
+ \expandafter\blx@listbreak
+ \fi
+ \blx@indexlistparser}}
+
+% {<item1>}{<item2>}{...}
+\long\def\blx@listparser#1{%
+ \ifblank{#1}
+ {\blx@listbreak}
+ {\ifnum\c@listcount<\c@liststart
+ \else
+ \blx@imc@ifmsentryfield{\currentlist}
+ {% Extract all alternate listitems for use in format
+ \begingroup
+ % Need expand the actual value here only once, as in fielddef otherwise
+ % we get into problems with setkeys when values contain things like \emph{}
+ % Since setkeys needs a string of keyvals, we have to edef when the keyvals
+ % are the value of some macro and this fully expands output macros which might
+ % in plain list values like \emph{} etc.
+ \expandafter\expandafter\expandafter\def\expandafter\expandafter\expandafter\blx@tempb\expandafter\expandafter\expandafter{\expandafter\expandonce\csname abx@listitems@\currentlist @\thelistcount\endcsname}%
+ \edef\blx@tempd{\endgroup
+ \noexpand\blx@kv@setkeys{blx@opt@listitems}{\blx@tempb}}%
+ \blx@tempd}
+ {}%
+ % per-list item lang switching is done in list:langswitchon/off in biblatex.def
+ % This is because the format wraps everything, including list delims like "and"
+ % which then are set according to the lang strings of the list item and this is
+ % not what we want - putting the lang switching in the format makes it granular
+ % to just the list item data
+ \blx@theformat{#1}%
+ \fi
+ \advance\c@listcount\@ne
+ \ifnum\c@listcount>\c@liststop
+ \expandafter\blx@listbreak
+ \fi
+ \blx@listparser}}
+
+\long\def\blx@listbreak#1&{}
+
+% <*>{<key>}{<code>}
+\protected\def\blx@imc@entrydata{%
+ \@ifstar
+ {\blx@xsanitizeafter{\blx@imc@entrydata@i\blx@saveentry}}
+ {\blx@xsanitizeafter{\blx@imc@entrydata@i{}}}}
+
+\long\def\blx@imc@entrydata@i#1#2#3{%
+ \blx@getrefcontext{#2}%
+ \blx@ifdata{#2}
+ {\begingroup
+ #1%
+ \blx@resetdata
+ \blx@getdata{#2}%
+ \blx@entrysetcount
+ \blx@setoptions@type\abx@field@@@entrytype
+ \blx@setoptions@entry
+ \addtocounter{instcount}\@ne
+ \blx@execute
+ \blx@beglangbib#3\blx@endlangbib
+ \endgroup}
+ {}}
+
+\protected\def\blx@imc@entryset#1#2{%
+ \blx@imc@iffieldundef{entrykey}
+ {}
+ {\begingroup
+ \long\def\blx@entryset@precode{#1}%
+ \long\def\blx@entryset@postcode{#2}%
+ \let\finentry\blx@finentry@inset
+ \let\do\blx@entryset
+ \blx@imc@docsvfield{entryset}%
+ \endgroup}}
+
+\def\blx@entryset#1{%
+ \blx@ifdata{#1}
+ {\begingroup
+ \blx@imc@clearlist{pageref}%
+ \blx@getdata{#1}%
+ \blx@setoptions@type\abx@field@@@entrytype
+ \blx@setoptions@entry
+ \global\blx@entrysetcounter\@ne
+ \edef\abx@field@@@entrysetcount{\the\blx@entrysetcounter}%
+ \blx@execute
+ \blx@beglangbib
+ \blx@begunit
+ \blx@anchor
+ \blx@entryset@precode
+ \blx@driver{\blx@imc@thefield{entrytype}}%
+ \blx@entryset@postcode
+ \blx@endunit
+ \blx@endlangbib
+ \endgroup}
+ {}%
+ \let\do\blx@entryset@i}
+
+\def\blx@entryset@i#1{%
+ \blx@ifdata{#1}
+ {\begingroup
+ \blx@resetdata
+ \blx@getdata{#1}%
+ \blx@setoptions@type\abx@field@@@entrytype
+ \blx@setoptions@entry
+ \global\advance\blx@entrysetcounter\@ne
+ \edef\abx@field@@@entrysetcount{\the\blx@entrysetcounter}%
+ \addtocounter{instcount}\@ne
+ \blx@execute
+ \blx@beglangbib
+ \blx@begunit
+ \blx@anchor
+ \blx@entryset@precode
+ \blx@driver{\blx@imc@thefield{entrytype}}%
+ \blx@entryset@postcode
+ \blx@endunit
+ \blx@endlangbib
+ \endgroup}
+ {\blx@nounit}}
+
+\blx@regimcs{%
+ \printtext \printfield \printlist \printnames \printfile
+ \indexfield \indexlist \indexnames \entrydata \entryset}
+
+\let\blx@bibstringsets\@empty
+
+% {<set>}{<bibstring_1>,...,<bibstring_n>}
+\newrobustcmd*{\DeclareBibstringSet}[1]{%
+ \listadd\blx@bibstringsets{#1}%
+ \def\do##1{%
+ \csdef{blx@bibstringset@string@##1}{#1}%
+ \listcsadd{blx@bibstringset@set@#1}{##1}}%
+ \docsvlist}
+
+% {<set>}
+\newrobustcmd*{\UndeclareBibstringSet}[1]{%
+ \def\do##1{\csundef{blx@bibstringset@string@##1}}%
+ \dolistcsloop{blx@bibstringset@set@#1}%
+ \csundef{blx@bibstringset@set@#1}%
+ \UndeclareBibstringSetFormat{#1}}
+
+\newrobustcmd*{\UndeclareBibstringSets}{%
+ \forlistloop{\UndeclareBibstringSet}{\blx@bibstringsets}%
+ \let\blx@bibstringsets\@empty}
+
+% {<set>}{<code>}
+\newrobustcmd*{\DeclareBibstringSetFormat}[1]{%
+ \csdef{blx@bibstringsetformat@#1}##1}
+
+% {<set>}
+\newrobustcmd*{\UndeclareBibstringSetFormat}[1]{%
+ \csundef{blx@bibstringsetformat@#1}}
+
+% {<wrapper>}{<string (name)>}{<text (derived from string)>}
+\def\blx@wrapbibstring#1#2#3{%
+ \ifcsundef{blx@bibstringset@string@#2}
+ {#1{#3}}
+ {\ifcsundef{blx@bibstringsetformat@\csuse{blx@bibstringset@string@#2}}
+ {#1{#3}}
+ {#1{\csuse{blx@bibstringsetformat@\csuse{blx@bibstringset@string@#2}}
+ {#3}}}}}
+
+%% Localization
+
+% {<wrapper>}{<long/short>}{<string>}{<print code>}
+% <print code> is executed when the bibstring is defined
+% it differs between the \bib...string versions
+% in <print code> \blx@tempa should be used as <string>
+\protected\def\blx@met@bibstring#1#2#3#4{%
+ \blx@begunit
+ \blx@hyphenreset
+ \blx@bibstringsimple
+ \lowercase{\edef\blx@tempa{#3}}%
+ \ifcsundef{#2@\blx@tempa}
+ {\blx@warn@nostring\blx@tempa
+ \blx@endnounit}
+ {#4}}
+
+% [<wrapper>]{<string>}
+\newrobustcmd*{\blx@imc@bibstring}[2][\@firstofone]{%
+ \blx@bibstring{#1}{\abx@str}{#2}}
+
+\newrobustcmd*{\blx@imc@biblstring}[2][\@firstofone]{%
+ \blx@bibstring{#1}{abx@lstr}{#2}}
+
+\newrobustcmd*{\blx@imc@bibsstring}[2][\@firstofone]{%
+ \blx@bibstring{#1}{abx@sstr}{#2}}
+
+\def\blx@bibstringsimple{%
+ \let\bibstring\blx@imc@bibxstring
+ \let\biblstring\blx@imc@bibxlstring
+ \let\bibsstring\blx@imc@bibxsstring}
+
+\def\blx@bibstringnormal{%
+ \let\bibstring\blx@imc@bibstring
+ \let\biblstring\blx@imc@biblstring
+ \let\bibsstring\blx@imc@bibsstring}
+
+\protected\def\blx@bibstring#1#2#3{%
+ \blx@met@bibstring{#1}{#2}{#3}
+ {\blx@imc@ifcapital
+ {\blx@wrapbibstring{#1}{\blx@tempa}{\MakeCapital{\csuse{#2@\blx@tempa}}}}
+ {\blx@wrapbibstring{#1}{\blx@tempa}{\csuse{#2@\blx@tempa}}}%
+ \blx@endunit}}
+
+% [<wrapper>]{<string>}
+\newrobustcmd*{\blx@imc@bibncpstring}[2][\@firstofone]{%
+ \blx@bibncpstring{#1}{\abx@str}{#2}}
+
+\newrobustcmd*{\blx@imc@bibncplstring}[2][\@firstofone]{%
+ \blx@bibncpstring{#1}{abx@lstr}{#2}}
+
+\newrobustcmd*{\blx@imc@bibncpsstring}[2][\@firstofone]{%
+ \blx@bibncpstring{#1}{abx@sstr}{#2}}
+
+\protected\def\blx@bibncpstring#1#2#3{%
+ \blx@met@bibstring{#1}{#2}{#3}
+ {\blx@wrapbibstring{#1}{\blx@tempa}{\csuse{#2@\blx@tempa}}%
+ \blx@endunit}}
+
+% [<wrapper>]{<string>}
+\newrobustcmd*{\blx@imc@bibcpstring}[2][\@firstofone]{%
+ \blx@bibcpstring{#1}{\abx@str}{#2}}
+
+\newrobustcmd*{\blx@imc@bibcplstring}[2][\@firstofone]{%
+ \blx@bibcpstring{#1}{abx@lstr}{#2}}
+
+\newrobustcmd*{\blx@imc@bibcpsstring}[2][\@firstofone]{%
+ \blx@bibcpstring{#1}{abx@sstr}{#2}}
+
+\protected\def\blx@bibcpstring#1#2#3{%
+ \blx@met@bibstring{#1}{#2}{#3}
+ {\blx@wrapbibstring{#1}{\blx@tempa}{\MakeCapital{\csuse{#2@\blx@tempa}}}%
+ \blx@endunit}}
+
+% [<wrapper>]{<string>}
+\newrobustcmd*{\blx@imc@biblcstring}[2][\@firstofone]{%
+ \blx@biblcstring{#1}{\abx@str}{#2}}
+
+\newrobustcmd*{\blx@imc@biblclstring}[2][\@firstofone]{%
+ \blx@biblcstring{#1}{abx@lstr}{#2}}
+
+\newrobustcmd*{\blx@imc@biblcsstring}[2][\@firstofone]{%
+ \blx@biblcstring{#1}{abx@sstr}{#2}}
+
+\protected\def\blx@biblcstring#1#2#3{%
+ \blx@met@bibstring{#1}{#2}{#3}
+ {\blx@wrapbibstring{#1}{\blx@tempa}{\blx@maketext@lowercase{\csuse{#2@\blx@tempa}}}%
+ \blx@endunit}}
+
+% [<wrapper>]{<string>}
+\newrobustcmd*{\blx@imc@bibucstring}[2][\@firstofone]{%
+ \blx@bibucstring{#1}{\abx@str}{#2}}
+
+\newrobustcmd*{\blx@imc@bibuclstring}[2][\@firstofone]{%
+ \blx@bibucstring{#1}{abx@lstr}{#2}}
+
+\newrobustcmd*{\blx@imc@bibucsstring}[2][\@firstofone]{%
+ \blx@bibucstring{#1}{abx@sstr}{#2}}
+
+\protected\def\blx@bibucstring#1#2#3{%
+ \blx@met@bibstring{#1}{#2}{#3}
+ {\blx@wrapbibstring{#1}{\blx@tempa}{\blx@maketext@uppercase{\csuse{#2@\blx@tempa}}}%
+ \blx@endunit}}
+
+% {<string>}
+\def\blx@imc@bibxstring#1{%
+ \blx@bibxstring{\abx@str}{#1}}
+
+\def\blx@imc@bibxlstring#1{%
+ \blx@bibxstring{abx@lstr}{#1}}
+
+\def\blx@imc@bibxsstring#1{%
+ \blx@bibxstring{abx@sstr}{#1}}
+
+\def\blx@bibxstring#1#2{%
+ \ifcsundef{#1@#2}
+ {\protect\blx@warn@nostring{#2}}
+ {\csuse{#1@#2}}}
+
+% {<string>}{<true>}{<false>}
+\def\blx@imc@ifbibstring#1{%
+ \ifcsundef{\abx@str @\detokenize{#1}}
+ {\@secondoftwo}
+ {\@firstoftwo}}
+
+\def\blx@imc@ifbibxstring#1{%
+ \blx@xsanitizeafter\ifcsundef{\abx@str @#1}
+ {\@secondoftwo}
+ {\@firstoftwo}}
+
+% [<msform>][<mslang>]{<field>}{<true>}{<false>}
+\DeclareExpandableDocumentCommand{\blx@imc@iffieldbibstring}
+ {O{\blx@msform} O{\blx@lmslang} m}
+ {\blx@imc@iffieldundef[{#1}][{#2}]{#3}
+ {\@secondoftwo}
+ {\blx@imc@ifmsentryfield{#3}
+ {\def\blx@tempa{abx@field@#1@#2@#3}}
+ {\def\blx@tempa{abx@field@@@#3}}%
+ \ifcsundef{\abx@str @\detokenize\expandafter
+ \expandafter\expandafter{%
+ \csname\blx@tempa\endcsname}}
+ {\@secondoftwo}
+ {\@firstoftwo}}}
+
+% [<msform>][<mslang>]{<field>}{<string>}{<true>}{<false>}
+\DeclareExpandableDocumentCommand{\blx@imc@iffieldplusstringbibstring}
+ {O{\blx@msform} O{\blx@lmslang} m m}
+ {\blx@imc@iffieldundef[{#1}][{#2}]{#3}
+ {\@secondoftwo}
+ {\blx@imc@ifmsentryfield{#3}
+ {\def\blx@tempa{abx@field@#1@#2@#3}}
+ {\def\blx@tempa{abx@field@@@#3}}%
+ \ifcsundef{\abx@str @\detokenize\expandafter
+ \expandafter\expandafter{%
+ \csname\blx@tempa\endcsname}#4}
+ {\@secondoftwo}
+ {\@firstoftwo}}}
+
+\blx@regimcs{%
+ \bibstring \biblstring \bibsstring
+ \bibxstring \bibxlstring \bibxsstring
+ \bibncpstring \bibncplstring \bibncpsstring
+ \bibcpstring \bibcplstring \bibcpsstring
+ \biblcstring \biblclstring \biblcsstring
+ \bibucstring \bibuclstring \bibucsstring
+ \ifbibstring \ifbibxstring \iffieldbibstring
+ \iffieldplusstringbibstring}
+
+% \DeclareCaseChangeEquivalent is available in
+% LaTeX 2022-06-01-PL5
+% the older code works-ish for LaTeX before 2022-06-01
+% it errors with 2022-06-01-PL4
+% but we'll not guard against this specific PL
+\ifundef\DeclareCaseChangeEquivalent
+ {\let\blx@hook@uc\relax
+ \let\blx@hook@lc\relax
+ %
+ \AtEndPreamble{%
+ \toggletrue{blx@tempa}%
+ \toggletrue{blx@tempb}%
+ \expandafter\patchcmd\csname MakeUppercase \endcsname
+ {\protected@edef}
+ {\blx@hook@uc\protected@edef}
+ {\togglefalse{blx@tempa}}
+ {}%
+ \expandafter\patchcmd\csname MakeLowercase \endcsname
+ {\protected@edef}
+ {\blx@hook@lc\protected@edef}
+ {\togglefalse{blx@tempb}}
+ {}%
+ \@ifpackageloaded{textcase}
+ {\expandafter\patchcmd\csname MakeUppercase \endcsname
+ {\def\i}
+ {\blx@hook@uc\def\i}
+ {\togglefalse{blx@tempa}}
+ {}%
+ \expandafter\patchcmd\csname MakeLowercase \endcsname
+ {\@uclcnotmath{}}
+ {\@uclcnotmath{\blx@hook@lc}}
+ {\togglefalse{blx@tempb}}
+ {}%
+ \expandafter\patchcmd\csname MakeTextUppercase \endcsname
+ {\def\i}
+ {\blx@hook@uc\def\i}
+ {}
+ {}%
+ \expandafter\patchcmd\csname MakeTextLowercase \endcsname
+ {\@uclcnotmath{}}
+ {\@uclcnotmath{\blx@hook@lc}}
+ {}
+ {}}
+ {}%
+ \iftoggle{blx@tempa}{\blx@err@patch{\string\MakeUppercase}}{}%
+ \iftoggle{blx@tempb}{\blx@err@patch{\string\MakeLowercase}}{}%
+ }
+ %
+ \appto\blx@blxinit{%
+ \def\blx@hook@uc{%
+ \def\bibstring{\blx@imc@bibucstring}%
+ \def\biblstring{\blx@imc@bibuclstring}%
+ \def\bibsstring{\blx@imc@bibucsstring}%
+ \def\biblcstring{\blx@imc@bibucstring}%
+ \def\biblclstring{\blx@imc@bibuclstring}%
+ \def\biblcsstring{\blx@imc@bibucsstring}%
+ \def\bibcpstring{\blx@imc@bibucstring}%
+ \def\bibcplstring{\blx@imc@bibuclstring}%
+ \def\bibcpsstring{\blx@imc@bibucsstring}}%
+ \def\blx@hook@lc{%
+ \def\bibstring{\blx@imc@biblcstring}%
+ \def\biblstring{\blx@imc@biblclstring}%
+ \def\bibsstring{\blx@imc@biblcsstring}%
+ \def\bibucstring{\blx@imc@biblcstring}%
+ \def\bibuclstring{\blx@imc@biblclstring}%
+ \def\bibucsstring{\blx@imc@biblcsstring}%
+ \def\bibcpstring{\blx@imc@biblcstring}%
+ \def\bibcplstring{\blx@imc@biblclstring}%
+ \def\bibcpsstring{\blx@imc@biblcsstring}}}}
+ {\DeclareCaseChangeEquivalent{\bibstring}{%
+ \CaseSwitch
+ {\blx@imc@bibstring}
+ {\blx@imc@bibucstring}
+ {\blx@imc@biblcstring}
+ {\blx@imc@bibcpstring}}
+ \DeclareCaseChangeEquivalent{\biblstring}{%
+ \CaseSwitch
+ {\blx@imc@biblstring}
+ {\blx@imc@bibuclstring}
+ {\blx@imc@biblclstring}
+ {\blx@imc@bibcplstring}}
+ \DeclareCaseChangeEquivalent{\bibsstring}{%
+ \CaseSwitch
+ {\blx@imc@bibsstring}
+ {\blx@imc@bibucsstring}
+ {\blx@imc@biblcsstring}
+ {\blx@imc@bibcpsstring}}
+ \DeclareCaseChangeEquivalent{\biblcstring}{%
+ \CaseSwitch
+ {\blx@imc@bibstring}
+ {\blx@imc@bibucstring}
+ {\blx@imc@biblcstring}
+ {\blx@imc@bibcpstring}}
+ \DeclareCaseChangeEquivalent{\biblclstring}{%
+ \CaseSwitch
+ {\blx@imc@biblstring}
+ {\blx@imc@bibuclstring}
+ {\blx@imc@biblclstring}
+ {\blx@imc@bibcplstring}}
+ \DeclareCaseChangeEquivalent{\biblcsstring}{%
+ \CaseSwitch
+ {\blx@imc@bibsstring}
+ {\blx@imc@bibucsstring}
+ {\blx@imc@biblcsstring}
+ {\blx@imc@bibcpsstring}}
+ \DeclareCaseChangeEquivalent{\bibucstring}{%
+ \CaseSwitch
+ {\blx@imc@bibstring}
+ {\blx@imc@bibucstring}
+ {\blx@imc@biblcstring}
+ {\blx@imc@bibcpstring}}
+ \DeclareCaseChangeEquivalent{\bibuclstring}{%
+ \CaseSwitch
+ {\blx@imc@biblstring}
+ {\blx@imc@bibuclstring}
+ {\blx@imc@biblclstring}
+ {\blx@imc@bibcplstring}}
+ \DeclareCaseChangeEquivalent{\bibucsstring}{%
+ \CaseSwitch
+ {\blx@imc@bibsstring}
+ {\blx@imc@bibucsstring}
+ {\blx@imc@biblcsstring}
+ {\blx@imc@bibcpsstring}}
+ \DeclareCaseChangeEquivalent{\bibcpstring}{%
+ \CaseSwitch
+ {\blx@imc@bibstring}
+ {\blx@imc@bibucstring}
+ {\blx@imc@biblcstring}
+ {\blx@imc@bibcpstring}}
+ \DeclareCaseChangeEquivalent{\bibcplstring}{%
+ \CaseSwitch
+ {\blx@imc@biblstring}
+ {\blx@imc@bibuclstring}
+ {\blx@imc@biblclstring}
+ {\blx@imc@bibcplstring}}
+ \DeclareCaseChangeEquivalent{\bibcpsstring}{%
+ \CaseSwitch
+ {\blx@imc@bibsstring}
+ {\blx@imc@bibucsstring}
+ {\blx@imc@biblcsstring}
+ {\blx@imc@bibcpsstring}}}
+
+\def\abx@dostrings{%
+ \do{bibliography}%
+ \do{references}%
+ \do{shorthands}%
+ \do{editor}%
+ \do{editors}%
+ \do{compiler}%
+ \do{compilers}%
+ \do{redactor}%
+ \do{redactors}%
+ \do{reviser}%
+ \do{revisers}%
+ \do{founder}%
+ \do{founders}%
+ \do{continuator}%
+ \do{continuators}%
+ \do{collaborator}%
+ \do{collaborators}%
+ \do{translator}%
+ \do{translators}%
+ \do{commentator}%
+ \do{commentators}%
+ \do{annotator}%
+ \do{annotators}%
+ \do{commentary}%
+ \do{annotations}%
+ \do{introduction}%
+ \do{foreword}%
+ \do{afterword}%
+ \do{editortr}%
+ \do{editorstr}%
+ \do{editorco}%
+ \do{editorsco}%
+ \do{editoran}%
+ \do{editorsan}%
+ \do{editorin}%
+ \do{editorsin}%
+ \do{editorfo}%
+ \do{editorsfo}%
+ \do{editoraf}%
+ \do{editorsaf}%
+ \do{editortrco}%
+ \do{editorstrco}%
+ \do{editortran}%
+ \do{editorstran}%
+ \do{editortrin}%
+ \do{editorstrin}%
+ \do{editortrfo}%
+ \do{editorstrfo}%
+ \do{editortraf}%
+ \do{editorstraf}%
+ \do{editorcoin}%
+ \do{editorscoin}%
+ \do{editorcofo}%
+ \do{editorscofo}%
+ \do{editorcoaf}%
+ \do{editorscoaf}%
+ \do{editoranin}%
+ \do{editorsanin}%
+ \do{editoranfo}%
+ \do{editorsanfo}%
+ \do{editoranaf}%
+ \do{editorsanaf}%
+ \do{editortrcoin}%
+ \do{editorstrcoin}%
+ \do{editortrcofo}%
+ \do{editorstrcofo}%
+ \do{editortrcoaf}%
+ \do{editorstrcoaf}%
+ \do{editortranin}%
+ \do{editorstranin}%
+ \do{editortranfo}%
+ \do{editorstranfo}%
+ \do{editortranaf}%
+ \do{editorstranaf}%
+ \do{translatorco}%
+ \do{translatorsco}%
+ \do{translatoran}%
+ \do{translatorsan}%
+ \do{translatorin}%
+ \do{translatorsin}%
+ \do{translatorfo}%
+ \do{translatorsfo}%
+ \do{translatoraf}%
+ \do{translatorsaf}%
+ \do{translatorcoin}%
+ \do{translatorscoin}%
+ \do{translatorcofo}%
+ \do{translatorscofo}%
+ \do{translatorcoaf}%
+ \do{translatorscoaf}%
+ \do{translatoranin}%
+ \do{translatorsanin}%
+ \do{translatoranfo}%
+ \do{translatorsanfo}%
+ \do{translatoranaf}%
+ \do{translatorsanaf}%
+ \do{byauthor}%
+ \do{byeditor}%
+ \do{bycompiler}%
+ \do{byredactor}%
+ \do{byreviser}%
+ \do{byreviewer}%
+ \do{byfounder}%
+ \do{bycontinuator}%
+ \do{bycollaborator}%
+ \do{bytranslator}%
+ \do{bycommentator}%
+ \do{byannotator}%
+ \do{withcommentator}%
+ \do{withannotator}%
+ \do{withintroduction}%
+ \do{withforeword}%
+ \do{withafterword}%
+ \do{organizer}%
+ \do{organizers}%
+ \do{byorganizer}%
+ \do{byeditortr}%
+ \do{byeditorco}%
+ \do{byeditoran}%
+ \do{byeditorin}%
+ \do{byeditorfo}%
+ \do{byeditoraf}%
+ \do{byeditortrco}%
+ \do{byeditortran}%
+ \do{byeditortrin}%
+ \do{byeditortrfo}%
+ \do{byeditortraf}%
+ \do{byeditorcoin}%
+ \do{byeditorcofo}%
+ \do{byeditorcoaf}%
+ \do{byeditoranin}%
+ \do{byeditoranfo}%
+ \do{byeditoranaf}%
+ \do{byeditortrcoin}%
+ \do{byeditortrcofo}%
+ \do{byeditortrcoaf}%
+ \do{byeditortranin}%
+ \do{byeditortranfo}%
+ \do{byeditortranaf}%
+ \do{bytranslatorco}%
+ \do{bytranslatoran}%
+ \do{bytranslatorin}%
+ \do{bytranslatorfo}%
+ \do{bytranslatoraf}%
+ \do{bytranslatorcoin}%
+ \do{bytranslatorcofo}%
+ \do{bytranslatorcoaf}%
+ \do{bytranslatoranin}%
+ \do{bytranslatoranfo}%
+ \do{bytranslatoranaf}%
+ \do{and}%
+ \do{andothers}%
+ \do{andmore}%
+ \do{volume}%
+ \do{volumes}%
+ \do{involumes}%
+ \do{part}%
+ \do{jourvol}%
+ \do{jourser}%
+ \do{newseries}%
+ \do{oldseries}%
+ \do{edition}%
+ \do{reprint}%
+ \do{reprintof}%
+ \do{reprintas}%
+ \do{reprintfrom}%
+ \do{reviewof}%
+ \do{translationof}%
+ \do{translationas}%
+ \do{translationfrom}%
+ \do{origpubas}%
+ \do{origpubin}%
+ \do{astitle}%
+ \do{bypublisher}%
+ \do{nodate}%
+ \do{page}%
+ \do{pages}%
+ \do{column}%
+ \do{columns}%
+ \do{line}%
+ \do{lines}%
+ \do{verse}%
+ \do{verses}%
+ \do{section}%
+ \do{sections}%
+ \do{paragraph}%
+ \do{paragraphs}%
+ \do{pagetotal}%
+ \do{pagetotals}%
+ \do{columntotal}%
+ \do{columntotals}%
+ \do{linetotal}%
+ \do{linetotals}%
+ \do{versetotal}%
+ \do{versetotals}%
+ \do{sectiontotal}%
+ \do{sectiontotals}%
+ \do{paragraphtotal}%
+ \do{paragraphtotals}%
+ \do{in}%
+ \do{inseries}%
+ \do{ofseries}%
+ \do{book}%
+ \do{issue}%
+ \do{number}%
+ \do{chapter}%
+ \do{bathesis}%
+ \do{mathesis}%
+ \do{phdthesis}%
+ \do{candthesis}%
+ \do{resreport}%
+ \do{techreport}%
+ \do{software}%
+ \do{datacd}%
+ \do{audiocd}%
+ \do{version}%
+ \do{url}%
+ \do{urlfrom}%
+ \do{urlseen}%
+ \do{file}%
+ \do{inpreparation}%
+ \do{submitted}%
+ \do{inpress}%
+ \do{prepublished}%
+ \do{forthcoming}%
+ \do{library}%
+ \do{abstract}%
+ \do{annotation}%
+ \do{citedas}%
+ \do{seenote}%
+ \do{quotedin}%
+ \do{opcit}%
+ \do{loccit}%
+ \do{ibidem}%
+ \do{idem}%
+ \do{idemsf}%
+ \do{idemsm}%
+ \do{idemsn}%
+ \do{idempf}%
+ \do{idempm}%
+ \do{idempn}%
+ \do{idempp}%
+ \do{confer}%
+ \do{sequens}%
+ \do{sequentes}%
+ \do{passim}%
+ \do{see}%
+ \do{seealso}%
+ \do{backrefpage}%
+ \do{backrefpages}%
+ \do{thiscite}%
+ \do{january}%
+ \do{february}%
+ \do{march}%
+ \do{april}%
+ \do{may}%
+ \do{june}%
+ \do{july}%
+ \do{august}%
+ \do{september}%
+ \do{october}%
+ \do{november}%
+ \do{december}%
+ \do{langamerican}%
+ \do{langbasque}%
+ \do{langbrazilian}%
+ \do{langbulgarian}%
+ \do{langcatalan}%
+ \do{langcroatian}%
+ \do{langczech}%
+ \do{langdanish}%
+ \do{langdutch}%
+ \do{langenglish}%
+ \do{langestonian}%
+ \do{langfinnish}%
+ \do{langfrench}%
+ \do{langgalician}%
+ \do{langgerman}%
+ \do{langgreek}%
+ \do{langhungarian}%
+ \do{langitalian}%
+ \do{langjapanese}%
+ \do{langlatin}%
+ \do{langlatvian}%
+ \do{langlithuanian}%
+ \do{langmarathi}%
+ \do{langnorwegian}%
+ \do{langpolish}%
+ \do{langportuguese}%
+ \do{langserbian}%
+ \do{langromanian}%
+ \do{langrussian}%
+ \do{langslovak}%
+ \do{langslovene}%
+ \do{langspanish}%
+ \do{langswedish}%
+ \do{langturkish}%
+ \do{langukrainian}%
+ \do{fromamerican}%
+ \do{frombasque}%
+ \do{frombrazilian}%
+ \do{frombulgarian}%
+ \do{fromcatalan}%
+ \do{fromcroatian}%
+ \do{fromczech}%
+ \do{fromdanish}%
+ \do{fromdutch}%
+ \do{fromenglish}%
+ \do{fromestonian}%
+ \do{fromfinnish}%
+ \do{fromfrench}%
+ \do{fromgalician}%
+ \do{fromgerman}%
+ \do{fromgreek}%
+ \do{fromhungarian}%
+ \do{fromitalian}%
+ \do{fromjapanese}%
+ \do{fromlatin}%
+ \do{fromlithuanian}%
+ \do{fromlatvian}%
+ \do{frommarathi}%
+ \do{fromnorwegian}%
+ \do{frompolish}%
+ \do{fromportuguese}%
+ \do{fromromanian}%
+ \do{fromrussian}%
+ \do{fromserbian}%
+ \do{fromslovak}%
+ \do{fromslovene}%
+ \do{fromspanish}%
+ \do{fromswedish}%
+ \do{fromturkish}%
+ \do{fromukrainian}%
+ \do{countryde}%
+ \do{countryep}%
+ \do{countryeu}%
+ \do{countryfr}%
+ \do{countryuk}%
+ \do{countryus}%
+ \do{patent}%
+ \do{patentde}%
+ \do{patenteu}%
+ \do{patentfr}%
+ \do{patentuk}%
+ \do{patentus}%
+ \do{patreq}%
+ \do{patreqde}%
+ \do{patreqeu}%
+ \do{patreqfr}%
+ \do{patrequk}%
+ \do{patrequs}%
+ \do{commonera}%
+ \do{beforecommonera}%
+ \do{annodomini}%
+ \do{beforechrist}%
+ \do{circa}%
+ \do{spring}%
+ \do{summer}%
+ \do{autumn}%
+ \do{winter}%
+ \do{springN}%
+ \do{summerN}%
+ \do{autumnN}%
+ \do{winterN}%
+ \do{springS}%
+ \do{summerS}%
+ \do{autumnS}%
+ \do{winterS}%
+ \do{Q1}%
+ \do{Q2}%
+ \do{Q3}%
+ \do{Q4}%
+ \do{QD1}%
+ \do{QD2}%
+ \do{QD3}%
+ \do{S1}%
+ \do{S2}%
+ \do{am}%
+ \do{pm}%
+}
+
+\newrobustcmd*{\NewBibliographyString}[1]{%
+ \forcsvlist\blx@newstring{#1}}
+
+\def\blx@newstring#1{%
+ \blx@kv@ifkeyundef{blx@lbx}{#1}
+ {\gappto\abx@dostrings{\do{#1}}%
+ \blx@kv@gdefkey{blx@lbx}{#1}{\blx@defstring{#1}{##1}}}
+ {}}
+
+% in *.cbx/bbx/tex: <key> = {<string>},
+% in *.lbx: <key> = {{<longstring>}{<abbrevstring>}},
+\def\do#1{\blx@kv@defkey{blx@lbx}{#1}{\blx@defstring{#1}{##1}}}
+\abx@dostrings
+
+% in *.cbx/bbx/tex: (implicit)
+% in *.lbx: inherit = {<language>},
+\blx@kv@defkey{blx@lbx}{inherit}{%
+ \blx@lbxinput@strings{#1}{}{\blx@err@nolang{#1}}%
+ \csuse{abx@strings@#1}}
+
+\def\blx@cfg@defstring#1#2{%
+ \csdef{abx@lstr@#1}{#2}%
+ \csdef{abx@sstr@#1}{#2}}
+
+\def\blx@lbx@defstring#1#2{%
+ \blx@lbx@defstring@i{#1}#2}
+\def\blx@lbx@defstring@i#1#2#3{%
+ \csdef{abx@lstr@#1}{#2}%
+ \csdef{abx@sstr@#1}{#3}}
+
+% {<language>}
+\def\blx@lbxcheck#1{%
+ \begingroup
+ \ifcsdef{blx@lng@#1}
+ {\edef\blx@tempa{\csuse{blx@lng@#1}.lbx}}
+ {\def\blx@tempa{#1.lbx}}%
+ \expandafter\blx@altfile\expandafter{\blx@tempa}%
+ \ifdefempty\blx@fnext
+ {\blx@err@nolang{#1}}
+ {}%
+ \endgroup}
+
+% {<language>}{<definitions>}
+\newrobustcmd*{\DefineBibliographyExtras}[2]{%
+ \blx@lbxcheck{#1}%
+ \csgappto{blx@hook@extras@#1}{%
+ \blx@defbibextras{#1}{#2}}}
+\@onlypreamble\DefineBibliographyExtras
+
+\newrobustcmd*{\UndefineBibliographyExtras}[2]{%
+ \blx@lbxcheck{#1}%
+ \csgappto{blx@hook@noextras@#1}{%
+ \blx@undefbibextras{#1}{#2}}}
+\@onlypreamble\UndefineBibliographyExtras
+
+\def\blx@defbibextras#1{\csgappto{abx@extras@#1}}
+\def\blx@undefbibextras#1{\csgappto{abx@noextras@#1}}
+
+% {<language>}{<language>}
+\def\blx@letbibextras#1#2{%
+ \blx@lbxinput@extras{#2}{}{\blx@err@nolang{#2}}%
+ \global\csletcs{abx@extras@#1}{abx@extras@#2}
+ \global\csletcs{abx@noextras@#1}{abx@noextras@#2}}%
+
+% {<language>}{<strings>}
+\newrobustcmd*{\DefineBibliographyStrings}[2]{%
+ \blx@lbxcheck{#1}%
+ \csgappto{blx@hook@strings@#1}{%
+ \begingroup
+ \let\blx@defstring\blx@cfg@defstring
+ \blx@defbibstrings{#1}{#2}%
+ \endgroup}}
+\@onlypreamble\DefineBibliographyStrings
+
+\def\blx@defbibstrings#1#2{%
+ \def\do##1{\csundef{abx@lstr@##1}\csundef{abx@sstr@##1}}%
+ \abx@dostrings
+ \csuse{abx@strings@#1}%
+ \blx@kv@setkeys{blx@lbx}{#2}%
+ \let\do\blx@defbibstrings@i
+ \csxdef{abx@strings@#1}{\abx@dostrings}%
+ \csgappto{abx@strings@#1}{%
+ \ifcsdef{\abx@str @bibliography}
+ {\letcs\bibname{\abx@str @bibliography}}
+ {\let\bibname\@empty}%
+ \ifcsdef{\abx@str @references}
+ {\letcs\refname{\abx@str @references}}
+ {\let\refname\@empty}%
+ \ifcsdef{\abx@str @shorthands}
+ {\letcs\biblistname{\abx@str @shorthands}}
+ {\let\biblistname\@empty}}}
+
+% this one is special, it's basically ours and probably not defined
+% by anyone else, so we had better make sure it exists
+\providecommand*{\biblistname}{\blx@warn@nostring{shorthands}}
+
+\def\blx@defbibstrings@i#1{%
+ \ifcsdef{abx@lstr@#1}
+ {\def\expandafter\noexpand\csname abx@lstr@#1\endcsname{%
+ \csexpandonce{abx@lstr@#1}}}
+ {\undef\expandafter\noexpand\csname abx@lstr@#1\endcsname}%
+ \ifcsdef{abx@sstr@#1}
+ {\def\expandafter\noexpand\csname abx@sstr@#1\endcsname{%
+ \csexpandonce{abx@sstr@#1}}}
+ {\undef\expandafter\noexpand\csname abx@sstr@#1\endcsname}}
+
+% {<language>}{<language>}
+\def\blx@letbibstrings#1#2{%
+ \blx@lbxinput@strings{#2}{}{\blx@err@nolang{#2}}%
+ \global\csletcs{abx@strings@#1}{abx@strings@#2}}%
+
+% {<language>}{<exceptions>}
+\newrobustcmd*{\DefineHyphenationExceptions}[2]{%
+ \blx@ifhyphenationundef{#1}
+ {\blx@warn@nohyph{#1}}
+ {}%
+ \csgappto{blx@hook@hyph@#1}{\blx@hyphexcept{#1}{#2}}}
+\@onlypreamble\DefineHyphenationExceptions
+
+\def\blx@hyphexcept#1#2{%
+ \blx@ifhyphenationundef{#1}
+ {\blx@warn@nohyph{#1}}
+ {\begingroup
+ \language\csname l@#1\endcsname\relax
+ \hyphenation{#2}%
+ \endgroup}}
+
+% {<mapping suffix>}
+\newrobustcmd*{\DeclareLanguageMappingSuffix}[1]{%
+ \gdef\blx@lng@suff{#1}}
+\@onlypreamble\DeclareLanguageMappingSuffix
+\let\blx@lng@suff\@empty
+
+% {<language>}{<mapping>}
+\newrobustcmd*{\DeclareLanguageMapping}[2]{%
+ \csgdef{blx@lng@#1}{#2}%
+ \csgdef{blx@lng@explicit@#1}{#2}}
+\@onlypreamble\DeclareLanguageMapping
+
+% to avoid copying, these commands simply redefine the input handlers and
+% process and postprocess code
+% {<language>}{<success>}{<failure>}
+\def\blx@lbxinput#1{%
+ \csletcs{blx@lbx@input@handler}{blx@lbx@input@handler@once}%
+ \csletcs{blx@lbx@input@process}{blx@lbx@input@process@all}%
+ \csletcs{blx@lbx@input@postprocess}{blx@lbx@input@postprocess@all}%
+ \blx@lbxinput@i{#1}}
+
+\def\blx@lbxinput@strings#1{%
+ \csletcs{blx@lbx@input@handler}{blx@lbx@input@handler@simple}%
+ \csletcs{blx@lbx@input@process}{blx@lbx@input@process@strings}%
+ \csletcs{blx@lbx@input@postprocess}{blx@lbx@input@postprocess@strings}%
+ \blx@lbxinput@i{#1}}
+
+\def\blx@lbxinput@extras#1{%
+ \csletcs{blx@lbx@input@handler}{blx@lbx@input@handler@simple}%
+ \csletcs{blx@lbx@input@process}{blx@lbx@input@process@extras}%
+ \csletcs{blx@lbx@input@postprocess}{blx@lbx@input@postprocess@extras}%
+ \blx@lbxinput@i{#1}}
+
+\def\blx@lbxinput@i#1{%
+ \ifcsundef{blx@nolbxrecurse@#1}
+ {\ifcsdef{blx@lng@explicit@#1}
+ {\global\csletcs{blx@lng@#1}{blx@lng@explicit@#1}}
+ {\ifdefempty\blx@lng@suff
+ {}
+ {\csgdef{blx@lng@#1}{#1\blx@lng@suff}}}}
+ {}%
+ \blx@lbxinput@ii{#1}}
+
+\def\blx@lbxinput@ii#1{%
+ \ifcsdef{blx@lng@#1}
+ {\expandafter\expandafter\expandafter\blx@lbxinput@iii
+ \expandafter\expandafter\expandafter{%
+ \csname blx@lng@#1\endcsname}{#1}}
+ {\blx@altfile{#1.lbx}%
+ \ifdefempty\blx@fnext
+ {\blx@lbxinput@iv{#1}{#1}{language '#1'}}
+ {\blx@lbxinput@iv{#1}{\blx@fnnoext}{language '#1'}}}}
+
+% {<mapping>}{<language>}
+\def\blx@lbxinput@iii#1#2{%
+ \global\csundef{blx@lng@#2}%
+ \blx@altfile{#1.lbx}%
+ \ifdefempty\blx@fnext
+ {\ifcsdef{blx@suffmaptried@#2}
+ {}
+ {\blx@warning@noline{%
+ File '#1.lbx' not found!\MessageBreak
+ Ignoring mapping '#2' -> '#1'}%
+ \global\cslet{blx@suffmaptried@#2}\@empty}%
+ \blx@lbxinput@iv{#2}{#2}{language '#2'}}
+ {\blx@lbxinput@iv{#2}{\blx@fnnoext}{language '#2' -> '#1'}}}
+
+% {<language>}{<lbxfile>}{<message>}
+\def\blx@lbxinput@iv#1#2#3{%
+ \begingroup
+ \blx@lbx@input@handler{#2.lbx}{#3}
+ {\let\InheritBibliographyStrings\@gobble
+ \let\DeclareBibliographyStrings\@gobble
+ \let\InheritBibliographyExtras\@gobble
+ \let\DeclareBibliographyExtras\@gobble
+ \let\UndeclareBibliographyExtras\@gobble
+ \blx@lbx@input@process{#1}%
+ \begingroup
+ \cslet{blx@nolbxrecurse@#1}\@empty
+ \blx@saneccodes
+ \makeatletter}
+ {\endgroup
+ \blx@lbx@input@postprocess{#1}}
+ {\aftergroup\@firstoftwo}
+ {\aftergroup\@secondoftwo}%
+ \endgroup}
+
+% .lbx files must be read with one of the two following commands,
+% do not use \blx@inputonce. Only the commands here make sure that the file
+% is read as many times as necessary.
+% blx@file@lbx@simple@#1 only blocks the file being added to the file list
+% blx@file@lbx@once@#1 blocks a file from being loaded again by the input-once
+% routine
+% {<file>}{<message>}{<preload>}{<postload>}{<success>}{<failure>}
+\protected\long\def\blx@lbx@input@handler@simple#1#2#3#4#5#6{%
+ \blx@info@noline{Trying to load #2..}%
+ \IfFileExists{#1}
+ {\blx@info@noline{... file '#1' found}%
+ \csuse{blx@lbxfilehook@simple@preload@#1}%
+ #3%
+ \@@input\@filef@und
+ #4%
+ \csuse{blx@lbxfilehook@simple@postload@#1}%
+ #5%
+ \ifcsundef{blx@file@lbx@simple@#1}
+ {\listxadd\blx@list@req@stat{#1}%
+ \@addtofilelist{#1}%
+ \global\cslet{blx@file@lbx@simple@#1}\@empty}
+ {}}
+ {\blx@info@noline{... file '#1' not found}%
+ \csuse{blx@lbxfilehook@simple@failure@#1}%
+ #6}}
+
+% {<file>}{<message>}{<preload>}{<postload>}{<success>}{<failure>}
+\protected\long\def\blx@lbx@input@handler@once#1#2#3#4#5#6{%
+ \ifcsundef{blx@file@lbx@once@#1}
+ {\blx@info@noline{Trying to load #2..}%
+ \IfFileExists{#1}
+ {\blx@info@noline{... file '#1' found}%
+ \csuse{blx@lbxfilehook@once@preload@#1}%
+ #3%
+ \@@input\@filef@und
+ #4%
+ \csuse{blx@lbxfilehook@once@postload@#1}%
+ #5%
+ \ifcsundef{blx@file@lbx@simple@#1}
+ {\listxadd\blx@list@req@stat{#1}%
+ \@addtofilelist{#1}}
+ {}}
+ {\blx@info@noline{... file '#1' not found}%
+ \csuse{blx@lbxfilehook@once@failure@#1}%
+ #6}%
+ \global\cslet{blx@file@lbx@once@#1}\@empty
+ \global\cslet{blx@file@lbx@simple@#1}\@empty}
+ {#5}}
+
+\def\blx@lbx@input@process@strings#1{%
+ \global\cslet{abx@strings@#1}\@empty
+ \def\InheritBibliographyStrings{%
+ \blx@letbibstrings{#1}}%
+ \def\DeclareBibliographyStrings##1{%
+ \begingroup
+ \let\blx@defstring\blx@lbx@defstring
+ \blx@defbibstrings{#1}{##1}%
+ \endgroup}}
+
+\def\blx@lbx@input@process@extras#1{%
+ \global\cslet{abx@extras@#1}\@empty
+ \global\cslet{abx@noextras@#1}\@empty
+ \def\InheritBibliographyExtras{\blx@letbibextras{#1}}%
+ \def\DeclareBibliographyExtras{\blx@defbibextras{#1}}%
+ \def\UndeclareBibliographyExtras{\blx@undefbibextras{#1}}}
+
+\def\blx@lbx@input@process@all#1{%
+ \blx@lbx@input@process@strings{#1}%
+ \blx@lbx@input@process@extras{#1}%
+ \def\DeclareHyphenationExceptions{\blx@hyphexcept{#1}}}
+
+\def\blx@lbx@input@postprocess@strings#1{%
+ \csuse{blx@hook@strings@#1}}
+
+\def\blx@lbx@input@postprocess@extras#1{%
+ \csuse{blx@hook@extras@#1}%
+ \csuse{blx@hook@noextras@#1}}
+
+\def\blx@lbx@input@postprocess@all#1{%
+ \blx@lbx@input@postprocess@strings{#1}%
+ \blx@lbx@input@postprocess@extras{#1}%
+ \csuse{blx@hook@hyph@#1}%
+ \blx@maplang{#1}{#1}}
+
+% {<language>}
+\protected\def\blx@langsetup#1{%
+ \blx@lbxinput{#1}
+ {\edef\blx@languagename{#1}}
+ {\blx@warning
+ {Language '#1' not supported.\MessageBreak
+ Using dummy definitions}}}
+
+\protected\def\blx@langsetup@from@pkglist#1{%
+ \global\cslet{blx@lbx@loaded@from@pkglist@#1}\@empty
+ \blx@langsetup{#1}}
+
+\protected\def\blx@langsetup@from@auxlist#1{%
+ \global\cslet{blx@lbx@loaded@from@auxlist@#1}\@empty
+ \blx@langsetup{#1}}
+
+\newcommand*{\blx@lbx@loadlist}{}
+
+\protected\def\blx@langsetup@indoc#1{%
+ \ifcsundef{blx@lbx@loaded@from@pkglist@#1}
+ {\xifinlist{#1}\blx@lbx@loadlist
+ {}
+ {\listxadd\blx@lbx@loadlist{#1}}%
+ \ifcsundef{blx@lbx@loaded@from@auxlist@#1}
+ {\ifcsundef{blx@lbx@loaded@nolistload@#1}
+ {\blx@warning@noline{%
+ No localisation for language '#1' loaded.\MessageBreak
+ Please rerun LaTeX to ensure languages can\MessageBreak
+ be requested properly}%
+ \global\cslet{blx@lbx@loaded@nolistload@#1}\@empty}
+ {}}
+ {\edef\blx@languagename{#1}}}
+ {\edef\blx@languagename{#1}}%
+}
+
+\newcommand*{\blx@lbx@auxloadlist}{}
+
+\def\abx@aux@lbx@loadrequest{%
+ \listgadd\blx@lbx@auxloadlist}
+
+\protected\def\blx@lbx@writeloaderequest#1{%
+ \blx@auxwrite\@mainaux{}{%
+ \string\abx@aux@lbx@loadrequest{#1}}}
+
+% auxiliary macros
+
+% {<field base name>}
+\newrobustcmd*{\mkdaterangeshort}{%
+ \mkdaterangefull{short}}
+
+\newrobustcmd*{\mkdaterangelong}{%
+ \mkdaterangefull{long}}
+
+\newrobustcmd*{\mkdaterangeterse}{%
+ \mkdaterangetrunc{short}}
+
+\newrobustcmd*{\mkdaterangecomp}{%
+ \mkdaterangetrunc{long}}
+
+\newrobustcmd*{\mkdaterangeshortextra}{%
+ \mkdaterangefullextra{short}}
+
+\newrobustcmd*{\mkdaterangelongextra}{%
+ \mkdaterangefullextra{long}}
+
+\newrobustcmd*{\mkdaterangeterseextra}{%
+ \mkdaterangetruncextra{short}}
+
+\newrobustcmd*{\mkdaterangecompextra}{%
+ \mkdaterangetruncextra{long}}
+
+% calls to \blx@metadateinfo should be grouped to avoid name clashes
+\def\blx@metadateinfo#1{%
+ \letcs\ifdateera{if#1dateera}%
+ \letcs\ifenddateera{if#1enddateera}%
+ \letcs\ifdatecirca{if#1datecirca}%
+ \letcs\ifenddatecirca{if#1enddatecirca}%
+ \letcs\ifdatejulian{if#1datejulian}%
+ \letcs\ifenddatejulian{if#1enddatejulian}%
+ \letcs\ifdateuncertain{if#1dateuncertain}%
+ \letcs\ifenddateuncertain{if#1enddateuncertain}%
+ \letcs\ifdateunknown{if#1dateunknown}%
+ \letcs\ifenddateunknown{if#1enddateunknown}}
+
+\expandafter\newrobustcmd\expandafter*\csname mktimerange24h\endcsname{%
+ \mktimerange{24h}}
+
+\expandafter\newrobustcmd\expandafter*\csname mktimerange12h\endcsname{%
+ \mktimerange{12h}}
+
+\expandafter\newrobustcmd\expandafter*\csname mktimerange24hcomp\endcsname[1]{%
+ \iffieldundef{#1hour}
+ {}
+ {\ifboolexpr{test {\iffieldundef{#1endhour}}
+ or
+ test {\iffieldequalstr{#1endhour}{}}}
+ {\mktimerange{24h}{#1}}
+ {\iffieldsequal{#1hour}{#1endhour}
+ % 14:xx:xx 14:xx:xx
+ {\iffieldsequal{#1minute}{#1endminute}
+ % 14:13:xx 14:13:xx
+ {\toggletrue{blx@seconds}%
+ \printtext[{#1time}]{%
+ \csuse{mkbibtime24h}{#1hour}{#1minute}{#1second}{}%
+ \bibtimerangesep
+ \csuse{mkbibtime24h}{}{}{#1endsecond}{}}}
+ % 14:13:xx 14:14:xx
+ {\toggletrue{blx@seconds}%
+ \printtext[{#1time}]{\csuse{mkbibtime24h}{#1hour}{#1minute}{}{}%
+ \bibtimerangesep
+ \csuse{mkbibtime24h}{}{#1endminute}{}{}}}}
+ % 14:xx:xx 15:xx:xx
+ {\mktimerange{24h}{#1}}}}}
+
+% {<24h|24hcomp|12h>}{<datetype>}
+\newrobustcmd*{\mktimerange}[2]{%
+ \begingroup
+ \iffieldundef{#2hour}
+ {\blx@nounit}
+ {\blx@timepre{#2}{}%
+ \printtext[{#2time}]{%
+ \csuse{mkbibtime#1}{#2hour}{#2minute}{#2second}{#2timezone}%
+ \iffieldundef{#2endhour}
+ {}
+ {\blx@timepre{#2}{end}%
+ \iffieldequalstr{#2endhour}{}
+ {\mbox{\bibtimerangesep}}
+ {\bibtimerangesep
+ \csuse{mkbibtime#1}{#2endhour}{#2endminute}{#2endsecond}{#2endtimezone}}}}}%
+ \endgroup}
+
+% {<datetype>}{''|end}
+\newrobustcmd*{\blx@timepre}[2]{%
+ \iftoggle{blx@timezones}{}
+ {\blx@imc@clearfield{#1#2timezone}}%
+ \iftoggle{blx@seconds}{}
+ {\blx@imc@clearfield{#1#2second}}}
+
+\newcommand*{\blx@if@printtime}[2]{%
+ \iftoggle{blx@#1dateusetime}
+ {\iffieldundef{#1#2hour}
+ {\@secondoftwo}
+ {\@firstoftwo}}
+ {\@secondoftwo}}
+
+\newcommand*{\blx@if@printanytimes}[1]{%
+ \iftoggle{blx@#1dateusetime}
+ {\iffieldundef{#1hour}
+ {\iffieldundef{#1endhour}
+ {\@secondoftwo}
+ {\@firstoftwo}}
+ {\@firstoftwo}}
+ {\@secondoftwo}}
+
+% {<datetype>}{'' | end}
+\newrobustcmd*{\blx@printtime}[2]{%
+ \blx@if@printtime{#1}{#2}
+ {\blx@timepre{#1}{#2}%
+ \bibdatetimesep%
+ \printtext[{#1time}]{%
+ \csuse{mkbibtime\csuse{blx@timeformat@#1time}}
+ {#1#2hour}{#1#2minute}{#1#2second}{#1#2timezone}}}
+ {}}
+
+% {<short|long>}{<datetype>}
+\newrobustcmd*{\mkdaterangefull}[2]{%
+ \begingroup
+ \blx@metadateinfo{#2}%
+ \iffieldundef{#2year}
+ {\blx@nounit}
+ {\printtext[{#2date}]{%
+ \datecircaprint
+ % Such a year division component can only come from an ISO8601 year division which replaces
+ % a normal month so if it exists, we know that a normal date print is ruled out
+ \iffieldundef{#2yeardivision}
+ {\csuse{mkbibdate#1}{#2year}{#2month}{#2day}%
+ % Optionally print the time after the date
+ \blx@printtime{#2}{}}
+ {\csuse{mkbibyeardivisiondate#1}{#2year}{#2yeardivision}}%
+ \dateuncertainprint
+ \dateeraprint{#2year}%
+ \iffieldundef{#2endyear}
+ {}
+ {\iffieldequalstr{#2endyear}{}
+ {\mbox{\bibdaterangesep}}
+ {\bibdaterangesep
+ \enddatecircaprint
+ \iffieldundef{#2endyeardivision}
+ {\csuse{mkbibdate#1}{#2endyear}{#2endmonth}{#2endday}%
+ % Optionally print the time after the date
+ \blx@printtime{#2}{end}}
+ {\csuse{mkbibyeardivisiondate#1}{#2endyear}{#2endyeardivision}}%
+ \enddateuncertainprint
+ \dateeraprint{#2endyear}}}}}%
+ \endgroup}
+
+\newrobustcmd*{\mkdaterangefullextra}[2]{%
+ \begingroup
+ \blx@metadateinfo{#2}%
+ \iffieldundef{#2year}
+ {\blx@nounit}
+ {\printtext[{#2date}]{%
+ \datecircaprint
+ % Such a year division component can only come from an ISO8601 year division which replaces
+ % a normal month so if it exists, we know that a normal date print is ruled out
+ \iffieldundef{#2yeardivision}
+ {\csuse{mkbibdate#1}{#2year}{#2month}{#2day}%
+ % Optionally print the time after the date
+ \blx@printtime{#2}{}}
+ {\csuse{mkbibyeardivisiondate#1}{#2year}{#2yeardivision}}%
+ \dateuncertainprint
+ \dateeraprint{#2year}%
+ \iffieldundef{#2endyear}
+ {\printfield{extradate}}
+ {\iffieldequalstr{#2endyear}{}
+ {\printfield{extradate}%
+ \mbox{\bibdaterangesep}}
+ {\bibdaterangesep
+ \enddatecircaprint
+ \iffieldundef{#2endyeardivision}
+ {\csuse{mkbibdate#1}{#2endyear}{#2endmonth}{#2endday}%
+ % Optionally print the time after the date
+ \blx@printtime{#2}{end}}
+ {\csuse{mkbibyeardivisiondate#1}{#2endyear}{#2endyeardivision}}}%
+ \printfield{extradate}%
+ \enddateuncertainprint
+ \dateeraprint{#2endyear}}}}%
+ \endgroup}
+
+\newrobustcmd*{\mkdaterangetrunc}[2]{%
+ \blx@if@printanytimes{#2}
+ {\mkdaterangefull{#1}{#2}}
+ {\mkdaterangetrunc@i{#1}{#2}}}
+
+\newrobustcmd*{\mkdaterangetrunc@i}[2]{%
+ \begingroup
+ \blx@metadateinfo{#2}%
+ \iffieldundef{#2year}
+ {\blx@nounit}
+ {\printtext[{#2date}]{%
+ \datecircaprint
+ % Such a year division component can only come from an ISO8601 year division which replaces
+ % a normal month so if it exists, we know that a normal date print is ruled out
+ \iffieldundef{#2yeardivision}
+ {\ifdateyearsequal{#2}{#2end}
+ {\iffieldsequal{#2month}{#2endmonth}
+ {\csuse{mkbibdate#1}{}{}{#2day}}
+ {\csuse{mkbibdate#1}{}{#2month}{#2day}}}
+ {\csuse{mkbibdate#1}{#2year}{#2month}{#2day}%
+ \iffieldsequal{#2dateera}{#2enddateera}{}
+ {\dateeraprint{#2year}}}}
+ {\ifdateyearsequal{#2}{#2end}
+ {\csuse{mkbibyeardivisiondate#1}{}{#2yeardivision}}
+ {\csuse{mkbibyeardivisiondate#1}{#2year}{#2yeardivision}%
+ \iffieldsequal{#2dateera}{#2enddateera}{}
+ {\dateeraprint{#2year}}}}%
+ \dateuncertainprint
+ \iffieldundef{#2endyear}
+ {}
+ {\iffieldequalstr{#2endyear}{}
+ {\mbox{\bibdaterangesep}}
+ {\bibdaterangesep
+ \enddatecircaprint
+ \iffieldundef{#2endyeardivision}
+ {\csuse{mkbibdate#1}{#2endyear}{#2endmonth}{#2endday}}
+ {\csuse{mkbibyeardivisiondate#1}{#2endyear}{#2endyeardivision}}%
+ \enddateuncertainprint
+ \dateeraprint{#2endyear}}}}}%
+ \endgroup}
+
+\newrobustcmd*{\mkdaterangetruncextra}[2]{%
+ \blx@if@printanytimes{#2}
+ {\mkdaterangefullextra{#1}{#2}}
+ {\mkdaterangetruncextra@i{#1}{#2}}}
+
+\newrobustcmd*{\mkdaterangetruncextra@i}[2]{%
+ \begingroup
+ \blx@metadateinfo{#2}%
+ \iffieldundef{#2year}
+ {\blx@nounit}
+ {\printtext[{#2date}]{%
+ \datecircaprint
+ % Such a year division component can only come from an ISO8601 year division which replaces
+ % a normal month so if it exists, we know that a normal date print is ruled out
+ \iffieldundef{#2yeardivision}
+ {\ifdateyearsequal{#2}{#2end}
+ {\iffieldsequal{#2month}{#2endmonth}
+ {\csuse{mkbibdate#1}{}{}{#2day}}
+ {\csuse{mkbibdate#1}{}{#2month}{#2day}}}
+ {\csuse{mkbibdate#1}{#2year}{#2month}{#2day}%
+ \iffieldsequal{#2dateera}{#2enddateera}{}
+ {\dateeraprint{#2year}}}}
+ {\ifdateyearsequal{#2}{#2end}
+ {\csuse{mkbibyeardivisiondate#1}{}{#2yeardivision}}
+ {\csuse{mkbibyeardivisiondate#1}{#2year}{#2yeardivision}%
+ \iffieldsequal{#2dateera}{#2enddateera}{}
+ {\dateeraprint{#2year}}}}%
+ \dateuncertainprint
+ \iffieldundef{#2endyear}
+ {\printfield{extradate}}
+ {\iffieldequalstr{#2endyear}{}
+ {\printfield{extradate}%
+ \mbox{\bibdaterangesep}}
+ {\bibdaterangesep
+ \enddatecircaprint
+ \iffieldundef{#2endyeardivision}
+ {\csuse{mkbibdate#1}{#2endyear}{#2endmonth}{#2endday}}
+ {\csuse{mkbibyeardivisiondate#1}{#2endyear}{#2endyeardivision}}}%
+ \printfield{extradate}%
+ \enddateuncertainprint
+ \dateeraprint{#2endyear}}}}%
+ \endgroup}
+
+\newrobustcmd*{\mkdaterangeyear}[1]{%
+ \begingroup
+ \blx@imc@clearfield{#1yeardivision}%
+ \blx@imc@clearfield{#1month}%
+ \blx@imc@clearfield{#1day}%
+ \blx@imc@clearfield{#1hour}%
+ \blx@imc@clearfield{#1minute}%
+ \blx@imc@clearfield{#1second}%
+ \blx@imc@clearfield{#1timezone}%
+ \blx@imc@clearfield{#1endyeardivision}%
+ \blx@imc@clearfield{#1endmonth}%
+ \blx@imc@clearfield{#1endday}%
+ \blx@imc@clearfield{#1endhour}%
+ \blx@imc@clearfield{#1endminute}%
+ \blx@imc@clearfield{#1endsecond}%
+ \blx@imc@clearfield{#1endtimezone}%
+ \ifdateyearsequal{#1}{#1end}
+ {\blx@imc@clearfield{#1endyear}}
+ {}%
+ \mkdaterangefull{short}{#1}%
+ \endgroup}
+
+% {<datetype>}
+\newrobustcmd*{\mkdaterangeymd}[1]{%
+ \begingroup
+ \blx@metadateinfo{#1}%
+ \iffieldundef{#1year}
+ {\blx@nounit}
+ {\printtext[{#1date}]{%
+ \datecircaprint
+ % Such a year division component can only come from an ISO8601 year division which replaces
+ % a normal month so if it exists, we know that a normal date print is ruled out
+ \iffieldundef{#1yeardivision}
+ {\blx@ymddate{#1}{}%
+ % Optionally print the time after the date
+ \blx@printtime{#1}{}}
+ {\csuse{mkbibyeardivisiondateshort}{#1year}{#1yeardivision}}%
+ \dateuncertainprint
+ \dateeraprint{#1year}%
+ \iffieldundef{#1endyear}
+ {}
+ {\iffieldequalstr{#1endyear}{}
+ {\mbox{\bibdaterangesep}}
+ {\bibdaterangesep
+ \enddatecircaprint
+ \iffieldundef{#1yeardivision}
+ {\blx@ymddate{#1}{end}%
+ % Optionally print the time after the date
+ \blx@printtime{#1}{end}}
+ {\csuse{mkbibyeardivisiondateshort}{#1endyear}{#1endyeardivision}}%
+ \enddateuncertainprint
+ \dateeraprint{#1endyear}}}}}%
+ \endgroup}
+
+% {<datetype>}
+\newrobustcmd*{\mkdaterangeymdextra}[1]{%
+ \begingroup
+ \blx@metadateinfo{#1}%
+ \iffieldundef{#1year}
+ {\blx@nounit}
+ {\printtext[{#1date}]{%
+ \datecircaprint
+ % Such a year division component can only come from an ISO8601 year division which replaces
+ % a normal month so if it exists, we know that a normal date print is ruled out
+ \iffieldundef{#1yeardivision}
+ {\blx@ymddate[extradate]{#1}{}%
+ % Optionally print the time after the date
+ \blx@printtime{#1}{}}
+ {\csuse{mkbibyeardivisiondateshort}{#1year}{#1yeardivision}}%
+ \dateuncertainprint
+ \dateeraprint{#1year}%
+ \iffieldundef{#1endyear}
+ {}
+ {\iffieldequalstr{#1endyear}{}
+ {\mbox{\bibdaterangesep}}
+ {\bibdaterangesep
+ \enddatecircaprint
+ \iffieldundef{#1yeardivision}
+ {\blx@ymddate{#1}{end}%
+ % Optionally print the time after the date
+ \blx@printtime{#1}{end}}
+ {\csuse{mkbibyeardivisiondateshort}{#1endyear}{#1endyeardivision}}}%
+ \enddateuncertainprint
+ \dateeraprint{#1endyear}}}}%
+ \endgroup}
+
+% [extradate]{<datetype>}{''|end}
+\newrobustcmd*{\blx@ymddate}[3][]{%
+ \dateeraprintpre{#2#3year}%
+ \mkyearzeros{\thefield{#2#3year}}\ifblank{#1}{}{\printfield{#1}}%
+ \iffieldundef{#2#3month}{}{\bibdatesep\mkmonthzeros{\thefield{#2#3month}}}%
+ \iffieldundef{#2#3day}{}{\bibdatesep\mkdayzeros{\thefield{#2#3day}}}}
+
+\newrobustcmd*{\mkdaterangeyearextra}[1]{%
+ \begingroup
+ \blx@imc@clearfield{#1yeardivision}%
+ \blx@imc@clearfield{#1month}%
+ \blx@imc@clearfield{#1day}%
+ \blx@imc@clearfield{#1hour}%
+ \blx@imc@clearfield{#1minute}%
+ \blx@imc@clearfield{#1second}%
+ \blx@imc@clearfield{#1timezone}%
+ \blx@imc@clearfield{#1endyeardivision}%
+ \blx@imc@clearfield{#1endmonth}%
+ \blx@imc@clearfield{#1endday}%
+ \blx@imc@clearfield{#1endhour}%
+ \blx@imc@clearfield{#1endminute}%
+ \blx@imc@clearfield{#1endsecond}%
+ \blx@imc@clearfield{#1endtimezone}%
+ \ifdateyearsequal{#1}{#1end}
+ {\blx@imc@clearfield{#1endyear}}
+ {}%
+ \mkdaterangefullextra{short}{#1}%
+ \endgroup}
+
+\newrobustcmd*{\mkdaterangeiso}[1]{%
+ \begingroup
+ \blx@metadateinfo{#1}%
+ \def\bibdatetimesep{T}%
+ \iffieldundef{#1year}
+ {\blx@nounit}
+ {\printtext[{#1date}]{%
+ \blx@isodate{#1}{}%
+ \ifboolexpr{%
+ togl {blx@#1dateusetime}
+ and
+ not test {\iffieldundef{#1hour}}}
+ {\bibdatetimesep%
+ \blx@isotime{#1}{}}
+ {}%
+ \dateuncertainprint
+ \datecircaprintiso
+ \iffieldundef{#1endyear}
+ {}
+ {\addslash
+ \blx@isodate{#1}{end}%
+ \ifboolexpr{%
+ togl {blx@#1dateusetime}
+ and
+ not test {\iffieldundef{#1endhour}}}
+ {\bibdatetimesep%
+ \blx@isotime{#1}{end}}
+ {}%
+ \enddateuncertainprint
+ \enddatecircaprintiso}}}%
+ \endgroup}
+
+\newrobustcmd*{\mkdaterangeisoextra}[1]{%
+ \begingroup
+ \blx@metadateinfo{#1}%
+ \def\bibdatetimesep{T}%
+ \iffieldundef{#1year}
+ {\blx@nounit}
+ {\printtext[{#1date}]{%
+ \blx@isodate[extradate]{#1}{}%
+ \ifboolexpr{%
+ togl {blx@#1dateusetime}
+ and
+ not test {\iffieldundef{#1hour}}}
+ {\bibdatetimesep%
+ \blx@isotime{#1}{}}
+ {}%
+ \dateuncertainprint
+ \datecircaprintiso
+ \iffieldundef{#1endyear}
+ {}
+ {\addslash
+ \blx@isodate{#1}{end}}%
+ \ifboolexpr{%
+ togl {blx@#1dateusetime}
+ and
+ not test {\iffieldundef{#1endhour}}}
+ {\bibdatetimesep%
+ \blx@isotime{#1}{end}}
+ {}%
+ \enddateuncertainprint
+ \enddatecircaprintiso}}%
+ \endgroup}
+
+% [extradate]{<datetype>}{''|end}
+\newrobustcmd*{\blx@isodate}[3][]{%
+ \dateeraprintpre{#2#3year}%
+ \blx@imc@forcezerosy{\thefield{#2#3year}}\ifblank{#1}{}{\printfield{#1}}%
+ % Such a year division component can only come from an ISO8601 year division which replaces
+ % a normal month so if it exists, we know that a normal date print is ruled out
+ \iffieldundef{#2#3yeardivision}
+ {\iffieldundef{#2#3month}{}{\hyphen\blx@imc@forcezerosmdt{\thefield{#2#3month}}}%
+ \iffieldundef{#2#3day}{}{\hyphen\blx@imc@forcezerosmdt{\thefield{#2#3day}}}}
+ {\hyphen\blx@yeardivisionmap{\thefield{#2#3yeardivision}}}}
+
+\def\blx@yeardivisionmap#1{%
+ \blx@xifstrequal{#1}{spring}{21}
+ {\blx@xifstrequal{#1}{summer}{22}
+ {\blx@xifstrequal{#1}{autumn}{23}
+ {\blx@xifstrequal{#1}{winter}{24}{}}}}}
+
+\newrobustcmd*{\blx@isotime}[2]{%
+ \blx@imc@forcezerosmdt{\thefield{#1#2hour}}%
+ :\blx@imc@forcezerosmdt{\thefield{#1#2minute}}%
+ :\blx@imc@forcezerosmdt{\thefield{#1#2second}}%
+ \iftoggle{blx@timezones}
+ {\mkbibtimezone{\thefield{#1#2timezone}}}
+ {}}
+
+% some sane defaults for bibliography extras
+% many of these should be redefined in the .lbx files
+% all .lbx files should have date and time handling, so the fallback values
+% issue a warning to make people aware of the deficiency in their file
+% \mkbibordinal should also only be used if it is defined, so it warns as well
+% times
+\newrobustcmd*{\bibtimesep}{:}
+\newrobustcmd*{\bibtimerangesep}{\textendash}
+\newrobustcmd*{\bibutctimezone}{Z}
+\newrobustcmd*{\bibtimezonesep}{}
+\newrobustcmd*{\bibtzminsep}{\bibtimesep}
+% dates
+\newrobustcmd*{\bibdateuncertain}{?}
+% \textminus is only guaranteed for non-PDFTeX
+\newrobustcmd*{\bibdateeraprefix}{\ifdef\textminus\textminus\textendash}
+\newrobustcmd*{\bibdateeraendprefix}{\,\bibdateeraprefix}
+\newrobustcmd*{\bibdatesep}{\hyphen}
+\newrobustcmd*{\bibdaterangesep}{\bibrangedash}
+% date+times
+\newrobustcmd*{\bibdatetimesep}{\space}
+% ranges
+\newrobustcmd*{\bibrangedash}{\textendash}
+\newrobustcmd*{\bibrangessep}{,\space}
+% formatters
+\newrobustcmd*{\mkbibtimezone}[1]{\blx@xifstrequal{#1}{Z}{\bibutctimezone}{#1}}
+% you should never end up needing the next few definitions
+% but it is safer to do something than just swallow the input
+\newrobustcmd*{\mkbibdatelong}[3]{%
+ \blx@warning@noline{%
+ Using fallback definition for \string\mkbibdatelong.\MessageBreak
+ The command should be defined in the .lbx file.\MessageBreak
+ If you see this message, the .lbx file could not be\MessageBreak
+ loaded, is faulty or does not contain a definition\MessageBreak
+ for \string\mkbibdatelong
+ }%
+ \iffieldundef{#3}
+ {}
+ {\mkbibordinal{\thefield{#3}}%
+ \iffieldundef{#2}{}{\nobreakspace}}%
+ \iffieldundef{#2}
+ {}
+ {\mkbibmonth{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}}%
+ \iffieldbibstring{#1}
+ {\bibstring{\thefield{#1}}}
+ {\dateeraprintpre{#1}\stripzeros{\thefield{#1}}}}
+
+\newrobustcmd*{\mkbibdateshort}[3]{%
+ \blx@warning@noline{%
+ Using fallback definition for \string\mkbibdateshort.\MessageBreak
+ The command should be defined in the .lbx file.\MessageBreak
+ If you see this message, the .lbx file could not be\MessageBreak
+ loaded, is faulty or does not contain a definition\MessageBreak
+ for \string\mkbibdateshort
+ }%
+ \iffieldundef{#3}
+ {}
+ {\mkdayzeros{\thefield{#3}}%
+ \iffieldundef{#2}{}{/}}%
+ \iffieldundef{#2}
+ {}
+ {\mkmonthzeros{\thefield{#2}}%
+ \iffieldundef{#1}{}{/}}%
+ \iffieldbibstring{#1}
+ {\bibstring{\thefield{#1}}}
+ {\dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}}
+
+\expandafter\newrobustcmd\expandafter*\csname mkbibtime24h\endcsname[4]{%
+ \blx@warning@noline{%
+ Using fallback definition for
+ \expandafter\string\csname mkbibtime24h\endcsname.\MessageBreak
+ The command should be defined in the .lbx file.\MessageBreak
+ If you see this message, the .lbx file could not be\MessageBreak
+ loaded, is faulty or does not contain a definition\MessageBreak
+ for \expandafter\string\csname mkbibtime24h\endcsname
+ }%
+ \iffieldundef{#1}
+ {}
+ {\mktimezeros{\thefield{#1}}%
+ \iffieldundef{#2}{}{\bibtimesep}}%
+ \iffieldundef{#2}
+ {}
+ {\mktimezeros{\thefield{#2}}%
+ \iffieldundef{#3}{}{\bibtimesep}}%
+ \iffieldundef{#3}
+ {}
+ {\mktimezeros{\thefield{#3}}}%
+ \iffieldundef{#4}{}
+ {\bibtimezonesep
+ \mkbibtimezone{\thefield{#4}}}}
+
+\expandafter\newrobustcmd\expandafter*\csname mkbibtime12h\endcsname[4]{%
+ \blx@warning@noline{%
+ Using fallback definition for
+ \expandafter\string\csname mkbibtime12h\endcsname.\MessageBreak
+ The command should be defined in the .lbx file.\MessageBreak
+ If you see this message, the .lbx file could not be\MessageBreak
+ loaded, is faulty or does not contain a definition\MessageBreak
+ for \expandafter\string\csname mkbibtime12h\endcsname
+ }%
+ \stripzeros{\mktimehh{\thefield{#1}}}%
+ \bibtimesep
+ \forcezerosmdt{\thefield{#2}}%
+ \iffieldundef{#3}{}
+ {\bibtimesep
+ \forcezeros{\thefield{#3}}}%
+ \space
+ \ifnumless{\thefield{#1}}{12}
+ {\bibstring{am}}
+ {\bibstring{pm}}%
+ \iffieldundef{#4}{}
+ {\space\bibtimezonesep
+ \mkbibparens{\mkbibtimezone{\thefield{#4}}}}}
+
+\newrobustcmd*{\mkbibyeardivisiondateshort}[2]{%
+ \blx@warning@noline{%
+ Using fallback definition for \string\mkbibyeardivisiondateshort.\MessageBreak
+ The command should be defined in the .lbx file.\MessageBreak
+ If you see this message, the .lbx file could not be\MessageBreak
+ loaded, is faulty or does not contain a definition\MessageBreak
+ for \string\mkbibyeardivisiondateshort
+ }%
+ \mkbibyeardivision{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}%
+ \dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}
+\def\mkbibseasondateshort{% LEGACY
+ \blx@warning@noline{%
+ '\string\mkbibseasondateshort' is deprecated in favour of\MessageBreak
+ '\string\mkbibyeardivisiondateshort'}%
+ \mkbibyeardivisiondateshort}
+
+\newrobustcmd*{\mkbibyeardivisiondatelong}[2]{%
+ \blx@warning@noline{%
+ Using fallback definition for \string\mkbibyeardivisiondatelong.\MessageBreak
+ The command should be defined in the .lbx file.\MessageBreak
+ If you see this message, the .lbx file could not be\MessageBreak
+ loaded, is faulty or does not contain a definition\MessageBreak
+ for \string\mkbibyeardivisiondatelong
+ }%
+ \mkbibyeardivision{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}%
+ \dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}
+\def\mkbibseasondatelong{% LEGACY
+ \blx@warning@noline{%
+ '\string\mkbibseasondatelong' is deprecated in favour of\MessageBreak
+ '\string\mkbibyeardivisiondatelong'}%
+ \mkbibyeardivisiondatelong}
+
+\newrobustcmd*{\bibdatedash}{\bibrangedash}
+\newrobustcmd*{\finalandcomma}{}
+\newrobustcmd*{\finalandsemicolon}{}
+\newrobustcmd*{\mkbibordinal}[1]{%
+ \blx@warning@noline{%
+ Using fallback definition for \string\mkbibordinal.\MessageBreak
+ The command should be defined in the .lbx file.\MessageBreak
+ If you see this message, the .lbx file could not be\MessageBreak
+ loaded, is faulty or does not contain a definition\MessageBreak
+ for \string\mkbibordinal
+ }%
+ #1%
+}
+\newrobustcmd*{\mkbibmascord}{\mkbibordinal}
+\newrobustcmd*{\mkbibfemord}{\mkbibordinal}
+\newrobustcmd*{\mkbibneutord}{\mkbibordinal}
+% the following is usually not redefined in an .lbx
+\newrobustcmd*{\mkbibyeardivision}[1]{\abx@bibyeardivision{#1}}
+\newrobustcmd*\mkbibseason{% LEGACY
+ \blx@warning@noline{%
+ '\string\mkbibseason' is deprecated in favour of\MessageBreak
+ '\string\mkbibyeardivision'}%
+ \mkbibyeardivision}
+\newrobustcmd*{\mkbibmonth}[1]{%
+ \ifcase0#1\relax
+ \blx@warning@entry{Month out of range or not an integer}%
+ \or\abx@bibmonth{january}%
+ \or\abx@bibmonth{february}%
+ \or\abx@bibmonth{march}%
+ \or\abx@bibmonth{april}%
+ \or\abx@bibmonth{may}%
+ \or\abx@bibmonth{june}%
+ \or\abx@bibmonth{july}%
+ \or\abx@bibmonth{august}%
+ \or\abx@bibmonth{september}%
+ \or\abx@bibmonth{october}%
+ \or\abx@bibmonth{november}%
+ \or\abx@bibmonth{december}%
+ \else
+ \blx@warning@entry{Month out of range}#1%
+ \fi}
+
+% strip leading zeros and prepend zero for month/day/timeparts
+% Allow for non numeric labelyear values
+\protected\def\blx@imc@forcezerosmdt#1{%
+ \protected@edef\blx@tempa{#1}%
+ \expandafter\blx@imc@forcezerosmdt@i\expandafter{\blx@tempa}}
+
+\protected\def\blx@imc@forcezerosmdt@i#1{%
+ \notblank{#1}
+ {\blx@imc@ifinteger{#1}
+ {\ifnumless{#1}{10}
+ {0\the\numexpr(#1)\relax}
+ {#1}}
+ {#1}}
+ {#1}}
+
+% strip leading zeros and prepend zero(s) for year
+% Allow for non numeric labelyear values
+\protected\def\blx@imc@forcezerosy#1{%
+ \protected@edef\blx@tempa{#1}%
+ \expandafter\blx@imc@forcezerosy@i\expandafter{\blx@tempa}}
+
+\protected\def\blx@imc@forcezerosy@i#1{%
+ \notblank{#1}
+ {\blx@imc@ifinteger{#1}
+ {\ifnumless{#1}{10}% 1-digit year
+ {000\the\numexpr(#1)\relax}
+ {\ifnumless{#1}{100}% 2-digit year
+ {00\the\numexpr(#1)\relax}
+ {\ifnumless{#1}{1000}% 3-digit year
+ {0\the\numexpr(#1)\relax}
+ {#1}}}}
+ {#1}}
+ {#1}}%
+
+\let\blx@imc@mkyearzeros\blx@imc@forcezerosy
+\let\blx@imc@mkmonthzeros\blx@imc@forcezerosmdt
+\let\blx@imc@mkdayzeros\blx@imc@forcezerosmdt
+\protected\def\blx@imc@stripzeros#1{%
+ \begingroup
+ \setbox\@tempboxa=\hbox\bgroup
+ \aftergroup\endgroup
+ \abx@hook@xsanitize
+ \if0#1\relax
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi
+ {\@tempcnta#1\relax
+ \expandafter\egroup
+ \number\@tempcnta
+ \@tempcnta#1\relax}
+ {\egroup#1}}
+
+\let\blx@imc@printlabeldate\@empty
+\let\blx@imc@printlabeltime\@empty
+\let\blx@imc@printlabeldateextra\@empty
+
+\blx@regimcs{\printlabeldate \printlabeltime \printlabeldateextra
+ \stripzeros \forcezerosy \forcezerosmdt
+ \mkyearzeros \mkmonthzeros \mkdayzeros \mktimezeros}
+
+% User macro for retrieving currrent language
+\def\currentlang{\blx@languagename}
+
+% We need to be able to prefix \providetoggle with \global,
+% plus we don't need the testing from \providetoggle anway.
+% This uses internal implementation details of etoolbox's
+% toggles, so is a bit meh, but it's better than rolling our own
+% version of toggles just for that.
+\newcommand*{\blx@etb@inittoggle}[1]{\cslet{etb@tgl@#1}\@secondoftwo}
+
+% There is no \nocaptions..., so if we send everything to \captions...
+% we need to find a way to call our noextras only in situations where
+% \noextras... is called to clean up \extras... AND \captions...
+% and not just \extras...
+% We detect this by setting a toggle in the \captions...
+
+% {<language>}{<strings>}
+\def\blx@maplang@babel#1#2{%
+ \global\blx@etb@inittoggle{blx@lang@captions@#2}%
+ \ifdefstring{\blx@langhook}{captions}
+ {\csgappto{captions#1}{%
+ \toggletrue{blx@lang@captions@#2}%
+ \blx@resetpunct
+ \csuse{abx@extras@#2}%
+ \csuse{abx@strings@#2}}%
+ \csgappto{noextras#1}{%
+ \iftoggle{blx@lang@captions@#2}
+ {\blx@resetpunct
+ \csuse{abx@noextras@#2}}
+ {}}}
+ {\csgappto{extras#1}{%
+ \blx@resetpunct
+ \csuse{abx@extras@#2}%
+ \csuse{abx@strings@#2}}%
+ \csgappto{noextras#1}{%
+ \blx@resetpunct
+ \csuse{abx@noextras@#2}}}}
+
+\def\blx@maplang@polyglossia#1#2{%
+ \global\blx@etb@inittoggle{blx@lang@captions@#2}%
+ \ifdefstring{\blx@langhook}{captions}
+ {\csgappto{captions@bbl@#1}{%
+ \toggletrue{blx@lang@captions@#2}%
+ \blx@resetpunct
+ \csuse{abx@extras@#2}%
+ \csuse{abx@strings@#2}}%
+ \csgappto{noextras@bbl@#1}{%
+ \iftoggle{blx@lang@captions@#2}
+ {\blx@resetpunct
+ \csuse{abx@noextras@#2}}
+ {}}}
+ {\csgappto{blockextras@bbl@#1}{%
+ \blx@resetpunct
+ \csuse{abx@extras@#2}%
+ \csuse{abx@strings@#2}}%
+ \csgappto{inlineextras@bbl@#1}{%
+ \blx@resetpunct
+ \csuse{abx@extras@#2}%
+ \csuse{abx@strings@#2}}%
+ \csgappto{noextras@bbl@#1}{%
+ \blx@resetpunct
+ \csuse{abx@noextras@#2}}}}
+
+%% babel/polyglossia interface
+\def\blx@beglang{\blx@clearlang\begingroup}
+\def\blx@endlang{\endgroup}
+\let\blx@beglangbib\blx@beglang
+\let\blx@endlangbib\blx@endlang
+\let\blx@beglangcite\blx@beglang
+\let\blx@endlangcite\blx@endlang
+\let\blx@hook@endlang\@empty
+\let\blx@hook@initlang\@empty
+\let\blx@imc@mainlang\@empty
+\let\blx@imc@textmainlang\@firstofone
+\let\blx@imc@textouterlang\@firstofone
+\def\blx@hyphenreset{%
+ \blx@ifhyphenationundef{\blx@languagename}
+ {}
+ {\language\csname l@\blx@languagename\endcsname\relax}%
+ \ifcsundef{\blx@languagename hyphenmins}
+ {\blx@sethyphenmins\tw@\thr@@}
+ {\expandafter\expandafter\expandafter\blx@sethyphenmins
+ \csname\blx@languagename hyphenmins\endcsname}}
+\def\blx@sethyphenmins#1#2{%
+ \lefthyphenmin#1\relax
+ \righthyphenmin#2\relax}
+
+
+
+\def\blx@mkautolangbabel{%
+ \ifundef\bbl@main@language
+ {\blx@error
+ {No default 'babel' language defined}
+ {You must define a default language for 'babel'}}
+ {\let\blx@main@language\bbl@main@language}%
+ \let\blx@outer@language\blx@main@language
+ % use afterreset to get in a bit earlier
+ % we want to be there before \captions... is issued
+ % beforeextras is before extras, but captions come before extras
+ % afterreset was added in 3.9i (~2014-03-16)
+ % way before 3.9r (2016-04-23), which we require
+ \AddBabelHook{biblatex@langsetup}{afterreset}{%
+ \expandafter\blx@langsetup@indoc\expandafter{\languagename}}%
+ \ifdef\blx@thelangenv
+ {\def\blx@beglang{%
+ \blx@clearlang
+ \begingroup
+ % track outer language (i.e. language not selected by biblatex)
+ \ifundef\blx@outer@language@set
+ {\let\blx@outer@language\blx@languagename
+ \let\blx@outer@language@set\@empty}
+ {}%
+ % Need to override all entries, regardless of if there is a
+ % langid if language=<language> option is given
+ \ifboolexpr { test {\ifdef\abx@field@@@langid }
+ or
+ test {\ifdef\blx@forcelanguagename} }
+ % override local langid if we forced it with
+ % language=<language> option
+ {\ifdef\blx@forcelanguagename
+ {\let\abx@field@@@langid\blx@forcelanguagename}
+ {}%
+ \let\blx@languagename\abx@field@@@langid% track global language
+ \blx@ifhyphenationundef{\abx@field@@@langid}
+ {\blx@warn@nohyph{\abx@field@@@langid}}
+ {\blx@hook@initlang
+ \def\blx@endlang{%
+ \blx@hook@endlang
+ \csname end\blx@thelangenv\endcsname
+ \endgroup}%
+ \iftoggle{blx@autolangbib}
+ {\let\blx@endlangbib\blx@endlang}
+ {}%
+ \iftoggle{blx@autolangcite}
+ {\let\blx@endlangcite\blx@endlang}
+ {}%
+ \csname\blx@thelangenv\expandafter\endcsname
+ \expandafter{\abx@field@@@langid}}}
+ {}}}
+ {}%
+ \def\blx@imc@mainlang{%
+ \ifundef\blx@warn@mainlang
+ {\blx@warning@noline{%
+ '\string\mainlang' is deprecated in favour of\MessageBreak
+ '\string\textmainlang'.%
+ \MessageBreak
+ Please consider using the new command,\MessageBreak
+ but note that the syntax is different.\MessageBreak
+ Using the old, problematic definition}%
+ \global\let\blx@warn@mainlang\@empty}
+ {}%
+ \expandafter\selectlanguage\expandafter{\blx@main@language}}%
+ \def\blx@imc@textmainlang##1{%
+ {{\expandafter\selectlanguage\expandafter{\blx@main@language}##1}}}%
+ \def\blx@imc@textouterlang##1{%
+ {{\expandafter\selectlanguage\expandafter{\blx@outer@language}##1}}}%
+ \expandafter\blx@langsetup@from@pkglist\expandafter{\blx@main@language}%
+}
+
+\def\blx@beglang@spacefactors{\frenchspacing}
+
+\def\blx@mkautolangpoly{%
+ \ifundef\mainbabelname
+ {\ifundef\bbl@main@language
+ {\blx@error
+ {No default 'polyglossia' language defined}
+ {You must define a default language for 'polyglossia'}}
+ {\let\blx@main@language\bbl@main@language}}
+ {\let\blx@main@language\mainbabelname}%
+ \let\blx@outer@language\blx@main@language
+ \ifundef\polyglossia@language@switched
+ {\apptocmd\select@language
+ {\expandafter\blx@langsetup@indoc\expandafter{\babelname}}
+ {}
+ {\blx@err@patch{'polyglossia' package}%
+ \blx@mknoautolang}}
+ {\appto\polyglossia@language@switched{%
+ \expandafter\blx@langsetup@indoc\expandafter{\babelname}}}%
+ \ifdef\blx@thelangenv
+ {\def\blx@beglang{%
+ \blx@clearlang
+ \begingroup
+ % track outer language (i.e. language not selected by biblatex)
+ \ifundef\blx@outer@language@set
+ {\let\blx@outer@language\blx@languagename
+ \let\blx@outer@language@set\@empty}
+ {}%
+ % Need to override all entries, regardless of if there is a
+ % langid if language=<language> option is given
+ \ifboolexpr { test {\ifdef\abx@@@field@langid }
+ or
+ test {\ifdef\blx@forcelanguagename} }
+ % override local langid if we forced it with
+ % language=<language> option
+ {\ifdef\blx@forcelanguagename
+ {\let\abx@field@@@langid\blx@forcelanguagename}
+ {}%
+ \let\blx@languagename\abx@field@@@langid% track global language
+ \blx@ifhyphenationundef{\abx@field@@@langid}
+ {\blx@warn@nohyph{\abx@field@@@langid}}
+ {\blx@hook@initlang
+ \def\blx@endlang{%
+ \blx@hook@endlang
+ % Polyglossia language envs are \<lang>[]
+ \ifcsstring{blx@thelangenv}{langname}
+ {\csname end\abx@field@@@langid\endcsname}
+ {\csname end\blx@thelangenv\endcsname}%
+ \endgroup}%
+ \iftoggle{blx@autolangbib}
+ {\let\blx@endlangbib\blx@endlang}
+ {}%
+ \iftoggle{blx@autolangcite}
+ {\let\blx@endlangcite\blx@endlang}
+ {}%
+ \ifcsstring{blx@thelangenv}{langname}
+ {\ifdef\abx@field@@@langidopts
+ {\csname\abx@field@@@langid\expandafter\endcsname
+ \expandafter[\abx@field@@@langidopts]}
+ {\csname\abx@field@@@langid\endcsname}}
+ {\csname\blx@thelangenv\expandafter\endcsname
+ \expandafter{\abx@field@@@langid}}%
+ \blx@beglang@spacefactors}}
+ {}}}
+ {}%
+ \def\blx@imc@mainlang{%
+ \ifundef\blx@warn@mainlang
+ {\blx@warning@noline{%
+ '\string\mainlang' is deprecated in favour of\MessageBreak
+ '\string\textmainlang'.%
+ \MessageBreak
+ Please consider using the new command,\MessageBreak
+ but note that the syntax is different.\MessageBreak
+ Using the old, problematic definition}%
+ \global\let\blx@warn@mainlang\@empty}
+ {}%
+ \select@language{\blx@main@language}}%
+ \def\blx@imc@textmainlang##1{{{\select@language{\blx@main@language}##1}}}%
+ \def\blx@imc@textouterlang##1{{{\select@language{\blx@outer@language}##1}}}%
+ \expandafter\blx@langsetup@from@pkglist\expandafter{\blx@main@language}}
+
+\def\blx@mknoautolang{%
+ \blx@lbxinput{\blx@languagename}
+ {}
+ {\blx@err@nolang{\blx@languagename}}}
+
+\blx@regimcs{\mainlang \textmainlang \textouterlang}
+
+\newrobustcmd*{\DeclareRedundantLanguages}[2]{%
+ \begingroup
+ \ifblank{#2}
+ {\def\do##1{%
+ \global\csundef{blx@rlm@##1}%
+ \global\csundef{blx@rlm@lang##1}}}
+ {\def\do##1{%
+ \csxdef{blx@rlm@##1}{#2}%
+ \csxdef{blx@rlm@lang##1}{#2}}}%
+ \docsvlist{#1}%
+ \endgroup}
+
+\def\blx@clearlang{%
+ \iftoggle{blx@clearlang}
+ {\iflistundef{language}
+ {}
+ {\ifnumgreater{\value{language}}{1}
+ {}
+ {\expandafter\blx@clearlang@i\abx@list@@@language}}}
+ {}}
+
+\def\blx@clearlang@i#1{%
+ \ifcsdef{blx@rlm@#1}
+ {\expandafter\expandafter\expandafter\forcsvlist
+ \expandafter\expandafter\expandafter\blx@clearlang@ii
+ \expandafter\expandafter\expandafter{%
+ \csname blx@rlm@#1\endcsname}}
+ {}}
+
+\def\blx@clearlang@ii#1{%
+ \ifdefstring\languagename{#1}
+ {\clearlist{language}}
+ {}}
+
+%% Biber equivalents to bibtex data interface
+
+\def\abx@doentrytypes{\dolistloop\blx@datamodel@entrytypes}
+
+% fields which can be used as labels - we auto-create some macros for these
+\def\abx@dolabelfields{\dolistloop\blx@datamodel@labelfields}
+\def\abx@dolabelwidths{%
+ \do{labelnumber}%
+ \do{labelalpha}%
+ \abx@dolabelfields}
+
+\def\abx@donames{\dolistloop\blx@datamodel@names}
+\def\abx@donameparts{\expandafter\docsvlist\expandafter{\blx@datamodel@constant@nameparts}}
+
+\def\abx@dofields{\dolistloop\blx@datamodel@fields}
+
+\def\abx@dolists{%
+ \dolistloop\blx@datamodel@lists%
+ \do{pageref}}
+
+% Used to pass regexps to .bcf
+\def\regexp#1{\expandafter\zap@space\detokenize{#1} \@empty}
+
+% Have to do this otherwise the '~'s in the .bcf strings are not expanded
+% This is done for the .bcf later but since we have to do all the
+% data model things much earlier, have to set this here and reset on finishing
+\let\blx@tsave~
+\let~\space
+% Data model and supporting macros must be loaded early
+\blx@inputonce{blx-dm.def}{biblatex default data model}{}{}{}{}
+\let~\blx@tsave
+
+% We need to now load any style data model
+% Order of precedence is:
+% <datamodel option>.dbx
+% <style option>.dbx
+% <citestyle option>.dbx and <bibstyle option>.dbx
+% This has to be done before the real options processing so we need to
+% pick out just these four options to look at. You can't do this with keyval,
+% you have to use kvoptions. So, pick out these four, pass through all
+% others and delete datamodel option as we don't care about it when we come
+% to really set options below
+\SetupKeyvalOptions{
+ family=blx@opt@eldt,
+ prefix=blx@opt@eldt@}
+\DeclareStringOption{datamodel}
+\DeclareStringOption{style}
+\DeclareStringOption{citestyle}
+\DeclareStringOption{bibstyle}
+\DeclareDefaultOption{}
+\ProcessLocalKeyvalOptions{blx@opt@eldt}
+\ifx\blx@opt@eldt@datamodel\@empty
+ \ifx\blx@opt@eldt@style\@empty
+ \ifx\blx@opt@eldt@citestyle\@empty
+ \else
+ \blx@inputonce{\blx@opt@eldt@citestyle.dbx}{biblatex citestyle data model}{}{}{}{}
+ \fi
+ \ifx\blx@opt@eldt@bibstyle\@empty
+ \else
+ \blx@inputonce{\blx@opt@eldt@bibstyle.dbx}{biblatex bibstyle data model}{}{}{}{}
+ \fi
+ \else
+ \blx@inputonce{\blx@opt@eldt@style.dbx}{biblatex style data model}{}{}{}{}
+ \fi
+\else
+ \blx@inputonce{\blx@opt@eldt@datamodel.dbx}{biblatex style data model}{}{}{}{}
+\fi
+\DisableKeyvalOption[action=undef,local]{blx@opt@eldt}{datamodel}
+
+% Override with user-defined data model if there is one
+\blx@inputonce{biblatex-dm.cfg}{biblatex custom data model}{}{}{}{}
+
+% Initialise option datatypes lists
+\global\let\blx@bcf@options@scope@global\@empty
+\global\let\blx@bcf@options@scope@type\@empty
+\global\let\blx@bcf@options@scope@entry\@empty
+\global\let\blx@bcf@options@scope@namelist\@empty
+\global\let\blx@bcf@options@scope@name\@empty
+\global\let\blx@globalopts@datatypes\@empty
+\global\let\blx@typeopts@datatypes\@empty
+\global\let\blx@entryopts@datatypes\@empty
+\global\let\blx@namelistopts@datatypes\@empty
+\global\let\blx@nameopts@datatypes\@empty
+\def\do#1{%
+ \global\cslet{blx@globalopts@#1}\@empty
+ \global\cslet{blx@typeopts@#1}\@empty
+ \global\cslet{blx@entryopts@#1}\@empty
+ \global\cslet{blx@namelistopts@#1}\@empty
+ \global\cslet{blx@nameopts@#1}\@empty}
+\expandafter\expandafter\expandafter
+\docsvlist
+\expandafter\expandafter\expandafter
+{\csname blx@datamodel@constant@optiondatatypes\endcsname}
+
+% Helper for collecting options and datatypes
+% {<datatype>}{<scope>}{<name>}
+\def\blx@collectopts#1#2#3{%
+ \ifinlistcs{#1}{#2@datatypes}
+ {}
+ {\listcsgadd{#2@datatypes}{#1}}%
+ \ifinlistcs{#3}{#2@#1}
+ {}
+ {\listcsgadd{#2@#1}{#3}}}
+
+
+% entry, namelist, name scopes are input/handled on the backend side
+% if we want to see the info back on the biblatex side, we need the backend
+% to pass the info through via the .bbl file
+\def\blx@declareblxopt@extrahandler@entry#1{%
+ \csgdef{blx@bcf@backendout@entry@#1}{1}}
+\def\blx@declareblxopt@extrahandler@namelist#1{%
+ \csgdef{blx@bcf@backendout@namelist@#1}{1}}
+\def\blx@declareblxopt@extrahandler@name#1{%
+ \csgdef{blx@bcf@backendout@name@#1}{1}}
+
+% {<option scope>}[<datatype>]{<key>}[<value>]{<code>}
+\protected\def\blx@declareblxopt#1{%
+ \@ifnextchar[%]
+ {\blx@declareblxopt@i#1}
+ {\blx@declareblxopt@i#1[]}}
+
+\def\blx@declareblxopt@i#1[#2]#3{%
+ \begingroup
+ \ifblank{#2}
+ {\def\blx@tempa{boolean}}
+ {\ifcsundef{blx@#1opts@#2}
+ {\blx@warn@badoptdt{#2}%
+ \def\blx@tempa{boolean}}
+ {\def\blx@tempa{#2}}}%
+ \expandafter\blx@collectopts\expandafter{\blx@tempa}{blx@#1opts}{#3}%
+ \ifcsundef{blx@declareblxopt@extrahandler@#1}
+ {}
+ {\csuse{blx@declareblxopt@extrahandler@#1}{#3}}%
+ \endgroup
+ \@ifnextchar[%]
+ {\csuse{blx@defblxopt@#1opt}{#3}}
+ {\csuse{blx@defblxopt@#1opt}{#3}[]}}
+
+\long\def\blx@defblxopt@globalopt#1[#2]#3{%
+ \blx@kv@ifkeyundef{blx@opt@ldt}{#1}
+ {\blx@kv@ifkeyundef{blx@opt@pre}{#1}
+ {\ifblank{#2}
+ {\blx@kv@defkey{blx@opt@pre}{#1}{#3}}
+ {\blx@kv@defkey{blx@opt@pre}{#1}[{#2}]{#3}}}
+ {\blx@err@optdef{#1}{pre/global}}}
+ {\blx@err@optdef{#1}{ldt/global}}}
+
+\long\def\blx@defblxopt@typeentryopt#1#2[#3]#4{%
+ \blx@kv@ifkeyundef{blx@opt@#1}{#2}
+ {\ifblank{#3}
+ {\blx@kv@defkey{blx@opt@#1}{#2}{#4}}
+ {\blx@kv@defkey{blx@opt@#1}{#2}[{#3}]{#4}}}
+ {\blx@err@optdef{#2}{#1}}}
+
+\def\blx@defblxopt@typeopt{\blx@defblxopt@typeentryopt{typ}}
+\def\blx@defblxopt@entryopt{\blx@defblxopt@typeentryopt{ent}}
+\def\blx@defblxopt@nameopt{\blx@defblxopt@typeentryopt{name}}
+\def\blx@defblxopt@namelistopt{\blx@defblxopt@typeentryopt{namelist}}
+
+% The Declare*Option macros are for options which need to be visible
+% to biblatex. For options which only biber needs to see, they can be
+% passed to the .bcf directly using \blx@collectopts
+% [<datatype>]{<key>}[<default value>]{<code>}
+\newcommand*{\DeclareBibliographyOption}{\blx@declareblxopt{global}}
+\newcommand*{\DeclareTypeOption}{\blx@declareblxopt{type}}
+\newcommand*{\DeclareEntryOption}{\blx@declareblxopt{entry}}
+
+% we'll assume that \blx@optscopes is non-empty from now on
+\newcommand*{\blx@optscopes}{}
+\forcsvlist{\listadd\blx@optscopes}{global,type,entry}
+
+\long\def\blx@defblxopt@loopscopes@i#1[#2]#3#4{%
+ \csuse{blx@defblxopt@#4opt}{#1}[{#2}]{#3}}
+
+\long\def\blx@defblxopt@loopscopes#1[#2]#3{%
+ \forlistloop{\blx@defblxopt@loopscopes@i{#1}[{#2}]{#3}}{\blx@optscopes}}
+
+% {<option scopes>}[<datatype>]{<key>}[<default value>]{<code>}
+\newrobustcmd*{\DeclareBiblatexOption}[1]{%
+ \let\blx@optscopes\@empty
+ \forcsvlist{\listadd\blx@optscopes}{#1}%
+ \blx@DeclareBiblatexOption@i}
+
+\newrobustcmd*{\blx@DeclareBiblatexOption@i}[2][]{%
+ \begingroup
+ \ifblank{#1}
+ {\def\blx@tempa{boolean}}
+ {\let\blx@tempb\@secondoftwo
+ \def\do##1{%
+ \ifcsundef{blx@##1opts@#1}
+ {\let\blx@tempb\@firstoftwo\listbreak}
+ {}}%
+ \dolistloop{\blx@optscopes}%
+ \blx@tempb
+ {\blx@warn@badoptdt{#1}%
+ \def\blx@tempa{boolean}}
+ {\def\blx@tempa{#1}}}%
+ \def\do##1{%
+ \expandafter\blx@collectopts\expandafter{\blx@tempa}{blx@##1opts}{#2}%
+ \ifcsundef{blx@declareblxopt@extrahandler@##1}
+ {}
+ {\csuse{blx@declareblxopt@extrahandler@##1}{#2}}}%
+ \dolistloop{\blx@optscopes}%
+ \endgroup
+ \@ifnextchar[%]
+ {\blx@defblxopt@loopscopes{#2}}
+ {\blx@defblxopt@loopscopes{#2}[]}}
+
+% this macro is internal for now because options declared with it need
+% support on the backend side and are not useful for document or style authors
+% {<option scopes>}[<datatype>]{<key>}
+\newrobustcmd*{\blx@DeclareBackendOption}[1]{%
+ \let\blx@optscopes\@empty
+ \forcsvlist{\listadd\blx@optscopes}{#1}%
+ \blx@DeclareBackendOption@i}
+
+\newrobustcmd*{\blx@DeclareBackendOption@i}[2][]{%
+ \begingroup
+ \ifblank{#1}
+ {\def\blx@tempa{boolean}}
+ {\let\blx@tempb\@secondoftwo
+ \def\do##1{%
+ \ifcsundef{blx@##1opts@#1}
+ {\let\blx@tempb\@firstoftwo\listbreak}
+ {}}%
+ \dolistloop{\blx@optscopes}%
+ \blx@tempb
+ {\blx@warn@badoptdt{#1}%
+ \def\blx@tempa{boolean}}
+ {\def\blx@tempa{#1}}}%
+ \def\do##1{%
+ \expandafter\blx@collectopts\expandafter{\blx@tempa}{blx@##1opts}{#2}}%
+ \dolistloop{\blx@optscopes}%
+ \endgroup}
+
+% per-entry inheritance blocking option for biber
+\blx@DeclareBackendOption{entry}[string]{noinherit}
+
+
+% nametemplates meta-option entry/namelist/name scope
+% this meta option is resolved by Biber
+\blx@DeclareBackendOption{entry,namelist,name}[string]{nametemplates}
+\gdef\blx@bcf@backendin@entry@nametemplates{sortingnamekeytemplatename,%
+ uniquenametemplatename,labelalphanametemplatename}%
+\gdef\blx@bcf@backendin@namelist@nametemplates{sortingnamekeytemplatename,%
+ uniquenametemplatename,labelalphanametemplatename}%
+\gdef\blx@bcf@backendin@name@nametemplates{sortingnamekeytemplatename,%
+ uniquenametemplatename,labelalphanametemplatename}%
+
+
+
+% Misc globalopts
+\blx@DeclareBackendOption{global}[xml]{datamodel}
+\blx@collectopts{string}{blx@globalopts}{controlversion}
+
+\newcommand*{\labelalphaothers}{+}
+\newcommand*{\sortalphaothers}{\labelalphaothers}
+\blx@DeclareBackendOption{global,type}[string]{alphaothers}
+\blx@DeclareBackendOption{global,type}[string]{sortalphaothers}
+
+% date, eventdate, urldate etc.
+\def\abx@dodates{\dolistloop\blx@datamodel@dates}
+% year, endyear, month, endmonth etc.
+\def\abx@dodateparts{\expandafter\docsvlist\expandafter{\blx@dateparts}}
+
+% '', event, url, orig etc.
+\def\do#1{%
+ \blx@stripfromendinto{#1}{date}\blx@datetype
+ \listxadd\blx@datetypes{\blx@datetype}}
+\abx@dodates
+% main date field has an empty prefix (''date) which can't be added to a list
+% and so do it explicity
+% This is one of the few (only?) hard-coded datamodel assumptions but it is
+% very unlikely that anyone would *remove* the main date field in a custom application ...
+\def\abx@dodatetypes{\do{}\dolistloop\blx@datetypes}
+
+% Sanity check on date field names - they *must* end in 'date' to make things easier/possible later
+\def\do#1{%
+ \blx@ifstrendswith{#1}{date}
+ {}
+ {\blx@error
+ {Invalid date field name '#1'}
+ {Date fields in the datamodel must end in the string 'date' but '#1' doesn't}}}
+\abx@dodates
+
+% date meta-information option fallbacks
+\def\do#1{%
+ \cslet{#1datecircaprint}\@empty
+ \cslet{#1enddatecircaprint}\@empty
+ \cslet{#1datecircaprintiso}\@empty
+ \cslet{#1enddatecircaprintiso}\@empty
+ \cslet{#1dateuncertainprint}\@empty
+ \cslet{#1enddateuncertainprint}\@empty
+ \cslet{#1dateeraprint}\@gobble
+ \cslet{#1dateeraprintpre}\@gobble
+ \csdef{if#1dateera}##1{\@secondoftwo}%
+ \csdef{if#1enddateera}##1{\@secondoftwo}%
+ \cslet{if#1datecirca}\@secondoftwo
+ \cslet{if#1enddatecirca}\@secondoftwo
+ \cslet{if#1datejulian}\@secondoftwo
+ \cslet{if#1enddatejulian}\@secondoftwo
+ \cslet{if#1dateuncertain}\@secondoftwo
+ \cslet{if#1enddateuncertain}\@secondoftwo
+ \cslet{if#1dateunknown}\@secondoftwo
+ \cslet{if#1enddateunknown}\@secondoftwo}
+\abx@dodatetypes
+\do{labeldate}
+
+% These are internal fields/booleans which are not part of the data model but
+% which need to be dealt with along with data model fields in places
+\def\do#1{%
+ \listxadd\blx@datemetafields{#1dateera}%
+ \listxadd\blx@datemetafields{#1enddateera}%
+ \listxadd\blx@datemetafields{#1dateunspecified}}
+\abx@dodatetypes
+
+
+\def\do#1{%
+ \listxadd\blx@datemetabooleans{#1datecirca}%
+ \listxadd\blx@datemetabooleans{#1enddatecirca}%
+ \listxadd\blx@datemetabooleans{#1datejulian}%
+ \listxadd\blx@datemetabooleans{#1enddatejulian}%
+ \listxadd\blx@datemetabooleans{#1dateuncertain}%
+ \listxadd\blx@datemetabooleans{#1enddateuncertain}%
+ \listxadd\blx@datemetabooleans{#1dateunknown}%
+ \listxadd\blx@datemetabooleans{#1enddateunknown}}
+\abx@dodatetypes
+
+\def\do#1{%
+ \listxadd\blx@namepartmetafields{#1namehash}%
+ \listxadd\blx@namepartmetafields{#1fullhash}%
+ \listxadd\blx@namepartmetafields{#1bibnamehash}}
+\abx@donameparts
+
+\def\do#1{%
+ \listxadd\blx@labeldatepartfields{label#1}}
+\abx@dodateparts
+
+\def\abx@dointernalfields{%
+ \do{clonesourcekey}%
+ \do{labeldate}%
+ \do{labeldatesource}%
+ \do{labeldateera}%
+ \do{labelenddateera}%
+ \do{labelyear}%
+ \do{labelendyear}%
+ \do{labelmonth}%
+ \do{labelendmonth}%
+ \do{labelday}%
+ \do{labelendday}%
+ \do{labelhour}%
+ \do{labelendhour}%
+ \do{labelminute}%
+ \do{labelendminute}%
+ \do{labelsecond}%
+ \do{labelendsecond}%
+ \do{labeltimezone}%
+ \do{labelendtimezone}%
+ \do{labelyeardivision}%
+ \do{labelendyeardivision}%
+ \do{entrykey}%
+ \do{entryset}%
+ \do{entrysetcount}%
+ \do{entrytype}%
+ \do{extraalpha}%
+ \do{extraname}%
+ \do{extratitle}%
+ \do{extratitleyear}%
+ \do{extradate}%
+ \do{fullhash}%
+ \do{labelalpha}%
+ \do{labelnumber}%
+ \do{labelprefix}%
+ \do{labeltitleyear}%
+ \do{localnumber}%
+ \do{namehash}%
+ \do{bibnamehash}%
+ \do{options}%
+ \do{sortinit}%
+ \do{sortinithash}%
+ \dolistloop\blx@datemetafields
+ \dolistloop\blx@namepartmetafields
+ \dolistloop\blx@labeldatepartfields}
+
+\def\abx@dobooleans{%
+ \do{crossrefsource}%
+ \do{xrefsource}%
+ \do{singletitle}%
+ \do{uniquetitle}%
+ \do{uniquebaretitle}%
+ \do{uniquework}%
+ \do{uniqueprimaryauthor}%
+ \do{nocite}%
+ \dolistloop\blx@datemetabooleans}
+
+% Date datatype fields
+\def\do#1{%
+ \protected\csdef{blx@imc@print#1date}{}%
+ \protected\csdef{blx@imc@print#1dateextra}{}%
+ \protected\csdef{blx@imc@print#1time}{}}
+\abx@dodatetypes
+
+% \blx@regimcs doesn't work in do-lists nicely so use internal macro it calls
+\def\do#1{%
+ \xappto\blx@blxinit{\csletcs{print#1date}{blx@imc@print#1date}}%
+ \xappto\blx@blxinit{\csletcs{print#1time}{blx@imc@print#1time}}%
+ \xappto\blx@blxinit{\csletcs{print#1dateextra}{blx@imc@print#1dateextra}}}
+\abx@dodatetypes
+
+% Set up circa, julian and uncertain date internals
+\def\blx@makeifdatemeta@bools@i#1#2{%
+ \appto\blx@blxinit{%
+ \blx@makeifdatemeta@bools{#1}{#2}}}
+
+\def\blx@makeifdatemeta@bools#1#2{%
+ \csdef{if#1date#2}{\iftoggle{abx@bool@#1date#2}}%
+ \csdef{if#1enddate#2}{\iftoggle{abx@bool@#1enddate#2}}%
+ \appto\blx@TE@hook{%
+ \csdef{if#1date#2}{\blx@TE{\iftoggle{abx@bool@#1date#2}}}%
+ \csdef{if#1enddate#2}{\blx@TE{\iftoggle{abx@bool@#1enddate#2}}}}}
+
+% Set up date era internals
+\def\blx@makeifdatemeta@fields@i#1{%
+ \appto\blx@blxinit{%
+ \blx@makeifdatemeta@fields{#1}}}
+
+\def\blx@makeifdatemeta@fields#1{%
+ \csdef{if#1dateera}##1{\ifcsstring{abx@field@@@#1dateera}{##1}}%
+ \csdef{if#1enddateera}##1{\ifcsstring{abx@field@@@#1enddateera}{##1}}%
+ \appto\blx@TE@hook{%
+ \csdef{if#1dateera}##1{\blx@TE{\ifcsstring{abx@field@@@#1dateera}{##1}}}%
+ \csdef{if#1enddateera}##1{\blx@TE{\ifcsstring{abx@field@@@#1enddateera}{##1}}}}}
+
+% Create date meta information boolean tests
+\def\do#1{%
+ \blx@makeifdatemeta@bools@i{#1}{circa}%
+ \blx@makeifdatemeta@bools@i{#1}{julian}%
+ \blx@makeifdatemeta@bools@i{#1}{uncertain}%
+ \blx@makeifdatemeta@bools@i{#1}{unknown}}
+\abx@dodatetypes
+
+% Create date meta information field tests
+\def\do#1{%
+ \blx@makeifdatemeta@fields@i{#1}}
+\abx@dodatetypes
+
+% Resolve date meta information tests and print routines for labeldate
+% We have to test here, in each \def, whether the labeldatesource
+% is a real date field or not. If it's not, then we don't want to use
+% any of the meta-information and so make the conditionals always return false
+% This can't be neater by testing for the \abx@field@@@labeldatesource value
+% earlier because its not available until the tests are in scope.
+\appto\blx@blxinit{%
+ \ifdefstring\blx@dateera{astronomical}
+ {\protected\def\dateeraprintpre#1{%
+ \iffieldnum{#1}
+ {\begingroup
+ \let\blx@tempa\@empty
+ \blx@ifstrendswith{#1}{endyear}
+ {\blx@stripfromendinto{#1}{endyear}\blx@datetype
+ \def\blx@tempa{end}}
+ {\blx@stripfromendinto{#1}{year}\blx@datetype}%
+ \csuse{if\blx@datetype\blx@tempa dateera}{bce}
+ {\ifnumless{0-\thefield{#1}}{0}
+ {\csuse{bibdateera\blx@tempa prefix}}
+ {}}
+ {}%
+ \endgroup}
+ {}}}
+ {\protected\def\dateeraprint#1{%
+ \iffieldnum{#1}
+ {\begingroup
+ \let\blx@tempa\@empty
+ \blx@ifstrendswith{#1}{endyear}
+ {\blx@stripfromendinto{#1}{endyear}\blx@datetype
+ \def\blx@tempa{end}}
+ {\blx@stripfromendinto{#1}{year}\blx@datetype}%
+ \csuse{if\blx@datetype\blx@tempa dateera}{bce}
+ {\ifnum\numexpr0-\thefield{#1}\relax<\blx@dateeraauto
+ % \midsentence is to suppress automatic capitalisation
+ \printdelim{dateeradelim}\midsentence\bibstring{\blx@dateera@bce}\relax
+ \fi}
+ {\ifnumless{\thefield{#1}}\blx@dateeraauto
+ {\printdelim{dateeradelim}\midsentence\bibstring{\blx@dateera@ce}}
+ {}}%
+ \endgroup}
+ {}}}%
+ \iftoggle{blx@labeldateparts}
+ {\def\iflabeldateera#1{% start era
+ \xifinlist{\abx@field@@@labeldatesource date}\blx@datamodel@dates
+ {\ifcsstring{abx@field@@@\abx@field@@@labeldatesource dateera}{#1}}
+ {\@secondoftwo}}%
+ \appto\blx@TE@hook{\def\iflabeldateera#1{%
+ \xifinlist{\abx@field@@@labeldatesource date}\blx@datamodel@dates
+ {\blx@TE{\ifcsstring{abx@field@@@\abx@field@@@labeldatesource dateera}{#1}}}
+ {\@secondoftwo}}}%
+ % end era
+ \def\iflabelenddateera#1{%
+ \xifinlist{\abx@field@@@labeldatesource date}\blx@datamodel@dates
+ {\ifcsstring{abx@field@@@\abx@field@@@labeldatesource enddateera}{#1}}
+ {\@secondoftwo}}%
+ \appto\blx@TE@hook{\def\iflabelenddateera#1{%
+ \xifinlist{\abx@field@@@labeldatesource date}\blx@datamodel@dates
+ {\blx@TE{\ifcsstring{abx@field@@@\abx@field@@@labeldatesource enddateera}{#1}}}
+ {\@secondoftwo}}}%
+ % start circa
+ \def\iflabeldatecirca{%
+ \xifinlist{\abx@field@@@labeldatesource date}\blx@datamodel@dates
+ {\iftoggle{abx@bool@\abx@field@@@labeldatesource datecirca}}
+ {\@secondoftwo}}%
+ \appto\blx@TE@hook{\def\iflabeldatecirca{%
+ \xifinlist{\abx@field@@@labeldatesource date}\blx@datamodel@dates
+ {\blx@TE{\iftoggle{abx@bool@\abx@field@@@labeldatesource datecirca}}}
+ {\@secondoftwo}}}%
+ % end circa
+ \def\iflabelenddatecirca{%
+ \xifinlist{\abx@field@@@labeldatesource date}\blx@datamodel@dates
+ {\iftoggle{abx@bool@\abx@field@@@labeldatesource enddatecirca}}
+ {\@secondoftwo}}%
+ \appto\blx@TE@hook{\def\iflabelenddatecirca{%
+ \xifinlist{\abx@field@@@labeldatesource date}\blx@datamodel@dates
+ {\blx@TE{\iftoggle{abx@bool@\abx@field@@@labeldatesource enddatecirca}}}
+ {\@secondoftwo}}}%
+ % start julian
+ \def\iflabeldatejulian{%
+ \xifinlist{\abx@field@@@labeldatesource date}\blx@datamodel@dates
+ {\iftoggle{abx@bool@\abx@field@@@labeldatesource datejulian}}
+ {\@secondoftwo}}%
+ \appto\blx@TE@hook{\def\iflabeldatejulian{%
+ \xifinlist{\abx@field@@@labeldatesource date}\blx@datamodel@dates
+ {\blx@TE{\iftoggle{abx@bool@\abx@field@@@labeldatesource datejulian}}}
+ {\@secondoftwo}}}%
+ % end julian
+ \def\iflabelenddatejulian{%
+ \xifinlist{\abx@field@@@labeldatesource date}\blx@datamodel@dates
+ {\iftoggle{abx@bool@\abx@field@@@labeldatesource enddatejulian}}
+ {\@secondoftwo}}%
+ \appto\blx@TE@hook{\def\iflabelenddatejulian{%
+ \xifinlist{\abx@field@@@labeldatesource date}\blx@datamodel@dates
+ {\blx@TE{\iftoggle{abx@bool@\abx@field@@@labeldatesource enddatejulian}}}
+ {\@secondoftwo}}}%
+ % start uncertain
+ \def\iflabeldateuncertain{%
+ \xifinlist{\abx@field@@@labeldatesource date}\blx@datamodel@dates
+ {\iftoggle{abx@bool@\abx@field@@@labeldatesource dateuncertain}}
+ {\@secondoftwo}}%
+ \appto\blx@TE@hook{\def\iflabeldateuncertain{%
+ \xifinlist{\abx@field@@@labeldatesource date}\blx@datamodel@dates
+ {\blx@TE{\iftoggle{abx@bool@\abx@field@@@labeldatesource dateuncertain}}}
+ {\@secondoftwo}}}%
+ % end uncertain
+ \def\iflabelenddateuncertain{%
+ \xifinlist{\abx@field@@@labeldatesource date}\blx@datamodel@dates
+ {\iftoggle{abx@bool@\abx@field@@@labeldatesource enddateuncertain}}
+ {\@secondoftwo}}%
+ \appto\blx@TE@hook{\def\iflabelenddateuncertain{%
+ \xifinlist{\abx@field@@@labeldatesource date}\blx@datamodel@dates
+ {\blx@TE{\iftoggle{abx@bool@\abx@field@@@labeldatesource enddateuncertain}}}
+ {\@secondoftwo}}}}%
+ {}}
+
+% Name toggles like \ifauthor etc. need to be dynamically created for all
+% name datatypes in the data model and we have to do this here after the
+% datamodel is available. Need to be careful about expansions here as these
+% go into hooks to be executed later
+
+% toggle to say if we have set any <name>inits to true. Used for conflict
+% tests with uniquename settings (see \AtEndPreamble below)
+\newtoggle{abx@bool@xinits}
+% define <name>inits options and tests (terseinits is global for all initials)
+\def\do#1{%
+ \newtoggle{abx@bool@#1inits}%
+ \appto\blx@blxinit{%
+ \csdef{if#1inits}{\iftoggle{abx@bool@#1inits}}%
+ \appto\blx@TE@hook{%
+ \csdef{if#1inits}{\blx@TE{\iftoggle{abx@bool@#1inits}}}}}%
+ \DeclareBiblatexOption{global,type,entry,namelist,name}[boolean]{#1inits}[true]{%
+ \settoggle{abx@bool@#1inits}{##1}}}
+\abx@donameparts
+
+\def\do#1{%
+ % Define use<name> options scope for biber
+ \blx@DeclareBackendOption{global,type,entry}[boolean]{use#1}%
+ % Define name toggles
+ \newtoggle{blx@use#1}\toggletrue{blx@use#1}%
+ % Define tests
+ \appto\blx@blxinit{%
+ \csdef{ifuse#1}{\iftoggle{blx@use#1}}%
+ \appto\blx@TE@hook{%
+ \csdef{ifuse#1}{\blx@TE{\iftoggle{blx@use#1}}}}}}
+\abx@donames
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% Since these are bare counters which define \the<string>, save any current values
+% (memoir, titling, koma etc. have a \theauthor macro, for example) and restore at
+% end of package
+\def\do#1{%
+ \csletcs{blx@compat@the#1}{the#1}%
+ \newcounter{#1}%
+ \newcounter{saved#1}%
+ \appto\abx@dobooleans{\do{more#1}}}
+
+\abx@donames
+\abx@dornames
+\abx@dolists
+%\abx@dorlists
+
+\AtEndOfPackage{%
+ \def\do#1{\csletcs{the#1}{blx@compat@the#1}}%
+ \abx@donames
+ \abx@dornames
+ \abx@dolists}
+
+\def\do#1{\newtoggle{abx@bool@#1}}
+\abx@dobooleans
+
+\def\do#1{\expandafter\newlength\expandafter{\csname #1width\endcsname}}
+\abx@dolabelfields
+
+\def\do#1{\expandafter\newlength\expandafter{\csname local#1width\endcsname}}
+\abx@dolabelwidths
+
+\protected\def\blx@resetdata{%
+ \let\blx@saved@do\do
+ \def\do##1{%
+ \csundef{abx@fieldmssource@field@##1}%
+ \csundef{abx@fieldmssource@msform@##1}%
+ \csundef{abx@fieldmssource@mslang@##1}}%
+ \abx@dorfields
+ \abx@dornames
+ \let\do\blx@imc@clearname
+ \abx@donames
+ \let\do\blx@imc@clearlist
+ \abx@dolists
+ \let\do\blx@imc@clearfield
+ \abx@dofields
+ \abx@dointernalfields
+ \ifundef\abx@nameparts@defined
+ {}
+ {\def\do##1{\csundef{abx@nameparts@##1}}%
+ \dolistloop\abx@nameparts@defined}%
+ \let\abx@nameparts@defined\@empty
+ \ifundef\abx@listitems@defined
+ {}
+ {\def\do##1{\csundef{abx@listitems@##1}}%
+ \dolistloop\abx@listitems@defined}%
+ \let\abx@listitems@defined\@empty
+ \ifundef\abx@annotation@defined
+ {}
+ {\def\do##1{\csundef{abx@annotation@##1}}%
+ \dolistloop\abx@annotation@defined}%
+ \let\abx@annotation@defined\@empty
+ \def\do##1{\togglefalse{abx@bool@##1}}%
+ \abx@dobooleans
+ \let\do\blx@saved@do
+ \c@citecounter\z@
+ \iftoggle{blx@bibliography}
+ {\c@maxnames\blx@maxbibnames\relax
+ \c@minnames\blx@minbibnames\relax}
+ {\c@maxnames\blx@maxcitenames\relax
+ \c@minnames\blx@mincitenames\relax}%
+ \c@maxitems\blx@maxitems\relax
+ \c@minitems\blx@minitems\relax}
+
+\protected\def\blx@saveentry{%
+ \let\blx@saved@do\do
+ \let\do\blx@savefieldmssource
+ \abx@dorfields
+ \abx@dornames
+ \let\do\blx@savename
+ \abx@donames
+ \let\do\blx@saverelname
+ \dolistloop\abx@dorelnames
+ \let\do\blx@savelist
+ \abx@dolists
+ \let\do\blx@saverellist
+ \dolistloop\abx@dorellists
+ \let\do\blx@savefield
+ \abx@dofields
+ \abx@dointernalfields
+ \let\do\blx@saverelfield
+ \dolistloop\abx@dorelfields
+ \ifundef\abx@savedannotation@defined
+ {}
+ {\def\do##1{\csundef{abx@annotation@\blx@saveannotations@makesaved##1}}%
+ \dolistloop\abx@savedannotation@defined}%
+ \let\abx@savedannotation@defined\@empty
+ \ifundef\abx@annotation@defined
+ {}
+ {\let\do\blx@saveannotations
+ \dolistloop\abx@annotation@defined}%
+ \let\abx@savedannotation@defined\abx@annotation@defined
+ \ifundef\abx@savednameparts@defined
+ {}
+ {\def\do##1{\csundef{abx@nameparts@\blx@savenameparts@makesaved##1}}%
+ \dolistloop\abx@savednameparts@defined}%
+ \let\abx@savednameparts@defined\@empty
+ \ifundef\abx@nameparts@defined
+ {}
+ {\let\do\blx@savenameparts
+ \dolistloop\abx@nameparts@defined}%
+ \let\abx@savednameparts@defined\abx@nameparts@defined
+ \ifundef\abx@savedlistitems@defined
+ {}
+ {\def\do##1{\csundef{abx@listitems@\blx@savelistitems@makesaved##1}}%
+ \dolistloop\abx@savedlistitems@defined}%
+ \let\abx@savedlistitems@defined\@empty
+ \ifundef\abx@listitems@defined
+ {}
+ {\let\do\blx@savelistitems
+ \dolistloop\abx@listitems@defined}%
+ \let\abx@savedlistitems@defined\abx@listitems@defined
+ \let\do\blx@savebool
+ \abx@dobooleans
+ \let\do\blx@savedatetype
+ \abx@dodatetypes
+ \do{label}%
+ \c@savedcitecounter\c@citecounter
+ \let\do\blx@saved@do}
+
+\protected\def\blx@savefieldmssource#1{%
+ \csletcs{abx@fieldmssource@field@saved#1}{abx@fieldmssource@field@#1}%
+ \csletcs{abx@fieldmssource@msform@saved#1}{abx@fieldmssource@msform@#1}%
+ \csletcs{abx@fieldmssource@mslang@saved#1}{abx@fieldmssource@mslang@#1}}
+
+\def\blx@saveannotations@makesaved#1@#2{#1@saved#2}
+\protected\def\blx@saveannotations#1{%
+ \csletcs{abx@annotation@\blx@saveannotations@makesaved#1}{abx@annotation@#1}}
+
+\def\blx@savenameparts@makesaved#1@#2{#1@saved#2}
+\protected\def\blx@savenameparts#1{%
+ \csletcs{abx@nameparts@\blx@savenameparts@makesaved#1}{abx@nameparts@#1}}
+
+\def\blx@savelistitems@makesaved#1@#2{#1@saved#2}
+\protected\def\blx@savelistitems#1{%
+ \csletcs{abx@listitems@\blx@savelistitems@makesaved#1}{abx@listitems@#1}}
+
+% saves all alternates of multiscript fields
+\protected\def\blx@savefield#1{%
+ \blx@imc@iffieldundef{#1}
+ {}
+ {\blx@imc@ifmsentryfield{#1}
+ {\let\blx@tempi\@empty
+ \begingroup
+ \def\do##1{%
+ \begingroup
+ \def\do####1{%
+ \gappto\blx@tempi{\csletcs{abx@field@##1@####1@saved#1}{abx@field@##1@####1@#1}}}%
+ \dolistcsloop{abx@fieldmslangs@#1}%
+ \endgroup}%
+ \dolistcsloop{abx@fieldmsforms@#1}%
+ \endgroup
+ \blx@tempi\global\undef\blx@tempi}
+ {\csletcs{abx@field@@@saved#1}{abx@field@@@#1}}}}
+
+% override with field saved from \clearfield for related processing
+% argument is a triple which needs expanding
+% {{<msform>}{<mslang>}{field}}
+\protected\def\blx@saverelfield#1{%
+ \blx@saverelfield@i#1}
+% {<msform>}{<mslang>}{field}
+\protected\def\blx@saverelfield@i#1#2#3{%
+ \blx@imc@ifmsentryfield{#3}
+ {\csletcs{abx@field@#1@#2@saved#3}{abx@field@#1@#2@relsaved#3}}
+ {\csletcs{abx@field@@@saved#3}{abx@field@@@relsaved#3}}}
+
+% saves all alternates of multiscript lists
+\protected\def\blx@savelist#1{%
+ \blx@imc@iflistundef{#1}
+ {}
+ {\blx@imc@ifmsentryfield{#1}
+ {\let\blx@tempi\@empty
+ \begingroup
+ \def\do##1{%
+ \begingroup
+ \def\do####1{%
+ \gappto\blx@tempi{\csletcs{abx@list@##1@####1@saved#1}{abx@list@##1@####1@#1}}}%
+ \dolistcsloop{abx@fieldmslangs@#1}%
+ \endgroup}%
+ \dolistcsloop{abx@fieldmsforms@#1}%
+ \endgroup
+ \blx@tempi\global\undef\blx@tempi}
+ {\csletcs{abx@list@@@saved#1}{abx@list@@@#1}}%
+ \csletcs{etb@tgl@abx@bool@moresaved#1}{etb@tgl@abx@bool@more#1}%
+ \csname c@saved#1\endcsname\csname c@#1\endcsname}}
+
+% override with list saved from \clearlist for related processing
+% argument is a triple which needs expanding
+% {{<msform>}{<mslang>}{field}}
+\protected\def\blx@saverellist#1{%
+ \blx@saverellist@i#1}
+% {<msform>}{<mslang>}{field}
+\protected\def\blx@saverellist@i#1#2#3{%
+ \blx@imc@ifmsentryfield{#3}
+ {\csletcs{abx@list@#1@#2@saved#3}{abx@list@#1@#2@relsaved#3}}
+ {\csletcs{abx@list@@@saved#3}{abx@list@@@relsaved#3}}%
+ \csletcs{etb@tgl@abx@bool@moresaved#3}{etb@tgl@abx@bool@morerelsaved#3}%
+ \csname c@saved#3\endcsname\csname c@relsaved#3\endcsname}
+
+% saves all alternates of multiscript names
+\protected\def\blx@savename#1{%
+ \blx@imc@ifnameundef{#1}
+ {}
+ {\blx@imc@ifmsentryfield{#1}
+ {\let\blx@tempi\@empty
+ \begingroup
+ \def\do##1{%
+ \begingroup
+ \def\do####1{%
+ \gappto\blx@tempi{\csletcs{abx@name@##1@####1@saved#1}{abx@name@##1@####1@#1}}}%
+ \dolistcsloop{abx@fieldmslangs@#1}%
+ \endgroup}%
+ \dolistcsloop{abx@fieldmsforms@#1}%
+ \endgroup
+ \blx@tempi\global\undef\blx@tempi}
+ {\csletcs{abx@name@@@saved#1}{abx@name@@@#1}}%
+ \csletcs{etb@tgl@abx@bool@moresaved#1}{etb@tgl@abx@bool@more#1}%
+ \csname c@saved#1\endcsname\csname c@#1\endcsname}}
+
+% override with name saved from \clearname for related processing
+% argument is a triple which needs expanding
+% {{<msform>}{<mslang>}{field}}
+\protected\def\blx@saverelname#1{%
+ \blx@saverelname@i#1}
+% {<msform>}{<mslang>}{field}
+\protected\def\blx@saverelname@i#1#2#3{%
+ \blx@imc@ifmsentryfield{#3}
+ {\csletcs{abx@name@#1@#2@saved#3}{abx@name@#1@#2@relsaved#3}}
+ {\csletcs{abx@name@@@saved#3}{abx@name@@@relsaved#3}}%
+ \csletcs{etb@tgl@abx@bool@moresaved#3}{etb@tgl@abx@bool@morerelsaved#3}%
+ \csname c@saved#3\endcsname\csname c@relsaved#3\endcsname}
+
+\protected\def\blx@savebool#1{%
+ \csletcs{etb@tgl@abx@bool@saved#1}{etb@tgl@abx@bool@#1}}
+
+\protected\def\blx@savedatetype#1{%
+ \csletcs{blx@dateformat@saved#1date}{blx@dateformat@#1date}%
+ \protected\csedef{blx@imc@printsaved#1date}{%
+ \noexpand\csuse{mkdaterange\csuse{blx@dateformat@saved#1date}}
+ {saved#1}}%
+ \protected\csedef{blx@imc@printsaved#1dateextra}{%
+ \begingroup
+ % extradate is hard-coded in date macros, so reset it temporarily
+ \csletcs{abx@field@@@extradate}{abx@field@@@savedextradate}%
+ \noexpand\csuse{mkdaterange\csuse{blx@dateformat@saved#1date}extra}
+ {saved#1}%
+ \endgroup}%
+ \csletcs{blx@timeformat@saved#1time}{blx@timeformat@#1time}%
+ \protected\csedef{blx@imc@printsaved#1time}{%
+ \noexpand\csuse{mktimerange\csuse{blx@timeformat@saved#1time}}
+ {saved#1}}%
+ \csletcs{etb@tgl@blx@saved#1dateusetime}{etb@tgl@blx@#1dateusetime}%
+ % the datemetabooleans are here again for labeldate
+ \blx@savebool{#1datecirca}%
+ \blx@savebool{#1enddatecirca}%
+ \blx@savebool{#1datejulian}%
+ \blx@savebool{#1enddatejulian}%
+ \blx@savebool{#1dateuncertain}%
+ \blx@savebool{#1enddateuncertain}%
+ \blx@savebool{#1dateunknown}%
+ \blx@savebool{#1enddateunknown}%
+ \blx@makeifdatemeta@bools{saved#1}{circa}%
+ \blx@makeifdatemeta@bools{saved#1}{julian}%
+ \blx@makeifdatemeta@bools{saved#1}{uncertain}%
+ \blx@makeifdatemeta@bools{saved#1}{unknown}%
+ \blx@makeifdatemeta@fields{saved#1}%
+ \csletcs{printsaved#1date}{blx@imc@printsaved#1date}%
+ \csletcs{printsaved#1time}{blx@imc@printsaved#1time}%
+ \csletcs{printsaved#1dateextra}{blx@imc@printsaved#1dateextra}}
+
+% {<code>}
+\protected\long\def\blx@bbl@preamble#1{%
+ \gappto\abx@preamble{#1}}
+
+% {<message>}
+\protected\def\blx@bbl@warn#1{%
+ \begingroup
+ \def\item{\MessageBreak-\space}%
+ \def\break{\MessageBreak\space\space}%
+ \blx@warning@noline{%
+ Biber reported the following issues%
+ \ifdef\abx@field@@@entrykey
+ {\MessageBreak with '\abx@field@@@entrykey'}
+ {}%
+ :#1}%
+ \endgroup}
+
+% {<field>}{<code>}
+\newrobustcmd{\DeclareFieldInputHandler}[2]{%
+ \ifblank{#2}
+ {\csundef{blx@fih@#1}}
+ {\long\csdef{blx@fih@#1}##1{#2}}}
+\@onlypreamble\DeclareFieldInputHandler
+
+% {<list>}{<code>}
+\newrobustcmd*{\DeclareListInputHandler}[2]{%
+ \ifblank{#2}
+ {\csundef{blx@lih@#1}}
+ {\csdef{blx@lih@#1}##1{#2}}}
+\@onlypreamble\DeclareListInputHandler
+
+% {<name>}{<code>}
+\newrobustcmd*{\DeclareNameInputHandler}[2]{%
+ \ifblank{#2}
+ {\csundef{blx@nih@#1}}
+ {\csdef{blx@nih@#1}##1{#2}}}
+\@onlypreamble\DeclareNameInputHandler
+
+% {<entrykey>}{<refsection>}{<field>}{<refcontext>}{<value>}
+% No multiscript fields are set via this
+\long\def\blx@bbl@addentryfield#1#2#3#4#5{%
+ \csxappto{blx@data@#2@#4@#1}{%
+ \def\expandafter\noexpand\csname abx@field@#3\endcsname{#5}%
+ \def\expandafter\noexpand\csname abx@field@@@#3\endcsname{#5}}}
+
+% {<rangefield>}{<value>}
+% No range fields are multiscript
+\protected\def\blx@bbl@rangedef#1#2{%
+ \csxappto\blx@bbl@data{%
+ \def\expandafter\noexpand\csname abx@range@#1\endcsname{#2}}}
+
+% {<field>}{<value>}{<msform>}{<mslang>}
+\long\def\blx@bbl@addfield#1#2#3#4{%
+ \csxappto\blx@bbl@data{%
+ \def\expandafter\noexpand\csname abx@entryfield@#1\endcsname{1}% value doesn't matter
+ \def\expandafter\noexpand\csname abx@field@#1\endcsname{1}% value doesn't matter
+ \def\expandafter\noexpand\csname abx@field@#3@#4@#1\endcsname{#2}}}
+
+\blx@regimcs{\fieldmsforms \fieldmslangs}
+
+\def\blx@imc@fieldmsforms#1{\csuse{abx@fieldmsforms@#1}}
+\def\blx@imc@fieldmslangs#1{\csuse{abx@fieldmslangs@#1}}
+
+% [<msform>][<mslang>]{field}{value}
+\protected\long\def\blx@bbl@msfielddef{\blx@bbl@msdef{field}}
+\protected\long\def\blx@bbl@mslistdef{\blx@bbl@msdef{list}}
+\protected\long\def\blx@bbl@msnamedef{\blx@bbl@msdef{name}}
+
+\protected\long\def\blx@bbl@msdef#1{%
+ \@ifnextchar[%]
+ {\blx@bbl@msdef@i#1}
+ {\csuse{blx@bbl@#1def}{}{}}}
+
+% biber resolves all msform/mslang explicitly
+% and so we can detect multiscript fields simply
+% by the presence of a bracket here
+\protected\long\def\blx@bbl@msdef@i#1[#2][#3]{%
+ \csuse{blx@bbl@#1def}{#2}{#3}}
+
+% Biber always makes the msform/mslang of \fieldmssource explicit
+% These label*source fields are not normal fields as their *value*
+% is a triple of fieldname/form/lang
+% msform/mslang can be empty for non-multiscript sources in which case
+% the expansions of \abx@fieldmssource@ms*@<field> will be empty and these
+% are only used in places where empty expansion would therefore lead to a
+% the correct non-multiscript \abx@{field|list|name}@@@...
+% {<field>}{<value>}{<msform>}{<mslang>}
+\protected\long\def\blx@bbl@fieldmssourcedef#1#2#3#4{%
+ \csxappto\blx@bbl@data{%
+ \def\expandafter\noexpand\csname abx@fieldmssource@field@#1\endcsname{#2}%
+ \def\expandafter\noexpand\csname abx@fieldmssource@msform@#1\endcsname{#3}%
+ \def\expandafter\noexpand\csname abx@fieldmssource@mslang@#1\endcsname{#4}}}
+
+% {<msform>}{<mslang>}{<field>}{<value>}
+\protected\long\def\blx@bbl@fielddef#1#2#3#4{%
+ \def\NewValue{#4}%
+ \ifcsdef{blx@fih@#3}
+ {\csname blx@fih@#1\endcsname{#4}%
+ \ifdefvoid\NewValue}
+ {\@secondoftwo}
+ {}
+ {\csgappto\blx@bbl@data{%
+ \ifinlistcs{#1}{abx@fieldmsforms@#3}{}{\listcsadd{abx@fieldmsforms@#3}{#1}}%
+ \ifinlistcs{#2}{abx@fieldmslangs@#3}{}{\listcsadd{abx@fieldmslangs@#3}{#2}}}%
+ \blx@bbl@addfield{#3}{\expandonce\NewValue}{#1}{#2}}}
+
+% No multiscript fields are set via this
+\protected\long\def\blx@bbl@fieldedef#1#2{%
+ \edef\NewValue{#2}%
+ \ifcsdef{blx@fih@#1}
+ {\csname blx@fih@#1\expandafter
+ \endcsname\expandafter{\NewValue}%
+ \ifdefvoid\NewValue}
+ {\@secondoftwo}
+ {}
+ {\blx@bbl@addfield{#1}{\NewValue}{}{}}}
+
+\protected\long\def\blx@bbl@stringdef#1#2{%
+ \begingroup
+ \edef\blx@tempa{\endgroup
+ \blx@bbl@fielddef{}{}{#1}{\detokenize{#2}}}%
+ \blx@tempa}
+
+% Verbatim lists
+% {<list>}{<listcount>}
+\protected\def\blx@bbl@verbldef#1#2{%
+ \begingroup
+ \let\lverb\blx@bbl@verbladd
+ \def\blx@tempa{#1}%
+ \def\blx@tempb{#2}%
+ \let\blx@tempc\@empty
+ \let\NewValue\@empty}
+
+\protected\def\blx@bbl@verblend{%
+ \expandafter\blx@bbl@listdef\expandafter{\expandafter}\expandafter{\expandafter}\expandafter{\expandafter\blx@tempa\expandafter}\expandafter{\expandafter\blx@tempb\expandafter}\expandafter{\blx@tempc}%
+ \endgroup}
+
+\protected\def\blx@bbl@verbladd{%
+ \begingroup
+ \let\do\@makeother
+ \dospecials
+ \catcode\endlinechar=12\relax
+ \blx@bbl@verbladd@i}
+
+% Verbatim fields
+% {<field>}
+\protected\def\blx@bbl@verbdef#1{%
+ \begingroup
+ \let\verb\blx@bbl@verbadd
+ \def\blx@tempa{#1}%
+ \let\NewValue\@empty}
+
+\protected\def\blx@bbl@verbend{%
+ \ifcsdef{blx@fih@\blx@tempa}
+ {\csname blx@fih@\blx@tempa\expandafter
+ \endcsname\expandafter{\NewValue}%
+ \ifdefvoid\NewValue}
+ {\@secondoftwo}
+ {}
+ {\blx@bbl@addfield{\blx@tempa}{\NewValue}{}{}}%
+ \endgroup}
+
+\protected\def\blx@bbl@verbadd{%
+ \begingroup
+ \let\do\@makeother
+ \dospecials
+ \catcode\endlinechar=12\relax
+ \blx@bbl@verbadd@i}
+
+% xparse argument processors
+% because msform/mslang are optional and are followed in some cases by more
+% more optional arguments, they need supplying as empty in some cases
+% and this overrides the defaulting in xparse so we pre-process to force
+% defaulting in case of supplied empty arguments
+\def\blx@msformexpand#1{%
+ \ifblank{#1}{\let\ProcessedArgument\blx@msform}{\def\ProcessedArgument{#1}}}
+\def\blx@mslangexpand#1{%
+ \ifblank{#1}{\let\ProcessedArgument\blx@lmslang}{\def\ProcessedArgument{#1}}}
+
+% [<msform>][<mslang>]{<scope>}{<field>}{<name>}{<itemcount>}{<part>}{<isliteral>}{<value>}
+% No need to default form/lang as, if present, they are always defined by biber
+\DeclareDocumentCommand{\blx@bbl@annotationdef}
+ {O{} O{} m m m m m m m}
+ {\ifstrequal{#3}{field}
+ {\ifstrequal{#8}{1}
+ {\csxappto\blx@bbl@data{%
+ \listadd\noexpand\abx@annotation@defined{literal@field@#1@#2@#4@#5}%
+ \csdef{abx@annotation@literal@field@#1@#2@#4@#5}{#9}}}
+ {\csxappto\blx@bbl@data{%
+ \listadd\noexpand\abx@annotation@defined{field@#1@#2@#4@#5}%
+ \def\do####1{\listcsadd{abx@annotation@field@#1@#2@#4@#5}{####1}}%
+ \docsvlist{#9}}}}
+ {}%
+ \ifstrequal{#3}{item}
+ {\ifstrequal{#8}{1}
+ {\csxappto\blx@bbl@data{%
+ \listadd\noexpand\abx@annotation@defined{literal@item@#1@#2@#4@#5@#6}%
+ \csdef{abx@annotation@literal@item@#1@#2@#4@#5@#6}{#9}}}
+ {\csxappto\blx@bbl@data{%
+ \listadd\noexpand\abx@annotation@defined{item@#1@#2@#4@#5@#6}%
+ \def\do####1{\listcsadd{abx@annotation@item@#1@#2@#4@#5@#6}{####1}}%
+ \docsvlist{#9}}}}
+ {}%
+ \ifstrequal{#3}{part}
+ {\ifstrequal{#8}{1}
+ {\csxappto\blx@bbl@data{%
+ \listadd\noexpand\abx@annotation@defined{literal@part@#1@#2@#4@#5@#6@#7}%
+ \csdef{abx@annotation@literal@part@#1@#2@#4@#5@#6@#7}{#9}}}
+ {\csxappto\blx@bbl@data{%
+ \listadd\noexpand\abx@annotation@defined{part@#1@#2@#4@#5@#6@#7}%
+ \def\do####1{\listcsadd{abx@annotation@part@#1@#2@#4@#5@#6@#7}{####1}}%
+ \docsvlist{#9}}}}
+ {}}
+
+% [<msform>][<mslang>][<entryfield>][<annotationname>]
+\DeclareDocumentCommand{\blx@imc@getfieldannotation}
+ {>{\blx@msformexpand}O{\blx@msform}
+ >{\blx@mslangexpand}O{\blx@lmslang}
+ O{}
+ O{default}}
+ {\let\blx@tempa\@empty
+ \ifdefvoid\currentfield{}{\let\blx@tempa\currentfield}%
+ \ifdefvoid\currentlist{}{\let\blx@tempa\currentlist}%
+ \ifdefvoid\currentname{}{\let\blx@tempa\currentname}%
+ \ifblank{#3}
+ {}
+ {\def\blx@tempa{#3}}%
+ \blx@resolve@annotation@label{\blx@tempa}%
+ \blx@imc@ifmsentryfield\blx@tempa
+ {\edef\blx@tempc{abx@annotation@literal@field@#1@#2@\blx@tempa @#4}}
+ {\edef\blx@tempc{abx@annotation@literal@field@@@\blx@tempa @#4}}%
+ \ifcsdef{\blx@tempc}
+ {\csuse{\blx@tempc}}
+ {}}
+
+% [<msform>][<mslang>][<entryfield>][<annotationname>][<item>]
+\DeclareDocumentCommand{\blx@imc@getitemannotation}
+ {>{\blx@msformexpand}O{\blx@msform}
+ >{\blx@mslangexpand}O{\blx@lmslang}
+ O{}
+ O{default}
+ O{\thelistcount}}
+ {\let\blx@tempa\@empty
+ \ifdefvoid\currentfield{}{\let\blx@tempa\currentfield}%
+ \ifdefvoid\currentlist{}{\let\blx@tempa\currentlist}%
+ \ifdefvoid\currentname{}{\let\blx@tempa\currentname}%
+ \ifblank{#3}
+ {}
+ {\def\blx@tempa{#3}}%
+ \blx@resolve@annotation@label{\blx@tempa}%
+ \blx@imc@ifmsentryfield\blx@tempa
+ {\edef\blx@tempc{abx@annotation@literal@item@#1@#2@\blx@tempa @#4@#5}}
+ {\edef\blx@tempc{abx@annotation@literal@item@@@\blx@tempa @#4@#5}}%
+ \ifcsdef{\blx@tempc}
+ {\csuse{\blx@tempc}}
+ {}}
+
+% [<msform>][<mslang>][<entryfield>][<annotationname>][<item>]{<part>}
+\DeclareDocumentCommand{\blx@imc@getpartannotation}
+ {>{\blx@msformexpand}O{\blx@msform}
+ >{\blx@mslangexpand}O{\blx@lmslang}
+ O{}
+ O{default}
+ O{\thelistcount}
+ m}
+ {\let\blx@tempa\@empty
+ \ifdefvoid\currentfield{}{\let\blx@tempa\currentfield}%
+ \ifdefvoid\currentlist{}{\let\blx@tempa\currentlist}%
+ \ifdefvoid\currentname{}{\let\blx@tempa\currentname}%
+ \ifblank{#3}
+ {}
+ {\def\blx@tempa{#3}}%
+ \blx@resolve@annotation@label{\blx@tempa}%
+ \blx@imc@ifmsentryfield\blx@tempa
+ {\edef\blx@tempc{abx@annotation@literal@part@#1@#2@\blx@tempa @#4@#5@#6}}
+ {\edef\blx@tempc{abx@annotation@literal@part@@@\blx@tempa @#4@#5@#6}}%
+ \ifcsdef{\blx@tempc}
+ {\csuse{\blx@tempc}}
+ {}}
+
+% [<msform>][<mslang>][<entryfield>][<annotationname>]{<annotation>}
+\DeclareDocumentCommand{\blx@imc@iffieldannotation}
+ {>{\blx@msformexpand}O{\blx@msform}
+ >{\blx@mslangexpand}O{\blx@lmslang}
+ O{}
+ O{default}
+ m}
+ {\let\blx@tempa\@empty
+ \ifdefvoid\currentfield{}{\let\blx@tempa\currentfield}%
+ \ifdefvoid\currentlist{}{\let\blx@tempa\currentlist}%
+ \ifdefvoid\currentname{}{\let\blx@tempa\currentname}%
+ \ifblank{#3}
+ {}
+ {\def\blx@tempa{#3}}%
+ \blx@resolve@annotation@label{\blx@tempa}%
+ \blx@imc@ifmsentryfield\blx@tempa
+ {\edef\blx@tempc{abx@annotation@field@#1@#2@\blx@tempa @#4}}
+ {\edef\blx@tempc{abx@annotation@field@@@\blx@tempa @#4}}%
+ \ifinlistcs{#5}{\blx@tempc}}
+
+% [<msform>][<mslang>][<entryfield>][<annotationname>][<item>]{<annotation>}
+\DeclareDocumentCommand{\blx@imc@ifitemannotation}
+ {>{\blx@msformexpand}O{\blx@msform}
+ >{\blx@mslangexpand}O{\blx@lmslang}
+ O{}
+ O{default}
+ O{\thelistcount}
+ m}
+ {\let\blx@tempa\@empty
+ \ifdefvoid\currentfield{}{\let\blx@tempa\currentfield}%
+ \ifdefvoid\currentlist{}{\let\blx@tempa\currentlist}%
+ \ifdefvoid\currentname{}{\let\blx@tempa\currentname}%
+ \ifblank{#3}
+ {}
+ {\def\blx@tempa{#3}}%
+ \blx@resolve@annotation@label{\blx@tempa}%
+ \blx@imc@ifmsentryfield\blx@tempa
+ {\edef\blx@tempc{abx@annotation@item@#1@#2@\blx@tempa @#4@#5}}
+ {\edef\blx@tempc{abx@annotation@item@@@\blx@tempa @#4@#5}}%
+ \ifinlistcs{#6}{\blx@tempc}}
+
+% [<msform>][<mslang>][<entryfield>][<annotationname>][<item>]{<part>}{<annotation>}
+\DeclareDocumentCommand{\blx@imc@ifpartannotation}
+ {>{\blx@msformexpand}O{\blx@msform}
+ >{\blx@mslangexpand}O{\blx@lmslang}
+ O{}
+ O{default}
+ O{\thelistcount}
+ m
+ m}
+ {\let\blx@tempa\@empty
+ \ifdefvoid\currentfield{}{\let\blx@tempa\currentfield}%
+ \ifdefvoid\currentlist{}{\let\blx@tempa\currentlist}%
+ \ifdefvoid\currentname{}{\let\blx@tempa\currentname}%
+ \ifblank{#3}
+ {}
+ {\def\blx@tempa{#3}}%
+ \blx@resolve@annotation@label{\blx@tempa}%
+ \blx@imc@ifmsentryfield\blx@tempa
+ {\edef\blx@tempc{abx@annotation@part@#1@#2@\blx@tempa @#4@#5@#6}}
+ {\edef\blx@tempc{abx@annotation@part@@@\blx@tempa @#4@#5@#6}}%
+ \ifinlistcs{#7}{\blx@tempc}}
+
+ % [<msform>][<mslang>][<entryfield>][<annotationname>]
+\DeclareDocumentCommand{\blx@imc@hasfieldannotation}
+ {>{\blx@msformexpand}O{\blx@msform}
+ >{\blx@mslangexpand}O{\blx@lmslang}
+ O{}
+ O{default}}
+ {\let\blx@tempa\@empty
+ \ifdefvoid\currentfield{}{\let\blx@tempa\currentfield}%
+ \ifdefvoid\currentlist{}{\let\blx@tempa\currentlist}%
+ \ifdefvoid\currentname{}{\let\blx@tempa\currentname}%
+ \ifblank{#3}
+ {}
+ {\def\blx@tempa{#3}}%
+ \blx@resolve@annotation@label{\blx@tempa}%
+ \blx@imc@ifmsentryfield\blx@tempa
+ {\edef\blx@tempc{abx@annotation@literal@field@#1@#2@\blx@tempa @#4}}
+ {\edef\blx@tempc{abx@annotation@literal@field@@@\blx@tempa @#4}}%
+ \ifcsdef{\blx@tempc}}
+
+% [<msform>][<mslang>][<entryfield>][<annotationname>][<item>]
+\DeclareDocumentCommand{\blx@imc@hasitemannotation}
+ {>{\blx@msformexpand}O{\blx@msform}
+ >{\blx@mslangexpand}O{\blx@lmslang}
+ O{}
+ O{default}
+ O{\thelistcount}}
+ {\let\blx@tempa\@empty
+ \ifdefvoid\currentfield{}{\let\blx@tempa\currentfield}%
+ \ifdefvoid\currentlist{}{\let\blx@tempa\currentlist}%
+ \ifdefvoid\currentname{}{\let\blx@tempa\currentname}%
+ \ifblank{#3}
+ {}
+ {\def\blx@tempa{#3}}%
+ \blx@resolve@annotation@label{\blx@tempa}%
+ \blx@imc@ifmsentryfield\blx@tempa
+ {\edef\blx@tempc{abx@annotation@literal@item@#1@#2@\blx@tempa @#4@#5}}
+ {\edef\blx@tempc{abx@annotation@literal@item@@@\blx@tempa @#4@#5}}%
+ \ifcsdef{\blx@tempc}}
+
+% [<msform>][<mslang>][<entryfield>][<annotationname>][<item>]{<part>}
+\DeclareDocumentCommand{\blx@imc@haspartannotation}
+ {>{\blx@msformexpand}O{\blx@msform}
+ >{\blx@mslangexpand}O{\blx@lmslang}
+ O{}
+ O{default}
+ O{\thelistcount}
+ m}
+ {\let\blx@tempa\@empty
+ \ifdefvoid\currentfield{}{\let\blx@tempa\currentfield}%
+ \ifdefvoid\currentlist{}{\let\blx@tempa\currentlist}%
+ \ifdefvoid\currentname{}{\let\blx@tempa\currentname}%
+ \ifblank{#3}
+ {}
+ {\def\blx@tempa{#3}}%
+ \blx@resolve@annotation@label{\blx@tempa}%
+ \blx@imc@ifmsentryfield\blx@tempa
+ {\edef\blx@tempc{abx@annotation@literal@part@#1@#2@\blx@tempa @#4@#5@#6}}
+ {\edef\blx@tempc{abx@annotation@literal@part@@@\blx@tempa @#4@#5@#6}}%
+ \ifcsdef{\blx@tempc}}
+
+% labeldatesource has a slightly different format than other <field>sources
+% that's one reason for a dedicated command, the other being that this command
+% is probably only used in contexts where \currentfield is not defined, so
+% the <datetype> argument is always required
+% [<annotationname>]{<datetype>}{<annotation>}
+\newcommand*{\blx@imc@ifdateannotation}[3][]{%
+ \ifblank{#1}
+ {\def\blx@tempa{default}}
+ {\def\blx@tempa{#1}}%
+ \def\blx@tempb{#2}%
+ \ifcsundef{abx@field@@@\blx@tempb source}
+ {}%
+ {\letcs\blx@tempa{abx@field@@@\blx@tempb source}%
+ \edef\blx@tempb{\blx@tempb date}}%
+ \ifinlistcs{#3}{abx@annotation@field@\blx@tempb @\blx@tempa}}
+
+% [<annotationname>]{<datetype>}
+\newcommand*{\blx@imc@hasdateannotation}[2][]{%
+ \ifblank{#1}
+ {\def\blx@tempa{default}}
+ {\def\blx@tempa{#1}}%
+ \def\blx@tempb{#2}%
+ \ifcsundef{abx@field@@@\blx@tempb source}
+ {}%
+ {\letcs\blx@tempa{abx@field@@@\blx@tempb source}%
+ \edef\blx@tempb{\blx@tempb date}}%
+ \ifboolexpr { test {\ifcsdef{abx@annotation@field@\blx@tempb @\blx@tempa}}
+ or
+ test {\ifcsdef{abx@annotation@literal@field@\blx@tempb @\blx@tempa}} }}
+
+% [<annotationname>]{<datetype>}
+\newcommand*{\blx@imc@getdateannotation}[2][]{%
+ \ifblank{#1}
+ {\def\blx@tempa{default}}
+ {\def\blx@tempa{#1}}%
+ \def\blx@tempb{#1}%
+ \ifcsundef{abx@field@@@\blx@tempb source}
+ {}%
+ {\letcs\blx@tempb{abx@field@@@\blx@tempb source}%
+ \edef\blx@tempb{\blx@tempb date}}%
+ \ifcsdef{abx@annotation@literal@field@\blx@tempb @\blx@tempa}
+ {\csuse{abx@annotation@literal@field@\blx@tempb @\blx@tempa}}
+ {}}
+
+\blx@regimcs{\iffieldannotation \ifitemannotation \ifpartannotation
+ \ifdateannotation \getfieldannotation \getitemannotation \getpartannotation
+ \getdateannotation \hasfieldannotation \hasitemannotation \haspartannotation
+ \hasdateannotation}
+
+% {<fieldname>}
+\def\blx@resolve@annotation@label#1{%
+ \ifcsundef{abx@fieldmssource@field@#1}
+ {}%
+ {\letcs\blx@tempa{abx@field@\abx@fieldmssource@msform@#1 @\abx@fieldmssource@mslang@#1 @\abx@fieldmssource@field@#1}}}
+
+\begingroup
+\catcode`\<=12
+\catcode`\>=12
+\uccode`\<=`\ %
+\uccode`\>=\endlinechar
+\uppercase{\gdef\blx@bbl@verbadd@i<#1>}{%
+ \endgroup
+ \edef\NewValue{\NewValue\detokenize{#1}}}
+\uppercase{\gdef\blx@bbl@verbladd@i<#1>}{%
+ \endgroup
+ \eappto\blx@tempc{{\detokenize{#1}}}}%
+\endgroup
+
+% {<counter>}{<value>}
+\protected\long\def\blx@bbl@cntdef#1#2{%
+ \csxappto\blx@bbl@data{%
+ \csname c@#1\endcsname#2\relax}}
+
+% {<boolean>}
+\protected\def\blx@bbl@booltrue#1{%
+ \csgappto\blx@bbl@data{%
+ \toggletrue{abx@bool@#1}}}
+
+\protected\def\blx@bbl@boolfalse#1{%
+ \csgappto\blx@bbl@data{%
+ \togglefalse{abx@bool@#1}}}
+
+% {<msform>}{<mslang>}{<list>}{<itemcount>}{<value>}
+% msform and mslang can be empty for non-multiscript lists
+\protected\def\blx@bbl@listdef#1#2#3#4#5{%
+ \def\NewCount{#4}%
+ \def\NewValue{#5}%
+ \ifcsdef{blx@lih@#3}
+ {\csname blx@lih@#1\endcsname{#5}%
+ \ifdefvoid\NewValue}
+ {\@secondoftwo}
+ {}
+ {\csxappto\blx@bbl@data{%
+ \ifinlistcs{#1}{abx@fieldmsforms@#3}{}{\listcsadd{abx@fieldmsforms@#3}{#1}}%
+ \ifinlistcs{#2}{abx@fieldmslangs@#3}{}{\listcsadd{abx@fieldmslangs@#3}{#2}}%
+ \csname c@#3\endcsname\NewCount\relax
+ \def\expandafter\noexpand\csname abx@entryfield@#3\endcsname{1}% value doesn't matter
+ \def\expandafter\noexpand\csname abx@list@#3\endcsname{1}% value doesn't matter
+ \def\expandafter\noexpand\csname abx@list@#1@#2@#3\endcsname{\expandonce\NewValue}}}}
+
+% {<msform>}{<mslang>}{<name>}{<itemcount>}{<nameoptions>}{<value>}
+% msform and mslang can be empty for non-multiscript names
+\protected\def\blx@bbl@namedef#1#2#3#4#5#6{%
+ \def\NewCount{#4}%
+ \def\NewOption{#5}%
+ \def\NewValue{#6}%
+ \ifcsdef{blx@nih@#1}
+ {\csname blx@nih@#1\endcsname{#6}%
+ \ifdefvoid\NewValue}
+ {\@secondoftwo}
+ {}
+ {\csxappto\blx@bbl@data{%
+ \ifinlistcs{#1}{abx@fieldmsforms@#3}{}{\listcsadd{abx@fieldmsforms@#3}{#1}}%
+ \ifinlistcs{#2}{abx@fieldmslangs@#3}{}{\listcsadd{abx@fieldmslangs@#3}{#2}}%
+ \csname c@#3\endcsname\NewCount\relax
+ \def\expandafter\noexpand\csname abx@entryfield@#3\endcsname{1}% value doesn't matter
+ \def\expandafter\noexpand\csname abx@name@#3\endcsname{1}% value doesn't matter
+ \def\expandafter\noexpand\csname abx@name@#1@#2@#3\endcsname{{\expandonce\NewOption}{\expandonce\NewValue}}}}}
+
+% blx@setp@<rs>@<sp> = map of set parent <sp> in a refsection <rs> to csv
+% of set children
+% blx@seti@<rs>@<sc> = position of set child <sc> in entry set in
+% refsection <rs>
+% blx@setc@<rs>@<sc> = map of set child <sc> in refsection <rs> to set parent
+
+% {<entrykey>,...}
+\protected\def\blx@bbl@set#1{%
+ \blx@bbl@fieldedef{entryset}{\detokenize{#1}}%
+ \csxdef{blx@setp@\the\c@refsection @\abx@field@@@entrykey}{\detokenize{#1}}%
+ \begingroup
+ \blx@tempcnta\z@
+ \expandafter\forcsvlist
+ \expandafter\blx@bbl@set@i
+ \expandafter{\detokenize{#1}}%
+ \endgroup}
+
+\def\blx@bbl@set@i#1{%
+ \advance\blx@tempcnta\@ne
+ \csxdef{blx@seti@\the\c@refsection @#1}{\the\blx@tempcnta}}
+
+% {<entrykey>}
+\protected\def\blx@bbl@inset#1{%
+ \toggletrue{blx@setonly}%
+ \blx@bbl@fieldedef{entryset}{\detokenize{#1}}%
+ \csxdef{blx@setc@\the\c@refsection @\abx@field@@@entrykey}{\detokenize{#1}}}
+
+% {<entrykey>}
+\protected\def\blx@bbl@xref#1{}% No-op to avoid an error with BibTeX .bbl
+\protected\def\blx@bbl@fakeset#1{}% No-op to avoid an error with BibTeX .bbl
+
+% {<keyword>,...}
+\protected\def\blx@bbl@keyw#1{%
+ \forcsvlist{\blx@addkeyword{\abx@field@@@entrykey}}{#1}%
+ \blx@bbl@fielddef{}{}{keywords}{#1}}
+
+\def\blx@addkeyword#1#2{%
+ \listcsxadd{blx@keyw@\the\c@refsection @\detokenize{#2}}{#1}}
+
+\newcommand*{\blx@ifcatcode@other}[1]{%
+ \ifnumequal{\catcode\number`#1}{12}}
+
+% {<options>}
+\protected\long\def\blx@bbl@options#1{%
+ \ifblank{#1}
+ {}
+ {\begingroup
+ \blx@ifcatcode@other{,}
+ {\blx@ifcatcode@other{=}}
+ {\@secondoftwo}
+ {\blx@bbl@options@check{#1}}
+ {\ifundef\blx@bbl@options@warncatcode
+ {\blx@warning@noline{%
+ Irregular catcode regime detected.\MessageBreak
+ Attempting to work around this with \string\scantokens}%
+ \global\let\blx@bbl@options@warncatcode\@empty}
+ {}%
+ \makeatletter
+ \@makeother\=
+ \@makeother\'
+ \endlinechar\m@ne
+ \scantokens\expandafter{\blx@bbl@options@check{#1}}}}}
+
+\long\def\blx@bbl@options@check#1{%
+ \let\blx@tempa\@empty
+ \forcsvlist\blx@bbl@options@checkopt{#1}%
+ \edef\blx@tempa{%
+ \endgroup % this group was opened in \blx@bbl@options
+ \ifx\blx@tempa\@empty
+ \else
+ \def\noexpand\abx@field@@@options{\expandonce\blx@tempa}%
+ \fi}%
+ \blx@tempa}
+
+
+\long\def\blx@bbl@options@checkopt#1{\blx@bbl@options@checkopt@i#1==&}
+
+\long\def\blx@bbl@options@checkopt@i#1=#2=#3&{%
+ \blx@kv@ifkeyundef{blx@opt@ent}{#1}
+ {\blx@warning@noline{%
+ Ignoring undefined option '#1'\MessageBreak
+ at entry '\abx@field@@@entrykey'}}
+ {\eappto\blx@tempa{%
+ \ifx\blx@tempa\@empty\else,\fi
+ \unexpanded{#1}\ifblank{#2}{}{=\unexpanded{#2}}}}}
+
+\def\blx@ifdata#1{%
+ \ifcsdef{blx@data@\the\c@refsection @\blx@refcontext@context @#1}}
+\let\blx@imc@ifentryinbib\blx@ifdata
+
+\def\blx@getdata#1{%
+ \csuse{blx@data@\the\c@refsection @\blx@refcontext@context @#1}%
+ % Set lmslang with any entry-specific language
+ \blx@imc@iffieldundef{langid}
+ {\global\let\blx@lmslang\blx@mslang}
+ {\xdef\blx@lmslang{\csuse{blx@msmaplangr@\abx@field@@@langid}}}%
+ \blx@adjustyears
+ \blx@getlabeldata
+ \blx@aliasfields
+ \blx@setcitecounter}
+
+\def\blx@adjustyears{%
+ % All dates by default are output from biber in astronomical era with a year 0
+ % So, if we are ouputting BCE/BC era, we need to adjust the years by +1
+ \def\do##1{%
+ \ifdefstring\blx@dateera{astronomical}
+ {}
+ {\ifcsdef{abx@field@@@##1year}
+ {\csuse{if##1dateera}{bce}
+ {\csedef{abx@field@@@##1year}{\number\numexpr\csuse{abx@field@@@##1year}+1}}
+ {}}
+ {}%
+ \ifcsdef{abx@field@@@##1endyear}
+ {\csuse{if##1enddateera}{bce}
+ {\csedef{abx@field@@@##1endyear}{\number\numexpr\csuse{abx@field@@@##1endyear}+1}}
+ {}}
+ {}}%
+ {}}%
+ \abx@dodatetypes}
+
+\def\blx@getlabeldata{%
+ % Here we resolve label* bib fields to their real fields. In fact, currently biber resolves
+ % the label* fields too, as it needs to do this to generate various internal
+ % counters for tracking things like singletitle etc. internally. However, it does not output
+ % the resolved values to the .bbl. It is conceptually neater to have just the calculated label*
+ % source field in the .bbl and let biblatex resolve the label* field using the label*source
+ % fields. However, currently there is no way/need to vary the label* resolution to pick up a
+ % different target field in biblatex and so practically, this resolution is being done twice,
+ % once by biber, once by biblatex. It is possible in the future that it would be useful to
+ % to change the resolution of the label* fields dynamically in a style/document and so this
+ % biblatex-side resolution remains.
+ %
+ % An unanswered question is whether such dynamic resolution causes problems due to the fact
+ % that biber uses the label* field to generate counters internally and changing the
+ % label* field resolution in biblatex would occur after such counters have been used to
+ % generate the .bbl
+ % This could all be removed from biblatex if necessary and biber could output all resolved
+ % label* fields to the .bbl but then it potentially removes control of such things from
+ % macros
+ %
+ % fields
+ \def\do##1{%
+ \ifcsundef{abx@fieldmssource@field@##1}
+ {}
+ {\iftoggle{blx@dynamiclabel}
+ {\let\blx@tempa\blx@msform
+ \let\blx@tempb\blx@mslang}
+ {\edef\blx@tempa{\csuse{abx@fieldmssource@msform@##1}}%
+ \edef\blx@tempb{\csuse{abx@fieldmssource@mslang@##1}}}%
+ \csletcs{abx@field@@@##1}{abx@field@\blx@tempa @\blx@tempb @\csuse{abx@fieldmssource@field@##1}}}}%
+ \abx@dorfields%
+ % names
+ \def\do##1{%
+ \ifcsundef{abx@fieldmssource@field@##1}
+ {}
+ {\iftoggle{blx@dynamiclabel}
+ {\let\blx@tempa\blx@msform
+ \let\blx@tempb\blx@mslang}
+ {\edef\blx@tempa{\csuse{abx@fieldmssource@msform@##1}}%
+ \edef\blx@tempb{\csuse{abx@fieldmssource@mslang@##1}}}%
+ \csname c@##1\expandafter\endcsname\expandafter
+ \the\csname c@\csuse{abx@fieldmssource@field@##1}\endcsname
+ \csletcs{abx@name@@@##1}{abx@name@\blx@tempa @\blx@tempb @\csuse{abx@fieldmssource@field@##1}}%
+ \csletcs{etb@tgl@abx@bool@more##1}{%
+ etb@tgl@abx@bool@more\csuse{abx@fieldmssource@field@##1}}}}%
+ \abx@dornames%
+ % indextitle/indexsorttitle
+ \blx@indextitle
+ \ifundef\abx@field@@@indexsorttitle
+ {\let\abx@field@@@indexsorttitle\abx@field@@@indextitle}
+ {}%
+ % Resolve labeldate
+ % Note that here we can't refer to labelyear as this is where we create it, hence the
+ % complications in constructing test names etc.
+ % This also shows why biber shouldn't resolve labeldate fields as we have to add
+ % circa/uncertain/era etc. information to them and that has to be done here.
+ \ifundef\abx@field@@@labeldatesource
+ {}
+ {\ifcsundef{abx@field@@@\abx@field@@@labeldatesource year}
+ % \DeclareLabeldate resolved to a literal/localisation string or a non-date field
+ % in which case we only set labelyear.
+ {\ifcsundef{abx@field@@@\abx@field@@@labeldatesource}
+ % \DeclareLabeldate resolved to a literal/localisation string
+ {\let\abx@field@@@labelyear\abx@field@@@labeldatesource}
+ % \DeclareLabeldate resolved to a non-date field. Not safe to \edef because
+ % such contents could contain arbitrary macros, unlike ISO8601 sourced labeldatesource values
+ {\letcs\abx@field@@@labelyear{abx@field@@@\abx@field@@@labeldatesource}}}
+ % \DeclareLabeldate resolved to a date field name prefix like '', 'event', 'url'
+ % or 'orig'
+ {% labeldateera/labelenddateera
+ \letcs\abx@field@@@labeldateera{abx@field@@@\abx@field@@@labeldatesource dateera}%
+ \letcs\abx@field@@@labelenddateera{abx@field@@@\abx@field@@@labeldatesource enddateera}%
+ \letcs\abx@field@@@labelyear{abx@field@@@\abx@field@@@labeldatesource year}%
+ \letcs\abx@field@@@labelendyear{abx@field@@@\abx@field@@@labeldatesource endyear}%
+ \letcs\abx@field@@@labelmonth{abx@field@@@\abx@field@@@labeldatesource month}%
+ \letcs\abx@field@@@labelendmonth{abx@field@@@\abx@field@@@labeldatesource endmonth}%
+ \letcs\abx@field@@@labelday{abx@field@@@\abx@field@@@labeldatesource day}%
+ \letcs\abx@field@@@labelendday{abx@field@@@\abx@field@@@labeldatesource endday}%
+ \letcs\abx@field@@@labelhour{abx@field@@@\abx@field@@@labeldatesource hour}%
+ \letcs\abx@field@@@labelendhour{abx@field@@@\abx@field@@@labeldatesource endhour}%
+ \letcs\abx@field@@@labelminute{abx@field@@@\abx@field@@@labeldatesource minute}%
+ \letcs\abx@field@@@labelendminute{abx@field@@@\abx@field@@@labeldatesource endminute}%
+ \letcs\abx@field@@@labelsecond{abx@field@@@\abx@field@@@labeldatesource second}%
+ \letcs\abx@field@@@labelendsecond{abx@field@@@\abx@field@@@labeldatesource endsecond}%
+ \letcs\abx@field@@@labeltimezone{abx@field@@@\abx@field@@@labeldatesource timezone}%
+ \letcs\abx@field@@@labelendtimezone{abx@field@@@\abx@field@@@labeldatesource endtimezone}%
+ \letcs\abx@field@@@labelyeardivision{abx@field@@@\abx@field@@@labeldatesource yeardivision}%
+ \letcs\abx@field@@@labelendyeardivision{abx@field@@@\abx@field@@@labeldatesource endyeardivision}%
+ \letcs\abx@field@@@labeldateunspecified{abx@field@@@\abx@field@@@labeldatesource dateunspecified}%
+ \letcs\etb@tgl@abx@bool@labeldatecirca{etb@tgl@abx@bool@\abx@field@@@labeldatesource datecirca}%
+ \letcs\etb@tgl@abx@bool@labelenddatecirca{etb@tgl@abx@bool@\abx@field@@@labeldatesource enddatecirca}%
+ \letcs\etb@tgl@abx@bool@labeldatejulian{etb@tgl@abx@bool@\abx@field@@@labeldatesource datejulian}%
+ \letcs\etb@tgl@abx@bool@labelenddatejulian{etb@tgl@abx@bool@\abx@field@@@labeldatesource enddatejulian}%
+ \letcs\etb@tgl@abx@bool@labeldateuncertain{etb@tgl@abx@bool@\abx@field@@@labeldatesource dateuncertain}%
+ \letcs\etb@tgl@abx@bool@labelenddateuncertain{etb@tgl@abx@bool@\abx@field@@@labeldatesource enddateuncertain}%
+ \letcs\etb@tgl@abx@bool@labeldateunknown{etb@tgl@abx@bool@\abx@field@@@labeldatesource dateunknown}%
+ \letcs\etb@tgl@abx@bool@labelenddateunknown{etb@tgl@abx@bool@\abx@field@@@labeldatesource enddateunknown}%
+ }%
+ }%
+}
+
+% This gets the entry data for a citation
+\def\blx@getdata@cite#1{%
+ \blx@getdata{#1}%
+ % Inject the relevant set parent fields like labelnumber/labelprefix into child
+ \ifcsdef{blx@setc@\the\c@refsection @#1}
+ {\blx@ifdata{#1}
+ {\def\abx@field@@@childentrykey{#1}%LEGACY(<3.8)
+ \let\abx@field@@@childentrytype\abx@field@@@entrytype %LEGACY(<3.8)
+ \begingroup
+ \expandafter\expandafter\expandafter\blx@getdata
+ \expandafter\expandafter\expandafter{%
+ \csname blx@setc@\the\c@refsection @#1\endcsname}%
+ \let\blx@tempa\@empty
+ % Inject labelnumber if it exists
+ \ifdef\abx@field@@@labelnumber
+ {\appto\blx@tempa{%
+ \def\noexpand\abx@field@@@labelnumber{%
+ \expandonce\abx@field@@@labelnumber}}}
+ {}%
+ % Inject labelprefix if it exists
+ \ifdef\abx@field@@@labelprefix
+ {\appto\blx@tempa{%
+ \def\noexpand\abx@field@@@labelprefix{%
+ \expandonce\abx@field@@@labelprefix}}}
+ {}%
+ % Inject labelalpha if it exists
+ \ifdef\abx@field@@@labelalpha
+ {\appto\blx@tempa{%
+ \def\noexpand\abx@field@@@labelalpha{%
+ \expandonce\abx@field@@@labelalpha}}}
+ {}%
+ % Inject extraalpha if it exists
+ \ifdef\abx@field@@@extraalpha
+ {\appto\blx@tempa{%
+ \def\noexpand\abx@field@@@extraalpha{%
+ \expandonce\abx@field@@@extraalpha}}}
+ {}%
+ % Perform the injection
+ \edef\blx@tempb{\endgroup\blx@tempa}%
+ \blx@tempb}
+ {}}
+ {}%
+ \ifcsdef{blx@seti@\the\c@refsection @#1}
+ {\letcs\abx@field@@@entrysetcount{blx@seti@\the\c@refsection @#1}}
+ {}}
+
+\def\blx@execute{%
+ \blx@imc@thefield{execute}}
+
+\def\blx@setoptions@entry{%
+ \blx@imc@iffieldundef{options}
+ {}
+ {\begingroup
+ \edef\blx@tempa{\endgroup
+ \noexpand\blx@kv@setkeys{blx@opt@ent}{\abx@field@@@options}}%
+ \blx@tempa
+ \blx@checkoptions@entry}}
+
+\def\blx@setoptions@type#1{%
+ \ifcsdef{blx@opts@type@#1}
+ {\begingroup
+ \edef\blx@tempa{\endgroup
+ \noexpand\blx@kv@setkeys{blx@opt@typ}{\csuse{blx@opts@type@#1}}}%
+ \blx@tempa}
+ {}}
+
+\def\blx@checkoptions@global{}
+\def\blx@checkoptions@type{}
+\def\blx@checkoptions@entry{}
+
+\def\blx@entrysetcount{%
+ \ifdef\abx@field@@@entrykey
+ {\ifcsdef{blx@seti@\the\c@refsection @\abx@field@@@entrykey}
+ {\letcs\abx@field@@@entrysetcount{%
+ blx@seti@\the\c@refsection @\abx@field@@@entrykey}}
+ {}}
+ {}}
+
+% {<section>}
+\def\blx@bbl@refsection#1{%
+ \begingroup
+ \c@refsection#1\relax}
+
+\def\blx@bbl@endrefsection{%
+ \iftoggle{blx@addset}
+ {\blx@addset
+ \global\togglefalse{blx@addset}}
+ {}%
+ \endgroup}
+
+% {<entrykey>}
+\protected\def\blx@bbl@missing#1{%
+ \listcsxadd{blx@miss@\the\c@refsection}{\detokenize{#1}}%
+ \blx@warning@noline{%
+ The following entry could not be found\MessageBreak
+ in the database%
+ \ifnumgreater\c@refsection\z@
+ { (refsection \the\c@refsection)}
+ {}:\MessageBreak
+ \detokenize{#1}\MessageBreak
+ Please verify the spelling and rerun\MessageBreak
+ LaTeX afterwards}}
+
+% We create an alias resolving macro and also a list of aliases
+% which we need to add to the .bcf. We need to resolve the aliases
+% for internal use but we always want the aliases themselves in the .bcf
+% so that biber can correctly use and resolve them too.
+\protected\def\blx@bbl@keyalias#1#2{%
+ \csxdef{blx@keyalias@\the\c@refsection @#1}{\detokenize{#2}}%
+ \listcsxadd{blx@keyaliases@\the\c@refsection}{\detokenize{#1}}}
+
+% blx@dlist@list@<section>@<refcontext> - a list of list items in a refcontext in a
+% section (for tracking bibliography lists,
+% obeys skipbiblist)
+% blx@dlist@entry@<section>@<list> - a list of normal entries in a list in a
+% section (for tracking bibliographies,
+% obeys skipbib)
+% blx@dlist@centry@<section>@<list> - a list of normal entries in a list in a
+% section (for tracking citations,
+% does not obey skipbib).
+% Same as @entry@, but includes skipbib'd entries
+% and set children
+%
+% {<entrykey>}{<entrytype>}{<options>}
+\protected\def\blx@bbl@entry#1#2#3{%
+ \begingroup
+ \edef\abx@field@@@entrykey{\detokenize{#1}}%
+ \blx@setoptions@type{#2}%
+ \blx@bbl@options{#3}%
+ \blx@setoptions@entry
+ \edef\blx@bbl@data{blx@data@\the\c@refsection @\blx@dlist@name @\abx@field@@@entrykey}%
+ \blx@bbl@addfield{entrykey}{\abx@field@@@entrykey}{}{}%
+ \listcsxadd{blx@entries@\the\c@refsection}{\abx@field@@@entrykey}%
+ \blx@bbl@addfield{entrytype}{#2}{}{}%
+ \csuse\blx@bbl@data
+ \blx@imc@iffieldundef{options}
+ {}
+ {\blx@bbl@fieldedef{options}{\expandonce\abx@field@@@options}}}
+
+\protected\def\blx@bbl@endentry{%
+ % Useful for debugging
+ % \expandafter\show\csname\blx@bbl@data\endcsname
+ \csuse\blx@bbl@data
+ \ifcsundef{blx@pref@\the\c@refsection @\abx@field@@@entrykey}
+ {}
+ {\blx@addpageref{\abx@field@@@entrykey}}%
+ \nottoggle{blx@setonly}
+ {}
+ {\global\toggletrue{blx@addset}%
+ \toggletrue{blx@skipbib}%
+ \toggletrue{blx@skipbiblist}%
+ \toggletrue{blx@skiplab}}%
+ \expandafter\ifstrequal\expandafter{\blx@dlist@type}{entry}
+ {\listcsxadd{blx@type@\the\c@refsection @\abx@field@@@entrytype}{\abx@field@@@entrykey}%
+ \ifdef\abx@field@@@entrysubtype
+ {\listcsxadd{blx@subt@\the\c@refsection @\abx@field@@@entrysubtype}{\abx@field@@@entrykey}}
+ {}%
+ \nottoggle{blx@setonly}
+ {\listcsxadd{blx@dlist@centry@\the\c@refsection @\blx@dlist@name}{\abx@field@@@entrykey}}
+ {}%
+ \nottoggle{blx@skipbib}
+ {\listcsxadd{blx@dlist@entry@\the\c@refsection @\blx@dlist@name}{\abx@field@@@entrykey}}
+ {}}%
+ {}%
+ \nottoggle{blx@skipbiblist}
+ {\expandafter\ifstrequal\expandafter{\blx@dlist@type}{list}
+ {\blx@bbl@labelfields
+ \listcsxadd{blx@dlist@\blx@dlist@type @\the\c@refsection @\blx@dlist@name}{\abx@field@@@entrykey}}
+ {}}%
+ {}%
+ \nottoggle{blx@skiplab}
+ {\iftoggle{blx@labelnumber}
+ {\blx@bbl@labelnumber}
+ {}%
+ \iftoggle{blx@labelalpha}
+ {\blx@bbl@labelalpha}
+ {}%
+ \iftoggle{blx@labeltitle}
+ {\blx@bbl@labeltitle}
+ {}%
+ \iftoggle{blx@labeltitleyear}
+ {\blx@bbl@labeltitleyear}
+ {}%
+ \iftoggle{blx@labeldateparts}
+ {\blx@bbl@labeldate}
+ {}%
+ \blx@bbl@labelname}
+ {}%
+ \blx@bbl@hooks
+ \endgroup}
+
+% This, at the end of the .bbl, puts any set parent children into the
+% current context sort list of citations (a separate list *@centry@* to the
+% bibliography *@entry@* which doesn't want the children adding if they weren't
+% cited) as this is needed for the subentry citing
+% when sortcites is enabled as for sortcites, the current context sorting list
+% is used and the parent set of a subentry is not necessarily
+% available in the current context sortlist.
+\def\blx@addset{%
+ \begingroup
+ \ifcsdef{blx@dlist@centry@\the\c@refsection @\blx@refcontext@context}
+ {\letcs\blx@tempa{blx@dlist@centry@\the\c@refsection @\blx@refcontext@context}%
+ \global\cslet{blx@dlist@centry@\the\c@refsection @\blx@refcontext@context}\@empty
+ \forlistloop\blx@addset@i\blx@tempa}
+ {\blx@warning@noline{Sorting template has changed}}%
+ \endgroup}
+
+\def\blx@addset@i#1{%
+ \listcsgadd{blx@dlist@centry@\the\c@refsection @\blx@refcontext@context}{#1}%
+ \ifcsdef{blx@setp@\the\c@refsection @#1}
+ {\expandafter\expandafter\expandafter\forcsvlist
+ \expandafter\expandafter\expandafter\blx@addset@ii
+ \expandafter\expandafter\expandafter{%
+ \csname blx@setp@\the\c@refsection @#1\endcsname}}
+ {}}
+
+\def\blx@addset@ii#1{%
+ \listcsgadd{blx@dlist@centry@\the\c@refsection @\blx@refcontext@context}{#1}}
+
+% {<csname>}{<field>/<format>}{<field>}
+\def\abx@flfw@getfieldformat#1#2#3{%
+ \blx@getformat\abx@tmp@theformat{ffd}{#2}{#3}%
+ \csletcs{#1}{abx@tmp@theformat}}
+
+
+% {<instance (int)>}{<field>}{<length>}
+\def\abx@aux@locallabelwidth#1#2#3{%
+ \csgdef{blx@locallabelwidth@#1@#2}{#3}}
+
+\def\blx@locallabelwidth@write@length#1{%
+ \blx@auxwrite\@mainaux{}
+ {\string\abx@aux@locallabelwidth
+ {\the\blx@biblioinstance}%
+ {#1}%
+ {\the\csname local#1width\endcsname}}}
+
+\def\blx@locallabelwidth@write{%
+ \let\do\blx@locallabelwidth@write@length
+ \abx@dolabelwidths}
+
+\let\blx@locallabelwidth@finish\relax
+
+\def\blx@labelwidth@resetlocal{%
+ \def\do##1{%
+ \csname local##1width\endcsname\z@}%
+ \abx@dolabelwidths}
+
+\def\blx@labelwidth@settolocal@length#1{%
+ \ifcsundef{blx@locallabelwidth@\the\blx@biblioinstance @#1}
+ {}
+ {\csname #1width\endcsname
+ \csname blx@locallabelwidth@\the\blx@biblioinstance @#1\endcsname
+ \space}}
+
+\def\blx@labelwidth@settolocal{%
+ \let\do\blx@labelwidth@settolocal@length
+ \abx@dolabelwidths}
+
+\def\blx@locallabelwidth@setlengths{%
+ \global\advance\blx@biblioinstance\@ne
+ \blx@labelwidth@resetlocal
+ \blx@labelwidth@settolocal}
+
+\let\blx@locallabelwidth@init\relax
+
+
+% {<prefix for labelwidth fields>}
+\def\blx@bbl@labelnumberwidth@numeric#1{%
+ \abx@flfw@getfieldformat{abx@flfw@labelnumberwidth}{labelnumberwidth}{}%
+ \abx@flfw@getfieldformat{abx@flfw@labelprefix}{labelprefix}{}%
+ \abx@flfw@getfieldformat{abx@flfw@labelnumber}{labelnumber}{}%
+ \iftoggle{blx@defernumbers}
+ {\ifundef\abx@field@@@localnumber
+ {\numdef\abx@field@@@localnumber{0}}%
+ {}}
+ {\ifundef\abx@field@@@localnumber
+ {\edef\abx@field@@@localnumber{%
+ \csuse{blx@labelnumber@\the\c@refsection}}}
+ {}}%
+ \blx@setlabwidth{\csname #1labelnumberwidth\endcsname}{%
+ \csuse{abx@flfw@labelnumberwidth}{%
+ \ifdef\abx@field@@@labelprefix
+ {\csuse{abx@flfw@labelprefix}{\abx@field@@@labelprefix}}
+ {}%
+ \csuse{abx@flfw@labelnumber}{\abx@field@@@localnumber}}}}
+
+\def\blx@bbl@labelnumberwidth@shorthand#1{%
+ \abx@flfw@getfieldformat{abx@flfw@labelnumberwidth}{labelnumberwidth}{}%
+ \abx@flfw@getfieldformat{abx@flfw@labelnumber}{labelnumber}{}%
+ \blx@setlabwidth{\csname #1labelnumberwidth\endcsname}{%
+ \csuse{abx@flfw@labelnumberwidth}{%
+ \csuse{abx@flfw@labelnumber}{\abx@field@@@shorthand}}}}
+
+\def\blx@bbl@locallabelnumberwidth{%
+ \ifdefempty\abx@field@@@localnumber
+ {}
+ {\ifundef\abx@field@@@shorthand
+ {\blx@bbl@labelnumberwidth@numeric{local}}
+ {\blx@bbl@labelnumberwidth@shorthand{local}}}}
+
+% {<prefix for labelwidth fields>}
+\def\blx@bbl@labelalphawidth#1{%
+ \abx@flfw@getfieldformat{abx@flfw@labelalphawidth}{labelalphawidth}{}%
+ \abx@flfw@getfieldformat{abx@flfw@labelprefix}{labelprefix}{}%
+ \abx@flfw@getfieldformat{abx@flfw@labelalpha}{labelalpha}{}%
+ \abx@flfw@getfieldformat{abx@flfw@extraalpha}{extraalpha}{}%
+ \blx@setlabwidth{\csname #1labelalphawidth\endcsname}{%
+ \csuse{abx@flfw@labelalphawidth}{%
+ \ifdef\abx@field@@@labelprefix
+ {\csuse{abx@flfw@labelprefix}{\abx@field@@@labelprefix}}
+ {}%
+ \csuse{abx@flfw@labelalpha}{\abx@field@@@labelalpha}%
+ \ifundef\abx@field@@@extraalpha
+ {}
+ {\csuse{abx@flfw@extraalpha}{\abx@field@@@extraalpha}}}}}
+
+\def\blx@bbl@locallabelalphawidth{%
+ \ifundef\abx@field@@@labelalpha
+ {}
+ {\blx@bbl@labelalphawidth{local}}}
+
+\def\blx@bbl@locallabelfields{\blx@bbl@labelfields@i{local}}
+
+\def\blx@bbl@labelfields{\blx@bbl@labelfields@i{}}
+
+\def\blx@indextitle{%
+ \ifundef\abx@field@@@indextitle
+ {\letcs\abx@field@@@indextitle{abx@field@\blx@msform @\blx@lmslang @title}}
+ {}}
+
+% {<prefix for labelwidth fields>}
+% This relies on the short* fields not being multiscript fields
+\def\blx@bbl@labelfields@i#1{%
+ \def\do##1{%
+ \ifcsundef{abx@field@@@##1}
+ {}
+ {\abx@flfw@getfieldformat{abx@flfw@##1width}{##1width}{##1}%
+ \blx@setlabwidth{\csname #1##1width\endcsname}{%
+ \csuse{abx@flfw@##1width}{\csname abx@field@@@##1\endcsname}}}}%
+ \abx@dolabelfields}
+
+\def\blx@bbl@labelnumber{%
+ % Used at endentry, when reading .bbl
+ % only do this for the global sorting list otherwise we increment
+ % the labelnumbers for each sortlist
+ \ifdefempty\abx@field@@@localnumber
+ {}% only if omitnumbers=true
+ {\ifundef\abx@field@@@shorthand
+ {\iftoggle{blx@defernumbers}
+ % only if defernumbers=true, we have to define localnumber to
+ % something to stop labelnumberwidth def complaining on first
+ % post-backend run since there will be nothing in the .aux yet
+ % for defernums localnumbers. On the second post-backend run,
+ % it will have a value correct for generating labelnumberwidth
+ % We also have to define a dummy value for labelnumber here for
+ % first post-backend runs otherwise references to labelnumber
+ % in cite styles like numeric-comp will die.
+ {\ifundef\abx@field@@@localnumber
+ {\numdef\abx@field@@@localnumber{0}%
+ \blx@bbl@fielddef{}{}{labelnumber}{0}}%
+ {}}
+ {\csnumgdef{blx@labelnumber@\the\c@refsection}{%
+ \csuse{blx@labelnumber@\the\c@refsection}+1}%
+ \edef\abx@field@@@localnumber{%
+ \csuse{blx@labelnumber@\the\c@refsection}}%
+ \blx@bbl@fieldedef{labelnumber}{\abx@field@@@localnumber}}%
+ \iftoggle{blx@skipbib}
+ {}
+ {\blx@bbl@labelnumberwidth@numeric{}}}
+ {\csgappto\blx@bbl@data{\let\abx@field@@@labelnumber\abx@field@@@shorthand}%
+ \iftoggle{blx@skipbib}
+ {}
+ {\blx@bbl@labelnumberwidth@shorthand{}}}}}
+
+\def\blx@bbl@labelalpha{%
+ \ifundef\abx@field@@@labelalpha
+ {}
+ {\ifundef\abx@field@@@extraalpha
+ {}
+ {\ifnum\abx@field@@@extraalpha>\c@maxextraalpha
+ \global\c@maxextraalpha\abx@field@@@extraalpha\relax
+ \fi}%
+ \iftoggle{blx@skipbib}
+ {}
+ {\blx@bbl@labelalphawidth{}}}}
+
+\def\blx@bbl@labeltitle{%
+ \ifundef\abx@field@@@extratitle
+ {}
+ {\ifnum\abx@field@@@extratitle>\c@maxextratitle
+ \global\c@maxextratitle\abx@field@@@extratitle\relax
+ \fi}}
+
+\def\blx@bbl@labeltitleyear{%
+ \ifundef\abx@field@@@extratitleyear
+ {}
+ {\ifnum\abx@field@@@extratitleyear>\c@maxextratitleyear
+ \global\c@maxextratitleyear\abx@field@@@extratitleyear\relax
+ \fi}}
+
+\def\blx@bbl@labelname{%
+ \ifundef\abx@field@@@extraname
+ {}
+ {\ifnum\abx@field@@@extraname>\c@maxextraname
+ \global\c@maxextraname\abx@field@@@extraname\relax
+ \fi}}
+
+\def\blx@bbl@labeldate{%
+ \ifundef\abx@field@@@extradate
+ {}
+ {\ifnum\abx@field@@@extradate>\c@maxextradate
+ \global\c@maxextradate\abx@field@@@extradate\relax
+ \fi}}
+
+\def\blx@bbl@hooks{%
+ \ifcsundef{blx@hook@bblitem@*}
+ {\ifcsundef{blx@hook@bblitem@\abx@field@@@entrytype}
+ {}
+ {\csuse\blx@bbl@data
+ \csuse{blx@hook@bblitem@\abx@field@@@entrytype}}}
+ {\csuse\blx@bbl@data
+ \csuse{blx@hook@bblitem@*}%
+ \csuse{blx@hook@bblitem@\abx@field@@@entrytype}}}
+
+\newrobustcmd*{\AtDataInput}[1][*]{\csgappto{blx@hook@bblitem@#1}}
+\@onlypreamble\AtDataInput
+
+\def\blx@setlabwidth#1#2{%
+ \begingroup
+ \settowidth{\@tempdima}{\bibfont#2}%
+ \ifnum\@tempdima>#1%
+ \global#1\@tempdima
+ \fi
+ \endgroup}
+
+\def\blx@bblstart{%
+ \let\preamble\blx@bbl@preamble
+ \let\warn\blx@bbl@thewarn
+ \let\refsection\blx@bbl@refsection
+ \let\endrefsection\blx@bbl@endrefsection
+ \let\entry\blx@bbl@entry
+ \let\endentry\blx@bbl@endentry
+ \let\missing\blx@bbl@missing
+ \let\keyalias\blx@bbl@keyalias
+ \let\datalist\blx@bbl@dlist
+ \let\enddatalist\blx@bbl@enddlist
+ \let\set\blx@bbl@set
+ \let\inset\blx@bbl@inset
+ \let\fakeset\blx@bbl@fakeset % A No-op for Biber
+ \let\xref\blx@bbl@xref % A No-op for Biber
+ \let\keyw\blx@bbl@keyw
+ \let\name\blx@bbl@msnamedef
+ \let\namepartms\blx@bbl@msnamepartdef
+ \let\listitemms\blx@bbl@mslistitemdef
+ \let\list\blx@bbl@mslistdef
+ \let\field\blx@bbl@msfielddef
+ \let\fieldmssource\blx@bbl@fieldmssourcedef
+ \let\range\blx@bbl@rangedef
+ \let\strng\blx@bbl@stringdef
+ \let\cnt\blx@bbl@cntdef
+ \let\true\blx@bbl@booltrue
+ \let\false\blx@bbl@boolfalse
+ \let\verb\blx@bbl@verbdef
+ \let\endverb\blx@bbl@verbend
+ \let\lverb\blx@bbl@verbldef
+ \let\endlverb\blx@bbl@verblend
+ \let\annotation\blx@bbl@annotationdef
+ \let\msforms\blx@bbl@msformsdef
+ \let\mslangs\blx@bbl@mslangsdef
+ \let\msentrylangs\blx@bbl@msentrylangsdef}
+
+% namepart definitions for all alternates of a name
+\protected\def\blx@bbl@msnamepartdef#1#2#3{%
+ \csxappto\blx@bbl@data{%
+ \listadd\noexpand\abx@nameparts@defined{#1@#2}%
+ \def\expandafter\noexpand\csname abx@nameparts@#1@#2\endcsname{\unexpanded{#3}}}}
+% listitem definitions for all alternates of a list
+\protected\def\blx@bbl@mslistitemdef#1#2#3{%
+ \csxappto\blx@bbl@data{%
+ \listadd\noexpand\abx@listitems@defined{#1@#2}%
+ \def\expandafter\noexpand\csname abx@listitems@#1@#2\endcsname{\unexpanded{#3}}}}
+
+% Record select list for a langid
+\newrobustcmd*{\DeclareMsselect}[2]{%
+ \begingroup
+ \let\alternate\blx@msselect
+ \def\blx@tempa{#1}%
+ \ifcsdef{blx@msmaplangr@#1}
+ {\letcs\blx@tempa{blx@msmaplangr@#1}}
+ {}%
+ #2%
+ \endgroup}
+\protected\def\blx@msselect#1#2{%
+ \listcsgadd{blx@msselect@\blx@tempa}{{#1}{#2}}}
+\@onlypreamble\DeclareMsselect
+
+% List of all forms/langs in the documents, comes from biber via .bbl
+\protected\def\blx@bbl@msformsdef#1{%
+ \gdef\blx@msforms{#1}}
+\protected\def\blx@bbl@mslangsdef#1{%
+ \gdef\blx@mslangs{#1}}
+\protected\def\blx@bbl@msentrylangsdef#1{}
+
+% Mapping of BCP47->babel ids until babel/polyglossia support BCP47 tags
+% Must use \csuse on blx@msmaplang due to hyphens in tags
+\protected\def\blx@imc@maplangtag#1#2{%
+ \csgdef{blx@msmaplang@#1}{#2}}
+\let\maplangtag\blx@imc@maplangtag
+
+% Default BCP47->babel/polyglossia mappings
+% Used to determine babel/polyglossia/biblatex language from BCP47 tag
+% Needs to be replaced by some real package
+\blx@imc@maplangtag{af}{afrikaans}
+\blx@imc@maplangtag{af-za}{afrikaans}
+\blx@imc@maplangtag{am}{ethiopia}
+\blx@imc@maplangtag{am-et}{amharic}
+\blx@imc@maplangtag{ar}{arabic}
+\blx@imc@maplangtag{ar-001}{arabic}
+\blx@imc@maplangtag{ast}{asturian}
+\blx@imc@maplangtag{ast-es}{asturian}
+\blx@imc@maplangtag{bg}{bulgarian}
+\blx@imc@maplangtag{bg-bg}{bulgarian}
+\blx@imc@maplangtag{bn}{bengali}
+\blx@imc@maplangtag{bn-bd}{bengali}
+\blx@imc@maplangtag{bo}{tibetan}
+\blx@imc@maplangtag{bo-cn}{tibetan}
+\blx@imc@maplangtag{br}{breton}
+\blx@imc@maplangtag{br-fr}{breton}
+\blx@imc@maplangtag{ca}{catalan}
+\blx@imc@maplangtag{ca-ad}{catalan}
+\blx@imc@maplangtag{ca-es}{catalan}
+\blx@imc@maplangtag{cop}{coptic}
+\blx@imc@maplangtag{cs}{czech}
+\blx@imc@maplangtag{cs-cz}{czech}
+\blx@imc@maplangtag{cy}{welsh}
+\blx@imc@maplangtag{cy-gb}{welsh}
+\blx@imc@maplangtag{da}{danish}
+\blx@imc@maplangtag{da-dk}{danish}
+\blx@imc@maplangtag{de-1996}{ngerman}
+\blx@imc@maplangtag{de-at}{austrian}
+\blx@imc@maplangtag{de-at-1996}{naustrian}
+\blx@imc@maplangtag{de-ch}{swissgerman}
+\blx@imc@maplangtag{de-ch-1996}{nswissgerman}
+\blx@imc@maplangtag{de}{german}
+\blx@imc@maplangtag{de-de}{german}
+\blx@imc@maplangtag{de-de-1996}{ngerman}
+\blx@imc@maplangtag{dsb}{lowersorbian}
+\blx@imc@maplangtag{dsb-de}{lowersorbian}
+\blx@imc@maplangtag{dv}{divehi}
+\blx@imc@maplangtag{dv-mv}{divehi}
+\blx@imc@maplangtag{el}{greek}
+\blx@imc@maplangtag{el-cy}{ibygreek}
+\blx@imc@maplangtag{el-gr}{greek}
+\blx@imc@maplangtag{en}{english}
+\blx@imc@maplangtag{en-au}{australian}
+\blx@imc@maplangtag{en-ca}{canadian}
+\blx@imc@maplangtag{en-uk}{ukenglish}
+\blx@imc@maplangtag{en-gb}{british}
+\blx@imc@maplangtag{en-nz}{newzealand}
+\blx@imc@maplangtag{en-us}{usenglish}
+\blx@imc@maplangtag{en-us}{american}
+\blx@imc@maplangtag{en-us}{english}
+\blx@imc@maplangtag{eo}{esperanto}
+\blx@imc@maplangtag{eo-001}{esperanto}
+\blx@imc@maplangtag{es}{spanish}
+\blx@imc@maplangtag{es-es}{spanish}
+\blx@imc@maplangtag{et}{estonian}
+\blx@imc@maplangtag{et-ee}{estonian}
+\blx@imc@maplangtag{eu}{basque}
+\blx@imc@maplangtag{eu-es}{basque}
+\blx@imc@maplangtag{fa}{farsi}
+\blx@imc@maplangtag{fa-ir}{farsi}
+\blx@imc@maplangtag{fi}{finnish}
+\blx@imc@maplangtag{fi-fi}{finnish}
+\blx@imc@maplangtag{fr}{french}
+\blx@imc@maplangtag{fr-ca}{acadian}
+\blx@imc@maplangtag{fr-ca}{canadien}
+\blx@imc@maplangtag{fr-fr}{french}
+\blx@imc@maplangtag{fur}{friulan}
+\blx@imc@maplangtag{fur-it}{friulan}
+\blx@imc@maplangtag{ga}{irish}
+\blx@imc@maplangtag{ga-ie}{irish}
+\blx@imc@maplangtag{gd}{scottish}
+\blx@imc@maplangtag{gd-gb}{scottish}
+\blx@imc@maplangtag{gl}{galician}
+\blx@imc@maplangtag{gl-es}{galician}
+\blx@imc@maplangtag{ha}{nko}
+\blx@imc@maplangtag{ha-ng}{nko}
+\blx@imc@maplangtag{he}{hebrew}
+\blx@imc@maplangtag{he-il}{hebrew}
+\blx@imc@maplangtag{hi}{hindi}
+\blx@imc@maplangtag{hi-in}{hindi}
+\blx@imc@maplangtag{hr}{croatian}
+\blx@imc@maplangtag{hr-hr}{croatian}
+\blx@imc@maplangtag{hsb}{uppersorbian}
+\blx@imc@maplangtag{hsb-de}{uppersorbian}
+\blx@imc@maplangtag{hu}{magyar}
+\blx@imc@maplangtag{hu-hu}{magyar}
+\blx@imc@maplangtag{hy}{armenian}
+\blx@imc@maplangtag{hy-am}{armenian}
+\blx@imc@maplangtag{ia}{interlingua}
+\blx@imc@maplangtag{ia-fr}{interlingua}
+\blx@imc@maplangtag{id}{indonesia}
+\blx@imc@maplangtag{is}{icelandic}
+\blx@imc@maplangtag{is-is}{icelandic}
+\blx@imc@maplangtag{it}{italian}
+\blx@imc@maplangtag{it-it}{italian}
+\blx@imc@maplangtag{ja}{japanese}
+\blx@imc@maplangtag{ja-jp}{japanese}
+\blx@imc@maplangtag{kn}{kannada}
+\blx@imc@maplangtag{kn-in}{kannada}
+\blx@imc@maplangtag{lo}{lao}
+\blx@imc@maplangtag{lo-la}{lao}
+\blx@imc@maplangtag{lt}{lithuanian}
+\blx@imc@maplangtag{lt-lt}{lithuanian}
+\blx@imc@maplangtag{lv}{latvian}
+\blx@imc@maplangtag{lv-lv}{latvian}
+\blx@imc@maplangtag{ml}{malayalam}
+\blx@imc@maplangtag{ml-in}{malayalam}
+\blx@imc@maplangtag{mn}{mongolian}
+\blx@imc@maplangtag{mn-cyrl}{mongolian}
+\blx@imc@maplangtag{mr}{marathi}
+\blx@imc@maplangtag{mr-in}{marathi}
+\blx@imc@maplangtag{nb}{norsk}
+\blx@imc@maplangtag{nb-no}{norsk}
+\blx@imc@maplangtag{nl}{dutch}
+\blx@imc@maplangtag{nl-nl}{dutch}
+\blx@imc@maplangtag{nn}{nynorsk}
+\blx@imc@maplangtag{nn-no}{nynorsk}
+\blx@imc@maplangtag{oc}{occitan}
+\blx@imc@maplangtag{oc-fr}{occitan}
+\blx@imc@maplangtag{pl}{polish}
+\blx@imc@maplangtag{pl-pl}{polish}
+\blx@imc@maplangtag{pms}{piedmontese}
+\blx@imc@maplangtag{pms-it}{piedmontese}
+\blx@imc@maplangtag{pny}{pinyin}
+\blx@imc@maplangtag{pt}{portuguese}
+\blx@imc@maplangtag{pt-br}{brazilian}
+\blx@imc@maplangtag{pt-pt}{portuguese}
+\blx@imc@maplangtag{rm}{romansh}
+\blx@imc@maplangtag{rm-ch}{romansh}
+\blx@imc@maplangtag{ro}{romanian}
+\blx@imc@maplangtag{ro-ro}{romanian}
+\blx@imc@maplangtag{ru}{russian}
+\blx@imc@maplangtag{ru-ru}{russian}
+\blx@imc@maplangtag{ru-grek}{greek}
+\blx@imc@maplangtag{ru-latn}{latin}
+\blx@imc@maplangtag{sa}{sanskrit}
+\blx@imc@maplangtag{sa-in}{sanskrit}
+\blx@imc@maplangtag{se}{samin}
+\blx@imc@maplangtag{se-no}{samin}
+\blx@imc@maplangtag{sk}{slovak}
+\blx@imc@maplangtag{sk-sk}{slovak}
+\blx@imc@maplangtag{sl}{slovenian}
+\blx@imc@maplangtag{sl-si}{slovenian}
+\blx@imc@maplangtag{sq}{albanian}
+\blx@imc@maplangtag{sq-al}{albanian}
+\blx@imc@maplangtag{sr}{serbian}
+\blx@imc@maplangtag{sr-cyrl}{serbian}
+\blx@imc@maplangtag{sr-latn}{latin}
+\blx@imc@maplangtag{sv}{swedish}
+\blx@imc@maplangtag{sv-se}{swedish}
+\blx@imc@maplangtag{syc}{syriac}
+\blx@imc@maplangtag{ta}{tamil}
+\blx@imc@maplangtag{ta-in}{tamil}
+\blx@imc@maplangtag{te}{telugu}
+\blx@imc@maplangtag{te-in}{telugu}
+\blx@imc@maplangtag{th}{thai}
+\blx@imc@maplangtag{th-th}{thai}
+\blx@imc@maplangtag{tk}{turkmen}
+\blx@imc@maplangtag{tk-tm}{turkmen}
+\blx@imc@maplangtag{tr}{turkish}
+\blx@imc@maplangtag{tr-tr}{turkish}
+\blx@imc@maplangtag{uk}{ukrainian}
+\blx@imc@maplangtag{uk-ua}{ukrainian}
+\blx@imc@maplangtag{ur}{urdu}
+\blx@imc@maplangtag{ur-in}{urdu}
+\blx@imc@maplangtag{vi}{vietnamese}
+\blx@imc@maplangtag{vi-vn}{vietnamese}
+
+% Mapping of babel->BCP47 ids until babel/polyglossia support BCP47 tags
+% Must use \csuse on blx@msmaplangr due to hyphens in tags
+% No user-facing macro needed
+\protected\def\blx@maplangtagr#1#2{%
+ \csgdef{blx@msmaplangr@#1}{#2}}
+
+% Default mappings of babel/polyglossia language id to BCP47
+% Used to determine default mslang option
+% Needs to be replaced by some real package
+\blx@maplangtagr{acadian}{fr-ca}
+\blx@maplangtagr{american}{en-us}
+\blx@maplangtagr{australian}{en-au}
+\blx@maplangtagr{afrikaans}{af-za}
+\blx@maplangtagr{albanian}{sq-al}
+\blx@maplangtagr{amharic}{am-et}
+\blx@maplangtagr{arabic}{ar-001}
+\blx@maplangtagr{armenian}{hy-am}
+\blx@maplangtagr{asturian}{ast-es}
+\blx@maplangtagr{austrian}{de-at}
+\blx@maplangtagr{bahasa}{id-id}
+\blx@maplangtagr{bahasai}{id-id}
+\blx@maplangtagr{bahasam}{id-id}
+\blx@maplangtagr{basque}{eu-es}
+\blx@maplangtagr{bengali}{bn-bd}
+\blx@maplangtagr{bgreek}{el-gr}
+\blx@maplangtagr{brazil}{pt-br}
+\blx@maplangtagr{brazilian}{pt-br}
+\blx@maplangtagr{breton}{br-fr}
+\blx@maplangtagr{british}{en-gb}
+\blx@maplangtagr{bulgarian}{bg-bg}
+\blx@maplangtagr{canadian}{en-ca}
+\blx@maplangtagr{canadien}{fr-ca}
+\blx@maplangtagr{catalan}{ca-ad}
+\blx@maplangtagr{coptic}{cop}
+\blx@maplangtagr{croatian}{hr-hr}
+\blx@maplangtagr{czech}{cs-cz}
+\blx@maplangtagr{danish}{da-dk}
+\blx@maplangtagr{divehi}{dv-mv}
+\blx@maplangtagr{dutch}{nl-nl}
+\blx@maplangtagr{english}{en-us}
+\blx@maplangtagr{esperanto}{eo-001}
+\blx@maplangtagr{estonian}{et-ee}
+\blx@maplangtagr{ethiopia}{am-et}
+\blx@maplangtagr{farsi}{fa-ir}
+\blx@maplangtagr{finnish}{fi-fi}
+\blx@maplangtagr{francais}{fr-fr}
+\blx@maplangtagr{french}{fr-fr}
+\blx@maplangtagr{frenchle}{fr-fr}
+\blx@maplangtagr{friulan}{fur-it}
+\blx@maplangtagr{galician}{gl-es}
+\blx@maplangtagr{german}{de}
+\blx@maplangtagr{germanb}{de-de}
+\blx@maplangtagr{greek}{el-gr}
+\blx@maplangtagr{hebrew}{he-il}
+\blx@maplangtagr{hindi}{hi-in}
+\blx@maplangtagr{ibygreek}{el-cy}
+\blx@maplangtagr{icelandic}{is-is}
+\blx@maplangtagr{indon}{id-id}
+\blx@maplangtagr{indonesia}{id-id}
+\blx@maplangtagr{interlingua}{ia-fr}
+\blx@maplangtagr{irish}{ga-ie}
+\blx@maplangtagr{italian}{it-it}
+\blx@maplangtagr{japanese}{ja-jp}
+\blx@maplangtagr{kannada}{kn-in}
+\blx@maplangtagr{lao}{lo-la}
+\blx@maplangtagr{latin}{la-latn}
+\blx@maplangtagr{latvian}{lv-lv}
+\blx@maplangtagr{lithuanian}{lt-lt}
+\blx@maplangtagr{lowersorbian}{dsb-de}
+\blx@maplangtagr{lsorbian}{dsb-de}
+\blx@maplangtagr{magyar}{hu-hu}
+\blx@maplangtagr{malay}{id-id}
+\blx@maplangtagr{malayalam}{ml-in}
+\blx@maplangtagr{marathi}{mr-in}
+\blx@maplangtagr{meyalu}{id-id}
+\blx@maplangtagr{mongolian}{mn-cyrl}
+\blx@maplangtagr{naustrian}{de-at}
+\blx@maplangtagr{newzealand}{en-nz}
+\blx@maplangtagr{ngerman}{de-de-1996}
+\blx@maplangtagr{nko}{ha-ng}
+\blx@maplangtagr{norsk}{nb-no}
+\blx@maplangtagr{norwegian}{nn-no}
+\blx@maplangtagr{nynorsk}{nn-no}
+\blx@maplangtagr{occitan}{oc-fr}
+\blx@maplangtagr{piedmontese}{pms-it}
+\blx@maplangtagr{pinyin}{pny}
+\blx@maplangtagr{polish}{pl-pl}
+\blx@maplangtagr{polutonikogreek}{el-gr}
+\blx@maplangtagr{portuges}{pt-pt}
+\blx@maplangtagr{portuguese}{pt-pt}
+\blx@maplangtagr{romanian}{ro-ro}
+\blx@maplangtagr{romansh}{rm-ch}
+\blx@maplangtagr{russian}{ru-ru}
+\blx@maplangtagr{samin}{se-no}
+\blx@maplangtagr{sanskrit}{sa-in}
+\blx@maplangtagr{scottish}{gd-gb}
+\blx@maplangtagr{serbian}{sr-latn}
+\blx@maplangtagr{serbianc}{sr-cyrl}
+\blx@maplangtagr{slovak}{sk-sk}
+\blx@maplangtagr{slovene}{sl-si}
+\blx@maplangtagr{slovenian}{sl-si}
+\blx@maplangtagr{spanish}{es-es}
+\blx@maplangtagr{swedish}{sv-se}
+\blx@maplangtagr{swiss}{de-ch}
+\blx@maplangtagr{swissgerman}{de-ch}
+\blx@maplangtagr{nswissgerman}{de-ch}
+\blx@maplangtagr{syriac}{syc}
+\blx@maplangtagr{tamil}{ta-in}
+\blx@maplangtagr{telugu}{te-in}
+\blx@maplangtagr{thai}{th-th}
+\blx@maplangtagr{thaicjk}{th-th}
+\blx@maplangtagr{tibetan}{bo-cn}
+\blx@maplangtagr{turkish}{tr-tr}
+\blx@maplangtagr{turkmen}{tk-tm}
+\blx@maplangtagr{ukrainian}{uk-ua}
+\blx@maplangtagr{urdu}{ur-in}
+\blx@maplangtagr{ukenglish}{en-uk}
+\blx@maplangtagr{uppersorbian}{hsb-de}
+\blx@maplangtagr{usenglish}{en-us}
+\blx@maplangtagr{usorbian}{hsb-de}
+\blx@maplangtagr{vietnamese}{vi-vn}
+\blx@maplangtagr{welsh}{cy-gb}
+
+\def\blx@bblend{%
+ % Create all namepart macros now that we know the valid bbl forms/langs
+ \def\do##1{%
+ \begingroup
+ \def\do####1{%
+ \begingroup
+ \def\do########1{%
+ \blx@kv@gdefkey{blx@opt@nameparts}{##1####1########1}{%
+ \csdef{namepart##1####1########1}{%
+ % begin language for name list part alternate
+ \edef\blx@tempa{\csuse{blx@msmaplang@########1}}%
+ \ifdef\blx@thefieldlangenv
+ {\iftoggle{blx@autofieldlangstrings}
+ {\blx@langsetup{\blx@tempa}% must call this to load the .lbx
+ \csuse{abx@extras@\blx@tempa}%
+ \csuse{abx@strings@\blx@tempa}}
+ {}%
+ \blx@hook@initfieldlang
+ \begingroup
+ \csname\blx@thefieldlangenv\expandafter\endcsname\expandafter{\blx@tempa}}
+ {}%
+ ################1%
+ \ifdef\blx@thefieldlangenv
+ {\blx@hook@endfieldlang
+ \csname end\blx@thefieldlangenv\endcsname
+ \endgroup}
+ {}}}%
+ \blx@kv@gdefkey{blx@opt@nameparts}{##1####1########1i}{%
+ \csdef{namepart##1####1########1i}{%
+ % begin language for name list part initials alternate
+ \edef\blx@tempa{\csuse{blx@msmaplang@########1}}%
+ \ifdef\blx@thefieldlangenv
+ {\iftoggle{blx@autofieldlangstrings}
+ {\blx@langsetup{\blx@tempa}% must call this to load the .lbx
+ \csuse{abx@extras@\blx@tempa}%
+ \csuse{abx@strings@\blx@tempa}}
+ {}%
+ \blx@hook@initfieldlang
+ \begingroup
+ \csname\blx@thefieldlangenv\expandafter\endcsname\expandafter{\blx@tempa}}
+ {}%
+ ################1%
+ \ifdef\blx@thefieldlangenv
+ {\blx@hook@endfieldlang
+ \csname end\blx@thefieldlangenv\endcsname
+ \endgroup}}}}%
+ \expandafter\docsvlist\expandafter{\blx@mslangs}%
+ \endgroup}%
+ \expandafter\docsvlist\expandafter{\blx@msforms}%
+ \endgroup}%
+ \expandafter\docsvlist\expandafter{\blx@datamodel@constant@nameparts}%
+ % Create all listitem macros now that we know the valid bbl forms/langs
+ \def\do##1{%
+ \begingroup
+ \def\do####1{%
+ \blx@kv@gdefkey{blx@opt@listitems}{##1####1}{%
+ \csdef{listitem##1####1}{%
+ % begin language for list item alternate
+ \edef\blx@tempa{\csuse{blx@msmaplang@####1}}%
+ \ifdef\blx@thefieldlangenv
+ {\iftoggle{blx@autofieldlangstrings}
+ {\blx@langsetup{\blx@tempa}% must call this to load the .lbx
+ \csuse{abx@extras@\blx@tempa}%
+ \csuse{abx@strings@\blx@tempa}}
+ {}%
+ \blx@hook@initfieldlang
+ \begingroup
+ \csname\blx@thefieldlangenv\expandafter\endcsname\expandafter{\blx@tempa}}
+ {}%
+ ########1%
+ \ifdef\blx@thefieldlangenv
+ {\blx@hook@endfieldlang
+ \csname end\blx@thefieldlangenv\endcsname
+ \endgroup}}}}%
+ \expandafter\docsvlist\expandafter{\blx@mslangs}%
+ \endgroup}%
+ \expandafter\docsvlist\expandafter{\blx@msforms}%
+ \def\blx@do@outer##1{%
+ \ifcsundef{blx@prelim@lastcites@##1}
+ {}
+ {\def\blx@do@inner####1{%
+ \ifinlistcs{####1}{blx@keyaliases@##1}
+ {\listcsxadd{blx@lastcites@##1}
+ {\csuse{blx@keyalias@##1@####1}}}
+ {\listcsgadd{blx@lastcites@##1}{####1}}}%
+ \forlistcsloop\blx@do@inner{blx@prelim@lastcites@##1}}}%
+ \forlistloop\blx@do@outer\blx@alllastrefsections
+ % Special warning for defernumbers when a citation cannot be found
+ \iftoggle{blx@defernumbers}
+ {\def\blx@do@outer##1{%
+ \ifcsundef{blx@lastcites@##1}
+ {}
+ {\def\blx@do@inner####1{%
+ \ifinlistcs{####1}{blx@entries@##1}
+ {}
+ {\blx@warning@noline{%
+ citation '####1'\MessageBreak
+ was not found at all in the .bbl file,\MessageBreak
+ bibliography labels cannot be generated,\MessageBreak
+ please correct the citation}}}%
+ \forlistcsloop\blx@do@inner{blx@lastcites@##1}}}%
+ \forlistloop\blx@do@outer\blx@alllastrefsections}
+ {}}
+
+% {<entrykey>}
+% Get the saved information on which citations were mentioned last run
+\protected\def\abx@aux@cite#1#2{%
+ \xifinlistcs{\detokenize{#2}}{blx@prelim@lastcites@#1}
+ {}
+ {\listcsxadd{blx@prelim@lastcites@#1}{\detokenize{#2}}}}
+
+% {<refcontext>}
+% Get the saved information on which refcontexts were mentioned last run
+\protected\def\abx@aux@refcontext#1{%
+ \xifinlist{\detokenize{#1}}\blx@lastrefcontexts
+ {}
+ {\listxadd\blx@lastrefcontexts{\detokenize{#1}}}}
+
+% {<sortingtemplatename>}
+% Get the saved information on which shorthand sorting templates were mentioned last run
+\protected\def\abx@aux@biblist#1{%
+ \ifinlist{#1}\blx@lastbiblists
+ {}
+ {\listgadd\blx@lastbiblists{#1}}}
+
+% Here we mustn't change the checksum if we used localnumbers from the
+% .aux file as this means that deferred numbering is
+% complete. Otherwise we get in an endless rerun loop because the
+% checksum due to number changes is always different.
+\blx@AtEndDocument{%
+ \def\abx@aux@number#1#2#3#4#5{%
+ \ifblank{#5}
+ {}
+ {\nottoggle{blx@localnumber}
+ {\blx@addchecksum{#1}{#5}}
+ {}}}}
+
+\blx@AtEndDocument{%
+ % Here we run some tests to decide if we need to issue re-run
+ % messages in certain circumstances. In general, if we add/remove
+ % any citations or add/remove any sorting templates, we need to re-run
+ % biber. Also, if we have to re-run biber, we need to defer writing
+ % the defernumbers .aux information because it will not yet be correct.
+ \begingroup
+ % Test to see if there are any .aux entries with defernums (localnum)
+ % information which are no longer in the .bbl. This is to catch
+ % when .bib entries are removed when using \nocite{*}. In this case,
+ % We need another run to remove the .aux localnumber info
+ \def\blx@do@outer#1{%
+ \def\blx@do@inner##1{%
+ \xifinlistcs{##1}{blx@entries@#1}
+ {}
+ {\blx@rerun@latex
+ \listbreak}}%
+ \forlistloop\blx@do@inner\blx@localnumbers}%
+ \forlistloop\blx@do@outer\blx@allrefsections
+ % Test to see if we *removed* any citations since last run
+ % (adding citations is dealt with naturally in \blx@citation@entry)
+ % If so, give a rerun biber message. This also sets the
+ % rerun biber toggle so defernums doesn't consume the localnumbers
+ % in the .aux but instead, re-writes them, which is what we need.
+ \def\blx@do@outer#1{%
+ \ifcsundef{blx@lastcites@#1}
+ {}
+ {\def\blx@do@inner##1{%
+ \ifinlistcs{##1}{blx@cites@#1}
+ {}
+ {\blx@logreq@active{}%
+ \listbreak}}%
+ \forlistcsloop\blx@do@inner{blx@lastcites@#1}}}%
+ \forlistloop\blx@do@outer\blx@alllastrefsections
+ % Special case - if we are using sortingtemplate with \citeorder anywhere,
+ % then changes in citation order matter and we need to re-run biber.
+ % So a special test to see if the cites from last run are identical in order.
+ % We have already tested for more or less cites between runs by now, we are
+ % testing here for exactly the same cites by treating the cite and
+ % lastcite lists as strings and comparing them. This doesn't apply
+ % to biblist sortingtemplates as nobody wants to sort biblists with
+ % "none", since it makes no sense
+ \togglefalse{blx@tempa}%
+ \def\do#1{%
+ \ifcsundef{blx@sortingtemplate@citeorder@relevant@#1}
+ {}
+ {\toggletrue{blx@tempa}%
+ \listbreak}}%
+ \dolistloop\blx@sortingtemplatenames
+ \iftoggle{blx@tempa}
+ {\ifdefstrequal\blx@allrefsections\blx@alllastrefsections
+ {\def\do#1{%
+ \ifcsundef{blx@cites@#1}
+ {\cslet{blx@cites@#1}\@empty}
+ {}%
+ \ifcsundef{blx@lastcites@#1}
+ {\cslet{blx@lastcites@#1}\@empty}
+ {}%
+ \ifcsstrequal{blx@cites@#1}{blx@lastcites@#1}
+ {}
+ {\blx@logreq@active{}%
+ \listbreak}}%
+ \dolistloop\blx@allrefsections}
+ {\blx@logreq@active{}}}
+ {}%
+ % if citecount is enabled we pass the counter on to Biber via the bcf
+ % for sorting, we need to rerun if anything here changed
+ \ifundef\blx@citecounter
+ {}
+ {\def\blx@do@outer#1{%
+ \ifcsundef{blx@cites@#1}
+ {}
+ {\def\blx@do@inner##1{%
+ \ifnumequal{0\csuse{blx@currcount@#1@\detokenize{##1}}}
+ {0\csuse{blx@count@#1@\detokenize{##1}}}
+ {}
+ {\blx@logreq@active{}%
+ \listbreak}}%
+ \forlistcsloop\blx@do@inner{blx@cites@#1}}}%
+ \forlistloop\blx@do@outer\blx@allrefsections}%
+ % Test if we removed any mention of a reference context since last run
+ % If we did, we need to re-run biber
+ \def\do#1{\ifinlist{#1}\blx@refcontexts{}{\blx@logreq@active{}}\relax}%
+ \dolistloop\blx@lastrefcontexts
+ % Test if we added any mention of a reference context since last run
+ % If we did, we need to re-run biber
+ \def\do#1{\ifinlist{#1}\blx@lastrefcontexts{}{\blx@logreq@active{}}\relax}%
+ \dolistloop\blx@refcontexts
+ % Test if we removed any mention of a biblist since last run.
+ % If we did, we need to re-run biber
+ \def\do#1{\ifinlist{#1}\blx@biblists{}{\blx@logreq@active{}}\relax}%
+ \dolistloop\blx@lastbiblists
+ % Test to see if we added any mention of a biblist since last run.
+ % If we did, we need to re-run biber
+ \def\do#1{\ifinlist{#1}\blx@lastbiblists{}{\blx@logreq@active{}}\relax}%
+ \dolistloop\blx@biblists
+ % If we have to run biber or latex again and we are using defernumbers,
+ % don't write the localnumber information to the .aux file yet as we will
+ % potentially have to regenerate sorting order first in biber
+ \iftoggle{blx@defernumbers}
+ {\iftoggle{blx@runbiber}
+ {}
+ {\def\do#1{\blx@auxwrite\@mainaux{}{#1}}
+ \dolistloop\blx@localnumaux}}
+ {}%
+ % Write out missing languages we still need to load
+ \forlistloop{\blx@lbx@writeloaderequest}{\blx@lbx@loadlist}%
+ % Issue rerun warning if we need to load a language babel/polyglossia
+ % hasn't told us about and that we are not loading it already from previous
+ % runs.
+ \def\do#1{\xifinlist{#1}{\blx@lbx@auxloadlist}{}{\blx@rerun@latex\listbreak}}%
+ \dolistloop\blx@lbx@loadlist
+ % Write md5 hash of .bbl to .aux if we need a Biber rerun.
+ % This needs to happen here and not in \blx@check@rerun together with
+ % the other rerun stuff, because \AfterEndDocument would be too
+ % late for .aux file writing.
+ \blx@aux@write@bbl@mdfivesum
+ \endgroup}
+
+% {<instcount>}{<entrykey>}{<refsection>}{<refcontext>}{<labelnumber>}
+\protected\def\blx@aux@number#1#2#3#4#5{%
+ \blx@bbl@addentryfield{\detokenize{#2}}{#3}{localnumber}{#4}{#5}%
+ \blx@bbl@addentryfield{\detokenize{#2}}{#3}{labelnumber}{#4}{#5}%
+ \csgdef{blx@localnumber@#3@\detokenize{#2}}{#5}%
+ \xifinlistcs{\detokenize{#2}}{blx@localnumbers@#3}
+ {}
+ {\listcsxadd{blx@localnumbers@#3}{\detokenize{#2}}}%
+ \global\toggletrue{blx@localnumber}%
+ \ifblank{#5}
+ {}
+ {\csgdef{blx@labelnumber@#3}{#5}}}
+
+% Called as part of bib output for an entry
+% Only used when defernumbers=true
+\def\blx@addlabelnumber{%
+ \begingroup
+ \nottoggle{blx@skiplab}
+ {\iftoggle{blx@labelnumber}
+ {\ifundef\abx@field@@@shorthand
+ % Need to know if we set any localnumber from .aux file, not
+ % just current item. Otherwise, we may just write new
+ % localnumbers but not existing ones
+ % Also, don't want to regenerate localnumber for any key in a
+ % refsection which we've already seen because this has the nasty
+ % side-effect of incrementing the localnum counter
+ % Also, have to create localnumber again if \nocite{*} as items
+ % could have been added to the .bib file without changing the cite
+ % information in the .tex
+ {\ifboolexpr { (not togl {blx@localnumber}
+ or
+ test {\ifinlist{*}\blx@nocites})
+ and
+ not test {\ifcsdef{blx@defer@\the\c@refsection @\blx@refcontext@context @\abx@field@@@entrykey}} }
+ {\iftoggle{blx@omitnumbers}
+ {\let\abx@field@@@localnumber\@empty}
+ {\csnumgdef{blx@labelnumber@\the\c@refsection}{%
+ \csuse{blx@labelnumber@\the\c@refsection}+1}%
+ \edef\abx@field@@@localnumber{%
+ \csuse{blx@labelnumber@\the\c@refsection}}%
+ \blx@bbl@addentryfield{\abx@field@@@entrykey}{\the\c@refsection}%
+ {localnumber}{\blx@refcontext@context}{\abx@field@@@localnumber}}}
+ {}%
+ % Issue re-run message if there was no localnumber in the .aux and
+ % \nocite{*} was used because this means that an entry was added to the .bib
+ % and was not yet recorded in the .aux. We will have generated a localnumber
+ % for such a case above and now we need to re-run to make sure it's in the .aux
+ % for the next run
+ \ifboolexpr { test {\ifinlist{*}\blx@nocites}
+ and
+ not test {\ifcsdef{blx@localnumber@\the\c@refsection @\abx@field@@@entrykey}} }
+ {\blx@rerun@latex}
+ {}%
+ % If localnumbers were already in the .aux, add them
+ % again from the .aux. This prevents some cycling
+ % problems where pagebreaks change after localnumber
+ % settles down and then we need another run which then
+ % regenerates localnumber requiring another run but then
+ % the pagebreaks change back again ... etc.
+ \ifcsundef{blx@defer@\the\c@refsection @\blx@refcontext@context @\abx@field@@@entrykey}
+ {\ifundef\abx@field@@@localnumber
+ {}
+ {\listxadd\blx@localnumaux{%
+ \string\abx@aux@number%
+ {\the\c@instcount}%
+ {\abx@field@@@entrykey}%
+ {\the\c@refsection}%
+ {\blx@refcontext@context}%
+ {\abx@field@@@localnumber}}%
+ % record that we have already generated and output localnum
+ % for this key in this refsection/refcontext
+ \global\cslet{blx@defer@\the\c@refsection @\blx@refcontext@context @\abx@field@@@entrykey}\@empty}}
+ {}}
+ {}}%
+ {}}
+ {}%
+ \endgroup}
+
+% {<datalistname>}
+\def\blx@bbl@dlist[#1]#2{%
+ \begingroup
+ \def\blx@dlist@type{#1}%
+ \def\blx@dlist@name{#2}}
+
+\def\blx@bbl@enddlist{%
+ \csnumgdef{blx@labelnumber@\the\c@refsection}{0}%
+ \endgroup}
+
+\def\blx@addpageref#1{%
+ \begingroup
+ \blx@tempcnta\z@
+ \let\blx@tempa\@empty
+ \def\do##1{%
+ \appto\blx@tempa{{##1}}%
+ \advance\blx@tempcnta\@ne}%
+ \dolistcsloop{blx@pref@\the\c@refsection @#1}%
+ \edef\blx@tempa{\endgroup
+ \noexpand\blx@bbl@listdef{}{}{pageref}{\the\blx@tempcnta}{\expandonce{\blx@tempa}}}%
+ \blx@tempa}
+
+%% Data input
+\def\blx@bblinput{%
+ \begingroup
+ \blx@info@noline{Trying to load bibliographic data..}%
+ \blx@blxinit
+ \blx@bblfile
+ \endgroup}
+
+\def\blx@bblfile{%
+ \blx@secinit
+ \begingroup
+ \blx@bblstart
+ \blx@ifsigned{\jobname}{bbl}
+ {\InputIfFileExists{\jobname.bbl}
+ {\blx@info@noline{... file '\jobname.bbl' found}%
+ \global\toggletrue{blx@bbldone}%
+ \blx@generate@bbl@mdfivesum@found{\jobname.bbl}}
+ {\blx@info@noline{... file '\jobname.bbl' not found}%
+ \typeout{No file \jobname.bbl.}%
+ \blx@generate@bbl@mdfivesum@notfound}}
+ {\blx@generate@bbl@mdfivesum@notfound}%
+ \blx@bblend
+ \endgroup
+ % Check if Biber rerun was not carried out.
+ % If so, ask for it again.
+ \blx@check@bbl@rerun@mdfivesum
+ % global sorting as this is called at BeginDocument
+ \csnumgdef{blx@labelnumber@\the\c@refsection}{0}}
+
+%% Bibliography
+
+% {<name>}{<start code>}[<end code>]{<item code>}
+\newrobustcmd*{\defbibenvironment}[4]{%
+ \long\csdef{blx@env@#1}{#2}%
+ \long\csdef{blx@endenv@#1}{#3}%
+ \long\csdef{blx@item@#1}{#4}}
+
+\defbibenvironment{bibliography}
+ {\list{}{%
+ \leftmargin\bibhang
+ \itemindent-\leftmargin
+ \itemsep\bibitemsep
+ \parsep\bibparsep}}
+ {\endlist}
+ {\item}
+
+\def\do#1{%
+ \defbibenvironment{#1}
+ {\list{\thefield{#1}}{%
+ \labelwidth\csname #1width\endcsname
+ \labelsep\biblabelsep
+ \leftmargin\labelwidth
+ \advance\leftmargin\labelsep
+ \itemsep\bibitemsep
+ \parsep\bibparsep
+ \def\makelabel####1{####1\hss}}}
+ {\endlist}
+ {\item}}
+\abx@dolabelfields
+
+% {<name>}[<default>]{<code>}
+\newrobustcmd*{\defbibheading}[1]{%
+ \@ifnextchar[%]
+ {\blx@defbibheading{blx@head@#1}}
+ {\blx@defbibheading{blx@head@#1}[\bibname]}}
+
+\def\blx@defbibheading#1[#2]{%
+ \csundef{#1}%
+ \expandafter\newcommand\csname#1\endcsname[1][{#2}]}
+
+% {<name>}{<text>}
+\newrobustcmd*{\defbibnote}[1]{%
+ \blx@defbibnote{#1}}
+
+\long\def\blx@defbibnote#1#2{%
+ \long\csdef{blx@note@#1}{#2}}
+
+% {<name>}{<code>}
+\newrobustcmd*{\defbibfilter}[2]{%
+ \begingroup
+ \def\blx@flt@error{\csname blx@flt@errortrue\endcsname}%
+ \let\not\blx@flt@not \let\NOT\not
+ \let\and\blx@flt@and \let\AND\and
+ \let\or\blx@flt@or \let\OR\or
+ \letcs\({blx@flt@(} \letcs\){blx@flt@)}%
+ \def\section##1{\blx@flt@error}%
+ \def\segment##1{segment=##1}%
+ \def\type##1{type=##1}%
+ \def\subtype##1{subtype=##1}%
+ \def\keyword##1{keyword={##1}}%
+ \def\category##1{category={##1}}%
+ \edef\blx@tempa{\noexpand\blx@defbibfilter{#2}}%
+ \ifdef\blx@flt@errortrue
+ {\blx@err@filter}
+ {\let\the\relax
+ \let\blx@flt@item\relax
+ \edef\blx@tempa{\blx@tempa}%
+ \ifdef\blx@flt@errortrue
+ {\blx@err@filter}
+ {\csxdef{blx@filter@#1}{\blx@tempa}}}%
+ \endgroup}
+
+\def\blx@defbibfilter#1{%
+ \blx@defbibfilter@i#1 &}
+\def\blx@defbibfilter@i#1 #2&{%
+ \blx@defbibfilter@ii#1==&%
+ \ifblank{#2}{}{\blx@defbibfilter@i#2 &}}
+\def\blx@defbibfilter@ii#1=#2=#3&{%
+ \ifblank{#2}
+ {\ifblank{#1}
+ {}
+ {\ifcsdef{blx@flt@#1}
+ {\csname blx@flt@#1\endcsname}
+ {\blx@flt@error}}}
+ {\ifcsdef{blx@flt@#1}
+ {\csname blx@flt@#1\endcsname{\detokenize{#2}}}
+ {\blx@flt@error}}}
+
+\def\blx@flt@and{ and }
+\def\blx@flt@or{ or }
+\def\blx@flt@not{ not }
+\csdef{blx@flt@(}{ ( }
+\csdef{blx@flt@)}{ ) }
+\def\blx@flt@segment#1{%
+ test {\xifinlistcs\blx@flt@item{blx@segm@\the\c@refsection @#1}}}
+\def\blx@flt@type#1{%
+ test {\xifinlistcs\blx@flt@item{blx@type@\the\c@refsection @#1}}}
+\def\blx@flt@subtype#1{%
+ test {\xifinlistcs\blx@flt@item{blx@subt@\the\c@refsection @#1}}}
+\def\blx@flt@keyword#1{%
+ test {\xifinlistcs\blx@flt@item{blx@keyw@\the\c@refsection @#1}}}
+\def\blx@flt@category#1{%
+ test {\xifinlistcs\blx@flt@item{blx@catg@#1}}}
+
+% {<name>}{<code>}
+\newrobustcmd*{\defbibcheck}[2]{%
+ \csdef{blx@bibcheck@#1}{%
+ \togglefalse{blx@skipentry}%
+ \def\skipentry{\toggletrue{blx@skipentry}}%
+ #2\undef\skipentry}}
+
+% options
+% We need a 2-pass structure for options in \printbibliography and
+% \printbiblist because the section has to be set before any
+% other options and this partly determines which list to use for later filtering
+\blx@kv@defkey{blx@bib1}{segment}{}
+\blx@kv@defkey{blx@bib1}{type}{}
+\blx@kv@defkey{blx@bib1}{nottype}{}
+\blx@kv@defkey{blx@bib1}{subtype}{}
+\blx@kv@defkey{blx@bib1}{notsubtype}{}
+\blx@kv@defkey{blx@bib1}{keyword}{}
+\blx@kv@defkey{blx@bib1}{notkeyword}{}
+\blx@kv@defkey{blx@bib1}{category}{}
+\blx@kv@defkey{blx@bib1}{notcategory}{}
+\blx@kv@defkey{blx@bib1}{filter}{}
+\blx@kv@defkey{blx@bib1}{check}{}
+\blx@kv@defkey{blx@bib1}{heading}{}
+\blx@kv@defkey{blx@bib1}{env}{}
+\blx@kv@defkey{blx@bib1}{title}{}
+\blx@kv@defkey{blx@bib1}{label}{}
+\blx@kv@defkey{blx@bib1}{prenote}{}
+\blx@kv@defkey{blx@bib1}{postnote}{}
+\blx@kv@defkey{blx@bib1}{omitnumbers}[]{}
+% Here we are using the first pass to see if there is an explicit setting for resetnumbers
+% If there isn't we will use the default behaviour where if there is a labelprefix,
+% resetnumbers will default to "true"
+\blx@kv@defkey{blx@bib1}{resetnumbers}[true]{%
+ \toggletrue{blx@resetnumsexplicit}}
+
+\blx@kv@defkey{blx@bib2}{section}{}
+\blx@kv@defkey{blx@bib2}{sorting}{}
+
+\blx@kv@defkey{blx@biblist1}{segment}{}
+\blx@kv@defkey{blx@biblist1}{type}{}
+\blx@kv@defkey{blx@biblist1}{nottype}{}
+\blx@kv@defkey{blx@biblist1}{subtype}{}
+\blx@kv@defkey{blx@biblist1}{notsubtype}{}
+\blx@kv@defkey{blx@biblist1}{keyword}{}
+\blx@kv@defkey{blx@biblist1}{notkeyword}{}
+\blx@kv@defkey{blx@biblist1}{category}{}
+\blx@kv@defkey{blx@biblist1}{notcategory}{}
+\blx@kv@defkey{blx@biblist1}{filter}{}
+\blx@kv@defkey{blx@biblist1}{check}{}
+\blx@kv@defkey{blx@biblist1}{heading}{}
+\blx@kv@defkey{blx@biblist1}{env}{}
+\blx@kv@defkey{blx@biblist1}{title}{}
+\blx@kv@defkey{blx@biblist1}{label}{}
+\blx@kv@defkey{blx@biblist1}{prenote}{}
+\blx@kv@defkey{blx@biblist1}{postnote}{}
+
+\blx@kv@defkey{blx@biblist2}{section}{}
+\blx@kv@defkey{blx@biblist2}{sorting}{}
+
+\blx@kv@defkey{blx@bib1}{section}{%
+ \ifcsundef{blx@sections@#1}
+ {\blx@err@nosec{#1}}
+ {\c@refsection#1\relax
+ \def\blx@tempe{#1}}}
+
+\blx@kv@defkey{blx@biblist1}{section}{%
+ \ifcsundef{blx@sections@#1}
+ {\blx@err@nosec{#1}}
+ {\c@refsection#1\relax
+ \def\blx@tempe{#1}}}
+
+\blx@kv@defkey{blx@bbg}{section}{%
+ \ifcsundef{blx@sections@#1}
+ {\blx@err@nosec{#1}}
+ {\c@refsection#1\relax}}
+
+\blx@kv@defkey{blx@bbc}{section}{%
+ \ifcsundef{blx@sections@#1}
+ {\blx@err@nosec{#1}}
+ {\c@refsection#1\relax}}
+
+\blx@kv@defkey{blx@bib2}{segment}{\blx@key@segment{#1}}
+\blx@kv@defkey{blx@biblist2}{segment}{\blx@key@segment{#1}}
+
+\def\blx@key@segment#1{%
+ \ifcsundef{blx@segm@\the\c@refsection @#1}
+ {\blx@warning{Segment '#1' not found in section '\the\c@refsection'}}
+ {\c@refsegment#1\relax
+ \blx@printbibchecks
+ \blx@filter\blx@tempa{blx@segm@\the\c@refsection @#1}}}
+
+\blx@kv@defkey{blx@bib2}{type}{\blx@key@type{#1}}
+\blx@kv@defkey{blx@biblist2}{type}{\blx@key@type{#1}}
+
+\def\blx@key@type#1{%
+ \ifcsundef{blx@type@\the\c@refsection @#1}
+ {\blx@warning{Type '#1' not found}%
+ \let\blx@tempa\@empty}
+ {\blx@printbibchecks
+ \iftoggle{blx@tempb}
+ {\togglefalse{blx@tempb}%
+ \blx@filter\blx@tempa{blx@type@\the\c@refsection @#1}}
+ {\let\blx@tempa\@empty
+ \blx@error
+ {'type' used multiple times}
+ {When passing multiple filter options, each entry\MessageBreak
+ must satisfy all conditions (AND conjunction),\MessageBreak
+ hence some options may not be used twice.\MessageBreak
+ Use 'filter' and '\string\defbibfilter' with OR conjunctions}}}}
+
+\blx@kv@defkey{blx@bib2}{nottype}{\blx@key@nottype{#1}}
+\blx@kv@defkey{blx@biblist2}{nottype}{\blx@key@nottype{#1}}
+
+\def\blx@key@nottype#1{%
+ \ifcsundef{blx@type@\the\c@refsection @#1}
+ {}
+ {\blx@printbibchecks
+ \blx@notfilter\blx@tempa{blx@type@\the\c@refsection @#1}}}
+
+\blx@kv@defkey{blx@bib2}{subtype}{\blx@key@subtype{#1}}
+\blx@kv@defkey{blx@biblist2}{subtype}{\blx@key@subtype{#1}}
+
+\def\blx@key@subtype#1{%
+ \ifcsundef{blx@subt@\the\c@refsection @#1}
+ {\blx@warning{Subtype '#1' not found}%
+ \let\blx@tempa\@empty}
+ {\blx@printbibchecks
+ \iftoggle{blx@tempb}
+ {\togglefalse{blx@tempb}%
+ \blx@filter\blx@tempa{blx@subt@\the\c@refsection @#1}}
+ {\let\blx@tempa\@empty
+ \blx@error
+ {'subtype' used multiple times}
+ {When passing multiple filter options, each entry\MessageBreak
+ must satisfy all conditions (AND conjunction),\MessageBreak
+ hence some options may not be used twice.\MessageBreak
+ Use 'filter' and '\string\defbibfilter' with OR conjunctions}}}}
+
+\blx@kv@defkey{blx@bib2}{notsubtype}{\blx@key@notsubtype{#1}}
+\blx@kv@defkey{blx@biblist2}{notsubtype}{\blx@key@notsubtype{#1}}
+
+\def\blx@key@notsubtype#1{%
+ \ifcsundef{blx@subt@\the\c@refsection @#1}
+ {}
+ {\blx@printbibchecks
+ \blx@notfilter\blx@tempa{blx@subt@\the\c@refsection @#1}}}
+
+\blx@kv@defkey{blx@bib2}{keyword}{\blx@key@keyword{#1}}
+\blx@kv@defkey{blx@biblist2}{keyword}{\blx@key@keyword{#1}}
+
+\def\blx@key@keyword#1{%
+ \ifcsundef{blx@keyw@\the\c@refsection @\detokenize{#1}}
+ {\blx@warning{Keyword '\detokenize{#1}' not found}%
+ \let\blx@tempa\@empty}
+ {\blx@printbibchecks
+ \blx@filter\blx@tempa{blx@keyw@\the\c@refsection @\detokenize{#1}}}}
+
+\blx@kv@defkey{blx@bib2}{notkeyword}{\blx@key@notkeyword{#1}}
+\blx@kv@defkey{blx@biblist2}{notkeyword}{\blx@key@notkeyword{#1}}
+
+\def\blx@key@notkeyword#1{%
+ \ifcsundef{blx@keyw@\the\c@refsection @\detokenize{#1}}
+ {}
+ {\blx@printbibchecks
+ \blx@notfilter\blx@tempa{blx@keyw@\the\c@refsection @\detokenize{#1}}}}
+
+\blx@kv@defkey{blx@bib2}{category}{\blx@key@category{#1}}
+\blx@kv@defkey{blx@biblist2}{category}{\blx@key@category{#1}}
+
+\def\blx@key@category#1{%
+ \ifcsundef{blx@catg@\detokenize{#1}}
+ {\blx@warning{Category '\detokenize{#1}' not found}%
+ \let\blx@tempa\@empty}
+ {\blx@printbibchecks
+ \blx@filter\blx@tempa{blx@catg@\detokenize{#1}}}}
+
+\blx@kv@defkey{blx@bib2}{notcategory}{\blx@key@notcategory{#1}}
+\blx@kv@defkey{blx@biblist2}{notcategory}{\blx@key@notcategory{#1}}
+
+\def\blx@key@notcategory#1{%
+ \ifcsundef{blx@catg@#1}
+ {}
+ {\blx@printbibchecks
+ \blx@notfilter\blx@tempa{blx@catg@#1}}}
+
+\blx@kv@defkey{blx@bib2}{filter}{\blx@key@filter{#1}}
+\blx@kv@defkey{blx@biblist2}{filter}{\blx@key@filter{#1}}
+
+\def\blx@key@filter#1{%
+ \ifcsdef{blx@filter@#1}
+ {\blx@printbibchecks
+ \blx@bibfilter\blx@tempa{blx@filter@#1}}
+ {\let\blx@tempa\@empty
+ \blx@error
+ {Filter '#1' not found}
+ {The filter '#1' could not be found.\MessageBreak
+ Use \string\defbibfilter\space to define it}}}
+
+\blx@kv@defkey{blx@bib2}{check}{\blx@key@bibcheck{#1}}
+\blx@kv@defkey{blx@biblist2}{check}{\blx@key@bibcheck{#1}}
+
+% empty bibcheck does nothing
+\cslet{blx@bibcheck@}\relax
+\def\blx@key@bibcheck#1{%
+ \ifcsdef{blx@bibcheck@#1}
+ {\letcs\blx@bibcheck{blx@bibcheck@#1}}
+ {\let\blx@tempa\@empty
+ \blx@error
+ {Check '#1' not found}
+ {The check '#1' could not be found.\MessageBreak
+ Use \string\defbibcheck\space to define it}}}
+
+\def\blx@default@theheading{bibliography}
+\blx@kv@defkey{blx@bibdefaults}{heading}{%
+ \blx@key@heading{\blx@default@theheading}{#1}}
+\blx@kv@defkey{blx@bhd}{heading}{%
+ \blx@key@heading{\blx@theheading}{#1}}
+\blx@kv@defkey{blx@bib2}{heading}{%
+ \blx@key@heading{\blx@theheading}{#1}}
+\blx@kv@defkey{blx@biblist2}{heading}{%
+ \blx@key@heading{\blx@theheading}{#1}}
+\blx@kv@defkey{blx@bbs}{heading}{%
+ \blx@key@heading{\blx@theheading}{#1}}
+\blx@kv@defkey{blx@bbg}{heading}{%
+ \blx@key@heading{\blx@theheading}{#1}}
+
+\def\blx@key@heading#1#2{%
+ \ifcsundef{blx@head@#2}
+ {\blx@error
+ {Heading '#2' not found}
+ {The heading '#2' could not be found.\MessageBreak
+ Use \string\defbibheading\space to define it}}
+ {\def#1{#2}}}
+
+\def\blx@default@theenv{bibliography}
+\blx@kv@defkey{blx@bibdefaults}{env}{%
+ \blx@key@env{\blx@default@theenv}{#1}}
+\blx@kv@defkey{blx@bib2}{env}{\blx@key@env{\blx@theenv}{#1}}
+\blx@kv@defkey{blx@biblist2}{env}{\blx@key@env{\blx@theenv}{#1}}
+\blx@kv@defkey{blx@bbs}{env}{\blx@key@env{\blx@theenv}{#1}}
+\blx@kv@defkey{blx@bbg}{env}{\blx@key@env{\blx@theenv}{#1}}
+\blx@kv@defkey{blx@bbc}{env}{\blx@key@env{\blx@theenv}{#1}}
+
+\def\blx@key@env#1#2{%
+ \ifcsundef{blx@env@#2}
+ {\blx@error
+ {Environment '#2' not found}
+ {The environment '#2' could not be found.\MessageBreak
+ Use \string\defbibenvironment\space to define it}}
+ {\def#1{#2}}}
+
+\let\blx@default@thetitle\@empty
+\blx@kv@defkey{blx@bibdefaults}{title}{%
+ \def\blx@default@thetitle{#1}}
+\blx@kv@defkey{blx@bhd}{title}{\def\blx@thetitle{#1}}
+\blx@kv@defkey{blx@bib2}{title}{\def\blx@thetitle{#1}}
+\blx@kv@defkey{blx@biblist2}{title}{\def\blx@thetitle{#1}}
+
+\blx@kv@defkey{blx@bhd}{label}{\def\blx@thelabel{#1}}
+\blx@kv@defkey{blx@bib2}{label}{\def\blx@thelabel{#1}}
+\blx@kv@defkey{blx@biblist2}{label}{\def\blx@thelabel{#1}}
+
+\cslet{blx@note@}\@empty
+\def\blx@key@bibnote#1#2{%
+ \ifcsundef{blx@note@#2}
+ {\blx@error
+ {Note '#2' not found}
+ {The note '#2' could not be found.\MessageBreak
+ Use \string\defbibnote\space to define it}}
+ {\def#1{#2}}}
+
+\let\blx@default@theprenote\@empty
+\blx@kv@defkey{blx@bibdefaults}{prenote}{%
+ \blx@key@bibnote{\blx@default@theprenote}{#1}}
+\blx@kv@defkey{blx@bib2}{prenote}{%
+ \blx@key@bibnote{\blx@theprenote}{#1}}
+\blx@kv@defkey{blx@biblist2}{prenote}{%
+ \blx@key@bibnote{\blx@theprenote}{#1}}
+\blx@kv@defkey{blx@bbs}{prenote}{%
+ \blx@key@bibnote{\blx@theprenote}{#1}}
+\blx@kv@defkey{blx@bbg}{prenote}{%
+ \blx@key@bibnote{\blx@theprenote}{#1}}
+\blx@kv@defkey{blx@bbc}{prenote}{%
+ \blx@key@bibnote{\blx@theprenote}{#1}}
+
+\let\blx@default@thepostnote\@empty
+\blx@kv@defkey{blx@bibdefaults}{postnote}{%
+ \blx@key@bibnote{\blx@default@thepostnote}{#1}}
+\blx@kv@defkey{blx@bib2}{postnote}{%
+ \blx@key@bibnote{\blx@thepostnote}{#1}}
+\blx@kv@defkey{blx@biblist2}{postnote}{%
+ \blx@key@bibnote{\blx@thepostnote}{#1}}
+\blx@kv@defkey{blx@bbs}{postnote}{%
+ \blx@key@bibnote{\blx@thepostnote}{#1}}
+\blx@kv@defkey{blx@bbg}{postnote}{%
+ \blx@key@bibnote{\blx@thepostnote}{#1}}
+\blx@kv@defkey{blx@bbc}{postnote}{%
+ \blx@key@bibnote{\blx@thepostnote}{#1}}
+
+
+\blx@kv@defkey{blx@bibdefaults}{locallabelwidth}{%
+ \blx@key@locallabelwidth{#1}}
+\blx@kv@defkey{blx@bib1}{locallabelwidth}[]{}
+\blx@kv@defkey{blx@biblist1}{locallabelwidth}[]{}
+\blx@kv@defkey{blx@bib2}{locallabelwidth}[true]{%
+ \blx@key@locallabelwidth{#1}}
+\blx@kv@defkey{blx@biblist2}{locallabelwidth}[true]{%
+ \blx@key@locallabelwidth{#1}}
+
+\def\blx@key@locallabelwidth#1{%
+ \ifstrequal{#1}{true}
+ {\let\blx@locallabelwidth@init\blx@locallabelwidth@setlengths
+ \let\blx@locallabelwidth@finish\blx@locallabelwidth@write}
+ {\let\blx@locallabelwidth@init\relax
+ \let\blx@locallabelwidth@finish\relax}}
+
+\blx@kv@defkey{blx@bib2}{resetnumbers}[true]{%
+ \iftoggle{blx@defernumbers}
+ {\ifstrequal{#1}{true}
+ {\csnumdef{blx@labelnumber@\the\c@refsection}{0}}
+ {\ifstrequal{#1}{false}
+ {}
+ {\csnumdef{blx@labelnumber@\the\c@refsection}{#1-1}}}}
+ {\blx@warning{%
+ Option 'resetnumbers' requires 'defernumbers=true'.\MessageBreak
+ Ignoring 'resetnumbers=true'}}}
+
+\blx@kv@defkey{blx@bib2}{omitnumbers}[true]{%
+ \ifstrequal{#1}{true}
+ {\iftoggle{blx@defernumbers}
+ {\toggletrue{blx@omitnumbers}}
+ {\blx@warning{%
+ Option 'omitnumbers' requires 'defernumbers=true'.\MessageBreak
+ Ignoring 'omitnumbers=true'}}}
+ {}}
+
+
+\newrobustcmd*{\DeclarePrintbibliographyDefaults}{%
+ \blx@kv@setkeys{blx@bibdefaults}}
+
+% [<options>]
+\newrobustcmd*{\printbibheading}{%
+ \begingroup
+ \edef\on@line{\on@line}%
+ \@ifnextchar[%]
+ {\blx@printbibheading}
+ {\blx@printbibheading[]}}
+
+\def\blx@printbibheading[#1]{%
+ \let\blx@theheading\blx@default@theheading
+ \let\blx@thetitle\blx@default@thetitle
+ \undef\blx@thelabel
+ \blx@safe@actives
+ \blx@kv@setkeys{blx@bhd}{#1}%
+ \blx@rest@actives
+ \blx@bibheading\blx@theheading\blx@thetitle
+ \blx@biblabel\blx@thelabel
+ \endgroup}
+
+% We use this to determine whether an explicit value for resetnumbers is passed to
+% \printbibliography, if not, then we use the default behaviour where a labelprefix forces
+% a reset. It is useful that we have a 2-pass structure for \printbibliography keys anyway.
+\newtoggle{blx@resetnumsexplicit}
+
+% [<options>]
+\newrobustcmd*{\printbibliography}{%
+ \begingroup
+ \delimcontext{bib}%
+ \edef\on@line{\on@line}%
+ \@ifnextchar[%]
+ {\blx@printbibliography}
+ {\blx@printbibliography[]}}
+
+\def\blx@printbibliography[#1]{%
+ \toggletrue{blx@tempa}%
+ \toggletrue{blx@tempb}%
+ \let\blx@theheading\blx@default@theheading
+ \let\blx@theenv\blx@default@theenv
+ \let\blx@theprenote\blx@default@theprenote
+ \let\blx@thepostnote\blx@default@thepostnote
+ \let\blx@thetitle\blx@default@thetitle
+ \undef\blx@thelabel
+ % defaults
+ \let\blx@tempa\@empty% before there is a .bbl, this must not be undef
+ \edef\blx@tempe{\the\c@refsection}% default refsection is current
+ \blx@safe@actives
+ \togglefalse{blx@resetnumsexplicit}%
+ \blx@kv@setkeys{blx@bib1}{#1}% First pass options keys - section and resetnumbers
+ % Is there a user-specified option for resetnumbers? If so, this overrides the default
+ % "labelprefix implies resetnumbers" behaviour
+ \iftoggle{blx@resetnumsexplicit}
+ {}
+ {\ifdefempty\blx@refcontext@labelprefix
+ {\ifdefempty\blx@refcontext@labelprefix@real}
+ {\@secondoftwo}
+ {}
+ {\blx@kv@setkeys{blx@bib2}{resetnumbers}}}%
+ \blx@rest@actives
+ \ifcsvoid{blx@dlist@entry@\blx@tempe @\blx@refcontext@context}
+ {}
+ {\letcs\blx@tempa{blx@dlist@entry@\blx@tempe @\blx@refcontext@context}}%
+ \blx@safe@actives
+ % Must reset omitnumbers as it's a global macro and if we don't, any
+ % \printbibliography following one with this set will inherit any
+ % previous "true" value
+ \togglefalse{blx@omitnumbers}%
+ \blx@kv@setkeys{blx@bib2}{#1}% ... now we have correct \blx@tempa, set rest of options
+ \blx@rest@actives
+ % Add datalist to list of seen datalists to prevent duplicates
+ \xifinlist{\blx@refcontext@context @\blx@tempe @entry}\blx@dlistnames
+ {}
+ {\listxadd\blx@dlistnames{\blx@refcontext@context @\blx@tempe @entry}%
+ \xappto\blx@dlists{%
+ \blx@xml@dlist{\blx@refcontext@context}{entry}{\blx@tempe}{\blx@xml@dlist@refcontext{\blx@refcontext@sortingtemplatename}{\blx@refcontext@sortingnamekeytemplatename}{\blx@refcontext@labelprefix@real}{\blx@refcontext@uniquenametemplatename}{\blx@refcontext@labelalphanametemplatename}}{}}}%
+ \ifdefvoid\blx@tempa
+ {\blx@warn@bibempty\endgroup}
+ {\blx@bibliography\blx@tempa}}
+
+% [<options>]
+\newrobustcmd*{\bibbysection}{%
+ \begingroup
+ \delimcontext{bib}%
+ \ifnum\c@blx@maxsection=\z@
+ \blx@warning{No reference sections found}%
+ \fi
+ \edef\on@line{\on@line}%
+ \@ifnextchar[%]
+ {\blx@bibbysection}
+ {\blx@bibbysection[]}}
+
+\def\blx@bibbysection[#1]{%
+ \let\blx@theheading\blx@default@theheading
+ \let\blx@theenv\blx@default@theenv
+ \let\blx@theprenote\blx@default@theprenote
+ \let\blx@thepostnote\blx@default@thepostnote
+ \let\blx@thetitle\blx@default@thetitle
+ \undef\blx@thelabel
+ \c@refsection\z@
+ \blx@safe@actives
+ \blx@kv@setkeys{blx@bbs}{#1}%
+ \blx@rest@actives
+ \togglefalse{blx@tempa}%
+ \blx@refsections}
+
+\def\blx@refsections{%
+ \ifcsvoid{blx@dlist@entry@\the\c@refsection @\blx@refcontext@context}
+ {}
+ {\toggletrue{blx@tempa}%
+ \begingroup
+ \expandafter\blx@bibliography\csname blx@dlist@entry@\the\c@refsection @\blx@refcontext@context\endcsname}%
+ \ifnum\c@refsection<\c@blx@maxsection
+ \advance\c@refsection\@ne
+ \expandafter\blx@refsections
+ \else
+ \iftoggle{blx@tempa}{}{\blx@warn@bibempty}%
+ \endgroup
+ \fi}
+
+% [<options>]
+\newrobustcmd*{\bibbysegment}{%
+ \begingroup
+ \delimcontext{bib}%
+ \edef\on@line{\on@line}%
+ \ifnum\csname blx@maxsegment@\the\c@refsection\endcsname=\z@
+ \blx@warning{No reference segments found}%
+ \fi
+ \@ifnextchar[%]
+ {\blx@bibbysegment}
+ {\blx@bibbysegment[]}}
+
+\def\blx@bibbysegment[#1]{%
+ \let\blx@theheading\blx@default@theheading
+ \let\blx@theenv\blx@default@theenv
+ \let\blx@theprenote\blx@default@theprenote
+ \let\blx@thepostnote\blx@default@thepostnote
+ \let\blx@thetitle\blx@default@thetitle
+ \undef\blx@thelabel
+ \c@refsegment\@ne
+ \blx@safe@actives
+ \blx@kv@setkeys{blx@bbg}{#1}%
+ \blx@rest@actives
+ \togglefalse{blx@tempa}%
+ \blx@refsegments}
+
+\def\blx@refsegments{%
+ \ifcsvoid{blx@segm@\the\c@refsection @\the\c@refsegment}
+ {}
+ {\toggletrue{blx@tempa}%
+ \begingroup
+ \let\blx@tempa\@empty
+ \ifcsvoid{blx@dlist@entry@\the\c@refsection @\blx@refcontext@context}
+ {}
+ {\letcs\blx@tempa{blx@dlist@entry@\the\c@refsection @\blx@refcontext@context}}%
+ \blx@filter\blx@tempa{blx@segm@\the\c@refsection @\the\c@refsegment}%
+ \blx@bibliography\blx@tempa}%
+ \ifnum\c@refsegment<\csname blx@maxsegment@\the\c@refsection\endcsname
+ \advance\c@refsegment\@ne
+ \expandafter\blx@refsegments
+ \else
+ \iftoggle{blx@tempa}{}{\blx@warn@bibempty}%
+ \endgroup
+ \fi}
+
+% [<options>]
+\newrobustcmd*{\bibbycategory}{%
+ \begingroup
+ \delimcontext{bib}%
+ \edef\on@line{\on@line}%
+ \ifx\blx@categories\@empty
+ \blx@warning{No categories found}%
+ \fi
+ \@ifnextchar[%]
+ {\blx@bibbycategory}
+ {\blx@bibbycategory[]}}
+
+\def\blx@bibbycategory[#1]{%
+ \let\blx@theheading\blx@default@theheading
+ \let\blx@theenv\blx@default@theenv
+ \let\blx@theprenote\blx@default@theprenote
+ \let\blx@thepostnote\blx@default@thepostnote
+ \let\blx@thetitle\blx@default@thetitle
+ \undef\blx@thelabel
+ \c@refsection\z@
+ \blx@safe@actives
+ \blx@kv@setkeys{blx@bbc}{#1}%
+ \blx@rest@actives
+ \togglefalse{blx@tempa}%
+ \forlistloop\blx@bibcategory\blx@categories
+ \blx@endbibcategory}
+
+\def\blx@bibcategory#1{%
+ \ifcsvoid{blx@catg@#1}
+ {}
+ {\toggletrue{blx@tempa}%
+ \begingroup
+ \blx@key@heading{\blx@theheading}{#1}%
+ \let\blx@tempa\@empty
+ \ifcsvoid{blx@dlist@entry@\the\c@refsection @\blx@refcontext@context}
+ {}
+ {\letcs\blx@tempa{blx@dlist@entry@\the\c@refsection @\blx@refcontext@context}}%
+ \blx@filter\blx@tempa{blx@catg@#1}%
+ \blx@bibliography\blx@tempa}}%
+
+\def\blx@endbibcategory{%
+ \iftoggle{blx@tempa}{}{\blx@warn@bibempty}%
+ \endgroup}
+
+% {<entrykey>,...}
+\def\blx@bibliography{%
+ \blx@bibheading\blx@theheading\blx@thetitle
+ \blx@biblabel\blx@thelabel
+ \blx@bibnote\blx@theprenote
+ \begingroup
+ \blx@bibinit
+ \let\@noitemerr\@empty
+ \let\blx@noitem\blx@warn@bibempty
+ \ifnum\bibinitsep=\z@
+ \let\blx@initsep\relax
+ \fi
+ \ifnum\bibnamesep=\z@
+ \let\blx@namesep\relax
+ \fi
+ \blx@locallabelwidth@init
+ \csuse{blx@env@\blx@theenv}%
+ \csuse{blx@hook@bibinit}%
+ \csuse{blx@hook@bibinit@next}%
+ \let\blx@do\blx@bibitem
+ \let\blx@done\blx@endbibliography
+ \blx@listloop}
+
+\def\blx@endbibliography{%
+ \csuse{blx@endenv@\blx@theenv}%
+ \blx@noitem
+ \blx@locallabelwidth@finish
+ \endgroup
+ \blx@bibnote\blx@thepostnote
+ \endgroup}
+
+\def\blx@bibheading#1#2{%
+ \begingroup
+ \edef\blx@tempa{\endgroup
+ \noexpand\blx@bibheading@i{\expandonce#1}{\expandonce#2}}%
+ \blx@tempa}
+
+\def\blx@bibheading@i#1#2{%
+ \let\newrefsection\relax
+ \let\newrefsegment\relax
+ \ifblank{#2}
+ {\csuse{blx@head@#1}}
+ {\csuse{blx@head@#1}[{#2}]}%
+ \let\newrefsection\blx@newrefsection
+ \let\newrefsegment\blx@newrefsegment}
+
+\def\blx@biblabel#1{%
+ \ifdefvoid#1
+ {}
+ {\expandafter\label\expandafter{#1}}}
+
+\def\blx@bibnote#1{%
+ \ifdefempty#1
+ {}
+ {\begingroup
+ \let\newrefsection\relax
+ \let\newrefsegment\relax
+ \noindent
+ \csuse{blx@note@#1}\par\nobreak
+ \endgroup}}
+
+\def\blx@bibinit{%
+ \iftoggle{blx@citation}
+ {}
+ {\toggletrue{blx@bibliography}}%
+ \blx@blxinit
+ \blx@resetdata
+ \csuse{blx@hook@bbxinit}%
+ \bibsetup\bibfont
+ \blx@setsfcodes
+ \csuse{blx@bibsetup}}
+
+% {<entrykey>}
+% output a bib item, this is why \blx@thelabelnumber is here so that
+% labelnumber is deferred if defernumbers=true
+\def\blx@bibitem#1{%
+ \blx@ifdata{#1}
+ {\begingroup
+ \blx@getdata{#1}%
+ \blx@bibcheck
+ \iftoggle{blx@skipentry}{}{%
+ \blx@setdefaultrefcontext{#1}%
+ \global\let\blx@noitem\@empty
+ \blx@setoptions@type\abx@field@@@entrytype
+ \blx@setoptions@entry
+ \blx@thelabelnumber
+ \addtocounter{instcount}\@ne
+ \iftoggle{blx@labelnumber}
+ {\blx@bbl@locallabelnumberwidth}
+ {}%
+ \iftoggle{blx@labelalpha}
+ {\blx@bbl@locallabelalphawidth}
+ {}%
+ \nottoggle{blx@skipbiblist}
+ {\blx@bbl@locallabelfields}
+ {}%
+ \csuse{blx@item@\blx@theenv}\relax
+ \blx@initsep
+ \blx@namesep
+ \csuse{blx@hook@bibitem}%
+ \blx@execute
+ \blx@initunit
+ \blx@anchor
+ \blx@beglangbib
+ \bibsentence
+ \blx@pagetracker
+ \blx@driver\abx@field@@@entrytype
+ \blx@postpunct
+ \blx@endlangbib}%
+ \endgroup}
+ {}}
+
+\let\blx@bibcheck\relax
+
+\def\blx@edef@refcontext#1{%
+ \edef\blx@refcontext@context{#1}%
+ \expandafter\edef\expandafter\blx@refcontext@context\expandafter{%
+ \expandafter\detokenize\expandafter{\blx@refcontext@context}}}
+
+\def\blx@xdef@refcontext#1{%
+ \edef\blx@refcontext@context{#1}%
+ \expandafter\xdef\expandafter\blx@refcontext@context\expandafter{%
+ \expandafter\detokenize\expandafter{\blx@refcontext@context}}}
+
+
+% This sets and saves to the .aux the default refcontext for an entry. The
+% default refcontext for an entry is the refcontext of the last
+% bibliography in the refsection in which it is actually printed. This
+% allows citations to default to selecting data from the correct
+% bibliography list in standard cases where entries are not listed in
+% multiple bibliographies
+\def\blx@setdefaultrefcontext#1{%
+ \ifinlistcs{#1}{blx@defaultrefcontexts@\the\c@refsection}
+ {}
+ {\listcsgadd{blx@defaultrefcontexts@\the\c@refsection}{#1}}%
+ \global\cslet{blx@assignedrefcontextbib@\the\c@refsection @#1}%
+ \blx@refcontext@context}
+% <refsection><key><refcontext>
+\def\abx@aux@defaultrefcontext#1#2#3{%
+ \csxdef{blx@assignedrefcontextbib@aux@#1@#2}{\detokenize{#3}}}
+% \abx@aux@defaultlabelprefix is a dummy only used by BibTeX to implement a
+% simple labelprefix not based on full refcontexts, which BibTeX does not
+% support.
+\let\abx@aux@defaultlabelprefix\@gobblethree
+
+\blx@AtEndDocument{%
+ % always add default refcontext declarations to .aux after biber run
+ \iftoggle{blx@bbldone}
+ {\def\do#1{%
+ \begingroup
+ \def\do##1{%
+ \blx@auxwrite\@mainaux{}{\string\abx@aux@defaultrefcontext{#1}{##1}{%
+ \csuse{blx@assignedrefcontextbib@#1@##1}}}%
+ \ifcsequal{blx@assignedrefcontextbib@#1@##1}
+ {blx@assignedrefcontextbib@aux@#1@##1}
+ {}
+ {\blx@rerun@latex}}%
+ \dolistcsloop{blx@defaultrefcontexts@#1}%
+ \endgroup}
+ \dolistloop\blx@allrefsections}
+ {}}
+
+\def\blx@initsep{%
+ \blx@imc@iffieldundef{sortinithash}
+ {}
+ {\ifnum\c@instcount>\@ne
+ \blx@imc@iffieldequals{sortinithash}\blx@previnithash
+ {}
+ {\addvspace{\bibinitsep}}%
+ \fi
+ \global\let\blx@previnithash\abx@field@@@sortinithash}}
+
+\def\blx@namesep{%
+ \ifnum\c@instcount>\@ne
+ \blx@imc@iffieldequals{fullhash}\blx@prevhash
+ {}
+ {\addvspace{\bibnamesep}}%
+ \fi
+ \global\let\blx@prevhash\abx@field@@@fullhash}
+
+\newrobustcmd*{\AtBeginBibliography}{\gappto\blx@hook@bibinit}
+\newrobustcmd*{\AtEveryBibitem}{\gappto\blx@hook@bibitem}
+\@onlypreamble\AtBeginBibliography
+\@onlypreamble\AtEveryBibitem
+
+\def\blx@imc@UseBibitemHook{\csuse{blx@hook@bibitem}}
+
+\blx@regimcs{\UseBibitemHook}
+
+\newrobustcmd*{\AtNextBibliography}{%
+ \ifundef\blx@hook@bibinit@next
+ {\gdef\blx@hook@bibinit@next{\global\undef\blx@hook@bibinit@next}}
+ {}%
+ \gappto\blx@hook@bibinit@next}
+
+% page tracker
+\def\blx@pagetracker@context{%
+ \blx@leavevmode
+ \ifbool{@filesw}
+ {\ifbool{pagetracker}
+ {\protected@write\@mainaux{}{%
+ \iftoggle{blx@footnote}
+ {\string\abx@aux@fnpage}
+ {\string\abx@aux@page}%
+ {\the\c@instcount}{\noexpand\the\c@page}}}
+ {}}
+ {}}
+
+% {<instcount>}{<page>}
+\protected\def\blx@aux@page#1#2{%
+ \csgdef{blx@page@#1}{#2}%
+ \blx@addpagesum{#1}{#2}}
+\protected\def\blx@aux@spread#1#2{%
+ \ifodd#2\relax
+ \csxdef{blx@page@#1}{\number\numexpr#2-1}%
+ \else
+ \csgdef{blx@page@#1}{#2}%
+ \fi
+ \blx@addpagesum{#1}{#2}}
+
+\protected\def\blx@aux@fnpage#1#2{%
+ \csgdef{blx@fnpage@#1}{#2}%
+ \blx@addpagesum{#1}{#2}}
+\protected\def\blx@aux@fnspread#1#2{%
+ \ifodd#2\relax
+ \csxdef{blx@fnpage@#1}{\number\numexpr#2-1}%
+ \else
+ \csgdef{blx@fnpage@#1}{#2}%
+ \fi
+ \blx@addpagesum{#1}{#2}}
+
+\blx@AtEndDocument{%
+ \def\abx@aux@page#1#2{\blx@addpagesum{#1}{#2}}%
+ \def\abx@aux@fnpage#1#2{\blx@addpagesum{#1}{#2}}}
+
+% hyperref interface
+\appto\blx@mkhyperref{%
+ \let\blx@anchors\@empty
+ \ifundef\hyper@natanchorstart
+ {\protected\def\blx@anchor{%
+ \xifinlist{\the\c@refsection @\abx@field@@@entrykey}{\blx@anchors}
+ {}
+ {\listxadd\blx@anchors{\the\c@refsection @\abx@field@@@entrykey}%
+ \hypertarget{cite.\the\c@refsection @\abx@field@@@entrykey}{}}}}
+ {\protected\def\blx@anchor{%
+ \xifinlist{\the\c@refsection @\abx@field@@@entrykey}{\blx@anchors}
+ {}
+ {\listxadd\blx@anchors{\the\c@refsection @\abx@field@@@entrykey}%
+ \hyper@natanchorstart{\the\c@refsection @\abx@field@@@entrykey}%
+ \hyper@natanchorend}}}}
+
+\appto\blx@mknohyperref{\let\blx@anchor\relax}
+
+\blx@kv@defkey{blx@biblist2}{driver}{\blx@key@driver{#1}}
+\blx@kv@defkey{blx@biblist1}{driver}{}
+
+\def\blx@key@driver#1{%
+ \def\blx@thebiblistdriver{#1}}
+
+% Custom bibliography list
+% [<options>]{biblistname}
+\newrobustcmd*{\printbiblist}[2][]{%
+ \begingroup
+ \delimcontext{biblist}%
+ \edef\on@line{\on@line}%
+ \toggletrue{blx@tempa}%
+ \toggletrue{blx@tempb}%
+ \def\blx@theheading{biblist}% default to biblist heading
+ \def\blx@theenv{#2}% default to list name
+ \def\blx@thebiblist{#2}%
+ \def\blx@thebiblistdriver{#2}%
+ \def\blx@thebiblistfilter{#2}%
+ \let\blx@theprenote\@empty
+ \let\blx@thepostnote\@empty
+ \let\blx@thetitle\@empty
+ \undef\blx@thelabel
+ % defaults
+ \let\blx@tempa\@empty% before there is a .bbl, this must not be undef
+ % default sorting template and template name for list is same name as list
+ % name, then current context if not found
+ \edef\blx@tempc{%
+ \ifcsdef{blx@sortingtemplate@#2}
+ {#2}
+ {\blx@refcontext@sortingtemplatename}}%
+ % locally define this since we want to fetch data from the datalist
+ % name after the list we are printing rather than the data in
+ % refcontext list.
+ % Note that the name must be unique so we prepend any filter name
+ % because the combination of options might not generate a unique name
+ % since sortschemename has a fallback to the refcontext scheme if there
+ % is no sortscheme named after the list
+ \blx@kv@setkeys{blx@biblist1}{#1}% Set section and biblistfilter only, if present ...
+ \blx@edef@refcontext{\blx@thebiblistfilter :\blx@tempc/%
+ \blx@refcontext@sortingnamekeytemplatename/%
+ \blx@refcontext@labelprefix/%
+ \blx@refcontext@uniquenametemplatename/%
+ \blx@refcontext@labelalphanametemplatename}%
+ \xifinlist\blx@tempc\blx@sortingtemplatenames
+ {}
+ {\listxadd\blx@sortingtemplatenames\blx@tempc}%
+ \let\blx@printbibchecks\relax
+ \edef\blx@tempe{\the\c@refsection}% default refsection is current
+ \blx@safe@actives
+ \blx@printbibchecks
+ % Add the sortingtemplate to the list of sortingtemplates for this biblist
+ % so we can compare on next run
+ \xifinlist\blx@tempc\blx@biblists
+ {}
+ {\listxadd\blx@biblists\blx@tempc}%
+ \blx@auxwrite\@mainaux{}{\string\abx@aux@biblist{\blx@tempc}}%
+ \blx@rest@actives
+ \ifcsvoid{blx@dlist@list@\blx@tempe @\blx@refcontext@context}
+ {}
+ {\letcs\blx@tempa{blx@dlist@list@\blx@tempe @\blx@refcontext@context}}%
+ \blx@safe@actives
+ \blx@kv@setkeys{blx@biblist2}{#1}% ... now we have correct \blx@tempa, set rest of options
+ \ifundef\blx@bibcheck
+ {\ifcsdef{blx@bibcheck@#2}
+ {\letcs\blx@bibcheck{blx@bibcheck@#2}}
+ {}}
+ {}%
+ \blx@rest@actives
+ % Add datalist to list of seen datalists to prevent duplicates
+ \xifinlist{\blx@refcontext@context @\blx@tempe @list}\blx@dlistnames
+ {}
+ {\listxadd\blx@dlistnames{\blx@refcontext@context @\blx@tempe @list}%
+ \xappto\blx@dlists{%
+ \blx@xml@dlist{\blx@refcontext@context}{list}{\blx@tempe}{\blx@xml@dlist@refcontext{\blx@tempc}{\blx@refcontext@sortingnamekeytemplatename}{\blx@refcontext@labelprefix@real}{\blx@refcontext@uniquenametemplatename}{\blx@refcontext@labelalphanametemplatename}}{\csuse{blx@biblistfilters@\blx@thebiblistfilter}}}}%
+ \ifdefvoid\blx@tempa
+ {\blx@warn@biblistempty{#2}\endgroup}
+ {\blx@biblist\blx@tempa}}
+
+\def\blx@printbibchecks{%
+ \togglefalse{blx@tempa}%
+ \iftoggle{blx@defernumbers}
+ {\global\let\blx@printbibchecks\relax}
+ {\iftoggle{blx@labelnumber}
+ {\ifundef\blx@printbibchecks@suppresswarn
+ {\blx@warning@noline{%
+ Split bibliography detected.\MessageBreak
+ Many simple split bibliography setups with\MessageBreak
+ non-overlapping bibliographies benefit from%
+ \MessageBreak
+ setting 'defernumbers=true'.\MessageBreak
+ See the documentation for details.\MessageBreak
+ This warning can be suppressed with\MessageBreak
+ '\string\BiblatexSplitbibDefernumbersWarningOff'}}
+ {}}
+ {\global\let\blx@printbibchecks\relax}}}
+
+% {<entrykey>,...}
+\def\blx@biblist{%
+ \if@twocolumn
+ \@restonecoltrue\onecolumn
+ \else
+ \@restonecolfalse
+ \fi
+ \blx@bibheading\blx@theheading\blx@thetitle
+ \blx@biblabel\blx@thelabel
+ \blx@bibnote\blx@theprenote
+ \begingroup
+ \blx@bibinit
+ \let\@noitemerr\@empty
+ \def\blx@noitem{\blx@warn@biblistempty{\blx@thebiblist}}%
+ \blx@locallabelwidth@init
+ \csuse{blx@env@\blx@theenv}%
+ \csuse{blx@hook@biblistinit@\blx@thebiblist}%
+ \let\blx@do\blx@biblistitem
+ \let\blx@done\blx@endbiblist
+ \blx@listloop}
+
+\def\blx@endbiblist{%
+ \csuse{blx@endenv@\blx@theenv}%
+ \blx@noitem
+ \blx@locallabelwidth@finish
+ \endgroup
+ \blx@bibnote\blx@thepostnote
+ \endgroup
+ \if@restonecol\twocolumn\fi}
+
+% {<biblistname>}
+\newrobustcmd*{\AtBeginBiblist}[1]{\csgappto{blx@hook@biblistinit@#1}}
+\newrobustcmd*{\AtEveryBiblistitem}[1]{\csgappto{blx@hook@biblistitem@#1}}
+\@onlypreamble\AtBeginBiblist
+\@onlypreamble\AtEveryBiblistitem
+
+% {<entrykey>}
+\def\blx@biblistitem#1{%
+ \blx@ifdata{#1}
+ {\begingroup
+ \blx@getdata{#1}%
+ \blx@bibcheck
+ \iftoggle{blx@skipentry}{}{%
+ \blx@setdefaultrefcontext{#1}%
+ \global\let\blx@noitem\@empty
+ \blx@setoptions@type\abx@field@@@entrytype
+ \blx@setoptions@entry
+ \addtocounter{instcount}\@ne
+ \iftoggle{blx@labelnumber}
+ {\blx@bbl@locallabelnumberwidth}
+ {}%
+ \iftoggle{blx@labelalpha}
+ {\blx@bbl@locallabelalphawidth}
+ {}%
+ \nottoggle{blx@skipbiblist}
+ {\blx@bbl@locallabelfields}
+ {}%
+ \csuse{blx@item@\blx@theenv}\relax
+ \csuse{blx@hook@biblistitem@\blx@thebiblist}%
+ \blx@execute
+ \blx@initunit
+ \blx@beglangbib
+ \bibsentence
+ \blx@pagetracker
+ \blx@driver{\blx@thebiblistdriver}%
+ \blx@postpunct
+ \blx@endlangbib}%
+ \endgroup}
+ {}}
+
+% Just a default in case .bbx doesn't define it. standard.bbx defines
+% it to print a complete entry, like the bibliography.
+\DeclareBibliographyDriver{shorthand}{%
+ \iffieldundef{shorttitle}
+ {\printfield{title}}
+ {\printfield{shorttitle}}}
+
+% Reference contexts
+\newcommand*{\DeclareRefcontext}[2]{%
+ \csgdef{blx@refcontext@name@#1}{#2}}
+\@onlypreamble\DeclareRefcontext
+
+\def\newrefcontext{%
+ \endrefcontext
+ \refcontext}
+
+% Backwards compat for older \refcontext[] format
+\def\refcontext{%
+ \@ifnextchar[%]
+ {\refcontext@i}
+ {\refcontext@i[]}}
+
+\def\refcontext@i[#1]{%
+ \@ifnextchar\bgroup
+ {\refcontext@ii[{#1}]}
+ {\refcontext@ii[{#1}]{}}}
+
+\newcommand*{\refcontext@ii}[2][]{%
+ \iftoggle{blx@refcontext}
+ {\blx@err@nestenv{refcontext}%
+ \endrefcontext}
+ {\toggletrue{blx@refcontext}%
+ % Set refcontext from named refcontext, if given
+ \ifblank{#2}
+ {}
+ {\begingroup
+ \edef\blx@tempa{\endgroup%
+ \noexpand\blx@kv@setkeys{blx@refcontext}{\csuse{blx@refcontext@name@#2}}}%
+ \blx@tempa}%
+ % Override with explicit refcontext keyvals, if given
+ \def\blx@gdef@or@def{\gdef}%
+ \def\blx@xdef@or@edef{\xdef}%
+ \blx@kv@setkeys{blx@refcontext}{#1}%
+ % Add the sortingtemplate to the list of sortingtemplates so we can track
+ % special cases like sorting=none which need cite order change detection
+ \xifinlist\blx@refcontext@sortingtemplatename\blx@sortingtemplatenames
+ {}
+ {\listxadd\blx@sortingtemplatenames\blx@refcontext@sortingtemplatename}%
+ \blx@xdef@refcontext{%
+ \blx@refcontext@sortingtemplatename/%
+ \blx@refcontext@sortingnamekeytemplatename/%
+ \blx@refcontext@labelprefix/%
+ \blx@refcontext@uniquenametemplatename/%
+ \blx@refcontext@labelalphanametemplatename}%
+ % Add the refcontext to the list of refcontexts so we can compare on next run
+ \xifinlist\blx@refcontext@context\blx@refcontexts
+ {}
+ {\listxadd\blx@refcontexts\blx@refcontext@context}%
+ \blx@auxwrite\@mainaux{}{\string\abx@aux@refcontext{\blx@refcontext@context}}%
+ \ifcsundef{blx@sortingtemplate@\blx@refcontext@sortingtemplatename}
+ {\blx@err@invopt{sorting=\blx@refcontext@sortingtemplatename}{}}
+ {}%
+ \ifcsundef{blx@sortingnamekeytemplate@\blx@refcontext@sortingnamekeytemplatename}
+ {\blx@err@invopt{sortingnamekeytemplate=\blx@refcontext@sortingnamekeytemplatename}{}}
+ {}%
+ \ifcsundef{blx@uniquenametemplate@\blx@refcontext@uniquenametemplatename}
+ {\blx@err@invopt{uniquenametemplate=\blx@refcontext@uniquenametemplatename}{}}
+ {}%
+ \ifcsundef{blx@labelalphanametemplate@\blx@refcontext@labelalphanametemplatename}
+ {\blx@err@invopt{labelalphanametemplate=\blx@refcontext@labelalphanametemplatename}{}}
+ {}}}
+
+% Reset to global sorting etc. when we leave a ref context (since they can't be nested)
+\protected\def\endrefcontext{%
+ \togglefalse{blx@refcontext}%
+ \global\let\blx@refcontext@labelprefix\@empty
+ \global\let\blx@refcontext@labelprefix@real\@empty
+ \xdef\blx@refcontext@sortingtemplatename{\blx@sorting}%
+ \gdef\blx@refcontext@sortingnamekeytemplatename{global}%
+ \gdef\blx@refcontext@uniquenametemplatename{global}%
+ \gdef\blx@refcontext@labelalphanametemplatename{global}%
+ \blx@xdef@refcontext{%
+ \blx@refcontext@sortingtemplatename/%
+ \blx@refcontext@sortingnamekeytemplatename/%
+ /%
+ \blx@refcontext@uniquenametemplatename/%
+ \blx@refcontext@labelalphanametemplatename}}
+
+% local version of \newrefcontext
+\def\localrefcontext{%
+ \@ifnextchar[%]
+ {\localrefcontext@i}
+ {\localrefcontext@i[]}}
+
+\def\localrefcontext@i[#1]{%
+ \@ifnextchar\bgroup
+ {\localrefcontext@ii[{#1}]}
+ {\localrefcontext@ii[{#1}]{}}}
+
+\newcommand*{\localrefcontext@ii}[2][]{%
+ \ifblank{#2}
+ {}
+ {\begingroup
+ \edef\blx@tempa{\endgroup%
+ \noexpand\blx@kv@setkeys{blx@refcontext}{\csuse{blx@refcontext@name@#2}}}%
+ \blx@tempa}%
+ % Override with explicit refcontext keyvals, if given
+ \def\blx@gdef@or@def{\def}%
+ \def\blx@xdef@or@edef{\edef}%
+ \blx@kv@setkeys{blx@refcontext}{#1}%
+ % Add the sortingtemplate to the list of sortingtemplates so we can track
+ % special cases like sorting=none which need cite order change detection
+ \xifinlist\blx@refcontext@sortingtemplatename\blx@sortingtemplatenames
+ {}
+ {\listxadd\blx@sortingtemplatenames\blx@refcontext@sortingtemplatename}%
+ \blx@edef@refcontext{%
+ \blx@refcontext@sortingtemplatename/%
+ \blx@refcontext@sortingnamekeytemplatename/%
+ \blx@refcontext@labelprefix/%
+ \blx@refcontext@uniquenametemplatename/%
+ \blx@refcontext@labelalphanametemplatename}%
+ % Add the refcontext to the list of refcontexts so we can compare on next run
+ \xifinlist\blx@refcontext@context\blx@refcontexts
+ {}
+ {\listxadd\blx@refcontexts\blx@refcontext@context}%
+ \blx@auxwrite\@mainaux{}{\string\abx@aux@refcontext{\blx@refcontext@context}}%
+ \ifcsundef{blx@sortingtemplate@\blx@refcontext@sortingtemplatename}
+ {\blx@err@invopt{sorting=\blx@refcontext@sortingtemplatename}{}}
+ {}%
+ \ifcsundef{blx@sortingnamekeytemplate@\blx@refcontext@sortingnamekeytemplatename}
+ {\blx@err@invopt{sortingnamekeytemplate=\blx@refcontext@sortingnamekeytemplatename}{}}
+ {}%
+ \ifcsundef{blx@uniquenametemplate@\blx@refcontext@uniquenametemplatename}
+ {\blx@err@invopt{uniquenametemplate=\blx@refcontext@uniquenametemplatename}{}}
+ {}%
+ \ifcsundef{blx@labelalphanametemplate@\blx@refcontext@labelalphanametemplatename}
+ {\blx@err@invopt{labelalphanametemplate=\blx@refcontext@labelalphanametemplatename}{}}
+ {}}
+
+\def\blx@gdef@or@def{\gdef}
+\def\blx@xdef@or@edef{\xdef}
+
+% Meta option to set all name template options
+\blx@kv@defkey{blx@refcontext}{nametemplates}{%
+ \blx@gdef@or@def\blx@refcontext@sortingnamekeytemplatename{#1}%
+ \blx@gdef@or@def\blx@refcontext@uniquenametemplatename{#1}%
+ \blx@gdef@or@def\blx@refcontext@labelalphanametemplatename{#1}}
+
+\blx@kv@defkey{blx@refcontext}{msform}{\def\blx@msform{#1}}
+\blx@kv@defkey{blx@refcontext}{mslang}{\def\blx@mslang{#1}}
+\blx@kv@defkey{blx@refcontext}{sorting}{\blx@gdef@or@def\blx@refcontext@sortingtemplatename{#1}}
+\blx@kv@defkey{blx@refcontext}{sortingnamekeytemplatename}{\blx@gdef@or@def\blx@refcontext@sortingnamekeytemplatename{#1}}
+\blx@kv@defkey{blx@refcontext}{uniquenametemplatename}{\blx@gdef@or@def\blx@refcontext@uniquenametemplatename{#1}}
+\blx@kv@defkey{blx@refcontext}{labelalphanametemplatename}{\blx@gdef@or@def\blx@refcontext@labelalphanametemplatename{#1}}
+
+% labelprefix cannot be used as is because it is used to construct the internal
+% refcontext name which is referenced/expanded a lot all over the place. So,
+% we hash the given input and use the safe hash as internal name.
+% But that is not enough since the MD5 hash function expands the argument all
+% the way and so unexpandable content like \dag breaks.
+% Unexpandable content should be protected with \detokenize.
+\blx@kv@defkey{blx@refcontext}{labelprefix}{%
+ \blx@xdef@or@edef\blx@refcontext@labelprefix{\blx@mdfivesum{#1}}%
+ \blx@gdef@or@def\blx@refcontext@labelprefix@real{#1}%
+ \iftoggle{blx@defernumbers}
+ {}%
+ {\iftoggle{blx@labelnumber}
+ {\blx@warning{%
+ Option 'labelprefix' requires global\MessageBreak
+ 'defernumbers=true'}}
+ {}}}
+
+
+% [refcontext keys]{<keyword1>,<keyword2>,...}
+\newcommand*{\assignrefcontextkeyws}{%
+ \@ifstar
+ {\blx@assignrefcontextkeyws[*]}
+ {\blx@assignrefcontextkeyws[]}}
+
+\def\blx@assignrefcontextkeyws[#1][#2]#3{%
+ \edef\blx@tempa{\blx@sorting}%
+ \def\blx@tempb{global}%
+ \let\blx@tempc\@empty%
+ \def\blx@tempd{global}%
+ \def\blx@tempe{global}%
+ \blx@kv@setkeys{blx@assignrefcontextmeta}{#2}%
+ \blx@kv@setkeys{blx@assignrefcontext}{#2}%
+ \def\do##1{%
+ \listxadd\blx@assignedrefcontextkeywlist{##1}%
+ \csxdef{blx@assignedrefcontextkeyws#1@\the\c@refsection @##1}%
+ {\blx@tempa/\blx@tempb/\blx@tempc/\blx@tempd/\blx@tempe}}%
+ \docsvlist{#3}}
+
+% [refcontext keys]{<category1>,<category2>,...}
+\newcommand*{\assignrefcontextcats}{%
+ \@ifstar
+ {\blx@assignrefcontextcats[*]}
+ {\blx@assignrefcontextcats[]}}
+
+\def\blx@assignrefcontextcats[#1][#2]#3{%
+ \edef\blx@tempa{\blx@sorting}%
+ \def\blx@tempb{global}%
+ \let\blx@tempc\@empty%
+ \def\blx@tempd{global}%
+ \def\blx@tempe{global}%
+ \blx@kv@setkeys{blx@assignrefcontextmeta}{#2}%
+ \blx@kv@setkeys{blx@assignrefcontext}{#2}%
+ \def\do##1{%
+ \listxadd\blx@assignedrefcontextcatlist{##1}%
+ \csxdef{blx@assignedrefcontextcats#1@\the\c@refsection @##1}%
+ {\blx@tempa/\blx@tempb/\blx@tempc/\blx@tempd/\blx@tempe}}%
+ \docsvlist{#3}}
+
+% [refcontext keys]{<entrykey1>,<entrykey2>,...}
+\newcommand*{\assignrefcontextentries}{%
+ \@ifstar
+ {\blx@assignrefcontextentries[*]}
+ {\blx@assignrefcontextentries[]}}
+
+\def\blx@assignrefcontextentries[#1][#2]#3{%
+ \edef\blx@tempa{\blx@sorting}%
+ \def\blx@tempb{global}%
+ \let\blx@tempc\@empty%
+ \def\blx@tempd{global}%
+ \def\blx@tempe{global}%
+ \blx@kv@setkeys{blx@assignrefcontextmeta}{#2}%
+ \blx@kv@setkeys{blx@assignrefcontext}{#2}%
+ \def\do##1{%
+ \csxdef{blx@assignedrefcontextkeys#1@\the\c@refsection @##1}%
+ {\blx@tempa/\blx@tempb/\blx@tempc/\blx@tempd/\blx@tempe}}%
+ \docsvlist{#3}}
+
+% This makes sure that named refcontexts set options first
+% Note that the docs say that "name=default" selects the global default
+% refcontext and this is because this won't set anything and the defaults
+% in the above macros will take effect.
+\blx@kv@defkey{blx@assignrefcontextmeta}{name}{%
+ \begingroup
+ \edef\blx@tempf{\endgroup%
+ \noexpand\blx@kv@setkeys{blx@assignrefcontext}{\csuse{blx@refcontext@name@#1}}}%
+ \blx@tempf}
+\blx@kv@defkey{blx@assignrefcontextmeta}{nametemplates}{}
+\blx@kv@defkey{blx@assignrefcontextmeta}{sorting}{}
+\blx@kv@defkey{blx@assignrefcontextmeta}{sortingnamekeytemplatename}{}
+\blx@kv@defkey{blx@assignrefcontextmeta}{labelprefix}{}
+\blx@kv@defkey{blx@assignrefcontextmeta}{uniquenametemplatename}{}
+\blx@kv@defkey{blx@assignrefcontextmeta}{labelalphanametemplatename}{}
+
+% Meta option to set all name template options
+\blx@kv@defkey{blx@assignrefcontext}{name}{}
+\blx@kv@defkey{blx@assignrefcontext}{nametemplates}{%
+ \def\blx@tempb{#1}%
+ \def\blx@tempd{#1}%
+ \def\blx@tempe{#1}}
+\blx@kv@defkey{blx@assignrefcontext}{sorting}{\def\blx@tempa{#1}}
+\blx@kv@defkey{blx@assignrefcontext}{sortingnamekeytemplatename}{\def\blx@tempb{#1}}
+\blx@kv@defkey{blx@assignrefcontext}{labelprefix}{\edef\blx@tempc{\blx@mdfivesum{#1}}}
+\blx@kv@defkey{blx@assignrefcontext}{uniquenametemplatename}{\def\blx@tempd{#1}}
+\blx@kv@defkey{blx@assignrefcontext}{labelalphanametemplatename}{\def\blx@tempe{#1}}
+
+% Manually force a refcontext datalist in the .bcf
+\newcommand*{\GenRefcontextData}[1]{%
+ \begingroup
+ \edef\blx@tempb{\the\c@refsection}%
+ \def\blx@tempc{global}%
+ \def\blx@tempd{global}%
+ \def\blx@tempe{global}%
+ \let\blx@tempf\blx@sorting%
+ \let\blx@tempg\@empty%
+ \ifblank{#1}
+ {}
+ {\blx@kv@setkeys{blx@refcontextmanual}{#1}}%
+ \def\blx@tempa{\blx@tempf/\blx@tempc/\blx@tempg/\blx@tempd/\blx@tempe}%
+ \xifinlist{\blx@tempa @\blx@tempb @entry}\blx@dlistnames
+ {}
+ {\listxadd\blx@dlistnames{\blx@tempa @\blx@tempb @entry}%
+ \xappto\blx@dlists{%
+ \blx@xml@dlist{\blx@tempa}{entry}{\blx@tempb}{\blx@xml@dlist@refcontext{\blx@tempf}{\blx@tempc}{\blx@tempg}{\blx@tempd}{\blx@tempe}}{}}}%
+ \endgroup}
+
+% Meta option to set all name template options
+\blx@kv@defkey{blx@refcontextmanual}{nametemplates}{%
+ \def\blx@tempc@sortingnamekeytemplatename{#1}%
+ \def\blx@tempd@uniquenametemplatename{#1}%
+ \def\blx@tempe@labelalphanametemplatename{#1}}
+\blx@kv@defkey{blx@refcontextmanual}{sorting}{\def\blx@tempf{#1}}
+\blx@kv@defkey{blx@refcontextmanual}{sortingnamekeytemplatename}{\def\blx@tempc{#1}}
+\blx@kv@defkey{blx@refcontextmanual}{uniquenametemplatename}{\def\blx@tempd{#1}}
+\blx@kv@defkey{blx@refcontextmanual}{labelalphanametemplatename}{\def\blx@tempe{#1}}
+\blx@kv@defkey{blx@refcontextmanual}{labelprefix}{%
+ \def\blx@tempg{#1}%
+ \iftoggle{blx@defernumbers}
+ {}%
+ {\iftoggle{blx@labelnumber}
+ {\blx@warning{%
+ Option 'labelprefix' requires global\MessageBreak
+ 'defernumbers=true'}}
+ {}}}
+
+% Reference sections
+\newrobustcmd*{\AtBeginRefsection}{\gappto\blx@hook@refsectioninit}
+\@onlypreamble\AtBeginRefsection
+
+\newrobustcmd*{\newrefsection}{%
+ \endrefcontext
+ \ifnum\c@refsection>\z@
+ \endrefsection
+ \fi
+ \refsection}
+\let\blx@newrefsection\newrefsection
+
+\newrobustcmd*{\refsection}{%
+ \begingroup
+ \edef\on@line{\on@line}%
+ \ifnum\c@refsection>\z@
+ \blx@err@nestenv{refsection}%
+ \blx@endrefsection
+ \fi
+ \ifnum\c@refsegment>\z@
+ \blx@err@nestenv{refsection}%
+ \blx@endrefsegment
+ \fi
+ \@ifnextchar[%]
+ {\blx@refsection}
+ {\blx@refsection[]}}
+
+\def\blx@refsection{%
+ \begingroup
+ \blx@hook@fileverb
+ \blx@refsection@i}
+
+\def\blx@refsection@i[#1]{%
+ \endgroup
+ \stepcounter{blx@maxsection}%
+ \setcounter{refsection}{\value{blx@maxsection}}%
+ \csuse{blx@hook@refsectioninit}%
+ \xifinlist{\the\c@refsection}\blx@allrefsections
+ {}
+ {\listxadd\blx@allrefsections{\the\c@refsection}}%
+ \ifcsdef{blx@defaultrefcontexts@\the\c@refsection}
+ {}
+ {\global\cslet{blx@defaultrefcontexts@\the\c@refsection}\@empty}%
+ \blx@providecount{blx@maxsegment@\the\c@refsection}%
+ \blx@providecount{blx@sectionciteorder@\the\c@refsection}%
+ \blx@inf@refsec
+ \blx@secinit
+ \if@filesw
+ \blx@auxwrite\@mainaux{}{%
+ \string\abx@aux@refsection{\the\c@refsection}{\the\c@page}}%
+ \ifblank{#1}
+ {}
+ {\let\blx@bibfiles\@empty
+ % globals should be first as it might contain macros needed for others
+ \forlistloop{\listadd\blx@bibfiles}\blx@bibfiles@global}%
+ \blx@xsanitizeafter{\forcsvlist\blx@refsection@addfile}{#1}%
+ \blx@refsection@ii
+ \fi
+ \blx@info{Setting label 'refsection:\the\c@refsection'}%
+ \label{refsection:\the\c@refsection}%
+ \endgroup}
+
+\def\blx@refsection@addfile#1{%
+ \ifcsdef{blx@res@labl@#1}
+ {\blx@refsection@addfile@i{\csuse{blx@res@labl@#1}}}
+ {\blx@refsection@addfile@i{#1}}}
+
+\def\blx@refsection@addfile@i#1{%
+ \ifcsdef{blx@res@loca@#1}
+ {\listeadd\blx@bibfiles{#1}}
+ {\listeadd\blx@bibfiles{\blx@stripbib{#1}\detokenize{.bib}}}}
+
+\def\blx@refsection@ii{%
+ \blx@regbibfiles\jobname\blx@bibfiles
+ \begingroup
+ \let\blx@tempa\@empty
+ \blx@bibdata\blx@tempa\blx@bibfiles
+ \blx@auxwrite\blx@bcfout
+ {\let\do\blx@datasource}
+ {\blx@xml@endsection\blx@nl
+ \blx@xml@comment{SECTION \the\c@refsection}%
+ \blx@xml@bibdata{\the\c@refsection}{\blx@tempa}%
+ \blx@xml@section{\the\c@refsection}}%
+ \endgroup}
+
+\protected\def\endrefsection{%
+ \endrefcontext
+ \blx@endrefsection
+ \blx@inf@refsec}
+
+\def\blx@endrefsection{%
+ \blx@endrefsegment
+ \blx@providecount{blx@sectionciteorder@\the\c@refsection}%
+ % make sure we always output aliases to the .bcf otherwise after their
+ % first resolution by biber, they will be invisible to subsequent biber
+ % runs since biblatex will resolve the \keyalias{} macro to the main
+ % entry key, biber won't put \keyalias{}in the .bbl on subsequent runs
+ % and biblatex will report a missing citekey
+ \ifcsempty{blx@keyaliases@\the\c@refsection}
+ {}
+ {\def\do##1{%
+ \blx@xmlsanitizeafter{\def\blx@tempa}{##1}%
+ % Make sure this counter exists. Sometimes it might not when using, e.g:
+ % refsection=chapter and \includeonly to put in the chapters or when
+ % inserting citations into table of contents
+ \global\advance\csname blx@sectionciteorder@\the\c@refsection\endcsname\@ne
+ \blx@auxwrite\blx@bcfout{}{%
+ \blx@xml@citekey{\blx@tempa}{}
+ {\expandafter\the\csname blx@sectionciteorder@\the\c@refsection\endcsname}{1}}}%
+ \dolistcsloop{blx@keyaliases@\the\c@refsection}}%
+ % output key counts (for \citecount sorting) if citecounter option is not false
+ \ifcsundef{blx@cites@\the\c@refsection}
+ {}
+ {\ifundef\blx@citecounter
+ {}
+ {\def\do##1{%
+ \ifcsundef{blx@currcount@\the\c@refsection @##1}
+ {\csdef{blx@currcount@\the\c@refsection @##1}{0}}
+ {}%
+ \blx@auxwrite\blx@bcfout{}
+ {\blx@xml@citekeycount{##1}{\csuse{blx@currcount@\the\c@refsection @##1}}}}%
+ \dolistcsloop{blx@cites@\the\c@refsection}}}%
+ \ifnum\c@refsection>\z@
+ \blx@auxwrite\blx@bcfout{}{%
+ \blx@xml@endsection\blx@nl
+ \blx@xml@comment{SECTION 0 (cont.)}%
+ \blx@xml@section{0}}%
+ \fi
+ \global\c@refsection\z@}
+
+\blx@AtEndDocument{%
+ \endrefcontext
+ % close non-0 refsection if active
+ \ifnum\c@refsection>\z@
+ \blx@endrefsection
+ \fi
+ % close refsection 0
+ \blx@endrefsection
+ \def\abx@aux@refsection#1#2{\blx@addchecksum{#1}{#2}}}
+
+\protected\def\abx@aux@refsection#1#2{%
+ \listgadd\blx@alllastrefsections{#1}%
+ \ifnum#1>\c@blx@maxsection
+ \setcounter{blx@maxsection}{#1}%
+ \fi
+ \blx@addchecksum{#1}{#2}}
+
+% Reference segments
+\newrobustcmd*{\newrefsegment}{%
+ \ifnum\c@refsegment>\z@
+ \blx@endrefsegment
+ \fi
+ \refsegment}
+\let\blx@newrefsegment\newrefsegment
+
+\newrobustcmd*{\refsegment}{%
+ \ifnum\c@refsegment>\z@
+ \blx@err@nestenv{refsegment}%
+ \blx@endrefsegment
+ \fi
+ \global\advance\csname blx@maxsegment@\the\c@refsection\endcsname\@ne
+ \setcounter{refsegment}{\csuse{blx@maxsegment@\the\c@refsection}}%
+ \blx@inf@refseg
+ \blx@info{Setting label 'refsegment:\the\c@refsection\the\c@refsegment'}%
+ \label{refsegment:\the\c@refsection\the\c@refsegment}%
+ \ifcsundef{blx@segm@\the\c@refsection @\the\c@refsegment}
+ {\global\cslet{blx@segm@\the\c@refsection @\the\c@refsegment}\@empty}
+ {}}
+
+\protected\def\endrefsegment{%
+ \blx@endrefsegment
+ \blx@inf@refseg}
+
+\def\blx@endrefsegment{%
+ \global\c@refsegment\z@}
+
+% Reference section/segment auto-reset
+% we are prepending to the commands so that the resets happen before
+% the part title is typeset otherwise \cites in there could be "ibid"
+% which makes no sense
+
+% option switch
+%{<option level counter>}{<patch>}{<pre>}{<post>}
+\def\blx@patchsection@switch#1#2#3#4{%
+ \AtEndPreamble{%
+ #3%
+ \ifcase#1
+ \or % 1: part
+ \blx@refpatch@part{#2}%
+ \or % 2: chapter
+ \blx@refpatch@chapter{#2}%
+ \or % 3: section
+ \blx@refpatch@sect{section}{#2}{1}%
+ \or % 4: subsection
+ \blx@refpatch@sect{subsection}{#2}{2}%
+ \or % 5: chapter+ = part, chapter
+ \blx@refpatch@part{#2}%
+ \blx@refpatch@chapter{#2}%
+ \or % 6: section+ = part, chapter, section
+ \blx@refpatch@part{#2}%
+ \ifundef\chapter
+ {}
+ {\blx@refpatch@chapter{#2}}%
+ \blx@refpatch@sect{section}{#2}{1}%
+ \or % 7: subsection+ = part, chapter, section, subsection
+ \blx@refpatch@part{#2}%
+ \ifundef\chapter
+ {}
+ {\blx@refpatch@chapter{#2}}%
+ \blx@refpatch@sect{section}{#2}{1}%
+ \blx@refpatch@sect{subsection}{#2}{2}%
+ \fi
+ #4%
+ }%
+}
+
+%% Patching all the different document classes and their sectioning
+%% commands is ... messy at best
+%% For now we do the big three: (1) Standard classes, (2) KOMA-Script
+%% and (3) memoir.
+%%
+%% Timing of the patch can be tricky.
+%% Ideally we want the code to be executed when all counters have
+%% been increased so the labels attach to the right thing, but
+%% at the same time we want the code to be executed before the heading
+%% is typeset so it already applies to the text in the heading.
+%% Bonus points for actually executing the code on the correct page.
+
+%% memoir has hooks for section headings that we can use here
+%% see 18.25 'Heading Hooks' of the manual (v3.7h, 2018/12/12)
+%% they are in a good position, when the counters have been
+%% increased but heading text not yet typeset.
+%% The manual suggests this hooks have been around since 2005 or so,
+%% so we take them for granted.
+
+%% Newer versions of KOMA-Script (>=3.27) (will) have a hook system
+%% that we can use for that purpose as well.
+%% This is fairly new, so we need to have a fallback for older versions.
+
+%% The standard classes are tricky.
+%% We insert something in \@startsection to get the level number
+%% and then patch \@sect and \@ssect so the label attaches to the
+%% right thing.
+
+%% Test for correct KOMA patch method
+% KOMA 3.27 has \AddtoDoHook
+\newcommand*{\blx@ifkoma@AddtoDoHook}{%
+ \ifcsundef{KOMAClassName}
+ {\@secondoftwo}
+ {\ifcsundef{AddtoDoHook}
+ {\@secondoftwo}
+ {\@firstoftwo}}}
+
+% KOMA 3.26 has \startsection@secnumdepth for some testing
+\newcommand*{\blx@ifkoma@startsection}{%
+ \ifcsundef{KOMAClassName}
+ {\@secondoftwo}
+ {\ifcsundef{startsection@secnumdepth}
+ {\@secondoftwo}
+ {\@firstoftwo}}}
+
+\newcommand*{\blx@ifmemoir}{\@ifclassloaded{memoir}}
+
+% Note that \ExecuteDoHook always feeds an argument to the code, here that is
+% going to be an empty group, which we explicitly gobble to avoid trouble.
+\def\blx@refpatch@koma@AddtoDoHook#1#2{%
+ \AddtoDoHook{heading/begingroup/#1}{#2\@gobble}}
+
+% \part
+\def\blx@refpatch@part@memoir#1{%
+ \apptocmd\mempartinfo{#1}
+ {}{\blx@err@patch{\string\mempartinfo}}%
+ \apptocmd\mempartstarinfo{#1}
+ {}{\blx@err@patch{\string\mempartstarinfo}}}
+
+\def\blx@refpatch@part@std#1{%
+ \toggletrue{blx@tempa}%
+ \def\do##1{%
+ \pretocmd##1{#1}
+ {\togglefalse{blx@tempa}\listbreak}
+ {}}%
+ \docsvlist{%
+ \H@old@part,% hyperref
+ \NR@part,% nameref
+ \@part}% latex/koma-script/memoir
+ \iftoggle{blx@tempa}
+ {\blx@err@patch{\string\@part}}
+ {}%
+ \let\do\noexpand}
+
+\def\blx@refpatch@part#1{%
+ \ifundef\part
+ {\blx@err@nodocdiv{part}}
+ {\blx@ifkoma@AddtoDoHook
+ {\blx@refpatch@koma@AddtoDoHook{part}{#1}}
+ {\blx@ifmemoir
+ {\blx@refpatch@part@memoir{#1}}
+ {\blx@refpatch@part@std{#1}}}}}
+
+% \chapter
+\def\blx@refpatch@chapter@memoir#1{%
+ \apptocmd\memchapinfo{#1}
+ {}{\blx@err@patch{\string\memchapinfo}}%
+ \apptocmd\memchapstarinfo{#1}
+ {}{\blx@err@patch{\string\memchapstarinfo}}%
+ \apptocmd\memappchapinfo{#1}
+ {}{\blx@err@patch{\string\memappchapinfo}}%
+ \apptocmd\memappchapstarinfo{#1}
+ {}{\blx@err@patch{\string\memappchapstarinfo}}%
+}
+
+\def\blx@refpatch@chapter@std#1{%
+ \pretocmd\@makechapterhead{#1}
+ {}
+ {\blx@err@patch{\string\@makechapterhead}}
+ \pretocmd\@makeschapterhead{#1}
+ {}
+ {\blx@err@patch{\string\@makeschapterhead}}}
+
+\def\blx@refpatch@chapter#1{%
+ \ifundef\chapter
+ {\blx@err@nodocdiv{chapter}}
+ {\blx@ifkoma@AddtoDoHook
+ {\blx@refpatch@koma@AddtoDoHook{chapter}{#1}}
+ {\blx@ifmemoir
+ {\blx@refpatch@chapter@memoir{#1}}
+ {\blx@refpatch@chapter@std{#1}}}}}
+
+% \section, \subsection
+% {<section csname>}{<patch code>}{<section level number>}
+\def\blx@refpatch@sect#1#2#3{%
+ \ifcsundef{#1}
+ {\blx@err@nodocdiv{#1}\@gobbletwo}
+ {\blx@ifkoma@AddtoDoHook
+ {\blx@refpatch@koma@AddtoDoHook{#1}{#2}}
+ {\blx@ifkoma@startsection
+ {\blx@refpatch@sect@koma@startsection{#2}{#3}}
+ {\blx@ifmemoir
+ {\blx@refpatch@sect@memoir{#1}{#2}}
+ {\blx@refpatch@sect@std{#2}{#3}}}}}}
+
+% KOMA >= 3.26 defines \startsection@secnumdepth to check the sectioning level,
+% so we can now use \At@startsection.
+% Starting from 3.27 we use AddtoDoHook, so this is a short-lived
+% intermezzo.
+\def\blx@refpatch@sect@koma@startsection#1#2{%
+ \At@startsection{\ifnumequal{\startsection@secnumdepth}{#2}{#1}{}}}
+
+% The memoir classes have a nice hook we can use
+% {<section csname>}{<patch code>}
+\edef\blx@refpatch@sect@memoir#1#2{%
+ \apptocmd\noexpand\memsecinfo
+ {\noexpand\blx@refpatch@sect@memoir@i{\string#1}{#1}{#2}}
+ {}{\noexpand\blx@err@patch{\string\memsecinfo}}%
+ \apptocmd\noexpand\memsecstarinfo
+ {\noexpand\blx@refpatch@sect@memoir@i{\string#1}{#1}{#2}}
+ {}{\noexpand\blx@err@patch{\string\memsecstarinfo}}}
+
+\def\blx@refpatch@sect@memoir@i#1#2#3{%
+ \ifstrequal{#1}{#2}{#3}{}}
+
+% The standard classes have \@startsection, \@sect and \@ssect.
+% \@startsection is used by unstarred and starred sections alike
+% but it comes in too early if we set labels.
+% The counter is only stepped in \@sect, so we need to patch
+% that if we want \labels to attach to the right thing.
+% But then we also need to patch \@ssect for starred/un-numbered
+% sections. Unfortunately, \@ssect doesn't know the level number
+% so we patch \@startsection to remember the level number
+% in blx@refpatch@current@sectlevel
+% and then patch \@sect and \@ssect with the actual code
+% testing against blx@refpatch@current@sectlevel.
+
+% {<do initialization>}{<csv list to do>}{<error>}
+\def\blx@refpatch@docsvlist#1#2#3{%
+ \toggletrue{blx@tempa}%
+ #1%
+ \docsvlist{#2}%
+ \iftoggle{blx@tempa}
+ {#3}
+ {}%
+ \let\do\noexpand}
+
+\newtoggle{blx@refpatch@sect@std@pre@done}
+
+\def\blx@refpatch@sect@std@pre{%
+ \iftoggle{blx@refpatch@sect@std@pre@done}
+ {}
+ {\blx@refpatch@docsvlist
+ {\blx@refpatch@sect@std@pre@defdo}
+ {\scr@startsection,
+ \@startsection}
+ {\blx@err@patch{\string\@startsection}}
+ \global\toggletrue{blx@refpatch@sect@std@pre@done}}}
+
+\edef\blx@refpatch@sect@std@pre@defdo{%
+ \def\noexpand\do##1{%
+ \pretocmd##1
+ {\csnumdef{blx@refpatch@current@sectlevel}{\string#2}}
+ {\togglefalse{blx@tempa}\noexpand\listbreak}
+ {}}}
+
+\edef\blx@refpatch@sect@std@defdo@sect#1#2{%
+ \def\noexpand\do##1{%
+ \patchcmd##1%
+ {\noexpand\@tempskipa \string#5\noexpand\relax}
+ {\noexpand\blx@refpatch@sect@std@testandruncode{#1}{#2}%
+ \noexpand\@tempskipa \string#5\noexpand\relax}
+ {\togglefalse{blx@tempa}\noexpand\listbreak}
+ {}}}
+
+\edef\blx@refpatch@sect@std@defdo@ssect#1#2{%
+ \def\noexpand\do##1{%
+ \patchcmd##1%
+ {\noexpand\@tempskipa \string#3\noexpand\relax}
+ {\noexpand\blx@refpatch@sect@std@testandruncode{#1}{#2}%
+ \noexpand\@tempskipa \string#3\noexpand\relax}
+ {\togglefalse{blx@tempa}\noexpand\listbreak}
+ {}}}
+
+% {<patch code>}{<section level number>}
+\def\blx@refpatch@sect@std#1#2{%
+ \blx@refpatch@sect@std@pre
+ % \@sect for numbered (unstarred) sections
+ \blx@refpatch@docsvlist
+ {\blx@refpatch@sect@std@defdo@sect{#1}{#2}}
+ {\H@old@sectm@m,% memoir+hyperref (what a mess...)
+ \M@sect,% memoir
+ \H@old@sect,% hyperref
+ \NR@sect,% nameref
+ \scr@sect,% koma-script 3.x
+ \scr@startsection,% bad hack for koma 3.15 <= v <= 3.25
+ \@sect}
+ {\blx@err@patch{\string\@sect}}
+ % \@ssect for un-numbered (starred) sections
+ \blx@refpatch@docsvlist
+ {\blx@refpatch@sect@std@defdo@ssect{#1}{#2}}
+ {\H@old@ssectm@m,% memoir+hyperref (what a mess...)
+ \M@ssect,% memoir
+ \H@old@ssect,% hyperref
+ \NR@ssect,% nameref
+ \scr@ssect,% koma-script 3.x
+ \@ssect}
+ {\blx@err@patch{\string\@ssect}}}
+
+\def\blx@refpatch@sect@std@testandruncode#1#2{%
+ \ifnumequal{#2}{0\csuse{blx@refpatch@current@sectlevel}}
+ {#1}
+ {}}
+
+% Bibliography categories
+
+\let\blx@categories\@empty
+
+% {<category>}
+\newrobustcmd*{\DeclareBibliographyCategory}[1]{%
+ \ifcsundef{blx@catg@#1}
+ {\global\cslet{blx@catg@#1}\@empty
+ \listgadd\blx@categories{#1}}
+ {\blx@error
+ {Category '#1' already declared}
+ {The bibliography category '#1'\MessageBreak
+ has already been declared}}}
+\@onlypreamble\DeclareBibliographyCategory
+
+% {<category>}{<entrykey>,...}
+\newrobustcmd*{\addtocategory}[2]{%
+ \ifcsundef{blx@catg@#1}
+ {\blx@error
+ {Category '#1' not declared}
+ {Use \string\DeclareBibliographyCategory\space to declare}}
+ {\blx@AfterPreamble{%
+ \blx@xsanitizeafter{\forcsvlist{\blx@addtocategory{#1}}}{#2}}}}
+
+% {<category>}{<entrykey>,...}
+\def\blx@addtocategory#1#2{%
+ % If we are adding a set member to a category, make sure we also add the
+ % set parent if it is cited. If it is cited, we should be using the set
+ % parent in the category, not the set child member. blx@setc@... will
+ % only exist if the set parent is also cited as it is only defined when a
+ % member contains \inset which only happens when the set parent is cited.
+ \ifcsdef{blx@setc@\the\c@refsection @#2}
+ {\blx@auxwrite\@mainaux{}{\string\abx@aux@category{#1}{\csuse{blx@setc@\the\c@refsection @#2}}}%
+ \abx@aux@category{#1}{\csuse{blx@setc@\the\c@refsection @#2}}}
+ {}%
+ \blx@auxwrite\@mainaux{}{\string\abx@aux@category{#1}{#2}}%
+ \abx@aux@category{#1}{#2}}
+
+% {<category>}{<entrykey>,...}
+\protected\def\abx@aux@category#1#2{%
+ \xifinlistcs{\detokenize{#2}}{blx@catg@#1}
+ {}
+ {\listcsxadd{blx@catg@#1}{\detokenize{#2}}}}
+
+\blx@AtEndDocument{\let\abx@aux@category\@gobbletwo}
+
+% [<options>]{<resource>,...}
+\renewrobustcmd*{\bibliography}[1]{%
+ \begingroup
+ \def\blx@tempa{file}%
+ \def\blx@tempb{bibtex}%
+ \def\blx@tempc{local}%
+ \undef\blx@tempd
+ \let\blx@tempe\@empty
+ \blx@xsanitizeafter{\forcsvlist\blx@addbib@legacy}{#1}%
+ \endgroup}
+\@onlypreamble\bibliography
+
+\def\blx@addbib@legacy#1{%
+ \begingroup
+ \edef\blx@tempa{\endgroup
+ \noexpand\blx@addbib@resource{\blx@stripbib{#1}\detokenize{.bib}}}%
+ \blx@tempa}
+
+\def\blx@stripbib#1{%
+ \expandafter\blx@stripbib@i\detokenize{#1.bib}&}
+\edef\blx@stripbib@i{%
+ \def\noexpand\blx@stripbib@i##1\detokenize{.bib}##2&}
+\blx@stripbib@i{#1}
+
+% [<options>]{<resource>,...}
+\newrobustcmd*{\addbibresource}{%
+ \blx@addbib\blx@addbib@resource}
+\@onlypreamble\addbibresource
+
+\newrobustcmd*{\addglobalbib}{%
+ \blx@addbib\blx@addbib@global}
+\@onlypreamble\addglobalbib
+
+\newrobustcmd*{\addsectionbib}{%
+ \blx@addbib\blx@addbib@register}
+\@onlypreamble\addsectionbib
+
+\def\blx@addbib#1{%
+ \@ifnextchar[%]
+ {\blx@addbib@i{#1}}
+ {\blx@addbib@i{#1}[]}}
+
+% kill all spaces and %
+% see https://github.com/plk/biblatex/issues/1026
+\def\blx@addbib@i#1[#2]{%
+ \begingroup
+ \@ifnextchar\bgroup
+ {\blx@hook@fileverb\blx@addbib@ii{#1}{#2}}%
+ {\blx@hook@fileverb\blx@addbib@ii{#1}{#2}}}
+
+\def\blx@addbib@ii#1#2#3{%
+ \endgroup
+ \begingroup
+ \def\blx@tempa{file}%
+ \def\blx@tempb{bibtex}%
+ \def\blx@tempc{local}%
+ \undef\blx@tempd
+ \let\blx@tempe\@empty
+ \def\blx@tempf{false}%
+ \blx@kv@setkeys{blx@addbib}{#2}%
+ \blx@xsanitizeafter{#1}{#3}%
+ \endgroup}
+
+\def\blx@hook@fileverb{%
+ \let\do\@makeother
+ \dospecials
+ \catcode`\\=\z@
+ \catcode`\{=\@ne
+ \catcode`\}=\tw@}
+
+\blx@kv@defkey{blx@addbib}{type}{\def\blx@tempa{#1}}
+\blx@kv@defkey{blx@addbib}{datatype}{\def\blx@tempb{#1}}
+\blx@kv@defkey{blx@addbib}{location}{\def\blx@tempc{#1}}
+\blx@kv@defkey{blx@addbib}{label}{\edef\blx@tempd{\detokenize{#1}}}
+\blx@kv@defkey{blx@addbib}{bibencoding}{\def\blx@tempe{#1}}
+\blx@kv@defkey{blx@addbib}{glob}[true]{\def\blx@tempf{#1}}
+
+% \blx@res@type@<resource> resource -> type
+% \blx@res@data@<resource> resource -> datatype
+% \blx@res@loca@<resource> resource -> datatype
+% \blx@res@labl@<resource> label -> resource
+% \blx@res@glob@<resource> glob -> true|false
+
+\def\blx@addbib@register#1{%
+ \csxdef{blx@res@type@#1}{\blx@tempa}%
+ \csxdef{blx@res@data@#1}{\blx@tempb}%
+ \csxdef{blx@res@loca@#1}{\blx@tempc}%
+ \csxdef{blx@res@bibencoding@#1}{\blx@tempe}%
+ \ifdef\blx@tempf
+ {\csxdef{blx@res@glob@#1}{\blx@tempf}}
+ {}%
+ \ifdef\blx@tempd
+ {\csxdef{blx@res@labl@\blx@tempd}{#1}}
+ {}}
+
+\def\blx@addbib@resource#1{%
+ \blx@addbib@register{#1}%
+ \listgadd\blx@bibfiles{#1}%
+ \blx@regbibfile\jobname{#1}}
+
+\def\blx@addbib@global#1{%
+ \blx@addbib@resource{#1}%
+ \listgadd\blx@bibfiles@global{#1}}
+
+\let\blx@bibfiles\@empty
+\let\blx@bibfiles@global\@empty
+
+\def\blx@bibdata#1#2{%
+ \forlistloop{\blx@bibdata@i{#1}}#2}
+\def\blx@bibdata@i#1#2{%
+ \blx@xmlsanitizeafter{\blx@bibdata@ii{#1}{#2}}{#2}}
+\def\blx@bibdata@ii#1#2#3{%
+ \eappto#1{%
+ \blx@xml@datasource
+ {\ifcsdef{blx@res@type@#2}
+ {\csuse{blx@res@type@#2}}
+ {file}}
+ {\ifcsdef{blx@res@data@#2}
+ {\csuse{blx@res@data@#2}}
+ {bibtex}}
+ {\ifcsvoid{blx@res@bibencoding@#2}
+ {}
+ { encoding="\csuse{blx@res@bibencoding@#2}"}}
+ {\ifcsvoid{blx@res@glob@#2}
+ {}
+ { glob="\csuse{blx@res@glob@#2}"}}
+ {#3}}}
+
+%% Citations
+
+\newrobustcmd*{\AtEveryCite}{\gappto\blx@hook@cite}
+\newrobustcmd*{\AtEveryCitekey}{\gappto\blx@hook@citekey}
+\newrobustcmd*{\AtEveryMultiCite}{\gappto\blx@hook@mcite}
+\@onlypreamble\AtEveryCite
+\@onlypreamble\AtEveryCitekey
+\@onlypreamble\AtEveryMultiCite
+
+\newrobustcmd*{\AtEachCitekey}{%
+ \iftoggle{blx@citation}{\appto\blx@hook@citekey}{\@gobble}}
+
+\let\blx@hook@entrykey\@gobble
+\newrobustcmd*{\AtEveryEntrykey}{%
+ \apptocmd{\blx@hook@entrykey}}
+\@onlypreamble\AtEveryEntrykey
+
+\def\blx@imc@UseEveryCiteHook{\csuse{blx@hook@cite}}
+\def\blx@imc@UseEveryCitekeyHook{\csuse{blx@hook@citekey}}
+\def\blx@imc@UseEveryMultiCiteHook{\csuse{blx@hook@mcite}}
+
+\newrobustcmd*{\AtNextCite}{%
+ \ifundef\blx@hook@cite@next
+ {\gdef\blx@hook@cite@next{\global\undef\blx@hook@cite@next}}
+ {}%
+ \gappto\blx@hook@cite@next}
+
+\newrobustcmd*{\AtNextCitekey}{%
+ \ifundef\blx@hook@citekey@next
+ {\gdef\blx@hook@citekey@next{\global\undef\blx@hook@citekey@next}}
+ {}%
+ \gappto\blx@hook@citekey@next}
+
+\newrobustcmd*{\AtNextMultiCite}{%
+ \ifundef\blx@hook@mcite@next
+ {\gdef\blx@hook@mcite@next{\global\undef\blx@hook@mcite@next}}
+ {}%
+ \gappto\blx@hook@mcite@next}
+
+\def\blx@imc@UseNextCiteHook{\csuse{blx@hook@cite@next}}
+\def\blx@imc@UseNextCitekeyHook{\csuse{blx@hook@citekey@next}}
+\def\blx@imc@UseNextMultiCiteHook{\csuse{blx@hook@mcite@next}}
+
+\def\blx@imc@DeferNextCitekeyHook{\undef\blx@hook@citekey@next}
+
+\blx@regimcs{%
+ \UseEveryCiteHook \UseEveryCitekeyHook \UseEveryMultiCiteHook
+ \UseNextCiteHook \UseNextCitekeyHook \UseNextMultiCiteHook
+ \DeferNextCitekeyHook}
+
+% {<style>}
+
+\newrobustcmd*{\RequireCitationStyle}[1]{%
+ \blx@inputonce{#1.cbx}{citation style '#1'}{}{}{}
+ {\blx@error
+ {Style '#1' not found}
+ {The citation style '#1' could not be found}}}
+\@onlypreamble\RequireCitationStyle
+
+% {<code>}
+
+\newrobustcmd*{\InitializeCitationStyle}{\appto\blx@hook@cbxinit}
+\@onlypreamble\InitializeCitationStyle
+
+% {<code>}
+
+\newrobustcmd*{\OnManualCitation}{\appto\blx@hook@mancite}
+\@onlypreamble\OnManualCitation
+
+\newrobustcmd*{\mancite}{%
+ \csuse{blx@hook@mancite}%
+ \blx@ibidreset
+ \blx@idemreset
+ \blx@opcitreset
+ \blx@loccitreset}
+
+% {<entrykey>}{<message>}
+% Wrapper to track cite keys which are \nocited
+\def\blx@nocitation#1#2{%
+ \ifinlist{#1}\blx@nocites
+ {}
+ {\listgadd\blx@nocites{#1}}%
+ \blx@citation@i{#1}{#2}}
+
+% {<entrykey>}{<message>}
+% Just a wrapper to suppress citation tracking in toc/lof etc.
+\def\blx@citation#1#2{%
+ \ifinlist{#1}\blx@directcites
+ {}
+ {\listgadd\blx@directcites{#1}}%
+ \blx@citation@i{#1}{#2}}
+
+\def\blx@citation@i#1#2{%
+ \ifbool{citerequest}
+ {\blx@citation@entry{#1}{#2}}
+ {}}
+
+\def\blx@citation@entry#1#2{%
+ \blx@bibreq{#1}%
+ \ifinlistcs{#1}{blx@cites@\the\c@refsection}
+ {}
+ {\listcsgadd{blx@cites@\the\c@refsection}{#1}}%
+ \blx@auxwrite\@mainaux{}{\string\abx@aux@cite{\the\c@refsection}{#1}}%
+ \ifinlistcs{#1}{blx@segm@\the\c@refsection @\the\c@refsegment}
+ {}
+ {\listcsgadd{blx@segm@\the\c@refsection @\the\c@refsegment}{#1}}%
+ \blx@auxwrite\@mainaux{}{\string\abx@aux@segm{\the\c@refsection}%
+ {\the\c@refsegment}%
+ {\detokenize{#1}}}%
+ \blx@ifdata{#1}
+ {}
+ {\ifcsdef{blx@miss@\the\c@refsection}
+ {\ifinlistcs{#1}{blx@miss@\the\c@refsection}
+ {\@latex@warning{#2{#1}}}
+ {\blx@logreq@active{#2{#1}}}}
+ {\blx@logreq@active{#2{#1}}}}%
+ \blx@hook@entrykey{#1}}
+
+\protected\def\abx@aux@segm#1#2#3{%
+ \xifinlistcs{\detokenize{#3}}{blx@segm@#1@#2}
+ {}
+ {\listcsxadd{blx@segm@#1@#2}{\detokenize{#3}}}}
+
+\def\blx@nocitation@all{%
+ \ifinlist{*}\blx@nocites
+ {}
+ {\listgadd\blx@nocites{*}}%
+ \blx@citation@all}
+
+\def\blx@citation@all{%
+ \blx@auxwrite\@mainaux{}{\string\abx@aux@nociteall}%
+ \ifbool{citerequest}
+ {\global\advance\csname blx@sectionciteorder@\the\c@refsection\endcsname\@ne
+ \blx@bibreq{*}%
+ \global\csletcs
+ {blx@segm@\the\c@refsection @\the\c@refsegment}
+ {blx@dlist@entry@\the\c@refsection @\blx@refcontext@context}%
+ \ifcsvoid{blx@dlist@entry@\the\c@refsection @\blx@refcontext@context}
+ {\blx@logreq@active{}}
+ {}}
+ {}}
+
+\def\abx@aux@nociteall{%
+ \listgadd\blx@nocites{*}}
+
+\protected\def\blx@bibreq#1{%
+ \advance\blx@tempcntc\@ne% holds internal \cite{} citation order
+ \begingroup
+ \blx@xmlsanitizeafter{\def\blx@tempa}{#1}%
+ \let\blx@tempb\@empty
+ % Only output as \nocited if a key wasn't also directly \cite'd
+ % Since citekey output is sequential as cites are read, the .bcf might contain
+ % duplicate keys with differring nocite attributes if \nocite{X} and \cite{X} both occur
+ % but biber deals with this and priorities \cites
+ \ifboolexpr{test {\ifinlist{#1}\blx@nocites}
+ and
+ not test {\ifinlist{#1}\blx@directcites}}
+ {\def\blx@tempb{ nocite="1"}}
+ {}%
+ \blx@auxwrite\blx@bcfout{}{\blx@xml@citekey{\blx@tempa}{\blx@tempb}%
+ {\expandafter\the\csname blx@sectionciteorder@\the\c@refsection\endcsname}%
+ {\expandafter\the\csname blx@tempcntc\endcsname}}%
+ % citeall is always order "0" - this makes no real difference as biber
+ % ignores all other citekeys in the section if citeall is present
+ % \ifstrequal{*}{#1}
+ % {\blx@auxwrite\blx@bcfout{}{\blx@xml@citekey{\blx@tempa}{\blx@tempb}{0}}}
+ % {\blx@auxwrite\blx@bcfout{}{\blx@xml@citekey{\blx@tempa}{\blx@tempb}{%
+ % \expandafter\the\csname blx@sectionciteorder@\the\c@refsection\endcsname}}}%
+ \endgroup}
+
+% {<set>}{<key1,key2,key3>}
+\newrobustcmd*{\defbibentryset}[2]{%
+ \@bsphack
+ \begingroup
+ \blx@xsanitizeafter{\def\blx@tempa}{#1}%
+ \let\blx@tempb\@empty
+ \let\blx@tempc\@empty
+ \blx@xsanitizeafter{\forcsvlist\blx@defentryset@add}{#2}%
+ \ifcsdef{blx@set@\the\c@refsection @\blx@tempa}
+ {\expandafter\ifdefequal
+ \csname blx@set@\the\c@refsection @\blx@tempa\endcsname
+ \blx@tempb
+ {}
+ {\blx@error
+ {Conflicting definitions of '\blx@tempa'}
+ {The entry set '\blx@tempa' has been defined before.%
+ \MessageBreak
+ old: \blx@tempa\space = %
+ \csuse{blx@set@\the\c@refsection @\blx@tempa}\MessageBreak
+ new: \blx@tempa\space = \blx@tempb\MessageBreak
+ I'm ignoring the new definition}}}
+ {\global\cslet{blx@set@\the\c@refsection @\blx@tempa}\blx@tempb
+ \edef\blx@tempa{%
+ \blx@AfterPreamble{\blx@setreq{\blx@tempa}{\blx@tempb}}}%
+ \blx@tempa}%
+ \endgroup
+ \@esphack}
+
+\def\blx@defentryset@add#1{%
+ \edef\blx@tempb{\blx@tempb\blx@tempc#1}%
+ \def\blx@tempc{,}}
+
+\protected\def\blx@setreq#1#2{%
+ \begingroup
+ \blx@xmlsanitizeafter{\def\blx@tempa}{#1}%
+ \blx@xmlsanitizeafter{\def\blx@tempb}{#2}%
+ \blx@auxwrite\blx@bcfout{}{\blx@xml@citeset{\blx@tempa}{\blx@tempb}}%
+ \endgroup}
+
+
+\def\abx@warn@emptycite{%
+ \abx@warn@emptycite@print
+ \abx@warn@emptycite@log}
+
+\def\abx@warn@emptycite@print@text{%
+ \textless empty citation\textgreater}
+
+\def\abx@warn@emptycite@print{%
+ \abx@missing@entry{\abx@warn@emptycite@print@text}}
+
+\def\abx@warn@emptycite@log{%
+ \@latex@warning{\blx@msg@cundefon{}}}
+
+
+% {<entrykey>,...}
+% a crude way to check for a do-nothing argument:
+% loop over it to see what happens
+\protected\def\blx@citeloop#1{%
+ \togglefalse{blx@tempa}%
+ \def\do{\toggletrue{blx@tempa}\listbreak}%
+ \expandafter\docsvlist\expandafter{\detokenize{#1}}%
+ \iftoggle{blx@tempa}
+ {\expandafter\blx@citeloop@i\expandafter{\detokenize{#1}}}
+ {\abx@warn@emptycite}}
+\protected\def\blx@citeloop@i#1{%
+ \begingroup
+ % This must be here and not after \blx@citeadd as this changes the refcontext
+ \letcs\blx@tempb{blx@dlist@centry@\the\c@refsection @\blx@refcontext@context}%
+ \ifundef\blx@tempb
+ {\let\blx@tempb\@empty}
+ {}%
+ % Make sure this counter exists. Sometimes it might not when using, e.g:
+ % refsection=chapter and \includeonly to put in the chapters or when
+ % inserting citations into table of contents
+ \blx@providecount{blx@sectionciteorder@\the\c@refsection}%
+ \global\advance\csname blx@sectionciteorder@\the\c@refsection\endcsname\@ne
+ \blx@tempcnta\z@
+ \blx@tempcntb\z@
+ \blx@tempcntc\z@
+ \let\blx@tempa\@empty
+ \forcsvlist\blx@citeadd{#1}% adds to \blx@tempa
+ \blx@thenotecheck
+ \ifnum\blx@tempcnta>\z@
+ \ifnum\blx@tempcntb>\z@
+ \multicitedelim
+ \fi
+ \else
+ \blx@postpunct@saved
+ \fi
+ % \blx@tempb is a sorted list of all cites, \blx@tempa is the list of cites to
+ % sort using this list
+ \blx@thecitesort
+ \edef\blx@tempa{\endgroup
+ \c@citecount\z@
+ \c@citetotal\the\blx@tempcnta\relax
+ \unexpanded{\forlistloop\blx@citeprint}{\blx@tempb}}%
+ \blx@tempa}
+
+\def\blx@notecheck{%
+ \ifnum\blx@tempcnta>\@ne
+ \blx@warning{%
+ Package option 'sortcites' enabled.\MessageBreak
+ Verify postnote placement}%
+ \fi}
+
+\def\blx@citesort{%
+ \ifnum\blx@tempcnta>\@ne
+ \blx@filtercitesort\blx@tempb{blx@tempa}%
+ \else
+ \blx@citenosort
+ \fi}
+
+\def\blx@citenosort{%
+ \let\blx@tempb\blx@tempa}
+
+\def\abx@missing@entry#1{%
+ \abx@missing{#1}}
+
+% {<entrykey>}
+\def\blx@citeadd#1{%
+ \ifcsdef{blx@keyalias@\the\c@refsection @#1}
+ {\letcs\blx@realkey{blx@keyalias@\the\c@refsection @#1}}
+ {\def\blx@realkey{#1}}%
+ \expandafter\blx@getrefcontext\expandafter{\blx@realkey}% needed for \ifdata
+ \expandafter\blx@citation\expandafter{\blx@realkey}\blx@msg@cundefon
+ \expandafter\blx@ifdata\expandafter{\blx@realkey}
+ {\advance\blx@tempcnta\@ne
+ \listeadd\blx@tempa{\blx@realkey}}
+ {\ifnum\blx@tempcntb>\z@\multicitedelim\fi
+ \expandafter\abx@missing@entry\expandafter{\blx@realkey}%
+ \advance\blx@tempcntb\@ne}}
+
+% set default refcontext for one citation key
+% and then override with data from auto-assign \assignrefcontext* macros, if any
+% <entrykey>
+\def\blx@getrefcontext#1{%
+ % Save refcontext for restoration at end of \citeprint
+ \let\blx@refcontext@context@saved\blx@refcontext@context
+ % Get the default refcontext
+ % If there was one due to appearance in a bib/biblist, use it
+ % otherwise fall back on global refcontext. This can happen for cites
+ % made (a bit strangely but some styles do this) inside a biblist
+ % which never appear in any printed bib/biblist and therefore have no default
+ % refcontext defined
+ \ifcsdef{blx@assignedrefcontextbib@aux@\the\c@refsection @#1}
+ {\letcs\blx@refcontext@context{blx@assignedrefcontextbib@aux@\the\c@refsection @#1}}
+ {\blx@edef@refcontext{\blx@sorting/global//global/global}}%
+ % assignment via keyword list
+ \ifdef\blx@assignedrefcontextkeywlist
+ {\def\do##1{%
+ \blx@imc@ifentrykeyword{#1}{##1}
+ {% weak version
+ \ifboolexpr{test {\ifcsdef{blx@assignedrefcontextkeyws*@\the\c@refsection @##1}}
+ and
+ not togl {blx@refcontext}}% inside explicit non-global refcontext
+ {\letcs\blx@refcontext@context{blx@assignedrefcontextkeyws*@\the\c@refsection @##1}}
+ {}%
+ % strong version
+ \ifcsdef{blx@assignedrefcontextkeyws@\the\c@refsection @##1}
+ {\letcs\blx@refcontext@context{blx@assignedrefcontextkeyws@\the\c@refsection @##1}}
+ {}}
+ {}}%
+ \dolistloop\blx@assignedrefcontextkeywlist}
+ {}%
+ % assignment via category
+ \ifdef\blx@assignedrefcontextcatlist
+ {\def\do##1{%
+ \blx@imc@ifentrycategory{#1}{##1}
+ {% weak version
+ \ifboolexpr{test {\ifcsdef{blx@assignedrefcontextcats*@\the\c@refsection @##1}}
+ and
+ not togl {blx@refcontext}}% inside explicit non-global refcontext
+ {\letcs\blx@refcontext@context{blx@assignedrefcontextcats*@\the\c@refsection @##1}}
+ {}%
+ % strong version
+ \ifcsdef{blx@assignedrefcontextcats@\the\c@refsection @##1}
+ {\letcs\blx@refcontext@context{blx@assignedrefcontextcats@\the\c@refsection @##1}}
+ {}}
+ {}}%
+ \dolistloop\blx@assignedrefcontextcatlist}
+ {}%
+ % assignment via entrykeys
+ % weak version
+ \nottoggle{blx@refcontext}
+ {\ifcsdef{blx@assignedrefcontextkeys*@\the\c@refsection @*}
+ {\letcs\blx@refcontext@context{blx@assignedrefcontextkeys*@\the\c@refsection @*}}
+ {\ifcsdef{blx@assignedrefcontextkeys*@\the\c@refsection @#1}
+ {\letcs\blx@refcontext@context{blx@assignedrefcontextkeys*@\the\c@refsection @#1}}
+ {}}}
+ {}%
+ % strong version
+ \ifcsdef{blx@assignedrefcontextkeys@\the\c@refsection @*}
+ {\letcs\blx@refcontext@context{blx@assignedrefcontextkeys@\the\c@refsection @*}}
+ {\ifcsdef{blx@assignedrefcontextkeys@\the\c@refsection @#1}
+ {\letcs\blx@refcontext@context{blx@assignedrefcontextkeys@\the\c@refsection @#1}}
+ {}}}
+
+% {<entrykey>}
+\protected\def\blx@citeprint#1{%
+ \blx@getrefcontext{#1}%
+ \advance\c@citecount\@ne
+ \addtocounter{instcount}\@ne
+ \ifnum\c@citecount=\@ne
+ \blx@getdata@cite{#1}%
+ \blx@precode
+ \ifnum\c@citetotal>\@ne
+ \blx@resetdata
+ \fi
+ \else
+ \blx@dlimcode
+ \fi
+ \begingroup
+ \ifnum\c@citetotal>\@ne
+ \blx@getdata@cite{#1}%
+ \fi
+ \blx@entrysetcount
+ \blx@setoptions@type\abx@field@@@entrytype
+ \blx@setoptions@entry
+ \blx@backref{#1}%
+ \blx@pagetracker
+ \csuse{blx@hook@citekey}%
+ \csuse{blx@hook@citekey@next}%
+ \blx@beglangcite
+ \blx@execute
+ \blx@loopcode
+ \blx@citecounter
+ \blx@citetracker
+ \blx@ibidtracker
+ \blx@idemtracker
+ \blx@opcittracker
+ \blx@loccittracker
+ \ifnum\c@citecount=\c@citetotal
+ \def\blx@thecheckpunct{\blx@err@nestcite\@gobble}%
+ \blx@postcode
+ \blx@postpunct@saved
+ \fi
+ \blx@endlangcite
+ \endgroup
+ \let\blx@refcontext@context\blx@refcontext@context@saved}
+
+% cite counter
+\def\blx@citecounter@global{%
+ \ifbool{@filesw}
+ {\ifbool{citetracker}
+ {\abx@curr@count{\the\c@refsection}{\abx@field@@@entrykey}%
+ \immediate\write\@mainaux{%
+ \string\abx@aux@count
+ {\the\c@refsection}{\abx@field@@@entrykey}}}
+ {}}
+ {}}
+
+\def\blx@citecounter@context{%
+ \ifbool{@filesw}
+ {\ifbool{citetracker}
+ {\iftoggle{blx@footnote}
+ {\abx@curr@fncount}
+ {\abx@curr@count}
+ {\the\c@refsection}{\abx@field@@@entrykey}%
+ \immediate\write\@mainaux{%
+ \iftoggle{blx@footnote}
+ {\string\abx@aux@fncount}
+ {\string\abx@aux@count}%
+ {\the\c@refsection}{\abx@field@@@entrykey}}}
+ {}}
+ {}}
+
+% {<refsection>}{<entrykey>}
+% set maxcitecounter as well, note that we also define a maxcitecounter across
+% all refsections, but that does not have a high-level interface
+\protected\def\blx@aux@count#1#2{%
+ \csnumgdef{blx@count@#1@\detokenize{#2}}{%
+ \csuse{blx@count@#1@\detokenize{#2}}+1}%
+ \ifnumgreater{\csuse{blx@count@#1@\detokenize{#2}}}{%
+ 0\csuse{blx@maxcitecounter@#1}}
+ {\csnumgdef{blx@maxcitecounter@#1}{%
+ \csuse{blx@count@#1@\detokenize{#2}}}}
+ {}%
+ \ifnumgreater{\csuse{blx@count@#1@\detokenize{#2}}}{%
+ 0\csuse{blx@maxcitecounter}}
+ {\csnumgdef{blx@maxcitecounter}{%
+ \csuse{blx@count@#1@\detokenize{#2}}}}
+ {}}
+
+\protected\def\blx@aux@fncount#1#2{%
+ \csnumgdef{blx@fncount@#1@\detokenize{#2}}{%
+ \csuse{blx@fncount@#1@\detokenize{#2}}+1}%
+ \ifnumgreater{\csuse{blx@fncount@#1@\detokenize{#2}}}{%
+ 0\csuse{blx@maxfncitecounter@#1}}
+ {\csnumgdef{blx@maxfncitecounter@#1}{%
+ \csuse{blx@fncount@#1@\detokenize{#2}}}}
+ {}%
+ \ifnumgreater{\csuse{blx@fncount@#1@\detokenize{#2}}}{%
+ 0\csuse{blx@maxfncitecounter}}
+ {\csnumgdef{blx@maxfncitecounter}{%
+ \csuse{blx@fncount@#1@\detokenize{#2}}}}
+ {}}
+
+\let\abx@aux@count\@gobbletwo
+\let\abx@aux@fncount\@gobbletwo
+
+\protected\def\blx@curr@count#1#2{%
+ \csnumgdef{blx@currcount@#1@#2}{%
+ \csuse{blx@currcount@#1@#2}+1}}
+
+\protected\def\blx@curr@fncount#1#2{%
+ \csnumgdef{blx@currfncount@#1@#2}{%
+ \csuse{blx@currfncount@#1@#2}+1}}
+
+\let\abx@curr@count\@gobbletwo
+\let\abx@curr@fncount\@gobbletwo
+
+\blx@AtEndDocument{%
+ \let\abx@aux@count\@gobbletwo
+ \let\abx@aux@fncount\@gobbletwo
+ \let\abx@curr@count\@gobbletwo
+ \let\abx@curr@fncount\@gobbletwo}
+
+\protected\def\blx@setcitecounter@global{%
+ \c@citecounter0%
+ \csuse{blx@count@\the\c@refsection @\abx@field@@@entrykey}%
+ \relax
+ \c@maxcitecounter0%
+ \csuse{blx@maxcitecounter@\the\c@refsection}%
+ \relax}
+
+\protected\def\blx@setcitecounter@context{%
+ \c@citecounter0%
+ \iftoggle{blx@footnote}
+ {\csuse{blx@fncount@\the\c@refsection @\abx@field@@@entrykey}}
+ {\csuse{blx@count@\the\c@refsection @\abx@field@@@entrykey}}%
+ \relax
+ \c@maxcitecounter0%
+ \iftoggle{blx@footnote}
+ {\csuse{blx@maxfncitecounter@\the\c@refsection}}
+ {\csuse{blx@maxcitecounter@\the\c@refsection}}%
+ \relax}
+
+% cite tracker
+\def\blx@citetracker@global{%
+ \ifbool{citetracker}
+ {\xifinlistcs\abx@field@@@entrykey{blx@bsee@\the\c@refsection}
+ {}
+ {\listcsxadd{blx@bsee@\the\c@refsection}\abx@field@@@entrykey}}
+ {}}
+
+\def\blx@citetracker@context{%
+ \ifbool{citetracker}
+ {\iftoggle{blx@footnote}
+ {\xifinlistcs\abx@field@@@entrykey{blx@fsee@\the\c@refsection}
+ {}
+ {\listcsxadd{blx@fsee@\the\c@refsection}\abx@field@@@entrykey}}
+ {\xifinlistcs\abx@field@@@entrykey{blx@bsee@\the\c@refsection}
+ {}
+ {\listcsxadd{blx@bsee@\the\c@refsection}\abx@field@@@entrykey}}}
+ {}}
+
+\protected\appto\abx@savetrackers{%
+ \global\csletcs{blx@saved@bsee@\the\c@refsection}{blx@bsee@\the\c@refsection}%
+ \global\csletcs{blx@saved@fsee@\the\c@refsection}{blx@fsee@\the\c@refsection}}
+
+\protected\appto\abx@resttrackers{%
+ \global\csletcs{blx@bsee@\the\c@refsection}{blx@saved@bsee@\the\c@refsection}%
+ \global\csletcs{blx@fsee@\the\c@refsection}{blx@saved@fsee@\the\c@refsection}}
+
+\protected\appto\abx@cleartrackers{%
+ \global\cslet{blx@saved@bsee@\the\c@refsection}\@empty
+ \global\cslet{blx@saved@fsee@\the\c@refsection}\@empty}
+
+% ibidem tracker
+\def\blx@ibidtracker@global{%
+ \ifbool{citetracker}
+ {\global\let\blx@lastkey@text\abx@field@@@entrykey}
+ {}}
+
+\def\blx@ibidtracker@context{%
+ \ifbool{citetracker}
+ {\iftoggle{blx@footnote}
+ {\global\let\blx@lastkey@foot\abx@field@@@entrykey}
+ {\global\let\blx@lastkey@text\abx@field@@@entrykey}}
+ {}}
+
+\def\blx@ibidtracker@strict{%
+ \blx@ifcitesingle
+ {\blx@ibidtracker@global}
+ {\blx@ibidreset@global}}%
+
+\def\blx@ibidtracker@constrict{%
+ \blx@ifcitesingle
+ {\iftoggle{blx@footnote}
+ {\blx@mpfnsave}
+ {}%
+ \blx@ibidtracker@context}
+ {\blx@ibidreset@context}}%
+
+\def\blx@ibidreset@force{%
+ \global\undef\blx@lastkey@text
+ \global\undef\blx@lastkey@foot
+ \blx@mpfnreset}
+
+\def\blx@ibidreset@global{%
+ \global\undef\blx@lastkey@text}
+
+\def\blx@ibidreset@context{%
+ \iftoggle{blx@footnote}
+ {\blx@mpfnreset
+ \global\undef\blx@lastkey@foot}
+ {\global\undef\blx@lastkey@text}}
+
+\protected\appto\abx@savetrackers{%
+ \global\let\blx@saved@lastkey@text\blx@lastkey@text
+ \global\let\blx@saved@lastkey@foot\blx@lastkey@foot}
+
+\protected\appto\abx@resttrackers{%
+ \global\let\blx@lastkey@text\blx@saved@lastkey@text
+ \global\let\blx@lastkey@foot\blx@saved@lastkey@foot}
+
+\protected\appto\abx@cleartrackers{%
+ \global\undef\blx@saved@lastkey@text
+ \global\undef\blx@saved@lastkey@foot}
+
+% idem tracker
+\def\blx@idemtracker@global{%
+ \ifbool{citetracker}
+ {\global\let\blx@lasthash@text\abx@field@@@fullhash}
+ {}}
+
+\def\blx@idemtracker@context{%
+ \ifbool{citetracker}
+ {\iftoggle{blx@footnote}
+ {\global\let\blx@lasthash@foot\abx@field@@@fullhash}
+ {\global\let\blx@lasthash@text\abx@field@@@fullhash}}
+ {}}
+
+\let\blx@idemtracker@strict\blx@idemtracker@global
+
+\def\blx@idemtracker@constrict{%
+ \iftoggle{blx@footnote}
+ {\blx@mpfnsave}
+ {}%
+ \blx@idemtracker@context}
+
+\def\blx@idemreset@force{%
+ \global\undef\blx@lasthash@text
+ \global\undef\blx@lasthash@foot
+ \blx@mpfnreset}
+
+\def\blx@idemreset@global{%
+ \global\undef\blx@lasthash@text}
+
+\def\blx@idemreset@context{%
+ \iftoggle{blx@footnote}
+ {\blx@mpfnreset
+ \global\undef\blx@lasthash@foot}
+ {\global\undef\blx@lasthash@text}}
+
+\protected\appto\abx@savetrackers{%
+ \global\let\blx@saved@lasthash@text\blx@lasthash@text
+ \global\let\blx@saved@lasthash@text\blx@lasthash@text}
+
+\protected\appto\abx@resttrackers{%
+ \global\let\blx@lasthash@text\blx@saved@lasthash@text
+ \global\let\blx@lasthash@text\blx@saved@lasthash@text}
+
+\protected\appto\abx@cleartrackers{%
+ \global\undef\blx@saved@lasthash@text
+ \global\undef\blx@saved@lasthash@foot}
+
+% opcit tracker
+\def\blx@opcittracker@global{%
+ \ifbool{citetracker}
+ {\blx@opcit@tracker{text}}
+ {}}
+
+\def\blx@opcittracker@context{%
+ \ifbool{citetracker}
+ {\iftoggle{blx@footnote}
+ {\blx@opcit@tracker{foot}}
+ {\blx@opcit@tracker{text}}}
+ {}}
+
+\def\blx@opcittracker@strict{%
+ \blx@ifcitesingle
+ {\blx@opcittracker@global}
+ {\blx@opcitreset@global}}%
+
+\def\blx@opcittracker@constrict{%
+ \blx@ifcitesingle
+ {\iftoggle{blx@footnote}
+ {\blx@mpfnsave}
+ {}%
+ \blx@opcittracker@context}
+ {\blx@opcitreset@context}}%
+
+\def\blx@opcit@tracker#1{%
+ \blx@imc@iffieldundef{namehash}
+ {}
+ {\global\cslet{blx@lastkey@#1@\abx@field@@@namehash}\abx@field@@@entrykey
+ \xifinlistcs\abx@field@@@namehash{blx@trackhash@#1}
+ {}
+ {\listcsxadd{blx@trackhash@#1}\abx@field@@@namehash}}}
+
+\def\blx@opcit@reset#1{%
+ \begingroup
+ \def\do##1{\global\csundef{blx@lastkey@#1@##1}}%
+ \dolistcsloop{blx@trackhash@#1}%
+ \global\cslet{blx@trackhash@#1}\@empty
+ \endgroup}
+
+\def\blx@opcitreset@force{%
+ \blx@opcit@reset{text}%
+ \blx@opcit@reset{foot}%
+ \blx@mpfnreset}
+
+\def\blx@opcitreset@global{%
+ \blx@opcit@reset{text}}
+
+\def\blx@opcitreset@context{%
+ \iftoggle{blx@footnote}
+ {\blx@opcit@reset{foot}%
+ \blx@mpfnreset}
+ {\blx@opcit@reset{text}}}
+
+\let\blx@trackhash@text\@empty
+\let\blx@trackhash@foot\@empty
+
+\protected\appto\abx@savetrackers{%
+ \begingroup
+ \def\do#1{\global\csletcs{blx@saved@lastkey@text@#1}{blx@lastkey@text@#1}}%
+ \dolistloop\blx@trackhash@text
+ \global\let\blx@saved@trackhash@text\blx@trackhash@text
+ \def\do#1{\global\csletcs{blx@saved@lastkey@foot@#1}{blx@lastkey@foot@#1}}%
+ \dolistloop\blx@trackhash@foot
+ \global\let\blx@saved@trackhash@foot\blx@trackhash@foot
+ \endgroup}
+
+\protected\appto\abx@resttrackers{%
+ \begingroup
+ \blx@opcit@reset{text}%
+ \global\let\blx@trackhash@text\blx@saved@trackhash@text
+ \def\do#1{\global\csletcs{blx@lastkey@text@#1}{blx@saved@lastkey@text@#1}}%
+ \dolistloop\blx@trackhash@text
+ \blx@opcit@reset{foot}%
+ \global\let\blx@trackhash@foot\blx@saved@trackhash@foot
+ \def\do#1{\global\csletcs{blx@lastkey@foot@#1}{blx@saved@lastkey@foot@#1}}%
+ \dolistloop\blx@trackhash@foot
+ \endgroup}
+
+\protected\appto\abx@cleartrackers{%
+ \begingroup
+ \def\do#1{\global\csundef{blx@saved@lastkey@text@#1}}%
+ \dolistloop\blx@saved@trackhash@text
+ \global\undef\blx@saved@trackhash@text
+ \def\do#1{\global\csundef{blx@saved@lastkey@foot@#1}}%
+ \dolistloop\blx@saved@trackhash@foot
+ \global\undef\blx@saved@trackhash@foot
+ \endgroup}
+
+% loccit tracker
+\def\blx@loccittracker@global{%
+ \ifbool{citetracker}
+ {\blx@loccit@tracker{text}}
+ {}}
+
+\def\blx@loccittracker@context{%
+ \ifbool{citetracker}
+ {\iftoggle{blx@footnote}
+ {\blx@loccit@tracker{foot}}
+ {\blx@loccit@tracker{text}}}
+ {}}
+
+\def\blx@loccittracker@strict{%
+ \ifbool{citetracker}
+ {\blx@loccit@stricttracker{text}}
+ {}}
+
+\def\blx@loccittracker@constrict{%
+ \ifbool{citetracker}
+ {\iftoggle{blx@footnote}
+ {\blx@mpfnsave
+ \blx@loccit@stricttracker{foot}}
+ {\blx@loccit@stricttracker{text}}}
+ {}}
+
+\def\blx@loccit@tracker#1{%
+ \global\csundef{blx@lastnote@#1@\abx@field@@@entrykey}%
+ \blx@imc@iffieldundef{postnote}
+ {}
+ {\global\cslet{blx@lastnote@#1@\abx@field@@@entrykey}\abx@field@@@postnote
+ \xifinlistcs\abx@field@@@entrykey{blx@trackkeys@#1}
+ {}
+ {\listcsxadd{blx@trackkeys@#1}\abx@field@@@entrykey}}}
+
+\def\blx@loccit@stricttracker#1{%
+ \global\csundef{blx@lastnote@#1@\abx@field@@@entrykey}%
+ \blx@imc@iffieldundef{postnote}
+ {}
+ {\blx@ifcitesingle
+ {\expandafter\blx@imc@ifpages
+ \expandafter{\abx@field@@@postnote}
+ {\global\cslet{blx@lastnote@#1@\abx@field@@@entrykey}\abx@field@@@postnote
+ \xifinlistcs\abx@field@@@entrykey{blx@trackkeys@#1}
+ {}
+ {\listcsxadd{blx@trackkeys@#1}\abx@field@@@entrykey}}
+ {}}
+ {}}}
+
+\def\blx@loccit@reset#1{%
+ \begingroup
+ \def\do##1{\global\csundef{blx@lastnote@#1@##1}}%
+ \dolistcsloop{blx@trackkeys@#1}%
+ \global\cslet{blx@trackkeys@#1}\@empty
+ \endgroup}
+
+\def\blx@loccitreset@force{%
+ \blx@loccit@reset{text}%
+ \blx@loccit@reset{foot}%
+ \blx@mpfnreset}
+
+\def\blx@loccitreset@global{%
+ \blx@loccit@reset{text}}
+
+\def\blx@loccitreset@context{%
+ \iftoggle{blx@footnote}
+ {\blx@loccit@reset{foot}%
+ \blx@mpfnreset}
+ {\blx@loccit@reset{text}}}
+
+\let\blx@trackkeys@text\@empty
+\let\blx@trackkeys@foot\@empty
+
+\protected\appto\abx@savetrackers{%
+ \begingroup
+ \def\do#1{\global\csletcs{blx@saved@lastnote@text@#1}{blx@lastnote@text@#1}}%
+ \dolistloop\blx@trackkeys@text
+ \global\let\blx@saved@trackkeys@text\blx@trackkeys@text
+ \def\do#1{\global\csletcs{blx@saved@lastnote@foot@#1}{blx@lastnote@foot@#1}}%
+ \dolistloop\blx@trackkeys@foot
+ \global\let\blx@saved@trackkeys@foot\blx@trackkeys@foot
+ \endgroup}
+
+\protected\appto\abx@resttrackers{%
+ \begingroup
+ \blx@loccit@reset{text}%
+ \global\let\blx@trackkeys@text\blx@saved@trackkeys@text
+ \def\do#1{\global\csletcs{blx@lastnote@text@#1}{blx@saved@lastnote@text@#1}}%
+ \dolistloop\blx@trackkeys@text
+ \blx@loccit@reset{foot}%
+ \global\let\blx@trackkeys@foot\blx@saved@trackkeys@foot
+ \def\do#1{\global\csletcs{blx@lastnote@foot@#1}{blx@saved@lastnote@foot@#1}}%
+ \dolistloop\blx@trackkeys@foot
+ \endgroup}
+
+\protected\appto\abx@cleartrackers{%
+ \begingroup
+ \def\do#1{\global\csundef{blx@saved@lastnote@text@#1}}%
+ \dolistloop\blx@saved@trackkeys@text
+ \global\undef\blx@saved@trackkeys@text
+ \def\do#1{\global\csundef{blx@saved@lastnote@foot@#1}}%
+ \dolistloop\blx@saved@trackkeys@foot
+ \global\undef\blx@saved@trackkeys@foot
+ \endgroup}
+
+\def\blx@addbackref#1{%
+ \ifcsdef{blx@setp@\the\c@refsection @#1}
+ {\ifcase\blx@backrefsetstyle
+ \blx@addbackref@i{#1}%
+ \or
+ \blx@addbackref@ii{setp}{#1}%
+ \or
+ \blx@addbackref@i{#1}%
+ \or
+ \blx@addbackref@i{#1}%
+ \or
+ \blx@addbackref@i{#1}%
+ \blx@addbackref@ii{setp}{#1}%
+ \or
+ \blx@addbackref@i{#1}%
+ \blx@addbackref@ii{setp}{#1}%
+ \fi}
+ {\ifcsdef{blx@setc@\the\c@refsection @#1}
+ {\ifcase\blx@backrefsetstyle
+ \blx@addbackref@ii{setc}{#1}%
+ \or
+ \blx@addbackref@i{#1}%
+ \or
+ \blx@addbackref@i{#1}%
+ \or
+ \blx@addbackref@i{#1}%
+ \blx@addbackref@ii{setc}{#1}%
+ \or
+ \blx@addbackref@i{#1}%
+ \or
+ \blx@addbackref@i{#1}%
+ \blx@addbackref@ii{setc}{#1}%
+ \fi}
+ {\blx@addbackref@i{#1}}}}
+
+\def\blx@addbackref@i#1{%
+ \ifbacktracker
+ \blx@leavevmode
+ \if@filesw
+ \protected@write\@mainaux{}{\string\abx@aux@backref
+ {\the\c@instcount}{#1}{\the\c@refsection}%
+ {\thepage}{\noexpand\the\c@page}}%
+ \fi
+ \fi}
+
+\def\blx@addbackref@ii#1#2{%
+ \expandafter\expandafter\expandafter\forcsvlist
+ \expandafter\expandafter\expandafter\blx@addbackref@i
+ \expandafter\expandafter\expandafter{%
+ \csname blx@#1@\the\c@refsection @#2\endcsname}}
+
+% {<instcount>}{<entrykey>}{<refsection>}{<page>}{<page int>}
+\protected\def\blx@aux@backref#1#2#3#4#5{%
+ \ifcsundef{blx@pref@#3@\detokenize{#2}}
+ {\global\cslet{blx@pref@#3@\detokenize{#2}}\@empty
+ \expandafter\blx@onlypreamble\csname blx@pref@#3@\detokenize{#2}\endcsname}
+ {}%
+ \blx@ifprintableinlistcs{#4}{blx@pref@#3@\detokenize{#2}}
+ {}
+ {\listcsgadd{blx@pref@#3@\detokenize{#2}}{#4}}%
+ \blx@addpagesum{#1}{#5}}
+
+\blx@AtEndDocument{%
+ \def\abx@aux@backref#1#2#3#4#5{\blx@addpagesum{#1}{#5}}}
+
+% {<true>}{<false>}
+\def\blx@ifcitesingle{%
+ \ifnum\c@citetotal=\@ne
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi}
+
+% hyperref interface
+\appto\blx@mkhyperref{%
+ \protected\def\blx@imc@bibhyperref{%
+ \@ifnextchar[%]
+ {\blx@bibhyperref}
+ {\blx@bibhyperref[\abx@field@@@entrykey]}}%
+ \ifundef\hyper@natanchorstart
+ {\long\def\blx@bibhyperref[#1]#2{%
+ \blx@sfsave\hyperlink{cite.\the\c@refsection @#1}{\blx@sfrest
+ #2%
+ \blx@sfsave}\blx@sfrest}%
+ \protected\long\def\blx@imc@bibhyperlink#1#2{%
+ \blx@sfsave\hyperlink{cite.\the\c@refsection:#1}{\blx@sfrest
+ #2%
+ \blx@sfsave}\blx@sfrest}%
+ \protected\long\def\blx@imc@bibhypertarget#1#2{%
+ \blx@sfsave\hypertarget{cite.\the\c@refsection:#1}{\blx@sfrest
+ #2%
+ \blx@sfsave}\blx@sfrest}}%
+ {\long\def\blx@bibhyperref[#1]#2{%
+ \blx@sfsave\hyper@natlinkstart{\the\c@refsection @#1}\blx@sfrest
+ #2%
+ \blx@sfsave\hyper@natlinkend\blx@sfrest}%
+ \protected\long\def\blx@imc@bibhyperlink#1#2{%
+ \blx@sfsave\hyper@natlinkstart{\the\c@refsection:#1}\blx@sfrest
+ #2%
+ \blx@sfsave\hyper@natlinkend\blx@sfrest}%
+ \protected\long\def\blx@imc@bibhypertarget#1#2{%
+ \blx@sfsave\hyper@natanchorstart{\the\c@refsection:#1}\blx@sfrest
+ #2%
+ \blx@sfsave\hyper@natanchorend\blx@sfrest}}
+ \let\blx@imc@ifhyperref\@firstoftwo
+ \def\blx@sf{\spacefactor}%
+ \def\blx@sfsave{%
+ \blx@leavevmode
+ \numgdef\blx@sf{\spacefactor}}%
+ \def\blx@sfrest{%
+ \ifhmode\spacefactor\blx@sf\relax\fi
+ \gdef\blx@sf{\spacefactor}}}
+
+\appto\blx@mknohyperref{%
+ \protected\def\blx@imc@bibhyperref{\@ifnextchar[\blx@nohyperref\@firstofone}%
+ \def\blx@nohyperref[#1]#2{#2}%
+ \let\blx@imc@bibhyperlink\@secondoftwo
+ \let\blx@imc@bibhypertarget\@secondoftwo
+ \let\blx@imc@ifhyperref\@secondoftwo}
+
+\blx@regimcs{%
+ \bibhyperref \bibhyperlink \bibhypertarget \ifhyperref}
+
+% {<entrykey>,...}
+\protected\def\nocite#{\blx@nocite}
+
+\def\blx@nocite#1{%
+ \@bsphack
+ \blx@AfterPreamble{%
+ \ifstrequal{*}{#1}
+ {\blx@nocitation@all}
+ {\blx@xsanitizeafter{\forcsvlist\blx@nocite@do}{#1}}}%
+ \@esphack}
+
+\def\blx@nocite@do#1{%
+ % Make sure this counter exists. Sometimes it might not when using, e.g:
+ % refsection=chapter and \includeonly to put in the chapters or when
+ % inserting citations into table of contents
+ \blx@providecount{blx@sectionciteorder@\the\c@refsection}%
+ \global\advance\csname blx@sectionciteorder@\the\c@refsection\endcsname\@ne
+ \blx@nocitation{#1}\blx@msg@cundef}
+
+% {<macro>}[<arg1>][<arg2>]{<arg3>}
+% => <macro>{<arg1>}{<arg2>}{<arg3>}
+\protected\def\blx@citeargs#1{%
+ \@ifnextchar[%]
+ {\blx@citeargs@i{#1}}
+ {\blx@citeargs@iii{#1{}{}}}}
+\long\def\blx@citeargs@i#1[#2]{%
+ \@ifnextchar[%]
+ {\blx@citeargs@ii{#1{#2}}}
+ {\blx@citeargs@iii{#1{}{#2}}}}
+\long\def\blx@citeargs@ii#1[#2]{%
+ \blx@citeargs@iii{#1{#2}}}
+\long\def\blx@citeargs@iii#1#2{%
+ \blx@xsanitizeafter{#1}{#2}}
+
+% {<macro>}(<arg1>)(<arg2>)
+% => <macro>{<arg1>}{<arg2>}
+\protected\def\blx@multiargs#1{%
+ \@ifnextchar(%)
+ {\blx@multiargs@i{#1}}
+ {#1{}{}}}
+\long\def\blx@multiargs@i#1(#2){%
+ \@ifnextchar(%)
+ {\blx@multiargs@ii{#1{#2}}}
+ {#1{}{#2}}}
+\long\def\blx@multiargs@ii#1(#2){#1{#2}}
+
+% {<macro>}[<arg1>][<arg2>]{<arg3>}<punct>
+% => <macro>{<arg1>}{<arg2>}{<arg3>}{<punctcmd>}
+\protected\def\blx@citepunct#1{%
+ \blx@citeargs{\blx@citepunct@i{#1}}}
+\long\def\blx@citepunct@i#1#2#3#4{%
+ \blx@thecheckpunct{#1{#2}{#3}{#4}}}
+
+% {<csname>}[<arg1>][<arg2>]{arg3}[arg4][arg5][arg6]{arg7}<punct>
+% => <macro>{<arg1>}{<arg2>}{<arg3>}{<arg4>}{<arg5>}{<arg6>}{arg7}{<punctcmd>}
+\protected\def\blx@citexpunct#1{%
+ \blx@citeargs{\blx@citexpunct@i{#1}}}
+\long\def\blx@citexpunct@i#1#2#3#4{%
+ \@ifnextchar[%]
+ {\blx@citexpunct@ii{#1}{{#2}{#3}{#4}}}
+ {\blx@citexpunct@ii{#1}{{#2}{#3}{#4}}[#1]}}
+\long\def\blx@citexpunct@ii#1#2[#3]{%
+ \@ifnextchar[%]
+ {\blx@citexpunct@iii{#1}{#2{#3}}}
+ {\blx@citexpunct@iii{#1}{#2{#3}}[\blx@msform]}}
+ \long\def\blx@citexpunct@iii#1#2[#3]{%
+ \@ifnextchar[%]
+ {\blx@citexpunct@iv{#1}{#2{#3}}}
+ {\blx@citexpunct@iv{#1}{#2{#3}}[\blx@mslang]}}
+\long\def\blx@citexpunct@iv#1#2[#3]#4{%
+ \blx@thecheckpunct{\blxcitecmd{#1}#2{#3}{#4}}}
+
+% {<code>}<punct> => <code>{<punctcmd>}
+\long\def\blx@checkpunct#1{%
+ \begingroup
+ \def\blx@tempa{\endgroup#1}%
+ \futurelet\blx@tempb\blx@checkpunct@i}
+\def\blx@checkpunct@i{%
+ \expandafter\blx@checkpunct@ii\blx@autopunct&}
+\def\blx@checkpunct@ii#1{%
+ \ifx#1&%
+ \expandafter\blx@checkpunct@iii
+ \fi
+ \ifx#1\blx@tempb
+ \expandafter\blx@checkpunct@iv
+ \fi
+ \blx@checkpunct@ii}
+\def\blx@checkpunct@iii#1\blx@checkpunct@ii{%
+ \global\undef\abx@field@@@postpunct
+ \blx@tempa{\blx@postpunct}}
+\def\blx@checkpunct@iv#1\blx@checkpunct@ii#2&#3{%
+ \gdef\abx@field@@@postpunct{#3}%
+ \edef\blx@tempa{%
+ \expandonce\blx@tempa{%
+ \ifcsdef{blx@pm@\detokenize{#3}}
+ {\csname blx@imc@add\csname blx@pm@\detokenize{#3}\endcsname
+ \endcsname}
+ {\noexpand#3}}}%
+ \blx@tempa}
+
+\long\def\blx@nocheckpunct#1{#1{}}
+
+\protected\def\blx@citeinit{%
+ \iftoggle{blx@bibliography}
+ {}
+ {\toggletrue{blx@citation}}%
+ \blx@blxinit
+ \citesetup
+ \blx@setsfcodes
+ \blx@postpunct@agroup
+ \blx@resetdata
+ \blx@leavevmode
+ \csuse{blx@hook@cite}%
+ \csuse{blx@hook@cite@next}%
+ \let\blx@citeinit\blx@resetdata}
+
+\protected\def\blx@citecmdinit{%
+ \blx@leavevmode@cite
+ \iftoggle{blx@bibliography}
+ {}
+ {\blx@initunit}}
+
+% *{<command>}[<wrapper>]{<precode>}{<loopcode>}{<delimcode>}{<postcode>}
+\newrobustcmd*{\DeclareCiteCommand}{%
+ \@ifstar{\blx@defcitecmd*}{\blx@defcitecmd{}}}
+
+\def\blx@defcitecmd#1#2{%
+ \begingroup
+ \escapechar\m@ne
+ \edef\blx@tempa{\endgroup
+ \noexpand\blx@defcitecmd@i{#1}{\string#2}}%
+ \blx@tempa}
+
+\def\blx@defcitecmd@i#1#2{%
+ \listadd\blx@citecmds{#2}%
+ \blx@checkcitecmd{#2}{#1}%
+ \protected\csdef{#2}{%
+ \blx@citecmdinit
+ \@ifstar
+ {\blx@citepunct{\blxcitecmd{#2*}}}
+ {\blx@citepunct{\blxcitecmd{#2}}}}%
+ \@ifnextchar[%]
+ {\blx@defcitecmd@iii{#2#1}}
+ {\blx@defcitecmd@ii{#2#1}}}
+
+\long\def\blx@defcitecmd@ii#1{%
+ \csundef{blx@defcite@wrapper@#1}%
+ \blx@defcitecmd@iv{#1}%
+ \blx@defcitecmd@v{#1}}
+
+\long\def\blx@defcitecmd@iii#1[#2]{%
+ \csdef{blx@defcite@wrapper@#1}{#2}%
+ \blx@defcitecmd@iv{#1}%
+ \blx@defcitecmd@v{#1}}
+
+\long\def\blx@defcitecmd@iv#1{%
+ \protected\long\csedef{blx@cite@#1}##1##2##3##4{%
+ \ifboolexpe{test {\ifcsundef{blx@defcite@wrapper@#1}}
+ and
+ (test {\ifcsundef{blx@citepunct@#1}}
+ or
+ test {\ifcsequal{blx@citepunct@#1}{blx@citepunctid@pos@c}})}
+ {}
+ {\begingroup
+ \blx@citeinit}%
+ \ifcsequal{blx@citepunct@#1}{blx@citepunctid@pos@l}
+ {\noexpand\unspace##4}
+ {}%
+ \ifcsequal{blx@citepunct@#1}{blx@citepunctid@pos@f}
+ {\noexpand\iftoggle{blx@footnote}{}{\unspace##4}}
+ {}%
+ \ifcsundef{blx@defcite@wrapper@#1}
+ {\blxciteicmd{#1}{##1}{##2}{##3}{%
+ \ifcsundef{blx@citepunct@#1}{##4}{}%
+ \ifcsequal{blx@citepunct@#1}{blx@citepunctid@pos@c}{##4}{}}}
+ {\csexpandonce{blx@defcite@wrapper@#1}{%
+ \blxciteicmd{#1}{##1}{##2}{##3}{%
+ \ifcsequal{blx@citepunct@#1}{blx@citepunctid@pos@c}{##4}{}}}%
+ \ifcsundef{blx@citepunct@#1}{##4}{}}%
+ \ifcsequal{blx@citepunct@#1}{blx@citepunctid@pos@r}{##4}{}%
+ \ifcsequal{blx@citepunct@#1}{blx@citepunctid@pos@f}
+ {\noexpand\iftoggle{blx@footnote}{##4}{}}
+ {}%
+ \ifboolexpe{test {\ifcsundef{blx@defcite@wrapper@#1}}
+ and
+ (test {\ifcsundef{blx@citepunct@#1}}
+ or
+ test {\ifcsequal{blx@citepunct@#1}{blx@citepunctid@pos@c}})}
+ {}
+ {\endgroup}}}
+
+\long\def\blx@defcitecmd@v#1#2#3#4#5{%
+ \protected\long\csdef{blx@citei@#1}##1##2##3##4{%
+ \ifblank{##1}
+ {}
+ {\def\abx@field@@@prenote{##1}}%
+ \ifblank{##2}
+ {\let\blx@thenotecheck\relax}
+ {\def\abx@field@@@postnote{##2}%
+ \iftoggle{blx@volcite}
+ {\blx@defvolcitepostnote##2}
+ {}}%
+ \def\blx@precode{\delimcontext{#1}#2}%
+ \def\blx@loopcode{#3}%
+ \def\blx@dlimcode{#4}%
+ \def\blx@postcode{#5}%
+ \def\blx@postpunct@saved{##4}%
+ \blx@citeloop{##3}%
+ \endgroup}}
+
+% {<type>}{<name>}{*}
+\def\blx@checkcitecmd#1#2{%
+ \ifblank{#2}
+ {\ifcsdef{blx@cite@#1}
+ {\blx@info{Redefining '\@backslashchar#1'}}
+ {\ifcsundef{#1}
+ {}
+ {\blx@warning@noline{Redefining '\@backslashchar#1'}}}%
+ \ifcsdef{blx@cite@#1*}
+ {}
+ {\csedef{blx@cite@#1*}{%
+ \expandafter\noexpand\csname blx@cite@#1\endcsname}%
+ \csedef{blx@citei@#1*}{%
+ \expandafter\noexpand\csname blx@citei@#1\endcsname}}}
+ {\ifcsdef{blx@cite@#1}
+ {}
+ {\csdef{blx@cite@#1}{\blx@err@citecmd{#1}}%
+ \csdef{blx@citei@#1}{\blx@err@citecmd{#1}}}}}
+
+% {<name>}{prenote}{postnote}{citekey}{punct}
+\newrobustcmd*{\blxcitecmd}[1]{%
+ \ifcsundef{blx@cite@#1}
+ {\blx@err@citecmd{#1}}
+ {\csuse{blx@cite@#1}}}
+
+\newrobustcmd*{\blxciteicmd}[1]{%
+ \begingroup
+ \blx@citeinit
+ \ifcsundef{blx@citei@#1}
+ {\blx@err@citecmd{#1}}
+ {\csuse{blx@citei@#1}}}
+
+% {<multicitecount>}{<name>}{prenote}{postnote}{citekey}{punct}
+\protected\def\blxmciteicmd#1{%
+ \c@multicitecount#1\relax
+ \blxciteicmd}
+
+% {<multicitetotal>}{<multiprenote>}{<multipostnote>}
+\protected\def\blxmcites#1#2#3{%
+ \begingroup
+ \blx@citeinit
+ \c@multicitecount\z@
+ \c@multicitetotal#1\relax
+ \ifnum\c@multicitetotal>\@ne
+ \let\blx@ifcitesingle\@secondoftwo
+ \fi
+ \csuse{blx@hook@mcite}%
+ \csuse{blx@hook@mcite@next}%
+ \ifblank{#2}%
+ {}
+ {\def\abx@field@@@multiprenote{#2}}%
+ \ifblank{#3}%
+ {}
+ {\def\abx@field@@@multipostnote{#3}}%
+ \usebibmacro{multiprenote}}
+
+\protected\def\blxendmcites{%
+ \usebibmacro{multipostnote}%
+ \endgroup}
+
+% {<command>}[<wrapper>]{<cite>}{<delimiter>}
+\newrobustcmd{\DeclareMultiCiteCommand}[1]{%
+ \ifundef#1%
+ {}
+ {\blx@info{Redefining '\string#1'}}%
+ \@ifnextchar[%]
+ {\blx@defmcitecmd{#1}}
+ {\blx@defmcitecmd{#1}[\@firstofone]}}
+
+\def\blx@defmcitecmd#1[#2]#3#4{%
+ \begingroup
+ \escapechar\m@ne
+ \edef\blx@tempa{\endgroup
+ \listadd\noexpand\blx@citecmds{\string#1}%
+ \protected\def\noexpand#1{%
+ \blx@citecmdinit
+ \noexpand\@ifstar
+ {\expandafter\noexpand
+ \csname blx@mcite@\string#1\endcsname*%
+ \expandafter\noexpand
+ \csname blx@mcitei@\string#1\endcsname}
+ {\expandafter\noexpand
+ \csname blx@mcite@\string#1\endcsname{}%
+ \expandafter\noexpand
+ \csname blx@mcitei@\string#1\endcsname}}%
+ \protected\csdef{blx@mcite@\string#1}####1####2{%
+ \begingroup
+ \blx@citeinit
+ \noexpand\blx@multicite
+ ####2%
+ {\unexpanded{#2}}%
+ {\string#3####1}%
+ {\unexpanded{#4}}}%
+ \protected\long\csdef{blx@mcitei@\string#1}%
+ }%
+ \blx@tempa##1##2##3{##1{##2}##3\endgroup}}
+
+% {<command>}{<wrapper>}{<citecmd>}{<delimiter>} =>
+% <init><command>{<wrapper>}{<cites>}{<punct>}
+\def\blx@multicite#1#2#3#4{%
+ \begingroup
+ \csuse{blx@hook@mcite@before}%
+ \def\blx@tempa{#1}%
+ \def\blx@tempb{#2}%
+ \def\blx@tempc{#3}%
+ \def\blx@tempd{#4}%
+ \c@multicitetotal\z@
+ \blx@multiargs\blx@multicite@i}
+
+\def\blx@multicite@i#1#2{%
+ \ifblank{#1}%
+ {\let\abx@field@@@multiprenote\@empty}%
+ {\def\abx@field@@@multiprenote{#1}}%
+ \ifblank{#2}%
+ {\let\abx@field@@@multipostnote\@empty}%
+ {\def\abx@field@@@multipostnote{#2}}%
+ \let\blx@tempe\@empty
+ \let\blx@tempf\@empty
+ \togglefalse{blx@tempa}%
+ \blx@multiparse}
+
+\def\blx@multicite@add#1#2#3{%
+ \togglefalse{blx@tempa}%
+ \advance\c@multicitetotal\@ne
+ \eappto\blx@tempe{%
+ \expandonce\blx@tempf
+ \blxmciteicmd{\the\c@multicitetotal}%
+ {\expandonce\blx@tempc}\unexpanded{{#1}{#2}{#3}}{}}%
+ \let\blx@tempf\blx@tempd
+ \blx@multiparse}
+
+\def\blx@multicite@end#1{%
+ \edef\blx@tempa{\endgroup
+ \expandonce\blx@tempa
+ {\expandonce\blx@tempb}%
+ {\blxmcites
+ {\the\c@multicitetotal}%
+ {\expandonce\abx@field@@@multiprenote}%
+ {\expandonce\abx@field@@@multipostnote}%
+ \expandonce\blx@tempe
+ \blxendmcites}%
+ {#1}%
+ \iftoggle{blx@tempa}{\relax\space}{}}%
+ \blx@tempa}
+
+\def\blx@multiparse{%
+ \futurelet\@let@token\blx@multiparse@i}
+
+\def\blx@multiparse@i{%
+ \ifx\@let@token\relax
+ \blx@multiparse@ii{\blx@multicite@end{}}%
+ \fi
+ \ifx\@let@token[%]
+ \blx@multiparse@ii{\blx@citeargs\blx@multicite@add}%
+ \fi
+ \ifx\@let@token\bgroup
+ \blx@multiparse@ii{\blx@citeargs\blx@multicite@add}%
+ \fi
+ \ifx\@let@token\@sptoken
+ \blx@multiparse@ii\blx@multiparse@iii
+ \fi
+ \iftrue
+ \iftoggle{blx@tempa}
+ {\blx@multiparse@ii{\blx@multicite@end{}}}
+ {\blx@multiparse@ii{\blx@thecheckpunct\blx@multicite@end}}%
+ \fi
+ &}
+
+\def\blx@multiparse@ii#1#2&{\fi#1}
+\csdef{blx@multiparse@iii} {\toggletrue{blx@tempa}\blx@multiparse}
+
+% {<name>}[l|i|r]{<cite>}{<multicite>}
+\newrobustcmd*{\DeclareAutoCiteCommand}[1]{%
+ \ifcsundef{blx@acite@#1}
+ {}
+ {\blx@info{Redefining autocite command '#1'}}%
+ \@ifnextchar[%]
+ {\blx@defautocmd@i{#1}}
+ {\blx@defautocmd@i{#1}[r]}}
+
+\def\blx@defautocmd@i#1[#2]#3#4{%
+ \begingroup
+ \escapechar\m@ne
+ \edef\blx@tempa{\endgroup
+ \noexpand\blx@defautocmd@ii{#1}{#2}%
+ {\string#3}{\string#4}}%
+ \blx@tempa}
+
+\def\blx@defautocmd@ii#1#2#3#4{%
+ \protected\csedef{blx@acite@#1}{%
+ \blx@citecmdinit
+ \noexpand\@ifstar
+ {\blx@citepunct{\expandafter\noexpand
+ \csname blx@acitei@#1\endcsname*}}
+ {\blx@citepunct{\expandafter\noexpand
+ \csname blx@acitei@#1\endcsname{}}}}%
+ \protected\csedef{blx@acitei@#1}##1##2##3##4##5{%
+ \begingroup
+ \blx@citeinit
+ \if l#2\noexpand\unspace##5\fi
+ \if f#2\noexpand\iftoggle{blx@footnote}{}{\unspace##5}\fi
+ \blxcitecmd{#3##1}{##2}{##3}{##4}{}%
+ \if r#2##5\fi
+ \if f#2\noexpand\iftoggle{blx@footnote}{##5}{}\fi
+ \endgroup}%
+ \protected\csedef{blx@macite@#1}{%
+ \blx@citecmdinit
+ \noexpand\@ifstar
+ {\expandafter\noexpand
+ \csname blx@macitei@#1\endcsname*%
+ \expandafter\noexpand
+ \csname blx@maciteii@#1\endcsname}
+ {\expandafter\noexpand
+ \csname blx@macitei@#1\endcsname{}%
+ \expandafter\noexpand
+ \csname blx@maciteii@#1\endcsname}}%
+ \csedef{blx@macitei@#1}{\csname blx@mcite@#4\endcsname}%
+ \protected\csedef{blx@maciteii@#1}##1##2##3{%
+ \if l#2\noexpand\unspace##3\fi
+ \if f#2\noexpand\iftoggle{blx@footnote}{}{\unspace##3}\fi
+ ##1{##2}%
+ \if r#2##3\fi
+ \if f#2\noexpand\iftoggle{blx@footnote}{##3}{}\fi
+ \endgroup}}
+
+% {<characters>}
+\newrobustcmd*{\DeclareAutoPunctuation}[1]{%
+ \ifblank{#1}
+ {\let\blx@thecheckpunct\blx@nocheckpunct}
+ {\let\blx@thecheckpunct\blx@checkpunct
+ \def\blx@autopunct{#1}}}
+
+% {<command>}{<pos marker>}
+% pos markers are:
+% l: move punctuation before the command (i.e. left of it)
+% r: leave punctuation after the command (i.e. to the right)
+% f: like l in normal text, like r in footnotes
+% c: pass on to the cite command,
+% the punctuation will eventually end up as field 'postpunct'
+% d: discard the punctuation
+% o (or any other value): restores the old standard behaviour
+% r for wrapped citation commands,
+% c for unwrapped ones
+\newrobustcmd*{\DeclareCitePunctuationPosition}[2]{%
+ \begingroup
+ \escapechar\m@ne
+ \edef\blx@tempa{\endgroup
+ \noexpand\blx@defcitepunctpos@i{\string#1}{#2}}%
+ \blx@tempa}
+
+\def\blx@citepunctid@pos@l{l}
+\def\blx@citepunctid@pos@r{r}
+\def\blx@citepunctid@pos@f{f}
+\def\blx@citepunctid@pos@c{c}
+\def\blx@citepunctid@pos@d{d}
+
+\def\blx@defcitepunctpos@i#1#2{%
+ \ifcsundef{blx@citepunctid@pos@#2}
+ {\csundef{blx@citepunct@#1}}
+ {\csletcs{blx@citepunct@#1}{blx@citepunctid@pos@#2}}%
+ \blx@defcitecmd@iv{#1}}
+
+\AfterEndPreamble{% babel
+ \begingroup
+ \makeatletter
+ \endlinechar\m@ne
+ \scantokens\expandafter{%
+ \expandafter\gdef
+ \expandafter\blx@autopunct
+ \expandafter{\blx@autopunct}}%
+ \endgroup}
+
+\listadd\blx@citecmds{citefield}
+% [<prenote>][<postnote>]{<entrykey>,...}[<format>][msform][mslang]{<field>}<punct>
+\newrobustcmd*{\citefield}{\blx@citexpunct{citefield}}
+\long\csdef{blx@cite@citefield}#1#2#3#4#5#6#7#8{%
+ \begingroup
+ \blx@citecmdinit
+ \blx@citeinit
+ \ifblank{#1}
+ {}
+ {\def\abx@field@@@prenote{#1}}%
+ \ifblank{#2}
+ {\let\blx@thenotecheck\relax}
+ {\def\abx@field@@@postnote{#2}}%
+ \def\blx@precode{\usebibmacro{prenote}}%
+ \def\blx@loopcode{%
+ \iffieldundef[{#5}][{#6}]{#7}
+ {\blx@warning@entry{'#7' undefined or not a field}%
+ \abx@missing{#7}}
+ {\printfield[{#4}][{#5}][{#6}]{#7}}}%
+ \def\blx@dlimcode{\multicitedelim}%
+ \def\blx@postpunct@saved{#8}%
+ \ifblank{#2}
+ {\let\blx@postcode\@empty}
+ {\def\blx@postcode{\usebibmacro{postnote}}}%
+ \boolfalse{citetracker}%
+ \boolfalse{pagetracker}%
+ \blx@citeloop{#3}%
+ \endgroup}
+
+\listadd\blx@citecmds{citelist}
+% [<prenote>][<postnote>]{<entrykey>,...}[<format>][<msform>][<mslang>]{<list>}<punct>
+\newrobustcmd*{\citelist}{\blx@citexpunct{citelist}}
+\long\csdef{blx@cite@citelist}#1#2#3#4#5#6#7#8{%
+ \begingroup
+ \blx@citecmdinit
+ \blx@citeinit
+ \ifblank{#1}
+ {}
+ {\def\abx@field@@@prenote{#1}}%
+ \ifblank{#2}
+ {\let\blx@thenotecheck\relax}
+ {\def\abx@field@@@postnote{#2}}%
+ \def\blx@precode{\usebibmacro{prenote}}%
+ \def\blx@loopcode{%
+ \iflistundef[{#5}][{#6}]{#7}
+ {\blx@warning@entry{'#7' undefined or not a literal list}%
+ \abx@missing{#7}}
+ {\printlist[{#4}][][{#5}][{#6}]{#7}}}%
+ \def\blx@dlimcode{\multicitedelim}%
+ \def\blx@postpunct@saved{#8}%
+ \ifblank{#2}
+ {\let\blx@postcode\@empty}
+ {\def\blx@postcode{\usebibmacro{postnote}}}%
+ \boolfalse{citetracker}%
+ \boolfalse{pagetracker}%
+ \blx@citeloop{#3}%
+ \endgroup}
+
+\listadd\blx@citecmds{citename}
+% [<prenote>][<postnote>]{<entrykey>,...}[<format>][<msform>][<mslang>]{<namelist>}<punct>
+\newrobustcmd*{\citename}{\blx@citexpunct{citename}}
+\long\csdef{blx@cite@citename}#1#2#3#4#5#6#7#8{%
+ \begingroup
+ \blx@citecmdinit
+ \blx@citeinit
+ \ifblank{#1}
+ {}
+ {\def\abx@field@@@prenote{#1}}%
+ \ifblank{#2}
+ {\let\blx@thenotecheck\relax}
+ {\def\abx@field@@@postnote{#2}}%
+ \def\blx@precode{\usebibmacro{prenote}}%
+ \def\blx@loopcode{%
+ \ifnameundef[{#5}][{#6}]{#7}
+ {\blx@warning@entry{'#7' undefined or not a name list}%
+ \abx@missing{#7}}
+ {\printnames[{#4}][][{#5}][{#6}]{#7}}}%
+ \def\blx@dlimcode{\multicitedelim}%
+ \def\blx@postpunct@saved{#8}%
+ \ifblank{#2}
+ {\let\blx@postcode\@empty}
+ {\def\blx@postcode{\usebibmacro{postnote}}}%
+ \boolfalse{citetracker}%
+ \boolfalse{pagetracker}%
+ \blx@citeloop{#3}%
+ \endgroup}
+
+\renewrobustcmd*{\cite}{\blx@err@citecmd\cite}
+\let\blx@cite@cite\relax
+\newrobustcmd*{\parencite}{\blx@warn@citecmd\parencite\cite}
+\let\blx@cite@parencite\relax
+\newrobustcmd*{\footcite}{\blx@warn@citecmd\footcite\cite}
+\let\blx@cite@footcite\relax
+\newrobustcmd*{\footcitetext}{\blx@warn@citecmd\footcitetext\cite}
+\let\blx@cite@footcitetext\relax
+\newrobustcmd*{\smartcite}{\blx@warn@citecmd\smartcite\cite}
+\let\blx@cite@smartcite\relax
+\newrobustcmd*{\textcite}{\blx@warn@citecmd\textcite\cite}
+\let\blx@cite@textcite\relax
+\newrobustcmd*{\supercite}{\blx@warn@citecmd\supercite\cite}
+\let\blx@cite@supercite\relax
+
+%% ifthen interface
+
+\def\blx@TE#1#2{%
+ \TE@throw
+ \unexpanded{%
+ \iftrue\@nameuse{fi}%
+ #1{\@nameuse{iftrue}}{\@nameuse{iffalse}}}#2}
+
+\def\blx@xTE#1#2{%
+ \TE@throw
+ \unexpanded{\iftrue\@nameuse{fi}}%
+ #1\unexpanded{{\@nameuse{iftrue}}{\@nameuse{iffalse}}}#2}
+
+\let\blx@TE@hook\@empty
+
+\appto\blx@blxinit{%
+ \appto\blx@TE@hook{%
+ \def\ifhyperref{\blx@TE\blx@imc@ifhyperref}%
+ \def\ifmorenames{\blx@TE\blx@imc@ifmorenames}%
+ \def\ifmoreitems{\blx@TE\blx@imc@ifmoreitems}%
+ \def\iffirstcitekey{\blx@TE\blx@imc@iffirstcitekey}%
+ \def\iflastcitekey{\blx@TE\blx@imc@iflastcitekey}%
+ \def\ifciteseen{\blx@TE\blx@imc@ifciteseen}%
+ \def\ifentryseen{\blx@TE\blx@imc@ifentryseen}%
+ \def\ifentryinbib{\blx@TE\blx@imc@ifentryinbib}%
+ \def\ifciteibid{\blx@TE\blx@imc@ifciteibid}%
+ \def\ifciteidem{\blx@TE\blx@imc@ifciteidem}%
+ \def\ifopcit{\blx@TE\blx@imc@ifopcit}%
+ \def\ifloccit{\blx@TE\blx@imc@ifloccit}%
+ \def\ifsamepage{\blx@TE\blx@imc@ifsamepage}%
+ \def\iffirstonpage{\blx@TE\blx@imc@iffirstonpage}%
+ \def\ifcurrentfield#1{\blx@TE{\blx@imc@ifcurrentfield{#1}}}%
+ \def\ifcurrentlist#1{\blx@TE{\blx@imc@ifcurrentlist{#1}}}%
+ \def\ifcurrentname#1{\blx@TE{\blx@imc@ifcurrentname{#1}}}%
+ \def\ifentrytype#1{\blx@TE{\blx@imc@ifentrytype{#1}}}%
+ \DeclareExpandableDocumentCommand{\iffieldxref}{O{\blx@msform} O{\blx@lmslang} m}{\blx@TE{\blx@imc@iffieldxref[{#1}][{#2}]{#3}}}%
+ \DeclareExpandableDocumentCommand{\iffieldequalcs}{O{\blx@msform} O{\blx@lmslang} m m}{\blx@TE{\blx@imc@iffieldequalcs[{#1}][{#2}]{#3}{#4}}}%
+ \DeclareExpandableDocumentCommand{\iffieldequals}{O{\blx@msform} O{\blx@lmslang} m m}{\blx@TE{\blx@imc@iffieldequals[{#1}][{#2}]{#3}{#4}}}%
+ \DeclareExpandableDocumentCommand{\iffieldequalstr}{O{\blx@msform} O{\blx@lmslang} m m}{\blx@TE{\blx@imc@iffieldequalstr[{#1}][{#2}]{#3}{#4}}}%
+ \DeclareExpandableDocumentCommand{\iffieldsequal}{O{\blx@msform} O{\blx@lmslang} m O{\blx@msform} O{\blx@lmslang} m}{\blx@TE{\blx@imc@iffieldsequal[{#1}][{#2}]{#3}[{#4}][{#5}]{#6}}}%
+ \def\ifbibmacroundef#1{\blx@TE{\blx@imc@ifbibmacroundef{#1}}}%
+ \DeclareExpandableDocumentCommand{\ifentryfieldundef}{m}{\blx@TE{\blx@imc@ifentryfieldundef{#1}}}%
+ \DeclareExpandableDocumentCommand{\iffieldundef}{O{\blx@msform} O{\blx@lmslang} m}{\blx@TE{\blx@imc@iffieldundef[{#1}][{#2}]{#3}}}%
+ \DeclareExpandableDocumentCommand{\iflistxref}{O{\blx@msform} O{\blx@lmslang} m}{\blx@TE{\blx@imc@iflistxref[{#1}][{#2}]{#3}}}%
+ \DeclareExpandableDocumentCommand{\iflistequalcs}{O{\blx@msform} O{\blx@lmslang} m m}{\blx@TE{\blx@imc@iflistequalcs[{#1}][{#2}]{#3}{#4}}}%
+ \DeclareExpandableDocumentCommand{\iflistequals}{O{\blx@msform} O{\blx@lmslang} m m}{\blx@TE{\blx@imc@iflistequals[{#1}][{#2}]{#3}{#4}}}%
+ \DeclareExpandableDocumentCommand{\iflistssequal}{O{\blx@msform} O{\blx@lmslang} m O{\blx@msform} O{\blx@lmslang} m}{\blx@TE{\blx@imc@iflistsequal[{#1}][{#2}]{#3}[{#4}][{#5}]{#6}}}%
+ \DeclareExpandableDocumentCommand{\iflistundef}{O{\blx@msform} O{\blx@lmslang} m}{\blx@TE{\blx@imc@iflistundef[{#1}][{#2}]{#3}}}%
+ \DeclareExpandableDocumentCommand{\ifnameequalcs}{O{\blx@msform} O{\blx@lmslang} m m}{\blx@TE{\blx@imc@ifnameequalcs[{#1}][{#2}]{#3}{#4}}}%
+ \DeclareExpandableDocumentCommand{\ifnameequals}{O{\blx@msform} O{\blx@lmslang} m m}{\blx@TE{\blx@imc@ifnameequals[{#1}][{#2}]{#3}{#4}}}%
+ \DeclareExpandableDocumentCommand{\ifnamesequal}{O{\blx@msform} O{\blx@lmslang} m O{\blx@msform} O{\blx@lmslang} m}{\blx@TE{\blx@imc@ifnamesequal[{#1}][{#2}]{#3}[{#4}][{#5}]{#6}}}%
+ \DeclareExpandableDocumentCommand{\ifnameundef}{O{\blx@msform} O{\blx@lmslang} m}{\blx@TE{\blx@imc@ifnameundef[{#1}][{#2}]{#3}}}%
+ \DeclareExpandableDocumentCommand{\ifnamexref}{O{\blx@msform} O{\blx@lmslang} m}{\blx@TE{\blx@imc@ifnamexref[{#1}][{#2}]{#3}}}%
+ \def\ifcategory#1{\blx@TE{\blx@imc@ifcategory{#1}}}%
+ \def\ifkeyword#1{\blx@TE{\blx@imc@ifkeyword{#1}}}%
+ \def\ifentrycategory#1#2{\blx@TE{\blx@imc@ifentrycategory{#1}{#2}}}%
+ \def\ifentrykeyword#1#2{\blx@TE{\blx@imc@ifentrykeyword{#1}{#2}}}%
+ \def\ifcapital{\blx@TE\blx@imc@ifcapital}%
+ \def\ifinteger#1{\blx@TE{\blx@imc@ifinteger{#1}}}%
+ \DeclareExpandableDocumentCommand{\iffieldint}{O{\blx@msform} O{\blx@lmslang} m}{\blx@TE{\blx@imc@iffieldint[{#1}][{#2}]{#3}}}%
+ \def\ifnumeral#1{\blx@TE{\blx@imc@ifnumeral{#1}}}%
+ \def\ifnumerals#1{\blx@TE{\blx@imc@ifnumerals{#1}}}%
+ \def\ifpages#1{\blx@TE{\blx@imc@ifpages{#1}}}%
+ \DeclareExpandableDocumentCommand{\iffieldnum}{O{\blx@msform} O{\blx@lmslang} m}{\blx@TE{\blx@imc@iffieldnum[{#1}][{#2}]{#3}}}%
+ \DeclareExpandableDocumentCommand{\iffieldnums}{O{\blx@msform} O{\blx@lmslang} m}{\blx@TE{\blx@imc@iffieldnums[{#1}][{#2}]{#3}}}%
+ \DeclareExpandableDocumentCommand{\iffieldpages}{O{\blx@msform} O{\blx@lmslang} m}{\blx@TE{\blx@imc@iffieldpages[{#1}][{#2}]{#3}}}%
+ \def\ifbibstring#1{\blx@TE{\blx@imc@ifbibstring{#1}}}%
+ \DeclareExpandableDocumentCommand{\iffieldbibstring}{O{\blx@msform} O{\blx@lmslang} m}{\blx@TE{\blx@imc@iffieldbibstring[{#1}][{#2}]{#3}}}%
+ \DeclareExpandableDocumentCommand{\iffieldplusstringbibstring}{O{\blx@msform} O{\blx@lmslang} m m}{\blx@TE{\blx@imc@iffieldplusstringbibstring[{#1}][{#2}]{#3}{#4}}}%
+ \def\ifnatbibmode{\blx@TE{\iftoggle{blx@natbib}}}%
+ \def\ifcitation{\blx@TE{\iftoggle{blx@citation}}}%
+ \def\ifvolcite{\blx@TE{\iftoggle{blx@volcite}}}%
+ \def\ifbibliography{\blx@TE{\iftoggle{blx@bibliography}}}%
+ \def\ifciteindex{\blx@TE{\iftoggle{blx@citeindex}}}%
+ \def\ifbibindex{\blx@TE{\iftoggle{blx@bibindex}}}%
+ \def\iffootnote{\blx@TE{\iftoggle{blx@footnote}}}%
+ \def\ifuseprefix{\blx@TE{\iftoggle{blx@useprefix}}}%
+ \def\ifterseinits{\blx@TE{\iftoggle{blx@terseinits}}}%
+ \def\ifsingletitle{\blx@TE{\iftoggle{abx@bool@singletitle}}}%
+ \def\ifnocite{\blx@TE{\iftoggle{abx@bool@nocite}}}%
+ \def\ifuniquetitle{\blx@TE{\iftoggle{abx@bool@uniquetitle}}}%
+ \def\ifuniquebaretitle{\blx@TE{\iftoggle{abx@bool@uniquebaretitle}}}%
+ \def\ifuniquework{\blx@TE{\iftoggle{abx@bool@uniquework}}}%
+ \def\ifuniqueprimaryauthor{\blx@TE{\iftoggle{abx@bool@uniqueprimaryauthor}}}%
+ \def\ifandothers#1{\blx@TE{\iftoggle{abx@bool@more#1}}}%
+ \def\iflabeldateisdate{\blx@TE\blx@imc@iflabeldateisdate}%
+ \def\ifdatehasyearonlyprecision#1{%
+ \blx@TE{\blx@imc@ifdatehasyearonlyprecision{#1}}}%
+ \def\ifdatehastime#1{\blx@TE{\blx@imc@ifdatehastime{#1}}}%
+ \def\ifdateshavedifferentprecision#1#2{%
+ \blx@TE{\blx@imc@ifdateshavedifferentprecision{#1}{#2}}}%
+ \def\ifdateyearsequal#1#2{%
+ \blx@TE{\blx@imc@ifdateyearsequal{#1}{#2}}}}}
+
+% {<listmacro>}{<filtercsname>} => matches in <listmacro>
+\protected\def\blx@bibfilter#1#2{%
+ \begingroup
+ \edef\blx@do##1{%
+ \def\noexpand\blx@flt@item{##1}%
+ \ifboolexpr{\csexpandonce{#2}}%
+ {\listadd\noexpand\blx@tempa{##1}}%
+ {}}%
+ \let\blx@done\relax
+ \edef\blx@tempa{%
+ \let\noexpand\blx@tempa\noexpand\@empty
+ \blx@listloop{#1}}%
+ \blx@tempa
+ \edef\blx@tempa{\endgroup
+ \def\noexpand#1{\blx@tempa}}%
+ \blx@tempa}
+
+%% Auxiliary macros
+\newrobustcmd*{\mkbibquote}{\blx@enquote}
+\protected\def\blx@imc@mkbibquote{%
+ \blx@ifuspunct\blx@usquote\blx@enquote}
+
+\def\blx@usquote{%
+ \ifnum\@quotelevel>\z@
+ \expandafter\blx@usiquote
+ \else
+ \expandafter\blx@usoquote
+ \fi}
+
+\long\def\blx@usoquote#1{%
+ \begingroup
+ \blx@initoquote
+ \blx@textooquote#1%
+ \futurelet\@let@token\blx@usoquote@i}
+
+\def\blx@usoquote@i{%
+ \blx@usqcheck
+ {\ifx\blx@postpunct\@empty\else\blx@dopostpunct\fi
+ \blx@textcoquote\endgroup}
+ {\blx@setpostpunct\blx@textcoquote\endgroup}}
+
+\long\def\blx@usiquote#1{%
+ \begingroup
+ \blx@initiquote
+ \blx@textoiquote#1%
+ \futurelet\@let@token\blx@usiquote@i}
+
+\def\blx@usiquote@i{%
+ \blx@usqcheck
+ {\blx@textciquote\endgroup}
+ {\blx@setpostpunct\blx@textciquote\endgroup}}
+
+\long\def\blx@usqcheck#1#2{%
+ \def\blx@tempa{#1}%
+ \def\blx@tempb{#2}%
+ \ifx\@let@token\space
+ \blx@usqcheck@i\blx@tempa
+ \fi
+ \ifx\@let@token\@sptoken
+ \blx@usqcheck@i\blx@tempa
+ \fi
+ \if\noexpand\@let@token\relax
+ \expandafter\blx@usqcheck@iv
+ \fi
+ \expandafter\blx@usqcheck@ii\blx@quotepunct\relax&}
+
+\long\def\blx@usqcheck@i#1#2&{\fi#1}
+
+\long\def\blx@usqcheck@ii#1{%
+ \if\noexpand#1\relax
+ \blx@usqcheck@i\blx@tempa
+ \fi
+ \if\noexpand#1\noexpand\@let@token
+ \blx@usqcheck@i{\blx@usqcheck@iii\blx@tempa}%
+ \fi
+ \blx@usqcheck@ii
+}
+
+\long\def\blx@usqcheck@iii#1#2{#2#1}
+
+\long\def\blx@usqcheck@iv#1&#2{%
+ \begingroup
+ \escapechar=-1 %
+ \edef\blx@tempa{\expandafter\@gobble\string#2}%
+ \expandafter\endgroup
+ \ifx\blx@tempa\@empty
+ \else
+ \blx@usqcheck@i\blx@tempb
+ \fi
+ #1&#2%
+}
+
+\newrobustcmd*{\mkbibemph}{\emph}
+\protected\long\def\blx@imc@mkbibemph#1{%
+ \emph{#1}\blx@imc@setpunctfont\emph}
+
+\newrobustcmd*{\mkbibbold}{\textbf}
+\protected\long\def\blx@imc@mkbibbold#1{%
+ \textbf{#1}\blx@imc@setpunctfont\textbf}
+
+\newrobustcmd*{\mkbibitalic}{\textit}
+\protected\long\def\blx@imc@mkbibitalic#1{%
+ \textit{#1}\blx@imc@setpunctfont\textit}
+
+\blx@regimcs{\mkbibquote \mkbibemph \mkbibbold \mkbibitalic}
+
+\newcommand*{\bibleftparen}{\blx@postpunct(}
+\newcommand*{\bibrightparen}{\blx@postpunct)\midsentence}
+\newcommand*{\bibleftbracket}{\blx@postpunct[}
+\newcommand*{\bibrightbracket}{\blx@postpunct]\midsentence}
+
+\def\blx@parenlevel{%
+ \iftoggle{blx@footnote}
+ {\blx@parenlevel@foot}
+ {\blx@parenlevel@text}}
+
+\newrobustcmd*{\blx@bibopenparen}{%
+ \blx@opencheck\bibopenparen
+ \blx@postpunct
+ \ifnum\blx@parenlevel=\z@
+ \global\blx@parenlevel\@ne
+ \global\c@parenlevel\@ne
+ \expandafter\bibleftparen
+ \else
+ \expandafter\blx@openparen
+ \fi}
+
+\newrobustcmd*{\blx@bibopenbracket}{%
+ \blx@opencheck\bibopenbracket
+ \blx@postpunct
+ \ifnum\blx@parenlevel=\z@
+ \global\blx@parenlevel1002
+ \global\c@parenlevel\@ne
+ \expandafter\bibleftbracket
+ \else
+ \expandafter\blx@openparen
+ \fi}
+
+\newrobustcmd*{\blx@bibcloseparen}{%
+ \blx@closecheck\bibcloseparen
+ \blx@postpunct\blx@closeparen}
+
+\newrobustcmd*{\blx@bibclosebracket}{%
+ \blx@closecheck\bibclosebracket
+ \blx@postpunct\blx@closeparen}
+
+\def\blx@openparen{%
+ \ifodd\blx@parenlevel
+ \global\advance\blx@parenlevel\@ne
+ \global\advance\c@parenlevel\@ne
+ \expandafter\bibleftbracket
+ \else
+ \global\advance\blx@parenlevel\@ne
+ \global\advance\c@parenlevel\@ne
+ \expandafter\bibleftparen
+ \fi}
+
+\def\blx@closeparen{%
+ \ifodd\blx@parenlevel
+ \blx@closeparen@i
+ \expandafter\bibrightparen
+ \else
+ \blx@closeparen@i
+ \expandafter\bibrightbracket
+ \fi}
+
+\def\blx@closeparen@i{%
+ \ifnum\blx@parenlevel=1002
+ \global\blx@parenlevel\z@
+ \global\c@parenlevel\z@
+ \else
+ \global\advance\blx@parenlevel\m@ne
+ \global\advance\c@parenlevel\m@ne
+ \fi}
+
+\def\blx@opencheck#1{%
+ \ifnum\numexpr\blx@parenlevel+\@ne
+ \ifnum\blx@parenlevel>\@m -1001\fi
+ >\c@maxparens
+ \blx@err@nestparen{\string#1}%
+ \blx@errormark
+ \fi}
+
+\def\blx@closecheck#1{%
+ \ifnum\numexpr\blx@parenlevel
+ \ifnum\blx@parenlevel>\@m -1001\fi
+ >\c@maxparens
+ \blx@err@nestparen{\string#1}%
+ \blx@errormark
+ \fi
+ \ifnum\blx@parenlevel<\@ne
+ \blx@err@matchparen{Unmatched \string#1}%
+ \blx@errormark
+ \fi}
+
+\protected\def\blx@errormark{%
+ \rule[0.25ex]{1.25ex}{1.25ex}}
+
+\blx@AtEndDocument{%
+ \unless\ifnum\blx@parenlevel@text=\z@
+ \blx@err@matchparen{%
+ Unbalanced parentheses or brackets in the document body}%
+ \fi
+ \unless\ifnum\blx@parenlevel@foot=\z@
+ \blx@err@matchparen{%
+ Unbalanced parentheses or brackets in a foot or endnote}%
+ \fi}
+
+\newrobustcmd{\mkbibparens}[1]{%
+ \begingroup
+ \blx@blxinit
+ \blx@setsfcodes
+ \bibopenparen#1\bibcloseparen
+ \endgroup}
+
+\newrobustcmd{\mkbibbrackets}[1]{%
+ \begingroup
+ \blx@blxinit
+ \blx@setsfcodes
+ \bibopenbracket#1\bibclosebracket
+ \endgroup}
+
+\newrobustcmd*{\parentext}{\mkbibparens}
+\newrobustcmd*{\brackettext}{\mkbibbrackets}
+
+\newrobustcmd{\mkbibsuperscript}[1]{%
+ \unspace\allowhyphens\textsuperscript{%
+ \begingroup
+ \protected\long\def\mkbibsuperscript##1{%
+ \blx@warning{Nested superscript}%
+ \mkbibbrackets{##1}}%
+ #1\endgroup}}
+
+\newrobustcmd{\mkbibfootnote}{\blx@mkbibfootnote{}}
+\newrobustcmd{\mkbibfootnotetext}{\blx@mkbibfootnote{text}}
+\newrobustcmd{\blx@mkbibfootnote}[2]{%
+ \iftoggle{blx@footnote}
+ {\blx@warning{Nested notes}%
+ \addspace\mkbibparens{#2}}
+ {\unspace
+ \ifnum\blx@notetype=\tw@
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi
+ {\csuse{blx@theendnote#1}{\protecting{\blxmkbibnote{end}{#2}}}}
+ {\csuse{footnote#1}{\protecting{\blxmkbibnote{foot}{#2}}}}}}
+
+\newrobustcmd{\mkbibendnote}{\blx@mkbibendnote{}}
+\newrobustcmd{\mkbibendnotetext}{\blx@mkbibendnote{text}}
+\newrobustcmd{\blx@mkbibendnote}[2]{%
+ \iftoggle{blx@footnote}
+ {\blx@warning{Nested notes}%
+ \addspace\mkbibparens{#2}}
+ {\unspace
+ \ifnum\blx@notetype=\@ne
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi
+ {\csuse{footnote#1}{\protecting{\blxmkbibnote{foot}{#2}}}}
+ {\csuse{blx@theendnote#1}{\protecting{\blxmkbibnote{end}{#2}}}}}}
+
+\newrobustcmd{\blxmkbibnote}[2]{%
+ \begingroup
+ \blx@blxinit
+ \blx@setsfcodes
+ \blx@postpunct@agroup
+ \toggletrue{blx@footnote}%
+ \csuse{bib#1notewrapper}{#2}%
+ \endgroup}
+
+\newcommand{\bibfootnotewrapper}[1]{%
+ \bibsentence#1\addperiod}
+
+\newcommand{\bibendnotewrapper}[1]{%
+ \bibsentence#1\addperiod}
+
+\AtEndPreamble{%
+ \def\blx@theendnote{\blx@err@endnote\footnote}%
+ \def\blx@theendnotetext{\blx@err@endnote\footnotetext}%
+ \ifdef\endnote
+ {\def\blx@theendnote{\endnote}%
+ \ifdef\endnotetext
+ {\def\blx@theendnotetext{\endnotetext}}
+ {}}
+ {\ifdef\pagenote
+ {\def\blx@theendnote{\pagenote}%
+ \ifdef\pagenotetext
+ {\def\blx@theendnotetext{\pagenotetext}}
+ {}}
+ {}}}
+
+\newrobustcmd*{\mknumalph}[1]{%
+ \begingroup
+ \blx@tempcnta=#1\relax
+ \ifnum\blx@tempcnta>702 %
+ \else
+ \ifnum\blx@tempcnta>26 %
+ \advance\blx@tempcnta\m@ne
+ \divide\blx@tempcnta26\relax
+ \blx@numalph\blx@tempcnta
+ \multiply\blx@tempcnta26\relax
+ \blx@tempcnta=\numexpr#1-\blx@tempcnta\relax
+ \fi
+ \fi
+ \blx@numalph\blx@tempcnta
+ \endgroup}
+\def\blx@numalph#1{%
+ \ifcase#1\relax\blx@warning@entry{Value out of range}\number#1\or
+ a\or b\or c\or d\or e\or f\or g\or h\or i\or j\or k\or l\or m\or
+ n\or o\or p\or q\or r\or s\or t\or u\or v\or w\or x\or y\or z\else
+ \blx@warning@entry{Value out of range}\number#1\fi}
+
+% {<macro>}[<pre>]{<vol>}[<post>] => <macro>{<pre>}{{<vol>}{<post>}}
+
+\newrobustcmd*{\volcitecmd}{%
+ \AtNextCite{%
+ \toggletrue{blx@volcite}%
+ \csuse{blx@hook@volcite}}%
+ \begingroup\let\blx@citeargs\blx@volciteargs}
+
+\protected\def\blx@volciteargs#1{%
+ \endgroup
+ \@ifnextchar[%]
+ {\blx@volciteargs@i{#1}}
+ {\blx@volciteargs@i{#1}[]}}
+
+\long\def\blx@volciteargs@i#1[#2]#3{%
+ \@ifnextchar[%]
+ {\blx@volciteargs@ii{#1}{#2}{#3}}
+ {\blx@citeargs@iii{#1{#2}{{#3}{}}}}}
+
+\long\def\blx@volciteargs@ii#1#2#3[#4]{%
+ \blx@citeargs@iii{#1{#2}{{#3}{#4}}}}
+
+\newrobustcmd*{\multivolcitecmd}{%
+ \AtNextCite{%
+ \toggletrue{blx@volcite}%
+ \csuse{blx@hook@volcite}}%
+ \def\blx@hook@mcite@before{%
+ \global\undef\blx@hook@mcite@before
+ \let\blx@citeargs\blx@volmciteargs}}
+
+\protected\def\blx@volmciteargs#1{%
+ \@ifnextchar[%]
+ {\blx@volciteargs@i{#1}}
+ {\blx@volciteargs@i{#1}[]}}
+
+\long\def\blx@defvolcitepostnote#1#2{%
+ \def\abx@field@@@volcitevolume{#1}%
+ \ifblank{#2}
+ {}
+ {\def\abx@field@@@volcitepages{#2}}}
+
+\newrobustcmd*{\AtVolcite}{%
+ \@ifstar
+ {\global\undef\blx@hook@volcite
+ \gappto\blx@hook@volcite}
+ {\gappto\blx@hook@volcite}}
+\@onlypreamble\AtVolcite
+\def\blx@imc@UseVolciteHook{\csuse{blx@hook@volcite}}
+\blx@regimcs{\UseVolciteHook}
+
+\AtVolcite{%
+ \DeclareFieldAlias{postnote}{volcitenote}}
+
+%% Control file
+
+\begingroup
+\let~\space
+\@makeother\<
+\@makeother\>
+\@makeother\.
+\@makeother\:
+\@makeother\?
+\@makeother\"
+\@makeother\-
+\@makeother\=
+\@makeother\/
+\xdef\blx@xml@file{%
+ \blx@sig@bcf\blx@nl
+ \blx@ver@bcf\blx@nl}
+\xdef\blx@xml@endfile{%
+ </bcf:controlfile>}
+\xdef\blx@xml@comment#1{%
+ ~~<!-- #1 -->\blx@nl}
+\xdef\blx@xml@options#1#2#3{%
+ ~~<bcf:options%
+ \noexpand\ifblank{#1}{}{ component="#1"}%
+ \noexpand\ifblank{#2}{}{ type="#2"}%
+ >\blx@nl
+ #3%
+ ~~</bcf:options>\blx@nl}
+\xdef\blx@xml@option#1#2{%
+ ~~~~<bcf:option type="#1">\blx@nl
+ #2%
+ ~~~~</bcf:option>\blx@nl}
+\xdef\blx@xml@ordered#1#2#3{%
+ ~~~~~~<bcf:value order="#1"#2%
+ >#3</bcf:value>\blx@nl}
+
+\xdef\blx@xml@datafieldset#1#2{%
+ ~~<bcf:datafieldset name="#1">\blx@nl
+ #2%
+ ~~</bcf:datafieldset>\blx@nl}
+
+\xdef\blx@xml@datafieldsets@member#1{%
+ ~~~~<bcf:member#1/>\blx@nl}
+
+\xdef\blx@xml@transliteration#1#2{%
+ ~~<bcf:transliteration entrytype="#1">\blx@nl
+ #2%
+ ~~</bcf:transliteration>\blx@nl}
+\xdef\blx@xml@translit#1#2#3#4{%
+ ~~~~<bcf:translit #1target="#2" from="#3" to="#4"/>\blx@nl}
+
+\xdef\blx@xml@sourcemap#1{%
+ ~~<bcf:sourcemap>\blx@nl
+ #1%
+ ~~</bcf:sourcemap>\blx@nl}
+\xdef\blx@xml@sourcemap@maps#1#2{%
+ ~~~~<bcf:maps#1>\blx@nl
+ #2%
+ ~~~~</bcf:maps>\blx@nl}
+\xdef\blx@xml@sourcemap@map#1#2{%
+ ~~~~~~<bcf:map#1>\blx@nl
+ #2%
+ ~~~~~~</bcf:map>\blx@nl}
+\xdef\blx@xml@sourcemap@perdatasource#1{%
+ ~~~~~~~~<bcf:per\string_datasource>#1</bcf:per\string_datasource>\blx@nl}
+\xdef\blx@xml@sourcemap@pertype#1{%
+ ~~~~~~~~<bcf:per\string_type>#1</bcf:per\string_type>\blx@nl}
+\xdef\blx@xml@sourcemap@pernottype#1{%
+ ~~~~~~~~<bcf:per\string_nottype>#1</bcf:per\string_nottype>\blx@nl}
+\xdef\blx@xml@sourcemap@step#1{%
+ ~~~~~~~~<bcf:map\string_step#1/>\blx@nl}
+
+\xdef\blx@xml@labelalphanametemplate#1#2{%
+ ~~<bcf:labelalphanametemplate name="#1">\blx@nl
+ #2%
+ ~~</bcf:labelalphanametemplate>\blx@nl}
+\xdef\blx@xml@labelalphanametemplatenamepart#1#2#3{%
+ ~~~~<bcf:namepart #1#2>#3</bcf:namepart>\blx@nl}
+
+\xdef\blx@xml@labelalphatemplate#1#2{%
+ ~~<bcf:labelalphatemplate type="#1">\blx@nl
+ #2%
+ ~~</bcf:labelalphatemplate>\blx@nl}
+\xdef\blx@xml@labelalpha@element#1#2{%
+ ~~~~<bcf:labelelement order="#1">\blx@nl
+ #2%
+ ~~~~</bcf:labelelement>\blx@nl}
+\xdef\blx@xml@labelalpha@part#1#2{%
+ ~~~~~~<bcf:labelpart#1>#2</bcf:labelpart>\blx@nl}
+
+\xdef\blx@xml@extradate#1{%
+ ~~<bcf:extradatespec>\blx@nl
+ #1%
+ ~~</bcf:extradatespec>\blx@nl}
+\xdef\blx@xml@extradatescope#1{%
+ ~~~~<bcf:scope>\blx@nl
+ #1%
+ ~~~~</bcf:scope>\blx@nl}
+\xdef\blx@xml@edordered#1#2{%
+ ~~~~~~<bcf:field order="#1">#2</bcf:field>\blx@nl}
+
+\xdef\blx@xml@inheritance#1{%
+ ~~<bcf:inheritance>\blx@nl
+ #1%
+ ~~</bcf:inheritance>\blx@nl}
+\xdef\blx@xml@inherit@defaults#1#2{%
+ ~~~~<bcf:defaults#1>\blx@nl
+ #2%
+ ~~~~</bcf:defaults>\blx@nl}
+\xdef\blx@xml@inherit@data#1#2{%
+ ~~~~<bcf:inherit#1>\blx@nl
+ #2%
+ ~~~~</bcf:inherit>\blx@nl}
+\xdef\blx@xml@inherit@type#1#2#3{%
+ ~~~~~~<bcf:type\string_pair source="#1" target="#2"#3/>\blx@nl}
+\xdef\blx@xml@inherit@field#1#2#3{%
+ ~~~~~~<bcf:field source="#1" target="#2"#3/>\blx@nl}
+\xdef\blx@xml@inherit@block#1{%
+ ~~~~~~<bcf:field source="#1" skip="true"/>\blx@nl}
+
+\xdef\blx@xml@nosorts#1{%
+ ~~<bcf:nosorts>\blx@nl
+ #1%
+ ~~</bcf:nosorts>\blx@nl}
+\xdef\blx@xml@nosort#1#2{%
+ ~~~~<bcf:nosort field="#1" value="#2"/>\blx@nl}
+
+\xdef\blx@xml@nonamestrings#1{%
+ ~~<bcf:nonamestrings>\blx@nl
+ #1%
+ ~~</bcf:nonamestrings>\blx@nl}
+\xdef\blx@xml@nonamestring#1#2{%
+ ~~~~<bcf:nonamestring field="#1" value="#2"/>\blx@nl}
+
+\xdef\blx@xml@noinits#1{%
+ ~~<bcf:noinits>\blx@nl
+ #1%
+ ~~</bcf:noinits>\blx@nl}
+\xdef\blx@xml@noinit#1{%
+ ~~~~<bcf:noinit value="#1"/>\blx@nl}
+
+\xdef\blx@xml@nolabels#1{%
+ ~~<bcf:nolabels>\blx@nl
+ #1%
+ ~~</bcf:nolabels>\blx@nl}
+\xdef\blx@xml@nolabel#1{%
+ ~~~~<bcf:nolabel value="#1"/>\blx@nl}
+
+\xdef\blx@xml@nolabelwidthcounts#1{%
+ ~~<bcf:nolabelwidthcounts>\blx@nl
+ #1%
+ ~~</bcf:nolabelwidthcounts>\blx@nl}
+\xdef\blx@xml@nolabelwidthcount#1{%
+ ~~~~<bcf:nolabelwidthcount value="#1"/>\blx@nl}
+
+\xdef\blx@xml@uniquenametemplate#1#2{%
+ ~~<bcf:uniquenametemplate name="#1">\blx@nl%
+ #2%
+ ~~</bcf:uniquenametemplate>\blx@nl}
+
+\xdef\blx@xml@uniquenametemplatenamepart#1#2#3{%
+ ~~~~<bcf:namepart #1#2>#3</bcf:namepart>\blx@nl}
+
+\xdef\blx@xml@sortingnamekeytemplate#1#2#3{%
+ ~~<bcf:sortingnamekeytemplate name="#1" visibility="#2">\blx@nl%
+ #3%
+ ~~</bcf:sortingnamekeytemplate>\blx@nl}
+
+\xdef\blx@xml@sortingnamekeykeypart#1#2{%
+ ~~~~<bcf:keypart#1>\blx@nl
+ #2%
+ ~~~~</bcf:keypart>\blx@nl}
+
+\xdef\blx@xml@sortingnamekeynamepart#1#2#3{%
+ ~~~~~~<bcf:part type="namepart"#1#2>#3</bcf:part>\blx@nl}
+
+\xdef\blx@xml@sortingnamekeyliteral#1#2{%
+ ~~~~~~<bcf:part type="literal"#1>#2</bcf:part>\blx@nl}
+
+\xdef\blx@xml@sortingtemplate#1#2#3{%
+ ~~<bcf:sortingtemplate name="#1"#2>\blx@nl%
+ #3%
+ ~~</bcf:sortingtemplate>\blx@nl}
+\xdef\blx@xml@presort#1#2{%
+ ~~<bcf:presort\noexpand\ifblank{#1}{}{ type="#1"}>%
+ #2</bcf:presort>\blx@nl}
+
+\xdef\blx@xml@sortexclude#1#2{%
+ ~~<bcf:sortexclusion\noexpand\ifblank{#1}{}{ type="#1"}>\blx@nl
+ #2%
+ ~~</bcf:sortexclusion>\blx@nl}
+\xdef\blx@xml@exclude#1{%
+ ~~~~<bcf:exclusion>#1</bcf:exclusion>\blx@nl}
+\xdef\blx@xml@sortinclude#1#2{%
+ ~~<bcf:sortinclusion\noexpand\ifblank{#1}{}{ type="#1"}>\blx@nl
+ #2%
+ ~~</bcf:sortinclusion>\blx@nl}
+\xdef\blx@xml@include#1{%
+ ~~~~<bcf:inclusion>#1</bcf:inclusion>\blx@nl}
+\xdef\blx@xml@sort#1#2{%
+ ~~~~<bcf:sort #1>\blx@nl
+ #2%
+ ~~~~</bcf:sort>\blx@nl}
+\xdef\blx@xml@sortitem#1#2{%
+ ~~~~~~<bcf:sortitem #1>#2</bcf:sortitem>\blx@nl}
+\xdef\blx@xml@section#1{%
+ ~~<bcf:section number="#1">}
+\xdef\blx@xml@endsection{%
+ ~~</bcf:section>}
+
+\xdef\blx@xml@dlist@refcontext#1#2#3#4#5{%
+ ~~~~~~~~~~~~~~~~sortingtemplatename="#1"\blx@nl
+ ~~~~~~~~~~~~~~~~sortingnamekeytemplatename="#2"\blx@nl
+ ~~~~~~~~~~~~~~~~labelprefix="#3"\blx@nl
+ ~~~~~~~~~~~~~~~~uniquenametemplatename="#4"\blx@nl
+ ~~~~~~~~~~~~~~~~labelalphanametemplatename="#5"}
+\xdef\blx@xml@dlist#1#2#3#4#5{%
+ ~~<bcf:datalist section="#3"\blx@nl
+ ~~~~~~~~~~~~~~~~name="#1"\blx@nl
+ ~~~~~~~~~~~~~~~~type="#2"\blx@nl
+ #4>\blx@nl
+ #5%
+ ~~</bcf:datalist>\blx@nl}
+\xdef\blx@xml@dlistfilterorbegin{%
+ ~~~~<bcf:filteror>\blx@nl}
+\xdef\blx@xml@dlistfilterorend{%
+ ~~~~</bcf:filteror>\blx@nl}
+\xdef\blx@xml@dlistfilter#1#2{%
+ ~~~~<bcf:filter type="#1">#2</bcf:filter>\blx@nl}
+
+\xdef\blx@xml@bibdata#1#2{%
+ ~~<bcf:bibdata section="#1">\blx@nl
+ #2%
+ ~~</bcf:bibdata>\blx@nl}
+\xdef\blx@xml@datasource#1#2#3#4#5{%
+ ~~~~<bcf:datasource type="#1" datatype="#2"#3#4>#5</bcf:datasource>\blx@nl}
+\xdef\blx@xml@citekey#1#2#3#4{%
+ ~~~~<bcf:citekey order="#3" intorder="#4"#2>#1</bcf:citekey>}
+\xdef\blx@xml@citeset#1#2{%
+ ~~~~<bcf:citekey type="set" members="#2">#1</bcf:citekey>}
+\xdef\blx@xml@citekeycount#1#2{%
+ ~~~~<bcf:citekeycount count="#2">#1</bcf:citekeycount>}
+\xdef\blx@xml@svalue#1#2{%
+ \blx@xml@option{singlevalued}{%
+ ~~~~~~<bcf:key>#1</bcf:key>\blx@nl
+ ~~~~~~<bcf:value>#2</bcf:value>\blx@nl}}
+\xdef\blx@xml@mvalue#1#2{%
+ \blx@xml@option{multivalued}{%
+ ~~~~~~<bcf:key>#1</bcf:key>\blx@nl
+ #2}}
+\xdef\blx@xml@toggle#1{%
+ \blx@xml@svalue{#1}{\noexpand\iftoggle{blx@#1}{1}{0}}}
+\xdef\blx@xml@options@scope#1#2{%
+ ~~<bcf:optionscope type="#1">\blx@nl
+ #2%
+ ~~</bcf:optionscope>\blx@nl}
+\xdef\blx@xml@option@scope#1#2{% GLOBAL/TYPE scope
+ ~~~~<bcf:option datatype="#1">#2</bcf:option>\blx@nl}
+\xdef\blx@xml@option@entryscope#1#2{% ENTRY scope
+ ~~~~<bcf:option datatype="#1"\noexpand\ifcsdef{blx@bcf@backendout@entry@#2}{ backendout="1"}{}\noexpand\ifcsdef{blx@bcf@backendin@entry@#2}{ backendin="\noexpand\csuse{blx@bcf@backendin@entry@#2}"}{}>#2</bcf:option>\blx@nl}
+\xdef\blx@xml@option@namelistscope#1#2{% NAMELIST scope
+ ~~~~<bcf:option datatype="#1"\noexpand\ifcsdef{blx@bcf@backendout@namelist@#2}{ backendout="1"}{}\noexpand\ifcsdef{blx@bcf@backendin@namelist@#2}{ backendin="\noexpand\csuse{blx@bcf@backendin@namelist@#2}"}{}>#2</bcf:option>\blx@nl}
+\xdef\blx@xml@option@namescope#1#2{% NAME scope
+ ~~~~<bcf:option datatype="#1"\noexpand\ifcsdef{blx@bcf@backendout@name@#2}{ backendout="1"}{}\noexpand\ifcsdef{blx@bcf@backendin@name@#2}{ backendin="\noexpand\csuse{blx@bcf@backendin@name@#2}"}{}>#2</bcf:option>\blx@nl}
+\endgroup
+
+\def\blx@bcf@options@global{%
+ \blx@xml@comment{GLOBAL}%
+ \blx@xml@options{biblatex}{global}{%
+ \blx@xml@svalue{alphaothers}{\labelalphaothers}%
+ \blx@xml@mvalue{extradatecontext}{\blx@bcf@extradatecontext}%
+ \blx@xml@toggle{labelalpha}%
+ \blx@xml@mvalue{labelnamespec}{\blx@bcf@labelnamespec}%
+ \blx@xml@toggle{labeltitle}%
+ \blx@xml@mvalue{labeltitlespec}{\blx@bcf@labeltitlespec}%
+ \blx@xml@toggle{labeltitleyear}%
+ \blx@xml@toggle{labeldateparts}%
+ \blx@xml@mvalue{labeldatespec}{\blx@bcf@labeldatespec}%
+ \blx@xml@toggle{julian}%
+ \blx@xml@svalue{gregorianstart}{\blx@gregorianstart}%
+ \blx@xml@svalue{maxalphanames}{\blx@maxalphanames}%
+ \blx@xml@svalue{maxbibnames}{\blx@maxbibnames}%
+ \blx@xml@svalue{maxcitenames}{\blx@maxcitenames}%
+ \blx@xml@svalue{maxsortnames}{\blx@maxsortnames}%
+ \blx@xml@svalue{maxitems}{\blx@maxitems}%
+ \blx@xml@svalue{minalphanames}{\blx@minalphanames}%
+ \blx@xml@svalue{minbibnames}{\blx@minbibnames}%
+ \blx@xml@svalue{mincitenames}{\blx@mincitenames}%
+ \blx@xml@svalue{minsortnames}{\blx@minsortnames}%
+ \blx@xml@svalue{minitems}{\blx@minitems}%
+ \blx@xml@toggle{nohashothers}%
+ \blx@xml@toggle{noroman}%
+ \blx@xml@toggle{nosortothers}%
+ \blx@xml@toggle{pluralothers}%
+ \blx@xml@toggle{singletitle}%
+ \blx@xml@toggle{skipbib}%
+ \blx@xml@toggle{skipbiblist}%
+ \blx@xml@toggle{skiplab}%
+ \blx@xml@svalue{sortalphaothers}{\sortalphaothers}%
+ \blx@xml@svalue{sortlocale}{\blx@sortlocale}%
+ \blx@xml@svalue{sortingtemplatename}{\blx@sorting}%
+ \blx@xml@toggle{sortsets}%
+ \blx@xml@svalue{uniquelist}{\blx@uniquelist}%
+ \blx@xml@svalue{uniquename}{\blx@uniquename}%
+ \blx@xml@toggle{uniqueprimaryauthor}%
+ \blx@xml@toggle{uniquetitle}%
+ \blx@xml@toggle{uniquebaretitle}%
+ \blx@xml@toggle{uniquework}%
+ \blx@xml@toggle{useprefix}%
+ \blx@xml@nametoggles
+ }%
+}
+
+\def\blx@bcf@options@type#1{%
+ \blx@xml@comment{#1}%
+ \blx@xml@options{biblatex}{#1}{%
+ \blx@xml@mvalue{extradatecontext}{%
+ \ifcsdef{blx@bcf@extradatecontext@#1}
+ {\csuse{blx@bcf@extradatecontext@#1}}
+ {\blx@bcf@extradatecontext}}%
+ \blx@xml@toggle{labelalpha}%
+ \blx@xml@mvalue{labelnamespec}{%
+ \ifcsdef{blx@bcf@labelnamespec@#1}
+ {\csuse{blx@bcf@labelnamespec@#1}}
+ {\blx@bcf@labelnamespec}}%
+ \blx@xml@toggle{labeltitle}%
+ \blx@xml@mvalue{labeltitlespec}{%
+ \ifcsdef{blx@bcf@labeltitlespec@#1}
+ {\csuse{blx@bcf@labeltitlespec@#1}}
+ {\blx@bcf@labeltitlespec}}%
+ \blx@xml@toggle{labeltitleyear}%
+ \blx@xml@toggle{labeldateparts}%
+ \blx@xml@mvalue{labeldatespec}{%
+ \ifcsdef{blx@bcf@labeldatespec@#1}
+ {\csuse{blx@bcf@labeldatespec@#1}}
+ {\blx@bcf@labeldatespec}}%
+ \blx@xml@svalue{maxalphanames}{\blx@maxalphanames}%
+ \blx@xml@svalue{maxbibnames}{\blx@maxbibnames}%
+ \blx@xml@svalue{maxcitenames}{\blx@maxcitenames}%
+ \blx@xml@svalue{maxsortnames}{\blx@maxsortnames}%
+ \blx@xml@svalue{maxitems}{\blx@maxitems}%
+ \blx@xml@svalue{minalphanames}{\blx@minalphanames}%
+ \blx@xml@svalue{minbibnames}{\blx@minbibnames}%
+ \blx@xml@svalue{mincitenames}{\blx@mincitenames}%
+ \blx@xml@svalue{minsortnames}{\blx@minsortnames}%
+ \blx@xml@svalue{minitems}{\blx@minitems}%
+ \blx@xml@toggle{nohashothers}%
+ \blx@xml@toggle{noroman}%
+ \blx@xml@toggle{nosortothers}%
+ \blx@xml@toggle{singletitle}%
+ \blx@xml@toggle{skipbib}%
+ \blx@xml@toggle{skipbiblist}%
+ \blx@xml@toggle{skiplab}%
+ \blx@xml@svalue{uniquelist}{\blx@uniquelist}%
+ \blx@xml@svalue{uniquename}{\blx@uniquename}%
+ \blx@xml@toggle{uniqueprimaryauthor}%
+ \blx@xml@toggle{uniquetitle}%
+ \blx@xml@toggle{uniquebaretitle}%
+ \blx@xml@toggle{uniquework}%
+ \blx@xml@toggle{useprefix}%
+ \blx@xml@nametoggles
+ }%
+}
+
+\def\blx@ctrlwrite{%
+ \begingroup
+ \blx@safe@actives
+ \let\protect\string
+ % options
+ \protected@edef\labelalphaothers{\labelalphaothers}%
+ \protected@edef\sortalphaothers{\sortalphaothers}%
+ \blx@xmlsanitizeafter{\def\labelalphaothers}{\labelalphaothers}%
+ \blx@xmlsanitizeafter{\def\sortalphaothers}{\sortalphaothers}%
+ % Expand the global use* name toggles
+ \let\blx@xml@nametoggles\@empty
+ \def\do##1{\eappto\blx@xml@nametoggles{\blx@xml@toggle{use##1}}}%
+ \abx@donames
+ \edef\blx@tempa{%
+ \blx@xml@file
+ \blx@xml@comment{BIBER OPTIONS}%
+ \blx@xml@options{biber}{global}{%
+ \blx@xml@svalue{output_encoding}{\blx@texencoding}%
+ \blx@xml@svalue{input_encoding}{\blx@bibencoding}%
+ \blx@xml@toggle{debug}%
+ \blx@xml@svalue{mincrossrefs}{\blx@mincrossrefs}%
+ \blx@xml@svalue{minxrefs}{\blx@minxrefs}%
+ \blx@xml@svalue{mslang}{\blx@gmslang}%
+ \blx@xml@toggle{sortcase}%
+ \blx@xml@toggle{sortupper}%
+ }%
+ \blx@xml@comment{BIBLATEX OPTIONS}%
+ \blx@bcf@options@global
+ }%
+ \ifdef\blx@opts@type
+ {\def\do##1{%
+ \begingroup
+ \let\protect\relax
+ \blx@setoptions@type{##1}%
+ % Expand the type use* name toggles
+ \let\blx@xml@nametoggles\@empty
+ \def\do####1{\eappto\blx@xml@nametoggles{\blx@xml@toggle{use####1}}}%
+ \abx@donames
+ \blx@checkoptions@type
+ \xappto\blx@tempa{\blx@bcf@options@type{##1}}%
+ \endgroup}%
+ \dolistloop\blx@opts@type}
+ {}%
+ % options scope
+ % GLOBAL
+ \def\do##1{%
+ \begingroup
+ \def\do####1{\xappto\blx@bcf@options@scope@global{\blx@xml@option@scope{##1}{####1}}}%
+ \dolistcsloop{blx@globalopts@##1}%
+ \endgroup}%
+ \dolistloop\blx@globalopts@datatypes
+ % ENTRYTYPE
+ \def\do##1{%
+ \begingroup
+ \def\do####1{\xappto\blx@bcf@options@scope@type{\blx@xml@option@scope{##1}{####1}}}%
+ \dolistcsloop{blx@typeopts@##1}%
+ \endgroup}%
+ \dolistloop\blx@typeopts@datatypes
+ % ENTRY
+ \def\do##1{%
+ \begingroup
+ \def\do####1{\xappto\blx@bcf@options@scope@entry{\blx@xml@option@entryscope{##1}{####1}}}%
+ \dolistcsloop{blx@entryopts@##1}%
+ \endgroup}%
+ \dolistloop\blx@entryopts@datatypes
+ % NAMELIST
+ \def\do##1{%
+ \begingroup
+ \def\do####1{\xappto\blx@bcf@options@scope@namelist{\blx@xml@option@namelistscope{##1}{####1}}}%
+ \dolistcsloop{blx@namelistopts@##1}%
+ \endgroup}%
+ \dolistloop\blx@entryopts@datatypes
+ % NAME
+ \def\do##1{%
+ \begingroup
+ \def\do####1{\xappto\blx@bcf@options@scope@name{\blx@xml@option@namescope{##1}{####1}}}%
+ \dolistcsloop{blx@nameopts@##1}%
+ \endgroup}%
+ \dolistloop\blx@entryopts@datatypes
+
+ \eappto\blx@tempa{%
+ \blx@xml@comment{BIBLATEX OPTION SCOPE}%
+ \blx@xml@options@scope{GLOBAL}{\blx@bcf@options@scope@global}%
+ \blx@xml@options@scope{ENTRYTYPE}{\blx@bcf@options@scope@type}%
+ \blx@xml@options@scope{ENTRY}{\blx@bcf@options@scope@entry}%
+ \blx@xml@options@scope{NAMELIST}{\blx@bcf@options@scope@namelist}%
+ \blx@xml@options@scope{NAME}{\blx@bcf@options@scope@name}}
+ % datafieldsets
+ \def\do##1{%
+ \xappto\blx@bcf@datafieldsets{\blx@xml@datafieldset{##1}{\csuse{blx@datafieldsetmembers@##1}}}}
+ \dolistloop\blx@datafieldsets
+
+ \eappto\blx@tempa{%
+ \blx@xml@comment{DATAFIELDSETS}%
+ \blx@bcf@datafieldsets}%
+ % sourcemap
+ \ifbool{sourcemap}
+ {\eappto\blx@tempa{%
+ \blx@xml@comment{SOURCEMAP}%
+ \blx@xml@sourcemap{%
+ \ifdef\blx@sourcemap@user
+ {\blx@sourcemap@user}
+ {}%
+ \ifdef\blx@sourcemap@style
+ {\blx@sourcemap@style}
+ {}%
+ \ifdef\blx@sourcemap@defaults@bibtex
+ {\blx@sourcemap@defaults@bibtex}
+ {}%
+ \ifdef\blx@sourcemap@defaults@biblatexml
+ {\blx@sourcemap@defaults@biblatexml}
+ {}}}}
+ {}%
+ % labelalpha name template
+ \eappto\blx@tempa{\blx@xml@comment{LABELALPHA NAME TEMPLATE}}%
+ \def\do##1{%
+ \eappto\blx@tempa{%
+ \blx@xml@labelalphanametemplate{##1}{\csuse{blx@labelalphanametemplate@##1}}}}%
+ \dolistloop\blx@lantemplatespecs
+ % labelalpha template
+ \eappto\blx@tempa{%
+ \blx@xml@comment{LABELALPHA TEMPLATE}}%
+ \def\do##1{%
+ \eappto\blx@tempa{%
+ \blx@xml@labelalphatemplate{##1}{%
+ \csuse{blx@labelalphatemplate@##1}}}}%
+ \dolistloop\blx@latem@type
+ % extradate specification
+ \eappto\blx@tempa{%
+ \blx@xml@comment{EXTRADATE}%
+ \blx@xml@extradate{\csuse{blx@bcf@extradatespec}}}%
+ % data inheritance
+ \eappto\blx@tempa{%
+ \blx@xml@comment{INHERITANCE}%
+ \blx@xml@inheritance{%
+ \csuse{blx@inherit@default}%
+ \csuse{blx@inherit@data}}}%
+ % noinit
+ \ifcsdef{blx@noinit}
+ {\eappto\blx@tempa{%
+ \blx@xml@comment{NOINIT}%
+ \blx@xml@noinits{%
+ \csuse{blx@noinit}}}}%
+ {}%
+ % nolabel
+ \ifcsdef{blx@nolabel}
+ {\eappto\blx@tempa{%
+ \blx@xml@comment{NOLABEL}%
+ \blx@xml@nolabels{%
+ \csuse{blx@nolabel}}}}%
+ {}%
+ % nolabel
+ \ifcsdef{blx@nolabelwidthcount}
+ {\eappto\blx@tempa{%
+ \blx@xml@comment{NOLABELWIDTHCOUNT}%
+ \blx@xml@nolabelwidthcounts{%
+ \csuse{blx@nolabelwidthcount}}}}%
+ {}%
+ % nosort
+ \ifcsdef{blx@nosort}
+ {\eappto\blx@tempa{%
+ \blx@xml@comment{NOSORT}%
+ \blx@xml@nosorts{%
+ \csuse{blx@nosort}}}}%
+ {}%
+ % nonamestrings
+ \ifcsdef{blx@nonamestring}
+ {\eappto\blx@tempa{%
+ \blx@xml@comment{NONAMESTRING}%
+ \blx@xml@nonamestrings{%
+ \csuse{blx@nonamestring}}}}%
+ {}%
+ % transliteration
+ \ifdefempty\blx@translits
+ {}
+ {\eappto\blx@tempa{\blx@xml@comment{TRANSLITERATION}}%
+ \def\do##1{%
+ \eappto\blx@tempa{\blx@xml@transliteration{##1}{\csuse{blx@translit@##1}}}}%
+ \dolistloop\blx@translits}%
+ % uniquenametemplate
+ \eappto\blx@tempa{\blx@xml@comment{UNIQUENAME TEMPLATES}}%
+ \def\do##1{%
+ \eappto\blx@tempa{%
+ \blx@xml@uniquenametemplate{##1}{\csuse{blx@uniquenametemplate@##1}}}}%
+ \dolistloop\blx@untemplatespecs
+ % sortingnamekeytemplate
+ \eappto\blx@tempa{\blx@xml@comment{SORTING NAME KEY TEMPLATES}}%
+ \def\do##1{%
+ \eappto\blx@tempa{%
+ \blx@xml@sortingnamekeytemplate{##1}{\csuse{blx@sortingnamekeytemplatesvisibility@##1}}{\csuse{blx@sortingnamekeytemplate@##1}}}}%
+ \dolistloop\blx@sortingnamekeytemplates
+ % presort/sorting excludes/sorting includes
+ \def\do##1{%
+ \eappto\blx@bcf@presort{\csuse{blx@bcf@presort@##1}}%
+ \eappto\blx@bcf@exclude{\csuse{blx@bcf@exclude@##1}}%
+ \eappto\blx@bcf@include{\csuse{blx@bcf@include@##1}}}%
+ \abx@doentrytypes
+ \do{*}% entrytype wildcard
+ \eappto\blx@tempa{%
+ \blx@bcf@presort
+ \blx@bcf@exclude
+ \blx@bcf@include}%
+ % datamodel
+ \eappto\blx@tempa{%
+ \blx@xml@comment{DATA MODEL}%
+ \blx@xml@datamodel{%
+ \blx@xml@datamodel@constants{%
+ \blx@bcf@datamodel@constants
+ }%
+ \blx@xml@datamodel@entrytypes{%
+ \blx@bcf@datamodel@entrytypes
+ }%
+ \blx@xml@datamodel@fields{%
+ \blx@bcf@datamodel@fields
+ }%
+ \blx@bcf@datamodel@entryfields
+ \blx@bcf@datamodel@multiscript@entryfields
+ \blx@bcf@datamodel@constraints
+ }%
+ }%
+ % files
+ \let\blx@tempb\@empty
+ \blx@bibdata\blx@tempb\blx@bibfiles
+ \eappto\blx@tempa{%
+ \blx@xml@comment{CITATION DATA}%
+ \blx@xml@comment{SECTION 0}%
+ \blx@xml@bibdata{0}{\blx@tempb}%
+ \blx@xml@section{0}%
+ }%
+ \immediate\openout\blx@bcfout\jobname.bcf\relax
+ \blx@auxwrite\blx@bcfout{}{\blx@tempa}%
+ \global\undef\blx@tempa
+ \endgroup
+ \AfterEndDocument{%
+ \def\do##1{%
+ \csxappto{blx@sortingtemplates}{%
+ \blx@xml@sortingtemplate{##1}
+ {\ifcsdef{blx@sortdef@locale@##1}{ locale="\csuse{blx@sortdef@locale@##1}"}{}}
+ {\csuse{blx@sortingtemplate@##1}}}}%
+ \dolistloop\blx@sortingtemplatenames
+ \blx@auxwrite\blx@bcfout{}{%
+ \blx@xml@endsection\blx@nl
+ \blx@xml@comment{SORTING TEMPLATES}%
+ \csuse{blx@sortingtemplates}%
+ \blx@xml@comment{DATALISTS}%
+ \csuse{blx@dlists}%
+ \blx@xml@endfile}%
+ \immediate\closeout\blx@bcfout}}
+
+%% Customisation
+
+% nolabel
+\newrobustcmd*{\DeclareNolabel}[1]{%
+ \begingroup
+ \let\nolabel\blx@nolabel@setup
+ \let\blx@tempa\@empty
+ #1%
+ \global\let\blx@nolabel\blx@tempa
+ \endgroup}
+\@onlypreamble\DeclareNolabel
+
+\newcommand*{\blx@nolabel@setup}[1]{%
+ \eappto\blx@tempa{%
+ \blx@xml@nolabel{#1}}}
+
+% nolabelwidthcount
+\newrobustcmd*{\DeclareNolabelwidthcount}[1]{%
+ \begingroup
+ \let\nolabel\blx@nolabelwidthcount@setup
+ \let\blx@tempa\@empty
+ #1%
+ \global\let\blx@nolabelwidthcount\blx@tempa
+ \endgroup}
+\@onlypreamble\DeclareNolabelwidthcount
+
+\newcommand*{\blx@nolabelwidthcount@setup}[1]{%
+ \eappto\blx@tempa{%
+ \blx@xml@nolabelwidthcount{#1}}}
+
+% nosort
+\newrobustcmd*{\DeclareNosort}[1]{%
+ \begingroup
+ \let\nosort\blx@nosort@setup
+ \let\blx@tempa\@empty
+ #1%
+ \global\let\blx@nosort\blx@tempa
+ \endgroup}
+\@onlypreamble\DeclareNosort
+
+\newcommand*{\blx@nosort@setup}[2]{%
+ \eappto\blx@tempa{%
+ \blx@xml@nosort{#1}{#2}}}
+
+% nonamestring
+\newrobustcmd*{\DeclareNonamestring}[1]{%
+ \begingroup
+ \let\nonamestring\blx@nonamestring@setup
+ \let\blx@tempa\@empty
+ #1%
+ \global\let\blx@nonamestring\blx@tempa
+ \endgroup}
+\@onlypreamble\DeclareNonamestring
+
+\newcommand*{\blx@nonamestring@setup}[2]{%
+ \eappto\blx@tempa{%
+ \blx@xml@nonamestring{#1}{#2}}}
+
+% noinit
+\newrobustcmd*{\DeclareNoinit}[1]{%
+ \begingroup
+ \let\noinit\blx@noinit@setup
+ \let\blx@tempa\@empty
+ #1%
+ \global\let\blx@noinit\blx@tempa
+ \endgroup}
+\@onlypreamble\DeclareNoinit
+
+\newcommand*{\blx@noinit@setup}[1]{%
+ \eappto\blx@tempa{%
+ \blx@xml@noinit{#1}}}
+
+% datafieldsets
+\newrobustcmd*{\DeclareDatafieldSet}[2]{%
+ \begingroup
+ \let\member\blx@datafieldset@member
+ \let\blx@tempa\@empty
+ \def\blx@setname{#1}
+ \cslet{blx@datafieldset@#1}\@empty
+ #2%
+ \csxdef{blx@datafieldsetmembers@#1}{\blx@tempa}%
+ \listgadd\blx@datafieldsets{#1}%
+ \global\csletcs{datafieldset#1}{blx@datafieldset@#1}% expose user-facing macro
+ \endgroup}
+\@onlypreamble\DeclareDatafieldSet
+
+\newcommand*{\blx@datafieldset@member}[1][2]{%
+ \let\blx@dm@fieldtype\@empty
+ \let\blx@dm@datatype\@empty
+ \let\blx@member@field\@empty
+ \let\blx@tempb\@empty
+ \blx@kv@setkeys{blx@datafieldsets@member}{#1}%
+ \eappto\blx@tempa{%
+ \blx@xml@datafieldsets@member{\blx@tempb}}%
+ \ifdefempty\blx@member@field
+ {}
+ {\listcsxadd{blx@datafieldset@\blx@setname}{\blx@member@field}}%
+ % Set some internal macros in case biblatex needs to use the set
+ \ifboolexpr{%
+ not test {\ifdefempty{\blx@dm@fieldtype}}
+ and
+ not test {\ifdefempty{\blx@dm@datatype}}}
+ {\def\do##1{%
+ \listcsxadd{blx@datafieldset@\blx@setname}{##1}}
+ \dolistcsloop{blx@datamodelfields@types@\blx@dm@fieldtype @\blx@dm@datatype}}
+ {\ifdefempty{\blx@dm@fieldtype}
+ {}
+ {\def\do##1{%
+ \listcsxadd{blx@datafieldset@\blx@setname}{##1}}
+ \dolistcsloop{blx@datamodelfields@fieldtypes@\blx@dm@fieldtype}}%
+ \ifdefempty{\blx@dm@datatype}
+ {}
+ {\def\do##1{%
+ \listcsxadd{blx@datafieldset@\blx@setname}{##1}}
+ \dolistcsloop{blx@datamodelfields@datatypes@\blx@dm@datatype}}}}
+
+\blx@kv@defkey{blx@datafieldsets@member}{datatype}{% characters
+ \appto\blx@tempb{ datatype="#1"}%
+ \def\blx@dm@datatype{#1}}
+\blx@kv@defkey{blx@datafieldsets@member}{fieldtype}{% characters
+ \appto\blx@tempb{ fieldtype="#1"}%
+ \def\blx@dm@fieldtype{#1}}
+\blx@kv@defkey{blx@datafieldsets@member}{field}{% characters
+ \appto\blx@tempb{ field="#1"}%
+ \def\blx@member@field{#1}}
+
+% sourcemap
+\newrobustcmd*{\DeclareSourcemap}[1]{%
+ \booltrue{sourcemap}%
+ \begingroup
+ \let\maps\blx@usersourcemap@maps
+ \let\blx@tempa\@empty
+ #1%
+ \xappto\blx@sourcemap@user\blx@tempa%
+ \endgroup}
+\@onlypreamble\DeclareSourcemap
+
+\newrobustcmd*{\DeclareStyleSourcemap}[1]{%
+ \booltrue{sourcemap}%
+ \begingroup
+ \let\maps\blx@stylesourcemap@maps
+ \let\blx@tempa\@empty
+ #1%
+ \xappto\blx@sourcemap@style\blx@tempa%
+ \endgroup}
+
+\@onlypreamble\DeclareStyleSourcemap
+
+\newrobustcmd*{\DeclareDriverSourcemap}[2][]{%
+ \booltrue{sourcemap}%
+ \begingroup
+ \let\blx@tempa\@empty
+ \let\blx@tempb\@empty
+ \let\blx@tempc\@empty
+ \let\blx@tempd\@empty
+ \let\map\blx@sourcemap@map
+ #2%
+ \ifblank{#1}
+ {\blx@kv@setkeys{blx@sourcemap@maps}{datatype=bibtex, level=driver}}
+ {\blx@kv@setkeys{blx@sourcemap@maps}{#1, level=driver}}%
+ \eappto\blx@tempa{%
+ \blx@xml@sourcemap@maps{\blx@tempb}{\blx@tempc}}%
+ \csxdef{blx@sourcemap@defaults@\blx@tempd}{\blx@tempa}%
+ \endgroup}
+\@onlypreamble\DeclareDriverSourcemap
+
+\newcommand*{\blx@usersourcemap@maps}[2][]{%
+ \let\blx@tempb\@empty
+ \let\blx@tempc\@empty
+ \let\map\blx@sourcemap@map
+ \ifblank{#1}
+ {\blx@kv@setkeys{blx@sourcemap@maps}{datatype=bibtex, level=user}}
+ {\blx@kv@setkeys{blx@sourcemap@maps}{#1, level=user}}%
+ #2%
+ \eappto\blx@tempa{%
+ \blx@xml@sourcemap@maps{\blx@tempb}{\blx@tempc}}}
+
+\newcommand*{\blx@stylesourcemap@maps}[2][]{%
+ \let\blx@tempb\@empty
+ \let\blx@tempc\@empty
+ \let\map\blx@sourcemap@map
+ \ifblank{#1}
+ {\blx@kv@setkeys{blx@sourcemap@maps}{datatype=bibtex, level=style}}
+ {\blx@kv@setkeys{blx@sourcemap@maps}{#1, level=style}}%
+ #2%
+ \eappto\blx@tempa{%
+ \blx@xml@sourcemap@maps{\blx@tempb}{\blx@tempc}}}
+
+\blx@kv@defkey{blx@sourcemap@maps}{datatype}{% characters
+ \eappto\blx@tempb{ datatype="#1"}%
+ \eappto\blx@tempd{#1}}
+\blx@kv@defkey{blx@sourcemap@maps}{overwrite}[true]{% true|false
+ \ifstrequal{#1}{true}
+ {\appto\blx@tempb{ map\string_overwrite="1"}}
+ {}}
+\blx@kv@defkey{blx@sourcemap@maps}{level}{% user|style|driver
+ \appto\blx@tempb{ level="#1"}}
+
+\newcommand*{\blx@sourcemap@map}[2][]{%
+ \let\blx@tempm\@empty
+ \let\blx@tempe\@empty
+ \let\perdatasource\blx@sourcemap@perdatasource
+ \let\pertype\blx@sourcemap@pertype
+ \let\pernottype\blx@sourcemap@pernottype
+ \let\step\blx@sourcemap@step
+ \ifblank{#1}
+ {}
+ {\blx@kv@setkeys{blx@sourcemap@map}{#1}}%
+ #2%
+ \eappto\blx@tempc{%
+ \blx@xml@sourcemap@map{\blx@tempm}{\blx@tempe}}}
+
+\blx@kv@defkey{blx@sourcemap@map}{overwrite}[true]{% true|false
+ \ifstrequal{#1}{true}
+ {\appto\blx@tempm{ map\string_overwrite="1"}}
+ {}}
+\blx@kv@defkey{blx@sourcemap@map}{foreach}{% characters
+ \eappto\blx@tempm{ map\string_foreach="#1"}}
+\blx@kv@defkey{blx@sourcemap@map}{refsection}{% integer
+ \eappto\blx@tempm{ refsection="#1"}}
+
+\newcommand*{\blx@sourcemap@perdatasource}[1]{%
+ \eappto\blx@tempe{%
+ \blx@xml@sourcemap@perdatasource{#1}}}
+
+\newcommand*{\blx@sourcemap@pertype}[1]{%
+ \eappto\blx@tempe{%
+ \blx@xml@sourcemap@pertype{#1}}}
+
+\newcommand*{\blx@sourcemap@pernottype}[1]{%
+ \eappto\blx@tempe{%
+ \blx@xml@sourcemap@pernottype{#1}}}
+
+\newcommand*{\blx@sourcemap@step}[1][2]{%
+ \let\blx@tempf\@empty
+ \blx@kv@setkeys{blx@sourcemap@step}{#1}%
+ \eappto\blx@tempe{%
+ \blx@xml@sourcemap@step{\blx@tempf}}}
+
+\blx@kv@defkey{blx@sourcemap@step}{typesource}{% characters
+ \eappto\blx@tempf{ map\string_type\string_source="#1"}}
+\blx@kv@defkey{blx@sourcemap@step}{typetarget}{% characters
+ \eappto\blx@tempf{ map\string_type\string_target="#1"}}
+\blx@kv@defkey{blx@sourcemap@step}{final}[true]{% true|false
+ \ifstrequal{#1}{true}
+ {\appto\blx@tempf{ map\string_final="1"}}
+ {}}
+\blx@kv@defkey{blx@sourcemap@step}{cited}[true]{% true|false
+ \ifstrequal{#1}{true}
+ {\appto\blx@tempf{ map\string_entrykey\string_cited="1"}}
+ {}}
+\blx@kv@defkey{blx@sourcemap@step}{nocited}[true]{% true|false
+ \ifstrequal{#1}{true}
+ {\appto\blx@tempf{ map\string_entrykey\string_nocited="1"}}
+ {}}
+\blx@kv@defkey{blx@sourcemap@step}{citedornocited}[true]{% true|false
+ \ifstrequal{#1}{true}
+ {\appto\blx@tempf{ map\string_entrykey\string_citedornocited="1"}}
+ {}}
+\blx@kv@defkey{blx@sourcemap@step}{allnocited}[true]{% true|false
+ \ifstrequal{#1}{true}
+ {\appto\blx@tempf{ map\string_entrykey\string_allnocited="1"}}
+ {}}
+\blx@kv@defkey{blx@sourcemap@step}{starnocited}[true]{% true|false
+ \ifstrequal{#1}{true}
+ {\appto\blx@tempf{ map\string_entrykey\string_starnocited="1"}}
+ {}}
+\blx@kv@defkey{blx@sourcemap@step}{fieldsource}{% characters
+ \eappto\blx@tempf{ map\string_field\string_source="#1"}}
+\blx@kv@defkey{blx@sourcemap@step}{fieldsourcemsform}{% characters
+ \eappto\blx@tempf{ map\string_field\string_source\string_form="#1"}}
+\blx@kv@defkey{blx@sourcemap@step}{fieldsourcemslang}{% characters
+ \eappto\blx@tempf{ map\string_field\string_source\string_lang="#1"}}
+\blx@kv@defkey{blx@sourcemap@step}{notfield}{% characters
+ \eappto\blx@tempf{ map\string_notfield="#1"}}
+\blx@kv@defkey{blx@sourcemap@step}{fieldtarget}{% characters
+ \eappto\blx@tempf{ map\string_field\string_target="#1"}}
+\blx@kv@defkey{blx@sourcemap@step}{fieldtargetmsform}{% characters
+ \eappto\blx@tempf{ map\string_field\string_target\string_form="#1"}}
+\blx@kv@defkey{blx@sourcemap@step}{fieldtargetmslang}{% characters
+ \eappto\blx@tempf{ map\string_field\string_target\string_lang="#1"}}
+\blx@kv@defkey{blx@sourcemap@step}{fieldset}{% characters
+ \eappto\blx@tempf{ map\string_field\string_set="#1"}}
+% We are sanitising the XML here as it's the value of an attribute which
+% might contain quotes or ampersands (URLs, for example)
+\blx@kv@defkey{blx@sourcemap@step}{fieldvalue}{% characters
+ \blx@xmlsanitizeafter{\def\blx@temps}{#1}%
+ \eappto\blx@tempf{ map\string_field\string_value="\blx@temps"}}
+\blx@kv@defkey{blx@sourcemap@step}{append}[true]{% true|false
+ \ifstrequal{#1}{true}
+ {\appto\blx@tempf{ map\string_append="1"}}
+ {}}
+\blx@kv@defkey{blx@sourcemap@step}{appendstrict}[true]{% true|false
+ \ifstrequal{#1}{true}
+ {\appto\blx@tempf{ map\string_appendstrict="1"}}
+ {}}
+\blx@kv@defkey{blx@sourcemap@step}{null}[true]{% true|false
+ \ifstrequal{#1}{true}
+ {\appto\blx@tempf{ map\string_null="1"}}
+ {}}
+\blx@kv@defkey{blx@sourcemap@step}{entrynull}[true]{% true|false
+ \ifstrequal{#1}{true}
+ {\appto\blx@tempf{ map\string_entry\string_null="1"}}
+ {}}
+\blx@kv@defkey{blx@sourcemap@step}{entrynocite}[true]{% true|false
+ \ifstrequal{#1}{true}
+ {\appto\blx@tempf{ map\string_entry\string_nocite="1"}}
+ {}}
+\blx@kv@defkey{blx@sourcemap@step}{entrynew}{% characters
+ \appto\blx@tempf{ map\string_entry\string_new="#1"}}
+\blx@kv@defkey{blx@sourcemap@step}{entrynewtype}{% characters
+ \appto\blx@tempf{ map\string_entry\string_newtype="#1"}}
+\blx@kv@defkey{blx@sourcemap@step}{entrytarget}{% characters
+ \appto\blx@tempf{ map\string_entrytarget="#1"}}
+\blx@kv@defkey{blx@sourcemap@step}{entryclone}{% characters
+ \appto\blx@tempf{ map\string_entry\string_clone="#1"}}
+\blx@kv@defkey{blx@sourcemap@step}{origfield}[true]{% true|false
+ \ifstrequal{#1}{true}
+ {\appto\blx@tempf{ map\string_origfield="1"}}
+ {}}
+\blx@kv@defkey{blx@sourcemap@step}{origfieldval}[true]{% true|false
+ \ifstrequal{#1}{true}
+ {\appto\blx@tempf{ map\string_origfieldval="1"}}
+ {}}
+\blx@kv@defkey{blx@sourcemap@step}{origentrytype}[true]{% true|false
+ \ifstrequal{#1}{true}
+ {\appto\blx@tempf{ map\string_origentrytype="1"}}
+ {}}
+\blx@kv@defkey{blx@sourcemap@step}{match}{% characters
+ \appto\blx@tempf{ map\string_match="#1"}}
+\blx@kv@defkey{blx@sourcemap@step}{matchi}{% characters
+ \appto\blx@tempf{ map\string_matchi="#1"}}
+\blx@kv@defkey{blx@sourcemap@step}{matches}{% characters
+ \appto\blx@tempf{ map\string_matches="#1"}}
+\blx@kv@defkey{blx@sourcemap@step}{matchesi}{% characters
+ \appto\blx@tempf{ map\string_matchesi="#1"}}
+\blx@kv@defkey{blx@sourcemap@step}{notmatch}{% characters
+ \appto\blx@tempf{ map\string_notmatch="#1"}}
+\blx@kv@defkey{blx@sourcemap@step}{notmatchi}{% characters
+ \appto\blx@tempf{ map\string_notmatchi="#1"}}
+\blx@kv@defkey{blx@sourcemap@step}{replace}{% characters
+ \eappto\blx@tempf{ map\string_replace="#1"}}
+
+% [<specname>]{<spec>}
+\newrobustcmd*{\DeclareLabelalphaNameTemplate}[2][]{%
+ \begingroup
+ \ifblank{#1}
+ {\def\blx@lantname{global}}% default
+ {\def\blx@lantname{#1}}%
+ \let\namepart\blx@lantem@namepart
+ \let\blx@tempa\@empty
+ \blx@tempcnta\z@
+ #2%
+ \global\cslet{blx@labelalphanametemplate@\blx@lantname}\blx@tempa
+ \xifinlist\blx@lantname\blx@lantemplatespecs
+ {}
+ {\listxadd\blx@lantemplatespecs\blx@lantname}%
+ \endgroup}
+\@onlypreamble\DeclareLabelalphaNameTemplate
+\blx@DeclareBackendOption{global}[xml]{labelalphanametemplate}
+\DeclareBiblatexOption{entry,namelist,name}[string]{labelalphanametemplatename}{%
+ \def\blx@refcontext@labelalphanametemplatename{#1}}
+
+\newcommand*{\blx@lantem@namepart}[2][]{%
+ \advance\blx@tempcntb\@ne
+ \edef\blx@tempe{order="\the\blx@tempcntb"}%
+ \let\blx@tempc\@empty
+ \ifblank{#1}
+ {}
+ {\blx@kv@setkeys{blx@lantem@namepart}{#1}}%
+ \eappto\blx@tempa{%
+ \blx@xml@labelalphanametemplatenamepart{\blx@tempe}{\blx@tempc}{#2}}}
+
+\blx@kv@defkey{blx@lantem@namepart}{use}[true]{% use* option for namepart true|false
+ \ifstrequal{#1}{true}
+ {\appto\blx@tempc{ use="1"}}
+ {}}
+
+\blx@kv@defkey{blx@lantem@namepart}{pre}[true]{% pre option for namepart true|false
+ \ifstrequal{#1}{true}
+ {\appto\blx@tempc{ pre="1"}}
+ {}}
+
+\blx@kv@defkey{blx@lantem@namepart}{compound}[true]{% base option for namepart true|false
+ \ifstrequal{#1}{true}
+ {\appto\blx@tempc{ substring\string_compound="1"}}
+ {}}
+
+\blx@kv@defkey{blx@lantem@namepart}{strwidth}{% integer
+ \eappto\blx@tempc{ substring\string_width="#1"}}
+
+\blx@kv@defkey{blx@lantem@field}{strside}{% left|right
+ \ifstrequal{#1}{right}
+ {\eappto\blx@tempc{ substring\string_side="right"}}
+ {\eappto\blx@tempc{ substring\string_side="left"}}}
+
+% [<entrytype>]{<spec>}
+\newrobustcmd*{\DeclareLabelalphaTemplate}[2][]{%
+ \ifblank{#1}
+ {\blx@latem{#2}{global}}
+ {\forcsvlist{\blx@latem{#2}}{#1}}}
+\@onlypreamble\DeclareLabelalphaTemplate
+\blx@DeclareBackendOption{global,type}[xml]{labelalphatemplate}
+
+\def\blx@latem#1#2{%
+ \begingroup
+ \let\labelelement\blx@latem@element
+ \let\field\blx@latem@field
+ \let\literal\blx@latem@literal
+ \blx@tempcnta\z@
+ \let\blx@tempa\@empty
+ #1%
+ \ifdef\blx@latem@type
+ {\ifinlist{#2}\blx@latem@type
+ {\global\cslet{blx@labelalphatemplate@#2}\blx@tempa}
+ {\listgadd\blx@latem@type{#2}%
+ \global\cslet{blx@labelalphatemplate@#2}\blx@tempa}}
+ {\listgadd\blx@latem@type{#2}%
+ \global\cslet{blx@labelalphatemplate@#2}\blx@tempa}%
+ \endgroup}
+
+\newcommand*{\blx@latem@element}[1]{%
+ \advance\blx@tempcnta\@ne
+ \let\blx@tempb\@empty
+ #1%
+ \eappto\blx@tempa{%
+ \blx@xml@labelalpha@element{\the\blx@tempcnta}{\blx@tempb}}}
+
+\newcommand*{\blx@latem@literal}[1]{%
+ \blx@xmlsanitizeafter{\def\blx@temps}{#1}%
+ \eappto\blx@tempb{%
+ \blx@xml@labelalpha@part{}{\expandafter\regexp\expandafter{\blx@temps}}}}
+
+\newcommand*{\blx@latem@field}[2][]{%
+ \let\blx@tempc\@empty
+ \ifblank{#1}
+ {}
+ {\blx@kv@setkeys{blx@latem@field}{#1}}%
+ \eappto\blx@tempb{%
+ \blx@xml@labelalpha@part{\blx@tempc}{#2}}}
+
+\blx@kv@defkey{blx@latem@field}{form}{% string
+ \appto\blx@tempc{ form="#1"}}
+\blx@kv@defkey{blx@latem@field}{lang}{% string
+ \appto\blx@tempc{ lang="#1"}}
+\blx@kv@defkey{blx@latem@field}{uppercase}[true]{% true|false
+ \ifstrequal{#1}{true}
+ {\appto\blx@tempc{ uppercase="1"}}
+ {}}
+\blx@kv@defkey{blx@latem@field}{lowercase}[true]{% true|false
+ \ifstrequal{#1}{true}
+ {\appto\blx@tempc{ lowercase="1"}}
+ {}}
+\blx@kv@defkey{blx@latem@field}{final}[true]{% true|false
+ \ifstrequal{#1}{true}
+ {\appto\blx@tempc{ final="1"}}
+ {}}
+\blx@kv@defkey{blx@latem@field}{strwidth}{% integer
+ \eappto\blx@tempc{ substring\string_width="#1"}}
+\blx@kv@defkey{blx@latem@field}{varwidth}[true]{% "v"
+ \ifstrequal{#1}{true}
+ {\appto\blx@tempc{ substring\string_width="v"}}
+ {}}
+\blx@kv@defkey{blx@latem@field}{varwidthnorm}[true]{% "vf"
+ \ifstrequal{#1}{true}
+ {\appto\blx@tempc{ substring\string_width="vf"}}
+ {}}
+\blx@kv@defkey{blx@latem@field}{varwidthlist}[true]{% "l"
+ \ifstrequal{#1}{true}
+ {\appto\blx@tempc{ substring\string_width="l"}}
+ {}}
+\blx@kv@defkey{blx@latem@field}{strfixedcount}{%
+ \eappto\blx@tempc{ substring\string_fixed\string_threshold="#1"}}
+\blx@kv@defkey{blx@latem@field}{strwidthmax}{%
+ \eappto\blx@tempc{ substring\string_width\string_max="#1"}}
+\blx@kv@defkey{blx@latem@field}{strside}{% left|right
+ \ifstrequal{#1}{right}
+ {\eappto\blx@tempc{ substring\string_side="right"}}
+ {\eappto\blx@tempc{ substring\string_side="left"}}}
+\blx@kv@defkey{blx@latem@field}{namessep}{%
+ \eappto\blx@tempc{ namessep="#1"}}
+\blx@kv@defkey{blx@latem@field}{ifnames}{%
+ \eappto\blx@tempc{ ifnames="#1"}}
+\blx@kv@defkey{blx@latem@field}{names}{%
+ \eappto\blx@tempc{ names="#1"}}
+\blx@kv@defkey{blx@latem@field}{noalphaothers}[true]{%
+ \eappto\blx@tempc{ noalphaothers="1"}}
+\blx@kv@defkey{blx@latem@field}{padchar}{%
+ \blx@xmlsanitizeafter{\def\blx@temps}{#1}%
+ \eappto\blx@tempc{ pad\string_char="\expandafter\regexp\expandafter{\blx@temps}"}}
+\blx@kv@defkey{blx@latem@field}{padside}{% left|right
+ \ifstrequal{#1}{left}
+ {\eappto\blx@tempc{ pad\string_side="left"}}
+ {\eappto\blx@tempc{ pad\string_side="right"}}}
+
+% [<exceptions>]{<options>}
+\newrobustcmd*{\DefaultInheritance}[2][]{%
+ \begingroup
+ \let\blx@tempf\@empty
+ \ifblank{#2}
+ {}
+ {\blx@kv@setkeys{blx@inherit@default}{#2}}%
+ \edef\blx@tempa{\space
+ inherit\string_all="\iftoggle{blx@inherit@all}{true}{false}"\space
+ override\string_target="\iftoggle{blx@inherit@override}{true}{false}"%
+ \blx@tempf}%
+ \let\blx@tempb\@empty
+ \let\except\blx@inherit@except
+ #1%
+ \xdef\blx@inherit@default{%
+ \blx@xml@inherit@defaults{\blx@tempa}{\blx@tempb}}%
+ \endgroup}
+\@onlypreamble\DefaultInheritance
+
+\newtoggle{blx@inherit@all}
+\newtoggle{blx@inherit@override}
+
+\blx@kv@defkey{blx@inherit@default}{all}[true]{% true|false
+ \settoggle{blx@inherit@all}{#1}}
+\blx@kv@defkey{blx@inherit@default}{override}[true]{% true|false
+ \settoggle{blx@inherit@override}{#1}}
+\blx@kv@defkey{blx@inherit@default}{ignore}{% csv list
+ \edef\blx@tempf{ ignore="#1"}}
+
+% {<source>}{<target>}{<options>}
+\newcommand*{\blx@inherit@except}[3]{%
+ \let\blx@tempc\@empty
+ \ifblank{#3}
+ {}
+ {\blx@kv@setkeys{blx@inherit@except}{#3}}%
+ \eappto\blx@tempb{%
+ \blx@xml@inherit@type{#1}{#2}{\blx@tempc}}}
+
+\blx@kv@defkey{blx@inherit@except}{all}[true]{% true|false
+ \eappto\blx@tempc{ inherit\string_all="#1"}}
+\blx@kv@defkey{blx@inherit@except}{override}[true]{% true|false
+ \eappto\blx@tempc{ override\string_target="#1"}}
+\blx@kv@defkey{blx@inherit@except}{ignore}{% csv list
+ \eappto\blx@tempc{ ignore="#1"}}
+
+% {<type,type,...>}{<type,type,...>}{<spec>}
+\newrobustcmd*{\DeclareDataInheritance}[4][]{%
+ \begingroup
+ \let\blx@tempa\@empty
+ \let\blx@tempf\@empty
+ \ifblank{#1}
+ {}
+ {\blx@kv@setkeys{blx@inherit}{#1}}%
+ \forcsvlist{\blx@inherit@i{#3}}{#2}%
+ \let\blx@tempb\@empty
+ \let\inherit\blx@inherit@field
+ \let\noinherit\blx@inherit@block
+ #4%
+ \xappto\blx@inherit@data{%
+ \blx@xml@inherit@data{\blx@tempf}{%
+ \blx@tempa
+ \blx@tempb}}%
+ \endgroup}
+\@onlypreamble\DeclareDataInheritance
+
+\def\blx@inherit@i#1#2{%
+ \forcsvlist{\blx@inherit@ii{#2}}{#1}}
+
+\def\blx@inherit@ii#1#2{%
+ \eappto\blx@tempa{\blx@xml@inherit@type{#1}{#2}{}}}
+
+\blx@DeclareBackendOption{global}[xml]{inheritance}
+
+% [<options>]{<source>}{<target>}
+\newcommand*{\blx@inherit@field}[3][]{%
+ \let\blx@tempc\@empty
+ \ifblank{#1}
+ {}
+ {\blx@kv@setkeys{blx@inherit@field}{#1}}%
+ \eappto\blx@tempb{%
+ \blx@xml@inherit@field{#2}{#3}{\blx@tempc}}}
+
+\newcommand*{\blx@inherit@block}[1]{%
+ \eappto\blx@tempb{\blx@xml@inherit@block{#1}}}
+
+\blx@kv@defkey{blx@inherit}{ignore}{% csv list
+ \edef\blx@tempf{ ignore="#1"}}
+
+\blx@kv@defkey{blx@inherit@field}{override}[true]{% true|false
+ \ifstrequal{#1}{true}
+ {\edef\blx@tempc{ override\string_target="true"}}
+ {\edef\blx@tempc{ override\string_target="false"}}}
+
+\newrobustcmd*{\ResetDataInheritance}{%
+ \global\csundef{blx@inherit@data}}
+\@onlypreamble\ResetDataInheritance
+
+% {<name>}{<spec>}
+\newrobustcmd*{\DeclareBiblistFilter}[2]{%
+ \begingroup
+ \let\filteror\blx@biblistfilteror
+ \let\filter\blx@biblistfilter
+ \let\blx@tempa\@empty
+ #2%
+ \global\cslet{blx@biblistfilters@#1}\blx@tempa
+ \endgroup}
+\@onlypreamble\DeclareBiblistFilter
+
+\newcommand*{\blx@biblistfilteror}[1]{%
+ \eappto\blx@tempa{\blx@xml@dlistfilterorbegin}%
+ #1%
+ \eappto\blx@tempa{\blx@xml@dlistfilterorend}}
+
+\newcommand*{\blx@biblistfilter}[1][2]{%
+ \let\blx@tempc\@empty
+ \let\blx@tempd\@empty
+ \blx@kv@setkeys{blx@biblistfilter@filter}{#1}%
+ \eappto\blx@tempa{%
+ \blx@xml@dlistfilter{\blx@tempc}{\blx@tempd}}}
+
+\blx@kv@defkey{blx@biblistfilter@filter}{type}{%
+ \def\blx@tempc{#1}}
+\blx@kv@defkey{blx@biblistfilter@filter}{filter}{%
+ \def\blx@tempd{#1}}
+
+% Predefine filters for label fields
+\def\do#1{\DeclareBiblistFilter{#1}{\filter[type=field,filter=#1]}}
+\abx@dolabelfields
+
+\blx@kv@defkey{blx@biblist1}{biblistfilter}{\blx@key@biblistfilter{#1}}
+\blx@kv@defkey{blx@biblist2}{biblistfilter}{}
+
+\def\blx@key@biblistfilter#1{%
+ \ifcsundef{blx@biblistfilters@#1}
+ {\blx@error
+ {BiblistFilter '#1' not found}
+ {The BiblistFilter '#1' could not be found.\MessageBreak
+ Use '\string\DeclareBiblistFilter' to define it}}
+ {\def\blx@thebiblistfilter{#1}}}
+
+% [<entrytype>]{specification}
+\newrobustcmd*{\DeclareSortTranslit}[2][]{%
+ \begingroup
+ \ifblank{#1}
+ {\def\blx@tempa{*}}
+ {\def\blx@tempa{#1}}%
+ \let\translit\blx@translit@setup
+ \let\blx@tempb\@empty
+ #2%
+ \global\cslet{blx@translit@\blx@tempa}\blx@tempb
+ \xifinlist\blx@tempa\blx@translits
+ {}
+ {\listxadd\blx@translits\blx@tempa}%
+ \endgroup}
+\@onlypreamble\DeclareSortTranslit
+\blx@DeclareBackendOption{global,type}[xml]{translit}
+
+% [<langids>]{<field or set>}{translitsource}{translittarget}
+\newcommand*{\blx@translit@setup}[4][]{%
+ \eappto\blx@tempb{%
+ \ifblank{#1}
+ {\blx@xml@translit{}{#2}{#3}{#4}}
+ {\blx@xml@translit{langids="#1" }{#2}{#3}{#4}}}}
+
+% [<specname>]{<spec>}
+\newrobustcmd*{\DeclareUniquenameTemplate}[2][]{%
+ \begingroup
+ \ifblank{#1}
+ {\def\blx@untname{global}}% default
+ {\def\blx@untname{#1}}%
+ \let\namepart\blx@untemp@namepart
+ \let\blx@tempa\@empty
+ \blx@tempcnta\z@
+ #2%
+ \global\cslet{blx@uniquenametemplate@\blx@untname}\blx@tempa
+ \xifinlist\blx@untname\blx@untemplatespecs
+ {}
+ {\listxadd\blx@untemplatespecs\blx@untname}%
+ \endgroup}
+\@onlypreamble\DeclareUniquenameTemplate
+\blx@DeclareBackendOption{global}[xml]{uniquenametemplate}
+\DeclareBiblatexOption{entry,namelist,name}[string]{uniquenametemplatename}{%
+ \def\blx@refcontext@uniquenametemplatename{#1}}
+
+\newcommand*{\blx@untemp@namepart}[2][]{%
+ \advance\blx@tempcntb\@ne
+ \edef\blx@tempe{order="\the\blx@tempcntb"}%
+ \let\blx@tempc\@empty
+ \ifblank{#1}
+ {}
+ {\blx@kv@setkeys{blx@untemp@namepart}{#1}}%
+ \eappto\blx@tempa{%
+ \blx@xml@uniquenametemplatenamepart{\blx@tempe}{\blx@tempc}{#2}}}
+
+\blx@kv@defkey{blx@untemp@namepart}{use}[true]{% use* option for namepart true|false
+ \ifstrequal{#1}{true}
+ {\appto\blx@tempc{ use="1"}}
+ {}}
+
+\blx@kv@defkey{blx@untemp@namepart}{base}[true]{% base option for namepart true|false
+ \ifstrequal{#1}{true}
+ {\appto\blx@tempc{ base="1"}}
+ {}}
+
+\blx@kv@defkey{blx@untemp@namepart}{disambiguation}{% disambiguation option for namepart none|inits|full|fullonly
+ \appto\blx@tempc{ disambiguation="#1"}}
+
+% [<templatename>]{<template>}
+\newrobustcmd*{\DeclareSortingNamekeyTemplate}[2][]{%
+ \begingroup
+ \ifblank{#1}
+ {\def\blx@snkname{global}}% default
+ {\def\blx@snkname{#1}}%
+ \let\namepart\blx@sortnk@namepart
+ \let\keypart\blx@sortnk@keypart
+ \let\literal\blx@sortnk@literal
+ \let\visibility\blx@sortnk@visibility
+ \csgdef{blx@sortingnamekeytemplatesvisibility@\blx@snkname}{sort}% default
+ \let\blx@tempa\@empty
+ \blx@tempcnta\z@
+ #2%
+ \global\cslet{blx@sortingnamekeytemplate@\blx@snkname}\blx@tempa
+ \xifinlist\blx@snkname\blx@sortingnamekeytemplates
+ {}
+ {\listxadd\blx@sortingnamekeytemplates\blx@snkname}%
+ \endgroup}
+\@onlypreamble\DeclareSortingNamekeyTemplate
+\blx@DeclareBackendOption{global}[xml]{sortingnamekeytemplate}
+\DeclareBiblatexOption{entry,namelist,name}[string]{sortingnamekeytemplatename}{%
+ \def\blx@refcontext@sortingnamekeytemplatename{#1}}
+
+% User-mode macro for checking sorting name template options
+\def\ifuniquenametemplatename#1{%
+ \expandafter\ifstrequal\expandafter{\blx@refcontext@uniquenametemplatename}{#1}}
+\def\iflabelalphanametemplatename#1{%
+ \expandafter\ifstrequal\expandafter{\blx@refcontext@labelalphanametemplatename}{#1}}
+\def\ifsortingnamekeytemplatename#1{%
+ \expandafter\ifstrequal\expandafter{\blx@refcontext@sortingnamekeytemplatename}{#1}}
+
+\newcommand*{\blx@sortnk@keypart}[1]{%
+ \advance\blx@tempcnta\@ne
+ \blx@tempcntb\z@
+ \edef\blx@tempd{ order="\the\blx@tempcnta"}%
+ \let\blx@tempb\@empty
+ #1%
+ \eappto\blx@tempa{%
+ \blx@xml@sortingnamekeykeypart{\blx@tempd}{\blx@tempb}}}
+
+\newcommand*{\blx@sortnk@literal}[1]{%
+ \advance\blx@tempcntb\@ne
+ \edef\blx@tempe{ order="\the\blx@tempcntb"}%
+ \let\blx@tempc\@empty
+ \eappto\blx@tempb{%
+ \blx@xml@sortingnamekeyliteral{\blx@tempe}{#1}}}
+
+\newcommand*{\blx@sortnk@visibility}[1]{%
+ \csgdef{blx@sortingnamekeytemplatesvisibility@\blx@snkname}{#1}}
+
+\newcommand*{\blx@sortnk@namepart}[2][]{%
+ \advance\blx@tempcntb\@ne
+ \edef\blx@tempe{ order="\the\blx@tempcntb"}%
+ \let\blx@tempc\@empty
+ \ifblank{#1}
+ {}
+ {\blx@kv@setkeys{blx@sortnk@namepart}{#1}}%
+ \eappto\blx@tempb{%
+ \blx@xml@sortingnamekeynamepart{\blx@tempe}{\blx@tempc}{#2}}}
+
+\blx@kv@defkey{blx@sortnk@namepart}{use}[true]{% use* option for namepart true|false
+ \ifstrequal{#1}{true}
+ {\appto\blx@tempc{ use="1"}}
+ {\appto\blx@tempc{ use="0"}}}
+
+\blx@kv@defkey{blx@sortnk@namepart}{inits}[true]{% initials only option for namepart true|false
+ \ifstrequal{#1}{true}
+ {\appto\blx@tempc{ inits="1"}}
+ {\appto\blx@tempc{ inits="0"}}}
+
+% [options]{<templatename>}{<template>}
+\newrobustcmd*{\DeclareSortingTemplate}[3][]{%
+ \ifblank{#1}
+ {}
+ {\blx@kv@setkeys{blx@sortdef@sorting}{#1}%
+ \csxdef{blx@sortdef@locale@#2}{\blx@templ}}%
+ \begingroup
+ \def\name{%LEGACY(<2.0)
+ \blx@warning@noline{%
+ '\string\name' is deprecated in sorting specifications, please use '\string\field'}%
+ \blx@sortdef@field}%
+ \def\list{%LEGACY(<2.0)
+ \blx@warning@noline{%
+ '\string\list' is deprecated in sorting specifications, please use '\string\field'}%
+ \blx@sortdef@field}%
+ \let\sort\blx@sortdef@sort
+ \let\field\blx@sortdef@field
+ \let\literal\blx@sortdef@literal
+ \global\csundef{blx@sortingtemplate@citeorder@relevant@#2}%
+ \def\citeorder{%
+ \global\cslet{blx@sortingtemplate@citeorder@relevant@#2}\@empty
+ \blx@sortdef@field{citeorder}}%
+ \def\intciteorder{%
+ \blx@sortdef@field{intciteorder}}%
+ \def\citecount{%
+ \blx@sortdef@field{citecount}}%
+ \blx@tempcnta\z@
+ \let\blx@tempa\@empty
+ #3%
+ \global\cslet{blx@sortingtemplate@#2}\blx@tempa
+ \endgroup}
+\@onlypreamble\DeclareSortingTemplate
+\blx@DeclareBackendOption{global}[xml]{sortingtemplate}
+
+\blx@kv@defkey{blx@sortdef@sorting}{locale}{% locale name
+ \def\blx@templ{#1}}
+
+\newcommand*{\blx@sortdef@sort}[2][]{%
+ \advance\blx@tempcnta\@ne
+ \blx@tempcntb\z@
+ \let\blx@tempb\@empty
+ \edef\blx@tempc{order="\the\blx@tempcnta"}%
+ \ifblank{#1}
+ {}
+ {\blx@kv@setkeys{blx@sortdef@sort}{#1}}%
+ \let\do\@firstofone
+ #2%
+ \eappto\blx@tempa{%
+ \blx@xml@sort{\blx@tempc}{\blx@tempb}}}
+
+\blx@kv@defkey{blx@sortdef@sort}{locale}{% locale name
+ \eappto\blx@tempc{ locale="#1"}}
+\blx@kv@defkey{blx@sortdef@sort}{direction}{% ascending|descending
+ \ifstrequal{#1}{ascending}
+ {\eappto\blx@tempc{ sort\string_direction="ascending"}}
+ {\eappto\blx@tempc{ sort\string_direction="descending"}}}
+\blx@kv@defkey{blx@sortdef@sort}{final}[true]{% true|false
+ \ifstrequal{#1}{true}
+ {\appto\blx@tempc{ final="1"}}
+ {}}
+\blx@kv@defkey{blx@sortdef@sort}{sortcase}[true]{% true|false
+ \ifstrequal{#1}{true}
+ {\appto\blx@tempc{ sortcase="1"}}
+ {\appto\blx@tempc{ sortcase="0"}}}
+\blx@kv@defkey{blx@sortdef@sort}{sortupper}[true]{% true|false
+ \ifstrequal{#1}{true}
+ {\appto\blx@tempc{ sortupper="1"}}
+ {\appto\blx@tempc{ sortupper="0"}}}
+
+\newcommand*{\blx@sortdef@field}[2][]{%
+ \advance\blx@tempcntb\@ne
+ \edef\blx@tempd{order="\the\blx@tempcntb"}%
+ \ifblank{#1}
+ {}
+ {\blx@kv@setkeys{blx@sortdef@field}{#1}}%
+ \eappto\blx@tempb{%
+ \blx@xml@sortitem{\blx@tempd}{#2}}}
+
+\blx@kv@defkey{blx@sortdef@field}{form}{% string
+ \eappto\blx@tempd{ form="#1"}}
+\blx@kv@defkey{blx@sortdef@field}{lang}{% string
+ \eappto\blx@tempd{ lang="#1"}}
+\blx@kv@defkey{blx@sortdef@field}{padside}{% left|right
+ \ifstrequal{#1}{right}
+ {\eappto\blx@tempd{ pad\string_side="right"}}
+ {\eappto\blx@tempd{ pad\string_side="left"}}}
+\blx@kv@defkey{blx@sortdef@field}{padwidth}{% integer
+ \eappto\blx@tempd{ pad\string_width="#1"}}
+\blx@kv@defkey{blx@sortdef@field}{padchar}{% character
+ \blx@xmlsanitizeafter{\def\blx@tempe}{#1}%
+ \eappto\blx@tempd{ pad\string_char="\blx@tempe"}}
+\blx@kv@defkey{blx@sortdef@field}{strside}{% left|right
+ \ifstrequal{#1}{right}
+ {\eappto\blx@tempd{ substring\string_side="right"}}
+ {\eappto\blx@tempd{ substring\string_side="left"}}}
+\blx@kv@defkey{blx@sortdef@field}{strwidth}{% integer
+ \eappto\blx@tempd{ substring\string_width="#1"}}
+
+\def\blx@sortdef@literal#1{%
+ \advance\blx@tempcntb\@ne
+ \blx@xmlsanitizeafter{\def\blx@tempe}{#1}%
+ \eappto\blx@tempb{%
+ \blx@xml@sortitem{literal="1" order="\the\blx@tempcntb"}{\blx@tempe}}}
+
+% [<type,type,...>]{<string>}
+\newrobustcmd*{\DeclarePresort}[2][]{%
+ \begingroup
+ \blx@xmlsanitizeafter{\def\blx@tempa}{#2}%
+ \ifblank{#1}
+ {\xdef\blx@bcf@presort{\blx@xml@presort{}{\blx@tempa}}}
+ {\notblank{#2}
+ {\forcsvlist{\blx@defpresort\blx@tempa}{#1}}
+ {\forcsvlist\blx@undefpresort{#1}}}%
+ \endgroup}
+\@onlypreamble\DeclarePresort
+\blx@DeclareBackendOption{global,type,entry}[string]{presort}
+
+\def\blx@defpresort#1#2{%
+ \csxdef{blx@bcf@presort@#2}{\blx@xml@presort{#2}{#1}}}
+\def\blx@undefpresort#1{%
+ \global\csundef{blx@bcf@presort@#1}}
+
+% {<entrytype,...>}{<field,...>}
+\newrobustcmd*{\DeclareSortExclusion}[2]{%
+ \forcsvlist{\blx@sortexclude{#2}}{#1}}
+\blx@DeclareBackendOption{type}[xml]{sortexclusion}
+
+% {<field>}{<entrytype>}
+\def\blx@sortexclude#1#2{%
+ \begingroup
+ \ifblank{#1}
+ {\global\csundef{blx@bcf@exclude@#2}}
+ {\let\blx@tempa\@empty
+ \forcsvlist\blx@sortexclude@i{#1}%
+ \csxdef{blx@bcf@exclude@#2}{%
+ \blx@xml@sortexclude{#2}{\blx@tempa}}}
+ \endgroup}
+
+\def\blx@sortexclude@i#1{%
+ \appto\blx@tempa{\blx@xml@exclude{#1}}}
+
+% {<entrytype,...>}{<field,...>}
+\newrobustcmd*{\DeclareSortInclusion}[2]{%
+ \forcsvlist{\blx@sortinclude{#2}}{#1}}
+\blx@DeclareBackendOption{type}[xml]{sortinclusion}
+
+% {<field>}{<entrytype>}
+\def\blx@sortinclude#1#2{%
+ \begingroup
+ \ifblank{#1}
+ {\global\csundef{blx@bcf@include@#2}}
+ {\let\blx@tempa\@empty
+ \forcsvlist\blx@sortinclude@i{#1}%
+ \csxdef{blx@bcf@include@#2}{%
+ \blx@xml@sortinclude{#2}{\blx@tempa}}}
+ \endgroup}
+
+\def\blx@sortinclude@i#1{%
+ \appto\blx@tempa{\blx@xml@include{#1}}}
+
+% {<field,field,...>}
+\newrobustcmd*{\DeclareExtradate}[1]{%
+ \begingroup
+ \let\blx@tempa\@empty
+ \let\scope\blx@extradate@scope
+ #1%
+ \global\let\blx@bcf@extradatespec\blx@tempa
+ \endgroup}
+\@onlypreamble\DeclareExtradate
+\blx@DeclareBackendOption{global}[xml]{extradatespec}
+
+\newrobustcmd*{\blx@extradate@scope}[1]{%
+ \let\blx@tempb\@empty
+ \let\field\blx@ordereded@field
+ #1%
+ \csxappto{blx@tempa}{%
+ \noexpand\blx@xml@extradatescope{\blx@tempb}}}
+
+\newcommand*{\blx@ordereded@field}[1]{%
+ \advance\blx@tempcnta\@ne
+ \csxappto{blx@tempb}{%
+ \noexpand\blx@xml@edordered{\the\blx@tempcnta}{#1}}}
+
+% [<type,type,...>]{<field,field,...>}
+\newrobustcmd*{\DeclareExtradateContext}[2][]{%
+ \begingroup
+ \let\blx@tempa\@empty
+ \def\blx@tempb{extradatecontext}%
+ \let\field\blx@ordered@field
+ \ifblank{#1}
+ {\global\cslet{blx@bcf@extradatecontext}\@empty}
+ {\def\blx@tempa{#1}%
+ \def\do##1{\global\cslet{blx@bcf@extradatecontext@##1}\@empty}%
+ \expandafter\docsvlist\expandafter{#1}}%
+ #2%
+ \endgroup}
+\@onlypreamble\DeclareExtradateContext
+\blx@DeclareBackendOption{global,type}[xml]{extradatecontext}
+
+\newrobustcmd*{\DeclareLabelname}[2][]{%
+ \begingroup
+ \let\blx@tempa\@empty
+ \def\blx@tempb{labelnamespec}%
+ \let\field\blx@ordered@field
+ \ifblank{#1}
+ {\global\cslet{blx@bcf@labelnamespec}\@empty}
+ {\def\blx@tempa{#1}%
+ \def\do##1{\global\cslet{blx@bcf@labelnamespec@##1}\@empty}%
+ \expandafter\docsvlist\expandafter{#1}}%
+ #2%
+ \endgroup}
+\@onlypreamble\DeclareLabelname
+\blx@DeclareBackendOption{global,type}[xml]{labelnamespec}
+
+\newrobustcmd*{\DeclareLabeltitle}[2][]{%
+ \begingroup
+ \let\blx@tempa\@empty
+ \def\blx@tempb{labeltitlespec}%
+ \let\field\blx@ordered@field
+ \ifblank{#1}
+ {\global\cslet{blx@bcf@labeltitlespec}\@empty}
+ {\def\blx@tempa{#1}%
+ \def\do##1{\global\cslet{blx@bcf@labeltitlespec@##1}\@empty}%
+ \expandafter\docsvlist\expandafter{#1}}%
+ #2%
+ \endgroup}
+\@onlypreamble\DeclareLabeltitle
+\blx@DeclareBackendOption{global,type}[xml]{labeltitlespec}
+
+\newrobustcmd*{\DeclareLabeldate}[2][]{%
+ \begingroup
+ \let\blx@tempa\@empty
+ \def\blx@tempb{labeldatespec}%
+ \let\field\blx@orderedld@field
+ \let\literal\blx@orderedld@literal
+ \ifblank{#1}
+ {\global\cslet{blx@bcf@labeldatespec}\@empty}
+ {\def\blx@tempa{#1}%
+ \def\do##1{\global\cslet{blx@bcf@labeldatespec@##1}\@empty}%
+ \expandafter\docsvlist\expandafter{#1}}%
+ #2%
+ \endgroup}
+\@onlypreamble\DeclareLabeldate
+\blx@DeclareBackendOption{global,type}[xml]{labeldatespec}
+
+\blx@kv@defkey{blx@ordered@field}{form}{% string
+ \appto\blx@tempc{ form="#1"}}
+\blx@kv@defkey{blx@ordered@field}{lang}{% string
+ \appto\blx@tempc{ lang="#1"}}
+
+\newcommand*{\blx@ordered@field}[2][]{%
+ \let\blx@tempc\@empty
+ \ifblank{#1}
+ {}
+ {\blx@kv@setkeys{blx@ordered@field}{#1}}%
+ \advance\blx@tempcnta\@ne
+ \ifdefempty{\blx@tempa}
+ {\csxappto{blx@bcf@\blx@tempb}{%
+ \noexpand\blx@xml@ordered{\the\blx@tempcnta}{\blx@tempc}{#2}}}
+ {\def\do##1{%
+ \blx@addtypeopt{##1}%
+ \csxappto{blx@bcf@\blx@tempb @##1}{%
+ \noexpand\blx@xml@ordered{\the\blx@tempcnta}{\blx@tempc}{#2}}}%
+ \expandafter\docsvlist\expandafter{\blx@tempa}}}
+
+\newcommand*{\blx@orderedld@field}[2][]{%
+ \let\blx@tempc\@empty
+ \ifblank{#1}
+ {}
+ {\blx@kv@setkeys{blx@ordered@field}{#1}}%
+ \advance\blx@tempcnta\@ne
+ \ifdefempty{\blx@tempa}
+ {\csxappto{blx@bcf@\blx@tempb}{%
+ \noexpand\blx@xml@ordered{\the\blx@tempcnta}{ type="field"\blx@tempc}{#2}}}
+ {\def\do##1{%
+ \blx@addtypeopt{##1}%
+ \csxappto{blx@bcf@\blx@tempb @##1}{%
+ \noexpand\blx@xml@ordered{\the\blx@tempcnta}{ type="field"\blx@tempc}{#2}}}%
+ \expandafter\docsvlist\expandafter{\blx@tempa}}}
+
+\newcommand*{\blx@orderedld@literal}[1]{%
+ \advance\blx@tempcnta\@ne
+ \ifdefempty{\blx@tempa}
+ {\csxappto{blx@bcf@\blx@tempb}{%
+ \noexpand\blx@xml@ordered{\the\blx@tempcnta}{ type="string"}{#1}}}
+ {\def\do##1{%
+ \blx@addtypeopt{##1}%
+ \csxappto{blx@bcf@\blx@tempb @##1}{%
+ \noexpand\blx@xml@ordered{\the\blx@tempcnta}{ type="string"}{#1}}}%
+ \expandafter\docsvlist\expandafter{\blx@tempa}}}
+
+%% Package options
+
+% [<entrytype,entrytype,...>]{<options>}
+
+\newrobustcmd*{\ExecuteBibliographyOptions}[2][]{%
+ \ifblank{#1}
+ {\blx@kv@setkeys{blx@opt@pre}{#2}}
+ {\forcsvlist{\blx@typeoptions{#2}}{#1}}}
+\@onlypreamble\ExecuteBibliographyOptions
+
+\def\blx@typeoptions#1#2{%
+ \blx@addtypeopt{#2}%
+ \csappto{blx@opts@type@#2}{#1,}}
+
+\def\blx@addtypeopt#1{%
+ \notblank{#1}
+ {\ifdef\blx@opts@type
+ {\ifinlist{#1}\blx@opts@type
+ {}
+ {\listgadd\blx@opts@type{#1}}}
+ {\listgadd\blx@opts@type{#1}}}
+ {}}
+
+% load-time only
+
+% Have to have a dummy for this as it's set much earlier but is passed
+% through to here where we just ignore it
+\blx@kv@defkey{blx@opt@ldt}{datamodel}{}
+
+\blx@kv@defkey{blx@opt@ldt}{backend}{%
+ \ifstrequal{#1}{biber}
+ {}
+ {\ifboolexpr{
+ test {\ifstrequal{#1}{bibtex}}
+ or
+ test {\ifstrequal{#1}{bibtex8}}}
+ {\settoggle{blx@bibtex}{true}%
+ \newtoggle{blx@bibtex8}%
+ \ifstrequal{#1}{bibtex8}
+ {\settoggle{blx@bibtex8}{true}}
+ {}}%
+ {\blx@err@invopt{backend=#1}{}}}}
+
+\blx@kv@defkey{blx@opt@ldt}{style}{%
+ \def\blx@cbxfile{#1}%
+ \def\blx@bbxfile{#1}}
+
+\blx@kv@defkey{blx@opt@ldt}{bibstyle}{%
+ \def\blx@bbxfile{#1}}
+
+\blx@kv@defkey{blx@opt@ldt}{citestyle}{%
+ \def\blx@cbxfile{#1}}
+
+\blx@kv@defkey{blx@opt@ldt}{natbib}[true]{%
+ \settoggle{blx@natbib}{#1}}
+
+\blx@kv@defkey{blx@opt@ldt}{mcite}[true]{%
+ \settoggle{blx@mcite}{#1}}
+
+\blx@kv@defkey{blx@opt@ldt}{noerroretextools}[true]{%
+ \blx@warning@noline{%
+ The option 'noerroretextools' is deprecated.\MessageBreak
+ Define the control sequence '\string\blx@noerroretextools'\MessageBreak
+ before loading biblatex instead}%
+ \ifstrequal{#1}{true}
+ {\global\cslet{blx@noerroretextools}\@empty}
+ {\global\csundef{blx@noerroretextools}}}
+
+% load-time and preamble
+
+\DeclareBibliographyOption[boolean]{debug}[true]{%
+ \settoggle{blx@debug}{#1}}
+
+\DeclareBibliographyOption[boolean]{loadfiles}[true]{%
+ \settoggle{blx@loadfiles}{#1}}
+
+\DeclareBibliographyOption[integer]{mincrossrefs}{%
+ \ifnum#1<\z@
+ \def\blx@mincrossrefs{1}%
+ \else
+ \def\blx@mincrossrefs{#1}%
+ \fi}
+
+\DeclareBibliographyOption[integer]{minxrefs}{%
+ \ifnum#1<\z@
+ \def\blx@minxrefs{1}%
+ \else
+ \def\blx@minxrefs{#1}%
+ \fi}
+\def\blx@minxrefs{2}
+
+\DeclareBibliographyOption[string]{texencoding}{%
+ \ifstrequal{#1}{auto}
+ {\undef\blx@texencoding@fromoption}
+ {\def\blx@texencoding@fromoption{#1}}}
+
+\DeclareBibliographyOption[string]{bibencoding}{%
+ \ifcsdef{blx@bibenc@#1}
+ {\letcs\blx@bibencoding{blx@bibenc@#1}}
+ {\def\blx@bibencoding{#1}}}
+
+\def\abx@mapbibenc#1#2{\csdef{blx@bibenc@#1}{#2}}
+\abx@mapbibenc{inputenc}{auto}
+\abx@mapbibenc{x-ascii}{ascii}
+
+\def\abx@mapinpenc#1#2{\csdef{blx@inpenc@#1}{#2}}
+\abx@mapinpenc{utf8x}{utf8}
+\abx@mapinpenc{lutf8}{utf8}
+\abx@mapinpenc{x-ascii}{ascii}
+
+\DeclareBibliographyOption[boolean]{safeinputenc}[true]{%
+ \settoggle{blx@safeinputenc}{#1}}
+\newtoggle{blx@safeinputenc}
+
+% global "sorting" option becomes "sortingtemplatename" in the .bcf and so
+% don't use \DeclareBibliographyOption. This is a legacy naming issue
+% unlikely to be corrected as "sorting" is an obvious name for biblatex users
+% "sorting" is used in the .bcf for the actual sorting template definitions and is
+% an XML format option
+\blx@kv@defkey{blx@opt@pre}{sorting}{%
+ \def\blx@sorting{#1}%
+ \def\blx@refcontext@sortingtemplatename{#1}}
+\blx@DeclareBackendOption{global}[string]{sortingtemplatename}
+
+\AtEndPreamble{%
+ \ifcsdef{blx@sortingtemplate@\blx@sorting}
+ {}
+ {\blx@err@invopt{sorting=\blx@sorting}{}%
+ \def\blx@sorting{nty}%
+ \def\blx@refcontext@sortingtemplatename{nty}}%
+ \listxadd\blx@sortingtemplatenames\blx@sorting
+ \def\blx@refcontext@sortingnamekeytemplatename{global}%
+ \let\blx@refcontext@labelprefix\@empty
+ \let\blx@refcontext@labelprefix@real\@empty
+ \def\blx@refcontext@uniquenametemplatename{global}%
+ \def\blx@refcontext@labelalphanametemplatename{global}%
+ \blx@xdef@refcontext{%
+ \blx@refcontext@sortingtemplatename/%
+ \blx@refcontext@sortingnamekeytemplatename/%
+ \blx@refcontext@labelprefix/%
+ \blx@refcontext@uniquenametemplatename/%
+ \blx@refcontext@labelalphanametemplatename}%
+ \listxadd\blx@refcontexts\blx@refcontext@context}
+
+\DeclareBibliographyOption[boolean]{sortcase}[true]{%
+ \settoggle{blx@sortcase}{#1}}
+
+\DeclareBibliographyOption[boolean]{sortupper}[true]{%
+ \settoggle{blx@sortupper}{#1}}
+
+\DeclareBiblatexOption{global,type}[integer]{maxnames}{%
+ \numdef\blx@maxcitenames{#1}%
+ \numdef\blx@maxbibnames{#1}%
+ \numdef\blx@maxsortnames{#1}%
+ \c@maxnames#1\relax}
+\DeclareBiblatexOption{global,type}[integer]{minnames}{%
+ \numdef\blx@mincitenames{#1}%
+ \numdef\blx@minbibnames{#1}%
+ \numdef\blx@minsortnames{#1}%
+ \c@minnames#1\relax}
+% the per-entry option is resolved by Biber directly
+\blx@DeclareBackendOption{entry}[integer]{maxnames}
+\blx@DeclareBackendOption{entry}[integer]{minnames}
+\gdef\blx@bcf@backendin@entry@maxnames{maxcitenames,maxbibnames,maxsortnames}%
+\gdef\blx@bcf@backendin@entry@minnames{mincitenames,minbibnames,minsortnames}%
+
+
+\DeclareBiblatexOption{global,type,entry}[integer]{maxbibnames}{%
+ \numdef\blx@maxbibnames{#1}%
+ \numdef\blx@maxsortnames{#1}%
+ \iftoggle{blx@bibliography}
+ {\c@maxnames#1\relax}
+ {}}
+\DeclareBiblatexOption{global,type,entry}[integer]{minbibnames}{%
+ \numdef\blx@minbibnames{#1}%
+ \numdef\blx@minsortnames{#1}%
+ \iftoggle{blx@bibliography}
+ {\c@minnames#1\relax}
+ {}}
+
+\DeclareBiblatexOption{global,type,entry}[integer]{maxcitenames}{%
+ \numdef\blx@maxcitenames{#1}%
+ \iftoggle{blx@bibliography}
+ {}
+ {\c@maxnames#1\relax}}
+\DeclareBiblatexOption{global,type,entry}[integer]{mincitenames}{%
+ \numdef\blx@mincitenames{#1}%
+ \iftoggle{blx@bibliography}
+ {}
+ {\c@minnames#1\relax}}
+
+\DeclareBiblatexOption{global,type,entry}[integer]{maxsortnames}{%
+ \numdef\blx@maxsortnames{#1}}
+\DeclareBiblatexOption{global,type,entry}[integer]{minsortnames}{%
+ \numdef\blx@minsortnames{#1}}
+
+\appto\blx@checkoptions@global{%
+ \blx@maxmin@num{maxbibnames}{minbibnames}\blx@maxbibnames\blx@minbibnames
+ \blx@maxmin@num{maxcitenames}{mincitenames}\blx@maxcitenames\blx@mincitenames
+ \blx@maxmin@num{maxsortnames}{minsortnames}\blx@maxsortnames\blx@minsortnames}
+\appto\blx@checkoptions@type{%
+ \blx@maxmin@num{maxbibnames}{minbibnames}\blx@maxbibnames\blx@minbibnames
+ \blx@maxmin@num{maxcitenames}{mincitenames}\blx@maxcitenames\blx@mincitenames
+ \blx@maxmin@num{maxsortnames}{minsortnames}\blx@maxsortnames\blx@minsortnames}
+\appto\blx@checkoptions@entry{%
+ \blx@maxmin@cnt{maxnames}{minnames}\c@maxnames\c@minnames}
+
+\DeclareBiblatexOption{global,type,entry}[integer]{maxitems}{%
+ \numdef\blx@maxitems{#1}%
+ \c@maxitems#1\relax}
+\DeclareBiblatexOption{global,type,entry}[integer]{minitems}{%
+ \numdef\blx@minitems{#1}%
+ \c@minitems#1\relax}
+
+\appto\blx@checkoptions@global{%
+ \blx@maxmin@num{maxitems}{minitems}\blx@maxitems\blx@minitems}
+\appto\blx@checkoptions@type{%
+ \blx@maxmin@num{maxitems}{minitems}\blx@maxitems\blx@minitems}
+\appto\blx@checkoptions@entry{%
+ \blx@maxmin@cnt{maxitems}{minitems}\c@maxitems\blx@minitems}
+
+\DeclareBiblatexOption{global,type,entry}[integer]{maxalphanames}{%
+ \numdef\blx@maxalphanames{#1}}
+\DeclareBiblatexOption{global,type,entry}[integer]{minalphanames}{%
+ \numdef\blx@minalphanames{#1}}
+
+\appto\blx@checkoptions@global{%
+ \blx@maxmin@num{maxalphanames}{minalphanames}\blx@maxalphanames\blx@minalphanames}
+\appto\blx@checkoptions@type{%
+ \blx@maxmin@num{maxalphanames}{minalphanames}\blx@maxalphanames\blx@minalphanames}
+
+\def\blx@maxmin@num#1#2#3#4{%
+ \ifnumless#3\@ne
+ {\blx@err@invopt{#1=#3}{'#1' must be greater than zero}%
+ \let#3\@ne}
+ {}%
+ \ifnumless#4\@ne
+ {\blx@err@invopt{#2=#4}{'#2' must be greater than zero}%
+ \let#4\@ne}
+ {}%
+ \ifnumless#3#4
+ {\blx@err@confopt{#1/#2}{'#1' must be greater than or equal to '#2'}%
+ \let#3#4}
+ {}}
+
+\def\blx@maxmin@cnt#1#2#3#4{%
+ \ifnumless#3\@ne
+ {\blx@err@invopt{#1=\number#3}{'#1' must be greater than zero}%
+ #3\@ne}
+ {}%
+ \ifnumless#4\@ne
+ {\blx@err@invopt{#2=\number#4}{'#2' must be greater than zero}%
+ #4\@ne}
+ {}%
+ \ifnumless#3#4
+ {\blx@err@confopt{#1/#2}{'#1' must be greater than or equal to '#2'}%
+ #3=#4}
+ {}}
+
+\DeclareBiblatexOption{global,type,entry,namelist,name}[boolean]{terseinits}[true]{%
+ \ifstrequal{#1}{true}
+ {\toggletrue{blx@terseinits}
+ \renewrobustcmd*{\bibinitperiod}{}
+ \renewrobustcmd*{\bibinitdelim}{}
+ \renewrobustcmd*{\bibinithyphendelim}{}}
+ {\togglefalse{blx@terseinits}
+ \renewrobustcmd*{\bibinitperiod}{\adddot}
+ \renewrobustcmd*{\bibinitdelim}{\addnbspace}
+ \renewrobustcmd*{\bibinithyphendelim}{\adddot\mbox{-}}}}
+
+\DeclareBiblatexOption{global,type,entry}[boolean]{abbreviate}[true]{%
+ \ifstrequal{#1}{true}
+ {\def\abx@str{abx@sstr}}
+ {\def\abx@str{abx@lstr}}}
+
+\DeclareBiblatexOption{global,type,entry}[boolean]{dateabbrev}[true]{%
+ \ifstrequal{#1}{true}
+ {\let\abx@bibmonth\blx@imc@bibsstring
+ \let\abx@bibyeardivision\blx@imc@bibsstring}
+ {\let\abx@bibmonth\blx@imc@biblstring
+ \let\abx@bibyeardivision\blx@imc@biblstring}}
+
+\DeclareBibliographyOption[string]{sortlocale}{%
+ \edef\blx@sortlocale{\detokenize{#1}}}
+
+\DeclareBibliographyOption[string]{language}{%
+ \togglefalse{blx@autolangbib}%
+ \togglefalse{blx@autolangcite}%
+ \undef\blx@languagename
+ \undef\blx@forcelanguagename
+ \ifboolexpr{
+ test {\ifstrequal{#1}{auto}}
+ or
+ test {\ifstrequal{#1}{autobib}}
+ or
+ test {\ifstrequal{#1}{autocite}}
+ }
+ {\def\blx@languagename{english}%
+ \ifstrequal{#1}{auto}
+ {\toggletrue{blx@autolangbib}%
+ \toggletrue{blx@autolangcite}}
+ {}%
+ \ifstrequal{#1}{autobib}
+ {\toggletrue{blx@autolangbib}}
+ {}%
+ \ifstrequal{#1}{autocite}
+ {\toggletrue{blx@autolangcite}}
+ {}}
+ % If language is explicit, we do want to auto-switch but only to the
+ % selected language
+ {\blx@altfile{#1.lbx}%
+ \ifdefempty\blx@fnext
+ {\blx@error
+ {Language '#1' not supported}
+ {Failed to find a matching '#1.lbx' file}}}
+ {\toggletrue{blx@autolangbib}%
+ \toggletrue{blx@autolangcite}%
+ \edef\blx@languagename{#1}%
+ \edef\blx@forcelanguagename{#1}}}
+
+\DeclareBiblatexOption{global,type,entry}[boolean]{clearlang}[true]{%
+ \settoggle{blx@clearlang}{#1}}
+
+\DeclareBibliographyOption[string]{autolang}{%
+ \blx@autolang@i{#1}}
+
+\def\blx@autolang@i#1{%
+ \ifcsdef{blx@opt@autolang@#1}
+ {\csuse{blx@opt@autolang@#1}}
+ {\blx@err@invopt{autolang=#1}{}}}
+
+\def\blx@opt@autolang@none{%
+ \undef\blx@thelangenv
+ \let\blx@hook@initlang\@empty
+ \let\blx@hook@endlang\@empty}
+\def\blx@opt@autolang@hyphen{%
+ \def\blx@thelangenv{hyphenrules}%
+ \let\blx@hook@initlang\@empty
+ \let\blx@hook@endlang\@empty}
+\csdef{blx@opt@autolang@other*}{%
+ \def\blx@thelangenv{otherlanguage*}%
+ \def\blx@hook@initlang{\@quotereset\@ne}%
+ \def\blx@hook@endlang{\blx@postpunct}}
+\def\blx@opt@autolang@other{%
+ \def\blx@thelangenv{otherlanguage}%
+ \def\blx@hook@initlang{\@quotereset\@ne}%
+ \def\blx@hook@endlang{\blx@postpunct}}
+\def\blx@opt@autolang@langname{%
+ \@ifpackageloaded{polyglossia}
+ {\def\blx@thelangenv{langname}}
+ {\def\blx@thelangenv{otherlanguage}}%
+ \def\blx@hook@initlang{\@quotereset\@ne}%
+ \def\blx@hook@endlang{\blx@postpunct}}
+
+\DeclareBibliographyOption[string]{langhook}{%
+ \ifstrequal{#1}{captions}
+ {\@firstoftwo}
+ {\ifstrequal{#1}{extras}}
+ {\def\blx@langhook{#1}}
+ {\blx@err@invopt{langhook=#1}{}}}
+
+
+\DeclareBibliographyOption[string]{autofieldlang}{%
+ \blx@autofieldlang@i{#1}}
+
+\def\blx@autofieldlang@i#1{%
+ \ifcsdef{blx@opt@autofieldlang@#1}
+ {\csuse{blx@opt@autofieldlang@#1}}
+ {\blx@err@invopt{autofieldlang=#1}{}}}
+
+\def\blx@opt@autofieldlang@none{%
+ \undef\blx@thefieldlangenv
+ \let\blx@hook@initfieldlang\@empty
+ \let\blx@hook@endfieldlang\@empty}
+\def\blx@opt@autofieldlang@hyphen{%
+ \def\blx@thefieldlangenv{hyphenrules}%
+ \let\blx@hook@initfieldlang\@empty
+ \let\blx@hook@endfieldlang\@empty}
+\def\blx@opt@autofieldlang@other{%
+ \def\blx@thefieldlangenv{otherlanguage}%
+ \def\blx@hook@initfieldlang{\@quotereset\@ne}%
+ \def\blx@hook@endfieldlang{\blx@postpunct}}
+\csdef{blx@opt@autofieldlang@other*}{%
+ \def\blx@thefieldlangenv{otherlanguage*}%
+ \def\blx@hook@initfieldlang{\@quotereset\@ne}%
+ \def\blx@hook@endfieldlang{\blx@postpunct}}
+\def\blx@opt@autofieldlang@langname{%
+ \@ifpackageloaded{polyglossia}
+ {\def\blx@thefieldlangenv{langname}}
+ {\def\blx@thefieldlangenv{otherlanguage}}%
+ \def\blx@hook@initfieldlang{\@quotereset\@ne}%
+ \def\blx@hook@endfieldlang{\blx@postpunct}}
+
+\DeclareBibliographyOption{autofieldlangstrings}[true]{%
+ \settoggle{blx@autofieldlangstrings}{#1}}
+
+\DeclareBibliographyOption{dynamiclabel}[true]{%
+ \settoggle{blx@dynamiclabel}{#1}}
+
+\DeclareBiblatexOption{global,type,entry}[string]{indexing}[true]{%
+ \blx@opt@index{#1}}
+\def\blx@opt@index#1{%
+ \ifcsdef{blx@opt@index@#1}
+ {\csuse{blx@opt@index@#1}}
+ {\blx@err@invopt{indexing=#1}{}}}
+\def\blx@opt@index@true{%
+ \toggletrue{blx@citeindex}%
+ \toggletrue{blx@bibindex}}
+\def\blx@opt@index@false{%
+ \togglefalse{blx@citeindex}%
+ \togglefalse{blx@bibindex}}
+\def\blx@opt@index@cite{%
+ \toggletrue{blx@citeindex}%
+ \togglefalse{blx@bibindex}}
+\def\blx@opt@index@bib{%
+ \togglefalse{blx@citeindex}%
+ \toggletrue{blx@bibindex}}
+
+\DeclareBibliographyOption[boolean]{sortcites}[true]{%
+ \ifstrequal{#1}{true}
+ {\let\blx@thecitesort\blx@citesort
+ \let\blx@thenotecheck\blx@notecheck
+ \booltrue{sortcites}}
+ {\let\blx@thecitesort\blx@citenosort
+ \let\blx@thenotecheck\relax}}
+
+\DeclareBibliographyOption[boolean]{sortsets}[true]{%
+ \settoggle{blx@sortsets}{#1}}
+
+\DeclareBibliographyOption[string]{hyperref}[true]{%
+ \ifcsdef{blx@opt@hyperref@#1}
+ {\letcs\blx@hyperref{blx@opt@hyperref@#1}}
+ {\blx@err@invopt{hyperref=#1}{}}}
+\def\blx@opt@hyperref@false{0}
+\def\blx@opt@hyperref@true{1}
+\def\blx@opt@hyperref@auto{2}
+\def\blx@opt@hyperref@manual{3}
+
+\def\blx@warn@usedmanualhyperrefs#1{%
+ \blx@warning@noline{The command '\string#1' can\MessageBreak
+ only be used with 'hyperref=manual'}}
+\def\blx@warn@multiplemanualhyperrefs{%
+ \blx@warning@noline{You must call either '\string\BiblatexManualHyperrefOn'\MessageBreak
+ or '\string\BiblatexManualHyperrefOff' exactly once.\MessageBreak
+ Subsequent calls to either command will be ignored}}
+\def\BiblatexManualHyperrefOn{%
+ \ifnum\blx@hyperref=\thr@@
+ \blx@mkhyperref
+ \global\undef\blx@mkhyperref
+ \global\undef\blx@mknohyperref
+ \global\let\BiblatexManualHyperrefOn\blx@warn@multiplemanualhyperrefs
+ \global\let\BiblatexManualHyperrefOff\blx@warn@multiplemanualhyperrefs
+ \else
+ \blx@warn@usedmanualhyperrefs{\BiblatexManualHyperrefOn}%
+ \fi}
+\def\BiblatexManualHyperrefOff{%
+ \ifnum\blx@hyperref=\thr@@
+ \blx@mknohyperref
+ \global\undef\blx@mkhyperref
+ \global\undef\blx@mknohyperref
+ \global\let\BiblatexManualHyperrefOn\blx@warn@multiplemanualhyperrefs
+ \global\let\BiblatexManualHyperrefOff\blx@warn@multiplemanualhyperrefs
+ \else
+ \blx@warn@usedmanualhyperrefs{\BiblatexManualHyperrefOff}%
+ \fi}
+
+\DeclareBibliographyOption[boolean]{backref}[true]{%
+ \ifstrequal{#1}{true}
+ {\let\blx@backref\blx@addbackref
+ \let\abx@aux@backref\blx@aux@backref
+ \booltrue{backtracker}}
+ {\let\blx@backref\@gobble
+ \let\abx@aux@backref\@gobblefive
+ \boolfalse{backtracker}}}
+
+\DeclareBibliographyOption[string]{backrefsetstyle}{%
+ \ifcsdef{blx@opt@backrefsetstyle@#1}
+ {\letcs\blx@backrefsetstyle{blx@opt@backrefsetstyle@#1}}
+ {\blx@err@invopt{backrefsetstyle=#1}{}}}
+\def\blx@opt@backrefsetstyle@setonly{0}
+\def\blx@opt@backrefsetstyle@memonly{1}
+\def\blx@opt@backrefsetstyle@setormem{2}
+\def\blx@opt@backrefsetstyle@setandmem{3}
+\def\blx@opt@backrefsetstyle@memandset{4}
+\def\blx@opt@backrefsetstyle@setplusmem{5}
+
+\newtoggle{blx@backreffloats}
+\DeclareBibliographyOption[boolean]{backreffloats}[true]{%
+ \settoggle{blx@backreffloats}{#1}}
+
+\appto\blx@mkhyperref{%
+ \ifHy@plainpages
+ \blx@warning@noline{%
+ hyperref package option 'plainpages' enabled.\MessageBreak
+ This may cause problems with hyperlinked back\MessageBreak
+ references. 'plainpages=false' is recommended}%
+ \fi
+ \ifHy@pageanchor\else
+ \blx@warning@noline{%
+ hyperref package option 'pageanchor' disabled.\MessageBreak
+ This will cause problems with hyperlinked back\MessageBreak
+ references. 'pageanchor=true' is required}%
+ \fi}
+
+\def\blx@optprocess@block#1{%
+ \ifcsdef{blx@opt@block@#1}
+ {\csuse{blx@opt@block@#1}}
+ {\blx@err@invopt{block=#1}{}}}
+
+\DeclareBibliographyOption[string]{block}{%
+ \blx@optprocess@block{#1}}
+
+\blx@kv@defkey{blx@bib1}{block}{}
+\blx@kv@defkey{blx@bib2}{block}{\blx@optprocess@block{#1}}
+\blx@kv@defkey{blx@biblist1}{block}{}
+\blx@kv@defkey{blx@biblist2}{block}{\blx@optprocess@block{#1}}
+
+\blx@kv@defkey{blx@bbs}{block}{\blx@optprocess@block{#1}}
+\blx@kv@defkey{blx@bbg}{block}{\blx@optprocess@block{#1}}
+
+\def\blx@opt@block@none{%
+ \let\blx@bibsetup\@empty
+ \let\newblockpunct\@empty}
+\def\blx@opt@block@par{%
+ \let\blx@bibsetup\@empty
+ \def\newblockpunct{\par}}
+\def\blx@opt@block@nbpar{%
+ \def\blx@bibsetup{\interlinepenalty\@M}%
+ \def\newblockpunct{\par\nobreak}}
+\def\blx@opt@block@space{%
+ \let\blx@bibsetup\@empty
+ \def\newblockpunct{%
+ \unspace\space
+ \hskip 0.11em
+ \@plus 0.33em
+ \@minus 0.07em}}
+\def\blx@opt@block@ragged{%
+ \let\blx@bibsetup\raggedright
+ \def\newblockpunct{%
+ \unspace\penalty-9\relax\space}}
+
+\DeclareBibliographyOption[string]{pagetracker}[true]{%
+ \ifcsdef{blx@opt@pagetracker@#1}
+ {\csuse{blx@opt@pagetracker@#1}}
+ {\blx@err@invopt{pagetracker=#1}{}}}
+\def\blx@opt@pagetracker@true{%
+ \if@twoside
+ \blx@opt@pagetracker@spread
+ \else
+ \blx@opt@pagetracker@page
+ \fi}
+\def\blx@opt@pagetracker@false{%
+ \let\blx@pagetracker\relax
+ \let\abx@aux@page\@gobbletwo
+ \let\abx@aux@fnpage\@gobbletwo
+ \boolfalse{pagetracker}}
+\def\blx@opt@pagetracker@page{%
+ \let\blx@pagetracker\blx@pagetracker@context
+ \let\abx@aux@page\blx@aux@page
+ \let\abx@aux@fnpage\blx@aux@fnpage
+ \booltrue{pagetracker}}
+\def\blx@opt@pagetracker@spread{%
+ \if@twoside
+ \let\blx@pagetracker\blx@pagetracker@context
+ \let\abx@aux@page\blx@aux@spread
+ \let\abx@aux@fnpage\blx@aux@fnspread
+ \booltrue{pagetracker}%
+ \else
+ \blx@warning@noline{%
+ LaTeX not in twoside mode\MessageBreak
+ Falling back to 'pagetracker=page'}%
+ \blx@opt@pagetracker@page
+ \fi}
+
+\DeclareBibliographyOption[string]{citecounter}[true]{%
+ \ifcsdef{blx@opt@citecounter@#1}
+ {\csuse{blx@opt@citecounter@#1}}
+ {\blx@err@invopt{citecounter=#1}{}}}
+\def\blx@opt@citecounter@true{%
+ \let\blx@setcitecounter\blx@setcitecounter@global
+ \let\blx@citecounter\blx@citecounter@global
+ \let\abx@aux@count\blx@aux@count
+ \let\abx@aux@fncount\blx@aux@fncount
+ \let\abx@curr@count\blx@curr@count
+ \let\abx@curr@fncount\blx@curr@fncount
+ \booltrue{citetracker}}
+\def\blx@opt@citecounter@context{%
+ \let\blx@setcitecounter\blx@setcitecounter@context
+ \let\blx@citecounter\blx@citecounter@context
+ \let\abx@aux@count\blx@aux@count
+ \let\abx@aux@fncount\blx@aux@fncount
+ \let\abx@curr@count\blx@curr@count
+ \let\abx@curr@fncount\blx@curr@fncount
+ \booltrue{citetracker}}
+\def\blx@opt@citecounter@false{%
+ \let\blx@setcitecounter\relax
+ \let\blx@citecounter\relax
+ \let\abx@aux@count\@gobbletwo
+ \let\abx@aux@fncount\@gobbletwo
+ \let\abx@curr@count\@gobbletwo
+ \let\abx@curr@fncount\@gobbletwo
+ \boolfalse{citetracker}}
+
+\DeclareBiblatexOption{global,type,entry}[string]{citetracker}[true]{%
+ \ifcsdef{blx@opt@citetracker@#1}
+ {\csuse{blx@opt@citetracker@#1}}
+ {\blx@err@invopt{citetracker=#1}{}}}
+\def\blx@opt@citetracker@true{%
+ \let\blx@imc@ifciteseen\blx@ifciteseen@global
+ \let\blx@imc@ifentryseen\blx@ifentryseen@global
+ \let\blx@citetracker\blx@citetracker@global
+ \booltrue{citetracker}}
+\def\blx@opt@citetracker@false{%
+ \let\blx@imc@ifciteseen\@secondoftwo
+ \protected\long\def\blx@imc@ifentryseen##1##2##3{##3}%
+ \let\blx@citetracker\relax}
+\def\blx@opt@citetracker@context{%
+ \let\blx@imc@ifciteseen\blx@ifciteseen@context
+ \let\blx@imc@ifentryseen\blx@ifentryseen@context
+ \let\blx@citetracker\blx@citetracker@context
+ \booltrue{citetracker}}
+\def\blx@opt@citetracker@strict{%
+ \let\blx@imc@ifciteseen\blx@ifciteseen@global
+ \let\blx@imc@ifentryseen\blx@ifentryseen@global
+ \def\blx@citetracker{%
+ \blx@ifcitesingle{\blx@citetracker@global}{}}%
+ \booltrue{citetracker}}
+\def\blx@opt@citetracker@constrict{%
+ \let\blx@imc@ifciteseen\blx@ifciteseen@context
+ \let\blx@imc@ifentryseen\blx@ifentryseen@context
+ \def\blx@citetracker{%
+ \blx@ifcitesingle{\blx@citetracker@context}{}}%
+ \booltrue{citetracker}}
+
+\DeclareBiblatexOption{global,type,entry}[string]{ibidtracker}[true]{%
+ \ifcsdef{blx@opt@ibidtracker@#1}
+ {\csuse{blx@opt@ibidtracker@#1}}
+ {\blx@err@invopt{ibidtracker=#1}{}}}
+\def\blx@opt@ibidtracker@true{%
+ \let\blx@imc@ifciteibid\blx@ifciteibid@global
+ \let\blx@ibidtracker\blx@ibidtracker@global
+ \let\blx@ibidreset\blx@ibidreset@global
+ \booltrue{citetracker}}
+\def\blx@opt@ibidtracker@false{%
+ \let\blx@imc@ifciteibid\@secondoftwo
+ \let\blx@ibidtracker\relax
+ \let\blx@ibidreset\relax}
+\def\blx@opt@ibidtracker@context{%
+ \let\blx@imc@ifciteibid\blx@ifciteibid@context
+ \let\blx@ibidtracker\blx@ibidtracker@context
+ \let\blx@ibidreset\blx@ibidreset@context
+ \booltrue{citetracker}}
+\def\blx@opt@ibidtracker@strict{%
+ \let\blx@imc@ifciteibid\blx@ifciteibid@strict
+ \let\blx@ibidtracker\blx@ibidtracker@strict
+ \let\blx@ibidreset\blx@ibidreset@global
+ \booltrue{citetracker}}
+\def\blx@opt@ibidtracker@constrict{%
+ \let\blx@imc@ifciteibid\blx@ifciteibid@constrict
+ \let\blx@ibidtracker\blx@ibidtracker@constrict
+ \let\blx@ibidreset\blx@ibidreset@context
+ \booltrue{citetracker}}
+
+\DeclareBiblatexOption{global,type,entry}[string]{idemtracker}[true]{%
+ \ifcsdef{blx@opt@idemtracker@#1}
+ {\csuse{blx@opt@idemtracker@#1}}
+ {\blx@err@invopt{idemtracker=#1}{}}}
+\def\blx@opt@idemtracker@true{%
+ \let\blx@imc@ifciteidem\blx@ifciteidem@global
+ \let\blx@idemtracker\blx@idemtracker@global
+ \let\blx@idemreset\blx@idemreset@global
+ \booltrue{citetracker}}
+\def\blx@opt@idemtracker@false{%
+ \let\blx@imc@ifciteidem\@secondoftwo
+ \let\blx@idemtracker\relax
+ \let\blx@idemreset\relax}
+\def\blx@opt@idemtracker@context{%
+ \let\blx@imc@ifciteidem\blx@ifciteidem@context
+ \let\blx@idemtracker\blx@idemtracker@context
+ \let\blx@idemreset\blx@idemreset@context
+ \booltrue{citetracker}}
+\def\blx@opt@idemtracker@strict{%
+ \let\blx@imc@ifciteidem\blx@ifciteidem@strict
+ \let\blx@idemtracker\blx@idemtracker@strict
+ \let\blx@idemreset\blx@idemreset@global
+ \booltrue{citetracker}}
+\def\blx@opt@idemtracker@constrict{%
+ \let\blx@imc@ifciteidem\blx@ifciteidem@constrict
+ \let\blx@idemtracker\blx@idemtracker@constrict
+ \let\blx@idemreset\blx@idemreset@context
+ \booltrue{citetracker}}
+
+\DeclareBiblatexOption{global,type,entry}[string]{opcittracker}[true]{%
+ \ifcsdef{blx@opt@opcittracker@#1}
+ {\csuse{blx@opt@opcittracker@#1}}
+ {\blx@err@invopt{opcittracker=#1}{}}}
+\def\blx@opt@opcittracker@true{%
+ \let\blx@imc@ifopcit\blx@ifopcit@global
+ \let\blx@opcittracker\blx@opcittracker@global
+ \let\blx@opcitreset\blx@opcitreset@global
+ \booltrue{citetracker}}
+\def\blx@opt@opcittracker@false{%
+ \let\blx@imc@ifopcit\@secondoftwo
+ \let\blx@opcittracker\relax
+ \let\blx@opcitreset\relax}
+\def\blx@opt@opcittracker@context{%
+ \let\blx@imc@ifopcit\blx@ifopcit@context
+ \let\blx@opcittracker\blx@opcittracker@context
+ \let\blx@opcitreset\blx@opcitreset@context
+ \booltrue{citetracker}}
+\def\blx@opt@opcittracker@strict{%
+ \let\blx@imc@ifopcit\blx@ifopcit@strict
+ \let\blx@opcittracker\blx@opcittracker@strict
+ \let\blx@opcitreset\blx@opcitreset@global
+ \booltrue{citetracker}}
+\def\blx@opt@opcittracker@constrict{%
+ \let\blx@imc@ifopcit\blx@ifopcit@constrict
+ \let\blx@opcittracker\blx@opcittracker@constrict
+ \let\blx@opcitreset\blx@opcitreset@context
+ \booltrue{citetracker}}
+
+\DeclareBiblatexOption{global,type,entry}[string]{loccittracker}[true]{%
+ \ifcsdef{blx@opt@loccittracker@#1}
+ {\csuse{blx@opt@loccittracker@#1}}
+ {\blx@err@invopt{loccittracker=#1}{}}}
+\def\blx@opt@loccittracker@true{%
+ \let\blx@imc@ifloccit\blx@ifloccit@global
+ \let\blx@loccittracker\blx@loccittracker@global
+ \let\blx@loccitreset\blx@loccitreset@global
+ \booltrue{citetracker}}
+\def\blx@opt@loccittracker@false{%
+ \let\blx@imc@ifloccit\@secondoftwo
+ \let\blx@loccittracker\relax
+ \let\blx@loccitreset\relax}
+\def\blx@opt@loccittracker@context{%
+ \let\blx@imc@ifloccit\blx@ifloccit@context
+ \let\blx@loccittracker\blx@loccittracker@context
+ \let\blx@loccitreset\blx@loccitreset@context
+ \booltrue{citetracker}}
+\def\blx@opt@loccittracker@strict{%
+ \let\blx@imc@ifloccit\blx@ifloccit@strict
+ \let\blx@loccittracker\blx@loccittracker@strict
+ \let\blx@loccitreset\blx@loccitreset@global
+ \booltrue{citetracker}}
+\def\blx@opt@loccittracker@constrict{%
+ \let\blx@imc@ifloccit\blx@ifloccit@constrict
+ \let\blx@loccittracker\blx@loccittracker@constrict
+ \let\blx@loccitreset\blx@loccitreset@context
+ \booltrue{citetracker}}
+
+\newtoggle{blx@trackfloats}
+\DeclareBibliographyOption[boolean]{trackfloats}[true]{%
+ \settoggle{blx@trackfloats}{#1}}
+
+
+\DeclareBibliographyOption[boolean]{parentracker}[true]{%
+ \ifstrequal{#1}{true}
+ {\let\bibopenparen\blx@bibopenparen
+ \let\bibcloseparen\blx@bibcloseparen
+ \let\bibopenbracket\blx@bibopenbracket
+ \let\bibclosebracket\blx@bibclosebracket}
+ {\protected\def\bibopenparen{\bibleftparen}%
+ \protected\def\bibcloseparen{\bibrightparen}%
+ \protected\def\bibopenbracket{\bibleftbracket}%
+ \protected\def\bibclosebracket{\bibrightbracket}}}
+
+\DeclareBibliographyOption[integer]{maxparens}{%
+ \ifnumless{#1}{1}
+ {\blx@err@invopt{maxparens=#1}{}}
+ {\setcounter{maxparens}{#1}}}
+
+\newtoggle{blx@labeldateusetime}
+\DeclareBibliographyOption[boolean]{labeldateusetime}[true]{%
+ \ifstrequal{#1}{true}
+ {\toggletrue{blx@labeldateusetime}}
+ {\togglefalse{blx@labeldateusetime}}}
+
+\DeclareBibliographyOption[string]{labeldate}{%
+ % 'true' or 'false' means that the user thinks that this is the old 'labeldate'
+ % option which is now 'labeldateparts' (which is a boolean).
+ \ifboolexpr{%
+ test {\ifstrequal{#1}{true}}
+ or
+ test {\ifstrequal{#1}{false}}}
+ {\blx@warning@noline{%
+ 'labeldate' option used to determine whether to provide label date fields and\MessageBreak
+ extradate field is renamed to 'labeldateparts', setting this instead. This option is
+ now used to set the format of the labeldate}%
+ \settoggle{blx@labeldateparts}{#1}}
+ {\ifstrequal{#1}{iso8601}
+ {\blx@warning@noline{%
+ 'iso8601' date format specifier is deprecated.\MessageBreak
+ Use 'iso' instead}%
+ \def\blx@dateformat@labeldate{iso}%
+ \renewrobustcmd*{\bibdateeraendprefix}{\bibdateeraprefix}}
+ {\ifstrequal{#1}{edtf}
+ {\blx@warning@noline{%
+ 'edtf' date format specifier is deprecated.\MessageBreak
+ Use 'iso' instead}%
+ \def\blx@dateformat@labeldate{iso}%
+ \renewrobustcmd*{\bibdateeraendprefix}{\bibdateeraprefix}}
+ {\def\blx@dateformat@labeldate{#1}}}%
+ \ifstrequal{#1}{ymd}
+ {\renewrobustcmd*{\bibdaterangesep}{\slash}%
+ \renewrobustcmd*{\bibtimerangesep}{\slash}%
+ \renewrobustcmd*{\bibdateeraendprefix}{\bibdateeraprefix}}
+ {}%
+ \ifstrequal{#1}{iso}% bibdaterangesep hard-coded to slash, no extra space before prefices
+ {\renewrobustcmd*{\bibdateeraendprefix}{\bibdateeraprefix}}
+ {}%
+ \ifcsdef{mkdaterange#1}
+ {\protected\def\blx@imc@printlabeldate{\csuse{mkdaterange#1}{label}}
+ \protected\def\blx@imc@printlabeldateextra{\csuse{mkdaterange#1extra}{label}}}
+ {\ifcsdef{mkbibrange#1}%LEGACY(<3.5)
+ {\protected\def\blx@imc@printlabeldate{\csuse{mkbibrange#1}{label}}
+ \protected\def\blx@imc@printlabeldateextra{\csuse{mkbibrange#1extra}{label}}}
+ {\blx@err@invopt{labeldate=#1}{}}}}}
+
+\DeclareBibliographyOption[string]{labeltime}{%
+ \ifcsdef{mktimerange#1}
+ {\def\blx@timeformat@labeltime{#1}%
+ \protected\def\blx@imc@printlabeltime{\csuse{mktimerange#1}{label}}}
+ {\blx@err@invopt{labeltime=#1}{}}}
+
+% Date meta-information
+\DeclareBibliographyOption[string]{dateera}{%
+ \ifboolexpr{%
+ test {\ifstrequal{#1}{astronomical}}
+ or
+ test {\ifstrequal{#1}{secular}}
+ or
+ test {\ifstrequal{#1}{christian}}}
+ {\def\blx@dateera{#1}%
+ \ifstrequal{#1}{secular}
+ {\def\blx@dateera@bce{beforecommonera}%
+ \def\blx@dateera@ce{commonera}}
+ {}%
+ \ifstrequal{#1}{christian}
+ {\def\blx@dateera@bce{beforechrist}%
+ \def\blx@dateera@ce{annodomini}}
+ {}}
+ {\blx@err@invopt{dateera=#1}{}}}
+
+% Effectively turns off dateeraauto since it's only used on ce dates which
+% are never less than zero (as that would be a bce date)
+\numdef\blx@dateeraauto{0}
+\DeclareBibliographyOption[integer]{dateeraauto}{%
+ \numdef\blx@dateeraauto{#1}}
+
+\newtoggle{blx@datecirca}
+\DeclareBibliographyOption[boolean]{datecirca}[true]{%
+ \ifstrequal{#1}{true}
+ {\toggletrue{blx@datecirca}%
+ \protected\def\datecircaprint{%
+ \ifdatecirca{\bibstring{circa}\printdelim{datecircadelim}}{}}%
+ \protected\def\enddatecircaprint{%
+ \ifenddatecirca{\bibstring{circa}\printdelim{datecircadelim}}{}}%
+ \protected\def\datecircaprintedtf{%LEGACY(<3.9)
+ \blx@warning@noline{%
+ '\string\datecircaprintedtf' is deprecated.
+ Please use '\string\datecircaprintiso'}%
+ \datecircaprintiso}%
+ \protected\def\enddatecircaprintedtf{%LEGACY(<3.9)
+ \blx@warning@noline{%
+ '\string\enddatecircaprintedtf' is deprecated.
+ Please use '\string\enddatecircaprintiso'}%
+ \enddatecircaprintiso}%
+ \protected\def\datecircaprintiso{%
+ \ifdatecirca{\textasciitilde}{}}%
+ \protected\def\enddatecircaprintiso{%
+ \ifenddatecirca{\textasciitilde}{}}}
+ {\togglefalse{blx@datecirca}}}
+
+\newtoggle{blx@dateuncertain}
+\DeclareBibliographyOption[boolean]{dateuncertain}[true]{%
+ \ifstrequal{#1}{true}
+ {\toggletrue{blx@dateuncertain}%
+ \protected\def\dateuncertainprint{%
+ \ifdateuncertain{\bibdateuncertain}{}}%
+ \protected\def\enddateuncertainprint{%
+ \ifenddateuncertain{\bibdateuncertain}{}}}
+ {\togglefalse{blx@dateuncertain}}}
+
+% *time format options - auto-created for all datamodel date fields
+% *date format options - auto-created for all datamodel date fields
+% *dateusetime options - auto-created for all datamodel date fields
+% Date metadata toggles are defined in one of the \abx@dobooleans calls
+\def\do#1{%
+ \DeclareBibliographyOption[string]{#1date}{%
+ \ifstrequal{##1}{iso8601}
+ {\blx@warning@noline{'iso8601' date format specifier is deprecated.\MessageBreak
+ Use 'iso' instead}%
+ \csdef{blx@dateformat@#1date}{iso}}
+ {\ifstrequal{##1}{edtf}
+ {\blx@warning@noline{'edtf' date format specifier is deprecated.\MessageBreak
+ Use 'iso' instead}%
+ \csdef{blx@dateformat@#1date}{iso}}
+ {\csdef{blx@dateformat@#1date}{##1}}}%
+ \ifstrequal{##1}{ymd}
+ {\renewrobustcmd*{\bibdaterangesep}{\slash}%
+ \renewrobustcmd*{\bibtimerangesep}{\slash}%
+ \renewrobustcmd*{\bibdateeraendprefix}{\bibdateeraprefix}}
+ {}%
+ \ifcsdef{mkdaterange##1}
+ {\protected\csedef{blx@imc@print#1date}{\noexpand\csuse{mkdaterange##1}{#1}}%
+ \protected\csedef{blx@imc@print#1dateextra}{\noexpand\csuse{mkdaterange##1extra}{#1}}}
+ {\ifcsdef{mkbibrange##1}%LEGACY(<3.5)
+ {\blx@warning@noline{%
+ '\string\mkbibrange##1(extra)' date range macro in style is deprecated,\MessageBreak
+ please define '\string\mkdaterange##1(extra)' instead}%
+ \protected\csedef{blx@imc@print#1date}{\noexpand\csuse{mkbibrange##1}{#1}}%
+ \protected\csedef{blx@imc@print#1dateextra}{\noexpand\csuse{mkbibrange##1extra}{#1}}}
+ {\blx@err@invopt{#1date=##1}{}}}}%
+ % Default for new date fields is "comp" but this is overridden below by
+ % biblatex defaults
+ \blx@kv@setkeys{blx@opt@pre}{#1date=comp}%
+ % Time format options
+ \DeclareBibliographyOption[string]{#1time}{%
+ \csdef{blx@timeformat@#1time}{##1}%
+ \ifcsdef{mktimerange##1}
+ {\protected\csedef{blx@imc@print#1time}{\csuse{mktimerange##1}{#1}}}
+ {\blx@err@invopt{#1time=##1}{}}}%
+ % Default for new time fields is "24h"
+ \blx@kv@setkeys{blx@opt@pre}{#1time=24h}%
+ % Boolean to determine if times are printed with dates
+ \newtoggle{blx@#1dateusetime}%
+ \DeclareBibliographyOption[boolean]{#1dateusetime}[true]{%
+ \settoggle{blx@#1dateusetime}{##1}}}
+\abx@dodatetypes
+
+\DeclareBibliographyOption[string]{alldatesusetime}{%
+ \def\do##1{\ExecuteBibliographyOptions{##1usetime=#1}}%
+ \abx@dodates
+ \do{labeldate}}
+
+\DeclareBibliographyOption[string]{alldates}{%
+ \def\do##1{\ExecuteBibliographyOptions{##1=#1}}%
+ \abx@dodates
+ \do{labeldate}}
+
+\DeclareBibliographyOption[string]{alltimes}{%
+ \def\do##1{%
+ \ExecuteBibliographyOptions{##1time=#1}}%
+ \abx@dodatetypes
+ \do{label}}
+
+\newtoggle{blx@julian}
+\def\blx@gregorianstart{1582-10-15}
+\DeclareBibliographyOption[boolean]{julian}[true]{%
+ \ifstrequal{#1}{true}
+ {\toggletrue{blx@julian}}
+ {\togglefalse{blx@julian}}}
+
+\DeclareBibliographyOption[string]{gregorianstart}{%
+ \def\blx@gregorianstart{#1}}
+
+\DeclareBibliographyOption[string]{msform}{%
+ \def\blx@msform{#1}}
+
+\newtoggle{blx@datezeros}\toggletrue{blx@datezeros}
+\DeclareBibliographyOption[boolean]{datezeros}[true]{%
+ \ifstrequal{#1}{true}
+ {\toggletrue{blx@datezeros}%
+ \let\blx@imc@mkyearzeros\blx@imc@forcezerosy
+ \let\blx@imc@mkmonthzeros\blx@imc@forcezerosmdt
+ \let\blx@imc@mkdayzeros\blx@imc@forcezerosmdt}
+ {\togglefalse{blx@datezeros}%
+ \let\blx@imc@mkyearzeros\blx@imc@stripzeros
+ \let\blx@imc@mkmonthzeros\blx@imc@stripzeros
+ \let\blx@imc@mkdayzeros\blx@imc@stripzeros}}
+
+\newtoggle{blx@timezeros}\toggletrue{blx@timezeros}
+\DeclareBibliographyOption[boolean]{timezeros}[true]{%
+ \ifstrequal{#1}{true}
+ {\toggletrue{blx@timezeros}%
+ \let\blx@imc@mktimezeros\blx@imc@forcezerosmdt}
+ {\togglefalse{blx@timezeros}%
+ \let\blx@imc@mktimezeros\blx@imc@stripzeros}}
+
+\newtoggle{blx@timezones}
+\DeclareBibliographyOption[boolean]{timezones}[true]{%
+ \ifstrequal{#1}{true}
+ {\toggletrue{blx@timezones}}
+ {\togglefalse{blx@timezones}}}
+
+\newtoggle{blx@seconds}
+\DeclareBibliographyOption[boolean]{seconds}[true]{%
+ \ifstrequal{#1}{true}
+ {\toggletrue{blx@seconds}}
+ {\togglefalse{blx@seconds}}}
+
+\DeclareBibliographyOption[string]{autocite}{%
+ \ifcsundef{blx@acite@#1}
+ {\blx@error
+ {Autocite command '#1' undefined}
+ {The autocite command '#1' has not been defined by
+ the\MessageBreak selected citation style}}
+ {\letcs\autocite{blx@acite@#1}%
+ \letcs\autocites{blx@macite@#1}}}
+
+\DeclareBibliographyOption[string]{notetype}{%
+ \ifcsdef{blx@opt@notetype@#1}
+ {\blx@notetype\csuse{blx@opt@notetype@#1}}
+ {\blx@err@invopt{notetype=#1}{}}}
+\cslet{blx@opt@notetype@foot+end}\z@
+\let\blx@opt@notetype@footonly\@ne
+\let\blx@opt@notetype@endonly\tw@
+
+\DeclareBibliographyOption[boolean]{autopunct}[true]{%
+ \ifstrequal{#1}{true}
+ {\DeclareAutoPunctuation{.,;:!?}}
+ {\DeclareAutoPunctuation{}}}
+
+\DeclareBibliographyOption[boolean]{punctfont}[true]{%
+ \ifstrequal{#1}{true}
+ {\let\blx@ifpuncthook\@firstoftwo}
+ {\let\blx@ifpuncthook\@secondoftwo}}
+
+\DeclareBibliographyOption[boolean]{labelnumber}[true]{%
+ \settoggle{blx@labelnumber}{#1}%
+ \iftoggle{blx@labelnumber}
+ {}
+ {\blx@kv@setkeys{blx@opt@pre}{defernumbers=false}}}
+\DeclareBiblatexOption{type,entry}[boolean]{labelnumber}[true]{%
+ \settoggle{blx@labelnumber}{#1}}
+
+\DeclareBiblatexOption{global,type,entry}[boolean]{labelalpha}[true]{%
+ \settoggle{blx@labelalpha}{#1}}
+
+\DeclareBiblatexOption{global,type,entry}[boolean]{labeltitle}[true]{%
+ \settoggle{blx@labeltitle}{#1}}
+
+\DeclareBiblatexOption{global,type,entry}[boolean]{labeltitleyear}[true]{%
+ \settoggle{blx@labeltitleyear}{#1}}
+
+\DeclareBiblatexOption{global,type,entry}[boolean]{labeldateparts}[true]{%
+ \settoggle{blx@labeldateparts}{#1}}
+
+\DeclareBiblatexOption{global,type}[string]{uniquelist}[true]{%
+ \ifcsdef{blx@opt@uniquelist@#1}
+ {\letcs\blx@uniquelist{blx@opt@uniquelist@#1}}
+ {\blx@err@invopt{uniquelist=#1}{}}}
+\def\blx@opt@uniquelist@false{false}
+\def\blx@opt@uniquelist@true{true}
+\def\blx@opt@uniquelist@minyear{minyear}
+
+\DeclareBiblatexOption{global}[boolean]{pluralothers}[true]{%
+ \settoggle{blx@pluralothers}{#1}}
+
+\blx@DeclareBackendOption{entry,namelist}[string]{uniquelist}
+
+\DeclareBiblatexOption{global,type}[boolean]{nohashothers}[true]{%
+ \settoggle{blx@nohashothers}{#1}}
+\blx@DeclareBackendOption{entry,namelist}[boolean]{nohashothers}
+
+\DeclareBiblatexOption{global,type}[boolean]{nosortothers}[true]{%
+ \settoggle{blx@nosortothers}{#1}}
+\blx@DeclareBackendOption{entry,namelist}[boolean]{nosortothers}
+
+\DeclareBiblatexOption{global,type}[string]{uniquename}[true]{%
+ \ifcsdef{blx@opt@uniquename@#1}
+ {\letcs\blx@uniquename{blx@opt@uniquename@#1}}
+ {\blx@err@invopt{uniquename=#1}{}}}
+\def\blx@opt@uniquename@false{false}
+\def\blx@opt@uniquename@init{init}
+\def\blx@opt@uniquename@true{full}
+\def\blx@opt@uniquename@full{full}
+\def\blx@opt@uniquename@allinit{allinit}
+\def\blx@opt@uniquename@allfull{allfull}
+\def\blx@opt@uniquename@mininit{mininit}
+\def\blx@opt@uniquename@minfull{minfull}
+
+\blx@DeclareBackendOption{entry,namelist,name}[string]{uniquename}
+
+\DeclareBiblatexOption{global,type}[boolean]{noroman}[true]{%
+ \settoggle{blx@noroman}{#1}}
+\blx@DeclareBackendOption{entry}[boolean]{noroman}
+
+\DeclareBiblatexOption{global,type}[boolean]{singletitle}[true]{%
+ \settoggle{blx@singletitle}{#1}}
+\blx@DeclareBackendOption{entry}[boolean]{singletitle}
+
+\DeclareBiblatexOption{global,type}[boolean]{uniquetitle}[true]{%
+ \settoggle{blx@uniquetitle}{#1}}
+\blx@DeclareBackendOption{entry}[boolean]{uniquetitle}
+
+\DeclareBiblatexOption{global,type}[boolean]{uniquebaretitle}[true]{%
+ \settoggle{blx@uniquebaretitle}{#1}}
+\blx@DeclareBackendOption{entry}[boolean]{uniquebaretitle}
+
+\DeclareBiblatexOption{global,type}[boolean]{uniquework}[true]{%
+ \settoggle{blx@uniquework}{#1}}
+\blx@DeclareBackendOption{entry}[boolean]{uniquework}
+
+\DeclareBiblatexOption{global,type}[boolean]{uniqueprimaryauthor}[true]{%
+ \settoggle{blx@uniqueprimaryauthor}{#1}}
+\blx@DeclareBackendOption{entry}[boolean]{uniqueprimaryauthor}
+
+
+\DeclareBibliographyOption[boolean]{defernumbers}[true]{%
+ \settoggle{blx@defernumbers}{#1}%
+ \iftoggle{blx@defernumbers}
+ {\blx@kv@setkeys{blx@opt@pre}{labelnumber}%
+ \let\blx@thelabelnumber\blx@addlabelnumber
+ \let\abx@aux@number\blx@aux@number}
+ {\let\blx@thelabelnumber\relax
+ \let\abx@aux@number\@gobblefive}}
+
+\DeclareBibliographyOption[boolean]{locallabelwidth}[true]{%
+ \blx@key@locallabelwidth{#1}}
+
+
+\DeclareBibliographyOption[string]{refsection}{%
+ \ifcsdef{blx@opt@refsection@#1}
+ {\letcs\blx@refsecreset@level{blx@opt@refsection@#1}}
+ {\blx@err@invopt{refsection=#1}{}}}
+\csdef{blx@opt@refsection@none}{0}
+\csdef{blx@opt@refsection@part}{1}
+\csdef{blx@opt@refsection@chapter}{2}
+\csdef{blx@opt@refsection@section}{3}
+\csdef{blx@opt@refsection@subsection}{4}
+\csdef{blx@opt@refsection@chapter+}{5}
+\csdef{blx@opt@refsection@section+}{6}
+\csdef{blx@opt@refsection@subsection+}{7}
+
+\blx@patchsection@switch{\blx@refsecreset@level}{\newrefsection}{}{}
+
+\DeclareBibliographyOption[string]{refsegment}{%
+ \ifcsdef{blx@opt@refsegment@#1}
+ {\letcs\blx@refsegreset@level{blx@opt@refsegment@#1}}
+ {\blx@err@invopt{refsegment=#1}{}}}
+\csdef{blx@opt@refsegment@none}{0}
+\csdef{blx@opt@refsegment@part}{1}
+\csdef{blx@opt@refsegment@chapter}{2}
+\csdef{blx@opt@refsegment@section}{3}
+\csdef{blx@opt@refsegment@subsection}{4}
+\csdef{blx@opt@refsegment@chapter+}{5}
+\csdef{blx@opt@refsegment@section+}{6}
+\csdef{blx@opt@refsegment@subsection+}{7}
+
+\blx@patchsection@switch{\blx@refsegreset@level}
+ {\newrefsegment}
+ {\ifnumgreater\blx@refsegreset@level\z@
+ {\ifnumgreater\blx@refsegreset@level\blx@refsecreset@level
+ {}
+ {\blx@err@confopt
+ {refsegment/refsection}
+ {The 'refsegment' option must point to a
+ lower-level\MessageBreak document division
+ than 'refsection'}%
+ \def\blx@refsegreset@level{0}}}
+ {}}
+ {}
+
+\DeclareBibliographyOption[string]{citereset}{%
+ \ifcsdef{blx@opt@citereset@#1}
+ {\letcs\blx@citereset@level{blx@opt@citereset@#1}}
+ {\blx@err@invopt{citereset=#1}{}}}
+\csdef{blx@opt@citereset@none}{0}
+\csdef{blx@opt@citereset@part}{1}
+\csdef{blx@opt@citereset@chapter}{2}
+\csdef{blx@opt@citereset@section}{3}
+\csdef{blx@opt@citereset@subsection}{4}
+\csdef{blx@opt@citereset@chapter+}{5}
+\csdef{blx@opt@citereset@section+}{6}
+\csdef{blx@opt@citereset@subsection+}{7}
+
+\blx@patchsection@switch{\blx@citereset@level}{\citereset\blx@inf@creset}{}{}
+
+\DeclareBibliographyOption[boolean]{bibwarn}[true]{%
+ \ifstrequal{#1}{true}
+ {\def\blx@bbl@thewarn{\blx@bbl@warn}}
+ {\let\blx@bbl@thewarn\@gobble}}
+
+% Name field options
+\def\do#1{%
+ \DeclareBiblatexOption{global,type,entry}[boolean]{use#1}[true]{%
+ \settoggle{blx@use#1}{##1}}}
+\abx@donames
+
+% Entry options
+\DeclareBiblatexOption{global,type,entry,namelist,name}[boolean]{useprefix}[true]{%
+ \settoggle{blx@useprefix}{#1}}
+
+\DeclareBiblatexOption{global,type,entry}[boolean]{skipbib}[true]{%
+ \settoggle{blx@skipbib}{#1}}
+
+\DeclareBiblatexOption{global,type,entry}[boolean]{skipbiblist}[true]{%
+ \settoggle{blx@skipbiblist}{#1}}
+
+\DeclareBiblatexOption{global,type,entry}[boolean]{skiplab}[true]{%
+ \settoggle{blx@skiplab}{#1}}
+
+\DeclareBiblatexOption{global,type}[boolean]{dataonly}[true]{%
+ \settoggle{blx@skipbib}{#1}%
+ \settoggle{blx@skipbiblist}{#1}%
+ \settoggle{blx@skiplab}{#1}}
+% the entry option is resolved by Biber
+\blx@DeclareBackendOption{entry}[boolean]{dataonly}
+% This is handled in a special way by by biber. It indicates what to set for various options
+% if the dataonly option is "true". If biber finds dataonly=false
+% in an entry, the booleans here will be reversed (skip*) and the unique* options (which are not
+% booleans) will be ignored, defaulting to higher scope values. biber assumes
+% that \blx@bcf@backendin@entry@* options are boolean options as otherwise, negating them
+% per-entry makes little sense and it is not clear what to do with such lower-scope overrides.
+\gdef\blx@bcf@backendin@entry@dataonly{uniquename=false,uniquelist=false,%
+ skipbib=true,skipbiblist=true,skiplab=true}
+
+% Option processor/scheduler
+\DeclareOption*{%
+ \begingroup
+ \def\blx@tempa#1=#2&{#1}%
+ \edef\blx@tempa{%
+ \expandafter\blx@tempa\CurrentOption=&}%
+ \blx@kv@ifkeyundef{blx@opt@ldt}{\blx@tempa}
+ {% now it becomes messy,
+ % we need to intercept the bibtexcaseprotection option
+ % because it is only defined by the case changing code
+ % which is loaded after load-time options are processed
+ \ifdefstring\blx@tempa{bibtexcaseprotection}
+ {\endgroup
+ \edef\blx@deferoption@bibtexcaseprotection{\CurrentOption}}
+ {\endgroup
+ \eappto\blx@theoptions{\CurrentOption,}}}
+ {\edef\blx@tempa{\endgroup
+ \noexpand\blx@kv@setkeys{blx@opt@ldt}{\CurrentOption}}%
+ \blx@tempa}}
+
+\def\blx@processoptions{%
+ \ifundef\blx@theoptions
+ {}
+ {\begingroup
+ \edef\blx@tempa{\endgroup
+ \noexpand\blx@kv@setkeys{blx@opt@pre}{\blx@theoptions}}%
+ \blx@tempa}}
+
+%% Initial setup
+
+\define@key{blx@opt@ldt}{casechanger}[auto]{%
+ \ifcsundef{blx@opt@casechanger@#1}
+ {\blx@err@invopt
+ {casechanger=#1}
+ {Valid options for 'casechanger' are 'auto', 'expl3' and
+ 'latex2e'}}
+ {\csletcs{blx@deferoption@casechanger}{blx@opt@casechanger@#1}}}
+
+
+\csdef{blx@opt@casechanger@auto}{%
+ \ifdefstring{\blx@texencoding}{utf8}
+ {\blx@info@noline{Document encoding is UTF8 ...}%
+ \RequirePackage{expl3}[2020/04/06]%
+ \@ifpackagelater{expl3}{2020/04/06}
+ {\blx@info@noline{... and expl3\MessageBreak\csuse{ver@expl3.sty}\MessageBreak
+ is new enough (at least 2020/04/06),\MessageBreak
+ setting 'casechanger=expl3'}%
+ \csuse{blx@opt@casechanger@expl3}}
+ {\blx@info@noline{... but expl3\MessageBreak\csuse{ver@expl3.sty}\MessageBreak
+ is too old (older than 2020/04/06),\MessageBreak
+ setting 'casechanger=latex2e'}%
+ \csuse{blx@opt@casechanger@latex2e}}}
+ {\blx@info@noline{%
+ Document encoding not detected as UTF8.\MessageBreak
+ Setting 'casechanger=latex2e'}%
+ \csuse{blx@opt@casechanger@latex2e}}}
+
+\csdef{blx@opt@casechanger@latex2e}{%
+ \RequirePackage{blx-case-latex2e\abx@filespf}}
+\csletcs{blx@opt@casechanger@2e}{blx@opt@casechanger@latex2e}
+
+\csdef{blx@opt@casechanger@expl3}{%
+ \ifdefstring{\blx@texencoding}{utf8}
+ {}
+ {\blx@warning@noline{%
+ The expl3 case changer code should only be used\MessageBreak
+ with UTF-8 encoding.\MessageBreak
+ But the document encoding was detected as
+ '\blx@texencoding'.\MessageBreak
+ Case changing macros may break\MessageBreak
+ if used with non-ASCII characters}}%
+ \RequirePackage{blx-case-expl3\abx@filespf}}
+\csletcs{blx@opt@casechanger@3}{blx@opt@casechanger@expl3}
+
+% default to auto
+\csletcs{blx@deferoption@casechanger}{blx@opt@casechanger@auto}
+
+% This is a bit unfortunate, but we need some more definitions after
+% loading the case changing code.
+\def\blx@casechange@postload{%
+ % Language fallback, in order:
+ % * explicit option language=<lang>, which overrides everything
+ % * langid field of entry
+ % * babel/polyglossia lang
+ % * main document lang (we should never reach this)
+ % * <empty> (we should *definitely* never reach this)
+ % Everything here is expandable so that
+ % \blx@mksc@lang expands to the language name.
+ \def\blx@mksc@lang{%
+ \ifundef\blx@forcelanguagename
+ {\ifundef\abx@field@langid
+ {\ifundef\blx@languagename
+ {\ifundef\blx@main@language
+ {}
+ {\blx@main@language}}
+ {\blx@languagename}}
+ {\abx@field@langid}}
+ {\blx@forcelanguagename}}%
+ %
+ \DeclareCaseLangs{%
+ american,british,canadian,
+ english,USenglish,UKenglish,
+ australian,newzealand}%
+ % Textcase defines \NoCaseChange as \let\NoCaseChange\@firstofone
+ \ifundef\NoCaseChange
+ {\let\NoCaseChange\@firstofone}
+ {}%
+ % we also need to defer the bibtexcaseprotection option until after we load
+ % the case changing code
+ \ifundef\blx@deferoption@bibtexcaseprotection
+ {}
+ {\begingroup
+ \edef\blx@tempa{\endgroup
+ \noexpand\blx@kv@setkeys{blx@opt@pre}{%
+ \blx@deferoption@bibtexcaseprotection}}%
+ \blx@tempa}}
+% That's it for the case change code
+
+% Set defaults
+\blx@kv@setkeys{blx@opt@ldt}{style=numeric}
+\blx@kv@setkeys{blx@opt@pre}{%
+ sorting=nty,sortlocale=auto,sortcase,sortupper,sortcites=false,pluralothers=false,
+ maxnames=3,minnames=1,maxalphanames=3,minalphanames=1,
+ maxitems=3,minitems=1,mincrossrefs=2,minxrefs=2,
+ useauthor=true,useeditor=true,usetranslator=false,
+ indexing=false,abbreviate=true,dateabbrev=true,dateera=astronomical,
+ backref=false,backrefsetstyle=setonly,backreffloats=true,
+ pagetracker=false,
+ ibidtracker=false,idemtracker=false,opcittracker=false,loccittracker=false,
+ citetracker=false,trackfloats=false,
+ citecounter=false,block=none,language=autobib,clearlang=true,autolang=none,
+ autofieldlang=none,autofieldlangstrings=false,date=comp,labeldate=year,origdate=comp,
+ eventdate=comp,urldate=short,autopunct=true,punctfont=false,defernumbers=false,
+ timezeros=true,refsection=none,refsegment=none,citereset=none,hyperref=auto,
+ parentracker,maxparens=3,bibencoding=auto,bibwarn,timezones=false,
+ seconds=false,julian=false,labeltime=24h,locallabelwidth=false,msform=default,
+ dynamiclabel=false,langhook=captions}
+
+% Load Unicode enhancements (only for LuaTeX and XeTeX)
+\ifboolexpr{
+ not test {\ifundef\XeTeXrevision}
+ or
+ not test {\ifundef\luatexversion}}
+ {\blx@inputonce{blx-unicode.def}{enhanced support for Unicode engines}{}{}{}{}}
+ {}
+
+% Load compatibility code
+\blx@inputonce{blx-compat.def}{compatibility code}{}{}{}{}
+
+
+% Restore catcodes
+\blx@catcodes
+\undef\blx@catcodes
+
+% Process load-time options
+\ProcessOptions*
+
+% Switch to BibTeX support if requested
+\iftoggle{blx@bibtex}
+ {\blx@inputonce{blx-bibtex.def}{BibTeX backend compatibility}{}{}{}{}}
+ {}
+
+% Load citation and bibliography styles, configuration file
+\blx@inputonce{biblatex.def}{generic definitions}{}{}{}{}
+\iftoggle{blx@natbib}
+ {\blx@inputonce{blx-natbib.def}{natbib compatibility}{}{}{}{}}
+ {}
+\iftoggle{blx@mcite}
+ {\blx@inputonce{blx-mcite.def}{mcite-like commands}{}{}{}{}}
+ {}
+\RequireBibliographyStyle{\blx@bbxfile}
+\RequireCitationStyle{\blx@cbxfile}
+\blx@secinit
+\citereset
+\blx@inputonce{biblatex.cfg}{configuration file}{}{}{}{}
+
+% Process preamble options
+\blx@processoptions
+
+% first stab at guessing the file encoding
+\def\blx@guesstexencoding{%
+ \ifdef\blx@texencoding@fromoption
+ {\let\blx@texencoding\blx@texencoding@fromoption
+ \blx@info@noline{%
+ Input encoding '\blx@texencoding' specified}}
+ {\ifundef\inputencodingname
+ {\ifundef\XeTeXrevision
+ {\ifundef\luatexversion
+ {\def\blx@texencoding{ascii}%
+ \blx@info@noline{%
+ No input encoding detected.\MessageBreak
+ Assuming '\blx@texencoding'}}
+ {\def\blx@texencoding{utf8}%
+ \blx@info@noline{%
+ LuaTeX detected.\MessageBreak
+ Assuming input encoding '\blx@texencoding'}}}
+ {\def\blx@texencoding{utf8}%
+ \blx@info@noline{%
+ XeTeX detected.\MessageBreak
+ Assuming input encoding '\blx@texencoding'}}}
+ {\ifcsdef{blx@inpenc@\inputencodingname}
+ {\letcs\blx@texencoding{blx@inpenc@\inputencodingname}}
+ {\let\blx@texencoding\inputencodingname}%
+ \blx@info@noline{%
+ Input encoding '\blx@texencoding' detected}}}}
+
+\blx@guesstexencoding
+\let\blx@texencoding@firstguess\blx@texencoding
+
+% this ultimately loads either
+% blx-case-expl3.def or blx-case-latex2e.def
+\blx@deferoption@casechanger
+\blx@casechange@postload
+
+
+% Deferred setup at end of preamble
+\AtEndPreamble{%
+ \blx@checkoptions@global
+ \c@maxnames\blx@maxcitenames\relax
+ \c@minnames\blx@mincitenames\relax
+ \c@maxitems\blx@maxitems\relax
+ \c@minitems\blx@minitems\relax
+ \togglefalse{abx@bool@xinits}
+ \def\do#1{\iftoggle{abx@bool@#1inits}{\toggletrue{abx@bool@xinits}}{}}
+ \abx@donameparts
+ \iftoggle{abx@bool@xinits}
+ {\ifdefstrequal\blx@uniquename\blx@opt@uniquename@full
+ {\blx@warn@conflopt{%
+ '<namepart>inits' conflicts with 'uniquename=full'.\MessageBreak
+ Setting 'uniquename=init'}%
+ \blx@kv@setkeys{blx@opt@pre}{uniquename=init}}
+ {}%
+ \ifdefstrequal\blx@uniquename\blx@opt@uniquename@allfull
+ {\blx@warn@conflopt{%
+ '<namepart>inits' conflicts with 'uniquename=allfull'.\MessageBreak
+ Setting 'uniquename=allinit}%
+ \blx@kv@setkeys{blx@opt@pre}{uniquename=allinit}}
+ {}%
+ \ifdefstrequal\blx@uniquename\blx@opt@uniquename@minfull
+ {\blx@warn@conflopt{%
+ '<namepart>inits' conflicts with 'uniquename=minfull'.\MessageBreak
+ Setting 'uniquename=mininit}%
+ \blx@kv@setkeys{blx@opt@pre}{uniquename=mininit}}
+ {}}
+ {}%
+ \nottoggle{blx@labeldateparts}
+ {\ifdefstrequal\blx@uniquelist\blx@opt@uniquelist@minyear
+ {\blx@warn@conflopt{%
+ 'uniquelist=minyear' requires 'labeldateparts'.\MessageBreak
+ Setting 'uniquelist=true'}%
+ \blx@kv@setkeys{blx@opt@pre}{uniquelist}}
+ {}}
+ {}%
+ \def\do#1{%
+ \ifcsstring{blx@dateformat@#1}{iso}
+ {\blx@stripfromendinto{#1}{date}\blx@datetype
+ \ifdefstring\blx@dateera{astronomical}{}
+ {\blx@warn@conflopt{%
+ '#1=iso' requires 'dateera=astronomical'.\MessageBreak
+ Setting 'dateera=astronomical'}%
+ \blx@kv@setkeys{blx@opt@pre}{dateera=astronomical}}%
+ \ifcsstring{blx@timeformat@\blx@datetype time}{24h}%
+ {}
+ {\blx@warn@conflopt{%
+ '#1=iso' requires '\blx@datetype time=24h'.\MessageBreak
+ Setting '\blx@datetype time=24h'}%
+ \blx@kv@setkeys{blx@opt@pre}{\blx@datetype time=24h}}%
+ \iftoggle{blx@julian}
+ {\blx@warn@conflopt{%
+ '#1=iso' requires 'julian=false'.\MessageBreak
+ Setting 'julian=false'}%
+ \blx@kv@setkeys{blx@opt@pre}{julian=false}}
+ {}%
+ \nottoggle{blx@datezeros}
+ {\blx@warn@conflopt{%
+ '#1=iso' requires 'datezeros=true'.\MessageBreak
+ Setting 'datezeros=true'}%
+ \blx@kv@setkeys{blx@opt@pre}{datezeros=true}}
+ {}%
+ \nottoggle{blx@timezeros}
+ {\blx@warn@conflopt{%
+ '#1=iso' requires 'timezeros=true'.\MessageBreak
+ Setting 'timezeros=true'}%
+ \blx@kv@setkeys{blx@opt@pre}{timezeros=true}}
+ {}%
+ \nottoggle{blx@seconds}
+ {\blx@warn@conflopt{%
+ '#1=iso' requires 'seconds=true'.\MessageBreak
+ Setting 'seconds=true'}%
+ \blx@kv@setkeys{blx@opt@pre}{seconds=true}}
+ {}}
+ {}}%
+ \abx@dodates
+ \do{labeldate}}
+
+
+
+\def\blx@checkencoding{%
+ \blx@guesstexencoding
+ \ifdefstrequal\blx@texencoding@firstguess\blx@texencoding
+ {}
+ {\blx@warning@noline{%
+ Initial guess for file encoding (\blx@texencoding@firstguess)\MessageBreak
+ and new guess (\blx@texencoding) do not match.\MessageBreak
+ Please set up your document encoding *before*\MessageBreak
+ loading biblatex.\MessageBreak
+ The case changing code might not work as expected}}%
+ \ifdef\blx@bibencoding
+ {\ifdefstring\blx@bibencoding{ascii}
+ {\blx@info@noline{%
+ Data encoding '\blx@bibencoding' specified.\MessageBreak
+ No need to reencode data}}
+ {\ifdefstring\blx@bibencoding{auto}
+ {\let\blx@bibencoding\blx@texencoding
+ \blx@info@noline{%
+ Automatic encoding selection.\MessageBreak
+ Assuming data encoding '\blx@bibencoding'}}
+ {\ifdefstrequal\blx@bibencoding\blx@texencoding
+ {\blx@info@noline{%
+ Data encoding '\blx@bibencoding' specified.\MessageBreak
+ No need to reencode data}}
+ {\blx@info@noline{%
+ Data encoding '\blx@bibencoding' specified.\MessageBreak
+ Backend will reencode on the fly}}}}}
+ {\def\blx@bibencoding{ascii}%
+ \blx@info@noline{%
+ Data encoding not specified.\MessageBreak
+ Assuming '\blx@bibencoding'}}%
+ \ifboolexpr{%
+ togl {blx@safeinputenc}
+ and ( test {\@ifpackageloaded{inputenc}}
+ or
+ test {\@ifpackageloaded{inputenx}} )
+ }
+ {\def\blx@texencoding{ascii}%
+ \blx@info@noline{%
+ Input encoding '\blx@texencoding' forced by\MessageBreak
+ 'safeinputenc' option}}
+ {}%
+}
+
+% Deferred last minute setup
+\AtBeginDocument{%
+ \blx@auxwrite\@mainaux{}{\string\abx@aux@refcontext{\blx@refcontext@context}}
+ \blx@checkencoding
+ \if@filesw
+ \blx@ctrlwrite
+ \fi
+ \blx@bblinput
+ \setcounter{blx@maxsection}{0}%
+ \csuse{blx@hook@refsectioninit}%
+ \csuse{abx@preamble}%
+ \blx@inf@refsec
+ \blx@inf@refseg}
+
+\AtEndOfPackage{%
+ % Data model macros are forbidden after package load is finished
+ \def\blx@warn@dm#1{\blx@warning@noline{Data model macro '#1' cannot be used in preamble}}
+ \def\ResetDatamodelEntrytypes{\blx@warn@dm{ResetDatamodelEntrytypes}}
+ \def\ResetDatamodelFields{\blx@warn@dm{ResetDatamodelFields}}
+ \def\ResetDatamodelEntryfields{\blx@warn@dm{ResetDatamodelEntryfields}}
+ \def\ResetDatamodelConstraints{\blx@warn@dm{ResetDatamodelConstraints}}
+ \renewcommand*{\DeclareDatamodelMultiscriptEntryfields}[1]{\blx@warn@dm{DeclareDatamodelMultiscriptEntryfields}}
+ \renewcommand*{\DeclareDatamodelEntrytypes}[2][]{\blx@warn@dm{DeclareDatamodelEntrytypes}}
+ \renewcommand*{\DeclareDatamodelFields}[2][]{\blx@warn@dm{DeclareDatamodelFields}}
+ \renewcommand*{\DeclareDatamodelEntryfields}[2][]{\blx@warn@dm{DeclareDatamodelEntryfields}}
+ \renewcommand*{\DeclareDatamodelConstraints}[2][]{\blx@warn@dm{DeclareDatamodelConstraints}}
+ \renewcommand*{\DeclareDatamodelConstant}[3][]{\blx@warn@dm{DeclareDatamodelConstant}}
+ \AtBeginDocument{%
+ \let\do\undef
+ \blx@dopreamblecmds
+ \let\do\noexpand}}
+
+\def\BiblatexHungarianWarningOff{\global\let\lbx@hu@loadinfo\@empty}
+\def\BiblatexLatvianWarningOff{\global\let\lbx@lv@loadinfo\@empty}
+\def\BiblatexSplitbibDefernumbersWarningOff{%
+ \global\let\blx@printbibchecks@suppresswarn\@empty}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/blx-bibtex-ms.def b/macros/latex/contrib/biblatex-ms/latex/blx-bibtex-ms.def
new file mode 100644
index 0000000000..1b8509a580
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/blx-bibtex-ms.def
@@ -0,0 +1,835 @@
+\ProvidesFile{blx-bibtex-ms.def}
+[\abx@cptid]
+
+\blx@warning@noline{%
+ Using fall-back bibtex backend:\MessageBreak
+ functionality may be reduced/unavailable%
+}
+
+% Initialisation of backend-related switches, variables, etc.
+\newtoggle{blx@runbtx}
+
+% No interface provided for this but can be set 'in emergency' by user
+\def\blx@maxline{79}
+
+% Rename write stream so use is clear
+\let\blx@write\blx@bcfout
+
+% Data file initialisation
+\edef\blx@auxfile{\jobname}
+\let\blx@aux\@mainaux
+\newcommand*{\blxauxsuffix}{-blx}
+
+\begingroup
+\def\blx@tempa#1"#2{%
+ #1\ifx#2\@empty\else
+ \expandafter\blx@tempa
+ \fi#2}
+\edef\blx@ctrlfile{%
+ \noexpand\blx@tempa
+ \expandafter\blx@tempa\jobname"\@empty
+ \space\noexpand\@empty}
+\def\blx@tempa#1 #2{%
+ #1\ifx#2\@empty\else
+ \string_\expandafter\blx@tempa
+ \fi#2}
+\xdef\blx@ctrlfile{\blx@ctrlfile}
+\endgroup
+
+\def\blx@auxinit#1{%
+ \blx@auxwrite\blx@aux
+ {\def\do##1{,\blx@stripbib{##1}}}
+ {\ifx\blx@aux\@mainaux
+ \else
+ \blx@msg@aux
+ \fi
+ \string\bibstyle{biblatex\abx@filespf}\blx@nl
+ \string\bibdata{%
+ \blx@ctrlfile\blxauxsuffix
+ \ifx#1\@empty
+ \else
+ \dolistloop#1%
+ \fi}\blx@nl
+ \string\citation{biblatex-control}}}
+
+\def\blx@sig@bib{@Comment{$ biblatex control file $}}
+\edef\blx@ver@bib{%
+ @Comment{$ biblatex bcf format version \blx@bcfversion\space $}}
+
+\let\blx@sig@aux\blx@sig@bbl
+\let\blx@ver@aux\blx@ver@bbl
+
+\edef\blx@msg@text{%
+ \@percentchar\space Do not modify this file!\blx@nl
+ \@percentchar\blx@nl
+ \@percentchar\space This is an auxiliary file
+ used by the 'biblatex' package.\blx@nl
+ \@percentchar\space This file may safely be deleted.
+ It will be recreated as\blx@nl
+ \@percentchar\space required.\blx@nl}
+
+\edef\blx@msg@aux{%
+ \blx@sig@aux\blx@nl
+ \blx@ver@aux\blx@nl
+ \blx@msg@text
+ \@percentchar\blx@nl\string\relax\blx@nl}
+\edef\blx@msg@bib{%
+ \blx@sig@bib\blx@nl
+ \blx@ver@bib\blx@nl
+ \blx@msg@text\blx@nl}
+
+% User feedback
+
+\renewrobustcmd*{\RequireBiber}[1][2]{%
+ \ifnumgreater{#1}\blx@reqbiber
+ {\numgdef\blx@reqbiber{#1}}
+ {}%
+ \blx@checkbackend{style}}
+\@onlypreamble\RequireBiber
+\let\blx@reqbiber\z@
+
+\def\blx@checkbackend#1{%
+ \ifnum\blx@reqbiber>2 %
+ \blx@error
+ {Biber backend is required by #1}
+ {The selected style or one of the .bib files
+ requires Biber.\MessageBreak It will
+ not work at all with BibTeX.}%
+ \fi}
+
+\def\blx@check@logreq{%
+ \begingroup
+ \ltxrequest{biblatex}{{\iftoggle{blx@runltx}{1}{0}}}{%
+ \provides[type=dynamic]{
+ \def\do##1{\file{##1.aux}}
+ \dolistloop\blx@list@inactive
+ \file{\blx@ctrlfile\blxauxsuffix.bib}
+ }
+ \requires[type=dynamic]{
+ \def\do##1{\file{##1.bbl}}
+ \dolistloop\blx@list@inactive
+ }
+ \ifdef\blx@list@req@edit
+ {\requires[type=editable]{
+ \forlistloop\file\blx@list@req@edit
+ }}
+ {}
+ \ifdef\blx@list@req@stat
+ {\requires[type=static]{
+ \forlistloop\file\blx@list@req@stat
+ }}
+ {}
+ }%
+ \def\do##1{%
+ \ifinlist{##1}{\blx@list@active}
+ {\blx@logreq@bibtex{1}{##1}}
+ {\blx@logreq@bibtex{0}{##1}}}%
+ \dolistloop\blx@list@inactive
+ \endgroup}
+
+\def\blx@logreq@bibtex#1#2{%
+ \logrequest[package=biblatex,priority=5,active=#1]{%
+ \generic{bibtex}
+ \cmdline{%
+ \iftoggle{blx@bibtex8}
+ {\binary{bibtex8}
+ \option{--wolfgang}
+ \option{--min\string_crossrefs \blx@mincrossrefs}}
+ {\binary{bibtex}
+ \option{-min-crossrefs \blx@mincrossrefs}}%
+ \infile{#2}
+ }
+ \input{
+ \file{#2.aux}
+ }
+ \output{
+ \file{#2.bbl}
+ }
+ \provides[type=dynamic]{
+ \file{#2.bbl}
+ }
+ \requires[type=dynamic]{
+ \file{#2.aux}
+ \file{\blx@ctrlfile\blxauxsuffix.bib}
+ }
+ \requires[type=editable]{
+ \ifcsdef{blx@list@bibfiles@#2}
+ {\def\do{\file}
+ \dolistcsloop{blx@list@bibfiles@#2}}
+ {}
+ }
+ \requires[type=static]{
+ \file{biblatex.bst}}
+ }%
+}
+
+\def\blx@logreq@active#1{%
+ \xifinlist{\blx@auxfile}{\blx@list@active}
+ {}
+ {\listxadd\blx@list@active{\blx@auxfile}}%
+ \ifblank{#1}
+ {}
+ {\@latex@warning{#1}}%
+ \blx@rerun@latex
+ \blx@rerun@bibtex}
+
+\def\blx@logreq@inactive{%
+ \xifinlist{\blx@auxfile}{\blx@list@inactive}
+ {}
+ {\listxadd\blx@list@inactive{\blx@auxfile}}}
+
+\def\blx@rerun@bibtex{%
+ \global\toggletrue{blx@runbtx}%
+ \global\let\blx@rerun@bibtex\relax}
+
+\def\blx@indextitle{%
+ \ifundef\abx@field@@@indextitle
+ {\letcs\abx@field@@@indextitle{abx@field@@@title}}
+ {}}
+
+% Only the toggle name changes here
+\patchcmd{\blx@check@rerun}{blx@runbiber}{blx@runbtx}{}{}
+
+\def\blx@warn@auxlist{%
+ \begingroup
+ \edef\blx@tempa{Please (re)run BibTeX on the file(s):}%
+ \def\do##1{\appto\blx@tempa{\MessageBreak##1}}%
+ \dolistloop\blx@list@active
+ \blx@warning@noline{%
+ \blx@tempa\MessageBreak
+ and rerun LaTeX afterwards}%
+ \endgroup}
+
+\protected\def\blx@bibreq#1{%
+ \blx@auxwrite\blx@aux{}{\string\citation{#1}}}
+
+% bibtex doesn't parse ISO8601 dates so these overrides do nothing
+\appto\blx@blxinit{%
+ \def\iflabeldateera#1{\@secondoftwo}%
+ \def\iflabelenddateera#1{\@secondoftwo}%
+ \let\iflabeldatecirca\@secondoftwo
+ \let\iflabelenddatecirca\@secondoftwo
+ \let\iflabeldateuncertain\@secondoftwo
+ \let\iflabelenddateuncertain\@secondoftwo}
+
+
+% Alter message text
+\patchcmd{\blx@bbl@warn}{Biber}{BibTeX}{}{}
+
+%% Data input
+
+\patchcmd{\blx@bblinput}{\blx@bblfile}{\blx@bblfile\blx@bblsecs}{}{}
+
+
+\def\blx@bblfile{%
+ \blx@secinit
+ \begingroup
+ \blx@bblstart
+ \ifnum\c@refsection>\z@
+ \edef\blx@auxfile{\jobname\the\c@refsection\blxauxsuffix}%
+ \else
+ \edef\blx@auxfile{\jobname}%
+ \fi
+ \blx@ifsigned{\blx@auxfile}{bbl}
+ {\InputIfFileExists{\blx@auxfile.bbl}
+ {\blx@info@noline{... file '\blx@auxfile.bbl' found}%
+ \global\toggletrue{blx@bbldone}%
+ \blx@generate@bbl@mdfivesum@found{\blx@auxfile.bbl}}
+ {\blx@info@noline{... file '\blx@auxfile.bbl' not found}%
+ \typeout{No file \blx@auxfile.bbl.}%
+ \global\togglefalse{blx@bbldone}%
+ \blx@generate@bbl@mdfivesum@notfound}}
+ {}%
+ \blx@bblend
+ \endgroup
+ % Check if Biber rerun was not carried out.
+ % If so, ask for it again.
+ \blx@check@bbl@rerun@mdfivesum
+ \csnumgdef{blx@labelnumber@\the\c@refsection}{0}}
+
+\def\blx@bblsecs{%
+ \advance\c@refsection\@ne
+ \ifnum\c@refsection>\c@blx@maxsection
+ \else
+ \blx@bblfile
+ \expandafter\blx@bblsecs
+ \fi}
+
+\def\blx@refsection@ii{%
+ \xdef\blx@auxfile{\jobname\the\c@refsection\blxauxsuffix}%
+ \blx@regbibfiles\blx@auxfile\blx@bibfiles
+ \blx@logreq@inactive
+ \blx@ifsigned{\blx@auxfile}{aux}
+ {\immediate\openout\blx@write\blx@auxfile.aux\relax
+ \global\let\blx@aux\blx@write
+ \blx@auxinit\blx@bibfiles}
+ {}}
+
+\def\blx@endrefsection{%
+ \blx@endrefsegment
+ \ifx\blx@aux\blx@write
+ \immediate\closeout\blx@write
+ \global\let\blx@aux\@mainaux
+ \xdef\blx@auxfile{\jobname}%
+ \fi
+ \global\c@refsection\z@}
+
+
+
+% xref support
+
+% {<entrykey>}
+\protected\def\blx@bbl@xref#1{%
+ \ifcsdef{blx@refp@\the\c@refsection @\detokenize{#1}}
+ {}
+ {\listcsxadd{blx@refs@\the\c@refsection}{\detokenize{#1}}}%
+ \listcsxadd{blx@refp@\the\c@refsection @\detokenize{#1}}{\abx@field@@@entrykey}%
+ \csxdef{blx@refc@\the\c@refsection @\abx@field@@@entrykey}{\detokenize{#1}}}
+
+\def\blx@addxref#1{%
+ \blx@ifdata{#1}
+ {\begingroup
+ \def\do##1{%
+ \csgappto{blx@data@\the\c@refsection @##1}{%
+ \def\abx@field@@@xref{#1}}}%
+ \dolistcsloop{blx@refp@\the\c@refsection @#1}%
+ \endgroup}
+ {}%
+ \global\csundef{blx@refp@\the\c@refsection @#1}}
+
+\def\blx@citation@xref#1{%
+ \begingroup
+ \edef\blx@tempa{blx@refp@\the\c@refsection @%
+ \csname blx@refc@\the\c@refsection @#1\endcsname}%
+ \ifcsdef\blx@tempa
+ {\ifinlistcs{#1}\blx@tempa
+ {}
+ {\listcsxadd\blx@tempa{#1}}%
+ \blx@tempcnta\z@
+ \def\do##1{\advance\blx@tempcnta\@ne}%
+ \dolistcsloop\blx@tempa}
+ {\listcsxadd\blx@tempa{#1}%
+ \blx@tempcnta\@ne}%
+ \expandafter\endgroup\ifnum\blx@tempcnta<\blx@minxrefs\relax
+ \else
+ \expandafter\expandafter\expandafter\blx@citation@entry
+ \expandafter\expandafter\expandafter{%
+ \csname blx@refc@\the\c@refsection @#1\endcsname}\blx@msg@cundef
+ \fi}
+
+\def\blx@bblend{%
+ \ifcsdef{blx@refs@\the\c@refsection}%
+ {\begingroup
+ \let\do\blx@addxref
+ \dolistcsloop{blx@refs@\the\c@refsection}%
+ \endgroup
+ \global\csundef{blx@refs@\the\c@refsection}}
+ {}%
+ \iftoggle{blx@addset}
+ {\blx@addset
+ \global\togglefalse{blx@addset}}
+ {}}
+
+
+% set support
+
+% We'll generate 'fake sets' for sorting.
+% A fake set will be the copy of a normal set but with a crossref
+% to the first set member, that way it inherits sorting info.
+
+\def\blx@grabfirstcsvitem#1,#2\blx@grabfirstcsvitem@end{#1}
+
+\def\blx@btx@fakesetentry#1#2#3#4{%
+ \blx@nl
+ @set{#1,\blx@nl
+ \space\space fakeset = {#2},\blx@nl
+ \space\space entryset = {#3},\blx@nl
+ \space\space crossref = {#4},\blx@nl
+ }%
+}
+
+\def\blx@fakeset@prefix{blx@fakeset-}
+
+\protected\def\blx@writefakeset@oo#1#2{%
+ \begingroup
+ \edef\blx@tempa{\endgroup
+ \noexpand\blx@writefakeset
+ {\expandonce{#1}}
+ {\expandonce{#2}}}%
+ \blx@tempa
+}
+
+\protected\def\blx@writefakeset#1#2{%
+ \blx@auxwrite\blx@bcfout{}{%
+ \blx@btx@fakesetentry
+ {\blx@fakeset@prefix#1}
+ {#1}
+ {#2}
+ {\blx@grabfirstcsvitem#2,\blx@grabfirstcsvitem@end}}}
+
+\protected\def\blx@bbl@fakeset#1{%
+ \csxdef{blx@isfakeset@\the\c@refsection @\abx@field@@@entrykey}{%
+ \detokenize{#1}}%
+ \global\cslet{blx@getfakeset@\the\c@refsection @#1}\abx@field@@@entrykey
+}
+
+% we can't rely on \inset in the .bbl (which should be in the child
+% entry), so we produce setc manually from the @set parent
+% but the bibliography may not be in a nice order to grab setc
+% properly, so we need to save setc data in the .aux file
+\appto\blx@secinit{%
+ \cslet{blx@setclist@\the\c@refsection}\@empty
+ \cslet{blx@fakesetplist@\the\c@refsection}\@empty}
+
+\apptocmd{\blx@bbl@set@i}
+ {\ifcsundef{blx@isfakeset@\the\c@refsection @\abx@field@@@entrykey}
+ {\csxdef{blx@setc@\the\c@refsection @#1}{\abx@field@@@entrykey}%
+ \listcsxadd{blx@setclist@\the\c@refsection}{\detokenize{#1}}}
+ {}}
+ {}
+ {\blx@error
+ {Failed to patch '\string\blx@bbl@set@i'}
+ {Patching '\string\blx@bbl@set@i' failed for some reason.
+ \MessageBreak
+ Please report this bug}}
+
+% {<section>}{<set child>}{<set parent>}
+\protected\def\blx@aux@set@setc#1#2#3{%
+ \csxdef{blx@setc@#1@#2}{#3}}
+
+\protected\def\blx@aux@write@setc#1#2#3{%
+ \blx@auxwrite\blx@aux{}{\string\blx@aux@set@setc{#1}{#2}{#3}}}
+
+\def\blx@write@setc#1{%
+ \ifcsundef{blx@setc@\the\c@refsection @#1}
+ {}
+ {\blx@aux@write@setc{\the\c@refsection}{#1}
+ {\csuse{blx@setc@\the\c@refsection @#1}}}}
+
+\appto\blx@bblend{%
+ \forlistcsloop{\blx@write@setc}{blx@setclist@\the\c@refsection}}
+
+% blx@setonly doesn't exist here, since it is defined in \inset,
+% rely on the existence of setc instead.
+% We also make sure to skip the actual @set entries and display
+% the fake ones.
+\patchcmd{\blx@bbl@endentry}
+ {\nottoggle{blx@setonly}}
+ {\ifentrytype{set}
+ {\ifcsundef{blx@isfakeset@\the\c@refsection @\abx@field@@@entrykey}
+ {\blx@writefakeset@oo{\abx@field@@@entrykey}{\abx@field@@@entryset}%
+ \settoggle{blx@skipbib}{true}%
+ \settoggle{blx@skipbiblist}{true}%
+ \settoggle{blx@skiplab}{true}}
+ {\listcsxadd{blx@fakesetplist@\the\c@refsection}{%
+ \abx@field@@@entrykey}}}
+ {}%
+ \ifcsundef{blx@setc@\the\c@refsection @\abx@field@@@entrykey}}
+ {}
+ {\blx@error
+ {Failed to patch '\string\blx@bbl@endentry'}
+ {Patching '\string\blx@bbl@endentry' failed for some reason.
+ \MessageBreak
+ Please report this bug}}
+
+% cite the fake set for our current set
+% the \expandafter party essentially does
+% \blx@citation@entry{\blx@fakeset@prefix#1}{\blx@msg@cundef}
+% (just correctly \detokenize'd and all)
+\def\blx@citation@set#1#2{%
+ \blx@citation@entry{#1}{#2}%
+ \ifcsundef{blx@isfakeset@\the\c@refsection @#1}
+ {\begingroup
+ \expandafter\def\expandafter\blx@tempa\expandafter{%
+ \expandafter\detokenize\expandafter{\blx@fakeset@prefix#1}}%
+ \expandafter\expandafter\expandafter\blx@citation@entry
+ \expandafter\expandafter\expandafter{\blx@tempa}{\blx@msg@cundef}%
+ \endgroup}
+ {}%
+ \begingroup
+ \def\do##1{\blx@citation@entry{##1}\blx@msg@cundef}%
+ \expandafter\expandafter\expandafter\docsvlist
+ \expandafter\expandafter\expandafter{%
+ \csname blx@setp@\the\c@refsection @#1\endcsname}%
+ \endgroup}
+
+\def\blx@citation@inset#1#2{%
+ \blx@citation@entry{#1}{#2}%
+ \expandafter\expandafter\expandafter\blx@citation@inset@i
+ \expandafter\expandafter\expandafter{%
+ \csname blx@setc@\the\c@refsection @#1\endcsname}\blx@msg@cundef}
+
+\def\blx@citation@inset@i#1{%
+ \ifcsdef{blx@setp@\the\c@refsection @#1}
+ {\blx@citation@set{#1}}
+ {\blx@citation@entry{#1}}}
+
+\def\blx@appentrydatato#1#2{%
+ \ifdef#2
+ {\appto#1{%
+ \def\noexpand#2{\expandonce#2}}}
+ {}}
+
+% if we have a fakeset, load the real @set to get the right entrykey
+% if we have a real @set, load the fakeset for all entry data
+% but make sure that the entrykey fits
+% in any case copy over some label data from its first child
+\def\blx@getdata#1{%
+ \csuse{blx@data@\the\c@refsection @\blx@refcontext@context @#1}%
+ \ifcsundef{blx@isfakeset@\the\c@refsection @#1}
+ {}
+ {\csuse{blx@data@\the\c@refsection @\blx@refcontext@context
+ @\csuse{blx@isfakeset@\the\c@refsection @#1}}}%
+ \ifcsundef{blx@getfakeset@\the\c@refsection @#1}
+ {}
+ {\let\blx@real@abx@field@@@entrykey\abx@field@@@entrykey
+ \csuse{blx@data@\the\c@refsection @\blx@refcontext@context
+ @\csuse{blx@getfakeset@\the\c@refsection @#1}}%
+ \let\abx@field@@@entrykey\blx@real@abx@field@@@entrykey}%
+ \ifcsundef{blx@setp@\the\c@refsection @\abx@field@@@entrykey}
+ {}
+ {\begingroup
+ \expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\def
+ \expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\blx@tempa
+ \expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter{%
+ \expandafter\expandafter\expandafter\blx@grabfirstcsvitem
+ \csname blx@setp@\the\c@refsection
+ @\abx@field@@@entrykey\endcsname,\blx@grabfirstcsvitem@end}%
+ \let\blx@tempb\@empty
+ \blx@ifdata{\blx@tempa}
+ {\blx@getdata{\blx@tempa}%
+ \blx@appentrydatato\blx@tempb\abx@field@@@labelyear
+ \blx@appentrydatato\blx@tempb\abx@field@@@labelendyear
+ \blx@appentrydatato\blx@tempb\abx@field@@@labelmonth
+ \blx@appentrydatato\blx@tempb\abx@field@@@labelendmonth
+ \blx@appentrydatato\blx@tempb\abx@field@@@labelday
+ \blx@appentrydatato\blx@tempb\abx@field@@@labelendday
+ \blx@appentrydatato\blx@tempb\abx@field@@@labelprefix
+ \blx@appentrydatato\blx@tempb\abx@field@@@labelalpha
+ \blx@appentrydatato\blx@tempb\abx@field@@@extraalpha
+ \blx@appentrydatato\blx@tempb\abx@field@@@extradate}
+ {}%
+ \edef\blx@tempb{\endgroup\blx@tempb}%
+ \blx@tempb}%
+ \blx@adjustyears
+ \blx@getlabeldata
+ \blx@aliasfields
+ \blx@setcitecounter}
+
+
+\def\blx@bblend@redosetlabelwidth@i#1{%
+ \begingroup
+ \blx@ifdata{#1}
+ {\blx@getdata{#1}%
+ \nottoggle{blx@skiplab}
+ {\iftoggle{blx@labelnumber}
+ {\ifdefempty\abx@field@@@localnumber
+ {}
+ {\ifundef\abx@field@@@shorthand
+ {\blx@bbl@labelnumberwidth@numeric{}}
+ {\blx@bbl@labelnumberwidth@shorthand{}}}}
+ {}%
+ \iftoggle{blx@labelalpha}
+ {\blx@bbl@labelalpha}
+ {}%
+ \iftoggle{blx@labeltitle}
+ {\blx@bbl@labeltitle}
+ {}%
+ \iftoggle{blx@labeltitleyear}
+ {\blx@bbl@labeltitleyear}
+ {}%
+ \iftoggle{blx@labeldateparts}
+ {\blx@bbl@labeldate}
+ {}%
+ \blx@bbl@labelname}
+ {}}
+ {}%
+ \endgroup
+}
+
+\def\blx@bblend@redosetlabelwidth{%
+ \forlistcsloop{\blx@bblend@redosetlabelwidth@i}
+ {blx@fakesetplist@\the\c@refsection}}
+
+\appto\blx@bblend{\blx@bblend@redosetlabelwidth}
+
+% categories need the correct entry key for fake sets
+\def\blx@addtocategory#1#2{%
+ % If we are adding a set member to a category, make sure we also add the
+ % set parent if it is cited. If it is cited, we should be using the set
+ % parent in the category, not the set child member. blx@setc@... will
+ % only exist if the set parent is also cited as it is only defined when a
+ % member contains \inset which only happens when the set parent is cited.
+ \ifcsdef{blx@setc@\the\c@refsection @#2}
+ {\blx@auxwrite\@mainaux{}{\string\abx@aux@category{#1}{\csuse{blx@setc@\the\c@refsection @#2}}}%
+ \abx@aux@category{#1}{\csuse{blx@setc@\the\c@refsection @#2}}}
+ {}%
+ \ifcsundef{blx@getfakeset@\the\c@refsection @#2}
+ {}
+ {\blx@auxwrite\@mainaux{}{\string\abx@aux@category{#1}{\csuse{blx@getfakeset@\the\c@refsection @#2}}}%
+ \abx@aux@category{#1}{\csuse{blx@getfakeset@\the\c@refsection @#2}}}%
+ \blx@auxwrite\@mainaux{}{\string\abx@aux@category{#1}{#2}}%
+ \abx@aux@category{#1}{#2}}
+
+% dynamic entry sets
+
+\def\blx@btx@citeset#1#2{%
+ \blx@nl
+ @set{#1,\blx@nl
+ \space\space entryset = {#2},\blx@nl
+ }%
+}
+
+\protected\def\blx@setreq#1#2{%
+ \blx@auxwrite\blx@bcfout{}{\blx@btx@citeset{#1}{#2}}%
+ \blx@nocite@do{#1}}
+
+% xref and @set
+\def\blx@citation@i#1#2{%
+ \ifbool{citerequest}
+ {\ifcsdef{blx@setp@\the\c@refsection @#1}
+ {\blx@citation@set{#1}{#2}}
+ {\ifcsdef{blx@setc@\the\c@refsection @#1}
+ {\blx@citation@inset{#1}{#2}}
+ {\blx@citation@entry{#1}{#2}}}%
+ \ifcsdef{blx@refc@\the\c@refsection @#1}%
+ {\blx@citation@xref{#1}}
+ {}}
+ {}}
+
+% refcontexts are out, but we can try to save labelprefix
+
+% Luckily all refcontext names use \blx@refcontext@labelprefix, so if we
+% don't modify that macro, we don't actually change the refcontext.
+% Remember that \blx@refcontext@labelprefix contains a hash of the labelprefix
+% and that \blx@refcontext@labelprefix@real contains the value.
+% Effectively we always stay in \blx@sorting/global/global//global/global,
+% and additionally carry around the labelprefix value
+% in \blx@refcontext@labelprefix@real and pass it to the aux file.
+% There are differences to the result obtained with Biber,
+% but it should be good enough for very simple applications.
+\blx@kv@defkey{blx@refcontext}{labelprefix}{%
+ \xdef\blx@refcontext@labelprefix@real{#1}%
+ \iftoggle{blx@defernumbers}
+ {}%
+ {\iftoggle{blx@labelnumber}
+ {\blx@warning{%
+ Option 'labelprefix' requires global\MessageBreak
+ 'defernumbers=true'}}
+ {}}%
+ \ifundef{\blx@bibtexwarn@labelprefix@used}
+ {\blx@warning@noline{%
+ The option 'labelprefix' is limited\MessageBreak
+ when used with BibTeX.\MessageBreak
+ Consider using Biber instead}%
+ \global\let\blx@bibtexwarn@labelprefix@used\@empty}
+ {}}
+
+\def\blx@warn@bibtexrefcontext#1{%
+ \blx@warning{%
+ The refcontext option\MessageBreak
+ '#1'\MessageBreak
+ is not supported by the BibTeX backend.\MessageBreak
+ Consider switching to Biber instead.\MessageBreak
+ The option will be ignored}}
+
+\def\blx@bibtexrefcontext@disable#1{%
+ \blx@kv@defkey{blx@refcontext}{#1}{%
+ \blx@warn@bibtexrefcontext{#1}}}
+
+\forcsvlist{\blx@bibtexrefcontext@disable}{%
+ nametemplates,sorting,sortingnamekeytemplatename,uniquenametemplatename,
+ labelalphanametemplatename}
+
+\def\blx@assignrefcontext@disable#1{%
+ \blx@warning{%
+ BibTeX does not support refcontext assignments with\MessageBreak
+ '\string\assignrefcontext#1'.\MessageBreak
+ Consider using Biber instead.\MessageBreak
+ Ignoring the refconext assignment}}
+
+\def\blx@assignrefcontextkeyws[#1][#2]#3{%
+ \blx@assignrefcontext@disable{keyws}}
+\def\blx@assignrefcontextcats[#1][#2]#3{%
+ \blx@assignrefcontext@disable{cats}}
+\def\blx@assignrefcontextentries[#1][#2]#3{%
+ \blx@assignrefcontext@disable{entries}}
+
+\apptocmd{\blx@setdefaultrefcontext}
+ {\csxdef{blx@assignedlabelprefix@\the\c@refsection @#1}{%
+ \blx@refcontext@labelprefix@real}}
+ {}
+ {\blx@error
+ {Failed to patch '\string\blx@setdefaultrefcontext'}
+ {Patching '\string\blx@setdefaultrefcontext' failed for some reason.
+ \MessageBreak
+ Please report this bug}}
+
+\def\abx@aux@defaultlabelprefix#1#2#3{%
+ \csgdef{blx@assignedlabelprefix@#1@#2}{#3}}
+
+\apptocmd{\blx@bbl@entry}
+ {\ifcsundef{blx@assignedlabelprefix@\the\c@refsection @\thefield{entrykey}}
+ {}
+ {\blx@bbl@addfield{labelprefix}{%
+ \csuse{blx@assignedlabelprefix@\the\c@refsection
+ @\thefield{entrykey}}}{}{}}}
+ {}
+ {\blx@error
+ {Failed to patch '\string\blx@bbl@entry'}
+ {Patching '\string\blx@bbl@entry' failed for some reason.
+ \MessageBreak
+ Please report this bug}}
+
+\blx@AtEndDocument{%
+ % always add default labelprefix declarations to .aux
+ \iftoggle{blx@bbldone}
+ {\def\do#1{%
+ \begingroup
+ \def\do##1{%
+ \blx@auxwrite\@mainaux{}{\string\abx@aux@defaultlabelprefix{#1}{##1}{%
+ \csuse{blx@assignedlabelprefix@#1@##1}}}}%
+ \dolistcsloop{blx@defaultrefcontexts@#1}%
+ \endgroup}
+ \dolistloop\blx@allrefsections}
+ {}}
+
+% bibtex does not support multiscript
+\ResetDatamodelMultiscriptEntryfields
+
+\def\blx@bbl@titles{%
+ \ifundef\abx@field@@@indextitle
+ {\csgappto\blx@bbl@data{%
+ \let\abx@field@@@indextitle\abx@field@@@title}}
+ {}%
+ \ifundef\abx@field@@@indexsorttitle
+ {\csgappto\blx@bbl@data{%
+ \let\abx@field@@@indexsorttitle\abx@field@@@indextitle}}
+ {}}
+
+% Translate sorting schemes to BibTeX form
+\def\blx@sorting@none{0}
+\def\blx@sorting@nty{1}
+\def\blx@sorting@nyt{2}
+\def\blx@sorting@nyvt{3}
+\def\blx@sorting@anyt{12}
+\def\blx@sorting@anyvt{13}
+\def\blx@sorting@ynt{21}
+\def\blx@sorting@ydnt{22}
+\def\blx@sorting@debug{99}
+
+% Control file
+
+\edef\blx@ctrl{%
+ \blx@msg@bib
+ @Control\string{biblatex-control,\blx@nl
+ \space\space options = \string{%
+ \blx@bcfversion:%
+ \noexpand\iftoggle{blx@debug}{1}{0}:%
+ \noexpand\iftoggle{blx@bibtex8}{1}{0}:%
+ \noexpand\iftoggle{blx@sortcase}{1}{0}:%
+ \noexpand\iftoggle{blx@useprefix}{1}{0}:%
+ \noexpand\iftoggle{blx@useauthor}{1}{0}:%
+ \noexpand\iftoggle{blx@useeditor}{1}{0}:%
+ \noexpand\iftoggle{blx@usetranslator}{1}{0}:%
+ \noexpand\iftoggle{blx@labelalpha}{1}{0}:%
+ \noexpand\iftoggle{blx@labeldateparts}{1}{0}:%
+ \noexpand\iftoggle{blx@singletitle}{1}{0}:%
+ \noexpand\csuse{blx@sorting@\noexpand\blx@sorting}:%
+ \noexpand\blx@maxcitenames:%
+ \noexpand\blx@mincitenames:%
+ \noexpand\blx@maxsortnames:%
+ \noexpand\blx@minsortnames:%
+ \noexpand\iftoggle{blx@nohashothers}{1}{0}:%
+ \noexpand\iftoggle{blx@nosortothers}{1}{0}:%
+ \noexpand\blx@maxalphanames:%
+ \noexpand\blx@minalphanames:%
+ \noexpand\blx@maxline:%
+ \noexpand\detokenize\noexpand\expandafter{\noexpand\labelalphaothers}:%
+ \noexpand\detokenize\noexpand\expandafter{\noexpand\blx@sortalphaothers}:%
+ \noexpand\detokenize\noexpand\expandafter{\noexpand\blx@sorting}%
+ \string},\blx@nl
+ \string}%
+}
+
+\def\blx@ctrlwrite{%
+ \ifcsundef{blx@sorting@\blx@sorting}
+ {\blx@warning@noline{Sorting template '\blx@sorting'\MessageBreak
+ not available with BibTeX backend.\MessageBreak
+ Switch to Biber or select one of the default templates}}
+ {}%
+ \begingroup
+ \blx@safe@actives
+ \let\protect\string
+ \edef\blx@sortalphaothers{\sortalphaothers}%
+ \immediate\openout\blx@write\blx@ctrlfile\blxauxsuffix.bib\relax
+ \blx@auxwrite\blx@write{}{\blx@ctrl}%
+ \endgroup
+ \AfterEndDocument{\immediate\closeout\blx@write}}
+
+
+% {<string>}
+% This mustn't be robust as it's likely to be used mainly in tests and so
+% needs to be expandable
+\renewcommand*\rangelen[1]{%
+ \ifblank{#1}
+ {0}%
+ {\expandafter\blx@rangelen@range\romannumeral-`\q%
+ #1\bibrangedash\bibrangedash&%
+ }}
+
+\def\blx@rangelen@range#1\bibrangedash#2\bibrangedash#3&{%
+ \ifblank{#3}
+ {\blx@rangelen@hyphen#1--&}
+ {\blx@rangelen@check{#1}{#2}}%
+}
+\def\blx@rangelen@hyphen#1-#2-#3&{%
+ \ifblank{#3}
+ {1}% No range at all: assume one page
+ {\blx@rangelen@check{#1}{#2}}%
+}
+\def\blx@rangelen@check#1#2{%
+ \expandafter\blx@rangelen@check@aux
+ \number\numexpr
+ \blx@rangelen@check@int{#2}
+ -
+ \blx@rangelen@check@int{#1}
+ + 1
+ \relax
+ &\stop
+}
+\def\blx@rangelen@check@aux#1&#2\stop{%
+ \ifblank{#2}
+ {#1}
+ {-1}%
+}
+\def\blx@rangelen@check@int#1{%
+ \ifblank{#1}
+ {0&}
+ {%
+ \if\number\numexpr0#1-0#1\relax0
+ #1
+ \else
+ 0&
+ \fi
+ }%
+}
+
+
+% Disable some interfaces
+
+\renewrobustcmd*{\DeclareSortingScheme}[3][]{}
+\renewrobustcmd*{\DeclareExtradate}[1]{}
+
+\def\blx@checkencoding{}
+
+\AtBeginDocument{%
+ \blx@checkencoding
+ \if@filesw
+ \blx@auxinit\blx@bibfiles
+ \fi}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/blx-case-expl3-ms.sty b/macros/latex/contrib/biblatex-ms/latex/blx-case-expl3-ms.sty
new file mode 100644
index 0000000000..b49cd29dfb
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/blx-case-expl3-ms.sty
@@ -0,0 +1,289 @@
+\RequirePackage{expl3}[2020/04/06]
+\RequirePackage{xparse}
+\ProvidesExplPackage{blx-case-expl3-ms} {\abx@date} {\abx@version}
+ {expl3 case changing code for biblatex}
+
+
+% helper macros to work around babel \languagename catcode weirdness
+\cs_new:Npn \__biblatex_clist_put_detokenized_left:Nn #1 #2
+ {
+ \clist_put_left:No #1 { \detokenize{#2} }
+ }
+
+\cs_generate_variant:Nn \__biblatex_clist_put_detokenized_left:Nn { Ne }
+
+
+\prg_new_conditional:Npnn \__biblatex_clist_if_detokenized_in:Nn #1#2 { TF }
+ {
+ \clist_if_in:NoTF #1 { \detokenize{#2} }
+ {\prg_return_true:}
+ {\prg_return_false:}
+ }
+
+\prg_generate_conditional_variant:Nnn \__biblatex_clist_if_detokenized_in:Nn {Ne} {TF}
+
+
+
+% Map for babel/polyglossia names
+% to BCP-47-like l3text names.
+% We only need maps for l3text names that do something
+% as of 2020/04/06 those names are
+% az, de-alt, el, lt, nl, tr.
+% biblatex currently only supports dutch, greek and turkish
+% so we only map those.
+% de-alt is optional and still unusual, so *we* don't map it,
+% but a user could map it themselves.
+
+\prop_new:N \l__biblatex_babel_to_pseudobcp_prop
+
+\cs_generate_variant:Nn \msg_info:nnnnn { nnnxn }
+
+\cs_new_protected:Npn \biblatex_maplang_babel_to_pseudobcp:nn #1 #2
+ {
+ \prop_if_in:NnT \l__biblatex_babel_to_pseudobcp_prop {#1}
+ {
+ \msg_info:nnnxn { biblatex }
+ { overwrite-babel-to-pseudobcp-map }
+ {#1}
+ {\prop_item:Nn \l__biblatex_babel_to_pseudobcp_prop {#1}}
+ {#2}
+ }
+ \prop_put:Nnn \l__biblatex_babel_to_pseudobcp_prop {#1} {#2}
+ }
+
+\NewDocumentCommand \DeclareBabelToExplLanguageMapping {mm}
+ {
+ \biblatex_maplang_babel_to_pseudobcp:nn {#1} {#2}
+ }
+
+\cs_generate_variant:Nn \msg_info:nnnn { nnnx }
+
+\cs_new_protected:Npn \biblatex_unmaplang_babel_to_pseudobcp:n #1
+ {
+ \prop_if_in:NnT \l__biblatex_babel_to_pseudobcp_prop {#1}
+ {
+ \msg_info:nnnx { biblatex }
+ { remove-babel-to-pseudobcp-map }
+ {#1}
+ { \prop_item:Nn \l__biblatex_babel_to_pseudobcp_prop {#1} }
+ }
+ \prop_remove:Nn \l__biblatex_babel_to_pseudobcp_prop {#1}
+ }
+
+\NewDocumentCommand \UndeclareBabelToExplLanguageMapping {m}
+ {
+ \str_if_eq:nnTF {#1} {*}
+ { \prop_clear:N \l__biblatex_babel_to_pseudobcp_prop }
+ { \biblatex_unmaplang_babel_to_pseudobcp:n {#1} }
+ }
+
+% Don't put this into biblatex.sty, since
+% \DeclareBabelToExplLanguageMapping has no equivalent in the LaTeX2e
+% code.
+\DeclareBabelToExplLanguageMapping{dutch}{nl}
+\DeclareBabelToExplLanguageMapping{greek}{el}
+\DeclareBabelToExplLanguageMapping{turkish}{tr}
+
+% Our copy of \l_text_titlecase_check_letter_bool
+\bool_new:N \l_biblatex_titlecase_check_letter_bool
+% Just to be clear: unlike l3text our default is "false"
+\bool_set_false:N \l_biblatex_titlecase_check_letter_bool
+
+% Helper macro to avoid unnecessary repetition of the same structure
+% {<case [lowercase|uppercase|titlecase|titlecase_first]>}
+% {<babel language>}{<text>}
+% We use that \prop_item:Nn is empty if the item is not present
+% and that \text_...:nn becomes \text_...:n if the first argument
+% is empty.
+\cs_new_protected:Npn \__biblatex_text_makeconverter:nnn #1 #2 #3
+ {
+ \group_begin:
+ \bool_if_exist:NTF \l_text_titlecase_check_letter_bool
+ {
+ \bool_set_eq:NN \l_text_titlecase_check_letter_bool
+ \l_biblatex_titlecase_check_letter_bool
+ }
+ {
+ % should we raise an error or at least issue a warning here?
+ }
+ \use:c { text_#1:nn }
+ { \prop_item:Nn \l__biblatex_babel_to_pseudobcp_prop {#2} } {#3}
+ \group_end:
+ }
+
+
+\cs_new:Npn \biblatex_text_lowercase:nn #1 #2
+ {
+ \__biblatex_text_makeconverter:nnn {lowercase} {#1} {#2}
+ }
+
+\cs_generate_variant:Nn \biblatex_text_lowercase:nn { Vn }
+
+\cs_new:Npn \biblatex_text_lowercase:n #1
+ {
+ \biblatex_text_lowercase:Vn \blx@languagename {#1}
+ }
+
+\cs_set_eq:NN \blx@maketext@lowercase \biblatex_text_lowercase:n
+
+
+\cs_new:Npn \biblatex_text_uppercase:nn #1 #2
+ {
+ \__biblatex_text_makeconverter:nnn {uppercase} {#1} {#2}
+ }
+
+\cs_generate_variant:Nn \biblatex_text_uppercase:nn { Vn }
+
+\cs_new:Npn \biblatex_text_uppercase:n #1
+ {
+ \biblatex_text_uppercase:Vn \blx@languagename {#1}
+ }
+
+\cs_set_eq:NN \blx@maketext@uppercase \biblatex_text_uppercase:n
+
+
+\cs_new:Npn \biblatex_text_makecapital:nn #1 #2
+ {
+ \__biblatex_text_makeconverter:nnn {titlecase_first} {#1} {#2}
+ }
+
+\cs_generate_variant:Nn \biblatex_text_makecapital:nn { Vn }
+
+\cs_new:Npn \biblatex_text_makecapital:n #1
+ {
+ \biblatex_text_makecapital:Vn \blx@languagename {#1}
+ }
+
+\cs_set_eq:NN \blx@maketext@makecapital \biblatex_text_makecapital:n
+
+\NewDocumentCommand \MakeCapital {m}
+ {
+ \biblatex_text_makecapital:n {#1}
+ }
+
+
+
+% BibTeX to expl3 case protection code by Joseph Wright
+% https://github.com/plk/biblatex/issues/960#issuecomment-578435859
+% and Bruno Le Floch
+% https://github.com/moewew/biblatex/commit/c485f1b8079d56497b17343d7883b8fcd42f961a#r39225533
+\tl_put_right:Nn \l_text_expand_exclude_tl { \NoCaseChange }
+
+\tl_put_right:Nn \l_text_case_exclude_arg_tl { \NoCaseChange }
+
+\cs_new:Npn \biblatex_text_bibtex_to_expl:n #1
+ {
+ \__biblatex_text_bibtex_loop:w #1
+ { \q_recursion_tail } \q_recursion_stop
+ }
+
+\cs_new:Npn \__biblatex_text_bibtex_loop:w #1 #
+ {
+ \exp_not:n {#1}
+ \__biblatex_text_bibtex_group:n
+ }
+
+\cs_new:Npn \__biblatex_text_bibtex_group:n #1
+ {
+ \quark_if_recursion_tail_stop:n {#1}
+ {
+ \bool_lazy_and:nnTF
+ { \tl_if_head_is_N_type_p:n {#1} }
+ { \exp_after:wN \token_if_cs_p:N \tl_head:w #1 \q_stop }
+ { \exp_not:n {#1} }
+ { \exp_not:n { \NoCaseChange {#1} } }
+ }
+ \__biblatex_text_bibtex_loop:w
+ }
+
+\cs_new_eq:NN \biblatex_text_sentencecase_preprocess:n
+ \biblatex_text_bibtex_to_expl:n
+
+
+% By default we emulate BibTeX's brace case protection rules
+% but the user can turn that off for a more sane behaviour
+% that only relies on \NoCaseChange.
+\DeclareBiblatexOption{global,type,entry}[boolean]{bibtexcaseprotection}[true]{%
+ \str_case:nnF {#1}
+ {
+ { true }
+ {
+ \cs_set_eq:NN \biblatex_text_sentencecase_preprocess:n
+ \biblatex_text_bibtex_to_expl:n
+ }
+ { false }
+ {
+ \cs_set_eq:NN \biblatex_text_sentencecase_preprocess:n
+ \use:n
+ }
+ }
+ {
+ \msg_error:nnn { biblatex } { invalid-value-bibtexcaseprotection }
+ {#1}
+ }
+}
+
+
+\cs_new:Npn \biblatex_text_sentencecase:nn #1 #2
+ {
+ \__biblatex_text_makeconverter:nnn {titlecase} {#1} {#2}
+ }
+
+
+\cs_generate_variant:Nn \biblatex_text_sentencecase:nn { Vo, xo }
+
+% If \DeclareCaseLangs says we should apply sentence casing,
+% we go for it and pass the language along to the sentence casing macro.
+% Preprocess is either the BibTeX-to-expl3 brace translator
+% or \@firstofone (do nothing),
+% we need to expand once to get rid of the latter.
+\NewDocumentCommand \MakeSentenceCase {sm}
+ {
+ \IfBooleanTF {#1}
+ {
+ \__biblatex_clist_if_detokenized_in:NeTF
+ \l__biblatex_caselangs_clist { \blx@mksc@lang }
+ {
+ \biblatex_text_sentencecase:xo { \blx@mksc@lang }
+ { \biblatex_text_sentencecase_preprocess:n {#2} }
+ }
+ {#2}
+ }
+ {
+ \biblatex_text_sentencecase:Vo \blx@languagename
+ { \biblatex_text_sentencecase_preprocess:n {#2} }
+ }
+ }
+
+
+\clist_new:N \l__biblatex_caselangs_clist
+
+% {<language,language,...>}
+\NewDocumentCommand \DeclareCaseLangs {sm}
+ {
+ \IfBooleanF {#1}
+ { \clist_clear:N \l__biblatex_caselangs_clist }
+ \__biblatex_clist_put_detokenized_left:Ne
+ \l__biblatex_caselangs_clist {#2}
+ }
+
+% \DeclareCaseLangs invocation is in biblatex.sty
+
+\NewDocumentCommand \ifcaselang {O{\blx@languagename}}
+ {
+ \__biblatex_clist_if_detokenized_in:NeTF \l__biblatex_caselangs_clist {#1}
+ }
+
+
+\msg_new:nnnn { biblatex } { invalid-value-bibtexcaseprotection }
+ { Invalid~value~'#1'~for~option~'bibtexcaseprotection'. }
+ { Valid~values~for~'bibtexcaseprotection'~are~'true'~and~'false'. }
+
+\msg_new:nnn { biblatex } { remove-babel-to-pseudobcp-map }
+ { Removing~babel->l3text~language~mapping~for~'#1'~to~'#2'. }
+
+\msg_new:nnn { biblatex } { overwrite-babel-to-pseudobcp-map }
+ { Overwriting~babel->l3text~language~mapping~for~'#1'~from~
+ '#2'~to~'#3'. }
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/blx-case-latex2e-ms.sty b/macros/latex/contrib/biblatex-ms/latex/blx-case-latex2e-ms.sty
new file mode 100644
index 0000000000..c53b2aa736
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/blx-case-latex2e-ms.sty
@@ -0,0 +1,326 @@
+\ProvidesPackage{blx-case-latex2e-ms}
+[\abx@cptid]
+
+% auxiliary macros
+% babel's \languagename has weird catcodes,
+% so we \detokenize our language names
+
+\def\blx@listgadd@switched#1#2{\listgadd{#2}{#1}}
+
+\ifundef\expanded
+ {\protected\def\blx@deifinlist#1{%
+ \begingroup
+ \edef\blx@tempa{\endgroup
+ \blx@deifinlist@i{#1}}%
+ \blx@tempa}%
+ \protected\def\blx@deifinlist@i#1{%
+ \expandafter\ifinlist\expandafter{\detokenize{#1}}}%
+ %
+ \protected\def\blx@listdxadd@switched#1{%
+ \begingroup
+ \edef\blx@tempa{\endgroup
+ \blx@listdxadd@switched@i{#1}}%
+ \blx@tempa}%
+ \protected\def\blx@listdxadd@switched@i#1{%
+ \expandafter\blx@listgadd@switched\expandafter{\detokenize{#1}}}}
+ {\def\blx@deifinlist#1{%
+ \expandafter\expandafter\expandafter\ifinlist
+ \expandafter\expandafter\expandafter{%
+ \expandafter\detokenize\expandafter{\expanded{#1}}}}%
+ %
+ \def\blx@listdxadd@switched#1{%
+ \expandafter\expandafter\expandafter\blx@listgadd@switched
+ \expandafter\expandafter\expandafter{%
+ \expandafter\detokenize\expandafter{\expanded{#1}}}}}
+
+\def\blx@listdxadd#1#2{\blx@listdxadd@switched{#2}{#1}}
+
+
+% we don't have l3text's (pseudo)BCP47 language codes here
+\newrobustcmd*{\DeclareBabelToExplLanguageMapping}[2]{%
+ \blx@warning{The command '\string\DeclareBabelToExplLanguageMapping'%
+ \MessageBreak
+ is only available with the expl3 case changing\MessageBreak
+ implementation ('casechanger=expl3').\MessageBreak
+ Ignoring}}
+
+\newrobustcmd*{\UndeclareBabelToExplLanguageMapping}[1]{%
+ \blx@warning{The command '\string\UndeclareBabelToExplLanguageMapping'%
+ \MessageBreak
+ is only available with the expl3 case changing\MessageBreak
+ implementation ('casechanger=expl3').\MessageBreak
+ Ignoring}}
+
+\def\blx@maketext@lowercase{\MakeLowercase}
+
+\def\blx@maketext@uppercase{\MakeUppercase}
+
+\def\blx@maketext@makecapital{\MakeCapital}
+
+% {<text>}
+\newrobustcmd{\MakeCapital}[1]{%
+ \begingroup
+ \blx@mkcp@init
+ \protected@edef\blx@tempa{#1}%
+ \expandafter\blx@mkcp@parse\blx@tempa\@empty\blx@mkcp@end}
+
+\def\blx@mkcp@init{%
+ \def\blx@mkcp@iec{\noexpand\blx@mkcp@iec\noexpand}%
+ \def\blx@mkcp@bbl{\noexpand\blx@mkcp@bbl\noexpand}%
+ \def\blx@mkcp@sgl{\noexpand\blx@mkcp@sgl\noexpand}%
+ \def\blx@mkcp@dbl{\noexpand\blx@mkcp@dbl\noexpand}%
+ \def\do##1{\def##1{\blx@mkcp@sgl##1}}\abx@dosingleaccents
+ \def\do##1{\def##1{\blx@mkcp@dbl##1}}\abx@dodoubleaccents
+ \def\IeC##1{\blx@mkcp@iec\IeC{##1}}%
+ \def\@tabacckludge##1{%
+ \expandafter\blx@mkcp@sgl\csname\string##1\endcsname}}
+
+\begingroup
+\catcode`\"=\active
+\gappto\blx@mkcp@init{%
+ \ifnum\catcode`\"=\active
+ \def"#1{\blx@mkcp@bbl"\noexpand#1}%
+ \fi}
+\endgroup
+
+\def\blx@mkcp@parse{%
+ \futurelet\@let@token\blx@mkcp@eval}
+
+\long\def\blx@mkcp@eval{%
+ \ifx\@let@token\blx@mkcp@iec
+ \expandafter\blx@mkcp@getiec
+ \fi
+ \ifx\@let@token\blx@mkcp@bbl
+ \expandafter\blx@mkcp@gettwo
+ \fi
+ \ifx\@let@token\blx@mkcp@sgl
+ \expandafter\blx@mkcp@gettwo
+ \fi
+ \ifx\@let@token\blx@mkcp@dbl
+ \expandafter\blx@mkcp@getthree
+ \fi
+ \blx@mkcp@case}
+
+\def\blx@mkcp@getiec#1\blx@mkcp@case#2#3#4{%
+ \blx@mkcp@case{#2#3{#4}}}
+
+\def\blx@mkcp@gettwo#1\blx@mkcp@case#2#3#4{%
+ \blx@mkcp@case{#2#3#4}}
+
+\def\blx@mkcp@getthree#1\blx@mkcp@case#2#3#4#5{%
+ \blx@mkcp@case{#2#3#4#5}}
+
+\long\def\blx@mkcp@case#1{%
+ \begingroup
+ \def\i{I}\def\j{J}%
+ \def\do##1##2{\let##1##2\do}%
+ \expandafter\do\@uclclist\relax{\relax\@gobble}%
+ \uppercase{\protected@edef\blx@tempa{\endgroup\blx@mkcp@end#1}}%
+ \blx@tempa}
+
+\protected\long\def\blx@mkcp@end#1\blx@mkcp@end{%
+ \let\blx@mkcp@iec\noexpand
+ \let\blx@mkcp@bbl\noexpand
+ \let\blx@mkcp@sgl\noexpand
+ \let\blx@mkcp@dbl\noexpand
+ \protected@edef\blx@tempa{\endgroup#1}%
+ \blx@tempa}
+
+
+\DeclareBiblatexOption{global,type,entry}[boolean]{bibtexcaseprotection}[true]{%
+ \ifstrequal{#1}{true}
+ {}
+ {\ifstrequal{#1}{false}
+ {\blx@warning
+ {The option 'bibtexcaseprotection=false' is only\MessageBreak
+ available with expl3}}
+ {\blx@err@invopt{bibtexcaseprotection=#1}
+ {Valid values for 'bibtexcaseprotection' are 'true' and
+ 'false'\MessageBreak
+ (but 'false' only works with expl3 code)}}}}
+
+% {<text>}
+\newrobustcmd*{\MakeSentenceCase}{%
+ \@ifstar\blx@mksc@i\blx@mksc@ii}
+
+
+% \blx@cmksc@lang is defined in biblatex.sty
+% it expands to the applicable language for the title field
+\def\blx@mksc@i{%
+ \blx@deifinlist\blx@mksc@lang\blx@cmksc@lang
+ {\blx@mksc@ii}
+ {\@firstofone}}
+
+\long\def\blx@mksc@ii#1{%
+ \begingroup
+ \let\blx@tempa\@empty
+ \let\blx@tempb\@empty
+ \blx@mksc@init
+ \protected@edef\@tempa{#1}%
+ \expandafter\blx@mksc@parse\@tempa\blx@mksc@end}
+
+\def\blx@mksc@init{%
+ \blx@mkcp@init
+ \def\blx@mkcp@nil{\noexpand\blx@mkcp@nil\noexpand}%
+ \def\i{\blx@mkcp@nil\i}\def\j{\blx@mkcp@nil\j}%
+ \def\do##1{%
+ \ifx##1\relax
+ \else
+ \def##1{\blx@mkcp@nil##1}%
+ \expandafter\do
+ \fi}%
+ \expandafter\do\@uclclist\relax}
+
+\def\blx@mksc@parse{%
+ \futurelet\@let@token\blx@mksc@eval}
+
+\let\blx@asttoken=*
+
+\def\blx@mksc@eval{%
+ \ifx\@let@token\blx@mksc@end
+ \expandafter\blx@mksc@end
+ \fi
+ \ifx\@let@token\bgroup
+ \expandafter\blx@mksc@group
+ \fi
+ \ifx\@let@token\@sptoken
+ \expandafter\blx@mksc@space
+ \fi
+ \ifx\@let@token\blx@mkcp@nil
+ \expandafter\blx@mksc@getone
+ \fi
+ \ifx\@let@token\blx@mkcp@iec
+ \expandafter\blx@mksc@getiec
+ \fi
+ \ifx\@let@token\blx@mkcp@bbl
+ \expandafter\blx@mksc@gettwo
+ \fi
+ \ifx\@let@token\blx@mkcp@sgl
+ \expandafter\blx@mksc@gettwo
+ \fi
+ \ifx\@let@token\blx@mkcp@dbl
+ \expandafter\blx@mksc@getthree
+ \fi
+ \ifx\@let@token\blx@asttoken
+ \expandafter\blx@mksc@cs
+ \fi
+ \if\noexpand\@let@token\relax
+ \expandafter\blx@mksc@cs
+ \fi
+ \blx@mksc@other}
+
+\def\blx@mksc@end#1\blx@mksc@end{%
+ \blx@mksc@eject
+ \let\blx@mkcp@nil\noexpand
+ \let\blx@mkcp@iec\noexpand
+ \let\blx@mkcp@bbl\noexpand
+ \let\blx@mkcp@sgl\noexpand
+ \let\blx@mkcp@dbl\noexpand
+ \let\MakeUppercase\relax
+ \let\MakeLowercase\relax
+ \protected@edef\blx@tempa{\endgroup\blx@tempa}%
+ \blx@tempa}
+
+\long\def\blx@mksc@group#1\blx@mksc@other#2{%
+ \futurelet\@let@token\blx@mksc@ingroup#2&{#2}%
+ \blx@mksc@endhead
+ \blx@mksc@parse}
+
+\long\def\blx@mksc@ingroup#1&#2{%
+ \if\noexpand\@let@token\relax
+ \ifx\@let@token\blx@mkcp@sgl
+ \blx@mksc@nocase{{#2}}%
+ \else
+ \ifx\@let@token\blx@mkcp@dbl
+ \blx@mksc@nocase{{#2}}%
+ \else
+ \blx@mksc@locase{{#2}}%
+ \fi
+ \fi
+ \else
+ \blx@mksc@nocase{{#2}}%
+ \fi}
+
+\def\blx@mksc@space{\def\blx@mksc@space##1\blx@mksc@other}
+\csuse{blx@mksc@space} {%
+ \blx@mksc@anycase{ }%
+ \blx@mksc@endhead
+ \blx@mksc@parse}
+
+\long\def\blx@mksc@cs#1\blx@mksc@other#2{%
+ \ifcat\noexpand~\noexpand#2%
+ \blx@mksc@locase{#2}%
+ \else
+ \blx@mksc@nocase{#2}%
+ \fi
+ \blx@mksc@endhead
+ \blx@mksc@parse}
+
+\def\blx@mksc@getiec#1\blx@mksc@other#2#3#4{%
+ \blx@mksc@other{#2#3{#4}}}
+
+\def\blx@mksc@getone#1\blx@mksc@other#2#3{%
+ \blx@mksc@other{#2#3}}
+
+\def\blx@mksc@gettwo#1\blx@mksc@other#2#3#4{%
+ \blx@mksc@other{#2#3#4}}
+
+\def\blx@mksc@getthree#1\blx@mksc@other#2#3#4#5{%
+ \blx@mksc@other{#2#3#4#5}}
+
+\long\def\blx@mksc@other#1{%
+ \blx@mksc@locase{#1}%
+ \blx@mksc@endhead
+ \blx@mksc@parse}
+
+\def\blx@mksc@locase{%
+ \appto\blx@tempb}
+
+\def\blx@mksc@nocase{%
+ \blx@mksc@eject
+ \appto\blx@tempa}
+
+\def\blx@mksc@anycase{%
+ \ifx\blx@tempb\@empty
+ \expandafter\appto
+ \expandafter\blx@tempa
+ \else
+ \expandafter\appto
+ \expandafter\blx@tempb
+ \fi}
+
+\def\blx@mksc@eject{%
+ \ifx\blx@tempb\@empty
+ \else
+ \eappto\blx@tempa{\noexpand\MakeLowercase{\expandonce\blx@tempb}}%
+ \let\blx@tempb\@empty
+ \fi}
+
+\def\blx@mksc@endhead{%
+ \ifx\blx@tempb\@empty
+ \else
+ \eappto\blx@tempa{\noexpand\MakeCapital{\expandonce\blx@tempb}}%
+ \let\blx@tempb\@empty
+ \fi
+ \let\blx@mksc@endhead\relax}
+
+
+
+% {<language,language,...>}
+\newrobustcmd*{\DeclareCaseLangs}{%
+ \@ifstar
+ {\blx@defcaselangs}
+ {\global\let\blx@cmksc@lang\@empty
+ \blx@defcaselangs}}
+
+\def\blx@defcaselangs#1{%
+ \ifblank{#1}
+ {}
+ {\forcsvlist{\blx@listdxadd\blx@cmksc@lang}{#1}}}
+
+% \DeclareCaseLangs invocation is in biblatex.sty
+
+\newrobustcmd*{\ifcaselang}[1][\blx@languagename]{%
+ \blx@deifinlist{#1}\blx@cmksc@lang}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/blx-compat-ms.def b/macros/latex/contrib/biblatex-ms/latex/blx-compat-ms.def
new file mode 100644
index 0000000000..387782a546
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/blx-compat-ms.def
@@ -0,0 +1,373 @@
+\ProvidesFile{blx-compat-ms.def}
+[\abx@cptid]
+
+% LaTeX
+
+\AtBeginDocument{%
+ \renewrobustcmd*{\bibliography}[1]{%
+ \blx@error
+ {'\string\bibliography' invalid in 'document' env}
+ {Use '\string\addbibresource' instead.\MessageBreak
+ I'm ignoring this command}}}
+
+\renewrobustcmd*{\bibliographystyle}[1]{%
+ \blx@error
+ {'\string\bibliographystyle' invalid for 'biblatex'}
+ {Use the package option 'style' instead.\MessageBreak
+ I'm ignoring this command}}
+
+% standard classes
+
+\DeclareOption{openbib}{\ExecuteBibliographyOptions{block=par}}
+
+% biblatex <0.9b
+
+\DeclareBibliographyOption[boolean]{defernums}[true]{%
+ \ExecuteBibliographyOptions{defernumbers=#1}}
+
+\providecommand*{\lbx@fromlang}{%
+ \iffieldundef{origlanguage}
+ {\unspace}
+ {\bibstring{from\thefield{origlanguage}}}}
+
+% memoir
+
+\ifdef\ifnobibintoc
+ {\newcommand*{\ifmemoirbibintoc}{\notbool{nobibintoc}}}
+ {\newcommand{\ifmemoirbibintoc}[2]{#2}}
+
+% KOMA-Script
+
+\newcommand{\ifkomabibtotoc}[2]{#2}
+\newcommand{\ifkomabibtotocnumbered}[2]{#2}
+
+\ifdef\ds@bibtotoc
+ {% xkeyval breaks inheritance of key=value class options
+ \ifdef\XKV@classoptionslist
+ {\let\blx@classoptionslist\@classoptionslist
+ \let\@classoptionslist\XKV@classoptionslist
+ \AtEndOfPackage{\let\@classoptionslist\blx@classoptionslist}}
+ {}%
+ \DeclareOption{bibtotoc}{%
+ \let\ifkomabibtotoc=\@firstoftwo
+ \let\ifkomabibtotocnumbered=\@secondoftwo}%
+ \DeclareOption{bibtotocnumbered}{%
+ \let\ifkomabibtotoc=\@firstoftwo
+ \let\ifkomabibtotocnumbered=\@firstoftwo}%
+ \DeclareOption{bibliography=notoc}{%
+ \let\ifkomabibtotoc=\@secondoftwo
+ \let\ifkomabibtotocnumbered=\@secondoftwo}%
+ \DeclareOption{bibliography=nottotoc}{%
+ \let\ifkomabibtotoc=\@secondoftwo
+ \let\ifkomabibtotocnumbered=\@secondoftwo}%
+ \DeclareOption{bibliography=plainheading}{%
+ \let\ifkomabibtotoc=\@secondoftwo
+ \let\ifkomabibtotocnumbered=\@secondoftwo}%
+ \DeclareOption{bibliography=totoc}{%
+ \let\ifkomabibtotoc=\@firstoftwo
+ \let\ifkomabibtotocnumbered=\@secondoftwo}%
+ \DeclareOption{bibliography=toc}{%
+ \let\ifkomabibtotoc=\@firstoftwo
+ \let\ifkomabibtotocnumbered=\@secondoftwo}%
+ \DeclareOption{bibliography=notnumbered}{%
+ \let\ifkomabibtotoc=\@firstoftwo
+ \let\ifkomabibtotocnumbered=\@secondoftwo}%
+ \DeclareOption{bibliography=numbered}{%
+ \let\ifkomabibtotoc=\@firstoftwo
+ \let\ifkomabibtotocnumbered=\@firstoftwo}%
+ \DeclareOption{bibliography=totocnumbered}{%
+ \let\ifkomabibtotoc=\@firstoftwo
+ \let\ifkomabibtotocnumbered=\@firstoftwo}%
+ \DeclareOption{bibliography=tocnumbered}{%
+ \let\ifkomabibtotoc=\@firstoftwo
+ \let\ifkomabibtotocnumbered=\@firstoftwo}%
+ \DeclareOption{bibliography=numberedtotoc}{%
+ \let\ifkomabibtotoc=\@firstoftwo
+ \let\ifkomabibtotocnumbered=\@firstoftwo}%
+ \DeclareOption{bibliography=numberedtoc}{%
+ \let\ifkomabibtotoc=\@firstoftwo
+ \let\ifkomabibtotocnumbered=\@firstoftwo}%
+ \DeclareOption{bibliography=oldstyle}{%
+ \ExecuteBibliographyOptions{block=space}}%
+ \DeclareOption{bibliography=openstyle}{%
+ \ExecuteBibliographyOptions{block=par}}%
+ \DeclareOption{toc=bib}{%
+ \let\ifkomabibtotoc=\@firstoftwo
+ \let\ifkomabibtotocnumbered=\@secondoftwo}%
+ \DeclareOption{toc=bibliography}{%
+ \let\ifkomabibtotoc=\@firstoftwo
+ \let\ifkomabibtotocnumbered=\@secondoftwo}%
+ \DeclareOption{toc=nobib}{%
+ \let\ifkomabibtotoc=\@secondoftwo
+ \let\ifkomabibtotocnumbered=\@secondoftwo}%
+ \DeclareOption{toc=nobibliography}{%
+ \let\ifkomabibtotoc=\@secondoftwo
+ \let\ifkomabibtotocnumbered=\@secondoftwo}%
+ \DeclareOption{toc=bibnumbered}{%
+ \let\ifkomabibtotoc=\@firstoftwo
+ \let\ifkomabibtotocnumbered=\@firstoftwo}%
+ \DeclareOption{toc=numberedbib}{%
+ \let\ifkomabibtotoc=\@firstoftwo
+ \let\ifkomabibtotocnumbered=\@firstoftwo}%
+ \DeclareOption{toc=bibliographynumbered}{%
+ \let\ifkomabibtotoc=\@firstoftwo
+ \let\ifkomabibtotocnumbered=\@firstoftwo}%
+ \DeclareOption{toc=numberedbibliography}{%
+ \let\ifkomabibtotoc=\@firstoftwo
+ \let\ifkomabibtotocnumbered=\@firstoftwo}}
+ {}
+
+% biblatex <1.6
+
+\blx@kv@defkey{blx@bib}{maxnames}{\blx@warn@depropt{maxnames}}
+\blx@kv@defkey{blx@los}{maxnames}{\blx@warn@depropt{maxnames}}
+\blx@kv@defkey{blx@bbs}{maxnames}{\blx@warn@depropt{maxnames}}
+\blx@kv@defkey{blx@bbg}{maxnames}{\blx@warn@depropt{maxnames}}
+\blx@kv@defkey{blx@bbc}{maxnames}{\blx@warn@depropt{maxnames}}
+
+\blx@kv@defkey{blx@bib}{minnames}{\blx@warn@depropt{minnames}}
+\blx@kv@defkey{blx@los}{minnames}{\blx@warn@depropt{minnames}}
+\blx@kv@defkey{blx@bbs}{minnames}{\blx@warn@depropt{minnames}}
+\blx@kv@defkey{blx@bbg}{minnames}{\blx@warn@depropt{minnames}}
+\blx@kv@defkey{blx@bbc}{minnames}{\blx@warn@depropt{minnames}}
+
+\blx@kv@defkey{blx@bib}{maxitems}{\blx@warn@depropt{maxitems}}
+\blx@kv@defkey{blx@los}{maxitems}{\blx@warn@depropt{maxitems}}
+\blx@kv@defkey{blx@bbs}{maxitems}{\blx@warn@depropt{maxitems}}
+\blx@kv@defkey{blx@bbg}{maxitems}{\blx@warn@depropt{maxitems}}
+\blx@kv@defkey{blx@bbc}{maxitems}{\blx@warn@depropt{maxitems}}
+
+\blx@kv@defkey{blx@bib}{minitems}{\blx@warn@depropt{minitems}}
+\blx@kv@defkey{blx@los}{minitems}{\blx@warn@depropt{minitems}}
+\blx@kv@defkey{blx@bbs}{minitems}{\blx@warn@depropt{minitems}}
+\blx@kv@defkey{blx@bbg}{minitems}{\blx@warn@depropt{minitems}}
+\blx@kv@defkey{blx@bbc}{minitems}{\blx@warn@depropt{minitems}}
+
+% Legacy alias for \printshorthands
+\def\printshorthands{%
+ \@ifnextchar[%]
+ {\blx@printshorthands}
+ {\blx@printshorthands[]}}
+
+\def\blx@printshorthands[#1]{\printbiblist[{#1}]{shorthand}}
+
+% Legacy aliases
+\def\AtBeginShorthands{\AtBeginBiblist{shorthand}}
+\def\AtEveryLositem{\AtEveryBiblistitem{shorthand}}
+\@onlypreamble\AtBeginShorthands
+\@onlypreamble\AtEveryLositem
+
+\let\frangelen\rangelen % Legacy name for \rangelen
+
+\DeclareBibliographyOption[string]{sortlos}{%
+ \blx@warning@noline{%
+ 'sortlos' option is deprecated.\MessageBreak
+ Please use 'sorting' option to '\string\printbiblist'}}
+
+\blx@kv@defkey{blx@bib1}{sorting}{%
+ \blx@warning@noline{%
+ 'sorting' option to '\string\printbibliography' is no longer supported.\MessageBreak
+ Please use 'sorting' option to '\string\newrefcontext'}}
+
+\blx@kv@defkey{blx@biblist1}{sorting}{%
+ \blx@warning@noline{%
+ 'sorting' option to '\string\printbiblist' is no longer supported.\MessageBreak
+ Please use 'sorting' option to '\string\newrefcontext'}}
+
+\blx@kv@defkey{blx@bib2}{prefixnumbers}{%
+ \blx@warning@noline{%
+ 'prefixnumbers' option to '\string\printbibliography' is no longer supported.\MessageBreak
+ Please use 'labelprefix' option to '\string\newrefcontext'}}
+
+
+\DeclareBibliographyOption[string]{babel}{%
+ \blx@warning@noline{%
+ 'babel' option is deprecated.\MessageBreak
+ Please use 'autolang' instead}%
+ \blx@autolang@i{#1}}
+
+\DeclareTypeOption[boolean]{skiplos}{%
+ \blx@warning@noline{%
+ skiplos option is deprecated.\MessageBreak
+ Please use 'skipbiblist' instead}%
+ \settoggle{blx@skipbiblist}{#1}}
+\DeclareEntryOption[boolean]{skiplos}{%
+ \blx@warning@noline{%
+ skiplos option is deprecated.\MessageBreak
+ Please use 'skipbiblist' instead}%
+ \settoggle{blx@skipbiblist}{#1}}
+
+% Legacy options moved to \namepart in \DeclareLabelalphaNameTemplate
+\blx@kv@defkey{blx@latem@field}{compound}{% deprecated
+ \blx@warning@noline{%
+ Ignored 'compound' option to '\string\field' in '\string\DeclareLabelalphaNameTemplate'\MessageBreak
+ This is now the 'compound' option of '\string\namepart\space' in\MessageBreak
+ '\string\DeclareLabelalphaNameTemplate'}}
+\blx@kv@defkey{blx@latem@field}{pcompound}{% deprecated
+ \blx@warning@noline{%
+ Ignored 'pcompound' option to '\string\field' in '\string\DeclareLabelalphaNameTemplate'\MessageBreak
+ This is now the 'compound' option of '\string\namepart' in\MessageBreak
+ '\string\DeclareLabelalphaNameTemplate'}}
+\blx@kv@defkey{blx@latem@field}{pstrwidth}{% deprecated
+ \blx@warning@noline{%
+ Ignored 'pstrwidth' option to '\string\field' in '\string\DeclareLabelalphaNameTemplate'\MessageBreak
+ This is now the 'strwidth' option of '\string\namepart' in\MessageBreak
+ '\string\DeclareLabelalphaNameTemplate'}}
+
+%LEGACY(<3.3) legacy name for \ifgiveninits which is autogenerated now
+\def\iffirstinits{
+ \blx@warning@noline{%
+ '\string\iffirstinits' is deprecated.\MessageBreak
+ Please use '\string\ifgiveninits'}%
+ \iftoggle{abx@bool@giveninits}}
+
+% Legacy for giveninits
+\DeclareBibliographyOption[boolean]{firstinits}[true]{%
+ \blx@warning@noline{%
+ 'firstinits' option is deprecated.\MessageBreak
+ Please use 'giveninits' instead}%
+ \settoggle{abx@bool@giveninits}{#1}}
+
+% Legacy for sortfirstinits/sortgiveninits
+\DeclareBibliographyOption[boolean]{sortfirstinits}[true]{%
+ \blx@warning@noline{%
+ 'sortfirstinits' option is deprecated.\MessageBreak
+ Please use 'inits' option to '\string\namepart\space'\MessageBreak
+ in '\string\DeclareSortingNamekeyTemplate'}}
+\DeclareBibliographyOption[boolean]{sortgiveninits}{%
+ \blx@warning@noline{%
+ 'sortgiveninits' option is deprecated.\MessageBreak
+ Please use 'inits' option to '\string\namepart'\MessageBreak
+ in '\string\DeclareSortingNamekeyTemplate' instead}}
+
+\blx@kv@defkey{blx@refcontext}{prefixnumbers}{%LEGACY(<3.3)
+ \blx@warning@noline{%
+ prefixnumbers option to '\string\newrefcontext' has been renamed.\MessageBreak
+ Please use 'labelprefix' option instead}%
+ \blx@kv@setkeys{blx@refcontext}{labelprefix=#1}}
+
+% biblatex < 3.4
+\blx@kv@defkey{blx@bib1}{prefixnumbers}{}%LEGACY(<3.4) legacy name for labelprefix
+\DeprecateFieldWithReplacement{prefixnumber}{labelprefix}
+\DeclareFieldAlias{prefixnumber}{labelprefix}
+
+% biblatex < 3.5
+\DeclareBibliographyOption[string]{datelabel}{%
+ \blx@warning@noline{%
+ 'datelabel' option is deprecated.\MessageBreak
+ Please use 'labeldate' instead}%
+ \blx@kv@setkeys{blx@opt@pre}{labeldate=#1}}
+
+\DeclareBibliographyOption[boolean]{labelyear}[true]{%
+ \blx@warning@noline{%
+ 'labelyear' option is deprecated.\MessageBreak
+ Please use 'labeldateparts' instead}%
+ \settoggle{blx@labeldateparts}{#1}}
+\DeclareTypeOption[boolean]{labelyear}[true]{%
+ \blx@warning@noline{%
+ 'labelyear' option is deprecated.\MessageBreak
+ Please use 'labeldateparts' instead}%
+ \settoggle{blx@labeldateparts}{#1}}
+
+\protected\def\mkdatezeros{%
+ \blx@warning@noline{%
+ '\string\mkdatezeros' is deprecated.\MessageBreak
+ Please use '\string\mkyearzeros', '\string\mkmonthzeros' or\MessageBreak
+ '\string\mkdayzeros' as appropriate. \MessageBreak
+ Falling back to '\string\mkmonthzeros'}%
+ \mkmonthzeros}
+
+\protected\def\printdatelabel{%
+ \blx@warning@noline{%
+ '\string\printdatelabel' is deprecated.\MessageBreak
+ Please use '\string\printlabeldate'}%
+ \blx@imc@printlabeldate}
+
+\protected\def\printdatelabelextra{%
+ \blx@warning@noline{%
+ '\string\printdatelabelextra' is deprecated.\MessageBreak
+ Please use '\string\printlabeldateextra'}%
+ \blx@imc@printlabeldateextra}
+
+\newrobustcmd*{\DeclareLabelyear}[2][]{%
+ \blx@warning@noline{%
+ 'DeclareLabelyear' is deprecated.\MessageBreak
+ Please use 'DeclareLabeldate'}}
+
+\csdef{mkdaterangeiso8601}{%
+ \blx@warning@noline{%
+ '\string\mkdaterangeiso8601' is deprecated.\MessageBreak
+ Please use '\string\mkdaterangeiso'}%
+ \mkdaterangeiso}
+
+\csdef{mkdaterangeiso8601extra}{%
+ \blx@warning@noline{%
+ '\string\mkdaterangeiso8601extra' is deprecated.\MessageBreak
+ Please use '\string\mkdaterangeisoextra'}%
+ \mkdaterangeisoextra}
+
+% biblatex < 3.8
+\blx@kv@defkey{blx@refcontext}{sortingnamekeyscheme}{%
+ \blx@warning@noline{'sortingnamekeyscheme' is deprecated.\MessageBreak
+ Please use 'sortingnamekeytemplatename' instead}%
+ \gdef\blx@refcontext@sortingnamekeytemplatename{#1}}
+
+\blx@kv@defkey{blx@assignrefcontext}{sortingnamekeyscheme}{%
+ \blx@warning@noline{'sortingnamekeyscheme' is deprecated.\MessageBreak
+ Please use 'sortingnamekeytemplatename' instead}%
+ \def\blx@tempb{#1}}
+
+\def\DeclareSortingScheme{%
+ \blx@warning@noline{%
+ '\string\DeclareSortingScheme' is deprecated.\MessageBreak
+ Please use '\string\DeclareSortingTemplate'}%
+ \DeclareSortingTemplate}
+
+\def\DeclareSortingNamekeyScheme{%
+ \blx@warning@noline{%
+ '\string\DeclareSortingNamekeyScheme' is deprecated.\MessageBreak
+ Please use '\string\DeclareSortingNamekeyTemplate'}%
+ \DeclareSortingNamekeyTemplate}
+
+\def\ifsortnamekeyscheme#1{%
+ \blx@warning@noline{%
+ '\string\ifsortnamekeyscheme' is deprecated in sorting specifications.\MessageBreak
+ Please use '\string\ifsortingnamekeytemplate'}%
+ \expandafter\ifstrequal\expandafter{\blx@refcontext@sortingnamekeytemplatename}{#1}}
+
+\DeprecateFieldWithReplacement{extrayear}{extradate}
+\DeclareFieldAlias{extrayear}{extradate}
+
+% EDTF -> ISO
+\def\mkdaterangeedtf{%
+ \blx@warning@noline{%
+ '\string\mkdaterangeedtf' is deprecated.\MessageBreak
+ Please use '\string\mkdaterangeiso'}%
+ \mkdaterangeiso}
+
+\def\mkdaterangeedtfextra{%
+ \blx@warning@noline{%
+ '\string\mkdaterangeedtfextra' is deprecated.\MessageBreak
+ Please use '\string\mkdaterangeisoextra'}%
+ \mkdaterangeisoextra}
+
+% 3.16
+% deprecate \mainlang for \textmainlang
+% and \mkrelatedstring for \mkrelatedstringtext
+\newcommand{\mkrelatedstring}{\mainlang}
+
+% 3.17
+% ------------------------------------------------------------------
+% Deprecations for ISO8601 year divisions
+% ------------------------------------------------------------------
+
+% can't use \DeprecateFieldWithReplacement here because we do some
+% testing on the field values, so injecting warnings breaks things
+\def\do#1{%
+ \appto\blx@aliasfields{%
+ \csletcs{abx@field@#1season}{abx@field@#1yeardivision}%
+ \csletcs{abx@field@#1endseason}{abx@field@#1endyeardivision}}}
+\abx@dodatetypes
+
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/blx-dm-ms.def b/macros/latex/contrib/biblatex-ms/latex/blx-dm-ms.def
new file mode 100644
index 0000000000..3fa25c4577
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/blx-dm-ms.def
@@ -0,0 +1,1612 @@
+\ProvidesFile{blx-dm-ms.def}
+[\abx@lbxid]
+
+% -*- mode: LaTeX -*-
+\newbool{dmskipout}%
+\newbool{dmlabelfield}%
+
+% Data model .bcf output macros
+\xdef\blx@xml@datamodel#1{%
+ ~~<bcf:datamodel>\blx@nl
+ #1%
+ ~~</bcf:datamodel>\blx@nl}
+\xdef\blx@xml@datamodel@constants#1{%
+ ~~~~<bcf:constants>\blx@nl
+ #1%
+ ~~~~</bcf:constants>\blx@nl}
+\xdef\blx@xml@datamodel@constant#1#2#3{%
+ ~~~~~~<bcf:constant type="#1" name="#2">#3</bcf:constant>\blx@nl}
+\xdef\blx@xml@datamodel@entrytypes#1{%
+ ~~~~<bcf:entrytypes>\blx@nl
+ #1%
+ ~~~~</bcf:entrytypes>\blx@nl}
+\xdef\blx@xml@datamodel@entrytype#1#2{%
+ ~~~~~~<bcf:entrytype#1>#2</bcf:entrytype>\blx@nl}
+\xdef\blx@xml@datamodel@fields#1{%
+ ~~~~<bcf:fields>\blx@nl
+ #1%
+ ~~~~</bcf:fields>\blx@nl}
+\xdef\blx@xml@datamodel@multiscript@entryfields#1{%
+ ~~~~<bcf:multiscriptfields>\blx@nl
+ #1%
+ ~~~~</bcf:multiscriptfields>\blx@nl}
+\xdef\blx@xml@datamodel@multiscript@entryfields@field#1{%
+ ~~~~~~<bcf:field>#1</bcf:field>\blx@nl}
+\xdef\blx@xml@datamodel@field#1#2{%
+ ~~~~~~<bcf:field#1>#2</bcf:field>\blx@nl}
+\xdef\blx@xml@datamodel@entryfields#1{%
+ ~~~~<bcf:entryfields>\blx@nl
+ #1%
+ ~~~~</bcf:entryfields>\blx@nl}
+\xdef\blx@xml@datamodel@entryfield@type#1{%
+ ~~~~~~<bcf:entrytype>#1</bcf:entrytype>\blx@nl}
+\xdef\blx@xml@datamodel@entryfield@field#1{%
+ ~~~~~~<bcf:field>#1</bcf:field>\blx@nl}
+\xdef\blx@xml@datamodel@constraints#1{%
+ ~~~~<bcf:constraints>\blx@nl
+ #1%
+ ~~~~</bcf:constraints>\blx@nl}
+\xdef\blx@xml@datamodel@constraints@type#1{%
+ ~~~~~~<bcf:entrytype>#1</bcf:entrytype>\blx@nl}
+\xdef\blx@xml@datamodel@constraint#1#2{%
+ ~~~~~~<bcf:constraint#1>\blx@nl
+ #2%
+ ~~~~~~</bcf:constraint>\blx@nl}
+\xdef\blx@xml@datamodel@constraintfieldsxor#1{%
+ ~~~~~~~~<bcf:fieldxor>\blx@nl
+ #1%
+ ~~~~~~~~</bcf:fieldxor>\blx@nl}
+\xdef\blx@xml@datamodel@constraintfieldsor#1{%
+ ~~~~~~~~<bcf:fieldor>\blx@nl
+ #1%
+ ~~~~~~~~</bcf:fieldor>\blx@nl}
+\xdef\blx@xml@datamodel@constraint@antecedent#1#2{%
+ ~~~~~~~~<bcf:antecedent#1>\blx@nl
+ #2%
+ ~~~~~~~~</bcf:antecedent>\blx@nl}
+\xdef\blx@xml@datamodel@constraint@consequent#1#2{%
+ ~~~~~~~~<bcf:consequent#1>\blx@nl
+ #2%
+ ~~~~~~~~</bcf:consequent>\blx@nl}
+\xdef\blx@xml@datamodel@constraintfield#1{%
+ ~~~~~~~~<bcf:field>#1</bcf:field>\blx@nl}
+\xdef\blx@xml@datamodel@constraintfieldsub#1{%
+ ~~~~~~~~~~<bcf:field>#1</bcf:field>\blx@nl}
+
+% Data model specification macros
+\newrobustcmd*{\ResetDatamodelEntrytypes}{%
+ \global\let\blx@bcf@datamodel@entrytypes\@empty
+ \global\let\blx@datamodel@entrytypes\@empty}
+
+\newrobustcmd*{\ResetDatamodelFields}{%
+ \global\let\blx@datamodel@labelfields\@empty
+ \global\let\blx@bcf@datamodel@fields\@empty
+ \global\let\blx@datamodel@fields\@empty
+ \global\let\blx@datamodel@names\@empty
+ \global\let\blx@datamodel@dates\@empty
+ \global\let\blx@datamodel@lists\@empty}
+
+\newrobustcmd*{\ResetDatamodelEntryfields}{%
+ \global\let\blx@bcf@datamodel@entryfields\@empty}
+
+\newrobustcmd*{\ResetDatamodelMultiscriptEntryfields}{%
+ \def\do##1{%
+ \global\csundef{blx@datamodel@multiscript@entryfield@##1}%
+ \global\csundef{blx@datamodel@multiscript@entryfield@saved##1}}%
+ \dolistloop\blx@datamodel@multiscript@entryfields
+ \global\let\blx@datamodel@multiscript@entryfields\@empty
+ \global\let\blx@bcf@datamodel@multiscript@entryfields\@empty}
+
+\newrobustcmd*{\ResetDatamodelConstraints}{%
+ \global\let\blx@bcf@datamodel@constraints\@empty}
+
+\newrobustcmd*{\DeclareDatamodelEntrytypes}[2][]{%
+ \begingroup
+ \let\blx@tempa\@empty
+ \def\do##1{%
+ \ifinlistcs{##1}{blx@datamodel@entrytypes}
+ {}
+ {\listcsgadd{blx@datamodel@entrytypes}{##1}}%
+ \xappto\blx@bcf@datamodel@entrytypes{%
+ \blx@xml@datamodel@entrytype{\blx@tempa}{##1}}}%
+ \ifblank{#1}
+ {\docsvlist{#2}}
+ {\blx@kv@setkeys{blx@datamodel@entrytypes}{#1}
+ \docsvlist{#2}}%
+ \endgroup}
+
+\blx@kv@defkey{blx@datamodel@entrytypes}{skipout}[true]{% true|false
+ \ifstrequal{#1}{true}
+ {\appto\blx@tempa{ skip\string_output="true"}}
+ {}}
+
+% Valid dateparts
+\def\blx@notnulldateparts{month,day,hour,minute,second,timezone,yeardivision,endmonth,endday,endhour,endminute,endsecond,endtimezone,endyeardivision}
+\def\blx@nullokdateparts{endyear,year}
+\edef\blx@dateparts{\blx@notnulldateparts,\blx@nullokdateparts}
+
+\newrobustcmd*{\DeclareDatamodelFields}[2][]{%
+ \begingroup
+ \let\blx@dm@fieldtype\@empty
+ \let\blx@dm@datatype\@empty
+ \let\blx@dm@format\@empty
+ \boolfalse{dmskipout}%
+ \boolfalse{dmlabelfield}%
+ \let\blx@tempa\@empty
+ \blx@kv@setkeys{blx@datamodel@field}{#1}%
+ \def\do##1{%
+ % Generic lists of field/datatypes for testing bib fields
+ \ifinlistcs{##1}{blx@datamodelfields@fieldtypes@\blx@dm@fieldtype}
+ {}
+ {\listcsgadd{blx@datamodelfields@fieldtypes@\blx@dm@fieldtype}{##1}}%
+ \ifinlistcs{##1}{blx@datamodelfields@datatypes@\blx@dm@datatype}
+ {}
+ {\listcsgadd{blx@datamodelfields@datatypes@\blx@dm@datatype}{##1}}%
+ \ifinlistcs{##1}{blx@datamodelfields@types@\blx@dm@fieldtype @\blx@dm@datatype}
+ {}
+ {\listcsgadd{blx@datamodelfields@types@\blx@dm@fieldtype @\blx@dm@datatype}{##1}}%
+
+ % Processed convenience lists of various datamodel fields
+
+ % add to list of dates. These are skipout in the default datamodel but
+ % we want to auto-create some internals/options for all date fields in
+ % biblatex
+ \ifboolexpr{%
+ test {\ifcsstring{blx@dm@datatype}{date}}
+ and
+ not test {\ifinlistcs{##1}{blx@datamodel@dates}}}
+ {\listcsgadd{blx@datamodel@dates}{##1}}
+ {}%
+ \ifboolexpr{% add to list of label fields
+ not bool {dmskipout}
+ and
+ bool {dmlabelfield}
+ and
+ not test {\ifinlistcs{##1}{blx@datamodel@labelfields}}}
+ {\listcsgadd{blx@datamodel@labelfields}{##1}}
+ {}%
+ \ifboolexpr{% add to list of names if it is a name which appears in .bbl
+ not bool {dmskipout}
+ and
+ test {\ifcsstring{blx@dm@datatype}{name}}
+ and
+ not test {\ifinlistcs{##1}{blx@datamodel@names}}}
+ {\listcsgadd{blx@datamodel@names}{##1}}
+ {}%
+ \ifboolexpr{% add to list of lists if it is a list which appears in .bbl
+ not bool {dmskipout}
+ test {\ifcsstring{blx@dm@fieldtype}{list}}
+ and
+ ( test {\ifcsstring{blx@dm@datatype}{literal}}
+ or
+ test {\ifcsstring{blx@dm@datatype}{key}}
+ or
+ test {\ifcsstring{blx@dm@datatype}{uri}}
+ or
+ test {\ifcsstring{blx@dm@datatype}{verbatim}}
+ )
+ and
+ not test {\ifinlistcs{##1}{blx@datamodel@lists}}}
+ {\listcsgadd{blx@datamodel@lists}{##1}}
+ {}%
+ \ifboolexpr{% add to list of fields unless certain type/datatype etc.
+ bool {dmskipout}
+ or
+ test {\ifcsstring{blx@dm@datatype}{name}}
+ or
+ ( test {\ifcsstring{blx@dm@fieldtype}{list}}
+ and
+ test {\ifcsstring{blx@dm@datatype}{literal}}
+ )
+ or
+ ( test {\ifcsstring{blx@dm@fieldtype}{list}}
+ and
+ test {\ifcsstring{blx@dm@datatype}{key}}
+ )
+ or
+ ( test {\ifcsstring{blx@dm@fieldtype}{list}}
+ and
+ test {\ifcsstring{blx@dm@datatype}{uri}}
+ )
+ or
+ ( test {\ifcsstring{blx@dm@fieldtype}{list}}
+ and
+ test {\ifcsstring{blx@dm@datatype}{verbatim}}
+ )
+ or
+ ( test {\ifcsstring{blx@dm@fieldtype}{field}}
+ and
+ test {\ifcsstring{blx@dm@datatype}{code}}
+ )
+ or
+ test {\ifinlistcs{##1}{blx@datamodel@fields}}}
+ {}
+ {\listcsgadd{blx@datamodel@fields}{##1}}%
+ \xappto\blx@bcf@datamodel@fields{%
+ \blx@xml@datamodel@field{\blx@tempa}{##1}}%
+
+ % Dateparts are special - auto-create for all date fields
+ \ifcsstring{blx@dm@datatype}{date}
+ {\begingroup
+ \let\blx@tempa\@empty% reset setkeys buffer due to manual calls below
+ % add to list of dates. These are skipout in the default datamodel but
+ % we want to auto-create some internals/options for all date fields in
+ % biblatex
+ \ifinlistcs{##1}{blx@datamodel@dates}
+ {}
+ {\listcsgadd{blx@datamodel@dates}{##1}}%
+ \ifinlistcs{##1}{blx@datamodel@fields}
+ {}
+ {\listcsgadd{blx@datamodel@fields}{##1}}%
+ \blx@stripfromendinto{##1}{date}\blx@datetype
+ % dateparts which are ok to be null (by default *endyear)
+ \def\do####1{%
+ \let\blx@tempa\@empty% reset setkeys buffer due to loop calls
+ \xifinlistcs{\blx@datetype ####1}{blx@datamodel@fields}
+ {}
+ {\listcsxadd{blx@datamodel@fields}{\blx@datetype ####1}}%
+ \blx@kv@setkeys{blx@datamodel@field}{type=field,datatype=datepart,nullok}%
+ \xappto\blx@bcf@datamodel@fields{%
+ \blx@xml@datamodel@field{\blx@tempa}{\blx@datetype ####1}}}%
+ \expandafter\docsvlist\expandafter{\blx@nullokdateparts}%
+ % dateparts which are not ok to be null by default:
+ % *year, *(end)month, *(end)day, *(end)hour, *(end)minute, *(end)second, *(end)timezone
+ % *(end)yeardivision
+ \def\do####1{%
+ \let\blx@tempa\@empty% reset setkeys buffer due to loop calls
+ \xifinlistcs{\blx@datetype ####1}{blx@datamodel@fields}
+ {}
+ {\listcsxadd{blx@datamodel@fields}{\blx@datetype ####1}}%
+ \blx@kv@setkeys{blx@datamodel@field}{type=field,datatype=datepart}%
+ \xappto\blx@bcf@datamodel@fields{%
+ \blx@xml@datamodel@field{\blx@tempa}{\blx@datetype ####1}}}%
+ \expandafter\docsvlist\expandafter{\blx@notnulldateparts}%
+ \endgroup}
+ {}}%
+ \docsvlist{#2}
+ \endgroup}
+
+\blx@kv@defkey{blx@datamodel@field}{type}{% characters
+ \eappto\blx@tempa{ fieldtype="#1"}%
+ \def\blx@dm@fieldtype{#1}}
+\blx@kv@defkey{blx@datamodel@field}{datatype}{% characters
+ \eappto\blx@tempa{ datatype="#1"}%
+ \def\blx@dm@datatype{#1}}
+\blx@kv@defkey{blx@datamodel@field}{format}{% characters
+ \eappto\blx@tempa{ format="#1"}%
+ \def\blx@dm@format{#1}}
+\blx@kv@defkey{blx@datamodel@field}{nullok}[true]{% true|false
+ \ifstrequal{#1}{true}
+ {\appto\blx@tempa{ nullok="true"}}
+ {}}
+\blx@kv@defkey{blx@datamodel@field}{skipout}[true]{% true|false
+ \ifstrequal{#1}{true}
+ {\appto\blx@tempa{ skip\string_output="true"}%
+ \booltrue{dmskipout}}
+ {}}
+\blx@kv@defkey{blx@datamodel@field}{label}[true]{% true|false
+ \ifstrequal{#1}{true}
+ {\appto\blx@tempa{ label="true"}%
+ \booltrue{dmlabelfield}}
+ {}}
+
+\newrobustcmd*{\DeclareDatamodelConstant}[3][]{%
+ \begingroup
+ \let\blx@tempa\@empty
+ \ifblank{#1}
+ {\def\blx@tempa{string}}
+ {\blx@kv@setkeys{blx@datamodel@constant}{#1}}%
+ \xappto\blx@bcf@datamodel@constants{\blx@xml@datamodel@constant{\blx@tempa}{#2}{#3}}%
+ \csxdef{blx@datamodel@constant@#2}{#3}%
+ \csxdef{blx@datamodel@constanttype@#2}{\blx@tempa}%
+ \endgroup}
+
+\blx@kv@defkey{blx@datamodel@constant}{type}{%
+ \def\blx@tempa{#1}}
+
+\newrobustcmd*{\DeclareDatamodelMultiscriptEntryfields}[1]{%
+ \begingroup
+ \let\blx@tempa\@empty
+ \def\do##1{%
+ \eappto\blx@tempa{\blx@xml@datamodel@multiscript@entryfields@field{##1}}%
+ \listgadd\blx@datamodel@multiscript@entryfields{##1}%
+ \csgdef{blx@datamodel@multiscript@entryfield@##1}{1}%
+ \csgdef{blx@datamodel@multiscript@entryfield@saved##1}{1}}% \entrydata tests
+ \docsvlist{#1}%
+ \xappto\blx@bcf@datamodel@multiscript@entryfields{\blx@xml@datamodel@multiscript@entryfields{\blx@tempa}}%
+ \endgroup}
+
+\newrobustcmd*{\DeclareDatamodelEntryfields}[2][]{%
+ \begingroup
+ \let\blx@tempa\@empty
+ \let\blx@tempb\@empty
+ \ifblank{#1}
+ {}
+ {\def\do##1{%
+ \eappto\blx@tempa{\blx@xml@datamodel@entryfield@type{##1}}}%
+ \docsvlist{#1}}%
+ \def\do##1{%
+ \eappto\blx@tempb{\blx@xml@datamodel@entryfield@field{##1}}}%
+ \docsvlist{#2}%
+ \xappto\blx@bcf@datamodel@entryfields{\blx@xml@datamodel@entryfields{\blx@tempa\blx@tempb}}%
+ \endgroup}
+
+\newrobustcmd*{\DeclareDatamodelConstraints}[2][]{%
+ \begingroup
+ \let\blx@tempa\@empty
+ \let\blx@tempb\@empty
+ \let\constraint\blx@datamodel@constraint
+ \ifblank{#1}
+ {}
+ {\def\do##1{%
+ \eappto\blx@tempa{\blx@xml@datamodel@constraints@type{##1}}}%
+ \docsvlist{#1}}%
+ #2%
+ \xappto\blx@bcf@datamodel@constraints{\blx@xml@datamodel@constraints{\blx@tempa\blx@tempb}}%
+ \endgroup}
+
+\newcommand*{\blx@datamodel@constraint}[2][]{%
+ \let\blx@tempc\@empty
+ \let\blx@tempd\@empty
+ \blx@kv@setkeys{blx@datamodel@constraint}{#1}%
+ \let\constraintfieldsxor\blx@datamodel@constraintfieldsxor
+ \let\constraintfieldsor\blx@datamodel@constraintfieldsor
+ \let\constraintfield\blx@datamodel@constraintfield
+ \let\antecedent\blx@datamodel@constraint@antecedent
+ \let\consequent\blx@datamodel@constraint@consequent
+ #2%
+ \eappto\blx@tempb{\blx@xml@datamodel@constraint{\blx@tempc}{\blx@tempd}}}
+
+\blx@kv@defkey{blx@datamodel@constraint}{type}{% characters
+ \eappto\blx@tempc{ type="#1"}}
+\blx@kv@defkey{blx@datamodel@constraint}{datatype}{% characters
+ \eappto\blx@tempc{ datatype="#1"}}
+\blx@kv@defkey{blx@datamodel@constraint}{rangemin}{% integer
+ \eappto\blx@tempc{ rangemin="#1"}}
+\blx@kv@defkey{blx@datamodel@constraint}{rangemax}{% integer
+ \eappto\blx@tempc{ rangemax="#1"}}
+\blx@kv@defkey{blx@datamodel@constraint}{pattern}{% regexp
+ \eappto\blx@tempc{ pattern="#1"}}
+
+\newcommand*{\blx@datamodel@constraint@antecedent}[2][]{%
+ \let\blx@tempe\@empty
+ \let\blx@temph\@empty
+ \let\constraintfield\blx@datamodel@constraintfieldsub
+ \blx@kv@setkeys{blx@datamodel@constraint@quant}{#1}%
+ #2%
+ \let\constraintfield\blx@datamodel@constraintfield% back to default
+ \eappto\blx@tempd{\blx@xml@datamodel@constraint@antecedent{\blx@tempe}{\blx@temph}}}
+
+\newcommand*{\blx@datamodel@constraint@consequent}[2][]{%
+ \let\blx@tempe\@empty
+ \let\blx@temph\@empty
+ \let\constraintfield\blx@datamodel@constraintfieldsub
+ \blx@kv@setkeys{blx@datamodel@constraint@quant}{#1}%
+ #2%
+ \let\constraintfield\blx@datamodel@constraintfield% back to default
+ \eappto\blx@tempd{\blx@xml@datamodel@constraint@consequent{\blx@tempe}{\blx@temph}}}
+
+\blx@kv@defkey{blx@datamodel@constraint@quant}{quantifier}{% characters
+ \eappto\blx@tempe{ quant="#1"}}
+
+\newcommand*{\blx@datamodel@constraintfieldsxor}[1]{%
+ \let\blx@temph\@empty
+ \let\constraintfield\blx@datamodel@constraintfieldsub
+ #1%
+ \let\constraintfield\blx@datamodel@constraintfield% back to default
+ \eappto\blx@tempd{\blx@xml@datamodel@constraintfieldsxor{\blx@temph}}}
+
+\newcommand*{\blx@datamodel@constraintfieldsor}[1]{%
+ \let\blx@temph\@empty
+ \let\constraintfield\blx@datamodel@constraintfieldsub
+ #1%
+ \let\constraintfield\blx@datamodel@constraintfield% back to default
+ \eappto\blx@tempd{\blx@xml@datamodel@constraintfieldsor{\blx@temph}}}
+
+\newcommand*{\blx@datamodel@constraintfield}[1]{%
+ \eappto\blx@tempd{\blx@xml@datamodel@constraintfield{#1}}}
+
+\newcommand*{\blx@datamodel@constraintfieldsub}[1]{%
+ \eappto\blx@temph{\blx@xml@datamodel@constraintfieldsub{#1}}}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Data model specification
+
+\DeclareDatamodelConstant[type=list]{gender}{sf,sm,sn,pf,pm,pn,pp}
+\DeclareDatamodelConstant[type=list]{nameparts}{family,given,prefix,suffix}
+\DeclareDatamodelConstant[type=list]{optiondatatypes}{boolean,integer,string,xml}
+\DeclareDatamodelConstant[type=list]{multiscriptforms}{default,transliteration,transcription,translation}
+
+\DeclareDatamodelEntrytypes{
+ article,
+ artwork,
+ audio,
+ bibnote,
+ book,
+ bookinbook,
+ booklet,
+ collection,
+ commentary,
+ customa,
+ customb,
+ customc,
+ customd,
+ custome,
+ customf,
+ dataset,
+ inbook,
+ incollection,
+ inproceedings,
+ inreference,
+ image,
+ jurisdiction,
+ legal,
+ legislation,
+ letter,
+ manual,
+ misc,
+ movie,
+ music,
+ mvcollection,
+ mvreference,
+ mvproceedings,
+ mvbook,
+ online,
+ patent,
+ performance,
+ periodical,
+ proceedings,
+ reference,
+ report,
+ review,
+ set,
+ software,
+ standard,
+ suppbook,
+ suppcollection,
+ suppperiodical,
+ thesis,
+ unpublished,
+ video}
+
+\DeclareDatamodelEntrytypes[skipout]{xdata}
+
+\DeclareDatamodelFields[type=field, datatype=integer]{
+ sortyear,
+ volume,
+ volumes}
+
+\DeclareDatamodelFields[type=field, datatype=literal]{
+ abstract,
+ addendum,
+ annotation,
+ booksubtitle,
+ booktitle,
+ booktitleaddon,
+ chapter,
+ edition,
+ eid,
+ entrysubtype,
+ eprintclass,
+ eprinttype,
+ eventtitle,
+ eventtitleaddon,
+ gender,
+ howpublished,
+ indexsorttitle,
+ indextitle,
+ isan,
+ isbn,
+ ismn,
+ isrn,
+ issn,
+ issue,
+ issuesubtitle,
+ issuetitle,
+ issuetitleaddon,
+ iswc,
+ journalsubtitle,
+ journaltitle,
+ journaltitleaddon,
+ label,
+ langid,
+ langidopts,
+ library,
+ mainsubtitle,
+ maintitle,
+ maintitleaddon,
+ nameaddon,
+ note,
+ number,
+ origtitle,
+ pagetotal,
+ part,
+ relatedstring,
+ relatedtype,
+ reprinttitle,
+ series,
+ shorthandintro,
+ subtitle,
+ title,
+ titleaddon,
+ usera,
+ userb,
+ userc,
+ userd,
+ usere,
+ userf,
+ venue,
+ version}
+
+\DeclareDatamodelFields[type=field, datatype=literal, label=true]{
+ shorthand,
+ shortjournal,
+ shortseries,
+ shorttitle}
+
+\DeclareDatamodelFields[type=field, datatype=literal, skipout]{
+ sorttitle,
+ sortshorthand,
+ sortkey,
+ presort}
+
+\DeclareDatamodelFields[type=list, datatype=literal]{
+ institution,
+ lista,
+ listb,
+ listc,
+ listd,
+ liste,
+ listf,
+ location,
+ organization,
+ origlocation,
+ origpublisher,
+ publisher}
+
+\DeclareDatamodelFields[type=list, datatype=name]{
+ afterword,
+ annotator,
+ author,
+ bookauthor,
+ commentator,
+ editor,
+ editora,
+ editorb,
+ editorc,
+ foreword,
+ holder,
+ introduction,
+ namea,
+ nameb,
+ namec,
+ translator}
+
+\DeclareDatamodelFields[type=list, datatype=name, label=true]{
+ shortauthor,
+ shorteditor}
+
+\DeclareDatamodelFields[type=list, datatype=name, skipout]{sortname}
+
+\DeclareDatamodelFields[type=field, datatype=key]{
+ authortype,
+ editoratype,
+ editorbtype,
+ editorctype,
+ editortype,
+ bookpagination,
+ nameatype,
+ namebtype,
+ namectype,
+ pagination,
+ pubstate,
+ type}
+
+\DeclareDatamodelFields[type=list, datatype=key]{language,origlanguage}
+
+\DeclareDatamodelFields[type=field, datatype=entrykey]{
+ crossref,
+ xref}
+
+\DeclareDatamodelFields[type=field, datatype=date, skipout]{
+ date,
+ eventdate,
+ origdate,
+ urldate}
+
+\DeclareDatamodelFields[type=field, datatype=verbatim]{
+ doi,
+ eprint,
+ file,
+ verba,
+ verbb,
+ verbc}
+
+\DeclareDatamodelFields[type=field, datatype=uri]{url}
+
+\DeclareDatamodelFields[type=field, format=xsv, datatype=entrykey, skipout]{xdata, ids, entryset}
+\DeclareDatamodelFields[type=field, format=xsv, datatype=entrykey]{related}
+
+\DeclareDatamodelFields[type=field, format=xsv, datatype=keyword]{keywords}
+
+\DeclareDatamodelFields[type=field, format=xsv, datatype=option, skipout]{options, relatedoptions}
+\DeclareDatamodelFields[type=field, datatype=range]{pages}
+
+\DeclareDatamodelFields[type=field, datatype=code]{execute}
+
+% fields for all entry types
+\DeclareDatamodelEntryfields{
+ abstract,
+ annotation,
+ authortype,
+ bookpagination,
+ crossref,
+ day,
+ doi,
+ eprint,
+ eprintclass,
+ eprinttype,
+ endday,
+ endhour,
+ endminute,
+ endmonth,
+ endsecond,
+ endtimezone,
+ endyear,
+ endyeardivision,
+ entryset,
+ entrysubtype,
+ execute,
+ file,
+ gender,
+ hour,
+ ids,
+ indextitle,
+ indexsorttitle,
+ isan,
+ ismn,
+ iswc,
+ keywords,
+ label,
+ langid,
+ langidopts,
+ library,
+ lista,
+ listb,
+ listc,
+ listd,
+ liste,
+ listf,
+ minute,
+ month,
+ namea,
+ nameb,
+ namec,
+ nameatype,
+ namebtype,
+ namectype,
+ nameaddon,
+ options,
+ origday,
+ origendday,
+ origendhour,
+ origendminute,
+ origendmonth,
+ origendsecond,
+ origendtimezone,
+ origendyear,
+ origendyeardivision,
+ orighour,
+ origminute,
+ origmonth,
+ origsecond,
+ origtimezone,
+ origyear,
+ origyeardivision,
+ origlocation,
+ origpublisher,
+ origtitle,
+ pagination,
+ presort,
+ related,
+ relatedoptions,
+ relatedstring,
+ relatedtype,
+ second,
+ shortauthor,
+ shorteditor,
+ shorthand,
+ shorthandintro,
+ shortjournal,
+ shortseries,
+ shorttitle,
+ sortkey,
+ sortname,
+ sortshorthand,
+ sorttitle,
+ sortyear,
+ timezone,
+ url,
+ urlday,
+ urlendday,
+ urlendhour,
+ urlendminute,
+ urlendmonth,
+ urlendsecond,
+ urlendtimezone,
+ urlendyear,
+ urlhour,
+ urlminute,
+ urlmonth,
+ urlsecond,
+ urltimezone,
+ urlyear,
+ usera,
+ userb,
+ userc,
+ userd,
+ usere,
+ userf,
+ verba,
+ verbb,
+ verbc,
+ xdata,
+ xref,
+ year,
+ yeardivision}
+
+\DeclareDatamodelEntryfields[set]{
+ entryset}
+
+\DeclareDatamodelEntryfields[article]{
+ addendum,
+ annotator,
+ author,
+ commentator,
+ editor,
+ editora,
+ editorb,
+ editorc,
+ editortype,
+ editoratype,
+ editorbtype,
+ editorctype,
+ eid,
+ issn,
+ issue,
+ issuetitle,
+ issuesubtitle,
+ issuetitleaddon,
+ journalsubtitle,
+ journaltitle,
+ journaltitleaddon,
+ language,
+ note,
+ number,
+ origlanguage,
+ pages,
+ pubstate,
+ series,
+ subtitle,
+ title,
+ titleaddon,
+ translator,
+ version,
+ volume}
+
+\DeclareDatamodelEntryfields[bibnote]{note}
+
+\DeclareDatamodelEntryfields[book]{
+ author,
+ addendum,
+ afterword,
+ annotator,
+ chapter,
+ commentator,
+ edition,
+ editor,
+ editora,
+ editorb,
+ editorc,
+ editortype,
+ editoratype,
+ editorbtype,
+ editorctype,
+ eid,
+ foreword,
+ introduction,
+ isbn,
+ language,
+ location,
+ maintitle,
+ maintitleaddon,
+ mainsubtitle,
+ note,
+ number,
+ origlanguage,
+ pages,
+ pagetotal,
+ part,
+ publisher,
+ pubstate,
+ series,
+ subtitle,
+ title,
+ titleaddon,
+ translator,
+ volume,
+ volumes}
+
+\DeclareDatamodelEntryfields[mvbook]{
+ addendum,
+ afterword,
+ annotator,
+ author,
+ commentator,
+ edition,
+ editor,
+ editora,
+ editorb,
+ editorc,
+ editortype,
+ editoratype,
+ editorbtype,
+ editorctype,
+ foreword,
+ introduction,
+ isbn,
+ language,
+ location,
+ note,
+ number,
+ origlanguage,
+ pagetotal,
+ publisher,
+ pubstate,
+ series,
+ subtitle,
+ title,
+ titleaddon,
+ translator,
+ volume,
+ volumes}
+
+\DeclareDatamodelEntryfields[inbook,bookinbook,suppbook]{
+ addendum,
+ afterword,
+ annotator,
+ author,
+ booktitle,
+ bookauthor,
+ booksubtitle,
+ booktitleaddon,
+ chapter,
+ commentator,
+ edition,
+ editor,
+ editora,
+ editorb,
+ editorc,
+ editortype,
+ editoratype,
+ editorbtype,
+ editorctype,
+ eid,
+ foreword,
+ introduction,
+ isbn,
+ language,
+ location,
+ mainsubtitle,
+ maintitle,
+ maintitleaddon,
+ note,
+ number,
+ origlanguage,
+ part,
+ publisher,
+ pages,
+ pubstate,
+ series,
+ subtitle,
+ title,
+ titleaddon,
+ translator,
+ volume,
+ volumes}
+
+\DeclareDatamodelEntryfields[booklet]{
+ addendum,
+ author,
+ chapter,
+ editor,
+ editortype,
+ eid,
+ howpublished,
+ language,
+ location,
+ note,
+ pages,
+ pagetotal,
+ pubstate,
+ subtitle,
+ title,
+ titleaddon,
+ type}
+
+\DeclareDatamodelEntryfields[collection,reference]{
+ addendum,
+ afterword,
+ annotator,
+ chapter,
+ commentator,
+ edition,
+ editor,
+ editora,
+ editorb,
+ editorc,
+ editortype,
+ editoratype,
+ editorbtype,
+ editorctype,
+ eid,
+ foreword,
+ introduction,
+ isbn,
+ language,
+ location,
+ mainsubtitle,
+ maintitle,
+ maintitleaddon,
+ note,
+ number,
+ origlanguage,
+ pages,
+ pagetotal,
+ part,
+ publisher,
+ pubstate,
+ series,
+ subtitle,
+ title,
+ titleaddon,
+ translator,
+ volume,
+ volumes}
+
+\DeclareDatamodelEntryfields[mvcollection,mvreference]{
+ addendum,
+ afterword,
+ annotator,
+ author,
+ commentator,
+ edition,
+ editor,
+ editora,
+ editorb,
+ editorc,
+ editortype,
+ editoratype,
+ editorbtype,
+ editorctype,
+ foreword,
+ introduction,
+ isbn,
+ language,
+ location,
+ note,
+ number,
+ origlanguage,
+ publisher,
+ pubstate,
+ subtitle,
+ title,
+ titleaddon,
+ translator,
+ volume,
+ volumes}
+
+\DeclareDatamodelEntryfields[incollection,suppcollection,inreference]{
+ addendum,
+ afterword,
+ annotator,
+ author,
+ booksubtitle,
+ booktitle,
+ booktitleaddon,
+ chapter,
+ commentator,
+ edition,
+ editor,
+ editora,
+ editorb,
+ editorc,
+ editortype,
+ editoratype,
+ editorbtype,
+ editorctype,
+ eid,
+ foreword,
+ introduction,
+ isbn,
+ language,
+ location,
+ mainsubtitle,
+ maintitle,
+ maintitleaddon,
+ note,
+ number,
+ origlanguage,
+ pages,
+ part,
+ publisher,
+ pubstate,
+ series,
+ subtitle,
+ title,
+ titleaddon,
+ translator,
+ volume,
+ volumes}
+
+\DeclareDatamodelEntryfields[dataset]{
+ addendum,
+ author,
+ edition,
+ editor,
+ editortype,
+ language,
+ location,
+ note,
+ number,
+ organization,
+ publisher,
+ pubstate,
+ series,
+ subtitle,
+ title,
+ titleaddon,
+ type,
+ version}
+
+\DeclareDatamodelEntryfields[manual]{
+ addendum,
+ author,
+ chapter,
+ edition,
+ editor,
+ editortype,
+ eid,
+ isbn,
+ language,
+ location,
+ note,
+ number,
+ organization,
+ pages,
+ pagetotal,
+ publisher,
+ pubstate,
+ series,
+ subtitle,
+ title,
+ titleaddon,
+ type,
+ version}
+
+\DeclareDatamodelEntryfields[misc,software]{
+ addendum,
+ author,
+ editor,
+ editortype,
+ howpublished,
+ language,
+ location,
+ note,
+ organization,
+ pubstate,
+ subtitle,
+ title,
+ titleaddon,
+ type,
+ version}
+
+\DeclareDatamodelEntryfields[online]{
+ addendum,
+ author,
+ editor,
+ editortype,
+ language,
+ note,
+ organization,
+ pubstate,
+ subtitle,
+ title,
+ titleaddon,
+ version}
+
+\DeclareDatamodelEntryfields[patent]{
+ addendum,
+ author,
+ holder,
+ location,
+ note,
+ number,
+ pubstate,
+ subtitle,
+ title,
+ titleaddon,
+ type,
+ version}
+
+\DeclareDatamodelEntryfields[periodical]{
+ addendum,
+ editor,
+ editora,
+ editorb,
+ editorc,
+ editortype,
+ editoratype,
+ editorbtype,
+ editorctype,
+ issn,
+ issue,
+ issuesubtitle,
+ issuetitle,
+ issuetitleaddon,
+ language,
+ note,
+ number,
+ pubstate,
+ series,
+ subtitle,
+ title,
+ titleaddon,
+ volume,
+ yeardivision}
+
+\DeclareDatamodelEntryfields[mvproceedings]{
+ addendum,
+ editor,
+ editortype,
+ eventday,
+ eventendday,
+ eventendhour,
+ eventendminute,
+ eventendmonth,
+ eventendsecond,
+ eventendtimezone,
+ eventendyear,
+ eventendyeardivision,
+ eventhour,
+ eventminute,
+ eventmonth,
+ eventsecond,
+ eventtimezone,
+ eventyear,
+ eventyeardivision,
+ eventtitle,
+ eventtitleaddon,
+ isbn,
+ language,
+ location,
+ note,
+ number,
+ organization,
+ pagetotal,
+ publisher,
+ pubstate,
+ series,
+ subtitle,
+ title,
+ titleaddon,
+ venue,
+ volumes}
+
+\DeclareDatamodelEntryfields[proceedings]{
+ addendum,
+ chapter,
+ editor,
+ editortype,
+ eid,
+ eventday,
+ eventendday,
+ eventendhour,
+ eventendminute,
+ eventendmonth,
+ eventendsecond,
+ eventendtimezone,
+ eventendyear,
+ eventendyeardivision,
+ eventhour,
+ eventminute,
+ eventmonth,
+ eventsecond,
+ eventtimezone,
+ eventyear,
+ eventyeardivision,
+ eventtitle,
+ eventtitleaddon,
+ isbn,
+ language,
+ location,
+ mainsubtitle,
+ maintitle,
+ maintitleaddon,
+ note,
+ number,
+ organization,
+ pages,
+ pagetotal,
+ part,
+ publisher,
+ pubstate,
+ series,
+ subtitle,
+ title,
+ titleaddon,
+ venue,
+ volume,
+ volumes}
+
+\DeclareDatamodelEntryfields[inproceedings]{
+ addendum,
+ author,
+ booksubtitle,
+ booktitle,
+ booktitleaddon,
+ chapter,
+ editor,
+ editortype,
+ eid,
+ eventday,
+ eventendday,
+ eventendhour,
+ eventendminute,
+ eventendmonth,
+ eventendsecond,
+ eventendtimezone,
+ eventendyear,
+ eventendyeardivision,
+ eventhour,
+ eventminute,
+ eventmonth,
+ eventsecond,
+ eventtimezone,
+ eventyear,
+ eventyeardivision,
+ eventtitle,
+ eventtitleaddon,
+ isbn,
+ language,
+ location,
+ mainsubtitle,
+ maintitle,
+ maintitleaddon,
+ note,
+ number,
+ organization,
+ pages,
+ part,
+ publisher,
+ pubstate,
+ series,
+ subtitle,
+ title,
+ titleaddon,
+ venue,
+ volume,
+ volumes}
+
+\DeclareDatamodelEntryfields[report]{
+ addendum,
+ author,
+ chapter,
+ eid,
+ institution,
+ isrn,
+ language,
+ location,
+ note,
+ number,
+ pages,
+ pagetotal,
+ pubstate,
+ subtitle,
+ title,
+ titleaddon,
+ type,
+ version}
+
+\DeclareDatamodelEntryfields[thesis]{
+ addendum,
+ author,
+ chapter,
+ eid,
+ institution,
+ language,
+ location,
+ note,
+ pages,
+ pagetotal,
+ pubstate,
+ subtitle,
+ title,
+ titleaddon,
+ type}
+
+\DeclareDatamodelEntryfields[unpublished]{
+ addendum,
+ author,
+ eventday,
+ eventendday,
+ eventendhour,
+ eventendminute,
+ eventendmonth,
+ eventendsecond,
+ eventendtimezone,
+ eventendyear,
+ eventendyeardivision,
+ eventhour,
+ eventminute,
+ eventmonth,
+ eventsecond,
+ eventtimezone,
+ eventyear,
+ eventyeardivision,
+ eventtitle,
+ eventtitleaddon,
+ howpublished,
+ language,
+ location,
+ note,
+ pubstate,
+ subtitle,
+ title,
+ titleaddon,
+ type,
+ venue}
+
+\DeclareDatamodelMultiscriptEntryfields{
+ abstract,
+ addendum,
+ afterword,
+ annotator,
+ author,
+ bookauthor,
+ booksubtitle,
+ booktitle,
+ booktitleaddon,
+ chapter,
+ commentator,
+ editor,
+ editora,
+ editorb,
+ editorc,
+ foreword,
+ holder,
+ institution,
+ introduction,
+ issuesubtitle,
+ issuetitle,
+ issuetitleaddon,
+ journalsubtitle,
+ journaltitle,
+ journaltitleaddon,
+ lista,
+ listb,
+ listc,
+ location,
+ mainsubtitle,
+ maintitle,
+ maintitleaddon,
+ nameaddon,
+ namea,
+ nameb,
+ namec,
+ note,
+ organization,
+ origlocation,
+ origpublisher,
+ origtitle,
+ part,
+ publisher,
+ relatedstring,
+ series,
+ sortname,
+ sortshorthand,
+ sorttitle,
+ subtitle,
+ title,
+ titleaddon,
+ translator,
+ venue}
+
+\DeclareDatamodelConstraints[
+ article,
+ book,
+ inbook,
+ bookinbook,
+ suppbook,
+ booklet,
+ collection,
+ incollection,
+ suppcollection,
+ manual,
+ misc,
+ mvbook,
+ mvcollection,
+ online,
+ patent,
+ periodical,
+ suppperiodical,
+ proceedings,
+ inproceedings,
+ reference,
+ inreference,
+ report,
+ set,
+ thesis,
+ unpublished]{
+ \constraint[type=mandatory]{
+ \constraintfieldsxor{
+ \constraintfield{date}
+ \constraintfield{year}
+ }
+ }
+ }
+
+\DeclareDatamodelConstraints[set]{
+ \constraint[type=mandatory]{
+ \constraintfield{entryset}
+ }
+}
+
+\DeclareDatamodelConstraints[article]{
+ \constraint[type=mandatory]{
+ \constraintfield{author}
+ \constraintfield{journaltitle}
+ \constraintfield{title}
+ }
+}
+
+\DeclareDatamodelConstraints[book,mvbook]{
+ \constraint[type=mandatory]{
+ \constraintfield{author}
+ \constraintfield{title}
+ }
+}
+
+\DeclareDatamodelConstraints[inbook,bookinbook,suppbook]{
+ \constraint[type=mandatory]{
+ \constraintfield{author}
+ \constraintfield{title}
+ \constraintfield{booktitle}
+ }
+}
+
+\DeclareDatamodelConstraints[booklet]{
+ \constraint[type=mandatory]{
+ \constraintfieldsor{
+ \constraintfield{author}
+ \constraintfield{editor}
+ }
+ \constraintfield{title}
+ }
+}
+
+\DeclareDatamodelConstraints[collection,reference,mvcollection,mvreference]{
+ \constraint[type=mandatory]{
+ \constraintfield{editor}
+ \constraintfield{title}
+ }
+}
+
+\DeclareDatamodelConstraints[incollection,suppcollection,inreference]{
+ \constraint[type=mandatory]{
+ \constraintfield{author}
+ \constraintfield{editor}
+ \constraintfield{title}
+ \constraintfield{booktitle}
+ }
+}
+
+\DeclareDatamodelConstraints[dataset]{
+ \constraint[type=mandatory]{
+ \constraintfield{title}
+ }
+}
+
+\DeclareDatamodelConstraints[manual]{
+ \constraint[type=mandatory]{
+ \constraintfield{title}
+ }
+}
+
+\DeclareDatamodelConstraints[misc,software]{
+ \constraint[type=mandatory]{
+ \constraintfield{title}
+ }
+}
+
+\DeclareDatamodelConstraints[online]{
+ \constraint[type=mandatory]{
+ \constraintfield{title}
+ \constraintfieldsor{
+ \constraintfield{url}
+ \constraintfield{doi}
+ \constraintfield{eprint}
+ }
+ }
+}
+
+\DeclareDatamodelConstraints[patent]{
+ \constraint[type=mandatory]{
+ \constraintfield{author}
+ \constraintfield{title}
+ \constraintfield{number}
+ }
+}
+
+\DeclareDatamodelConstraints[periodical]{
+ \constraint[type=mandatory]{
+ \constraintfield{editor}
+ \constraintfield{title}
+ }
+}
+
+\DeclareDatamodelConstraints[proceedings,mvproceedings]{
+ \constraint[type=mandatory]{
+ \constraintfield{title}
+ }
+}
+
+\DeclareDatamodelConstraints[inproceedings]{
+ \constraint[type=mandatory]{
+ \constraintfield{author}
+ \constraintfield{title}
+ \constraintfield{booktitle}
+ }
+}
+
+\DeclareDatamodelConstraints[report]{
+ \constraint[type=mandatory]{
+ \constraintfield{author}
+ \constraintfield{title}
+ \constraintfield{type}
+ \constraintfield{institution}
+ }
+}
+
+\DeclareDatamodelConstraints[thesis]{
+ \constraint[type=mandatory]{
+ \constraintfield{author}
+ \constraintfield{title}
+ \constraintfield{type}
+ \constraintfield{institution}
+ }
+}
+
+\DeclareDatamodelConstraints[unpublished]{
+ \constraint[type=mandatory]{
+ \constraintfield{author}
+ \constraintfield{title}
+ }
+}
+
+\DeclareDatamodelConstraints{
+ \constraint[type=data, datatype=isbn]{
+ \constraintfield{isbn}
+ }
+ \constraint[type=data, datatype=issn]{
+ \constraintfield{issn}
+ }
+ \constraint[type=data, datatype=ismn]{
+ \constraintfield{ismn}
+ }
+ \constraint[type=data, datatype=pattern, pattern=\regexp{(?:sf|sm|sn|pf|pm|pn|pp)}]{
+ \constraintfield{gender}
+ }
+}
+
diff --git a/macros/latex/contrib/biblatex-ms/latex/blx-mcite-ms.def b/macros/latex/contrib/biblatex-ms/latex/blx-mcite-ms.def
new file mode 100644
index 0000000000..2b59d1296c
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/blx-mcite-ms.def
@@ -0,0 +1,78 @@
+\ProvidesFile{blx-mcite-ms.def}
+[\abx@cptid]
+
+\newrobustcmd*{\mcite}{\mcitelike\cite}
+\newrobustcmd*{\Mcite}{\mcitelike\Cite}
+\newrobustcmd*{\mparencite}{\mcitelike\parencite}
+\newrobustcmd*{\Mparencite}{\mcitelike\Parencite}
+\newrobustcmd*{\mfootcite}{\mcitelike\footcite}
+\newrobustcmd*{\mfootcitetext}{\mcitelike\footcitetext}
+\newrobustcmd*{\mtextcite}{\mcitelike\textcite}
+\newrobustcmd*{\Mtextcite}{\mcitelike\Textcite}
+\newrobustcmd*{\msupercite}{\mcitelike\supercite}
+
+\newrobustcmd*{\mautocite}{\mcitelike\autocite}
+\newrobustcmd*{\Mautocite}{\mcitelike\Autocite}
+
+% \mcite{key1,setA,*keyA1,*keyA2,*keyA3,key2,setB,*keyB1,*keyB2,*keyB3}
+% => \mcitelike\cite{key1,setA,*keyA1,*keyA2,*keyA3,key2,setB,*keyB1,*keyB2,*keyB3}
+% => \defbibentryset{setA}{keyA1,keyA2,keyA3}
+% \defbibentryset{setB}{keyB1,keyB2,keyB3}
+% \cite{key1,setA,key2,setB}
+
+\newrobustcmd*{\mcitelike}[1]{%
+ \@ifstar
+ {\blx@citeargs{\blx@mclike{#1*}}}
+ {\blx@citeargs{\blx@mclike{#1}}}}
+
+\long\def\blx@mclike#1#2#3#4{%
+ \begingroup
+ \let\blx@mclike@tempa\@empty
+ \let\blx@mclike@tempb\@empty
+ \let\blx@mclike@tempc\@empty
+ \blx@xsanitizeafter\blx@mclike@i{#4}%
+ \edef\blx@mclike@tempa{\endgroup\unexpanded{#1[{#2}][{#3}]}{\blx@mclike@tempa}}%
+ \blx@mclike@tempa}
+
+\def\blx@mclike@i#1{%
+ \forcsvlist\blx@mclike@ii{#1}%
+ \blx@mclike@iv}
+
+\def\blx@mclike@ii#1{\blx@mclike@iii#1&}
+
+\def\blx@mclike@iii#1#2&{%
+ \if*#1%
+ \blx@mclike@tail{#2}%
+ \else
+ \blx@mclike@head{#1#2}%
+ \fi}
+
+\def\blx@mclike@iv{%
+ \ifx\blx@mclike@tempb\@empty
+ \else
+ \ifx\blx@mclike@tempc\@empty
+ \else
+ \defbibentryset{\blx@mclike@tempb}{\blx@mclike@tempc}%
+ \let\blx@mclike@tempc\@empty
+ \fi
+ \nocite{\blx@mclike@tempb}% preserve citation order for sorting=none
+ \let\blx@mclike@tempb\@empty
+ \fi}
+
+\def\blx@mclike@head#1{%
+ \blx@mclike@iv
+ \edef\blx@mclike@tempa{%
+ \ifx\blx@mclike@tempa\@empty
+ \else
+ \blx@mclike@tempa,%
+ \fi#1}%
+ \def\blx@mclike@tempb{#1}}
+
+\def\blx@mclike@tail#1{%
+ \edef\blx@mclike@tempc{%
+ \ifx\blx@mclike@tempc\@empty
+ \else
+ \blx@mclike@tempc,%
+ \fi#1}}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/blx-natbib-ms.def b/macros/latex/contrib/biblatex-ms/latex/blx-natbib-ms.def
new file mode 100644
index 0000000000..fc3c40664d
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/blx-natbib-ms.def
@@ -0,0 +1,84 @@
+\ProvidesFile{blx-natbib-ms.def}
+[\abx@cptid]
+
+\DeclareDelimFormat{nameyeardelim}{\addcomma\space}
+
+\newrobustcmd*{\citet}{%
+ \@ifstar
+ {\AtNextCite{\AtEachCitekey{\defcounter{maxnames}{999}}}%
+ \textcite}
+ {\textcite}}
+
+\newrobustcmd*{\citep}{%
+ \@ifstar
+ {\AtNextCite{\AtEachCitekey{\defcounter{maxnames}{999}}}%
+ \parencite}
+ {\parencite}}
+
+\newrobustcmd*{\citealt}{%
+ \AtNextCite{\DeclareDelimFormat{nameyeardelim}{\addspace}}%
+ \@ifstar
+ {\AtNextCite{\AtEachCitekey{\defcounter{maxnames}{999}}}%
+ \cite}
+ {\cite}}
+
+\newrobustcmd*{\citealp}{%
+ \@ifstar
+ {\AtNextCite{\AtEachCitekey{\defcounter{maxnames}{999}}}%
+ \cite}
+ {\cite}}
+
+\DeclareCiteCommand*{\citeauthor}
+ {\defcounter{maxnames}{999}%
+ \boolfalse{citetracker}%
+ \boolfalse{pagetracker}%
+ \usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \printnames{labelname}}
+ {\multicitedelim}
+ {\usebibmacro{postnote}}
+
+\DeclareCiteCommand{\citeyearpar}[\mkbibparens]
+ {\boolfalse{citetracker}%
+ \boolfalse{pagetracker}%
+ \usebibmacro{prenote}}
+ {\printfield{year}}
+ {\multicitedelim}
+ {\usebibmacro{postnote}}
+
+\newrobustcmd*{\Citet}{\bibsentence\citet}
+\newrobustcmd*{\Citep}{\bibsentence\citep}
+\newrobustcmd*{\Citealt}{\bibsentence\citealt}
+\newrobustcmd*{\Citealp}{\bibsentence\citealp}
+\newrobustcmd*{\citefullauthor}{\citeauthor*}
+\newrobustcmd*{\Citefullauthor}{\bibsentence\citeauthor*}
+\newrobustcmd*{\citetext}{\parentext}
+
+\newrobustcmd*{\defcitealias}[2]{%
+ \ifcsdef{abx@alias@\detokenize{#1}}
+ {\PackageWarning{biblatex}{%
+ Overwriting alias for entry '\detokenize{#1}'}}
+ {}%
+ \csgdef{abx@alias@\detokenize{#1}}{#2}}
+
+\newcommand*{\@citealias}[1]{%
+ \ifcsdef{abx@alias@#1}
+ {\csuse{abx@alias@#1}}
+ {\PackageWarning{biblatex}{No alias for entry '#1'}%
+ \textbf{#1}}}
+
+\DeclareCiteCommand{\citetalias}
+ {\usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \@citealias{\thefield{entrykey}}}
+ {\multicitedelim}
+ {\usebibmacro{postnote}}
+
+\DeclareCiteCommand{\citepalias}[\mkbibparens]
+ {\usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \@citealias{\thefield{entrykey}}}
+ {\multicitedelim}
+ {\usebibmacro{postnote}}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/blx-unicode-ms.def b/macros/latex/contrib/biblatex-ms/latex/blx-unicode-ms.def
new file mode 100644
index 0000000000..12eabfe98b
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/blx-unicode-ms.def
@@ -0,0 +1,129 @@
+% This test should not be needed since biblatex.sty already checks
+% if LuaTeX or XeTeX is used.
+% Currently Unicode-aware engines are only XeTeX and LuaTeX,
+% both of which define \Umathcode.
+\ifx\Umathcode\undefined
+ \expandafter\endinput
+\fi
+
+\begingroup
+\openin\blx@bcfin=UnicodeData.txt %
+\ifeof\blx@bcfin
+\else
+ \let\blx@setazcodes\@empty
+ \def\Lu{Lu}
+ \def\storedpar{\par}
+ \def\blx@tempa#1;#2;#3;#4\relax{%
+ \def\temp{#3}%
+ \ifx\temp\Lu
+ \xdef\blx@setazcodes{%
+ \blx@setazcodes
+ \sfcode"#1=\@m
+ }
+ \fi
+ }
+ \loop\unless\ifeof\blx@bcfin
+ \read\blx@bcfin to \blx@tempb
+ \unless\ifx\blx@tempb\storedpar
+ \expandafter\blx@tempa\blx@tempb\relax
+ \fi
+ \repeat
+\fi
+\closein\blx@bcfin
+\endgroup
+
+% Second part of workaround for odd XeTeX/babel-french behaviour
+% https://github.com/plk/biblatex/issues/979
+% fix by Ulrike Fischer
+% https://tex.stackexchange.com/a/544914/.
+% The first bit lives in biblatex.sty.
+% At some point we may want to consider providing a
+% blx-unicode-xetex and a blx-unicode-lualatex
+% both loading a blx-unicode-generic.
+% For now this test is enough.
+\ifundef\XeTeXrevision
+ {}
+ {\providerobustcmd*{\textnohyphenation}[1]{%
+ \bgroup\nohyphenation#1\egroup^^^^200b}}
+
+\appto\blx@setfrcodes{%
+ % … should probably have dot spacefactor, but pdfLaTeX
+ % makes it a period, so we have this here for consistency
+ \sfcode`\…=\blx@sf@period
+}
+
+\DeclarePrefChars*{’}
+\DeclareRangeChars*{–—}
+
+\def\blx@normrange@range#1\bibrangedash#2\bibrangedash#3&{%
+ \ifblank{#3}
+ {\blx@normrange@endash#1––&}
+ {\ifblank{#2}
+ {\begingroup
+ \protected@edef\blx@tempc{\endgroup
+ \blx@range@out@value{%
+ \blx@range@out@item@process{\unexpanded{#1}}%
+ \noexpand\bibrangedash}}%
+ \blx@tempc}
+ {\ifblank{#1}
+ {\begingroup
+ \protected@edef\blx@tempc{\endgroup
+ \blx@range@out@value{%
+ \noexpand\bibrangedash
+ \blx@range@out@item@process{%
+ \unexpanded{#2}}}}%
+ \blx@tempc}
+ {\blx@range@process{#1}{#2}}}}}
+
+\def\blx@normrange@endash#1–#2–#3&{%
+ \ifblank{#3}
+ {\blx@normrange@hyphen#1--&}
+ {\ifblank{#2}
+ {\begingroup
+ \protected@edef\blx@tempc{\endgroup
+ \blx@range@out@value{%
+ \blx@range@out@item@process{\unexpanded{#1}}%
+ \noexpand\bibrangedash}}%
+ \blx@tempc}
+ {\ifblank{#1}
+ {\begingroup
+ \protected@edef\blx@tempc{\endgroup
+ \blx@range@out@value{%
+ \noexpand\bibrangedash
+ \blx@range@out@item@process{\unexpanded{#2}}}}%
+ \blx@tempc}
+ {\blx@range@process{#1}{#2}}}}}
+
+\def\blx@firstpage@range#1\bibrangedash#2\bibrangedash#3&{%
+ \ifblank{#3}
+ {\blx@firstpage@endash#1––&}
+ {\ifblank{#1}
+ {\begingroup
+ \protected@edef\blx@tempc{\endgroup
+ \blx@range@out@value{%
+ \noexpand\bibrangedash
+ \blx@range@out@item@process{\unexpanded{#2}}}}%
+ \blx@tempc}
+ {\begingroup
+ \protected@edef\blx@tempc{\endgroup
+ \blx@range@out@value{%
+ \blx@range@out@item@process{\unexpanded{#1}}}}%
+ \blx@tempc}}}
+
+\def\blx@firstpage@endash#1–#2–#3&{%
+ \ifblank{#3}
+ {\blx@firstpage@hyphen#1--&}
+ {\ifblank{#1}
+ {\begingroup
+ \protected@edef\blx@tempc{\endgroup
+ \blx@range@out@value{%
+ \noexpand\bibrangedash
+ \blx@range@out@item@process{\unexpanded{#2}}}}%
+ \blx@tempc}
+ {\begingroup
+ \protected@edef\blx@tempc{\endgroup
+ \blx@range@out@value{%
+ \blx@range@out@item@process{\unexpanded{#1}}}}%
+ \blx@tempc}}}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/cbx/alphabetic-ms.cbx b/macros/latex/contrib/biblatex-ms/latex/cbx/alphabetic-ms.cbx
new file mode 100644
index 0000000000..e1a6424156
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/cbx/alphabetic-ms.cbx
@@ -0,0 +1,148 @@
+\ProvidesFile{alphabetic-ms.cbx}
+[\abx@cbxid]
+
+\ExecuteBibliographyOptions{labelalpha,autocite=inline}
+
+\renewcommand*{\iffinalcitedelim}{%
+ \ifnumequal{\value{textcitecount}}{\value{textcitetotal}-1}}
+
+\providebool{bbx:subentry}
+\newbool{cbx:parens}
+
+\DeclareFieldFormat{entrysetcount}{\mkbibparens{\mknumalph{#1}}}
+
+\newbibmacro*{cite}{%
+ \printtext[bibhyperref]{%
+ \printfield{labelprefix}%
+ \printfield{labelalpha}%
+ \printfield{extraalpha}%
+ \ifbool{bbx:subentry}
+ {\printfield{entrysetcount}}
+ {}}}
+
+\newbibmacro*{textcite}{%
+ \iffieldequals{namehash}{\cbx@lasthash}
+ {\setunit{\multicitedelim}}
+ {\ifnameundef{labelname}
+ {\printfield[citetitle]{labeltitle}}
+ {\printnames{labelname}}%
+ \setunit{%
+ \global\booltrue{cbx:parens}%
+ \printdelim{namelabeldelim}\bibopenbracket}%
+ \stepcounter{textcitecount}%
+ \savefield{namehash}{\cbx@lasthash}}%
+ \ifnumequal{\value{citecount}}{1}
+ {\usebibmacro{prenote}}
+ {}%
+ \usebibmacro{cite}%
+ \setunit{%
+ \ifbool{cbx:parens}
+ {\bibclosebracket\global\boolfalse{cbx:parens}}
+ {}%
+ \textcitedelim}}
+
+\newbibmacro*{textcite:init}{%
+ \ifnumless{\value{multicitecount}}{2}
+ {\global\boolfalse{cbx:parens}%
+ \global\undef\cbx@lasthash}
+ {\global\undef\cbx@lasthash}}
+
+\newbibmacro*{textcite:postnote}{%
+ \usebibmacro{postnote}%
+ \ifthenelse{\value{multicitecount}=\value{multicitetotal}}
+ {\setunit{}%
+ \printtext{%
+ \ifbool{cbx:parens}
+ {\bibclosebracket\global\boolfalse{cbx:parens}}
+ {}}}
+ {\setunit{%
+ \ifbool{cbx:parens}
+ {\bibclosebracket\global\boolfalse{cbx:parens}}
+ {}%
+ \textcitedelim}}}
+
+\DeclareCiteCommand{\cite}[\mkbibbrackets]
+ {\usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite}}
+ {\multicitedelim}
+ {\usebibmacro{postnote}}
+
+\DeclareCiteCommand{\parencite}[\mkbibbrackets]
+ {\usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite}}
+ {\multicitedelim}
+ {\usebibmacro{postnote}}
+
+\DeclareCiteCommand{\footcite}[\mkbibfootnote]
+ {\usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite}}
+ {\multicitedelim}
+ {\usebibmacro{postnote}}
+
+\DeclareCiteCommand{\footcitetext}[\mkbibfootnotetext]
+ {\usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite}}
+ {\multicitedelim}
+ {\usebibmacro{postnote}}
+
+\DeclareCiteCommand{\smartcite}[\iffootnote\mkbibbrackets\mkbibfootnote]
+ {\usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite}}
+ {\multicitedelim}
+ {\usebibmacro{postnote}}
+
+\DeclareCiteCommand{\cbx@textcite}
+ {\usebibmacro{textcite:init}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{textcite}}
+ {}
+ {\usebibmacro{textcite:postnote}}
+
+\DeclareCiteCommand{\textcite}[\cbx@textcite@init\cbx@textcite]
+ {\gdef\cbx@savedkeys{}%
+ \citetrackerfalse%
+ \pagetrackerfalse%
+ \DeferNextCitekeyHook%
+ \usebibmacro{textcite:init}}
+ {\ifthenelse{\iffirstcitekey\AND\value{multicitetotal}>0}
+ {\protected@xappto\cbx@savedcites{()(\thefield{multipostnote})}%
+ \global\clearfield{multipostnote}}
+ {}%
+ \xappto\cbx@savedkeys{\thefield{entrykey},}%
+ \iffieldequals{namehash}{\cbx@lasthash}
+ {}
+ {\stepcounter{textcitetotal}%
+ \savefield{namehash}{\cbx@lasthash}}}
+ {}
+ {\protected@xappto\cbx@savedcites{%
+ [\thefield{prenote}][\thefield{postnote}]{\cbx@savedkeys}}}
+
+% textcite has nested \DeclareCiteCommand definitions for textcite and we want to use
+% the normal textcite context
+\DeclareDelimcontextAlias{cbx@textcite}{textcite}
+
+\newrobustcmd{\cbx@textcite@init}[2]{%
+ \setcounter{textcitetotal}{0}%
+ \setcounter{textcitecount}{0}%
+ \def\cbx@savedcites{#1}#2%
+ \ifnumgreater{\value{textcitetotal}}{0}
+ {\cbx@savedcites}
+ {}}
+
+\DeclareMultiCiteCommand{\cbx@textcites}{\cbx@textcite}{}
+\DeclareMultiCiteCommand{\textcites}[\cbx@textcites@init\cbx@textcites]{\textcite}{}
+
+\let\cbx@textcites@init\cbx@textcite@init
+\pretocmd{\cbx@textcites@init}{\UseNextMultiCiteHook}{}{}
+
+\DeclareMultiCiteCommand{\cites}[\mkbibbrackets]{\cite}{\multicitedelim}
+\DeclareMultiCiteCommand{\parencites}[\mkbibbrackets]{\parencite}{\multicitedelim}
+\DeclareMultiCiteCommand{\smartcites}[\iffootnote\mkbibbrackets\mkbibfootnote]
+ {\smartcite}{\multicitedelim}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/cbx/alphabetic-verb-ms.cbx b/macros/latex/contrib/biblatex-ms/latex/cbx/alphabetic-verb-ms.cbx
new file mode 100644
index 0000000000..da506fa474
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/cbx/alphabetic-verb-ms.cbx
@@ -0,0 +1,88 @@
+\ProvidesFile{alphabetic-verb-ms.cbx}
+[\abx@cbxid]
+
+\ExecuteBibliographyOptions{labelalpha,autocite=inline}
+
+\renewcommand*{\iffinalcitedelim}{\iflastcitekey}
+
+\providebool{bbx:subentry}
+
+\DeclareFieldFormat{entrysetcount}{\mkbibparens{\mknumalph{#1}}}
+
+\newbibmacro*{cite}{%
+ \printtext[bibhyperref]{%
+ \printfield{labelprefix}%
+ \printfield{labelalpha}%
+ \printfield{extraalpha}%
+ \ifbool{bbx:subentry}
+ {\printfield{entrysetcount}}
+ {}}}
+
+\newbibmacro*{textcite}{%
+ \ifnameundef{labelname}
+ {\printfield[citetitle]{labeltitle}}
+ {\printnames{labelname}}%
+ \printdelim{namelabeldelim}\bibopenbracket
+ \ifnumequal{\value{citecount}}{1}
+ {\usebibmacro{prenote}}
+ {}%
+ \usebibmacro{cite}}
+
+\DeclareCiteCommand{\cite}
+ {\bibopenbracket
+ \usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \ifnumgreater{\value{citecount}}{1}
+ {\bibopenbracket}
+ {}%
+ \usebibmacro{cite}}
+ {\bibclosebracket\multicitedelim}
+ {\usebibmacro{postnote}%
+ \bibclosebracket}
+
+\DeclareCiteCommand{\parencite}[\mkbibbrackets]
+ {\usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite}}
+ {\multicitedelim}
+ {\usebibmacro{postnote}}
+
+\DeclareCiteCommand{\footcite}[\mkbibfootnote]
+ {\usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite}}
+ {\multicitedelim}
+ {\usebibmacro{postnote}}
+
+\DeclareCiteCommand{\footcitetext}[\mkbibfootnotetext]
+ {\usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite}}
+ {\multicitedelim}
+ {\usebibmacro{postnote}}
+
+\DeclareCiteCommand{\smartcite}[\iffootnote\mkbibbrackets\mkbibfootnote]
+ {\usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite}}
+ {\multicitedelim}
+ {\usebibmacro{postnote}}
+
+\DeclareCiteCommand{\textcite}
+ {}
+ {\usebibmacro{citeindex}%
+ \iffirstcitekey
+ {\setcounter{textcitetotal}{1}}
+ {\stepcounter{textcitetotal}%
+ \textcitedelim}%
+ \usebibmacro{textcite}}
+ {\bibclosebracket}
+ {\usebibmacro{postnote}%
+ \bibclosebracket}
+
+\DeclareMultiCiteCommand{\parencites}[\mkbibbrackets]{\parencite}{\multicitedelim}
+\DeclareMultiCiteCommand{\smartcites}[\iffootnote\mkbibbrackets\mkbibfootnote]
+ {\smartcite}{\multicitedelim}
+\DeclareMultiCiteCommand{\textcites}{\textcite}{}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/cbx/authortitle-comp-ms.cbx b/macros/latex/contrib/biblatex-ms/latex/cbx/authortitle-comp-ms.cbx
new file mode 100644
index 0000000000..6c4e411fc8
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/cbx/authortitle-comp-ms.cbx
@@ -0,0 +1,198 @@
+\ProvidesFile{authortitle-comp-ms.cbx}
+[\abx@cbxid]
+
+\ExecuteBibliographyOptions{uniquename,uniquelist,sortcites,autocite=footnote}
+
+\renewcommand*{\iffinalcitedelim}{%
+ \ifnameundef{labelname}
+ {\ifnumequal{\value{textcitecount}}{\value{textcitetotal}}}
+ {\ifnumequal{\value{textcitecount}}{\value{textcitetotal}-1}}}
+
+\newbool{cbx:parens}
+
+\newbibmacro*{cite:init}{%
+ \ifnumless{\value{multicitecount}}{2}
+ {\global\boolfalse{cbx:parens}%
+ \global\undef\cbx@lasthash}
+ {\iffieldundef{prenote}
+ {}
+ {\global\undef\cbx@lasthash}}}
+
+\newbibmacro*{cite:reinit}{%
+ \global\undef\cbx@lasthash}
+
+\newbibmacro*{cite}{%
+ \iffieldundef{shorthand}
+ {\iffieldequals{namehash}{\cbx@lasthash}
+ {\setunit{\compcitedelim}}
+ {\printnames{labelname}%
+ \setunit*{\printdelim{nametitledelim}}%
+ \savefield{namehash}{\cbx@lasthash}}%
+ \usebibmacro{cite:title}}
+ {\usebibmacro{cite:shorthand}%
+ \usebibmacro{cite:reinit}}%
+ \setunit{\multicitedelim}}
+
+\newbibmacro*{citetitle}{%
+ \iffieldundef{shorthand}
+ {\usebibmacro{cite:title}}
+ {\usebibmacro{cite:shorthand}}%
+ \setunit{\multicitedelim}}
+
+\newbibmacro*{textcite}{%
+ \iffieldequals{namehash}{\cbx@lasthash}
+ {\setunit{\compcitedelim}}
+ {\printnames{labelname}%
+ \setunit*{%
+ \global\booltrue{cbx:parens}%
+ \printdelim{nametitledelim}\bibopenparen}%
+ \stepcounter{textcitecount}%
+ \savefield{namehash}{\cbx@lasthash}}%
+ \ifnumequal{\value{citecount}}{1}
+ {\usebibmacro{prenote}}
+ {}%
+ \iffieldundef{shorthand}
+ {\usebibmacro{cite:title}}%
+ {\usebibmacro{cite:shorthand}}%
+ \setunit{%
+ \ifbool{cbx:parens}
+ {\bibcloseparen\global\boolfalse{cbx:parens}}
+ {}%
+ \textcitedelim}}
+
+\newbibmacro*{cite:title}{%
+ \printtext[bibhyperref]{\printfield[citetitle]{labeltitle}}}
+
+\newbibmacro*{cite:shorthand}{%
+ \printtext[bibhyperref]{\printfield{shorthand}}}
+
+\newbibmacro*{textcite:postnote}{%
+ \ifnameundef{labelname}
+ {\setunit{%
+ \global\booltrue{cbx:parens}%
+ \printdelim{extpostnotedelim}\bibopenparen}}
+ {\setunit{\printdelim{postnotedelim}}}%
+ \printfield{postnote}%
+ \ifthenelse{\value{multicitecount}=\value{multicitetotal}}
+ {\setunit{}%
+ \printtext{%
+ \ifbool{cbx:parens}
+ {\bibcloseparen\global\boolfalse{cbx:parens}}
+ {}}}
+ {\setunit{%
+ \ifbool{cbx:parens}
+ {\bibcloseparen\global\boolfalse{cbx:parens}}
+ {}%
+ \textcitedelim}}}
+
+\DeclareCiteCommand{\cite}
+ {\usebibmacro{cite:init}%
+ \usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite}}
+ {}
+ {\usebibmacro{postnote}}
+
+\DeclareCiteCommand*{\cite}
+ {\usebibmacro{cite:init}%
+ \usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{citetitle}}
+ {}
+ {\usebibmacro{postnote}}
+
+\DeclareCiteCommand{\parencite}[\mkbibparens]
+ {\usebibmacro{cite:init}%
+ \usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite}}
+ {}
+ {\usebibmacro{postnote}}
+
+\DeclareCiteCommand*{\parencite}[\mkbibparens]
+ {\usebibmacro{cite:init}%
+ \usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{citetitle}}
+ {}
+ {\usebibmacro{postnote}}
+
+\DeclareCiteCommand{\footcite}[\mkbibfootnote]
+ {\usebibmacro{cite:init}%
+ \usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite}}
+ {}
+ {\usebibmacro{postnote}}
+
+\DeclareCiteCommand{\footcitetext}[\mkbibfootnotetext]
+ {\usebibmacro{cite:init}%
+ \usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite}}
+ {}
+ {\usebibmacro{postnote}}
+
+\DeclareCiteCommand{\smartcite}[\iffootnote\mkbibparens\mkbibfootnote]
+ {\usebibmacro{cite:init}%
+ \usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite}}
+ {}
+ {\usebibmacro{postnote}}
+
+\DeclareCiteCommand{\cbx@textcite}
+ {\usebibmacro{cite:init}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{textcite}}
+ {}
+ {\usebibmacro{textcite:postnote}}
+
+\DeclareCiteCommand{\textcite}[\cbx@textcite@init\cbx@textcite]
+ {\gdef\cbx@savedkeys{}%
+ \citetrackerfalse%
+ \pagetrackerfalse%
+ \DeferNextCitekeyHook%
+ \usebibmacro{cite:init}}
+ {\ifthenelse{\iffirstcitekey\AND\value{multicitetotal}>0}
+ {\protected@xappto\cbx@savedcites{()(\thefield{multipostnote})}%
+ \global\clearfield{multipostnote}}
+ {}%
+ \xappto\cbx@savedkeys{\thefield{entrykey},}%
+ \iffieldequals{namehash}{\cbx@lasthash}
+ {}
+ {\stepcounter{textcitetotal}%
+ \savefield{namehash}{\cbx@lasthash}}}
+ {}
+ {\protected@xappto\cbx@savedcites{%
+ [\thefield{prenote}][\thefield{postnote}]{\cbx@savedkeys}}}
+
+% textcite has nested \DeclareCiteCommand definitions for textcite and we want to use
+% the normal textcite context
+\DeclareDelimcontextAlias{cbx@textcite}{textcite}
+
+\newrobustcmd{\cbx@textcite@init}[2]{%
+ \setcounter{textcitetotal}{0}%
+ \setcounter{textcitecount}{0}%
+ \def\cbx@savedcites{#1}#2%
+ \ifnumgreater{\value{textcitetotal}}{0}
+ {\cbx@savedcites}
+ {}}
+
+\DeclareMultiCiteCommand{\cbx@textcites}{\cbx@textcite}{}
+\DeclareMultiCiteCommand{\textcites}[\cbx@textcites@init\cbx@textcites]{\textcite}{}
+
+\let\cbx@textcites@init\cbx@textcite@init
+\pretocmd{\cbx@textcites@init}{\UseNextMultiCiteHook}{}{}
+
+\DeclareMultiCiteCommand{\cites}{\cite}{\setunit{\multicitedelim}}
+\DeclareMultiCiteCommand{\parencites}[\mkbibparens]
+ {\parencite}{\setunit{\multicitedelim}}
+\DeclareMultiCiteCommand{\footcites}[\mkbibfootnote]
+ {\footcite}{\setunit{\multicitedelim}}
+\DeclareMultiCiteCommand{\footcitetexts}[\mkbibfootnotetext]
+ {\footcitetext}{\setunit{\multicitedelim}}
+\DeclareMultiCiteCommand{\smartcites}[\iffootnote\mkbibparens\mkbibfootnote]
+ {\smartcite}{\setunit{\multicitedelim}}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/cbx/authortitle-ibid-ms.cbx b/macros/latex/contrib/biblatex-ms/latex/cbx/authortitle-ibid-ms.cbx
new file mode 100644
index 0000000000..1e91a28fd2
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/cbx/authortitle-ibid-ms.cbx
@@ -0,0 +1,143 @@
+\ProvidesFile{authortitle-ibid-ms.cbx}
+[\abx@cbxid]
+
+\ExecuteBibliographyOptions{uniquename,uniquelist,ibidtracker=constrict,
+ pagetracker,autocite=footnote}
+
+\providecommand*{\mkibid}[1]{#1}
+\renewcommand*{\iffinalcitedelim}{\iflastcitekey}
+
+\newbool{cbx:parens}
+\newbool{cbx:loccit}
+
+\DeclareBibliographyOption[boolean]{ibidpage}[true]{%
+ \ifstrequal{#1}{true}
+ {\ExecuteBibliographyOptions{loccittracker=constrict}}
+ {\ExecuteBibliographyOptions{loccittracker=false}}}
+
+\newbibmacro*{cite}{%
+ \global\boolfalse{cbx:loccit}%
+ \iffieldundef{shorthand}
+ {\ifthenelse{\ifciteibid\AND\NOT\iffirstonpage}
+ {\usebibmacro{cite:ibid}}
+ {\printnames{labelname}%
+ \setunit*{\printdelim{nametitledelim}}%
+ \usebibmacro{cite:title}}}%
+ {\usebibmacro{cite:shorthand}}}
+
+\newbibmacro*{citetitle}{%
+ \global\boolfalse{cbx:loccit}%
+ \iffieldundef{shorthand}
+ {\ifthenelse{\ifciteibid\AND\NOT\iffirstonpage}
+ {\usebibmacro{cite:ibid}}
+ {\usebibmacro{cite:title}}}%
+ {\usebibmacro{cite:shorthand}}}
+
+\newbibmacro*{textcite}{%
+ \global\boolfalse{cbx:loccit}%
+ \printnames{labelname}%
+ \setunit*{%
+ \global\booltrue{cbx:parens}%
+ \printdelim{nametitledelim}\bibopenparen}%
+ \ifnumequal{\value{citecount}}{1}
+ {\usebibmacro{prenote}}
+ {}%
+ \iffieldundef{shorthand}
+ {\ifthenelse{\ifciteibid\AND\NOT\iffirstonpage}
+ {\usebibmacro{cite:ibid}}
+ {\usebibmacro{cite:title}}}%
+ {\usebibmacro{cite:shorthand}}}
+
+\newbibmacro*{cite:title}{%
+ \printtext[bibhyperref]{%
+ \printfield[citetitle]{labeltitle}}}
+
+\newbibmacro*{cite:shorthand}{%
+ \printtext[bibhyperref]{\printfield{shorthand}}}
+
+\newbibmacro*{cite:ibid}{%
+ \printtext[bibhyperref]{\bibstring[\mkibid]{ibidem}}%
+ \ifloccit
+ {\global\booltrue{cbx:loccit}}
+ {}}
+
+\newbibmacro*{cite:postnote}{%
+ \ifbool{cbx:loccit}
+ {}
+ {\usebibmacro{postnote}}}
+
+\newbibmacro*{textcite:postnote}{%
+ \ifthenelse{\iffieldundef{postnote}\OR\boolean{cbx:loccit}}
+ {\ifbool{cbx:parens}
+ {\bibcloseparen}
+ {}}
+ {\ifbool{cbx:parens}
+ {\printdelim{postnotedelim}}
+ {\printdelim{extpostnotedelim}\bibopenparen}%
+ \printfield{postnote}\bibcloseparen}}
+
+\DeclareCiteCommand{\cite}
+ {\usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite}}
+ {\multicitedelim}
+ {\usebibmacro{cite:postnote}}
+
+\DeclareCiteCommand*{\cite}
+ {\usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{citetitle}}
+ {\multicitedelim}
+ {\usebibmacro{postnote}}
+
+\DeclareCiteCommand{\parencite}[\mkbibparens]
+ {\usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite}}
+ {\multicitedelim}
+ {\usebibmacro{cite:postnote}}
+
+\DeclareCiteCommand*{\parencite}[\mkbibparens]
+ {\usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{citetitle}}
+ {\multicitedelim}
+ {\usebibmacro{cite:postnote}}
+
+\DeclareCiteCommand{\footcite}[\mkbibfootnote]
+ {\usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite}}
+ {\multicitedelim}
+ {\usebibmacro{cite:postnote}}
+
+\DeclareCiteCommand{\footcitetext}[\mkbibfootnotetext]
+ {\usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite}}
+ {\multicitedelim}
+ {\usebibmacro{cite:postnote}}
+
+\DeclareCiteCommand{\smartcite}[\iffootnote\mkbibparens\mkbibfootnote]
+ {\usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite}}
+ {\multicitedelim}
+ {\usebibmacro{cite:postnote}}
+
+\DeclareCiteCommand{\textcite}
+ {\boolfalse{cbx:parens}}
+ {\usebibmacro{citeindex}%
+ \iffirstcitekey
+ {\setcounter{textcitetotal}{1}}
+ {\stepcounter{textcitetotal}%
+ \textcitedelim}%
+ \usebibmacro{textcite}}
+ {\ifbool{cbx:parens}
+ {\bibcloseparen\boolfalse{cbx:parens}}
+ {}}
+ {\usebibmacro{textcite:postnote}}
+
+\DeclareMultiCiteCommand{\textcites}{\textcite}{}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/cbx/authortitle-icomp-ms.cbx b/macros/latex/contrib/biblatex-ms/latex/cbx/authortitle-icomp-ms.cbx
new file mode 100644
index 0000000000..27ea56c8db
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/cbx/authortitle-icomp-ms.cbx
@@ -0,0 +1,227 @@
+\ProvidesFile{authortitle-icomp-ms.cbx}
+[\abx@cbxid]
+
+\ExecuteBibliographyOptions{uniquename,uniquelist,ibidtracker=constrict,
+ pagetracker,sortcites,autocite=footnote}
+
+\providecommand*{\mkibid}[1]{#1}
+\renewcommand*{\iffinalcitedelim}{%
+ \ifnameundef{labelname}
+ {\ifnumequal{\value{textcitecount}}{\value{textcitetotal}}}
+ {\ifnumequal{\value{textcitecount}}{\value{textcitetotal}-1}}}
+
+\newbool{cbx:parens}
+\newbool{cbx:loccit}
+
+\DeclareBibliographyOption[boolean]{ibidpage}[true]{%
+ \ifstrequal{#1}{true}
+ {\ExecuteBibliographyOptions{loccittracker=constrict}}
+ {\ExecuteBibliographyOptions{loccittracker=false}}}
+
+\newbibmacro*{cite:init}{%
+ \global\boolfalse{cbx:loccit}%
+ \ifnumless{\value{multicitecount}}{2}
+ {\global\boolfalse{cbx:parens}%
+ \global\undef\cbx@lasthash}
+ {\iffieldundef{prenote}
+ {}
+ {\global\undef\cbx@lasthash}}}
+
+\newbibmacro*{cite:reinit}{%
+ \global\undef\cbx@lasthash}
+
+\newbibmacro*{cite}{%
+ \iffieldundef{shorthand}
+ {\ifthenelse{\ifciteibid\AND\NOT\iffirstonpage}
+ {\usebibmacro{cite:ibid}}
+ {\iffieldequals{namehash}{\cbx@lasthash}
+ {\setunit{\compcitedelim}}
+ {\printnames{labelname}%
+ \setunit*{\printdelim{nametitledelim}}%
+ \savefield{namehash}{\cbx@lasthash}}%
+ \usebibmacro{cite:title}}}%
+ {\usebibmacro{cite:shorthand}%
+ \usebibmacro{cite:reinit}}%
+ \setunit{\multicitedelim}}
+
+\newbibmacro*{citetitle}{%
+ \iffieldundef{shorthand}
+ {\ifthenelse{\ifciteibid\AND\NOT\iffirstonpage}
+ {\usebibmacro{cite:ibid}}
+ {\usebibmacro{cite:title}}}%
+ {\usebibmacro{cite:shorthand}}%
+ \setunit{\multicitedelim}}
+
+\newbibmacro*{textcite}{%
+ \iffieldequals{namehash}{\cbx@lasthash}
+ {\setunit{\compcitedelim}}
+ {\printnames{labelname}%
+ \setunit*{%
+ \global\booltrue{cbx:parens}%
+ \printdelim{nametitledelim}\bibopenparen}%
+ \stepcounter{textcitecount}%
+ \savefield{namehash}{\cbx@lasthash}}%
+ \ifnumequal{\value{citecount}}{1}
+ {\usebibmacro{prenote}}
+ {}%
+ \iffieldundef{shorthand}
+ {\ifthenelse{\ifciteibid\AND\NOT\iffirstonpage}
+ {\usebibmacro{cite:ibid}}
+ {\usebibmacro{cite:title}}}%
+ {\usebibmacro{cite:shorthand}}%
+ \setunit{%
+ \ifbool{cbx:parens}
+ {\bibcloseparen\global\boolfalse{cbx:parens}}
+ {}%
+ \textcitedelim}}
+
+\newbibmacro*{cite:title}{%
+ \printtext[bibhyperref]{\printfield[citetitle]{labeltitle}}}
+
+\newbibmacro*{cite:shorthand}{%
+ \printtext[bibhyperref]{\printfield{shorthand}}}
+
+\newbibmacro*{cite:ibid}{%
+ \printtext[bibhyperref]{\bibstring[\mkibid]{ibidem}}%
+ \ifloccit
+ {\global\booltrue{cbx:loccit}}
+ {}}
+
+\newbibmacro*{cite:postnote}{%
+ \ifbool{cbx:loccit}
+ {}
+ {\setunit{\printdelim{postnotedelim}}%
+ \printfield{postnote}}}
+
+\newbibmacro*{textcite:postnote}{%
+ \ifbool{cbx:loccit}
+ {}
+ {\ifnameundef{labelname}
+ {\setunit{%
+ \global\booltrue{cbx:parens}%
+ \printdelim{extpostnotedelim}\bibopenparen}}
+ {\setunit{\printdelim{postnotedelim}}}%
+ \printfield{postnote}}%
+ \ifthenelse{\value{multicitecount}=\value{multicitetotal}}
+ {\setunit{}%
+ \printtext{%
+ \ifbool{cbx:parens}
+ {\bibcloseparen\global\boolfalse{cbx:parens}}
+ {}}}
+ {\setunit{%
+ \ifbool{cbx:parens}
+ {\bibcloseparen\global\boolfalse{cbx:parens}}
+ {}%
+ \textcitedelim}}}
+
+\DeclareCiteCommand{\cite}
+ {\usebibmacro{cite:init}%
+ \usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite}}
+ {}
+ {\usebibmacro{cite:postnote}}
+
+\DeclareCiteCommand*{\cite}
+ {\usebibmacro{cite:init}%
+ \usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{citetitle}}
+ {}
+ {\usebibmacro{cite:postnote}}
+
+\DeclareCiteCommand{\parencite}[\mkbibparens]
+ {\usebibmacro{cite:init}%
+ \usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite}}
+ {}
+ {\usebibmacro{cite:postnote}}
+
+\DeclareCiteCommand*{\parencite}[\mkbibparens]
+ {\usebibmacro{cite:init}%
+ \usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{citetitle}}
+ {}
+ {\usebibmacro{cite:postnote}}
+
+\DeclareCiteCommand{\footcite}[\mkbibfootnote]
+ {\usebibmacro{cite:init}%
+ \usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite}}
+ {}
+ {\usebibmacro{cite:postnote}}
+
+\DeclareCiteCommand{\footcitetext}[\mkbibfootnotetext]
+ {\usebibmacro{cite:init}%
+ \usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite}}
+ {}
+ {\usebibmacro{cite:postnote}}
+
+\DeclareCiteCommand{\smartcite}[\iffootnote\mkbibparens\mkbibfootnote]
+ {\usebibmacro{cite:init}%
+ \usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite}}
+ {}
+ {\usebibmacro{cite:postnote}}
+
+\DeclareCiteCommand{\cbx@textcite}
+ {\usebibmacro{cite:init}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{textcite}}
+ {}
+ {\usebibmacro{textcite:postnote}}
+
+\DeclareCiteCommand{\textcite}[\cbx@textcite@init\cbx@textcite]
+ {\gdef\cbx@savedkeys{}%
+ \citetrackerfalse%
+ \pagetrackerfalse%
+ \DeferNextCitekeyHook%
+ \usebibmacro{cite:init}}
+ {\ifthenelse{\iffirstcitekey\AND\value{multicitetotal}>0}
+ {\protected@xappto\cbx@savedcites{()(\thefield{multipostnote})}%
+ \global\clearfield{multipostnote}}
+ {}%
+ \xappto\cbx@savedkeys{\thefield{entrykey},}%
+ \iffieldequals{namehash}{\cbx@lasthash}
+ {}
+ {\stepcounter{textcitetotal}%
+ \savefield{namehash}{\cbx@lasthash}}}
+ {}
+ {\protected@xappto\cbx@savedcites{%
+ [\thefield{prenote}][\thefield{postnote}]{\cbx@savedkeys}}}
+
+% textcite has nested \DeclareCiteCommand definitions for textcite and we want to use
+% the normal textcite context
+\DeclareDelimcontextAlias{cbx@textcite}{textcite}
+
+\newrobustcmd{\cbx@textcite@init}[2]{%
+ \setcounter{textcitetotal}{0}%
+ \setcounter{textcitecount}{0}%
+ \def\cbx@savedcites{#1}#2%
+ \ifnumgreater{\value{textcitetotal}}{0}
+ {\cbx@savedcites}
+ {}}
+
+\DeclareMultiCiteCommand{\cbx@textcites}{\cbx@textcite}{}
+\DeclareMultiCiteCommand{\textcites}[\cbx@textcites@init\cbx@textcites]{\textcite}{}
+
+\let\cbx@textcites@init\cbx@textcite@init
+\pretocmd{\cbx@textcites@init}{\UseNextMultiCiteHook}{}{}
+
+\DeclareMultiCiteCommand{\cites}{\cite}{\setunit{\multicitedelim}}
+\DeclareMultiCiteCommand{\parencites}[\mkbibparens]
+ {\parencite}{\setunit{\multicitedelim}}
+\DeclareMultiCiteCommand{\footcites}[\mkbibfootnote]
+ {\footcite}{\setunit{\multicitedelim}}
+\DeclareMultiCiteCommand{\footcitetexts}[\mkbibfootnotetext]
+ {\footcitetext}{\setunit{\multicitedelim}}
+\DeclareMultiCiteCommand{\smartcites}[\iffootnote\mkbibparens\mkbibfootnote]
+ {\smartcite}{\setunit{\multicitedelim}}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/cbx/authortitle-ms.cbx b/macros/latex/contrib/biblatex-ms/latex/cbx/authortitle-ms.cbx
new file mode 100644
index 0000000000..9eec2b6036
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/cbx/authortitle-ms.cbx
@@ -0,0 +1,115 @@
+\ProvidesFile{authortitle-ms.cbx}
+[\abx@cbxid]
+
+\ExecuteBibliographyOptions{uniquename,uniquelist,autocite=footnote}
+
+\renewcommand*{\iffinalcitedelim}{\iflastcitekey}
+
+\newbool{cbx:parens}
+
+\newbibmacro*{cite}{%
+ \iffieldundef{shorthand}
+ {\printnames{labelname}%
+ \setunit*{\printdelim{nametitledelim}}%
+ \usebibmacro{cite:title}}%
+ {\usebibmacro{cite:shorthand}}}
+
+\newbibmacro*{citetitle}{%
+ \iffieldundef{shorthand}
+ {\usebibmacro{cite:title}}%
+ {\usebibmacro{cite:shorthand}}}
+
+\newbibmacro*{textcite}{%
+ \printnames{labelname}%
+ \setunit*{%
+ \global\booltrue{cbx:parens}%
+ \printdelim{nametitledelim}\bibopenparen}%
+ \ifnumequal{\value{citecount}}{1}
+ {\usebibmacro{prenote}}
+ {}%
+ \iffieldundef{shorthand}
+ {\usebibmacro{cite:title}}%
+ {\usebibmacro{cite:shorthand}}}
+
+\newbibmacro*{cite:title}{%
+ \printtext[bibhyperref]{%
+ \printfield[citetitle]{labeltitle}}}
+
+\newbibmacro*{cite:shorthand}{%
+ \printtext[bibhyperref]{\printfield{shorthand}}}
+
+\newbibmacro*{textcite:postnote}{%
+ \iffieldundef{postnote}
+ {\ifbool{cbx:parens}
+ {\bibcloseparen}
+ {}}
+ {\ifbool{cbx:parens}
+ {\printdelim{postnotedelim}}
+ {\printdelim{extpostnotedelim}\bibopenparen}%
+ \printfield{postnote}\bibcloseparen}}
+
+\DeclareCiteCommand{\cite}
+ {\usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite}}
+ {\multicitedelim}
+ {\usebibmacro{postnote}}
+
+\DeclareCiteCommand*{\cite}
+ {\usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{citetitle}}
+ {\multicitedelim}
+ {\usebibmacro{postnote}}
+
+\DeclareCiteCommand{\parencite}[\mkbibparens]
+ {\usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite}}
+ {\multicitedelim}
+ {\usebibmacro{postnote}}
+
+\DeclareCiteCommand*{\parencite}[\mkbibparens]
+ {\usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{citetitle}}
+ {\multicitedelim}
+ {\usebibmacro{postnote}}
+
+\DeclareCiteCommand{\footcite}[\mkbibfootnote]
+ {\usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite}}
+ {\multicitedelim}
+ {\usebibmacro{postnote}}
+
+\DeclareCiteCommand{\footcitetext}[\mkbibfootnotetext]
+ {\usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite}}
+ {\multicitedelim}
+ {\usebibmacro{postnote}}
+
+\DeclareCiteCommand{\smartcite}[\iffootnote\mkbibparens\mkbibfootnote]
+ {\usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite}}
+ {\multicitedelim}
+ {\usebibmacro{postnote}}
+
+\DeclareCiteCommand{\textcite}
+ {\boolfalse{cbx:parens}}
+ {\usebibmacro{citeindex}%
+ \iffirstcitekey
+ {\setcounter{textcitetotal}{1}}
+ {\stepcounter{textcitetotal}%
+ \textcitedelim}%
+ \usebibmacro{textcite}}
+ {\ifbool{cbx:parens}
+ {\bibcloseparen\global\boolfalse{cbx:parens}}
+ {}}
+ {\usebibmacro{textcite:postnote}}
+
+\DeclareMultiCiteCommand{\textcites}{\textcite}{}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/cbx/authortitle-tcomp-ms.cbx b/macros/latex/contrib/biblatex-ms/latex/cbx/authortitle-tcomp-ms.cbx
new file mode 100644
index 0000000000..3facccb5d0
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/cbx/authortitle-tcomp-ms.cbx
@@ -0,0 +1,90 @@
+\ProvidesFile{authortitle-tcomp-ms.cbx}
+[\abx@cbxid]
+
+\RequireCitationStyle{authortitle-comp}
+\ExecuteBibliographyOptions{singletitle,uniquename,uniquelist,autocite=inline}
+
+\renewcommand*{\iffinalcitedelim}{%
+ \ifnumequal{\value{textcitecount}}{\value{textcitetotal}-1}}
+
+\renewbibmacro*{cite}{%
+ \iffieldundef{shorthand}
+ {\iffieldequals{namehash}{\cbx@lasthash}
+ {\setunit{\compcitedelim}%
+ \usebibmacro{cite:title}}
+ {\ifnameundef{labelname}
+ {\usebibmacro{cite:title}}
+ {\ifsingletitle
+ {\printtext[bibhyperref]{\printnames{labelname}}}
+ {\printnames{labelname}%
+ \setunit{\printdelim{nametitledelim}}%
+ \usebibmacro{cite:title}}}%
+ \savefield{namehash}{\cbx@lasthash}}}
+ {\usebibmacro{cite:shorthand}%
+ \usebibmacro{cite:reinit}}%
+ \setunit{\multicitedelim}}
+
+\renewbibmacro*{citetitle}{%
+ \iffieldundef{shorthand}
+ {\iffieldequals{namehash}{\cbx@lasthash}
+ {\setunit{\compcitedelim}}
+ {\savefield{namehash}{\cbx@lasthash}}%
+ \usebibmacro{cite:title}}
+ {\usebibmacro{cite:shorthand}%
+ \usebibmacro{cite:reinit}}%
+ \setunit{\multicitedelim}}
+
+\renewbibmacro*{textcite}{%
+ \iffieldequals{namehash}{\cbx@lasthash}
+ {\setunit{\compcitedelim}%
+ \iffieldundef{shorthand}
+ {\usebibmacro{cite:title}}%
+ {\usebibmacro{cite:shorthand}}}
+ {\ifnameundef{labelname}
+ {\ifnumequal{\value{citecount}}{1}
+ {\usebibmacro{prenote}}
+ {}%
+ \iffieldundef{shorthand}
+ {\usebibmacro{cite:title}}%
+ {\usebibmacro{cite:shorthand}}}
+ {\ifthenelse{\ifsingletitle\AND
+ \(\iffieldundef{prenote}\OR\value{citecount}>1\)}
+ {\printtext[bibhyperref]{\printnames{labelname}}}
+ {\printnames{labelname}
+ \setunit{%
+ \global\booltrue{cbx:parens}%
+ \printdelim{nametitledelim}\bibopenparen}%
+ \ifnumequal{\value{citecount}}{1}
+ {\usebibmacro{prenote}}
+ {}%
+ \iffieldundef{shorthand}
+ {\usebibmacro{cite:title}}%
+ {\usebibmacro{cite:shorthand}}}}%
+ \stepcounter{textcitecount}%
+ \savefield{namehash}{\cbx@lasthash}}%
+ \setunit{%
+ \ifbool{cbx:parens}
+ {\bibcloseparen\global\boolfalse{cbx:parens}}
+ {}%
+ \textcitedelim}}
+
+\renewbibmacro*{textcite:postnote}{%
+ \ifbool{cbx:parens}
+ {\setunit{\printdelim{postnotedelim}}}
+ {\setunit{%
+ \global\booltrue{cbx:parens}%
+ \printdelim{extpostnotedelim}\bibopenparen}}%
+ \printfield{postnote}%
+ \ifthenelse{\value{multicitecount}=\value{multicitetotal}}
+ {\setunit{}%
+ \printtext{%
+ \ifbool{cbx:parens}
+ {\bibcloseparen\global\boolfalse{cbx:parens}}
+ {}}}
+ {\setunit{%
+ \ifbool{cbx:parens}
+ {\bibcloseparen\global\boolfalse{cbx:parens}}
+ {}%
+ \textcitedelim}}}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/cbx/authortitle-terse-ms.cbx b/macros/latex/contrib/biblatex-ms/latex/cbx/authortitle-terse-ms.cbx
new file mode 100644
index 0000000000..b3bc294882
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/cbx/authortitle-terse-ms.cbx
@@ -0,0 +1,40 @@
+\ProvidesFile{authortitle-terse-ms.cbx}
+[\abx@cbxid]
+
+\RequireCitationStyle{authortitle}
+\ExecuteBibliographyOptions{singletitle,uniquename,uniquelist,autocite=inline}
+
+\renewbibmacro*{cite}{%
+ \iffieldundef{shorthand}
+ {\ifnameundef{labelname}
+ {\usebibmacro{cite:title}}
+ {\ifsingletitle
+ {\printtext[bibhyperref]{\printnames{labelname}}}
+ {\printnames{labelname}%
+ \setunit{\printdelim{nametitledelim}}%
+ \usebibmacro{cite:title}}}}%
+ {\usebibmacro{cite:shorthand}}}
+
+\renewbibmacro*{textcite}{%
+ \ifnameundef{labelname}
+ {\ifnumequal{\value{citecount}}{1}
+ {\usebibmacro{prenote}}
+ {}%
+ \iffieldundef{shorthand}
+ {\usebibmacro{cite:title}}%
+ {\usebibmacro{cite:shorthand}}}
+ {\ifthenelse{\ifsingletitle\AND
+ \(\iffieldundef{prenote}\OR\value{citecount}>1\)}
+ {\printtext[bibhyperref]{\printnames{labelname}}}
+ {\printnames{labelname}%
+ \setunit{%
+ \global\booltrue{cbx:parens}%
+ \printdelim{nametitledelim}\bibopenparen}%
+ \ifnumequal{\value{citecount}}{1}
+ {\usebibmacro{prenote}}
+ {}%
+ \iffieldundef{shorthand}
+ {\usebibmacro{cite:title}}%
+ {\usebibmacro{cite:shorthand}}}}}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/cbx/authortitle-ticomp-ms.cbx b/macros/latex/contrib/biblatex-ms/latex/cbx/authortitle-ticomp-ms.cbx
new file mode 100644
index 0000000000..ab883c5a23
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/cbx/authortitle-ticomp-ms.cbx
@@ -0,0 +1,100 @@
+\ProvidesFile{authortitle-ticomp-ms.cbx}
+[\abx@cbxid]
+
+\RequireCitationStyle{authortitle-icomp}
+\ExecuteBibliographyOptions{singletitle,uniquename,uniquelist,autocite=inline}
+
+\renewcommand*{\iffinalcitedelim}{%
+ \ifnumequal{\value{textcitecount}}{\value{textcitetotal}-1}}
+
+\renewbibmacro*{cite}{%
+ \iffieldundef{shorthand}
+ {\ifthenelse{\ifciteibid\AND\NOT\iffirstonpage}
+ {\usebibmacro{cite:ibid}}
+ {\iffieldequals{namehash}{\cbx@lasthash}
+ {\setunit{\compcitedelim}%
+ \usebibmacro{cite:title}}
+ {\ifnameundef{labelname}
+ {\usebibmacro{cite:title}}
+ {\ifsingletitle
+ {\printtext[bibhyperref]{\printnames{labelname}}}
+ {\printnames{labelname}%
+ \setunit{\printdelim{nametitledelim}}%
+ \usebibmacro{cite:title}}}%
+ \savefield{namehash}{\cbx@lasthash}}}}
+ {\usebibmacro{cite:shorthand}%
+ \usebibmacro{cite:reinit}}%
+ \setunit{\multicitedelim}}
+
+\renewbibmacro*{citetitle}{%
+ \iffieldundef{shorthand}
+ {\ifthenelse{\ifciteibid\AND\NOT\iffirstonpage}
+ {\usebibmacro{cite:ibid}}
+ {\iffieldequals{namehash}{\cbx@lasthash}
+ {\setunit{\compcitedelim}}
+ {\savefield{namehash}{\cbx@lasthash}}%
+ \usebibmacro{cite:title}}}
+ {\usebibmacro{cite:shorthand}%
+ \usebibmacro{cite:reinit}}%
+ \setunit{\multicitedelim}}
+
+\renewbibmacro*{textcite}{%
+ \iffieldequals{namehash}{\cbx@lasthash}
+ {\setunit{\compcitedelim}%
+ \iffieldundef{shorthand}
+ {\ifthenelse{\ifciteibid\AND\NOT\iffirstonpage}
+ {\usebibmacro{cite:ibid}}
+ {\usebibmacro{cite:title}}}%
+ {\usebibmacro{cite:shorthand}}}
+ {\ifnameundef{labelname}
+ {\ifnumequal{\value{citecount}}{1}
+ {\usebibmacro{prenote}}
+ {}%
+ \iffieldundef{shorthand}
+ {\ifthenelse{\ifciteibid\AND\NOT\iffirstonpage}
+ {\usebibmacro{cite:ibid}}
+ {\usebibmacro{cite:title}}}%
+ {\usebibmacro{cite:shorthand}}}
+ {\ifthenelse{\ifsingletitle\AND
+ \(\iffieldundef{prenote}\OR\value{citecount}>1\)}
+ {\printtext[bibhyperref]{\printnames{labelname}}}
+ {\printnames{labelname}
+ \setunit{%
+ \global\booltrue{cbx:parens}%
+ \printdelim{nametitledelim}\bibopenparen}%
+ \ifnumequal{\value{citecount}}{1}
+ {\usebibmacro{prenote}}
+ {}%
+ \iffieldundef{shorthand}
+ {\ifthenelse{\ifciteibid\AND\NOT\iffirstonpage}
+ {\usebibmacro{cite:ibid}}
+ {\usebibmacro{cite:title}}}%
+ {\usebibmacro{cite:shorthand}}}}%
+ \stepcounter{textcitecount}%
+ \savefield{namehash}{\cbx@lasthash}}%
+ \setunit{%
+ \ifbool{cbx:parens}
+ {\bibcloseparen\global\boolfalse{cbx:parens}}
+ {}%
+ \textcitedelim}}
+
+\renewbibmacro*{textcite:postnote}{%
+ \ifbool{cbx:parens}
+ {\setunit{\printdelim{postnotedelim}}}
+ {\setunit{%
+ \global\booltrue{cbx:parens}%
+ \printdelim{extpostnotedelim}\bibopenparen}}%
+ \printfield{postnote}%
+ \ifthenelse{\value{multicitecount}=\value{multicitetotal}}
+ {\setunit{}%
+ \printtext{%
+ \ifbool{cbx:parens}
+ {\bibcloseparen\global\boolfalse{cbx:parens}}
+ {}}}
+ {\setunit{%
+ \ifbool{cbx:parens}
+ {\bibcloseparen\global\boolfalse{cbx:parens}}
+ {}%
+ \textcitedelim}}}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/cbx/authoryear-comp-ms.cbx b/macros/latex/contrib/biblatex-ms/latex/cbx/authoryear-comp-ms.cbx
new file mode 100644
index 0000000000..c0bc248f4b
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/cbx/authoryear-comp-ms.cbx
@@ -0,0 +1,270 @@
+\ProvidesFile{authoryear-comp-ms.cbx}
+[\abx@cbxid]
+
+\ExecuteBibliographyOptions{labeldateparts,uniquename,uniquelist,sortcites,
+ autocite=inline}
+
+\renewcommand*{\iffinalcitedelim}{%
+ \ifnumequal{\value{textcitecount}}{\value{textcitetotal}-1}}
+
+\newbool{cbx:parens}
+
+\newbibmacro*{cite:init}{%
+ \ifnumless{\value{multicitecount}}{2}
+ {\global\boolfalse{cbx:parens}%
+ \global\undef\cbx@lasthash
+ \global\undef\cbx@lastyear}
+ {\iffieldundef{prenote}
+ {}
+ {\global\undef\cbx@lasthash
+ \global\undef\cbx@lastyear}}}
+
+\newbibmacro*{cite:reinit}{%
+ \global\undef\cbx@lasthash
+ \global\undef\cbx@lastyear}
+
+\newbibmacro*{cite}{%
+ \iffieldundef{shorthand}
+ {\ifthenelse{\ifnameundef{labelname}\OR\iffieldundef{labelyear}}
+ {\usebibmacro{cite:label}%
+ \setunit{\printdelim{nonameyeardelim}}%
+ \usebibmacro{cite:labeldate+extradate}%
+ \usebibmacro{cite:reinit}}
+ {\iffieldequals{namehash}{\cbx@lasthash}
+ {\ifthenelse{\iffieldequals{labelyear}{\cbx@lastyear}\AND
+ \(\value{multicitecount}=0\OR\iffieldundef{postnote}\)}
+ {\setunit{\addcomma}%
+ \usebibmacro{cite:extradate}}
+ {\setunit{\compcitedelim}%
+ \usebibmacro{cite:labeldate+extradate}%
+ \savefield{labelyear}{\cbx@lastyear}}}
+ {\printnames{labelname}%
+ \setunit{\printdelim{nameyeardelim}}%
+ \usebibmacro{cite:labeldate+extradate}%
+ \savefield{namehash}{\cbx@lasthash}%
+ \savefield{labelyear}{\cbx@lastyear}}}}
+ {\usebibmacro{cite:shorthand}%
+ \usebibmacro{cite:reinit}}%
+ \setunit{\multicitedelim}}
+
+\newbibmacro*{citeyear}{%
+ \iffieldundef{shorthand}
+ {\iffieldundef{labelyear}
+ {\usebibmacro{cite:label}%
+ \usebibmacro{cite:reinit}}
+ {\iffieldequals{namehash}{\cbx@lasthash}
+ {\ifthenelse{\iffieldequals{labelyear}{\cbx@lastyear}\AND
+ \(\value{multicitecount}=0\OR\iffieldundef{postnote}\)}
+ {\setunit{\addcomma}%
+ \usebibmacro{cite:extradate}}
+ {\setunit{\compcitedelim}%
+ \usebibmacro{cite:labeldate+extradate}%
+ \savefield{labelyear}{\cbx@lastyear}}}
+ {\usebibmacro{cite:labeldate+extradate}%
+ \savefield{namehash}{\cbx@lasthash}%
+ \savefield{labelyear}{\cbx@lastyear}}}}
+ {\usebibmacro{cite:shorthand}%
+ \usebibmacro{cite:reinit}}%
+ \setunit{\multicitedelim}}
+
+\newbibmacro*{textcite}{%
+ \iffieldequals{namehash}{\cbx@lasthash}
+ {\iffieldundef{shorthand}
+ {\ifthenelse{\iffieldequals{labelyear}{\cbx@lastyear}\AND
+ \(\value{multicitecount}=0\OR\iffieldundef{postnote}\)}
+ {\setunit{\addcomma}%
+ \usebibmacro{cite:extradate}}
+ {\setunit{\compcitedelim}%
+ \usebibmacro{cite:labeldate+extradate}%
+ \savefield{labelyear}{\cbx@lastyear}}}
+ {\setunit{\compcitedelim}%
+ \usebibmacro{cite:shorthand}%
+ \global\undef\cbx@lastyear}}
+ {\ifnameundef{labelname}
+ {\iffieldundef{shorthand}
+ {\usebibmacro{cite:label}%
+ \setunit{%
+ \global\booltrue{cbx:parens}%
+ \printdelim{nonameyeardelim}\bibopenparen}%
+ \ifnumequal{\value{citecount}}{1}
+ {\usebibmacro{prenote}}
+ {}%
+ \usebibmacro{cite:labeldate+extradate}}
+ {\usebibmacro{cite:shorthand}}}
+ {\printnames{labelname}%
+ \setunit{%
+ \global\booltrue{cbx:parens}%
+ \printdelim{nameyeardelim}\bibopenparen}%
+ \ifnumequal{\value{citecount}}{1}
+ {\usebibmacro{prenote}}
+ {}%
+ \iffieldundef{shorthand}
+ {\iffieldundef{labelyear}
+ {\usebibmacro{cite:label}}
+ {\usebibmacro{cite:labeldate+extradate}}%
+ \savefield{labelyear}{\cbx@lastyear}}
+ {\usebibmacro{cite:shorthand}%
+ \global\undef\cbx@lastyear}}%
+ \stepcounter{textcitecount}%
+ \savefield{namehash}{\cbx@lasthash}}%
+ \setunit{%
+ \ifbool{cbx:parens}
+ {\bibcloseparen\global\boolfalse{cbx:parens}}
+ {}%
+ \textcitedelim}}
+
+\newbibmacro*{cite:shorthand}{%
+ \printtext[bibhyperref]{\printfield{shorthand}}}
+
+\newbibmacro*{cite:label}{%
+ \iffieldundef{label}
+ {\printtext[bibhyperref]{\printfield[citetitle]{labeltitle}}}
+ {\printtext[bibhyperref]{\printfield{label}}}}
+
+\newbibmacro*{cite:labeldate+extradate}{%
+ \iffieldundef{labelyear}
+ {}
+ {\printtext[bibhyperref]{\printlabeldateextra}}}
+
+\newbibmacro{cite:labelyear+extrayear}{%
+ \blx@warning{bibmacro 'cite:labelyear+extrayear' is deprecated.\MessageBreak
+ Please use 'cite:labeldate+extradate'.\MessageBreak
+ Using 'cite:labeldate+extradate' instead}%
+ \usebibmacro{cite:labeldate+extradate}}
+
+\newbibmacro*{cite:extradate}{%
+ \iffieldundef{extradate}
+ {}
+ {\printtext[bibhyperref]{\printfield{extradate}}}}
+
+\newbibmacro{cite:extrayear}{%
+ \blx@warning{bibmacro 'cite:extrayear' is deprecated.\MessageBreak
+ Please use 'cite:extradate'.\MessageBreak
+ Using 'cite:extradate' instead}%
+ \usebibmacro{cite:extradate}}
+
+\newbibmacro*{textcite:postnote}{%
+ \usebibmacro{postnote}%
+ \ifthenelse{\value{multicitecount}=\value{multicitetotal}}
+ {\setunit{}%
+ \printtext{%
+ \ifbool{cbx:parens}
+ {\bibcloseparen\global\boolfalse{cbx:parens}}
+ {}}}
+ {\setunit{%
+ \ifbool{cbx:parens}
+ {\bibcloseparen\global\boolfalse{cbx:parens}}
+ {}%
+ \textcitedelim}}}
+
+\DeclareCiteCommand{\cite}
+ {\usebibmacro{cite:init}%
+ \usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite}}
+ {}
+ {\usebibmacro{postnote}}
+
+\DeclareCiteCommand*{\cite}
+ {\usebibmacro{cite:init}%
+ \usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{citeyear}}
+ {}
+ {\usebibmacro{postnote}}
+
+\DeclareCiteCommand{\parencite}[\mkbibparens]
+ {\usebibmacro{cite:init}%
+ \usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite}}
+ {}
+ {\usebibmacro{postnote}}
+
+\DeclareCiteCommand*{\parencite}[\mkbibparens]
+ {\usebibmacro{cite:init}%
+ \usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{citeyear}}
+ {}
+ {\usebibmacro{postnote}}
+
+\DeclareCiteCommand{\footcite}[\mkbibfootnote]
+ {\usebibmacro{cite:init}%
+ \usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite}}
+ {}
+ {\usebibmacro{postnote}}
+
+\DeclareCiteCommand{\footcitetext}[\mkbibfootnotetext]
+ {\usebibmacro{cite:init}%
+ \usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite}}
+ {}
+ {\usebibmacro{postnote}}
+
+\DeclareCiteCommand{\smartcite}[\iffootnote\mkbibparens\mkbibfootnote]
+ {\usebibmacro{cite:init}%
+ \usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite}}
+ {}
+ {\usebibmacro{postnote}}
+
+\DeclareCiteCommand{\cbx@textcite}
+ {\usebibmacro{cite:init}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{textcite}}
+ {}
+ {\usebibmacro{textcite:postnote}}
+
+\DeclareCiteCommand{\textcite}[\cbx@textcite@init\cbx@textcite]
+ {\gdef\cbx@savedkeys{}%
+ \citetrackerfalse%
+ \pagetrackerfalse%
+ \DeferNextCitekeyHook%
+ \usebibmacro{cite:init}}
+ {\ifthenelse{\iffirstcitekey\AND\value{multicitetotal}>0}
+ {\protected@xappto\cbx@savedcites{()(\thefield{multipostnote})}%
+ \global\clearfield{multipostnote}}
+ {}%
+ \xappto\cbx@savedkeys{\thefield{entrykey},}%
+ \iffieldequals{namehash}{\cbx@lasthash}
+ {}
+ {\stepcounter{textcitetotal}%
+ \savefield{namehash}{\cbx@lasthash}}}
+ {}
+ {\protected@xappto\cbx@savedcites{%
+ [\thefield{prenote}][\thefield{postnote}]{\cbx@savedkeys}}}
+
+% textcite has nested \DeclareCiteCommand definitions for textcite and we want to use
+% the normal textcite context
+\DeclareDelimcontextAlias{cbx@textcite}{textcite}
+
+\newrobustcmd{\cbx@textcite@init}[2]{%
+ \setcounter{textcitetotal}{0}%
+ \setcounter{textcitecount}{0}%
+ \def\cbx@savedcites{#1}#2%
+ \ifnumgreater{\value{textcitetotal}}{0}
+ {\cbx@savedcites}
+ {}}
+
+\DeclareMultiCiteCommand{\cbx@textcites}{\cbx@textcite}{}
+\DeclareMultiCiteCommand{\textcites}[\cbx@textcites@init\cbx@textcites]{\textcite}{}
+
+\let\cbx@textcites@init\cbx@textcite@init
+\pretocmd{\cbx@textcites@init}{\UseNextMultiCiteHook}{}{}
+
+\DeclareMultiCiteCommand{\cites}{\cite}{\setunit{\multicitedelim}}
+\DeclareMultiCiteCommand{\parencites}[\mkbibparens]{\parencite}
+ {\setunit{\multicitedelim}}
+\DeclareMultiCiteCommand{\footcites}[\mkbibfootnote]{\footcite}
+ {\setunit{\multicitedelim}}
+\DeclareMultiCiteCommand{\footcitetexts}[\mkbibfootnotetext]
+ {\footcitetext}{\setunit{\multicitedelim}}
+\DeclareMultiCiteCommand{\smartcites}[\iffootnote\mkbibparens\mkbibfootnote]
+ {\smartcite}{\setunit{\multicitedelim}}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/cbx/authoryear-ibid-ms.cbx b/macros/latex/contrib/biblatex-ms/latex/cbx/authoryear-ibid-ms.cbx
new file mode 100644
index 0000000000..319fcf2aaa
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/cbx/authoryear-ibid-ms.cbx
@@ -0,0 +1,173 @@
+\ProvidesFile{authoryear-ibid-ms.cbx}
+[\abx@cbxid]
+
+\ExecuteBibliographyOptions{labeldateparts,uniquename,uniquelist,pagetracker,
+ ibidtracker=constrict,autocite=inline}
+
+\providecommand*{\mkibid}[1]{#1}
+\renewcommand*{\iffinalcitedelim}{\iflastcitekey}
+
+\newbool{cbx:parens}
+\newbool{cbx:loccit}
+
+\DeclareBibliographyOption[boolean]{ibidpage}[true]{%
+ \ifstrequal{#1}{true}
+ {\ExecuteBibliographyOptions{loccittracker=constrict}}
+ {\ExecuteBibliographyOptions{loccittracker=false}}}
+
+\newbibmacro*{cite}{%
+ \global\boolfalse{cbx:loccit}%
+ \iffieldundef{shorthand}
+ {\ifthenelse{\ifciteibid\AND\NOT\iffirstonpage}
+ {\usebibmacro{cite:ibid}}
+ {\ifthenelse{\ifnameundef{labelname}\OR\iffieldundef{labelyear}}
+ {\usebibmacro{cite:label}%
+ \setunit{\printdelim{nonameyeardelim}}}
+ {\printnames{labelname}%
+ \setunit{\printdelim{nameyeardelim}}}%
+ \usebibmacro{cite:labeldate+extradate}}}
+ {\usebibmacro{cite:shorthand}}}
+
+\newbibmacro*{citeyear}{%
+ \global\boolfalse{cbx:loccit}%
+ \iffieldundef{shorthand}
+ {\ifthenelse{\ifciteibid\AND\NOT\iffirstonpage}
+ {\usebibmacro{cite:ibid}}
+ {\iffieldundef{labelyear}
+ {\usebibmacro{cite:label}}
+ {\usebibmacro{cite:labeldate+extradate}}}}
+ {\usebibmacro{cite:shorthand}}}
+
+\newbibmacro*{textcite}{%
+ \global\boolfalse{cbx:loccit}%
+ \ifnameundef{labelname}
+ {\iffieldundef{shorthand}
+ {\usebibmacro{cite:label}%
+ \setunit{%
+ \global\booltrue{cbx:parens}%
+ \printdelim{nonameyeardelim}\bibopenparen}%
+ \ifnumequal{\value{citecount}}{1}
+ {\usebibmacro{prenote}}
+ {}%
+ \usebibmacro{cite:labeldate+extradate}}
+ {\usebibmacro{cite:shorthand}}}
+ {\printnames{labelname}%
+ \setunit{%
+ \global\booltrue{cbx:parens}%
+ \printdelim{nameyeardelim}\bibopenparen}%
+ \ifnumequal{\value{citecount}}{1}
+ {\usebibmacro{prenote}}
+ {}%
+ \iffieldundef{shorthand}
+ {\ifthenelse{\ifciteibid\AND\NOT\iffirstonpage}
+ {\usebibmacro{cite:ibid}}
+ {\iffieldundef{labelyear}
+ {\usebibmacro{cite:label}}
+ {\usebibmacro{cite:labeldate+extradate}}}}
+ {\usebibmacro{cite:shorthand}}}}
+
+\newbibmacro*{cite:shorthand}{%
+ \printtext[bibhyperref]{\printfield{shorthand}}}
+
+\newbibmacro*{cite:ibid}{%
+ \printtext[bibhyperref]{\bibstring[\mkibid]{ibidem}}%
+ \ifloccit
+ {\global\booltrue{cbx:loccit}}
+ {}}
+
+\newbibmacro*{cite:label}{%
+ \iffieldundef{label}
+ {\printtext[bibhyperref]{\printfield[citetitle]{labeltitle}}}
+ {\printtext[bibhyperref]{\printfield{label}}}}
+
+\newbibmacro*{cite:labeldate+extradate}{%
+ \iffieldundef{labelyear}
+ {}
+ {\printtext[bibhyperref]{\printlabeldateextra}}}
+
+\newbibmacro{cite:labelyear+extrayear}{%
+ \blx@warning{bibmacro 'cite:labelyear+extrayear' is deprecated.\MessageBreak
+ Please use 'cite:labeldate+extradate'.\MessageBreak
+ Using 'cite:labeldate+extradate' instead}%
+ \usebibmacro{cite:labeldate+extradate}}
+
+\newbibmacro*{cite:postnote}{%
+ \ifbool{cbx:loccit}
+ {}
+ {\usebibmacro{postnote}}}
+
+\newbibmacro*{textcite:postnote}{%
+ \ifthenelse{\iffieldundef{postnote}\OR\boolean{cbx:loccit}}
+ {\ifbool{cbx:parens}
+ {\bibcloseparen}
+ {}}
+ {\ifbool{cbx:parens}
+ {\printdelim{postnotedelim}}
+ {\printdelim{extpostnotedelim}\bibopenparen}%
+ \printfield{postnote}\bibcloseparen}}
+
+\DeclareCiteCommand{\cite}
+ {\usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite}}
+ {\multicitedelim}
+ {\usebibmacro{cite:postnote}}
+
+\DeclareCiteCommand*{\cite}
+ {\usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{citeyear}}
+ {\multicitedelim}
+ {\usebibmacro{cite:postnote}}
+
+\DeclareCiteCommand{\parencite}[\mkbibparens]
+ {\usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite}}
+ {\multicitedelim}
+ {\usebibmacro{cite:postnote}}
+
+\DeclareCiteCommand*{\parencite}[\mkbibparens]
+ {\usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{citeyear}}
+ {\multicitedelim}
+ {\usebibmacro{cite:postnote}}
+
+\DeclareCiteCommand{\footcite}[\mkbibfootnote]
+ {\usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite}}
+ {\multicitedelim}
+ {\usebibmacro{cite:postnote}}
+
+\DeclareCiteCommand{\footcitetext}[\mkbibfootnotetext]
+ {\usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite}}
+ {\multicitedelim}
+ {\usebibmacro{cite:postnote}}
+
+\DeclareCiteCommand{\smartcite}[\iffootnote\mkbibparens\mkbibfootnote]
+ {\usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite}}
+ {\multicitedelim}
+ {\usebibmacro{cite:postnote}}
+
+\DeclareCiteCommand{\textcite}
+ {\boolfalse{cbx:parens}}
+ {\usebibmacro{citeindex}%
+ \iffirstcitekey
+ {\setcounter{textcitetotal}{1}}
+ {\stepcounter{textcitetotal}%
+ \textcitedelim}%
+ \usebibmacro{textcite}}
+ {\ifbool{cbx:parens}
+ {\bibcloseparen\global\boolfalse{cbx:parens}}
+ {}}
+ {\usebibmacro{textcite:postnote}}
+
+\DeclareMultiCiteCommand{\textcites}{\textcite}{}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/cbx/authoryear-icomp-ms.cbx b/macros/latex/contrib/biblatex-ms/latex/cbx/authoryear-icomp-ms.cbx
new file mode 100644
index 0000000000..11da4c5177
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/cbx/authoryear-icomp-ms.cbx
@@ -0,0 +1,299 @@
+\ProvidesFile{authoryear-icomp-ms.cbx}
+[\abx@cbxid]
+
+\ExecuteBibliographyOptions{labeldateparts,uniquename,uniquelist,ibidtracker=constrict,
+ pagetracker,sortcites,autocite=inline}
+
+\providecommand*{\mkibid}[1]{#1}
+\renewcommand*{\iffinalcitedelim}{%
+ \ifnumequal{\value{textcitecount}}{\value{textcitetotal}-1}}
+
+\newbool{cbx:parens}
+\newbool{cbx:loccit}
+
+\DeclareBibliographyOption[boolean]{ibidpage}[true]{%
+ \ifstrequal{#1}{true}
+ {\ExecuteBibliographyOptions{loccittracker=constrict}}
+ {\ExecuteBibliographyOptions{loccittracker=false}}}
+
+\newbibmacro*{cite:init}{%
+ \global\boolfalse{cbx:loccit}%
+ \ifnumless{\value{multicitecount}}{2}
+ {\global\boolfalse{cbx:parens}%
+ \global\undef\cbx@lasthash
+ \global\undef\cbx@lastyear}
+ {\iffieldundef{prenote}
+ {}
+ {\global\undef\cbx@lasthash
+ \global\undef\cbx@lastyear}}}
+
+\newbibmacro*{cite:reinit}{%
+ \global\undef\cbx@lasthash
+ \global\undef\cbx@lastyear}
+
+\newbibmacro*{cite}{%
+ \iffieldundef{shorthand}
+ {\ifthenelse{\ifciteibid\AND\NOT\iffirstonpage}
+ {\usebibmacro{cite:ibid}}
+ {\ifthenelse{\ifnameundef{labelname}\OR\iffieldundef{labelyear}}
+ {\usebibmacro{cite:label}%
+ \setunit{\printdelim{nonameyeardelim}}%
+ \usebibmacro{cite:labeldate+extradate}%
+ \usebibmacro{cite:reinit}}
+ {\iffieldequals{namehash}{\cbx@lasthash}
+ {\ifthenelse{\iffieldequals{labelyear}{\cbx@lastyear}\AND
+ \(\value{multicitecount}=0\OR\iffieldundef{postnote}\)}
+ {\setunit{\addcomma}%
+ \usebibmacro{cite:extradate}}
+ {\setunit{\compcitedelim}%
+ \usebibmacro{cite:labeldate+extradate}%
+ \savefield{labelyear}{\cbx@lastyear}}}
+ {\printnames{labelname}%
+ \setunit{\printdelim{nameyeardelim}}%
+ \usebibmacro{cite:labeldate+extradate}%
+ \savefield{namehash}{\cbx@lasthash}%
+ \savefield{labelyear}{\cbx@lastyear}}}}}
+ {\usebibmacro{cite:shorthand}%
+ \usebibmacro{cite:reinit}}%
+ \setunit{\multicitedelim}}
+
+\newbibmacro*{citeyear}{%
+ \iffieldundef{shorthand}
+ {\ifthenelse{\ifciteibid\AND\NOT\iffirstonpage}
+ {\usebibmacro{cite:ibid}}
+ {\iffieldundef{labelyear}
+ {\usebibmacro{cite:label}%
+ \usebibmacro{cite:reinit}}
+ {\iffieldequals{namehash}{\cbx@lasthash}
+ {\ifthenelse{\iffieldequals{labelyear}{\cbx@lastyear}\AND
+ \(\value{multicitecount}=0\OR\iffieldundef{postnote}\)}
+ {\setunit{\addcomma}%
+ \usebibmacro{cite:extradate}}
+ {\setunit{\compcitedelim}%
+ \usebibmacro{cite:labeldate+extradate}%
+ \savefield{labelyear}{\cbx@lastyear}}}
+ {\usebibmacro{cite:labeldate+extradate}%
+ \savefield{namehash}{\cbx@lasthash}%
+ \savefield{labelyear}{\cbx@lastyear}}}}}
+ {\usebibmacro{cite:shorthand}%
+ \usebibmacro{cite:reinit}}%
+ \setunit{\multicitedelim}}
+
+\newbibmacro*{textcite}{%
+ \iffieldequals{namehash}{\cbx@lasthash}
+ {\iffieldundef{shorthand}
+ {\ifthenelse{\iffieldequals{labelyear}{\cbx@lastyear}\AND
+ \(\value{multicitecount}=0\OR\iffieldundef{postnote}\)}
+ {\setunit{\addcomma}%
+ \usebibmacro{cite:extradate}}
+ {\setunit{\compcitedelim}%
+ \usebibmacro{cite:labeldate+extradate}%
+ \savefield{labelyear}{\cbx@lastyear}}}
+ {\setunit{\compcitedelim}%
+ \usebibmacro{cite:shorthand}%
+ \global\undef\cbx@lastyear}}
+ {\ifnameundef{labelname}
+ {\iffieldundef{shorthand}
+ {\usebibmacro{cite:label}%
+ \setunit{%
+ \global\booltrue{cbx:parens}%
+ \printdelim{nonameyeardelim}\bibopenparen}%
+ \ifnumequal{\value{citecount}}{1}
+ {\usebibmacro{prenote}}
+ {}%
+ \ifthenelse{\ifciteibid\AND\NOT\iffirstonpage}
+ {\usebibmacro{cite:ibid}}
+ {\usebibmacro{cite:labeldate+extradate}}}
+ {\usebibmacro{cite:shorthand}}}
+ {\printnames{labelname}%
+ \setunit{%
+ \global\booltrue{cbx:parens}%
+ \printdelim{nameyeardelim}\bibopenparen}%
+ \ifnumequal{\value{citecount}}{1}
+ {\usebibmacro{prenote}}
+ {}%
+ \iffieldundef{shorthand}
+ {\iffieldundef{labelyear}
+ {\usebibmacro{cite:label}}
+ {\ifthenelse{\ifciteibid\AND\NOT\iffirstonpage}
+ {\usebibmacro{cite:ibid}}
+ {\usebibmacro{cite:labeldate+extradate}}}%
+ \savefield{labelyear}{\cbx@lastyear}}
+ {\usebibmacro{cite:shorthand}%
+ \global\undef\cbx@lastyear}}%
+ \stepcounter{textcitecount}%
+ \savefield{namehash}{\cbx@lasthash}}%
+ \setunit{%
+ \ifbool{cbx:parens}
+ {\bibcloseparen\global\boolfalse{cbx:parens}}
+ {}%
+ \textcitedelim}}
+
+\newbibmacro*{cite:shorthand}{%
+ \printtext[bibhyperref]{\printfield{shorthand}}}
+
+\newbibmacro*{cite:label}{%
+ \iffieldundef{label}
+ {\printtext[bibhyperref]{\printfield[citetitle]{labeltitle}}}
+ {\printtext[bibhyperref]{\printfield{label}}}}
+
+\newbibmacro*{cite:labeldate+extradate}{%
+ \iffieldundef{labelyear}
+ {}
+ {\printtext[bibhyperref]{\printlabeldateextra}}}
+
+\newbibmacro{cite:labelyear+extrayear}{%
+ \blx@warning{bibmacro 'cite:labelyear+extrayear' is deprecated.\MessageBreak
+ Please use 'cite:labeldate+extradate'.\MessageBreak
+ Using 'cite:labeldate+extradate' instead}%
+ \usebibmacro{cite:labeldate+extradate}}
+
+\newbibmacro*{cite:extradate}{%
+ \iffieldundef{extradate}
+ {}
+ {\printtext[bibhyperref]{\printfield{extradate}}}}
+
+\newbibmacro{cite:extrayear}{%
+ \blx@warning{bibmacro 'cite:extrayear' is deprecated.\MessageBreak
+ Please use 'cite:extradate'.\MessageBreak
+ Using 'cite:extradate' instead}%
+ \usebibmacro{cite:extradate}}
+
+\newbibmacro*{cite:ibid}{%
+ \printtext[bibhyperref]{\bibstring[\mkibid]{ibidem}}%
+ \ifloccit
+ {\global\booltrue{cbx:loccit}}
+ {}}
+
+\newbibmacro*{cite:postnote}{%
+ \ifbool{cbx:loccit}
+ {}
+ {\usebibmacro{postnote}}}
+
+\newbibmacro*{textcite:postnote}{%
+ \ifbool{cbx:loccit}
+ {}
+ {\usebibmacro{postnote}}%
+ \ifthenelse{\value{multicitecount}=\value{multicitetotal}}
+ {\setunit{}%
+ \printtext{%
+ \ifbool{cbx:parens}
+ {\bibcloseparen\global\boolfalse{cbx:parens}}
+ {}}}
+ {\setunit{%
+ \ifbool{cbx:parens}
+ {\bibcloseparen\global\boolfalse{cbx:parens}}
+ {}%
+ \textcitedelim}}}
+
+\DeclareCiteCommand{\cite}
+ {\usebibmacro{cite:init}%
+ \usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite}}
+ {}
+ {\usebibmacro{cite:postnote}}
+
+\DeclareCiteCommand*{\cite}
+ {\usebibmacro{cite:init}%
+ \usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{citeyear}}
+ {}
+ {\usebibmacro{cite:postnote}}
+
+\DeclareCiteCommand{\parencite}[\mkbibparens]
+ {\usebibmacro{cite:init}%
+ \usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite}}
+ {}
+ {\usebibmacro{cite:postnote}}
+
+\DeclareCiteCommand*{\parencite}[\mkbibparens]
+ {\usebibmacro{cite:init}%
+ \usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{citeyear}}
+ {}
+ {\usebibmacro{cite:postnote}}
+
+\DeclareCiteCommand{\footcite}[\mkbibfootnote]
+ {\usebibmacro{cite:init}%
+ \usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite}}
+ {}
+ {\usebibmacro{cite:postnote}}
+
+\DeclareCiteCommand{\footcitetext}[\mkbibfootnotetext]
+ {\usebibmacro{cite:init}%
+ \usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite}}
+ {}
+ {\usebibmacro{cite:postnote}}
+
+\DeclareCiteCommand{\smartcite}[\iffootnote\mkbibparens\mkbibfootnote]
+ {\usebibmacro{cite:init}%
+ \usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite}}
+ {}
+ {\usebibmacro{cite:postnote}}
+
+\DeclareCiteCommand{\cbx@textcite}
+ {\usebibmacro{cite:init}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{textcite}}
+ {}
+ {\usebibmacro{textcite:postnote}}
+
+\DeclareCiteCommand{\textcite}[\cbx@textcite@init\cbx@textcite]
+ {\gdef\cbx@savedkeys{}%
+ \citetrackerfalse%
+ \pagetrackerfalse%
+ \DeferNextCitekeyHook%
+ \usebibmacro{cite:init}}
+ {\ifthenelse{\iffirstcitekey\AND\value{multicitetotal}>0}
+ {\protected@xappto\cbx@savedcites{()(\thefield{multipostnote})}%
+ \global\clearfield{multipostnote}}
+ {}%
+ \xappto\cbx@savedkeys{\thefield{entrykey},}%
+ \iffieldequals{namehash}{\cbx@lasthash}
+ {}
+ {\stepcounter{textcitetotal}%
+ \savefield{namehash}{\cbx@lasthash}}}
+ {}
+ {\protected@xappto\cbx@savedcites{%
+ [\thefield{prenote}][\thefield{postnote}]{\cbx@savedkeys}}}
+
+% textcite has nested \DeclareCiteCommand definitions for textcite and we want to use
+% the normal textcite context
+\DeclareDelimcontextAlias{cbx@textcite}{textcite}
+
+\newrobustcmd{\cbx@textcite@init}[2]{%
+ \setcounter{textcitetotal}{0}%
+ \setcounter{textcitecount}{0}%
+ \def\cbx@savedcites{#1}#2%
+ \ifnumgreater{\value{textcitetotal}}{0}
+ {\cbx@savedcites}
+ {}}
+
+\DeclareMultiCiteCommand{\cbx@textcites}{\cbx@textcite}{}
+\DeclareMultiCiteCommand{\textcites}[\cbx@textcites@init\cbx@textcites]{\textcite}{}
+
+\let\cbx@textcites@init\cbx@textcite@init
+\pretocmd{\cbx@textcites@init}{\UseNextMultiCiteHook}{}{}
+
+\DeclareMultiCiteCommand{\cites}{\cite}{\setunit{\multicitedelim}}
+\DeclareMultiCiteCommand{\parencites}[\mkbibparens]
+ {\parencite}{\setunit{\multicitedelim}}
+\DeclareMultiCiteCommand{\footcites}[\mkbibfootnote]
+ {\footcite}{\setunit{\multicitedelim}}
+\DeclareMultiCiteCommand{\footcitetexts}[\mkbibfootnotetext]
+ {\footcitetext}{\setunit{\multicitedelim}}
+\DeclareMultiCiteCommand{\smartcites}[\iffootnote\mkbibparens\mkbibfootnote]
+ {\smartcite}{\setunit{\multicitedelim}}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/cbx/authoryear-ms.cbx b/macros/latex/contrib/biblatex-ms/latex/cbx/authoryear-ms.cbx
new file mode 100644
index 0000000000..42d47e169b
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/cbx/authoryear-ms.cbx
@@ -0,0 +1,141 @@
+\ProvidesFile{authoryear-ms.cbx}
+[\abx@cbxid]
+
+\ExecuteBibliographyOptions{labeldateparts,uniquename,uniquelist,autocite=inline}
+
+\renewcommand*{\iffinalcitedelim}{\iflastcitekey}
+
+\newbool{cbx:parens}
+
+\newbibmacro*{cite}{%
+ \iffieldundef{shorthand}
+ {\ifthenelse{\ifnameundef{labelname}\OR\iffieldundef{labelyear}}
+ {\usebibmacro{cite:label}%
+ \setunit{\printdelim{nonameyeardelim}}}
+ {\printnames{labelname}%
+ \setunit{\printdelim{nameyeardelim}}}%
+ \usebibmacro{cite:labeldate+extradate}}
+ {\usebibmacro{cite:shorthand}}}
+
+\newbibmacro*{citeyear}{%
+ \iffieldundef{shorthand}
+ {\iffieldundef{labelyear}
+ {\usebibmacro{cite:label}}
+ {\usebibmacro{cite:labeldate+extradate}}}
+ {\usebibmacro{cite:shorthand}}}
+
+\newbibmacro*{textcite}{%
+ \ifnameundef{labelname}
+ {\iffieldundef{shorthand}
+ {\usebibmacro{cite:label}%
+ \setunit{%
+ \global\booltrue{cbx:parens}%
+ \printdelim{nonameyeardelim}\bibopenparen}%
+ \ifnumequal{\value{citecount}}{1}
+ {\usebibmacro{prenote}}
+ {}%
+ \usebibmacro{cite:labeldate+extradate}}
+ {\usebibmacro{cite:shorthand}}}
+ {\printnames{labelname}%
+ \setunit{%
+ \global\booltrue{cbx:parens}%
+ \printdelim{nameyeardelim}\bibopenparen}%
+ \ifnumequal{\value{citecount}}{1}
+ {\usebibmacro{prenote}}
+ {}%
+ \usebibmacro{citeyear}}}
+
+\newbibmacro*{cite:shorthand}{%
+ \printtext[bibhyperref]{\printfield{shorthand}}}
+
+\newbibmacro*{cite:label}{%
+ \iffieldundef{label}
+ {\printtext[bibhyperref]{\printfield[citetitle]{labeltitle}}}
+ {\printtext[bibhyperref]{\printfield{label}}}}
+
+\newbibmacro*{cite:labeldate+extradate}{%
+ \iffieldundef{labelyear}
+ {}
+ {\printtext[bibhyperref]{\printlabeldateextra}}}
+
+\newbibmacro{cite:labelyear+extrayear}{%
+ \blx@warning{bibmacro 'cite:labelyear+extrayear' is deprecated.\MessageBreak
+ Please use 'cite:labeldate+extradate'.\MessageBreak
+ Using 'cite:labeldate+extradate' instead}%
+ \usebibmacro{cite:labeldate+extradate}}
+
+\newbibmacro*{textcite:postnote}{%
+ \iffieldundef{postnote}
+ {\ifbool{cbx:parens}
+ {\bibcloseparen}
+ {}}
+ {\ifbool{cbx:parens}
+ {\setunit{\printdelim{postnotedelim}}}
+ {\setunit{\printdelim{extpostnotedelim}\bibopenparen}}%
+ \printfield{postnote}\bibcloseparen}}
+
+\DeclareCiteCommand{\cite}
+ {\usebibmacro{prenote}}%
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite}}
+ {\multicitedelim}
+ {\usebibmacro{postnote}}
+
+\DeclareCiteCommand*{\cite}
+ {\usebibmacro{prenote}}%
+ {\usebibmacro{citeindex}%
+ \usebibmacro{citeyear}}
+ {\multicitedelim}
+ {\usebibmacro{postnote}}
+
+\DeclareCiteCommand{\parencite}[\mkbibparens]
+ {\usebibmacro{prenote}}%
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite}}
+ {\multicitedelim}
+ {\usebibmacro{postnote}}
+
+\DeclareCiteCommand*{\parencite}[\mkbibparens]
+ {\usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{citeyear}}
+ {\multicitedelim}
+ {\usebibmacro{postnote}}
+
+\DeclareCiteCommand{\footcite}[\mkbibfootnote]
+ {\usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite}}
+ {\multicitedelim}
+ {\usebibmacro{postnote}}
+
+\DeclareCiteCommand{\footcitetext}[\mkbibfootnotetext]
+ {\usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite}}
+ {\multicitedelim}
+ {\usebibmacro{postnote}}
+
+\DeclareCiteCommand{\smartcite}[\iffootnote\mkbibparens\mkbibfootnote]
+ {\usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite}}
+ {\multicitedelim}
+ {\usebibmacro{postnote}}
+
+\DeclareCiteCommand{\textcite}
+ {\boolfalse{cbx:parens}}
+ {\usebibmacro{citeindex}%
+ \iffirstcitekey
+ {\setcounter{textcitetotal}{1}}
+ {\stepcounter{textcitetotal}%
+ \textcitedelim}%
+ \usebibmacro{textcite}}
+ {\ifbool{cbx:parens}
+ {\bibcloseparen\global\boolfalse{cbx:parens}}
+ {}}
+ {\usebibmacro{textcite:postnote}}
+
+\DeclareMultiCiteCommand{\textcites}{\textcite}{}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/cbx/debug-ms.cbx b/macros/latex/contrib/biblatex-ms/latex/cbx/debug-ms.cbx
new file mode 100644
index 0000000000..0b4e1955da
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/cbx/debug-ms.cbx
@@ -0,0 +1,93 @@
+\ProvidesFile{debug-ms.cbx}
+[\abx@cbxid]
+
+\ExecuteBibliographyOptions{autocite=plain}
+
+\DeclareUrlCommand{\cbx@citekey}{\urlstyle{citekey}}
+\def\url@citekeystyle{\def\UrlFont{\ttfamily}}
+
+\DeclareFieldFormat{key}{\cbx@citekey{#1}}
+\DeclareFieldFormat{pre}{\texttt{pre=\detokenize{#1}}}
+\DeclareFieldFormat{post}{\texttt{post=\detokenize{#1}}}
+\DeclareFieldFormat{meta}{\texttt{#1}}
+
+\renewbibmacro*{multiprenote}{%
+ \printtext[meta]{[multi}%
+ \setunit{\addspace}%
+ \printfield[pre]{multiprenote}%
+ \setunit{\addspace}%
+ \printfield[post]{multipostnote}%
+ \setunit{\addspace}}
+
+\renewbibmacro*{multipostnote}{%
+ \printtext[meta]{]}}
+
+\newbibmacro*{begin}[1]{%
+ \printtext[meta]{[#1}%
+ \setunit{\addspace}%
+ \printfield[pre]{prenote}%
+ \setunit{\addspace}%
+ \printfield[post]{postnote}%
+ \setunit{\addspace}%
+ \printtext[meta]{key=}}
+
+\newbibmacro*{end}{%
+ \printtext[meta]{]}}
+
+\newbibmacro*{key}{%
+ \printtext[bibhyperref]{\printfield[key]{entrykey}}}
+
+\newbibmacro*{next}{%
+ \printtext[meta]{\addcomma}%
+ \setunit{\addspace}}
+
+\DeclareCiteCommand{\cite}
+ {\usebibmacro{begin}{cite}}
+ {\usebibmacro{key}}
+ {\usebibmacro{next}}
+ {\usebibmacro{end}}
+
+\DeclareCiteCommand{\parencite}
+ {\usebibmacro{begin}{parencite}}
+ {\usebibmacro{key}}
+ {\usebibmacro{next}}
+ {\usebibmacro{end}}
+
+\DeclareCiteCommand{\footcite}
+ {\usebibmacro{begin}{footcite}}
+ {\usebibmacro{key}}
+ {\usebibmacro{next}}
+ {\usebibmacro{end}}
+
+\DeclareCiteCommand{\footcitetext}
+ {\usebibmacro{begin}{footcitetext}}
+ {\usebibmacro{key}}
+ {\usebibmacro{next}}
+ {\usebibmacro{end}}
+
+\DeclareCiteCommand{\smartcite}[\iffootnote\mkbibparens\mkbibfootnote]
+ {\usebibmacro{begin}{smartcite}}
+ {\usebibmacro{key}}
+ {\usebibmacro{next}}
+ {\usebibmacro{end}}
+
+\DeclareCiteCommand{\textcite}
+ {\usebibmacro{begin}{textcite}}
+ {\usebibmacro{key}}
+ {\usebibmacro{next}}
+ {\usebibmacro{end}}
+
+\DeclareCiteCommand{\supercite}
+ {\usebibmacro{begin}{supercite}}
+ {\usebibmacro{key}}
+ {\usebibmacro{next}}
+ {\usebibmacro{end}}
+
+\DeclareMultiCiteCommand{\cites}{\cite}{\addspace}
+\DeclareMultiCiteCommand{\parencites}{\parencite}{\addspace}
+\DeclareMultiCiteCommand{\footcites}{\footcite}{\addspace}
+\DeclareMultiCiteCommand{\footcitetexts}{\footcitetext}{\addspace}
+\DeclareMultiCiteCommand{\supercites}{\supercite}{\addspace}
+\DeclareMultiCiteCommand{\textcites}{\textcite}{\addspace}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/cbx/draft-ms.cbx b/macros/latex/contrib/biblatex-ms/latex/cbx/draft-ms.cbx
new file mode 100644
index 0000000000..38b48985e9
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/cbx/draft-ms.cbx
@@ -0,0 +1,73 @@
+\ProvidesFile{draft-ms.cbx}
+[\abx@cbxid]
+
+\ExecuteBibliographyOptions{autocite=plain}
+
+\DeclareFieldFormat{citekey}{\cbx@mkcitekey{#1}}
+\DeclareUrlCommand{\cbx@mkcitekey}{\urlstyle{citekey}}
+\def\url@citekeystyle{\def\UrlFont{\bfseries}}
+\newbool{cbx:parens}
+
+\newbibmacro*{cite}{%
+ \printtext[bibhyperref]{\printfield[citekey]{entrykey}}}
+
+\newbibmacro*{textcite}{%
+ \printnames{labelname}%
+ \setunit*{%
+ \global\booltrue{cbx:parens}%
+ \addspace\bibopenparen}%
+ \ifnumequal{\value{citecount}}{1}
+ {\usebibmacro{prenote}}
+ {}%
+ \usebibmacro{cite}}
+
+\newbibmacro*{textcite:postnote}{%
+ \iffieldundef{postnote}
+ {\ifbool{cbx:parens}
+ {\bibcloseparen}
+ {}}
+ {\ifbool{cbx:parens}
+ {\setunit{\printdelim{postnotedelim}}}
+ {\setunit{\addspace\bibopenparen}}%
+ \printfield{postnote}\bibcloseparen}}
+
+\DeclareCiteCommand{\cite}
+ {\usebibmacro{prenote}}
+ {\usebibmacro{cite}}
+ {\multicitedelim}
+ {\usebibmacro{postnote}}
+
+\DeclareCiteCommand{\parencite}[\mkbibparens]
+ {\usebibmacro{prenote}}
+ {\usebibmacro{cite}}
+ {\multicitedelim}
+ {\usebibmacro{postnote}}
+
+\DeclareCiteCommand{\footcite}[\mkbibfootnote]
+ {\usebibmacro{prenote}}
+ {\usebibmacro{cite}}
+ {\multicitedelim}
+ {\usebibmacro{postnote}}
+
+\DeclareCiteCommand{\footcitetext}[\mkbibfootnotetext]
+ {\usebibmacro{prenote}}
+ {\usebibmacro{cite}}
+ {\multicitedelim}
+ {\usebibmacro{postnote}}
+
+\DeclareCiteCommand{\smartcite}[\iffootnote\mkbibparens\mkbibfootnote]
+ {\usebibmacro{prenote}}
+ {\usebibmacro{cite}}
+ {\multicitedelim}
+ {\usebibmacro{postnote}}
+
+\DeclareCiteCommand{\textcite}
+ {\boolfalse{cbx:parens}}
+ {\usebibmacro{textcite}}
+ {\ifbool{cbx:parens}
+ {\bibcloseparen\global\boolfalse{cbx:parens}}
+ {}%
+ \multicitedelim}
+ {\usebibmacro{textcite:postnote}}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/cbx/numeric-comp-ms.cbx b/macros/latex/contrib/biblatex-ms/latex/cbx/numeric-comp-ms.cbx
new file mode 100644
index 0000000000..779377f7c1
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/cbx/numeric-comp-ms.cbx
@@ -0,0 +1,324 @@
+\ProvidesFile{numeric-comp-ms.cbx}
+[\abx@cbxid]
+
+\newtoggle{cbx:subentrycomp}
+\DeclareBiblatexOption{global,type,entry}[boolean]{subentrycomp}[true]{%
+ \settoggle{cbx:subentrycomp}{#1}}
+
+\ExecuteBibliographyOptions{labelnumber,sortcites,autocite=inline,
+ subentrycomp=true}
+
+\renewcommand*{\multicitedelim}{\addcomma\space}
+\renewcommand*{\iffinalcitedelim}{%
+ \ifnumequal{\value{textcitecount}}{\value{textcitetotal}-1}}
+
+\providebool{bbx:subentry}
+\newbool{cbx:parens}
+
+\newcounter{cbx@tempcnta}% no. of labelnumbers skipped
+\newcounter{cbx@tempcntb}% 'predicted' labelnumber for current cite
+\newcounter{cbx@tempcntc}% no. of entrysetcounts we skipped
+\newcounter{cbx@tempcntd}% 'predicted' entrysetcount
+
+\DeclareFieldFormat{entrysetcount}{\mknumalph{#1}}
+
+\newcommand*{\cbx@iflabelnumberequalslast}{%
+ \iffieldequals{labelnumber}{\cbx@lastnumber}}
+
+% \iffieldequals is false even if both are empty/undef
+% so we need a special test for that case
+% this test is optimised for performance and laziness
+% rather than prettiness, not that it would matter a lot...
+\newcommand*{\cbx@iflabelprefixequalslast}{%
+ \ifundef\cbx@lastprefix
+ {\iffieldundef{labelprefix}}
+ {\iffieldequals{labelprefix}{\cbx@lastprefix}}}
+
+% \cbx@iflabelnumberequalslast and \cbx@iflabelprefixequalslast
+\newcommand*{\cbx@iflabelnumberandprefixequallast}{%
+ \cbx@iflabelnumberequalslast
+ {\cbx@iflabelprefixequalslast}
+ {\@secondoftwo}}
+
+\newbibmacro*{cite:init}{%
+ \global\boolfalse{cbx:parens}%
+ \global\undef\cbx@lasthash
+ \global\undef\cbx@lastnumber
+ \global\undef\cbx@lastprefix
+ \global\undef\cbx@lastentrysetcount
+ \setcounter{cbx@tempcnta}{0}%
+ \setcounter{cbx@tempcntb}{-2}%
+ \setcounter{cbx@tempcntc}{0}%
+ \setcounter{cbx@tempcntd}{-1}}
+
+\newbibmacro*{cite:comp}{%
+ \stepcounter{cbx@tempcntb}%
+ \iffieldundef{shorthand}
+ {\ifbool{bbx:subentry}
+ {\iffieldundef{entrysetcount}
+ {\usebibmacro{cite:comp:comp}}
+ {\usebibmacro{cite:comp:inset}}}
+ {\usebibmacro{cite:comp:comp}}}
+ {\usebibmacro{cite:comp:shand}}}
+
+% we externalise printing the citations to
+% cite:print:... macros for easier customisation
+
+\newbibmacro*{cite:comp:comp}{%
+ \cbx@iflabelprefixequalslast
+ {\ifnumequal{\thefield{labelnumber}}{\value{cbx@tempcntb}}
+ {\savefield{entrykey}{\cbx@lastkey}%
+ \savefield{labelnumber}{\cbx@lastnumber}%
+ \stepcounter{cbx@tempcnta}}
+ {\ifnumequal{\thefield{labelnumber}}{\value{cbx@tempcntb}-1}
+ {% current cite is *exactly* the same a previous source
+ % this can only happen if the same source is cited twice
+ % and sortcites is turned off
+ % print nothing
+ }
+ {\usebibmacro{cite:comp:end}}}}
+ {\usebibmacro{cite:comp:end}}%
+ \setcounter{cbx@tempcntb}{\thefield{labelnumber}}%
+ \savefield{labelprefix}{\cbx@lastprefix}}
+
+\newbibmacro*{cite:comp:end}{%
+ \usebibmacro{cite:dump}%
+ \ifnumgreater{\value{cbx@tempcntb}}{-1}
+ {\setunit{\multicitedelim}}
+ {}%
+ \usebibmacro{cite:print:labelnumber}}
+
+\newbibmacro*{cite:comp:inset}{%
+ \stepcounter{cbx@tempcntd}%
+ \ifboolexpr{ togl {cbx:subentrycomp}
+ and test {\cbx@iflabelnumberandprefixequallast}}
+ {\ifnumequal{\thefield{entrysetcount}}{\value{cbx@tempcntd}}
+ {\savefield{entrykey}{\cbx@lastkey}%
+ \savefield{entrysetcount}{\cbx@lastentrysetcount}%
+ \stepcounter{cbx@tempcntc}}
+ {\ifnumequal{\thefield{entrysetcount}}{\value{cbx@tempcntd}-1}
+ {% current cite is *exactly* the same a previous source
+ % this can only happen if the same source is cited twice
+ % and sortcites is turned off
+ % print nothing
+ }
+ {\usebibmacro{cite:dump:inset}%
+ \ifnumgreater{\value{cbx@tempcntd}}{-1}
+ {\setunit{\multicitesubentrydelim}}
+ {}%
+ \usebibmacro{cite:print:subentry:comp}}}}
+ {\usebibmacro{cite:dump}%
+ \ifnumgreater{\value{cbx@tempcntb}}{-1}
+ {\multicitedelim}
+ {}%
+ \setcounter{cbx@tempcntd}{-1}%
+ \usebibmacro{cite:print:subentry:full}%
+ \savefield{labelprefix}{\cbx@lastprefix}%
+ \savefield{labelnumber}{\cbx@lastnumber}}%
+ \setcounter{cbx@tempcntd}{\thefield{entrysetcount}}%
+ \setcounter{cbx@tempcntb}{-1}}
+
+\newbibmacro*{cite:comp:shand}{%
+ \usebibmacro{cite:dump}%
+ \ifnumgreater{\value{cbx@tempcntb}}{-1}
+ {\setunit{\multicitedelim}}
+ {}%
+ \usebibmacro{cite:print:shorthand}%
+ \setcounter{cbx@tempcntb}{-1}}
+
+\newbibmacro{cite:dump:inset}{%
+ % dump subentry
+ \ifnumgreater{\value{cbx@tempcntc}}{0}
+ {\ifnumgreater{\value{cbx@tempcntc}}{1}
+ {\setunit{\multicitesubentryrangedelim}}
+ {\setunit{\multicitesubentrydelim}}%
+ \usebibmacro{cite:print:last:subentry:comp}%
+ \global\undef\cbx@lastentrysetcount}
+ {}%
+ \setcounter{cbx@tempcntc}{0}%
+}
+
+\newbibmacro*{cite:dump}{%
+ \usebibmacro{cite:dump:inset}%
+ % dump labelnumber (+labelprefix)
+ \ifnumgreater{\value{cbx@tempcnta}}{0}
+ {\ifnumgreater{\value{cbx@tempcnta}}{1}
+ {\setunit{\multiciterangedelim}}
+ {\setunit{\multicitedelim}}%
+ \usebibmacro{cite:print:last:labelnumber}%
+ \global\undef\cbx@lastprefix}
+ {}%
+ \setcounter{cbx@tempcnta}{0}%
+}
+
+% these macros do the actual printing
+
+\newbibmacro*{cite:print:shorthand}{%
+ \printtext[bibhyperref]{\printfield{shorthand}}}
+
+\newbibmacro*{cite:print:labelnumber}{%
+ \printtext[bibhyperref]{%
+ \printfield{labelprefix}%
+ \printfield{labelnumber}}}
+
+\newbibmacro*{cite:print:subentry:comp}{%
+ \printtext[bibhyperref]{\printfield{entrysetcount}}}
+
+\newbibmacro*{cite:print:subentry:full}{%
+ \printtext[bibhyperref]{%
+ \printfield{labelprefix}%
+ \printfield{labelnumber}%
+ \printfield{entrysetcount}}}
+
+\DeclareFieldFormat{bibhyperref:lastkey}{\bibhyperref[\cbx@lastkey]{#1}}
+
+\newbibmacro*{cite:print:last:subentry:comp}{%
+ \printtext[bibhyperref:lastkey]{%
+ \printtext[entrysetcount]{\cbx@lastentrysetcount}}}
+
+\newbibmacro*{cite:print:last:labelnumber}{%
+ \printtext[bibhyperref:lastkey]{%
+ \ifdef\cbx@lastprefix
+ {\printtext[labelprefix]{\cbx@lastprefix}}
+ {}%
+ \printtext[labelnumber]{\cbx@lastnumber}}}
+
+\newbibmacro*{textcite}{%
+ \iffieldequals{namehash}{\cbx@lasthash}
+ {\usebibmacro{cite:comp}}
+ {\usebibmacro{cite:dump}%
+ \ifbool{cbx:parens}
+ {\printtext{\bibclosebracket}\global\boolfalse{cbx:parens}}
+ {}%
+ \iffirstcitekey
+ {}
+ {\setunit{\textcitedelim}}%
+ \usebibmacro{cite:init}%
+ \ifnameundef{labelname}
+ {\printfield[citetitle]{labeltitle}}
+ {\printnames{labelname}}%
+ \setunit*{\printdelim{namelabeldelim}}%
+ \printtext{\bibopenbracket}\global\booltrue{cbx:parens}%
+ \ifnumequal{\value{citecount}}{1}
+ {\usebibmacro{prenote}}
+ {}%
+ \usebibmacro{cite:comp}%
+ \stepcounter{textcitecount}%
+ \savefield{namehash}{\cbx@lasthash}}}
+
+\DeclareCiteCommand{\cite}[\mkbibbrackets]
+ {\usebibmacro{cite:init}%
+ \usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite:comp}}
+ {}
+ {\usebibmacro{cite:dump}%
+ \usebibmacro{postnote}}
+
+\DeclareCiteCommand{\parencite}[\mkbibbrackets]
+ {\usebibmacro{cite:init}%
+ \usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite:comp}}
+ {}
+ {\usebibmacro{cite:dump}%
+ \usebibmacro{postnote}}
+
+\DeclareCiteCommand{\footcite}[\mkbibfootnote]
+ {\usebibmacro{cite:init}%
+ \usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite:comp}}
+ {}
+ {\usebibmacro{cite:dump}%
+ \usebibmacro{postnote}}
+
+\DeclareCiteCommand{\footcitetext}[\mkbibfootnotetext]
+ {\usebibmacro{cite:init}%
+ \usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite:comp}}
+ {}
+ {\usebibmacro{cite:dump}%
+ \usebibmacro{postnote}}
+
+\DeclareCiteCommand{\smartcite}[\iffootnote\mkbibbrackets\mkbibfootnote]
+ {\usebibmacro{cite:init}%
+ \usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite:comp}}
+ {}
+ {\usebibmacro{cite:dump}%
+ \usebibmacro{postnote}}
+
+\DeclareCiteCommand{\supercite}[\mkbibsuperscript]
+ {\usebibmacro{cite:init}%
+ \let\multicitedelim=\supercitedelim
+ \let\multicitesubentrydelim=\supercitesubentrydelim
+ \let\multiciterangedelim=\superciterangedelim
+ \let\multicitesubentryrangedelim=\supercitesubentryrangedelim
+ \iffieldundef{prenote}
+ {}
+ {\BibliographyWarning{Ignoring prenote argument}}%
+ \iffieldundef{postnote}
+ {}
+ {\BibliographyWarning{Ignoring postnote argument}}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite:comp}}
+ {}
+ {\usebibmacro{cite:dump}}
+
+\DeclareCiteCommand{\cbx@textcite}
+ {\usebibmacro{cite:init}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{textcite}}
+ {}
+ {\usebibmacro{cite:dump}%
+ \usebibmacro{postnote}%
+ \ifbool{cbx:parens}
+ {\bibclosebracket\global\boolfalse{cbx:parens}}
+ {}}
+
+\DeclareCiteCommand{\textcite}[\cbx@textcite@init\cbx@textcite]
+ {\gdef\cbx@savedkeys{}%
+ \citetrackerfalse%
+ \pagetrackerfalse%
+ \DeferNextCitekeyHook%
+ \usebibmacro{cite:init}}
+ {\ifthenelse{\iffirstcitekey\AND\value{multicitetotal}>0}
+ {\protected@xappto\cbx@savedcites{()(\thefield{multipostnote})}%
+ \global\clearfield{multipostnote}}
+ {}%
+ \xappto\cbx@savedkeys{\thefield{entrykey},}%
+ \iffieldequals{namehash}{\cbx@lasthash}
+ {}
+ {\stepcounter{textcitetotal}%
+ \savefield{namehash}{\cbx@lasthash}}}
+ {}
+ {\protected@xappto\cbx@savedcites{%
+ [\thefield{prenote}][\thefield{postnote}]{\cbx@savedkeys}}}
+
+% textcite has nested \DeclareCiteCommand definitions for textcite and we want to use
+% the normal textcite context
+\DeclareDelimcontextAlias{cbx@textcite}{textcite}
+
+\newrobustcmd{\cbx@textcite@init}[2]{%
+ \setcounter{textcitetotal}{0}%
+ \setcounter{textcitecount}{0}%
+ \def\cbx@savedcites{#1}#2%
+ \ifnumgreater{\value{textcitetotal}}{0}
+ {\cbx@savedcites}
+ {}}
+
+\DeclareMultiCiteCommand{\cbx@textcites}{\cbx@textcite}{}
+\DeclareMultiCiteCommand{\textcites}[\cbx@textcites@init\cbx@textcites]{\textcite}{}
+
+\let\cbx@textcites@init\cbx@textcite@init
+\pretocmd{\cbx@textcites@init}{\UseNextMultiCiteHook}{}{}
+
+\DeclareMultiCiteCommand{\cites}[\mkbibbrackets]{\cite}{\multicitedelim}
+\DeclareMultiCiteCommand{\parencites}[\mkbibbrackets]{\parencite}{\multicitedelim}
+\DeclareMultiCiteCommand{\smartcites}[\iffootnote\mkbibbrackets\mkbibfootnote]
+ {\smartcite}{\multicitedelim}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/cbx/numeric-ms.cbx b/macros/latex/contrib/biblatex-ms/latex/cbx/numeric-ms.cbx
new file mode 100644
index 0000000000..5bdc3648da
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/cbx/numeric-ms.cbx
@@ -0,0 +1,159 @@
+\ProvidesFile{numeric-ms.cbx}
+[\abx@cbxid]
+
+\ExecuteBibliographyOptions{labelnumber,autocite=inline}
+
+\renewcommand*{\multicitedelim}{\addcomma\space}
+\renewcommand*{\iffinalcitedelim}{%
+ \ifnumequal{\value{textcitecount}}{\value{textcitetotal}-1}}
+
+\providebool{bbx:subentry}
+\newbool{cbx:parens}
+
+\DeclareFieldFormat{entrysetcount}{\mknumalph{#1}}
+
+\newbibmacro*{cite}{%
+ \printtext[bibhyperref]{%
+ \printfield{labelprefix}%
+ \printfield{labelnumber}%
+ \ifbool{bbx:subentry}
+ {\printfield{entrysetcount}}
+ {}}}
+
+\newbibmacro*{textcite}{%
+ \iffieldequals{namehash}{\cbx@lasthash}
+ {\setunit{\multicitedelim}}
+ {\ifnameundef{labelname}
+ {\printfield[citetitle]{labeltitle}}
+ {\printnames{labelname}}%
+ \setunit*{\printdelim{namelabeldelim}}%
+ \printtext{\bibopenbracket}\global\booltrue{cbx:parens}%
+ \stepcounter{textcitecount}%
+ \savefield{namehash}{\cbx@lasthash}}%
+ \ifnumequal{\value{citecount}}{1}
+ {\usebibmacro{prenote}}
+ {}%
+ \usebibmacro{cite}%
+ \setunit{%
+ \ifbool{cbx:parens}
+ {\bibclosebracket\global\boolfalse{cbx:parens}}
+ {}%
+ \textcitedelim}}
+
+\newbibmacro*{textcite:init}{%
+ \ifnumless{\value{multicitecount}}{2}
+ {\global\boolfalse{cbx:parens}%
+ \global\undef\cbx@lasthash}
+ {\global\undef\cbx@lasthash}}
+
+\newbibmacro*{textcite:postnote}{%
+ \usebibmacro{postnote}%
+ \ifthenelse{\value{multicitecount}=\value{multicitetotal}}
+ {\setunit{}%
+ \printtext{%
+ \ifbool{cbx:parens}
+ {\bibclosebracket\global\boolfalse{cbx:parens}}
+ {}}}
+ {\setunit{%
+ \ifbool{cbx:parens}
+ {\bibclosebracket\global\boolfalse{cbx:parens}}
+ {}%
+ \textcitedelim}}}
+
+\DeclareCiteCommand{\cite}[\mkbibbrackets]
+ {\usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite}}
+ {\multicitedelim}
+ {\usebibmacro{postnote}}
+
+\DeclareCiteCommand{\parencite}[\mkbibbrackets]
+ {\usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite}}
+ {\multicitedelim}
+ {\usebibmacro{postnote}}
+
+\DeclareCiteCommand{\footcite}[\mkbibfootnote]
+ {\usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite}}
+ {\multicitedelim}
+ {\usebibmacro{postnote}}
+
+\DeclareCiteCommand{\footcitetext}[\mkbibfootnotetext]
+ {\usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite}}
+ {\multicitedelim}
+ {\usebibmacro{postnote}}
+
+\DeclareCiteCommand{\smartcite}[\iffootnote\mkbibbrackets\mkbibfootnote]
+ {\usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite}}
+ {\multicitedelim}
+ {\usebibmacro{postnote}}
+
+\DeclareCiteCommand{\supercite}[\mkbibsuperscript]
+ {\iffieldundef{prenote}
+ {}
+ {\BibliographyWarning{Ignoring prenote argument}}%
+ \iffieldundef{postnote}
+ {}
+ {\BibliographyWarning{Ignoring postnote argument}}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite}}
+ {\supercitedelim}
+ {}
+
+\DeclareCiteCommand{\cbx@textcite}
+ {\usebibmacro{textcite:init}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{textcite}}
+ {}
+ {\usebibmacro{textcite:postnote}}
+
+\DeclareCiteCommand{\textcite}[\cbx@textcite@init\cbx@textcite]
+ {\gdef\cbx@savedkeys{}%
+ \citetrackerfalse%
+ \pagetrackerfalse%
+ \DeferNextCitekeyHook%
+ \usebibmacro{textcite:init}}
+ {\ifthenelse{\iffirstcitekey\AND\value{multicitetotal}>0}
+ {\protected@xappto\cbx@savedcites{()(\thefield{multipostnote})}%
+ \global\clearfield{multipostnote}}
+ {}%
+ \xappto\cbx@savedkeys{\thefield{entrykey},}%
+ \iffieldequals{namehash}{\cbx@lasthash}
+ {}
+ {\stepcounter{textcitetotal}%
+ \savefield{namehash}{\cbx@lasthash}}}
+ {}
+ {\protected@xappto\cbx@savedcites{%
+ [\thefield{prenote}][\thefield{postnote}]{\cbx@savedkeys}}}
+
+% textcite has nested \DeclareCiteCommand definitions for textcite and we want to use
+% the normal textcite context
+\DeclareDelimcontextAlias{cbx@textcite}{textcite}
+
+\newrobustcmd{\cbx@textcite@init}[2]{%
+ \setcounter{textcitetotal}{0}%
+ \setcounter{textcitecount}{0}%
+ \def\cbx@savedcites{#1}#2%
+ \ifnumgreater{\value{textcitetotal}}{0}
+ {\cbx@savedcites}
+ {}}
+
+\DeclareMultiCiteCommand{\cbx@textcites}{\cbx@textcite}{}
+\DeclareMultiCiteCommand{\textcites}[\cbx@textcites@init\cbx@textcites]{\textcite}{}
+
+\let\cbx@textcites@init\cbx@textcite@init
+\pretocmd{\cbx@textcites@init}{\UseNextMultiCiteHook}{}{}
+
+\DeclareMultiCiteCommand{\cites}[\mkbibbrackets]{\cite}{\multicitedelim}
+\DeclareMultiCiteCommand{\parencites}[\mkbibbrackets]{\parencite}{\multicitedelim}
+\DeclareMultiCiteCommand{\smartcites}[\iffootnote\mkbibbrackets\mkbibfootnote]
+ {\smartcite}{\multicitedelim}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/cbx/numeric-verb-ms.cbx b/macros/latex/contrib/biblatex-ms/latex/cbx/numeric-verb-ms.cbx
new file mode 100644
index 0000000000..64f81415b9
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/cbx/numeric-verb-ms.cbx
@@ -0,0 +1,100 @@
+\ProvidesFile{numeric-verb-ms.cbx}
+[\abx@cbxid]
+
+\ExecuteBibliographyOptions{labelnumber,autocite=inline}
+
+\renewcommand*{\multicitedelim}{\addcomma\space}
+\renewcommand*{\iffinalcitedelim}{\iflastcitekey}
+
+\providebool{bbx:subentry}
+
+\DeclareFieldFormat{entrysetcount}{\mknumalph{#1}}
+
+\newbibmacro*{cite}{%
+ \printtext[bibhyperref]{%
+ \printfield{labelprefix}%
+ \printfield{labelnumber}%
+ \ifbool{bbx:subentry}
+ {\printfield{entrysetcount}}
+ {}}}
+
+\newbibmacro*{textcite}{%
+ \ifnameundef{labelname}
+ {\printfield[citetitle]{labeltitle}}
+ {\printnames{labelname}}%
+ \printdelim{namelabeldelim}\bibopenbracket
+ \ifnumequal{\value{citecount}}{1}
+ {\usebibmacro{prenote}}
+ {}%
+ \usebibmacro{cite}}
+
+\DeclareCiteCommand{\cite}
+ {\bibopenbracket
+ \usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \ifnumgreater{\value{citecount}}{1}
+ {\bibopenbracket}
+ {}%
+ \usebibmacro{cite}}
+ {\bibclosebracket\multicitedelim}
+ {\usebibmacro{postnote}%
+ \bibclosebracket}
+
+\DeclareCiteCommand{\parencite}[\mkbibbrackets]
+ {\usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite}}
+ {\multicitedelim}
+ {\usebibmacro{postnote}}
+
+\DeclareCiteCommand{\footcite}[\mkbibfootnote]
+ {\usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite}}
+ {\multicitedelim}
+ {\usebibmacro{postnote}}
+
+\DeclareCiteCommand{\footcitetext}[\mkbibfootnotetext]
+ {\usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite}}
+ {\multicitedelim}
+ {\usebibmacro{postnote}}
+
+\DeclareCiteCommand{\smartcite}[\iffootnote\mkbibbrackets\mkbibfootnote]
+ {\usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite}}
+ {\multicitedelim}
+ {\usebibmacro{postnote}}
+
+\DeclareCiteCommand{\textcite}
+ {}
+ {\usebibmacro{citeindex}%
+ \iffirstcitekey
+ {\setcounter{textcitetotal}{1}}
+ {\stepcounter{textcitetotal}%
+ \textcitedelim}%
+ \usebibmacro{textcite}}
+ {\bibclosebracket}
+ {\usebibmacro{postnote}%
+ \bibclosebracket}
+
+\DeclareCiteCommand{\supercite}[\mkbibsuperscript]
+ {\iffieldundef{prenote}
+ {}
+ {\BibliographyWarning{Ignoring prenote argument}}%
+ \iffieldundef{postnote}
+ {}
+ {\BibliographyWarning{Ignoring postnote argument}}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite}}
+ {\supercitedelim}
+ {}
+
+\DeclareMultiCiteCommand{\parencites}[\mkbibbrackets]{\parencite}{\multicitedelim}
+\DeclareMultiCiteCommand{\smartcites}[\iffootnote\mkbibbrackets\mkbibfootnote]
+ {\smartcite}{\multicitedelim}
+\DeclareMultiCiteCommand{\textcites}{\textcite}{}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/cbx/reading-ms.cbx b/macros/latex/contrib/biblatex-ms/latex/cbx/reading-ms.cbx
new file mode 100644
index 0000000000..3ff6ff6807
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/cbx/reading-ms.cbx
@@ -0,0 +1,6 @@
+\ProvidesFile{reading-ms.cbx}
+[\abx@cbxid]
+
+\RequireCitationStyle{authortitle}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/cbx/verbose-ibid-ms.cbx b/macros/latex/contrib/biblatex-ms/latex/cbx/verbose-ibid-ms.cbx
new file mode 100644
index 0000000000..3c7b7ae468
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/cbx/verbose-ibid-ms.cbx
@@ -0,0 +1,262 @@
+\ProvidesFile{verbose-ibid-ms.cbx}
+[\abx@cbxid]
+
+\InitializeCitationStyle{\numgdef{\cbx@resetcount}{\cbx@resetcount+1}}
+
+\DeclareFieldFormat{bibhyperlink}{%
+ \bibhyperlink{\iffootnote{f}{t}:\cbx@resetcount:\thefield{entrykey}}{#1}}
+\DeclareFieldFormat{bibhypertarget}{%
+ \bibhypertarget{\iffootnote{f}{t}:\cbx@resetcount:\thefield{entrykey}}{#1}}
+
+\newcommand*{\cbx@resetcount}{0}
+\providecommand*{\mkibid}[1]{#1}
+\renewcommand*{\iffinalcitedelim}{%
+ \ifnumequal{\value{textcitecount}}{\value{textcitetotal}-1}}
+
+\newtoggle{cbx:loccit}
+
+\newbibmacro*{cite:citepages}{}
+\newbibmacro*{cite:full:citepages}{}
+\newbibmacro*{cite:postnote}{}
+
+\DeclareBibliographyOption[boolean]{ibidpage}[true]{%
+ \ifstrequal{#1}{true}
+ {\ExecuteBibliographyOptions{loccittracker=constrict}}
+ {\ExecuteBibliographyOptions{loccittracker=false}}}
+
+\DeclareBibliographyOption[string]{citepages}[permit]{%
+ \ifcsdef{cbx@opt@citepages@#1}
+ {\csuse{cbx@opt@citepages@#1}}
+ {\PackageError{biblatex}
+ {Invalid option 'citepages=#1'}
+ {Valid values are 'permit', 'suppress', 'omit', 'separate'.}}}
+
+\providebibmacro*{cite:citepages}{}
+\providebibmacro*{cite:full:citepages}{}
+\providebibmacro*{cite:postnote}{}
+
+\def\cbx@opt@citepages@permit{%
+ \renewbibmacro*{cite:citepages}{}%
+ \renewbibmacro*{cite:full:citepages}{}%
+ \renewbibmacro*{cite:postnote}{%
+ \usebibmacro{cite:postnote:ibidpage}}}
+
+\def\cbx@opt@citepages@suppress{%
+ \renewbibmacro*{cite:citepages}{}%
+ \renewbibmacro*{cite:full:citepages}{%
+ \clearfield{pages}%
+ \clearfield{pagetotal}}%
+ \renewbibmacro*{cite:postnote}{%
+ \usebibmacro{cite:postnote:ibidpage}}}
+
+\def\cbx@opt@citepages@omit{%
+ \renewbibmacro*{cite:citepages}{}%
+ \renewbibmacro*{cite:full:citepages}{%
+ \ifboolexpr{
+ test {\ifnumequal{\value{citecount}}{\value{citetotal}}}
+ and
+ test {\iffieldpages{postnote}}
+ }
+ {\clearfield{pages}%
+ \clearfield{pagetotal}}
+ {}}%
+ \renewbibmacro*{cite:postnote}{%
+ \usebibmacro{cite:postnote:ibidpage}}}
+
+\def\cbx@opt@citepages@separate{%
+ \providetoggle{cbx:fullcite}%
+ \renewbibmacro*{cite:citepages}{%
+ \global\togglefalse{cbx:fullcite}}%
+ \renewbibmacro*{cite:full:citepages}{%
+ \global\toggletrue{cbx:fullcite}}%
+ \renewbibmacro*{cite:postnote}{%
+ \ifboolexpr{
+ togl {cbx:fullcite}
+ and
+ test {\iffieldpages{postnote}}
+ and
+ test {\ifnumequal{\value{citecount}}{\value{citetotal}}}
+ and
+ (
+ not test {\iffieldundef{pages}}
+ or
+ not test {\iffieldundef{pagetotal}}
+ )
+ }
+ {\usebibmacro{cite:postnote:pages}}
+ {\usebibmacro{cite:postnote:ibidpage}}}
+ \providebibmacro*{cite:postnote:pages}{%
+ \setunit{\printdelim{postnotedelim}}%
+ \bibstring{thiscite}%
+ \setunit{\addspace}%
+ \printfield{postnote}}}
+
+\ExecuteBibliographyOptions{citetracker=context,ibidtracker=constrict,
+ pagetracker,autocite=footnote,citepages=permit}
+
+\newbibmacro*{cite}{%
+ \usebibmacro{cite:citepages}%
+ \global\togglefalse{cbx:loccit}%
+ \ifciteseen
+ {\iffieldundef{shorthand}
+ {\ifboolexpr{
+ test {\ifciteibid}
+ and
+ not test {\iffirstonpage}
+ }
+ {\usebibmacro{cite:ibid}}
+ {\usebibmacro{cite:short}}}
+ {\usebibmacro{cite:shorthand}}}
+ {\usebibmacro{cite:full}}}
+
+\newbibmacro*{cite:full}{%
+ \usebibmacro{cite:full:citepages}%
+ \printtext[bibhypertarget]{%
+ \usedriver
+ {\DeclareNameAlias{sortname}{default}}
+ {\thefield{entrytype}}}%
+ \usebibmacro{shorthandintro}}
+
+\newbibmacro*{cite:short}{%
+ \printnames{labelname}%
+ \setunit*{\printdelim{nametitledelim}}%
+ \printtext[bibhyperlink]{%
+ \printfield[citetitle]{labeltitle}}}
+
+\newbibmacro*{cite:ibid}{%
+ \printtext[bibhyperlink]{\bibstring[\mkibid]{ibidem}}%
+ \ifloccit
+ {\global\toggletrue{cbx:loccit}}
+ {}}
+
+\newbibmacro*{cite:shorthand}{%
+ \printtext[bibhyperlink]{%
+ \printfield{shorthand}}}
+
+\newbibmacro*{cite:postnote:ibidpage}{%
+ \iftoggle{cbx:loccit}
+ {}
+ {\usebibmacro{postnote}}}
+
+\DeclareCiteCommand{\cite}
+ {\usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite}}
+ {\multicitedelim}
+ {\usebibmacro{cite:postnote}}
+
+\DeclareCiteCommand{\parencite}[\mkbibparens]
+ {\usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite}}
+ {\multicitedelim}
+ {\usebibmacro{cite:postnote}}
+
+\DeclareCiteCommand{\footcite}[\mkbibfootnote]
+ {\usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite}}
+ {\multicitedelim}
+ {\usebibmacro{cite:postnote}}
+
+\DeclareCiteCommand{\footcitetext}[\mkbibfootnotetext]
+ {\usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite}}
+ {\multicitedelim}
+ {\usebibmacro{cite:postnote}}
+
+\DeclareCiteCommand{\smartcite}[\iffootnote\mkbibparens\mkbibfootnote]
+ {\usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite}}
+ {\multicitedelim}
+ {\usebibmacro{cite:postnote}}
+
+\newbibmacro*{textcite}{%
+ \ifnameundef{labelname}
+ {\printfield[citetitle]{labeltitle}}
+ {\printnames{labelname}}}
+
+\newbibmacro*{textcite:init}{%
+ \citetrackerfalse%
+ \pagetrackerfalse%
+ \iffirstcitekey
+ {\global\undef\cbx@lasthash}
+ {}}
+
+\newbibmacro*{textcite:count}{%
+ \stepcounter{textcitetotal}%
+ \ifnumgreater{\value{uniquelist}}{\value{maxnames}}
+ {\ifnumgreater{\value{uniquelist}}{\value{textcitemaxnames}}
+ {\setcounter{textcitemaxnames}{\value{uniquelist}}}
+ {}}
+ {\ifnumless{\value{labelname}}{\value{maxnames}}
+ {\ifnumgreater{\value{labelname}}{\value{textcitemaxnames}}
+ {\setcounter{textcitemaxnames}{\value{labelname}}}
+ {}}
+ {\ifnumgreater{\value{maxnames}}{\value{textcitemaxnames}}
+ {\setcounter{textcitemaxnames}{\value{maxnames}}}
+ {}}}}
+
+\DeclareCiteCommand{\cbx@textcite}
+ {\usebibmacro{textcite:init}}
+ {\iffieldequals{namehash}{\cbx@lasthash}
+ {}
+ {\iffirstcitekey
+ {}
+ {\textcitedelim}%
+ \stepcounter{textcitecount}%
+ \usebibmacro{textcite}%
+ \savefield{namehash}{\cbx@lasthash}}}
+ {}
+ {}
+
+\DeclareCiteCommand{\textcite}[\cbx@textcite@init\cbx@textcite\footcite]
+ {\usebibmacro{textcite:init}%
+ \gdef\cbx@savedkeys{}%
+ \DeferNextCitekeyHook}
+ {\ifthenelse{\iffirstcitekey\AND\value{multicitetotal}>0}
+ {\protected@xappto\cbx@footcite@args{%
+ (\thefield{multiprenote})(\thefield{multipostnote})}}
+ {}%
+ \xappto\cbx@savedkeys{\thefield{entrykey},}%
+ \iffieldequals{namehash}{\cbx@lasthash}
+ {}
+ {\usebibmacro{textcite:count}%
+ \savefield{namehash}{\cbx@lasthash}}%
+ \ifnumequal{\value{citecount}}{\value{citetotal}}
+ {\protected@xappto\cbx@textcite@args{{\cbx@savedkeys}}%
+ \protected@xappto\cbx@footcite@args{%
+ [\thefield{prenote}][\thefield{postnote}]{\cbx@savedkeys}}%
+ \iflastcitekey
+ {\protected@xappto\cbx@textcite@args{\thefield{postpunct}}%
+ \protected@xappto\cbx@footcite@args{\nopunct}}
+ {}}
+ {}}
+ {}
+ {}
+
+% textcite has nested \DeclareCiteCommand definitions for textcite and we want to use
+% the normal textcite context
+\DeclareDelimcontextAlias{cbx@textcite}{textcite}
+
+\newrobustcmd{\cbx@textcite@init}[3]{%
+ \setcounter{textcitetotal}{0}%
+ \setcounter{textcitecount}{0}%
+ \setcounter{textcitemaxnames}{0}%
+ \def\cbx@textcite@args{#1}\def\cbx@footcite@args{#2}#3%
+ \cbx@textcite@args\@empty\cbx@footcite@args\@empty}
+
+\DeclareMultiCiteCommand{\cbx@textcites}{\cbx@textcite}{}
+\DeclareMultiCiteCommand{\textcites}
+ [\cbx@textcites@init\cbx@textcites\footcites]{\textcite}{}
+
+\let\cbx@textcites@init\cbx@textcite@init
+\pretocmd{\cbx@textcites@init}{%
+ \UseNextMultiCiteHook%
+ \AtNextMultiCite{%
+ \renewbibmacro{multiprenote}{}%
+ \renewbibmacro{multipostnote}{}}}{}{}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/cbx/verbose-inote-ms.cbx b/macros/latex/contrib/biblatex-ms/latex/cbx/verbose-inote-ms.cbx
new file mode 100644
index 0000000000..58ecbba45d
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/cbx/verbose-inote-ms.cbx
@@ -0,0 +1,321 @@
+\ProvidesFile{verbose-inote-ms.cbx}
+[\abx@cbxid]
+
+\DeclareFieldFormat{bibhyperlink}{%
+ \bibhyperlink{%
+ \thefield{entrykey}:\csuse{cbx@\iffootnote{f}{t}@\thefield{entrykey}}}{#1}}
+\DeclareFieldFormat{bibhypertarget}{%
+ \bibhypertarget{\thefield{entrykey}:\the\value{instcount}}{#1}}
+
+\providecommand*{\mkibid}[1]{#1}
+\renewcommand*{\iffinalcitedelim}{%
+ \ifnumequal{\value{textcitecount}}{\value{textcitetotal}-1}}
+
+\newtoggle{cbx:loccit}
+\newtoggle{cbx:pageref}
+
+\newbibmacro*{cite:citepages}{}
+\newbibmacro*{cite:full:citepages}{}
+\newbibmacro*{cite:postnote}{}
+
+\DeclareBibliographyOption[boolean]{ibidpage}[true]{%
+ \ifstrequal{#1}{true}
+ {\ExecuteBibliographyOptions{loccittracker=constrict}}
+ {\ExecuteBibliographyOptions{loccittracker=false}}}
+\DeclareBibliographyOption[boolean]{pageref}[true]{%
+ \settoggle{cbx:pageref}{#1}}
+
+\DeclareBibliographyOption[string]{citepages}[permit]{%
+ \ifcsdef{cbx@opt@citepages@#1}
+ {\csuse{cbx@opt@citepages@#1}}
+ {\PackageError{biblatex}
+ {Invalid option 'citepages=#1'}
+ {Valid values are 'permit', 'suppress', 'omit', 'separate'.}}}
+
+\providebibmacro*{cite:citepages}{}
+\providebibmacro*{cite:full:citepages}{}
+\providebibmacro*{cite:postnote}{}
+
+\def\cbx@opt@citepages@permit{%
+ \renewbibmacro*{cite:citepages}{}%
+ \renewbibmacro*{cite:full:citepages}{}%
+ \renewbibmacro*{cite:postnote}{%
+ \usebibmacro{cite:postnote:ibidpage}}}
+
+\def\cbx@opt@citepages@suppress{%
+ \renewbibmacro*{cite:citepages}{}%
+ \renewbibmacro*{cite:full:citepages}{%
+ \clearfield{pages}%
+ \clearfield{pagetotal}}%
+ \renewbibmacro*{cite:postnote}{%
+ \usebibmacro{cite:postnote:ibidpage}}}
+
+\def\cbx@opt@citepages@omit{%
+ \renewbibmacro*{cite:citepages}{}%
+ \renewbibmacro*{cite:full:citepages}{%
+ \ifboolexpr{
+ test {\ifnumequal{\value{citecount}}{\value{citetotal}}}
+ and
+ test {\iffieldpages{postnote}}
+ }
+ {\clearfield{pages}%
+ \clearfield{pagetotal}}
+ {}}%
+ \renewbibmacro*{cite:postnote}{%
+ \usebibmacro{cite:postnote:ibidpage}}}
+
+\def\cbx@opt@citepages@separate{%
+ \providetoggle{cbx:fullcite}%
+ \renewbibmacro*{cite:citepages}{%
+ \global\togglefalse{cbx:fullcite}}%
+ \renewbibmacro*{cite:full:citepages}{%
+ \global\toggletrue{cbx:fullcite}}%
+ \renewbibmacro*{cite:postnote}{%
+ \ifboolexpr{
+ togl {cbx:fullcite}
+ and
+ test {\iffieldpages{postnote}}
+ and
+ test {\ifnumequal{\value{citecount}}{\value{citetotal}}}
+ and
+ (
+ not test {\iffieldundef{pages}}
+ or
+ not test {\iffieldundef{pagetotal}}
+ )
+ }
+ {\usebibmacro{cite:postnote:pages}}
+ {\usebibmacro{cite:postnote:ibidpage}}}
+ \providebibmacro*{cite:postnote:pages}{%
+ \setunit{\printdelim{postnotedelim}}%
+ \bibstring{thiscite}%
+ \setunit{\addspace}%
+ \printfield{postnote}}}
+
+\ExecuteBibliographyOptions{citetracker=context,ibidtracker=constrict,
+ singletitle,pagetracker,autocite=footnote,citepages=permit}
+
+\newbibmacro*{cite}{%
+ \usebibmacro{cite:citepages}%
+ \global\togglefalse{cbx:loccit}%
+ \ifciteseen
+ {\iffieldundef{shorthand}
+ {\ifthenelse{\ifciteibid\AND\NOT\iffirstonpage}
+ {\usebibmacro{cite:ibid}}
+ {\usebibmacro{cite:short}}}
+ {\usebibmacro{cite:shorthand}}}
+ {\usebibmacro{cite:full}%
+ \usebibmacro{cite:save}}}
+
+\newbibmacro*{cite:save}{%
+ \csxdef{cbx@t@\thefield{entrykey}}{\the\value{instcount}}}
+
+\newbibmacro*{cite:full}{%
+ \usebibmacro{cite:full:citepages}%
+ \printtext[bibhypertarget]{%
+ \usedriver
+ {\DeclareNameAlias{sortname}{default}}
+ {\thefield{entrytype}}}%
+ \usebibmacro{shorthandintro}}
+
+\newbibmacro*{cite:short}{%
+ \printnames{labelname}%
+ \setunit*{\printdelim{nametitledelim}}%
+ \printtext[bibhyperlink]{%
+ \printfield[citetitle]{labeltitle}}}
+
+\newbibmacro*{cite:shorthand}{%
+ \printtext[bibhyperlink]{\printfield{shorthand}}}
+
+\newbibmacro*{cite:ibid}{%
+ \printtext[bibhyperlink]{\bibstring[\mkibid]{ibidem}}%
+ \ifloccit
+ {\global\toggletrue{cbx:loccit}}
+ {}}
+
+\newbibmacro*{cite:postnote:ibidpage}{%
+ \iftoggle{cbx:loccit}
+ {}
+ {\usebibmacro{postnote}}}
+
+\newbibmacro*{footcite}{%
+ \usebibmacro{cite:citepages}%
+ \global\togglefalse{cbx:loccit}%
+ \ifciteseen
+ {\iffieldundef{shorthand}
+ {\ifthenelse{\ifciteibid\AND\NOT\iffirstonpage}
+ {\usebibmacro{footcite:ibid}}
+ {\usebibmacro{footcite:note}}}
+ {\usebibmacro{footcite:shorthand}}}
+ {\usebibmacro{footcite:full}%
+ \usebibmacro{footcite:save}}}
+
+\newbibmacro*{footcite:save}{%
+ \csxdef{cbx@f@\thefield{entrykey}}{\the\value{instcount}}%
+ \label{cbx@\the\value{instcount}}}
+
+\newbibmacro*{footcite:full}{%
+ \usebibmacro{cite:full:citepages}%
+ \printtext[bibhypertarget]{%
+ \usedriver
+ {\DeclareNameAlias{sortname}{default}}
+ {\thefield{entrytype}}}%
+ \usebibmacro{shorthandintro}}
+
+\newbibmacro*{footcite:note}{%
+ \ifnameundef{labelname}
+ {\printfield{label}}
+ {\printnames{labelname}}%
+ \ifsingletitle
+ {}
+ {\setunit*{\printdelim{nametitledelim}}%
+ \printfield[title]{labeltitle}}%
+ \setunit*{\addcomma\space}%
+ \printtext{%
+ \bibstring{seenote}\addnbspace
+ \ref{cbx@\csuse{cbx@f@\thefield{entrykey}}}%
+ \iftoggle{cbx:pageref}
+ {\ifsamepage{\the\value{instcount}}
+ {\csuse{cbx@f@\thefield{entrykey}}}
+ {}
+ {\addcomma\space\bibstring{page}\addnbspace
+ \pageref{cbx@\csuse{cbx@f@\thefield{entrykey}}}}}
+ {}}}
+
+\newbibmacro*{footcite:shorthand}{%
+ \printtext[bibhyperlink]{\printfield{shorthand}}}
+
+\newbibmacro*{footcite:ibid}{%
+ \printtext[bibhyperlink]{\bibstring[\mkibid]{ibidem}}%
+ \ifloccit
+ {\global\toggletrue{cbx:loccit}}
+ {}}
+
+\DeclareCiteCommand{\cite}
+ {\usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \iffootnote
+ {\usebibmacro{footcite}}
+ {\usebibmacro{cite}}}
+ {\multicitedelim}
+ {\usebibmacro{cite:postnote}}
+
+\DeclareCiteCommand{\parencite}[\mkbibparens]
+ {\usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \iffootnote
+ {\usebibmacro{footcite}}
+ {\usebibmacro{cite}}}
+ {\multicitedelim}
+ {\usebibmacro{cite:postnote}}
+
+\DeclareCiteCommand{\footcite}[\mkbibfootnote]
+ {\usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{footcite}}
+ {\multicitedelim}
+ {\usebibmacro{cite:postnote}}
+
+\DeclareCiteCommand{\footcitetext}[\mkbibfootnotetext]
+ {\usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{footcite}}
+ {\multicitedelim}
+ {\usebibmacro{cite:postnote}}
+
+\DeclareCiteCommand{\smartcite}[\iffootnote\mkbibparens\mkbibfootnote]
+ {\usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \iffootnote
+ {\usebibmacro{footcite}}
+ {\usebibmacro{cite}}}
+ {\multicitedelim}
+ {\usebibmacro{cite:postnote}}
+
+\newbibmacro*{textcite}{%
+ \ifnameundef{labelname}
+ {\printfield[citetitle]{labeltitle}}
+ {\printnames{labelname}}}
+
+\newbibmacro*{textcite:init}{%
+ \citetrackerfalse%
+ \pagetrackerfalse%
+ \iffirstcitekey
+ {\global\undef\cbx@lasthash}
+ {}}
+
+\newbibmacro*{textcite:count}{%
+ \stepcounter{textcitetotal}%
+ \ifnumgreater{\value{uniquelist}}{\value{maxnames}}
+ {\ifnumgreater{\value{uniquelist}}{\value{textcitemaxnames}}
+ {\setcounter{textcitemaxnames}{\value{uniquelist}}}
+ {}}
+ {\ifnumless{\value{labelname}}{\value{maxnames}}
+ {\ifnumgreater{\value{labelname}}{\value{textcitemaxnames}}
+ {\setcounter{textcitemaxnames}{\value{labelname}}}
+ {}}
+ {\ifnumgreater{\value{maxnames}}{\value{textcitemaxnames}}
+ {\setcounter{textcitemaxnames}{\value{maxnames}}}
+ {}}}}
+
+\DeclareCiteCommand{\cbx@textcite}
+ {\usebibmacro{textcite:init}}
+ {\iffieldequals{namehash}{\cbx@lasthash}
+ {}
+ {\iffirstcitekey
+ {}
+ {\textcitedelim}%
+ \stepcounter{textcitecount}%
+ \usebibmacro{textcite}%
+ \savefield{namehash}{\cbx@lasthash}}}
+ {}
+ {}
+
+\DeclareCiteCommand{\textcite}[\cbx@textcite@init\cbx@textcite\footcite]
+ {\usebibmacro{textcite:init}%
+ \gdef\cbx@savedkeys{}%
+ \DeferNextCitekeyHook}
+ {\ifthenelse{\iffirstcitekey\AND\value{multicitetotal}>0}
+ {\protected@xappto\cbx@footcite@args{%
+ (\thefield{multiprenote})(\thefield{multipostnote})}}
+ {}%
+ \xappto\cbx@savedkeys{\thefield{entrykey},}%
+ \iffieldequals{namehash}{\cbx@lasthash}
+ {}
+ {\usebibmacro{textcite:count}%
+ \savefield{namehash}{\cbx@lasthash}}%
+ \ifnumequal{\value{citecount}}{\value{citetotal}}
+ {\protected@xappto\cbx@textcite@args{{\cbx@savedkeys}}%
+ \protected@xappto\cbx@footcite@args{%
+ [\thefield{prenote}][\thefield{postnote}]{\cbx@savedkeys}}%
+ \iflastcitekey
+ {\protected@xappto\cbx@textcite@args{\thefield{postpunct}}%
+ \protected@xappto\cbx@footcite@args{\nopunct}}
+ {}}
+ {}}
+ {}
+ {}
+
+% textcite has nested \DeclareCiteCommand definitions for textcite and we want to use
+% the normal textcite context
+\DeclareDelimcontextAlias{cbx@textcite}{textcite}
+
+\newrobustcmd{\cbx@textcite@init}[3]{%
+ \setcounter{textcitetotal}{0}%
+ \setcounter{textcitecount}{0}%
+ \setcounter{textcitemaxnames}{0}%
+ \def\cbx@textcite@args{#1}\def\cbx@footcite@args{#2}#3%
+ \cbx@textcite@args\empty\cbx@footcite@args\empty}
+
+\DeclareMultiCiteCommand{\cbx@textcites}{\cbx@textcite}{}
+\DeclareMultiCiteCommand{\textcites}
+ [\cbx@textcites@init\cbx@textcites\footcites]{\textcite}{}
+
+\let\cbx@textcites@init\cbx@textcite@init
+\pretocmd{\cbx@textcites@init}{%
+ \UseNextMultiCiteHook%
+ \AtNextMultiCite{%
+ \renewbibmacro{multiprenote}{}%
+ \renewbibmacro{multipostnote}{}}}{}{}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/cbx/verbose-ms.cbx b/macros/latex/contrib/biblatex-ms/latex/cbx/verbose-ms.cbx
new file mode 100644
index 0000000000..9ea88824c3
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/cbx/verbose-ms.cbx
@@ -0,0 +1,231 @@
+\ProvidesFile{verbose-ms.cbx}
+[\abx@cbxid]
+
+\InitializeCitationStyle{\numgdef{\cbx@resetcount}{\cbx@resetcount+1}}
+
+\DeclareFieldFormat{bibhyperlink}{%
+ \bibhyperlink{\iffootnote{f}{t}:\cbx@resetcount:\thefield{entrykey}}{#1}}
+\DeclareFieldFormat{bibhypertarget}{%
+ \bibhypertarget{\iffootnote{f}{t}:\cbx@resetcount:\thefield{entrykey}}{#1}}
+
+\newcommand*{\cbx@resetcount}{0}
+\renewcommand*{\iffinalcitedelim}{%
+ \ifnumequal{\value{textcitecount}}{\value{textcitetotal}-1}}
+
+\newbibmacro*{cite:citepages}{}
+\newbibmacro*{cite:full:citepages}{}
+\newbibmacro*{cite:postnote}{}
+
+\DeclareBibliographyOption[string]{citepages}[permit]{%
+ \ifcsdef{cbx@opt@citepages@#1}
+ {\csuse{cbx@opt@citepages@#1}}
+ {\PackageError{biblatex}
+ {Invalid option 'citepages=#1'}
+ {Valid values are 'permit', 'suppress', 'omit', 'separate'.}}}
+
+\providebibmacro*{cite:citepages}{}
+\providebibmacro*{cite:full:citepages}{}
+\providebibmacro*{cite:postnote}{}
+
+\def\cbx@opt@citepages@permit{%
+ \renewbibmacro*{cite:citepages}{}%
+ \renewbibmacro*{cite:full:citepages}{}%
+ \renewbibmacro*{cite:postnote}{\usebibmacro{postnote}}}
+
+\def\cbx@opt@citepages@suppress{%
+ \renewbibmacro*{cite:citepages}{}%
+ \renewbibmacro*{cite:full:citepages}{%
+ \clearfield{pages}%
+ \clearfield{pagetotal}}%
+ \renewbibmacro*{cite:postnote}{\usebibmacro{postnote}}}
+
+\def\cbx@opt@citepages@omit{%
+ \renewbibmacro*{cite:citepages}{}%
+ \renewbibmacro*{cite:full:citepages}{%
+ \ifboolexpr{
+ test {\ifnumequal{\value{citecount}}{\value{citetotal}}}
+ and
+ test {\iffieldpages{postnote}}
+ }
+ {\clearfield{pages}%
+ \clearfield{pagetotal}}
+ {}}%
+ \renewbibmacro*{cite:postnote}{\usebibmacro{postnote}}}
+
+\def\cbx@opt@citepages@separate{%
+ \providetoggle{cbx:fullcite}%
+ \renewbibmacro*{cite:citepages}{%
+ \global\togglefalse{cbx:fullcite}}%
+ \renewbibmacro*{cite:full:citepages}{%
+ \global\toggletrue{cbx:fullcite}}%
+ \renewbibmacro*{cite:postnote}{%
+ \ifboolexpr{
+ togl {cbx:fullcite}
+ and
+ test {\iffieldpages{postnote}}
+ and
+ test {\ifnumequal{\value{citecount}}{\value{citetotal}}}
+ and
+ (
+ not test {\iffieldundef{pages}}
+ or
+ not test {\iffieldundef{pagetotal}}
+ )
+ }
+ {\usebibmacro{cite:postnote:pages}}
+ {\usebibmacro{postnote}}}
+ \providebibmacro*{cite:postnote:pages}{%
+ \setunit{\printdelim{postnotedelim}}%
+ \bibstring{thiscite}%
+ \setunit{\addspace}%
+ \printfield{postnote}}}
+
+\ExecuteBibliographyOptions{citetracker=context,autocite=footnote,citepages=permit}
+
+\newbibmacro*{cite}{%
+ \usebibmacro{cite:citepages}%
+ \ifciteseen
+ {\iffieldundef{shorthand}
+ {\usebibmacro{cite:short}}
+ {\usebibmacro{cite:shorthand}}}
+ {\usebibmacro{cite:full}}}
+
+\newbibmacro*{cite:full}{%
+ \usebibmacro{cite:full:citepages}%
+ \printtext[bibhypertarget]{%
+ \usedriver
+ {\DeclareNameAlias{sortname}{default}}
+ {\thefield{entrytype}}}%
+ \usebibmacro{shorthandintro}}
+
+\newbibmacro*{cite:short}{%
+ \printnames{labelname}%
+ \setunit*{\printdelim{nametitledelim}}%
+ \printtext[bibhyperlink]{%
+ \printfield[citetitle]{labeltitle}}}
+
+\newbibmacro*{cite:shorthand}{%
+ \printtext[bibhyperlink]{\printfield{shorthand}}}
+
+\DeclareCiteCommand{\cite}
+ {\usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite}}
+ {\multicitedelim}
+ {\usebibmacro{cite:postnote}}
+
+\DeclareCiteCommand{\parencite}[\mkbibparens]
+ {\usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite}}
+ {\multicitedelim}
+ {\usebibmacro{cite:postnote}}
+
+\DeclareCiteCommand{\footcite}[\mkbibfootnote]
+ {\usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite}}
+ {\multicitedelim}
+ {\usebibmacro{cite:postnote}}
+
+\DeclareCiteCommand{\footcitetext}[\mkbibfootnotetext]
+ {\usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite}}
+ {\multicitedelim}
+ {\usebibmacro{cite:postnote}}
+
+\DeclareCiteCommand{\smartcite}[\iffootnote\mkbibparens\mkbibfootnote]
+ {\usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite}}
+ {\multicitedelim}
+ {\usebibmacro{cite:postnote}}
+
+\newbibmacro*{textcite}{%
+ \ifnameundef{labelname}
+ {\printfield[citetitle]{labeltitle}}
+ {\printnames{labelname}}}
+
+\newbibmacro*{textcite:init}{%
+ \citetrackerfalse%
+ \pagetrackerfalse%
+ \iffirstcitekey
+ {\global\undef\cbx@lasthash}
+ {}}
+
+\newbibmacro*{textcite:count}{%
+ \stepcounter{textcitetotal}%
+ \ifnumgreater{\value{uniquelist}}{\value{maxnames}}
+ {\ifnumgreater{\value{uniquelist}}{\value{textcitemaxnames}}
+ {\setcounter{textcitemaxnames}{\value{uniquelist}}}
+ {}}
+ {\ifnumless{\value{labelname}}{\value{maxnames}}
+ {\ifnumgreater{\value{labelname}}{\value{textcitemaxnames}}
+ {\setcounter{textcitemaxnames}{\value{labelname}}}
+ {}}
+ {\ifnumgreater{\value{maxnames}}{\value{textcitemaxnames}}
+ {\setcounter{textcitemaxnames}{\value{maxnames}}}
+ {}}}}
+
+\DeclareCiteCommand{\cbx@textcite}
+ {\usebibmacro{textcite:init}}
+ {\iffieldequals{namehash}{\cbx@lasthash}
+ {}
+ {\iffirstcitekey
+ {}
+ {\textcitedelim}%
+ \stepcounter{textcitecount}%
+ \usebibmacro{textcite}%
+ \savefield{namehash}{\cbx@lasthash}}}
+ {}
+ {}
+
+\DeclareCiteCommand{\textcite}[\cbx@textcite@init\cbx@textcite\footcite]
+ {\usebibmacro{textcite:init}%
+ \gdef\cbx@savedkeys{}%
+ \DeferNextCitekeyHook}
+ {\ifthenelse{\iffirstcitekey\AND\value{multicitetotal}>0}
+ {\protected@xappto\cbx@footcite@args{%
+ (\thefield{multiprenote})(\thefield{multipostnote})}}
+ {}%
+ \xappto\cbx@savedkeys{\thefield{entrykey},}%
+ \iffieldequals{namehash}{\cbx@lasthash}
+ {}
+ {\usebibmacro{textcite:count}%
+ \savefield{namehash}{\cbx@lasthash}}%
+ \ifnumequal{\value{citecount}}{\value{citetotal}}
+ {\protected@xappto\cbx@textcite@args{{\cbx@savedkeys}}%
+ \protected@xappto\cbx@footcite@args{%
+ [\thefield{prenote}][\thefield{postnote}]{\cbx@savedkeys}}%
+ \iflastcitekey
+ {\protected@xappto\cbx@textcite@args{\thefield{postpunct}}%
+ \protected@xappto\cbx@footcite@args{\nopunct}}
+ {}}
+ {}}
+ {}
+ {}
+
+% textcite has nested \DeclareCiteCommand definitions for textcite and we want to use
+% the normal textcite context
+\DeclareDelimcontextAlias{cbx@textcite}{textcite}
+
+\newrobustcmd{\cbx@textcite@init}[3]{%
+ \setcounter{textcitetotal}{0}%
+ \setcounter{textcitecount}{0}%
+ \setcounter{textcitemaxnames}{0}%
+ \def\cbx@textcite@args{#1}\def\cbx@footcite@args{#2}#3%
+ \cbx@textcite@args\empty\cbx@footcite@args\empty}
+
+\DeclareMultiCiteCommand{\cbx@textcites}{\cbx@textcite}{}
+\DeclareMultiCiteCommand{\textcites}
+ [\cbx@textcites@init\cbx@textcites\footcites]{\textcite}{}
+
+\let\cbx@textcites@init\cbx@textcite@init
+\pretocmd{\cbx@textcites@init}{%
+ \UseNextMultiCiteHook%
+ \AtNextMultiCite{%
+ \renewbibmacro{multiprenote}{}%
+ \renewbibmacro{multipostnote}{}}}{}{}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/cbx/verbose-note-ms.cbx b/macros/latex/contrib/biblatex-ms/latex/cbx/verbose-note-ms.cbx
new file mode 100644
index 0000000000..797715f94f
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/cbx/verbose-note-ms.cbx
@@ -0,0 +1,292 @@
+\ProvidesFile{verbose-note-ms.cbx}
+[\abx@cbxid]
+
+\DeclareFieldFormat{bibhyperlink}{%
+ \bibhyperlink{%
+ \thefield{entrykey}:\csuse{cbx@\iffootnote{f}{t}@\thefield{entrykey}}}{#1}}
+\DeclareFieldFormat{bibhypertarget}{%
+ \bibhypertarget{\thefield{entrykey}:\the\value{instcount}}{#1}}
+
+\newtoggle{cbx:pageref}
+
+\renewcommand*{\iffinalcitedelim}{%
+ \ifnumequal{\value{textcitecount}}{\value{textcitetotal}-1}}
+
+\newbibmacro*{cite:citepages}{}
+\newbibmacro*{cite:full:citepages}{}
+\newbibmacro*{cite:postnote}{}
+
+\DeclareBibliographyOption[boolean]{pageref}[true]{%
+ \settoggle{cbx:pageref}{#1}%
+ \iftoggle{cbx:pageref}
+ {\ExecuteBibliographyOptions{pagetracker}}
+ {}}
+
+\DeclareBibliographyOption[string]{citepages}[permit]{%
+ \ifcsdef{cbx@opt@citepages@#1}
+ {\csuse{cbx@opt@citepages@#1}}
+ {\PackageError{biblatex}
+ {Invalid option 'citepages=#1'}
+ {Valid values are 'permit', 'suppress', 'omit', 'separate'.}}}
+
+\providebibmacro*{cite:citepages}{}
+\providebibmacro*{cite:full:citepages}{}
+\providebibmacro*{cite:postnote}{}
+
+\def\cbx@opt@citepages@permit{%
+ \renewbibmacro*{cite:citepages}{}%
+ \renewbibmacro*{cite:full:citepages}{}%
+ \renewbibmacro*{cite:postnote}{\usebibmacro{postnote}}}
+
+\def\cbx@opt@citepages@suppress{%
+ \renewbibmacro*{cite:citepages}{}%
+ \renewbibmacro*{cite:full:citepages}{%
+ \clearfield{pages}%
+ \clearfield{pagetotal}}%
+ \renewbibmacro*{cite:postnote}{\usebibmacro{postnote}}}
+
+\def\cbx@opt@citepages@omit{%
+ \renewbibmacro*{cite:citepages}{}%
+ \renewbibmacro*{cite:full:citepages}{%
+ \ifboolexpr{
+ test {\ifnumequal{\value{citecount}}{\value{citetotal}}}
+ and
+ test {\iffieldpages{postnote}}
+ }
+ {\clearfield{pages}%
+ \clearfield{pagetotal}}
+ {}}%
+ \renewbibmacro*{cite:postnote}{\usebibmacro{postnote}}}
+
+\def\cbx@opt@citepages@separate{%
+ \providetoggle{cbx:fullcite}%
+ \renewbibmacro*{cite:citepages}{%
+ \global\togglefalse{cbx:fullcite}}%
+ \renewbibmacro*{cite:full:citepages}{%
+ \global\toggletrue{cbx:fullcite}}%
+ \renewbibmacro*{cite:postnote}{%
+ \ifboolexpr{
+ togl {cbx:fullcite}
+ and
+ test {\iffieldpages{postnote}}
+ and
+ test {\ifnumequal{\value{citecount}}{\value{citetotal}}}
+ and
+ (
+ not test {\iffieldundef{pages}}
+ or
+ not test {\iffieldundef{pagetotal}}
+ )
+ }
+ {\usebibmacro{cite:postnote:pages}}
+ {\usebibmacro{postnote}}}
+ \providebibmacro*{cite:postnote:pages}{%
+ \setunit{\printdelim{postnotedelim}}%
+ \bibstring{thiscite}%
+ \setunit{\addspace}%
+ \printfield{postnote}}}
+
+\ExecuteBibliographyOptions{citetracker=context,singletitle,autocite=footnote,
+ citepages=permit}
+
+\newbibmacro*{cite}{%
+ \usebibmacro{cite:citepages}%
+ \ifciteseen
+ {\iffieldundef{shorthand}
+ {\usebibmacro{cite:short}}
+ {\usebibmacro{cite:shorthand}}}
+ {\usebibmacro{cite:full}%
+ \usebibmacro{cite:save}}}
+
+\newbibmacro*{cite:save}{%
+ \csxdef{cbx@t@\thefield{entrykey}}{\the\value{instcount}}}
+
+\newbibmacro*{cite:full}{%
+ \usebibmacro{cite:full:citepages}%
+ \printtext[bibhypertarget]{%
+ \usedriver
+ {\DeclareNameAlias{sortname}{default}}
+ {\thefield{entrytype}}}%
+ \usebibmacro{shorthandintro}}
+
+\newbibmacro*{cite:short}{%
+ \printnames{labelname}%
+ \setunit*{\printdelim{nametitledelim}}%
+ \printtext[bibhyperlink]{%
+ \printfield[citetitle]{labeltitle}}}
+
+\newbibmacro*{cite:shorthand}{%
+ \printtext[bibhyperlink]{\printfield{shorthand}}}
+
+\newbibmacro*{footcite}{%
+ \usebibmacro{cite:citepages}%
+ \ifciteseen
+ {\iffieldundef{shorthand}
+ {\usebibmacro{footcite:note}}
+ {\usebibmacro{footcite:shorthand}}}
+ {\usebibmacro{footcite:full}%
+ \usebibmacro{footcite:save}}}
+
+\newbibmacro*{footcite:save}{%
+ \csxdef{cbx@f@\thefield{entrykey}}{\the\value{instcount}}%
+ \label{cbx@\the\value{instcount}}}
+
+\newbibmacro*{footcite:full}{%
+ \usebibmacro{cite:full:citepages}%
+ \printtext[bibhypertarget]{%
+ \usedriver
+ {\DeclareNameAlias{sortname}{default}}
+ {\thefield{entrytype}}}%
+ \usebibmacro{shorthandintro}}
+
+\newbibmacro*{footcite:note}{%
+ \ifnameundef{labelname}
+ {\printfield{label}}
+ {\printnames{labelname}}%
+ \ifsingletitle
+ {}
+ {\setunit*{\printdelim{nametitledelim}}%
+ \printfield[title]{labeltitle}}%
+ \setunit*{\addcomma\space}%
+ \printtext{%
+ \bibstring{seenote}\addnbspace
+ \ref{cbx@\csuse{cbx@f@\thefield{entrykey}}}%
+ \iftoggle{cbx:pageref}
+ {\ifsamepage{\the\value{instcount}}
+ {\csuse{cbx@f@\thefield{entrykey}}}
+ {}
+ {\addcomma\space\bibstring{page}\addnbspace
+ \pageref{cbx@\csuse{cbx@f@\thefield{entrykey}}}}}
+ {}}}
+
+\newbibmacro*{footcite:shorthand}{%
+ \printtext[bibhyperlink]{\printfield{shorthand}}}
+
+\DeclareCiteCommand{\cite}
+ {\usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \iffootnote
+ {\usebibmacro{footcite}}
+ {\usebibmacro{cite}}}
+ {\multicitedelim}
+ {\usebibmacro{cite:postnote}}
+
+\DeclareCiteCommand{\parencite}[\mkbibparens]
+ {\usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \iffootnote
+ {\usebibmacro{footcite}}
+ {\usebibmacro{cite}}}
+ {\multicitedelim}
+ {\usebibmacro{cite:postnote}}
+
+\DeclareCiteCommand{\footcite}[\mkbibfootnote]
+ {\usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{footcite}}
+ {\multicitedelim}
+ {\usebibmacro{cite:postnote}}
+
+\DeclareCiteCommand{\footcitetext}[\mkbibfootnotetext]
+ {\usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{footcite}}
+ {\multicitedelim}
+ {\usebibmacro{cite:postnote}}
+
+\DeclareCiteCommand{\smartcite}[\iffootnote\mkbibparens\mkbibfootnote]
+ {\usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \iffootnote
+ {\usebibmacro{footcite}}
+ {\usebibmacro{cite}}}
+ {\multicitedelim}
+ {\usebibmacro{cite:postnote}}
+
+\newbibmacro*{textcite}{%
+ \ifnameundef{labelname}
+ {\printfield[citetitle]{labeltitle}}
+ {\printnames{labelname}}}
+
+\newbibmacro*{textcite:init}{%
+ \citetrackerfalse%
+ \pagetrackerfalse%
+ \iffirstcitekey
+ {\global\undef\cbx@lasthash}
+ {}}
+
+\newbibmacro*{textcite:count}{%
+ \stepcounter{textcitetotal}%
+ \ifnumgreater{\value{uniquelist}}{\value{maxnames}}
+ {\ifnumgreater{\value{uniquelist}}{\value{textcitemaxnames}}
+ {\setcounter{textcitemaxnames}{\value{uniquelist}}}
+ {}}
+ {\ifnumless{\value{labelname}}{\value{maxnames}}
+ {\ifnumgreater{\value{labelname}}{\value{textcitemaxnames}}
+ {\setcounter{textcitemaxnames}{\value{labelname}}}
+ {}}
+ {\ifnumgreater{\value{maxnames}}{\value{textcitemaxnames}}
+ {\setcounter{textcitemaxnames}{\value{maxnames}}}
+ {}}}}
+
+\DeclareCiteCommand{\cbx@textcite}
+ {\usebibmacro{textcite:init}}
+ {\iffieldequals{namehash}{\cbx@lasthash}
+ {}
+ {\iffirstcitekey
+ {}
+ {\textcitedelim}%
+ \stepcounter{textcitecount}%
+ \usebibmacro{textcite}%
+ \savefield{namehash}{\cbx@lasthash}}}
+ {}
+ {}
+
+\DeclareCiteCommand{\textcite}[\cbx@textcite@init\cbx@textcite\footcite]
+ {\usebibmacro{textcite:init}%
+ \gdef\cbx@savedkeys{}%
+ \DeferNextCitekeyHook}
+ {\ifthenelse{\iffirstcitekey\AND\value{multicitetotal}>0}
+ {\protected@xappto\cbx@footcite@args{%
+ (\thefield{multiprenote})(\thefield{multipostnote})}}
+ {}%
+ \xappto\cbx@savedkeys{\thefield{entrykey},}%
+ \iffieldequals{namehash}{\cbx@lasthash}
+ {}
+ {\usebibmacro{textcite:count}%
+ \savefield{namehash}{\cbx@lasthash}}%
+ \ifnumequal{\value{citecount}}{\value{citetotal}}
+ {\protected@xappto\cbx@textcite@args{{\cbx@savedkeys}}%
+ \protected@xappto\cbx@footcite@args{%
+ [\thefield{prenote}][\thefield{postnote}]{\cbx@savedkeys}}%
+ \iflastcitekey
+ {\protected@xappto\cbx@textcite@args{\thefield{postpunct}}%
+ \protected@xappto\cbx@footcite@args{\nopunct}}
+ {}}
+ {}}
+ {}
+ {}
+
+% textcite has nested \DeclareCiteCommand definitions for textcite and we want to use
+% the normal textcite context
+\DeclareDelimcontextAlias{cbx@textcite}{textcite}
+
+\newrobustcmd{\cbx@textcite@init}[3]{%
+ \setcounter{textcitetotal}{0}%
+ \setcounter{textcitecount}{0}%
+ \setcounter{textcitemaxnames}{0}%
+ \def\cbx@textcite@args{#1}\def\cbx@footcite@args{#2}#3%
+ \cbx@textcite@args\empty\cbx@footcite@args\empty}
+
+\DeclareMultiCiteCommand{\cbx@textcites}{\cbx@textcite}{}
+\DeclareMultiCiteCommand{\textcites}
+ [\cbx@textcites@init\cbx@textcites\footcites]{\textcite}{}
+
+\let\cbx@textcites@init\cbx@textcite@init
+\pretocmd{\cbx@textcites@init}{%
+ \UseNextMultiCiteHook%
+ \AtNextMultiCite{%
+ \renewbibmacro{multiprenote}{}%
+ \renewbibmacro{multipostnote}{}}}{}{}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/cbx/verbose-trad1-ms.cbx b/macros/latex/contrib/biblatex-ms/latex/cbx/verbose-trad1-ms.cbx
new file mode 100644
index 0000000000..018e8c228f
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/cbx/verbose-trad1-ms.cbx
@@ -0,0 +1,294 @@
+\ProvidesFile{verbose-trad1-ms.cbx}
+[\abx@cbxid]
+
+\InitializeCitationStyle{\numgdef{\cbx@resetcount}{\cbx@resetcount+1}}
+
+\DeclareFieldFormat{bibhyperlink}{%
+ \bibhyperlink{\iffootnote{f}{t}:\cbx@resetcount:\thefield{entrykey}}{#1}}
+\DeclareFieldFormat{bibhypertarget}{%
+ \bibhypertarget{\iffootnote{f}{t}:\cbx@resetcount:\thefield{entrykey}}{#1}}
+
+\newcommand*{\cbx@resetcount}{0}
+\providecommand*{\mkibid}[1]{#1}
+\renewcommand*{\iffinalcitedelim}{%
+ \ifnumequal{\value{textcitecount}}{\value{textcitetotal}-1}}
+
+\newtoggle{cbx:ibidpage}
+\newtoggle{cbx:loccit}
+\newbool{cbx:noidem}
+
+\DeclareBibliographyOption[boolean]{ibidpage}[true]{%
+ \settoggle{cbx:ibidpage}{#1}}
+
+\DeclareBibliographyOption[boolean]{strict}[true]{%
+ \ifstrequal{#1}{true}
+ {\ExecuteBibliographyOptions{ibidtracker=constrict,idemtracker=constrict}}
+ {\ExecuteBibliographyOptions{ibidtracker=context,idemtracker=context}}}
+
+\DeclareBibliographyOption[string]{citepages}[permit]{%
+ \ifcsdef{cbx@opt@citepages@#1}
+ {\csuse{cbx@opt@citepages@#1}}
+ {\PackageError{biblatex}
+ {Invalid option 'citepages=#1'}
+ {Valid values are 'permit', 'suppress', 'omit', 'separate'.}}}
+
+\providebibmacro*{cite:citepages}{}
+\providebibmacro*{cite:full:citepages}{}
+\providebibmacro*{cite:postnote}{}
+
+\def\cbx@opt@citepages@permit{%
+ \renewbibmacro*{cite:citepages}{}%
+ \renewbibmacro*{cite:full:citepages}{}%
+ \renewbibmacro*{cite:postnote}{%
+ \usebibmacro{cite:postnote:ibidpage}}}
+
+\def\cbx@opt@citepages@suppress{%
+ \renewbibmacro*{cite:citepages}{}%
+ \renewbibmacro*{cite:full:citepages}{%
+ \clearfield{pages}%
+ \clearfield{pagetotal}}%
+ \renewbibmacro*{cite:postnote}{%
+ \usebibmacro{cite:postnote:ibidpage}}}
+
+\def\cbx@opt@citepages@omit{%
+ \renewbibmacro*{cite:citepages}{}%
+ \renewbibmacro*{cite:full:citepages}{%
+ \ifboolexpr{
+ test {\ifnumequal{\value{citecount}}{\value{citetotal}}}
+ and
+ test {\iffieldpages{postnote}}
+ }
+ {\clearfield{pages}%
+ \clearfield{pagetotal}}
+ {}}%
+ \renewbibmacro*{cite:postnote}{%
+ \usebibmacro{cite:postnote:ibidpage}}}
+
+\def\cbx@opt@citepages@separate{%
+ \providetoggle{cbx:fullcite}%
+ \renewbibmacro*{cite:citepages}{%
+ \global\togglefalse{cbx:fullcite}}%
+ \renewbibmacro*{cite:full:citepages}{%
+ \global\toggletrue{cbx:fullcite}}%
+ \renewbibmacro*{cite:postnote}{%
+ \ifboolexpr{
+ togl {cbx:fullcite}
+ and
+ test {\iffieldpages{postnote}}
+ and
+ test {\ifnumequal{\value{citecount}}{\value{citetotal}}}
+ and
+ (
+ not test {\iffieldundef{pages}}
+ or
+ not test {\iffieldundef{pagetotal}}
+ )
+ }
+ {\usebibmacro{cite:postnote:pages}}
+ {\usebibmacro{cite:postnote:ibidpage}}}
+ \providebibmacro*{cite:postnote:pages}{%
+ \setunit{\printdelim{postnotedelim}}%
+ \bibstring{thiscite}%
+ \setunit{\addspace}%
+ \printfield{postnote}}}
+
+\ExecuteBibliographyOptions{citetracker=context,ibidtracker=constrict,
+ idemtracker=constrict,opcittracker=context,loccittracker=context,
+ autocite=footnote,citepages=permit}
+
+\newbibmacro*{cite:save}{%
+ \csxdef{cbx@lastcite@\thefield{entrykey}}{\the\value{instcount}}%
+ \global\boolfalse{cbx:noidem}}
+
+\newbibmacro*{cite}{%
+ \usebibmacro{cite:citepages}%
+ \global\togglefalse{cbx:loccit}%
+ \bibhypertarget{cite\the\value{instcount}}{%
+ \ifciteseen
+ {\iffieldundef{shorthand}
+ {\ifciteibid
+ {\usebibmacro{cite:ibid}}
+ {\ifthenelse{\ifciteidem\AND\NOT\boolean{cbx:noidem}}
+ {\usebibmacro{cite:idem}%
+ \usebibmacro{cite:title}}
+ {\ifnameundef{labelname}
+ {\usebibmacro{cite:title}}
+ {\usebibmacro{cite:name}%
+ \ifopcit
+ {\ifloccit
+ {\usebibmacro{cite:loccit}}
+ {\usebibmacro{cite:opcit}}}
+ {\usebibmacro{cite:title}}}}}%
+ \usebibmacro{cite:save}}
+ {\usebibmacro{cite:shorthand}}}
+ {\usebibmacro{cite:full}%
+ \usebibmacro{cite:save}}}}
+
+\newbibmacro*{cite:full}{%
+ \usebibmacro{cite:full:citepages}%
+ \printtext[bibhypertarget]{%
+ \usedriver
+ {\DeclareNameAlias{sortname}{default}}
+ {\thefield{entrytype}}}%
+ \usebibmacro{shorthandintro}}
+
+\newbibmacro*{cite:name}{%
+ \printnames{labelname}%
+ \setunit*{\printdelim{nametitledelim}}}
+
+\newbibmacro*{cite:idem}{%
+ \bibstring[\mkibid]{idem\thefield{gender}}%
+ \setunit{\printdelim{nametitledelim}}}
+
+\newbibmacro*{cite:title}{%
+ \printtext[bibhyperlink]{%
+ \printfield[citetitle]{labeltitle}}}
+
+\newbibmacro*{cite:opcit}{%
+ \printtext[bibhyperlink]{\bibstring[\mkibid]{opcit}}}
+
+\newbibmacro*{cite:loccit}{%
+ \printtext{%
+ \bibhyperlink{cite\csuse{cbx@lastcite@\thefield{entrykey}}}{%
+ \bibstring[\mkibid]{loccit}}}%
+ \global\toggletrue{cbx:loccit}}
+
+\newbibmacro*{cite:ibid}{%
+ \printtext{%
+ \bibhyperlink{cite\csuse{cbx@lastcite@\thefield{entrykey}}}{%
+ \bibstring[\mkibid]{ibidem}}}%
+ \ifboolexpr{ test {\ifloccit} and togl {cbx:ibidpage} }
+ {\global\toggletrue{cbx:loccit}}
+ {}}
+
+\newbibmacro*{cite:shorthand}{%
+ \printtext[bibhyperlink]{\printfield{shorthand}}%
+ \global\booltrue{cbx:noidem}}
+
+\newbibmacro*{cite:postnote:ibidpage}{%
+ \iftoggle{cbx:loccit}
+ {}
+ {\usebibmacro{postnote}}}
+
+\DeclareCiteCommand{\cite}
+ {\usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite}}
+ {\multicitedelim}
+ {\usebibmacro{cite:postnote}}
+
+\DeclareCiteCommand{\parencite}[\mkbibparens]
+ {\usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite}}
+ {\multicitedelim}
+ {\usebibmacro{cite:postnote}}
+
+\DeclareCiteCommand{\footcite}[\mkbibfootnote]
+ {\usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite}}
+ {\multicitedelim}
+ {\usebibmacro{cite:postnote}}
+
+\DeclareCiteCommand{\footcitetext}[\mkbibfootnotetext]
+ {\usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite}}
+ {\multicitedelim}
+ {\usebibmacro{cite:postnote}}
+
+\DeclareCiteCommand{\smartcite}[\iffootnote\mkbibparens\mkbibfootnote]
+ {\usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite}}
+ {\multicitedelim}
+ {\usebibmacro{cite:postnote}}
+
+\newbibmacro*{textcite}{%
+ \ifnameundef{labelname}
+ {\printfield[citetitle]{labeltitle}}
+ {\printnames{labelname}}}
+
+\newbibmacro*{textcite:init}{%
+ \citetrackerfalse%
+ \pagetrackerfalse%
+ \iffirstcitekey
+ {\global\undef\cbx@lasthash}
+ {}}
+
+\newbibmacro*{textcite:count}{%
+ \stepcounter{textcitetotal}%
+ \ifnumgreater{\value{uniquelist}}{\value{maxnames}}
+ {\ifnumgreater{\value{uniquelist}}{\value{textcitemaxnames}}
+ {\setcounter{textcitemaxnames}{\value{uniquelist}}}
+ {}}
+ {\ifnumless{\value{labelname}}{\value{maxnames}}
+ {\ifnumgreater{\value{labelname}}{\value{textcitemaxnames}}
+ {\setcounter{textcitemaxnames}{\value{labelname}}}
+ {}}
+ {\ifnumgreater{\value{maxnames}}{\value{textcitemaxnames}}
+ {\setcounter{textcitemaxnames}{\value{maxnames}}}
+ {}}}}
+
+\DeclareCiteCommand{\cbx@textcite}
+ {\usebibmacro{textcite:init}}
+ {\iffieldequals{namehash}{\cbx@lasthash}
+ {}
+ {\iffirstcitekey
+ {}
+ {\textcitedelim}%
+ \stepcounter{textcitecount}%
+ \usebibmacro{textcite}%
+ \savefield{namehash}{\cbx@lasthash}}}
+ {}
+ {}
+
+\DeclareCiteCommand{\textcite}[\cbx@textcite@init\cbx@textcite\footcite]
+ {\usebibmacro{textcite:init}%
+ \gdef\cbx@savedkeys{}%
+ \DeferNextCitekeyHook}
+ {\ifthenelse{\iffirstcitekey\AND\value{multicitetotal}>0}
+ {\protected@xappto\cbx@footcite@args{%
+ (\thefield{multiprenote})(\thefield{multipostnote})}}
+ {}%
+ \xappto\cbx@savedkeys{\thefield{entrykey},}%
+ \iffieldequals{namehash}{\cbx@lasthash}
+ {}
+ {\usebibmacro{textcite:count}%
+ \savefield{namehash}{\cbx@lasthash}}%
+ \ifnumequal{\value{citecount}}{\value{citetotal}}
+ {\protected@xappto\cbx@textcite@args{{\cbx@savedkeys}}%
+ \protected@xappto\cbx@footcite@args{%
+ [\thefield{prenote}][\thefield{postnote}]{\cbx@savedkeys}}%
+ \iflastcitekey
+ {\protected@xappto\cbx@textcite@args{\thefield{postpunct}}%
+ \protected@xappto\cbx@footcite@args{\nopunct}}
+ {}}
+ {}}
+ {}
+ {}
+
+% textcite has nested \DeclareCiteCommand definitions for textcite and we want to use
+% the normal textcite context
+\DeclareDelimcontextAlias{cbx@textcite}{textcite}
+
+\newrobustcmd{\cbx@textcite@init}[3]{%
+ \setcounter{textcitetotal}{0}%
+ \setcounter{textcitecount}{0}%
+ \setcounter{textcitemaxnames}{0}%
+ \def\cbx@textcite@args{#1}\def\cbx@footcite@args{#2}#3%
+ \cbx@textcite@args\empty\cbx@footcite@args\empty}
+
+\DeclareMultiCiteCommand{\cbx@textcites}{\cbx@textcite}{}
+\DeclareMultiCiteCommand{\textcites}
+ [\cbx@textcites@init\cbx@textcites\footcites]{\textcite}{}
+
+\let\cbx@textcites@init\cbx@textcite@init
+\pretocmd{\cbx@textcites@init}{%
+ \UseNextMultiCiteHook%
+ \AtNextMultiCite{%
+ \renewbibmacro{multiprenote}{}%
+ \renewbibmacro{multipostnote}{}}}{}{}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/cbx/verbose-trad2-ms.cbx b/macros/latex/contrib/biblatex-ms/latex/cbx/verbose-trad2-ms.cbx
new file mode 100644
index 0000000000..81ecbf2556
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/cbx/verbose-trad2-ms.cbx
@@ -0,0 +1,288 @@
+\ProvidesFile{verbose-trad2-ms.cbx}
+[\abx@cbxid]
+
+\InitializeCitationStyle{\numgdef{\cbx@resetcount}{\cbx@resetcount+1}}
+
+\DeclareFieldFormat{bibhyperlink}{%
+ \bibhyperlink{\iffootnote{f}{t}:\cbx@resetcount:\thefield{entrykey}}{#1}}
+
+\DeclareFieldFormat{bibhypertarget}{%
+ \bibhypertarget{\iffootnote{f}{t}:\cbx@resetcount:\thefield{entrykey}}{#1}}
+
+\newcommand*{\cbx@resetcount}{0}
+\providecommand*{\mkibid}[1]{#1}
+\renewcommand*{\iffinalcitedelim}{%
+ \ifnumequal{\value{textcitecount}}{\value{textcitetotal}-1}}
+
+\newtoggle{cbx:fullcite}
+\newtoggle{cbx:loccit}
+\newbool{cbx:noidem}
+
+\newbibmacro*{cite:citepages}{}
+\newbibmacro*{cite:full:citepages}{}
+\newbibmacro*{cite:postnote}{}
+
+\DeclareBibliographyOption[boolean]{ibidpage}[true]{%
+ \ifstrequal{#1}{true}
+ {\ExecuteBibliographyOptions{loccittracker=constrict}}
+ {\ExecuteBibliographyOptions{loccittracker=false}}}
+
+\DeclareBibliographyOption[boolean]{strict}[true]{%
+ \ifstrequal{#1}{true}
+ {\ExecuteBibliographyOptions{ibidtracker=constrict,idemtracker=constrict}}
+ {\ExecuteBibliographyOptions{ibidtracker=context,idemtracker=context}}}
+
+\DeclareBibliographyOption[string]{citepages}[permit]{%
+ \ifcsdef{cbx@opt@citepages@#1}
+ {\csuse{cbx@opt@citepages@#1}}
+ {\PackageError{biblatex}
+ {Invalid option 'citepages=#1'}
+ {Valid values are 'permit', 'suppress', 'omit', 'separate'.}}}
+
+\providebibmacro*{cite:citepages}{}
+\providebibmacro*{cite:full:citepages}{}
+\providebibmacro*{cite:postnote}{}
+
+\def\cbx@opt@citepages@permit{%
+ \renewbibmacro*{cite:citepages}{}%
+ \renewbibmacro*{cite:full:citepages}{}%
+ \renewbibmacro*{cite:postnote}{%
+ \usebibmacro{cite:postnote:ibidpage}}}
+
+\def\cbx@opt@citepages@suppress{%
+ \renewbibmacro*{cite:citepages}{}%
+ \renewbibmacro*{cite:full:citepages}{%
+ \clearfield{pages}%
+ \clearfield{pagetotal}}%
+ \renewbibmacro*{cite:postnote}{%
+ \usebibmacro{cite:postnote:ibidpage}}}
+
+\def\cbx@opt@citepages@omit{%
+ \renewbibmacro*{cite:citepages}{}%
+ \renewbibmacro*{cite:full:citepages}{%
+ \ifboolexpr{
+ test {\ifnumequal{\value{citecount}}{\value{citetotal}}}
+ and
+ test {\iffieldpages{postnote}}
+ }
+ {\clearfield{pages}%
+ \clearfield{pagetotal}}
+ {}}%
+ \renewbibmacro*{cite:postnote}{%
+ \usebibmacro{cite:postnote:ibidpage}}}
+
+\def\cbx@opt@citepages@separate{%
+ \providetoggle{cbx:fullcite}%
+ \renewbibmacro*{cite:citepages}{%
+ \global\togglefalse{cbx:fullcite}}%
+ \renewbibmacro*{cite:full:citepages}{%
+ \global\toggletrue{cbx:fullcite}}%
+ \renewbibmacro*{cite:postnote}{%
+ \ifboolexpr{
+ togl {cbx:fullcite}
+ and
+ test {\iffieldpages{postnote}}
+ and
+ test {\ifnumequal{\value{citecount}}{\value{citetotal}}}
+ and
+ (
+ not test {\iffieldundef{pages}}
+ or
+ not test {\iffieldundef{pagetotal}}
+ )
+ }
+ {\usebibmacro{cite:postnote:pages}}
+ {\usebibmacro{cite:postnote:ibidpage}}}
+ \providebibmacro*{cite:postnote:pages}{%
+ \setunit{\printdelim{postnotedelim}}%
+ \bibstring{thiscite}%
+ \setunit{\addspace}%
+ \printfield{postnote}}}
+
+\ExecuteBibliographyOptions{citetracker=context,ibidtracker=constrict,
+ idemtracker=constrict,autocite=footnote,citepages=permit}
+
+\newbibmacro*{cite:save}{%
+ \csxdef{cbx@lastcite@\thefield{entrykey}}{\the\value{instcount}}%
+ \global\boolfalse{cbx:noidem}}
+
+\newbibmacro*{cite}{%
+ \usebibmacro{cite:citepages}%
+ \global\togglefalse{cbx:fullcite}%
+ \global\togglefalse{cbx:loccit}%
+ \bibhypertarget{cite\the\value{instcount}}{%
+ \ifciteseen
+ {\iffieldundef{shorthand}
+ {\ifciteibid
+ {\usebibmacro{cite:ibid}}
+ {\ifthenelse{\ifciteidem\AND\NOT\boolean{cbx:noidem}}
+ {\usebibmacro{cite:idem}}
+ {\usebibmacro{cite:name}}%
+ \usebibmacro{cite:title}}%
+ \usebibmacro{cite:save}}
+ {\usebibmacro{cite:shorthand}}}
+ {\usebibmacro{cite:full}%
+ \usebibmacro{cite:save}}}}
+
+\newbibmacro*{cite:full}{%
+ \usebibmacro{cite:full:citepages}%
+ \global\toggletrue{cbx:fullcite}%
+ \printtext[bibhypertarget]{%
+ \usedriver
+ {\DeclareNameAlias{sortname}{default}}
+ {\thefield{entrytype}}}%
+ \usebibmacro{shorthandintro}}
+
+\newbibmacro*{cite:name}{%
+ \printnames{labelname}%
+ \setunit*{\printdelim{nametitledelim}}}
+
+\newbibmacro*{cite:idem}{%
+ \bibstring[\mkibid]{idem\thefield{gender}}%
+ \setunit{\printdelim{nametitledelim}}}
+
+\newbibmacro*{cite:title}{%
+ \printtext[bibhyperlink]{%
+ \printfield[citetitle]{labeltitle}%
+ \setunit{\printdelim{nametitledelim}}%
+ \bibstring[\mkibid]{opcit}}}
+
+\newbibmacro*{cite:ibid}{%
+ \printtext{%
+ \bibhyperlink{cite\csuse{cbx@lastcite@\thefield{entrykey}}}{%
+ \bibstring[\mkibid]{ibidem}}}%
+ \ifloccit
+ {\global\toggletrue{cbx:loccit}}
+ {}}
+
+\newbibmacro*{cite:shorthand}{%
+ \printtext[bibhyperlink]{\printfield{shorthand}}%
+ \global\booltrue{cbx:noidem}}
+
+\newbibmacro*{cite:postnote:ibidpage}{%
+ \iftoggle{cbx:loccit}
+ {}
+ {\usebibmacro{postnote}}}
+
+\DeclareCiteCommand{\cite}
+ {\usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite}}
+ {\multicitedelim}
+ {\usebibmacro{cite:postnote}}
+
+\DeclareCiteCommand{\parencite}[\mkbibparens]
+ {\usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite}}
+ {\multicitedelim}
+ {\usebibmacro{cite:postnote}}
+
+\DeclareCiteCommand{\footcite}[\mkbibfootnote]
+ {\usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite}}
+ {\multicitedelim}
+ {\usebibmacro{cite:postnote}}
+
+\DeclareCiteCommand{\footcitetext}[\mkbibfootnotetext]
+ {\usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite}}
+ {\multicitedelim}
+ {\usebibmacro{cite:postnote}}
+
+\DeclareCiteCommand{\smartcite}[\iffootnote\mkbibparens\mkbibfootnote]
+ {\usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite}}
+ {\multicitedelim}
+ {\usebibmacro{cite:postnote}}
+
+\newbibmacro*{textcite}{%
+ \ifnameundef{labelname}
+ {\printfield[citetitle]{labeltitle}}
+ {\printnames{labelname}}}
+
+\newbibmacro*{textcite:init}{%
+ \citetrackerfalse%
+ \pagetrackerfalse%
+ \iffirstcitekey
+ {\global\undef\cbx@lasthash}
+ {}}
+
+\newbibmacro*{textcite:count}{%
+ \stepcounter{textcitetotal}%
+ \ifnumgreater{\value{uniquelist}}{\value{maxnames}}
+ {\ifnumgreater{\value{uniquelist}}{\value{textcitemaxnames}}
+ {\setcounter{textcitemaxnames}{\value{uniquelist}}}
+ {}}
+ {\ifnumless{\value{labelname}}{\value{maxnames}}
+ {\ifnumgreater{\value{labelname}}{\value{textcitemaxnames}}
+ {\setcounter{textcitemaxnames}{\value{labelname}}}
+ {}}
+ {\ifnumgreater{\value{maxnames}}{\value{textcitemaxnames}}
+ {\setcounter{textcitemaxnames}{\value{maxnames}}}
+ {}}}}
+
+\DeclareCiteCommand{\cbx@textcite}
+ {\usebibmacro{textcite:init}}
+ {\iffieldequals{namehash}{\cbx@lasthash}
+ {}
+ {\iffirstcitekey
+ {}
+ {\textcitedelim}%
+ \stepcounter{textcitecount}%
+ \usebibmacro{textcite}%
+ \savefield{namehash}{\cbx@lasthash}}}
+ {}
+ {}
+
+\DeclareCiteCommand{\textcite}[\cbx@textcite@init\cbx@textcite\footcite]
+ {\usebibmacro{textcite:init}%
+ \gdef\cbx@savedkeys{}%
+ \DeferNextCitekeyHook}
+ {\ifthenelse{\iffirstcitekey\AND\value{multicitetotal}>0}
+ {\protected@xappto\cbx@footcite@args{%
+ (\thefield{multiprenote})(\thefield{multipostnote})}}
+ {}%
+ \xappto\cbx@savedkeys{\thefield{entrykey},}%
+ \iffieldequals{namehash}{\cbx@lasthash}
+ {}
+ {\usebibmacro{textcite:count}%
+ \savefield{namehash}{\cbx@lasthash}}%
+ \ifnumequal{\value{citecount}}{\value{citetotal}}
+ {\protected@xappto\cbx@textcite@args{{\cbx@savedkeys}}%
+ \protected@xappto\cbx@footcite@args{%
+ [\thefield{prenote}][\thefield{postnote}]{\cbx@savedkeys}}%
+ \iflastcitekey
+ {\protected@xappto\cbx@textcite@args{\thefield{postpunct}}%
+ \protected@xappto\cbx@footcite@args{\nopunct}}
+ {}}
+ {}}
+ {}
+ {}
+
+% textcite has nested \DeclareCiteCommand definitions for textcite and we want to use
+% the normal textcite context
+\DeclareDelimcontextAlias{cbx@textcite}{textcite}
+
+\newrobustcmd{\cbx@textcite@init}[3]{%
+ \setcounter{textcitetotal}{0}%
+ \setcounter{textcitecount}{0}%
+ \setcounter{textcitemaxnames}{0}%
+ \def\cbx@textcite@args{#1}\def\cbx@footcite@args{#2}#3%
+ \cbx@textcite@args\empty\cbx@footcite@args\empty}
+
+\DeclareMultiCiteCommand{\cbx@textcites}{\cbx@textcite}{}
+\DeclareMultiCiteCommand{\textcites}
+ [\cbx@textcites@init\cbx@textcites\footcites]{\textcite}{}
+
+\let\cbx@textcites@init\cbx@textcite@init
+\pretocmd{\cbx@textcites@init}{%
+ \UseNextMultiCiteHook%
+ \AtNextMultiCite{%
+ \renewbibmacro{multiprenote}{}%
+ \renewbibmacro{multipostnote}{}}}{}{}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/cbx/verbose-trad3-ms.cbx b/macros/latex/contrib/biblatex-ms/latex/cbx/verbose-trad3-ms.cbx
new file mode 100644
index 0000000000..b81cf54f94
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/cbx/verbose-trad3-ms.cbx
@@ -0,0 +1,261 @@
+\ProvidesFile{verbose-trad3-ms.cbx}
+[\abx@cbxid]
+
+\InitializeCitationStyle{\numgdef{\cbx@resetcount}{\cbx@resetcount+1}}
+
+\DeclareFieldFormat{bibhyperlink}{%
+ \bibhyperlink{\iffootnote{f}{t}:\cbx@resetcount:\thefield{entrykey}}{#1}}
+\DeclareFieldFormat{bibhypertarget}{%
+ \bibhypertarget{\iffootnote{f}{t}:\cbx@resetcount:\thefield{entrykey}}{#1}}
+
+\newcommand*{\cbx@resetcount}{0}
+\providecommand*{\mkibid}[1]{#1}
+\renewcommand*{\iffinalcitedelim}{%
+ \ifnumequal{\value{textcitecount}}{\value{textcitetotal}-1}}
+
+\newtoggle{cbx:loccit}
+
+\DeclareBibliographyOption[boolean]{strict}[true]{%
+ \ifstrequal{#1}{true}
+ {\ExecuteBibliographyOptions{ibidtracker=constrict,loccittracker=constrict}}
+ {\ExecuteBibliographyOptions{ibidtracker=context,loccittracker=context}}}
+
+\DeclareBibliographyOption[string]{citepages}[permit]{%
+ \ifcsdef{cbx@opt@citepages@#1}
+ {\csuse{cbx@opt@citepages@#1}}
+ {\PackageError{biblatex}
+ {Invalid option 'citepages=#1'}
+ {Valid values are 'permit', 'suppress', 'omit', 'separate'.}}}
+
+\providebibmacro*{cite:citepages}{}
+\providebibmacro*{cite:full:citepages}{}
+\providebibmacro*{cite:postnote}{}
+
+\def\cbx@opt@citepages@permit{%
+ \renewbibmacro*{cite:citepages}{}%
+ \renewbibmacro*{cite:full:citepages}{}%
+ \renewbibmacro*{cite:postnote}{%
+ \usebibmacro{cite:postnote:ibidpage}}}
+
+\def\cbx@opt@citepages@suppress{%
+ \renewbibmacro*{cite:citepages}{}%
+ \renewbibmacro*{cite:full:citepages}{%
+ \clearfield{pages}%
+ \clearfield{pagetotal}}%
+ \renewbibmacro*{cite:postnote}{%
+ \usebibmacro{cite:postnote:ibidpage}}}
+
+\def\cbx@opt@citepages@omit{%
+ \renewbibmacro*{cite:citepages}{}%
+ \renewbibmacro*{cite:full:citepages}{%
+ \ifboolexpr{
+ test {\ifnumequal{\value{citecount}}{\value{citetotal}}}
+ and
+ test {\iffieldpages{postnote}}
+ }
+ {\clearfield{pages}%
+ \clearfield{pagetotal}}
+ {}}%
+ \renewbibmacro*{cite:postnote}{%
+ \usebibmacro{cite:postnote:ibidpage}}}
+
+\def\cbx@opt@citepages@separate{%
+ \providetoggle{cbx:fullcite}%
+ \renewbibmacro*{cite:citepages}{%
+ \global\togglefalse{cbx:fullcite}}%
+ \renewbibmacro*{cite:full:citepages}{%
+ \global\toggletrue{cbx:fullcite}}%
+ \renewbibmacro*{cite:postnote}{%
+ \ifboolexpr{
+ togl {cbx:fullcite}
+ and
+ test {\iffieldpages{postnote}}
+ and
+ test {\ifnumequal{\value{citecount}}{\value{citetotal}}}
+ and
+ (
+ not test {\iffieldundef{pages}}
+ or
+ not test {\iffieldundef{pagetotal}}
+ )
+ }
+ {\usebibmacro{cite:postnote:pages}}
+ {\usebibmacro{cite:postnote:ibidpage}}}
+ \providebibmacro*{cite:postnote:pages}{%
+ \setunit{\printdelim{postnotedelim}}%
+ \bibstring{thiscite}%
+ \setunit{\addspace}%
+ \printfield{postnote}}}
+
+\ExecuteBibliographyOptions{citetracker=context,ibidtracker=constrict,
+ loccittracker=constrict,autocite=footnote,citepages=permit}
+
+\newbibmacro*{cite}{%
+ \usebibmacro{cite:citepages}%
+ \global\togglefalse{cbx:loccit}%
+ \ifciteseen
+ {\ifciteibid
+ {\ifloccit
+ {\usebibmacro{cite:ibid}}
+ {\iffieldundef{shorthand}
+ {\usebibmacro{cite:opcit}}
+ {\usebibmacro{cite:shorthand}}}}
+ {\iffieldundef{shorthand}
+ {\usebibmacro{cite:short}}
+ {\usebibmacro{cite:shorthand}}}}
+ {\usebibmacro{cite:full}}}
+
+\newbibmacro*{cite:full}{%
+ \usebibmacro{cite:full:citepages}%
+ \printtext[bibhypertarget]{%
+ \usedriver
+ {\DeclareNameAlias{sortname}{default}}
+ {\thefield{entrytype}}}%
+ \usebibmacro{shorthandintro}}
+
+\newbibmacro*{cite:short}{%
+ \printnames{labelname}%
+ \setunit*{\printdelim{nametitledelim}}%
+ \printtext[bibhyperlink]{%
+ \printfield[citetitle]{labeltitle}}}
+
+\newbibmacro*{cite:opcit}{%
+ \printnames{labelname}%
+ \setunit*{\printdelim{nametitledelim}}%
+ \printtext[bibhyperlink]{%
+ \bibstring[\mkibid]{opcit}}}
+
+\newbibmacro*{cite:ibid}{%
+ \printtext[bibhyperlink]{\bibstring[\mkibid]{ibidem}}%
+ \global\toggletrue{cbx:loccit}}
+
+\newbibmacro*{cite:shorthand}{%
+ \printtext[bibhyperlink]{\printfield{shorthand}}}
+
+\newbibmacro*{cite:postnote:ibidpage}{%
+ \iftoggle{cbx:loccit}
+ {}
+ {\usebibmacro{postnote}}}
+
+\DeclareCiteCommand{\cite}
+ {\usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite}}
+ {\multicitedelim}
+ {\usebibmacro{cite:postnote}}
+
+\DeclareCiteCommand{\parencite}[\mkbibparens]
+ {\usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite}}
+ {\multicitedelim}
+ {\usebibmacro{cite:postnote}}
+
+\DeclareCiteCommand{\footcite}[\mkbibfootnote]
+ {\usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite}}
+ {\multicitedelim}
+ {\usebibmacro{cite:postnote}}
+
+\DeclareCiteCommand{\footcitetext}[\mkbibfootnotetext]
+ {\usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite}}
+ {\multicitedelim}
+ {\usebibmacro{cite:postnote}}
+
+\DeclareCiteCommand{\smartcite}[\iffootnote\mkbibparens\mkbibfootnote]
+ {\usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite}}
+ {\multicitedelim}
+ {\usebibmacro{cite:postnote}}
+
+\newbibmacro*{textcite}{%
+ \ifnameundef{labelname}
+ {\printfield[citetitle]{labeltitle}}
+ {\printnames{labelname}}}
+
+\newbibmacro*{textcite:init}{%
+ \citetrackerfalse%
+ \pagetrackerfalse%
+ \iffirstcitekey
+ {\global\undef\cbx@lasthash}
+ {}}
+
+\newbibmacro*{textcite:count}{%
+ \stepcounter{textcitetotal}%
+ \ifnumgreater{\value{uniquelist}}{\value{maxnames}}
+ {\ifnumgreater{\value{uniquelist}}{\value{textcitemaxnames}}
+ {\setcounter{textcitemaxnames}{\value{uniquelist}}}
+ {}}
+ {\ifnumless{\value{labelname}}{\value{maxnames}}
+ {\ifnumgreater{\value{labelname}}{\value{textcitemaxnames}}
+ {\setcounter{textcitemaxnames}{\value{labelname}}}
+ {}}
+ {\ifnumgreater{\value{maxnames}}{\value{textcitemaxnames}}
+ {\setcounter{textcitemaxnames}{\value{maxnames}}}
+ {}}}}
+
+\DeclareCiteCommand{\cbx@textcite}
+ {\usebibmacro{textcite:init}}
+ {\iffieldequals{namehash}{\cbx@lasthash}
+ {}
+ {\iffirstcitekey
+ {}
+ {\textcitedelim}%
+ \stepcounter{textcitecount}%
+ \usebibmacro{textcite}%
+ \savefield{namehash}{\cbx@lasthash}}}
+ {}
+ {}
+
+\DeclareCiteCommand{\textcite}[\cbx@textcite@init\cbx@textcite\footcite]
+ {\usebibmacro{textcite:init}%
+ \gdef\cbx@savedkeys{}%
+ \DeferNextCitekeyHook}
+ {\ifthenelse{\iffirstcitekey\AND\value{multicitetotal}>0}
+ {\protected@xappto\cbx@footcite@args{%
+ (\thefield{multiprenote})(\thefield{multipostnote})}}
+ {}%
+ \xappto\cbx@savedkeys{\thefield{entrykey},}%
+ \iffieldequals{namehash}{\cbx@lasthash}
+ {}
+ {\usebibmacro{textcite:count}%
+ \savefield{namehash}{\cbx@lasthash}}%
+ \ifnumequal{\value{citecount}}{\value{citetotal}}
+ {\protected@xappto\cbx@textcite@args{{\cbx@savedkeys}}%
+ \protected@xappto\cbx@footcite@args{%
+ [\thefield{prenote}][\thefield{postnote}]{\cbx@savedkeys}}%
+ \iflastcitekey
+ {\protected@xappto\cbx@textcite@args{\thefield{postpunct}}%
+ \protected@xappto\cbx@footcite@args{\nopunct}}
+ {}}
+ {}}
+ {}
+ {}
+
+% textcite has nested \DeclareCiteCommand definitions for textcite and we want to use
+% the normal textcite context
+\DeclareDelimcontextAlias{cbx@textcite}{textcite}
+
+\newrobustcmd{\cbx@textcite@init}[3]{%
+ \setcounter{textcitetotal}{0}%
+ \setcounter{textcitecount}{0}%
+ \setcounter{textcitemaxnames}{0}%
+ \def\cbx@textcite@args{#1}\def\cbx@footcite@args{#2}#3%
+ \cbx@textcite@args\empty\cbx@footcite@args\empty}
+
+\DeclareMultiCiteCommand{\cbx@textcites}{\cbx@textcite}{}
+\DeclareMultiCiteCommand{\textcites}
+ [\cbx@textcites@init\cbx@textcites\footcites]{\textcite}{}
+
+\let\cbx@textcites@init\cbx@textcite@init
+\pretocmd{\cbx@textcites@init}{%
+ \UseNextMultiCiteHook%
+ \AtNextMultiCite{%
+ \renewbibmacro{multiprenote}{}%
+ \renewbibmacro{multipostnote}{}}}{}{}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/lbx/UKenglish-ms.lbx b/macros/latex/contrib/biblatex-ms/latex/lbx/UKenglish-ms.lbx
new file mode 100644
index 0000000000..020a2d8f2e
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/lbx/UKenglish-ms.lbx
@@ -0,0 +1,7 @@
+\ProvidesFile{UKenglish-ms.lbx}
+[\abx@lbxid]
+
+\InheritBibliographyExtras{british}
+\InheritBibliographyStrings{british}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/lbx/USenglish-ms.lbx b/macros/latex/contrib/biblatex-ms/latex/lbx/USenglish-ms.lbx
new file mode 100644
index 0000000000..c7d4724565
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/lbx/USenglish-ms.lbx
@@ -0,0 +1,7 @@
+\ProvidesFile{USenglish-ms.lbx}
+[\abx@lbxid]
+
+\InheritBibliographyExtras{american}
+\InheritBibliographyStrings{american}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/lbx/american-ms.lbx b/macros/latex/contrib/biblatex-ms/latex/lbx/american-ms.lbx
new file mode 100644
index 0000000000..1d5699e5c9
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/lbx/american-ms.lbx
@@ -0,0 +1,8 @@
+\ProvidesFile{american-ms.lbx}
+[\abx@lbxid]
+
+\InheritBibliographyExtras{english}
+\DeclareBibliographyExtras{\uspunctuation}
+\InheritBibliographyStrings{english}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/lbx/australian-ms.lbx b/macros/latex/contrib/biblatex-ms/latex/lbx/australian-ms.lbx
new file mode 100644
index 0000000000..a80ddd1a30
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/lbx/australian-ms.lbx
@@ -0,0 +1,28 @@
+\ProvidesFile{australian-ms.lbx}
+[\abx@lbxid]
+
+\InheritBibliographyExtras{british}
+\DeclareBibliographyExtras{%
+ \protected\def\mkbibdatelong#1#2#3{%
+ \iffieldundef{#3}
+ {}
+ {\stripzeros{\thefield{#3}}%
+ \iffieldundef{#2}{}{\nobreakspace}}%
+ \iffieldundef{#2}
+ {}
+ {\mkbibmonth{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}}%
+ \iffieldbibstring{#1}{\bibstring{\thefield{#1}}}{\stripzeros{\thefield{#1}}}}%
+ \protected\def\mkbibyeardivisiondateshort#1#2{%
+ \mkbibyeardivision{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}%
+ \mkyearzeros{\thefield{#1}}}%
+ \protected\def\mkbibyeardivisiondatelong#1#2{%
+ \mkbibyeardivision{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}%
+ \mkyearzeros{\thefield{#1}}}%
+}
+
+\InheritBibliographyStrings{english}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/lbx/austrian-ms.lbx b/macros/latex/contrib/biblatex-ms/latex/lbx/austrian-ms.lbx
new file mode 100644
index 0000000000..1d76020141
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/lbx/austrian-ms.lbx
@@ -0,0 +1,16 @@
+\ProvidesFile{austrian-ms.lbx}
+[\abx@lbxid]
+
+\InheritBibliographyExtras{german}
+
+\DeclareBibliographyStrings{%
+ inherit = {german},
+ january = {{J\"anner}{J\"an\adddot}},
+}
+
+\DeclareHyphenationExceptions{%
+ Pa-tent-an-mel-dung
+ Pa-tent-an-meld
+}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/lbx/basque-ms.lbx b/macros/latex/contrib/biblatex-ms/latex/lbx/basque-ms.lbx
new file mode 100644
index 0000000000..99af521eae
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/lbx/basque-ms.lbx
@@ -0,0 +1,497 @@
+\ProvidesFile{basque-ms.lbx}
+[\abx@lbxid]
+
+\DeclareRedundantLanguages{basque}{basque}
+
+\DeclareBibliographyExtras{%
+ \protected\def\bibrangedash{\mbox{-}}% non-breaking hyphen
+ \let\finalandcomma=\empty
+ \let\finalandsemicolon=\empty
+ \def\mkbibordinal{\mkbibmascord}%
+ \providecommand*{\sptext}{\textsuperscript}% \sptext -> spanish.ldf (babel)
+ %\protected\def\mkbibmascord#1{\stripzeros{#1}\sptext{o}}%
+ \protected\def\mkbibmascord#1{\stripzeros{#1}\adddot}%
+ %\protected\def\mkbibfemord#1{\stripzeros{#1}\sptext{a}}%
+ \protected\def\mkbibfemord#1{\stripzeros{#1}\adddot}%
+ \protected\def\mkbibneutord{\mkbibmascord}%
+ \protected\def\mkbibdatelong#1#2#3{%
+ \iffieldundef{#3}
+ {}
+ {\stripzeros{\thefield{#3}}%
+ \iffieldundef{#2}{}{\nobreakspace de\space}}%
+ \iffieldundef{#2}
+ {}
+ {\mkbibmonth{\thefield{#2}}%
+ \iffieldundef{#1}{}{\nobreakspace de\space}}%
+ \iffieldbibstring{#1}
+ {\bibstring{\thefield{#1}}}
+ {\dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}}%
+ \protected\def\mkbibdateshort#1#2#3{%
+ \iffieldundef{#1}
+ {}
+ {\mkdayzeros{\thefield{#1}}%
+ \iffieldundef{#2}{}{\mbox{-}}}%
+ \iffieldundef{#2}
+ {}
+ {\mkmonthzeros{\thefield{#2}}%
+ \iffieldundef{#1}{}{\mbox{-}}}%
+ \iffieldbibstring{#3}
+ {\bibstring{\thefield{#3}}}
+ \stripzeros{\thefield{#3}}}%
+ \savecommand\mkdaterangeterse
+ \protected\def\mkdaterangeterse{%
+ \BibliographyWarning{%
+ Date format 'terse' not applicable to\MessageBreak
+ Spanish dates. Using format 'short' instead}%
+ \mkdaterangefull{short}}%
+ \savecommand\mkbibordedition
+ \savecommand\mkbibordseries
+ \def\mkbibordedition{\mkbibfemord}%
+ \def\mkbibordseries{\mkbibfemord}%
+ \expandafter\protected\expandafter\def\csname mkbibtime24h\endcsname#1#2#3#4{%
+ \iffieldundef{#1}{}
+ {\printtext{\mktimezeros{\thefield{#1}}}\setunit{\bibtimesep}}%
+ \iffieldundef{#2}{}
+ {\printtext{\mktimezeros{\thefield{#2}}}\setunit{\bibtimesep}}%
+ \iffieldundef{#3}{}
+ {\printtext{\mktimezeros{\thefield{#3}}}}%
+ \setunit{}%
+ \iffieldundef{#4}{}
+ {\bibtimezonesep
+ \mkbibtimezone{\thefield{#4}}}}%
+ \expandafter\protected\expandafter\def\csname mkbibtime12h\endcsname#1#2#3#4{%
+ \stripzeros{\mktimehh{\thefield{#1}}}\bibtimesep
+ \forcezerosmdt{\thefield{#2}}%
+ \iffieldundef{#3}{}
+ {\bibtimesep
+ \forcezerosmdt{\thefield{#3}}}%
+ \space
+ \ifnumless{\thefield{#1}}{12}
+ {\bibstring{am}}
+ {\bibstring{pm}}%
+ \iffieldundef{#4}{}
+ {\space\bibtimezonesep
+ \parentext{\mkbibtimezone{\thefield{#4}}}}}%
+ \protected\def\mkbibyeardivisiondateshort#1#2{%
+ \mkbibyeardivision{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}%
+ \dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}%
+ \protected\def\mkbibyeardivisiondatelong#1#2{%
+ \mkbibyeardivision{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}%
+ \dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}%
+}
+
+\UndeclareBibliographyExtras{%
+ \restorecommand\mkdaterangeterse
+ \restorecommand\lbx@finalnamedelim
+ \restorecommand\lbx@finallistdelim
+ \restorecommand\mkbibordedition
+ \restorecommand\mkbibordseries
+}
+
+\DeclareBibliographyStrings{%
+ bibliography = {{Bibliografia}{Bibliografia}},%
+ references = {{Erreferentziak}{Erreferentziak}},%
+ shorthands = {{Laburduren zerrenda}{Laburdurak}},%
+ editor = {{editorea}{ed\adddot}},%
+ editors = {{editoreak}{edk\adddot}},%
+ compiler = {{biltzailea}{biltz\adddot}},%
+ compilers = {{biltzaileak}{biltzk\adddot}},%
+ redactor = {{erredaktorea}{err\adddot}},%
+ redactors = {{erredakotreak}{errk\adddot}},%
+ reviser = {{orraztailea}{orr\adddot}},%
+ revisers = {{orraztaileak}{orrk\adddot}},%
+ founder = {{sortzailea}{sor\adddot}},%
+ founders = {{sortzaileak}{sork\adddot}},%
+ continuator = {{jarraitzailea}{jarr\adddot}},%
+ continuators = {{jarraitzaileak}{jarrk\adddot}},%
+ collaborator = {{kolaboratzailea}{kolab\adddot}},%
+ collaborators = {{kolaboratzaileak}{kolabk\adddot}},%
+ translator = {{itzulpena}{itz\adddot}},%
+ translators = {{itzulpena}{itz\adddot}},%
+ commentator = {{iruzkingilea}{irzgl\adddot}},%
+ commentators = {{iruzkingileak}{irzglk\adddot}},%
+ annotator = {{ohargilea}{ohr\adddot}},%
+ annotators = {{ohargileak}{ohrk\adddot}},%
+ commentary = {{iruzkina}{ir\adddot}},%
+ annotations = {{oharrak}{ohk\adddot}},%
+ introduction = {{sarrera}{sar\adddot}},%
+ foreword = {{hitzaurrea}{hitzaur\adddot}},%
+ afterword = {{hitzatzea}{hitzatz\adddot}},%
+ editortr = {{edizioa eta \lbx@sfromlang\ itzulpena}{ed\adddotspace eta \lbx@sfromlang\ itz\adddot}},%
+ editorstr = {{edizioa eta \lbx@sfromlang\ itzulpena}{ed\adddotspace eta \lbx@sfromlang\ itz\adddot}},%
+ editorco = {{edizioa eta iruzkinak}{ed\adddotspace eta irk\adddot}},%
+ editorsco = {{edizioa eta iruzkinak}{ed\adddotspace eta irk\adddot}},%
+ editoran = {{edizioa eta oharrak}{ed\adddotspace eta ohk\adddot}},%
+ editorsan = {{edizioa eta oharrak}{ed\adddotspace eta ohk\adddot}},%
+ editorin = {{edizioa eta sarrera}{ed\adddotspace eta sar\adddot}},%
+ editorsin = {{edizioa eta sarrera}{ed\adddotspace eta sar\adddot}},%
+ editorfo = {{edizioa eta hitzaurrea}{ed\adddotspace eta hitzaur\adddot}},%
+ editorsfo = {{edizioa eta hitzaurrea}{ed\adddotspace eta hitzaur\adddot}},%
+ editoraf = {{edizioa eta hitzatzea}{ed\adddotspace eta hitzatz\adddot}},%
+ editorsaf = {{edizioa eta hitzatzea}{ed\adddotspace eta hitzatz\adddot}},%
+ editortrco = {{edizioa, \lbx@sfromlang\ itzulpena eta iruzkinak}{ed.,\addabbrvspace \lbx@sfromlang\ itz\adddotspace eta irzk\adddot}},%
+ editorstrco = {{edizioa, \lbx@sfromlang\ itzulpena eta iruzkinak}{ed.,\addabbrvspace \lbx@sfromlang\ itz\adddotspace eta irzk\adddot}},%
+ editortran = {{edizioa, \lbx@sfromlang\ itzulpena eta oharrak}{ed.,\addabbrvspace \lbx@sfromlang\ itz\adddotspace eta ohk\adddot}},%
+ editorstran = {{edizioa, \lbx@sfromlang\ itzulpena eta oharrak}{ed.,\addabbrvspace \lbx@sfromlang\ itz\adddotspace eta ohk\adddot}},%
+ editortrin = {{edizioa, \lbx@sfromlang\ itzulpena eta sarrera}{ed.,\addabbrvspace \lbx@sfromlang\ itz\adddotspace eta sar\adddot}},%
+ editorstrin = {{edizioa, \lbx@sfromlang\ itzulpena eta sarrera}{ed.,\addabbrvspace \lbx@sfromlang\ itz\adddotspace eta sar\adddot}},%
+ editortrfo = {{edizioa, \lbx@sfromlang\ itzulpena eta hitzaurrea}{ed.,\addabbrvspace \lbx@sfromlang\ itz\adddotspace eta hitzaur\adddot}},%
+ editorstrfo = {{edizioak, \lbx@sfromlang\ itzulpenak eta hitzaurrea}{edk.,\addabbrvspace \lbx@sfromlang\ itzk\adddotspace eta hitzaur\adddot}},%
+ editortraf = {{edizioa, \lbx@sfromlang\ itzulpena eta hitzatzea}{ed.,\addabbrvspace \lbx@sfromlang\ itz\adddotspace eta hitzatz\adddot}},%
+ editorstraf = {{edizioak, \lbx@sfromlang\ itzulpenak eta hitzatzea}{edk.,\addabbrvspace \lbx@sfromlang\ itzk\adddotspace eta hitzatz\adddot}},%
+ editorcoin = {{edizioa, iruzkinak eta sarrera}{ed.,\addabbrvspace irzk\adddotspace eta sar\adddot}},%
+ editorscoin = {{edizioak, iruzkinak eta sarrera}{edk.,\addabbrvspace irzk\adddotspace eta sar\adddot}},%
+ editorcofo = {{edizioa, iruzkinak eta hitzaurrea}{ed.,\addabbrvspace irzk\adddotspace eta hitzaur\adddot}},%
+ editorscofo = {{edizioak, iruzkinak eta hitzaurrea}{edk.,\addabbrvspace irzk\adddotspace eta hitzaur\adddot}},%
+ editorcoaf = {{edizioa, iruzkinak eta hitzatzea}{ed.,\addabbrvspace irzk\adddotspace eta hitzatz\adddot}},%
+ editorscoaf = {{edizioak, iruzkinak eta hitzatzea}{edk.,\addabbrvspace irzk\adddotspace eta hitzatz\adddot}},%
+ editoranin = {{edizioa, oharrak eta sarrera}{ed.,\addabbrvspace ohk\adddotspace eta sar\adddot}},%
+ editorsanin = {{edizioak, oharrak eta sarrera}{edk.,\addabbrvspace ohk\adddotspace eta sar\adddot}},%
+ editoranfo = {{edizioa, oharrak eta hitzaurrea}{ed.,\addabbrvspace ohk\adddotspace eta hitzatz\adddot}},%
+ editorsanfo = {{edizioak, oharrak eta hitzaurrea}{edk.,\addabbrvspace ohk\adddotspace eta hitzatz\adddot}},%
+ editoranaf = {{edizioa, oharrak eta hitzatzea}{ed.,\addabbrvspace ohk\adddotspace eta hitzatz\adddot}},%
+ editorsanaf = {{edizioak, oharrak eta hitzatzea}{edk.,\addabbrvspace ohk\adddotspace eta hitzatz\adddot}},%
+ editortrcoin = {{edizioa, \lbx@sfromlang\ itzulpena, iruzkinak eta sarrera}{ed.,\addabbrvspace \lbx@sfromlang\ itz\adddot,\addabbrvspace irzk\adddotspace eta sar\adddot}},%
+ editorstrcoin = {{edizioak, \lbx@sfromlang\ itzulpenak, iruzkinak eta sarrera}{edk.,\addabbrvspace \lbx@sfromlang\ itzk\adddot,\addabbrvspace irzk\adddotspace eta sar\adddot}},%
+ editortrcofo = {{edizioa, \lbx@sfromlang\ itzulpena, iruzkinak eta hitzaurrea}{ed.,\addabbrvspace \lbx@sfromlang\ itz\adddot,\addabbrvspace irzk\adddotspace eta hitzaur\adddot}},%
+ editorstrcofo = {{edizioak, \lbx@sfromlang\ itzulpenak, iruzkinak eta hitzaurrea}{edk.,\addabbrvspace \lbx@sfromlang\ itzk\adddot,\addabbrvspace irzk\adddotspace eta hitzaur\adddot}},%
+ editortrcoaf = {{edizioa, \lbx@sfromlang\ itzulpena, iruzkinak eta hitzatzea}{ed.,\addabbrvspace \lbx@sfromlang\ itz\adddot,\addabbrvspace irzk\adddotspace eta hitzatz\adddot}},%
+ editorstrcoaf = {{edizioak, \lbx@sfromlang\ itzulpenak, iruzkinak eta hitzatzea}{edk.,\addabbrvspace \lbx@sfromlang\ itzk\adddot,\addabbrvspace irzk\adddotspace eta hitzatz\adddot}},%
+ editortranin = {{edizioa, \lbx@sfromlang\ itzulpena, sarrera eta oharrak}{ed.,\addabbrvspace \lbx@sfromlang\ itz\adddot,\addabbrvspace sar\adddotspace eta ohk\adddot}},%
+ editorstranin = {{edizioak, \lbx@sfromlang\ itzulpenak, sarrera eta oharrak}{edk.,\addabbrvspace \lbx@sfromlang\ itzk\adddot,\addabbrvspace sar\adddotspace eta ohk\adddot}},%
+ editortranfo = {{edizioa, \lbx@sfromlang\ itzulpena, hitzaurrea eta oharrak}{ed.,\addabbrvspace \lbx@sfromlang\ itz\adddot,\addabbrvspace hitzaur\adddotspace eta ohk\adddot}},%
+ editorstranfo = {{edizioak, \lbx@sfromlang\ itzulpenak, hitzaurrea eta oharrak}{edk.,\addabbrvspace \lbx@sfromlang\ itzk\adddot,\addabbrvspace hitzaur\adddotspace eta ohk\adddot}},%
+ editortranaf = {{edizioa, \lbx@sfromlang\ itzulpena, hitzatzea eta oharrak}{ed.,\addabbrvspace \lbx@sfromlang\ itz\adddot,\addabbrvspace hitzatz\adddotspace eta ohk\adddot}},%
+ editorstranaf = {{edizioak, \lbx@sfromlang\ itzulpenak, hitzatzea eta oharrak}{edk.,\addabbrvspace \lbx@sfromlang\ itzk\adddot,\addabbrvspace hitzatz\adddotspace eta ohk\adddot}},%
+ translatorco = {{\lbx@sfromlang\ itzulpena eta iruzkinak}{\lbx@sfromlang\ itz\adddot\ eta irzk\adddot}},%
+ translatorsco = {{\lbx@sfromlang\ itzulpenak eta iruzkinak}{\lbx@sfromlang\ itzk\adddot\ eta irzk\adddot}},%
+ translatoran = {{\lbx@sfromlang\ itzulpena eta oharrak}{\lbx@sfromlang\ itz\adddot\ eta ohk\adddot}},%
+ translatorsan = {{\lbx@sfromlang\ itzulpenak eta oharrak}{\lbx@sfromlang\ itzk\adddot\ eta ohks\adddot}},%
+ translatorin = {{\lbx@sfromlang\ itzulpena eta sarrera}{\lbx@sfromlang\ itz\adddot\ eta sar\adddot}},%
+ translatorsin = {{\lbx@sfromlang\ itzulpenak eta sarrera}{\lbx@sfromlang\ itzk\adddot\ eta sar\adddot}},%
+ translatorfo = {{\lbx@sfromlang\ itzulpena eta hitzaurrea}{\lbx@sfromlang\ itz\adddot\ eta hitzaur\adddot}},%
+ translatorsfo = {{\lbx@sfromlang\ itzulpenak eta hitzaurrea}{\lbx@sfromlang\ itzk\adddot\ eta hitzaur\adddot}},%
+ translatoraf = {{\lbx@sfromlang\ itzulpena eta hitzatzea}{\lbx@sfromlang\ itz\adddot\ eta hitzatz\adddot}},%
+ translatorsaf = {{\lbx@sfromlang\ itzulpenak eta hitzatzea}{\lbx@sfromlang\ itzk\adddot\ eta hitzatz\adddot}},%
+ translatorcoin = {{\lbx@sfromlang\ itzulpena, sarrera eta iruzkinak}{\lbx@sfromlang\ itz\adddot, sar\adddotspace eta irzk\adddot}},%
+ translatorscoin = {{\lbx@sfromlang\ itzulpenak, sarrera eta iruzkinak}{\lbx@sfromlang\ itzk\adddot, sar\adddotspace eta irzk\adddot}},%
+ translatorcofo = {{\lbx@sfromlang\ itzulpena, hitzaurrea eta iruzkinak}{\lbx@sfromlang\ itz\adddot, hitzaur\adddotspace eta irzk\adddot}},%
+ translatorscofo = {{\lbx@sfromlang\ itzulpenak, hitzaurrea eta iruzkinak}{\lbx@sfromlang\ itzk\adddot, hitzaur\adddotspace eta irzk\adddot}},%
+ translatorcoaf = {{\lbx@sfromlang\ itzulpena, hitzatzea eta iruzkinak}{\lbx@sfromlang\ itz\adddot, hitzatz\adddotspace eta irzk\adddot}},%
+ translatorscoaf = {{\lbx@sfromlang\ itzulpenak, hitzatzea eta iruzkinak}{\lbx@sfromlang\ itzk\adddot, hitzatz\adddotspace eta irzk\adddot}},%
+ translatoranin = {{\lbx@sfromlang\ itzulpena, sarrera eta oharrak}{\lbx@sfromlang\ itz\adddot, sar\adddotspace eta ohk\adddot}},%
+ translatorsanin = {{\lbx@sfromlang\ itzulpenak, sarrera eta oharrak}{\lbx@sfromlang\ itzk\adddot, sar\adddotspace eta ohk\adddot}},%
+ translatoranfo = {{\lbx@sfromlang\ itzulpena, hitzaurrea eta oharrak}{\lbx@sfromlang\ itz\adddot, hitzaur\adddotspace eta ohk\adddot}},%
+ translatorsanfo = {{\lbx@sfromlang\ itzulpenak, hitzaurrea eta oharrak}{\lbx@sfromlang\ itzk\adddot, hitzaur\adddotspace eta ohk\adddot}},%
+ translatoranaf = {{\lbx@sfromlang\ itzulpena, hitzatzea eta oharrak}{\lbx@sfromlang\ itz\adddot, hitzatz\adddotspace eta ohk\adddot}},%
+ translatorsanaf = {{\lbx@sfromlang\ itzulpenak, hitzatzea eta oharrak}{\lbx@sfromlang\ itzk\adddot, hitzatz\adddotspace eta ohk\adddot}},%
+ organizer = {{antolatzailea(k)}{antltz(k)\adddot}},%
+ organizers = {{antolatzailea(k)}{antltz(k)\adddot}},%
+ byorganizer = {{antolatzailea(k)}{antltz(k)\adddot}},%
+ byauthor = {{egilea(k)}{eg(k)}},%
+ byeditor = {{editorea(k)}{ed(k)}},%
+ bycompiler = {{biltzailea(k)}{biltz(k)}},%
+ byredactor = {{erredaktorea(k)}{err(k)}},%
+ byreviser = {{orraztailea(k)}{orrz(k)}},%
+ byreviewer = {{berrikustzailea(k)}{berr(k)}},%
+ byfounder = {{sortzailea(k)}{sortz(k)}},%
+ bycontinuator = {{jarraitzailea(k)}{jarr(k)}},%
+ bycollaborator = {{kolaboratzailea(k)}{kolab(k)}},%
+ bytranslator = {{\lbx@lfromlang\ itzulpena}{\lbx@sfromlang\ itz\adddot}},%
+ bycommentator = {{iruzkinak}{irzk\adddotspace}},%
+ byannotator = {{oharrak}{ohk\adddot}},%
+ withcommentator = {{iruzkinak}{irzk\adddot}},%
+ withannotator = {{oharrak}{ohk\adddot}},%
+ withintroduction = {{sarrera}{sar\adddot}},%
+ withforeword = {{hitzaurrea}{hitzaur\adddot}},%
+ withafterword = {{hitzatzea}{hitzatz\adddot}},%
+ byeditortr = {{edizioa eta \lbx@lfromlang\ itzulpena}%
+ {ed\adddotspace eta \lbx@sfromlang\ itz\adddot}},%
+ byeditorco = {{edizioa eta iruzkinak}%
+ {ed\adddotspace eta irzk\adddot}},%
+ byeditoran = {{edizioa eta oharrak}%
+ {ed\adddotspace eta ohk\adddot}},%
+ byeditorin = {{edizioa eta sarrera}%
+ {ed\adddotspace eta sar\adddot}},%
+ byeditorfo = {{edizioa eta hitzaurrea}%
+ {ed\adddotspace eta hitzaur\adddot}},%
+ byeditoraf = {{edizioa eta hitzatzea}%
+ {ed\adddotspace eta hitzatz\adddot}},%
+ byeditortrco = {{edizioa, \lbx@lfromlang\ itzulpena eta iruzkinak}%
+ {ed.,\addabbrvspace \lbx@sfromlang\ itz\adddot\ eta irzk\adddot}},%
+ byeditortran = {{edizioa, \lbx@lfromlang\ itzulpena eta oharrak}%
+ {ed.,\addabbrvspace \lbx@sfromlang\ itz\adddot\ eta ohk\adddot}},%
+ byeditortrin = {{edizioa, \lbx@lfromlang\ itzulpena eta sarrera}%
+ {ed.,\addabbrvspace \lbx@sfromlang\ itz\adddot\ eta sar\adddot}},%
+ byeditortrfo = {{edizioa, \lbx@lfromlang\ itzulpena eta hitzaurrea}%
+ {ed.,\addabbrvspace \lbx@sfromlang\ itz\adddot\ eta hitzaur\adddot}},%
+ byeditortraf = {{edizioa, \lbx@lfromlang\ itzulpena eta hitzatzea}%
+ {ed.,\addabbrvspace \lbx@sfromlang\ itz\adddot\ eta hitzatz\adddot}},%
+ byeditorcoin = {{edizioa, iruzkinak eta sarrera}%
+ {ed.,\addabbrvspace irzk\adddotspace eta sar\adddot}},%
+ byeditorcofo = {{edizioa, iruzkinak eta hitzaurrea}%
+ {ed.,\addabbrvspace irzk\adddotspace eta hitzaur\adddot}},%
+ byeditorcoaf = {{edizioa, iruzkinak eta hitzatzea}%
+ {ed.,\addabbrvspace irzk\adddotspace eta hitzatz\adddot}},%
+ byeditoranin = {{edizioa, oharrak eta sarrera}%
+ {ed.,\addabbrvspace ohk\adddotspace eta sar\adddot}},%
+ byeditoranfo = {{edizioa, oharrak eta hitzaurrea}%
+ {ed.,\addabbrvspace ohk\adddotspace eta hitzaur\adddot}},%
+ byeditoranaf = {{edizioa, oharrak eta hitzatzea}%
+ {ed.,\addabbrvspace ohk\adddotspace eta hitzatz\adddot}},%
+ byeditortrcoin = {{edizioa, \lbx@lfromlang\ itzulpena, iruzkinak eta sarrera}%
+ {ed.,\addabbrvspace \lbx@sfromlang\ itz\adddot, irzk\adddotspace eta sar\adddot}},%
+ byeditortrcofo = {{edizioa, \lbx@lfromlang\ itzulpena, iruzkinak eta hitzaurrea}%
+ {ed.,\addabbrvspace \lbx@sfromlang\ itz\adddot, irzk\adddotspace eta hitzaur\adddot}},%
+ byeditortrcoaf = {{edizioa, \lbx@lfromlang\ itzulpena, iruzkinak eta hitzatzea}%
+ {ed.,\addabbrvspace \lbx@sfromlang\ itz\adddot, irzk\adddotspace eta hitzatz\adddot}},%
+ byeditortranin = {{edizioa, \lbx@lfromlang\ itzulpena, oharrak eta sarrera}%
+ {ed.,\addabbrvspace \lbx@sfromlang\ itz\adddot, ohk\adddotspace eta sar\adddot}},%
+ byeditortranfo = {{edizioa, \lbx@lfromlang\ itzulpena, oharrak eta hitzaurrea}%
+ {ed.,\addabbrvspace \lbx@sfromlang\ itz\adddot, ohk\adddotspace eta hitzaur\adddot}},%
+ byeditortranaf = {{edizioa, \lbx@lfromlang\ itzulpena, oharrak eta hitzatzea}%
+ {ed.,\addabbrvspace \lbx@sfromlang\ itz\adddot, ohk\adddotspace eta hitzatz\adddot}},%
+ bytranslatorco = {{\lbx@lfromlang\ itzulpena eta iruzkinak}%
+ {\lbx@sfromlang\ itz\adddot\ eta irzk\adddot}},%
+ bytranslatoran = {{\lbx@lfromlang\ itzulpena eta oharrak}%
+ {\lbx@sfromlang\ itz\adddot\ eta ohk\adddot}},%
+ bytranslatorin = {{\lbx@lfromlang\ itzulpena eta sarrera}%
+ {\lbx@sfromlang\ itz\adddot\ eta sarod\adddot}},%
+ bytranslatorfo = {{\lbx@lfromlang\ itzulpena eta hitzaurrea}%
+ {\lbx@sfromlang\ itz\adddot\ eta hitzaur\adddot}},%
+ bytranslatoraf = {{\lbx@lfromlang\ itzulpena eta hitzatzea}%
+ {\lbx@sfromlang\ itz\adddot\ eta hitzatz\adddot}},%
+ bytranslatorcoin = {{\lbx@lfromlang\ itzulpena, iruzkinak eta sarrera}%
+ {\lbx@sfromlang\ itz\adddot, irzk\adddotspace eta sar\adddot}},%
+ bytranslatorcofo = {{\lbx@lfromlang\ itzulpena, iruzkinak eta hitzaurrea}%
+ {\lbx@sfromlang\ itz\adddot, irzk\adddotspace eta pr\'ol\adddot}},%
+ bytranslatorcoaf = {{\lbx@lfromlang\ itzulpena, iruzkinak eta hitzatzea}%
+ {\lbx@sfromlang\ itz\adddot, irzk\adddotspace eta hitzatz\adddot}},%
+ bytranslatoranin = {{\lbx@lfromlang\ itzulpena, oharrak eta sarrera}%
+ {\lbx@sfromlang\ itz\adddot, ohk\adddotspace eta sar\adddot}},%
+ bytranslatoranfo = {{\lbx@lfromlang\ itzulpena, oharrak eta hitzaurrea}%
+ {\lbx@sfromlang\ itz\adddot, ohk\adddotspace eta pr\'ol\adddot}},%
+ bytranslatoranaf = {{\lbx@lfromlang\ itzulpena, oharrak eta hitzatzea}%
+ {\lbx@sfromlang\ itz\adddot, ohk\adddotspace eta hitzatz\adddot}},%
+ and = {{eta}{eta}},%
+ andothers = {{et\adddotspace al\adddot}{et\adddotspace al\adddot}},%
+ andmore = {{et\adddotspace al\adddot}{et\adddotspace al\adddot}},%
+ volume = {{bolumena}{bol\adddot}},%
+ volumes = {{bolumeank}{bolk\adddot}},%
+ involumes = {{non}{non}},%
+ jourvol = {{bolumena}{bol\adddot}},%
+ jourser = {{serie-zenbaki}{ser-zb\adddot}},%
+ book = {{liburua}{liburua}},%
+ part = {{atala}{atala}},%
+ issue = {{zenbakia}{zk\adddot}},%
+ newseries = {{serie-zenbaki berria}{ser-zb ber\adddot}},%
+ oldseries = {{serie-zenbaki zaharra}{ser-zb zah\adddot}},%
+ edition = {{edizioa}{ed\adddot}},%
+ reprint = {{berrinprimatzea}{berrinp\adddot}},%
+ reprintof = {{berrinprimatzea}{berrinp\adddot}},%
+ reprintas = {{berrinprimitua}{berrinp\adddot}},%
+ reprintfrom = {{berrinprimitua}{berrinp\adddot}},%
+ reviewof = {{erreseina}{erres\adddot}},%
+ translationof = {{itzulpena}{itz\adddot}},%
+ translationas = {{zein hizkuntzara itzulia}{zein hizk\adddot -ra itz\adddot}},%
+ translationfrom = {{zein hizkuntzatik itzulia}{zein hizk\adddotspace itz\adddot}},%
+ origpubas = {{originalki argitaratua}{orig\adddotspace argit\adddotspace}},%
+ origpubin = {{originalki argitaratua}{orig\adddot argit\adddot}},%
+ astitle = {{izenburua}{izenb\adddot}},%
+ bypublisher = {{argitaletxea}{argit\adddot}},%
+ nodate = {{datarik gabe}{dat\adddot gabe}},%
+ page = {{orria}{orr\adddot}},%
+ pages = {{orriak}{orrk\adddot}},%
+ column = {{zutabea}{ztb\adddot}},%
+ columns = {{zutabeak}{ztbk\adddot}},%
+ line = {{lerroa}{lerr\adddot}},%
+ lines = {{lerroak}{lerrk\adddot}},%
+ verse = {{lerroa}{lerr\adddot}},%
+ verses = {{lerroak}{lerrk\adddot}},%
+ section = {{atala}{at\adddot}},%
+ sections = {{atalak}{atk\adddot}},%
+ paragraph = {{parrafoa}{parr\adddot}},%
+ paragraphs = {{parrafoak}{parrk\adddot}},%
+ pagetotal = {{orria}{orr\adddot}},%
+ pagetotals = {{orriak}{orrk\adddot}},%
+ columntotal = {{zutabea}{ztb\adddot}},%
+ columntotals = {{zutabeak}{ztbk\adddot}},%
+ linetotal = {{lerroa}{lerr\adddot}},%
+ linetotals = {{lerroak}{lerrk\adddot}},%
+ versetotal = {{verso}{v\adddot}},
+ versetotals = {{versos}{vv\adddot}},
+ sectiontotal = {{atala}{at\adddot}},%
+ sectiontotals = {{atalak}{atk\adddot}},%
+ paragraphtotal = {{parrafoa}{parr\adddot}},%
+ paragraphtotals = {{parrafoak}{parrk\adddot}},%
+ in = {{non}{non}},%
+ inseries = {{non}{non}},%
+ ofseries = {{nongo}{nongo}},%
+ number = {{zenbakia}{zb\adddot}},%
+ chapter = {{kapitulua}{kap\adddot}},%
+ bathesis = {{Lizentziatura tesia}{Liz\adddotspace tesia}},%
+ mathesis = {{Maisutza tesia}{Mais\adddotspace tesia}},%
+ phdthesis = {{Tesi doktorala}{Tesi dokt\adddot}},%
+ candthesis = {{Doktoretzarako hautagaitza tesia}{Dokt\adddotspace haut\adddotspace tesia}},%
+ resreport = {{ikerketa txostena}{ik\adddotspace txos\adddot}},%
+ techreport = {{txosten teknikoa}{txos\adddotspace tek\adddot}},%
+ software = {{programa}{prog\adddot}},%
+ datacd = {{datu CD-a}{datu CD-a}},%
+ audiocd = {{audio CD-a}{audio CD-a}},%
+ version = {{bertsioa}{ber\adddot}},%
+ url = {{esteka}{esteka}},%
+ urlfrom = {{noiztik erabilgarri}{erabilg\adddot}},%
+ urlseen = {{azkenekoz ikusia}{azkenekoz ikusia}},%
+ inpreparation = {{prestaketa prozesuan}{prest\adddot proz\adddot}},%
+ submitted = {{bidalia}{bidalia}},%
+ forthcoming = {{laster}{laster}},%
+ inpress = {{inprentan}{inprentan}},%
+ prepublished = {{aurrez argitaratua}{aur\adddot argit\adddot}},%
+ citedas = {{aurrerantzean aipatua}{aur\adddot aip\adddot}},%
+ thiscite = {{bereziki}{berez\adddot}},%
+ seenote = {{ikus oharra}{ik\adddot oh\adddot}},%
+ quotedin = {{aipatua}{aip\adddot}},%
+ idem = {{idem}{id\adddot}},%
+ idemsf = {{idem}{id\adddot}},%
+ idemsm = {{idem}{id\adddot}},%
+ idemsn = {{idem}{id\adddot}},%
+ idempf = {{idem}{id\adddot}},%
+ idempm = {{idem}{id\adddot}},%
+ idempn = {{idem}{id\adddot}},%
+ idempp = {{idem}{id\adddot}},%
+ ibidem = {{ibidem}{ibid\adddot}},%
+ opcit = {{op\adddotspace cit\adddot}{o\adddot cit\adddot}},%
+ loccit = {{loc\adddotspace cit\adddot}{loc\adddot cit\adddot}},%
+ confer = {{cf\adddot}{cf\adddot}},%
+ sequens = {{hurr\adddot}{hurr\adddot}},%
+ sequentes = {{hurrk\adddot}{hurrk\adddot}},%
+ passim = {{passim}{passim}},%
+ see = {{ikus}{ik\adddot}},%
+ seealso = {{ikus ere}{ik\adddotspace ere}},%
+ backrefpage = {{ikus orria}{ik\adddotspace orr\adddot}},%
+ backrefpages = {{ikus orriak}{ik\adddotspace orrk\adddot}},%
+ january = {{urtarrila}{urt\adddot}},%
+ february = {{otsaila}{ots\adddot}},%
+ march = {{martxoa}{mar\adddot}},%
+ april = {{apirila}{ap\adddot}},%
+ may = {{maiatza}{mai\adddot}},%
+ june = {{ekaina}{ek\adddot}},%
+ july = {{uztaila}{uz\adddot}},%
+ august = {{abuztua}{abu\adddot}},%
+ september = {{iraila}{ir\adddot}},%
+ october = {{urria}{urr\adddot}},%
+ november = {{azaroa}{az\adddot}},%
+ december = {{abendua}{abe\adddot}},%
+ langamerican = {{ingleles amerikarra}{ingeles amerikarra}},%
+ langbrazilian = {{portugesa}{portugesa}},%
+ langbulgarian = {{bulgariera}{bulgariera}},%
+ langcatalan = {{katalana}{katalana}},%
+ langcroatian = {{kroaziera}{kroaziera}},%
+ langczech = {{txekiera}{txekiera}},%
+ langdanish = {{daniera}{daniera}},%
+ langdutch = {{nederlandera}{nederlandera}},%
+ langenglish = {{ingelesa}{ingelesa}},%
+ langestonian = {{estoniera}{estoniera}},%
+ langfinnish = {{finlandiera}{finlandiera}},%
+ langfrench = {{frantsesa}{frantsesa}},%
+ langgalician = {{galiziera}{galiziera}},%
+ langgerman = {{alemana}{alemana}},%
+ langgreek = {{greziera}{greziera}},%
+ langhungarian = {{hungariera}{hungariera}},%
+ langitalian = {{italiera}{italiera}},%
+ langjapanese = {{japoniera}{japoniera}},%
+ langlatin = {{latina}{latina}},%
+ langlatvian = {{lituaniera}{lituaniera}},%
+ langnorwegian = {{norvegiera}{norvegiera}},%
+ langpolish = {{poloniera}{poloniera}},%
+ langportuguese = {{portugesa}{portugesa}},%
+ langrussian = {{errusiera}{errusiera}},%
+ langslovak = {{eslovakiera}{eslovakiera}},%
+ langslovene = {{esloveniera}{esloveniera}},%
+ langspanish = {{gaztelera}{gaztelera}},%
+ langswedish = {{suediera}{suediera}},%
+ langukrainian = {{ukrainera}{ukrainera}},%
+ fromamerican = {{ingeles amerikarretik}{ingeles amerikarretik}},%
+ frombrazilian = {{portugesetik}{portugesetik}},%
+ frombulgarian = {{bulgarieratik}{bulgarieratik}},%
+ fromcatalan = {{katalanetik}{katalanetik}},%
+ fromcroatian = {{kroazieratik}{kroazieratik}},%
+ fromczech = {{txekieratik}{txekieratik}},%
+ fromdanish = {{danieratik}{danieratik}},%
+ fromdutch = {{nederlanderatik}{nederlanderatik}},%
+ fromenglish = {{ingelesetik}{ingelesetik}},%
+ fromestonian = {{estonieratik}{estonieratik}},%
+ fromfinnish = {{finlandieratik}{finlandieratik}},%
+ fromfrench = {{frantsesetik}{frantsesetik}},%
+ fromgalician = {{galizieratik}{galizieratik}},%
+ fromgerman = {{alemanetik}{alemanetik}},%
+ fromgreek = {{grezieratik}{grezieratik}},%
+ fromhungarian = {{hungarieratik}{hungarieratik}},%
+ fromitalian = {{italieratik}{italieratik}},%
+ fromjapanese = {{japonieratik}{japonieratik}},%
+ fromlatin = {{latinetik}{latinetik}},%
+ fromlatvian = {{lituanieratik}{lituanieratik}},%
+ fromnorwegian = {{norvegieratik}{norvegieratik}},%
+ frompolish = {{polonieratik}{polonieratik}},%
+ fromportuguese = {{portugesetik}{portugesetik}},%
+ fromrussian = {{errusieratik}{errusieratik}},%
+ fromslovak = {{eslovakieratik}{eslovakieratik}},%
+ fromslovene = {{eslovenieratik}{eslovenieratik}},%
+ fromspanish = {{gazteleratik}{gazteleratik}},%
+ fromswedish = {{suedieratik}{suedieratik}},%
+ fromukrainian = {{ukraineratik}{ukraineratik}},%
+ countryde = {{Alemania}{DE}},%
+ countryeu = {{Europar Batasuna}{EU}},%
+ countryep = {{Europar Batasuna}{EP}},%
+ countryfr = {{Frantzia}{FR}},%
+ countryuk = {{Britainia Handia}{GB}},%
+ countryus = {{Ameriketako Estatu Batuak}{US}},%
+ patent = {{patentea}{pat\adddot}},%
+ patentde = {{patente alemana}{pat\adddotspace alemana}},%
+ patenteu = {{patente europarra}{pat\adddotspace europarra}},%
+ patentfr = {{patente frantsesa}{pat\adddotspace frantsesa}},%
+ patentuk = {{patente britainiarra}{pat\adddotspace britainiarra}},%
+ patentus = {{patente estatubatuarra}{pat\adddotspace estatubatuarra}},%
+ patreq = {{patente eskakizuna}{pat\adddotspace esk\adddot}},%
+ patreqde = {{patente alemanaaren eskakizuna}{pat\adddotspace alem\adddotspace esk\adddot}},%
+ patreqeu = {{patente europarraren eskakizuna}{pat\adddotspace europ\adddotspace esk\adddot}},%
+ patreqfr = {{patente frantsesaren eskakizuna}{pat\adddotspace frants\adddotspace esk\adddot}},%
+ patrequk = {{patente britainiarraren eskakizuna}{pat\adddotspace brit\adddotspace esk\adddot}},%
+ patrequs = {{patente estatubatuarraren eskakizuna}{pat\adddotspace estat\adddotspace esk\adddot}},%
+ file = {{fitxategia}{fitxategia}},%
+ library = {{biblioteka}{bibl\adddot}},%
+ abstract = {{laburpena}{laburpena}},%
+ annotation = {{oharra}{oh\adddot}},%
+ commonera = {{oraingo aroa}{o\adddotspace a\adddot}},%
+ beforecommonera = {{oraingo aroaren aurretik}{o\adddotspace a\adddotspace a\adddot}},%
+ annodomini = {{Kristo ondoren}{K\adddotspace o\adddot}},%
+ beforechrist = {{Kristo aurretik}{K\adddotspace a\adddot}},%
+ circa = {{circa}{ca\adddot}},%
+ spring = {{udaberria}{udab\adddot}},%
+ summer = {{uda}{uda}},%
+ autumn = {{udazkena}{udaz\adddot}},%
+ winter = {{negua}{neg\adddot}},%
+% springN = {{}{}},% FIXME: missing
+% summerN = {{}{}},% FIXME: missing
+% autumnN = {{}{}},% FIXME: missing
+% winterN = {{}{}},% FIXME: missing
+% springS = {{}{}},% FIXME: missing
+% summerS = {{}{}},% FIXME: missing
+% autumnS = {{}{}},% FIXME: missing
+% winterS = {{}{}},% FIXME: missing
+% Q1 = {{}{}},% FIXME: missing
+% Q2 = {{}{}},% FIXME: missing
+% Q3 = {{}{}},% FIXME: missing
+% Q4 = {{}{}},% FIXME: missing
+% QD1 = {{}{}},% FIXME: missing
+% QD2 = {{}{}},% FIXME: missing
+% QD3 = {{}{}},% FIXME: missing
+% S1 = {{}{}},% FIXME: missing
+% S2 = {{}{}},% FIXME: missing
+ am = {{a\adddotspace m\adddot}{a\adddot m\adddot}},%
+ pm = {{p\adddotspace m\adddot}{p\adddot m\adddot}},%
+}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/lbx/brazil-ms.lbx b/macros/latex/contrib/biblatex-ms/latex/lbx/brazil-ms.lbx
new file mode 100644
index 0000000000..0987a6b843
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/lbx/brazil-ms.lbx
@@ -0,0 +1,7 @@
+\ProvidesFile{brazil-ms.lbx}
+[\abx@lbxid]
+
+\InheritBibliographyExtras{brazilian}
+\InheritBibliographyStrings{brazilian}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/lbx/brazilian-ms.lbx b/macros/latex/contrib/biblatex-ms/latex/lbx/brazilian-ms.lbx
new file mode 100644
index 0000000000..a923eba259
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/lbx/brazilian-ms.lbx
@@ -0,0 +1,566 @@
+\ProvidesFile{brazilian-ms.lbx}
+[\abx@lbxid]
+
+\DeclareRedundantLanguages{brazilian}{brazil,portuges}
+
+\DeclareBibliographyExtras{%
+ \protected\def\bibrangedash{%
+ \textendash\penalty\hyphenpenalty}% breakable dash
+ \let\finalandcomma=\empty
+ \let\finalandsemicolon=\empty
+ \def\mkbibordinal{\mkbibmascord}%
+ \protected\def\mkbibmascord#1{%
+ \stripzeros{#1}\textordmasculine}% \textordmasculine -> textcomp.sty
+ \protected\def\mkbibfemord#1{%
+ \stripzeros{#1}\textordfeminine}% \textordfeminine -> textcomp.sty
+ \protected\def\mkbibneutord{\mkbibmascord}%
+ \protected\def\mkbibdatelong#1#2#3{%
+ \iffieldundef{#3}
+ {}
+ {\stripzeros{\thefield{#3}}%
+ \iffieldundef{#2}{}{\nobreakspace de\space}}%
+ \iffieldundef{#2}
+ {}
+ {\mkbibmonth{\thefield{#2}}%
+ \iffieldundef{#1}{}{\nobreakspace de\space}}%
+ \iffieldbibstring{#1}
+ {\bibstring{\thefield{#1}}}
+ {\dateeraprintpre{#1}\stripzeros{\thefield{#1}}}}%
+ \protected\def\mkbibdateshort#1#2#3{%
+ \iffieldundef{#3}
+ {}
+ {\mkdayzeros{\thefield{#3}}%
+ \iffieldundef{#2}{}{/}}%
+ \iffieldundef{#2}
+ {}
+ {\mkmonthzeros{\thefield{#2}}%
+ \iffieldundef{#1}{}{/}}%
+ \iffieldbibstring{#1}
+ {\bibstring{\thefield{#1}}}
+ {\dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}}%
+ \savecommand\mkbibordedition
+ \savecommand\mkbibordseries
+ \def\mkbibordedition{\mkbibfemord}%
+ \def\mkbibordseries{\mkbibfemord}%
+ \expandafter\protected\expandafter\def\csname mkbibtime24h\endcsname#1#2#3#4{%
+ \iffieldundef{#1}
+ {}
+ {\mktimezeros{\thefield{#1}}%
+ \iffieldundef{#2}{}{\bibtimesep}}%
+ \iffieldundef{#2}
+ {}
+ {\mktimezeros{\thefield{#2}}%
+ \iffieldundef{#3}{}{\bibtimesep}}%
+ \iffieldundef{#3}
+ {}
+ {\mktimezeros{\thefield{#3}}}%
+ \iffieldundef{#4}{}
+ {\bibtimezonesep
+ \mkbibtimezone{\thefield{#4}}}}%
+ \expandafter\protected\expandafter\def\csname mkbibtime12h\endcsname#1#2#3#4{%
+ \stripzeros{\mktimehh{\thefield{#1}}}\bibtimesep
+ \forcezerosmdt{\thefield{#2}}%
+ \iffieldundef{#3}{}
+ {\bibtimesep
+ \forcezerosmdt{\thefield{#3}}}%
+ \space
+ \ifnumless{\thefield{#1}}{12}
+ {\bibstring{am}}
+ {\bibstring{pm}}%
+ \iffieldundef{#4}{}
+ {\space\bibtimezonesep
+ \parentext{\mkbibtimezone{\thefield{#4}}}}}%
+ \protected\def\mkbibyeardivisiondateshort#1#2{%
+ \mkbibyeardivision{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}%
+ \dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}%
+ \protected\def\mkbibyeardivisiondatelong#1#2{%
+ \mkbibyeardivision{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}%
+ \dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}%
+}
+
+\UndeclareBibliographyExtras{%
+ \restorecommand\mkbibordedition
+ \restorecommand\mkbibordseries
+}
+
+\DeclareBibliographyStrings{%
+ bibliography = {{Bibliografia}{Bibliografia}},
+ references = {{Refer\^encias}{Refer\^encias}},
+ shorthands = {{Lista de abreviaturas}{Abreviaturas}},
+ editor = {{editor}{ed\adddot}},
+ editors = {{editores}{ed\adddot}},
+ compiler = {{compilador}{comp\adddot}},
+ compilers = {{compiladores}{comp\adddot}},
+ redactor = {{redator}{red\adddot}},
+ redactors = {{redatores}{red\adddot}},
+ reviser = {{revisor}{rev\adddot}},
+ revisers = {{revisores}{rev\adddot}},
+ founder = {{fundador}{fund\adddot}},
+ founders = {{fundadores}{fund\adddot}},
+ continuator = {{continuador}{cont\adddot}},
+ continuators = {{continuadores}{cont\adddot}},
+ collaborator = {{colaborador}{colab\adddot}},
+ collaborators = {{colaboradores}{colab\adddot}},
+ translator = {{tradutor}{trad\adddot}},
+ translators = {{tradutores}{trad\adddot}},
+ commentator = {{coment\'ario}{coment\adddot}},
+ commentators = {{coment\'ario}{coment\adddot}},
+ annotator = {{notas}{notas}},
+ annotators = {{notas}{notas}},
+ commentary = {{coment\'ario}{coment\adddot}},
+ annotations = {{notas}{notas}},
+ introduction = {{introdu\c{c}\~ao}{introd\adddot}},
+ foreword = {{pref\'acio}{pref\adddot}},
+ afterword = {{posf\'acio}{posf\adddot}},
+ editortr = {{editor e tradutor}%
+ {ed\adddotspace e trad\adddot}},
+ editorstr = {{editores e tradutores}%
+ {ed\adddotspace e trad\adddot}},
+ editorco = {{editor e coment\'ario}%
+ {ed\adddotspace e coment\adddot}},
+ editorsco = {{editores e coment\'ario}%
+ {ed\adddotspace e coment\adddot}},
+ editoran = {{editor e notas}%
+ {ed\adddotspace e notas}},
+ editorsan = {{editores e notas}%
+ {ed\adddotspace e notas}},
+ editorin = {{editor e introdu\c{c}\~ao}%
+ {ed\adddotspace e introd\adddot}},
+ editorsin = {{editores e introdu\c{c}\~ao}%
+ {ed\adddotspace e introd\adddot}},
+ editorfo = {{editor e pref\'acio}%
+ {ed\adddotspace e pref\adddot}},
+ editorsfo = {{editores e pref\'acio}%
+ {ed\adddotspace e pref\adddot}},
+ editoraf = {{editor e posf\'acio}%
+ {ed\adddotspace e posf\adddot}},
+ editorsaf = {{editores e posf\'acio}%
+ {ed\adddotspace e posf\adddot}},
+ editortrco = {{editor, tradutor e coment\'ario}%
+ {ed., trad\adddot\ e coment\adddot}},
+ editorstrco = {{editores, tradutores e coment\'ario}%
+ {ed., trad\adddot\ e coment\adddot}},
+ editortran = {{editor, tradutor e notas}%
+ {ed., trad\adddot\ e notas}},
+ editorstran = {{editores, tradutores e notas}%
+ {ed., trad\adddot\ e notas}},
+ editortrin = {{editor, tradutor e introdu\c{c}\~ao}%
+ {ed., trad\adddot\ e introd\adddot}},
+ editorstrin = {{editores, tradutores e introdu\c{c}\~ao}%
+ {ed., trad\adddot\ e introd\adddot}},
+ editortrfo = {{editor, tradutor e pref\'acio}%
+ {ed., trad\adddot\ e pref\adddot}},
+ editorstrfo = {{editores, tradutores e pref\'acio}%
+ {ed., trad\adddot\ e pref\adddot}},
+ editortraf = {{editor, tradutor e posf\'acio}%
+ {ed., trad\adddot\ e posf\adddot}},
+ editorstraf = {{editores, tradutores e posf\'acio}%
+ {ed., trad\adddot\ e posf\adddot}},
+ editorcoin = {{editor, coment\'ario e introdu\c{c}\~ao}%
+ {ed., coment\adddot\ e introd\adddot}},
+ editorscoin = {{editores, coment\'ario e introdu\c{c}\~ao}%
+ {ed., coment\adddot\ e introd\adddot}},
+ editorcofo = {{editor, coment\'ario e pref\'acio}%
+ {ed., coment\adddot\ e pref\adddot}},
+ editorscofo = {{editores, coment\'ario e pref\'acio}%
+ {ed., coment\adddot\ e pref\adddot}},
+ editorcoaf = {{editor, coment\'ario e posf\'acio}%
+ {ed., coment\adddot\ e posf\adddot}},
+ editorscoaf = {{editores, coment\'ario e posf\'acio}%
+ {ed., coment\adddot\ e posf\adddot}},
+ editoranin = {{editor, notas e introdu\c{c}\~ao}%
+ {ed., notas e introd\adddot}},
+ editorsanin = {{editores, notas e introdu\c{c}\~ao}%
+ {ed., notas e introd\adddot}},
+ editoranfo = {{editor, notas e pref\'acio}%
+ {ed., notas e pref\adddot}},
+ editorsanfo = {{editores, notas e pref\'acio}%
+ {ed., notas e pref\adddot}},
+ editoranaf = {{editor, notas e posf\'acio}%
+ {ed., notas e posf\adddot}},
+ editorsanaf = {{editores, notas e posf\'acio}%
+ {ed., notas e posf\adddot}},
+ editortrcoin = {{editor, tradutor, coment\'ario e introdu\c{c}\~ao}%
+ {ed., trad., coment\adddot\ e introd\adddot}},
+ editorstrcoin = {{editores, tradutores, coment\'ario e introdu\c{c}\~ao}%
+ {ed., trad., coment\adddot\ e introd\adddot}},
+ editortrcofo = {{editor, tradutor, coment\'ario e pref\'acio}%
+ {ed., trad., coment\adddot\ e pref\adddot}},
+ editorstrcofo = {{editores, tradutores, coment\'ario e pref\'acio}%
+ {ed., trad., coment\adddot\ e pref\adddot}},
+ editortrcoaf = {{editor, tradutor, coment\'ario e posf\'acio}%
+ {ed., trad., coment\adddot\ e posf\adddot}},
+ editorstrcoaf = {{editores, tradutores, coment\'ario e posf\'acio}%
+ {ed., trad., coment\adddot\ e posf\adddot}},
+ editortranin = {{editor, tradutor, notas e introdu\c{c}\~ao}%
+ {ed., trad., notas e introd\adddot}},
+ editorstranin = {{editores, tradutores, notas e introdu\c{c}\~ao}%
+ {ed., trad., notas e introd\adddot}},
+ editortranfo = {{editor, tradutor, notas e pref\'acio}%
+ {ed., trad., notas e pref\adddot}},
+ editorstranfo = {{editores, tradutores, notas e pref\'acio}%
+ {ed., trad., notas e pref\adddot}},
+ editortranaf = {{editor, tradutor, notas e posf\'acio}%
+ {ed., trad., notas e posf\adddot}},
+ editorstranaf = {{editores, tradutores, notas e posf\'acio}%
+ {ed., trad., notas e posf\adddot}},
+ translatorco = {{tradu\c{c}\~ao e coment\'ario}%
+ {trad\adddot\ e coment\adddot}},
+ translatorsco = {{tradu\c{c}\~ao e coment\'ario}%
+ {trad\adddot\ e coment\adddot}},
+ translatoran = {{tradu\c{c}\~ao e notas}%
+ {trad\adddot\ e notas}},
+ translatorsan = {{tradu\c{c}\~ao e notas}%
+ {trad\adddot\ e notas}},
+ translatorin = {{tradu\c{c}\~ao e introdu\c{c}\~ao}%
+ {trad\adddot\ e introd\adddot}},
+ translatorsin = {{tradu\c{c}\~ao e introdu\c{c}\~ao}%
+ {trad\adddot\ e introd\adddot}},
+ translatorfo = {{tradu\c{c}\~ao e pref\'acio}%
+ {trad\adddot\ e pref\adddot}},
+ translatorsfo = {{tradu\c{c}\~ao e pref\'acio}%
+ {trad\adddot\ e pref\adddot}},
+ translatoraf = {{tradu\c{c}\~ao e posf\'acio}%
+ {trad\adddot\ e posf\adddot}},
+ translatorsaf = {{tradu\c{c}\~ao e posf\'acio}%
+ {trad\adddot\ e posf\adddot}},
+ translatorcoin = {{tradu\c{c}\~ao, coment\'ario e introdu\c{c}\~ao}%
+ {trad., coment\adddot\ e introd\adddot}},
+ translatorscoin = {{tradu\c{c}\~ao, coment\'ario e introdu\c{c}\~ao}%
+ {trad., coment\adddot\ e introd\adddot}},
+ translatorcofo = {{tradu\c{c}\~ao, coment\'ario e pref\'acio}%
+ {trad., coment\adddot\ e pref\adddot}},
+ translatorscofo = {{tradu\c{c}\~ao, coment\'ario e pref\'acio}%
+ {trad., coment\adddot\ e pref\adddot}},
+ translatorcoaf = {{tradu\c{c}\~ao, coment\'ario e posf\'acio}%
+ {trad., coment\adddot\ e posf\adddot}},
+ translatorscoaf = {{tradu\c{c}\~ao, coment\'ario e posf\'acio}%
+ {trad., coment\adddot\ e posf\adddot}},
+ translatoranin = {{tradu\c{c}\~ao, notas e introdu\c{c}\~ao}%
+ {trad., notas e introd\adddot}},
+ translatorsanin = {{tradu\c{c}\~ao, notas e introdu\c{c}\~ao}%
+ {trad., notas e introd\adddot}},
+ translatoranfo = {{tradu\c{c}\~ao, notas e pref\'acio}%
+ {trad., notas e pref\adddot}},
+ translatorsanfo = {{tradu\c{c}\~ao, notas e pref\'acio}%
+ {trad., notas e pref\adddot}},
+ translatoranaf = {{tradu\c{c}\~ao, notas e posf\'acio}%
+ {trad., notas e posf\adddot}},
+ translatorsanaf = {{tradu\c{c}\~ao, notas e posf\'acio}%
+ {trad., notas e posf\adddot}},
+ organizer = {{organizador}{org\adddot}},
+ organizers = {{organizadores}{org\adddot}},
+ byauthor = {{por}{por}},
+ byeditor = {{editado por}{ed\adddotspace por}},
+ bycompiler = {{compilado por}{comp\adddotspace por}},
+ byredactor = {{redigido por}{red\adddotspace por}},
+ byreviser = {{revisado por}{rev\adddotspace por}},
+ byreviewer = {{resenhado por}{res\adddotspace por}},
+ byfounder = {{fundado por}{fund\adddotspace por}},
+ bycontinuator = {{continuado por}{cont\adddotspace por}},
+ bycollaborator = {{em colabora\c{c}\~ao com}{em colab\adddotspace com}},
+ bytranslator = {{traduzido \lbx@lfromlang\ por}{trad\adddot\ \lbx@sfromlang\ por}},
+ bycommentator = {{comentado por}{coment\adddot\ por}},
+ byannotator = {{anotado por}{anot\adddot\ por}},
+ byorganizer = {{organizado por}{org\adddotspace por}},
+ withcommentator = {{com coment\'ario de}{com coment\adddot\ de}},
+ withannotator = {{com notas de}{com notas de}},
+ withintroduction = {{com introdu\c{c}\~ao de}{com introd\adddot\ de}},
+ withforeword = {{com pref\'acio de}{com pref\adddot\ de}},
+ withafterword = {{com posf\'acio de}{com posf\adddot\ de}},
+ byeditortr = {{editado e traduzido \lbx@lfromlang\ por}%
+ {ed\adddotspace e trad\adddot\ \lbx@sfromlang\ por}},
+ byeditorco = {{editado e comentado por}%
+ {ed\adddotspace e coment\adddot\ por}},
+ byeditoran = {{editado e anotado por}%
+ {ed\adddotspace e anot\adddot\ por}},
+ byeditorin = {{editado e introduzido por}%
+ {ed\adddotspace e introd\adddot\ por}},
+ byeditorfo = {{editado e prefaciado por}%
+ {ed\adddotspace e pref\adddot\ por}},
+ byeditoraf = {{editado e posfaciado por}%
+ {ed\adddotspace e posf\adddot\ por}},
+ byeditortrco = {{editado, traduzido \lbx@lfromlang\ e comentado por}%
+ {ed.,\addabbrvspace trad\adddot\ \lbx@sfromlang\ e coment\adddot\ por}},
+ byeditortran = {{editado, traduzido \lbx@lfromlang\ e anotado por}%
+ {ed.,\addabbrvspace trad\adddot\ \lbx@sfromlang\ e anot\adddot\ por}},
+ byeditortrin = {{editado, traduzido \lbx@lfromlang\ e introduzido por}%
+ {ed.,\addabbrvspace trad\adddotspace \lbx@sfromlang\ e introd\adddot\ por}},
+ byeditortrfo = {{editado, traduzido \lbx@lfromlang\ e prefaciado por}%
+ {ed.,\addabbrvspace trad\adddotspace \lbx@sfromlang\ e pref\adddot\ por}},
+ byeditortraf = {{editado, traduzido \lbx@lfromlang\ e posfaciado por}%
+ {ed.,\addabbrvspace trad\adddotspace \lbx@sfromlang\ e posf\adddot\ por}},
+ byeditorcoin = {{editado, comentado e introduzido por}%
+ {ed.,\addabbrvspace coment\adddot\ e introd\adddot\ por}},
+ byeditorcofo = {{editado, comentado e prefaciado por}%
+ {ed.,\addabbrvspace coment\adddot\ e pref\adddot\ por}},
+ byeditorcoaf = {{editado, comentado e posfaciado por}%
+ {ed.,\addabbrvspace coment\adddot\ e posf\adddot\ por}},
+ byeditoranin = {{editado, anotado e introduzido por}%
+ {ed.,\addabbrvspace anot\adddot\ e introd\adddot\ por}},
+ byeditoranfo = {{editado, anotado e prefaciado por}%
+ {ed.,\addabbrvspace anot\adddot\ e pref\adddot\ por}},
+ byeditoranaf = {{editado, anotado e posfaciado por}%
+ {ed.,\addabbrvspace anot\adddot\ e posf\adddot\ por}},
+ byeditortrcoin = {{editado, traduzido \lbx@lfromlang, comentado e introduzido por}%
+ {ed.,\addabbrvspace trad\adddot\ \lbx@sfromlang, coment\adddot\ e introd\adddot\ por}},
+ byeditortrcofo = {{editado, traduzido \lbx@lfromlang, comentado e prefaciado por}%
+ {ed.,\addabbrvspace trad\adddot\ \lbx@sfromlang, coment\adddot\ e pref\adddot\ por}},
+ byeditortrcoaf = {{editado, traduzido \lbx@lfromlang, comentado e posfaciado por}%
+ {ed.,\addabbrvspace trad\adddot\ \lbx@sfromlang, coment\adddot\ e posf\adddot\ por}},
+ byeditortranin = {{editado, traduzido \lbx@lfromlang, anotado e introduzido por}%
+ {ed.,\addabbrvspace trad\adddot\ \lbx@sfromlang, anot\adddot\ e introd\adddot\ por}},
+ byeditortranfo = {{editado, traduzido \lbx@lfromlang, anotado e prefaciado por}%
+ {ed.,\addabbrvspace trad\adddot\ \lbx@sfromlang, anot\adddot\ e pref\adddot\ por}},
+ byeditortranaf = {{editado, traduzido \lbx@lfromlang, anotado e posfaciado por}%
+ {ed.,\addabbrvspace trad\adddot\ \lbx@sfromlang, anot\adddot\ e posf\adddot\ por}},
+ bytranslatorco = {{traduzido \lbx@lfromlang\ e comentado por}%
+ {trad\adddot\ \lbx@sfromlang\ e coment\adddot\ por}},
+ bytranslatoran = {{traduzido \lbx@lfromlang\ e anotado por}%
+ {trad\adddot\ \lbx@sfromlang\ e anot\adddot\ por}},
+ bytranslatorin = {{traduzido \lbx@lfromlang\ e introduzido por}%
+ {trad\adddot\ \lbx@sfromlang\ e introd\adddot\ por}},
+ bytranslatorfo = {{traduzido \lbx@lfromlang\ e prefaciado por}%
+ {trad\adddot\ \lbx@sfromlang\ e pref\adddot\ por}},
+ bytranslatoraf = {{traduzido \lbx@lfromlang\ e posfaciado por}%
+ {trad\adddot\ \lbx@sfromlang\ e posf\adddot\ por}},
+ bytranslatorcoin = {{traduzido \lbx@lfromlang, comentado e introduzido por}%
+ {trad\adddot\ \lbx@sfromlang, coment\adddot\ e introd\adddot\ por}},
+ bytranslatorcofo = {{traduzido \lbx@lfromlang, comentado e prefaciado por}%
+ {trad\adddot\ \lbx@sfromlang, coment\adddot\ e pref\adddot\ por}},
+ bytranslatorcoaf = {{traduzido \lbx@lfromlang, comentado e posfaciado por}%
+ {trad\adddot\ \lbx@sfromlang, coment\adddot\ e posf\adddot\ por}},
+ bytranslatoranin = {{traduzido \lbx@lfromlang, anotado e introduzido por}%
+ {trad\adddot\ \lbx@sfromlang, anot\adddot\ e introd\adddot\ por}},
+ bytranslatoranfo = {{traduzido \lbx@lfromlang, anotado e prefaciado por}%
+ {trad\adddot\ \lbx@sfromlang, anot\adddot\ e pref\adddot\ por}},
+ bytranslatoranaf = {{traduzido \lbx@lfromlang, anotado e posfaciado por}%
+ {trad\adddot\ \lbx@sfromlang, anot\adddot\ e posf\adddot\ por}},
+ and = {{e}{e}},
+ andothers = {{et\addabbrvspace al\adddot}{et\addabbrvspace al\adddot}},
+ andmore = {{et\addabbrvspace al\adddot}{et\addabbrvspace al\adddot}},
+ volume = {{volume}{vol\adddot}},
+ volumes = {{volumes}{vol\adddot}},
+ involumes = {{em}{em}},
+ jourvol = {{volume}{v\adddot}},
+ jourser = {{s\'erie}{s\'er\adddot}},
+ book = {{livro}{livro}},
+ part = {{parte}{parte}},
+ issue = {{n\'umero}{n\'um\adddot}},
+ newseries = {{nova s\'erie}{nova s\'er\adddot}},
+ oldseries = {{s\'erie antiga}{s\'er\adddot\ antiga}},
+ edition = {{edi\c{c}\~ao}{ed\adddot}},
+ reprint = {{reimpress\~ao}{reimpr\adddot}},
+ reprintof = {{reimpress\~ao de}{reimpr\adddotspace de}},
+ reprintas = {{reimpresso como}{reimpr\adddotspace como}},
+ reprintfrom = {{reimpresso de}{reimpr\adddotspace de}},
+ translationof = {{tradu\c{c}\~ao de}{trad\adddotspace de}},
+ translationas = {{traduzido como}{trad\adddotspace como}},
+ translationfrom = {{traduzido do}{trad\adddotspace do}},
+ reviewof = {{resenha de}{res\adddotspace de}},
+ origpubas = {{originalmente publicado como}{orig\adddotspace pub\adddotspace como}},
+ origpubin = {{originalmente publicado em}{orig\adddotspace pub\adddotspace em}},
+ astitle = {{como}{como}},
+ bypublisher = {{por}{por}},
+ nodate = {{sem\space data}{s\adddot d\adddot}},
+ page = {{p\'agina}{p\adddot}},
+ pages = {{p\'aginas}{pp\adddot}},
+ column = {{coluna}{col\adddot}},
+ columns = {{colunas}{col\adddot}},
+ line = {{linha}{l\adddot}},
+ lines = {{linhas}{ll\adddot}},
+ verse = {{verso}{v\adddot}},
+ verses = {{versos}{vv\adddot}},
+ section = {{se\c{c}\~ao}{\S}},
+ sections = {{se\c{c}\~oes}{\S\S}},
+ paragraph = {{par\'agrafo}{par\adddot}},
+ paragraphs = {{par\'agrafos}{par\adddot}},
+ pagetotal = {{p\'agina}{p\adddot}},
+ pagetotals = {{p\'aginas}{pp\adddot}},
+ columntotal = {{coluna}{col\adddot}},
+ columntotals = {{colunas}{col\adddot}},
+ linetotal = {{linha}{l\adddot}},
+ linetotals = {{linhas}{ll\adddot}},
+ versetotal = {{verso}{v\adddot}},
+ versetotals = {{versos}{vv\adddot}},
+ sectiontotal = {{se\c{c}\~ao}{\S}},
+ sectiontotals = {{se\c{c}\~oes}{\S\S}},
+ paragraphtotal = {{par\'agrafo}{par\adddot}},
+ paragraphtotals = {{par\'agrafos}{par\adddot}},
+ in = {{em}{em}},
+ inseries = {{em}{em}},
+ ofseries = {{de}{de}},
+ number = {{n\'umero}{n\adddot}},
+ chapter = {{cap\'\i tulo}{cap\adddot}},
+ bathesis = {{trabalho de conclus\~ao}{trab\adddotspace de conc\adddot}},
+ mathesis = {{disserta\c{c}\~ao de mestrado}{diss\adddot\ de mestr\adddot}},
+ phdthesis = {{tese de doutorado}{tese de dout\adddot}},
+ candthesis = {{}{}},% FIXME: missing
+ resreport = {{relat\'orio de pesquisa}{rel\adddotspace de pesq\adddot}},
+ techreport = {{relat\'orio t\'ecnico}{rel\adddotspace t\'ecn\adddot}},
+ software = {{software}{software}},
+ datacd = {{CD-ROM}{CD-ROM}},
+ audiocd = {{CD de \'audio}{CD de \'audio}},
+ version = {{vers\~ao}{vers\~ao}},
+ url = {{endere\c{c}o}{endere\c{c}o}},
+ urlfrom = {{dispon\'ivel em}{disp\adddotspace em}},
+ urlseen = {{acesso em}{acesso em}},
+ inpreparation = {{em prepara\c{c}\~ao}{em prepara\c{c}\~ao}},
+ submitted = {{submetido}{submetido}},
+ forthcoming = {{aceito para publica\c{c}\~ao}{aceito para publica\c{c}\~ao}},
+ inpress = {{no prelo}{no prelo}},
+ prepublished = {{pr\'e-publicado}{pr\'e-publicado}},
+ citedas = {{doravante citado como}{doravante citado como}},
+ thiscite = {{especialmente}{esp\adddot}},
+ seenote = {{ver nota}{ver nota}},
+ quotedin = {{apud}{apud}},
+ idem = {{idem}{idem}},
+ idemsm = {{idem}{idem}},
+ idemsf = {{eadem}{eadem}},
+ idemsn = {{idem}{idem}},
+ idempm = {{eidem}{eidem}},
+ idempf = {{eaedem}{eaedem}},
+ idempn = {{eadem}{eadem}},
+ idempp = {{eidem}{eidem}},
+ ibidem = {{ibidem}{ibid\adddot}},
+ opcit = {{op\adddotspace cit\adddot}{op\adddotspace cit\adddot}},
+ loccit = {{loc\adddotspace cit\adddot}{loc\adddotspace cit\adddot}},
+ confer = {{cf\adddot}{cf\adddot}},
+ sequens = {{sq\adddot}{sq\adddot}},
+ sequentes = {{sqq\adddot}{sqq\adddot}},
+ passim = {{passim}{passim}},
+ see = {{ver}{ver}},
+ seealso = {{ver tamb\'em}{ver tamb\'em}},
+ backrefpage = {{ver p\'agina}{ver p\adddot}},
+ backrefpages = {{ver p\'aginas}{ver pp\adddot}},
+ january = {{janeiro}{jan\adddot}},
+ february = {{fevereiro}{fev\adddot}},
+ march = {{mar\c{c}o}{mar\adddot}},
+ april = {{abril}{abr\adddot}},
+ may = {{maio}{mai\adddot}},
+ june = {{junho}{jun\adddot}},
+ july = {{julho}{jul\adddot}},
+ august = {{agosto}{ago\adddot}},
+ september = {{setembro}{set\adddot}},
+ october = {{outubro}{out\adddot}},
+ november = {{novembro}{nov\adddot}},
+ december = {{dezembro}{dez\adddot}},
+ langamerican = {{ingl\^es}{ingl\^es}},
+ langbrazilian = {{portugu{\^e}s}{portugu{\^e}s}},
+ langbulgarian = {{b\'ulgaro}{b\'ulgaro}},
+ langcatalan = {{catal\~ao}{catal\~ao}},
+ langcroatian = {{croata}{croata}},
+ langczech = {{tcheco}{tcheco}},
+ langdanish = {{dinamarqu\^es}{dinamarqu\^es}},
+ langdutch = {{holand{\^e}s}{holand{\^e}s}},
+ langenglish = {{ingl\^es}{ingl\^es}},
+ langfinnish = {{finland\^es}{finland\^es}},
+ langestonian = {{estoniano}{estoniano}},
+ langfrench = {{franc\^es}{franc\^es}},
+ langgalician = {{galego}{galego}},
+ langgerman = {{alem\~ao}{alem\~ao}},
+ langgreek = {{grego}{grego}},
+ langhungarian = {{h\'ungaro}{h\'ungaro}},
+ langitalian = {{italiano}{italiano}},
+ langjapanese = {{japon\^es}{japon\^es}},
+ langlatin = {{latim}{latim}},
+ langlatvian = {{let\~ao}{let\~ao}},
+ langlithuanian = {{lituano}{lituano}},
+ langnorwegian = {{noruegu\^es}{noruegu\^es}},
+ langpolish = {{polon\^es}{polon\^es}},
+ langportuguese = {{portugu{\^e}s}{portugu{\^e}s}},
+ langrussian = {{russo}{russo}},
+ langserbian = {{s\'ervio}{s\'ervio}},
+ langslovak = {{eslovaco}{eslovaco}},
+ langslovene = {{esloveno}{esloveno}},
+ langspanish = {{espanhol}{espanhol}},
+ langswedish = {{sueco}{sueco}},
+ langturkish = {{turco}{turco}},
+ langukrainian = {{ucraniano}{ucraniano}},
+ fromamerican = {{do ingl\^es}{do ingl\^es}},
+ frombrazilian = {{do portugu{\^e}s}{do portugu{\^e}s}},
+ frombulgarian = {{do b\'ulgaro}{do b\'ulgaro}},
+ fromcatalan = {{do catal\~ao}{do catal\~ao}},
+ fromcroatian = {{do croata}{do croata}},
+ fromczech = {{do tcheco}{do tcheco}},
+ fromdanish = {{do dinamarqu\^es}{do dinamarqu\^es}},
+ fromdutch = {{do holand{\^e}s}{do holand{\^e}s}},
+ fromenglish = {{do ingl\^es}{do ingl\^es}},
+ fromestonian = {{do estoniano}{do estoniano}},
+ fromfinnish = {{do finland\^es}{do finland\^es}},
+ fromfrench = {{do franc\^es}{do franc\^es}},
+ fromgalician = {{do galego}{do galego}},
+ fromgerman = {{do alem\~ao}{do alem\~ao}},
+ fromgreek = {{do grego}{do grego}},
+ fromhungarian = {{do h\'ungaro}{do h\'ungaro}},
+ fromitalian = {{do italiano}{do italiano}},
+ fromjapanese = {{do japon\^es}{do japon\^es}},
+ fromlatin = {{do latim}{do latim}},
+ fromlatvian = {{do let\~ao}{do let\~ao}},
+ fromlithuanian = {{do lituano}{do lituano}},
+ fromnorwegian = {{do noruegu\^es}{do noruegu\^es}},
+ frompolish = {{do polon\^es}{do polon\^es}},
+ fromportuguese = {{do portugu{\^e}s}{do portugu{\^e}s}},
+ fromrussian = {{do russo}{do russo}},
+ fromserbian = {{do s\'ervio}{do s\'ervio}},
+ fromslovak = {{do eslovaco}{do eslovaco}},
+ fromslovene = {{do esloveno}{do esloveno}},
+ fromspanish = {{do espanhol}{do espanhol}},
+ fromswedish = {{do sueco}{do sueco}},
+ fromturkish = {{do turco}{do turco}},
+ fromukrainian = {{do ucraniano}{do ucraniano}},
+ countryde = {{Alemanha}{DE}},
+ countryeu = {{Uni\~ao Europeia}{EU}},
+ countryep = {{Uni\~ao Europeia}{EP}},
+ countryfr = {{Fran\c{c}a}{FR}},
+ countryuk = {{Reino Unido}{GB}},
+ countryus = {{Estados Unidos}{US}},
+ patent = {{patente}{pat\adddot}},
+ patentde = {{patente alem\~a}{pat\adddot\ alem\~a}},
+ patenteu = {{patente europeia}{pat\adddot\ europeia}},
+ patentfr = {{patente francesa}{pat\adddot\ francesa}},
+ patentuk = {{patente brit\^anica}{pat\adddot\ brit\^anica}},
+ patentus = {{patente americana}{pat\adddot\ americana}},
+ patreq = {{pedido de patente}{ped\adddot\ de pat\adddot}},
+ patreqde = {{pedido de patente alem\~a}{ped\adddot\ de pat\adddot\ alem\~a}},
+ patreqeu = {{pedido de patente europeia}{ped\adddot\ de pat\adddot\ europeia}},
+ patreqfr = {{pedido de patente francesa}{ped\adddot\ de pat\adddot\ francesa}},
+ patrequk = {{pedido de patente brit\^anica}{ped\adddot\ de pat\adddot\ brit\^anica}},
+ patrequs = {{pedido de patente americana}{ped\adddot\ de pat\adddot\ americana}},
+ file = {{arquivo}{arquivo}},
+ library = {{biblioteca}{biblioteca}},
+ abstract = {{resumo}{resumo}},
+ annotation = {{notas}{notas}},
+ commonera = {{Era Comum}{EC}},
+ beforecommonera = {{antes da Era Comum}{AEC}},
+ annodomini = {{depois de Cristo}{d\adddot C\adddot}},
+ beforechrist = {{antes de Cristo}{a\adddot C\adddot}},
+ circa = {{circa}{ca\adddot}},
+ spring = {{primavera}{primavera}},
+ summer = {{ver\~ao}{ver\~ao}},
+ autumn = {{outono}{outono}},
+ winter = {{inverno}{inverno}},
+% springN = {{}{}},% FIXME: missing
+% summerN = {{}{}},% FIXME: missing
+% autumnN = {{}{}},% FIXME: missing
+% winterN = {{}{}},% FIXME: missing
+% springS = {{}{}},% FIXME: missing
+% summerS = {{}{}},% FIXME: missing
+% autumnS = {{}{}},% FIXME: missing
+% winterS = {{}{}},% FIXME: missing
+% Q1 = {{}{}},% FIXME: missing
+% Q2 = {{}{}},% FIXME: missing
+% Q3 = {{}{}},% FIXME: missing
+% Q4 = {{}{}},% FIXME: missing
+% QD1 = {{}{}},% FIXME: missing
+% QD2 = {{}{}},% FIXME: missing
+% QD3 = {{}{}},% FIXME: missing
+% S1 = {{}{}},% FIXME: missing
+% S2 = {{}{}},% FIXME: missing
+ am = {{AM}{AM}},
+ pm = {{PM}{PM}},
+}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/lbx/british-ms.lbx b/macros/latex/contrib/biblatex-ms/latex/lbx/british-ms.lbx
new file mode 100644
index 0000000000..a47c2cb055
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/lbx/british-ms.lbx
@@ -0,0 +1,90 @@
+\ProvidesFile{british-ms.lbx}
+[\abx@lbxid]
+
+\DeclareBibliographyExtras{%
+ \protected\def\bibrangedash{%
+ \textendash\penalty\hyphenpenalty}% breakable dash
+ \let\finalandcomma=\empty
+ \protected\def\mkbibordinal#1{%
+ \begingroup
+ \@tempcnta0#1\relax\number\@tempcnta
+ \@whilenum\@tempcnta>100\do{\advance\@tempcnta-100\relax}%
+ \ifnum\@tempcnta>20
+ \@whilenum\@tempcnta>9\do{\advance\@tempcnta-10\relax}%
+ \fi
+ \ifcase\@tempcnta th\or st\or nd\or rd\else th\fi
+ \endgroup}%
+ \protected\def\mkbibmascord{\mkbibordinal}%
+ \protected\def\mkbibfemord{\mkbibordinal}%
+ \protected\def\mkbibneutord{\mkbibordinal}%
+ \protected\def\mkbibdatelong#1#2#3{%
+ \iffieldundef{#3}
+ {}
+ {\mkbibordinal{\thefield{#3}}%
+ \iffieldundef{#2}{}{\nobreakspace}}%
+ \iffieldundef{#2}
+ {}
+ {\mkbibmonth{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}}%
+ \iffieldbibstring{#1}
+ {\bibstring{\thefield{#1}}}
+ {\dateeraprintpre{#1}\stripzeros{\thefield{#1}}}}%
+ \protected\def\mkbibdateshort#1#2#3{%
+ \iffieldundef{#3}
+ {}
+ {\mkdayzeros{\thefield{#3}}%
+ \iffieldundef{#2}{}{/}}%
+ \iffieldundef{#2}
+ {}
+ {\mkmonthzeros{\thefield{#2}}%
+ \iffieldundef{#1}{}{/}}%
+ \iffieldbibstring{#1}
+ {\bibstring{\thefield{#1}}}
+ {\dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}}%
+ \expandafter\protected\expandafter\def\csname mkbibtime24h\endcsname#1#2#3#4{%
+ \iffieldundef{#1}
+ {}
+ {\mktimezeros{\thefield{#1}}%
+ \iffieldundef{#2}{}{\bibtimesep}}%
+ \iffieldundef{#2}
+ {}
+ {\mktimezeros{\thefield{#2}}%
+ \iffieldundef{#3}{}{\bibtimesep}}%
+ \iffieldundef{#3}
+ {}
+ {\mktimezeros{\thefield{#3}}}%
+ \iffieldundef{#4}{}
+ {\bibtimezonesep
+ \mkbibtimezone{\thefield{#4}}}}%
+ \expandafter\protected\expandafter\def\csname mkbibtime12h\endcsname#1#2#3#4{%
+ \stripzeros{\mktimehh{\thefield{#1}}}%
+ \bibtimesep
+ \forcezerosmdt{\thefield{#2}}%
+ \iffieldundef{#3}{}
+ {\bibtimesep
+ \forcezerosmdt{\thefield{#3}}}%
+ \space
+ \ifnumless{\thefield{#1}}{12}
+ {\bibstring{am}}
+ {\bibstring{pm}}%
+ \iffieldundef{#4}{}
+ {\space\bibtimezonesep
+ \parentext{\mkbibtimezone{\thefield{#4}}}}}%
+ \protected\def\mkbibyeardivisiondateshort#1#2{%
+ \mkbibyeardivision{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}%
+ \dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}%
+ \protected\def\mkbibyeardivisiondatelong#1#2{%
+ \mkbibyeardivision{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}%
+ \dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}%
+}
+
+\DeclareBibliographyStrings{%
+ inherit = {english},
+ organizer = {{organiser}{org\adddot}},
+ organizers = {{organisers}{orgs\adddot}},
+ byorganizer = {{organised by}{org\adddotspace by}},
+}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/lbx/bulgarian-ms.lbx b/macros/latex/contrib/biblatex-ms/latex/lbx/bulgarian-ms.lbx
new file mode 100644
index 0000000000..28af3171c3
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/lbx/bulgarian-ms.lbx
@@ -0,0 +1,621 @@
+\ProvidesFile{bulgarian-ms.lbx}
+[\abx@lbxid]
+
+\DeclareRedundantLanguages{bulgarian}{bulgarian}
+
+% This file requires UTF-8 support!
+
+\lbx@ifutfinput
+ {}
+ {\PackageError{biblatex}
+ {Bulgarian requires UTF-8 support}
+ {The 'bulgarian.lbx' file requires UTF-8 encoding but you
+ seem\MessageBreak to be using a different encoding.
+ This is a fatal error. I will\MessageBreak abort loading
+ bulgarian.lbx now.}%
+ \endinput}
+
+\NewBibliographyString{% Used only Bulgarian for month checks
+ datejanuary,
+ datefebruary,
+ datemarch,
+ dateapril,
+ datemay,
+ datejune,
+ datejuly,
+ dateaugust,
+ dateseptember,
+ dateoctober,
+ datenovember,
+ datedecember%
+}
+
+\DeclareBibliographyExtras{%
+ \protected\def\bibrangedash{%
+ \textemdash\penalty\hyphenpenalty}% breakable dash
+ \let\finalandcomma=\empty
+ \let\finalandsemicolon=\empty
+ \protected\def\mkbibordinal#1{\mkbibmascord}%
+ \protected\def\mkbibmascord#1{#1-й}%
+ \protected\def\mkbibfemord#1{#1-я}%
+ \protected\def\mkbibneutord#1{#1-е}%
+ \protected\def\mkbibdatelong#1#2#3{%
+ \iffieldundef{#3}
+ {}
+ {\stripzeros{\thefield{#3}}%
+ \iffieldundef{#2}{}{\nobreakspace}}%
+ \iffieldundef{#2}
+ {}
+ {\iffieldundef{#3}
+ {\mkbibmonth{\thefield{#2}}}
+ {\lbx@bg@mkbibdatemonth{\thefield{#2}}}%
+ \iffieldundef{#1}{}{\space}}%
+ \iffieldbibstring{#1}
+ {\bibstring{\thefield{#1}}}
+ {\dateeraprintpre{#1}\stripzeros{\thefield{#1}}}}%
+ \protected\def\mkbibdateshort#1#2#3{%
+ \iffieldundef{#3}
+ {}
+ {\mkdayzeros{\thefield{#3}}%
+ \iffieldundef{#2}{}{\adddot}}%
+ \iffieldundef{#2}
+ {}
+ {\mkmonthzeros{\thefield{#2}}%
+ \iffieldundef{#1}{}{\adddot}}%
+ \iffieldbibstring{#1}
+ {\bibstring{\thefield{#1}}}
+ {\dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}}%
+ \savecommand\mkbibordedition
+ \savecommand\mkbibordseries
+ \def\mkbibordedition{\mkbibneutord}%
+ \def\mkbibordseries{\mkbibfemord}%
+ \expandafter\protected\expandafter\def\csname mkbibtime24h\endcsname#1#2#3#4{%
+ \iffieldundef{#1}
+ {}
+ {\mktimezeros{\thefield{#1}}%
+ \iffieldundef{#2}{}{\bibtimesep}}%
+ \iffieldundef{#2}
+ {}
+ {\mktimezeros{\thefield{#2}}%
+ \iffieldundef{#3}{}{\bibtimesep}}%
+ \iffieldundef{#3}
+ {}
+ {\mktimezeros{\thefield{#3}}}%
+ \iffieldundef{#4}{}
+ {\bibtimezonesep
+ \mkbibtimezone{\thefield{#4}}}}%
+ \expandafter\protected\expandafter\def\csname mkbibtime12h\endcsname#1#2#3#4{%
+ \stripzeros{\mktimehh{\thefield{#1}}}\bibtimesep
+ \forcezerosmdt{\thefield{#2}}%
+ \iffieldundef{#3}{}
+ {\bibtimesep
+ \forcezerosmdt{\thefield{#3}}}%
+ \space
+ \ifnumless{\thefield{#1}}{12}
+ {\bibstring{am}}
+ {\bibstring{pm}}%
+ \iffieldundef{#4}{}
+ {\space\bibtimezonesep
+ \parentext{\mkbibtimezone{\thefield{#4}}}}}%
+ \protected\def\mkbibyeardivisiondateshort#1#2{%
+ \mkbibyeardivision{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}%
+ \dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}%
+ \protected\def\mkbibyeardivisiondatelong#1#2{%
+ \mkbibyeardivision{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}%
+ \dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}%
+}
+
+\UndeclareBibliographyExtras{%
+ \restorecommand\mkbibordedition
+ \restorecommand\mkbibordseries
+}
+
+\DeclareBibliographyStrings{%
+ bibliography = {{Библиография}{Библиография}},%book-like (chapter)
+ references = {{Литература}{Литература}},%article-like (section)
+ shorthands = {{Списък на съкращенията}{Съкращения}},
+ editor = {{редактор}{ред\adddot}},
+ editors = {{редактори}{ред\adddot}},
+ compiler = {{съставител}{съст\adddot}},
+ compilers = {{съставители}{съст\adddot}},
+ redactor = {{редактор}{ред\adddot}},% FIXME: unsure
+ redactors = {{редактори}{ред\adddot}},% FIXME: unsure
+ reviser = {{коректор}{кор\adddotspace кор\adddot}},
+ revisers = {{коректор}{кор\adddotspace кор\adddot}},
+ founder = {{основател}{осн\adddot}},
+ founders = {{основатели}{осн\adddot}},
+ continuator = {{продължител}{прод\adddot}},% FIXME: unsure
+ continuators = {{продължител}{прод\adddot}},% FIXME: unsure
+ collaborator = {{участник}{участ\adddot}},% FIXME: unsure
+ collaborators = {{участници}{участ\adddot}},% FIXME: unsure
+ translator = {{преводач}{прев\adddot}},
+ translators = {{преводачи}{прев\adddot}},
+ commentator = {{коментатор}{комент\adddot}},
+ commentators = {{коментатори}{комент\adddot}},
+ annotator = {{бележки}{бел\adddot}},
+ annotators = {{бележки}{бел\adddot}},
+ commentary = {{комментар}{комент\adddot}},
+ annotations = {{бележки}{бел\adddot}},
+ introduction = {{уводна статия}{ув\adddotspace ст\adddot}},
+ foreword = {{предговор}{предг\adddot}},
+ afterword = {{послеслов}{послесл\adddot}},
+ editortr = {{редактор и преводач}%
+ {ред\adddotspace и прев\adddot}},
+ editorstr = {{редактори и преводачи}%
+ {ред\adddotspace и прев\adddot}},
+ editorco = {{редактор и коментатор}%
+ {ред\adddotspace и комент\adddot}},
+ editorsco = {{редактори и коментатори}%
+ {ред\adddotspace и комент\adddot}},
+ editoran = {{редактор и съставител на бележките}%
+ {ред\adddotspace и съст\adddotspace на бел\adddot}},
+ editorsan = {{редактори и съставители на бележките}%
+ {ред\adddotspace и съст\adddotspace на бел\adddot}},
+ editorin = {{редактор и автор на уводната статия}%
+ {ред\adddotspace и авт\adddotspace на ув\adddotspace ст\adddot}},
+ editorsin = {{редактори и автори на уводната статия}%
+ {ред\adddotspace и авт\adddotspace на ув\adddotspace ст\adddot}},
+ editorfo = {{редактор и автор на предговора}%
+ {ред\adddotspace и авт\adddotspace на предг\adddot}},
+ editorsfo = {{редактори и автори на предговора}%
+ {ред\adddotspace и авт\adddotspace на предговора\adddot}},
+ editoraf = {{редактор и автор на послеслова}%
+ {ред\adddotspace и авт\adddotspace на послесл\adddot}},
+ editorsaf = {{редактори и автори на послеслова}%
+ {ред\adddotspace и авт\adddotspace на послесл\adddot}},
+ editortrco = {{редактор, преводач и автор на коментарите}%
+ {ред.,\addabbrvspace прев\adddotspace и авт\adddotspace на комент\adddot}},
+ editorstrco = {{редактори, преводачи и автори коментарите}%
+ {ред.,\addabbrvspace прев\adddotspace и авт\adddotspace на комент\adddot}},
+ editortran = {{редактор, преводач и съставител на бележките}%
+ {ред.,\addabbrvspace прев.\adddotspace и съст\adddotspace на бел\adddot}},
+ editorstran = {{редактори, преводачи и съставители на бележките}%
+ {ред.,\addabbrvspace прев.\adddotspace и съст\adddotspace на бел\adddot}},
+ editortrin = {{редактор, преводач и автор на уводната статия}%
+ {ред.,\addabbrvspace прев\adddotspace и авт\adddotspace на ув\adddotspace ст\adddot}},
+ editorstrin = {{редактори, преводачи и автори на уводната статия}%
+ {ред.,\addabbrvspace прев\adddotspace и авт\adddotspace на ув\adddotspace ст\adddot}},
+ editortrfo = {{редактор, преводач и автор на предговора}%
+ {ред.,\addabbrvspace прев\adddotspace и авт\adddotspace на предг\adddot}},
+ editorstrfo = {{редактори, преводачи и автори на предговора}%
+ {ред.,\addabbrvspace прев\adddotspace и авт\adddotspace на предг\adddot}},
+ editortraf = {{редактор, преводач и автор на послеслова}%
+ {ред.,\addabbrvspace прев\adddotspace и авт\adddotspace на послеслова\adddot}},
+ editorstraf = {{редактори, преводачи и автори на послеслова}%
+ {ред.,\addabbrvspace прев\adddotspace и авт\adddotspace на послеслова\adddot}},
+ editorcoin = {{редактор, автор на коментарите и уводната статия}%
+ {ред.,\addabbrvspace авт\adddotspace на комент\adddotspace и ун\adddotspace ст\adddot}},
+ editorscoin = {{редактори, автори на коментарите и уводната статия}%
+ {ред.,\addabbrvspace авт\adddotspace на комент\adddotspace и ун\adddotspace ст\adddot}},
+ editorcofo = {{редактор, автор на комментарите и предговора}%
+ {ред.,\addabbrvspace авт\adddotspace на комент\adddotspace и предг\adddot}},
+ editorscofo = {{редактори, автори на комментарите и предговора}%
+ {ред.,\addabbrvspace авт\adddotspace на комент\adddotspace и предг\adddot}},
+ editorcoaf = {{редактор, автор на комментарите и послеслова}%
+ {ред.,\addabbrvspace авт\adddotspace на комент\adddotspace и послесл\adddot}},
+ editorscoaf = {{редактори, автори на комментарите и послеслова}%
+ {ред.,\addabbrvspace авт\adddotspace на комент\adddotspace и послесл\adddot}},
+ editoranin = {{редактор, съставител на бележките и автор на уводната статия}%
+ {ред.,\addabbrvspace съст\adddotspace на бел.\adddotspace и авт\adddotspace на ув\adddotspace ст\adddot}},
+ editorsanin = {{редактори, съставители на бележките и автори на уводната статия}%
+ {ред.,\addabbrvspace съст\adddotspace на бел.\adddotspace и авт\adddotspace на ув\adddotspace ст\adddot}},
+ editoranfo = {{редактор, съставител на бележките и автор на предговора}%
+ {ред.,\addabbrvspace съст\adddotspace на бел\adddotspace и авт\adddotspace на предг\adddot}},
+ editorsanfo = {{редактори, съставители на бележките и автори на предговора}%
+ {ред.,\addabbrvspace съст\adddotspace на бел\adddotspace и авт\adddotspace на предг\adddot}},
+ editoranaf = {{редактор, съставител на бележките и автор на послеслова}%
+ {ред.,\addabbrvspace съст\adddotspace на бел\adddotspace и авт\adddotspace на послесл\adddot}},
+ editorsanaf = {{редактори, съставители на бележките и автори на послеслова}%
+ {ред.,\addabbrvspace съст\adddotspace на бел\adddotspace и авт\adddotspace на послесл\adddot}},
+ editortrcoin = {{редактор, преводач, автор на коментарите и уводната статия}%
+ {ред.,\addabbrvspace прев.,\addabbrvspace авт\adddotspace на комент\adddotspace и ув\adddotspace ст\adddot}},
+ editorstrcoin = {{редактори, преводачи, автори на коментарите и уводната статия}%
+ {ред.,\addabbrvspace прев.,\addabbrvspace авт\adddotspace на комент\adddotspace и ув\adddotspace ст\adddot}},
+ editortrcofo = {{редактор, преводач, автор на коментарите и предговора}%
+ {ред.,\addabbrvspace прев.,\addabbrvspace авт\adddotspace на комент\adddotspace и предг\adddot}},
+ editorstrcofo = {{редактори, преводачи, автори на коментарите и предговора}%
+ {ред.,\addabbrvspace прев.,\addabbrvspace авт\adddotspace на комент\adddotspace и предг\adddot}},
+ editortrcoaf = {{редактор, преводач, автор на комментарите и послеслова}%
+ {ред.,\addabbrvspace прев.,\addabbrvspace авт\adddotspace на комент\adddotspace и послесл\adddot}},
+ editorstrcoaf = {{редактори, преводачи, автори на комментарите и послеслова}%
+ {ред.,\addabbrvspace прев.,\addabbrvspace авт\adddotspace на комент\adddotspace и послесл\adddot}},
+ editortranin = {{редактор, переводач, съставител на бележките и автор на уводната статия}%
+ {ред.,\addabbrvspace прев.,\addabbrvspace съст\adddotspace на бел\adddotspace и авт\adddotspace на ув.\adddotspace ст\adddot}},
+ editorstranin = {{редактори, переводачи, съставители на бележките и автори на уводната статия}%
+ {ред.,\addabbrvspace прев.,\addabbrvspace съст\adddotspace на бел\adddotspace и авт\adddotspace на ув.\adddotspace ст\adddot}},
+ editortranfo = {{редактор, преводач, съставител на бележките и автор на предговора}%
+ {ред.,\addabbrvspace прев.,\addabbrvspace съст\adddotspace на бел\adddotspace и авт\adddotspace на предг\adddot}},
+ editorstranfo = {{редактор, преводач, съставител на бележките и автор на предговора}%
+ {ред.,\addabbrvspace прев.,\addabbrvspace съст\adddotspace на бел\adddotspace и авт\adddotspace на предг\adddot}},
+ editortranaf = {{редактор, преводач, съставител на бележките и автор на послеслова}%
+ {ред.,\addabbrvspace прев.,\addabbrvspace съст\adddotspace на бел\adddotspace и авт\adddotspace на послесл\adddot}},
+ editorstranaf = {{редактори, преводачи, съставители на бележките и автори на послеслова}%
+ {ред.,\addabbrvspace прев.,\addabbrvspace съст\adddotspace на бел\adddotspace и авт\adddotspace на послесл\adddot}},
+ translatorco = {{преводач и автор на коментарите}%
+ {прев\adddotspace и авт\adddotspace на комент\adddot}},
+ translatorsco = {{преводачи и автори на коментарите}%
+ {прев\adddotspace и авт\adddotspace на комент\adddot}},
+ translatoran = {{преводач и съставител на бележките}%
+ {прев\adddotspace и съст\adddotspace на бел\adddot}},
+ translatorsan = {{преводачи и съставители на бележките}%
+ {прев\adddotspace и съст\adddotspace на бел\adddot}},
+ translatorin = {{преводач и автор на уводната статия}%
+ {прев\adddotspace и авт\adddotspace на ув\adddotspace ст\adddot}},
+ translatorsin = {{преводач и автор на уводната статия}%
+ {прев\adddotspace и авт\adddotspace на ув\adddotspace ст\adddot}},
+ translatorfo = {{преводач и автор на предговора}%
+ {прев\adddotspace и авт\adddotspace на предг\adddot}},
+ translatorsfo = {{преводачи и автори на предговора}%
+ {прев\adddotspace и авт\adddotspace на предг\adddot}},
+ translatoraf = {{преводач и автор на послеслова}%
+ {прев\adddotspace и авт\adddotspace на послесл\adddot}},
+ translatorsaf = {{преводачи и автори на послеслова}%
+ {прев\adddotspace и авт\adddotspace на послесл\adddot}},
+ translatorcoin = {{преводач, автор ва коментарите и уводната статия}%
+ {прев.,\addabbrvspace авт\adddotspace на комент\adddotspace и ув\adddotspace ст\adddot}},
+ translatorscoin = {{преводач, автор ва коментарите и уводната статия}%
+ {прев.,\addabbrvspace авт\adddotspace на комент\adddotspace и ув\adddotspace ст\adddot}},
+ translatorcofo = {{преводач, автор на коментарите и предговора}%
+ {прев.,\addabbrvspace авт\adddotspace на комент\adddotspace и предг\adddot}},
+ translatorscofo = {{преводачи, автори на коментарите и предговора}%
+ {прев.,\addabbrvspace авт\adddotspace на комент\adddotspace и предг\adddot}},
+ translatorcoaf = {{преводач, автор на комментарите и послеслова}%
+ {прев.,\addabbrvspace авт\adddotspace на комент\adddotspace и послесл\adddot}},
+ translatorscoaf = {{преводачи, автори на комментарите и послеслова}%
+ {прев.,\addabbrvspace авт\adddotspace на комент\adddotspace и послесл\adddot}},
+ translatoranin = {{преводач, автор на комментарите и уводната статия}%
+ {прев.,\addabbrvspace авт\adddotspace на комент\adddotspace и ув\adddotspace ст\adddot}},
+ translatorsanin = {{преводачи, автори на комментарите и уводната статия}%
+ {прев.,\addabbrvspace авт\adddotspace на комент\adddotspace и ув\adddotspace ст\adddot}},
+ translatoranfo = {{преводач, автор на коментарите и предговора}%
+ {прев.,\addabbrvspace авт\adddotspace на комент\adddotspace и предг\adddot}},
+ translatorsanfo = {{преводачи, автори на коментарите и предговора}%
+ {прев.,\addabbrvspace авт\adddotspace на комент\adddotspace и предг\adddot}},
+ translatoranaf = {{преводач, автор на коментарите и послеслова}%
+ {прев.,\addabbrvspace авт\adddotspace на комент\adddotspace и послесл\adddot}},
+ translatorsanaf = {{преводачи, автори на коментарите и послеслова}%
+ {прев.,\addabbrvspace авт\adddotspace на комент\adddotspace и послесл\adddot}},
+% organizer = {{}{}},% FIXME: missing
+% organizers = {{}{}},% FIXME: missing
+% byorganizer = {{}{}},% FIXME: missing
+% byauthor = {{}{}},% FIXME: missing
+ byeditor = {{под редакцията на}{под\addabbrvspace ред\adddotspace на}},
+ bycompiler = {{съставител}{съст\adddot}},
+ byredactor = {{под редакцията на }{под\addabbrvspace ред\adddotspace на}},
+ byreviser = {{коригирано от}{кор\adddotspace от}},
+ byreviewer = {{рецензия от}{рец\adddotspace от}},
+ byfounder = {{основател}{осн\adddot}},
+ bycontinuator = {{продължител}{продълж\adddot}},
+ bycollaborator = {{сътрудник}{сътр\adddot}},
+ bytranslator = {{превод \lbx@lfromlang}{прев\adddot\ \lbx@sfromlang}},
+ bycommentator = {{коментари}{комент\adddot}},
+ byannotator = {{бележки}{бел\adddot}},
+ withcommentator = {{коментари}{комент\adddot}},
+ withannotator = {{бележки}{бел\adddot}},
+ withintroduction = {{уводна статия}{ув\adddotspace ст\adddot}},
+ withforeword = {{предговор}{предг\adddot}},
+ withafterword = {{послеслов}{послесл\adddot}},
+ byeditortr = {{превод \lbx@lfromlang, под редакцията на}%
+ {прев\adddot\ \lbx@sfromlang, под\addabbrvspace ред\adddot}},
+ byeditorco = {{под редакцията на, коментари}%
+ {под ред.,\addabbrvspace коммент\adddot}},
+ byeditoran = {{под редакцията на, бележки}%
+ {под ред.,\addabbrvspace бел\adddot}},
+ byeditorin = {{под редакцията на, уводна статия}%
+ {под ред.,\addabbrvspace ув\adddotspace ст\adddot}},
+ byeditorfo = {{под редакцията на, предговор}%
+ {под ред.,\addabbrvspace предг\adddot}},
+ byeditoraf = {{под редакцията на, послеслов}%
+ {под ред.,\addabbrvspace послесл\adddot}},
+ byeditortrco = {{под редакцията на, превод \lbx@lfromlang\ и комментари}%
+ {под ред.,\addabbrvspace прев\adddot\ \lbx@sfromlang\ и коммент\adddot}},
+ byeditortran = {{под редакцията на, превод \lbx@lfromlang\ и бележки}%
+ {под ред.,\addabbrvspace прев\adddot\ \lbx@sfromlang\ и бел\adddot}},
+ byeditortrin = {{под редакцията на, превод \lbx@lfromlang, уводна статия}%
+ {под ред.,\addabbrvspace прев\adddot\ \lbx@sfromlang, ув\adddotspace ст\adddot}},
+ byeditortrfo = {{под редакцията на, превод \lbx@lfromlang, предговор}%
+ {под ред.,\addabbrvspace прев\adddot\ \lbx@sfromlang, предг\adddot}},
+ byeditortraf = {{под редакцията на, превод \lbx@lfromlang, послеслов}%
+ {под ред\adddotspace и прев\adddot\ \lbx@sfromlang, послесл\adddot}},
+ byeditorcoin = {{под редакцията на, коментари и уводна статия}%
+ {под ред.,\addabbrvspace комент\adddotspace и ув\adddotspace ст\adddot}},
+ byeditorcofo = {{под редакцията на, коментари и предговор}%
+ {под ред.,\addabbrvspace комент\adddotspace и предг\adddot}},
+ byeditorcoaf = {{под редакцията на, коментари и послеслов}%
+ {под ред.,\addabbrvspace комент\adddotspace и послесл\adddot}},
+ byeditoranin = {{под редакцията на, бележки и уводна статия}%
+ {под ред.,\addabbrvspace бел\adddotspace и ув\adddotspace ст\adddot}},
+ byeditoranfo = {{под редакцията на, бележки и предговор}%
+ {под ред.,\addabbrvspace бел\adddotspace и предг\adddot}},
+ byeditoranaf = {{под редакцията на, бележки и послеслов}%
+ {под ред.,\addabbrvspace бел\adddotspace и послесл\adddot}},
+ byeditortrcoin = {{под редакцията на, превод \lbx@lfromlang, коментари и уводна статия}%
+ {под ред.,\addabbrvspace прев\adddot\ \lbx@sfromlang, комент\adddotspace и ув\adddotspace ст\adddot}},
+ byeditortrcofo = {{под редакцията на, превод \lbx@lfromlang, коментари и предгово}%
+ {под ред.,\addabbrvspace прев\adddot\ \lbx@sfromlang, комент\adddotspace и предг\adddot}},
+ byeditortrcoaf = {{под редакцията на, превод \lbx@lfromlang, коментари и послеслов}%
+ {под ред.,\addabbrvspace прев\adddot\ \lbx@sfromlang, комент\adddotspace и послесл\adddot}},
+ byeditortranin = {{под редакцията на, превод \lbx@lfromlang, бележки и уводна статия}%
+ {под ред.,\addabbrvspace прев\adddot\ \lbx@sfromlang, бел\adddotspace и ув\adddotspace ст\adddot}},
+ byeditortranfo = {{под редакцията на, превод \lbx@lfromlang, бележки и предговор}%
+ {под ред.,\addabbrvspace прев\adddot\ \lbx@sfromlang, бел\adddotspace и предг\adddot}},
+ byeditortranaf = {{под редакцията на, превод \lbx@lfromlang, бележки и послеслов}%
+ {под ред.,\addabbrvspace прев\adddot\ \lbx@sfromlang, бел\adddotspace и послесл\adddot}},
+ bytranslatorco = {{превод \lbx@lfromlang\ и коментари}%
+ {прев\adddot\ \lbx@sfromlang\ и коммент\adddot}},
+ bytranslatoran = {{превод \lbx@lfromlang\ и бележки}%
+ {прев\adddot\ \lbx@sfromlang\ и бел\adddot}},
+ bytranslatorin = {{превод \lbx@lfromlang\ и уводна статия}%
+ {прев\adddot\ \lbx@sfromlang\ и ув\adddotspace ст\adddot}},
+ bytranslatorfo = {{превод \lbx@lfromlang\ и предговор}%
+ {прев\adddot\ \lbx@sfromlang\ и предг\adddot}},
+ bytranslatoraf = {{превод \lbx@lfromlang\ и послеслов}%
+ {прев\adddot\ \lbx@sfromlang\ и и послесл\adddot}},
+ bytranslatorcoin = {{превод \lbx@lfromlang, коментари и уводна статия}%
+ {прев\adddot\ \lbx@sfromlang, комент\adddotspace и ув\adddotspace ст\adddot}},
+ bytranslatorcofo = {{превод \lbx@lfromlang, коментари и предговор}%
+ {прев\adddot\ \lbx@sfromlang, комент\adddotspace и предг\adddot}},
+ bytranslatorcoaf = {{превод \lbx@lfromlang, коментари и послеслов}%
+ {прев\adddot\ \lbx@sfromlang, комент\adddotspace и послесл\adddot}},
+ bytranslatoranin = {{превод \lbx@lfromlang, бележки и уводна статия}%
+ {прев\adddot\ \lbx@sfromlang, бел\adddotspace и ув\adddotspace ст\adddot}},
+ bytranslatoranfo = {{превод \lbx@lfromlang, бележки и предговор}%
+ {прев\adddot\ \lbx@sfromlang, бел\adddotspace и предг\adddot}},
+ bytranslatoranaf = {{превод \lbx@lfromlang, бележки и послеслов}%
+ {прев\adddot\ \lbx@sfromlang, бел\adddotspace и послесл\adddot}},
+ and = {{и}{и}},
+ andothers = {{и\addabbrvspace др\adddot}{и\addabbrvspace др\adddot}},
+ andmore = {{и\addabbrvspace др\adddot}{и\addabbrvspace др\adddot}},
+ volume = {{том}{т\adddot}},
+ volumes = {{тома}{т\adddot}},
+ involumes = {{в}{в}},
+ jourvol = {{том}{т\adddot}},
+ jourser = {{поредица}{пор\adddot}},
+ book = {{книга}{кн\adddot}},
+ part = {{част}{ч\adddot}},
+ issue = {{брой}{бр\adddot}},
+ newseries = {{нова поредица}{нова пор\adddot}},
+ oldseries = {{стара поредица}{стара пор\adddot}},
+ edition = {{издание}{изд\adddot}},
+ reprint = {{преиздание}{преизд\adddot}},
+ reprintof = {{преиздание на}{преизд\adddotspace на}},
+ reprintas = {{переиздадено като}{преизд\adddotspace като}},
+ reprintfrom = {{преиздадено с}{преизд\adddotspace с}},
+ translationof = {{превод по изданието\addcolon}{прев\adddotspace по изд\adddot\addcolon}},
+ translationas = {{превод\addcolon}{прев\adddot\addcolon}},
+ translationfrom = {{превод от}{прев\adddotspace от}},
+ reviewof = {{рецензия на\addcolon}{рец\adddotspace на\addcolon}},
+ origpubas = {{първо публикуване\addcolon}%
+ {първо публ\adddot\addcolon}},
+ origpubin = {{първо публикувано в}%
+ {първо публ\adddotspace в}},
+ astitle = {{под заглавие\addcolon}{под загл\adddot\addcolon}},
+ bypublisher = {{издател\addcomma}{изд\addcomma}},% FIXME: unsure
+ nodate = {{б\adddot г\adddot}{б\adddot г\adddot}},
+ page = {{страница}{с\adddot}},
+ pages = {{страници}{с\adddot}},
+ column = {{колона}{кол\adddot}},
+ columns = {{колони}{кол\adddot}},
+ line = {{ред}{ред}},
+ lines = {{редове}{редове}},
+ verse = {{стих}{стих}},
+ verses = {{стихове}{стихове}},
+ section = {{параграф}{\S}},
+ sections = {{параграфи}{\S\S}},
+ paragraph = {{абзац}{абз\adddot}},
+ paragraphs = {{абзаци}{абз\adddot}},
+% pagetotal = {{}{}},% FIXME: missing
+% pagetotals = {{}{}},% FIXME: missing
+% columntotal = {{}{}},% FIXME: missing
+% columntotals = {{}{}},% FIXME: missing
+% linetotal = {{}{}},% FIXME: missing
+% linetotals = {{}{}},% FIXME: missing
+% versetotal = {{}{}},% FIXME: missing
+% versetotals = {{}{}},% FIXME: missing
+% sectiontotal = {{}{}},% FIXME: missing
+% sectiontotals = {{}{}},% FIXME: missing
+% paragraphtotal = {{}{}},% FIXME: missing
+% paragraphtotals = {{}{}},% FIXME: missing
+ in = {{в}{в}},
+ inseries = {{в}{в}},
+ ofseries = {{от}{от}},
+ number = {{номер}{№}},
+ chapter = {{глава}{гл\adddot}},
+% bathesis = {{}{}},% FIXME: missing
+ mathesis = {{маг\adddotspace\textellipsis\ дис\adddot}
+ {маг\adddotspace\textellipsis\ дис\adddot}},
+ phdthesis = {{докт\adddotspace\textellipsis\ дис\adddot}
+ {докт\adddotspace\textellipsis\ дис\adddot}},
+ candthesis = {{канд\adddotspace\textellipsis\ дис\adddot}
+ {канд\adddotspace\textellipsis\ дис\adddot}},
+ resreport = {{научен доклад}{научен докл\adddot}},
+ techreport = {{технически доклад}{техн\adddotspace докл\adddot}},
+ software = {{програмно обезпечение}{прогр\adddotspace обезп\adddot}},
+ datacd = {{CD-ROM}{CD-ROM}},
+ audiocd = {{audio CD}{audio CD}},
+ version = {{версия}{вер\adddot}},
+ url = {{url}{url}},
+ urlfrom = {{режим на достъп}{режим на достъп}},
+ urlseen = {{дата на посещение}{дата\addabbrvspace на посещ\adddot}},
+ inpreparation = {{в\addabbrvspace подготовка на}{в подг\adddotspace на}},
+ submitted = {{изпратено}{изпр\adddot}},
+ forthcoming = {{предстоящо публикуване}{предст\adddotspace публ\adddot}},
+ inpress = {{под\addabbrvspace печат}{под печ\adddot}},
+ prepublished = {{предварителна публикация}{предв\adddotspace публ\adddot}},% FIXME: unsure
+ citedas = {{по-нататък цитирано като}{по-нататък цит\addabbrvspace като}},
+ thiscite = {{тук}{тук}},
+ seenote = {{виж бележката под линия}{вж\adddotspace бел\adddotspace под линия}},
+ quotedin = {{цитирано в}{цит\adddotspace в}},
+ idem = {{същия\addabbrvspace автор}{същ\adddotspace авт\adddot}},
+ idemsm = {{същия\addabbrvspace автор}{същ\adddotspace авт\adddot}},
+ idemsf = {{същия\addabbrvspace автор}{същ\adddotspace авт\adddot}},
+ idemsn = {{същия\addabbrvspace автор}{същ\adddotspace авт\adddot}},
+ idempm = {{същите\addabbrvspace автори}{същ\adddotspace авт\adddot}},
+ idempf = {{същите\addabbrvspace автори}{същ\adddotspace авт\adddot}},
+ idempn = {{същите\addabbrvspace автори}{същ\adddotspace авт\adddot}},
+ idempp = {{същите\addabbrvspace автори}{същ\adddotspace авт\adddot}},
+ ibidem = {{пак\addabbrvspace там}{пак\addabbrvspace там}},
+ opcit = {{цит\adddotspace съч\adddot}{цит\adddotspace съч\adddot}},
+ loccit = {{цит\adddotspace място}{цит\adddotspace място}},
+ confer = {{сравни}{срв\adddot}},
+ sequens = {{и следващата}{и\addabbrvspace следв\adddot}},
+ sequentes = {{и следващите}{и\addabbrvspace следв\adddot}},
+ passim = {{навсякъде}{навс\adddot}},
+ see = {{виж}{вж\adddot}},
+ seealso = {{виж също}{вж\adddotspace също}},
+ backrefpage = {{цитирано на страница}{цит\adddotspace на\addabbrvspace с\adddot}},
+ backrefpages = {{цитирано на страници}{цит\adddotspace на\addabbrvspace с\adddot}},
+ january = {{януари}{ян\adddot}},
+ february = {{февруари}{февр\adddot}},
+ march = {{март}{март}},
+ april = {{април}{апр\adddot}},
+ may = {{май}{май}},
+ june = {{юни}{юни}},
+ july = {{юли}{юли}},
+ august = {{август}{авг\adddot}},
+ september = {{септември}{септ\adddot}},
+ october = {{октомври}{окт\adddot}},
+ november = {{ноември}{ноем\adddot}},
+ december = {{декември}{дек\adddot}},
+ datejanuary = {{януари}{ян\adddot}},
+ datefebruary = {{февруари}{февр\adddot}},
+ datemarch = {{март}{март}},
+ dateapril = {{април}{апр\adddot}},
+ datemay = {{май}{май}},
+ datejune = {{юни}{юни}},
+ datejuly = {{юли}{юли}},
+ dateaugust = {{август}{авг\adddot}},
+ dateseptember = {{септември}{септ\adddot}},
+ dateoctober = {{октомври}{окт\adddot}},
+ datenovember = {{ноември}{ноем\adddot}},
+ datedecember = {{декември}{дек\adddot}},
+ langamerican = {{американски}{амер\adddot}},
+ langbrazilian = {{бразилски}{браз\adddot}},
+ langbulgarian = {{български}{бълг\adddot}},
+ langcatalan = {{каталунски}{катал\adddot}},
+ langcroatian = {{хърватски}{хърв\adddot}},
+ langczech = {{чешки}{чеш\adddot}},
+ langdanish = {{датски}{дат\adddot}},
+ langdutch = {{нидерландски}{нидерл\adddot}},
+ langenglish = {{английски}{англ\adddot}},
+ langestonian = {{естонски}{ест\adddot}},
+ langfinnish = {{фински}{фин\adddot}},
+ langfrench = {{френски}{фр\adddot}},
+ langgalician = {{галисийски}{гал\adddot}},
+ langgerman = {{немски}{нем\adddot}},
+ langgreek = {{гръцки}{гр\adddot}},
+ langhungarian = {{унгарски}{унг\adddot}},
+ langitalian = {{италиански}{итал\adddot}},
+ langjapanese = {{японски}{яп\adddot}},
+ langlatin = {{латински}{лат\adddot}},
+% langlatvian = {{}{}},% FIXME: missing
+ langnorwegian = {{норвежки}{норв\adddot}},
+ langpolish = {{полски}{пол\adddot}},
+ langportuguese = {{португалски}{порт\adddot}},
+ langrussian = {{русски}{рус\adddot}},
+% langslovak = {{}{}},% FIXME: missing
+ langslovene = {{словенски}{слов\adddot}},
+ langspanish = {{испански}{исп\adddot}},
+ langswedish = {{шведски}{швед\adddot}},
+ fromamerican = {{от американски}{от\addabbrvspace амер\adddot}},
+ frombrazilian = {{от бразилски}{от\addabbrvspace браз\adddot}},
+ frombulgarian = {{от български}{от\addabbrvspace бълг\adddot}},
+ fromcatalan = {{от каталунски}{от\addabbrvspace катал\adddot}},
+ fromcroatian = {{от хърватски}{от\addabbrvspace хърв\adddot}},
+ fromczech = {{от чешки}{от\addabbrvspace чеш\adddot}},
+ fromdanish = {{от датски}{от\addabbrvspace дат\adddot}},
+ fromdutch = {{от нидерландски}{от\addabbrvspace нидерл\adddot}},
+ fromenglish = {{от английски}{от\addabbrvspace англ\adddot}},
+ fromestonian = {{от естонски}{от\addabbrvspace эст\adddot}},
+ fromfinnish = {{от фински}{от\addabbrvspace фин\adddot}},
+ fromfrench = {{от френски}{от\addabbrvspace фр\adddot}},
+ fromgalician = {{от галисийски}{от\addabbrvspace гал\adddot}},
+ fromgerman = {{от немски}{от\addabbrvspace нем\adddot}},
+ fromgreek = {{от гръцки}{от\addabbrvspace гр\adddot}},
+ fromhungarian = {{от унгарски}{от\addabbrvspace унг\adddot}},
+ fromitalian = {{от италиански}{от\addabbrvspace итал\adddot}},
+ fromjapanese = {{от японски}{от\addabbrvspace яп\adddot}},
+ fromlatin = {{от латински}{от\addabbrvspace лат\adddot}},
+% fromlatvian = {{}{}},% FIXME: missing
+ fromnorwegian = {{от норвежки}{от\addabbrvspace норв\adddot}},
+ frompolish = {{от полски}{от пол\adddot}},
+ fromportuguese = {{от португалски}{от\addabbrvspace порт\adddot}},
+ fromrussian = {{от руски}{от\addabbrvspace рус\adddot}},
+% fromslovak = {{}{}},% FIXME: missing
+ fromslovene = {{от словенски}{от\addabbrvspace слов\adddot}},
+ fromspanish = {{от испански}{от\addabbrvspace исп\adddot}},
+ fromswedish = {{от шведски}{от\addabbrvspace швед\adddot}},
+ countryde = {{Германия}{Германия}},
+ countryeu = {{Европейски съюз}{ЕС}},
+ countryep = {{Европейски съюз}{ЕС}},
+ countryfr = {{Франция}{Франция}},
+ countryuk = {{Великобритания}{Великобритания}},
+ countryus = {{Съединени американски щати}{САЩ}},
+ patent = {{патент}{пат\adddot}},
+ patentde = {{патент на Германия}{пат\adddotspace на Германия}},
+ patenteu = {{патент на Европа}{пат\adddotspace на Европа}},
+ patentfr = {{патент на Франция}{пат\adddotspace на Франции}},
+ patentuk = {{патент на Великобритания}{пат\adddotspace на Великобритания}},
+ patentus = {{патент на САЩ}{пат\adddotspace на САЩ}},
+ patreq = {{заявка}{заявка}},
+ patreqde = {{заявка за патент на Германии}{заявка за пат\adddotspace на Германия}},
+ patreqeu = {{заявка за патент на Европа}{заявка за пат\adddotspace на Европа}},
+ patreqfr = {{заявка за патент на Франция}{заявка за пат\adddotspace на Франция}},
+ patrequk = {{заявка за патент на Великобритания}{заявка за пат\adddotspace на Великобритания}},
+ patrequs = {{заявка за патент на САЩ}{заявка за пат\adddotspace на САЩ}},
+ file = {{файл}{файл}},
+ library = {{библиотека}{б-ка}},
+ abstract = {{резюме}{рез\adddot}},
+ annotation = {{анотация}{анот\adddot}},
+ commonera = {{новата ера}{н\adddotspace е\adddot}},
+ beforecommonera = {{до новата ера}{до н\adddotspace е\adddot}},
+ annodomini = {{след Христа}{сл\adddotspace Хр\adddot}},
+ beforechrist = {{до Христа}{до Хр\adddot}},
+ circa = {{около}{ок\adddot}},
+ spring = {{пролет}{пролет}},
+ summer = {{лято}{лято}},
+ autumn = {{есен}{есен}},
+ winter = {{зима}{зима}},
+% springN = {{}{}},% FIXME: missing
+% summerN = {{}{}},% FIXME: missing
+% autumnN = {{}{}},% FIXME: missing
+% winterN = {{}{}},% FIXME: missing
+% springS = {{}{}},% FIXME: missing
+% summerS = {{}{}},% FIXME: missing
+% autumnS = {{}{}},% FIXME: missing
+% winterS = {{}{}},% FIXME: missing
+% Q1 = {{}{}},% FIXME: missing
+% Q2 = {{}{}},% FIXME: missing
+% Q3 = {{}{}},% FIXME: missing
+% Q4 = {{}{}},% FIXME: missing
+% QD1 = {{}{}},% FIXME: missing
+% QD2 = {{}{}},% FIXME: missing
+% QD3 = {{}{}},% FIXME: missing
+% S1 = {{}{}},% FIXME: missing
+% S2 = {{}{}},% FIXME: missing
+ am = {{преди обяд}{преди обяд}},
+ pm = {{след обяд}{сдед обяд}},
+}
+
+\protected\gdef\lbx@bg@mkbibdatemonth#1{%
+ \ifcase0#1\relax
+ #1\BibliographyWarning{Month out of range}%
+ \or\abx@bibmonth{datejanuary}%
+ \or\abx@bibmonth{datefebruary}%
+ \or\abx@bibmonth{datemarch}%
+ \or\abx@bibmonth{dateapril}%
+ \or\abx@bibmonth{datemay}%
+ \or\abx@bibmonth{datejune}%
+ \or\abx@bibmonth{datejuly}%
+ \or\abx@bibmonth{dateaugust}%
+ \or\abx@bibmonth{dateseptember}%
+ \or\abx@bibmonth{dateoctober}%
+ \or\abx@bibmonth{datenovember}%
+ \or\abx@bibmonth{datedecember}%
+ \else
+ #1\BibliographyWarning{Month out of range}%
+ \fi}%
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/lbx/canadian-ms.lbx b/macros/latex/contrib/biblatex-ms/latex/lbx/canadian-ms.lbx
new file mode 100644
index 0000000000..66dcd46be6
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/lbx/canadian-ms.lbx
@@ -0,0 +1,7 @@
+\ProvidesFile{canadian-ms.lbx}
+[\abx@lbxid]
+
+\InheritBibliographyExtras{english}% correct? these are the US standards
+\InheritBibliographyStrings{english}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/lbx/catalan-ms.lbx b/macros/latex/contrib/biblatex-ms/latex/lbx/catalan-ms.lbx
new file mode 100644
index 0000000000..66eb3b4789
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/lbx/catalan-ms.lbx
@@ -0,0 +1,663 @@
+\ProvidesFile{catalan-ms.lbx}
+[\abx@lbxid]
+
+\DeclareRedundantLanguages{catalan}{catalan}
+
+\DeclareBibliographyExtras{%
+ \protected\def\bibrangedash{\addnbthinspace -\addnbthinspace}%
+ \let\finalandcomma=\empty
+ \let\finalandsemicolon=\empty
+ \def\mkbibordinal{\mkbibmascord}%
+ \protected\def\mkbibmascord#1{%
+ \begingroup
+ \@tempcnta0#1\relax\number\@tempcnta
+ \ifcase\@tempcnta\or r\or n\or r\or t\else\`e\fi
+ \endgroup}%
+ \protected\def\mkbibfemord#1{\stripzeros{#1}a}%
+ \protected\def\mkbibdatelong#1#2#3{% maintainers: check me
+ \iffieldundef{#3}
+ {}
+ {\stripzeros{\thefield{#3}}%
+ \iffieldundef{#2}
+ {}
+ {\space%
+ \ifthenelse{\thefield{#2}=4}
+ {d'}
+ {\ifthenelse{\thefield{#2}=8}
+ {d'}
+ {\ifthenelse{\thefield{#2}=10}
+ {d'}
+ {de\nobreakspace}}}}}%
+ \iffieldundef{#2}
+ {}
+ {\mkbibmonth{\thefield{#2}}%
+ \iffieldundef{#1}
+ {}
+ {\space de\nobreakspace}}%
+ \iffieldundef{#1}
+ {}
+ {\iffieldbibstring{#1}
+ {\bibstring{\thefield{#1}}}
+ {\dateeraprintpre{#1}\thefield{#1}}}}%
+ \protected\def\mkbibdateshort#1#2#3{% maintainers: check me
+ \iffieldundef{#3}
+ {}
+ {\mkdayzeros{\thefield{#3}}%
+ \iffieldundef{#2}{}{\mbox{-}}}%
+ \iffieldundef{#2}
+ {}
+ {\mkmonthzeros{\thefield{#2}}%
+ \iffieldundef{#1}{}{\mbox{-}}}%
+ \iffieldbibstring{#1}
+ {\bibstring{\thefield{#1}}}
+ {\dateeraprintpre{#1}\thefield{#1}}}%
+ \savecommand\lbx@initnamehook
+ \savecommand\lbx@inittitlehook
+ \savecommand\mkdaterangeterse
+ \savecommand\mkbibordedition
+ \savecommand\mkbibordseries
+ \let\lbx@initnamehook=\lbx@ca@smartof
+ \let\lbx@inittitlehook=\lbx@ca@smartof
+ \protected\def\mkdaterangeterse{%
+ \BibliographyWarning{%
+ Date format 'terse' not applicable to\MessageBreak
+ Catalan dates. Using format 'short' instead}%
+ \mkdaterangefull{short}}%
+ \def\mkbibordedition{\mkbibfemord}%
+ \def\mkbibordseries{\mkbibfemord}%
+ \expandafter\protected\expandafter\def\csname mkbibtime24h\endcsname#1#2#3#4{%
+ \iffieldundef{#1}
+ {}
+ {\mktimezeros{\thefield{#1}}%
+ \iffieldundef{#2}{}{\bibtimesep}}%
+ \iffieldundef{#2}
+ {}
+ {\mktimezeros{\thefield{#2}}%
+ \iffieldundef{#3}{}{\bibtimesep}}%
+ \iffieldundef{#3}
+ {}
+ {\mktimezeros{\thefield{#3}}}%
+ \iffieldundef{#4}{}
+ {\bibtimezonesep
+ \mkbibtimezone{\thefield{#4}}}}%
+ \expandafter\protected\expandafter\def\csname mkbibtime12h\endcsname#1#2#3#4{%
+ \stripzeros{\mktimehh{\thefield{#1}}}\bibtimesep
+ \forcezerosmdt{\thefield{#2}}%
+ \iffieldundef{#3}{}
+ {\bibtimesep
+ \forcezerosmdt{\thefield{#3}}}%
+ \space
+ \ifnumless{\thefield{#1}}{12}
+ {\bibstring{am}}
+ {\bibstring{pm}}%
+ \iffieldundef{#4}{}
+ {\space\bibtimezonesep
+ \parentext{\mkbibtimezone{\thefield{#4}}}}}%
+ \protected\def\mkbibyeardivisiondateshort#1#2{%
+ \mkbibyeardivision{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}%
+ \dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}%
+ \protected\def\mkbibyeardivisiondatelong#1#2{%
+ \mkbibyeardivision{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}%
+ \dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}%
+}
+
+\UndeclareBibliographyExtras{%
+ \restorecommand\lbx@initnamehook
+ \restorecommand\lbx@inittitlehook
+ \restorecommand\mkdaterangeterse
+ \restorecommand\mkbibordedition
+ \restorecommand\mkbibordseries
+}
+
+\DeclareBibliographyStrings{%
+ bibliography = {{Bibliografia}{Bibliografia}},
+ references = {{Refer\`encies}{Refer\`encies}},
+ shorthands = {{Llista d'abreviatures}{Abreviatures}},
+ editor = {{editor}{ed\adddot}},
+ editors = {{editors}{ed\adddot}},
+ compiler = {{compilador}{comp\adddot}},% Revisar
+ compilers = {{compiladors}{comp\adddot}},% Revisar
+ redactor = {{redactor}{red\adddot}},
+ redactors = {{redactors}{red\adddot}},
+ reviser = {{revisor}{rev\adddot}},
+ revisers = {{revisors}{rev\adddot}},
+ founder = {{fundador}{fund\adddot}},
+ founders = {{fundadors}{fund\adddot}},
+ continuator = {{continuador}{cont\adddot}},
+ continuators = {{continuadors}{cont\adddot}},
+ collaborator = {{co\l.laborador}{co\l.l\adddot}},% \l* -> catalan.ldf (babel)
+ collaborators = {{co\l.laboradors}{co\l.l\adddot}},
+ translator = {{traductor}{trad\adddot}},
+ translators = {{traductors}{trad\adddot}},
+ commentator = {{comentarista}{com\adddot}},
+ commentators = {{comentaristes}{com\adddot}},
+ annotator = {{anotador}{anot\adddot}},
+ annotators = {{anotadors}{anot\adddot}},
+ commentary = {{comentari}{com\adddot}},
+ annotations = {{notes}{n\adddot}},
+ introduction = {{introducci\'o}{intr\adddot}},
+ foreword = {{pr\`oleg}{pr\`ol\adddot}},
+ afterword = {{ep\'{\i}leg}{ep\adddot}},
+ editortr = {{editor i traductor}{ed\adddotspace i trad\adddot}},
+ editorstr = {{editors i traductors}{ed\adddotspace i trad\adddot}},
+ editorco = {{editor i comentarista}{ed\adddotspace i com\adddot}},
+ editorsco = {{editors i comentaristes}{ed\adddotspace i com\adddot}},
+ editoran = {{editor i anotador}{ed\adddotspace i anot\adddot}},
+ editorsan = {{editors i anotadors}{ed\adddotspace i anot\adddot}},
+ editorin = {{editor i autor de la introducci\'o}
+ {ed\adddotspace i aut\adddotspace de la intr\adddot}},
+ editorsin = {{editors i autors de la introducci\'o}
+ {ed\adddotspace i aut\adddotspace de la intr\adddot}},
+ editorfo = {{editor i autor del pr\`oleg}
+ {ed\adddotspace i aut\adddotspace del pr\`ol\adddot}},
+ editorsfo = {{editors i autors del pr\`oleg}
+ {ed\adddotspace i aut\adddotspace del pr\`ol\adddot}},
+ editoraf = {{editor i autor de l'ep\'{\i}leg}
+ {ed\adddotspace i aut\adddotspace de l'ep\adddot}},
+ editorsaf = {{editors i autors de l'ep\'{\i}leg}
+ {ed\adddotspace i aut\adddotspace de l'ep\adddot}},
+ editortrco = {{editor, traductor i comentarista}
+ {ed.,\addabbrvspace trad\adddotspace i com\adddot}},
+ editorstrco = {{editors, traductors i comentaristes}
+ {ed.,\addabbrvspace trad\adddotspace i com\adddot}},
+ editortran = {{editor, traductor i anotador}
+ {ed.,\addabbrvspace trad\adddotspace i anot\adddot}},
+ editorstran = {{editors, traductors i anotadors}
+ {ed.,\addabbrvspace trad\adddotspace i anot\adddot}},
+ editortrin = {{editor, traductor i autor de la introducci\'o}
+ {ed.,\addabbrvspace trad\adddotspace i aut\adddotspace de la intr\adddot}},
+ editorstrin = {{editors, traductors i autors de la introducci\'o}
+ {ed.,\addabbrvspace trad\adddotspace i aut\adddotspace de la intr\adddot}},
+ editortrfo = {{editor, traductor i autor del pr\`oleg}
+ {ed.,\addabbrvspace trad\adddotspace i aut\adddotspace del pr\`ol\adddot}},
+ editorstrfo = {{editors, traductors i autors del pr\`oleg}
+ {ed.,\addabbrvspace trad\adddotspace i aut\adddotspace del pr\`ol\adddot}},
+ editortraf = {{editor, traductor i autor de l'ep\'{\i}leg}
+ {ed.,\addabbrvspace trad\adddotspace i aut\adddotspace de l'ep\adddot}},
+ editorstraf = {{editors, traductors i autors de l'ep\'{\i}leg}
+ {ed.,\addabbrvspace trad\adddotspace i aut\adddotspace de l'ep\adddot}},
+ editorcoin = {{editor, comentarista i autor de la introducci\'o}
+ {ed.,\addabbrvspace com\adddotspace i aut\adddotspace de la intr\adddot}},
+ editorscoin = {{editors, comentaristes i autors de la introducci\'o}
+ {ed.,\addabbrvspace com\adddotspace i aut\adddotspace de la intr\adddot}},
+ editorcofo = {{editor, comentarista i autor del pr\`oleg}
+ {ed.,\addabbrvspace com\adddotspace i aut\adddotspace del pr\`ol\adddot}},
+ editorscofo = {{editors, comentaristes i autors del pr\`oleg}
+ {ed.,\addabbrvspace com\adddotspace i aut\adddotspace del pr\`ol\adddot}},
+ editorcoaf = {{editor, comentarista i autor de l'ep\'{\i}leg}
+ {ed.,\addabbrvspace com\adddotspace i aut\adddotspace de l'ep\adddot}},
+ editorscoaf = {{editors, comentaristes i autors de l'ep\'{\i}leg}
+ {ed.,\addabbrvspace com\adddotspace i aut\adddotspace de l'ep\adddot}},
+ editoranin = {{editor, anotador i autor de la introducci\'o}
+ {ed.,\addabbrvspace anot\adddotspace i aut\adddotspace de la intr\adddot}},
+ editorsanin = {{editors, anotadors i autors de la introducci\'o}
+ {ed.,\addabbrvspace anot\adddotspace i aut\adddotspace de la intr\adddot}},
+ editoranfo = {{editor, anotador i autor del pr\`oleg}
+ {ed.,\addabbrvspace anot\adddotspace i aut\adddotspace del pr\`ol\adddot}},
+ editorsanfo = {{editors, anotadors i autors del pr\`oleg}
+ {ed.,\addabbrvspace anot\adddotspace i aut\adddotspace del pr\`ol\adddot}},
+ editoranaf = {{editor, anotador i autor de l'ep\'{\i}leg}
+ {ed.,\addabbrvspace anot\adddotspace i aut\adddotspace de l'ep\adddot}},
+ editorsanaf = {{editors, anotadors i autors de l'ep\'{\i}leg}
+ {ed.,\addabbrvspace anot\adddotspace i aut\adddotspace de l'ep\adddot}},
+ editortrcoin = {{editor, traductor, comentarista i autor de la introducci\'o}
+ {ed.,\addabbrvspace trad.,\addabbrvspace com\adddotspace i aut\adddotspace de la intr\adddot}},
+ editorstrcoin = {{editors, traductors, comentaristes i autors de la introducci\'o}
+ {ed.,\addabbrvspace trad.,\addabbrvspace com\adddotspace i aut\adddotspace de la intr\adddot}},
+ editortrcofo = {{editor, traductor, comentarista i autor del pr\`oleg}
+ {ed.,\addabbrvspace trad.,\addabbrvspace com\adddotspace i aut\adddotspace del pr\`ol\adddot }},
+ editorstrcofo = {{editors, traductors, comentaristes i autors del pr\`oleg}
+ {ed.,\addabbrvspace trad.,\addabbrvspace com\adddotspace i aut\adddotspace del pr\`ol\adddot }},
+ editortrcoaf = {{editor, traductor, comentarista i autor de l'ep\'{\i}leg}
+ {ed.,\addabbrvspace trad.,\addabbrvspace com\adddotspace i aut\adddotspace de l'ep\adddot}},
+ editorstrcoaf = {{editors, traductors, comentaristes i autors de l'ep\'{\i}leg}
+ {ed.,\addabbrvspace trad.,\addabbrvspace com\adddotspace i aut\adddotspace de l'ep\adddot}},
+ editortranin = {{editor, traductor, anotador i autor de la introducci\'o}
+ {ed.,\addabbrvspace trad.,\addabbrvspace anot\adddotspace i aut\adddotspace de la intr\adddot}},
+ editorstranin = {{editors, traductors, anotadors i autors de la introducci\'o}
+ {ed.,\addabbrvspace trad.,\addabbrvspace anot\adddotspace i aut\adddotspace de la intr\adddot}},
+ editortranfo = {{editor, traductor, anotador i autor del pr\`oleg}
+ {ed.,\addabbrvspace trad.,\addabbrvspace anot\adddotspace i aut\adddotspace de pr\`ol\adddot}},
+ editorstranfo = {{editors, traductors, anotadors i autors del pr\`oleg}
+ {ed.,\addabbrvspace trad.,\addabbrvspace anot\adddotspace i aut\adddotspace de pr\`ol\adddot}},
+ editortranaf = {{editor, traductor, anotador i autor de l'ep\'{\i}leg}
+ {ed.,\addabbrvspace trad.,\addabbrvspace anot\adddotspace i aut\adddotspace de l'ep\adddot}},
+ editorstranaf = {{editors, traductors, anotadors i autors de l'ep\'{\i}leg}
+ {ed.,\addabbrvspace trad.,\addabbrvspace anot\adddotspace i aut\adddotspace de l'ep\adddot}},
+ translatorco = {{traductor i comentarista}
+ {trad\adddotspace i com\adddot}},
+ translatorsco = {{traductors i comentaristes}
+ {trad\adddotspace i com\adddot}},
+ translatoran = {{traductor i anotador}
+ {trad\adddotspace i anot\adddot}},
+ translatorsan = {{traductors i anotadors}
+ {trad\adddotspace i anot\adddot}},
+ translatorin = {{traductor i autor de la introducci\'o}
+ {trad\adddotspace i aut\adddotspace de la intr\adddot}},
+ translatorsin = {{traductors i autors de la introducci\'o}
+ {trad\adddotspace i aut\adddotspace de la intr\adddot}},
+ translatorfo = {{traductor i autor del pr\`oleg}
+ {trad\adddotspace i aut\adddotspace del pr\`ol\adddot}},
+ translatorsfo = {{traductors i autors del pr\`oleg}
+ {trad\adddotspace i aut\adddotspace del pr\`ol\adddot}},
+ translatoraf = {{traductor i autor de l'ep\'{\i}leg}
+ {trad\adddotspace i aut\adddotspace de l'ep\adddot}},
+ translatorsaf = {{traductors i autors de l'ep\'{\i}leg}
+ {trad\adddotspace i aut\adddotspace de l'ep\adddot}},
+ translatorcoin = {{traductor, comentarista i autor de la introducci\'o}
+ {trad.,\addabbrvspace com\adddotspace i aut\adddotspace de la intr\adddot}},
+ translatorscoin = {{traductors, comentaristes i autors de la introducci\'o}
+ {trad.,\addabbrvspace com\adddotspace i aut\adddotspace de la intr\adddot}},
+ translatorcofo = {{traductor, comentarista i autor del pr\`oleg}
+ {trad.,\addabbrvspace com\adddotspace i aut\adddotspace del pr\`ol\adddot}},
+ translatorscofo = {{traductors, comentaristes i autors del pr\`oleg}
+ {trad.,\addabbrvspace com\adddotspace i aut\adddotspace del pr\`ol\adddot}},
+ translatorcoaf = {{traductor, comentarista i autor de l'ep\'{\i}leg}
+ {trad.,\addabbrvspace com\adddotspace i aut\adddotspace de l'ep\adddot}},
+ translatorscoaf = {{traductors, comentaristes i autors de l'ep\'{\i}leg}
+ {trad.,\addabbrvspace com\adddotspace i aut\adddotspace de l'ep\adddot}},
+ translatoranin = {{traductor, anotador i autor de la introducci\'o}
+ {trad.,\addabbrvspace anot\adddotspace i aut\adddotspace de la intr\adddot}},
+ translatorsanin = {{traductors, anotadors i autors de la introducci\'o}
+ {trad.,\addabbrvspace anot\adddotspace i aut\adddotspace de la intr\adddot}},
+ translatoranfo = {{traductor, anotador i autor del pr\`oleg}
+ {trad.,\addabbrvspace anot\adddotspace i aut\adddotspace del pr\`ol\adddot}},
+ translatorsanfo = {{traductors, anotadors i autors del pr\`oleg}
+ {trad.,\addabbrvspace anot\adddotspace i aut\adddotspace del pr\`ol\adddot}},
+ translatoranaf = {{traductor, anotador i autor de l'ep\'{\i}leg}
+ {trad.,\addabbrvspace anot\adddotspace i aut\adddotspace de l'ep\adddot}},
+ translatorsanaf = {{traductors, anotadors i autors de l'ep\'{\i}leg}
+ {trad.,\addabbrvspace anot\adddotspace i aut\adddotspace de l'ep\adddot}},
+ organizer = {{organitzador}{org\adddot}},
+ organizers = {{organitzadors}{org\adddot}},
+ byorganizer = {{organitzat per}{org\adddotspace per}},
+ byauthor = {{per}{per}},
+ byeditor = {{edici\'o a cura\smartof}{ed\adddot\smartof}},
+ bycompiler = {{compilaci\'o a cura\smartof}{comp\adddot\smartof}},
+ byredactor = {{redacci\'o a cura\smartof}{red\adddot\smartof}},
+ byreviser = {{revisi\'o a cura\smartof}{rev\adddot\smartof}},
+ byreviewer = {{ressenya a cura\smartof}{ress\adddot\smartof}},
+ byfounder = {{fundat per}{fund\adddotspace per}},
+ bycontinuator = {{continuat per}{cont\adddotspace per}},
+ bycollaborator = {{amb la co\l.laboraci\'o\smartof}{amb la co\l.l\adddot\smartof}},
+ bytranslator = {{tradu\"{\i}t \lbx@lfromlang\ per}{trad\adddotspace\lbx@sfromlang\ per}},
+ bycommentator = {{comentari a cura\smartof}{com\adddot\smartof}},
+ byannotator = {{notes a cura\smartof}{n\adddot\smartof}},
+ withcommentator = {{amb un comentari a cura\smartof}{amb un com\adddot\smartof}},
+ withannotator = {{amb notes a cura\smartof}{amb n\adddot\smartof}},
+ withintroduction = {{amb una introducci\'o a cura\smartof}{amb una intr\adddot\smartof}},
+ withforeword = {{amb un pr\`oleg a cura\smartof}{amb un pr\`ol\adddot\smartof}},
+ withafterword = {{amb un ep\'{\i}leg a cura\smartof}{amb un ep\adddot\smartof}},
+ byeditortr = {{edici\'o i traducci\'o \lbx@lfromlang\ a cura\smartof}%
+ {ed\adddotspace i trad\adddotspace\lbx@sfromlang\smartof}},
+ byeditorco = {{edici\'o i comentari a cura\smartof}%
+ {ed\adddotspace i com\adddot\smartof}},
+ byeditoran = {{edici\'o i notes a cura\smartof}%
+ {ed\adddotspace i n\adddot\smartof}},
+ byeditorin = {{edici\'o i introducci\'o a cura\smartof}%
+ {ed\adddotspace i intr\adddot\smartof}},
+ byeditorfo = {{edici\'o i pr\`oleg a cura\smartof}%
+ {ed\adddotspace i pr\`ol\adddot\smartof}},
+ byeditoraf = {{edici\'o i ep\'{\i}leg a cura\smartof}%
+ {ed\adddotspace i ep\adddot\smartof}},
+ byeditortrco = {{edici\'o, traducci\'o \lbx@lfromlang\ i comentari a cura\smartof}%
+ {ed.,\addabbrvspace trad\adddotspace\lbx@sfromlang\ i com\adddot\smartof}},
+ byeditortran = {{edici\'o, traducci\'o \lbx@lfromlang\ i notes a cura\smartof}%
+ {ed.,\addabbrvspace trad\adddotspace\lbx@sfromlang\ i n\adddot\smartof}},
+ byeditortrin = {{edici\'o, traducci\'o \lbx@lfromlang\ i introducci\'o a cura\smartof}%
+ {ed.,\addabbrvspace trad\adddotspace\lbx@sfromlang\ i intr\adddot\smartof}},
+ byeditortrfo = {{edici\'o, traducci\'o \lbx@lfromlang\ i pr\`oleg a cura\smartof}%
+ {ed.,\addabbrvspace trad\adddotspace\lbx@sfromlang\ i pr\`ol\adddot\smartof}},
+ byeditortraf = {{edici\'o, traducci\'o \lbx@lfromlang\ i ep\'{\i}leg a cura\smartof}%
+ {ed.,\addabbrvspace trad\adddotspace\lbx@sfromlang\ i ep\adddot\smartof}},
+ byeditorcoin = {{edici\'o, comentari i introducci\'o a cura\smartof}
+ {ed.,\addabbrvspace com\adddotspace i intr\adddot\smartof}},
+ byeditorcofo = {{edici\'o, comentari i pr\`oleg a cura\smartof}
+ {ed.,\addabbrvspace com\adddotspace i pr\`ol\adddot\smartof}},
+ byeditorcoaf = {{edici\'o, comentari i ep\'{\i}leg a cura\smartof}%
+ {ed.,\addabbrvspace com\adddotspace i ep\adddot\smartof}},
+ byeditoranin = {{edici\'o, notes i introducci\'o a cura\smartof}%
+ {ed.,\addabbrvspace n\adddotspace i intr\adddot\smartof}},
+ byeditoranfo = {{edici\'o, notes i pr\`oleg a cura\smartof}%
+ {ed.,\addabbrvspace n\adddotspace i pr\`ol\adddot\smartof}},
+ byeditoranaf = {{edici\'o, notes i ep\'{\i}leg a cura\smartof}%
+ {ed.,\addabbrvspace n\adddotspace i ep\adddot\smartof}},
+ byeditortrcoin = {{edici\'o, traducci\'o \lbx@lfromlang, comentari i introducci\'o a cura\smartof}%
+ {ed.,\addabbrvspace trad\adddotspace \lbx@sfromlang, com\adddotspace i intr\adddot\smartof}},
+ byeditortrcofo = {{edici\'o, traducci\'o \lbx@lfromlang, comentari i pr\`oleg a cura\smartof}%
+ {ed.,\addabbrvspace trad\adddotspace \lbx@sfromlang, com\adddotspace i pr\`ol\adddot\smartof}},
+ byeditortrcoaf = {{edici\'o, traducci\'o \lbx@lfromlang, comentari i ep\'{\i}leg a cura\smartof}%
+ {ed.,\addabbrvspace trad\adddot\ \lbx@sfromlang, com\adddot\ i ep\adddot\smartof}},
+ byeditortranin = {{edici\'o, traducci\'o \lbx@lfromlang, notes i introducci\'o a cura\smartof}%
+ {ed.,\addabbrvspace trad\adddot\ \lbx@sfromlang, n\adddot\ i intr\adddot\smartof}},
+ byeditortranfo = {{edici\'o, traducci\'o \lbx@lfromlang, notes i pr\`oleg a cura\smartof}%
+ {ed.,\addabbrvspace trad\adddot\ \lbx@sfromlang, n\adddot\ i pr\`ol\adddot\smartof}},
+ byeditortranaf = {{edici\'o, traducci\'o \lbx@lfromlang, notes i ep\'{\i}leg a cura\smartof}%
+ {ed.,\addabbrvspace trad\adddot\ \lbx@sfromlang, n\adddot\ i ep\adddot\smartof}},
+ bytranslatorco = {{traducci\'o \lbx@lfromlang\ i comentari a cura\smartof}%
+ {trad\adddot\ \lbx@sfromlang\ i com\adddot\smartof}},
+ bytranslatoran = {{traducci\'o \lbx@lfromlang\ i notes a cura\smartof}%
+ {trad\adddot\ \lbx@sfromlang\ i n\adddot\smartof}},
+ bytranslatorin = {{traducci\'o \lbx@lfromlang\ i introducci\'o a cura\smartof}%
+ {trad\adddot\ \lbx@sfromlang\ i intr\adddot\smartof}},
+ bytranslatorfo = {{traducci\'o \lbx@lfromlang\ i pr\`oleg a cura\smartof}%
+ {trad\adddot\ \lbx@sfromlang\ i pr\`ol\adddot\smartof}},
+ bytranslatoraf = {{traducci\'o \lbx@lfromlang\ i ep\'{\i}leg a cura\smartof}%
+ {trad\adddot\ \lbx@sfromlang\ i ep\adddot\smartof}},
+ bytranslatorcoin = {{traducci\'o \lbx@lfromlang, comentari i introducci\'o a cura\smartof}%
+ {trad\adddot\ \lbx@sfromlang, com\adddot\ i intr\adddot\smartof}},
+ bytranslatorcofo = {{traducci\'o \lbx@lfromlang, comentari i pr\`oleg a cura\smartof}%
+ {trad\adddot\ \lbx@sfromlang, com\adddot\ i pr\`ol\adddot\smartof}},
+ bytranslatorcoaf = {{traducci\'o \lbx@lfromlang, comentari i ep\'{\i}leg a cura\smartof}%
+ {trad\adddot\ \lbx@sfromlang, com\adddot\ i ep\adddot\smartof}},
+ bytranslatoranin = {{traducci\'o \lbx@lfromlang, notes i introducci\'o a cura\smartof}%
+ {trad\adddot\ \lbx@sfromlang, n\adddot\ i intr\adddot\smartof}},
+ bytranslatoranfo = {{traducci\'o \lbx@lfromlang, notes i pr\`oleg a cura\smartof}%
+ {trad\adddot\ \lbx@sfromlang, n\adddot\ i pr\`ol\adddot\smartof}},
+ bytranslatoranaf = {{traducci\'o \lbx@lfromlang, notes i ep\'{\i}leg a cura\smartof}%
+ {trad\adddot\ \lbx@sfromlang, n\adddot\ i ep\adddot\smartof}},
+ and = {{i}{i}},
+ andothers = {{et al\adddot}{et al\adddot}},
+ andmore = {{i m\'es}{i m\'es}},
+ volume = {{volum}{vol\adddot}},
+ volumes = {{volums}{vol\adddot}},
+ involumes = {{en}{en}},
+ jourvol = {{volum}{vol\adddot}},
+ jourser = {{s\`erie}{s\`er\adddot}},
+ book = {{llibre}{llib\adddot}},
+ part = {{part}{part}},
+ issue = {{n\'umero}{n\'um\adddot}},
+ newseries = {{s\`erie nova}{s\`erie nova}},
+ oldseries = {{s\`erie antiga}{s\`erie ant\adddot}},
+ edition = {{edici\'o}{ed\adddot}},
+ reprint = {{reimpressi\'o}{reimpr\adddot}},
+ reprintof = {{reimpressi\'o\smartof}{reimpr\adddot\smartof}},
+ reprintas = {{reimpr\`es com}{reimpr\adddotspace com}},
+ reprintfrom = {{reimpr\`es\smartof}{reimpr\adddot\smartof}},
+ reviewof = {{ressenya\smartof}{ress\adddot\smartof}},
+ translationof = {{traducci\'o\smartof}{trad\adddot\smartof}},
+ translationas = {{tradu\"{\i}t com}{trad\adddotspace com}},
+ translationfrom = {{tradu\"{\i}t del}{trad\adddotspace del}}, % Unsure of 'del'
+ origpubas = {{publicat origin\`ariament com}{pub\adddotspace orig\adddotspace com}},
+ origpubin = {{publicat origin\`ariament el}{pub\adddotspace orig\adddotspace el}},
+ astitle = {{com}{com}},
+ bypublisher = {{per}{per}},
+ page = {{p\`agina}{p\`ag\adddot}},
+ pages = {{p\`agines}{p\`ag\adddot}},
+ column = {{columna}{col\adddot}},
+ columns = {{columnes}{cols\adddot}},
+ line = {{l\'{\i}nia}{l\'{\i}n\adddot}},
+ lines = {{l\'{\i}nies}{l\'{\i}n\adddot}},
+ nodate = {{sine data}{s\adddotspace d\adddot}},
+ verse = {{vers}{v\adddot}},
+ verses = {{versos}{v\adddot}},
+ section = {{apartat}{\S}},
+ sections = {{apartats}{\S}},
+ paragraph = {{par\`agraf}{\P}},
+ paragraphs = {{par\`agrafs}{\P}},
+ pagetotal = {{p\`agina}{p\`ag\adddot}},
+ pagetotals = {{p\`agines}{p\`ag\adddot}},
+ columntotal = {{columna}{col\adddot}},
+ columntotals = {{columnes}{col\adddot}},
+ linetotal = {{l\'{\i}nia}{l\'{\i}n\adddot}},
+ linetotals = {{l\'{\i}nies}{l\'{\i}n\adddot}},
+ versetotal = {{vers}{v\adddot}},
+ versetotals = {{versos}{v\adddot}},
+ sectiontotal = {{secci\'o}{\S}},
+ sectiontotals = {{seccions}{\S}},
+ paragraphtotal = {{par\`agrafs}{\P}},
+ paragraphtotals = {{par\`agrafs}{\P}},
+ in = {{a}{a}},
+ inseries = {{a}{a}},
+ ofseries = {{\smartof}{\smartof}},
+ number = {{n\'umero}{n\'um\adddot}},
+ chapter = {{cap\'{\i}tol}{cap\adddot}},
+ bathesis = {{treball final de grau}{treb\adddotspace fin\adddotspace de gr\adddot}},
+ mathesis = {{treball final de m\`aster}{treb\adddotspace fin\adddotspace de m\`ast\adddot}},
+ phdthesis = {{tesi doctoral}{tesi doct\adddot}},
+ candthesis = {{tesi de candidatura}{tesi de cand\adddot}},
+ resreport = {{informe de recerca}{inf\adddotspace de rec\adddot}},
+ techreport = {{informe t\`ecnic}{inf\adddotspace t\`ec\adddot}},
+ software = {{programari}{prog\adddot}},
+ datacd = {{CD de dades}{CD de dades}},
+ audiocd = {{CD d'\`audio}{CD d'\`audio}},
+ version = {{versi\'o}{vers\adddot}},
+ url = {{adre\c{c}a}{adr\adddot}},
+ urlfrom = {{disponible a}{disp\adddotspace a}},
+ urlseen = {{consultat}{cons\adddot}}, % Possibly better «consultat \smartel», but \smartel unavailable
+ inpreparation = {{en preparaci\'o}{en prep\adddot}},
+ inpress = {{a impremta}{a impr\adddot}},% Per revisar
+ prepublished = {{pre-publicat}{pre-publicat}},
+ submitted = {{enviat a publicar}{env\adddotspace a pub\adddot}},
+ forthcoming = {{properament}{prop\adddot}},
+ citedas = {{d'ara endavant citat com}{d'ara end\adddotspace cit\adddotspace com}},
+ thiscite = {{concretament}{concr\adddot}},% Check
+ seenote = {{vegeu la nota}{v\adddotspace la n\adddot}},
+ quotedin = {{citat a}{cit\adddotspace a}},
+ idem = {{\'{\i}dem}{\'{\i}d\adddot}},
+ idemsf = {{\'{\i}dem}{\'{\i}d\adddot}},
+ idemsm = {{\'{\i}dem}{\'{\i}d\adddot}},
+ idemsn = {{\'{\i}dem}{\'{\i}d\adddot}},
+ idempf = {{\'{\i}dem}{\'{\i}d\adddot}},
+ idempm = {{\'{\i}dem}{\'{\i}d\adddot}},
+ idempn = {{\'{\i}dem}{\'{\i}d\adddot}},
+ idempp = {{\'{\i}dem}{\'{\i}d\adddot}},
+ ibidem = {{ib\'{\i}dem}{ib\adddot}},
+ opcit = {{\`op\adddotspace cit\adddot}{\`op\adddotspace cit\adddot}},
+ loccit = {{loc\adddotspace cit\adddot}{loc\adddotspace cit\adddot}},
+ confer = {{cf\adddot}{cf\adddot}},
+ sequens = {{seq\adddot}{seq\adddot}},
+ sequentes = {{et seq\adddot}{et seq\adddot}},
+ passim = {{p\`assim}{p\`assim}},
+ see = {{vegeu}{v\adddot}},
+ seealso = {{vegeu tamb\'e}{v\adddotspace tamb\'e}},
+ backrefpage = {{vegeu la p\`agina}{v\adddotspace la p\`ag\adddot}},
+ backrefpages = {{vegeu les p\`agines}{v\adddotspace les p\`ag\adddot}},
+ january = {{gener}{gen\adddot}},
+ february = {{febrer}{febr\adddot}},
+ march = {{mar\c{c}}{mar\c{c}}},
+ april = {{abril}{abr\adddot}},
+ may = {{maig}{maig}},
+ june = {{juny}{juny}},
+ july = {{juliol}{jul\adddot}},
+ august = {{agost}{ag\adddot}},
+ september = {{setembre}{set\adddot}},
+ october = {{octubre}{oct\adddot}},
+ november = {{novembre}{nov\adddot}},
+ december = {{desembre}{des\adddot}},
+ langamerican = {{angl\`es americ\`a}{angl\adddotspace am\adddot}},
+ langbasque = {{\`euscar}{\`eusc\adddot}},
+ langbrazilian = {{portugu\`es brasiler}{port\adddotspace bras\adddot}},
+ langbulgarian = {{b\'ulgar}{b\'ulg\adddot}},
+ langcatalan = {{catal\`a}{cat\adddot}},
+ langczech = {{txec}{txec}},
+ langcroatian = {{croat}{croat}},
+ langdanish = {{dan\`es}{dan\adddot}},
+ langdutch = {{neerland\`es}{neerl\adddot}},
+ langenglish = {{angl\`es}{angl\adddot}},
+ langestonian = {{estoni\`a}{est\adddot}},
+ langfinnish = {{fin\`es}{fin\adddot}},
+ langfrench = {{franc\`es}{fr\adddot}},
+ langgalician = {{gallec}{gall\adddot}},
+ langgerman = {{alemany}{al\adddot}},
+ langgreek = {{grec}{grec}},
+ langhungarian = {{hongar\`es}{hong\adddot}},
+ langitalian = {{itali\`a}{it\adddot}},
+ langjapanese = {{japon\`es}{jap\adddot}},
+ langlatin = {{llat\'{\i}}{ll\adddot}},
+ langlatvian = {{let\'o}{let\'o}},
+ langlithuanian = {{litu\`a}{lit\adddot}},
+ langmarathi = {{marathi}{mar\adddot}},
+ langnorwegian = {{noruec}{nor\adddot}},
+ langpolish = {{polon\`es}{pol\adddot}},
+ langportuguese = {{portugu\`es}{port\adddot}},
+ langromanian = {{roman\`es}{rom\adddot}},
+ langrussian = {{rus}{rus}},
+ langserbian = {{serbi}{serbi}},
+ langslovak = {{eslovac}{eslovac}},
+ langslovene = {{eslov\`e}{eslov\`e}},
+ langspanish = {{castell\`a}{cast\adddot}},
+ langswedish = {{suec}{suec}},
+ langturkish = {{turc}{turc}},
+ langukrainian = {{ucra\"{\i}n\`es}{ucr\adddot}},
+ fromamerican = {{de l'angl\`es americ\`a}{de l'angl\adddotspace am\adddot}},
+ frombasque = {{de l'\`euscar}{de l'\`eusc\adddot}},
+ frombrazilian = {{del portugu\`es brasiler}{del port\adddotspace bras\adddot}},
+ frombulgarian = {{del b\'ulgar}{del bulg\adddot}},
+ fromcatalan = {{del catal\`a}{del cat\adddot}},
+ fromcroatian = {{del croat}{del croat}},
+ fromczech = {{del txec}{del txec}},
+ fromdanish = {{del dan\`es}{del dan\adddot}},
+ fromdutch = {{del neerland\`es}{del neerl\adddot}},
+ fromenglish = {{de l'angl\`es}{de l'angl\adddot}},
+ fromestonian = {{de l'estoni\`a}{de l'est\adddot}},
+ fromfinnish = {{del fin\`es}{del fin\adddot}},
+ fromfrench = {{del franc\`es}{del fr\adddot}},
+ fromgalician = {{del gallec}{del gall\adddot}},
+ fromgerman = {{de l'alemany}{de l'al\adddot}},
+ fromgreek = {{del grec}{del grec}},
+ fromhungarian = {{de l'hongar\`es}{de l'hong\adddot}},
+ fromitalian = {{de l'itali\`a}{de l'it\adddot}},
+ fromjapanese = {{del japon\`es}{del jap\adddot}},
+ fromlatin = {{del llat\'{\i}}{del ll\adddot}},
+ fromlatvian = {{del let\'o}{del let\'o}},
+ fromlithuanian = {{del litu\`a}{del lit\adddot}},
+ frommarathi = {{del marathi}{del mar\adddot}},
+ fromnorwegian = {{del noruec}{del nor\adddot}},
+ frompolish = {{del polon\`es}{del pol\adddot}},
+ fromportuguese = {{del portugu\`es}{del port\adddot}},
+ fromromanian = {{del roman\`es}{del rom\adddot}},
+ fromrussian = {{del rus}{del rus}},
+ fromserbian = {{del serbi}{del serbi}},
+ fromslovak = {{de l'eslovac}{de l'eslovac}},
+ fromslovene = {{de l'eslov\`e}{de l'eslov\`e}},
+ fromspanish = {{del castell\`a}{del cast\adddot}},
+ fromswedish = {{del suec}{del suec}},
+ fromturkish = {{del turc}{del turc}},
+ fromukrainian = {{de l'ucra\"{\i}n\`es}{de l'ucr\adddot}},
+ countryde = {{Alemanya}{DE}},
+ countryeu = {{Uni\'o Europea}{UE}},
+ countryep = {{Uni\'o Europea}{UE}},
+ countryfr = {{Fran\c{c}a}{FR}},
+ countryuk = {{Regne Unit}{GB}},
+ countryus = {{Estats Units d'Am\`erica}{US}},
+ patent = {{patent}{pat\adddot}},
+ patentde = {{patent alemana}{pat\adddot\ al\adddot}},
+ patenteu = {{patent europea}{pat\adddot\ eur\adddot}},
+ patentfr = {{patent francesa}{pat\adddot\ fr\adddot}},
+ patentuk = {{patent brit\`anica}{pat\adddot\ brit\adddot\adddot}},
+ patentus = {{patent estatunidenca}{pat\adddot\ EUA}},
+ patreq = {{so\l.licitud de patent}{so\l.l\adddotspace de pat\adddot}},
+ patreqde = {{so\l.licitud de patent alemana}{so\l.l\adddotspace de pat\adddot\ al\adddot}},
+ patreqeu = {{so\l.licitud de patent europea}{so\l.l\adddotspace de pat\adddot\ eur\adddot}},
+ patreqfr = {{so\l.licitud de patent francesa}{so\l.l\adddotspace de pat\adddot\ fr\adddot}},
+ patrequk = {{so\l.licitud de patent brit\`anica}{so\l.l\adddotspace de pat\adddot\ brit\adddot}},
+ patrequs = {{so\l.licitud de patent estatunidenca}{so\l.l\adddotspace de pat\adddot\ EUA}},
+ file = {{fitxer}{fitx\adddot}},
+ library = {{biblioteca}{bibl\adddot}},
+ abstract = {{resum}{res\adddot}},
+ annotation = {{nota}{n\adddot}},
+ commonera = {{Era Comuna}{EC}},
+ beforecommonera = {{abans de l'Era Comuna}{AEC}},
+ annodomini = {{despr\'es de Crist}{dC}},
+ beforechrist = {{abans de Crist}{aC}},
+ circa = {{circa}{c\adddot}},
+ spring = {{primavera}{prim\adddot}},
+ summer = {{estiu}{est\adddot}},
+ autumn = {{tardor}{tard\adddot}},
+ winter = {{hivern}{hiv\adddot}},
+% springN = {{}{}},% FIXME: missing
+% summerN = {{}{}},% FIXME: missing
+% autumnN = {{}{}},% FIXME: missing
+% winterN = {{}{}},% FIXME: missing
+% springS = {{}{}},% FIXME: missing
+% summerS = {{}{}},% FIXME: missing
+% autumnS = {{}{}},% FIXME: missing
+% winterS = {{}{}},% FIXME: missing
+% Q1 = {{}{}},% FIXME: missing
+% Q2 = {{}{}},% FIXME: missing
+% Q3 = {{}{}},% FIXME: missing
+% Q4 = {{}{}},% FIXME: missing
+% QD1 = {{}{}},% FIXME: missing
+% QD2 = {{}{}},% FIXME: missing
+% QD3 = {{}{}},% FIXME: missing
+% S1 = {{}{}},% FIXME: missing
+% S2 = {{}{}},% FIXME: missing
+ am = {{a\adddotspace m\adddot}{a\adddotspace m\adddot}},
+ pm = {{p\adddotspace m\adddot}{p\adddotspace m\adddot}},
+}
+
+\begingroup
+\catcode`\&=3
+
+\gdef\lbx@ca@smartof{%
+ \iftoggle{smartof}{\lbx@ca@smartof@i}{\@gobble}}
+
+\protected\long\gdef\lbx@ca@smartof@i#1{%
+ \global\togglefalse{smartof}%
+ \begingroup
+ \def\forceD##1{a\relax}%
+ \def\forceDE##1{x\relax}%
+ \def\do##1{\let##1\@firstofone}%
+ \abx@dosingleaccents
+ \abx@dodoubleaccents
+ \def\i{i}\def\j{j}%
+ \def\AE{a}\def\ae{a}%
+ \def\OE{o}\def\oe{o}%
+ \def\O{o}\def\o{o}%
+ \let\IeC\@firstofone
+ \let\@tabacckludge\@gobble
+ \ifnum\catcode`\"=\active
+ \uccode`\~=`\"
+ \uppercase{\let~\@empty}%
+ \fi
+ \ifnum\catcode`\~=\active
+ \let~\@empty
+ \fi
+ \let\protect\noexpand
+ \edef\lbx@tempa{#1}%
+ \expandafter\futurelet
+ \expandafter\lbx@tempa
+ \expandafter\lbx@ca@smartof@ii
+ \lbx@tempa&}
+
+\gdef\lbx@ca@smartof@ii{%
+ \ifcat\bgroup\noexpand\lbx@tempa
+ \def\lbx@tempa##1{\futurelet\lbx@tempa\lbx@ca@smartof@ii##1}%
+ \else\ifcat\noexpand~\noexpand\lbx@tempa
+ \def\lbx@tempa##1{\futurelet\lbx@tempa\lbx@ca@smartof@ii}%
+ \else
+ \ifnum 0%
+ \if a\noexpand\lbx@tempa 1\fi
+ \if e\noexpand\lbx@tempa 1\fi
+ \if i\noexpand\lbx@tempa 1\fi
+ \if o\noexpand\lbx@tempa 1\fi
+ \if u\noexpand\lbx@tempa 1\fi
+% \if y\noexpand\lbx@tempa 1\fi
+ \if A\noexpand\lbx@tempa 1\fi
+ \if E\noexpand\lbx@tempa 1\fi
+ \if I\noexpand\lbx@tempa 1\fi
+ \if O\noexpand\lbx@tempa 1\fi
+ \if U\noexpand\lbx@tempa 1\fi
+% \if Y\noexpand\lbx@tempa 1\fi
+ >0 %
+ \let\lbx@tempa\lbx@ca@smartof@d
+ \else
+ \ifnum 0%
+ \if h\noexpand\lbx@tempa 1\fi
+ \if H\noexpand\lbx@tempa 1\fi
+ >0 %
+ \def\lbx@tempa##1{\futurelet\lbx@tempa\lbx@ca@smartof@ii}%
+ \else
+ \let\lbx@tempa\lbx@ca@smartof@de
+ \fi\fi\fi\fi
+ \lbx@tempa}
+
+\gdef\lbx@ca@smartof@d#1&{\endgroup d'}
+\gdef\lbx@ca@smartof@de#1&{\endgroup de\space}
+
+\endgroup
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/lbx/croatian-ms.lbx b/macros/latex/contrib/biblatex-ms/latex/lbx/croatian-ms.lbx
new file mode 100644
index 0000000000..41ed9f7c59
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/lbx/croatian-ms.lbx
@@ -0,0 +1,610 @@
+\ProvidesFile{croatian-ms.lbx}
+[\abx@lbxid]
+
+% Translator's note:
+% Many translations have been made gender neutral as there's no intrinsic
+% biblatex support for the opposite. Thus "prijevod i obrada" instead of "prevoditelj/ica i urednik/ca"
+
+
+\DeclareBibliographyExtras{%
+ \protected\def\bibrangedash{\textendash\penalty\hyphenpenalty}%
+ \let\finalandcomma=\empty
+ \let\finalandsemicolon=\empty
+ \protected\def\mkbibordinal#1{\stripzeros{#1}\adddot}%
+ \protected\def\mkbibmascord{\mkbibordinal}%
+ \protected\def\mkbibfemord{\mkbibordinal}%
+ \protected\def\mkbibneutord{\mkbibordinal}%
+ \protected\def\mkbibdatelong#1#2#3{%
+ \iffieldundef{#3}
+ {}
+ {\mkbibordinal{\thefield{#3}}%
+ \iffieldundef{#2}{}{\nobreakspace}}%
+ \iffieldundef{#2}
+ {}
+ {\iffieldundef{#3}
+ {\mkbibmonth{\thefield{#2}}}
+ {\lbx@cr@mkbibmonth{\thefield{#2}}}% "srpanj 2019." or "31. srpnja 2019."
+ \iffieldundef{#1}{}{\space}}%
+ \iffieldbibstring{#1}
+ {\bibstring{\thefield{#1}}}
+ {\dateeraprintpre{#1}\mkbibordinal{\thefield{#1}}}}%
+ \protected\def\mkbibdateshort#1#2#3{%
+ \iffieldundef{#3}
+ {}
+ {\mkbibordinal{\thefield{#3}}%
+ \iffieldundef{#2}{}{\addnbthinspace}}%
+ \iffieldundef{#2}
+ {}
+ {\mkbibordinal{\thefield{#2}}%
+ \iffieldundef{#1}{}{\addnbthinspace}}%
+ \iffieldbibstring{#1}
+ {\bibstring{\thefield{#1}}}
+ {\dateeraprintpre{#1}\mkbibordinal{\thefield{#1}}}}%
+ \savecommand\mkbibordedition
+ \savecommand\mkbibordseries
+ \def\mkbibordedition{\mkbibordinal}%
+ \def\mkbibordseries{\mkbibfemord}%
+ \expandafter\protected\expandafter\def\csname mkbibtime24h\endcsname#1#2#3#4{%
+ \iffieldundef{#1}
+ {}
+ {\mktimezeros{\thefield{#1}}%
+ \iffieldundef{#2}{}{\bibtimesep}}%
+ \iffieldundef{#2}
+ {}
+ {\mktimezeros{\thefield{#2}}%
+ \iffieldundef{#3}{}{\bibtimesep}}%
+ \iffieldundef{#3}
+ {}
+ {\mktimezeros{\thefield{#3}}}%
+ \iffieldundef{#4}{}
+ {\bibtimezonesep
+ \mkbibtimezone{\thefield{#4}}}}%
+ \expandafter\protected\expandafter\def\csname mkbibtime12h\endcsname#1#2#3#4{%
+ \stripzeros{\mktimehh{\thefield{#1}}}\bibtimesep
+ \forcezerosmdt{\thefield{#2}}%
+ \iffieldundef{#3}{}
+ {\bibtimesep
+ \forcezerosmdt{\thefield{#3}}}%
+ \space
+ \ifnumless{\thefield{#1}}{12}
+ {\bibstring{am}}
+ {\bibstring{pm}}%
+ \iffieldundef{#4}{}
+ {\space\bibtimezonesep
+ \parentext{\mkbibtimezone{\thefield{#4}}}}}%
+ \protected\def\mkbibyeardivisiondateshort#1#2{%
+ \mkbibyeardivision{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}%
+ \dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}%
+ \protected\def\mkbibyeardivisiondatelong#1#2{%
+ \mkbibyeardivision{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}%
+ \dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}%
+}
+
+\UndeclareBibliographyExtras{%
+ \restorecommand\mkbibordedition
+ \restorecommand\mkbibordseries
+}
+
+\NewBibliographyString{% Month name variants used after day: "23. studenog 2019." but "studeni 2019."
+ datejanuary,
+ datefebruary,
+ datemarch,
+ dateapril,
+ datemay,
+ datejune,
+ datejuly,
+ dateaugust,
+ dateseptember,
+ dateoctober,
+ datenovember,
+ datedecember%
+}
+
+\DeclareBibliographyStrings{%
+ bibliography = {{Bibliografija}{Bibliografija}},
+ references = {{Literatura}{Literatura}},
+ shorthands = {{Popis kratica}{Kratice}},
+ editor = {{urednik}{ur\adddot}},% gender biased
+ editors = {{urednici}{ur\adddot}},
+ compiler = {{sastavlja\v{c}}{sastavlja\v{c}}},% gender biased
+ compilers = {{sastavlja\v{c}i}{sastavlja\v{c}i}},
+ redactor = {{redaktor}{redaktor}},% gender biased
+ redactors = {{redaktori}{redaktori}},
+ reviser = {{korektor}{korektor}},% gender biased
+ revisers = {{korektori}{korektori}},
+ founder = {{zasniva\v{c}}{zasniva\v{c}}},% gender biased
+ founders = {{zasniva\v{c}i}{zasniva\v{c}i}},
+ continuator = {{nastavlja\v{c}}{nastavlja\v{c}i}},% gender biased
+ continuators = {{nastavlja\v{c}i}{nastavlja\v{c}i}},
+ collaborator = {{suradnik}{sur\adddot}},% gender biased
+ collaborators = {{suradnici}{sur\adddot}},
+ translator = {{prijevod}{prev\adddot}},
+ translators = {{prijevod}{prev\adddot}},
+ commentator = {{komentator}{komentator}},% gender biased
+ commentators = {{komentatori}{komentatori}},
+ annotator = {{autor bilje\v{z}aka}{autor bilje\v{z}aka}},% gender biased
+ annotators = {{autori bilje\v{z}aka}{autori bilje\v{z}aka}},
+ commentary = {{komentar}{komentar}},
+ annotations = {{bilje\v{s}ke}{bilje\v{s}ke}},
+ introduction = {{uvod}{uvod}},
+ foreword = {{predgovor}{predgovor}},
+ afterword = {{pogovor}{pogovor}},
+ editortr = {{prijevod i obrada}{ur\adddotspace i prev\adddot}},
+ editorstr = {{prijevod i obrada}{ur\adddotspace i prev\adddot}},
+ editorco = {{obrada i komentari}% gender neutral
+ {obrada i komentari}},
+ editorsco = {{obrada i komentari}%
+ {obrada i komentari}},
+ editoran = {{obrada i bilje\v{s}ke}%
+ {obrada i bilje\v{s}ke}},
+ editorsan = {{obrada i bilje\v{s}ke}%
+ {obrada i bilje\v{s}ke}},
+ editorin = {{obrada i uvod}%
+ {obrada i uvod}},
+ editorsin = {{obrada i uvod}%
+ {obrada i uvod}},
+ editorfo = {{obrada i predgovor}%
+ {obrada i predgovor}},
+ editorsfo = {{obrada i predgovor}%
+ {obrada i predgovor}},
+ editoraf = {{obrada i pogovor}%
+ {obrada i pogovor}},
+ editorsaf = {{obrada i pogovor}%
+ {obrada i pogovor}},
+ editortrco = {{prijevod, obrada i komentari}%
+ {prijevod, obrada i komentari}},
+ editorstrco = {{prijevod, obrada i komentari}%
+ {prijevod, obrada i komentari}},
+ editortran = {{prijevod, obrada i bilje\v{s}ke}%
+ {prijevod, obrada i bilje\v{s}ke}},
+ editorstran = {{prijevod, obrada i bilje\v{s}ke}%
+ {prijevod, obrada i bilje\v{s}ke}},
+ editortrin = {{prijevod, obrada i uvod}%
+ {prijevod, obrada i uvod}},
+ editorstrin = {{prijevod, obrada i uvod}%
+ {prijevod, obrada i uvod}},
+ editortrfo = {{prijevod, obrada i predgovor}%
+ {prijevod, obrada i predgovor}},
+ editorstrfo = {{prijevod, obrada i predgovor}%
+ {prijevod, obrada i predgovor}},
+ editortraf = {{prijevod, obrada i pogovor}%
+ {prijevod, obrada i pogovor}},
+ editorstraf = {{prijevod, obrada i pogovor}%
+ {prijevod, obrada i pogovor}},
+ editorcoin = {{obrada, uvod i komentari}%
+ {obrada, uvod i komentari}},
+ editorscoin = {{obrada, uvod i komentari}%
+ {obrada, uvod i komentari}},
+ editorcofo = {{obrada, predgovor i komentari}%
+ {obrada, predgovor i komentari}},
+ editorscofo = {{obrada, predgovor i komentari}%
+ {obrada, predgovor i komentari}},
+ editorcoaf = {{obrada, komentari i pogovor}%
+ {obrada, komentari i pogovor}},
+ editorscoaf = {{obrada, komentari i pogovor}%
+ {obrada, komentari i pogovor}},
+ editoranin = {{obrada, uvod i bilje\v{s}ke}%
+ {obrada, uvod i bilje\v{s}ke}},
+ editorsanin = {{obrada, uvod i bilje\v{s}ke}%
+ {obrada, uvod i bilje\v{s}ke}},
+ editoranfo = {{obrada, predgovor i bilje\v{s}ke}%
+ {obrada, predgovor i bilje\v{s}ke}},
+ editorsanfo = {{obrada, predgovor i bilje\v{s}ke}%
+ {obrada, predgovor i bilje\v{s}ke}},
+ editoranaf = {{obrada, bilje\v{s}ke i pogovor}%
+ {obrada, bilje\v{s}ke i pogovor}},
+ editorsanaf = {{obrada, bilje\v{s}ke i pogovor}%
+ {obrada, bilje\v{s}ke i pogovor}},
+ editortrcoin = {{prijevod, obrada, uvod i komentari}%
+ {prijevod, obrada, uvod i komentari}},
+ editorstrcoin = {{prijevod, obrada, uvod i komentari}%
+ {prijevod, obrada, uvod i komentari}},
+ editortrcofo = {{prijevod, obrada, predgovor i komentari}%
+ {prijevod, obrada, predgovor i komentari}},
+ editorstrcofo = {{prijevod, obrada, predgovor i komentari}%
+ {prijevod, obrada, predgovor i komentari}},
+ editortrcoaf = {{prijevod, obrada, komentari i pogovor}%
+ {prijevod, obrada, komentari i pogovor}},
+ editorstrcoaf = {{prijevod, obrada, komentari i pogovor}%
+ {prijevod, obrada, komentari i pogovor}},
+ editortranin = {{prijevod, obrada, uvod i bilje\v{s}ke}%
+ {prijevod, obrada, uvod i bilje\v{s}ke}},
+ editorstranin = {{prijevod, obrada, uvod i bilje\v{s}ke}%
+ {prijevod, obrada, uvod i bilje\v{s}ke}},
+ editortranfo = {{prijevod, obrada, predgovor i bilje\v{s}ke}%
+ {prijevod, obrada, predgovor i bilje\v{s}ke}},
+ editorstranfo = {{prijevod, obrada, predgovor i bilje\v{s}ke}%
+ {prijevod, obrada, predgovor i bilje\v{s}ke}},
+ editortranaf = {{prijevod, obrada, bilje\v{s}ke i pogovor}%
+ {prijevod, obrada, bilje\v{s}ke i pogovor}},
+ editorstranaf = {{prijevod, obrada, bilje\v{s}ke i pogovor}%
+ {prijevod, obrada, bilje\v{s}ke i pogovor}},
+ translatorco = {{prijevod i komentari}%
+ {prijevod i komentari}},
+ translatorsco = {{prijevod i komentari}%
+ {prijevod i komentari}},
+ translatoran = {{prijevod i bilje\v{s}ke}%
+ {prijevod i bilje\v{s}ke}},
+ translatorsan = {{prijevod i bilje\v{s}ke}%
+ {prijevod i bilje\v{s}ke}},
+ translatorin = {{prijevod i uvod}%
+ {prijevod i uvod}},
+ translatorsin = {{prijevod i uvod}%
+ {prijevod i uvod}},
+ translatorfo = {{prijevod i predgovor}%
+ {prijevod i predgovor}},
+ translatorsfo = {{prijevod i predgovor}%
+ {prijevod i predgovor}},
+ translatoraf = {{prijevod i pogovor}%
+ {prijevod i pogovor}},
+ translatorsaf = {{prijevod i pogovor}%
+ {prijevod i pogovor}},
+ translatorcoin = {{prijevod, uvod i komentari}%
+ {prijevod, uvod i komentari}},
+ translatorscoin = {{prijevod, uvod i komentari}%
+ {prijevod, uvod i komentari}},
+ translatorcofo = {{prijevod, predgovor i komentari}%
+ {prijevod, predgovor i komentari}},
+ translatorscofo = {{prijevod, predgovor i komentari}%
+ {prijevod, predgovor i komentari}},
+ translatorcoaf = {{prijevod, komentari i pogovor}%
+ {prijevod, komentari i pogovor}},
+ translatorscoaf = {{prijevod, komentari i pogovor}%
+ {prijevod, komentari i pogovor}},
+ translatoranin = {{prijevod, uvod i bilje\v{s}ke}%
+ {prijevod, uvod i bilje\v{s}ke}},
+ translatorsanin = {{prijevod, uvod i bilje\v{s}ke}%
+ {prijevod, uvod i bilje\v{s}ke}},
+ translatoranfo = {{prijevod, predgovor i bilje\v{s}ke}%
+ {prijevod, predgovor i bilje\v{s}ke}},
+ translatorsanfo = {{prijevod, predgovor i bilje\v{s}ke}%
+ {prijevod, predgovor i bilje\v{s}ke}},
+ translatoranaf = {{prijevod, bilje\v{s}ke i pogovor}%
+ {prijevod, bilje\v{s}ke i pogovor}},
+ translatorsanaf = {{prijevod, bilje\v{s}ke i pogovor}%
+ {prijevod, bilje\v{s}ke i pogovor}},
+ organizer = {{organizacija}{organizacija}},
+ organizers = {{organizacija}{organizacija}},
+ byorganizer = {{organizacija}{organizacija}},
+ byauthor = {{autor}{autor}},% gender biased
+ byeditor = {{obrada}{ur\adddot}},%
+ bycompiler = {{sastavlja\v{c}}{sast\adddot}},% gender biased
+ byredactor = {{redaktura}{red\adddot}},
+ byreviser = {{korektura}{kor\adddot}},
+ byreviewer = {{recenzija}{recenzija}},
+ byfounder = {{zapo\v{c}eo}{zapo\v{c}eo}},% gender biased
+ bycontinuator = {{nastavio}{nastavio}},% gender biased
+ bycollaborator = {{u suradnji s}{u sur\adddotspace s}},
+ bytranslator = {{prijevod \lbx@lfromlang}%
+ {prijevod \lbx@sfromlang}},
+ bycommentator = {{komentari}{komentari}},
+ byannotator = {{bilje\v{s}ke}{bilje\v{s}ke}},
+ withcommentator = {{komentari}{komentari}},
+ withannotator = {{bilje\v{s}ke}{bilje\v{s}ke}},
+ withintroduction = {{uvod}{uvod}},
+ withforeword = {{predgovor}{predgovor}},
+ withafterword = {{pogovor}{pogovor}},
+ byeditortr = {{prijevod \lbx@lfromlang\ i obrada}%
+ {prijevod \lbx@lfromlang\ i obrada}},
+ byeditorco = {{obrada i komentari}%
+ {obrada i komentari}},
+ byeditoran = {{obrada i bilje\v{s}ke}%
+ {obrada i bilje\v{s}ke}},
+ byeditorin = {{obrada i uvod}%
+ {obrada i uvod}},
+ byeditorfo = {{obrada i predgovor}%
+ {obrada i predgovor}},
+ byeditoraf = {{obrada i pogovor}%
+ {obrada i pogovor}},
+ byeditortrco = {{prijevod \lbx@lfromlang, obrada i komentari}%
+ {prijevod \lbx@lfromlang, obrada i komentari}},
+ byeditortran = {{prijevod \lbx@lfromlang, obrada i bilje\v{s}ke}%
+ {prijevod \lbx@lfromlang, obrada i bilje\v{s}ke}},
+ byeditortrin = {{prijevod \lbx@lfromlang, obrada i uvod}%
+ {prijevod \lbx@lfromlang, obrada i uvod}},
+ byeditortrfo = {{prijevod \lbx@lfromlang, obrada i predgovor}%
+ {prijevod \lbx@lfromlang, obrada i predgovor}},
+ byeditortraf = {{prijevod \lbx@lfromlang, obrada i pogovor}%
+ {prijevod \lbx@lfromlang, obrada i pogovor}},
+ byeditorcoin = {{obrada, uvod i komentari}%
+ {obrada, uvod i komentari}},
+ byeditorcofo = {{obrada, predgovor i komentari}%
+ {obrada, predgovor i komentari}},
+ byeditorcoaf = {{obrada, komentari i pogovor}%
+ {obrada, komentari i pogovor}},
+ byeditoranin = {{obrada, uvod i bilje\v{s}ke}%
+ {obrada, uvod i bilje\v{s}ke}},
+ byeditoranfo = {{obrada, predgovor i bilje\v{s}ke}%
+ {obrada, predgovor i bilje\v{s}ke}},
+ byeditoranaf = {{obrada, bilje\v{s}ke i pogovor}%
+ {obrada, bilje\v{s}ke i pogovor}},
+ byeditortrcoin = {{prijevod \lbx@lfromlang, obrada, uvod i komentari}%
+ {prijevod \lbx@lfromlang, obrada, uvod i komentari}},
+ byeditortrcofo = {{prijevod \lbx@lfromlang, obrada, predgovor i komentari}%
+ {prijevod \lbx@lfromlang, obrada, predgovor i komentari}},
+ byeditortrcoaf = {{prijevod \lbx@lfromlang, obrada, komentari i pogovor}%
+ {prijevod \lbx@lfromlang, obrada, komentari i pogovor}},
+ byeditortranin = {{prijevod \lbx@lfromlang, obrada, uvod i bilje\v{s}ke}%
+ {prijevod \lbx@lfromlang, obrada, uvod i bilje\v{s}ke}},
+ byeditortranfo = {{prijevod \lbx@lfromlang, obrada, predgovor i bilje\v{s}ke}%
+ {prijevod \lbx@lfromlang, obrada, predgovor i bilje\v{s}ke}},
+ byeditortranaf = {{prijevod \lbx@lfromlang, obrada, bilje\v{s}ke i pogovor}%
+ {prijevod \lbx@lfromlang, obrada, bilje\v{s}ke i pogovor}},
+ bytranslatorco = {{prijevod \lbx@lfromlang\ i komentari}%
+ {prijevod \lbx@lfromlang\ i komentari}},
+ bytranslatoran = {{prijevod \lbx@lfromlang\ i bilje\v{s}ke}%
+ {prijevod \lbx@lfromlang\ i bilje\v{s}ke}},
+ bytranslatorin = {{prijevod \lbx@lfromlang\ i uvod}%
+ {prijevod \lbx@lfromlang\ i uvod}},
+ bytranslatorfo = {{prijevod \lbx@lfromlang\ i predgovor}%
+ {prijevod \lbx@lfromlang\ i predgovor}},
+ bytranslatoraf = {{prijevod \lbx@lfromlang\ i pogovor}%
+ {prijevod \lbx@lfromlang\ i pogovor}},
+ bytranslatorcoin = {{prijevod \lbx@lfromlang, uvod i komentari}%
+ {prijevod \lbx@lfromlang, uvod i komentari}},
+ bytranslatorcofo = {{prijevod \lbx@lfromlang, predgovor i komentari}%
+ {prijevod \lbx@lfromlang, predgovor i komentari}},
+ bytranslatorcoaf = {{prijevod \lbx@lfromlang, komentari i pogovor}%
+ {prijevod \lbx@lfromlang, komentari i pogovor}},
+ bytranslatoranin = {{prijevod \lbx@lfromlang, uvod i bilje\v{s}ke}%
+ {prijevod \lbx@lfromlang, uvod i bilje\v{s}ke}},
+ bytranslatoranfo = {{prijevod \lbx@lfromlang, predgovor i bilje\v{s}ke}%
+ {prijevod \lbx@lfromlang, predgovor i bilje\v{s}ke}},
+ bytranslatoranaf = {{prijevod \lbx@lfromlang, bilje\v{s}ke i pogovor}%
+ {prijevod \lbx@lfromlang, bilje\v{s}ke i pogovor}},
+ and = {{i}{i}},
+ andothers = {{i drugi}{i dr\adddot}},
+ andmore = {{i drugi}{i dr\adddot}},
+ volume = {{sv\adddot}{sv\adddot}},
+ volumes = {{sv\adddot}{sv\adddot}},% translator: 1 svezak, 2 sveska, 5 svezaka, 21 svezak
+ involumes = {{u}{u}},
+ jourvol = {{sv\adddot}{sv\adddot}},
+ jourser = {{serija}{serija}},
+ book = {{knjiga}{knj\adddot}},
+ part = {{dio}{dio}},
+ issue = {{izd\adddot}{izd\adddot}},
+ newseries = {{nova serija}{nova serija}},
+ oldseries = {{stara serija}{stara serija}},
+ edition = {{izdanje}{izdanje}},
+ reprint = {{pretisak}{pretisak}},
+ reprintof = {{pretisak}{pretisak}},
+ reprintas = {{iznova otisnuto kao}{iznova otisnuto kao}},
+ reprintfrom = {{iznova otisnut}{iznova otisnut}},
+ translationof = {{prijevod}{prijevod}},
+ translationas = {{prev\adddotspace kao}{prev\adddotspace kao}},
+ translationfrom = {{prijevod}{prijevod}},
+ reviewof = {{osvrt na}{osvrt na}},
+ origpubas = {{izvorno obj\adddotspace kao}{izv\adddotspace obj\adddotspace kao}},% gender neutral
+ origpubin = {{izvorno obj\adddot}{izv\adddotspace obj\adddot}},% gender neutral
+ astitle = {{kao}{kao}},
+ bypublisher = {{}{}},% translator: leave empty
+ nodate = {{bez datuma}{bez datuma}},
+ page = {{stranica}{str\adddot}},
+ pages = {{stranice}{str\adddot}},
+ column = {{stupac}{stupac}},
+ columns = {{stupci}{stupci}},
+ line = {{linija}{l\adddot}},
+ lines = {{linije}{ll\adddot}},
+ verse = {{stih}{stih}},
+ verses = {{stihovi}{stihovi}},
+ section = {{odjeljak}{\S}},
+ sections = {{odjeljci}{\S\S}},
+ paragraph = {{stavak}{st\adddot}},
+ paragraphs = {{stavci}{st\adddot}},
+ pagetotal = {{str\adddot}{str\adddot}},
+ pagetotals = {{str\adddot}{str\adddot}},
+ columntotal = {{stupac}{stupac}},
+ columntotals = {{stupaca}{stupaca}},% translator: 1 stupac, 2 stupca, 5 stupaca (?!)
+ linetotal = {{linija}{lin\adddot}},
+ linetotals = {{linija}{lin\adddot}},
+ versetotal = {{stih}{st\adddot}},
+ versetotals = {{stihova}{st\adddot}},
+ sectiontotal = {{odjeljak}{odj\adddot}},
+ sectiontotals = {{odjeljaka}{odj\adddot}},
+ paragraphtotal = {{stavak}{st\adddot}},
+ paragraphtotals = {{stavaka}{st\adddot}},
+ in = {{}{}},% translator: leave empty, do not begin sentences with "U:"
+ inseries = {{u seriji}{u seriji}},
+ ofseries = {{iz serije}{iz serije}},
+ number = {{broj}{br\adddot}},
+ chapter = {{poglavlje}{pogl\adddot}},
+ bathesis = {{diplomski rad}{dipl\adddotspace rad}},
+ mathesis = {{magistarski rad}{mag\adddotspace rad}},
+ phdthesis = {{doktorska disertacija}{disertacija}},
+ candthesis = {{zavr\v{s}ni rad}{zavr\adddotspace rad}},
+ resreport = {{znanstveno izvje\v{s}\'{c}e}{zn\adddotspace izv\adddot}},
+ techreport = {{tehni\v{c}ko izvje\v{s}\'{c}e}{teh\adddotspace izv\adddot}},
+ software = {{softver}{softver}},
+ datacd = {{CD-ROM}{CD-ROM}},
+ audiocd = {{audio CD}{audio CD}},
+ version = {{verzija}{verzija}},
+ url = {{adresa}{adresa}},
+ urlfrom = {{dostupno na}{dost\adddotspace na}},
+ urlseen = {{pogledano}{pogledano}},
+ inpreparation = {{u pripremi}{u pripremi}},
+ submitted = {{predan}{predan}},
+ forthcoming = {{prihva\'{c}en}{prihv\adddot}},
+ inpress = {{u tisku}{u tisku}},
+ prepublished = {{pred objavom}{pred obj\adddot}},
+ citedas = {{dalje citirano kao}{dalje citirano kao}},
+ thiscite = {{napose}{napose}},
+ seenote = {{vidi bilje\v{s}ku}{v\adddotspace bilj\adddot}},
+ quotedin = {{citirano u}{citirano u}},
+ idem = {{idem}{idem}},
+ idemsm = {{idem}{idem}},
+ idemsf = {{eadem}{eadem}},
+ idemsn = {{idem}{idem}},
+ idempm = {{eidem}{eidem}},
+ idempf = {{eaedem}{eaedem}},
+ idempn = {{eadem}{eadem}},
+ idempp = {{eidem}{eidem}},
+ ibidem = {{ibidem}{ibid\adddot}},
+ opcit = {{op\adddotspace cit\adddot}{op\adddotspace cit\adddot}},
+ loccit = {{loc\adddotspace cit\adddot}{loc\adddotspace cit\adddot}},
+ confer = {{usporedi}{usp\adddot}},
+ sequens = {{sq\adddot}{sq\adddot}},
+ sequentes = {{sqq\adddot}{sqq\adddot}},
+ passim = {{passim}{pass\adddot}},
+ see = {{vidi}{v\adddot}},
+ seealso = {{pogledaj i}{pogl\adddotspace i}},
+ backrefpage = {{citirano na stranci}{cit\adddotspace na str\adddot}},
+ backrefpages = {{cited on pages}{cit\adddotspace na str\adddot}},
+ january = {{sije\v{c}anj}{sije\v{c}anj}},
+ february = {{velja\v{c}a}{velja\v{c}a}},
+ march = {{o\v{z}ujak}{o\v{z}ujak}},
+ april = {{travanj}{travanj}},
+ may = {{svibanj}{svibanj}},
+ june = {{lipanj}{lipanj}},
+ july = {{srpanj}{srpanj}},
+ august = {{kolovoz}{kolovoz}},
+ september = {{rujan}{rujan}},
+ october = {{listopad}{listopad}},
+ november = {{studeni}{studeni}},
+ december = {{prosinac}{prosinac}},
+ datejanuary = {{sije\v{c}nja}{sije\v{c}nja}},
+ datefebruary = {{velja\v{c}e}{velja\v{c}e}},
+ datemarch = {{o\v{z}ujka}{o\v{z}ujka}},
+ dateapril = {{travnja}{travnja}},
+ datemay = {{svibnja}{svibnja}},
+ datejune = {{lipnja}{lipnja}},
+ datejuly = {{srpnja}{srpnja}},
+ dateaugust = {{kolovoza}{kolovoza}},
+ dateseptember = {{rujna}{rujna}},
+ dateoctober = {{listopada}{listopada}},
+ datenovember = {{studenoga}{studenoga}},
+ datedecember = {{prosinca}{prosinca}},
+ langamerican = {{engleski}{engleski}},
+ langbrazilian = {{portugalski}{portugalski}},
+ langbulgarian = {{bugarski}{bugarski}},
+ langcatalan = {{katalonski}{katalonski}},
+ langcroatian = {{hrvatski}{hrvatski}},
+ langczech = {{\v{c}e\v{s}ki}{\v{c}e\v{s}ki}},
+ langdanish = {{danski}{danski}},
+ langdutch = {{nizozemski}{nizozemski}},
+ langenglish = {{engleski}{engleski}},
+ langestonian = {{estonski}{estonski}},
+ langfinnish = {{finski}{finski}},
+ langfrench = {{francuski}{francuski}},
+ langgalician = {{galicijski}{galicijski}},
+ langgerman = {{njema\v{c}ki}{njema\v{c}ki}},
+ langgreek = {{gr\v{c}ki}{gr\v{c}ki}},
+ langhungarian = {{ma\dj arski}{ma\dj arski}},
+ langitalian = {{talijanski}{talijanski}},
+ langjapanese = {{japanski}{japanski}},
+ langlatin = {{latinski}{latinski}},
+ langlatvian = {{letonski}{letonski}},
+ langnorwegian = {{norve\v{s}ki}{norve\v{s}ki}},
+ langpolish = {{poljski}{poljski}},
+ langportuguese = {{portugalski}{portugalski}},
+ langrussian = {{ruski}{ruski}},
+ langslovak = {{slova\v{c}ki}{slova\v{c}ki}},
+ langslovene = {{slovenski}{slovenski}},
+ langspanish = {{\v{s}panjolski}{\v{s}panjolski}},
+ langswedish = {{\v{s}vedski}{\v{s}vedski}},
+ langukrainian = {{ukrajinski}{ukrajinski}},
+ fromamerican = {{s engleskog}{s engleskog}},
+ frombrazilian = {{s portugalskog}{s portugalskog}},
+ frombulgarian = {{s bugarskog}{s bugarskog}},
+ fromcatalan = {{s katalonskog}{s katalonskog}},
+ fromcroatian = {{s hrvatskog}{s hrvatskog}},
+ fromczech = {{s \v{c}e\v{s}kog}{s \v{c}e\v{s}kog}},
+ fromdanish = {{s danskog}{s danskog}},
+ fromdutch = {{s nizozemskog}{s nizozemskog}},
+ fromenglish = {{s engleskog}{s engleskog}},
+ fromestonian = {{s estonskog}{s estonskog}},
+ fromfinnish = {{s finskog}{s finskog}},
+ fromfrench = {{s francuskog}{s francuskog}},
+ fromgalician = {{s galicijskog}{s galicijskog}},
+ fromgerman = {{s njema\v{c}kog}{s njema\v{c}kog}},
+ fromgreek = {{s gr\v{c}kog}{s gr\v{c}kog}},
+ fromhungarian = {{s ma\dj arskog}{s ma\dj arskog}},
+ fromitalian = {{s talijanskog}{s talijanskog}},
+ fromjapanese = {{s japanskog}{s japanskog}},
+ fromlatin = {{s latinskog}{s latinskog}},
+ fromlatvian = {{s letonskog}{s letonskog}},
+ fromnorwegian = {{s norve\v{s}kog}{s norve\v{s}kog}},
+ frompolish = {{s poljskog}{s poljskog}},
+ fromportuguese = {{s portugalskog}{s portugalskog}},
+ fromrussian = {{s ruskog}{s ruskog}},
+ fromslovak = {{sa slova\v{c}kog}{sa slova\v{c}kog}},
+ fromslovene = {{sa slovenskog}{sa slovenskog}},
+ fromspanish = {{sa \v{s}panjolskog}{sa \v{s}panjolskog}},
+ fromswedish = {{sa \v{s}vedskog}{sa \v{s}vedskog}},
+ fromukrainian = {{s ukrajinskog}{s ukrajinskog}},
+ countryde = {{Njema\v{c}ka}{DE}},
+ countryeu = {{Europska unija}{EU}},
+ countryep = {{Europska unija}{EP}},
+ countryfr = {{Francuska}{FR}},
+ countryuk = {{Velika Britanija}{GB}},
+ countryus = {{Sjedinjene Ameri\v{c}ke Dr\v{z}ave}{US}},
+ patent = {{patent}{pat\adddot}},
+ patentde = {{njema\v{c}ki patent}{njema\v{c}ki pat\adddot}},
+ patenteu = {{europski patent}{europski pat\adddot}},
+ patentfr = {{francuski patent}{francuski pat\adddot}},
+ patentuk = {{britanski patent}{britanski pat\adddot}},
+ patentus = {{US patent}{US pat\adddot}},
+ patreq = {{patentni zahtjev}{pat\adddot\ zahtjev}},
+ patreqde = {{njema\v{c}ki patentni zahtjev}%
+ {njem\adddotspace pat\adddotspace zahtjev}},
+ patreqeu = {{europski patentni zahtjev}{EU pat\adddotspace zahtjev}},
+ patreqfr = {{francuski patentni zahtjev}%
+ {franc\adddotspace pat\adddotspace zahtjev}},
+ patrequk = {{britanskipatentni zahtjev}%
+ {britanski pat\adddotspace zahtjev}},
+ patrequs = {{US patentni zahtjev}{US pat\adddot\ zahtjev}},
+ file = {{datoteka}{datoteka}},
+ library = {{biblioteka}{biblioteka}},
+ abstract = {{sa\v{z}etak}{sa\v{z}etak}},
+ annotation = {{bilje\v{s}ka}{bilje\v{s}ka}},
+ commonera = {{n\adddotspace e\adddot}{n\adddotspace e\adddot}},
+ beforecommonera = {{pr\adddotspace n\adddotspace e\adddot}{pr\adddotspace n\adddotspace e\adddot}},
+ annodomini = {{poslije Krista}{p\adddotspace Kr\adddot}},
+ beforechrist = {{prije Krista}{pr\adddotspace Kr\adddot}},
+ circa = {{oko}{cca\adddot}},
+ spring = {{prolje\'{c}e}{prolje\'{c}e}},
+ summer = {{ljeto}{ljeto}},
+ autumn = {{jesen}{jesen}},
+ winter = {{zima}{zima}},
+% springN = {{}{}},% FIXME: missing
+% summerN = {{}{}},% FIXME: missing
+% autumnN = {{}{}},% FIXME: missing
+% winterN = {{}{}},% FIXME: missing
+% springS = {{}{}},% FIXME: missing
+% summerS = {{}{}},% FIXME: missing
+% autumnS = {{}{}},% FIXME: missing
+% winterS = {{}{}},% FIXME: missing
+% Q1 = {{}{}},% FIXME: missing
+% Q2 = {{}{}},% FIXME: missing
+% Q3 = {{}{}},% FIXME: missing
+% Q4 = {{}{}},% FIXME: missing
+% QD1 = {{}{}},% FIXME: missing
+% QD2 = {{}{}},% FIXME: missing
+% QD3 = {{}{}},% FIXME: missing
+% S1 = {{}{}},% FIXME: missing
+% S2 = {{}{}},% FIXME: missing
+ am = {{prije podne}{AM}},
+ pm = {{poslije podne}{PM}},
+}
+
+\protected\gdef\lbx@cr@mkbibmonth#1{%
+ \ifcase0#1\relax
+ #1\BibliographyWarning{Month out of range}%
+ \or\abx@bibmonth{datejanuary}%
+ \or\abx@bibmonth{datefebruary}%
+ \or\abx@bibmonth{datemarch}%
+ \or\abx@bibmonth{dateapril}%
+ \or\abx@bibmonth{datemay}%
+ \or\abx@bibmonth{datejune}%
+ \or\abx@bibmonth{datejuly}%
+ \or\abx@bibmonth{dateaugust}%
+ \or\abx@bibmonth{dateseptember}%
+ \or\abx@bibmonth{dateoctober}%
+ \or\abx@bibmonth{datenovember}%
+ \or\abx@bibmonth{datedecember}%
+ \else
+ #1\BibliographyWarning{Month out of range}%
+ \fi}%
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/lbx/czech-ms.lbx b/macros/latex/contrib/biblatex-ms/latex/lbx/czech-ms.lbx
new file mode 100644
index 0000000000..f91ae66478
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/lbx/czech-ms.lbx
@@ -0,0 +1,553 @@
+\ProvidesFile{czech-ms.lbx}
+[\abx@lbxid]
+
+\DeclareBibliographyExtras{%
+ \DeclareCapitalPunctuation{.!?}%
+ \protected\def\bibrangedash{%
+ \textendash\penalty\hyphenpenalty}% breakable dash
+ \let\finalandcomma=\empty
+ \let\finalandsemicolon=\empty
+ \protected\def\mkbibordinal#1{\stripzeros{#1}\adddot}%
+ \protected\def\mkbibmascord{\mkbibordinal}%
+ \protected\def\mkbibfemord{\mkbibordinal}%
+ \protected\def\mkbibneutord{\mkbibordinal}%
+ \protected\def\mkbibdatelong#1#2#3{%
+ \iffieldundef{#3}
+ {}
+ {\mkbibordinal{\thefield{#3}}%
+ \iffieldundef{#2}{}{\thinspace}}%
+ \iffieldundef{#2}
+ {}
+ {\mkbibmonth{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}}%
+ \iffieldbibstring{#1}
+ {\bibstring{\thefield{#1}}}
+ {\dateeraprintpre{#1}\stripzeros{\thefield{#1}}}}%
+ \protected\def\mkbibdateshort#1#2#3{%
+ \iffieldundef{#3}
+ {}
+ {\mkdayzeros{\thefield{#3}}\adddot
+ \iffieldundef{#2}{}{\thinspace}}%
+ \iffieldundef{#2}
+ {}
+ {\mkmonthzeros{\thefield{#2}}%
+ \iffieldundef{#1}
+ {}
+ {\iffieldundef{#3}{/}{\adddot\thinspace}}}%
+ \iffieldbibstring{#1}
+ {\bibstring{\thefield{#1}}}
+ {\dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}}%
+ \expandafter\protected\expandafter\def\csname mkbibtime24h\endcsname#1#2#3#4{%
+ \iffieldundef{#1}
+ {}
+ {\mktimezeros{\thefield{#1}}%
+ \iffieldundef{#2}{}{\bibtimesep}}%
+ \iffieldundef{#2}
+ {}
+ {\mktimezeros{\thefield{#2}}%
+ \iffieldundef{#3}{}{\bibtimesep}}%
+ \iffieldundef{#3}
+ {}
+ {\mktimezeros{\thefield{#3}}}%
+ \iffieldundef{#4}{}
+ {\bibtimezonesep
+ \mkbibtimezone{\thefield{#4}}}}%
+ \expandafter\protected\expandafter\def\csname mkbibtime12h\endcsname#1#2#3#4{%
+ \stripzeros{\mktimehh{\thefield{#1}}}\bibtimesep
+ \forcezerosmdt{\thefield{#2}}%
+ \iffieldundef{#3}{}
+ {\bibtimesep
+ \forcezerosmdt{\thefield{#3}}}%
+ \space
+ \ifnumless{\thefield{#1}}{12}
+ {\bibstring{am}}
+ {\bibstring{pm}}%
+ \iffieldundef{#4}{}
+ {\space\bibtimezonesep
+ \parentext{\mkbibtimezone{\thefield{#4}}}}}%
+ \protected\def\mkbibyeardivisiondateshort#1#2{%
+ \mkbibyeardivision{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}%
+ \dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}%
+ \protected\def\mkbibyeardivisiondatelong#1#2{%
+ \mkbibyeardivision{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}%
+ \dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}%
+}
+
+\DeclareBibliographyStrings{%
+ bibliography = {{Bibliografie}{Bibliografie}},
+ references = {{Odkazy}{Odkazy}},
+ shorthands = {{Seznam zkratek}{Zkratky}},
+ editor = {{editor}{ed\adddot}},
+ editors = {{edito\v{r}i}{ed\adddot}},
+ compiler = {{sestavil}{sest\adddot}},
+ compilers = {{sestavili}{sest\adddot}},
+ redactor = {{redaktor}{red\adddot}},
+ redactors = {{redakto\v{r}i}{red\adddot}},
+ reviser = {{korektor}{kor\adddot}},
+ revisers = {{korekto\v{r}i}{kor\adddot}},
+ founder = {{zakladatel}{zakl\adddot}},
+ founders = {{zakladatel\'{e}}{zakl\adddot}},
+ continuator = {{pokra\v{c}ovatel}{pokr\adddot}},% FIXME: unsure
+ continuators = {{pokra\v{c}ovatel\'{e}}{pokr\adddot}},% FIXME: unsure
+ collaborator = {{spolupracovn\'{\i}k}{spoluprac\adddot}},% FIXME: unsure
+ collaborators = {{spolupracovn\'{\i}ci}{spoluprac\adddot}},% FIXME: unsure
+ translator = {{p\v{r}ekladatel}{p\v{r}ekl\adddot}},
+ translators = {{p\v{r}ekladatel\'{e}}{p\v{r}ekl\adddot}},
+ commentator = {{koment\'{a}tor}{kom\adddot}},
+ commentators = {{koment\'{a}to\v{r}i}{kom\adddot}},
+ annotator = {{anot\'{a}tor}{anot\adddot}},
+ annotators = {{anot\'{a}to\v{r}i}{anot\adddot}},
+ commentary = {{koment\'{a}\v{r}}{kom\adddot}},
+ annotations = {{anotace}{anot\adddot}},
+ introduction = {{\'{u}vod}{\'{u}v\adddot}},
+ foreword = {{p\v{r}edmluva}{p\v{r}edml\adddot}},
+ afterword = {{doslov}{dosl\adddot}},
+ editortr = {{editor a p\v{r}ekladatel}%
+ {ed\adddotspace a p\v{r}ekl\adddot}},
+ editorstr = {{edito\v{r}i a p\v{r}ekladatel\'{e}}%
+ {ed\adddotspace a p\v{r}ekl\adddot}},
+ editorco = {{editor a koment\'{a}tor}%
+ {ed\adddotspace a kom\adddot}},
+ editorsco = {{editor a koment\'{a}to\v{r}i}%
+ {ed\adddotspace a kom\adddot}},
+ editoran = {{editor a anot\'{a}tor}%
+ {ed\adddotspace a anot\adddot}},
+ editorsan = {{editor a anot\'{a}to\v{r}i}%
+ {ed\adddotspace a anot\adddot}},
+ editorin = {{editor a \'{u}vod}%
+ {ed\adddotspace a \'{u}v\adddot}},
+ editorsin = {{edito\v{r}i a \'{u}vod}%
+ {ed\adddotspace a \'{u}v\adddot}},
+ editorfo = {{editor a p\v{r}edmluva}%
+ {ed\adddotspace a p\v{r}edml\adddot}},
+ editorsfo = {{edito\v{r}i a p\v{r}edmluva}%
+ {ed\adddotspace a p\v{r}edml\adddot}},
+ editoraf = {{editor a doslov}%
+ {ed\adddotspace a dosl\adddot}},
+ editorsaf = {{edito\v{r}i a doslov}%
+ {ed\adddotspace a dosl\adddot}},
+ editortrco = {{editor, p\v{r}eklad\ a koment\'{a}tor}%
+ {ed.,\addabbrvspace p\v{r}ekl\adddot\ a kom\adddot}},% FIXME: hruznost
+ editorstrco = {{edito\v{r}i, p\v{r}ekladatel\'{e}\ a koment\'{a}to\v{r}i}%
+ {ed.,\addabbrvspace p\v{r}ekl\adddot\ a kom\adddot}},
+ editortran = {{editor, p\v{r}ekladatel\ a anot\'{a}tor}%
+ {ed.,\addabbrvspace p\v{r}ekl\adddot\ a anot\adddot}},
+ editorstran = {{edito\v{r}i, p\v{r}ekladatel\'{e}\ a anot\'{a}to\v{r}i}%
+ {ed.,\addabbrvspace p\v{r}ekl\adddot\ a anot\adddot}},
+ editortrin = {{editor, p\v{r}ekladatel\ a \'{u}vod}%
+ {ed.,\addabbrvspace p\v{r}ekl\adddot\ a \'{u}v\adddot}},
+ editorstrin = {{edito\v{r}i, p\v{r}ekladatel\'{e}\ a \'{u}vod}%
+ {ed.,\addabbrvspace p\v{r}ekl\adddot\ a \'{u}v\adddot}},
+ editortrfo = {{editor, p\v{r}ekladatel\ a p\v{r}edmluva}%
+ {ed.,\addabbrvspace p\v{r}ekl\adddot\ a p\v{r}edml\adddot}},
+ editorstrfo = {{edito\v{r}i, p\v{r}ekladatel\'{e}\ a p\v{r}edmluva}%
+ {ed.,\addabbrvspace p\v{r}ekl\adddot\ a p\v{r}edml\adddot}},
+ editortraf = {{editor, p\v{r}ekladatel\ a doslov}%
+ {ed.,\addabbrvspace p\v{r}ekl\adddot\ a dosl\adddot}},
+ editorstraf = {{edito\v{r}i, p\v{r}ekladatel\'{e}\ a doslov}%
+ {ed.,\addabbrvspace p\v{r}ekl\adddot\ a dosl\adddot}},
+ editorcoin = {{editor, koment\'{a}tor\ a \'{u}vod}%
+ {ed.,\addabbrvspace kom\adddot\ a \'{u}v\adddot}},
+ editorscoin = {{edito\v{r}i, koment\'{a}to\v{r}i\ a \'{u}vod}%
+ {ed.,\addabbrvspace kom\adddot\ a \'{u}v\adddot}},
+ editorcofo = {{editor, koment\'{a}tor\ a p\v{r}edmluva}%
+ {ed.,\addabbrvspace kom\adddot\ a p\v{r}edml\adddot}},
+ editorscofo = {{edito\v{r}i, koment\'{a}to\v{r}i\ a p\v{r}edmluva}%
+ {ed.,\addabbrvspace kom\adddot\ a p\v{r}edml\adddot}},
+ editorcoaf = {{editor, koment\'{a}tor\ a doslov}%
+ {ed.,\addabbrvspace kom\adddot\ a dosl\adddot}},
+ editorscoaf = {{edito\v{r}i, koment\'{a}to\v{r}i\ a doslov}%
+ {ed.,\addabbrvspace kom\adddot\ a dosl\adddot}},
+ editoranin = {{editor, anot\'{a}tor\ a \'{u}vod}%
+ {ed.,\addabbrvspace anot\adddot\ a \'{u}v\adddot}},
+ editorsanin = {{edito\v{r}i, anot\'{a}to\v{r}i\ a \'{u}vod}%
+ {ed.,\addabbrvspace anot\adddot\ a \'{u}v\adddot}},
+ editoranfo = {{editor, anot\'{a}tor\ a p\v{r}edmluva}%
+ {ed.,\addabbrvspace anot\adddot\ a p\v{r}edml\adddot}},
+ editorsanfo = {{edito\v{r}i, anot\'{a}to\v{r}i\ a p\v{r}edmluva}%
+ {ed.,\addabbrvspace anot\adddot\ a p\v{r}edml\adddot}},
+ editoranaf = {{editor, anot\'{a}tor\ a doslov}%
+ {ed.,\addabbrvspace anot\adddot\ a dosl\adddot}},
+ editorsanaf = {{edito\v{r}i, anot\'{a}to\v{r}i\ a doslov}%
+ {ed.,\addabbrvspace anot\adddot\ a dosl\adddot}},
+ editortrcoin = {{editor, p\v{r}ekladatel, koment\'{a}tor\ a \'{u}vod}%
+ {ed.,\addabbrvspace p\v{r}ekl., kom\adddot\ a \'{u}v\adddot}},
+ editorstrcoin = {{edito\v{r}i, p\v{r}ekladatel\'{e}, koment\'{a}to\v{r}i\ a \'{u}vod}%
+ {ed.,\addabbrvspace p\v{r}ekl., kom\adddot\ a \'{u}v\adddot}},
+ editortrcofo = {{editor, p\v{r}ekladatel, koment\'{a}tor\ a p\v{r}edmluva}%
+ {ed.,\addabbrvspace p\v{r}ekl., kom\adddot\ a p\v{r}edml\adddot}},
+ editorstrcofo = {{edito\v{r}i, p\v{r}ekladatel\'{e}, koment\'{a}to\v{r}i\ a p\v{r}edmluva}%
+ {ed.,\addabbrvspace p\v{r}ekl., kom\adddot\ a p\v{r}edml\adddot}},
+ editortrcoaf = {{editor, p\v{r}ekladatel, koment\'{a}tor\ a doslov}%
+ {ed.,\addabbrvspace p\v{r}ekl., kom\adddot\ a dosl\adddot}},
+ editorstrcoaf = {{edito\v{r}i, p\v{r}ekladatel\'{e}, koment\'{a}to\v{r}i\ a doslov}%
+ {ed.,\addabbrvspace p\v{r}ekl., kom\adddot\ a dosl\adddot}},
+ editortranin = {{editor, p\v{r}ekladatel, anot\'{a}tor\ a \'{u}vod}%
+ {ed.,\addabbrvspace p\v{r}ekl., anot\adddot\ a \'{u}v\adddot}},
+ editorstranin = {{edito\v{r}i, p\v{r}ekladatel\'{e}, anot\'{a}to\v{r}i\ a \'{u}vod}%
+ {ed.,\addabbrvspace p\v{r}ekl., anot\adddot\ a \'{u}v\adddot}},
+ editortranfo = {{editor, p\v{r}ekladatel, anot\'{a}tor\ a p\v{r}edmluva}%
+ {ed.,\addabbrvspace p\v{r}ekl., anot\adddot\ a p\v{r}edml\adddot}},
+ editorstranfo = {{edito\v{r}i, p\v{r}ekladatel\'{e}, anot\'{a}to\v{r}i\ a p\v{r}edmluva}%
+ {ed.,\addabbrvspace p\v{r}ekl., anot\adddot\ a p\v{r}edml\adddot}},
+ editortranaf = {{editor, p\v{r}ekladatel, anot\'{a}tor\ a doslov}%
+ {ed.,\addabbrvspace p\v{r}ekl., anot\adddot\ a dosl\adddot}},
+ editorstranaf = {{edito\v{r}i, p\v{r}ekladatel\'{e}, anot\'{a}to\v{r}i\ a doslov}%
+ {ed.,\addabbrvspace p\v{r}ekl., anot\adddot\ a dosl\adddot}},
+ translatorco = {{p\v{r}ekladatel a koment\'{a}tor}%
+ {p\v{r}ekl\adddot\ a kom\adddot}},
+ translatorsco = {{p\v{r}ekladatel\'{e} a koment\'{a}to\v{r}i}%
+ {p\v{r}ekl\adddot\ a kom\adddot}},
+ translatoran = {{p\v{r}ekladatel a anot\'{a}tor}%
+ {p\v{r}ekl\adddot\ a anot\adddot}},
+ translatorsan = {{p\v{r}ekladatel\'{e} a anot\'{a}to\v{r}i}%
+ {p\v{r}ekl\adddot\ a anot\adddot}},
+ translatorin = {{p\v{r}eklad a \'{u}vod}%
+ {p\v{r}ekl\adddot\ a \'{u}v\adddot}},
+ translatorsin = {{p\v{r}eklad a \'{u}vod}%
+ {p\v{r}ekl\adddot\ a \'{u}v\adddot}},
+ translatorfo = {{p\v{r}eklad a p\v{r}edmluva}%
+ {p\v{r}ekl\adddot\ a p\v{r}edml\adddot}},
+ translatorsfo = {{p\v{r}eklad a p\v{r}edmluva}%
+ {p\v{r}ekl\adddot\ a p\v{r}edml\adddot}},
+ translatoraf = {{p\v{r}eklad a doslov}%
+ {p\v{r}ekl\adddot\ a dosl\adddot}},
+ translatorsaf = {{p\v{r}eklad a doslov}%
+ {p\v{r}ekl\adddot\ a dosl\adddot}},
+ translatorcoin = {{p\v{r}eklad, koment\'{a}\v{r}\ a \'{u}vod}%
+ {p\v{r}ekl., kom\adddot\ a \'{u}v\adddot}},
+ translatorscoin = {{p\v{r}eklad, koment\'{a}\v{r}\ a \'{u}vod}%
+ {p\v{r}ekl., kom\adddot\ a \'{u}v\adddot}},
+ translatorcofo = {{p\v{r}eklad, koment\'{a}\v{r}\ a p\v{r}edmluva}%
+ {p\v{r}ekl., kom\adddot\ a p\v{r}edml\adddot}},
+ translatorscofo = {{p\v{r}eklad, koment\'{a}\v{r}\ a p\v{r}edmluva}%
+ {p\v{r}ekl., kom\adddot\ a p\v{r}edml\adddot}},
+ translatorcoaf = {{p\v{r}eklad, koment\'{a}\v{r}\ a doslov}%
+ {p\v{r}ekl., kom\adddot\ a dosl\adddot}},
+ translatorscoaf = {{p\v{r}eklad, koment\'{a}\v{r}\ a doslov}%
+ {p\v{r}ekl., kom\adddot\ a dosl\adddot}},
+ translatoranin = {{p\v{r}eklad, anotace,\ a \'{u}vod}%
+ {p\v{r}ekl., anot\adddot\ a \'{u}v\adddot}},
+ translatorsanin = {{p\v{r}eklad, anotace,\ a \'{u}vod}%
+ {p\v{r}ekl., anot\adddot\ a \'{u}v\adddot}},
+ translatoranfo = {{p\v{r}eklad, anotace,\ a p\v{r}edmluva}%
+ {p\v{r}ekl., anot\adddot\ a p\v{r}edml\adddot}},
+ translatorsanfo = {{p\v{r}eklad, anotace,\ a p\v{r}edmluva}%
+ {p\v{r}ekl., anot\adddot\ a p\v{r}edml\adddot}},
+ translatoranaf = {{p\v{r}eklad, anotace,\ a doslov}%
+ {p\v{r}ekl., anot\adddot\ a dosl\adddot}},
+ translatorsanaf = {{p\v{r}eklad, anotace,\ a doslov}%
+ {p\v{r}ekl., anot\adddot\ a dosl\adddot}},
+ organizer = {{organiz\'{a}tor}{org\adddot}},% FIXME: unsure
+ organizers = {{organiz\'{a}to\v{r}i}{org\adddot}},% FIXME: unsure
+ byorganizer = {{organizov\'{a}no}{org\adddot}},% FIXME: unsure
+ byauthor = {{}{}},
+ byeditor = {{editov\'{a}no}{ed\adddot}},
+ bycompiler = {{sestaveno}{sest\adddot}},
+ byredactor = {{redigov\'{a}no}{red\adddot}},
+ byreviser = {{korigov\'{a}no}{kor\adddot}},
+ byreviewer = {{recenzov\'{a}no}{recenz\adddot}},
+ byfounder = {{zalo\v{z}eno}{zal\adddot}},
+ bycontinuator = {{pokra\v{c}ov\'{a}no}{pokr\adddot}},
+ bycollaborator = {{ve spolupr\'{a}ci s\addnbspace}{ve spol\adddotspace s\addnbspace}},
+ bytranslator = {{p\v{r}elo\v{z}eno \lbx@lfromlang}{p\v{r}el\adddot\ \lbx@sfromlang}},
+ bycommentator = {{komentov\'{a}no}{kom\adddot}},
+ byannotator = {{anotov\'{a}no}{anot\adddot}},
+ withcommentator = {{s\addnbspace koment\'{a}\v{r}em od}{s\addnbspace kom\adddot\ od}},
+ withannotator = {{s\addnbspace anotacemi od}{s\addnbspace anot\adddot\ od}},
+ withintroduction = {{s\addnbspace \'{u}vodem od}{s\addnbspace \'{u}v\adddot\ od}},
+ withforeword = {{s\addnbspace p\v{r}edmluvou od}{s\addnbspace p\v{r}edml\adddot\ od}},
+ withafterword = {{s\addnbspace doslovem od}{s\addnbspace dosl\adddot\ od}},
+ byeditortr = {{editov\'{a}no a p\v{r}elo\v{z}eno \lbx@lfromlang}%
+ {ed\adddotspace a p\v{r}el\adddot\ \lbx@sfromlang}},
+ byeditorco = {{editov\'{a}no a komentov\'{a}no}%
+ {ed\adddotspace a kom\adddot}},
+ byeditoran = {{editov\'{a}no a anotov\'{a}no}%
+ {ed\adddotspace a anot\adddot}},
+ byeditorin = {{editov\'{a}no, s\addnbspace \'{u}vodem}%
+ {ed.,\addabbrvspace s\addnbspace \'{u}v\adddot}},
+ byeditorfo = {{editov\'{a}no, s\addnbspace p\v{r}edmluvou}%
+ {ed.,\addabbrvspace s\addnbspace p\v{r}edml\adddot}},
+ byeditoraf = {{editov\'{a}no, s\addnbspace doslovem}%
+ {ed.,\addabbrvspace s\addnbspace dosl\adddot}},
+ byeditortrco = {{editov\'{a}no, p\v{r}elo\v{z}eno \lbx@lfromlang\ a komentov\'{a}no}%
+ {ed.,\addabbrvspace p\v{r}el\adddot\ \lbx@sfromlang\ a kom\adddot}},
+ byeditortran = {{editov\'{a}no, p\v{r}elo\v{z}eno \lbx@lfromlang\ a anotov\'{a}no}%
+ {ed.,\addabbrvspace p\v{r}el\adddot\ \lbx@sfromlang\ a anot\adddot}},
+ byeditortrin = {{editov\'{a}no a p\v{r}elo\v{z}eno \lbx@lfromlang, s\addnbspace \'{u}vodem}%
+ {ed\adddotspace a p\v{r}el\adddot\ \lbx@sfromlang, s\addnbspace \'{u}v\adddot}},
+ byeditortrfo = {{editov\'{a}no a p\v{r}elo\v{z}eno \lbx@lfromlang, s\addnbspace p\v{r}edmluvou}%
+ {ed\adddotspace a p\v{r}el\adddot\ \lbx@sfromlang, s\addnbspace p\v{r}edml\adddot}},
+ byeditortraf = {{editov\'{a}no a p\v{r}elo\v{z}eno \lbx@lfromlang, s\addnbspace doslovem}%
+ {ed\adddotspace a p\v{r}el\adddot\ \lbx@sfromlang, s\addnbspace dosl\adddot}},
+ byeditorcoin = {{editov\'{a}no a komentov\'{a}no, s\addnbspace \'{u}vodem}%
+ {ed\adddotspace a kom., s\addnbspace \'{u}v\adddot}},
+ byeditorcofo = {{editov\'{a}no a komentov\'{a}no, s\addnbspace p\v{r}edmluvou}%
+ {ed\adddotspace a kom., s\addnbspace p\v{r}edml\adddot}},
+ byeditorcoaf = {{editov\'{a}no a komentov\'{a}no, s\addnbspace doslovem}%
+ {ed\adddotspace a kom., s\addnbspace dosl\adddot}},
+ byeditoranin = {{editov\'{a}no a anotov\'{a}no, s\addnbspace \'{u}vodem}%
+ {ed\adddotspace a anot., s\addnbspace \'{u}v\adddot}},
+ byeditoranfo = {{editov\'{a}no a anotov\'{a}no, s\addnbspace p\v{r}edmluvou}%
+ {ed\adddotspace a anot., s\addnbspace p\v{r}edml\adddot}},
+ byeditoranaf = {{editov\'{a}no a anotov\'{a}no, s\addnbspace doslovem}%
+ {ed\adddotspace a anot., s\addnbspace dosl\adddot}},
+ byeditortrcoin = {{editov\'{a}no, p\v{r}elo\v{z}eno \lbx@lfromlang\ a komentov\'{a}no, s\addnbspace \'{u}vodem}%
+ {ed.,\addabbrvspace p\v{r}el\adddot\ \lbx@sfromlang\ a kom., s\addnbspace \'{u}v\adddot}},
+ byeditortrcofo = {{editov\'{a}no, p\v{r}elo\v{z}eno \lbx@lfromlang\ a komentov\'{a}no, s\addnbspace p\v{r}edmluvou }%
+ {ed.,\addabbrvspace p\v{r}el\adddot\ \lbx@sfromlang\ a kom., s\addnbspace p\v{r}edml\adddot}},
+ byeditortrcoaf = {{editov\'{a}no, p\v{r}elo\v{z}eno \lbx@lfromlang\ a komentov\'{a}no, s\addnbspace doslovem}%
+ {ed.,\addabbrvspace p\v{r}el\adddot\ \lbx@sfromlang\ a kom., s\addnbspace dosl\adddot}},
+ byeditortranin = {{editov\'{a}no, p\v{r}elo\v{z}eno \lbx@lfromlang\ a anotov\'{a}no, s\addnbspace \'{u}vodem}%
+ {ed.,\addabbrvspace p\v{r}el\adddot\ \lbx@sfromlang\ a anot\adddot, s\addnbspace \'{u}v\adddot}},
+ byeditortranfo = {{editov\'{a}no, p\v{r}elo\v{z}eno \lbx@lfromlang\ a anotov\'{a}no, s\addnbspace p\v{r}edmluvou}%
+ {ed.,\addabbrvspace p\v{r}el\adddot\ \lbx@sfromlang\ a anot., s\addnbspace p\v{r}edml\adddot}},
+ byeditortranaf = {{editov\'{a}no, p\v{r}elo\v{z}eno \lbx@lfromlang\ a anotov\'{a}no, s\addnbspace doslovem}%
+ {ed.,\addabbrvspace p\v{r}el\adddot\ \lbx@sfromlang\ a anot., s\addnbspace dosl\adddot}},
+ bytranslatorco = {{p\v{r}elo\v{z}eno \lbx@lfromlang\ a komentov\'{a}no}%
+ {p\v{r}el\adddot\ \lbx@sfromlang\ a kom\adddot}},
+ bytranslatoran = {{p\v{r}elo\v{z}eno \lbx@lfromlang\ a anotov\'{a}no}%
+ {p\v{r}el\adddot\ \lbx@sfromlang\ a anot\adddot}},
+ bytranslatorin = {{p\v{r}elo\v{z}eno \lbx@lfromlang, s\addnbspace \'{u}vodem}%
+ {p\v{r}el\adddot\ \lbx@sfromlang, s\addnbspace \'{u}v\adddot}},
+ bytranslatorfo = {{p\v{r}elo\v{z}eno \lbx@lfromlang, s\addnbspace p\v{r}edmluvou}%
+ {p\v{r}el\adddot\ \lbx@sfromlang, s\addnbspace p\v{r}edml\adddot}},
+ bytranslatoraf = {{p\v{r}elo\v{z}eno \lbx@lfromlang, s\addnbspace doslovem}%
+ {p\v{r}el\adddot\ \lbx@sfromlang, s\addnbspace dosl\adddot}},
+ bytranslatorcoin = {{p\v{r}elo\v{z}eno \lbx@lfromlang\ a komentov\'{a}no, s\addnbspace \'{u}vodem}%
+ {p\v{r}el\adddot\ \lbx@sfromlang\ a kom., s\addnbspace \'{u}v\adddot}},
+ bytranslatorcofo = {{p\v{r}elo\v{z}eno \lbx@lfromlang\ a komentov\'{a}no, s\addnbspace p\v{r}edmluvou}%
+ {p\v{r}el\adddot\ \lbx@sfromlang\ a kom., s\addnbspace p\v{r}edml\adddot}},
+ bytranslatorcoaf = {{p\v{r}elo\v{z}eno \lbx@lfromlang\ a komentov\'{a}no, s\addnbspace doslovem}%
+ {p\v{r}el\adddot\ \lbx@sfromlang\ a kom., s\addnbspace dosl\adddot}},
+ bytranslatoranin = {{p\v{r}elo\v{z}eno \lbx@lfromlang\ a anotov\'{a}no, s\addnbspace \'{u}vodem}%
+ {p\v{r}el\adddot\ \lbx@sfromlang\ a anot., s\addnbspace \'{u}v\adddot}},
+ bytranslatoranfo = {{p\v{r}elo\v{z}eno \lbx@lfromlang\ a anotov\'{a}no, s\addnbspace p\v{r}edmluvou}%
+ {p\v{r}el\adddot\ \lbx@sfromlang\ a anot., s\addnbspace p\v{r}edml\adddot}},
+ bytranslatoranaf = {{p\v{r}elo\v{z}eno \lbx@lfromlang\ a anotov\'{a}no, s\addnbspace doslovem}%
+ {p\v{r}el\adddot\ \lbx@sfromlang\ a anot., s\addnbspace dosl\adddot}},
+ and = {{a}{a}},
+ andothers = {{et\addabbrvspace al\adddot}{et\addabbrvspace al\adddot}},
+ andmore = {{et\addabbrvspace al\adddot}{et\addabbrvspace al\adddot}},
+ volume = {{svazek}{sv\adddot}},
+ volumes = {{svazky}{sv\adddot}},
+ involumes = {{in}{in}},
+ jourvol = {{ro\v{c}n\'{\i}k}{ro\v{c}\adddot}},
+ jourser = {{\v{r}ada}{\v{r}\adddot}},% FIXME: s\'{e}rie ?
+ book = {{kniha}{kniha}},
+ part = {{\v{c}\'{a}st}{\v{c}\'{a}st}},
+ issue = {{\v{c}\'{\i}slo}{\v{c}\'{\i}slo}},
+ newseries = {{nov\'{a} \v{r}ada}{n\adddotspace \v{r}ada\adddot}},% FIXME: unsure
+ oldseries = {{star\'{a} \v{r}ada}{st\adddotspace \v{r}ada\adddot}},
+ edition = {{vyd\'{a}n\'{\i}}{vyd\adddot}},
+ reprint = {{dotisk}{dotisk}},
+ reprintof = {{dotisk}{dotisk}},
+ reprintas = {{dotisknuto jako}{dotisknuto jako}},
+ reprintfrom = {{dotisknuto z\addnbspace}{dotisknuto z\addnbspace}},
+ reviewof = {{recenze}{recenz\adddot}},
+ translationof = {{p\v{r}eklad}{p\v{r}ekl\adddot}},
+ translationas = {{p\v{r}elo\v{z}eno jako}{p\v{r}el\adddotspace jako}},
+ translationfrom = {{p\v{r}elo\v{z}eno z\addnbspace}{p\v{r}el\adddotspace z\addnbspace}},
+ origpubas = {{p\r{u}vodn\v{e} vyd\'{a}no jako}{p\r{u}v\adddotspace vyd\adddotspace jako}},
+ origpubin = {{p\r{u}vodn\v{e} vyd\'{a}no v\addnbspace roce}{p\r{u}v\adddotspace vyd\adddotspace v\addnbspace r\adddot}},
+ astitle = {{jako}{jako}},
+ bypublisher = {{}{}},
+ nodate = {{nedatov\'{a}no}{b\adddot r\adddot}},% bez roku
+ page = {{strana}{s\adddot}},
+ pages = {{strany}{s\adddot}},
+ column = {{sloupec}{sl\adddot}},
+ columns = {{sloupce}{sl\adddot}},
+ line = {{\v{r}\'{a}dek}{\v{r}\adddot}},
+ lines = {{\v{r}\'{a}dky}{\v{r}\adddot}},
+ verse = {{ver\v{s}}{v\adddot}},
+ verses = {{ver\v{s}e}{v\adddot}},
+ section = {{sekce}{\S}},
+ sections = {{sekce}{\S\S}},
+ paragraph = {{odstavec}{ods\adddot}},
+ paragraphs = {{odstavce}{ods\adddot}},
+ pagetotal = {{strana}{s\adddot}},
+ pagetotals = {{strany}{s\adddot}},
+ columntotal = {{sloupec}{sl\adddot}},
+ columntotals = {{sloupce}{sl\adddot}},
+ linetotal = {{\v{r}\'{a}dek}{\v{r}\adddot}},
+ linetotals = {{\v{r}\'{a}dky}{\v{r}\adddot}},
+ versetotal = {{ver\v{s}}{v\adddot}},
+ versetotals = {{ver\v{s}e}{v\adddot}},
+ sectiontotal = {{sekce}{\S}},
+ sectiontotals = {{sekce}{\S\S}},
+ paragraphtotal = {{odstavec}{ods\adddot}},
+ paragraphtotals = {{odstavce}{ods\adddot}},
+ in = {{in}{in}},
+ inseries = {{in}{in}},
+ ofseries = {{z}{z}},
+ number = {{\v{c}\'{\i}slo}{\v{c}\adddot}},
+ chapter = {{kapitola}{kap\adddot}},
+ bathesis = {{bakal\'{a}\v{r}sk\'{a} pr\'{a}ce}{bak\adddotspace pr\adddot}},
+ mathesis = {{diplomov\'{a} pr\'{a}ce}{dipl\adddotspace pr\adddot}},
+ phdthesis = {{diserta\v{c}n\'{\i} pr\'{a}ce}{dis\adddotspace pr\adddot}},
+ candthesis = {{kandid\'{a}tsk\'{a} pr\'{a}ce}{kand\adddotspace pr\adddot}},% FIXME: unsure
+ resreport = {{v\'{y}zkumn\'{a} zpr\'{a}va}{v\'{y}zk\adddot\ zpr\adddot}},
+ techreport = {{technick\'{a} zpr\'{a}va}{tech\adddotspace zpr\adddot}},
+ software = {{po\v{c}\'{\i}ta\v{c}ov\'{y} software}{soft\adddot}},
+ datacd = {{CD-ROM}{CD-ROM}},
+ audiocd = {{audio CD}{audio CD}},
+ version = {{verze}{ver\adddot}},
+ url = {{URL}{URL}},
+ urlfrom = {{dostupn\'{e} z\addnbspace}{dostupn\'{e} z\addnbspace}},
+ urlseen = {{citov\'{a}no}{cit\adddot}},
+ inpreparation = {{v\addnbspace p\v{r}\'{\i}prav\v{e}}{v\addnbspace p\v{r}\'{\i}prav\v{e}}},
+ submitted = {{odesl\'{a}no}{odesl\adddot}},
+ forthcoming = {{budouc\'{\i}}{bud\adddot}},
+ inpress = {{v\addnbspace tisku}{v\addnbspace tisku}},
+ prepublished = {{p\v{r}ed publikov\'{a}n\'{\i}m}{p\v{r}ed publ\adddot}},
+ citedas = {{d\'{a}le citov\'{a}no jako}{d\'{a}le cit\adddotspace jako}},
+ thiscite = {{zvl\'{a}\v{s}t\v{e}}{zvl\adddot}},
+ seenote = {{viz pozn\'{a}mka}{viz pozn\adddot}},
+ quotedin = {{citov\'{a}no v\addnbspace}{cit\adddotspace v\addnbspace}},
+ idem = {{idem}{idem}},
+ idemsm = {{idem}{idem}},
+ idemsf = {{eadem}{eadem}},
+ idemsn = {{idem}{idem}},
+ idempm = {{eidem}{eidem}},
+ idempf = {{eaedem}{eaedem}},
+ idempn = {{eadem}{eadem}},
+ idempp = {{eidem}{eidem}},
+ ibidem = {{ibidem}{ibid\adddot}},
+ opcit = {{op\adddotspace cit\adddot}{op\adddotspace cit\adddot}},
+ loccit = {{loc\adddotspace cit\adddot}{loc\adddotspace cit\adddot}},
+ confer = {{cf\adddot}{cf\adddot}},
+ sequens = {{sq\adddot}{sq\adddot}},
+ sequentes = {{sqq\adddot}{sqq\adddot}},
+ passim = {{passim}{pass\adddot}},
+ see = {{viz}{viz}},
+ seealso = {{viz t\'{e}\v{z}}{viz t\'{e}\v{z}}},
+ backrefpage = {{citov\'{a}no na stran\v{e}}{cit\adddotspace na str\adddot}},
+ backrefpages = {{citov\'{a}no na stran\'{a}ch}{cit\adddotspace na s\adddot}},
+ january = {{leden}{led\adddot}},
+ february = {{\'{u}nor}{\'{u}n\adddot}},
+ march = {{b\v{r}ezen}{b\v{r}ez\adddot}},
+ april = {{duben}{dub\adddot}},
+ may = {{kv\v{e}ten}{kv\v{e}t\adddot}},
+ june = {{\v{c}erven}{\v{c}vn\adddot}},
+ july = {{\v{c}ervenec}{\v{c}vc\adddot}},
+ august = {{srpen}{srp\adddot}},
+ september = {{z\'{a}\v{r}\'{\i}}{z\'{a}\v{r}\adddot}},
+ october = {{\v{r}\'{\i}jen}{\v{r}\'{\i}j\adddot}},
+ november = {{listopad}{lis\adddot}},
+ december = {{prosinec}{pros\adddot}},
+ langamerican = {{americk\'{a} angli\v{c}tina}{am\adddot\ angl\adddot}},
+ langbrazilian = {{brazilsk\'{a} portugal\v{s}tina}{braz\adddot\ portugal\adddot}},
+ langbulgarian = {{bulhar\v{s}tina}{bulh\adddot}},
+ langcatalan = {{katal\'{a}n\v{s}tina}{katal\adddot}},
+ langcroatian = {{chorvat\v{s}tina}{chorv\adddot}},
+ langczech = {{\v{c}e\v{s}tina}{\v{c}e\v{s}tina}},
+ langdanish = {{d\'{a}n\v{s}tina}{d\'{a}n\adddot}},
+ langdutch = {{holand\v{s}tina}{hol\adddot}},
+ langenglish = {{angli\v{c}tina}{angl\adddot}},
+ langestonian = {{eston\v{s}tina}{est\adddot}},
+ langfinnish = {{fin\v{s}tina}{fin\adddot}},
+ langfrench = {{francouz\v{s}tina}{franc\adddot}},
+ langgalician = {{galicij\v{s}tina}{gal\adddot}},
+ langgerman = {{n\v{e}m\v{c}ina}{n\v{e}m\adddot}},
+ langgreek = {{\v{r}e\v{c}tina}{\v{r}e\v{c}\adddot}},
+ langhungarian = {{ma\v{d}ar\v{s}tina}{ma\v{d}\adddot}},
+ langitalian = {{ital\v{s}tina}{ital\adddot}},
+ langjapanese = {{japon\v{s}tina}{jap\adddot}},
+ langlatin = {{latina}{lat\adddot}},
+ langlatvian = {{loty\v{s}tina}{lot\adddot}},
+ langnorwegian = {{nor\v{s}tina}{nor\adddot}},
+ langpolish = {{pol\v{s}tina}{pol\adddot}},
+ langportuguese = {{portugal\v{s}tina}{portugal\adddot}},
+ langrussian = {{ru\v{s}tina}{ru\v{s}tina}},
+ langserbian = {{srb\v{s}tina}{srb\adddot}},
+ langslovak = {{sloven\v{s}tina}{sloven\v{s}tina}},
+ langslovene = {{slovin\v{s}tina}{slovin\v{s}tina}},
+ langspanish = {{\v{s}pan\v{e}l\v{s}tina}{\v{s}pa\v{n}\adddot}},
+ langswedish = {{\v{s}v\'{e}d\v{s}tina}{\v{s}v\'{e}d\adddot}},
+ langukrainian = {{ukrajin\v{s}tina}{ukr\adddot}},
+ fromamerican = {{z\addnbspace americk\'{e} angli\v{c}tiny}{z\addnbspace amer\adddot\ angl\adddot}},
+ frombrazilian = {{z\addnbspace brazilsk\'{e} portugal\v{s}tiny}{z\addnbspace braz\adddotspace portugal\adddot}},
+ frombulgarian = {{z\addnbspace bulhar\v{s}tiny}{z\addnbspace bulh\adddot}},
+ fromcatalan = {{z\addnbspace katal\'{a}n\v{s}tiny}{z\addnbspace katal\adddot}},
+ fromcroatian = {{z\addnbspace chorvat\v{s}tiny}{z\addnbspace chorv\adddot}},
+ fromczech = {{z\addnbspace \v{c}e\v{s}tiny}{z\addnbspace \v{c}e\v{s}tiny}},
+ fromdanish = {{z\addnbspace d\'{a}n\v{s}tiny}{z\addnbspace d\'{a}n\adddot}},
+ fromdutch = {{z\addnbspace holand\v{s}tiny}{z\addnbspace hol\adddot}},
+ fromenglish = {{z\addnbspace angli\v{c}tiny}{z\addnbspace angl\adddot}},
+ fromestonian = {{z\addnbspace eston\v{s}tiny}{z\addnbspace est\adddot}},
+ fromfinnish = {{z\addnbspace fin\v{s}tiny}{z\addnbspace fin\adddot}},
+ fromfrench = {{z\addnbspace francouz\v{s}tiny}{z\addnbspace franc\adddot}},
+ fromgalician = {{z\addnbspace galicij\v{s}tiny}{z\addnbspace gal\adddot}},
+ fromgerman = {{z\addnbspace n\v{e}m\v{c}iny}{z\addnbspace n\v{e}m\adddot}},
+ fromgreek = {{z\addnbspace \v{r}e\v{c}tiny}{z\addnbspace \v{r}e\v{c}\adddot}},
+ fromhungarian = {{z\addnbspace ma\v{d}ar\v{s}tiny}{z\addnbspace ma\v{d}\adddot}},
+ fromitalian = {{z\addnbspace ital\v{s}tiny}{z\addnbspace ital\adddot}},
+ fromjapanese = {{z\addnbspace japon\v{s}tiny}{z\addnbspace jap\adddot}},
+ fromlatin = {{z\addnbspace latiny}{z\addnbspace lat\adddot}},
+ fromlatvian = {{z\addnbspace loty\v{s}tiny}{z\addnbspace lot\adddot}},
+ fromnorwegian = {{z\addnbspace nor\v{s}tiny}{z\addnbspace nor\adddot}},
+ frompolish = {{z\addnbspace pol\v{s}tiny}{z\addnbspace pol\adddot}},
+ fromportuguese = {{z\addnbspace portugal\v{s}tiny}{z\addnbspace portugal\adddot}},
+ fromrussian = {{z\addnbspace ru\v{s}tiny}{z\addnbspace ru\v{s}tiny}},
+ fromserbian = {{zo srb\v{s}tiny}{zo srb\adddot}},
+ fromslovak = {{ze sloven\v{s}tiny}{ze sloven\v{s}tiny}},
+ fromslovene = {{ze slovin\v{s}tiny}{ze slovin\v{s}tiny}},
+ fromspanish = {{ze \v{s}pan\v{e}l\v{s}tiny}{ze \v{s}pa\v{n}\adddot}},
+ fromswedish = {{ze \v{s}v\'{e}d\v{s}tiny}{ze \v{s}v\'{e}d\adddot}},
+ fromukrainian = {{z\addnbspace ukrajin\v{s}tiny}{z\addnbspace ukr\adddot}},
+ countryde = {{N\v{e}mecko}{DE}},
+ countryeu = {{Evropsk\'{a} unie}{EU}},
+ countryep = {{Evropsk\'{a} unie}{EP}},
+ countryfr = {{Francie}{FR}},
+ countryuk = {{Velk\'{a} Brit\'{a}nie}{GB}},
+ countryus = {{Spojen\'{e} st\'{a}ty americk\'{e}}{US}},
+ patent = {{patent}{pat\adddot}},
+ patentde = {{n\v{e}meck\'{y} patent}{n\v{e}m\adddot\ pat\adddot}},
+ patenteu = {{evropsk\'{y} patent}{evr\adddot\ pat\adddot}},
+ patentfr = {{francouzsk\'{y} patent}{franc\adddot\ pat\adddot}},
+ patentuk = {{britsk\'{y} patent}{brit\adddot\ pat\adddot}},
+ patentus = {{US patent}{US pat\adddot}},
+ patreq = {{patentov\'{a} \v{z}\'{a}dost}{pat\adddot\ \v{z}\'{a}d\adddot}},
+ patreqde = {{n\v{e}meck\'{a} patentov\'{a} \v{z}\'{a}dost}{n\v{e}meck\'{a} pat\adddot\ \v{z}\'{a}d\adddot}},
+ patreqeu = {{evropsk\'{a} patentov\'{a} \v{z}\'{a}dost}{evr\adddot\ pat\adddot\ \v{z}\'{a}d\adddot}},
+ patreqfr = {{francouzsk\'{a} patentov\'{a} \v{z}\'{a}dost}{franc\adddot\ pat\adddot\ \v{z}\'{a}d\adddot}},
+ patrequk = {{britsk\'{a} patentov\'{a} \v{z}\'{a}dost}{brit\adddot\ pat\adddot\ \v{z}\'{a}d\adddot}},
+ patrequs = {{US patentov\'{a} \v{z}\'{a}dost}{US pat\adddot\ \v{z}\'{a}d\adddot}},
+ file = {{soubor}{soub\adddot}},
+ library = {{knihovna}{knih\adddot}},
+ abstract = {{abstrakt}{abst\adddot}},
+ annotation = {{anotace}{anot\adddot}},
+ commonera = {{n\'{a}\v{s} letopo\v{c}et}{n\adddotspace l\adddot}},
+ beforecommonera = {{p\v{r}ed na\v{s}\'{\i}m letopo\v{c}tem}{p\v{r}\adddotspace n\adddotspace l\adddot}},
+ annodomini = {{po Kristu}{po Kr\adddot}},
+ beforechrist = {{p\v{r}ed Kristem}{p\v{r}\adddotspace Kr\adddot}},
+ circa = {{cirka}{ca\adddot}},
+ spring = {{jaro}{jaro}},
+ summer = {{l\'{e}to}{l\'{e}to}},
+ autumn = {{podzim}{podzim}},
+ winter = {{zima}{zima}},
+% springN = {{}{}},% FIXME: missing
+% summerN = {{}{}},% FIXME: missing
+% autumnN = {{}{}},% FIXME: missing
+% winterN = {{}{}},% FIXME: missing
+% springS = {{}{}},% FIXME: missing
+% summerS = {{}{}},% FIXME: missing
+% autumnS = {{}{}},% FIXME: missing
+% winterS = {{}{}},% FIXME: missing
+% Q1 = {{}{}},% FIXME: missing
+% Q2 = {{}{}},% FIXME: missing
+% Q3 = {{}{}},% FIXME: missing
+% Q4 = {{}{}},% FIXME: missing
+% QD1 = {{}{}},% FIXME: missing
+% QD2 = {{}{}},% FIXME: missing
+% QD3 = {{}{}},% FIXME: missing
+% S1 = {{}{}},% FIXME: missing
+% S2 = {{}{}},% FIXME: missing
+ am = {{AM}{AM}},
+ pm = {{PM}{PM}},
+}
+
+\endinput
+
diff --git a/macros/latex/contrib/biblatex-ms/latex/lbx/danish-ms.lbx b/macros/latex/contrib/biblatex-ms/latex/lbx/danish-ms.lbx
new file mode 100644
index 0000000000..4ab4fb385e
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/lbx/danish-ms.lbx
@@ -0,0 +1,554 @@
+\ProvidesFile{danish-ms.lbx}
+[\abx@lbxid]
+
+\DeclareRedundantLanguages{danish}{danish}
+
+\DeclareBibliographyExtras{%
+ \protected\def\bibrangedash{%
+ \textendash\penalty\hyphenpenalty}% breakable dash
+ \let\finalandcomma=\empty
+ \let\finalandsemicolon=\empty
+ \protected\def\mkbibordinal#1{\stripzeros{#1}\adddot}%
+ \protected\def\mkbibmascord{\mkbibordinal}%
+ \protected\def\mkbibfemord{\mkbibordinal}%
+ \protected\def\mkbibneutord{\mkbibordinal}%
+ \protected\def\mkbibdatelong#1#2#3{%
+ \iffieldundef{#3}
+ {}
+ {\mkbibordinal{\thefield{#3}}%
+ \iffieldundef{#2}{}{\nobreakspace}}%
+ \iffieldundef{#2}
+ {}
+ {\mkbibmonth{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}}%
+ \iffieldbibstring{#1}
+ {\bibstring{\thefield{#1}}}
+ {\dateeraprintpre{#1}\stripzeros{\thefield{#1}}}}%
+ \protected\def\mkbibdateshort#1#2#3{%
+ \iffieldundef{#3}
+ {}
+ {\mkdayzeros{\thefield{#3}}\adddot}%
+ \iffieldundef{#2}
+ {}
+ {\mkmonthzeros{\thefield{#2}}%
+ \iffieldundef{#1}{}{\adddot}}%
+ \iffieldbibstring{#1}
+ {\bibstring{\thefield{#1}}}
+ {\dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}}%
+ \expandafter\protected\expandafter\def\csname mkbibtime24h\endcsname#1#2#3#4{%
+ \iffieldundef{#1}
+ {}
+ {\mktimezeros{\thefield{#1}}%
+ \iffieldundef{#2}{}{\bibtimesep}}%
+ \iffieldundef{#2}
+ {}
+ {\mktimezeros{\thefield{#2}}%
+ \iffieldundef{#3}{}{\bibtimesep}}%
+ \iffieldundef{#3}
+ {}
+ {\mktimezeros{\thefield{#3}}}%
+ \iffieldundef{#4}{}
+ {\bibtimezonesep
+ \mkbibtimezone{\thefield{#4}}}}%
+ \expandafter\protected\expandafter\def\csname mkbibtime12h\endcsname#1#2#3#4{%
+ \stripzeros{\mktimehh{\thefield{#1}}}\bibtimesep
+ \forcezerosmdt{\thefield{#2}}%
+ \iffieldundef{#3}{}
+ {\bibtimesep
+ \forcezerosmdt{\thefield{#3}}}%
+ \space
+ \ifnumless{\thefield{#1}}{12}
+ {\bibstring{am}}
+ {\bibstring{pm}}%
+ \iffieldundef{#4}{}
+ {\space\bibtimezonesep
+ \parentext{\mkbibtimezone{\thefield{#4}}}}}%
+ \protected\def\mkbibyeardivisiondateshort#1#2{%
+ \mkbibyeardivision{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}%
+ \dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}%
+ \protected\def\mkbibyeardivisiondatelong#1#2{%
+ \mkbibyeardivision{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}%
+ \dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}%
+}
+
+\DeclareBibliographyStrings{%
+ bibliography = {{Bibliografi}{Bibliografi}},
+ references = {{Litteratur}{Litteratur}},
+ shorthands = {{Forkortelser}{Forkortelser}},
+ editor = {{redakt{\o}r}{red\adddot}},
+ editors = {{redakt{\o}rer}{red\adddot}},
+ compiler = {{kompilator}{kompilator}},
+ compilers = {{kompilatorer}{kompilatorer}},
+ redactor = {{medredakt{\o}r}{medred\adddot}},
+ redactors = {{medredakt{\o}rer}{medred\adddot}},
+ reviser = {{korrekturl{\ae}ser}{korrek\adddot}},
+ revisers = {{korrekturl{\ae}sere}{korrek\adddot}},
+ founder = {{stifter}{stifter}},
+ founders = {{stiftere}{stiftere}},
+ continuator = {{videref{\o}rer}{videref\adddot}},
+ continuators = {{videref{\o}rere}{videref\adddot}},
+ collaborator = {{samarbejdspartner}{samarb\adddot}},
+ collaborators = {{samarbejdspartnere}{samarb\adddot}},
+ translator = {{overs{\ae}tter}{overs\adddot}},
+ translators = {{overs{\ae}ttere}{overs\adddot}},
+ commentator = {{kommentator}{komment\adddot}},
+ commentators = {{kommentatorer}{komment\adddot}},
+ annotator = {{kommentator}{komment\adddot}},
+ annotators = {{kommentatorer}{komment\adddot}},
+ commentary = {{kommentering}{komment\adddot}},
+ annotations = {{annotering}{annot\adddot}},
+ introduction = {{indledning}{indl\adddot}},
+ foreword = {{forord}{forord}},%or prolog
+ afterword = {{epilog}{epilog}},%or efterskrift
+ editortr = {{redakt{\o}r og overs{\ae}tter}%
+ {red\adddotspace og overs\adddot}},
+ editorstr = {{redakt{\o}rer og overs{\ae}ttere}%
+ {red\adddotspace og overs\adddot}},
+ editorco = {{redakt{\o}r og kommentator}
+ {red\adddotspace og komment\adddot}},
+ editorsco = {{redakt{\o}rer og kommentatorer}
+ {red\adddotspace og komment\adddot}},
+ editoran = {{redakt{\o}r og kommentator}%
+ {red\adddotspace og komment\adddot}},
+ editorsan = {{redakt{\o}rer og kommentatorer}%
+ {red\adddotspace og komment\adddot}},
+ editorin = {{redaktion og indledning}%
+ {red\adddotspace og indl\adddot}},
+ editorsin = {{redaktion og indledning}%
+ {red\adddotspace og indl\adddot}},
+ editorfo = {{redaktion og forord}%
+ {red\adddotspace og forord}},
+ editorsfo = {{redaktion og forord}%
+ {red\adddotspace og forord}},
+ editoraf = {{redaktion og epilog}%
+ {red\adddotspace og epilog}},
+ editorsaf = {{redaktion og epilog}%
+ {red\adddotspace og epilog}},
+ editortrco = {{redakt{\o}r, overs{\ae}tter og kommentator}%
+ {red\adddot,\addabbrvspace overs\adddotspace og komment\adddot}},
+ editorstrco = {{redakt{\o}rer, overs{\ae}ttere og kommentatorer}%
+ {red\adddot,\addabbrvspace overs\adddotspace og komment\adddot}},
+ editortran = {{redakt{\o}r, overs{\ae}tter og kommentator}%
+ {red\adddot,\addabbrvspace overs\adddotspace og komment\adddot}},
+ editorstran = {{redakt{\o}rer, overs{\ae}ttere og kommentatorer}%
+ {red\adddot,\addabbrvspace overs\adddotspace og komment\adddot}},
+ editortrin = {{redaktion, overs{\ae}ttelse og indledning}%
+ {red\adddot,\addabbrvspace overs\adddotspace og indl\adddot}},
+ editorstrin = {{redaktion, overs{\ae}ttelse og indledning}%
+ {red\addot,\addabbrvspace overs\adddotspace og indl\adddot}},
+ editortrfo = {{redaktion, overs{\ae}ttelse og forord}%
+ {red\adddot,\addabbrvspace overs\adddotspace og forord}},
+ editorstrfo = {{redaktion, overs{\ae}ttelse og forord}%
+ {red\adddot,\addabbrvspace overs\adddotspace og forord}},
+ editortraf = {{redaktion, overs{\ae}ttelse og epilog}%
+ {red\adddot,\addabbrvspace overs\adddotspace og epilog}},
+ editorstraf = {{redaktion, overs{\ae}ttelse og epilog}%
+ {red\adddot,\addabbrvspace overs\adddotspace og epilog}},
+ editorcoin = {{redaktion, kommentarer og indledning}%
+ {red\adddot,\addabbrvspace komment\adddotspace og indl\adddot}},
+ editorscoin = {{redaktion, kommentarer og indledning}%
+ {red\adddot,\addabbrvspace komment\adddotspace og indl\adddot}},
+ editorcofo = {{redaktion, kommentarer og forord}%
+ {red\adddot,\addabbrvspace komment\adddotspace og forord}},
+ editorscofo = {{redaktion, kommentarer og forord}%
+ {red\adddot,\addabbrvspace komment\adddotspace og forord}},
+ editorcoaf = {{redaktion, kommentarer og epilog}%
+ {red\adddot,\addabbrvspace komment\adddotspace og epilog}},
+ editorscoaf = {{redaktion, kommentarer og epilog}%
+ {red\adddot,\addabbrvspace komment\adddotspace og epilog}},
+ editoranin = {{redaktion, annotering og indledning}%
+ {red\adddot,\addabbrvspace annot\adddotspace og indl\adddot}},
+ editorsanin = {{redaktion, annotering og indledning}%
+ {red\adddot,\addabbrvspace annot\adddotspace og indl\adddot}},
+ editoranfo = {{redaktion, annotering og forord}%
+ {red\adddot,\addabbrvspace annot\adddotspace og forord}},
+ editorsanfo = {{redaktion, annotering og forord}%
+ {red\adddot,\addabbrvspace annot\adddotspace og forord}},
+ editoranaf = {{redaktion, annotering og epilog}%
+ {red\adddot,\addabbrvspace annot\adddotspace og epilog}},
+ editorsanaf = {{redaktion, annotering og epilog}%
+ {red\adddot,\addabbrvspace annot\adddotspace og epilog}},
+ editortrcoin = {{redaktion, overs{\ae}ttelse, kommentarer og indledning}%
+ {red\adddot,\addabbrvspace overs\adddot, komment\adddotspace og indl\adddot}},
+ editorstrcoin = {{redaktion, overs{\ae}ttelse, kommentarer og indledning}%
+ {red\adddot,\addabbrvspace overs\adddot, komment\adddotspace og indl\adddot}},
+ editortrcofo = {{redaktion, overs{\ae}ttelse, kommentarer og forord}%
+ {red\adddot,\addabbrvspace overs\adddot, komment\adddotspace og forord}},
+ editorstrcofo = {{redaktion, overs{\ae}ttelse, kommentarer og forord}%
+ {red\adddot,\addabbrvspace overs\adddot, komment\adddotspace og forord}},
+ editortrcoaf = {{redaktion, overs{\ae}ttelse, kommentarer og epilog}%
+ {red\adddot,\addabbrvspace overs\adddot, komment\adddotspace og epilog}},
+ editorstrcoaf = {{redaktion, overs{\ae}ttelse, kommentarer og epilog}%
+ {red\adddot,\addabbrvspace overs\adddot, komment\adddotspace og epilog}},
+ editortranin = {{redaktion, overs{\ae}ttelse, annotering og indledning}%
+ {red\adddot,\addabbrvspace overs\adddot, annot\adddotspace og indl\adddot}},
+ editorstranin = {{redaktion, overs{\ae}ttelse, annotering og indledning}%
+ {red\adddot,\addabbrvspace overs\adddot, annot\adddotspace og indl\adddot}},
+ editortranfo = {{redaktion, overs{\ae}ttelse, annotering og forord}%
+ {red\adddot,\addabbrvspace overs\adddot, annot\adddotspace og forord}},
+ editorstranfo = {{redaktion, overs{\ae}ttelse, annotering og forord}%
+ {red\adddot,\addabbrvspace overs\adddot, annot\adddotspace og forord}},
+ editortranaf = {{redaktion, overs{\ae}ttelse, annotering og epilog}%
+ {red\adddot,\addabbrvspace overs\adddot, annot\adddotspace og epilog}},
+ editorstranaf = {{redaktion, overs{\ae}ttelse, annotering og epilog}%
+ {red\adddot,\addabbrvspace overs\adddot, annot\adddotspace og epilog}},
+ translatorco = {{overs{\ae}ttelse og kommentarer}%
+ {overs\adddotspace og komment\adddot}},
+ translatorsco = {{overs{\ae}ttelse og kommentarer}%
+ {overs\adddotspace og komment\adddot}},
+ translatoran = {{overs{\ae}ttelse og annotering}%
+ {overs\adddotspace og annot\adddot}},
+ translatorsan = {{overs{\ae}ttelse og annotering}%
+ {overs\adddotspace og annot\adddot}},
+ translatorin = {{overs{\ae}ttelse og indledning}%
+ {overs\adddotspace og indl\adddot}},
+ translatorsin = {{overs{\ae}ttelse og indledning}%
+ {overs\adddotspace og indl\adddot}},
+ translatorfo = {{overs{\ae}ttelse og forord}%
+ {overs\adddotspace og forord}},
+ translatorsfo = {{overs{\ae}ttelse og forord}%
+ {overs\adddotspace og forord}},
+ translatoraf = {{overs{\ae}ttelse og epilog}%
+ {overs\adddotspace og epilog}},
+ translatorsaf = {{overs{\ae}ttelse og epilog}%
+ {overs\adddotspace og epilog}},
+ translatorcoin = {{overs{\ae}ttelse, kommentarer og indledning}%
+ {overs\adddot, komment\adddotspace og indl\adddot}},
+ translatorscoin = {{overs{\ae}ttelse, kommentarer og indledning}%
+ {overs\adddot, komment\adddotspace og indl\adddot}},
+ translatorcofo = {{overs{\ae}ttelse, kommentarer og forord}%
+ {overs\adddot, komment\adddotspace og forord}},
+ translatorscofo = {{overs{\ae}ttelse, kommentarer og forord}%
+ {overs\adddot, komment\adddotspace og forord}},
+ translatorcoaf = {{overs{\ae}ttelse, kommentarer og epilog}%
+ {overs\adddot, komment\adddotspace og epilog}},
+ translatorscoaf = {{overs{\ae}ttelse, kommentarer og epilog}%
+ {overs\adddot, komment\adddotspace og epilog}},
+ translatoranin = {{overs{\ae}ttelse, annotering og indledning}%
+ {overs\adddot, annot\adddotspace og indl\adddot}},
+ translatorsanin = {{overs{\ae}ttelse, annotering og indledning}%
+ {overs\adddot, annot\adddotspace og indl\adddot}},
+ translatoranfo = {{overs{\ae}ttelse, annotering og forord}%
+ {overs\adddot, annot\adddotspace og forord}},
+ translatorsanfo = {{overs{\ae}ttelse, annotering og forord}%
+ {overs\adddot, annot\adddotspace og forord}},
+ translatoranaf = {{overs{\ae}ttelse, annotering og epilog}%
+ {overs\adddot, annot\adddotspace og epilog}},
+ translatorsanaf = {{overs{\ae}ttelse, annotering og epilog}%
+ {overs\adddot, annot\adddotspace og epilog}},
+ organizer = {{organisator}{org\adddot}},
+ organizers = {{organisatorer}{org\adddot}},
+ byorganizer = {{organiseret af}{org\adddotspace av}},
+ byauthor = {{af}{af}},
+ byeditor = {{redigeret af}{red\adddotspace af}},
+ bycompiler = {{kompileret af}{komp\adddotspace af}},
+ byredactor = {{bearbejdet af}{bearb\adddotspace af}},
+ byreviser = {{revideret af}{rev\adddotspace af}},
+ byreviewer = {{bed\o mt af}{bed\adddotspace af}},
+ byfounder = {{stiftet af}{stiftet af}},
+ bycontinuator = {{videref\o rt af}{videref\adddotspace af}},
+ bycollaborator = {{i samarbejde med}{i samarb\adddotspace m\adddot}},
+ bytranslator = {{oversat \lbx@lfromlang\ af}%
+ {overs\adddot\ \lbx@sfromlang\ af}},
+ bycommentator = {{kommenteret af}{komment\adddot\ af}},
+ byannotator = {{annoteret af}{annot\adddot\ af}},
+ withcommentator = {{med kommentarer af}{m\adddotspace komment\adddot\ af}},
+ withannotator = {{med annotering af}{m\adddotspace annot\adddot\ af}},
+ withintroduction = {{med indledning af}{m\adddotspace indl\adddot\ af}},
+ withforeword = {{med forord af}{m\adddotspace forord af}},
+ withafterword = {{med epilog af}{m\adddotspace epilog af}},
+ byeditortr = {{redigeret og oversat \lbx@lfromlang\ af}%
+ {red\adddotspace og overs\adddot\ \lbx@sfromlang\ af}},
+ byeditorco = {{redigeret og kommenteret af}%
+ {red\adddotspace og komment\adddot\ af}},
+ byeditoran = {{redigeret med annotering af}%
+ {red\adddotspace m\adddotspace annot\adddotspace af}},
+ byeditorin = {{redigeret med indledning af}%
+ {red\adddotspace med indl\adddot\ af}},
+ byeditorfo = {{redigeret med forord af}%
+ {red\adddotspace med forord af}},
+ byeditoraf = {{redigeret med epilog af}%
+ {red\adddotspace med epilog af}},
+ byeditortrco = {{redigeret, oversat \lbx@lfromlang\ og kommenteret af}%
+ {red\adddot,\addabbrvspace overs\adddot\ \lbx@sfromlang\ og komment\adddot\ af}},
+ byeditortran = {{redigeret, oversat \lbx@lfromlang\ og annoteret af}%
+ {red\adddot,\addabbrvspace overs\adddot\ \lbx@sfromlang\ og annot\adddot\ af}},
+ byeditortrin = {{redigeret, oversat \lbx@lfromlang\ og med indledning af}%
+ {red\adddot,\addabbrvspace overs\adddot\ \lbx@sfromlang\ og indl\adddot\ af}},
+ byeditortrfo = {{redigeret, oversat \lbx@lfromlang\ og med forord af}%
+ {red\adddot,\addabbrvspace overs\adddot\ \lbx@sfromlang\ og forord af}},
+ byeditortraf = {{redigeret, oversat \lbx@lfromlang\ og med epilog af}%
+ {red\adddot,\addabbrvspace overs\adddot\ \lbx@sfromlang\ og epilog af}},
+ byeditorcoin = {{redigeret, kommenteret og med indledning af}%
+ {red\adddot,\addabbrvspace komment\adddot\ og indl\adddotspace af}},
+ byeditorcofo = {{redigeret, kommenteret og med forord af}%
+ {red\adddot,\addabbrvspace komment\adddot\ og forord af}},
+ byeditorcoaf = {{redigeret, kommenteret og med epilog af}%
+ {red\adddot,\addabbrvspace komment\adddot\ og epilog af}},
+ byeditoranin = {{redigeret, annoteret og med indledning af}%
+ {red\adddot,\addabbrvspace annot\adddot\ og indl\adddot\ af}},
+ byeditoranfo = {{redigeret, annoteret og med forord af}%
+ {red\adddot,\addabbrvspace annot\adddot\ og forord af}},
+ byeditoranaf = {{redigeret, annoteret og med epilog af}%
+ {red\adddot,\addabbrvspace annot\adddot\ og epilog af}},
+ byeditortrcoin = {{redigeret, oversat \lbx@lfromlang, kommenteret og med indledning af}%
+ {red\adddot,\addabbrvspace overs\adddot\ \lbx@sfromlang, komment\adddot\ og indl\adddot\ af}},
+ byeditortrcofo = {{redigeret, oversat \lbx@lfromlang, kommenteret og med forord af}%
+ {red\adddot,\addabbrvspace overs\adddot\ \lbx@sfromlang, komment\adddot\ og forord af}},
+ byeditortrcoaf = {{redigeret, oversat \lbx@lfromlang, kommenteret og med epilog af}%
+ {red\adddot,\addabbrvspace overs\adddot\ \lbx@sfromlang, komment\adddot\ og epilog af}},
+ byeditortranin = {{redigeret, oversat \lbx@lfromlang, med annotering og indledning af}%
+ {red\adddot,\addabbrvspace overs\adddot\ \lbx@sfromlang, annot\adddot\ og indl\adddot\ af}},
+ byeditortranfo = {{redigeret, oversat \lbx@lfromlang, med annotering og forord af}%
+ {red\adddot,\addabbrvspace overs\adddot\ \lbx@sfromlang, annot\adddot\ og forord af}},
+ byeditortranaf = {{redigeret, oversat \lbx@lfromlang, med annotering og epilog af}%
+ {red\adddot,\addabbrvspace overs\adddot\ \lbx@sfromlang, annot\adddot\ og epilog af}},
+ bytranslatorco = {{oversat \lbx@lfromlang\ med kommentarer af}%
+ {overs\adddot\ \lbx@sfromlang\ m\adddotspace komment\adddot\ af}},
+ bytranslatoran = {{oversat \lbx@lfromlang\ og annoteret af}%
+ {overs\adddot\ \lbx@sfromlang\ og annot\adddot\ af}},
+ bytranslatorin = {{oversat \lbx@lfromlang\ med indledning af}%
+ {overs\adddot\ \lbx@sfromlang\ m\adddotspace indl\adddot\ af}},
+ bytranslatorfo = {{oversat \lbx@lfromlang\ med forord af}%
+ {overs\adddot\ \lbx@sfromlang\ m\adddotspace forord af}},
+ bytranslatoraf = {{oversat \lbx@lfromlang\ med epilog af}%
+ {overs\adddot\ \lbx@sfromlang\ m\adddotspace epilog af}},
+ bytranslatorcoin = {{oversat \lbx@lfromlang\addspace med kommentarer og indledning af}%
+ {overs\adddot\ \lbx@sfromlang\addspace m\adddotspace komment\adddotspace og indl\adddotspace af}},
+ bytranslatorcofo = {{oversat \lbx@lfromlang\addspace med kommentarer og forord af}%
+ {overs\adddot\ \lbx@sfromlang\addspace m\adddotspace komment\adddot\ og forord af}},
+ bytranslatorcoaf = {{oversat \lbx@lfromlang\addspace med kommentarer og epilog af}%
+ {overs\adddot\ \lbx@sfromlang\addspace m\adddotspace komment\adddot\ og epilog af}},
+ bytranslatoranin = {{oversat \lbx@lfromlang\addspace med annotering og indledning af}%
+ {overs\adddot\ \lbx@sfromlang\addspace m\adddotspace annot\adddot\ og indl\adddot\ af}},
+ bytranslatoranfo = {{oversat \lbx@lfromlang\addspace med annotering og forord af}%
+ {overs\adddot\ \lbx@sfromlang\addspace m\adddotspace annot\adddot\ og forord af}},
+ bytranslatoranaf = {{oversat \lbx@lfromlang\addspace med annotering og epilog af}%
+ {overs\adddot\ \lbx@sfromlang\addspace m\adddotspace annot\adddot\ og epilog af}},
+ and = {{og}{og}},
+ andothers = {{med flere}{m\adddot fl\adddot}},
+ andmore = {{med mere}{m\adddot m\adddot}},
+ volume = {{bind}{bd\adddot}},
+ volumes = {{bind}{bd\adddot}},
+ involumes = {{i}{i}},
+ jourvol = {{{\aa}rgang}{{\aa}rg\adddot}},
+ jourser = {{r{\ae}kke}{rk\adddot}},
+ book = {{bog}{bog}},
+ part = {{del}{del}},
+ issue = {{nummer}{nr\adddot}},
+ newseries = {{ny r{\ae}kke}{ny rk\adddot}},
+ oldseries = {{gammel r{\ae}kke}{gl. rk\adddot}},
+ edition = {{udgave}{udg\adddot}},
+ reprint = {{genoptryk}{genoptr\adddot}},
+ reprintof = {{genoptryk af}{genoptr\adddot\ af}},
+ reprintas = {{genoptryk under titlen}{genoptr\adddotspace under titlen}},
+ reprintfrom = {{genoptryk fra}{genoptr\adddotspace fra}},
+ translationof = {{overs{\ae}ttelse af}{overs\adddot\ af}},
+ translationas = {{oversat under titlen}{overs\adddotspace under titlen}},
+ translationfrom = {{oversat fra}{overs\adddotspace fra}},
+ reviewof = {{bed\o mmelse af}{bed\adddotspace af}},
+ origpubas = {{oprindeligt udgivet som}{opr\adddot\ udg\adddot\ som}},
+ origpubin = {{oprindeligt udgivet i}{opr\adddot\ udg\adddot\ i}},
+ astitle = {{under titlen}{under titlen}},
+ bypublisher = {{af}{af}},
+ nodate = {{uden dato}{u\adddot d\adddot}},%CORRECT: uden dato, NOT: uden år.
+ page = {{side}{s\adddot}},
+ pages = {{side}{s\adddot}},%not pluralized in Danish. In the context: side 1–16. NOT: sider 1–16.
+ column = {{spalte}{sp\adddot}},
+ columns = {{spalte}{sp\adddot}},
+ line = {{linje}{l\adddot}},
+ lines = {{linje}{l\adddot}},
+ verse = {{vers}{v\adddot}},
+ verses = {{vers}{v\adddot}},
+ section = {{paragraf}{par\adddot}},
+ sections = {{paragraf}{par\adddot}},
+ paragraph = {{afsnit}{afsn\adddot}},
+ paragraphs = {{afsnit}{afsn\adddot}},
+ pagetotal = {{side}{s\adddot}},
+ pagetotals = {{sider}{s\adddot}},
+ columntotal = {{spalte}{sp\adddot}},
+ columntotals = {{spalter}{sp\adddot}},
+ line = {{linje}{l\adddot}},
+ lines = {{linje}{l\adddot}},
+ verse = {{vers}{v\adddot}},
+ verses = {{vers}{v\adddot}},
+ linetotal = {{linje}{l\adddot}},
+ linetotals = {{linjer}{l\adddot}},
+ versetotal = {{vers}{v\adddot}},
+ versetotals = {{vers}{v\adddot}},
+ sectiontotal = {{sektion}{sekt\adddot}},
+ sectiontotals = {{sektioner}{sekt\adddot}},
+ paragraphtotal = {{afsnit}{afsn\adddot}},
+ paragraphtotals = {{afsnit}{afsn\adddot}},%
+ in = {{i}{i}},
+ inseries = {{i r{\ae}kken}{i rk\adddot}},
+ ofseries = {{fra r{\ae}kken}{fra rk\adddot}},
+ number = {{nummer}{nr\adddot}},
+ % numbers = {{numre}{nr\adddot}},%It is unclear where it comes from and what it is for. undefined variable and thus gives an xkeyval error.
+ chapter = {{kapitel}{kap\adddot}},
+ bathesis = {{Bachelorafhandling}{Bachelorafh\adddot}},
+ mathesis = {{Masterafhandling}{Masterafh\adddot}},
+ phdthesis = {{PhD-afhandling}{PhD-afh\adddot}},
+ candthesis = {{Kandidatspeciale}{Kand\adddotspace spec\adddot}},
+ resreport = {{forskningsrapport}{forskningsrap\adddot}},
+ techreport = {{teknisk rapport}{tekn.\adddot\ rapp\adddot}},
+ software = {{software}{software}},
+ datacd = {{data-cd}{data-cd}},
+ audiocd = {{lyd-cd}{lyd-cd}},
+ version = {{version}{vers\adddot}},
+ url = {{webadresse}{webadr\adddot}},
+ urlfrom = {{tilg{\ae}ngelig fra}{tilg\adddotspace fra}},
+ urlseen = {{hentet}{hentet}},%retrieved date
+ inpreparation = {{under udarbejdelse}{under udarb\adddot}},
+ submitted = {{indleveret}{indlev\adddot}},
+ forthcoming = {{under udgivelse}{under udgiv\adddot}},
+ inpress = {{i trykken}{i trykken}},
+ prepublished = {{pr{\ae}publiceret}{pr{\ae}publ\adddot}},
+ citedas = {{herefter citeret som}{herefter cit\adddot\ som}},
+ thiscite = {{her}{her}},
+ seenote = {{se note}{se note}},
+ quotedin = {{citeret efter}{cit\adddot\ efter}},
+ idem = {{den samme}{d\adddot s\adddot}},
+ idemsf = {{den samme}{d\adddot s\adddot}},
+ idemsm = {{den samme}{d\adddot s\adddot}},
+ idemsn = {{det samme}{d\adddot s\adddot}},
+ idempf = {{de samme}{d\adddot s\adddot}},
+ idempm = {{de samme}{d\adddot s\adddot}},
+ idempn = {{de samme}{d\adddot s\adddot}},
+ idempp = {{de samme}{d\adddot s\adddot}},
+ ibidem = {{ibidem}{ibid\adddot}},
+ opcit = {{op\adddotspace cit\adddot}{op\adddotspace cit\adddot}},
+ loccit = {{loc\adddotspace cit\adddot}{loc\adddotspace cit\adddot}},
+ confer = {{j{\ae}vnf{\o}r}{jf\adddot}},
+ sequens = {{f\adddot}{f\adddot}},
+ sequentes = {{ff\adddot}{ff\adddot}},
+ passim = {{passim}{pass\adddot}},
+ see = {{se}{s\adddot}},
+ seealso = {{se ogs{\aa}}{se ogs{\aa}}},
+ backrefpage = {{se side}{se s\adddot}},
+ backrefpages = {{se siderne}{se s\adddot}},
+ january = {{januar}{jan\adddot}},
+ february = {{februar}{feb\adddot}},
+ march = {{marts}{mar\adddot}},
+ april = {{april}{apr\adddot}},
+ may = {{maj}{maj}},
+ june = {{juni}{jun\adddot}},
+ july = {{juli}{jul\adddot}},
+ august = {{august}{aug\adddot}},
+ september = {{september}{sep\adddot}},
+ october = {{oktober}{okt\adddot}},
+ november = {{november}{nov\adddot}},
+ december = {{december}{dec\adddot}},
+ langamerican = {{amerikansk-engelsk}{amerikansk-engelsk}},
+ langbrazilian = {{brasiliansk-portugisisk}{brasiliansk-portugisisk}},
+ langbulgarian = {{bulgarsk}{bulgarsk}},
+ langcatalan = {{katalansk}{katalansk}},
+ langcroatian = {{kroatisk}{kroatisk}},
+ langczech = {{tjekkisk}{tjekkisk}},
+ langdanish = {{dansk}{dansk}},
+ langdutch = {{nederlandsk}{nederlandsk}},
+ langenglish = {{engelsk}{engelsk}},
+ langestonian = {{estisk}{estisk}},
+ langfinnish = {{finsk}{finsk}},
+ langfrench = {{fransk}{fransk}},
+ langgalician = {{galicisk}{galicisk}},
+ langgerman = {{tysk}{tysk}},
+ langgreek = {{gr{\ae}sk}{gr{\ae}sk}},
+ langhungarian = {{ungarsk}{ungarsk}},
+ langitalian = {{italiensk}{italiensk}},
+ langjapanese = {{japansk}{japansk}},
+ langlatin = {{latin}{latin}},
+ langlatvian = {{lettisk}{lettisk}},
+ langnorwegian = {{norsk}{norsk}},
+ langpolish = {{polsk}{polsk}},
+ langportuguese = {{portugisisk}{portugisisk}},
+ langrussian = {{russisk}{russisk}},
+ langslovak = {{slovakisk}{slovakisk}},
+ langslovene = {{slovensk}{slovensk}},
+ langspanish = {{spansk}{spansk}},
+ langswedish = {{svensk}{svensk}},
+ langukrainian = {{ukrainsk}{ukrainsk}},
+ fromamerican = {{fra amerikansk-engelsk}{fra amerikansk-engelsk}},
+ frombrazilian = {{fra brasiliansk-portugisisk}{fra brasiliansk-portugisisk}},
+ frombulgarian = {{fra bulgarsk}{fra bulgarsk}},
+ fromcatalan = {{fra katalansk}{fra katalansk}},
+ fromcroatian = {{fra kroatisk}{fra kroatisk}},
+ fromczech = {{fra tjekkisk}{fra tjekkisk}},
+ fromdanish = {{fra dansk}{fra dansk}},
+ fromdutch = {{fra nederlandsk}{fra nederlandsk}},
+ fromenglish = {{fra engelsk}{fra engelsk}},
+ fromestonian = {{fra estisk}{fra estisk}},
+ fromfinnish = {{fra finsk}{fra finsk}},
+ fromfrench = {{fra fransk}{fra fransk}},
+ fromgalician = {{fra galicisk}{fra galicisk}},
+ fromgerman = {{fra tysk}{fra tysk}},
+ fromgreek = {{fra gr{\ae}sk}{fra gr{\ae}sk}},
+ fromhungarian = {{fra ungarsk}{fra ungarsk}},
+ fromitalian = {{fra italiensk}{fra italiensk}},
+ fromjapanese = {{fra japansk}{fra japansk}},
+ fromlatin = {{fra latin}{fra latin}},
+ fromlatvian = {{fra lettisk}{fra lettisk}},
+ fromnorwegian = {{fra norsk}{fra norsk}},
+ frompolish = {{fra polsk}{fra polsk}},
+ fromportuguese = {{fra portugisisk}{fra portugisisk}},
+ fromrussian = {{fra russisk}{fra russisk}},
+ fromslovak = {{fra slovakisk}{fra slovakisk}},
+ fromslovene = {{fra slovensk}{fra slovensk}},
+ fromspanish = {{fra spansk}{fra spansk}},
+ fromswedish = {{fra svensk}{fra svensk}},
+ fromukrainian = {{fra ukrainsk}{fra ukrainsk}},
+ countryde = {{Tyskland}{DE}},
+ countryeu = {{Europ{\ae}iske Union}{EU}},
+ countryep = {{Europ{\ae}iske Union}{EP}},%must be wrong. Does this refer to European Parliament or European Patent?
+ countryfr = {{Frankrig}{FR}},
+ countryuk = {{Storbritannien}{GB}},
+ countryus = {{USA}{US}},
+ patent = {{patent}{pat\adddot}},
+ patentde = {{DE-patent}{DE-pat\adddot}},
+ patenteu = {{EU-patent}{EU-pat\adddot}},
+ patentfr = {{FR-patent}{FR-pat\adddot}},
+ patentuk = {{UK-patent}{UK-pat\adddot}},
+ patentus = {{US-patent}{US-pat\adddot}},
+ patreq = {{patentans{\o}gning}{pat\adddot\ ans{\o}gn\adddot}},
+ patreqde = {{tysk patentans{\o}gning}{tysk pat\adddot\ ans{\o}gn\adddot}},
+ patreqeu = {{europ{\ae}isk patentans{\o}gning}{EU-pat\adddot\ ans{\o}gn\adddot}},
+ patreqfr = {{fransk patentans{\o}gning}{fransk pat\adddot\ ans{\o}gn\adddot}},
+ patrequk = {{britisk patentans{\o}gning}{brit\adddot\ pat\adddot\ ans{\o}gn\adddot}},
+ patrequs = {{amerikansk patentans{\o}gning}{am\adddot\ pat\adddot\ ans{\o}gn\adddot}},
+ file = {{fil}{fil}},
+ library = {{bibliotek}{bibl\adddot}},
+ abstract = {{Abstract}{Abstract}},%akademically it is an abstract and not a "resumé". They are not the same thing.
+ annotation = {{kommentarer}{komment\adddot}},
+ commonera = {{efter vor tidsregning}{e\adddot v\adddot t\adddot}},
+ beforecommonera = {{f{\o}r vor tidsregning}{f\adddot v\adddot t\adddot}},
+ annodomini = {{efter Kristi f{\o}dsel}{e\adddot Kr\adddot}},
+ beforechrist = {{f{\o}r Kristi f{\o}dsel}{f\adddot Kr\adddot}},
+ circa = {{cirka}{ca\adddot}},
+ spring = {{for{\aa}r}{for{\aa}r}},
+ summer = {{sommer}{sommer}},
+ autumn = {{efter{\aa}r}{efter{\aa}r}},
+ winter = {{vinter}{vinter}},
+ springN = {{for{\aa}r, nordlige halvkugle}{for{\aa}r, nordlige halvkugle}},
+ summerN = {{sommer, nordlige halvkugle}{sommer, nordlige halvkugle}},
+ autumnN = {{efter{\aa}r, nordlige halvkugle}{efter{\aa}r, nordlige halvkugle}},
+ winterN = {{vinter, nordlige halvkugle}{vinter, nordlige halvkugle}},
+ springS = {{for{\aa}r, sydlige halvkugle}{for{\aa}r, sydlige halvkugle}},
+ summerS = {{sommer, sydlige halvkugle}{sommer, sydlige halvkugle}},
+ autumnS = {{efter{\aa}r, sydlige halvkugle}{efter{\aa}r, sydlige halvkugle}},
+ winterS = {{vinter, sydlige halvkugle}{vinter, sydlige halvkugle}},
+ Q1 = {{1\adddot~kvartal}{Q1}},
+ Q2 = {{2\adddot~kvartal}{Q2}},
+ Q3 = {{3\adddot~kvartal}{Q3}},
+ Q4 = {{4\adddot~kvartal}{Q4}},
+ QD1 = {{1\adddot~kvarter}{Q1}},%reference to academic quadrimesters, in Danish: kvarter, akademisk kvarter.
+ QD2 = {{2\adddot~kvarter}{Q2}},
+ QD3 = {{3\adddot~kvarter}{Q3}},
+ S1 = {{1\adddot~halv{\aa}r}{H1}},%or 1.~semester
+ S2 = {{2\adddot~halv{\aa}r}{H2}},%or 2.~semester
+ am = {{formiddag}{formiddag}},
+ pm = {{eftermiddag}{eftermiddag}},
+}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/lbx/dutch-ms.lbx b/macros/latex/contrib/biblatex-ms/latex/lbx/dutch-ms.lbx
new file mode 100644
index 0000000000..58c1f981d4
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/lbx/dutch-ms.lbx
@@ -0,0 +1,573 @@
+\ProvidesFile{dutch-ms.lbx}
+[\abx@lbxid]
+
+% Changes:
+% 2010-10-31 Update by Alexander van Loon
+% 2011-08-27 Update by Pieter Belmans
+
+\DeclareRedundantLanguages{dutch}{dutch}
+
+\DeclareBibliographyExtras{%
+ \protected\def\bibrangedash{%
+ \textendash\penalty\hyphenpenalty}% breakable dash
+ \let\finalandcomma=\empty
+ \let\finalandsemicolon=\empty
+ % both ordinal numbers are valid, the first is the most basic: 1e, 2e, 19e
+ % whereas the second is capable of typesetting 1ste, 2de, 21ste, 102de
+ % \protected\def\mkbibordinal#1{\stripzeros{#1}e}%
+ \protected\def\mkbibordinal#1{%
+ \begingroup
+ \@tempcnta0#1\relax\number\@tempcnta
+ \@whilenum\@tempcnta>100\do{\advance\@tempcnta-100\relax}%
+ \ifnum\@tempcnta>19
+ ste%
+ \else
+ \ifnum\@tempcnta=1
+ ste%
+ \else
+ \ifnum\@tempcnta=8 ste\else de\fi
+ \fi
+ \fi
+ \endgroup}%
+ \protected\def\mkbibmascord{\mkbibordinal}%
+ \protected\def\mkbibfemord{\mkbibordinal}%
+ \protected\def\mkbibneutord{\mkbibordinal}%
+ \protected\def\mkbibdatelong#1#2#3{%
+ \iffieldundef{#3}
+ {}
+ {\stripzeros{\thefield{#3}}%
+ \iffieldundef{#2}{}{\nobreakspace}}%
+ \iffieldundef{#2}
+ {}
+ {\mkbibmonth{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}}%
+ \iffieldbibstring{#1}
+ {\bibstring{\thefield{#1}}}
+ {\dateeraprintpre{#1}\stripzeros{\thefield{#1}}}}%
+ \protected\def\mkbibdateshort#1#2#3{%
+ \iffieldundef{#3}
+ {}
+ {\mkdayzeros{\thefield{#3}}%
+ \iffieldundef{#2}{}{\mbox{-}}}%
+ \iffieldundef{#2}
+ {}
+ {\mkmonthzeros{\thefield{#2}}%
+ \iffieldundef{#1}{}{\mbox{-}}}%
+ \iffieldbibstring{#1}
+ {\bibstring{\thefield{#1}}}
+ {\dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}}%
+ \expandafter\protected\expandafter\def\csname mkbibtime24h\endcsname#1#2#3#4{%
+ \iffieldundef{#1}
+ {}
+ {\mktimezeros{\thefield{#1}}%
+ \iffieldundef{#2}{}{\bibtimesep}}%
+ \iffieldundef{#2}
+ {}
+ {\mktimezeros{\thefield{#2}}%
+ \iffieldundef{#3}{}{\bibtimesep}}%
+ \iffieldundef{#3}
+ {}
+ {\mktimezeros{\thefield{#3}}}%
+ \iffieldundef{#4}{}
+ {\bibtimezonesep
+ \mkbibtimezone{\thefield{#4}}}}%
+ \expandafter\protected\expandafter\def\csname mkbibtime12h\endcsname#1#2#3#4{%
+ \stripzeros{\mktimehh{\thefield{#1}}}\bibtimesep
+ \forcezerosmdt{\thefield{#2}}%
+ \iffieldundef{#3}{}
+ {\bibtimesep
+ \forcezerosmdt{\thefield{#3}}}%
+ \space
+ \ifnumless{\thefield{#1}}{12}
+ {\bibstring{am}}
+ {\bibstring{pm}}%
+ \iffieldundef{#4}{}
+ {\space\bibtimezonesep
+ \parentext{\mkbibtimezone{\thefield{#4}}}}}%
+ \protected\def\mkbibyeardivisiondateshort#1#2{%
+ \mkbibyeardivision{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}%
+ \dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}%
+ \protected\def\mkbibyeardivisiondatelong#1#2{%
+ \mkbibyeardivision{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}%
+ \dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}%
+}
+
+\DeclareBibliographyStrings{%
+ bibliography = {{Bibliografie}{Bibliografie}},
+ references = {{Referenties}{Referenties}},
+ shorthands = {{Lijst van afkortingen}{Afkortingen}},
+ editor = {{redacteur}{red\adddot}},
+ editors = {{redacteurs}{red\adddot}},
+ compiler = {{samensteller}{samenst\adddot}},
+ compilers = {{samenstellers}{samenst\adddot}},
+ founder = {{oprichter}{opr\adddot}},
+ founders = {{oprichters}{opr\adddot}},
+ continuator = {{opvolger}{opv\adddot}},
+ continuators = {{opvolgers}{opv\adddot}},
+ redactor = {{redacteur}{red\adddot}},
+ redactors = {{redacteuren}{red\adddot}},
+ reviser = {{revisor}{rev\adddot}},
+ revisers = {{revisors}{rev\adddot}},
+ collaborator = {{medewerker}{med\adddot}},
+ collaborators = {{medewerkers}{med\adddot}},
+ translator = {{vertaler}{vert\adddot}},
+ translators = {{vertalers}{vert\adddot}},
+ commentator = {{commentator}{comm\adddot}},
+ commentators = {{commentatoren}{comm\adddot}},
+ annotator = {{annotator}{annot\adddot}},
+ annotators = {{annotatoren}{annot\adddot}},
+ editortr = {{redacteur en vertaler}%
+ {red\adddotspace en vert\adddot}},
+ editorstr = {{redacteuren en vertalers}%
+ {red\adddotspace en vert\adddot}},
+ editorco = {{redacteur en commentator}%
+ {red\adddotspace en comm\adddot}},
+ editorsco = {{redacteuren en commentatoren}%
+ {red\adddotspace en comm\adddot}},
+ editoran = {{redacteur en annotator}%
+ {red\adddotspace en annot\adddot}},
+ editorsan = {{redacteuren en annotatoren}%
+ {red\adddotspace en annot\adddot}},
+ editorin = {{redactie en inleiding}%
+ {red\adddotspace en inl\adddot}},
+ editorsin = {{redacteuren en inleiding}%
+ {red\adddotspace en inl\adddot}},
+ editorfo = {{redacteur en voorwoord}%
+ {red\adddotspace en voorw\adddot}},
+ editorsfo = {{redacteuren en voorwoord}%
+ {red\adddotspace en voorw\adddot}},
+ editoraf = {{redacteur en nawoord}%
+ {red\adddotspace en naw\adddot}},
+ editorsaf = {{redacteuren en nawoord}%
+ {red\adddotspace en naw\adddot}},
+ editortrco = {{redacteur, vertaler en commentator}%
+ {red.,\addabbrvspace vert\adddotspace en comm\adddot}},
+ editorstrco = {{redacteuren, vertalers en commentatoren}%
+ {red.,\addabbrvspace vert\adddotspace en comm\adddot}},
+ editortran = {{redacteur, vertaler en annotator}%
+ {red.,\addabbrvspace vert\adddotspace en annot\adddot}},
+ editorstran = {{redacteur, vertalers en annotatoren}%
+ {red.,\addabbrvspace vert\adddotspace en annot\adddot}},
+ editortrin = {{redacteur, vertaler en inleiding}%
+ {red.,\addabbrvspace vert\adddotspace en inl\adddot}},
+ editorstrin = {{redacteuren, vertalers en inleiding}%
+ {red.,\addabbrvspace vert\adddotspace en inl\adddot}},
+ editortrfo = {{redacteur, vertaler en voorwoord}%
+ {red.,\addabbrvspace vert\adddotspace en voorw\adddot}},
+ editorstrfo = {{redacteuren, vertalers en voorwoord}%
+ {red.,\addabbrvspace vert\adddotspace en voorw\adddot}},
+ editortraf = {{redacteur, vertaler en nawoord}%
+ {red.,\addabbrvspace vert\adddotspace en naw\adddot}},
+ editorstraf = {{redacteuren, vertalers en nawoord}%
+ {red.,\addabbrvspace vert\adddotspace en naw\adddot}},
+ editorcoin = {{redacteur, commentator en inleiding}%
+ {red.,\addabbrvspace comm\adddotspace en inl\adddot}},
+ editorscoin = {{redacteuren, commentatoren en inleiding}%
+ {red.,\addabbrvspace comm\adddotspace en inl\adddot}},
+ editorcofo = {{redacteur, commentator en voorwoord}%
+ {red.,\addabbrvspace comm\adddotspace en voorw\adddot}},
+ editorscofo = {{redacteuren, commentatoren en voorwoord}%
+ {red.,\addabbrvspace comm\adddotspace en voorw\adddot}},
+ editorcoaf = {{redacteur, commentator en nawoord}%
+ {red.,\addabbrvspace comm\adddotspace en naw\adddot}},
+ editorscoaf = {{redacteuren, commentatoren en nawoord}%
+ {red.,\addabbrvspace comm\adddotspace en naw\adddot}},
+ editoranin = {{redacteur, annotator en inleiding}%
+ {red.,\addabbrvspace annot\adddotspace en inl\adddot}},
+ editorsanin = {{redacteuren, annotatoren en inleiding}%
+ {red.,\addabbrvspace annot\adddotspace en inl\adddot}},
+ editoranfo = {{redacteur, annotator en voorwoord}%
+ {red.,\addabbrvspace annot\adddotspace en voorw\adddot}},
+ editorsanfo = {{redacteuren, annotatoren en voorwoord}%
+ {red.,\addabbrvspace annot\adddotspace en voorw\adddot}},
+ editoranaf = {{redacteur, annotator en nawoord}%
+ {red.,\addabbrvspace annot\adddotspace en nawoord\adddot}},
+ editorsanaf = {{redacteuren, annotatoren en nawoord}%
+ {red.,\addabbrvspace annot\adddotspace en naw\adddot}},
+ editortrcoin = {{redacteur, vertaler, commentator en inleiding}%
+ {red.,\addabbrvspace vert., comm\adddotspace en inl\adddot}},
+ editorstrcoin = {{redacteuren, vertalers, commentatoren en inleiding}%
+ {red.,\addabbrvspace vert., comm\adddotspace en inl\adddot}},
+ editortrcofo = {{redacteur, vertaling, commentator en voorwoord}%
+ {red.,\addabbrvspace vert., comm\adddotspace en voorw\adddot}},
+ editorstrcofo = {{redacteuren, vertalers, commentatoren en voorwoord}%
+ {red.,\addabbrvspace vert., comm\adddotspace en voorw\adddot}},
+ editortrcoaf = {{redacteur, vertaler, commentator en nawoord}%
+ {red.,\addabbrvspace vert., comm\adddotspace en naw\adddot}},
+ editorstrcoaf = {{redacteuren, vertalers, commentators en nawoord}%
+ {red.,\addabbrvspace vert., comm\adddotspace en naw\adddot}},
+ editortranin = {{redacteur, vertaler, annotator en inleiding}%
+ {red.,\addabbrvspace vert., annot\adddotspace en inl\adddot}},
+ editorstranin = {{redacteuren, vertalers, annotatoren en inleiding}%
+ {red.,\addabbrvspace vert., annot\adddotspace en inl\adddot}},
+ editortranfo = {{redacteur, vertaler, annotator en voorwoord}%
+ {red.,\addabbrvspace vert., annot\adddotspace en voorw\adddot}},
+ editorstranfo = {{redacteuren, vertalers, annotatoren en voorwoord}%
+ {red.,\addabbrvspace vert., annot\adddotspace en voorw\adddot}},
+ editortranaf = {{redacteur, vertaler, annotator en nawoord}%
+ {red.,\addabbrvspace vert., annot\adddotspace en naw\adddot}},
+ editorstranaf = {{redacteuren, vertalers, annotatoren en nawoord}%
+ {red.,\addabbrvspace vert., annot\adddotspace en naw\adddot}},
+ translatorco = {{vertaler en commentator}%
+ {vert\adddotspace en comm\adddot}},
+ translatorsco = {{vertalers en commentatoren}%
+ {vert\adddotspace en comm\adddot}},
+ translatoran = {{vertaler en annotator}%
+ {vert\adddotspace en annot\adddot}},
+ translatorsan = {{vertalers en annotatoren}%
+ {vert\adddotspace en annot\adddot}},
+ translatorin = {{vertaling en inleiding}%
+ {vert\adddotspace en inl\adddot}},
+ translatorsin = {{vertaling en inleiding}%
+ {vert\adddotspace en inl\adddot}},
+ translatorfo = {{vertaling en voorwoord}%
+ {vert\adddotspace en voorw\adddot}},
+ translatorsfo = {{vertaling en voorwoord}%
+ {vert\adddotspace en voorw\adddot}},
+ translatoraf = {{vertaling en nawoord}%
+ {vert\adddotspace en naw\adddot}},
+ translatorsaf = {{vertaling en nawoord}%
+ {vert\adddotspace en naw\adddot}},
+ translatorcoin = {{vertaling, commentaar en inleiding}%
+ {vert., comm\adddotspace en inl\adddot}},
+ translatorscoin = {{vertaling, commentaar en inleiding}%
+ {vert., comm\adddotspace en inl\adddot}},
+ translatorcofo = {{vertaling, commentaar en voorwoord}%
+ {vert., comm\adddotspace en voorwoord\adddot}},
+ translatorscofo = {{vertaling, commentaar en voorwoord}%
+ {vert., comm\adddotspace en voorw\adddot}},
+ translatorcoaf = {{vertaling, commentaar en nawoord}%
+ {vert., comm\adddotspace en naw\adddot}},
+ translatorscoaf = {{vertaling, commentaar en nawoord}%
+ {vert., comm\adddotspace en naw\adddot}},
+ translatoranin = {{vertaling, annotaties en inleiding}%
+ {vert., annot\adddotspace en inl\adddot}},
+ translatorsanin = {{vertaling, annotaties en inleiding}%
+ {vert., annot\adddotspace en inl\adddot}},
+ translatoranfo = {{vertaling, annotaties en voorwoord}%
+ {vert., annot\adddotspace en voorw\adddot}},
+ translatorsanfo = {{vertaling, annotaties en voorwoord}%
+ {vert., annot\adddotspace en voorw\adddot}},
+ translatoranaf = {{vertaling, annotaties en nawoord}%
+ {vert., annot\adddotspace en naw\adddot}},
+ translatorsanaf = {{vertaling, annotaties en nawoord}%
+ {vert., annot\adddotspace en naw\adddot}},
+% organizer = {{}{}},% FIXME: missing
+% organizers = {{}{}},% FIXME: missing
+% byorganizer = {{}{}},% FIXME: missing
+ byauthor = {{door}{door}},
+ byeditor = {{geredigeerd door}{red\adddot\addabbrvspace door}},
+ bycompiler = {{samengesteld door}{sam\adddot\addabbrvspace door}},
+ byfounder = {{opgericht door}{opger\adddot\addabbrvspace door}},
+ bycontinuator = {{opgevolgd door}{opgev\adddot\addabbrvspace door}},
+ byredactor = {{geredigeerd door}{red\adddotspace door}},
+ byreviser = {{gereviseerd door}{gerevis\adddot\addabbrvspace door}},
+ byreviewer = {{nagekeken door}{nagek\adddot\addabbrvspace door}},
+ bycollaborator = {{met medewerking van}{m\adddot m\adddot v}},
+ bytranslator = {{vertaald \lbx@lfromlang\ door}{vert\adddotspace \lbx@lfromlang\ door}},
+ bycommentator = {{becommentarieerd door}{comm\adddotspace door}},
+ byannotator = {{geannoteerd door}{annot\adddotspace door}},
+ byeditortr = {{geredigeerd en vertaald \lbx@lfromlang\ door}%
+ {red\adddotspace en vert\adddotspace \lbx@sfromlang\ door}},
+ byeditorco = {{geredigeerd en becommentarieerd door}%
+ {red\adddotspace en comm\adddotspace door}},
+ byeditoran = {{geredigeerd en geannoteerd door}%
+ {red\adddotspace en annot\adddotspace door}},
+ byeditorin = {{geredigeerd, met een inleiding, van}%
+ {red., met een inl., van}},
+ byeditorfo = {{geredigeerd, met een voorwoord, van}%
+ {red., met een voorw., van}},
+ byeditoraf = {{geredigeerd, met een nawoord, van}%
+ {red., met een naw., van}},
+ byeditortrco = {{geredigeerd, vertaald \lbx@lfromlang\ en becommentarieerd door}%
+ {red., vert\adddotspace \lbx@sfromlang\ en comm\adddotspace door}},
+ byeditortran = {{geredigeerd, vertaald \lbx@lfromlang\ en geannoteerd door}%
+ {red., vert\adddotspace \lbx@sfromlang\ en annot\adddotspace door}},
+ byeditortrin = {{geredigeerd en vertaald \lbx@lfromlang, met een inleiding, door}%
+ {red\adddotspace en vert\adddotspace \lbx@sfromlang, met een inl., door}},
+ byeditortrfo = {{geredigeerd en vertaald \lbx@lfromlang, met een voorwoord, door}%
+ {red\adddotspace en vert\adddotspace \lbx@sfromlang, met een voorw., door}},
+ byeditortraf = {{geredigeerd en vertaald \lbx@lfromlang, met een nawoord, door}%
+ {red\adddotspace en vert\adddotspace \lbx@sfromlang, met een naw., door}},
+ byeditorcoin = {{geredigeerd en becommentarieerd, met een inleiding, door}%
+ {red\adddotspace en comm., met een inl., door}},
+ byeditorcofo = {{geredigeerd en becommentarieerd, met een voorwoord, door}%
+ {red\adddotspace en comm., met een voorw., door}},
+ byeditorcoaf = {{geredigeerd en becommentarieerd, met een nawoord, door}%
+ {red\adddotspace en comm., met een naw., door}},
+ byeditoranin = {{geredigeerd en geannoteerd, met een inleiding, door}%
+ {red\adddotspace en annot., met een inl., door}},
+ byeditoranfo = {{geredigeerd en geannoteerd, met een voorwoord, door}%
+ {red\adddotspace en annot., met een voorw., door}},
+ byeditoranaf = {{geredigeerd en geannoteerd, met een nawoord, door}%
+ {red\adddotspace en annot., met een naw., door}},
+ byeditortrcoin = {{geredigeerd, vertaald \lbx@lfromlang\ en becommentarieerd, met een inleiding, door}%
+ {red., vert\adddotspace \lbx@sfromlang\ en comm., met een inl., door}},
+ byeditortrcofo = {{geredigeerd, vertaald \lbx@lfromlang\ en becommentarieerd, met een voorwoord, door}%
+ {red., vert\adddotspace \lbx@sfromlang\ en comm., met een voorw., door}},
+ byeditortrcoaf = {{geredigeerd, vertaald \lbx@lfromlang\ en becommentarieerd, met een nawoord, door}%
+ {red., vert\adddotspace \lbx@sfromlang\ en comm., met een naw., door}},
+ byeditortranin = {{geredigeerd, vertaald \lbx@lfromlang\ en geannoteerd, met een inleiding, door}%
+ {red., vert\adddotspace \lbx@sfromlang\ en annot., met een inl., door}},
+ byeditortranfo = {{geredigeerd, vertaald \lbx@lfromlang\ en geannoteerd, met een voorwoord, door}%
+ {red., vert\adddotspace \lbx@sfromlang\ en annot., met een voorw., door}},
+ byeditortranaf = {{geredigeerd, vertaald \lbx@lfromlang\ en geannoteerd, met een nawoord, door}%
+ {red., vert\adddotspace \lbx@sfromlang\ en annot., met een naw., door}},
+ bytranslatorco = {{vertaald \lbx@lfromlang\ en becommentarieerd door}%
+ {vert\adddotspace \lbx@sfromlang\ en comm\adddotspace door}},
+ bytranslatoran = {{vertaald \lbx@lfromlang\ en geannoteerd door}%
+ {vert\adddotspace \lbx@sfromlang\ en annot.\adddotspace door}},
+ bytranslatorin = {{vertaald \lbx@lfromlang, met een inleiding, door}%
+ {vert\adddotspace \lbx@sfromlang, met een inl., door}},
+ bytranslatorfo = {{vertaald \lbx@lfromlang, met een voorwoord, door}%
+ {vert\adddotspace \lbx@sfromlang, met een voorw., door}},
+ bytranslatoraf = {{vertaald \lbx@lfromlang, met een nawoord, door}%
+ {vert\adddotspace \lbx@sfromlang, met een naw., door}},
+ bytranslatorcoin = {{vertaald \lbx@lfromlang\ en becommentarieerd, met een inleiding, door}%
+ {vert\adddotspace \lbx@sfromlang\ en comm., met een inl., door}},
+ bytranslatorcofo = {{vertaald \lbx@lfromlang\ en becommentarieerd, met een voorwoord, door}%
+ {vert\adddotspace \lbx@sfromlang\ en comm., met een voorw., door}},
+ bytranslatorcoaf = {{vertaald \lbx@lfromlang\ en becommentarieerd, met een nawoord, door}%
+ {vert\adddotspace \lbx@sfromlang\ en comm., met een naw., door}},
+ bytranslatoranin = {{vertaald \lbx@lfromlang\ en geannoteerd, met een inleiding, door}%
+ {vert\adddotspace \lbx@sfromlang\ en annot., met een inl., door}},
+ bytranslatoranfo = {{vertaald \lbx@lfromlang\ en geannoteerd, met een voorwoord, door}%
+ {vert\adddotspace \lbx@sfromlang\ en annot., met een voorw., door}},
+ bytranslatoranaf = {{vertaald \lbx@lfromlang\ en geannoteerd, met een nawoord, door}%
+ {vert\adddotspace \lbx@sfromlang\ en annot., met een naw., door}},
+ withcommentator = {{met een commentaar van}{met een comm\adddotspace van}},
+ withannotator = {{met annotaties door}{met annot\adddotspace door}},
+ withintroduction = {{met een inleiding van}{met een inl\adddotspace van}},
+ withforeword = {{met een voorwoord van}{met een voorw\adddotspace van}},
+ withafterword = {{met een nawoord van}{met een naw\adddotspace van}},
+ commentary = {{commentaar}{comm\adddot}},
+ annotations = {{annotaties}{annot\adddot}},
+ introduction = {{inleiding}{inl\adddot}},
+ foreword = {{voorwoord}{voorw\adddot}},
+ afterword = {{nawoord}{naw\adddot}},
+ volume = {{deel}{deel}},
+ volumes = {{delen}{delen}},
+ jourvol = {{jaargang}{jrg\adddot}},
+ jourser = {{reeks}{reeks}},
+ book = {{boek}{boek}},
+ part = {{deel}{deel}},
+ issue = {{nummer}{nr\adddot}},
+ newseries = {{nieuwe reeks}{nieuwe reeks}},
+ oldseries = {{oude reeks}{oude reeks}},
+ edition = {{editie}{ed\adddot}},
+ in = {{in}{in}},
+ inseries = {{in}{in}},
+ ofseries = {{van}{van}},
+ number = {{nummer}{nr\adddot}},
+ chapter = {{hoofdstuk}{hfdstk\adddot}},
+ version = {{versie}{versie}},
+ reprint = {{herdruk}{herdr\adddot}},
+ reprintof = {{herdruk van}{herdr\adddotspace van}},
+ reprintas = {{herdrukt als}{herdr\adddotspace als}},
+ reprintfrom = {{herdrukt uit}{herdr\adddotspace uit}},
+ translationof = {{vertaling van}{vert\adddotspace van}},
+ translationas = {{vertaald als}{vert\adddotspace als}},
+ translationfrom = {{vertaald van}{vert\adddotspace van}},
+ reviewof = {{bespreking van}{bespr\adddotspace van}},
+ origpubas = {{oorspronkelijk gepubliceerd als}{oorspr\adddotspace gep\adddotspace als}},
+ origpubin = {{oorspronkelijk gepubliceerd in}{oorspr\adddotspace gep\adddotspace in}},
+ astitle = {{als}{als}},% FIXME: check
+ bypublisher = {{door}{door}},% FIXME: check
+ inpreparation = {{in voorbereiding}{in voorbereiding}},
+ submitted = {{ingediend}{ingedied}},
+% forthcoming = {{onderweg}{onderweg}},% FIXME: check
+ inpress = {{in druk}{in druk}},
+ prepublished = {{voorpublicatie}{voorpublicatie}},
+ nodate = {{geen\space datum}{{}g\adddot d\adddot}},
+ page = {{pagina}{p\adddot}},
+ pages = {{pagina's}{p\adddot}},
+ column = {{kolom}{kol\adddot}},
+ columns = {{kolommen}{kol\adddot}},
+ section = {{sectie}{\S}},
+ sections = {{secties}{\S}},
+ paragraph = {{paragraaf}{par\adddot}},
+ paragraphs = {{paragrafen}{par\adddot}},
+ verse = {{vers}{v\adddot}},
+ verses = {{verzen}{v\adddot}},
+ line = {{regel}{r\adddot}},
+ lines = {{regels}{r\adddot}},
+ pagetotal = {{pagina}{p\adddot}},
+ pagetotals = {{pagina's}{p\adddot}},
+ columntotal = {{kolom}{kol\adddot}},
+ columntotals = {{kolommen}{kol\adddot}},
+ linetotal = {{regel}{r\adddot}},
+ linetotals = {{regels}{r\adddot}},
+ versetotal = {{vers}{v\adddot}},
+ versetotals = {{verzen}{v\adddot}},
+ sectiontotal = {{sectie}{\S}},
+ sectiontotals = {{secties}{\S}},
+ paragraphtotal = {{paragraaf}{par\adddot}},
+ paragraphtotals = {{paragrafen}{par\adddot}},
+% bathesis = {{}{}},% FIXME: missing
+ mathesis = {{masterscriptie}{masterscriptie}},
+ phdthesis = {{proefschrift}{proefschrift}},
+ resreport = {{onderzoeksrapport}{onderzoeksrap\adddot}},
+ techreport = {{technisch rapport}{tech\adddotspace rap\adddot}},
+ software = {{computersoftware}{computersoft\adddot}},
+ datacd = {{cd-rom}{cd-rom}},
+ audiocd = {{audio-cd}{audio-cd}},
+ and = {{en}{en}},
+ andothers = {{en andere}{e\adddot a\adddot}},
+ andmore = {{en andere}{e\adddot a\adddot}},
+ url = {{adres}{adres}},
+ urlfrom = {{beschikbaar op}{beschikbaar op}},
+ urlseen = {{bezocht op}{bezocht op}},
+ file = {{bestand}{bestand}},
+ library = {{bibliotheek}{bibliotheek}},
+ abstract = {{samenvatting}{samenvatting}},
+ annotation = {{annotaties}{annotaties}},
+ idem = {{idem}{idem}},
+ idemsm = {{idem}{idem}},
+ idemsf = {{eadem}{eadem}},
+ idemsn = {{idem}{idem}},
+ idempm = {{eidem}{eidem}},
+ idempf = {{eaedem}{eaedem}},
+ idempn = {{eadem}{eadem}},
+ idempp = {{eidem}{eidem}},
+ ibidem = {{ibidem}{ibid\adddot}},
+ opcit = {{op\adddotspace cit\adddot}{op\adddotspace cit\adddot}},
+ loccit = {{loc\adddotspace cit\adddot}{loc\adddotspace cit\adddot}},
+ confer = {{cf\adddot}{cf\adddot}},
+ sequens = {{sq\adddot}{sq\adddot}},
+ sequentes = {{sqq\adddot}{sqq\adddot}},
+ passim = {{passim}{pass\adddot}},
+ see = {{zie}{zie}},
+ seealso = {{zie ook}{zie ook}},
+ seenote = {{zie voetnoot}{zie v\adddot}},
+ backrefpage = {{zie pagina}{zie pag\adddot}},
+ backrefpages = {{zie pagina's}{zie pag\adddot}},
+ quotedin = {{geciteerd in}{cit\adddotspace in}},
+ citedas = {{verder geciteerd als}{verder geciteerd als}},
+ thiscite = {{met name}{m.n\adddot}},
+ january = {{januari}{jan}},
+ february = {{februari}{feb}},
+ march = {{maart}{mrt}},
+ april = {{april}{apr}},
+ may = {{mei}{mei}},
+ june = {{juni}{jun}},
+ july = {{juli}{jul}},
+ august = {{augustus}{aug}},
+ september = {{september}{sep}},
+ october = {{oktober}{okt}},
+ november = {{november}{nov}},
+ december = {{december}{dec}},
+ langamerican = {{Amerikaans Engels}{Amerikaans Engels}},
+ langbrazilian = {{Braziliaans Portugeens}{Braziliaans Portugees}},
+ langbulgarian = {{Bulgaars}{Bulgaars}},
+ langcatalan = {{Catalaans}{Catalaans}},
+ langcroatian = {{Kroatisch}{Kroatisch}},
+ langczech = {{Tsjechisch}{Tsjechisch}},
+ langdanish = {{Deens}{Deens}},
+ langdutch = {{Nederlands}{Nederlands}},
+ langenglish = {{Engels}{Engels}},
+ langestonian = {{Estisch}{Estisch}},
+ langfinnish = {{Fins}{Fins}},
+ langfrench = {{Frans}{Frans}},
+ langgalician = {{Galicisch}{Galicisch}},
+ langgerman = {{Duits}{Duits}},
+ langgreek = {{Grieks}{Grieks}},
+ langhungarian = {{Hongaars}{Hongaars}},
+ langitalian = {{Italiaans}{Italiaans}},
+ langjapanese = {{Japaans}{Japaans}},
+ langlatin = {{Latijn}{Latijn}},
+ langlatvian = {{Lets}{Lets}},
+ langlithuanian = {{Litouws}{Litouws}},
+ langnorwegian = {{Noors}{Noors}},
+ langpolish = {{Pools}{Pools}},
+ langportuguese = {{Portugees}{Portugees}},
+ langrussian = {{Russisch}{Russisch}},
+ langserbian = {{Servisch}{Servisch}},
+ langslovak = {{Slowaaks}{Slowaaks}},% FIXME: or Slovaaks
+ langslovene = {{Sloveens}{Sloveens}},
+ langspanish = {{Spaans}{Spaans}},
+ langswedish = {{Zweeds}{Zweeds}},
+ langturkish = {{Turks}{Turks}},
+ langukrainian = {{Oekra\"iens}{Oekra\"iens}},
+ fromamerican = {{uit het Amerikaans Engels}{uit het Amerikaans Engels}},
+ frombrazilian = {{uit het Braziliaans Portugees}{uit het Braziliaans Portugees}},
+ frombulgarian = {{uit het Bulgaars}{uit het Bulgaars}},
+ fromcatalan = {{uit het Catalaans}{uit het Catalaans}},
+ fromcroatian = {{uit het Kroatisch}{uit het Kroatisch}},
+ fromczech = {{uit het Tsjechisch}{uit het Tsjechisch}},
+ fromdanish = {{uit het Deens}{uit het Deens}},
+ fromdutch = {{uit het Nederlands}{uit het Nederlands}},
+ fromenglish = {{uit het Engels}{uit het Engels}},
+ fromestonian = {{uit het Estisch}{uit het Estisch}},
+ fromfinnish = {{uit het Fins}{uit het Fins}},
+ fromfrench = {{uit het Frans}{uit het Frans}},
+ fromgalician = {{uit het Galicisch}{uit het Galicisch}},
+ fromgerman = {{uit het Duits}{uit het Duits}},
+ fromgreek = {{uit het Grieks}{uit het Grieks}},
+ fromhungarian = {{uit het Hongaars}{uit het Hongaars}},
+ fromitalian = {{uit het Italiaans}{uit het Italiaans}},
+ fromjapanese = {{uit het Japaans}{uit het Japaans}},
+ fromlatin = {{uit het Latijn}{uit het Latijn}},
+ fromlatvian = {{uit het Lets}{uit het Lets}},
+ fromlithuanian = {{uit het Litouws}{uit het Litouws}},
+ fromnorwegian = {{uit het Noors}{uit het Noors}},
+ frompolish = {{uit het Pools}{uit het Pools}},
+ fromportuguese = {{uit het Portugees}{uit het Portugees}},
+ fromrussian = {{uit het Russisch}{uit het Russisch}},
+ fromserbian = {{uit het Servisch}{uit het Servisch}},
+ fromslovak = {{uit het Slowaaks}{uit het Slowaaks}},% FIXME: or Slovaaks
+ fromslovene = {{uit het Sloveens}{uit het Sloveens}},
+ fromspanish = {{uit het Spaans}{uit het Spaans}},
+ fromswedish = {{uit het Zweeds}{uit het Zweeds}},
+ fromturkish = {{uit het Turks}{uit het Turks}},
+ fromukrainian = {{uit het Oekra\"iens}{uit het Oekra\"iens}},
+ countryde = {{Duitsland}{DE}},
+ countryeu = {{Europese Unie}{EU}},
+ countryep = {{Europese Unie}{EP}},
+ countryfr = {{Frankrijk}{FR}},
+ countryuk = {{Verenigd Koninkrijk}{VK}},
+ countryus = {{Verenigde Staten van Amerika}{VS}},
+ patent = {{patent}{pat\adddot}},
+ patentde = {{Duits patent}{Duits pat\adddot}},
+ patenteu = {{Europees patent}{Eur\adddot pat\adddot}},
+ patentfr = {{Frans patent}{Frans pat\adddot}},
+ patentuk = {{Brits patent}{Brits pat\adddot}},
+ patentus = {{Amerikaans patent}{Amer\adddot pat\adddot}},
+ patreq = {{patentaanvraag}{patentaanvr\adddot}},
+ patreqde = {{Duitse patentaanvraag}{Duitse patentaanvr\adddot}},
+ patreqeu = {{Europese patentaanvraag}{Eur\adddot patentaanvr\adddot}},
+ patreqfr = {{Franse patentaanvraag}{Franse patentaanvr\adddot}},
+ patrequk = {{Britse patentaanvraag}{Britse patentaanvr\adddot}},
+ patrequs = {{Amerikaanse patentaanvraag}{Amer\adddot patentaanvr\adddot}},
+ commonera = {{gewone jaartelling}{g\adddot j\adddot}},
+ beforecommonera = {{v\'o\'or gewone jaartelling}{v\adddot g\adddot j\adddot}},
+ annodomini = {{na Christus}{n\adddot Chr\adddot}},
+ beforechrist = {{voor Christus}{v\adddot Chr\adddot}},
+% circa = {{}{}},% FIXME: missing
+% spring = {{}{}},% FIXME: missing
+% summer = {{}{}},% FIXME: missing
+% autumn = {{}{}},% FIXME: missing
+% winter = {{}{}},% FIXME: missing
+% springN = {{}{}},% FIXME: missing
+% summerN = {{}{}},% FIXME: missing
+% autumnN = {{}{}},% FIXME: missing
+% winterN = {{}{}},% FIXME: missing
+% springS = {{}{}},% FIXME: missing
+% summerS = {{}{}},% FIXME: missing
+% autumnS = {{}{}},% FIXME: missing
+% winterS = {{}{}},% FIXME: missing
+% Q1 = {{}{}},% FIXME: missing
+% Q2 = {{}{}},% FIXME: missing
+% Q3 = {{}{}},% FIXME: missing
+% Q4 = {{}{}},% FIXME: missing
+% QD1 = {{}{}},% FIXME: missing
+% QD2 = {{}{}},% FIXME: missing
+% QD3 = {{}{}},% FIXME: missing
+% S1 = {{}{}},% FIXME: missing
+% S2 = {{}{}},% FIXME: missing
+ am = {{a\adddot m\adddot}{a\adddot m\adddot}},
+ pm = {{p\adddot m\adddot}{p\adddot m\adddot}},
+}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/lbx/english-ms.lbx b/macros/latex/contrib/biblatex-ms/latex/lbx/english-ms.lbx
new file mode 100644
index 0000000000..ee59ce3cbd
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/lbx/english-ms.lbx
@@ -0,0 +1,746 @@
+\ProvidesFile{english-ms.lbx}
+[\abx@lbxid]
+
+\DeclareRedundantLanguages{english,american}{english,american,british,
+canadian,australian,newzealand,USenglish,UKenglish}
+
+\DeclareBibliographyExtras{%
+ \protected\def\bibrangedash{%
+ \textendash\penalty\hyphenpenalty}% breakable dash
+ \def\finalandcomma{\addcomma}%
+ \def\finalandsemicolon{\addsemicolon}%
+ \protected\def\mkbibordinal#1{%
+ \begingroup
+ \@tempcnta0#1\relax\number\@tempcnta
+ \@whilenum\@tempcnta>100\do{\advance\@tempcnta-100\relax}%
+ \ifnum\@tempcnta>20
+ \@whilenum\@tempcnta>9\do{\advance\@tempcnta-10\relax}%
+ \fi
+ \ifcase\@tempcnta th\or st\or nd\or rd\else th\fi
+ \endgroup}%
+ \protected\def\mkbibmascord{\mkbibordinal}%
+ \protected\def\mkbibfemord{\mkbibordinal}%
+ \protected\def\mkbibneutord{\mkbibordinal}%
+ \protected\def\mkbibdatelong#1#2#3{%
+ \iffieldundef{#2}
+ {}
+ {\mkbibmonth{\thefield{#2}}%
+ \iffieldundef{#3}
+ {\iffieldundef{#1}{}{\space}}
+ {\nobreakspace}}%
+ \iffieldundef{#3}
+ {}
+ {\stripzeros{\thefield{#3}}%
+ \iffieldundef{#1}{}{,\space}}%
+ \iffieldbibstring{#1}
+ {\bibstring{\thefield{#1}}}
+ {\dateeraprintpre{#1}\stripzeros{\thefield{#1}}}}%
+ \protected\def\mkbibdateshort#1#2#3{%
+ \iffieldundef{#2}
+ {}
+ {\mkmonthzeros{\thefield{#2}}%
+ \iffieldundef{#3}
+ {\iffieldundef{#1}{}{/}}
+ {/}}%
+ \iffieldundef{#3}
+ {}
+ {\mkdayzeros{\thefield{#3}}%
+ \iffieldundef{#1}{}{/}}%
+ \iffieldbibstring{#1}
+ {\bibstring{\thefield{#1}}}
+ {\dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}}%
+ \expandafter\protected\expandafter\def\csname mkbibtime24h\endcsname#1#2#3#4{%
+ \iffieldundef{#1}
+ {}
+ {\mktimezeros{\thefield{#1}}%
+ \iffieldundef{#2}{}{\bibtimesep}}%
+ \iffieldundef{#2}
+ {}
+ {\mktimezeros{\thefield{#2}}%
+ \iffieldundef{#3}{}{\bibtimesep}}%
+ \iffieldundef{#3}
+ {}
+ {\mktimezeros{\thefield{#3}}}%
+ \iffieldundef{#4}{}
+ {\bibtimezonesep
+ \mkbibtimezone{\thefield{#4}}}}%
+ \expandafter\protected\expandafter\def\csname mkbibtime12h\endcsname#1#2#3#4{%
+ \stripzeros{\mktimehh{\thefield{#1}}}%
+ \bibtimesep
+ \forcezerosmdt{\thefield{#2}}%
+ \iffieldundef{#3}{}
+ {\bibtimesep
+ \forcezerosmdt{\thefield{#3}}}%
+ \space
+ \ifnumless{\thefield{#1}}{12}
+ {\bibstring{am}}
+ {\bibstring{pm}}%
+ \iffieldundef{#4}{}
+ {\space\bibtimezonesep
+ \parentext{\mkbibtimezone{\thefield{#4}}}}}%
+ \protected\def\mkbibyeardivisiondateshort#1#2{%
+ \mkbibyeardivision{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}%
+ \dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}%
+ \protected\def\mkbibyeardivisiondatelong#1#2{%
+ \mkbibyeardivision{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}%
+ \dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}%
+ \savecommand\mkdaterangecomp
+ \savecommand\mkdaterangecompextra
+ \savecommand\mkdaterangeterse
+ \savecommand\mkdaterangeterseextra
+ \protected\def\mkdaterangecomp{%
+ \lbx@us@mkdaterangetrunc@long{long}}%
+ \protected\def\mkdaterangeterse{%
+ \lbx@us@mkdaterangetrunc@short{short}}%
+ \protected\def\mkdaterangecompextra{%
+ \lbx@us@mkdaterangetruncextra@long{long}}%
+ \protected\def\mkdaterangeterseextra{%
+ \lbx@us@mkdaterangetruncextra@short{short}}%
+}
+
+\UndeclareBibliographyExtras{%
+ \restorecommand\mkdaterangecomp
+ \restorecommand\mkdaterangecompextra
+ \restorecommand\mkdaterangeterse
+ \restorecommand\mkdaterangeterseextra
+}
+
+\DeclareBibliographyStrings{%
+ bibliography = {{Bibliography}{Bibliography}},
+ references = {{References}{References}},
+ shorthands = {{List of Abbreviations}{Abbreviations}},
+ editor = {{editor}{ed\adddot}},
+ editors = {{editors}{eds\adddot}},
+ compiler = {{compiler}{comp\adddot}},
+ compilers = {{compilers}{comp\adddot}},
+ redactor = {{redactor}{red\adddot}},
+ redactors = {{redactors}{red\adddot}},
+ reviser = {{reviser}{rev\adddot}},
+ revisers = {{revisers}{rev\adddot}},
+ founder = {{founder}{found\adddot}},
+ founders = {{founders}{found\adddot}},
+ continuator = {{continued}{cont\adddot}},% FIXME: unsure
+ continuators = {{continued}{cont\adddot}},% FIXME: unsure
+ collaborator = {{collaborator}{collab\adddot}},% FIXME: unsure
+ collaborators = {{collaborators}{collab\adddot}},% FIXME: unsure
+ translator = {{translator}{trans\adddot}},
+ translators = {{translators}{trans\adddot}},
+ commentator = {{commentator}{comm\adddot}},
+ commentators = {{commentators}{comm\adddot}},
+ annotator = {{annotator}{annot\adddot}},
+ annotators = {{annotators}{annot\adddot}},
+ commentary = {{commentary}{comm\adddot}},
+ annotations = {{annotations}{annot\adddot}},
+ introduction = {{introduction}{intro\adddot}},
+ foreword = {{foreword}{forew\adddot}},
+ afterword = {{afterword}{afterw\adddot}},
+ editortr = {{editor and translator}%
+ {ed\adddotspace and trans\adddot}},
+ editorstr = {{editors and translators}%
+ {eds\adddotspace and trans\adddot}},
+ editorco = {{editor and commentator}%
+ {ed\adddotspace and comm\adddot}},
+ editorsco = {{editors and commentators}%
+ {eds\adddotspace and comm\adddot}},
+ editoran = {{editor and annotator}%
+ {ed\adddotspace and annot\adddot}},
+ editorsan = {{editors and annotators}%
+ {eds\adddotspace and annot\adddot}},
+ editorin = {{editor and introduction}%
+ {ed\adddotspace and introd\adddot}},
+ editorsin = {{editors and introduction}%
+ {eds\adddotspace and introd\adddot}},
+ editorfo = {{editor and foreword}%
+ {ed\adddotspace and forew\adddot}},
+ editorsfo = {{editors and foreword}%
+ {eds\adddotspace and forew\adddot}},
+ editoraf = {{editor and afterword}%
+ {ed\adddotspace and afterw\adddot}},
+ editorsaf = {{editors and afterword}%
+ {eds\adddotspace and afterw\adddot}},
+ editortrco = {{editor, translator\finalandcomma\ and commentator}%
+ {ed.,\addabbrvspace trans\adddot\finalandcomma\ and comm\adddot}},
+ editorstrco = {{editors, translators\finalandcomma\ and commentators}%
+ {eds.,\addabbrvspace trans\adddot\finalandcomma\ and comm\adddot}},
+ editortran = {{editor, translator\finalandcomma\ and annotator}%
+ {ed.,\addabbrvspace trans\adddot\finalandcomma\ and annot\adddot}},
+ editorstran = {{editors, translators\finalandcomma\ and annotators}%
+ {eds.,\addabbrvspace trans\adddot\finalandcomma\ and annot\adddot}},
+ editortrin = {{editor, translator\finalandcomma\ and introduction}%
+ {ed.,\addabbrvspace trans\adddot\finalandcomma\ and introd\adddot}},
+ editorstrin = {{editors, translators\finalandcomma\ and introduction}%
+ {eds.,\addabbrvspace trans\adddot\finalandcomma\ and introd\adddot}},
+ editortrfo = {{editor, translator\finalandcomma\ and foreword}%
+ {ed.,\addabbrvspace trans\adddot\finalandcomma\ and forew\adddot}},
+ editorstrfo = {{editors, translators\finalandcomma\ and foreword}%
+ {eds.,\addabbrvspace trans\adddot\finalandcomma\ and forew\adddot}},
+ editortraf = {{editor, translator\finalandcomma\ and afterword}%
+ {ed.,\addabbrvspace trans\adddot\finalandcomma\ and afterw\adddot}},
+ editorstraf = {{editors, translators\finalandcomma\ and afterword}%
+ {eds.,\addabbrvspace trans\adddot\finalandcomma\ and afterw\adddot}},
+ editorcoin = {{editor, commentator\finalandcomma\ and introduction}%
+ {ed.,\addabbrvspace comm\adddot\finalandcomma\ and introd\adddot}},
+ editorscoin = {{editors, commentators\finalandcomma\ and introduction}%
+ {eds.,\addabbrvspace comm\adddot\finalandcomma\ and introd\adddot}},
+ editorcofo = {{editor, commentator\finalandcomma\ and foreword}%
+ {ed.,\addabbrvspace comm\adddot\finalandcomma\ and forew\adddot}},
+ editorscofo = {{editors, commentators\finalandcomma\ and foreword}%
+ {eds.,\addabbrvspace comm\adddot\finalandcomma\ and forew\adddot}},
+ editorcoaf = {{editor, commentator\finalandcomma\ and afterword}%
+ {ed.,\addabbrvspace comm\adddot\finalandcomma\ and afterw\adddot}},
+ editorscoaf = {{editors, commentators\finalandcomma\ and afterword}%
+ {eds.,\addabbrvspace comm\adddot\finalandcomma\ and afterw\adddot}},
+ editoranin = {{editor, annotator\finalandcomma\ and introduction}%
+ {ed.,\addabbrvspace annot\adddot\finalandcomma\ and introd\adddot}},
+ editorsanin = {{editors, annotators\finalandcomma\ and introduction}%
+ {eds.,\addabbrvspace annot\adddot\finalandcomma\ and introd\adddot}},
+ editoranfo = {{editor, annotator\finalandcomma\ and foreword}%
+ {ed.,\addabbrvspace annot\adddot\finalandcomma\ and forew\adddot}},
+ editorsanfo = {{editors, annotators\finalandcomma\ and foreword}%
+ {eds.,\addabbrvspace annot\adddot\finalandcomma\ and forew\adddot}},
+ editoranaf = {{editor, annotator\finalandcomma\ and afterword}%
+ {ed.,\addabbrvspace annot\adddot\finalandcomma\ and afterw\adddot}},
+ editorsanaf = {{editors, annotators\finalandcomma\ and afterword}%
+ {eds.,\addabbrvspace annot\adddot\finalandcomma\ and afterw\adddot}},
+ editortrcoin = {{editor, translator, commentator\finalandcomma\ and introduction}%
+ {ed.,\addabbrvspace trans., comm\adddot\finalandcomma\ and introd\adddot}},
+ editorstrcoin = {{editors, translators, commentators\finalandcomma\ and introduction}%
+ {eds.,\addabbrvspace trans., comm\adddot\finalandcomma\ and introd\adddot}},
+ editortrcofo = {{editor, translator, commentator\finalandcomma\ and foreword}%
+ {ed.,\addabbrvspace trans., comm\adddot\finalandcomma\ and forew\adddot}},
+ editorstrcofo = {{editors, translators, commentators\finalandcomma\ and foreword}%
+ {eds.,\addabbrvspace trans., comm\adddot\finalandcomma\ and forew\adddot}},
+ editortrcoaf = {{editor, translator, commentator\finalandcomma\ and afterword}%
+ {ed.,\addabbrvspace trans., comm\adddot\finalandcomma\ and afterw\adddot}},
+ editorstrcoaf = {{editors, translators, commentators\finalandcomma\ and afterword}%
+ {eds.,\addabbrvspace trans., comm\adddot\finalandcomma\ and afterw\adddot}},
+ editortranin = {{editor, translator, annotator\finalandcomma\ and introduction}%
+ {ed.,\addabbrvspace trans., annot\adddot\finalandcomma\ and introd\adddot}},
+ editorstranin = {{editors, translators, annotators\finalandcomma\ and introduction}%
+ {eds.,\addabbrvspace trans., annot\adddot\finalandcomma\ and introd\adddot}},
+ editortranfo = {{editor, translator, annotator\finalandcomma\ and foreword}%
+ {ed.,\addabbrvspace trans., annot\adddot\finalandcomma\ and forew\adddot}},
+ editorstranfo = {{editors, translators, annotators\finalandcomma\ and foreword}%
+ {eds.,\addabbrvspace trans., annot\adddot\finalandcomma\ and forew\adddot}},
+ editortranaf = {{editor, translator, annotator\finalandcomma\ and afterword}%
+ {ed.,\addabbrvspace trans., annot\adddot\finalandcomma\ and afterw\adddot}},
+ editorstranaf = {{editors, translators, annotators\finalandcomma\ and afterword}%
+ {eds.,\addabbrvspace trans., annot\adddot\finalandcomma\ and afterw\adddot}},
+ translatorco = {{translator and commentator}%
+ {trans\adddot\ and comm\adddot}},
+ translatorsco = {{translators and commentators}%
+ {trans\adddot\ and comm\adddot}},
+ translatoran = {{translator and annotator}%
+ {trans\adddot\ and annot\adddot}},
+ translatorsan = {{translators and annotators}%
+ {trans\adddot\ and annot\adddot}},
+ translatorin = {{translation and introduction}%
+ {trans\adddot\ and introd\adddot}},
+ translatorsin = {{translation and introduction}%
+ {trans\adddot\ and introd\adddot}},
+ translatorfo = {{translation and foreword}%
+ {trans\adddot\ and forew\adddot}},
+ translatorsfo = {{translation and foreword}%
+ {trans\adddot\ and forew\adddot}},
+ translatoraf = {{translation and afterword}%
+ {trans\adddot\ and afterw\adddot}},
+ translatorsaf = {{translation and afterword}%
+ {trans\adddot\ and afterw\adddot}},
+ translatorcoin = {{translation, commentary\finalandcomma\ and introduction}%
+ {trans., comm\adddot\finalandcomma\ and introd\adddot}},
+ translatorscoin = {{translation, commentary\finalandcomma\ and introduction}%
+ {trans., comm\adddot\finalandcomma\ and introd\adddot}},
+ translatorcofo = {{translation, commentary\finalandcomma\ and foreword}%
+ {trans., comm\adddot\finalandcomma\ and forew\adddot}},
+ translatorscofo = {{translation, commentary\finalandcomma\ and foreword}%
+ {trans., comm\adddot\finalandcomma\ and forew\adddot}},
+ translatorcoaf = {{translation, commentary\finalandcomma\ and afterword}%
+ {trans., comm\adddot\finalandcomma\ and afterw\adddot}},
+ translatorscoaf = {{translation, commentary\finalandcomma\ and afterword}%
+ {trans., comm\adddot\finalandcomma\ and afterw\adddot}},
+ translatoranin = {{translation, annotations\finalandcomma\ and introduction}%
+ {trans., annot\adddot\finalandcomma\ and introd\adddot}},
+ translatorsanin = {{translation, annotations\finalandcomma\ and introduction}%
+ {trans., annot\adddot\finalandcomma\ and introd\adddot}},
+ translatoranfo = {{translation, annotations\finalandcomma\ and foreword}%
+ {trans., annot\adddot\finalandcomma\ and forew\adddot}},
+ translatorsanfo = {{translation, annotations\finalandcomma\ and foreword}%
+ {trans., annot\adddot\finalandcomma\ and forew\adddot}},
+ translatoranaf = {{translation, annotations\finalandcomma\ and afterword}%
+ {trans., annot\adddot\finalandcomma\ and afterw\adddot}},
+ translatorsanaf = {{translation, annotations\finalandcomma\ and afterword}%
+ {trans., annot\adddot\finalandcomma\ and afterw\adddot}},
+ organizer = {{organizer}{org\adddot}},
+ organizers = {{organizers}{orgs\adddot}},
+ byorganizer = {{organized by}{org\adddotspace by}},
+ byauthor = {{by}{by}},
+ byeditor = {{edited by}{ed\adddotspace by}},
+ bycompiler = {{compiled by}{comp\adddotspace by}},
+ byredactor = {{redacted by}{red\adddotspace by}},
+ byreviser = {{revised by}{rev\adddotspace by}},
+ byreviewer = {{reviewed by}{rev\adddotspace by}},
+ byfounder = {{founded by}{found\adddotspace by}},
+ bycontinuator = {{continued by}{cont\adddotspace by}},
+ bycollaborator = {{in collaboration with}{in collab\adddotspace with}},% FIXME: unsure
+ bytranslator = {{translated \lbx@lfromlang\ by}{trans\adddot\ \lbx@sfromlang\ by}},
+ bycommentator = {{commented by}{comm\adddot\ by}},
+ byannotator = {{annotated by}{annot\adddot\ by}},
+ withcommentator = {{with a commentary by}{with a comment\adddot\ by}},
+ withannotator = {{with annotations by}{with annots\adddot\ by}},
+ withintroduction = {{with an introduction by}{with an intro\adddot\ by}},
+ withforeword = {{with a foreword by}{with a forew\adddot\ by}},
+ withafterword = {{with an afterword by}{with an afterw\adddot\ by}},
+ byeditortr = {{edited and translated \lbx@lfromlang\ by}%
+ {ed\adddotspace and trans\adddot\ \lbx@sfromlang\ by}},
+ byeditorco = {{edited and commented by}%
+ {ed\adddotspace and comm\adddot\ by}},
+ byeditoran = {{edited and annotated by}%
+ {ed\adddotspace and annot\adddot\ by}},
+ byeditorin = {{edited, with an introduction, by}%
+ {ed.,\addabbrvspace with an introd., by}},
+ byeditorfo = {{edited, with a foreword, by}%
+ {ed.,\addabbrvspace with a forew., by}},
+ byeditoraf = {{edited, with an afterword, by}%
+ {ed.,\addabbrvspace with an afterw., by}},
+ byeditortrco = {{edited, translated \lbx@lfromlang\finalandcomma\ and commented by}%
+ {ed.,\addabbrvspace trans\adddot\ \lbx@sfromlang\finalandcomma\ and comm\adddot\ by}},
+ byeditortran = {{edited, translated \lbx@lfromlang\finalandcomma\ and annotated by}%
+ {ed.,\addabbrvspace trans\adddot\ \lbx@sfromlang\finalandcomma\ and annot\adddot\ by}},
+ byeditortrin = {{edited and translated \lbx@lfromlang, with an introduction, by}%
+ {ed\adddotspace and trans\adddot\ \lbx@sfromlang, with an introd., by}},
+ byeditortrfo = {{edited and translated \lbx@lfromlang, with a foreword, by}%
+ {ed\adddotspace and trans\adddot\ \lbx@sfromlang, with a forew., by}},
+ byeditortraf = {{edited and translated \lbx@lfromlang, with an afterword, by}%
+ {ed\adddotspace and trans\adddot\ \lbx@sfromlang, with an afterw., by}},
+ byeditorcoin = {{edited and commented, with an introduction, by}%
+ {ed\adddotspace and comm., with an introd., by}},
+ byeditorcofo = {{edited and commented, with a foreword, by}%
+ {ed\adddotspace and comm., with a forew., by}},
+ byeditorcoaf = {{edited and commented, with an afterword, by}%
+ {ed\adddotspace and comm., with an afterw., by}},
+ byeditoranin = {{edited and annotated, with an introduction, by}%
+ {ed\adddotspace and annot., with an introd., by}},
+ byeditoranfo = {{edited and annotated, with a foreword, by}%
+ {ed\adddotspace and annot., with a forew., by}},
+ byeditoranaf = {{edited and annotated, with an afterword, by}%
+ {ed\adddotspace and annot., with an afterw., by}},
+ byeditortrcoin = {{edited, translated \lbx@lfromlang\finalandcomma\ and commented, with an introduction, by}%
+ {ed.,\addabbrvspace trans\adddot\ \lbx@sfromlang\finalandcomma\ and comm., with an introd., by}},
+ byeditortrcofo = {{edited, translated \lbx@lfromlang\finalandcomma\ and commented, with a foreword, by}%
+ {ed.,\addabbrvspace trans\adddot\ \lbx@sfromlang\finalandcomma\ and comm., with a forew., by}},
+ byeditortrcoaf = {{edited, translated \lbx@lfromlang\finalandcomma\ and commented, with an afterword, by}%
+ {ed.,\addabbrvspace trans\adddot\ \lbx@sfromlang\finalandcomma\ and comm., with an afterw., by}},
+ byeditortranin = {{edited, translated \lbx@lfromlang\finalandcomma\ and annotated, with an introduction, by}%
+ {ed.,\addabbrvspace trans\adddot\ \lbx@sfromlang\finalandcomma\ and annot., with an introd., by}},
+ byeditortranfo = {{edited, translated \lbx@lfromlang\finalandcomma\ and annotated, with a foreword, by}%
+ {ed.,\addabbrvspace trans\adddot\ \lbx@sfromlang\finalandcomma\ and annot., with a forew., by}},
+ byeditortranaf = {{edited, translated \lbx@lfromlang\finalandcomma\ and annotated, with an afterword, by}%
+ {ed.,\addabbrvspace trans\adddot\ \lbx@sfromlang\finalandcomma\ and annot., with an afterw., by}},
+ bytranslatorco = {{translated \lbx@lfromlang\ and commented by}%
+ {trans\adddot\ \lbx@sfromlang\ and comm\adddot\ by}},
+ bytranslatoran = {{translated \lbx@lfromlang\ and annotated by}%
+ {trans\adddot\ \lbx@sfromlang\ and annot\adddot\ by}},
+ bytranslatorin = {{translated \lbx@lfromlang, with an introduction, by}%
+ {trans\adddot\ \lbx@sfromlang, with an introd., by}},
+ bytranslatorfo = {{translated \lbx@lfromlang, with a foreword, by}%
+ {trans\adddot\ \lbx@sfromlang, with a forew., by}},
+ bytranslatoraf = {{translated \lbx@lfromlang, with an afterword, by}%
+ {trans\adddot\ \lbx@sfromlang, with an afterw., by}},
+ bytranslatorcoin = {{translated \lbx@lfromlang\ and commented, with an introduction, by}%
+ {trans\adddot\ \lbx@sfromlang\ and comm., with an introd., by}},
+ bytranslatorcofo = {{translated \lbx@lfromlang\ and commented, with a foreword, by}%
+ {trans\adddot\ \lbx@sfromlang\ and comm., with a forew., by}},
+ bytranslatorcoaf = {{translated \lbx@lfromlang\ and commented, with an afterword, by}%
+ {trans\adddot\ \lbx@sfromlang\ and comm., with an afterw., by}},
+ bytranslatoranin = {{translated \lbx@lfromlang\ and annotated, with an introduction, by}%
+ {trans\adddot\ \lbx@sfromlang\ and annot., with an introd., by}},
+ bytranslatoranfo = {{translated \lbx@lfromlang\ and annotated, with a foreword, by}%
+ {trans\adddot\ \lbx@sfromlang\ and annot., with a forew., by}},
+ bytranslatoranaf = {{translated \lbx@lfromlang\ and annotated, with an afterword, by}%
+ {trans\adddot\ \lbx@sfromlang\ and annot., with an afterw., by}},
+ and = {{and}{and}},
+ andothers = {{et\addabbrvspace al\adddot}{et\addabbrvspace al\adddot}},
+ andmore = {{et\addabbrvspace al\adddot}{et\addabbrvspace al\adddot}},
+ volume = {{volume}{vol\adddot}},
+ volumes = {{volumes}{vols\adddot}},
+ involumes = {{in}{in}},
+ jourvol = {{volume}{vol\adddot}},
+ jourser = {{series}{ser\adddot}},
+ book = {{book}{book}},
+ part = {{part}{part}},
+ issue = {{issue}{issue}},
+ newseries = {{new series}{new ser\adddot}},
+ oldseries = {{old series}{old ser\adddot}},
+ edition = {{edition}{ed\adddot}},
+ reprint = {{reprint}{repr\adddot}},
+ reprintof = {{reprint of}{repr\adddotspace of}},
+ reprintas = {{reprinted as}{rpt\adddotspace as}},
+ reprintfrom = {{reprinted from}{repr\adddotspace from}},
+ reviewof = {{review of}{rev\adddotspace of}},
+ translationof = {{translation of}{trans\adddotspace of}},
+ translationas = {{translated as}{trans\adddotspace as}},
+ translationfrom = {{translated from}{trans\adddotspace from}},
+ origpubas = {{originally published as}{orig\adddotspace pub\adddotspace as}},
+ origpubin = {{originally published in}{orig\adddotspace pub\adddotspace in}},
+ astitle = {{as}{as}},
+ bypublisher = {{by}{by}},
+ nodate = {{no date}{n\adddot d\adddot}},
+ page = {{page}{p\adddot}},
+ pages = {{pages}{pp\adddot}},
+ column = {{column}{col\adddot}},
+ columns = {{columns}{cols\adddot}},
+ line = {{line}{l\adddot}},
+ lines = {{lines}{ll\adddot}},
+ verse = {{verse}{v\adddot}},
+ verses = {{verses}{vv\adddot}},
+ section = {{section}{\S}},
+ sections = {{sections}{\S\S}},
+ paragraph = {{paragraph}{par\adddot}},
+ paragraphs = {{paragraphs}{par\adddot}},
+ pagetotal = {{page}{p\adddot}},
+ pagetotals = {{pages}{pp\adddot}},
+ columntotal = {{column}{col\adddot}},
+ columntotals = {{columns}{cols\adddot}},
+ linetotal = {{line}{l\adddot}},
+ linetotals = {{lines}{ll\adddot}},
+ versetotal = {{verse}{v\adddot}},
+ versetotals = {{verses}{vv\adddot}},
+ sectiontotal = {{section}{\S}},
+ sectiontotals = {{sections}{\S\S}},
+ paragraphtotal = {{paragraph}{par\adddot}},
+ paragraphtotals = {{paragraphs}{par\adddot}},
+ in = {{in}{in}},
+ inseries = {{in}{in}},
+ ofseries = {{of}{of}},
+ number = {{number}{no\adddot}},
+ chapter = {{chapter}{chap\adddot}},
+ bathesis = {{Bachelor's thesis}{BA\addabbrvspace thesis}},
+ mathesis = {{Master's thesis}{MA\addabbrvspace thesis}},
+ phdthesis = {{PhD\addabbrvspace thesis}{PhD\addabbrvspace thesis}},
+ candthesis = {{Candidate thesis}{Cand\adddotspace thesis}},
+ resreport = {{research report}{research rep\adddot}},
+ techreport = {{technical report}{tech\adddotspace rep\adddot}},
+ software = {{computer software}{comp\adddotspace software}},
+ datacd = {{CD-ROM}{CD-ROM}},
+ audiocd = {{audio CD}{audio CD}},
+ version = {{version}{version}},
+ url = {{address}{address}},
+ urlfrom = {{available from}{available from}},
+ urlseen = {{visited on}{visited on}},
+ inpreparation = {{in preparation}{in preparation}},
+ submitted = {{submitted}{submitted}},
+ forthcoming = {{forthcoming}{forthcoming}},
+ inpress = {{in press}{in press}},
+ prepublished = {{pre-published}{pre-published}},
+ citedas = {{henceforth cited as}{henceforth cited as}},
+ thiscite = {{especially}{esp\adddot}},
+ seenote = {{see note}{see n\adddot}},
+ quotedin = {{quoted in}{qtd\adddotspace in}},
+ idem = {{idem}{idem}},
+ idemsm = {{idem}{idem}},
+ idemsf = {{eadem}{eadem}},
+ idemsn = {{idem}{idem}},
+ idempm = {{eidem}{eidem}},
+ idempf = {{eaedem}{eaedem}},
+ idempn = {{eadem}{eadem}},
+ idempp = {{eidem}{eidem}},
+ ibidem = {{ibidem}{ibid\adddot}},
+ opcit = {{op\adddotspace cit\adddot}{op\adddotspace cit\adddot}},
+ loccit = {{loc\adddotspace cit\adddot}{loc\adddotspace cit\adddot}},
+ confer = {{cf\adddot}{cf\adddot}},
+ sequens = {{sq\adddot}{sq\adddot}},
+ sequentes = {{sqq\adddot}{sqq\adddot}},
+ passim = {{passim}{pass\adddot}},
+ see = {{see}{see}},
+ seealso = {{see also}{see also}},
+ backrefpage = {{cited on page}{cit\adddotspace on p\adddot}},
+ backrefpages = {{cited on pages}{cit\adddotspace on pp\adddot}},
+ january = {{January}{Jan\adddot}},
+ february = {{February}{Feb\adddot}},
+ march = {{March}{Mar\adddot}},
+ april = {{April}{Apr\adddot}},
+ may = {{May}{May}},
+ june = {{June}{June}},
+ july = {{July}{July}},
+ august = {{August}{Aug\adddot}},
+ september = {{September}{Sept\adddot}},
+ october = {{October}{Oct\adddot}},
+ november = {{November}{Nov\adddot}},
+ december = {{December}{Dec\adddot}},
+ langamerican = {{American}{American}},
+ langbasque = {{Basque}{Basque}},
+ langbrazilian = {{Brazilian}{Brazilian}},
+ langbulgarian = {{Bulgarian}{Bulgarian}},
+ langcatalan = {{Catalan}{Catalan}},
+ langcroatian = {{Croatian}{Croatian}},
+ langczech = {{Czech}{Czech}},
+ langdanish = {{Danish}{Danish}},
+ langdutch = {{Dutch}{Dutch}},
+ langenglish = {{English}{English}},
+ langestonian = {{Estonian}{Estonian}},
+ langfinnish = {{Finnish}{Finnish}},
+ langfrench = {{French}{French}},
+ langgalician = {{Galician}{Galician}},
+ langgerman = {{German}{German}},
+ langgreek = {{Greek}{Greek}},
+ langhungarian = {{Hungarian}{Hungarian}},
+ langitalian = {{Italian}{Italian}},
+ langjapanese = {{Japanese}{Japanese}},
+ langlatin = {{Latin}{Latin}},
+ langlatvian = {{Latvian}{Latvian}},
+ langlithuanian = {{Lithuanian}{Lithuanian}},
+ langmarathi = {{Marathi}{Marathi}},
+ langnorwegian = {{Norwegian}{Norwegian}},
+ langpolish = {{Polish}{Polish}},
+ langportuguese = {{Portuguese}{Portuguese}},
+ langromanian = {{Romanian}{Romanian}},
+ langrussian = {{Russian}{Russian}},
+ langserbian = {{Serbian}{Serbian}},
+ langslovak = {{Slovak}{Slovak}},
+ langslovene = {{Slovene}{Slovene}},
+ langspanish = {{Spanish}{Spanish}},
+ langswedish = {{Swedish}{Swedish}},
+ langturkish = {{Turkish}{Turkish}},
+ langukrainian = {{Ukrainian}{Ukrainian}},
+ fromamerican = {{from the American}{from the American}},
+ frombasque = {{from the Basque}{from the Basque}},
+ frombrazilian = {{from the Brazilian}{from the Brazilian}},
+ frombulgarian = {{from the Bulgarian}{from the Bulgarian}},
+ fromcatalan = {{from the Catalan}{from the Catalan}},
+ fromcroatian = {{from the Croatian}{from the Croatian}},
+ fromczech = {{from the Czech}{from the Czech}},
+ fromdanish = {{from the Danish}{from the Danish}},
+ fromdutch = {{from the Dutch}{from the Dutch}},
+ fromenglish = {{from the English}{from the English}},
+ fromestonian = {{from the Estonian}{from the Estonian}},
+ fromfinnish = {{from the Finnish}{from the Finnish}},
+ fromfrench = {{from the French}{from the French}},
+ fromgalician = {{from the Galician}{from the Galician}},
+ fromgerman = {{from the German}{from the German}},
+ fromgreek = {{from the Greek}{from the Greek}},
+ fromhungarian = {{from the Hungarian}{from the Hungarian}},
+ fromitalian = {{from the Italian}{from the Italian}},
+ fromjapanese = {{from the Japanese}{from the Japanese}},
+ fromlatin = {{from the Latin}{from the Latin}},
+ fromlatvian = {{from the Latvian}{from the Latvian}},
+ fromlithuanian = {{from the Lithuanian}{from the Lithuanian}},
+ frommarathi = {{from the Marathi}{from the Marathi}},
+ fromnorwegian = {{from the Norwegian}{from the Norwegian}},
+ frompolish = {{from the Polish}{from the Polish}},
+ fromportuguese = {{from the Portuguese}{from the Portuguese}},
+ fromromanian = {{from the Romanian}{from the Romanian}},
+ fromrussian = {{from the Russian}{from the Russian}},
+ fromserbian = {{from the Serbian}{from the Serbian}},
+ fromslovak = {{from the Slovak}{from the Slovak}},
+ fromslovene = {{from the Slovene}{from the Slovene}},
+ fromspanish = {{from the Spanish}{from the Spanish}},
+ fromswedish = {{from the Swedish}{from the Swedish}},
+ fromturkish = {{from the Turkish}{from the Turkish}},
+ fromukrainian = {{from the Ukrainian}{from the Ukrainian}},
+ countryde = {{Germany}{DE}},
+ countryeu = {{European Union}{EU}},
+ countryep = {{European Union}{EP}},
+ countryfr = {{France}{FR}},
+ countryuk = {{United Kingdom}{GB}},
+ countryus = {{United States of America}{US}},
+ patent = {{patent}{pat\adddot}},
+ patentde = {{German patent}{German pat\adddot}},
+ patenteu = {{European patent}{European pat\adddot}},
+ patentfr = {{French patent}{French pat\adddot}},
+ patentuk = {{British patent}{British pat\adddot}},
+ patentus = {{U.S\adddotspace patent}{U.S\adddotspace pat\adddot}},
+ patreq = {{patent request}{pat\adddot\ req\adddot}},
+ patreqde = {{German patent request}{German pat\adddot\ req\adddot}},
+ patreqeu = {{European patent request}{European pat\adddot\ req\adddot}},
+ patreqfr = {{French patent request}{French pat\adddot\ req\adddot}},
+ patrequk = {{British patent request}{British pat\adddot\ req\adddot}},
+ patrequs = {{U.S\adddotspace patent request}{U.S\adddotspace pat\adddot\ req\adddot}},
+ file = {{file}{file}},
+ library = {{library}{library}},
+ abstract = {{abstract}{abstract}},
+ annotation = {{annotations}{annotations}},
+ commonera = {{Common Era}{CE}},
+ beforecommonera = {{Before Common Era}{BCE}},
+ annodomini = {{Anno Domini}{AD}},
+ beforechrist = {{Before Christ}{BC}},
+ circa = {{circa}{ca\adddot}},
+ spring = {{Spring}{Spr\adddot}},
+ summer = {{Summer}{Sum\adddot}},
+ autumn = {{Autumn}{Aut\adddot}},
+ winter = {{Winter}{Win\adddot}},
+ springN = {{Spring (Northern Hemisphere)}{Spr\adddotspace NH}},
+ summerN = {{Summer (Northern Hemisphere)}{Sum\adddotspace NH}},
+ autumnN = {{Autumn (Northern Hemisphere)}{Aut\adddotspace NH}},
+ winterN = {{Winter (Northern Hemisphere)}{Win\adddotspace NH}},
+ springS = {{Spring (Southern Hemisphere)}{Spr\adddotspace SH}},
+ summerS = {{Summer (Southern Hemisphere)}{Sum\adddotspace SH}},
+ autumnS = {{Autumn (Southern Hemisphere)}{Aut\adddotspace SH}},
+ winterS = {{Winter (Southern Hemisphere)}{Win\adddotspace SH}},
+ Q1 = {{Quarter~1}{Q1}},
+ Q2 = {{Quarter~2}{Q2}},
+ Q3 = {{Quarter~3}{Q3}},
+ Q4 = {{Quarter~4}{Q4}},
+ QD1 = {{Quadrimester~1}{Q1}},
+ QD2 = {{Quadrimester~2}{Q2}},
+ QD3 = {{Quadrimester~3}{Q3}},
+ S1 = {{Semestral~1}{S1}},
+ S2 = {{Semestral~2}{S2}},
+ am = {{AM}{AM}},
+ pm = {{PM}{PM}},
+}
+
+\protected\gdef\lbx@us@mkdaterangetrunc@long#1#2{%
+ \blx@if@printanytimes{#2}
+ {\mkdaterangefull{#1}{#2}}
+ {\lbx@us@mkdaterangetrunc@long@i{#1}{#2}}}
+
+\protected\gdef\lbx@us@mkdaterangetrunc@long@i#1#2{%
+ \begingroup
+ \blx@metadateinfo{#2}%
+ \iffieldundef{#2year}
+ {\blx@nounit}
+ {\printtext[{#2date}]{%
+ \datecircaprint
+ \iffieldundef{#2yeardivision}
+ {\ifdateyearsequal{#2}{#2end}
+ {\csuse{mkbibdate#1}{}{#2month}{#2day}}
+ {\csuse{mkbibdate#1}{#2year}{#2month}{#2day}%
+ \dateeraprint{#2year}}}
+ {\ifdateyearsequal{#2}{#2end}
+ {\csuse{mkbibyeardivisiondate#1}{}{#2yeardivision}}
+ {\csuse{mkbibyeardivisiondate#1}{#2year}{#2yeardivision}%
+ \dateeraprint{#2year}}}%
+ \dateuncertainprint
+ \iffieldundef{#2endyear}
+ {}
+ {\iffieldequalstr{#2endyear}{}
+ {\mbox{\bibdaterangesep}}
+ {\bibdaterangesep
+ \enddatecircaprint
+ \iffieldundef{#2endyeardivision}
+ {\ifdateyearsequal{#2}{#2end}
+ {\iffieldsequal{#2month}{#2endmonth}
+ {\csuse{mkbibdate#1}{#2endyear}{}{#2endday}}
+ {\csuse{mkbibdate#1}{#2endyear}{#2endmonth}{#2endday}}}
+ {\csuse{mkbibdate#1}{#2endyear}{#2endmonth}{#2endday}}}
+ {\csuse{mkbibyeardivisiondate#1}{#2endyear}{#2endyeardivision}}%
+ \enddateuncertainprint
+ \dateeraprint{#2endyear}}}}}%
+ \endgroup}
+
+\protected\gdef\lbx@us@mkdaterangetrunc@short#1#2{%
+ \blx@if@printanytimes{#2}
+ {\mkdaterangefull{#1}{#2}}
+ {\lbx@us@mkdaterangetrunc@short@i{#1}{#2}}}
+
+\protected\gdef\lbx@us@mkdaterangetrunc@short@i#1#2{%
+ \begingroup
+ \blx@metadateinfo{#2}%
+ \iffieldundef{#2year}
+ {\blx@nounit}
+ {\printtext[{#2date}]{%
+ \datecircaprint
+ \iffieldundef{#2yeardivision}
+ {\ifdateyearsequal{#2}{#2end}
+ {\csuse{mkbibdate#1}{}{#2month}{#2day}}
+ {\csuse{mkbibdate#1}{#2year}{#2month}{#2day}%
+ \dateeraprint{#2year}}}
+ {\ifdateyearsequal{#2}{#2end}
+ {\csuse{mkbibyeardivisiondate#1}{}{#2yeardivision}}
+ {\csuse{mkbibyeardivisiondate#1}{#2year}{#2yeardivision}%
+ \dateeraprint{#2year}}}%
+ \dateuncertainprint
+ \iffieldundef{#2endyear}
+ {}
+ {\iffieldequalstr{#2endyear}{}
+ {\mbox{\bibdaterangesep}}
+ {\bibdaterangesep
+ \enddatecircaprint
+ \iffieldundef{#2endyeardivision}
+ {\csuse{mkbibdate#1}{#2endyear}{#2endmonth}{#2endday}}
+ {\csuse{mkbibyeardivisiondate#1}{#2endyear}{#2endyeardivision}}%
+ \enddateuncertainprint
+ \dateeraprint{#2endyear}}}}}%
+ \endgroup}
+
+\protected\gdef\lbx@us@mkdaterangetruncextra@long#1#2{%
+ \blx@if@printanytimes{#2}
+ {\mkdaterangefullextra{#1}{#2}}
+ {\lbx@us@mkdaterangetruncextra@long@i{#1}{#2}}}
+
+\protected\gdef\lbx@us@mkdaterangetruncextra@long@i#1#2{%
+ \begingroup
+ \blx@metadateinfo{#2}%
+ \iffieldundef{#2year}
+ {\blx@nounit}
+ {\printtext[{#2date}]{%
+ \datecircaprint
+ \iffieldundef{#2yeardivision}
+ {\ifdateyearsequal{#2}{#2end}
+ {\csuse{mkbibdate#1}{}{#2month}{#2day}}
+ {\csuse{mkbibdate#1}{#2year}{#2month}{#2day}%
+ \dateeraprint{#2year}}}
+ {\ifdateyearsequal{#2}{#2end}
+ {\csuse{mkbibyeardivisiondate#1}{}{#2yeardivision}}
+ {\csuse{mkbibyeardivisiondate#1}{#2year}{#2yeardivision}%
+ \dateeraprint{#2year}}}%
+ \dateuncertainprint
+ \iffieldundef{#2endyear}
+ {\printfield{extradate}}
+ {\iffieldequalstr{#2endyear}{}
+ {\printfield{extradate}%
+ \mbox{\bibdaterangesep}}
+ {\bibdaterangesep
+ \enddatecircaprint
+ \iffieldundef{#2endyeardivision}
+ {\ifdateyearsequal{#2}{#2end}
+ {\iffieldsequal{#2month}{#2endmonth}
+ {\csuse{mkbibdate#1}{#2endyear}{}{#2endday}}
+ {\csuse{mkbibdate#1}{#2endyear}{#2endmonth}{#2endday}}}
+ {\csuse{mkbibdate#1}{#2endyear}{#2endmonth}{#2endday}}}
+ {\csuse{mkbibyeardivisiondate#1}{#2endyear}{#2endyeardivision}}%
+ \printfield{extradate}%
+ \enddateuncertainprint
+ \dateeraprint{#2endyear}}}}}%
+ \endgroup}
+
+\protected\gdef\lbx@us@mkdaterangetruncextra@short#1#2{%
+ \blx@if@printanytimes{#2}
+ {\mkdaterangefullextra{#1}{#2}}
+ {\lbx@us@mkdaterangetruncextra@short@i{#1}{#2}}}
+
+\protected\gdef\lbx@us@mkdaterangetruncextra@short@i#1#2{%
+ \begingroup
+ \blx@metadateinfo{#2}%
+ \iffieldundef{#2year}
+ {\blx@nounit}
+ {\printtext[{#2date}]{%
+ \datecircaprint
+ \iffieldundef{#2yeardivision}
+ {\ifdateyearsequal{#2}{#2end}
+ {\csuse{mkbibdate#1}{}{#2month}{#2day}}
+ {\csuse{mkbibdate#1}{#2year}{#2month}{#2day}%
+ \dateeraprint{#2year}}}
+ {\ifdateyearsequal{#2}{#2end}
+ {\csuse{mkbibyeardivisiondate#1}{}{#2yeardivision}}
+ {\csuse{mkbibyeardivisiondate#1}{#2year}{#2yeardivision}%
+ \dateeraprint{#2year}}}%
+ \dateuncertainprint
+ \iffieldundef{#2endyear}
+ {\printfield{extradate}}
+ {\iffieldequalstr{#2endyear}{}
+ {\printfield{extradate}%
+ \mbox{\bibdaterangesep}}
+ {\bibdaterangesep
+ \enddatecircaprint
+ \iffieldundef{#2endyeardivision}
+ {\csuse{mkbibdate#1}{#2endyear}{#2endmonth}{#2endday}}
+ {\csuse{mkbibyeardivisiondate#1}{#2endyear}{#2endyeardivision}}%
+ \printfield{extradate}%
+ \enddateuncertainprint
+ \dateeraprint{#2endyear}}}}}%
+ \endgroup}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/lbx/estonian-ms.lbx b/macros/latex/contrib/biblatex-ms/latex/lbx/estonian-ms.lbx
new file mode 100644
index 0000000000..040b19ecb8
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/lbx/estonian-ms.lbx
@@ -0,0 +1,582 @@
+\ProvidesFile{estonian-ms.lbx}
+[\abx@lbxid]
+
+% First attempt at Estonian using Finnish.lbx, Bing translator and a dictionary
+% Translator's notes:
+% Some translations look akward but they are made in such a way
+% that they look as good as possible in running text.
+% Source for some items in translations: Kielikello 3/1998.
+% and Liisa Junno: Kirjastosanasto 1. BTJ Kirjastopalvelu 2006.
+
+\DeclareRedundantLanguages{estonian}{estonian}
+
+
+\DeclareBibliographyExtras{%
+ % dashes: may be either \textendash or \textemdash
+ \protected\def\bibrangedash{%
+ \textendash\penalty\hyphenpenalty}% breakable dash
+ \let\finalandcomma=\empty
+ \let\finalandsemicolon=\empty
+ \protected\def\mkbibordinal#1{\stripzeros{#1}\adddot}%
+ \protected\def\mkbibmascord{\mkbibordinal}%
+ \protected\def\mkbibfemord{\mkbibordinal}%
+ \protected\def\mkbibneutord{\mkbibordinal}%
+ \protected\def\mkbibdatelong#1#2#3{%
+ \iffieldundef{#3}
+ {}
+ {\mkbibordinal{\thefield{#3}}%
+ \iffieldundef{#2}{}{\nobreakspace}}%
+ \iffieldundef{#2}
+ {}
+ {\protected\def\bibdaterangesep{\addnbspace\textendash\space}%
+ \mkbibmonth{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}}%
+ \iffieldbibstring{#1}
+ {\bibstring{\thefield{#1}}}
+ {\dateeraprintpre{#1}\stripzeros{\thefield{#1}}}}%
+ \protected\def\mkbibdateshort#1#2#3{%
+ \iffieldundef{#3}
+ {}
+ {\mkdayzeros{\thefield{#3}}\adddot}%
+ \iffieldundef{#2}
+ {}
+ {\mkmonthzeros{\thefield{#2}}\adddot}%
+ \iffieldbibstring{#1}
+ {\bibstring{\thefield{#1}}}
+ {\dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}}%
+ \savecommand\lbx@lfromlang
+ \savecommand\lbx@sfromlang
+ \def\lbx@lfromlang{%
+ \iflistundef{origlanguage}
+ {}
+ {\printlist[lfromoriglanguage]{origlanguage}\space}}%
+ \def\lbx@sfromlang{%
+ \iflistundef{origlanguage}
+ {}
+ {\printlist[sfromoriglanguage]{origlanguage}\space}}%
+ \savebibmacro{in:}%
+ \renewbibmacro{in:}{%
+ \ifentrytype{article}
+ {}
+ {\bibstring{in}%
+ \printunit{\intitlepunct}}}%
+ \expandafter\protected\expandafter\def\csname mkbibtime24h\endcsname#1#2#3#4{%
+ \iffieldundef{#1}
+ {}
+ {\mktimezeros{\thefield{#1}}%
+ \iffieldundef{#2}{}{\bibtimesep}}%
+ \iffieldundef{#2}
+ {}
+ {\mktimezeros{\thefield{#2}}%
+ \iffieldundef{#3}{}{\bibtimesep}}%
+ \iffieldundef{#3}
+ {}
+ {\mktimezeros{\thefield{#3}}}%
+ \iffieldundef{#4}{}
+ {\bibtimezonesep
+ \mkbibtimezone{\thefield{#4}}}}%
+ \expandafter\protected\expandafter\def\csname mkbibtime12h\endcsname#1#2#3#4{%
+ \stripzeros{\mktimehh{\thefield{#1}}}\bibtimesep
+ \forcezerosmdt{\thefield{#2}}%
+ \iffieldundef{#3}{}
+ {\bibtimesep
+ \forcezerosmdt{\thefield{#3}}}%
+ \space
+ \ifnumless{\thefield{#1}}{12}
+ {\bibstring{am}}
+ {\bibstring{pm}}%
+ \iffieldundef{#4}{}
+ {\space\bibtimezonesep
+ \parentext{\mkbibtimezone{\thefield{#4}}}}}%
+ \protected\def\mkbibyeardivisiondateshort#1#2{%
+ \mkbibyeardivision{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}%
+ \dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}%
+ \protected\def\mkbibyeardivisiondatelong#1#2{%
+ \mkbibyeardivision{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}%
+ \dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}%
+}
+
+\UndeclareBibliographyExtras{%
+ \restorecommand\lbx@lfromlang
+ \restorecommand\lbx@sfromlang
+ \restorebibmacro{in:}%
+}
+
+\DeclareBibliographyStrings{%
+ bibliography = {{bibliograafia}{bibliograafia}},
+ references = {{viited}{viited}},
+ shorthands = {{l\"{u}hendid}{l\"{u}hendid}},
+ editor = {{toimetaja}{toim\adddot}},
+ editors = {{toimetajad}{toim\adddot}},
+ compiler = {{koostaja}{koost\adddot}},
+ compilers = {{koostajad}{koost\adddot}},
+ redactor = {{toimetaja}{toim\adddot}},
+ redactors = {{toimetajad}{toim\adddot}},
+ reviser = {{toimetaja}{toim\adddot}},
+ revisers = {{toimetajad}{toim\adddot}},
+ founder = {{asutaja}{asutaja}},
+ founders = {{asutajad}{asutajad}},
+ continuator = {{j\"{a}tkaja}{j\"{a}tkaja}},
+ continuators = {{j\"{a}tkajad}{j\"{a}tkajad}},
+ collaborator = {{kaast\"{o}\"{o}line}{kaast\adddot}},
+ collaborators = {{kaast\"{o}\"{o}lised}{kaast\adddot}},
+ translator = {{t\~{o}lkija}{t\~{o}lk\adddot}},
+ translators = {{t\~{o}lkijad}{t\~{o}lk\adddot}},
+ commentator = {{kommenteerija}{kommenteerija}},
+ commentators = {{kommenteerijad}{kommenteerijad}},
+ annotator = {{kommenteerija}{kommenteerija}},
+ annotators = {{kommenteerijad}{kommenteerijad}},
+ commentary = {{kommentaarid}{kommentaarid}},
+ annotations = {{kommentaarid}{kommentaarid}},
+ introduction = {{sissejuhatus}{sissejuhatus}},
+ foreword = {{eess\~{o}na autor}{eess\~{o}na}},
+ afterword = {{j\"{a}rels\~{o}na autor}{j\"{a}rels\~{o}na}},
+ editortr = {{toimetaja ja t\~{o}lkija}%
+ {toim\adddotspace ja t\~{o}lk\adddot}},
+ editorstr = {{toimetajad ja t\~{o}lkijad}%
+ {toim\adddotspace ja t\~{o}lk\adddot}},
+ editorco = {{toimetaja ja kommenteerija}%
+ {toimetaja ja kommenteerija}},
+ editorsco = {{toimetajad ja kommenteerijad}%
+ {toimetajad ja kommenteerijad}},
+ editoran = {{toimetaja ja kommenteerija}%
+ {toimetaja ja kommenteerija}},
+ editorsan = {{toimetajad ja kommenteerijad}%
+ {toimetajad ja kommenteerijad}},
+ editorin = {{toimetaja ja sissejuhatus}%
+ {toimetaja ja sissejuhatus}},
+ editorsin = {{toimetajad ja sissejuhatus}%
+ {toimetajad ja sissejuhatus}},
+ editorfo = {{toimetaja ja eess\~{o}na}%
+ {toimetaja ja eess\~{o}na}},
+ editorsfo = {{toimetajad ja eess\~{o}na}%
+ {toimetajad ja eess\~{o}na}},
+ editoraf = {{toimetaja ja j\"{a}rels\~{o}na}%
+ {toimetaja ja j\"{a}rels\~{o}na}},
+ editorsaf = {{toimetajad ja j\"{a}rels\~{o}na}%
+ {toimetajad ja j\"{a}rels\~{o}na}},
+ editortrco = {{toimetaja, t\~{o}lkija ja kommenteerija} %
+ {toim., t\~{o}lk\adddotspace ja komm\adddot}},
+ editorstrco = {{toimetajad, t\~{o}lkijad ja kommenteerijad} %
+ {toim., t\~{o}lk\adddotspace ja komm\adddot}},
+ editortran = {{toimetaja, t\~{o}lkija ja kommenteerija} %
+ {toim., t\~{o}lk\adddotspace ja annot\adddot}},
+ editorstran = {{toimetajad, t\~{o}lkijad ja kommenteerijad} %
+ {toim., t\~{o}lk\adddotspace ja annot\adddot}},
+ editortrin = {{toimetaja, t\~{o}lkija ja sissejuhatus} %
+ {toim., t\~{o}lk\adddotspace ja sissej\adddot}},
+ editorstrin = {{toimetajad, t\~{o}lkijad ja sissejuhatus} %
+ {toim., t\~{o}lk\adddotspace ja sissej\adddot}},
+ editortrfo = {{toimetaja, t\~{o}lkija ja eess\~{o}na} %
+ {toim., t\~{o}lk\adddotspace ja eess\adddot}},
+ editorstrfo = {{toimetajad, t\~{o}lkijad ja eess\~{o}na} %
+ {toim., t\~{o}lk\adddotspace ja forew\adddot}},
+ editortraf = {{toimetaja, t\~{o}lkija ja j\"{a}rels\~{o}na} %
+ {toim., t\~{o}lk\adddotspace ja j\"{a}rels\adddot}},
+ editorstraf = {{toimetajad, t\~{o}lkijad ja j\"{a}rels} %
+ {toim., t\~{o}lk\adddotspace ja j\"{a}rels\adddot}},
+ editorcoin = {{toimetaja, kommenteerija ja sissejuhatus} %
+ {toim., komm\adddotspace ja sissej\adddot}},
+ editorscoin = {{toimetajad, kommenteerijad ja sissejuhatus} %
+ {toim., komm\adddotspace ja sissej\adddot}},
+ editorcofo = {{toimetaja, kommenteerija ja eess\~{o}na} %
+ {toim., komm\adddotspace ja forew\adddot}},
+ editorscofo = {{toimetajad, kommenteerija ja eess\~{o}na} %
+ {toim., komm\adddotspace ja eess\adddot}},
+ editorcoaf = {{toimetaja, kommenteerija ja j\"{a}rels\~{o}na} %
+ {toim., komm\adddotspace ja j\"{a}rels\adddot}},
+ editorscoaf = {{toimetajad, kommenteerijad ja j\"{a}rels\~{o}na} %
+ {toim., komm\adddotspace ja j\"{a}rels\adddot}},
+ editoranin = {{toimetaja, kommenteerija ja sissejuhatus} %
+ {toim., annot\adddotspace ja sissej\adddot}},
+ editorsanin = {{toimetajad, kommenteerijad ja sissejuhatus} %
+ {toim., annot\adddotspace ja sissej\adddot}},
+ editoranfo = {{toimetaja, annoteerja ja eess\~{o}na} %
+ {toim., annot\adddotspace ja eess\adddot}},
+ editorsanfo = {{toimetajad, kommenteerijad ja eess\~{o}na} %
+ {toim., annot\adddotspace ja eess\adddot}},
+ editoranaf = {{toimetaja, kommenteerija ja j\"{a}rels\~{o}na} %
+ {toim., annot\adddotspace ja j\"{a}rels\adddot}},
+ editorsanaf = {{toimetajad, kommenteerijad ja j\"{a}rels\~{o}na} %
+ {toim., annot\adddotspace ja j\"{a}rels\adddot}},
+ editortrcoin = {{toimetaja, t\~{o}lkija, kommenteerija ja sissejuhatus} %
+ {toim., t\~{o}lk., komm\adddotspace ja sissej\adddot}},
+ editorstrcoin = {{toimetajad, t\~{o}lkijad, kommenteerijad ja sissejuhatus} %
+ {toim., t\~{o}lk., komm\adddotspace ja sissej\adddot}},
+ editortrcofo = {{toimetaja, t\~{o}lkija, kommenteerija ja eess\~{o}na} %
+ {toim., t\~{o}lk., komm\adddotspace ja eess\adddot}},
+ editorstrcofo = {{toimetajad, t\~{o}lkijad, kommenteerijad ja eess\~{o}na} %
+ {toim., t\~{o}lk., komm\adddotspace ja eess\adddot}},
+ editortrcoaf = {{toimetaja, t\~{o}lkija, kommentator ja j\"{a}rels\~{o}na} %
+ {toim., t\~{o}lk., komm\adddotspace ja j\"{a}rels\adddot}},
+ editorstrcoaf = {{toimetajad, t\~{o}lkijad, kommenteerijad ja j\"{a}rels\~{o}na} %
+ {toim., t\~{o}lk., komm\adddotspace ja j\"{a}rels\adddot}},
+ editortranin = {{toimetaja, t\~{o}lkija, kommenteerija ja sissejuhatus} %
+ {toim., t\~{o}lk., annot\adddotspace ja sissej\adddot}},
+ editorstranin = {{toimetajad, t\~{o}lkijad, kommenteerijad ja sissejuhatus} %
+ {toim., t\~{o}lk., annot\adddotspace ja sissej\adddot}},
+ editortranfo = {{toimetaja, t\~{o}lkija, kommenteerija ja eess\~{o}na} %
+ {toim., t\~{o}lk., annot\adddotspace ja eess\adddot}},
+ editorstranfo = {{toimetajad, t\~{o}lkijad, kommenteerijad ja eess\~{o}na} %
+ {toim., t\~{o}lk., annot\adddotspace ja eess\adddot}},
+ editortranaf = {{toimetaja, t\~{o}lkija, kommenteerija ja j\"{a}rels\~{o}na} %
+ {toim., t\~{o}lk., annot\adddotspace ja j\"{a}rels\adddot}},
+ editorstranaf = {{toimetajad, t\~{o}lkijad, kommenteerijad ja j\"{a}rels\~{o}na} %
+ {toim., t\~{o}lk., annot\adddotspace ja j\"{a}rels\adddot}},
+ translatorco = {{t\~{o}lkija ja kommenteerija} %
+ {t\~{o}lk\adddotspace ja komm\adddot}},
+ translatorsco = {{t\~{o}lkijad ja kommenteerijad} %
+ {t\~{o}lk\adddotspace ja komm\adddot}},
+ translatoran = {{t\~{o}lkija ja kommenteerija} %
+ {t\~{o}lk\adddotspace ja annot\adddot}},
+ translatorsan = {{t\~{o}lkijad ja kommenteerijad} %
+ {t\~{o}lk\adddotspace ja annot\adddot}},
+ translatorin = {{t\~{o}lkija ja sissejuhatus} %
+ {t\~{o}lk\adddotspace ja sissej\adddot}},
+ translatorsin = {{t\~{o}lkijad ja sissejuhatus} %
+ {t\~{o}lk\adddotspace ja sissej\adddot}},
+ translatorfo = {{t\~{o}lkija ja eess\~{o}na} %
+ {t\~{o}lk\adddotspace ja eess\adddot}},
+ translatorsfo = {{t\~{o}lkijad ja eess\~{o}na} %
+ {t\~{o}lk\adddotspace ja eess\adddot}},
+ translatoraf = {{t\~{o}lkija ja j\"{a}rels\~{o}na} %
+ {t\~{o}lk\adddotspace ja j\"{a}rels\adddot}},
+ translatorsaf = {{t\~{o}lkijad ja j\"{a}rels\~{o}na} %
+ {t\~{o}lk\adddotspace ja j\"{a}rels\adddot}},
+ translatorcoin = {{t\~{o}lkija, kommenteerija ja sissejuhatus} %
+ {t\~{o}lk., komm\adddotspace ja sissej\adddot}},
+ translatorscoin = {{t\~{o}lkijad, kommenteerijad ja sissejuhatus} %
+ {t\~{o}lk., komm\adddotspace ja sissej\adddot}},
+ translatorcofo = {{t\~{o}lkija, kommenteerija ja eess\~{o}na} %
+ {t\~{o}lk., komm\adddotspace ja eess\adddot}},
+ translatorscofo = {{t\~{o}lkijad, kommenteerijad ja eess\~{o}na} %
+ {t\~{o}lk., komm\adddotspace ja eess\adddot}},
+ translatorcoaf = {{t\~{o}lkija, kommenteerija ja j\"{a}rels\~{o}na} %
+ {t\~{o}lk., komm\adddotspace ja j\"{a}rels\adddot}},
+ translatorscoaf = {{t\~{o}lkijad, kommenteerijad ja j\"{a}rels\~{o}na} %
+ {t\~{o}lk., komm\adddotspace ja j\"{a}rels\adddot}},
+ translatoranin = {{t\~{o}lkija, kommenteerija ja sissejuhatus} %
+ {t\~{o}lk., annot\adddotspace ja sissej\adddot}},
+ translatorsanin = {{t\~{o}lkijad, kommenteerijad ja sissejuhatus} %
+ {t\~{o}lk., annot\adddotspace ja sissej\adddot}},
+ translatoranfo = {{t\~{o}lkija, kommenteerija ja eess\~{o}na} %
+ {t\~{o}lk., annot\adddotspace ja eess\adddot}},
+ translatorsanfo = {{t\~{o}lkijad, kommenteerijad ja eess\~{o}na} %
+ {t\~{o}lk., annot\adddotspace ja eess\adddot}},
+ translatoranaf = {{t\~{o}lkija, kommenteerija ja j\"{a}rels\~{o}na} %
+ {t\~{o}lk., annot\adddotspace ja j\"{a}rels\adddot}},
+ translatorsanaf = {{t\~{o}lkijad, kommenteerijad ja j\"{a}rels\~{o}na} %
+ {t\~{o}lk., annot\adddotspace ja j\"{a}rels\adddot}},
+ organizer = {{korraldaja}{korraldaja}},
+ organizers = {{korraldajad}{korraldajad}},
+ byorganizer = {{korraldanud}{korraldanud}},
+ byauthor = {{kirjutanud}{kirj\adddot}},
+ byeditor = {{toimetanud}{toim\adddot}},
+ bycompiler = {{koostanud}{koost\adddot}},
+ byredactor = {{toimetanud}{toim\adddot}},
+ byreviser = {{l\"{a}bivaadanud}{l\"{a}bivaadanud}},
+ byreviewer = {{vaadanud}{vaadanud}},
+ byfounder = {{asutanud}{asutanud}},
+ bycontinuator = {{j\"{a}tkanud}{j\"{a}tkanud}},
+ bycollaborator = {{koost\"{o}\"{o}s}{koost\"{o}\"{o}s}},
+ bytranslator = {{\lbx@lfromlang t\~{o}lkinud}{\lbx@sfromlang t\~{o}lk\adddot}},
+ bycommentator = {{kommenteerinud}{kommenteerinud}},
+ byannotator = {{kommenteerinud}{kommenteerinud}},% FIXME: unsure
+ withcommentator = {{koos kommentaaridega}{koos kommentaaridega}},% FIXME: commentator name should be in the middle
+ withannotator = {{koos kommentaaridega}{koos kommentaaridega}},
+ withintroduction = {{koos tutvustusega}{koos tutvustusega}},% FIXME: unsure
+ withforeword = {{koos eess\~{o}naga}{koos eess\adddot}},
+ withafterword = {{koos j\"{a}rels\~{o}naga}{koos j\"{a}rels\adddot}},
+ byeditortr = {{toimetanud ja \lbx@lfromlang t\~{o}lkinud} %
+ {toim\adddotspace ja \lbx@sfromlang t\~{o}lk\adddot}},
+ byeditorco = {{toimetanud ja kommenteerinud} %
+ {toim\adddotspace ja komment\adddot}},
+ byeditoran = {{toimetanud ja kommenteerinud} %
+ {toim\adddotspace ja komment\adddot}},
+ byeditorin = {{toimetanud ja sissejuhatuse kirjutanud} %
+ {toim\adddotspace ja sissej\adddot}},
+ byeditorfo = {{toimetanud ja eess\~{o}na kirjutanud} %
+ {toim\adddotspace ja eess\adddot}},
+ byeditoraf = {{toimetanud ja j\"{a}rels\~{o}na kirjutanud} %
+ {toim\adddotspace ja j\"{a}rels\adddot}},
+ byeditortrco = {{toimetanud, \lbx@lfromlang t\~{o}lkinud ja kommenteerinud} %
+ {toim., \lbx@sfromlang t\~{o}lk\adddotspace ja komm\adddot}},
+ byeditortran = {{toimetanud, \lbx@lfromlang t\~{o}lkinud ja kommenteerinud} %
+ {toim., \lbx@sfromlang t\~{o}lk\adddotspace ja komment\adddot}},
+ byeditortrin = {{toimetanud, \lbx@lfromlang t\~{o}lkinud ja sissejuhatuse kirjutanud} %
+ {toim., \lbx@sfromlang t\~{o}lk\adddotspace ja sissej\adddot}},
+ byeditortrfo = {{toimetanud, \lbx@lfromlang t\~{o}lkinud ja eess\~{o}na kirjutanud} %
+ {toim., \lbx@sfromlang t\~{o}lk\adddotspace ja eess\adddot}},
+ byeditortraf = {{toimetanud, \lbx@lfromlang t\~{o}lkinud ja j\"{a}rels\~{o}na kirjutanud} %
+ {toim., \lbx@sfromlang t\~{o}lk\adddotspace ja j\"{a}rels\adddot}},
+ byeditorcoin = {{toimetanud, kommenteerinud ja sissejuhatuse kirjutanud} %
+ {toim., komm\adddotspace ja sissej\adddot}},
+ byeditorcofo = {{toimetanud, kommenteerinud ja eess\~{o}na kirjutanud} %
+ {toim., komm\adddotspace ja eess\adddot}},
+ byeditorcoaf = {{toimetanud, kommenteerinud ja j\"{a}rels\~{o}na kirjutanud} %
+ {toim., komm\adddotspace ja j\"{a}rels\adddot}},
+ byeditoranin = {{toimetanud, kommenteerinud ja sissejuhatuse kirjutanud} %
+ {toim., komment\adddotspace ja sissej\adddot}},
+ byeditoranfo = {{toimetanud, kommenteerinud ja eess\~{o}na kirjutanud} %
+ {toim., komment\adddotspace ja eess\adddot}},
+ byeditoranaf = {{toimetanud, kommenteerinud ja j\"{a}rels\~{o}na kirjutanud} %
+ {toim., komment\adddotspace ja j\"{a}rels\adddot}},
+ byeditortrcoin = {{toimetanud, \lbx@lfromlang t\~{o}lkinud, kommenteerinud ja sissejuhatuse kirjutanud} %
+ {toim., \lbx@sfromlang t\~{o}lk., komm\adddotspace ja sissej\adddot}},
+ byeditortrcofo = {{toimetanud, \lbx@lfromlang t\~{o}lkinud, kommenteerinud ja eess\~{o}na kirjutanud} %
+ {toim., \lbx@sfromlang t\~{o}lk., komm\adddotspace ja eess\adddot}},
+ byeditortrcoaf = {{toimetatud, \lbx@lfromlang t\~{o}lkinud, kommenteerinud ja j\"{a}rels\~{o}na kirjutanud} %
+ {toim., \lbx@sfromlang t\~{o}lk., komm\adddotspace ja j\"{a}rels\adddot}},
+ byeditortranin = {{toimetanud, \lbx@lfromlang t\~{o}lkinud, kommenteerinud ja sissejuhatuse kirjutanud} %
+ {toim., \lbx@sfromlang t\~{o}lk., komment\adddotspace ja sissej\adddot}},
+ byeditortranfo = {{toimetanud, \lbx@lfromlang t\~{o}lkinud, kommenteerinud ja eess\~{o}na kirjutanud} %
+ {toim., \lbx@sfromlang t\~{o}lk., komment\adddotspace ja eess\adddot}},
+ byeditortranaf = {{toimetanud, \lbx@lfromlang t\~{o}lkinud, kommenteerinud ja j\"{a}rels\~{o}na kirjutanud} %
+ {toim., \lbx@sfromlang t\~{o}lk., komment\adddotspace ja j\"{a}rels\adddot}},
+ bytranslatorco = {{\lbx@lfromlang t\~{o}lkinud ja kommenteerinud} %
+ {\lbx@sfromlang t\~{o}lk\adddotspace ja komm\adddot}},
+ bytranslatoran = {{\lbx@lfromlang t\~{o}lkinud ja kommenteerinud} %
+ {\lbx@sfromlang t\~{o}lk\adddotspace ja komment\adddot}},
+ bytranslatorin = {{\lbx@lfromlang t\~{o}lkinud ja sissejuhatuse kirjutanud} %
+ {\lbx@sfromlang t\~{o}lk\adddotspace ja sissej\adddot}},
+ bytranslatorfo = {{\lbx@lfromlang t\~{o}lkinud ja eess\~{o}na kirjutanud} %
+ {\lbx@sfromlang t\~{o}lk\adddotspace ja eess\adddot}},
+ bytranslatoraf = {{\lbx@lfromlang t\~{o}lkinud ja j\"{a}rels\~{o}na kirjutanud} %
+ {\lbx@sfromlang t\~{o}lk\adddotspace ja j\"{a}rels\adddot}},
+ bytranslatorcoin = {{\lbx@lfromlang t\~{o}lkinud, kommenteerinud ja sissejuhatuse kirjutanud} %
+ {\lbx@sfromlang t\~{o}lk., komm\adddotspace ja sissej\adddot}},
+ bytranslatorcofo = {{\lbx@lfromlang t\~{o}lkinud, kommenteerinud ja eess\~{o}na kirjutanud} %
+ {\lbx@sfromlang t\~{o}lk., komm\adddotspace ja eess\adddot}},
+ bytranslatorcoaf = {{\lbx@lfromlang t\~{o}lkinud, kommenteerinud ja j\"{a}rels\~{o}na kirjutanud} %
+ {\lbx@sfromlang t\~{o}lk., komm\adddotspace ja j\"{a}rels\adddot}},
+ bytranslatoranin = {{\lbx@lfromlang t\~{o}lkinud, kommenteerinud ja sissejuhatuse kirjutanud} %
+ {\lbx@sfromlang t\~{o}lk., komment\adddotspace ja sissej\adddot}},
+ bytranslatoranfo = {{\lbx@lfromlang t\~{o}lkinud, kommenteerinud ja eess\~{o}na kirjutanud} %
+ {\lbx@sfromlang t\~{o}lk., komment\adddotspace ja eess\adddot}},
+ bytranslatoranaf = {{\lbx@lfromlang t\~{o}lkinud, kommenteerinud ja j\"{a}rels\~{o}na kirjutanud} %
+ {\lbx@sfromlang t\~{o}lk., komment\adddotspace ja j\"{a}rels\adddot}},
+ and = {{ja}{ja}},
+ andothers = {{\mkbibemph{\autocap{e}t\addabbrvspace al\adddot}} %
+ {\mkbibemph{\autocap{e}t\addabbrvspace al\adddot}}},
+ andmore = {{\mkbibemph{\autocap{e}t\addabbrvspace al\adddot}} %
+ {\mkbibemph{\autocap{e}t\addabbrvspace al\adddot}}},
+ volume = {{k\"{o}ide}{k\"{o}ide}},
+ volumes = {{k\"{o}ited}{k\"{o}ited}},
+ involumes = {{osas}{osas}},
+ jourvol = {{k\"{o}ide}{k\"{o}ide}},
+ jourser = {{seeria}{seeria}},
+ book = {{raamat}{raamat}},
+ part = {{osa}{osa}},
+ issue = {{number}{nr\adddot}},
+ newseries = {{uus seerias}{uus seer\adddot}},
+ oldseries = {{vana seeria}{vana seer\adddot}},
+ edition = {{v\"{a}ljaanne}{v\"{a}ljaanne}},
+ reprint = {{kordustr\"{u}kk}{kordustr\"{u}kk}},
+ reprintof = {{kordustr\"{u}kk teosest}{kordustr\"{u}kk teosest}},
+ reprintas = {{kordustr\"{u}kitud kui}{kordustr\"{u}kitud kui}},
+ reprintfrom = {{kordustr\"{u}kitud teosest}{kordustr\"{u}kitud teosest}},
+ reviewof = {{arvustus teosest}{arvustus teosest}},
+ translationof = {{t\~{o}lge}{t\~{o}lge}},
+ translationas = {{t\~{o}lgitud kui}{t\~{o}lgitud kui}},
+ translationfrom = {{t\~{o}lgitud}{t\~{o}lgitud}},
+ origpubas = {{algselt avaldatud kui}{algselt avaldatud kui}}, % FIXME: unsure, could also be 'esmatrükitud kui'
+ origpubin = {{algselt avaldatud aastal}{algselt avaldatud aastal}}, % FIXME: unsure, could also be 'esmatrükitud aastal'
+ astitle = {{pealkirjaga}{pealkirjaga}},
+ bypublisher = {{v\"{a}lja andnud}{v\"{a}lja andnud}},
+ page = {{lehek\"{u}lg}{lk\adddot}},
+ pages = {{lehek\"{u}ljed}{lk\adddot}},
+ column = {{veerg}{veerg}},
+ columns = {{veerud}{veerud}},
+ line = {{rida}{rida}},
+ lines = {{read}{read}},
+ nodate = {{kuup\"{a}ev puudub}{kuup\"{a}ev puudub}},
+ verse = {{salm}{salm}},
+ verses = {{salmid}{salmid}},
+ section = {{jagu}{jagu}},
+ sections = {{jaod}{jaod}},
+ paragraph = {{l\~{o}ik}{l\~{o}ik}},
+ paragraphs = {{l\~{o}igud}{l\~{o}igud}},
+ pagetotal = {{lehek\"{u}lgi kokku}{lk\adddotspace kokku}},% FIXME: unsure
+ pagetotals = {{lehek\"{u}lgesid kokku}{lk\adddotspace kokku}},% FIXME: unsure
+ columntotal = {{veerge kokku}{veerge kokku}},% FIXME: unsure
+ columntotals = {{veergusid kokku}{veergusid kokku}},% FIXME: unsure
+ linetotal = {{ridu kokku}{ridu kokku}},% FIXME: unsure
+ linetotals = {{ridasid kokku}{ridasid kokku}},% FIXME: unsure
+ versetotal = {{salmi kokku}{salmi kokku}},% FIXME: unsure
+ versetotals = {{salmesid kokku}{salmesid kokku}},% FIXME: unsure
+ sectiontotal = {{jagusid kokku}{jagusid kokku}},% FIXME: unsure
+ sectiontotals = {{jagusid kokku}{jagusid kokku}},% FIXME: unsure
+ paragraphtotal = {{l\~{o}ike kokku}{l\~{o}ike kokku}},% FIXME: unsure
+ paragraphtotals = {{l\~{o}ikusid kokku}{l\~{o}ikusid kokku}},% FIXME: unsure
+ in = {{teoses}{teoses}},
+ inseries = {{sarjas}{sarjas}},
+ ofseries = {{sarjast}{sarjast}},
+ number = {{number}{nr}},
+ chapter = {{peat\"{u}kk}{ptk}},
+ bathesis = {{bakalaureuse t\"{o}\"{o}}{bakalaureuse t\"{o}\"{o}}},
+ mathesis = {{magistrit\"{o}\"{o}}{magistrit\"{o}\"{o}}},
+ phdthesis = {{doktorit\"{o}\"{o}}{doktorit\"{o}\"{o}}},
+ candthesis = {{kandidaadi v\"{a}itekiri}{kandidaadi v\"{a}itekiri}},% Literal translation of "Candidate thesis".
+ resreport = {{uuringuraport}{uuringuraport}},
+ techreport = {{tehniline raport}{tehniline raport}},
+ software = {{tarkvara}{tarkvara}},
+ datacd = {{CD-ROM}{CD-ROM}},
+ audiocd = {{audioplaat}{audioplaat}},
+ version = {{versioon}{versioon}},
+ url = {{aadress}{aadress}},
+ urlfrom = {{saadaval}{saadaval}},
+ urlseen = {{vaadatud}{vaadatud}},
+ inpreparation = {{koostamisel}{koostamisel}},
+ submitted = {{esitatud}{esitatud}},
+ forthcoming = {{tulevases}{tulevases}},
+ inpress = {{tr\"{u}kis}{tr\"{u}kis}},
+ prepublished = {{eelnevalt avaldatud} {eelnevalt avaldatud}},
+ citedas = {{edaspidi viidatud kui}{edaspidi viidatud kui}},
+ thiscite = {{eriti}{eriti}},
+ seenote = {{vaata m\"{a}rkus}{vt m\"{a}rkus}},
+ quotedin = {{noteeritud}{noteeritud}}, % FIXME: unsure
+ idem = {{\mkbibemph{\autocap{i}dem}}{\mkbibemph{\autocap{i}dem}}}, % It its not necessary to translate Latin phrases.
+ idemsm = {{\mkbibemph{\autocap{i}dem}}{\mkbibemph{\autocap{i}dem}}},
+ idemsf = {{\mkbibemph{\autocap{e}adem}}{\mkbibemph{\autocap{e}adem}}},
+ idemsn = {{\mkbibemph{\autocap{i}dem}}{\mkbibemph{\autocap{i}dem}}},
+ idempm = {{\mkbibemph{\autocap{e}idem}}{\mkbibemph{\autocap{e}idem}}},
+ idempf = {{\mkbibemph{\autocap{e}aedem}}{\mkbibemph{\autocap{e}aedem}}},
+ idempn = {{\mkbibemph{\autocap{e}adem}}{\mkbibemph{\autocap{e}adem}}},
+ idempp = {{\mkbibemph{\autocap{e}idem}}{\mkbibemph{\autocap{e}idem}}},
+ ibidem = {{\mkbibemph{\autocap{i}bidem}}{\mkbibemph{\autocap{i}bid\adddot}}},
+ opcit = {{\mkbibemph{\autocap{o}p\adddotspace cit\adddot}}{\mkbibemph{\autocap{o}p\adddotspace cit\adddot}}},
+ loccit = {{\mkbibemph{\autocap{l}oc\adddotspace cit\adddot}}{\mkbibemph{\autocap{l}oc\adddotspace cit\adddot}}},
+ confer = {{\mkbibemph{\autocap{c}f\adddot}}{\mkbibemph{\autocap{c}f\adddot}}},
+ sequens = {{\mkbibemph{\autocap{s}q\adddot}}{\mkbibemph{\autocap{s}q\adddot}}},
+ sequentes = {{\mkbibemph{\autocap{s}qq\adddot}}{\mkbibemph{\autocap{s}qq\adddot}}},
+ passim = {{\mkbibemph{\autocap{p}assim}}{\mkbibemph{\autocap{p}ass\adddot}}},
+ see = {{vaata}{vt}},
+ seealso = {{vaata ka}{vt ka}},
+ backrefpage = {{viidatud lehel}{viidatud lehel}},
+ backrefpages = {{viidatud lehek\"{u}ljed}{viidatud lehek\"{u}ljed}},
+ january = {{jaanuar}{jaanuar}},
+ february = {{veebruar}{veebruar}},
+ march = {{m\"{a}rts}{m\"{a}rts}},
+ april = {{aprill}{aprill}},
+ may = {{mai}{mai}},
+ june = {{juuni}{juuni}},
+ july = {{juuli}{juuli}},
+ august = {{august}{august}},
+ september = {{september}{september}},
+ october = {{oktoober}{oktoober}},
+ november = {{november}{november}},
+ december = {{detsember}{detsember}},
+ langamerican = {{Ameerika inglise keel}{Ameerika inglise keel}},
+ langbrazilian = {{brasiilia keel}{brasiilia keel}},
+ langbulgarian = {{bulgaaria keel}{bulgaaria keel}},
+ langcatalan = {{katalaani keel}{katalaani keel}},
+ langcroatian = {{horvaadi keel}{horvaadi keel}},
+ langczech = {{t\v{s}ehhi keel}{t\v{s}ehhi keel}},
+ langdanish = {{taani keel}{taani keel}},
+ langdutch = {{hollandi keel}{hollandi keel}},
+ langenglish = {{inglise keel}{inglise keel}},
+ langestonian = {{eesti keel}{eesti keel}},
+ langfinnish = {{soome keel}{soome keel}},
+ langfrench = {{prantsuse keel}{prantsuse keel}},
+ langgalician = {{galeegi keel}{galeegi keel}},
+ langgerman = {{saksa keel}{saksa keel}},
+ langgreek = {{kreeka keel}{kreeka keel}},
+ langhungarian = {{ungari keel}{ungari keel}},
+ langitalian = {{itaalia keel}{itaalia keel}},
+ langjapanese = {{jaapani keel}{jaapani keel}},
+ langlatin = {{ladina keel}{ladina keel}},
+ langlatvian = {{l\"{a}ti keel}{l\"{a}ti keel}},
+ langnorwegian = {{norra keel}{norra keel}},
+ langpolish = {{poola keel}{poola keel}},
+ langportuguese = {{portugali keel}{portugali keel}},
+ langrussian = {{vene keel}{vene keel}},
+ langslovak = {{slovakia keel}{slovakia keel}},
+ langslovene = {{sloveeni keel}{sloveeni keel}},
+ langspanish = {{hispaania keel}{hispaania keel}},
+ langswedish = {{rootsi keel}{rootsi keel}},
+ langukrainian = {{ukraina keel}{ukraina keel}},
+ fromamerican = {{Ameerika inglise keelest}{Ameerika inglise keelest}},
+ frombrazilian = {{brasiilia keelest}{brasiilia keelest}},
+ frombulgarian = {{bulgaaria keelest}{bulgaaria keelest}},
+ fromcatalan = {{katalani keelest}{kalatalani keelest}},
+ fromcroatian = {{horvaadi keelest}{horvaadi keelest}},
+ fromczech = {{t\v{s}ehhi keelest}{t\v{s}ehhi keelest}},
+ fromdanish = {{taani keelest}{taani keelest}},
+ fromdutch = {{hollandi keelest}{hollandi keelest}},
+ fromenglish = {{inglise keelest}{inglise keelest}},
+ fromestonian = {{eesti keelest}{eesti keelest}},
+ fromfinnish = {{soome keelest}{soome keelest}},
+ fromfrench = {{prantsuse keelest}{prantsuse keelest}},
+ fromgalician = {{galeegi keelest}{galeegi keelest}},
+ fromgerman = {{saksa keelest}{saksa keelest}},
+ fromgreek = {{kreeka keelest}{kreeka keelest}},
+ fromhungarian = {{ungari keelest}{ungari keelest}},
+ fromitalian = {{itaalia keelest}{itaalia keelest}},
+ fromjapanese = {{jaapani keelest}{jaapani keelest}},
+ fromlatin = {{ladina keelest}{ladina keelest}},
+ fromlatvian = {{l\"{a}ti keelest}{l\"{a}ti keelest}},
+ fromnorwegian = {{norra keelest}{norra keelest}},
+ frompolish = {{poola keelest} {poola keelest}},
+ fromportuguese = {{portugali keelest}{portugali keelest}},
+ fromrussian = {{vene keelest}{vene keelest}},
+ fromslovak = {{slovakia keelest}{slovakia keelest}},
+ fromslovene = {{sloveenia keelest}{sloveenia keelest}},
+ fromspanish = {{hispaania keelest}{hispaania keelest}},
+ fromswedish = {{rootsi keelest}{rootsi keelest}},
+ fromukrainian = {{ukraina keelest}{ukraina keelest}},
+ countryde = {{Saksamaa}{DE}},
+ countryeu = {{Euroopa Liit}{EL}},
+ countryep = {{Euroopa Parlament}{EP}},
+ countryfr = {{Prantsusmaa}{FR}},
+ countryuk = {{Suurbritannia}{GB}},
+ countryus = {{Ameerika}{US}},
+ patent = {{patent}{pat\adddot}},
+ patentde = {{Saksa patent}{Saksa pat\adddot}},
+ patenteu = {{Euroopa patent}{Euroopa pat\adddot}},
+ patentfr = {{Prantsuse patent}{Prantsuse pat\adddot}},
+ patentuk = {{Briti patent}{Briti pat\adddot}},
+ patentus = {{U.S\adddotspace patent}{U.S\adddotspace pat\adddot}},
+ patreq = {{patendi taotlus}{pat\adddotspace taotl\adddot}},
+ patreqde = {{Saksa patendi taotlus}{Saksa pat\adddotspace taotl\adddot}},
+ patreqeu = {{Euroopa patendi taotlus}{Euroopa pat\adddotspace taotl\adddot}},
+ patreqfr = {{Prantsuse patendi taotlus}{Prantsuse pat\adddotspace taotl\adddot}},
+ patrequk = {{Briti patendi taotlus}{Briti pat\adddotspace taotl\adddot}},
+ patrequs = {{U.S\adddotspace patendi taotlus.}{U.S\adddotspace pat\adddotspace taotl\adddot}},
+ file = {{fail}{fail}},
+ library = {{raamatukogu}{raamatukogu}},
+ abstract = {{teesid}{teesid}},
+ annotation = {{kommentaarid}{kommentaarid}},
+ commonera = {{meie ajaarvamise j\"argi}{m\adddot a\adddot j}},
+ beforecommonera = {{enne meie ajaarvamist}{e\adddot m\adddot a}},
+ annodomini = {{p\"arast Kristust}{pKr}},
+ beforechrist = {{enne Kristust}{eKr}},
+ circa = {{\mkbibemph{\autocap{c}a}}{\mkbibemph{\autocap{c}a}}},
+ spring = {{kevadel}{kevadel}},
+ summer = {{suvel}{suvel}},
+ autumn = {{s\"{u}gisel}{s\"{u}gisel}},
+ winter = {{talvel}{talvel}},
+% springN = {{}{}},% FIXME: missing
+% summerN = {{}{}},% FIXME: missing
+% autumnN = {{}{}},% FIXME: missing
+% winterN = {{}{}},% FIXME: missing
+% springS = {{}{}},% FIXME: missing
+% summerS = {{}{}},% FIXME: missing
+% autumnS = {{}{}},% FIXME: missing
+% winterS = {{}{}},% FIXME: missing
+% Q1 = {{}{}},% FIXME: missing
+% Q2 = {{}{}},% FIXME: missing
+% Q3 = {{}{}},% FIXME: missing
+% Q4 = {{}{}},% FIXME: missing
+% QD1 = {{}{}},% FIXME: missing
+% QD2 = {{}{}},% FIXME: missing
+% QD3 = {{}{}},% FIXME: missing
+% S1 = {{}{}},% FIXME: missing
+% S2 = {{}{}},% FIXME: missing
+ am = {{AM}{AM}},
+ pm = {{PM}{PM}},
+}
+
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/lbx/finnish-ms.lbx b/macros/latex/contrib/biblatex-ms/latex/lbx/finnish-ms.lbx
new file mode 100644
index 0000000000..5ed7056bd1
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/lbx/finnish-ms.lbx
@@ -0,0 +1,625 @@
+\ProvidesFile{finnish-ms.lbx}
+[\abx@lbxid]
+
+% Translator's notes:
+% Some translations look akward but they are made in such a way
+% that they look as good as possible in running text.
+% Source for some items in translations: Kielikello 3/1998.
+% and Liisa Junno: Kirjastosanasto 1. BTJ Kirjastopalvelu 2006.
+
+\DeclareRedundantLanguages{finnish}{finnish}
+
+\NewBibliographyString{%
+ basicjanuary,
+ basicfebruary,
+ basicmarch,
+ basicapril,
+ basicmay,
+ basicjune,
+ basicjuly,
+ basicaugust,
+ basicseptember,
+ basicoctober,
+ basicnovember,
+ basicdecember%
+}
+
+\DeclareBibliographyExtras{%
+ % dashes: may be either \textendash or \textemdash
+ \protected\def\bibrangedash{%
+ \textendash\penalty\hyphenpenalty}% breakable dash
+ \let\finalandcomma=\empty
+ \let\finalandsemicolon=\empty
+ \protected\def\mkbibordinal#1{\stripzeros{#1}\adddot}%
+ \protected\def\mkbibmascord{\mkbibordinal}%
+ \protected\def\mkbibfemord{\mkbibordinal}%
+ \protected\def\mkbibneutord{\mkbibordinal}%
+ \protected\def\mkbibdatelong#1#2#3{%
+ \iffieldundef{#3}
+ {}
+ {\mkbibordinal{\thefield{#3}}%
+ \iffieldundef{#2}{}{\nobreakspace}}%
+ \iffieldundef{#2}
+ {}
+ {\iffieldundef{#3}
+ {\lbx@fi@mkbibmonthbasic{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}}%
+ {\mkbibmonth{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}}}%
+ \iffieldbibstring{#1}
+ {\bibstring{\thefield{#1}}}
+ {\dateeraprintpre{#1}\stripzeros{\thefield{#1}}}}%
+ \protected\def\mkbibdateshort#1#2#3{%
+ \iffieldundef{#3}
+ {}
+ {\mkdayzeros{\thefield{#3}}\adddot
+ \iffieldundef{#2}{}{\thinspace}}%
+ \iffieldundef{#2}
+ {}
+ {\mkmonthzeros{\thefield{#2}}%
+ \iffieldundef{#1}
+ {}
+ {\iffieldundef{#3}{/}{\adddot\thinspace}}}%
+ \iffieldbibstring{#1}
+ {\bibstring{\thefield{#1}}}
+ {\dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}}%
+ \savecommand\lbx@lfromlang
+ \savecommand\lbx@sfromlang
+ \def\lbx@lfromlang{%
+ \iflistundef{origlanguage}
+ {}
+ {\printlist[lfromoriglanguage]{origlanguage}\space}}%
+ \def\lbx@sfromlang{%
+ \iflistundef{origlanguage}
+ {}
+ {\printlist[sfromoriglanguage]{origlanguage}\space}}%
+ \savebibmacro{in:}%
+ \renewbibmacro{in:}{%
+ \ifentrytype{article}
+ {}
+ {\bibstring{in}%
+ \printunit{\intitlepunct}}}%
+ \expandafter\protected\expandafter\def\csname mkbibtime24h\endcsname#1#2#3#4{%
+ \iffieldundef{#1}
+ {}
+ {\mktimezeros{\thefield{#1}}%
+ \iffieldundef{#2}{}{\bibtimesep}}%
+ \iffieldundef{#2}
+ {}
+ {\mktimezeros{\thefield{#2}}%
+ \iffieldundef{#3}{}{\bibtimesep}}%
+ \iffieldundef{#3}
+ {}
+ {\mktimezeros{\thefield{#3}}}%
+ \iffieldundef{#4}{}
+ {\bibtimezonesep
+ \mkbibtimezone{\thefield{#4}}}}%
+ \expandafter\protected\expandafter\def\csname mkbibtime12h\endcsname#1#2#3#4{%
+ \stripzeros{\mktimehh{\thefield{#1}}}\bibtimesep
+ \forcezerosmdt{\thefield{#2}}%
+ \iffieldundef{#3}{}
+ {\bibtimesep
+ \forcezerosmdt{\thefield{#3}}}%
+ \space
+ \ifnumless{\thefield{#1}}{12}
+ {\bibstring{am}}
+ {\bibstring{pm}}%
+ \iffieldundef{#4}{}
+ {\space\bibtimezonesep
+ \parentext{\mkbibtimezone{\thefield{#4}}}}}%
+ \protected\def\mkbibyeardivisiondateshort#1#2{%
+ \mkbibyeardivision{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}%
+ \dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}%
+ \protected\def\mkbibyeardivisiondatelong#1#2{%
+ \mkbibyeardivision{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}%
+ \dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}%
+}
+
+\UndeclareBibliographyExtras{%
+ \restorecommand\lbx@lfromlang
+ \restorecommand\lbx@sfromlang
+ \restorebibmacro{in:}%
+}
+
+\DeclareBibliographyStrings{%
+ bibliography = {{Kirjallisuusluettelo}{Kirjallisuus}},
+ references = {{Viitteet}{Viitteet}},
+ shorthands = {{Lyhenteet}{Lyhenteet}},
+ editor = {{toimittanut}{toim\adddot}},
+ editors = {{toimittaneet}{toim\adddot}},% Abbreviation is the same in singular and plural.
+ compiler = {{koontanut}{koontanut}},% FIXME: unsure
+ compilers = {{koontaneet}{koontaneet}},% FIXME: unsure
+ redactor = {{toimittanut}{toim\adddot}},% FIXME: unsure
+ redactors = {{toimittaneet}{toim\adddot}},% FIXME: unsure
+ reviser = {{toimittanut}{toim\adddot}},% FIXME: unsure
+ revisers = {{toimittaneet}{toim\adddot}},% FIXME: unsure
+ founder = {{perustaja}{perustaja}},
+ founders = {{perustajat}{perustajat}},
+ continuator = {{jatkaja}{jatkaja}},% FIXME: unsure
+ continuators = {{jatkajat}{jatkajat}},% FIXME: unsure
+ collaborator = {{avustaja}{avustaja}},% FIXME: unsure
+ collaborators = {{avustajat}{avustajat}},% FIXME: unsure
+ translator = {{k\"a\"ant\"anyt}{k\"a\"ant\adddot}},
+ translators = {{k\"a\"ant\"anyt}{k\"a\"ant\adddot}},
+ commentator = {{kommentaarin kirjoittanut}{kommentaarin kirjoittanut}},
+ commentators = {{kommentaarin kirjoittaneet}{kommentaarin kirjoittaneet}},
+ annotator = {{selityksin varustanut}{selityksin varustanut}},% FIXME: unsure
+ annotators = {{selityksin varustaneet}{selityksin varustaneet}},% FIXME: unsure
+ commentary = {{kommentaari}{kommentaari}},
+ annotations = {{selitykset}{selitykset}},% FIXME: unsure
+ introduction = {{johdanto}{johdanto}},
+ foreword = {{esipuhe}{esipuhe}},% Is "alkusanat" better?
+ afterword = {{j\"alkisanat}{j\"alkisanat}},
+ editortr = {{toimittanut ja k\"a\"ant\"anyt}%
+ {toim\adddotspace ja k\"a\"ant\adddot}},
+ editorstr = {{toimittaneet ja k\"a\"ant\"aneet}%
+ {toim\adddotspace ja k\"a\"ant\adddot}},
+ editorco = {{toimittanut ja kommentaarin kirjoittanut}%
+ {toimittanut ja kommentaarin kirjottanut}},
+ editorsco = {{toimittaneet ja kommentaarin kirjoittaneet}%
+ {toimittaneet ja kommentaarin kirjoittaneet}},
+ editoran = {{toimittanut ja selityksin varustanut}% FIXME: unsure
+ {toimittanut ja selityksin varustanut}},
+ editorsan = {{toimittaneet ja selityksin varustaneet}% FIXME: unsure
+ {toimittaneet ja selityksin varustaneet}},
+ editorin = {{toimittanut ja johdannon kirjoittanut}%
+ {toimittanut ja johdannon kirjoittanut}},
+ editorsin = {{toimittaneet ja johdannon kirjoittaneet}%
+ {toimittaneet ja johdannon kirjoittaneet}},
+ editorfo = {{toimittanut ja esipuheen kirjoittanut}%
+ {toimittanut ja esipuheen kirjoittanut}},
+ editorsfo = {{toimittaneet ja esipuheen kirjoittaneet}%
+ {toimittaneet ja esipuheen kirjoittaneet}},
+ editoraf = {{toimittanut ja j\"alkisanat kirjoittanut}%
+ {toimittanut ja j\"alkisanat kirjoittanut}},
+ editorsaf = {{toimittaneet ja j\"alkisanat kirjoittaneet}%
+ {toimittaneet ja j\"alkisanat kirjoittaneet}},
+ editortrco = {{toimittanut, k\"a\"ant\"anyt ja kommentaarin kirjoittanut}%
+ {toimittanut, k\"a\"ant\"anyt ja kommentaarin kirjoittanut}},
+ editorstrco = {{toimittaneet, k\"a\"ant\"aneet ja kommentaarin kirjoittaneet}%
+ {toimittaneet, k\"a\"ant\"aneet ja kommentaarin kirjoittaneet}},
+ editortran = {{toimittanut, k\"a\"ant\"anyt ja selityksin varustanut}% FIXME: unsure
+ {toimittanut, k\"a\"ant\"anyt ja selityksin varustanut}},
+ editorstran = {{toimittaneet, k\"a\"ant\"aneet ja selityksin varustaneet}% FIXME: unsure
+ {toimittaneet, k\"a\"ant\"aneet ja selityksin varustaneet}},
+ editortrin = {{toimittanut, k\"a\"ant\"anyt ja johdannon kirjoittanut}%
+ {toimittanut, k\"a\"ant\"anyt ja johdannon kirjoittanut}},
+ editorstrin = {{toimittaneet, k\"a\"ant\"aneet ja johdannon kirjoittaneet}%
+ {toimittaneet, k\"a\"ant\"aneet ja johdannon kirjoittaneet}},
+ editortrfo = {{toimittanut, k\"a\"ant\"anyt ja esipuheen kirjoittanut}%
+ {toimittanut, k\"a\"ant\"anyt ja esipuheen kirjoittanut}},
+ editorstrfo = {{toimittaneet, k\"a\"ant\"aneet ja esipuheen kirjoittaneet}%
+ {toimittaneet, k\"a\"ant\"aneet ja esipuheen kirjoittaneet}},
+ editortraf = {{toimittanut, k\"a\"ant\"anyt ja j\"alkisanat kirjoittanut}%
+ {toimittanut, k\"a\"ant\"anyt ja j\"alkisanat kirjoittanut}},
+ editorstraf = {{toimittaneet, k\"a\"ant\"aneet ja j\"alkisanat kirjoittaneet}%
+ {toimittaneet, k\"a\"ant\"aneet ja j\"alkisanat kirjoittaneet}},
+ editorcoin = {{toimittanut, kommentaarin ja johdannon kirjoittanut}%
+ {toimittanut, kommentaarin ja johdannon kirjoittanut}},
+ editorscoin = {{toimittaneet, kommentaarin ja johdannon kirjoittaneet}%
+ {toimittaneet, kommentaarin ja johdannon kirjoittaneet}},
+ editorcofo = {{toimittanut, kommentaarin ja esipuheen kirjoittanut}%
+ {toimittanut, kommentaarin ja esipuheen kirjoittanut}},
+ editorscofo = {{toimittaneet, kommentaarin ja esipuheen kirjoittaneet}%
+ {toimittaneet, kommentaarin ja esipuheen kirjoittaneet}},
+ editorcoaf = {{toimittanut, kommentaarin ja j\"alkisanat kirjoittanut}%
+ {toimittanut, kommentaarin ja j\"alkisanat kirjoittanut}},
+ editorscoaf = {{toimittaneet, kommentaarin ja j\"alkisanat kirjoittaneet}%
+ {toimittaneet, kommentaarin ja j\"alkisanat kirjoittaneet}},
+ editoranin = {{toimittanut, selitykset ja johdannon kirjoittanut}%
+ {toimittanut, selitykset ja johdannon kirjoittanut}},
+ editorsanin = {{toimittaneet, selitykset ja johdannon kirjoittaneet}%
+ {toimittaneet, selitykset ja johdannon kirjoittaneet}},
+ editoranfo = {{toimittanut, selitykset ja esipuheen kirjoittanut}%
+ {toimittanut, selitykset ja esipuheen kirjoittanut}},
+ editorsanfo = {{toimittaneet, selitykset ja esipuheen kirjoittaneet}%
+ {toimittaneet, selitykset ja esipuheen kirjoittaneet}},
+ editoranaf = {{toimittanut, selitykset ja j\"alkisanat kirjoittanut}%
+ {toimittanut, selitykset ja j\"alkisanat kirjoittanut}},
+ editorsanaf = {{toimittaneet, selitykset ja j\"alkisanat kirjoittaneet}%
+ {toimittaneet, selitykset ja j\"alkisanat kirjoittaneet}},
+ editortrcoin = {{toimittanut, k\"a\"ant\"anyt, kommentaarin ja johdannon kirjoittanut}%
+ {toimittanut, k\"a\"ant\"anyt, kommentaarin ja johdannon kirjoittanut}},
+ editorstrcoin = {{toimittaneet, k\"a\"ant\"aneet, kommentaarin ja johdannon kirjoittaneet}%
+ {toimittaneet, k\"a\"ant\"aneet, kommentaarin ja johdannon kirjoittaneet}},
+ editortrcofo = {{toimittanut, k\"a\"ant\"anyt, kommentaarin ja esipuheen kirjoittanut}%
+ {toimittanut, k\"a\"ant\"anyt, kommentaarin ja esipuheen kirjoittanut}},
+ editorstrcofo = {{toimittaneet, k\"a\"ant\"aneet, kommentaarin ja esipuheen kirjoittaneet}%
+ {toimittaneet, k\"a\"ant\"aneet, kommentaarin ja esipuheen kirjoittaneet}},
+ editortrcoaf = {{toimittanut, k\"a\"ant\"anyt, kommentaarin ja j\"alkisanat kirjoittanut}%
+ {toimittanut, k\"a\"ant\"anyt, kommentaarin ja j\"alkisanat kirjoittanut}},
+ editorstrcoaf = {{toimittaneet, k\"a\"ant\"aneet, kommentaarin ja j\"alkisanat kirjoittaneet}%
+ {toimittaneet, k\"a\"ant\"aneet, kommentaarin ja j\"alkisanat kirjoittaneet}},
+ editortranin = {{toimittanut, k\"a\"ant\"anyt, selitykset ja johdannon kirjoittanut}%
+ {toimittanut, k\"a\"ant\"anyt, selitykset ja johdannon kirjoittanut}},
+ editorstranin = {{toimittaneet, k\"a\"ant\"aneet, selitykset ja johdannon kirjoittaneet}%
+ {toimittaneet, k\"a\"ant\"aneet, selitykset ja johdannon kirjoittaneet}},
+ editortranfo = {{toimittanut, k\"a\"ant\"anyt, selitykset ja esipuheen kirjoittanut}%
+ {toimittanut, k\"a\"ant\"anyt, selitykset ja esipuheen kirjoittanut}},
+ editorstranfo = {{toimittaneet, k\"a\"ant\"aneet, selitykset ja esipuheen kirjoittaneet}%
+ {toimittaneet, k\"a\"ant\"aneet, selitykset ja esipuheen kirjoittaneet}},
+ editortranaf = {{toimittanut, k\"a\"ant\"anyt, selitykset ja j\"alkisanat kirjoittanut}%
+ {toimittanut, k\"a\"ant\"anyt, selitykset ja j\"alkisanat kirjoittanut}},
+ editorstranaf = {{toimittaneet, k\"a\"ant\"aneet, selitykset ja j\"alkisanat kirjoittaneet}%
+ {toimittaneet, k\"a\"ant\"aneet, selitykset ja j\"alkisanat kirjoittaneet}},
+ translatorco = {{k\"a\"ant\"anyt ja kommentaarin kirjoittanut}%
+ {k\"a\"ant\"anyt ja kommentaarin kirjoittanut}},
+ translatorsco = {{k\"a\"ant\"aneet ja kommentaarin kirjoittaneet}%
+ {k\"a\"ant\"aneet ja kommentaarin kirjoittaneet}},
+ translatoran = {{k\"a\"ant\"anyt ja selityksin varustanut}%
+ {k\"a\"ant\"anyt ja selityksin varustanut}},
+ translatorsan = {{k\"a\"ant\"aneet ja selityksin varustaneet}%
+ {k\"a\"ant\"aneet ja selityksin varustaneet}},
+ translatorin = {{k\"a\"ant\"anyt ja johdannon kirjoittanut}%
+ {k\"a\"ant\"anyt ja johdannon kirjoittanut}},
+ translatorsin = {{k\"a\"ant\"aneet ja johdannon kirjoittaneet}%
+ {k\"a\"ant\"aneet ja johdannon kirjoittaneet}},
+ translatorfo = {{k\"a\"ant\"anyt ja esipuheen kirjoittanut}%
+ {k\"a\"ant\"anyt ja esipuheen kirjoittanut}},
+ translatorsfo = {{k\"a\"ant\"aneet ja esipuheen kirjoittaneet}%
+ {k\"a\"ant\"aneet ja esipuheen kirjoittaneet}},
+ translatoraf = {{k\"a\"ant\"anyt ja j\"alkisanat kirjoittanut}%
+ {k\"a\"ant\"anyt ja j\"alkisanat kirjoittanut}},
+ translatorsaf = {{k\"a\"ant\"aneet ja j\"alkisanat kirjoittaneet}%
+ {k\"a\"ant\"aneet ja j\"alkisanat kirjoittaneet}},
+ translatorcoin = {{k\"a\"ant\"anyt, kommentaarin ja johdannon kirjoittanut}%
+ {k\"a\"ant\"anyt, kommentaarin ja johdannon kirjoittanut}},
+ translatorscoin = {{k\"a\"ant\"aneet, kommentaarin ja johdannon kirjoittaneet}%
+ {k\"a\"ant\"aneet, kommentaarin ja johdannon kirjoittaneet}},
+ translatorcofo = {{k\"a\"ant\"anyt, kommentaarin ja esipuheen kirjoittanut}%
+ {k\"a\"ant\"anyt, kommentaarin ja esipuheen kirjoittanut}},
+ translatorscofo = {{k\"a\"ant\"aneet, kommentaarin ja esipuheen kirjoittaneet}%
+ {k\"a\"ant\"aneet, kommentaarin ja esipuheen kirjoittaneet}},
+ translatorcoaf = {{k\"a\"ant\"anyt, kommentaarin ja j\"alkisanat kirjoittanut}%
+ {k\"a\"ant\"anyt, kommentaarin ja j\"alkisanat kirjoittanut}},
+ translatorscoaf = {{k\"a\"ant\"aneet, kommentaarin ja j\"alkisanat kirjoittaneet}%
+ {k\"a\"ant\"aneet, kommentaarin ja j\"alkisanat kirjoittaneet}},
+ translatoranin = {{k\"a\"ant\"anyt, selitykset ja johdannon kirjoittanut}%
+ {k\"a\"ant\"anyt, selitykset ja johdannon kirjoittanut}},
+ translatorsanin = {{k\"a\"ant\"aneet, selitykset ja johdannon kirjoittaneet}%
+ {k\"a\"ant\"aneet, selitykset ja johdannon kirjoittaneet}},
+ translatoranfo = {{k\"a\"ant\"anyt, selitykset ja esipuheen kirjoittanut}%
+ {k\"a\"ant\"anyt, selitykset ja esipuheen kirjoittanut}},
+ translatorsanfo = {{k\"a\"ant\"aneet, selitykset ja esipuheen kirjoittaneet}%
+ {k\"a\"ant\"aneet, selitykset ja esipuheen kirjoittaneet}},
+ translatoranaf = {{k\"a\"ant\"anyt, selitykset ja j\"alkisanat kirjoittanut}%
+ {k\"a\"ant\"anyt, selitykset ja j\"alkisanat kirjoittanut}},
+ translatorsanaf = {{k\"a\"ant\"aneet, selitykset ja j\"alkisanat kirjoittaneet}%
+ {k\"a\"ant\"aneet, selitykset ja j\"alkisanat kirjoittaneet}},
+ organizer = {{toimittanut}{toim\adddot}},% FIXME: unsure
+ organizers = {{toimittaneet}{toim\adddot}},% FIXME: unsure
+ byorganizer = {{toimittanut}{toim\adddot}},% FIXME: unsure
+ byauthor = {{kirjoittanut}{kirj\adddot}},
+ byeditor = {{toimittanut}{toim\adddot}},
+ bycompiler = {{koontanut}{koontanut}},
+ byredactor = {{toimittanut}{toim\adddot}},% FIXME: unsure
+ byreviser = {{toimittanut}{toim\adddot}},% FIXME: unsure
+ byreviewer = {{toimittanut}{toim\adddot}},% FIXME: unsure
+ byfounder = {{perustanut}{perustanut}},% FIXME: unsure
+ bycontinuator = {{jatkanut}{jatkanut}},% FIXME: unsure
+ bycollaborator = {{yhteisty\"oss\"a}{yhteisty\"oss\"a}},% FIXME: Bad translation. Impossible to translate with one word.
+ bytranslator = {{\lbx@lfromlang k\"a\"ant\"anyt}{\lbx@sfromlang k\"a\"ant\adddot}},
+ bycommentator = {{kommentaarin kirjoittanut}{kommentaarin kirjoittanut}},% FIXME: unsure
+ byannotator = {{selityksin varustanut}{selityksin varustanut}},% FIXME: unsure
+ withcommentator = {{kommentaarin kirjoittanut}{kommentaarin kirjoittanut}},% FIXME: unsure
+ withannotator = {{selityksin varustanut}{selityksin varustanut}},% FIXME: unsure
+ withintroduction = {{johdannon kirjottanut}{johdannon kirjottanut}},
+ withforeword = {{esipuheen kirjoittanut}{esipuheen kirjoittanut}},
+ withafterword = {{j\"alkisanat kirjoittanut}{j\"alkisanat kirjoittanut}},
+ byeditortr = {{toimittanut ja \lbx@lfromlang k\"a\"ant\"anyt}%
+ {toim\adddotspace ja \lbx@sfromlang k\"a\"ant\adddot}},
+ byeditorco = {{toimittanut ja kommentaarin kirjoittanut}%
+ {toimittanut ja kommentaarin kirjoittanut}},
+ byeditoran = {{toimittanut ja selityksin varustanut}%
+ {toimittanut ja selityksin varustanut}},
+ byeditorin = {{toimittanut ja johdannon kirjoittanut}%
+ {toimittanut ja johdannon kirjoittanut}},
+ byeditorfo = {{toimittanut ja esipuheen kirjoittanut}%
+ {toimittanut ja esipuheen kirjoittanut}},
+ byeditoraf = {{toimittanut ja j\"alkisanat kirjoittanut}%
+ {toimittanut ja j\"alkisanat kirjoittanut}},
+ byeditortrco = {{toimittanut, \lbx@lfromlang k\"a\"ant\"anyt ja kommentaarin kirjoittanut}%
+ {toimittanut, \lbx@sfromlang k\"a\"ant\"anyt ja kommentaarin kirjoittanut}},
+ byeditortran = {{toimittanut, \lbx@lfromlang k\"a\"ant\"anyt ja selityksin varustanut}%
+ {toimittanut, \lbx@sfromlang k\"a\"ant\"anyt ja selityksin varustanut}},
+ byeditortrin = {{toimittanut, \lbx@lfromlang k\"a\"ant\"anyt ja johdannon kirjoittanut}%
+ {toimittanut, \lbx@sfromlang k\"a\"ant\"anyt ja johdannon kirjoittanut}},
+ byeditortrfo = {{toimittanut, \lbx@lfromlang k\"a\"ant\"anyt ja esipuheen kirjoittanut}%
+ {toimittanut, \lbx@sfromlang k\"a\"ant\"anyt ja esipuheen kirjoittanut}},
+ byeditortraf = {{toimittanut, \lbx@lfromlang k\"a\"ant\"anyt ja j\"alkisanat kirjoittanut}%
+ {toimittanut, \lbx@sfromlang k\"a\"ant\"anyt ja j\"alkisanat kirjoittanut}},
+ byeditorcoin = {{toimittanut, kommentaarin ja johdannon kirjoittanut}%
+ {toimittanut, kommentaarin ja johdannon kirjoittanut}},
+ byeditorcofo = {{toimittanut, kommentaarin ja esipuheen kirjoittanut}%
+ {toimittanut, kommentaarin ja esipuheen kirjoittanut}},
+ byeditorcoaf = {{toimittanut, kommentaarin ja j\"alkisanat kirjoittanut}%
+ {toimittanut, kommentaarin ja j\"alkisanat kirjoittanut}},
+ byeditoranin = {{toimittanut, selitykset ja johdannon kirjoittanut}%
+ {toimittanut, selitykset ja johdannon kirjoittanut}},
+ byeditoranfo = {{toimittanut, selitykset ja esipuheen kirjoittanut}%
+ {toimittanut, selitykset ja esipuheen kirjoittanut}},
+ byeditoranaf = {{toimittanut, selitykset ja j\"alkisanat kirjoittanut}%
+ {toimittanut, selitykset ja j\"alkisanat kirjoittanut}},
+ byeditortrcoin = {{toimittanut, \lbx@lfromlang k\"a\"ant\"anyt, kommentaarin ja johdannon kirjoittanut}%
+ {toimittanut, \lbx@sfromlang k\"a\"ant\"anyt, kommentaarin ja johdannon kirjoittanut}},
+ byeditortrcofo = {{toimittanut, \lbx@lfromlang k\"a\"ant\"anyt, kommentaarin ja esipuheen kirjoittanut}%
+ {toimittanut, \lbx@sfromlang k\"a\"ant\"anyt, kommentaarin ja esipuheen kirjoittanut}},
+ byeditortrcoaf = {{toimittanut, \lbx@lfromlang k\"a\"ant\"anyt, kommentaarin ja j\"alkisanat kirjoittanut}%
+ {toimittanut, \lbx@sfromlang k\"a\"ant\"anyt, kommentaarin ja j\"alkisanat kirjoittanut}},
+ byeditortranin = {{toimittanut, \lbx@lfromlang k\"a\"ant\"anyt, selitykset ja johdannon kirjoittanut}%
+ {toimittanut, \lbx@sfromlang k\"a\"ant\"anyt, selitykset ja johdannon kirjoittanut}},
+ byeditortranfo = {{toimittanut, \lbx@lfromlang k\"a\"ant\"anyt, selitykset ja esipuheen kirjoittanut}%
+ {toimittanut, \lbx@sfromlang k\"a\"ant\"anyt, selitykset ja esipuheen kirjoittanut}},
+ byeditortranaf = {{toimittanut, \lbx@lfromlang k\"a\"ant\"anyt, selitykset ja j\"alkisanat kirjoittanut}%
+ {toimittanut, \lbx@sfromlang k\"a\"ant\"anyt, selitykset ja j\"alkisanat kirjoittanut}},
+ bytranslatorco = {{\lbx@lfromlang k\"a\"ant\"anyt ja kommentaarin kirjoittanut}%
+ {\lbx@sfromlang k\"a\"ant\"anyt ja kommentaarin kirjoittanut}},
+ bytranslatoran = {{\lbx@lfromlang k\"a\"ant\"anyt ja selityksin varustanut}%
+ {\lbx@sfromlang k\"a\"ant\"anyt ja selityksin varustanut}},
+ bytranslatorin = {{\lbx@lfromlang k\"a\"ant\"anyt ja johdannon kirjoittanut}%
+ {\lbx@sfromlang k\"a\"ant\"anyt ja johdannon kirjoittanut}},
+ bytranslatorfo = {{\lbx@lfromlang k\"a\"ant\"anyt ja esipuheen kirjoittanut}%
+ {\lbx@sfromlang k\"a\"ant\"anyt ja esipuheen kirjoittanut}},
+ bytranslatoraf = {{\lbx@lfromlang k\"a\"ant\"anyt ja j\"alkisanat kirjoittanut}%
+ {\lbx@sfromlang k\"a\"ant\"anyt ja j\"alkisanat kirjoittanut}},
+ bytranslatorcoin = {{\lbx@lfromlang k\"a\"ant\"anyt, kommentaarin ja johdannon kirjoittanut}%
+ {\lbx@sfromlang k\"a\"ant\"anyt, kommentaarin ja johdannon kirjoittanut}},
+ bytranslatorcofo = {{\lbx@lfromlang k\"a\"ant\"anyt, kommentaarin ja esipuheen kirjoittanut}%
+ {\lbx@sfromlang k\"a\"ant\"anyt, kommentaarin ja esipuheen kirjoittanut}},
+ bytranslatorcoaf = {{\lbx@lfromlang k\"a\"ant\"anyt, kommentaarin ja j\"alkisanat kirjoittanut}%
+ {\lbx@sfromlang k\"a\"ant\"anyt, kommentaarin ja j\"alkisanat kirjoittanut}},
+ bytranslatoranin = {{\lbx@lfromlang k\"a\"ant\"anyt, selityksin varustanut ja johdannon kirjoittanut}%
+ {\lbx@sfromlang k\"a\"ant\"anyt, selityksin varustanut ja johdannon kirjoittanut}},
+ bytranslatoranfo = {{\lbx@lfromlang k\"a\"ant\"anyt, selityksin varustanut ja esipuheen kirjoittanut}%
+ {\lbx@sfromlang k\"a\"ant\"anyt, selityksin varustanut ja esipuheen kirjoittanut}},
+ bytranslatoranaf = {{\lbx@lfromlang k\"a\"ant\"anyt, selityksin varustanut ja j\"alkisanat kirjoittanut}%
+ {\lbx@sfromlang k\"a\"ant\"anyt, selityksin varustanut ja j\"alkisanat kirjoittanut}},
+ and = {{ja}{ja}},
+ andothers = {{et\addabbrvspace al\adddot}{et\addabbrvspace al\adddot}},
+ andmore = {{jne\adddot}{jne\adddot}},
+ volume = {{volyymi}{vol\adddot}},% FIXME: Is {{osa}{osa}} a better translation?
+ volumes = {{volyymit}{vol\adddot}},% Incorrect. Correct translation of "volumes" depends on context.
+ involumes = {{}{}},% Finnish translation of "in 5 volumes" is "5 osassa", so translation of "in" is an empty string.
+ jourvol = {{volyymi}{vol\adddot}},
+ jourser = {{sarja}{sarja}},
+ book = {{kirja}{kirja}},% FIXME: Literal translation of "book". Correct translation depends on context.
+ part = {{osa}{osa}},
+ issue = {{numero}{numero}},
+ newseries = {{uusi sarja}{uusi sarja}},
+ oldseries = {{vanha sarja}{vanha sarja}},
+ edition = {{painos}{painos}},
+ reprint = {{j\"alkipainos}{j\"alkipainos}},
+ reprintof = {{julkaistu aiemmin nimell\"a}{julkaistu aiemmin nimell\"a}},
+ reprintas = {{julkaistu uudelleen nimell\"a}{julkaistu uudelleen nimell\"a}},
+ reprintfrom = {{julkaistu aiemmin nimell\"a}{julkaistu aiemmin nimell\"a}},% FIXME: unsure
+ translationof = {{k\"a\"ann\"os teoksesta}{k\"a\"ann\"os teoksesta}},% FIXME: unsure
+ translationas = {{k\"a\"annetty nimell\"a}{k\"a\"annetty nimell\"a}},% FIXME: unsure
+ translationfrom = {{k\"a\"annetty kielest\"a}{k\"a\"annetty kielest\"a}},% Result is very bad Finnish.
+ reviewof = {{arvostelu teoksesta}{arvostelu teoksesta}},% FIXME: unsure. Bad Finnish.
+ origpubas = {{julkaistu ensi kerran nimell\"a}{julkaistu ensi kerran nimell\"a}},
+ origpubin = {{julkaistu ensi kerran vuonna}{julkaistu ensi kerran vuonna}},
+ astitle = {{nimell\"a}{nimell\"a}},% FIXME: unsure
+ bypublisher = {{julkaissut}{julkaissut}},% FIXME: unsure
+ page = {{sivu}{s\adddot}},
+ pages = {{sivut}{s\adddot}},
+ column = {{palsta}{palsta}},% Here "sarake" is wrong!
+ columns = {{palstat}{palstat}},% Here "sarakkeet" is wrong!
+ line = {{rivi}{rivi}},
+ lines = {{rivit}{rivit}},
+ nodate = {{ei julkaisup\"aiv\"a\"a}{ei julkaisup\"aiv\"a\"a}},% FIXME: unsure
+ verse = {{s\"ae}{s\"ae}},
+ verses = {{s\"akeet}{s\"akeet}},
+ section = {{kohta}{kohta}},% Bad translation, but "pyk\"al\"a" is no better.
+ sections = {{kohdat}{kohdat}},% Bad translation, but "pyk\"al\"at" is no better.
+ paragraph = {{kappale}{kappale}},
+ paragraphs = {{kappaleet}{kappaleet}},
+ pagetotal = {{sivu}{s\adddot}},
+ pagetotals = {{sivut}{s\adddot}},
+ columntotal = {{palsta}{palsta}},% Here "sarake" is wrong!
+ columntotals = {{palstat}{palstat}},% Here "sarakkeet" is wrong!
+ linetotal = {{rivi}{rivi}},
+ linetotals = {{rivit}{rivit}},
+ versetotal = {{s\"ae}{s\"ae}},
+ versetotals = {{s\"akeet}{s\"akeet}},
+ sectiontotal = {{kohta}{kohta}},% Bad translation, but "pyk\"al\"a" is no better.
+ sectiontotals = {{kohdat}{kohdat}},% Bad translation, but "pyk\"al\"at" is no better.
+ paragraphtotal = {{kappale}{kappale}},
+ paragraphtotals = {{kappaleet}{kappaleet}},
+ in = {{teoksessa}{teoksessa}},
+ inseries = {{sarjassa}{sarjassa}},
+ ofseries = {{sarjassa}{sarjassa}},
+ number = {{numero}{nro}},
+ chapter = {{luku}{luku}},
+ bathesis = {{tutkielma}{tutkielma}},% FIXME: unsure
+ mathesis = {{tutkielma}{tutkielma}},% FIXME: unsure
+ phdthesis = {{tohtorinv\"ait\"oskirja}{tohtorinv\"ait\"oskirja}},
+ candthesis = {{kanditaatintutkielma}{kanditaatintutkielma}},% Literal translation of "Candidate thesis".
+ resreport = {{tutkimusraportti}{tutkimusraportti}},
+ techreport = {{tekninen raportti}{tekninen raportti}},% Literal translation of "technical report".
+ software = {{ohjelmisto}{ohjelmisto}},
+ datacd = {{data-CD}{data-CD}},% Is {{CD-ROM}{CD-ROM}} better?
+ audiocd = {{\"a\"ani-CD}{\"a\"ani-CD}},
+ version = {{versio}{versio}},
+ url = {{url}{url}},
+ urlfrom = {{saatavilla osoitteesta}{saatavilla osoitteesta}},% FIXME: unsure
+ urlseen = {{viitattu}{viitattu}},
+ inpreparation = {{valmisteilla}{valmisteilla}},% FIXME: unsure
+ submitted = {{l\"ahetetty}{l\"ahetetty}},% FIXME: unsure
+ forthcoming = {{hyv\"aksytty julkaistavaksi}{hyv\"aksytty julkaistavaksi}},% FIXME: unsure
+ inpress = {{painossa}{painossa}},% FIXME: unsure
+ prepublished = {{esijulkaistu}{esijulkaistu}},% FIXME: unsure
+ citedas = {{jatkossa}{jatkossa}},
+ thiscite = {{sama}{sama}},% FIXME: unsure
+ seenote = {{katso viite}{katso viite}},
+ quotedin = {{lainattu teoksessa}{lainattu teoksessa}},
+ idem = {{idem}{id\adddot}},% It its not necessary to translate Latin phrases.
+ idemsf = {{idem}{id\adddot}},
+ idemsm = {{idem}{id\adddot}},
+ idemsn = {{idem}{id\adddot}},
+ idempf = {{idem}{id\adddot}},
+ idempm = {{idem}{id\adddot}},
+ idempn = {{idem}{id\adddot}},
+ idempp = {{idem}{id\adddot}},
+ ibidem = {{ibidem}{ibid\adddot}},
+ opcit = {{op\adddotspace cit\adddot}{op\adddotspace cit\adddot}},
+ loccit = {{loc\adddotspace cit\adddot}{loc\adddotspace cit\adddot}},
+ confer = {{cf\adddot}{cf\adddot}},
+ sequens = {{sq\adddot}{sq\adddot}},
+ sequentes = {{sqq\adddot}{sqq\adddot}},
+ passim = {{passim}{pass\adddot}},
+ see = {{katso}{ks\adddot}},
+ seealso = {{katso my\"os}{katso my\"os}},
+ backrefpage = {{katso sivu}{ks\adddotspace s\adddot}},
+ backrefpages = {{katso sivut}{ks\adddotspace s\adddot}},
+ january = {{tammikuuta}{tammikuuta}},
+ february = {{helmikuuta}{helmikuuta}},
+ march = {{maaliskuuta}{maaliskuuta}},
+ april = {{huhtikuuta}{huhtikuuta}},
+ may = {{toukokuuta}{toukokuuta}},
+ june = {{kes\"akuuta}{kes\"akuuta}},
+ july = {{hein\"akuuta}{hein\"akuuta}},
+ august = {{elokuuta}{elokuuta}},
+ september = {{syyskuuta}{syyskuuta}},
+ october = {{lokakuuta}{lokakuuta}},
+ november = {{marraskuuta}{marraskuuta}},
+ december = {{joulukuuta}{joulukuuta}},
+ basicjanuary = {{tammikuu}{tammikuu}},
+ basicfebruary = {{helmikuu}{helmikuu}},
+ basicmarch = {{maaliskuu}{maaliskuu}},
+ basicapril = {{huhtikuu}{huhtikuu}},
+ basicmay = {{toukokuu}{toukokuu}},
+ basicjune = {{kes\"akuu}{kes\"akuu}},
+ basicjuly = {{hein\"akuu}{hein\"akuu}},
+ basicaugust = {{elokuu}{elokuu}},
+ basicseptember = {{syyskuu}{syyskuu}},
+ basicoctober = {{lokakuu}{lokakuu}},
+ basicnovember = {{marraskuu}{marraskuu}},
+ basicdecember = {{joulukuu}{joulukuu}},
+ langamerican = {{amerikanenglanti}{amerikanenglanti}},
+ langbrazilian = {{brasilianportugali}{brasilianportugali}},
+ langbulgarian = {{bulgaria}{bulgaria}},
+ langcatalan = {{katalonia}{katalonia}},
+ langcroatian = {{kroatia}{kroatia}},
+ langczech = {{t\v{s}ekki}{t\v{s}ekki}},
+ langdanish = {{tanska}{tanska}},
+ langdutch = {{hollanti}{hollanti}},
+ langenglish = {{englanti}{englanti}},
+ langestonian = {{viro}{viro}},
+ langfinnish = {{suomi}{suomi}},
+ langfrench = {{ranska}{ranska}},
+ langgalician = {{galicia}{galicia}},
+ langgerman = {{saksa}{saksa}},
+ langgreek = {{kreikka}{kreikka}},
+ langhungarian = {{unkari}{unkari}},
+ langitalian = {{italia}{italia}},
+ langlatin = {{latina}{latina}},
+ langlatvian = {{latvia}{latvia}},
+ langnorwegian = {{norja}{norja}},
+ langpolish = {{puola}{puola}},
+ langportuguese = {{portugali}{portugali}},
+ langrussian = {{ven\"aj\"a}{ven\"aj\"a}},
+ langslovak = {{slovakia}{slovakia}},
+ langslovene = {{slovenia}{slovenia}},
+ langspanish = {{espanja}{espanja}},
+ langswedish = {{ruotsi}{ruotsi}},
+ fromamerican = {{englannin kielest\"a}{englannin kielest\"a}},
+ frombrazilian = {{portugalin kielest\"a}{portugalin kielest\"a}},
+ frombulgarian = {{bulgarian kielest\"a}{bulgarian kielest\"a}},
+ fromcatalan = {{katalonian kielest\"a}{katalonian kielest\"a}},
+ fromcroatian = {{kroatian kielest\"a}{kroatian kielest\"a}},
+ fromczech = {{t\v{s}ekin kielest\"a}{t\v{s}ekin kielest\"a}},
+ fromdanish = {{tanskan kielest\"a}{tanskan kielest\"a}},
+ fromdutch = {{hollannin kielest\"a}{hollannin kielest\"a}},
+ fromenglish = {{englannin kielest\"a}{englannin kielest\"a}},
+ fromestonian = {{viron kielest\"a}{viron kielest\"a}},
+ fromfinnish = {{suomen kielest\"a}{suomen kielest\"a}},
+ fromfrench = {{ranskan kielest\"a}{ranskan kielest\"a}},
+ fromgalician = {{galician kielest\"a}{galician kielest\"a}},
+ fromgerman = {{saksan kielest\"a}{saksan kielest\"a}},
+ fromgreek = {{kreikan kielest\"a}{kreikan kielest\"a}},
+ fromhungarian = {{unkarin kielest\"a}{unkarin kielest\"a}},
+ fromitalian = {{italian kielest\"a}{italian kielest\"a}},
+ fromlatin = {{latinan kielest\"a}{latinan kielest\"a}},
+ fromlatvian = {{latvian kielest\"a}{latvian kielest\"a}},
+ fromnorwegian = {{norjan kielest\"a}{norjan kielest\"a}},
+ frompolish = {{puolan kielest\"a}{puolan kielest\"a}},
+ fromportuguese = {{portugalin kielest\"a}{portugalin kielest\"a}},
+ fromrussian = {{ven\"aj\"an kielest\"a}{ven\"aj\"an kielest\"a}},
+ fromslovak = {{slovakian kielest\"a}{slovakian kielest\"a}},
+ fromslovene = {{slovenian kielest\"a}{slovenian kielest\"a}},
+ fromspanish = {{espanjan kielest\"a}{espanjan kielest\"a}},
+ fromswedish = {{ruotsin kielest\"a}{ruotsin kielest\"a}},
+ countryde = {{Saksa}{DE}},
+ countryeu = {{Euroopan Unioni}{EU}},
+ countryep = {{Euroopan Unioni}{EP}},
+ countryfr = {{Ranska}{FR}},
+ countryuk = {{Iso-Britannia}{GB}},
+ countryus = {{Yhdysvallat}{US}},
+ patent = {{patentti}{pat\adddot}},
+ patentde = {{saksalainen patentti}{saksalainen pat\adddot}},
+ patenteu = {{Euroopan Unionin patentti}{Euroopan Unionin pat\adddot}},
+ patentfr = {{ranskalainen patentti}{ranskalainen pat\adddot}},
+ patentuk = {{isobritannialainen patentti}{isobritannialainen pat\adddot}},
+ patentus = {{yhdysvaltalainen patentti}{yhdysvaltalainen pat\adddot}},
+ patreq = {{patenttihakemus}{pat\adddot\ hak\adddot}},
+ patreqde = {{saksalainen patenttihakemus}{saksalainen pat\adddot\ hak\adddot}},
+ patreqeu = {{Euroopan Unionin patenttihakemus}{Euroopan Unionin pat\adddot\ hak\adddot}},
+ patreqfr = {{ranskalainen patenttihakemus}{ranskalainen pat\adddot\ hak\adddot}},
+ patrequk = {{isobritannialainen patenttihakemus}{isobritannialainen pat\adddot\ hak\adddot}},
+ patrequs = {{yhdysvaltalainen patenttihakemus}{yhdysvaltalainen pat\adddot\ hak\adddot}},
+ file = {{tiedosto}{tiedosto}},
+ library = {{kirjasto}{kirjasto}},
+ abstract = {{tiivistelm\"a}{tiivistelm\"a}},
+ annotation = {{selitykset}{selitykset}},% FIXME: unsure
+ commonera = {{j\"alkeen ajanlaskun alun}{jaa\adddot}},
+ beforecommonera = {{ennen ajanlaskun alkua}{eaa\adddot}},
+ annodomini = {{j\"alkeen Kristuksen syntym\"an}{jKr\adddot}},
+ beforechrist = {{ennen Kristuksen syntym\"a\"a}{eKr\adddot}},
+ circa = {{noin}{n\adddot}},
+ spring = {{kev\"at}{kev\"at}},% Or kev\"a\"all\"a ?
+ summer = {{kes\"a}{kes\"a}},% Or kes\"all\"a ?
+ autumn = {{syksy}{syksy}},% Or syksyll\"a ?
+ winter = {{talvi}{talvi}},% Or talvella ?
+% springN = {{}{}},% FIXME: missing
+% summerN = {{}{}},% FIXME: missing
+% autumnN = {{}{}},% FIXME: missing
+% winterN = {{}{}},% FIXME: missing
+% springS = {{}{}},% FIXME: missing
+% summerS = {{}{}},% FIXME: missing
+% autumnS = {{}{}},% FIXME: missing
+% winterS = {{}{}},% FIXME: missing
+% Q1 = {{}{}},% FIXME: missing
+% Q2 = {{}{}},% FIXME: missing
+% Q3 = {{}{}},% FIXME: missing
+% Q4 = {{}{}},% FIXME: missing
+% QD1 = {{}{}},% FIXME: missing
+% QD2 = {{}{}},% FIXME: missing
+% QD3 = {{}{}},% FIXME: missing
+% S1 = {{}{}},% FIXME: missing
+% S2 = {{}{}},% FIXME: missing
+ am = {{ap\adddot}{ip\adddot}},
+ pm = {{ip\adddot}{ip\adddot}},
+}
+
+\protected\gdef\lbx@fi@mkbibmonthbasic#1{%
+ \ifcase0#1\relax
+ #1\BibliographyWarning{Month out of range}%
+ \or\abx@bibmonth{basicjanuary}%
+ \or\abx@bibmonth{basicfebruary}%
+ \or\abx@bibmonth{basicmarch}%
+ \or\abx@bibmonth{basicapril}%
+ \or\abx@bibmonth{basicmay}%
+ \or\abx@bibmonth{basicjune}%
+ \or\abx@bibmonth{basicjuly}%
+ \or\abx@bibmonth{basicaugust}%
+ \or\abx@bibmonth{basicseptember}%
+ \or\abx@bibmonth{basicoctober}%
+ \or\abx@bibmonth{basicnovember}%
+ \or\abx@bibmonth{basicdecember}%
+ \else
+ #1\BibliographyWarning{Month out of range}%
+ \fi}%
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/lbx/french-ms.lbx b/macros/latex/contrib/biblatex-ms/latex/lbx/french-ms.lbx
new file mode 100644
index 0000000000..12921c7d1d
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/lbx/french-ms.lbx
@@ -0,0 +1,670 @@
+\ProvidesFile{french-ms.lbx}
+[\abx@lbxid]
+
+\DeclareRedundantLanguages{french}{french}
+
+\DeclareBibliographyExtras{%
+ \protected\def\bibrangedash{-}%
+ \let\finalandcomma=\empty
+ \let\finalandsemicolon=\empty
+ \def\mkbibordinal{\mkbibmascord}%
+ \protected\def\mkbibmascord{\lbx@fr@ordinal{er}}%
+ \protected\def\mkbibfemord{\lbx@fr@ordinal{re}}%
+ \protected\def\mkbibneutord{\mkbibmascord}%
+ \protected\def\mkbibdatelong#1#2#3{%
+ \iffieldundef{#3}
+ {}
+ {\stripzeros{\thefield{#3}}%
+ \ifnumequal{\thefield{#3}}{1}
+ {\textsuperscript{er}}
+ {}%
+ \iffieldundef{#2}{}{\nobreakspace}}%
+ \iffieldundef{#2}
+ {}
+ {\mkbibmonth{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}}%
+ \iffieldbibstring{#1}
+ {\bibstring{\thefield{#1}}}
+ {\dateeraprintpre{#1}\stripzeros{\thefield{#1}}}}%
+ \protected\def\mkbibdateshort#1#2#3{%
+ \iffieldundef{#3}
+ {}
+ {\mkdayzeros{\thefield{#3}}%
+ \iffieldundef{#2}{}{/}}%
+ \iffieldundef{#2}
+ {}
+ {\mkmonthzeros{\thefield{#2}}%
+ \iffieldundef{#1}{}{/}}%
+ \iffieldbibstring{#1}
+ {\bibstring{\thefield{#1}}}
+ {\dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}}%
+ \providecommand*{\FDP@thinspace}{\addnbthinspace}% FDP@* -> frenchb.ldf (babel)
+ \providecommand*{\FDP@colonspace}{\addnbspace}%
+ \def\abx@semicolon{%
+ \ifdim\lastkern>\z@\unkern\fi
+ \FDP@thinspace\abx@puncthook{;}}%
+ \def\abx@colon{%
+ \ifdim\lastkern>\z@\unkern\fi
+ \FDP@colonspace\abx@puncthook{:}}%
+ \def\abx@exclam{%
+ \ifdim\lastkern>\z@\unkern\fi
+ \FDP@thinspace\abx@puncthook{!}}%
+ \def\abx@question{%
+ \ifdim\lastkern>\z@\unkern\fi
+ \FDP@thinspace\abx@puncthook{?}}%
+ \savecommand\lbx@initnamehook
+ \savecommand\lbx@inittitlehook
+ \savecommand\mkbibnamefamily
+ \savecommand\mkbibordedition
+ \savecommand\mkbibordseries
+ \let\lbx@initnamehook=\lbx@fr@smartof
+ \let\lbx@inittitlehook=\lbx@fr@smartof
+ \protected\def\mkbibnamefamily#1{%
+ \textsc{\textnohyphenation{#1}}}%
+ \def\mkbibordedition{\mkbibfemord}%
+ \def\mkbibordseries{\mkbibfemord}%
+ \expandafter\protected\expandafter\def\csname mkbibtime24h\endcsname#1#2#3#4{%
+ \iffieldundef{#1}
+ {}
+ {\mktimezeros{\thefield{#1}}%
+ \iffieldundef{#2}{}{\bibtimesep}}%
+ \iffieldundef{#2}
+ {}
+ {\mktimezeros{\thefield{#2}}%
+ \iffieldundef{#3}{}{\bibtimesep}}%
+ \iffieldundef{#3}
+ {}
+ {\mktimezeros{\thefield{#3}}}%
+ \iffieldundef{#4}{}
+ {\bibtimezonesep
+ \mkbibtimezone{\thefield{#4}}}}%
+ \expandafter\protected\expandafter\def\csname mkbibtime12h\endcsname#1#2#3#4{%
+ \stripzeros{\mktimehh{\thefield{#1}}}\bibtimesep
+ \forcezerosmdt{\thefield{#2}}%
+ \iffieldundef{#3}{}
+ {\bibtimesep
+ \forcezerosmdt{\thefield{#3}}}%
+ \space
+ \ifnumless{\thefield{#1}}{12}
+ {\bibstring{am}}
+ {\bibstring{pm}}%
+ \iffieldundef{#4}{}
+ {\space\bibtimezonesep
+ \parentext{\mkbibtimezone{\thefield{#4}}}}}%
+ \protected\def\mkbibyeardivisiondateshort#1#2{%
+ \mkbibyeardivision{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}%
+ \dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}%
+ \protected\def\mkbibyeardivisiondatelong#1#2{%
+ \mkbibyeardivision{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}%
+ \dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}%
+}
+
+\UndeclareBibliographyExtras{%
+ \restorecommand\lbx@initnamehook
+ \restorecommand\lbx@inittitlehook
+ \restorecommand\mkbibnamefamily
+ \restorecommand\mkbibordedition
+ \restorecommand\mkbibordseries
+}
+
+\DeclareBibliographyStrings{%
+ bibliography = {{Bibliographie}{Bibliographie}},
+ references = {{R\'ef\'erences}{R\'ef\'erences}},
+ shorthands = {{Liste des abr\'eviations}{Abr\'eviations}},
+ editor = {{\'editeur}{\'ed\adddot}},
+ editors = {{\'editeurs}{\'ed\adddot}},
+ compiler = {{compilateur}{comp\adddot}},
+ compilers = {{compilateurs}{comp\adddot}},
+ redactor = {{r\'edacteur}{r\'ed\adddot}},
+ redactors = {{r\'edacteurs}{r\'ed\adddot}},
+ reviser = {{r\'eviseur}{r\'ev\adddot}},
+ revisers = {{r\'eviseurs}{r\'ev\adddot}},
+ founder = {{fondateur}{fond\adddot}},
+ founders = {{fondateurs}{fond\adddot}},
+ continuator = {{continuateur}{cont\adddot}},
+ continuators = {{continuateurs}{cont\adddot}},
+ collaborator = {{collaborateur}{coll\adddot}},
+ collaborators = {{collaborateurs}{coll\adddot}},
+ translator = {{traducteur}{trad\adddot}},
+ translators = {{traducteurs}{trad\adddot}},
+ commentator = {{commentateur}{comm\adddot}},
+ commentators = {{commentateurs}{comm\adddot}},
+ annotator = {{annotateur}{annot\adddot}},
+ annotators = {{annotateurs}{annot\adddot}},
+ commentary = {{commentaires}{comment\adddot}},
+ annotations = {{annotations}{annot\adddot}},
+ introduction = {{introduction}{introd\adddot}},
+ foreword = {{pr\'eface}{pr\'ef\adddot}},
+ afterword = {{postface}{postf\adddot}},
+ editortr = {{\'editeur et traducteur}{\'ed\adddotspace et trad\adddot}},
+ editorstr = {{\'editeurs et traducteurs}{\'ed\adddotspace et trad\adddot}},
+ editorco = {{\'editeur et commentateur}%
+ {\'ed\adddotspace et comm\adddot}},
+ editorsco = {{\'editeurs et commentateurs}%
+ {\'ed\adddotspace et comm\adddot}},
+ editoran = {{\'editeur et annotateur}%
+ {\'ed\adddotspace et annot\adddot}},
+ editorsan = {{\'editeurs et annotateurs}%
+ {\'ed\adddotspace et annot\adddot}},
+ editorin = {{\'editeur et introduction}%
+ {\'ed\adddotspace et introd\adddot}},
+ editorsin = {{\'editeurs et introduction}%
+ {\'ed\adddotspace et introd\adddot}},
+ editorfo = {{\'editeur et pr\'eface}%
+ {\'ed\adddotspace et pr\'ef\adddot}},
+ editorsfo = {{\'editeurs et pr\'eface}%
+ {\'ed\adddotspace et pr\'ef\adddot}},
+ editoraf = {{\'editeur et postface}%
+ {\'ed\adddotspace et postf\adddot}},
+ editorsaf = {{\'editeurs et postface}%
+ {\'ed\adddotspace et postf\adddot}},
+ editortrco = {{\'editeur, traducteur et commentateur}%
+ {\'ed.,\addabbrvspace trad\adddotspace et comm\adddot}},
+ editorstrco = {{\'editeurs, traducteurs et commentateurs}%
+ {\'ed.,\addabbrvspace trad\adddotspace et comm\adddot}},
+ editortran = {{\'editeur, traducteur et annotateur}%
+ {\'ed.,\addabbrvspace trad\adddotspace et annot\adddot}},
+ editorstran = {{\'editeurs, traducteurs et annotateurs}%
+ {\'ed.,\addabbrvspace trad\adddotspace et annot\adddot}},
+ editortrin = {{\'editeur, traducteur et introduction}%
+ {\'ed.,\addabbrvspace trad\adddotspace et introd\adddot}},
+ editorstrin = {{\'editeurs, traducteurs et introduction}%
+ {\'ed.,\addabbrvspace trad\adddotspace et introd\adddot}},
+ editortrfo = {{\'editeur, traducteur et pr\'eface}%
+ {\'ed.,\addabbrvspace trad\adddotspace et pr\'ef\adddot}},
+ editorstrfo = {{\'editeurs, traducteurs et pr\'eface}%
+ {\'ed.,\addabbrvspace trad\adddotspace et pr\'ef\adddot}},
+ editortraf = {{\'editeur, traducteur et postface}%
+ {\'ed.,\addabbrvspace trad\adddotspace et postf\adddot}},
+ editorstraf = {{\'editeurs, traducteurs et postface}%
+ {\'ed.,\addabbrvspace trad\adddot et postf\adddot}},
+ editorcoin = {{\'editeur, commentateur et introduction}%
+ {\'ed.,\addabbrvspace comm\adddotspace et introd\adddot}},
+ editorscoin = {{\'editeurs, commentateurs et introduction}%
+ {\'ed.,\addabbrvspace comm\adddotspace et introd\adddot}},
+ editorcofo = {{\'editeur, commentateur et pr\'eface}%
+ {\'ed.,\addabbrvspace comm\adddotspace et pr\'ef\adddot}},
+ editorscofo = {{\'editeurs, commentateurs et pr\'eface}%
+ {\'ed.,\addabbrvspace comm\adddotspace et pr\'ef\adddot}},
+ editorcoaf = {{\'editeur, commentateur et postface}%
+ {\'ed.,\addabbrvspace comm\adddotspace et postf\adddot}},
+ editorscoaf = {{\'editeurs, commentateurs et postface}%
+ {\'ed.,\addabbrvspace comm\adddotspace et postf\adddot}},
+ editoranin = {{\'editeur, annotateur et introduction}%
+ {\'ed.,\addabbrvspace annot\adddotspace et introd\adddot}},
+ editorsanin = {{\'editeurs, annotateurs et introduction}%
+ {\'ed.,\addabbrvspace annot\adddotspace et introd\adddot}},
+ editoranfo = {{\'editeur, annotateur et pr\'eface}%
+ {\'ed.,\addabbrvspace annot\adddotspace et pr\'ef\adddot}},
+ editorsanfo = {{\'editeurs, annotateurs et pr\'eface}%
+ {\'ed.,\addabbrvspace annot\adddotspace et pr\'ef\adddot}},
+ editoranaf = {{\'editeur, annotateur et postface}%
+ {\'ed.,\addabbrvspace annot\adddotspace et postf\adddot}},
+ editorsanaf = {{\'editeurs, annotateurs et postface}%
+ {\'ed.,\addabbrvspace annot\adddotspace et postf\adddot}},
+ editortrcoin = {{\'editeur, traducteur, commentateur et introduction}%
+ {\'ed.,\addabbrvspace trad., comm\adddotspace et introd\adddot}},
+ editorstrcoin = {{\'editeurs, traducteurs, commentateurs et introduction}%
+ {\'ed.,\addabbrvspace trad., comm\adddotspace et introd\adddot}},
+ editortrcofo = {{\'editeur, traducteur, commentateur et pr\'eface}%
+ {\'ed.,\addabbrvspace trad., comm\adddotspace et pr\'ef\adddot}},
+ editorstrcofo = {{\'editeurs, traducteurs, commentateurs et pr\'eface}%
+ {\'ed.,\addabbrvspace trad., comm\adddotspace et pr\'ef\adddot}},
+ editortrcoaf = {{\'editeur, traducteur, commentateur et postface}%
+ {\'ed.,\addabbrvspace trad., comm\adddotspace et postf\adddot}},
+ editorstrcoaf = {{\'editeurs, traducteurs, commentateurs et postface}%
+ {\'ed.,\addabbrvspace trad., comm\adddotspace et postf\adddot}},
+ editortranin = {{\'editeur, traducteur, annotateur et introduction}%
+ {\'ed.,\addabbrvspace trad., annot\adddotspace et introd\adddot}},
+ editorstranin = {{\'editeurs, traducteurs, annotateurs et introduction}%
+ {\'ed.,\addabbrvspace trad., annot\adddotspace et introd\adddot}},
+ editortranfo = {{\'editeur, traducteur, annotateur et pr\'eface}%
+ {\'ed.,\addabbrvspace trad., annot\adddotspace et pr\'ef\adddot}},
+ editorstranfo = {{\'editeurs, traducteurs, annotateurs et pr\'eface}%
+ {\'ed.,\addabbrvspace trad., annot\adddotspace et pr\'ef\adddot}},
+ editortranaf = {{\'editeur, traducteur, annotateur et postface}%
+ {\'ed.,\addabbrvspace trad., annot\adddotspace et postf\adddot}},
+ editorstranaf = {{\'editeurs, traducteurs, annotateurs et postface}%
+ {\'ed.,\addabbrvspace trad., annot\adddotspace et postf\adddot}},
+ translatorco = {{traducteur et commentateur}%
+ {trad\adddotspace et comm\adddot}},
+ translatorsco = {{traducteurs et commentateurs}%
+ {trad\adddotspace et comm\adddot}},
+ translatoran = {{traducteur et annotateur}%
+ {trad\adddotspace et annot\adddot}},
+ translatorsan = {{traducteurs et annotateurs}%
+ {trad\adddotspace et annot\adddot}},
+ translatorin = {{traduction et introduction}%
+ {trad\adddotspace et introd\adddot}},
+ translatorsin = {{traduction et introduction}%
+ {trad\adddotspace et introd\adddot}},
+ translatorfo = {{traduction et pr\'eface}%
+ {trad\adddotspace et pr\'ef\adddot}},
+ translatorsfo = {{traduction et pr\'eface}%
+ {trad\adddotspace et pr\'ef\adddot}},
+ translatoraf = {{traduction et postface}%
+ {trad\adddotspace et postf\adddot}},
+ translatorsaf = {{traduction et postface}%
+ {trad\adddotspace et postf\adddot}},
+ translatorcoin = {{traduction, commentaire et introduction}%
+ {trad., comm\adddotspace et introd\adddot}},
+ translatorscoin = {{traduction, commentaire et introduction}%
+ {trad., comm\adddotspace et introd\adddot}},
+ translatorcofo = {{traduction, commentaire et pr\'eface}%
+ {trad., comm\adddotspace et pr\'ef\adddot}},
+ translatorscofo = {{traduction, commentaire et pr\'eface}%
+ {trad., comm\adddotspace et pr\'ef\adddot}},
+ translatorcoaf = {{traduction, commentaire et postface}%
+ {trad., comm\adddotspace et postf\adddot}},
+ translatorscoaf = {{traduction, commentaire et postface}%
+ {trad., comm\adddotspace et postf\adddot}},
+ translatoranin = {{traduction, annotations et introduction}%
+ {trad., annot\adddotspace et introd\adddot}},
+ translatorsanin = {{traduction, annotations et introduction}%
+ {trad., annot\adddotspace et introd\adddot}},
+ translatoranfo = {{traduction, annotations et pr\'eface}%
+ {trad., annot\adddotspace et pr\'ef\adddot}},
+ translatorsanfo = {{traduction, annotations et pr\'eface}%
+ {trad., annot\adddotspace et pr\'ef\adddot}},
+ translatoranaf = {{traduction, annotations et postface}%
+ {trad., annot\adddotspace et postf\adddot}},
+ translatorsanaf = {{traduction, annotations et postface}%
+ {trad., annot\adddotspace et postf\adddot}},
+ organizer = {{organisateur}{org\adddot}},%
+ organizers = {{organisateurs}{org\adddot}},%
+ byorganizer = {{organis\'e par}{org\adddotspace par}},%
+ byauthor = {{par}{par}},
+ byeditor = {{sous la direction\smartof}{sous la dir\adddot\smartof}},
+ bycompiler = {{compil\'e par}{comp\adddotspace par}},
+ byredactor = {{r\'edig\'e par}{r\'ed\adddotspace par}},
+ byreviser = {{r\'evis\'e par}{r\'ev\adddotspace par}},
+ byreviewer = {{examin\'e par}{ex\adddotspace par}},
+ byfounder = {{d\'ecouvert par}{d\'ecouv\adddotspace par}},
+ bycontinuator = {{continu\'e par}{cont\adddotspace par}},
+ bycollaborator = {{avec la collaboration\smartof}{avec la
+ coll\adddot\smartof}},
+ bytranslator = {{traduit \lbx@lfromlang\ par}{trad\adddotspace \lbx@sfromlang\ par}},
+ bycommentator = {{comment\'e par}{comm\adddotspace par}},
+ byannotator = {{annot\'e par}{annot\adddotspace par}},
+ withcommentator = {{avec des commentaires\smartof}{avec des comment\adddot\smartof}},
+ withannotator = {{avec des annotations\smartof}{avec des annot\adddot\smartof}},
+ withintroduction = {{avec une introduction\smartof}{avec une introd\adddot\smartof}},
+ withforeword = {{avec une pr\'eface\smartof}{avec une pr\'ef\adddot\smartof}},
+ withafterword = {{avec une postface\smartof}{avec une postf\adddot\smartof}},
+ byeditortr = {{\'edition \'etablie et traduite \lbx@lfromlang\ par}%
+ {\'ed\adddotspace \'etablie et trad\adddotspace \lbx@sfromlang\ par}},
+ byeditorco = {{\'edition \'etablie et comment\'ee par}%
+ {\'ed\adddotspace \'etablie et comm\adddotspace par}},
+ byeditoran = {{\'edition \'etablie et annot\'ee par}%
+ {\'ed\adddotspace \'etablie et annot\adddotspace par}},
+ byeditorin = {{\'edition \'etablie et introduite par}%
+ {\'ed\adddotspace \'etablie et introd\adddotspace par}},
+ byeditorfo = {{\'edition \'etablie et pr\'efac\'ee par}%
+ {\'ed\adddotspace \'etablie et pr\'ef\adddotspace par}},
+ byeditoraf = {{\'edition \'etablie et postfac\'ee par}%
+ {\'ed\adddotspace \'etablie et postf\adddotspace par}},
+ byeditortrco = {{\'edition \'etablie, traduite \lbx@lfromlang\ et comment\'ee par}%
+ {\'ed\adddotspace \'etablie, trad\adddotspace \lbx@sfromlang\ et comm\adddotspace par}},
+ byeditortran = {{\'edition \'etablie, traduite \lbx@lfromlang\ et annot\'ee par}%
+ {\'ed\adddotspace \'etablie, trad\adddotspace \lbx@sfromlang\ et annot\adddotspace par}},
+ byeditortrin = {{\'edition \'etablie, traduite \lbx@lfromlang\ et introduite par}%
+ {\'ed\adddotspace \'etablie, trad\adddotspace \lbx@sfromlang\ et introd\adddotspace par}},
+ byeditortrfo = {{\'edition \'etablie, traduite \lbx@lfromlang\ et pr\'efac\'ee par}%
+ {\'ed\adddotspace \'etablie, trad\adddotspace \lbx@sfromlang\ et pr\'ef\adddotspace par}},
+ byeditortraf = {{\'edition \'etablie, traduite \lbx@lfromlang\ et postfac\'ee par}%
+ {\'ed\adddotspace \'etablie, trad\adddotspace \lbx@sfromlang\ et postf\adddotspace par}},
+ byeditorcoin = {{\'edition \'etablie, comment\'ee et introduite par}%
+ {\'ed\adddotspace \'etablie, comm\adddotspace et introd\adddotspace par}},
+ byeditorcofo = {{\'edition \'etablie, comment\'ee et pr\'efac\'ee par}%
+ {\'ed\adddotspace \'etablie, comm\adddotspace et pr\'ef\adddotspace par}},
+ byeditorcoaf = {{\'edition \'etablie, comment\'ee et postfac\'ee par}%
+ {\'ed\adddotspace \'etablie, comm\adddotspace et postf\adddotspace par}},
+ byeditoranin = {{\'edition \'etablie, annot\'ee et introduite par}%
+ {\'ed\adddotspace \'etablie, annot\adddotspace et introd\adddotspace par}},
+ byeditoranfo = {{\'edition \'etablie, annot\'ee et pr\'efac\'ee par}%
+ {\'ed\adddotspace \'etablie, annot\adddotspace et pr\'ef\adddotspace par}},
+ byeditoranaf = {{\'edition \'etablie, annot\'ee et postfac\'ee par}%
+ {\'ed\adddotspace \'etablie, annot\adddotspace et postf\adddotspace par}},
+ byeditortrcoin = {{\'edition \'etablie, traduite \lbx@lfromlang, comment\'ee et introduite par}%
+ {\'ed\adddotspace \'etablie, trad\adddotspace \lbx@sfromlang, comm\adddotspace et introd\adddotspace par}},
+ byeditortrcofo = {{\'edition \'etablie, traduite \lbx@lfromlang, comment\'ee et pr\'efac\'ee par}%
+ {\'ed\adddotspace \'etablie, trad\adddotspace \lbx@sfromlang, comm\adddotspace et pr\'ef\adddotspace par}},
+ byeditortrcoaf = {{\'edition \'etablie, traduite \lbx@lfromlang, comment\'ee et postfac\'ee par}%
+ {\'ed\adddotspace \'etablie, trad\adddotspace \lbx@sfromlang, comm\adddotspace et postf\adddotspace par}},
+ byeditortranin = {{\'edition \'etablie, traduite \lbx@lfromlang, annot\'ee et introduite par}%
+ {\'ed\adddotspace \'etablie, trad\adddotspace \lbx@sfromlang, annot\adddotspace et introd\adddotspace par}},
+ byeditortranfo = {{\'edition \'etablie, traduite \lbx@lfromlang, annot\'ee et pr\'efac\'ee par}%
+ {\'ed\adddotspace \'etablie, trad\adddotspace \lbx@sfromlang, annot\adddotspace et pr\'ef\adddotspace par}},
+ byeditortranaf = {{\'edition \'etablie, traduite \lbx@lfromlang, annot\'ee et postfac\'ee par}%
+ {\'ed\adddotspace \'etablie, trad\adddotspace \lbx@sfromlang, annot\adddotspace et postf\adddotspace par}},
+ bytranslatorco = {{traduit \lbx@lfromlang\ et comment\'e par}%
+ {trad\adddotspace \lbx@sfromlang\ et comm\adddotspace par}},
+ bytranslatoran = {{traduit \lbx@lfromlang\ et annot\'e par}%
+ {trad\adddotspace \lbx@sfromlang\ et annot\adddotspace par}},
+ bytranslatorin = {{traduit \lbx@lfromlang\ et introduit par}%
+ {trad\adddotspace \lbx@sfromlang\ et introd\adddotspace par}},
+ bytranslatorfo = {{traduit \lbx@lfromlang\ et pr\'efac\'e par}%
+ {trad\adddotspace \lbx@sfromlang\ et pr\'ef\adddotspace par}},
+ bytranslatoraf = {{traduit \lbx@lfromlang\ et postfac\'e par}%
+ {trad\adddotspace \lbx@sfromlang\ et postf\adddotspace par}},
+ bytranslatorcoin = {{traduit \lbx@lfromlang, comment\'e et introduit par}%
+ {trad\adddotspace \lbx@sfromlang, comm\adddotspace et introd\adddotspace par}},
+ bytranslatorcofo = {{traduit \lbx@lfromlang, comment\'e et pr\'efac\'e par}%
+ {trad\adddotspace \lbx@sfromlang, comm\adddotspace et pr\'ef\adddotspace par}},
+ bytranslatorcoaf = {{traduit \lbx@lfromlang, comment\'e et postfac\'e par}%
+ {trad\adddotspace \lbx@sfromlang, comm\adddotspace et postf\adddotspace par}},
+ bytranslatoranin = {{traduit \lbx@lfromlang, annot\'e et introduit par}%
+ {trad\adddotspace \lbx@sfromlang, annot\adddotspace et introd\adddotspace par}},
+ bytranslatoranfo = {{traduit \lbx@lfromlang, annot\'e et pr\'efac\'e par}%
+ {trad\adddotspace \lbx@sfromlang, annot\adddotspace et pr\'ef\adddotspace par}},
+ bytranslatoranaf = {{traduit \lbx@lfromlang, annot\'e et postfac\'e par}%
+ {trad\adddotspace \lbx@sfromlang, annot\adddotspace et postf\adddotspace par}},
+ and = {{et}{et}},
+ andothers = {{et\addabbrvspace al\adddot}{et\addabbrvspace al\adddot}},
+ andmore = {{et\addabbrvspace al\adddot}{et\addabbrvspace al\adddot}},
+ volume = {{tome}{t\adddot}},
+ volumes = {{tomes}{t\adddot}},
+ involumes = {{en}{en}},
+ jourvol = {{tome}{t\adddot}},
+ jourser = {{s\'erie}{s\'er\adddot}},
+ book = {{livre}{livre}},
+ part = {{partie}{partie}},
+ issue = {{\'edition}{\'ed\adddot}},
+ newseries = {{nouvelle s\'erie}{nouv\adddotspace s\'er\adddot}},
+ oldseries = {{ancienne s\'erie}{anc\adddotspace s\'er\adddot}},
+ edition = {{\'edition}{\'ed\adddot}},
+ reprint = {{r\'eimpression}{r\'eimpr\adddot}},
+ reprintof = {{r\'eimpression de}{r\'eimpr\adddotspace de}},
+ reprintas = {{r\'eimpression sous le titre}{r\'eimpr\adddotspace sous le titre}},
+ reprintfrom = {{r\'eimpression \`a partir\smartof}{r\'eimpr\adddotspace \`a part\adddot\smartof}},
+ translationof = {{traduction de}{trad\adddotspace de}},
+ translationas = {{traduit sous le titre}{trad\adddotspace sous le titre}},
+ translationfrom = {{traduit de}{trad\adddotspace de}},
+ reviewof = {{critique de}{crit.\adddotspace de}},
+ origpubas = {{publi\'e \`a l'origine sous le titre}{pub\adddotspace \`a l'orig\adddotspace sous le titre}},
+ origpubin = {{publi\'e \`a l'origine en}{pub\adddotspace \`a l'orig\adddotspace en}},
+ astitle = {{sous le titre}{sous le titre}},
+ bypublisher = {{par}{par}},
+ nodate = {{sans\space date}{{}s\adddotspace d\adddot}},
+ page = {{page}{p\adddot}},
+ pages = {{pages}{p\adddot}},
+ column = {{colonne}{col\adddot}},
+ columns = {{colonnes}{col\adddot}},
+ line = {{ligne}{l\adddot}},
+ lines = {{lignes}{l\adddot}},
+ verse = {{vers}{v\adddot}},
+ verses = {{vers}{v\adddot}},
+ section = {{section}{sect\adddot}},
+ sections = {{sections}{sect\adddot}},
+ paragraph = {{paragraphe}{\S}},
+ paragraphs = {{paragraphes}{\S}},
+ pagetotal = {{page}{p\adddot}},
+ pagetotals = {{pages}{p\adddot}},
+ columntotal = {{colonne}{col\adddot}},
+ columntotals = {{colonnes}{col\adddot}},
+ linetotal = {{ligne}{l\adddot}},
+ linetotals = {{lignes}{l\adddot}},
+ versetotal = {{vers}{v\adddot}},
+ versetotals = {{vers}{v\adddot}},
+ sectiontotal = {{section}{sect\adddot}},
+ sectiontotals = {{sections}{sect\adddot}},
+ paragraphtotal = {{paragraphe}{\S}},
+ paragraphtotals = {{paragraphes}{\S}},
+ in = {{in}{in}},
+ inseries = {{in}{in}},
+ ofseries = {{de}{de}},
+ number = {{num\'ero}{n\textsuperscript{o}}},
+ chapter = {{chapitre}{chap\adddot}},
+ bathesis = {{m\'emoire de bachelor}{m\'em\adddotspace de bach\adddot}},
+ mathesis = {{m\'emoire de master}{m\'em\adddotspace de mast\adddot}},
+ phdthesis = {{th\`ese de doctorat}{th\`ese de doct\adddot}},
+ candthesis = {{th\`ese de candidature}{th\`ese de cand\adddot}},
+ resreport = {{rapport scientifique}{rapp\adddotspace scient\adddot}},
+ techreport = {{rapport technique}{rapp\adddotspace tech\adddot}},
+ software = {{logiciel}{logiciel}},
+ datacd = {{c\'ed\'erom}{c\'ed\'erom}},
+ audiocd = {{disque compact audio}{CD}},
+ version = {{version}{version}},
+ url = {{adresse}{adresse}},
+ urlfrom = {{disponible \`a l'adresse}{disp\adddotspace \`a l'adr\adddot}},
+ urlseen = {{visit\'e le}{visit\'e le}},
+ inpreparation = {{en pr\'eparation}{en pr\'ep\adddot}},
+ submitted = {{soumis}{soumis}},
+ forthcoming = {{\`a para\^{\i}tre}{\`a para\adddot}},
+ inpress = {{sous presse}{sous presse}},
+ prepublished = {{pr\'epubli\'e}{pr\'epubl\adddot}},
+ citedas = {{d\'esign\'e ci-apr\`es par}{ci-apr\`es}},
+ thiscite = {{sp\'ecialement}{sp\'ec\adddot}},
+ seenote = {{voir note}{cf\adddotspace note}},
+ quotedin = {{cit\'e dans}{cit\'e dans}},
+ idem = {{idem}{idem}},
+ idemsm = {{idem}{idem}},
+ idemsf = {{eadem}{eadem}},
+ idemsn = {{idem}{idem}},
+ idempm = {{eidem}{eidem}},
+ idempf = {{eaedem}{eaedem}},
+ idempn = {{eadem}{eadem}},
+ idempp = {{eidem}{eidem}},
+ ibidem = {{ibidem}{ibid\adddot}},
+ opcit = {{op\adddotspace cit\adddot}{op\adddotspace cit\adddot}},
+ loccit = {{loc\adddotspace cit\adddot}{loc\adddotspace cit\adddot}},
+ confer = {{cf\adddot}{cf\adddot}},
+ sequens = {{sq\adddot}{sq\adddot}},
+ sequentes = {{sqq\adddot}{sqq\adddot}},
+ passim = {{passim}{pass\adddot}},
+ see = {{cf\adddot}{cf\adddot}},
+ seealso = {{cf\adddotspace aussi}{cf\adddotspace aussi}},
+ backrefpage = {{cf\adddotspace page}{cf\adddotspace p\adddot}},
+ backrefpages = {{cf\adddotspace pages}{cf\adddotspace p\adddot}},
+ january = {{janvier}{jan\adddot}},
+ february = {{f\'evrier}{f\'ev\adddot}},
+ march = {{mars}{mars}},
+ april = {{avril}{avr\adddot}},
+ may = {{mai}{mai}},
+ june = {{juin}{juin}},
+ july = {{juillet}{juill\adddot}},
+ august = {{ao\^ut}{ao\^ut}},
+ september = {{septembre}{sept\adddot}},
+ october = {{octobre}{oct\adddot}},
+ november = {{novembre}{nov\adddot}},
+ december = {{d\'ecembre}{d\'ec\adddot}},
+ langamerican = {{am\'ericain}{am\'ericain}},
+ langbrazilian = {{br\'esilien}{br\'esilien}},
+ langbulgarian = {{bulgare}{bulgare}},
+ langcatalan = {{catalan}{catalan}},
+ langcroatian = {{croate}{croate}},
+ langczech = {{tch\`eque}{tch\`eque}},
+ langdanish = {{danois}{danois}},
+ langdutch = {{n\'eerlandais}{n\'eerlandais}},
+ langenglish = {{anglais}{anglais}},
+ langestonian = {{estonien}{estonien}},
+ langfinnish = {{finnois}{finnois}},
+ langfrench = {{fran\c{c}ais}{fran\c{c}ais}},
+ langgalician = {{galicien}{galicien}},
+ langgerman = {{allemand}{allemand}},
+ langgreek = {{grec}{grec}},
+ langhungarian = {{hongrois}{hongrois}},
+ langitalian = {{italien}{italien}},
+ langjapanese = {{japonais}{japonais}},
+ langlatin = {{latin}{latin}},
+ langlatvian = {{letton}{letton}},
+ langnorwegian = {{norv\'egien}{norv\'egien}},
+ langpolish = {{polonais}{polonais}},
+ langportuguese = {{portugais}{portugais}},
+ langrussian = {{russe}{russe}},
+ langserbian = {{serbe}{serbe}},
+ langslovak = {{slovaque}{slovaque}},
+ langslovene = {{slov\`ene}{slov\`ene}},
+ langspanish = {{espagnol}{espagnol}},
+ langswedish = {{su\'edois}{su\'edois}},
+ langukrainian = {{ukrainien}{ukrainien}},
+ fromamerican = {{de l'am\'ericain}{de l'am\'ericain}},
+ frombrazilian = {{du br\'esilien}{du br\'esilien}},
+ frombulgarian = {{du bulgare}{du bulgare}},
+ fromcatalan = {{du catalan}{du catalan}},
+ fromcroatian = {{du croate}{du croate}},
+ fromczech = {{du tch\`eque}{du tch\`eque}},
+ fromdanish = {{du danois}{du danois}},
+ fromdutch = {{du n\'eerlandais}{du n\'eerlandais}},
+ fromenglish = {{de l'anglais}{de l'anglais}},
+ fromestonian = {{de l'estonien}{de l'estonien}},
+ fromfinnish = {{du finnois}{du finnois}},
+ fromfrench = {{du fran\c{c}ais}{du fran\c{c}ais}},
+ fromgalician = {{du galicien}{du galicien}},
+ fromgerman = {{de l'allemand}{de l'allemand}},
+ fromgreek = {{du grec}{du grec}},
+ fromhungarian = {{du hongrois}{du hongrois}},
+ fromitalian = {{de l'italien}{de l'italien}},
+ fromjapanese = {{du japonais}{du japonais}},
+ fromlatin = {{du latin}{du latin}},
+ fromlatvian = {{du letton}{du letton}},
+ fromnorwegian = {{du norv\'egien}{du norv\'egien}},
+ frompolish = {{du polonais}{du polonais}},
+ fromportuguese = {{du portugais}{du portugais}},
+ fromrussian = {{du russe}{du russe}},
+ fromserbian = {{du serbe}{du serbe}},
+ fromslovak = {{du slovaque}{du slovaque}},
+ fromslovene = {{du slov\`ene}{du slov\`ene}},
+ fromspanish = {{de l'espagnol}{de l'espagnol}},
+ fromswedish = {{du su\'edois}{du su\'edois}},
+ fromukrainian = {{de l'ukrainien}{de l'ukrainien}},
+ countryde = {{Allemagne}{DE}},
+ countryeu = {{Union europ\'eenne}{EU}},
+ countryep = {{Union europ\'eenne}{EP}},
+ countryfr = {{France}{FR}},
+ countryuk = {{Royaume-Uni}{GB}},
+ countryus = {{\'Etats-Unis}{US}},
+ patent = {{brevet}{brev\adddot}},
+ patentde = {{brevet allemand}{brev\adddotspace allem\adddot}},
+ patenteu = {{brevet europ\'een}{brev\adddotspace europ\adddot}},
+ patentfr = {{brevet fran\c{c}ais}{brev\adddotspace fran\c{c}\adddot}},
+ patentuk = {{brevet britannique}{brev\adddotspace brit\adddot}},
+ patentus = {{brevet am\'ericain}{brev\adddotspace am\'er\adddot}},
+ patreq = {{demande de brevet}{demande de brev\adddot}},
+ patreqde = {{demande de brevet allemand}{demande de brev\adddotspace allem\adddot}},
+ patreqeu = {{demande de brevet europ\'een}{demande de brev\adddotspace europ\adddot}},
+ patreqfr = {{demande de brevet fran\c{c}ais}{demande de brev\adddotspace fran\c{c}\adddot}},
+ patrequk = {{demande de brevet britannique}{demande de brev\adddotspace brit\adddot}},
+ patrequs = {{demande de brevet am\'ericain}{demande de brev\adddotspace am\'er\adddot}},
+ file = {{fichier}{fichier}},
+ library = {{biblioth\`eque}{biblioth\adddot}},
+ abstract = {{r\'esum\'e}{r\'es\adddot}},
+ annotation = {{annotations}{annotations}},
+ commonera = {{de l'\`ere commune}{EC}},
+ beforecommonera = {{avant l'\`ere commune}{AEC}},
+ annodomini = {{apr\`es J\'esus-Christ}{apr\adddotspace J\adddot-C\adddot}},
+ beforechrist = {{avant J\'esus-Christ}{av\adddotspace J\adddot-C\adddot}},
+ circa = {{vers}{vers}},
+ spring = {{printemps}{printemps}},
+ summer = {{\'et\'e}{\'et\'e}},
+ autumn = {{automne}{automne}},
+ winter = {{hiver}{hiver}},
+% springN = {{}{}},% FIXME: missing
+% summerN = {{}{}},% FIXME: missing
+% autumnN = {{}{}},% FIXME: missing
+% winterN = {{}{}},% FIXME: missing
+% springS = {{}{}},% FIXME: missing
+% summerS = {{}{}},% FIXME: missing
+% autumnS = {{}{}},% FIXME: missing
+% winterS = {{}{}},% FIXME: missing
+% Q1 = {{}{}},% FIXME: missing
+% Q2 = {{}{}},% FIXME: missing
+% Q3 = {{}{}},% FIXME: missing
+% Q4 = {{}{}},% FIXME: missing
+% QD1 = {{}{}},% FIXME: missing
+% QD2 = {{}{}},% FIXME: missing
+% QD3 = {{}{}},% FIXME: missing
+% S1 = {{}{}},% FIXME: missing
+% S2 = {{}{}},% FIXME: missing
+ am = {{AM}{AM}},
+ pm = {{PM}{PM}},
+}
+
+\gdef\lbx@fr@ordinal#1#2{%
+ \begingroup
+ \@tempcnta0#2\relax\number\@tempcnta
+ \@whilenum\@tempcnta>100\do{\advance\@tempcnta-100}%
+ \ifnum\@tempcnta>20
+ \@whilenum\@tempcnta>9\do{\advance\@tempcnta-10}%
+ \fi
+ \ifnum\@tempcnta=\@ne
+ \textsuperscript{#1}%
+ \else
+ \textsuperscript{e}%
+ \fi
+ \endgroup}
+
+\begingroup
+\catcode`\&=3
+
+\gdef\lbx@fr@smartof{%
+ \iftoggle{smartof}{\lbx@fr@smartof@i}{\@gobble}}
+
+\protected\long\gdef\lbx@fr@smartof@i#1{%
+ \global\togglefalse{smartof}%
+ \begingroup
+ \def\forceD##1{a\relax}%
+ \def\forceDE##1{x\relax}%
+ \def\do##1{\let##1\@firstofone}%
+ \abx@dosingleaccents
+ \abx@dodoubleaccents
+ \def\i{i}\def\j{j}%
+ \def\AE{a}\def\ae{a}%
+ \def\OE{o}\def\oe{o}%
+ \def\O{o}\def\o{o}%
+ \let\IeC\@firstofone
+ \let\@tabacckludge\@gobble
+ \ifnum\catcode`\"=\active
+ \uccode`\~=`\"
+ \uppercase{\let~\@empty}%
+ \fi
+ \ifnum\catcode`\~=\active
+ \let~\@empty
+ \fi
+ \let\protect\noexpand
+ \edef\lbx@tempa{#1}%
+ \expandafter\futurelet
+ \expandafter\lbx@tempa
+ \expandafter\lbx@fr@smartof@ii
+ \lbx@tempa&}
+
+\gdef\lbx@fr@smartof@ii{%
+ \ifcat\bgroup\noexpand\lbx@tempa
+ \def\lbx@tempa##1{\futurelet\lbx@tempa\lbx@fr@smartof@ii##1}%
+ \else\ifcat\noexpand~\noexpand\lbx@tempa
+ \def\lbx@tempa##1{\futurelet\lbx@tempa\lbx@fr@smartof@ii}%
+ \else
+ \ifnum 0%
+ \if a\noexpand\lbx@tempa 1\fi
+ \if e\noexpand\lbx@tempa 1\fi
+ \if i\noexpand\lbx@tempa 1\fi
+ \if o\noexpand\lbx@tempa 1\fi
+ \if u\noexpand\lbx@tempa 1\fi
+ \if y\noexpand\lbx@tempa 1\fi
+ \if A\noexpand\lbx@tempa 1\fi
+ \if E\noexpand\lbx@tempa 1\fi
+ \if I\noexpand\lbx@tempa 1\fi
+ \if O\noexpand\lbx@tempa 1\fi
+ \if U\noexpand\lbx@tempa 1\fi
+ \if Y\noexpand\lbx@tempa 1\fi
+ >0 %
+ \let\lbx@tempa\lbx@fr@smartof@d
+ \else
+ \ifnum 0%
+ \if h\noexpand\lbx@tempa 1\fi
+ \if H\noexpand\lbx@tempa 1\fi
+ >0 %
+ \def\lbx@tempa##1{\futurelet\lbx@tempa\lbx@fr@smartof@ii}%
+ \else
+ \let\lbx@tempa\lbx@fr@smartof@de
+ \fi\fi\fi\fi
+ \lbx@tempa}
+
+\gdef\lbx@fr@smartof@d#1&{\endgroup d'}
+\gdef\lbx@fr@smartof@de#1&{\endgroup de\space}
+
+\endgroup
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/lbx/galician-ms.lbx b/macros/latex/contrib/biblatex-ms/latex/lbx/galician-ms.lbx
new file mode 100644
index 0000000000..e007726b60
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/lbx/galician-ms.lbx
@@ -0,0 +1,555 @@
+\ProvidesFile{galician-ms.lbx}
+[\abx@lbxid]
+
+\DeclareRedundantLanguages{galician}{galician}
+
+\DeclareBibliographyExtras{%
+ \protected\def\bibrangedash{%
+ \textendash\penalty\hyphenpenalty}% breakable dash
+ \let\finalandcomma=\empty
+ \let\finalandsemicolon=\empty
+ \def\mkbibordinal{\mkbibmascord}%
+ \protected\def\mkbibmascord#1{%
+ \stripzeros{#1}\textordmasculine}% \textordmasculine -> textcomp.sty
+ \protected\def\mkbibfemord#1{%
+ \stripzeros{#1}\textordfeminine}% \textordfeminine -> textcomp.sty
+ \protected\def\mkbibneutord{\mkbibmascord}%
+ \protected\def\mkbibdatelong#1#2#3{%
+ \iffieldundef{#3}
+ {}
+ {\stripzeros{\thefield{#3}}%
+ \iffieldundef{#2}{}{\nobreakspace de\space}}%
+ \iffieldundef{#2}
+ {}
+ {\mkbibmonth{\thefield{#2}}%
+ \iffieldundef{#1}{}{\nobreakspace de\space}}%
+ \iffieldbibstring{#1}
+ {\bibstring{\thefield{#1}}}
+ {\dateeraprintpre{#1}\stripzeros{\thefield{#1}}}}%
+ \protected\def\mkbibdateshort#1#2#3{%
+ \iffieldundef{#3}
+ {}
+ {\mkdayzeros{\thefield{#3}}%
+ \iffieldundef{#2}{}{/}}%
+ \iffieldundef{#2}
+ {}
+ {\mkmonthzeros{\thefield{#2}}%
+ \iffieldundef{#1}{}{/}}%
+ \iffieldbibstring{#1}
+ {\bibstring{\thefield{#1}}}
+ {\dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}}%
+ \savecommand\mkbibordedition
+ \savecommand\mkbibordseries
+ \def\mkbibordedition{\mkbibfemord}%
+ \def\mkbibordseries{\mkbibfemord}%
+ \expandafter\protected\expandafter\def\csname mkbibtime24h\endcsname#1#2#3#4{%
+ \iffieldundef{#1}
+ {}
+ {\mktimezeros{\thefield{#1}}%
+ \iffieldundef{#2}{}{\bibtimesep}}%
+ \iffieldundef{#2}
+ {}
+ {\mktimezeros{\thefield{#2}}%
+ \iffieldundef{#3}{}{\bibtimesep}}%
+ \iffieldundef{#3}
+ {}
+ {\mktimezeros{\thefield{#3}}}%
+ \iffieldundef{#4}{}
+ {\bibtimezonesep
+ \mkbibtimezone{\thefield{#4}}}}%
+ \expandafter\protected\expandafter\def\csname mkbibtime12h\endcsname#1#2#3#4{%
+ \stripzeros{\mktimehh{\thefield{#1}}}\bibtimesep
+ \forcezerosmdt{\thefield{#2}}%
+ \iffieldundef{#3}{}
+ {\bibtimesep
+ \forcezerosmdt{\thefield{#3}}}%
+ \space
+ \ifnumless{\thefield{#1}}{12}
+ {\bibstring{am}}
+ {\bibstring{pm}}%
+ \iffieldundef{#4}{}
+ {\space\bibtimezonesep
+ \parentext{\mkbibtimezone{\thefield{#4}}}}}%
+ \protected\def\mkbibyeardivisiondateshort#1#2{%
+ \mkbibyeardivision{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}%
+ \dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}%
+ \protected\def\mkbibyeardivisiondatelong#1#2{%
+ \mkbibyeardivision{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}%
+ \dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}%
+}
+
+\UndeclareBibliographyExtras{%
+ \restorecommand\mkbibordedition
+ \restorecommand\mkbibordseries
+}
+
+\DeclareBibliographyStrings{%
+ bibliography = {{Bibliograf\'ia}{Bibliograf\'ia}},
+ references = {{Referencias}{Referencias}},
+ shorthands = {{Lista de abreviaturas}{Abreviaturas}},
+ editor = {{editor}{ed\adddot}},
+ editors = {{editores}{eds\adddot}},
+ compiler = {{compilador}{comp\adddot}},
+ compilers = {{compiladores}{comp\adddot}},
+ redactor = {{redactor}{red\adddot}},
+ redactors = {{redactores}{red\adddot}},
+ reviser = {{revisor}{rev\adddot}},
+ revisers = {{revisores}{revs\adddot}},
+ founder = {{fundador}{fund\adddot}},
+ founders = {{fundadores}{fund\adddot}},
+ continuator = {{continuador}{cont\adddot}},
+ continuators = {{continuadores}{cont\adddot}},
+ collaborator = {{colaborador}{col\adddot}},
+ collaborators = {{colaboradores}{cols\adddot}},
+ translator = {{tradutor}{trad\adddot}},
+ translators = {{tradutores}{trads\adddot}},
+ commentator = {{comentador}{coment\adddot}},
+ commentators = {{comentadores}{coments\adddot}},
+ annotator = {{anotador}{anot\adddot}},
+ annotators = {{anotadores}{anots\adddot}},
+ commentary = {{comentario}{coment\adddot}},
+ annotations = {{notas}{notas}},
+ introduction = {{introduci\'on}{introd\adddot}},
+ foreword = {{prefacio}{pref\adddot}},
+ afterword = {{posfacio}{posf\adddot}},
+ editortr = {{editor e tradutor}%
+ {ed\adddotspace e trad\adddot}},
+ editorstr = {{editores e tradutores}%
+ {eds\adddotspace e trads\adddot}},
+ editorco = {{editor e comentador}%
+ {ed\adddotspace e coment\adddot}},
+ editorsco = {{editores e comentadores}%
+ {eds\adddotspace e coments\adddot}},
+ editoran = {{editor e anotador}%
+ {ed\adddotspace e anot\adddot}},
+ editorsan = {{editores e anotadores}%
+ {eds\adddotspace e anots\adddot}},
+ editorin = {{editor e introduci\'on}%
+ {ed\adddotspace e introd\adddot}},
+ editorsin = {{editores e introduci\'on}%
+ {eds\adddotspace e introd\adddot}},
+ editorfo = {{editor e prefacio}%
+ {ed\adddotspace e pref\adddot}},
+ editorsfo = {{editores e prefacio}%
+ {eds\adddotspace e pref\adddot}},
+ editoraf = {{editor e posfacio}%
+ {ed\adddotspace e posf\adddot}},
+ editorsaf = {{editores e posfacio}%
+ {eds\adddotspace e posf\adddot}},
+ editortrco = {{editor, tradutor e comentador}%
+ {ed., trad\adddot\ e coment\adddot}},
+ editorstrco = {{editores, tradutores e comentadores}%
+ {eds., trads\adddot\ e coments\adddot}},
+ editortran = {{editor, tradutor e anotador}%
+ {ed., trad\adddot\ e anot\adddot}},
+ editorstran = {{editores, tradutores e anotadores}%
+ {eds., trads\adddot\ e anots\adddot}},
+ editortrin = {{editor, tradutor e introduci\'on}%
+ {ed., trad\adddot\ e introd\adddot}},
+ editorstrin = {{editores, tradutores e introduci\'on}%
+ {eds., trads\adddot\ e introd\adddot}},
+ editortrfo = {{editor, tradutor e prefacio}%
+ {ed., trad\adddot\ e pref\adddot}},
+ editorstrfo = {{editores, tradutores e prefacio}%
+ {eds., trads\adddot\ e pref\adddot}},
+ editortraf = {{editor, tradutor e posfacio}%
+ {ed., trad\adddot\ e posf\adddot}},
+ editorstraf = {{editores, tradutores e posfacio}%
+ {eds., trads\adddot\ e posf\adddot}},
+ editorcoin = {{editor, comentador e introduci\'on}%
+ {ed., coment\adddot\ e introd\adddot}},
+ editorscoin = {{editores, comentadores e introduci\'on}%
+ {eds., coments\adddot\ e introd\adddot}},
+ editorcofo = {{editor, comentador e prefacio}%
+ {ed., coment\adddot\ e pref\adddot}},
+ editorscofo = {{editores, comentadores e prefacio}%
+ {eds., coments\adddot\ e pref\adddot}},
+ editorcoaf = {{editor, comentador e posfacio}%
+ {ed., coment\adddot\ e posf\adddot}},
+ editorscoaf = {{editores, comentadores e posfacio}%
+ {eds., coments\adddot\ e posf\adddot}},
+ editoranin = {{editor, anotador e introduci\'on}%
+ {ed., anot\adddot\ e introd\adddot}},
+ editorsanin = {{editores, anotadores e introduci\'on}%
+ {eds., anots\adddot\ e introd\adddot}},
+ editoranfo = {{editor, anotador e prefacio}%
+ {ed., anot\adddot\ e pref\adddot}},
+ editorsanfo = {{editores, anotadores e prefacio}%
+ {eds., anots\adddot\ e pref\adddot}},
+ editoranaf = {{editor, anotador e posfacio}%
+ {ed., anot\adddot\ e posf\adddot}},
+ editorsanaf = {{editores, anotadores e posfacio}%
+ {eds., anots\adddot\ e posf\adddot}},
+ editortrcoin = {{editor, tradutor, comentador e introduci\'on}%
+ {ed., trad., coment\adddot\ e introd\adddot}},
+ editorstrcoin = {{editores, tradutores, comentadores e introduci\'on}%
+ {eds., trads., coments\adddot\ e introd\adddot}},
+ editortrcofo = {{editor, tradutor, comentador e prefacio}%
+ {ed., trad., coment\adddot\ e pref\adddot}},
+ editorstrcofo = {{editores, tradutores, comentadores e prefacio}%
+ {eds., trads., coments\adddot\ e pref\adddot}},
+ editortrcoaf = {{editor, tradutor, comentador e posfacio}%
+ {ed., trad., coment\adddot\ e posf\adddot}},
+ editorstrcoaf = {{editores, tradutores, comentadores e posfacio}%
+ {eds., trads., coments\adddot\ e posf\adddot}},
+ editortranin = {{editor, tradutor, anotador e introduci\'on}%
+ {ed., trad., anot\adddot\ e introd\adddot}},
+ editorstranin = {{editores, tradutores, anotadores e introduci\'on}%
+ {eds., trads., anots\adddot\ e introd\adddot}},
+ editortranfo = {{editor, tradutor, anotador e prefacio}%
+ {ed., trad., anot\adddot\ e pref\adddot}},
+ editorstranfo = {{editores, tradutores, anotadores e prefacio}%
+ {eds., trads., anots\adddot\ e pref\adddot}},
+ editortranaf = {{editor, tradutor, anotador e posfacio}%
+ {ed., trad., anot\adddot\ e posf\adddot}},
+ editorstranaf = {{editores, tradutores, anotadores e posfacio}%
+ {eds., trads., anots\adddot\ e posf\adddot}},
+ translatorco = {{tradutor e comentador}%
+ {trad\adddot\ e coment\adddot}},
+ translatorsco = {{tradutores e comentadores}%
+ {trads\adddot\ e coments\adddot}},
+ translatoran = {{tradutor e anotador}%
+ {trad\adddot\ e anot\adddot}},
+ translatorsan = {{tradutores e anotadores}%
+ {trads\adddot\ e anots\adddot}},
+ translatorin = {{traduci\'on e introduci\'on}%
+ {trad\adddot\ e introd\adddot}},
+ translatorsin = {{traduci\'on e introduci\'on}%
+ {trad\adddot\ e introd\adddot}},
+ translatorfo = {{traduci\'on e prefacio}%
+ {trad\adddot\ e pref\adddot}},
+ translatorsfo = {{traduci\'on e prefacio}%
+ {trad\adddot\ e pref\adddot}},
+ translatoraf = {{traduci\'on e posfacio}%
+ {trad\adddot\ e posf\adddot}},
+ translatorsaf = {{traduci\'on e posfacio}%
+ {trad\adddot\ e posf\adddot}},
+ translatorcoin = {{traduci\'on, comentario e introduci\'on}%
+ {trad., coment\adddot\ e introd\adddot}},
+ translatorscoin = {{traduci\'on, comentario e introduci\'on}%
+ {trad., coment\adddot\ e introd\adddot}},
+ translatorcofo = {{traduci\'on, comentario e prefacio}%
+ {trad., coment\adddot\ e pref\adddot}},
+ translatorscofo = {{traduci\'on, comentario e prefacio}%
+ {trad., coment\adddot\ e pref\adddot}},
+ translatorcoaf = {{traduci\'on, comentario e posfacio}%
+ {trad., coment\adddot\ e posf\adddot}},
+ translatorscoaf = {{traduci\'on, comentario e posfacio}%
+ {trad., coment\adddot\ e posf\adddot}},
+ translatoranin = {{traduci\'on, notas e introduci\'on}%
+ {trad., notas e introd\adddot}},
+ translatorsanin = {{traduci\'on, notas e introduci\'on}%
+ {trad., notas e introd\adddot}},
+ translatoranfo = {{traduci\'on, notas e prefacio}%
+ {trad., notas e pref\adddot}},
+ translatorsanfo = {{traduci\'on, notas e prefacio}%
+ {trad., notas e pref\adddot}},
+ translatoranaf = {{traduci\'on, notas e posfacio}%
+ {trad., notas e posf\adddot}},
+ translatorsanaf = {{traduci\'on, notas e posfacio}%
+ {trad., notas e posf\adddot}},
+% organizer = {{}{}},% FIXME: missing
+% organizers = {{}{}},% FIXME: missing
+% byorganizer = {{}{}},% FIXME: missing
+ byauthor = {{por}{por}},
+ byeditor = {{editado por}{ed\adddotspace por}},
+ bycompiler = {{compilado por}{comp\adddotspace por}},
+ byredactor = {{redactado por}{red\adddotspace por}},
+ byreviser = {{revisto por}{rev\adddotspace por}},
+ byreviewer = {{avaliado por}{aval\adddotspace por}},
+ byfounder = {{fundado por}{fund\adddotspace por}},
+ bycontinuator = {{continuado por}{cont\adddotspace por}},
+ bycollaborator = {{en colaboraci\'on con}{en col\adddotspace con}},
+ bytranslator = {{traducido \lbx@lfromlang\ por}{trad\adddot\ \lbx@sfromlang\ por}},
+ bycommentator = {{comentado por}{com\adddot\ por}},
+ byannotator = {{notas de}{notas de}},
+ withcommentator = {{con comentarios de}{con coment\adddot\ de}},
+ withannotator = {{con notas de}{con notas de}},
+ withintroduction = {{con introduci\'on de}{con introd\adddot\ de}},
+ withforeword = {{con prefacio de}{con pref\adddot\ de}},
+ withafterword = {{con posfacio de}{con posf\adddot\ de}},
+ byeditortr = {{editado e traducido \lbx@lfromlang\ por}%
+ {ed\adddotspace e trad\adddot\ \lbx@sfromlang\ por}},
+ byeditorco = {{editado e comentado por}%
+ {ed\adddotspace e com\adddot\ por}},
+ byeditoran = {{editado e anotado por}%
+ {ed\adddotspace e anot\adddot\ por}},
+ byeditorin = {{editado e introducido por}%
+ {ed\adddotspace e introd\adddot\ por}},
+ byeditorfo = {{editado e prefaciado por}%
+ {ed\adddotspace e pref\adddot\ por}},
+ byeditoraf = {{editado e posfaciado por}%
+ {ed\adddotspace e posf\adddot\ por}},
+ byeditortrco = {{editado, traducido \lbx@lfromlang\ e comentado por}%
+ {ed.,\addabbrvspace trad\adddot\ \lbx@sfromlang\ e com\adddot\ por}},
+ byeditortran = {{editado, traducido \lbx@lfromlang\ e anotado por}%
+ {ed.,\addabbrvspace trad\adddot\ \lbx@sfromlang\ e anot\adddot\ por}},
+ byeditortrin = {{editado, traducido \lbx@lfromlang\ e introducido por}%
+ {ed.,\addabbrvspace trad\adddotspace \lbx@sfromlang\ e introd\adddot\ por}},
+ byeditortrfo = {{editado, traducido \lbx@lfromlang\ e prefaciado por}%
+ {ed.,\addabbrvspace trad\adddotspace \lbx@sfromlang\ e pref\adddot\ por}},
+ byeditortraf = {{editado, traducido \lbx@lfromlang\ e posfaciado por}%
+ {ed.,\addabbrvspace trad\adddotspace \lbx@sfromlang\ e posf\adddot\ por}},
+ byeditorcoin = {{editado, comentado e introducido por}%
+ {ed.,\addabbrvspace com\adddot\ e introd\adddot\ por}},
+ byeditorcofo = {{editado, comentado e prefaciado por}%
+ {ed.,\addabbrvspace com\adddot\ e pref\adddot\ por}},
+ byeditorcoaf = {{editado, comentado e posfaciado por}%
+ {ed.,\addabbrvspace com\adddot\ e posf\adddot\ por}},
+ byeditoranin = {{editado, anotado e introducido por}%
+ {ed.,\addabbrvspace anot\adddot\ e introd\adddot\ por}},
+ byeditoranfo = {{editado, anotado e prefaciado por}%
+ {ed.,\addabbrvspace anot\adddot\ e pref\adddot\ por}},
+ byeditoranaf = {{editado, anotado e posfaciado por}%
+ {ed.,\addabbrvspace anot\adddot\ e posf\adddot\ por}},
+ byeditortrcoin = {{editado, traducido \lbx@lfromlang, comentado e introducido por}%
+ {ed.,\addabbrvspace trad\adddot\ \lbx@sfromlang, com\adddot\ e introd\adddot\ por}},
+ byeditortrcofo = {{editado, traducido \lbx@lfromlang, comentado e prefaciado por}%
+ {ed.,\addabbrvspace trad\adddot\ \lbx@sfromlang, com\adddot\ e pref\adddot\ por}},
+ byeditortrcoaf = {{editado, traducido \lbx@lfromlang, comentado e posfaciado por}%
+ {ed.,\addabbrvspace trad\adddot\ \lbx@sfromlang, com\adddot\ e posf\adddot\ por}},
+ byeditortranin = {{editado, traducido \lbx@lfromlang, anotado e introducido por}%
+ {ed.,\addabbrvspace trad\adddot\ \lbx@sfromlang, anot\adddot\ e introd\adddot\ por}},
+ byeditortranfo = {{editado, traducido \lbx@lfromlang, anotado e prefaciado por}%
+ {ed.,\addabbrvspace trad\adddot\ \lbx@sfromlang, anot\adddot\ e pref\adddot\ por}},
+ byeditortranaf = {{editado, traducido \lbx@lfromlang, anotado e posfaciado por}%
+ {ed.,\addabbrvspace trad\adddot\ \lbx@sfromlang, anot\adddot\ e posf\adddot\ por}},
+ bytranslatorco = {{traducido \lbx@lfromlang\ e comentado por}%
+ {trad\adddot\ \lbx@sfromlang\ e com\adddot\ por}},
+ bytranslatoran = {{traducido \lbx@lfromlang\ e anotado por}%
+ {trad\adddot\ \lbx@sfromlang\ e anot\adddot\ por}},
+ bytranslatorin = {{traducido \lbx@lfromlang\ e introducido por}%
+ {trad\adddot\ \lbx@sfromlang\ e introd\adddot\ por}},
+ bytranslatorfo = {{traducido \lbx@lfromlang\ e prefaciado por}%
+ {trad\adddot\ \lbx@sfromlang\ e pref\adddot\ por}},
+ bytranslatoraf = {{traducido \lbx@lfromlang\ e posfaciado por}%
+ {trad\adddot\ \lbx@sfromlang\ e posf\adddot\ por}},
+ bytranslatorcoin = {{traducido \lbx@lfromlang, comentado e introducido por}%
+ {trad\adddot\ \lbx@sfromlang, com\adddot\ e introd\adddot\ por}},
+ bytranslatorcofo = {{traducido \lbx@lfromlang, comentado e prefaciado por}%
+ {trad\adddot\ \lbx@sfromlang, com\adddot\ e pref\adddot\ por}},
+ bytranslatorcoaf = {{traducido \lbx@lfromlang, comentado e posfaciado por}%
+ {trad\adddot\ \lbx@sfromlang, com\adddot\ e posf\adddot\ por}},
+ bytranslatoranin = {{traducido \lbx@lfromlang, anotado e introducido por}%
+ {trad\adddot\ \lbx@sfromlang, anot\adddot\ e introd\adddot\ por}},
+ bytranslatoranfo = {{traducido \lbx@lfromlang, anotado e prefaciado por}%
+ {trad\adddot\ \lbx@sfromlang, anot\adddot\ e pref\adddot\ por}},
+ bytranslatoranaf = {{traducido \lbx@lfromlang, anotado e posfaciado por}%
+ {trad\adddot\ \lbx@sfromlang, anot\adddot\ e posf\adddot\ por}},
+ and = {{e}{e}},
+ andothers = {{et\addabbrvspace al\adddot}{et\addabbrvspace al\adddot}},
+ andmore = {{et\addabbrvspace al\adddot}{et\addabbrvspace al\adddot}},
+ volume = {{volume}{vol\adddot}},
+ volumes = {{volumes}{vols\adddot}},
+ involumes = {{en}{en}},
+ jourvol = {{volume}{vol\adddot}},
+ jourser = {{serie}{ser\adddot}},
+ book = {{libro}{libro}},
+ part = {{parte}{parte}},
+ issue = {{n\'umero}{n\'umero}},
+ newseries = {{nova serie}{nova ser\adddot}},
+ oldseries = {{serie antiga}{ser\adddot\ antiga}},
+ edition = {{edici\'on}{ed\adddot}},
+ reprint = {{reimpresi\'on}{reimpr\adddot}},
+ reprintof = {{reimpresi\'on' de}{reimpr\adddotspace de}},
+ reprintas = {{reimpreso como}{reimpr\adddotspace como}},
+ reprintfrom = {{reimpreso de}{reimpr\adddotspace de}},
+ translationof = {{traduci\'on de}{trad\adddotspace de}},
+ translationas = {{traducido como}{trad\adddotspace como}},
+ translationfrom = {{traducido de}{trad\adddotspace de}},
+ reviewof = {{recensi\'on de}{rec.\adddotspace de}},
+ origpubas = {{orixinalmente publicado como}{orix\adddotspace pub\adddotspace como}},
+ origpubin = {{orixinalmente publicado en}{orix\adddotspace pub\adddotspace en}},
+ astitle = {{como}{como}},
+ bypublisher = {{por}{por}},
+nodate = {{sen data}{s\adddot d\adddot}},
+ page = {{p\'axina}{p\adddot}},
+ pages = {{p\'axinas}{pp\adddot}},
+ column = {{coluna}{col\adddot}},
+ columns = {{colunas}{cols\adddot}},
+ line = {{li\~{n}a}{l\adddot}},
+ lines = {{li\~{n}as}{ll\adddot}},
+ verse = {{verso}{v\adddot}},
+ verses = {{versos}{vv\adddot}},
+ section = {{secci\'on}{\S}},
+ sections = {{secci\'ons'}{\S\S}},
+ paragraph = {{par\'agrafo}{par\adddot}},
+ paragraphs = {{par\'agrafo}{pars\adddot}},
+% pagetotal = {{}{}},% FIXME: missing
+% pagetotals = {{}{}},% FIXME: missing
+% columntotal = {{}{}},% FIXME: missing
+% columntotals = {{}{}},% FIXME: missing
+% linetotal = {{}{}},% FIXME: missing
+% linetotals = {{}{}},% FIXME: missing
+% versetotal = {{}{}},% FIXME: missing
+% versetotals = {{}{}},% FIXME: missing
+% sectiontotal = {{}{}},% FIXME: missing
+% sectiontotals = {{}{}},% FIXME: missing
+% paragraphtotal = {{}{}},% FIXME: missing
+% paragraphtotals = {{}{}},% FIXME: missing
+ in = {{en}{en}},
+ inseries = {{en}{en}},
+ ofseries = {{de}{de}},
+ number = {{n\'umero}{n\adddot\textordmasculine}},
+ chapter = {{cap\'itulo}{cap\adddot}},
+% bathesis = {{}{}},% FIXME: missing
+ mathesis = {{tese de mestrado}{tese de mestrado}},
+ phdthesis = {{tese de doutoramento}{tese de doutoramento}},
+ candthesis = {{proposta de tese}{proposta de tese}},
+ resreport = {{memoria de investigaci\'on'}{mem\adddotspace de inv\adddot}},
+ techreport = {{informe t\'ecnico}{inf\adddotspace t\'ec\adddot}},
+ software = {{software}{software}},
+ datacd = {{CD-ROM}{CD-ROM}},
+ audiocd = {{CD audio}{CD audio}},
+ version = {{versi\'on'}{versi\'on}},
+ url = {{URL}{URL}},
+ urlfrom = {{URL}{URL}},
+ urlseen = {{accedido en}{accedido en}},
+ inpreparation = {{en preparaci\'on'}{en prep\adddot}},
+ submitted = {{enviado}{env\adddot}},
+ forthcoming = {{no prelo}{no prelo}},
+ inpress = {{no prelo}{no prelo}},
+ prepublished = {{prepublicado}{prepub\adddot}},
+ citedas = {{de agora en diante}{de agora en diante}},
+ seenote = {{ver nota}{ver nota}},
+ quotedin = {{citado en}{citado en}},
+ idem = {{\'idem}{\'idem}},
+ idemsm = {{\'idem}{\'idem}},
+ idemsf = {{\'idem}{\'idem}},
+ idemsn = {{\'idem}{\'idem}},
+ idempm = {{\'idem}{\'idem}},
+ idempf = {{\'idem}{\'idem}},
+ idempn = {{\'idem}{\'idem}},
+ idempp = {{\'idem}{\'idem}},
+ ibidem = {{ib\'idem}{ib\'id\adddot}},
+ opcit = {{op\adddotspace cit\adddot}{op\adddotspace cit\adddot}},
+ loccit = {{loc\adddotspace cit\adddot}{loc\adddotspace cit\adddot}},
+ confer = {{cf\adddot}{cf\adddot}},
+ sequens = {{sq\adddot}{sq\adddot}},
+ sequentes = {{sqq\adddot}{sqq\adddot}},
+ passim = {{p\'assim}{p\'ass\adddot}},
+ see = {{v\'exase}{vid\adddot}},
+ seealso = {{v\'exase tam\'en}{vid\adddotspace tam\'en}},
+ backrefpage = {{v\'exase p\'axina}{vid\adddotspace p\adddot}},
+ backrefpages = {{v\'exanse p\'axinas}{vid\adddotspace pp\adddot}},
+ january = {{xaneiro}{xan\adddot}},
+ february = {{febreiro}{feb\adddot}},
+ march = {{marzo}{mar\adddot}},
+ april = {{abril}{abr\adddot}},
+ may = {{maio}{maio}},
+ june = {{xu\~{n}o}{xu\~{n}\adddot}},
+ july = {{xullo}{xul\adddot}},
+ august = {{agosto}{ago\adddot}},
+ september = {{setembro}{set\adddot}},
+ october = {{outubro}{out\adddot}},
+ november = {{novembro}{nov\adddot}},
+ december = {{decembro}{dec\adddot}},
+ langamerican = {{ingl\'es americano}{ing\adddotspace am\adddot}},
+ langbulgarian = {{b\'ulgaro}{b\'ulg\adddot}},
+ langbrazilian = {{portugu\'es brasileiro}{port\adddotspace br\adddot}},
+ langcatalan = {{catal\'an}{cat\adddot}},
+ langcroatian = {{croata}{croata}},
+ langczech = {{checo}{checo}},
+ langdanish = {{dinamarqu\'es}{dan\'es}},
+ langdutch = {{neerland\'es}{neerl\adddot}},
+ langenglish = {{ingl\'es}{ing\adddot}},
+ langestonian = {{estoniano}{eston\adddot}},
+ langfinnish = {{fin\'es}{fin\'es}},
+ langfrench = {{franc\'es}{fr\adddot}},
+ langgalician = {{galego}{gal\adddot}},
+ langgerman = {{alem\'an}{al\adddot}},
+ langgreek = {{grego}{grego}},
+ langhungarian = {{h\'ungaro}{h\'ungaro}},
+ langitalian = {{italiano}{ital\adddot}},
+ langlatin = {{lat\'in}{lat\adddot}},
+% langlatvian = {{}{}},% FIXME: missing
+ langnorwegian = {{noruegu\'es}{nor\adddot}},
+ langpolish = {{polaco}{pol\adddot}},
+ langportuguese = {{portugu\'es}{port\adddot}},
+ langrussian = {{ruso}{ruso}},
+% langslovak = {{}{}},% FIXME: missing
+ langslovene = {{esloveno}{eslov\adddot}},
+ langspanish = {{castel\'an}{cast\adddot}},
+ langswedish = {{sueco}{sueco}},
+ fromamerican = {{do ingl\'es americano}{do ingl\adddotspace am\adddot}},
+ frombulgarian = {{do b\'ulgaro}{do b\'ulg\adddot}},
+ frombrazilian = {{do portugu\'es brasileiro}{do port\adddotspace br\adddot}},
+ fromcatalan = {{do catal\~ao}{do cat\adddot}},
+ fromcroatian = {{do croata}{do croata}},
+ fromczech = {{do checo}{do checo}},
+ fromdanish = {{do dinamarqu\'es}{do dan\'es}},
+ fromdutch = {{do neerland\'es}{do neerl\adddot}},
+ fromenglish = {{do ingl\'es}{do ing\adddot}},
+ fromestonian = {{do estoniano}{do eston\adddot}},
+ fromfinnish = {{do fin\'es}{do fin\'es}},
+ fromfrench = {{do franc\'es}{do fr\adddot}},
+ fromgalician = {{do galego}{do gal\adddot}},
+ fromgerman = {{do alem\'an}{do al\adddot}},
+ fromgreek = {{do grego}{do grego}},
+ fromhungarian = {{do h\'ungaro}{do h\'ungaro}},
+ fromitalian = {{do italiano}{do ital\adddot}},
+ fromlatin = {{do lat\'in'}{do lat\adddot}},
+% fromlatvian = {{}{}},% FIXME: missing
+ fromnorwegian = {{do noruegu\'es}{do nor\adddot}},
+ frompolish = {{do polaco}{do pol\adddot}},
+ fromportuguese = {{do portugu\'es}{do port\adddot}},
+ fromrussian = {{do ruso}{do ruso}},
+% fromslovak = {{}{}},% FIXME: missing
+ fromslovene = {{do esloveno}{do eslov\adddot}},
+ fromspanish = {{do castel\'an}{do cast\adddot}},
+ fromswedish = {{do sueco}{do sueco}},
+ countryde = {{Aleman\{{n}a}{DE}},
+ countryeu = {{Uni\'on Europea}{EU}},
+ countryep = {{Uni\'on Europea}{EU}},
+ countryfr = {{Francia}{FR}},
+ countryuk = {{Reino Unido}{GB}},
+ countryus = {{Estados Unidos de Am\'erica}{EUA}},
+ patent = {{patente}{pat\adddot}},
+ patentde = {{patente alem\'a}{pat\adddot\ al\adddot}},
+ patenteu = {{patente europea}{pat\adddot\ eur\adddot}},
+ patentfr = {{patente francesa}{pat\adddot fr\adddot}},
+ patentuk = {{patente brit\'anica}{pat\adddot\ brit\adddot}},
+ patentus = {{patente americana}{pat\adddot\ am\adddot}},
+ patreq = {{solicitude de patente}{sol\adddot\ de pat\adddot}},
+ patreqde = {{solicitude de patente alem\'a}{sol\adddot\ de pat\adddot\ al\adddot}},
+ patreqeu = {{solicitude de patente europea}{sol\adddot\ de pat\adddot\ eur\adddot}},
+ patreqfr = {{solicitude de patente francesa}{sol\adddot\ de pat\adddot\ fr\adddot}},
+ patrequk = {{solicitude de patente brit\'anica}{sol\adddot\ de pat\adddot\ brit\adddot}},
+ patrequs = {{solicitude de patente americana}{sol\adddot\ de pat\adddot\ EUA}},
+ file = {{arquivo}{arq\adddot}},
+ library = {{biblioteca}{bibl\adddot}},
+ abstract = {{resumo}{res\adddot}},
+ annotation = {{anotaci\'on}{anot\adddot}},
+ commonera = {{Era Com\'un'}{EC}},
+ beforecommonera = {{antes da Era Com\'un'}{AEC}},
+ annodomini = {{despois de Cristo}{d\adddot C\adddot}},
+ beforechrist = {{antes de Cristo}{a\adddot C\adddot}},
+ circa = {{circa}{ca\adddot}},
+ spring = {{primavera}{primavera}},
+ summer = {{ver\'an}{ver\'an}},
+ autumn = {{outono}{outono}},
+ winter = {{inverno}{inverno}},
+% springN = {{}{}},% FIXME: missing
+% summerN = {{}{}},% FIXME: missing
+% autumnN = {{}{}},% FIXME: missing
+% winterN = {{}{}},% FIXME: missing
+% springS = {{}{}},% FIXME: missing
+% summerS = {{}{}},% FIXME: missing
+% autumnS = {{}{}},% FIXME: missing
+% winterS = {{}{}},% FIXME: missing
+% Q1 = {{}{}},% FIXME: missing
+% Q2 = {{}{}},% FIXME: missing
+% Q3 = {{}{}},% FIXME: missing
+% Q4 = {{}{}},% FIXME: missing
+% QD1 = {{}{}},% FIXME: missing
+% QD2 = {{}{}},% FIXME: missing
+% QD3 = {{}{}},% FIXME: missing
+% S1 = {{}{}},% FIXME: missing
+% S2 = {{}{}},% FIXME: missing
+ am = {{AM}{AM}},
+ pm = {{PM}{PM}},
+}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/lbx/german-ms.lbx b/macros/latex/contrib/biblatex-ms/latex/lbx/german-ms.lbx
new file mode 100644
index 0000000000..412dbf6441
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/lbx/german-ms.lbx
@@ -0,0 +1,582 @@
+\ProvidesFile{german-ms.lbx}
+[\abx@lbxid]
+
+\DeclareRedundantLanguages{german}{german,ngerman,austrian,naustrian,nswissgerman,swissgerman}
+
+\DeclareBibliographyExtras{%
+ \DeclareCapitalPunctuation{.:!?}%
+ \protected\def\bibrangedash{%
+ \textendash\penalty\hyphenpenalty}% breakable dash
+ \let\finalandcomma=\empty
+ \let\finalandsemicolon=\empty
+ \protected\def\mkbibordinal#1{\stripzeros{#1}\adddot}%
+ \protected\def\mkbibmascord{\mkbibordinal}%
+ \protected\def\mkbibfemord{\mkbibordinal}%
+ \protected\def\mkbibneutord{\mkbibordinal}%
+ \protected\def\mkbibdatelong#1#2#3{%
+ \iffieldundef{#3}
+ {}
+ {\mkbibordinal{\thefield{#3}}%
+ \iffieldundef{#2}{}{\nobreakspace}}%
+ \iffieldundef{#2}
+ {}
+ {\mkbibmonth{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}}%
+ \iffieldbibstring{#1}
+ {\bibstring{\thefield{#1}}}
+ {\dateeraprintpre{#1}\stripzeros{\thefield{#1}}}}%
+ \protected\def\mkbibdateshort#1#2#3{%
+ \iffieldundef{#3}
+ {}
+ {\mkdayzeros{\thefield{#3}}\adddot
+ \iffieldundef{#2}{}{\thinspace}}%
+ \iffieldundef{#2}
+ {}
+ {\mkmonthzeros{\thefield{#2}}%
+ \iffieldundef{#1}
+ {}
+ {\iffieldundef{#3}{/}{\adddot\thinspace}}}%
+ \iffieldbibstring{#1}
+ {\bibstring{\thefield{#1}}}
+ {\dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}}%
+ \savecommand\lbx@lfromlang
+ \savecommand\lbx@sfromlang
+ \def\lbx@lfromlang{%
+ \iflistundef{origlanguage}
+ {}
+ {\printlist[lfromoriglanguage]{origlanguage}\space}}%
+ \def\lbx@sfromlang{%
+ \iflistundef{origlanguage}
+ {}
+ {\printlist[sfromoriglanguage]{origlanguage}\space}}%
+ \expandafter\protected\expandafter\def\csname mkbibtime24h\endcsname#1#2#3#4{%
+ \iffieldundef{#1}
+ {}
+ {\mktimezeros{\thefield{#1}}%
+ \iffieldundef{#2}{}{\bibtimesep}}%
+ \iffieldundef{#2}
+ {}
+ {\mktimezeros{\thefield{#2}}%
+ \iffieldundef{#3}{}{\bibtimesep}}%
+ \iffieldundef{#3}
+ {}
+ {\mktimezeros{\thefield{#3}}}%
+ \iffieldundef{#4}{}
+ {\bibtimezonesep
+ \mkbibtimezone{\thefield{#4}}}}%
+ \expandafter\protected\expandafter\def\csname mkbibtime12h\endcsname#1#2#3#4{%
+ \stripzeros{\mktimehh{\thefield{#1}}}\bibtimesep
+ \forcezerosmdt{\thefield{#2}}%
+ \iffieldundef{#3}{}
+ {\bibtimesep
+ \forcezerosmdt{\thefield{#3}}}%
+ \space
+ \ifnumless{\thefield{#1}}{12}
+ {\bibstring{am}}
+ {\bibstring{pm}}%
+ \iffieldundef{#4}{}
+ {\space\bibtimezonesep
+ \parentext{\mkbibtimezone{\thefield{#4}}}}}%
+ \protected\def\mkbibyeardivisiondateshort#1#2{%
+ \mkbibyeardivision{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}%
+ \dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}%
+ \protected\def\mkbibyeardivisiondatelong#1#2{%
+ \mkbibyeardivision{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}%
+ \dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}%
+}
+
+\UndeclareBibliographyExtras{%
+ \restorecommand\lbx@lfromlang
+ \restorecommand\lbx@sfromlang
+}
+
+\DeclareBibliographyStrings{%
+ bibliography = {{Literaturverzeichnis}{Literatur}},
+ references = {{Literaturverzeichnis}{Literatur}},
+ shorthands = {{Sigelverzeichnis}{Sigel}},
+ editor = {{Herausgeber}{Hrsg\adddot}},
+ editors = {{Herausgeber}{Hrsg\adddot}},
+ compiler = {{Kompilator}{Komp\adddot}},
+ compilers = {{Kompilatoren}{Komp\adddot}},
+ redactor = {{Bearbeiter}{Bearb\adddot}},
+ redactors = {{Bearbeiter}{Bearb\adddot}},
+ reviser = {{\"Uberarbeiter}{\"Uberarb\adddot}},
+ revisers = {{\"Uberarbeiter}{\"Uberarb\adddot}},
+ founder = {{Begr\"under}{Begr\adddot}},
+ founders = {{Begr\"under}{Begr\adddot}},
+ continuator = {{Fortf\"uhrer}{Fortf\adddot}},
+ continuators = {{Fortf\"uhrer}{Fortf\adddot}},
+ collaborator = {{Mitarbeiter}{Mitarb\adddot}},
+ collaborators = {{Mitarbeiter}{Mitarb\adddot}},
+ translator = {{\"Ubersetzer}{\"Ubers\adddot}},
+ translators = {{\"Ubersetzer}{\"Ubers\adddot}},
+ commentator = {{Kommentator}{Komm\adddot}},
+ commentators = {{Kommentatoren}{Komm\adddot}},
+ annotator = {{Kommentator}{Komm\adddot}},
+ annotators = {{Kommentatoren}{Komm\adddot}},
+ commentary = {{Kommentar}{Komm\adddot}},
+ annotations = {{Erl\"auterungen}{Erl\"aut\adddot}},
+ introduction = {{Einleitung}{Einl\adddot}},
+ foreword = {{Vorwort}{Vorw\adddot}},
+ afterword = {{Nachwort}{Nachw\adddot}},
+ editortr = {{Herausgeber und \"Ubersetzer}%
+ {Hrsg\adddotspace und \"Ubers\adddot}},
+ editorstr = {{Herausgeber und \"Ubersetzer}%
+ {Hrsg\adddotspace und \"Ubers\adddot}},
+ editorco = {{Herausgeber und Kommentator}%
+ {Hrsg\adddotspace und Komm\adddot}},
+ editorsco = {{Herausgeber und Kommentatoren}%
+ {Hrsg\adddotspace und Komm\adddot}},
+ editoran = {{Herausgeber und Kommentator}%
+ {Hrsg\adddotspace und Komm\adddot}},
+ editorsan = {{Herausgeber und Kommentatoren}%
+ {Hrsg\adddotspace und Komm\adddot}},
+ editorin = {{Herausgabe und Einleitung}%
+ {Hrsg\adddotspace und Einl\adddot}},
+ editorsin = {{Herausgeber und Einleitung}%
+ {Hrsg\adddotspace und Einl\adddot}},
+ editorfo = {{Herausgeber und Vorwort}%
+ {Hrsg\adddotspace und Vorw\adddot}},
+ editorsfo = {{Herausgabe und Vorwort}%
+ {Hrsg\adddotspace und Vorw\adddot}},
+ editoraf = {{Herausgabe und Nachwort}%
+ {Hrsg\adddotspace und Nachw\adddot}},
+ editorsaf = {{Herausgabe und Nachwort}%
+ {Hrsg\adddotspace und Nachw\adddot}},
+ editortrco = {{Herausgeber, \"Ubersetzer und Kommentator}%
+ {Hrsg., \"Ubers\adddotspace und Komm\adddot}},
+ editorstrco = {{Herausgeber, \"Ubersetzer und Kommentatoren}%
+ {Hrsg., \"Ubers\adddotspace und Komm\adddot}},
+ editortran = {{Herausgeber, \"Ubersetzer und Kommentator}%
+ {Hrsg., \"Ubers\adddotspace und Komm\adddot}},
+ editorstran = {{Herausgeber, \"Ubersetzer und Kommentatoren}%
+ {Hrsg., \"Ubers\adddotspace und Komm\adddot}},
+ editortrin = {{Herausgabe, \"Ubersetzung und Einleitung}%
+ {Hrsg., \"Ubers\adddotspace und Einl\adddot}},
+ editorstrin = {{Herausgabe, \"Ubersetzung und Einleitung}%
+ {Hrsg., \"Ubers\adddotspace und Einl\adddot}},
+ editortrfo = {{Herausgabe, \"Ubersetzung und Vorwort}%
+ {Hrsg., \"Ubers\adddotspace und Vorw\adddot}},
+ editorstrfo = {{Herausgabe, \"Ubersetzung und Vorwort}%
+ {Hrsg., \"Ubers\adddotspace und Vorw\adddot}},
+ editortraf = {{Herausgabe, \"Ubersetzung und Nachwort}%
+ {Hrsg., \"Ubers\adddotspace und Nachw\adddot}},
+ editorstraf = {{Herausgabe, \"Ubersetzung und Nachwort}%
+ {Hrsg., \"Ubers\adddotspace und Nachw\adddot}},
+ editorcoin = {{Herausgabe, Kommentar und Einleitung}%
+ {Hrsg., Komm\adddotspace und Einl\adddot}},
+ editorscoin = {{Herausgabe, Kommentar und Einleitung}%
+ {Hrsg., Komm\adddotspace und Einl\adddot}},
+ editorcofo = {{Herausgabe, Kommentar und Vorwort}%
+ {Hrsg., Komm\adddotspace und Vorw\adddot}},
+ editorscofo = {{Herausgabe, Kommentar und Vorwort}%
+ {Hrsg., Komm\adddotspace und Vorw\adddot}},
+ editorcoaf = {{Herausgabe, Kommentar und Nachwort}%
+ {Hrsg., Komm\adddotspace und Nachw\adddot}},
+ editorscoaf = {{Herausgabe, Kommentar und Nachwort}%
+ {Hrsg., Komm\adddotspace und Nachw\adddot}},
+ editoranin = {{Herausgabe, Erl\"auterungen und Einleitung}%
+ {Hrsg., Erl\"aut\adddotspace und Einl\adddot}},
+ editorsanin = {{Herausgabe, Erl\"auterungen und Einleitung}%
+ {Hrsg., Erl\"aut\adddotspace und Einl\adddot}},
+ editoranfo = {{Herausgabe, Erl\"auterungen und Vorwort}%
+ {Hrsg., Erl\"aut\adddotspace und Vorw\adddot}},
+ editorsanfo = {{Herausgabe, Erl\"auterungen und Vorwort}%
+ {Hrsg., Erl\"aut\adddotspace und Vorw\adddot}},
+ editoranaf = {{Herausgabe, Erl\"auterungen und Nachwort}%
+ {Hrsg., Erl\"aut\adddotspace und Nachw\adddot}},
+ editorsanaf = {{Herausgabe, Erl\"auterungen und Nachwort}%
+ {Hrsg., Erl\"aut\adddotspace und Nachw\adddot}},
+ editortrcoin = {{Herausgabe, \"Ubersetzung, Kommentar und Einleitung}%
+ {Hrsg., \"Ubers., Komm\adddotspace und Einl\adddot}},
+ editorstrcoin = {{Herausgabe, \"Ubersetzung, Kommentar und Einleitung}%
+ {Hrsg., \"Ubers., Komm\adddotspace und Einl\adddot}},
+ editortrcofo = {{Herausgabe, \"Ubersetzung, Kommentar und Vorwort}%
+ {Hrsg., \"Ubers., Komm\adddotspace und Vorw\adddot}},
+ editorstrcofo = {{Herausgabe, \"Ubersetzung, Kommentar und Vorwort}%
+ {Hrsg., \"Ubers., Komm\adddotspace und Vorw\adddot}},
+ editortrcoaf = {{Herausgabe, \"Ubersetzung, Kommentar und Nachwort}%
+ {Hrsg., \"Ubers., Komm\adddotspace und Nachw\adddot}},
+ editorstrcoaf = {{Herausgabe, \"Ubersetzung, Kommentar und Nachwort}%
+ {Hrsg., \"Ubers., Komm\adddotspace und Nachw\adddot}},
+ editortranin = {{Herausgabe, \"Ubersetzung, Erl\"auterungen und Einleitung}%
+ {Hrsg., \"Ubers., Erl\"aut\adddotspace und Einl\adddot}},
+ editorstranin = {{Herausgabe, \"Ubersetzung, Erl\"auterungen und Einleitung}%
+ {Hrsg., \"Ubers., Erl\"aut\adddotspace und Einl\adddot}},
+ editortranfo = {{Herausgabe, \"Ubersetzung, Erl\"auterungen und Vorwort}%
+ {Hrsg., \"Ubers., Erl\"aut\adddotspace und Vorw\adddot}},
+ editorstranfo = {{Herausgabe, \"Ubersetzung, Erl\"auterungen und Vorwort}%
+ {Hrsg., \"Ubers., Erl\"aut\adddotspace und Vorw\adddot}},
+ editortranaf = {{Herausgabe, \"Ubersetzung, Erl\"auterungen und Nachwort}%
+ {Hrsg., \"Ubers., Erl\"aut\adddotspace und Nachw\adddot}},
+ editorstranaf = {{Herausgabe, \"Ubersetzung, Erl\"auterungen und Nachwort}%
+ {Hrsg., \"Ubers., Erl\"aut\adddotspace und Nachw\adddot}},
+ translatorco = {{\"Ubersetzung und Kommentar}%
+ {\"Ubers\adddotspace und Komm\adddot}},
+ translatorsco = {{\"Ubersetzung und Kommentar}%
+ {\"Ubers\adddotspace und Komm\adddot}},
+ translatoran = {{\"Ubersetzung und Erl\"auterungen}%
+ {\"Ubers\adddotspace und Erl\"aut\adddot}},
+ translatorsan = {{\"Ubersetzung und Erl\"auterungen}%
+ {\"Ubers\adddotspace und Erl\"aut\adddot}},
+ translatorin = {{\"Ubersetzung und Einleitung}%
+ {\"Ubers\adddotspace und Einl\adddot}},
+ translatorsin = {{\"Ubersetzung und Einleitung}%
+ {\"Ubers\adddotspace und Einl\adddot}},
+ translatorfo = {{\"Ubersetzung und Vorwort}%
+ {\"Ubers\adddotspace und Vorw\adddot}},
+ translatorsfo = {{\"Ubersetzung und Vorwort}%
+ {\"Ubers\adddotspace und Vorw\adddot}},
+ translatoraf = {{\"Ubersetzung und Nachwort}%
+ {\"Ubers\adddotspace und Nachw\adddot}},
+ translatorsaf = {{\"Ubersetzung und Nachwort}%
+ {\"Ubers\adddotspace und Nachw\adddot}},
+ translatorcoin = {{\"Ubersetzung, Kommentar und Einleitung}%
+ {\"Ubers., Komm\adddotspace und Einl\adddot}},
+ translatorscoin = {{\"Ubersetzung, Kommentar und Einleitung}%
+ {\"Ubers., Komm\adddotspace und Einl\adddot}},
+ translatorcofo = {{\"Ubersetzung, Kommentar und Vorwort}%
+ {\"Ubers., Komm\adddotspace und Vorw\adddot}},
+ translatorscofo = {{\"Ubersetzung, Kommentar und Vorwort}%
+ {\"Ubers., Komm\adddotspace und Vorw\adddot}},
+ translatorcoaf = {{\"Ubersetzung, Kommentar und Nachwort}%
+ {\"Ubers., Komm\adddotspace und Nachw\adddot}},
+ translatorscoaf = {{\"Ubersetzung, Kommentar und Nachwort}%
+ {\"Ubers., Komm\adddotspace und Nachw\adddot}},
+ translatoranin = {{\"Ubersetzung, Erl\"auterungen und Einleitung}%
+ {\"Ubers., Erl\"aut\adddotspace und Einl\adddot}},
+ translatorsanin = {{\"Ubersetzung, Erl\"auterungen und Einleitung}%
+ {\"Ubers., Erl\"aut\adddotspace und Einl\adddot}},
+ translatoranfo = {{\"Ubersetzung, Erl\"auterungen und Vorwort}%
+ {\"Ubers., Erl\"aut\adddotspace und Vorw\adddot}},
+ translatorsanfo = {{\"Ubersetzung, Erl\"auterungen und Vorwort}%
+ {\"Ubers., Erl\"aut\adddotspace und Vorw\adddot}},
+ translatoranaf = {{\"Ubersetzung, Erl\"auterungen und Nachwort}%
+ {\"Ubers., Erl\"aut\adddotspace und Nachw\adddot}},
+ translatorsanaf = {{\"Ubersetzung, Erl\"auterungen und Nachwort}%
+ {\"Ubers., Erl\"aut\adddotspace und Nachw\adddot}},
+% organizer = {{}{}},% FIXME: missing
+% organizers = {{}{}},% FIXME: missing
+% byorganizer = {{}{}},% FIXME: missing
+ byauthor = {{von}{von}},
+ byeditor = {{herausgegeben von}{hrsg\adddotspace von}},
+ bycompiler = {{kompiliert von}{komp\adddotspace von}},
+ byredactor = {{bearbeitet von}{bearb\adddotspace von}},
+ byreviser = {{\"uberarbeitet von}{\"uberarb\adddotspace von}},
+ byreviewer = {{rezensiert von}{rez\adddotspace von}},
+ byfounder = {{begr\"undet von}{begr\adddotspace von}},
+ bycontinuator = {{fortgef\"uhrt von}{fortgef\adddotspace von}},
+ bycollaborator = {{unter Mitarbeit von}{unter Mitarb\adddotspace von}},
+ bytranslator = {{\lbx@lfromlang \"ubersetzt von}{\lbx@sfromlang \"ubers\adddotspace von}},
+ bycommentator = {{kommentiert von}{komm\adddotspace von}},
+ byannotator = {{erl\"autert von}{erl\"aut\adddotspace von}},
+ withcommentator = {{mit einem Kommentar von}{mit einem Komm\adddotspace von}},
+ withannotator = {{mit Erl\"auterungen von}{mit Erl\"aut\adddotspace von}},
+ withintroduction = {{mit einer Einleitung von}{mit einer Einl\adddotspace von}},
+ withforeword = {{mit einem Vorwort von}{mit einem Vorw\adddotspace von}},
+ withafterword = {{mit einem Nachwort von}{mit einem Nachw\adddotspace von}},
+ byeditortr = {{herausgegeben und \lbx@lfromlang \"ubersetzt von}%
+ {hrsg\adddotspace und \lbx@sfromlang \"ubers\adddotspace von}},
+ byeditorco = {{herausgegeben und kommentiert von}%
+ {hrsg\adddotspace und komm\adddotspace von}},
+ byeditoran = {{herausgegeben und erl\"autert von}%
+ {hrsg\adddotspace und erl\"aut\adddotspace von}},
+ byeditorin = {{herausgegeben und mit einer Einleitung versehen von}%
+ {hrsg\adddotspace und mit einer Einl\adddotspace vers\adddotspace von}},
+ byeditorfo = {{herausgegeben und mit einem Vorwort versehen von}%
+ {hrsg\adddotspace und mit einem Vorw\adddotspace vers\adddotspace von}},
+ byeditoraf = {{herausgegeben und mit einem Nachwort versehen von}%
+ {hrsg\adddotspace und mit einem Nachw\adddotspace vers\adddotspace von}},
+ byeditortrco = {{herausgegeben, \lbx@lfromlang \"ubersetzt und kommentiert von}%
+ {hrsg., \lbx@sfromlang \"ubers\adddotspace und komm\adddotspace von}},
+ byeditortran = {{herausgegeben, \lbx@lfromlang \"ubersetzt und erl\"autert von}%
+ {hrsg., \lbx@sfromlang \"ubers\adddotspace und erl\"aut\adddotspace von}},
+ byeditortrin = {{herausgegeben, \lbx@lfromlang \"ubersetzt und mit einer Einleitung versehen von}%
+ {hrsg., \lbx@sfromlang \"ubers\adddotspace und mit einer Einl\adddotspace vers\adddotspace von}},
+ byeditortrfo = {{herausgegeben, \lbx@lfromlang \"ubersetzt und mit einem Vorwort versehen von}%
+ {hrsg., \lbx@sfromlang \"ubers\adddotspace und mit einem Vorw\adddotspace vers\adddotspace von}},
+ byeditortraf = {{herausgegeben, \lbx@lfromlang \"ubersetzt und mit einem Nachwort versehen von}%
+ {hrsg., \lbx@sfromlang \"ubers\adddotspace und mit einem Nachw\adddotspace vers\adddotspace von}},
+ byeditorcoin = {{herausgegeben, kommentiert und mit einer Einleitung versehen von}%
+ {hrsg., komm\adddotspace und mit einer Einl\adddotspace vers\adddotspace von}},
+ byeditorcofo = {{herausgegeben, kommentiert und mit einem Vorwort versehen von}%
+ {hrsg., komm\adddotspace und mit einem Vorw\adddotspace vers\adddotspace von}},
+ byeditorcoaf = {{herausgegeben, kommentiert und mit einem Nachwort versehen von}%
+ {hrsg., komm\adddotspace und mit einem Nachw\adddotspace vers\adddotspace von}},
+ byeditoranin = {{herausgegeben, erl\"autert und mit einer Einleitung versehen von}%
+ {hrsg., erl\"aut\adddotspace und mit einer Einl\adddotspace vers\adddotspace von}},
+ byeditoranfo = {{herausgegeben, erl\"autert und mit einem Vorwort versehen von}%
+ {hrsg., erl\"aut\adddotspace und mit einem Vorw\adddotspace vers\adddotspace von}},
+ byeditoranaf = {{herausgegeben, erl\"autert und mit einem Nachwort versehen von}%
+ {hrsg., erl\"aut\adddotspace und mit einem Nachw\adddotspace vers\adddotspace von}},
+ byeditortrcoin = {{herausgegeben, \lbx@lfromlang \"ubersetzt, kommentiert und mit einer Einleitung versehen von}%
+ {hrsg., \lbx@sfromlang \"ubers., komm\adddotspace und mit einer Einl\adddotspace vers\adddotspace von}},
+ byeditortrcofo = {{herausgegeben, \lbx@lfromlang \"ubersetzt, kommentiert und mit einem Vorwort versehen von}%
+ {hrsg., \lbx@sfromlang \"ubers., komm\adddotspace und mit einem Vorw\adddotspace vers\adddotspace von}},
+ byeditortrcoaf = {{herausgegeben, \lbx@lfromlang \"ubersetzt, kommentiert und mit einem Nachwort versehen von}%
+ {hrsg., \lbx@sfromlang \"ubers., komm\adddotspace und mit einem Nachw\adddotspace vers\adddotspace von}},
+ byeditortranin = {{herausgegeben, \lbx@lfromlang \"ubersetzt, erl\"autert und mit einer Einleitung versehen von}%
+ {hrsg., \lbx@sfromlang \"ubers., erl\"aut\adddotspace und mit einer Einl\adddotspace vers\adddotspace von}},
+ byeditortranfo = {{herausgegeben, \lbx@lfromlang \"ubersetzt, erl\"autert und mit einem Vorwort versehen von}%
+ {hrsg., \lbx@sfromlang \"ubers., erl\"aut\adddotspace und mit einem Vorw\adddotspace vers\adddotspace von}},
+ byeditortranaf = {{herausgegeben, \lbx@lfromlang \"ubersetzt, erl\"autert und mit einem Nachwort versehen von}%
+ {hrsg., \lbx@sfromlang \"ubers., erl\"aut\adddotspace und mit einem Nachw\adddotspace vers\adddotspace von}},
+ bytranslatorco = {{\lbx@lfromlang \"ubersetzt und kommentiert von}%
+ {\lbx@sfromlang \"ubers\adddotspace und komm\adddotspace von}},
+ bytranslatoran = {{\lbx@lfromlang \"ubersetzt und erl\"autert von}%
+ {\lbx@sfromlang \"ubers\adddotspace und erl\"aut\adddotspace von}},
+ bytranslatorin = {{\lbx@lfromlang \"ubersetzt und mit einer Einleitung versehen von}%
+ {\lbx@sfromlang \"ubers\adddotspace und mit einer Einl\adddotspace vers\adddotspace von}},
+ bytranslatorfo = {{\lbx@lfromlang \"ubersetzt und mit einem Vorwort versehen von}%
+ {\lbx@sfromlang \"ubers\adddotspace und mit einem Vorw\adddotspace vers\adddotspace von}},
+ bytranslatoraf = {{\lbx@lfromlang \"ubersetzt und mit einem Nachwort versehen von}%
+ {\lbx@sfromlang \"ubers\adddotspace und mit einem Nachw\adddotspace vers\adddotspace von}},
+ bytranslatorcoin = {{\lbx@lfromlang \"ubersetzt, kommentiert und mit einer Einleitung versehen von}%
+ {\lbx@sfromlang \"ubers., komm\adddotspace und mit einer Einl\adddotspace vers\adddotspace von}},
+ bytranslatorcofo = {{\lbx@lfromlang \"ubersetzt, kommentiert und mit einem Vorwort versehen von}%
+ {\lbx@sfromlang \"ubers., komm\adddotspace und mit einem Vorw\adddotspace vers\adddotspace von}},
+ bytranslatorcoaf = {{\lbx@lfromlang \"ubersetzt, kommentiert und mit einem Nachwort versehen von}%
+ {\lbx@sfromlang \"ubers., komm\adddotspace und mit einem Nachw\adddotspace vers\adddotspace von}},
+ bytranslatoranin = {{\lbx@lfromlang \"ubersetzt, erl\"autert und mit einer Einleitung versehen von}%
+ {\lbx@sfromlang \"ubers., erl\"aut\adddotspace und mit einer Einl\adddotspace vers\adddotspace von}},
+ bytranslatoranfo = {{\lbx@lfromlang \"ubersetzt, erl\"autert und mit einem Vorwort versehen von}%
+ {\lbx@sfromlang \"ubers., erl\"aut\adddotspace und mit einem Vorw\adddotspace vers\adddotspace von}},
+ bytranslatoranaf = {{\lbx@lfromlang \"ubersetzt, erl\"autert und mit einem Nachwort versehen von}%
+ {\lbx@sfromlang \"ubers., erl\"aut\adddotspace und mit einem Nachw\adddotspace vers\adddotspace von}},
+ and = {{und}{und}},
+ andothers = {{u.\,a\adddot}{u.\,a\adddot}},
+ andmore = {{u.\,a\adddot}{u.\,a\adddot}},
+ volume = {{Band}{Bd\adddot}},
+ volumes = {{B\"ande}{Bde\adddot}},
+ involumes = {{in}{in}},
+ jourvol = {{Jahrgang}{Jg\adddot}},
+ jourser = {{Serie}{Ser\adddot}},
+ book = {{Buch}{Buch}},
+ part = {{Teil}{T.\adddot}},
+ issue = {{Ausgabe}{Ausg\adddot}},
+ newseries = {{neue Folge}{n.\,F\adddot}},
+ oldseries = {{alte Folge}{a.\,F\adddot}},
+ edition = {{Auf\noligature lage}{Aufl\adddot}},
+ reprint = {{Nachdruck}{Nachdr\adddot}},
+ reprintof = {{Nachdruck von}{Nachdr\adddotspace von}},
+ reprintas = {{Nachdruck unter dem Titel}{Nachdr\adddotspace unter dem Titel}},
+ reprintfrom = {{Nachdruck aus}{Nachdr\adddotspace aus}},
+ translationof = {{\"Ubersetzung von}{\"Ubers\adddotspace von}},
+ translationas = {{\"ubersetzt unter dem Titel}{\"ubers\adddotspace unter dem Titel}},
+% translationfrom = {{}{}},% FIXME: missing
+ reviewof = {{Rezension von}{Rez\adddotspace von}},
+ origpubas = {{zuerst publiziert als}{zuerst publ\adddotspace als}},
+ origpubin = {{zuerst publiziert in}{zuerst publ\adddotspace in}},
+ astitle = {{unter dem Titel}{unter dem Titel}},
+ bypublisher = {{von}{von}},
+ nodate = {{ohne\space Datum}{{}o.\,D\adddot}},
+ page = {{Seite}{S\adddot}},
+ pages = {{Seiten}{S\adddot}},
+ column = {{Spalte}{Sp\adddot}},
+ columns = {{Spalten}{Sp\adddot}},
+ line = {{Zeile}{Z\adddot}},
+ lines = {{Zeilen}{Z\adddot}},
+ verse = {{Vers}{V\adddot}},
+ verses = {{Verse}{V\adddot}},
+ section = {{Paragraph}{\S}},
+ sections = {{Paragraphen}{\S\S}},
+ paragraph = {{Absatz}{Abs\adddot}},
+ paragraphs = {{Abs\"atze}{Abs\adddot}},
+ pagetotal = {{Seite}{S\adddot}},
+ pagetotals = {{Seiten}{S\adddot}},
+ columntotal = {{Spalte}{Sp\adddot}},
+ columntotals = {{Spalten}{Sp\adddot}},
+ linetotal = {{Zeile}{Z\adddot}},
+ linetotals = {{Zeilen}{Z\adddot}},
+ versetotal = {{Vers}{V\adddot}},
+ versetotals = {{Verse}{V\adddot}},
+ sectiontotal = {{Paragraph}{\S}},
+ sectiontotals = {{Paragraphen}{\S\S}},
+ paragraphtotal = {{Absatz}{Abs\adddot}},
+ paragraphtotals = {{Abs\"atze}{Abs\adddot}},
+ in = {{in}{in}},
+ inseries = {{der Reihe}{der Reihe}},
+ ofseries = {{der Reihe}{der Reihe}},
+ number = {{Nummer}{Nr\adddot}},
+ chapter = {{Kapitel}{Kap\adddot}},
+ bathesis = {{Bachelorarbeit}{Bachelorarb\adddot}},
+ mathesis = {{Magisterarbeit}{Magisterarb\adddot}},
+ phdthesis = {{Dissertation}{Diss\adddot}},
+ candthesis = {{Qualifikationsschrift}{Qualifikationsschr\adddot}},
+ resreport = {{Forschungsbericht}{Forschungsber\adddot}},
+ techreport = {{Technischer Bericht}{Techn\adddotspace Ber\adddot}},
+ software = {{Com\-pu\-ter-Soft\-ware}{Soft\-ware}},
+ datacd = {{CD-ROM}{CD-ROM}},
+ audiocd = {{Audio-CD}{Audio-CD}},
+ version = {{Version}{Version}},
+ url = {{Adresse}{Adresse}},
+ urlfrom = {{abgerufen unter}{abger\adddotspace unter}},
+ urlseen = {{besucht am}{besucht am}},
+ inpreparation = {{in Vorbereitung}{in Vorbereitung}},
+ submitted = {{eingereicht}{eingereicht}},
+ forthcoming = {{im Erscheinen}{im Erscheinen}},
+ inpress = {{im Druck}{im Druck}},
+ prepublished = {{Vorver\"offentlichung}{Vorver\"offentlichung}},
+ citedas = {{im folgenden zitiert als}{im folgenden zit\adddotspace als}},
+ thiscite = {{hier}{hier}},
+ seenote = {{siehe Anmerkung}{s.~Anm\adddot}},
+ quotedin = {{zitiert nach}{zit\adddotspace nach}},
+ idem = {{derselbe}{ders\adddot}},
+ idemsf = {{dieselbe}{dies\adddot}},
+ idemsm = {{derselbe}{ders\adddot}},
+ idemsn = {{dasselbe}{dass\adddot}},
+ idempf = {{dieselben}{dies\adddot}},
+ idempm = {{dieselben}{dies\adddot}},
+ idempn = {{dieselben}{dies\adddot}},
+ idempp = {{dieselben}{dies\adddot}},
+ ibidem = {{ebenda}{ebd\adddot}},
+ opcit = {{a.\,a.\,O\adddot}{a.\,a.\,O\adddot}},
+ loccit = {{a.\,a.\,O\adddot}{a.\,a.\,O\adddot}},
+ confer = {{vgl\adddot}{vgl\adddot}},
+ sequens = {{f\adddot}{f\adddot}},
+ sequentes = {{ff\adddot}{ff\adddot}},
+ passim = {{passim}{pass\adddot}},
+ see = {{siehe}{siehe}},
+ seealso = {{siehe auch}{s.~auch}},
+ backrefpage = {{siehe Seite}{siehe S\adddot}},
+ backrefpages = {{siehe Seiten}{siehe S\adddot}},
+ january = {{Januar}{Jan\adddot}},
+ february = {{Februar}{Feb\adddot}},
+ march = {{M\"arz}{M\"arz}},
+ april = {{April}{Apr\adddot}},
+ may = {{Mai}{Mai}},
+ june = {{Juni}{Juni}},
+ july = {{Juli}{Juli}},
+ august = {{August}{Aug\adddot}},
+ september = {{September}{Sep\adddot}},
+ october = {{Oktober}{Okt\adddot}},
+ november = {{November}{Nov\adddot}},
+ december = {{Dezember}{Dez\adddot}},
+ langamerican = {{Amerikanisch}{Amerikanisch}},
+ langbasque = {{Baskisch}{Baskisch}},
+ langbrazilian = {{Brasilianisch}{Brasilianisch}},
+ langbulgarian = {{Bulgarisch}{Bulgarisch}},
+ langcatalan = {{Katalanisch}{Katalanisch}},
+ langcroatian = {{Kroatisch}{Kroatisch}},
+ langczech = {{Tschechisch}{Tschechisch}},
+ langdanish = {{D\"anisch}{D\"anisch}},
+ langdutch = {{Niederl\"andisch}{Niederl\"andisch}},
+ langenglish = {{Englisch}{Englisch}},
+ langestonian = {{Estnisch}{Estnisch}},
+ langfinnish = {{Finnisch}{Finnisch}},
+ langfrench = {{Franz\"osisch}{Franz\"osisch}},
+ langgalician = {{Galicisch}{Galicisch}},
+ langgerman = {{Deutsch}{Deutsch}},
+ langgreek = {{Griechisch}{Griechisch}},
+ langhungarian = {{Ungarisch}{Ungarisch}},
+ langitalian = {{Italienisch}{Italienisch}},
+ langjapanese = {{Japanisch}{Japanisch}},
+ langlatin = {{Lateinisch}{Lateinisch}},
+ langlatvian = {{Lettisch}{Lettisch}},
+ langlithuanian = {{Litauisch}{Litauisch}},
+ langnorwegian = {{Norwegisch}{Norwegisch}},
+ langpolish = {{Polnisch}{Polnisch}},
+ langportuguese = {{Portugiesisch}{Portugiesisch}},
+ langromanian = {{Rum\"anisch}{Rum\"anisch}},
+ langrussian = {{Russisch}{Russisch}},
+ langserbian = {{Serbisch}{Serbisch}},
+ langslovak = {{Slowakisch}{Slowakisch}},
+ langslovene = {{Slowenisch}{Slowenisch}},
+ langspanish = {{Spanisch}{Spanisch}},
+ langswedish = {{Schwedisch}{Schwedisch}},
+ langturkish = {{T\"urkisch}{T\"urkisch}},
+ langukrainian = {{Ukrainisch}{Ukrainisch}},
+ fromamerican = {{aus dem Amerikanischen}{aus dem Amerikanischen}},
+ frombasque = {{aus dem Baskischen}{aus dem Baskischen}},
+ frombrazilian = {{aus dem Brasilianischen}{aus dem Brasilianischen}},
+ frombulgarian = {{aus dem Bulgarischen}{aus dem Bulgarischen}},
+ fromcatalan = {{aus dem Katalanischen}{aus dem Katalanischen}},
+ fromcroatian = {{aus dem Kroatischen}{aus dem Kroatischen}},
+ fromczech = {{aus dem Tschechischen}{aus dem Tschechischen}},
+ fromdanish = {{aus dem D\"anischen}{aus dem D\"anischen}},
+ fromdutch = {{aus dem Niederl\"andischen}{aus dem Niederl\"andischen}},
+ fromenglish = {{aus dem Englischen}{aus dem Englischen}},
+ fromestonian = {{aus dem Estnischen}{aus dem Estnischen}},
+ fromfinnish = {{aus dem Finnischen}{aus dem Finnischen}},
+ fromfrench = {{aus dem Franz\"osischen}{aus dem Franz\"osischen}},
+ fromgalician = {{aus dem Galicischen}{aus dem Galicischen}},
+ fromgerman = {{aus dem Deutschen}{aus dem Deutschen}},
+ fromgreek = {{aus dem Griechischen}{aus dem Griechischen}},
+ fromhungarian = {{aus dem Ungarischen}{aus dem Ungarischen}},
+ fromitalian = {{aus dem Italienischen}{aus dem Italienischen}},
+ fromjapanese = {{aus dem Japanischen}{aus dem Japanischen}},
+ fromlatin = {{aus dem Lateinischen}{aus dem Lateinischen}},
+ fromlatvian = {{aus dem Lettischen}{aus dem Lettischen}},
+ fromlithuanian = {{aus dem Litauischen}{aus dem Litauischen}},
+ fromnorwegian = {{aus dem Norwegischen}{aus dem Norwegischen}},
+ frompolish = {{aus dem Polnischen}{aus dem Polnischen}},
+ fromportuguese = {{aus dem Portugiesischen}{aus dem Portugiesischen}},
+ fromromanian = {{aus dem Rum\"anischen}{aus dem Rum\"anischen}},
+ fromrussian = {{aus dem Russischen}{aus dem Russischen}},
+ fromserbian = {{aus dem Serbian}{aus dem Serbian}},
+ fromslovak = {{aus dem Slowakischen}{aus dem Slowakischen}},
+ fromslovene = {{aus dem Slowenischen}{aus dem Slowenischen}},
+ fromspanish = {{aus dem Spanischen}{aus dem Spanischen}},
+ fromswedish = {{aus dem Schwedischen}{aus dem Schwedischen}},
+ fromturkish = {{aus dem T\"urkischen}{T\"urkischen}},
+ fromukrainian = {{aus dem Ukrainischen}{aus dem Ukrainischen}},
+ countryde = {{Deutschland}{DE}},
+ countryep = {{Europ\"aische Union}{EP}},
+ countryeu = {{Europ\"aische Union}{EU}},
+ countryfr = {{Frankreich}{FR}},
+ countryuk = {{Gro\ss britannien}{GB}},
+ countryus = {{USA}{US}},
+ patent = {{Patent}{Pat\adddot}},
+ patentde = {{deutsches Patent}{dt\adddotspace Pat\adddot}},
+ patenteu = {{europ\"aisches Patent}{europ\adddotspace Pat\adddot}},
+ patentfr = {{franz\"osisches Patent}{frz\adddotspace Pat\adddot}},
+ patentuk = {{britisches Patent}{brit\adddotspace Pat\adddot}},
+ patentus = {{US-Patent}{US-Pat\adddot}},
+ patreq = {{Patentanmeldung}{Patentanmeld\adddot}},
+ patreqde = {{deutsche Patentanmeldung}{dt\adddotspace Patentanmeld\adddot}},
+ patreqeu = {{europ\"aische Patentanmeldung}{europ\adddotspace Patentanmeld\adddot}},
+ patreqfr = {{franz\"osische Patentanmeldung}{frz\adddotspace Patentanmeld\adddot}},
+ patrequk = {{britische Patentanmeldung}{brit\adddotspace Patentanmeld\adddot}},
+ patrequs = {{US-Patentanmeldung}{US-Patentanmeld\adddot}},
+ file = {{Datei}{Datei}},
+ library = {{Bibliothek}{Bibliothek}},
+ abstract = {{Zusammenfassung}{Zusammenfassung}},
+ annotation = {{Anmerkungen}{Anmerkungen}},
+ commonera = {{u.\,Z\adddot}{u.\,Z\adddot}},
+ beforecommonera = {{v.\,u.\,Z\adddot}{v.\,u.\,Z\adddot}},
+ annodomini = {{n.\,Chr\adddot}{n.\,Chr\adddot}},
+ beforechrist = {{v.\,Chr\adddot}{v.\,Chr\adddot}},
+ circa = {{circa}{ca\adddot}},
+ spring = {{Fr\"uhling}{Frühling}},
+ summer = {{Sommer}{Sommer}},
+ autumn = {{Herbst}{Herbst}},
+ winter = {{Winter}{Winter}},
+% springN = {{}{}},% FIXME: missing
+% summerN = {{}{}},% FIXME: missing
+% autumnN = {{}{}},% FIXME: missing
+% winterN = {{}{}},% FIXME: missing
+% springS = {{}{}},% FIXME: missing
+% summerS = {{}{}},% FIXME: missing
+% autumnS = {{}{}},% FIXME: missing
+% winterS = {{}{}},% FIXME: missing
+% Q1 = {{}{}},% FIXME: missing
+% Q2 = {{}{}},% FIXME: missing
+% Q3 = {{}{}},% FIXME: missing
+% Q4 = {{}{}},% FIXME: missing
+% QD1 = {{}{}},% FIXME: missing
+% QD2 = {{}{}},% FIXME: missing
+% QD3 = {{}{}},% FIXME: missing
+% S1 = {{}{}},% FIXME: missing
+% S2 = {{}{}},% FIXME: missing
+ am = {{vorm\adddot}{vorm\adddot}},
+ pm = {{nachm\adddot}{nachm\adddot}},
+}
+
+\DeclareHyphenationExceptions{%
+ Pa-tent-an-mel-dung
+ Pa-tent-an-meld
+}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/lbx/greek-ms.lbx b/macros/latex/contrib/biblatex-ms/latex/lbx/greek-ms.lbx
new file mode 100644
index 0000000000..5f614c0d8a
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/lbx/greek-ms.lbx
@@ -0,0 +1,613 @@
+\ProvidesFile{greek-ms.lbx}
+[\abx@lbxid]
+
+% Translator's notes:
+%
+% The translations should be OK but should also be tested against
+% enough real data. Especially:
+%
+% a) Abbreviations should be checked
+% b) Issues concerning grammatical gender have not been studied
+%
+% This file requires UTF-8 support!
+
+\lbx@ifutfinput
+ {}
+ {\PackageError{biblatex}
+ {Greek requires UTF-8 support}
+ {The file 'greek.lbx' requires UTF-8 encoding but you
+ seem\MessageBreak to be using a different encoding.
+ This is a fatal error. I will\MessageBreak abort loading
+ greek.lbx now.}%
+ \endinput}
+
+\NewBibliographyString{% Used only Greek for month checks
+ datejanuary,
+ datefebruary,
+ datemarch,
+ dateapril,
+ datemay,
+ datejune,
+ datejuly,
+ dateaugust,
+ dateseptember,
+ dateoctober,
+ datenovember,
+ datedecember%
+}
+
+\DeclareRedundantLanguages{greek}{greek}
+
+\DeclareBibliographyExtras{%
+ \DeclareCapitalPunctuation{.!;?}%
+ \let\finalandcomma=\empty
+ \protected\def\bibrangedash{%
+ \textendash\penalty\hyphenpenalty}% breakable dash
+ \let\finalandcomma=\empty
+ \let\finalandsemicolon=\empty
+ \protected\def\mkbibordinal{\mkbibmascord}%
+ \protected\def\mkbibmascord#1{\stripzeros{#1}ος}%
+ \protected\def\mkbibfemord#1{\stripzeros{#1}η}%
+ \protected\def\mkbibneutord{\mkbibmascord}%
+ \protected\def\mkbibdatelong#1#2#3{%
+ \iffieldundef{#3}
+ {}
+ {\stripzeros{\thefield{#3}}%
+ \iffieldundef{#2}{}{\nobreakspace}}%
+ \iffieldundef{#2}
+ {}
+ {\lbx@gr@mkbibmonth{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}}%
+ \iffieldbibstring{#1}
+ {\bibstring{\thefield{#1}}}
+ {\dateeraprintpre{#1}\stripzeros{\thefield{#1}}}}%
+ \protected\def\mkbibdateshort#1#2#3{%
+ \iffieldundef{#3}
+ {}
+ {\mkdayzeros{\thefield{#3}}%
+ \iffieldundef{#2}{}{/}}%
+ \iffieldundef{#2}
+ {}
+ {\mkmonthzeros{\thefield{#2}}%
+ \iffieldundef{#1}{}{/}}%
+ \iffieldbibstring{#1}
+ {\bibstring{\thefield{#1}}}
+ {\dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}}%
+ \savecommand\mkbibordedition
+ \savecommand\mkbibordseries
+ \def\mkbibordedition{\mkbibfemord}%
+ \def\mkbibordseries{\mkbibfemord}%
+ \expandafter\protected\expandafter\def\csname mkbibtime24h\endcsname#1#2#3#4{%
+ \iffieldundef{#1}
+ {}
+ {\mktimezeros{\thefield{#1}}%
+ \iffieldundef{#2}{}{\bibtimesep}}%
+ \iffieldundef{#2}
+ {}
+ {\mktimezeros{\thefield{#2}}%
+ \iffieldundef{#3}{}{\bibtimesep}}%
+ \iffieldundef{#3}
+ {}
+ {\mktimezeros{\thefield{#3}}}%
+ \iffieldundef{#4}{}
+ {\bibtimezonesep
+ \mkbibtimezone{\thefield{#4}}}}%
+ \expandafter\protected\expandafter\def\csname mkbibtime12h\endcsname#1#2#3#4{%
+ \stripzeros{\mktimehh{\thefield{#1}}}\bibtimesep
+ \forcezerosmdt{\thefield{#2}}%
+ \iffieldundef{#3}{}
+ {\bibtimesep
+ \forcezerosmdt{\thefield{#3}}}%
+ \space
+ \ifnumless{\thefield{#1}}{12}
+ {\bibstring{am}}
+ {\bibstring{pm}}%
+ \iffieldundef{#4}{}
+ {\space\bibtimezonesep
+ \parentext{\mkbibtimezone{\thefield{#4}}}}}%
+ \protected\def\mkbibyeardivisiondateshort#1#2{%
+ \mkbibyeardivision{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}%
+ \dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}%
+ \protected\def\mkbibyeardivisiondatelong#1#2{%
+ \mkbibyeardivision{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}%
+ \dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}%
+}
+
+\UndeclareBibliographyExtras{%
+ \restorecommand\mkbibordedition
+ \restorecommand\mkbibordseries
+}
+
+\DeclareBibliographyStrings{%
+ bibliography = {{Βιβλιογραφία}{Βιβλιογραφία}},
+ references = {{Αναφορές}{Αναφορές}},
+ shorthands = {{Κατάλογος συντμήσεων}{Συντμήσεις}},
+ editor = {{επιμελητής}{επιμελητής}},
+ editors = {{επιμελητές}{επιμελητές}},
+ compiler = {{συντάκτης}{συντάκτης}},
+ compilers = {{συντάκτες}{συντάκτες}},
+ redactor = {{συντάκτης}{συντάκτης}},
+ redactors = {{συντάκτες}{συντάκτες}},
+% reviser = {{}{}},% FIXME: missing
+% revisers = {{}{}},% FIXME: missing
+ founder = {{αρχικός δημιουργός}{αρχικός δημιουργός}},
+ founders = {{αρχικοί δημιουργοί}{αρχικοί δημιουργοί}},
+ continuator = {{συνεχιστής}{συνεχιστής}},
+ continuators = {{συνεχιστές}{συνεχιστές}},
+ collaborator = {{συνεργάτης}{συνεργάτης}},
+ collaborators = {{συνεργάτες}{συνεργάτες}},
+ translator = {{μεταφραστής}{μεταφραστής}},
+ translators = {{μεταφραστές}{μεταφραστές}},
+ commentator = {{υπομνηματιστής}{υπομνηματιστής}},% FIXME: unsure
+ commentators = {{υπομνηματιστές}{υπομνηματιστές}},% FIXME: unsure
+ annotator = {{υπομνηματιστής}{υπομνηματιστής}},
+ annotators = {{υπομνηματιστές}{υπομνηματιστές}},
+ commentary = {{ερμηνευτικές σημειώσεις}{ερμηνευτικές σημειώσεις}},
+ annotations = {{επισημείωση}{επισημείωση}},
+ introduction = {{εισαγωγή}{εισαγωγή}},
+ foreword = {{πρόλογος}{πρόλ\adddot}},
+ afterword = {{επίλογος}{επίλ\adddot}},
+ editortr = {{επιμελητή και μεταφραστής}
+ {επιμελητή και μτφρ\adddot}},
+ editorstr = {{επιμελητέ και μεταφραστές}
+ {επιμελητέ και μτφρ\adddot}},
+ editorco = {{επιμελητή και υπομνηματιστής}
+ {επιμελητή και υπομν\adddot}},
+ editorsco = {{επιμελητέ και υπομνηματιστής}
+ {επιμελητέ και υπομν\adddot}},
+ editoran = {{επιμελητή και υπομνηματιστής}
+ {επιμελητή και υπομν\adddot}},
+ editorsan = {{επιμελητέ και υπομνηματιστές}
+ {επιμελητέ και υπομν\adddot}},
+ editorin = {{επιμελητή και εισαγωγή}
+ {επιμελητή και εισαγ\adddot}},
+ editorsin = {{επιμελητέ και εισαγωγή}
+ {επιμελητέ και εισαγ\adddot}},
+ editorfo = {{επιμελητή και πρόλογος}
+ {επιμελητή και πρόλ\adddot}},
+ editorsfo = {{επιμελητέ και πρόλογος}
+ {επιμελητέ και πρόλ\adddot}},
+ editoraf = {{επιμελητή και επίλογος}
+ {επιμελητή και επίλ\adddot}},
+ editorsaf = {{επιμελητέ και επίλογος}
+ {επιμελητέ και επίλ\adddot}},
+ editortrco = {{επιμελητή, μεταφραστή και υπομνηματιστής}
+ {επιμελητή μτφρ\adddot\ και υπομν\adddot}},
+ editorstrco = {{επιμελητέ, μεταφραστέ και υπομνηματιστές}
+ {επιμελητέ, μτφρ\adddot\ και υπομν\adddot}},
+ editortran = {{επιμελητή, μεταφραστή και επισημειωτής}
+ {επιμελητή μτφρ\adddot\ και επισημ\adddot}},
+ editorstran = {{επιμελητέ, μεταφραστέ και επισημειωτές}
+ {επιμελητέ, μτφρ\adddot\ και επισημ\adddot}},
+ editortrin = {{επιμελητή, μεταφραστή και εισαγωγή}
+ {επιμελητή μτφρ\adddot\ και εισαγ\adddot}},
+ editorstrin = {{επιμελητέ, μεταφραστέ και εισαγωγή}
+ {επιμελητέ, μτφρ\adddot\ και εισαγ\adddot}},
+ editortrfo = {{επιμελητή, μεταφραστή και πρόλογος}
+ {επιμελητή μτφρ\adddot\ και πρόλ\adddot}},
+ editorstrfo = {{επιμελητέ, μεταφραστέ και πρόλογος}
+ {επιμελητέ, μτφρ\adddot\ και πρόλ\adddot}},
+ editortraf = {{επιμελητή, μεταφραστή και επίλογος}
+ {επιμελητή μτφρ\adddot\ και επίλ\adddot}},
+ editorstraf = {{επιμελητέ, μεταφραστέ και επίλογος}
+ {επιμελητέ, μτφρ\adddot\ και επίλ\adddot}},
+ editorcoin = {{επιμελητή, υπομνηματιστή και εισαγωγή}
+ {επιμελητή υπομν\adddot\ και εισαγ\adddot}},
+ editorscoin = {{επιμελητέ, υπομνηματιστέ και εισαγωγή}
+ {επιμελητέ, υπομν\adddot\ και εισαγ\adddot}},
+ editorcofo = {{επιμελητή, υπομνηματιστή και πρόλογος}
+ {επιμελητή υπομν\adddot\ και πρόλ\adddot}},
+ editorscofo = {{επιμελητέ, υπομνηματιστέ και πρόλογος}
+ {επιμελητέ, υπομν\adddot\ και πρόλ\adddot}},
+ editorcoaf = {{επιμελητή, υπομνηματιστή και επίλογος}
+ {επιμελητή υπομν\adddot\ και επίλ\adddot}},
+ editorscoaf = {{επιμελητέ, υπομνηματιστέ και επίλογος}
+ {επιμελητέ, υπομν\adddot\ και επίλ\adddot}},
+ editoranin = {{επιμελητή, επισημειωτή και εισαγωγή}
+ {επιμελητή επισημ\adddot\ και εισαγ\adddot}},
+ editorsanin = {{επιμελητέ, επισημειωτέ και εισαγωγή}
+ {επιμελητέ, επισημ\adddot\ και εισαγ\adddot}},
+ editoranfo = {{επιμελητή, επισημειωτή και πρόλογος}
+ {επιμελητή επισημ\adddot\ και πρόλ\adddot}},
+ editorsanfo = {{επιμελητέ, επισημειωτέ και πρόλογος}
+ {επιμελητέ, επισημ\adddot\ και πρόλ\adddot}},
+ editoranaf = {{επιμελητή, επισημειωτή και επίλογος}
+ {επιμελητή επισημ\adddot\ και επίλ\adddot}},
+ editorsanaf = {{επιμελητέ, επισημειωτέ και επίλογος}
+ {επιμελητέ, επισημ\adddot\ και επίλ\adddot}},
+ editortrcoin = {{επιμελητή, μεταφραστής, υπομνηματιστή και εισαγωγή}
+ {επιμελητή μτφρ., υπομν\adddot\ και εισαγ\adddot}},
+ editorstrcoin = {{επιμελητέ, μεταφραστές, υπομνηματιστέ και εισαγωγή}
+ {επιμελητέ, μτφρ., υπομν\adddot\ και εισαγ\adddot}},
+ editortrcofo = {{επιμελητή, μεταφραστής, υπομνηματιστή και πρόλογος}
+ {επιμελητή μτφρ., υπομν\adddot\ και πρόλ\adddot}},
+ editorstrcofo = {{επιμελητέ, μεταφραστές, υπομνηματιστέ και πρόλογος}
+ {επιμελητέ, μτφρ., υπομν\adddot\ και πρόλ\adddot}},
+ editortrcoaf = {{επιμελητή, μεταφραστής, υπομνηματιστή και επίλογος}
+ {επιμελητή μτφρ., υπομν\adddot\ και επίλ\adddot}},
+ editorstrcoaf = {{επιμελητέ, μεταφραστές, υπομνηματιστέ και επίλογος}
+ {επιμελητέ, μτφρ., υπομν\adddot\ και επίλ\adddot}},
+ editortranin = {{επιμελητή, μεταφραστής, επισημειωτή και εισαγωγή}
+ {επιμελητή μτφρ., επισημ\adddot\ και εισαγ\adddot}},
+ editorstranin = {{επιμελητέ, μεταφραστές, επισημειωτέ και εισαγωγή}
+ {επιμελητέ, μτφρ., επισημ\adddot\ και εισαγ\adddot}},
+ editortranfo = {{επιμελητή, μεταφραστής, επισημειωτή και πρόλογος}
+ {επιμελητή μτφρ., επισημ\adddot\ και πρόλ\adddot}},
+ editorstranfo = {{επιμελητέ, μεταφραστές, επισημειωτέ και πρόλογος}
+ {επιμελητέ, μτφρ., επισημ\adddot\ και πρόλ\adddot}},
+ editortranaf = {{επιμελητή, μεταφραστής, επισημειωτή και επίλογος}
+ {επιμελητή μτφρ., επισημ\adddot\ και επίλ\adddot}},
+ editorstranaf = {{επιμελητέ, μεταφραστές, επισημειωτέ και επίλογος}
+ {επιμελητέ, μτφρ., επισημ\adddot\ και επίλ\adddot}},
+ translatorco = {{μεταφραστής και υπομνηματιστής}
+ {μτφρ\adddot\ και υπομν\adddot}},
+ translatorsco = {{μεταφραστές και υπομνηματιστές}
+ {μτφρ\adddot\ και υπομν\adddot}},
+ translatoran = {{μεταφραστής και επισημειωτής}
+ {μτφρ\adddot\ και επισημ\adddot}},
+ translatorsan = {{μεταφραστές και επισημειωτές}
+ {μτφρ\adddot\ και επισημ\adddot}},
+ translatorin = {{μετάφραση και εισαγωγή}
+ {μτφρ\adddot\ και εισαγ\adddot}},
+ translatorsin = {{μετάφραση και εισαγωγή}
+ {μτφρ\adddot\ και εισαγ\adddot}},
+ translatorfo = {{μετάφραση και πρόλογος}
+ {μτφρ\adddot\ και πρόλ\adddot}},
+ translatorsfo = {{μετάφραση και πρόλογος}
+ {μτφρ\adddot\ και πρόλ\adddot}},
+ translatoraf = {{μετάφραση και επίλογος}
+ {μτφρ\adddot\ και επίλ\adddot}},
+ translatorsaf = {{μετάφραση και επίλογος}
+ {μτφρ\adddot\ και επίλ\adddot}},
+ translatorcoin = {{μετάφραση, υπομνηματισμό και εισαγωγή}
+ {μτφρ., υπομν\adddot\ και εισαγ\adddot}},
+ translatorscoin = {{μετάφραση, υπομνηματισμό και εισαγωγή}
+ {μτφρ., υπομν\adddot\ και εισαγ\adddot}},
+ translatorcofo = {{μετάφραση, υπομνηματισμό και πρόλογος}
+ {μτφρ., υπομν\adddot\ και πρόλ\adddot}},
+ translatorscofo = {{μετάφραση, υπομνηματισμό και πρόλογος}
+ {μτφρ., υπομν\adddot\ και πρόλ\adddot}},
+ translatorcoaf = {{μετάφραση, υπομνηματισμό και επίλογος}
+ {μτφρ., υπομν\adddot\ και επίλ\adddot}},
+ translatorscoaf = {{μετάφραση, υπομνηματισμό και επίλογος}
+ {μτφρ., υπομν\adddot\ και επίλ\adddot}},
+ translatoranin = {{μετάφραση, επισημείωση και εισαγωγή}
+ {μτφρ., επισημ\adddot\ και εισαγ\adddot}},
+ translatorsanin = {{μετάφραση, επισημείωση και εισαγωγή}
+ {μτφρ., επισημ\adddot\ και εισαγ\adddot}},
+ translatoranfo = {{μετάφραση, επισημείωση και πρόλογος}
+ {μτφρ., επισημ\adddot\ και πρόλ\adddot}},
+ translatorsanfo = {{μετάφραση, επισημείωση και πρόλογος}
+ {μτφρ., επισημ\adddot\ και πρόλ\adddot}},
+ translatoranaf = {{μετάφραση, επισημείωση και επίλογος}
+ {μτφρ., επισημ\adddot\ και επίλ\adddot}},
+ translatorsanaf = {{μετάφραση, επισημείωση και επίλογος}
+ {μτφρ., επισημ\adddot\ και επίλ\adddot}},
+% organizer = {{}{}},% FIXME: missing
+% organizers = {{}{}},% FIXME: missing
+% byorganizer = {{}{}},% FIXME: missing
+ byauthor = {{υπό}{υπό}},
+ byeditor = {{επιμέλεια υπό}{επιμέλεια υπό}},
+ bycompiler = {{σύνταξη υπό}{σύνταξη υπό}},
+ byredactor = {{σύνταξη υπό}{σύναταξη υπό}},
+% byreviser = {{}{}},% FIXME: missing
+% byreviewer = {{}{}},% FIXME: missing
+ byfounder = {{αρχική δημιουργία από}{αρχική δημιουργία από}},
+ bycontinuator = {{συνέχεια από}{συνέχεια από}},
+ bycollaborator = {{συνεργασία από}{συνεργασία από}},
+ bytranslator = {{μετάφραση \lbx@lfromlang\ υπό}{μετάφραση \lbx@sfromlang\ υπό}},
+ bycommentator = {{υπομνηματισμός υπό}{υπομνηματισμός υπό}},
+ byannotator = {{υπομνηματισμός υπό}{υπομνηματισμός υπό}},
+ withcommentator = {{υπομνηματισμός υπό}{υπομνηματισμός υπό}},
+ withannotator = {{υπομνηματισμός υπό}{υπομνηματισμός υπό}},
+ withintroduction = {{εισαγωγή υπό}{εισαγωγή υπό}},
+ withforeword = {{πρόλογος υπό}{πρόλογος υπό}},
+ withafterword = {{επίλογος υπό}{επίλογος υπό}},
+% byeditortr = {{}{}},% FIXME: missing
+% byeditorco = {{}{}},% FIXME: missing
+% byeditoran = {{}{}},% FIXME: missing
+% byeditorin = {{}{}},% FIXME: missing
+% byeditorfo = {{}{}},% FIXME: missing
+% byeditoraf = {{}{}},% FIXME: missing
+% byeditortrco = {{}{}},% FIXME: missing
+% byeditortran = {{}{}},% FIXME: missing
+% byeditortrin = {{}{}},% FIXME: missing
+% byeditortrfo = {{}{}},% FIXME: missing
+% byeditortraf = {{}{}},% FIXME: missing
+% byeditorcoin = {{}{}},% FIXME: missing
+% byeditorcofo = {{}{}},% FIXME: missing
+% byeditorcoaf = {{}{}},% FIXME: missing
+% byeditoranin = {{}{}},% FIXME: missing
+% byeditoranfo = {{}{}},% FIXME: missing
+% byeditoranaf = {{}{}},% FIXME: missing
+% byeditortrcoin = {{}{}},% FIXME: missing
+% byeditortrcofo = {{}{}},% FIXME: missing
+% byeditortrcoaf = {{}{}},% FIXME: missing
+% byeditortranin = {{}{}},% FIXME: missing
+% byeditortranfo = {{}{}},% FIXME: missing
+% byeditortranaf = {{}{}},% FIXME: missing
+% bytranslatorco = {{}{}},% FIXME: missing
+% bytranslatoran = {{}{}},% FIXME: missing
+% bytranslatorin = {{}{}},% FIXME: missing
+% bytranslatorfo = {{}{}},% FIXME: missing
+% bytranslatoraf = {{}{}},% FIXME: missing
+% bytranslatorcoin = {{}{}},% FIXME: missing
+% bytranslatorcofo = {{}{}},% FIXME: missing
+% bytranslatorcoaf = {{}{}},% FIXME: missing
+% bytranslatoranin = {{}{}},% FIXME: missing
+% bytranslatoranfo = {{}{}},% FIXME: missing
+% bytranslatoranaf = {{}{}},% FIXME: missing
+ and = {{και}{και}},
+ andothers = {{κ.ά\adddot}{κ.ά\adddot}},
+ andmore = {{κ.ά\adddot}{κ.ά\adddot}},
+ volume = {{τόμος}{τόμ\adddot}},
+ volumes = {{τόμοι}{τόμοι}},
+ involumes = {{σε}{σε}},% FIXME: check
+ jourvol = {{τόμος}{τόμ\adddot}},
+ jourser = {{σειρά}{σειρά}},
+% book = {{}{}},% FIXME: missing
+% part = {{}{}},% FIXME: missing
+% issue = {{}{}},% FIXME: missing
+ newseries = {{νέα σειρά}{νέα σειρά}},
+ oldseries = {{παλαιά σειρά}{παλαιά σειρά}},
+ edition = {{έκδοση}{έκδοση}},
+ reprint = {{ανατύπωση}{ανατύπωση}},
+ reprintof = {{ανατύπωση του}{ανατύπωση του}},
+ reprintas = {{ανατύπωση ως}{ανατύπωση ως}},
+% reprintfrom = {{}{}},% FIXME: missing
+% translationof = {{}{}},% FIXME: missing
+% translationas = {{}{}},% FIXME: missing
+% translationfrom = {{}{}},% FIXME: missing
+% reviewof = {{}{}},% FIXME: missing
+% origpubas = {{}{}},% FIXME: missing
+% origpubin = {{}{}},% FIXME: missing
+% astitle = {{}{}},% FIXME: missing
+ bypublisher = {{υπό}{υπό}},% FIXME: check
+ page = {{σελίδα}{σ\adddot}},
+ pages = {{σελίδες}{σσ\adddot}},
+ column = {{στήλη}{στ\adddot}},
+ columns = {{στήλες}{στήλες}},
+ line = {{γραμμή}{γραμ\adddot}},
+ lines = {{γραμμές}{γραμμές}},
+ nodate = {{χωρίς\space ημερομηνία}{{}χ\adddot η\adddot}},
+ verse = {{στίχος}{στίχ\adddot}},
+ verses = {{στίχοι}{στίχοι}},
+ section = {{ενότητα}{εντότητα}},
+ sections = {{ενότητες}{ενότητες}},
+ paragraph = {{παράγραφος}{§}},
+ paragraphs = {{παράγραφοι}{§§}},
+% pagetotal = {{}{}},% FIXME: missing
+% pagetotals = {{}{}},% FIXME: missing
+% columntotal = {{}{}},% FIXME: missing
+% columntotals = {{}{}},% FIXME: missing
+% linetotal = {{}{}},% FIXME: missing
+% linetotals = {{}{}},% FIXME: missing
+% versetotal = {{}{}},% FIXME: missing
+% versetotals = {{}{}},% FIXME: missing
+% sectiontotal = {{}{}},% FIXME: missing
+% sectiontotals = {{}{}},% FIXME: missing
+% paragraphtotal = {{}{}},% FIXME: missing
+% paragraphtotals = {{}{}},% FIXME: missing
+ in = {{στο}{στο}},
+ inseries = {{στη}{στη}},
+ ofseries = {{της}{της}},
+ number = {{αριθμός}{αρθμ\adddot}},
+ chapter = {{κεφάλαιο}{κεφ\adddot}},
+% bathesis = {{}{}},% FIXME: missing
+ mathesis = {{Μεταπτυχιακή διπλωματική εργασία}
+ {Μεταπτ/κή διπλ\adddot\ εργασ\adddot}},
+ phdthesis = {{Διδακτορική διατριβή}
+ {Διδακτορική διατρ\adddot}},
+% candthesis = {{}{}},% FIXME: missing
+ resreport = {{αδημοσίευτη ερευνητική εργασία}
+ {αδημοσίευτη ερευνητική εργασία}},
+ techreport = {{αδημοσίευτη ερευνητική εργασία}
+ {αδημοσίευτη ερευνητική εργασία}},
+ software = {{λογισμικό Η/Υ}{λογισμικό Η/Υ}},
+ datacd = {{CD-ROM}{CD-ROM}},
+ audiocd = {{ακουστικό CD}{ακουστικό CD}},
+ version = {{έκδοση}{έκδ\adddot}},
+ url = {{διεύθυνση}{διεύθν\adddot}},
+% urlfrom = {{}{}},% FIXME: missing
+ urlseen = {{επίσκεψη}{επίσκεψη}},
+% inpreparation = {{}{}},% FIXME: missing
+ submitted = {{υποβληθέν}{υποβληθέν}},% FIXME: gender?
+% forthcoming = {{}{}},% FIXME: missing
+ inpress = {{υπό έκδοση}{υπό έκδ.}},
+% prepublished = {{}{}},% FIXME: missing
+ citedas = {{εφεξής θα αναφέρεται ως}{εφεξής θα αναφέρεται ως}},
+ thiscite = {{αυτή η αναφορά}{αυτή η αναφορά}},
+ seenote = {{βλέπε σημείωση}{βλ\adddot\ σημ\adddot}},
+ quotedin = {{αναφέρεται στο}{αναφέρεται στο}},
+ idem = {{του ίδιου}{του ίδιου}},
+ % FIXME: adapt gender
+ %
+ % sf=singular feminine
+ % sm=singular masculine
+ % sn=singular neuter
+ % pf=plural feminine
+ % pm=plural masculine
+ % pn=plural neuter
+ % pp=plural (group of mixed gender)
+ idemsf = {{του ίδιου}{του ίδιου}},% FIXME: gender?
+ idemsm = {{του ίδιου}{του ίδιου}},% FIXME: gender?
+ idemsn = {{του ίδιου}{του ίδιου}},% FIXME: gender?
+ idempf = {{του ίδιου}{του ίδιου}},% FIXME: gender?
+ idempm = {{του ίδιου}{του ίδιου}},% FIXME: gender?
+ idempn = {{του ίδιου}{του ίδιου}},% FIXME: gender?
+ idempp = {{του ίδιου}{του ίδιου}},% FIXME: gender?
+ ibidem = {{στο ίδιο}{στο ίδιο}},
+ opcit = {{όπου παραπάνω}{ό.π\adddot}},
+ loccit = {{όπου παραπάνω}{ό.π\adddot}},
+ confer = {{πρβλ\adddot}{πρβλ\adddot}},
+ sequens = {{κ.ε}{κ.ε\adddot}},
+ sequentes = {{κ.εξ\adddot}{κ.εξ\adddot}},
+ passim = {{σποράδην}{σποράδην}},
+ see = {{βλέπε}{βλ\adddot}},
+ seealso = {{βλέπε επίσης}{βλ\adddot\ επίσης}},
+% backrefpage = {{}{}},% FIXME: missing
+% backrefpages = {{}{}},% FIXME: missing
+ january = {{Ιανουάριος}{Ιαν\adddot}},
+ february = {{Φεβρουάριος}{Φεβ\adddot}},
+ march = {{Μάρτιος}{Μαρ\adddot}},
+ april = {{Αρίλιος}{Απρ\adddot}},
+ may = {{Μάιος}{Μάι\adddot}},
+ june = {{Ιούνιος}{Ιούν\adddot}},
+ july = {{Ιούλιος}{Ιούλ\adddot}},
+ august = {{Αύγουστος}{Αύγ\adddot}},
+ september = {{Σεπτέμβριος}{Σεπτ\adddot}},
+ october = {{Οκτώβριος}{Οκτ\adddot}},
+ november = {{Νοέμβριος}{Νοέ\adddot}},
+ december = {{Δεκέμβριος}{Δεκ\adddot}},
+ datejanuary = {{Ιανουαρίου}{Ιαν\adddot}},
+ datefebruary = {{Φεβρουαρίου}{Φεβ\adddot}},
+ datemarch = {{Μαρτίου}{Μαρ\adddot}},
+ dateapril = {{Απριλίου}{Απρ\adddot}},
+ datemay = {{Μαΐου}{Μάι\adddot}},
+ datejune = {{Ιουνίου}{Ιούν\adddot}},
+ datejuly = {{Ιουλίου}{Ιούλ\adddot}},
+ dateaugust = {{Αυγούστου}{Αύγ\adddot}},
+ dateseptember = {{Σεπτεμβρίου}{Σεπτ\adddot}},
+ dateoctober = {{Οκτωβρίου}{Οκτ\adddot}},
+ datenovember = {{Νοεμβρίου}{Νοέ\adddot}},
+ datedecember = {{Δεκεμβρίου}{Δεκ\adddot}},
+ langamerican = {{Αγγλικά}{Αγγλικά}},
+ langbrazilian = {{Βραζιλιάνικα}{Βραζιλιάνικα}},
+% langbulgarian = {{}{}},% FIXME: missing
+% langcatalan = {{}{}},% FIXME: missing
+% langcroatian = {{}{}},% FIXME: missing
+% langczech = {{}{}},% FIXME: missing
+ langdanish = {{Δανέζικα}{Δανέζικα}},
+ langdutch = {{Ολλανδικά}{Ολλανδικά}},
+ langenglish = {{Αγγλικά}{Αγγλικά}},
+% langestonian = {{}{}},% FIXME: missing
+% langfinnish = {{}{}},% FIXME: missing
+ langfrench = {{Γαλλικά}{Γαλλικά}},
+ langgalician = {{Γαλικιανή}{Γαλικιανή}},
+ langgerman = {{Γερμανικά}{Γερμανικά}},
+ langgreek = {{Ελληνικά}{Ελληνικά}},
+% langhungarian = {{}{}}, % FIXME: missing
+ langitalian = {{Ιταλικά}{Ιταλικά}},
+ langlatin = {{Λατινικά}{Λατινικά}},
+% langlatvian = {{}{}},% FIXME: missing
+ langnorwegian = {{Νορβηγικά}{Νορβηγικά}},
+% langpolish = {{}{}},% FIXME: missing
+ langportuguese = {{Πορτογαλικά}{Πορτογαλικά}},
+% langrussian = {{}{}},% FIXME: missing
+% langslovak = {{}{}},% FIXME: missing
+% langslovene = {{}{}},% FIXME: missing
+ langspanish = {{Ισπανικά}{Ισπανικά}},
+ langswedish = {{Σουηδικά}{Σουηδικά}},
+ fromamerican = {{από τα Αγγλικά}{από τα Αγγλικά}},
+ frombrazilian = {{από τα Βραζιλιάνικα}{από τα Βραζιλιάνικα}},
+% frombulgarian = {{}{}},% FIXME: missing
+% fromcatalan = {{}{}},% FIXME: missing
+% fromcroatian = {{}{}},% FIXME: missing
+% fromczech = {{}{}},% FIXME: missing
+ fromdanish = {{από τα Δανέζικα}{από τα Δανέζικα}},
+ fromdutch = {{από τα Ολλανδικά}{από τα Ολλανδικά}},
+ fromenglish = {{από τα Αγγλικά}{από τα Αγγλικά}},
+% fromestonian = {{}{}},% FIXME: missing
+% fromfinnish = {{}{}},% FIXME: missing
+ fromfrench = {{από τα Γαλλικά}{από τα Γαλλικά}},
+ fromgalician = {{από τα Γαλικιανή}{από τα Γαλικιανή}},
+ fromgerman = {{από τα Γερμανικά}{από τα Γερμανικά}},
+ fromgreek = {{από τα Ελληνικά}{από τα Ελληνικά}},
+% fromhungarian = {{}{}}, % FIXME: missing
+ fromitalian = {{από τα Ιταλικά}{από τα Ιταλικά}},
+ fromlatin = {{από τα Λατινικά}{από τα Λατινικά}},
+% fromlatvian = {{}{}},% FIXME: missing
+ fromnorwegian = {{από τα Νορβηγικά}{από τα Νορβηγικά}},
+% frompolish = {{}{}},% FIXME: missing
+ fromportuguese = {{από τα Πορτογαλικά}{από τα Πορτογαλικά}},
+% fromrussian = {{}{}},% FIXME: missing
+% fromslovak = {{}{}},% FIXME: missing
+% fromslovene = {{}{}},% FIXME: missing
+ fromspanish = {{από τα Ισπανικά}{από τα Ισπανικά}},
+ fromswedish = {{από τα Σουηδικά}{από τα Σουηδικά}},
+ countryde = {{Γερμανία}{DE}},
+ countryeu = {{Ευρωπαϊκή Ένωση}{ΕΕ}},
+ countryep = {{Ευρωπαϊκή Ένωση}{ΕΕ}},
+ countryfr = {{Γαλλία}{FR}},
+ countryuk = {{Μεγάλη Βρετανία}{GB}},
+ countryus = {{Ηνωμένες Πολιτείες της Αμερικής}{ΗΠΑ}},
+ patent = {{δίπλωμα ευρεσιτεχνίας}
+ {διπλ\adddot\ ευρεσ\adddot}},
+ patentde = {{γερμανικό δίπλωμα ευρεσιτεχνίας}
+ {γερμ\adddot\ διπλ\adddot\ ευρεσ\adddot}},
+ patenteu = {{ευρωπαϊκό δίπλωμα ευρεσιτεχνίας}
+ {ευρωπ\adddot\ διπλ\adddot\ ευρεσ\adddot}},
+ patentfr = {{γαλλικό δίπλωμα ευρεσιτεχνίας}
+ {γαλλ\adddot\ διπλ\adddot\ ευρεσ\adddot}},
+ patentuk = {{βρετανικό δίπλωμα ευρεσιτεχνίας}
+ {βρετ\adddot\ διπλ\adddot\ ευρεσ\adddot}},
+ patentus = {{αμερικανικό δίπλωμα ευρεσιτεχνίας}
+ {αμερ\adddot\ διπλ\adddot\ ευρεσ\adddot}},
+ patreq = {{αίτηση διπλώματος ευρεσιτεχνίας}
+ {αιτ\adddot\ διπλ\adddot\ ευρεσ\adddot}},
+ patreqde = {{αίτηση γερμανικού διπλώματος ευρεσιτεχνίας}
+ {αιτ\adddot\ γερμ\adddot\ διπλ\adddot\ ευρεσ\adddot}},
+ patreqeu = {{αίτηση ευρωπαϊκού διπλώματος ευρεσιτεχνίας}
+ {αιτ\adddot\ ευρωπ\adddot\ διπλ\adddot\ ευρεσ\adddot}},
+ patreqfr = {{αίτηση γαλλικού διπλώματος ευρεσιτεχνίας}
+ {αιτ\adddot\ γαλλ\adddot\ διπλ\adddot\ ευρεσ\adddot}},
+ patrequk = {{αίτηση βρετανικού διπλώματος ευρεσιτεχνίας}
+ {αιτ\adddot\ βρετ\adddot\ διπλ\adddot\ ευρεσ\adddot}},
+ patrequs = {{αίτηση αμερικανικού διπλώματος ευρεσιτεχνίας}
+ {αιτ\adddot\ αμερ\adddot\ διπλ\adddot\ ευρεσ\adddot}},
+ file = {{αρχείο}{αρχείο}},
+ library = {{βιβλιοθήκη}{βιβλιοθήκη}},
+ abstract = {{περίληψη}{περίληψη}},
+ annotation = {{σχολιασμοί}{σχολιασμοί}},
+ commonera = {{Κοινή Χρονολογία}{KX}},
+ beforecommonera = {{πριν από την Κοινή Χρονολογία}{π\adddot Κ\adddot Χ\adddot}},
+ annodomini = {{μετά Χριστόν}{μ\adddot Χ\adddot}},
+ beforechrist = {{προ Χριστού}{π\adddot Χ\adddot}},
+% circa = {{}{}},% FIXME: missing
+% spring = {{}{}},% FIXME: missing
+% summer = {{}{}},% FIXME: missing
+% autumn = {{}{}},% FIXME: missing
+% winter = {{}{}},% FIXME: missing
+% springN = {{}{}},% FIXME: missing
+% summerN = {{}{}},% FIXME: missing
+% autumnN = {{}{}},% FIXME: missing
+% winterN = {{}{}},% FIXME: missing
+% springS = {{}{}},% FIXME: missing
+% summerS = {{}{}},% FIXME: missing
+% autumnS = {{}{}},% FIXME: missing
+% winterS = {{}{}},% FIXME: missing
+% Q1 = {{}{}},% FIXME: missing
+% Q2 = {{}{}},% FIXME: missing
+% Q3 = {{}{}},% FIXME: missing
+% Q4 = {{}{}},% FIXME: missing
+% QD1 = {{}{}},% FIXME: missing
+% QD2 = {{}{}},% FIXME: missing
+% QD3 = {{}{}},% FIXME: missing
+% S1 = {{}{}},% FIXME: missing
+% S2 = {{}{}},% FIXME: missing
+ am = {{π\adddot μ\adddot}{π\adddot μ\adddot}},
+ pm = {{μ\adddot μ\adddot}{μ\adddot μ\adddot}},
+}
+
+\protected\gdef\lbx@gr@mkbibmonth#1{%
+ \ifcase0#1\relax
+ #1\BibliographyWarning{Month out of range}%
+ \or\abx@bibmonth{datejanuary}%
+ \or\abx@bibmonth{datefebruary}%
+ \or\abx@bibmonth{datemarch}%
+ \or\abx@bibmonth{dateapril}%
+ \or\abx@bibmonth{datemay}%
+ \or\abx@bibmonth{datejune}%
+ \or\abx@bibmonth{datejuly}%
+ \or\abx@bibmonth{dateaugust}%
+ \or\abx@bibmonth{dateseptember}%
+ \or\abx@bibmonth{dateoctober}%
+ \or\abx@bibmonth{datenovember}%
+ \or\abx@bibmonth{datedecember}%
+ \else
+ #1\BibliographyWarning{Month out of range}%
+ \fi}%
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/lbx/hungarian-ms.lbx b/macros/latex/contrib/biblatex-ms/latex/lbx/hungarian-ms.lbx
new file mode 100644
index 0000000000..8e2dbd8641
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/lbx/hungarian-ms.lbx
@@ -0,0 +1,7 @@
+\ProvidesFile{hungarian-ms.lbx}
+[\abx@lbxid]
+
+\InheritBibliographyExtras{magyar}
+\InheritBibliographyStrings{magyar}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/lbx/icelandic-ms.lbx b/macros/latex/contrib/biblatex-ms/latex/lbx/icelandic-ms.lbx
new file mode 100644
index 0000000000..c6fb180a5c
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/lbx/icelandic-ms.lbx
@@ -0,0 +1,505 @@
+\ProvidesFile{icelandic-ms.lbx}
+[\abx@lbxid]
+
+% Translator's notes:
+% - Translated by a native speaker (Baldur Kristinsson).
+% - Many bibstrings remain untranslated.
+% - Needs fine tuning, since grammatical peculiarities of Icelandic
+% make straight translations difficult.
+
+\DeclareRedundantLanguages{icelandic}{icelandic}
+
+% The beginning of this is the same as for Danish, since conventions are similar
+\DeclareBibliographyExtras{%
+ \protected\def\bibrangedash{%
+ \textendash\penalty\hyphenpenalty}% breakable dash
+ \let\finalandcomma=\empty
+ \let\finalandsemicolon=\empty
+ \protected\def\mkbibordinal#1{\stripzeros{#1}\adddot}%
+ \protected\def\mkbibmascord{\mkbibordinal}%
+ \protected\def\mkbibfemord{\mkbibordinal}%
+ \protected\def\mkbibneutord{\mkbibordinal}%
+ \protected\def\mkbibdatelong#1#2#3{%
+ \iffieldundef{#3}
+ {}
+ {\mkbibordinal{\thefield{#3}}%
+ \iffieldundef{#2}{}{\nobreakspace}}%
+ \iffieldundef{#2}
+ {}
+ {\mkbibmonth{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}}%
+ \iffieldbibstring{#1}
+ {\bibstring{\thefield{#1}}}
+ {\dateeraprintpre{#1}\stripzeros{\thefield{#1}}}}%
+ \protected\def\mkbibdateshort#1#2#3{%
+ \iffieldundef{#3}
+ {}
+ {\mkdayzeros{\thefield{#3}}\adddot}%
+ \iffieldundef{#2}
+ {}
+ {\mkmonthzeros{\thefield{#2}}%
+ \iffieldundef{#1}{}{\adddot}}%
+ \iffieldbibstring{#1}
+ {\bibstring{\thefield{#1}}}
+ {\dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}}%
+ % Later, it would be more elegant to reverse the order of the name and the localized
+ % bibstrings, in order to avoid problems with regard to declension. This has to be done
+ % in a coordinated manner, however, and a lot of macros would have to be redefined
+ % at the same time. The below, inactive code shows the general idea.
+ %
+ % \savebibmacro{bytranslator}%
+ %\renewbibmacro{bytranslator}{%
+ % \ifnameundef{translator}
+ % {}
+ % {\printnames[bytranslator]{translator}%
+ % \setunit{\addspace}%
+ % \bibstring{bytranslator}%
+ % }}%
+ \expandafter\protected\expandafter\def\csname mkbibtime24h\endcsname#1#2#3#4{%
+ \iffieldundef{#1}
+ {}
+ {\mktimezeros{\thefield{#1}}%
+ \iffieldundef{#2}{}{\bibtimesep}}%
+ \iffieldundef{#2}
+ {}
+ {\mktimezeros{\thefield{#2}}%
+ \iffieldundef{#3}{}{\bibtimesep}}%
+ \iffieldundef{#3}
+ {}
+ {\mktimezeros{\thefield{#3}}}%
+ \iffieldundef{#4}{}
+ {\bibtimezonesep
+ \mkbibtimezone{\thefield{#4}}}}%
+ \expandafter\protected\expandafter\def\csname mkbibtime12h\endcsname#1#2#3#4{%
+ \stripzeros{\mktimehh{\thefield{#1}}}\bibtimesep
+ \forcezerosmdt{\thefield{#2}}%
+ \iffieldundef{#3}{}
+ {\bibtimesep
+ \forcezerosmdt{\thefield{#3}}}%
+ \space
+ \ifnumless{\thefield{#1}}{12}
+ {\bibstring{am}}
+ {\bibstring{pm}}%
+ \iffieldundef{#4}{}
+ {\space\bibtimezonesep
+ \parentext{\mkbibtimezone{\thefield{#4}}}}}%
+ \protected\def\mkbibyeardivisiondateshort#1#2{%
+ \mkbibyeardivision{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}%
+ \dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}%
+ \protected\def\mkbibyeardivisiondatelong#1#2{%
+ \mkbibyeardivision{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}%
+ \dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}%
+}
+
+%\UndeclareBibliographyExtras{%
+% \restorebibmacro{bytranslator}
+%}
+
+\DeclareBibliographyStrings{%
+ bibliography = {{Heimildaskr\'a}{Heimildaskr\'a}},
+ references = {{Heimildir}{Heimildir}},
+ shorthands = {{Listi yfir skammstafanir}{Skammstafanir}},
+ editor = {{ristj\'ori}{ritstj\adddot}},
+ editors = {{ritstj\'orar}{ritstj\adddot}},
+ compiler = {{samantekt}{samantekt}},
+ compilers = {{samantekt}{samantekt}},
+% FIXME: redactor and editor are the same string;
+% is that acceptable?
+ redactor = {{ritstj\'ori}{ritstj\adddot}},
+ redactors = {{ritstj\'orar}{ritstj\adddot}},
+ reviser = {{\'utg\'afuendursko\dh{}andi}{endursk\adddot}},
+ revisers = {{\'utg\'afuendursko\dh{}endur}{endursk\adddot}},
+% founder = {{}{}},% FIXME: missing
+% founders = {{}{}},% FIXME: missing
+% continuator = {{}{}},% FIXME: missing
+% continuators = {{}{}},% FIXME: missing
+% collaborator = {{}{}},% FIXME: missing
+% collaborators = {{}{}},% FIXME: missing
+% FIXME: A great deal of conflation here, as well as simplifications in order
+% to avoid problems associated with declension:
+ translator = {{\th\'y\dh{}andi}{\th\'y\dh\adddot}},
+ translators = {{\th\'y\dh{}endur}{\th\'y\dh\adddot}},
+ commentator = {{sk\'yrandi}{sk\'yr\adddot}},
+ commentators = {{sk\'yrendur}{sk\'yr\adddot}},
+ annotator = {{\'utsk\'yrandi}{\'utsk\'yr\adddot}},
+ annotators = {{\'utsk\'yrendur}{\'utsk\'yr\adddot}},
+ commentary = {{sk\'yringar}{sk\'yr\adddot}},
+ annotations = {{\'utsk\'yringar}{\'utsk\'yr\adddot}},
+ introduction = {{inngangur}{inng\adddot}},
+ foreword = {{form\'ali}{form\'ali}},
+ afterword = {{eftirm\'ali}{eftirm\'ali}},
+% editortr = {{}{}},% FIXME: missing
+% editorstr = {{}{}},% FIXME: missing
+% editorco = {{}{}},% FIXME: missing
+% editorsco = {{}{}},% FIXME: missing
+% editoran = {{}{}},% FIXME: missing
+% editorsan = {{}{}},% FIXME: missing
+% editorin = {{}{}},% FIXME: missing
+% editorsin = {{}{}},% FIXME: missing
+% editorfo = {{}{}},% FIXME: missing
+% editorsfo = {{}{}},% FIXME: missing
+% editoraf = {{}{}},% FIXME: missing
+% editorsaf = {{}{}},% FIXME: missing
+% editortrco = {{}{}},% FIXME: missing
+% editorstrco = {{}{}},% FIXME: missing
+% editortran = {{}{}},% FIXME: missing
+% editorstran = {{}{}},% FIXME: missing
+% editortrin = {{}{}},% FIXME: missing
+% editorstrin = {{}{}},% FIXME: missing
+% editortrfo = {{}{}},% FIXME: missing
+% editorstrfo = {{}{}},% FIXME: missing
+% editortraf = {{}{}},% FIXME: missing
+% editorstraf = {{}{}},% FIXME: missing
+% editorcoin = {{}{}},% FIXME: missing
+% editorscoin = {{}{}},% FIXME: missing
+% editorcofo = {{}{}},% FIXME: missing
+% editorscofo = {{}{}},% FIXME: missing
+% editorcoaf = {{}{}},% FIXME: missing
+% editorscoaf = {{}{}},% FIXME: missing
+% editoranin = {{}{}},% FIXME: missing
+% editorsanin = {{}{}},% FIXME: missing
+% editoranfo = {{}{}},% FIXME: missing
+% editorsanfo = {{}{}},% FIXME: missing
+% editoranaf = {{}{}},% FIXME: missing
+% editorsanaf = {{}{}},% FIXME: missing
+% editortrcoin = {{}{}},% FIXME: missing
+% editorstrcoin = {{}{}},% FIXME: missing
+% editortrcofo = {{}{}},% FIXME: missing
+% editorstrcofo = {{}{}},% FIXME: missing
+% editortrcoaf = {{}{}},% FIXME: missing
+% editorstrcoaf = {{}{}},% FIXME: missing
+% editortranin = {{}{}},% FIXME: missing
+% editorstranin = {{}{}},% FIXME: missing
+% editortranfo = {{}{}},% FIXME: missing
+% editorstranfo = {{}{}},% FIXME: missing
+% editortranaf = {{}{}},% FIXME: missing
+% editorstranaf = {{}{}},% FIXME: missing
+% translatorco = {{}{}},% FIXME: missing
+% translatorsco = {{}{}},% FIXME: missing
+% translatoran = {{}{}},% FIXME: missing
+% translatorsan = {{}{}},% FIXME: missing
+% translatorin = {{}{}},% FIXME: missing
+% translatorsin = {{}{}},% FIXME: missing
+% translatorfo = {{}{}},% FIXME: missing
+% translatorsfo = {{}{}},% FIXME: missing
+% translatoraf = {{}{}},% FIXME: missing
+% translatorsaf = {{}{}},% FIXME: missing
+% translatorcoin = {{}{}},% FIXME: missing
+% translatorscoin = {{}{}},% FIXME: missing
+% translatorcofo = {{}{}},% FIXME: missing
+% translatorscofo = {{}{}},% FIXME: missing
+% translatorcoaf = {{}{}},% FIXME: missing
+% translatorscoaf = {{}{}},% FIXME: missing
+% translatoranin = {{}{}},% FIXME: missing
+% translatorsanin = {{}{}},% FIXME: missing
+% translatoranfo = {{}{}},% FIXME: missing
+% translatorsanfo = {{}{}},% FIXME: missing
+% translatoranaf = {{}{}},% FIXME: missing
+% translatorsanaf = {{}{}},% FIXME: missing
+% organizer = {{}{}},% FIXME: missing
+% organizers = {{}{}},% FIXME: missing
+% byorganizer = {{}{}},% FIXME: missing
+ byauthor = {{h\"ofundur}{h\"of\adddot}},
+ byeditor = {{gefi\dh{} \'ut af}{gefi\dh{} \'ut af}},
+ bycompiler = {{teki\dh{} saman af}{teki\dh{} saman af}},
+ byredactor = {{endursko\dh{}a\dh{} af}{endursk\adddot}},
+% byreviser = {{}{}},% FIXME: missing
+% byreviewer = {{}{}},% FIXME: missing
+% byfounder = {{}{}},% FIXME: missing
+% bycontinuator = {{}{}},% FIXME: missing
+% bycollaborator = {{}{}},% FIXME: missing
+% FIXME: For some of the keys below, the better way would be to postpend
+% rather than prepend the localized bibstrings. That would however require a
+% redefinition of many macros. Later, perhaps...
+ bytranslator = {{\th\'y\dh{}ing \lbx@lfromlang}{\th\'y\dh\adddot{} \lbx@sfromlang}},
+ bycommentator = {{sk\'yringar eftir}{sk\'yr\adddot}},
+ byannotator = {{\'utsk\'yringar eftir}{\'utsk\'yr\adddot}},
+ withcommentator = {{me\dh{} sk\'yringum eftir}{m\adddot sk\'yr\adddot e\adddot}},
+ withannotator = {{me\dh{} \'utsk\'yringum eftir}{m\adddot \'utsk\'yr\adddot e\adddot}},
+ withintroduction = {{me\dh{} inngangi eftir}{inng\adddot}},
+ withforeword = {{me\dh{} form\'ala eftir}{m\adddot form\adddot e\adddot}},
+ withafterword = {{me\dh{} eftirm\'ala eftir}{m\adddot eftirm\adddot e\adddot}},
+ byeditortr = {{\'utg\'afa og \th\'y\dh{}ing \lbx@lfromlang}%
+ {\'utg\adddot{} og \th\'y\dh\adddot}},
+ byeditorco = {{\'utg\'a fa og sk\'yringar eftir}%
+ {\'utg\adddot{} og sk\'yr\adddot}},
+ byeditoran = {{\'utg\'a fa og \'utsk\'yringar eftir}%
+ {\'utg\adddot{} og \'utsk\'yr\adddot}},
+ byeditorin = {{\'utg\'afa og inngangur eftir}%
+ {\'utg\adddot{} og inng\adddot}},
+ byeditorfo = {{\'utg\'afa og form\'ali eftir}%
+ {\'utg\adddot{} og form\adddot e\adddot}},
+ byeditoraf = {{\'utg\'afa og eftirm\'ali eftir}%
+ {\'utg\adddot{} og eftirm\adddot e\adddot}},
+ byeditortrco = {{\'utg\'afa \th\'y\dh{}ing \lbx@sfromlang\ og sk\'yringar eftir}%
+ {\'utg\adddot, \th\'y\dh\adddot{} \lbx@sfromlang\ og sk\'yr\adddot}},
+ byeditortran = {{\'utg\'afa \th\'y\dh{}ing \lbx@sfromlang\ og \'utsk\'yringar eftir}%
+ {\'utg\adddot, \th\'y\dh\adddot{} \lbx@sfromlang\ og \'utsk\'yr\adddot}},
+ byeditortrin = {{\'utg\'afa \th\'y\dh{}ing \lbx@sfromlang\ og inngangur eftir}%
+ {\'utg\adddot, \th\'y\dh\adddot{} \lbx@sfromlang\ og inng\adddot}},
+ byeditortrfo = {{\'utg\'afa \th\'y\dh{}ing \lbx@sfromlang\ og form\'ali eftir}%
+ {\'utg\adddot, \th\'y\dh\adddot{} \lbx@sfromlang\ og form\adddot}},
+ byeditortraf = {{\'utg\'afa \th\'y\dh{}ing \lbx@sfromlang\ og eftirm\'ali eftir}%
+ {\'utg\adddot, \th\'y\dh\adddot{} \lbx@sfromlang\ og eftirm\adddot}},
+ byeditorcoin = {{\'utg\'afa, sk\'yringar og inngangur eftir}%
+ {\'utg\adddot, sk\'yr\adddot{} og inng\adddot}},
+ byeditorcofo = {{\'utg\'afa, sk\'yringar og form\'ali eftir}%
+ {\'utg\adddot, sk\'yr\adddot{} og form\adddot}},
+ byeditorcoaf = {{\'utg\'afa, sk\'yringar og eftirm\'ali eftir}%
+ {\'utg\adddot, sk\'yr\adddot{} og eftirm\adddot}},
+ byeditoranin = {{\'utg\'afa, \'utsk\'yringar og inngangur eftir}%
+ {\'utg\adddot, \'utsk\'yr\adddot{} og inng\adddot}},
+ byeditoranfo = {{\'utg\'afa, \'utsk\'yringar og form\'ali eftir}%
+ {\'utg\adddot, \'utsk\'yr\adddot{} og form\adddot}},
+ byeditoranaf = {{\'utg\'afa, sk\'yringar og eftirm\'ali eftir}%
+ {\'utg\adddot, sk\'yr\adddot{} og eftirm\adddot}},
+ byeditortrcoin = {{\'utg\'afa, \th\'y\dh{}ing \lbx@sfromlang, sk\'yringar og inngangur eftir}%
+ {\'utg\adddot, \th\'y\dh\adddot{} \lbx@sfromlang, sk\'yr\adddot{} og inng\adddot}},
+ byeditortrcofo = {{\'utg\'afa, \th\'y\dh{}ing \lbx@sfromlang, sk\'yringar og form\'ali eftir}%
+ {\'utg\adddot, \th\'y\dh\adddot{} \lbx@sfromlang, sk\'yr\adddot{} og form\adddot}},
+ byeditortrcoaf = {{\'utg\'afa, \th\'y\dh{}ing \lbx@sfromlang, sk\'yringar og eftirm\'ali eftir}%
+ {\'utg\adddot, \th\'y\dh\adddot{} \lbx@sfromlang, sk\'yr\adddot{} og eftirm\adddot}},
+ byeditortranin = {{\'utg\'afa, \th\'y\dh{}ing \lbx@sfromlang, \'utsk\'yringar og inngangur eftir}%
+ {\'utg\adddot, \th\'y\dh\adddot{} \lbx@sfromlang, \'utsk\'yr\adddot{} og inng\adddot}},
+ byeditortranfo = {{\'utg\'afa, \th\'y\dh{}ing \lbx@sfromlang, \'utsk\'yringar og form\'ali eftir}%
+ {\'utg\adddot, \th\'y\dh\adddot{} \lbx@sfromlang, \'utsk\'yr\adddot{} og form\adddot}},
+ byeditortranaf = {{\'utg\'afa, \th\'y\dh{}ing \lbx@sfromlang, \'utsk\'yringar og eftirm\'ali eftir}%
+ {\'utg\adddot, \th\'y\dh\adddot{} \lbx@sfromlang, \'utsk\'yr\adddot{} og eftirm\adddot}},
+ bytranslatorco = {{\th\'y\dh{}ing \lbx@lfromlang\ og sk\'yringar eftir}%
+ {\th\'y\dh\adddot{} \lbx@lfromlang\ og sk\'yr\adddot}},
+ bytranslatoran = {{\th\'y\dh{}ing \lbx@lfromlang\ og \'utsk\'yringar eftir}%
+ {\th\'y\dh\adddot{} \lbx@lfromlang\ og \'utsk\'yr\adddot}},
+ bytranslatorin = {{\th\'y\dh{}ing \lbx@lfromlang\ og inngangur eftir}%
+ {\th\'y\dh\adddot{} \lbx@lfromlang\ og inng\adddot}},
+ bytranslatorfo = {{\th\'y\dh{}ing \lbx@lfromlang\ og form\'ali eftir}%
+ {\th\'y\dh\adddot{} \lbx@lfromlang\ og form\adddot}},
+ bytranslatoraf = {{\th\'y\dh{}ing \lbx@lfromlang\ og eftirm\'ali eftir}%
+ {\th\'y\dh\adddot{} \lbx@lfromlang\ og eftirm\adddot}},
+ bytranslatorcoin = {{\th\'y\dh{}ing \lbx@lfromlang, sk\'yringar og inngangur eftir}%
+ {\th\'y\dh\adddot{} \lbx@lfromlang, sk\'yr\adddot{} og inng\adddot}},
+ bytranslatorcofo = {{\th\'y\dh{}ing \lbx@lfromlang, sk\'yringar og form\'ali eftir}%
+ {\th\'y\dh\adddot{} \lbx@lfromlang, sk\'yr\adddot{} og form\adddot}},
+ bytranslatorcoaf = {{\th\'y\dh{}ing \lbx@lfromlang, sk\'yringar og eftirm\'ali eftir}%
+ {\th\'y\dh\adddot{} \lbx@lfromlang, sk\'yr\adddot{} og eftirm\adddot}},
+ bytranslatoranin = {{\th\'y\dh{}ing \lbx@lfromlang, \'utsk\'yringar og inngangur eftir}%
+ {\th\'y\dh\adddot{} \lbx@lfromlang, \'utsk\'yr\adddot{} og inng\adddot}},
+ bytranslatoranfo = {{\th\'y\dh{}ing \lbx@lfromlang, \'utsk\'yringar og form\'ali eftir}%
+ {\th\'y\dh\adddot{} \lbx@lfromlang, \'utsk\'yringar og form\adddot}},
+ bytranslatoranaf = {{\th\'y\dh{}ing \lbx@lfromlang, \'utsk\'yringar og eftirm\'ali eftir}%
+ {\th\'y\dh\adddot{} \lbx@lfromlang, \'utsk\'yr\adddot{} og eftirm\adddot}},
+ and = {{og}{og}},
+ andothers = {{\'asamt fleirum}{o\adddot fl\adddot}},
+ andmore = {{og fleiri}{o\adddot fl\adddot}},
+ volume = {{bindi}{bd\adddot}},
+ volumes = {{bindi}{bd\adddot}},
+ involumes = {{\'{\i}}{\'{\i}}},
+ jourvol = {{\'argangur}{\'arg\adddot}},
+ jourser = {{r\"o\dh}{r\"o\dh}},
+ book = {{b\'ok}{b\'ok}},
+ part = {{hluti}{hluti}},
+ issue = {{hefti}{hefti}},
+ newseries = {{n\'y ritr\"o\dh}{n\'y ritr\"o\dh}},
+ oldseries = {{g\"omul ritr\"o\dh}{g\"omul ritr\"o\dh}},
+ edition = {{\'utg\'afa}{\'utg\adddot}},
+ reprint = {{endurprentun}{endurpr\adddot}},
+ reprintof = {{endurprentun \'a}{endurpr\adddot{} \'a}},
+ reprintas = {{endurprenta\dh{} sem}{endurpr\adddot{} sem}},
+ reprintfrom = {{endurprentun \'ur}{endurpr\adddot{} \'ur}},
+ translationof = {{\th'yth ing \'a}{\th\'y\dh\adddot{} \'a}},
+ translationas = {{\th'ytt sem}{\th\'ytt sem}},
+ translationfrom = {{\th'yth ing \'ur}{\th\'y\dh\adddot{} \'ur}},
+ reviewof = {{ums\"ogn um}{ums\"ogn um}},
+% origpubas = {{}{}},% FIXME: missing
+% origpubin = {{}{}},% FIXME: missing
+% astitle = {{}{}},% FIXME: missing
+ nodate = {{\'an \'ars}{\'an \'ars}},
+ page = {{bla\dh{}s\'{\i}\dh{}a}{bls\adddot}},
+ pages = {{bla\dh{}s\'{\i}\dh{}ur}{bls\adddot}},
+ column = {{d\'alkur}{dlk\adddot}},
+ columns = {{d\'alkar}{dlk\adddot}},
+ line = {{l\'{\i}na}{l\adddot}},
+ lines = {{l\'{\i}nur}{l\adddot}},
+ verse = {{erindi}{er\adddot}},
+ verses = {{erindi}{er\adddot}},
+ section = {{grein}{\S}},
+ sections = {{grein}{\S\S}},
+ paragraph = {{m\'alsgrein}{mgr\adddot}},
+ paragraphs = {{m\'alsgreinar}{mgr\adddot}},
+% pagetotal = {{}{}},% FIXME: missing
+% pagetotals = {{}{}},% FIXME: missing
+% columntotal = {{}{}},% FIXME: missing
+% columntotals = {{}{}},% FIXME: missing
+% linetotal = {{}{}},% FIXME: missing
+% linetotals = {{}{}},% FIXME: missing
+% versetotal = {{}{}},% FIXME: missing
+% versetotals = {{}{}},% FIXME: missing
+% sectiontotal = {{}{}},% FIXME: missing
+% sectiontotals = {{}{}},% FIXME: missing
+% paragraphtotal = {{}{}},% FIXME: missing
+% paragraphtotals = {{}{}},% FIXME: missing
+ in = {{\'{\i}}{\'{\i}}},
+ inseries = {{ritr\"o\dh{}in}{ritr\"o\dh{}in}},
+ ofseries = {{\'ur ritr\"o\dh{}inni}{\'ur ritr\adddot}},
+ number = {{n\'umer}{nr\adddot}},
+ chapter = {{kafli}{k\adddot}},
+% bathesis = {{}{}},% FIXME: missing
+ mathesis = {{meistarapr\'ofsritger\dh}{meistararitg\adddot}},
+ phdthesis = {{doktorsritger\dh}{doktorsritg\adddot}},
+ candthesis = {{kand\'{\i}datsritger\dh}{kand\'{\i}datsritg\adddot}},
+ resreport = {{ranns\'oknarsk\'yrsla}{ranns\'oknarsk\'yrsla}},
+ techreport = {{t\ae{}knileg sk\'yrsla}{t\ae{}knileg sk\'yrsla}},
+ software = {{hugb\'una\dh{}ur}{hugb\'una\dh{}ur}},
+ datacd = {{gagnadiskur}{gagnadiskur}},
+ audiocd = {{hlj\'o\dh{}diskur}{hlj\'o\dh{}diskur}},
+ version = {{\'utg\'afa}{\'utg\adddot}},
+ url = {{vefsl\'o\dh{}}{vefsl\'o\dh{}}},
+% urlfrom = {{}{}},% FIXME: missing
+ urlseen = {{sko\dh{}a\dh}{sko\dh{}a\dh}},
+ inpreparation = {{\'{\i} vinnslu}{\'{\i} vinnslu}},
+ submitted = {{afhent til birtingar}{afhent til birtingar}},
+ forthcoming = {{mun birtast}{mun birtast}},
+ inpress = {{\'{\i} prentun}{\'{\i} prentun}},
+ prepublished = {{forbirt}{forbirt}},
+ citedas = {{h\'er eftir skammstafa\dh}{h\'er eftir skst\adddot}},
+ seenote = {{sj\'a athugasemd}{sj\'a aths\adddot}},
+ quotedin = {{tilvitnun samkv\ae{}mt}{tilvitnun skv\adddot}},
+ idem = {{sama heimild}{s\adddot h\adddot}},
+ idemsf = {{sama heimild}{s\adddot h\adddot}},
+ idemsm = {{sama heimild}{s\adddot h\adddot}},
+ idemsn = {{sama heimild}{s\adddot h\adddot}},
+ idempf = {{sama heimild}{s\adddot h\adddot}},
+ idempm = {{sama heimild}{s\adddot h\adddot}},
+ idempn = {{sama heimild}{s\adddot h\adddot}},
+ idempp = {{sama heimild}{s\adddot h\adddot}},
+ ibidem = {{sama heimild}{s\adddot h\adddot}},
+ opcit = {{sama rit}{sama rit}},
+ loccit = {{sami sta\dh{}ur}{s\adddot st\adddot}},
+ confer = {{sbr\adddot}{sbr\adddot}},
+ sequens = {{o\adddot \'afr\adddot}{o\adddot \'afr\adddot}},
+ sequentes = {{o\adddot \'afr\adddot}{o\adddot \'afr\adddot}},
+ passim = {{v\'{\i}\dh{}a}{v\'{\i}\dh{}a}},
+ see = {{sj\'a}{sj\'a}},
+ seealso = {{sj\'a einnig}{sj\'a einnig}},
+ backrefpage = {{sj\'a bla\dh{}s\'{\i}u}{sj\'a bls\adddot}},
+ backrefpages = {{sj\'a bla\dh{}s\'{\i}ur}{sj\'a bls\adddot}},
+ january = {{jan\'uar}{jan\adddot}},
+ february = {{febr\'uar}{feb\adddot}},
+ march = {{mars}{mar\adddot}},
+ april = {{apr\'{\i}l}{apr\adddot}},
+ may = {{ma\'{\i}}{ma\'{\i}}},
+ june = {{j\'un\'{\i}}{j\'un\adddot}},
+ july = {{j\'ul\'{\i}}{j\'ul\adddot}},
+ august = {{\'ag\'ust}{\'ag\'u\adddot}},
+ september = {{september}{sep\adddot}},
+ october = {{okt\'ober}{okt\adddot}},
+ november = {{n\'ovember}{n\'ov\adddot}},
+ december = {{desember}{des\adddot}},
+ langamerican = {{bandar\'{\i}ska}{bandar\'{\i}ska}},
+% langbrazilian = {{}{}},% FIXME: missing
+% langbulgarian = {{}{}},% FIXME: missing
+% langcatalan = {{}{}},% FIXME: missing
+% langcroatian = {{}{}},% FIXME: missing
+% langczech = {{}{}},% FIXME: missing
+ langdanish = {{danska}{danska}},
+ langdutch = {{hollenska}{hollenska}},
+ langenglish = {{enska}{enska}},
+% langestonian = {{}{}},% FIXME: missing
+ langfinnish = {{finnska}{finnska}},
+ langfrench = {{franska}{franska}},
+ langgalician = {{galis\'iska}{galis\'iska}},
+ langgerman = {{\th\'yska}{\th\'yska}},
+ langgreek = {{gr\'{\i}ska}{gr\'{\i}ska}},
+ langhungarian = {{ungverska}{ungverska}},
+ langitalian = {{\'{\i}talska}{\'{\i}talska}},
+ langlatin = {{lat\'{\i}na}{lat\'{\i}na}},
+% langlatvian = {{}{}},% FIXME: missing
+ langnorwegian = {{norska}{norska}},
+ langpolish = {{p\'olska}{p\'olska}},
+ langportuguese = {{port\'ugalska}{port\'ugalska}},
+ langrussian = {{r\'ussneska}{r\'ussneska}},
+% langslovak = {{}{}},% FIXME: missing
+% langslovene = {{}{}},% FIXME: missing
+ langspanish = {{sp\ae{}nska}{sp\ae{}nska}},
+ langswedish = {{s\ae{}nska}{s\ae{}nska}},
+ fromamerican = {{\'ur bandar\'{\i}sku}{\'ur bandar\'{\i}sku}},
+% frombrazilian = {{}{}},% FIXME: missing
+% frombulgarian = {{}{}},% FIXME: missing
+% fromcatalan = {{}{}},% FIXME: missing
+% fromcroatian = {{}{}},% FIXME: missing
+% fromczech = {{}{}},% FIXME: missing
+ fromdanish = {{\'ur d\"onsku}{\'ur d\"onsku}},
+ fromdutch = {{\'ur hollensku}{\'ur hollensku}},
+ fromenglish = {{\'ur ensku}{\'ur ensku}},
+% fromestonian = {{}{}},% FIXME: missing
+ fromfinnish = {{\'ur finnsku}{\'ur finnsku}},
+ fromfrench = {{\'ur fr\"onsku}{\'ur fr\"onsku}},
+ fromgalician = {{\'ur galis\'isku}{\'ur galis\'isku}},
+ fromgerman = {{\'ur \th\'ysku}{\'ur \th\'ysku}},
+ fromgreek = {{\'ur gr\'{\i}sku}{\'ur gr\'{\i}sku}},
+ fromhungarian = {{\'ur ungversku}{\'ur ungversku}},
+ fromitalian = {{\'ur \'{\i}t\"olsku}{\'ur \'{\i}t\"olsku}},
+ fromlatin = {{\'ur lat\'{\i}nu}{\'ur lat\'{\i}nu}},
+% fromlatvian = {{}{}},% FIXME: missing
+ fromnorwegian = {{\'ur norsku}{\'ur norsku}},
+ frompolish = {{\'ur p\'olsku}{\'ur p\'olsku}},
+ fromportuguese = {{\'ur port\'ug\"olsku}{\'ur port\'ug\"olsku}},
+ fromrussian = {{\'ur r\'ussnesku}{\'ur r\'ussnesku}},
+% fromslovak = {{}{}},% FIXME: missing
+% fromslovene = {{}{}},% FIXME: missing
+ fromspanish = {{\'ur sp\ae{}nsku}{\'ur sp\ae{}nsku}},
+ fromswedish = {{\'ur s\ae{}nsku}{\'ur s\ae{}nsku}},
+ countryde = {{\TH\'yskaland}{DE}},
+ countryeu = {{Evr\'opusambandi\dh}{EU}},
+ countryep = {{Evr\'opusambandi\dh}{EP}},
+ countryfr = {{Frakkland}{FR}},
+ countryuk = {{Bretland}{GB}},
+ countryus = {{Bandar\'{\i}kin}{US}},
+ patent = {{einkaleyfi}{einkaleyfi}},
+ patentde = {{\th\'yskt einkaleyfi}{\th\'yskt einkaleyfi}},
+ patenteu = {{evr\'opskt einkaleyfi}{evr\'opskt einkaleyfi}},
+ patentfr = {{franskt einkaleyfi}{franskt einkaleyfi}},
+ patentuk = {{breskt einkaleyfi}{breskt einkaleyfi}},
+ patentus = {{bandar\'{\i}skt einkaleyfi}{bandar\'{\i}skt einkaleyfi}},
+ patreq = {{ums\'okn um einkaleyfi}{ums\'okn um einkaleyfi}},
+ patreqde = {{ums\'okn um \th\'yskt einkaleyfi}{ums\'okn um \th\'yskt einkaleyfi}},
+ patreqeu = {{ums\'okn um evr\'opskt einkaleyfi}{ums\'okn um evr\'opskt einkaleyfi}},
+ patreqfr = {{ums\'okn um franskt einkaleyfi}{ums\'okn um franskt einkaleyfi}},
+ patrequk = {{ums\'okn um breskt einkaleyfi}{ums\'okn um breskt einkaleyfi}},
+ patrequs = {{ums\'okn um bandar\'{\i}skt einkaleyfi}{ums\'okn um bandar\'{\i}skt einkaleyfi}},
+ file = {{skr\'a}{skr\'a}},
+ library = {{safn}{safn}},
+ abstract = {{\'utdr\'attur}{\'utdr\'attur}},
+ annotation = {{athugagrein}{athugagrein}},
+ commonera = {{kristi\th t\'{\i}matal}{l\adddot t\adddot}},
+ beforecommonera = {{fyrir kristi\th t\'{\i}matal}{f\adddot l\adddot t\adddot}},
+ annodomini = {{eftir Krist}{e\adddot Kr\adddot}},
+ beforechrist = {{fyrir Krist}{f\adddot Kr\adddot}},
+% circa = {{}{}},% FIXME: missing
+% spring = {{}{}},% FIXME: missing
+% summer = {{}{}},% FIXME: missing
+% autumn = {{}{}},% FIXME: missing
+% winter = {{}{}},% FIXME: missing
+% springN = {{}{}},% FIXME: missing
+% summerN = {{}{}},% FIXME: missing
+% autumnN = {{}{}},% FIXME: missing
+% winterN = {{}{}},% FIXME: missing
+% springS = {{}{}},% FIXME: missing
+% summerS = {{}{}},% FIXME: missing
+% autumnS = {{}{}},% FIXME: missing
+% winterS = {{}{}},% FIXME: missing
+% Q1 = {{}{}},% FIXME: missing
+% Q2 = {{}{}},% FIXME: missing
+% Q3 = {{}{}},% FIXME: missing
+% Q4 = {{}{}},% FIXME: missing
+% QD1 = {{}{}},% FIXME: missing
+% QD2 = {{}{}},% FIXME: missing
+% QD3 = {{}{}},% FIXME: missing
+% S1 = {{}{}},% FIXME: missing
+% S2 = {{}{}},% FIXME: missing
+ am = {{f\adddot h\adddot}{f\adddot h\adddot}},
+ pm = {{e\adddot h\adddot}{e\adddot h\adddot}},
+}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/lbx/italian-ms.lbx b/macros/latex/contrib/biblatex-ms/latex/lbx/italian-ms.lbx
new file mode 100644
index 0000000000..6c95265ccc
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/lbx/italian-ms.lbx
@@ -0,0 +1,486 @@
+\ProvidesFile{italian-ms.lbx}
+[\abx@lbxid]
+
+\DeclareRedundantLanguages{italian}{italian}
+
+\DeclareBibliographyExtras{%
+ \protected\def\bibrangedash{%
+ \textendash\penalty\hyphenpenalty}% breakable dash
+ \let\finalandcomma=\empty
+ \let\finalandsemicolon=\empty
+ \def\mkbibordinal{\mkbibmascord}%
+ \protected\def\mkbibmascord#1{\stripzeros{#1}\textsuperscript{o}}%
+ \protected\def\mkbibfemord#1{\stripzeros{#1}\textsuperscript{a}}%
+ \protected\def\mkbibneutord{\mkbibmascord}%
+ \protected\def\mkbibdatelong#1#2#3{%
+ \iffieldundef{#3}
+ {}
+ {\@bsphack % ignore day when auto-capitalizing month name
+ \stripzeros{\thefield{#3}}%
+ \@esphack % ignore day when auto-capitalizing month name
+ \iffieldundef{#2}{}{\nobreakspace}}%
+ \iffieldundef{#2}
+ {}
+ {\mkbibmonth{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}}%
+ \iffieldbibstring{#1}
+ {\bibstring{\thefield{#1}}}
+ {\dateeraprintpre{#1}\stripzeros{\thefield{#1}}}}%
+ \protected\def\mkbibdateshort#1#2#3{%
+ \iffieldundef{#3}
+ {}
+ {\mkdayzeros{\thefield{#3}}%
+ \iffieldundef{#2}{}{/}}%
+ \iffieldundef{#2}
+ {}
+ {\mkmonthzeros{\thefield{#2}}%
+ \iffieldundef{#1}{}{/}}%
+ \iffieldbibstring{#1}
+ {\bibstring{\thefield{#1}}}
+ {\dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}}%
+ \savecommand\mkbibordedition
+ \savecommand\mkbibordseries
+ \def\mkbibordedition{\mkbibfemord}%
+ \def\mkbibordseries{\mkbibfemord}%
+ \expandafter\protected\expandafter\def\csname mkbibtime24h\endcsname#1#2#3#4{%
+ \iffieldundef{#1}
+ {}
+ {\mktimezeros{\thefield{#1}}%
+ \iffieldundef{#2}{}{\bibtimesep}}%
+ \iffieldundef{#2}
+ {}
+ {\mktimezeros{\thefield{#2}}%
+ \iffieldundef{#3}{}{\bibtimesep}}%
+ \iffieldundef{#3}
+ {}
+ {\mktimezeros{\thefield{#3}}}%
+ \iffieldundef{#4}{}
+ {\bibtimezonesep
+ \mkbibtimezone{\thefield{#4}}}}%
+ \expandafter\protected\expandafter\def\csname mkbibtime12h\endcsname#1#2#3#4{%
+ \stripzeros{\mktimehh{\thefield{#1}}}\bibtimesep
+ \forcezerosmdt{\thefield{#2}}%
+ \iffieldundef{#3}{}
+ {\bibtimesep
+ \forcezerosmdt{\thefield{#3}}}%
+ \space
+ \ifnumless{\thefield{#1}}{12}
+ {\bibstring{am}}
+ {\bibstring{pm}}%
+ \iffieldundef{#4}{}
+ {\space\bibtimezonesep
+ \parentext{\mkbibtimezone{\thefield{#4}}}}}%
+ \protected\def\mkbibyeardivisiondateshort#1#2{%
+ \mkbibyeardivision{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}%
+ \dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}%
+ \protected\def\mkbibyeardivisiondatelong#1#2{%
+ \mkbibyeardivision{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}%
+ \dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}%
+}
+
+\UndeclareBibliographyExtras{%
+ \restorecommand\mkbibordedition
+ \restorecommand\mkbibordseries
+}
+
+\DeclareBibliographyStrings{%
+ bibliography = {{Bibliografia}{Bibliografia}},
+ references = {{Riferimenti bibliografici}{Riferimenti bibliografici}},
+ shorthands = {{Elenco delle sigle}{Sigle}},
+ editor = {{curatore}{cur\adddot}},
+ editors = {{curatori}{cur\adddot}},
+ compiler = {{compilatore}{comp\adddot}},
+ compilers = {{compilatori}{comp\adddot}},
+ redactor = {{redattore}{red\adddot}},
+ redactors = {{redattori}{red\adddot}},
+% reviser = {{}{}},% FIXME: missing
+% revisers = {{}{}},% FIXME: missing
+% founder = {{}{}},% FIXME: missing
+% founders = {{}{}},% FIXME: missing
+% continuator = {{}{}},% FIXME: missing
+% continuators = {{}{}},% FIXME: missing
+ collaborator = {{collaboratore}{con la collab\adddotspace di}},
+ collaborators = {{collaboratore}{con la collab\adddotspace di}},
+ translator = {{traduttore}{trad\adddot}},
+ translators = {{traduttori}{trad\adddot}},
+ commentator = {{commentatore}{comment\adddot}},
+ commentators = {{commentatori}{comment\adddot}},
+ annotator = {{annotatore}{annot\adddot}},
+ annotators = {{annotatore}{annot\adddot}},
+ commentary = {{commenti}{comm\adddot}},
+ annotations = {{annotazioni}{annot\adddot}},
+ introduction = {{introduzione}{introd\adddot}},
+ foreword = {{prefazione}{pref\adddot}},
+ afterword = {{postfazione}{postf\adddot}},
+% editortr = {{}{}},% FIXME: missing
+% editorstr = {{}{}},% FIXME: missing
+% editorco = {{}{}},% FIXME: missing
+% editorsco = {{}{}},% FIXME: missing
+% editoran = {{}{}},% FIXME: missing
+% editorsan = {{}{}},% FIXME: missing
+% editorin = {{}{}},% FIXME: missing
+% editorsin = {{}{}},% FIXME: missing
+% editorfo = {{}{}},% FIXME: missing
+% editorsfo = {{}{}},% FIXME: missing
+% editoraf = {{}{}},% FIXME: missing
+% editorsaf = {{}{}},% FIXME: missing
+% editortrco = {{}{}},% FIXME: missing
+% editorstrco = {{}{}},% FIXME: missing
+% editortran = {{}{}},% FIXME: missing
+% editorstran = {{}{}},% FIXME: missing
+% editortrin = {{}{}},% FIXME: missing
+% editorstrin = {{}{}},% FIXME: missing
+% editortrfo = {{}{}},% FIXME: missing
+% editorstrfo = {{}{}},% FIXME: missing
+% editortraf = {{}{}},% FIXME: missing
+% editorstraf = {{}{}},% FIXME: missing
+% editorcoin = {{}{}},% FIXME: missing
+% editorscoin = {{}{}},% FIXME: missing
+% editorcofo = {{}{}},% FIXME: missing
+% editorscofo = {{}{}},% FIXME: missing
+% editorcoaf = {{}{}},% FIXME: missing
+% editorscoaf = {{}{}},% FIXME: missing
+% editoranin = {{}{}},% FIXME: missing
+% editorsanin = {{}{}},% FIXME: missing
+% editoranfo = {{}{}},% FIXME: missing
+% editorsanfo = {{}{}},% FIXME: missing
+% editoranaf = {{}{}},% FIXME: missing
+% editorsanaf = {{}{}},% FIXME: missing
+% editortrcoin = {{}{}},% FIXME: missing
+% editorstrcoin = {{}{}},% FIXME: missing
+% editortrcofo = {{}{}},% FIXME: missing
+% editorstrcofo = {{}{}},% FIXME: missing
+% editortrcoaf = {{}{}},% FIXME: missing
+% editorstrcoaf = {{}{}},% FIXME: missing
+% editortranin = {{}{}},% FIXME: missing
+% editorstranin = {{}{}},% FIXME: missing
+% editortranfo = {{}{}},% FIXME: missing
+% editorstranfo = {{}{}},% FIXME: missing
+% editortranaf = {{}{}},% FIXME: missing
+% editorstranaf = {{}{}},% FIXME: missing
+% translatorco = {{}{}},% FIXME: missing
+% translatorsco = {{}{}},% FIXME: missing
+% translatoran = {{}{}},% FIXME: missing
+% translatorsan = {{}{}},% FIXME: missing
+% translatorin = {{}{}},% FIXME: missing
+% translatorsin = {{}{}},% FIXME: missing
+% translatorfo = {{}{}},% FIXME: missing
+% translatorsfo = {{}{}},% FIXME: missing
+% translatoraf = {{}{}},% FIXME: missing
+% translatorsaf = {{}{}},% FIXME: missing
+% translatorcoin = {{}{}},% FIXME: missing
+% translatorscoin = {{}{}},% FIXME: missing
+% translatorcofo = {{}{}},% FIXME: missing
+% translatorscofo = {{}{}},% FIXME: missing
+% translatorcoaf = {{}{}},% FIXME: missing
+% translatorscoaf = {{}{}},% FIXME: missing
+% translatoranin = {{}{}},% FIXME: missing
+% translatorsanin = {{}{}},% FIXME: missing
+% translatoranfo = {{}{}},% FIXME: missing
+% translatorsanfo = {{}{}},% FIXME: missing
+% translatoranaf = {{}{}},% FIXME: missing
+% translatorsanaf = {{}{}},% FIXME: missing
+% organizer = {{}{}},% FIXME: missing
+% organizers = {{}{}},% FIXME: missing
+% byorganizer = {{}{}},% FIXME: missing
+ byauthor = {{di}{di}},
+ byeditor = {{a cura di}{a cura di}},
+ bycompiler = {{compilato da}{comp\adddotspace da}},
+ byredactor = {{redatto da}{red\adddotspace da}},
+% byreviser = {{}{}},% FIXME: missing
+% byreviewer = {{}{}},% FIXME: missing
+% byfounder = {{}{}},% FIXME: missing
+% bycontinuator = {{}{}},% FIXME: missing
+% bycollaborator = {{}{}},% FIXME: missing
+ bytranslator = {{tradotto \lbx@lfromlang\ da}{trad\adddot\ \lbx@sfromlang\ da}},
+ bycommentator = {{commentato da}{comm\adddot\ da}},
+ byannotator = {{annotato da}{annot\adddot\ da}},
+ withcommentator = {{con commenti di}{con comm\adddot\ di}},
+ withannotator = {{con annotazioni di}{con annot\adddot\ di}},
+ withintroduction = {{con introduzione di}{con introd\adddot\ di}},
+ withforeword = {{con prefazione di}{con pref\adddot\ di}},
+ withafterword = {{con postfazione di}{con postf\adddot\ di}},
+ byeditortr = {{curato e tradotto \lbx@lfromlang\ da}%
+ {cur\adddotspace e trad\adddot\ \lbx@sfromlang\ da}},
+ byeditorco = {{curato e commentato da}%
+ {cur\adddotspace e comm\adddot\ da}},
+ byeditoran = {{curato e annotato da}%
+ {cur\adddotspace e annot\adddot\ da}},
+ byeditorin = {{a cura e con introduzione di}%
+ {a cura e con introd\adddot\ di}},
+ byeditorfo = {{a cura e con prefazione di}%
+ {a cura e con pref\adddot\ di}},
+ byeditoraf = {{a cura e con postfazione di}%
+ {a cura e con postf\adddot\ di}},
+ byeditortrco = {{curato, tradotto \lbx@lfromlang\ e commentato da}%
+ {cur.,\addabbrvspace trad\adddot\ \lbx@sfromlang\ e comm\adddot\ da}},
+ byeditortran = {{curato, tradotto \lbx@lfromlang\ e annotato da}%
+ {cur.,\addabbrvspace trad\adddot\ \lbx@sfromlang\ e annot\adddot\ da}},
+ byeditortrin = {{edizione, traduzione \lbx@lfromlang\ e introduzione di}%
+ {ed., trad\adddot\ \lbx@sfromlang\ e introd\adddot\ di}},
+ byeditortrfo = {{edizione, traduzione \lbx@lfromlang\ e prefazione di}%
+ {ed., trad\adddot\ \lbx@sfromlang\ e pref\adddot\ di}},
+ byeditortraf = {{edizione, traduzione \lbx@lfromlang\ e postfazione di}%
+ {ed., trad\adddot\ \lbx@sfromlang\ e postf\adddot\ di}},
+ byeditorcoin = {{edizione, commenti e introduzione di}%
+ {ed., comm\adddot\ e introduzione di}},
+ byeditorcofo = {{edizione, commenti e prefazione di}%
+ {ed., comm\adddot\ e prefazione di}},
+ byeditorcoaf = {{edizione, commenti e postfazione di}%
+ {ed., comm\adddot\ e postfazione di}},
+ byeditoranin = {{edizione, annotazioni e introduzione di}%
+ {ed., annot\adddot\ e introduzione di}},
+ byeditoranfo = {{edizione, annotazioni e prefazione di}%
+ {ed., annot\adddot\ e prefazione di}},
+ byeditoranaf = {{edizione, annotazioni e postfazione di}%
+ {ed., annot\adddot\ e postfazione di}},
+ byeditortrcoin = {{edizione, traduzione \lbx@lfromlang, commenti e introduzione di}%
+ {ed., trad\adddot\ \lbx@sfromlang, comm\adddot\ e introd\adddot\ di}},
+ byeditortrcofo = {{edizione, traduzione \lbx@lfromlang, commenti e prefazione di}%
+ {ed., trad\adddot\ \lbx@sfromlang, comm\adddot\ e pref\adddot\ di}},
+ byeditortrcoaf = {{edizione, traduzione \lbx@lfromlang, commenti e postfazione di}%
+ {ed., trad\adddot\ \lbx@sfromlang, comm\adddot\ e postf\adddot\ di}},
+ byeditortranin = {{edizione, traduzione \lbx@lfromlang, annotazioni e introduzione di}%
+ {ed., trad\adddot\ \lbx@sfromlang, annot\adddot\ e introd\adddot\ di}},
+ byeditortranfo = {{edizione, traduzione \lbx@lfromlang, annotazioni e prefazione di}%
+ {ed., trad\adddot\ \lbx@sfromlang, annot\adddot\ e pref\adddot\ di}},
+ byeditortranaf = {{edizione, traduzione \lbx@lfromlang, annotazioni e postfazione di}%
+ {ed., trad\adddot\ \lbx@sfromlang, annot\adddot\ e postf\adddot\ di}},
+ bytranslatorco = {{tradotto \lbx@lfromlang\ e commentato da}%
+ {trad\adddot\ \lbx@sfromlang\ e comm\adddot\ da}},
+ bytranslatoran = {{tradotto \lbx@lfromlang\ e annotato da}%
+ {trad\adddot\ \lbx@sfromlang\ e annot\adddot\ da}},
+ bytranslatorin = {{traduzione \lbx@lfromlang\ e introduzione di}%
+ {trad\adddot\ \lbx@sfromlang\ e introd\adddot\ di}},
+ bytranslatorfo = {{traduzione \lbx@lfromlang\ e prefazione di}%
+ {trad\adddot\ \lbx@sfromlang\ e pref\adddot\ di}},
+ bytranslatoraf = {{traduzione \lbx@lfromlang\ e postfazione di}%
+ {trad\adddot\ \lbx@sfromlang\ e postf\adddot\ di}},
+ bytranslatorcoin = {{traduzione \lbx@lfromlang, commenti e introduzione di}%
+ {trad\adddot\ \lbx@sfromlang, comm\adddot\ e introd\adddot\ di}},
+ bytranslatorcofo = {{traduzione \lbx@lfromlang, commenti e prefazione di}%
+ {trad\adddot\ \lbx@sfromlang, comm\adddot\ e pref\adddot\ di}},
+ bytranslatorcoaf = {{traduzione \lbx@lfromlang, commenti e postfazione di}%
+ {trad\adddot\ \lbx@sfromlang, comm\adddot\ e postf\adddot\ di}},
+ bytranslatoranin = {{traduzione \lbx@lfromlang, annotazioni e introduzione di}%
+ {trad\adddot\ \lbx@sfromlang, annot\adddot\ e introd\adddot\ di}},
+ bytranslatoranfo = {{traduzione \lbx@lfromlang, annotazioni e prefazione di}%
+ {trad\adddot\ \lbx@sfromlang, annot\adddot\ e pref\adddot\ di}},
+ bytranslatoranaf = {{traduzione \lbx@lfromlang, annotazioni e postfazione di}%
+ {trad\adddot\ \lbx@sfromlang, annot\adddot\ e postf\adddot\ di}},
+ and = {{e}{e}},
+ andothers = {{et\addabbrvspace al\adddot}{et\addabbrvspace al\adddot}},
+ andmore = {{et\addabbrvspace al\adddot}{et\addabbrvspace al\adddot}},
+ volume = {{volume}{vol\adddot}},
+ volumes = {{volumi}{voll\adddot}},
+ involumes = {{in}{in}},% FIXME: unsure
+ jourvol = {{volume}{vol\adddot}},
+ jourser = {{serie}{ser\adddot}},
+% book = {{}{}},% FIXME: missing
+% part = {{}{}},% FIXME: missing
+% issue = {{}{}},% FIXME: missing
+ newseries = {{nuova serie}{nuova ser\adddot}},
+ oldseries = {{vecchia serie}{vecchia ser\adddot}},
+ edition = {{edizione}{ed\adddot}},
+ reprint = {{ristampa}{rist\adddot}},
+ reprintof = {{ristampa di}{rist\adddotspace di}},
+% reprintas = {{}{}},% FIXME: missing
+% reprintfrom = {{}{}},% FIXME: missing
+% translationof = {{}{}},% FIXME: missing
+% translationas = {{}{}},% FIXME: missing
+% translationfrom = {{}{}},% FIXME: missing
+% reviewof = {{}{}},% FIXME: missing
+% origpubas = {{}{}},% FIXME: missing
+% origpubin = {{}{}},% FIXME: missing
+% astitle = {{}{}},% FIXME: missing
+% bypublisher = {{}{}},% FIXME: missing
+ nodate = {{senza\space data}{{}n\adddot d\adddot}},
+ page = {{pagina}{p\adddot}},
+ pages = {{pagine}{pp\adddot}},
+ column = {{colonna}{col\adddot}},
+ columns = {{colonne}{coll\adddot}},
+ line = {{riga}{r\adddot}},
+ lines = {{righe}{rr\adddot}},
+ verse = {{verso}{v\adddot}},
+ verses = {{versi}{vv\adddot}},
+% section = {{}{\S}},% FIXME: missing
+% sections = {{}{\S\S}},% FIXME: missing
+ paragraph = {{paragrafo}{par\adddot}},
+ paragraphs = {{paragrafi}{par\adddot}},
+ pagetotal = {{pagina}{p\adddot}},
+ pagetotals = {{pagine}{pp\adddot}},
+ columntotal = {{colonna}{col\adddot}},
+ columntotals = {{colonne}{coll\adddot}},
+ linetotal = {{riga}{r\adddot}},
+ linetotals = {{righe}{rr\adddot}},
+ versetotal = {{verso}{v\adddot}},
+ versetotals = {{versi}{vv\adddot}},
+% sectiontotal = {{}{}},% FIXME: missing
+% sectiontotals = {{}{}},% FIXME: missing
+ paragraphtotal = {{paragrafo}{par\adddot}},
+ paragraphtotals = {{paragrafi}{par\adddot}},
+ in = {{in}{in}},
+ inseries = {{in}{in}},
+ ofseries = {{di}{di}},
+ number = {{numero}{n\adddot}},
+ chapter = {{capitolo}{cap\adddot}},
+% bathesis = {{}{}},% FIXME: missing
+ mathesis = {{tesi di laurea magistrale}{tesi di laurea mag\adddot}},
+ phdthesis = {{tesi di dottorato}{tesi di dott\adddot}},
+% candthesis = {{}{}},% FIXME: missing
+ resreport = {{rapporto di ricerca}{rapporto di ricerca}},
+ techreport = {{rapporto tecnico}{rapp\adddotspace tecn\adddot}},
+% software = {{}{}},% FIXME: missing
+% datacd = {{}{}},% FIXME: missing
+% audiocd = {{}{}},% FIXME: missing
+ version = {{versione}{ver\adddot}},
+ url = {{indirizzo}{indirizzo}},
+% urlfrom = {{}{}},% FIXME: missing
+ urlseen = {{visitato il}{visitato il}},
+% inpreparation = {{}{}},% FIXME: missing
+% submitted = {{}{}},% FIXME: missing
+% forthcoming = {{}{}},% FIXME: missing
+ inpress = {{in stampa}{in stampa}},
+% prepublished = {{}{}},% FIXME: missing
+ citedas = {{citato come}{cit\adddotspace come}},
+% thiscite = {{}{}},% FIXME: missing
+ seenote = {{vedi nota}{v\adddotspace nota}},
+ quotedin = {{citato da}{cit\adddotspace da}},
+ idem = {{idem}{idem}},
+ idemsm = {{idem}{idem}},
+ idemsf = {{eadem}{eadem}},
+ idemsn = {{idem}{idem}},
+ idempm = {{eidem}{eidem}},
+ idempf = {{eaedem}{eaedem}},
+ idempn = {{eadem}{eadem}},
+ idempp = {{eidem}{eidem}},
+ ibidem = {{ibidem}{ibid\adddot}},
+ opcit = {{cit\adddot}{cit\adddot}},
+ loccit = {{loc\adddotspace cit\adddot}{loc\adddotspace cit\adddot}},
+ confer = {{cf\adddot}{cf\adddot}},
+ sequens = {{s\adddot}{s\adddot}},
+ sequentes = {{ss\adddot}{ss\adddot}},
+ passim = {{passim}{pass\adddot}},
+ see = {{vedi\adddot}{v\adddot}},
+ seealso = {{vedi anche}{v\adddot~anche}},
+ backrefpage = {{citato a pagina}{cit\adddotspace a p\adddot}},
+ backrefpages = {{citato alle pagine}{cit\adddotspace alle pp\adddot}},
+ january = {{gennaio}{gen\adddot}},
+ february = {{febbraio}{feb\adddot}},
+ march = {{marzo}{mar\adddot}},
+ april = {{aprile}{apr\adddot}},
+ may = {{maggio}{mag\adddot}},
+ june = {{giugno}{giu\adddot}},
+ july = {{luglio}{lug\adddot}},
+ august = {{agosto}{ago\adddot}},
+ september = {{settembre}{set\adddot}},
+ october = {{ottobre}{ott\adddot}},
+ november = {{novembre}{nov\adddot}},
+ december = {{dicembre}{dic\adddot}},
+ langamerican = {{americano}{americano}},
+ langbrazilian = {{brasiliano}{brasiliano}},
+ langbulgarian = {{bulgaro}{bulgaro}},
+ langcatalan = {{catalano}{catalano}},
+ langcroatian = {{croato}{croato}},
+ langczech = {{ceco}{ceco}},
+ langdanish = {{danese}{danese}},
+ langdutch = {{olandese}{olandese}},
+ langenglish = {{inglese}{inglese}},
+ langestonian = {{estone}{estone}},
+ langfinnish = {{finlandese}{finlandese}},
+ langfrench = {{francese}{francese}},
+ langgalician = {{galiziano}{galiziano}},
+ langgerman = {{tedesco}{tedesco}},
+ langgreek = {{greco}{greco}},
+ langhungarian = {{ungherese}{ungherese}},
+ langitalian = {{italiano}{italiano}},
+ langlatin = {{latino}{latino}},
+% langlatvian = {{}{}},% FIXME: missing
+ langnorwegian = {{norvegese}{norvegese}},
+ langpolish = {{polacco}{polacco}},
+ langportuguese = {{portoghese}{portoghese}},
+ langrussian = {{russo}{russo}},
+% langslovak = {{}{}},% FIXME: missing
+ langslovene = {{sloveno}{sloveno}},
+ langspanish = {{spagnolo}{spagnolo}},
+ langswedish = {{svedese}{svedese}},
+ fromamerican = {{dall'americano}{dall'americano}},
+ frombrazilian = {{dall brasiliano}{dall brasiliano}},
+ frombulgarian = {{dal bulgaro}{dal bulgaro}},
+ fromcatalan = {{dal catalano}{dal catalano}},
+ fromcroatian = {{dal croato}{dal croato}},
+ fromczech = {{dal ceco}{dal ceco}},
+ fromdanish = {{dal danese}{dal danese}},
+ fromdutch = {{dall'olandese}{dall'olandese}},
+ fromenglish = {{dall'inglese}{dall'inglese}},
+ fromestonian = {{dall'estone}{dall'estone}},
+ fromfinnish = {{dal finlandese}{dal finlandese}},
+ fromfrench = {{dal francese}{dal francese}},
+ fromgalician = {{dal galiziano}{dal galiziano}},
+ fromgerman = {{dal tedesco}{dal tedesco}},
+ fromgreek = {{dal greco}{dal greco}},
+ fromhungarian = {{dall'ungherese}{dall'ungherese}},
+ fromitalian = {{dall'italiano}{dall'italiano}},
+ fromlatin = {{dal latino}{dal latino}},
+% fromlatvian = {{}{}},% FIXME: missing
+ fromnorwegian = {{dal norvegese}{dal norvegese}},
+ frompolish = {{dal polacco}{dal polacco}},
+ fromportuguese = {{dall portoghese}{dall portoghese}},
+ fromrussian = {{dal russo}{dal russo}},
+% fromslovak = {{}{}},% FIXME: missing
+ fromslovene = {{dallo sloveno}{dallo sloveno}},
+ fromspanish = {{dallo spagnolo}{dallo spagnolo}},
+ fromswedish = {{dal svedese}{dal svedese}},
+ countryde = {{Germania}{DE}},
+ countryep = {{Unione Europea}{EP}},
+ countryeu = {{Unione Europea}{EU}},
+ countryfr = {{Francia}{FR}},
+ countryuk = {{Regno Unito}{GB}},
+ countryus = {{Stati Uniti d'America}{US}},
+ patent = {{brevetto}{brev\adddot}},
+ patentde = {{brevetto tedesco}{brev\adddot\ tedesco}},
+ patenteu = {{brevetto europeo}{brev\adddot\ europeo}},
+ patentfr = {{brevetto francese}{brev\adddot\ francese}},
+ patentuk = {{brevetto britannico}{brev\adddot\ britannico}},
+ patentus = {{brevetto americano}{brev\adddot\ americano}},
+ patreq = {{brevetto richiesto}{brev\adddot\ rich\adddot}},
+ patreqde = {{brevetto tedesco richiesto}{brev\adddot\ tedesco rich\adddot}},
+ patreqeu = {{brevetto europeo richiesto}{brev\adddot\ europeo rich\adddot}},
+ patreqfr = {{brevetto francese richiesto}{brev\adddot\ francese rich\adddot}},
+ patrequk = {{brevetto britannico richiesto}{brev\adddot\ britannico rich\adddot}},
+ patrequs = {{brevetto U.S.A\adddot\ richiesto}{brev\adddot\ U.S.A\adddot\ rich\adddot}},
+ file = {{file}{file}},
+ library = {{biblioteca}{biblioteca}},
+ abstract = {{abstract}{abstract}},
+ annotation = {{annotazione}{annotazione}},
+ commonera = {{Era Volgare}{E\adddot V\adddot}},
+ beforecommonera = {{avanti Era Volgare}{a\adddot E\adddot V\adddot}},
+ annodomini = {{d\adddot C\adddot}{d\adddot C\adddot}},
+ beforechrist = {{a\adddot C\adddot}{a\adddot C\adddot}},
+% circa = {{}{}},% FIXME: missing
+% spring = {{}{}},% FIXME: missing
+% summer = {{}{}},% FIXME: missing
+% autumn = {{}{}},% FIXME: missing
+% winter = {{}{}},% FIXME: missing
+% springN = {{}{}},% FIXME: missing
+% summerN = {{}{}},% FIXME: missing
+% autumnN = {{}{}},% FIXME: missing
+% winterN = {{}{}},% FIXME: missing
+% springS = {{}{}},% FIXME: missing
+% summerS = {{}{}},% FIXME: missing
+% autumnS = {{}{}},% FIXME: missing
+% winterS = {{}{}},% FIXME: missing
+% Q1 = {{}{}},% FIXME: missing
+% Q2 = {{}{}},% FIXME: missing
+% Q3 = {{}{}},% FIXME: missing
+% Q4 = {{}{}},% FIXME: missing
+% QD1 = {{}{}},% FIXME: missing
+% QD2 = {{}{}},% FIXME: missing
+% QD3 = {{}{}},% FIXME: missing
+% S1 = {{}{}},% FIXME: missing
+% S2 = {{}{}},% FIXME: missing
+}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/lbx/latvian-ms.lbx b/macros/latex/contrib/biblatex-ms/latex/lbx/latvian-ms.lbx
new file mode 100644
index 0000000000..3c0f1cccff
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/lbx/latvian-ms.lbx
@@ -0,0 +1,794 @@
+\ProvidesFile{latvian-ms.lbx}
+[\abx@lbxid]
+
+\DeclareRedundantLanguages{latvian}{latvian}
+
+\NewBibliographyString{%
+ locjanuary,
+ locfebruary,
+ locmarch,
+ locapril,
+ locmay,
+ locjune,
+ locjuly,
+ locaugust,
+ locseptember,
+ lococtober,
+ locnovember,
+ locdecember,
+ locspring,
+ locsummer,
+ locautumn,
+ locwinter,
+ locdateyear,
+ dateyear}
+
+\DeclareBibliographyExtras{%
+ \providetoggle{lbx@lv@datewhen}%
+ \providecommand*{\lbx@lv@requestwhendate}{\toggletrue{lbx@lv@datewhen}}%
+ \DeclareCapitalPunctuation{.!?}%
+ \protected\def\bibrangedash{%
+ \textemdash\penalty\hyphenpenalty}% breakable dash
+ \let\finalandcomma=\empty
+ \let\finalandsemicolon=\empty
+ \protected\def\mkbibordinal#1{\stripzeros{#1}\adddot}%
+ \protected\def\mkbibmascord{\mkbibordinal}%
+ \protected\def\mkbibfemord{\mkbibordinal}%
+ \protected\def\mkbibneutord{\mkbibordinal}%
+ \protected\def\mkbibdatelong#1#2#3{%
+ \iffieldundef{#1}
+ {}
+ {\iffieldbibstring{#1}
+ {\bibstring{\thefield{#1}}}
+ {\dateeraprintpre{#1}%
+ \ifboolexpr{test {\iffieldundef{#2}} and test {\iffieldundef{#3}}}
+ {\iftoggle{lbx@lv@datewhen}
+ {\mkbibordinal{\thefield{#1}}\addspace\bibstring{locdateyear}}
+ {\stripzeros{\thefield{#1}}}}
+ {\mkbibordinal{\thefield{#1}}\addspace\bibstring{dateyear}\space}}}%
+ \iffieldundef{#3}
+ {}
+ {\mkbibordinal{\thefield{#3}}%
+ \iffieldundef{#2}{}{\nobreakspace}}%
+ \iffieldundef{#2}
+ {}
+ {\iftoggle{lbx@lv@datewhen}
+ {\lbx@lv@mkbibdatemonthwhen{\thefield{#2}}}
+ {\mkbibmonth{\thefield{#2}}}}}%
+ \protected\def\mkbibdateshort#1#2#3{%
+ \iffieldundef{#3}
+ {}
+ {\mkdayzeros{\thefield{#3}}\adddot}%
+ \iffieldundef{#2}
+ {}
+ {\mkmonthzeros{\thefield{#2}}\adddot}%
+ \iffieldbibstring{#1}
+ {\bibstring{\thefield{#1}}}
+ {\dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}%
+ \ifboolexpr{test {\iffieldundef{#2}} and test {\iffieldundef{#3}}}
+ {}
+ {\adddot}}}%
+ \expandafter\protected\expandafter\def\csname mkbibtime24h\endcsname#1#2#3#4{%
+ \iffieldundef{#1}
+ {}
+ {\mktimezeros{\thefield{#1}}%
+ \iffieldundef{#2}{}{\bibtimesep}}%
+ \iffieldundef{#2}
+ {}
+ {\mktimezeros{\thefield{#2}}%
+ \iffieldundef{#3}{}{\bibtimesep}}%
+ \iffieldundef{#3}
+ {}
+ {\mktimezeros{\thefield{#3}}}%
+ \iffieldundef{#4}{}
+ {\bibtimezonesep
+ \mkbibtimezone{\thefield{#4}}}}%
+ \expandafter\protected\expandafter\def\csname mkbibtime12h\endcsname#1#2#3#4{%
+ \stripzeros{\mktimehh{\thefield{#1}}}\bibtimesep
+ \forcezerosmdt{\thefield{#2}}%
+ \iffieldundef{#3}{}
+ {\bibtimesep
+ \forcezerosmdt{\thefield{#3}}}%
+ \space
+ \ifnumless{\thefield{#1}}{12}
+ {\bibstring{am}}
+ {\bibstring{pm}}%
+ \iffieldundef{#4}{}
+ {\space\bibtimezonesep
+ \parentext{\mkbibtimezone{\thefield{#4}}}}}%
+ \protected\def\mkbibyeardivisiondateshort#1#2{%
+ \iffieldundef{#1}
+ {}
+ {\iffieldbibstring{#1}
+ {\bibstring{\thefield{#1}}}
+ {\dateeraprintpre{#1}%
+ \iffieldundef{#2}
+ {\iftoggle{lbx@lv@datewhen}
+ {\mkbibordinal{\thefield{#1}}\addspace\bibstring{locdateyear}}
+ {\stripzeros{\thefield{#1}}}}
+ {\mkbibordinal{\thefield{#1}}\addspace\bibstring{dateyear}\space}}}%
+ \iftoggle{lbx@lv@datewhen}
+ {\mkbibyeardivision{date\thefield{#2}}}
+ {\mkbibyeardivision{\thefield{#2}}}}%
+ \let\mkbibyeardivisiondatelong\mkbibyeardivisiondateshort
+ \savecommand\mkdaterangecomp
+ \savecommand\mkdaterangecompextra
+ \protected\def\mkdaterangecomp{%
+ \lbx@lv@mkdaterangetrunc@long{long}}%
+ \protected\def\mkdaterangecompextra{%
+ \lbx@lv@mkdaterangetruncextra@long{long}}%
+ \def\lbx@lv@makewhendate@i#1{%
+ \expandafter\savecommand\csname abx@ffd@#1@\lbx@lv@whendate@date\endcsname
+ \cspreto{abx@ffd@#1@\lbx@lv@whendate@date}{\lbx@lv@requestwhendate}}%
+ \providecommand*{\lbx@lv@makewhendate}[2][*]{%
+ \def\lbx@lv@whendate@date{#2}%
+ \def\lbx@lv@whendate@formats{#1}%
+ \expandafter\forcsvlist
+ \expandafter\lbx@lv@makewhendate@i
+ \expandafter{\lbx@lv@whendate@formats}}%
+ %\lbx@lv@makewhendate{eventdate}%
+ \def\lbx@lv@mkdottednormrange@i#1{%
+ \ifinteger{#1}
+ {\mkbibordinal{#1}}
+ {#1}}
+ \protected\def\lbx@lv@mkdottednormrange#1{%
+ \mknormrange*[\@firstofone][\lbx@lv@mkdottednormrange@i]{#1}}%
+ % this redefines \mkpageprefix to put the page number as suffix
+ \savecommand\blx@mkpageprefix
+ \protected\long\def\blx@mkpageprefix#1[#2]#3{%
+ \blx@mkpageprefix@i[{#2}]{#3}%
+ \ifnumeral{#3}
+ {\ppspace\bibstring{#1}}
+ {\ifnumerals{#3}
+ {\ppspace\bibstring{#1s}}
+ {\def\pno{\bibstring{#1}}%
+ \def\ppno{\bibstring{#1s}}}}}%
+ % NOTE: a few field formats are redefined here, this overrides
+ % corresponding style and preamble definitions.
+ % If you want to overwrite the changes made here, use
+ % \DefineBibliographyExtras{magyar}{...}
+ % Do not forget to make these changes undone with
+ % \UndefineBibliographyExtras{magyar}{...}
+ % to avoid them spilling out later.
+ \savefieldformat{pages}%
+ \DeclareFieldFormat{pages}{%
+ \mkpageprefix[bookpagination][\lbx@lv@mkdottednormrange]{#1}}%
+ \savefieldformat{postnote}%
+ \DeclareFieldFormat{postnote}{%
+ \mkpageprefix[bookpagination][\lbx@lv@mkdottednormrange]{#1}}%
+ \savefieldformat{volcitepages}%
+ \DeclareFieldFormat{volcitepages}{%
+ \mkpageprefix[pagination][\lbx@lv@mkdottednormrange]{#1}}%
+ \savefieldformat{multipostnote}%
+ \DeclareFieldFormat{multipostnote}{%
+ \mkpageprefix[pagination][\lbx@lv@mkdottednormrange]{#1}}%
+ \savefieldformat{chapter}%
+ \DeclareFieldFormat{chapter}{%
+ \ifnumerals{#1}{\mkbibordinal{#1}}{#1}
+ \addnbspace
+ \bibstring{chapter}}%
+ \savefieldformat{volume}%
+ \DeclareFieldFormat{volume}{%
+ \ifnumerals{#1}{\mkbibordinal{#1}}{#1}
+ \addnbspace
+ \bibstring{volume}}%
+ \savefieldformat{part}%
+ \DeclareFieldFormat{part}{%
+ \addcomma\space% <- this is *really* bad, don't try this at home
+ % In general leading or trailing punctuation in field formats should be
+ % avoided and should instead be dealt with in the appropriate bibmacros.
+ % The part field is special because its standard definition is '.#1'.
+ % Additionally, \printfield{part} is called all over the place, so we
+ % can't simply redefine a macro here.
+ \ifnumerals{#1}{\mkbibordinal{#1}}{#1}%
+ \addnbspace
+ \bibstring{part}}%
+ \savefieldformat{version}%
+ \DeclareFieldFormat{version}{%
+ \ifnumerals{#1}{\mkbibordinal{#1}}{#1}
+ \addnbspace
+ \bibstring{version}}%
+}
+
+\UndeclareBibliographyExtras{%
+ \def\lbx@lv@restorewhendate@i#1{%
+ \expandafter\restorecommand
+ \csname abx@ffd@#1@\lbx@lv@whendate@date\endcsname}%
+ \providecommand*{\lbx@lv@restorewhendate}[2][*]{%
+ \def\lbx@lv@whendate@date{#2}%
+ \def\lbx@lv@whendate@formats{#1}%
+ \expandafter\forcsvlist
+ \expandafter\lbx@lv@restorewhendate@i
+ \expandafter{\lbx@lv@whendate@formats}}%
+ %\lbx@lv@restorewhendate{eventdate}%
+ \restorecommand\mkdaterangecomp
+ \restorecommand\mkdaterangecompextra
+ \restorecommand\mknormrange
+ \restorecommand\blx@mkpageprefix
+ \restorefieldformat{pages}%
+ \restorefieldformat{postnote}%
+ \restorefieldformat{volcitepages}%
+ \restorefieldformat{multipostnote}%
+ \restorefieldformat{chapter}%
+ \restorefieldformat{volume}%
+ \restorefieldformat{part}%
+ \restorefieldformat{version}%
+}
+
+\DeclareBibliographyStrings{%
+ bibliography = {{Bibliogr\={a}fija}{Bibliogr\={a}fija}},
+ references = {{Literat\={u}ras saraksts}{Literat\={u}ras saraksts}},
+ shorthands = {{Sa\={\i}sin\={a}jumu saraksts}{Sa\={\i}sin\={a}jumi}},
+ % FIXME: not sure if correct, the standard editor translation seems to be the same as redactor
+ editor = {{izdev\={e}js}{izdev\adddot}},
+ editors = {{izdev\={e}ji}{izdev\adddot}},
+ compiler = {{sast\={a}d\={\i}t\={a}js}{sast\={a}d\adddot}},
+ compilers = {{sast\={a}d\={\i}t\={a}ji}{sast\={a}d\adddot}},
+ redactor = {{redaktors}{redakt\adddot}},
+ redactors = {{redaktori}{radakt\adddot}},
+ reviser = {{revidents}{revid\adddot}},
+ revisers = {{revidenti}{revid\adddot}},
+ founder = {{dibin\={a}t\={a}js}{dib\adddot}},
+ founders = {{dibin\={a}t\={a}ji}{dib\adddot}},
+ continuator = {{turpin\={a}t\={a}js}{turp\adddot}},
+ continuators = {{turpin\={a}t\={a}ji}{turp\adddot}},
+ collaborator = {{l\={\i}dzstr\={a}dnieks}{l\={\i}dzstr\adddot}},
+ collaborators = {{l\={\i}dzstr\={a}dnieki}{l\={\i}dzstr\adddot}},
+ translator = {{tulkot\={a}js}{tulk\adddot}},
+ translators = {{tulkot\={a}ji}{tulk\adddot}},
+ commentator = {{koment\={e}t\={a}js}{koment\adddot}},
+ commentators = {{koment\={e}t\={a}ji}{koment\adddot}},
+ annotator = {{anot\={a}cijas autors}{anot\adddotspace autors}},
+ annotators = {{anot\={a}cijas autori}{anot\adddotspace autori}},
+ commentary = {{koment\={a}rs}{koment\adddot}},
+ annotations = {{anot\={a}cijas}{anot\={a}c\adddot}},
+ introduction = {{ievads}{ievads}},
+ foreword = {{priek\v{s}v\={a}rds}{priek\v{s}v\adddot}},
+ afterword = {{p\={e}cv\={a}rds}{p\={e}cv\adddot}},
+ editortr = {{izdev\={e}js un tulkot\={a}js}{izdev\adddotspace un tulk\adddot}},
+ editorstr = {{izdev\={e}ji un tulkot\={a}ji}{izdev\adddotspace un tulk\adddot}},
+ editorco = {{izdev\={e}js un koment\={e}t\={a}js}{izdev\adddotspace un koment\adddot}},
+ editorsco = {{izdev\={e}ji un koment\={e}t\={a}ji}{izdev\adddotspace un koment\adddot}},
+ editoran = {{izdev\={e}js un anot\={a}cijas autors}%
+ {izdev\adddotspace un anot\adddotspace autors}},
+ editorsan = {{izdev\={e}ji un anot\={a}cijas autori}%
+ {izdev\adddotspace un anot\adddotspace autori}},
+ editorin = {{izdev\={e}js un ievada autors}{izdev\adddotspace un ievada autors}},
+ editorsin = {{izdev\={e}ji un ievada autori}{izdev\adddotspace un ievada autori}},
+ editorfo = {{izdev\={e}js un priek\v{s}v\={a}rda autors}%
+ {izdev\adddotspace un priek\v{s}v\adddotspace autors}},
+ editoraf = {{izdev\={e}js un p\={e}cv\={a}rda autors}%
+ {izdev\adddotspace un p\={e}cv\adddotspace autors}},
+ editorsaf = {{izdev\={e}ji un p\={e}cv\={a}rda autori}%
+ {izdev\adddotspace un p\={e}cv\adddotspace autori}},
+ editortrco = {{izdev\={e}js, tulkot\={a}js un koment\={e}t\={a}js}%
+ {izdev\adddot, tulk\adddotspace un koment\adddot}},
+ editorstrco = {{izdev\={e}ji, tulkot\={a}ji un koment\={e}t\={a}ji}%
+ {izdev\adddot, tulk\adddotspace un koment\adddot}},
+ editortran = {{izdev\={e}js, tulkot\={a}js un anot\={a}cijas autors}%
+ {izdev\adddot, tulk\adddotspace un anot\adddotspace autors}},
+ editorstran = {{izdev\={e}ji, tulkot\={a}ji un anot\={a}cijas autori}%
+ {izdev\adddot, tulk\adddotspace un anot\adddotspace autori}},
+ editortrin = {{izdev\={e}js, tulkot\={a}js un ievada autors}%
+ {izdev\adddot, tulk\adddotspace un ievada autors}},
+ editorstrin = {{izdev\={e}ji, tulkot\={a}ji un ievada autori}%
+ {izdev\adddot, tulk\adddotspace un ievada autori}},
+ editortrfo = {{izdev\={e}js, tulkot\={a}js un priek\v{s}v\={a}rds autors}%
+ {izdev\adddot, tulk\adddotspace un priek\v{s}v\adddotspace autors}},
+ editorstrfo = {{izdev\={e}ji, tulkot\={a}ji un priek\v{s}v\={a}rds autori}%
+ {izdev\adddot, tulk\adddotspace un priek\v{s}v\adddotspace autori}},
+ editortraf = {{izdev\={e}js, tulkot\={a}js un p\={e}cv\={a}rda autors}%
+ {izdev\adddot, tulk\adddotspace un p\={e}cv\adddotspace autors}},
+ editorstraf = {{izdev\={e}ji, tulkot\={a}ji un p\={e}cv\={a}rda autori}%
+ {izdev\adddot, tulk\adddotspace un p\={e}cv\adddotspace autori}},
+ editorcoin = {{izdev\={e}js, koment\={e}t\={a}js un ievada autors}%
+ {izdev\adddot, koment\adddotspace un ievada autors}},
+ editorscoin = {{izdev\={e}ji, koment\={e}t\={a}ji un ievada autori}%
+ {izdev\adddot, koment\adddotspace un ievada autori}},
+ editorcofo = {{izdev\={e}js, koment\={e}t\={a}js un priek\v{s}v\={a}rds autors}%
+ {izdev\adddot, koment\adddotspace un priek\v{s}v\adddotspace autors}},
+ editorscofo = {{izdev\={e}ji, koment\={e}t\={a}ji un priek\v{s}v\={a}rds autori}%
+ {izdev\adddot, koment\adddotspace un priek\v{s}v\adddotspace autori}},
+ editorcoaf = {{izdev\={e}js, koment\={e}t\={a}js un p\={e}cv\={a}rda autors}%
+ {izdev\adddot, koment\adddotspace un p\={e}cv\adddotspace autors}},
+ editorscoaf = {{izdev\={e}ji, koment\={e}t\={a}ji un p\={e}cv\={a}rda autori}%
+ {izdev\adddot, koment\adddotspace un p\={e}cv\adddotspace autori}},
+ editoranin = {{izdev\={e}js, anot\={a}cijas un ievada autors}%
+ {izdev\adddot, anot\adddotspace un ievada autors}},
+ editorsanin = {{izdev\={e}ji, anot\={a}cijas un ievada autori}%
+ {izdev\adddot, anot\adddotspace un ievada autori}},
+ editoranfo = {{izdev\={e}js, anot\={a}cijas un priek\v{s}v\={a}rda autors}%
+ {izdev\adddot, anot\adddotspace un priek\v{s}v\adddotspace autors}},
+ editorsanfo = {{izdev\={e}ji, anot\={a}cijas un priek\v{s}v\={a}rda autori}%
+ {izdev\adddot, anot\adddotspace un priek\v{s}v\adddotspace autori}},
+ editoranaf = {{izdev\={e}js, anot\={a}cijas un p\={e}cv\={a}rda autors}%
+ {izdev\adddot, anot\adddotspace un p\={e}cv\adddotspace autors}},
+ editorsanaf = {{izdev\={e}ji, anot\={a}cijas un p\={e}cv\={a}rda autori}%
+ {izdev\adddot, anot\adddotspace un p\={e}cv\adddotspace autori}},
+ editortrcoin = {{izdev\={e}js, tulkot\={a}js, koment\={e}t\={a}js un ievada autors}%
+ {izdev\adddot, tulk\adddot, koment\adddotspace un ievada autors}},
+ editorstrcoin = {{izdev\={e}ji, tulkot\={a}ji, koment\={e}t\={a}ji un ievada autori}%
+ {izdev\adddot, tulk\adddot, koment\adddotspace un ievada autori}},
+ editortrcofo = {{izdev\={e}js, tulkot\={a}js, koment\={e}t\={a}js un priek\v{s}v\={a}rda autors}%
+ {izdev\adddot, tulk\adddot, koment\adddotspace un priek\v{s}v\adddotspace autors}},
+ editorstrcofo = {{izdev\={e}ji, tulkot\={a}ji, koment\={e}t\={a}ji un priek\v{s}v\={a}rda autori}%
+ {izdev\adddot, tulk\adddot, koment\adddotspace un priek\v{s}v\adddotspace autori}},
+ editortrcoaf = {{izdev\={e}js, tulkot\={a}js, koment\={e}t\={a}js un p\={e}cv\={a}rda autors}%
+ {izdev\adddot, tulk\adddot, koment\adddotspace un p\={e}cv\adddotspace autors}},
+ editorstrcoaf = {{izdev\={e}ji, tulkot\={a}ji, koment\={e}t\={a}ji un p\={e}cv\={a}rda autori}%
+ {izdev\adddot, tulk\adddot, koment\adddotspace un p\={e}cv\adddotspace autori}},
+ editortranin = {{izdev\={e}js, koment\={e}t\={a}js, anot\={a}cijas un ievada autors}%
+ {izdev\adddot, koment\adddot, anot\adddotspace un ievada autors}},
+ editorstranin = {{izdev\={e}ji, koment\={e}t\={a}ji, anot\={a}cijas un ievada autori}%
+ {izdev\adddot, koment\adddot, anot\adddotspace un ievada autori}},
+ editortranfo = {{izdev\={e}js, koment\={e}t\={a}js, anot\={a}cijas un priek\v{s}v\={a}rda autors}%
+ {izdev\adddot, koment\adddot, anot\adddotspace un priek\v{s}v\adddotspace autors}},
+ editorstranfo = {{izdev\={e}ji, koment\={e}t\={a}ji, anot\={a}cijas un priek\v{s}v\={a}rda autori}%
+ {izdev\adddot, koment\adddot, anot\adddotspace un priek\v{s}v\adddotspace autori}},
+ editortranaf = {{izdev\={e}js, koment\={e}t\={a}js, anot\={a}cijas un p\={e}cv\={a}rda autors}%
+ {izdev\adddot, koment\adddot, anot\adddotspace un p\={e}cv\adddotspace autors}},
+ editorstranaf = {{izdev\={e}ji, koment\={e}t\={a}ji, anot\={a}cijas un p\={e}cv\={a}rda autori}%
+ {izdev\adddot, koment\adddot, anot\adddotspace un p\={e}cv\adddotspace autori}},
+ translatorco = {{tulkot\={a}js un koment\={e}t\={a}js}{tulk\adddotspace un koment\adddot}},
+ translatorsco = {{tulkot\={a}ji un koment\={e}t\={a}ji}{tulk\adddotspace un koment\adddot}},
+ translatoran = {{tulkot\={a}js un anot\={a}cijas autors}%
+ {tulk\adddotspace un anot\adddotspace autors}},
+ translatorsan = {{tulkot\={a}ji un anot\={a}cijas autori}%
+ {tulk\adddotspace un anot\adddotspace autori}},
+ translatorin = {{tulkot\={a}js un ievada autors}{tulk\adddotspace un ievada autors}},
+ translatorsin = {{tulkot\={a}ji un ievada autori}{tulk\adddotspace un ievada autori}},
+ translatorfo = {{tulkot\={a}js un priek\v{s}v\={a}rda autors}%
+ {tulk\adddotspace un priek\v{s}v\adddotspace autors}},
+ translatorsfo = {{tulkot\={a}ji un priek\v{s}v\={a}rda autori}%
+ {tulk\adddotspace un priek\v{s}v\adddotspace autori}},
+ translatoraf = {{tulkot\={a}js un p\={e}cv\={a}rda autors}%
+ {tulk\adddotspace un p\={e}cv\adddotspace autors}},
+ translatorsaf = {{tulkot\={a}ji un p\={e}cv\={a}rda autori}%
+ {tulk\adddotspace un p\={e}cv\adddotspace autori}},
+ translatorcoin = {{tulkot\={a}js, koment\={e}t\={a}js un ievada autors}%
+ {tulk\adddot, koment\adddotspace un ievada autors}},
+ translatorscoin = {{tulkot\={a}ji, koment\={e}t\={a}ji un ievada autori}%
+ {tulk\adddot, koment\adddotspace un ievada autori}},
+ translatorcofo = {{tulkot\={a}js, koment\={e}t\={a}js un priek\v{s}v\={a}rda autors}%
+ {tulk\adddot, koment\adddotspace un priek\v{s}v\adddotspace autors}},
+ translatorscofo = {{tulkot\={a}ji, koment\={e}t\={a}ji un priek\v{s}v\={a}rda autori}%
+ {tulk\adddot, koment\adddotspace un priek\v{s}v\adddotspace autori}},
+ translatorcoaf = {{tulkot\={a}js, koment\={e}t\={a}js un p\={e}cv\={a}rda autors}%
+ {tulk\adddot, koment\adddotspace un p\={e}cv\adddotspace autors}},
+ translatorscoaf = {{tulkot\={a}ji, koment\={e}t\={a}ji un p\={e}cv\={a}rda autori}%
+ {tulk\adddot, koment\adddotspace un p\={e}cv\adddotspace autori}},
+ translatoranin = {{tulkot\={a}js, anot\={a}cijas un ievada autors}%
+ {tulk\adddot, anot\adddotspace un ievada autors}},
+ translatorsanin = {{tulkot\={a}ji, anot\={a}cijas un ievada autori}%
+ {tulk\adddot, anot\adddotspace un ievada autori}},
+ translatoranfo = {{tulkot\={a}js, anot\={a}cijas un priek\v{s}v\={a}rda autors}%
+ {tulk\adddot, anot\adddotspace un priek\v{s}v\adddotspace autors}},
+ translatorsanfo = {{tulkot\={a}ji, anot\={a}cijas un priek\v{s}v\={a}rda autori}%
+ {tulk\adddot, anot\adddotspace un priek\v{s}v\adddotspace autori}},
+ translatoranaf = {{tulkot\={a}js, anot\={a}cijas un p\={e}cv\={a}rda autors}%
+ {tulk\adddot, anot\adddotspace un p\={e}cv\adddotspace autors}},
+ translatorsanaf = {{tulkot\={a}ji, anot\={a}cijas un p\={e}cv\={a}rda autori}%
+ {tulk\adddot, anot\adddotspace un p\={e}cv\adddotspace autori}},
+ organizer = {{organiz\={e}t\={a}js}{organiz\adddot}},
+ organizers = {{organiz\={e}t\={a}ji}{organiz\adddot}},
+ % FIXME: currently by* strings can appear akward if they're followed by multiple
+ % words connected by "and" or feminine nouns and abbreviate=false is used
+ byorganizer = {{organiz\={e}jis}{organiz\adddot}},
+ byauthor = {{sarakst\={\i}jis}{sarakst\adddot}},
+ byeditor = {{izdevis}{izdevis}},
+ bycompiler = {{sast\={a}d\={\i}jis}{sast\={a}d\adddot}},
+ byredactor = {{redi\v{g}\={e}jis}{redi\v{g}\adddot}},
+ byreviser = {{revid\={e}jis}{revid\adddot}},
+ byreviewer = {{recenz\={e}jis}{recenz\adddot}},
+ byfounder = {{dibin\={a}jis}{dib\adddot}},
+ bycontinuator = {{turpin\={a}jis}{turpin\adddot}},
+ bycollaborator = {{ar sadarb\={\i}bu no}{ar sadarb\={\i}bu no}},
+ bytranslator = {{tulkojis}{tulk\adddot}},
+ bycommentator = {{koment\={e}jis}{koment\adddot}},
+ byannotator = {{anot\={a}ciju sast\={a}d\={\i}jis}{anot\adddotspace sast\={a}d\adddot}},
+ withcommentator = {{ar koment\={a}riem no}{ar koment\adddotspace no}},
+ withannotator = {{ar anot\={a}ciju no}{ar anot\adddotspace no}},
+ withintroduction = {{ar ievadu no}{ar ievadu no}},
+ withforeword = {{ar priek\v{s}v\={a}rdu no}{ar priek\v{s}v\adddotspace no}},
+ withafterword = {{ar p\={e}cv\={a}rdu no}{ar p\={e}cv\adddotspace no}},
+ byeditortr = {{izdevis un tulkojis}{izdev\adddotspace un tulk\adddot}},
+ byeditorco = {{izdevis un koment\={e}jis}{izdev\adddotspace un koment\adddot}},
+ byeditoran = {{izdevis un anot\={a}ciju sast\={a}d\={\i}jis}%
+ {izdev\adddotspace un anot\adddotspace sast\={a}d\adddot}},
+ byeditorin = {{izdevis un ievadu sast\={a}d\={\i}jis}%
+ {izdev\adddotspace un ievadu sast\={a}d\adddot}},
+ byeditorfo = {{izdevis un priek\v{s}v\={a}rdu sast\={a}d\={\i}jis}%
+ {izdev\adddotspace un priek\v{s}v\adddotspace sast\={a}d\adddot}},
+ byeditoraf = {{izdevis un p\={e}cv\={a}rdu sast\={a}d\={\i}jis}%
+ {izdev\adddotspace un p\={e}cv\adddotspace sast\={a}d\adddot}},
+ byeditortrco = {{izdevis, tulkojis un koment\={e}jis}%
+ {izdev\adddot, tulk\adddotspace un koment\adddot}},
+ byeditortran = {{izdevis, tulkojis un anot\={a}ciju sast\={a}d\={\i}jis}%
+ {izdev\adddot, tulk\adddotspace un anot\adddotspace sast\={a}d\adddot}},
+ byeditortrin = {{izdevis, tulkojis un ievadu sast\={a}d\={\i}jis}%
+ {izdev\adddot, tulk\adddotspace un ievadu sast\={a}d\adddot}},
+ byeditortrfo = {{izdevis, tulkojis un priek\v{s}v\={a}rdu sast\={a}d\={\i}jis}%
+ {izdev\adddot, tulk\adddotspace un priek\v{s}v\adddotspace sast\={a}d\adddot}},
+ byeditortraf = {{izdevis, tulkojis un p\={e}cv\={a}rdu sast\={a}d\={\i}jis}%
+ {izdev\adddot, tulk\adddotspace un p\={e}cv\adddotspace sast\={a}d\adddot}},
+ byeditorcoin = {{izdevis, koment\={e}jis un ievadu sast\={a}d\={\i}jis}%
+ {izdev\adddot, koment\adddotspace un ievadu sast\={a}d\adddot}},
+ byeditorcofo = {{izdevis, koment\={e}jis un priek\v{s}v\={a}rdu sast\={a}d\={\i}jis}%
+ {izdev\adddot, koment\adddotspace un priek\v{s}v\adddotspace sast\={a}d\adddot}},
+ byeditorcoaf = {{izdevis, koment\={e}jis un p\={e}cv\={a}rdu sast\={a}d\={\i}jis}%
+ {izdev\adddot, koment\adddotspace un p\={e}cv\adddotspace sast\={a}d\adddot}},
+ byeditoranin = {{izdevis, anot\={a}ciju un ievadu sast\={a}d\={\i}jis}%
+ {izdev\adddot, anot\adddotspace un ievadu sast\={a}d\adddot}},
+ byeditoranfo = {{izdevis, anot\={a}ciju un priek\v{s}v\={a}rdu sast\={a}d\={\i}jis}%
+ {izdev\adddot, anot\adddotspace un priek\v{s}v\adddotspace sast\={a}d\adddot}},
+ byeditoranaf = {{izdevis, anot\={a}ciju un p\={e}cv\={a}rdu sast\={a}d\={\i}jis}%
+ {izdev\adddot, anot\adddotspace un p\={e}cv\adddotspace sast\={a}d\adddot}},
+ byeditortrcoin = {{izdevis, tulkojis, koment\={e}jis un ievadu sast\={a}d\={\i}jis}%
+ {izdev\adddot, tulk\adddot, koment\adddotspace un ievadu sast\={a}d\adddot}},
+ byeditortrcoin = {{izdevis, tulkojis, koment\={e}jis un priek\v{s}v\={a}rdu sast\={a}d\={\i}jis}%
+ {izdev\adddot, tulk\adddot, koment\adddotspace un priek\v{s}v\adddotspace sast\={a}d\adddot}},
+ byeditortrcoaf = {{izdevis, tulkojis, koment\={e}jis un p\={e}cv\={a}rdu sast\={a}d\={\i}jis}%
+ {izdev\adddot, tulk\adddot, koment\adddotspace un p\={e}cv\adddotspace sast\={a}d\adddot}},
+ byeditortranin = {{izdevis, koment\={e}jis, anot\={a}ciju un ievadu sast\={a}d\={\i}jis}%
+ {izdev\adddot, koment\adddot, anot\adddotspace un ievadu sast\={a}d\adddot}},
+ byeditortranfo = {{izdevis, koment\={e}jis, anot\={a}ciju priek\v{s}v\={a}rdu sast\={a}d\={\i}jis}%
+ {izdev\adddot, koment\adddot, anot\adddotspace un priek\v{s}v\adddotspace sast\={a}d\adddot}},
+ byeditortranaf = {{izdevis, koment\={e}jis, anot\={a}ciju un p\={e}cv\={a}rdu sast\={a}d\={\i}jis}%
+ {izdev\adddot, koment\adddot, anot\adddotspace un p\={e}cv\adddotspace sast\={a}d\adddot}},
+ bytranslatorco = {{tulkojis un koment\={e}jis}{tulk\adddotspace un koment\adddot}},
+ bytranslatoran = {{tulkojis un anot\={a}ciju sast\={a}d\={\i}jis}%
+ {tulk\adddotspace un anot\adddotspace sast\={a}d\adddot}},
+ bytranslatorin = {{tulkojis un ievadu sast\={a}d\={\i}jis}%
+ {tulk\adddotspace un ievadu sast\={a}d\adddot}},
+ bytranslatorfo = {{tulkojis un priek\v{s}v\={a}rdu sast\={a}d\={\i}jis}%
+ {tulk\adddotspace un priek\v{s}v\adddotspace sast\={a}d\adddot}},
+ bytranslatoraf = {{tulkojis un p\={e}cv\={a}rdu sast\={a}d\={\i}jis}%
+ {tulk\adddotspace un p\={e}cv\adddotspace sast\={a}d\adddot}},
+ bytranslatorcoin = {{tulkojis, koment\={e}jis un ievadu sast\={a}d\={\i}jis}%
+ {tulk\adddot, koment\adddotspace un ievadu sast\={a}d\adddot}},
+ bytranslatorcofo = {{tulkojis, koment\={e}jis un priek\v{s}v\={a}rdu sast\={a}d\={\i}jis}%
+ {tulk\adddot, koment\adddotspace un priek\v{s}v\adddotspace sast\={a}d\adddot}},
+ bytranslatorcoaf = {{tulkojis, koment\={e}jis un p\={e}cv\={a}rdu sast\={a}d\={\i}jis}%
+ {tulk\adddot, koment\adddotspace un p\={e}cv\adddotspace sast\={a}d\adddot}},
+ bytranslatoranin = {{tulkojis, anot\={a}ciju un ievadu sast\={a}d\={\i}jis}%
+ {tulk\adddot, anot\adddotspace un ievadu sast\={a}d\adddot}},
+ bytranslatoranfo = {{tulkojis, anot\={a}ciju un priek\v{s}v\={a}rdu sast\={a}d\={\i}jis}%
+ {tulk\adddot, anot\adddotspace un priek\v{s}v\adddotspace sast\={a}d\adddot}},
+ bytranslatoranaf = {{tulkojis, anot\={a}ciju un p\={e}cv\={a}rdu sast\={a}d\={\i}jis}%
+ {tulk\adddot, anot\adddotspace un p\={e}cv\adddotspace sast\={a}d\adddot}},
+ and = {{un}{un}},
+ andothers = {{un citi}{u\adddotspace c\adddot}},
+ andmore = {{un t\={a} t\={a}l\={a}k}{utt\adddot}},
+ volume = {{s\={e}jums}{s\={e}jums}},
+ volumes = {{s\={e}jumi}{s\={e}jumi}},
+ % FIXME: should be after the volume count not before, e.g. "10 s\={e}jumos"
+ % involumes = {{s\={e}jumos}{s\={e}jumos}},
+ jourvol = {{izdevums}{izdev\adddot}},
+ jourser = {{s\={e}rija}{s\={e}rija}},
+ book = {{gr\={a}mata}{gr\={a}m\adddot}},
+ part = {{da\c{l}a}{da\c{l}a}},
+ issue = {{izdevums}{izdev\adddot}},
+ newseries = {{jaun\={a}s s\={e}rijas}{jaun\={a}s s\={e}r\adddot}},
+ oldseries = {{vec\={a}s s\={e}rijas}{vec\={a}s s\={e}rijas}},
+ edition = {{izdevums}{izdev\adddot}},
+ reprint = {{atk\={a}rtots izdevums}{atk\={a}rt\adddotspace izdev\adddot}},
+ reprintof = {{atk\={a}rtots izdevums no}{atk\={a}rt\adddotspace izdev\adddotspace no}},
+ reprintas = {{atk\={a}rtoti izdots k\={a}}{atk\={a}rt\adddotspace izdots k\={a}}},
+ reprintfrom = {{atk\={a}rtots izdevums no}{atk\={a}rt\adddotspace izdev\adddotspace no}},
+ translationof = {{tulkojums no}{tulk\adddotspace no}},
+ translationas = {{tulkots k\={a}}{tulk\adddotspace k\={a}}},
+ translationfrom = {{tulkots no}{tulk\adddotspace no}},
+ reviewof = {{recenzija}{recenz\adddot}},
+ origpubas = {{ori\v{g}in\={a}li public\={e}ts k\={a}}{ori\v{g}\adddotspace public\adddotspace k\={a}}},
+ origpubin = {{ori\v{g}in\={a}li public\={e}ts}{ori\v{g}\adddotspace public\adddot}},
+ astitle = {{k\={a}}{k\={a}}},
+ bypublisher = {{no}{no}},
+ nodate = {{bez datuma}{bez dat\adddot}},
+ page = {{lappuse}{lpp\adddot}},
+ pages = {{lappuses}{lpp\adddot}},
+ column = {{sleja}{sleja}},
+ columns = {{slejas}{slejas}},
+ line = {{rinda}{rinda}},
+ lines = {{rindas}{rindas}},
+ verse = {{pants}{pants}},
+ verses = {{panti}{panti}},
+ section = {{noda\c{l}a}{nod\adddot}},
+ sections = {{noda\c{l}as}{nod\adddot}},
+ paragraph = {{rindkopa}{rindk\adddot}},
+ paragraphs = {{rindkopas}{rindk\adddot}},
+ pagetotal = {{lappuse}{lpp\adddot}},
+ pagetotals = {{lappuses}{lpp\adddot}},
+ columntotal = {{sleja}{sleja}},
+ columntotals = {{slejas}{slejas}},
+ linetotal = {{rinda}{rinda}},
+ linetotals = {{rindas}{rindas}},
+ versetotal = {{pants}{pants}},
+ versetotals = {{panti}{panti}},
+ sectiontotal = {{noda\c{l}a}{nod\adddot}},
+ sectiontotals = {{noda\c{l}as}{nod\adddot}},
+ paragraphtotal = {{rindkopa}{rindk\adddot}},
+ paragraphtotals = {{rindkopas}{rindk\adddot}},
+ in = {{}{}}, % Works well as an empty string
+ inseries = {{s\={e}rij\={a}s}{s\={e}rij\={a}s}},
+ ofseries = {{s\={e}rijas}{s\={e}rijas}},
+ number = {{numurs}{nr\adddot}},
+ chapter = {{noda\c{l}a}{nod\adddot}},
+ % bathesis = {{bakalaura darbs}{bak\adddotspace darbs}},
+ mathesis = {{ma\v{g}istra darbs}{ma\v{g}\adddotspace darbs}},
+ phdthesis = {{doktora gr\={a}da disert\={a}cija}{dokt\adddotspace gr\={a}da disert\adddot}},
+ candthesis = {{kandid\={a}ta disert\={a}cija}{kand\adddotspace disert\adddot}},
+ resreport = {{p\={e}tniec\={\i}bas darba p\={a}rskats}{p\={e}tn\adddotspace darba p\={a}rsk\adddot}},
+ techreport = {{tehniskais zi\c{n}ojums}{tehn\adddotspace zi\c{n}\adddot}},
+ software = {{programmat\={u}ra}{progr\adddot}},
+ datacd = {{datu CD}{datu CD}},
+ audiocd = {{audio CD}{audio CD}},
+ version = {{versija}{versija}},
+ url = {{pieejams}{pieejams}},
+ urlfrom = {{pieejams no}{pieejams no}},
+ urlseen = {{apl\={u}kots\aftergroup\lbx@lv@requestwhendate}{apl\={u}kots\aftergroup\lbx@lv@requestwhendate}},
+ inpreparation = {{tiek gatavots}{tiek gatavots}},
+ submitted = {{iesniegts}{iesniegts}},
+ forthcoming = {{gaid\={a}mais}{gaid\={a}mais}},
+ inpress = {{pres\={e}}{pres\={e}}},
+ prepublished = {{agr\={a}k public\={e}ts}{agr\={a}k public\adddot}},% FIXME: not sure if correct
+ citedas = {{turpm\={a}k cit\={e}ts k\={a}}{turpm\={a}k cit\={e}ts k\={a}}},
+ % thiscite = {{}{}},% FIXME: missing
+ seenote = {{skat\={\i}t piez\={\i}mi}{skat\adddotspace piez\adddot}},
+ quotedin = {{cit\={e}ts}{cit\={e}ts}},
+ % idem = {{}{}},% FIXME: missing
+ % idemsf = {{}{}},% FIXME: missing
+ % idemsm = {{}{}},% FIXME: missing
+ % idemsn = {{}{}},% FIXME: missing
+ % idempf = {{}{}},% FIXME: missing
+ % idempm = {{}{}},% FIXME: missing
+ % idempn = {{}{}},% FIXME: missing
+ % idempp = {{}{}},% FIXME: missing
+ % ibidem = {{}{}},% FIXME: missing
+ % opcit = {{}{}},% FIXME: missing
+ % loccit = {{}{}},% FIXME: missing
+ % confer = {{}{}},% FIXME: missing
+ % sequens = {{}{}},% FIXME: missing
+ % sequentes = {{}{}},% FIXME: missing
+ % passim = {{}{}},% FIXME: missing
+ see = {{skat\={\i}t}{skat\adddot}},
+ seealso = {{skat\={\i}t ar\={\i}}{skat\adddotspace ar\={\i}}},
+ backrefpage = {{cit\={e}ts lappus\={e}}{cit\={e}ts lpp\adddot}},
+ backrefpages = {{cit\={e}ts lappus\={e}s}{cit\={e}ts lpp\adddot}},
+ january = {{janv\={a}ris}{janv\adddot}},
+ february = {{febru\={a}ris}{febr\adddot}},
+ march = {{marts}{marts}},
+ april = {{apr\={\i}lis}{apr\adddot}},
+ may = {{maijs}{maijs}},
+ june = {{j\={u}nijs}{j\={u}n\adddot}},
+ july = {{j\={u}lijs}{j\={u}l\adddot}},
+ august = {{augusts}{aug\adddot}},
+ september = {{septembris}{sept\adddot}},
+ october = {{oktobris}{okt\adddot}},
+ november = {{novembris}{nov\adddot}},
+ december = {{decembris}{dec\adddot}},
+ locjanuary = {{janv\={a}r\={\i}}{janv\adddot}},
+ locfebruary = {{febru\={a}r\={\i}}{febr\adddot}},
+ locmarch = {{mart\={a}}{mart\={a}}},
+ locapril = {{apr\={\i}l\={\i}}{apr\adddot}},
+ locmay = {{maij\={a}}{maij\={a}}},
+ locjune = {{j\={u}nij\={a}}{j\={u}n\adddot}},
+ locjuly = {{j\={u}lij\={a}}{j\={u}l\adddot}},
+ locaugust = {{august\={a}}{aug\adddot}},
+ locseptember = {{septembr\={\i}}{sept\adddot}},
+ lococtober = {{oktobr\={\i}}{okt\adddot}},
+ locnovember = {{novembr\={\i}}{nov\adddot}},
+ locdecember = {{decembr\={\i}}{dec\adddot}},
+ langamerican = {{amerik\={a}\c{n}u}{amerik\={a}\c{n}u}},
+ langbrazilian = {{braz\={\i}lie\v{s}u}{braz\={\i}lie\v{s}u}},
+ langbulgarian = {{bulg\={a}ru}{bulg\={a}ru}},
+ langcatalan = {{katal\={a}\c{n}u}{katal\={a}\c{n}u}},
+ langcroatian = {{horv\={a}tu}{horv\={a}tu}},
+ langczech = {{\v{c}ehu}{\v{c}ehu}},
+ langdanish = {{d\={a}\c{n}u}{d\={a}\c{n}u}},
+ langdutch = {{n\={\i}derlandie\v{s}u}{n\={\i}derlandie\v{s}u}},
+ langenglish = {{ang\c{l}u}{ang\c{l}u}},
+ langestonian = {{igau\c{n}u}{igau\c{n}u}},
+ langfinnish = {{somu}{somu}},
+ langfrench = {{fran\v{c}u}{fran\v{c}u}},
+ langgalician = {{galsie\v{s}u}{galsie\v{s}u}},
+ langgerman = {{v\={a}cu}{v\={a}cu}},
+ langgreek = {{grie\c{k}u}{grie\c{k}u}},
+ langhungarian = {{ung\={a}ru}{ung\={a}ru}},
+ langitalian = {{it\={a}\c{l}u}{it\={a}\c{l}u}},
+ langjapanese = {{jap\={a}\c{n}u}{jap\={a}\c{n}u}},
+ langlatin = {{lat\={\i}\c{n}u}{lat\={\i}\c{n}u}},
+ langlatvian = {{latvie\v{s}u}{latvie\v{s}u}},
+ langnorwegian = {{norv\={e}\v{g}u}{norv\={e}\v{g}u}},
+ langpolish = {{po\c{l}u}{po\c{l}u}},
+ langportuguese = {{portug\={a}\c{l}u}{portug\={a}\c{l}u}},
+ langrussian = {{krievu}{krievu}},
+ langslovak = {{slov\={a}ku}{slov\={a}ku}},
+ langslovene = {{slov\={e}\c{n}u}{slov\={e}\c{n}u}},
+ langspanish = {{sp\={a}\c{n}u}{sp\={a}\c{n}u}},
+ langswedish = {{zviedru}{zviedru}},
+ langukrainian = {{ukrai\c{n}u}{ukrai\c{n}u}},
+ fromamerican = {{no amerik\={a}\c{n}u}{no amerik\={a}\c{n}u}},
+ frombrazilian = {{no braz\={\i}lie\v{s}u}{no braz\={\i}lie\v{s}u}},
+ frombulgarian = {{no bulg\={a}ru}{no bulg\={a}ru}},
+ fromcatalan = {{no katal\={a}\c{n}u}{no katal\={a}\c{n}u}},
+ fromcroatian = {{no horv\={a}tu}{no horv\={a}tu}},
+ fromczech = {{no \v{c}ehu}{no \v{c}ehu}},
+ fromdanish = {{no d\={a}\c{n}u}{no d\={a}\c{n}u}},
+ fromdutch = {{no n\={\i}derlandie\v{s}u}{no n\={\i}derlandie\v{s}u}},
+ fromenglish = {{no ang\c{l}u}{no ang\c{l}u}},
+ fromestonian = {{no igau\c{n}u}{no igau\c{n}u}},
+ fromfinnish = {{no somu}{no somu}},
+ fromfrench = {{no fran\v{c}u}{no fran\v{c}u}},
+ fromgalician = {{no galsie\v{s}u}{no galsie\v{s}u}},
+ fromgerman = {{no v\={a}cu}{no v\={a}cu}},
+ fromgreek = {{no grie\c{k}u}{no grie\c{k}u}},
+ fromhungarian = {{no ung\={a}ru}{no ung\={a}ru}},
+ fromitalian = {{no it\={a}\c{l}u}{no it\={a}\c{l}u}},
+ fromjapanese = {{no jap\={a}\c{n}u}{no jap\={a}\c{n}u}},
+ fromlatin = {{no lat\={\i}\c{n}u}{no lat\={\i}\c{n}u}},
+ fromlatvian = {{no latvie\v{s}u}{no latvie\v{s}u}},
+ fromnorwegian = {{no norv\={e}\v{g}u}{no norv\={e}\v{g}u}},
+ frompolish = {{no po\c{l}u}{no po\c{l}u}},
+ fromportuguese = {{no portug\={a}\c{l}u}{no portug\={a}\c{l}u}},
+ fromrussian = {{no krievu}{no krievu}},
+ fromslovak = {{no slov\={a}ku}{no slov\={a}ku}},
+ fromslovene = {{no slov\={e}\c{n}u}{no slov\={e}\c{n}u}},
+ fromspanish = {{no sp\={a}\c{n}u}{no sp\={a}\c{n}u}},
+ fromswedish = {{no zviedru}{no zviedru}},
+ fromukrainian = {{no ukrai\c{n}u}{no ukrai\c{n}u}},
+ countryde = {{V\={a}cija}{DE}},
+ countryeu = {{Eiropas Savien\={\i}ba}{ES}},
+ countryep = {{Eiropas Parlaments}{EP}},
+ countryfr = {{Francija}{FR}},
+ countryuk = {{Lielbrit\={a}nija}{GB}},
+ countryus = {{Amerikas Savienot\={a}s Valstis}{ASV}},
+ patent = {{patents}{patents}},
+ patentde = {{v\={a}cu patents}{v\={a}cu pat\adddot}},
+ patenteu = {{Eiropas patents}{Eiropas pat\adddot}},
+ patentfr = {{fran\v{c}u patents}{fran\v{c}u pat\adddot}},
+ patentuk = {{ang\c{l}u patents}{ang\c{l}u pat\adddot}},
+ patentus = {{ASV patents}{ASV pat\adddot}},
+ patreq = {{patenta piepras\={\i}jums}{pat\adddotspace piepras\adddot}},
+ patreqde = {{v\={a}cu patenta piepras\={\i}jums}{V\={a}cu pat\adddotspace piepras\adddot}},
+ patreqeu = {{Eiropas patenta piepras\={\i}jums}{Eiropas pat\adddotspace piepras\adddot}},
+ patreqfr = {{fran\v{c}u patenta piepras\={\i}jums}{fran\v{c}u pat\adddotspace piepras\adddot}},
+ patrequk = {{ang\c{l}u patenta piepras\={\i}jums}{ang\c{l}u pat\adddotspace piepras\adddot}},
+ patrequs = {{ASV patenta piepras\={\i}jums}{ASV pat\adddotspace piepras\adddot}},
+ file = {{fails}{fails}},
+ library = {{bibliot\={e}ka}{bibliot\={e}ka}},
+ abstract = {{atrefer\={e}jums}{atref\adddot}},
+ annotation = {{anot\={a}cija}{anot\={a}cija}},
+ commonera = {{m\={u}su \={e}ra}{m\adddotspace \={e}\adddot}},
+ beforecommonera = {{pirms m\={u}su \={e}ras}{p\adddotspace m\adddotspace \={e}\adddot}},
+ annodomini = {{p\={e}c Kristus dzim\v{s}anas}{AD}},
+ beforechrist = {{pirms Kristus dzim\v{s}anas}{BC}},
+ circa = {{ap}{ap}},
+ spring = {{pavasaris}{pav\adddot}},
+ summer = {{vasara}{vas\adddot}},
+ autumn = {{rudens}{rud\adddot}},
+ winter = {{ziema}{ziema}},
+% springN = {{}{}},% FIXME: missing
+% summerN = {{}{}},% FIXME: missing
+% autumnN = {{}{}},% FIXME: missing
+% winterN = {{}{}},% FIXME: missing
+% springS = {{}{}},% FIXME: missing
+% summerS = {{}{}},% FIXME: missing
+% autumnS = {{}{}},% FIXME: missing
+% winterS = {{}{}},% FIXME: missing
+% Q1 = {{}{}},% FIXME: missing
+% Q2 = {{}{}},% FIXME: missing
+% Q3 = {{}{}},% FIXME: missing
+% Q4 = {{}{}},% FIXME: missing
+% QD1 = {{}{}},% FIXME: missing
+% QD2 = {{}{}},% FIXME: missing
+% QD3 = {{}{}},% FIXME: missing
+% S1 = {{}{}},% FIXME: missing
+% S2 = {{}{}},% FIXME: missing
+ locspring = {{pavasar\={\i}}{pav\adddot}},
+ locsummer = {{vasar\={a}}{vas\adddot}},
+ locautumn = {{ruden\={\i}}{rud\adddot}},
+ locwinter = {{ziem\={a}}{ziem\={a}}},
+ am = {{AM}{AM}},
+ pm = {{PM}{PM}},
+ dateyear = {{gada}{g\adddot}},
+ locdateyear = {{gad\={a}}{g\adddot}},
+}
+
+\protected\gdef\lbx@lv@mkbibdatemonthwhen#1{%
+ \ifcase0#1\relax
+ #1\BibliographyWarning{Month out of range}%
+ \or\abx@bibmonth{locjanuary}%
+ \or\abx@bibmonth{locfebruary}%
+ \or\abx@bibmonth{locmarch}%
+ \or\abx@bibmonth{locapril}%
+ \or\abx@bibmonth{locmay}%
+ \or\abx@bibmonth{locjune}%
+ \or\abx@bibmonth{locjuly}%
+ \or\abx@bibmonth{locaugust}%
+ \or\abx@bibmonth{locseptember}%
+ \or\abx@bibmonth{lococtober}%
+ \or\abx@bibmonth{locnovember}%
+ \or\abx@bibmonth{locdecember}%
+ \else
+ #1\BibliographyWarning{Month out of range}%
+ \fi}%
+
+\protected\gdef\lbx@lv@mkdaterangetrunc@long#1#2{%
+ \blx@if@printanytimes{#2}
+ {\mkdaterangefull{#1}{#2}}
+ {\lbx@lv@mkdaterangetrunc@long@i{#1}{#2}}}
+
+\protected\gdef\lbx@lv@mkdaterangetrunc@long@i#1#2{%
+ \begingroup
+ \blx@metadateinfo{#2}%
+ \iffieldundef{#2year}
+ {\blx@nounit}
+ {\printtext[{#2date}]{%
+ \datecircaprint
+ \iffieldundef{#2yeardivision}
+ {\ifdateyearsequal{#2}{#2end}
+ {\iffieldsequal{#2month}{#2endmonth}
+ {\csuse{mkbibdate#1}{#2year}{}{#2day}}
+ {\csuse{mkbibdate#1}{#2year}{#2month}{#2day}}}
+ {\csuse{mkbibdate#1}{#2year}{#2month}{#2day}}}%
+ {\csuse{mkbibyeardivisiondate#1}{#2year}{#2yeardivision}}%
+ \dateeraprint{#2year}%
+ \dateuncertainprint
+ \iffieldundef{#2endyear}
+ {}
+ {\iffieldequalstr{#2endyear}{}
+ {\mbox{\bibdaterangesep}}
+ {\bibdaterangesep
+ \enddatecircaprint
+ \iffieldundef{#2yeardivision}
+ {\ifdateyearsequal{#2}{#2end}
+ {\csuse{mkbibdate#1}{}{#2endmonth}{#2endday}}
+ {\csuse{mkbibdate#1}{#2endyear}{#2endmonth}{#2endday}}}
+ {\ifdateyearsequal{#2}{#2end}
+ {\csuse{mkbibyeardivisiondate#1}{}{#2endyeardivision}}
+ {\csuse{mkbibyeardivisiondate#1}{#2endyear}{#2endyeardivision}}}%
+ \enddateuncertainprint
+ \dateeraprint{#2endyear}}}}}%
+ \endgroup}
+
+\protected\gdef\lbx@lv@mkdaterangetruncextra@long#1#2{%
+ \blx@if@printanytimes{#2}
+ {\mkdaterangefullextra{#1}{#2}}
+ {\lbx@lv@mkdaterangetruncextra@long@i{#1}{#2}}}
+
+\protected\gdef\lbx@lv@mkdaterangetruncextra@long@i#1#2{%
+ \begingroup
+ \blx@metadateinfo{#2}%
+ \iffieldundef{#2year}
+ {\blx@nounit}
+ {\printtext[{#2date}]{%
+ \datecircaprint
+ \iffieldundef{#2yeardivision}
+ {\ifdateyearsequal{#2}{#2end}
+ {\iffieldsequal{#2month}{#2endmonth}
+ {\csuse{mkbibdate#1}{#2year}{}{#2day}}
+ {\csuse{mkbibdate#1}{#2year}{#2month}{#2day}}}
+ {\csuse{mkbibdate#1}{#2year}{#2month}{#2day}}}%
+ {\csuse{mkbibyeardivisiondate#1}{#2year}{#2yeardivision}}%
+ \dateeraprint{#2year}%
+ \dateuncertainprint
+ \iffieldundef{#2endyear}
+ {\printfield{extradate}}
+ {\iffieldequalstr{#2endyear}{}
+ {\printfield{extradate}%
+ \mbox{\bibdaterangesep}}
+ {\bibdaterangesep
+ \enddatecircaprint
+ \iffieldundef{#2yeardivision}
+ {\ifdateyearsequal{#2}{#2end}
+ {\csuse{mkbibdate#1}{}{#2endmonth}{#2endday}}
+ {\csuse{mkbibdate#1}{#2endyear}{#2endmonth}{#2endday}}}
+ {\ifdateyearsequal{#2}{#2end}
+ {\csuse{mkbibyeardivisiondate#1}{}{#2endyeardivision}}
+ {\csuse{mkbibyeardivisiondate#1}{#2endyear}{#2endyeardivision}}}%
+ \printfield{extradate}%
+ \enddateuncertainprint
+ \dateeraprint{#2endyear}}}}}%
+ \endgroup}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/lbx/lithuanian-ms.lbx b/macros/latex/contrib/biblatex-ms/latex/lbx/lithuanian-ms.lbx
new file mode 100644
index 0000000000..454da7f55f
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/lbx/lithuanian-ms.lbx
@@ -0,0 +1,855 @@
+\ProvidesFile{lithuanian-ms.lbx}
+[\abx@lbxid]
+
+\DeclareRedundantLanguages{lithuanian}{lithuanian}
+
+% This file requires UTF-8 support!
+
+\lbx@ifutfinput
+ {}
+ {\PackageError{biblatex}
+ {Lithuanian requires UTF-8 support}
+ {The file 'lithuanian.lbx' requires UTF-8 encoding but you
+ seem\MessageBreak to be using a different encoding.
+ This is a fatal error. I will\MessageBreak abort loading
+ russian.lbx now.}%
+ \endinput}
+
+\DeclareBibliographyExtras{%
+ \DeclareCapitalPunctuation{.:!?}%
+ \protected\def\bibrangedash{%
+ \textendash\penalty\hyphenpenalty}% breakable endash
+ \def\lbx@lt@bibdaterangeseplong{\space\textendash\space}%
+ \def\lbx@lt@bibnumdaterangeseplong{\textendash}%
+ \def\lbx@lt@bibdaterangesepshort{\textendash}%
+ \let\lbx@lt@bibnumdaterangesepshort\lbx@lt@bibdaterangesepshort
+ \savecommand\bibdatesep
+ \protected\def\bibdatesep{\nobreakspace}%
+ \let\finalandcomma=\empty
+ \let\finalandsemicolon=\empty
+ \undef\mkbibordinal
+ \protected\def\mkbibmascord#1{\stripzeros{#1}-as}%
+ \protected\def\mkbibfemord#1{\stripzeros{#1}-a}%
+ \undef\mkbibneutord
+ \savecommand\mkbibordedition
+ \savecommand\mkbibordseries
+ \def\mkbibordedition{\mkbibmascord}%
+ \def\mkbibordseries{\mkbibfemord}%
+ \savecommand\lbx@lfromlang
+ \savecommand\lbx@sfromlang
+ \def\lbx@lfromlang{%
+ \iflistundef{origlanguage}
+ {}
+ {\printlist[lfromoriglanguage]{origlanguage}\space}}%
+ \def\lbx@sfromlang{%
+ \iflistundef{origlanguage}
+ {}
+ {\printlist[sfromoriglanguage]{origlanguage}\space}}%
+ \let\lbx@lt@ifdayrange\@secondoftwo
+ \def\lbx@lt@ifdropdaystring{\lbx@lt@ifdayrange}%
+ \let\lbx@lt@ifmonthrange\@secondoftwo
+ \def\lbx@lt@ifdropmonthstring{\lbx@lt@ifmonthrange}%
+ \let\lbx@lt@ifyearrange\@secondoftwo
+ \def\lbx@lt@ifdropyearstring{\lbx@lt@ifyearrange}%
+ \protected\def\mkbibdatelong#1#2#3{%
+ \iffieldundef{#1}
+ {}
+ {\iffieldbibstring{#1}
+ {\bibstring{\thefield{#1}}}
+ {\dateeraprintpre{#1}%
+ \stripzeros{\thefield{#1}}%
+ \lbx@lt@ifdropyearstring
+ {}
+ {\addnbspace\bibstring{year}}}%
+ \iffieldundef{#2}{}{\addnbspace}}%
+ \iffieldundef{#2}
+ {}
+ {\lbx@lt@mkgenmonth{\thefield{#2}}%
+ \iffieldundef{#3}
+ {\lbx@lt@ifdropmonthstring
+ {}
+ {\addnbspace\bibstring{month}}}
+ {\addnbspace}}%
+ \iffieldundef{#3}
+ {}
+ {\stripzeros{\thefield{#3}}%
+ \lbx@lt@ifdropdaystring{}{\addnbspace\bibstring{day}}}%
+ }%
+ \protected\def\mkbibdateshort#1#2#3{%
+ \iffieldundef{#1}
+ {}
+ {\iffieldbibstring{#1}
+ {\bibstring{\thefield{#1}}}
+ {\dateeraprintpre{#1}%
+ \forcezerosy{\thefield{#1}}}}%
+ \iffieldundef{#2}
+ {}
+ {\iffieldundef{#1}{}{\bibdatesep}%
+ \forcezerosmdt{\thefield{#2}}}%
+ \iffieldundef{#3}
+ {}
+ {\iffieldundef{#2}{}{\bibdatesep}%
+ \forcezerosmdt{\thefield{#3}}}%
+ }%
+ \let\mkbibyeardivisiondatelong\mkbibyeardivisiondateshort
+ \savecommand\mkdaterangefull
+ \savecommand\mkdaterangefullextra
+ \savecommand\mkdaterangetrunc
+ \savecommand\mkdaterangetruncextra
+ \protected\def\mkdaterangefull{%
+ \lbx@lt@mkdaterangefull}%
+ \protected\def\mkdaterangefullextra{%
+ \lbx@lt@mkdaterangefullextra}%
+ \protected\def\mkdaterangetrunc{%
+ \lbx@lt@mkdaterangetrunc}%
+ \protected\def\mkdaterangetruncextra{%
+ \lbx@lt@mkdaterangetruncextra}%
+ \savecommand\bibtimesep
+ \protected\def\bibtimesep{.}%
+ \expandafter\protected\expandafter\def\csname mkbibtime24h\endcsname#1#2#3#4{%
+ \iffieldundef{#1}
+ {}
+ {\mktimezeros{\thefield{#1}}%
+ \iffieldundef{#2}{}{\bibtimesep}}%
+ \iffieldundef{#2}
+ {}
+ {\mktimezeros{\thefield{#2}}%
+ \iffieldundef{#3}{}{\bibtimesep}}%
+ \iffieldundef{#3}
+ {}
+ {\mktimezeros{\thefield{#3}}}%
+ \iffieldundef{#4}{}
+ {\bibtimezonesep
+ \mkbibtimezone{\thefield{#4}}}}%
+ \csletcs{mkbibtime12h}{mkbibtime24h}%
+ \protected\def\mkbibyeardivisiondateshort#1#2{%
+ \dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}%
+ \iffieldundef{#1}{}{\addspace}%
+ \mkbibyeardivision{\thefield{#2}}%
+ }%
+ \let\mkbibyeardivisiondatelong\mkbibyeardivisiondateshort
+}%
+
+\UndeclareBibliographyExtras{%
+ \restorecommand\bibdatesep
+ \restorecommand\mkbibordedition
+ \restorecommand\mkbibordseries
+ \restorecommand\lbx@lfromlang
+ \restorecommand\lbx@sfromlang
+ \restorecommand\bibtimesep
+ \restorecommand\mkdaterangefull
+ \restorecommand\mkdaterangefullextra
+ \restorecommand\mkdaterangetrunc
+ \restorecommand\mkdaterangetruncextra
+}
+
+\NewBibliographyString{%
+ genjanuary,
+ genfebruary,
+ genmarch,
+ genapril,
+ genmay,
+ genjune,
+ genjuly,
+ genaugust,
+ genseptember,
+ genoctober,
+ gennovember,
+ gendecember,
+ year,
+ month,
+ day,
+}
+
+\DeclareBibliographyStrings{%
+ bibliography = {{Bibliografija}{Bibliografija}},
+ references = {{Literatūros sąrašas}{Literatūra}},
+ shorthands = {{Santrumpų sąrašas}{Santrumpos}},
+ editor = {{sudarytojas}{sud\adddot}},
+ editors = {{sudarytojai}{sud\adddot}},
+ compiler = {{parengėjas}{pareng\adddot}},% FIXME: unsure
+ compilers = {{parengėjai}{pareng\adddot}},% FIXME: unsure
+ redactor = {{redaktorius}{red\adddot}},
+ redactors = {{redaktoriai}{red\adddot}},
+ reviser = {{korektorius}{kor\adddot}},
+ revisers = {{korektoriai}{kor\adddot}},
+ founder = {{pradininkas}{prad\adddot}},% FIXME: unsure
+ founders = {{pradininkai}{prad\adddot}},% FIXME: unsure
+ continuator = {{tęsėjas}{tęs\adddot}},
+ continuators = {{tęsėjai}{tęs\adddot}},
+ collaborator = {{bendradarbis}{bendr\adddot}},
+ collaborators = {{bendradarbiai}{bendr\adddot}},
+ translator = {{vertėjas}{vert\adddot}},
+ translators = {{vertėjai}{vert\adddot}},
+ commentator = {{komentarų autorius}{koment\adddotspace aut\adddot}},
+ commentators = {{komentarų autoriai}{koment\adddotspace aut\adddot}},
+ annotator = {{paaiškinimų autorius}{paaišk\adddotspace aut\adddot}},
+ annotators = {{paaiškinimų autoriai}{paaišk\adddotspace aut\adddot}},
+ commentary = {{komentarai}{koment\adddot}},
+ annotations = {{paaiškinimai}{paaišk\adddot}},
+ introduction = {{įvadas}{įv\adddot}},
+ foreword = {{pratarmė}{prat\adddot}},
+ afterword = {{pabaigos žodis}{pab\adddotspace žodis}},
+ editortr = {{sudarytojas ir vertėjas}%
+ {sud\adddotspace ir vert\adddot}},
+ editorstr = {{sudarytojai ir vertėjai}%
+ {sud\adddotspace ir vert\adddot}},
+ editorco = {{sudarytojas ir komentarų autorius}%
+ {sud\adddotspace ir koment\adddotspace aut\adddot}},
+ editorsco = {{sudarytojai ir komentarų autoriai}%
+ {sud\adddotspace ir koment\adddotspace aut\adddot}},
+ editoran = {{sudarytojas ir paaiškinimų autorius}%
+ {sud\adddotspace ir paaišk\adddotspace aut\adddot}},
+ editorsan = {{sudarytojai ir paaiškinimų autoriai}%
+ {sud\adddotspace ir paaišk\adddotspace aut\adddot}},
+ editorin = {{sudarytojas ir įvado autorius}%
+ {sud\adddotspace ir įv\adddotspace aut\adddot}},
+ editorsin = {{sudarytojai ir įvado autoriai}%
+ {sud\adddotspace ir įv\adddotspace aut\adddot}},
+ editorfo = {{sudarytojas ir pratarmės autorius}%
+ {sud\adddotspace ir prat\adddotspace aut\adddot}},
+ editorsfo = {{sudarytojai ir pratarmės autoriai}%
+ {sud\adddotspace ir prat\adddotspace aut\adddot}},
+ editoraf = {{sudarytojas ir pabaigos žodžio autorius}%
+ {sud\adddotspace ir pab\adddotspace žodžio aut\adddot}},
+ editorsaf = {{sudarytojai ir pabaigos žodžio autoriai}%
+ {sud\adddotspace ir pab\adddotspace žodžio aut\adddot}},
+ editortrco = {{sudarytojas, vertėjas ir komentarų autorius}%
+ {sud., vert\adddotspace ir koment\adddotspace aut\adddot}},
+ editorstrco = {{sudarytojai, vertėjai ir komentarų autoriai}%
+ {sud., vert\adddotspace ir koment\adddotspace aut\adddot}},
+ editortran = {{sudarytojas, vertėjas ir paaiškinimų autorius}%
+ {sud., vert\adddotspace ir paaišk\adddotspace aut\adddot}},
+ editorstran = {{sudarytojai, vertėjai ir paaiškinimų autoriai}%
+ {sud., vert\adddotspace ir paaišk\adddotspace aut\adddot}},
+ editortrin = {{sudarytojas, vertėjas ir įvado autorius}%
+ {sud., vert\adddotspace ir įv\adddotspace aut\adddot}},
+ editorstrin = {{sudarytojai, vertėjai ir įvado autoriai}%
+ {sud., vert\adddotspace ir įv\adddotspace aut\adddot}},
+ editortrfo = {{sudarytojas, vertėjas ir pratarmės autorius}%
+ {sud., vert\adddotspace ir pratarmės\adddotspace aut\adddot}},
+ editorstrfo = {{sudarytojai, vertėjai ir pratarmės autoriai}%
+ {sud., vert\adddotspace ir prat\adddotspace aut\adddot}},
+ editortraf = {{sudarytojas, vertėjas ir pabaigos žodžio autorius}%
+ {sud., vert\adddotspace ir pab\adddotspace žodžio aut\adddot}},
+ editorstraf = {{sudarytojai, vertėjai ir pabaigos žodžio autoriai}%
+ {sud., vert\adddotspace ir pab\adddotspace žodžio aut\adddot}},
+ editorcoin = {{sudarytojas, komentarų ir įvado autorius}%
+ {sud., koment\adddotspace ir įv\adddotspace aut\adddot}},
+ editorscoin = {{sudarytojai, komentarų ir įvado autoriai}%
+ {sud., koment\adddotspace ir įv\adddotspace aut\adddot}},
+ editorcofo = {{sudarytojas, komentarų ir pratarmės autorius}%
+ {sud., koment\adddotspace ir prat\adddotspace aut\adddot}},
+ editorscofo = {{sudarytojai, komentarų ir pratarmės autoriai}%
+ {sud., koment\adddotspace ir prat\adddotspace aut\adddot}},
+ editorcoaf = {{sudarytojas, komentarų ir pabaigos žodžio autorius}%
+ {sud., koment\adddotspace ir pab\adddotspace žodžio aut\adddot}},
+ editorscoaf = {{sudarytojai, komentarų ir pabaigos žodžio autoriai}%
+ {sud., koment\adddotspace ir pab\adddotspace žodžio aut\adddot}},
+ editoranin = {{sudarytojas, paaiškinimų ir įvado autorius}%
+ {sud., paaišk\adddotspace ir įv\adddotspace aut\adddot}},
+ editorsanin = {{sudarytojai, paaiškinimų ir įvado autoriai}%
+ {sud., paaišk\adddotspace ir įv\adddotspace aut\adddot}},
+ editoranfo = {{sudarytojas, paaiškinimų ir pratarmės autorius}%
+ {sud., paaišk\adddotspace ir prat\adddotspace aut\adddot}},
+ editorsanfo = {{sudarytojai, paaiškinimų ir pratarmės autoriai}%
+ {sud., paaišk\adddotspace ir prat\adddotspace aut\adddot}},
+ editoranaf = {{sudarytojas, paaiškinimų ir pabaigos žodžio autorius}%
+ {sud., paaišk\adddotspace ir pab\adddotspace žodžio aut\adddot}},
+ editorsanaf = {{sudarytojai, paaiškinimų ir pabaigos žodžio autoriai}%
+ {sud., paaišk\adddotspace ir pab\adddotspace žodžio aut\adddot}},
+ editortrcoin = {{sudarytojas, vertėjas, komentarų ir įvado autorius}%
+ {sud., vert., koment\adddotspace ir įv\adddotspace aut\adddot}},
+ editorstrcoin = {{sudarytojai, vertėjai, komentarų ir įvado autoriai}%
+ {sud., vert., koment\adddotspace ir įv\adddotspace aut\adddot}},
+ editortrcofo = {{sudarytojas, vertėjas, komentarų ir pratarmės autorius}%
+ {sud., vert., koment\adddotspace ir prat\adddotspace aut\adddot}},
+ editorstrcofo = {{sudarytojai, vertėjai, komentarų ir pratarmės autoriai}%
+ {sud., vert., koment\adddotspace ir prat\adddotspace aut\adddot}},
+ editortrcoaf = {{sudarytojas, vertėjas, komentarų ir pabaigos žodžio autorius}%
+ {sud., vert., koment\adddotspace ir pab\adddotspace žodžio aut\adddot}},
+ editorstrcoaf = {{sudarytojai, vertėjai, komentarų ir pabaigos žodžio autoriai}%
+ {sud., vert., koment\adddotspace ir pab\adddotspace žodžio aut\adddot}},
+ editortranin = {{sudarytojas, vertėjas, paaiškinimų ir įvado autorius}%
+ {sud., vert., paaišk\adddotspace ir įv\adddotspace aut\adddot}},
+ editorstranin = {{sudarytojai, vertėjai, paaiškinimų ir įvado autoriai}%
+ {sud., vert., paaišk\adddotspace ir įv\adddotspace aut\adddot}},
+ editortranfo = {{sudarytojas, vertėjas, paaiškinimų ir pratarmės autorius}%
+ {sud., vert., paaišk\adddotspace ir prat\adddotspace aut\adddot}},
+ editorstranfo = {{sudarytojai, vertėjai, paaiškinimų ir pratarmės autoriai}%
+ {sud., vert., paaišk\adddotspace ir prat\adddotspace aut\adddot}},
+ editortranaf = {{sudarytojas, vertėjas, paaiškinimų ir pabaigos žodžio autorius}%
+ {sud., vert., paaišk\adddotspace ir pab\adddotspace žodžio aut\adddot}},
+ editorstranaf = {{sudarytojai, vertėjai, paaiškinimų ir pabaigos žodžio autoriai}%
+ {sud., vert., paaišk\adddotspace ir pab\adddotspace žodžio aut\adddot}},
+ translatorco = {{vertėjas ir komentarų autorius}%
+ {vert\adddotspace ir koment\adddotspace aut\adddot}},
+ translatorsco = {{vertėjai ir komentarų autoriai}%
+ {vert\adddotspace ir koment\adddotspace aut\adddot}},
+ translatoran = {{vertėjas ir paaiškinimų autorius}%
+ {vert\adddotspace ir paaišk\adddotspace aut\adddot}},
+ translatorsan = {{vertėjai ir paaiškinimų autoriai}%
+ {vert\adddotspace ir paaišk\adddotspace aut\adddot}},
+ translatorin = {{vertėjas ir įvado autorius}%
+ {vert\adddotspace ir įv\adddotspace aut\adddot}},
+ translatorsin = {{vertėjai ir įvado autoriai}%
+ {vert\adddotspace ir įv\adddotspace aut\adddot}},
+ translatorfo = {{vertėjas ir pratarmės autorius}%
+ {vert\adddotspace ir prat\adddotspace aut\adddot}},
+ translatorsfo = {{vertėjai ir pratarmės autoriai}%
+ {vert\adddotspace ir prat\adddotspace aut\adddot}},
+ translatoraf = {{vertėjas ir pabaigos žodžio autorius}%
+ {vert\adddotspace ir pab\adddotspace žodžio aut\adddot}},
+ translatorsaf = {{vertėjai ir pabaigos žodžio autoriai}%
+ {vert\adddotspace ir pab\adddotspace žodžio aut\adddot}},
+ translatorcoin = {{vertėjas, komentarų ir įvado autorius}%
+ {vert., koment\adddotspace ir įv\adddotspace aut\adddot}},
+ translatorscoin = {{vertėjai, komentarų ir įvado autoriai}%
+ {vert., koment\adddotspace ir įv\adddotspace aut\adddot}},
+ translatorcofo = {{vertėjas, komentarų ir pratarmės autorius}%
+ {vert., koment\adddotspace ir prat\adddotspace aut\adddot}},
+ translatorscofo = {{vertėjai, komentarų ir pratarmės autoriai}%
+ {vert., koment\adddotspace ir prat\adddotspace aut\adddot}},
+ translatorcoaf = {{vertėjas, komentarų ir pabaigos žodžio autorius}%
+ {vert., koment\adddotspace ir pab\adddotspace žodžio aut\adddot}},
+ translatorscoaf = {{vertėjai, komentarų ir pabaigos žodžio autoriai}%
+ {vert., koment\adddotspace ir pab\adddotspace žodžio aut\adddot}},
+ translatoranin = {{vertėjas, paaiškinimų ir įvado autorius}%
+ {vert., paaišk\adddotspace ir įv\adddotspace aut\adddot}},
+ translatorsanin = {{vertėjai, paaiškinimų ir įvado autoriai}%
+ {vert., paaišk\adddotspace ir įv\adddotspace aut\adddot}},
+ translatoranfo = {{vertėjas, paaiškinimų ir pratarmės autorius}%
+ {vert., paaišk\adddotspace ir prat\adddotspace aut\adddot}},
+ translatorsanfo = {{vertėjai, paaiškinimų ir pratarmės autoriai}%
+ {vert., paaišk\adddotspace ir prat\adddotspace aut\adddot}},
+ translatoranaf = {{vertėjas, paaiškinimų ir pabaigos žodžio autorius}%
+ {vert., paaišk\adddotspace ir pab\adddotspace žodžio aut\adddot}},
+ translatorsanaf = {{vertėjai, paaiškinimų ir pabaigos žodžio autoriai}%
+ {vert., paaišk\adddotspace ir pab\adddotspace žodžio aut\adddot}},
+ organizer = {{organizatorius}{org\adddot}},
+ organizers = {{organizatoriai}{org\adddot}},
+ byorganizer = {{organizavo}{org\adddot}},
+% byauthor = {{}{}}, %or sukūrė, or parašė
+ byeditor = {{sudarė}{sud\adddotspace}},
+ bycompiler = {{parengė}{pareng\adddotspace}},
+ byredactor = {{redagavo}{red\adddotspace}},
+ byreviser = {{tikrino}{tikr\adddotspace}},
+ byreviewer = {{recenzavo}{rec\adddotspace}},
+ byfounder = {{pradėjo}{prad\adddotspace}},
+ bycontinuator = {{tęsė}{tęs\adddotspace}},
+ bycollaborator = {{bendradarbiaujant su}{bendradarb\adddotspace su}},% FIXME: unsure
+ bytranslator = {{\lbx@lfromlang išvertė}{\lbx@sfromlang vert\adddot}},
+ bycommentator = {{komentarus parengė}{koment\adddot}},
+ byannotator = {{paaiškinimus parengė}{paaišk\adddot}},
+ withcommentator = {{komentarų autorius}{koment\adddotspace aut\adddot}},
+ withannotator = {{paaiškinimų autorius}{paaišk\adddotspace aut\adddot}},
+ withintroduction = {{įvado autorius}{įv\adddotspace aut\adddot}},
+ withforeword = {{pratarmės autorius}{prat\adddotspace aut\adddot}},
+ withafterword = {{pabaigos žodžio autorius}{pab\adddotspace žodžio aut\adddot}},
+ byeditortr = {{sudarė ir \lbx@lfromlang išvertė}%
+ {sud\adddotspace ir \lbx@sfromlang vert\adddot}},
+ byeditorco = {{sudarė ir komentarus parengė}%
+ {sud\adddotspace ir koment\adddotspace parengė}},
+ byeditoran = {{sudarė ir paaiškinimus parengė}%
+ {sud\adddotspace ir paaišk\adddotspace parengė}},
+ byeditorin = {{sudarė ir įvadą parašė}%
+ {sud\adddotspace ir įv\adddotspace parašė}},
+ byeditorfo = {{sudarė ir pratarmę parašė}%
+ {sud\adddotspace ir prat\adddotspace parašė}},
+ byeditoraf = {{sudarė ir pabaigos žodį parašė}%
+ {sud\adddotspace ir pab\adddotspace žodį parašė}},
+ byeditortrco = {{sudarė, \lbx@lfromlang išvertė ir komentarus parengė}%
+ {sud., \lbx@sfromlang vert\adddotspace ir koment\adddotspace parengė}},
+ byeditortran = {{sudarė, \lbx@lfromlang išvertė ir paaiškinimus parengė}%
+ {sud., \lbx@sfromlang vert\adddotspace ir paaišk\adddotspace parengė}},
+ byeditortrin = {{sudarė, \lbx@lfromlang išvertė ir įvadą parašė}%
+ {sud., \lbx@sfromlang vert\adddotspace ir įv\adddotspace parašė}},
+ byeditortrfo = {{sudarė, \lbx@lfromlang išvertė ir pratarmę parašė}%
+ {sud., \lbx@sfromlang vert\adddotspace ir prat\adddotspace parašė}},
+ byeditortraf = {{sudarė, \lbx@lfromlang išvertė ir pabaigos žodį parašė}%
+ {sud., \lbx@sfromlang vert\adddotspace ir pab\adddotspace žodį parašė}},
+ byeditorcoin = {{sudarė, komentarus parengė ir įvadą parašė}%
+ {sud., koment\adddotspace ir įv\adddotspace parašė}},
+ byeditorcofo = {{sudarė, komentarus parengė ir pratarmę parašė}%
+ {sud., koment\adddotspace ir prat\adddotspace parašė}},
+ byeditorcoaf = {{sudarė, komentarus parengė ir pabaigos žodį parašė}%
+ {sud., koment\adddotspace ir pab\adddotspace žodį parašė}},
+ byeditoranin = {{sudarė, paaiškinimus parengė ir įvadą parašė}%
+ {sud., paaišk\adddotspace ir įv\adddotspace parašė}},
+ byeditoranfo = {{sudarė, paaiškinimus parengė ir pratarmę parašė}%
+ {sud., paaišk\adddotspace ir prat\adddotspace parašė}},
+ byeditoranaf = {{sudarė, paaiškinimus parengė ir pabaigos žodį parašė}%
+ {sud., paaišk\adddotspace ir pab\adddotspace žodį parašė}},
+ byeditortrcoin = {{sudarė, \lbx@lfromlang išvertė, komentarus parengė ir įvadą parašė}%
+ {sud., \lbx@sfromlang vert\adddot, koment\adddotspace ir įvad\adddotspace parašė}},
+ byeditortrcofo = {{sudarė, \lbx@lfromlang išvertė, komentarus parengė ir pratarmę parašė}%
+ {sud., \lbx@sfromlang vert\adddot, koment\adddotspace ir prat\adddotspace parašė}},
+ byeditortrcoaf = {{sudarė, \lbx@lfromlang išvertė, komentarus ir pabaigos žodį parašė}%
+ {sud., \lbx@sfromlang vert\adddot, koment\adddotspace ir pab\adddotspace žodį parašė}},
+ byeditortranin = {{sudarė, \lbx@lfromlang išvertė, paaiškinimus parengė ir įvadą parašė}%
+ {sud., \lbx@sfromlang vert\adddot, paaišk\adddotspace ir pab\adddotspace žodį parašė}},
+ byeditortranfo = {{sudarė, \lbx@lfromlang išvertė, paaiškinimus parengė ir pratarmę parašė}%
+ {sud., \lbx@sfromlang vert\adddot, paaišk\adddotspace ir prat\adddotspace parašė}},
+ byeditortranaf = {{sudarė, \lbx@lfromlang išvertė, paaiškinimus parengė ir pabaigos žodį parašė}%
+ {sud., \lbx@sfromlang vert\adddot, paaišk\adddotspace ir pab\adddotspace žodį parašė}},
+ bytranslatorco = {{\lbx@lfromlang išvertė ir komentarus parengė}%
+ {\lbx@sfromlang vert\adddotspace ir koment\adddotspace parengė}},
+ bytranslatoran = {{\lbx@lfromlang išvertė ir paaiškinimus parengė}%
+ {\lbx@sfromlang vert\adddotspace ir paaišk\adddotspace parengė}},
+ bytranslatorin = {{\lbx@lfromlang išvertė ir įvadą parašė}%
+ {\lbx@sfromlang vert\adddotspace ir įv\adddotspace parašė}},
+ bytranslatorfo = {{\lbx@lfromlang išvertė ir pratarmę parašė}%
+ {\lbx@sfromlang vert\adddotspace ir prat\adddotspace parašė}},
+ bytranslatoraf = {{\lbx@lfromlang išvertė ir pabaigos žodį parašė}%
+ {\lbx@sfromlang vert\adddotspace ir pab\adddotspace žodį parašė}},
+ bytranslatorcoin = {{\lbx@lfromlang išvertė, komentarus parengė ir įvadą parašė}%
+ {\lbx@sfromlang vert\adddot, koment\adddotspace ir įv\adddotspace parašė}},
+ bytranslatorcofo = {{\lbx@lfromlang išvertė, komentarus parengė ir pratarmę parašė}%
+ {\lbx@sfromlang vert\adddot, koment\adddotspace ir prat\adddotspace parašė}},
+ bytranslatorcoaf = {{\lbx@lfromlang išvertė, komentarus parengė ir pabaigos žodį parašė}%
+ {\lbx@sfromlang vert\adddot, koment\adddotspace ir pab\adddotspace žodį parašė}},
+ bytranslatoranin = {{\lbx@lfromlang išvertė, paaiškinimus parengė ir įvadą parašė}%
+ {\lbx@sfromlang vert\adddot, paaišk\adddotspace ir įv\adddotspace parašė}},
+ bytranslatoranfo = {{\lbx@lfromlang išvertė, paaiškinimus parengė ir pratarmę parašė}%
+ {\lbx@sfromlang vert\adddot, paaišk\adddotspace ir prat\adddotspace parašė}},
+ bytranslatoranaf = {{\lbx@lfromlang išvertė, paaiškinimus parengė ir pabaigos žodį parašė}%
+ {\lbx@sfromlang vert\adddot, paaišk\adddotspace ir pab\adddotspace žodį parašė}}, %
+ and = {{ir}{ir}},
+ andothers = {{ir kiti}{ir kt\adddot}},
+ andmore = {{ir taip toliau}{ir t\adddotspace t\adddot}},
+ volume = {{tomas}{t\adddot}},
+ volumes = {{tomai}{t\adddot}},
+% involumes = {{}{}},
+ jourvol = {{tomas}{t\adddot}},
+ jourser = {{serija}{ser\adddot}},
+ book = {{knyga}{kn\adddot}},
+ part = {{dalis}{d\adddot}},
+ issue = {{numeris}{Nr.}},
+ newseries = {{nauja serija}{nauj\adddotspace ser\adddot}},
+ oldseries = {{sena serija}{sen\adddotspace ser\adddot}},
+ edition = {{leidimas}{leid\adddot}},
+ reprint = {{pakartotinis leidimas}{pakartot\adddotspace leid\adddot}},
+ reprintof = {{pakartotinis leidimas}{pakartot\adddotspace leid\adddot}},% FIXME: unsure
+ reprintas = {{perspausdinta kaip}{perspausdinta kaip}},
+ reprintfrom = {{perspausdinta iš}{perspausdinta iš}},
+ reviewof = {{recenzija}{rec\adddotspace}},
+ translationof = {{versta iš leidinio}{vert\adddotspace iš leid\adddot}},
+ translationas = {{išversta kaip}{išversta kaip}},
+ translationfrom = {{vertimas iš}{vert\adddotspace iš}},
+ origpubas = {{originaliai publikuotas kaip}{orig\adddotspace publ\adddotspace kaip}},
+ origpubin = {{originaliai publikuotas}{orig\adddotspace publ\adddotspace}},
+ astitle = {{pavadinimu}{pavadinimu}},%or kaip
+ bypublisher = {{leidykloje}{leidykloje}},% FIXME: unsure
+ page = {{puslapis}{p\adddot}},
+ pages = {{puslapiai}{p\adddot}},
+ column = {{skiltis}{skilt\adddot}},
+ columns = {{skiltys}{skilt\adddot}},
+ line = {{eilutė}{eil\adddot}},
+ lines = {{eilutės}{eil\adddot}},
+ nodate = {{sine anno}{s\adddotspace a\adddot}},
+ verse = {{eilutė}{eil\adddot}},
+ verses = {{eilutės}{eil\adddot}},
+ section = {{paragrafas}{paragr\adddot}},
+ sections = {{paragrafai}{paragr\adddot}},
+ paragraph = {{pastraipa}{pastr\adddot}},
+ paragraphs = {{pastraipos}{pastr\adddot}},
+ pagetotal = {{puslapis}{p\adddot}},
+ pagetotals = {{puslapiai}{p\adddot}},
+ columntotal = {{skiltis}{skilt\adddot}},
+ columntotals = {{skiltys}{skilt\adddot}},
+ linetotal = {{eilutė}{eil\adddot}},
+ linetotals = {{eilutės}{eil\adddot}},
+ versetotal = {{eilutė}{eil\adddot}},
+ versetotals = {{eilutės}{eil\adddot}},
+ sectiontotal = {{paragrafas}{paragr\adddot}},
+ sectiontotals = {{paragrafai}{paragr\adddot}},
+ paragraphtotal = {{pastraipa}{pastr\adddot}},
+ paragraphtotals = {{pastraipos}{pastr\adddot}},
+ in = {{in}{in}},
+% inseries = {{}{}},%or in
+ ofseries = {{iš}{iš}},
+ number = {{numeris}{Nr\adddot}},
+ chapter = {{skyrius}{sk\adddot}},
+ bathesis = {{bakalauro darbas}{bak\adddotspace darb\adddot}},
+ mathesis = {{magistro darbas}{mag\adddotspace darb\adddot}},
+ phdthesis = {{disertacija}{disert\adddot}},
+ candthesis = {{disertacija}{disert\adddot}},
+ resreport = {{mokslinė ataskaita}{moksl\adddotspace atask\adddot}},
+ techreport = {{techninė ataskaita}{techn\adddotspace atask\adddot}},
+ software = {{programinė įranga}{PĮ}},
+ datacd = {{CD-ROM}{CD-ROM}},
+ audiocd = {{audio CD}{audio CD}},
+ version = {{versija}{vers\adddot}},
+ url = {{interaktyvus}{interaktyvus}},
+ urlfrom = {{pasiekiamas per}{pasiekiamas per}},
+ urlseen = {{tikrinta}{tikrinta}},
+ inpreparation = {{rengiamas}{rengiamas}},
+ submitted = {{pateiktas}{pateiktas}},
+ forthcoming = {{pasirodysiantis}{pasirodysiantis}},
+ inpress = {{spaudoje}{spaudoje}},
+ prepublished = {{išankstinė publikacija}{išankstinė publ\adddot}},
+ citedas = {{nuo šiol cituojamas kaip}{nuo šiol}},
+ thiscite = {{čia}{čia}},
+ seenote = {{žiūrėk nuorodą}{žr\adddotspace nuor\adddot}},
+ quotedin = {{cituota}{cituota}},
+ idem = {{tas pats}{t\adddotspace p\adddot}},
+ idemsm = {{tas pats}{t\adddotspace p\adddot}},
+ idemsf = {{ta pati}{t\adddotspace p\adddot}},
+ idemsn = {{tas pats}{t\adddotspace p\adddot}},
+ idempm = {{tie patys}{t\adddotspace p\adddot}},
+ idempf = {{tos pačios}{t\adddotspace p\adddot}},
+ idempn = {{tie patys}{t\adddotspace p\adddot}},
+ idempp = {{tie patys}{t\adddotspace p\adddot}},
+ ibidem = {{ten pat}{ten pat}},
+ opcit = {{op\adddotspace cit\adddot}{op\adddotspace cit\adddot}},
+ loccit = {{loc\adddotspace cit\adddot}{loc\adddotspace cit\adddot}},
+ confer = {{palygink}{plg\adddot}},
+ sequens = {{ir sekantis}{ir kt\adddot}},
+ sequentes = {{ir sekantys}{ir kt\adddot}},
+ passim = {{passim}{pass\adddot}},
+ see = {{žiūrėk}{žr\adddot}},
+ seealso = {{taip pat žiūrėk}{t\adddotspace p\adddotspace žr\adddot}},
+ backrefpage = {{cituota puslapyje}{cit\adddotspace psl\adddot}},
+ backrefpages = {{cituota puslapiuose}{cit\adddotspace psl\adddot}},
+ january = {{sausis}{saus\adddot}},
+ february = {{vasaris}{vas\adddot}},
+ march = {{kovas}{kov\adddot}},
+ april = {{balandis}{bal\adddot}},
+ may = {{gegužė}{geg\adddot}},
+ june = {{birželis}{birž\adddot}},
+ july = {{liepa}{liepa}},
+ august = {{rugpjūtis}{rugpj\adddot}},
+ september = {{rugsėjis}{rugs\adddot}},
+ october = {{spalis}{spal\adddot}},
+ november = {{lapkritis}{lapkr\adddot}},
+ december = {{gruodis}{gruod\adddot}},
+ genjanuary = {{sausio}{saus\adddot}},
+ genfebruary = {{vasario}{vas\adddot}},
+ genmarch = {{kovo}{kov\adddot}},
+ genapril = {{balandžio}{bal\adddot}},
+ genmay = {{gegužės}{geg\adddot}},
+ genjune = {{birželio}{birž\adddot}},
+ genjuly = {{liepos}{liep\adddot}},
+ genaugust = {{rugpjūčio}{rugpj\adddot}},
+ genseptember = {{rugsėjo}{rugs\adddot}},
+ genoctober = {{spalio}{spal\adddot}},
+ gennovember = {{lapkričio}{lapkr\adddot}},
+ gendecember = {{gruodžio}{gruod\adddot}},
+ langamerican = {{amerikiečių kalba}{amer\adddotspace k\adddot}},
+ langbrazilian = {{brazilų kalba}{braz\adddotspace k\adddot}},
+ langbulgarian = {{bulgarų kalba}{bulgarų k\adddot}},
+ langcatalan = {{katalonų kalba}{katalonų k\adddot}},
+ langcroatian = {{kroatų kalba}{kroatų k\adddot}},
+ langczech = {{čekų kalba}{čekų k\adddot}},
+ langdanish = {{danų kalba}{danų k\adddot}},
+ langdutch = {{olandų kalba}{olandų k\adddot}},
+ langenglish = {{anglų kalba}{anglų k\adddot}},
+ langestonian = {{estų kalba}{estų k\adddot}},
+ langfinnish = {{suomių kalba}{suomių k\adddot}},
+ langfrench = {{prancūzų kalba}{pranc\adddotspace k\adddot}},
+ langgerman = {{vokiečių kalba}{vok\adddotspace k\adddot}},
+ langgreek = {{graikų kalba}{graikų k\adddot}},
+ langhungarian = {{vengrų kalba}{vengrų k\adddot}},
+ langitalian = {{italų kalba}{it\adddotspace k\adddot}},
+ langjapanese = {{japonų kalba}{japonų k\adddot}},
+ langlatin = {{lotynų kalba}{lot\adddotspace k\adddot}},
+ langlatvian = {{latvių kalba}{latv\adddotspace k\adddot}},
+ langlithuanian = {{lietuvių kalba}{liet\adddotspace k\adddot}},
+ langnorwegian = {{norvegų kalba}{norv\adddotspace k\adddot}},
+ langpolish = {{lenkų kalba}{lenkų k\adddot}},
+ langportuguese = {{portugalų kalba}{portug\adddotspace k\adddot}},
+ langrussian = {{rusų kalba}{rusų k\adddot}},
+ langserbian = {{serbų kalba}{serbų k\adddot}},
+ langslovak = {{slovakų kalba}{slovakų k\adddot}},
+ langslovene = {{slovėnų kalba}{slovėnų k\adddot}},
+ langspanish = {{ispanų kalba}{isp\adddotspace k\adddot}},
+ langswedish = {{švedų kalba}{švedų k\adddot}},
+ langturkish = {{turkų kalba}{turkų k\adddot}},
+ langukrainian = {{ukrainiečių kalba}{ukrain\adddotspace k\adddot}},
+ fromamerican = {{iš amerikiečių kalbos}{iš amer\adddotspace k\adddot}},
+ frombrazilian = {{iš brazilų kalbos}{iš braz\adddotspace k\adddot}},
+ frombulgarian = {{iš bulgarų kalbos}{iš bulgarų k\adddot}},
+ fromcatalan = {{iš katalonų kalbos}{iš katalonų k\adddot}},
+ fromcroatian = {{iš kroatų kalbos}{iš kroatų k\adddot}},
+ fromczech = {{iš čekų kalbos}{iš čekų k\adddot}},
+ fromdanish = {{iš danų kalbos}{iš danų k\adddot}},
+ fromdutch = {{iš olandų kalbos}{iš olandų k\adddot}},
+ fromenglish = {{iš anglų kalbos}{iš anglų k\adddot}},
+ fromestonian = {{iš estų kalbos}{iš estų k\adddot}},
+ fromfinnish = {{iš suomių kalbos}{iš suomių k\adddot}},
+ fromfrench = {{iš prancūzų kalbos}{iš pranc\adddotspace k\adddot}},
+ fromgerman = {{iš vokiečių kalbos}{iš vok\adddotspace k\adddot}},
+ fromgreek = {{iš graikų kalbos}{iš graikų k\adddot}},
+ fromhungarian = {{iš vengrų kalbos}{iš vengrų k\adddot}},
+ fromitalian = {{iš italų kalbos}{iš italų k\adddot}},
+ fromjapanese = {{iš japonų kalbos}{iš japonų k\adddot}},
+ fromlatin = {{iš lotynų kalbos}{iš lot\adddotspace k\adddot}},
+ fromlatvian = {{iš latvių kalbos}{iš latvių k\adddot}},
+ fromnorwegian = {{iš norvegų kalbos}{iš norv\adddotspace k\adddot}},
+ frompolish = {{iš lenkų kalbos}{iš lenkų k\adddot}},
+ fromportuguese = {{iš portugalų kalbos}{iš portug\adddotspace k\adddot}},
+ fromrussian = {{iš rusų kalbos}{iš rusų k\adddot}},
+ fromserbian = {{iš serbų kalbos}{iš serbų k\adddot}},
+ fromslovak = {{iš slovakų kalbos}{iš slovakų k\adddot}},
+ fromslovene = {{iš slovėnų kalbos}{iš slovėnų k\adddot}},
+ fromspanish = {{iš ispanų kalbos}{iš isp\adddotspace k\adddot}},
+ fromswedish = {{iš švedų kalbos}{iš švedų k\adddot}},
+ fromturkish = {{iš turkų kalbos}{iš turkų k\adddot}},
+ fromukrainian = {{iš ukrainiečių kalbos}{iš ukrain\adddotspace k\adddot}},
+ countryde = {{Vokietija}{DE}},
+ countryeu = {{Europos Sąjunga}{EU}},
+ countryep = {{Europos Sąjunga}{EP}},
+ countryfr = {{Prancūzija}{FR}},
+ countryuk = {{Didžioji Britanija}{DB}},
+ countryus = {{Jungtinės Amerikos Valstijos}{JAV}},
+ patent = {{patentas}{pat\adddot}},
+ patentde = {{vokiškas patentas}{vokiškas pat\adddot}},
+ patenteu = {{europinis patentas}{europinis pat\adddot}},
+ patentfr = {{prancūziškas patentas}{prancūziškas pat\adddot}},
+ patentuk = {{angliškas patentas}{angliškas pat\adddot}},
+ patentus = {{JAV\addspace patentas}{JAV\addspace pat\adddot}},
+ patreq = {{patento prašymas}{pat\adddotspace praš\adddot}},
+ patreqde = {{vokiško patento prašymas}{vokiško pat\adddotspace praš\adddot}},
+ patreqeu = {{europinio patento prašymas}{europinio pat\adddotspace praš\adddot}},
+ patreqfr = {{prancūziško patento prašymas}{prancūziško pat\adddotspace praš\adddot}},
+ patrequk = {{angliško patento prašymas}{angliško pat\adddotspace praš\adddot}},
+ patrequs = {{JAV\addspace patento prašymas}{JAV\addspace pat\adddot\ praš\adddot}},
+ file = {{byla}{b\adddot}},
+ library = {{biblioteka}{bibl\adddot}},
+ abstract = {{santrauka}{santr\adddot}},
+ annotation = {{paaiškinimas}{paaišk\adddot}},
+ commonera = {{mūsų eros}{m\adddotspace e\adddot}},
+ beforecommonera = {{prieš mūsų erą}{pr\adddotspace m\adddotspace e\adddot}},
+ annodomini = {{po Kristaus gimimo}{po\space Kr\adddot}},
+ beforechrist = {{prieš Kristaus giminimą}{pr\adddotspace Kr\adddot}},
+ circa = {{apie}{apie}},
+ spring = {{pavasaris}{pav\adddot}},
+ summer = {{vasara}{vas\adddot}},
+ autumn = {{ruduo}{ruduo}},
+ winter = {{žiema}{žiema}},
+% springN = {{}{}},% FIXME: missing
+% summerN = {{}{}},% FIXME: missing
+% autumnN = {{}{}},% FIXME: missing
+% winterN = {{}{}},% FIXME: missing
+% springS = {{}{}},% FIXME: missing
+% summerS = {{}{}},% FIXME: missing
+% autumnS = {{}{}},% FIXME: missing
+% winterS = {{}{}},% FIXME: missing
+% Q1 = {{}{}},% FIXME: missing
+% Q2 = {{}{}},% FIXME: missing
+% Q3 = {{}{}},% FIXME: missing
+% Q4 = {{}{}},% FIXME: missing
+% QD1 = {{}{}},% FIXME: missing
+% QD2 = {{}{}},% FIXME: missing
+% QD3 = {{}{}},% FIXME: missing
+% S1 = {{}{}},% FIXME: missing
+% S2 = {{}{}},% FIXME: missing
+% am = {{}{}},
+% pm = {{}{}},
+ year = {{m\adddot}{m\adddot}},
+ month = {{mėn\adddot}{mėn\adddot}},
+ day = {{d\adddot}{d\adddot}},
+}
+
+
+\protected\gdef\lbx@lt@mkgenmonth#1{%
+ \ifcase0#1\relax
+ #1\BibliographyWarning{Month out of range}%
+ \or\abx@bibmonth{genjanuary}%
+ \or\abx@bibmonth{genfebruary}%
+ \or\abx@bibmonth{genmarch}%
+ \or\abx@bibmonth{genapril}%
+ \or\abx@bibmonth{genmay}%
+ \or\abx@bibmonth{genjune}%
+ \or\abx@bibmonth{genjuly}%
+ \or\abx@bibmonth{genaugust}%
+ \or\abx@bibmonth{genseptember}%
+ \or\abx@bibmonth{genoctober}%
+ \or\abx@bibmonth{gennovember}%
+ \or\abx@bibmonth{gendecember}%
+ \else
+ #1\BibliographyWarning{Month out of range}%
+ \fi}%
+
+\protected\gdef\lbx@lt@ifdayrange@i#1{%
+ \ifboolexpr{not test {\iffieldundef{#1endyear}}
+ and test {\iffieldsequal{#1year}{#1endyear}}
+ and test {\iffieldsequal{#1month}{#1endmonth}}
+ and (test {\iffieldundef{#1hour}}
+ or not togl {blx@#1dateusetime})}}
+
+\protected\gdef\lbx@lt@ifmonthrange@i#1{%
+ \ifboolexpr{not test {\iffieldundef{#1endyear}}
+ and test {\iffieldsequal{#1year}{#1endyear}}
+ and test {\iffieldundef{#1day}}
+ and test {\iffieldundef{#1endday}}}}
+
+\protected\gdef\lbx@lt@ifyearrange@i#1{%
+ \ifboolexpr{not test {\iffieldundef{#1endyear}}
+ and test {\iffieldundef{#1month}}
+ and test {\iffieldundef{#1endmonth}}}}
+
+\gdef\lbx@lt@ifdatenumrange{%
+ \lbx@lt@ifyearrange
+ {\@firstoftwo}
+ {\lbx@lt@ifdayrange}}
+
+\protected\gdef\lbx@lt@mkdaterangetrunc#1#2{%
+ \blx@if@printanytimes{#2}
+ {\mkdaterangefull{#1}{#2}}
+ {\lbx@lt@mkdaterangetrunc@i{#1}{#2}}}
+
+\protected\gdef\lbx@lt@mkdaterangetrunc@i#1#2{%
+ \begingroup
+ \blx@metadateinfo{#2}%
+ \edef\lbx@lt@ifdayrange{\lbx@lt@ifdayrange@i{#2}}%
+ \edef\lbx@lt@ifmonthrange{\lbx@lt@ifmonthrange@i{#2}}%
+ \edef\lbx@lt@ifyearrange{\lbx@lt@ifyearrange@i{#2}}%
+ \iffieldundef{#2year}
+ {}
+ {\printtext[{#2date}]{%
+ \datecircaprint
+ \iffieldundef{#2yeardivision}
+ {\csuse{mkbibdate#1}{#2year}{#2month}{#2day}%
+ \blx@printtime{#2}{}}%
+ {\csuse{mkbibyeardivisiondate#1}{#2year}{#2yeardivision}}%
+ \dateeraprint{#2year}%
+ \dateuncertainprint
+ \iffieldundef{#2endyear}
+ {}
+ {\iffieldequalstr{#2endyear}{}
+ {\mbox{\csuse{lbx@lt@bibdaterangesep#1}}}
+ {\lbx@lt@ifdatenumrange
+ {\csuse{lbx@lt@bibnumdaterangesep#1}}
+ {\csuse{lbx@lt@bibdaterangesep#1}}%
+ \let\lbx@lt@ifdropdaystring\@secondoftwo
+ \let\lbx@lt@ifdropmonthstring\@secondoftwo
+ \let\lbx@lt@ifdropyearstring\@secondoftwo
+ \enddatecircaprint
+ \iffieldundef{#2yeardivision}
+ {\iffieldsequal{#2year}{#2endyear}
+ {\iffieldsequal{#2month}{#2endmonth}
+ {\csuse{mkbibdate#1}{}{}{#2endday}}
+ {\csuse{mkbibdate#1}{}{#2endmonth}{#2endday}}}
+ {\csuse{mkbibdate#1}{#2endyear}{#2endmonth}{#2endday}}%
+ \blx@printtime{#2}{end}}
+ {\iffieldsequal{#2year}{#2endyear}
+ {\csuse{mkbibyeardivisiondate#1}{}{#2endyeardivision}}
+ {\csuse{mkbibyeardivisiondate#1}{#2endyear}{#2endyeardivision}}}%
+ \enddateuncertainprint
+ \dateeraprint{#2endyear}}}}}%
+ \endgroup}
+
+\protected\gdef\lbx@lt@mkdaterangetruncextra#1#2{%
+ \blx@if@printanytimes{#2}
+ {\mkdaterangefullextra{#1}{#2}}
+ {\lbx@lt@mkdaterangetruncextra@i{#1}{#2}}}
+
+\protected\gdef\lbx@lt@mkdaterangetruncextra@i#1#2{%
+ \begingroup
+ \blx@metadateinfo{#2}%
+ \edef\lbx@lt@ifdayrange{\lbx@lt@ifdayrange@i{#2}}%
+ \edef\lbx@lt@ifmonthrange{\lbx@lt@ifmonthrange@i{#2}}%
+ \edef\lbx@lt@ifyearrange{\lbx@lt@ifyearrange@i{#2}}%
+ \iffieldundef{#2year}
+ {}
+ {\printtext[{#2date}]{%
+ \datecircaprint
+ \iffieldundef{#2yeardivision}
+ {\csuse{mkbibdate#1}{#2year}{#2month}{#2day}%
+ \blx@printtime{#2}{}}%
+ {\csuse{mkbibyeardivisiondate#1}{#2year}{#2yeardivision}}%
+ \dateeraprint{#2year}%
+ \dateuncertainprint
+ \iffieldundef{#2endyear}
+ {\printfield{extradate}}
+ {\iffieldequalstr{#2endyear}{}
+ {\printfield{extradate}%
+ \mbox{\csuse{lbx@lt@bibdaterangesep#1}}}
+ {\lbx@lt@ifdatenumrange
+ {\csuse{lbx@lt@bibnumdaterangesep#1}}
+ {\csuse{lbx@lt@bibdaterangesep#1}}%
+ \let\lbx@lt@ifdropdaystring\@secondoftwo
+ \let\lbx@lt@ifdropmonthstring\@secondoftwo
+ \let\lbx@lt@ifdropyearstring\@secondoftwo
+ \enddatecircaprint
+ \iffieldundef{#2yeardivision}
+ {\iffieldsequal{#2year}{#2endyear}
+ {\iffieldsequal{#2month}{#2endmonth}
+ {\csuse{mkbibdate#1}{}{}{#2endday}}
+ {\csuse{mkbibdate#1}{}{#2endmonth}{#2endday}}}
+ {\csuse{mkbibdate#1}{#2endyear}{#2endmonth}{#2endday}}%
+ \blx@printtime{#2}{end}}
+ {\iffieldsequal{#2year}{#2endyear}
+ {\csuse{mkbibyeardivisiondate#1}{}{#2endyeardivision}}
+ {\csuse{mkbibyeardivisiondate#1}{#2endyear}{#2endyeardivision}}}%
+ \printfield{extradate}%
+ \enddateuncertainprint
+ \dateeraprint{#2endyear}}}}}%
+ \endgroup}
+
+\protected\gdef\lbx@lt@mkdaterangefull#1#2{%
+ \begingroup
+ \blx@metadateinfo{#2}%
+ \iffieldundef{#2year}
+ {\blx@nounit}
+ {\printtext[{#2date}]{%
+ \datecircaprint
+ % Such a yeardivision component can only come from an ISO8601 yeardivision which replaces
+ % a normal month so if it exists, we know that a normal date print is ruled out
+ \iffieldundef{#2yeardivision}
+ {\csuse{mkbibdate#1}{#2year}{#2month}{#2day}%
+ % Optionally print the time after the date
+ \blx@printtime{#2}{}}
+ {\csuse{mkbibyeardivisiondate#1}{#2year}{#2yeardivision}}%
+ \dateuncertainprint
+ \dateeraprint{#2year}%
+ \iffieldundef{#2endyear}
+ {}
+ {\iffieldequalstr{#2endyear}{}
+ {\mbox{\csuse{lbx@lt@bibdaterangesep#1}}}
+ {\csuse{lbx@lt@bibdaterangesep#1}%
+ \enddatecircaprint
+ \iffieldundef{#2endyeardivision}
+ {\csuse{mkbibdate#1}{#2endyear}{#2endmonth}{#2endday}%
+ % Optionally print the time after the date
+ \blx@printtime{#2}{end}}
+ {\csuse{mkbibyeardivisiondate#1}{#2endyear}{#2endyeardivision}}%
+ \enddateuncertainprint
+ \dateeraprint{#2endyear}}}}}%
+ \endgroup}
+
+\protected\gdef\lbx@lt@mkdaterangefullextra#1#2{%
+ \begingroup
+ \blx@metadateinfo{#2}%
+ \iffieldundef{#2year}
+ {\blx@nounit}
+ {\printtext[{#2date}]{%
+ \datecircaprint
+ % Such a yeardivision component can only come from an ISO8601 yeardivision which replaces
+ % a normal month so if it exists, we know that a normal date print is ruled out
+ \iffieldundef{#2yeardivision}
+ {\csuse{mkbibdate#1}{#2year}{#2month}{#2day}%
+ % Optionally print the time after the date
+ \blx@printtime{#2}{}}
+ {\csuse{mkbibyeardivisiondate#1}{#2year}{#2yeardivision}}%
+ \dateuncertainprint
+ \dateeraprint{#2year}%
+ \iffieldundef{#2endyear}
+ {\printfield{extradate}}
+ {\iffieldequalstr{#2endyear}{}
+ {\printfield{extradate}%
+ \mbox{\csuse{lbx@lt@bibdaterangesep#1}}}
+ {\csuse{lbx@lt@bibdaterangesep#1}%
+ \enddatecircaprint
+ \iffieldundef{#2endyeardivision}
+ {\csuse{mkbibdate#1}{#2endyear}{#2endmonth}{#2endday}%
+ % Optionally print the time after the date
+ \blx@printtime{#2}{end}}
+ {\csuse{mkbibyeardivisiondate#1}{#2endyear}{#2endyeardivision}}}%
+ \printfield{extradate}%
+ \enddateuncertainprint
+ \dateeraprint{#2endyear}}}}%
+ \endgroup}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/lbx/magyar-ms.lbx b/macros/latex/contrib/biblatex-ms/latex/lbx/magyar-ms.lbx
new file mode 100644
index 0000000000..c30b0c6ff1
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/lbx/magyar-ms.lbx
@@ -0,0 +1,741 @@
+\ProvidesFile{magyar-ms.lbx}
+[\abx@lbxid]
+
+\DeclareRedundantLanguages{magyar}{magyar,hungarian}
+
+\DeclareBibliographyExtras{%
+ \DeclareCapitalPunctuation{.!?}%
+ \protected\def\bibrangedash{%
+ \textendash\penalty\hyphenpenalty}% breakable dash
+ \savecommand\bibdaterangesep
+ \protected\def\bibdaterangesep{\space\textendash\space}%
+ \let\finalandcomma=\empty
+ \let\finalandsemicolon=\empty
+ \protected\def\mkbibordinal#1{\stripzeros{#1}\adddot}%
+ \protected\def\mkbibmascord{\mkbibordinal}%
+ \protected\def\mkbibfemord{\mkbibordinal}%
+ \protected\def\mkbibneutord{\mkbibordinal}%
+ \let\lbx@hu@ifdayrange\@secondoftwo
+ \def\lbx@hu@ifplainday{\lbx@hu@ifdayrange}%
+ \protected\def\mkbibdatelong#1#2#3{%
+ \iffieldundef{#1}
+ {}
+ {\iffieldbibstring{#1}
+ {\bibstring{\thefield{#1}}}
+ {\dateeraprintpre{#1}%
+ \iffieldundef{#2}{\thefield{#1}}
+ {\mkbibordinal{\thefield{#1}}}}%
+ \iffieldundef{#2}{}{\nobreakspace}}%
+ \iffieldundef{#2}
+ {}
+ {\mkbibmonth{\thefield{#2}}%
+ \iffieldundef{#3}{}{\nobreakspace}}%
+ \iffieldundef{#3}
+ {}
+ {\lbx@hu@ifplainday{\thefield{#3}}{\mkbibordinal{\thefield{#3}}}}%
+ }%
+ \protected\def\mkbibdateshort#1#2#3{%
+ \iffieldundef{#1}
+ {}
+ {\iffieldbibstring{#1}
+ {\bibstring{\thefield{#1}}}
+ {\dateeraprintpre{#1}%
+ \iffieldundef{#2}{\thefield{#1}}
+ {\mkbibordinal{\thefield{#1}}}}%
+ \iffieldundef{#2}{}{\nobreakspace}}%
+ \iffieldundef{#2}
+ {}
+ {\mkmonthzeros{\thefield{#2}}\adddot
+ \iffieldundef{#3}{}{\nobreakspace}}%
+ \iffieldundef{#3}
+ {}
+ {\mkdayzeros{\thefield{#3}}\lbx@hu@ifdayrange{}{\adddot}}%
+ }%
+ \let\mkbibyeardivisiondatelong\mkbibyeardivisiondateshort
+ \savecommand\mkdaterangecomp
+ \savecommand\mkdaterangecompextra
+ \savecommand\mkdaterangeterse
+ \savecommand\mkdaterangeterseextra
+ \protected\def\mkdaterangecomp{%
+ \lbx@hu@mkdaterangetrunc{long}}%
+ \protected\def\mkdaterangeterse{%
+ \lbx@hu@mkdaterangetrunc{short}}%
+ \protected\def\mkdaterangecompextra{%
+ \lbx@hu@mkdaterangetruncextra{long}}%
+ \protected\def\mkdaterangeterseextra{%
+ \lbx@hu@mkdaterangetruncextra{short}}%
+ \expandafter\protected\expandafter\def\csname mkbibtime24h\endcsname#1#2#3#4{%
+ \iffieldundef{#1}
+ {}
+ {\mktimezeros{\thefield{#1}}%
+ \iffieldundef{#2}{}{\bibtimesep}}%
+ \iffieldundef{#2}
+ {}
+ {\mktimezeros{\thefield{#2}}%
+ \iffieldundef{#3}{}{\bibtimesep}}%
+ \iffieldundef{#3}
+ {}
+ {\mktimezeros{\thefield{#3}}}%
+ \iffieldundef{#4}{}
+ {\bibtimezonesep
+ \mkbibtimezone{\thefield{#4}}}}%
+ \csletcs{mkbibtime12h}{mkbibtime24h}%
+ \protected\def\mkbibyeardivisiondateshort#1#2{%
+ \dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}%
+ \iffieldundef{#1}{}{\adddot\space}%
+ \mkbibyeardivision{\thefield{#2}}%
+ }%
+ \let\mkbibyeardivisiondatelong\mkbibyeardivisiondateshort
+ \savecommand\lbx@lfromlang
+ \savecommand\lbx@sfromlang
+ \def\lbx@lfromlang{%
+ \iflistundef{origlanguage}
+ {}
+ {\printlist[lfromoriglanguage]{origlanguage}\space}}%
+ \def\lbx@sfromlang{%
+ \iflistundef{origlanguage}
+ {}
+ {\printlist[sfromoriglanguage]{origlanguage}\space}}%
+ % Page numbers and ranges
+ % convenient shorthand for page range normalisation
+ \protected\def\lbx@hu@mkdottednormrange{\mknormrange*[\mkbibordinal]}%
+ % this redefines \mkpageprefix to put the page number as suffix
+ \savecommand\blx@mkpageprefix
+ \protected\long\def\blx@mkpageprefix#1[#2]#3{%
+ \blx@mkpageprefix@i[{#2}]{#3}%
+ \ifnumeral{#3}
+ {\ppspace\bibstring{#1}}
+ {\ifnumerals{#3}
+ {\ppspace\bibstring{#1s}}
+ {\def\pno{\bibstring{#1}}%
+ \def\ppno{\bibstring{#1s}}}}}%
+ % NOTE: a few field formats are redefined here, this overrides
+ % corresponding style and preamble definitions.
+ % If you want to overwrite the changes made here, use
+ % \DefineBibliographyExtras{magyar}{...}
+ % Do not forget to make these changes undone with
+ % \UndefineBibliographyExtras{magyar}{...}
+ % to avoid them spilling out later.
+ \savefieldformat{pages}%
+ \DeclareFieldFormat{pages}{%
+ \mkpageprefix[bookpagination][\lbx@hu@mkdottednormrange]{#1}}%
+ \savefieldformat{postnote}%
+ \DeclareFieldFormat{postnote}{%
+ \mkpageprefix[pagination][\lbx@hu@mkdottednormrange]{#1}}%
+ \savefieldformat{volcitepages}%
+ \DeclareFieldFormat{volcitepages}{%
+ \mkpageprefix[pagination][\lbx@hu@mkdottednormrange]{#1}}%
+ \savefieldformat{multipostnote}%
+ \DeclareFieldFormat{multipostnote}{%
+ \mkpageprefix[pagination][\lbx@hu@mkdottednormrange]{#1}}%
+ \savefieldformat{chapter}%
+ \DeclareFieldFormat{chapter}{%
+ \ifnumerals{#1}{\mkbibordinal{#1}}{#1}%
+ \addnbspace
+ \bibstring{chapter}}%
+ \savefieldformat{volume}%
+ \DeclareFieldFormat{volume}{%
+ \ifnumerals{#1}{\mkbibordinal{#1}}{#1}%
+ \addnbspace
+ \bibstring{volume}}%
+ \savefieldformat{part}%
+ \DeclareFieldFormat{part}{%
+ \addcomma\space% <- this is *really* bad, don't try this at home
+ % In general leading or trailing punctuation in field formats should be
+ % avoided and should instead be dealt with in the appropriate bibmacros.
+ % The part field is special because its standard definition is '.#1'.
+ % Additionally, \printfield{part} is called all over the place, so we
+ % can't simply redefine a macro here.
+ \ifnumerals{#1}{\mkbibordinal{#1}}{#1}%
+ \addnbspace
+ \bibstring{part}}%
+ \savefieldformat{version}%
+ \DeclareFieldFormat{version}{%
+ \ifnumerals{#1}{\mkbibordinal{#1}}{#1}%
+ \addnbspace
+ \bibstring{version}}%
+}
+
+
+\UndeclareBibliographyExtras{%
+ \restorecommand\bibdaterangesep
+ \restorecommand\mkdaterangecomp
+ \restorecommand\mkdaterangecompextra
+ \restorecommand\mkdaterangeterse
+ \restorecommand\mkdaterangeterseextra
+ \restorecommand\lbx@lfromlang
+ \restorecommand\lbx@sfromlang
+ \restorecommand\mknormrange
+ \restorecommand\blx@mkpageprefix
+ \restorefieldformat{pages}%
+ \restorefieldformat{postnote}%
+ \restorefieldformat{volcitepages}%
+ \restorefieldformat{multipostnote}%
+ \restorefieldformat{chapter}%
+ \restorefieldformat{volume}%
+ \restorefieldformat{part}%
+ \restorefieldformat{version}%
+}
+
+\DeclareBibliographyStrings{%
+ bibliography = {{Irodalomjegyz\'ek}{Irodalom}},
+ references = {{Hivatkoz\'asok}{Hivatkoz\'asok}},
+ shorthands = {{R\"ovid\'it\'esek jegyz\'eke}{R\"ovid\'it\'esek}},
+ editor = {{szerkeszt\H{o}}{szerk\adddot}},
+ editors = {{szerkeszt\H{o}k}{szerk\adddot}},
+ compiler = {{\"ossze\'all\'it\'o}{\"ossze\'all\adddot}},
+ compilers = {{\"ossze\'all\'it\'ok}{\"ossze\'all\adddot}},
+ redactor = {{sajt\'o al\'a rendez\H{o}}{kiad\adddot}},
+ redactors = {{sajt\'o al\'a rendez\H{o}k}{kiad\adddot}},
+ reviser = {{korrektor}{korr\adddot}},
+ revisers = {{korrektorok}{korr\adddot}},
+ founder = {{alap\'it\'o}{alap\adddot}},
+ founders = {{alap\'it\'ok}{alap\adddot}},
+ %continuator = {{}{}},% FIXME missing
+ %continuators = {{}{}},% FIXME missing
+ collaborator = {{k\"ozrem\H{u}k\"od\H{o}}{km\adddot}},
+ collaborators = {{k\"ozrem\H{u}k\"od\H{o}k}{km\adddot}},
+ translator = {{ford\'it\'o}{ford\adddot}},
+ translators = {{ford\'it\'ok}{ford\adddot}},
+ commentator = {{komment\'ator}{komm\adddot}},
+ commentators = {{komment\'atorok}{komm\adddot}},
+ annotator = {{jegyzetek \'ir\'oja}{jegyz\adddot}},
+ annotators = {{jegyzetek \'ir\'oi}{jegyz\adddot}},
+ commentary = {{komment\'ar}{komm\adddot}},
+ annotations = {{jegyzetek}{jegyz\adddot}},
+ introduction = {{bevezet\'es}{bev\adddot}},
+ foreword = {{el\H{o}sz\'o}{el\H{o}sz\'o}},
+ afterword = {{ut\'osz\'o}{ut\'osz\'o}},
+ editortr = {{szerkeszt\H{o} \'es ford\'it\'o}%
+ {szerk\adddotspace \'es ford\adddot}},
+ editorstr = {{szerkeszt\H{o}k \'es ford\'it\'ok}%
+ {szerk\adddotspace \'es ford\adddot}},,
+ editorco = {{szerkeszt\H{o} \'es komment\'ar}%
+ {szerk\adddotspace \'es komm\adddot}},
+ editorsco = {{szerkeszt\H{o} \'es komment\'ar}%
+ {szerk\adddotspace \'es komm\adddot}},
+ editoran = {{szerkeszt\H{o} \'es jegyzet}%
+ {szerk\adddotspace \'es jegyz\adddot}},
+ editorsan = {{szerkeszt\H{o} \'es jegyzet}%
+ {szerk\adddotspace \'es jegyz\adddot}},
+ editorin = {{szerkeszt\H{o} \'es bevezet\H{o}}%
+ {szerk\adddotspace \'es bev\adddot}},
+ editorsin = {{szerkeszt\H{o}k \'es bevezet\H{o}}%
+ {szerk\adddotspace \'es bev\adddot}},
+ editorfo = {{szerkeszt\H{o} \'es el\H{o}sz\'o}%
+ {szerk\adddotspace \'es el\H{o}sz\'o}},
+ editorsfo = {{szerkeszt\H{o}k \'es el\H{o}sz\'o}%
+ {szerk\adddotspace \'es el\H{o}sz\'o}},
+ editoraf = {{szerkeszt\H{o} \'es ut\'osz\'o}
+ {szerk\adddotspace \'es ut\'osz\'o}},
+ editorsaf = {{szerkeszt\H{o}k \'es ut\'osz\'o}%
+ {szerk\adddotspace \'es ut\'osz\'o}},
+ editortrco = {{szerkeszt\H{o}, ford\'it\'o \'es komment\'ar}%
+ {szerk\adddot, ford\adddotspace \'es komm\adddot}},
+ editorstrco = {{szerkeszt\H{o}, ford\'it\'o \'es komment\'ar}%
+ {szerk\adddot, ford\adddotspace \'es komm\adddot}},
+ editortran = {{szerkeszt\H{o}, ford\'it\'o \'es jegyzet}%
+ {szerk\adddot, ford\adddotspace \'es jegyz\adddot}},
+ editorstran = {{szerkeszt\H{o}, ford\'it\'o \'es jegyzet}%
+ {szerk\adddot, ford\adddotspace \'es jegyz\adddot}},
+ editortrin = {{szerkeszt\H{o}, ford\'it\'o \'es bevezet\H{o}}%
+ {szerk\adddot, ford\adddotspace \'es bev\adddot}},
+ editorstrin = {{szerkeszt\H{o}, ford\'it\'o \'es bevezet\H{o}}%
+ {szerk\adddot, ford\adddotspace \'es bev\adddot}},
+ editortrfo = {{szerkeszt\H{o}, ford\'it\'o \'es el\H{o}sz\'o}%
+ {szerk\adddot, ford\adddotspace \'es el\H{o}sz\'o}},
+ editorstrfo = {{szerkeszt\H{o}, ford\'it\'o \'es el\H{o}sz\'o}%
+ {szerk\adddot, ford\adddotspace \'es el\H{o}sz\'o}},
+ editortraf = {{szerkeszt\H{o}, ford\'it\'o \'es ut\'osz\'o}%
+ {szerk\adddot, ford\adddotspace \'es ut\'osz\'o}},
+ editorstraf = {{szerkeszt\H{o}, ford\'it\'o \'es ut\'osz\'o}%
+ {szerk\adddot, ford\adddotspace \'es ut\'osz\'o}},
+ editorcoin = {{szerkeszt\H{o}, komment\'ar \'es bevezet\H{o}}%
+ {szerk\adddot, komm\adddotspace \'es bev\adddot}},
+ editorscoin = {{szerkeszt\H{o}, komment\'ar \'es bevezet\H{o}}%
+ {szerk\adddot, komm\adddotspace \'es bev\adddot}},
+ editorcofo = {{szerkeszt\H{o}, komment\'ar \'es el\H{o}sz\'o}%
+ {szerk\adddot, komm\adddotspace \'es el\H{o}sz\'o}},
+ editorscofo = {{szerkeszt\H{o}, komment\'ar \'es el\H{o}sz\'o}%
+ {szerk\adddot, komm\adddotspace \'es el\H{o}sz\'o}},
+ editorcoaf = {{szerkeszt\H{o}, komment\'ar \'es ut\'osz\'o}%
+ {szerk\adddot, komm\adddotspace \'es ut\'osz\'o}},
+ editorscoaf = {{szerkeszt\H{o}, komment\'ar \'es ut\'osz\'o}%
+ {szerk\adddot, komm\adddotspace \'es ut\'osz\'o}},
+ editoranin = {{szerkeszt\H{o}, jegyzetek \'es bevezet\H{o}}%
+ {szerk\adddot, jegyz\adddotspace \'es bev\adddot}},
+ editorsanin = {{szerkeszt\H{o}, jegyzetek \'es bevezet\H{o}}%
+ {szerk\adddot, jegyz\adddotspace \'es bev\adddot}},
+ editoranfo = {{szerkeszt\H{o}, jegyzetek \'es el\H{o}sz\'o}%
+ {szerk\adddot, jegyz\adddotspace \'es el\H{o}sz\'o}},
+ editorsanfo = {{szerkeszt\H{o}, jegyzetek \'es el\H{o}sz\'o}%
+ {szerk\adddot, jegyz\adddotspace \'es el\H{o}sz\'o}},
+ editoranaf = {{szerkeszt\H{o}, jegyzetek \'es ut\'osz\'o}%
+ {szerk\adddot, jegyz\adddotspace \'es ut\'osz\'o}},
+ editorsanaf = {{szerkeszt\H{o}, jegyzetek \'es ut\'osz\'o}%
+ {szerk\adddot, jegyz\adddotspace \'es ut\'osz\'o}},
+ editortrcoin = {{szerkeszt\H{o}, ford\'it\'o, komment\'ar \'es bevezet\H{o}}%
+ {szerk\adddot, ford\adddot, komm\adddotspace \'es bev\adddot}},
+ editorstrcoin = {{szerkeszt\H{o}, ford\'it\'o, komment\'ar \'es bevezet\H{o}}%
+ {szerk\adddot, ford\adddot, komm\adddotspace \'es bev\adddot}},
+ editortrcofo = {{szerkeszt\H{o}, ford\'it\'o, komment\'ar \'es el\H{o}sz\'o}%
+ {szerk\adddot, ford\adddot, komm\adddotspace \'es el\H{o}sz\'o}},
+ editorstrcofo = {{szerkeszt\H{o}, ford\'it\'o, komment\'ar \'es el\H{o}sz\'o}%
+ {szerk\adddot, ford\adddot, komm\adddotspace \'es el\H{o}sz\'o}},
+ editortrcoaf = {{szerkeszt\H{o}, ford\'it\'o, komment\'ar \'es ut\'osz\'o}%
+ {szerk\adddot, ford\adddot, komm\adddotspace \'es ut\'osz\'o}},
+ editorstrcoaf = {{szerkeszt\H{o}, ford\'it\'o, komment\'ar \'es ut\'osz\'o}%
+ {szerk\adddot, ford\adddot, komm\adddotspace \'es ut\'osz\'o}},
+ editortranin = {{szerkeszt\H{o}, ford\'it\'o, jegyzetek \'es bevezet\H{o}}%
+ {szerk\adddot, ford\adddot, jegyz\adddotspace \'es bev\adddot}},
+ editorstranin = {{szerkeszt\H{o}, ford\'it\'o, jegyzetek \'es bevezet\H{o}}%
+ {szerk\adddot, ford\adddot, jegyz\adddotspace \'es bev\adddot}},
+ editortranfo = {{szerkeszt\H{o}, ford\'it\'o, jegyzetek \'es el\H{o}sz\'o}%
+ {szerk\adddot, ford\adddot, jegyz\adddotspace \'es el\H{o}sz\'o}},
+ editorstranfo = {{szerkeszt\H{o}, ford\'it\'o, jegyzetek \'es el\H{o}sz\'o}%
+ {szerk\adddot, ford\adddot, jegyz\adddotspace \'es el\H{o}sz\'o}},
+ editortranaf = {{szerkeszt\H{o}, ford\'it\'o, jegyzetek \'es ut\'osz\'o}%
+ {szerk\adddot, ford\adddot, jegyz\adddotspace \'es ut\'osz\'o}},
+ editorstranaf = {{szerkeszt\H{o}, ford\'it\'o, jegyzetek \'es ut\'osz\'o}%
+ {szerk\adddot, ford\adddot, jegyz\adddotspace \'es ut\'osz\'o}},
+ translatorco = {{ford\'it\'o \'es komment\'ar}%
+ {ford\adddotspace \'es komm\adddot}},
+ translatorsco = {{ford\'it\'o \'es komment\'ar}%
+ {ford\adddotspace \'es komm\adddot}},
+ translatoran = {{ford\'it\'o \'es jegyzetek}%
+ {ford\adddotspace \'es jegyz\adddot}},
+ translatorsan = {{ford\'it\'o \'es jegyzetek}%
+ {ford\adddotspace \'es jegyz\adddot}},
+ translatorin = {{ford\'it\'o \'es bevezet\H{o}}%
+ {ford\adddotspace \'es bev\adddot}},
+ translatorsin = {{ford\'it\'o \'es bevezet\H{o}}%
+ {ford\adddotspace \'es bev\adddot}},
+ translatorfo = {{ford\'it\'o \'es el\H{o}sz\'o}%
+ {ford\adddotspace \'es el\H{o}sz\'o}},
+ translatorsfo = {{ford\'it\'o \'es el\H{o}sz\'o}%
+ {ford\adddotspace \'es el\H{o}sz\'o}},
+ translatoraf = {{ford\'it\'o \'es ut\'osz\'o}%
+ {ford\adddotspace \'es ut\'osz\'o}},
+ translatorsaf = {{ford\'it\'o \'es ut\'osz\'o}%
+ {ford\adddotspace \'es ut\'osz\'o}},
+ translatorcoin = {{ford\'it\'o, komment\'ar \'es bevezet\H{o}}%
+ {ford\adddot, komm\adddotspace \'es bev\adddot}},
+ translatorscoin = {{ford\'it\'o, komment\'ar \'es bevezet\H{o}}%
+ {ford\adddot, komm\adddotspace \'es bev\adddot}},
+ translatorcofo = {{ford\'it\'o, komment\'ar \'es el\H{o}sz\'o}%
+ {ford\adddot, komm\adddotspace \'es el\H{o}sz\'o}},
+ translatorscofo = {{ford\'it\'o, komment\'ar \'es el\H{o}sz\'o}%
+ {ford\adddot, komm\adddotspace \'es el\H{o}sz\'o}},
+ translatorcoaf = {{ford\'it\'o, komment\'ar \'es ut\'osz\'o}%
+ {ford\adddot, komm\adddotspace \'es ut\'osz\'o}},
+ translatorscoaf = {{ford\'it\'o, komment\'ar \'es ut\'osz\'o}%
+ {ford\adddot, komm\adddotspace \'es ut\'osz\'o}},
+ translatoranin = {{ford\'it\'o, jegyzetek \'es bevezet\H{o}}%
+ {ford\adddot, jegyz\adddotspace \'es bev\adddot}},
+ translatorsanin = {{ford\'it\'o, jegyzetek \'es bevezet\H{o}}%
+ {ford\adddot, jegyz\adddotspace \'es bev\adddot}},
+ translatoranfo = {{ford\'it\'o, jegyzetek \'es el\H{o}sz\'o}%
+ {ford\adddot, jegyz\adddotspace \'es el\H{o}sz\'o}},
+ translatorsanfo = {{ford\'it\'o, jegyzetek \'es el\H{o}sz\'o}%
+ {ford\adddot, jegyz\adddotspace \'es el\H{o}sz\'o}},
+ translatoranaf = {{ford\'it\'o, jegyzetek \'es ut\'osz\'o}%
+ {ford\adddot, jegyz\adddotspace \'es ut\'osz\'o}},
+ translatorsanaf = {{ford\'it\'o, jegyzetek \'es ut\'osz\'o}%
+ {ford\adddot, jegyz\adddotspace \'es ut\'osz\'o}},
+ organizer = {{szervez\H{o}}{szerv\adddot}},
+ organizers = {{szervez\H{o}k}{szerv\adddot}},
+ byorganizer = {{szervezte}{szerv\adddot}},
+ byauthor = {{\'irta}{\'irta}},
+ byeditor = {{szerkesztette}{szerk\adddot}},
+ bycompiler = {{\"ossze\'all\'itotta}{\"ossze\'all\adddot}},
+ byredactor = {{sajt\'o al\'a rendezte}{kiad\adddot}},
+ byreviser = {{jav\'itotta}{jav\adddot}},
+ byreviewer = {{b\'ir\'alta}{b\'ir\adddot}},
+ byfounder = {{alap\'itotta}{alap\adddot}},
+% bycontinuator = {{}{}},% FIXME missing
+ bycollaborator = {{k\"ozrem\H{u}k\"od\"ott}{km\adddot}},
+ bytranslator = {{\lbx@lfromlang ford\'itotta}{\lbx@sfromlang ford\adddot}},
+ bycommentator = {{komment\'alta}{komm\adddot}},
+ byannotator = {{jegyzetekkel ell\'atta}{jegyz\adddot}},
+ withcommentator = {{komment\'arral ell\'atta}{komm\adddot}},
+ withannotator = {{jegyzetekkel ell\'atta}{jegyz\adddot}},
+ withintroduction = {{bevezet\H{o}vel ell\'atta}{bev\adddot}},
+ withforeword = {{el\H{o}sz\'oval ell\'atta}{el\H{o}sz\'o:}},
+ withafterword = {{ut\'osz\'oval ell\'atta}{ut\'osz\'o:}},
+ byeditortr = {{szerkesztette \'es \lbx@lfromlang ford\'itotta}%
+ {szerk\adddotspace \'es \lbx@sfromlang ford\adddot}},
+ byeditorco = {{szerkesztette \'es komment\'alta}%
+ {szerk\adddotspace \'es komm\adddot}},
+ byeditoran = {{szerkesztette \'es jegyzetekkel ell\'atta}%
+ {szerk\adddotspace \'es jegyz\adddot}},
+ byeditorin = {{szerkesztette \'es bevezet\H{o}vel ell\'atta}%
+ {szerk\adddotspace \'es jegyz\adddot}},
+ byeditorfo = {{szerkesztette \'es el\H{o}sz\'oval ell\'atta}%
+ {szerk\adddotspace \'es el\H{o}sz\'o}},
+ byeditoraf = {{szerkesztette \'es ut\'osz\'oval ell\'atta}%
+ {szerk\adddotspace \'es ut\'osz\'o}},
+ byeditortrco = {{szerkesztette, \lbx@lfromlang ford\'itotta \'es komment\'alta}%
+ {szerk\adddot, \lbx@sfromlang ford\adddotspace \'es komm\adddot}},
+ byeditortran = {{szerkesztette, \lbx@lfromlang ford\'itotta \'es jegyzetekkel ell\'atta}%
+ {szerk\adddot, \lbx@sfromlang ford\adddotspace \'es jegyz\adddot}},
+ byeditortrin = {{szerkesztette, \lbx@lfromlang ford\'itotta \'es bevezet\H{o}vel ell\'atta}%
+ {szerk\adddot, \lbx@sfromlang ford\adddotspace \'es bev\adddot}},
+ byeditortrfo = {{szerkesztette, \lbx@lfromlang ford\'itotta \'es el\H{o}sz\'oval ell\'atta}%
+ {szerk\adddot, \lbx@sfromlang ford\adddotspace \'es el\H{o}sz\'o}},
+ byeditortraf = {{szerkesztette, \lbx@lfromlang ford\'itotta \'es ut\'osz\'oval ell\'atta}%
+ {szerk\adddot, \lbx@sfromlang ford\adddotspace \'es ut\'osz\'o}},
+ byeditorcoin = {{szerkesztette, komment\'alta \'es bevezet\H{o}vel ell\'atta}%
+ {szerk\adddot, komm\adddotspace \'es bev\adddot}},
+ byeditorcofo = {{szerkesztette, komment\'alta \'es el\H{o}sz\'oval ell\'atta}%
+ {szerk\adddot, komm\adddotspace \'es el\H{o}sz\'o}},
+ byeditorcoaf = {{szerkesztette, komment\'alta \'es ut\'osz\'oval ell\'atta}%
+ {szerk\adddot, komm\adddotspace \'es ut\'osz\'o}},
+ byeditoranin = {{szerkesztette, jegyzetekkel \'es bevezet\H{o}vel ell\'atta}%
+ {szerk\adddot, jegyz\adddotspace \'es bev\adddot}},
+ byeditoranfo = {{szerkesztette, jegyzetekkel \'es el\H{o}sz\'oval ell\'atta}%
+ {szerk\adddot, jegyz\adddotspace \'es el\H{o}sz\'o}},
+ byeditoranaf = {{szerkesztette, jegyzetekkel \'es ut\'osz\'oval ell\'atta}%
+ {szerk\adddot, jegyz\adddotspace \'es ut\'osz\'o}},
+ byeditortrcoin = {{szerkesztette, \lbx@lfromlang ford\'itotta, komment\'alta \'es bevezet\H{o}vel ell\'atta}%
+ {szerk\adddot, \lbx@sfromlang ford\adddot, komm\adddotspace \'es bev\adddot}},
+ byeditortrcofo = {{szerkesztette, \lbx@lfromlang ford\'itotta, komment\'alta \'es el\H{o}sz\'oval ell\'atta}%
+ {szerk\adddot, \lbx@sfromlang ford\adddot, komm\adddotspace \'es el\H{o}sz\'o}},
+ byeditortrcoaf = {{szerkesztette, \lbx@lfromlang ford\'itotta, komment\'alta \'es ut\'osz\'oval ell\'atta}%
+ {szerk\adddot, \lbx@sfromlang ford\adddot, komm\adddotspace \'es ut\'osz\'o}},
+ byeditortranin = {{szerkesztette, \lbx@lfromlang ford\'itotta, jegyzetekkel \'es bevezet\H{o}vel ell\'atta}%
+ {szerk\adddot, \lbx@sfromlang ford\adddot, jegyz\adddotspace \'es bev\adddot}},
+ byeditortranfo = {{szerkesztette, \lbx@lfromlang ford\'itotta, jegyzetekkel \'es el\H{o}sz\'oval ell\'atta}%
+ {szerk\adddot, \lbx@sfromlang ford\adddot, jegyz\adddotspace \'es el\H{o}sz\'o}},
+ byeditortranaf = {{szerkesztette, \lbx@lfromlang ford\'itotta, jegyzetekkel \'es ut\'osz\'oval ell\'atta}%
+ {szerk\adddot, \lbx@sfromlang ford\adddot, jegyz\adddotspace \'es ut\'osz\'o}},
+ bytranslatorco = {{\lbx@lfromlang ford\'itotta \'es komment\'alta}%
+ {\lbx@sfromlang ford\adddotspace \'es komm\adddot}},
+ bytranslatoran = {{\lbx@lfromlang ford\'itotta \'es jegyzetekkel ell\'atta}%
+ {\lbx@sfromlang ford\adddotspace \'es jegyz\adddot}},
+ bytranslatorin = {{\lbx@lfromlang ford\'itotta \'es bevezet\H{o}vel ell\'atta}%
+ {\lbx@sfromlang ford\adddotspace \'es bev\adddot}},
+ bytranslatorfo = {{\lbx@lfromlang ford\'itotta \'es el\H{o}sz\'oval ell\'atta}%
+ {\lbx@sfromlang ford\adddotspace \'es el\H{o}sz\'o}},
+ bytranslatoraf = {{\lbx@lfromlang ford\'itotta \'es ut\'osz\'oval ell\'atta}%
+ {\lbx@sfromlang ford\adddotspace \'es ut\'osz\'o}},
+ bytranslatorcoin = {{\lbx@lfromlang ford\'itotta, komment\'alta \'es bevezet\H{o}vel ell\'atta}%
+ {\lbx@sfromlang ford\adddot, komm\adddotspace \'es bev\adddot}},
+ bytranslatorcofo = {{\lbx@lfromlang ford\'itotta, komment\'alta \'es el\H{o}sz\'oval ell\'atta}%
+ {\lbx@sfromlang ford\adddot, komm\adddotspace \'es el\H{o}sz\'o}},
+ bytranslatorcoaf = {{\lbx@lfromlang ford\'itotta, komment\'alta \'es ut\'osz\'oval ell\'atta}%
+ {\lbx@sfromlang ford\adddot, komm\adddotspace \'es ut\'osz\'o}},
+ bytranslatoranin = {{\lbx@lfromlang ford\'itotta, jegyzetekkel \'es bevezet\H{o}vel ell\'atta}%
+ {\lbx@sfromlang ford\adddot, jegyz\adddotspace \'es bev\adddot}},
+ bytranslatoranfo = {{\lbx@lfromlang ford\'itotta, jegyzetekkel \'es el\H{o}sz\'oval ell\'atta}%
+ {\lbx@sfromlang ford\adddot, jegyz\adddotspace \'es el\H{o}sz\'o}},
+ bytranslatoranaf = {{\lbx@lfromlang ford\'itotta, jegyzetekkel \'es ut\'osz\'oval ell\'atta}%
+ {\lbx@sfromlang ford\adddot, jegyz\adddotspace \'es ut\'osz\'o}},
+ and = {{\'es}{\'es}},
+ andothers = {{\'es m\'asok}{\'es tsai\adddot}},
+ andmore = {{et\addabbrvspace al\adddot}{et\addabbrvspace al\adddot}},
+ volume = {{k\"otet}{k\"ot\adddot}},
+ volumes = {{k\"otetek}{k\"ot\adddot}},
+ involumes = {{}{}},
+ jourvol = {{\'evfolyam}{\'evf\adddot}},
+ jourser = {{sorozat}{sor\adddot}},
+ book = {{k\"onyv}{k\"onyv}},
+ part = {{r\'esz}{r\'esz}},
+ issue = {{sz\'am}{sz\adddot}},
+ newseries = {{\'uj sorozat}{\'uj sor\adddot}},
+ oldseries = {{r\'egi sorozat}{r\'egi sor\adddot}},
+ edition = {{kiad\'as}{kiad\adddot}},
+ reprint = {{ut\'annyom\'as}{ut\'anny\adddot}},
+ reprintof = {{ut\'annyom\'asa}{ut\'anny\adddot}},% FIXME swap word order
+ reprintas = {{ut\'annyom\'as c\'ime}{ut\'anny\adddotspace c\'ime}},
+% reprintfrom = {{}{}},% FIXME need example
+ translationof = {{ford\'it\'asa}{ford\adddot}},% FIXME swap word order
+ translationas = {{ford\'it\'as c\'ime}{ford\adddotspace c\'ime}},
+% translationfrom = {{}{}},% FIXME need example
+ reviewof = {{recenzi\'oja}{rec\adddot}},% FIXME swap word order
+ origpubas = {{eredeti c\'ime}{ered\adddotspace c\'im}},
+ origpubin = {{eredeti kiad\'as}{ered\adddotspace kiad\adddot}},
+% astitle = {{}{}},% FIXME need example
+% bypublisher = {{\addcomma}{\addcomma}},% FIXME: this is a cludge that can not be guaranteed to work in most situations, so it stays commented out
+ nodate = {{\'ev n\'elk\"ul}{\'e\adddotspace n\adddot}},
+ page = {{oldal}{old\adddot}},
+ pages = {{oldal}{old\adddot}},
+ column = {{has\'ab}{has\adddot}},
+ columns = {{has\'ab}{has\adddot}},
+ line = {{sor}{sor}},
+ lines = {{sor}{sor}},
+ verse = {{versszak}{vsz\adddot}},
+ verses = {{versszak}{vsz\adddot}},
+ section = {{paragrafus}{\S}},
+ sections = {{paragrafus}{\S\S}},
+ paragraph = {{bekezd\'es}{bek\adddot}},
+ paragraphs = {{bekezd\'es}{bek\adddot}},
+ pagetotal = {{oldal}{old\adddot}},
+ pagetotals = {{oldal}{old\adddot}},
+ columntotal = {{has\'ab}{has\adddot}},
+ columntotals = {{has\'ab}{has\adddot}},
+ linetotal = {{sor}{sor}},
+ linetotals = {{sor}{sor}},
+ versetotal = {{versszak}{vsz\adddot}},
+ versetotals = {{versszak}{vsz\adddot}},
+ sectiontotal = {{paragrafus}{\S}},
+ sectiontotals = {{paragrafus}{\S}},
+ paragraphtotal = {{bekezd\'es}{bek\adddot}},
+ paragraphtotals = {{bekezd\'es}{bek\adddot}},
+ in = {{}{}},
+% inseries = {{}{}},% FIXME need example
+% ofseries = {{}{}},% FIXME need example
+ number = {{sz\'am}{sz\adddot}},
+ chapter = {{fejezet}{fej\adddot}},
+ bathesis = {{szakdolgozat}{szakd\adddot}},
+ mathesis = {{diplomaterv}{dipl\adddot}},
+ phdthesis = {{disszert\'aci\'o}{dissz\adddot}},
+ candthesis = {{disszert\'aci\'o}{dissz\adddot}},
+ resreport = {{kutat\'asi jelent\'es}{kut\adddotspace jel\adddot}},
+ techreport = {{technikai jelent\'es}{techn\adddotspace jel\adddot}},
+ software = {{szoftver}{szoftver}},
+ datacd = {{CD-ROM}{CD-ROM}},
+ audiocd = {{audio CD}{CD}},
+ version = {{verzi\'o}{verzi\'o}},
+ url = {{c\'im}{c\'im}},
+ urlfrom = {{el\'erhet\H{o}}{el\'erh\adddot}},
+ urlseen = {{el\'er\'es d\'atuma}{el\'er\'es d\'atuma}},
+ inpreparation = {{el\H{o}k\'esz\'it\'es alatt}{el\H{o}k\adddotspace alatt}},
+ submitted = {{bek\"uld\"ott}{bek\"uld\"ott}},
+ forthcoming = {{elfogadott}{elfogadott}},
+ inpress = {{nyomd\'aban}{nyomd\adddot}},
+ prepublished = {{preprint}{preprint}},
+ citedas = {{tov\'abbiakban}{tov\'abbiakban}},
+ thiscite = {{itt}{itt}},
+ seenote = {{l\'asd}{ld\adddot}},
+ quotedin = {{id\'ezte}{id\'ezte}},
+ idem = {{ugyan\H{o}}{u\H{o}}},
+ idemsf = {{ugyan\H{o}}{u\H{o}}},
+ idemsm = {{ugyan\H{o}}{u\H{o}}},
+ idemsn = {{ugyan\H{o}}{u\H{o}}},
+ idempf = {{ugyan\H{o}k}{u\H{o}k}},
+ idempm = {{ugyan\H{o}k}{u\H{o}k}},
+ idempn = {{ugyan\H{o}k}{u\H{o}k}},
+ idempp = {{ugyan\H{o}k}{u\H{o}k}},
+ ibidem = {{ugyanitt}{uitt}},
+ opcit = {{id\'ezett m\H{u}}{i\adddotspace m\adddot}},
+ loccit = {{id\'ezett hely}{i\adddotspace h\adddot}},
+ confer = {{v\"o\adddot}{v\"o\adddot}},
+ sequens = {{sk\adddot}{sk\adddot}},
+ sequentes = {{skk\adddot}{skk\adddot}},
+ passim = {{passim}{pass\adddot}},
+ see = {{l\'asd}{ld\adddot}},
+ seealso = {{l\'asd m\'eg}{ld\adddotspace m\'eg}},
+ backrefpage = {{hivatkoz\'asi oldal}{hiv\adddotspace old\adddot}},
+ backrefpages = {{hivatkoz\'asi oldalak}{hiv\adddotspace old\adddot}},
+ january = {{janu\'ar}{jan\adddot}},
+ february = {{febru\'ar}{febr\adddot}},
+ march = {{m\'arcius}{m\'arc\adddot}},
+ april = {{\'aprilis}{\'apr\adddot}},
+ may = {{m\'ajus}{m\'aj\adddot}},
+ june = {{j\'unius}{j\'un\adddot}},
+ july = {{j\'ulius}{j\'ul\adddot}},
+ august = {{augusztus}{aug\adddot}},
+ september = {{szeptember}{szept\adddot}},
+ october = {{okt\'ober}{okt\adddot}},
+ november = {{november}{nov\adddot}},
+ december = {{december}{dec\adddot}},
+ langamerican = {{angol}{angol}},
+ langbrazilian = {{brazil}{brazil}},
+ langbulgarian = {{bolg\'ar}{bolg\'ar}},
+ langcatalan = {{katal\'an}{katal\'an}},
+ langcroatian = {{horv\'at}{horv\'at}},
+ langczech = {{cseh}{cseh}},
+ langdanish = {{d\'an}{d\'an}},
+ langdutch = {{holland}{holland}},
+ langenglish = {{angol}{angol}},
+ langestonian = {{\'eszt}{\'eszt}},
+ langfinnish = {{finn}{finn}},
+ langfrench = {{francia}{francia}},
+ langgalician = {{gal\'iciai}{gal\'iciai}},
+ langgerman = {{n\'emet}{n\'emet}},
+ langgreek = {{g\"or\"og}{g\"or\"og}},
+ langhungarian = {{magyar}{magyar}},
+ langitalian = {{olasz}{olasz}},
+ langjapanese = {{jap\'an}{jap\'an}},
+ langlatin = {{latin}{latin}},
+ langlatvian = {{lett}{lett}},
+ langnorwegian = {{norv\'eg}{norv\'eg}},
+ langpolish = {{lengyel}{lengyel}},
+ langportuguese = {{portug\'al}{portug\'al}},
+ langrussian = {{orosz}{orosz}},
+ langslovak = {{szlov\'ak}{szlov\'ak}},
+ langslovene = {{szlov\'en}{szlov\'en}},
+ langspanish = {{spanyol}{spanyol}},
+ langswedish = {{sv\'ed}{sv\'ed}},
+ langukrainian = {{ukr\'an}{ukr\'an}},
+ fromamerican = {{angolb\'ol}{angolb\'ol}},
+ frombrazilian = {{brazilb\'ol}{brazilb\'ol}},
+ frombulgarian = {{brazilb\'ol}{brazilb\'ol}},
+ fromcatalan = {{katal\'anb\'ol}{katal\'anb\'ol}},
+ fromcroatian = {{horv\'atb\'ol}{horv\'atb\'ol}},
+ fromczech = {{csehb\H{o}l}{csehb\H{o}l}},
+ fromdanish = {{d\'anb\'ol}{d\'anb\'ol}},
+ fromdutch = {{hollandb\'ol}{hollandb\'ol}},
+ fromenglish = {{angolb\'ol}{angolb\'ol}},
+ fromestonian = {{\'esztb\H{o}l}{\'esztb\H{o}l}},
+ fromfinnish = {{finnb\H{o}l}{finnb\H{o}l}},
+ fromfrench = {{franci\'ab\'ol}{franci\'ab\'ol}},
+ fromgalician = {{gal\'iciaib\'ol}{gal\'iciaib\'ol}},
+ fromgerman = {{n\'emetb\H{o}l}{n\'emetb\H{o}l}},
+ fromgreek = {{g\"or\"ogb\H{o}l}{g\"or\"ogb\H{o}l}},
+ fromhungarian = {{magyarb\'ol}{magyarb\'ol}},
+ fromitalian = {{olaszb\'ol}{olaszb\'ol}},
+ fromjapanese = {{jap\'anb\'ol}{jap\'anb\'ol}},
+ fromlatin = {{latinb\'ol}{latinb\'ol}},
+ fromlatvian = {{lettb\H{o}l}{lettb\H{o}l}},
+ fromnorwegian = {{norv\'egb\'ol}{norv\'egb\'ol}},
+ frompolish = {{lengyelb\H{o}l}{lengyelb\H{o}l}},
+ fromportuguese = {{portug\'alb\'ol}{portug\'alb\'ol}},
+ fromrussian = {{oroszb\'ol}{oroszb\'ol}},
+ fromslovak = {{szlov\'akb\'ol}{szlov\'akb\'ol}},
+ fromslovene = {{szlov\'enb\'ol}{szlov\'enb\'ol}},
+ fromspanish = {{spanyolb\'ol}{spanyolb\'ol}},
+ fromswedish = {{sv\'edb\H{o}l}{sv\'edb\H{o}l}},
+ fromukrainian = {{ukr\'anb\'ol}{ukr\'anb\'ol}},
+ countryde = {{N\'emetorsz\'ag}{DE}},
+ countryep = {{Eur\'opai Uni\'o}{EP}},
+ countryeu = {{Eur\'opai Uni\'o}{EU}},
+ countryfr = {{Franciaorsz\'ag}{FR}},
+ countryuk = {{Egyes\"ult Kir\'alys\'ag}{GB}},
+ countryus = {{Amerikai Egyes\"ult \'Allamok}{US}},
+ patent = {{szabadalom}{szabadalom}},
+ patentde = {{n\'emet szabadalom}{n\'em\adddotspace szabadalom}},
+ patenteu = {{eur\'opai szabadalom}{eur\adddotspace szabadalom}},
+ patentfr = {{francia szabadalom}{fr\adddotspace szabadalom}},
+ patentuk = {{brit szabadalom}{brit szabadalom}},
+ patentus = {{amerikai szabadalom}{USA szabadalom}},
+ patreq = {{szabadalmi k\'erelem}{szabad\adddotspace k\'erelem}},
+ patreqde = {{n\'emet szabadalmi k\'erelem}{n\'em\adddotspace szabad\adddotspace k\'erelem}},
+ patreqeu = {{eur\'opai szabadalmi k\'erelem}{eur\adddotspace szabad\adddotspace k\'erelem}},
+ patreqfr = {{francia szabadalmi k\'erelem}{fr\adddotspace szabad\adddotspace k\'erelem}},
+ patrequk = {{brit szabadalmi k\'erelem}{brit szabad\adddotspace k\'erelem}},
+ patrequs = {{amerikai szabadalmi k\'erelem}{amerikai szabad\adddotspace k\'erelem}},
+ file = {{f\'ajl}{f\'ajl}},
+ library = {{k\"onyvt\'ar}{k\"onyvt\'ar}},
+ abstract = {{kivonat}{kivonat}},
+ annotation = {{jegyzet}{jegyzet}},
+ commonera = {{id\H{o}sz\'am\'it\'asunk szerint}{i\adddotspace sz\adddot}},
+ beforecommonera = {{id\H{o}sz\'am\'it\'asunk el\H{o}tt}{i\adddotspace e\adddot}},
+ annodomini = {{Krisztus ut\'an}{Kr\adddotspace u\adddot}},
+ beforechrist = {{Krisztus el\H{o}tt}{Kr\adddotspace e\adddot}},
+ circa = {{k\"or\"ulbel\"ul}{kb\adddot}},
+ spring = {{tavasz}{tavasz}},
+ summer = {{ny\'ar}{ny\'ar}},
+ autumn = {{\H{o}sz}{\H{o}sz}},
+ winter = {{t\'el}{t\'el}},
+% springN = {{}{}},% FIXME: missing
+% summerN = {{}{}},% FIXME: missing
+% autumnN = {{}{}},% FIXME: missing
+% winterN = {{}{}},% FIXME: missing
+% springS = {{}{}},% FIXME: missing
+% summerS = {{}{}},% FIXME: missing
+% autumnS = {{}{}},% FIXME: missing
+% winterS = {{}{}},% FIXME: missing
+% Q1 = {{}{}},% FIXME: missing
+% Q2 = {{}{}},% FIXME: missing
+% Q3 = {{}{}},% FIXME: missing
+% Q4 = {{}{}},% FIXME: missing
+% QD1 = {{}{}},% FIXME: missing
+% QD2 = {{}{}},% FIXME: missing
+% QD3 = {{}{}},% FIXME: missing
+% S1 = {{}{}},% FIXME: missing
+% S2 = {{}{}},% FIXME: missing
+ am = {{d\'elel\H{o}tt}{de\adddot}},
+ pm = {{d\'elut\'an}{du\adddot}},
+}
+
+\protected\gdef\lbx@hu@ifdayrange@i#1{%
+ \ifboolexpr{not test {\iffieldundef{#1endyear}}
+ and test {\iffieldsequal{#1year}{#1endyear}}
+ and test {\iffieldsequal{#1month}{#1endmonth}}
+ and (test {\iffieldundef{#1hour}}
+ or not togl {blx@#1dateusetime})}}
+
+\protected\gdef\lbx@hu@mkdaterangetrunc#1#2{%
+ \blx@if@printanytimes{#2}
+ {\mkdaterangefull{#1}{#2}}
+ {\lbx@hu@mkdaterangetrunc@i{#1}{#2}}}
+
+\protected\gdef\lbx@hu@mkdaterangetrunc@i#1#2{%
+ \begingroup
+ \blx@metadateinfo{#2}%
+ \edef\lbx@hu@ifdayrange{\lbx@hu@ifdayrange@i{#2}}%
+ \iffieldundef{#2year}
+ {}
+ {\printtext[{#2date}]{%
+ \datecircaprint
+ \iffieldundef{#2yeardivision}
+ {\csuse{mkbibdate#1}{#2year}{#2month}{#2day}%
+ \blx@printtime{#2}{}}%
+ {\csuse{mkbibyeardivisiondate#1}{#2year}{#2yeardivision}}%
+ \dateeraprint{#2year}%
+ \dateuncertainprint
+ \iffieldundef{#2endyear}
+ {}
+ {\iffieldequalstr{#2endyear}{}
+ {\mbox{\bibdaterangesep}}
+ {\lbx@hu@ifdayrange{\bibrangedash}{\bibdaterangesep}%
+ \let\lbx@hu@ifplainday\@secondoftwo
+ \enddatecircaprint
+ \iffieldundef{#2yeardivision}
+ {\iffieldsequal{#2year}{#2endyear}
+ {\iffieldsequal{#2month}{#2endmonth}
+ {\csuse{mkbibdate#1}{}{}{#2endday}}
+ {\csuse{mkbibdate#1}{}{#2endmonth}{#2endday}}}
+ {\csuse{mkbibdate#1}{#2endyear}{#2endmonth}{#2endday}}%
+ \blx@printtime{#2}{end}}
+ {\iffieldsequal{#2year}{#2endyear}
+ {\csuse{mkbibyeardivisiondate#1}{}{#2endyeardivision}}
+ {\csuse{mkbibyeardivisiondate#1}{#2endyear}{#2endyeardivision}}}%
+ \enddateuncertainprint
+ \dateeraprint{#2endyear}}}}}%
+ \endgroup}
+
+\protected\gdef\lbx@hu@mkdaterangetruncextra#1#2{%
+ \blx@if@printanytimes{#2}
+ {\mkdaterangefullextra{#1}{#2}}
+ {\lbx@hu@mkdaterangetruncextra@i{#1}{#2}}}
+
+\protected\gdef\lbx@hu@mkdaterangetruncextra@i#1#2{%
+ \begingroup
+ \blx@metadateinfo{#2}%
+ \edef\lbx@hu@ifdayrange{\lbx@hu@ifdayrange@i{#2}}%
+ \iffieldundef{#2year}
+ {}
+ {\printtext[{#2date}]{%
+ \datecircaprint
+ \iffieldundef{#2yeardivision}
+ {\csuse{mkbibdate#1}{#2year}{#2month}{#2day}%
+ \blx@printtime{#2}{}}%
+ {\csuse{mkbibyeardivisiondate#1}{#2year}{#2yeardivision}}%
+ \dateeraprint{#2year}%
+ \dateuncertainprint
+ \iffieldundef{#2endyear}
+ {\printfield{extradate}}
+ {\iffieldequalstr{#2endyear}{}
+ {\printfield{extradate}%
+ \mbox{\bibdaterangesep}}
+ {\lbx@hu@ifdayrange{\bibrangedash}{\bibdaterangesep}%
+ \let\lbx@hu@ifplainday\@secondoftwo
+ \enddatecircaprint
+ \iffieldundef{#2yeardivision}
+ {\iffieldsequal{#2year}{#2endyear}
+ {\iffieldsequal{#2month}{#2endmonth}
+ {\csuse{mkbibdate#1}{}{}{#2endday}}
+ {\csuse{mkbibdate#1}{}{#2endmonth}{#2endday}}}
+ {\csuse{mkbibdate#1}{#2endyear}{#2endmonth}{#2endday}}%
+ \blx@printtime{#2}{end}}
+ {\iffieldsequal{#2year}{#2endyear}
+ {\csuse{mkbibyeardivisiondate#1}{}{#2endyeardivision}}
+ {\csuse{mkbibyeardivisiondate#1}{#2endyear}{#2endyeardivision}}}%
+ \printfield{extradate}%
+ \enddateuncertainprint
+ \dateeraprint{#2endyear}}}}}%
+ \endgroup}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/lbx/marathi-ms.lbx b/macros/latex/contrib/biblatex-ms/latex/lbx/marathi-ms.lbx
new file mode 100644
index 0000000000..c7af5ae904
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/lbx/marathi-ms.lbx
@@ -0,0 +1,557 @@
+% हे काम ११ ऑक्टोबर, २०२० रोजी निरंजन ह्यांनी सादर केले.
+% ह्यातील बहुतांश शब्दांकरिता भाषा संचालनालयाच्या भाषाविज्ञान
+% व वाङ्मयविद्या परिभाषा कोश तसेच ग्रंथालयशास्त्र परिभाषा कोश
+% ह्या दोन परिभाषा कोशांचा संदर्भ घेतला आहे.
+% ह्यात सुधारणा सुचवण्याकरिता ह्या कोशांचा आधार जरूर
+% घेण्यात यावा. भाषा संचालनालयाच्या कोशांतील शब्दांचे
+% शोधसुकर अर्थ पुढील संकेतस्थळावरून शोधता येऊ शकतात.
+% https://shabdakosh.marathi.gov.in/
+
+\ProvidesFile{marathi-ms.lbx}
+[\abx@lbxid]
+
+
+\lbx@ifutfinput
+ {}
+ {\PackageError{biblatex}
+ {Marathi requires UTF-8 support}
+ {The file 'marathi.lbx' requires UTF-8 encoding but you
+ seem\MessageBreak to be using a different encoding.
+ This is a fatal error. I will\MessageBreak abort loading
+ marathi.lbx now.}%
+ \endinput}
+
+
+\DeclareBibliographyExtras{%
+ \protected\def\bibrangedash{-}%
+ \let\finalandcomma=\empty
+ % there is some housekeeping to do if we want to use non-ASCII digits
+ % first we declare Devanagari numerals as valid numerals
+ % this will let us pass \ifnumeral tests etc.
+ % \lbx@dononasciinumerals is a core hook to allo .lbx files to inject
+ % valid numerals
+ \savecommand\lbx@dononasciinumerals
+ \def\lbx@dononasciinumerals{\do\०\do\१\do\२\do\३\do\४\do\५\do\६\do\७\do\८\do\९}%
+ % since we want to calculate with Devanagari numbers,
+ % we need to convert them to US-ASCII numbers
+ % \blx@dononasciicomputablenumerals and \blx@initcomputableequivs
+ % are both used by \def\blx@defcomputableequivalent
+ \savecommand\blx@dononasciicomputablenumerals
+ \savecommand\blx@initcomputableequivs
+ \let\blx@dononasciicomputablenumerals\@empty
+ \let\blx@initcomputableequivs\@empty
+ % map Devanagari digit to US-ASCII digit
+ \blx@defcomputableequivalent{\०}{\0}%
+ \blx@defcomputableequivalent{\१}{\1}%
+ \blx@defcomputableequivalent{\२}{\2}%
+ \blx@defcomputableequivalent{\३}{\3}%
+ \blx@defcomputableequivalent{\४}{\4}%
+ \blx@defcomputableequivalent{\५}{\5}%
+ \blx@defcomputableequivalent{\६}{\6}%
+ \blx@defcomputableequivalent{\७}{\7}%
+ \blx@defcomputableequivalent{\८}{\8}%
+ \blx@defcomputableequivalent{\९}{\9}%
+ % we will use getcomputableequivalent to obtain the ASCII-number
+ % whenever we actually need a number for computations
+ \protected\def\mkbibordinal#1{%
+ \begingroup
+ \blx@imc@getcomputableequivalent{#1}{\blx@tempa}%
+ \@tempcnta0\blx@tempa\relax
+ #1%
+ \ifcase\@tempcnta व\or ल\or र\or र\or थ\else व\fi
+ \endgroup}%
+ \protected\def\mkbibmascord#1{\mkbibordinal{#1}ा}%
+ \protected\def\mkbibfemord#1{\mkbibordinal{#1}ी}%
+ \protected\def\mkbibneutord#1{\mkbibordinal{#1}े}%
+ \savecommand\mkbibordedition
+ \savecommand\mkbibordseries
+ \def\mkbibordedition{\mkbibfemord}%
+ \def\mkbibordseries{\mkbibmascord}%
+ \savecommand\blx@comprange@check
+ \def\blx@comprange@check#1#2{%
+ \blx@imc@ifinteger{#1}
+ {\blx@imc@ifinteger{#2}}
+ {\@secondoftwo}
+ {\blx@comprange@comp{#1}{#2}}
+ {\blx@imc@hascomputableequivalent{#1}
+ {\blx@imc@hascomputableequivalent{#2}}
+ {\@secondoftwo}
+ {\begingroup
+ \blx@imc@getcomputableequivalent{#1}{\blx@tempa}%
+ \blx@imc@getcomputableequivalent{#2}{\blx@tempb}%
+ \edef\blx@tempc{\endgroup
+ \noexpand\blx@comprange@comp{\blx@tempa}{\blx@tempb}}%
+ \blx@tempc}
+ {\begingroup
+ \protected@edef\blx@tempc{\endgroup
+ \blx@range@out@value{%
+ \blx@range@out@item@process{\unexpanded{#1}}%
+ \noexpand\bibrangedash
+ \blx@range@out@item@process{\unexpanded{#2}}}}%
+ \blx@tempc}}}%
+ \savefieldformat[article]{series}%
+ \savefieldformat[periodical]{series}%
+ \DeclareFieldFormat[article,periodical]{series}{% series of a journal
+ \blx@imc@ifiscomputable{#1}
+ {\mkbibordseries{#1}~\bibstring{jourser}}
+ {\ifbibstring{#1}{\bibstring{#1}}{#1}}}%
+ \savefieldformat{edition}%
+ \DeclareFieldFormat{edition}{%
+ \blx@imc@ifiscomputable{#1}
+ {\mkbibordedition{#1}~\bibstring{edition}}
+ {#1\isdot}}%
+ \savecommand\mknumalph
+ \protected\def\mknumalph#1{%
+ \begingroup
+ \blx@imc@getcomputableequivalent{#1}{\blx@tempa}%
+ \blx@tempcnta=\blx@tempa\relax
+ \blx@numalph\blx@tempcnta
+ \endgroup}%
+ \savecommand\blx@numalph
+ \def\blx@numalph#1{%
+ \ifcase#1\relax\blx@warning@entry{Value \number#1 out of range}\number#1\or
+ अ\or आ\or इ\or ई\or उ\or ऊ\or ए\or ऐ\or ओ\or औ\or अं\or अः\or क\or
+ ख\or ग\or घ\or ङ\or च\or छ\or ज\or झ\or ञ\or ट\or ठ\or ड\or ढ\or
+ ण\or त\or थ\or द\or ध\or न\or प\or फ\or ब\or भ\or म\or य\or र\or
+ ल\or व\or श\or ष\or स\or ह\or ळ\or क्ष\or ज्ञ\else
+ \blx@warning@entry{Value \number#1 out of range}\number#1\fi}%
+ \savecommand\mkbibmonth
+ \protected\def\mkbibmonth#1{%
+ \begingroup
+ \begingroup
+ \edef\blx@tempb{\endgroup
+ \noexpand\blx@imc@getcomputableequivalent
+ {#1}
+ {\noexpand\blx@tempa}}%
+ \blx@tempb
+ \ifcase0\blx@tempa\relax
+ \blx@warning@entry{Month out of range or not an integer}%
+ \or\abx@bibmonth{january}%
+ \or\abx@bibmonth{february}%
+ \or\abx@bibmonth{march}%
+ \or\abx@bibmonth{april}%
+ \or\abx@bibmonth{may}%
+ \or\abx@bibmonth{june}%
+ \or\abx@bibmonth{july}%
+ \or\abx@bibmonth{august}%
+ \or\abx@bibmonth{september}%
+ \or\abx@bibmonth{october}%
+ \or\abx@bibmonth{november}%
+ \or\abx@bibmonth{december}%
+ \else
+ \blx@warning@entry{Month out of range}#1%
+ \fi
+ \endgroup}%
+ \protected\def\mkbibdatelong#1#2#3{%
+ \iffieldundef{#3}
+ {}
+ {\mkdayzeros{\thefield{#3}}%
+ \iffieldundef{#2}{}{\nobreakspace}}%
+ \iffieldundef{#2}
+ {}
+ {\mkbibmonth{\thefield{#2}}%
+ \iffieldundef{#1}{}{\iffieldundef{#3}{}{\addcomma}\space}}%
+ \iffieldbibstring{#1}
+ {\bibstring{\thefield{#1}}}
+ {\dateeraprintpre{#1}\stripzeros{\thefield{#1}}}}%
+ \protected\def\mkbibdateshort#1#2#3{%
+ \iffieldundef{#3}
+ {}
+ {\mkdayzeros{\thefield{#3}}%
+ \iffieldundef{#2}{}{/}}%
+ \iffieldundef{#2}
+ {}
+ {\mkmonthzeros{\thefield{#2}}%
+ \iffieldundef{#1}{}{/}}%
+ \iffieldbibstring{#1}
+ {\bibstring{\thefield{#1}}}
+ {\dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}}%
+ \expandafter\protected\expandafter\def\csname mkbibtime24h\endcsname#1#2#3#4{%
+ \iffieldundef{#1}
+ {}
+ {\mktimezeros{\thefield{#1}}%
+ \iffieldundef{#2}{}{\bibtimesep}}%
+ \iffieldundef{#2}
+ {}
+ {\mktimezeros{\thefield{#2}}%
+ \iffieldundef{#3}{}{\bibtimesep}}%
+ \iffieldundef{#3}
+ {}
+ {\mktimezeros{\thefield{#3}}}%
+ \iffieldundef{#4}{}
+ {\bibtimezonesep
+ \mkbibtimezone{\thefield{#4}}}}%
+ \expandafter\protected\expandafter\def\csname mkbibtime12h\endcsname#1#2#3#4{%
+ \ifnumless{\thefield{#1}}{12}
+ {\bibstring{am}}
+ {\bibstring{pm}}%
+ \space
+ \stripzeros{\mktimehh{\thefield{#1}}}%
+ \bibtimesep
+ \mktimezeros{\thefield{#2}}%
+ \iffieldundef{#3}{}
+ {\bibtimesep
+ \mktimezeros{\thefield{#3}}}%
+ \iffieldundef{#4}{}
+ {\space\bibtimezonesep
+ \parentext{\mkbibtimezone{\thefield{#4}}}}}%
+ \protected\def\mkbibyeardivisiondateshort#1#2{%
+ \mkbibyeardivision{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}%
+ \dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}%
+ \protected\def\mkbibyeardivisiondatelong#1#2{%
+ \mkbibyeardivision{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}%
+ \dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}%
+ \savefieldformat{url}%
+ \DeclareFieldFormat{url}{\bibstring{url}\addcolon\space\url{#1}}%
+ \savefieldformat{urldate}%
+ \DeclareFieldFormat{urldate}{\mkbibparens{#1\addspace\bibstring{urlseen}}}%
+}
+
+\UndeclareBibliographyExtras{%
+ \restorecommand\lbx@dononasciinumerals
+ \restorecommand\blx@dononasciicomputablenumerals
+ \restorecommand\blx@initcomputableequivs
+ \restorecommand\blx@comprange@check
+ \restorecommand\mkbibordedition
+ \restorecommand\mkbibordseries
+ \restorecommand\mknumalph
+ \restorecommand\blx@numalph
+ \restorecommand\mkbibmonth
+ \restorefieldformat{url}%
+ \restorefieldformat{urldate}%
+ \restorefieldformat[article]{series}%
+ \restorefieldformat[periodical]{series}%
+ \restorefieldformat{edition}%
+}
+
+\DeclareBibliographyStrings{%
+ bibliography = {{संदर्भसूची}{संदर्भसूची}},
+ references = {{संदर्भ}{संदर्भ}},
+ shorthands = {{संक्षेपसूची}{संक्षेप}},
+ editor = {{संपादक}{संपा\adddot}},
+ editors = {{संपादक}{संपा\adddot}},
+ compiler = {{संग्राहक}{संग्रा\adddot}},
+ compilers = {{संग्राहक}{संग्रा\adddot}},
+ redactor = {{पाठशोधक}{पाठ\adddot}},
+ redactors = {{पाठशोधक}{पाठ\adddot}},
+ reviser = {{पुनरीक्षक}{पुन\adddot}},
+ revisers = {{पुनरीक्षक}{पुन\adddot}},
+ founder = {{संस्थापक}{संस्था\adddot}},
+ founders = {{संस्थापक}{संस्था\adddot}},
+ collaborator = {{सहलेखक}{सह\adddot}},% FIXME: unsure
+ collaborators = {{सहलेखक}{सहलेखक\adddot}},% FIXME: unsure
+ translator = {{अनुवादक}{अनु\adddot}},
+ translators = {{अनुवादक}{अनु\adddot}},
+ commentator = {{समालोचक}{समा\adddot}},
+ commentators = {{समालोचक}{समा\adddot}},
+ annotator = {{टीपालेखक}{टीपा\adddot}},
+ annotators = {{टीपालेखक}{टीपा\adddot}},
+ commentary = {{समालोचन}{समा\adddot}},
+ annotations = {{टीपा}{टीपा}},
+ introduction = {{प्रस्तावना}{प्रस्ता\adddot}},
+ foreword = {{प्रास्ताविक}{प्रास्ता\adddot}},
+ editortr = {{संपादक आणि अनुवादक}%
+ {संपा\adddotspace व अनु\adddot}},
+ editorstr = {{संपादक आणि अनुवादक}%
+ {संपा\adddotspace व अनु\adddot}},
+ editorco = {{संपादक आणि भाष्यकार}%
+ {संपा\adddotspace व भाष्य}},
+ editorsco = {{संपादक आणि भाष्यकार}%
+ {संपा\adddotspace व भाष्य}},
+ editoran = {{संपादक आणि टीपालेखक}%
+ {संपा\adddotspace व टीपा\adddot}},
+ editorsan = {{संपादक आणि टीपालेखक}%
+ {संपा\adddotspace व टीपा\adddot}},
+ editorin = {{संपादक आणि प्रस्तावना}%
+ {संपा\adddotspace व प्रस्ता\adddot}},
+ editorsin = {{संपादक व प्रस्तावना}%
+ {संपा\adddotspace व प्रस्ता\adddot}},
+ editorfo = {{संपादक व प्रास्ताविक}%
+ {संपा\adddotspace व प्रास्ता\adddot}},
+ editorsfo = {{संपादक व प्रास्ताविक}%
+ {संपा\adddotspace व प्रास्ता\adddot}},
+ editortrco = {{संपादक, अनुवादक व भाष्यकार}%
+ {संपा.\addabbrvspace अनु\adddot व भाष्य}},
+ editorstrco = {{संपादक, अनुवादक व भाष्यकार}%
+ {संपा.\addabbrvspace अनु\adddot व भाष्य}},
+ editortran = {{संपादक, अनुवादक व टीपालेखक}%
+ {संपा.\addabbrvspace अनु\adddot व टीपा\adddot}},
+ editorstran = {{संपादक, अनुवादक व टीपालेखक}%
+ {संपा.\addabbrvspace अनु\adddot व टीपा\adddot}},
+ editortrin = {{संपादक, अनुवादक व प्रस्तावना}%
+ {संपा.\addabbrvspace अनु\adddot व प्रस्ता\adddot}},
+ editorstrin = {{संपादक, अनुवादक व प्रस्तावना}%
+ {संपा.\addabbrvspace अनु\adddot व प्रस्ता\adddot}},
+ editortrfo = {{संपादक, अनुवादक व प्रास्ताविक}%
+ {संपा.\addabbrvspace अनु\adddot व प्रास्ता\adddot}},
+ editorstrfo = {{संपादक, अनुवादक व प्रास्ताविक}%
+ {संपा.\addabbrvspace अनु\adddot व प्रास्ता\adddot}},
+ editorcoin = {{संपादक, भाष्यकार व प्रस्तावना}%
+ {संपा.\addabbrvspace भाष्य व प्रस्ता\adddot}},
+ editorscoin = {{संपादक, भाष्यकार व प्रस्तावना}%
+ {संपा.\addabbrvspace भाष्य व प्रस्ता\adddot}},
+ editorcofo = {{संपादक, भाष्यकार व प्रास्ताविक}%
+ {संपा.\addabbrvspace भाष्य व प्रास्ता\adddot}},
+ editorscofo = {{संपादक, भाष्यकार व प्रास्ताविक}%
+ {संपा.\addabbrvspace भाष्य व प्रास्ता\adddot}},
+ editoranin = {{संपादक, टीपालेखक व प्रस्तावना}%
+ {संपा.\addabbrvspace टीपा\adddot व प्रस्ता\adddot}},
+ editorsanin = {{संपादक, टीपालेखक व प्रस्तावना}%
+ {संपा.\addabbrvspace टीपा\adddot व प्रस्ता\adddot}},
+ editoranfo = {{संपादक, टीपालेखक व प्रास्ताविक}%
+ {संपा.\addabbrvspace टीपा\adddot व प्रास्ता\adddot}},
+ editorsanfo = {{संपादक, टीपालेखक व प्रास्ताविक}%
+ {संपा.\addabbrvspace टीपा\adddot व प्रास्ता\adddot}},
+ editortrcoin = {{संपादक, अनुवादक, भाष्यकार व प्रस्तावना}%
+ {संपा.\addabbrvspace अनु., भाष्य व प्रस्ता\adddot}},
+ editorstrcoin = {{संपादक, अनुवादक, भाष्यकार व प्रस्तावना}%
+ {संपा.\addabbrvspace अनु., भाष्य व प्रस्ता\adddot}},
+ editortrcofo = {{संपादक, अनुवादक, भाष्यकार व प्रास्ताविक}%
+ {संपा.\addabbrvspace अनु., भाष्य व प्रास्ता\adddot}},
+ editorstrcofo = {{संपादक, अनुवादक, भाष्यकार व प्रास्ताविक}%
+ {संपा.\addabbrvspace अनु., भाष्य व प्रास्ता\adddot}},
+ editortranin = {{संपादक, अनुवादक, टीपालेखक व प्रस्तावना}%
+ {संपा.\addabbrvspace अनु., टीपा\adddot व प्रस्ता\adddot}},
+ editorstranin = {{संपादक, अनुवादक, टीपालेखक व प्रस्तावना}%
+ {संपा.\addabbrvspace अनु., टीपा\adddot व प्रस्ता\adddot}},
+ editortranfo = {{संपादक, अनुवादक, टीपालेखक व प्रास्ताविक}%
+ {संपा.\addabbrvspace अनु., टीपा\adddot व प्रास्ता\adddot}},
+ editorstranfo = {{संपादक, अनुवादक, टीपालेखक व प्रास्ताविक}%
+ {संपा.\addabbrvspace अनु., टीपा\adddot व प्रास्ता\adddot}},
+ translatorco = {{अनुवादक व भाष्य}%
+ {अनु\adddot\ व भाष्य}},
+ translatorsco = {{अनुवादक व भाष्यकार}%
+ {अनु\adddot\ व भाष्य}},
+ translatoran = {{अनुवादक व टीपालेखक}%
+ {अनु\adddot\ व टीपा\adddot}},
+ translatorsan = {{अनुवादक व टीपालेखक}%
+ {अनु\adddot\ व टीपा\adddot}},
+ translatorin = {{अनुवाद व प्रस्तावना}%
+ {अनु\adddot\ व प्रस्ता\adddot}},
+ translatorsin = {{अनुवाद व प्रस्तावना}%
+ {अनु\adddot\ व प्रस्ता\adddot}},
+ translatorfo = {{अनुवाद व प्रास्ताविक}%
+ {अनु\adddot\ व प्रास्ता\adddot}},
+ translatorsfo = {{अनुवाद व प्रास्ताविक}%
+ {अनु\adddot\ व प्रास्ता\adddot}},
+ translatorcoin = {{अनुवाद, समालोचन व प्रस्तावना}%
+ {अनु., भाष्य व प्रस्ता\adddot}},
+ translatorscoin = {{अनुवाद, समालोचन व प्रस्तावना}%
+ {अनु., भाष्य व प्रस्ता\adddot}},
+ translatorcofo = {{अनुवाद, समालोचन व प्रास्ताविक}%
+ {अनु., भाष्य व प्रास्ता\adddot}},
+ translatorscofo = {{अनुवाद, समालोचन व प्रास्ताविक}%
+ {अनु., भाष्य व प्रास्ता\adddot}},
+ translatoranin = {{अनुवाद, टीपा व प्रस्तावना}%
+ {अनु., टीपा\adddot व प्रस्ता\adddot}},
+ translatorsanin = {{अनुवाद, टीपा व प्रस्तावना}%
+ {अनु., टीपा\adddot व प्रस्ता\adddot}},
+ translatoranfo = {{अनुवाद, टीपा व प्रास्ताविक}%
+ {अनु., टीपा\adddot व प्रास्ता\adddot}},
+ translatorsanfo = {{अनुवाद, टीपालेखन व प्रास्ताविक}%
+ {अनु., टीपा\adddot व प्रास्ता\adddot}},
+ organizer = {{आयोजक}{आयो\adddot}},
+ organizers = {{आयोजक}{आयो\adddot}},
+ byorganizer = {{आयोजित}{आयो\adddot}},
+ byauthor = {{लेखन}{लेखन}},
+ byeditor = {{संपादित}{संपा\adddot}},
+ bycompiler = {{संग्रहण}{संग्र\adddot}},
+ byredactor = {{पाठशोधित}{पाठ\adddot}},
+ byreviser = {{पुनरीक्षक}{पुन.\adddot}},
+ byreviewer = {{परीक्षण}{परी\adddot}},
+ byfounder = {{संस्थापना}{संस्था\adddot}},
+ bycontinuator = {{क्रमशः}{क्रम\adddot}},
+ bytranslator = {{\lbx@lfromlang\ तून अनुवादित}{\lbx@sfromlang\ अनु\adddot}},
+ bycommentator = {{भाष्य}{भाष्य}},
+ byannotator = {{टीपांसहित}{टीपा\adddot}},
+ withcommentator = {{समालोचन}{समा\adddot}},
+ withannotator = {{टीपांसह}{टीपा}},
+ withintroduction = {{प्रस्तावनेसह}{प्रस्तावनेसह}},
+ withforeword = {{प्रास्ताविकासह}{प्रास्ता\adddot}},
+ byeditortr = {{संपादित व \lbx@lfromlang\ अनुवादित}%
+ {संपा\adddotspace व \lbx@sfromlang\ अनु\adddot}},
+ byeditorco = {{संपादित व समालोचित}%
+ {संपा\adddotspace व भाष्य}},
+ byeditoran = {{संपादित व टीपांसहित}%
+ {संपा\adddotspace व टीपा\adddot}},
+ byeditorin = {{संपादित, प्रस्तावना}%
+ {संपा.\addabbrvspace प्रस्ता\adddot}},
+ byeditorfo = {{संपादित, प्रास्ताविकासह}%
+ {संपा.\addabbrvspace प्रास्ता\adddot}},
+ byeditortrco = {{संपादित, \lbx@lfromlang\ अनुवादित व समालोचित}%
+ {संपा.\addabbrvspace \lbx@sfromlang\ अनु\adddot\ व भाष्य}},
+ byeditortran = {{संपादित, \lbx@lfromlang\ अनुवादित व टीपांसहित}%
+ {संपा.\addabbrvspace \lbx@sfromlang\ अनु\adddot\ व टीपा\adddot}},
+ byeditortrin = {{संपादित व \lbx@lfromlang\ अनुवादित, प्रस्तावना}%
+ {संपा\adddotspace व \lbx@sfromlang\ अनु\adddot\, प्रस्ता\adddot}},
+ byeditortrfo = {{संपादित व \lbx@lfromlang\ अनुवादित, प्रास्ताविकासह}%
+ {संपा\adddotspace व \lbx@sfromlang\ अनु\adddot\, प्रास्ताविकासह\adddot}},
+ byeditorcoin = {{संपादित व समालोचित, प्रस्तावना}%
+ {संपा\adddotspace व समा., प्रस्ता\adddot}},
+ byeditorcofo = {{संपादित व समालोचित, प्रास्ताविकासह}%
+ {संपा\adddotspace व समा., प्रास्ताविकासह\adddot}},
+ byeditoranin = {{संपादित व टीपांसहित, प्रस्तावना}%
+ {संपा\adddotspace व टीपा., प्रस्ता\adddot}},
+ byeditoranfo = {{संपादित व टीपांसहित, प्रास्ताविकासह}%
+ {संपा\adddotspace व टीपा., प्रास्ताविकासह\adddot}},
+ byeditortrcoin = {{संपादित, \lbx@lfromlang\ अनुवादित व समालोचित, प्रस्तावना}%
+ {संपा.\addabbrvspace \lbx@sfromlang\ अनु\adddot व समा., प्रस्ता\adddot}},
+ byeditortrcofo = {{संपादित, \lbx@lfromlang\ अनुवादित व समालोचित, प्रास्ताविकासह}%
+ {संपा.\addabbrvspace \lbx@sfromlang\ अनु\adddot\ व समा., प्रास्ताविकासह}},
+ byeditortranin = {{संपादित, \lbx@lfromlang\ अनुवादित व टीपांसहित, प्रस्तावना}%
+ {संपा.\addabbrvspace \lbx@sfromlang\ अनु\adddot\ व टीपा, प्रस्ता\adddot}},
+ byeditortranfo = {{संपादित, \lbx@lfromlang\ अनुवादित व टीपांसहित, प्रास्ताविकासह}%
+ {संपा.\addabbrvspace \lbx@sfromlang\ अनु\adddot\ व टीपा, प्रास्ताविकासह}},
+ bytranslatorco = {{\lbx@lfromlang\ अनुवादित व समालोचित}%
+ {\lbx@sfromlang\ अनु\adddot\ व भाष्य}},
+ bytranslatoran = {{\lbx@lfromlang\ अनुवादित व टीपांसहित}%
+ {\lbx@sfromlang\ अनु\adddot\ व टीपा}},
+ bytranslatorin = {{\lbx@lfromlang\ अनुवादित, प्रस्तावना}%
+ {\lbx@sfromlang\ अनु\adddot\, प्रस्ता\adddot}},
+ bytranslatorfo = {{\lbx@lfromlang\ अनुवादित, प्रास्ताविकासह}%
+ {\lbx@sfromlang\ अनु\adddot\, प्रास्ताविकासह\adddot}},
+ bytranslatorcoin = {{\lbx@lfromlang\ अनुवादित व समालोचित, प्रस्तावना}%
+ {\lbx@sfromlang\ अनु\adddot\ व समा., प्रस्ता\adddot}},
+ bytranslatorcofo = {{\lbx@lfromlang\ अनुवादित व समालोचित, प्रास्ताविकासह}%
+ {\lbx@sfromlang\ अनु\adddot\ व समा., प्रास्ताविकासह\adddot}},
+ bytranslatoranin = {{\lbx@lfromlang\ अनुवादित व टीपांसहित, प्रस्तावना}%
+ {\lbx@sfromlang\ अनु\adddot\ व टीपा, प्रस्ता\adddot}},
+ bytranslatoranfo = {{\lbx@lfromlang\ अनुवादित व टीपांसहित, प्रास्ताविकासह}%
+ {\lbx@sfromlang\ अनु\adddot\ व टीपा, प्रास्ताविकासह\adddot}},
+ and = {{आणि}{व}},
+ andothers = {{व इतर}{व इतर}},
+ andmore = {{व इतर}{व इतर}},
+ volume = {{खंड}{खंड}},
+ volumes = {{खंड}{खंड}},
+ jourvol = {{खंड}{खंड}},
+ jourser = {{अंक}{अंक}},
+ book = {{पुस्तक}{पुस्तक}},
+ part = {{खंड}{खंड}},
+ edition = {{आवृत्ती}{आ\adddot}},
+ reprintfrom = {{पुनर्प्रकाशित}{पुन\adddot}},
+ translationof = {{अनुवाद}{अनु\adddot}},
+ translationas = {{अनुवादित}{अनु\adddot}},
+ translationfrom = {{अनुवादित}{अनु\adddot}},
+ origpubas = {{मूळ आवृत्ती}{मूळ\adddotspace आ\adddot}},
+ origpubin = {{मूळ आवृत्ती}{मूळ\adddotspace आ\adddot}},
+ bypublisher = {{प्रकाशन}{प्रका\adddot}},
+ nodate = {{दिनांक अनिर्दिष्ट}{दिनांक अनिर्दिष्ट}},
+ page = {{पृष्ठ}{पृ\adddot}},
+ pages = {{पृष्ठे}{पृ\adddot}},
+ column = {{स्तंभ}{स्तंभ}},
+ columns = {{स्तंभ}{स्तंभ}},
+ line = {{ओळ}{ओळ}},
+ lines = {{ओळी}{ओळी}},
+ verse = {{कडवे}{कडवे}},
+ verses = {{कडवी}{कडवी}},
+ section = {{विभाग}{विभाग}},
+ sections = {{विभाग}{विभाग}},
+ paragraph = {{परिच्छेद}{परि\adddot}},
+ paragraphs = {{परिच्छेद}{परि\adddot}},
+ pagetotal = {{पृष्ठ}{पृ\adddot}},
+ pagetotals = {{पृष्ठे}{पृ\adddot}},
+ columntotal = {{स्तंभ}{स्तंभ}},
+ columntotals = {{स्तंभ}{स्तंभ}},
+ linetotal = {{ओळ}{ओळ}},
+ linetotals = {{ओळी}{ओळी}},
+ versetotal = {{कडवे}{कडवे}},
+ versetotals = {{कडवी}{कडवी}},
+ sectiontotal = {{विभाग}{विभाग}},
+ sectiontotals = {{विभाग}{विभाग}},
+ paragraphtotal = {{परिच्छेद}{परि\adddot}},
+ paragraphtotals = {{परिच्छेद}{परि\adddot}},
+ in = {{समाविष्ट}{समाविष्ट}},
+ inseries = {{समाविष्ट}{समाविष्ट}},
+ number = {{क्रमांक}{क्र\adddot}},
+ chapter = {{प्रकरण}{प्रकरण}},
+ bathesis = {{पदवी प्रबंध}{पदवी प्रबंध}},
+ mathesis = {{पदव्युत्तर प्रबंध}{पदव्युत्तर प्रबंध}},
+ phdthesis = {{पीएचडी प्रबंध}{पीएचडी प्रबंध}},
+ candthesis = {{उमेदवार निबंध}{उमे\adddotspace निबंध}},
+ resreport = {{शोधअहवाल}{शोधअहवाल}},
+ techreport = {{तांत्रिक अहवाल}{तां\adddotspace अह\adddot}},
+ software = {{संगणकीय कार्यप्रणाली}{संग\adddotspace कार्यप्रणाली}},
+ audiocd = {{ध्वनिफीत}{ध्वनिफीत}},
+ version = {{आवृत्ती}{आवृत्ती}},
+ url = {{दुवा}{दुवा}},
+ urlfrom = {{उपलब्ध}{उपलब्ध}},
+ urlseen = {{भेट दिली}{भेट दिली}},
+ inpreparation = {{प्रगतिपथावर}{प्रगतिपथावर}},
+ submitted = {{सादर केलेले}{सादर केलेले}},
+ forthcoming = {{आगामी}{आगामी}},
+ prepublished = {{पूर्वप्रकाशित}{पूर्वप्रकाशित}},
+ thiscite = {{खासकरून}{खासकरून}},
+ seenote = {{टीप पाहा}{टीप पाहा}},
+ quotedin = {{उद्धृत}{उद्धृत}},
+ see = {{पाहा}{पाहा}},
+ seealso = {{हेदेखील पाहा}{हेदेखील पाहा}},
+ january = {{जानेवारी}{जाने\adddot}},
+ february = {{फेब्रुवारी}{फेब्रु\adddot}},
+ march = {{मार्च}{मार्च\adddot}},
+ april = {{एप्रिल}{एप्रि\adddot}},
+ may = {{मे}{मे}},
+ june = {{जून}{जून}},
+ july = {{जुलै}{जुलै}},
+ august = {{ऑगस्ट}{ऑग\adddot}},
+ september = {{सप्टेंबर}{सप्टें\adddot}},
+ october = {{ऑक्टोबर}{ऑक्टो\adddot}},
+ november = {{नोव्हेंबर}{नोव्हें\adddot}},
+ december = {{डिसेंबर}{डिसें\adddot}},
+ langenglish = {{इंग्रजी}{इंग्रजी}},
+ langfrench = {{फ्रेंच}{फ्रेंच}},
+ langgerman = {{जर्मन}{जर्मन}},
+ langgreek = {{ग्रीक}{ग्रीक}},
+ langjapanese = {{जपानी}{जपानी}},
+ langportuguese = {{पोर्तुगीज}{पोर्तुगीज}},
+ langrussian = {{रशियन}{रशियन}},
+ langspanish = {{स्पॅनिश}{स्पॅनिश}},
+ langswedish = {{स्वीडी}{स्वीडी}},
+ fromdutch = {{डचमधून}{डचमधून}},
+ fromenglish = {{इंग्रजीतून}{इंग्रजीतून}},
+ fromfrench = {{फ्रेंचमधून}{फ्रेंचमधून}},
+ fromgerman = {{जर्मनमधून}{जर्मनमधून}},
+ fromgreek = {{ग्रीकमधून}{ग्रीकमधून}},
+ fromjapanese = {{जपानीतून}{जपानीतून}},
+ fromlatin = {{लॅटिनमधून}{लॅटिनमधून}},
+ fromportuguese = {{पोर्तुगीजमधून}{पोर्तुगीजमधून}},
+ fromrussian = {{रशियनमधून}{रशियनमधून}},
+ fromspanish = {{स्पॅनिशमधून}{स्पॅनिशमधून}},
+ fromswedish = {{स्वीडीतून}{स्वीडीतून}},
+ patent = {{पेटंट}{पे\adddot}},
+ file = {{धारिका}{धारिका}},
+ library = {{ग्रंथालय}{ग्रंथालय}},
+ abstract = {{सारांश}{सारांश}},
+ annotation = {{टीपा}{टीपा}},
+ commonera = {{सामान्य युग}{सा.यु\adddot}},
+ beforecommonera = {{सामान्य युग पूर्व}{सा.यु.पू\adddot}},
+ annodomini = {{इसवी सन}{इ.स\adddot}},
+ beforechrist = {{इ.स.पू\adddot}{इ.स.पू\adddot}},
+ circa = {{सुमारे}{सुमारे}},
+ spring = {{वसंत}{वसंत}},
+ summer = {{उन्हाळा}{उन्हाळा}},
+ autumn = {{शरद}{शरद}},
+ winter = {{हिवाळा}{हिवाळा}},
+% springN = {{}{}},% FIXME: missing
+% summerN = {{}{}},% FIXME: missing
+% autumnN = {{}{}},% FIXME: missing
+% winterN = {{}{}},% FIXME: missing
+% springS = {{}{}},% FIXME: missing
+% summerS = {{}{}},% FIXME: missing
+% autumnS = {{}{}},% FIXME: missing
+% winterS = {{}{}},% FIXME: missing
+% Q1 = {{}{}},% FIXME: missing
+% Q2 = {{}{}},% FIXME: missing
+% Q3 = {{}{}},% FIXME: missing
+% Q4 = {{}{}},% FIXME: missing
+% QD1 = {{}{}},% FIXME: missing
+% QD2 = {{}{}},% FIXME: missing
+% QD3 = {{}{}},% FIXME: missing
+% S1 = {{}{}},% FIXME: missing
+% S2 = {{}{}},% FIXME: missing
+ am = {{मध्यान्हपूर्व}{म.पू\adddot}},
+ pm = {{मध्यान्होत्तर}{म.उ\adddot}},
+}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/lbx/naustrian-ms.lbx b/macros/latex/contrib/biblatex-ms/latex/lbx/naustrian-ms.lbx
new file mode 100644
index 0000000000..c11f3a4904
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/lbx/naustrian-ms.lbx
@@ -0,0 +1,22 @@
+\ProvidesFile{naustrian-ms.lbx}
+[\abx@lbxid]
+
+\InheritBibliographyExtras{german}
+
+\DeclareBibliographyStrings{%
+ inherit = {german},
+ citedas = {{im Folgenden zitiert als}{im Folgenden zit\adddotspace als}},
+ january = {{J\"anner}{J\"an\adddot}},
+% alternative spelling, uncomment to enable:
+% section = {{Paragraf}{\S}},
+% sections = {{Paragrafen}{\S\S}},
+% sectiontotal = {{Paragraf}{\S}},
+% sectiontotals = {{Paragrafen}{\S\S}},
+}
+
+\DeclareHyphenationExceptions{%
+ Pa-tent-an-mel-dung
+ Pa-tent-an-meld
+}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/lbx/newzealand-ms.lbx b/macros/latex/contrib/biblatex-ms/latex/lbx/newzealand-ms.lbx
new file mode 100644
index 0000000000..73f272df34
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/lbx/newzealand-ms.lbx
@@ -0,0 +1,30 @@
+\ProvidesFile{newzealand-ms.lbx}
+[\abx@lbxid]
+
+\InheritBibliographyExtras{british}
+\DeclareBibliographyExtras{%
+ \protected\def\mkbibdatelong#1#2#3{%
+ \iffieldundef{#3}
+ {}
+ {\stripzeros{\thefield{#3}}%
+ \iffieldundef{#2}{}{\nobreakspace}}%
+ \iffieldundef{#2}
+ {}
+ {\mkbibmonth{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}}%
+ \iffieldbibstring{#1}
+ {\bibstring{\thefield{#1}}}
+ {\dateeraprintpre{#1}\stripzeros{\thefield{#1}}}}%
+ \protected\def\mkbibyeardivisiondateshort#1#2{%
+ \mkbibyeardivision{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}%
+ \dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}%
+ \protected\def\mkbibyeardivisiondatelong#1#2{%
+ \mkbibyeardivision{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}%
+ \dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}%
+}
+
+\InheritBibliographyStrings{english}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/lbx/ngerman-ms.lbx b/macros/latex/contrib/biblatex-ms/latex/lbx/ngerman-ms.lbx
new file mode 100644
index 0000000000..8088f08e42
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/lbx/ngerman-ms.lbx
@@ -0,0 +1,21 @@
+\ProvidesFile{ngerman-ms.lbx}
+[\abx@lbxid]
+
+\InheritBibliographyExtras{german}
+
+\DeclareBibliographyStrings{%
+ inherit = {german},
+ citedas = {{im Folgenden zitiert als}{im Folgenden zit\adddotspace als}},
+% alternative spelling, uncomment to enable:
+% section = {{Paragraf}{\S}},
+% sections = {{Paragrafen}{\S\S}},
+% sectiontotal = {{Paragraf}{\S}},
+% sectiontotals = {{Paragrafen}{\S\S}},
+}
+
+\DeclareHyphenationExceptions{%
+ Pa-tent-an-mel-dung
+ Pa-tent-an-meld
+}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/lbx/norsk-ms.lbx b/macros/latex/contrib/biblatex-ms/latex/lbx/norsk-ms.lbx
new file mode 100644
index 0000000000..090848f707
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/lbx/norsk-ms.lbx
@@ -0,0 +1,553 @@
+\ProvidesFile{norsk-ms.lbx}
+[\abx@lbxid]
+
+\DeclareRedundantLanguages{norsk}{norwegian,nynorsk}
+
+\DeclareBibliographyExtras{%
+ \protected\def\bibrangedash{%
+ \textendash\penalty\hyphenpenalty}% breakable dash
+ \let\finalandcomma=\empty
+ \let\finalandsemicolon=\empty
+ \protected\def\mkbibordinal#1{\stripzeros{#1}\adddot}%
+ \protected\def\mkbibmascord{\mkbibordinal}%
+ \protected\def\mkbibfemord{\mkbibordinal}%
+ \protected\def\mkbibneutord{\mkbibordinal}%
+ \protected\def\mkbibdatelong#1#2#3{%
+ \iffieldundef{#3}
+ {}
+ {\mkbibordinal{\thefield{#3}}%
+ \iffieldundef{#2}{}{\nobreakspace}}%
+ \iffieldundef{#2}
+ {}
+ {\mkbibmonth{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}}%
+ \iffieldbibstring{#1}
+ {\bibstring{\thefield{#1}}}
+ {\dateeraprintpre{#1}\stripzeros{\thefield{#1}}}}%
+ \protected\def\mkbibdateshort#1#2#3{%
+ \iffieldundef{#3}
+ {}
+ {\mkdayzeros{\thefield{#3}}\adddot}%
+ \iffieldundef{#2}
+ {}
+ {\mkmonthzeros{\thefield{#2}}%
+ \iffieldundef{#1}{}{\adddot}}%
+ \iffieldbibstring{#1}
+ {\bibstring{\thefield{#1}}}
+ {\dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}}%
+ \expandafter\protected\expandafter\def\csname mkbibtime24h\endcsname#1#2#3#4{%
+ \iffieldundef{#1}
+ {}
+ {\mktimezeros{\thefield{#1}}%
+ \iffieldundef{#2}{}{\bibtimesep}}%
+ \iffieldundef{#2}
+ {}
+ {\mktimezeros{\thefield{#2}}%
+ \iffieldundef{#3}{}{\bibtimesep}}%
+ \iffieldundef{#3}
+ {}
+ {\mktimezeros{\thefield{#3}}}%
+ \iffieldundef{#4}{}
+ {\bibtimezonesep
+ \mkbibtimezone{\thefield{#4}}}}%
+ \expandafter\protected\expandafter\def\csname mkbibtime12h\endcsname#1#2#3#4{%
+ \stripzeros{\mktimehh{\thefield{#1}}}\bibtimesep
+ \forcezerosmdt{\thefield{#2}}%
+ \iffieldundef{#3}{}
+ {\bibtimesep
+ \forcezerosmdt{\thefield{#3}}}%
+ \space
+ \ifnumless{\thefield{#1}}{12}
+ {\bibstring{am}}
+ {\bibstring{pm}}%
+ \iffieldundef{#4}{}
+ {\space\bibtimezonesep
+ \parentext{\mkbibtimezone{\thefield{#4}}}}}%
+ \protected\def\mkbibyeardivisiondateshort#1#2{%
+ \mkbibyeardivision{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}%
+ \dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}%
+ \protected\def\mkbibyeardivisiondatelong#1#2{%
+ \mkbibyeardivision{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}%
+ \dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}%
+}
+
+\DeclareBibliographyStrings{%
+ bibliography = {{Bibliografi}{Bibliografi}},
+ references = {{Referanser}{Referanser}},
+ shorthands = {{Forkortelser}{Forkortelser}},
+ editor = {{redakt{\o}r}{red\adddot}},
+ editors = {{redakt{\o}rer}{red\adddot}},
+ compiler = {{kompilator}{komp\adddot}},
+ compilers = {{kompilatorer}{komp\adddot}},
+ redactor = {{bearbeidelse}{bearb\adddot}},
+ redactors = {{bearbeidelse}{bearb\adddot}},
+ reviser = {{revisjon}{rev\adddot}},
+ revisers = {{revisjon}{rev\adddot}},
+ founder = {{grunnlegger}{grunnl\adddot}},
+ founders = {{grunnleggere}{grunnl\adddot}},
+ continuator = {{videref{\o}ring}{videref\adddot}},
+ continuators = {{videref{\o}ring}{videref\adddot}},
+ collaborator = {{samarbeid}{samarb\adddot}},
+ collaborators = {{samarbeid}{samarb\adddot}},
+ translator = {{oversetter}{overs\adddot}},
+ translators = {{oversettere}{overs\adddot}},
+ commentator = {{kommentarer}{komm\adddot}},
+ commentators = {{kommentarer}{komm\adddot}},
+ annotator = {{forklaringer}{forkl\adddot}},
+ annotators = {{forklaringer}{forkl\adddot}},
+ commentary = {{kommentarer}{komm\adddot}},
+ annotations = {{forklaringer}{forkl\adddot}},
+ introduction = {{innledning}{innl\adddot}},
+ foreword = {{forord}{forord}},
+ afterword = {{etterord}{etterord}},
+ editortr = {{redakt{\o}r og oversetter}%
+ {red\adddotspace og overs\adddot}},
+ editorstr = {{redakt{\o}rer og oversettere}%
+ {red\adddotspace og overs\adddot}},
+ editorco = {{redakt{\o}r og kommentarer}
+ {red\adddotspace og komm\adddot}},
+ editorsco = {{redakt{\o}rer og kommentarer}
+ {red\adddotspace og komm\adddot}},
+ editoran = {{redakt{\o}r og forklaringer}%
+ {red\adddotspace og forkl\adddot}},
+ editorsan = {{redakt{\o}rer og forklaringer}%
+ {red\adddotspace og forkl\adddot}},
+ editorin = {{redakt{\o}r og innledning}%
+ {red\adddotspace og innl\adddot}},
+ editorsin = {{redakt{\o}rer og innledning}%
+ {red\adddotspace og innl\adddot}},
+ editorfo = {{redakt{\o}r og forord}%
+ {red\adddotspace og forord}},
+ editorsfo = {{redakt{\o}rer og forord}%
+ {red\adddotspace og forord}},
+ editoraf = {{redakt{\o}r og etterord}%
+ {red\adddotspace og etterord}},
+ editorsaf = {{redakt{\o}rer og etterord}%
+ {red\adddotspace og etterord}},
+ editortrco = {{redakt{\o}r, oversetter og kommentarer}%
+ {red.,\addabbrvspace overs\adddotspace og komm\adddot}},
+ editorstrco = {{redakt{\o}rer, oversettere og kommentarer}%
+ {red.,\addabbrvspace overs\adddotspace og komm\adddot}},
+ editortran = {{redakt{\o}r, oversetter og forklaringer}%
+ {red.,\addabbrvspace overs\adddotspace og forkl\adddot}},
+ editorstran = {{redakt{\o}rer, oversettere og forklaringer}%
+ {red.,\addabbrvspace overs\adddotspace og forkl\adddot}},
+ editortrin = {{redakt{\o}r, oversetter og innledning}%
+ {red.,\addabbrvspace overs\adddotspace og innl\adddot}},
+ editorstrin = {{redakt{\o}rer, oversettere og innledning}%
+ {red.,\addabbrvspace overs\adddotspace og innl\adddot}},
+ editortrfo = {{redakt{\o}r, oversetter og forord}%
+ {red.,\addabbrvspace overs\adddotspace og forord}},
+ editorstrfo = {{redakt{\o}rer, oversettere og forord}%
+ {red.,\addabbrvspace overs\adddotspace og forord}},
+ editortraf = {{redakt{\o}r, oversetter og etterord}%
+ {red.,\addabbrvspace overs\adddotspace og etterord}},
+ editorstraf = {{redakt{\o}rer, oversettere og etterord}%
+ {red.,\addabbrvspace overs\adddotspace og etterord}},
+ editorcoin = {{redakt{\o}r, kommentarer og innledning}%
+ {red.,\addabbrvspace komm\adddotspace og innl\adddot}},
+ editorscoin = {{redakt{\o}rer, kommentarer og innledning}%
+ {red.,\addabbrvspace komm\adddotspace og innl\adddot}},
+ editorcofo = {{redakt{\o}r, kommentarer og forord}%
+ {red.,\addabbrvspace komm\adddotspace og forord}},
+ editorscofo = {{redakt{\o}rer, kommentarer og forord}%
+ {red.,\addabbrvspace komm\adddotspace og forord}},
+ editorcoaf = {{redakt{\o}r, kommentarer og etterord}%
+ {red.,\addabbrvspace komm\adddotspace og etterord}},
+ editorscoaf = {{redakt{\o}rer, kommentarer og etterord}%
+ {red.,\addabbrvspace komm\adddotspace og etterord}},
+ editoranin = {{redakt{\o}r, forklaringer og innledning}%
+ {red.,\addabbrvspace forkl\adddotspace og innl\adddot}},
+ editorsanin = {{redakt{\o}rer, forklaringer og innledning}%
+ {red.,\addabbrvspace forkl\adddotspace og innl\adddot}},
+ editoranfo = {{redakt{\o}r, forklaringer og forord}%
+ {red.,\addabbrvspace forkl\adddotspace og forord}},
+ editorsanfo = {{redakt{\o}rer, forklaringer og forord}%
+ {red.,\addabbrvspace forkl\adddotspace og forord}},
+ editoranaf = {{redakt{\o}r, forklaringer og etterord}%
+ {red.,\addabbrvspace forkl\adddotspace og etterord}},
+ editorsanaf = {{redakt{\o}rer, forklaringer og etterord}%
+ {red.,\addabbrvspace forkl\adddotspace og etterord}},
+ editortrcoin = {{redakt{\o}r, oversetter, kommentarer og innledning}%
+ {red.,\addabbrvspace overs., komm\adddotspace og innl\adddot}},
+ editorstrcoin = {{redakt{\o}rer, oversettere, kommentarer og innledning}%
+ {red.,\addabbrvspace overs., komm\adddotspace og innl\adddot}},
+ editortrcofo = {{redakt{\o}r, oversetter, kommentarer og forord}%
+ {red.,\addabbrvspace overs., komm\adddotspace og forord}},
+ editorstrcofo = {{redakt{\o}rer, oversettere, kommentarer og forord}%
+ {red.,\addabbrvspace overs., komm\adddotspace og forord}},
+ editortrcoaf = {{redakt{\o}r, oversetter, kommentarer og etterord}%
+ {red.,\addabbrvspace overs., komm\adddotspace og etterord}},
+ editorstrcoaf = {{redakt{\o}rer, oversettere, kommentarer og etterord}%
+ {red.,\addabbrvspace overs., komm\adddotspace og etterord}},
+ editortranin = {{redakt{\o}r, oversetter, forklaringer og innledning}%
+ {red.,\addabbrvspace overs., forkl\adddotspace og innl\adddot}},
+ editorstranin = {{redakt{\o}rer, oversettere, forklaringer og innledning}%
+ {red.,\addabbrvspace overs., forkl\adddotspace og innl\adddot}},
+ editortranfo = {{redakt{\o}r, oversetter, forklaringer og forord}%
+ {red.,\addabbrvspace overs., forkl\adddotspace og forord}},
+ editorstranfo = {{redakt{\o}rer, oversettere, forklaringer og forord}%
+ {red.,\addabbrvspace overs., forkl\adddotspace og forord}},
+ editortranaf = {{redakt{\o}r, oversetter, forklaringer og etterord}%
+ {red.,\addabbrvspace overs., forkl\adddotspace og etterord}},
+ editorstranaf = {{redakt{\o}rer, oversettere, forklaringer og etterord}%
+ {red.,\addabbrvspace overs., forkl\adddotspace og etterord}},
+ translatorco = {{oversetter og kommentarer}%
+ {overs\adddotspace og komm\adddot}},
+ translatorsco = {{oversettere og kommentarer}%
+ {overs\adddotspace og komm\adddot}},
+ translatoran = {{oversetter og forklaringer}%
+ {overs\adddotspace og forkl\adddot}},
+ translatorsan = {{oversettere og forklaringer}%
+ {overs\adddotspace og forkl\adddot}},
+ translatorin = {{oversetter og innledning}%
+ {overs\adddotspace og innl\adddot}},
+ translatorsin = {{oversettere og innledning}%
+ {overs\adddotspace og innl\adddot}},
+ translatorfo = {{oversetter og forord}%
+ {overs\adddotspace og forord}},
+ translatorsfo = {{oversettere og forord}%
+ {overs\adddotspace og forord}},
+ translatoraf = {{oversetter og etterord}%
+ {overs\adddotspace og etterord}},
+ translatorsaf = {{oversettere og etterord}%
+ {overs\adddotspace og etterord}},
+ translatorcoin = {{oversetter, kommentarer og innledning}%
+ {overs., komm\adddotspace og innl\adddot}},
+ translatorscoin = {{oversettere, kommentarer og innledning}%
+ {overs., komm\adddotspace og innl\adddot}},
+ translatorcofo = {{oversetter, kommentarer og forord}%
+ {overs., komm\adddotspace og forord}},
+ translatorscofo = {{oversettere, kommentarer og forord}%
+ {overs., komm\adddotspace og forord}},
+ translatorcoaf = {{oversetter, kommentarer og etterord}%
+ {overs., komm\adddotspace og etterord}},
+ translatorscoaf = {{oversettere, kommentarer og etterord}%
+ {overs., komm\adddotspace og etterord}},
+ translatoranin = {{oversetter, forklaringer og innledning}%
+ {overs., forkl\adddotspace og innl\adddot}},
+ translatorsanin = {{oversettere, forklaringer og innledning}%
+ {overs., forkl\adddotspace og innl\adddot}},
+ translatoranfo = {{oversetter, forklaringer og forord}%
+ {overs., forkl\adddotspace og forord}},
+ translatorsanfo = {{oversettere, forklaringer og forord}%
+ {overs., forkl\adddotspace og forord}},
+ translatoranaf = {{oversetter, forklaringer og etterord}%
+ {overs., forkl\adddotspace og etterord}},
+ translatorsanaf = {{oversettere, forklaringer og etterord}%
+ {overs., forkl\adddotspace og etterord}},
+ organizer = {{organisator}{org\adddot}},
+ organizers = {{organisatorer}{org\adddot}},
+ byorganizer = {{organisert av}{org\adddotspace av}},
+ byauthor = {{av}{av}},
+ byeditor = {{redigert av}{red\adddotspace av}},
+ bycompiler = {{kompilert av}{komp\adddotspace av}},
+ byredactor = {{bearbeidet av}{bearb\adddotspace av}},
+ byreviser = {{revidert av}{rev\adddotspace av}},
+ byreviewer = {{kritikk ved}{krit\adddotspace ved}},
+ byfounder = {{grunnlagt av}{grunnl\adddotspace av}},
+ bycontinuator = {{videref{\o}rt av}{videref\adddotspace av}},
+ bycollaborator = {{i samarbeid med}{i samarb\adddotspace med}},
+ bytranslator = {{oversatt \lbx@lfromlang\ av}{overs\adddot\ \lbx@sfromlang\ av}},
+ bycommentator = {{kommentert av}{komm\adddot\ av}},
+ byannotator = {{forklart av}{forkl\adddot\ av}},
+ withcommentator = {{med kommentarer av}{med komm\adddot\ av}},
+ withannotator = {{med forklaringer av}{med forkl\adddot\ av}},
+ withintroduction = {{med innledning av}{med innl\adddot\ av}},
+ withforeword = {{med forord av}{med forord av}},
+ withafterword = {{med etterord av}{med etterord av}},
+ byeditortr = {{redigert og oversatt \lbx@lfromlang\ av}%
+ {red\adddotspace og overs\adddot\ \lbx@sfromlang\ av}},
+ byeditorco = {{redigert og kommentert av}%
+ {red\adddotspace og komm\adddot\ av}},
+ byeditoran = {{redigert og forklart av}%
+ {red\adddotspace og forkl\adddot\ av}},
+ byeditorin = {{redigert, med innledning, av}%
+ {red.,\addabbrvspace med innl., av}},
+ byeditorfo = {{redigert, med forord, av}%
+ {red.,\addabbrvspace med forord, av}},
+ byeditoraf = {{redigert, med etterord, av}%
+ {red.,\addabbrvspace med etterord, av}},
+ byeditortrco = {{redigert, oversatt \lbx@lfromlang\ og kommentert av}%
+ {red.,\addabbrvspace overs\adddot\ \lbx@sfromlang\ og komm\adddot\ av}},
+ byeditortran = {{redigert, oversatt \lbx@lfromlang\ og forklart av}%
+ {red.,\addabbrvspace overs\adddot\ \lbx@sfromlang\ og forkl\adddot\ av}},
+ byeditortrin = {{redigert og oversatt \lbx@lfromlang, med innledning, av}%
+ {red\adddotspace og overs\adddot\ \lbx@sfromlang, med innl., av}},
+ byeditortrfo = {{redigert og oversatt \lbx@lfromlang, med forord, av}%
+ {red\adddotspace og overs\adddot\ \lbx@sfromlang, med forord, av}},
+ byeditortraf = {{redigert og oversatt \lbx@lfromlang, med etterord, av}%
+ {red\adddotspace og overs\adddot\ \lbx@sfromlang, med etterord, av}},
+ byeditorcoin = {{redigert og kommentert, med innledning, av}%
+ {red\adddotspace og komm., med innl., av}},
+ byeditorcofo = {{redigert og kommentert, med forord, av}%
+ {red\adddotspace og komm., med forord, av}},
+ byeditorcoaf = {{redigert og kommentert, med etterord, av}%
+ {red\adddotspace og komm., med etterord, av}},
+ byeditoranin = {{redigert og forklart, med innledning, av}%
+ {red\adddotspace og forkl., med innl., av}},
+ byeditoranfo = {{redigert og forklart, med forord, av}%
+ {red\adddotspace og forkl., med forord, av}},
+ byeditoranaf = {{redigert og forklart, med etterord, av}%
+ {red\adddotspace og forkl., med etterord, av}},
+ byeditortrcoin = {{redigert, oversatt \lbx@lfromlang\ og kommentert, med innledning, av}%
+ {red.,\addabbrvspace overs\adddot\ \lbx@sfromlang\ og komm., med innl., av}},
+ byeditortrcofo = {{redigert, oversatt \lbx@lfromlang\ og kommentert, med forord, av}%
+ {red.,\addabbrvspace overs\adddot\ \lbx@sfromlang\ og komm., med forord, av}},
+ byeditortrcoaf = {{redigert, oversatt \lbx@lfromlang\ og kommentert, med etterord, av}%
+ {red.,\addabbrvspace overs\adddot\ \lbx@sfromlang\ og komm., med etterord, av}},
+ byeditortranin = {{redigert, oversatt \lbx@lfromlang\ og forklart, med innledning, av}%
+ {red.,\addabbrvspace overs\adddot\ \lbx@sfromlang\ og forkl., med innl., av}},
+ byeditortranfo = {{redigert, oversatt \lbx@lfromlang\ og forklart, med forord, av}%
+ {red.,\addabbrvspace overs\adddot\ \lbx@sfromlang\ og forkl., med forord, av}},
+ byeditortranaf = {{redigert, oversatt \lbx@lfromlang\ og forklart, med etterord, av}%
+ {red.,\addabbrvspace overs\adddot\ \lbx@sfromlang\ og forkl., med etterord, av}},
+ bytranslatorco = {{oversatt \lbx@lfromlang\ og kommentert av}%
+ {overs\adddot\ \lbx@sfromlang\ og komm\adddot\ av}},
+ bytranslatoran = {{oversatt \lbx@lfromlang\ og forklart av}%
+ {overs\adddot\ \lbx@sfromlang\ og forkl\adddot\ av}},
+ bytranslatorin = {{oversatt \lbx@lfromlang, med innledning, av}%
+ {overs\adddot\ \lbx@sfromlang, med innl., av}},
+ bytranslatorfo = {{oversatt \lbx@lfromlang, med forord, av}%
+ {overs\adddot\ \lbx@sfromlang, med forord, av}},
+ bytranslatoraf = {{oversatt \lbx@lfromlang, med etterord, av}%
+ {overs\adddot\ \lbx@sfromlang, med etterord, av}},
+ bytranslatorcoin = {{oversatt \lbx@lfromlang\ og kommentert, med innledning, av}%
+ {overs\adddot\ \lbx@sfromlang\ og komm., med innl., av}},
+ bytranslatorcofo = {{oversatt \lbx@lfromlang\ og kommentert, med forord, av}%
+ {overs\adddot\ \lbx@sfromlang\ og komm., med forord, av}},
+ bytranslatorcoaf = {{oversatt \lbx@lfromlang\ og kommentert, med etterord, av}%
+ {overs\adddot\ \lbx@sfromlang\ og komm., med etterord, av}},
+ bytranslatoranin = {{oversatt \lbx@lfromlang\ og forklart, med innledning, av}%
+ {overs\adddot\ \lbx@sfromlang\ og forkl., med innl., av}},
+ bytranslatoranfo = {{oversatt \lbx@lfromlang\ og forklart, med forord, av}%
+ {overs\adddot\ \lbx@sfromlang\ og forkl., med forord, av}},
+ bytranslatoranaf = {{oversatt \lbx@lfromlang\ og forklart, med etterord, av}%
+ {overs\adddot\ \lbx@sfromlang\ og forkl., med etterord, av}},
+ and = {{og}{og}},
+ andothers = {{med flere}{mfl\adddot}},
+ andmore = {{med mer}{m.m\adddot}},
+ volume = {{bind}{bd\adddot}},
+ volumes = {{bind}{bd\adddot}},
+ involumes = {{i}{i}},
+ jourvol = {{{\aa}rgang}{{\aa}rg\adddot}},
+ jourser = {{serie}{ser\adddot}},
+ book = {{bok}{bok}},
+ part = {{del}{del}},
+ issue = {{nummer}{nr\adddot}},
+ newseries = {{ny serie}{ny ser\adddot}},
+ oldseries = {{gammel serie}{gl\adddotspace ser\adddot}},
+ edition = {{utgave}{utg\adddot}},
+ reprint = {{opptrykk}{opptr\adddot}},
+ reprintof = {{opptrykk av}{opptr\adddotspace av}},
+ reprintas = {{trykt om som}{tr\adddotspace om som}},
+ reprintfrom = {{opptrykk fra}{opptr\adddotspace fra}},
+ translationof = {{oversettelse av}{overs\adddotspace av}},
+ translationas = {{oversatt som}{overs\adddotspace som}},
+ translationfrom = {{oversatt fra}{overs\adddotspace fra}},
+ reviewof = {{kritikk av}{krit\adddotspace av}},
+ origpubas = {{opprinnelig utgitt som}{oppr\adddot\ utg\adddot\ som}},
+ origpubin = {{opprinnelig utgitt i}{oppr\adddot\ utg\adddot\ i}},
+ astitle = {{som}{som}},
+ bypublisher = {{av}{av}},
+ nodate = {{udatert}{udatert}},
+ page = {{side}{s\adddot}},
+ pages = {{sider}{s\adddot}},
+ column = {{spalte}{sp\adddot}},
+ columns = {{spalter}{sp\adddot}},
+ line = {{linje}{l\adddot}},
+ lines = {{linjer}{l\adddot}},
+ verse = {{vers}{v\adddot}},
+ verses = {{vers}{v\adddot}},
+ section = {{avsnitt}{avsn\adddot}},
+ sections = {{avsnitt}{avsn\adddot}},
+ paragraph = {{avsnitt}{avsn\adddot}},
+ paragraphs = {{avsnitt}{avsn\adddot}},
+ pagetotal = {{side}{s\adddot}},
+ pagetotals = {{sider}{s\adddot}},
+ columntotal = {{spalte}{sp\adddot}},
+ columntotals = {{spalter}{sp\adddot}},
+ linetotal = {{linje}{l\adddot}},
+ linetotals = {{linjer}{l\adddot}},
+ versetotal = {{vers}{v\adddot}},
+ versetotals = {{vers}{v\adddot}},
+ sectiontotal = {{avsnitt}{avsn\adddot}},
+ sectiontotals = {{avsnitt}{avsn\adddot}},
+ paragraphtotal = {{avsnitt}{avsn\adddot}},
+ paragraphtotals = {{avsnitt}{avsn\adddot}},
+ in = {{i}{i}},
+ inseries = {{i}{i}},
+ ofseries = {{av}{av}},
+ number = {{nummer}{nr\adddot}},
+ chapter = {{kapittel}{kap\adddot}},
+% bathesis = {{}{}},% FIXME: missing
+ mathesis = {{masteroppgave}{masteroppg\adddot}},
+ phdthesis = {{ph.d.-avhandling}{ph.d.-avh\adddot}},
+ candthesis = {{hovedoppgave}{hovedoppg\adddot}},
+ resreport = {{forskningsrapport}{forskn.rapp\adddot}},
+ techreport = {{teknisk rapport}{tekn\adddotspace rapp\adddot}},
+ software = {{programvare}{programvare}},
+ datacd = {{data-cd}{data-cd}},
+ audiocd = {{lyd-cd}{lyd-cd}},
+ version = {{versjon}{versjon}},
+ url = {{adresse}{adresse}},
+ urlfrom = {{tilgjengelig fra}{tilgj\adddotspace fra}},
+ urlseen = {{sjekket}{sjekket}},
+ inpreparation = {{under utarbeidelse}{under utarb\adddot}},
+ submitted = {{innsendt}{innsendt}},
+ forthcoming = {{under utgivelse}{under utgiv\adddot}},
+ inpress = {{i trykken}{i trykken}},
+ prepublished = {{prepublisert}{prepubl\adddot}},
+ citedas = {{heretter sitert som}{heretter sit\adddotspace som}},
+ thiscite = {{her}{her}},
+ seenote = {{se note}{se n\adddot}},
+ quotedin = {{sitert i}{sit\adddotspace i}},
+ idem = {{den samme}{d.s\adddot}},
+ idemsf = {{den samme}{d.s\adddot}},
+ idemsm = {{den samme}{d.s\adddot}},
+ idemsn = {{det samme}{d.s\adddot}},
+ idempf = {{de samme}{d.s\adddot}},
+ idempm = {{de samme}{d.s\adddot}},
+ idempn = {{de samme}{d.s\adddot}},
+ idempp = {{de samme}{d.s\adddot}},
+ ibidem = {{samme sted}{sst\adddot}},
+ opcit = {{samme sted}{sst\adddot}},
+ loccit = {{samme sted}{sst\adddot}},
+ confer = {{jamf{\o}r}{jf\adddot}},
+ sequens = {{f\adddot}{f\adddot}},
+ sequentes = {{ff\adddot}{ff\adddot}},
+ passim = {{passim}{pass\adddot}},
+ see = {{se}{se}},
+ seealso = {{se ogs{\aa}}{se ogs{\aa}}},
+ backrefpage = {{se side}{se s\adddot}},
+ backrefpages = {{se sidene}{se s\adddot}},
+ january = {{januar}{jan\adddot}},
+ february = {{februar}{feb\adddot}},
+ march = {{mars}{mar\adddot}},
+ april = {{april}{apr\adddot}},
+ may = {{mai}{mai}},
+ june = {{juni}{jun\adddot}},
+ july = {{juli}{jul\adddot}},
+ august = {{august}{aug\adddot}},
+ september = {{september}{sep\adddot}},
+ october = {{oktober}{okt\adddot}},
+ november = {{november}{nov\adddot}},
+ december = {{desember}{des\adddot}},
+ langamerican = {{amerikansk-engelsk}{amerikansk-engelsk}},
+ langbrazilian = {{brasiliansk-portugisisk}{brasiliansk-portugisisk}},
+ langbulgarian = {{bulgarsk}{bulgarsk}},
+ langcatalan = {{katalansk}{katalansk}},
+ langcroatian = {{kroatisk}{kroatisk}},
+ langczech = {{tsjekkisk}{tsjekkisk}},
+ langdanish = {{dansk}{dansk}},
+ langdutch = {{nederlandsk}{nederlandsk}},
+ langenglish = {{engelsk}{engelsk}},
+ langestonian = {{estisk}{estisk}},
+ langfinnish = {{finsk}{finsk}},
+ langfrench = {{fransk}{fransk}},
+ langgalician = {{galisisk}{galisisk}},
+ langgerman = {{tysk}{tysk}},
+ langgreek = {{gresk}{gresk}},
+% langhungarian = {{}{}}, % FIXME: missing
+ langitalian = {{italiensk}{italiensk}},
+ langjapanese = {{japansk}{japansk}},
+ langlatin = {{latin}{latin}},
+% langlatvian = {{}{}},% FIXME: missing
+ langnorwegian = {{norsk}{norsk}},
+ langpolish = {{polsk}{polsk}},
+ langportuguese = {{portugisisk}{portugisisk}},
+ langrussian = {{russisk}{russisk}},
+ langslovak = {{slovakisk}{slovakisk}},
+ langslovene = {{slovensk}{slovensk}},
+ langspanish = {{spansk}{spansk}},
+ langswedish = {{svensk}{svensk}},
+ langukrainian = {{ukrainsk}{ukrainsk}},
+ fromamerican = {{fra amerikansk-engelsk}{fra amerikansk-engelsk}},
+ frombrazilian = {{fra brasiliansk-portugisisk}{fra brasiliansk-portugisisk}},
+ frombulgarian = {{fra bulgarsk}{fra bulgarsk}},
+ fromcatalan = {{fra katalansk}{fra katalansk}},
+ fromcroatian = {{fra kroatisk}{fra kroatisk}},
+ fromczech = {{fra tsjekkisk}{fra tsjekkisk}},
+ fromdanish = {{fra dansk}{fra dansk}},
+ fromdutch = {{fra nederlandsk}{fra nederlandsk}},
+ fromenglish = {{fra engelsk}{fra engelsk}},
+ fromestonian = {{fra estisk}{fra estisk}},
+ fromfinnish = {{fra finsk}{fra finsk}},
+ fromfrench = {{fra fransk}{fra fransk}},
+ fromgalician = {{fra galisisk}{fra galisisk}},
+ fromgerman = {{fra tysk}{fra tysk}},
+ fromgreek = {{fra gresk}{fra gresk}},
+% fromhungarian = {{}{}}, % FIXME: missing
+ fromitalian = {{fra italiensk}{fra italiensk}},
+ fromjapanese = {{fra japansk}{fra japansk}},
+ fromlatin = {{fra latin}{fra latin}},
+% fromlatvian = {{}{}},% FIXME: missing
+ fromnorwegian = {{fra norsk}{fra norsk}},
+ frompolish = {{fra polsk}{fra polsk}},
+ fromportuguese = {{fra portugisisk}{fra portugisisk}},
+ fromrussian = {{fra russisk}{fra russisk}},
+ fromslovak = {{fra slovakisk}{fra slovakisk}},
+ fromslovene = {{fra slovensk}{fra slovensk}},
+ fromspanish = {{fra spansk}{fra spansk}},
+ fromswedish = {{fra svensk}{fra svensk}},
+ fromukrainian = {{fra ukrainsk}{fra ukrainsk}},
+ countryde = {{Tyskland}{DE}},
+ countryeu = {{Den europeiske union}{EU}},
+ countryep = {{Den europeiske union}{EP}},
+ countryfr = {{Frankrike}{FR}},
+ countryuk = {{Storbritannia}{GB}},
+ countryus = {{USA}{US}},
+ patent = {{patent}{patent}},
+ patentde = {{tysk patent}{ty\adddotspace pat\adddot}},
+ patenteu = {{europeisk patent}{eur\adddotspace pat\adddot}},
+ patentfr = {{fransk patent}{fr\adddotspace pat\adddot}},
+ patentuk = {{britisk patent}{br\adddotspace pat\adddot}},
+ patentus = {{amerikansk patent}{am\adddotspace pat\adddot}},
+ patreq = {{patents{\o}knad}{pat.s{\o}kn\adddot}},
+ patreqde = {{tysk patents{\o}knad}%
+ {ty\adddotspace pat.s{\o}kn\adddot}},
+ patreqeu = {{europeisk patents{\o}knad}%
+ {eur\adddotspace pat.s{\o}kn\adddot}},
+ patreqfr = {{fransk patents{\o}knad}%
+ {fr\adddotspace pat.s{\o}kn\adddot}},
+ patrequk = {{britisk patents{\o}knad}%
+ {br\adddotspace pat.s{\o}kn\adddot}},
+ patrequs = {{amerikansk patents{\o}knad}%
+ {am\adddotspace pat.s{\o}kn\adddot}},
+ file = {{fil}{fil}},
+ library = {{bibliotek}{bibliotek}},
+ abstract = {{sammendrag}{sammendrag}},
+ annotation = {{merknad}{merknad}},
+ commonera = {{etter v{\aa}r tidsregning}{evt\adddot}},
+ beforecommonera = {{f{\o}r v{\aa}r tidsregning}{fvt\adddot}},
+ annodomini = {{etter Kristus}{e\adddot Kr\adddot}},
+ beforechrist = {{f{\o}r Kristus}{f\adddot Kr\adddot}},
+ circa = {{cirka}{ca\adddot}},
+ spring = {{v{\aa}r}{v{\aa}r}},
+ summer = {{sommer}{sommer}},
+ autumn = {{h{\o}st}{h{\o}st}},
+ winter = {{vinter}{vinter}},
+% springN = {{}{}},% FIXME: missing
+% summerN = {{}{}},% FIXME: missing
+% autumnN = {{}{}},% FIXME: missing
+% winterN = {{}{}},% FIXME: missing
+% springS = {{}{}},% FIXME: missing
+% summerS = {{}{}},% FIXME: missing
+% autumnS = {{}{}},% FIXME: missing
+% winterS = {{}{}},% FIXME: missing
+% Q1 = {{}{}},% FIXME: missing
+% Q2 = {{}{}},% FIXME: missing
+% Q3 = {{}{}},% FIXME: missing
+% Q4 = {{}{}},% FIXME: missing
+% QD1 = {{}{}},% FIXME: missing
+% QD2 = {{}{}},% FIXME: missing
+% QD3 = {{}{}},% FIXME: missing
+% S1 = {{}{}},% FIXME: missing
+% S2 = {{}{}},% FIXME: missing
+ am = {{a\adddot m\adddot}{a\adddot m\adddot}},
+ pm = {{p\adddot m\adddot}{p\adddot m\adddot}},
+}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/lbx/nswissgerman-ms.lbx b/macros/latex/contrib/biblatex-ms/latex/lbx/nswissgerman-ms.lbx
new file mode 100644
index 0000000000..ca6890511e
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/lbx/nswissgerman-ms.lbx
@@ -0,0 +1,30 @@
+\ProvidesFile{nswissgerman-ms.lbx}
+[\abx@lbxid]
+
+\InheritBibliographyExtras{german}
+
+% Swiss time sep is a dot
+\DeclareBibliographyExtras{%
+ \protected\def\bibtimesep{.}%
+}
+
+% One point where Swiss German spelling
+% differs from Austrian and German German
+% is the (non-)use of \ss
+\DeclareBibliographyStrings{%
+ inherit = {german},
+ citedas = {{im Folgenden zitiert als}{im Folgenden zit\adddotspace als}},
+ countryuk = {{Grossbritannien}{GB}},
+% alternative spelling, uncomment to enable:
+% section = {{Paragraf}{\S}},
+% sections = {{Paragrafen}{\S\S}},
+% sectiontotal = {{Paragraf}{\S}},
+% sectiontotals = {{Paragrafen}{\S\S}},
+}
+
+\DeclareHyphenationExceptions{%
+ Pa-tent-an-mel-dung
+ Pa-tent-an-meld
+}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/lbx/nynorsk-ms.lbx b/macros/latex/contrib/biblatex-ms/latex/lbx/nynorsk-ms.lbx
new file mode 100644
index 0000000000..823b3fcf0a
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/lbx/nynorsk-ms.lbx
@@ -0,0 +1,334 @@
+\ProvidesFile{nynorsk-ms.lbx}
+[\abx@lbxid]
+
+% Remarks by translators:
+%
+% Since "nynorsk" inherits "norsk" (bokm\aa l) only strings that are
+% different in the two languages are included. In particular, this
+% means that no language or month name strings are listed below.
+%
+
+\InheritBibliographyExtras{norsk}
+
+\DeclareBibliographyStrings{%
+ inherit = {norsk},
+ references = {{Referansar}{Referansar}},
+ shorthands = {{Forkortingar}{Forkortingar}},
+ editors = {{redakt{\o}rar}{red\adddot}},
+ compilers = {{kompilatorar}{komp\adddot}},
+ redactor = {{omarbeiding}{omarb\adddot}},
+ redactors = {{omarbeiding}{omarb\adddot}},
+ founder = {{grunnleggjar}{grunnl\adddot}},
+ founders = {{grunnleggjarar}{grunnl\adddot}},
+ continuator = {{vidaref{\o}ring}{vidaref\adddot}},
+ continuators = {{vidaref{\o}ring}{vidaref\adddot}},
+ translator = {{omsetjar}{oms\adddot}},
+ translators = {{omsetjarar}{oms\adddot}},
+ commentator = {{kommentarar}{komm\adddot}},
+ commentators = {{kommentarar}{komm\adddot}},
+ annotator = {{forklaringar}{forkl\adddot}},
+ annotators = {{forklaringar}{forkl\adddot}},
+ commentary = {{kommentarar}{komm\adddot}},
+ annotations = {{forklaringar}{forkl\adddot}},
+ introduction = {{innleiing}{innl\adddot}},
+ foreword = {{f{\o}reord}{f{\o}reord}},
+ editortr = {{redakt{\o}r og omsetjar}%
+ {red\adddotspace og oms\adddot}},
+ editorstr = {{redakt{\o}rar og omsetjarar}%
+ {red\adddotspace og oms\adddot}},
+ editorco = {{redakt{\o}r og kommentarar}%
+ {red\adddotspace og komm\adddot}},
+ editorsco = {{redakt{\o}rar og kommentarar}%
+ {red\adddotspace og komm\adddot}},
+ editoran = {{redakt{\o}r og forklaringar}%
+ {red\adddotspace og forkl\adddot}},
+ editorsan = {{redakt{\o}rar og forklaringar}%
+ {red\adddotspace og forkl\adddot}},
+ editorin = {{redakt{\o}r og innleiing}%
+ {red\adddotspace og innl\adddot}},
+ editorsin = {{redakt{\o}rar og innleiing}%
+ {red\adddotspace og innl\adddot}},
+ editorfo = {{redakt{\o}r og f{\o}reord}%
+ {red\adddotspace og f{\o}reord}},
+ editorsfo = {{redakt{\o}rar og f{\o}reord}%
+ {red\adddotspace og f{\o}reord}},
+ editorsaf = {{redakt{\o}rar og etterord}%
+ {red\adddotspace og etterord}},
+ editortrco = {{redakt{\o}r, omsetjar og kommentarar}%
+ {red.,\addabbrvspace oms\adddotspace og komm\adddot}},
+ editorstrco = {{redakt{\o}rar, omsetjarar og kommentarar}%
+ {red.,\addabbrvspace oms\adddotspace og komm\adddot}},
+ editortran = {{redakt{\o}r, omsetjar og forklaringar}%
+ {red.,\addabbrvspace oms\adddotspace og forkl\adddot}},
+ editorstran = {{redakt{\o}rar, omsetjarar og forklaringar}%
+ {red.,\addabbrvspace oms\adddotspace og forkl\adddot}},
+ editortrin = {{redakt{\o}r, omsetjar og innleiing}%
+ {red.,\addabbrvspace oms\adddotspace og innl\adddot}},
+ editorstrin = {{redakt{\o}rar, omsetjarar og innleiing}%
+ {red.,\addabbrvspace oms\adddotspace og innl\adddot}},
+ editortrfo = {{redakt{\o}r, omsetjar og f{\o}reord}%
+ {red.,\addabbrvspace oms\adddotspace og f{\o}reord}},
+ editorstrfo = {{redakt{\o}rar, omsetjarar og f{\o}reord}%
+ {red.,\addabbrvspace oms\adddotspace og f{\o}reord}},
+ editortraf = {{redakt{\o}r, omsetjar og etterord}%
+ {red.,\addabbrvspace oms\adddotspace og etterord}},
+ editorstraf = {{redakt{\o}rar, omsetjarar og etterord}%
+ {red.,\addabbrvspace oms\adddotspace og etterord}},
+ editorcoin = {{redakt{\o}r, kommentarar og innleiing}%
+ {red.,\addabbrvspace komm\adddotspace og innl\adddot}},
+ editorscoin = {{redakt{\o}rar, kommentarar og innleiing}%
+ {red.,\addabbrvspace komm\adddotspace og innl\adddot}},
+ editorcofo = {{redakt{\o}r, kommentarar og f{\o}reord}%
+ {red.,\addabbrvspace komm\adddotspace og f{\o}reord}},
+ editorscofo = {{redakt{\o}rar, kommentarar og f{\o}reord}%
+ {red.,\addabbrvspace komm\adddotspace og f{\o}reord}},
+ editorcoaf = {{redakt{\o}r, kommentarar og etterord}%
+ {red.,\addabbrvspace komm\adddotspace og etterord}},
+ editorscoaf = {{redakt{\o}rar, kommentarar og etterord}%
+ {red.,\addabbrvspace komm\adddotspace og etterord}},
+ editoranin = {{redakt{\o}r, forklaringar og innleiing}%
+ {red.,\addabbrvspace forkl\adddotspace og innl\adddot}},
+ editorsanin = {{redakt{\o}rar, forklaringar og innleiing}%
+ {red.,\addabbrvspace forkl\adddotspace og innl\adddot}},
+ editoranfo = {{redakt{\o}r, forklaringar og f{\o}reord}%
+ {red.,\addabbrvspace forkl\adddotspace og f{\o}reord}},
+ editorsanfo = {{redakt{\o}rar, forklaringar og f{\o}reord}%
+ {red.,\addabbrvspace forkl\adddotspace og f{\o}reord}},
+ editoranaf = {{redakt{\o}r, forklaringar og etterord}%
+ {red.,\addabbrvspace forkl\adddotspace og etterord}},
+ editorsanaf = {{redakt{\o}rar, forklaringar og etterord}%
+ {red.,\addabbrvspace forkl\adddotspace og etterord}},
+ editortrcoin = {{redakt{\o}r, omsetjar, kommentarar og innleiing}%
+ {red.,\addabbrvspace oms., komm\adddotspace og innl\adddot}},
+ editorstrcoin = {{redakt{\o}rar, omsetjarar, kommentarar og innleiing}%
+ {red.,\addabbrvspace oms., komm\adddotspace og innl\adddot}},
+ editortrcofo = {{redakt{\o}r, omsetjar, kommentarar og f{\o}reord}%
+ {red.,\addabbrvspace oms., komm\adddotspace og f{\o}reord}},
+ editorstrcofo = {{redakt{\o}rar, omsetjarar, kommentarar og f{\o}reord}%
+ {red.,\addabbrvspace oms., komm\adddotspace og f{\o}reord}},
+ editortrcoaf = {{redakt{\o}r, omsetjar, kommentarar og etterord}%
+ {red.,\addabbrvspace oms., komm\adddotspace og etterord}},
+ editorstrcoaf = {{redakt{\o}rar, omsetjarar, kommentarar og etterord}%
+ {red.,\addabbrvspace oms., komm\adddotspace og etterord}},
+ editortranin = {{redakt{\o}r, omsetjar, forklaringar og innleiing}%
+ {red.,\addabbrvspace oms., forkl\adddotspace og innl\adddot}},
+ editorstranin = {{redakt{\o}rar, omsetjarar, forklaringar og innleiing}%
+ {red.,\addabbrvspace oms., forkl\adddotspace og innl\adddot}},
+ editortranfo = {{redakt{\o}r, omsetjar, forklaringar og f{\o}reord}%
+ {red.,\addabbrvspace oms., forkl\adddotspace og f{\o}reord}},
+ editorstranfo = {{redakt{\o}rar, omsetjarar, forklaringar og f{\o}reord}%
+ {red.,\addabbrvspace oms., forkl\adddotspace og f{\o}reord}},
+ editortranaf = {{redakt{\o}r, omsetjar, forklaringar og etterord}%
+ {red.,\addabbrvspace oms., forkl\adddotspace og etterord}},
+ editorstranaf = {{redakt{\o}rar, omsetjarar, forklaringar og etterord}%
+ {red.,\addabbrvspace oms., forkl\adddotspace og etterord}},
+ translatorco = {{omsetjar og kommentarar}%
+ {oms\adddotspace og komm\adddot}},
+ translatorsco = {{omsetjarar og kommentarar}%
+ {oms\adddotspace og komm\adddot}},
+ translatoran = {{omsetjar og forklaringar}%
+ {oms\adddotspace og forkl\adddot}},
+ translatorsan = {{omsetjarar og forklaringar}%
+ {oms\adddotspace og forkl\adddot}},
+ translatorin = {{omsetjar og innleiing}%
+ {oms\adddotspace og innl\adddot}},
+ translatorsin = {{omsetjarar og innleiing}%
+ {oms\adddotspace og innl\adddot}},
+ translatorfo = {{omsetjar og f{\o}reord}%
+ {oms\adddotspace og f{\o}reord}},
+ translatorsfo = {{omsetjarar og f{\o}reord}%
+ {oms\adddotspace og f{\o}reord}},
+ translatoraf = {{omsetjar og etterord}%
+ {oms\adddotspace og etterord}},
+ translatorsaf = {{omsetjarar og etterord}%
+ {oms\adddotspace og etterord}},
+ translatorcoin = {{omsetjar, kommentarar og innleiing}%
+ {oms., komm\adddotspace og innl\adddot}},
+ translatorscoin = {{omsetjarar, kommentarar og innleiing}%
+ {oms., komm\adddotspace og innl\adddot}},
+ translatorcofo = {{omsetjar, kommentarar og f{\o}reord}%
+ {oms., komm\adddotspace og f{\o}reord}},
+ translatorscofo = {{omsetjarar, kommentarar og f{\o}reord}%
+ {oms., komm\adddotspace og f{\o}reord}},
+ translatorcoaf = {{omsetjar, kommentarar og etterord}%
+ {oms., komm\adddotspace og etterord}},
+ translatorscoaf = {{omsetjarar, kommentarar og etterord}%
+ {oms., komm\adddotspace og etterord}},
+ translatoranin = {{omsetjar, forklaringar og innleiing}%
+ {oms., forkl\adddotspace og innl\adddot}},
+ translatorsanin = {{omsetjarar, forklaringar og innleiing}%
+ {oms., forkl\adddotspace og innl\adddot}},
+ translatoranfo = {{omsetjar, forklaringar og f{\o}reord}%
+ {oms., forkl\adddotspace og f{\o}reord}},
+ translatorsanfo = {{omsetjarar, forklaringar og f{\o}reord}%
+ {oms., forkl\adddotspace og f{\o}reord}},
+ translatoranaf = {{omsetjar, forklaringar og etterord}%
+ {oms., forkl\adddotspace og etterord}},
+ translatorsanaf = {{omsetjarar, forklaringar og etterord}%
+ {oms., forkl\adddotspace og etterord}},
+ organizers = {{organisatorar}{org\adddot}},
+ byredactor = {{omarbeidd av}{omarb\adddotspace av}},
+ bycontinuator = {{vidaref{\o}rt av}{vidaref\adddotspace av}},
+ bytranslator = {{omsett \lbx@lfromlang\ av}%
+ {oms\adddot\ \lbx@sfromlang\ av}},
+ withcommentator = {{med kommentarar av}{med komm\adddot\ av}},
+ withannotator = {{med forklaringar av}{med forkl\adddot\ av}},
+ withintroduction = {{med innleiing av}{med innl\adddot\ av}},
+ withforeword = {{med f{\o}reord av}{med f{\o}reord av}},
+ byeditortr = {{redigert og omsett \lbx@lfromlang\ av}%
+ {red\adddotspace og oms\adddot\ \lbx@sfromlang\ av}},
+ byeditorin = {{redigert, med innleiing, av}%
+ {red.,\addabbrvspace med innl., av}},
+ byeditorfo = {{redigert, med f{\o}reord, av}%
+ {red.,\addabbrvspace med f{\o}reord, av}},
+ byeditortrco = {{redigert, omsett \lbx@lfromlang\ og kommentert av}%
+ {red.,\addabbrvspace oms\adddot\ \lbx@sfromlang\ og komm\adddot\ av}},
+ byeditortran = {{redigert, omsett \lbx@lfromlang\ og forklart av}%
+ {red.,\addabbrvspace oms\adddot\ \lbx@sfromlang\ og forkl\adddot\ av}},
+ byeditortrin = {{redigert og omsett \lbx@lfromlang, med innleiing, av}%
+ {red\adddotspace og oms\adddot\ \lbx@sfromlang, med innl., av}},
+ byeditortrfo = {{redigert og omsett \lbx@lfromlang, med f{\o}reord, av}%
+ {red\adddotspace og oms\adddot\ \lbx@sfromlang, med f{\o}reord, av}},
+ byeditortraf = {{redigert og omsett \lbx@lfromlang, med etterord, av}%
+ {red\adddotspace og oms\adddot\ \lbx@sfromlang, med etterord, av}},
+ byeditorcoin = {{redigert og kommentert, med innleiing, av}%
+ {red\adddotspace og komm., med innl., av}},
+ byeditorcofo = {{redigert og kommentert, med f{\o}reord, av}%
+ {red\adddotspace og komm., med f{\o}reord, av}},
+ byeditoranin = {{redigert og forklart, med innleiing, av}%
+ {red\adddotspace og forkl., med innl., av}},
+ byeditoranfo = {{redigert og forklart, med f{\o}reord, av}%
+ {red\adddotspace og forkl., med f{\o}reord, av}},
+ byeditortrcoin = {{redigert, omsett \lbx@lfromlang\ og kommentert, med innleiing, av}%
+ {red.,\addabbrvspace oms\adddot\ \lbx@sfromlang\ og komm., med innl., av}},
+ byeditortrcofo = {{redigert, omsett \lbx@lfromlang\ og kommentert, med f{\o}reord, av}%
+ {red.,\addabbrvspace oms\adddot\ \lbx@sfromlang\ og komm., med f{\o}reord, av}},
+ byeditortrcoaf = {{redigert, omsett \lbx@lfromlang\ og kommentert, med etterord, av}%
+ {red.,\addabbrvspace oms\adddot\ \lbx@sfromlang\ og komm., med etterord, av}},
+ byeditortranin = {{redigert, omsett \lbx@lfromlang\ og forklart, med innleiing, av}%
+ {red.,\addabbrvspace oms\adddot\ \lbx@sfromlang\ og forkl., med innl., av}},
+ byeditortranfo = {{redigert, omsett \lbx@lfromlang\ og forklart, med f{\o}reord, av}%
+ {red.,\addabbrvspace oms\adddot\ \lbx@sfromlang\ og forkl., med f{\o}reord, av}},
+ byeditortranaf = {{redigert, omsett \lbx@lfromlang\ og forklart, med etterord, av}%
+ {red.,\addabbrvspace oms\adddot\ \lbx@sfromlang\ og forkl., med etterord, av}},
+ bytranslatorco = {{omsett \lbx@lfromlang\ og kommentert av}%
+ {oms\adddot\ \lbx@sfromlang\ og komm\adddot\ av}},
+ bytranslatoran = {{omsett \lbx@lfromlang\ og forklart av}%
+ {oms\adddot\ \lbx@sfromlang\ og forkl\adddot\ av}},
+ bytranslatorin = {{omsett \lbx@lfromlang, med innleiing, av}%
+ {oms\adddot\ \lbx@sfromlang, med innl., av}},
+ bytranslatorfo = {{omsett \lbx@lfromlang, med f{\o}reord, av}%
+ {oms\adddot\ \lbx@sfromlang, med f{\o}reord, av}},
+ bytranslatoraf = {{omsett \lbx@lfromlang, med etterord, av}%
+ {oms\adddot\ \lbx@sfromlang, med etterord, av}},
+ bytranslatorcoin = {{omsett \lbx@lfromlang\ og kommentert, med innleiing, av}%
+ {oms\adddot\ \lbx@sfromlang\ og komm., med innl., av}},
+ bytranslatorcofo = {{omsett \lbx@lfromlang\ og kommentert, med f{\o}reord, av}%
+ {oms\adddot\ \lbx@sfromlang\ og komm., med f{\o}reord, av}},
+ bytranslatorcoaf = {{omsett \lbx@lfromlang\ og kommentert, med etterord, av}%
+ {oms\adddot\ \lbx@sfromlang\ og komm., med etterord, av}},
+ bytranslatoranin = {{omsett \lbx@lfromlang\ og forklart, med innleiing, av}%
+ {oms\adddot\ \lbx@sfromlang\ og forkl., med innl., av}},
+ bytranslatoranfo = {{omsett \lbx@lfromlang\ og forklart, med f{\o}reord, av}%
+ {oms\adddot\ \lbx@sfromlang\ og forkl., med f{\o}reord, av}},
+ bytranslatoranaf = {{omsett \lbx@lfromlang\ og forklart, med etterord, av}%
+ {oms\adddot\ \lbx@sfromlang\ og forkl., med etterord, av}},
+ andothers = {{med fleire}{mfl\adddot}},
+ andmore = {{med meir}{m.m\adddot}},
+ oldseries = {{gamal serie}{gl\adddotspace ser\adddot}},
+ edition = {{utg{\aa}ve}{utg\adddot}},
+ reprintfrom = {{opptrykk fr{\aa}}{opptr\adddotspace fr{\aa}}},
+ translationof = {{omsetjing av}{oms\adddotspace av}},
+ translationas = {{omsett som}{oms\adddotspace som}},
+ translationfrom = {{omsett fr{\aa}}{oms\adddotspace fr{\aa}}},
+ origpubas = {{opphavleg utgitt som}{opph\adddot\ utg\adddot\ som}},
+ origpubin = {{opphavleg utgitt i}{opph\adddot\ utg\adddot\ i}},
+% bathesis = {{}{}},% FIXME: missing
+ mathesis = {{masteroppg{\aa}ve}{masteroppg\adddot}},
+ candthesis = {{hovudoppg{\aa}ve}{hovudoppg\adddot}},
+ resreport = {{forskingsrapport}{forsk.rapp\adddot}},
+ url = {{adresse}{adresse}},
+ urlfrom = {{tilgjengeleg fr{\aa}}{tilgj\adddotspace fr{\aa}}},
+ urlseen = {{sjekka}{sjekka}},
+ inpreparation = {{under utarbeiding}{under utarb\adddot}},
+ forthcoming = {{under utgiving}{under utgiv\adddot}},
+ citedas = {{heretter sitert som}{heretter sit\adddotspace som}},
+ seenote = {{sj{\aa} note}{sj{\aa} n\adddot}},
+ idem = {{den same}{d.s\adddot}},
+ idemsf = {{den same}{d.s\adddot}},
+ idemsm = {{den same}{d.s\adddot}},
+ idemsn = {{det same}{d.s\adddot}},
+ idempf = {{dei same}{d.s\adddot}},
+ idempm = {{dei same}{d.s\adddot}},
+ idempn = {{dei same}{d.s\adddot}},
+ idempp = {{dei same}{d.s\adddot}},
+ ibidem = {{same staden}{sst\adddot}},
+ opcit = {{same staden}{sst\adddot}},
+ loccit = {{same staden}{sst\adddot}},
+ see = {{sj{\aa}}{sj{\aa}}},
+ seealso = {{sj{\aa} \`{o}g}{sj{\aa} \`{o}g}},
+ backrefpage = {{sj{\aa} side}{sj{\aa} s\adddot}},
+ backrefpages = {{sj{\aa} sidene}{sj{\aa} s\adddot}},
+ fromamerican = {{fr{\aa} amerikansk-engelsk}{fr{\aa} amerikansk-engelsk}},
+ frombrazilian = {{fr{\aa} brasiliansk-portugisisk}{fr{\aa} brasiliansk-portugisisk}},
+ frombulgarian = {{fr{\aa} bulgarsk}{fr{\aa} bulgarsk}},
+ fromcatalan = {{fr{\aa} katalansk}{fr{\aa} katalansk}},
+ fromcroatian = {{fr{\aa} kroatisk}{fr{\aa} kroatisk}},
+ fromczech = {{fr{\aa} tsjekkisk}{fr{\aa} tsjekkisk}},
+ fromdanish = {{fr{\aa} dansk}{fr{\aa} dansk}},
+ fromdutch = {{fr{\aa} nederlandsk}{fr{\aa} nederlandsk}},
+ fromenglish = {{fr{\aa} engelsk}{fr{\aa} engelsk}},
+ fromestonian = {{fr{\aa} estisk}{fr{\aa} estisk}},
+ fromfinnish = {{fr{\aa} finsk}{fr{\aa} finsk}},
+ fromfrench = {{fr{\aa} fransk}{fr{\aa} fransk}},
+ fromgalician = {{fr{\aa} galisisk}{fr{\aa} galisisk}},
+ fromgerman = {{fr{\aa} tysk}{fr{\aa} tysk}},
+ fromgreek = {{fr{\aa} gresk}{fr{\aa} gresk}},
+% fromhungarian = {{}{}}, % FIXME: missing
+ fromitalian = {{fr{\aa} italiensk}{fr{\aa} italiensk}},
+ fromjapanese = {{fr{\aa} japansk}{fr{\aa} japansk}},
+ fromlatin = {{fr{\aa} latin}{fr{\aa} latin}},
+% fromlatvian = {{}{}},% FIXME: missing
+ fromnorwegian = {{fr{\aa} norsk}{fr{\aa} norsk}},
+ frompolish = {{fr{\aa} polsk}{fr{\aa} polsk}},
+ fromportuguese = {{fr{\aa} portugisisk}{fr{\aa} portugisisk}},
+ fromrussian = {{fr{\aa} russisk}{fr{\aa} russisk}},
+ fromslovene = {{fr{\aa} slovakisk}{fr{\aa} slovakisk}},
+ fromslovak = {{fr{\aa} slovensk}{fr{\aa} slovensk}},
+ fromspanish = {{fr{\aa} spansk}{fr{\aa} spansk}},
+ fromswedish = {{fr{\aa} svensk}{fr{\aa} svensk}},
+ fromukrainian = {{fr{\aa} ukrainsk}{fr{\aa} ukrainsk}},
+ countryeu = {{Den europeiske unionen}{EU}},
+ countryep = {{Den europeiske unionen}{EP}},
+ abstract = {{samandrag}{samandrag}},
+ commonera = {{vesterlandsk tidsrekning}{v\adddot t\adddot}},
+ beforecommonera = {{f{\o}r vesterlandsk tidsrekning}{f\adddot v\adddot t\adddot}},
+ annodomini = {{e\adddot Kr\adddot}{e\adddot Kr\adddot}},
+ beforechrist = {{f\adddot Kr\adddot}{f\adddot Kr\adddot}},
+ circa = {{cirka}{ca\adddot}},
+ spring = {{v{\aa}r}{v{\aa}r}},
+ summer = {{sommar}{sommar}},
+ autumn = {{haust}{haust}},
+ winter = {{vinter}{vinter}},
+% springN = {{}{}},% FIXME: missing
+% summerN = {{}{}},% FIXME: missing
+% autumnN = {{}{}},% FIXME: missing
+% winterN = {{}{}},% FIXME: missing
+% springS = {{}{}},% FIXME: missing
+% summerS = {{}{}},% FIXME: missing
+% autumnS = {{}{}},% FIXME: missing
+% winterS = {{}{}},% FIXME: missing
+% Q1 = {{}{}},% FIXME: missing
+% Q2 = {{}{}},% FIXME: missing
+% Q3 = {{}{}},% FIXME: missing
+% Q4 = {{}{}},% FIXME: missing
+% QD1 = {{}{}},% FIXME: missing
+% QD2 = {{}{}},% FIXME: missing
+% QD3 = {{}{}},% FIXME: missing
+% S1 = {{}{}},% FIXME: missing
+% S2 = {{}{}},% FIXME: missing
+ am = {{a\adddot m\adddot}{a\adddot m\adddot}},
+ pm = {{p\adddot m\adddot}{p\adddot m\adddot}},
+}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/lbx/polish-ms.lbx b/macros/latex/contrib/biblatex-ms/latex/lbx/polish-ms.lbx
new file mode 100644
index 0000000000..3dd6784015
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/lbx/polish-ms.lbx
@@ -0,0 +1,593 @@
+\ProvidesFile{polish-ms.lbx}
+[\abx@lbxid]
+
+\DeclareRedundantLanguages{polish}{polish}
+
+\DeclareBibliographyExtras{%
+ \protected\def\bibrangedash{\textendash\penalty\hyphenpenalty}%
+ \let\finalandcomma=\empty
+ \let\finalandsemicolon=\empty
+ \protected\def\mkbibordinal#1{\stripzeros{#1}}%
+ \protected\def\mkbibmascord{\mkbibordinal}%
+ \protected\def\mkbibfemord{\mkbibordinal}%
+ \protected\def\mkbibneutord{\mkbibordinal}%
+ \protected\def\mkbibdatelong#1#2#3{%
+ \iffieldundef{#3}
+ {}
+ {\mkbibordinal{\thefield{#3}}%
+ \iffieldundef{#2}{}{\nobreakspace}}%
+ \iffieldundef{#2}
+ {}
+ {\iffieldundef{#3}
+ {\mkbibmonth{\thefield{#2}}}
+ {\lbx@pl@mkbibmonth{\thefield{#2}}}%
+ \iffieldundef{#1}{}{\space}}%
+ \iffieldbibstring{#1}
+ {\bibstring{\thefield{#1}}}
+ {\dateeraprintpre{#1}\stripzeros{\thefield{#1}}}}%
+ \protected\def\mkbibdateshort#1#2#3{%
+ \iffieldundef{#3}
+ {}
+ {\mkdayzeros{\thefield{#3}}\adddot
+ \iffieldundef{#2}{}{\thinspace}}%
+ \iffieldundef{#2}
+ {}
+ {\mkmonthzeros{\thefield{#2}}%
+ \iffieldundef{#1}
+ {}
+ {\iffieldundef{#3}{/}{\adddot\thinspace}}}%
+ \iffieldbibstring{#1}
+ {\bibstring{\thefield{#1}}}
+ {\dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}}%
+ \savecommand\mkbibordedition
+ \savecommand\mkbibordseries
+ \def\mkbibordedition{\mkbibneutord}%
+ \def\mkbibordseries{\mkbibfemord}%
+ \expandafter\protected\expandafter\def\csname mkbibtime24h\endcsname#1#2#3#4{%
+ \iffieldundef{#1}
+ {}
+ {\mktimezeros{\thefield{#1}}%
+ \iffieldundef{#2}{}{\bibtimesep}}%
+ \iffieldundef{#2}
+ {}
+ {\mktimezeros{\thefield{#2}}%
+ \iffieldundef{#3}{}{\bibtimesep}}%
+ \iffieldundef{#3}
+ {}
+ {\mktimezeros{\thefield{#3}}}%
+ \iffieldundef{#4}{}
+ {\bibtimezonesep
+ \mkbibtimezone{\thefield{#4}}}}%
+ \expandafter\protected\expandafter\def\csname mkbibtime12h\endcsname#1#2#3#4{%
+ \stripzeros{\mktimehh{\thefield{#1}}}\bibtimesep
+ \forcezerosmdt{\thefield{#2}}%
+ \iffieldundef{#3}{}
+ {\bibtimesep
+ \forcezerosmdt{\thefield{#3}}}%
+ \space
+ \ifnumless{\thefield{#1}}{12}
+ {\bibstring{am}}
+ {\bibstring{pm}}%
+ \iffieldundef{#4}{}
+ {\space\bibtimezonesep
+ \parentext{\mkbibtimezone{\thefield{#4}}}}}%
+ \protected\def\mkbibyeardivisiondateshort#1#2{%
+ \mkbibyeardivision{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}%
+ \dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}%
+ \protected\def\mkbibyeardivisiondatelong#1#2{%
+ \mkbibyeardivision{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}%
+ \dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}%
+}
+
+\UndeclareBibliographyExtras{%
+ \restorecommand\mkbibordedition
+ \restorecommand\mkbibordseries
+}
+
+\NewBibliographyString{% Month name variants used after day
+ datejanuary,
+ datefebruary,
+ datemarch,
+ dateapril,
+ datemay,
+ datejune,
+ datejuly,
+ dateaugust,
+ dateseptember,
+ dateoctober,
+ datenovember,
+ datedecember%
+}
+
+\DeclareBibliographyStrings{%
+ bibliography = {{Bibliografia}{Bibliografia}},
+ references = {{Bibliografia}{Bibliografia}},
+ shorthands = {{lista skr\'{o}t\'{o}w}{skr\'{o}ty}},
+ editor = {{redaktor}{red\adddot}},
+ editors = {{redaktorzy}{red\adddot}},
+ compiler = {{redaktor}{red\adddot}},
+ compilers = {{redaktorzy}{red\adddot}},
+ redactor = {{redaktor}{red\adddot}},
+ redactors = {{redaktorzy}{red\adddot}},
+ reviser = {{korektor}{kor\adddot}},
+ revisers = {{korektorzy}{kor\adddot}},
+ founder = {{za\l o\.{z}yciel}{za\l \adddot}},
+ founders = {{za\l o\.{z}yciele}{za\l \adddot}},
+ continuator = {{nast\c{e}pca}{nast\adddot}},
+ continuators = {{nast\c{e}pcy}{nast\adddot}},
+ collaborator = {{uczestnik}{ucz\adddot}},
+ collaborators = {{uczestnicy}{ucz\adddot}},
+ translator = {{t\l umacz}{t\l um\adddot}},
+ translators = {{t\l umacze}{t\l um\adddot}},
+ commentator = {{komentator}{kom\adddot}},
+ commentators = {{komentatorzy}{kom\adddot}},
+ annotator = {{uwaga}{uw\adddot}},
+ annotators = {{uwagi}{uw\adddot}},
+ commentary = {{komentarz}{kom\adddot}},
+ annotations = {{komentarze}{kom\adddot}},
+ introduction = {{wst\c{e}p}{wst\adddot}},
+ foreword = {{przedmowa}{przedm\adddot}},
+ afterword = {{pos\l owie}{pos\l \adddot}},
+ editortr = {{redaktor i t\l umacz}{red\adddotspace i per\adddot}},
+ editorstr = {{redaktorzy i t\l umacze}{red\adddotspace i per\adddot}},
+ editorco = {{redaktor i komentator}{red\adddotspace i kom\adddot}},
+ editorsco = {{redaktorzy i komentatorzy}%
+ {red\adddotspace i kom\adddot}},% FIXME: check
+ editoran = {{redaktor i autor uwag}%
+ {red\adddotspace i aut\adddotspace uw\adddot}},
+ editorsan = {{redaktorzy i autorzy uwag}%
+ {red\adddotspace i aut\adddotspace uw\adddot}},
+ editorin = {{redaktor i autor wst\c{e}pu}%
+ {red\adddotspace i aut\adddotspace wst\adddot}},
+ editorsin = {{redaktorzy i autorzy wst\c{e}pu}%
+ {red\adddotspace i aut\adddotspace wst\adddot}},
+ editorfo = {{redaktor i autor przedmowy}%
+ {red\adddotspace i aut\adddotspace przedm\adddot}},
+ editorsfo = {{redaktorzy i autorzy przedmowy}%
+ {red\adddotspace i aut\adddotspace przedm\adddot}},
+ editoraf = {{redaktor i autor pos\l owia}%
+ {red\adddotspace i aut\adddotspace pos\l \adddot}},
+ editorsaf = {{redaktorzy i autorzy pos\l owia}%
+ {red\adddotspace i aut\adddotspace pos\l \adddot}},
+ editortrco = {{redaktor, t\l umacz i komentator}%
+ {red., t\l um\adddotspace i kom\adddot}},
+ editorstrco = {{redaktorzy, t\l umacze i komentatory}%
+ {red., t\l um\adddotspace i kom\adddot}},
+ editortran = {{redaktor, t\l umacz i autor uwag}%
+ {red., t\l um\adddotspace i aut\adddotspace uw\adddot}},
+ editorstran = {{redaktorzy, t\l umacze i autorzy uwag}%
+ {red., t\l um\adddotspace i aut\adddotspace uw\adddot}},
+ editortrin = {{redaktor, t\l umacz i autor wst\c{e}pu}%
+ {red., t\l um\adddotspace i aut\adddotspace wst\adddot}},
+ editorstrin = {{redaktorzy, t\l umacze i autorzy wst\c{e}pu}%
+ {red., t\l um\adddotspace i aut\adddotspace wst\adddot}},
+ editortrfo = {{redaktor, t\l umacz i autor przedmowy}%
+ {red., t\l um\adddotspace i aut\adddotspace przedm\adddot}},
+ editorstrfo = {{redaktorzy, t\l umacze i autorzy przedmowy}%
+ {red., t\l um\adddotspace i aut\adddotspace przedm\adddot}},
+ editortraf = {{redaktor, t\l umacz i autor pos\l owia}%
+ {red., t\l um\adddotspace i aut\adddotspace pos\l \adddot}},
+ editorstraf = {{redaktorzy, t\l umacze i autorzy pos\l owia}%
+ {red., t\l um\adddotspace i aut\adddotspace pos\l \adddot}},
+ editorcoin = {{redaktor, komentator i autor wst\c{e}pu}%
+ {red., kom\adddotspace i aut\adddotspace wst\adddot}},
+ editorscoin = {{redaktorzy, komentatorzy i autorzy wst\c{e}pu}%
+ {red., kom\adddotspace i aut\adddotspace wst\adddot}},
+ editorcofo = {{redaktor, komentator i autor przedmowy}%
+ {red., kom\adddotspace i aut\adddotspace przedm\adddot}},
+ editorscofo = {{redaktorzy, komentatorzy i autorzy przedmowy}%
+ {red., kom\adddotspace i aut\adddotspace przedm\adddot}},
+ editorcoaf = {{redaktor, komentator i autor pos\l owia}%
+ {red., kom\adddotspace i aut\adddotspace pos\l \adddot}},
+ editorscoaf = {{redaktorzy, komentatorzy i autorzy pos\l owia}%
+ {red., kom\adddotspace i aut\adddotspace pos\l \adddot}},
+ editoranin = {{redaktor, autor uwag i autor wst\c{e}pu}%
+ {red., aut\adddotspace uw\adddotspace i aut\adddotspace wst\adddot}},
+ editorsanin = {{redaktorzy, autorzy uwag i autorzy wst\c{e}pu}%
+ {red., aut\adddotspace uw\adddotspace i aut\adddotspace wst\adddot}},
+ editoranfo = {{redaktor, autor uwag i autor przedmowy}%
+ {red., aut\adddotspace uw\adddotspace i aut\adddotspace przedm\adddot}},
+ editorsanfo = {{redaktorzy, autorzy uwag i autorzy przedmowy}%
+ {red., aut\adddotspace uw\adddotspace i aut\adddotspace przedm\adddot}},
+ editoranaf = {{redaktor, autor uwag i autor pos\l owia}%
+ {red., aut\adddotspace uw\adddotspace i aut\adddotspace pos\l \adddot}},
+ editorsanaf = {{redaktorzy, autorzy uwag i autorzy pos\l owia}%
+ {red., aut\adddotspace uw\adddotspace i aut\adddotspace pos\l \adddot}},
+ editortrcoin = {{redaktor, t\l umacz, komentator i autor wst\c{e}pu}%
+ {red., t\l um., kom\adddotspace i aut\adddotspace wst\adddot}},
+ editorstrcoin = {{redaktorzy, t\l umacze, komentatorzy i autorzy wst\c{e}pu}%
+ {red., t\l um., kom\adddotspace i aut\adddotspace wst\adddot}},
+ editortrcofo = {{redaktor, t\l umacz, komentator i autor przedmowy}%
+ {red., t\l um., kom\adddotspace i aut\adddotspace przedm\adddot}},
+ editorstrcofo = {{redaktorzy, t\l umacze, komentatorzy i autorzy przedmowy}%
+ {red., t\l um., kom\adddotspace i aut\adddotspace przedm\adddot}},
+ editortrcoaf = {{redaktor, t\l umacz, komentator i autor pos\l owia}%
+ {red., t\l um., kom\adddotspace i aut\adddotspace pos\l \adddot}},
+ editorstrcoaf = {{redaktorzy, t\l umacze, komentatorzy i autorzy pos\l owia}%
+ {red., t\l um., kom\adddotspace i aut\adddotspace pos\l \adddot}},
+ editortranin = {{redaktor, t\l umacz, autor uwag i autor wst\c{e}pu}%
+ {red., t\l um., aut\adddotspace uw\adddotspace i aut\adddotspace wst\adddot}},
+ editorstranin = {{redaktorzy, t\l umacze, autorzy uwag i autorzy wst\c{e}pu}%
+ {red., t\l um., aut\adddotspace uw\adddotspace i aut\adddotspace wst\adddot}},
+ editortranfo = {{redaktor, t\l umacz, autor uwag i autor przedmowy}%
+ {red., t\l um., aut\adddotspace uw\adddotspace i aut\adddotspace przedm\adddot}},
+ editorstranfo = {{redaktorzy, t\l umacze, autorzy uwag i autorzy przedmowy}%
+ {red., t\l um., aut\adddotspace uw\adddotspace i aut\adddotspace przedm\adddot}},
+ editortranaf = {{redaktor, t\l umacz, autor uwag i autor pos\l owia}%
+ {red., t\l um., aut\adddotspace uw\adddotspace i aut\adddotspace pos\l \adddot}},
+ editorstranaf = {{redaktorzy, t\l umacze, autorzy uwag i autorzy pos\l owia}%
+ {red., t\l um., aut\adddotspace uw\adddotspace i aut\adddotspace pos\l \adddot}},
+ translatorco = {{t\l umacz i komentator}{t\l um\adddotspace i kom\adddot}},
+ translatorsco = {{t\l umacze i komentatorzy}{t\l um\adddotspace i kom\adddot}},
+ translatoran = {{t\l umacz i autor uwag}%
+ {t\l um\adddotspace i aut\adddotspace uw\adddot}},
+ translatorsan = {{t\l umacze i autorzy uwag}%
+ {t\l um\adddotspace i aut\adddotspace uw\adddot}},
+ translatorin = {{t\l umacz i autor wst\c{e}pu}%
+ {t\l um\adddotspace i aut\adddotspace wst\adddot}},
+ translatorsin = {{t\l umacze i autorzy wst\c{e}pu}%
+ {t\l um\adddotspace i aut\adddotspace wst\adddot}},
+ translatorfo = {{t\l umacz i autor przedmowy}%
+ {t\l um\adddotspace i aut\adddotspace przedm\adddot}},
+ translatorsfo = {{t\l umacze i autorzy przedmowy}%
+ {t\l um\adddotspace i aut\adddotspace przedm\adddot}},
+ translatoraf = {{t\l umacz i autor pos\l owia}%
+ {t\l um\adddotspace i aut\adddotspace pos\l \adddot}},
+ translatorsaf = {{t\l umacze i autorzy pos\l owia}%
+ {t\l um\adddotspace i aut\adddotspace pos\l \adddot}},
+ translatorcoin = {{t\l umacz, autor uwag i autor wst\c{e}pu}%
+ {t\l um., aut\adddotspace uw\adddotspace i aut\adddotspace wst\adddot}},
+ translatorscoin = {{t\l umacze, autorzy uwag i autorzy wst\c{e}pu}%
+ {t\l um., aut\adddotspace uw\adddotspace i aut\adddotspace wst\adddot}},
+ translatorcofo = {{t\l umacz, autor uwag i autor przedmowy}%
+ {t\l um., aut\adddotspace uw\adddotspace i aut\adddotspace przedm\adddot}},
+ translatorscofo = {{t\l umacze, autorzy uwag i autorzy przedmowy}%
+ {t\l um., aut\adddotspace uw\adddotspace i aut\adddotspace przedm\adddot}},
+ translatorcoaf = {{t\l umacz, autor uwag i autor pos\l owia}%
+ {t\l um., aut\adddotspace uw\adddotspace i aut\adddotspace pos\l \adddot}},
+ translatorscoaf = {{t\l umacze, autorzy uwag i autorzy posowia}%
+ {t\l um., aut\adddotspace uw\adddotspace i aut\adddotspace pos\l \adddot}},
+ translatoranin = {{t\l umacz, autor uwag i autor wst\c{e}pu}%
+ {t\l um., aut\adddotspace uw\adddotspace i aut\adddotspace wst\adddot}},
+ translatorsanin = {{t\l umacze, autorzy uwag i autorzy wst\c{e}pu}%
+ {t\l um., aut\adddotspace uw\adddotspace i aut\adddotspace wst\adddot}},
+ translatoranfo = {{t\l umacz, autor komentarzy i autor wst\c{e}pu}%
+ {t\l um., aut\adddotspace kom\adddotspace i aut\adddotspace wst\adddot}},
+ translatorsanfo = {{t\l umacze, autorzy komentarzy i autorzy przedmowy}%
+ {t\l um., aut\adddotspace kom\adddotspace i aut\adddotspace przedm\adddot}},
+ translatoranaf = {{t\l umacz, autor komentarzy i autor pos\l owia}%
+ {t\l um., aut\adddotspace kom\adddotspace i aut\adddotspace pos\l \adddot}},
+ translatorsanaf = {{t\l umacze, autorzy komentarzy i autorzy pos\l owia}%
+ {t\l um., aut\adddotspace kom\adddotspace i aut\adddotspace pos\l \adddot}},
+ organizer = {{organizator}{org\adddot}},
+ organizers = {{organizatorzy}{org\adddot}},
+ byorganizer = {{organizowane}{org\adddot}},
+ byauthor = {{autorstwo}{aut\adddot}},
+ byeditor = {{redagowa\l}{red\adddot}},
+ bycompiler = {{u\l o\.{z}y\l }{u\l \adddot}},
+ byredactor = {{zredagowano}{zred\adddot}},
+ byreviser = {{poprawione}{popr\adddot}},
+ byreviewer = {{recenzja}{rec\adddot}},
+ byfounder = {{za\l o\.{z}one}{za\l \adddot}},
+ bycontinuator = {{przej\c{e}te}{przej\adddot}},
+ bycollaborator = {{przy wsp\'{o}\l pracy}{przy wsp\adddot}},
+ bytranslator = {{t\l umaczenie \lbx@lfromlang}{t\l um\adddotspace \lbx@sfromlang}},
+ bycommentator = {{skomentowane przez}{skom\adddot}},
+ byannotator = {{uwagi od}{uw\adddot}},
+ withcommentator = {{komentarze}{kom\adddot}},
+ withannotator = {{uwagi}{uw\adddot}},
+ withintroduction = {{wst\c{e}p}{wst\adddot}},
+ withforeword = {{przedmowa}{przedm\adddot}},
+ withafterword = {{pos\l owie}{pos\l \adddot}},
+ byeditortr = {{t\l umaczenie \lbx@lfromlang, zredagowany przez}%
+ {t\l um\adddotspace \lbx@sfromlang, zred\adddotspace przez}},
+ byeditorco = {{zredagowany i skomentowany przez}%
+ {zred\adddotspace i skom\adddotspace przez}},
+ byeditoran = {{zredagowany i z uwagami}{zredag\adddotspace i z uw\adddot}},
+ byeditorin = {{zredagowany, z wst\c{e}pem}{zred., z wst\adddot}},
+ byeditorfo = {{zredagowany, z przedmow\c{a}}{zred., z przedm\adddot}},
+ byeditoraf = {{zredagowany, z pos\l owiem}{zred., z pos\l \adddot}},
+ byeditortrco = {{zredagowany, t\l umaczenie \lbx@lfromlang\ i komentarze}%
+ {zred., t\l um\adddotspace \lbx@sfromlang\ i kom\adddot}},
+ byeditortran = {{zredagowany, t\l umaczenie \lbx@lfromlang\ i uwagi}%
+ {zred., t\l um\adddotspace \lbx@sfromlang\ i uw\adddot}},
+ byeditortrin = {{zredagowany, t\l umaczenie \lbx@lfromlang, wst\c{e}p}%
+ {zred., t\l um\adddotspace \lbx@sfromlang, wst\adddot}},
+ byeditortrfo = {{zredagowany, t\l umaczenie \lbx@lfromlang, przedmowa}%
+ {zred., t\l um\adddotspace \lbx@sfromlang, przedm\adddot}},
+ byeditortraf = {{zredagowany, t\l umaczenie \lbx@lfromlang, pos\l owie}%
+ {zred\adddotspace t\l um\adddotspace \lbx@sfromlang, pos\l \adddot}},
+ byeditorcoin = {{zredagowany, komentarze i wst\c{e}p}{zred., kom\adddotspace i wst\adddot}},
+ byeditorcofo = {{zredagowany, komentarze i przedmowa}{zred., kom\adddotspace i przedm\adddot}},
+ byeditorcoaf = {{zredagowany, komentarze i pos\l owie}{zred., kom\adddotspace i pos\l \adddot}},
+ byeditoranin = {{zredagowany, uwagi i wst\c{e}p}{zred., uw\adddotspace i wst\adddot}},
+ byeditoranfo = {{zredagowany, uwagi i przedmowa}{zred., uw\adddotspace i przedm\adddot}},
+ byeditoranaf = {{zredagowany, uwagi i pos\l owie}{zred., uw\adddotspace i pos\l \adddot}},
+ byeditortrcoin = {{zredagowany, t\l umaczenie \lbx@lfromlang, komentarze i wst\c{e}p}%
+ {zred., t\l um\adddotspace \lbx@sfromlang, kom\adddotspace i wst\c{e}p\adddot}},
+ byeditortrcofo = {{zredagowany, t\l umaczenie \lbx@lfromlang, komentarze i przedmowa}%
+ {zred., t\l um\adddotspace \lbx@sfromlang, kom\adddotspace i przedm\adddot}},
+ byeditortrcoaf = {{zredagowany, t\l umaczenie \lbx@lfromlang, komentarze i pos\l owie}%
+ {zred., t\l um\adddotspace \lbx@sfromlang, kom\adddotspace i pos\l \adddot}},
+ byeditortranin = {{zredagowany, t\l umaczenie \lbx@lfromlang, uwagi i wst\c{e}p}%
+ {zred., t\l um\adddotspace \lbx@sfromlang, uw\adddotspace i wst\adddot}},
+ byeditortranfo = {{zredagowany, t\l umaczenie \lbx@lfromlang, uwagi i przedmowa}%
+ {zred., t\l um\adddotspace \lbx@sfromlang, uw\adddotspace i przedm\adddot}},
+ byeditortranaf = {{zredagowany, t\l umaczenie \lbx@lfromlang, uwagi i pos\l owie}%
+ {zred., t\l um\adddotspace \lbx@sfromlang, uw\adddotspace i pos\l \adddot}},
+ bytranslatorco = {{t\l umaczenie \lbx@lfromlang\ i komentarze}%
+ {t\l um\adddotspace \lbx@sfromlang\ i kom\adddot}},
+ bytranslatoran = {{t\l umaczenie \lbx@lfromlang\ i uwagi}%
+ {t\l um\adddotspace \lbx@sfromlang\ i uw\adddot}},
+ bytranslatorin = {{t\l umaczenie \lbx@lfromlang\ i wst\c{e}p}%
+ {t\l um\adddotspace \lbx@sfromlang\ i wst\adddot}},
+ bytranslatorfo = {{t\l umaczenie \lbx@lfromlang\ i przedmowa}%
+ {t\l um\adddotspace \lbx@sfromlang\ i przedm\adddot}},
+ bytranslatoraf = {{t\l umaczenie \lbx@lfromlang\ i pos\l owie}%
+ {t\l um\adddotspace \lbx@sfromlang\ i pos\l \adddot}},
+ bytranslatorcoin = {{t\l umaczenie \lbx@lfromlang, komentarze i wst\c{e}p}%
+ {t\l um\adddotspace \lbx@sfromlang, kom\adddotspace i wst\adddot}},
+ bytranslatorcofo = {{t\l umaczenie \lbx@lfromlang, komentarze i przedmowa}%
+ {t\l um\adddotspace \lbx@sfromlang, kom\adddotspace i przedm\adddot}},
+ bytranslatorcoaf = {{t\l umaczenie \lbx@lfromlang, komentarze i pos\l owie}%
+ {t\l um\adddotspace \lbx@sfromlang, kom\adddotspace i pos\l \adddot}},
+ bytranslatoranin = {{t\l umaczenie \lbx@lfromlang, uwagi i wst\c{e}p}%
+ {t\l um\adddotspace \lbx@sfromlang, uw\adddotspace i wst\adddot}},
+ bytranslatoranfo = {{t\l umaczenie \lbx@lfromlang, uwagi i przedmowa}%
+ {t\l um\adddotspace \lbx@sfromlang, uw\adddotspace i przedm\adddot}},
+ bytranslatoranaf = {{t\l umaczenie \lbx@lfromlang, uwagi i pos\l owie}%
+ {t\l um\adddotspace \lbx@sfromlang, uw\adddotspace i pos\l \adddot}},
+ and = {{i}{i}},
+ andothers = {{i inni}{i in\adddot}},
+ andmore = {{i inni}{i in\adddot}},
+ volume = {{tom}{t\adddot}},
+ volumes = {{tomy}{t\adddot}},
+ involumes = {{w}{w}},
+ jourvol = {{tom}{t\adddot}},
+ jourser = {{seria}{ser\adddot}},
+ book = {{ksi\c{a}\.{z}ka}{ks\adddot}},
+ part = {{cz\c{e}\'{s}\'{c}}{cz\adddot}},
+ issue = {{wydanie}{wyd\adddot}},
+ newseries = {{nowa seria}{now\adddotspace ser\adddot}},
+ oldseries = {{stara seria}{star\adddotspace ser\adddot}},
+ edition = {{wydruk}{wyd\adddot}},
+ reprint = {{przedruk}{przedr\adddot}},
+ reprintof = {{przedruk}{przedr\adddot}},
+ reprintas = {{przedrukowano jako}{przedr\adddotspace jako}},
+ reprintfrom = {{przedrukowano z}{przedr\adddotspace z}},
+ translationof = {{t\l umaczenie}{t\l um\adddot}},
+ translationas = {{t\l umaczenie jako}{t\l um\adddotspace jako}},
+ translationfrom = {{t\l umaczenie z}{t\l um\adddotspace z}},
+ reviewof = {{recenzja na\addcolon}{rec\adddotspace na\addcolon}},
+ origpubas = {{pierwodruk wydano jako}%
+ {pierw\adddotspace wyd\adddotspace jako}},
+ origpubin = {{pierwodruk wydano w}{pierw\adddotspace wyd\adddotspace w}},
+ astitle = {{pod tytu\l em}{pod tyt\adddot}},
+ bypublisher = {{przez wydawc\c{e}}{prz\adddotspace wyd\adddot}},
+ page = {{strona}{s\adddot}},
+ pages = {{strony}{s\adddot}},
+ column = {{kolumna}{kol\adddot}},
+ columns = {{kolumny}{kol\adddot}},
+ line = {{linijka}{l\adddot}},
+ lines = {{linijki}{l\adddot}},
+ nodate = {{bez daty}{b\adddot d\adddot}},
+ verse = {{werset}{wer\adddot}},
+ verses = {{wersety}{wer\adddot}},
+ section = {{paragraf}{par\adddot}},
+ sections = {{paragrafy}{par\adddot}},
+ paragraph = {{akapit}{akap\adddot}},
+ paragraphs = {{akapity}{akap\adddot}},
+ pagetotal = {{strona}{s\adddot}},
+ pagetotals = {{strony}{s\adddot}},
+ columntotal = {{kolumna}{kol\adddot}},
+ columntotals = {{kolumny}{kol\adddot}},
+ linetotal = {{wers}{wer\adddot}},
+ linetotals = {{wersy}{wer\adddot}},
+ versetotal = {{wiersz}{wier\adddot}},
+ versetotals = {{wiersze}{wier\adddot}},
+ sectiontotal = {{paragraf}{par\adddot}},
+ sectiontotals = {{paragrafy}{par\adddot}},
+ paragraphtotal = {{akapit}{akap\adddot}},
+ paragraphtotals = {{akapit}{akap\adddot}},
+ in = {{w}{w}},
+ inseries = {{w}{w}},
+ ofseries = {{z}{z}},
+ number = {{numer}{nr\adddot}},% FIXME: check
+ chapter = {{rozdzia\l }{rozd\adddot}},
+% bathesis = {{}{}},% FIXME: missing
+ mathesis = {{praca magisterska}{prac\adddotspace mag\adddot}},
+ phdthesis = {{praca doktorska}{prac\adddotspace dokt\adddot}},
+ candthesis = {{praca kandydacka}%
+ {prac\adddotspace kand\adddot}},% FIXME: unsure
+ resreport = {{sprawozdanie naukowe}{spraw\adddotspace nau\adddot}},
+ techreport = {{sprawozdanie techniczne}{spraw\adddotspace tech\adddot}},
+ software = {{oprogramowanie}{opr\adddot}},
+ datacd = {{CD-ROM}{CD-ROM}},
+ audiocd = {{audio CD}{audio CD}},
+ version = {{wersja}{wer\adddot}},
+ url = {{adres}{adr\adddot}},
+ urlfrom = {{dost\c{e}pne z}{dost\adddotspace z}},
+ urlseen = {{termin wizyty}{term\adddotspace wiz\adddot}},
+ inpreparation = {{przygotowanie}{przyg\adddot}},
+ submitted = {{prezentacja}{prez\adddot}},
+ forthcoming = {{przygotowanie}{przyg\adddot}},% FIXME: unsure
+ inpress = {{wydrukowane}{wydruk\adddot}},
+ prepublished = {{przedwydanie}{przedw\adddot}},
+ citedas = {{cytowane dalej jako}{cyt\adddotspace dal\adddotspace jako}},
+ thiscite = {{tutaj}{tut\adddot}},
+ seenote = {{patrz uwag\c{e}}{patrz uw\adddot}},
+ quotedin = {{cytat wed\l ug}{cyt\adddotspace wg\adddot}},
+ idem = {{ten\.{z}e}{ten\.{z}e}},
+ idemsm = {{ten\.{z}e}{ten\.{z}e}},
+ idemsf = {{ta\.{z} sama}{ta\.{z} sama}},
+ idemsn = {{ten sam}{ten sam}},
+ idempm = {{ci sami}{ci sami}},
+ idempf = {{ci sami}{ci sami}},
+ idempn = {{ci sami}{ci sami}},
+ idempp = {{ci sami}{ci sami}},
+ ibidem = {{tam\.{z}e}{tam\.{z}e}},
+ opcit = {{praca cytowana}{prac\adddotspace cyt\adddot}},
+ loccit = {{miejsce cytowane}{miej\adddotspace cyt\adddot}},
+ confer = {{por\'{o}wnaj}{por\adddot}},
+ sequens = {{i nast\c{e}pna}{i nast\adddot}},
+ sequentes = {{i nast\c{e}pni}{i nast\adddot}},
+ passim = {{wsz\c{e}dzie}{wsz\c{e}dzie}},
+ see = {{patrz}{p\adddot}},
+ seealso = {{ratrz r\'{o}wnie\.{z}}{p\adddotspace r\'{o}wn\adddot}},
+ backrefpage = {{cytowane na stronie}{cyt\adddotspace na s\adddot}},
+ backrefpages = {{cytowane na stronach}{cyt\adddotspace na s\adddot}},
+ january = {{stycze\'{n}}{sty\adddot}},
+ february = {{luty}{lut\adddot}},
+ march = {{marzec}{mar\adddot}},
+ april = {{kwiecie\'{n}}{kw\adddot}},
+ may = {{maj}{maj}},
+ june = {{czerwiec}{czer\adddot}},
+ july = {{lipiec}{lip\adddot}},
+ august = {{sierpie\'{n}}{sierp\adddot}},
+ september = {{wrzesie\'{n}}{wrz\adddot}},
+ october = {{pa\'{z}dziernik}{pa\'{z}\adddot}},
+ november = {{listopad}{list\adddot}},
+ december = {{grudzie\'{n}}{grud\adddot}},
+ datejanuary = {{stycznia}{sty\adddot}},
+ datefebruary = {{lutego}{lut\adddot}},
+ datemarch = {{marca}{mar\adddot}},
+ dateapril = {{kwietnia}{kw\adddot}},
+ datemay = {{maja}{maj\adddot}},
+ datejune = {{czerwca}{czer\adddot}},
+ datejuly = {{lipca}{lip\adddot}},
+ dateaugust = {{sierpnia}{sierp\adddot}},
+ dateseptember = {{wrze\'{s}nia}{wrz\adddot}},
+ dateoctober = {{pa\'{z}dziernika}{pa\'{z}\adddot}},
+ datenovember = {{listopada}{list\adddot}},
+ datedecember = {{grudnia}{grud\adddot}},
+ langamerican = {{ameryka\'{n}ski}{ameryka\'{n}ski}},
+ langbrazilian = {{brazylijski}{brazylijski}},
+ langbulgarian = {{bu\l garski}{bu\l garski}},
+ langcatalan = {{katalo\'{n}ski}{katalo\'{n}ski}},
+ langcroatian = {{chorwacki}{chorwacki}},
+ langczech = {{czeski}{czeski}},
+ langdanish = {{du\'{n}ski}{du\'{n}ski}},
+ langdutch = {{holenderski}{holenderski}},
+ langenglish = {{angielski}{angielski}},
+ langestonian = {{esto\'{n}ski}{esto\'{n}ski}},
+ langfinnish = {{fi\'{n}ski}{fi\'{n}ski}},
+ langfrench = {{francuski}{francuski}},
+ langgalician = {{galicyjski}{galicyjski}},
+ langgerman = {{niemiecki}{niemiecki}},
+ langgreek = {{grecki}{grecki}},
+ langhungarian = {{w\c{e}gierski}{w\c{e}gierski}},
+ langitalian = {{w\l oski}{w\l oski}},
+ langlatin = {{\l acina}{\l acina}},
+% langlatvian = {{}{}},% FIXME: missing
+ langnorwegian = {{norweski}{norweski}},
+ langpolish = {{polski}{polski}},
+ langportuguese = {{portugalski}{portugalski}},
+ langrussian = {{rosyjski}{rosyjski}},
+% langslovak = {{}{}},% FIXME: missing
+ langslovene = {{s\l owe\'{n}ski}{s\l owe\'{n}ski}},
+ langspanish = {{hiszpa\'{n}ski}{hiszpa\'{n}ski}},
+ langswedish = {{szwedzki}{szwedzki}},
+ fromamerican = {{z ameryka\'{n}skiego}{z amer\adddot}},
+ frombrazilian = {{z brazylijskiego}{z braz\adddot}},
+ frombulgarian = {{z bu\l garskiego}{z bu\l g\adddot}},
+ fromcatalan = {{z katalo\'{n}skiego}{z katal\adddot}},
+ fromcroatian = {{z chorwackiego}{z chorw\adddot}},
+ fromczech = {{z czeskiego}{z czesk.}},
+ fromdanish = {{z du\'{n}skiego}{z du\'{n}\adddot}},
+ fromdutch = {{z niderla\'{n}skiego}{z nid\adddot}},
+ fromenglish = {{z angielskiego}{z ang\adddot}},
+ fromestonian = {{z esto\'{n}skiego}{z est\adddot}},
+ fromfinnish = {{z fi\'{n}skiego}{z fi\'{n}\adddot}},
+ fromfrench = {{z francuzkiego}{z fran\adddot}},
+ fromgalician = {{z galicyjzkiego}{z gal\adddot}},
+ fromgerman = {{z niemieckiego}{z niem\adddot}},
+ fromgreek = {{z greckiego}{z grec\adddot}},
+ fromhungarian = {{z w\c{e}gierskiego}{z w\c{e}gierskiego}},
+ fromitalian = {{z w\l oskiego}{z w\l os\adddot}},
+ fromlatin = {{z \l aciny}{z \l at\adddot}},
+% fromlatvian = {{}{}},% FIXME: missing
+ fromnorwegian = {{z norweskiego}{z norw\adddot}},
+ frompolish = {{z polskiego}{z pol\adddot}},
+ fromportuguese = {{z portugalskiego}{z port\adddot}},
+ fromrussian = {{z rosyjskiego}{z ros\adddot}},
+% fromslovak = {{}{}},% FIXME: missing
+ fromslovene = {{z s\l owe\'{n}skiego}{z s\l owe\'{n}\adddot}},
+ fromspanish = {{z hiszpa\'{n}skiego}{z hiszp\adddot}},
+ fromswedish = {{ze szwedskiego}{ze szw\adddot}},
+ countryde = {{Niemcy}{DE}},
+ countryeu = {{Unia Europejska}{EU}},
+ countryep = {{Unia Europejska}{EP}},
+ countryfr = {{Francja}{FR}},
+ countryuk = {{Wielka Brytania}{GB}},
+ countryus = {{Stany Zjednoczone Ameryki}{US}},
+ patent = {{patent}{pat\adddot}},
+ patentde = {{patent Niemiec}{pat\adddotspace Niemiec}},
+ patenteu = {{patent Europy}{pat\adddotspace Europy}},
+ patentfr = {{patent Francji}{pat\adddotspace Francji}},
+ patentuk = {{patent Wielkiej Brytanji}{pat\adddotspace Wielkiej Brytanji}},
+ patentus = {{patent USA}{pat\adddotspace USA}},
+ patreq = {{podanie na patent}{podanie na pat\adddot}},
+ patreqde = {{podanie na patent Niemiec}%
+ {podanie na pat\adddotspace Niemiec}},
+ patreqeu = {{podanie na patent Europy}{podanie na pat\adddotspace Europy}},
+ patreqfr = {{podanie na patent Francji}%
+ {podanie na pat\adddotspace Francji}},
+ patrequk = {{podanie na patent Wielkiej Brytanji}%
+ {podanie na pat\adddotspace Wielkiej Brytanji}},
+ patrequs = {{podanie na patent USA}{podanie na pat\adddotspace USA}},
+ file = {{plik}{plik}},
+ library = {{bibloteka}{bibl\adddot}},
+ abstract = {{podsumowanie}{pod\adddot}},
+ annotation = {{adnotacja}{adn\adddot}},
+ commonera = {{CE}{CE}},
+ beforecommonera = {{BCE}{BCE}},
+ annodomini = {{n\adddot e\adddot}{n\adddot e\adddot}},
+ beforechrist = {{p\adddot n\adddot e\adddot}{p\adddot n\adddot e\adddot}},
+ circa = {{oko\l o}{ok\adddot}},
+ spring = {{wiosna}{wiosna}},
+ summer = {{lato}{lato}},
+ autumn = {{jesie\'{n}}{jesie\'{n}}},
+ winter = {{zima}{zima}},
+% springN = {{}{}},% FIXME: missing
+% summerN = {{}{}},% FIXME: missing
+% autumnN = {{}{}},% FIXME: missing
+% winterN = {{}{}},% FIXME: missing
+% springS = {{}{}},% FIXME: missing
+% summerS = {{}{}},% FIXME: missing
+% autumnS = {{}{}},% FIXME: missing
+% winterS = {{}{}},% FIXME: missing
+% Q1 = {{}{}},% FIXME: missing
+% Q2 = {{}{}},% FIXME: missing
+% Q3 = {{}{}},% FIXME: missing
+% Q4 = {{}{}},% FIXME: missing
+% QD1 = {{}{}},% FIXME: missing
+% QD2 = {{}{}},% FIXME: missing
+% QD3 = {{}{}},% FIXME: missing
+% S1 = {{}{}},% FIXME: missing
+% S2 = {{}{}},% FIXME: missing
+ am = {{AM}{AM}},
+ pm = {{PM}{PM}},
+}
+
+\protected\gdef\lbx@pl@mkbibmonth#1{%
+ \ifcase0#1\relax
+ #1\BibliographyWarning{Month out of range}%
+ \or\abx@bibmonth{datejanuary}%
+ \or\abx@bibmonth{datefebruary}%
+ \or\abx@bibmonth{datemarch}%
+ \or\abx@bibmonth{dateapril}%
+ \or\abx@bibmonth{datemay}%
+ \or\abx@bibmonth{datejune}%
+ \or\abx@bibmonth{datejuly}%
+ \or\abx@bibmonth{dateaugust}%
+ \or\abx@bibmonth{dateseptember}%
+ \or\abx@bibmonth{dateoctober}%
+ \or\abx@bibmonth{datenovember}%
+ \or\abx@bibmonth{datedecember}%
+ \else
+ #1\BibliographyWarning{Month out of range}%
+ \fi}%
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/lbx/portuges-ms.lbx b/macros/latex/contrib/biblatex-ms/latex/lbx/portuges-ms.lbx
new file mode 100644
index 0000000000..60063b7d8b
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/lbx/portuges-ms.lbx
@@ -0,0 +1,7 @@
+\ProvidesFile{portuges-ms.lbx}
+[\abx@lbxid]
+
+\InheritBibliographyExtras{portuguese}
+\InheritBibliographyStrings{portuguese}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/lbx/portuguese-ms.lbx b/macros/latex/contrib/biblatex-ms/latex/lbx/portuguese-ms.lbx
new file mode 100644
index 0000000000..33dfec2b23
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/lbx/portuguese-ms.lbx
@@ -0,0 +1,558 @@
+\ProvidesFile{portuguese-ms.lbx}
+[\abx@lbxid]
+
+\DeclareRedundantLanguages{portuguese}{portuges,brazil}
+
+\DeclareBibliographyExtras{%
+ \protected\def\bibrangedash{%
+ \textendash\penalty\hyphenpenalty}% breakable dash
+ \let\finalandcomma=\empty
+ \let\finalandsemicolon=\empty
+ \def\mkbibordinal{\mkbibmascord}%
+ \protected\def\mkbibmascord#1{%
+ \stripzeros{#1}\textordmasculine}% \textordmasculine -> textcomp.sty
+ \protected\def\mkbibfemord#1{%
+ \stripzeros{#1}\textordfeminine}% \textordfeminine -> textcomp.sty
+ \protected\def\mkbibneutord{\mkbibmascord}%
+ \protected\def\mkbibdatelong#1#2#3{%
+ \iffieldundef{#3}
+ {}
+ {\stripzeros{\thefield{#3}}%
+ \iffieldundef{#2}{}{\nobreakspace de\space}}%
+ \iffieldundef{#2}
+ {}
+ {\mkbibmonth{\thefield{#2}}%
+ \iffieldundef{#1}{}{\nobreakspace de\space}}%
+ \iffieldbibstring{#1}
+ {\bibstring{\thefield{#1}}}
+ {\dateeraprintpre{#1}\stripzeros{\thefield{#1}}}}%
+ \protected\def\mkbibdateshort#1#2#3{%
+ \iffieldundef{#3}
+ {}
+ {\mkdayzeros{\thefield{#3}}%
+ \iffieldundef{#2}{}{/}}%
+ \iffieldundef{#2}
+ {}
+ {\mkmonthzeros{\thefield{#2}}%
+ \iffieldundef{#1}{}{/}}%
+ \iffieldbibstring{#1}
+ {\bibstring{\thefield{#1}}}
+ {\dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}}%
+ \savecommand\mkbibordedition
+ \savecommand\mkbibordseries
+ \def\mkbibordedition{\mkbibfemord}%
+ \def\mkbibordseries{\mkbibfemord}%
+ \expandafter\protected\expandafter\def\csname mkbibtime24h\endcsname#1#2#3#4{%
+ \iffieldundef{#1}
+ {}
+ {\mktimezeros{\thefield{#1}}%
+ \iffieldundef{#2}{}{\bibtimesep}}%
+ \iffieldundef{#2}
+ {}
+ {\mktimezeros{\thefield{#2}}%
+ \iffieldundef{#3}{}{\bibtimesep}}%
+ \iffieldundef{#3}
+ {}
+ {\mktimezeros{\thefield{#3}}}%
+ \iffieldundef{#4}{}
+ {\bibtimezonesep
+ \mkbibtimezone{\thefield{#4}}}}%
+ \expandafter\protected\expandafter\def\csname mkbibtime12h\endcsname#1#2#3#4{%
+ \stripzeros{\mktimehh{\thefield{#1}}}\bibtimesep
+ \forcezerosmdt{\thefield{#2}}%
+ \iffieldundef{#3}{}
+ {\bibtimesep
+ \forcezerosmdt{\thefield{#3}}}%
+ \space
+ \ifnumless{\thefield{#1}}{12}
+ {\bibstring{am}}
+ {\bibstring{pm}}%
+ \iffieldundef{#4}{}
+ {\space\bibtimezonesep
+ \parentext{\mkbibtimezone{\thefield{#4}}}}}%
+ \protected\def\mkbibyeardivisiondateshort#1#2{%
+ \mkbibyeardivision{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}%
+ \dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}%
+ \protected\def\mkbibyeardivisiondatelong#1#2{%
+ \mkbibyeardivision{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}%
+ \dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}%
+}
+
+\UndeclareBibliographyExtras{%
+ \restorecommand\mkbibordedition
+ \restorecommand\mkbibordseries
+}
+
+\DeclareBibliographyStrings{%
+ bibliography = {{Bibliografia}{Bibliografia}},
+ references = {{Refer\^encias}{Refer\^encias}},
+ shorthands = {{Lista de Abreviaturas}{Abreviaturas}},
+ editor = {{editor}{ed\adddot}},
+ editors = {{editores}{eds\adddot}},
+ compiler = {{compilador}{comp\adddot}},
+ compilers = {{compiladores}{comp\adddot}},
+ redactor = {{redator}{red\adddot}},
+ redactors = {{redatores}{red\adddot}},
+ reviser = {{revisor}{rev\adddot}},
+ revisers = {{revisores}{rev\adddot}},
+ founder = {{fundador}{fund\adddot}},
+ founders = {{fundadores}{fund\adddot}},
+ continuator = {{continuador}{cont\adddot}},
+ continuators = {{continuadores}{cont\adddot}},
+ collaborator = {{colaborador}{col\adddot}},
+ collaborators = {{colaboradores}{col\adddot}},
+ translator = {{tradutor}{trad\adddot}},
+ translators = {{tradutores}{trad\adddot}},
+ commentator = {{comentador}{coment\adddot}},
+ commentators = {{comentadores}{coment\adddot}},
+ annotator = {{anotador}{anot\adddot}},
+ annotators = {{anotadores}{anot\adddot}},
+ commentary = {{coment\'ario}{coment\adddot}},
+ annotations = {{notas}{notas}},
+ introduction = {{introdu\c{c}\~ao}{introd\adddot}},
+ foreword = {{pref\'acio}{pref\adddot}},
+ afterword = {{posf\'acio}{posf\adddot}},
+ editortr = {{editor e tradutor}%
+ {ed\adddotspace e trad\adddot}},
+ editorstr = {{editores e tradutores}%
+ {eds\adddotspace e trad\adddot}},
+ editorco = {{editor e comentador}%
+ {ed\adddotspace e coment\adddot}},
+ editorsco = {{editores e comentadores}%
+ {eds\adddotspace e coment\adddot}},
+ editoran = {{editor e anotador}%
+ {ed\adddotspace e anot\adddot}},
+ editorsan = {{editores e anotadores}%
+ {eds\adddotspace e anot\adddot}},
+ editorin = {{editor e introdu\c{c}\~ao}%
+ {ed\adddotspace e introd\adddot}},
+ editorsin = {{editores e introdu\c{c}\~ao}%
+ {eds\adddotspace e introd\adddot}},
+ editorfo = {{editor e pref\'acio}%
+ {ed\adddotspace e pref\adddot}},
+ editorsfo = {{editores e pref\'acio}%
+ {eds\adddotspace e pref\adddot}},
+ editoraf = {{editor e posf\'acio}%
+ {ed\adddotspace e posf\adddot}},
+ editorsaf = {{editores e posf\'acio}%
+ {eds\adddotspace e posf\adddot}},
+ editortrco = {{editor, tradutor e comentador}%
+ {ed., trad\adddot\ e coment\adddot}},
+ editorstrco = {{editores, tradutores e comentadores}%
+ {eds., trad\adddot\ e coment\adddot}},
+ editortran = {{editor, tradutor e anotador}%
+ {ed., trad\adddot\ e anot\adddot}},
+ editorstran = {{editores, tradutores e anotadores}%
+ {eds., trad\adddot\ e anot\adddot}},
+ editortrin = {{editor, tradutor e introdu\c{c}\~ao}%
+ {ed., trad\adddot\ e introd\adddot}},
+ editorstrin = {{editores, tradutores e introdu\c{c}\~ao}%
+ {eds., trad\adddot\ e introd\adddot}},
+ editortrfo = {{editor, tradutor e pref\'acio}%
+ {ed., trad\adddot\ e pref\adddot}},
+ editorstrfo = {{editores, tradutores e pref\'acio}%
+ {eds., trad\adddot\ e pref\adddot}},
+ editortraf = {{editor, tradutor e posf\'acio}%
+ {ed., trad\adddot\ e posf\adddot}},
+ editorstraf = {{editores, tradutores e posf\'acio}%
+ {eds., trad\adddot\ e posf\adddot}},
+ editorcoin = {{editor, comentador e introdu\c{c}\~ao}%
+ {ed., coment\adddot\ e introd\adddot}},
+ editorscoin = {{editores, comentadores e introdu\c{c}\~ao}%
+ {eds., coment\adddot\ e introd\adddot}},
+ editorcofo = {{editor, comentador e pref\'acio}%
+ {ed., coment\adddot\ e pref\adddot}},
+ editorscofo = {{editores, comentadores e pref\'acio}%
+ {eds., coment\adddot\ e pref\adddot}},
+ editorcoaf = {{editor, comentador e posf\'acio}%
+ {ed., coment\adddot\ e posf\adddot}},
+ editorscoaf = {{editores, comentadores e posf\'acio}%
+ {eds., coment\adddot\ e posf\adddot}},
+ editoranin = {{editor, anotador e introdu\c{c}\~ao}%
+ {ed., anot\adddot\ e introd\adddot}},
+ editorsanin = {{editores, anotadores e introdu\c{c}\~ao}%
+ {eds., anot\adddot\ e introd\adddot}},
+ editoranfo = {{editor, anotador e pref\'acio}%
+ {ed., anot\adddot\ e pref\adddot}},
+ editorsanfo = {{editores, anotadores e pref\'acio}%
+ {eds., anot\adddot\ e pref\adddot}},
+ editoranaf = {{editor, anotador e posf\'acio}%
+ {ed., anot\adddot\ e posf\adddot}},
+ editorsanaf = {{editores, anotadores e posf\'acio}%
+ {eds., anot\adddot\ e posf\adddot}},
+ editortrcoin = {{editor, tradutor, comentador e introdu\c{c}\~ao}%
+ {ed., trad., coment\adddot\ e introd\adddot}},
+ editorstrcoin = {{editores, tradutores, comentadores e introdu\c{c}\~ao}%
+ {eds., trad., coment\adddot\ e introd\adddot}},
+ editortrcofo = {{editor, tradutor, comentador e pref\'acio}%
+ {ed., trad., coment\adddot\ e pref\adddot}},
+ editorstrcofo = {{editores, tradutores, comentadores e pref\'acio}%
+ {eds., trad., coment\adddot\ e pref\adddot}},
+ editortrcoaf = {{editor, tradutor, comentador e posf\'acio}%
+ {ed., trad., coment\adddot\ e posf\adddot}},
+ editorstrcoaf = {{editores, tradutores, comentadores e posf\'acio}%
+ {eds., trad., coment\adddot\ e posf\adddot}},
+ editortranin = {{editor, tradutor, anotador e introdu\c{c}\~ao}%
+ {ed., trad., anot\adddot\ e introd\adddot}},
+ editorstranin = {{editores, tradutores, anotadores e introdu\c{c}\~ao}%
+ {eds., trad., anot\adddot\ e introd\adddot}},
+ editortranfo = {{editor, tradutor, anotador e pref\'acio}%
+ {ed., trad., anot\adddot\ e pref\adddot}},
+ editorstranfo = {{editores, tradutores, anotadores e pref\'acio}%
+ {eds., trad., anot\adddot\ e pref\adddot}},
+ editortranaf = {{editor, tradutor, anotador e posf\'acio}%
+ {ed., trad., anot\adddot\ e posf\adddot}},
+ editorstranaf = {{editores, tradutores, anotadores e posf\'acio}%
+ {eds., trad., anot\adddot\ e posf\adddot}},
+ translatorco = {{tradutor e comentador}%
+ {trad\adddot\ e coment\adddot}},
+ translatorsco = {{tradutores e comentadores}%
+ {trad\adddot\ e coment\adddot}},
+ translatoran = {{tradutor e anotador}%
+ {trad\adddot\ e anot\adddot}},
+ translatorsan = {{tradutores e anotadores}%
+ {trad\adddot\ e anot\adddot}},
+ translatorin = {{tradu\c{c}\~ao e introdu\c{c}\~ao}%
+ {trad\adddot\ e introd\adddot}},
+ translatorsin = {{tradu\c{c}\~ao e introdu\c{c}\~ao}%
+ {trad\adddot\ e introd\adddot}},
+ translatorfo = {{tradu\c{c}\~ao e pref\'acio}%
+ {trad\adddot\ e pref\adddot}},
+ translatorsfo = {{tradu\c{c}\~ao e pref\'acio}%
+ {trad\adddot\ e pref\adddot}},
+ translatoraf = {{tradu\c{c}\~ao e posf\'acio}%
+ {trad\adddot\ e posf\adddot}},
+ translatorsaf = {{tradu\c{c}\~ao e posf\'acio}%
+ {trad\adddot\ e posf\adddot}},
+ translatorcoin = {{tradu\c{c}\~ao, coment\'ario e introdu\c{c}\~ao}%
+ {trad., coment\adddot\ e introd\adddot}},
+ translatorscoin = {{tradu\c{c}\~ao, coment\'ario e introdu\c{c}\~ao}%
+ {trad., coment\adddot\ e introd\adddot}},
+ translatorcofo = {{tradu\c{c}\~ao, coment\'ario e pref\'acio}%
+ {trad., coment\adddot\ e pref\adddot}},
+ translatorscofo = {{tradu\c{c}\~ao, coment\'ario e pref\'acio}%
+ {trad., coment\adddot\ e pref\adddot}},
+ translatorcoaf = {{tradu\c{c}\~ao, coment\'ario e posf\'acio}%
+ {trad., coment\adddot\ e posf\adddot}},
+ translatorscoaf = {{tradu\c{c}\~ao, coment\'ario e posf\'acio}%
+ {trad., coment\adddot\ e posf\adddot}},
+ translatoranin = {{tradu\c{c}\~ao, notas e introdu\c{c}\~ao}%
+ {trad., notas e introd\adddot}},
+ translatorsanin = {{tradu\c{c}\~ao, notas e introdu\c{c}\~ao}%
+ {trad., notas e introd\adddot}},
+ translatoranfo = {{tradu\c{c}\~ao, notas e pref\'acio}%
+ {trad., notas e pref\adddot}},
+ translatorsanfo = {{tradu\c{c}\~ao, notas e pref\'acio}%
+ {trad., notas e pref\adddot}},
+ translatoranaf = {{tradu\c{c}\~ao, notas e posf\'acio}%
+ {trad., notas e posf\adddot}},
+ translatorsanaf = {{tradu\c{c}\~ao, notas e posf\'acio}%
+ {trad., notas e posf\adddot}},
+ organizer = {{organizador}{org\adddot}},
+ organizers = {{organizadores}{orgs\adddot}},
+ byorganizer = {{organizado por}{org\adddotspace por}},
+ byauthor = {{por}{por}},
+ byeditor = {{editado por}{ed\adddotspace por}},
+ bycompiler = {{compilado por}{comp\adddotspace por}},
+ byredactor = {{redigido por}{red\adddotspace por}},
+ byreviser = {{revisto por}{rev\adddotspace por}},
+ byreviewer = {{resenhado por}{res\adddotspace por}},% FIXME: check
+ byfounder = {{fundado por}{fund\adddotspace por}},
+ bycontinuator = {{continuado por}{cont\adddotspace por}},
+ bycollaborator = {{em colabora\c{c}\~ao com}{em col\adddotspace com}},
+ bytranslator = {{traduzido \lbx@lfromlang\ por}{trad\adddot\ \lbx@sfromlang\ por}},
+ bycommentator = {{comentado por}{coment\adddot\ por}},
+ byannotator = {{notas de}{notas de}},
+ withcommentator = {{com coment\'arios de}{com coment\adddot\ de}},
+ withannotator = {{com notas de}{com notas de}},
+ withintroduction = {{com introdu\c{c}\~ao de}{com introd\adddot\ de}},
+ withforeword = {{com pref\'acio de}{com pref\adddot\ de}},
+ withafterword = {{com posf\'acio de}{com posf\adddot\ de}},
+ byeditortr = {{editado e traduzido \lbx@lfromlang\ por}%
+ {ed\adddotspace e trad\adddot\ \lbx@sfromlang\ por}},
+ byeditorco = {{editado e comentado por}%
+ {ed\adddotspace e coment\adddot\ por}},
+ byeditoran = {{editado e anotado por}%
+ {ed\adddotspace e anot\adddot\ por}},
+ byeditorin = {{editado e introduzido por}%
+ {ed\adddotspace e introd\adddot\ por}},
+ byeditorfo = {{editado e prefaciado por}%
+ {ed\adddotspace e pref\adddot\ por}},
+ byeditoraf = {{editado e posfaciado por}%
+ {ed\adddotspace e posf\adddot\ por}},
+ byeditortrco = {{editado, traduzido \lbx@lfromlang\ e comentado por}%
+ {ed.,\addabbrvspace trad\adddot\ \lbx@sfromlang\ e coment\adddot\ por}},
+ byeditortran = {{editado, traduzido \lbx@lfromlang\ e anotado por}%
+ {ed.,\addabbrvspace trad\adddot\ \lbx@sfromlang\ e anot\adddot\ por}},
+ byeditortrin = {{editado, traduzido \lbx@lfromlang\ e introduzido por}%
+ {ed.,\addabbrvspace trad\adddotspace \lbx@sfromlang\ e introd\adddot\ por}},
+ byeditortrfo = {{editado, traduzido \lbx@lfromlang\ e prefaciado por}%
+ {ed.,\addabbrvspace trad\adddotspace \lbx@sfromlang\ e pref\adddot\ por}},
+ byeditortraf = {{editado, traduzido \lbx@lfromlang\ e posfaciado por}%
+ {ed.,\addabbrvspace trad\adddotspace \lbx@sfromlang\ e posf\adddot\ por}},
+ byeditorcoin = {{editado, comentado e introduzido por}%
+ {ed.,\addabbrvspace coment\adddot\ e introd\adddot\ por}},
+ byeditorcofo = {{editado, comentado e prefaciado por}%
+ {ed.,\addabbrvspace coment\adddot\ e pref\adddot\ por}},
+ byeditorcoaf = {{editado, comentado e posfaciado por}%
+ {ed.,\addabbrvspace coment\adddot\ e posf\adddot\ por}},
+ byeditoranin = {{editado, anotado e introduzido por}%
+ {ed.,\addabbrvspace anot\adddot\ e introd\adddot\ por}},
+ byeditoranfo = {{editado, anotado e prefaciado por}%
+ {ed.,\addabbrvspace anot\adddot\ e pref\adddot\ por}},
+ byeditoranaf = {{editado, anotado e posfaciado por}%
+ {ed.,\addabbrvspace anot\adddot\ e posf\adddot\ por}},
+ byeditortrcoin = {{editado, traduzido \lbx@lfromlang, comentado e introduzido por}%
+ {ed.,\addabbrvspace trad\adddot\ \lbx@sfromlang, coment\adddot\ e introd\adddot\ por}},
+ byeditortrcofo = {{editado, traduzido \lbx@lfromlang, comentado e prefaciado por}%
+ {ed.,\addabbrvspace trad\adddot\ \lbx@sfromlang, coment\adddot\ e pref\adddot\ por}},
+ byeditortrcoaf = {{editado, traduzido \lbx@lfromlang, comentado e posfaciado por}%
+ {ed.,\addabbrvspace trad\adddot\ \lbx@sfromlang, coment\adddot\ e posf\adddot\ por}},
+ byeditortranin = {{editado, traduzido \lbx@lfromlang, anotado e introduzido por}%
+ {ed.,\addabbrvspace trad\adddot\ \lbx@sfromlang, anot\adddot\ e introd\adddot\ por}},
+ byeditortranfo = {{editado, traduzido \lbx@lfromlang, anotado e prefaciado por}%
+ {ed.,\addabbrvspace trad\adddot\ \lbx@sfromlang, anot\adddot\ e pref\adddot\ por}},
+ byeditortranaf = {{editado, traduzido \lbx@lfromlang, anotado e posfaciado por}%
+ {ed.,\addabbrvspace trad\adddot\ \lbx@sfromlang, anot\adddot\ e posf\adddot\ por}},
+ bytranslatorco = {{traduzido \lbx@lfromlang\ e comentado por}%
+ {trad\adddot\ \lbx@sfromlang\ e coment\adddot\ por}},
+ bytranslatoran = {{traduzido \lbx@lfromlang\ e anotado por}%
+ {trad\adddot\ \lbx@sfromlang\ e anot\adddot\ por}},
+ bytranslatorin = {{traduzido \lbx@lfromlang\ e introduzido por}%
+ {trad\adddot\ \lbx@sfromlang\ e introd\adddot\ por}},
+ bytranslatorfo = {{traduzido \lbx@lfromlang\ e prefaciado por}%
+ {trad\adddot\ \lbx@sfromlang\ e pref\adddot\ por}},
+ bytranslatoraf = {{traduzido \lbx@lfromlang\ e posfaciado por}%
+ {trad\adddot\ \lbx@sfromlang\ e posf\adddot\ por}},
+ bytranslatorcoin = {{traduzido \lbx@lfromlang, comentado e introduzido por}%
+ {trad\adddot\ \lbx@sfromlang, coment\adddot\ e introd\adddot\ por}},
+ bytranslatorcofo = {{traduzido \lbx@lfromlang, comentado e prefaciado por}%
+ {trad\adddot\ \lbx@sfromlang, coment\adddot\ e pref\adddot\ por}},
+ bytranslatorcoaf = {{traduzido \lbx@lfromlang, comentado e posfaciado por}%
+ {trad\adddot\ \lbx@sfromlang, coment\adddot\ e posf\adddot\ por}},
+ bytranslatoranin = {{traduzido \lbx@lfromlang, anotado e introduzido por}%
+ {trad\adddot\ \lbx@sfromlang, anot\adddot\ e introd\adddot\ por}},
+ bytranslatoranfo = {{traduzido \lbx@lfromlang, anotado e prefaciado por}%
+ {trad\adddot\ \lbx@sfromlang, anot\adddot\ e pref\adddot\ por}},
+ bytranslatoranaf = {{traduzido \lbx@lfromlang, anotado e posfaciado por}%
+ {trad\adddot\ \lbx@sfromlang, anot\adddot\ e posf\adddot\ por}},
+ and = {{e}{e}},
+ andothers = {{et\addabbrvspace al\adddot}{et\addabbrvspace al\adddot}},
+ andmore = {{et\addabbrvspace al\adddot}{et\addabbrvspace al\adddot}},
+ volume = {{volume}{vol\adddot}},
+ volumes = {{volumes}{vols\adddot}},
+ involumes = {{em}{em}},
+ jourvol = {{volume}{vol\adddot}},
+ jourser = {{s\'erie}{s\'er\adddot}},
+ book = {{livro}{livro}},
+ part = {{parte}{parte}},
+ issue = {{n\'umero}{n\'umero}},
+ newseries = {{nova s\'erie}{nova s\'er\adddot}},
+ oldseries = {{s\'erie antiga}{s\'er\adddot\ antiga}},
+ edition = {{edi\c{c}\~ao}{ed\adddot}},
+ reprint = {{reimpress\~ao}{reimpr\adddot}},
+ reprintof = {{reimpress\~ao de}{reimpr\adddotspace de}},
+ reprintas = {{reimpresso como}{reimpr\adddotspace como}},
+ reprintfrom = {{reimpresso}{reimpr\adddot}},% FIXME: check
+ translationof = {{tradu\c{c}\~ao de}{trad\adddotspace de}},% FIXME: check
+ translationas = {{traduzido como}{trad\adddotspace como}},% FIXME: check
+ translationfrom = {{traduzido do}{trad\adddotspace do}},% FIXME: check
+ reviewof = {{resenha de}{res\adddotspace de}},% FIXME: check
+ origpubas = {{originalmente publicado como}{orig\adddotspace pub\adddotspace como}},% FIXME: check
+ origpubin = {{originalmente publicado em}{orig\adddotspace pub\adddotspace em}},% FIXME: check
+ astitle = {{como}{como}},% FIXME: check
+ bypublisher = {{por}{por}},% FIXME: check
+ nodate = {{sem data}{s\adddot d\adddot}},% FIXME: latin: sine die
+ page = {{p\'agina}{p\adddot}},
+ pages = {{p\'aginas}{pp\adddot}},
+ column = {{coluna}{col\adddot}},
+ columns = {{colunas}{cols\adddot}},
+ line = {{linha}{l\adddot}},
+ lines = {{linhas}{ll\adddot}},% FIXME: check
+ verse = {{verso}{v\adddot}},
+ verses = {{versos}{vv\adddot}},% FIXME: check
+ section = {{se\c{c}\~ao}{\S}},
+ sections = {{se\c{c}\~oes}{\S\S}},
+ paragraph = {{par\'agrafo}{par\adddot}},
+ paragraphs = {{par\'agrafo}{par\adddot}},
+ pagetotal = {{p\'agina}{p\adddot}},
+ pagetotals = {{p\'aginas}{pp\adddot}},
+ columntotal = {{coluna}{col\adddot}},
+ columntotals = {{colunas}{cols\adddot}},
+ linetotal = {{linha}{l\adddot}},
+ linetotals = {{linhas}{ll\adddot}},% FIXME: check
+ versetotal = {{verso}{v\adddot}},
+ versetotals = {{versos}{vv\adddot}},% FIXME: check
+ sectiontotal = {{se\c{c}\~ao}{\S}},
+ sectiontotals = {{se\c{c}\~oes}{\S\S}},
+ paragraphtotal = {{par\'agrafo}{par\adddot}},
+ paragraphtotals = {{par\'agrafo}{par\adddot}},
+ in = {{em}{em}},
+ inseries = {{em}{em}},
+ ofseries = {{de}{de}},
+ number = {{n\'umero}{n\adddot\textordmasculine}},
+ chapter = {{cap\'\i tulo}{cap\adddot}},
+% bathesis = {{}{}},% FIXME: missing
+ mathesis = {{tese de mestrado}{tese de mestrado}},
+ phdthesis = {{tese de doutoramento}{tese de doutoramento}},
+ candthesis = {{proposta de tese}{proposta de tese}},
+ resreport = {{relat\'orio de pesquisa}{rel\adddotspace de pesquisa}},
+ techreport = {{relat\'orio t\'ecnico}{rel\adddotspace t\'ec\adddot}},
+ software = {{software}{software}},
+ datacd = {{CD-ROM}{CD-ROM}},
+ audiocd = {{CD \'audio}{CD \'audio}},
+ version = {{vers\~ao}{vers\~ao}},
+ url = {{URL}{URL}},
+ urlfrom = {{URL}{URL}},
+ urlseen = {{acedido em}{acedido em}},
+ inpreparation = {{em prepara\c{c}\~ao}{em prep\adddot}},
+ submitted = {{submetido}{subm\adddot}},
+ forthcoming = {{no prelo}{no prelo}},
+ inpress = {{no prelo}{no prelo}},
+ prepublished = {{pr\'e publicado}{pr\'e pub\adddot}},% FIXME: check
+ citedas = {{doravante citado como}{doravante citado como}},
+ thiscite = {{especialmente}{esp\adddot}},% FIXME: check
+ seenote = {{ver nota}{ver nota}},
+ quotedin = {{apud}{apud}},
+ idem = {{idem}{idem}},
+ idemsm = {{idem}{idem}},
+ idemsf = {{eadem}{eadem}},
+ idemsn = {{idem}{idem}},
+ idempm = {{eidem}{eidem}},
+ idempf = {{eaedem}{eaedem}},
+ idempn = {{eadem}{eadem}},
+ idempp = {{eidem}{eidem}},
+ ibidem = {{ibidem}{ibid\adddot}},
+ opcit = {{op\adddotspace cit\adddot}{op\adddotspace cit\adddot}},
+ loccit = {{loc\adddotspace cit\adddot}{loc\adddotspace cit\adddot}},
+ confer = {{cf\adddot}{cf\adddot}},
+ sequens = {{sq\adddot}{sq\adddot}},
+ sequentes = {{sqq\adddot}{sqq\adddot}},
+ passim = {{passim}{pass\adddot}},
+ see = {{ver}{ver}},
+ seealso = {{ver tamb\'em}{ver tamb\'em}},
+ backrefpage = {{ver p\'agina}{ver p\adddot}},
+ backrefpages = {{ver p\'aginas}{ver pp\adddot}},
+ january = {{janeiro}{jan\adddot}},
+ february = {{fevereiro}{fev\adddot}},
+ march = {{mar\c{c}o}{mar\adddot}},
+ april = {{abril}{abr\adddot}},
+ may = {{maio}{mai\adddot}},
+ june = {{junho}{jun\adddot}},
+ july = {{julho}{jul\adddot}},
+ august = {{agosto}{ago\adddot}},
+ september = {{setembro}{set\adddot}},
+ october = {{outubro}{out\adddot}},
+ november = {{novembro}{nov\adddot}},
+ december = {{dezembro}{dez\adddot}},
+ langamerican = {{ingl\^es}{ingl\^es}},
+ langbrazilian = {{portugu{\^e}s}{portugu{\^e}s}},
+ langbulgarian = {{b\'ulgaro}{b\'ulgaro}},
+ langcatalan = {{catal\~ao}{catal\~ao}},
+ langcroatian = {{croata}{croata}},
+ langczech = {{checo}{checo}},
+ langdanish = {{dinamarqu\^es}{dinamarqu\^es}},
+ langdutch = {{holand{\^e}s}{holand{\^e}s}},
+ langenglish = {{ingl\^es}{ingl\^es}},
+ langestonian = {{est\'onio}{est\'onio}},% FIXME: check
+ langfinnish = {{finland\^es}{finland\^es}},
+ langfrench = {{franc\^es}{franc\^es}},
+ langgalician = {{galego}{galego}},
+ langgerman = {{alem\~ao}{alem\~ao}},
+ langgreek = {{grego}{grego}},
+% langhungarian = {{}{}}, % FIXME: missing
+ langitalian = {{italiano}{italiano}},
+ langjapanese = {{japon\^es}{japon\^es}},
+ langlatin = {{latim}{latim}},
+% langlatvian = {{}{}},% FIXME: missing
+ langnorwegian = {{noruegu\^es}{noruegu\^es}},
+ langpolish = {{polaco}{polaco}},
+ langportuguese = {{portugu{\^e}s}{portugu{\^e}s}},
+ langrussian = {{russo}{russo}},
+ langslovak = {{eslovaco}{eslovaco}},
+ langslovene = {{esloveno}{esloveno}},
+ langspanish = {{espanhol}{espanhol}},
+ langswedish = {{sueco}{sueco}},
+ fromamerican = {{do ingl\^es}{do ingl\^es}},
+ frombrazilian = {{do portugu{\^e}s}{do portugu{\^e}s}},
+ frombulgarian = {{do b\'ulgaro}{do b\'ulgaro}},
+ fromcatalan = {{do catal\~ao}{do catal\~ao}},
+ fromcroatian = {{do croata}{do croata}},
+ fromczech = {{do checo}{do checo}},
+ fromdanish = {{do dinamarqu\^es}{do dinamarqu\^es}},
+ fromdutch = {{do holand{\^e}s}{do holand{\^e}s}},
+ fromenglish = {{do ingl\^es}{do ingl\^es}},
+ fromestonian = {{do est\'onio}{do est\'onio}},% FIXME: check
+ fromfinnish = {{do finland\^es}{do finland\^es}},
+ fromfrench = {{do franc\^es}{do franc\^es}},
+ fromgalician = {{do galego}{do galego}},
+ fromgerman = {{do alem\~ao}{do alem\~ao}},
+ fromgreek = {{do grego}{do grego}},
+% fromhungarian = {{}{}}, % FIXME: missing
+ fromitalian = {{do italiano}{do italiano}},
+ fromjapanese = {{do japon\^es}{do japon\^es}},
+ fromlatin = {{do latim}{do latim}},
+% fromlatvian = {{}{}},% FIXME: missing
+ fromnorwegian = {{do noruegu\^es}{do noruegu\^es}},
+ frompolish = {{do polaco}{do polaco}},
+ fromportuguese = {{do portugu{\^e}s}{do portugu{\^e}s}},
+ fromrussian = {{do russo}{do russo}},
+ fromslovak = {{do eslovaco}{do eslovaco}},
+ fromslovene = {{do esloveno}{do esloveno}},
+ fromspanish = {{do espanhol}{do espanhol}},
+ fromswedish = {{do sueco}{do sueco}},
+ countryde = {{Alemanha}{DE}},% FIXME: abbrev.: ISO 3166 or translated?
+ countryeu = {{Uni\~ao Europeia}{EU}},% FIXME: abbrev.: ISO 3166 or translated?
+ countryep = {{Uni\~ao Europeia}{EP}},% FIXME: check
+ countryfr = {{Fran\c{c}a}{FR}},% FIXME: abbrev.: ISO 3166 or translated?
+ countryuk = {{Reino Unido}{GB}},% FIXME: abbrev.: ISO 3166 or translated?
+ countryus = {{Estados Unidos da Am\'erica}{US}},% FIXME: abbrev.: ISO 3166 or translated?
+ patent = {{patente}{pat\adddot}},
+ patentde = {{patente alem\~a}{pat\adddot\ alem\~a}},
+ patenteu = {{patente europeia}{pat\adddot\ europeia}},
+ patentfr = {{patente francesa}{pat\adddot\ francesa}},
+ patentuk = {{patente brit\^anica}{pat\adddot\ brit\^anica}},
+ patentus = {{patente americana}{pat\adddot\ americana}},
+ patreq = {{pedido de patente}{ped\adddot\ de pat\adddot}},
+ patreqde = {{pedido de patente alem\~a}{ped\adddot\ de pat\adddot\ alem\~a}},
+ patreqeu = {{pedido de patente europeia}{ped\adddot\ de pat\adddot\ europeia}},
+ patreqfr = {{pedido de patente francesa}{ped\adddot\ de pat\adddot\ francesa}},
+ patrequk = {{pedido de patente brit\^anica}{ped\adddot\ de pat\adddot\ brit\^anica}},
+ patrequs = {{pedido de patente americana}{ped\adddot\ de pat\adddot\ americana}},
+ file = {{arquivo}{arq\adddot}},
+ library = {{biblioteca}{bibl\adddot}},
+ abstract = {{resumo}{res\adddot}},
+ annotation = {{anota\c{c}\~ao}{anot\adddot}},
+ commonera = {{Era Comum}{EC}},
+ beforecommonera = {{antes da Era Comum}{AEC}},
+ annodomini = {{depois de Cristo}{d\adddot C\adddot}},
+ beforechrist = {{antes de Cristo}{a\adddot C\adddot}},
+ circa = {{circa}{ca}},% FIXME: latin: circa. pt: cerca de ...(data)
+ spring = {{primavera}{primavera}},
+ summer = {{ver\~ao}{ver\~ao}},
+ autumn = {{outono}{outono}},
+ winter = {{inverno}{inverno}},
+% springN = {{}{}},% FIXME: missing
+% summerN = {{}{}},% FIXME: missing
+% autumnN = {{}{}},% FIXME: missing
+% winterN = {{}{}},% FIXME: missing
+% springS = {{}{}},% FIXME: missing
+% summerS = {{}{}},% FIXME: missing
+% autumnS = {{}{}},% FIXME: missing
+% winterS = {{}{}},% FIXME: missing
+% Q1 = {{}{}},% FIXME: missing
+% Q2 = {{}{}},% FIXME: missing
+% Q3 = {{}{}},% FIXME: missing
+% Q4 = {{}{}},% FIXME: missing
+% QD1 = {{}{}},% FIXME: missing
+% QD2 = {{}{}},% FIXME: missing
+% QD3 = {{}{}},% FIXME: missing
+% S1 = {{}{}},% FIXME: missing
+% S2 = {{}{}},% FIXME: missing
+ am = {{AM}{AM}},
+ pm = {{PM}{PM}},
+}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/lbx/romanian-ms.lbx b/macros/latex/contrib/biblatex-ms/latex/lbx/romanian-ms.lbx
new file mode 100644
index 0000000000..29d25964a5
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/lbx/romanian-ms.lbx
@@ -0,0 +1,683 @@
+\ProvidesFile{romanian-ms.lbx}
+[\abx@lbxid]
+
+\DeclareRedundantLanguages{romanian}{romanian}
+
+\lbx@ifutfinput
+ {}
+ {\PackageError{biblatex}
+ {Romanian requires UTF-8 support}
+ {The file 'romanian.lbx' requires UTF-8 encoding but you
+ seem\MessageBreak to be using a different encoding.
+ This is a fatal error. I will\MessageBreak abort loading
+ romanian.lbx now.}%
+ \endinput}
+
+\DeclareBibliographyExtras{%
+ \savecommand\newunitpunct
+ \renewcommand*{\newunitpunct}{\addcomma\space}%
+ \savecommand\intitlepunct
+ \renewcommand*{\intitlepunct}{\addspace}%
+ \savecommand\subtitlepunct
+ \renewcommand*{\subtitlepunct}{\addperiod\space}%
+ \DeclareCapitalPunctuation{.:!?}%
+ \protected\def\bibrangedash{%
+ \textendash\penalty\hyphenpenalty}% breakable dash
+ \savecommand\bibdaterangesep
+ \protected\def\bibdaterangesep{%
+ \iftoggle{lbx@ro@dayrange}
+ {\textendash}
+ {\addnbspace\textendash\addnbspace}}%
+ \let\finalandcomma=\empty
+ \let\finalandsemicolon=\empty
+ \protected\def\mkbibmascord#1{%
+ \ifnumgreater{#1}{1}
+ {\autocap{a}~}
+ {}%
+ #1-lea}%
+ \protected\def\mkbibfemord#1{%
+ \ifnumgreater{#1}{1}
+ {\autocap{a}~}
+ {}%
+ #1-a}%
+ \protected\def\mkbibneutord{\mkbibmascord}%
+ \savecommand\mkbibordedition
+ \savecommand\mkbibordseries
+ \def\mkbibordedition{\mkbibfemord}%
+ \def\mkbibordseries{\mkbibfemord}%
+ \protected\def\mkbibdatelong#1#2#3{%
+ \iffieldundef{#3}
+ {}
+ {\thefield{#3}%
+ \iffieldundef{#2}{}{\nobreakspace}}%
+ \iffieldundef{#2}
+ {}
+ {\mkbibmonth{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}}%
+ \iffieldbibstring{#1}
+ {\bibstring{\thefield{#1}}}
+ {\dateeraprintpre{#1}\stripzeros{\thefield{#1}}}}%
+ \protected\def\mkbibdateshort#1#2#3{%
+ \iffieldundef{#3}
+ {}
+ {\thefield{#3}\adddot}%
+ \iffieldundef{#2}
+ {}
+ {\thefield{#2}\adddot}%
+ \iffieldbibstring{#1}
+ {\bibstring{\thefield{#1}}}
+ {\dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}}%
+ \expandafter\protected\expandafter\def\csname mkbibtime24h\endcsname#1#2#3#4{%
+ \iffieldundef{#1}
+ {}
+ {\mktimezeros{\thefield{#1}}%
+ \iffieldundef{#2}{}{\bibtimesep}}%
+ \iffieldundef{#2}
+ {}
+ {\mktimezeros{\thefield{#2}}%
+ \iffieldundef{#3}{}{\bibtimesep}}%
+ \iffieldundef{#3}
+ {}
+ {\mktimezeros{\thefield{#3}}}%
+ \iffieldundef{#4}{}
+ {\bibtimezonesep
+ \mkbibtimezone{\thefield{#4}}}}%
+ \expandafter\protected\expandafter\def\csname mkbibtime12h\endcsname#1#2#3#4{%
+ \stripzeros{\mktimehh{\thefield{#1}}}\bibtimesep
+ \forcezerosmdt{\thefield{#2}}%
+ \iffieldundef{#3}{}
+ {\bibtimesep
+ \forcezerosmdt{\thefield{#3}}}%
+ \space
+ \ifnumless{\thefield{#1}}{12}
+ {\bibstring{am}}
+ {\bibstring{pm}}%
+ \iffieldundef{#4}{}
+ {\space\bibtimezonesep
+ \parentext{\mkbibtimezone{\thefield{#4}}}}}%
+ \protected\def\mkbibyeardivisiondateshort#1#2{%
+ \mkbibyeardivision{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}%
+ \dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}%
+ \protected\def\mkbibyeardivisiondatelong#1#2{%
+ \mkbibyeardivision{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}%
+ \dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}%
+ \savecommand\mkdaterangetrunc@i
+ \savecommand\mkdaterangetruncextra@i
+ \def\mkdaterangetrunc@i{\lbx@ro@mkdaterangetrunc@i}%
+ \def\mkdaterangetruncextra@i{\lbx@ro@mkdaterangetruncextra@i}%
+}
+
+\UndeclareBibliographyExtras{%
+ \restorecommand\bibdaterangesep
+ \restorecommand\newunitpunct
+ \restorecommand\intitlepunct
+ \restorecommand\subtitlepunct
+ \restorecommand\mkbibordedition
+ \restorecommand\mkbibordseries
+ \restorecommand\mkdaterangetrunc@i
+ \restorecommand\mkdaterangetruncextra@i
+}
+
+\DeclareBibliographyStrings{%
+ bibliography = {{Bibliografie}{Bibliografie}},
+ references = {{Referințe}{Referințe}},
+ shorthands = {{Lista Abrevierilor}{Abrevieri}},
+ editor = {{editor}{ed\adddot}},
+ editors = {{editori}{ed\adddot}},
+ compiler = {{redactor}{red\adddot}},
+ compilers = {{redactori}{red\adddot}},
+ redactor = {{redactor}{red\adddot}},
+ redactors = {{redactori}{red\adddot}},
+ reviser = {{revizor}{rev\adddot}},
+ revisers = {{revizori}{rev\adddot}},
+ founder = {{fondator}{fond\adddot}},
+ founders = {{fondatori}{fond\adddot}},
+ continuator = {{continuator}{cont\adddot}},% FIXME: unsure
+ continuators = {{continuatori}{cont\adddot}},% FIXME: unsure
+ collaborator = {{colaborator}{colab\adddot}},% FIXME: unsure
+ collaborators = {{colaboratori}{colab\adddot}},% FIXME: unsure
+ translator = {{traducător}{trad\adddot}},
+ translators = {{traducători}{trad\adddot}},
+ commentator = {{comentator}{coment\adddot}},
+ commentators = {{comentatori}{coment\adddot}},
+ annotator = {{adnotator}{adnot\adddot}},
+ annotators = {{adnotatori}{adnot\adddot}},
+ commentary = {{comentariu}{com\adddot}},
+ annotations = {{note}{note}},
+ introduction = {{introducere}{introd\adddot}},
+ foreword = {{prefață}{pref\adddot}},
+ afterword = {{postfață}{postf\adddot}},
+ editortr = {{editor și traducător}%
+ {ed\adddotspace și trad\adddot}},
+ editorstr = {{editori și traducători}%
+ {ed\adddotspace și trad\adddot}},
+ editorco = {{editor și comentator}%
+ {ed\adddotspace și coment\adddot}},
+ editorsco = {{editori și comentatori}%
+ {ed\adddotspace și coment\adddot}},
+ editoran = {{editor și adnotator}%
+ {ed\adddotspace și adnot\adddot}},
+ editorsan = {{editori și adnotatori}%
+ {ed\adddotspace și adnot\adddot}},
+ editorin = {{editor și introducere}%
+ {ed\adddotspace și introd\adddot}},
+ editorsin = {{editori și introducere}%
+ {ed\adddotspace și introd\adddot}},
+ editorfo = {{editor și prefață}%
+ {ed\adddotspace și pref\adddot}},
+ editorsfo = {{editori și prefață}%
+ {ed\adddotspace și pref\adddot}},
+ editoraf = {{editor și postfață}%
+ {ed\adddotspace și postf\adddot}},
+ editorsaf = {{editori și postfață}%
+ {ed\adddotspace și postf\adddot}},
+ editortrco = {{editor, traducător\ și comentator}%
+ {ed.,\addabbrvspace trad\adddot\ și coment\adddot}},
+ editorstrco = {{editori, traducători\ și comentatori}%
+ {ed.,\addabbrvspace trad\adddot\ și coment\adddot}},
+ editortran = {{editor, traducător\ și adnotator}%
+ {ed.,\addabbrvspace trad\adddot\ și adnot\adddot}},
+ editorstran = {{editori, traducători\ și adnotatori}%
+ {ed.,\addabbrvspace trad\adddot\ și adnot\adddot}},
+ editortrin = {{editor, traducător\ și introducere}%
+ {ed.,\addabbrvspace trad\adddot\ și introd\adddot}},
+ editorstrin = {{editori, traducători\ și introducere}%
+ {ed.,\addabbrvspace trad\adddot\ și introd\adddot}},
+ editortrfo = {{editor, traducător\ și prefață}%
+ {ed.,\addabbrvspace trad\adddot\ și pref\adddot}},
+ editorstrfo = {{editori, traducători\ și prefață}%
+ {ed.,\addabbrvspace trad\adddot\ și pref\adddot}},
+ editortraf = {{editor, traducător\ și postfață}%
+ {ed.,\addabbrvspace trad\adddot\ și postf\adddot}},
+ editorstraf = {{editori, traducători\ și postfață}%
+ {ed.,\addabbrvspace trad\adddot\ și postf\adddot}},
+ editorcoin = {{editor, comentator\ și introducere}%
+ {ed.,\addabbrvspace coment\adddot\ și introd\adddot}},
+ editorscoin = {{editori, comentatori\ și introducere}%
+ {ed.,\addabbrvspace coment\adddot\ și introd\adddot}},
+ editorcofo = {{editor, comentator\ și prefață}%
+ {ed.,\addabbrvspace coment\adddot\ și pref\adddot}},
+ editorscofo = {{editori, comentatori\ și prefață}%
+ {ed.,\addabbrvspace coment\adddot\ și pref\adddot}},
+ editorcoaf = {{editor, comentator\ și postfață}%
+ {ed.,\addabbrvspace coment\adddot\ și postf\adddot}},
+ editorscoaf = {{editori, comentatori\ și prefață}%
+ {ed.,\addabbrvspace coment\adddot\ și pref\adddot}},
+ editoranin = {{editor, adnotator\ și introducere}%
+ {ed.,\addabbrvspace adnot\adddot\ și introd\adddot}},
+ editorsanin = {{editori, adnotatori\ și introducere}%
+ {ed.,\addabbrvspace adnot\adddot\ și introd\adddot}},
+ editoranfo = {{editor, adnotator\ și prefață}%
+ {ed.,\addabbrvspace adnot\adddot\ și pref\adddot}},
+ editorsanfo = {{editori, adnotatori\ și prefață}%
+ {ed.,\addabbrvspace adnot\adddot\ și pref\adddot}},
+ editoranaf = {{editor, adnotator\ și postfață}%
+ {ed.,\addabbrvspace adnot\adddot\ și postf\adddot}},
+ editorsanaf = {{editori, adnotatori\ și postfață}%
+ {ed.,\addabbrvspace adnot\adddot\ și postf\adddot}},
+ editortrcoin = {{editor, traducător, comentator\ și introducere}%
+ {ed.,\addabbrvspace trad., coment\adddot\ și introd\adddot}},
+ editorstrcoin = {{editori, traducători, comentatori\ și introducere}%
+ {ed.,\addabbrvspace trad., coment\adddot\ și introd\adddot}},
+ editortrcofo = {{editor, traducător, comentator\ și prefață}%
+ {ed.,\addabbrvspace trad., coment\adddot\ și pref\adddot}},
+ editorstrcofo = {{editori, traducători, comentatori\ și prefață}%
+ {ed.,\addabbrvspace trad., coment\adddot\ și pref\adddot}},
+ editortrcoaf = {{editor, traducător, comentator\ și postfață}%
+ {ed.,\addabbrvspace trad., coment\adddot\ și postf\adddot}},
+ editorstrcoaf = {{editori, traducători, comentatori\ și postfață}%
+ {ed.,\addabbrvspace trad., coment\adddot\ și postf\adddot}},
+ editortranin = {{editor, traducător, adnotator\ și introducere}%
+ {ed.,\addabbrvspace trad., adnot\adddot\ și introd\adddot}},
+ editorstranin = {{editori, traducători, adnotatori\ și introducere}%
+ {ed.,\addabbrvspace trad., adnot\adddot\ și introd\adddot}},
+ editortranfo = {{editor, traducător, adnotator\ și prefață}%
+ {ed.,\addabbrvspace trad., adnot\adddot\ și pref\adddot}},
+ editorstranfo = {{editori, traducători, adnotatori\ și prefață}%
+ {ed.,\addabbrvspace trad., adnot\adddot\ și pref\adddot}},
+ editortranaf = {{editor, traducător, adnotator\ și postfață}%
+ {ed.,\addabbrvspace trad., adnot\adddot\ și postf\adddot}},
+ editorstranaf = {{editori, traducători, adnotatori\ și postfață}%
+ {ed.,\addabbrvspace trad., adnot\adddot\ și postf\adddot}},
+ translatorco = {{traducător și comentator}%
+ {trad\adddot\ și coment\adddot}},
+ translatorsco = {{traducători și comentatori}%
+ {trad\adddot\ și coment\adddot}},
+ translatoran = {{traducător și adnotator}%
+ {trad\adddot\ și adnot\adddot}},
+ translatorsan = {{traducători și adnotatori}%
+ {trad\adddot\ și adnot\adddot}},
+ translatorin = {{traducere și introducere}%
+ {trad\adddot\ și introd\adddot}},
+ translatorsin = {{traducere și introducere}%
+ {trad\adddot\ și introd\adddot}},
+ translatorfo = {{traducere și prefață}%
+ {trad\adddot\ și pref\adddot}},
+ translatorsfo = {{traducere și prefață}%
+ {trad\adddot\ și pref\adddot}},
+ translatoraf = {{traducere și postfață}%
+ {trad\adddot\ și postf\adddot}},
+ translatorsaf = {{traducere și postfață}%
+ {trad\adddot\ și postf\adddot}},
+ translatorcoin = {{traducere, comentarii\ și introducere}%
+ {trad., coment\adddot\ și introd\adddot}},
+ translatorscoin = {{traducere, comentarii\ și introducere}%
+ {trad., coment\adddot\ și introd\adddot}},
+ translatorcofo = {{traducere, comentarii\ și prefață}%
+ {trad., coment\adddot\ și pref\adddot}},
+ translatorscofo = {{traducere, comentarii\ și prefață}%
+ {trad., coment\adddot\ și pref\adddot}},
+ translatorcoaf = {{traducere, comentarii\ și postfață}%
+ {trad., coment\adddot\ și postf\adddot}},
+ translatorscoaf = {{traducere, comentarii\ și postfață}%
+ {trad., coment\adddot\ și postf\adddot}},
+ translatoranin = {{traducere, note\ și introducere}%
+ {trad., note\ și introd\adddot}},
+ translatorsanin = {{traducere, note\ și introducere}%
+ {trad., note\ și introd\adddot}},
+ translatoranfo = {{traducere, note\ și prefață}%
+ {trad., note\ și pref\adddot}},
+ translatorsanfo = {{traducere, note\ și prefață}%
+ {trad., note\ și pref\adddot}},
+ translatoranaf = {{traducere, note\ și postfață}%
+ {trad., note\ și postf\adddot}},
+ translatorsanaf = {{traducere, note\ și postfață}%
+ {trad., note\ și postf\adddot}},
+ organizer = {{organizator}{org\adddot}},
+ organizers = {{organizatori}{org\adddot}},
+ byorganizer = {{organizat de}{org\adddotspace de}},
+ byauthor = {{de}{de}},
+ byeditor = {{editat de}{ed\adddotspace de}},
+ bycompiler = {{redactat de}{red\adddotspace de}},
+ byredactor = {{redactat de}{red\adddotspace de}},
+ byreviser = {{revizuit de}{rev\adddotspace de}},
+ byreviewer = {{revizuit de}{rev\adddotspace de}},
+ byfounder = {{fondat de}{fond\adddotspace de}},
+ bycontinuator = {{continuat de}{cont\adddotspace de}},
+ bycollaborator = {{în colaborare cu}{în colab\adddotspace cu}},% FIXME: unsure
+ bytranslator = {{traducere \lbx@lfromlang\ de}{trad\adddot\ \lbx@sfromlang\ de}},
+ bycommentator = {{comentarii de}{coment\adddot\ de}},
+ byannotator = {{note de}{note de}},
+ withcommentator = {{cu comentarii de}{cu coment\adddot\ de}},
+ withannotator = {{cu note de}{cu note de}},
+ withintroduction = {{cu o introducere de}{cu o introd\adddot\ de}},
+ withforeword = {{cu o prefață de}{cu o pref\adddot\ de}},
+ withafterword = {{cu o postfață de}{cu o postf\adddot\ de}},
+ byeditortr = {{editare și traducere \lbx@lfromlang\ de}%
+ {ed\adddotspace și trad\adddot\ \lbx@sfromlang\ de}},
+ byeditorco = {{editare și comentarii de}%
+ {ed\adddotspace și coment\adddot\ de}},
+ byeditoran = {{editare și note de}%
+ {ed\adddotspace și note de}},
+ byeditorin = {{editare, cu o introducere, de}%
+ {ed.,\addabbrvspace cu o introd., de}},
+ byeditorfo = {{editare, cu o prefață, de}%
+ {ed.,\addabbrvspace cu o pref., de}},
+ byeditoraf = {{editare, cu o postfață, de}%
+ {ed.,\addabbrvspace cu o postf., de}},
+ byeditortrco = {{editare, traducere \lbx@lfromlang\ și comentarii de}%
+ {ed.,\addabbrvspace trad\adddot\ \lbx@sfromlang\ și coment\adddot\ de}},
+ byeditortran = {{editare, traducere \lbx@lfromlang\ și note de}%
+ {ed.,\addabbrvspace trad\adddot\ \lbx@sfromlang\ și note de}},
+ byeditortrin = {{editare și traducere \lbx@lfromlang, cu o introducere, de}%
+ {ed\adddotspace și trad\adddot\ \lbx@sfromlang, cu o introd., de}},
+ byeditortrfo = {{editare și traducere \lbx@lfromlang, cu o prefață, de}%
+ {ed\adddotspace și trad\adddot\ \lbx@sfromlang, cu o pref., de}},
+ byeditortraf = {{editare și traducere \lbx@lfromlang, cu o postfață, de}%
+ {ed\adddotspace și trans\adddot\ \lbx@sfromlang, cu o postf., de}},
+ byeditorcoin = {{editare și comentarii, cu o introducere, de}%
+ {ed\adddotspace și coment., cu o introd., de}},
+ byeditorcofo = {{editare și comentarii, cu o prefață, de}%
+ {ed\adddotspace și coment., cu o pref., de}},
+ byeditorcoaf = {{editare și comentarii, cu o postfață, de}%
+ {ed\adddotspace și coment., cu o postf., de}},
+ byeditoranin = {{editare și note, cu o introducere, de}%
+ {ed\adddotspace și note, cu o introd., de}},
+ byeditoranfo = {{editare și note, cu o prefață, de}%
+ {ed\adddotspace și note, cu o pref., de}},
+ byeditoranaf = {{editare și note, cu o postfață, de}%
+ {ed\adddotspace și note, cu o postf., de}},
+ byeditortrcoin = {{editare, traducere \lbx@lfromlang\ și comentarii, cu o introducere, de}%
+ {ed.,\addabbrvspace trad\adddot\ \lbx@sfromlang\ și coment., cu o introd., de}},
+ byeditortrcofo = {{editare, traducere \lbx@lfromlang\ și comentarii, cu o prefață, de}%
+ {ed.,\addabbrvspace trad\adddot\ \lbx@sfromlang\ și coment., cu o pref., de}},
+ byeditortrcoaf = {{editare, traducere \lbx@lfromlang\ și comentarii, cu o postfață, de}%
+ {ed.,\addabbrvspace trad\adddot\ \lbx@sfromlang\ și coment., cu o postf., de}},
+ byeditortranin = {{editare, traducere \lbx@lfromlang\ și note, cu o introducere, de}%
+ {ed.,\addabbrvspace trad\adddot\ \lbx@sfromlang\ și note, cu o introd., de}},
+ byeditortranfo = {{editare, traducere \lbx@lfromlang\ și note, cu o prefață, de}%
+ {ed.,\addabbrvspace trad\adddot\ \lbx@sfromlang\ și note, cu o pref., de}},
+ byeditortranaf = {{editare, traducere \lbx@lfromlang\ și note, cu o postfață, de}%
+ {ed.,\addabbrvspace trad\adddot\ \lbx@sfromlang\ și note, cu o postf., de}},
+ bytranslatorco = {{traducere \lbx@lfromlang\ și comentarii de}%
+ {trad\adddot\ \lbx@sfromlang\ și coment\adddot\ de}},
+ bytranslatoran = {{traducere \lbx@lfromlang\ și note de}%
+ {trad\adddot\ \lbx@sfromlang\ și note de}},
+ bytranslatorin = {{traducere \lbx@lfromlang, cu o introducere, de}%
+ {trad\adddot\ \lbx@sfromlang, cu o introd., de}},
+ bytranslatorfo = {{traducere \lbx@lfromlang, cu o prefață, de}%
+ {trad\adddot\ \lbx@sfromlang, cu o pref., de}},
+ bytranslatoraf = {{traducere \lbx@lfromlang, cu o postfață, de}%
+ {trad\adddot\ \lbx@sfromlang, cu o postf., de}},
+ bytranslatorcoin = {{traducere \lbx@lfromlang\ și comentarii, cu o introducere, de}%
+ {trad\adddot\ \lbx@sfromlang\ și coment., cu o introd., de}},
+ bytranslatorcofo = {{traducere \lbx@lfromlang\ și comentarii, cu o prefață, de}%
+ {trad\adddot\ \lbx@sfromlang\ și coment., cu o pref., de}},
+ bytranslatorcoaf = {{traducere \lbx@lfromlang\ și comentarii, cu o postfață, de}%
+ {trad\adddot\ \lbx@sfromlang\ și coment., cu o postf., de}},
+ bytranslatoranin = {{traducere \lbx@lfromlang\ și note, cu o introducere, de}%
+ {trad\adddot\ \lbx@sfromlang\ și note, cu o introd., de}},
+ bytranslatoranfo = {{traducere \lbx@lfromlang\ și note, cu o prefață, de}%
+ {trad\adddot\ \lbx@sfromlang\ și note, cu o pref., de}},
+ bytranslatoranaf = {{traducere \lbx@lfromlang\ și note, cu o postfață, de}%
+ {trad\adddot\ \lbx@sfromlang\ și note, cu o postf., de}},
+ and = {{și}{și}},
+ andothers = {{et\addabbrvspace al\adddot}{et\addabbrvspace al\adddot}},
+ andmore = {{et\addabbrvspace al\adddot}{et\addabbrvspace al\adddot}},
+ volume = {{volum}{vol\adddot}},
+ volumes = {{volume}{vol\adddot}},
+ involumes = {{în}{în}},
+ jourvol = {{volumul}{vol\adddot}},
+ jourser = {{serii}{ser\adddot}},
+ book = {{carte}{carte}},
+ part = {{partea}{partea}},
+ issue = {{număr}{nr\adddot}},
+ newseries = {{serie nouă}{ser\adddotspace nouă}},
+ oldseries = {{serie anterioară}{ser\adddotspace anterioară}},
+ edition = {{ediție}{ed\adddot}},
+ reprint = {{republicat}{repub\adddot}},
+ reprintof = {{republicat în}{repub\adddotspace în}},
+ reprintas = {{republicat ca}{repub\adddotspace ca}},
+ reprintfrom = {{republicat din}{repub\adddotspace din}},
+ reviewof = {{revizuit în}{rev\adddotspace în}},
+ translationof = {{traducere în}{trad\adddotspace în}},
+ translationas = {{traducere ca}{trad\adddotspace ca}},
+ translationfrom = {{traducere din}{trad\adddotspace din}},
+ origpubas = {{publicat original ca}{publ\adddotspace orig\adddotspace ca}},
+ origpubin = {{publicat original în}{pub\adddotspace orig\adddotspace în}},
+ astitle = {{ca}{ca}},
+ bypublisher = {{de}{de}},
+ nodate = {{fără dată}{f\adddot d\adddot}},
+ page = {{pagina}{p\adddot}},
+ pages = {{paginile}{pp\adddot}},
+ column = {{coloana}{col\adddot}},
+ columns = {{coloanele}{col\adddot}},
+ line = {{linia}{l\adddot}},
+ lines = {{liniile}{ll\adddot}},
+ verse = {{versul}{v\adddot}},
+ verses = {{versuri}{vv\adddot}},
+ section = {{secțiunea}{\S}},
+ sections = {{secțiuni}{\S\S}},
+ paragraph = {{paragraf}{par\adddot}},
+ paragraphs = {{paragrafe}{par\adddot}},
+ pagetotal = {{pagină}{p\adddot}},
+ pagetotals = {{pagini}{pp\adddot}},
+ columntotal = {{coloană}{col\adddot}},
+ columntotals = {{coloane}{col\adddot}},
+ linetotal = {{linia}{l\adddot}},
+ linetotals = {{linii}{ll\adddot}},
+ versetotal = {{vers}{v\adddot}},
+ versetotals = {{versuri}{vv\adddot}},
+ sectiontotal = {{secțiune}{\S}},
+ sectiontotals = {{secțiuni}{\S\S}},
+ paragraphtotal = {{paragrafe}{par\adddot}},
+ paragraphtotals = {{paragrafe}{par\adddot}},
+ in = {{în}{în}},
+ inseries = {{în}{în}},
+ ofseries = {{din}{din}},
+ number = {{număr}{nr\adddot}},
+ chapter = {{capitol}{cap\adddot}},
+ bathesis = {{Teză de licență}{Teză de lic\adddot}},
+ mathesis = {{Teză de dizertație}{Teză de dizert\adddot}},
+ phdthesis = {{Teză de doctorat}{Teză de doct\adddot}},
+ candthesis = {{Teză de abilitare}{Teză de abilit\adddot}}, % not sure
+ resreport = {{raport de cercetare}{rap\adddotspace de cercet\adddot}},
+ techreport = {{raport tehnic}{rap\adddotspace teh\adddot}},
+ software = {{computer software}{comp\adddotspace software}},
+ datacd = {{CD-ROM}{CD-ROM}},
+ audiocd = {{CD audio}{CD audio}},
+ version = {{versiunea}{versiunea}},
+ url = {{adresa}{adresa}},
+ urlfrom = {{disponibil la}{disponibil la}},
+ urlseen = {{accesat în}{accesat în}},
+ inpreparation = {{în pregătire}{în pregătire}},
+ submitted = {{depus}{depus}},
+ forthcoming = {{în curs de apariție}{în curs de apariție}},
+ inpress = {{bun de tipar}{bun de tipar}},
+ prepublished = {{prepublicat}{prepublicat}},
+ citedas = {{în continuare citat ca}{în cont\adddotspace cit\adddotspace ca}},
+ thiscite = {{în special}{în spec\adddot}},
+ seenote = {{vezi nota}{vezi n\adddot}},
+ quotedin = {{citat în}{cit\adddotspace în}},
+ idem = {{idem}{idem}},
+ idemsm = {{idem}{idem}},
+ idemsf = {{eadem}{eadem}},
+ idemsn = {{idem}{idem}},
+ idempm = {{eidem}{eidem}},
+ idempf = {{eaedem}{eaedem}},
+ idempn = {{eadem}{eadem}},
+ idempp = {{eidem}{eidem}},
+ ibidem = {{ibidem}{ibid\adddot}},
+ opcit = {{op\adddotspace cit\adddot}{op\adddotspace cit\adddot}},
+ loccit = {{loc\adddotspace cit\adddot}{loc\adddotspace cit\adddot}},
+ confer = {{cf\adddot}{cf\adddot}},
+ sequens = {{sq\adddot}{sq\adddot}},
+ sequentes = {{sqq\adddot}{sqq\adddot}},
+ passim = {{passim}{pass\adddot}},
+ see = {{vezi}{vezi}},
+ seealso = {{vezi de asemenea}{vezi de asemenea}},
+ backrefpage = {{citat în pagina}{cit\adddotspace în p\adddot}},
+ backrefpages = {{citat în paginile}{cit\adddotspace în pp\adddot}},
+ january = {{Ianuarie}{Ian\adddot}},
+ february = {{Februarie}{Feb\adddot}},
+ march = {{Martie}{Mar\adddot}},
+ april = {{Aprilie}{Apr\adddot}},
+ may = {{Mai}{Mai}},
+ june = {{Iunie}{Iun\adddot}},
+ july = {{Iulie}{Iul\adddot}},
+ august = {{August}{Aug\adddot}},
+ september = {{Septembrie}{Sept\adddot}},
+ october = {{Octombrie}{Oct\adddot}},
+ november = {{Noiembrie}{Nov\adddot}},
+ december = {{Decembrie}{Dec\adddot}},
+ langamerican = {{Engleză}{Engleză}},
+ langbasque = {{Bască}{Bască}},
+ langbrazilian = {{Braziliană}{Braziliană}},
+ langbulgarian = {{Bulgară}{Bulgară}},
+ langcatalan = {{Catalană}{Catalană}},
+ langcroatian = {{Croată}{Croată}},
+ langczech = {{Cehă}{Cehă}},
+ langdanish = {{Daneză}{Daneză}},
+ langdutch = {{Olandeză}{Olandeză}},
+ langenglish = {{Engleză}{Engleză}},
+ langestonian = {{Estonă}{Estonă}},
+ langfinnish = {{Finlandeză}{Finlandeză}},
+ langfrench = {{Franceză}{Franceză}},
+ langgalician = {{Galeză}{Galeză}},
+ langgerman = {{Germană}{Germană}},
+ langgreek = {{Greacă}{Greacă}},
+ langhungarian = {{Maghiară}{Maghiară}},
+ langitalian = {{Italiană}{Italiană}},
+ langjapanese = {{Japoneză}{Japoneză}},
+ langlatin = {{Latină}{Latină}},
+ langlatvian = {{Letonă}{Letonă}},
+ langlithuanian = {{Lituaniană}{Lituaniană}},
+ langnorwegian = {{Norvegiană}{Norvegiană}},
+ langpolish = {{Polonă}{Polonă}},
+ langportuguese = {{Portugheză}{Portugheză}},
+ langamerican = {{Engleză}{Engleză}},
+ langromanian = {{Română}{Română}},
+ langrussian = {{Rusă}{Rusă}},
+ langserbian = {{Sârbă}{Sârbă}},
+ langslovak = {{Slovacă}{Slovacă}},
+ langslovene = {{Slovenă}{Slovenă}},
+ langspanish = {{Spaniolă}{Spaniolă}},
+ langswedish = {{Suedeză}{Suedeză}},
+ langturkish = {{Turcă}{Turcă}},
+ langukrainian = {{Ucraineană}{Ucraineană}},
+ fromamerican = {{din engleză}{din engleză}},
+ frombasque = {{din bască}{din bască}},
+ frombrazilian = {{din braziliană}{din braziliană}},
+ frombulgarian = {{din bulgară}{din bulgară}},
+ fromcatalan = {{din catalană}{din catalană}},
+ fromcroatian = {{din Croatian}{din Croatian}},
+ fromczech = {{din cehă}{din cehă}},
+ fromdanish = {{din daneză}{din daneză}},
+ fromdutch = {{din olandeză}{din olandeză}},
+ fromenglish = {{din engleză}{din engleză}},
+ fromestonian = {{din estonă}{din estonă}},
+ fromfinnish = {{din finlandeză}{din finlandeză}},
+ fromfrench = {{din franceză}{din franceză}},
+ fromgalician = {{din galiciană}{din galiciană}},
+ fromgerman = {{din germană}{din germană}},
+ fromgreek = {{din greacă}{din greacă}},
+ fromhungarian = {{din maghiară}{din maghiară}},
+ fromitalian = {{din italiană}{din italiană}},
+ fromjapanese = {{din japoneză}{din japoneză}},
+ fromlatin = {{din latină}{din latină}},
+ fromlatvian = {{din letonă}{din letonă}},
+ fromlithuanian = {{din lituaniană}{din lituaniană}},
+ fromnorwegian = {{din norvegiană}{din norvegiană}},
+ frompolish = {{din poloneză}{din poloneză}},
+ fromportuguese = {{din portugheză}{din portugheză}},
+ fromrussian = {{din rusă}{din rusă}},
+ fromserbian = {{din sârbă}{din sârbă}},
+ fromslovak = {{din slovacă}{din slovacă}},
+ fromslovene = {{din slovenă}{din slovenă}},
+ fromspanish = {{din spaniolă}{din slovenă}},
+ fromswedish = {{din suedeză}{fdin suedeză}},
+ fromturkish = {{din turcă}{din turcă}},
+ fromukrainian = {{din ucraineană}{din ucraineană}},
+ countryde = {{Germania}{DE}},
+ countryeu = {{Uniunea Europeană}{UE}},
+ countryep = {{Uniunea Europeană}{EP}},
+ countryfr = {{Franța}{FR}},
+ countryuk = {{Marea Britanie}{GB}},
+ countryus = {{Statele Unite ale Americii}{SUA}},
+ patent = {{brevet}{brev\adddot}},
+ patentde = {{brevet german}{brev\adddotspace german}},
+ patenteu = {{brevet european}{brev\adddotspace european}},
+ patentfr = {{brevet francez}{brev\adddotspace francez}},
+ patentuk = {{brevet englezesc}{brev\adddotspace englezesc}},
+ patentus = {{brevet american}{brev\adddotspace american}},
+ patreq = {{cerere brevet}{cerere brev\adddot}},
+ patreqde = {{cerere brevet german}{cerere brev\adddot\ germ\adddot}},
+ patreqeu = {{cerere brevet european}{cerere brev\adddot\ europ\adddot}},
+ patreqfr = {{cerere brevet francez}{cerere brev\adddot\ franc\adddot}},
+ patrequk = {{cerere brevet englezesc}{cerere brev\adddot\ engl\adddot}},
+ patrequs = {{cerere brevet american}{cerere brev\adddot\ americ\adddot}},
+ file = {{filă}{filă}},
+ library = {{bibliotecă}{bibliotecă}},
+ abstract = {{rezumat}{rezumat}},
+ annotation = {{note}{note}},
+ commonera = {{era noastră}{e\adddot n\adddot}},
+ beforecommonera = {{înaintea erei noastre}{î\adddot e\adddot n\adddot}},
+ annodomini = {{Anul Domnului}{AD}},
+ beforechrist = {{înainte de Hristos}{î\adddot Hr\adddot}},
+ circa = {{circa}{cca\adddot}},
+ spring = {{Primăvara}{Primăvara}},
+ summer = {{Vara}{Vara}},
+ autumn = {{Toamna}{Toamna}},
+ winter = {{Iarna}{Iarna}},
+ springN = {{Primăvara (Emisfera Nordică)}{Primăvara (Emisf\adddotspace Nordică)}},
+ summerN = {{Vara (Emisfera Nordică)}{Vara (Emisf\adddotspace Nordică)}},
+ autumnN = {{Toamna (Emisfera Nordică)}{Toamna (Emisf\adddotspace Nordică)}},
+ winterN = {{Iarna (Emisfera Nordică)}{Iarna (Emisf\adddotspace Nordică)}},
+ springS = {{Primăvara (Emisfera Sudică)}{Primăvara (Emisf\adddotspace Sudică)}},
+ summerS = {{Vara (Emisfera Sudică)}{Vara (Emisf\adddotspace Sudică)}},
+ autumnS = {{Toamna (Emisfera Sudică)}{Toamna (Emisf\adddotspace Sudică)}},
+ winterS = {{Iarna (Emisfera Sudică)}{Iarna (Emisf\adddotspace Sudică)}},
+ Q1 = {{Trimestrul~1}{Trim\adddot~1}},
+ Q2 = {{Trimestrul~2}{Trim\adddot~2}},
+ Q3 = {{Trimestrul~3}{Trim\adddot~3}},
+ Q4 = {{Trimestrul~4}{Trim\adddot~4}},
+% QD1 = {{}{}},% FIXME: missing
+% QD2 = {{}{}},% FIXME: missing
+% QD3 = {{}{}},% FIXME: missing
+ S1 = {{Semestrul~1}{Sem\adddot~1}},
+ S2 = {{Semestrul~2}{Sem\adddot~2}},
+ am = {{am}{a\adddot m\adddot}},
+ pm = {{pm}{p\adddot m\adddot}},
+}
+
+\global\blx@etb@inittoggle{lbx@ro@dayrange}
+
+\protected\gdef\lbx@ro@mkdaterangetrunc@i#1#2{%
+ \begingroup
+ \blx@metadateinfo{#2}%
+ \iffieldundef{#2year}
+ {\blx@nounit}
+ {\printtext[{#2date}]{%
+ \datecircaprint
+ % Such a yeardivision component can only come from an ISO8601 yeardivision which replaces
+ % a normal month so if it exists, we know that a normal date print is ruled out
+ \iffieldundef{#2yeardivision}
+ {\ifdateyearsequal{#2}{#2end}
+ {\iffieldsequal{#2month}{#2endmonth}
+ {\toggletrue{lbx@ro@dayrange}%
+ \csuse{mkbibdate#1}{}{}{#2day}}
+ {\csuse{mkbibdate#1}{}{#2month}{#2day}}}
+ {\csuse{mkbibdate#1}{#2year}{#2month}{#2day}%
+ \iffieldsequal{#2dateera}{#2enddateera}{}
+ {\dateeraprint{#2year}}}}
+ {\ifdateyearsequal{#2}{#2end}
+ {\csuse{mkbibyeardivisiondate#1}{}{#2yeardivision}}
+ {\csuse{mkbibyeardivisiondate#1}{#2year}{#2yeardivision}%
+ \iffieldsequal{#2dateera}{#2enddateera}{}
+ {\dateeraprint{#2year}}}}%
+ \dateuncertainprint
+ \iffieldundef{#2endyear}
+ {}
+ {\iffieldequalstr{#2endyear}{}
+ {\mbox{\bibdaterangesep}}
+ {\bibdaterangesep
+ \enddatecircaprint
+ \iffieldundef{#2endyeardivision}
+ {\csuse{mkbibdate#1}{#2endyear}{#2endmonth}{#2endday}}
+ {\csuse{mkbibyeardivisiondate#1}{#2endyear}{#2endyeardivision}}%
+ \enddateuncertainprint
+ \dateeraprint{#2endyear}}}}}%
+ \endgroup}
+
+\protected\gdef\lbx@ro@mkdaterangetruncextra@i#1#2{%
+ \begingroup
+ \blx@metadateinfo{#2}%
+ \iffieldundef{#2year}
+ {\blx@nounit}
+ {\printtext[{#2date}]{%
+ \datecircaprint
+ % Such a yeardivision component can only come from an ISO8601 yeardivision which replaces
+ % a normal month so if it exists, we know that a normal date print is ruled out
+ \iffieldundef{#2yeardivision}
+ {\ifdateyearsequal{#2}{#2end}
+ {\iffieldsequal{#2month}{#2endmonth}
+ {\toggletrue{lbx@ro@dayrange}%
+ \csuse{mkbibdate#1}{}{}{#2day}}
+ {\csuse{mkbibdate#1}{}{#2month}{#2day}}}
+ {\csuse{mkbibdate#1}{#2year}{#2month}{#2day}%
+ \iffieldsequal{#2dateera}{#2enddateera}{}
+ {\dateeraprint{#2year}}}}
+ {\ifdateyearsequal{#2}{#2end}
+ {\csuse{mkbibyeardivisiondate#1}{}{#2yeardivision}}
+ {\csuse{mkbibyeardivisiondate#1}{#2year}{#2yeardivision}%
+ \iffieldsequal{#2dateera}{#2enddateera}{}
+ {\dateeraprint{#2year}}}}%
+ \dateuncertainprint
+ \iffieldundef{#2endyear}
+ {\printfield{extradate}}
+ {\iffieldequalstr{#2endyear}{}
+ {\printfield{extradate}%
+ \mbox{\bibdaterangesep}}
+ {\bibdaterangesep
+ \enddatecircaprint
+ \iffieldundef{#2endyeardivision}
+ {\csuse{mkbibdate#1}{#2endyear}{#2endmonth}{#2endday}}
+ {\csuse{mkbibyeardivisiondate#1}{#2endyear}{#2endyeardivision}}}%
+ \printfield{extradate}%
+ \enddateuncertainprint
+ \dateeraprint{#2endyear}}}}%
+ \endgroup}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/lbx/russian-ms.lbx b/macros/latex/contrib/biblatex-ms/latex/lbx/russian-ms.lbx
new file mode 100644
index 0000000000..d02da3d4c1
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/lbx/russian-ms.lbx
@@ -0,0 +1,623 @@
+\ProvidesFile{russian-ms.lbx}
+[\abx@lbxid]
+
+\DeclareRedundantLanguages{russian}{russian}
+
+% This file requires UTF-8 support!
+
+\lbx@ifutfinput
+ {}
+ {\PackageError{biblatex}
+ {Russian requires UTF-8 support}
+ {The file 'russian.lbx' requires UTF-8 encoding but you
+ seem\MessageBreak to be using a different encoding.
+ This is a fatal error. I will\MessageBreak abort loading
+ russian.lbx now.}%
+ \endinput}
+
+\NewBibliographyString{% Used only Russian for month checks
+ datejanuary,
+ datefebruary,
+ datemarch,
+ dateapril,
+ datemay,
+ datejune,
+ datejuly,
+ dateaugust,
+ dateseptember,
+ dateoctober,
+ datenovember,
+ datedecember%
+}
+
+\DeclareBibliographyExtras{%
+ \protected\def\bibrangedash{%
+ \textemdash\penalty\hyphenpenalty}% breakable dash
+ \let\finalandcomma=\empty
+ \let\finalandsemicolon=\empty
+ \protected\def\mkbibordinal#1{\mkbibmascord}%
+ \protected\def\mkbibmascord#1{#1-й}%
+ \protected\def\mkbibfemord#1{#1-я}%
+ \protected\def\mkbibneutord#1{#1-е}%
+ \protected\def\mkbibdatelong#1#2#3{%
+ \iffieldundef{#3}
+ {}
+ {\stripzeros{\thefield{#3}}%
+ \iffieldundef{#2}{}{\nobreakspace}}%
+ \iffieldundef{#2}
+ {}
+ {\iffieldundef{#3}
+ {\mkbibmonth{\thefield{#2}}}
+ {\lbx@ru@mkbibdatemonth{\thefield{#2}}}%
+ \iffieldundef{#1}{}{\space}}%
+ \iffieldbibstring{#1}
+ {\bibstring{\thefield{#1}}}
+ {\dateeraprintpre{#1}\stripzeros{\thefield{#1}}}}%
+ \protected\def\mkbibdateshort#1#2#3{%
+ \iffieldundef{#3}
+ {}
+ {\mkdayzeros{\thefield{#3}}%
+ \iffieldundef{#2}{}{\adddot}}%
+ \iffieldundef{#2}
+ {}
+ {\mkmonthzeros{\thefield{#2}}%
+ \iffieldundef{#1}{}{\adddot}}%
+ \iffieldbibstring{#1}
+ {\bibstring{\thefield{#1}}}
+ {\dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}}%
+ \savecommand\mkbibordedition
+ \savecommand\mkbibordseries
+ \def\mkbibordedition{\mkbibneutord}%
+ \def\mkbibordseries{\mkbibfemord}%
+ \expandafter\protected\expandafter\def\csname mkbibtime24h\endcsname#1#2#3#4{%
+ \iffieldundef{#1}
+ {}
+ {\mktimezeros{\thefield{#1}}%
+ \iffieldundef{#2}{}{\bibtimesep}}%
+ \iffieldundef{#2}
+ {}
+ {\mktimezeros{\thefield{#2}}%
+ \iffieldundef{#3}{}{\bibtimesep}}%
+ \iffieldundef{#3}
+ {}
+ {\mktimezeros{\thefield{#3}}}%
+ \iffieldundef{#4}{}
+ {\bibtimezonesep
+ \mkbibtimezone{\thefield{#4}}}}%
+ \expandafter\protected\expandafter\def\csname mkbibtime12h\endcsname#1#2#3#4{%
+ \stripzeros{\mktimehh{\thefield{#1}}}\bibtimesep
+ \forcezerosmdt{\thefield{#2}}%
+ \iffieldundef{#3}{}
+ {\bibtimesep
+ \forcezerosmdt{\thefield{#3}}}%
+ \space
+ \ifnumless{\thefield{#1}}{12}
+ {\bibstring{am}}
+ {\bibstring{pm}}%
+ \iffieldundef{#4}{}
+ {\space\bibtimezonesep
+ \parentext{\mkbibtimezone{\thefield{#4}}}}}%
+ \protected\def\mkbibyeardivisiondateshort#1#2{%
+ \mkbibyeardivision{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}%
+ \dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}%
+ \protected\def\mkbibyeardivisiondatelong#1#2{%
+ \mkbibyeardivision{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}%
+ \dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}%
+}
+
+\UndeclareBibliographyExtras{%
+ \restorecommand\mkbibordedition
+ \restorecommand\mkbibordseries
+}
+
+\DeclareBibliographyStrings{%
+ bibliography = {{Список литературы}{Список литературы}},%book-like (chapter)
+ references = {{Список литературы}{Список литературы}},%article-like (section)
+ shorthands = {{Список сокращений}{Сокращения}},
+ editor = {{редактор}{ред\adddot}},
+ editors = {{редакторы}{ред\adddot}},
+ compiler = {{составитель}{сост\adddot}},
+ compilers = {{составители}{сост\adddot}},
+ redactor = {{редактор}{ред\adddot}},% FIXME: unsure
+ redactors = {{редакторы}{ред\adddot}},% FIXME: unsure
+ reviser = {{ревизионный корректор}{ревиз\adddotspace кор\adddot}},
+ revisers = {{ревизионные корректоры}{ревиз\adddotspace кор\adddot}},
+ founder = {{основатель}{осн\adddot}},
+ founders = {{основатели}{осн\adddot}},
+ continuator = {{продолжатель}{прод\adddot}},% FIXME: unsure
+ continuators = {{продолжатели}{прод\adddot}},% FIXME: unsure
+ collaborator = {{участник}{участ\adddot}},% FIXME: unsure
+ collaborators = {{участники}{участ\adddot}},% FIXME: unsure
+ translator = {{переводчик}{пер\adddot}},
+ translators = {{переводчики}{пер\adddot}},
+ commentator = {{комментатор}{коммент\adddot}},
+ commentators = {{комментаторы}{коммент\adddot}},
+ annotator = {{примечания}{примеч\adddot}},
+ annotators = {{примечания}{примеч\adddot}},
+ commentary = {{комментарий}{коммент\adddot}},
+ annotations = {{примечания}{примеч\adddot}},
+ introduction = {{вступительная статья}{вступ\adddotspace ст\adddot}},
+ foreword = {{предисловие}{предисл\adddot}},
+ afterword = {{послесловие}{послесл\adddot}},
+ editortr = {{редактор и переводчик}%
+ {ред\adddotspace и пер\adddot}},
+ editorstr = {{редакторы и переводчики}%
+ {ред\adddotspace и пер\adddot}},
+ editorco = {{редактор и комментатор}%
+ {ред\adddotspace и коммент\adddot}},
+ editorsco = {{редакторы и комментаторы}%
+ {ред\adddotspace и коммент\adddot}},
+ editoran = {{редактор и составитель примечаний}%
+ {ред\adddotspace и сост\adddotspace примеч\adddot}},
+ editorsan = {{редакторы и составители примечаний}%
+ {ред\adddotspace и сост\adddotspace примеч\adddot}},
+ editorin = {{редактор и автор вступительной статьи}%
+ {ред\adddotspace и авт\adddotspace вступ\adddotspace ст\adddot}},
+ editorsin = {{редакторы и авторы вступительной статьи}%
+ {ред\adddotspace и авт\adddotspace вступ\adddotspace ст\adddot}},
+ editorfo = {{редактор и автор предисловия}%
+ {ред\adddotspace и авт\adddotspace предисл\adddot}},
+ editorsfo = {{редакторы и авторы предисловия}%
+ {ред\adddotspace и авт\adddotspace предисл\adddot}},
+ editoraf = {{редактор и автор послесловия}%
+ {ред\adddotspace и авт\adddotspace послесл\adddot}},
+ editorsaf = {{редакторы и авторы послесловия}%
+ {ред\adddotspace и авт\adddotspace послесл\adddot}},
+ editortrco = {{редактор, переводчик и автор комментариев}%
+ {ред.,\addabbrvspace пер\adddotspace и авт\adddotspace коммент\adddot}},
+ editorstrco = {{редакторы, переводчики и авторы комментариев}%
+ {ред.,\addabbrvspace пер\adddotspace и авт\adddotspace коммент\adddot}},
+ editortran = {{редактор, переводчик и составитель примечаний}%
+ {ред.,\addabbrvspace пер\adddotspace и сост\adddotspace примеч\adddot}},
+ editorstran = {{редакторы, переводчики и составители примечаний}%
+ {ред.,\addabbrvspace пер\adddotspace и сост\adddotspace примеч\adddot}},
+ editortrin = {{редактор, переводчик и автор вступительной статьи}%
+ {ред.,\addabbrvspace пер\adddotspace и авт\adddotspace вступ\adddotspace ст\adddot}},
+ editorstrin = {{редакторы, переводчики и авторы вступительной статьи}%
+ {ред.,\addabbrvspace пер\adddotspace и авт\adddotspace вступ\adddotspace ст\adddot}},
+ editortrfo = {{редактор, переводчик и автор предисловия}%
+ {ред.,\addabbrvspace пер\adddotspace и авт\adddotspace предисл\adddot}},
+ editorstrfo = {{редакторы, переводчики и авторы предисловия}%
+ {ред.,\addabbrvspace пер\adddotspace и авт\adddotspace предисл\adddot}},
+ editortraf = {{редактор, переводчик и автор послесловия}%
+ {ред.,\addabbrvspace пер\adddotspace и авт\adddotspace послесловия\adddot}},
+ editorstraf = {{редакторы, переводчики и авторы послесловия}%
+ {ред.,\addabbrvspace пер\adddotspace и авт\adddotspace послесл\adddot}},
+ editorcoin = {{редактор, автор комментариев и вступительной статьи}%
+ {ред.,\addabbrvspace авт\adddotspace коммент\adddotspace и вступ\adddotspace ст\adddot}},
+ editorscoin = {{редакторы, авторы комментариев и вступительной статьи}%
+ {ред.,\addabbrvspace авт\adddotspace коммент\adddotspace и вступ\adddotspace ст\adddot}},
+ editorcofo = {{редактор, автор комментариев и предисловия}%
+ {ред.,\addabbrvspace авт\adddotspace коммент\adddotspace и предисл\adddot}},
+ editorscofo = {{редакторы, авторы комментариев и предисловия}%
+ {ред.,\addabbrvspace авт\adddotspace коммент\adddotspace и предисл\adddot}},
+ editorcoaf = {{редактор, автор комментариев и послесловия}%
+ {ред.,\addabbrvspace авт\adddotspace коммент\adddotspace и послесл\adddot}},
+ editorscoaf = {{редакторы, авторы комментариев и послесловия}%
+ {ред.,\addabbrvspace авт\adddotspace коммент\adddotspace и послесл\adddot}},
+ editoranin = {{редактор, составитель примечаний и автор вступительной статьи}%
+ {ред.,\addabbrvspace сост\adddotspace примеч\adddotspace и авт\adddotspace вступ\adddotspace ст\adddot}},
+ editorsanin = {{редакторы, составители примечаний и авторы вступительной статьи}%
+ {ред.,\addabbrvspace сост\adddotspace примеч\adddotspace и авт\adddotspace вступ\adddotspace ст\adddot}},
+ editoranfo = {{редактор, составитель примечаний и автор предисловия}%
+ {ред.,\addabbrvspace сост\adddotspace примеч\adddotspace и авт\adddotspace предисл\adddot}},
+ editorsanfo = {{редакторы, составители примечаний и авторы предисловия}%
+ {ред.,\addabbrvspace сост\adddotspace примеч\adddotspace и авт\adddotspace предисл\adddot}},
+ editoranaf = {{редактор, составитель примечаний и автор послесловия}%
+ {ред.,\addabbrvspace сост\adddotspace примеч\adddotspace и авт\adddotspace послесл\adddot}},
+ editorsanaf = {{редакторы, составители примечаний и авторы послесловия}%
+ {ред.,\addabbrvspace сост\adddotspace примеч\adddotspace и авт\adddotspace послесл\adddot}},
+ editortrcoin = {{редактор, переводчик, автор комментариев и вступительной статьи}%
+ {ред.,\addabbrvspace пер.,\addabbrvspace авт\adddotspace коммент\adddotspace и вступ\adddotspace ст\adddot}},
+ editorstrcoin = {{редакторы, переводчики, авторы комментариев и вступительной статьи}%
+ {ред.,\addabbrvspace пер.,\addabbrvspace авт\adddotspace коммент\adddotspace и вступ\adddotspace ст\adddot}},
+ editortrcofo = {{редактор, переводчик, автор комментариев и предисловия}%
+ {ред.,\addabbrvspace пер.,\addabbrvspace авт\adddotspace коммент\adddotspace и предисл\adddot}},
+ editorstrcofo = {{редакторы, переводчики, авторы комментариев и предисловия}%
+ {ред.,\addabbrvspace пер.,\addabbrvspace авт\adddotspace коммент\adddotspace и предисл\adddot}},
+ editortrcoaf = {{редактор, переводчик, автор комментариев и послесловия}%
+ {ред.,\addabbrvspace пер.,\addabbrvspace авт\adddotspace коммент\adddotspace и послесл\adddot}},
+ editorstrcoaf = {{редакторы, переводчики, авторы комментариев и послесловия}%
+ {ред.,\addabbrvspace пер.,\addabbrvspace авт\adddotspace коммент\adddotspace и послесл\adddot}},
+ editortranin = {{редактор, переводчик, составитель примечаний и автор вступительной статьи}%
+ {ред.,\addabbrvspace пер.,\addabbrvspace сост\adddotspace примеч\adddotspace и авт\adddotspace вступ\adddotspace ст\adddot}},
+ editorstranin = {{редакторы, переводчики, составители примечаний и авторы вступительной статьи}%
+ {ред.,\addabbrvspace пер.,\addabbrvspace сост\adddotspace примеч\adddotspace и авт\adddotspace вступ\adddotspace ст\adddot}},
+ editortranfo = {{редактор, переводчик, составитель примечаний и автор предисловия}%
+ {ред.,\addabbrvspace пер.,\addabbrvspace сост\adddotspace примеч\adddotspace и авт\adddotspace предисл\adddot}},
+ editorstranfo = {{редакторы, переводчики, составители примечаний и авторы предисловия}%
+ {ред.,\addabbrvspace пер.,\addabbrvspace сост\adddotspace примеч\adddotspace и авт\adddotspace предисл\adddot}},
+ editortranaf = {{редактор, переводчик, составитель примечаний и автор послесловия}%
+ {ред.,\addabbrvspace пер.,\addabbrvspace сост\adddotspace примеч\adddotspace и авт\adddotspace послесл\adddot}},
+ editorstranaf = {{редакторы, переводчики, составители примечаний и авторы послесловия}%
+ {ред.,\addabbrvspace пер.,\addabbrvspace сост\adddotspace примеч\adddotspace и авт\adddotspace послесл\adddot}},
+ translatorco = {{переводчик и автор комментариев}%
+ {пер\adddotspace и авт\adddotspace коммент\adddot}},
+ translatorsco = {{переводчики и авторы комментариев}%
+ {пер\adddotspace и авт\adddotspace коммент\adddot}},
+ translatoran = {{переводчик и автор примечаний}%
+ {пер\adddotspace и сост\adddotspace примеч\adddot}},
+ translatorsan = {{переводчики и составители примечаний}%
+ {пер\adddotspace и сост\adddotspace примеч\adddot}},
+ translatorin = {{переводчик и автор вступительной статьи}%
+ {пер\adddotspace и авт\adddotspace вступ\adddotspace ст\adddot}},
+ translatorsin = {{переводчики и авторы вступительной статьи}%
+ {пер\adddotspace и авт\adddotspace вступ\adddotspace ст\adddot}},
+ translatorfo = {{переводчик и автор предисловия}%
+ {пер\adddotspace и авт\adddotspace предисл\adddot}},
+ translatorsfo = {{переводчики и авторы предисловия}%
+ {пер\adddotspace и авт\adddotspace предисл\adddot}},
+ translatoraf = {{переводчик и автор послесловия}%
+ {пер\adddotspace и авт\adddotspace послесл\adddot}},
+ translatorsaf = {{переводчики и авторы послесловия}%
+ {пер\adddotspace и авт\adddotspace послесл\adddot}},
+ translatorcoin = {{переводчик, автор комментариев и вступительной статьи}%
+ {пер.,\addabbrvspace авт\adddotspace коммент\adddotspace и вступ\adddotspace ст\adddot}},
+ translatorscoin = {{переводчики, авторы комментариев и вступительной статьи}%
+ {пер.,\addabbrvspace авт\adddotspace коммент\adddotspace и вступ\adddotspace ст\adddot}},
+ translatorcofo = {{переводчик, автор комментариев и предисловия}%
+ {пер.,\addabbrvspace авт\adddotspace коммент\adddotspace и предисл\adddot}},
+ translatorscofo = {{переводчики, авторы комментариев и предисловия}%
+ {пер.,\addabbrvspace авт\adddotspace коммент\adddotspace и предисл\adddot}},
+ translatorcoaf = {{переводчик, автор комментариев и послесловия}%
+ {пер.,\addabbrvspace авт\adddotspace коммент\adddotspace и послесл\adddot}},
+ translatorscoaf = {{переводчики, авторы комментариев и послесловия}%
+ {пер.,\addabbrvspace авт\adddotspace коммент\adddotspace и послесл\adddot}},
+ translatoranin = {{переводчик, автор комментариев и вступительной статьим}%
+ {пер.,\addabbrvspace авт\adddotspace коммент\adddotspace и вступ\adddotspace ст\adddot}},
+ translatorsanin = {{переводчики, авторы комментариев и вступительной статьи}%
+ {пер.,\addabbrvspace авт\adddotspace коммент\adddotspace и вступ\adddotspace ст\adddot}},
+ translatoranfo = {{переводчик, автор комментариев и предисловия}%
+ {пер.,\addabbrvspace авт\adddotspace коммент\adddotspace и предисл\adddot}},
+ translatorsanfo = {{переводчики, авторы комментариев и предисловия}%
+ {пер.,\addabbrvspace авт\adddotspace коммент\adddotspace и предисл\adddot}},
+ translatoranaf = {{переводчик, автор комментариев и послесловия}%
+ {пер.,\addabbrvspace авт\adddotspace коммент\adddotspace и послесл\adddot}},
+ translatorsanaf = {{переводчики, авторы комментариев и послесловия}%
+ {пер.,\addabbrvspace авт\adddotspace коммент\adddotspace и послесл\adddot}},
+ organizer = {{организатор}{орг\adddot}},
+ organizers = {{организаторы}{орг\adddot}},
+ byorganizer = {{организатор}{орг\adddot}},% FIXME: unsure
+ byauthor = {{}{}},
+ byeditor = {{под редакцией}{под\addabbrvspace ред\adddot}},
+ bycompiler = {{составитель}{сост\adddot}},
+ byredactor = {{под редакцией}{под\addabbrvspace ред\adddot}},
+ byreviser = {{исправлено}{испр\adddot}},
+ byreviewer = {{рецензия}{рец\adddot}},
+ byfounder = {{учредитель}{учр\adddot}},% FIXME: unsure
+ bycontinuator = {{продолжение}{продолж\adddot}},% FIXME: unsure
+ bycollaborator = {{при участии}{при\addabbrvspace уч\adddot}},
+ bytranslator = {{перевод \lbx@lfromlang}{пер\adddot\ \lbx@sfromlang}},
+ bycommentator = {{комментарии}{коммент\adddot}},
+ byannotator = {{примечания}{примеч\adddot}},
+ withcommentator = {{комментарии}{коммент\adddot}},
+ withannotator = {{примечания}{примеч\adddot}},
+ withintroduction = {{вступительная статья}{вступ\adddotspace ст\adddot}},
+ withforeword = {{предисловие}{предисл\adddot}},
+ withafterword = {{послесловие}{послесл\adddot}},
+ byeditortr = {{перевод \lbx@lfromlang, под редакцией}%
+ {пер\adddot\ \lbx@sfromlang, под\addabbrvspace ред\adddot}},
+ byeditorco = {{под редакцией, комментарии}%
+ {под ред.,\addabbrvspace коммент\adddot}},
+ byeditoran = {{под редакцией, примечания}%
+ {под ред.,\addabbrvspace примеч\adddot}},
+ byeditorin = {{под редакцией, вступительная статья}%
+ {под ред.,\addabbrvspace вступ\adddotspace ст\adddot}},
+ byeditorfo = {{под редакцией, предисловие}%
+ {под ред.,\addabbrvspace предисл\adddot}},
+ byeditoraf = {{под редакцией, послесловие}%
+ {под ред.,\addabbrvspace послесл\adddot}},
+ byeditortrco = {{под редакцией, перевод \lbx@lfromlang\ и комментарии}%
+ {под ред.,\addabbrvspace пер\adddot\ \lbx@sfromlang\ и коммент\adddot}},
+ byeditortran = {{под редакцией, перевод \lbx@lfromlang\ и примечания}%
+ {под ред.,\addabbrvspace пер\adddot\ \lbx@sfromlang\ и примеч\adddot}},
+ byeditortrin = {{под редакцией, перевод \lbx@lfromlang, вступительная статья}%
+ {под ред.,\addabbrvspace пер\adddot\ \lbx@sfromlang, вступ\adddotspace ст\adddot}},
+ byeditortrfo = {{под редакцией, перевод \lbx@lfromlang, предисловие}%
+ {под ред.,\addabbrvspace пер\adddot\ \lbx@sfromlang, предисл\adddot}},
+ byeditortraf = {{под редакцией, перевод \lbx@lfromlang, послесловие}%
+ {под ред\adddotspace и пер\adddot\ \lbx@sfromlang, послесл\adddot}},
+ byeditorcoin = {{под редакцией, комментарии и вступительная статья}%
+ {под ред.,\addabbrvspace коммент\adddotspace и вступ\adddotspace ст\adddot}},
+ byeditorcofo = {{под редакцией, комментарии и предисловие}%
+ {под ред.,\addabbrvspace коммент\adddotspace и предисл\adddot}},
+ byeditorcoaf = {{под редакцией, комментарии и послесловие}%
+ {под ред.,\addabbrvspace коммент\adddotspace и послесл\adddot}},
+ byeditoranin = {{под редакцией, примечания и вступительная статья}%
+ {под ред.,\addabbrvspace примеч\adddotspace и вступ\adddotspace ст\adddot}},
+ byeditoranfo = {{под редакцией, примечания и предисловие}%
+ {под ред.,\addabbrvspace примеч\adddotspace и предисл\adddot}},
+ byeditoranaf = {{под редакцией, примечания и послесловие}%
+ {под ред.,\addabbrvspace примеч\adddotspace и послесл\adddot}},
+ byeditortrcoin = {{под редакцией, перевод \lbx@lfromlang, комментарии и вступительная статья}%
+ {под ред.,\addabbrvspace пер\adddot\ \lbx@sfromlang, коммент\adddotspace и вступ\adddotspace ст\adddot}},
+ byeditortrcofo = {{под редакцией, перевод \lbx@lfromlang, комментарии и предисловие}%
+ {под ред.,\addabbrvspace пер\adddot\ \lbx@sfromlang, коммент\adddotspace и предисл\adddot}},
+ byeditortrcoaf = {{под редакцией, перевод \lbx@lfromlang, комментарии и послесловие}%
+ {под ред.,\addabbrvspace пер\adddot\ \lbx@sfromlang, коммент\adddotspace и послесл\adddot}},
+ byeditortranin = {{под редакцией, перевод \lbx@lfromlang, примечания и вступительная статья}%
+ {под ред.,\addabbrvspace пер\adddot\ \lbx@sfromlang, примеч\adddotspace и вступ\adddotspace ст\adddot}},
+ byeditortranfo = {{под редакцией, перевод \lbx@lfromlang, примечания и предисловие}%
+ {под ред.,\addabbrvspace пер\adddot\ \lbx@sfromlang, примеч\adddotspace и предисл\adddot}},
+ byeditortranaf = {{под редакцией, перевод \lbx@lfromlang, примечания и послесловие}%
+ {под ред.,\addabbrvspace пер\adddot\ \lbx@sfromlang, примеч\adddotspace и послесл\adddot}},
+ bytranslatorco = {{перевод \lbx@lfromlang\ и комментарии}%
+ {пер\adddot\ \lbx@sfromlang\ и коммент\adddot}},
+ bytranslatoran = {{перевод \lbx@lfromlang\ и примечания}%
+ {пер\adddot\ \lbx@sfromlang\ и примеч\adddot}},
+ bytranslatorin = {{перевод \lbx@lfromlang\ и вступительная статья}%
+ {пер\adddot\ \lbx@sfromlang\ и вступ\adddotspace ст\adddot}},
+ bytranslatorfo = {{перевод \lbx@lfromlang\ и предисловие}%
+ {пер\adddot\ \lbx@sfromlang\ и предисл\adddot}},
+ bytranslatoraf = {{перевод \lbx@lfromlang\ и послесловие}%
+ {пер\adddot\ \lbx@sfromlang\ и и послесл\adddot}},
+ bytranslatorcoin = {{перевод \lbx@lfromlang, комментарии и вступительная статья}%
+ {пер\adddot\ \lbx@sfromlang, коммент\adddotspace и вступ\adddotspace ст\adddot}},
+ bytranslatorcofo = {{перевод \lbx@lfromlang, комментарии и предисловие}%
+ {пер\adddot\ \lbx@sfromlang, коммент\adddotspace и предисл\adddot}},
+ bytranslatorcoaf = {{перевод \lbx@lfromlang, комментарии и послесловие}%
+ {пер\adddot\ \lbx@sfromlang, коммент\adddotspace и послесл\adddot}},
+ bytranslatoranin = {{перевод \lbx@lfromlang, примечания и вступительная статья}%
+ {пер\adddot\ \lbx@sfromlang, примеч\adddotspace и вступ\adddotspace ст\adddot}},
+ bytranslatoranfo = {{перевод \lbx@lfromlang, примечания и предисловие}%
+ {пер\adddot\ \lbx@sfromlang, примеч\adddotspace и предисл\adddot}},
+ bytranslatoranaf = {{перевод \lbx@lfromlang, примечания и послесловие}%
+ {пер\adddot\ \lbx@sfromlang, примеч\adddotspace и послесл\adddot}},
+ and = {{и}{и}},
+ andothers = {{и\addabbrvspace др\adddot}{и\addabbrvspace др\adddot}},
+ andmore = {{и\addabbrvspace др\adddot}{и\addabbrvspace др\adddot}},
+ volume = {{том}{т\adddot}},
+ volumes = {{томах}{т\adddot}},
+ involumes = {{в}{в}},
+ jourvol = {{том}{т\adddot}},
+ jourser = {{серия}{сер\adddot}},
+ book = {{книга}{кн\adddot}},
+ part = {{часть}{ч\adddot}},
+ issue = {{выпуск}{вып\adddot}},
+ newseries = {{новая серия}{нов\adddotspace сер\adddot}},
+ oldseries = {{старая серия}{стар\adddotspace сер\adddot}},
+ edition = {{издание}{изд\adddot}},
+ reprint = {{переиздание}{переизд\adddot}},
+ reprintof = {{переиздание}{переизд\adddot}},
+ reprintas = {{переиздано как}{переизд\adddotspace как}},
+ reprintfrom = {{переиздано с}{переизд\adddotspace с}},
+ translationof = {{перевод по изданию\addcolon}{пер\adddotspace по изд\adddot\addcolon}},
+ translationas = {{перевод\addcolon}{пер\adddot\addcolon}},
+ translationfrom = {{перевод с}{пер\adddotspace с}},
+ reviewof = {{рецензия на\addcolon}{рец\adddotspace на\addcolon}},% FIXME: unsure
+ origpubas = {{первая публикация\addcolon}%
+ {перв\adddotspace публ\adddot\addcolon}},
+ origpubin = {{первая публикация в}%
+ {перв\adddotspace публ\adddotspace в}},
+ astitle = {{\addcolon}{\addcolon}},% FIXME: unsure
+ bypublisher = {{\addcomma}{\addcomma}},% FIXME: unsure
+ nodate = {{б\adddot г\adddot}{б\adddot г\adddot}},
+ page = {{страница}{с\adddot}},
+ pages = {{страницы}{с\adddot}},
+ column = {{колонка}{кол\adddot}},
+ columns = {{колонки}{кол\adddot}},
+ line = {{строка}{строка}},
+ lines = {{строки}{строка}},
+ verse = {{стих}{стих}},
+ verses = {{стихи}{стихи}},
+ section = {{параграф}{\S}},
+ sections = {{параграфы}{\S\S}},
+ paragraph = {{абзац}{абз\adddot}},
+ paragraphs = {{абзацы}{абз\adddot}},
+ pagetotal = {{страница}{с\adddot}},
+ pagetotals = {{страницы}{с\adddot}},
+ columntotal = {{колонка}{кол\adddot}},
+ columntotals = {{колонки}{кол\adddot}},
+ linetotal = {{строка}{строка}},
+ linetotals = {{строки}{строка}},
+ versetotal = {{стих}{стих}},
+ versetotals = {{стихи}{стихи}},
+ sectiontotal = {{параграф}{\S}},
+ sectiontotals = {{параграфы}{\S\S}},
+ paragraphtotal = {{абзац}{абз\adddot}},
+ paragraphtotals = {{абзацы}{абз\adddot}},
+ in = {{в}{в}},
+ inseries = {{в}{в}},
+ ofseries = {{из}{из}},
+ number = {{номер}{№}},
+ chapter = {{глава}{гл\adddot}},
+% bathesis = {{}{}},% FIXME: missing
+ mathesis = {{дис\adddotspace\textellipsis\ маг\adddot}
+ {дис\adddotspace\textellipsis\ маг\adddot}},
+ phdthesis = {{дис\adddotspace\textellipsis\ док\adddot}
+ {дис\adddotspace\textellipsis\ док\adddot}},
+ candthesis = {{дис\adddotspace\textellipsis\ канд\adddot}
+ {дис\adddotspace\textellipsis\ канд\adddot}},
+ resreport = {{научный отчёт}{науч\adddotspace отч\adddot}},
+ techreport = {{технический отчёт}{тех\adddotspace отч\adddot}},
+ software = {{программное обеспечение}{прогр\adddotspace обесп\adddot}},
+ datacd = {{CD-ROM}{CD-ROM}},
+ audiocd = {{audio CD}{audio CD}},
+ version = {{версия}{вер\adddot}},
+ url = {{url}{url}},
+ urlfrom = {{режим доступа}{режим доступа}},
+ urlseen = {{дата обращения}{дата\addabbrvspace обр\adddot}},
+ inpreparation = {{в\addabbrvspace подготовке}{в подг\adddot}},
+ submitted = {{представлено}{предст\adddot}},
+ forthcoming = {{в печати}{в печ\adddot}},
+ inpress = {{в\addabbrvspace печати}{в печ\adddot}},
+ prepublished = {{предварительная публикация}{пред\adddotspace пуб\adddot}},% FIXME: unsure
+ citedas = {{далее цитируется как}{далее цит\addabbrvspace как}},
+ thiscite = {{здесь}{здесь}},
+ seenote = {{смотри сноску}{см\adddotspace сн\adddot}},
+ quotedin = {{цитируется по}{цит\adddotspace по}},
+ idem = {{он\addabbrvspace же}{он\addabbrvspace же}},
+ idemsm = {{он\addabbrvspace же}{он\addabbrvspace же}},
+ idemsf = {{она\addabbrvspace же}{она\addabbrvspace же}},
+ idemsn = {{он\addabbrvspace же}{он\addabbrvspace же}},
+ idempm = {{они\addabbrvspace же}{они\addabbrvspace же}},
+ idempf = {{они\addabbrvspace же}{они\addabbrvspace же}},
+ idempn = {{они\addabbrvspace же}{они\addabbrvspace же}},
+ idempp = {{они\addabbrvspace же}{они\addabbrvspace же}},
+ ibidem = {{там\addabbrvspace же}{там\addabbrvspace же}},
+ opcit = {{указ\adddotspace соч\adddot}{указ\adddotspace соч\adddot}},
+ loccit = {{указ\adddotspace место}{указ\adddotspace место}},
+ confer = {{сравни}{ср\adddot}},
+ sequens = {{и следующая}{и\addabbrvspace сл\adddot}},
+ sequentes = {{и следующие}{и\addabbrvspace сл\adddot}},
+ passim = {{всюду}{всюду}},
+ see = {{смотри}{см\adddot}},
+ seealso = {{смотри также}{см\adddotspace также}},
+ backrefpage = {{цитируется на странице}{цит\adddotspace на\addabbrvspace с\adddot}},
+ backrefpages = {{цитируется на страницах}{цит\adddotspace на\addabbrvspace с\adddot}},
+ january = {{январь}{янв\adddot}},
+ february = {{февраль}{февр\adddot}},
+ march = {{март}{март}},
+ april = {{апрель}{апр\adddot}},
+ may = {{май}{май}},
+ june = {{июнь}{июнь}},
+ july = {{июль}{июль}},
+ august = {{август}{авг\adddot}},
+ september = {{сентябрь}{сент\adddot}},
+ october = {{октябрь}{окт\adddot}},
+ november = {{ноябрь}{нояб\adddot}},
+ december = {{декабрь}{дек\adddot}},
+ datejanuary = {{января}{янв\adddot}},
+ datefebruary = {{февраля}{февр\adddot}},
+ datemarch = {{марта}{марта}},
+ dateapril = {{апреля}{апр\adddot}},
+ datemay = {{мая}{мая}},
+ datejune = {{июня}{июня}},
+ datejuly = {{июля}{июля}},
+ dateaugust = {{августа}{авг\adddot}},
+ dateseptember = {{сентября}{сент\adddot}},
+ dateoctober = {{октября}{окт\adddot}},
+ datenovember = {{ноября}{нояб\adddot}},
+ datedecember = {{декабря}{дек\adddot}},
+ langamerican = {{американский}{амер\adddot}},
+ langbrazilian = {{бразильский}{браз\adddot}},
+ langbulgarian = {{болгарский}{болг\adddot}},
+ langcatalan = {{каталонский}{катал\adddot}},
+ langcroatian = {{хорватский}{хорв\adddot}},
+ langczech = {{чешский}{чеш\adddot}},
+ langdanish = {{датский}{дат\adddot}},
+ langdutch = {{нидерландский}{нидерл\adddot}},
+ langenglish = {{английский}{англ\adddot}},
+ langestonian = {{эстонский}{эст\adddot}},
+ langfinnish = {{финский}{фин\adddot}},
+ langfrench = {{французский}{фр\adddot}},
+ langgalician = {{галисийский}{гал\adddot}},
+ langgerman = {{немецкий}{нем\adddot}},
+ langgreek = {{греческий}{греч\adddot}},
+ langhungarian = {{венгерский}{венг\adddot}},
+ langitalian = {{итальянский}{итал\adddot}},
+ langjapanese = {{японский}{яп\adddot}},
+ langlatin = {{латинский}{лат\adddot}},
+% langlatvian = {{}{}},% FIXME: missing
+ langnorwegian = {{норвежский}{норв\adddot}},
+ langpolish = {{польский}{пол\adddot}},
+ langportuguese = {{португальский}{порт\adddot}},
+ langrussian = {{русский}{рус\adddot}},
+% langslovak = {{}{}},% FIXME: missing
+ langslovene = {{словенский}{слов\adddot}},
+ langspanish = {{испанский}{исп\adddot}},
+ langswedish = {{шведский}{швед\adddot}},
+ langukrainian = {{украинский}{укр\adddot}},
+ fromamerican = {{с американского}{с\addabbrvspace амер\adddot}},
+ frombrazilian = {{с бразильского}{с\addabbrvspace браз\adddot}},
+ frombulgarian = {{с болгарского}{с\addabbrvspace болг\adddot}},
+ fromcatalan = {{с каталонского}{с\addabbrvspace катал\adddot}},
+ fromcroatian = {{с хорватского}{с\addabbrvspace хорв\adddot}},
+ fromczech = {{с чешского}{с\addabbrvspace чеш\adddot}},
+ fromdanish = {{с датского}{с\addabbrvspace дат\adddot}},
+ fromdutch = {{с нидерландского}{с\addabbrvspace нидерл\adddot}},
+ fromenglish = {{с английского}{с\addabbrvspace англ\adddot}},
+ fromestonian = {{с эстонского}{с\addabbrvspace эст\adddot}},
+ fromfinnish = {{с финского}{с\addabbrvspace фин\adddot}},
+ fromfrench = {{с французского}{с\addabbrvspace фр\adddot}},
+ fromgalician = {{c галисийского}{c\addabbrvspace гал\adddot}},
+ fromgerman = {{с немецкого}{с\addabbrvspace нем\adddot}},
+ fromgreek = {{с греческого}{с\addabbrvspace греч\adddot}},
+ fromhungarian = {{с венгерского}{с\addabbrvspace венг\adddot}},
+ fromitalian = {{с итальянского}{с\addabbrvspace итал\adddot}},
+ fromjapanese = {{с японского}{с\addabbrvspace яп\adddot}},
+ fromlatin = {{с латинского}{с\addabbrvspace лат\adddot}},
+% fromlatvian = {{}{}},% FIXME: missing
+ fromnorwegian = {{с норвежского}{с\addabbrvspace норв\adddot}},
+ frompolish = {{с польского}{с пол\adddot}},
+ fromportuguese = {{с португальского}{с\addabbrvspace порт\adddot}},
+ fromrussian = {{с русского}{с\addabbrvspace рус\adddot}},
+% fromslovak = {{}{}},% FIXME: missing
+ fromslovene = {{со словенского}{со\addabbrvspace слов\adddot}},
+ fromspanish = {{с испанского}{с\addabbrvspace исп\adddot}},
+ fromswedish = {{со шведского}{со\addabbrvspace швед\adddot}},
+ fromukrainian = {{с украинского}{с\addabbrvspace укр\adddot}},
+ countryde = {{Германия}{Германия}},
+ countryeu = {{Европейский Союз}{ЕС}},
+ countryep = {{Европейский Союз}{ЕС}},
+ countryfr = {{Франция}{Франция}},
+ countryuk = {{Великобритания}{Великобритания}},
+ countryus = {{Соединённые Штаты Америки}{США}},
+ patent = {{патент}{пат\adddot}},
+ patentde = {{патент Германии}{пат\adddotspace Германии}},
+ patenteu = {{патент Европы}{пат\adddotspace Европы}},
+ patentfr = {{патент Франции}{пат\adddotspace Франции}},
+ patentuk = {{патент Великобритании}{пат\adddotspace Великобритании}},
+ patentus = {{патент США}{пат\adddotspace США}},
+ patreq = {{заявка}{заявка}},
+ patreqde = {{заявка на патент Германии}{заявка на пат\adddotspace Германии}},
+ patreqeu = {{заявка на патент Европы}{заявка на пат\adddotspace Европы}},
+ patreqfr = {{заявка на патент Франции}{заявка на пат\adddotspace Франции}},
+ patrequk = {{заявка на патент Великобритании}{заявка на пат\adddotspace Великобритании}},
+ patrequs = {{заявка на патент США}{заявка на пат\adddotspace США}},
+ file = {{файл}{файл}},
+ library = {{библиотека}{б-ка}},
+ abstract = {{резюме}{рез\adddot}},
+ annotation = {{аннотация}{аннот\adddot}},
+ commonera = {{нашей эры}{н\adddotspace э\adddot}},
+ beforecommonera = {{до нашей эры}{до н\adddotspace э\adddot}},
+ annodomini = {{от Рождества Христова}{от Р\adddotspace Х\adddot}},
+ beforechrist = {{до Рождества Христова}{до Р\adddotspace Х\adddot}},
+ circa = {{около}{ок\adddot}},
+ spring = {{весна}{весна}},
+ summer = {{лето}{лето}},
+ autumn = {{осень}{осень}},
+ winter = {{зима}{зима}},
+% springN = {{}{}},% FIXME: missing
+% summerN = {{}{}},% FIXME: missing
+% autumnN = {{}{}},% FIXME: missing
+% winterN = {{}{}},% FIXME: missing
+% springS = {{}{}},% FIXME: missing
+% summerS = {{}{}},% FIXME: missing
+% autumnS = {{}{}},% FIXME: missing
+% winterS = {{}{}},% FIXME: missing
+% Q1 = {{}{}},% FIXME: missing
+% Q2 = {{}{}},% FIXME: missing
+% Q3 = {{}{}},% FIXME: missing
+% Q4 = {{}{}},% FIXME: missing
+% QD1 = {{}{}},% FIXME: missing
+% QD2 = {{}{}},% FIXME: missing
+% QD3 = {{}{}},% FIXME: missing
+% S1 = {{}{}},% FIXME: missing
+% S2 = {{}{}},% FIXME: missing
+ am = {{ДП}{ДП}},
+ pm = {{ПП}{ПП}},
+}
+
+\protected\gdef\lbx@ru@mkbibdatemonth#1{%
+ \ifcase0#1\relax
+ #1\BibliographyWarning{Month out of range}%
+ \or\abx@bibmonth{datejanuary}%
+ \or\abx@bibmonth{datefebruary}%
+ \or\abx@bibmonth{datemarch}%
+ \or\abx@bibmonth{dateapril}%
+ \or\abx@bibmonth{datemay}%
+ \or\abx@bibmonth{datejune}%
+ \or\abx@bibmonth{datejuly}%
+ \or\abx@bibmonth{dateaugust}%
+ \or\abx@bibmonth{dateseptember}%
+ \or\abx@bibmonth{dateoctober}%
+ \or\abx@bibmonth{datenovember}%
+ \or\abx@bibmonth{datedecember}%
+ \else
+ #1\BibliographyWarning{Month out of range}%
+ \fi}%
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/lbx/serbian-ms.lbx b/macros/latex/contrib/biblatex-ms/latex/lbx/serbian-ms.lbx
new file mode 100644
index 0000000000..95d3486543
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/lbx/serbian-ms.lbx
@@ -0,0 +1,457 @@
+\ProvidesFile{serbian-ms.lbx}
+[\abx@lbxid]
+
+% Translator's notes:
+%
+% This file is generated from a template and YAML localization string
+% collection by a script
+% You can said files at https://gitlab.com/andrejr/biblatex-serbian.
+% Please don't modify this file by hand -- contribute your changes upstream and
+% then send a pull request with the generated file to the official biblatex
+% repo (https://github.com/plk/biblatex).
+%
+% This is done so we could generate both `serbian.lbx` (Latin) and
+% `serbianc.lbx` (Cyrillic) from the same set of localization strings.
+
+
+\DeclareRedundantLanguages{serbian}{serbian}
+
+\DeclareBibliographyExtras{%
+ \protected\def\bibrangedash{\textendash\penalty\hyphenpenalty}%
+ \protected\def\mkbibordinal#1{\stripzeros{#1}\adddot}%
+ \protected\def\mkbibmascord{\mkbibordinal}%
+ \protected\def\mkbibfemord{\mkbibordinal}%
+ \protected\def\mkbibneutord{\mkbibordinal}%
+ \protected\def\bibtimesep{.}%
+ %\savecommand\mkbibordedition
+ %\savecommand\mkbibordseries
+ \def\mkbibordedition{\mkbibordinal}%
+ \def\mkbibordseries{\mkbibfemord}%
+ \protected\def\mkbibdatelong#1#2#3{%
+ % day field
+ \iffieldundef{#3}{}{\mkbibordinal{\thefield{#3}}% if day exists, display
+ \iffieldundef{#2}{}{\nobreakspace}}% space before month if month exists
+ % month field
+ \iffieldundef{#2}{}{\mkbibmonth{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}}% space before year if year exists
+ % year field
+ \iffieldbibstring{#1}% year
+ {\bibstring{\thefield{#1}}}%
+ {\dateeraprintpre{#1}\mkbibordinal{\thefield{#1}}}}%
+ \protected\def\mkbibdateshort#1#2#3{%
+ \iffieldundef{#3}{}{\mkbibordinal{\thefield{#3}}%
+ \iffieldundef{#2}{}{\addnbspace}}%
+ \iffieldundef{#2}{}{\mkbibordinal{\thefield{#2}}%
+ \iffieldundef{#1}{}{\addnbspace}}%
+ \iffieldbibstring{#1}{\bibstring{\thefield{#1}}}%
+ {\dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}\adddot}}%
+ \expandafter\protected\expandafter\def\csname mkbibtime24h\endcsname#1#2#3#4{%
+ \iffieldundef{#1}
+ {}
+ {\mktimezeros{\thefield{#1}}%
+ \iffieldundef{#2}{}{\bibtimesep}}%
+ \iffieldundef{#2}
+ {}
+ {\mktimezeros{\thefield{#2}}%
+ \iffieldundef{#3}{}{\bibtimesep}}%
+ \iffieldundef{#3}
+ {}
+ {\mktimezeros{\thefield{#3}}}%
+ \iffieldundef{#4}{}
+ {\bibtimezonesep
+ \mkbibtimezone{\thefield{#4}}}}%
+ \expandafter\protected\expandafter\def\csname mkbibtime12h%
+ \endcsname#1#2#3#4{%
+ \stripzeros{\mktimehh{\thefield{#1}}}\bibtimesep%
+ \forcezerosmdt{\thefield{#2}}%
+ \iffieldundef{#3}{}
+ {\bibtimesep%
+ \forcezerosmdt{\thefield{#3}}}%
+ \space
+ \ifnumless{\thefield{#1}}{12}
+ {\bibstring{am}}
+ {\bibstring{pm}}%
+ \iffieldundef{#4}{}
+ {\space\bibtimezonesep%
+ \parentext{\mkbibtimezone{\thefield{#4}}}}}%
+ \protected\def\mkbibyeardivisiondateshort#1#2{%
+ \mkbibyeardivision{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}%
+ \dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}\adddot}%
+ \protected\def\mkbibyeardivisiondatelong#1#2{%
+ \mkbibyeardivision{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}%
+ \dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}\adddot}%
+}
+
+\DeclareBibliographyStrings{%
+ abstract = {{apstrakt}{apstrakt}},
+ afterword = {{pogovor}{pogovor}},
+ am = {{AM}{AM}},
+ and = {{i}{i}},
+ andmore = {{i drugi}{i\addabbrvspace dr\adddot}},
+ andothers = {{i drugi}{i\addabbrvspace dr\adddot}},
+ annodomini = {{posle Hrista}{p\adddotspace Hr\adddot}},
+ annotation = {{bele\v ska}{bel\adddot}},
+ annotations = {{bele\v ske}{bel\adddot}},
+ annotator = {{autor bele\v zaka}{aut\adddot\ bel\adddot}},
+ annotators = {{autori bele\v zaka}{aut\adddot\ bel\adddot}},
+ april = {{april}{apr\adddot}},
+ astitle = {{pod naslovom}{pod naslovom}},
+ audiocd = {{audio CD}{audio CD}},
+ august = {{avgust}{avg\adddot}},
+ autumn = {{jesen}{jesen}},
+% springN = {{}{}},% FIXME: missing
+% summerN = {{}{}},% FIXME: missing
+% autumnN = {{}{}},% FIXME: missing
+% winterN = {{}{}},% FIXME: missing
+% springS = {{}{}},% FIXME: missing
+% summerS = {{}{}},% FIXME: missing
+% autumnS = {{}{}},% FIXME: missing
+% winterS = {{}{}},% FIXME: missing
+% Q1 = {{}{}},% FIXME: missing
+% Q2 = {{}{}},% FIXME: missing
+% Q3 = {{}{}},% FIXME: missing
+% Q4 = {{}{}},% FIXME: missing
+% QD1 = {{}{}},% FIXME: missing
+% QD2 = {{}{}},% FIXME: missing
+% QD3 = {{}{}},% FIXME: missing
+% S1 = {{}{}},% FIXME: missing
+% S2 = {{}{}},% FIXME: missing
+ backrefpage = {{citirano na stranici}{cit\adddot\ na str\adddot}},
+ backrefpages = {{citirano na stranicama}{cit\adddot\ na str\adddot}},
+ bathesis = {{ba\v celor rad}{BA\addabbrvspace rad}},
+ beforechrist = {{pre Hrista}{pr\adddotspace Hr\adddot}},
+ beforecommonera = {{pre nove ere}{pre\addabbrvspace n\adddotspace e\adddot}},
+ bibliography = {{Bibliografija}{Bibliografija}},
+ book = {{knjiga}{knj\adddot}},
+ byannotator = {{autor bele\v zaka}{autor bele\v zaka}},
+ byauthor = {{autor}{autor}},
+ bycollaborator = {{u saradnji sa}{u saradnji sa}},
+ bycommentator = {{komentar}{komentar}},
+ bycompiler = {{odabir}{odabir}},
+ bycontinuator = {{autor nastavka}{autor nastavka}},
+ byeditor = {{urednik}{urednik}},
+ byeditoraf = {{obrada i pogovor}{obrada i pogovor}},
+ byeditoran = {{obrada i bele\v ske}{obrada i bele\v ske}},
+ byeditoranaf = {{obrada, bele\v ske i pogovor}{obrada, bele\v ske i pogovor}},
+ byeditoranfo = {{obrada, bele\v ske i predgovor}{obrada, bele\v ske i predgovor}},
+ byeditoranin = {{obrada, bele\v ske i uvod}{obrada, bele\v ske i uvod}},
+ byeditorco = {{obrada i komentar}{obrada i komentar}},
+ byeditorcoaf = {{obrada, komentar i pogovor}{obrada, komentar i pogovor}},
+ byeditorcofo = {{obrada, komentar i predgovor}{obrada, komentar i predgovor}},
+ byeditorcoin = {{obrada, komentar i uvod}{obrada, komentar i uvod}},
+ byeditorfo = {{obrada i predgovor}{obrada i predgovor}},
+ byeditorin = {{obrada i uvod}{obrada i uvod}},
+ byeditortr = {{obrada i prevod}{obrada i prevod}},
+ byeditortraf = {{obrada, prevod i pogovor}{obrada, prevod i pogovor}},
+ byeditortran = {{obrada, prevod i bele\v ske}{obrada, prevod i bele\v ske}},
+ byeditortranaf = {{obrada, prevod, bele\v ske i pogovor}{obrada, prevod, bele\v ske i pogovor}},
+ byeditortranfo = {{obrada, prevod, bele\v ske i predgovor}{obrada, prevod, bele\v ske i predgovor}},
+ byeditortranin = {{obrada, prevod, bele\v ske i uvod}{obrada, prevod, bele\v ske i uvod}},
+ byeditortrco = {{obrada, prevod i komentar}{obrada, prevod i komentar}},
+ byeditortrcoaf = {{obrada, prevod, komentar i pogovor}{obrada, prevod, komentar i pogovor}},
+ byeditortrcofo = {{obrada, prevod, komentar i predgovor}{obrada, prevod, komentar i predgovor}},
+ byeditortrcoin = {{obrada, prevod, komentar i uvod}{obrada, prevod, komentar i uvod}},
+ byeditortrfo = {{obrada, prevod i predgovor}{obrada, prevod i predgovor}},
+ byeditortrin = {{obrada, prevod i uvod}{obrada, prevod i uvod}},
+ byfounder = {{osniva\v c}{osniva\v c}},
+ byorganizer = {{organizator}{organizator}},
+ bypublisher = {{izdava\v c}{izdava\v c}},
+ byredactor = {{redaktor}{redaktor}},
+ byreviewer = {{recenzent}{recenzent}},
+ byreviser = {{korektor}{korektor}},
+ bytranslator = {{prevod}{prevod}},
+ bytranslatoraf = {{prevod i pogovor}{prevod i pogovor}},
+ bytranslatoran = {{prevod i bele\v ske}{prevod i bele\v ske}},
+ bytranslatoranaf = {{prevod, bele\v ske i pogovor}{prevod, bele\v ske i pogovor}},
+ bytranslatoranfo = {{prevod, bele\v ske i predgovor}{prevod, bele\v ske i predgovor}},
+ bytranslatoranin = {{prevod, bele\v ske i uvod}{prevod, bele\v ske i uvod}},
+ bytranslatorco = {{prevod i komentar}{prevod i komentar}},
+ bytranslatorcoaf = {{prevod, komentar i pogovor}{prevod, komentar i pogovor}},
+ bytranslatorcofo = {{prevod, komentar i predgovor}{prevod, komentar i predgovor}},
+ bytranslatorcoin = {{prevod, komentar i uvod}{prevod, komentar i uvod}},
+ bytranslatorfo = {{prevod i predgovor}{prevod i predgovor}},
+ bytranslatorin = {{prevod i uvod}{prevod i uvod}},
+ candthesis = {{kandidatski rad}{kandidatski rad}},
+ chapter = {{glava}{glava}},
+ circa = {{cirka}{cca}},
+ citedas = {{citirano kao}{cit\adddotspace kao}},
+ collaborator = {{saradnik}{sar\adddot}},
+ collaborators = {{saradnici}{sar\adddot}},
+ column = {{stupac}{stupac}},
+ columns = {{stupci}{stupci}},
+ columntotal = {{stupac}{stupac}},
+ columntotals = {{stupci}{stupci}},
+ commentary = {{komentar}{kom\adddot}},
+ commentator = {{komentator}{kom\adddot}},
+ commentators = {{komentatori}{kom\adddot}},
+ commonera = {{nove ere}{n.\addnbspace e\adddot}},
+ compiler = {{prire\dj iva\v c}{prire\dj iva\v c}},
+ compilers = {{priredili}{priredili}},
+ confer = {{cf\adddot}{cf\adddot}},
+ continuator = {{nastavlja\v c}{nast\adddot}},
+ continuators = {{nastavlja\v ci}{nast\adddot}},
+ countryde = {{Nema\v cka}{DE}},
+ countryep = {{Evropska unija}{EP}},
+ countryeu = {{Evropska unija}{EU}},
+ countryfr = {{Francuska}{FR}},
+ countryuk = {{Velika Britanija}{GB}},
+ countryus = {{Sjedinjene Ameri\v cke Dr\v zave}{SAD}},
+ datacd = {{CD-ROM}{CD-ROM}},
+ december = {{decembar}{dec\adddot}},
+ edition = {{izdanje}{izdanje}},
+ editor = {{urednik}{ur\adddot}},
+ editoraf = {{urednik i autor pogovora}{urednik i autor pogovora}},
+ editoran = {{urednik i autor bele\v zaka}{urednik i autor bele\v zaka}},
+ editoranaf = {{urednik, autor bele\v zaka i autor pogovora}{urednik, autor bele\v zaka i autor pogovora}},
+ editoranfo = {{urednik, autor bele\v zaka i autor predgovora}{urednik, autor bele\v zaka i autor predgovora}},
+ editoranin = {{urednik, autor bele\v zaka i autor uvoda}{urednik, autor bele\v zaka i autor uvoda}},
+ editorco = {{urednik i komentator}{urednik i komentator}},
+ editorcoaf = {{urednik, komentator i autor pogovora}{urednik, komentator i autor pogovora}},
+ editorcofo = {{urednik, komentator i autor predgovora}{urednik, komentator i autor predgovora}},
+ editorcoin = {{urednik, komentator i autor uvoda}{urednik, komentator i autor uvoda}},
+ editorfo = {{urednik i autor predgovora}{urednik i autor predgovora}},
+ editorin = {{urednik i autor uvoda}{urednik i autor uvoda}},
+ editors = {{urednici}{urednici}},
+ editorsaf = {{urednici i pisci pogovora}{urednici i pisci pogovora}},
+ editorsan = {{urednici i autori bele\v zaka}{urednici i autori bele\v zaka}},
+ editorsanaf = {{urednici, autori bele\v zaka i autori pogovora}{urednici, autori bele\v zaka i autori pogovora}},
+ editorsanfo = {{urednici, autori bele\v zaka i autori predgovora}{urednici, autori bele\v zaka i autori predgovora}},
+ editorsanin = {{urednici, autori bele\v zaka i autori uvoda}{urednici, autori bele\v zaka i autori uvoda}},
+ editorsco = {{urednici i komentatori}{urednici i komentatori}},
+ editorscoaf = {{urednici, komentatori i pisci pogovora}{urednici, komentatori i pisci pogovora}},
+ editorscofo = {{urednici, komentatori i autori predgovora}{urednici, komentatori i autori predgovora}},
+ editorscoin = {{urednici, komentatori i autori uvoda}{urednici, komentatori i autori uvoda}},
+ editorsfo = {{urednici i pisci predgovora}{urednici i pisci predgovora}},
+ editorsin = {{urednici i autori uvoda}{urednici i autori uvoda}},
+ editorstr = {{urednici i prevodioci}{urednici i prevodioci}},
+ editorstraf = {{urednici, prevodioci i autori pogovora}{urednici, prevodioci i autori pogovora}},
+ editorstran = {{urednici, prevodioci i autori bele\v zaka}{urednici, prevodioci i autori bele\v zaka}},
+ editorstranaf = {{urednici, prevodioci, autori bele\v zaka i pisci pogovora}{urednici, prevodioci, autori bele\v zaka i pisci pogovora}},
+ editorstranfo = {{urednici, prevodioci, autori bele\v zaka i autori predgovora}{urednici, prevodioci, autori bele\v zaka i autori predgovora}},
+ editorstranin = {{urednici, prevodioci, autori bele\v zaka i autori uvoda}{urednici, prevodioci, autori bele\v zaka i autori uvoda}},
+ editorstrco = {{urednici, prevodioci i komentatori}{urednici, prevodioci i komentatori}},
+ editorstrcoaf = {{urednici, prevodioci, komentatori i pisci pogovora}{urednici, prevodioci, komentatori i pisci pogovora}},
+ editorstrcofo = {{urednici, prevodioci, komentatori i autori predgovora}{urednici, prevodioci, komentatori i autori predgovora}},
+ editorstrcoin = {{urednici, prevodioci, komentatori i autori uvoda}{urednici, prevodioci, komentatori i autori uvoda}},
+ editorstrfo = {{urednici, prevodioci i autori predgovora}{urednici, prevodioci i autori predgovora}},
+ editorstrin = {{urednici, prevodioci i autori uvoda}{urednici, prevodioci i autori uvoda}},
+ editortr = {{urednik i prevodilac}{urednik i prevodilac}},
+ editortraf = {{urednik, prevodilac i autor pogovora}{urednik, prevodilac i autor pogovora}},
+ editortran = {{urednik, prevodilac i autor bele\v zaka}{urednik, prevodilac i autor bele\v zaka}},
+ editortranaf = {{urednik, prevodilac, autor bele\v zaka i autor pogovora}{urednik, prevodilac, autor bele\v zaka i autor pogovora}},
+ editortranfo = {{urednik, prevodilac, autor bele\v zaka i autor predgovora}{urednik, prevodilac, autor bele\v zaka i autor predgovora}},
+ editortranin = {{urednik, prevodilac, autor bele\v zaka i autor uvoda}{urednik, prevodilac, autor bele\v zaka i autor uvoda}},
+ editortrco = {{urednik, prevodilac i komentator}{urednik, prevodilac i komentator}},
+ editortrcoaf = {{urednik, prevodilac, komentator i autor pogovora}{urednik, prevodilac, komentator i autor pogovora}},
+ editortrcofo = {{urednik, prevodilac, komentator i autor predgovora}{urednik, prevodilac, komentator i autor predgovora}},
+ editortrcoin = {{urednik, prevodilac, komentator i autor uvoda}{urednik, prevodilac, komentator i autor uvoda}},
+ editortrfo = {{urednik, prevodilac i autor predgovora}{urednik, prevodilac i autor predgovora}},
+ editortrin = {{urednik, prevodilac i autor uvoda}{urednik, prevodilac i autor uvoda}},
+ february = {{februar}{feb\adddot}},
+ file = {{datoteka}{datoteka}},
+ foreword = {{predgovor}{predgovor}},
+ forthcoming = {{dolaze\'ce}{dolaze\'ce}},
+ founder = {{osniva\v c}{osn\adddot}},
+ founders = {{osniva\v ci}{osn\adddot}},
+ fromamerican = {{sa ameri\v ckog}{sa ameri\v ckog}},
+ frombrazilian = {{sa brazilskog}{sa brazilskog}},
+ frombulgarian = {{sa bugarskog}{sa bugarskog}},
+ fromcatalan = {{sa katalonskog}{sa katalonskog}},
+ fromcroatian = {{sa hrvatskog}{sa hrvatskog}},
+ fromczech = {{sa \v ce\v skog}{sa \v ce\v skog}},
+ fromdanish = {{sa danskog}{sa danskog}},
+ fromdutch = {{sa holandskog}{sa holandskog}},
+ fromenglish = {{sa engleskog}{sa engleskog}},
+ fromestonian = {{sa estonskog}{sa estonskog}},
+ fromfinnish = {{sa finskog}{sa finskog}},
+ fromfrench = {{sa francuskog}{sa francuskog}},
+ fromgalician = {{sa galicijskog}{sa galicijskog}},
+ fromgerman = {{sa nema\v ckog}{sa nema\v ckog}},
+ fromgreek = {{sa gr\v ckog}{sa gr\v ckog}},
+ fromhungarian = {{sa ma\dj arskog}{sa ma\dj arskog}},
+ fromitalian = {{sa italijanskog}{sa italijanskog}},
+ fromjapanese = {{sa japanskog}{sa japanskog}},
+ fromlatin = {{sa latinskog}{sa latinskog}},
+ fromlatvian = {{sa letonskog}{sa letonskog}},
+ fromnorwegian = {{sa norve\v skog}{sa norve\v skog}},
+ frompolish = {{sa poljskog}{sa poljskog}},
+ fromportuguese = {{sa portugalskog}{sa portugalskog}},
+ fromrussian = {{sa ruskog}{sa ruskog}},
+ fromslovak = {{sa slova\v ckog}{sa slova\v ckog}},
+ fromslovene = {{sa slovena\v ckog}{sa slovena\v ckog}},
+ fromspanish = {{sa \v spanskog}{sa \v spanskog}},
+ fromswedish = {{sa \v svedskog}{sa \v svedskog}},
+ fromukrainian = {{sa ukrajinskog}{sa ukrajinskog}},
+ ibidem = {{ibidem}{ibid\adddot}},
+ idem = {{idem}{idem}},
+ idempf = {{eaedem}{eaedem}},
+ idempm = {{eidem}{eidem}},
+ idempn = {{eadem}{eadem}},
+ idempp = {{eidem}{eidem}},
+ idemsf = {{eadem}{eadem}},
+ idemsm = {{idem}{idem}},
+ idemsn = {{idem}{idem}},
+ in = {{u}{u}},
+ inpreparation = {{u pripremi}{u pripremi}},
+ inpress = {{u \v stampi}{u \v stampi}},
+ inseries = {{u}{u}},
+ introduction = {{uvod}{uv\adddot}},
+ involumes = {{u}{u}},
+ issue = {{izdanje}{izdanje}},
+ january = {{januar}{jan\adddot}},
+ jourser = {{serija}{ser\adddot}},
+ jourvol = {{sveska}{sv\adddot}},
+ july = {{jul}{jul}},
+ june = {{jun}{jun}},
+ langamerican = {{ameri\v cki}{ameri\v cki}},
+ langbrazilian = {{brazilski}{brazilski}},
+ langbulgarian = {{bugarski}{bugarski}},
+ langcatalan = {{katalanski}{katalanski}},
+ langcroatian = {{hrvatski}{hrvatski}},
+ langczech = {{\v ce\v ski}{\v ce\v ski}},
+ langdanish = {{danski}{danski}},
+ langdutch = {{holandski}{holandski}},
+ langenglish = {{engleski}{engleski}},
+ langestonian = {{estonski}{estonski}},
+ langfinnish = {{finski}{finski}},
+ langfrench = {{francuski}{francuski}},
+ langgalician = {{galicijski}{galicijski}},
+ langgerman = {{nema\v cki}{nema\v cki}},
+ langgreek = {{gr\v cki}{gr\v cki}},
+ langhungarian = {{ma\dj arski}{ma\dj arski}},
+ langitalian = {{italijanski}{italijanski}},
+ langjapanese = {{japanski}{japanski}},
+ langlatin = {{latinski}{latinski}},
+ langlatvian = {{letonski}{letonski}},
+ langnorwegian = {{norve\v ski}{norve\v ski}},
+ langpolish = {{poljski}{poljski}},
+ langportuguese = {{portugalski}{portugalski}},
+ langrussian = {{ruski}{ruski}},
+ langslovak = {{slova\v cki}{slova\v cki}},
+ langslovene = {{slovena\v cki}{slovena\v cki}},
+ langspanish = {{\v spanski}{\v spanski}},
+ langswedish = {{\v svedski}{\v svedski}},
+ langukrainian = {{ukrajinski}{ukrajinski}},
+ library = {{biblioteka}{biblioteka}},
+ line = {{red}{r\adddot}},
+ lines = {{redovi}{r\adddot}},
+ linetotal = {{red}{r\adddot}},
+ linetotals = {{redovi}{r\adddot}},
+ loccit = {{loc\adddotspace cit\adddot}{loc\adddotspace cit\adddot}},
+ march = {{mart}{mar\adddot}},
+ mathesis = {{master rad}{master rad}},
+ may = {{maj}{maj}},
+ newseries = {{nova serija}{nova serija}},
+ nodate = {{bez datuma}{bez datuma}},
+ november = {{novembar}{nov\adddot}},
+ number = {{broj}{br\adddot}},
+ october = {{oktobar}{okt\adddot}},
+ ofseries = {{serija}{ser\adddot}},
+ oldseries = {{stara serija}{stara serija}},
+ opcit = {{op\adddotspace cit\adddot}{op\adddotspace cit\adddot}},
+ organizer = {{organizator}{org\adddot}},
+ organizers = {{organizatori}{org\adddot}},
+ origpubas = {{originalno izdato kao}{originalno izdato kao}},
+ origpubin = {{originalno izdato}{originalno izdato}},
+ page = {{strana}{str\adddot}},
+ pages = {{strane}{str\adddot}},
+ pagetotal = {{strana}{str\adddot}},
+ pagetotals = {{strane}{str\adddot}},
+ paragraph = {{pasus}{pas\adddot}},
+ paragraphs = {{pasusi}{pas\adddot}},
+ paragraphtotal = {{pasus}{pas\adddot}},
+ paragraphtotals = {{pasusi}{pas\adddot}},
+ part = {{deo}{deo}},
+ passim = {{passim}{pass\adddot}},
+ patent = {{patent}{pat\adddot}},
+ patentde = {{nema\v cki patent}{nem\adddot\ pat\adddot}},
+ patenteu = {{evropski patent}{evr\adddot\ pat\adddot}},
+ patentfr = {{francuski patent}{franc\adddot\ pat\adddot}},
+ patentuk = {{britanski patent}{brit\adddot\ pat\adddot}},
+ patentus = {{SAD patent}{SAD pat\adddot}},
+ patreq = {{zahtev za patent}{zahtev za patent}},
+ patreqde = {{nema\v cki zahtev za patent}{nema\v cki zahtev za patent}},
+ patreqeu = {{evropski zahtev za patent}{evropski zahtev za patent}},
+ patreqfr = {{francuski zahtev za patent}{francuski zahtev za patent}},
+ patrequk = {{britanski zahtev za patent}{britanski zahtev za patent}},
+ patrequs = {{SAD zahtev za patent}{SAD zahtev za patent}},
+ phdthesis = {{doktorska teza}{doktorska teza}},
+ pm = {{PM}{PM}},
+ prepublished = {{preliminarno izdanje}{preliminarno izdanje}},
+ quotedin = {{citirano u}{cit\adddotspace u}},
+ redactor = {{redaktor}{red\adddot}},
+ redactors = {{redaktori}{red\adddot}},
+ references = {{Literatura}{Literatura}},
+ reprint = {{reprint}{reprint}},
+ reprintas = {{ponovo izdato kao kao}{ponovo izdato kao kao}},
+ reprintfrom = {{reprint iz}{reprint iz}},
+ reprintof = {{reprint}{reprint}},
+ resreport = {{istra\v ziva\v cki izve\v staj}{istra\v ziva\v cki izve\v staj}},
+ reviewof = {{recenzija}{recenzija}},
+ reviser = {{korektor}{korektor}},
+ revisers = {{korektori}{korektori}},
+ section = {{sekcija}{sek\adddot}},
+ sections = {{sekcije}{sek\adddot}},
+ sectiontotal = {{sekcija}{sek\adddot}},
+ sectiontotals = {{sekcije}{sek\adddot}},
+ see = {{vidi}{vidi}},
+ seealso = {{vidi\addabbrvspace i}{vidi}},
+ seenote = {{vidi fusnotu}{vidi fusnotu}},
+ september = {{septembar}{sept\adddot}},
+ sequens = {{sq\adddot}{sq\adddot}},
+ sequentes = {{sqq\adddot}{sqq\adddot}},
+ shorthands = {{Spisak skra\'cenica}{Skra\'cenice}},
+ software = {{ra\v cunarski softver}{ra\v c\adddot\ softver}},
+ spring = {{prole\'ce}{prole\'ce}},
+ submitted = {{poslato}{poslato}},
+ summer = {{leto}{leto}},
+ techreport = {{tehni\v cki izve\v staj}{tehn\adddotspace izv\adddot}},
+ thiscite = {{posebno}{posebno}},
+ translationas = {{prevedeno kao}{prevedeno kao}},
+ translationfrom = {{prevedeno sa}{prevedeno sa}},
+ translationof = {{prevod}{prevod}},
+ translator = {{prevodilac}{prevodilac}},
+ translatoraf = {{prevodilac i autor pogovora}{prevodilac i autor pogovora}},
+ translatoran = {{prevodilac i anotator}{prevodilac i anotator}},
+ translatoranaf = {{prevodilac, autor anotacija i autor pogovora}{prevodilac, autor anotacija i autor pogovora}},
+ translatoranfo = {{prevodilac, autor anotacija i autor predgovora}{prevodilac, autor anotacija i autor predgovora}},
+ translatoranin = {{prevodilac, autor anotacija i autor uvoda}{prevodilac, autor anotacija i autor uvoda}},
+ translatorco = {{prevodilac i komentator}{prevodilac i komentator}},
+ translatorcoaf = {{prevodilac, komentar i autor pogovora}{prevodilac, komentar i autor pogovora}},
+ translatorcofo = {{prevodilac, komentar i autor predgovora}{prevodilac, komentar i autor predgovora}},
+ translatorcoin = {{prevodilac, komentar i autor uvoda}{prevodilac, komentar i autor uvoda}},
+ translatorfo = {{prevodilac i autor predgovora}{prevodilac i autor predgovora}},
+ translatorin = {{prevodilac i autor uvoda}{prevodilac i autor uvoda}},
+ translators = {{prevodioci}{prevodioci}},
+ translatorsaf = {{prevodilac i autor pogovora}{prevodilac i autor pogovora}},
+ translatorsan = {{prevodioci i autori bele\v ski}{prevodioci i autori bele\v ski}},
+ translatorsanaf = {{prevodilac, autor anotacija i autor pogovora}{prevodilac, autor anotacija i autor pogovora}},
+ translatorsanfo = {{prevodilac, autor anotacija i autor predgovora}{prevodilac, autor anotacija i autor predgovora}},
+ translatorsanin = {{prevodilac, autor anotacija i autor uvoda}{prevodilac, autor anotacija i autor uvoda}},
+ translatorsco = {{prevodioci i komentatori}{prevodioci i komentatori}},
+ translatorscoaf = {{prevodilac, komentar i autor pogovora}{prevodilac, komentar i autor pogovora}},
+ translatorscofo = {{prevodilac, komentar i autor predgovora}{prevodilac, komentar i autor predgovora}},
+ translatorscoin = {{prevodilac, komentar i autor uvoda}{prevodilac, komentar i autor uvoda}},
+ translatorsfo = {{prevodilac i autor predgovora}{prevodilac i autor predgovora}},
+ translatorsin = {{prevodilac i autor uvoda}{prevodilac i autor uvoda}},
+ url = {{adresa}{adresa}},
+ urlfrom = {{dostupno na}{dostupno na}},
+ urlseen = {{pose\'ceno}{pose\'ceno}},
+ verse = {{strofa}{str\adddot}},
+ verses = {{strofe}{str\adddot}},
+ versetotal = {{strofa}{str\adddot}},
+ versetotals = {{strofe}{str\adddot}},
+ version = {{verzija}{verzija}},
+ volume = {{sveska}{sv\adddot}},
+ volumes = {{sveske}{sv\adddot}},
+ winter = {{zima}{zima}},
+ withafterword = {{sa pogovorom}{sa pogovorom}},
+ withannotator = {{sa bele\v skama}{sa bele\v skama}},
+ withcommentator = {{sa komentarom}{sa komentarom}},
+ withforeword = {{sa predgovorom}{sa predgovorom}},
+ withintroduction = {{sa uvodom}{sa uvodom}},
+}
+
+\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/biblatex-ms/latex/lbx/serbianc-ms.lbx b/macros/latex/contrib/biblatex-ms/latex/lbx/serbianc-ms.lbx
new file mode 100644
index 0000000000..699d8033cf
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/lbx/serbianc-ms.lbx
@@ -0,0 +1,466 @@
+\ProvidesFile{serbianc-ms.lbx}
+[\abx@lbxid]
+
+% Translator's notes:
+%
+% This file is generated from a template and YAML localization string
+% collection by a script
+% You can said files at https://gitlab.com/andrejr/biblatex-serbian.
+% Please don't modify this file by hand -- contribute your changes upstream and
+% then send a pull request with the generated file to the official biblatex
+% repo (https://github.com/plk/biblatex).
+%
+% This is done so we could generate both `serbian.lbx` (Latin) and
+% `serbianc.lbx` (Cyrillic) from the same set of localization strings.
+
+\lbx@ifutfinput
+ {}
+ {\PackageError{biblatex}
+ {Serbian Cyrillic biblatex localization requires UTF-8 support}
+ {The 'serbianc.lbx' file requires UTF-8 encoding but you
+ seem\MessageBreak to be using a different encoding.
+ This is a fatal error. I will\MessageBreak abort loading
+ serbianc.lbx now.}%
+ \endinput}
+
+\DeclareRedundantLanguages{serbianc}{serbianc}
+
+\DeclareBibliographyExtras{%
+ \protected\def\bibrangedash{\textendash\penalty\hyphenpenalty}%
+ \protected\def\mkbibordinal#1{\stripzeros{#1}\adddot}%
+ \protected\def\mkbibmascord{\mkbibordinal}%
+ \protected\def\mkbibfemord{\mkbibordinal}%
+ \protected\def\mkbibneutord{\mkbibordinal}%
+ \protected\def\bibtimesep{.}%
+ %\savecommand\mkbibordedition
+ %\savecommand\mkbibordseries
+ \def\mkbibordedition{\mkbibordinal}%
+ \def\mkbibordseries{\mkbibfemord}%
+ \protected\def\mkbibdatelong#1#2#3{%
+ % day field
+ \iffieldundef{#3}{}{\mkbibordinal{\thefield{#3}}% if day exists, display
+ \iffieldundef{#2}{}{\nobreakspace}}% space before month if month exists
+ % month field
+ \iffieldundef{#2}{}{\mkbibmonth{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}}% space before year if year exists
+ % year field
+ \iffieldbibstring{#1}% year
+ {\bibstring{\thefield{#1}}}%
+ {\dateeraprintpre{#1}\mkbibordinal{\thefield{#1}}}}%
+ \protected\def\mkbibdateshort#1#2#3{%
+ \iffieldundef{#3}{}{\mkbibordinal{\thefield{#3}}%
+ \iffieldundef{#2}{}{\addnbspace}}%
+ \iffieldundef{#2}{}{\mkbibordinal{\thefield{#2}}%
+ \iffieldundef{#1}{}{\addnbspace}}%
+ \iffieldbibstring{#1}{\bibstring{\thefield{#1}}}%
+ {\dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}\adddot}}%
+ \expandafter\protected\expandafter\def\csname mkbibtime24h\endcsname#1#2#3#4{%
+ \iffieldundef{#1}
+ {}
+ {\mktimezeros{\thefield{#1}}%
+ \iffieldundef{#2}{}{\bibtimesep}}%
+ \iffieldundef{#2}
+ {}
+ {\mktimezeros{\thefield{#2}}%
+ \iffieldundef{#3}{}{\bibtimesep}}%
+ \iffieldundef{#3}
+ {}
+ {\mktimezeros{\thefield{#3}}}%
+ \iffieldundef{#4}{}
+ {\bibtimezonesep
+ \mkbibtimezone{\thefield{#4}}}}%
+ \expandafter\protected\expandafter\def\csname mkbibtime12h%
+ \endcsname#1#2#3#4{%
+ \stripzeros{\mktimehh{\thefield{#1}}}\bibtimesep%
+ \forcezerosmdt{\thefield{#2}}%
+ \iffieldundef{#3}{}
+ {\bibtimesep%
+ \forcezerosmdt{\thefield{#3}}}%
+ \space
+ \ifnumless{\thefield{#1}}{12}
+ {\bibstring{am}}
+ {\bibstring{pm}}%
+ \iffieldundef{#4}{}
+ {\space\bibtimezonesep%
+ \parentext{\mkbibtimezone{\thefield{#4}}}}}%
+ \protected\def\mkbibyeardivisiondateshort#1#2{%
+ \mkbibyeardivision{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}%
+ \dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}\adddot}%
+ \protected\def\mkbibyeardivisiondatelong#1#2{%
+ \mkbibyeardivision{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}%
+ \dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}\adddot}%
+}
+
+\DeclareBibliographyStrings{%
+ abstract = {{апстракт}{апстракт}},
+ afterword = {{поговор}{поговор}},
+ am = {{AM}{AM}},
+ and = {{и}{и}},
+ andmore = {{и други}{и\addabbrvspace др\adddot}},
+ andothers = {{и други}{и\addabbrvspace др\adddot}},
+ annodomini = {{после Христа}{п\adddotspace Хр\adddot}},
+ annotation = {{белешка}{бел\adddot}},
+ annotations = {{белешке}{бел\adddot}},
+ annotator = {{аутор бележака}{аут\adddot\ бел\adddot}},
+ annotators = {{аутори бележака}{аут\adddot\ бел\adddot}},
+ april = {{април}{апр\adddot}},
+ astitle = {{под насловом}{под насловом}},
+ audiocd = {{аудио ЦД}{аудио ЦД}},
+ august = {{август}{авг\adddot}},
+ autumn = {{јесен}{јесен}},
+% springN = {{}{}},% FIXME: missing
+% summerN = {{}{}},% FIXME: missing
+% autumnN = {{}{}},% FIXME: missing
+% winterN = {{}{}},% FIXME: missing
+% springS = {{}{}},% FIXME: missing
+% summerS = {{}{}},% FIXME: missing
+% autumnS = {{}{}},% FIXME: missing
+% winterS = {{}{}},% FIXME: missing
+% Q1 = {{}{}},% FIXME: missing
+% Q2 = {{}{}},% FIXME: missing
+% Q3 = {{}{}},% FIXME: missing
+% Q4 = {{}{}},% FIXME: missing
+% QD1 = {{}{}},% FIXME: missing
+% QD2 = {{}{}},% FIXME: missing
+% QD3 = {{}{}},% FIXME: missing
+% S1 = {{}{}},% FIXME: missing
+% S2 = {{}{}},% FIXME: missing
+ backrefpage = {{цитирано на страници}{цит\adddot\ на стр\adddot}},
+ backrefpages = {{цитирано на страницама}{цит\adddot\ на стр\adddot}},
+ bathesis = {{бачелор рад}{БА\addabbrvspace рад}},
+ beforechrist = {{пре Христа}{пр\adddotspace Хр\adddot}},
+ beforecommonera = {{пре нове ере}{пре\addabbrvspace н\adddotspace е\adddot}},
+ bibliography = {{Библиографија}{Библиографија}},
+ book = {{књига}{књ\adddot}},
+ byannotator = {{аутор бележака}{аутор бележака}},
+ byauthor = {{аутор}{аутор}},
+ bycollaborator = {{у сарадњи са}{у сарадњи са}},
+ bycommentator = {{коментар}{коментар}},
+ bycompiler = {{одабир}{одабир}},
+ bycontinuator = {{аутор наставка}{аутор наставка}},
+ byeditor = {{уредник}{уредник}},
+ byeditoraf = {{обрада и поговор}{обрада и поговор}},
+ byeditoran = {{обрада и белешке}{обрада и белешке}},
+ byeditoranaf = {{обрада, белешке и поговор}{обрада, белешке и поговор}},
+ byeditoranfo = {{обрада, белешке и предговор}{обрада, белешке и предговор}},
+ byeditoranin = {{обрада, белешке и увод}{обрада, белешке и увод}},
+ byeditorco = {{обрада и коментар}{обрада и коментар}},
+ byeditorcoaf = {{обрада, коментар и поговор}{обрада, коментар и поговор}},
+ byeditorcofo = {{обрада, коментар и предговор}{обрада, коментар и предговор}},
+ byeditorcoin = {{обрада, коментар и увод}{обрада, коментар и увод}},
+ byeditorfo = {{обрада и предговор}{обрада и предговор}},
+ byeditorin = {{обрада и увод}{обрада и увод}},
+ byeditortr = {{обрада и превод}{обрада и превод}},
+ byeditortraf = {{обрада, превод и поговор}{обрада, превод и поговор}},
+ byeditortran = {{обрада, превод и белешке}{обрада, превод и белешке}},
+ byeditortranaf = {{обрада, превод, белешке и поговор}{обрада, превод, белешке и поговор}},
+ byeditortranfo = {{обрада, превод, белешке и предговор}{обрада, превод, белешке и предговор}},
+ byeditortranin = {{обрада, превод, белешке и увод}{обрада, превод, белешке и увод}},
+ byeditortrco = {{обрада, превод и коментар}{обрада, превод и коментар}},
+ byeditortrcoaf = {{обрада, превод, коментар и поговор}{обрада, превод, коментар и поговор}},
+ byeditortrcofo = {{обрада, превод, коментар и предговор}{обрада, превод, коментар и предговор}},
+ byeditortrcoin = {{обрада, превод, коментар и увод}{обрада, превод, коментар и увод}},
+ byeditortrfo = {{обрада, превод и предговор}{обрада, превод и предговор}},
+ byeditortrin = {{обрада, превод и увод}{обрада, превод и увод}},
+ byfounder = {{оснивач}{оснивач}},
+ byorganizer = {{организатор}{организатор}},
+ bypublisher = {{издавач}{издавач}},
+ byredactor = {{редактор}{редактор}},
+ byreviewer = {{рецензент}{рецензент}},
+ byreviser = {{коректор}{коректор}},
+ bytranslator = {{превод}{превод}},
+ bytranslatoraf = {{превод и поговор}{превод и поговор}},
+ bytranslatoran = {{превод и белешке}{превод и белешке}},
+ bytranslatoranaf = {{превод, белешке и поговор}{превод, белешке и поговор}},
+ bytranslatoranfo = {{превод, белешке и предговор}{превод, белешке и предговор}},
+ bytranslatoranin = {{превод, белешке и увод}{превод, белешке и увод}},
+ bytranslatorco = {{превод и коментар}{превод и коментар}},
+ bytranslatorcoaf = {{превод, коментар и поговор}{превод, коментар и поговор}},
+ bytranslatorcofo = {{превод, коментар и предговор}{превод, коментар и предговор}},
+ bytranslatorcoin = {{превод, коментар и увод}{превод, коментар и увод}},
+ bytranslatorfo = {{превод и предговор}{превод и предговор}},
+ bytranslatorin = {{превод и увод}{превод и увод}},
+ candthesis = {{кандидатски рад}{кандидатски рад}},
+ chapter = {{глава}{глава}},
+ circa = {{цирка}{cca}},
+ citedas = {{цитирано као}{цит\adddotspace као}},
+ collaborator = {{сарадник}{сар\adddot}},
+ collaborators = {{сарадници}{сар\adddot}},
+ column = {{ступац}{ступац}},
+ columns = {{ступци}{ступци}},
+ columntotal = {{ступац}{ступац}},
+ columntotals = {{ступци}{ступци}},
+ commentary = {{коментар}{ком\adddot}},
+ commentator = {{коментатор}{ком\adddot}},
+ commentators = {{коментатори}{ком\adddot}},
+ commonera = {{нове ере}{н.\addnbspace е\adddot}},
+ compiler = {{приређивач}{приређивач}},
+ compilers = {{приредили}{приредили}},
+ confer = {{cf\adddot}{cf\adddot}},
+ continuator = {{настављач}{наст\adddot}},
+ continuators = {{настављачи}{наст\adddot}},
+ countryde = {{Немачка}{ДЕ}},
+ countryep = {{Европска унија}{ЕП}},
+ countryeu = {{Европска унија}{ЕУ}},
+ countryfr = {{Француска}{ФР}},
+ countryuk = {{Велика Британија}{ГБ}},
+ countryus = {{Сједињене Америчке Државе}{САД}},
+ datacd = {{CD-ROM}{CD-ROM}},
+ december = {{децембар}{дец\adddot}},
+ edition = {{издање}{издање}},
+ editor = {{уредник}{ур\adddot}},
+ editoraf = {{уредник и аутор поговора}{уредник и аутор поговора}},
+ editoran = {{уредник и аутор бележака}{уредник и аутор бележака}},
+ editoranaf = {{уредник, аутор бележака и аутор поговора}{уредник, аутор бележака и аутор поговора}},
+ editoranfo = {{уредник, аутор бележака и аутор предговора}{уредник, аутор бележака и аутор предговора}},
+ editoranin = {{уредник, аутор бележака и аутор увода}{уредник, аутор бележака и аутор увода}},
+ editorco = {{уредник и коментатор}{уредник и коментатор}},
+ editorcoaf = {{уредник, коментатор и аутор поговора}{уредник, коментатор и аутор поговора}},
+ editorcofo = {{уредник, коментатор и аутор предговора}{уредник, коментатор и аутор предговора}},
+ editorcoin = {{уредник, коментатор и аутор увода}{уредник, коментатор и аутор увода}},
+ editorfo = {{уредник и аутор предговора}{уредник и аутор предговора}},
+ editorin = {{уредник и аутор увода}{уредник и аутор увода}},
+ editors = {{уредници}{уредници}},
+ editorsaf = {{уредници и писци поговора}{уредници и писци поговора}},
+ editorsan = {{уредници и аутори бележака}{уредници и аутори бележака}},
+ editorsanaf = {{уредници, аутори бележака и аутори поговора}{уредници, аутори бележака и аутори поговора}},
+ editorsanfo = {{уредници, аутори бележака и аутори предговора}{уредници, аутори бележака и аутори предговора}},
+ editorsanin = {{уредници, аутори бележака и аутори увода}{уредници, аутори бележака и аутори увода}},
+ editorsco = {{уредници и коментатори}{уредници и коментатори}},
+ editorscoaf = {{уредници, коментатори и писци поговора}{уредници, коментатори и писци поговора}},
+ editorscofo = {{уредници, коментатори и аутори предговора}{уредници, коментатори и аутори предговора}},
+ editorscoin = {{уредници, коментатори и аутори увода}{уредници, коментатори и аутори увода}},
+ editorsfo = {{уредници и писци предговора}{уредници и писци предговора}},
+ editorsin = {{уредници и аутори увода}{уредници и аутори увода}},
+ editorstr = {{уредници и преводиоци}{уредници и преводиоци}},
+ editorstraf = {{уредници, преводиоци и аутори поговора}{уредници, преводиоци и аутори поговора}},
+ editorstran = {{уредници, преводиоци и аутори бележака}{уредници, преводиоци и аутори бележака}},
+ editorstranaf = {{уредници, преводиоци, аутори бележака и писци поговора}{уредници, преводиоци, аутори бележака и писци поговора}},
+ editorstranfo = {{уредници, преводиоци, аутори бележака и аутори предговора}{уредници, преводиоци, аутори бележака и аутори предговора}},
+ editorstranin = {{уредници, преводиоци, аутори бележака и аутори увода}{уредници, преводиоци, аутори бележака и аутори увода}},
+ editorstrco = {{уредници, преводиоци и коментатори}{уредници, преводиоци и коментатори}},
+ editorstrcoaf = {{уредници, преводиоци, коментатори и писци поговора}{уредници, преводиоци, коментатори и писци поговора}},
+ editorstrcofo = {{уредници, преводиоци, коментатори и аутори предговора}{уредници, преводиоци, коментатори и аутори предговора}},
+ editorstrcoin = {{уредници, преводиоци, коментатори и аутори увода}{уредници, преводиоци, коментатори и аутори увода}},
+ editorstrfo = {{уредници, преводиоци и аутори предговора}{уредници, преводиоци и аутори предговора}},
+ editorstrin = {{уредници, преводиоци и аутори увода}{уредници, преводиоци и аутори увода}},
+ editortr = {{уредник и преводилац}{уредник и преводилац}},
+ editortraf = {{уредник, преводилац и аутор поговора}{уредник, преводилац и аутор поговора}},
+ editortran = {{уредник, преводилац и аутор бележака}{уредник, преводилац и аутор бележака}},
+ editortranaf = {{уредник, преводилац, аутор бележака и аутор поговора}{уредник, преводилац, аутор бележака и аутор поговора}},
+ editortranfo = {{уредник, преводилац, аутор бележака и аутор предговора}{уредник, преводилац, аутор бележака и аутор предговора}},
+ editortranin = {{уредник, преводилац, аутор бележака и аутор увода}{уредник, преводилац, аутор бележака и аутор увода}},
+ editortrco = {{уредник, преводилац и коментатор}{уредник, преводилац и коментатор}},
+ editortrcoaf = {{уредник, преводилац, коментатор и аутор поговора}{уредник, преводилац, коментатор и аутор поговора}},
+ editortrcofo = {{уредник, преводилац, коментатор и аутор предговора}{уредник, преводилац, коментатор и аутор предговора}},
+ editortrcoin = {{уредник, преводилац, коментатор и аутор увода}{уредник, преводилац, коментатор и аутор увода}},
+ editortrfo = {{уредник, преводилац и аутор предговора}{уредник, преводилац и аутор предговора}},
+ editortrin = {{уредник, преводилац и аутор увода}{уредник, преводилац и аутор увода}},
+ february = {{фебруар}{феб\adddot}},
+ file = {{датотека}{датотека}},
+ foreword = {{предговор}{предговор}},
+ forthcoming = {{долазеће}{долазеће}},
+ founder = {{оснивач}{осн\adddot}},
+ founders = {{оснивачи}{осн\adddot}},
+ fromamerican = {{са америчког}{са америчког}},
+ frombrazilian = {{са бразилског}{са бразилског}},
+ frombulgarian = {{са бугарског}{са бугарског}},
+ fromcatalan = {{са каталонског}{са каталонског}},
+ fromcroatian = {{са хрватског}{са хрватског}},
+ fromczech = {{са чешког}{са чешког}},
+ fromdanish = {{са данског}{са данског}},
+ fromdutch = {{са холандског}{са холандског}},
+ fromenglish = {{са енглеског}{са енглеског}},
+ fromestonian = {{са естонског}{са естонског}},
+ fromfinnish = {{са финског}{са финског}},
+ fromfrench = {{са француског}{са француског}},
+ fromgalician = {{са галицијског}{са галицијског}},
+ fromgerman = {{са немачког}{са немачког}},
+ fromgreek = {{са грчког}{са грчког}},
+ fromhungarian = {{са мађарског}{са мађарског}},
+ fromitalian = {{са италијанског}{са италијанског}},
+ fromjapanese = {{са јапанског}{са јапанског}},
+ fromlatin = {{са латинског}{са латинског}},
+ fromlatvian = {{са летонског}{са летонског}},
+ fromnorwegian = {{са норвешког}{са норвешког}},
+ frompolish = {{са пољског}{са пољског}},
+ fromportuguese = {{са португалског}{са португалског}},
+ fromrussian = {{са руског}{са руског}},
+ fromslovak = {{са словачког}{са словачког}},
+ fromslovene = {{са словеначког}{са словеначког}},
+ fromspanish = {{са шпанског}{са шпанског}},
+ fromswedish = {{са шведског}{са шведског}},
+ fromukrainian = {{са украјинског}{са украјинског}},
+ ibidem = {{ibidem}{ibid\adddot}},
+ idem = {{idem}{idem}},
+ idempf = {{eaedem}{eaedem}},
+ idempm = {{eidem}{eidem}},
+ idempn = {{eadem}{eadem}},
+ idempp = {{eidem}{eidem}},
+ idemsf = {{eadem}{eadem}},
+ idemsm = {{idem}{idem}},
+ idemsn = {{idem}{idem}},
+ in = {{у}{у}},
+ inpreparation = {{у припреми}{у припреми}},
+ inpress = {{у штампи}{у штампи}},
+ inseries = {{у}{у}},
+ introduction = {{увод}{ув\adddot}},
+ involumes = {{у}{у}},
+ issue = {{издање}{издање}},
+ january = {{јануар}{јан\adddot}},
+ jourser = {{серија}{сер\adddot}},
+ jourvol = {{свеска}{св\adddot}},
+ july = {{јул}{јул}},
+ june = {{јун}{јун}},
+ langamerican = {{амерички}{амерички}},
+ langbrazilian = {{бразилски}{бразилски}},
+ langbulgarian = {{бугарски}{бугарски}},
+ langcatalan = {{каталански}{каталански}},
+ langcroatian = {{хрватски}{хрватски}},
+ langczech = {{чешки}{чешки}},
+ langdanish = {{дански}{дански}},
+ langdutch = {{холандски}{холандски}},
+ langenglish = {{енглески}{енглески}},
+ langestonian = {{естонски}{естонски}},
+ langfinnish = {{фински}{фински}},
+ langfrench = {{француски}{француски}},
+ langgalician = {{галицијски}{галицијски}},
+ langgerman = {{немачки}{немачки}},
+ langgreek = {{грчки}{грчки}},
+ langhungarian = {{мађарски}{мађарски}},
+ langitalian = {{италијански}{италијански}},
+ langjapanese = {{јапански}{јапански}},
+ langlatin = {{латински}{латински}},
+ langlatvian = {{летонски}{летонски}},
+ langnorwegian = {{норвешки}{норвешки}},
+ langpolish = {{пољски}{пољски}},
+ langportuguese = {{португалски}{португалски}},
+ langrussian = {{руски}{руски}},
+ langslovak = {{словачки}{словачки}},
+ langslovene = {{словеначки}{словеначки}},
+ langspanish = {{шпански}{шпански}},
+ langswedish = {{шведски}{шведски}},
+ langukrainian = {{украјински}{украјински}},
+ library = {{библиотека}{библиотека}},
+ line = {{ред}{р\adddot}},
+ lines = {{редови}{р\adddot}},
+ linetotal = {{ред}{р\adddot}},
+ linetotals = {{редови}{р\adddot}},
+ loccit = {{loc\adddotspace cit\adddot}{loc\adddotspace cit\adddot}},
+ march = {{март}{мар\adddot}},
+ mathesis = {{мастер рад}{мастер рад}},
+ may = {{мај}{мај}},
+ newseries = {{нова серија}{нова серија}},
+ nodate = {{без датума}{без датума}},
+ november = {{новембар}{нов\adddot}},
+ number = {{број}{бр\adddot}},
+ october = {{октобар}{окт\adddot}},
+ ofseries = {{серија}{сер\adddot}},
+ oldseries = {{стара серија}{стара серија}},
+ opcit = {{op\adddotspace cit\adddot}{op\adddotspace cit\adddot}},
+ organizer = {{организатор}{орг\adddot}},
+ organizers = {{организатори}{орг\adddot}},
+ origpubas = {{оригинално издато као}{оригинално издато као}},
+ origpubin = {{оригинално издато}{оригинално издато}},
+ page = {{страна}{стр\adddot}},
+ pages = {{стране}{стр\adddot}},
+ pagetotal = {{страна}{стр\adddot}},
+ pagetotals = {{стране}{стр\adddot}},
+ paragraph = {{пасус}{пас\adddot}},
+ paragraphs = {{пасуси}{пас\adddot}},
+ paragraphtotal = {{пасус}{пас\adddot}},
+ paragraphtotals = {{пасуси}{пас\adddot}},
+ part = {{део}{део}},
+ passim = {{passim}{pass\adddot}},
+ patent = {{патент}{пат\adddot}},
+ patentde = {{немачки патент}{нем\adddot\ пат\adddot}},
+ patenteu = {{европски патент}{евр\adddot\ пат\adddot}},
+ patentfr = {{француски патент}{франц\adddot\ пат\adddot}},
+ patentuk = {{британски патент}{брит\adddot\ пат\adddot}},
+ patentus = {{САД патент}{САД пат\adddot}},
+ patreq = {{захтев за патент}{захтев за патент}},
+ patreqde = {{немачки захтев за патент}{немачки захтев за патент}},
+ patreqeu = {{европски захтев за патент}{европски захтев за патент}},
+ patreqfr = {{француски захтев за патент}{француски захтев за патент}},
+ patrequk = {{британски захтев за патент}{британски захтев за патент}},
+ patrequs = {{САД захтев за патент}{САД захтев за патент}},
+ phdthesis = {{докторска теза}{докторска теза}},
+ pm = {{PM}{PM}},
+ prepublished = {{прелиминарно издање}{прелиминарно издање}},
+ quotedin = {{цитирано у}{цит\adddotspace у}},
+ redactor = {{редактор}{ред\adddot}},
+ redactors = {{редактори}{ред\adddot}},
+ references = {{Литература}{Литература}},
+ reprint = {{репринт}{репринт}},
+ reprintas = {{поново издато као као}{поново издато као као}},
+ reprintfrom = {{репринт из}{репринт из}},
+ reprintof = {{репринт}{репринт}},
+ resreport = {{истраживачки извештај}{истраживачки извештај}},
+ reviewof = {{рецензија}{рецензија}},
+ reviser = {{коректор}{коректор}},
+ revisers = {{коректори}{коректори}},
+ section = {{секција}{сек\adddot}},
+ sections = {{секције}{сек\adddot}},
+ sectiontotal = {{секција}{сек\adddot}},
+ sectiontotals = {{секције}{сек\adddot}},
+ see = {{види}{види}},
+ seealso = {{види\addabbrvspace и}{види}},
+ seenote = {{види фусноту}{види фусноту}},
+ september = {{септембар}{септ\adddot}},
+ sequens = {{sq\adddot}{sq\adddot}},
+ sequentes = {{sqq\adddot}{sqq\adddot}},
+ shorthands = {{Списак скраћеница}{Скраћенице}},
+ software = {{рачунарски софтвер}{рач\adddot\ софтвер}},
+ spring = {{пролеће}{пролеће}},
+ submitted = {{послато}{послато}},
+ summer = {{лето}{лето}},
+ techreport = {{технички извештај}{техн\adddotspace изв\adddot}},
+ thiscite = {{посебно}{посебно}},
+ translationas = {{преведено као}{преведено као}},
+ translationfrom = {{преведено са}{преведено са}},
+ translationof = {{превод}{превод}},
+ translator = {{преводилац}{преводилац}},
+ translatoraf = {{преводилац и аутор поговора}{преводилац и аутор поговора}},
+ translatoran = {{преводилац и анотатор}{преводилац и анотатор}},
+ translatoranaf = {{преводилац, аутор анотација и аутор поговора}{преводилац, аутор анотација и аутор поговора}},
+ translatoranfo = {{преводилац, аутор анотација и аутор предговора}{преводилац, аутор анотација и аутор предговора}},
+ translatoranin = {{преводилац, аутор анотација и аутор увода}{преводилац, аутор анотација и аутор увода}},
+ translatorco = {{преводилац и коментатор}{преводилац и коментатор}},
+ translatorcoaf = {{преводилац, коментар и аутор поговора}{преводилац, коментар и аутор поговора}},
+ translatorcofo = {{преводилац, коментар и аутор предговора}{преводилац, коментар и аутор предговора}},
+ translatorcoin = {{преводилац, коментар и аутор увода}{преводилац, коментар и аутор увода}},
+ translatorfo = {{преводилац и аутор предговора}{преводилац и аутор предговора}},
+ translatorin = {{преводилац и аутор увода}{преводилац и аутор увода}},
+ translators = {{преводиоци}{преводиоци}},
+ translatorsaf = {{преводилац и аутор поговора}{преводилац и аутор поговора}},
+ translatorsan = {{преводиоци и аутори белешки}{преводиоци и аутори белешки}},
+ translatorsanaf = {{преводилац, аутор анотација и аутор поговора}{преводилац, аутор анотација и аутор поговора}},
+ translatorsanfo = {{преводилац, аутор анотација и аутор предговора}{преводилац, аутор анотација и аутор предговора}},
+ translatorsanin = {{преводилац, аутор анотација и аутор увода}{преводилац, аутор анотација и аутор увода}},
+ translatorsco = {{преводиоци и коментатори}{преводиоци и коментатори}},
+ translatorscoaf = {{преводилац, коментар и аутор поговора}{преводилац, коментар и аутор поговора}},
+ translatorscofo = {{преводилац, коментар и аутор предговора}{преводилац, коментар и аутор предговора}},
+ translatorscoin = {{преводилац, коментар и аутор увода}{преводилац, коментар и аутор увода}},
+ translatorsfo = {{преводилац и аутор предговора}{преводилац и аутор предговора}},
+ translatorsin = {{преводилац и аутор увода}{преводилац и аутор увода}},
+ url = {{адреса}{адреса}},
+ urlfrom = {{доступно на}{доступно на}},
+ urlseen = {{посећено}{посећено}},
+ verse = {{строфа}{стр\adddot}},
+ verses = {{строфе}{стр\adddot}},
+ versetotal = {{строфа}{стр\adddot}},
+ versetotals = {{строфе}{стр\adddot}},
+ version = {{верзија}{верзија}},
+ volume = {{свеска}{св\adddot}},
+ volumes = {{свеске}{св\adddot}},
+ winter = {{зима}{зима}},
+ withafterword = {{са поговором}{са поговором}},
+ withannotator = {{са белешкама}{са белешкама}},
+ withcommentator = {{са коментаром}{са коментаром}},
+ withforeword = {{са предговором}{са предговором}},
+ withintroduction = {{са уводом}{са уводом}},
+}
+
+\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/biblatex-ms/latex/lbx/slovak-ms.lbx b/macros/latex/contrib/biblatex-ms/latex/lbx/slovak-ms.lbx
new file mode 100644
index 0000000000..6c711db87d
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/lbx/slovak-ms.lbx
@@ -0,0 +1,554 @@
+\ProvidesFile{slovak-ms.lbx}
+[\abx@lbxid]
+
+\DeclareBibliographyExtras{%
+ \DeclareCapitalPunctuation{.!?}%
+ \protected\def\bibrangedash{%
+ \textendash\penalty\hyphenpenalty}% breakable dash
+ \protected\def\bibdatedash{%
+ \textendash\penalty\hyphenpenalty}% breakable dash
+ \let\finalandcomma=\empty
+ \let\finalandsemicolon=\empty
+ \protected\def\mkbibordinal#1{\stripzeros{#1}\adddot}%
+ \protected\def\mkbibmascord{\mkbibordinal}%
+ \protected\def\mkbibfemord{\mkbibordinal}%
+ \protected\def\mkbibneutord{\mkbibordinal}%
+ \protected\def\mkbibdatelong#1#2#3{%
+ \iffieldundef{#3}
+ {}
+ {\mkbibordinal{\thefield{#3}}%
+ \iffieldundef{#2}{}{\thinspace}}%
+ \iffieldundef{#2}
+ {}
+ {\mkbibmonth{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}}%
+ \iffieldbibstring{#1}
+ {\bibstring{\thefield{#1}}}
+ {\dateeraprintpre{#1}\stripzeros{\thefield{#1}}}}%
+ \protected\def\mkbibdateshort#1#2#3{%
+ \iffieldundef{#3}
+ {}
+ {\mkdayzeros{\thefield{#3}}\adddot
+ \iffieldundef{#2}{}{\thinspace}}%
+ \iffieldundef{#2}
+ {}
+ {\mkmonthzeros{\thefield{#2}}%
+ \iffieldundef{#1}
+ {}
+ {\iffieldundef{#3}{/}{\adddot\thinspace}}}%
+ \iffieldbibstring{#1}
+ {\bibstring{\thefield{#1}}}
+ {\dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}}%
+ \expandafter\protected\expandafter\def\csname mkbibtime24h\endcsname#1#2#3#4{%
+ \iffieldundef{#1}
+ {}
+ {\mktimezeros{\thefield{#1}}%
+ \iffieldundef{#2}{}{\bibtimesep}}%
+ \iffieldundef{#2}
+ {}
+ {\mktimezeros{\thefield{#2}}%
+ \iffieldundef{#3}{}{\bibtimesep}}%
+ \iffieldundef{#3}
+ {}
+ {\mktimezeros{\thefield{#3}}}%
+ \iffieldundef{#4}{}
+ {\bibtimezonesep
+ \mkbibtimezone{\thefield{#4}}}}%
+ \expandafter\protected\expandafter\def\csname mkbibtime12h\endcsname#1#2#3#4{%
+ \stripzeros{\mktimehh{\thefield{#1}}}\bibtimesep
+ \forcezerosmdt{\thefield{#2}}%
+ \iffieldundef{#3}{}
+ {\bibtimesep
+ \forcezerosmdt{\thefield{#3}}}%
+ \space
+ \ifnumless{\thefield{#1}}{12}
+ {\bibstring{am}}
+ {\bibstring{pm}}%
+ \iffieldundef{#4}{}
+ {\space\bibtimezonesep
+ \parentext{\mkbibtimezone{\thefield{#4}}}}}%
+ \protected\def\mkbibyeardivisiondateshort#1#2{%
+ \mkbibyeardivision{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}%
+ \dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}%
+ \protected\def\mkbibyeardivisiondatelong#1#2{%
+ \mkbibyeardivision{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}%
+ \dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}%
+}
+
+\DeclareBibliographyStrings{%
+ bibliography = {{Zoznam literat\'{u}ry}{Bibliografia}},
+ references = {{Referencie}{Referencie}},
+ shorthands = {{Zoznam skratiek}{Skratky}},
+ editor = {{editor}{ed\adddot}},
+ editors = {{editori}{ed\adddot}},
+ compiler = {{zostavovate\v{l}}{zost\adddot}},
+ compilers = {{zostavovatelia}{zost\adddot}},
+ redactor = {{redaktor}{red\adddot}},
+ redactors = {{redaktori}{red\adddot}},
+ reviser = {{korektor}{kor\adddot}},
+ revisers = {{korektori}{kor\adddot}},
+ founder = {{zakladate\v{l}}{zakl\adddot}},
+ founders = {{zakladatelia}{zakl\adddot}},
+ continuator = {{pokra\v{c}ovate\v{l}}{pokr\adddot}},% FIXME: unsure
+ continuators = {{pokra\v{c}ovatelia}{pokr\adddot}},% FIXME: unsure
+ collaborator = {{spolupracovn\'{\i}k}{spoluprac\adddot}},
+ collaborators = {{spolupracovn\'{\i}ci}{spoluprac\adddot}},
+ translator = {{prekladate\v{l}}{prekl\adddot}},
+ translators = {{prekladatelia}{prekl\adddot}},
+ commentator = {{koment\'{a}tor}{kom\adddot}},
+ commentators = {{koment\'{a}tori}{kom\adddot}},
+ annotator = {{anot\'{a}tor}{anot\adddot}},
+ annotators = {{anot\'{a}tori}{anot\adddot}},
+ commentary = {{koment\'{a}r}{kom\adddot}},
+ annotations = {{anot\'{a}cie}{anot\adddot}},
+ introduction = {{\'{u}vod}{\'{u}v\adddot}},
+ foreword = {{predhovor}{predh\adddot}},
+ afterword = {{doslov}{dosl\adddot}},
+ editortr = {{editor a prekladate\v{l}}%
+ {ed\adddotspace a prekl\adddot}},
+ editorstr = {{editori a prekladatelia}%
+ {ed\adddotspace a prekl\adddot}},
+ editorco = {{editor a koment\'{a}tor}%
+ {ed\adddotspace a kom\adddot}},
+ editorsco = {{editori a koment\'{a}tori}%
+ {ed\adddotspace a kom\adddot}},
+ editoran = {{editor a anot\'{a}tor}%
+ {ed\adddotspace a anot\adddot}},
+ editorsan = {{editori a anot\'{a}tori}%
+ {ed\adddotspace a anot\adddot}},
+ editorin = {{editor a \'{u}vod}%
+ {ed\adddotspace a \'{u}v\adddot}},
+ editorsin = {{editori a \'{u}vod}%
+ {ed\adddotspace a \'{u}v\adddot}},
+ editorfo = {{editor a predhovor}%
+ {ed\adddotspace a predh\adddot}},
+ editorsfo = {{editori a predhovor}%
+ {ed\adddotspace a predh\adddot}},
+ editoraf = {{editor a doslov}%
+ {ed\adddotspace a dosl\adddot}},
+ editorsaf = {{editori a doslov}%
+ {ed\adddotspace a dosl\adddot}},
+ editortrco = {{editor, prekladate\v{l}\ a koment\'{a}tor}%
+ {ed.,\addabbrvspace prekl\adddot\ a kom\adddot}},
+ editorstrco = {{editori, prekladatelia\ a koment\'{a}tori}%
+ {ed.,\addabbrvspace prekl\adddot\ a kom\adddot}},
+ editortran = {{editor, prekladate\v{l}\ a anot\'{a}tor}%
+ {ed.,\addabbrvspace prekl\adddot\ a anot\adddot}},
+ editorstran = {{editori, prekladatelia\ a anot\'{a}tori}%
+ {ed.,\addabbrvspace prekl\adddot\ a anot\adddot}},
+ editortrin = {{editor, prekladate\v{l}\ a \'{u}vod}%
+ {ed.,\addabbrvspace prekl\adddot\ a \'{u}v\adddot}},
+ editorstrin = {{editori, prekladatelia\ a \'{u}vod}%
+ {ed.,\addabbrvspace prekl\adddot\ a \'{u}v\adddot}},
+ editortrfo = {{editor, prekladate\v{l}\ a predhovor}%
+ {ed.,\addabbrvspace prekl\adddot\ a predh\adddot}},
+ editorstrfo = {{editori, prekladatelia\ a predhovor}%
+ {ed.,\addabbrvspace prekl\adddot\ a predh\adddot}},
+ editortraf = {{editor, prekladate\v{l}\ a doslov}%
+ {ed.,\addabbrvspace prekl\adddot\ a dosl\adddot}},
+ editorstraf = {{editori, prekladatelia\ a doslov}%
+ {ed.,\addabbrvspace prekl\adddot\ a dosl\adddot}},
+ editorcoin = {{editor, koment\'{a}tor\ a \'{u}vod}%
+ {ed.,\addabbrvspace kom\adddot\ a \'{u}v\adddot}},
+ editorscoin = {{editori, koment\'{a}tori\ a \'{u}vod}%
+ {ed.,\addabbrvspace kom\adddot\ a \'{u}v\adddot}},
+ editorcofo = {{editor, koment\'{a}tor\ a predhovor}%
+ {ed.,\addabbrvspace kom\adddot\ a predh\adddot}},
+ editorscofo = {{editori, koment\'{a}tori\ a predhovor}%
+ {ed.,\addabbrvspace kom\adddot\ a predh\adddot}},
+ editorcoaf = {{editor, koment\'{a}tor\ a doslov}%
+ {ed.,\addabbrvspace kom\adddot\ a dosl\adddot}},
+ editorscoaf = {{editori, koment\'{a}tori\ a doslov}%
+ {ed.,\addabbrvspace kom\adddot\ a dosl\adddot}},
+ editoranin = {{editor, anot\'{a}tor\ a \'{u}vod}%
+ {ed.,\addabbrvspace anot\adddot\ a \'{u}v\adddot}},
+ editorsanin = {{editori, anot\'{a}tori\ a \'{u}vod}%
+ {ed.,\addabbrvspace anot\adddot\ a \'{u}v\adddot}},
+ editoranfo = {{editor, anot\'{a}tor\ a predhovor}%
+ {ed.,\addabbrvspace anot\adddot\ a predh\adddot}},
+ editorsanfo = {{editori, anot\'{a}tori\ a predhovor}%
+ {ed.,\addabbrvspace anot\adddot\ a predh\adddot}},
+ editoranaf = {{editor, anot\'{a}tor\ a doslov}%
+ {ed.,\addabbrvspace anot\adddot\ a dosl\adddot}},
+ editorsanaf = {{editori, anot\'{a}tori\ a doslov}%
+ {ed.,\addabbrvspace anot\adddot\ a dosl\adddot}},
+ editortrcoin = {{editor, prekladate\v{l}, koment\'{a}tor\ a \'{u}vod}%
+ {ed.,\addabbrvspace prekl., kom\adddot\ a \'{u}v\adddot}},
+ editorstrcoin = {{editori, prekladatelia, koment\'{a}tori\ a \'{u}vod}%
+ {ed.,\addabbrvspace prekl., kom\adddot\ a \'{u}v\adddot}},
+ editortrcofo = {{editor, prekladate\v{l}, koment\'{a}tor\ a predhovor}%
+ {ed.,\addabbrvspace prekl., kom\adddot\ a predh\adddot}},
+ editorstrcofo = {{editori, prekladatelia, koment\'{a}tori\ a predhovor}%
+ {ed.,\addabbrvspace prekl., kom\adddot\ a predh\adddot}},
+ editortrcoaf = {{editor, prekladate\v{l}, koment\'{a}tor\ a doslov}%
+ {ed.,\addabbrvspace prekl., kom\adddot\ a dosl\adddot}},
+ editorstrcoaf = {{editori, prekladatelia, koment\'{a}tori\ a doslov}%
+ {ed.,\addabbrvspace prekl., kom\adddot\ a dosl\adddot}},
+ editortranin = {{editor, prekladate\v{l}, anot\'{a}tor\ a \'{u}vod}%
+ {ed.,\addabbrvspace prekl., anot\adddot\ a \'{u}v\adddot}},
+ editorstranin = {{editori, prekladatelia, anot\'{a}tori\ a \'{u}vod}%
+ {ed.,\addabbrvspace prekl., anot\adddot\ a \'{u}v\adddot}},
+ editortranfo = {{editor, prekladate\v{l}, anot\'{a}tor\ a predhovor}%
+ {ed.,\addabbrvspace prekl., anot\adddot\ a predh\adddot}},
+ editorstranfo = {{editori, prekladatelia, anot\'{a}tori\ a predhovor}%
+ {ed.,\addabbrvspace prekl., anot\adddot\ a predh\adddot}},
+ editortranaf = {{editor, prekladate\v{l}, anot\'{a}tor\ a doslov}%
+ {ed.,\addabbrvspace prekl., anot\adddot\ a dosl\adddot}},
+ editorstranaf = {{editori, prekladatelia, anot\'{a}tori\ a doslov}%
+ {ed.,\addabbrvspace prekl., anot\adddot\ a dosl\adddot}},
+ translatorco = {{prekladate\v{l} a koment\'{a}tor}%
+ {prekl\adddot\ a kom\adddot}},
+ translatorsco = {{prekladatelia a koment\'{a}tori}%
+ {prekl\adddot\ a kom\adddot}},
+ translatoran = {{prekladate\v{l} a anot\'{a}tor}%
+ {prekl\adddot\ a anot\adddot}},
+ translatorsan = {{prekladatelia a anot\'{a}tori}%
+ {prekl\adddot\ a anot\adddot}},
+ translatorin = {{preklad a \'{u}vod}%
+ {prekl\adddot\ a \'{u}v\adddot}},
+ translatorsin = {{preklad a \'{u}vod}%
+ {prekl\adddot\ a \'{u}v\adddot}},
+ translatorfo = {{preklad a predhovor}%
+ {prekl\adddot\ a predh\adddot}},
+ translatorsfo = {{preklad a predhovor}%
+ {prekl\adddot\ a predh\adddot}},
+ translatoraf = {{preklad a doslov}%
+ {prekl\adddot\ a dosl\adddot}},
+ translatorsaf = {{preklad a doslov}%
+ {prekl\adddot\ a dosl\adddot}},
+ translatorcoin = {{preklad, koment\'{a}r\ a \'{u}vod}%
+ {prekl., kom\adddot\ a \'{u}v\adddot}},
+ translatorscoin = {{preklad, koment\'{a}r\ a \'{u}vod}%
+ {prekl., kom\adddot\ a \'{u}v\adddot}},
+ translatorcofo = {{preklad, koment\'{a}r\ a predhovor}%
+ {prekl., kom\adddot\ a predh\adddot}},
+ translatorscofo = {{preklad, koment\'{a}r\ a predhovor}%
+ {prekl., kom\adddot\ a predh\adddot}},
+ translatorcoaf = {{preklad, koment\'{a}r\ a doslov}%
+ {prekl., kom\adddot\ a dosl\adddot}},
+ translatorscoaf = {{preklad, koment\'{a}r\ a doslov}%
+ {prekl., kom\adddot\ a dosl\adddot}},
+ translatoranin = {{preklad, anot\'{a}cia\ a \'{u}vod}%
+ {prekl., anot\adddot\ a \'{u}v\adddot}},
+ translatorsanin = {{preklad, anot\'{a}cie\ a \'{u}vod}%
+ {prekl., anot\adddot\ a \'{u}v\adddot}},
+ translatoranfo = {{preklad, anot\'{a}cia\ a predhovor}%
+ {prekl., anot\adddot\ a predh\adddot}},
+ translatorsanfo = {{preklad, anot\'{a}cie\ a predhovor}%
+ {prekl., anot\adddot\ a predh\adddot}},
+ translatoranaf = {{preklad, anot\'{a}cia\ a doslov}%
+ {prekl., anot\adddot\ a dosl\adddot}},
+ translatorsanaf = {{preklad, anot\'{a}cie\ a doslov}%
+ {prekl., anot\adddot\ a dosl\adddot}},
+ organizer = {{organiz\'{a}tor}{org\adddot}},% FIXME: unsure
+ organizers = {{organiz\'{a}tori}{org\adddot}},% FIXME: unsure
+ byorganizer = {{organizovan\'{e}}{org\adddot}},% FIXME: unsure
+ byauthor = {{}{}},
+ byeditor = {{editovan\'{e}}{ed\adddot}},
+ bycompiler = {{zostaven\'{e}}{zost\adddot}},
+ byredactor = {{redigovan\'{e}}{red\adddot}},
+ byreviser = {{korigovan\'{e}}{kor\adddot}},
+ byreviewer = {{recenzovan\'{e}}{recenz\adddot}},
+ byfounder = {{zalo\v{z}en\'{e}}{zal\adddot}},
+ bycontinuator = {{pokra\v{c}ovan\'{e}}{pokr\adddot}},
+ bycollaborator = {{v\addnbspace spolupr\'{a}ci s\addnbspace}{v\addnbspace spol\adddotspace s\addnbspace}},
+ bytranslator = {{prelo\v{z}en\'{e} \lbx@lfromlang}{prel\adddot\ \lbx@sfromlang}},
+ bycommentator = {{komentovan\'{e}}{kom\adddot}},
+ byannotator = {{anotovan\'{e}}{anot\adddot}},
+ withcommentator = {{s\addnbspace koment\'{a}rom od}{s\addnbspace kom\adddot\ od}},
+ withannotator = {{s\addnbspace anot\'{a}ciami od}{s\addnbspace anot\adddot\ od}},
+ withintroduction = {{s\addnbspace \'{u}vodom od}{s\addnbspace \'{u}v\adddot\ od}},
+ withforeword = {{s\addnbspace predhovorom od}{s\addnbspace predh\adddot\ od}},
+ withafterword = {{s\addnbspace doslovom od}{s\addnbspace dosl\adddot\ od}},
+ byeditortr = {{editovan\'{e} a prelo\v{z}en\'{e} \lbx@lfromlang}%
+ {ed\adddotspace a prel\adddot\ \lbx@sfromlang}},
+ byeditorco = {{editovan\'{e} a komentovan\'{e}}%
+ {ed\adddotspace a kom\adddot}},
+ byeditoran = {{editovan\'{e} a anotovan\'{e}}%
+ {ed\adddotspace a anot\adddot}},
+ byeditorin = {{editovan\'{e}, s\addnbspace \'{u}vodom}%
+ {ed.,\addabbrvspace s\addnbspace \'{u}v\adddot}},
+ byeditorfo = {{editovan\'{e}, s\addnbspace predhovorom}%
+ {ed.,\addabbrvspace s\addnbspace predh\adddot}},
+ byeditoraf = {{editovan\'{e}, s\addnbspace doslovom}%
+ {ed.,\addabbrvspace s\addnbspace dosl\adddot}},
+ byeditortrco = {{editovan\'{e}, prelo\v{z}en\'{e} \lbx@lfromlang\ a komentovan\'{e}}%
+ {ed.,\addabbrvspace prel\adddot\ \lbx@sfromlang\ a kom\adddot}},
+ byeditortran = {{editovan\'{e}, prelo\v{z}en\'{e} \lbx@lfromlang\ a anotovan\'{e}}%
+ {ed.,\addabbrvspace prel\adddot\ \lbx@sfromlang\ a anot\adddot}},
+ byeditortrin = {{editovan\'{e} a prelo\v{z}en\'{e} \lbx@lfromlang, s\addnbspace \'{u}vodom}%
+ {ed\adddotspace a prel\adddot\ \lbx@sfromlang, s\addnbspace \'{u}v\adddot}},
+ byeditortrfo = {{editovan\'{e} a prelo\v{z}en\'{e} \lbx@lfromlang, s\addnbspace predhovorom}%
+ {ed\adddotspace a prel\adddot\ \lbx@sfromlang, s\addnbspace predh\adddot}},
+ byeditortraf = {{editovan\'{e} a prelo\v{z}en\'{e} \lbx@lfromlang, s\addnbspace doslovom}%
+ {ed\adddotspace a prel\adddot\ \lbx@sfromlang, s\addnbspace dosl\adddot}},
+ byeditorcoin = {{editovan\'{e} a komentovan\'{e}, s\addnbspace \'{u}vodom}%
+ {ed\adddotspace a kom., s\addnbspace \'{u}v\adddot}},
+ byeditorcofo = {{editovan\'{e} a komentovan\'{e}, s\addnbspace predhovorom}%
+ {ed\adddotspace a kom., s\addnbspace predh\adddot}},
+ byeditorcoaf = {{editovan\'{e} a komentovan\'{e}, s\addnbspace doslovom}%
+ {ed\adddotspace a kom., s\addnbspace dosl\adddot}},
+ byeditoranin = {{editovan\'{e} a anotovan\'{e}, s\addnbspace \'{u}vodom}%
+ {ed\adddotspace a anot., s\addnbspace \'{u}v\adddot}},
+ byeditoranfo = {{editovan\'{e} a anotovan\'{e}, s\addnbspace predhovorom}%
+ {ed\adddotspace a anot., s\addnbspace predh\adddot}},
+ byeditoranaf = {{editovan\'{e} a anotovan\'{e}, s\addnbspace doslovom}%
+ {ed\adddotspace a anot., s\addnbspace dosl\adddot}},
+ byeditortrcoin = {{editovan\'{e}, prelo\v{z}en\'{e} \lbx@lfromlang\ a komentovan\'{e}, s\addnbspace \'{u}vodom}%
+ {ed.,\addabbrvspace prel\adddot\ \lbx@sfromlang\ a kom., s\addnbspace \'{u}v\adddot}},
+ byeditortrcofo = {{editovan\'{e}, prelo\v{z}en\'{e} \lbx@lfromlang\ a komentovan\'{e}, s\addnbspace predhovorom}%
+ {ed.,\addabbrvspace prel\adddot\ \lbx@sfromlang\ a kom., s\addnbspace predh\adddot}},
+ byeditortrcoaf = {{editovan\'{e}, prelo\v{z}en\'{e} \lbx@lfromlang\ a komentovan\'{e}, s\addnbspace doslovom}%
+ {ed.,\addabbrvspace prel\adddot\ \lbx@sfromlang\ a kom., s\addnbspace dosl\adddot}},
+ byeditortranin = {{editovan\'{e}, prelo\v{z}en\'{e} \lbx@lfromlang\ a anotovan\'{e}, s\addnbspace \'{u}vodom}%
+ {ed.,\addabbrvspace prel\adddot\ \lbx@sfromlang\ a anot\adddot, s\addnbspace \'{u}v\adddot}},
+ byeditortranfo = {{editovan\'{e}, prelo\v{z}en\'{e} \lbx@lfromlang\ a anotovan\'{e}, s\addnbspace predhovorom}%
+ {ed.,\addabbrvspace prel\adddot\ \lbx@sfromlang\ a anot\adddot, s\addnbspace predh\adddot}},
+ byeditortranaf = {{editovan\'{e}, prelo\v{z}en\'{e} \lbx@lfromlang\ a anotovan\'{e}, s\addnbspace doslovom}%
+ {ed.,\addabbrvspace prel\adddot\ \lbx@sfromlang\ a anot\adddot, s\addnbspace dosl\adddot}},
+ bytranslatorco = {{prelo\v{z}en\'{e} \lbx@lfromlang\ a komentovan\'{e}}%
+ {prel\adddot\ \lbx@sfromlang\ a kom\adddot}},
+ bytranslatoran = {{prelo\v{z}en\'{e} \lbx@lfromlang\ a anotovan\'{e}}%
+ {prel\adddot\ \lbx@sfromlang\ a anot\adddot}},
+ bytranslatorin = {{prelo\v{z}en\'{e} \lbx@lfromlang, s\addnbspace \'{u}vodom}%
+ {prel\adddot\ \lbx@sfromlang, s\addnbspace \'{u}v\adddot}},
+ bytranslatorfo = {{prelo\v{z}en\'{e} \lbx@lfromlang, s\addnbspace predhovorom}%
+ {prel\adddot\ \lbx@sfromlang, s\addnbspace predh\adddot}},
+ bytranslatoraf = {{prelo\v{z}en\'{e} \lbx@lfromlang, s\addnbspace doslovom}%
+ {prel\adddot\ \lbx@sfromlang, s\addnbspace dosl\adddot}},
+ bytranslatorcoin = {{prelo\v{z}en\'{e} \lbx@lfromlang\ a komentovan\'{e}, s\addnbspace \'{u}vodom}%
+ {prel\adddot\ \lbx@sfromlang\ a kom., s\addnbspace \'{u}v\adddot}},
+ bytranslatorcofo = {{prelo\v{z}en\'{e} \lbx@lfromlang\ a komentovan\'{e}, s\addnbspace predhovorom}%
+ {prel\adddot\ \lbx@sfromlang\ a kom., s\addnbspace predh\adddot}},
+ bytranslatorcoaf = {{prelo\v{z}en\'{e} \lbx@lfromlang\ a komentovan\'{e}, s\addnbspace doslovom}%
+ {prel\adddot\ \lbx@sfromlang\ a kom., s\addnbspace dosl\adddot}},
+ bytranslatoranin = {{prelo\v{z}en\'{e} \lbx@lfromlang\ a anotovan\'{e}, s\addnbspace \'{u}vodom}%
+ {prel\adddot\ \lbx@sfromlang\ a anot., s\addnbspace \'{u}v\adddot}},
+ bytranslatoranfo = {{prelo\v{z}en\'{e} \lbx@lfromlang\ a anotovan\'{e}, s\addnbspace predhovorom}%
+ {prel\adddot\ \lbx@sfromlang\ a anot., s\addnbspace predh\adddot}},
+ bytranslatoranaf = {{prelo\v{z}en\'{e} \lbx@lfromlang\ a anotovan\'{e}, s\addnbspace doslovom}%
+ {prel\adddot\ \lbx@sfromlang\ a anot., s\addnbspace dosl\adddot}},
+ and = {{a}{a}},
+ andothers = {{et\addabbrvspace al\adddot}{et\addabbrvspace al\adddot}},
+ andmore = {{et\addabbrvspace al\adddot}{et\addabbrvspace al\adddot}},
+ volume = {{zv\"{a}zok}{zv\adddot}},
+ volumes = {{zv\"{a}zky}{zv\adddot}},
+ involumes = {{in}{in}},
+ jourvol = {{ro\v{c}n\'{\i}k}{ro\v{c}\adddot}},
+ jourser = {{ed\'{\i}cia}{ed\adddot}},
+ book = {{kniha}{kniha}},
+ part = {{\v{c}as\v{t}}{\v{c}as\v{t}}},
+ issue = {{\v{c}\'{\i}slo}{\v{c}\'{\i}slo}},
+ newseries = {{nov\'{a} ed\'{\i}cia}{n\adddotspace ed\adddot}},
+ oldseries = {{star\'{a} ed\'{\i}cia}{st\adddotspace ed\adddot}},
+ edition = {{vydanie}{vyd\adddot}},
+ reprint = {{dotla\v{c}}{dotl\adddot}},
+ reprintof = {{dotla\v{c}}{dotl\adddot}},
+ reprintas = {{dotla\v{c}en\'{e} ako}{dotl\adddotspace ako}},
+ reprintfrom = {{dotla\v{c}en\'{e} z\addnbspace}{dotl\adddotspace z\addnbspace}},
+ reviewof = {{recenzia}{recenz\adddot}},
+ translationof = {{preklad}{prekl\adddot}},
+ translationas = {{prelo\v{z}en\'{e} ako}{prel\adddotspace ako}},
+ translationfrom = {{prelo\v{z}en\'{e} z\addnbspace}{prel\adddotspace z\addnbspace}},
+ origpubas = {{p\^{o}vodne vydan\'{e} ako}{p\^{o}v\adddotspace vyd\adddotspace ako}},
+ origpubin = {{p\^{o}vodne vydan\'{e} v\addnbspace roku}{p\^{o}v\adddotspace vyd\adddotspace v\addnbspace r\adddot}},
+ astitle = {{ako}{ako}},
+ bypublisher = {{}{}},
+ nodate = {{nedatovan\'{e}}{b\adddot r\adddot}},% bez roku
+ page = {{strana}{s\adddot}},
+ pages = {{strany}{s\adddot}},
+ column = {{st\'{l}pec}{st\'{l}p\adddot}},
+ columns = {{st\'{l}pce}{st\'{l}p\adddot}},
+ line = {{riadok}{r\adddot}},
+ lines = {{riadky}{r\adddot}},
+ verse = {{ver\v{s}}{v\adddot}},
+ verses = {{ver\v{s}e}{v\adddot}},
+ section = {{sekcia}{\S}},
+ sections = {{sekcie}{\S\S}},
+ paragraph = {{odsek}{ods\adddot}},
+ paragraphs = {{odseky}{ods\adddot}},
+ pagetotal = {{strana}{s\adddot}},
+ pagetotals = {{strany}{s\adddot}},
+ columntotal = {{st\'{l}pec}{st\'{l}p\adddot}},
+ columntotals = {{st\'{l}pce}{st\'{l}p\adddot}},
+ linetotal = {{riadok}{r\adddot}},
+ linetotals = {{riadky}{r\adddot}},
+ versetotal = {{ver\v{s}}{v\adddot}},
+ versetotals = {{ver\v{s}e}{v\adddot}},
+ sectiontotal = {{sekcia}{\S}},
+ sectiontotals = {{sekcie}{\S\S}},
+ paragraphtotal = {{odsek}{ods\adddot}},
+ paragraphtotals = {{odseky}{ods\adddot}},
+ in = {{in}{in}},
+ inseries = {{in}{in}},
+ ofseries = {{z}{z}},
+ number = {{\v{c}\'{\i}slo}{\v{c}\adddot}},
+ chapter = {{kapitola}{kap\adddot}},
+ bathesis = {{bakal\'{a}rska pr\'{a}ca}{bak\adddotspace pr\adddot}},
+ mathesis = {{diplomov\'{a} pr\'{a}ca}{dipl\adddotspace pr\adddot}},
+ phdthesis = {{dizerta\v{c}n\'{a} pr\'{a}ca}{diz\adddotspace pr\adddot}},
+ candthesis = {{kandid\'{a}tska pr\'{a}ca}{kand\adddotspace pr\adddot}},% FIXME: unsure
+ resreport = {{v\'{y}skumn\'{a} spr\'{a}va}{v\'{y}sk\adddot\ spr\adddot}},
+ techreport = {{technick\'{a} spr\'{a}va}{tech\adddotspace spr\adddot}},
+ software = {{po\v{c}\'{\i}ta\v{c}ov\'{y} softv\'{e}r}{soft\adddot}},
+ datacd = {{CD-ROM}{CD-ROM}},
+ audiocd = {{audio CD}{audio CD}},
+ version = {{verzia}{ver\adddot}},
+ url = {{URL}{URL}},
+ urlfrom = {{dostupn\'{e} z\addnbspace}{dostupn\'{e} z\addnbspace}},
+ urlseen = {{citovan\'{e}}{cit\adddot}},
+ inpreparation = {{v\addnbspace pr\'{\i}prave}{v\addnbspace pr\'{\i}prave}},
+ submitted = {{odoslan\'{e}}{odosl\adddot}},
+ forthcoming = {{bud\'{u}ce}{bud\adddot}},
+ inpress = {{v\addnbspace tla\v{c}i}{v\addnbspace tla\v{c}i}},
+ prepublished = {{pred publikovan\'{\i}m}{pred publ\adddot}},
+ citedas = {{\v{d}alej citovan\'{e} ako}{\v{d}alej cit\adddotspace ako}},
+ thiscite = {{obzvl\'{a}\v{s}\v{t}}{obzvl\adddot}},
+ seenote = {{vi\v{d} pozn\'{a}mka}{vi\v{d} pozn\adddot}},
+ quotedin = {{citovan\'{e} v\addnbspace}{cit\adddotspace v\addnbspace}},
+ idem = {{idem}{idem}},
+ idemsm = {{idem}{idem}},
+ idemsf = {{eadem}{eadem}},
+ idemsn = {{idem}{idem}},
+ idempm = {{eidem}{eidem}},
+ idempf = {{eaedem}{eaedem}},
+ idempn = {{eadem}{eadem}},
+ idempp = {{eidem}{eidem}},
+ ibidem = {{ibidem}{ibid\adddot}},
+ opcit = {{op\adddotspace cit\adddot}{op\adddotspace cit\adddot}},
+ loccit = {{loc\adddotspace cit\adddot}{loc\adddotspace cit\adddot}},
+ confer = {{cf\adddot}{cf\adddot}},
+ sequens = {{sq\adddot}{sq\adddot}},
+ sequentes = {{sqq\adddot}{sqq\adddot}},
+ passim = {{passim}{pass\adddot}},
+ see = {{vi\v{d}}{vi\v{d}}},
+ seealso = {{vi\v{d} tie\v{z}}{vi\v{d} tie\v{z}}},
+ backrefpage = {{citovan\'{e} na strane}{cit\adddotspace na str\adddot}},
+ backrefpages = {{citovan\'{e} na stran\'{a}ch}{cit\adddotspace na s\adddot}},
+ january = {{janu\'{a}r}{jan\adddot}},
+ february = {{febru\'{a}r}{feb\adddot}},
+ march = {{marec}{mar\adddot}},
+ april = {{apr\'{\i}l}{apr\adddot}},
+ may = {{m\'{a}j}{m\'{a}j}},
+ june = {{j\'{u}n}{j\'{u}n}},
+ july = {{j\'{u}l}{j\'{u}l}},
+ august = {{august}{aug\adddot}},
+ september = {{september}{sept\adddot}},
+ october = {{okt\'{o}ber}{okt\adddot}},
+ november = {{november}{nov\adddot}},
+ december = {{december}{dec\adddot}},
+ langamerican = {{americk\'{a} angli\v{c}tina}{am\adddot\ angl\adddot}},
+ langbrazilian = {{braz\'{\i}lska portugal\v{c}ina}{braz\adddot\ portugal\adddot}},
+ langbulgarian = {{bulhar\v{c}ina}{bulh\adddot}},
+ langcatalan = {{katal\'{a}n\v{c}ina}{katal\adddot}},
+ langcroatian = {{chorv\'{a}t\v{c}ina}{chorv\adddot}},
+ langczech = {{\v{c}e\v{s}tina}{\v{c}e\v{s}tina}},
+ langdanish = {{d\'{a}n\v{c}ina}{d\'{a}n\adddot}},
+ langdutch = {{holand\v{c}ina}{hol\adddot}},
+ langenglish = {{angli\v{c}tina}{angl\adddot}},
+ langestonian = {{est\'{o}n\v{c}ina}{est\adddot}},
+ langfinnish = {{f\'{\i}n\v{c}ina}{f\'{\i}n\adddot}},
+ langfrench = {{franc\'{u}z\v{s}tina}{franc\adddot}},
+ langgalician = {{gal\'{\i}cij\v{c}ina}{gal\adddot}},
+ langgerman = {{nem\v{c}ina}{nem\adddot}},
+ langgreek = {{gr\'{e}\v{c}tina}{gr\'{e}\v{c}tina}},
+ langhungarian = {{ma\v{d}ar\v{c}ina}{ma\v{d}\adddot}},
+ langitalian = {{talian\v{c}ina}{tal\adddot}},
+ langjapanese = {{japon\v{c}ina}{jap\adddot}},
+ langlatin = {{latin\v{c}ina}{lat\adddot}},
+ langlatvian = {{loty\v{s}tina}{lot\adddot}},
+ langnorwegian = {{n\'{o}r\v{c}ina}{n\'{o}r\adddot}},
+ langpolish = {{po\v{l}\v{s}tina}{po\v{l}\adddot}},
+ langportuguese = {{portugal\v{c}ina}{port\adddot}},
+ langrussian = {{ru\v{s}tina}{ru\v{s}tina}},
+ langserbian = {{srb\v{c}ina}{srb\adddot}},
+ langslovak = {{sloven\v{c}ina}{sloven\v{c}ina}},
+ langslovene = {{slovin\v{c}ina}{slovin\v{c}ina}},
+ langspanish = {{\v{s}paniel\v{c}ina}{\v{s}pan\adddot}},
+ langswedish = {{\v{s}v\'{e}d\v{c}ina}{\v{s}v\'{e}d\adddot}},
+ langukrainian = {{ukrajin\v{c}ina}{ukr\adddot}},
+ fromamerican = {{z\addnbspace americkej angli\v{c}tiny}{z\addnbspace amer\adddot\ angl\adddot}},
+ frombrazilian = {{z\addnbspace braz\'{\i}lskej portugal\v{c}iny}{z\addnbspace braz\adddotspace portugal\adddot}},
+ frombulgarian = {{z\addnbspace bulhar\v{c}iny}{z\addnbspace bulh\adddot}},
+ fromcatalan = {{z\addnbspace katal\'{a}n\v{c}iny}{z\addnbspace katal\adddot}},
+ fromcroatian = {{z\addnbspace chorvat\v{c}iny}{z\addnbspace chorv\adddot}},
+ fromczech = {{z\addnbspace \v{c}e\v{s}tiny}{z\addnbspace \v{c}e\v{s}tiny}},
+ fromdanish = {{z\addnbspace d\'{a}n\v{c}iny}{z\addnbspace d\'{a}n\adddot}},
+ fromdutch = {{z\addnbspace holand\v{c}iny}{z\addnbspace hol\adddot}},
+ fromenglish = {{z\addnbspace angli\v{c}tiny}{z\addnbspace angl\adddot}},
+ fromestonian = {{z\addnbspace est\'{o}n\v{c}iny}{z\addnbspace est\adddot}},
+ fromfinnish = {{z\addnbspace f\'{\i}n\v{c}iny}{z\addnbspace f\'{\i}n\adddot}},
+ fromfrench = {{z\addnbspace franc\'{u}z\v{s}tiny}{z\addnbspace franc\adddot}},
+ fromgalician = {{z\addnbspace gal\'{\i}cij\v{c}ina}{z\addbnspace gal\adddot}},
+ fromgerman = {{z\addnbspace nem\v{c}iny}{z\addnbspace nem\adddot}},
+ fromgreek = {{z\addnbspace gr\'{e}\v{c}tiny}{z\addnbspace gr\'{e}\v{c}tiny}},
+ fromhungarian = {{z\addnbspace ma\v{d}ar\v{c}iny}{z\addnbspace ma\v{d}\adddot}},
+ fromitalian = {{z\addnbspace talian\v{c}iny}{z\addnbspace tal\adddot}},
+ fromjapanese = {{z\addnbspace japon\v{c}iny}{z\addnbspace jap\adddot}},
+ fromlatin = {{z\addnbspace latin\v{c}iny}{z\addnbspace lat\adddot}},
+ fromlatvian = {{z\addnbspace loty\v{s}tiny}{z\addnbspace lot\adddot}},
+ fromnorwegian = {{z\addnbspace n\'{o}r\v{c}iny}{z\addnbspace n\'{o}r\adddot}},
+ frompolish = {{z\addnbspace po\v{l}\v{s}tiny}{z\addnbspace po\v{l}\adddot}},
+ fromportuguese = {{z\addnbspace portugal\v{c}iny}{z\addnbspace portugal\adddot}},
+ fromrussian = {{z\addnbspace ru\v{s}tiny}{z\addnbspace ru\v{s}tiny}},
+ fromserbian = {{zo srb\v{c}iny}{zo srb\adddot}},
+ fromslovak = {{zo sloven\v{c}iny}{zo sloven\v{c}iny}},
+ fromslovene = {{zo slovin\v{c}iny}{zo slovin\v{c}iny}},
+ fromspanish = {{zo \v{s}paniel\v{c}iny}{zo \v{s}pan\adddot}},
+ fromswedish = {{zo \v{s}v\'{e}d\v{c}iny}{zo \v{s}v\'{e}d\adddot}},
+ fromukrainian = {{z\addnbspace ukrajin\v{c}iny}{z\addnbspace ukr\adddot}},
+ countryde = {{Nemecko}{DE}},
+ countryeu = {{Eur\'{o}pska \'{u}nia}{EU}},
+ countryep = {{Eur\'{o}pska \'{u}nia}{EP}},
+ countryfr = {{Franc\'{u}zsko}{FR}},
+ countryuk = {{Ve\v{l}k\'{a} Brit\'{a}nia}{GB}},
+ countryus = {{Spojen\'{e} \v{s}t\'{a}ty americk\'{e}}{US}},
+ patent = {{patent}{pat\adddot}},
+ patentde = {{nemeck\'{y} patent}{nem\adddot\ pat\adddot}},
+ patenteu = {{eur\'{o}psky patent}{eur\adddot\ pat\adddot}},
+ patentfr = {{franc\'{u}zsky patent}{franc\adddot\ pat\adddot}},
+ patentuk = {{britsk\'{y} patent}{brit\adddot\ pat\adddot}},
+ patentus = {{US patent}{US pat\adddot}},
+ patreq = {{patentov\'{a} \v{z}iados\v{t}}{pat\adddot\ \v{z}iad\adddot}},
+ patreqde = {{nemeck\'{a} patentov\'{a} \v{z}iados\v{t}}{nem\adddot\ pat\adddot\ \v{z}iad\adddot}},
+ patreqeu = {{eur\'{o}pska patentov\'{a} \v{z}iados\v{t}}{eur\adddot\ pat\adddot\ \v{z}iad\adddot}},
+ patreqfr = {{franc\'{u}zska patentov\'{a} \v{z}iados\v{t}}{franc\adddot\ pat\adddot\ \v{z}iad\adddot}},
+ patrequk = {{britsk\'{a} patentov\'{a} \v{z}iados\v{t}}{brit\adddot\ pat\adddot\ \v{z}iad\adddot}},
+ patrequs = {{US patentov\'{a} \v{z}iados\v{t}}{US pat\adddot\ \v{z}iad\adddot}},
+ file = {{s\'{u}bor}{s\'{u}b\adddot}},
+ library = {{kni\v{z}nica}{kni\v{z}nica}},
+ abstract = {{abstrakt}{abst\adddot}},
+ annotation = {{anot\'{a}cia}{anot\adddot}},
+ commonera = {{n\'{a}\v{s}ho letopo\v{c}tu}{n\adddotspace l\adddot}},
+ beforecommonera = {{pred na\v{s}\'{\i}m letopo\v{c}tom}{pred n\adddotspace l\adddot}},
+ annodomini = {{po Kristovi}{po Kr\adddot}},
+ beforechrist = {{pred Kristom}{pred Kr\adddot}},
+ circa = {{cirka}{ca\adddot}},
+ spring = {{jar}{jar}},
+ summer = {{leto}{leto}},
+ autumn = {{jese\v{n}}{jese\v{n}}},
+ winter = {{zima}{zima}},
+% springN = {{}{}},% FIXME: missing
+% summerN = {{}{}},% FIXME: missing
+% autumnN = {{}{}},% FIXME: missing
+% winterN = {{}{}},% FIXME: missing
+% springS = {{}{}},% FIXME: missing
+% summerS = {{}{}},% FIXME: missing
+% autumnS = {{}{}},% FIXME: missing
+% winterS = {{}{}},% FIXME: missing
+% Q1 = {{}{}},% FIXME: missing
+% Q2 = {{}{}},% FIXME: missing
+% Q3 = {{}{}},% FIXME: missing
+% Q4 = {{}{}},% FIXME: missing
+% QD1 = {{}{}},% FIXME: missing
+% QD2 = {{}{}},% FIXME: missing
+% QD3 = {{}{}},% FIXME: missing
+% S1 = {{}{}},% FIXME: missing
+% S2 = {{}{}},% FIXME: missing
+ am = {{AM}{AM}},
+ pm = {{PM}{PM}},
+}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/lbx/slovene-ms.lbx b/macros/latex/contrib/biblatex-ms/latex/lbx/slovene-ms.lbx
new file mode 100644
index 0000000000..916f20dcd3
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/lbx/slovene-ms.lbx
@@ -0,0 +1,553 @@
+\ProvidesFile{slovene-ms.lbx}
+[\abx@lbxid]
+
+\DeclareRedundantLanguages{slovene}{slovene,slovenian}
+
+\DeclareBibliographyExtras{%
+ \protected\def\bibrangedash{\textendash\penalty\hyphenpenalty}%
+ \let\finalandcomma=\empty
+ \let\finalandsemicolon=\empty
+ \protected\def\mkbibordinal#1{\stripzeros{#1}\adddot}%
+ \protected\def\mkbibmascord{\mkbibordinal}%
+ \protected\def\mkbibfemord{\mkbibordinal}%
+ \protected\def\mkbibneutord{\mkbibordinal}%
+ \protected\def\mkbibdatelong#1#2#3{%
+ \iffieldundef{#3}
+ {}
+ {\mkbibordinal{\thefield{#3}}%
+ \iffieldundef{#2}{}{\nobreakspace}}%
+ \iffieldundef{#2}
+ {}
+ {\mkbibmonth{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}}%
+ \iffieldbibstring{#1}
+ {\bibstring{\thefield{#1}}}
+ {\dateeraprintpre{#1}\stripzeros{\thefield{#1}}}}%
+ \protected\def\mkbibdateshort#1#2#3{%
+ \iffieldundef{#3}
+ {}
+ {\mkbibordinal{\thefield{#3}}%
+ \iffieldundef{#2}{}{\addnbthinspace}}%
+ \iffieldundef{#2}
+ {}
+ {\mkbibordinal{\thefield{#2}}%
+ \iffieldundef{#1}{}{\addnbthinspace}}%
+ \iffieldbibstring{#1}
+ {\bibstring{\thefield{#1}}}
+ {\dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}}%
+ \savecommand\mkbibordedition
+ \savecommand\mkbibordseries
+ \def\mkbibordedition{\mkbibordinal}%
+ \def\mkbibordseries{\mkbibfemord}%
+ \expandafter\protected\expandafter\def\csname mkbibtime24h\endcsname#1#2#3#4{%
+ \iffieldundef{#1}
+ {}
+ {\mktimezeros{\thefield{#1}}%
+ \iffieldundef{#2}{}{\bibtimesep}}%
+ \iffieldundef{#2}
+ {}
+ {\mktimezeros{\thefield{#2}}%
+ \iffieldundef{#3}{}{\bibtimesep}}%
+ \iffieldundef{#3}
+ {}
+ {\mktimezeros{\thefield{#3}}}%
+ \iffieldundef{#4}{}
+ {\bibtimezonesep
+ \mkbibtimezone{\thefield{#4}}}}%
+ \expandafter\protected\expandafter\def\csname mkbibtime12h\endcsname#1#2#3#4{%
+ \stripzeros{\mktimehh{\thefield{#1}}}\bibtimesep
+ \forcezerosmdt{\thefield{#2}}%
+ \iffieldundef{#3}{}
+ {\bibtimesep
+ \forcezerosmdt{\thefield{#3}}}%
+ \space
+ \ifnumless{\thefield{#1}}{12}
+ {\bibstring{am}}
+ {\bibstring{pm}}%
+ \iffieldundef{#4}{}
+ {\space\bibtimezonesep
+ \parentext{\mkbibtimezone{\thefield{#4}}}}}%
+ \protected\def\mkbibyeardivisiondateshort#1#2{%
+ \mkbibyeardivision{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}%
+ \dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}%
+ \protected\def\mkbibyeardivisiondatelong#1#2{%
+ \mkbibyeardivision{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}%
+ \dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}%
+}
+
+\UndeclareBibliographyExtras{%
+ \restorecommand\mkbibordedition
+ \restorecommand\mkbibordseries
+}
+
+\DeclareBibliographyStrings{%
+ bibliography = {{Literatura}{Literatura}},
+ references = {{Literatura}{Literatura}},
+ shorthands = {{Kratice}{Kratice}},
+ editor = {{urednik}{ur\adddot}},
+ editors = {{uredniki}{ur\adddot}},
+ compiler = {{sestavljalec}{sest\adddot}},
+ compilers = {{sestavljalci}{sest\adddot}},
+ redactor = {{redaktor}{redaktor}},
+ redactors = {{redaktorji}{redaktorji}},
+ reviser = {{korektor}{korektor}},
+ revisers = {{korektorji}{korektorji}},
+ founder = {{snovalec}{snovalec}},
+ founders = {{snovalci}{snovalci}},
+ continuator = {{nadaljevalec}{nadaljevalec}},
+ continuators = {{nadaljevalci}{nadaljevalci}},
+ collaborator = {{sodelavec}{sod\adddot}},
+ collaborators = {{sodelavci}{sod\adddot}},
+ translator = {{prevajalec}{prev\adddot}},
+ translators = {{prevajalci}{prev\adddot}},
+ commentator = {{komentator}{komentator}},
+ commentators = {{komentatorji}{komentatorji}},
+ annotator = {{anotator}{anotator}},
+ annotators = {{anotatorji}{anotatorji}},
+ commentary = {{komentar}{komentar}},
+ annotations = {{opombe}{op\adddot}},
+ introduction = {{uvod}{uvod}},
+ foreword = {{predgovor}{predg\adddot}},
+ afterword = {{spremna beseda}{spr\adddotspace b\adddot}},
+ editortr = {{urednik in prevajalec}%
+ {ur\adddotspace in prev\adddot}},
+ editorstr = {{uredniki in prevajalci}%
+ {ur\adddotspace and prev\adddot}},
+ editorco = {{urednik in komentator}%
+ {ur\adddotspace in komentator}},
+ editorsco = {{uredniki in komentatorji}%
+ {ur\adddotspace in komentatorji}},
+ editoran = {{urednik in anotator}%
+ {ur\adddotspace in anotator}},
+ editorsan = {{uredniki in anotatorji}%
+ {ur\adddotspace in anotatorji}},
+ editorin = {{urednik in avtor uvoda}%
+ {ur\adddotspace in avt\adddotspace uvoda}},
+ editorsin = {{uredniki in avtorji uvoda}%
+ {ur\adddotspace in avt\adddotspace uvoda}},
+ editorfo = {{urednik in avtor predgovora}%
+ {ur\adddotspace in avt\adddotspace predg\adddot}},
+ editorsfo = {{uredniki in avtorji predgovora}%
+ {ur\adddotspace in avt\adddotspace predg\adddot}},
+ editoraf = {{urednik in avtor spremne besede}%
+ {ur\adddotspace in avt\adddotspace spr\adddotspace b\adddot}},
+ editorsaf = {{uredniki in avtorji spremne besede}%
+ {ur\adddotspace in avt\adddotspace spr\adddotspace b\adddot}},
+ editortrco = {{urednik, prevajalec in komentator}%
+ {ur\adddotspace, prev\adddotspace in komentator}},
+ editorstrco = {{uredniki, prevajalci in komentatorji}%
+ {ur\adddotspace, prev\adddotspace in komentatorji}},
+ editortran = {{urednik, prevajalec in anotator}%
+ {ur\adddotspace, prev\adddotspace in anotator}},
+ editorstran = {{uredniki, prevajalci in anotatorji}%
+ {ur\adddotspace, prev\adddotspace in anotatorji}},
+ editortrin = {{urednik, prevajalec in avtor uvoda}%
+ {ur\adddotspace, prev\adddotspace in avt\adddotspace uvoda}},
+ editorstrin = {{uredniki, prevajalci in avtorji uvoda}%
+ {ur\adddotspace, prev\adddotspace in avt\adddotspace uvoda}},
+ editortrfo = {{urednik, prevajalec in avtor predgovora}%
+ {ur\adddotspace, prev\adddotspace in avt\adddotspace predg\adddot}},
+ editorstrfo = {{uredniki, prevajalci in avtorji predgovora}%
+ {ur\adddotspace, prev\adddotspace in avt\adddotspace predg\adddot}},
+ editortraf = {{urednik, prevajalec in avtor spremne besede}%
+ {ur\adddotspace, prev\adddotspace in avt\adddotspace spr\adddotspace b\adddot}},
+ editorstraf = {{uredniki, prevajalci in avtorji spremne besede}%
+ {ur\adddotspace, prev\adddotspace in avt\adddotspace spr\adddotspace b\adddot}},
+ editorcoin = {{urednik, komentator in avtor uvoda}%
+ {ur\adddotspace, komentator in avt\adddotspace uvoda}},
+ editorscoin = {{uredniki, komentatorji in avtorji uvoda}%
+ {ur\adddotspace, komentatorji in avt\adddotspace uvoda}},
+ editorcofo = {{urednik, komentator in avtor predgovora}%
+ {ur\adddotspace, komentator in avt\adddotspace predg\adddot}},
+ editorscofo = {{uredniki, komentatorji in avtorji predgovora}%
+ {ur\adddotspace, komentatorji in avt\adddotspace predg\adddot}},
+ editorcoaf = {{urednik, komentator in avtor spremne besede}%
+ {ur\adddotspace, komentator in avt\adddotspace spr\adddotspace b\adddot}},
+ editorscoaf = {{uredniki, komentatorji in avtorji spremne besede}%
+ {ur\adddotspace, komentatorji in avt\adddotspace spr\adddotspace b\adddot}},
+ editoranin = {{urednik, anotator in avtor uvoda}%
+ {ur\adddotspace, anotator in avt\adddotspace uvoda}},
+ editorsanin = {{uredniki, anotatorji in avtorji uvoda}%
+ {ur\adddotspace, anotatorji in avt\adddotspace uvoda}},
+ editoranfo = {{urednik, anotator in avtor predgovora}%
+ {ur\adddotspace, anotator in avt\adddotspace predg\adddot}},
+ editorsanfo = {{uredniki, anotatorji in avtorji predgovora}%
+ {ur\adddotspace, anotatorji in avt\adddotspace predg\adddot}},
+ editoranaf = {{urednik, anotator in avtor spremne besede}%
+ {ur\adddotspace, anotator in avt\adddotspace spr\adddotspace b\adddot}},
+ editorsanaf = {{uredniki, anotatorji in avtorji spremne besede}%
+ {ur\adddotspace, anotatorji in avt\adddotspace spr\adddotspace b\adddot}},
+ editortrcoin = {{urednik, prevajalec, komentator in avtor uvoda}%
+ {ur\adddotspace, prev\adddotspace, komentator in avt\adddotspace uvoda}},
+ editorstrcoin = {{uredniki, prevajalci, komentatorji in avtorji uvoda}%
+ {ur\adddotspace, prev\adddotspace, komentatorji in avt\adddotspace uvoda}},
+ editortrcofo = {{urednik, prevajalec, komentator in avtor predgovora}%
+ {ur\adddotspace, prev\adddotspace, komentator in avt\adddotspace predg\adddot}},
+ editorstrcofo = {{uredniki, prevajalci, komentatorji in avtorji predgovora}%
+ {ur\adddotspace, prev\adddotspace, komentatorji in avt\adddotspace predg\adddot}},
+ editortrcoaf = {{urednik, prevajalec, komentator in avtor spremne besede}%
+ {ur\adddotspace, prev\adddotspace, komentator in avt\adddotspace spr\adddotspace b\adddot}},
+ editorstrcoaf = {{uredniki, prevajalci, komentatorji in avtorji spremne besede}%
+ {ur\adddotspace, prev\adddotspace, komentatorji in avt\adddotspace spr\adddotspace b\adddot}},
+ editortranin = {{urednik, prevajalec, anotator in avtor uvoda}%
+ {ur\adddotspace, prev\adddotspace, anotator in avt\adddotspace uvoda}},
+ editorstranin = {{uredniki, prevajalci, anotatorji in avtorji uvoda}%
+ {ur\adddotspace, prev\adddotspace, anotatorji in avt\adddotspace uvoda}},
+ editortranfo = {{urednik, prevajalec, anotator in avtor predgovora}%
+ {ur\adddotspace, prev\adddotspace, anotator in avt\adddotspace predg\adddot}},
+ editorstranfo = {{uredniki, prevajalci, anotatorji in avtorji predgovora}%
+ {ur\adddotspace, prev\adddotspace, anotatorji in avt\adddotspace predg\adddot}},
+ editortranaf = {{urednik, prevajalec, anotator in avtor spremne besede}%
+ {ur\adddotspace, prev\adddotspace, anotator in avt\adddotspace spr\adddotspace b\adddot}},
+ editorstranaf = {{uredniki, prevajalci, anotatorji in avtorji spremne besede}%
+ {ur\adddotspace, prev\adddotspace, anotatorji in avt\adddotspace spr\adddotspace b\adddot}},
+ translatorco = {{prevajalec in komentator}%
+ {prev\adddotspace in komentator}},
+ translatorsco = {{prevajalci in komentatorji}%
+ {prev\adddotspace in komentatorji}},
+ translatoran = {{prevajalec in anotator}%
+ {prev\adddotspace in anotator}},
+ translatorsan = {{prevajalci in anotatorji}%
+ {prev\adddotspace in anotatorji}},
+ translatorin = {{avtor prevoda in uvoda}%
+ {avt\adddotspace prev\adddotspace in uvoda}},
+ translatorsin = {{avtorji prevoda in uvoda}%
+ {avt\adddotspace prev\adddotspace in uvoda}},
+ translatorfo = {{avtor prevoda in predgovora}%
+ {avt\adddotspace prev\adddotspace in predg\adddot}},
+ translatorsfo = {{avtorji prevoda in predgovora}%
+ {avt\adddotspace prev\adddotspace in predg\adddot}},
+ translatoraf = {{avtor prevoda in spremne besede}%
+ {avt\adddotspace prev\adddotspace in spr\adddotspace b\adddot}},
+ translatorsaf = {{avtorji prevoda in spremne besede}%
+ {avt\adddotspace prev\adddotspace in spr\adddotspace b\adddot}},
+ translatorcoin = {{avtor prevoda, komentarja in uvoda}%
+ {avt\adddotspace prev\adddotspace, komentarja in uvoda}},
+ translatorscoin = {{avtorji prevoda, komentarja in uvoda}%
+ {avt\adddotspace prev\adddotspace, komentarja in uvoda}},
+ translatorcofo = {{avtor prevoda, komentarja in predgovora}%
+ {avt\adddotspace prev\adddotspace, komentarja in predg\adddot}},
+ translatorscofo = {{avtorji prevoda, komentarja in predgovora}%
+ {avt\adddotspace prev\adddotspace, komentarja in predg\adddot}},
+ translatorcoaf = {{avtor prevoda, komentarja in spremne besede}%
+ {avt\adddotspace prev\adddotspace, komentarja in spr\adddotspace b\adddot}},
+ translatorscoaf = {{avtorji prevoda, komentarja in spremne besede}%
+ {avt\adddotspace prev\adddotspace, komentarja in spr\adddotspace b\adddot}},
+ translatoranin = {{avtor prevoda, opomb in uvoda}%
+ {avt\adddotspace prev\adddotspace, opomb in uvoda}},
+ translatorsanin = {{avtorji prevoda, opomb in uvoda}%
+ {avt\adddotspace prev\adddotspace, opomb in uvoda}},
+ translatoranfo = {{avtor prevoda, opomb in predgovora}%
+ {avt\adddotspace prev\adddotspace, opomb in predg\adddot}},
+ translatorsanfo = {{avtorji prevoda, opomb in predgovora}%
+ {avt\adddotspace prev\adddotspace, opomb in predg\adddot}},
+ translatoranaf = {{avtor prevoda, opomb in spremne besede}%
+ {avt\adddotspace prev\adddotspace, opomb in spr\adddotspace b\adddot}},
+ translatorsanaf = {{avtorji prevoda, opomb in spremne besede}%
+ {avt\adddotspace prev\adddotspace, opomb in spr\adddotspace b\adddot}},
+% organizer = {{}{}},% FIXME: missing
+% organizers = {{}{}},% FIXME: missing
+% byorganizer = {{}{}},% FIXME: missing
+ byauthor = {{}{}},
+ byeditor = {{uredil}{ur\adddot}},% FIXME: unsure
+ bycompiler = {{sestavil}{sest\adddot}},% FIXME: unsure
+ byredactor = {{oblikoval}{oblik\adddot}},% FIXME: unsure
+ byreviser = {{koregiral}{koregiral}},% FIXME: unsure
+ byreviewer = {{recenziral}{recenziral}},% FIXME: unsure
+ byfounder = {{snoval}{snoval}},% FIXME: unsure
+ bycontinuator = {{nadaljeval}{nadaljeval}},% FIXME: unsure
+ bycollaborator = {{v sodelovanju z}{v sod\adddotspace z}},
+ bytranslator = {{prevedel}{prev\adddot}},% FIXME: unsure
+ bycommentator = {{komentiral}{komentiral}},% FIXME: unsure
+ byannotator = {{anotiral}{anotiral}},% FIXME: unsure
+ withcommentator = {{s komentarjem}{s komentarjem}},
+ withannotator = {{z opombami}{z opombami}},
+ withintroduction = {{z uvodom}{z uvodom}},
+ withforeword = {{s predgovorom}{s predg\adddot}},
+ withafterword = {{s spremno besedo}{s spr\adddotspace b\adddot}},
+ byeditortr = {{uredil in prevedel}%
+ {uredil in prevedel}},% FIXME: unsure
+ byeditorco = {{uredil in komentiral}%
+ {ur\adddotspace in komentiral}},% FIXME: unsure
+ byeditoran = {{uredil in anotiral}%
+ {ur\adddotspace in anotiral}},% FIXME: unsure
+ byeditorin = {{uredil, z uvodom}%
+ {ur\adddotspace z uvodom}},% FIXME: unsure
+ byeditorfo = {{uredil, s predgovorom}%
+ {ur\adddotspace s predg\adddot}},% FIXME: unsure
+ byeditoraf = {{uredil, s spremno besedo}%
+ {ur\adddotspace s sprem\adddotspace b\adddot}},% FIXME: unsure
+ byeditortrco = {{uredil, prevedel \lbx@lfromlang\ in komentiral}%
+ {ur\adddotspace prev\adddot\ \lbx@sfromlang\ in komentiral}},% FIXME: unsure
+ byeditortran = {{uredil, prevedel \lbx@lfromlang\ in anotiral}%
+ {ur\adddotspace prev\adddot\ \lbx@sfromlang\ in anotiral}},% FIXME: unsure
+ byeditortrin = {{uredil in prevedel \lbx@lfromlang, z uvodom}%
+ {ur\adddotspace in prev\adddot\ \lbx@sfromlang, z uvodom}},% FIXME: unsure
+ byeditortrfo = {{uredil in prevedel \lbx@lfromlang, s predgovorom}%
+ {ur\adddotspace in prev\adddot\ \lbx@sfromlang, s predg\adddot}},% FIXME: unsure
+ byeditortraf = {{uredil in prevedel \lbx@lfromlang, s spremno besedo}%
+ {ur\adddotspace in prev\adddot\ \lbx@sfromlang, s sprem\adddotspace b\adddot}},% FIXME: unsure
+ byeditorcoin = {{uredil in komentiral, z uvodom}%
+ {ur\adddotspace in komentiral, z uvodom}},% FIXME: unsure
+ byeditorcofo = {{uredil in komentiral, s predgovorom}%
+ {ur\adddotspace in komentiral, s predg\adddot}},% FIXME: unsure
+ byeditorcoaf = {{uredil in komentiral, s spremno besedo}%
+ {ur\adddotspace in komentiral, s sprem\adddotspace b\adddot}},% FIXME: unsure
+ byeditoranin = {{uredil in anotiral, z uvodom}%
+ {ur\adddotspace in anotiral, z uvodom}},% FIXME: unsure
+ byeditoranfo = {{uredil in anotiral, s predgovorom}%
+ {ur\adddotspace in anotiral, s predg\adddot}},% FIXME: unsure
+ byeditoranaf = {{uredil in anotiral, s spremno besedo}%
+ {ur\adddotspace in anotiral, s sprem\adddotspace b\adddot}},% FIXME: unsure
+ byeditortrcoin = {{uredil, prevedel \lbx@lfromlang\ in komentiral, z uvodom}%
+ {ur\adddotspace prev\adddot\ \lbx@sfromlang\ in komentiral, z uvodom}},% FIXME: unsure
+ byeditortrcofo = {{uredil, prevedel \lbx@lfromlang\ in komentiral, s predgovorom}%
+ {ur\adddotspace prev\adddot\ \lbx@sfromlang\ in komentiral, s predg\adddot}},% FIXME: unsure
+ byeditortrcoaf = {{uredil, prevedel \lbx@lfromlang\ in komentiral, s spremno besedo}%
+ {ur\adddotspace prev\adddot\ \lbx@sfromlang\ in komentiral, s sprem\adddotspace b\adddot}},% FIXME: unsure
+ byeditortranin = {{uredil, prevedel \lbx@lfromlang\ in anotiral, z uvodom}%
+ {ur\adddotspace prev\adddot\ \lbx@sfromlang\ in anotiral, z uvodom}},% FIXME: unsure
+ byeditortranfo = {{uredil, prevedel \lbx@lfromlang\ in anotiral, s predgovorom}%
+ {ur\adddotspace prev\adddot\ \lbx@sfromlang\ in anotiral, s predg\adddot}},% FIXME: unsure
+ byeditortranaf = {{uredil, prevedel \lbx@lfromlang\ in anotiral, s spremno besedo}%
+ {ur\adddotspace prev\adddot\ \lbx@sfromlang\ in anotiral, s sprem\adddotspace b\adddot}},% FIXME: unsure
+ bytranslatorco = {{prevedel \lbx@lfromlang\ in komentiral}%
+ {prev\adddot\ \lbx@sfromlang\ in komentiral}},% FIXME: unsure
+ bytranslatoran = {{prevedel \lbx@lfromlang\ in anotiral}%
+ {prev\adddot\ \lbx@sfromlang\ in anotiral}},% FIXME: unsure
+ bytranslatorin = {{prevedel \lbx@lfromlang, z uvodom}%
+ {prev\adddot\ \lbx@sfromlang, z uvodom}},% FIXME: unsure
+ bytranslatorfo = {{prevedel \lbx@lfromlang, s predgovorom}%
+ {prev\adddot\ \lbx@sfromlang, s predg\adddot}},% FIXME: unsure
+ bytranslatoraf = {{prevedel \lbx@lfromlang, s spremno besedo}%
+ {prev\adddot\ \lbx@sfromlang, s sprem\adddotspace b\adddot}},% FIXME: unsure
+ bytranslatorcoin = {{prevedel \lbx@lfromlang\ in komentiral, z uvodom}%
+ {prev\adddot\ \lbx@sfromlang\ in komentiral, z uvodom}},% FIXME: unsure
+ bytranslatorcofo = {{prevedel \lbx@lfromlang\ in komentiral, s predgovorom}%
+ {prev\adddot\ \lbx@sfromlang\ in komentiral, s predg\adddot}},% FIXME: unsure
+ bytranslatorcoaf = {{prevedel \lbx@lfromlang\ in komentiral, s spremno besedo}%
+ {prev\adddot\ \lbx@sfromlang\ in komentiral, s sprem\adddotspace b\adddot}},% FIXME: unsure
+ bytranslatoranin = {{prevedel \lbx@lfromlang\ in anotiral, z uvodom}%
+ {prev\adddot\ \lbx@sfromlang\ in anotiral, z uvodom}},% FIXME: unsure
+ bytranslatoranfo = {{prevedel \lbx@lfromlang\ in anotiral, s predgovorom}%
+ {prev\adddot\ \lbx@sfromlang\ in anotiral, s predg\adddot}},% FIXME: unsure
+ bytranslatoranaf = {{prevedel \lbx@lfromlang\ in anotiral, s spremno besedo}%
+ {prev\adddot\ \lbx@sfromlang\ in anotiral, s sprem\adddotspace b\adddot}},% FIXME: unsure
+ and = {{in}{in}},
+ andothers = {{in sodelavci}{in sod\adddot}},
+ andmore = {{idr\adddot}{idr\adddot}},
+ volume = {{zvezek}{zv\adddot}},
+ volumes = {{zvezki}{zv\adddot}},
+ involumes = {{v}{v}},
+ jourvol = {{letnik}{let\adddot}},
+ jourser = {{zbirka}{zbirka}},
+ book = {{knjiga}{knj\adddot}},
+ part = {{del}{del}},
+ issue = {{\v{s}tevilka}{\v{s}t\adddot}},
+ newseries = {{nova zbirka}{nova zbirka}},
+ oldseries = {{stara zbirka}{stara zbirka}},
+ edition = {{izdaja}{izd\adddot}},
+ reprint = {{ponatis}{ponatis}},
+ reprintof = {{ponatis}{ponatis}},
+ reprintas = {{ponatisnjeno kot}{ponatisnjeno kot}},
+ reprintfrom = {{ponatisnjeno iz}{ponatisnjeno iz}},
+ %reviewof = {{recenzija}{recenzija}},% FIXME: unsure
+ translationof = {{prevod}{prev\adddot}},
+ translationas = {{prevedeno kot}{prev\adddotspace kot}},
+ translationfrom = {{prevedeno iz}{prev\adddotspace iz}},
+ origpubas = {{izvirna izdaja}{izvirna izd\adddot}},
+ origpubin = {{izvirno izdano v}{izvirno izdano v}},
+ astitle = {{}{}},
+ bypublisher = {{}{}},
+ nodate = {{brez datuma}{b\adddot d\adddot}},
+ page = {{stran}{str\adddot}},
+ pages = {{strani}{str\adddot}},
+ column = {{stolpec}{st\adddot}},
+ columns = {{stolpci}{st\adddot}},
+ line = {{vrstica}{v\adddot}},
+ lines = {{vrstice}{v\adddot}},
+ verse = {{verz}{v\adddot}},
+ verses = {{verzi}{v\adddot}},
+ section = {{razdelek}{\S}},
+ sections = {{razdelek}{\S\S}},
+ paragraph = {{odstavek}{odstavek}},
+ paragraphs = {{odstavki}{odstavki}},
+% pagetotal = {{}{}},% FIXME: missing
+% pagetotals = {{}{}},% FIXME: missing
+% columntotal = {{}{}},% FIXME: missing
+% columntotals = {{}{}},% FIXME: missing
+% linetotal = {{}{}},% FIXME: missing
+% linetotals = {{}{}},% FIXME: missing
+% versetotal = {{}{}},% FIXME: missing
+% versetotals = {{}{}},% FIXME: missing
+% sectiontotal = {{}{}},% FIXME: missing
+% sectiontotals = {{}{}},% FIXME: missing
+% paragraphtotal = {{}{}},% FIXME: missing
+% paragraphtotals = {{}{}},% FIXME: missing
+ in = {{v}{v}},
+ inseries = {{v zbirki}{v zbirki}},
+ ofseries = {{iz zbirke}{iz zbirke}},
+ number = {{\v{s}tevilka}{\v{s}t\adddot}},
+ chapter = {{poglavje}{pogl\adddot}},
+% bathesis = {{}{}},% FIXME: missing
+ mathesis = {{Magistrsko delo}{Magistrsko delo}},
+ phdthesis = {{Doktorska disertacija}{Doktorska disertacija}},
+% candthesis = {{Candidate thesis}{Cand\adddotspace thesis}},% FIXME: don't know
+ resreport = {{Raziskovalno poro\v{c}ilo}{Razisk\adddotspace poro\v{c}ilo}},
+ techreport = {{Tehni\v{c}no poro\v{c}ilo}{Teh\adddotspace poro\v{c}ilo}},
+ software = {{Ra\v{c}unalni\v{s}ki program}{Ra\v{c}\adddotspace prog\adddot}},
+ datacd = {{CD-ROM}{CD-ROM}},
+ audiocd = {{avdio CD}{avdio CD}},
+ version = {{verzija}{ver\adddot}},
+ url = {{spletni naslov}{spletni naslov}},
+ urlfrom = {{dostopno na}{dostopno na}},
+ urlseen = {{pridobljeno}{pridobljeno}},
+ inpreparation = {{v pripravi}{v pripravi}},
+ submitted = {{poslano v objavo}{poslano v objavo}},
+ %forthcoming = {{forthcoming}{forthcoming}},% FIXME: don't know
+ inpress = {{v tisku}{v tisku}},
+ %prepublished = {{pre-published}{pre-published}},% FIXME: don't know
+ citedas = {{v nadaljevanju citirano kot}{v nadalj\adddotspace cit\adddotspace kot}},
+ thiscite = {{posebno}{posebno}},
+ seenote = {{glej opombo}{gl\adddotspace op\adddot}},
+ quotedin = {{citirano v}{cit\adddotspace v}},
+ idem = {{isti}{id\adddot}},
+ idemsm = {{isti}{id\adddot}},
+ idemsf = {{ista}{id\adddot}},
+ idemsn = {{isto}{id\adddot}},
+ idempm = {{isti}{id\adddot}},
+ idempf = {{iste}{id\adddot}},
+ idempn = {{ista}{id\adddot}},
+ idempp = {{isti}{id\adddot}},
+ ibidem = {{prav tam}{ibid\adddot}},
+% opcit = {{op\adddotspace cit\adddot}{op\adddotspace cit\adddot}},% FIXME: don't know
+% loccit = {{loc\adddotspace cit\adddot}{loc\adddotspace cit\adddot}},% FIXME: don't know
+ confer = {{primerjaj}{prim\adddot}},
+% sequens = {{sq\adddot}{sq\adddot}},% FIXME: don't know
+% sequentes = {{sqq\adddot}{sqq\adddot}},% FIXME: don't know
+% passim = {{passim}{pass\adddot}},% FIXME: don't know
+ see = {{glej}{gl\adddot}},
+ seealso = {{glej tudi}{gl\adddotspace tudi}},
+ backrefpage = {{citirano na strani}{cit\adddotspace na str\adddot}},
+ backrefpages = {{citirano na straneh}{cit\adddotspace na str\adddot}},
+ january = {{januar}{jan\adddot}},
+ february = {{februar}{feb\adddot}},
+ march = {{marec}{mar\adddot}},
+ april = {{april}{apr\adddot}},
+ may = {{maj}{maj}},
+ june = {{junij}{jun\adddot}},
+ july = {{julij}{jul\adddot}},
+ august = {{avgust}{avg\adddot}},
+ september = {{september}{sep\adddot}},
+ october = {{oktober}{okt\adddot}},
+ november = {{november}{nov\adddot}},
+ december = {{december}{dec\adddot}},
+ langamerican = {{angle\v{s}\v{c}ina}{angl\adddot}},
+ langbrazilian = {{brazil\v{s}\v{c}ina}{braz\adddot}},
+% langbulgarian = {{}{}},% FIXME: missing
+ langcatalan = {{katalon\v{s}\v{c}ina}{kat\adddot}},
+ langcroatian = {{hrva\v{s}\v{c}ina}{hrv\adddot}},
+ langczech = {{\v{c}e\v{s}\v{c}ina}{\v{c}e\v{s}\adddot}},
+ langdanish = {{dan\v{s}\v{c}ina}{dan\adddot}},
+ langdutch = {{nizozem\v{s}\v{c}ina}{niz\adddot}},
+ langenglish = {{angle\v{s}\v{c}ina}{angl\adddot}},
+% langestonian = {{}{}},% FIXME: missing
+ langfinnish = {{fin\v{s}\v{c}ina}{fin\adddot}},
+ langfrench = {{franco\v{s}\v{c}ina}{fr\adddot}},
+ langgalician = {{galicij\v{s}\v{c}ina}{gal\adddot}},
+ langgerman = {{nem\v{s}\v{c}ina}{nem\adddot}},
+ langgreek = {{gr\v{s}\v{c}ina}{gr\adddot}},
+% langhungarian = {{}{}}, % FIXME: missing
+ langitalian = {{italijan\v{s}\v{c}ina}{it\adddot}},
+ langlatin = {{latin\v{s}\v{c}ina}{lat\adddot}},
+% langlatvian = {{}{}},% FIXME: missing
+ langnorwegian = {{norve\v{s}\v{c}ina}{nor\adddot}},
+ langpolish = {{polj\v{s}\v{c}ina}{polj\adddot}},
+ langportuguese = {{portugal\v{s}\v{c}ina}{por\adddot}},
+ langrussian = {{ru\v{s}\v{c}ina}{ru\adddot}},
+% langslovak = {{}{}},% FIXME: missing
+ langslovene = {{sloven\v{s}\v{c}ina}{sl\adddot}},
+ langspanish = {{\v{s}pan\v{s}\v{c}ina}{\v{s}p\adddot}},
+ langswedish = {{\v{s}ved\v{s}\v{c}ina}{\v{s}ved\adddot}},
+ fromamerican = {{iz angle\v{s}\v{c}ine}{iz angl\adddot}},
+ frombrazilian = {{iz brazil\v{s}\v{c}ine}{iz braz\adddot}},
+% frombulgarian = {{}{}},% FIXME: missing
+ fromcatalan = {{iz katalon\v{s}\v{c}ine}{iz kat\adddot}},
+ fromcroatian = {{iz hrva\v{s}\v{c}ine}{iz hrv\adddot}},
+ fromczech = {{iz \v{c}e\v{s}\v{c}ine}{iz \v{c}e\v{s}\adddot}},
+ fromdanish = {{iz dan\v{s}\v{c}ine}{iz dan\adddot}},
+ fromdutch = {{iz nizozem\v{s}\v{c}ine}{iz niz\adddot}},
+ fromenglish = {{iz angle\v{s}\v{c}ine}{iz angl\adddot}},
+% fromestonian = {{}{}},% FIXME: missing
+ fromfinnish = {{iz fin\v{s}\v{c}ine}{iz fin\adddot}},
+ fromfrench = {{iz franco\v{s}\v{c}ine}{iz fr\adddot}},
+ fromgalician = {{iz galicij\v{s}\v{c}ine}{iz gal\adddot}},
+ fromgerman = {{iz nem\v{s}\v{c}ine}{iz nem\adddot}},
+ fromgreek = {{iz gr\v{s}\v{c}ine}{iz gr\adddot}},
+% fromhungarian = {{}{}}, % FIXME: missing
+ fromitalian = {{iz italijan\v{s}\v{c}ine}{iz it\adddot}},
+ fromlatin = {{iz latin\v{s}\v{c}ine}{iz lat\adddot}},
+% fromlatvian = {{}{}},% FIXME: missing
+ fromnorwegian = {{iz norve\v{s}\v{c}ine}{iz nor\adddot}},
+ frompolish = {{iz polj\v{s}\v{c}ine}{iz polj\adddot}},
+ fromportuguese = {{iz portugal\v{s}\v{c}ine}{iz por\adddot}},
+ fromrussian = {{iz ru\v{s}\v{c}ine}{iz ru\adddot}},
+% fromslovak = {{}{}},% FIXME: missing
+ fromslovene = {{iz sloven\v{s}\v{c}ine}{iz sl\adddot}},
+ fromspanish = {{iz \v{s}pan\v{s}\v{c}ine}{iz \v{s}p\adddot}},
+ fromswedish = {{iz \v{s}ved\v{s}\v{c}ine}{iz \v{s}ved\adddot}},
+ countryde = {{Nem\v{c}ija}{Nem\v{c}ija}},
+ countryeu = {{Evropska unija}{EU}},
+ countryep = {{Evropska unija}{EP}},
+ countryfr = {{Francija}{Francija}},
+ countryuk = {{Velika Britanija}{VB}},
+ countryus = {{Zdru\v{z}ene dr\v{z}ave Amerike}{ZDA}},
+ patent = {{patent}{patent}},
+ patentde = {{nem\v{s}ki patent}{nem\v{s}ki patent}},
+ patenteu = {{evropski patent}{evropski patent}},
+ patentfr = {{francoski patent}{francoski patent}},
+ patentuk = {{britanski patent}{britanski patent}},
+ patentus = {{patent v ZDA}{patent v ZDA}},
+ patreq = {{patentna prijava}{patentna prijava}},
+ patreqde = {{prijava nem\v{s}kega patenta}{prijava nem\v{s}kega patenta}},
+ patreqeu = {{prijava evropskega patenta}{prijava evropskega patenta}},
+ patreqfr = {{prijava francoskega patenta}{prijava francoskega patenta}},
+ patrequk = {{prijava britanskega patenta}{prijava britanskega patenta}},
+ patrequs = {{prijava patenta v ZDA}{prijava patenta v ZDA}},
+ file = {{datoteka}{datoteka}},
+ library = {{knji\v{z}nica}{knji\v{z}nica}},
+ abstract = {{povzetek}{povzetek}},
+ annotation = {{opomba}{op\adddot}},
+ commonera = {{po n\adddotspace\v{s}t\adddot}{n\adddotspace\v{s}t\adddot}},
+ beforecommonera = {{pred na\v{s}im \v{s}tetjem}{pr\adddotspace n\adddotspace\v{s}t\adddot}},
+ annodomini = {{na\v{s}e \v{s}tetje}{po\ n\adddotspace\v{s}t\adddot}},
+ beforechrist = {{pred Kristusom}{pr\adddotspace Kr\adddot}},
+% circa = {{}{}},% FIXME: missing
+% spring = {{}{}},% FIXME: missing
+% summer = {{}{}},% FIXME: missing
+% autumn = {{}{}},% FIXME: missing
+% winter = {{}{}},% FIXME: missing
+% springN = {{}{}},% FIXME: missing
+% summerN = {{}{}},% FIXME: missing
+% autumnN = {{}{}},% FIXME: missing
+% winterN = {{}{}},% FIXME: missing
+% springS = {{}{}},% FIXME: missing
+% summerS = {{}{}},% FIXME: missing
+% autumnS = {{}{}},% FIXME: missing
+% winterS = {{}{}},% FIXME: missing
+% Q1 = {{}{}},% FIXME: missing
+% Q2 = {{}{}},% FIXME: missing
+% Q3 = {{}{}},% FIXME: missing
+% Q4 = {{}{}},% FIXME: missing
+% QD1 = {{}{}},% FIXME: missing
+% QD2 = {{}{}},% FIXME: missing
+% QD3 = {{}{}},% FIXME: missing
+% S1 = {{}{}},% FIXME: missing
+% S2 = {{}{}},% FIXME: missing
+ am = {{dop\adddot}{dop\adddot}},
+ pm = {{pop\adddot}{pop\adddot}},
+}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/lbx/slovenian-ms.lbx b/macros/latex/contrib/biblatex-ms/latex/lbx/slovenian-ms.lbx
new file mode 100644
index 0000000000..ceac7345d0
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/lbx/slovenian-ms.lbx
@@ -0,0 +1,7 @@
+\ProvidesFile{slovenian-ms.lbx}
+[\abx@lbxid]
+
+\InheritBibliographyExtras{slovene}
+\InheritBibliographyStrings{slovene}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/lbx/spanish-ms.lbx b/macros/latex/contrib/biblatex-ms/latex/lbx/spanish-ms.lbx
new file mode 100644
index 0000000000..7c0ea3c7be
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/lbx/spanish-ms.lbx
@@ -0,0 +1,613 @@
+\ProvidesFile{spanish-ms.lbx}
+[\abx@lbxid]
+
+\DeclareRedundantLanguages{spanish}{spanish}
+
+\DeclareBibliographyExtras{%
+ \protected\def\bibrangedash{\mbox{-}}% non-breaking hyphen
+ \let\finalandcomma=\empty
+ \let\finalandsemicolon=\empty
+ \def\mkbibordinal{\mkbibmascord}%
+ \providecommand*{\sptext}{\textsuperscript}% \sptext -> spanish.ldf (babel)
+ \protected\def\mkbibmascord#1{\stripzeros{#1}\sptext{o}}%
+ \protected\def\mkbibfemord#1{\stripzeros{#1}\sptext{a}}%
+ \protected\def\mkbibneutord{\mkbibmascord}%
+ \protected\def\mkbibdatelong#1#2#3{%
+ \iffieldundef{#3}
+ {}
+ {\stripzeros{\thefield{#3}}%
+ \iffieldundef{#2}{}{\nobreakspace de\space}}%
+ \iffieldundef{#2}
+ {}
+ {\mkbibmonth{\thefield{#2}}%
+ \iffieldundef{#1}{}{\nobreakspace de\space}}%
+ \iffieldbibstring{#1}
+ {\bibstring{\thefield{#1}}}
+ {\dateeraprintpre{#1}\stripzeros{\thefield{#1}}}}%
+ \protected\def\mkbibdateshort#1#2#3{%
+ \iffieldundef{#3}
+ {}
+ {\mkdayzeros{\thefield{#3}}%
+ \iffieldundef{#2}{}{\mbox{-}}}%
+ \iffieldundef{#2}
+ {}
+ {\mkmonthzeros{\thefield{#2}}%
+ \iffieldundef{#1}{}{\mbox{-}}}%
+ \iffieldbibstring{#1}
+ {\bibstring{\thefield{#1}}}
+ {\dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}}%
+ \savecommand\mkdaterangeterse
+ \protected\def\mkdaterangeterse{%
+ \BibliographyWarning{%
+ Date format 'terse' not applicable to\MessageBreak
+ Spanish dates. Using format 'short' instead}%
+ \mkdaterangefull{short}}%
+ \savecommand\lbx@finalnamedelim
+ \savecommand\lbx@finallistdelim
+ \ifnumgreater{\value{smartand}}{0}
+ {\let\lbx@finalnamedelim=\lbx@es@smartand
+ \let\lbx@finallistdelim=\lbx@es@smartand}
+ {}%
+ \savecommand\mkbibordedition
+ \savecommand\mkbibordseries
+ \def\mkbibordedition{\mkbibfemord}%
+ \def\mkbibordseries{\mkbibfemord}%
+ \expandafter\protected\expandafter\def\csname mkbibtime24h\endcsname#1#2#3#4{%
+ \iffieldundef{#1}
+ {}
+ {\mktimezeros{\thefield{#1}}%
+ \iffieldundef{#2}{}{\bibtimesep}}%
+ \iffieldundef{#2}
+ {}
+ {\mktimezeros{\thefield{#2}}%
+ \iffieldundef{#3}{}{\bibtimesep}}%
+ \iffieldundef{#3}
+ {}
+ {\mktimezeros{\thefield{#3}}}%
+ \iffieldundef{#4}{}
+ {\bibtimezonesep
+ \mkbibtimezone{\thefield{#4}}}}%
+ \expandafter\protected\expandafter\def\csname mkbibtime12h\endcsname#1#2#3#4{%
+ \stripzeros{\mktimehh{\thefield{#1}}}\bibtimesep
+ \forcezerosmdt{\thefield{#2}}%
+ \iffieldundef{#3}{}
+ {\bibtimesep
+ \forcezerosmdt{\thefield{#3}}}%
+ \space
+ \ifnumless{\thefield{#1}}{12}
+ {\bibstring{am}}
+ {\bibstring{pm}}%
+ \iffieldundef{#4}{}
+ {\space\bibtimezonesep
+ \parentext{\mkbibtimezone{\thefield{#4}}}}}%
+ \protected\def\mkbibyeardivisiondateshort#1#2{%
+ \mkbibyeardivision{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}%
+ \dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}%
+ \protected\def\mkbibyeardivisiondatelong#1#2{%
+ \mkbibyeardivision{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}%
+ \dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}%
+}
+
+\UndeclareBibliographyExtras{%
+ \restorecommand\mkdaterangeterse
+ \restorecommand\lbx@finalnamedelim
+ \restorecommand\lbx@finallistdelim
+ \restorecommand\mkbibordedition
+ \restorecommand\mkbibordseries
+}
+
+\DeclareBibliographyStrings{%
+ bibliography = {{Bibliograf\'{\i}a}{Bibliograf\'{\i}a}},
+ references = {{Referencias}{Referencias}},
+ shorthands = {{Lista de abreviaturas}{Abreviaturas}},
+ editor = {{edici\'on}{ed\adddot}}, %% {edic'{\i}on} instead of {editor} or {editora}
+ editors = {{edici\'on}{eds\adddot}}, %% {edic'{\i}on} instead of {editores} or {editoras}
+ compiler = {{compilaci\'{o}n}{comp\adddot}}, %% {compilac\'{\i}on} instead of {compilador} or {compiladora}
+ compilers = {{compilaci\'{o}n}{comps\adddot}}, %% {compilac\'{\i}on} instead of {compiladores} or {compiladoras}
+ redactor = {{redacci\'{o}n}{red\adddot}}, %% {redacc\'{\i}on} instead of {redactor} or {redactora}
+ redactors = {{redacci\'{o}n}{reds\adddot}}, %% {redacc\'{\i}on} instead of {redactores} or {redactoras}
+ reviser = {{revisi\'{o}n}{rev\adddot}}, %% {revisi\'{\i}on} instead of {revisor} or {revisora}
+ revisers = {{revisi\'{o}n}{revs\adddot}}, %% {revisi\'{\i}on} instead of {revisores} or {revisoras}
+ founder = {{fundaci\'{o}n}{fund\adddot}}, %% {fundaci\'{o}n} instead of {fundador} or {fundadora}
+ founders = {{fundaci\'{o}n}{funds\adddot}}, %% {fundaci\'{o}n} instead of {fundadores} or {fundadoras}
+ continuator = {{continuaci\'{o}n}{cont\adddot}}, %% {continuaci\'{o}n} instead of {continuador} or {continuadora}
+ continuators = {{continuaci\'{o}n}{conts\adddot}}, %% {continuaci\'{o}n} instead of {continuadores} or {continuadoras}
+ collaborator = {{colaboraci\'{o}n}{colab\adddot}}, %% {colaboraci\'{o}n} instead of {colaborador} or {colaboradora}
+ collaborators = {{colaboraci\'{o}n}{colabs\adddot}}, %% {colaboraci\'{o}n} instead of {colaboradores} or {colaboradoras}
+ translator = {{traducci\'{o}n \lbx@sfromlang}{trad\adddotspace \lbx@sfromlang}}, %% {traducci\'{o}n} instead of {traductor} or {traductora}
+ translators = {{traducci\'{o}n \lbx@sfromlang}{trads\adddotspace \lbx@sfromlang}}, %% {traducci\'{o}n} instead of {traductores} or {traductoras}
+ commentator = {{comentario}{com\adddot}}, %% {comentario} instead of {comentador} or {comentadora}
+ commentators = {{comentarios}{coms\adddot}}, %% {comentarios} instead of {comentadores} or {comentadoras}
+ annotator = {{anotaciones}{anot\adddot}}, %% {anotaciones instead of {anotador} or {anotadora}
+ annotators = {{anotaciones}{anots\adddot}}, %% {anotaciones} instead of {anotadores} or {anotadoras}
+ commentary = {{comentario}{com\adddot}},
+ annotations = {{notas}{notas}},
+ introduction = {{introducci\'on}{intr\adddot}},
+ foreword = {{pr\'ologo}{pr\'ol\adddot}},
+ afterword = {{ep\'{i}logo}{ep\'{\i}l\adddot}},
+ editortr = {{edici\'{o}n y traducci\'{o}n \lbx@sfromlang}{ed\adddotspace y trad\adddotspace \lbx@sfromlang}}, %% {{edici\'{o}n y traducci\'{o}n} instead of {editor y traductor} or {editora y traductora}
+ editorstr = {{edici\'{o}n y traducci\'{o}n \lbx@sfromlang}{eds\adddotspace y trads\adddotspace \lbx@sfromlang}}, %% {{edici\'{o}n y traducci\'{o}n} instead of {editores y traductores} or {editoras y traductoras}
+ editorco = {{edici\'{o}n y comentario}{ed\adddotspace y com\adddot}}, %% {edici\'{o}n y comentario} instead of {editor y comentador} or {editora y comentadora}
+ editorsco = {{edici\'{o}n y comentarios}{eds\adddotspace y coms\adddot}}, %% {edici\'{o}n y comentarios} instead of {editores y comentadores} or {editoras y comentadoras}
+ editoran = {{edici\'{o}n y notas}{ed\adddotspace y anot\adddot}}, %% {edici\'{o}n y notas} instead of {editor y notas} or {editora y notas}
+ editorsan = {{edici\'{o}n y notas}{eds\adddotspace y anot\adddot}}, %% {edici\'{o}n y notas} instead of {editores y notas} or {editoras y notas}
+ editorin = {{edici\'{o}n e introducci\'{o}n}{ed\adddotspace e intr\adddot}}, %% {edici\'{o}n e introducci\'{o}n} instead of {editor e introducci\'{o}n} or {editora e introducci\'{o}n}
+ editorsin = {{edici\'{o}n e introducci\'{o}n}{eds\adddotspace e intr\adddot}}, %% {edici\'{o}n e introducci\'{o}n} instead of {editores e introducci\'{o}n} or {editoras e introducci\'{o}n}
+ editorfo = {{edici\'{o}n y pr\'{o}logo}{ed\adddotspace y pr\'{o}l\adddot}}, %% {edici\'{o}n y pr\'{o}logo} instead of {editor y pr\'{o}logo} or {editora y pr\'{o}logo}
+ editorsfo = {{edici\'{o}n y pr\'{o}logo}{eds\adddotspace y pr\'{o}l\adddot}}, %% {edici\'{o}n y pr\'{o}logo} instead of {editores y pr\'{o}logo} or {editoras y pr\'{o}logo}
+ editoraf = {{edici\'{o}n y ep\'{i}logo}{ed\adddotspace y ep\'{\i}l\adddot}}, %% {edici\'{o}n y ep\'{\i}l\ogo} instead of {editor y ep\'{\i}l\ogo} or {editora y ep\'{\i}l\ogo}
+ editorsaf = {{edici\'{o}n y ep\'{i}logo}{eds\adddotspace y ep\'{\i}l\adddot}}, %% {edici\'{o}n y ep\'{\i}l\ogo} instead of {editores y ep\'{\i}l\ogo} or {editoras y ep\'{\i}l\ogo}
+ editortrco = {{edici\'{o}n, traducci\'{o}n \lbx@sfromlang\ y comentario}{ed.,\addabbrvspace trad\adddotspace \lbx@sfromlang\ y com\adddot}}, %% {edici\'{o}n, traducci\'{o}n \lbx@sfromlang y comentarios} instead of {editor, traductor y comentarios} or {editora, traductora y comentarios}
+ editorstrco = {{edici\'{o}n, traducci\'{o}n \lbx@sfromlang\ y comentarios}{eds.,\addabbrvspace trads\adddotspace \lbx@sfromlang\ y coms\adddot}}, %% {edici\'{o}n, traducci\'{o}n \lbx@sfromlang y comentarios} instead of {editores, traductores y comentarios} or {editoras, traductoras y comentarios}
+ editortran = {{edici\'{o}n, traducci\'{o}n \lbx@sfromlang\ y notas}{ed.,\addabbrvspace trad\adddotspace \lbx@sfromlang\ y anot\adddot}}, %% {edici\'{o}n, traducci\'{o}n \lbx@sfromlang y notas} instead of {editor, traductor y notas} or {editora, traductora y notas}
+ editorstran = {{edici\'{o}n, traducci\'{o}n \lbx@sfromlang\ y notas}{eds.,\addabbrvspace trads\adddotspace \lbx@sfromlang\ y anot\adddot}}, %% {edici\'{o}n, traducci\'{o}n \lbx@sfromlang y notas} instead of {editores, traductores y notas} or {editoras, traductoras y notas}
+ editortrin = {{edici\'{o}n, traducci\'{o}n \lbx@sfromlang\ e introducci\'{o}n}{ed.,\addabbrvspace trad\adddotspace \lbx@sfromlang\ e intr\adddot}}, %% {edici\'{o}n, traducci\'{o}n \lbx@sfromlang e introducci\'{o}n} instead of {editor, traductor e introducci\'{o}n} or {editora, traductora e introducci\'{o}n}
+ editorstrin = {{edici\'{o}n, traducci\'{o}n \lbx@sfromlang\ e introducci\'{o}n}{eds.,\addabbrvspace trads\adddotspace \lbx@sfromlang\ e intr\adddot}}, %% {edici\'{o}n, traducci\'{o}n \lbx@sfromlang e introducci\'{o}n} instead of {editores, traductores e introducci\'{o}n} or {editoras, traductoras e introducci\'{o}n}
+ editortrfo = {{edici\'{o}n, traducci\'{o}n \lbx@sfromlang\ y pr\'{o}logo}{ed.,\addabbrvspace trad\adddotspace \lbx@sfromlang\ y pr\'{o}l\adddot}}, %% {edici\'{o}n, traducci\'{o}n \lbx@sfromlang y pr\'{o}logo} instead of {editor, traductor y prologuista} or {editora, traductora y prologuista}
+ editorstrfo = {{edici\'{o}n, traducci\'{o}n \lbx@sfromlang\ y pr\'{o}logo}{eds.,\addabbrvspace trads\adddotspace \lbx@sfromlang\ y pr\'{o}l\adddot}}, %% {edici\'{o}n, traducci\'{o}n \lbx@sfromlang y pr\'{o}logo} instead of {editores, traductores y prologuista} or {editoras, traductoras y prologuistas}
+ editortraf = {{edici\'{o}n, traducci\'{o}n \lbx@sfromlang\ y ep\'{i}logo}{ed.,\addabbrvspace trad\adddotspace \lbx@sfromlang\ y ep\'{\i}l\adddot}}, %% {edici\'{o}n, traducci\'{o}n \lbx@sfromlang y ep\'{i}logo} instead of {editor, traductor y ep\'{i}logo} or {editora, traductora y ep\'{i}logo}
+ editorstraf = {{edici\'{o}n, traducci\'{o}n \lbx@sfromlang\ y ep\'{i}logo}{eds.,\addabbrvspace trads\adddotspace \lbx@sfromlang\ y ep\'{\i}l\adddot}}, %% {edici\'{o}n, traducci\'{o}n \lbx@sfromlang y ep\'{i}logo} instead of {editores, traductores y ep\'{i}logo} or {editoras, traductoras y ep\'{i}logo}
+ editorcoin = {{edici\'{o}n, comentarios e introducci\'{o}n}{ed.,\addabbrvspace com\adddotspace e intr\adddot}}, %% {edici\'{o}n, comentarios e introducci\'{o}n} instead of {editor, comentador e introducci\'{o}n} or {editora, comentadora e introducci\'{o}n}
+ editorscoin = {{edici\'{o}n, comentarios e introducci\'{o}n}{eds.,\addabbrvspace coms\adddotspace e intr\adddot}}, %% {edici\'{o}n, comentarios e introducci\'{o}n} instead of {editores, comentadores e introducci\'{o}n} or {editoras, comentadoras e introducci\'{o}n}
+ editorcofo = {{edici\'{o}n, comentarios y pr\'{o}logo}{ed.,\addabbrvspace com\adddotspace y pr\'{o}l\adddot}}, %% {edici\'{o}n, comentarios y pr\'{o}logo} instead of {editor, comentador y pr\'{o}logo} or {editora, comentadora y pr\'{o}logo}
+ editorscofo = {{edici\'{o}n, comentarios y pr\'{o}logo}{eds.,\addabbrvspace coms\adddotspace y pr\'{o}l\adddot}}, %% {edici\'{o}n, comentarios y pr\'{o}logo} instead of {editores, comentadores y pr\'{o}logo} or {editoras, comentadoras y pr\'{o}logo}
+ editorcoaf = {{edici\'{o}n, comentarios y ep\'{i}logo}{eds.,\addabbrvspace com\adddotspace y ep\'{\i}l\adddot}}, %% {edici\'{o}n, comentarios y ep\'{i}logo} instead of {editor, comentador y ep\'{i}logo} or {editora, comentadora y ep\'{i}logo}
+ editorscoaf = {{edici\'{o}n, comentarios y ep\'{i}logo}{eds.,\addabbrvspace coms\adddotspace y ep\'{\i}l\adddot}}, %% {edici\'{o}n, comentarios y ep\'{i}logo} instead of {editores, comentadores y ep\'{i}logo} or {editoras, comentadoras y ep\'{i}logo}
+ editoranin = {{edici\'{o}n, notas e introducci\'{o}n}{ed.,\addabbrvspace anot\adddotspace e intr\adddot}}, %% {{edici\'{o}n, notas e introducci\'{o}n} instead of {editor, notas e introducci\'{o}n} or {editora, notas e introducci\'{o}n}
+ editorsanin = {{edici\'{o}n, notas e introducci\'{o}n}{eds.,\addabbrvspace anot\adddotspace e intr\adddot}}, %% {{edici\'{o}n, notas e introducci\'{o}n} instead of {editor, notas e introducci\'{o}n} or {editora, notas e introducci\'{o}n}
+ editoranfo = {{edici\'{o}n, notas y pr\'{o}logo}{ed.,\addabbrvspace anot\adddotspace y ep\'{\i}l\adddot}}, %% {{edici\'{o}n, notas y pr\'{o}logo} instead of {editor, notas y pr\'{o}logo} or {editora, notas y pr\'{o}logo}
+ editorsanfo = {{edici\'{o}n, notas y pr\'{o}logo}{eds.,\addabbrvspace anot\adddotspace y ep\'{\i}l\adddot}}, %% {{edici\'{o}n, notas y pr\'{o}logo} instead of {editores, notas y pr\'{o}logo} or {editoras, notas y pr\'{o}logo}
+ editoranaf = {{edici\'{o}n, notas y ep\'{i}logo}{ed.,\addabbrvspace anot\adddotspace y ep\'{\i}l\adddot}}, %% {{edici\'{o}n, notas y ep\'{i}logo} instead of {editor, notas y ep\'{i}logo} or {editora, notas y ep\'{i}logo}
+ editorsanaf = {{edici\'{o}n, notas y ep\'{i}logo}{eds.,\addabbrvspace anot\adddotspace y ep\'{\i}l\adddot}}, %% {{edici\'{o}n, notas y ep\'{i}logo} instead of {editores, notas y ep\'{i}logo} or {editoras, notas y ep\'{i}logo}
+ editortrcoin = {{edici\'{o}n, traducci\'{o}n \lbx@sfromlang, comentarios e introducci\'{o}n}{ed.,\addabbrvspace trad\adddotspace \lbx@sfromlang,\addabbrvspace com\adddotspace e intr\adddot}}, %% {edici\'{o}n, traducci\'{o}n \lbx@sfromlang, comentarios e introducci\'{o}n} instead of {editor, traducci\'{o}n \lbx@sfromlang, comentarios e introducci\'{o}n} or {editora, traducci\'{o}n \lbx@sfromlang, comentarios e introducci\'{o}n}
+ editorstrcoin = {{edici\'{o}n, traducci\'{o}n \lbx@sfromlang, comentarios e introducci\'{o}n}{eds.,\addabbrvspace trads\adddotspace \lbx@sfromlang,\addabbrvspace coms\adddotspace e intr\adddot}}, %% {edici\'{o}n, traducci\'{o}n \lbx@sfromlang, comentarios e introducci\'{o}n} instead of {editores, traducci\'{o}n \lbx@sfromlang, comentarios e introducci\'{o}n} or {editoras, traducci\'{o}n \lbx@sfromlang, comentarios e introducci\'{o}n}
+ editortrcofo = {{edici\'{o}n, traducci\'{o}n \lbx@sfromlang, comentarios y pr\'{o}logo}{ed.,\addabbrvspace trad\adddotspace \lbx@sfromlang,\addabbrvspace com\adddotspace y pr\'{o}l\adddot}}, %% {edici\'{o}n, traducci\'{o}n \lbx@sfromlang, comentarios y pr\'{o}logo} instead of {editor, traducci\'{o}n \lbx@sfromlang, comentarios y pr\'{o}logo} or {editora, traducci\'{o}n \lbx@sfromlang, comentarios y pr\'{o}logo}
+ editorstrcofo = {{edici\'{o}n, traducci\'{o}n \lbx@sfromlang, comentarios y pr\'{o}logo}{eds.,\addabbrvspace trads\adddotspace \lbx@sfromlang,\addabbrvspace coms\adddotspace y pr\'{o}l\adddot}}, %% {edici\'{o}n, traducci\'{o}n \lbx@sfromlang, comentarios y pr\'{o}logo} instead of {editores, traducci\'{o}n \lbx@sfromlang, comentarios y pr\'{o}logo} or {editoras, traducci\'{o}n \lbx@sfromlang, comentarios y pr\'{o}logo}
+ editortrcoaf = {{edici\'{o}n, traducci\'{o}n \lbx@sfromlang, comentarios y ep\'{i}logo}{ed.,\addabbrvspace trad\adddotspace \lbx@sfromlang,\addabbrvspace com\adddotspace y ep\'{\i}l\adddot}}, %% {edici\'{o}n, traducci\'{o}n \lbx@sfromlang, comentarios y ep\'{i}logo} instead of {editor, traducci\'{o}n \lbx@sfromlang, comentarios y ep\'{i}logo} or {editora, traducci\'{o}n \lbx@sfromlang, comentarios y ep\'{i}logo}
+ editorstrcoaf = {{edici\'{o}n, traducci\'{o}n \lbx@sfromlang, comentarios y ep\'{i}logo}{eds.,\addabbrvspace trads\adddotspace \lbx@sfromlang,\addabbrvspace coms\adddotspace y ep\'{\i}l\adddot}}, %% {edici\'{o}n, traducci\'{o}n \lbx@sfromlang, comentarios y ep\'{i}logo} instead of {editor, traducci\'{o}n \lbx@sfromlang, comentarios y ep\'{i}logo} or {editora, traducci\'{o}n \lbx@sfromlang, comentarios y ep\'{i}logo}
+ editortranin = {{edici\'{o}n, traducci\'{o}n \lbx@sfromlang, introducci\'{o}n y notas}{ed.,\addabbrvspace trad\adddotspace \lbx@sfromlang,\addabbrvspace intr\adddotspace y anot\adddot}}, %% {edici\'{o}n, traducci\'{o}n \lbx@sfromlang, introducci\'{o}n y notas} instead of {{editor, traducci\'{o}n \lbx@sfromlang, introducci\'{o}n y notas} or {{editora, traducci\'{o}n \lbx@sfromlang, introducci\'{o}n y notas}
+ editorstranin = {{edici\'{o}n, traducci\'{o}n \lbx@sfromlang, introducci\'{o}n y notas}{eds.,\addabbrvspace trads\adddotspace \lbx@sfromlang,\addabbrvspace intr\adddotspace y anot\adddot}}, %% {edici\'{o}n, traducci\'{o}n \lbx@sfromlang, introducci\'{o}n y notas} instead of {{editores, traducci\'{o}n \lbx@sfromlang, introducci\'{o}n y notas} or {{editoras, traducci\'{o}n \lbx@sfromlang, introducci\'{o}n y notas}
+ editortranfo = {{edici\'{o}n, traducci\'{o}n \lbx@sfromlang, pr\'{o}logo y notas}{ed.,\addabbrvspace trad\adddotspace \lbx@sfromlang,\addabbrvspace pr\'{o}l\adddotspace y anot\adddot}}, %% {edici\'{o}n, traducci\'{o}n \lbx@sfromlang, pr\'{o}logo y notas} instead of {editor, traducci\'{o}n \lbx@sfromlang, pr\'{o}logo y notas} or {editora, traducci\'{o}n \lbx@sfromlang, pr\'{o}logo y notas}
+ editorstranfo = {{edici\'{o}n, traducci\'{o}n \lbx@sfromlang, pr\'{o}logo y notas}{eds.,\addabbrvspace trads\adddotspace \lbx@sfromlang,\addabbrvspace pr\'{o}l\adddotspace y anot\adddot}}, %% {edici\'{o}n, traducci\'{o}n \lbx@sfromlang, pr\'{o}logo y notas} instead of {editores, traducci\'{o}n \lbx@sfromlang, pr\'{o}logo y notas} or {editoras, traducci\'{o}n \lbx@sfromlang, pr\'{o}logo y notas}
+ editortranaf = {{edici\'{o}n, traducci\'{o}n \lbx@sfromlang, ep\'{i}logo y notas}{ed.,\addabbrvspace trad\adddotspace \lbx@sfromlang,\addabbrvspace ep\'{\i}l\adddotspace y anot\adddot}}, %% {edici\'{o}n, traducci\'{o}n \lbx@sfromlang, ep\'{i}logo y notas} instead of {editor, traducci\'{o}n \lbx@sfromlang, ep\'{i}logo y notas} or {editora, traducci\'{o}n \lbx@sfromlang, ep\'{i}logo y notas}
+ editorstranaf = {{edici\'{o}n, traducci\'{o}n \lbx@sfromlang, ep\'{i}logo y notas}{eds.,\addabbrvspace trads\adddotspace \lbx@sfromlang,\addabbrvspace ep\'{\i}l\adddotspace y anot\adddot}}, %% {edici\'{o}n, traducci\'{o}n \lbx@sfromlang, ep\'{i}logo y notas} instead of {editores, traducci\'{o}n \lbx@sfromlang, ep\'{i}logo y notas} or {editoras, traducci\'{o}n \lbx@sfromlang, ep\'{i}logo y notas}
+ translatorco = {{traducci\'{o}n \lbx@sfromlang\ y comentario}{trad\adddotspace \lbx@sfromlang\ y com\adddot}}, %% {traducci\'{o}n \lbx@sfromlang y comentario} instead of {traductor y comentador} or {traductora y comentadora}
+ translatorsco = {{traducci\'{o}n \lbx@sfromlang\ y comentario}{trads\adddotspace \lbx@sfromlang\ y coms\adddot}}, %% {traducci\'{o}n \lbx@sfromlang y comentario} instead of {traductores y comentadores} or {traductoras y comentadoras}
+ translatoran = {{traducci\'{o}n \lbx@sfromlang\ y notas}{trad\adddotspace \lbx@sfromlang\ y anot\adddot}}, %% {traducci\'{o}n \lbx@sfromlang y notas} instead of {traductor y anotador} or {traductora y anotadora}
+ translatorsan = {{traducci\'{o}n \lbx@sfromlang\ y notas}{trads\adddotspace \lbx@sfromlang\ y anots\adddot}}, %% {traducci\'{o}n \lbx@sfromlang y notas} instead of {traductores y anotadores} or {traductoras y anotadoras}
+ translatorin = {{traducci\'{o}n \lbx@sfromlang\ e introducci\'{o}n}{trad\adddotspace \lbx@sfromlang\ e intr\adddot}}, %% {traducci\'{o}n \lbx@sfromlang e introducci\'{o}n} instead of {traductor \lbx@sfromlang e introducci\'{o}n} {traductora \lbx@sfromlang e introducci\'{o}n}
+ translatorsin = {{traducci\'{o}n \lbx@sfromlang\ e introducci\'{o}n}{trads\adddotspace \lbx@sfromlang\ e intr\adddot}}, %% {traducci\'{o}n \lbx@sfromlang e introducci\'{o}n} instead of {traductores \lbx@sfromlang e introducci\'{o}n} {traductoras \lbx@sfromlang e introducci\'{o}n}
+ translatorfo = {{traducci\'{o}n \lbx@sfromlang\ y pr\'{o}logo}{trad\adddotspace \lbx@sfromlang\ y pr\'{o}l\adddot}}, %% {traducci\'{o}n \lbx@sfromlang y pr\'{o}logo} instead of {traductor \lbx@sfromlang y prologuista} or {traductora \lbx@sfromlang y prologuista}
+ translatorsfo = {{traducci\'{o}n \lbx@sfromlang\ y pr\'{o}logo}{trads\adddotspace \lbx@sfromlang\ y pr\'{o}l\adddot}}, %% {traducci\'{o}n \lbx@sfromlang y pr\'{o}logo} instead of {traductores \lbx@sfromlang y prologuistas} or {traductoras \lbx@sfromlang y prologuistas}
+ translatoraf = {{traducci\'{o}n \lbx@sfromlang\ y ep\'{i}logo}{trad\adddotspace \lbx@sfromlang\ y ep\'{\i}l\adddot}}, %% {traducci\'{o}n \lbx@sfromlang y ep\'{i}logo} instead of {traductor \lbx@sfromlang y epiloguista} or {traductora \lbx@sfromlang y epiloguista}
+ translatorsaf = {{traducci\'{o}n \lbx@sfromlang\ y ep\'{i}logo}{trads\adddotspace \lbx@sfromlang\ y ep\'{\i}l\adddot}}, %% {traducci\'{o}n \lbx@sfromlang y ep\'{i}logo} instead of {traductores \lbx@sfromlang y epiloguistas} or {traductoras \lbx@sfromlang y epiloguistas}
+ translatorcoin = {{traducci\'{o}n \lbx@sfromlang, introducci\'{o}n y comentario}{trad\adddotspace \lbx@sfromlang, intr\adddotspace y com\adddot}}, %% {traducci\'{o}n \lbx@sfromlang, introducci\'{o}n y comentario} instead of {traductor \lbx@sfromlang, introducci\'{o}n y comentario} or {traductora \lbx@sfromlang, introducci\'{o}n y comentario}
+ translatorscoin = {{traducci\'{o}n \lbx@sfromlang, introducci\'{o}n y comentarios}{trads\adddotspace \lbx@sfromlang, intr\adddotspace y coms\adddot}}, %% {traducci\'{o}n \lbx@sfromlang, introducci\'{o}n y comentarios} instead of {traductores \lbx@sfromlang, introducci\'{o}n y comentarios} or {traductoras \lbx@sfromlang, introducci\'{o}n y comentarios}
+ translatorcofo = {{traducci\'{o}n \lbx@sfromlang, pr\'{o}logo y comentario}{trad\adddotspace \lbx@sfromlang, pr\'{o}l\adddotspace y com\adddot}}, %% {traducci\'{o}n \lbx@sfromlang, introducci\'{o}n y comentario} instead of {traductor \lbx@sfromlang, pr\'{o}logo y comentario} or {traductora \lbx@sfromlang, pr\'{o}logo y comentario}
+ translatorscofo = {{traducci\'{o}n \lbx@sfromlang, pr\'{o}logo y comentarios}{trads\adddotspace \lbx@sfromlang, pr\'{o}l\adddotspace y coms\adddot}}, %% {traducci\'{o}n \lbx@sfromlang, introducci\'{o}n y comentarios} instead of {traductores \lbx@sfromlang, pr\'{o}logo y comentarios} or {traductoras \lbx@sfromlang, pr\'{o}logo y comentarios}
+ translatorcoaf = {{traducci\'{o}n \lbx@sfromlang, ep\'{i}logo y comentario}{trad\adddotspace \lbx@sfromlang, ep\'{\i}l\adddotspace y com\adddot}}, %% {traducci\'{o}n \lbx@sfromlang, introducci\'{o}n y comentarios} instead of {traductor \lbx@sfromlang, ep\'{i}logo y comentario} or {traductora \lbx@sfromlang, ep\'{i}logo y comentario}
+ translatorscoaf = {{traducci\'{o}n \lbx@sfromlang, ep\'{i}logo y comentarios}{trads\adddotspace \lbx@sfromlang, ep\'{\i}l\adddotspace y coms\adddot}}, %% {traducci\'{o}n \lbx@sfromlang, introducci\'{o}n y comentarios} instead of {traductores \lbx@sfromlang, ep\'{i}logo y comentarios} or {traductoras \lbx@sfromlang, ep\'{i}logo y comentarios}
+ translatoranin = {{traducci\'{o}n \lbx@sfromlang, introducci\'{o}n y notas}{trad\adddotspace \lbx@sfromlang, intr\adddotspace y anot\adddot}}, %% {traducci\'{o}n \lbx@sfromlang, introducci\'{o}n y notas} instead of {traductor \lbx@sfromlang, introducci\'{o}n y notas} or {traductora \lbx@sfromlang, introducci\'{o}n y notas}
+ translatorsanin = {{traducci\'{o}n \lbx@sfromlang, introducci\'{o}n y notas}{trads\adddotspace \lbx@sfromlang, intr\adddotspace y anot\adddot}}, %% {traducci\'{o}n \lbx@sfromlang, introducci\'{o}n y notas} instead of {traductores \lbx@sfromlang, introducci\'{o}n y notas} or {traductoras \lbx@sfromlang, introducci\'{o}n y notas}
+ translatoranfo = {{traducci\'{o}n \lbx@sfromlang, pr\'{o}logo y notas}{trad\adddotspace \lbx@sfromlang, pr\'{o}l\adddotspace y anot\adddot}}, %% {traducci\'{o}n \lbx@sfromlang, pr\'{o}logo y notas} instead of {traductor \lbx@sfromlang, pr\'{o}logo y notas} or {traductora \lbx@sfromlang, pr\'{o}logo y notas}
+ translatorsanfo = {{traducci\'{o}n \lbx@sfromlang, pr\'{o}logo y notas}{trads\adddotspace \lbx@sfromlang, pr\'{o}l\adddotspace y anot\adddot}}, %% {traducci\'{o}n \lbx@sfromlang, pr\'{o}logo y notas} instead of {traductores \lbx@sfromlang, pr\'{o}logo y notas} or {traductoras \lbx@sfromlang, pr\'{o}logo y notas}
+ translatoranaf = {{traducci\'{o}n \lbx@sfromlang, ep\'{i}logo y notas}{trad\adddotspace \lbx@sfromlang, ep\'{\i}l\adddotspace y anot\adddot}}, %% {traducci\'{o}n \lbx@sfromlang, ep\'{i}logo y notas} instead of {traductor \lbx@sfromlang, ep\'{i}logo y notas} or {traductora \lbx@sfromlang, ep\'{i}logo y notas}
+ translatorsanaf = {{traducci\'{o}n \lbx@sfromlang, ep\'{i}logo y notas}{trads\adddotspace \lbx@sfromlang, ep\'{\i}l\adddotspace y anot\adddot}}, %% {traducci\'{o}n \lbx@sfromlang, ep\'{i}logo y notas} instead of {traductores \lbx@sfromlang, ep\'{i}logo y notas} or {traductora \lbx@sfromlang, ep\'{i}logo y notas}
+ organizer = {{organizaci\'on}{org\adddot}}, %% {organizaci\'on} instead of {organizador} or {organizadora}
+ organizers = {{organizaci\'on}{orgs\adddot}}, %% {organizaci\'on} instead of {organizadores} or {organizadoras}
+ byorganizer = {{organizado por}{org\adddotspace por}},
+ byauthor = {{de}{de}},
+ byeditor = {{editado por}{ed\adddotspace por}},
+ bycompiler = {{compilado por}{comp\adddotspace por}},
+ byredactor = {{redacci\'on de}{red\adddotspace de}},
+ byreviser = {{revisado por}{rev\adddotspace por}},% FIXME: unsure
+ byreviewer = {{rese\~{n}ado por}{res\adddotspace por}},% FIXME: unsure
+ byfounder = {{fundado por}{fund\adddotspace por}},
+ bycontinuator = {{continuado por}{cont\adddotspace por}},
+ bycollaborator = {{colaboraci\'{o}n de}{col\adddotspace de}},% FIXME: unsure
+ bytranslator = {{traducido \lbx@lfromlang\ por}{trad\adddotspace \lbx@sfromlang\ por}},
+ bycommentator = {{comentado por}{com\adddotspace por}},
+ byannotator = {{anotado por}{anot\adddotspace por}},
+ withcommentator = {{con comentario de}{con com\adddotspace de}},
+ withannotator = {{con notas de}{con notas de}},
+ withintroduction = {{con introduci\'on de}{con intr\adddotspace de}},
+ withforeword = {{con pr\'ologo de}{con pr\'ol\adddotspace de}},
+ withafterword = {{con ep\'{i}logo de}{con ep\'{\i}l\adddotspace de}},
+ byeditortr = {{editado y traducido \lbx@lfromlang\ por}%
+ {ed\adddotspace y trad\adddotspace \lbx@sfromlang\ por}},
+ byeditorco = {{editado y comentado por}%
+ {ed\adddotspace y com\adddotspace por}},
+ byeditoran = {{editado y anotado por}%
+ {ed\adddotspace y anot\adddotspace por}},
+ byeditorin = {{editado e introducido por}%
+ {ed\adddotspace e intr\adddotspace por}},
+ byeditorfo = {{editado y prologado por}%
+ {ed\adddotspace y pr\'ol\adddotspace por}},
+ byeditoraf = {{editado y epilogado por}%
+ {ed\adddotspace y ep\'{\i}l\adddotspace por}},
+ byeditortrco = {{editado, traducido \lbx@lfromlang\ y comentado por}%
+ {ed.,\addabbrvspace trad\adddotspace \lbx@sfromlang\ y com\adddotspace por}},
+ byeditortran = {{editado, traducido \lbx@lfromlang\ y anotado por}%
+ {ed.,\addabbrvspace trad\adddotspace \lbx@sfromlang\ y anot\adddotspace por}},
+ byeditortrin = {{editado, traducido \lbx@lfromlang\ e introducido por}%
+ {ed.,\addabbrvspace trad\adddotspace \lbx@sfromlang\ e intr\adddotspace por}},
+ byeditortrfo = {{editado, traducido \lbx@lfromlang\ y prologado por}%
+ {ed.,\addabbrvspace trad\adddotspace \lbx@sfromlang\ y pr\'ol\adddotspace por}},
+ byeditortraf = {{editado, traducido \lbx@lfromlang\ y epilogado por}%
+ {ed.,\addabbrvspace trad\adddotspace \lbx@sfromlang\ y ep\'{\i}l\adddotspace por}},
+ byeditorcoin = {{editado, comentado e introducido por}%
+ {ed.,\addabbrvspace com\adddotspace e intr\adddotspace por}},
+ byeditorcofo = {{editado, comentado y prologado por}%
+ {ed.,\addabbrvspace com\adddotspace y pr\'ol\adddotspace por}},
+ byeditorcoaf = {{editado, comentado y epilogado por}%
+ {ed.,\addabbrvspace com\adddotspace y ep\'{\i}l\adddotspace por}},
+ byeditoranin = {{editado, anotado e introducido por}%
+ {ed.,\addabbrvspace anot\adddotspace e intr\adddotspace por}},
+ byeditoranfo = {{editado, anotado y prologado por}%
+ {ed.,\addabbrvspace anot\adddotspace y pr\'ol\adddotspace por}},
+ byeditoranaf = {{editado, anotado y epilogado por}%
+ {ed.,\addabbrvspace anot\adddotspace y ep\'{\i}l\adddotspace por}},
+ byeditortrcoin = {{editado, traducido \lbx@lfromlang, comentado e introducido por}%
+ {ed.,\addabbrvspace trad\adddotspace \lbx@sfromlang, com\adddotspace e intr\adddotspace por}},
+ byeditortrcofo = {{editado, traducido \lbx@lfromlang, comentado y prologado por}%
+ {ed.,\addabbrvspace trad\adddotspace \lbx@sfromlang, com\adddotspace y pr\'ol\adddotspace por}},
+ byeditortrcoaf = {{editado, traducido \lbx@lfromlang, comentado y epilogado por}%
+ {ed.,\addabbrvspace trad\adddotspace \lbx@sfromlang, com\adddotspace y ep\'{\i}l\adddotspace por}},
+ byeditortranin = {{editado, traducido \lbx@lfromlang, anotado e introducido por}%
+ {ed.,\addabbrvspace trad\adddotspace \lbx@sfromlang, anot\adddotspace e intr\adddotspace por}},
+ byeditortranfo = {{editado, traducido \lbx@lfromlang, anotado y prologado por}%
+ {ed.,\addabbrvspace trad\adddotspace \lbx@sfromlang, anot\adddotspace y pr\'ol\adddotspace por}},
+ byeditortranaf = {{editado, traducido \lbx@lfromlang, anotado y epilogado por}%
+ {ed.,\addabbrvspace trad\adddotspace \lbx@sfromlang, anot\adddotspace y ep\'{\i}l\adddotspace por}},
+ bytranslatorco = {{traducido \lbx@lfromlang\ y comentado por}%
+ {trad\adddotspace \lbx@sfromlang\ y com\adddotspace por}},
+ bytranslatoran = {{traducido \lbx@lfromlang\ y anotado por}%
+ {trad\adddotspace \lbx@sfromlang\ y anot\adddotspace por}},
+ bytranslatorin = {{traducido \lbx@lfromlang\ e introducido por}%
+ {trad\adddotspace \lbx@sfromlang\ e introd\adddotspace por}},
+ bytranslatorfo = {{traducido \lbx@lfromlang\ y prologado por}%
+ {trad\adddotspace \lbx@sfromlang\ y pr\'ol\adddotspace por}},
+ bytranslatoraf = {{traducido \lbx@lfromlang\ y epilogado por}%
+ {trad\adddotspace \lbx@sfromlang\ y ep\'{\i}l\adddotspace por}},
+ bytranslatorcoin = {{traducido \lbx@lfromlang, comentado e introducido por}%
+ {trad\adddotspace \lbx@sfromlang, com\adddotspace e intr\adddotspace por}},
+ bytranslatorcofo = {{traducido \lbx@lfromlang, comentado y prologado por}%
+ {trad\adddotspace \lbx@sfromlang, com\adddotspace y pr\'ol\adddotspace por}},
+ bytranslatorcoaf = {{traducido \lbx@lfromlang, comentado y epilogado por}%
+ {trad\adddotspace \lbx@sfromlang, com\adddotspace y ep\'{\i}l\adddotspace por}},
+ bytranslatoranin = {{traducido \lbx@lfromlang, anotado e introducido por}%
+ {trad\adddotspace \lbx@sfromlang, anot\adddotspace e intr\adddotspace por}},
+ bytranslatoranfo = {{traducido \lbx@lfromlang, anotado y prologado por}%
+ {trad\adddotspace \lbx@sfromlang, anot\adddotspace y pr\'ol\adddotspace por}},
+ bytranslatoranaf = {{traducido \lbx@lfromlang, anotado y epilogado por}%
+ {trad\adddotspace \lbx@sfromlang, anot\adddotspace y ep\'{\i}l\adddotspace por}},
+ and = {{y}{y}},
+ andothers = {{et\addabbrvspace al\adddot}{et\addabbrvspace al\adddot}},
+ andmore = {{et\adddotspace al\adddot}{et\adddotspace al\adddot}},
+ volume = {{volumen}{vol\adddot}},
+ volumes = {{vol\'umenes}{vols\adddot}},
+ involumes = {{en}{en}},
+ jourvol = {{volumen}{vol\adddot}},
+ jourser = {{\'epoca}{\'ep\adddot}},
+ book = {{libro}{libro}},
+ part = {{parte}{parte}},
+ issue = {{n\'umero}{n\'um\adddot}},% FIXME: unsure
+ newseries = {{nueva \'epoca}{n\adddotspace \'ep\adddot}},
+ oldseries = {{antigua \'epoca}{ant\adddotspace \'ep\adddot}},
+ edition = {{edici\'on}{ed\adddot}},
+ reprint = {{reimpresi\'{o}n}{reimp\adddot}},
+ reprintof = {{reimpresi\'{o}n de}{reimp\adddotspace de}},
+ reprintas = {{reimpreso como}{reimp\adddotspace como}},
+ reprintfrom = {{reimpresi\'{o} de}{reimp\adddotspace de}},% FIXME: unsure. What's the difference between reprintof and reprintfrom?
+ reviewof = {{rese\~{n}a de}{rese\~{n}a de}},
+ translationof = {{traducci\'{o}n de}{trad\adddotspace de}},
+ translationas = {{traducido como}{trad\adddotspace como}},
+ translationfrom = {{traducido del}{trad\adddotspace del}},% FIXME: unsure.
+ origpubas = {{publicado originalmente como}{pub\adddotspace orig\adddotspace como}},% FIXME: check
+ origpubin = {{publicado originalmente en}{pub\adddot orig\adddot en}},% FIXME: check
+ astitle = {{con el t\'{\i}tulo}{con el t\'{\i}t\adddot}},% FIXME: check
+ bypublisher = {{por la editorial}{por la ed\adddot}},
+ nodate = {{sin fecha}{{}s\adddot f\adddot}},
+ page = {{p\'agina}{p\'ag\adddot}},
+ pages = {{p\'aginas}{p\'ags\adddot}},
+ column = {{columna}{col\adddot}},
+ columns = {{columnas}{cols\adddot}},
+ line = {{l\'{\i}nea}{l\adddot}},% FIXME: abbrev. unsure. There is no standard
+ lines = {{l\'{\i}neas}{ll\adddot}},% FIXME: abbrev. unsure. There is no standard
+ verse = {{verso}{v\adddot}},
+ verses = {{versos}{vv\adddot}},
+ section = {{secci\'{o}n}{sec\adddot}},
+ sections = {{secciones}{secs\adddot}},
+ paragraph = {{p\'{a}rrafo}{p\'{a}rr\adddot}},
+ paragraphs = {{p\'{a}rrafos}{p\'{a}rrs\adddot}},
+ pagetotal = {{p\'agina}{p\'ag\adddot}},
+ pagetotals = {{p\'aginas}{p\'ags\adddot}},
+ columntotal = {{columna}{col\adddot}},
+ columntotals = {{columnas}{cols\adddot}},
+ linetotal = {{l\'{\i}nea}{l\adddot}},% FIXME: abbrev. unsure. There is no standard
+ linetotals = {{l\'{\i}neas}{ll\adddot}},% FIXME: abbrev. unsure. There is no standard
+ versetotal = {{verso}{v\adddot}},
+ versetotals = {{versos}{vv\adddot}},
+ sectiontotal = {{secci\'{o}n}{sec\adddot}},
+ sectiontotals = {{secciones}{secs\adddot}},
+ paragraphtotal = {{p\'{a}rrafo}{p\'{a}rr\adddot}},
+ paragraphtotals = {{p\'{a}rrafos}{p\'{a}rrs\adddot}},
+ in = {{en}{en}},
+ inseries = {{en}{en}},
+ ofseries = {{de}{de}},
+ number = {{n\'umero}{n\sptext{o}}},
+ chapter = {{cap\'itulo}{cap\adddot}},
+ bathesis = {{Tesis de licenciatura}{Tesis de lic\adddot}},% FIXME: unsure.
+ mathesis = {{Tesis de maestr\'{\i}a}{Tesis de mtr\'{\i}a\adddot}},
+ phdthesis = {{Tesis doctoral}{Tesis doct\adddot}},
+ candthesis = {{Tesis de candidatura doctoral}{Tesis de cand\adddotspace doct\adddot}},% FIXME: unsure
+ resreport = {{reporte de investigaci\'{o}n}{rep\adddotspace de inv\adddot}},% FIXME: unsure
+ techreport = {{informe t\'ecnico}{inf\adddotspace t\'ec\adddot}},
+ software = {{programa}{prog\adddot}},
+ datacd = {{disco de datos}{CD de datos}},% FIXME: abbrev. unsure
+ audiocd = {{disco de audio}{CD de audio}},% FIXME: abbrev. unsure
+ version = {{versi\'on}{ver\adddot}},
+ url = {{direcci\'on}{direcci\'on}},
+ urlfrom = {{disponible desde}{disp\adddotspace desde}},% FIXME: unsure
+ urlseen = {{visitado}{visitado}},
+ inpreparation = {{en preparaci\'{o}n}{en prep\adddot}},
+ submitted = {{enviado}{enviado}},
+ forthcoming = {{pr\'oximamente}{prox\adddot}},
+ inpress = {{en prensa}{en prensa}},
+ prepublished = {{previamente publicado}{prepublicado}},
+ citedas = {{citado en adelante como}{cit\adddotspace en adelante como}},
+ thiscite = {{especialmente}{esp\adddot}},
+ seenote = {{ver nota}{ver n\adddot}},
+ quotedin = {{citado en}{cit\adddotspace en}},
+ idem = {{\'{\i}dem}{\'{\i}d\adddot}},
+ idemsf = {{\'{\i}dem}{\'{\i}d\adddot}},
+ idemsm = {{\'{\i}dem}{\'{\i}d\adddot}},
+ idemsn = {{\'{\i}dem}{\'{\i}d\adddot}},
+ idempf = {{\'{\i}dem}{\'{\i}d\adddot}},
+ idempm = {{\'{\i}dem}{\'{\i}d\adddot}},
+ idempn = {{\'{\i}dem}{\'{\i}d\adddot}},
+ idempp = {{\'{\i}dem}{\'{\i}d\adddot}},
+ ibidem = {{ib\'{\i}dem}{ib\'{\i}d\adddot}},
+ opcit = {{\'{o}p\adddotspace cit\adddot}{\'{o}p\adddot cit\adddot}},
+ loccit = {{loc\adddotspace cit\adddot}{loc\adddot cit\adddot}},
+ confer = {{cf\adddot}{cf\adddot}},
+ sequens = {{s\adddot}{s\adddot}},
+ sequentes = {{ss\adddot}{ss\adddot}},
+ passim = {{p\'assim}{p\'assim}},
+ see = {{v\'ease}{vid\adddot}},
+ seealso = {{v\'ease tambi\'en}{vid\adddotspace tambi\'en}},
+ backrefpage = {{v\'ease p\'agina}{vid\adddotspace p\'ag\adddot}},
+ backrefpages = {{v\'eanse p\'aginas}{vid\adddotspace p\'ags\adddot}},
+ january = {{enero}{ene\adddot}},
+ february = {{febrero}{feb\adddot}},
+ march = {{marzo}{mar\adddot}},
+ april = {{abril}{abr\adddot}},
+ may = {{mayo}{mayo}},
+ june = {{junio}{jun\adddot}},
+ july = {{julio}{jul\adddot}},
+ august = {{agosto}{ago\adddot}},
+ september = {{septiembre}{sep\adddot}},
+ october = {{octubre}{oct\adddot}},
+ november = {{noviembre}{nov\adddot}},
+ december = {{diciembre}{dic\adddot}},
+ langamerican = {{ingl\'{e}s americano}{ingl\'{e}s americano}},
+ langbrazilian = {{brasile\~no}{brasile\~no}},
+ langbulgarian = {{b\'ulgaro}{b\'ulgaro}},
+ langcatalan = {{catal\'{a}n}{catal\'{a}n}},
+ langcroatian = {{croata}{croata}},
+ langczech = {{checo}{checo}},
+ langdanish = {{dan\'es}{dan\'es}},
+ langdutch = {{neerland\'es}{neerland\'es}},
+ langenglish = {{ingl\'es}{ingl\'es}},
+ langestonian = {{estonio}{estonio}},
+ langfinnish = {{fin\'{e}s}{fin\'{e}s}},
+ langfrench = {{franc\'es}{franc\'es}},
+ langgalician = {{gallego}{gallego}},
+ langgerman = {{alem\'an}{alem\'an}},
+ langgreek = {{griego}{griego}},
+ langhungarian = {{h\'ungaro}{h\'ungaro}},
+ langitalian = {{italiano}{italiano}},
+ langjapanese = {{japon\'es}{japon\'es}},
+ langlatin = {{lat\'{\i}n}{lat\'{\i}n}},
+ langlatvian = {{lituano}{lituano}},
+ langnorwegian = {{noruego}{noruego}},
+ langpolish = {{polaco}{polaco}},
+ langportuguese = {{portugu\'es}{portugu\'es}},
+ langrussian = {{ruso}{ruso}},
+ langslovak = {{eslovaco}{eslovaco}},
+ langslovene = {{esloveno}{esloveno}},
+ langspanish = {{espa\~nol}{espa\~nol}},
+ langswedish = {{sueco}{sueco}},
+ langukrainian = {{ucraniano}{ucraniano}},
+ fromamerican = {{del ingl\'{e}s americano}{del ingl\'{e}s americano}},
+ frombrazilian = {{del brasile\~no}{del brasile\~no}},
+ frombulgarian = {{del b\'ulgaro}{del b\'ulgaro}},
+ fromcatalan = {{del catal\'{a}n}{del catal\'{a}n}},
+ fromcroatian = {{del croata}{del croata}},
+ fromczech = {{del checo}{del checo}},
+ fromdanish = {{del dan\'es}{del dan\'es}},
+ fromdutch = {{del neerland\'es}{del neerland\'es}},
+ fromenglish = {{del ingl\'es}{del ingl\'es}},
+ fromestonian = {{del estonio}{del estonio}},
+ fromfinnish = {{del fin\'{e}s}{del fin\'{e}s}},
+ fromfrench = {{del franc\'es}{del franc\'es}},
+ fromgalician = {{del gallego}{del gallego}},
+ fromgerman = {{del alem\'an}{del alem\'an}},
+ fromgreek = {{del griego}{del griego}},
+ fromhungarian = {{del h\'ungaro}{del h\'ungaro}},
+ fromitalian = {{del italiano}{del italiano}},
+ fromjapanese = {{del japon\'es}{del japon\'es}},
+ fromlatin = {{del lat\'{\i}n}{del lat\'{\i}n}},
+ fromlatvian = {{del lituano}{del lituano}},
+ fromnorwegian = {{del noruego}{del noruego}},
+ frompolish = {{del polaco}{del polaco}},
+ fromportuguese = {{del portugu\'es}{del portugu\'es}},
+ fromrussian = {{del ruso}{del ruso}},
+ fromslovak = {{del eslovaco}{del eslovaco}},
+ fromslovene = {{del esloveno}{del esloveno}},
+ fromspanish = {{del espa\~nol}{del espa\~nol}},
+ fromswedish = {{del sueco}{del sueco}},
+ fromukrainian = {{del ucraniano}{del ucraniano}},
+ countryde = {{Alemania}{DE}},
+ countryeu = {{Uni\'on Europea}{EU}},
+ countryep = {{Uni\'on Europea}{EP}},
+ countryfr = {{Francia}{FR}},
+ countryuk = {{Reino Unido}{GB}},% FIXME: "Reino Unido" or "Gran Breta\~na"?
+ countryus = {{Estados Unidos}{US}},% FIXME: "Estados Unidos de Am\'erica"?
+ patent = {{patente}{pat\adddot}},
+ patentde = {{patente alemana}{pat\adddotspace alemana}},
+ patenteu = {{patente europea}{pat\adddotspace europea}},
+ patentfr = {{patente francesa}{pat\adddotspace francesa}},
+ patentuk = {{patente brit\'anica}{pat\adddotspace brit\'anica}},
+ patentus = {{patente estadounidense}{pat\adddotspace estadounidense}},
+ patreq = {{solicitud de patente}{sol\adddotspace de pat\adddot}},
+ patreqde = {{solicitud de patente alemana}{sol\adddotspace de pat\adddot alemana}},
+ patreqeu = {{solicitud de patente europea}{sol\adddotspace de pat\adddot europea}},
+ patreqfr = {{solicitud de patente francesa}{sol\adddotspace de pat\adddot francesa}},
+ patrequk = {{solicitud de patente brit\'anica}{sol\adddotspace de pat\adddot brit\'anica}},
+ patrequs = {{solicitud de patente estadounidense}{sol\adddotspace de pat\adddot estadounidense}},
+ file = {{archivo}{archivo}},
+ library = {{biblioteca}{bibl\adddot}},
+ abstract = {{resumen}{resumen}},
+ annotation = {{anotaci\'{o}n}{anot\adddot}},
+ commonera = {{era com\'un}{e\adddotspace c\adddot}},
+ beforecommonera = {{antes de la era com\'un}{a\adddotspace e\adddotspace c\adddot}},
+ annodomini = {{despu\'es de Cristo}{d\adddotspace C\adddot}},
+ beforechrist = {{antes de Cristo}{a\adddotspace C\adddot}},
+ circa = {{circa}{ca\adddot}},
+ spring = {{primavera}{prim\adddot}},
+ summer = {{verano}{ver\adddot}},
+ autumn = {{oto\~no}{ot\adddot}},
+ winter = {{invierno}{inv\adddot}},
+% springN = {{}{}},% FIXME: missing
+% summerN = {{}{}},% FIXME: missing
+% autumnN = {{}{}},% FIXME: missing
+% winterN = {{}{}},% FIXME: missing
+% springS = {{}{}},% FIXME: missing
+% summerS = {{}{}},% FIXME: missing
+% autumnS = {{}{}},% FIXME: missing
+% winterS = {{}{}},% FIXME: missing
+% Q1 = {{}{}},% FIXME: missing
+% Q2 = {{}{}},% FIXME: missing
+% Q3 = {{}{}},% FIXME: missing
+% Q4 = {{}{}},% FIXME: missing
+% QD1 = {{}{}},% FIXME: missing
+% QD2 = {{}{}},% FIXME: missing
+% QD3 = {{}{}},% FIXME: missing
+% S1 = {{}{}},% FIXME: missing
+% S2 = {{}{}},% FIXME: missing
+ am = {{a\adddotspace m\adddot}{a\adddot m\adddot}},
+ pm = {{p\adddotspace m\adddot}{p\adddot m\adddot}},
+}
+
+\protected\gdef\lbx@es@smartand{%
+ \ifcase\value{smartand}%
+ \or
+ \addspace
+ \expandafter\lbx@es@smartand@i
+ \or
+ \addspace y\nobreakspace
+ \expandafter\@gobble
+ \or
+ \addspace e\nobreakspace
+ \expandafter\@gobble
+ \else
+ \addspace\bibstring{and}\space
+ \expandafter\@gobble
+ \fi}
+
+\begingroup
+\catcode`\&=3
+
+\gdef\lbx@es@smartand@i#1{%
+ \begingroup
+ \def\forceY##1{\relax}%
+ \def\forceE##1{i\relax}%
+ \def\do##1{\let##1\@firstofone}%
+ \abx@dosingleaccents
+ \abx@dodoubleaccents
+ \def\'{'}\def\i{i}\def\j{j}%
+ \let\IeC\@firstofone
+ \def\@tabacckludge##1{\if\noexpand##1''\fi}%
+ \ifnum\catcode`\'=\active
+ \uccode`\~=`\'
+ \uppercase{\def~{'}}%
+ \fi
+ \ifnum\catcode`\"=\active
+ \uccode`\~=`\"
+ \uppercase{\let~\@empty}%
+ \fi
+ \ifnum\catcode`\~=\active
+ \let~\@empty
+ \fi
+ \let\protect\noexpand
+ \edef\lbx@tempa{#1}%
+ \expandafter\futurelet
+ \expandafter\lbx@tempa
+ \expandafter\lbx@es@smartand@ii
+ \lbx@tempa&}
+
+\gdef\lbx@es@smartand@ii{%
+ \ifcat\bgroup\noexpand\lbx@tempa
+ \def\lbx@tempa##1{\futurelet\lbx@tempa\lbx@es@smartand@ii##1}%
+ \else\ifcat\noexpand~\noexpand\lbx@tempa
+ \def\lbx@tempa##1{\futurelet\lbx@tempa\lbx@es@smartand@ii}%
+ \else\ifnum 0%
+ \if h\noexpand\lbx@tempa 1\fi
+ \if H\noexpand\lbx@tempa 1\fi
+ >0 %
+ \def\lbx@tempa##1{\futurelet\lbx@tempa\lbx@es@smartand@ii}%
+ \else\ifnum 0%
+ \if i\noexpand\lbx@tempa 1\fi
+ \if y\noexpand\lbx@tempa 1\fi
+ \if I\noexpand\lbx@tempa 1\fi
+ \if Y\noexpand\lbx@tempa 1\fi
+ >0 %
+ \def\lbx@tempa##1{\futurelet\lbx@tempa\lbx@es@smartand@iii}%
+ \else\if '\noexpand\lbx@tempa
+ \def\lbx@tempa##1{\futurelet\lbx@tempa\lbx@es@smartand@iv}%
+ \else
+ \let\lbx@tempa\lbx@es@smartand@y
+ \fi\fi\fi\fi\fi
+ \lbx@tempa}
+
+\gdef\lbx@es@smartand@iii{%
+ \ifcat\bgroup\noexpand\lbx@tempa
+ \def\lbx@tempa##1{\futurelet\lbx@tempa\lbx@es@smartand@iii##1}%
+ \else\ifcat\noexpand~\noexpand\lbx@tempa
+ \let\lbx@tempa\lbx@es@smartand@e
+ \else\if '\noexpand\lbx@tempa
+ \def\lbx@tempa##1{\futurelet\lbx@tempa\lbx@es@smartand@iii}%
+ \else\ifnum 0%
+ \if a\noexpand\lbx@tempa 1\fi
+ \if e\noexpand\lbx@tempa 1\fi
+ \if i\noexpand\lbx@tempa 1\fi
+ \if o\noexpand\lbx@tempa 1\fi
+ \if u\noexpand\lbx@tempa 1\fi
+ \if A\noexpand\lbx@tempa 1\fi
+ \if E\noexpand\lbx@tempa 1\fi
+ \if I\noexpand\lbx@tempa 1\fi
+ \if O\noexpand\lbx@tempa 1\fi
+ \if U\noexpand\lbx@tempa 1\fi
+ >0 %
+ \let\lbx@tempa\lbx@es@smartand@y
+ \else
+ \let\lbx@tempa\lbx@es@smartand@e
+ \fi\fi\fi\fi
+ \lbx@tempa}
+
+\gdef\lbx@es@smartand@iv{%
+ \if i\lbx@tempa
+ \expandafter\lbx@es@smartand@e
+ \else
+ \expandafter\lbx@es@smartand@y
+ \fi}
+
+\gdef\lbx@es@smartand@e#1&{\endgroup e\nobreakspace}
+\gdef\lbx@es@smartand@y#1&{\endgroup y\nobreakspace}
+
+\endgroup
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/lbx/swedish-ms.lbx b/macros/latex/contrib/biblatex-ms/latex/lbx/swedish-ms.lbx
new file mode 100644
index 0000000000..9f451dbfed
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/lbx/swedish-ms.lbx
@@ -0,0 +1,531 @@
+\ProvidesFile{swedish-ms.lbx}
+[\abx@lbxid]
+
+% Translator's notes (Per Starb\"ack)
+%
+% One of the sources used is:
+%
+% Hedberg, Sten. Bibliografiska referenser. SIS-STG Handbok 165.
+% Stockholm: Standardiseringskommissionen i Sverige (SIS), 1991. ISBN
+% 91-7162-323-X.
+%
+% which incorporates Swedish standard SS 03 82 07 which is a
+% translation of ISO 690, Documentation -- Bibliographic references --
+% Content, form and structure, 2. ed., 1987.
+%
+% In that standard lots of things aren't translated, but left as in
+% the original works. So in the same bibliography will be a work that
+% is "2. ed." and another that is "2. Aufl.".
+%
+% I've almost only used abbrevations found in the appendix
+% "Bibliografiska f\"orkortningar" there (though not a part of the
+% standard).
+
+\DeclareRedundantLanguages{swedish}{swedish}
+
+\DeclareBibliographyExtras{%
+ \protected\def\bibrangedash{%
+ \textendash\penalty\hyphenpenalty}% breakable dash
+ \let\finalandcomma=\empty
+ \let\finalandsemicolon=\empty
+ \protected\def\mkbibordinal#1{\stripzeros{#1}\adddot}%
+ % The following is for ordinals like "2:a" and "12:e".
+ % (Hedberg uses just "2." and "12." as above;
+ % others use "2" and "12".)
+ %\protected\def\mkbibordinal#1{%
+ % \begingroup
+ % \@tempcnta0#1\relax\number\@tempcnta\addcolon
+ % \@whilenum\@tempcnta>100\do{\advance\@tempcnta-100\relax}%
+ % \ifnum\@tempcnta>20
+ % \@whilenum\@tempcnta>9\do{\advance\@tempcnta-10\relax}%
+ % \fi
+ % \ifcase\@tempcnta e\or a\or a\else e\fi
+ % \endgroup}%
+ \protected\def\mkbibmascord{\mkbibordinal}%
+ \protected\def\mkbibfemord{\mkbibordinal}%
+ \protected\def\mkbibneutord{\mkbibordinal}%
+ \protected\def\mkbibdatelong#1#2#3{%
+ \iffieldundef{#3}
+ {}
+ {\stripzeros{\thefield{#3}}%
+ \iffieldundef{#2}{}{\nobreakspace}}%
+ \iffieldundef{#2}
+ {}
+ {\mkbibmonth{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}}%
+ \iffieldbibstring{#1}
+ {\bibstring{\thefield{#1}}}
+ {\dateeraprintpre{#1}\stripzeros{\thefield{#1}}}}%
+ \protected\def\mkbibdateshort#1#2#3{%
+ \iffieldundef{#1}
+ {}
+ {\iffieldbibstring{#1}
+ {\bibstring{\thefield{#1}}}
+ {\dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}%
+ \iffieldundef{#2}{}{\mbox{-}}}%
+ \iffieldundef{#2}
+ {}
+ {\mkmonthzeros{\thefield{#2}}%
+ \iffieldundef{#3}{}{\mbox{-}}}%
+ \iffieldundef{#3}
+ {}
+ {\mkdayzeros{\thefield{#3}}}}%
+ \savecommand\mkdaterangeterse
+ \protected\def\mkdaterangeterse{%
+ \BibliographyWarning{%
+ Date format 'terse' not applicable to\MessageBreak
+ Swedish dates. Using format 'short' instead}%
+ \mkdaterangefull{short}}%
+ \expandafter\protected\expandafter\def\csname mkbibtime24h\endcsname#1#2#3#4{%
+ \iffieldundef{#1}
+ {}
+ {\mktimezeros{\thefield{#1}}%
+ \iffieldundef{#2}{}{\bibtimesep}}%
+ \iffieldundef{#2}
+ {}
+ {\mktimezeros{\thefield{#2}}%
+ \iffieldundef{#3}{}{\bibtimesep}}%
+ \iffieldundef{#3}
+ {}
+ {\mktimezeros{\thefield{#3}}}%
+ \iffieldundef{#4}{}
+ {\bibtimezonesep
+ \mkbibtimezone{\thefield{#4}}}}%
+ \expandafter\protected\expandafter\def\csname mkbibtime12h\endcsname#1#2#3#4{%
+ \stripzeros{\mktimehh{\thefield{#1}}}\bibtimesep
+ \forcezerosmdt{\thefield{#2}}%
+ \iffieldundef{#3}{}
+ {\bibtimesep
+ \forcezerosmdt{\thefield{#3}}}%
+ \space
+ \ifnumless{\thefield{#1}}{12}
+ {\bibstring{am}}
+ {\bibstring{pm}}%
+ \iffieldundef{#4}{}
+ {\space\bibtimezonesep
+ \parentext{\mkbibtimezone{\thefield{#4}}}}}%
+ \protected\def\mkbibyeardivisiondateshort#1#2{%
+ \mkbibyeardivision{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}%
+ \dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}%
+ \protected\def\mkbibyeardivisiondatelong#1#2{%
+ \mkbibyeardivision{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}%
+ \dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}%
+}
+
+\UndeclareBibliographyExtras{%
+ \restorecommand\mkdaterangeterse
+}
+
+\DeclareBibliographyStrings{%
+ bibliography = {{Litteraturf\"orteckning}{Litteratur}},
+ references = {{Referenser}{Referenser}},
+ shorthands = {{F\"orkortningar}{F\"orkortningar}},
+ % editor may be "utgivare (utg.)" or "redakt\"or (red.)"
+ editor = {{utgivare}{utg\adddot}},
+ editors = {{utgivare}{utg\adddot}},
+ compiler = {{sammanst\"allare}{sammanst\adddot}},
+ compilers = {{sammanst\"allare}{sammanst\adddot}},
+ redactor = {{redakt\"or}{red\adddot}},
+ redactors = {{redakt\"orer}{red\adddot}},
+% reviser = {{}{}},% FIXME: missing
+% revisers = {{}{}},% FIXME: missing
+% founder = {{}{}},% FIXME: missing
+% founders = {{}{}},% FIXME: missing
+% continuator = {{}{}},% FIXME: missing
+% continuators = {{}{}},% FIXME: missing
+% collaborator = {{}{}},% FIXME: missing
+% collaborators = {{}{}},% FIXME: missing
+ translator = {{\"overs\"attare}{\"overs\adddot}},
+ translators = {{\"overs\"attare}{\"overs\adddot}},
+ commentator = {{kommentar}{komm\adddot}},% "commentator" awkward, we use "commentary"
+ commentators = {{kommentar}{komm\adddot}},% "commentator" awkward, we use "commentary"
+ annotator = {{f\"orklaringar}{f\"orkl\adddot}},% "annotator" awkward, we use "annotations"
+ annotators = {{f\"orklaringar}{f\"orkl\adddot}},% "annotator" awkward, we use "annotations"
+ commentary = {{kommentar}{komm\adddot}},
+ annotations = {{f\"orklaringar}{f\"orkl\adddot}},
+ introduction = {{inledning}{inl\adddot}},
+ foreword = {{f\"orord}{f\"orord}},
+ afterword = {{efterord}{efterord}},
+ editortr = {{utgivare och \"overs\"attare}{utg\adddot\ och \"overs\adddot}},
+ editorstr = {{utgivare och \"overs\"attare}{utg\adddot\ och \"overs\adddot}},
+% editorco = {{}{}},% FIXME: missing
+% editorsco = {{}{}},% FIXME: missing
+% editoran = {{}{}},% FIXME: missing
+% editorsan = {{}{}},% FIXME: missing
+% editorin = {{}{}},% FIXME: missing
+% editorsin = {{}{}},% FIXME: missing
+% editorfo = {{}{}},% FIXME: missing
+% editorsfo = {{}{}},% FIXME: missing
+% editoraf = {{}{}},% FIXME: missing
+% editorsaf = {{}{}},% FIXME: missing
+% editortrco = {{}{}},% FIXME: missing
+% editorstrco = {{}{}},% FIXME: missing
+% editortran = {{}{}},% FIXME: missing
+% editorstran = {{}{}},% FIXME: missing
+% editortrin = {{}{}},% FIXME: missing
+% editorstrin = {{}{}},% FIXME: missing
+% editortrfo = {{}{}},% FIXME: missing
+% editorstrfo = {{}{}},% FIXME: missing
+% editortraf = {{}{}},% FIXME: missing
+% editorstraf = {{}{}},% FIXME: missing
+% editorcoin = {{}{}},% FIXME: missing
+% editorscoin = {{}{}},% FIXME: missing
+% editorcofo = {{}{}},% FIXME: missing
+% editorscofo = {{}{}},% FIXME: missing
+% editorcoaf = {{}{}},% FIXME: missing
+% editorscoaf = {{}{}},% FIXME: missing
+% editoranin = {{}{}},% FIXME: missing
+% editorsanin = {{}{}},% FIXME: missing
+% editoranfo = {{}{}},% FIXME: missing
+% editorsanfo = {{}{}},% FIXME: missing
+% editoranaf = {{}{}},% FIXME: missing
+% editorsanaf = {{}{}},% FIXME: missing
+% editortrcoin = {{}{}},% FIXME: missing
+% editorstrcoin = {{}{}},% FIXME: missing
+% editortrcofo = {{}{}},% FIXME: missing
+% editorstrcofo = {{}{}},% FIXME: missing
+% editortrcoaf = {{}{}},% FIXME: missing
+% editorstrcoaf = {{}{}},% FIXME: missing
+% editortranin = {{}{}},% FIXME: missing
+% editorstranin = {{}{}},% FIXME: missing
+% editortranfo = {{}{}},% FIXME: missing
+% editorstranfo = {{}{}},% FIXME: missing
+% editortranaf = {{}{}},% FIXME: missing
+% editorstranaf = {{}{}},% FIXME: missing
+% translatorco = {{}{}},% FIXME: missing
+% translatorsco = {{}{}},% FIXME: missing
+% translatoran = {{}{}},% FIXME: missing
+% translatorsan = {{}{}},% FIXME: missing
+% translatorin = {{}{}},% FIXME: missing
+% translatorsin = {{}{}},% FIXME: missing
+% translatorfo = {{}{}},% FIXME: missing
+% translatorsfo = {{}{}},% FIXME: missing
+% translatoraf = {{}{}},% FIXME: missing
+% translatorsaf = {{}{}},% FIXME: missing
+% translatorcoin = {{}{}},% FIXME: missing
+% translatorscoin = {{}{}},% FIXME: missing
+% translatorcofo = {{}{}},% FIXME: missing
+% translatorscofo = {{}{}},% FIXME: missing
+% translatorcoaf = {{}{}},% FIXME: missing
+% translatorscoaf = {{}{}},% FIXME: missing
+% translatoranin = {{}{}},% FIXME: missing
+% translatorsanin = {{}{}},% FIXME: missing
+% translatoranfo = {{}{}},% FIXME: missing
+% translatorsanfo = {{}{}},% FIXME: missing
+% translatoranaf = {{}{}},% FIXME: missing
+% translatorsanaf = {{}{}},% FIXME: missing
+% organizer = {{}{}},% FIXME: missing
+% organizers = {{}{}},% FIXME: missing
+% byorganizer = {{}{}},% FIXME: missing
+ byauthor = {{av}{av}},
+ byeditor = {{utgiven av}{utg\adddotspace av}},
+ bycompiler = {{sammanst\"alld av}{sammanst\adddotspace av}},
+ byredactor = {{bearbetad av}{bearb\adddotspace av}},
+ byreviser = {{reviderad av}{rev\adddotspace av}},
+% byreviewer = {{}{}},% FIXME: missing
+% byfounder = {{}{}},% FIXME: missing
+% bycontinuator = {{}{}},% FIXME: missing
+% bycollaborator = {{}{}},% FIXME: missing
+ bytranslator = {{\"oversatt \lbx@lfromlang\ av}{\"overs\adddot\ \lbx@sfromlang\ av}},
+ bycommentator = {{kommenterad av}{kommenterad av}},
+ byannotator = {{f\"orklarad av}{f\"orklarad av}},
+ withcommentator = {{med kommentarer av}{med kommentarer av}},
+ withannotator = {{med f\"orklaringar av}{med f\"orklaringar av}},
+ withintroduction = {{med inledning av}{med inl\adddot\ av}},
+ withforeword = {{med f\"orord av}{med f\"orord av}},
+ withafterword = {{med efterord av}{med efterord av}},
+ byeditortr = {{utgiven och \"oversatt \lbx@lfromlang\ av}%
+ {utg\adddotspace och \"overs\adddot\ \lbx@sfromlang\ av}},
+ byeditorco = {{utgiven och kommenterad av}%
+ {utg\adddotspace och kommenterad av}},
+ byeditoran = {{utgiven och f\"orklarad av}%
+ {utg\adddotspace och f\"orklarad av}},
+ byeditorin = {{utgiven och f\"orsedd med inledning av}%
+ {utg\adddotspace och med inl\adddot\ av}},
+ byeditorfo = {{utgiven och f\"orsedd med f\"orord av}%
+ {utg\adddotspace och med f\"orord av}},
+ byeditoraf = {{utgiven och f\"orsedd med efterord av}%
+ {utg\adddotspace och med efterord av}},
+ byeditortrco = {{utgiven, \"oversatt \lbx@lfromlang\ och kommenterad av}%
+ {utg.,\addabbrvspace \"overs\adddot\ \lbx@sfromlang\ och kommenterad av}},
+ byeditortran = {{utgiven, \"oversatt \lbx@lfromlang\ och f\"orklarad av}%
+ {utg.,\addabbrvspace \"overs\adddot\ \lbx@sfromlang\ och f\"orklarad av}},
+ byeditortrin = {{utgiven, \"oversatt \lbx@lfromlang\ och f\"orsedd med inledning av}%
+ {utg.,\addabbrvspace \"overs\adddot\ \lbx@sfromlang\ och med inl\adddot\ av}},
+ byeditortrfo = {{utgiven, \"oversatt \lbx@lfromlang\ och f\"orsedd med f\"orord av}%
+ {utg.,\addabbrvspace \"overs\adddot\ \lbx@sfromlang\ och med f\"orord av}},
+ byeditortraf = {{utgiven, \"oversatt \lbx@lfromlang\ och f\"orsedd med efterord av}%
+ {utg.,\addabbrvspace \"overs\adddot\ \lbx@sfromlang\ och med efterord av}},
+ byeditorcoin = {{utgiven, kommenterad och f\"orsedd med inledning av}%
+ {utg.,\addabbrvspace kommenterad och med inl\adddot\ av}},
+ byeditorcofo = {{utgiven, kommenterad och f\"orsedd med f\"orord av}%
+ {utg.,\addabbrvspace kommenterad och med f\"orord av}},
+ byeditorcoaf = {{utgiven, kommenterad och f\"orsedd med efterord av}%
+ {utg.,\addabbrvspace kommenterad och med efterord av}},
+ byeditoranin = {{utgiven, f\"orklarad och f\"orsedd med inledning av}%
+ {utg.,\addabbrvspace f\"orklarad och med inl\adddot\ av}},
+ byeditoranfo = {{utgiven, f\"orklarad och f\"orsedd med f\"orord av}%
+ {utg.,\addabbrvspace f\"orklarad och med f\"orord av}},
+ byeditoranaf = {{utgiven, f\"orklarad och f\"orsedd med efterord av}%
+ {utg.,\addabbrvspace f\"orklarad och med efterord av}},
+ byeditortrcoin = {{utgiven, \"oversatt \lbx@lfromlang, kommenterad och f\"orsedd med inledning av}%
+ {utg.,\addabbrvspace \"overs\adddot\ \lbx@sfromlang, kommenterad och med inl\adddot\ av}},
+ byeditortrcofo = {{utgiven, \"oversatt \lbx@lfromlang, kommenterad och f\"orsedd med f\"orord av}%
+ {utg.,\addabbrvspace \"overs\adddot\ \lbx@sfromlang, kommenterad och med f\"orord av}},
+ byeditortrcoaf = {{utgiven, \"oversatt \lbx@lfromlang, kommenterad och f\"orsedd med efterord av}%
+ {utg.,\addabbrvspace \"overs\adddot\ \lbx@sfromlang, kommenterad och med efterord av}},
+ byeditortranin = {{utgiven, \"oversatt \lbx@lfromlang, f\"orklarad och f\"orsedd med inledning av}%
+ {utg.,\addabbrvspace \"overs\adddot\ \lbx@sfromlang, f\"orklarad och med inl\adddot\ av}},
+ byeditortranfo = {{utgiven, \"oversatt \lbx@lfromlang, f\"orklarad och f\"orsedd med f\"orord av}%
+ {utg.,\addabbrvspace \"overs\adddot\ \lbx@sfromlang, f\"orklarad och med f\"orord av}},
+ byeditortranaf = {{utgiven, \"oversatt \lbx@lfromlang, f\"orklarad och f\"orsedd med efterord av}%
+ {utg.,\addabbrvspace \"overs\adddot\ \lbx@sfromlang, f\"orklarad och med efterord av}},
+ bytranslatorco = {{\"oversatt \lbx@lfromlang\ och kommenterad av}%
+ {\"overs\adddot\ \lbx@sfromlang\ och kommenterad av}},
+ bytranslatoran = {{\"oversatt \lbx@lfromlang\ och f\"orklarad av}%
+ {\"overs\adddot\ \lbx@sfromlang\ och f\"orklarad av}},
+ bytranslatorin = {{\"oversatt \lbx@lfromlang\ och f\"orsedd med inledning av}%
+ {\"overs\adddot\ \lbx@sfromlang\ och med inl\adddot\ av}},
+ bytranslatorfo = {{\"oversatt \lbx@lfromlang\ och f\"orsedd med f\"orord av}%
+ {\"overs\adddot\ \lbx@sfromlang\ och med f\"orord av}},
+ bytranslatoraf = {{\"oversatt \lbx@lfromlang\ och f\"orsedd med efterord av}%
+ {\"overs\adddot\ \lbx@sfromlang\ och med efterord av}},
+ bytranslatorcoin = {{\"oversatt \lbx@lfromlang, kommenterad och f\"orsedd med inledning av}%
+ {\"overs\adddot\ \lbx@sfromlang, kommenterad och med inl\adddot\ av}},
+ bytranslatorcofo = {{\"oversatt \lbx@lfromlang, kommenterad och f\"orsedd med f\"ordord av}%
+ {\"overs\adddot\ \lbx@sfromlang, kommenterad och med f\"ordord av}},
+ bytranslatorcoaf = {{\"oversatt \lbx@lfromlang, kommenterad och f\"orsedd med efterord av}%
+ {\"overs\adddot\ \lbx@sfromlang, kommenterad och med efterord av}},
+ bytranslatoranin = {{\"oversatt \lbx@lfromlang, f\"orklarad och f\"orsedd med inledning av}%
+ {\"overs\adddot\ \lbx@sfromlang, f\"orklarad med inledning\ av}},
+ bytranslatoranfo = {{\"oversatt \lbx@lfromlang, f\"orklarad och f\"orsedd med f\"orord av}%
+ {\"overs\adddot\ \lbx@sfromlang, f\"orklarad med f\"orord av}},
+ bytranslatoranaf = {{\"oversatt \lbx@lfromlang, f\"orklarad och f\"orsedd med efterord av}%
+ {\"overs\adddot\ \lbx@sfromlang, f\"orklarad med efterord av}},
+ and = {{och}{och}},
+ % Hedberg uses "et al.", but in an all-Swedish lists "m.fl." may be used
+ andothers = {{m.\,fl\adddot}{m.\,fl\adddot}},
+ andmore = {{m.\,fl\adddot}{m.\,fl\adddot}},
+ volume = {{volym}{vol\adddot}},
+ volumes = {{volymer}{vol\adddot}},
+ involumes = {{i}{i}},
+ jourvol = {{\aa rg\aa ng}{\aa rg\adddot}},
+ jourser = {{serie}{ser\adddot}},
+ book = {{bok}{bok}},
+ part = {{del}{del}},
+% issue = {{}{}},% FIXME: missing
+ % Both "ny serie (N.S.)" and "ny f\"oljd (N.F.)" are common
+ newseries = {{ny f\"oljd}{N.\,F\adddot}},
+ oldseries = {{gammal f\"oljd}{gammal f\"oljd}},
+ % In Swedish books both "upplaga" and "utg\aa va" are common.
+ % Hedberg (p. 82f.) uses the later in the terminology section
+ % (but uses whatever is given in a particular book otherwise).
+% edition = {{upplaga}{uppl\adddot}},
+ edition = {{utg\aa van}{utg\adddot}},
+ reprint = {{nytryck}{nytr\adddot}},
+ reprintof = {{nytryck av}{nytr\adddotspace av}},
+ reprintas = {{nytryckt som}{nytr\adddotspace som}},
+ reprintfrom = {{nytryckt fr\aa n}{nytryckt fr\aa n}},% FIXME: check
+ translationof = {{\"overs\"attning av}{\"overs\adddot\ av}},
+ translationas = {{\"overs\"attning som}{\"overs\adddot\ som}},
+ translationfrom = {{\"overs\"attning fr\aa n}{\"overs\adddotspace fr\aa n}},
+ reviewof = {{recension av}{recension av}},
+ origpubas = {{ursprungligen publicerad som}{ursprunglingen publ\adddot\ som}},
+ origpubin = {{ursprungligen publicerad}{ursprungligen publ\adddot}},
+ astitle = {{som}{som}},
+ bypublisher = {{av}{av}},
+ nodate = {{u\adddot\,\aa \adddot}{u\adddot\,\aa \adddot}},
+ page = {{sidan}{s\adddot}},
+ pages = {{sidorna}{s\adddot}},
+ column = {{spalt}{sp\adddot}},
+ columns = {{spalterna}{sp\adddot}},
+ line = {{rad}{r\adddot}},
+ lines = {{raderna}{r\adddot}},
+ verse = {{vers}{v\adddot}},
+ verses = {{verserna}{v\adddot}},
+ section = {{paragraf}{\S}},
+ sections = {{paragraferna}{\S}},
+ % "paragraph" is "stycke" in Swedish, but this is probably
+ % more suitable for works referenced by paragraphs
+ paragraph = {{paragraf}{\S}},
+ paragraphs = {{paragraferna}{\S}},
+ pagetotal = {{sida}{s\adddot}},
+ pagetotals = {{sidor}{s\adddot}},
+ columntotal = {{spalt}{sp\adddot}},
+ columntotals = {{spalter}{sp\adddot}},
+ linetotal = {{rad}{r\adddot}},
+ linetotals = {{rader}{r\adddot}},
+ versetotal = {{vers}{v\adddot}},
+ versetotals = {{verser}{v\adddot}},
+ sectiontotal = {{paragraf}{\S}},
+ sectiontotals = {{paragrafer}{\S}},
+ paragraphtotal = {{paragraf}{\S}},
+ paragraphtotals = {{paragrafer}{\S}},
+ in = {{i}{i}},
+ inseries = {{i}{i}},
+ ofseries = {{i}{i}},
+ number = {{nummer}{nr}},
+ chapter = {{kapitel}{kap\adddot}},
+% bathesis = {{}{}},% FIXME: missing
+ mathesis = {{examensarbete}{examensarb\adddot}},
+ phdthesis = {{doktorsavhandling}{diss\adddot}},
+ candthesis = {{kandidatavhandling}{kand.avh}},% FIXME: unsure
+ resreport = {{forskningsrapport}{forskn.rapport}},
+ techreport = {{teknisk rapport}{tekn\adddotspace rapport}},
+ % Hedberg (p. 57) uses "Datafil" and adds that it's possible to
+ % render more precisely "[Programfil] resp [Textfil] e. dyl."
+ software = {{datorprogram}{datorprogram}},
+ datacd = {{data-cd}{data-cd}},
+ audiocd = {{ljud-cd}{ljud-cd}},
+ version = {{version}{version}},
+ url = {{webbadress}{URL}},
+ urlfrom = {{tillg\"anglig fr\aa n}{tillg\"anglig fr\aa n}},
+ urlseen = {{senast h\"amtad}{h\"amtad}},
+% inpreparation = {{}{}},% FIXME: missing
+% submitted = {{}{}},% FIXME: missing
+% forthcoming = {{}{}},% FIXME: missing
+% inpress = {{}{}},% FIXME: missing
+% prepublished = {{}{}},% FIXME: missing
+ citedas = {{h\"adanefter citerad som}{h\"adanefter cit\adddotspace som}},
+% thiscite = {{}{}},% FIXME: missing
+ seenote = {{se not}{se not}},
+ quotedin = {{citerad i}{cit\adddotspace i}},
+ idem = {{densamma}{dens\adddot}},% or Latin: idem
+ idemsf = {{densamma}{dens\adddot}},
+ idemsm = {{densamme}{dens\adddot}},
+ idemsn = {{densamma}{dens\adddot}},
+ idempf = {{desamma}{desamma}},
+ idempm = {{desamma}{desamma}},
+ idempn = {{desamma}{desamma}},
+ idempp = {{desamma}{desamma}},
+ ibidem = {{ibidem}{ibid\adddot}},
+ opcit = {{a.\,a\adddot}{a.\,a\adddot}},% or Latin: op. cit.
+ loccit = {{loc\adddotspace cit\adddot}{loc\adddotspace cit\adddot}},
+ confer = {{j\"amf\"or}{jfr}},
+ sequens = {{f\adddot}{f\adddot}},
+ sequentes = {{ff\adddot}{ff\adddot}},
+ passim = {{passim}{pass\adddot}},
+ see = {{se}{se}},
+ seealso = {{se \"aven}{se \"aven}},
+ backrefpage = {{se sidan}{se s\adddot}},
+ backrefpages = {{se sidorna}{se s\adddot}},
+ january = {{januari}{jan\adddot}},
+ february = {{februari}{febr\adddot}},
+ march = {{mars}{mars}},
+ april = {{april}{april}},
+ may = {{maj}{maj}},
+ june = {{juni}{juni}},
+ july = {{juli}{juli}},
+ august = {{augusti}{aug\adddot}},
+ september = {{september}{sept\adddot}},
+ october = {{oktober}{okt\adddot}},
+ november = {{november}{nov\adddot}},
+ december = {{december}{dec\adddot}},
+ langamerican = {{amerikanska}{amerikanska}},
+% langbrazilian = {{}{}},% FIXME: missing
+% langbulgarian = {{}{}},% FIXME: missing
+ langcatalan = {{katalanska}{katalanska}},
+ langcroatian = {{kroatiska}{kroatiska}},
+ langczech = {{tjeckiska}{tjeckiska}},
+ langdanish = {{danska}{danska}},
+ langdutch = {{nederl\"andska}{nederl\"andska}},
+ langenglish = {{engelska}{engelska}},
+% langestonian = {{}{}},% FIXME: missing
+ langfinnish = {{finska}{finska}},
+ langfrench = {{franska}{franska}},
+ langgalician = {{galiciska}{galiciska}},
+ langgerman = {{tyska}{tyska}},
+ langgreek = {{grekiska}{grekiska}},
+% langhungarian = {{}{}}, % FIXME: missing
+ langitalian = {{italienska}{italienska}},
+ langlatin = {{latin}{latin}},
+% langlatvian = {{}{}},% FIXME: missing
+ langnorwegian = {{norska}{norska}},
+ langpolish = {{polska}{polska}},
+ langportuguese = {{portugisiska}{portugisiska}},
+ langrussian = {{ryska}{ryska}},
+% langslovene = {{}{}},% FIXME: missing
+ langspanish = {{spanska}{spanska}},
+ langswedish = {{svenska}{svenska}},
+ fromamerican = {{fr\aa n amerikanska}{fr\aa n amerikanska}},
+% frombrazilian = {{}{}},% FIXME: missing
+% frombulgarian = {{}{}},% FIXME: missing
+ fromcatalan = {{fr\aa n katalanska}{fr\aa n katalanska}},
+ fromcroatian = {{fr\aa n kroatiska}{fr\aa n kroatiska}},
+ fromczech = {{fr\aa n tjeckiska}{fr\aa n tjeckiska}},
+ fromdanish = {{fr\aa n danska}{fr\aa n danska}},
+ fromdutch = {{fr\aa n nederl\"andska}{fr\aa n nederl\"andska}},
+ fromenglish = {{fr\aa n engelska}{fr\aa n engelska}},
+% fromestonian = {{}{}},% FIXME: missing
+ fromfinnish = {{fr\aa n finska}{fr\aa n finska}},
+ fromfrench = {{fr\aa n franska}{fr\aa n franska}},
+ fromgalician = {{fr\aa n galiciska}{fr\aa n galiciska}},
+ fromgerman = {{fr\aa n tyska}{fr\aa n tyska}},
+ fromgreek = {{fr\aa n grekiska}{fr\aa n grekiska}},
+% fromhungarian = {{}{}}, % FIXME: missing
+ fromitalian = {{fr\aa n italienska}{fr\aa n italienska}},
+ fromlatin = {{fr\aa n latin}{fr\aa n latin}},
+% fromlatvian = {{}{}},% FIXME: missing
+ fromnorwegian = {{fr\aa n norska}{fr\aa n norska}},
+ frompolish = {{fr\aa n polska}{fr\aa n polska}},
+ fromportuguese = {{fr\aa n portugisiska}{fr\aa n portugisiska}},
+ fromrussian = {{fr\aa n ryska}{fr\aa n ryska}},
+% fromslovak = {{}{}},% FIXME: missing
+% fromslovene = {{}{}},% FIXME: missing
+ fromspanish = {{fr\aa n spanska}{fr\aa n spanska}},
+ fromswedish = {{fr\aa n svenska}{fr\aa n svenska}},
+ countryde = {{Tyskland}{DE}},
+ countryep = {{Europeiska unionen}{EP}},
+ countryeu = {{Europeiska unionen}{EU}},
+ countryfr = {{Frankrike}{FR}},
+ countryuk = {{Storbritannien}{GB}},
+ countryus = {{USA}{US}},
+ patent = {{patent}{patent}},
+ patentde = {{tyskt patent}{tyskt patent}},
+ patenteu = {{europeiskt patent}{europeiskt patent}},
+ patentfr = {{franskt patent}{franskt patent}},
+ patentuk = {{brittiskt patent}{brittiskt patent}},
+ patentus = {{amerikanskt patent}{amerikanskt patent}},
+ patreq = {{patentans\"okan}{patentans\"okan}},
+ patreqde = {{ans\"okan om tyskt patent}{ans\"okan om tyskt patent}},
+ patreqeu = {{ans\"okan om europeiskt patent}{ans\"okan om europeiskt patent}},
+ patreqfr = {{ans\"okan om franskt patent}{ans\"okan om franskt patent}},
+ patrequk = {{ans\"okan om brittiskt patent}{ans\"okan om brittiskt patent}},
+ patrequs = {{ans\"okan om amerikanskt patent}{ans\"okan om amerikanskt patent}},
+ file = {{fil}{fil}},
+ library = {{bibliotek}{bibliotek}},
+ abstract = {{sammandrag}{sammandrag}},
+ annotation = {{anm\"arkning}{anm\adddot}},
+ commonera = {{v\"asterl\"andsk tider\"akning}{v\adddot t\adddot}},
+ beforecommonera = {{f\"ore v\"asterl\"andsk tider\"akning}{f\adddot v\adddot t\adddot}},
+ annodomini = {{efter Kristus}{e\adddot Kr\adddot}},
+ beforechrist = {{f\"ore Kristus}{f\adddot Kr\adddot}},
+% circa = {{}{}},% FIXME: missing
+% spring = {{}{}},% FIXME: missing
+% summer = {{}{}},% FIXME: missing
+% autumn = {{}{}},% FIXME: missing
+% winter = {{}{}},% FIXME: missing
+% springN = {{}{}},% FIXME: missing
+% summerN = {{}{}},% FIXME: missing
+% autumnN = {{}{}},% FIXME: missing
+% winterN = {{}{}},% FIXME: missing
+% springS = {{}{}},% FIXME: missing
+% summerS = {{}{}},% FIXME: missing
+% autumnS = {{}{}},% FIXME: missing
+% winterS = {{}{}},% FIXME: missing
+% Q1 = {{}{}},% FIXME: missing
+% Q2 = {{}{}},% FIXME: missing
+% Q3 = {{}{}},% FIXME: missing
+% Q4 = {{}{}},% FIXME: missing
+% QD1 = {{}{}},% FIXME: missing
+% QD2 = {{}{}},% FIXME: missing
+% QD3 = {{}{}},% FIXME: missing
+% S1 = {{}{}},% FIXME: missing
+% S2 = {{}{}},% FIXME: missing
+ am = {{fm}{fm}},
+ pm = {{em}{em}},
+}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/lbx/swissgerman-ms.lbx b/macros/latex/contrib/biblatex-ms/latex/lbx/swissgerman-ms.lbx
new file mode 100644
index 0000000000..4c09e916d8
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/lbx/swissgerman-ms.lbx
@@ -0,0 +1,24 @@
+\ProvidesFile{swissgerman-ms.lbx}
+[\abx@lbxid]
+
+\InheritBibliographyExtras{german}
+
+% Swiss time sep is a dot
+\DeclareBibliographyExtras{%
+ \protected\def\bibtimesep{.}%
+}
+
+% One point where Swiss German spelling
+% differs from Austrian and German German
+% is the (non-)use of \ss
+\DeclareBibliographyStrings{%
+ inherit = {german},
+ countryuk = {{Grossbritannien}{GB}},
+}
+
+\DeclareHyphenationExceptions{%
+ Pa-tent-an-mel-dung
+ Pa-tent-an-meld
+}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/lbx/turkish-ms.lbx b/macros/latex/contrib/biblatex-ms/latex/lbx/turkish-ms.lbx
new file mode 100644
index 0000000000..d350d38da3
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/lbx/turkish-ms.lbx
@@ -0,0 +1,577 @@
+\ProvidesFile{turkish-ms.lbx}
+[\abx@lbxid]
+
+\DeclareRedundantLanguages{turkish}{turkish}
+
+\DeclareBibliographyExtras{%
+ \DeclareCapitalPunctuation{.!?}%
+ \protected\def\bibrangedash{%
+ \textendash\penalty\hyphenpenalty}% breakable dash
+ \let\finalandcomma=\empty
+ \let\finalandsemicolon=\empty
+ \protected\def\mkbibordinal#1{\stripzeros{#1}\adddot}%
+ \protected\def\mkbibmascord{\mkbibordinal}%
+ \protected\def\mkbibfemord{\mkbibordinal}%
+ \protected\def\mkbibneutord{\mkbibordinal}%
+ \protected\def\mkbibdatelong#1#2#3{%
+ \iffieldundef{#3}
+ {}
+ {\thefield{#3}%
+ \iffieldundef{#2}{}{\nobreakspace}}%
+ \iffieldundef{#2}
+ {}
+ {\mkbibmonth{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}}%
+ \iffieldbibstring{#1}
+ {\bibstring{\thefield{#1}}}
+ {\dateeraprintpre{#1}\stripzeros{\thefield{#1}}}}%
+ \protected\def\mkbibdateshort#1#2#3{%
+ \iffieldundef{#3}
+ {}
+ {\mkdayzeros{\thefield{#3}}%
+ \iffieldundef{#2}{}{/}}%
+ \iffieldundef{#2}
+ {}
+ {\mkmonthzeros{\thefield{#2}}%
+ \iffieldundef{#1}{}{/}}%
+ \iffieldbibstring{#1}
+ {\bibstring{\thefield{#1}}}
+ {\dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}}%
+ \expandafter\protected\expandafter\def\csname mkbibtime24h\endcsname#1#2#3#4{%
+ \iffieldundef{#1}
+ {}
+ {\mktimezeros{\thefield{#1}}%
+ \iffieldundef{#2}{}{\bibtimesep}}%
+ \iffieldundef{#2}
+ {}
+ {\mktimezeros{\thefield{#2}}%
+ \iffieldundef{#3}{}{\bibtimesep}}%
+ \iffieldundef{#3}
+ {}
+ {\mktimezeros{\thefield{#3}}}%
+ \iffieldundef{#4}{}
+ {\bibtimezonesep
+ \mkbibtimezone{\thefield{#4}}}}%
+ \expandafter\protected\expandafter\def\csname mkbibtime12h\endcsname#1#2#3#4{%
+ \stripzeros{\mktimehh{\thefield{#1}}}\bibtimesep
+ \forcezerosmdt{\thefield{#2}}%
+ \iffieldundef{#3}{}
+ {\bibtimesep
+ \forcezerosmdt{\thefield{#3}}}%
+ \space
+ \ifnumless{\thefield{#1}}{12}
+ {\bibstring{am}}
+ {\bibstring{pm}}%
+ \iffieldundef{#4}{}
+ {\space\bibtimezonesep
+ \parentext{\mkbibtimezone{\thefield{#4}}}}}%
+ \protected\def\mkbibyeardivisiondateshort#1#2{%
+ \mkbibyeardivision{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}%
+ \dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}%
+ \protected\def\mkbibyeardivisiondatelong#1#2{%
+ \mkbibyeardivision{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}%
+ \dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}%
+ \savecommand\lbx@lfromlang
+ \savecommand\lbx@sfromlang
+ \def\lbx@lfromlang{%
+ \iflistundef{origlanguage}
+ {}
+ {\printlist[lfromoriglanguage]{origlanguage}\space}}%
+ \def\lbx@sfromlang{%
+ \iflistundef{origlanguage}
+ {}
+ {\printlist[sfromoriglanguage]{origlanguage}\space}}%
+}
+
+\UndeclareBibliographyExtras{%
+ \restorecommand\lbx@lfromlang
+ \restorecommand\lbx@sfromlang
+}
+
+\DeclareBibliographyStrings{%
+ bibliography = {{Kaynak\c{c}a}{Kaynak\c{c}a}},
+ references = {{Kaynaklar}{Kaynaklar}},
+ shorthands = {{K\i saltmalar dizini}{K\i saltmalar}},
+ editor = {{edit\"{o}r}{ed\adddot}},
+ editors = {{edit\"{o}rler}{ed\adddot}},
+ compiler = {{derleyen}{der\adddot}},
+ compilers = {{derleyenler}{der\adddot}},
+ redactor = {{yay\i na haz\i rlayan}{yay\adddot\ haz\adddot}},
+ redactors = {{yay\i na haz\i rlayanlar}{yay\adddot\ haz\adddot}},
+ reviser = {{tashih eden}{tashih\adddot}},
+ revisers = {{tashih edenler}{tashih\adddot}},
+ founder = {{kurucu}{kur\adddot}},
+ founders = {{kurucular}{kur\adddot}},
+ continuator = {{tamamlayan}{tam\adddot}},
+ continuators = {{tamamlayanlar}{tam\adddot}},
+ collaborator = {{ortak}{ortak}},
+ collaborators = {{ortaklar}{ortaklar}},
+ translator = {{\c{c}eviren}{\c{c}ev\adddot}},
+ translators = {{\c{c}evirenler}{\c{c}ev\adddot}},
+ commentator = {{yorumlayan}{yrm\adddot}},
+ commentators = {{yorumlayanlar}{yrm\adddot}},
+ annotator = {{a\c{c}\i klayan}{a\c{c}\i k\adddot}},
+ annotators = {{a\c{c}\i klayanlar}{a\c{c}\i k\adddot}},
+ commentary = {{yorum}{yrm\adddot}},
+ annotations = {{a\c{c}\i klamalar}{a\c{c}\i k\adddot}},
+ introduction = {{giri\c{s}}{gir\adddot}},
+ foreword = {{\"{o}ns\"{o}z}{\"{o}ns\adddot}},
+ afterword = {{sons\"{o}z}{sons\adddot}},
+ editortr = {{edit\"{o}r ve \c{c}eviren}%
+ {ed\adddot\ ve \c{c}ev\adddot}},
+ editorstr = {{edit\"{o}rler ve \c{c}evirenler}%
+ {ed\adddot\ ve \c{c}ev\adddot}},
+ editorco = {{edit\"{o}r ve yorumlayan}%
+ {ed\adddot\ ve yrm\adddot}},
+ editorsco = {{edit\"{o}rler ve yorumlayanlar}%
+ {ed\adddot\ ve yrm\adddot}},
+ editoran = {{edit\"{o}r ve a\c{c}\i klayan}%
+ {ed\adddot\ ve a\c{c}\i k\adddot}},
+ editorsan = {{edit\"{o}rler ve a\c{c}\i klayanlar}%
+ {ed\adddot\ ve a\c{c}\i k\adddot}},
+ editorin = {{edit\"{o}r ve giri\c{s}}%
+ {ed\adddot\ ve gir\adddot}},
+ editorsin = {{edit\"{o}rler ve giri\c{s}}%
+ {ed\adddot\ ve gir\adddot}},
+ editorfo = {{edit\"{o}r ve \"{o}ns\"{o}z}%
+ {ed\adddot\ ve \"{o}ns\adddot}},
+ editorsfo = {{edit\"{o}rler ve \"{o}ns\"{o}z}%
+ {ed\adddot\ ve \"{o}ns\adddot}},
+ editoraf = {{edit\"{o}r ve sons\"{o}z}%
+ {ed\adddot\ ve sons\adddot}},
+ editorsaf = {{edit\"{o}rler ve sons\"{o}z}%
+ {ed\adddot\ ve sons\adddot}},
+ editortrco = {{edit\"{o}r, \c{c}eviren and yorumlayan}%
+ {ed\adddot, \c{c}ev\adddot\ ve yrm\adddot}},
+ editorstrco = {{edit\"{o}rler, \c{c}evirenler ve yorumlayanlar}%
+ {ed\adddot, \c{c}ev\adddot\ ve yrm\adddot}},
+ editortran = {{edit\"{o}r, \c{c}eviren ve a\c{c}\i klayan}%
+ {ed\adddot, \c{c}ev\adddot\ ve a\c{c}\i k\adddot}},
+ editorstran = {{edit\"{o}rler, \c{c}evirenler ve a\c{c}\i klayanlar}%
+ {ed\adddot, \c{c}ev\adddot\ ve a\c{c}\i k\adddot}},
+ editortrin = {{edit\"{o}r, \c{c}eviren ve giri\c{s}}%
+ {ed\adddot, \c{c}ev\adddot\ ve gir\adddot}},
+ editorstrin = {{edit\"{o}rler, \c{c}evirenler ve giri\c{s}}%
+ {ed\adddot, \c{c}ev\adddot\ ve gir\adddot}},
+ editortrfo = {{edit\"{o}r, \c{c}eviren ve \"{o}ns\"{o}z}%
+ {ed\adddot, \c{c}ev\adddot\ ve \"{o}ns\adddot}},
+ editorstrfo = {{edit\"{o}rler, \c{c}evirenler ve \"{o}ns\"{o}z}%
+ {ed\adddot, \c{c}ev\adddot\ ve \"{o}ns\adddot}},
+ editortraf = {{edit\"{o}r, \c{c}eviren ve sons\"{o}z}%
+ {ed\adddot, \c{c}ev\adddot\ ve sons\adddot}},
+ editorstraf = {{edit\"{o}rler, \c{c}evirenler ve sons\"{o}z}%
+ {ed\adddot, \c{c}ev\adddot\ ve sons\adddot}},
+ editorcoin = {{edit\"{o}r, yorumlayan ve giri\c{s}}%
+ {ed\adddot, yrm\adddot\ ve gir\adddot}},
+ editorscoin = {{edit\"{o}rler, yorumlayanlar ve giri\c{s}}%
+ {ed\adddot, yrm\adddot\ ve gir\adddot}},
+ editorcofo = {{edit\"{o}r, yorumlayan ve \"{o}ns\"{o}z}%
+ {ed\adddot, yrm\adddot\ ve \"{o}ns\adddot}},
+ editorscofo = {{edit\"{o}rler, yorumlayanlar ve \"{o}ns\"{o}z}%
+ {ed\adddot, yrm\adddot\ ve \"{o}ns\adddot}},
+ editorcoaf = {{edit\"{o}r, yorumlayan ve sons\"{o}z}%
+ {ed\adddot, yrm\adddot\ ve sons\adddot}},
+ editorscoaf = {{edit\"{o}rler, yorumlayanlar ve sons\"{o}z}%
+ {ed\adddot, yrm\adddot\ ve sons\adddot}},
+ editoranin = {{edit\"{o}r, a\c{c}\i klayan ve giri\c{s}}%
+ {ed\adddot, a\c{c}\i k\adddot\ ve gir\adddot}},
+ editorsanin = {{edit\"{o}rler, a\c{c}\i klayanlar ve giri\c{s}}%
+ {ed\adddot, a\c{c}\i k\adddot\ ve gir\adddot}},
+ editoranfo = {{edit\"{o}r, a\c{c}\i klayan ve \"{o}ns\"{o}z}%
+ {ed\adddot, a\c{c}\i k\adddot\ ve \"{o}ns\adddot}},
+ editorsanfo = {{edit\"{o}rler, a\c{c}\i klayanlar ve \"{o}ns\"{o}z}%
+ {ed\adddot, a\c{c}\i k\adddot\ ve \"{o}ns\adddot}},
+ editoranaf = {{edit\"{o}r, a\c{c}\i klayan ve sons\"{o}z}%
+ {ed\adddot, a\c{c}\i k\adddot\ ve sons\adddot}},
+ editorsanaf = {{edit\"{o}rler, a\c{c}\i klayanlar ve sons\"{o}z}%
+ {ed\adddot, a\c{c}\i k\adddot\ ve sons\adddot}},
+ editortrcoin = {{edit\"{o}r, \c{c}eviren, yorumlayan ve giri\c{s}}%
+ {ed\adddot, \c{c}ev\adddot, yrm\adddot\ ve gir\adddot}},
+ editorstrcoin = {{edit\"{o}rler, \c{c}evirenler, yorumlayanlar ve giri\c{s}}%
+ {ed\adddot, \c{c}ev\adddot, yrm\adddot\ ve gir\adddot}},
+ editortrcofo = {{edit\"{o}r, \c{c}eviren, yorumlayan ve \"{o}ns\"{o}z}%
+ {ed\adddot, \c{c}ev\adddot, yrm\adddot\ ve \"{o}ns\adddot}},
+ editorstrcofo = {{edit\"{o}rler, \c{c}evirenler, yorumlayanlar ve \"{o}ns\"{o}z}%
+ {ed\adddot, \c{c}ev\adddot, yrm\adddot\ ve \"{o}ns\adddot}},
+ editortrcoaf = {{edit\"{o}r, \c{c}eviren, yorumlayan ve sons\"{o}z}%
+ {ed\adddot, \c{c}ev\adddot, yrm\adddot\ ve sons\adddot}},
+ editorstrcoaf = {{edit\"{o}rler, \c{c}evirenler, yorumlayanlar ve sons\"{o}z}%
+ {ed\adddot, \c{c}ev\adddot, yrm\adddot\ ve sons\adddot}},
+ editortranin = {{edit\"{o}r, \c{c}eviren, a\c{c}\i klayan ve giri\c{s}}%
+ {ed\adddot, \c{c}ev\adddot, a\c{c}\i k\adddot\ ve gir\adddot}},
+ editorstranin = {{edit\"{o}rler, \c{c}evirenler, a\c{c}\i klayanlar ve giri\c{s}}%
+ {ed\adddot, \c{c}ev\adddot, a\c{c}\i k\adddot\ ve gir\adddot}},
+ editortranfo = {{edit\"{o}r, \c{c}eviren, a\c{c}\i klayan ve \"{o}ns\"{o}z}%
+ {ed\adddot, \c{c}ev\adddot, a\c{c}\i k\adddot\ ve \"{o}ns\adddot}},
+ editorstranfo = {{edit\"{o}rler, \c{c}evirenler, a\c{c}\i klayanlar ve \"{o}ns\"{o}z}%
+ {ed\adddot, \c{c}ev\adddot, a\c{c}\i k\adddot\ ve \"{o}ns\adddot}},
+ editortranaf = {{edit\"{o}r, \c{c}eviren, a\c{c}\i klayan ve sons\"{o}z}%
+ {ed\adddot, \c{c}ev\adddot, a\c{c}\i k\adddot\ ve sons\adddot}},
+ editorstranaf = {{edit\"{o}rler, \c{c}evirenler, a\c{c}\i klayanlar ve sons\"{o}z}%
+ {ed\adddot, \c{c}ev\adddot, a\c{c}\i k\adddot\ ve sons\adddot}},
+ translatorco = {{\c{c}eviren ve yorumlayan}%
+ {\c{c}ev\adddot\ ve yrm\adddot}},
+ translatorsco = {{\c{c}evirenler ve yorumlayanlar}%
+ {\c{c}ev\adddot\ ve yrm\adddot}},
+ translatoran = {{\c{c}eviren ve a\c{c}\i klayan}%
+ {\c{c}ev\adddot\ ve a\c{c}\i k\adddot}},
+ translatorsan = {{\c{c}evirenler ve a\c{c}\i klayanlar}%
+ {\c{c}ev\adddot\ ve a\c{c}\i k\adddot}},
+ translatorin = {{\c{c}eviren ve giri\c{s}}%
+ {\c{c}ev\adddot\ ve gir\adddot}},
+ translatorsin = {{\c{c}evirenler ve giri\c{s}}%
+ {\c{c}ev\adddot\ ve gir\adddot}},
+ translatorfo = {{\c{c}eviren ve \"{o}ns\"{o}z}%
+ {\c{c}ev\adddot\ ve \"{o}ns\adddot}},
+ translatorsfo = {{\c{c}evirenler ve \"{o}ns\"{o}z}%
+ {\c{c}ev\adddot\ ve \"{o}ns\adddot}},
+ translatoraf = {{\c{c}eviren ve sons\"{o}z}%
+ {\c{c}ev\adddot\ ve sons\adddot}},
+ translatorsaf = {{\c{c}evirenler ve sons\"{o}z}%
+ {\c{c}ev\adddot\ ve sons\adddot}},
+ translatorcoin = {{\c{c}eviren, yorumlayan ve giri\c{s}}%
+ {\c{c}ev\adddot, yrm\adddot\ ve gir\adddot}},
+ translatorscoin = {{\c{c}evirenler, yorumlayanlar ve giri\c{s}}%
+ {\c{c}ev\adddot, yrm\adddot\ ve gir\adddot}},
+ translatorcofo = {{\c{c}eviren, yorumlayan ve \"{o}ns\"{o}z}%
+ {\c{c}ev\adddot, yrm\adddot\ ve \"{o}ns\adddot}},
+ translatorscofo = {{\c{c}evirenler, yorumlayanlar ve \"{o}ns\"{o}z}%
+ {\c{c}ev\adddot, yrm\adddot\ ve \"{o}ns\adddot}},
+ translatorcoaf = {{\c{c}eviren, yorumlayan ve sons\"{o}z}%
+ {\c{c}ev\adddot, yrm\adddot\ ve sons\adddot}},
+ translatorscoaf = {{\c{c}evirenler, yorumlayanlar ve sons\"{o}z}%
+ {\c{c}ev\adddot, yrm\adddot\ ve sons\adddot}},
+ translatoranin = {{\c{c}eviren, a\c{c}\i klayan ve giri\c{s}}%
+ {\c{c}ev\adddot, a\c{c}\i k\adddot\ ve gir\adddot}},
+ translatorsanin = {{\c{c}evirenler, a\c{c}\i klayanlar ve giri\c{s}}%
+ {\c{c}ev\adddot, a\c{c}\i k\adddot\ ve gir\adddot}},
+ translatoranfo = {{\c{c}eviren, a\c{c}\i klayan ve \"{o}ns\"{o}z}%
+ {\c{c}ev\adddot, a\c{c}\i k\adddot\ ve \"{o}ns\adddot}},
+ translatorsanfo = {{\c{c}evirenler, a\c{c}\i klayanlar ve \"{o}ns\"{o}z}%
+ {\c{c}ev\adddot, a\c{c}\i k\adddot\ ve \"{o}ns\adddot}},
+ translatoranaf = {{\c{c}eviren, a\c{c}\i klayan ve sons\"{o}z}%
+ {\c{c}ev\adddot, a\c{c}\i k\adddot\ ve sons\adddot}},
+ translatorsanaf = {{\c{c}evirenler, a\c{c}\i klayanlar ve sons\"{o}z}%
+ {\c{c}ev\adddot, a\c{c}\i k\adddot\ ve sons\adddot}},
+ organizer = {{organizat\"{o}r}{org\adddot}},
+ organizers = {{organizat\"{o}rler}{org\adddot}},
+ byorganizer = {{organizat\"{o}r}{org\adddot}},
+ byauthor = {{yazar}{yazar}},
+ byeditor = {{edit\"{o}r}{ed\adddot}},
+ bycompiler = {{derleyen}{der\adddot}},
+ byredactor = {{yay\i na haz\i rlayan}{yay\adddot\ haz\adddot}},
+ byreviser = {{tashih}{tashih}},
+ byreviewer = {{de\u{g}erlendiren}{de\u{g}\adddot}},
+ byfounder = {{kurucu}{kur\adddot}},
+ bycontinuator = {{tamamlayan}{tam\adddot}},
+ bycollaborator = {{ortakla\c{s}a yapanlar}{ortak\adddot\ yap\adddot}},
+ bytranslator = {{\lbx@lfromlang \c{c}eviren}{\lbx@sfromlang \c{c}ev\adddot}},
+ bycommentator = {{yorumlayan}{yrm\adddot}},
+ byannotator = {{a\c{c}\i klayan}{a\c{c}\i k\adddot}},
+ withcommentator = {{yorumlar\i yla katk\i da bulunan}{yrm\adddot\ kat\adddot\ bul\adddot}},
+ withannotator = {{a\c{c}\i klamalar\i yla katk\i da bulunan}{a\c{c}\i k\adddot\ kat\adddot\ bul\adddot}},
+ withintroduction = {{giri\c{si yazan}}{gir\adddot\ yaz\adddot}},
+ withforeword = {{\"{o}ns\"{o}z\"{u} yazan}{\"{o}ns\adddot\ yaz\adddot}},%
+ withafterword = {{sons\"{o}z\"{u} yazan}{sons\adddot\ yaz\adddot}},
+ byeditortr = {{edit\"{o}r ve \lbx@lfromlang \c{c}eviren}%
+ {ed\adddot\ ve \lbx@sfromlang \c{c}ev\adddot}},
+ byeditorco = {{edit\"{o}r ve yorumlayan}%
+ {ed\adddot\ ve yrm\adddot}},
+ byeditoran = {{edit\"{o}r ve a\c{c}\i klayan}%
+ {ed\adddot\ ve a\c{c}\i k\adddot}},
+ byeditorin = {{edit\"{o}r ve giri\c{s}}%
+ {ed\adddot\ ve gir\adddot}},
+ byeditorfo = {{edit\"{o}r ve \"{o}ns\"{o}z}%
+ {ed\adddot\ ve \"{o}ns\adddot}},
+ byeditoraf = {{edit\"{o}r ve sons\"{o}z}%
+ {ed\adddot\ ve sons\adddot}},
+ byeditortrco = {{edit\"{o}r, \lbx@lfromlang \c{c}eviren ve yorumlayan}%
+ {ed\adddot, \lbx@sfromlang \c{c}ev\adddot\ ve yrm\adddot}},
+ byeditortran = {{edit\"{o}r, \lbx@lfromlang \c{c}eviren ve a\c{c}\i klayan}%
+ {ed\adddot, \lbx@sfromlang \c{c}ev\adddot\ ve a\c{c}\i k\adddot}},
+ byeditortrin = {{edit\"{o}r, \lbx@lfromlang \c{c}eviren ve giri\c{s}}%
+ {ed\adddot, \lbx@sfromlang \c{c}ev\adddot\ ve gir\adddot}},
+ byeditortrfo = {{edit\"{o}r, \lbx@lfromlang \c{c}eviren ve \"{o}ns\"{o}z}%
+ {ed\adddot, \lbx@sfromlang \c{c}ev\adddot\ ve \"{o}ns\adddot}},
+ byeditortraf = {{edit\"{o}r, \lbx@lfromlang \c{c}eviren ve sons\"{o}z}%
+ {ed\adddot, \lbx@sfromlang \c{c}ev\adddot\ ve sons\adddot}},
+ byeditorcoin = {{edit\"{o}r, yorumlayan ve giri\c{s}}%
+ {ed\adddot, yrm\adddot\ ve gir\adddot}},
+ byeditorcofo = {{edit\"{o}r, yorumlayan ve \"{o}ns\"{o}z}%
+ {ed\adddot, yrm\adddot\ ve \"{o}ns\adddot}},
+ byeditorcoaf = {{edit\"{o}r, yorumlayan ve sons\"{o}z}%
+ {ed\adddot, yrm\adddot\ ve sons\adddot}},
+ byeditoranin = {{edit\"{o}r, a\c{c}\i klayan ve giri\c{s}}%
+ {ed\adddot, a\c{c}\i k\adddot\ ve gir\adddot}},
+ byeditoranfo = {{edit\"{o}r, a\c{c}\i klayan ve \"{o}ns\"{o}z}%
+ {ed\adddot, a\c{c}\i k\adddot\ ve \"{o}ns\adddot}},
+ byeditoranaf = {{edit\"{o}r, a\c{c}\i klayan ve sons\"{o}z}%
+ {ed\adddot, a\c{c}\i k\adddot\ ve sons\adddot}},
+ byeditortrcoin = {{edit\"{o}r, \lbx@lfromlang \c{c}eviren, yorumlayan ve giri\c{s}}%
+ {ed\adddot, \lbx@sfromlang \c{c}ev\adddot, yrm\adddot\ ve gir\adddot}},
+ byeditortrcofo = {{edit\"{o}r, \lbx@lfromlang \c{c}eviren, yorumlayan ve \"{o}ns\"{o}z}%
+ {ed\adddot, \lbx@sfromlang \c{c}ev\adddot, yrm\adddot\ ve \"{o}ns\adddot}},
+ byeditortrcoaf = {{edit\"{o}r, \lbx@lfromlang \c{c}eviren, yorumlayan ve sons\"{o}z}%
+ {ed\adddot, \lbx@sfromlang \c{c}ev\adddot, yrm\adddot\ ve sons\adddot}},
+ byeditortranin = {{edit\"{o}r, \lbx@lfromlang \c{c}eviren, a\c{c}\i klayan ve giri\c{s}}%
+ {ed\adddot, \lbx@sfromlang \c{c}ev\adddot, a\c{c}\i k\adddot\ ve gir\adddot}},
+ byeditortranfo = {{edit\"{o}r, \lbx@lfromlang \c{c}eviren, a\c{c}\i klayan ve \"{o}ns\"{o}z}%
+ {ed\adddot, \lbx@sfromlang \c{c}ev\adddot, a\c{c}\i k\adddot\ ve \"{o}ns\adddot}},
+ byeditortranaf = {{edit\"{o}r, \lbx@lfromlang \c{c}eviren, a\c{c}\i klayan ve sons\"{o}z}%
+ {ed\adddot, \lbx@sfromlang \c{c}ev\adddot, a\c{c}\i k\adddot\ ve sons\adddot}},
+ bytranslatorco = {{\lbx@lfromlang \c{c}eviren ve yorumlayan}%
+ {\lbx@sfromlang \c{c}ev\adddot\ ve yrm\adddot}},
+ bytranslatoran = {{\lbx@lfromlang \c{c}eviren ve a\c{c}\i klayan}%
+ {\lbx@sfromlang \c{c}ev\adddot\ ve a\c{c}\i k\adddot}},
+ bytranslatorin = {{\lbx@lfromlang \c{c}eviren ve giri\c{s}}%
+ {\lbx@sfromlang \c{c}ev\adddot\ ve gir\adddot}},
+ bytranslatorfo = {{\lbx@lfromlang \c{c}eviren ve \"{o}ns\"{o}z}%
+ {\lbx@sfromlang \c{c}ev\adddot\ ve \"{o}ns\adddot}},
+ bytranslatoraf = {{\lbx@lfromlang \c{c}eviren ve sons\"{o}z}%
+ {\lbx@sfromlang \c{c}ev\adddot\ ve sons\adddot}},
+ bytranslatorcoin = {{\lbx@lfromlang \c{c}eviren, yorumlayan ve giri\c{s}}%
+ {\lbx@sfromlang \c{c}ev\adddot, yrm\adddot\ ve gir\adddot}},
+ bytranslatorcofo = {{\lbx@lfromlang \c{c}eviren, yorumlayan ve \"{o}ns\"{o}z}%
+ {\lbx@sfromlang \c{c}ev\adddot, yrm\adddot\ ve \"{o}ns\adddot}},
+ bytranslatorcoaf = {{\lbx@lfromlang \c{c}eviren, yorumlayan ve sons\"{o}z}%
+ {\lbx@sfromlang \c{c}ev\adddot, yrm\adddot\ ve sons\adddot}},
+ bytranslatoranin = {{\lbx@lfromlang \c{c}eviren, a\c{c}\i klayan ve giri\c{s}}%
+ {\lbx@sfromlang \c{c}ev\adddot, a\c{c}\i k\adddot\ ve gir\adddot}},
+ bytranslatoranfo = {{\lbx@lfromlang \c{c}eviren, a\c{c}\i klayan ve \"{o}ns\"{o}z}%
+ {\lbx@sfromlang \c{c}ev\adddot, a\c{c}\i k\adddot\ ve \"{o}ns\adddot}},
+ bytranslatoranaf = {{\lbx@lfromlang \c{c}eviren, a\c{c}\i klayan ve sons\"{o}z}%
+ {\lbx@sfromlang \c{c}ev\adddot, a\c{c}\i k\adddot\ ve sons\adddot}},
+ and = {{ve}{ve}},
+ andothers = {{ve di\u{g}erleri}{ve di\u{g}\adddot}},
+ andmore = {{ve di\u{g}erleri}{ve di\u{g}\adddot}},
+ volume = {{cilt}{c\adddot}},
+ volumes = {{cilt}{c\adddot}},
+ involumes = {{i\c{c}inde}{i\c{c}inde}},
+ jourvol = {{cilt}{c\adddot}},
+ jourser = {{seri}{seri}},
+ book = {{kitap}{kitap}},
+ part = {{k\i s\i m}{k\i s\i m}},
+ issue = {{say\i}{say\i}},
+ newseries = {{yeni seri}{yeni seri}},
+ oldseries = {{eski seri}{eski seri}},
+ edition = {{bask\i}{bs\adddot}},
+ reprint = {{yeni bask\i s\i}{yeni bask\i s\i}},
+ reprintof = {{yeni bask\i s\i}{yeni bask\i s\i}},
+ reprintas = {{yeni bask\i s\i}{yeni bask\i s\i}},
+ reprintfrom = {{yeni bask\i s\i}{yeni bask\i s\i}},
+ reviewof = {{derlenen eser}{der\adddot\ eser}},
+ translationof = {{\c{c}evirilen eser}{\c{c}ev\adddot\ eser}},
+ translationas = {{\c{c}evirilen eser}{\c{c}ev\adddot\ eser}},
+ translationfrom = {{\c{c}evirilen eser}{\c{c}ev\adddot\ eser}},
+ origpubas = {{as\i l eser}{as\i l eser}},
+ origpubin = {{as\i l eser yay\i n tarihi}{as\i l eser yay\i n tarihi}},
+ astitle = {{yeni ba\c{s}l\i k}{yeni ba\c{s}l\i k}},
+ bypublisher = {{yay\i n evi}{yay\i n evi}},
+ nodate = {{tarih yok}{t\adddot y\adddot}},
+ page = {{sayfa}{s\adddot}},
+ pages = {{sayfalar}{ss\adddot}},
+ column = {{s\"{u}tun}{s\"{u}t\adddot}},
+ columns = {{s\"{u}tunlar}{s\"{u}t\adddot}},
+ line = {{sat\i r}{sat\adddot}},
+ lines = {{sat\i rlar}{sat\adddot}},
+ verse = {{m\i sra}{m\i s\adddot}},
+ verses = {{m\i sralar}{m\i s\adddot}},
+ section = {{b\"{o}l\"{u}m}{b\"{o}l\adddot}},
+ sections = {{b\"{o}l\"{u}mler}{b\"{o}l\adddot}},
+ paragraph = {{paragraf}{par\adddot}},
+ paragraphs = {{paragraflar}{par\adddot}},
+ pagetotal = {{toplam sayfa}{s\adddot}},
+ pagetotals = {{toplam sayfalar}{ss\adddot}},
+ columntotal = {{toplam s\"{u}tun}{s\"{u}t\adddot}},
+ columntotals = {{toplam s\"{u}tunlar}{s\"{u}t\adddot}},
+ linetotal = {{toplam sat\i r}{sat\adddot}},
+ linetotals = {{toplam sat\i rlar}{sat\adddot}},
+ versetotal = {{toplam m\i sra}{m\i s\adddot}},
+ versetotals = {{toplam m\i sralar}{m\i s\adddot}},
+ sectiontotal = {{toplam b\"{o}l\"{u}m}{b\"{o}l\adddot}},
+ sectiontotals = {{toplam b\"{o}l\"{u}mler}{b\"{o}l\adddot}},
+ paragraphtotal = {{toplam paragraf}{par\adddot}},
+ paragraphtotals = {{toplam paragraflar}{par\adddot}},
+ in = {{i\c{c}inde}{i\c{c}inde}},
+ inseries = {{serilerde}{serilerde}},
+ ofseries = {{serilerde}{serilerde}},
+ number = {{numara}{no\adddot}},
+ chapter = {{b\"{o}l\"{u}m}{b\"{o}l\adddot}},
+ bathesis = {{lisans tezi}{lis\adddot\ tezi}},
+ mathesis = {{y\"{u}ksek lisans tezi}{y\"{u}k\adddot\ lis\adddot\ tezi}},
+ phdthesis = {{doktora tezi}{dok\adddot\ tezi}},
+ candthesis = {{aday tezi}{aday tezi}},
+ resreport = {{ara\c{s}t\i rma raporu}{ara\c{s}\adddot\ rap\adddot}},
+ techreport = {{teknik rapor}{tek\adddot\ rap\adddot}},
+ software = {{bilgisayar yaz\i l\i m\i}{bilg\adddot\ yaz\adddot}},
+ datacd = {{CD}{CD}},
+ audiocd = {{ses CD'si}{ses CD'si}},
+ version = {{versiyon}{ver\adddot}},
+ url = {{eri\c{s}im adresi}{eri\c{s}im adresi}},
+ urlfrom = {{eri\c{s}im adresi}{eri\c{s}im adresi}},
+ urlseen = {{eri\c{s}im tarihi}{eri\c{s}im tarihi}},
+ inpreparation = {{haz\i rl\i k a\c{s}amas\i nda}{haz\i rl\i k a\c{s}amas\i nda}},
+ submitted = {{g\"{o}nderilmi\c{s}tir}{g\"{o}nderilmi\c{s}tir}},
+ forthcoming = {{yak\i nda}{yak\i nda}},
+ inpress = {{bas\i m a\c{s}amas\i nda}{bas\i m a\c{s}amas\i nda}},
+ prepublished = {{taslak bas\i m\i}{taslak bas\i m\i}},
+ citedas = {{at\i f olarak}{at\i f olarak}},
+ thiscite = {{\"{o}zellikle}{\"{o}z\adddot\ bkz\adddot}},
+ seenote = {{nota bak\i n\i z}{nota bkz\adddot}},
+ quotedin = {{al\i nt\i}{al\i nt\i}},
+ idem = {{ayn\i}{ayn\i}},
+ idemsm = {{ayn\i}{ayn\i}},
+ idemsf = {{ayn\i}{ayn\i}},
+ idemsn = {{ayn\i}{ayn\i}},
+ idempm = {{ayn\i lar\i}{ayn\i lar\i}},
+ idempf = {{ayn\i lar\i}{ayn\i lar\i}},
+ idempn = {{ayn\i lar\i}{ayn\i lar\i}},
+ idempp = {{ayn\i lar\i}{ayn\i lar\i}},
+ ibidem = {{ayn{\i} yer}{ayn{\i} yer}},
+ opcit = {{at\i f yap\i lan \c{c}al\i\c{s}ma}{at\i f yap\adddot\ \c{c}al\adddot}},
+ loccit = {{at\i f yap\i lan yer}{at\i f yap\adddot\ yer}},
+ confer = {{kar\c{s}\i la\c{s}t\i r}{kar\c{s}\adddot}},
+ sequens = {{takip eden}{takip eden}},
+ sequentes = {{takip eden}{takip eden}},
+ passim = {{rastgele}{rastgele}},
+ see = {{bak\i n\i z}{bkz\adddot}},
+ seealso = {{ayr\i ca bak\i n\i z}{ayr\i ca bkz\adddot}},
+ backrefpage = {{sayfada g\"{o}sterilmi\c{s}tir}{say\adddot\ g\"{o}s\adddot}},
+ backrefpages = {{sayfalarda g\"{o}sterilmi\c{s}tir}{say\adddot\ g\"{o}s\adddot}},
+ january = {{Ocak}{Ocak}},
+ february = {{\c{S}ubat}{\c{S}ub\adddot}},
+ march = {{Mart}{Mar\adddot}},
+ april = {{Nisan}{Nis\adddot}},
+ may = {{May\i s}{May\adddot}},
+ june = {{Haziran}{Haz\adddot}},
+ july = {{Temmuz}{Tem\adddot}},
+ august = {{A\u{g}ustos}{A\u{g}us\adddot}},
+ september = {{Eyl\"{u}l}{Eyl\adddot}},
+ october = {{Ekim}{Ekim}},
+ november = {{Kas\i m}{Kas\adddot}},
+ december = {{Aral\i k}{Ara\adddot}},
+ langamerican = {{Amerikanca}{Amerikanca}},
+ langbasque = {{Bask\c{c}a}{Bask\c{c}a}},
+ langbrazilian = {{Brezilyanca}{Brezilyanca}},
+ langbulgarian = {{Bulgarca}{Bulgarca}},
+ langcatalan = {{Katalanca}{Katalanca}},
+ langcroatian = {{H\i rvat\c{c}a}{H\i rvat\c{c}a}},
+ langczech = {{\c{C}ek\c{c}e}{\c{C}ek\c{c}e}},
+ langdanish = {{Danimarkanca}{Danimarkanca}},
+ langdutch = {{Flemenk\c{c}e}{Flemenk\c{c}e}},
+ langenglish = {{\.{I}ngilizce}{\.{I}ngilizce}},
+ langestonian = {{Estonca}{Estonca}},
+ langfinnish = {{Fince}{Fince}},
+ langfrench = {{Frans\i zca}{Frans\i zca}},
+ langgalician = {{Galce}{Galce}},
+ langgerman = {{Almanca}{Almanca}},
+ langgreek = {{Yunanca}{Yunanca}},
+ langhungarian = {{Macarca}{Macarca}},
+ langitalian = {{\.{I}talyanca}{\.{I}talyanca}},
+ langjapanese = {{Japonca}{Japonca}},
+ langlatin = {{Latince}{Latince}},
+ langlatvian = {{Letonca}{Letonca}},
+ langlithuanian = {{Litvanca}{Litvanca}},
+ langmarathi = {{Marathice}{Marathice}},
+ langnorwegian = {{Norve\c{c}\c{c}e}{Norve\c{c}\c{c}e}},
+ langpolish = {{Polonyaca}{Polonyaca}},
+ langportuguese = {{Portekizce}{Portekizce}},
+ langromanian = {{Rumence}{Rumence}},
+ langrussian = {{Rus\c{c}a}{Rus\c{c}a}},
+ langserbian = {{S\i rp\c{c}a}{S\i rp\c{c}a}},
+ langslovak = {{Slovak\c{c}a}{Slovak\c{c}a}},
+ langslovene = {{Slovence}{Slovence}},
+ langspanish = {{\.{I}spanyolca}{\.{I}spanyolca}},
+ langswedish = {{\.{I}sve\c{c}\c{c}e}{\.{I}sve\c{c}\c{c}e}},
+ langturkish = {{T\"{u}rk\c{c}e}{T\"{u}rk\c{c}e}},
+ langukrainian = {{Ukraynaca}{Ukraynaca}},
+ fromamerican = {{Amerikanca'dan}{Amerikanca'dan}},
+ frombasque = {{Bask\c{c}a'dan}{Bask\c{c}a'dan}},
+ frombrazilian = {{Brezilyanca'dan}{Brezilyanca'dan}},
+ frombulgarian = {{Bulgarca'dan}{Bulgarca'dan}},
+ fromcatalan = {{Katalanca'dan}{Katalanca'dan}},
+ fromcroatian = {{H\i rvat\c{c}a'dan}{H\i rvat\c{c}a'dan}},
+ fromczech = {{\c{C}ek\c{c}e'den}{\c{C}ek\c{c}e'den}},
+ fromdanish = {{Danimarkanca'dan}{Danimarkanca'dan}},
+ fromdutch = {{Flemenk\c{c}e'den}{Flemenk\c{c}e'den}},
+ fromenglish = {{\.{I}ngilizce'den}{\.{I}ngilizce'den}},
+ fromestonian = {{Estonyaca'dan}{Estonyaca'dan}},
+ fromfinnish = {{Fince'den}{Fince'den}},
+ fromfrench = {{Frans\i zca'dan}{Frans\i zca'dan}},
+ fromgalician = {{Galyaca'dan}{Galyaca'dan}},
+ fromgerman = {{Almanca'dan}{Almanca'dan}},
+ fromgreek = {{Yunanca'dan}{Yunanca'dan}},
+ fromhungarian = {{Macarca'dan}{Macarca'dan}},
+ fromitalian = {{\.{I}talyanca'dan}{\.{I}talyanca'dan}},
+ fromjapanese = {{Japonca'dan}{Japonca'dan}},
+ fromlatin = {{Latince'den}{Latince'den}},
+ fromlatvian = {{Latvianca'dan}{Latvianca'dan}},
+ fromlithuanian = {{Litvanca'dan}{Litvanca'dan}},
+ frommarathi = {{Marathice'den}{Marathice'den}},
+ fromnorwegian = {{Norve\c{c}\c{c}e'den}{Norve\c{c}\c{c}e'den}},
+ frompolish = {{Polonyaca'dan}{Polonyaca'dan}},
+ fromportuguese = {{Portekizce'den}{Portekizce'den}},
+ fromromanian = {{Rumence'den}{Rumence'den}},
+ fromrussian = {{Rus\c{c}a'dan}{Rus\c{c}a'dan}},
+ fromserbian = {{S\i rp\c{c}a'dan}{S\i rp\c{c}a'dan}},
+ fromslovak = {{Slovak\c{c}a'dan}{Slovak\c{c}a'dan}},
+ fromslovene = {{Slovence'den}{Slovence'den}},
+ fromspanish = {{\.{I}spanyolca'dan}{\.{I}spanyolca'dan}},
+ fromswedish = {{\.{I}sve\c{c}\c{c}e'den}{\.{I}sve\c{c}\c{c}e'den}},
+ fromturkish = {{T\"{u}rk\c{c}e'den}{T\"{u}rk\c{c}e'den}},
+ fromukrainian = {{Ukraynaca'dan}{Ukraynaca'dan}},
+ countryde = {{Almanya}{DE}},
+ countryeu = {{Avrupa Birli\u{g}i}{AB}},
+ countryep = {{Avrupa Birli\u{g}i}{AB}},
+ countryfr = {{Fransa}{FR}},
+ countryuk = {{Birle\c{s}ik Krall\i k}{BK}},
+ countryus = {{Amerika Birle\c{s}ik Devletleri}{ABD}},
+ patent = {{patent}{pat\adddot}},
+ patentde = {{Alman patenti}{Alman pat\adddot}},
+ patenteu = {{Avrupa patenti}{Avrupa pat\adddot}},
+ patentfr = {{Frans\i z patenti}{Frans\i z pat\adddot}},
+ patentuk = {{\.{I}ngiliz patenti}{\.{I}ngiliz pat\adddot}},
+ patentus = {{Amerika patenti}{Amerika pat\adddot}},
+ patreq = {{patent beklemede}{pat\adddot\ bek\adddot}},
+ patreqde = {{Alman patenti beklemede}{Alman pat\adddot\ bek\adddot}},
+ patreqeu = {{Avrupa patenti beklemede}{Avrupa pat\adddot\ bek\adddot}},
+ patreqfr = {{Frans\i z patenti beklemede}{Frans\i z pat\adddot\ bek\adddot}},
+ patrequk = {{\.{I}ngiliz patenti beklemede}{\.{I}ngiliz pat\adddot\ bek\adddot}},
+ patrequs = {{Amerika patenti beklemede}{Amerika pat\adddot\ bek\adddot}},
+ file = {{dosya}{dosya}},
+ library = {{k\"{u}t\"{u}phane}{k\"{u}t\"{u}phane}},
+ abstract = {{\"{o}zet}{\"{o}zet}},
+ annotation = {{a\c{c}\i klama}{a\c{c}\i klama}},
+ commonera = {{milattan sonra}{MS}},
+ beforecommonera = {{milattan \"{o}nce}{M\"{O}}},
+ annodomini = {{milattan sonra}{MS}},
+ beforechrist = {{milattan \"{o}nce}{M\"{O}}},
+ circa = {{yakla\c{s}\i k olarak}{yak\adddot}},
+ spring = {{\.{I}lkbahar}{\.{I}lkbahar}},
+ summer = {{Yaz}{Yaz}},
+ autumn = {{Sonbahar}{Sonbahar}},
+ winter = {{K\i \c{s}}{K\i \c{s}}},
+ springN = {{\.{I}lkbahar (Kuzey Yar\i mk\"{u}re)}{\.{I}lkbahar KY}},
+ summerN = {{Yaz (Kuzey Yar\i mk\"{u}re)}{Yaz KY}},
+ autumnN = {{Sonbahar (Kuzey Yar\i mk\"{u}re)}{Sonbahar KY}},
+ winterN = {{K\i \c{s} (Kuzey Yar\i mk\"{u}re)}{K\i \c{s} KY}},
+ springS = {{\.{I}lkbahar (G\"{u}ney Yar\i mk\"{u}re)}{\.{I}lkbahar GY}},
+ summerS = {{Yaz (G\"{u}ney Yar\i mk\"{u}re)}{Yaz GY}},
+ autumnS = {{Sonbahar (G\"{u}ney Yar\i mk\"{u}re)}{Sonbahar GY}},
+ winterS = {{K\i \c{s} (G\"{u}ney Yar\i mk\"{u}re)}{K\i \c{s} GY}},
+ Q1 = {{birinci \c{c}eyrek}{1\adddot \c{C}}},
+ Q2 = {{ikinci \c{c}eyrek}{2\adddot \c{C}}},
+ Q3 = {{\"{u}\c{c}\"{u}nc\"{u} \c{c}eyrek}{3\adddot \c{C}}},
+ Q4 = {{d\"{o}rd\"{u}nc\"{u} \c{c}eyrek}{4\adddot \c{C}}},
+ QD1 = {{birinci d\"{o}rt\"{u}k}{1\adddot D}},
+ QD2 = {{ikinci d\"{o}rt\"{u}k}{2\adddot D}},
+ QD3 = {{\"{u}\c{c}\"{u}nc\"{u} d\"{o}rt\"{u}k}{3\adddot D}},
+ S1 = {{birinci yar\i y\i l}{1\adddot YY}},
+ S2 = {{ikinci yar\i y\i l}{1\adddot YY}},
+ am = {{\"{o}\u{g}leden \"{o}nce}{\"{O}\"{O}}},
+ pm = {{\"{o}\u{g}leden sonra}{\"{O}S}},
+}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-ms/latex/lbx/ukrainian-ms.lbx b/macros/latex/contrib/biblatex-ms/latex/lbx/ukrainian-ms.lbx
new file mode 100644
index 0000000000..be23b0959f
--- /dev/null
+++ b/macros/latex/contrib/biblatex-ms/latex/lbx/ukrainian-ms.lbx
@@ -0,0 +1,623 @@
+\ProvidesFile{ukrainian-ms.lbx}
+[\abx@lbxid]
+
+\DeclareRedundantLanguages{ukrainian}{ukrainian}
+
+% This file requires UTF-8 support!
+
+\lbx@ifutfinput
+ {}
+ {\PackageError{biblatex}
+ {Ukrainian requires UTF-8 support}
+ {The 'ukrainian.lbx' file requires UTF-8 encoding but you
+ seem\MessageBreak to be using a different encoding.
+ This is a fatal error. I will\MessageBreak abort loading
+ ukrainian.lbx now.}%
+ \endinput}
+
+\NewBibliographyString{% Used only Ukrainian for month checks
+ datejanuary,
+ datefebruary,
+ datemarch,
+ dateapril,
+ datemay,
+ datejune,
+ datejuly,
+ dateaugust,
+ dateseptember,
+ dateoctober,
+ datenovember,
+ datedecember%
+}
+
+\DeclareBibliographyExtras{%
+ \protected\def\bibrangedash{%
+ \textemdash\penalty\hyphenpenalty}% breakable dash
+ \let\finalandcomma=\empty
+ \let\finalandsemicolon=\empty
+ \protected\def\mkbibordinal#1{\mkbibmascord}%
+ \protected\def\mkbibmascord#1{#1-й}%
+ \protected\def\mkbibfemord#1{#1-я}%
+ \protected\def\mkbibneutord#1{#1-е}%
+ \protected\def\mkbibdatelong#1#2#3{%
+ \iffieldundef{#3}
+ {}
+ {\stripzeros{\thefield{#3}}%
+ \iffieldundef{#2}{}{\nobreakspace}}%
+ \iffieldundef{#2}
+ {}
+ {\iffieldundef{#3}
+ {\mkbibmonth{\thefield{#2}}}
+ {\lbx@ru@mkbibdatemonth{\thefield{#2}}}%
+ \iffieldundef{#1}{}{\space}}%
+ \iffieldbibstring{#1}
+ {\bibstring{\thefield{#1}}}
+ {\dateeraprintpre{#1}\stripzeros{\thefield{#1}}}}%
+ \protected\def\mkbibdateshort#1#2#3{%
+ \iffieldundef{#3}
+ {}
+ {\mkdayzeros{\thefield{#3}}%
+ \iffieldundef{#2}{}{\adddot}}%
+ \iffieldundef{#2}
+ {}
+ {\mkmonthzeros{\thefield{#2}}%
+ \iffieldundef{#1}{}{\adddot}}%
+ \iffieldbibstring{#1}
+ {\bibstring{\thefield{#1}}}
+ {\dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}}%
+ \savecommand\mkbibordedition
+ \savecommand\mkbibordseries
+ \def\mkbibordedition{\mkbibneutord}%
+ \def\mkbibordseries{\mkbibfemord}%
+ \expandafter\protected\expandafter\def\csname mkbibtime24h\endcsname#1#2#3#4{%
+ \iffieldundef{#1}
+ {}
+ {\mktimezeros{\thefield{#1}}%
+ \iffieldundef{#2}{}{\bibtimesep}}%
+ \iffieldundef{#2}
+ {}
+ {\mktimezeros{\thefield{#2}}%
+ \iffieldundef{#3}{}{\bibtimesep}}%
+ \iffieldundef{#3}
+ {}
+ {\mktimezeros{\thefield{#3}}}%
+ \iffieldundef{#4}{}
+ {\bibtimezonesep
+ \mkbibtimezone{\thefield{#4}}}}%
+ \expandafter\protected\expandafter\def\csname mkbibtime12h\endcsname#1#2#3#4{%
+ \stripzeros{\mktimehh{\thefield{#1}}}\bibtimesep
+ \forcezerosmdt{\thefield{#2}}%
+ \iffieldundef{#3}{}
+ {\bibtimesep
+ \forcezerosmdt{\thefield{#3}}}%
+ \space
+ \ifnumless{\thefield{#1}}{12}
+ {\bibstring{am}}
+ {\bibstring{pm}}%
+ \iffieldundef{#4}{}
+ {\space\bibtimezonesep
+ \parentext{\mkbibtimezone{\thefield{#4}}}}}%
+ \protected\def\mkbibyeardivisiondateshort#1#2{%
+ \mkbibyeardivision{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}%
+ \dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}%
+ \protected\def\mkbibyeardivisiondatelong#1#2{%
+ \mkbibyeardivision{\thefield{#2}}%
+ \iffieldundef{#1}{}{\space}%
+ \dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}%
+}
+
+\UndeclareBibliographyExtras{%
+ \restorecommand\mkbibordedition
+ \restorecommand\mkbibordseries
+}
+
+\DeclareBibliographyStrings{%
+ bibliography = {{Перелік літератури}{Література}},%book-like (chapter)
+ references = {{Перелік літератури}{Література}},%article-like (section)
+ shorthands = {{Перелік скорочень}{Скорочення}},
+ editor = {{редактор}{ред\adddot}},
+ editors = {{редактори}{ред\adddot}},
+ compiler = {{укладач}{уклад\adddot}},
+ compilers = {{укладачі}{уклад\adddot}},
+ redactor = {{редактор}{ред\adddot}},% FIXME: unsure
+ redactors = {{редактори}{ред\adddot}},% FIXME: unsure
+ reviser = {{ревізійний коректор}{ревіз\adddotspace кор\adddot}},
+ revisers = {{ревізійні коректори}{ревіз\adddotspace кор\adddot}},
+ founder = {{засновник}{засн\adddot}},
+ founders = {{засновник}{засн\adddot}},
+ continuator = {{продовжувач}{прод\adddot}},% FIXME: unsure
+ continuators = {{продовжувачі}{прод\adddot}},% FIXME: unsure
+ collaborator = {{учасник}{учас\adddot}},% FIXME: unsure
+ collaborators = {{учасники}{учас\adddot}},% FIXME: unsure
+ translator = {{перекладач}{пер\adddot}},
+ translators = {{перекладачі}{пер\adddot}},
+ commentator = {{коментатор}{комент\adddot}},
+ commentators = {{коментатори}{комент\adddot}},
+ annotator = {{примітки}{прим\adddot}},
+ annotators = {{примітки}{прим\adddot}},
+ commentary = {{коментар}{комент\adddot}},
+ annotations = {{примітки}{прим\adddot}},
+ introduction = {{вступна стаття}{вступ\adddotspace ст\adddot}},
+ foreword = {{передмова}{передм\adddot}},
+ afterword = {{післямова}{післям\adddot}},
+ editortr = {{редактор та перекладач}%
+ {ред\adddotspace та пер\adddot}},
+ editorstr = {{редактори та перекладачі}%
+ {ред\adddotspace та пер\adddot}},
+ editorco = {{редактор та коментатор}%
+ {ред\adddotspace та комент\adddot}},
+ editorsco = {{редактори та коментатори}%
+ {ред\adddotspace та комент\adddot}},
+ editoran = {{редактор та укладач приміток}%
+ {ред\adddotspace та укл\adddotspace прим\adddot}},
+ editorsan = {{редактори та укладачі приміток}%
+ {ред\adddotspace та укл\adddotspace прим\adddot}},
+ editorin = {{редактор та автор вступної статті}%
+ {ред\adddotspace та авт\adddotspace вступ\adddotspace ст\adddot}},
+ editorsin = {{редактори та автори вступної статті}%
+ {ред\adddotspace та авт\adddotspace вступ\adddotspace ст\adddot}},
+ editorfo = {{редактор та автор передмови}%
+ {ред\adddotspace та авт\adddotspace передм\adddot}},
+ editorsfo = {{редактори та автори передмови}%
+ {ред\adddotspace та авт\adddotspace передм\adddot}},
+ editoraf = {{редактор та автор післямови}%
+ {ред\adddotspace та авт\adddotspace післям\adddot}},
+ editorsaf = {{редактори та автори післямови}%
+ {ред\adddotspace та авт\adddotspace післям\adddot}},
+ editortrco = {{редактор, перекладач та автор коментарів}%
+ {ред.,\addabbrvspace пер\adddotspace та авт\adddotspace комент\adddot}},
+ editorstrco = {{редактори, перекладачі та автори коментарів}%
+ {ред.,\addabbrvspace пер\adddotspace та авт\adddotspace комент\adddot}},
+ editortran = {{редактор, перекладач та укладач приміток}%
+ {ред.,\addabbrvspace пер\adddotspace та укл\adddotspace прим\adddot}},
+ editorstran = {{редактори, перекладачі та укладачі приміток}%
+ {ред.,\addabbrvspace пер\adddotspace та укл\adddotspace прим\adddot}},
+ editortrin = {{редактор, перекладач та автор вступної статті}%
+ {ред.,\addabbrvspace пер\adddotspace та авт\adddotspace вступ\adddotspace ст\adddot}},
+ editorstrin = {{редактори, перекладачі та автори вступної статті}%
+ {ред.,\addabbrvspace пер\adddotspace та авт\adddotspace вступ\adddotspace ст\adddot}},
+ editortrfo = {{редактор, перекладач та автор передмови}%
+ {ред.,\addabbrvspace пер\adddotspace та авт\adddotspace передм\adddot}},
+ editorstrfo = {{редактори, перекладачі та автори передмови}%
+ {ред.,\addabbrvspace пер\adddotspace та авт\adddotspace передм\adddot}},
+ editortraf = {{редактор, перекладач та автор післямови}%
+ {ред.,\addabbrvspace пер\adddotspace та авт\adddotspace післямови\adddot}},
+ editorstraf = {{редактори, перекладачі та автори післямови}%
+ {ред.,\addabbrvspace пер\adddotspace та авт\adddotspace післям\adddot}},
+ editorcoin = {{редактор, автор коментарів та вступної статті}%
+ {ред.,\addabbrvspace авт\adddotspace комент\adddotspace та вступ\adddotspace ст\adddot}},
+ editorscoin = {{редактори, автори коментарів та вступної статті}%
+ {ред.,\addabbrvspace авт\adddotspace комент\adddotspace та вступ\adddotspace ст\adddot}},
+ editorcofo = {{редактор, автор коментарів та передмови}%
+ {ред.,\addabbrvspace авт\adddotspace комент\adddotspace та передм\adddot}},
+ editorscofo = {{редактори, автори коментарів та передмови}%
+ {ред.,\addabbrvspace авт\adddotspace комент\adddotspace та передм\adddot}},
+ editorcoaf = {{редактор, автор коментарів та післямови}%
+ {ред.,\addabbrvspace авт\adddotspace комент\adddotspace та післям\adddot}},
+ editorscoaf = {{редактори, автори коментарів та післямови}%
+ {ред.,\addabbrvspace авт\adddotspace комент\adddotspace та післям\adddot}},
+ editoranin = {{редактор, укладач приміток та автор вступної статті}%
+ {ред.,\addabbrvspace укл\adddotspace прим\adddotspace та авт\adddotspace вступ\adddotspace ст\adddot}},
+ editorsanin = {{редактори, укладачі приміток та автори вступної статті}%
+ {ред.,\addabbrvspace укл\adddotspace прим\adddotspace та авт\adddotspace вступ\adddotspace ст\adddot}},
+ editoranfo = {{редактор, укладач приміток та автор передмови}%
+ {ред.,\addabbrvspace укл\adddotspace прим\adddotspace та авт\adddotspace передм\adddot}},
+ editorsanfo = {{редактори, укладачі приміток та автори передмови}%
+ {ред.,\addabbrvspace укл\adddotspace прим\adddotspace та авт\adddotspace передм\adddot}},
+ editoranaf = {{редактор, укладач приміток та автор післямови}%
+ {ред.,\addabbrvspace укл\adddotspace прим\adddotspace та авт\adddotspace післям\adddot}},
+ editorsanaf = {{редактори, укладачі приміток та автори післямови}%
+ {ред.,\addabbrvspace укл\adddotspace прим\adddotspace та авт\adddotspace післям\adddot}},
+ editortrcoin = {{редактор, перекладач, автор коментарів та вступної статті}%
+ {ред.,\addabbrvspace пер.,\addabbrvspace авт\adddotspace комент\adddotspace та вступ\adddotspace ст\adddot}},
+ editorstrcoin = {{редактори, перекладачі, автори коментарів та вступної статті}%
+ {ред.,\addabbrvspace пер.,\addabbrvspace авт\adddotspace комент\adddotspace та вступ\adddotspace ст\adddot}},
+ editortrcofo = {{редактор, перекладач, автор коментарів та передмови}%
+ {ред.,\addabbrvspace пер.,\addabbrvspace авт\adddotspace комент\adddotspace та передм\adddot}},
+ editorstrcofo = {{редактори, перекладачі, автори коментарів та передмови}%
+ {ред.,\addabbrvspace пер.,\addabbrvspace авт\adddotspace комент\adddotspace та передм\adddot}},
+ editortrcoaf = {{редактор, перекладач, автор коментарів та післямови}%
+ {ред.,\addabbrvspace пер.,\addabbrvspace авт\adddotspace комент\adddotspace та післям\adddot}},
+ editorstrcoaf = {{редактори, перекладачі, автори коментарів та післямови}%
+ {ред.,\addabbrvspace пер.,\addabbrvspace авт\adddotspace комент\adddotspace та післям\adddot}},
+ editortranin = {{редактор, перекладач, укладач приміток та автор вступної статті}%
+ {ред.,\addabbrvspace пер.,\addabbrvspace укл\adddotspace прим\adddotspace та авт\adddotspace вступ\adddotspace ст\adddot}},
+ editorstranin = {{редактори, перекладачі, укладачі приміток та автори вступної статті}%
+ {ред.,\addabbrvspace пер.,\addabbrvspace укл\adddotspace прим\adddotspace та авт\adddotspace вступ\adddotspace ст\adddot}},
+ editortranfo = {{редактор, перекладач, укладач приміток та автор передмови}%
+ {ред.,\addabbrvspace пер.,\addabbrvspace укл\adddotspace прим\adddotspace та авт\adddotspace передм\adddot}},
+ editorstranfo = {{редактори, перекладачі, укладачі приміток та автори передмови}%
+ {ред.,\addabbrvspace пер.,\addabbrvspace укл\adddotspace прим\adddotspace та авт\adddotspace передм\adddot}},
+ editortranaf = {{редактор, перекладач, укладач приміток та автор післямови}%
+ {ред.,\addabbrvspace пер.,\addabbrvspace укл\adddotspace прим\adddotspace та авт\adddotspace післям\adddot}},
+ editorstranaf = {{редактори, перекладачі, укладачі приміток та автори післямови}%
+ {ред.,\addabbrvspace пер.,\addabbrvspace укл\adddotspace прим\adddotspace та авт\adddotspace післям\adddot}},
+ translatorco = {{перекладач та автор коментарів}%
+ {пер\adddotspace та авт\adddotspace комент\adddot}},
+ translatorsco = {{перекладачі та автор коментарів}%
+ {пер\adddotspace та авт\adddotspace комент\adddot}},
+ translatoran = {{перекладач та автор приміток}%
+ {пер\adddotspace та укл\adddotspace прим\adddot}},
+ translatorsan = {{перекладачі та укладачі приміток}%
+ {пер\adddotspace та уклад\adddotspace прим\adddot}},
+ translatorin = {{перекладач та автор вступної статті}%
+ {пер\adddotspace та авт\adddotspace вступ\adddotspace ст\adddot}},
+ translatorsin = {{перекладачі та автори вступної статті}%
+ {пер\adddotspace та авт\adddotspace вступ\adddotspace ст\adddot}},
+ translatorfo = {{перекладач та автор передмови}%
+ {пер\adddotspace та авт\adddotspace передм\adddot}},
+ translatorsfo = {{перекладачі та автори передмови}%
+ {пер\adddotspace та авт\adddotspace передм\adddot}},
+ translatoraf = {{перекладач та автор післямови}%
+ {пер\adddotspace та авт\adddotspace післям\adddot}},
+ translatorsaf = {{перекладачі та автори післямови}%
+ {пер\adddotspace та авт\adddotspace післям\adddot}},
+ translatorcoin = {{перекладач, автор коментарів та вступної статті}%
+ {пер.,\addabbrvspace авт\adddotspace комент\adddotspace та вступ\adddotspace ст\adddot}},
+ translatorscoin = {{перекладачі, автори коментарів та вступної статті}%
+ {пер.,\addabbrvspace авт\adddotspace комент\adddotspace та вступ\adddotspace ст\adddot}},
+ translatorcofo = {{перекладач, автор коментарів та передмови}%
+ {пер.,\addabbrvspace авт\adddotspace комент\adddotspace та передм\adddot}},
+ translatorscofo = {{перекладачі, автори коментарів та передмови}%
+ {пер.,\addabbrvspace авт\adddotspace комент\adddotspace та передм\adddot}},
+ translatorcoaf = {{перекладач, автор коментарів та післямови}%
+ {пер.,\addabbrvspace авт\adddotspace комент\adddotspace та післям\adddot}},
+ translatorscoaf = {{перекладачі, автори коментарів та післямови}%
+ {пер.,\addabbrvspace авт\adddotspace комент\adddotspace та післям\adddot}},
+ translatoranin = {{перекладач, автор коментарів та вступної статті}%
+ {пер.,\addabbrvspace авт\adddotspace комент\adddotspace та вступ\adddotspace ст\adddot}},
+ translatorsanin = {{перекладачі, автори коментарів та вступної статті}%
+ {пер.,\addabbrvspace авт\adddotspace комент\adddotspace та вступ\adddotspace ст\adddot}},
+ translatoranfo = {{перекладач, автор коментарів та передмови}%
+ {пер.,\addabbrvspace авт\adddotspace комент\adddotspace та передм\adddot}},
+ translatorsanfo = {{перекладачі, автори коментарів та передмови}%
+ {пер.,\addabbrvspace авт\adddotspace комент\adddotspace та передм\adddot}},
+ translatoranaf = {{перекладач, автор коментарів та післямови}%
+ {пер.,\addabbrvspace авт\adddotspace комент\adddotspace та післям\adddot}},
+ translatorsanaf = {{перекладачі, автори коментарів та післямови}%
+ {пер.,\addabbrvspace авт\adddotspace комент\adddotspace та післям\adddot}},
+ organizer = {{організатор}{орг\adddot}},
+ organizers = {{організатори}{орг\adddot}},
+ byorganizer = {{організатор}{орг\adddot}},% FIXME: unsure
+ byauthor = {{згідно автора}{згідн\adddot авт\adddot}},
+ byeditor = {{за редакцією}{за\addabbrvspace ред\adddot}},
+ bycompiler = {{укладач}{уклад\adddot}},
+ byredactor = {{за редакцією}{за\addabbrvspace ред\adddot}},
+ byreviser = {{виправлено}{випр\adddot}},
+ byreviewer = {{рецензія}{рец\adddot}},
+ byfounder = {{засновник}{засн\adddot}},% FIXME: unsure
+ bycontinuator = {{продовження}{продовж\adddot}},% FIXME: unsure
+ bycollaborator = {{за участю}{за\addabbrvspace уч\adddot}},
+ bytranslator = {{переклад \lbx@lfromlang}{пер\adddot\ \lbx@sfromlang}},
+ bycommentator = {{коментарі}{комент\adddot}},
+ byannotator = {{примітки}{прим\adddot}},
+ withcommentator = {{коментарі}{комент\adddot}},
+ withannotator = {{примітки}{прим\adddot}},
+ withintroduction = {{вступна стаття}{вступ\adddotspace ст\adddot}},
+ withforeword = {{передмовие}{передм\adddot}},
+ withafterword = {{післямовие}{післям\adddot}},
+ byeditortr = {{переклад \lbx@lfromlang, за редакцією}%
+ {пер\adddot\ \lbx@sfromlang, за\addabbrvspace ред\adddot}},
+ byeditorco = {{за редакцією, коментарі}%
+ {за ред.,\addabbrvspace комент\adddot}},
+ byeditoran = {{за редакцією, примітки}%
+ {за ред.,\addabbrvspace прим\adddot}},
+ byeditorin = {{за редакцією, вступна стаття}%
+ {за ред.,\addabbrvspace вступ\adddotspace ст\adddot}},
+ byeditorfo = {{за редакцією, передмова}%
+ {за ред.,\addabbrvspace передм\adddot}},
+ byeditoraf = {{за редакцією, післямова}%
+ {за ред.,\addabbrvspace післям\adddot}},
+ byeditortrco = {{за редакцією, переклад \lbx@lfromlang\ та коментарі}%
+ {за ред.,\addabbrvspace пер\adddot\ \lbx@sfromlang\ та комент\adddot}},
+ byeditortran = {{за редакцією, переклад \lbx@lfromlang\ та примітки}%
+ {за ред.,\addabbrvspace пер\adddot\ \lbx@sfromlang\ та прим\adddot}},
+ byeditortrin = {{за редакцією, переклад \lbx@lfromlang, вступна стаття}%
+ {за ред.,\addabbrvspace пер\adddot\ \lbx@sfromlang, вступ\adddotspace ст\adddot}},
+ byeditortrfo = {{за редакцією, переклад \lbx@lfromlang, передмовие}%
+ {за ред.,\addabbrvspace пер\adddot\ \lbx@sfromlang, передм\adddot}},
+ byeditortraf = {{за редакцією, переклад \lbx@lfromlang, післямова}%
+ {за ред\adddotspace та пер\adddot\ \lbx@sfromlang, післям\adddot}},
+ byeditorcoin = {{за редакцією, коментарі та вступна стаття}%
+ {за ред.,\addabbrvspace комент\adddotspace та вступ\adddotspace ст\adddot}},
+ byeditorcofo = {{за редакцією, коментарі та передмова}%
+ {за ред.,\addabbrvspace комент\adddotspace та передм\adddot}},
+ byeditorcoaf = {{за редакцією, коментарі та післямова}%
+ {за ред.,\addabbrvspace комент\adddotspace та післям\adddot}},
+ byeditoranin = {{за редакцією, примітки та вступна стаття}%
+ {за ред.,\addabbrvspace приміт\adddotspace та вступ\adddotspace ст\adddot}},
+ byeditoranfo = {{за редакцією, примітки та передмова}%
+ {за ред.,\addabbrvspace приміт\adddotspace та передм\adddot}},
+ byeditoranaf = {{за редакцією, примітки та післямова}%
+ {за ред.,\addabbrvspace приміт\adddotspace та післям\adddot}},
+ byeditortrcoin = {{за редакцією, переклад \lbx@lfromlang, коментарі та вступна стаття}%
+ {за ред.,\addabbrvspace пер\adddot\ \lbx@sfromlang, комент\adddotspace та вступ\adddotspace ст\adddot}},
+ byeditortrcofo = {{за редакцією, переклад \lbx@lfromlang, коментарі та передмова}%
+ {за ред.,\addabbrvspace пер\adddot\ \lbx@sfromlang, комент\adddotspace та передм\adddot}},
+ byeditortrcoaf = {{за редакцією, переклад \lbx@lfromlang, коментарі та післямова}%
+ {за ред.,\addabbrvspace пер\adddot\ \lbx@sfromlang, комент\adddotspace та післям\adddot}},
+ byeditortranin = {{за редакцією, переклад \lbx@lfromlang, примітки та вступна стаття}%
+ {за ред.,\addabbrvspace пер\adddot\ \lbx@sfromlang, прим\adddotspace та вступ\adddotspace ст\adddot}},
+ byeditortranfo = {{за редакцією, переклад \lbx@lfromlang, примітки та передмова}%
+ {за ред.,\addabbrvspace пер\adddot\ \lbx@sfromlang, прим\adddotspace та передм\adddot}},
+ byeditortranaf = {{за редакцією, переклад \lbx@lfromlang, примітки та післямова}%
+ {за ред.,\addabbrvspace пер\adddot\ \lbx@sfromlang, прим\adddotspace та післям\adddot}},
+ bytranslatorco = {{переклад \lbx@lfromlang\ та коментарі}%
+ {пер\adddot\ \lbx@sfromlang\ та комент\adddot}},
+ bytranslatoran = {{переклад \lbx@lfromlang\ та примітки}%
+ {пер\adddot\ \lbx@sfromlang\ та прим\adddot}},
+ bytranslatorin = {{переклад \lbx@lfromlang\ та вступна стаття}%
+ {пер\adddot\ \lbx@sfromlang\ та вступ\adddotspace ст\adddot}},
+ bytranslatorfo = {{переклад \lbx@lfromlang\ та передмова}%
+ {пер\adddot\ \lbx@sfromlang\ та передм\adddot}},
+ bytranslatoraf = {{переклад \lbx@lfromlang\ та післямова}%
+ {пер\adddot\ \lbx@sfromlang\ та післям\adddot}},
+ bytranslatorcoin = {{переклад \lbx@lfromlang, коментарі та вступна стаття}%
+ {пер\adddot\ \lbx@sfromlang, комент\adddotspace та вступ\adddotspace ст\adddot}},
+ bytranslatorcofo = {{переклад \lbx@lfromlang, коментарі та передмова}%
+ {пер\adddot\ \lbx@sfromlang, комент\adddotspace та передм\adddot}},
+ bytranslatorcoaf = {{переклад \lbx@lfromlang, коментарі та післямова}%
+ {пер\adddot\ \lbx@sfromlang, комент\adddotspace та післям\adddot}},
+ bytranslatoranin = {{переклад \lbx@lfromlang, примітки та вступна стаття}%
+ {пер\adddot\ \lbx@sfromlang, прим\adddotspace та вступ\adddotspace ст\adddot}},
+ bytranslatoranfo = {{переклад \lbx@lfromlang, примітки та передмова}%
+ {пер\adddot\ \lbx@sfromlang, прим\adddotspace та передм\adddot}},
+ bytranslatoranaf = {{переклад \lbx@lfromlang, примітки та післямова}%
+ {пер\adddot\ \lbx@sfromlang, прим\adddotspace та післям\adddot}},
+ and = {{та}{та}},
+ andothers = {{та\addabbrvspace ін\adddot}{та\addabbrvspace ін\adddot}},
+ andmore = {{та\addabbrvspace ін\adddot}{та\addabbrvspace ін\adddot}},
+ volume = {{том}{т\adddot}},
+ volumes = {{томах}{т\adddot}},
+ involumes = {{в}{в}},
+ jourvol = {{том}{т\adddot}},
+ jourser = {{серія}{сер\adddot}},
+ book = {{книга}{кн\adddot}},
+ part = {{частина}{ч\adddot}},
+ issue = {{випуск}{вип\adddot}},
+ newseries = {{нова серія}{нов\adddotspace сер\adddot}},
+ oldseries = {{стара серія}{стар\adddotspace сер\adddot}},
+ edition = {{видання}{вид\adddot}},
+ reprint = {{перевидання}{перевид\adddot}},
+ reprintof = {{перевидання}{перевид\adddot}},
+ reprintas = {{перевидано як}{перевид\adddotspace як}},
+ reprintfrom = {{перевидано з}{перевид\adddotspace з}},
+ translationof = {{переклад по виданню\addcolon}{пер\adddotspace по вид\adddot\addcolon}},
+ translationas = {{переклад\addcolon}{пер\adddot\addcolon}},
+ translationfrom = {{переклад з}{пер\adddotspace з}},
+ reviewof = {{рецензія на\addcolon}{рец\adddotspace на\addcolon}},% FIXME: unsure
+ origpubas = {{перша публикація\addcolon}%
+ {перш\adddotspace публ\adddot\addcolon}},
+ origpubin = {{перша публікация в}%
+ {перш\adddotspace публ\adddotspace в}},
+ astitle = {{\addcolon}{\addcolon}},% FIXME: unsure
+ bypublisher = {{\addcomma}{\addcomma}},% FIXME: unsure
+ nodate = {{б\adddot р\adddot}{б\adddot р\adddot}},
+ page = {{сторінка}{с\adddot}},
+ pages = {{сторінки}{с\adddot}},
+ column = {{колонка}{кол\adddot}},
+ columns = {{колонки}{кол\adddot}},
+ line = {{рядок}{рядок}},
+ lines = {{рядки}{рядки}},
+ verse = {{вірш}{вірш}},
+ verses = {{вірші}{вірші}},
+ section = {{параграф}{\S}},
+ sections = {{параграфи}{\S\S}},
+ paragraph = {{абзац}{абз\adddot}},
+ paragraphs = {{абзаци}{абз\adddot}},
+ pagetotal = {{сторінка}{с\adddot}},
+ pagetotals = {{сторінки}{с\adddot}},
+ columntotal = {{колонка}{кол\adddot}},
+ columntotals = {{колонки}{кол\adddot}},
+ linetotal = {{рядок}{рядок}},
+ linetotals = {{рядки}{рядки}},
+ versetotal = {{вірш}{вірш}},
+ versetotals = {{вірші}{вірші}},
+ sectiontotal = {{параграф}{\S}},
+ sectiontotals = {{параграфи}{\S\S}},
+ paragraphtotal = {{абзац}{абз\adddot}},
+ paragraphtotals = {{абзаци}{абз\adddot}},
+ in = {{в}{в}},
+ inseries = {{в}{в}},
+ ofseries = {{із}{із}},
+ number = {{номер}{№}},
+ chapter = {{глава}{гл\adddot}},
+% bathesis = {{}{}},% FIXME: missing
+ mathesis = {{дис\adddotspace\textellipsis\ маг\adddot}
+ {дис\adddotspace\textellipsis\ маг\adddot}},
+ phdthesis = {{дис\adddotspace\textellipsis\ док\adddot}
+ {дис\adddotspace\textellipsis\ док\adddot}},
+ candthesis = {{дис\adddotspace\textellipsis\ канд\adddot}
+ {дис\adddotspace\textellipsis\ канд\adddot}},
+ resreport = {{науковий звіт}{наук\adddotspace звіт\adddot}},
+ techreport = {{технічний звіт}{тех\adddotspace звіт\adddot}},
+ software = {{програмне забезпечення}{прогр\adddotspace забезп\adddot}},
+ datacd = {{CD-ROM}{CD-ROM}},
+ audiocd = {{audio CD}{audio CD}},
+ version = {{версія}{вер\adddot}},
+ url = {{url}{url}},
+ urlfrom = {{режим доступу}{режим доступу}},
+ urlseen = {{дата звернення}{дата\addabbrvspace зверн\adddot}},
+ inpreparation = {{в\addabbrvspace підготовці}{в підг\adddot}},
+ submitted = {{представлено}{предст\adddot}},
+ forthcoming = {{в друці}{в друц\adddot}},
+ inpress = {{в\addabbrvspace друці}{в друці\adddot}},
+ prepublished = {{попередня публікация}{попер\adddotspace пуб\adddot}},% FIXME: unsure
+ citedas = {{далі цитується як}{далі цит\addabbrvspace як}},
+ thiscite = {{тут}{тут}},
+ seenote = {{дивись зноску}{див\adddotspace зн\adddot}},
+ quotedin = {{цитується за}{цит\adddotspace за}},
+ idem = {{він\addabbrvspace же}{він\addabbrvspace же}},
+ idemsm = {{він\addabbrvspace же}{він\addabbrvspace же}},
+ idemsf = {{вона\addabbrvspace же}{вона\addabbrvspace же}},
+ idemsn = {{він\addabbrvspace же}{він\addabbrvspace же}},
+ idempm = {{вони\addabbrvspace ж}{вони\addabbrvspace ж}},
+ idempf = {{вони\addabbrvspace ж}{вони\addabbrvspace ж}},
+ idempn = {{вони\addabbrvspace ж}{вони\addabbrvspace ж}},
+ idempp = {{вони\addabbrvspace ж}{вони\addabbrvspace ж}},
+ ibidem = {{там\addabbrvspace же}{там\addabbrvspace же}},
+ opcit = {{вказ\adddotspace твор\adddot}{вказ\adddotspace твор\adddot}},
+ loccit = {{вказ\adddotspace місце}{вказ\adddotspace місце}},
+ confer = {{порівняй}{порівн\adddot}},
+ sequens = {{та наступна}{та\addabbrvspace наст\adddot}},
+ sequentes = {{та наступні}{и\addabbrvspace наст\adddot}},
+ passim = {{всюди}{всюди}},
+ see = {{дивись}{див\adddot}},
+ seealso = {{дивись також}{див\adddotspace також}},
+ backrefpage = {{цитується на сторінці}{цит\adddotspace на\addabbrvspace с\adddot}},
+ backrefpages = {{цитується на сторінках}{цит\adddotspace на\addabbrvspace с\adddot}},
+ january = {{січень}{січ\adddot}},
+ february = {{лютий}{лют\adddot}},
+ march = {{березень}{бер\adddot}},
+ april = {{квітень}{квіт\adddot}},
+ may = {{травень}{трав\adddot}},
+ june = {{червень}{черв\adddot}},
+ july = {{липень}{лип\adddot}},
+ august = {{серпень}{серп\adddot}},
+ september = {{вересень}{вер\adddot}},
+ october = {{жовтень}{жовт\adddot}},
+ november = {{листопад}{листоп\adddot}},
+ december = {{грудень}{груд\adddot}},
+ datejanuary = {{січня}{січ\adddot}},
+ datefebruary = {{лютого}{лют\adddot}},
+ datemarch = {{березня}{бер\adddot}},
+ dateapril = {{квітня}{квіт\adddot}},
+ datemay = {{травня}{трав\adddot}},
+ datejune = {{червня}{черв\adddot}},
+ datejuly = {{липня}{лип\adddot}},
+ dateaugust = {{серпня}{серп\adddot}},
+ dateseptember = {{вересня}{вер\adddot}},
+ dateoctober = {{жовтня}{жовт\adddot}},
+ datenovember = {{листопда}{листоп\adddot}},
+ datedecember = {{грудня}{груд\adddot}},
+ langamerican = {{американський}{амер\adddot}},
+ langbrazilian = {{бразильський}{браз\adddot}},
+ langbulgarian = {{болгарська}{болг\adddot}},
+ langcatalan = {{каталонська}{катал\adddot}},
+ langcroatian = {{хорватська}{хорв\adddot}},
+ langczech = {{чеська}{чеськ\adddot}},
+ langdanish = {{датська}{дат\adddot}},
+ langdutch = {{нідерландська}{нід\adddot}},
+ langenglish = {{англійська}{англ\adddot}},
+ langestonian = {{естонська}{ест\adddot}},
+ langfinnish = {{фінська}{фін\adddot}},
+ langfrench = {{французька}{фр\adddot}},
+ langgalician = {{галісійський}{гал\adddot}},
+ langgerman = {{німецька}{нім\adddot}},
+ langgreek = {{грецька}{грець\adddot}},
+ langhungarian = {{угорська}{угор\adddot}},
+ langitalian = {{італійська}{італ\adddot}},
+ langjapanese = {{японська}{яп\adddot}},
+ langlatin = {{латинська}{лат\adddot}},
+% langlatvian = {{}{}},% FIXME: missing
+ langnorwegian = {{норвезька}{норв\adddot}},
+ langpolish = {{польська}{пол\adddot}},
+ langportuguese = {{португальська}{порт\adddot}},
+ langrussian = {{російська}{рос\adddot}},
+% langslovak = {{}{}},% FIXME: missing
+ langslovene = {{словенська}{слов\adddot}},
+ langspanish = {{іспанська}{ісп\adddot}},
+ langswedish = {{шведська}{швед\adddot}},
+ langukrainian = {{українська}{укр\adddot}},
+ fromamerican = {{з американської}{з\addabbrvspace амер\adddot}},
+ frombrazilian = {{з бразильської}{з\addabbrvspace браз\adddot}},
+ frombulgarian = {{з болгарскої}{з\addabbrvspace болг\adddot}},
+ fromcatalan = {{з каталонської}{з\addabbrvspace катал\adddot}},
+ fromcroatian = {{з хорватської}{з\addabbrvspace хорв\adddot}},
+ fromczech = {{з чеської}{з\addabbrvspace чеськ\adddot}},
+ fromdanish = {{з датської}{з\addabbrvspace дат\adddot}},
+ fromdutch = {{з нідерландської}{з\addabbrvspace нід\adddot}},
+ fromenglish = {{з англійскої}{з\addabbrvspace англ\adddot}},
+ fromestonian = {{з естонської}{з\addabbrvspace ест\adddot}},
+ fromfinnish = {{з фінської}{з\addabbrvspace фін\adddot}},
+ fromfrench = {{з французької}{з\addabbrvspace фр\adddot}},
+ fromgalician = {{з галісійської}{з\addabbrvspace гал\adddot}},
+ fromgerman = {{з німецької}{з\addabbrvspace нім\adddot}},
+ fromgreek = {{з грецької}{з\addabbrvspace грец\adddot}},
+ fromhungarian = {{з угорської}{з\addabbrvspace угор\adddot}},
+ fromitalian = {{з італійської}{з\addabbrvspace італ\adddot}},
+ fromjapanese = {{з японської}{з\addabbrvspace яп\adddot}},
+ fromlatin = {{з латинської}{з\addabbrvspace лат\adddot}},
+% fromlatvian = {{}{}},% FIXME: missing
+ fromnorwegian = {{з норвезької}{з\addabbrvspace норв\adddot}},
+ frompolish = {{з польської}{з\addabbrvspace пол\adddot}},
+ fromportuguese = {{з португальської}{з\addabbrvspace порт\adddot}},
+ fromrussian = {{з російської}{з\addabbrvspace рос\adddot}},
+% fromslovak = {{}{}},% FIXME: missing
+ fromslovene = {{зі словенської}{зі\addabbrvspace слов\adddot}},
+ fromspanish = {{з іспанської}{з\addabbrvspace ісп\adddot}},
+ fromswedish = {{з шведської}{з\addabbrvspace швед\adddot}},
+ fromukrainian = {{з української}{з\addabbrvspace укр\adddot}},
+ countryde = {{Німеччина}{Німеччина}},
+ countryeu = {{Європейський Союз}{ЄС}},
+ countryep = {{Європейський Союз}{ЄС}},
+ countryfr = {{Франція}{Франція}},
+ countryuk = {{Великобританія}{Великобританія}},
+ countryus = {{Сполучені Штати Америки}{США}},
+ patent = {{патент}{пат\adddot}},
+ patentde = {{патент Німеччини}{пат\adddotspace Німеччини}},
+ patenteu = {{патент Європи}{пат\adddotspace Європи}},
+ patentfr = {{патент Франції}{пат\adddotspace Франції}},
+ patentuk = {{патент Великобританії}{пат\adddotspace Великобританії}},
+ patentus = {{патент США}{пат\adddotspace США}},
+ patreq = {{заявка}{заявка}},
+ patreqde = {{заявка на патент Німеччини}{заявка на пат\adddotspace Німеччини}},
+ patreqeu = {{заявка на патент Європи}{заявка на пат\adddotspace Європи}},
+ patreqfr = {{заявка на патент Франції}{заявка на пат\adddotspace Франції}},
+ patrequk = {{заявка на патент Великобританії}{заявка на пат\adddotspace Великобританії}},
+ patrequs = {{заявка на патент США}{заявка на пат\adddotspace США}},
+ file = {{файл}{файл}},
+ library = {{бібліотека}{б-ка}},
+ abstract = {{резюме}{рез\adddot}},
+ annotation = {{анотація}{анот\adddot}},
+ commonera = {{нашої ери}{н\adddotspace е\adddot}},
+ beforecommonera = {{до нашої ери}{до н\adddotspace е\adddot}},
+ annodomini = {{від Різдва Христового}{від Р\adddotspace Х\adddot}},
+ beforechrist = {{до Різдва Христового}{до Р\adddotspace Х\adddot}},
+ circa = {{близько}{бл\adddot}},
+ spring = {{весна}{весна}},
+ summer = {{літо}{літо}},
+ autumn = {{осінь}{осінь}},
+ winter = {{зима}{зима}},
+% springN = {{}{}},% FIXME: missing
+% summerN = {{}{}},% FIXME: missing
+% autumnN = {{}{}},% FIXME: missing
+% winterN = {{}{}},% FIXME: missing
+% springS = {{}{}},% FIXME: missing
+% summerS = {{}{}},% FIXME: missing
+% autumnS = {{}{}},% FIXME: missing
+% winterS = {{}{}},% FIXME: missing
+% Q1 = {{}{}},% FIXME: missing
+% Q2 = {{}{}},% FIXME: missing
+% Q3 = {{}{}},% FIXME: missing
+% Q4 = {{}{}},% FIXME: missing
+% QD1 = {{}{}},% FIXME: missing
+% QD2 = {{}{}},% FIXME: missing
+% QD3 = {{}{}},% FIXME: missing
+% S1 = {{}{}},% FIXME: missing
+% S2 = {{}{}},% FIXME: missing
+ am = {{ДП}{ДП}},
+ pm = {{ПП}{ПП}},
+}
+
+\protected\gdef\lbx@ru@mkbibdatemonth#1{%
+ \ifcase0#1\relax
+ #1\BibliographyWarning{Month out of range}%
+ \or\abx@bibmonth{datejanuary}%
+ \or\abx@bibmonth{datefebruary}%
+ \or\abx@bibmonth{datemarch}%
+ \or\abx@bibmonth{dateapril}%
+ \or\abx@bibmonth{datemay}%
+ \or\abx@bibmonth{datejune}%
+ \or\abx@bibmonth{datejuly}%
+ \or\abx@bibmonth{dateaugust}%
+ \or\abx@bibmonth{dateseptember}%
+ \or\abx@bibmonth{dateoctober}%
+ \or\abx@bibmonth{datenovember}%
+ \or\abx@bibmonth{datedecember}%
+ \else
+ #1\BibliographyWarning{Month out of range}%
+ \fi}%
+
+\endinput
diff --git a/macros/latex/contrib/hereapplies/ChangeLog.md b/macros/latex/contrib/hereapplies/ChangeLog.md
index 6843095f9b..814e1b431d 100644
--- a/macros/latex/contrib/hereapplies/ChangeLog.md
+++ b/macros/latex/contrib/hereapplies/ChangeLog.md
@@ -2,6 +2,20 @@ Change Log
==========
+## 0.6.0 (2022-08-23)
+
+Changes:
+
+* The `\whereapplies` macro now prints "and", instead of a comma, before the
+ last page
+* All translatable strings have been isolated into the four adjustable macros
+ `\hapage`, `\hapages`, `\hadelimiter` and `\halastdelimiter`
+* Code review (the `\hereapplies` macro now invokes `\detokenize` before
+ checking whether the optional argument was passed)
+* The LyX module has been updated
+* Documentation
+
+
## 0.5.0 (2022-08-19)
Changes:
diff --git a/macros/latex/contrib/hereapplies/README.md b/macros/latex/contrib/hereapplies/README.md
index 17ed9033cb..b03b599989 100644
--- a/macros/latex/contrib/hereapplies/README.md
+++ b/macros/latex/contrib/hereapplies/README.md
@@ -1,38 +1,29 @@
Here Applies
============
-A LaTeX package for cross-linking concepts to their applications
+A LaTeX package for referencing groups of pages that share something in common
Overview
--------
-**Here Applies** is a LaTeX package that implements an _informal glossary_ for
-cross-linking concepts to their applications. Its core mechanism is identical
-to that of a conventional glossary – i.e. some concepts are marked as
-“important” and indicized every time they appear in the document – but it does
-not produce any nomenclature section, nor relies on the conventions that
-normally take part in a glossary.
-
-Besides an indicization mechanism, in fact, a proper glossary should normally
-be able to produce a dedicated section – usually at the end of the document –
-where the terms are collected in alphabetical order, their definitions are
-shown, and the lists of their occurrences are presented. All these things but
-the last one, by design, are missing in **Here Applies**.
-
-Instead, the package offers only two macros: `\hereapplies` and `\whereapplies`
-(plus their “starred” versions `\hereapplies*` and `\whereapplies*`). In both
-cases a “concept identifier” is passed as argument – and this can be any string
-invented in the moment, as long as it contains only letters (`\hereapplies`
-additionally supports more than one identifier in the form of a comma-separated
-list).
-
-Every time `\hereapplies` is invoked again on identical identifiers, the
-document is made aware that the same concepts from previous invocations are
-occurring in that point. And so, every time the `\whereapplies` macro is
-invoked on a known identifier, all the occurrences of the latter within the
-entire document will be printed in the form of a linkable page list (e.g. “pp.
-1, 5, 8–9, 14–20…”).
+**Here Applies** is a LaTeX package that allows to create groups of labels and
+reference them altogether. It can be used for creating informal glossaries that
+cross-link concepts to their applications, or simply mentioning multiple pages
+that share something in common.
+
+The package offers two macros: `\hereapplies` and `\whereapplies` (plus their
+“starred” versions `\hereapplies*` and `\whereapplies*`). In both cases an
+identifier is passed as argument – and this can be any string invented in the
+moment, as long as it contains only letters (`\hereapplies` additionally
+supports more than one identifier in the form of a comma-separated list).
+
+Every time `\hereapplies` is invoked with known identifiers, the document is
+made aware that the place shares some kind of connection with other places in
+which the same identifiers were used. And so, every time the `\whereapplies`
+macro is invoked with a known identifier, all the occurrences of the latter
+within the entire document will be printed in the form of a linkable page list
+(e.g. “pp. 1, 5, 8–9, 14–20…”).
As `\hereapplies` is designed to be invoked in the middle of a chapter or a
section, and that location must be made linkable, the `\phantomsection` macro
@@ -98,17 +89,17 @@ A minimal tutorial
### Macro `\hereapplies[label]{identifiers}`
-The `\hereapplies` macro notifies the document that one or more concepts apply
-to a particular point and adds a label to it.
+The `\hereapplies` macro notifies the document that one or more identifiers
+apply to a particular point and adds a label to it.
If the optional argument is passed the label created will be named accordingly,
otherwise an opaque name will be assigned to it. This argument may contain only
what is legal for `\pageref`.
The `identifiers` argument must be a comma-separated list of identifiers. Each
-of these may contain only Latin letters and the "at" sign (`@`). These strings
-remain confined within the internal scope of the package and do not create
-conflicts with possible macros or labels of the same names.
+of these may contain only Latin letters and the "at" sign (`/^[A-Za-z@]+$/`).
+These strings will remain confined within the internal scope of the package and
+will not create conflicts with possible macros or labels of the same names.
The “starred” version of this macro (`\hereapplies*`) will not invoke the
`\phantomsection` directive.
@@ -120,8 +111,9 @@ The `\whereapplies` macro prints all the occurrences of an identifier, in the
form “p. …” or “pp. …” (with page range support).
The `identifier` argument may contain only Latin letters and the "at" sign
-(`@`). This string remains confined within the internal scope of the package
-and does not create conflicts with possible macros or labels of the same name.
+(`/^[A-Za-z@]+$/`). This string will remain confined within the internal scope
+of the package and will not create conflicts with possible macros or labels of
+the same name.
If the same `identifier` is not passed to `\hereapplies` at least once
throughout the document, `\whereapplies` will print “**??**”.
@@ -130,6 +122,30 @@ The “starred” version of this macro (`\whereapplies*`) will use `\pageref*`
instead of `\pageref` for generating the page list.
+Internationalization
+--------------------
+
+Currently the localization of **Here Applies** is not automatic. It is possible
+however to control the strings generated by overwriting the four macros
+`\hapage`, `\hapages`, `\hadelimiter` and `\halastdelimiter`.
+
+For example, writing at the beginning of a document
+
+``` tex
+% German translation of **Here Applies**
+% English: `p.\ `
+\gdef\hapage{S.\ }
+% English: `pp.\ `
+\gdef\hapages{S.\ }
+% English: `\ and\ `
+\gdef\halastdelimiter{\ und\ }
+% English: `,\ ` (exactly like in German -- leave it)
+% \gdef\hadelimiter{,\ }
+```
+
+will translate “pp. 2, 4 and 6” into “S. 2, 4 und 6”.
+
+
Get involved
------------
diff --git a/macros/latex/contrib/hereapplies/hereapplies-example.pdf b/macros/latex/contrib/hereapplies/hereapplies-example.pdf
index de4ecf6812..ae7b2fc2af 100644
--- a/macros/latex/contrib/hereapplies/hereapplies-example.pdf
+++ b/macros/latex/contrib/hereapplies/hereapplies-example.pdf
Binary files differ
diff --git a/macros/latex/contrib/hereapplies/hereapplies.sty b/macros/latex/contrib/hereapplies/hereapplies.sty
index 3ac0462fef..61ee402956 100644
--- a/macros/latex/contrib/hereapplies/hereapplies.sty
+++ b/macros/latex/contrib/hereapplies/hereapplies.sty
@@ -3,11 +3,12 @@
%
% hereapplies.sty
%
-% A LaTeX package for cross-linking concepts to their applications
+% A LaTeX package for referencing groups of pages that share something in
+% common
%
% https://github.com/madmurphy/hereapplies.sty
%
-% Version 0.5.0
+% Version 0.6.0
%
% Copyright (C) 2022 madmurphy <madmurphy333@gmail.com>
%
@@ -65,12 +66,27 @@
% \end{document}
%
%
-\ProvidesPackage{hereapplies}
+\ProvidesPackage{hereapplies}[2022/08/23 Here Applies]
\RequirePackage{hyperref}
\RequirePackage{refcount}
%
%
%
+% TRANSLATABLE STRINGS
+% ====================
+%
+%
+% The abbreviation of one single page
+\providecommand{\hapage}{p.\ }
+% The abbreviation of two or more pages
+\providecommand{\hapages}{pp.\ }
+% The delimiter between page numbers
+\providecommand{\hadelimiter}{,\ }
+% The delimiter before the last page number
+\providecommand{\halastdelimiter}{\ and\ }
+%
+%
+%
% PRIVATE ENVIRONMENT
% ===================
%
@@ -84,12 +100,12 @@
% Macro `\@ha@makeoccurrencelist{hypermacro}{labels}`
% *****************************************************************************
%
-% Generate the list of page numbers with page range support
+% Generate the list of page numbers (with page range support)
%
-% This macro is for internal purposes only. When invoked, it scans the
-% comma-separated list of labels provided (`labels`) and checks which labels
-% refer to duplicate page numbers and which page numbers can be grouped
-% together.
+% This macro is for internal purposes. When invoked, it scans the
+% comma-separated list of labels provided (`labels`), checks which labels refer
+% to duplicate page numbers and which page numbers can be grouped together, and
+% finally prints a list.
%
% The `hypermacro` argument is the macro from the `hyperref` package that will
% process the label name. This should be either `T@pageref` -- equivalent to
@@ -102,6 +118,10 @@
\def\@ha@tmp@@currp{-1}%
% Reset the current range offset
\def\@ha@tmp@@prangeoffs{-1}%
+ % Ensure no comma before the first page number
+ \def\@ha@tmp@@psep{}%
+ % Ensure no text before the last page number if it is also the first one
+ \def\@ha@tmp@@lastpsep{}%
% Iterate through the `labels` argument
\@for\@ha@tmp@@thislabel:=#2\do{%
% Store the page number associated with this label
@@ -128,16 +148,22 @@
% Was the previous page part of a contiguous range?
\ifnum\@ha@tmp@@prangeoffs=-1%
% The previous page was a standalone page
- % Print "[p], "
- {\csname #1\endcsname{\@ha@tmp@@currlbl}, }%
+ % Print "[, ]<p>"
+ {\@ha@tmp@@psep\csname
+ #1\endcsname{\@ha@tmp@@currlbl}}%
\else%
% The previous page was part of a contiguous range
- % Print "[p--q], "
- {\csname #1\endcsname{\@ha@tmp@@currrangelbl}--\csname
- #1\endcsname{\@ha@tmp@@currlbl}, }%
+ % Print "[, ]<p--q>"
+ {\@ha@tmp@@psep\csname
+ #1\endcsname{\@ha@tmp@@currrangelbl}--\csname
+ #1\endcsname{\@ha@tmp@@currlbl}}%
% Reset the current range offset
\def\@ha@tmp@@prangeoffs{-1}%
\fi%
+ % Ensure a comma before the next page number
+ \let\@ha@tmp@@psep\hadelimiter%
+ % Ensure " and " before the last page number
+ \let\@ha@tmp@@lastpsep\halastdelimiter%
\fi%
\fi%
% Prepare the next page number
@@ -153,12 +179,13 @@
% Was the previous page part of a contiguous range?
\ifnum\@ha@tmp@@prangeoffs=-1%
% The previous page was a standalone page
- % Print "[p], "
- {\csname #1\endcsname{\@ha@tmp@@currlbl}}%
+ % Print "[ and ]<p>"
+ {\@ha@tmp@@lastpsep\csname #1\endcsname{\@ha@tmp@@currlbl}}%
\else%
% The previous page was part of a contiguous range
- % Print "[p--q], "
- {\csname #1\endcsname{\@ha@tmp@@currrangelbl}--\csname
+ % Print "[ and ]<p--q>"
+ {\@ha@tmp@@lastpsep\csname
+ #1\endcsname{\@ha@tmp@@currrangelbl}--\csname
#1\endcsname{\@ha@tmp@@currlbl}}%
\fi%
\fi%
@@ -176,9 +203,9 @@
% op.
%
% The `identifier` argument may contain only Latin letters and the "at" sign
-% (`@`). This string remains confined within the internal scope of the package
-% and does not create conflicts with possible macros or labels of the same
-% name.
+% (`/^[A-Za-z@]+$/`). This string remains confined within the internal scope of
+% the package and does not create conflicts with possible macros or labels of
+% the same name.
%
\newcommand{\@ha@newidentifier}[1]{%
% Was this identifier already initialized?
@@ -189,7 +216,7 @@
% Set the starred output to "??" - it will be updated by the .haN file
\expandafter\gdef\csname @ha@prop@@soutput@#1\endcsname{\textbf{??}}%
% Use "p." for the preamble when there is only one occurrence
- \expandafter\gdef\csname @ha@prop@@preamble@#1\endcsname{p.~}%
+ \global\expandafter\let\csname @ha@prop@@preamble@#1\endcsname\hapage%
% Increase the counter of identifiers
\stepcounter{@ha@identifier@counter}%
% Store the current value of the counter of identifiers
@@ -245,9 +272,9 @@
% `soutput`, `uoutput`.
%
% The `identifier` argument may contain only Latin letters and the "at" sign
-% (`@`). This string remains confined within the internal scope of the package
-% and does not create conflicts with possible macros or labels of the same
-% name.
+% (`/^[A-Za-z@]+$/`). This string remains confined within the internal scope of
+% the package and does not create conflicts with possible macros or labels of
+% the same name.
%
\newcommand{\@ha@getpropat}[2]{%
% Make sure that the identifier is initialized
@@ -274,14 +301,16 @@
{\edef\tmp{\noexpand\@ha@newidentifier{\@ha@tmp@@id}}\tmp}%
% Is this the first time this identifier is mentioned?
\ifcsname @ha@prop@@labels@\@ha@tmp@@id\endcsname%
- % This is *not* the first time
+ % This is *not* the first time this identifier is mentioned
+ % Add this label to the list
\expandafter\g@addto@macro\csname
@ha@prop@@labels@\@ha@tmp@@id\endcsname{,#1}%
% Use "pp." for the preamble when there are multiple occurrences
- \expandafter\gdef\csname
- @ha@prop@@preamble@\@ha@tmp@@id\endcsname{pp.~}%
+ \global\expandafter\let\csname
+ @ha@prop@@preamble@\@ha@tmp@@id\endcsname\hapages%
\else%
- % This is the first time
+ % This is the first time this identifier is mentioned
+ % Set up the list with this label as value
\expandafter\gdef\csname
@ha@prop@@labels@\@ha@tmp@@id\endcsname{#1}%
\fi%
@@ -299,7 +328,7 @@
%
\newcommand{\starred@hereapplies}[2][]{%
% Check whether the macro has been called with one or two arguments
- \ifx&#1&%
+ \if\relax\detokenize{#1}\relax%
% The macro has been called with only one argument
% Assign a unique number to the unnamed occurrence
\stepcounter{@ha@unlabeled@counter}%
@@ -309,6 +338,7 @@
}\tmp}%
\else%
% The macro has been called with two arguments
+ % Call `\starred@labeled@hereapplies` with the same arguments
\starred@labeled@hereapplies{#1}{#2}%
\fi%
}
@@ -331,8 +361,8 @@
%
% The `identifiers` argument must be a comma-separated list of identifiers.
% Each of these may contain only Latin letters and the "at" sign (`@`). These
-% strings remain confined within the internal scope of the package and do not
-% create conflicts with possible macros or labels of the same names.
+% strings will remain confined within the internal scope of the package and
+% will not create conflicts with possible macros or labels of the same names.
%
% The starred version of this macro (`\hereapplies*`) does not invoke the
% `\phantomsection` directive.
@@ -350,8 +380,8 @@
% with page range support
%
% The `identifier` argument may contain only Latin letters and the "at"
-% sign (`@`). This string remains confined within the internal scope of the
-% package and does not create conflicts with possible macros or labels of the
+% sign (`@`). This string will remain confined within the internal scope of the
+% package and will not create conflicts with possible macros or labels of the
% same name.
%
% If the same `identifier` is not passed to `\hereapplies` at least once
@@ -363,5 +393,5 @@
\newcommand{\whereapplies}{%
% Check if a star is present in the invocation of the command
\@ifstar{\@ha@getpropat{soutput}}{\@ha@getpropat{uoutput}}%
-}
+}%
diff --git a/macros/latex/contrib/hereapplies/lyx-module/hereapplies.module b/macros/latex/contrib/hereapplies/lyx-module/hereapplies.module
index 4873af0a0d..573b49c797 100644
--- a/macros/latex/contrib/hereapplies/lyx-module/hereapplies.module
+++ b/macros/latex/contrib/hereapplies/lyx-module/hereapplies.module
@@ -1,6 +1,6 @@
#\DeclareLyXModule[hereapplies.sty]{Here Applies}
#DescriptionBegin
-#A module for cross-linking concepts to their applications.
+#A module for for referencing groups of pages that share something in common.
#See the hereapplies.sty LaTeX package for more information.
#DescriptionEnd
#Authors: madmurphy
@@ -15,32 +15,37 @@ InsetLayout Flex:Here_applies
LyXType custom
Decoration Classic
Font
- Family Typewriter
- Color black
- Size Small
+ Family Typewriter
+ Color black
+ Size Small
EndFont
LabelFont
- Family Serif
- Color teal
- Size Small
+ Family Serif
+ Color teal
+ Size Small
EndFont
- LabelString "Here applies"
- LatexType command
- LatexName hereapplies
- Requires hereapplies
- ForcePlain 1
- MultiPar 0
- NoInsetLayout 1
- BgColor lightgray
+ LabelString "Here applies"
+ LatexType command
+ LatexName hereapplies
+ Requires hereapplies
+ NoInsetLayout true
+ MultiPar false
+ CustomPars false
+ ForcePlain true
+ PassThru true
+ ParbreakIsNewline true
+ FreeSpacing false
+ ForceLTR true
+ BgColor lightgray
Argument 1
- Decoration Classic
+ Decoration Classic
Font
- Color blue
+ Color blue
EndFont
- LabelString "Label"
- MenuString "Instance label"
- Tooltip "A string that will become the label for this point of the document (which can be referenced with \ref, \pageref, etc.)"
- Mandatory 0
+ LabelString "Label"
+ MenuString "Name of the label"
+ Tooltip "A string that will become the label for this point of the document (which can be referenced with \ref, \pageref, etc.)"
+ Mandatory 0
EndArgument
End
@@ -48,78 +53,93 @@ InsetLayout Flex:Here_applies*
LyXType custom
Decoration Classic
Font
- Family Typewriter
- Color black
- Size Small
+ Family Typewriter
+ Color black
+ Size Small
EndFont
LabelFont
- Family Serif
- Color teal
- Size Small
+ Family Serif
+ Color teal
+ Size Small
EndFont
- LabelString "Here applies*"
- LatexType command
- LatexName hereapplies*
- Requires hereapplies
- ForcePlain 1
- MultiPar 0
- NoInsetLayout 1
- BgColor lightgray
+ LabelString "Here applies*"
+ LatexType command
+ LatexName hereapplies*
+ Requires hereapplies
+ NoInsetLayout true
+ MultiPar false
+ CustomPars false
+ ForcePlain true
+ PassThru true
+ ParbreakIsNewline true
+ FreeSpacing false
+ ForceLTR true
+ BgColor lightgray
Argument 1
- Decoration Classic
+ Decoration Classic
Font
- Color blue
+ Color blue
EndFont
- LabelString "Label"
- MenuString "Instance label"
- Tooltip "A string that will become the label for this point of the document (which can be referenced with \ref, \pageref, etc.)"
- Mandatory 0
+ LabelString "Label"
+ MenuString "Name of the label"
+ Tooltip "A string that will become the label for this point of the document (which can be referenced with \ref, \pageref, etc.)"
+ Mandatory 0
EndArgument
End
InsetLayout Flex:Where_applies
- LyXType custom
- Decoration Classic
+ LyXType custom
+ Decoration Classic
Font
- Family Typewriter
- Color black
- Size Small
+ Family Typewriter
+ Color black
+ Size Small
EndFont
LabelFont
- Family Serif
- Color purple
- Size Small
+ Family Serif
+ Color purple
+ Size Small
EndFont
- LabelString "Applications of"
- LatexType command
- LatexName whereapplies
- Requires hereapplies
- ForcePlain 1
- MultiPar 0
- NoInsetLayout 1
- BgColor lightgray
+ LabelString "Applications of"
+ LatexType command
+ LatexName whereapplies
+ Requires hereapplies
+ NoInsetLayout true
+ MultiPar false
+ CustomPars false
+ ForcePlain true
+ PassThru true
+ ParbreakIsNewline true
+ FreeSpacing false
+ ForceLTR true
+ BgColor lightgray
End
InsetLayout Flex:Where_applies*
- LyXType custom
- Decoration Classic
+ LyXType custom
+ Decoration Classic
Font
- Family Typewriter
- Color black
- Size Small
+ Family Typewriter
+ Color black
+ Size Small
EndFont
LabelFont
- Family Serif
- Color purple
- Size Small
+ Family Serif
+ Color purple
+ Size Small
EndFont
- LabelString "Applications of*"
- LatexType command
- LatexName whereapplies*
- Requires hereapplies
- ForcePlain 1
- MultiPar 0
- NoInsetLayout 1
- BgColor lightgray
+ LabelString "Applications of*"
+ LatexType command
+ LatexName whereapplies*
+ Requires hereapplies
+ NoInsetLayout true
+ MultiPar false
+ CustomPars false
+ ForcePlain true
+ PassThru true
+ ParbreakIsNewline true
+ FreeSpacing false
+ ForceLTR true
+ BgColor lightgray
End
diff --git a/macros/latex/contrib/hereapplies/package.json b/macros/latex/contrib/hereapplies/package.json
index ce6edcbd99..300cd53071 100644
--- a/macros/latex/contrib/hereapplies/package.json
+++ b/macros/latex/contrib/hereapplies/package.json
@@ -1,7 +1,7 @@
{
"name": "hereapplies.sty",
- "version": "0.5.0",
- "description": "A LaTeX package for cross-linking concepts to their applications",
+ "version": "0.6.0",
+ "description": "A LaTeX package for referencing groups of pages that share something in common",
"homepage": "https://madmurphy.github.io/hereapplies.sty",
"author": "madmurphy",
"license": "AGPL-3.0-or-later",
diff --git a/macros/latex/contrib/l3backend/CHANGELOG.md b/macros/latex/contrib/l3backend/CHANGELOG.md
index 3c8cb7d6d2..8bf6a93866 100644
--- a/macros/latex/contrib/l3backend/CHANGELOG.md
+++ b/macros/latex/contrib/l3backend/CHANGELOG.md
@@ -6,6 +6,11 @@ this project uses date-based 'snapshot' version identifiers.
## [Unreleased]
+## [2022-08-23]
+
+### Changed
+- Approach to setting current color data from LaTeX2e
+
## [2022-08-05]
### Changed
@@ -257,7 +262,8 @@ this project uses date-based 'snapshot' version identifiers.
- Include `l3backend` in file names
- Moved backend code to internal for each 'parent' module
-[Unreleased]: https://github.com/latex3/latex3/compare/2022-08-05...HEAD
+[Unreleased]: https://github.com/latex3/latex3/compare/2022-08-23...HEAD
+[2022-08-23]: https://github.com/latex3/latex3/compare/2022-08-05...2022-08-23
[2022-08-05]: https://github.com/latex3/latex3/compare/2022-07-01...2022-08-05
[2022-07-01]: https://github.com/latex3/latex3/compare/2022-04-20...2022-07-01
[2022-04-20]: https://github.com/latex3/latex3/compare/2022-04-14...2022-04-20
diff --git a/macros/latex/contrib/l3backend/README.md b/macros/latex/contrib/l3backend/README.md
index fe959f8ca7..724c54a890 100644
--- a/macros/latex/contrib/l3backend/README.md
+++ b/macros/latex/contrib/l3backend/README.md
@@ -1,7 +1,7 @@
LaTeX3 Backend Drivers
======================
-Release 2022-08-05
+Release 2022-08-23
This package forms parts of `expl3`, and contains the code used to interface
with backends (drivers) across the `expl3` codebase. The functions here are
diff --git a/macros/latex/contrib/l3backend/l3backend-basics.dtx b/macros/latex/contrib/l3backend/l3backend-basics.dtx
index 768bd20d50..135bee63eb 100644
--- a/macros/latex/contrib/l3backend/l3backend-basics.dtx
+++ b/macros/latex/contrib/l3backend/l3backend-basics.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2022-08-05}
+% \date{Released 2022-08-23}
%
% \maketitle
%
@@ -70,27 +70,27 @@
% \begin{macrocode}
\ProvidesExplFile
%<*dvipdfmx>
- {l3backend-dvipdfmx.def}{2022-08-05}{}
+ {l3backend-dvipdfmx.def}{2022-08-23}{}
{L3 backend support: dvipdfmx}
%</dvipdfmx>
%<*dvips>
- {l3backend-dvips.def}{2022-08-05}{}
+ {l3backend-dvips.def}{2022-08-23}{}
{L3 backend support: dvips}
%</dvips>
%<*dvisvgm>
- {l3backend-dvisvgm.def}{2022-08-05}{}
+ {l3backend-dvisvgm.def}{2022-08-23}{}
{L3 backend support: dvisvgm}
%</dvisvgm>
%<*luatex>
- {l3backend-luatex.def}{2022-08-05}{}
+ {l3backend-luatex.def}{2022-08-23}{}
{L3 backend support: PDF output (LuaTeX)}
%</luatex>
%<*pdftex>
- {l3backend-pdftex.def}{2022-08-05}{}
+ {l3backend-pdftex.def}{2022-08-23}{}
{L3 backend support: PDF output (pdfTeX)}
%</pdftex>
%<*xetex>
- {l3backend-xetex.def}{2022-08-05}{}
+ {l3backend-xetex.def}{2022-08-23}{}
{L3 backend support: XeTeX}
%</xetex>
% \end{macrocode}
diff --git a/macros/latex/contrib/l3backend/l3backend-box.dtx b/macros/latex/contrib/l3backend/l3backend-box.dtx
index 628176536a..6b5b08457c 100644
--- a/macros/latex/contrib/l3backend/l3backend-box.dtx
+++ b/macros/latex/contrib/l3backend/l3backend-box.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2022-08-05}
+% \date{Released 2022-08-23}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3backend/l3backend-code.pdf b/macros/latex/contrib/l3backend/l3backend-code.pdf
index 1d3030cbd3..00836f6abb 100644
--- a/macros/latex/contrib/l3backend/l3backend-code.pdf
+++ b/macros/latex/contrib/l3backend/l3backend-code.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3backend/l3backend-color.dtx b/macros/latex/contrib/l3backend/l3backend-color.dtx
index 336ff45135..dabf728427 100644
--- a/macros/latex/contrib/l3backend/l3backend-color.dtx
+++ b/macros/latex/contrib/l3backend/l3backend-color.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2022-08-05}
+% \date{Released 2022-08-23}
%
% \maketitle
%
@@ -79,31 +79,24 @@
% \begin{macro}{\@@_backend_pickup:N}
% \begin{macro}{\@@_backend_pickup:w}
% Allow for \LaTeXe{} color. Here, the possible input values are limited:
-% \texttt{dvips}-style colors can mainly be taken as-is with the exception
-% spot ones (here we need a model and a tint). The \texttt{x}-type expansion
+% \texttt{dvips}-style colors can be taken as-is. The \texttt{x}-type expansion
% is there to cover the case where \pkg{xcolor} is in use.
% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_pickup:N #1 { }
-\cs_if_exist:cT { ver@color.sty }
+\cs_new_protected:Npn \@@_backend_pickup:N #1
{
- \cs_set_protected:Npn \@@_backend_pickup:N #1
+ \exp_args:NV \tl_if_head_is_space:nTF \current@color
{
- \exp_args:NV \tl_if_head_is_space:nTF \current@color
- {
- \tl_set:Nx #1
- {
- { named }
- { \exp_after:wN \use:n \current@color }
- }
- }
- {
- \exp_last_unbraced:Nx \@@_backend_pickup:w
- { \current@color } \s_@@_stop #1
- }
+ \tl_set:Nn #1 { { gray } { 0 } }
+ \msg_warning:nnx { color } { unhandled }
+ { \current@color }
+ }
+ {
+ \exp_last_unbraced:Nx \@@_backend_pickup:w
+ { \current@color } \s_@@_stop #1
}
- \cs_new_protected:Npn \@@_backend_pickup:w #1 ~ #2 \s_@@_stop #3
- { \tl_set:Nn #3 { {#1} {#2} } }
}
+\cs_new_protected:Npn \@@_backend_pickup:w #1 ~ #2 \s_@@_stop #3
+ { \tl_set:Nn #3 { {#1} {#2} } }
% \end{macrocode}
% \end{macro}
% \end{macro}
@@ -120,41 +113,28 @@
%
% \begin{macro}{\@@_backend_pickup:N}
% \begin{macro}{\@@_backend_pickup:w}
-% The current color in driver-dependent format: pick up the package-mode
-% data if available. We end up converting back and forward in this route as
-% we store our color data in \texttt{dvips} format.
-% The \tn{current@color} needs to be \texttt{x}-expanded before
-% \cs{@@_backend_pickup:w} breaks it apart, because for instance
-% \pkg{xcolor} sets it to be instructions to generate a color
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_pickup:N #1 { }
-\cs_if_exist:cT { ver@color.sty }
+% Same ideas, but with a different backend-dependent format.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_backend_pickup:N #1
{
- \cs_set_protected:Npn \@@_backend_pickup:N #1
- {
- \exp_last_unbraced:Nx \@@_backend_pickup:w
- { \current@color } ~ 0 ~ 0 ~ 0 \s_@@_stop #1
- }
- \cs_new_protected:Npn \@@_backend_pickup:w
- #1 ~ #2 ~ #3 ~ #4 ~ #5 ~ #6 \s_@@_stop #7
+ \exp_last_unbraced:Nx \@@_backend_pickup:w
+ { \current@color } ~ 0 ~ 0 ~ 0 \s_@@_stop #1
+ }
+\cs_new_protected:Npn \@@_backend_pickup:w
+ #1 ~ #2 ~ #3 ~ #4 ~ #5 ~ #6 \s_@@_stop #7
+ {
+ \str_if_eq:nnTF {#2} { g }
+ { \tl_set:Nn #7 { { gray } {#1} } }
{
- \str_if_eq:nnTF {#2} { g }
- { \tl_set:Nn #7 { { gray } {#1} } }
+ \str_if_eq:nnTF {#4} { rg }
+ { \tl_set:Nn #7 { { rgb } { #1 ~ #2 ~ #3 } } }
{
- \str_if_eq:nnTF {#4} { rg }
- { \tl_set:Nn #7 { { rgb } { #1 ~ #2 ~ #3 } } }
+ \str_if_eq:nnTF {#5} { k }
+ { \tl_set:Nn #7 { { cmyk } { #1 ~ #2 ~ #3 ~ #4 } } }
{
- \str_if_eq:nnTF {#5} { k }
- { \tl_set:Nn #7 { { cmyk } { #1 ~ #2 ~ #3 ~ #4 } } }
- {
- \str_if_eq:nnTF {#2} { cs }
- {
- \tl_set:Nx #7 { { \use:n #1 } { #5 } }
- }
- {
- \tl_set:Nn #7 { { gray } { 0 } }
- }
- }
+ \tl_set:Nn #1 { { gray } { 0 } }
+ \msg_warning:nnx { color } { unhandled }
+ { \current@color }
}
}
}
diff --git a/macros/latex/contrib/l3backend/l3backend-draw.dtx b/macros/latex/contrib/l3backend/l3backend-draw.dtx
index f23e3ec115..c3d91ed9af 100644
--- a/macros/latex/contrib/l3backend/l3backend-draw.dtx
+++ b/macros/latex/contrib/l3backend/l3backend-draw.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2022-08-05}
+% \date{Released 2022-08-23}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3backend/l3backend-graphics.dtx b/macros/latex/contrib/l3backend/l3backend-graphics.dtx
index e1c2af95fa..4a4b5136ad 100644
--- a/macros/latex/contrib/l3backend/l3backend-graphics.dtx
+++ b/macros/latex/contrib/l3backend/l3backend-graphics.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2022-08-05}
+% \date{Released 2022-08-23}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3backend/l3backend-header.dtx b/macros/latex/contrib/l3backend/l3backend-header.dtx
index abc2f4a778..f4caf7a7e5 100644
--- a/macros/latex/contrib/l3backend/l3backend-header.dtx
+++ b/macros/latex/contrib/l3backend/l3backend-header.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2022-08-05}
+% \date{Released 2022-08-23}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3backend/l3backend-opacity.dtx b/macros/latex/contrib/l3backend/l3backend-opacity.dtx
index e3132f6955..a1decb1c38 100644
--- a/macros/latex/contrib/l3backend/l3backend-opacity.dtx
+++ b/macros/latex/contrib/l3backend/l3backend-opacity.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2022-08-05}
+% \date{Released 2022-08-23}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3backend/l3backend-pdf.dtx b/macros/latex/contrib/l3backend/l3backend-pdf.dtx
index 052a3ba73d..d93ddc4e33 100644
--- a/macros/latex/contrib/l3backend/l3backend-pdf.dtx
+++ b/macros/latex/contrib/l3backend/l3backend-pdf.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2022-08-05}
+% \date{Released 2022-08-23}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/CHANGELOG.md b/macros/latex/contrib/l3kernel/CHANGELOG.md
index abd4e5fe87..d747679ef0 100644
--- a/macros/latex/contrib/l3kernel/CHANGELOG.md
+++ b/macros/latex/contrib/l3kernel/CHANGELOG.md
@@ -7,6 +7,21 @@ this project uses date-based 'snapshot' version identifiers.
## [Unreleased]
+## [2022-08-23]
+
+### Added
+- Shortened range of chars which are left unchanged when converted to
+ strings with `\str_(g)set_convert:Nnnn`.
+- `\color_if_exist:n(TF)`
+- Support for case changing Vietnamese characters with 8-bit engines
+- Parsing of `cmy`, `tHsb` and `&spot` color models to support data exchange with
+ `xcolor`
+
+### Changed
+- Replace `LaTeX3` in message text by `LaTeX`
+
+### Changed
+- Approach to setting current color data from LaTeX2e
## [2022-08-05]
### Added
@@ -1173,7 +1188,8 @@ this project uses date-based 'snapshot' version identifiers.
- Step functions have been added for dim variables,
e.g. `\dim_step_inline:nnnn`
-[Unreleased]: https://github.com/latex3/latex3/compare/2022-08-05...HEAD
+[Unreleased]: https://github.com/latex3/latex3/compare/2022-08-23...HEAD
+[2022-08-23]: https://github.com/latex3/latex3/compare/2022-08-05...2022-08-23
[2022-08-05]: https://github.com/latex3/latex3/compare/2022-07-15...2022-08-05
[2022-07-15]: https://github.com/latex3/latex3/compare/2022-07-14...2022-07-15
[2022-07-14]: https://github.com/latex3/latex3/compare/2022-07-04...2022-07-14
diff --git a/macros/latex/contrib/l3kernel/README.md b/macros/latex/contrib/l3kernel/README.md
index 0c5c550f2a..f25e9207e6 100644
--- a/macros/latex/contrib/l3kernel/README.md
+++ b/macros/latex/contrib/l3kernel/README.md
@@ -1,7 +1,7 @@
LaTeX3 Programming Conventions
==============================
-Release 2022-08-05
+Release 2022-08-23
Overview
--------
diff --git a/macros/latex/contrib/l3kernel/expl3.dtx b/macros/latex/contrib/l3kernel/expl3.dtx
index 48808d9f49..63f4301438 100644
--- a/macros/latex/contrib/l3kernel/expl3.dtx
+++ b/macros/latex/contrib/l3kernel/expl3.dtx
@@ -24,7 +24,7 @@
%
%<*driver|generic|package|2ekernel>
%</driver|generic|package|2ekernel>
-\def\ExplFileDate{2022-08-05}%
+\def\ExplFileDate{2022-08-23}%
%<*driver>
\documentclass[full]{l3doc}
\usepackage{graphicx}
@@ -51,7 +51,7 @@
% }^^A
% }
%
-% \date{Released 2022-08-05}
+% \date{Released 2022-08-23}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/expl3.pdf b/macros/latex/contrib/l3kernel/expl3.pdf
index 55b417e1d4..c86280538e 100644
--- a/macros/latex/contrib/l3kernel/expl3.pdf
+++ b/macros/latex/contrib/l3kernel/expl3.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/interface3.pdf b/macros/latex/contrib/l3kernel/interface3.pdf
index 5a960b9964..c16be2ce98 100644
--- a/macros/latex/contrib/l3kernel/interface3.pdf
+++ b/macros/latex/contrib/l3kernel/interface3.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/interface3.tex b/macros/latex/contrib/l3kernel/interface3.tex
index 00c15208e1..528adb8e9d 100644
--- a/macros/latex/contrib/l3kernel/interface3.tex
+++ b/macros/latex/contrib/l3kernel/interface3.tex
@@ -54,7 +54,7 @@ for those people who are interested.
{latex-team@latex-project.org}%
}%
}
-\date{Released 2022-08-05}
+\date{Released 2022-08-23}
\pagenumbering{roman}
\maketitle
diff --git a/macros/latex/contrib/l3kernel/l3basics.dtx b/macros/latex/contrib/l3kernel/l3basics.dtx
index 3eb9a3f43b..69a59f065b 100644
--- a/macros/latex/contrib/l3kernel/l3basics.dtx
+++ b/macros/latex/contrib/l3kernel/l3basics.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2022-08-05}
+% \date{Released 2022-08-23}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3bootstrap.dtx b/macros/latex/contrib/l3kernel/l3bootstrap.dtx
index 852f654cef..43a666d3ce 100644
--- a/macros/latex/contrib/l3kernel/l3bootstrap.dtx
+++ b/macros/latex/contrib/l3kernel/l3bootstrap.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2022-08-05}
+% \date{Released 2022-08-23}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3box.dtx b/macros/latex/contrib/l3kernel/l3box.dtx
index 502185ed65..67767992ee 100644
--- a/macros/latex/contrib/l3kernel/l3box.dtx
+++ b/macros/latex/contrib/l3kernel/l3box.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2022-08-05}
+% \date{Released 2022-08-23}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3candidates.dtx b/macros/latex/contrib/l3kernel/l3candidates.dtx
index b01f9169cd..155d51bc0e 100644
--- a/macros/latex/contrib/l3kernel/l3candidates.dtx
+++ b/macros/latex/contrib/l3kernel/l3candidates.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2022-08-05}
+% \date{Released 2022-08-23}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3cctab.dtx b/macros/latex/contrib/l3kernel/l3cctab.dtx
index f108418c02..fac045495c 100644
--- a/macros/latex/contrib/l3kernel/l3cctab.dtx
+++ b/macros/latex/contrib/l3kernel/l3cctab.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2022-08-05}
+% \date{Released 2022-08-23}
%
% \maketitle
%
@@ -908,7 +908,7 @@
you~tried~to~interleave~them.~LaTeX~will~try~to~proceed,~
but~results~may~be~unexpected.
}
-\prop_gput:Nnn \g_msg_module_name_prop { cctab } { LaTeX3 }
+\prop_gput:Nnn \g_msg_module_name_prop { cctab } { LaTeX }
\prop_gput:Nnn \g_msg_module_type_prop { cctab } { }
% \end{macrocode}
%
diff --git a/macros/latex/contrib/l3kernel/l3clist.dtx b/macros/latex/contrib/l3kernel/l3clist.dtx
index 2d880e5722..34e78c62a3 100644
--- a/macros/latex/contrib/l3kernel/l3clist.dtx
+++ b/macros/latex/contrib/l3kernel/l3clist.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2022-08-05}
+% \date{Released 2022-08-23}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3coffins.dtx b/macros/latex/contrib/l3kernel/l3coffins.dtx
index fe2ce11f3e..7d822312eb 100644
--- a/macros/latex/contrib/l3kernel/l3coffins.dtx
+++ b/macros/latex/contrib/l3kernel/l3coffins.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2022-08-05}
+% \date{Released 2022-08-23}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3color.dtx b/macros/latex/contrib/l3kernel/l3color.dtx
index 8fc7268cdb..33b28721ed 100644
--- a/macros/latex/contrib/l3kernel/l3color.dtx
+++ b/macros/latex/contrib/l3kernel/l3color.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2022-08-05}
+% \date{Released 2022-08-23}
%
% \maketitle
%
@@ -95,6 +95,7 @@
% \item \texttt{cmyk} Cyan-magenta-yellow-black color, with four axes, one for
% each of the components
% \end{itemize}
+%
% There are also interface models: these are convenient for users but have
% to be manipulated before storing/passing to the backend. Interface models
% are primarily integer-based: see below for more detail. The supported
@@ -118,6 +119,20 @@
% \end{itemize}
% All interface models are internally stored as |rgb|.
%
+% Finally, there are a small number of models which are parsed to allow
+% data transfer from \pkg{xcolor} but which should not be used by end-users.
+% These are
+% \begin{itemize}
+% \item \texttt{cmy} Cyan-magenta-yellow color with three axes, one for
+% each of the components; converted to |cmyk|
+% \item \texttt{tHsb} \enquote{Tuned} hue-saturation-brightness color with three
+% axes, integer in the range $[0,360]$ for hue, real values in the range
+% $[0,1]$ for saturation and brightness; converted to |rgb| using the
+% standard tuning map defined by \pkg{xcolor}
+% \item \texttt{\&spot} Spot color tint with one value; treated as a gray
+% tint as spot color data is not available for extraction
+% \end{itemize}
+%
% To allow parsing of data from \pkg{xcolor}, any leading model up the first
% \texttt{:} will be discarded; the approach of selecting an internal form
% for data is \emph{not} used in \pkg{l3color}.
@@ -235,6 +250,15 @@
% it to be saved to a name.
% \end{function}
%
+% \begin{function}[EXP, pTF, added = 2022-08-12]{\color_if_exist:n}
+% \begin{syntax}
+% \cs{color_if_exist:n} \Arg{name}
+% \cs{color_if_exist:n} \Arg{name} \Arg{true code} \Arg{false code}
+% \end{syntax}
+% Tests whether \meta{name} is currently defined to provide a color
+% specification.
+% \end{function}
+%
% \begin{function}[added = 2021-05-11]{\color_show:n, \color_log:n}
% \begin{syntax}
% \cs{color_show:n} \Arg{name}
@@ -545,10 +569,7 @@
% current color \enquote{now}.
% \begin{macrocode}
\cs_new_protected:Npn \color_ensure_current:
- {
- \@@_backend_pickup:N \l_@@_current_tl
- \@@_select:N \l_@@_current_tl
- }
+ { \@@_select:N \l_@@_current_tl }
% \end{macrocode}
% \end{macro}
%
@@ -625,12 +646,12 @@
%
% \subsection{Utility functions}
%
-% \begin{macro}[TF, EXP]{\@@_if_defined:n}
+% \begin{macro}[pTF, EXP]{\color_if_exist:n}
% A simple wrapper to avoid needing to have the lookup repeated in too many
% places.To guard against a color created in a group, we need to test for
% entries in the |prop|.
% \begin{macrocode}
-\prg_new_conditional:Npnn \@@_if_defined:n #1 { T, F, TF }
+\prg_new_conditional:Npnn \color_if_exist:n #1 { p , T, F, TF }
{
\prop_if_exist:cTF { l_@@_named_ #1 _prop }
{
@@ -679,6 +700,7 @@
% \@@_convert_rgb_rgb:w
% \@@_convert_rgb_cmyk:w
% }
+% \begin{macro}[EXP]{\@@_convert_rgb_cmyk:nnn}
% \begin{macro}[EXP]{\@@_convert_rgb_cmyk:nnnn}
% Model conversion is carried out using standard formulae for base models,
% as described in the manual for \pkg{xcolor} (see also the \emph{PostScript
@@ -742,18 +764,28 @@
% removal} functions. The PostScript reference describes them as
% device-dependent, but following \pkg{xcolor} we assume they are linear.
% Moreover, as the likelihood of anyone using a non-unitary matrix here is
-% tiny, we simplify and treat those two concepts as no-ops.
+% tiny, we simplify and treat those two concepts as no-ops. To allow code
+% sharing with parsing of |cmy| values, we have an intermediate function
+% here (\cs{@@_convert_rgb_cmyk:nnn}) which actually takes |cmy| values
+% as input.
% \begin{macrocode}
\cs_new:Npn \@@_convert_rgb_cmyk:w #1 ~ #2 ~ #3 \s_@@_stop
{
- \exp_args:Nf \@@_convert_rgb_cmyk:nnnn
- { \fp_eval:n { min ( 1 - #1 , 1 - #2 , 1 - #3 ) } } {#1} {#2} {#3}
+ \exp_args:Neee \@@_convert_rgb_cmyk:nnn
+ { \fp_eval:n { 1 - #1 } }
+ { \fp_eval:n { 1 - #2 } }
+ { \fp_eval:n { 1 - #3 } }
+ }
+\cs_new:Npn \@@_convert_rgb_cmyk:nnn #1#2#3
+ {
+ \exp_args:Ne \@@_convert_rgb_cmyk:nnnn
+ { \fp_eval:n { min( #1, #2 , #3 ) } } {#1} {#2} {#3}
}
\cs_new:Npn \@@_convert_rgb_cmyk:nnnn #1#2#3#4
{
- \fp_eval:n { min ( 1 , max ( 0 , 1 - #2 - #1 ) ) } \c_space_tl
- \fp_eval:n { min ( 1 , max ( 0 , 1 - #3 - #1 ) ) } \c_space_tl
- \fp_eval:n { min ( 1 , max ( 0 , 1 - #4 - #1 ) ) } \c_space_tl
+ \fp_eval:n { min ( 1 , max ( 0 , #2 - #1 ) ) } \c_space_tl
+ \fp_eval:n { min ( 1 , max ( 0 , #3 - #1 ) ) } \c_space_tl
+ \fp_eval:n { min ( 1 , max ( 0 , #4 - #1 ) ) } \c_space_tl
#1
}
\cs_new:Npn \@@_convert_cmyk_gray:w #1 ~ #2 ~ #3 ~ #4 \s_@@_stop
@@ -771,6 +803,7 @@
% \end{macro}
% \end{macro}
% \end{macro}
+% \end{macro}
%
% \subsection{Color expressions}
%
@@ -811,7 +844,6 @@
% \begin{macrocode}
\cs_new_protected:Npx \@@_parse:nN #1#2
{
- \exp_not:N \@@_backend_pickup:N \exp_not:N \l_@@_current_tl
\tl_set:Nx \exp_not:c { l_@@_named_ . _tl }
{ \exp_not:N \@@_model:N \exp_not:N \l_@@_current_tl }
\prop_put:NVx \exp_not:c { l_@@_named_ . _prop }
@@ -827,7 +859,7 @@
% \begin{macrocode}
\cs_new_protected:Npn \@@_parse_aux:nN #1#2
{
- \@@_if_defined:nTF {#1}
+ \color_if_exist:nTF {#1}
{ \@@_parse_set_eq:Nn #2 {#1} }
{ \@@_parse:Nw #2#1 ! \s_@@_stop }
\@@_check_model:N #2
@@ -865,7 +897,7 @@
}
\cs_new_protected:Npn \@@_parse:Nw #1#2 ! #3 \s_@@_stop
{
- \@@_if_defined:nTF {#2}
+ \color_if_exist:nTF {#2}
{
\tl_if_blank:nTF {#3}
{ \@@_parse_set_eq:Nn #1 {#2} }
@@ -938,7 +970,7 @@
% \begin{macrocode}
\cs_new_protected:Npn \@@_parse_loop:nn #1#2
{
- \@@_if_defined:nTF {#2}
+ \color_if_exist:nTF {#2}
{
\@@_extract:nNN {#2} \l_@@_next_model_tl \l_@@_next_value_tl
\tl_if_eq:NNF \l_@@_model_tl \l_@@_next_model_tl
@@ -1255,6 +1287,70 @@
% \end{macro}
% \end{macro}
%
+% \begin{macro}{\@@_parse_model_cmy:w}
+% Simply pass data to the conversion functions.
+% \begin{macrocode}
+\cs_new:Npn \@@_parse_model_cmy:w #1 , #2 , #3 , #4 \s_@@_stop
+ {
+ { cmyk }
+ { \@@_convert_rgb_cmyk:nnn {#1} {#2} {#3} }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_parse_model_tHsb:w}
+% \begin{macro}{\@@_parse_model_tHsb:n}
+% \begin{macro}{\@@_parse_model_tHsb:nw}
+% There are three stages to the process here: bring the |tH| argument into
+% the normal range, divide through to get to |hsb| and finally convert that
+% to |rgb|. The final stage can be delegated to the parsing function for
+% |hsb|, and the conversion from |Hsb| to |hsb| is trivial, so the main focus
+% here is the first stage. We use a simple expandable loop to do the work,
+% and we implement the equation given in the \pkg{xcolor} manual
+% (number~85 there) as a simple expression.
+% \begin{macrocode}
+\cs_new:Npn \@@_parse_model_tHsb:w #1 , #2 , #3 , #4 \s_@@_stop
+ {
+ \exp_args:Ne \@@_parse_model_hsb:nnn
+ { \@@_parse_model_tHsb:n {#1} } {#2} {#3}
+ }
+\cs_new:Npn \@@_parse_model_tHsb:n #1
+ {
+ \@@_parse_model_tHsb:nw {#1}
+ 0 , 0 ;
+ 60 , 30 ;
+ 120 , 60 ;
+ 180 , 120 ;
+ 210 , 180 ;
+ 240 , 240 ;
+ 360 , 360 ;
+ \q_recursion_tail , ;
+ \q_recursion_stop
+ }
+\cs_new:Npn \@@_parse_model_tHsb:nw #1 #2 , #3 ; #4 , #5 ;
+ {
+ \quark_if_recursion_tail_stop_do:nn {#4} { 0 }
+ \fp_compare:nNnTF {#1} > {#4}
+ { \@@_parse_model_tHsb:nw {#1} #4 , #5 ; }
+ {
+ \use_i_delimit_by_q_recursion_stop:nw
+ { \fp_eval:n { ((#1 - #2) / (#4 - #2) * (#5 - #3) + #3) / 360 } }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@@_parse_model_&spot:w}
+% We cannot extract data here from that passed by \pkg{xcolor}, so
+% we fall back on a black tint.
+% \begin{macrocode}
+\cs_new:cpn { @@_parse_model_&spot:w } #1 , #2 \s_@@_stop
+ { { gray } { #1 } }
+% \end{macrocode}
+% \end{macro}
+%
% \subsection{Selecting colors (and color models)}
%
% \begin{variable}{\l_color_fixed_model_tl}
@@ -1738,7 +1834,7 @@
}
\cs_new_protected:Npn \color_set_eq:nn #1#2
{
- \@@_if_defined:nTF {#2}
+ \color_if_exist:nTF {#2}
{
\tl_clear_new:c { l_@@_named_ #1 _tl }
\prop_clear_new:c { l_@@_named_ #1 _prop }
@@ -2932,7 +3028,7 @@
#1 { color } { show }
{#2}
{
- \@@_if_defined:nT {#2}
+ \color_if_exist:nT {#2}
{
\exp_args:Nv \@@_show:n { l_@@_named_ #2 _tl }
\prop_map_function:cN
@@ -3048,6 +3144,12 @@
\\ \\
key~was~given~with~the~correct~information.
}
+\msg_new:nnn { color } { unhandled-model }
+ {
+ Unhandled~color~model~in~LaTeX2e~value~"#1":
+ \\ \\
+ falling~back~on~grayscale.
+ }
\msg_new:nnnn { color } { unknown-color }
{ Unknown~color~'#1'. }
{
@@ -3087,7 +3189,7 @@
LaTeX~has~been~asked~to~create~a~new~color~model~called~'#1',~
but~this~type~of~model~was~never~set~up.
}
-\prop_gput:Nnn \g_msg_module_name_prop { color } { LaTeX3 }
+\prop_gput:Nnn \g_msg_module_name_prop { color } { LaTeX }
\prop_gput:Nnn \g_msg_module_type_prop { color } { }
% \end{macrocode}
%
diff --git a/macros/latex/contrib/l3kernel/l3debug.dtx b/macros/latex/contrib/l3kernel/l3debug.dtx
index cb12c2bbcc..9fe0518b1f 100644
--- a/macros/latex/contrib/l3kernel/l3debug.dtx
+++ b/macros/latex/contrib/l3kernel/l3debug.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2022-08-05}
+% \date{Released 2022-08-23}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3deprecation.dtx b/macros/latex/contrib/l3kernel/l3deprecation.dtx
index 2dc1200e44..4153116c3a 100644
--- a/macros/latex/contrib/l3kernel/l3deprecation.dtx
+++ b/macros/latex/contrib/l3kernel/l3deprecation.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2022-08-05}
+% \date{Released 2022-08-23}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3doc.dtx b/macros/latex/contrib/l3kernel/l3doc.dtx
index 4a4ef017e1..d8b2dc9254 100644
--- a/macros/latex/contrib/l3kernel/l3doc.dtx
+++ b/macros/latex/contrib/l3kernel/l3doc.dtx
@@ -85,7 +85,7 @@ and all files in that bundle must be distributed together.
% require you to do updates, if the class changes.}}
%
% \author{\Team}
-% \date{Released 2022-08-05}
+% \date{Released 2022-08-23}
% \maketitle
% \tableofcontents
%
diff --git a/macros/latex/contrib/l3kernel/l3doc.pdf b/macros/latex/contrib/l3kernel/l3doc.pdf
index 7a13aed860..ed15603bb8 100644
--- a/macros/latex/contrib/l3kernel/l3doc.pdf
+++ b/macros/latex/contrib/l3kernel/l3doc.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3docstrip.dtx b/macros/latex/contrib/l3kernel/l3docstrip.dtx
index 19b2a72458..bbf456084c 100644
--- a/macros/latex/contrib/l3kernel/l3docstrip.dtx
+++ b/macros/latex/contrib/l3kernel/l3docstrip.dtx
@@ -63,7 +63,7 @@
% }^^A
% }
%
-% \date{Released 2022-08-05}
+% \date{Released 2022-08-23}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3docstrip.pdf b/macros/latex/contrib/l3kernel/l3docstrip.pdf
index e0d451932e..e95341e2c8 100644
--- a/macros/latex/contrib/l3kernel/l3docstrip.pdf
+++ b/macros/latex/contrib/l3kernel/l3docstrip.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3expan.dtx b/macros/latex/contrib/l3kernel/l3expan.dtx
index b0ab3c1fae..71b45cc3ca 100644
--- a/macros/latex/contrib/l3kernel/l3expan.dtx
+++ b/macros/latex/contrib/l3kernel/l3expan.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2022-08-05}
+% \date{Released 2022-08-23}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3file.dtx b/macros/latex/contrib/l3kernel/l3file.dtx
index 7cb1ff9824..642f77afde 100644
--- a/macros/latex/contrib/l3kernel/l3file.dtx
+++ b/macros/latex/contrib/l3kernel/l3file.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2022-08-05}
+% \date{Released 2022-08-23}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3flag.dtx b/macros/latex/contrib/l3kernel/l3flag.dtx
index fd9a9aa611..af66b61964 100644
--- a/macros/latex/contrib/l3kernel/l3flag.dtx
+++ b/macros/latex/contrib/l3kernel/l3flag.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2022-08-05}
+% \date{Released 2022-08-23}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-assign.dtx b/macros/latex/contrib/l3kernel/l3fp-assign.dtx
index 5b311af4d0..66e5be677d 100644
--- a/macros/latex/contrib/l3kernel/l3fp-assign.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-assign.dtx
@@ -40,7 +40,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2022-08-05}
+% \date{Released 2022-08-23}
% \maketitle
%
% \begin{documentation}
diff --git a/macros/latex/contrib/l3kernel/l3fp-aux.dtx b/macros/latex/contrib/l3kernel/l3fp-aux.dtx
index cbde31ce23..4b16b7c6fc 100644
--- a/macros/latex/contrib/l3kernel/l3fp-aux.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-aux.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2022-08-05}
+% \date{Released 2022-08-23}
%
% \maketitle
%
@@ -1275,7 +1275,7 @@
'\token_to_str:N \fp_to_tl:N',~or~other~
conversion~functions.
}
-\prop_gput:Nnn \g_msg_module_name_prop { fp } { LaTeX3 }
+\prop_gput:Nnn \g_msg_module_name_prop { fp } { LaTeX }
\prop_gput:Nnn \g_msg_module_type_prop { fp } { }
% \end{macrocode}
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-basics.dtx b/macros/latex/contrib/l3kernel/l3fp-basics.dtx
index d787d6ee22..9afe96a069 100644
--- a/macros/latex/contrib/l3kernel/l3fp-basics.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-basics.dtx
@@ -40,7 +40,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2022-08-05}
+% \date{Released 2022-08-23}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-convert.dtx b/macros/latex/contrib/l3kernel/l3fp-convert.dtx
index c132f4590d..daa67ea0a1 100644
--- a/macros/latex/contrib/l3kernel/l3fp-convert.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-convert.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2022-08-05}
+% \date{Released 2022-08-23}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-expo.dtx b/macros/latex/contrib/l3kernel/l3fp-expo.dtx
index 1c3279091d..ed26025368 100644
--- a/macros/latex/contrib/l3kernel/l3fp-expo.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-expo.dtx
@@ -40,7 +40,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2022-08-05}
+% \date{Released 2022-08-23}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-extended.dtx b/macros/latex/contrib/l3kernel/l3fp-extended.dtx
index 0350ded913..bc7e177093 100644
--- a/macros/latex/contrib/l3kernel/l3fp-extended.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-extended.dtx
@@ -40,7 +40,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2022-08-05}
+% \date{Released 2022-08-23}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-logic.dtx b/macros/latex/contrib/l3kernel/l3fp-logic.dtx
index 46964ea3a1..dbade2f590 100644
--- a/macros/latex/contrib/l3kernel/l3fp-logic.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-logic.dtx
@@ -40,7 +40,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2022-08-05}
+% \date{Released 2022-08-23}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-parse.dtx b/macros/latex/contrib/l3kernel/l3fp-parse.dtx
index b0797bb794..efe9a6dfe9 100644
--- a/macros/latex/contrib/l3kernel/l3fp-parse.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-parse.dtx
@@ -40,7 +40,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2022-08-05}
+% \date{Released 2022-08-23}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-random.dtx b/macros/latex/contrib/l3kernel/l3fp-random.dtx
index 54da2f3027..4cd51f0f89 100644
--- a/macros/latex/contrib/l3kernel/l3fp-random.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-random.dtx
@@ -40,7 +40,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2022-08-05}
+% \date{Released 2022-08-23}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-round.dtx b/macros/latex/contrib/l3kernel/l3fp-round.dtx
index 3c13cb4c7f..1a56d98509 100644
--- a/macros/latex/contrib/l3kernel/l3fp-round.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-round.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2022-08-05}
+% \date{Released 2022-08-23}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-traps.dtx b/macros/latex/contrib/l3kernel/l3fp-traps.dtx
index d613c08e5c..b566e3d1bb 100644
--- a/macros/latex/contrib/l3kernel/l3fp-traps.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-traps.dtx
@@ -40,7 +40,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2022-08-05}
+% \date{Released 2022-08-23}
% \maketitle
%
% \begin{documentation}
diff --git a/macros/latex/contrib/l3kernel/l3fp-trig.dtx b/macros/latex/contrib/l3kernel/l3fp-trig.dtx
index f47ae0281b..a45b7856ff 100644
--- a/macros/latex/contrib/l3kernel/l3fp-trig.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-trig.dtx
@@ -40,7 +40,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2022-08-05}
+% \date{Released 2022-08-23}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp.dtx b/macros/latex/contrib/l3kernel/l3fp.dtx
index f69fcd6cc9..8d7c44dd35 100644
--- a/macros/latex/contrib/l3kernel/l3fp.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp.dtx
@@ -49,7 +49,7 @@
% }^^A
% }
%
-% \date{Released 2022-08-05}
+% \date{Released 2022-08-23}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fparray.dtx b/macros/latex/contrib/l3kernel/l3fparray.dtx
index a1a071839e..c41a991af5 100644
--- a/macros/latex/contrib/l3kernel/l3fparray.dtx
+++ b/macros/latex/contrib/l3kernel/l3fparray.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2022-08-05}
+% \date{Released 2022-08-23}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3int.dtx b/macros/latex/contrib/l3kernel/l3int.dtx
index 3a7f061d2d..1a6cb9ba77 100644
--- a/macros/latex/contrib/l3kernel/l3int.dtx
+++ b/macros/latex/contrib/l3kernel/l3int.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2022-08-05}
+% \date{Released 2022-08-23}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3intarray.dtx b/macros/latex/contrib/l3kernel/l3intarray.dtx
index 41a14d591c..5e49b94d4e 100644
--- a/macros/latex/contrib/l3kernel/l3intarray.dtx
+++ b/macros/latex/contrib/l3kernel/l3intarray.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2022-08-05}
+% \date{Released 2022-08-23}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3kernel-functions.dtx b/macros/latex/contrib/l3kernel/l3kernel-functions.dtx
index ac0b7abb13..c26a6f0ccf 100644
--- a/macros/latex/contrib/l3kernel/l3kernel-functions.dtx
+++ b/macros/latex/contrib/l3kernel/l3kernel-functions.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2022-08-05}
+% \date{Released 2022-08-23}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3keys.dtx b/macros/latex/contrib/l3kernel/l3keys.dtx
index b8f407f3f5..d8313614d1 100644
--- a/macros/latex/contrib/l3kernel/l3keys.dtx
+++ b/macros/latex/contrib/l3kernel/l3keys.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2022-08-05}
+% \date{Released 2022-08-23}
%
% \maketitle
%
@@ -1456,7 +1456,7 @@
{ Misplaced~'='~in~key-value~input~\msg_line_context: }
\msg_new:nnn { keyval } { blank-key-name }
{ Blank~key~name~in~key-value~input~\msg_line_context: }
-\prop_gput:Nnn \g_msg_module_name_prop { keyval } { LaTeX3 }
+\prop_gput:Nnn \g_msg_module_name_prop { keyval } { LaTeX }
\prop_gput:Nnn \g_msg_module_type_prop { keyval } { }
% \end{macrocode}
%
@@ -3552,7 +3552,7 @@
{ is~undefined. }
{ has~the~properties: #2 . }
}
-\prop_gput:Nnn \g_msg_module_name_prop { keys } { LaTeX3 }
+\prop_gput:Nnn \g_msg_module_name_prop { keys } { LaTeX }
\prop_gput:Nnn \g_msg_module_type_prop { keys } { }
% \end{macrocode}
%
diff --git a/macros/latex/contrib/l3kernel/l3legacy.dtx b/macros/latex/contrib/l3kernel/l3legacy.dtx
index 36303fc377..dc92bba1b5 100644
--- a/macros/latex/contrib/l3kernel/l3legacy.dtx
+++ b/macros/latex/contrib/l3kernel/l3legacy.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2022-08-05}
+% \date{Released 2022-08-23}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3luatex.dtx b/macros/latex/contrib/l3kernel/l3luatex.dtx
index 40d1fd0009..de35da4d94 100644
--- a/macros/latex/contrib/l3kernel/l3luatex.dtx
+++ b/macros/latex/contrib/l3kernel/l3luatex.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2022-08-05}
+% \date{Released 2022-08-23}
%
% \maketitle
%
@@ -305,7 +305,7 @@
#2
}
-\prop_gput:Nnn \g_msg_module_name_prop { luatex } { LaTeX3 }
+\prop_gput:Nnn \g_msg_module_name_prop { luatex } { LaTeX }
\prop_gput:Nnn \g_msg_module_type_prop { luatex } { }
% \end{macrocode}
%
diff --git a/macros/latex/contrib/l3kernel/l3msg.dtx b/macros/latex/contrib/l3kernel/l3msg.dtx
index db98ebf8c4..8c9ac087e8 100644
--- a/macros/latex/contrib/l3kernel/l3msg.dtx
+++ b/macros/latex/contrib/l3kernel/l3msg.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2022-08-05}
+% \date{Released 2022-08-23}
%
% \maketitle
%
@@ -148,8 +148,7 @@
%
% \begin{variable}[added = 2018-10-10]{\g_msg_module_name_prop}
% Provides a mapping between the module name used for messages, and that
-% for documentation. For example, \LaTeX{}3 core messages are stored in
-% the reserved |LaTeX| tree, but are printed as |LaTeX3|.
+% for documentation.
% \end{variable}
%
% \begin{variable}[added = 2018-10-10]{\g_msg_module_type_prop}
@@ -1012,7 +1011,6 @@
% in advance.
% \begin{macrocode}
\prop_new:N \g_msg_module_name_prop
-\prop_gput:Nnn \g_msg_module_name_prop { LaTeX } { LaTeX3 }
\prop_new:N \g_msg_module_type_prop
\prop_gput:Nnn \g_msg_module_type_prop { LaTeX } { }
% \end{macrocode}
@@ -2039,7 +2037,7 @@
{ Backend~request~inconsistent~with~engine:~using~'#2'~backend. }
{
You~have~requested~backend~'#1',~but~this~is~not~suitable~for~use~with~the~
- active~engine.~LaTeX3~will~use~the~'#2'~backend~instead.
+ active~engine.~LaTeX~will~use~the~'#2'~backend~instead.
}
% \end{macrocode}
%
@@ -2124,7 +2122,7 @@
% \subsection{Message formatting}
%
% \begin{macrocode}
-\prop_gput:Nnn \g_msg_module_name_prop { kernel } { LaTeX3 }
+\prop_gput:Nnn \g_msg_module_name_prop { kernel } { LaTeX }
\prop_gput:Nnn \g_msg_module_type_prop { kernel } { }
\clist_map_inline:nn
{
@@ -2132,12 +2130,12 @@
quark , prg , prop , scanmark , seq , sys
}
{
- \prop_gput:Nnn \g_msg_module_name_prop {#1} { LaTeX3 }
+ \prop_gput:Nnn \g_msg_module_name_prop {#1} { LaTeX }
\prop_gput:Nnn \g_msg_module_type_prop {#1} { }
}
-\prop_gput:Nnn \g_msg_module_name_prop { LaTeX / cmd } { LaTeX3 }
+\prop_gput:Nnn \g_msg_module_name_prop { LaTeX / cmd } { LaTeX }
\prop_gput:Nnn \g_msg_module_type_prop { LaTeX / cmd } { }
-\prop_gput:Nnn \g_msg_module_name_prop { LaTeX / ltcmd } { LaTeX3 }
+\prop_gput:Nnn \g_msg_module_name_prop { LaTeX / ltcmd } { LaTeX }
\prop_gput:Nnn \g_msg_module_type_prop { LaTeX / ltcmd } { }
% \end{macrocode}
%
diff --git a/macros/latex/contrib/l3kernel/l3names.dtx b/macros/latex/contrib/l3kernel/l3names.dtx
index 485e5fefde..ce1ec1a49d 100644
--- a/macros/latex/contrib/l3kernel/l3names.dtx
+++ b/macros/latex/contrib/l3kernel/l3names.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2022-08-05}
+% \date{Released 2022-08-23}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3news.pdf b/macros/latex/contrib/l3kernel/l3news.pdf
index 632f821154..ff974735f1 100644
--- a/macros/latex/contrib/l3kernel/l3news.pdf
+++ b/macros/latex/contrib/l3kernel/l3news.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news01.pdf b/macros/latex/contrib/l3kernel/l3news01.pdf
index 118f018c57..d6af6a94e5 100644
--- a/macros/latex/contrib/l3kernel/l3news01.pdf
+++ b/macros/latex/contrib/l3kernel/l3news01.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news02.pdf b/macros/latex/contrib/l3kernel/l3news02.pdf
index 565b3058c5..3b9fb3e233 100644
--- a/macros/latex/contrib/l3kernel/l3news02.pdf
+++ b/macros/latex/contrib/l3kernel/l3news02.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news03.pdf b/macros/latex/contrib/l3kernel/l3news03.pdf
index eefd55ce6b..1ed36a2586 100644
--- a/macros/latex/contrib/l3kernel/l3news03.pdf
+++ b/macros/latex/contrib/l3kernel/l3news03.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news04.pdf b/macros/latex/contrib/l3kernel/l3news04.pdf
index f1b4fdd163..3f38bc64e1 100644
--- a/macros/latex/contrib/l3kernel/l3news04.pdf
+++ b/macros/latex/contrib/l3kernel/l3news04.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news05.pdf b/macros/latex/contrib/l3kernel/l3news05.pdf
index 30f9918fbc..27f25062b4 100644
--- a/macros/latex/contrib/l3kernel/l3news05.pdf
+++ b/macros/latex/contrib/l3kernel/l3news05.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news06.pdf b/macros/latex/contrib/l3kernel/l3news06.pdf
index 228a4c4346..1522296e77 100644
--- a/macros/latex/contrib/l3kernel/l3news06.pdf
+++ b/macros/latex/contrib/l3kernel/l3news06.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news07.pdf b/macros/latex/contrib/l3kernel/l3news07.pdf
index 0c036bb49d..1d7e8d46db 100644
--- a/macros/latex/contrib/l3kernel/l3news07.pdf
+++ b/macros/latex/contrib/l3kernel/l3news07.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news08.pdf b/macros/latex/contrib/l3kernel/l3news08.pdf
index c293ea58a3..9817c2739e 100644
--- a/macros/latex/contrib/l3kernel/l3news08.pdf
+++ b/macros/latex/contrib/l3kernel/l3news08.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news09.pdf b/macros/latex/contrib/l3kernel/l3news09.pdf
index 6ebf4d90a5..728d25b06b 100644
--- a/macros/latex/contrib/l3kernel/l3news09.pdf
+++ b/macros/latex/contrib/l3kernel/l3news09.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news10.pdf b/macros/latex/contrib/l3kernel/l3news10.pdf
index c4e1042f41..07e6da0ac5 100644
--- a/macros/latex/contrib/l3kernel/l3news10.pdf
+++ b/macros/latex/contrib/l3kernel/l3news10.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news11.pdf b/macros/latex/contrib/l3kernel/l3news11.pdf
index 146820f529..241f98de94 100644
--- a/macros/latex/contrib/l3kernel/l3news11.pdf
+++ b/macros/latex/contrib/l3kernel/l3news11.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news12.pdf b/macros/latex/contrib/l3kernel/l3news12.pdf
index 9d4811c54d..8b8859834a 100644
--- a/macros/latex/contrib/l3kernel/l3news12.pdf
+++ b/macros/latex/contrib/l3kernel/l3news12.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3pdf.dtx b/macros/latex/contrib/l3kernel/l3pdf.dtx
index b929276503..5a28010dde 100644
--- a/macros/latex/contrib/l3kernel/l3pdf.dtx
+++ b/macros/latex/contrib/l3kernel/l3pdf.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2022-08-05}
+% \date{Released 2022-08-23}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3prefixes.pdf b/macros/latex/contrib/l3kernel/l3prefixes.pdf
index 8bd5db2c04..bc82e9425a 100644
--- a/macros/latex/contrib/l3kernel/l3prefixes.pdf
+++ b/macros/latex/contrib/l3kernel/l3prefixes.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3prg.dtx b/macros/latex/contrib/l3kernel/l3prg.dtx
index 2ed4632e64..542dec79c8 100644
--- a/macros/latex/contrib/l3kernel/l3prg.dtx
+++ b/macros/latex/contrib/l3kernel/l3prg.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2022-08-05}
+% \date{Released 2022-08-23}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3prop.dtx b/macros/latex/contrib/l3kernel/l3prop.dtx
index a5726a0e7b..11b11e7e18 100644
--- a/macros/latex/contrib/l3kernel/l3prop.dtx
+++ b/macros/latex/contrib/l3kernel/l3prop.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2022-08-05}
+% \date{Released 2022-08-23}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3quark.dtx b/macros/latex/contrib/l3kernel/l3quark.dtx
index 452a2cb7d5..9d39718d8c 100644
--- a/macros/latex/contrib/l3kernel/l3quark.dtx
+++ b/macros/latex/contrib/l3kernel/l3quark.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2022-08-05}
+% \date{Released 2022-08-23}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3regex.dtx b/macros/latex/contrib/l3kernel/l3regex.dtx
index 32e7267129..049b1d46a4 100644
--- a/macros/latex/contrib/l3kernel/l3regex.dtx
+++ b/macros/latex/contrib/l3kernel/l3regex.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2022-08-05}
+% \date{Released 2022-08-23}
%
% \maketitle
%
@@ -8036,7 +8036,7 @@
\tl_if_empty:nTF {#1} { variable~ #2 } { {#1} } :
#3
}
-\prop_gput:Nnn \g_msg_module_name_prop { regex } { LaTeX3 }
+\prop_gput:Nnn \g_msg_module_name_prop { regex } { LaTeX }
\prop_gput:Nnn \g_msg_module_type_prop { regex } { }
% \end{macrocode}
%
diff --git a/macros/latex/contrib/l3kernel/l3seq.dtx b/macros/latex/contrib/l3kernel/l3seq.dtx
index fd9a8b3a02..41202a7949 100644
--- a/macros/latex/contrib/l3kernel/l3seq.dtx
+++ b/macros/latex/contrib/l3kernel/l3seq.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2022-08-05}
+% \date{Released 2022-08-23}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3skip.dtx b/macros/latex/contrib/l3kernel/l3skip.dtx
index 590b6bdf9f..1c2b4884e4 100644
--- a/macros/latex/contrib/l3kernel/l3skip.dtx
+++ b/macros/latex/contrib/l3kernel/l3skip.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2022-08-05}
+% \date{Released 2022-08-23}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3sort.dtx b/macros/latex/contrib/l3kernel/l3sort.dtx
index 75ced1644a..88489875ac 100644
--- a/macros/latex/contrib/l3kernel/l3sort.dtx
+++ b/macros/latex/contrib/l3kernel/l3sort.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2022-08-05}
+% \date{Released 2022-08-23}
%
% \maketitle
%
@@ -1083,7 +1083,7 @@
\iow_char:N\\sort_return_swapped: ~multiple~times.~
Exactly~one~of~these~should~be~called.
}
-\prop_gput:Nnn \g_msg_module_name_prop { sort } { LaTeX3 }
+\prop_gput:Nnn \g_msg_module_name_prop { sort } { LaTeX }
\prop_gput:Nnn \g_msg_module_type_prop { sort } { }
% \end{macrocode}
%
diff --git a/macros/latex/contrib/l3kernel/l3str-convert.dtx b/macros/latex/contrib/l3kernel/l3str-convert.dtx
index 7e9cf89a7a..7c35f41682 100644
--- a/macros/latex/contrib/l3kernel/l3str-convert.dtx
+++ b/macros/latex/contrib/l3kernel/l3str-convert.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2022-08-05}
+% \date{Released 2022-08-23}
%
% \maketitle
%
@@ -1686,10 +1686,10 @@
}
\prg_new_conditional:Npnn \@@_if_escape_string:N #1 { TF }
{
- \if_int_compare:w `#1 < "21 \exp_stop_f:
+ \if_int_compare:w `#1 < "27 \exp_stop_f:
\prg_return_false:
\else:
- \if_int_compare:w `#1 > "7E \exp_stop_f:
+ \if_int_compare:w `#1 > "7A \exp_stop_f:
\prg_return_false:
\else:
\prg_return_true:
@@ -1895,7 +1895,7 @@
Unicode~limits~code~points~to~the~range~[0,1114111].
}
}
-\prop_gput:Nnn \g_msg_module_name_prop { str } { LaTeX3 }
+\prop_gput:Nnn \g_msg_module_name_prop { str } { LaTeX }
\prop_gput:Nnn \g_msg_module_type_prop { str } { }
% \end{macrocode}
% \end{variable}
diff --git a/macros/latex/contrib/l3kernel/l3str.dtx b/macros/latex/contrib/l3kernel/l3str.dtx
index 5ad97df2f9..b9ad620959 100644
--- a/macros/latex/contrib/l3kernel/l3str.dtx
+++ b/macros/latex/contrib/l3kernel/l3str.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2022-08-05}
+% \date{Released 2022-08-23}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3styleguide.pdf b/macros/latex/contrib/l3kernel/l3styleguide.pdf
index ad6b0b5143..f198f8d225 100644
--- a/macros/latex/contrib/l3kernel/l3styleguide.pdf
+++ b/macros/latex/contrib/l3kernel/l3styleguide.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3styleguide.tex b/macros/latex/contrib/l3kernel/l3styleguide.tex
index fdce272778..81cc5e1347 100644
--- a/macros/latex/contrib/l3kernel/l3styleguide.tex
+++ b/macros/latex/contrib/l3kernel/l3styleguide.tex
@@ -32,7 +32,7 @@ The released version of this bundle is available from CTAN.
{latex-team@latex-project.org}%
}%
}
-\date{Released 2022-08-05}
+\date{Released 2022-08-23}
\begin{document}
diff --git a/macros/latex/contrib/l3kernel/l3syntax-changes.pdf b/macros/latex/contrib/l3kernel/l3syntax-changes.pdf
index 2bab90a411..eed70fbe05 100644
--- a/macros/latex/contrib/l3kernel/l3syntax-changes.pdf
+++ b/macros/latex/contrib/l3kernel/l3syntax-changes.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3syntax-changes.tex b/macros/latex/contrib/l3kernel/l3syntax-changes.tex
index 24770ec0a2..4afd7aac05 100644
--- a/macros/latex/contrib/l3kernel/l3syntax-changes.tex
+++ b/macros/latex/contrib/l3kernel/l3syntax-changes.tex
@@ -32,7 +32,7 @@ The released version of this bundle is available from CTAN.
{latex-team@latex-project.org}%
}%
}
-\date{Released 2022-08-05}
+\date{Released 2022-08-23}
\newcommand{\TF}{\textit{(TF)}}
diff --git a/macros/latex/contrib/l3kernel/l3sys.dtx b/macros/latex/contrib/l3kernel/l3sys.dtx
index 46263e0b2c..f2fb078a96 100644
--- a/macros/latex/contrib/l3kernel/l3sys.dtx
+++ b/macros/latex/contrib/l3kernel/l3sys.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2022-08-05}
+% \date{Released 2022-08-23}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3term-glossary.pdf b/macros/latex/contrib/l3kernel/l3term-glossary.pdf
index b7ebcec6f2..8fb11d26d2 100644
--- a/macros/latex/contrib/l3kernel/l3term-glossary.pdf
+++ b/macros/latex/contrib/l3kernel/l3term-glossary.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3term-glossary.tex b/macros/latex/contrib/l3kernel/l3term-glossary.tex
index 9a875c04ae..e45a40cd7b 100644
--- a/macros/latex/contrib/l3kernel/l3term-glossary.tex
+++ b/macros/latex/contrib/l3kernel/l3term-glossary.tex
@@ -32,7 +32,7 @@ The released version of this bundle is available from CTAN.
{latex-team@latex-project.org}%
}%
}
-\date{Released 2022-08-05}
+\date{Released 2022-08-23}
\newcommand{\TF}{\textit{(TF)}}
diff --git a/macros/latex/contrib/l3kernel/l3text-case.dtx b/macros/latex/contrib/l3kernel/l3text-case.dtx
index ef6751ac93..765a351667 100644
--- a/macros/latex/contrib/l3kernel/l3text-case.dtx
+++ b/macros/latex/contrib/l3kernel/l3text-case.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2022-08-05}
+% \date{Released 2022-08-23}
%
% \maketitle
%
@@ -1991,6 +1991,8 @@
{ 0179 } { 017A }
{ 017B } { 017C }
{ 017D } { 017E }
+ { 01A0 } { 01A1 }
+ { 01AF } { 01B0 }
{ 01CD } { 01CE }
{ 01CF } { 01D0 }
{ 01D1 } { 01D2 }
@@ -2203,7 +2205,7 @@
\@@_tmp:w { 00DF } { Ss } { title }
\@@_tmp:w { 0131 } { I } { upper }
% \end{macrocode}
-% Greek support: the three-octet code points.
+% Coverage for Vietnamese (\texttt{T5})
% \begin{macrocode}
\cs_set_protected:Npn \@@_tmp:nnnnnn #1#2#3#4#5#6#7
{
@@ -2246,6 +2248,57 @@
\@@_tmp:nnnnnn { title } {#5} {#6} {#7} {#1} {#2} {#3}
}
\@@_loop:nn
+ { 1EA0 } { 1EA1 }
+ { 1EA2 } { 1EA3 }
+ { 1EA4 } { 1EA5 }
+ { 1EA6 } { 1EA7 }
+ { 1EA8 } { 1EA9 }
+ { 1EAA } { 1EAB }
+ { 1EAC } { 1EAD }
+ { 1EAE } { 1EAF }
+ { 1EB0 } { 1EB1 }
+ { 1EB2 } { 1EB3 }
+ { 1EB4 } { 1EB5 }
+ { 1EB6 } { 1EB7 }
+ { 1EB8 } { 1EB9 }
+ { 1EBA } { 1EBB }
+ { 1EBC } { 1EBD }
+ { 1EBE } { 1EBF }
+ { 1EC0 } { 1EC1 }
+ { 1EC2 } { 1EC3 }
+ { 1EC4 } { 1EC5 }
+ { 1EC6 } { 1EC7 }
+ { 1EC8 } { 1EC9 }
+ { 1ECA } { 1ECB }
+ { 1ECC } { 1ECD }
+ { 1ECE } { 1ECF }
+ { 1ED0 } { 1ED1 }
+ { 1ED2 } { 1ED3 }
+ { 1ED4 } { 1ED5 }
+ { 1ED6 } { 1ED7 }
+ { 1ED8 } { 1ED9 }
+ { 1EDA } { 1EDB }
+ { 1EDC } { 1EDD }
+ { 1EDE } { 1EDF }
+ { 1EE0 } { 1EE1 }
+ { 1EE2 } { 1EE3 }
+ { 1EE4 } { 1EE5 }
+ { 1EE6 } { 1EE7 }
+ { 1EE8 } { 1EE9 }
+ { 1EEA } { 1EEB }
+ { 1EEC } { 1EED }
+ { 1EEE } { 1EEF }
+ { 1EF0 } { 1EF1 }
+ { 1EF2 } { 1EF3 }
+ { 1EF4 } { 1EF5 }
+ { 1EF6 } { 1EF7 }
+ { 1EF8 } { 1EF9 }
+ \q_recursion_tail ?
+ \q_recursion_stop
+% \end{macrocode}
+% Greek support: the three-octet code points.
+% \begin{macrocode}
+ \@@_loop:nn
{ 1F08 } { 1F00 }
{ 1F09 } { 1F01 }
{ 1F0A } { 1F02 }
diff --git a/macros/latex/contrib/l3kernel/l3text-purify.dtx b/macros/latex/contrib/l3kernel/l3text-purify.dtx
index 6006409985..966e3518c7 100644
--- a/macros/latex/contrib/l3kernel/l3text-purify.dtx
+++ b/macros/latex/contrib/l3kernel/l3text-purify.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2022-08-05}
+% \date{Released 2022-08-23}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3text.dtx b/macros/latex/contrib/l3kernel/l3text.dtx
index 67218edf30..df4f2fcde5 100644
--- a/macros/latex/contrib/l3kernel/l3text.dtx
+++ b/macros/latex/contrib/l3kernel/l3text.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2022-08-05}
+% \date{Released 2022-08-23}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3tl-analysis.dtx b/macros/latex/contrib/l3kernel/l3tl-analysis.dtx
index 8d9106b617..728284c8ac 100644
--- a/macros/latex/contrib/l3kernel/l3tl-analysis.dtx
+++ b/macros/latex/contrib/l3kernel/l3tl-analysis.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2022-08-05}
+% \date{Released 2022-08-23}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3tl.dtx b/macros/latex/contrib/l3kernel/l3tl.dtx
index e4a04070ba..647442b82a 100644
--- a/macros/latex/contrib/l3kernel/l3tl.dtx
+++ b/macros/latex/contrib/l3kernel/l3tl.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2022-08-05}
+% \date{Released 2022-08-23}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3token.dtx b/macros/latex/contrib/l3kernel/l3token.dtx
index 728a54a47a..5583b55eef 100644
--- a/macros/latex/contrib/l3kernel/l3token.dtx
+++ b/macros/latex/contrib/l3kernel/l3token.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2022-08-05}
+% \date{Released 2022-08-23}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3unicode.dtx b/macros/latex/contrib/l3kernel/l3unicode.dtx
index b2df6d94dd..8ae0f44fe8 100644
--- a/macros/latex/contrib/l3kernel/l3unicode.dtx
+++ b/macros/latex/contrib/l3kernel/l3unicode.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2022-08-05}
+% \date{Released 2022-08-23}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/source3.pdf b/macros/latex/contrib/l3kernel/source3.pdf
index 1e8781ca75..3d3159d396 100644
--- a/macros/latex/contrib/l3kernel/source3.pdf
+++ b/macros/latex/contrib/l3kernel/source3.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/source3.tex b/macros/latex/contrib/l3kernel/source3.tex
index 8340ef3659..587253a1e3 100644
--- a/macros/latex/contrib/l3kernel/source3.tex
+++ b/macros/latex/contrib/l3kernel/source3.tex
@@ -53,7 +53,7 @@ for those people who are interested.
{latex-team@latex-project.org}%
}%
}
-\date{Released 2022-08-05}
+\date{Released 2022-08-23}
\pagenumbering{roman}
\maketitle
diff --git a/macros/latex/contrib/pseudo/VERSION b/macros/latex/contrib/pseudo/VERSION
index 5625e59da8..6085e94650 100644
--- a/macros/latex/contrib/pseudo/VERSION
+++ b/macros/latex/contrib/pseudo/VERSION
@@ -1 +1 @@
-1.2
+1.2.1
diff --git a/macros/latex/contrib/pseudo/doc/pseudo.pdf b/macros/latex/contrib/pseudo/doc/pseudo.pdf
index a33aa551c2..920266e118 100644
--- a/macros/latex/contrib/pseudo/doc/pseudo.pdf
+++ b/macros/latex/contrib/pseudo/doc/pseudo.pdf
Binary files differ
diff --git a/macros/latex/contrib/pseudo/doc/pseudo.tex b/macros/latex/contrib/pseudo/doc/pseudo.tex
index c5fc55456f..21e640267c 100644
--- a/macros/latex/contrib/pseudo/doc/pseudo.tex
+++ b/macros/latex/contrib/pseudo/doc/pseudo.tex
@@ -3806,9 +3806,10 @@ variants we'll need of some standard commands. (I'm using the
\verb|\q_no_value| machinery rather than \verb|\c_novalue_tl| for
compatibility with older \TeX\ distributions.)
\begin{source}
-\cs_generate_variant:Nn \quark_if_no_value:nTF { VTF }
-\cs_generate_variant:Nn \tl_if_novalue:nTF { VTF }
-\cs_generate_variant:Nn \tl_set:Nn { Ne }
+\cs_generate_variant:Nn \quark_if_no_value:nTF { VTF }
+\cs_generate_variant:Nn \tl_if_novalue:nTF { VTF }
+\cs_generate_variant:Nn \tl_set:Nn { Ne }
+\exp_args_generate:n { NNVNNV }
\end{source}
\paragraph{Defining columns.} The \refk{preamble} is is configurable, but the
\pkg{array} package makes sure it doesn't expand any part of its preamble. One
@@ -4591,10 +4592,12 @@ latter of the two really shouldn't.\footnote{See
\begin{source}
\cs_new:Npn \@@_keys_set_overlay:nnn #1 #2 #3 {
\bool_if:NT \c_@@_beamer_bool {
- \only<#1>{ \keys_set:nn { #2 } { #3 } }
+ \tl_if_novalue:nF { #1 } {
+ \only<#1>{ \keys_set:nn { #2 } { #3 } }
+ }
}
}
-\cs_generate_variant:Nn \@@_keys_set_overlay:nnn { VnV }
+
\msg_new:nnn { pseudo } { unknown-key } {
Unknown~key~'#1'~ignored.
}
@@ -4606,6 +4609,12 @@ latter of the two really shouldn't.\footnote{See
\group_begin:
+ \int_zero:N \l_tmpa_int
+ \int_zero:N \l_tmpb_int
+
+ \tl_clear:N \l_tmpa_tl
+ \tl_clear:N \l_tmpb_tl
+
\tl_map_inline:Nn \l_keys_key_tl {
\tl_if_eq:nnTF { ##1 } { < } {
@@ -4652,8 +4661,16 @@ specification.
\tl_if_blank:nF{ #1 } {
\tl_put_right:Nn \l_tmpb_tl {= #1}
}
- \@@_keys_set_overlay:VnV
- \l_@@_overlay_tl { pseudo } \l_tmpb_tl
+\end{source}
+Rather than setting the keys here, inside a group, we put the code into a
+variable that we'll expand outside the group, later:
+\begin{source}
+ \tl_set:Nn \l_tmpa_tl {
+ \@@_keys_set_overlay:nnn
+ }
+ \tl_put_right:Nx \l_tmpa_tl { { \l_@@_overlay_tl } }
+ \tl_put_right:Nn \l_tmpa_tl { { pseudo } }
+ \tl_put_right:Nx \l_tmpa_tl { { \l_tmpb_tl } }
} {
\end{source}
We have \emph{not} matched an overlay specification, so we just have an unknown
@@ -4662,7 +4679,10 @@ arguments to \refc{\bslash}, we also permit a keyless value to be used to
specify extra space (normally done using \refk{extra-space}). If the unknown
key doesn't have an attached (non-blank) value, we treat the key itself as a
value, and use it as extra space. If this, too, fails, we emit an error message.
+Note that we'll also make sure the variable with the key-setting code is
+empty.
\begin{source}
+ \tl_clear:N \l_tmpa_tl
\bool_if:nTF {
\bool_lazy_and_p:nn
{ \l_@@_in_eol_bool }
@@ -4678,10 +4698,15 @@ value, and use it as extra space. If this, too, fails, we emit an error message.
}
}
- % Make sure extra space carries over outside the group:
- \exp_args:NNNV
+ % Make sure extra space and key-setting carry over
+ % outside the group:
+ \exp_args:NNNVNNV
\group_end:
\tl_set:Nn \l_@@_extra_space_tl \l_@@_extra_space_tl
+ \tl_set:Nn \l_tmpa_tl \l_tmpa_tl
+
+ % Run the key-setting code with overlay specification:
+ \l_tmpa_tl
}
diff --git a/macros/latex/contrib/pseudo/pseudo.sty b/macros/latex/contrib/pseudo/pseudo.sty
index 850b19fa14..2634ab7d38 100644
--- a/macros/latex/contrib/pseudo/pseudo.sty
+++ b/macros/latex/contrib/pseudo/pseudo.sty
@@ -20,8 +20,8 @@
% OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
% SOFTWARE.
%
-\def \pseudoversion {1.2}
-\def \pseudodate {2022/07/14}
+\def \pseudoversion {1.2.1}
+\def \pseudodate {2022/08/23}
\RequirePackage{expl3}
\ProvidesExplPackage
{pseudo}
@@ -44,9 +44,10 @@
\int_new:N \g__pseudo_indent_level_int
\int_new:N \l__pseudo_initial_indent_level_int
\bool_new:N \l__pseudo_in_eol_bool
-\cs_generate_variant:Nn \quark_if_no_value:nTF { VTF }
-\cs_generate_variant:Nn \tl_if_novalue:nTF { VTF }
-\cs_generate_variant:Nn \tl_set:Nn { Ne }
+\cs_generate_variant:Nn \quark_if_no_value:nTF { VTF }
+\cs_generate_variant:Nn \tl_if_novalue:nTF { VTF }
+\cs_generate_variant:Nn \tl_set:Nn { Ne }
+\exp_args_generate:n { NNVNNV }
\cs_new:Npn \__pseudo_undef_col:n #1 {
\tl_set_eq:cN { NC@find@ \token_to_str:N #1 } \scan_stop:
}
@@ -455,10 +456,11 @@
}
\cs_new:Npn \__pseudo_keys_set_overlay:nnn #1 #2 #3 {
\bool_if:NT \c__pseudo_beamer_bool {
- \only<#1>{ \keys_set:nn { #2 } { #3 } }
+ \tl_if_novalue:nF { #1 } {
+ \only<#1>{ \keys_set:nn { #2 } { #3 } }
+ }
}
}
-\cs_generate_variant:Nn \__pseudo_keys_set_overlay:nnn { VnV }
\msg_new:nnn { pseudo } { unknown-key } {
Unknown~key~'#1'~ignored.
}
@@ -466,6 +468,10 @@
\keys_define:nn { pseudo } {
unknown .code:n = {
\group_begin:
+ \int_zero:N \l_tmpa_int
+ \int_zero:N \l_tmpb_int
+ \tl_clear:N \l_tmpa_tl
+ \tl_clear:N \l_tmpb_tl
\tl_map_inline:Nn \l_keys_key_tl {
\tl_if_eq:nnTF { ##1 } { < } {
\int_incr:N \l_tmpa_int
@@ -491,9 +497,14 @@
\tl_if_blank:nF{ #1 } {
\tl_put_right:Nn \l_tmpb_tl {= #1}
}
- \__pseudo_keys_set_overlay:VnV
- \l__pseudo_overlay_tl { pseudo } \l_tmpb_tl
+ \tl_set:Nn \l_tmpa_tl {
+ \__pseudo_keys_set_overlay:nnn
+ }
+ \tl_put_right:Nx \l_tmpa_tl { { \l__pseudo_overlay_tl } }
+ \tl_put_right:Nn \l_tmpa_tl { { pseudo } }
+ \tl_put_right:Nx \l_tmpa_tl { { \l_tmpb_tl } }
} {
+ \tl_clear:N \l_tmpa_tl
\bool_if:nTF {
\bool_lazy_and_p:nn
{ \l__pseudo_in_eol_bool }
@@ -508,9 +519,11 @@
{ \l_keys_path_str }
}
}
- \exp_args:NNNV
+ \exp_args:NNNVNNV
\group_end:
\tl_set:Nn \l__pseudo_extra_space_tl \l__pseudo_extra_space_tl
+ \tl_set:Nn \l_tmpa_tl \l_tmpa_tl
+ \l_tmpa_tl
}
}
\cs_new:Npn \__pseudo_set:n #1 { \keys_set:nn { pseudo } { #1 } }
diff --git a/macros/latex/contrib/pseudo/test/overlaytest.tex b/macros/latex/contrib/pseudo/test/overlaytest.tex
new file mode 100644
index 0000000000..44bdb77c7a
--- /dev/null
+++ b/macros/latex/contrib/pseudo/test/overlaytest.tex
@@ -0,0 +1,12 @@
+\documentclass{beamer}
+\usepackage{pseudo}
+
+\begin{document}
+\begin{frame}
+\begin{pseudo}
+ foo \\[dim<2->]
+ bar \\[dim<3>]
+ baz
+\end{pseudo}
+\end{frame}
+\end{document}
diff --git a/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl b/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
index f3e461a060..9a2c573b6c 100644
--- a/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
+++ b/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
@@ -10,6 +10,7 @@ $mirrors = {
},
'Asia' => {
'China' => {
+ 'https://mirror.bjtu.edu.cn/CTAN/' => 1,
'https://mirrors.aliyun.com/CTAN/' => 1,
'https://mirrors.bfsu.edu.cn/CTAN/' => 1,
'https://mirrors.cqu.edu.cn/CTAN/' => 1,
@@ -46,8 +47,10 @@ $mirrors = {
'Korea' => {
'http://ftp.ktug.org/tex-archive/' => 1,
'https://cran.asia/tex/' => 1,
+ 'https://ftp.harukasan.org/CTAN/' => 1,
'https://ftp.kaist.ac.kr/pub/tex-archive/' => 1,
'https://lab.uklee.pe.kr/tex-archive/' => 1,
+ 'https://mirror.kakao.com/CTAN/' => 1,
'https://mirror.navercorp.com/CTAN/' => 1,
},
'Philippines' => {
@@ -190,6 +193,7 @@ $mirrors = {
'https://mirror.las.iastate.edu/tex-archive/' => 1,
'https://mirror.math.princeton.edu/pub/CTAN/' => 1,
'https://mirror.mwt.me/ctan/' => 1,
+ 'https://mirror2.sandyriver.net/pub/ctan/' => 1,
'https://mirrors.concertpass.com/tex-archive/' => 1,
'https://mirrors.mit.edu/CTAN/' => 1,
'https://mirrors.rit.edu/CTAN/' => 1,
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb b/systems/texlive/tlnet/tlpkg/texlive.tlpdb
index 2f2418cff0..74b5946bfc 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb
@@ -26,11 +26,11 @@ depend container_split_src_files/1
depend frozen/0
depend minrelease/2016
depend release/2022
-depend revision/64168
+depend revision/64181
name 00texlive.image
category TLCore
-revision 64166
+revision 64182
shortdesc TeX Live files only in the source repository
longdesc The files here are not copied by the installer and containers
longdesc are not built for them; they exist only in the source
@@ -40,7 +40,7 @@ longdesc IgnorePatterns in the check_files routine in tlmgr.pl augment
longdesc this list. Those are not included in the source/ tarball. For
longdesc information on the 00texlive prefix see
longdesc 00texlive.installation(.tlpsrc)
-runfiles size=12913
+runfiles size=12915
.mkisofsrc
autorun.inf
texmf-dist/README
@@ -730,6 +730,7 @@ runfiles size=12913
tlpkg/tlpsrc/bib-fr.tlpsrc
tlpkg/tlpsrc/bib2gls.tlpsrc
tlpkg/tlpsrc/bibarts.tlpsrc
+ tlpkg/tlpsrc/biber-ms.tlpsrc
tlpkg/tlpsrc/biber.tlpsrc
tlpkg/tlpsrc/bibexport.tlpsrc
tlpkg/tlpsrc/bibhtml.tlpsrc
@@ -770,6 +771,7 @@ runfiles size=12913
tlpkg/tlpsrc/biblatex-manuscripts-philology.tlpsrc
tlpkg/tlpsrc/biblatex-mla.tlpsrc
tlpkg/tlpsrc/biblatex-morenames.tlpsrc
+ tlpkg/tlpsrc/biblatex-ms.tlpsrc
tlpkg/tlpsrc/biblatex-multiple-dm.tlpsrc
tlpkg/tlpsrc/biblatex-musuos.tlpsrc
tlpkg/tlpsrc/biblatex-nature.tlpsrc
@@ -4613,7 +4615,7 @@ depend setting_available_architectures:aarch64-linux amd64-freebsd amd64-netbsd
name 00texlive.installer
category TLCore
-revision 64163
+revision 64170
shortdesc TeX Live standalone installer package
longdesc This package defines the files to go into the installer
longdesc archives (install-tl-unx.tar.gz, install-tl.zip) built by the
@@ -22393,24 +22395,26 @@ catalogue-topics font font-type1 font-virtual font-ttf
name armtex
category Package
-revision 64119
-shortdesc A system for writing Armenian with TeX and LaTeX
+revision 64182
+shortdesc A system for writing in Armenian with TeX and LaTeX
relocated 1
longdesc ArmTeX is a system for typesetting Armenian text with Plain TeX
longdesc or LaTeX(2e). It may be used with input: from a standard Latin
longdesc keyboard without any special encoding and/or support for
-longdesc Armenian letters, any keyboard which uses an encoding that has
-longdesc Armenian letters in the second half (characters 128-255) of the
-longdesc extended ASCII table (for example ArmSCII8 Armenian standard),
-longdesc or encoded in UTF-8. Users should note that the manuals (below)
-longdesc mostly describe the previous (version 2.0) of the package.
-longdesc Updating work is still under way.
+longdesc Armenian letters, from any keyboard which uses an encoding that
+longdesc has Armenian letters in the second half (characters 128-255) of
+longdesc the extended ASCII table (for example ArmSCII8 Armenian
+longdesc standard), from an Armenian keyboard using UTF-8 encoding.
+longdesc Users should note that the manuals still mostly describe the
+longdesc previous version of the package (ArmTeX 2.0). However, a
+longdesc description of the new features of ArmTeX 3.0 is provided at
+longdesc the end of the README file.
execute addMixedMap arss.map
execute addMixedMap artm.map
-containersize 527780
-containerchecksum ff90c5f2740537e4c8054e77602cd3658e65ab70d3582cc1c669ed428501bc840b2eed14cadad7e775a55fed85507874b7568dfdf980ccbdabc93db247883fc3
+containersize 527820
+containerchecksum 853eceb3256407c75cf7d74a514ab8c76f44229c80e740072c3fe2cff17eb47a99b683d089a30c759e6ec5fd14451ee9c94a290cc2606248b6e396f6ca7de5b1
doccontainersize 431480
-doccontainerchecksum c7b64f2c84a8316b225138ca3214e252aba115e6534850deef36a7427a30842cd9739d67ed4d5271172388f0b5ef656da13e1b798766b6f9351cde7c81e0431e
+doccontainerchecksum f26c90f18e534735f910f8ea34bce63f21bcb029b6b621398109adb4d99e6ef4470e76037a16b6a86b8ef8e4331267adaf3779772aadb1009d4222d500e26114
docfiles size=177
RELOC/doc/generic/armenian/README details="Readme"
RELOC/doc/generic/armenian/examples/latex/alphabet.tex
@@ -33907,7 +33911,7 @@ catalogue-version 0.2
name beamerswitch
category Package
-revision 58873
+revision 64182
shortdesc Convenient mode selection in Beamer documents
relocated 1
longdesc This class is a wrapper around the beamer class to make it
@@ -33919,11 +33923,11 @@ longdesc transcript or set of notes using the article class. The class
longdesc provides a variety of handout layouts, and allows the mode to
longdesc be chosen from the command line (without changing the document
longdesc itself).
-containersize 4872
-containerchecksum 9fff5ac8406dd4bc0e76f3b01678c1c2d4dc089ba819e873121b6ae43054356a666101c0e044fc06f4ce40a49468c08b1436370a0836f54705da4df610b610dc
-doccontainersize 257736
-doccontainerchecksum 59e94176d8d2197be538aead029ad03d77632fa062a1fcfd911fdf7a2e1f27e54cab4b816f36ce4b4c6b63c7244333e2d0ae8448fb3f85edccc79309e76fb5a1
-docfiles size=79
+containersize 4936
+containerchecksum 43b91dddb86a5f0158a6181a931a4a68eddbef350917f59df7a281e89f6b87d3db652146094eb46fd89d46f6564d1bcb2f278e34a6ee2738d7c4a817ed1db37c
+doccontainersize 264708
+doccontainerchecksum 1cbab77e0b5482eed26fc7364877cde6094edb23ad353340172b278d4728024b5187df2982f3985899bcbd626aa77fc2423d8dfc4936b6d32f62cace50a4d058
+docfiles size=80
RELOC/doc/latex/beamerswitch/README.md details="Readme"
RELOC/doc/latex/beamerswitch/beamerswitch-example-article.pdf details="Example of use (article)"
RELOC/doc/latex/beamerswitch/beamerswitch-example-handout.pdf details="Example of use (handout)"
@@ -33931,9 +33935,9 @@ docfiles size=79
RELOC/doc/latex/beamerswitch/beamerswitch-example.pdf details="Example of use (slides, with overlays)"
RELOC/doc/latex/beamerswitch/beamerswitch-example.tex
RELOC/doc/latex/beamerswitch/beamerswitch.pdf details="Package documentation"
-srccontainersize 20464
-srccontainerchecksum c81324917cb69eb02ceef698c5b2f1efc42a055328c5a67882ef2d315769388e311c5c58f3a532f644d166af28aff98830cc39ed94bd8851d79247aaa68c1af4
-srcfiles size=27
+srccontainersize 20600
+srccontainerchecksum 0b6ddd42fffe3a1c85c94e0262b156222b0673b1d8d6f54d3f196154eec4a1fe6ccc44d8c34ab04c496e1635e8bf4555bbcb835dda0ed52e780d904d3a797610
+srcfiles size=28
RELOC/source/latex/beamerswitch/Makefile
RELOC/source/latex/beamerswitch/beamerswitch.dtx
runfiles size=12
@@ -33943,7 +33947,7 @@ catalogue-contact-repository https://github.com/alex-ball/beamerswitch
catalogue-ctan /macros/latex/contrib/beamer-contrib/beamerswitch
catalogue-license lppl1.3c
catalogue-topics presentation class
-catalogue-version 1.8
+catalogue-version 1.9
name beamertheme-arguelles
category Package
@@ -36287,6 +36291,83 @@ catalogue-license artistic2
catalogue-topics biblio
catalogue-version 2.18
+name biber-ms
+category Package
+revision 64180
+shortdesc A BibTeX replacement for users of BibLaTeX (multiscript version)
+longdesc This is the multiscript version of biber (biber-ms) and must be
+longdesc used with the multiscript version of biblatex-ms
+depend biber-ms.ARCH
+containersize 500
+containerchecksum 154a3c7636f07b8332911f30b987c01200607ea33bef7602fa212f6a9d00af83694eecccdb7d880d6d2afad4b0c11db639236a813569485e685f934413322700
+doccontainersize 258712
+doccontainerchecksum a66e09a326fa44f48e167410f85b4d020cb22964d07ae2adfd57e848c84e1c889e641a15c2af76dd2dac3122a7ebda95c2448f5916e910a9a34e9025b114034c
+docfiles size=65
+ texmf-dist/doc/bibtex/biber-ms/biber-ms.pdf details="Manual"
+srccontainersize 945476
+srccontainerchecksum 3507d87b6d02da665f07b285f30f8ddaabd37f56b707fc3d20db6e0bd913e469762245c8693eb6fa0c0a55057e00062345081100d71edd4b3eaf74e76a699313
+srcfiles size=300
+ texmf-dist/source/bibtex/biber-ms/Changes
+ texmf-dist/source/bibtex/biber-ms/README.biber-ms-linux
+ texmf-dist/source/bibtex/biber-ms/README.biber-ms-macos
+ texmf-dist/source/bibtex/biber-ms/README.biber-ms-windows
+ texmf-dist/source/bibtex/biber-ms/README.md
+ texmf-dist/source/bibtex/biber-ms/biblatex-biber-ms.tar.gz
+ texmf-dist/source/bibtex/biber-ms/utf8-macro-map.html
+catalogue-also bibtex crosstex biblatex
+catalogue-contact-bugs https://github.com/plk/biber/issues
+catalogue-contact-home http://biblatex-biber.sourceforge.net/
+catalogue-contact-repository https://github.com/plk/biber
+catalogue-ctan /biblio/biber-ms/base
+catalogue-license artistic2
+catalogue-topics biblio
+catalogue-version 4.0
+
+name biber-ms.i386-linux
+category Package
+revision 64180
+shortdesc i386-linux files of biber-ms
+containersize 21092560
+containerchecksum 2f9d09d4a8469a6ce79aaac0a059fdb485356f09aaf5ae3e4a5e06c47453318933807683ec79b5336e51b40f6caf19373a49f5730e87d01e2412bac1a450ee68
+binfiles arch=i386-linux size=6563
+ bin/i386-linux/biber-ms
+
+name biber-ms.universal-darwin
+category Package
+revision 64180
+shortdesc universal-darwin files of biber-ms
+containersize 86793064
+containerchecksum 676716c63a1f8c2179b3bda7e2d43b3054dc511c76fbc23a7f40b66cac2480db42722b6edd2ca394fd992d7ab4ce02f3871a260111ace708d6ba6688e0ae8db6
+binfiles arch=universal-darwin size=24534
+ bin/universal-darwin/biber-ms
+
+name biber-ms.win32
+category Package
+revision 64180
+shortdesc win32 files of biber-ms
+containersize 22842996
+containerchecksum e523d4a8fd77e85067bbe1bdf8dcc6d51794f318c687cc3de6d752c0e38c5b1027dddfac040dead4dc74613be73393618d4cfd82c8ace79dcf060c48663c08da
+binfiles arch=win32 size=7291
+ bin/win32/biber-ms.exe
+
+name biber-ms.x86_64-darwinlegacy
+category Package
+revision 64180
+shortdesc x86_64-darwinlegacy files of biber-ms
+containersize 35440240
+containerchecksum ad3c270f3cdb8157c6107fa71d61d435f739717280ead6890b3a5747bdf6b5a9eb30735a3fab0c947a734e4dafb5f344d6387bd0dbda29fb557f7a2f784dc5e9
+binfiles arch=x86_64-darwinlegacy size=10220
+ bin/x86_64-darwinlegacy/biber-ms
+
+name biber-ms.x86_64-linux
+category Package
+revision 64180
+shortdesc x86_64-linux files of biber-ms
+containersize 23549548
+containerchecksum 84e7bb39053e3642210e545db13e234ca4bfc85c8782bee5c90b7215f6eeeed0e9991357093ae90ea8a09f2265f7d58e09d67d3c74521eecd502b175f36dd83a
+binfiles arch=x86_64-linux size=7333
+ bin/x86_64-linux/biber-ms
+
name biber.amd64-freebsd
category Package
revision 63965
@@ -38891,6 +38972,326 @@ catalogue-license lppl1.3
catalogue-topics humanities biblatex
catalogue-version 1.3.1
+name biblatex-ms
+category Package
+revision 64180
+shortdesc Sophisticated Bibliographies in LaTeX (multiscript version)
+relocated 1
+longdesc This package is the "multiscript" version of the BibLaTeX
+longdesc package intended to solve the issues faced by those wishing to
+longdesc create multiligual bibliographies. It is intended to be
+longdesc backwards-compatible with the standard BibLaTeX package and
+longdesc includes significantly enhanced optional functionality: Fields
+longdesc in data files can have different form/language alternates in
+longdesc the same entry Options to select/print a specific alternate are
+longdesc generally available babel/polyglossia language switching is
+longdesc done automatically based on the language associated with a
+longdesc field The intention is that this version will eventually
+longdesc replace standard BibLaTeX and is being released as an
+longdesc independent package to allow for wider testing and feedback. It
+longdesc can be installed in parallel with standard BibLaTeX and the
+longdesc package name is biblatex-ms. It requires the use of the
+longdesc multiscript version of biber (biber-ms).
+depend etoolbox
+depend kvoptions
+depend logreq
+depend pdftexcmds
+depend url
+containersize 248772
+containerchecksum cef1cecae6fa89d761f5eda158e495e40e0e77500eec84e4a08df7bacfa3a03fffe1b8e50b27e9456cbd6f393fae6293e61df69faa21e5a245e18c2b13722d86
+doccontainersize 7479136
+doccontainerchecksum 9dce37ce0bc21b81bfbaeb2855b81089fb32c3a8b4547ec8197638d1063f2b126f4e94e3dab6164beab71abb66f8a2cce9e4f7efd5494295556156c55679f586
+docfiles size=4997
+ RELOC/doc/latex/biblatex-ms/CHANGES-ms.md details="Release notes for current version" language="en"
+ RELOC/doc/latex/biblatex-ms/README details="Readme" language="en"
+ RELOC/doc/latex/biblatex-ms/biber/bltxml/biblatex-examples-ms.bltxml
+ RELOC/doc/latex/biblatex-ms/biblatex-ms.pdf details="Package documentation (English)" language="en"
+ RELOC/doc/latex/biblatex-ms/biblatex-ms.tex
+ RELOC/doc/latex/biblatex-ms/bibtex/bib/biblatex/biblatex-examples-ms.bib
+ RELOC/doc/latex/biblatex-ms/examples/01-introduction-biber-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/01-introduction-bibtex-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/01-introduction-ms.tex
+ RELOC/doc/latex/biblatex-ms/examples/01-introduction.run-ms.xml
+ RELOC/doc/latex/biblatex-ms/examples/02-annotations-biber-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/02-annotations-bibtex-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/02-annotations-ms.tex
+ RELOC/doc/latex/biblatex-ms/examples/03-localization-keys-biber-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/03-localization-keys-bibtex-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/03-localization-keys-ms.tex
+ RELOC/doc/latex/biblatex-ms/examples/04-delimiters-biber-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/04-delimiters-bibtex-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/04-delimiters-ms.tex
+ RELOC/doc/latex/biblatex-ms/examples/10-references-per-section-biber-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/10-references-per-section-bibtex-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/10-references-per-section-ms.tex
+ RELOC/doc/latex/biblatex-ms/examples/11-references-by-section-biber-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/11-references-by-section-bibtex-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/11-references-by-section-ms.tex
+ RELOC/doc/latex/biblatex-ms/examples/12-references-by-segment-biber-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/12-references-by-segment-bibtex-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/12-references-by-segment-ms.tex
+ RELOC/doc/latex/biblatex-ms/examples/13-references-by-keyword-biber-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/13-references-by-keyword-bibtex-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/13-references-by-keyword-ms.tex
+ RELOC/doc/latex/biblatex-ms/examples/14-references-by-category-biber-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/14-references-by-category-bibtex-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/14-references-by-category-ms.tex
+ RELOC/doc/latex/biblatex-ms/examples/15-references-by-type-biber-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/15-references-by-type-bibtex-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/15-references-by-type-ms.tex
+ RELOC/doc/latex/biblatex-ms/examples/16-numeric-prefixed-1-biber-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/16-numeric-prefixed-1-bibtex-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/16-numeric-prefixed-1-ms.tex
+ RELOC/doc/latex/biblatex-ms/examples/17-numeric-prefixed-2-biber-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/17-numeric-prefixed-2-bibtex-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/17-numeric-prefixed-2-ms.tex
+ RELOC/doc/latex/biblatex-ms/examples/18-numeric-hybrid-biber-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/18-numeric-hybrid-bibtex-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/18-numeric-hybrid-ms.tex
+ RELOC/doc/latex/biblatex-ms/examples/19-alphabetic-prefixed-biber-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/19-alphabetic-prefixed-bibtex-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/19-alphabetic-prefixed-ms.tex
+ RELOC/doc/latex/biblatex-ms/examples/20-indexing-single-biber-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/20-indexing-single-bibtex-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/20-indexing-single-ms.tex
+ RELOC/doc/latex/biblatex-ms/examples/21-indexing-multiple-biber-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/21-indexing-multiple-bibtex-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/21-indexing-multiple-ms.tex
+ RELOC/doc/latex/biblatex-ms/examples/22-indexing-subentry-biber-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/22-indexing-subentry-bibtex-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/22-indexing-subentry-ms.tex
+ RELOC/doc/latex/biblatex-ms/examples/30-style-numeric-biber-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/30-style-numeric-bibtex-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/30-style-numeric-ms.tex
+ RELOC/doc/latex/biblatex-ms/examples/31-style-numeric-comp-biber-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/31-style-numeric-comp-bibtex-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/31-style-numeric-comp-ms.tex
+ RELOC/doc/latex/biblatex-ms/examples/32-style-numeric-verb-biber-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/32-style-numeric-verb-bibtex-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/32-style-numeric-verb-ms.tex
+ RELOC/doc/latex/biblatex-ms/examples/40-style-alphabetic-biber-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/40-style-alphabetic-bibtex-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/40-style-alphabetic-ms.tex
+ RELOC/doc/latex/biblatex-ms/examples/41-style-alphabetic-verb-biber-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/41-style-alphabetic-verb-bibtex-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/41-style-alphabetic-verb-ms.tex
+ RELOC/doc/latex/biblatex-ms/examples/42-style-alphabetic-template-biber-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/42-style-alphabetic-template-bibtex-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/42-style-alphabetic-template-ms.tex
+ RELOC/doc/latex/biblatex-ms/examples/50-style-authoryear-biber-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/50-style-authoryear-bibtex-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/50-style-authoryear-ms.tex
+ RELOC/doc/latex/biblatex-ms/examples/51-style-authoryear-ibid-biber-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/51-style-authoryear-ibid-bibtex-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/51-style-authoryear-ibid-ms.tex
+ RELOC/doc/latex/biblatex-ms/examples/52-style-authoryear-comp-biber-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/52-style-authoryear-comp-bibtex-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/52-style-authoryear-comp-ms.tex
+ RELOC/doc/latex/biblatex-ms/examples/53-style-authoryear-icomp-biber-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/53-style-authoryear-icomp-bibtex-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/53-style-authoryear-icomp-ms.tex
+ RELOC/doc/latex/biblatex-ms/examples/60-style-authortitle-biber-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/60-style-authortitle-bibtex-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/60-style-authortitle-ms.tex
+ RELOC/doc/latex/biblatex-ms/examples/61-style-authortitle-ibid-biber-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/61-style-authortitle-ibid-bibtex-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/61-style-authortitle-ibid-ms.tex
+ RELOC/doc/latex/biblatex-ms/examples/62-style-authortitle-comp-biber-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/62-style-authortitle-comp-bibtex-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/62-style-authortitle-comp-ms.tex
+ RELOC/doc/latex/biblatex-ms/examples/63-style-authortitle-icomp-biber-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/63-style-authortitle-icomp-bibtex-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/63-style-authortitle-icomp-ms.tex
+ RELOC/doc/latex/biblatex-ms/examples/64-style-authortitle-terse-biber-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/64-style-authortitle-terse-bibtex-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/64-style-authortitle-terse-ms.tex
+ RELOC/doc/latex/biblatex-ms/examples/65-style-authortitle-tcomp-biber-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/65-style-authortitle-tcomp-bibtex-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/65-style-authortitle-tcomp-ms.tex
+ RELOC/doc/latex/biblatex-ms/examples/66-style-authortitle-ticomp-biber-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/66-style-authortitle-ticomp-bibtex-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/66-style-authortitle-ticomp-ms.tex
+ RELOC/doc/latex/biblatex-ms/examples/70-style-verbose-biber-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/70-style-verbose-bibtex-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/70-style-verbose-ms.tex
+ RELOC/doc/latex/biblatex-ms/examples/71-style-verbose-ibid-biber-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/71-style-verbose-ibid-bibtex-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/71-style-verbose-ibid-ms.tex
+ RELOC/doc/latex/biblatex-ms/examples/72-style-verbose-note-biber-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/72-style-verbose-note-bibtex-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/72-style-verbose-note-ms.tex
+ RELOC/doc/latex/biblatex-ms/examples/73-style-verbose-inote-biber-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/73-style-verbose-inote-bibtex-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/73-style-verbose-inote-ms.tex
+ RELOC/doc/latex/biblatex-ms/examples/74-style-verbose-trad1-biber-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/74-style-verbose-trad1-bibtex-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/74-style-verbose-trad1-ms.tex
+ RELOC/doc/latex/biblatex-ms/examples/75-style-verbose-trad2-biber-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/75-style-verbose-trad2-bibtex-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/75-style-verbose-trad2-ms.tex
+ RELOC/doc/latex/biblatex-ms/examples/76-style-verbose-trad3-biber-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/76-style-verbose-trad3-bibtex-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/76-style-verbose-trad3-ms.tex
+ RELOC/doc/latex/biblatex-ms/examples/80-style-reading-biber-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/80-style-reading-bibtex-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/80-style-reading-ms.tex
+ RELOC/doc/latex/biblatex-ms/examples/81-style-draft-biber-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/81-style-draft-bibtex-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/81-style-draft-ms.tex
+ RELOC/doc/latex/biblatex-ms/examples/82-style-debug-biber-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/82-style-debug-bibtex-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/82-style-debug-ms.tex
+ RELOC/doc/latex/biblatex-ms/examples/90-related-entries-biber-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/90-related-entries-ms.tex
+ RELOC/doc/latex/biblatex-ms/examples/91-sorting-schemes-biber-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/91-sorting-schemes-ms.tex
+ RELOC/doc/latex/biblatex-ms/examples/92-bibliographylists-biber-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/92-bibliographylists-ms.tex
+ RELOC/doc/latex/biblatex-ms/examples/93-nameparts-biber-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/93-nameparts-ms.dbx
+ RELOC/doc/latex/biblatex-ms/examples/93-nameparts-ms.tex
+ RELOC/doc/latex/biblatex-ms/examples/94-labelprefix-biber-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/94-labelprefix-ms.tex
+ RELOC/doc/latex/biblatex-ms/examples/95-customlists-biber-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/95-customlists-ms.bib
+ RELOC/doc/latex/biblatex-ms/examples/95-customlists-ms.dbx
+ RELOC/doc/latex/biblatex-ms/examples/95-customlists-ms.tex
+ RELOC/doc/latex/biblatex-ms/examples/96-dates-biber-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/96-dates-ms.tex
+ RELOC/doc/latex/biblatex-ms/examples/97-annotations-biber-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/97-annotations-ms.bib
+ RELOC/doc/latex/biblatex-ms/examples/97-annotations-ms.tex
+ RELOC/doc/latex/biblatex-ms/examples/98-multiscript-biber-ms.pdf
+ RELOC/doc/latex/biblatex-ms/examples/98-multiscript-ms.tex
+ RELOC/doc/latex/biblatex-ms/examples/biblatex-examples-ms.bib
+ RELOC/doc/latex/biblatex-ms/examples/biblatex-examples-ms.bltxml
+runfiles size=628
+ RELOC/bibtex/bst/biblatex-ms/biblatex-ms.bst
+ RELOC/tex/latex/biblatex-ms/bbx/alphabetic-ms.bbx
+ RELOC/tex/latex/biblatex-ms/bbx/alphabetic-verb-ms.bbx
+ RELOC/tex/latex/biblatex-ms/bbx/authortitle-comp-ms.bbx
+ RELOC/tex/latex/biblatex-ms/bbx/authortitle-ibid-ms.bbx
+ RELOC/tex/latex/biblatex-ms/bbx/authortitle-icomp-ms.bbx
+ RELOC/tex/latex/biblatex-ms/bbx/authortitle-ms.bbx
+ RELOC/tex/latex/biblatex-ms/bbx/authortitle-tcomp-ms.bbx
+ RELOC/tex/latex/biblatex-ms/bbx/authortitle-terse-ms.bbx
+ RELOC/tex/latex/biblatex-ms/bbx/authortitle-ticomp-ms.bbx
+ RELOC/tex/latex/biblatex-ms/bbx/authoryear-comp-ms.bbx
+ RELOC/tex/latex/biblatex-ms/bbx/authoryear-ibid-ms.bbx
+ RELOC/tex/latex/biblatex-ms/bbx/authoryear-icomp-ms.bbx
+ RELOC/tex/latex/biblatex-ms/bbx/authoryear-ms.bbx
+ RELOC/tex/latex/biblatex-ms/bbx/debug-ms.bbx
+ RELOC/tex/latex/biblatex-ms/bbx/draft-ms.bbx
+ RELOC/tex/latex/biblatex-ms/bbx/numeric-comp-ms.bbx
+ RELOC/tex/latex/biblatex-ms/bbx/numeric-ms.bbx
+ RELOC/tex/latex/biblatex-ms/bbx/numeric-verb-ms.bbx
+ RELOC/tex/latex/biblatex-ms/bbx/reading-ms.bbx
+ RELOC/tex/latex/biblatex-ms/bbx/standard-ms.bbx
+ RELOC/tex/latex/biblatex-ms/bbx/verbose-ibid-ms.bbx
+ RELOC/tex/latex/biblatex-ms/bbx/verbose-inote-ms.bbx
+ RELOC/tex/latex/biblatex-ms/bbx/verbose-ms.bbx
+ RELOC/tex/latex/biblatex-ms/bbx/verbose-note-ms.bbx
+ RELOC/tex/latex/biblatex-ms/bbx/verbose-trad1-ms.bbx
+ RELOC/tex/latex/biblatex-ms/bbx/verbose-trad2-ms.bbx
+ RELOC/tex/latex/biblatex-ms/bbx/verbose-trad3-ms.bbx
+ RELOC/tex/latex/biblatex-ms/biblatex-ms.cfg
+ RELOC/tex/latex/biblatex-ms/biblatex-ms.def
+ RELOC/tex/latex/biblatex-ms/biblatex-ms.sty
+ RELOC/tex/latex/biblatex-ms/blx-bibtex-ms.def
+ RELOC/tex/latex/biblatex-ms/blx-case-expl3-ms.sty
+ RELOC/tex/latex/biblatex-ms/blx-case-latex2e-ms.sty
+ RELOC/tex/latex/biblatex-ms/blx-compat-ms.def
+ RELOC/tex/latex/biblatex-ms/blx-dm-ms.def
+ RELOC/tex/latex/biblatex-ms/blx-mcite-ms.def
+ RELOC/tex/latex/biblatex-ms/blx-natbib-ms.def
+ RELOC/tex/latex/biblatex-ms/blx-unicode-ms.def
+ RELOC/tex/latex/biblatex-ms/cbx/alphabetic-ms.cbx
+ RELOC/tex/latex/biblatex-ms/cbx/alphabetic-verb-ms.cbx
+ RELOC/tex/latex/biblatex-ms/cbx/authortitle-comp-ms.cbx
+ RELOC/tex/latex/biblatex-ms/cbx/authortitle-ibid-ms.cbx
+ RELOC/tex/latex/biblatex-ms/cbx/authortitle-icomp-ms.cbx
+ RELOC/tex/latex/biblatex-ms/cbx/authortitle-ms.cbx
+ RELOC/tex/latex/biblatex-ms/cbx/authortitle-tcomp-ms.cbx
+ RELOC/tex/latex/biblatex-ms/cbx/authortitle-terse-ms.cbx
+ RELOC/tex/latex/biblatex-ms/cbx/authortitle-ticomp-ms.cbx
+ RELOC/tex/latex/biblatex-ms/cbx/authoryear-comp-ms.cbx
+ RELOC/tex/latex/biblatex-ms/cbx/authoryear-ibid-ms.cbx
+ RELOC/tex/latex/biblatex-ms/cbx/authoryear-icomp-ms.cbx
+ RELOC/tex/latex/biblatex-ms/cbx/authoryear-ms.cbx
+ RELOC/tex/latex/biblatex-ms/cbx/debug-ms.cbx
+ RELOC/tex/latex/biblatex-ms/cbx/draft-ms.cbx
+ RELOC/tex/latex/biblatex-ms/cbx/numeric-comp-ms.cbx
+ RELOC/tex/latex/biblatex-ms/cbx/numeric-ms.cbx
+ RELOC/tex/latex/biblatex-ms/cbx/numeric-verb-ms.cbx
+ RELOC/tex/latex/biblatex-ms/cbx/reading-ms.cbx
+ RELOC/tex/latex/biblatex-ms/cbx/verbose-ibid-ms.cbx
+ RELOC/tex/latex/biblatex-ms/cbx/verbose-inote-ms.cbx
+ RELOC/tex/latex/biblatex-ms/cbx/verbose-ms.cbx
+ RELOC/tex/latex/biblatex-ms/cbx/verbose-note-ms.cbx
+ RELOC/tex/latex/biblatex-ms/cbx/verbose-trad1-ms.cbx
+ RELOC/tex/latex/biblatex-ms/cbx/verbose-trad2-ms.cbx
+ RELOC/tex/latex/biblatex-ms/cbx/verbose-trad3-ms.cbx
+ RELOC/tex/latex/biblatex-ms/lbx/UKenglish-ms.lbx
+ RELOC/tex/latex/biblatex-ms/lbx/USenglish-ms.lbx
+ RELOC/tex/latex/biblatex-ms/lbx/american-ms.lbx
+ RELOC/tex/latex/biblatex-ms/lbx/australian-ms.lbx
+ RELOC/tex/latex/biblatex-ms/lbx/austrian-ms.lbx
+ RELOC/tex/latex/biblatex-ms/lbx/basque-ms.lbx
+ RELOC/tex/latex/biblatex-ms/lbx/brazil-ms.lbx
+ RELOC/tex/latex/biblatex-ms/lbx/brazilian-ms.lbx
+ RELOC/tex/latex/biblatex-ms/lbx/british-ms.lbx
+ RELOC/tex/latex/biblatex-ms/lbx/bulgarian-ms.lbx
+ RELOC/tex/latex/biblatex-ms/lbx/canadian-ms.lbx
+ RELOC/tex/latex/biblatex-ms/lbx/catalan-ms.lbx
+ RELOC/tex/latex/biblatex-ms/lbx/croatian-ms.lbx
+ RELOC/tex/latex/biblatex-ms/lbx/czech-ms.lbx
+ RELOC/tex/latex/biblatex-ms/lbx/danish-ms.lbx
+ RELOC/tex/latex/biblatex-ms/lbx/dutch-ms.lbx
+ RELOC/tex/latex/biblatex-ms/lbx/english-ms.lbx
+ RELOC/tex/latex/biblatex-ms/lbx/estonian-ms.lbx
+ RELOC/tex/latex/biblatex-ms/lbx/finnish-ms.lbx
+ RELOC/tex/latex/biblatex-ms/lbx/french-ms.lbx
+ RELOC/tex/latex/biblatex-ms/lbx/galician-ms.lbx
+ RELOC/tex/latex/biblatex-ms/lbx/german-ms.lbx
+ RELOC/tex/latex/biblatex-ms/lbx/greek-ms.lbx
+ RELOC/tex/latex/biblatex-ms/lbx/hungarian-ms.lbx
+ RELOC/tex/latex/biblatex-ms/lbx/icelandic-ms.lbx
+ RELOC/tex/latex/biblatex-ms/lbx/italian-ms.lbx
+ RELOC/tex/latex/biblatex-ms/lbx/latvian-ms.lbx
+ RELOC/tex/latex/biblatex-ms/lbx/lithuanian-ms.lbx
+ RELOC/tex/latex/biblatex-ms/lbx/magyar-ms.lbx
+ RELOC/tex/latex/biblatex-ms/lbx/marathi-ms.lbx
+ RELOC/tex/latex/biblatex-ms/lbx/naustrian-ms.lbx
+ RELOC/tex/latex/biblatex-ms/lbx/newzealand-ms.lbx
+ RELOC/tex/latex/biblatex-ms/lbx/ngerman-ms.lbx
+ RELOC/tex/latex/biblatex-ms/lbx/norsk-ms.lbx
+ RELOC/tex/latex/biblatex-ms/lbx/nswissgerman-ms.lbx
+ RELOC/tex/latex/biblatex-ms/lbx/nynorsk-ms.lbx
+ RELOC/tex/latex/biblatex-ms/lbx/polish-ms.lbx
+ RELOC/tex/latex/biblatex-ms/lbx/portuges-ms.lbx
+ RELOC/tex/latex/biblatex-ms/lbx/portuguese-ms.lbx
+ RELOC/tex/latex/biblatex-ms/lbx/romanian-ms.lbx
+ RELOC/tex/latex/biblatex-ms/lbx/russian-ms.lbx
+ RELOC/tex/latex/biblatex-ms/lbx/serbian-ms.lbx
+ RELOC/tex/latex/biblatex-ms/lbx/serbianc-ms.lbx
+ RELOC/tex/latex/biblatex-ms/lbx/slovak-ms.lbx
+ RELOC/tex/latex/biblatex-ms/lbx/slovene-ms.lbx
+ RELOC/tex/latex/biblatex-ms/lbx/slovenian-ms.lbx
+ RELOC/tex/latex/biblatex-ms/lbx/spanish-ms.lbx
+ RELOC/tex/latex/biblatex-ms/lbx/swedish-ms.lbx
+ RELOC/tex/latex/biblatex-ms/lbx/swissgerman-ms.lbx
+ RELOC/tex/latex/biblatex-ms/lbx/turkish-ms.lbx
+ RELOC/tex/latex/biblatex-ms/lbx/ukrainian-ms.lbx
+catalogue-also translation-biblatex-de
+catalogue-contact-announce https://github.com/plk/biblatex/wiki
+catalogue-contact-bugs https://github.com/plk/biblatex/issues
+catalogue-contact-home https://github.com/plk/biblatex
+catalogue-contact-repository https://github.com/plk/biblatex.git
+catalogue-ctan /macros/latex/contrib/biblatex-ms
+catalogue-license lppl1.3
+catalogue-topics biblio biblatex etex
+catalogue-version 4.0
+
name biblatex-multiple-dm
category Package
revision 37081
@@ -39574,7 +39975,7 @@ catalogue-version 1.2.0
name biblatex-swiss-legal
category Package
-revision 64072
+revision 64182
shortdesc Bibliography and citation styles following Swiss legal practice
relocated 1
longdesc The package provides BibLaTeX bibliography and citation styles
@@ -39585,9 +39986,9 @@ longdesc ng-biblatex-swiss-legal-not-displayed-correctly the package is
longdesc at present outdated and does not work properly with newer
longdesc versions of BibLaTeX.
containersize 18148
-containerchecksum a3228b16f01dd7f2f044da85745ff85e728762e2f1ac86a97fa0aea1fd410c1b83088b3f148fa2d19d499df617746fddc66cb31fed75a8984828a91c61eab354
+containerchecksum fe12eedf8ee3718241d1dc5889afa7fde6348fb85f992c4e80a57361758f2a1965f12b29baae039f21c2b3bce369fcf0e978881f67b4e8da83aca75ebe6ffcc1
doccontainersize 513436
-doccontainerchecksum 70576559d85c4ef765d99c409f2376ac5104c76df0825471fa996a7788c410267df8e583b5d5272cd8a1b881d606a38e5448443aceff3f29e4e5475f5471099c
+doccontainerchecksum 36affc24bd2100c591ec345f90dddc1898688d9337283a347887d506029b95ede079f5acddd00e280b4e73fb2697f860f57036e0d4f576a86f04da38d2dcc277
docfiles size=145
RELOC/doc/latex/biblatex-swiss-legal/README details="Readme (French and English)"
RELOC/doc/latex/biblatex-swiss-legal/biblatex-swiss-legal.pdf details="Package documentation (French)" language="fr"
@@ -67308,7 +67709,7 @@ containerchecksum 4241bc3a3ef21502faa9a2e0b16295126c357fc15813a625306552b40f9da8
name collection-bibtexextra
category Collection
-revision 61687
+revision 64180
shortdesc BibTeX additional styles
relocated 1
longdesc Additional BibTeX styles and bibliography data(bases), notably
@@ -67329,6 +67730,7 @@ depend bestpapers
depend bib2gls
depend bibarts
depend biber
+depend biber-ms
depend bibexport
depend bibhtml
depend biblatex
@@ -67368,6 +67770,7 @@ depend biblatex-luh-ipw
depend biblatex-manuscripts-philology
depend biblatex-mla
depend biblatex-morenames
+depend biblatex-ms
depend biblatex-multiple-dm
depend biblatex-musuos
depend biblatex-nature
@@ -67474,8 +67877,8 @@ depend vak
depend windycity
depend xcite
depend zootaxa-bst
-containersize 1272
-containerchecksum cb594df1d769e879ed998ffc0aea6407654df2450b71740399cbfdb097ff758c1a557e055edd7ff27bc647d857a04977d8179bdeaeff08a710090db54ede974c
+containersize 1276
+containerchecksum fcfe8db7e83c647209ad804aaef7eda0a7d69efcecae12d596ce8b52ced3ad36a2eb69ec666c9dd050216ba28ea077c27c35c2585f6203da78aa03ba66d83918
name collection-binextra
category Collection
@@ -100652,7 +101055,7 @@ catalogue-version 1.6
name dvisvgm
category TLCore
-revision 63386
+revision 64182
shortdesc Convert DVI, EPS, and PDF files to Scalable Vector Graphics format (SVG)
longdesc Dvisvgm is a command line utility that converts TeX DVI as well
longdesc as EPS and PDF files to the XML-based Scalable Vector Graphics
@@ -100669,9 +101072,9 @@ longdesc the kpathsea library. For more detailed information, see the
longdesc project page.
depend dvisvgm.ARCH
containersize 880
-containerchecksum 709aceffb6c0cb0fa155d47c459a2d37471c2d54ff2769ee850dc5674747a90ed934cca7cedc416749d4fff1b215005ac4d100c706eb3ac8c37cf8382e3bc3d2
+containerchecksum 2d491a901e151b23542aa956f7587fa36f93e43f25199868974f8b4d785d2ca1a5f4a1b92537764d28514e1919d18becf9a5cf5aa5c8eadc0637452dda93eb8d
doccontainersize 107332
-doccontainerchecksum 19134a42ed5ca0ed0bb0fcf434eacc273e97b0009f8ad527b7d448fcabac1c377959ad2b752a702c4e6691428d83ff756f3dcc8aec14bed6fc08c68754eb9c70
+doccontainerchecksum 6abb236d807295d2e367a7589bbc64e42c6f8bf35cb7998487038acc17b50cc00d49bf4d22f8f061a77e604c3063d598fb48836085cb7b759fbf9479f49d4796
docfiles size=42
texmf-dist/doc/man/man1/dvisvgm.1
texmf-dist/doc/man/man1/dvisvgm.man1.pdf
@@ -100682,7 +101085,7 @@ catalogue-contact-repository https://github.com/mgieseki/dvisvgm
catalogue-ctan /dviware/dvisvgm
catalogue-license gpl3+
catalogue-topics dvi-proc
-catalogue-version 2.13.4
+catalogue-version 2.14
name dvisvgm.aarch64-linux
category TLCore
@@ -115571,15 +115974,15 @@ catalogue-version 1.3
name fancyqr
category Package
-revision 64148
+revision 64182
shortdesc Fancy QR-Codes with TikZ
relocated 1
longdesc A simple package to create fancy QR-codes with the help of the
longdesc qrcode package.
-containersize 4696
-containerchecksum a7fe248e389051bf41834f509a3ea3cf597400b39551af5760d1f584e5539dcc2ca400c23a821a7e7fa91ac6d4aeae388d6ca5978b9aaf3eeb4ddecd8a99ef72
+containersize 4700
+containerchecksum fe2a8078e8491384ca4cc25fd058433dde3d4d4fdbd5784ad67150169f1ff5eec85c6f2c2ae7efb6aff6e6fc731c18cc4a156d968872b69d58a36bc042825c2c
doccontainersize 248244
-doccontainerchecksum a32efaa90bccc19a25a69f5aed838bea29e5d4c7736b45ad741a456e6dd5a7677621929f54cf324b6f4d951f7e4fd0683444f4fe35d4fbd151ca5d76cdfd8453
+doccontainerchecksum afd49422e17012b84a9ddf9ead15af3eb4f5b0e8291f76b9a672d4a3097d9f390753e0090cb67df94cbd5cc88c45ec2bd67b55594bae9ed4b945ad293e4f07df
docfiles size=65
RELOC/doc/latex/fancyqr/README.md details="Readme"
RELOC/doc/latex/fancyqr/fancyqr-doc.pdf details="Package documentation"
@@ -115602,7 +116005,7 @@ catalogue-contact-repository https://github.com/EagleoutIce/fancyqr
catalogue-ctan /graphics/pgf/contrib/fancyqr
catalogue-license gpl3
catalogue-topics qrcode pgf-tikz
-catalogue-version 1.0
+catalogue-version 1.1
name fancyref
category Package
@@ -139413,15 +139816,18 @@ catalogue-topics float
name hereapplies
category Package
-revision 64147
-shortdesc A LaTeX package for cross-linking applications of concepts
+revision 64182
+shortdesc A LaTeX package for referencing groups of pages that share something in common
relocated 1
-longdesc This package allows you to cross-link concepts to their
-longdesc applications.
-containersize 3912
-containerchecksum 584fa628ed812027e343368f52139d9323723c8e5c47809613bd99db2e611591d5464a11b7cdccd342ded3559e91c6cf12d56f974e4ae9f791fbed3150e53430
-doccontainersize 63612
-doccontainerchecksum ba25b0b02ed8aeaf1573c1483c6d01d6f29f775d33df39d0287bcb5a7c053de0f5a42714047bffe417231a5306d2b092302a25076a9042985a60badd0120afe6
+longdesc Here Applies is a LaTeX package that allows to create groups of
+longdesc labels and reference them altogether. It can be used for
+longdesc creating informal glossaries that cross-link concepts to their
+longdesc applications, or simply mentioning multiple pages that share
+longdesc something in common.
+containersize 4300
+containerchecksum 25e939860fa32d97cfa1802a7cca7f1a3d9c569e03bbe0210339068ed9ed4adf7c3dcf9171ad6a9c2a99a1703e23a418acb9af67c52853fce4e7f562b6d60215
+doccontainersize 63676
+doccontainerchecksum de799b6118d888316f7fd84d6da616fb28b14fab8cadbdd3e1d4e7e523de2ea5a9e778d9543fe12c612509ce29cc5610fe0fa5094dae3a93cbc51712c4bc2873
docfiles size=30
RELOC/doc/latex/hereapplies/COPYING
RELOC/doc/latex/hereapplies/ChangeLog.md
@@ -139440,7 +139846,7 @@ catalogue-contact-repository https://github.com/madmurphy/hereapplies.sty
catalogue-ctan /macros/latex/contrib/hereapplies
catalogue-license gpl3+
catalogue-topics label-ref
-catalogue-version 0.5.0
+catalogue-version 0.6.0
name heuristica
category Package
@@ -167064,7 +167470,7 @@ catalogue-version 1.1
name l3backend
category Package
-revision 64066
+revision 64178
shortdesc LaTeX3 backend drivers
relocated 1
longdesc This package forms parts of expl3, and contains the code used
@@ -167073,17 +167479,17 @@ longdesc The functions here are defined differently depending on the
longdesc engine in use. As such, these are distributed separately from
longdesc l3kernel to allow this code to be updated on an independent
longdesc schedule.
-containersize 15452
-containerchecksum f45946f6a827ef3f7fba5db9f3d6ade6a7d41a31df294af5a4197b1953c75a315078bfcd44b3c76e47a9d4b1edd18df20ddb86066c54d6033f477469649f8c2a
-doccontainersize 888132
-doccontainerchecksum 910e85823beba0b688831d2e80a6c0a9350874b52668908c3303adec9faa4bbfcd08c99a31175e82a5b69902a01a5796163d2a7cf6913e28376995bd44afcc86
+containersize 15400
+containerchecksum 6b910c668fdd1204e61c9342e4cb8eb1af3942d86a757f1403a32ec0b200b463146b27f62b4e5cec4dbf0ea30e38f106cccd6cac3ef456957612a463cb476fa4
+doccontainersize 886740
+doccontainerchecksum b08d6a6ec5a7144d8c66e7df94f1645ae202e461334a2ee87d7a6c70123844a6b31971ebf39b9a9d58e72f82998bbc4341cfde856bce4b7c4d4acb33ee1b2839
docfiles size=233
RELOC/doc/latex/l3backend/CHANGELOG.md
RELOC/doc/latex/l3backend/README.md details="Readme"
RELOC/doc/latex/l3backend/l3backend-code.pdf details="Package documentation"
RELOC/doc/latex/l3backend/l3backend-code.tex
-srccontainersize 33016
-srccontainerchecksum 3f2c999ea53477de6dbfc4350910ef9735510d0fc6058c2c6ad4f349323a48f1070d95bd61e87339938bfcd278fd0abdb83184807cf80f8da1b78fe429f4d160
+srccontainersize 32828
+srccontainerchecksum 48262000edf7815a6938cf609f80b021c6ea06d1a7c0b695cbae8a197bc499a232bb0b6b6728b67e174725c763b67a9127e2b320aed8ac82ab1e2bb45b19d9d4
srcfiles size=57
RELOC/source/latex/l3backend/l3backend-basics.dtx
RELOC/source/latex/l3backend/l3backend-box.dtx
@@ -167400,7 +167806,7 @@ catalogue-topics macro-supp layout latex3 pre-release
name l3kernel
category Package
-revision 64066
+revision 64177
shortdesc LaTeX3 programming conventions
relocated 1
longdesc The l3kernel bundle provides an implementation of the LaTeX3
@@ -167410,11 +167816,11 @@ longdesc LaTeX3 kernel and other future code are built: it is an API for
longdesc TeX programmers. The packages are set up so that the LaTeX3
longdesc conventions can be used with regular LaTeX2e packages.
depend l3backend
-containersize 173260
-containerchecksum ed8bef888a6b90c1f15c52c85907b8792f93beeb638d6ca5f749d79a1c3fc2916dcb53009f64b89deaac4c0b7ab1dc56def5d036da354267a490641c31f7dcf0
-doccontainersize 11848044
-doccontainerchecksum eb78bac71852625676ed6aac3e9baf53c523ffb6b5c4bf2d8e88f11a19f0a0391b15737d76c7a6d0ab4dff75b132c17e8292c4924718ca1384220a5c37f43403
-docfiles size=3405
+containersize 173416
+containerchecksum 99c2022f483b57e709eb56dd47da30d1678231da2f59ac1b313e76b3f893cd87d6ccaa52269d6714d96d6394913898c45582b9bbbff3178aaa491b3871c44c21
+doccontainersize 11829912
+doccontainerchecksum 63510aa48d3d8e8eba948a61650aa386e82bafe34a4dfeb51287e48a372f709a41d5ac46ec1cea85c221f9f3d655e743c9169534f4621cca337e6b114eddd122
+docfiles size=3408
RELOC/doc/latex/l3kernel/CHANGELOG.md
RELOC/doc/latex/l3kernel/README.md details="Readme"
RELOC/doc/latex/l3kernel/expl3.pdf details="The LaTeX3 Programming Language"
@@ -167461,9 +167867,9 @@ docfiles size=3405
RELOC/doc/latex/l3kernel/source3.pdf
RELOC/doc/latex/l3kernel/source3.tex
RELOC/doc/latex/l3kernel/source3body.tex
-srccontainersize 592832
-srccontainerchecksum b072da980d0a1ae433f03e8bf2c0410d2e972e6c2b4441d9b5336b3b1442b30d51ba90f5d809ab626d6729466084c23ba59b98a0ed418096b5ecc85341f51f13
-srcfiles size=915
+srccontainersize 594052
+srccontainerchecksum 0396163199e75f4c7d715bfe5b22fbbdf00708fddbda57a2a116985563f2132943760398e008ab9163dfed583cea33e4d9b24601079394d656f0556474ed42f2
+srcfiles size=916
RELOC/source/latex/l3kernel/expl3.dtx
RELOC/source/latex/l3kernel/l3.ins
RELOC/source/latex/l3kernel/l3basics.dtx
@@ -193643,7 +194049,7 @@ catalogue-version 1.0f
name m-tx
category Package
-revision 52851
+revision 64182
shortdesc A preprocessor for pmx
longdesc M-Tx is a preprocessor to pmx, which is itself a preprocessor
longdesc to musixtex, a music typesetting system. The prime motivation
@@ -193651,10 +194057,10 @@ longdesc to the development of M-Tx was to provide lyrics for music to
longdesc be typeset. In fact, pmx now provides a lyrics interface, but
longdesc M-Tx continues in use by those who prefer its language.
depend m-tx.ARCH
-containersize 4544
-containerchecksum c99b0a658d46c58e47f58c0494a4f32b5997ed304bb35b58a5732549ea17b366299aba4504982bb4a1e2743800b4bc02028e402e03cf363178bf1ac262802e9b
+containersize 4524
+containerchecksum b56bc4432bcd340f3e92f5043c38bde7f14b5f2d32b9433fa21c73c20f7ebb981714175aa6f4f871636efb62a52cd24aa639e87a320039313b16db1b027ee2f5
doccontainersize 739512
-doccontainerchecksum ebf3e4035460439abd3ac91202e28c0f6926181c34bcfd1f1b3115ff6ec90bd2d0cb9a5043d81ee8434d8b260f3a8b437585d3e81b7161b145c8c112d5643cb1
+doccontainerchecksum 316fbc2b37b903cae8da6bb9f44b8afad0e3e577c6fd84664e1724ffe318bbdbf9609dcadd5cde6a14cc5acbc134f69bd7a87dd90d9da7d4442a5f913b8132f5
docfiles size=259
texmf-dist/doc/generic/m-tx/Makefile
texmf-dist/doc/generic/m-tx/README details="Readme"
@@ -193728,7 +194134,7 @@ catalogue-contact-home http://icking-music-archive.org/software/indexmt6.html
catalogue-ctan /support/m-tx
catalogue-license mit
catalogue-topics music
-catalogue-version 0.63c
+catalogue-version 0.63d
name m-tx.aarch64-linux
category Package
@@ -234922,7 +235328,7 @@ catalogue-topics maths
name oup-authoring-template
category Package
-revision 64072
+revision 64182
shortdesc A general template for journals published by Oxford University Press (OUP)
relocated 1
longdesc This package provides a general LaTeX template for journals
@@ -234934,9 +235340,9 @@ longdesc see
longdesc https://academic.oup.com/journals/pages/authors/preparing_your_
longdesc manuscript.
containersize 17492
-containerchecksum 95b634051f3e711596f1689a030f8ce6c340ac134a73e5be6c850fea52eb583d9a46d8de414a3d8ee640ab5c49cd4ba17dd01119c84701f602148dcce79e63f2
-doccontainersize 322096
-doccontainerchecksum 5c4c3e6db1601eb17c206ed4afeb2b14a7168a370d4c2a3cb590e1ca7a719cd4648663fd122f74e23f34bbacf3fea2041077d2941bb1040bfe92139aad19f89c
+containerchecksum 8a6db270cc85f0fe75183ff0997f0d127621bff82f0181a65e3244a4202d5963e2a985a85822bee0f0fa1251773019c297880d65f024150ea5da0dba0f05adb7
+doccontainersize 322100
+doccontainerchecksum b37156531e444cb1d0c486c6c5e9731dafea33afebaf599dce0442c1fa1db061effa2a34159a74ae1cfad3db290de72990ec615302fc798ca25e0b6a786b3413
docfiles size=115
RELOC/doc/latex/oup-authoring-template/README details="Readme"
RELOC/doc/latex/oup-authoring-template/doc/oup-authoring-template-doc.pdf details="User manual"
@@ -252994,7 +253400,7 @@ catalogue-version 1.0
name pseudo
category Package
-revision 63896
+revision 64182
shortdesc Straightforward pseudocode
relocated 1
longdesc The package permits writing pseudocode without much fuss and
@@ -253005,11 +253411,11 @@ longdesc there is functionality for typesetting common syntactic
longdesc elements such as keywords, identifiers, and comments. The
longdesc package relies on aliascnt, array, colortbl, expl3, l3keys2e,
longdesc xcolor, and xparse.
-containersize 6760
-containerchecksum 4829d8ddeb8474f25eb6ac595de64b58458c1c3ae4e463d098b8d24faa6b7b934d0a494b518025ec3676b4079431002e5b63d7de916f5350a74af59a78dcc854
-doccontainersize 984100
-doccontainerchecksum a739fbb6095e0e2f5ce197e1c8e165f6fa996e1dad580f66002cea63371d7b527bb8fdd7da49234c1fca93a375c504bc70b86ee42f2200bab0560205d87c97e5
-docfiles size=305
+containersize 6800
+containerchecksum f3c6e0596180fb9a44540a0da8565af8495f94c9d2d7880ace0420adeafa0f273838134e81c6ef9983991a6efb21eebbe590be8d24e842c2abd5df51f78fe25b
+doccontainersize 985412
+doccontainerchecksum 67f87f3f4df0232c41961dea8115a48f13b0ceb722b4011e4fc2417580d7aafab80557494fe91cc53443caa8baae958fc128608c251aef86f4f2158fb5b8e249
+docfiles size=307
RELOC/doc/latex/pseudo/LICENSE
RELOC/doc/latex/pseudo/Makefile
RELOC/doc/latex/pseudo/README.md details="Readme"
@@ -253023,6 +253429,7 @@ docfiles size=305
RELOC/doc/latex/pseudo/doc/pseudo.bib
RELOC/doc/latex/pseudo/doc/pseudo.pdf details="Package documentation"
RELOC/doc/latex/pseudo/doc/pseudo.tex
+ RELOC/doc/latex/pseudo/test/overlaytest.tex
RELOC/doc/latex/pseudo/test/pseudotest.tex
runfiles size=8
RELOC/tex/latex/pseudo/pseudo.sty
@@ -253033,7 +253440,7 @@ catalogue-contact-repository https://github.com/mlhetland/pseudo.sty.git
catalogue-ctan /macros/latex/contrib/pseudo
catalogue-license mit
catalogue-topics pseudocode expl3
-catalogue-version 1.2
+catalogue-version 1.2.1
name pseudocode
category Package
@@ -253732,7 +254139,7 @@ catalogue-version 0.92
name pst-barcode
category Package
-revision 61719
+revision 64182
shortdesc Print barcodes using PostScript
relocated 1
longdesc The pst-barcode package allows printing of barcodes, in a huge
@@ -253741,11 +254148,11 @@ longdesc documentation for details). As a PSTricks package, the package
longdesc requires pstricks. The package uses PostScript for calculating
longdesc the bars. For PDF output use a multi-pass mechansism such as
longdesc pst-pdf.
-containersize 99100
-containerchecksum a7d3c386fc8793de8f4024ede603d18704bb88560ec2a9a6f7fc69bd919434f6e8d3d9b7bd8080a39c24f37d354251309084e6994bb334a886e3ff998ec51d5b
-doccontainersize 1110916
-doccontainerchecksum 40a1649336ea298374985804433dde7282d29ccc8b4ad28200612aef602b726f6bde9916962c6f9aede8a0a3fd2780f45e5100daf6039c55a13121901a864aca
-docfiles size=1449
+containersize 129680
+containerchecksum c79fc6d5ff483278210e654a3b325a6acd2492d6cdcb8958d5e4802bcec6aa119887bacb82a91e312c39ff5ac12a62d28c04528439684bf000dc1f1003ce8651
+doccontainersize 1363564
+doccontainerchecksum ff4d449709479f9e1218a2fa3ba642660b09556c96cc94a1b65984ae0723e8b730d09634053feb256bf196aa183e4f8a46ed3efdd9d91dc5a03b4a6d4d59c0f1
+docfiles size=1554
RELOC/doc/generic/pst-barcode/Changes
RELOC/doc/generic/pst-barcode/README.md details="Readme"
RELOC/doc/generic/pst-barcode/images/auspost-1.eps
@@ -253756,6 +254163,7 @@ docfiles size=1449
RELOC/doc/generic/pst-barcode/images/aztec-4.eps
RELOC/doc/generic/pst-barcode/images/aztec-5.eps
RELOC/doc/generic/pst-barcode/images/aztec-6.eps
+ RELOC/doc/generic/pst-barcode/images/barcode.jpg
RELOC/doc/generic/pst-barcode/images/bc412-1.eps
RELOC/doc/generic/pst-barcode/images/bc412-2.eps
RELOC/doc/generic/pst-barcode/images/bc412-3.eps
@@ -253809,6 +254217,8 @@ docfiles size=1449
RELOC/doc/generic/pst-barcode/images/datamatrix-1.eps
RELOC/doc/generic/pst-barcode/images/datamatrix-2.eps
RELOC/doc/generic/pst-barcode/images/datamatrix-3.eps
+ RELOC/doc/generic/pst-barcode/images/datamatrix-4.eps
+ RELOC/doc/generic/pst-barcode/images/dotcode-1.eps
RELOC/doc/generic/pst-barcode/images/ean128-1.eps
RELOC/doc/generic/pst-barcode/images/ean128-2.eps
RELOC/doc/generic/pst-barcode/images/ean128composite-1.eps
@@ -253831,6 +254241,8 @@ docfiles size=1449
RELOC/doc/generic/pst-barcode/images/gs1composite-2.eps
RELOC/doc/generic/pst-barcode/images/gs1composite-3.eps
RELOC/doc/generic/pst-barcode/images/gs1datamatrix-1.eps
+ RELOC/doc/generic/pst-barcode/images/gs1dotcode-1.eps
+ RELOC/doc/generic/pst-barcode/images/gs1northamericancoupon-1.eps
RELOC/doc/generic/pst-barcode/images/gs1qrcode-1.eps
RELOC/doc/generic/pst-barcode/images/gs1qrcode-2.eps
RELOC/doc/generic/pst-barcode/images/hanxin-1.eps
@@ -253911,11 +254323,13 @@ docfiles size=1449
RELOC/doc/generic/pst-barcode/images/resize3.eps
RELOC/doc/generic/pst-barcode/images/rm4scc-1.eps
RELOC/doc/generic/pst-barcode/images/sscc18-1.eps
+ RELOC/doc/generic/pst-barcode/images/swissqrcode-1.eps
RELOC/doc/generic/pst-barcode/images/telepen-1.eps
RELOC/doc/generic/pst-barcode/images/telepen-2.eps
RELOC/doc/generic/pst-barcode/images/telepen-3.eps
RELOC/doc/generic/pst-barcode/images/telepen-4.eps
RELOC/doc/generic/pst-barcode/images/telepen-5.eps
+ RELOC/doc/generic/pst-barcode/images/ultracode-1.eps
RELOC/doc/generic/pst-barcode/images/upca-1.eps
RELOC/doc/generic/pst-barcode/images/upca-2.eps
RELOC/doc/generic/pst-barcode/images/upcacomposite-1.eps
@@ -253926,7 +254340,7 @@ docfiles size=1449
RELOC/doc/generic/pst-barcode/pst-barcode-doc.ltx
RELOC/doc/generic/pst-barcode/pst-barcode-doc.pdf details="Package documentation"
RELOC/doc/generic/pst-barcode/pst-barcode-doc.tex
-runfiles size=212
+runfiles size=275
RELOC/dvips/pst-barcode/pst-barcode.pro
RELOC/tex/generic/pst-barcode/pst-barcode.tex
RELOC/tex/latex/pst-barcode/pst-barcode.sty
@@ -253936,7 +254350,7 @@ catalogue-contact-support https://tug.org/mailman/listinfo/pstricks
catalogue-ctan /graphics/pstricks/contrib/pst-barcode
catalogue-license lppl
catalogue-topics barcode qrcode pstricks
-catalogue-version 0.18
+catalogue-version 0.19
name pst-bezier
category Package
@@ -306297,7 +306711,7 @@ docfiles size=376
name texlive-scripts
category TLCore
-revision 64163
+revision 64170
shortdesc TeX Live infrastructure programs
longdesc Includes install-tl, tl-portable, rungs, etc.; not needed for
longdesc tlmgr to run but still ours. Not included in tlcritical.
@@ -306305,10 +306719,10 @@ depend texlive-scripts.ARCH
depend texlive.infra
execute addMap mathpple.map
postaction shortcut type=menu name="TeX Live command-line" cmd=TEXDIR/tlpkg/installer/tl-cmd.bat
-containersize 113476
-containerchecksum 9f92b48977aa59ebf73afd4371dd8816f1dbe0c61ebce4255af544101b71996c43a8409dacdc3583ed7cafef61003521766d71c11ceaf70341cac904ab03de24
-doccontainersize 419528
-doccontainerchecksum ae248649b7f7a65a5ac7d5ad3d491b0a2ffd100faba27fa629106bbdcd7cf6ed012e6a71a1d40a69e1eed5f4a3e717de97d8ade1d3009bf9195ec83bbfddb3ad
+containersize 113528
+containerchecksum 4bce5931450223b2b927075570e45717fc9cf12e0f2a61eb86875328c96efade30181789d25ea731f840b1707e1901beb5e242d8d54da1e3d41d54ddfca8546e
+doccontainersize 419552
+doccontainerchecksum 17bb67588e093c69dc0f5b64d2eac7fde14aa2645abb4b3ab6f15aa683880d132a3f94f2fbedb39430c82422b36ef057838c5087610d461c9fb7ef65a2960836
docfiles size=517
doc.html
texmf-dist/doc/man/man1/fmtutil-sys.1
@@ -331811,7 +332225,7 @@ catalogue-version 1.0
name ut-thesis
category Package
-revision 64072
+revision 64182
shortdesc University of Toronto thesis style
relocated 1
longdesc This LaTeX document class implements the formatting
@@ -331820,14 +332234,14 @@ longdesc Studies (SGS), as of Fall 2020 (
longdesc https://www.sgs.utoronto.ca/academic-progress/program-completio
longdesc n/formatting). For example usage, see the GitHub repository.
containersize 2632
-containerchecksum e2f77909ac544f17519f0d236ddb90e8ce665b182087b32417e8d57254fa34dc02e2b9b7b815f6402e308a62963a85c265043e315e945b403666300daf8efec2
+containerchecksum e6c5b6933f16d5e84962b93b9548feddb4a2ef779c3801899b66bccdd62062cfc990f926ffd3db4905bb5cd43ab393157cb1b72d4bbc8f16f00f9f938f7719d5
doccontainersize 138448
-doccontainerchecksum 09f4bab7ae72f16fc29aa43f34f012aa2a677b0518517bd238c860ba743c89ea2ed8cd2aa556261b6a7620216889a479045a38979f0cd4037fd9b8d730c4457c
+doccontainerchecksum 456de2cda9cc4fce5118151b9215622fb855b3f994f62ba9433d545afaa267161495723434e201d54eb3ff2a9478c785817531e49581d076bd47954f55ed1432
docfiles size=36
RELOC/doc/latex/ut-thesis/README details="Readme"
RELOC/doc/latex/ut-thesis/ut-thesis.pdf details="Package documentation"
-srccontainersize 6716
-srccontainerchecksum e0ee3d9ab5d5aaf0ce8ca12d731306a2f33f4bf4834175206cb8dc21f84cd3b850a16da41210f5c07290b240deb13c5b89c3cbf67f183550b800a2198cc7417a
+srccontainersize 6712
+srccontainerchecksum e8f16c228a1435bd9a4c8dd2fc0a535dae167c33ce2df140518cc030bd4e8be351cd428018b25012416039a4284e1bc1dada883a788ad05011d539846bfa6487
srcfiles size=6
RELOC/source/latex/ut-thesis/ut-thesis.dtx
RELOC/source/latex/ut-thesis/ut-thesis.ins
@@ -333741,7 +334155,7 @@ catalogue-version 1.0.0
name uwa-letterhead
category Package
-revision 64072
+revision 64182
shortdesc The letterhead of the University of Western Australia
relocated 1
longdesc This package generates the letterhead of the University of
@@ -333751,15 +334165,15 @@ longdesc https://static-listing.weboffice.uwa.edu.au/visualid/core-rebra
longdesc nd/img/uwacrest/, and uses the Arial and UWA Slab fonts by
longdesc default. The package works with XeLaTeX and LuaLaTeX.
containersize 3348
-containerchecksum 60320aada3f04ae1878854c0aec237102d33bb16a1af7f68ee9e9d0094a844ecaa45dc3c5dc8a3dfa286580c0d14bcffc3f6202861a845b1d34f9f5f1986c2c9
+containerchecksum 07ea1f6f74c6b1276a6702685e9069b536070674962cdd17febea56ba9d0482fbca8a10d5e0e334721765c58fb1eb316fd02a627f99ddc2143a5d8fafc57784d
doccontainersize 57656
-doccontainerchecksum ddb7d1e55161a89a163004e4085bec41a2ba85a568540f22bc11f7e6393829f0ca04a3afdd4487c55312b99456b97e3415ced7c39a596eec4192e5ce76f6e4d1
+doccontainerchecksum 04494b2b6e4358477d9609b0b75ad6a949018a561883a5a39a8e8d39f37171efc6528f37bcba6391ea65b1c4280b551f75d1f4faec1cc8153462d04aee4f2f41
docfiles size=17
RELOC/doc/latex/uwa-letterhead/README details="Readme"
RELOC/doc/latex/uwa-letterhead/uwa-letterhead-example.tex
RELOC/doc/latex/uwa-letterhead/uwa-letterhead.pdf details="Package documentation"
srccontainersize 6568
-srccontainerchecksum f461a2baadae42c89ea4c298e9ec751431d1d9b342d13a301972e670e6bd899b5982af8678c76154db2187561d196e5f3403718ab4e7fcdde5575968f1031497
+srccontainerchecksum 81413ae91fb375e3fc5b4c15fa04c2ad873bec9bc42d783ef758a972df6bd60f07fcaefb2e42d291fbac4a7122bb0eda5b551cbfe04a2641eb4b9a074e61d476
srcfiles size=8
RELOC/source/latex/uwa-letterhead/uwa-letterhead.dtx
RELOC/source/latex/uwa-letterhead/uwa-letterhead.ins
@@ -333772,7 +334186,7 @@ catalogue-version 1.0.1
name uwa-pcf
category Package
-revision 64072
+revision 64182
shortdesc A Participant Consent Form (PCF) for a human research protocol at the University of Western Australia
relocated 1
longdesc This LaTeX class generates a Participant Consent Form (PCF) for
@@ -333784,15 +334198,15 @@ longdesc nd/img/uwacrest/, and uses the Arial and UWA Slab fonts by
longdesc default. The class works with XeLaTeX and LuaLaTeX. It depends
longdesc on the uwa-letterhead package.
containersize 2924
-containerchecksum 35edc4c15ca57d2adae35a0d3a01cb697e958edd8d77749ad5fb9fc918d2c917fe98c2c98e9debeaa90bdc15cf9a4996f1eff22577deb62f68c28f388985891a
+containerchecksum b47f6ff153c75cc48ed6d451e9acf6134b4aad6a293b51e4755ca870b93493b01c1b4768378daf4fcb81b67829bd8b50892b15d988b17ad36f70cce2fb68e1b6
doccontainersize 52740
-doccontainerchecksum 48a66ff7fa40ad6d48366d5750ba2e82f0f9e6816ef7fea53a639587d04ed7b11f22e28cc26b7e09e2ef48ab534c672e48d1c814f83623bac33b56156fd71814
+doccontainerchecksum 3f0c4fdba35f9bd78b0d66d4c4fc91e02b2e6b0e972d4254c3a874521ccbe95cb8c4adc6b4ddc10a324f8d149fd7386ec0f9b3af9199d4bd6bd6859e75017393
docfiles size=15
RELOC/doc/latex/uwa-pcf/README details="Readme"
RELOC/doc/latex/uwa-pcf/uwa-pcf-example.tex
RELOC/doc/latex/uwa-pcf/uwa-pcf.pdf details="Package documentation"
srccontainersize 6064
-srccontainerchecksum c36a035d38b0d6a0f30ec6c0960f6d2593ae8dff73eb3175bdeb331778f076bd64784feed2ab8908229c48b7a2784cfbe5fdfcc5c22a870814da9e42a78afe50
+srccontainerchecksum 2f880eb1608120f17d9d5e56bc8aa3557bf380ebdb000369f244ea8fd5fe5e567a12af3173ecec19f603889a30005674deb8e2cb8386057a9199635e417f984c
srcfiles size=7
RELOC/source/latex/uwa-pcf/uwa-pcf.dtx
RELOC/source/latex/uwa-pcf/uwa-pcf.ins
@@ -333805,7 +334219,7 @@ catalogue-version 1.0.1
name uwa-pif
category Package
-revision 64072
+revision 64182
shortdesc A Participant Information Form (PIF) for a human research protocol at the University of Western Australia
relocated 1
longdesc This package generates a Participant Information Form (PIF) for
@@ -333817,15 +334231,15 @@ longdesc nd/img/uwacrest/, and uses the Calibri fonts by default. The
longdesc class works with XeLaTeX and LuaLaTeX. It depends on the
longdesc uwa-letterhead package.
containersize 2592
-containerchecksum 7100d083acb43a832b3b30c731f73ef3ebd2866379c979934e7f4ee5e676666057f9dd68db9b4cb16fa79d262c3b4c27d44d0795c09cbd33dadf783423866caa
+containerchecksum c580bfa7a3598ac2cabdec25a1ef3f57db1fe2c60728a92f5968bc95084713674c7483b123be4798950e3ccbea85deefc6f5951d2c7f67ce4b87b4da248de998
doccontainersize 50500
-doccontainerchecksum dd1fef706a45aedd6b44fd3b60d26c99f4ac313ef27197130cfaeb646310c5095c1e06e5329d8d407edca47f45d01ee2559b772cfe25e407e7a536304c70f362
+doccontainerchecksum 4885bfacb7bfa03f6fa98a11269c2db88188ef94240ad55d23d58d562e7cae966f0afc5f261c99c3a6320bcd8b6914d776f25e6b6df08ee5f2f80358f26673a9
docfiles size=15
RELOC/doc/latex/uwa-pif/README details="Readme"
RELOC/doc/latex/uwa-pif/uwa-pif-example.tex
RELOC/doc/latex/uwa-pif/uwa-pif.pdf details="Package documentation"
srccontainersize 5696
-srccontainerchecksum 029ee0f38267c60f07cf7b573419236f0d045d2f60d99fba629cca410f254848bef61a169cdffb93db31c9e52eb0d7c0645b837b2e8b4d39a4d6eca1358e0029
+srccontainerchecksum f6aede4a625129c1ac820e34c6cfddfc6d50b071c35af22fc742045eaa7defb2e1f0262004e19959883123be723a34390672963b2a096f28ae06dd76011664b7
srcfiles size=6
RELOC/source/latex/uwa-pif/uwa-pif.dtx
RELOC/source/latex/uwa-pif/uwa-pif.ins
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
index 6c054ad11a..bb61037184 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
@@ -1 +1 @@
-77318f5da1daa445c788fd410290e7f2 texlive.tlpdb
+fb9db6fb57066aefffdb4a4dc12e8a53 texlive.tlpdb
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
index 9c6422342d..4b4524bdf8 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
@@ -1 +1 @@
-8ceb33ead68b7fb74c34544399d849a28769284a9d3615e77ae3aa7ddbc4275e1a2b5a05f056bc958861a0b1b4e9f7ea73b56b5edc9c48c87f69d028a67f5706 texlive.tlpdb
+63dcf17a7913ab93def7ff2cc6740b98ecc0cc0fe94c38900f0b307f4c9ffcef739f28915accb2be32be00e4da92a215885a88e37af0d6c6eea42b9b3ce058a7 texlive.tlpdb
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
index 99ac5ab249..04484e9208 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
@@ -1,10 +1,10 @@
-----BEGIN PGP SIGNATURE-----
-iQEcBAEBCgAGBQJjBBdaAAoJEEzhh34ZQ4xwXb8H+gMqUYqLIZdYMH1TZ9+1mXws
-MKRpOA16hWim44GkeN30ZVelfDOJ4p14TJMsvs6t3e88BJ/m6UE8leA6Rv3YSJ5B
-fV6Ctqj1W61Wy1g5p+kU3d2LbhIIdc2WT/HjT/e5lEhtcMDW1UUh0iMNiJiAegCx
-AZRlAsIoFLeNyUh1Qb0JLTabxZ6dgL8DggoBVQIUa6/8t6K7blbY5SGcSGoB3Dgz
-09hiJW0VtqDPbj1zvFvmjj35qZp0J3vKytKICZ7BmhincFMeRwHzD++ZZoYMokXu
-DqBOMVUvixVeUXSDOVA96XixIK1s1GvTPVAd2LucpIqyOFsDaF31BBZqJWj+l5k=
-=c7sG
+iQEcBAEBCgAGBQJjBWkxAAoJEEzhh34ZQ4xw8J0H/ihu4b5oHCvCKtD7YnAT41kD
+CQ0ypNbbKlHw3+pPoJbRFGvn5CZR8X0O1T36kN6kVIeC/GI5K90d9hg9O3Yxpare
+U4pupmgqDcyzy3ao50U/UWmF6nVtcVzxEBRVL+Sf7zcVK+Bp+7Ya14rPmkUp0TfJ
+Jf1IIyldriKKwvNZbAdj0J06+IKgkbZ+QtY9QSYjk39dxytvExVfpYTDGv1lzlY5
+np1uBaDtgZsM9C8VSebir1SstiIpUaNyV0B8Ts7tpDLrQtm6koR5sUmNgCj3WxLH
+jfYKDqpH1quf3sd2jAsrbm/ccrwHC+SXD+TNf1QnYFQodgBRV1faV/Mr7+AjQPs=
+=k5DP
-----END PGP SIGNATURE-----
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
index fb759aaf4f..a6b9d287d9 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
Binary files differ
diff --git a/systems/win32/miktex/tm/packages/next/pr.ini b/systems/win32/miktex/tm/packages/next/pr.ini
index b2e16ac058..14a876faa3 100644
--- a/systems/win32/miktex/tm/packages/next/pr.ini
+++ b/systems/win32/miktex/tm/packages/next/pr.ini
@@ -1,13 +1,13 @@
[repository]
-date=1661199395
+date=1661285795
lastupd=miktex-arctrl-bin-x64-2.9 miktex-asymptote-bin-x64-2.9 miktex-autosp-bin-x64-2.9 miktex-axohelp-bin-x64-2.9 miktex-bibarts-bin-x64-2.9 miktex-bibtex-bin-x64-2.9 miktex-bibtex8bit-bin-x64-2.9 miktex-bzip2-bin-x64-2.9 miktex-cairo-bin-x64-2.9 miktex-chktex-bin-x64-2.9 miktex-cjkutils-bin-x64-2.9 miktex-console-bin-x64-2.9 miktex-curl-bin-x64-2.9 miktex-cweb-bin-x64-2.9 miktex-devnag-bin-x64-2.9 miktex-doc miktex-dvicopy-bin-x64-2.9 miktex-dvipdfmx-bin-x64-2.9 miktex-dvipng-bin-x64-2.9 miktex-dvips-bin-x64-2.9
-lstdigest=7b4ee1528a36e0af54a98c5cc17ba242
+lstdigest=5184836091251e8f2a53238feb4304ec
numpkg=5869
relstate=next
-version=8269
+version=8270
;;;;This configuration file is signed by a MiKTeX maintainer. The signature follows.
;;;;-----BEGIN MIKTEX SIGNATURE-----
-;;;; signature/miktex: wahcdxZLzKpKwjq2SV8bL4wMZ09g0DUHwT9r7eEq8vfHtY6/Llu7CzMYwv4/V+VEqgPYpAO5EFAlU8mmOyu0xh3dE8fvmwQwIiTdgccNtlQLxOJD22APf2pB/Tt3KgHcHZrlvB7KGEHvK9MPdBvM0Es6BuKdP/xJNj3MS1Z5D70a+4iVqgSiFjH57VKlDTZTpAA/Q2v/8KiSe7CCMlZBz3kWcf3LLG0hpA3ZjINY90TPAjcxDZWaZYevdrQgg0fLuqh3Ga4Br+BuEhfEDE3HYO0SI89Ep6+6bj33IaUOKLVasRTG3kKvqKbG+dcPznArtVYIxvhoa4qv6XxE80U3FQ==
+;;;; signature/miktex: F/t3V6rfhqtEyFxjd7y9hgdn57b01rp3pgwlWzZiHiV1Leuj4WFIRV72NhFMnmxuxhmN5Y3LdWYDFb27azsx0ibi387TxPyHRdt5Ll6sXwG8eu4z8X49uHzH/RCJemocDNyakCgReVzvXuaURQpv8T9ovagomDtNys0HjzGL9u1Tn2oRa8LTm040B7gjukVTq+lw6Etj0Nj11Iql1mGKAlcXxdIHuBDcLidg0sYCAz7kzt72rodvQgxwgFlZQ7QIgUMJjuTkB/SadwUlonbSUJboTJatlPruayawDTsZruwu1wBXzjh1u3VUcBg2IbptcfW85vixregqVI3ujG5yUA==
;;;;-----END MIKTEX SIGNATURE-----
diff --git a/systems/win32/miktex/tm/packages/pr.ini b/systems/win32/miktex/tm/packages/pr.ini
index 65aaee363e..ad0fe0a51f 100644
--- a/systems/win32/miktex/tm/packages/pr.ini
+++ b/systems/win32/miktex/tm/packages/pr.ini
@@ -1,13 +1,13 @@
[repository]
-date=1661199115
+date=1661285513
lastupd=asymptote create-theorem create-theorem__doc create-theorem__source easybook easybook__doc easybook__source exam-zh exam-zh__doc exam-zh__source ffcode ffcode__doc ffcode__source fixdif fixdif__doc fixdif__source hereapplies hereapplies__doc hereapplies__source media4svg
-lstdigest=75090ad8e053e6d425f7496443f07069
+lstdigest=6f9533620490cdbc46f2c9201b60152e
numpkg=5869
relstate=stable
-version=8269
+version=8270
;;;;This configuration file is signed by a MiKTeX maintainer. The signature follows.
;;;;-----BEGIN MIKTEX SIGNATURE-----
-;;;; signature/miktex: C9oYzP5dZ8xuhvwpa7ih27aZG7AL6SrwpVKEqfDqE4b+n0hTWK5nZQIzn1A4ub1vJ0AepDzJe+iG497exNqcwUaNXAjw7qrFCjpUtAwfmtAiwNZcoADN4Ocr+dmrYoz7n/m4drAeg8SN4udIq/CygYHuHaQ2X1DwUCBdNVG/YyABOnRDUaK+mxan0pB0PEANYdA98DBum2qHX6PsA1zWZm33qf5JhwWOIe65QQunADKquwLAauDC03Q9XN2jrY7nNNyewCOkKz4f1EyKUm7fvNjjVU3WS8z+UdTtn8+BWDFhmqqg1i5or2NwjSGWUwBYfGAk7Sz89W0jL7Y9OF++8Q==
+;;;; signature/miktex: tfafniYDqxvKd3MwJ0YOhzt5v38zoMqZoSCy/t1PkqYe62hNvJCVTkLUgbUParEq5/f18c/f5PSFzj/puC+47GRgiUauMAcwd7ULONLS2fwQGhUzDklQjNCAhv2ELsCWPwa/MUqiImYx0tYC1hoWYpvChC523xxrPtbNtakIIp9b2AtvertHYVBBzaAWpR6z/bLN3b1HxDljpYCVWAw0LhBQWQEl2C45JRKwxyDrk5yupecmzJlQcTyFoCn2a1gaXPNbhk2SeYClNGqQPjubXjB8Z+YXx25uU3MDR6jsJXCmDxyn90w7w1aLVbs9R3km4eUFVeG2/DhtvzePDCVZSA==
;;;;-----END MIKTEX SIGNATURE-----
diff --git a/timestamp b/timestamp
index 4f9243235f..a0f5381616 100644
--- a/timestamp
+++ b/timestamp
@@ -2,4 +2,4 @@
# The source CTAN of this site's material:
dante.ctan.org
# The year-month-day-hour-minute of this site's material:
-2022-08-23-02-02
+2022-08-24-02-02