summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2021-06-10 03:01:49 +0000
committerNorbert Preining <norbert@preining.info>2021-06-10 03:01:49 +0000
commit2bd77f5a4d02b0d1649589aa7a548e79b198f6af (patch)
tree04786bcca2c349d0cb1373335978e03bb117df7b
parentf7fc4ad3995d7f6ebbed20c20bf06e3a9176ea04 (diff)
CTAN sync 202106100301
-rw-r--r--FILES.byname692
-rw-r--r--FILES.byname.gzbin2320039 -> 2320808 bytes
-rw-r--r--FILES.last07days1435
-rw-r--r--fonts/utilities/jfmutil/LICENSE2
-rw-r--r--fonts/utilities/jfmutil/README-ja.md4
-rw-r--r--fonts/utilities/jfmutil/README.md5
-rw-r--r--fonts/utilities/jfmutil/jfmutil.pl10
-rw-r--r--graphics/minim-hatching/EUPL-1.2-EN.txt287
-rw-r--r--graphics/minim-hatching/README24
-rw-r--r--graphics/minim-hatching/minim-hatching-doc.mp117
-rw-r--r--graphics/minim-hatching/minim-hatching-doc.pdf1402
-rw-r--r--graphics/minim-hatching/minim-hatching.mp225
-rw-r--r--graphics/pictex/PiCTeX_manual.pdfbin0 -> 1419473 bytes
-rw-r--r--graphics/pictex/README11
-rw-r--r--graphics/pictex/README.txt9
-rw-r--r--graphics/pictex/addon/00index16
-rw-r--r--[l---------]graphics/pictex/addon/autoarea/README15
-rw-r--r--graphics/pictex/addon/autoarea/README.aa14
-rw-r--r--graphics/pictex/addon/autoarea/autodemo/autodemo+.log82
-rw-r--r--graphics/pictex/addon/autoarea/autodemo/autodemo-.log80
-rw-r--r--graphics/pictex/addon/picmore.tex152
-rw-r--r--graphics/pictex/addon/pictex.sty34
-rw-r--r--graphics/pictex/addon/pictexwd.sty38
-rw-r--r--graphics/pictex/addon/pictexwd.tex7354
-rw-r--r--graphics/pictex/postpictex.tex14
-rw-r--r--graphics/pictex/prepictex.tex14
-rw-r--r--macros/generic/wichura-table/README.txt18
-rw-r--r--macros/generic/wichura-table/TaBlE_manual.pdfbin0 -> 1566321 bytes
-rw-r--r--macros/generic/wichura-table/table.tex1961
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-mla/CHANGES71
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-mla/README15
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-mla/american-mla.lbx16
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-mla/doc/biblatex-mla.pdfbin396718 -> 167698 bytes
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-mla/doc/biblatex-mla.tex401
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-mla/doc/citation-examples-new.pdfbin283863 -> 0 bytes
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-mla/doc/citation-examples-new.tex33
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-mla/doc/citation-examples.pdfbin246890 -> 0 bytes
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-mla/doc/citation-examples.tex23
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-mla/doc/examples.bib (renamed from macros/latex/contrib/biblatex-contrib/biblatex-mla/doc/handbooksamples-new.bib)891
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-mla/doc/examples.pdfbin0 -> 116506 bytes
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-mla/doc/examples.tex46
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-mla/doc/handbooksamplebib-new.pdfbin270033 -> 0 bytes
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-mla/doc/handbooksamplebib-new.tex18
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-mla/doc/handbooksamplebib.pdfbin273209 -> 0 bytes
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-mla/doc/handbooksamplebib.tex17
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-mla/doc/handbooksamples.bib2038
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-mla/doc/samples.bib661
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-mla/english-mla.lbx54
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-mla/italian-mla.lbx52
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-mla/mla-footnotes.cbx434
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-mla/mla-new.bbx1292
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-mla/mla-new.cbx834
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-mla/mla-strict.bbx1337
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-mla/mla-strict.cbx5
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-mla/mla.bbx1322
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-mla/mla.cbx667
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-mla/mla.dbx56
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-mla/mla7.bbx1224
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-mla/mla7.cbx5
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-mla/portuguese-mla.lbx51
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-mla/spanish-mla.lbx51
-rw-r--r--macros/latex/contrib/easybook/easybook.dtx42
-rw-r--r--macros/latex/contrib/easybook/easybook.pdfbin324274 -> 324143 bytes
-rw-r--r--macros/latex/contrib/hvfloat/Changes2
-rw-r--r--macros/latex/contrib/hvfloat/doc/examples/capPos.pdfbin77925 -> 95386 bytes
-rw-r--r--macros/latex/contrib/hvfloat/doc/examples/odd2s1c.pdfbin85195 -> 245795 bytes
-rw-r--r--macros/latex/contrib/hvfloat/doc/hvfloat.pdfbin7113219 -> 7114454 bytes
-rw-r--r--macros/latex/contrib/hvfloat/latex/hvfloat.sty53
-rw-r--r--macros/latex/contrib/siunitx/CHANGELOG.md10
-rw-r--r--macros/latex/contrib/siunitx/siunitx-code.pdfbin1485621 -> 1486326 bytes
-rw-r--r--macros/latex/contrib/siunitx/siunitx-emulation.dtx4
-rw-r--r--macros/latex/contrib/siunitx/siunitx-number.dtx22
-rw-r--r--macros/latex/contrib/siunitx/siunitx-symbol.dtx1
-rw-r--r--macros/latex/contrib/siunitx/siunitx.dtx2
-rw-r--r--macros/latex/contrib/siunitx/siunitx.pdfbin634770 -> 634773 bytes
-rw-r--r--macros/latex/contrib/siunitx/siunitx.tex2
-rw-r--r--macros/luatex/generic/minim-math/EUPL-1.2-EN.txt287
-rw-r--r--macros/luatex/generic/minim-math/README27
-rw-r--r--macros/luatex/generic/minim-math/minim-math-table.lua2507
-rw-r--r--macros/luatex/generic/minim-math/minim-math.doc244
-rw-r--r--macros/luatex/generic/minim-math/minim-math.lua482
-rw-r--r--macros/luatex/generic/minim-math/minim-math.pdfbin0 -> 106915 bytes
-rw-r--r--macros/luatex/generic/minim-math/minim-math.tex517
-rw-r--r--macros/luatex/generic/minim-mp/EUPL-1.2-EN.txt287
-rw-r--r--macros/luatex/generic/minim-mp/README28
-rw-r--r--macros/luatex/generic/minim-mp/minim-mp.doc329
-rw-r--r--macros/luatex/generic/minim-mp/minim-mp.ini17
-rw-r--r--macros/luatex/generic/minim-mp/minim-mp.lua1282
-rw-r--r--macros/luatex/generic/minim-mp/minim-mp.pdfbin0 -> 82287 bytes
-rw-r--r--macros/luatex/generic/minim-mp/minim-mp.tex61
-rw-r--r--macros/luatex/generic/minim-mp/minim.mp73
-rw-r--r--macros/luatex/generic/minim-pdf/EUPL-1.2-EN.txt287
-rw-r--r--macros/luatex/generic/minim-pdf/README36
-rw-r--r--macros/luatex/generic/minim-pdf/minim-languagecodes.lua146
-rw-r--r--macros/luatex/generic/minim-pdf/minim-pdf.doc425
-rw-r--r--macros/luatex/generic/minim-pdf/minim-pdf.lua1114
-rw-r--r--macros/luatex/generic/minim-pdf/minim-pdf.pdfbin0 -> 108362 bytes
-rw-r--r--macros/luatex/generic/minim-pdf/minim-pdf.tex351
-rw-r--r--macros/luatex/generic/minim/EUPL-1.2-EN.txt287
-rw-r--r--macros/luatex/generic/minim/README40
-rw-r--r--macros/luatex/generic/minim/minim-alloc.doc216
-rw-r--r--macros/luatex/generic/minim/minim-alloc.lua196
-rw-r--r--macros/luatex/generic/minim/minim-alloc.tex184
-rw-r--r--macros/luatex/generic/minim/minim-callbacks.lua265
-rw-r--r--macros/luatex/generic/minim/minim-doc.sty215
-rw-r--r--macros/luatex/generic/minim/minim-etex.tex413
-rw-r--r--macros/luatex/generic/minim/minim-hooks.lua30
-rw-r--r--macros/luatex/generic/minim/minim-hooks.tex56
-rw-r--r--macros/luatex/generic/minim/minim-lmodern.tex28
-rw-r--r--macros/luatex/generic/minim/minim-plain.tex786
-rw-r--r--macros/luatex/generic/minim/minim.doc81
-rw-r--r--macros/luatex/generic/minim/minim.ini25
-rw-r--r--macros/luatex/generic/minim/minim.pdfbin0 -> 285949 bytes
-rw-r--r--macros/luatex/generic/minim/minim.tex8
-rw-r--r--systems/texlive/tlnet/tlpkg/texlive.tlpdb315
-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.xzbin2310696 -> 2311828 bytes
-rw-r--r--systems/win32/miktex/tm/packages/files.csv.lzmabin582460 -> 582716 bytes
-rw-r--r--systems/win32/miktex/tm/packages/next/files.csv.lzmabin582557 -> 583051 bytes
-rw-r--r--systems/win32/miktex/tm/packages/next/pr.ini10
-rw-r--r--systems/win32/miktex/tm/packages/pr.ini12
-rw-r--r--systems/win32/w32tex/ChangeLog22
-rw-r--r--timestamp2
125 files changed, 24893 insertions, 12583 deletions
diff --git a/FILES.byname b/FILES.byname
index 9b82149ad0..cf21be6d85 100644
--- a/FILES.byname
+++ b/FILES.byname
@@ -5087,7 +5087,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
-2021/06/08 | 271508 | FILES.last07days
+2021/06/09 | 253498 | FILES.last07days
2020/08/14 | 104065 | fonts/academicons/academicons.pdf
2020/08/14 | 17247 | fonts/academicons/academicons.sty
2020/08/14 | 6546 | fonts/academicons/academicons.tex
@@ -131747,11 +131747,11 @@
2000/02/10 | 44061 | fonts/utilities/gsftopk/gsftopkk-1.19.1.tar.gz
2000/12/20 | 44383 | fonts/utilities/gsftopk/gsftopkk-1.19.2.tar.gz
2000/01/25 | 44051 | fonts/utilities/gsftopk/gsftopkk-1.19.tar.gz
-2020/05/04 | 105886 | fonts/utilities/jfmutil/jfmutil.pl
-2020/05/04 | 1091 | fonts/utilities/jfmutil/LICENSE
-2020/05/04 | 23559 | fonts/utilities/jfmutil/README-ja.md
-2020/05/04 | 4670 | fonts/utilities/jfmutil/README.md
-2020/05/06 | 38891 | fonts/utilities/jfmutil.zip
+2021/05/29 | 105886 | fonts/utilities/jfmutil/jfmutil.pl
+2021/06/09 | 1091 | fonts/utilities/jfmutil/LICENSE
+2021/05/29 | 23704 | fonts/utilities/jfmutil/README-ja.md
+2021/05/29 | 4796 | fonts/utilities/jfmutil/README.md
+2021/06/09 | 38955 | fonts/utilities/jfmutil.zip
2007/01/10 | 626729 | fonts/utilities/JustFontItTE/Linux/jfite101beta1.tar.gz
2007/01/10 | 2330 | fonts/utilities/JustFontItTE/README
2007/01/10 | 316700 | fonts/utilities/JustFontItTE/Windows/jfite101.zip
@@ -141254,6 +141254,12 @@
2016/07/09 | 1314207 | graphics/mgltex/sample.pdf
2016/07/09 | 14692 | graphics/mgltex/sample.tex
2016/07/10 | 1885199 | graphics/mgltex.zip
+2020/03/06 | 13827 | graphics/minim-hatching/EUPL-1.2-EN.txt
+2021/06/09 | 4241 | graphics/minim-hatching/minim-hatching-doc.mp
+2021/06/09 | 62127 | graphics/minim-hatching/minim-hatching-doc.pdf
+2021/06/08 | 7248 | graphics/minim-hatching/minim-hatching.mp
+2021/06/08 | 507 | graphics/minim-hatching/README
+2021/06/09 | 35935 | graphics/minim-hatching.zip
1995/05/25 | 14864 | graphics/mma2ltx/amiga/extpro
1995/06/21 | 44696 | graphics/mma2ltx/amiga/mma2ltx
1994/07/18 | 32165 | graphics/mma2ltx/doc/12mag_3d.eps
@@ -146099,36 +146105,34 @@
2021/03/27 | 24561 | graphics/pgf/contrib/yquant/tex/yquant-tools.tex
2021/03/27 | 623618 | graphics/pgf/contrib/yquant.zip
2007/12/11 | 654 | graphics/pgf/README
-1994/04/20 | 473 | graphics/pictex/addon/00index
2008/08/12 | 1048 | graphics/pictex/addon/autoarea/ANNOUNCE.txt
2008/08/12 | 9341 | graphics/pictex/addon/autoarea/autoarea.sty
-2008/05/07 | 3490 | graphics/pictex/addon/autoarea/autodemo/autodemo-.log
-2008/05/07 | 3568 | graphics/pictex/addon/autoarea/autodemo/autodemo+.log
2008/05/07 | 25493 | graphics/pictex/addon/autoarea/autodemo/autodemo-.pdf
2008/05/07 | 24873 | graphics/pictex/addon/autoarea/autodemo/autodemo+.pdf
2008/04/19 | 240 | graphics/pictex/addon/autoarea/autodemo/autodemo-.tex
2008/04/19 | 519 | graphics/pictex/addon/autoarea/autodemo/autodemo.tex
2008/04/19 | 186 | graphics/pictex/addon/autoarea/autodemo/autodemo+.tex
2008/08/12 | 642 | graphics/pictex/addon/autoarea/autodemo/README.autodemo
-2008/08/12 | 479 | graphics/pictex/addon/autoarea/README.aa
+2008/08/12 | 479 | graphics/pictex/addon/autoarea/README
2008/08/12 | 55807 | graphics/pictex/addon/autoarea.zip
2005/10/19 | 4608 | graphics/pictex/addon/piccorr.sty
-1994/04/20 | 2952 | graphics/pictex/addon/picmore.tex
-1994/04/20 | 311 | graphics/pictex/addon/pictex.sty
-1994/04/20 | 416 | graphics/pictex/addon/pictexwd.sty
-1994/04/20 | 133232 | graphics/pictex/addon/pictexwd.tex
+1994/04/20 | 2876 | graphics/pictex/addon/picmore.tex
+1994/04/20 | 294 | graphics/pictex/addon/pictex.sty
+1994/04/20 | 397 | graphics/pictex/addon/pictexwd.sty
+1994/04/20 | 129555 | graphics/pictex/addon/pictexwd.tex
1994/04/20 | 457 | graphics/pictex/addon/pictexzusatz.txt
1992/08/27 | 3041 | graphics/pictex/errorbars.tex
1992/08/27 | 10519 | graphics/pictex/latexpicobjs.tex
+2005/04/03 | 1419473 | graphics/pictex/PiCTeX_manual.pdf
1992/08/27 | 129709 | graphics/pictex/pictex.tex
1992/08/27 | 1322 | graphics/pictex/pointers.tex
-1992/08/27 | 1399 | graphics/pictex/postpictex.tex
-1992/08/27 | 1082 | graphics/pictex/prepictex.tex
-2011/04/01 | 303 | graphics/pictex/README
+2021/06/08 | 1848 | graphics/pictex/postpictex.tex
+2021/06/08 | 1368 | graphics/pictex/prepictex.tex
1992/08/27 | 876 | graphics/pictex/readme.errorbars
+2021/06/08 | 298 | graphics/pictex/README.txt
1989/11/26 | 7270 | graphics/pictex/texpictex.tex
1992/08/31 | 11382 | graphics/pictex/tree.sty
-2011/04/03 | 199533 | graphics/pictex.zip
+2021/06/09 | 1245432 | graphics/pictex.zip
2018/05/31 | 17537 | graphics/postage/postage.dtx
2018/05/31 | 2443 | graphics/postage/postage.ins
2018/05/30 | 335762 | graphics/postage/postage.pdf
@@ -173133,7 +173137,7 @@
2012/09/24 | 130991 | install/macros/latex/contrib/scrjrnl.tds.zip
2020/02/15 | 1097592 | install/macros/latex/contrib/sdaps.tds.zip
2019/12/10 | 544332 | install/macros/latex/contrib/selinput.tds.zip
-2021/06/07 | 2713986 | install/macros/latex/contrib/siunitx.tds.zip
+2021/06/09 | 2714917 | install/macros/latex/contrib/siunitx.tds.zip
2019/10/15 | 315856 | install/macros/latex/contrib/skmath.tds.zip
2019/10/16 | 345652 | install/macros/latex/contrib/skrapport.tds.zip
2019/12/15 | 357584 | install/macros/latex/contrib/soulutf8.tds.zip
@@ -187869,6 +187873,10 @@
1994/03/19 | 1183 | macros/generic/vrb/readme
1994/03/19 | 4184 | macros/generic/vrb/vrb.tex
2005/09/25 | 2555 | macros/generic/vrb.zip
+2021/06/09 | 471 | macros/generic/wichura-table/README.txt
+2005/04/03 | 1566321 | macros/generic/wichura-table/TaBlE_manual.pdf
+2000/06/28 | 56593 | macros/generic/wichura-table/table.tex
+2021/06/09 | 769585 | macros/generic/wichura-table.zip
2020/06/22 | 1393 | macros/generic/witharrows/README.md
2021/03/04 | 280940 | macros/generic/witharrows/witharrows.dtx
2021/03/04 | 271551 | macros/generic/witharrows/witharrows-french.pdf
@@ -192979,31 +192987,29 @@
2020/01/07 | 1408 | macros/latex/contrib/biblatex-contrib/biblatex-manuscripts-philology/manuscripts-shared.dbx
2020/01/07 | 768 | macros/latex/contrib/biblatex-contrib/biblatex-manuscripts-philology/README
2020/01/07 | 154952 | macros/latex/contrib/biblatex-contrib/biblatex-manuscripts-philology.zip
-2016/07/28 | 809 | macros/latex/contrib/biblatex-contrib/biblatex-mla/american-mla.lbx
-2016/11/02 | 13956 | macros/latex/contrib/biblatex-contrib/biblatex-mla/CHANGES
-2016/11/02 | 396718 | macros/latex/contrib/biblatex-contrib/biblatex-mla/doc/biblatex-mla.pdf
-2016/11/02 | 55323 | macros/latex/contrib/biblatex-contrib/biblatex-mla/doc/biblatex-mla.tex
-2016/11/06 | 283863 | macros/latex/contrib/biblatex-contrib/biblatex-mla/doc/citation-examples-new.pdf
-2016/11/06 | 3212 | macros/latex/contrib/biblatex-contrib/biblatex-mla/doc/citation-examples-new.tex
-2016/11/06 | 246890 | macros/latex/contrib/biblatex-contrib/biblatex-mla/doc/citation-examples.pdf
-2016/07/28 | 2742 | macros/latex/contrib/biblatex-contrib/biblatex-mla/doc/citation-examples.tex
-2016/11/05 | 270033 | macros/latex/contrib/biblatex-contrib/biblatex-mla/doc/handbooksamplebib-new.pdf
-2016/11/05 | 353 | macros/latex/contrib/biblatex-contrib/biblatex-mla/doc/handbooksamplebib-new.tex
-2016/07/28 | 273209 | macros/latex/contrib/biblatex-contrib/biblatex-mla/doc/handbooksamplebib.pdf
-2016/07/28 | 305 | macros/latex/contrib/biblatex-contrib/biblatex-mla/doc/handbooksamplebib.tex
-2016/07/28 | 61223 | macros/latex/contrib/biblatex-contrib/biblatex-mla/doc/handbooksamples.bib
-2016/11/05 | 61223 | macros/latex/contrib/biblatex-contrib/biblatex-mla/doc/handbooksamples-new.bib
-2016/09/02 | 21545 | macros/latex/contrib/biblatex-contrib/biblatex-mla/doc/samples.bib
-2016/07/28 | 8274 | macros/latex/contrib/biblatex-contrib/biblatex-mla/english-mla.lbx
-2016/07/28 | 7355 | macros/latex/contrib/biblatex-contrib/biblatex-mla/italian-mla.lbx
-2016/11/05 | 38254 | macros/latex/contrib/biblatex-contrib/biblatex-mla/mla.bbx
-2016/11/05 | 26958 | macros/latex/contrib/biblatex-contrib/biblatex-mla/mla.cbx
-2016/11/06 | 40664 | macros/latex/contrib/biblatex-contrib/biblatex-mla/mla-new.bbx
-2016/11/05 | 26554 | macros/latex/contrib/biblatex-contrib/biblatex-mla/mla-new.cbx
-2016/07/28 | 5936 | macros/latex/contrib/biblatex-contrib/biblatex-mla/portuguese-mla.lbx
-2016/11/02 | 1919 | macros/latex/contrib/biblatex-contrib/biblatex-mla/README
-2016/07/28 | 7296 | macros/latex/contrib/biblatex-contrib/biblatex-mla/spanish-mla.lbx
-2016/11/06 | 1556865 | macros/latex/contrib/biblatex-contrib/biblatex-mla.zip
+2021/06/08 | 803 | macros/latex/contrib/biblatex-contrib/biblatex-mla/american-mla.lbx
+2021/06/08 | 15795 | macros/latex/contrib/biblatex-contrib/biblatex-mla/CHANGES
+2021/06/08 | 167698 | macros/latex/contrib/biblatex-contrib/biblatex-mla/doc/biblatex-mla.pdf
+2021/06/08 | 62889 | macros/latex/contrib/biblatex-contrib/biblatex-mla/doc/biblatex-mla.tex
+2021/06/08 | 80379 | macros/latex/contrib/biblatex-contrib/biblatex-mla/doc/examples.bib
+2021/06/08 | 116506 | macros/latex/contrib/biblatex-contrib/biblatex-mla/doc/examples.pdf
+2021/06/08 | 5847 | macros/latex/contrib/biblatex-contrib/biblatex-mla/doc/examples.tex
+2021/06/08 | 9068 | macros/latex/contrib/biblatex-contrib/biblatex-mla/english-mla.lbx
+2021/06/08 | 8753 | macros/latex/contrib/biblatex-contrib/biblatex-mla/italian-mla.lbx
+2021/06/08 | 38309 | macros/latex/contrib/biblatex-contrib/biblatex-mla/mla7.bbx
+2021/06/08 | 108 | macros/latex/contrib/biblatex-contrib/biblatex-mla/mla7.cbx
+2021/06/08 | 4748 | macros/latex/contrib/biblatex-contrib/biblatex-mla/mla.bbx
+2021/06/08 | 16842 | macros/latex/contrib/biblatex-contrib/biblatex-mla/mla.cbx
+2021/06/08 | 1171 | macros/latex/contrib/biblatex-contrib/biblatex-mla/mla.dbx
+2021/06/08 | 12947 | macros/latex/contrib/biblatex-contrib/biblatex-mla/mla-footnotes.cbx
+2021/06/08 | 213 | macros/latex/contrib/biblatex-contrib/biblatex-mla/mla-new.bbx
+2021/06/08 | 209 | macros/latex/contrib/biblatex-contrib/biblatex-mla/mla-new.cbx
+2021/06/08 | 42233 | macros/latex/contrib/biblatex-contrib/biblatex-mla/mla-strict.bbx
+2021/06/08 | 110 | macros/latex/contrib/biblatex-contrib/biblatex-mla/mla-strict.cbx
+2021/06/08 | 7067 | macros/latex/contrib/biblatex-contrib/biblatex-mla/portuguese-mla.lbx
+2021/06/08 | 2151 | macros/latex/contrib/biblatex-contrib/biblatex-mla/README
+2021/06/08 | 8428 | macros/latex/contrib/biblatex-contrib/biblatex-mla/spanish-mla.lbx
+2021/06/09 | 331146 | macros/latex/contrib/biblatex-contrib/biblatex-mla.zip
2017/01/25 | 133371 | macros/latex/contrib/biblatex-contrib/biblatex-morenames/documentation/biblatex-morenames.pdf
2017/01/25 | 12249 | macros/latex/contrib/biblatex-contrib/biblatex-morenames/documentation/biblatex-morenames.tex
2017/01/25 | 622 | macros/latex/contrib/biblatex-contrib/biblatex-morenames/documentation/example-bookineditor.bib
@@ -197580,11 +197586,11 @@
2008/02/10 | 19110 | macros/latex/contrib/ean13isbn/License.txt
2021/01/24 | 422 | macros/latex/contrib/ean13isbn/README
2021/01/24 | 322624 | macros/latex/contrib/ean13isbn.zip
-2021/06/08 | 131018 | macros/latex/contrib/easybook/easybook.dtx
+2021/06/09 | 131006 | macros/latex/contrib/easybook/easybook.dtx
2021/06/08 | 1499 | macros/latex/contrib/easybook/easybook.ins
-2021/06/08 | 324274 | macros/latex/contrib/easybook/easybook.pdf
+2021/06/09 | 324143 | macros/latex/contrib/easybook/easybook.pdf
2021/06/08 | 1968 | macros/latex/contrib/easybook/README.md
-2021/06/08 | 356840 | macros/latex/contrib/easybook.zip
+2021/06/09 | 356748 | macros/latex/contrib/easybook.zip
2009/06/17 | 82589 | macros/latex/contrib/easy/doc/docbib.pdf
2009/06/17 | 78378 | macros/latex/contrib/easy/doc/docbmat.pdf
2009/06/17 | 99132 | macros/latex/contrib/easy/doc/doceqn.pdf
@@ -202273,13 +202279,13 @@
2021/06/01 | 2164 | macros/latex/contrib/hvarabic/latex/hvarabic.sty
2020/06/08 | 548 | macros/latex/contrib/hvarabic/README.md
2021/06/01 | 153159 | macros/latex/contrib/hvarabic.zip
-2021/06/07 | 2511 | macros/latex/contrib/hvfloat/Changes
+2021/06/09 | 2652 | macros/latex/contrib/hvfloat/Changes
2021/05/31 | 82729 | macros/latex/contrib/hvfloat/doc/examples/after1s1c.pdf
2021/05/17 | 2374 | macros/latex/contrib/hvfloat/doc/examples/after1s1c.tex
2021/05/31 | 87651 | macros/latex/contrib/hvfloat/doc/examples/after2s2c.pdf
2021/05/17 | 2457 | macros/latex/contrib/hvfloat/doc/examples/after2s2c.tex
2021/05/17 | 2956 | macros/latex/contrib/hvfloat/doc/examples/capPos.inc
-2021/05/06 | 77925 | macros/latex/contrib/hvfloat/doc/examples/capPos.pdf
+2021/05/31 | 95386 | macros/latex/contrib/hvfloat/doc/examples/capPos.pdf
2021/05/31 | 1568 | macros/latex/contrib/hvfloat/doc/examples/capPos.tex
2021/05/17 | 3471 | macros/latex/contrib/hvfloat/doc/examples/capVPos.inc
2021/05/31 | 83533 | macros/latex/contrib/hvfloat/doc/examples/default1s1c.pdf
@@ -202332,7 +202338,7 @@
2021/05/17 | 2389 | macros/latex/contrib/hvfloat/doc/examples/odd1s1c.tex
2021/05/31 | 87711 | macros/latex/contrib/hvfloat/doc/examples/odd1s2c.pdf
2021/05/17 | 2517 | macros/latex/contrib/hvfloat/doc/examples/odd1s2c.tex
-2021/05/31 | 85195 | macros/latex/contrib/hvfloat/doc/examples/odd2s1c.pdf
+2021/06/09 | 245795 | macros/latex/contrib/hvfloat/doc/examples/odd2s1c.pdf
2021/05/17 | 2495 | macros/latex/contrib/hvfloat/doc/examples/odd2s1c.tex
2021/05/31 | 86754 | macros/latex/contrib/hvfloat/doc/examples/odd2s2c.pdf
2021/05/17 | 2525 | macros/latex/contrib/hvfloat/doc/examples/odd2s2c.tex
@@ -202388,16 +202394,16 @@
2021/05/31 | 4184 | macros/latex/contrib/hvfloat/doc/examples/wide1s2c.tex
2021/05/31 | 123328 | macros/latex/contrib/hvfloat/doc/examples/wide2s2c.pdf
2021/05/31 | 3964 | macros/latex/contrib/hvfloat/doc/examples/wide2s2c.tex
-2021/06/06 | 7113219 | macros/latex/contrib/hvfloat/doc/hvfloat.pdf
+2021/06/09 | 7114454 | macros/latex/contrib/hvfloat/doc/hvfloat.pdf
2021/06/07 | 116367 | macros/latex/contrib/hvfloat/doc/hvfloat.tex
2019/04/01 | 69089 | macros/latex/contrib/hvfloat/doc/images/CTAN.png
2019/04/01 | 5208 | macros/latex/contrib/hvfloat/doc/images/frose.png
2021/05/12 | 170 | macros/latex/contrib/hvfloat/doc/images/missing.txt
2019/04/01 | 2493 | macros/latex/contrib/hvfloat/doc/images/rose.png
2020/10/31 | 878 | macros/latex/contrib/hvfloat/latex/hvfloat-fps.sty
-2021/06/07 | 60424 | macros/latex/contrib/hvfloat/latex/hvfloat.sty
+2021/06/09 | 61005 | macros/latex/contrib/hvfloat/latex/hvfloat.sty
2020/06/07 | 563 | macros/latex/contrib/hvfloat/README
-2021/06/07 | 14625290 | macros/latex/contrib/hvfloat.zip
+2021/06/09 | 14802216 | macros/latex/contrib/hvfloat.zip
2017/12/12 | 533 | macros/latex/contrib/hvindex/Changes
2017/12/12 | 74896 | macros/latex/contrib/hvindex/doc/hvindex-doc.pdf
2017/12/12 | 7652 | macros/latex/contrib/hvindex/doc/hvindex-doc.tex
@@ -211943,34 +211949,34 @@
2007/12/02 | 2971 | macros/latex/contrib/SIunits/SIunits.ins
2007/12/02 | 328621 | macros/latex/contrib/SIunits/SIunits.pdf
2007/12/02 | 296391 | macros/latex/contrib/SIunits.zip
-2021/06/07 | 41826 | macros/latex/contrib/siunitx/CHANGELOG.md
-2021/06/07 | 964 | macros/latex/contrib/siunitx/README.md
-2021/06/07 | 10106 | macros/latex/contrib/siunitx/siunitx-abbreviation.dtx
-2021/06/07 | 4748 | macros/latex/contrib/siunitx/siunitx-abbreviations.cfg
-2021/06/07 | 16529 | macros/latex/contrib/siunitx/siunitx-angle.dtx
-2021/06/07 | 1729 | macros/latex/contrib/siunitx/siunitx-binary.cfg
-2021/06/07 | 2883 | macros/latex/contrib/siunitx/siunitx-binary.dtx
-2021/06/07 | 1485621 | macros/latex/contrib/siunitx/siunitx-code.pdf
-2021/06/07 | 2426 | macros/latex/contrib/siunitx/siunitx-code.tex
-2021/06/07 | 8762 | macros/latex/contrib/siunitx/siunitx-command.dtx
-2021/06/07 | 25717 | macros/latex/contrib/siunitx/siunitx-complex.dtx
-2021/06/07 | 33332 | macros/latex/contrib/siunitx/siunitx-compound.dtx
-2021/06/07 | 19542 | macros/latex/contrib/siunitx/siunitx.dtx
-2021/06/07 | 29816 | macros/latex/contrib/siunitx/siunitx-emulation.dtx
-2021/06/07 | 3687 | macros/latex/contrib/siunitx/siunitx.ins
-2021/06/07 | 4629 | macros/latex/contrib/siunitx/siunitx-locale.dtx
-2021/06/07 | 114975 | macros/latex/contrib/siunitx/siunitx-number.dtx
-2021/06/07 | 634770 | macros/latex/contrib/siunitx/siunitx.pdf
-2021/06/07 | 30792 | macros/latex/contrib/siunitx/siunitx-print.dtx
-2021/06/07 | 14351 | macros/latex/contrib/siunitx/siunitx-quantity.dtx
-2021/06/07 | 8774 | macros/latex/contrib/siunitx/siunitx-symbol.dtx
-2021/06/07 | 48536 | macros/latex/contrib/siunitx/siunitx-table.dtx
-2021/06/07 | 475888 | macros/latex/contrib/siunitx/siunitx-table.pdf
-2021/06/07 | 145224 | macros/latex/contrib/siunitx/siunitx.tex
-2021/06/07 | 97866 | macros/latex/contrib/siunitx/siunitx-unit.dtx
-2021/06/07 | 273398 | macros/latex/contrib/siunitx/siunitx-v2.sty
-2021/06/07 | 31738 | macros/latex/contrib/siunitx/siunitx-version-1.cfg
-2021/06/07 | 2676085 | macros/latex/contrib/siunitx.zip
+2021/06/09 | 42090 | macros/latex/contrib/siunitx/CHANGELOG.md
+2021/06/09 | 964 | macros/latex/contrib/siunitx/README.md
+2021/06/09 | 10106 | macros/latex/contrib/siunitx/siunitx-abbreviation.dtx
+2021/06/09 | 4748 | macros/latex/contrib/siunitx/siunitx-abbreviations.cfg
+2021/06/09 | 16529 | macros/latex/contrib/siunitx/siunitx-angle.dtx
+2021/06/09 | 1729 | macros/latex/contrib/siunitx/siunitx-binary.cfg
+2021/06/09 | 2883 | macros/latex/contrib/siunitx/siunitx-binary.dtx
+2021/06/09 | 1486326 | macros/latex/contrib/siunitx/siunitx-code.pdf
+2021/06/09 | 2426 | macros/latex/contrib/siunitx/siunitx-code.tex
+2021/06/09 | 8762 | macros/latex/contrib/siunitx/siunitx-command.dtx
+2021/06/09 | 25717 | macros/latex/contrib/siunitx/siunitx-complex.dtx
+2021/06/09 | 33332 | macros/latex/contrib/siunitx/siunitx-compound.dtx
+2021/06/09 | 19542 | macros/latex/contrib/siunitx/siunitx.dtx
+2021/06/09 | 29819 | macros/latex/contrib/siunitx/siunitx-emulation.dtx
+2021/06/09 | 3687 | macros/latex/contrib/siunitx/siunitx.ins
+2021/06/09 | 4629 | macros/latex/contrib/siunitx/siunitx-locale.dtx
+2021/06/09 | 115561 | macros/latex/contrib/siunitx/siunitx-number.dtx
+2021/06/09 | 634773 | macros/latex/contrib/siunitx/siunitx.pdf
+2021/06/09 | 30792 | macros/latex/contrib/siunitx/siunitx-print.dtx
+2021/06/09 | 14351 | macros/latex/contrib/siunitx/siunitx-quantity.dtx
+2021/06/09 | 8726 | macros/latex/contrib/siunitx/siunitx-symbol.dtx
+2021/06/09 | 48536 | macros/latex/contrib/siunitx/siunitx-table.dtx
+2021/06/09 | 475888 | macros/latex/contrib/siunitx/siunitx-table.pdf
+2021/06/09 | 145224 | macros/latex/contrib/siunitx/siunitx.tex
+2021/06/09 | 97866 | macros/latex/contrib/siunitx/siunitx-unit.dtx
+2021/06/09 | 273398 | macros/latex/contrib/siunitx/siunitx-v2.sty
+2021/06/09 | 31738 | macros/latex/contrib/siunitx/siunitx-version-1.cfg
+2021/06/09 | 2676999 | macros/latex/contrib/siunitx.zip
2011/06/03 | 662398 | macros/latex/contrib/skb/doc/skb.pdf
2011/03/15 | 1485 | macros/latex/contrib/skb/doc/user-guide/database/acronyms.tex
2011/03/15 | 722 | macros/latex/contrib/skb/doc/user-guide/database/bibliography.tex
@@ -223265,6 +223271,48 @@
2020/12/20 | 4233 | macros/luatex/generic/luaxml/luaxml-transform.lua
2020/12/20 | 1155 | macros/luatex/generic/luaxml/README
2020/12/20 | 149137 | macros/luatex/generic/luaxml.zip
+2020/03/06 | 13827 | macros/luatex/generic/minim/EUPL-1.2-EN.txt
+2020/03/06 | 13827 | macros/luatex/generic/minim-math/EUPL-1.2-EN.txt
+2021/06/08 | 11663 | macros/luatex/generic/minim-math/minim-math.doc
+2021/06/08 | 14560 | macros/luatex/generic/minim-math/minim-math.lua
+2021/06/09 | 106915 | macros/luatex/generic/minim-math/minim-math.pdf
+2021/06/08 | 339808 | macros/luatex/generic/minim-math/minim-math-table.lua
+2021/06/08 | 15409 | macros/luatex/generic/minim-math/minim-math.tex
+2021/06/08 | 687 | macros/luatex/generic/minim-math/README
+2021/06/09 | 152851 | macros/luatex/generic/minim-math.zip
+2021/06/08 | 9483 | macros/luatex/generic/minim/minim-alloc.doc
+2021/06/08 | 5732 | macros/luatex/generic/minim/minim-alloc.lua
+2021/06/08 | 6488 | macros/luatex/generic/minim/minim-alloc.tex
+2021/06/09 | 6380 | macros/luatex/generic/minim/minim-callbacks.lua
+2021/06/08 | 2571 | macros/luatex/generic/minim/minim.doc
+2021/06/09 | 6312 | macros/luatex/generic/minim/minim-doc.sty
+2021/06/08 | 14765 | macros/luatex/generic/minim/minim-etex.tex
+2021/06/08 | 764 | macros/luatex/generic/minim/minim-hooks.lua
+2021/06/08 | 1818 | macros/luatex/generic/minim/minim-hooks.tex
+2021/06/09 | 379 | macros/luatex/generic/minim/minim.ini
+2021/06/08 | 1196 | macros/luatex/generic/minim/minim-lmodern.tex
+2021/06/09 | 285949 | macros/luatex/generic/minim/minim.pdf
+2021/06/08 | 30295 | macros/luatex/generic/minim/minim-plain.tex
+2021/06/08 | 90 | macros/luatex/generic/minim/minim.tex
+2020/03/06 | 13827 | macros/luatex/generic/minim-mp/EUPL-1.2-EN.txt
+2021/06/08 | 2541 | macros/luatex/generic/minim-mp/minim.mp
+2021/06/08 | 14518 | macros/luatex/generic/minim-mp/minim-mp.doc
+2021/06/09 | 385 | macros/luatex/generic/minim-mp/minim-mp.ini
+2021/06/08 | 42557 | macros/luatex/generic/minim-mp/minim-mp.lua
+2021/06/09 | 82287 | macros/luatex/generic/minim-mp/minim-mp.pdf
+2021/06/08 | 1751 | macros/luatex/generic/minim-mp/minim-mp.tex
+2021/06/08 | 727 | macros/luatex/generic/minim-mp/README
+2021/06/09 | 98075 | macros/luatex/generic/minim-mp.zip
+2020/03/06 | 13827 | macros/luatex/generic/minim-pdf/EUPL-1.2-EN.txt
+2021/06/08 | 4920 | macros/luatex/generic/minim-pdf/minim-languagecodes.lua
+2021/06/08 | 20271 | macros/luatex/generic/minim-pdf/minim-pdf.doc
+2021/06/09 | 39616 | macros/luatex/generic/minim-pdf/minim-pdf.lua
+2021/06/09 | 108362 | macros/luatex/generic/minim-pdf/minim-pdf.pdf
+2021/06/09 | 12818 | macros/luatex/generic/minim-pdf/minim-pdf.tex
+2021/06/08 | 905 | macros/luatex/generic/minim-pdf/README
+2021/06/09 | 125669 | macros/luatex/generic/minim-pdf.zip
+2021/06/08 | 1165 | macros/luatex/generic/minim/README
+2021/06/09 | 297431 | macros/luatex/generic/minim.zip
2020/10/23 | 12610 | macros/luatex/generic/nodetree/nodetree.dtx
2020/10/23 | 2250 | macros/luatex/generic/nodetree/nodetree.ins
2020/10/23 | 43720 | macros/luatex/generic/nodetree/nodetree.lua
@@ -264433,9 +264481,9 @@
1994/02/22 | 94984 | systems/mac/macmakeindex2.12.sea.hqx
1993/07/19 | 61321 | systems/mac/macmakeindex.sit.hqx
2021/04/01 | 47 | systems/mac/mactex/BasicTeX.pkg.md5
-2021/06/01 | 38107 | systems/mac/mactex/ExtrasFolder.pdf
+2021/06/08 | 38111 | systems/mac/mactex/ExtrasFolder.pdf
2021/04/01 | 50 | systems/mac/mactex/Ghostscript.pkg.md5
-2021/06/01 | 1711 | systems/mac/mactex/Licenses.txt
+2021/06/08 | 1711 | systems/mac/mactex/Licenses.txt
2021/03/29 | 4701496188 | systems/mac/mactex/mactex-20210328.pkg
2021/03/29 | 54 | systems/mac/mactex/mactex-20210328.pkg.md5
2021/03/25 | 97330890 | systems/mac/mactex/mactex-basictex-20210325.pkg
@@ -264445,8 +264493,8 @@
2021/04/01 | 45 | systems/mac/mactex/MacTeX.pkg.md5
2021/02/26 | 77461 | systems/mac/mactex/mactex-texdist-20210226.pkg
2021/02/26 | 58 | systems/mac/mactex/mactex-texdist-20210226.pkg.md5
-2021/06/01 | 422433151 | systems/mac/mactex/MacTeXtras-20210601.zip
-2021/06/01 | 58 | systems/mac/mactex/MacTeXtras-20210601.zip.md5
+2021/06/08 | 422433940 | systems/mac/mactex/MacTeXtras-20210608.zip
+2021/06/08 | 58 | systems/mac/mactex/MacTeXtras-20210608.zip.md5
2021/04/01 | 179 | systems/mac/mactex/README
1995/08/15 | 308344 | systems/mac/MakeIndex-Fat-1.0-sit.hqx
1994/04/20 | 2925109 | systems/mac/metafont/bluesky/MAC_MF_0.66.sit.hqx
@@ -268114,8 +268162,8 @@
2019/08/11 | 218408 | systems/texlive/tlnet/archive/csvmerge.doc.r51857.tar.xz
2019/08/11 | 2940 | systems/texlive/tlnet/archive/csvmerge.r51857.tar.xz
2019/08/11 | 13912 | systems/texlive/tlnet/archive/csvmerge.source.r51857.tar.xz
-2019/05/06 | 752344 | systems/texlive/tlnet/archive/csvsimple.doc.r51010.tar.xz
-2019/05/06 | 5568 | systems/texlive/tlnet/archive/csvsimple.r51010.tar.xz
+2021/06/09 | 771076 | systems/texlive/tlnet/archive/csvsimple.doc.r59521.tar.xz
+2021/06/09 | 5576 | systems/texlive/tlnet/archive/csvsimple.r59521.tar.xz
2019/02/28 | 698160 | systems/texlive/tlnet/archive/ctable.doc.r38672.tar.xz
2019/02/28 | 3620 | systems/texlive/tlnet/archive/ctable.r38672.tar.xz
2019/02/28 | 14844 | systems/texlive/tlnet/archive/ctable.source.r38672.tar.xz
@@ -268956,7 +269004,7 @@
2021/03/19 | 413492 | systems/texlive/tlnet/archive/dvipdfmx.i386-solaris.r58500.tar.xz
2021/06/01 | 27128 | systems/texlive/tlnet/archive/dvipdfmx.r59415.tar.xz
2021/03/19 | 791336 | systems/texlive/tlnet/archive/dvipdfmx.universal-darwin.r58528.tar.xz
-2021/06/06 | 332332 | systems/texlive/tlnet/archive/dvipdfmx.win32.r59468.tar.xz
+2021/06/09 | 332308 | systems/texlive/tlnet/archive/dvipdfmx.win32.r59526.tar.xz
2021/03/19 | 403400 | systems/texlive/tlnet/archive/dvipdfmx.x86_64-cygwin.r58498.tar.xz
2021/03/19 | 405060 | systems/texlive/tlnet/archive/dvipdfmx.x86_64-darwinlegacy.r58501.tar.xz
2021/03/20 | 451244 | systems/texlive/tlnet/archive/dvipdfmx.x86_64-linuxmusl.r58535.tar.xz
@@ -269049,9 +269097,9 @@
2021/01/25 | 1828 | systems/texlive/tlnet/archive/ean13isbn.r57514.tar.xz
2019/02/28 | 948 | systems/texlive/tlnet/archive/ean.doc.r20851.tar.xz
2019/02/28 | 3148 | systems/texlive/tlnet/archive/ean.r20851.tar.xz
-2021/06/08 | 313844 | systems/texlive/tlnet/archive/easybook.doc.r59510.tar.xz
-2021/06/08 | 14384 | systems/texlive/tlnet/archive/easybook.r59510.tar.xz
-2021/06/08 | 31104 | systems/texlive/tlnet/archive/easybook.source.r59510.tar.xz
+2021/06/09 | 323036 | systems/texlive/tlnet/archive/easybook.doc.r59522.tar.xz
+2021/06/09 | 14444 | systems/texlive/tlnet/archive/easybook.r59522.tar.xz
+2021/06/09 | 31576 | systems/texlive/tlnet/archive/easybook.source.r59522.tar.xz
2019/02/28 | 4540 | systems/texlive/tlnet/archive/easy.doc.r19440.tar.xz
2020/09/08 | 175976 | systems/texlive/tlnet/archive/easyfig.doc.r56291.tar.xz
2020/09/08 | 1936 | systems/texlive/tlnet/archive/easyfig.r56291.tar.xz
@@ -271306,9 +271354,9 @@
2019/02/28 | 343996 | systems/texlive/tlnet/archive/keycommand.doc.r18042.tar.xz
2019/02/28 | 4904 | systems/texlive/tlnet/archive/keycommand.r18042.tar.xz
2019/02/28 | 15252 | systems/texlive/tlnet/archive/keycommand.source.r18042.tar.xz
-2021/05/30 | 1004380 | systems/texlive/tlnet/archive/keyfloat.doc.r59389.tar.xz
-2021/05/30 | 6716 | systems/texlive/tlnet/archive/keyfloat.r59389.tar.xz
-2021/05/30 | 27852 | systems/texlive/tlnet/archive/keyfloat.source.r59389.tar.xz
+2021/06/09 | 1008152 | systems/texlive/tlnet/archive/keyfloat.doc.r59523.tar.xz
+2021/06/09 | 6820 | systems/texlive/tlnet/archive/keyfloat.r59523.tar.xz
+2021/06/09 | 28188 | systems/texlive/tlnet/archive/keyfloat.source.r59523.tar.xz
2019/04/07 | 146072 | systems/texlive/tlnet/archive/keyindex.doc.r50828.tar.xz
2019/04/07 | 1388 | systems/texlive/tlnet/archive/keyindex.r50828.tar.xz
2019/04/07 | 3464 | systems/texlive/tlnet/archive/keyindex.source.r50828.tar.xz
@@ -276649,7 +276697,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
-2021/06/08 | 397692 | systems/texlive/tlnet/archive/texlive-scripts.doc.r59504.tar.xz
+2021/06/09 | 397504 | systems/texlive/tlnet/archive/texlive-scripts.doc.r59520.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
@@ -276673,7 +276721,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
-2021/06/08 | 107984 | systems/texlive/tlnet/archive/texlive-scripts.r59504.tar.xz
+2021/06/09 | 108008 | systems/texlive/tlnet/archive/texlive-scripts.r59520.tar.xz
2021/02/25 | 572 | systems/texlive/tlnet/archive/texlive-scripts.universal-darwin.r57908.tar.xz
2021/04/12 | 36308 | systems/texlive/tlnet/archive/texlive-scripts.win32.r58829.tar.xz
2020/05/17 | 588 | systems/texlive/tlnet/archive/texlive-scripts.x86_64-cygwin.r55172.tar.xz
@@ -278132,8 +278180,8 @@
2021/03/11 | 2248804 | systems/texlive/tlnet/archive/xindy.x86_64-linux.r58249.tar.xz
2021/05/28 | 2153704 | systems/texlive/tlnet/archive/xint.doc.r59366.tar.xz
2021/05/28 | 79712 | systems/texlive/tlnet/archive/xint.r59366.tar.xz
-2021/06/02 | 2140 | systems/texlive/tlnet/archive/xintsession.doc.r59426.tar.xz
-2021/06/02 | 6016 | systems/texlive/tlnet/archive/xintsession.r59426.tar.xz
+2021/06/09 | 2244 | systems/texlive/tlnet/archive/xintsession.doc.r59524.tar.xz
+2021/06/09 | 6124 | systems/texlive/tlnet/archive/xintsession.r59524.tar.xz
2021/05/28 | 387428 | systems/texlive/tlnet/archive/xint.source.r59366.tar.xz
2020/07/03 | 6060 | systems/texlive/tlnet/archive/xits.doc.r55730.tar.xz
2020/07/03 | 541240 | systems/texlive/tlnet/archive/xits.r55730.tar.xz
@@ -278375,16 +278423,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
2021/05/02 | 105152 | systems/texlive/tlnet/install-tl
-2021/06/08 | 6812820 | systems/texlive/tlnet/install-tl-unx.tar.gz
-2021/06/08 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
-2021/06/08 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
+2021/06/09 | 6812835 | systems/texlive/tlnet/install-tl-unx.tar.gz
+2021/06/09 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
+2021/06/09 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
2021/04/11 | 4945 | systems/texlive/tlnet/install-tl-windows.bat
-2021/06/08 | 20807246 | systems/texlive/tlnet/install-tl-windows.exe
-2021/06/08 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
-2021/06/08 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
-2021/06/08 | 25584659 | systems/texlive/tlnet/install-tl.zip
-2021/06/08 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
-2021/06/08 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc
+2021/06/09 | 20808974 | systems/texlive/tlnet/install-tl-windows.exe
+2021/06/09 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
+2021/06/09 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
+2021/06/09 | 25584682 | systems/texlive/tlnet/install-tl.zip
+2021/06/09 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
+2021/06/09 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc
2021/04/01 | 1229 | systems/texlive/tlnet/README.md
2021/04/01 | 0 | systems/texlive/tlnet/TEXLIVE_2021
2021/03/15 | 6571 | systems/texlive/tlnet/tlpkg/gpg/pubring.gpg
@@ -278394,7 +278442,7 @@
2021/03/15 | 1280 | systems/texlive/tlnet/tlpkg/gpg/trustdb.gpg
2021/05/26 | 49548 | systems/texlive/tlnet/tlpkg/installer/config.guess
2010/11/11 | 11651 | systems/texlive/tlnet/tlpkg/installer/COPYING.MinGW-runtime.txt
-2021/06/07 | 6816 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
+2021/06/08 | 6929 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
2020/04/15 | 223687 | 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
@@ -278436,12 +278484,12 @@
2021/05/16 | 20371 | systems/texlive/tlnet/tlpkg/TeXLive/TLCrypto.pm
2021/05/16 | 5402 | systems/texlive/tlnet/tlpkg/TeXLive/TLDownload.pm
2021/05/16 | 27555 | systems/texlive/tlnet/tlpkg/TeXLive/TLPaper.pm
-2021/06/08 | 17271526 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
-2021/06/08 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
+2021/06/09 | 17271576 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
+2021/06/09 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
2021/05/16 | 86511 | systems/texlive/tlnet/tlpkg/TeXLive/TLPDB.pm
-2021/06/08 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
-2021/06/08 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
-2021/06/08 | 2311324 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
+2021/06/09 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
+2021/06/09 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
+2021/06/09 | 2310696 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
2021/05/16 | 58801 | systems/texlive/tlnet/tlpkg/TeXLive/TLPOBJ.pm
2021/05/16 | 42084 | systems/texlive/tlnet/tlpkg/TeXLive/TLPSRC.pm
2021/05/16 | 16103 | systems/texlive/tlnet/tlpkg/TeXLive/TLTREE.pm
@@ -282236,7 +282284,9 @@
2021/06/06 | 6977268 | systems/win32/miktex/tm/packages/biblatex__doc.tar.lzma
2016/12/09 | 1140816 | systems/win32/miktex/tm/packages/biblatex-dw.tar.lzma
2017/06/18 | 10024 | systems/win32/miktex/tm/packages/biblatex-enc.tar.lzma
-2021/04/23 | 895400 | systems/win32/miktex/tm/packages/biblatex-ext.tar.lzma
+2021/06/09 | 833160 | systems/win32/miktex/tm/packages/biblatex-ext__doc.tar.lzma
+2021/06/09 | 38711 | systems/win32/miktex/tm/packages/biblatex-ext__source.tar.lzma
+2021/06/09 | 27133 | systems/win32/miktex/tm/packages/biblatex-ext.tar.lzma
2017/11/22 | 616165 | systems/win32/miktex/tm/packages/biblatex-fiwi.tar.lzma
2021/05/08 | 1661290 | systems/win32/miktex/tm/packages/biblatex-gb7714-2015.tar.lzma
2020/11/24 | 173898 | systems/win32/miktex/tm/packages/biblatex-german-legal.tar.lzma
@@ -282703,7 +282753,8 @@
2017/04/23 | 2092323 | systems/win32/miktex/tm/packages/css-colors.tar.lzma
2016/09/06 | 106657 | systems/win32/miktex/tm/packages/cstypo.tar.lzma
2019/08/13 | 235822 | systems/win32/miktex/tm/packages/csvmerge.tar.lzma
-2019/04/10 | 756284 | systems/win32/miktex/tm/packages/csvsimple.tar.lzma
+2021/06/09 | 770846 | systems/win32/miktex/tm/packages/csvsimple__doc.tar.lzma
+2021/06/09 | 5828 | systems/win32/miktex/tm/packages/csvsimple.tar.lzma
2007/07/04 | 215599 | systems/win32/miktex/tm/packages/csvtools.tar.lzma
2015/10/06 | 155555 | systems/win32/miktex/tm/packages/ctablestack.tar.lzma
2015/10/20 | 716564 | systems/win32/miktex/tm/packages/ctable.tar.lzma
@@ -282907,9 +282958,9 @@
2006/08/26 | 141965 | systems/win32/miktex/tm/packages/dyntree.tar.bz2
2021/01/28 | 325253 | systems/win32/miktex/tm/packages/ean13isbn.tar.lzma
2016/07/15 | 3965 | systems/win32/miktex/tm/packages/ean.tar.lzma
-2021/06/08 | 314913 | systems/win32/miktex/tm/packages/easybook__doc.tar.lzma
-2021/06/08 | 31478 | systems/win32/miktex/tm/packages/easybook__source.tar.lzma
-2021/06/08 | 14659 | systems/win32/miktex/tm/packages/easybook.tar.lzma
+2021/06/09 | 324143 | systems/win32/miktex/tm/packages/easybook__doc.tar.lzma
+2021/06/09 | 31964 | systems/win32/miktex/tm/packages/easybook__source.tar.lzma
+2021/06/09 | 14705 | systems/win32/miktex/tm/packages/easybook.tar.lzma
2018/03/31 | 183421 | systems/win32/miktex/tm/packages/easyfig.tar.lzma
2020/12/21 | 609763 | systems/win32/miktex/tm/packages/easyfloats.tar.lzma
2017/06/12 | 52618 | systems/win32/miktex/tm/packages/easyformat.tar.lzma
@@ -283193,7 +283244,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
-2021/06/08 | 582460 | systems/win32/miktex/tm/packages/files.csv.lzma
+2021/06/09 | 582716 | 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
@@ -283734,7 +283785,9 @@
2004/04/22 | 672120 | systems/win32/miktex/tm/packages/kerntest.cab
2019/12/31 | 14443571 | systems/win32/miktex/tm/packages/ketcindy.tar.lzma
2010/05/10 | 363388 | systems/win32/miktex/tm/packages/keycommand.tar.lzma
-2021/06/03 | 1049268 | systems/win32/miktex/tm/packages/keyfloat.tar.lzma
+2021/06/09 | 1011581 | systems/win32/miktex/tm/packages/keyfloat__doc.tar.lzma
+2021/06/09 | 35840 | systems/win32/miktex/tm/packages/keyfloat__source.tar.lzma
+2021/06/09 | 7075 | systems/win32/miktex/tm/packages/keyfloat.tar.lzma
2019/04/07 | 150914 | systems/win32/miktex/tm/packages/keyindex.tar.lzma
2012/11/08 | 249186 | systems/win32/miktex/tm/packages/keyreader.tar.lzma
2010/05/10 | 38167 | systems/win32/miktex/tm/packages/keystroke.tar.lzma
@@ -283840,7 +283893,9 @@
2021/06/06 | 15361 | systems/win32/miktex/tm/packages/latex-graphics-dev.tar.lzma
2021/05/08 | 1045028 | systems/win32/miktex/tm/packages/latexindent.tar.lzma
2021/01/07 | 716957 | systems/win32/miktex/tm/packages/latex-make.tar.lzma
-2021/05/18 | 375353 | systems/win32/miktex/tm/packages/latexmk.tar.lzma
+2021/06/09 | 279382 | systems/win32/miktex/tm/packages/latexmk__doc.tar.lzma
+2021/06/09 | 14661 | systems/win32/miktex/tm/packages/latexmk__source.tar.lzma
+2021/06/09 | 94160 | systems/win32/miktex/tm/packages/latexmk.tar.lzma
2019/09/01 | 152454 | systems/win32/miktex/tm/packages/latexmp.tar.lzma
2017/06/15 | 358573 | systems/win32/miktex/tm/packages/latex-mr.tar.lzma
2019/12/13 | 8214 | systems/win32/miktex/tm/packages/latexpand.tar.lzma
@@ -284446,9 +284501,9 @@
2018/01/12 | 157226 | systems/win32/miktex/tm/packages/miktex-zip-bin-x64.tar.lzma
2021/06/06 | 38984 | systems/win32/miktex/tm/packages/miktex-zlib-bin-2.9.tar.lzma
2021/06/06 | 43369 | systems/win32/miktex/tm/packages/miktex-zlib-bin-x64-2.9.tar.lzma
-2021/06/08 | 216819 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma
-2021/06/08 | 1288428 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma
-2021/06/08 | 1201291 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma
+2021/06/09 | 217209 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma
+2021/06/09 | 1288520 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma
+2021/06/09 | 1201645 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma
2021/06/06 | 13457 | systems/win32/miktex/tm/packages/miktex-zzip-bin-2.9.tar.lzma
2021/06/06 | 14323 | 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
@@ -284616,189 +284671,189 @@
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
-2021/06/08 | 582557 | systems/win32/miktex/tm/packages/next/files.csv.lzma
-2021/06/08 | 51088 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-2.9.tar.lzma
-2021/06/08 | 56473 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma
-2021/06/08 | 971290 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-2.9.tar.lzma
-2021/06/08 | 1076119 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma
-2021/06/08 | 29046 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-2.9.tar.lzma
-2021/06/08 | 31328 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma
-2021/06/08 | 29835 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-2.9.tar.lzma
-2021/06/08 | 34651 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma
-2021/06/08 | 50032 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-2.9.tar.lzma
-2021/06/08 | 57635 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma
-2021/06/08 | 83761 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-2.9.tar.lzma
-2021/06/08 | 95453 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma
-2021/06/08 | 67886 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-2.9.tar.lzma
-2021/06/08 | 75964 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma
-2021/06/08 | 27185 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-2.9.tar.lzma
-2021/06/08 | 30808 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma
-2021/06/08 | 330437 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-2.9.tar.lzma
-2021/06/08 | 392697 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma
-2021/06/08 | 32597 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-2.9.tar.lzma
-2021/06/08 | 36605 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma
-2021/06/08 | 51290 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-2.9.tar.lzma
-2021/06/08 | 56811 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma
-2021/06/08 | 239580 | systems/win32/miktex/tm/packages/next/miktex-console-bin-2.9.tar.lzma
-2021/06/08 | 261911 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma
-2021/06/08 | 180187 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-2.9.tar.lzma
-2021/06/08 | 195754 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma
-2021/06/08 | 52543 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-2.9.tar.lzma
-2021/06/08 | 59144 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma
-2021/06/08 | 21177 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-2.9.tar.lzma
-2021/06/08 | 23369 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma
-2021/06/08 | 461826 | systems/win32/miktex/tm/packages/next/miktex-doc.tar.lzma
-2021/06/08 | 46494 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-2.9.tar.lzma
-2021/06/08 | 51118 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma
-2021/06/08 | 281964 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-2.9.tar.lzma
-2021/06/08 | 321643 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma
-2021/06/08 | 41187 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-2.9.tar.lzma
-2021/06/08 | 45318 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma
-2021/06/08 | 117477 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-2.9.tar.lzma
-2021/06/08 | 131580 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma
-2021/06/08 | 1294235 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-2.9.tar.lzma
-2021/06/08 | 1423058 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma
-2021/06/08 | 100459 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-2.9.tar.lzma
-2021/06/08 | 112814 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma
-2021/06/08 | 43059 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-2.9.tar.lzma
-2021/06/08 | 48237 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma
-2021/06/08 | 25004 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-2.9.tar.lzma
-2021/06/08 | 28162 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma
-2021/06/08 | 56338 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-2.9.tar.lzma
-2021/06/08 | 62714 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma
-2021/06/08 | 134793 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-2.9.tar.lzma
-2021/06/08 | 152163 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma
-2021/06/08 | 72924 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-2.9.tar.lzma
-2021/06/08 | 77939 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma
-2021/06/08 | 71707 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-2.9.tar.lzma
-2021/06/08 | 80965 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma
-2021/06/08 | 258838 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-2.9.tar.lzma
-2021/06/08 | 295145 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma
-2021/06/08 | 22023 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-2.9.tar.lzma
-2021/06/08 | 24987 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma
-2021/06/08 | 97491 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-2.9.tar.lzma
-2021/06/08 | 112166 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma
-2021/06/08 | 64402 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-2.9.tar.lzma
-2021/06/08 | 73143 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma
-2021/06/08 | 96475 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-2.9.tar.lzma
-2021/06/08 | 115120 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma
-2021/06/08 | 38169 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-2.9.tar.lzma
-2021/06/08 | 42981 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma
-2021/06/08 | 482837 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-2.9.tar.lzma
-2021/06/08 | 565936 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma
-2021/06/08 | 147408 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-2.9.tar.lzma
-2021/06/08 | 159548 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma
-2021/06/08 | 94773 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-2.9.tar.lzma
-2021/06/08 | 108936 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma
-2021/06/08 | 16342 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-2.9.tar.lzma
-2021/06/08 | 17983 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma
-2021/06/08 | 28285 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-2.9.tar.lzma
-2021/06/08 | 30037 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma
-2021/06/08 | 629825 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-2.9.tar.lzma
-2021/06/08 | 680954 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma
-2021/06/08 | 532270 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-2.9.tar.lzma
-2021/06/08 | 596060 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma
-2021/06/08 | 476901 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-2.9.tar.lzma
-2021/06/08 | 512667 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma
-2021/06/08 | 94383 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-2.9.tar.lzma
-2021/06/08 | 103437 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma
-2021/06/08 | 1708076 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-2.9.tar.lzma
-2021/06/08 | 2005873 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma
-2021/06/08 | 67610 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-2.9.tar.lzma
-2021/06/08 | 74206 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma
-2021/06/08 | 27265 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-2.9.tar.lzma
-2021/06/08 | 31570 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma
-2021/06/08 | 7717 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-2.9.tar.lzma
-2021/06/08 | 8771 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma
-2021/06/08 | 197089 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-2.9.tar.lzma
-2021/06/08 | 215197 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma
-2021/06/08 | 250395 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-2.9.tar.lzma
-2021/06/08 | 284040 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma
-2021/06/08 | 98266 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-2.9.tar.lzma
-2021/06/08 | 103517 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma
-2021/06/08 | 60619 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-2.9.tar.lzma
-2021/06/08 | 67973 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-x64-2.9.tar.lzma
-2021/06/08 | 124615 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-2.9.tar.lzma
-2021/06/08 | 136506 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma
-2021/06/08 | 147712 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-2.9.tar.lzma
-2021/06/08 | 163765 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma
-2021/06/08 | 199636 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-2.9.tar.lzma
-2021/06/08 | 180081 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma
-2021/06/08 | 67371 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-2.9.tar.lzma
-2021/06/08 | 76879 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma
-2021/06/08 | 31207 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-2.9.tar.lzma
-2021/06/08 | 35071 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma
-2021/06/08 | 37865 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-2.9.tar.lzma
-2021/06/08 | 42729 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma
-2021/06/08 | 42886 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-2.9.tar.lzma
-2021/06/08 | 46723 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma
-2021/06/08 | 45939 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-2.9.tar.lzma
-2021/06/08 | 52440 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma
-2021/06/08 | 194076 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-2.9.tar.lzma
-2021/06/08 | 206345 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-x64-2.9.tar.lzma
-2021/06/08 | 35699 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin.tar.lzma
-2021/06/08 | 40342 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin-x64.tar.lzma
-2021/06/08 | 748785 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-2.9.tar.lzma
-2021/06/08 | 816251 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma
-2021/06/08 | 198227 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-2.9.tar.lzma
-2021/06/08 | 202702 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma
-2021/06/08 | 207851 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-2.9.tar.lzma
-2021/06/08 | 243392 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma
-2021/06/08 | 78749 | systems/win32/miktex/tm/packages/next/miktex-png-bin-2.9.tar.lzma
-2021/06/08 | 87679 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma
-2021/06/08 | 1170758 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-2.9.tar.lzma
-2021/06/08 | 1300399 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma
-2021/06/08 | 20124 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-2.9.tar.lzma
-2021/06/08 | 23883 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma
-2021/06/08 | 31547 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-2.9.tar.lzma
-2021/06/08 | 37229 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma
-2021/06/08 | 64033 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-2.9.tar.lzma
-2021/06/08 | 72178 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma
-2021/06/08 | 44611 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-2.9.tar.lzma
-2021/06/08 | 51457 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma
-2021/06/08 | 1308115 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-2.9.tar.lzma
-2021/06/08 | 1429094 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma
-2021/06/08 | 42375 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-2.9.tar.lzma
-2021/06/08 | 51742 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma
-2021/06/08 | 56289 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin.tar.lzma
-2021/06/08 | 59699 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64.tar.lzma
-2021/06/08 | 25265 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-2.9.tar.lzma
-2021/06/08 | 27260 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma
-2021/06/08 | 16446 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-2.9.tar.lzma
-2021/06/08 | 18168 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma
-2021/06/08 | 63751 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-2.9.tar.lzma
-2021/06/08 | 69898 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma
-2021/06/08 | 154623 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-2.9.tar.lzma
-2021/06/08 | 169103 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma
-2021/06/08 | 56752 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-2.9.tar.lzma
-2021/06/08 | 65468 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma
-2021/06/08 | 97981 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-2.9.tar.lzma
-2021/06/08 | 106861 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma
-2021/06/08 | 2670400 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-2.9.tar.lzma
-2021/06/08 | 2793679 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma
-2021/06/08 | 56311 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-2.9.tar.lzma
-2021/06/08 | 62228 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma
-2021/06/08 | 33601 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin.tar.lzma
-2021/06/08 | 37363 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin-x64.tar.lzma
-2021/06/08 | 27710 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-2.9.tar.lzma
-2021/06/08 | 33623 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma
-2021/06/08 | 67262 | systems/win32/miktex/tm/packages/next/miktex-web-bin-2.9.tar.lzma
-2021/06/08 | 70487 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma
-2021/06/08 | 311355 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-2.9.tar.lzma
-2021/06/08 | 345325 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma
-2021/06/08 | 55524 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin.tar.lzma
-2021/06/08 | 57112 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin-x64.tar.lzma
-2021/06/08 | 586329 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-2.9.tar.lzma
-2021/06/08 | 621333 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma
-2021/06/08 | 39019 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-2.9.tar.lzma
-2021/06/08 | 43358 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma
-2021/06/08 | 216900 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma
-2021/06/08 | 1289154 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma
-2021/06/08 | 1202422 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma
-2021/06/08 | 13448 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-2.9.tar.lzma
-2021/06/08 | 14347 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma
+2021/06/09 | 583051 | systems/win32/miktex/tm/packages/next/files.csv.lzma
+2021/06/09 | 51089 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-2.9.tar.lzma
+2021/06/09 | 56471 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma
+2021/06/09 | 971288 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-2.9.tar.lzma
+2021/06/09 | 1076119 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma
+2021/06/09 | 29045 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-2.9.tar.lzma
+2021/06/09 | 31328 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma
+2021/06/09 | 29835 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-2.9.tar.lzma
+2021/06/09 | 34652 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma
+2021/06/09 | 50032 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-2.9.tar.lzma
+2021/06/09 | 57634 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma
+2021/06/09 | 83761 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-2.9.tar.lzma
+2021/06/09 | 95453 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma
+2021/06/09 | 67889 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-2.9.tar.lzma
+2021/06/09 | 75965 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma
+2021/06/09 | 27186 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-2.9.tar.lzma
+2021/06/09 | 30808 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma
+2021/06/09 | 330439 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-2.9.tar.lzma
+2021/06/09 | 392699 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma
+2021/06/09 | 32600 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-2.9.tar.lzma
+2021/06/09 | 36606 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma
+2021/06/09 | 51290 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-2.9.tar.lzma
+2021/06/09 | 56814 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma
+2021/06/09 | 239583 | systems/win32/miktex/tm/packages/next/miktex-console-bin-2.9.tar.lzma
+2021/06/09 | 261912 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma
+2021/06/09 | 180188 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-2.9.tar.lzma
+2021/06/09 | 195754 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma
+2021/06/09 | 52544 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-2.9.tar.lzma
+2021/06/09 | 59144 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma
+2021/06/09 | 21178 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-2.9.tar.lzma
+2021/06/09 | 23369 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma
+2021/06/09 | 461825 | systems/win32/miktex/tm/packages/next/miktex-doc.tar.lzma
+2021/06/09 | 46495 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-2.9.tar.lzma
+2021/06/09 | 51118 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma
+2021/06/09 | 281967 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-2.9.tar.lzma
+2021/06/09 | 321646 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma
+2021/06/09 | 41190 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-2.9.tar.lzma
+2021/06/09 | 45318 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma
+2021/06/09 | 117479 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-2.9.tar.lzma
+2021/06/09 | 131582 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma
+2021/06/09 | 1294238 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-2.9.tar.lzma
+2021/06/09 | 1423059 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma
+2021/06/09 | 100463 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-2.9.tar.lzma
+2021/06/09 | 112816 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma
+2021/06/09 | 43061 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-2.9.tar.lzma
+2021/06/09 | 48239 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma
+2021/06/09 | 25009 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-2.9.tar.lzma
+2021/06/09 | 28164 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma
+2021/06/09 | 56341 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-2.9.tar.lzma
+2021/06/09 | 62716 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma
+2021/06/09 | 134798 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-2.9.tar.lzma
+2021/06/09 | 152162 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma
+2021/06/09 | 72927 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-2.9.tar.lzma
+2021/06/09 | 77942 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma
+2021/06/09 | 71710 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-2.9.tar.lzma
+2021/06/09 | 80965 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma
+2021/06/09 | 258840 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-2.9.tar.lzma
+2021/06/09 | 295147 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma
+2021/06/09 | 22025 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-2.9.tar.lzma
+2021/06/09 | 24989 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma
+2021/06/09 | 97491 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-2.9.tar.lzma
+2021/06/09 | 112167 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma
+2021/06/09 | 64404 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-2.9.tar.lzma
+2021/06/09 | 73143 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma
+2021/06/09 | 96475 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-2.9.tar.lzma
+2021/06/09 | 115121 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma
+2021/06/09 | 38172 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-2.9.tar.lzma
+2021/06/09 | 42982 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma
+2021/06/09 | 482839 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-2.9.tar.lzma
+2021/06/09 | 565937 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma
+2021/06/09 | 147408 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-2.9.tar.lzma
+2021/06/09 | 159548 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma
+2021/06/09 | 94773 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-2.9.tar.lzma
+2021/06/09 | 108936 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma
+2021/06/09 | 16342 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-2.9.tar.lzma
+2021/06/09 | 17982 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma
+2021/06/09 | 28288 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-2.9.tar.lzma
+2021/06/09 | 30038 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma
+2021/06/09 | 629826 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-2.9.tar.lzma
+2021/06/09 | 680953 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma
+2021/06/09 | 532268 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-2.9.tar.lzma
+2021/06/09 | 596063 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma
+2021/06/09 | 476903 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-2.9.tar.lzma
+2021/06/09 | 512668 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma
+2021/06/09 | 94384 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-2.9.tar.lzma
+2021/06/09 | 103439 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma
+2021/06/09 | 1708079 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-2.9.tar.lzma
+2021/06/09 | 2005872 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma
+2021/06/09 | 67611 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-2.9.tar.lzma
+2021/06/09 | 74208 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma
+2021/06/09 | 27267 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-2.9.tar.lzma
+2021/06/09 | 31569 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma
+2021/06/09 | 7716 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-2.9.tar.lzma
+2021/06/09 | 8771 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma
+2021/06/09 | 197090 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-2.9.tar.lzma
+2021/06/09 | 215198 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma
+2021/06/09 | 250394 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-2.9.tar.lzma
+2021/06/09 | 284041 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma
+2021/06/09 | 98268 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-2.9.tar.lzma
+2021/06/09 | 103520 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma
+2021/06/09 | 60618 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-2.9.tar.lzma
+2021/06/09 | 67973 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-x64-2.9.tar.lzma
+2021/06/09 | 124616 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-2.9.tar.lzma
+2021/06/09 | 136506 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma
+2021/06/09 | 147714 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-2.9.tar.lzma
+2021/06/09 | 163765 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma
+2021/06/09 | 199641 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-2.9.tar.lzma
+2021/06/09 | 180081 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma
+2021/06/09 | 67374 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-2.9.tar.lzma
+2021/06/09 | 76879 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma
+2021/06/09 | 31208 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-2.9.tar.lzma
+2021/06/09 | 35071 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma
+2021/06/09 | 37867 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-2.9.tar.lzma
+2021/06/09 | 42729 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma
+2021/06/09 | 42889 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-2.9.tar.lzma
+2021/06/09 | 46724 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma
+2021/06/09 | 45941 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-2.9.tar.lzma
+2021/06/09 | 52440 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma
+2021/06/09 | 194079 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-2.9.tar.lzma
+2021/06/09 | 206344 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-x64-2.9.tar.lzma
+2021/06/09 | 35700 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin.tar.lzma
+2021/06/09 | 40344 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin-x64.tar.lzma
+2021/06/09 | 748788 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-2.9.tar.lzma
+2021/06/09 | 816252 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma
+2021/06/09 | 198226 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-2.9.tar.lzma
+2021/06/09 | 202703 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma
+2021/06/09 | 207853 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-2.9.tar.lzma
+2021/06/09 | 243393 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma
+2021/06/09 | 78752 | systems/win32/miktex/tm/packages/next/miktex-png-bin-2.9.tar.lzma
+2021/06/09 | 87679 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma
+2021/06/09 | 1170762 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-2.9.tar.lzma
+2021/06/09 | 1300401 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma
+2021/06/09 | 20125 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-2.9.tar.lzma
+2021/06/09 | 23882 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma
+2021/06/09 | 31548 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-2.9.tar.lzma
+2021/06/09 | 37231 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma
+2021/06/09 | 64034 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-2.9.tar.lzma
+2021/06/09 | 72178 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma
+2021/06/09 | 44613 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-2.9.tar.lzma
+2021/06/09 | 51457 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma
+2021/06/09 | 1308119 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-2.9.tar.lzma
+2021/06/09 | 1429090 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma
+2021/06/09 | 42375 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-2.9.tar.lzma
+2021/06/09 | 51742 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma
+2021/06/09 | 56291 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin.tar.lzma
+2021/06/09 | 59700 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64.tar.lzma
+2021/06/09 | 25268 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-2.9.tar.lzma
+2021/06/09 | 27260 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma
+2021/06/09 | 16448 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-2.9.tar.lzma
+2021/06/09 | 18168 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma
+2021/06/09 | 63751 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-2.9.tar.lzma
+2021/06/09 | 69899 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma
+2021/06/09 | 154626 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-2.9.tar.lzma
+2021/06/09 | 169104 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma
+2021/06/09 | 56755 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-2.9.tar.lzma
+2021/06/09 | 65468 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma
+2021/06/09 | 97981 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-2.9.tar.lzma
+2021/06/09 | 106861 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma
+2021/06/09 | 2670404 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-2.9.tar.lzma
+2021/06/09 | 2793681 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma
+2021/06/09 | 56314 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-2.9.tar.lzma
+2021/06/09 | 62229 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma
+2021/06/09 | 33602 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin.tar.lzma
+2021/06/09 | 37365 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin-x64.tar.lzma
+2021/06/09 | 27711 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-2.9.tar.lzma
+2021/06/09 | 33621 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma
+2021/06/09 | 67263 | systems/win32/miktex/tm/packages/next/miktex-web-bin-2.9.tar.lzma
+2021/06/09 | 70489 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma
+2021/06/09 | 311357 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-2.9.tar.lzma
+2021/06/09 | 345326 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma
+2021/06/09 | 55525 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin.tar.lzma
+2021/06/09 | 57112 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin-x64.tar.lzma
+2021/06/09 | 586329 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-2.9.tar.lzma
+2021/06/09 | 621335 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma
+2021/06/09 | 39020 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-2.9.tar.lzma
+2021/06/09 | 43358 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma
+2021/06/09 | 217236 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma
+2021/06/09 | 1290005 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma
+2021/06/09 | 1201015 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma
+2021/06/09 | 13448 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-2.9.tar.lzma
+2021/06/09 | 14347 | 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
-2021/06/08 | 1153 | systems/win32/miktex/tm/packages/next/pr.ini
+2021/06/09 | 1153 | 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
@@ -285146,7 +285201,7 @@
2020/10/20 | 342254 | 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
-2021/06/08 | 921 | systems/win32/miktex/tm/packages/pr.ini
+2021/06/09 | 929 | 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
@@ -286249,7 +286304,8 @@
2017/11/18 | 1593 | systems/win32/miktex/tm/packages/xii.tar.lzma
2020/10/03 | 507830 | systems/win32/miktex/tm/packages/xindex.tar.lzma
2016/11/05 | 133165 | systems/win32/miktex/tm/packages/xindy.tar.lzma
-2021/06/03 | 7800 | systems/win32/miktex/tm/packages/xintsession.tar.lzma
+2021/06/09 | 2853 | systems/win32/miktex/tm/packages/xintsession__doc.tar.lzma
+2021/06/09 | 6370 | systems/win32/miktex/tm/packages/xintsession.tar.lzma
2021/05/29 | 2624826 | systems/win32/miktex/tm/packages/xint.tar.lzma
2020/07/03 | 547474 | systems/win32/miktex/tm/packages/xits.tar.lzma
2019/10/22 | 228077 | systems/win32/miktex/tm/packages/xkcdcolors.tar.lzma
@@ -286374,21 +286430,21 @@
2021/06/03 | 5529800 | systems/win32/w32tex/aleph-w32.tar.xz
2021/06/03 | 63889744 | systems/win32/w32tex/biblatex-biber.tar.xz
2016/12/13 | 65971452 | systems/win32/w32tex/cbfonts.tar.xz
-2021/06/07 | 842205 | systems/win32/w32tex/ChangeLog
+2021/06/08 | 842625 | systems/win32/w32tex/ChangeLog
2009/08/03 | 141221 | systems/win32/w32tex/ChangeLog.0
2009/08/03 | 221890 | systems/win32/w32tex/ChangeLog.1
2009/08/03 | 116462 | systems/win32/w32tex/ChangeLog.2
2013/09/03 | 352299 | systems/win32/w32tex/ChangeLog.3
2017/06/24 | 644754 | systems/win32/w32tex/ChangeLog.4
-2021/06/06 | 23539312 | systems/win32/w32tex/cjkzr.tar.xz
+2021/06/08 | 23556216 | systems/win32/w32tex/cjkzr.tar.xz
2013/04/27 | 15858676 | systems/win32/w32tex/context-doc.tar.xz
2021/06/07 | 144872836 | systems/win32/w32tex/context.tar.xz
2021/06/07 | 914292 | systems/win32/w32tex/cweb-w32.tar.xz
2021/03/22 | 6433932 | systems/win32/w32tex/datetime2.tar.xz
2021/04/07 | 846020 | systems/win32/w32tex/dvi2ps-w32.tar.xz
2021/04/07 | 484144 | systems/win32/w32tex/dvi2tty-w32.tar.xz
-2021/06/05 | 4667000 | systems/win32/w32tex/dvipdfm-w32.tar.xz
-2021/06/05 | 4552032 | systems/win32/w32tex/dvipsk-w32.tar.xz
+2021/06/08 | 4667076 | systems/win32/w32tex/dvipdfm-w32.tar.xz
+2021/06/08 | 4551656 | systems/win32/w32tex/dvipsk-w32.tar.xz
2021/04/07 | 2652392 | systems/win32/w32tex/dvitools-w32.tar.xz
2021/06/02 | 1181300 | systems/win32/w32tex/extractpdfmark-w32.tar.xz
2021/04/07 | 17377260 | systems/win32/w32tex/gregorio-w32.tar.xz
@@ -286398,25 +286454,25 @@
2021/06/06 | 39449224 | systems/win32/w32tex/latex.tar.xz
2021/04/07 | 1007424 | systems/win32/w32tex/lcdf-typetools-w32.tar.xz
2021/05/25 | 413638248 | systems/win32/w32tex/ltxpkgdocs.tar.xz
-2021/06/06 | 50084804 | systems/win32/w32tex/ltxpkgs.tar.xz
+2021/06/08 | 50080024 | systems/win32/w32tex/ltxpkgs.tar.xz
2021/05/12 | 3891892 | systems/win32/w32tex/luajittex-dev-w32.tar.xz
2021/05/12 | 3899756 | systems/win32/w32tex/luajittex-exp-w32.tar.xz
2021/05/12 | 3907764 | systems/win32/w32tex/luajittex-w32.tar.xz
2021/03/26 | 838276 | systems/win32/w32tex/luasec-w32.tar.xz
2021/06/06 | 18970864 | systems/win32/w32tex/luatex-dev-w32.tar.xz
2021/06/06 | 18978924 | systems/win32/w32tex/luatex-exp-w32.tar.xz
-2021/05/22 | 68826360 | systems/win32/w32tex/luatexja.tar.xz
+2021/06/08 | 68832972 | systems/win32/w32tex/luatexja.tar.xz
2021/06/06 | 18971000 | systems/win32/w32tex/luatex-w32.tar.xz
2021/06/07 | 1613420 | systems/win32/w32tex/makeindex-w32.tar.xz
2021/03/28 | 5371984 | systems/win32/w32tex/manual.tar.xz
-2021/06/05 | 439816 | systems/win32/w32tex/mftools.tar.xz
+2021/06/08 | 439780 | systems/win32/w32tex/mftools.tar.xz
2021/04/07 | 525008 | systems/win32/w32tex/mftrace-w32.tar.xz
2018/07/14 | 6364952 | systems/win32/w32tex/minitoc.tar.xz
2020/01/19 | 882832 | systems/win32/w32tex/m-tx.tar.xz
2021/06/04 | 10369920 | systems/win32/w32tex/newtxpx-boondoxfonts.tar.xz
2021/04/07 | 1246480 | systems/win32/w32tex/omegaj-w32.tar.xz
2020/11/16 | 324540 | systems/win32/w32tex/otfbeta.tar.xz
-2021/06/06 | 22326492 | systems/win32/w32tex/pdftex-w32.tar.xz
+2021/06/08 | 22327960 | systems/win32/w32tex/pdftex-w32.tar.xz
2021/06/02 | 98502796 | systems/win32/w32tex/pgfcontrib.tar.xz
2015/01/26 | 189072 | systems/win32/w32tex/plain2-2.54-w32.tar.xz
2021/06/05 | 2849152 | systems/win32/w32tex/platex.tar.xz
@@ -286453,7 +286509,7 @@
2013/04/08 | 722652 | systems/win32/w32tex/utf.tar.xz
2013/04/08 | 13748 | systems/win32/w32tex/vf-n2bk.tar.xz
2021/03/24 | 53260516 | systems/win32/w32tex/w32tex-src.tar.xz
-2021/06/03 | 130738976 | systems/win32/w32tex/web2c-lib.tar.xz
+2021/06/08 | 131174548 | systems/win32/w32tex/web2c-lib.tar.xz
2021/05/21 | 45553952 | systems/win32/w32tex/web2c-w32.tar.xz
2021/05/08 | 811412 | systems/win32/w32tex/win64/aleph-w64.tar.xz
2020/08/20 | 22351540 | systems/win32/w32tex/win64/biblatex-biber-w64.tar.xz
@@ -286595,7 +286651,7 @@
2004/06/04 | 404 | tds/tds.sed
2004/06/23 | 65418 | tds/tds.tex
2019/05/29 | 304264 | tds.zip
-2021/06/09 | 186 | timestamp
+2021/06/10 | 186 | timestamp
2002/08/26 | 61898 | usergrps/dante/antrag.pdf
2002/08/26 | 118217 | usergrps/dante/antrag.ps
2017/06/30 | 917 | usergrps/dante/dtk/doc/beispiel.bib
diff --git a/FILES.byname.gz b/FILES.byname.gz
index 3f8e6edf0d..a8f4763bf8 100644
--- a/FILES.byname.gz
+++ b/FILES.byname.gz
Binary files differ
diff --git a/FILES.last07days b/FILES.last07days
index d6b484eb73..5f4e654379 100644
--- a/FILES.last07days
+++ b/FILES.last07days
@@ -1,69 +1,346 @@
+2021/06/09 | 98268 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-2.9.tar.lzma
+2021/06/09 | 98075 | macros/luatex/generic/minim-mp.zip
+2021/06/09 | 97981 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-2.9.tar.lzma
+2021/06/09 | 97866 | macros/latex/contrib/siunitx/siunitx-unit.dtx
+2021/06/09 | 97491 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-2.9.tar.lzma
+2021/06/09 | 971288 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-2.9.tar.lzma
+2021/06/09 | 964 | macros/latex/contrib/siunitx/README.md
+2021/06/09 | 96475 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-2.9.tar.lzma
+2021/06/09 | 95453 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma
+2021/06/09 | 94773 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-2.9.tar.lzma
+2021/06/09 | 94384 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-2.9.tar.lzma
+2021/06/09 | 94160 | systems/win32/miktex/tm/packages/latexmk.tar.lzma
+2021/06/09 | 929 | systems/win32/miktex/tm/packages/pr.ini
+2021/06/09 | 8771 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma
+2021/06/09 | 87679 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma
+2021/06/09 | 8762 | macros/latex/contrib/siunitx/siunitx-command.dtx
+2021/06/09 | 8726 | macros/latex/contrib/siunitx/siunitx-symbol.dtx
+2021/06/09 | 83761 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-2.9.tar.lzma
+2021/06/09 | 833160 | systems/win32/miktex/tm/packages/biblatex-ext__doc.tar.lzma
+2021/06/09 | 82287 | macros/luatex/generic/minim-mp/minim-mp.pdf
+2021/06/09 | 816252 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma
+2021/06/09 | 80965 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma
+2021/06/09 | 78752 | systems/win32/miktex/tm/packages/next/miktex-png-bin-2.9.tar.lzma
+2021/06/09 | 77942 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma
+2021/06/09 | 7716 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-2.9.tar.lzma
+2021/06/09 | 771076 | systems/texlive/tlnet/archive/csvsimple.doc.r59521.tar.xz
+2021/06/09 | 770846 | systems/win32/miktex/tm/packages/csvsimple__doc.tar.lzma
+2021/06/09 | 769585 | macros/generic/wichura-table.zip
+2021/06/09 | 76879 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma
+2021/06/09 | 75965 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma
+2021/06/09 | 748788 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-2.9.tar.lzma
+2021/06/09 | 74208 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma
+2021/06/09 | 73143 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma
+2021/06/09 | 72927 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-2.9.tar.lzma
+2021/06/09 | 72178 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma
+2021/06/09 | 71710 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-2.9.tar.lzma
+2021/06/09 | 7114454 | macros/latex/contrib/hvfloat/doc/hvfloat.pdf
+2021/06/09 | 7075 | systems/win32/miktex/tm/packages/keyfloat.tar.lzma
+2021/06/09 | 70489 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma
+2021/06/09 | 69899 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma
+2021/06/09 | 6820 | systems/texlive/tlnet/archive/keyfloat.r59523.tar.xz
+2021/06/09 | 6812835 | systems/texlive/tlnet/install-tl-unx.tar.gz
+2021/06/09 | 680953 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma
+2021/06/09 | 67973 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-x64-2.9.tar.lzma
+2021/06/09 | 67889 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-2.9.tar.lzma
+2021/06/09 | 67611 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-2.9.tar.lzma
+2021/06/09 | 67374 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-2.9.tar.lzma
+2021/06/09 | 67263 | systems/win32/miktex/tm/packages/next/miktex-web-bin-2.9.tar.lzma
+2021/06/09 | 65468 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma
+2021/06/09 | 64404 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-2.9.tar.lzma
+2021/06/09 | 64034 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-2.9.tar.lzma
+2021/06/09 | 6380 | macros/luatex/generic/minim/minim-callbacks.lua
+2021/06/09 | 63751 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-2.9.tar.lzma
+2021/06/09 | 6370 | systems/win32/miktex/tm/packages/xintsession.tar.lzma
+2021/06/09 | 634773 | macros/latex/contrib/siunitx/siunitx.pdf
+2021/06/09 | 6312 | macros/luatex/generic/minim/minim-doc.sty
+2021/06/09 | 629826 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-2.9.tar.lzma
+2021/06/09 | 62716 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma
+2021/06/09 | 62229 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma
+2021/06/09 | 621335 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma
+2021/06/09 | 62127 | graphics/minim-hatching/minim-hatching-doc.pdf
+2021/06/09 | 6124 | systems/texlive/tlnet/archive/xintsession.r59524.tar.xz
+2021/06/09 | 61005 | macros/latex/contrib/hvfloat/latex/hvfloat.sty
+2021/06/09 | 60618 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-2.9.tar.lzma
+2021/06/09 | 59700 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64.tar.lzma
+2021/06/09 | 596063 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma
+2021/06/09 | 59144 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma
+2021/06/09 | 586329 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-2.9.tar.lzma
+2021/06/09 | 583051 | systems/win32/miktex/tm/packages/next/files.csv.lzma
+2021/06/09 | 5828 | systems/win32/miktex/tm/packages/csvsimple.tar.lzma
+2021/06/09 | 582716 | systems/win32/miktex/tm/packages/files.csv.lzma
+2021/06/09 | 57634 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma
+2021/06/09 | 57112 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin-x64.tar.lzma
+2021/06/09 | 56814 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma
+2021/06/09 | 56755 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-2.9.tar.lzma
+2021/06/09 | 565937 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma
+2021/06/09 | 56471 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma
+2021/06/09 | 56341 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-2.9.tar.lzma
+2021/06/09 | 56314 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-2.9.tar.lzma
+2021/06/09 | 56291 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin.tar.lzma
+2021/06/09 | 5576 | systems/texlive/tlnet/archive/csvsimple.r59521.tar.xz
+2021/06/09 | 55525 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin.tar.lzma
+2021/06/09 | 532268 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-2.9.tar.lzma
+2021/06/09 | 52544 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-2.9.tar.lzma
+2021/06/09 | 52440 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma
+2021/06/09 | 51742 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma
+2021/06/09 | 51457 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma
+2021/06/09 | 51290 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-2.9.tar.lzma
+2021/06/09 | 512668 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma
+2021/06/09 | 51118 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma
+2021/06/09 | 51089 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-2.9.tar.lzma
+2021/06/09 | 50032 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-2.9.tar.lzma
+2021/06/09 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
+2021/06/09 | 48536 | macros/latex/contrib/siunitx/siunitx-table.dtx
+2021/06/09 | 482839 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-2.9.tar.lzma
+2021/06/09 | 48239 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma
+2021/06/09 | 476903 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-2.9.tar.lzma
+2021/06/09 | 475888 | macros/latex/contrib/siunitx/siunitx-table.pdf
+2021/06/09 | 4748 | macros/latex/contrib/siunitx/siunitx-abbreviations.cfg
+2021/06/09 | 471 | macros/generic/wichura-table/README.txt
+2021/06/09 | 46724 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma
+2021/06/09 | 46495 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-2.9.tar.lzma
+2021/06/09 | 4629 | macros/latex/contrib/siunitx/siunitx-locale.dtx
+2021/06/09 | 461825 | systems/win32/miktex/tm/packages/next/miktex-doc.tar.lzma
+2021/06/09 | 45941 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-2.9.tar.lzma
+2021/06/09 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
+2021/06/09 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc
+2021/06/09 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
+2021/06/09 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
+2021/06/09 | 45318 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma
+2021/06/09 | 44613 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-2.9.tar.lzma
+2021/06/09 | 43358 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma
+2021/06/09 | 43061 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-2.9.tar.lzma
+2021/06/09 | 42982 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma
+2021/06/09 | 42889 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-2.9.tar.lzma
+2021/06/09 | 42729 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma
+2021/06/09 | 4241 | graphics/minim-hatching/minim-hatching-doc.mp
+2021/06/09 | 42375 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-2.9.tar.lzma
+2021/06/09 | 42090 | macros/latex/contrib/siunitx/CHANGELOG.md
+2021/06/09 | 41190 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-2.9.tar.lzma
+2021/06/09 | 40344 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin-x64.tar.lzma
+2021/06/09 | 397504 | systems/texlive/tlnet/archive/texlive-scripts.doc.r59520.tar.xz
+2021/06/09 | 39616 | macros/luatex/generic/minim-pdf/minim-pdf.lua
+2021/06/09 | 392699 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma
+2021/06/09 | 39020 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-2.9.tar.lzma
+2021/06/09 | 38955 | fonts/utilities/jfmutil.zip
+2021/06/09 | 38711 | systems/win32/miktex/tm/packages/biblatex-ext__source.tar.lzma
+2021/06/09 | 385 | macros/luatex/generic/minim-mp/minim-mp.ini
+2021/06/09 | 38172 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-2.9.tar.lzma
+2021/06/09 | 379 | macros/luatex/generic/minim/minim.ini
+2021/06/09 | 37867 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-2.9.tar.lzma
+2021/06/09 | 37365 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin-x64.tar.lzma
+2021/06/09 | 37231 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma
+2021/06/09 | 3687 | macros/latex/contrib/siunitx/siunitx.ins
+2021/06/09 | 36606 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma
+2021/06/09 | 35935 | graphics/minim-hatching.zip
+2021/06/09 | 35840 | systems/win32/miktex/tm/packages/keyfloat__source.tar.lzma
+2021/06/09 | 35700 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin.tar.lzma
+2021/06/09 | 356748 | macros/latex/contrib/easybook.zip
+2021/06/09 | 35071 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma
+2021/06/09 | 34652 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma
+2021/06/09 | 345326 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma
+2021/06/09 | 33621 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma
+2021/06/09 | 33602 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin.tar.lzma
+2021/06/09 | 33332 | macros/latex/contrib/siunitx/siunitx-compound.dtx
+2021/06/09 | 332308 | systems/texlive/tlnet/archive/dvipdfmx.win32.r59526.tar.xz
+2021/06/09 | 331146 | macros/latex/contrib/biblatex-contrib/biblatex-mla.zip
+2021/06/09 | 330439 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-2.9.tar.lzma
+2021/06/09 | 32600 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-2.9.tar.lzma
+2021/06/09 | 324143 | systems/win32/miktex/tm/packages/easybook__doc.tar.lzma
+2021/06/09 | 324143 | macros/latex/contrib/easybook/easybook.pdf
+2021/06/09 | 323036 | systems/texlive/tlnet/archive/easybook.doc.r59522.tar.xz
+2021/06/09 | 321646 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma
+2021/06/09 | 31964 | systems/win32/miktex/tm/packages/easybook__source.tar.lzma
+2021/06/09 | 31738 | macros/latex/contrib/siunitx/siunitx-version-1.cfg
+2021/06/09 | 31576 | systems/texlive/tlnet/archive/easybook.source.r59522.tar.xz
+2021/06/09 | 31569 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma
+2021/06/09 | 31548 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-2.9.tar.lzma
+2021/06/09 | 31328 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma
+2021/06/09 | 31208 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-2.9.tar.lzma
+2021/06/09 | 311357 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-2.9.tar.lzma
+2021/06/09 | 30808 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma
+2021/06/09 | 30792 | macros/latex/contrib/siunitx/siunitx-print.dtx
+2021/06/09 | 30038 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma
+2021/06/09 | 29835 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-2.9.tar.lzma
+2021/06/09 | 29819 | macros/latex/contrib/siunitx/siunitx-emulation.dtx
+2021/06/09 | 297431 | macros/luatex/generic/minim.zip
+2021/06/09 | 295147 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma
+2021/06/09 | 29045 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-2.9.tar.lzma
+2021/06/09 | 2883 | macros/latex/contrib/siunitx/siunitx-binary.dtx
+2021/06/09 | 285949 | macros/luatex/generic/minim/minim.pdf
+2021/06/09 | 2853 | systems/win32/miktex/tm/packages/xintsession__doc.tar.lzma
+2021/06/09 | 284041 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma
+2021/06/09 | 28288 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-2.9.tar.lzma
+2021/06/09 | 281967 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-2.9.tar.lzma
+2021/06/09 | 28188 | systems/texlive/tlnet/archive/keyfloat.source.r59523.tar.xz
+2021/06/09 | 28164 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma
+2021/06/09 | 279382 | systems/win32/miktex/tm/packages/latexmk__doc.tar.lzma
+2021/06/09 | 2793681 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma
+2021/06/09 | 27711 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-2.9.tar.lzma
+2021/06/09 | 273398 | macros/latex/contrib/siunitx/siunitx-v2.sty
+2021/06/09 | 27267 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-2.9.tar.lzma
+2021/06/09 | 27260 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma
+2021/06/09 | 27186 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-2.9.tar.lzma
+2021/06/09 | 2714917 | install/macros/latex/contrib/siunitx.tds.zip
+2021/06/09 | 27133 | systems/win32/miktex/tm/packages/biblatex-ext.tar.lzma
+2021/06/09 | 2676999 | macros/latex/contrib/siunitx.zip
+2021/06/09 | 2670404 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-2.9.tar.lzma
+2021/06/09 | 2652 | macros/latex/contrib/hvfloat/Changes
+2021/06/09 | 261912 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma
+2021/06/09 | 258840 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-2.9.tar.lzma
+2021/06/09 | 25717 | macros/latex/contrib/siunitx/siunitx-complex.dtx
+2021/06/09 | 25584682 | systems/texlive/tlnet/install-tl.zip
+2021/06/09 | 25268 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-2.9.tar.lzma
+2021/06/09 | 250394 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-2.9.tar.lzma
+2021/06/09 | 25009 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-2.9.tar.lzma
+2021/06/09 | 24989 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma
+2021/06/09 | 245795 | macros/latex/contrib/hvfloat/doc/examples/odd2s1c.pdf
+2021/06/09 | 243393 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma
+2021/06/09 | 2426 | macros/latex/contrib/siunitx/siunitx-code.tex
+2021/06/09 | 239583 | systems/win32/miktex/tm/packages/next/miktex-console-bin-2.9.tar.lzma
+2021/06/09 | 23882 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma
+2021/06/09 | 23369 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma
+2021/06/09 | 2310696 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
+2021/06/09 | 2244 | systems/texlive/tlnet/archive/xintsession.doc.r59524.tar.xz
+2021/06/09 | 22025 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-2.9.tar.lzma
+2021/06/09 | 217236 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma
+2021/06/09 | 217209 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma
+2021/06/09 | 215198 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma
+2021/06/09 | 21178 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-2.9.tar.lzma
+2021/06/09 | 20808974 | systems/texlive/tlnet/install-tl-windows.exe
+2021/06/09 | 207853 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-2.9.tar.lzma
+2021/06/09 | 206344 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-x64-2.9.tar.lzma
+2021/06/09 | 202703 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma
+2021/06/09 | 20125 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-2.9.tar.lzma
+2021/06/09 | 2005872 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma
+2021/06/09 | 199641 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-2.9.tar.lzma
+2021/06/09 | 198226 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-2.9.tar.lzma
+2021/06/09 | 197090 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-2.9.tar.lzma
+2021/06/09 | 195754 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma
+2021/06/09 | 19542 | macros/latex/contrib/siunitx/siunitx.dtx
+2021/06/09 | 194079 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-2.9.tar.lzma
+2021/06/09 | 18168 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma
+2021/06/09 | 180188 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-2.9.tar.lzma
+2021/06/09 | 180081 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma
+2021/06/09 | 17982 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma
+2021/06/09 | 1729 | macros/latex/contrib/siunitx/siunitx-binary.cfg
+2021/06/09 | 17271576 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
+2021/06/09 | 1708079 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-2.9.tar.lzma
+2021/06/09 | 169104 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma
+2021/06/09 | 16529 | macros/latex/contrib/siunitx/siunitx-angle.dtx
+2021/06/09 | 16448 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-2.9.tar.lzma
+2021/06/09 | 163765 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma
+2021/06/09 | 16342 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-2.9.tar.lzma
+2021/06/09 | 159548 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma
+2021/06/09 | 154626 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-2.9.tar.lzma
+2021/06/09 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
+2021/06/09 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
+2021/06/09 | 152851 | macros/luatex/generic/minim-math.zip
+2021/06/09 | 152162 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma
+2021/06/09 | 1486326 | macros/latex/contrib/siunitx/siunitx-code.pdf
+2021/06/09 | 14802216 | macros/latex/contrib/hvfloat.zip
+2021/06/09 | 147714 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-2.9.tar.lzma
+2021/06/09 | 147408 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-2.9.tar.lzma
+2021/06/09 | 14705 | systems/win32/miktex/tm/packages/easybook.tar.lzma
+2021/06/09 | 14661 | systems/win32/miktex/tm/packages/latexmk__source.tar.lzma
+2021/06/09 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
+2021/06/09 | 145224 | macros/latex/contrib/siunitx/siunitx.tex
+2021/06/09 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
+2021/06/09 | 14444 | systems/texlive/tlnet/archive/easybook.r59522.tar.xz
+2021/06/09 | 14351 | macros/latex/contrib/siunitx/siunitx-quantity.dtx
+2021/06/09 | 14347 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma
+2021/06/09 | 1429090 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma
+2021/06/09 | 1423059 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma
+2021/06/09 | 136506 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma
+2021/06/09 | 134798 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-2.9.tar.lzma
+2021/06/09 | 13448 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-2.9.tar.lzma
+2021/06/09 | 131582 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma
+2021/06/09 | 131006 | macros/latex/contrib/easybook/easybook.dtx
+2021/06/09 | 1308119 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-2.9.tar.lzma
+2021/06/09 | 1300401 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma
+2021/06/09 | 1294238 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-2.9.tar.lzma
+2021/06/09 | 1290005 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma
+2021/06/09 | 1288520 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma
+2021/06/09 | 12818 | macros/luatex/generic/minim-pdf/minim-pdf.tex
+2021/06/09 | 125669 | macros/luatex/generic/minim-pdf.zip
+2021/06/09 | 124616 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-2.9.tar.lzma
+2021/06/09 | 1245432 | graphics/pictex.zip
+2021/06/09 | 1201645 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma
+2021/06/09 | 1201015 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma
+2021/06/09 | 117479 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-2.9.tar.lzma
+2021/06/09 | 1170762 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-2.9.tar.lzma
+2021/06/09 | 115561 | macros/latex/contrib/siunitx/siunitx-number.dtx
+2021/06/09 | 1153 | systems/win32/miktex/tm/packages/next/pr.ini
+2021/06/09 | 115121 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma
+2021/06/09 | 112816 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma
+2021/06/09 | 112167 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma
+2021/06/09 | 1091 | fonts/utilities/jfmutil/LICENSE
+2021/06/09 | 108936 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma
+2021/06/09 | 108362 | macros/luatex/generic/minim-pdf/minim-pdf.pdf
+2021/06/09 | 108008 | systems/texlive/tlnet/archive/texlive-scripts.r59520.tar.xz
+2021/06/09 | 1076119 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma
+2021/06/09 | 106915 | macros/luatex/generic/minim-math/minim-math.pdf
+2021/06/09 | 106861 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma
+2021/06/09 | 103520 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma
+2021/06/09 | 103439 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma
+2021/06/09 | 1011581 | systems/win32/miktex/tm/packages/keyfloat__doc.tar.lzma
+2021/06/09 | 10106 | macros/latex/contrib/siunitx/siunitx-abbreviation.dtx
+2021/06/09 | 1008152 | systems/texlive/tlnet/archive/keyfloat.doc.r59523.tar.xz
+2021/06/09 | 100463 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-2.9.tar.lzma
2021/06/08 | 9923235 | systems/win32/miktex/tm/packages/bjfuthesis__doc.tar.lzma
2021/06/08 | 9903148 | systems/texlive/tlnet/archive/bjfuthesis.doc.r59505.tar.xz
-2021/06/08 | 98266 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-2.9.tar.lzma
-2021/06/08 | 97981 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-2.9.tar.lzma
-2021/06/08 | 97491 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-2.9.tar.lzma
-2021/06/08 | 971290 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-2.9.tar.lzma
-2021/06/08 | 96475 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-2.9.tar.lzma
2021/06/08 | 958085 | macros/latex/contrib/biblatex-contrib/biblatex-ext.zip
-2021/06/08 | 95453 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma
2021/06/08 | 9516 | macros/latex/contrib/biblatex-contrib/biblatex-ext/blxextdoiapi.lua
-2021/06/08 | 94773 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-2.9.tar.lzma
-2021/06/08 | 94383 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-2.9.tar.lzma
+2021/06/08 | 9483 | macros/luatex/generic/minim/minim-alloc.doc
2021/06/08 | 9336 | systems/texlive/tlnet/archive/colorist.r59509.tar.xz
2021/06/08 | 93361 | systems/win32/miktex/tm/packages/pythontex__source.tar.lzma
2021/06/08 | 92392 | systems/texlive/tlnet/archive/colorist.doc.r59509.tar.xz
2021/06/08 | 9227 | systems/win32/miktex/tm/packages/colorist.tar.lzma
-2021/06/08 | 921 | systems/win32/miktex/tm/packages/pr.ini
2021/06/08 | 91296 | systems/texlive/tlnet/archive/hyperref.r59511.tar.xz
2021/06/08 | 91288 | systems/texlive/tlnet/archive/minimalist.doc.r59513.tar.xz
2021/06/08 | 91218 | systems/win32/miktex/tm/packages/hyperref.tar.lzma
-2021/06/08 | 8771 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma
-2021/06/08 | 87679 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma
+2021/06/08 | 90 | macros/luatex/generic/minim/minim.tex
+2021/06/08 | 9068 | macros/latex/contrib/biblatex-contrib/biblatex-mla/english-mla.lbx
+2021/06/08 | 905 | macros/luatex/generic/minim-pdf/README
2021/06/08 | 8766 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-authoryear-icomp.cbx
+2021/06/08 | 8753 | macros/latex/contrib/biblatex-contrib/biblatex-mla/italian-mla.lbx
2021/06/08 | 87273 | systems/win32/miktex/tm/packages/colorist__doc.tar.lzma
2021/06/08 | 86830 | systems/win32/miktex/tm/packages/hvfloat__source.tar.lzma
2021/06/08 | 86092 | systems/win32/miktex/tm/packages/minimalist__doc.tar.lzma
+2021/06/08 | 8428 | macros/latex/contrib/biblatex-contrib/biblatex-mla/spanish-mla.lbx
+2021/06/08 | 842625 | systems/win32/w32tex/ChangeLog
2021/06/08 | 83944 | systems/texlive/tlnet/archive/pythontex.source.r59514.tar.xz
-2021/06/08 | 83761 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-2.9.tar.lzma
2021/06/08 | 835302 | macros/latex/contrib/biblatex-contrib/biblatex-ext/biblatex-ext.pdf
2021/06/08 | 83288 | systems/texlive/tlnet/archive/luatexja.source.r59518.tar.xz
2021/06/08 | 832329 | macros/latex/contrib/csvsimple/csvsimple.pdf
2021/06/08 | 8316 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-authoryear-comp.cbx
-2021/06/08 | 816251 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma
-2021/06/08 | 80965 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma
2021/06/08 | 8058 | macros/plain/contrib/xintsession.zip
+2021/06/08 | 803 | macros/latex/contrib/biblatex-contrib/biblatex-mla/american-mla.lbx
+2021/06/08 | 80379 | macros/latex/contrib/biblatex-contrib/biblatex-mla/doc/examples.bib
2021/06/08 | 7975 | macros/latex/contrib/biblatex-contrib/biblatex-ext/biblatex-ext-oasymb-l3draw.sty
2021/06/08 | 793817 | systems/win32/miktex/tm/packages/pmdb__doc.tar.lzma
2021/06/08 | 793466 | macros/latex/contrib/csvsimple.zip
2021/06/08 | 792902 | install/macros/latex/contrib/csvsimple.tds.zip
-2021/06/08 | 78749 | systems/win32/miktex/tm/packages/next/miktex-png-bin-2.9.tar.lzma
2021/06/08 | 78715 | systems/win32/miktex/tm/packages/bangla__doc.tar.lzma
-2021/06/08 | 77939 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma
-2021/06/08 | 7717 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-2.9.tar.lzma
-2021/06/08 | 76879 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma
2021/06/08 | 7673684 | systems/texlive/tlnet/archive/hvfloat.doc.r59506.tar.xz
+2021/06/08 | 764 | macros/luatex/generic/minim/minim-hooks.lua
2021/06/08 | 76213 | macros/latex/contrib/csvsimple/csvsimple.tex
2021/06/08 | 76028 | systems/win32/miktex/tm/packages/pythontex.tar.lzma
-2021/06/08 | 75964 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma
2021/06/08 | 75627 | macros/latex/contrib/csvsimple/csvsimple-example.pdf
2021/06/08 | 752631 | systems/win32/miktex/tm/packages/bangla.tar.lzma
-2021/06/08 | 748785 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-2.9.tar.lzma
-2021/06/08 | 74206 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma
2021/06/08 | 7316466 | systems/win32/miktex/tm/packages/hvfloat__doc.tar.lzma
-2021/06/08 | 73143 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma
-2021/06/08 | 72924 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-2.9.tar.lzma
-2021/06/08 | 72178 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma
+2021/06/08 | 727 | macros/luatex/generic/minim-mp/README
+2021/06/08 | 7248 | graphics/minim-hatching/minim-hatching.mp
2021/06/08 | 718 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-verbose-inote.cbx
-2021/06/08 | 71707 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-2.9.tar.lzma
2021/06/08 | 715 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-verbose-note.cbx
2021/06/08 | 715 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-alphabetic-verb.bbx
2021/06/08 | 713 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-verbose-trad3.cbx
2021/06/08 | 713 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-verbose-trad2.cbx
2021/06/08 | 713 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-verbose-trad1.cbx
2021/06/08 | 710 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-verbose-ibid.cbx
+2021/06/08 | 7067 | macros/latex/contrib/biblatex-contrib/biblatex-mla/portuguese-mla.lbx
2021/06/08 | 705 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-authortitle-ticomp.bbx
-2021/06/08 | 70487 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma
2021/06/08 | 702 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-authoryear-tiecomp.bbx
2021/06/08 | 702 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-authortitle-terse.bbx
2021/06/08 | 702 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-authortitle-tcomp.bbx
@@ -73,322 +350,191 @@
2021/06/08 | 699 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-authortitle-ibid.bbx
2021/06/08 | 699 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-authortitle-comp.bbx
2021/06/08 | 698 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-authoryear-icomp.bbx
-2021/06/08 | 69898 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma
2021/06/08 | 697 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-authoryear-tcomp.bbx
2021/06/08 | 695 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-verbose.cbx
2021/06/08 | 695 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-authoryear-ibid.bbx
2021/06/08 | 695 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-authoryear-comp.bbx
2021/06/08 | 692 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-authoryear-terse.bbx
+2021/06/08 | 6929 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
2021/06/08 | 691 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-authoryear-iecomp.bbx
2021/06/08 | 6911 | systems/win32/miktex/tm/packages/minimalist__source.tar.lzma
2021/06/08 | 688 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-authoryear-ecomp.bbx
+2021/06/08 | 68832972 | systems/win32/w32tex/luatexja.tar.xz
2021/06/08 | 6881 | systems/win32/miktex/tm/packages/minimalist.tar.lzma
+2021/06/08 | 687 | macros/luatex/generic/minim-math/README
2021/06/08 | 684 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-authortitle.bbx
-2021/06/08 | 6812820 | systems/texlive/tlnet/install-tl-unx.tar.gz
-2021/06/08 | 680954 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma
-2021/06/08 | 67973 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-x64-2.9.tar.lzma
-2021/06/08 | 67886 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-2.9.tar.lzma
2021/06/08 | 677 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-authoryear.bbx
-2021/06/08 | 67610 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-2.9.tar.lzma
2021/06/08 | 6743 | systems/win32/miktex/tm/packages/colorist__source.tar.lzma
-2021/06/08 | 67371 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-2.9.tar.lzma
-2021/06/08 | 67262 | systems/win32/miktex/tm/packages/next/miktex-web-bin-2.9.tar.lzma
2021/06/08 | 6708 | systems/texlive/tlnet/archive/minimalist.r59513.tar.xz
2021/06/08 | 66988 | systems/texlive/tlnet/archive/pythontex.r59514.tar.xz
2021/06/08 | 6671 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-authoryear-tiecomp.cbx
-2021/06/08 | 65468 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma
-2021/06/08 | 64402 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-2.9.tar.lzma
+2021/06/08 | 6488 | macros/luatex/generic/minim/minim-alloc.tex
2021/06/08 | 640 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-verbose-trad3.bbx
2021/06/08 | 640 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-verbose-trad2.bbx
2021/06/08 | 640 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-verbose-trad1.bbx
2021/06/08 | 640 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-verbose-inote.bbx
-2021/06/08 | 64033 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-2.9.tar.lzma
2021/06/08 | 637 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-verbose-note.bbx
2021/06/08 | 637 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-verbose-ibid.bbx
2021/06/08 | 637 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-numeric-verb.bbx
2021/06/08 | 637 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-numeric-comp.bbx
-2021/06/08 | 63751 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-2.9.tar.lzma
-2021/06/08 | 629825 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-2.9.tar.lzma
2021/06/08 | 628 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-alphabetic.bbx
-2021/06/08 | 62714 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma
+2021/06/08 | 62889 | macros/latex/contrib/biblatex-contrib/biblatex-mla/doc/biblatex-mla.tex
2021/06/08 | 622 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-verbose.bbx
-2021/06/08 | 62228 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma
-2021/06/08 | 621333 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma
2021/06/08 | 619 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-numeric.bbx
2021/06/08 | 6171 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-authoryear-tecomp.cbx
2021/06/08 | 6137 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-authortitle-icomp.cbx
2021/06/08 | 6130 | macros/latex/contrib/biblatex-contrib/biblatex-ext/README.md
2021/06/08 | 60948 | systems/texlive/tlnet/archive/siunitx.r59516.tar.xz
2021/06/08 | 6074 | macros/latex/contrib/biblatex-contrib/biblatex-ext/biblatex-ext-oasymb-tikz.sty
-2021/06/08 | 60619 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-2.9.tar.lzma
2021/06/08 | 60462 | systems/win32/miktex/tm/packages/siunitx.tar.lzma
-2021/06/08 | 59699 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64.tar.lzma
-2021/06/08 | 596060 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma
-2021/06/08 | 59144 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma
-2021/06/08 | 586329 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-2.9.tar.lzma
+2021/06/08 | 58 | systems/mac/mactex/MacTeXtras-20210608.zip.md5
+2021/06/08 | 5847 | macros/latex/contrib/biblatex-contrib/biblatex-mla/doc/examples.tex
2021/06/08 | 5833 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-authortitle-comp.cbx
-2021/06/08 | 582557 | systems/win32/miktex/tm/packages/next/files.csv.lzma
-2021/06/08 | 582460 | systems/win32/miktex/tm/packages/files.csv.lzma
2021/06/08 | 5773 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-authoryear-ticomp.cbx
-2021/06/08 | 57635 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma
2021/06/08 | 5733 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-authoryear-ibid.cbx
-2021/06/08 | 57112 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin-x64.tar.lzma
-2021/06/08 | 56811 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma
-2021/06/08 | 56752 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-2.9.tar.lzma
-2021/06/08 | 565936 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma
-2021/06/08 | 56473 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma
-2021/06/08 | 56338 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-2.9.tar.lzma
-2021/06/08 | 56311 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-2.9.tar.lzma
-2021/06/08 | 56289 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin.tar.lzma
+2021/06/08 | 5732 | macros/luatex/generic/minim/minim-alloc.lua
2021/06/08 | 5586 | macros/latex/contrib/biblatex-contrib/biblatex-ext/biblatex-ext-oasymb-pict2e.sty
-2021/06/08 | 55524 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin.tar.lzma
2021/06/08 | 5533 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-authoryear-common.bbx
2021/06/08 | 5504 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-authoryear.cbx
2021/06/08 | 5456 | macros/latex/contrib/keyfloat/images/image.pdf
2021/06/08 | 5336 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-authoryear-tcomp.cbx
2021/06/08 | 5324 | systems/texlive/tlnet/archive/ran_toks.r59515.tar.xz
-2021/06/08 | 532270 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-2.9.tar.lzma
-2021/06/08 | 52543 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-2.9.tar.lzma
2021/06/08 | 524452 | systems/texlive/tlnet/archive/ran_toks.doc.r59515.tar.xz
-2021/06/08 | 52440 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma
-2021/06/08 | 51742 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma
-2021/06/08 | 51457 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma
2021/06/08 | 5129 | macros/latex/contrib/csvsimple/CHANGES
-2021/06/08 | 51290 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-2.9.tar.lzma
-2021/06/08 | 512667 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma
-2021/06/08 | 51118 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma
-2021/06/08 | 51088 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-2.9.tar.lzma
+2021/06/08 | 507 | graphics/minim-hatching/README
2021/06/08 | 5078 | systems/win32/miktex/tm/packages/pxjahyper__source.tar.lzma
-2021/06/08 | 50032 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-2.9.tar.lzma
+2021/06/08 | 50080024 | systems/win32/w32tex/ltxpkgs.tar.xz
2021/06/08 | 4995 | systems/win32/miktex/tm/packages/mathcommand.tar.lzma
+2021/06/08 | 4920 | macros/luatex/generic/minim-pdf/minim-languagecodes.lua
2021/06/08 | 4915 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-authortitle-ibid.cbx
-2021/06/08 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
-2021/06/08 | 482837 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-2.9.tar.lzma
-2021/06/08 | 48237 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma
-2021/06/08 | 476901 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-2.9.tar.lzma
2021/06/08 | 4757 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-numeric-comp.cbx
2021/06/08 | 4748 | systems/texlive/tlnet/archive/mathcommand.r59512.tar.xz
+2021/06/08 | 4748 | macros/latex/contrib/biblatex-contrib/biblatex-mla/mla.bbx
2021/06/08 | 4700 | macros/latex/contrib/keyfloat/images/image2.pdf
2021/06/08 | 4697 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-authortitle.cbx
-2021/06/08 | 46723 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma
+2021/06/08 | 4667076 | systems/win32/w32tex/dvipdfm-w32.tar.xz
2021/06/08 | 465328 | support/latexmk.zip
-2021/06/08 | 46494 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-2.9.tar.lzma
-2021/06/08 | 461826 | systems/win32/miktex/tm/packages/next/miktex-doc.tar.lzma
2021/06/08 | 4614565 | systems/win32/miktex/tm/packages/musixtex-fonts.tar.lzma
2021/06/08 | 4600340 | systems/texlive/tlnet/archive/musixtex-fonts.r59507.tar.xz
-2021/06/08 | 45939 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-2.9.tar.lzma
2021/06/08 | 4576 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-authortitle-ticomp.cbx
-2021/06/08 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
-2021/06/08 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc
-2021/06/08 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
-2021/06/08 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
+2021/06/08 | 4551656 | systems/win32/w32tex/dvipsk-w32.tar.xz
2021/06/08 | 454435 | systems/win32/miktex/tm/packages/mathcommand__doc.tar.lzma
-2021/06/08 | 45318 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma
2021/06/08 | 452340 | systems/texlive/tlnet/archive/mathcommand.doc.r59512.tar.xz
2021/06/08 | 448314 | systems/win32/miktex/tm/packages/hyperref__source.tar.lzma
2021/06/08 | 446776 | systems/texlive/tlnet/archive/hyperref.source.r59511.tar.xz
-2021/06/08 | 44611 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-2.9.tar.lzma
-2021/06/08 | 43358 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma
+2021/06/08 | 439780 | systems/win32/w32tex/mftools.tar.xz
2021/06/08 | 43200 | systems/win32/miktex/tm/packages/suftesi__source.tar.lzma
-2021/06/08 | 43059 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-2.9.tar.lzma
-2021/06/08 | 42981 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma
-2021/06/08 | 42886 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-2.9.tar.lzma
-2021/06/08 | 42729 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma
-2021/06/08 | 42375 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-2.9.tar.lzma
-2021/06/08 | 41187 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-2.9.tar.lzma
+2021/06/08 | 42557 | macros/luatex/generic/minim-mp/minim-mp.lua
+2021/06/08 | 422433940 | systems/mac/mactex/MacTeXtras-20210608.zip
+2021/06/08 | 42233 | macros/latex/contrib/biblatex-contrib/biblatex-mla/mla-strict.bbx
2021/06/08 | 4111 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-numeric.cbx
2021/06/08 | 4053 | systems/win32/miktex/tm/packages/pmdb.tar.lzma
2021/06/08 | 4035 | macros/plain/contrib/xintsession/README.md
-2021/06/08 | 40342 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin-x64.tar.lzma
2021/06/08 | 3985 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-authortitle-tcomp.cbx
-2021/06/08 | 397692 | systems/texlive/tlnet/archive/texlive-scripts.doc.r59504.tar.xz
-2021/06/08 | 392697 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma
-2021/06/08 | 39019 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-2.9.tar.lzma
2021/06/08 | 38623 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-standard.bbx
-2021/06/08 | 38169 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-2.9.tar.lzma
+2021/06/08 | 38309 | macros/latex/contrib/biblatex-contrib/biblatex-mla/mla7.bbx
2021/06/08 | 3811 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-alphabetic.cbx
+2021/06/08 | 38111 | systems/mac/mactex/ExtrasFolder.pdf
2021/06/08 | 3795 | macros/latex/contrib/csvsimple/csvsimple-example.tex
-2021/06/08 | 37865 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-2.9.tar.lzma
-2021/06/08 | 37363 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin-x64.tar.lzma
-2021/06/08 | 37229 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma
2021/06/08 | 36919 | support/latexmk/CHANGES
-2021/06/08 | 36605 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma
2021/06/08 | 3632 | macros/latex/contrib/biblatex-contrib/biblatex-ext/biblatex-ext-oa-doiapi.sty
-2021/06/08 | 35699 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin.tar.lzma
-2021/06/08 | 356840 | macros/latex/contrib/easybook.zip
2021/06/08 | 3548 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-numeric-verb.cbx
-2021/06/08 | 35071 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma
-2021/06/08 | 34651 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma
-2021/06/08 | 345325 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma
-2021/06/08 | 33623 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma
-2021/06/08 | 33601 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin.tar.lzma
-2021/06/08 | 330437 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-2.9.tar.lzma
+2021/06/08 | 339808 | macros/luatex/generic/minim-math/minim-math-table.lua
2021/06/08 | 3288268 | systems/texlive/tlnet/archive/hyperref.doc.r59511.tar.xz
2021/06/08 | 3285638 | systems/win32/miktex/tm/packages/hyperref__doc.tar.lzma
-2021/06/08 | 32597 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-2.9.tar.lzma
2021/06/08 | 3249 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-alphabetic-verb.cbx
-2021/06/08 | 324274 | macros/latex/contrib/easybook/easybook.pdf
-2021/06/08 | 321643 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma
2021/06/08 | 3203076 | systems/texlive/tlnet/archive/luatexja.doc.r59518.tar.xz
-2021/06/08 | 31570 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma
-2021/06/08 | 31547 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-2.9.tar.lzma
-2021/06/08 | 314913 | systems/win32/miktex/tm/packages/easybook__doc.tar.lzma
-2021/06/08 | 31478 | systems/win32/miktex/tm/packages/easybook__source.tar.lzma
-2021/06/08 | 313844 | systems/texlive/tlnet/archive/easybook.doc.r59510.tar.xz
-2021/06/08 | 31328 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma
-2021/06/08 | 31207 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-2.9.tar.lzma
-2021/06/08 | 311355 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-2.9.tar.lzma
-2021/06/08 | 31104 | systems/texlive/tlnet/archive/easybook.source.r59510.tar.xz
2021/06/08 | 3103 | systems/win32/miktex/tm/packages/bjfuthesis.tar.lzma
-2021/06/08 | 30808 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma
2021/06/08 | 3067480 | systems/win32/miktex/tm/packages/luatexja__doc.tar.lzma
-2021/06/08 | 30037 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma
+2021/06/08 | 30295 | macros/luatex/generic/minim/minim-plain.tex
2021/06/08 | 2995 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-verbose-common.cbx
-2021/06/08 | 29835 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-2.9.tar.lzma
-2021/06/08 | 295145 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma
+2021/06/08 | 298 | graphics/pictex/README.txt
2021/06/08 | 2942 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-dashed-common.bbx
-2021/06/08 | 29046 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-2.9.tar.lzma
2021/06/08 | 288 | macros/latex/contrib/csvsimple/gradesort.xml
2021/06/08 | 2844 | systems/texlive/tlnet/archive/bjfuthesis.r59505.tar.xz
-2021/06/08 | 284040 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma
-2021/06/08 | 28285 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-2.9.tar.lzma
2021/06/08 | 2821 | systems/win32/miktex/tm/packages/bangla__source.tar.lzma
-2021/06/08 | 281964 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-2.9.tar.lzma
-2021/06/08 | 28162 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma
2021/06/08 | 2810 | systems/win32/miktex/tm/packages/bjfuthesis__source.tar.lzma
-2021/06/08 | 2793679 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma
-2021/06/08 | 27710 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-2.9.tar.lzma
-2021/06/08 | 27265 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-2.9.tar.lzma
-2021/06/08 | 27260 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma
-2021/06/08 | 27185 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-2.9.tar.lzma
-2021/06/08 | 2670400 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-2.9.tar.lzma
-2021/06/08 | 261911 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma
2021/06/08 | 259 | macros/latex/contrib/csvsimple/transform.xml
-2021/06/08 | 258838 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-2.9.tar.lzma
-2021/06/08 | 25584659 | systems/texlive/tlnet/install-tl.zip
-2021/06/08 | 25265 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-2.9.tar.lzma
+2021/06/08 | 2571 | macros/luatex/generic/minim/minim.doc
+2021/06/08 | 2541 | macros/luatex/generic/minim-mp/minim.mp
2021/06/08 | 2511 | macros/latex/contrib/csvsimple/README
2021/06/08 | 25077 | macros/latex/contrib/csvsimple/csvsimple.sty
-2021/06/08 | 250395 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-2.9.tar.lzma
-2021/06/08 | 25004 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-2.9.tar.lzma
-2021/06/08 | 24987 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma
-2021/06/08 | 243392 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma
2021/06/08 | 2420468 | systems/win32/miktex/tm/packages/siunitx__doc.tar.lzma
2021/06/08 | 2417064 | systems/texlive/tlnet/archive/siunitx.doc.r59516.tar.xz
-2021/06/08 | 239580 | systems/win32/miktex/tm/packages/next/miktex-console-bin-2.9.tar.lzma
2021/06/08 | 238 | macros/latex/contrib/csvsimple/csvsimple-example.csv
-2021/06/08 | 23883 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma
-2021/06/08 | 23369 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma
-2021/06/08 | 2311324 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
+2021/06/08 | 23556216 | systems/win32/w32tex/cjkzr.tar.xz
2021/06/08 | 229 | macros/latex/contrib/csvsimple/namesort.xml
2021/06/08 | 227 | macros/latex/contrib/csvsimple/amountsort.xml
-2021/06/08 | 22023 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-2.9.tar.lzma
+2021/06/08 | 22327960 | systems/win32/w32tex/pdftex-w32.tar.xz
2021/06/08 | 217931 | systems/win32/miktex/tm/packages/luatexja__source.tar.lzma
-2021/06/08 | 216900 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma
-2021/06/08 | 216819 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma
2021/06/08 | 215495 | support/latexmk/latexmk.txt
-2021/06/08 | 215197 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma
-2021/06/08 | 21177 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-2.9.tar.lzma
+2021/06/08 | 2151 | macros/latex/contrib/biblatex-contrib/biblatex-mla/README
+2021/06/08 | 213 | macros/latex/contrib/biblatex-contrib/biblatex-mla/mla-new.bbx
+2021/06/08 | 209 | macros/latex/contrib/biblatex-contrib/biblatex-mla/mla-new.cbx
2021/06/08 | 2086 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-authoryear-terse.cbx
-2021/06/08 | 20807246 | systems/texlive/tlnet/install-tl-windows.exe
-2021/06/08 | 207851 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-2.9.tar.lzma
-2021/06/08 | 206345 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-x64-2.9.tar.lzma
-2021/06/08 | 202702 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma
-2021/06/08 | 20124 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-2.9.tar.lzma
-2021/06/08 | 2005873 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma
-2021/06/08 | 199636 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-2.9.tar.lzma
-2021/06/08 | 198227 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-2.9.tar.lzma
-2021/06/08 | 197089 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-2.9.tar.lzma
+2021/06/08 | 20271 | macros/luatex/generic/minim-pdf/minim-pdf.doc
2021/06/08 | 1968 | macros/latex/contrib/easybook/README.md
2021/06/08 | 196426 | support/latexmk/latexmk.pdf
2021/06/08 | 1960 | systems/win32/miktex/tm/packages/tiscreen__source.tar.lzma
-2021/06/08 | 195754 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma
-2021/06/08 | 194076 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-2.9.tar.lzma
2021/06/08 | 190152 | systems/texlive/tlnet/archive/luatexja.r59518.tar.xz
2021/06/08 | 189831 | systems/win32/miktex/tm/packages/luatexja.tar.lzma
2021/06/08 | 1848 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-authortitle-terse.cbx
+2021/06/08 | 1848 | graphics/pictex/postpictex.tex
2021/06/08 | 18450 | support/latexmk/INSTALL
2021/06/08 | 18318 | macros/plain/contrib/xintsession/xintsession.tex
-2021/06/08 | 18168 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma
-2021/06/08 | 180187 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-2.9.tar.lzma
-2021/06/08 | 180081 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma
-2021/06/08 | 17983 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma
+2021/06/08 | 1818 | macros/luatex/generic/minim/minim-hooks.tex
2021/06/08 | 176 | macros/latex/contrib/csvsimple/matriculationsort.xml
-2021/06/08 | 17271526 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
+2021/06/08 | 1751 | macros/luatex/generic/minim-mp/minim-mp.tex
+2021/06/08 | 1711 | systems/mac/mactex/Licenses.txt
2021/06/08 | 17097 | systems/win32/miktex/tm/packages/pxjahyper.tar.lzma
-2021/06/08 | 1708076 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-2.9.tar.lzma
2021/06/08 | 17008 | systems/win32/miktex/tm/packages/pmdb__source.tar.lzma
-2021/06/08 | 169103 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma
+2021/06/08 | 16842 | macros/latex/contrib/biblatex-contrib/biblatex-mla/mla.cbx
2021/06/08 | 16840 | systems/texlive/tlnet/archive/pxjahyper.r59508.tar.xz
+2021/06/08 | 167698 | macros/latex/contrib/biblatex-contrib/biblatex-mla/doc/biblatex-mla.pdf
2021/06/08 | 166 | macros/latex/contrib/csvsimple/catsort.xml
2021/06/08 | 1644 | macros/latex/contrib/keyfloat/keyfloat.ins
-2021/06/08 | 16446 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-2.9.tar.lzma
-2021/06/08 | 163765 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma
-2021/06/08 | 16342 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-2.9.tar.lzma
2021/06/08 | 159712 | macros/latex/contrib/biblatex-contrib/biblatex-ext/biblatex-ext.tex
-2021/06/08 | 159548 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma
+2021/06/08 | 15795 | macros/latex/contrib/biblatex-contrib/biblatex-mla/CHANGES
2021/06/08 | 1553140 | systems/texlive/tlnet/archive/pythontex.doc.r59514.tar.xz
-2021/06/08 | 154623 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-2.9.tar.lzma
-2021/06/08 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
+2021/06/08 | 15409 | macros/luatex/generic/minim-math/minim-math.tex
2021/06/08 | 1531443 | systems/win32/miktex/tm/packages/pythontex__doc.tar.lzma
-2021/06/08 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
-2021/06/08 | 152163 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma
2021/06/08 | 15162 | macros/latex/contrib/biblatex-contrib/biblatex-ext/biblatex-ext-oa.sty
2021/06/08 | 1499 | macros/latex/contrib/easybook/easybook.ins
2021/06/08 | 14983 | systems/win32/miktex/tm/packages/suftesi.tar.lzma
-2021/06/08 | 147712 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-2.9.tar.lzma
-2021/06/08 | 147408 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-2.9.tar.lzma
-2021/06/08 | 14659 | systems/win32/miktex/tm/packages/easybook.tar.lzma
-2021/06/08 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
+2021/06/08 | 14765 | macros/luatex/generic/minim/minim-etex.tex
+2021/06/08 | 14560 | macros/luatex/generic/minim-math/minim-math.lua
2021/06/08 | 145571 | macros/latex/contrib/keyfloat/keyfloat.dtx
-2021/06/08 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
-2021/06/08 | 14384 | systems/texlive/tlnet/archive/easybook.r59510.tar.xz
-2021/06/08 | 14347 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma
-2021/06/08 | 1429094 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma
-2021/06/08 | 1423058 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma
+2021/06/08 | 14518 | macros/luatex/generic/minim-mp/minim-mp.doc
2021/06/08 | 1402 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-verbose-note-common.cbx
2021/06/08 | 1391 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-authortitle-common.bbx
-2021/06/08 | 136506 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma
+2021/06/08 | 1368 | graphics/pictex/prepictex.tex
2021/06/08 | 135 | macros/latex/contrib/csvsimple/encoding.xml
2021/06/08 | 135172 | systems/texlive/tlnet/archive/tiscreen.doc.r59517.tar.xz
-2021/06/08 | 134793 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-2.9.tar.lzma
-2021/06/08 | 13448 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-2.9.tar.lzma
2021/06/08 | 134402 | systems/win32/miktex/tm/packages/tiscreen__doc.tar.lzma
2021/06/08 | 1339 | systems/win32/miktex/tm/packages/tiscreen.tar.lzma
2021/06/08 | 133400 | systems/texlive/tlnet/archive/pxjahyper.doc.r59508.tar.xz
-2021/06/08 | 131580 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma
2021/06/08 | 13146 | support/latexmk/README
-2021/06/08 | 131018 | macros/latex/contrib/easybook/easybook.dtx
-2021/06/08 | 1308115 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-2.9.tar.lzma
+2021/06/08 | 131174548 | systems/win32/w32tex/web2c-lib.tar.xz
2021/06/08 | 130322 | systems/win32/miktex/tm/packages/pxjahyper__doc.tar.lzma
-2021/06/08 | 1300399 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma
-2021/06/08 | 1294235 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-2.9.tar.lzma
-2021/06/08 | 1289154 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma
-2021/06/08 | 1288428 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma
+2021/06/08 | 12947 | macros/latex/contrib/biblatex-contrib/biblatex-mla/mla-footnotes.cbx
2021/06/08 | 1285 | macros/latex/contrib/biblatex-contrib/biblatex-ext/biblatex-ext-examples.bib
2021/06/08 | 12757 | systems/win32/miktex/tm/packages/mathcommand__source.tar.lzma
2021/06/08 | 12474 | macros/latex/contrib/biblatex-contrib/biblatex-ext/CHANGES.md
-2021/06/08 | 124615 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-2.9.tar.lzma
2021/06/08 | 12352 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-biblatex-aux.def
2021/06/08 | 12204 | systems/texlive/tlnet/archive/ran_toks.source.r59515.tar.xz
2021/06/08 | 12189 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-authoryear-iecomp.cbx
2021/06/08 | 12088 | systems/texlive/tlnet/archive/mathcommand.source.r59512.tar.xz
-2021/06/08 | 1202422 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma
-2021/06/08 | 1201291 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma
-2021/06/08 | 117477 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-2.9.tar.lzma
+2021/06/08 | 1196 | macros/luatex/generic/minim/minim-lmodern.tex
2021/06/08 | 11724 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-authoryear-ecomp.cbx
-2021/06/08 | 1170758 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-2.9.tar.lzma
-2021/06/08 | 1153 | systems/win32/miktex/tm/packages/next/pr.ini
-2021/06/08 | 115120 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma
+2021/06/08 | 1171 | macros/latex/contrib/biblatex-contrib/biblatex-mla/mla.dbx
+2021/06/08 | 11663 | macros/luatex/generic/minim-math/minim-math.doc
+2021/06/08 | 1165 | macros/luatex/generic/minim/README
+2021/06/08 | 116506 | macros/latex/contrib/biblatex-contrib/biblatex-mla/doc/examples.pdf
2021/06/08 | 1144 | macros/latex/contrib/keyfloat/README.txt
2021/06/08 | 1136 | systems/texlive/tlnet/archive/tiscreen.r59517.tar.xz
-2021/06/08 | 112814 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma
-2021/06/08 | 112166 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma
-2021/06/08 | 108936 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma
+2021/06/08 | 110 | macros/latex/contrib/biblatex-contrib/biblatex-mla/mla-strict.cbx
+2021/06/08 | 108 | macros/latex/contrib/biblatex-contrib/biblatex-mla/mla7.cbx
2021/06/08 | 10823 | macros/latex/contrib/biblatex-contrib/biblatex-ext/biblatex-ext-tabular.sty
-2021/06/08 | 107984 | systems/texlive/tlnet/archive/texlive-scripts.r59504.tar.xz
-2021/06/08 | 1076119 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma
-2021/06/08 | 106861 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma
2021/06/08 | 10650 | systems/win32/miktex/tm/packages/hvfloat.tar.lzma
2021/06/08 | 105712 | systems/win32/miktex/tm/packages/musixtex-fonts__doc.tar.lzma
2021/06/08 | 105336 | systems/texlive/tlnet/archive/musixtex-fonts.doc.r59507.tar.xz
@@ -397,14 +543,9 @@
2021/06/08 | 104720 | systems/texlive/tlnet/archive/siunitx.source.r59516.tar.xz
2021/06/08 | 1046598 | systems/win32/miktex/tm/packages/suftesi__doc.tar.lzma
2021/06/08 | 1041110 | macros/latex/contrib/keyfloat.zip
-2021/06/08 | 103517 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma
-2021/06/08 | 103437 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma
2021/06/08 | 1012669 | macros/latex/contrib/keyfloat/keyfloat.pdf
-2021/06/08 | 100459 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-2.9.tar.lzma
2021/06/07 | 979067 | macros/latex/contrib/pythontex/pythontex.pdf
-2021/06/07 | 97866 | macros/latex/contrib/siunitx/siunitx-unit.dtx
2021/06/07 | 9765 | macros/luatex/generic/luatexja/src/addons/luatexja-ruby.sty
-2021/06/07 | 964 | macros/latex/contrib/siunitx/README.md
2021/06/07 | 9604 | language/bengali/bangla/bangla.sty
2021/06/07 | 9590 | macros/latex/contrib/pythontex/pythontex_gallery.tex
2021/06/07 | 945 | macros/luatex/generic/luatexja/tool/table_ivd_aj1.lua
@@ -425,14 +566,11 @@
2021/06/07 | 8885 | systems/win32/miktex/setup/rpm/opensuse/15/repodata/3c440f3cff05d0291f688bf303c6469cbe4965db6b3ba1e3cbe7d1a1d88a765a-filelists.sqlite.bz2
2021/06/07 | 885 | macros/luatex/generic/luatexja/src/patches/lltjp-stfloats.sty
2021/06/07 | 88226 | language/bengali/bangla/bangla.pdf
-2021/06/07 | 8774 | macros/latex/contrib/siunitx/siunitx-symbol.dtx
-2021/06/07 | 8762 | macros/latex/contrib/siunitx/siunitx-command.dtx
2021/06/07 | 86 | systems/win32/miktex/setup/deb/dists/focal/universe/binary-amd64/Release
2021/06/07 | 8609 | macros/luatex/generic/luatexja/src/ltj-otf.lua
2021/06/07 | 8607 | macros/luatex/generic/luatexja/src/ltjltxdoc.dtx
2021/06/07 | 855 | systems/win32/miktex/setup/rpm/opensuse/15/repodata/e4e82632dc4c35958c54467386c340338b0221df0161872097090c1004ba9952-other.xml.gz
2021/06/07 | 855 | systems/win32/miktex/setup/rpm/fedora/28/repodata/dbcd1af56fe7435f92be1684afe4b115d7327a60cfb650dc5599ba793743e614-other.xml.gz
-2021/06/07 | 842205 | systems/win32/w32tex/ChangeLog
2021/06/07 | 8310 | systems/win32/miktex/setup/rpm/fedora/34/repodata/51571be2a4174b39de4861e8f1754cb4f1532efeee8d75dddd80ba5a1bfa3119-filelists.sqlite.bz2
2021/06/07 | 827 | macros/latex/contrib/pmdb/examples/tst-items.tex
2021/06/07 | 825 | macros/luatex/generic/luatexja/src/patches/lltjp-collcell.sty
@@ -460,19 +598,16 @@
2021/06/07 | 692 | systems/texlive/tlnet/archive/ptex.r59502.tar.xz
2021/06/07 | 6918 | language/bengali/bangla/bangla.tex
2021/06/07 | 6891 | macros/luatex/generic/luatexja/src/addons/luatexja-otf.sty
-2021/06/07 | 6816 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
2021/06/07 | 6677 | macros/latex/contrib/bjfuthesis/bjfuthesis.cls
2021/06/07 | 6497 | macros/luatex/generic/luatexja/src/patches/lltjdefs.sty
2021/06/07 | 64097 | macros/latex/contrib/pythontex/pythontex_engines.py
2021/06/07 | 635 | macros/latex/contrib/tiscreen/README
-2021/06/07 | 634770 | macros/latex/contrib/siunitx/siunitx.pdf
2021/06/07 | 62143 | systems/win32/miktex/setup/rpm/fedora/28/repodata/224c9aeb5874f6580adb0cffcdcfa677ba31959cba8b28042436b850d92d1716-filelists.sqlite.bz2
2021/06/07 | 6205 | systems/win32/miktex/setup/rpm/fedora/34/repodata/ec560b75589d6ec37e7aa3184ce24a6cf5dd7081ae7c925144a4318ee7109b81-filelists.xml.gz
2021/06/07 | 6203 | macros/luatex/generic/luatexja/src/ltj-base.sty
2021/06/07 | 617 | macros/luatex/generic/luatexja/src/patches/lltjp-array.sty
2021/06/07 | 61137802 | systems/win32/miktex/setup/darwin-x86_64/miktex-21.6-darwin-x86_64.dmg
2021/06/07 | 6060 | macros/luatex/generic/luatexja/tool/kyoikukanjiChars.tex
-2021/06/07 | 60424 | macros/latex/contrib/hvfloat/latex/hvfloat.sty
2021/06/07 | 5940 | macros/luatex/generic/luatexja/src/ltj-lotf_aux.lua
2021/06/07 | 5850 | macros/luatex/generic/luatexja/src/patches/lltjp-fontspec.sty
2021/06/07 | 580 | macros/luatex/generic/luatexja/tool/blocks2defcharrange.rb
@@ -504,13 +639,10 @@
2021/06/07 | 488 | systems/win32/miktex/setup/rpm/fedora/33/repodata/repomd.xml.asc
2021/06/07 | 488 | systems/win32/miktex/setup/rpm/fedora/28/repodata/repomd.xml.asc
2021/06/07 | 4871 | macros/luatex/generic/luatexja/src/ltj-stack.lua
-2021/06/07 | 48536 | macros/latex/contrib/siunitx/siunitx-table.dtx
2021/06/07 | 484244 | systems/texlive/tlnet/archive/beaulivre.doc.r59496.tar.xz
2021/06/07 | 48217 | macros/luatex/generic/luatexja/src/ltj-jfont.lua
2021/06/07 | 4808 | macros/luatex/generic/luatexja/src/jfm-tmin.lua
2021/06/07 | 477535 | macros/latex/contrib/hyperref/doc/hyperref-doc.html
-2021/06/07 | 475888 | macros/latex/contrib/siunitx/siunitx-table.pdf
-2021/06/07 | 4748 | macros/latex/contrib/siunitx/siunitx-abbreviations.cfg
2021/06/07 | 474471 | systems/win32/miktex/tm/packages/beaulivre__doc.tar.lzma
2021/06/07 | 473 | systems/win32/miktex/setup/deb/dists/xenial/Release.gpg
2021/06/07 | 473 | systems/win32/miktex/setup/deb/dists/stretch/Release.gpg
@@ -520,7 +652,6 @@
2021/06/07 | 4729 | systems/win32/miktex/setup/rpm/fedora/28/repodata/d13712e374a7b5738acb7032611f9ad75a97658007fc969ff793e7d23359d11e-primary.xml.gz
2021/06/07 | 4701 | systems/win32/miktex/setup/rpm/opensuse/15/repodata/0ce10d329dec85a8cf717ba76dc52ea45e1f1f364ff30178628d7e73b9fdad06-primary.xml.gz
2021/06/07 | 463525 | macros/latex/contrib/mathcommand.zip
-2021/06/07 | 4629 | macros/latex/contrib/siunitx/siunitx-locale.dtx
2021/06/07 | 457434 | macros/luatex/generic/luatexja/doc/ltjsclasses.pdf
2021/06/07 | 4559 | macros/luatex/generic/luatexja/src/addons/luatexja-adjust.sty
2021/06/07 | 452046 | macros/latex/contrib/mathcommand/mathcommand.pdf
@@ -537,7 +668,6 @@
2021/06/07 | 427489 | systems/win32/miktex/tm/packages/simplivre__doc.tar.lzma
2021/06/07 | 4262 | macros/luatex/generic/luatexja/tool/kyoikukanji.txt
2021/06/07 | 4196 | macros/luatex/generic/luatexja/src/patches/lltjp-atbegshi.sty
-2021/06/07 | 41826 | macros/latex/contrib/siunitx/CHANGELOG.md
2021/06/07 | 4094596 | install/macros/latex/contrib/hyperref.tds.zip
2021/06/07 | 405 | macros/luatex/generic/luatexja/src/patches/lltjp-everyshi.sty
2021/06/07 | 402 | systems/win32/miktex/setup/rpm/fedora/33/repodata/3500f67d5adf4e308bce0a1a2854dd56f162bbd10a0f7986bf938b293d68b13b-other.xml.gz
@@ -555,7 +685,6 @@
2021/06/07 | 3748 | macros/luatex/generic/luatexja/src/ltj-compat.lua
2021/06/07 | 373207 | macros/latex/contrib/pythontex/pythontex_gallery.pdf
2021/06/07 | 3693 | macros/luatex/generic/luatexja/src/patches/lltjp-siunitx.sty
-2021/06/07 | 3687 | macros/latex/contrib/siunitx/siunitx.ins
2021/06/07 | 3677 | systems/win32/miktex/setup/rpm/opensuse/15/repodata/c23aad5215ba4666e86aa4b9b3d23492274e1f6525d9719ef3b6dd6650573cda-filelists.xml.gz
2021/06/07 | 366532 | systems/texlive/tlnet/archive/einfart.doc.r59497.tar.xz
2021/06/07 | 357628 | systems/win32/miktex/tm/packages/einfart__doc.tar.lzma
@@ -575,7 +704,6 @@
2021/06/07 | 3368 | systems/texlive/tlnet/archive/einfart.r59497.tar.xz
2021/06/07 | 33461 | macros/luatex/generic/luatexja/src/addons/luatexja-ajmacros.sty
2021/06/07 | 3344 | systems/texlive/tlnet/archive/simplivre.r59499.tar.xz
-2021/06/07 | 33332 | macros/latex/contrib/siunitx/siunitx-compound.dtx
2021/06/07 | 3313 | macros/luatex/generic/luatexja/tool/ltj-unicode-ccfix_make2.pl
2021/06/07 | 3308 | systems/texlive/tlnet/archive/beaulivre.r59496.tar.xz
2021/06/07 | 3304 | systems/texlive/tlnet/archive/lebhart.r59498.tar.xz
@@ -586,16 +714,13 @@
2021/06/07 | 32099 | macros/luatex/generic/luatexja/src/ltj-ruby.lua
2021/06/07 | 317 | macros/luatex/generic/luatexja/tool/otf-AdobeSongStd-Light.txt
2021/06/07 | 31742026 | systems/win32/miktex/setup/deb/pool/universe/m/miktex/miktex_21.6-focal1_amd64.deb
-2021/06/07 | 31738 | macros/latex/contrib/siunitx/siunitx-version-1.cfg
2021/06/07 | 31501598 | systems/win32/miktex/setup/deb/pool/universe/m/miktex/miktex_21.6-stretch1_amd64.deb
2021/06/07 | 314592 | language/bengali/bangla/kalpurush.ttf
2021/06/07 | 31325388 | systems/win32/miktex/setup/deb/pool/universe/m/miktex/miktex_21.6-buster1_amd64.deb
2021/06/07 | 3100 | macros/luatex/generic/luatexja/tool/table_jisx0208.tex
-2021/06/07 | 30792 | macros/latex/contrib/siunitx/siunitx-print.dtx
2021/06/07 | 30761292 | systems/win32/miktex/setup/deb/pool/universe/m/miktex/miktex_21.6-xenial1_amd64.deb
2021/06/07 | 3020 | macros/latex/contrib/pythontex/pythontex.py
2021/06/07 | 298448 | macros/latex/contrib/hyperref/doc/hyperref-doc.pdf
-2021/06/07 | 29816 | macros/latex/contrib/siunitx/siunitx-emulation.dtx
2021/06/07 | 2980 | systems/win32/miktex/setup/rpm/fedora/28/repodata/repomd.xml
2021/06/07 | 2978 | systems/win32/miktex/setup/rpm/opensuse/15/repodata/repomd.xml
2021/06/07 | 2975 | systems/win32/miktex/setup/rpm/fedora/33/repodata/repomd.xml
@@ -604,30 +729,23 @@
2021/06/07 | 29479 | systems/win32/miktex/tm/packages/mcf2graph__source.tar.lzma
2021/06/07 | 29181 | macros/luatex/generic/luatexja/src/addons/luatexja-preset.sty
2021/06/07 | 28 | macros/latex/contrib/pythontex/depythontex.bat
-2021/06/07 | 2883 | macros/latex/contrib/siunitx/siunitx-binary.dtx
2021/06/07 | 28733 | macros/latex/contrib/minimalist/minimalist.sty
2021/06/07 | 2858 | macros/latex/contrib/pythontex/pythontex_2to3.py
2021/06/07 | 279968 | macros/latex/contrib/pmdb/docs/pmdb.pdf
2021/06/07 | 27839772 | systems/win32/miktex/source/miktex-21.6.tar.xz
2021/06/07 | 27504 | macros/latex/contrib/pmdb/docs/pmdb-man.tex
-2021/06/07 | 273398 | macros/latex/contrib/siunitx/siunitx-v2.sty
-2021/06/07 | 2713986 | install/macros/latex/contrib/siunitx.tds.zip
2021/06/07 | 26 | macros/latex/contrib/pythontex/pythontex.bat
2021/06/07 | 26934 | macros/luatex/generic/luatexja/src/lltjext.sty
-2021/06/07 | 2676085 | macros/latex/contrib/siunitx.zip
2021/06/07 | 2613 | macros/latex/contrib/pythontex/README
2021/06/07 | 2601 | macros/luatex/generic/luatexja/src/jfm-banjiao.lua
2021/06/07 | 259520 | language/bengali/bangla/vrinda.ttf
2021/06/07 | 2586 | macros/luatex/generic/luatexja/src/jfm-kaiming.lua
2021/06/07 | 2575 | macros/luatex/generic/luatexja/src/jfm-quanjiao.lua
-2021/06/07 | 25717 | macros/latex/contrib/siunitx/siunitx-complex.dtx
2021/06/07 | 25332 | macros/latex/contrib/pmdb/pmdb.dtx
-2021/06/07 | 2511 | macros/latex/contrib/hvfloat/Changes
2021/06/07 | 249532 | language/bengali/bangla/solaimanlipi.ttf
2021/06/07 | 249153 | macros/latex/contrib/pmdb/docs/pmdb-man.pdf
2021/06/07 | 24570280 | systems/win32/miktex/setup/rpm/fedora/28/miktex-21.6-1.fc28.x86_64.rpm
2021/06/07 | 2435 | systems/win32/miktex/setup/rpm/fedora/33/repodata/642bfd476fddfae1a5791dbb0fbc21e1c079d7f073ea40e29a34c4dafbdc32ad-primary.xml.gz
-2021/06/07 | 2426 | macros/latex/contrib/siunitx/siunitx-code.tex
2021/06/07 | 2426770 | macros/latex/contrib/hyperref/doc/hyperref.pdf
2021/06/07 | 23905 | systems/win32/miktex/tm/packages/ran_toks__source.tar.lzma
2021/06/07 | 23791 | systems/win32/miktex/tm/packages/mcf2graph.tar.lzma
@@ -664,7 +782,6 @@
2021/06/07 | 1958 | systems/win32/miktex/setup/deb/dists/buster/universe/binary-amd64/Packages.bz2
2021/06/07 | 19572 | macros/luatex/generic/luatexja/src/ltj-adjust.lua
2021/06/07 | 1954 | systems/win32/miktex/setup/deb/dists/stretch/universe/binary-amd64/Packages.bz2
-2021/06/07 | 19542 | macros/latex/contrib/siunitx/siunitx.dtx
2021/06/07 | 192 | macros/luatex/generic/luatexja/src/jfm-mono.lua
2021/06/07 | 1907 | systems/win32/miktex/setup/deb/dists/xenial/universe/binary-amd64/Packages.bz2
2021/06/07 | 189 | macros/luatex/generic/luatexja/src/patches/lltjp-preview.sty
@@ -682,10 +799,8 @@
2021/06/07 | 1765 | macros/luatex/generic/luatexja/src/ltj-inputbuf.lua
2021/06/07 | 1754 | systems/win32/miktex/setup/rpm/fedora/28/repodata/fb62f775e0bbced476b40a8ba80a29e4820c3242dd06f064d0a68a7830c01fc9-other.sqlite.bz2
2021/06/07 | 1750 | systems/win32/miktex/setup/deb/dists/focal/universe/binary-amd64/Packages.gz
-2021/06/07 | 1729 | macros/latex/contrib/siunitx/siunitx-binary.cfg
2021/06/07 | 166557 | macros/luatex/generic/luatexja/doc/lltjp-geometry.pdf
2021/06/07 | 1654 | systems/win32/miktex/setup/deb/dists/buster/universe/binary-amd64/Packages.gz
-2021/06/07 | 16529 | macros/latex/contrib/siunitx/siunitx-angle.dtx
2021/06/07 | 1644 | systems/win32/miktex/setup/deb/dists/stretch/universe/binary-amd64/Packages.gz
2021/06/07 | 1637 | macros/luatex/generic/luatexja/src/addons/luatexja-fontspec.sty
2021/06/07 | 1635 | macros/latex/contrib/bjfuthesis/README.md
@@ -712,16 +827,12 @@
2021/06/07 | 1509 | macros/latex/contrib/mathcommand/makefile
2021/06/07 | 1507 | systems/win32/miktex/setup/deb/dists/focal/Release
2021/06/07 | 14873 | systems/win32/miktex/setup/rpm/fedora/33/repodata/c9a274790ecc1370eec24d735d6b6533c9036a5fa998012ba4fc8c16116175d3-filelists.sqlite.bz2
-2021/06/07 | 1485621 | macros/latex/contrib/siunitx/siunitx-code.pdf
2021/06/07 | 14709 | macros/luatex/generic/luatexja/src/patches/lltjp-listings.sty
-2021/06/07 | 14625290 | macros/latex/contrib/hvfloat.zip
2021/06/07 | 145804 | macros/latex/contrib/bjfuthesis/example/contents/mission-statement.pdf
-2021/06/07 | 145224 | macros/latex/contrib/siunitx/siunitx.tex
2021/06/07 | 14517 | macros/luatex/generic/luatexja/src/ltj-rmlgbm.lua
2021/06/07 | 14515 | macros/latex/contrib/hyperref/doc/hyperref-doc.css
2021/06/07 | 144872836 | systems/win32/w32tex/context.tar.xz
2021/06/07 | 1443 | macros/latex/contrib/pmdb/examples/tst-qzdb.tex
-2021/06/07 | 14351 | macros/latex/contrib/siunitx/siunitx-quantity.dtx
2021/06/07 | 142377 | macros/latex/contrib/pythontex/pythontex3.py
2021/06/07 | 142373 | macros/latex/contrib/pythontex/pythontex2.py
2021/06/07 | 1397 | macros/luatex/generic/luatexja/tool/ivslist.tex
@@ -749,7 +860,6 @@
2021/06/07 | 116367 | macros/latex/contrib/hvfloat/doc/hvfloat.tex
2021/06/07 | 11591 | systems/win32/miktex/tm/packages/beaulivre__source.tar.lzma
2021/06/07 | 11506 | macros/luatex/generic/luatexja/src/jfm-ujisv.lua
-2021/06/07 | 114975 | macros/latex/contrib/siunitx/siunitx-number.dtx
2021/06/07 | 11335 | macros/luatex/generic/luatexja/tool/unicodeBlocks.tex
2021/06/07 | 1130 | macros/luatex/generic/luatexja/tool/function_uax50.lua
2021/06/07 | 11306 | systems/win32/miktex/tm/packages/einfart__source.tar.lzma
@@ -770,7 +880,6 @@
2021/06/07 | 10535233 | macros/latex/contrib/bjfuthesis.zip
2021/06/07 | 10516 | systems/win32/miktex/setup/rpm/fedora/33/repodata/19418e6de1b23ce51fb1efd752126fcd472c22c2e7ccbb9388758f94404680fe-filelists.xml.gz
2021/06/07 | 101118 | macros/latex/contrib/minimalist.zip
-2021/06/07 | 10106 | macros/latex/contrib/siunitx/siunitx-abbreviation.dtx
2021/06/07 | 1006 | macros/latex/contrib/hyperref/doc/hyperref-doc4.html
2021/06/07 | 1002 | language/bengali/bangla/README
2021/06/06 | 9960 | macros/unicodetex/latex/simplivre/simplivre.cls
@@ -823,7 +932,6 @@
2021/06/06 | 72145 | systems/win32/miktex/tm/packages/miktex-ps2pk-bin-x64-2.9.tar.lzma
2021/06/06 | 71866 | systems/win32/miktex/tm/packages/miktex-freeglut-bin-2.9.tar.lzma
2021/06/06 | 715601 | systems/win32/miktex/tm/packages/pgf.tar.lzma
-2021/06/06 | 7113219 | macros/latex/contrib/hvfloat/doc/hvfloat.pdf
2021/06/06 | 70431 | systems/win32/miktex/tm/packages/miktex-web-bin-x64-2.9.tar.lzma
2021/06/06 | 7038 | systems/win32/miktex/tm/packages/pxbase__source.tar.lzma
2021/06/06 | 702887 | systems/win32/miktex/tm/packages/elhyphen__doc.tar.lzma
@@ -910,7 +1018,6 @@
2021/06/06 | 509727 | systems/win32/miktex/doc/miktex.pdf
2021/06/06 | 503548 | macros/unicodetex/latex/beaulivre.zip
2021/06/06 | 50151 | systems/win32/miktex/tm/packages/miktex-bibarts-bin-2.9.tar.lzma
-2021/06/06 | 50084804 | systems/win32/w32tex/ltxpkgs.tar.xz
2021/06/06 | 499290 | systems/win32/miktex/tm/packages/hyph-utf8__doc.tar.lzma
2021/06/06 | 4977 | systems/win32/miktex/tm/packages/atbegshi.tar.lzma
2021/06/06 | 49641 | systems/win32/miktex/tm/packages/amsfonts__source.tar.lzma
@@ -990,7 +1097,6 @@
2021/06/06 | 3368 | systems/texlive/tlnet/archive/eq-pin2corr.r59477.tar.xz
2021/06/06 | 33607 | systems/win32/miktex/tm/packages/miktex-uriparser-bin-x64-2.9.tar.lzma
2021/06/06 | 33542 | systems/win32/miktex/tm/packages/miktex-upmendex-bin.tar.lzma
-2021/06/06 | 332332 | systems/texlive/tlnet/archive/dvipdfmx.win32.r59468.tar.xz
2021/06/06 | 3307 | language/japanese/pxjahyper/pxjahyper-enc.sty
2021/06/06 | 330463 | systems/win32/miktex/tm/packages/miktex-cairo-bin-2.9.tar.lzma
2021/06/06 | 32670 | systems/win32/miktex/tm/packages/miktex-chktex-bin-2.9.tar.lzma
@@ -1067,7 +1173,6 @@
2021/06/06 | 23852 | language/japanese/pxjahyper/pxjahyper-ajm.def
2021/06/06 | 238357 | macros/unicodetex/latex/einfart/einfart-doc-cn.pdf
2021/06/06 | 2360 | macros/latex/contrib/ran_toks/README.md
-2021/06/06 | 23539312 | systems/win32/w32tex/cjkzr.tar.xz
2021/06/06 | 23524 | systems/win32/miktex/tm/packages/enctex.tar.lzma
2021/06/06 | 2341340 | systems/win32/miktex/tm/packages/amsmath__doc.tar.lzma
2021/06/06 | 2339942 | systems/win32/miktex/tm/packages/profcollege__doc.tar.lzma
@@ -1081,7 +1186,6 @@
2021/06/06 | 22551 | macros/unicodetex/latex/beaulivre/beaulivre-doc-en.tex
2021/06/06 | 223763 | systems/win32/miktex/tm/packages/latex-firstaid-dev__doc.tar.lzma
2021/06/06 | 223582 | systems/win32/miktex/tm/packages/latex-firstaid__doc.tar.lzma
-2021/06/06 | 22326492 | systems/win32/w32tex/pdftex-w32.tar.xz
2021/06/06 | 22323 | systems/win32/miktex/tm/packages/tabularray.tar.lzma
2021/06/06 | 22316 | systems/texlive/tlnet/archive/tabularray.r59482.tar.xz
2021/06/06 | 223000 | systems/texlive/tlnet/archive/latex-firstaid-dev.doc.r59474.tar.xz
@@ -1387,15 +1491,12 @@
2021/06/05 | 470 | macros/latex/contrib/bmstu-iu8/README.md
2021/06/05 | 468043 | macros/latex-dev/base/latexchanges.pdf
2021/06/05 | 467521 | systems/win32/miktex/tm/packages/todonotes.tar.lzma
-2021/06/05 | 4667000 | systems/win32/w32tex/dvipdfm-w32.tar.xz
2021/06/05 | 462567 | macros/latex/contrib/nicematrix/nicematrix-french.pdf
-2021/06/05 | 4552032 | systems/win32/w32tex/dvipsk-w32.tar.xz
2021/06/05 | 454808 | macros/latex-dev/base/ltnews29.pdf
2021/06/05 | 454662 | macros/latex-dev/required/amsmath/testmath.pdf
2021/06/05 | 45245 | macros/latex-dev/base/ltspace.dtx
2021/06/05 | 44724 | macros/latex-dev/base/ltfinal.dtx
2021/06/05 | 44409 | macros/latex-dev/base/latexrelease.dtx
-2021/06/05 | 439816 | systems/win32/w32tex/mftools.tar.xz
2021/06/05 | 4390 | macros/latex-dev/base/ec.ins
2021/06/05 | 43867 | macros/latex-dev/base/ltboxes.dtx
2021/06/05 | 43636 | macros/latex-dev/base/cmfonts.fdd
@@ -1973,7 +2074,6 @@
2021/06/03 | 802 | support/texlab/src/syntax/bibtex.rs
2021/06/03 | 786 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__acroynm_reference_options.snap
2021/06/03 | 785 | support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__entry_two_fields_incomplete.snap
-2021/06/03 | 7800 | systems/win32/miktex/tm/packages/xintsession.tar.lzma
2021/06/03 | 776 | support/texlab/tests/integration/snapshots/integration__completion__latex__citation_multi_word.snap
2021/06/03 | 772 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__caption_figure.snap
2021/06/03 | 76 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__lexer__tests__empty.snap
@@ -2361,7 +2461,6 @@
2021/06/03 | 13710 | macros/latex/contrib/tuda-ci/tex/tudaleaflet.cls
2021/06/03 | 1365 | support/texlab/tests/integration/snapshots/integration__workspace_symbol__filter_type_section.snap
2021/06/03 | 1352244 | systems/texlive/tlnet/archive/hep-paper.doc.r59436.tar.xz
-2021/06/03 | 130738976 | systems/win32/w32tex/web2c-lib.tar.xz
2021/06/03 | 1297 | macros/generic/expkv-cs/README.md
2021/06/03 | 1286 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__environment_nested_missing_braces.snap
2021/06/03 | 1282 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__structure_enum_item.snap
@@ -2404,7 +2503,6 @@
2021/06/03 | 1051 | support/texlab/tests/integration/snapshots/integration__document_symbol__section_flat.snap
2021/06/03 | 1050 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__class_include_options.snap
2021/06/03 | 10493584 | systems/win32/miktex/tm/packages/reledmac.tar.lzma
-2021/06/03 | 1049268 | systems/win32/miktex/tm/packages/keyfloat.tar.lzma
2021/06/03 | 1048 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__package_include_options.snap
2021/06/03 | 104723 | macros/latex/contrib/ocgx2/ocgx2.sty
2021/06/03 | 10438 | support/texlab/src/features/semantic/bibtex.rs
@@ -2418,826 +2516,3 @@
2021/06/03 | 10078 | macros/latex/contrib/tuda-ci/tex/beamerthemeTUDa-mecheng.sty
2021/06/03 | 10060 | systems/texlive/tlnet/archive/biblatex-cv.r59433.tar.xz
2021/06/03 | 1005 | support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__entry_complete_parens.snap
-2021/06/02 | 99 | macros/latex/base/ltpara-code.tex
-2021/06/02 | 999 | graphics/circuit_macros/examples/Fuses.m4
-2021/06/02 | 999 | graphics/circuit_macros/doc/FusesMan.m4
-2021/06/02 | 991 | graphics/circuit_macros/examples/Byte.m4
-2021/06/02 | 988 | graphics/circuit_macros/examples/svg/VariableSVG.m4
-2021/06/02 | 9840 | graphics/circuit_macros/examples/tubedefs.m4
-2021/06/02 | 980 | graphics/circuit_macros/examples/Emarrows.m4
-2021/06/02 | 980 | graphics/circuit_macros/doc/EmarrowsMan.m4
-2021/06/02 | 9809 | macros/latex/base/ltnews21.tex
-2021/06/02 | 9752 | graphics/circuit_macros/examples/svg/tstSVG.htmx
-2021/06/02 | 973559 | graphics/circuit_macros/doc/Circuit_macros.pdf
-2021/06/02 | 970 | graphics/circuit_macros/examples/svg/ex15SVG.m4
-2021/06/02 | 960 | graphics/circuit_macros/doc/Flowdiag.m4
-2021/06/02 | 959 | graphics/circuit_macros/examples/svg/FusesSVG.m4
-2021/06/02 | 9583 | macros/latex/base/format.ins
-2021/06/02 | 9562 | macros/latex/base/ltcntrl.dtx
-2021/06/02 | 95156 | graphics/circuit_macros/examples/mf/cct.mf
-2021/06/02 | 947 | graphics/circuit_macros/examples/svg/QuantumSVG.m4
-2021/06/02 | 947 | graphics/circuit_macros/examples/squiggle.m4
-2021/06/02 | 944 | graphics/circuit_macros/doc/VariableMan.m4
-2021/06/02 | 9425 | graphics/circuit_macros/doc/ShiftR.tex
-2021/06/02 | 9400 | macros/latex/base/syntonly.dtx
-2021/06/02 | 937 | graphics/circuit_macros/examples/svg/ByteSVG.m4
-2021/06/02 | 9373 | macros/latex/base/preload.dtx
-2021/06/02 | 932 | graphics/circuit_macros/examples/Variable.m4
-2021/06/02 | 925 | graphics/circuit_macros/examples/svg/CapacitorsSVG.m4
-2021/06/02 | 921 | graphics/circuit_macros/examples/svg/MoreTableSVG.m4
-2021/06/02 | 918 | graphics/circuit_macros/examples/Quantum.m4
-2021/06/02 | 90917 | macros/latex/base/fntguide.tex
-2021/06/02 | 9080 | graphics/circuit_macros/examples/Makefile
-2021/06/02 | 9068 | macros/latex/base/lppl-1-0.txt
-2021/06/02 | 905 | graphics/circuit_macros/examples/birds.m4
-2021/06/02 | 90524 | macros/luatex/latex/lua-typo/source/lua-typo.dtx
-2021/06/02 | 90126 | macros/latex/base/lttextcomp.dtx
-2021/06/02 | 89927 | macros/latex/base/utf8ienc.dtx
-2021/06/02 | 89718 | macros/latex/base/slides.dtx
-2021/06/02 | 893 | graphics/circuit_macros/examples/MoreTable.m4
-2021/06/02 | 893 | graphics/circuit_macros/doc/MoreTableMan.m4
-2021/06/02 | 893291 | graphics/circuit_macros/examples/examples.pdf
-2021/06/02 | 886 | graphics/circuit_macros/examples/svg/quickSVG.m4
-2021/06/02 | 8863 | macros/latex/base/ltnews17.tex
-2021/06/02 | 8736 | macros/latex/base/ltthm.dtx
-2021/06/02 | 865 | graphics/circuit_macros/examples/ex18.m4
-2021/06/02 | 864 | graphics/circuit_macros/examples/svg/ResistorsSVG.m4
-2021/06/02 | 8631 | macros/latex/base/oldlfont.dtx
-2021/06/02 | 85915 | graphics/circuit_macros/doc/defines.tex
-2021/06/02 | 85865 | macros/latex/base/ltdefns.dtx
-2021/06/02 | 85790 | graphics/circuit_macros/libgen.m4
-2021/06/02 | 855 | graphics/circuit_macros/examples/svg/ex03SVG.m4
-2021/06/02 | 8531 | macros/latex/base/source2edoc.cls
-2021/06/02 | 8496 | macros/latex/base/texpert.txt
-2021/06/02 | 843759 | macros/latex/required/babel/base/babel.pdf
-2021/06/02 | 8372 | graphics/circuit_macros/examples/exp.m4
-2021/06/02 | 835 | graphics/circuit_macros/doc/Opto.m4
-2021/06/02 | 831 | graphics/circuit_macros/doc/GroundsMan.m4
-2021/06/02 | 828 | graphics/circuit_macros/examples/Grounds.m4
-2021/06/02 | 8259 | macros/latex/base/ltnews.tex
-2021/06/02 | 818625 | macros/latex/base/ltshipout-code.pdf
-2021/06/02 | 812 | graphics/circuit_macros/doc/ResistorsMan.m4
-2021/06/02 | 810 | graphics/circuit_macros/examples/svg/GroundsSVG.m4
-2021/06/02 | 807 | graphics/circuit_macros/examples/Resistors.m4
-2021/06/02 | 80670 | macros/latex/base/ltfssbas.dtx
-2021/06/02 | 801 | graphics/circuit_macros/doc/Potentiometers.m4
-2021/06/02 | 8006 | graphics/circuit_macros/examples/svg/controlSVG.m4
-2021/06/02 | 795324 | macros/latex/base/ltfilehook-code.pdf
-2021/06/02 | 793 | graphics/circuit_macros/examples/svg/CountingSVG.m4
-2021/06/02 | 785758 | macros/latex/required/babel/base/locale.zip
-2021/06/02 | 783 | graphics/circuit_macros/doc/Oblique.m4
-2021/06/02 | 78305 | macros/latex/base/ltshipout.dtx
-2021/06/02 | 777 | graphics/circuit_macros/examples/Arrester.m4
-2021/06/02 | 774 | graphics/circuit_macros/examples/quick.m4
-2021/06/02 | 774 | graphics/circuit_macros/doc/quick.m4
-2021/06/02 | 7721 | graphics/circuit_macros/examples/shapes.m4
-2021/06/02 | 771 | graphics/circuit_macros/examples/Attention.m4
-2021/06/02 | 76725 | macros/latex/base/ltfssini.dtx
-2021/06/02 | 7670 | graphics/circuit_macros/examples/Chuck.m4
-2021/06/02 | 764 | graphics/circuit_macros/examples/mf/cct.tfm
-2021/06/02 | 7546 | graphics/circuit_macros/examples/svg/RectifiersSVG.m4
-2021/06/02 | 7533 | graphics/circuit_macros/doc/Logic.tex
-2021/06/02 | 7524 | macros/latex/base/ltxguide.cls
-2021/06/02 | 750 | graphics/circuit_macros/examples/Connectors.m4
-2021/06/02 | 7507 | graphics/circuit_macros/examples/svg/shapesSVG.m4
-2021/06/02 | 7503 | graphics/circuit_macros/doc/Headers.tex
-2021/06/02 | 748 | graphics/circuit_macros/examples/svg/Np.m4
-2021/06/02 | 7485 | graphics/circuit_macros/examples/svg/cscSVG.m4
-2021/06/02 | 745 | graphics/circuit_macros/examples/svg/DecoderSVG.m4
-2021/06/02 | 7434 | graphics/circuit_macros/examples/csc.m4
-2021/06/02 | 741 | graphics/circuit_macros/examples/Incleps.m4
-2021/06/02 | 7418 | graphics/circuit_macros/examples/svg/CsourceSVG.m4
-2021/06/02 | 740 | graphics/circuit_macros/examples/SampleFlow.m4
-2021/06/02 | 7392 | macros/latex/required/babel/base/babel.ins
-2021/06/02 | 7325 | macros/latex/base/ltnews20.tex
-2021/06/02 | 7316 | graphics/circuit_macros/doc/Relay.tex
-2021/06/02 | 72479 | macros/latex/base/ltfsstrc.dtx
-2021/06/02 | 7221 | macros/latex/base/exscale.dtx
-2021/06/02 | 7203 | graphics/circuit_macros/examples/svg/lcctSVG.m4
-2021/06/02 | 7200 | macros/latex/base/sample2e.tex
-2021/06/02 | 715 | graphics/circuit_macros/examples/svg/ConnectorsSVG.m4
-2021/06/02 | 715 | graphics/circuit_macros/examples/psfrag/examplespsfrag.tex
-2021/06/02 | 7127 | graphics/circuit_macros/examples/lcct.m4
-2021/06/02 | 7109 | macros/latex/base/alltt.dtx
-2021/06/02 | 709 | graphics/circuit_macros/examples/Inclpdf.m4
-2021/06/02 | 709939 | macros/latex/required/babel/base/babel.dtx
-2021/06/02 | 706 | graphics/circuit_macros/psfrag.m4
-2021/06/02 | 7065 | graphics/circuit_macros/examples/control.m4
-2021/06/02 | 703 | graphics/circuit_macros/examples/mpost/README-mpost
-2021/06/02 | 7006 | graphics/circuit_macros/examples/Rectifiers.m4
-2021/06/02 | 693019 | macros/latex/base/ltcmdhooks-code.pdf
-2021/06/02 | 6921624 | systems/win32/w32tex/win64/pdftex-w64.tar.xz
-2021/06/02 | 69050 | macros/latex/base/clsguide.tex
-2021/06/02 | 69007 | macros/latex/base/ltpictur.dtx
-2021/06/02 | 6871 | macros/latex/base/ltnews13.tex
-2021/06/02 | 685 | graphics/circuit_macros/examples/mpost/mptest
-2021/06/02 | 6854 | graphics/circuit_macros/examples/svg/DiniSVG.m4
-2021/06/02 | 6854 | graphics/circuit_macros/examples/Dini.m4
-2021/06/02 | 68435 | macros/latex/base/usrguide.tex
-2021/06/02 | 683789 | macros/latex/base/lthooks-doc.pdf
-2021/06/02 | 682 | graphics/circuit_macros/examples/svg/ujtSVG.m4
-2021/06/02 | 676501 | macros/latex/base/doc.pdf
-2021/06/02 | 6760 | macros/latex/base/slides.ins
-2021/06/02 | 673 | graphics/circuit_macros/examples/ex03.m4
-2021/06/02 | 6714 | macros/latex/base/latexsym.dtx
-2021/06/02 | 664444 | macros/latex/base/ltpara-code.pdf
-2021/06/02 | 660 | graphics/circuit_macros/examples/ujt.m4
-2021/06/02 | 660 | graphics/circuit_macros/doc/ujtMan.m4
-2021/06/02 | 656 | graphics/circuit_macros/examples/Zcos.m4
-2021/06/02 | 655 | graphics/circuit_macros/examples/Decoder.m4
-2021/06/02 | 6550 | graphics/circuit_macros/doc/Conn.tex
-2021/06/02 | 654 | graphics/circuit_macros/examples/diamond.m4
-2021/06/02 | 6501 | graphics/circuit_macros/examples/svg/EscherSVG.m4
-2021/06/02 | 6498 | graphics/circuit_macros/examples/Escher.m4
-2021/06/02 | 64748 | macros/latex/base/ltluatex.dtx
-2021/06/02 | 645 | graphics/circuit_macros/examples/Floor.m4
-2021/06/02 | 64171 | macros/luatex/latex/lua-typo/doc/lua-typo-fr.pdf
-2021/06/02 | 6413 | graphics/circuit_macros/examples/svg/CanLogicSVG.m4
-2021/06/02 | 63 | graphics/circuit_macros/examples/svg/local_init.m4
-2021/06/02 | 6371 | graphics/circuit_macros/examples/CanLogic.m4
-2021/06/02 | 6362 | macros/latex/base/newlfont.dtx
-2021/06/02 | 63283 | macros/latex/base/letter.dtx
-2021/06/02 | 63255 | macros/latex/base/ltfilehook.dtx
-2021/06/02 | 6273 | macros/latex/base/ltnews14.tex
-2021/06/02 | 6243 | graphics/circuit_macros/examples/ASME_Y14-5.m4
-2021/06/02 | 6216 | graphics/circuit_macros/examples/svg/LgateSVG.m4
-2021/06/02 | 6160 | macros/latex/base/ltpar.dtx
-2021/06/02 | 6160 | graphics/circuit_macros/examples/Plate.m4
-2021/06/02 | 6153 | graphics/circuit_macros/examples/svg/PlateSVG.m4
-2021/06/02 | 614 | graphics/circuit_macros/doc/BigResistor.m4
-2021/06/02 | 61425 | macros/latex/base/ltfssdcl.dtx
-2021/06/02 | 609 | graphics/circuit_macros/examples/svg/diamondSVG.m4
-2021/06/02 | 6067 | graphics/circuit_macros/doc/Contacts.tex
-2021/06/02 | 60326 | macros/latex/base/fontdef.dtx
-2021/06/02 | 6016 | systems/texlive/tlnet/archive/xintsession.r59426.tar.xz
-2021/06/02 | 6003 | graphics/circuit_macros/examples/CSlight.m4
-2021/06/02 | 5970122 | fonts/libertinust1math.zip
-2021/06/02 | 5969 | graphics/circuit_macros/examples/xfig/xfiglib.m4
-2021/06/02 | 591 | graphics/circuit_macros/examples/test.m4
-2021/06/02 | 5917 | macros/latex/base/latexrelease.ins
-2021/06/02 | 5890 | graphics/circuit_macros/examples/Csource.m4
-2021/06/02 | 58703 | macros/latex/base/ltmiscen.dtx
-2021/06/02 | 5864 | macros/latex/base/ltidxglo.dtx
-2021/06/02 | 58556 | macros/latex/base/ltfssaxes.dtx
-2021/06/02 | 5847 | graphics/circuit_macros/examples/svg/GeometrySVG.m4
-2021/06/02 | 5839 | macros/latex/base/ltnews15.tex
-2021/06/02 | 580624 | systems/texlive/tlnet/archive/l3kernel.source.r59425.tar.xz
-2021/06/02 | 5776 | macros/latex/base/ltnews16.tex
-2021/06/02 | 5714 | macros/latex/base/inputenc.ins
-2021/06/02 | 56 | graphics/circuit_macros/doc/opampex.m4
-2021/06/02 | 5695 | macros/latex/base/ltnews08.tex
-2021/06/02 | 5659 | macros/latex/base/ltnews10.tex
-2021/06/02 | 564572 | macros/latex/base/ltshipout-doc.pdf
-2021/06/02 | 5608 | macros/latex/base/ltnews05.tex
-2021/06/02 | 560166 | macros/latex/base/ltpara-doc.pdf
-2021/06/02 | 5545 | graphics/circuit_macros/doc/Bip.tex
-2021/06/02 | 5529 | macros/latex/base/ltnews11.tex
-2021/06/02 | 551 | graphics/circuit_macros/examples/Counting.m4
-2021/06/02 | 5514 | macros/latex/base/graphpap.dtx
-2021/06/02 | 55087 | macros/latex/base/ltfiles.dtx
-2021/06/02 | 5506 | macros/latex/base/ltnews27.tex
-2021/06/02 | 5506 | macros/latex/base/ltnews04.tex
-2021/06/02 | 5502 | graphics/circuit_macros/doc/Emarrows.tex
-2021/06/02 | 550002 | macros/latex/base/classes.pdf
-2021/06/02 | 5486 | graphics/circuit_macros/examples/graysurf.m4
-2021/06/02 | 5473 | macros/latex/base/ltnews25.tex
-2021/06/02 | 5469 | graphics/circuit_macros/examples/svg/graysurfSVG.m4
-2021/06/02 | 54680 | macros/latex/base/ltfloat.dtx
-2021/06/02 | 546162 | macros/latex/base/ltnews32.pdf
-2021/06/02 | 545 | graphics/circuit_macros/examples/svg/RotboxSVG.m4
-2021/06/02 | 545883 | macros/latex/base/ltfilehook-doc.pdf
-2021/06/02 | 5425 | macros/latex/base/ltnews07.tex
-2021/06/02 | 5412 | graphics/circuit_macros/examples/svg/roseSVG.m4
-2021/06/02 | 5400 | macros/latex/base/ltnews12.tex
-2021/06/02 | 5390 | macros/latex/base/ltnews06.tex
-2021/06/02 | 538 | graphics/circuit_macros/examples/svg/FontsSVG.m4
-2021/06/02 | 538 | graphics/circuit_macros/examples/svg/AmpTableSVG.m4
-2021/06/02 | 5365 | graphics/circuit_macros/examples/svg/fetSVG.m4
-2021/06/02 | 535 | graphics/circuit_macros/doc/Tline.m4
-2021/06/02 | 532 | graphics/circuit_macros/examples/svg/NLGSVG.m4
-2021/06/02 | 53199 | macros/latex/base/ltplain.dtx
-2021/06/02 | 5315 | graphics/circuit_macros/doc/fetMan.m4
-2021/06/02 | 5311 | graphics/circuit_macros/examples/fet.m4
-2021/06/02 | 5293 | macros/latex/base/ltnews09.tex
-2021/06/02 | 5283 | macros/latex/base/ltnews02.tex
-2021/06/02 | 52813 | macros/latex/base/encguide.tex
-2021/06/02 | 5279900 | systems/texlive/tlnet/archive/tools.doc.r59424.tar.xz
-2021/06/02 | 5276053 | macros/latex/base/source2e.pdf
-2021/06/02 | 5273 | macros/latex/base/cmextra.ins
-2021/06/02 | 526312 | macros/latex/base/ltnews31.pdf
-2021/06/02 | 52578 | macros/latex/base/lb2.err
-2021/06/02 | 5246 | macros/latex/base/ltnews01.tex
-2021/06/02 | 522411 | macros/latex/base/ltnews33.pdf
-2021/06/02 | 52212 | systems/texlive/tlnet/archive/graphics.source.r59424.tar.xz
-2021/06/02 | 5200 | macros/latex/base/ltnews03.tex
-2021/06/02 | 518 | graphics/circuit_macros/examples/Rotbox.m4
-2021/06/02 | 5171 | graphics/circuit_macros/examples/svg/FlowSVG.m4
-2021/06/02 | 5137 | graphics/circuit_macros/doc/NPDT.tex
-2021/06/02 | 511855 | macros/latex/base/ltnews30.pdf
-2021/06/02 | 5106 | graphics/circuit_macros/examples/svg/Makefile
-2021/06/02 | 50 | graphics/circuit_macros/doc/bitr.m4
-2021/06/02 | 5041 | macros/latex/base/latexsym.ins
-2021/06/02 | 503186 | macros/latex/base/docstrip.pdf
-2021/06/02 | 499 | graphics/circuit_macros/examples/NLG.m4
-2021/06/02 | 499 | graphics/circuit_macros/doc/NLGMan.m4
-2021/06/02 | 4964 | graphics/circuit_macros/doc/Multiplexer.tex
-2021/06/02 | 4950 | macros/latex/base/lthyphen.dtx
-2021/06/02 | 494 | graphics/circuit_macros/examples/AmpTable.m4
-2021/06/02 | 494 | graphics/circuit_macros/doc/AmpTableMan.m4
-2021/06/02 | 493957 | macros/latex/base/fntguide.pdf
-2021/06/02 | 489 | graphics/circuit_macros/examples/Koch.m4
-2021/06/02 | 48746 | macros/latex/base/ltpara.dtx
-2021/06/02 | 483 | graphics/circuit_macros/doc/eboxdims.m4
-2021/06/02 | 482 | graphics/circuit_macros/examples/clock.m4
-2021/06/02 | 4828 | graphics/circuit_macros/doc/Makefile
-2021/06/02 | 4817 | graphics/circuit_macros/doc/Demultiplexer.tex
-2021/06/02 | 479331 | macros/latex/base/ltcmdhooks-doc.pdf
-2021/06/02 | 47901 | macros/latex/base/lttab.dtx
-2021/06/02 | 4789 | graphics/circuit_macros/doc/Fuses.tex
-2021/06/02 | 47795 | graphics/circuit_macros/liblog.m4
-2021/06/02 | 4762 | macros/latex/base/ltlength.dtx
-2021/06/02 | 4751 | graphics/circuit_macros/examples/Shaky.m4
-2021/06/02 | 4751 | graphics/circuit_macros/examples/Flow.m4
-2021/06/02 | 474 | macros/latex/required/firstaid/README.md
-2021/06/02 | 4683 | graphics/circuit_macros/examples/psfrag/Makefile
-2021/06/02 | 468043 | macros/latex/base/latexchanges.pdf
-2021/06/02 | 4666 | graphics/circuit_macros/doc/Nport.tex
-2021/06/02 | 464 | graphics/circuit_macros/examples/tsttikz.tex
-2021/06/02 | 4638 | graphics/circuit_macros/examples/Ball.m4
-2021/06/02 | 462 | graphics/circuit_macros/Copying
-2021/06/02 | 4615 | graphics/circuit_macros/examples/mf/font.m4
-2021/06/02 | 460 | graphics/circuit_macros/examples/debug1.tex
-2021/06/02 | 4569 | graphics/circuit_macros/examples/rose.m4
-2021/06/02 | 454808 | macros/latex/base/ltnews29.pdf
-2021/06/02 | 45323 | graphics/circuit_macros/examples/Incl.eps.gz
-2021/06/02 | 45245 | macros/latex/base/ltspace.dtx
-2021/06/02 | 449 | graphics/circuit_macros/doc/woodchips.m4
-2021/06/02 | 44864 | systems/texlive/tlnet/archive/l3packages.source.r59425.tar.xz
-2021/06/02 | 44724 | macros/latex/base/ltfinal.dtx
-2021/06/02 | 4459 | graphics/circuit_macros/examples/Lyap.m4
-2021/06/02 | 44409 | macros/latex/base/latexrelease.dtx
-2021/06/02 | 442 | graphics/circuit_macros/examples/Wheat.m4
-2021/06/02 | 4390 | macros/latex/base/ec.ins
-2021/06/02 | 43867 | macros/latex/base/ltboxes.dtx
-2021/06/02 | 43636 | macros/latex/base/cmfonts.fdd
-2021/06/02 | 4340 | graphics/circuit_macros/examples/svg/AlogixSVG.m4
-2021/06/02 | 4324 | macros/latex/base/cmfonts.ins
-2021/06/02 | 4313 | graphics/circuit_macros/examples/ex09.m4
-2021/06/02 | 4312 | graphics/circuit_macros/doc/Circuit_macros.bib
-2021/06/02 | 4309 | graphics/circuit_macros/examples/svg/SwitchesSVG.m4
-2021/06/02 | 430996 | macros/latex/base/usrguide.pdf
-2021/06/02 | 4303 | macros/latex/base/ltalloc.dtx
-2021/06/02 | 4289 | graphics/circuit_macros/examples/svg/BtreeSVG.m4
-2021/06/02 | 4277 | graphics/circuit_macros/examples/svg/sldtestsSVG.m4
-2021/06/02 | 42708 | macros/latex/base/changes.old.txt
-2021/06/02 | 4254 | macros/latex/base/newdc.ins
-2021/06/02 | 4247 | graphics/circuit_macros/examples/mpost/Makefile
-2021/06/02 | 42464 | systems/texlive/tlnet/archive/tools.r59424.tar.xz
-2021/06/02 | 42328 | macros/latex/contrib/bjfuthesis/example/figures/recommendation-procedure.pdf
-2021/06/02 | 4221 | macros/latex/base/docstrip.ins
-2021/06/02 | 421 | graphics/circuit_macros/examples/GrayCode.m4
-2021/06/02 | 421 | graphics/circuit_macros/doc/Sinus.m4
-2021/06/02 | 4219 | macros/latex/base/latex209.ins
-2021/06/02 | 4205 | graphics/circuit_macros/examples/Alogix.m4
-2021/06/02 | 419 | graphics/circuit_macros/examples/svg/SixpoleSVG.m4
-2021/06/02 | 419 | graphics/circuit_macros/examples/Sixpole.m4
-2021/06/02 | 418 | graphics/circuit_macros/examples/mpost/tstmpost.tex
-2021/06/02 | 4184 | fonts/newtx/tfm/ntxbmi1.tfm
-2021/06/02 | 41831 | macros/latex/base/doc-v3beta.sty
-2021/06/02 | 4180 | fonts/newtx/tfm/ntxmi0.tfm
-2021/06/02 | 417 | graphics/circuit_macros/examples/svg/SQUIDSVG.m4
-2021/06/02 | 4178 | graphics/circuit_macros/doc/Tgate.tex
-2021/06/02 | 4176 | fonts/newtx/tfm/ntxmi1.tfm
-2021/06/02 | 4176 | fonts/newtx/tfm/ntxbmi0.tfm
-2021/06/02 | 4172 | fonts/newtx/tfm/ntxmi.tfm
-2021/06/02 | 4170 | macros/latex/base/ltnews19.tex
-2021/06/02 | 416 | graphics/circuit_macros/examples/testpdf.tex
-2021/06/02 | 4168 | fonts/newtx/tfm/ntxbmi.tfm
-2021/06/02 | 41248 | macros/latex/contrib/bjfuthesis/example/figures/jwt.pdf
-2021/06/02 | 4119 | graphics/circuit_macros/examples/svg/ex09SVG.m4
-2021/06/02 | 4106337 | fonts/newpx.zip
-2021/06/02 | 409 | graphics/circuit_macros/examples/tst.tex
-2021/06/02 | 409 | graphics/circuit_macros/examples/mpost/examplesmpost.tex
-2021/06/02 | 40970 | macros/latex/base/ltcmdhooks.dtx
-2021/06/02 | 4087 | macros/latex/base/classes.ins
-2021/06/02 | 4079 | macros/latex/base/lablst.tex
-2021/06/02 | 4079 | graphics/circuit_macros/INSTALL
-2021/06/02 | 40795 | macros/latex/base/latexchanges.tex
-2021/06/02 | 404 | graphics/circuit_macros/doc/Series.m4
-2021/06/02 | 402779 | macros/latex/base/clsguide.pdf
-2021/06/02 | 4023 | graphics/circuit_macros/examples/Euro.m4
-2021/06/02 | 4015 | graphics/circuit_macros/doc/SwitchesMan.m4
-2021/06/02 | 4003 | graphics/circuit_macros/examples/svg/InclepsSVG.m4
-2021/06/02 | 3973 | graphics/circuit_macros/examples/Switches.m4
-2021/06/02 | 3960 | macros/latex/base/olddc.ins
-2021/06/02 | 3954 | graphics/circuit_macros/examples/PushPull.m4
-2021/06/02 | 39431 | macros/latex/base/ltmath.dtx
-2021/06/02 | 39092 | fonts/newtx/README
-2021/06/02 | 387 | graphics/circuit_macros/doc/lrarrows.m4
-2021/06/02 | 387987 | macros/latex/base/ltnews28.pdf
-2021/06/02 | 38735 | macros/latex/base/latex209.dtx
-2021/06/02 | 386513 | language/japanese/pxchfon.zip
-2021/06/02 | 3825 | graphics/circuit_macros/examples/svg/recycleSVG.m4
-2021/06/02 | 3825 | graphics/circuit_macros/examples/recycle.m4
-2021/06/02 | 380 | graphics/circuit_macros/examples/SQUID.m4
-2021/06/02 | 38031 | macros/latex/base/ltnews18.pdf
-2021/06/02 | 379735 | macros/latex/base/ltnews26.pdf
-2021/06/02 | 3785 | graphics/circuit_macros/examples/Mixer.m4
-2021/06/02 | 3781 | macros/latex/base/tulm.ins
-2021/06/02 | 3778 | graphics/circuit_macros/examples/svg/PushPullSVG.m4
-2021/06/02 | 376392 | macros/latex/base/changes.txt
-2021/06/02 | 3756 | graphics/circuit_macros/examples/svg/randomSVG.m4
-2021/06/02 | 374051 | macros/latex/base/slides.pdf
-2021/06/02 | 3730 | macros/latex/base/ltlogos.dtx
-2021/06/02 | 3727 | graphics/circuit_macros/examples/random.m4
-2021/06/02 | 371 | graphics/circuit_macros/examples/psfrag/tstpsfrag.tex
-2021/06/02 | 370 | graphics/circuit_macros/examples/snake.m4
-2021/06/02 | 369 | graphics/circuit_macros/doc/sampleIC.m4
-2021/06/02 | 365 | graphics/circuit_macros/examples/rotellipse.m4
-2021/06/02 | 3646 | graphics/circuit_macros/examples/svg/ContactSVG.m4
-2021/06/02 | 3631 | graphics/circuit_macros/examples/svg/wormSVG.m4
-2021/06/02 | 36157 | macros/latex/base/ltlists.dtx
-2021/06/02 | 361477 | macros/latex/base/utf8ienc.pdf
-2021/06/02 | 3567 | graphics/circuit_macros/examples/svg/ButtonsSVG.m4
-2021/06/02 | 353 | graphics/circuit_macros/examples/windows.m4
-2021/06/02 | 353 | graphics/circuit_macros/examples/svg/windows.m4
-2021/06/02 | 35302 | macros/latex/base/ltdirchk.dtx
-2021/06/02 | 3526 | macros/latex/required/babel/base/bbidxglo.dtx
-2021/06/02 | 3522 | graphics/circuit_macros/examples/svg/ex12SVG.m4
-2021/06/02 | 3509 | graphics/circuit_macros/examples/Buttons.m4
-2021/06/02 | 3500 | macros/latex/base/README.md
-2021/06/02 | 3489 | graphics/circuit_macros/examples/svg/MixerSVG.m4
-2021/06/02 | 3473 | graphics/circuit_macros/examples/svg/MCSVG.m4
-2021/06/02 | 34386868 | install/macros/latex/latex-base.tds.zip
-2021/06/02 | 3434 | macros/latex/base/makeindx.ins
-2021/06/02 | 3401 | macros/latex/base/proc.ins
-2021/06/02 | 33911 | macros/latex/base/ltnews33.tex
-2021/06/02 | 3390 | graphics/circuit_macros/examples/svg/ex05SVG.m4
-2021/06/02 | 33897022 | macros/latex/base.zip
-2021/06/02 | 3380 | fonts/newtx/tfm/ntxbmi15.tfm
-2021/06/02 | 337 | graphics/circuit_macros/examples/xfig/Makefile
-2021/06/02 | 3376 | fonts/newtx/tfm/ntxbmi5.tfm
-2021/06/02 | 3372 | macros/latex/base/letter.ins
-2021/06/02 | 3367 | macros/latex/base/ltoutenc.ins
-2021/06/02 | 3346 | graphics/circuit_macros/examples/Windings.m4
-2021/06/02 | 3346 | graphics/circuit_macros/doc/WindingsMan.m4
-2021/06/02 | 3340 | fonts/newtx/tfm/ntxmi17.tfm
-2021/06/02 | 3340 | fonts/newtx/tfm/ntxbmi17.tfm
-2021/06/02 | 3339 | graphics/circuit_macros/examples/ex12.m4
-2021/06/02 | 3338 | macros/latex/base/exscale.ins
-2021/06/02 | 3336 | fonts/newtx/tfm/ntxmi07.tfm
-2021/06/02 | 3336 | fonts/newtx/tfm/ntxbmi7.tfm
-2021/06/02 | 3332 | fonts/newtx/tfm/ntxmi7.tfm
-2021/06/02 | 3332 | fonts/newtx/tfm/ntxbmi07.tfm
-2021/06/02 | 3326 | graphics/circuit_macros/examples/Contact.m4
-2021/06/02 | 3326 | graphics/circuit_macros/doc/ContactMan.m4
-2021/06/02 | 33256 | macros/latex/base/ltnews32.tex
-2021/06/02 | 3321 | graphics/circuit_macros/examples/thyristor.m4
-2021/06/02 | 3321 | graphics/circuit_macros/doc/thyristorMan.m4
-2021/06/02 | 3320 | fonts/newtx/tfm/ntxmi15.tfm
-2021/06/02 | 3312 | fonts/newtx/tfm/ntxmi05.tfm
-2021/06/02 | 3310 | graphics/circuit_macros/examples/svg/thyristorSVG.m4
-2021/06/02 | 3308 | fonts/newtx/tfm/ntxmi5.tfm
-2021/06/02 | 32 | graphics/circuit_macros/examples/Incl.eps.bb
-2021/06/02 | 329 | graphics/circuit_macros/doc/FF.m4
-2021/06/02 | 3290 | graphics/circuit_macros/examples/svg/sfgSVG.m4
-2021/06/02 | 328728 | macros/latex/base/letter.pdf
-2021/06/02 | 3282 | macros/latex/base/bugs.txt
-2021/06/02 | 32648 | macros/latex/base/ltsect.dtx
-2021/06/02 | 32548 | macros/latex/contrib/bjfuthesis/example/figures/use-case.pdf
-2021/06/02 | 325299 | macros/latex/base/usrguide3.pdf
-2021/06/02 | 325289 | macros/latex/base/ltluatex.pdf
-2021/06/02 | 3183 | graphics/circuit_macros/doc/NLG.tex
-2021/06/02 | 318399 | macros/latex/base/ltnews22.pdf
-2021/06/02 | 3181 | macros/latex/base/unpack.ins
-2021/06/02 | 318168 | macros/latex/base/inputenc.pdf
-2021/06/02 | 317 | graphics/circuit_macros/examples/psfrag/README-psfrag.txt
-2021/06/02 | 3175 | graphics/circuit_macros/examples/Blogix.m4
-2021/06/02 | 3091 | graphics/circuit_macros/examples/svg/TtreeSVG.m4
-2021/06/02 | 30456 | macros/latex/base/ltnews31.tex
-2021/06/02 | 3000 | graphics/circuit_macros/doc/Circuit_macros.tex
-2021/06/02 | 2997 | macros/luatex/latex/lua-typo/doc/lua-typo-demo.tex
-2021/06/02 | 2994 | graphics/circuit_macros/examples/svg/WindingsSVG.m4
-2021/06/02 | 29923 | macros/latex/base/usrguide3.tex
-2021/06/02 | 2989 | graphics/circuit_macros/examples/svg/AutoencoderSVG.m4
-2021/06/02 | 2986 | graphics/circuit_macros/examples/MC.m4
-2021/06/02 | 29772 | graphics/circuit_macros/examples/Incl.pdf
-2021/06/02 | 297070 | macros/latex/base/ltnews20.pdf
-2021/06/02 | 292317 | macros/latex/base/cmfonts.pdf
-2021/06/02 | 29191 | macros/latex/base/ltfntcmd.dtx
-2021/06/02 | 29183 | macros/context/contrib/context-vim.zip
-2021/06/02 | 2912 | graphics/circuit_macros/doc/Workflow.m4
-2021/06/02 | 290495 | macros/latex/base/latexrelease.pdf
-2021/06/02 | 2896 | macros/latex/base/syntonly.ins
-2021/06/02 | 2893 | macros/latex/base/nfssfont.ins
-2021/06/02 | 2892 | macros/latex/base/graphpap.ins
-2021/06/02 | 2892 | macros/latex/base/fix-cm.ins
-2021/06/02 | 289245 | macros/latex/base/tlc2.pdf
-2021/06/02 | 2890 | macros/latex/base/alltt.ins
-2021/06/02 | 2888 | macros/latex/base/ifthen.ins
-2021/06/02 | 287672 | macros/latex/base/fix-cm.pdf
-2021/06/02 | 287125 | macros/latex/base/ltnews23.pdf
-2021/06/02 | 2834 | graphics/circuit_macros/postscript.m4
-2021/06/02 | 2817 | graphics/circuit_macros/examples/README-examples
-2021/06/02 | 2814628 | install/macros/latex/required/babel-base.tds.zip
-2021/06/02 | 2799 | graphics/circuit_macros/examples/worm.m4
-2021/06/02 | 2792 | graphics/circuit_macros/examples/OpAmpFilter.m4
-2021/06/02 | 2761 | graphics/circuit_macros/examples/sfg.m4
-2021/06/02 | 2744 | fonts/newtx/vf/ntxbmi.vf
-2021/06/02 | 2740 | macros/latex/required/firstaid/firstaid.ins
-2021/06/02 | 2740 | fonts/newtx/vf/ntxbmi1.vf
-2021/06/02 | 2740 | fonts/newtx/vf/ntxbmi0.vf
-2021/06/02 | 2738 | macros/latex/base/tex2.txt
-2021/06/02 | 2733 | macros/latex/base/ltpageno.dtx
-2021/06/02 | 2720 | graphics/circuit_macros/examples/svg/AudioSVG.m4
-2021/06/02 | 27122 | macros/latex/base/ltxcheck.tex
-2021/06/02 | 2708 | fonts/newtx/vf/ntxbmi17.vf
-2021/06/02 | 2708 | fonts/newtx/vf/ntxbmi15.vf
-2021/06/02 | 2705 | macros/latex/base/idx.tex
-2021/06/02 | 2704 | fonts/newtx/vf/ntxbmi07.vf
-2021/06/02 | 2700 | fonts/newtx/vf/ntxbmi7.vf
-2021/06/02 | 2700 | fonts/newtx/vf/ntxbmi5.vf
-2021/06/02 | 26 | graphics/circuit_macros/doc/DCsymbol.m4
-2021/06/02 | 26 | graphics/circuit_macros/doc/ACsymbol.m4
-2021/06/02 | 269 | graphics/circuit_macros/doc/Loop.m4
-2021/06/02 | 2696 | graphics/circuit_macros/examples/keyval.m4
-2021/06/02 | 2685 | graphics/circuit_macros/examples/svg/ex11SVG.m4
-2021/06/02 | 2674 | graphics/circuit_macros/examples/Planes.m4
-2021/06/02 | 2661 | graphics/circuit_macros/examples/svg/CctTableSVG.m4
-2021/06/02 | 2661 | graphics/circuit_macros/doc/Grounds.tex
-2021/06/02 | 265211 | macros/latex/base/ltnews24.pdf
-2021/06/02 | 2634 | graphics/circuit_macros/examples/Audio.m4
-2021/06/02 | 2634 | graphics/circuit_macros/doc/AudioMan.m4
-2021/06/02 | 2625 | graphics/circuit_macros/examples/svg/ex01SVG.m4
-2021/06/02 | 2612 | fonts/newtx/vf/ntxmi.vf
-2021/06/02 | 2604 | fonts/newtx/vf/ntxmi1.vf
-2021/06/02 | 2604 | fonts/newtx/vf/ntxmi0.vf
-2021/06/02 | 25849 | graphics/circuit_macros/doc/Xform.tex
-2021/06/02 | 2576 | fonts/newtx/vf/ntxmi7.vf
-2021/06/02 | 2576 | fonts/newtx/vf/ntxmi5.vf
-2021/06/02 | 2576 | fonts/newtx/vf/ntxmi17.vf
-2021/06/02 | 2576 | fonts/newtx/vf/ntxmi15.vf
-2021/06/02 | 2576 | fonts/newtx/vf/ntxmi07.vf
-2021/06/02 | 2576 | fonts/newtx/vf/ntxmi05.vf
-2021/06/02 | 25642 | macros/luatex/latex/lua-typo/lua-typo-2021-04-18.sty
-2021/06/02 | 2559 | graphics/circuit_macros/examples/svg/ex08SVG.m4
-2021/06/02 | 2556 | graphics/circuit_macros/examples/ex08.m4
-2021/06/02 | 2551 | graphics/circuit_macros/examples/svg/OptoisoSVG.m4
-2021/06/02 | 2542 | graphics/circuit_macros/examples/brace.m4
-2021/06/02 | 2528 | graphics/circuit_macros/examples/svg/AdderSVG.m4
-2021/06/02 | 2525 | graphics/circuit_macros/examples/svg/CrowSVG.m4
-2021/06/02 | 252432 | macros/latex/base/ltnews27.pdf
-2021/06/02 | 252154 | macros/latex/base/lb2.pdf
-2021/06/02 | 2520 | graphics/circuit_macros/examples/Crow.m4
-2021/06/02 | 2517 | graphics/circuit_macros/examples/Autoencoder.m4
-2021/06/02 | 24911 | graphics/circuit_macros/examples/svg/examplesSVG.htmx
-2021/06/02 | 24726 | graphics/circuit_macros/examples/svg/EEPSVG.m4
-2021/06/02 | 247037 | macros/luatex/latex/lua-typo.zip
-2021/06/02 | 245818 | macros/latex/base/ltnews19.pdf
-2021/06/02 | 244869 | macros/latex/base/ltnews21.pdf
-2021/06/02 | 2443 | graphics/circuit_macros/examples/svg/ex00SVG.m4
-2021/06/02 | 2442 | graphics/circuit_macros/examples/Optoiso.m4
-2021/06/02 | 2441 | graphics/circuit_macros/doc/ujt.tex
-2021/06/02 | 243601 | macros/latex/base/modguide.pdf
-2021/06/02 | 242886 | macros/latex/base/cfgguide.pdf
-2021/06/02 | 24141 | graphics/circuit_macros/examples/svg/UNOSVG.m4
-2021/06/02 | 2412 | graphics/circuit_macros/examples/ex00.m4
-2021/06/02 | 2402 | graphics/circuit_macros/examples/Adder.m4
-2021/06/02 | 24015 | macros/latex/base/lterror.dtx
-2021/06/02 | 239681 | macros/latex/base/cyrguide.pdf
-2021/06/02 | 2389 | graphics/circuit_macros/doc/Dac.m4
-2021/06/02 | 238577 | macros/latex/base/ltxdoc.pdf
-2021/06/02 | 23651 | macros/latex/base/ltnews30.tex
-2021/06/02 | 2362 | graphics/circuit_macros/examples/Jack.m4
-2021/06/02 | 2362 | graphics/circuit_macros/doc/JackMan.m4
-2021/06/02 | 2361 | graphics/circuit_macros/examples/ex11.m4
-2021/06/02 | 23521 | macros/latex/base/fix-cm.dtx
-2021/06/02 | 234008 | macros/latex/base/slifonts.pdf
-2021/06/02 | 233 | graphics/circuit_macros/examples/Ccurve.m4
-2021/06/02 | 233995 | macros/latex/base/proc.pdf
-2021/06/02 | 23386 | macros/latex/base/lppl.tex
-2021/06/02 | 233275 | install/macros/latex/required/latex-firstaid.tds.zip
-2021/06/02 | 2323 | macros/luatex/latex/lua-typo/README.md
-2021/06/02 | 2304 | graphics/circuit_macros/examples/Loglog.m4
-2021/06/02 | 228448 | macros/latex/required/firstaid/latex2e-first-aid-for-external-files.pdf
-2021/06/02 | 2279 | graphics/circuit_macros/examples/ex01.m4
-2021/06/02 | 227884 | systems/texlive/tlnet/archive/tools.source.r59424.tar.xz
-2021/06/02 | 22676 | macros/latex/base/ltcounts.dtx
-2021/06/02 | 2262 | graphics/circuit_macros/examples/Geometry.m4
-2021/06/02 | 22456 | macros/latex/base/cfgguide.tex
-2021/06/02 | 2241 | graphics/circuit_macros/examples/svg/LoglogSVG.m4
-2021/06/02 | 2225 | graphics/circuit_macros/doc/SourcesMan.m4
-2021/06/02 | 221 | graphics/circuit_macros/examples/rotate.tex
-2021/06/02 | 220417 | macros/latex/base/ifthen.pdf
-2021/06/02 | 219 | graphics/circuit_macros/examples/tst1.tex
-2021/06/02 | 219354 | macros/latex/base/ltx3info.pdf
-2021/06/02 | 21890 | macros/latex/required/babel/base/bbcompat.dtx
-2021/06/02 | 218782 | macros/latex/base/nfssfont.pdf
-2021/06/02 | 217 | graphics/circuit_macros/doc/stringdims.m4
-2021/06/02 | 2179 | graphics/circuit_macros/doc/ConnMan.m4
-2021/06/02 | 2178 | graphics/circuit_macros/examples/Conn.m4
-2021/06/02 | 2171 | graphics/circuit_macros/examples/svg/I2LSVG.m4
-2021/06/02 | 2170 | graphics/circuit_macros/examples/ex06.m4
-2021/06/02 | 2165 | graphics/circuit_macros/examples/Sources.m4
-2021/06/02 | 2158 | macros/latex/required/babel/base/README.md
-2021/06/02 | 21576 | systems/texlive/tlnet/archive/l3packages.r59425.tar.xz
-2021/06/02 | 215091 | macros/latex/base/lgc2.pdf
-2021/06/02 | 214710 | macros/latex/base/alltt.pdf
-2021/06/02 | 2140 | systems/texlive/tlnet/archive/xintsession.doc.r59426.tar.xz
-2021/06/02 | 21384 | graphics/circuit_macros/examples/svg/Incl.jpg
-2021/06/02 | 21374 | graphics/circuit_macros/examples/xfig/xfiglib.fig
-2021/06/02 | 212307 | macros/latex/base/exscale.pdf
-2021/06/02 | 2119 | graphics/circuit_macros/examples/Logic.m4
-2021/06/02 | 2119 | graphics/circuit_macros/doc/LogicMan.m4
-2021/06/02 | 2111 | graphics/circuit_macros/examples/svg/ConnSVG.m4
-2021/06/02 | 2099 | graphics/circuit_macros/pstricks.m4
-2021/06/02 | 2097 | graphics/circuit_macros/examples/Ttree.m4
-2021/06/02 | 2086 | graphics/circuit_macros/examples/relaycoil.m4
-2021/06/02 | 2086 | graphics/circuit_macros/doc/relaycoilMan.m4
-2021/06/02 | 2085 | graphics/circuit_macros/pgf.m4
-2021/06/02 | 208359 | macros/latex/base/latexsym.pdf
-2021/06/02 | 2069 | graphics/circuit_macros/examples/svg/relaycoilSVG.m4
-2021/06/02 | 2068 | graphics/circuit_macros/examples/I2L.m4
-2021/06/02 | 2065 | macros/latex/required/firstaid/changes.txt
-2021/06/02 | 2051 | graphics/circuit_macros/examples/svg/JackSVG.m4
-2021/06/02 | 205162 | macros/latex/base/ltnews25.pdf
-2021/06/02 | 20486 | macros/latex/base/lgc2.err
-2021/06/02 | 20469 | macros/latex/base/ltnews.cls
-2021/06/02 | 20418 | graphics/circuit_macros/doc/thyristor.tex
-2021/06/02 | 204063 | macros/latex/base/doc.dtx
-2021/06/02 | 2027 | graphics/circuit_macros/examples/svg/pwrsupplySVG.m4
-2021/06/02 | 2027860 | systems/texlive/tlnet/archive/graphics.doc.r59424.tar.xz
-2021/06/02 | 2018 | graphics/circuit_macros/examples/svg/ex06SVG.m4
-2021/06/02 | 2014 | graphics/circuit_macros/examples/pwrsupply.m4
-2021/06/02 | 2013 | graphics/circuit_macros/doc/HybridPi.m4
-2021/06/02 | 2000 | graphics/circuit_macros/examples/ex21.m4
-2021/06/02 | 1995 | graphics/circuit_macros/doc/Corners.m4
-2021/06/02 | 1992 | graphics/circuit_macros/examples/svg/FourbarSVG.m4
-2021/06/02 | 1985 | graphics/circuit_macros/examples/svg/XORSVG.m4
-2021/06/02 | 1975 | graphics/circuit_macros/doc/FlipFlop.m4
-2021/06/02 | 197187 | macros/latex/base/syntonly.pdf
-2021/06/02 | 1966 | graphics/circuit_macros/examples/svg/DriveSVG.m4
-2021/06/02 | 1966 | graphics/circuit_macros/examples/Drive.m4
-2021/06/02 | 1962 | graphics/circuit_macros/examples/Autologix.m4
-2021/06/02 | 1959 | graphics/circuit_macros/examples/debug2.m4
-2021/06/02 | 1955 | graphics/circuit_macros/examples/svg/ABlogixSVG.m4
-2021/06/02 | 1953 | graphics/circuit_macros/examples/svg/MotorControlSVG.m4
-2021/06/02 | 1953 | graphics/circuit_macros/doc/Buffer.m4
-2021/06/02 | 1940 | graphics/circuit_macros/doc/AmpTable.tex
-2021/06/02 | 1937 | macros/latex/base/minimal.cls
-2021/06/02 | 1931 | graphics/circuit_macros/examples/svg/LogicSVG.m4
-2021/06/02 | 19250 | graphics/circuit_macros/dpictools.pic
-2021/06/02 | 1922 | graphics/circuit_macros/examples/MotorControl.m4
-2021/06/02 | 19176 | graphics/circuit_macros/Licence.txt
-2021/06/02 | 19142 | graphics/circuit_macros/doc/Switches.tex
-2021/06/02 | 1907 | graphics/circuit_macros/examples/svg/SourcesSVG.m4
-2021/06/02 | 1906 | graphics/circuit_macros/examples/venus.m4
-2021/06/02 | 1906 | graphics/circuit_macros/examples/SPM.m4
-2021/06/02 | 19064 | macros/latex/base/ltxdoc.dtx
-2021/06/02 | 1904 | fonts/newtx/tfm/ntxbmi05.tfm
-2021/06/02 | 19040 | macros/latex/base/lppl.txt
-2021/06/02 | 1894 | graphics/circuit_macros/examples/svg/ArrowFnSVG.m4
-2021/06/02 | 18940 | macros/latex/base/ltnews29.tex
-2021/06/02 | 1893 | graphics/circuit_macros/examples/svg/ex16SVG.m4
-2021/06/02 | 1891 | graphics/circuit_macros/examples/svg/ex04SVG.m4
-2021/06/02 | 1882 | graphics/circuit_macros/examples/svg/ex21SVG.m4
-2021/06/02 | 1879 | graphics/circuit_macros/examples/Cruller.m4
-2021/06/02 | 187818 | macros/latex/base/lthooks.dtx
-2021/06/02 | 18770 | fonts/newpx/README
-2021/06/02 | 1875 | graphics/circuit_macros/examples/svg/GrayCodeSVG.m4
-2021/06/02 | 1874 | graphics/circuit_macros/examples/svg/CrullerSVG.m4
-2021/06/02 | 1865 | graphics/circuit_macros/examples/ex16.m4
-2021/06/02 | 1860 | graphics/circuit_macros/doc/bi_trans.m4
-2021/06/02 | 1857 | graphics/circuit_macros/doc/Composite.m4
-2021/06/02 | 1852 | graphics/circuit_macros/examples/Orbits.m4
-2021/06/02 | 18404 | macros/latex/base/nfssfont.dtx
-2021/06/02 | 1837 | graphics/circuit_macros/examples/svg/SchottkySVG.m4
-2021/06/02 | 18303 | macros/latex/base/ifthen.dtx
-2021/06/02 | 18299 | macros/latex/base/ltx3info.tex
-2021/06/02 | 1828 | fonts/newtx/vf/ntxbmi05.vf
-2021/06/02 | 1823 | graphics/circuit_macros/examples/XOR.m4
-2021/06/02 | 1815309 | macros/latex/required/babel/base.zip
-2021/06/02 | 1812 | graphics/circuit_macros/examples/svg/BipSVG.m4
-2021/06/02 | 181066 | macros/latex/contrib/bjfuthesis/example/figures/illustration-of-ripple-sets.png
-2021/06/02 | 180 | macros/latex/base/ltfilehook-doc.tex
-2021/06/02 | 1807932 | systems/texlive/tlnet/archive/l3packages.doc.r59425.tar.xz
-2021/06/02 | 1802 | graphics/circuit_macros/examples/Pconn.m4
-2021/06/02 | 1802 | graphics/circuit_macros/doc/PconnMan.m4
-2021/06/02 | 179 | macros/latex/base/ltshipout-doc.tex
-2021/06/02 | 17959 | macros/latex/required/firstaid/latex2e-first-aid-for-external-files.dtx
-2021/06/02 | 179141 | macros/latex/contrib/biblatex-contrib/biblatex-cv.zip
-2021/06/02 | 177 | macros/latex/base/lthooks-doc.tex
-2021/06/02 | 177 | macros/latex/base/ltcmdhooks-doc.tex
-2021/06/02 | 1778 | graphics/circuit_macros/examples/Schottky.m4
-2021/06/02 | 1776 | graphics/circuit_macros/examples/svg/PconnSVG.m4
-2021/06/02 | 17711 | graphics/circuit_macros/examples/files.tex
-2021/06/02 | 1767 | graphics/circuit_macros/examples/ArrowFn.m4
-2021/06/02 | 175645 | macros/latex/base/ltoutput.dtx
-2021/06/02 | 17495 | macros/latex/base/cyrguide.tex
-2021/06/02 | 174488 | macros/latex/base/ltnews05.pdf
-2021/06/02 | 173 | macros/latex/base/ltpara-doc.tex
-2021/06/02 | 1737 | graphics/circuit_macros/examples/svg/ContactsSVG.m4
-2021/06/02 | 173682 | macros/latex/base/makeindx.pdf
-2021/06/02 | 173323 | macros/latex/base/ltnews13.pdf
-2021/06/02 | 1730 | graphics/circuit_macros/examples/ABlogix.m4
-2021/06/02 | 172278 | macros/latex/base/tlc2.err
-2021/06/02 | 1720 | graphics/circuit_macros/examples/examples.tex
-2021/06/02 | 171777 | graphics/circuit_macros/libcct.m4
-2021/06/02 | 170529 | macros/latex/base/tulm.pdf
-2021/06/02 | 170214 | macros/latex/base/docstrip.dtx
-2021/06/02 | 1699 | graphics/circuit_macros/examples/svg/ex10SVG.m4
-2021/06/02 | 1694 | macros/latex/base/small2e.tex
-2021/06/02 | 169323 | macros/latex/base/graphpap.pdf
-2021/06/02 | 167988 | systems/texlive/tlnet/archive/l3kernel.r59425.tar.xz
-2021/06/02 | 16794 | macros/luatex/latex/lua-typo/doc/lua-typo-demo.pdf
-2021/06/02 | 1668 | graphics/circuit_macros/examples/svg/Banking.m4
-2021/06/02 | 1668 | graphics/circuit_macros/examples/IC10107.m4
-2021/06/02 | 166368 | macros/latex/base/ltnews17.pdf
-2021/06/02 | 165 | graphics/circuit_macros/doc/tranbody.m4
-2021/06/02 | 1654 | graphics/circuit_macros/examples/ex04.m4
-2021/06/02 | 16420 | graphics/circuit_macros/doc/fet.tex
-2021/06/02 | 1640 | graphics/circuit_macros/mpost.m4
-2021/06/02 | 1639 | graphics/circuit_macros/Makefile
-2021/06/02 | 1630 | graphics/circuit_macros/examples/svg/TTLnandSVG.m4
-2021/06/02 | 16309 | graphics/circuit_macros/README
-2021/06/02 | 1624 | graphics/circuit_macros/doc/ParSeries.m4
-2021/06/02 | 16233 | macros/latex/base/modguide.tex
-2021/06/02 | 1619 | graphics/circuit_macros/examples/Bip.m4
-2021/06/02 | 1619 | graphics/circuit_macros/doc/BipMan.m4
-2021/06/02 | 1618 | graphics/circuit_macros/doc/ArrestersMan.m4
-2021/06/02 | 161518 | macros/latex/base/ltnews01.pdf
-2021/06/02 | 161405 | macros/latex/base/ltnews14.pdf
-2021/06/02 | 1612 | graphics/circuit_macros/examples/svg/TimerSVG.m4
-2021/06/02 | 16105 | macros/latex/base/ltbibl.dtx
-2021/06/02 | 1608 | graphics/circuit_macros/examples/ex05.m4
-2021/06/02 | 160521 | macros/latex/base/manual.pdf
-2021/06/02 | 159313 | macros/latex/base/ltnews10.pdf
-2021/06/02 | 1585 | graphics/circuit_macros/examples/Contacts.m4
-2021/06/02 | 1585 | graphics/circuit_macros/doc/ContactsMan.m4
-2021/06/02 | 1575 | graphics/circuit_macros/doc/mplex.m4
-2021/06/02 | 15699 | macros/latex/base/slifonts.fdd
-2021/06/02 | 15625 | macros/latex/base/ltxref.dtx
-2021/06/02 | 156210 | macros/latex/base/classes.dtx
-2021/06/02 | 1559 | graphics/circuit_macros/examples/svg/XformSVG.m4
-2021/06/02 | 1558 | graphics/circuit_macros/examples/TTLnand.m4
-2021/06/02 | 155055 | macros/latex/base/ltnews08.pdf
-2021/06/02 | 1546 | graphics/circuit_macros/examples/svg/Xtest.m4
-2021/06/02 | 15388 | graphics/circuit_macros/doc/Sources.tex
-2021/06/02 | 1529 | graphics/circuit_macros/examples/mf/Makefile
-2021/06/02 | 1526 | graphics/circuit_macros/examples/Xform.m4
-2021/06/02 | 1526 | graphics/circuit_macros/doc/XformMan.m4
-2021/06/02 | 1525 | graphics/circuit_macros/examples/rotatetext.m4
-2021/06/02 | 1521 | graphics/circuit_macros/examples/Coxeter.m4
-2021/06/02 | 1521156 | systems/texlive/tlnet/archive/circuitikz.doc.r59421.tar.xz
-2021/06/02 | 15164 | systems/texlive/tlnet/archive/graphics.r59424.tar.xz
-2021/06/02 | 15104 | macros/latex/base/source2e.tex
-2021/06/02 | 150588 | systems/texlive/tlnet/archive/hvarabic.doc.r59423.tar.xz
-2021/06/02 | 150493 | macros/latex/base/ltnews03.pdf
-2021/06/02 | 150466 | macros/latex/base/ltnews02.pdf
-2021/06/02 | 15033 | graphics/circuit_macros/doc/Pconn.tex
-2021/06/02 | 1492 | graphics/circuit_macros/examples/ex10.m4
-2021/06/02 | 149221 | macros/latex/base/ltoutenc.dtx
-2021/06/02 | 149108 | systems/texlive/tlnet/archive/circuitikz.r59421.tar.xz
-2021/06/02 | 14891 | macros/latex/base/ltnews28.tex
-2021/06/02 | 1485 | graphics/circuit_macros/examples/Demultiplexer.m4
-2021/06/02 | 1485 | graphics/circuit_macros/doc/DemultiplexerMan.m4
-2021/06/02 | 147587 | macros/latex/base/ltnews12.pdf
-2021/06/02 | 1468 | systems/texlive/tlnet/archive/hvarabic.r59423.tar.xz
-2021/06/02 | 1467 | graphics/circuit_macros/examples/Diodes.m4
-2021/06/02 | 1467 | graphics/circuit_macros/doc/DiodesMan.m4
-2021/06/02 | 146533 | macros/latex/base/ltnews16.pdf
-2021/06/02 | 1464 | graphics/circuit_macros/doc/Taps.m4
-2021/06/02 | 146200 | macros/latex/base/webcomp.pdf
-2021/06/02 | 1458 | graphics/circuit_macros/examples/header.tex
-2021/06/02 | 144 | graphics/circuit_macros/doc/Thermal.m4
-2021/06/02 | 1444 | graphics/circuit_macros/examples/svg/ThreeSVG.m4
-2021/06/02 | 1443 | graphics/circuit_macros/examples/Resolver.m4
-2021/06/02 | 14421 | macros/latex/base/lppl-1-2.txt
-2021/06/02 | 143686 | macros/latex/base/ltnews04.pdf
-2021/06/02 | 14341 | macros/latex/base/lppl-1-1.txt
-2021/06/02 | 1433 | graphics/circuit_macros/examples/Opamp.m4
-2021/06/02 | 1433 | graphics/circuit_macros/doc/OpampMan.m4
-2021/06/02 | 1431 | graphics/circuit_macros/examples/svg/RelaySVG.m4
-2021/06/02 | 1429 | graphics/circuit_macros/examples/svg/DiodesSVG.m4
-2021/06/02 | 142909 | macros/latex/base/ltnews06.pdf
-2021/06/02 | 14287 | graphics/circuit_macros/darrow.m4
-2021/06/02 | 142843 | macros/latex/base/ltcmd.dtx
-2021/06/02 | 1419 | graphics/circuit_macros/examples/person.m4
-2021/06/02 | 141843 | graphics/circuit_macros/doc/body.tex
-2021/06/02 | 1406 | graphics/circuit_macros/examples/ShiftR.m4
-2021/06/02 | 1406 | graphics/circuit_macros/doc/ShiftRMan.m4
-2021/06/02 | 1403 | graphics/circuit_macros/examples/svg/MultiplexerSVG.m4
-2021/06/02 | 1400 | graphics/circuit_macros/examples/Multiplexer.m4
-2021/06/02 | 1400 | graphics/circuit_macros/doc/MultiplexerMan.m4
-2021/06/02 | 13920 | macros/latex/base/ltexpl.dtx
-2021/06/02 | 13864 | macros/latex/base/ltvers.dtx
-2021/06/02 | 138442 | macros/luatex/latex/lua-typo/doc/lua-typo.pdf
-2021/06/02 | 13833 | graphics/circuit_macros/doc/Contact.tex
-2021/06/02 | 138044 | macros/latex/base/ltnews07.pdf
-2021/06/02 | 137 | graphics/circuit_macros/doc/opampexbody.m4
-2021/06/02 | 1373 | graphics/circuit_macros/examples/svg/DemultiplexerSVG.m4
-2021/06/02 | 136576 | macros/latex/base/ltclass.dtx
-2021/06/02 | 1358 | graphics/circuit_macros/examples/Crossbar.m4
-2021/06/02 | 1343 | graphics/circuit_macros/examples/svg/InductorsSVG.m4
-2021/06/02 | 1342 | graphics/circuit_macros/examples/Inductors.m4
-2021/06/02 | 1342 | graphics/circuit_macros/doc/InductorsMan.m4
-2021/06/02 | 1341 | macros/latex/base/ltnews18.tex
-2021/06/02 | 13330 | graphics/circuit_macros/examples/Heathkit.m4
-2021/06/02 | 1331 | graphics/circuit_macros/examples/svg/SierpinskiSVG.m4
-2021/06/02 | 1331 | graphics/circuit_macros/examples/Sierpinski.m4
-2021/06/02 | 13301 | macros/latex/base/proc.dtx
-2021/06/02 | 1329 | graphics/circuit_macros/doc/currents.m4
-2021/06/02 | 13264 | graphics/circuit_macros/examples/Tubediags.m4
-2021/06/02 | 132373 | macros/latex/base/lppl.pdf
-2021/06/02 | 131 | graphics/circuit_macros/doc/Axes.m4
-2021/06/02 | 1316472 | macros/latex/base/encguide.pdf
-2021/06/02 | 1313 | graphics/circuit_macros/examples/svg/ShiftRSVG.m4
-2021/06/02 | 130 | graphics/circuit_macros/doc/bitrbody.m4
-2021/06/02 | 130447 | macros/latex/base/ltnews15.pdf
-2021/06/02 | 12 | graphics/circuit_macros/doc/Version.tex
-2021/06/02 | 12946 | macros/latex/base/manual.err
-2021/06/02 | 1291 | graphics/circuit_macros/doc/ConfigC.m4
-2021/06/02 | 129032 | macros/latex/base/ltnews09.pdf
-2021/06/02 | 1287 | graphics/circuit_macros/examples/Three.m4
-2021/06/02 | 12856 | graphics/circuit_macros/CHANGES
-2021/06/02 | 1279 | macros/latex/base/legal.txt
-2021/06/02 | 12765 | graphics/circuit_macros/lib3D.m4
-2021/06/02 | 12711 | graphics/circuit_macros/examples/svg/HeathkitSVG.m4
-2021/06/02 | 1265 | graphics/circuit_macros/examples/svg/HeadersSVG.m4
-2021/06/02 | 1259 | graphics/circuit_macros/examples/Relay.m4
-2021/06/02 | 1259 | graphics/circuit_macros/doc/RelayMan.m4
-2021/06/02 | 1257 | graphics/circuit_macros/doc/ConfigB.m4
-2021/06/02 | 12520 | macros/latex/base/testpage.tex
-2021/06/02 | 12478 | graphics/circuit_macros/examples/svg/TubediagsSVG.m4
-2021/06/02 | 1238 | graphics/circuit_macros/examples/svg/NportSVG.m4
-2021/06/02 | 1230 | graphics/circuit_macros/examples/Antennas.m4
-2021/06/02 | 1230 | graphics/circuit_macros/doc/AntennasMan.m4
-2021/06/02 | 1229 | graphics/circuit_macros/doc/fbfilter.m4
-2021/06/02 | 12224 | macros/latex/base/ltnews24.tex
-2021/06/02 | 12119 | macros/latex/base/tulm.fdd
-2021/06/02 | 1209 | graphics/circuit_macros/examples/svg/ChipsSVG.m4
-2021/06/02 | 12050 | graphics/circuit_macros/doc/Diodes.tex
-2021/06/02 | 1204 | graphics/circuit_macros/examples/svg/ex17SVG.m4
-2021/06/02 | 12006 | graphics/circuit_macros/doc/Jack.tex
-2021/06/02 | 11 | graphics/circuit_macros/doc/test.tex
-2021/06/02 | 1185 | graphics/circuit_macros/boxdims.sty
-2021/06/02 | 1181300 | systems/win32/w32tex/extractpdfmark-w32.tar.xz
-2021/06/02 | 1175 | graphics/circuit_macros/examples/Chips.m4
-2021/06/02 | 1174 | graphics/circuit_macros/examples/PPA.m4
-2021/06/02 | 11593 | graphics/circuit_macros/examples/svg/icsSVG.m4
-2021/06/02 | 11590 | macros/latex/base/ltpage.dtx
-2021/06/02 | 1157 | graphics/circuit_macros/examples/svg/NPDTSVG.m4
-2021/06/02 | 11556 | graphics/circuit_macros/svg.m4
-2021/06/02 | 1151 | graphics/circuit_macros/doc/Darlington.m4
-2021/06/02 | 11426 | graphics/circuit_macros/examples/ics.m4
-2021/06/02 | 1132 | graphics/circuit_macros/examples/Headers.m4
-2021/06/02 | 1132 | graphics/circuit_macros/doc/HeadersMan.m4
-2021/06/02 | 1128 | graphics/circuit_macros/examples/NPDT.m4
-2021/06/02 | 1128 | graphics/circuit_macros/doc/NPDTMan.m4
-2021/06/02 | 11270 | graphics/circuit_macros/examples/FlowchartDefs.m4
-2021/06/02 | 1126 | graphics/circuit_macros/examples/ex17.m4
-2021/06/02 | 1120 | graphics/circuit_macros/doc/ConfigA.m4
-2021/06/02 | 111955 | macros/latex/base/ltnews11.pdf
-2021/06/02 | 1114 | graphics/circuit_macros/mfpic.m4
-2021/06/02 | 1100 | graphics/circuit_macros/examples/ex02.m4
-2021/06/02 | 10971144 | systems/texlive/tlnet/archive/l3kernel.doc.r59425.tar.xz
-2021/06/02 | 1093 | graphics/circuit_macros/examples/svg/ex02SVG.m4
-2021/06/02 | 1090 | graphics/circuit_macros/examples/svg/AntennasSVG.m4
-2021/06/02 | 10871 | macros/latex/base/manifest.txt
-2021/06/02 | 1086052 | systems/win32/w32tex/win64/extractpdfmark-w64.tar.xz
-2021/06/02 | 1076 | graphics/circuit_macros/examples/mf/mftest
-2021/06/02 | 1075 | graphics/circuit_macros/examples/bistable.m4
-2021/06/02 | 1074 | graphics/circuit_macros/doc/CapacitorsMan.m4
-2021/06/02 | 1074 | graphics/circuit_macros/doc/bistableMan.m4
-2021/06/02 | 1074364 | macros/latex/base/ltnews.pdf
-2021/06/02 | 1070 | graphics/circuit_macros/examples/svg/EmarrowsSVG.m4
-2021/06/02 | 10697 | macros/latex/base/ltnews26.tex
-2021/06/02 | 106908 | macros/latex/base/inputenc.dtx
-2021/06/02 | 10687 | macros/latex/base/ltnews23.tex
-2021/06/02 | 10668 | macros/latex/base/ltnews22.tex
-2021/06/02 | 1065 | graphics/circuit_macros/examples/svg/ex18SVG.m4
-2021/06/02 | 10603 | macros/latex/base/makeindx.dtx
-2021/06/02 | 105 | macros/latex/base/ltfilehook-code.tex
-2021/06/02 | 10589 | graphics/circuit_macros/examples/svg/expSVG.m4
-2021/06/02 | 1055 | graphics/circuit_macros/examples/svg/TgateSVG.m4
-2021/06/02 | 1050 | graphics/circuit_macros/examples/svg/SVGconfig.m4
-2021/06/02 | 104 | macros/latex/base/ltshipout-code.tex
-2021/06/02 | 1046 | graphics/circuit_macros/examples/Capacitors.m4
-2021/06/02 | 1040 | graphics/circuit_macros/examples/Nport.m4
-2021/06/02 | 1040 | graphics/circuit_macros/doc/NportMan.m4
-2021/06/02 | 10401 | graphics/circuit_macros/doc/Variable.tex
-2021/06/02 | 103 | macros/latex/base/ltcmdhooks-code.tex
-2021/06/02 | 1039 | graphics/circuit_macros/examples/chaos.m4
-2021/06/02 | 10375 | macros/latex/base/ltfsscmp.dtx
-2021/06/02 | 1034 | graphics/circuit_macros/examples/svg/OpampSVG.m4
-2021/06/02 | 102 | macros/latex/base/lthooks-code.tex
-2021/06/02 | 1029 | graphics/circuit_macros/xfig.m4
-2021/06/02 | 1029068 | macros/latex/base/lthooks-code.pdf
-2021/06/02 | 1024 | graphics/circuit_macros/examples/Btree.m4
-2021/06/02 | 1022 | graphics/circuit_macros/examples/Tgate.m4
-2021/06/02 | 1022 | graphics/circuit_macros/doc/TgateMan.m4
-2021/06/02 | 1019 | graphics/circuit_macros/gpic.m4
-2021/06/02 | 10193 | graphics/circuit_macros/examples/svg/paletteSVG.m4
-2021/06/02 | 10164 | graphics/circuit_macros/doc/Audio.tex
-2021/06/02 | 10105 | macros/latex/base/webcomp.err
-2021/06/02 | 1003 | graphics/circuit_macros/examples/ex15.m4
diff --git a/fonts/utilities/jfmutil/LICENSE b/fonts/utilities/jfmutil/LICENSE
index 7f5fde238b..ead3a3702e 100644
--- a/fonts/utilities/jfmutil/LICENSE
+++ b/fonts/utilities/jfmutil/LICENSE
@@ -1,6 +1,6 @@
The MIT License
-Copyright (c) 2008-2020 Takayuki YATO (aka. "ZR")
+Copyright (c) 2008-2021 Takayuki YATO (aka. "ZR")
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
diff --git a/fonts/utilities/jfmutil/README-ja.md b/fonts/utilities/jfmutil/README-ja.md
index 273fe739fa..de2e7a8831 100644
--- a/fonts/utilities/jfmutil/README-ja.md
+++ b/fonts/utilities/jfmutil/README-ja.md
@@ -466,6 +466,10 @@ upTeX 標準の `upjpnrm-h.vf` の場合、以下の出力になる:
更新履歴
--------
+ * Version 1.3.2 〈2021/05/29〉
+ - ZRTeXtor 1.8.0 版に同期。変更点は:
+ + charpacket のない VF を許容する。
+
* Version 1.3.1 〈2020/05/04〉
- `jodel` を jodhminrn フォントに対応させる。
diff --git a/fonts/utilities/jfmutil/README.md b/fonts/utilities/jfmutil/README.md
index 8b259a100c..cf40599168 100644
--- a/fonts/utilities/jfmutil/README.md
+++ b/fonts/utilities/jfmutil/README.md
@@ -1,3 +1,4 @@
+
jfmutil
=======
@@ -85,6 +86,10 @@ Please refer to README-ja.md (in Japanese) for detail.
Revision History
----------------
+ * Version 1.3.2 〈2021/05/29〉
+ - Use ZRTeXtor v1.8.0. The changes are:
+ + Allow VFs with no charpackets.
+
* Version 1.3.1 〈2020/05/04〉
- Now `jodel` uses VF of jodhminrn family.
diff --git a/fonts/utilities/jfmutil/jfmutil.pl b/fonts/utilities/jfmutil/jfmutil.pl
index d527eddfdb..c1fe8ca727 100644
--- a/fonts/utilities/jfmutil/jfmutil.pl
+++ b/fonts/utilities/jfmutil/jfmutil.pl
@@ -12,8 +12,8 @@ use strict;
#------------------------------------------------- ZRTeXtor module
package ZRTeXtor;
-our $VERSION = 1.007_00;
-our $mod_date = "2019/09/02";
+our $VERSION = 1.008_00;
+our $mod_date = "2021/05/29";
use Encode qw(encode decode);
# Here follows excerpt from ZRTeXtor.pm
@@ -1373,7 +1373,7 @@ sub vf_parse
pl_set_value($pe->[7], 1, $fs[4]);
pl_set_value($pe, 1, unpack_num($fs[1]));
if ($fs[5] eq '') { splice(@$pe, 3, 1); }
- $stg = 1; push(@$pl, $pe);
+ $stg = 2; push(@$pl, $pe);
} elsif ($stg == 2 && $t == 248) { # post
(($u = substr($dat, $pos, $t)) =~ /^\xf8+$/)
or return vf_synerror("in postamble");
@@ -2781,8 +2781,8 @@ package main;
#================================================= BEGIN
use Encode qw(encode decode);
my $prog_name = 'jfmutil';
-my $version = '1.3.1';
-my $mod_date = '2020/05/04';
+my $version = '1.3.2';
+my $mod_date = '2021/05/29';
#use Data::Dump 'dump';
#
my ($sw_hex, $sw_uptool, $sw_noencout, $inenc, $exenc, $sw_lenient);
diff --git a/graphics/minim-hatching/EUPL-1.2-EN.txt b/graphics/minim-hatching/EUPL-1.2-EN.txt
new file mode 100644
index 0000000000..4153cd3775
--- /dev/null
+++ b/graphics/minim-hatching/EUPL-1.2-EN.txt
@@ -0,0 +1,287 @@
+ EUROPEAN UNION PUBLIC LICENCE v. 1.2
+ EUPL © the European Union 2007, 2016
+
+This European Union Public Licence (the ‘EUPL’) applies to the Work (as defined
+below) which is provided under the terms of this Licence. Any use of the Work,
+other than as authorised under this Licence is prohibited (to the extent such
+use is covered by a right of the copyright holder of the Work).
+
+The Work is provided under the terms of this Licence when the Licensor (as
+defined below) has placed the following notice immediately following the
+copyright notice for the Work:
+
+ Licensed under the EUPL
+
+or has expressed by any other means his willingness to license under the EUPL.
+
+1. Definitions
+
+In this Licence, the following terms have the following meaning:
+
+- ‘The Licence’: this Licence.
+
+- ‘The Original Work’: the work or software distributed or communicated by the
+ Licensor under this Licence, available as Source Code and also as Executable
+ Code as the case may be.
+
+- ‘Derivative Works’: the works or software that could be created by the
+ Licensee, based upon the Original Work or modifications thereof. This Licence
+ does not define the extent of modification or dependence on the Original Work
+ required in order to classify a work as a Derivative Work; this extent is
+ determined by copyright law applicable in the country mentioned in Article 15.
+
+- ‘The Work’: the Original Work or its Derivative Works.
+
+- ‘The Source Code’: the human-readable form of the Work which is the most
+ convenient for people to study and modify.
+
+- ‘The Executable Code’: any code which has generally been compiled and which is
+ meant to be interpreted by a computer as a program.
+
+- ‘The Licensor’: the natural or legal person that distributes or communicates
+ the Work under the Licence.
+
+- ‘Contributor(s)’: any natural or legal person who modifies the Work under the
+ Licence, or otherwise contributes to the creation of a Derivative Work.
+
+- ‘The Licensee’ or ‘You’: any natural or legal person who makes any usage of
+ the Work under the terms of the Licence.
+
+- ‘Distribution’ or ‘Communication’: any act of selling, giving, lending,
+ renting, distributing, communicating, transmitting, or otherwise making
+ available, online or offline, copies of the Work or providing access to its
+ essential functionalities at the disposal of any other natural or legal
+ person.
+
+2. Scope of the rights granted by the Licence
+
+The Licensor hereby grants You a worldwide, royalty-free, non-exclusive,
+sublicensable licence to do the following, for the duration of copyright vested
+in the Original Work:
+
+- use the Work in any circumstance and for all usage,
+- reproduce the Work,
+- modify the Work, and make Derivative Works based upon the Work,
+- communicate to the public, including the right to make available or display
+ the Work or copies thereof to the public and perform publicly, as the case may
+ be, the Work,
+- distribute the Work or copies thereof,
+- lend and rent the Work or copies thereof,
+- sublicense rights in the Work or copies thereof.
+
+Those rights can be exercised on any media, supports and formats, whether now
+known or later invented, as far as the applicable law permits so.
+
+In the countries where moral rights apply, the Licensor waives his right to
+exercise his moral right to the extent allowed by law in order to make effective
+the licence of the economic rights here above listed.
+
+The Licensor grants to the Licensee royalty-free, non-exclusive usage rights to
+any patents held by the Licensor, to the extent necessary to make use of the
+rights granted on the Work under this Licence.
+
+3. Communication of the Source Code
+
+The Licensor may provide the Work either in its Source Code form, or as
+Executable Code. If the Work is provided as Executable Code, the Licensor
+provides in addition a machine-readable copy of the Source Code of the Work
+along with each copy of the Work that the Licensor distributes or indicates, in
+a notice following the copyright notice attached to the Work, a repository where
+the Source Code is easily and freely accessible for as long as the Licensor
+continues to distribute or communicate the Work.
+
+4. Limitations on copyright
+
+Nothing in this Licence is intended to deprive the Licensee of the benefits from
+any exception or limitation to the exclusive rights of the rights owners in the
+Work, of the exhaustion of those rights or of other applicable limitations
+thereto.
+
+5. Obligations of the Licensee
+
+The grant of the rights mentioned above is subject to some restrictions and
+obligations imposed on the Licensee. Those obligations are the following:
+
+Attribution right: The Licensee shall keep intact all copyright, patent or
+trademarks notices and all notices that refer to the Licence and to the
+disclaimer of warranties. The Licensee must include a copy of such notices and a
+copy of the Licence with every copy of the Work he/she distributes or
+communicates. The Licensee must cause any Derivative Work to carry prominent
+notices stating that the Work has been modified and the date of modification.
+
+Copyleft clause: If the Licensee distributes or communicates copies of the
+Original Works or Derivative Works, this Distribution or Communication will be
+done under the terms of this Licence or of a later version of this Licence
+unless the Original Work is expressly distributed only under this version of the
+Licence — for example by communicating ‘EUPL v. 1.2 only’. The Licensee
+(becoming Licensor) cannot offer or impose any additional terms or conditions on
+the Work or Derivative Work that alter or restrict the terms of the Licence.
+
+Compatibility clause: If the Licensee Distributes or Communicates Derivative
+Works or copies thereof based upon both the Work and another work licensed under
+a Compatible Licence, this Distribution or Communication can be done under the
+terms of this Compatible Licence. For the sake of this clause, ‘Compatible
+Licence’ refers to the licences listed in the appendix attached to this Licence.
+Should the Licensee's obligations under the Compatible Licence conflict with
+his/her obligations under this Licence, the obligations of the Compatible
+Licence shall prevail.
+
+Provision of Source Code: When distributing or communicating copies of the Work,
+the Licensee will provide a machine-readable copy of the Source Code or indicate
+a repository where this Source will be easily and freely available for as long
+as the Licensee continues to distribute or communicate the Work.
+
+Legal Protection: This Licence does not grant permission to use the trade names,
+trademarks, service marks, or names of the Licensor, except as required for
+reasonable and customary use in describing the origin of the Work and
+reproducing the content of the copyright notice.
+
+6. Chain of Authorship
+
+The original Licensor warrants that the copyright in the Original Work granted
+hereunder is owned by him/her or licensed to him/her and that he/she has the
+power and authority to grant the Licence.
+
+Each Contributor warrants that the copyright in the modifications he/she brings
+to the Work are owned by him/her or licensed to him/her and that he/she has the
+power and authority to grant the Licence.
+
+Each time You accept the Licence, the original Licensor and subsequent
+Contributors grant You a licence to their contributions to the Work, under the
+terms of this Licence.
+
+7. Disclaimer of Warranty
+
+The Work is a work in progress, which is continuously improved by numerous
+Contributors. It is not a finished work and may therefore contain defects or
+‘bugs’ inherent to this type of development.
+
+For the above reason, the Work is provided under the Licence on an ‘as is’ basis
+and without warranties of any kind concerning the Work, including without
+limitation merchantability, fitness for a particular purpose, absence of defects
+or errors, accuracy, non-infringement of intellectual property rights other than
+copyright as stated in Article 6 of this Licence.
+
+This disclaimer of warranty is an essential part of the Licence and a condition
+for the grant of any rights to the Work.
+
+8. Disclaimer of Liability
+
+Except in the cases of wilful misconduct or damages directly caused to natural
+persons, the Licensor will in no event be liable for any direct or indirect,
+material or moral, damages of any kind, arising out of the Licence or of the use
+of the Work, including without limitation, damages for loss of goodwill, work
+stoppage, computer failure or malfunction, loss of data or any commercial
+damage, even if the Licensor has been advised of the possibility of such damage.
+However, the Licensor will be liable under statutory product liability laws as
+far such laws apply to the Work.
+
+9. Additional agreements
+
+While distributing the Work, You may choose to conclude an additional agreement,
+defining obligations or services consistent with this Licence. However, if
+accepting obligations, You may act only on your own behalf and on your sole
+responsibility, not on behalf of the original Licensor or any other Contributor,
+and only if You agree to indemnify, defend, and hold each Contributor harmless
+for any liability incurred by, or claims asserted against such Contributor by
+the fact You have accepted any warranty or additional liability.
+
+10. Acceptance of the Licence
+
+The provisions of this Licence can be accepted by clicking on an icon ‘I agree’
+placed under the bottom of a window displaying the text of this Licence or by
+affirming consent in any other similar way, in accordance with the rules of
+applicable law. Clicking on that icon indicates your clear and irrevocable
+acceptance of this Licence and all of its terms and conditions.
+
+Similarly, you irrevocably accept this Licence and all of its terms and
+conditions by exercising any rights granted to You by Article 2 of this Licence,
+such as the use of the Work, the creation by You of a Derivative Work or the
+Distribution or Communication by You of the Work or copies thereof.
+
+11. Information to the public
+
+In case of any Distribution or Communication of the Work by means of electronic
+communication by You (for example, by offering to download the Work from a
+remote location) the distribution channel or media (for example, a website) must
+at least provide to the public the information requested by the applicable law
+regarding the Licensor, the Licence and the way it may be accessible, concluded,
+stored and reproduced by the Licensee.
+
+12. Termination of the Licence
+
+The Licence and the rights granted hereunder will terminate automatically upon
+any breach by the Licensee of the terms of the Licence.
+
+Such a termination will not terminate the licences of any person who has
+received the Work from the Licensee under the Licence, provided such persons
+remain in full compliance with the Licence.
+
+13. Miscellaneous
+
+Without prejudice of Article 9 above, the Licence represents the complete
+agreement between the Parties as to the Work.
+
+If any provision of the Licence is invalid or unenforceable under applicable
+law, this will not affect the validity or enforceability of the Licence as a
+whole. Such provision will be construed or reformed so as necessary to make it
+valid and enforceable.
+
+The European Commission may publish other linguistic versions or new versions of
+this Licence or updated versions of the Appendix, so far this is required and
+reasonable, without reducing the scope of the rights granted by the Licence. New
+versions of the Licence will be published with a unique version number.
+
+All linguistic versions of this Licence, approved by the European Commission,
+have identical value. Parties can take advantage of the linguistic version of
+their choice.
+
+14. Jurisdiction
+
+Without prejudice to specific agreement between parties,
+
+- any litigation resulting from the interpretation of this License, arising
+ between the European Union institutions, bodies, offices or agencies, as a
+ Licensor, and any Licensee, will be subject to the jurisdiction of the Court
+ of Justice of the European Union, as laid down in article 272 of the Treaty on
+ the Functioning of the European Union,
+
+- any litigation arising between other parties and resulting from the
+ interpretation of this License, will be subject to the exclusive jurisdiction
+ of the competent court where the Licensor resides or conducts its primary
+ business.
+
+15. Applicable Law
+
+Without prejudice to specific agreement between parties,
+
+- this Licence shall be governed by the law of the European Union Member State
+ where the Licensor has his seat, resides or has his registered office,
+
+- this licence shall be governed by Belgian law if the Licensor has no seat,
+ residence or registered office inside a European Union Member State.
+
+Appendix
+
+‘Compatible Licences’ according to Article 5 EUPL are:
+
+- GNU General Public License (GPL) v. 2, v. 3
+- GNU Affero General Public License (AGPL) v. 3
+- Open Software License (OSL) v. 2.1, v. 3.0
+- Eclipse Public License (EPL) v. 1.0
+- CeCILL v. 2.0, v. 2.1
+- Mozilla Public Licence (MPL) v. 2
+- GNU Lesser General Public Licence (LGPL) v. 2.1, v. 3
+- Creative Commons Attribution-ShareAlike v. 3.0 Unported (CC BY-SA 3.0) for
+ works other than software
+- European Union Public Licence (EUPL) v. 1.1, v. 1.2
+- Québec Free and Open-Source Licence — Reciprocity (LiLiQ-R) or Strong
+ Reciprocity (LiLiQ-R+).
+
+The European Commission may update this Appendix to later versions of the above
+licences without producing a new version of the EUPL, as long as they provide
+the rights granted in Article 2 of this Licence and protect the covered Source
+Code from exclusive appropriation.
+
+All other changes or additions to this Appendix require the production of a new
+EUPL version.
diff --git a/graphics/minim-hatching/README b/graphics/minim-hatching/README
new file mode 100644
index 0000000000..8765322681
--- /dev/null
+++ b/graphics/minim-hatching/README
@@ -0,0 +1,24 @@
+Version: 2021/1.0
+
+SUMMARY
+
+This is a small proof-of-concept library of tiling patterns for use with the
+minim-mp MetaPost processor.
+
+
+DOCUMENTATION
+
+In order to obtain the typeset manual of this package, simply say:
+
+ luatex -fmt minim-mp minim-hatching-doc.mp
+
+
+COPYING
+
+(c) 2021 Esger Renkema
+
+These files may be distributed under the terms of the European Union Public
+Licence (EUPL) version 1.2 or later. A copy can be obtained at:
+
+https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+
diff --git a/graphics/minim-hatching/minim-hatching-doc.mp b/graphics/minim-hatching/minim-hatching-doc.mp
new file mode 100644
index 0000000000..6dcee18e28
--- /dev/null
+++ b/graphics/minim-hatching/minim-hatching-doc.mp
@@ -0,0 +1,117 @@
+
+%% This is the documentation of the minim-hatching pattern library. To typeset
+%% this file, say:
+%%
+%% luatex --fmt=minim-mp minim-hatching-doc.mp
+
+input minim-hatching
+
+verbatimtex
+% work around a bug: pdf.setnames will do nothing if this is not called at least once.
+\pdfextension names{} % (TODO: remove after bug is fixed).
+\font \titlf = {Latin Modern Roman Dunhill} at 12pt
+\font \mainf = {Latin Modern Roman Unslanted} at 10pt \mainf
+\parindent 0em \parskip 1em
+\rightskip 0em plus 2em
+\startmetadata
+ author {Esger Renkema}
+ title {minim-hatching}
+ date {2021-06-01}
+ version {2021/1.0}
+ keywords {MetaPost; tiling patterns}
+stopmetadata
+etex;
+
+def makepage = path page; page = unitsquare xscaled 210mm yscaled 297mm;
+ setbounds currentpicture to page shifted (-7.1cm, 4cm-297mm); enddef;
+def xyscaled expr p = xscaled xpart p yscaled ypart p enddef;
+
+pickup pencircle scaled 0.4pt; save p; picture p;
+save w, h, o; (w, h, o) = (2cm, 1cm, 3mm);
+
+def table(expr n)(text i)(text t) =
+ for d = t : x := 0;
+ for s = i :
+ if d = "=" : draw label(s) shifted (x+o, y+o);
+ else: filldraw unitsquare xscaled w yscaled h shifted (x,y)
+ withpattern(scantokens(s&" "&d&n)); fi
+ x := x + w;
+ endfor
+ patname(d, n)
+ y := y - h;
+ endfor enddef;
+def double(expr l, r) = y:=y-h;
+ filldraw unitsquare xscaled w yscaled h shifted (0,y)
+ withpattern(scantokens(l));
+ filldraw unitsquare xscaled w yscaled h shifted (w,y)
+ withpattern(scantokens(r));
+ draw label(l) shifted(2w+o, y+o);
+ draw label(r) shifted(3w+o, y+o); enddef;
+
+vardef label(expr t)=
+ save p; picture p; p := scantokens ("btex "&t&"\strut etex;");
+ setbounds p to unitsquare xyscaled urcorner p; p enddef;
+def patname(expr n, s) =
+ if n <> "=" : draw label(n&s) shifted(x+o, y+o); fi enddef;
+def titl(expr t) =
+ p := label("\titlf "&t);
+ draw p shifted ((-2o, y+o) - lrcorner p); enddef;
+
+beginfig(1) y := 0;
+ titl("Introduction");
+ p := btex \vtop{\hsize=9cm\noindent
+ This is a small library of monochrome patterns for the minim-mp metapost processor.
+ Load the patterns by saying \par
+ \strut \qquad input minim-hatching;\par
+ at the top of your metapost file or instance.\par
+ I recommend printing this file, as patterns do not always display well on a computer screen.
+ } etex shifted (0,o);
+ draw p; y := y - ypart (urcorner p - lrcorner p) - h;
+ titl("Line patterns");
+ table(" lines")("", "dense")
+ ("=", "horizontal", "vertical", "upward", "downward", "broken");
+ titl("Zigzag patterns");
+ table("zigzag")("horizontal", "vertical")
+ ("=", "" );
+ titl("Grid patterns");
+ table(" grid")("", "dense")
+ ("=", "", "upward", "downward", "diagonal", "horizontal", "vertical");
+makepage endfig;
+
+verbatimtex \embedfile
+ global file {EUPL-1.2-EN.txt}
+ desc {Licence for this package (EUPL).}
+ name LICENCE mimetype text/plain
+ relation Unspecified uncompressed etex;
+
+beginfig(1) y := 0;
+ titl("Dot patterns");
+ table(" dots")("sparse", "", "dense")
+ ("=", "", "square", "diamond", "heavy", "square heavy", "diamond heavy");
+ titl("Cloth patterns");
+ double("knit", "purl")
+ double("weave", "dense weave")
+ double("stitches", "crosses")
+ double("chords", "tea cloth")
+ y:=y-h; titl("Circle patterns");
+ table("")("", "small")
+ ("=", "circles", "square circles", "hexagons", "scales");
+ titl("Stone patterns");
+ double("bricks", "tiles");
+ y:=y-2h; titl("Licence");
+ p := btex
+ \vtop{\hsize=9cm\noindent
+ This package may be distributed under the terms of the European Union Public
+ Licence (EUPL) version 1.2 or later. An english version of this licence has
+ been included as an attachment to this file; copies in other languages can be
+ obtained at
+ $$\hbox to \hsize{\hss\hyperlink
+ url {https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12}\relax
+ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\endlink\hss}$$
+ } etex shifted (0,y+o);
+ draw p;
+makepage endfig;
+
+bye;
+
+
diff --git a/graphics/minim-hatching/minim-hatching-doc.pdf b/graphics/minim-hatching/minim-hatching-doc.pdf
new file mode 100644
index 0000000000..333a6b074f
--- /dev/null
+++ b/graphics/minim-hatching/minim-hatching-doc.pdf
@@ -0,0 +1,1402 @@
+%PDF-1.5
+%
+1 0 obj
+<< /Type/EmbeddedFile /Subtype/text#2Fplain /Length 13827 >>
+stream
+ EUROPEAN UNION PUBLIC LICENCE v. 1.2
+ EUPL © the European Union 2007, 2016
+
+This European Union Public Licence (the ‘EUPL’) applies to the Work (as defined
+below) which is provided under the terms of this Licence. Any use of the Work,
+other than as authorised under this Licence is prohibited (to the extent such
+use is covered by a right of the copyright holder of the Work).
+
+The Work is provided under the terms of this Licence when the Licensor (as
+defined below) has placed the following notice immediately following the
+copyright notice for the Work:
+
+ Licensed under the EUPL
+
+or has expressed by any other means his willingness to license under the EUPL.
+
+1. Definitions
+
+In this Licence, the following terms have the following meaning:
+
+- ‘The Licence’: this Licence.
+
+- ‘The Original Work’: the work or software distributed or communicated by the
+ Licensor under this Licence, available as Source Code and also as Executable
+ Code as the case may be.
+
+- ‘Derivative Works’: the works or software that could be created by the
+ Licensee, based upon the Original Work or modifications thereof. This Licence
+ does not define the extent of modification or dependence on the Original Work
+ required in order to classify a work as a Derivative Work; this extent is
+ determined by copyright law applicable in the country mentioned in Article 15.
+
+- ‘The Work’: the Original Work or its Derivative Works.
+
+- ‘The Source Code’: the human-readable form of the Work which is the most
+ convenient for people to study and modify.
+
+- ‘The Executable Code’: any code which has generally been compiled and which is
+ meant to be interpreted by a computer as a program.
+
+- ‘The Licensor’: the natural or legal person that distributes or communicates
+ the Work under the Licence.
+
+- ‘Contributor(s)’: any natural or legal person who modifies the Work under the
+ Licence, or otherwise contributes to the creation of a Derivative Work.
+
+- ‘The Licensee’ or ‘You’: any natural or legal person who makes any usage of
+ the Work under the terms of the Licence.
+
+- ‘Distribution’ or ‘Communication’: any act of selling, giving, lending,
+ renting, distributing, communicating, transmitting, or otherwise making
+ available, online or offline, copies of the Work or providing access to its
+ essential functionalities at the disposal of any other natural or legal
+ person.
+
+2. Scope of the rights granted by the Licence
+
+The Licensor hereby grants You a worldwide, royalty-free, non-exclusive,
+sublicensable licence to do the following, for the duration of copyright vested
+in the Original Work:
+
+- use the Work in any circumstance and for all usage,
+- reproduce the Work,
+- modify the Work, and make Derivative Works based upon the Work,
+- communicate to the public, including the right to make available or display
+ the Work or copies thereof to the public and perform publicly, as the case may
+ be, the Work,
+- distribute the Work or copies thereof,
+- lend and rent the Work or copies thereof,
+- sublicense rights in the Work or copies thereof.
+
+Those rights can be exercised on any media, supports and formats, whether now
+known or later invented, as far as the applicable law permits so.
+
+In the countries where moral rights apply, the Licensor waives his right to
+exercise his moral right to the extent allowed by law in order to make effective
+the licence of the economic rights here above listed.
+
+The Licensor grants to the Licensee royalty-free, non-exclusive usage rights to
+any patents held by the Licensor, to the extent necessary to make use of the
+rights granted on the Work under this Licence.
+
+3. Communication of the Source Code
+
+The Licensor may provide the Work either in its Source Code form, or as
+Executable Code. If the Work is provided as Executable Code, the Licensor
+provides in addition a machine-readable copy of the Source Code of the Work
+along with each copy of the Work that the Licensor distributes or indicates, in
+a notice following the copyright notice attached to the Work, a repository where
+the Source Code is easily and freely accessible for as long as the Licensor
+continues to distribute or communicate the Work.
+
+4. Limitations on copyright
+
+Nothing in this Licence is intended to deprive the Licensee of the benefits from
+any exception or limitation to the exclusive rights of the rights owners in the
+Work, of the exhaustion of those rights or of other applicable limitations
+thereto.
+
+5. Obligations of the Licensee
+
+The grant of the rights mentioned above is subject to some restrictions and
+obligations imposed on the Licensee. Those obligations are the following:
+
+Attribution right: The Licensee shall keep intact all copyright, patent or
+trademarks notices and all notices that refer to the Licence and to the
+disclaimer of warranties. The Licensee must include a copy of such notices and a
+copy of the Licence with every copy of the Work he/she distributes or
+communicates. The Licensee must cause any Derivative Work to carry prominent
+notices stating that the Work has been modified and the date of modification.
+
+Copyleft clause: If the Licensee distributes or communicates copies of the
+Original Works or Derivative Works, this Distribution or Communication will be
+done under the terms of this Licence or of a later version of this Licence
+unless the Original Work is expressly distributed only under this version of the
+Licence — for example by communicating ‘EUPL v. 1.2 only’. The Licensee
+(becoming Licensor) cannot offer or impose any additional terms or conditions on
+the Work or Derivative Work that alter or restrict the terms of the Licence.
+
+Compatibility clause: If the Licensee Distributes or Communicates Derivative
+Works or copies thereof based upon both the Work and another work licensed under
+a Compatible Licence, this Distribution or Communication can be done under the
+terms of this Compatible Licence. For the sake of this clause, ‘Compatible
+Licence’ refers to the licences listed in the appendix attached to this Licence.
+Should the Licensee's obligations under the Compatible Licence conflict with
+his/her obligations under this Licence, the obligations of the Compatible
+Licence shall prevail.
+
+Provision of Source Code: When distributing or communicating copies of the Work,
+the Licensee will provide a machine-readable copy of the Source Code or indicate
+a repository where this Source will be easily and freely available for as long
+as the Licensee continues to distribute or communicate the Work.
+
+Legal Protection: This Licence does not grant permission to use the trade names,
+trademarks, service marks, or names of the Licensor, except as required for
+reasonable and customary use in describing the origin of the Work and
+reproducing the content of the copyright notice.
+
+6. Chain of Authorship
+
+The original Licensor warrants that the copyright in the Original Work granted
+hereunder is owned by him/her or licensed to him/her and that he/she has the
+power and authority to grant the Licence.
+
+Each Contributor warrants that the copyright in the modifications he/she brings
+to the Work are owned by him/her or licensed to him/her and that he/she has the
+power and authority to grant the Licence.
+
+Each time You accept the Licence, the original Licensor and subsequent
+Contributors grant You a licence to their contributions to the Work, under the
+terms of this Licence.
+
+7. Disclaimer of Warranty
+
+The Work is a work in progress, which is continuously improved by numerous
+Contributors. It is not a finished work and may therefore contain defects or
+‘bugs’ inherent to this type of development.
+
+For the above reason, the Work is provided under the Licence on an ‘as is’ basis
+and without warranties of any kind concerning the Work, including without
+limitation merchantability, fitness for a particular purpose, absence of defects
+or errors, accuracy, non-infringement of intellectual property rights other than
+copyright as stated in Article 6 of this Licence.
+
+This disclaimer of warranty is an essential part of the Licence and a condition
+for the grant of any rights to the Work.
+
+8. Disclaimer of Liability
+
+Except in the cases of wilful misconduct or damages directly caused to natural
+persons, the Licensor will in no event be liable for any direct or indirect,
+material or moral, damages of any kind, arising out of the Licence or of the use
+of the Work, including without limitation, damages for loss of goodwill, work
+stoppage, computer failure or malfunction, loss of data or any commercial
+damage, even if the Licensor has been advised of the possibility of such damage.
+However, the Licensor will be liable under statutory product liability laws as
+far such laws apply to the Work.
+
+9. Additional agreements
+
+While distributing the Work, You may choose to conclude an additional agreement,
+defining obligations or services consistent with this Licence. However, if
+accepting obligations, You may act only on your own behalf and on your sole
+responsibility, not on behalf of the original Licensor or any other Contributor,
+and only if You agree to indemnify, defend, and hold each Contributor harmless
+for any liability incurred by, or claims asserted against such Contributor by
+the fact You have accepted any warranty or additional liability.
+
+10. Acceptance of the Licence
+
+The provisions of this Licence can be accepted by clicking on an icon ‘I agree’
+placed under the bottom of a window displaying the text of this Licence or by
+affirming consent in any other similar way, in accordance with the rules of
+applicable law. Clicking on that icon indicates your clear and irrevocable
+acceptance of this Licence and all of its terms and conditions.
+
+Similarly, you irrevocably accept this Licence and all of its terms and
+conditions by exercising any rights granted to You by Article 2 of this Licence,
+such as the use of the Work, the creation by You of a Derivative Work or the
+Distribution or Communication by You of the Work or copies thereof.
+
+11. Information to the public
+
+In case of any Distribution or Communication of the Work by means of electronic
+communication by You (for example, by offering to download the Work from a
+remote location) the distribution channel or media (for example, a website) must
+at least provide to the public the information requested by the applicable law
+regarding the Licensor, the Licence and the way it may be accessible, concluded,
+stored and reproduced by the Licensee.
+
+12. Termination of the Licence
+
+The Licence and the rights granted hereunder will terminate automatically upon
+any breach by the Licensee of the terms of the Licence.
+
+Such a termination will not terminate the licences of any person who has
+received the Work from the Licensee under the Licence, provided such persons
+remain in full compliance with the Licence.
+
+13. Miscellaneous
+
+Without prejudice of Article 9 above, the Licence represents the complete
+agreement between the Parties as to the Work.
+
+If any provision of the Licence is invalid or unenforceable under applicable
+law, this will not affect the validity or enforceability of the Licence as a
+whole. Such provision will be construed or reformed so as necessary to make it
+valid and enforceable.
+
+The European Commission may publish other linguistic versions or new versions of
+this Licence or updated versions of the Appendix, so far this is required and
+reasonable, without reducing the scope of the rights granted by the Licence. New
+versions of the Licence will be published with a unique version number.
+
+All linguistic versions of this Licence, approved by the European Commission,
+have identical value. Parties can take advantage of the linguistic version of
+their choice.
+
+14. Jurisdiction
+
+Without prejudice to specific agreement between parties,
+
+- any litigation resulting from the interpretation of this License, arising
+ between the European Union institutions, bodies, offices or agencies, as a
+ Licensor, and any Licensee, will be subject to the jurisdiction of the Court
+ of Justice of the European Union, as laid down in article 272 of the Treaty on
+ the Functioning of the European Union,
+
+- any litigation arising between other parties and resulting from the
+ interpretation of this License, will be subject to the exclusive jurisdiction
+ of the competent court where the Licensor resides or conducts its primary
+ business.
+
+15. Applicable Law
+
+Without prejudice to specific agreement between parties,
+
+- this Licence shall be governed by the law of the European Union Member State
+ where the Licensor has his seat, resides or has his registered office,
+
+- this licence shall be governed by Belgian law if the Licensor has no seat,
+ residence or registered office inside a European Union Member State.
+
+Appendix
+
+‘Compatible Licences’ according to Article 5 EUPL are:
+
+- GNU General Public License (GPL) v. 2, v. 3
+- GNU Affero General Public License (AGPL) v. 3
+- Open Software License (OSL) v. 2.1, v. 3.0
+- Eclipse Public License (EPL) v. 1.0
+- CeCILL v. 2.0, v. 2.1
+- Mozilla Public Licence (MPL) v. 2
+- GNU Lesser General Public Licence (LGPL) v. 2.1, v. 3
+- Creative Commons Attribution-ShareAlike v. 3.0 Unported (CC BY-SA 3.0) for
+ works other than software
+- European Union Public Licence (EUPL) v. 1.1, v. 1.2
+- Québec Free and Open-Source Licence — Reciprocity (LiLiQ-R) or Strong
+ Reciprocity (LiLiQ-R+).
+
+The European Commission may update this Appendix to later versions of the above
+licences without producing a new version of the EUPL, as long as they provide
+the rights granted in Article 2 of this Licence and protect the covered Source
+Code from exclusive appropriation.
+
+All other changes or additions to this Appendix require the production of a new
+EUPL version.
+
+endstream
+endobj
+5 0 obj
+<< /Subtype/Form /BBox [ 0 -1 100 1 ] /Resources 6 0 R /Filter /FlateDecode /Length 45 >>
+stream
+x+23P(24PU0Tb/.\C
+endstream
+endobj
+7 0 obj
+<< /Subtype/Form /BBox [ 0 -1 100 1 ] /Resources 8 0 R /Filter /FlateDecode /Length 45 >>
+stream
+x+23P(24PU0Tb/.\C
+endstream
+endobj
+9 0 obj
+<< /Subtype/Form /BBox [ 0 -1 100 1 ] /Resources 10 0 R /Filter /FlateDecode /Length 45 >>
+stream
+x+23P(24PU0Tb/.\C
+endstream
+endobj
+11 0 obj
+<< /Subtype/Form /BBox [ 0 -1 100 1 ] /Resources 12 0 R /Filter /FlateDecode /Length 45 >>
+stream
+x+23P(24PU0Tb/.\C
+endstream
+endobj
+13 0 obj
+<< /Subtype/Form /BBox [ 0 -1 100 1 ] /Resources 14 0 R /Filter /FlateDecode /Length 45 >>
+stream
+x+23P(24PU0Tb/.\C
+endstream
+endobj
+15 0 obj
+<< /Subtype/Form /BBox [ 0 -1 100 1 ] /Resources 16 0 R /Filter /FlateDecode /Length 45 >>
+stream
+x+23P(24PU0Tb/.\C
+endstream
+endobj
+17 0 obj
+<< /Subtype/Form /BBox [ 0 -1 100 1 ] /Resources 18 0 R /Filter /FlateDecode /Length 45 >>
+stream
+x+23P(24PU0Tb/.\C
+endstream
+endobj
+19 0 obj
+<< /Subtype/Form /BBox [ 0 -1 100 1 ] /Resources 20 0 R /Filter /FlateDecode /Length 45 >>
+stream
+x+23P(24PU0Tb/.\C
+endstream
+endobj
+21 0 obj
+<< /Subtype/Form /BBox [ -2.199 -2.199 20.574 7.449 ] /Resources 22 0 R /Filter /FlateDecode /Length 68 >>
+stream
+x+23P(24PU0Tb/.\C=S #+\TTB
+
+endstream
+endobj
+23 0 obj
+<< /Subtype/Form /BBox [ -2.199 -2.199 19.699 5.699 ] /Resources 24 0 R /Filter /FlateDecode /Length 62 >>
+stream
+x+23P(24PU0Tb/.\C=S #+\(3R &H6
+endstream
+endobj
+25 0 obj
+<< /Subtype/Form /BBox [ 0 0 5.25 5.25 ] /Resources 26 0 R /Filter /FlateDecode /Length 63 >>
+stream
+x+23P(24PU0Tb/.#=3#S\S= pUsA * ,:@.
+endstream
+endobj
+27 0 obj
+<< /Subtype/Form /BBox [ 0 0 3.5 3.5 ] /Resources 28 0 R /Filter /FlateDecode /Length 61 >>
+stream
+x+23P(24PU0Tb/.C=sS\c=S3+ ,b
+endstream
+endobj
+29 0 obj
+<< /Subtype/Form /BBox [ 0 0 5.25 5.25 ] /Resources 30 0 R /Filter /FlateDecode /Length 63 >>
+stream
+x+23P(24PU0Tb/.#=3#S\S= pUsA * ,:@.
+endstream
+endobj
+31 0 obj
+<< /Subtype/Form /BBox [ 0 0 3.5 3.5 ] /Resources 32 0 R /Filter /FlateDecode /Length 61 >>
+stream
+x+23P(24PU0Tb/.C=sS\c=S3+ ,b
+endstream
+endobj
+33 0 obj
+<< /Subtype/Form /BBox [ 0 0 5.25 5.25 ] /Resources 34 0 R /Filter /FlateDecode /Length 63 >>
+stream
+x+23P(24PU0Tb/.#=3#S\S= pUsA * ,:@.
+endstream
+endobj
+35 0 obj
+<< /Subtype/Form /BBox [ 0 0 3.5 3.5 ] /Resources 36 0 R /Filter /FlateDecode /Length 61 >>
+stream
+x+23P(24PU0Tb/.C=sS\c=S3+ ,b
+endstream
+endobj
+37 0 obj
+<< /Subtype/Form /BBox [ 0 0 5.25 5.25 ] /Resources 38 0 R /Filter /FlateDecode /Length 63 >>
+stream
+x+23P(24PU0Tb/.#=3#S\S= pUsA * ,:@.
+endstream
+endobj
+39 0 obj
+<< /Subtype/Form /BBox [ 0 0 3.5 3.5 ] /Resources 40 0 R /Filter /FlateDecode /Length 61 >>
+stream
+x+23P(24PU0Tb/.C=sS\c=S3+ ,b
+endstream
+endobj
+41 0 obj
+<< /Subtype/Form /BBox [ 0 0 5.25 5.25 ] /Resources 42 0 R /Filter /FlateDecode /Length 63 >>
+stream
+x+23P(24PU0Tb/.#=3#S\S= pUsA * ,:@.
+endstream
+endobj
+43 0 obj
+<< /Subtype/Form /BBox [ 0 0 5.25 5.25 ] /Resources 44 0 R /Filter /FlateDecode /Length 63 >>
+stream
+x+23P(24PU0Tb/.#=3#S\S= pUsA * ,:@.
+endstream
+endobj
+45 0 obj
+<< /Subtype/Form /BBox [ 0 0 3.5 3.5 ] /Resources 46 0 R /Filter /FlateDecode /Length 61 >>
+stream
+x+23P(24PU0Tb/.C=sS\c=S3+ ,b
+endstream
+endobj
+47 0 obj
+<< /Subtype/Form /BBox [ 0 0 3.5 3.5 ] /Resources 48 0 R /Filter /FlateDecode /Length 61 >>
+stream
+x+23P(24PU0Tb/.C=sS\c=S3+ ,b
+endstream
+endobj
+49 0 obj
+<< /Subtype/Form /BBox [ -1.699 -1.699 6.949 6.949 ] /Resources 50 0 R /Filter /FlateDecode /Length 84 >>
+stream
+x+23P(24PU0Tb/.]C=S\ W13IÙ(*M:s Ir\V"@.
+endstream
+endobj
+51 0 obj
+<< /Subtype/Form /BBox [ -3.199 -3.199 8.449 8.449 ] /Resources 52 0 R /Filter /FlateDecode /Length 80 >>
+stream
+x+23P(24PU0Tb/.]c\c`.)P
+@5
+
+endstream
+endobj
+53 0 obj
+<< /Subtype/Form /BBox [ -1.699 -1.699 5.199 5.199 ] /Resources 54 0 R /Filter /FlateDecode /Length 76 >>
+stream
+x+23P(24PU0Tb/.]C=S\ W1X(F@M
+@E(!:
+endstream
+endobj
+55 0 obj
+<< /Subtype/Form /BBox [ 0 -0.875 10.5 4.375 ] /Resources 56 0 R /Filter /FlateDecode /Length 58 >>
+stream
+x+23P(24PU0Tb/.\S=#Sc=SC e
+H
+endstream
+endobj
+57 0 obj
+<< /Subtype/Form /BBox [ -0.875 0 4.375 10.5 ] /Resources 58 0 R /Filter /FlateDecode /Length 57 >>
+stream
+x+23P(24PU0Tb/.\c=SS=#S
+
+
+H
+endstream
+endobj
+59 0 obj
+<< /Subtype/Form /BBox [ 0 0 5.25 5.25 ] /Resources 60 0 R /Filter /FlateDecode /Length 62 >>
+stream
+x+23P(24PU0Tb/.c=#S`g!dW0\ TD "R
+endstream
+endobj
+61 0 obj
+<< /Subtype/Form /BBox [ -0.199 -0.199 15.551 10.301 ] /Resources 62 0 R /Filter /FlateDecode /Length 107 >>
+stream
+x] 0EL
+&w0IO/E`-/BIR*(Ji`1~?;`Ya\P𰞁QW{r[m#_ng$
+endstream
+endobj
+63 0 obj
+<< /Subtype/Form /BBox [ -0.199 -0.199 10.301 10.301 ] /Resources 64 0 R /Filter /FlateDecode /Length 149 >>
+stream
+xڭP1
+0 @T!t߯ЩI'BN]׮j/|d2E*@{&y<Y4Ab +v _WެU8c᭓5fWoy0H.Wfz&PP
+endstream
+endobj
+65 0 obj
+<< /Subtype/Form /BBox [ -1.927 -11.999 8.227 2.899 ] /Resources 66 0 R /Filter /FlateDecode /Length 101 >>
+stream
+x=1
+A {BX8t+R B#+kaxe靖/G@;{Zx㺑 -\evJzc
+endstream
+endobj
+67 0 obj
+<< /Subtype/Form /BBox [ -0.492 -0.492 6.398 6.398 ] /Resources 68 0 R /Filter /FlateDecode /Length 107 >>
+stream
+x+2г0Q(24PU0Tb/.c=Kc 
+k2P0
+endstream
+endobj
+69 0 obj
+<< /Subtype/Form /BBox [ -4.137 -0.199 4.137 8.074 ] /Resources 70 0 R /Filter /FlateDecode /Length 101 >>
+stream
+xM;
+@ Db.`H XGNfAd)I8ΆTBqx.Oq[4EʇK;(%LCJ06:4)
+endstream
+endobj
+71 0 obj
+<< /Subtype/Form /BBox [ -0.199 -2.824 12.012 8.074 ] /Resources 72 0 R /Filter /FlateDecode /Length 135 >>
+stream
+x= 0 D{Mq @>+pdw]!"9w|'OR {g3;(vTJdzCtqX7&JKά!Vvha R\Eٯ6#>
++
+endstream
+endobj
+73 0 obj
+<< /Subtype/Form /BBox [ -0.199 -0.199 11.613 13.441 ] /Resources 74 0 R /Filter /FlateDecode /Length 92 >>
+stream
+xM 0 D{OqXN b 
+*RWӻ;HXpRH");:%2NH9O4T:C-_[ȽÅ.0
+endstream
+endobj
+75 0 obj
+<< /Subtype/Form /BBox [ -0.199 -0.199 7.676 8.894 ] /Resources 76 0 R /Filter /FlateDecode /Length 93 >>
+stream
+xMQ
+0 C{Z?[[~Bs]
+v(F=nt,59'$P6Y4Vi"
+endstream
+endobj
+77 0 obj
+<< /Subtype/Form /BBox [ -7.875 -7.875 7.875 7.875 ] /Resources 78 0 R /Filter /FlateDecode /Length 133 >>
+stream
+x]A ~~`ڐ/D!oV~(sx?]2~<%-fx*8RՏ%bYSt޽Jпs
+%Ǡ%q
+endstream
+endobj
+79 0 obj
+<< /Subtype/Form /BBox [ -5.25 -5.25 5.25 5.25 ] /Resources 80 0 R /Filter /FlateDecode /Length 132 >>
+stream
+x]A D=\D 'a\x} B]Pyׄǎ_~MN*9sBpQ"5U~*A<<٢xVpzʌ;>,n݌|xfG7 A
+endstream
+endobj
+81 0 obj
+<< /Subtype/Form /BBox [ -4.137 -4.137 10.957 8.074 ] /Resources 82 0 R /Filter /FlateDecode /Length 248 >>
+stream
+x]Q;nD1}
+.
+)7$+0 E%3dUc3^Sx?{?Rxw=.kAzsL z7}h8?(z1Ǟ/<ZuJ<=τh0FJ-gukF2C2c+ZVKyUDXP亅hn+ݼ [q3ZRa2HGh}rk;-_ה}fy,i'Bn
+endstream
+endobj
+83 0 obj
+<< /Subtype/Form /BBox [ -2.824 -2.824 7.371 5.449 ] /Resources 84 0 R /Filter /FlateDecode /Length 245 >>
+stream
+x]P;n1}
+.`d
+R EzE"W+0 I;9 IB}5
+j5r'T^׬}^{?wi<h̀?hzQ?F>gu"dS֮ܵsH9w1*hKcXxX/m2c4<@@X^# XernUޭ806=XhMcUۏs_%|
+endstream
+endobj
+85 0 obj
+<< /Subtype/Form /BBox [ -4.137 -4.137 8.074 4.137 ] /Resources 86 0 R /Filter /FlateDecode /Length 156 >>
+stream
+x]K! HPt+45EW~6v!70IS@dcė&'z"qWV`HK52Xtm䏷-`O+$&Ȕc}ڒXmwmԽLMTSZuBFC
+endstream
+endobj
+87 0 obj
+<< /Subtype/Form /BBox [ -2.824 -2.824 5.449 2.824 ] /Resources 88 0 R /Filter /FlateDecode /Length 157 >>
+stream
+x]A!E HT
+MhzwMfU_tPx$iq1"ܜOȩ@L,<^yV
+}VZNa?.fwϵ f(ItRUu⨺ݗwg
+4QEɘ[\Q
+=dJSp_[!B
+endstream
+endobj
+89 0 obj
+<< /Subtype/Form /BBox [ -2.598 -2.598 7.848 5.629 ] /Resources 90 0 R /Filter /FlateDecode /Length 61 >>
+stream
+x+234S(24PU0Tb/.\ Wegd`g`lEr
+endstream
+endobj
+91 0 obj
+<< /Subtype/Form /BBox [ -2.598 -2.598 6.098 4.618 ] /Resources 92 0 R /Filter /FlateDecode /Length 59 >>
+stream
+x+234S(24PU0Tb/.\ Weg`g`dDAJ
+endstream
+endobj
+93 0 obj
+<< /Subtype/Form /BBox [ -2.598 -2.598 10.473 7.144 ] /Resources 94 0 R /Filter /FlateDecode /Length 62 >>
+stream
+x+234S(24PU0Tb/.\ Wegan`gjbF恔r
+endstream
+endobj
+95 0 obj
+<< /Subtype/Form /BBox [ -2.598 -2.598 2.598 2.598 ] /Resources 96 0 R /Filter /FlateDecode /Length 43 >>
+stream
+x+234S(24PU0Tb/.\
+endstream
+endobj
+97 0 obj
+<< /Subtype/Form /BBox [ -2.598 -2.598 2.598 2.598 ] /Resources 98 0 R /Filter /FlateDecode /Length 43 >>
+stream
+x+234S(24PU0Tb/.\
+endstream
+endobj
+99 0 obj
+<< /Subtype/Form /BBox [ -2.598 -2.598 2.598 2.598 ] /Resources 100 0 R /Filter /FlateDecode /Length 43 >>
+stream
+x+234S(24PU0Tb/.\
+endstream
+endobj
+101 0 obj
+<< /Subtype/Form /BBox [ -2.598 -2.598 2.598 2.598 ] /Resources 102 0 R /Filter /FlateDecode /Length 43 >>
+stream
+x+234S(24PU0Tb/.\
+endstream
+endobj
+103 0 obj
+<< /Subtype/Form /BBox [ -2.598 -2.598 2.598 2.598 ] /Resources 104 0 R /Filter /FlateDecode /Length 43 >>
+stream
+x+234S(24PU0Tb/.\
+endstream
+endobj
+105 0 obj
+<< /Subtype/Form /BBox [ -2.598 -2.598 2.598 2.598 ] /Resources 106 0 R /Filter /FlateDecode /Length 43 >>
+stream
+x+234S(24PU0Tb/.\
+endstream
+endobj
+107 0 obj
+<< /Subtype/Form /BBox [ -2.897 -2.897 8.147 5.928 ] /Resources 108 0 R /Filter /FlateDecode /Length 61 >>
+stream
+x+234V(24PU0Tb/.\ Wegd`g`lEr
+endstream
+endobj
+109 0 obj
+<< /Subtype/Form /BBox [ -2.897 -2.897 6.397 4.917 ] /Resources 110 0 R /Filter /FlateDecode /Length 59 >>
+stream
+x+234V(24PU0Tb/.\ Weg`g`dDAJ
+endstream
+endobj
+111 0 obj
+<< /Subtype/Form /BBox [ -2.897 -2.897 10.772 7.443 ] /Resources 112 0 R /Filter /FlateDecode /Length 62 >>
+stream
+x+234V(24PU0Tb/.\ Wegan`gjbF恔r
+endstream
+endobj
+113 0 obj
+<< /Subtype/Form /BBox [ -2.897 -2.897 2.897 2.897 ] /Resources 114 0 R /Filter /FlateDecode /Length 43 >>
+stream
+x+234V(24PU0Tb/.\
+endstream
+endobj
+115 0 obj
+<< /Subtype/Form /BBox [ -2.897 -2.897 2.897 2.897 ] /Resources 116 0 R /Filter /FlateDecode /Length 43 >>
+stream
+x+234V(24PU0Tb/.\
+endstream
+endobj
+117 0 obj
+<< /Subtype/Form /BBox [ -2.897 -2.897 2.897 2.897 ] /Resources 118 0 R /Filter /FlateDecode /Length 43 >>
+stream
+x+234V(24PU0Tb/.\
+endstream
+endobj
+119 0 obj
+<< /Subtype/Form /BBox [ -2.897 -2.897 2.897 2.897 ] /Resources 120 0 R /Filter /FlateDecode /Length 43 >>
+stream
+x+234V(24PU0Tb/.\
+endstream
+endobj
+121 0 obj
+<< /Subtype/Form /BBox [ -2.897 -2.897 2.897 2.897 ] /Resources 122 0 R /Filter /FlateDecode /Length 43 >>
+stream
+x+234V(24PU0Tb/.\
+endstream
+endobj
+123 0 obj
+<< /Subtype/Form /BBox [ -2.897 -2.897 2.897 2.897 ] /Resources 124 0 R /Filter /FlateDecode /Length 43 >>
+stream
+x+234V(24PU0Tb/.\
+endstream
+endobj
+129 0 obj
+<< /Filter /FlateDecode /Length 1629 >>
+stream
+xڽۊ#7zku>0Ǚ.]$2 a.)TR[m32.WW*I-)!r̫PA?X&8 L2\L1dcH`ӓeRhjh~{H;?
+h1ګk6GkKuKo6{}ͣA\Tqc2]X©Zb) #çoX~do/?R//8Jeʬ.wk2LB@":Ta>+U\k,f'Dŧ=Oc-S+iM@*Glil
+i qz9PȭT) 5y=2,,i}1
+ {6Gk\r?;GT}Q Oy</Y8\{};.h`tEx >貈hz\[U5U\_rm~.Nt܏RxZe#qͮMiz9Iq.z4j Wx_{/mA) "d:5Uo@x=:1NX
+Z8Up\ 'x[{/aKG* "ؑd:ٛ&V FXΙXaC :lZl VڥOU{!mo+<0[(2{+{MkzyIB|/R
+/r*j˃@eŎ&#VkkhހzuCV~7Z4vb{۱~;ѯN
+endstream
+endobj
+135 0 obj
+<< /Filter /FlateDecode /Length 2094 >>
+stream
+xڽZj\7ߧ8/M@!Johԁ~#f#yϮػ3ҧ4V,<Er]p|{9}g~:
+ƷEa !J.g\,Bߋ<#F5^s.O*} W+Q37+sVV+##H7:Zz4!SQkXݜBys)_
+R1xb먾a#vϑ!A+>;g"DYvXϙ=@FKx
+!Xq i5u`հ iYcW؃mk潘gRF3Ԗ`Ý}["- 4aQn8Bzi8tKPkLЮeb&!v\0BpI)&hKf5L:}K |pWf1c喎[+z-Mڄp趂ס+ *t;B,@\f-[gp- ߖk*A4a>wo]8rG#hUq
+ASڣ6魪])UV9G#9"iiJ7GCv;UR`7[H>a2W ݪmrU$]o#hYjUzHX"q7ظ<TÄwj =l2CNjNQ1]> !ށlvyk7>YQh_K~E!qчDZ:T(c~dp$xʾh(tNO(fRq:=,/n>>4ӪZZN. ['vkSx!+C =ޭ;
+"^RAwYxO!I`b=[,q2qKCJtNJhmޚ;
+$04KU}
+$]CEЬ(7tlTjݧɉ
+:|J4nf؍3GkcӶgeoH̅{!Xq$=ZuQTNvK_y6Vep0"% iL SJoc[ =MJp躂Mty:L:/e@Ky5ש6j-dVAyYwTVBx7'zEre}𚸠!Ub␨,Qb1&QUv[8*CdZ ܽIU{W[?9Kڲ8HCءcߦ'Sg]MQ\ڰlC~Q(pH8qzW⬄*9:Ƈp1@J*.D5rZ)6ȨymI[N=^!>TqlhL`E
+'6%NHmvT,4%=8/Â3
+endstream
+endobj
+137 0 obj
+<< /PatternType 1 /PaintType 2 /TilingType 1 /XStep 100.000000 /YStep 5.250000
+/BBox [ 0 -1 100 1 ]
+/Matrix [ 0.86603 -0.5 0.5 0.86603 0 0 ] /Resources << /XObject << /PTempl 17 0 R >> >>
+ /Filter /FlateDecode /Length 18 >>
+stream
+xI-Qp
+endstream
+endobj
+138 0 obj
+<< /PatternType 1 /PaintType 2 /TilingType 1 /XStep 100.000000 /YStep 5.250000
+/BBox [ 0 -1 100 1 ]
+/Matrix [ 1 0 0 1 0 0 ] /Resources << /XObject << /PTempl 5 0 R >> >>
+ /Filter /FlateDecode /Length 18 >>
+stream
+xI-Qp
+endstream
+endobj
+139 0 obj
+<< /PatternType 1 /PaintType 2 /TilingType 1 /XStep 5.250000 /YStep 5.250000
+/BBox [ -2.598 -2.598 2.598 2.598 ]
+/Matrix [ 0.7071 -0.7071 0.7071 0.7071 0 0 ] /Resources << /XObject << /PTempl 97 0 R >> >>
+ /Filter /FlateDecode /Length 18 >>
+stream
+xI-Qp
+endstream
+endobj
+140 0 obj
+<< /PatternType 1 /PaintType 2 /TilingType 1 /XStep 10.500000 /YStep 6.062160
+/BBox [ -2.897 -2.897 8.147 5.928 ]
+/Matrix [ 1 0 0 1 0 0 ] /Resources << /XObject << /PTempl 107 0 R >> >>
+ /Filter /FlateDecode /Length 18 >>
+stream
+xI-Qp
+endstream
+endobj
+141 0 obj
+<< /PatternType 1 /PaintType 2 /TilingType 1 /XStep 9.093290 /YStep 5.250000
+/BBox [ -2.824 -2.824 7.371 5.449 ]
+/Matrix [ 1 0 0 1 0 0 ] /Resources << /XObject << /PTempl 83 0 R >> >>
+ /Filter /FlateDecode /Length 18 >>
+stream
+xI-Qp
+endstream
+endobj
+142 0 obj
+<< /PatternType 1 /PaintType 2 /TilingType 1 /XStep 10.500000 /YStep 10.500000
+/BBox [ -1.699 -1.699 6.949 6.949 ]
+/Matrix [ 0.7071 -0.7071 0.7071 0.7071 0 0 ] /Resources << /XObject << /PTempl 49 0 R >> >>
+ /Filter /FlateDecode /Length 18 >>
+stream
+xI-Qp
+endstream
+endobj
+143 0 obj
+<< /PatternType 1 /PaintType 2 /TilingType 1 /XStep 7.875000 /YStep 7.875000
+/BBox [ -4.137 -4.137 8.074 4.137 ]
+/Matrix [ 1 0 0 1 0 0 ] /Resources << /XObject << /PTempl 85 0 R >> >>
+ /Filter /FlateDecode /Length 18 >>
+stream
+xI-Qp
+endstream
+endobj
+144 0 obj
+<< /PatternType 1 /PaintType 2 /TilingType 1 /XStep 3.500000 /YStep 3.500000
+/BBox [ 0 0 3.5 3.5 ]
+/Matrix [ 1 0 0 1 0 0 ] /Resources << /XObject << /PTempl 39 0 R >> >>
+ /Filter /FlateDecode /Length 18 >>
+stream
+xI-Qp
+endstream
+endobj
+145 0 obj
+<< /PatternType 1 /PaintType 2 /TilingType 1 /XStep 7.875000 /YStep 7.875000
+/BBox [ -2.897 -2.897 2.897 2.897 ]
+/Matrix [ 0.7071 -0.7071 0.7071 0.7071 0 0 ] /Resources << /XObject << /PTempl 123 0 R >> >>
+ /Filter /FlateDecode /Length 18 >>
+stream
+xI-Qp
+endstream
+endobj
+146 0 obj
+<< /PatternType 1 /PaintType 2 /TilingType 1 /XStep 3.500000 /YStep 3.500000
+/BBox [ -2.598 -2.598 2.598 2.598 ]
+/Matrix [ 0.7071 -0.7071 0.7071 0.7071 0 0 ] /Resources << /XObject << /PTempl 101 0 R >> >>
+ /Filter /FlateDecode /Length 18 >>
+stream
+xI-Qp
+endstream
+endobj
+147 0 obj
+<< /PatternType 1 /PaintType 2 /TilingType 1 /XStep 5.250000 /YStep 5.250000
+/BBox [ 0 0 5.25 5.25 ]
+/Matrix [ 1 0 0 1 0 0 ] /Resources << /XObject << /PTempl 37 0 R >> >>
+ /Filter /FlateDecode /Length 18 >>
+stream
+xI-Qp
+endstream
+endobj
+148 0 obj
+<< /PatternType 1 /PaintType 2 /TilingType 1 /XStep 3.500000 /YStep 3.500000
+/BBox [ 0 0 3.5 3.5 ]
+/Matrix [ 0.86603 -0.5 0.5 0.86603 0 0 ] /Resources << /XObject << /PTempl 35 0 R >> >>
+ /Filter /FlateDecode /Length 18 >>
+stream
+xI-Qp
+endstream
+endobj
+149 0 obj
+<< /PatternType 1 /PaintType 2 /TilingType 1 /XStep 5.250000 /YStep 5.250000
+/BBox [ -5.25 -5.25 5.25 5.25 ]
+/Matrix [ 1 0 0 1 0 0 ] /Resources << /XObject << /PTempl 79 0 R >> >>
+ /Filter /FlateDecode /Length 18 >>
+stream
+xI-Qp
+endstream
+endobj
+150 0 obj
+<< /PatternType 1 /PaintType 2 /TilingType 1 /XStep 3.500000 /YStep 3.500000
+/BBox [ 0 0 3.5 3.5 ]
+/Matrix [ 0.86603 0.5 -0.5 0.86603 0 0 ] /Resources << /XObject << /PTempl 31 0 R >> >>
+ /Filter /FlateDecode /Length 18 >>
+stream
+xI-Qp
+endstream
+endobj
+151 0 obj
+<< /PatternType 1 /PaintType 2 /TilingType 1 /XStep 7.875000 /YStep 7.875000
+/BBox [ -7.875 -7.875 7.875 7.875 ]
+/Matrix [ 1 0 0 1 0 0 ] /Resources << /XObject << /PTempl 77 0 R >> >>
+ /Filter /FlateDecode /Length 18 >>
+stream
+xI-Qp
+endstream
+endobj
+152 0 obj
+<< /PatternType 1 /PaintType 2 /TilingType 1 /XStep 14.000000 /YStep 7.000000
+/BBox [ -2.199 -2.199 19.699 5.699 ]
+/Matrix [ 1 0 0 1 0 0 ] /Resources << /XObject << /PTempl 23 0 R >> >>
+ /Filter /FlateDecode /Length 18 >>
+stream
+xI-Qp
+endstream
+endobj
+153 0 obj
+<< /PatternType 1 /PaintType 2 /TilingType 1 /XStep 3.500000 /YStep 3.500000
+/BBox [ -2.897 -2.897 2.897 2.897 ]
+/Matrix [ 0.7071 -0.7071 0.7071 0.7071 0 0 ] /Resources << /XObject << /PTempl 119 0 R >> >>
+ /Filter /FlateDecode /Length 18 >>
+stream
+xI-Qp
+endstream
+endobj
+154 0 obj
+<< /PatternType 1 /PaintType 2 /TilingType 1 /XStep 3.500000 /YStep 3.500000
+/BBox [ -2.897 -2.897 2.897 2.897 ]
+/Matrix [ 1 0 0 1 0 0 ] /Resources << /XObject << /PTempl 117 0 R >> >>
+ /Filter /FlateDecode /Length 18 >>
+stream
+xI-Qp
+endstream
+endobj
+155 0 obj
+<< /PatternType 1 /PaintType 2 /TilingType 1 /XStep 100.000000 /YStep 3.500000
+/BBox [ 0 -1 100 1 ]
+/Matrix [ 0 -1 1 0 0 0 ] /Resources << /XObject << /PTempl 11 0 R >> >>
+ /Filter /FlateDecode /Length 18 >>
+stream
+xI-Qp
+endstream
+endobj
+156 0 obj
+<< /PatternType 1 /PaintType 2 /TilingType 1 /XStep 5.250000 /YStep 5.250000
+/BBox [ -2.897 -2.897 2.897 2.897 ]
+/Matrix [ 1 0 0 1 0 0 ] /Resources << /XObject << /PTempl 113 0 R >> >>
+ /Filter /FlateDecode /Length 18 >>
+stream
+xI-Qp
+endstream
+endobj
+157 0 obj
+<< /PatternType 1 /PaintType 2 /TilingType 1 /XStep 5.250000 /YStep 5.250000
+/BBox [ -2.897 -2.897 2.897 2.897 ]
+/Matrix [ 0.7071 -0.7071 0.7071 0.7071 0 0 ] /Resources << /XObject << /PTempl 115 0 R >> >>
+ /Filter /FlateDecode /Length 18 >>
+stream
+xI-Qp
+endstream
+endobj
+158 0 obj
+<< /PatternType 1 /PaintType 2 /TilingType 1 /XStep 15.750000 /YStep 9.093250
+/BBox [ -2.897 -2.897 10.772 7.443 ]
+/Matrix [ 1 0 0 1 0 0 ] /Resources << /XObject << /PTempl 111 0 R >> >>
+ /Filter /FlateDecode /Length 18 >>
+stream
+xI-Qp
+endstream
+endobj
+159 0 obj
+<< /PatternType 1 /PaintType 2 /TilingType 1 /XStep 7.000000 /YStep 4.041440
+/BBox [ -2.897 -2.897 6.397 4.917 ]
+/Matrix [ 1 0 0 1 0 0 ] /Resources << /XObject << /PTempl 109 0 R >> >>
+ /Filter /FlateDecode /Length 18 >>
+stream
+xI-Qp
+endstream
+endobj
+160 0 obj
+<< /PatternType 1 /PaintType 2 /TilingType 1 /XStep 13.639940 /YStep 7.875000
+/BBox [ -4.137 -4.137 10.957 8.074 ]
+/Matrix [ 1 0 0 1 0 0 ] /Resources << /XObject << /PTempl 81 0 R >> >>
+ /Filter /FlateDecode /Length 18 >>
+stream
+xI-Qp
+endstream
+endobj
+161 0 obj
+<< /PatternType 1 /PaintType 2 /TilingType 1 /XStep 7.875000 /YStep 7.875000
+/BBox [ -2.598 -2.598 2.598 2.598 ]
+/Matrix [ 0.7071 -0.7071 0.7071 0.7071 0 0 ] /Resources << /XObject << /PTempl 105 0 R >> >>
+ /Filter /FlateDecode /Length 18 >>
+stream
+xI-Qp
+endstream
+endobj
+162 0 obj
+<< /PatternType 1 /PaintType 2 /TilingType 1 /XStep 10.500000 /YStep 10.500000
+/BBox [ -0.199 -0.199 15.551 10.301 ]
+/Matrix [ 1 0 0 1 0 0 ] /Resources << /XObject << /PTempl 61 0 R >> >>
+ /Filter /FlateDecode /Length 18 >>
+stream
+xI-Qp
+endstream
+endobj
+163 0 obj
+<< /PatternType 1 /PaintType 2 /TilingType 1 /XStep 7.875000 /YStep 7.875000
+/BBox [ -2.598 -2.598 2.598 2.598 ]
+/Matrix [ 1 0 0 1 0 0 ] /Resources << /XObject << /PTempl 103 0 R >> >>
+ /Filter /FlateDecode /Length 18 >>
+stream
+xI-Qp
+endstream
+endobj
+164 0 obj
+<< /PatternType 1 /PaintType 2 /TilingType 1 /XStep 100.000000 /YStep 5.250000
+/BBox [ 0 -1 100 1 ]
+/Matrix [ 0.86603 0.5 -0.5 0.86603 0 0 ] /Resources << /XObject << /PTempl 13 0 R >> >>
+ /Filter /FlateDecode /Length 18 >>
+stream
+xI-Qp
+endstream
+endobj
+165 0 obj
+<< /PatternType 1 /PaintType 2 /TilingType 1 /XStep 5.250000 /YStep 5.250000
+/BBox [ 0 0 5.25 5.25 ]
+/Matrix [ 0.7071 -0.7071 0.7071 0.7071 0 0 ] /Resources << /XObject << /PTempl 25 0 R >> >>
+ /Filter /FlateDecode /Length 18 >>
+stream
+xI-Qp
+endstream
+endobj
+166 0 obj
+<< /PatternType 1 /PaintType 2 /TilingType 1 /XStep 100.000000 /YStep 3.500000
+/BBox [ 0 -1 100 1 ]
+/Matrix [ 1 0 0 1 0 0 ] /Resources << /XObject << /PTempl 7 0 R >> >>
+ /Filter /FlateDecode /Length 18 >>
+stream
+xI-Qp
+endstream
+endobj
+167 0 obj
+<< /PatternType 1 /PaintType 2 /TilingType 1 /XStep 5.250000 /YStep 5.250000
+/BBox [ -2.598 -2.598 2.598 2.598 ]
+/Matrix [ 1 0 0 1 0 0 ] /Resources << /XObject << /PTempl 95 0 R >> >>
+ /Filter /FlateDecode /Length 18 >>
+stream
+xI-Qp
+endstream
+endobj
+168 0 obj
+<< /PatternType 1 /PaintType 2 /TilingType 1 /XStep 10.500000 /YStep 10.500000
+/BBox [ -0.199 -0.199 10.301 10.301 ]
+/Matrix [ 0.7071 -0.7071 0.7071 0.7071 0 0 ] /Resources << /XObject << /PTempl 63 0 R >> >>
+ /Filter /FlateDecode /Length 18 >>
+stream
+xI-Qp
+endstream
+endobj
+169 0 obj
+<< /PatternType 1 /PaintType 2 /TilingType 1 /XStep 7.875000 /YStep 13.639900
+/BBox [ -0.199 -0.199 11.613 13.441 ]
+/Matrix [ 1 0 0 1 0 0 ] /Resources << /XObject << /PTempl 73 0 R >> >>
+ /Filter /FlateDecode /Length 18 >>
+stream
+xI-Qp
+endstream
+endobj
+170 0 obj
+<< /PatternType 1 /PaintType 2 /TilingType 1 /XStep 5.250000 /YStep 5.250000
+/BBox [ 0 0 5.25 5.25 ]
+/Matrix [ 0.7071 -0.7071 0.7071 0.7071 0 0 ] /Resources << /XObject << /PTempl 59 0 R >> >>
+ /Filter /FlateDecode /Length 18 >>
+stream
+xI-Qp
+endstream
+endobj
+171 0 obj
+<< /PatternType 1 /PaintType 2 /TilingType 1 /XStep 7.000000 /YStep 7.000000
+/BBox [ -1.699 -1.699 5.199 5.199 ]
+/Matrix [ 0.7071 -0.7071 0.7071 0.7071 0 0 ] /Resources << /XObject << /PTempl 53 0 R >> >>
+ /Filter /FlateDecode /Length 18 >>
+stream
+xI-Qp
+endstream
+endobj
+172 0 obj
+<< /PatternType 1 /PaintType 2 /TilingType 1 /XStep 100.000000 /YStep 5.250000
+/BBox [ 0 -1 100 1 ]
+/Matrix [ 0 -1 1 0 0 0 ] /Resources << /XObject << /PTempl 9 0 R >> >>
+ /Filter /FlateDecode /Length 18 >>
+stream
+xI-Qp
+endstream
+endobj
+173 0 obj
+<< /PatternType 1 /PaintType 2 /TilingType 1 /XStep 5.250000 /YStep 5.250000
+/BBox [ -2.824 -2.824 5.449 2.824 ]
+/Matrix [ 1 0 0 1 0 0 ] /Resources << /XObject << /PTempl 87 0 R >> >>
+ /Filter /FlateDecode /Length 18 >>
+stream
+xI-Qp
+endstream
+endobj
+174 0 obj
+<< /PatternType 1 /PaintType 2 /TilingType 1 /XStep 15.750000 /YStep 10.500000
+/BBox [ -2.199 -2.199 20.574 7.449 ]
+/Matrix [ 1 0 0 1 0 0 ] /Resources << /XObject << /PTempl 21 0 R >> >>
+ /Filter /FlateDecode /Length 18 >>
+stream
+xI-Qp
+endstream
+endobj
+175 0 obj
+<< /PatternType 1 /PaintType 2 /TilingType 1 /XStep 5.250000 /YStep 9.093200
+/BBox [ -0.199 -0.199 7.676 8.894 ]
+/Matrix [ 1 0 0 1 0 0 ] /Resources << /XObject << /PTempl 75 0 R >> >>
+ /Filter /FlateDecode /Length 18 >>
+stream
+xI-Qp
+endstream
+endobj
+176 0 obj
+<< /PatternType 1 /PaintType 2 /TilingType 1 /XStep 3.500000 /YStep 3.500000
+/BBox [ 0 0 3.5 3.5 ]
+/Matrix [ 0.7071 -0.7071 0.7071 0.7071 0 0 ] /Resources << /XObject << /PTempl 27 0 R >> >>
+ /Filter /FlateDecode /Length 18 >>
+stream
+xI-Qp
+endstream
+endobj
+177 0 obj
+<< /PatternType 1 /PaintType 2 /TilingType 1 /XStep 100.000000 /YStep 3.500000
+/BBox [ 0 -1 100 1 ]
+/Matrix [ 0.86603 -0.5 0.5 0.86603 0 0 ] /Resources << /XObject << /PTempl 19 0 R >> >>
+ /Filter /FlateDecode /Length 18 >>
+stream
+xI-Qp
+endstream
+endobj
+178 0 obj
+<< /PatternType 1 /PaintType 2 /TilingType 1 /XStep 5.250000 /YStep 5.250000
+/BBox [ 0 0 5.25 5.25 ]
+/Matrix [ 0.7071 -1.06067 0.7071 1.06067 0 0 ] /Resources << /XObject << /PTempl 43 0 R >> >>
+ /Filter /FlateDecode /Length 18 >>
+stream
+xI-Qp
+endstream
+endobj
+179 0 obj
+<< /PatternType 1 /PaintType 2 /TilingType 1 /XStep 5.250000 /YStep 5.250000
+/BBox [ 0 0 5.25 5.25 ]
+/Matrix [ 1.06067 -0.7071 1.06067 0.7071 0 0 ] /Resources << /XObject << /PTempl 41 0 R >> >>
+ /Filter /FlateDecode /Length 18 >>
+stream
+xI-Qp
+endstream
+endobj
+180 0 obj
+<< /PatternType 1 /PaintType 2 /TilingType 1 /XStep 5.250000 /YStep 5.250000
+/BBox [ 0 0 5.25 5.25 ]
+/Matrix [ 0.86603 0.5 -0.5 0.86603 0 0 ] /Resources << /XObject << /PTempl 29 0 R >> >>
+ /Filter /FlateDecode /Length 18 >>
+stream
+xI-Qp
+endstream
+endobj
+181 0 obj
+<< /PatternType 1 /PaintType 2 /TilingType 1 /XStep 7.000000 /YStep 4.041440
+/BBox [ -2.598 -2.598 6.098 4.618 ]
+/Matrix [ 1 0 0 1 0 0 ] /Resources << /XObject << /PTempl 91 0 R >> >>
+ /Filter /FlateDecode /Length 18 >>
+stream
+xI-Qp
+endstream
+endobj
+182 0 obj
+<< /PatternType 1 /PaintType 2 /TilingType 1 /XStep 7.875000 /YStep 10.500000
+/BBox [ -0.199 -2.824 12.012 8.074 ]
+/Matrix [ 1 0 0 1 0 0 ] /Resources << /XObject << /PTempl 71 0 R >> >>
+ /Filter /FlateDecode /Length 18 >>
+stream
+xI-Qp
+endstream
+endobj
+183 0 obj
+<< /PatternType 1 /PaintType 2 /TilingType 1 /XStep 7.875000 /YStep 5.250000
+/BBox [ -4.137 -0.199 4.137 8.074 ]
+/Matrix [ 1 0 0 1 0 0 ] /Resources << /XObject << /PTempl 69 0 R >> >>
+ /Filter /FlateDecode /Length 18 >>
+stream
+xI-Qp
+endstream
+endobj
+184 0 obj
+<< /PatternType 1 /PaintType 2 /TilingType 1 /XStep 7.875000 /YStep 7.875000
+/BBox [ -2.897 -2.897 2.897 2.897 ]
+/Matrix [ 1 0 0 1 0 0 ] /Resources << /XObject << /PTempl 121 0 R >> >>
+ /Filter /FlateDecode /Length 18 >>
+stream
+xI-Qp
+endstream
+endobj
+185 0 obj
+<< /PatternType 1 /PaintType 2 /TilingType 1 /XStep 14.700040 /YStep 4.200010
+/BBox [ -1.927 -11.999 8.227 2.899 ]
+/Matrix [ 1 0 0 1 0 0 ] /Resources << /XObject << /PTempl 65 0 R >> >>
+ /Filter /FlateDecode /Length 18 >>
+stream
+xI-Qp
+endstream
+endobj
+186 0 obj
+<< /PatternType 1 /PaintType 2 /TilingType 1 /XStep 15.750000 /YStep 9.093250
+/BBox [ -2.598 -2.598 10.473 7.144 ]
+/Matrix [ 1 0 0 1 0 0 ] /Resources << /XObject << /PTempl 93 0 R >> >>
+ /Filter /FlateDecode /Length 18 >>
+stream
+xI-Qp
+endstream
+endobj
+187 0 obj
+<< /PatternType 1 /PaintType 2 /TilingType 1 /XStep 10.500000 /YStep 10.500000
+/BBox [ -3.199 -3.199 8.449 8.449 ]
+/Matrix [ 0.7071 -0.7071 0.7071 0.7071 0 0 ] /Resources << /XObject << /PTempl 51 0 R >> >>
+ /Filter /FlateDecode /Length 18 >>
+stream
+xI-Qp
+endstream
+endobj
+188 0 obj
+<< /PatternType 1 /PaintType 2 /TilingType 1 /XStep 3.500000 /YStep 3.500000
+/BBox [ 0 0 3.5 3.5 ]
+/Matrix [ 0.7071 -1.06067 0.7071 1.06067 0 0 ] /Resources << /XObject << /PTempl 47 0 R >> >>
+ /Filter /FlateDecode /Length 18 >>
+stream
+xI-Qp
+endstream
+endobj
+189 0 obj
+<< /PatternType 1 /PaintType 2 /TilingType 1 /XStep 10.500000 /YStep 6.062160
+/BBox [ -2.598 -2.598 7.848 5.629 ]
+/Matrix [ 1 0 0 1 0 0 ] /Resources << /XObject << /PTempl 89 0 R >> >>
+ /Filter /FlateDecode /Length 18 >>
+stream
+xI-Qp
+endstream
+endobj
+190 0 obj
+<< /PatternType 1 /PaintType 2 /TilingType 1 /XStep 3.500000 /YStep 3.500000
+/BBox [ -2.598 -2.598 2.598 2.598 ]
+/Matrix [ 1 0 0 1 0 0 ] /Resources << /XObject << /PTempl 99 0 R >> >>
+ /Filter /FlateDecode /Length 18 >>
+stream
+xI-Qp
+endstream
+endobj
+191 0 obj
+<< /PatternType 1 /PaintType 2 /TilingType 1 /XStep 7.875000 /YStep 7.875000
+/BBox [ -0.492 -0.492 6.398 6.398 ]
+/Matrix [ 1 0 0 1 0 0 ] /Resources << /XObject << /PTempl 67 0 R >> >>
+ /Filter /FlateDecode /Length 18 >>
+stream
+xI-Qp
+endstream
+endobj
+192 0 obj
+<< /PatternType 1 /PaintType 2 /TilingType 1 /XStep 5.250000 /YStep 10.500000
+/BBox [ -0.875 0 4.375 10.5 ]
+/Matrix [ 1 0 0 1 0 0 ] /Resources << /XObject << /PTempl 57 0 R >> >>
+ /Filter /FlateDecode /Length 18 >>
+stream
+xI-Qp
+endstream
+endobj
+193 0 obj
+<< /PatternType 1 /PaintType 2 /TilingType 1 /XStep 5.250000 /YStep 5.250000
+/BBox [ 0 0 5.25 5.25 ]
+/Matrix [ 0.86603 -0.5 0.5 0.86603 0 0 ] /Resources << /XObject << /PTempl 33 0 R >> >>
+ /Filter /FlateDecode /Length 18 >>
+stream
+xI-Qp
+endstream
+endobj
+194 0 obj
+<< /PatternType 1 /PaintType 2 /TilingType 1 /XStep 10.500000 /YStep 5.250000
+/BBox [ 0 -0.875 10.5 4.375 ]
+/Matrix [ 1 0 0 1 0 0 ] /Resources << /XObject << /PTempl 55 0 R >> >>
+ /Filter /FlateDecode /Length 18 >>
+stream
+xI-Qp
+endstream
+endobj
+195 0 obj
+<< /PatternType 1 /PaintType 2 /TilingType 1 /XStep 3.500000 /YStep 3.500000
+/BBox [ 0 0 3.5 3.5 ]
+/Matrix [ 1.06067 -0.7071 1.06067 0.7071 0 0 ] /Resources << /XObject << /PTempl 45 0 R >> >>
+ /Filter /FlateDecode /Length 18 >>
+stream
+xI-Qp
+endstream
+endobj
+196 0 obj
+<< /PatternType 1 /PaintType 2 /TilingType 1 /XStep 100.000000 /YStep 3.500000
+/BBox [ 0 -1 100 1 ]
+/Matrix [ 0.86603 0.5 -0.5 0.86603 0 0 ] /Resources << /XObject << /PTempl 15 0 R >> >>
+ /Filter /FlateDecode /Length 18 >>
+stream
+xI-Qp
+endstream
+endobj
+199 0 obj
+<< /Type/Metadata /Subtype/XML /Length 1304 >>
+stream
+<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
+<x:xmpmeta xmlns:x="adobe:ns:meta/">
+<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+ <rdf:Description rdf:about="" xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <dc:creator>
+ <rdf:Seq>
+ <rdf:li>Esger Renkema</rdf:li>
+ </rdf:Seq>
+ </dc:creator>
+ <dc:date>
+ <rdf:Seq>
+ <rdf:li>2021-06-01</rdf:li>
+ </rdf:Seq>
+ </dc:date>
+ <dc:format>application/pdf</dc:format>
+ <dc:subject>
+ <rdf:Bag>
+ <rdf:li>MetaPost</rdf:li>
+ <rdf:li>tiling patterns</rdf:li>
+ </rdf:Bag>
+ </dc:subject>
+ <dc:title>
+ <rdf:Alt>
+ <rdf:li xml:lang="x-default">minim-hatching</rdf:li>
+ </rdf:Alt>
+ </dc:title>
+ </rdf:Description>
+ <rdf:Description rdf:about="" xmlns:pdf="http://ns.adobe.com/pdf/1.3/">
+ <pdf:Keywords>MetaPost, tiling patterns</pdf:Keywords>
+ </rdf:Description>
+ <rdf:Description rdf:about="" xmlns:xmp="http://ns.adobe.com/xap/1.0/">
+ <xmp:CreateDate>2021-06-01</xmp:CreateDate>
+ <xmp:ModifyDate>2021-06-01</xmp:ModifyDate>
+ </rdf:Description>
+ <rdf:Description rdf:about="" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/">
+ <xmpMM:VersionID>2021/1.0</xmpMM:VersionID>
+ </rdf:Description>
+</rdf:RDF>
+</x:xmpmeta>
+<?xpacket end="r"?>
+endstream
+endobj
+202 0 obj
+<< /Filter /FlateDecode /Length 24 >>
+stream
+xc``M|=n;Z
+
+endstream
+endobj
+203 0 obj
+<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 5385 >>
+stream
+xڵY t[յ}0&$U肮i
+nE@u^]` !n' 889bΜZL)y`}LTdqQqL,,.,-,r=NiYQUDV"Y# WH
+I\V_P\!Q)VI]]RDY&,\zdF)yXZJOHRL}| e}iL^:Q5zbF /[3Es/[=PQJJdr.JQdꢪ'wvJ(˕Z
+2Ǎ[~ '\QP"bOcPQmϬSsF -¸LFw5#nݭCvusKUfJt7
+7^p?A`eцmΦľpwa PwT뗒 fJ.o }r7<{=K!5 ܂st9y4Ss)'n9mYzHTD=\?HM.}T j{ڊ
+L!Z>E7[U d3~`!j2o|W€?6)[V`EqN,>F^G4냼Y͕ H{TNº죀ʳY)
+F iiKD:('. A *1!D9rRfHbtqkgBګa4xNS/FA3l@snn6Li}P c˽rmi5Lf/܋Ji"sPD%itq~hwC+)4
+>kZ;
+Ux{6
+p-qg:zPVU뎗xU8 KbCG,b!/#gCN (.m{<u10|X(<Q^$@tN77(1٦|ol15㴘_%JmdJܑB@<,4\֣Ǘo(9>!%d,6 t+1 4 U3$@R^KK3ōyQӂJ\@1qQ? kkZb7+<YWX(LQt P/Kh}>ba
+XcqN=(
+c1/Q ϡ ג;SGײ4&ySt*8eܜ9X M8
+v$գeu?nTVըen};]̇3'C~+ŧւ)
+v
+~ٛr 1𓦃A2P^ew./\`63~=8tJPSV4rTu|x8{~8Q C7t=gӰʹlNƲj"[&OkߚT?(xyAuitA@p@G{^+P= lV([kZ 35?\n6:KXA;hmi3cN8Ha|9 
+Ff_aR Obn cFʭrF>]|0y_%O϶}{]:/P(6cT3by_;JkQr곦Gs ڲyu]'E@fuDnjc/k:Yu`x:M<:|w>J퐮uK[W)v+.YFSfrj9kqbO:\32z(`ibIm|A7&3 ~Md}0s*Í/+H$ҭAj`jjר ]>v^,wP;I緗k.wqj5x?6qMMg:zݝ ۚ8tcUVm<e }99~]3;aÊ>Cb4>G'_(XV ZZrJpd
+F
+6*ONfK\/;Weo 3!-`ƺ"UK{7}! !{7YB͹A :}ށҰ謰l9 cx!-.lkTef&d9`EYek6kaaȱx=Ҿv<xi.18hI[U}M;S*/&K[%A~Ax7`VBHoƌO23W6'ˑF`.)ukM- v,P-Ca*PR5v^([_0Gc|AH>*]3Iv]qяPAQ^`rRuMܐsN6@"7f/Bt9\ #-X/a ͙
+-9M|W領$Ա S&^eH-@S]M6Iy ) G;ޗ;e(Oi-{0
+
+ _8F wiԕ@nMtE"1<:oVPIU ;c_{zi*^x8Ԏ$9=}NF4pKGst[<pkg:P=`P $su_ GWv6vռ$
+ +lw0DL>i{%愯bw 8\ؓw.eoލm N31h^߯?
+-ښfanbHi`CEU ͦj g]bsm{f%ԡkfJ/Of]s-`[-wd
+_WF@T˂OSjH5|0Ow.႖̉E×>4f{;߫= Z/M%LP1]
+SƜuUV8ձTզ8S{pD2w>Xshe
+O+evh.Sdc7B'@W]IՔjȯ^R Pcҙ4PW CHWzO,:\wntb?;Q`kXgfnqƎũz'AzAQPd]Z폶;RSP}ec n=W"@s=sP9etn+w&ٹ| P*e >nlk:;6Y=$VM Tڦ+Ta]{?7)0x$h!ԔoXV\W]W,^%_X71`kuh$Y?Tv=^tk.(xN<1>:-ww0)?F|mDx?qtz[
+CB')ݚc5,e #0xw}ۍx:rd9I)ٝ;;w!kjt*)ϲĩ#`(\h2 x(˘u-37POxMՌ7~pSӾ/`h6x
+endstream
+endobj
+204 0 obj
+<< /Filter /FlateDecode /Length 572 >>
+stream
+xڍ[o0+H!Ź
+!(+md`#9~mZ$_<sff>䞳-u
+/yF˺/Wa}d];x^Uݙ*}ICԿtGa=7_˶jtϹݺ̄[!%IjȢ{ιyE}ěfcJ흳#bVVE9ywm;ձS61ULtIR'6e95x0&k~!6Xf7qmŎ#X/&/HDԴte>Tic44?Iy- Pb"EBdZ:2:J"(dk$H,R%
+9= 8Kh^
+<yuij zb^.eRAP2F A=
+P)PD$:/"s™@}12i zWif8%Hz/8#IxOB]9;v&G6̓Jl7ucw{) +Ko/:a
+endstream
+endobj
+208 0 obj
+<< /Filter /FlateDecode /Length 24 >>
+stream
+xc```0V0Ll`x
+endstream
+endobj
+209 0 obj
+<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 2797 >>
+stream
+x}W TW2 љ]|ۊ`@j
+j-Tz-uumnk۝ݶsn+\]1H4%8$ ")) mS(*ƹ`=,?d"i+.nww==Y:Yd
+9&S;w4ħ17LMbߊp)Ѣ>~~֪S34o\縜a7cڤDVna7!ta6Nac rU<gYVѲJZÆ%$jt&5
+BUı8%(al:EnLUhy,U(.uNQk"76 $4GWƫ5lB'OTi}~3 Qk5qEp"Ek26{|
+l%"cA&l+Ecr,SbX2 T 7$+IDruq"3?IKZ%('bF7Qao46c.JhB\"":AnQZ+8z_]}euݱ
+SոL<`ܘR&"J+{}#穚kƠs&FƟ:oŴ`Zˉ|ǧ΃VY 0" ySQD7̵SB˺
+QG=f`<NU
+o1avQ-_H'eCV<³p1\igO{&e3cM>(KL>qm/ C׃Y N!" =É }'F*)F'IcAM( /ZHC9ffJ<ĥzHDw42}W
+Bd|mNO!>
+Qq%Q'e4Ty
+$AogG
+M
+ -j.8r d@A,T<M)‘
+endstream
+endobj
+210 0 obj
+<< /Filter /FlateDecode /Length 475 >>
+stream
+xڍQ0)rmZkHAB]Tn&II%tCN?8~\ =RN AXm0kГiY+)c$F׿M+m~n
+US ?c2\kRzՄ g!./НPďRb#ypDhmWNN NYc&gg,$2'7WCiZ +C^EhP7s MUc<Z KgC t-/,8hA[)/bh $%Yk(.M"J,3j6H[Ԑf gɑ|O>QgV"=iq4,)uSGEJ9ǎ2</%>5/r/G|'&k/n"Akn-6Ur[_hm`&
+endstream
+endobj
+214 0 obj
+<< /Trapped /False >>
+endobj
+3 0 obj
+<< /Type /ObjStm /N 82 /First 646 /Filter /FlateDecode /Length 1752 >>
+stream
+xXnG}Wԣ4=}]dYtd (|ci6 A^ZZ'`!/էn]U'D |%(-Z+6V :VKǾTFMYK FURb*/ 2eتS^q8A-VX-Tbxm:@kxuxuZVg$
+
+)
+, ډ0`o\t -U"4x9M+K(1rhiKhF+ғモê)٬S9zsqvΧSQp˴;^WfvtFknۍM#?|'s:l]Oǫ/m
+N%hOg٠N՘SF
+8!sp`{dſt/~ <3;Q֐,Fv$b+{q1z1$$ZBnx,\iLV.w+!H|ܭՀ.i)p޼]RǗ&ݲ01U+ǚmaܳFv;S8W?4
+!)S:)Itrt?7hBZ8iVv) []<rtg<^'Qa
+S5Wqzp`)*L
+д;TŻO^ 꾻v 99HY=
+N@P!x끀 >WK8P+q?P88p}<&6ªx.(?Z~%ܧ7;,"}~cg5 ﻋ1w lL蝚6CA;-㢤_
+endstream
+endobj
+215 0 obj
+<< /Type /XRef /Index [ 0 216 ] /Size 216 /W [ 1 2 1 ] /Root 213 0 R /Info 214 0 R /ID [ <43A5AF486BCB81A60EC998573D907A2D> <43A5AF486BCB81A60EC998573D907A2D> ] /Filter /FlateDecode /Length 585 >>
+stream
+xyLq׳r E#GHrU?*]tP9rarLΑk9qg,Yl_c|{JB'9L!v qQqM⏚R.]YovcVٝ` f j̞4{bM3rif_ҾH`2 cnٟ
+sǘcXmea9E,bg\&PfNьbw=X^`FS=ɔ7c(?nNaE90stV63XUmƲڛққΜZbP3Jr%s]Y|Wk6km=b[/ֈ=bE)v{FbB)␛9.L)h8vX-N'S!t8%κ3s&q᫸$q9B\)Wĵۿo~~Pq', Dc[/E_%_<X/ֈGx!=2\/?Һֲ]9y K,Gk
+endstream
+endobj
+startxref
+61280
+%%EOF
diff --git a/graphics/minim-hatching/minim-hatching.mp b/graphics/minim-hatching/minim-hatching.mp
new file mode 100644
index 0000000000..559b812469
--- /dev/null
+++ b/graphics/minim-hatching/minim-hatching.mp
@@ -0,0 +1,225 @@
+
+%% To be used with the minim-mp metapost processor. See minim-hatching-doc.mp
+%% for an overview of the patterns defined below.
+
+
+% 1 definition macros
+
+def new_linepattern(suffix name)(expr sep, rot) =
+ beginpattern(name)
+ draw origin -- (100,0);
+ matrix = identity rotated rot;
+ setbounds currentpicture to unitsquare xscaled 100 yscaled 2 shifted (0, -1);
+ endpattern(100, sep);
+enddef;
+
+def new_dotpattern(suffix name)(expr r, sep, rot) =
+ beginpattern(name)
+ drawdot origin withpen pencircle scaled r;
+ matrix = identity rotated rot;
+ setbounds currentpicture to bbox currentpicture;
+ endpattern(sep,sep);
+enddef;
+
+def new_hexdotpattern(suffix name)(expr r, sep) =
+ beginpattern(name)
+ pickup pencircle scaled r;
+ drawdot origin; drawdot (sep, sep/sqrt(3));
+ setbounds currentpicture to bbox currentpicture;
+ endpattern(2sep,2sep/sqrt(3));
+enddef;
+
+def new_brokenlinepattern(suffix name)(expr sep, on, off) =
+ beginpattern(name)
+ draw (0,0) -- (on,0);
+ draw (on/2+off/2,sep) -- (3on/2+off/2,sep);
+ setbounds currentpicture to bbox currentpicture;
+ endpattern(on+off,2sep);
+enddef;
+
+def new_distortedgridpattern(suffix name)(expr sep, rot, x, y) =
+ beginpattern(name)
+ draw (0, sep/2) -- (sep, sep/2);
+ draw (sep/2, 0) -- (sep/2, sep);
+ matrix = identity xscaled x yscaled y rotated rot;
+ setbounds currentpicture to unitsquare scaled sep;
+ endpattern(sep,sep);
+enddef;
+def new_gridpattern(suffix name)(expr sep, rot) =
+ new_distortedgridpattern(name)(sep, rot, 1, 1) enddef;
+
+def new_weavepattern(suffix name)(expr sep, width) =
+ beginpattern(name)
+ matrix = identity rotated 45;
+ draw (0,-width)--(0,width);
+ draw (-width,sep)--(width,sep);
+ draw (sep-width,0)--(sep+width,0);
+ draw (sep,sep-width)--(sep,sep+width);
+ endpattern(2sep,2sep); enddef;
+
+def new_hexpattern(suffix name)(expr d) =
+ beginpattern(name)
+ save v,w; w:=d/2; v := w/sqrt(3); draw (w,4v) -- (w,6v);
+ draw (0,v) -- (w,0) -- (2w,v) -- (2w,3v) -- (w,4v) -- (0,3v);
+ setbounds currentpicture to unitsquare xscaled 3w yscaled 6v shifted linecorr;
+ endpattern(2w,6v); enddef;
+
+def new_circlepattern(suffix name)(expr d) =
+ beginpattern(name)
+ draw fullcircle scaled d;
+ draw fullcircle scaled d shifted (sqrt(3)/2*d,d/2);
+ endpattern(sqrt(3)*d,d); enddef;
+
+def new_scalepattern(suffix name)(expr d) =
+ beginpattern(name)
+ draw halfcircle scaled d rotated 180;
+ draw halfcircle scaled d rotated 180 shifted (d/2,d/2);
+ endpattern(d,d); enddef;
+
+def new_squarecirclepattern(suffix name)(expr d) =
+ beginpattern(name)
+ draw fullcircle scaled d;
+ setbounds currentpicture to unitsquare shifted -(1/2,1/2) scaled 2d;
+ endpattern(d,d); enddef;
+
+
+% 1 predefined patterns
+
+if known skip_predefined_patterns : expandafter endinput fi;
+
+begingroup save xl, l, s;
+2l = 3s; 2xl = 3l; s = 3.5;
+
+show s, l, xl;
+
+save linecorr; pair linecorr; linecorr = -(.2pt, .2pt);
+
+begingroup
+ save horizontal, vertical, upward, downward, diagonal;
+ horizontal = 0; vertical = 90; diagonal = 45;
+ downward = 30; downward = -upward;
+ forsuffixes d = horizontal, vertical, upward, downward :
+ new_linepattern(d lines)(l, d);
+ new_linepattern(dense d lines)(s, d);
+ endfor
+
+ new_brokenlinepattern(broken lines)(l, 2l, l)
+ new_brokenlinepattern(dense broken lines)(s, 3s, s)
+
+ forsuffixes d = diagonal, upward, downward :
+ new_gridpattern(d grid)(l, d);
+ new_gridpattern(dense d grid)(s, d);
+ endfor
+endgroup;
+
+new_gridpattern(grid)(l, 0)
+new_gridpattern(dense grid)(s, 0)
+
+new_distortedgridpattern(horizontal grid)(l, 45, 3/2, 1);
+new_distortedgridpattern(vertical grid)(l, 45, 1, 3/2);
+new_distortedgridpattern(dense horizontal grid)(s, 45, 3/2, 1);
+new_distortedgridpattern(dense vertical grid)(s, 45, 1, 3/2);
+
+new_weavepattern(stitches)(l, 3/2)
+new_weavepattern(weave)(l, 3)
+new_weavepattern(dense weave)(s, 3/2)
+
+beginpattern(horizontal zigzag)
+ draw (0,0)--(l,2/3l)--(2l,0);
+ setbounds currentpicture to unitsquare xscaled 2l yscaled l shifted -(0,l/6);
+endpattern(2l,l);
+beginpattern(vertical zigzag)
+ draw (0,0)--(2/3l,l)--(0,2l);
+ setbounds currentpicture to unitsquare xscaled l yscaled 2l shifted -(l/6,0);
+endpattern(l,2l);
+
+beginpattern(crosses)
+ matrix = identity rotated 45;
+ save c,o,w; pair c,o; c=(l/2,l/2); w=4/5;
+ o:=(w, w); draw (c+o)--(c-o);
+ o:=(w,-w); draw (c+o)--(c-o);
+ setbounds currentpicture to unitsquare scaled l;
+endpattern(l,l);
+
+beginpattern(bricks)
+ draw (0,l)--(0,0)--(2l,0);
+ draw (l,2l)--(l,l)--(3l,l);
+ clip currentpicture to unitsquare xscaled 3l yscaled 2l shifted linecorr;
+endpattern(2l,2l);
+
+beginpattern(tiles)
+ save s; s:=l/4;
+ draw (0,l+s) -- (l+s,l+s);
+ draw (l-s,0) -- (l-s,l+s);
+ draw currentpicture rotatedaround((l,l), 180);
+ draw (0,2l) -- (0,0) -- (2l,0);
+ clip currentpicture to unitsquare xscaled 2l yscaled 2l shifted linecorr;
+ matrix := identity rotated 45;
+endpattern(2l,2l);
+
+beginpattern(chords)
+ save c,d; c:=2.1; d:=1.4;
+ draw (c-d,c-d){dir 225}..{dir -30}(2c-d/2,d/2-2c);
+ draw (2c+d,-d-2c){dir -45}..{dir 210}(c+d/2,d/2-5c);
+ setbounds currentpicture to bbox currentpicture;
+endpattern(7c, 2c);
+
+beginpattern(tea cloth)
+ save r; r:=xl/8; pickup pencircle scaled r;
+ drawdot (xl/2,xl/2); drawdot (0,0);
+ for i = 1 upto 3 : drawdot (0,i*xl/4); drawdot (i*xl/4,0); endfor
+endpattern(xl,xl);
+
+beginpattern(knit)
+ save v; v:=2/3xl;
+ draw (0,0) -- (0,v);
+ draw (-xl/2,3/2v) -- (-xl/2,v/2) {dir -60}..{dir -60} (0,0) {dir 60}..{dir 60} (xl/2,v/2);
+endpattern(xl,v);
+
+beginpattern(purl)
+ save v; v := 2/3xl;
+ interim linecap:=butt;
+ draw (0,0) -- (0,v) {dir 30}..{dir 30} (xl/2,3/2v) {dir -30}..{dir -30} (xl,v);
+ draw (xl/2,v/2) {dir -30}..{dir -30} (xl,0) {dir 30}..{dir 30} (3/2xl,v/2) -- (3/2xl,-v/2);
+endpattern(xl,2v);
+
+new_hexpattern(hexagons)(xl);
+new_hexpattern(small hexagons)(l);
+
+new_squarecirclepattern(square circles)(xl);
+new_squarecirclepattern(small square circles)(l);
+
+new_circlepattern(circles)(xl);
+new_circlepattern(small circles)(l);
+
+new_scalepattern(scales)(xl);
+new_scalepattern(small scales)(l);
+
+save dot;
+dot := 1.2pt;
+new_hexdotpattern(dots)(dot, l);
+new_hexdotpattern(dense dots)(dot, s);
+new_hexdotpattern(sparse dots)(dot, xl);
+new_dotpattern(square dots)(dot, l, 0);
+new_dotpattern(diamond dots)(dot, l, 45);
+new_dotpattern(dense square dots)(dot, s, 0);
+new_dotpattern(dense diamond dots)(dot, s, 45);
+new_dotpattern(sparse square dots)(dot, xl, 0);
+new_dotpattern(sparse diamond dots)(dot, xl, 45);
+dot := 1.8pt;
+new_hexdotpattern(heavy dots)(dot, l);
+new_hexdotpattern(dense heavy dots)(dot, s);
+new_hexdotpattern(sparse heavy dots)(dot, xl);
+new_dotpattern(square heavy dots)(dot, l, 0);
+new_dotpattern(diamond heavy dots)(dot, l, 45);
+new_dotpattern(dense square heavy dots)(dot, s, 0);
+new_dotpattern(dense diamond heavy dots)(dot, s, 45);
+new_dotpattern(sparse square heavy dots)(dot, xl, 0);
+new_dotpattern(sparse diamond heavy dots)(dot, xl, 45);
+
+endgroup;
+
+% 
+
+endinput;
+
diff --git a/graphics/pictex/PiCTeX_manual.pdf b/graphics/pictex/PiCTeX_manual.pdf
new file mode 100644
index 0000000000..d6211ecaa0
--- /dev/null
+++ b/graphics/pictex/PiCTeX_manual.pdf
Binary files differ
diff --git a/graphics/pictex/README b/graphics/pictex/README
deleted file mode 100644
index 63ba8eaa02..0000000000
--- a/graphics/pictex/README
+++ /dev/null
@@ -1,11 +0,0 @@
-The PiCTeX macro package is released under the LaTeX Project Public
-License, version 1 or (at your option) any later version.
-
-
-NOTE. There is a detailed manual for PiCTeX available from
- Michael Wichura
- Department of Statistics
- University of Chicago.
-
- (312) 702-8329
- Wichura@Galton.Uchicago.EDU
diff --git a/graphics/pictex/README.txt b/graphics/pictex/README.txt
new file mode 100644
index 0000000000..64d3c6f34b
--- /dev/null
+++ b/graphics/pictex/README.txt
@@ -0,0 +1,9 @@
+The PiCTeX macro package is released under the LaTeX Project Public
+License, version 1 or (at your option) any later version.
+
+Version 1.1 1987-10-09
+Version 1.1b 2021-06-08 (updated LaTeX support)
+
+
+NOTE. There is a detailed manual for PiCTeX available from CTAN;
+ see PiCTeX_manual.pdf
diff --git a/graphics/pictex/addon/00index b/graphics/pictex/addon/00index
deleted file mode 100644
index 81b80d1a41..0000000000
--- a/graphics/pictex/addon/00index
+++ /dev/null
@@ -1,16 +0,0 @@
-PICTEX.STY
- Style zum Einladen von PiCTeX als LaTeX-option oder LaTeX-Package.
- Incl. Einladen von PICCORR.STY und PICMORE.STY, falls vorhanden.
-
-PICCORR.STY
- Korrektur zu PiCTeXs \betweenarrows-Befehl
-
-PICMORE.STY
- Erweiterung zu PiCTeX f"ur Impulsdiagramme
-
-PICTEXWD.TEX
- Gepatchtes PICTEX.TEX, das weniger Dimensionsregister benutzt.
- Fehlermeldungen an Andreas.Schrell@RS.maus.de
-
-PICTEXWD.STY
- Wie PICTEX.STY, aber es wird PICTEXWD.TEX eingeladen.
diff --git a/graphics/pictex/addon/autoarea/README b/graphics/pictex/addon/autoarea/README
index d48b930fc0..5ab324fe2f 120000..100644
--- a/graphics/pictex/addon/autoarea/README
+++ b/graphics/pictex/addon/autoarea/README
@@ -1 +1,14 @@
-README.aa \ No newline at end of file
+ File README.aa for
+ [tex-archive]/graphics/pictex/addon/autoarea/
+
+
+AUTOAREA.STY
+ makes PiCTeX's bounding boxes account for lines and arcs.
+ License is LPPL. Read the file for additional informations.
+
+AUTODEMO
+ this subdirectory demonstrates the effect of autoarea.sty .
+
+
+________________________________________________________________________
+This file version 2008/04/25 Uwe Lueck, http://contact-ednotes.sty.de.vu
diff --git a/graphics/pictex/addon/autoarea/README.aa b/graphics/pictex/addon/autoarea/README.aa
deleted file mode 100644
index 5ab324fe2f..0000000000
--- a/graphics/pictex/addon/autoarea/README.aa
+++ /dev/null
@@ -1,14 +0,0 @@
- File README.aa for
- [tex-archive]/graphics/pictex/addon/autoarea/
-
-
-AUTOAREA.STY
- makes PiCTeX's bounding boxes account for lines and arcs.
- License is LPPL. Read the file for additional informations.
-
-AUTODEMO
- this subdirectory demonstrates the effect of autoarea.sty .
-
-
-________________________________________________________________________
-This file version 2008/04/25 Uwe Lueck, http://contact-ednotes.sty.de.vu
diff --git a/graphics/pictex/addon/autoarea/autodemo/autodemo+.log b/graphics/pictex/addon/autoarea/autodemo/autodemo+.log
deleted file mode 100644
index 4943212fba..0000000000
--- a/graphics/pictex/addon/autoarea/autodemo/autodemo+.log
+++ /dev/null
@@ -1,82 +0,0 @@
-This is pdfTeX, Version 3.141592-1.40.4 (MiKTeX 2.7) (preloaded format=pdflatex 2008.2.19) 7 MAY 2008 22:29
-entering extended mode
-**autodemo+.tex
-(autodemo+.tex
-LaTeX2e <2005/12/01>
-Babel <v3.8h> and hyphenation patterns for english, dumylang, nohyphenation, ge
-rman, ngerman, french, loaded.
-File: autodemo+.tex 2008/04/19 autoarea.sty's effect
-(autodemo.tex
-File: autodemo.tex 2008/04/19 common sample for autoarea.sty
- ("C:\Programme\MiKTeX 2.7\tex\latex\base\article.cls"
-Document Class: article 2005/09/16 v1.4f Standard LaTeX document class
-("C:\Programme\MiKTeX 2.7\tex\latex\base\size12.clo"
-File: size12.clo 2005/09/16 v1.4f Standard LaTeX file (size option)
-)
-\c@part=\count79
-\c@section=\count80
-\c@subsection=\count81
-\c@subsubsection=\count82
-\c@paragraph=\count83
-\c@subparagraph=\count84
-\c@figure=\count85
-\c@table=\count86
-\abovecaptionskip=\skip41
-\belowcaptionskip=\skip42
-\bibindent=\dimen102
-)
-("C:\Programme\MiKTeX 2.7\tex\generic\pictex\pictex.sty"
-("C:\Programme\MiKTeX 2.7\tex\generic\pictex\prepictex.tex")
-("C:\Programme\MiKTeX 2.7\tex\generic\pictex\pictex.tex")
-("C:\Programme\MiKTeX 2.7\tex\generic\pictex\postpictex.tex")
-("C:\Programme\MiKTeX 2.7\tex\generic\pictex\picmore.tex"))
-("C:\Programme\MiKTeX 2.7\tex\latex\lipsum\lipsum.sty"
-Package: lipsum 2005/01/26 v1.0 150 paragraphs of Lorem Ipsum dummy text
-File: lipsum.dtx 2005/01/26 v1.0 150 paragraphs of Lorem Ipsum dummy text
-\c@lips@count=\count103
-) (autoarea.sty
-Package: autoarea 2008/05/07 automatic accounting for PiCTeX lines and arcs
-)
-No auxiliary output files.
-
-No file autodemo+.aux.
-LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 8.
-LaTeX Font Info: ... okay on input line 8.
-LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 8.
-LaTeX Font Info: ... okay on input line 8.
-LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 8.
-LaTeX Font Info: ... okay on input line 8.
-LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 8.
-LaTeX Font Info: ... okay on input line 8.
-LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 8.
-LaTeX Font Info: ... okay on input line 8.
-LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 8.
-LaTeX Font Info: ... okay on input line 8.
-LaTeX Font Info: External font `cmex10' loaded for size
-(Font) <12> on input line 10.
-LaTeX Font Info: External font `cmex10' loaded for size
-(Font) <8> on input line 10.
-LaTeX Font Info: External font `cmex10' loaded for size
-(Font) <6> on input line 10.
-[1
-
-{C:/Dokumente und Einstellungen/akuehne/Lokale Einstellungen/Anwendungsdaten/Mi
-KTeX/2.7/pdftex/config/pdftex.map}] ) )
-Here is how much of TeX's memory you used:
- 1061 strings out of 95340
- 10992 string characters out of 1184281
- 171027 words of memory out of 1500000
- 4300 multiletter control sequences out of 110000
- 7336 words of font info for 26 fonts, out of 1200000 for 2000
- 14 hyphenation exceptions out of 8191
- 23i,4n,21p,256b,229s stack positions out of 5000i,500n,10000p,200000b,5000s
-<C:/Programme/MiKTeX 2.7/fonts/type1/blu
-esky/cm/cmbxti10.pfb><C:/Programme/MiKTeX 2.7/fonts/type1/bluesky/cm/cmr12.pfb>
-<C:/Programme/MiKTeX 2.7/fonts/type1/bluesky/cm/cmr5.pfb><C:/Programme/MiKTeX 2
-.7/fonts/type1/bluesky/cm/cmssbx10.pfb>
-Output written on autodemo+.pdf (1 page, 24873 bytes).
-PDF statistics:
- 22 PDF objects out of 1000 (max. 8388607)
- 0 named destinations out of 1000 (max. 131072)
- 1 words of extra memory for PDF output out of 10000 (max. 10000000)
-
diff --git a/graphics/pictex/addon/autoarea/autodemo/autodemo-.log b/graphics/pictex/addon/autoarea/autodemo/autodemo-.log
deleted file mode 100644
index 454cccbfff..0000000000
--- a/graphics/pictex/addon/autoarea/autodemo/autodemo-.log
+++ /dev/null
@@ -1,80 +0,0 @@
-This is pdfTeX, Version 3.141592-1.40.4 (MiKTeX 2.7) (preloaded format=pdflatex 2008.2.19) 7 MAY 2008 22:28
-entering extended mode
-**autodemo-.tex
-(autodemo-.tex
-LaTeX2e <2005/12/01>
-Babel <v3.8h> and hyphenation patterns for english, dumylang, nohyphenation, ge
-rman, ngerman, french, loaded.
-File: autodemo-.tex 2008/04/19 what's missing without autoarea.sty
-(autodemo.tex
-File: autodemo.tex 2008/04/19 common sample for autoarea.sty
- ("C:\Programme\MiKTeX 2.7\tex\latex\base\article.cls"
-Document Class: article 2005/09/16 v1.4f Standard LaTeX document class
-("C:\Programme\MiKTeX 2.7\tex\latex\base\size12.clo"
-File: size12.clo 2005/09/16 v1.4f Standard LaTeX file (size option)
-)
-\c@part=\count79
-\c@section=\count80
-\c@subsection=\count81
-\c@subsubsection=\count82
-\c@paragraph=\count83
-\c@subparagraph=\count84
-\c@figure=\count85
-\c@table=\count86
-\abovecaptionskip=\skip41
-\belowcaptionskip=\skip42
-\bibindent=\dimen102
-)
-("C:\Programme\MiKTeX 2.7\tex\generic\pictex\pictex.sty"
-("C:\Programme\MiKTeX 2.7\tex\generic\pictex\prepictex.tex")
-("C:\Programme\MiKTeX 2.7\tex\generic\pictex\pictex.tex")
-("C:\Programme\MiKTeX 2.7\tex\generic\pictex\postpictex.tex")
-("C:\Programme\MiKTeX 2.7\tex\generic\pictex\picmore.tex"))
-("C:\Programme\MiKTeX 2.7\tex\latex\lipsum\lipsum.sty"
-Package: lipsum 2005/01/26 v1.0 150 paragraphs of Lorem Ipsum dummy text
-File: lipsum.dtx 2005/01/26 v1.0 150 paragraphs of Lorem Ipsum dummy text
-\c@lips@count=\count103
-)
-No auxiliary output files.
-
-No file autodemo-.aux.
-LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 8.
-LaTeX Font Info: ... okay on input line 8.
-LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 8.
-LaTeX Font Info: ... okay on input line 8.
-LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 8.
-LaTeX Font Info: ... okay on input line 8.
-LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 8.
-LaTeX Font Info: ... okay on input line 8.
-LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 8.
-LaTeX Font Info: ... okay on input line 8.
-LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 8.
-LaTeX Font Info: ... okay on input line 8.
-LaTeX Font Info: External font `cmex10' loaded for size
-(Font) <12> on input line 10.
-LaTeX Font Info: External font `cmex10' loaded for size
-(Font) <8> on input line 10.
-LaTeX Font Info: External font `cmex10' loaded for size
-(Font) <6> on input line 10.
-[1
-
-{C:/Dokumente und Einstellungen/akuehne/Lokale Einstellungen/Anwendungsdaten/Mi
-KTeX/2.7/pdftex/config/pdftex.map}] ) )
-Here is how much of TeX's memory you used:
- 1046 strings out of 95340
- 10812 string characters out of 1184281
- 171053 words of memory out of 1500000
- 4288 multiletter control sequences out of 110000
- 7336 words of font info for 26 fonts, out of 1200000 for 2000
- 14 hyphenation exceptions out of 8191
- 23i,4n,19p,256b,207s stack positions out of 5000i,500n,10000p,200000b,5000s
-<C:/Programme/MiKTeX 2.7/fonts/type1/blu
-esky/cm/cmbxti10.pfb><C:/Programme/MiKTeX 2.7/fonts/type1/bluesky/cm/cmr12.pfb>
-<C:/Programme/MiKTeX 2.7/fonts/type1/bluesky/cm/cmr5.pfb><C:/Programme/MiKTeX 2
-.7/fonts/type1/bluesky/cm/cmssbx10.pfb>
-Output written on autodemo-.pdf (1 page, 25493 bytes).
-PDF statistics:
- 22 PDF objects out of 1000 (max. 8388607)
- 0 named destinations out of 1000 (max. 131072)
- 1 words of extra memory for PDF output out of 10000 (max. 10000000)
-
diff --git a/graphics/pictex/addon/picmore.tex b/graphics/pictex/addon/picmore.tex
index b6cec46a3a..1bda81e6ae 100644
--- a/graphics/pictex/addon/picmore.tex
+++ b/graphics/pictex/addon/picmore.tex
@@ -1,76 +1,76 @@
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% PiCTeX Erweiterungen von Andreas Schrell %
-% Windhoevel 2 %
-% 5600 Wuppertal 2 %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% Version 1.0 29.10.1989 %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-% Befehle fr die Benutzer:
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% \setsignal zur Benutzung wie \setlinear %
-% \plot erzeugt danach Signalverlaeufe%
-% fuer Impulsdiagramme. Es werden TeX-%
-% Linien benutzt, daher schneller als %
-% \plot mit \setlinear %
-% Bsp: %
-% \setsignal \plot 0 1 1 0 2 1 4 0 7 1 8 0 / %
-% erzeugt %
-% 0 1 2 3 4 5 6 7 8 %
-% __ ___ _ %
-% ! ! ! ! ! %
-% !_! !_____! ! %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% \setmsignal zur Benutzung wie \setlinear %
-% \plot erzeugt danach Signalverlaeufe%
-% fuer Impulsdiagramme. Es werden TeX-%
-% Linien benutzt, daher schneller als %
-% \plot mit \setlinear %
-% Bsp: %
-% \setmsignal \plot 0 1 1 2 2 4 3 6 0 7 1 1 %
-% erzeugt %
-% 0 1 2 3 4 5 6 7 8 %
-% --- %
-% ! ! %
-% - ! %
-% --! ! - %
-% !___! %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\catcode`!=11
-
-\def\setsignal{%
- \let\!drawcurve=\!scurve}
-
-\def\!scurve #1 #2 {%
- \edef\!hxS{#1}%
- \edef\!hyS{#2}%
- \!sjoin}
-
-\def\!sjoin#1 #2 {%
- \putrule from {\!hxS} {\!hyS} to {#1} {\!hyS}
- \putrule from {#1} {\!hyS} to {#1} {#2}
- \edef\!hxS{#1}%
- \edef\!hyS{#2}%
- \!ifnextchar/{\!finish}{\!sjoin}}
-
-
-\def\setmsignal{%
- \let\!drawcurve=\!smcurve}
-
-\def\!smcurve #1 #2 #3 {%
- \edef\!hxS{#2}%
- \edef\!hyS{#3}%
- \putrule from {#1} {\!hyS} to {\!hxS} {\!hyS}
- \!smjoin}
-
-\def\!smjoin#1 #2 {%
- \putrule from {\!hxS} {\!hyS} to {\!hxS} {#2}
- \putrule from {\!hxS} {#2} to {#1} {#2}
- \edef\!hxS{#1}%
- \edef\!hyS{#2}%
- \!ifnextchar/{\!finish}{\!smjoin}}
-
-\catcode`!=12
-
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% PiCTeX Erweiterungen von Andreas Schrell %
+% Windhoevel 2 %
+% 5600 Wuppertal 2 %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Version 1.0 29.10.1989 %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% Befehle fr die Benutzer:
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \setsignal zur Benutzung wie \setlinear %
+% \plot erzeugt danach Signalverlaeufe%
+% fuer Impulsdiagramme. Es werden TeX-%
+% Linien benutzt, daher schneller als %
+% \plot mit \setlinear %
+% Bsp: %
+% \setsignal \plot 0 1 1 0 2 1 4 0 7 1 8 0 / %
+% erzeugt %
+% 0 1 2 3 4 5 6 7 8 %
+% __ ___ _ %
+% ! ! ! ! ! %
+% !_! !_____! ! %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \setmsignal zur Benutzung wie \setlinear %
+% \plot erzeugt danach Signalverlaeufe%
+% fuer Impulsdiagramme. Es werden TeX-%
+% Linien benutzt, daher schneller als %
+% \plot mit \setlinear %
+% Bsp: %
+% \setmsignal \plot 0 1 1 2 2 4 3 6 0 7 1 1 %
+% erzeugt %
+% 0 1 2 3 4 5 6 7 8 %
+% --- %
+% ! ! %
+% - ! %
+% --! ! - %
+% !___! %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\catcode`!=11
+
+\def\setsignal{%
+ \let\!drawcurve=\!scurve}
+
+\def\!scurve #1 #2 {%
+ \edef\!hxS{#1}%
+ \edef\!hyS{#2}%
+ \!sjoin}
+
+\def\!sjoin#1 #2 {%
+ \putrule from {\!hxS} {\!hyS} to {#1} {\!hyS}
+ \putrule from {#1} {\!hyS} to {#1} {#2}
+ \edef\!hxS{#1}%
+ \edef\!hyS{#2}%
+ \!ifnextchar/{\!finish}{\!sjoin}}
+
+
+\def\setmsignal{%
+ \let\!drawcurve=\!smcurve}
+
+\def\!smcurve #1 #2 #3 {%
+ \edef\!hxS{#2}%
+ \edef\!hyS{#3}%
+ \putrule from {#1} {\!hyS} to {\!hxS} {\!hyS}
+ \!smjoin}
+
+\def\!smjoin#1 #2 {%
+ \putrule from {\!hxS} {\!hyS} to {\!hxS} {#2}
+ \putrule from {\!hxS} {#2} to {#1} {#2}
+ \edef\!hxS{#1}%
+ \edef\!hyS{#2}%
+ \!ifnextchar/{\!finish}{\!smjoin}}
+
+\catcode`!=12
+
diff --git a/graphics/pictex/addon/pictex.sty b/graphics/pictex/addon/pictex.sty
index d64c99790a..5e2f257c41 100644
--- a/graphics/pictex/addon/pictex.sty
+++ b/graphics/pictex/addon/pictex.sty
@@ -1,17 +1,17 @@
-\def\fileversion{1.0}
-\def\filedate{1994/03/31}
-
-% PiCTeX als LaTeX-Style oder LaTeX2e-Package einladen.
-% von Andreas Schrell
-
-\ifx\fiverm\undefined
- \newfont\fiverm{cmr5}
-\fi
-\input prepictex
-\input pictex
-\input postpictex
-\catcode`\@=11
-\@input{picmore.tex}
-\@input{piccorr.sty}
-
-\endinput
+\def\fileversion{1.0}
+\def\filedate{1994/03/31}
+
+% PiCTeX als LaTeX-Style oder LaTeX2e-Package einladen.
+% von Andreas Schrell
+
+\ifx\fiverm\undefined
+ \newfont\fiverm{cmr5}
+\fi
+\input prepictex
+\input pictex
+\input postpictex
+\catcode`\@=11
+\@input{picmore.tex}
+\@input{piccorr.sty}
+
+\endinput
diff --git a/graphics/pictex/addon/pictexwd.sty b/graphics/pictex/addon/pictexwd.sty
index 42edb401e0..76466de2b8 100644
--- a/graphics/pictex/addon/pictexwd.sty
+++ b/graphics/pictex/addon/pictexwd.sty
@@ -1,19 +1,19 @@
-\def\fileversion{1.0}
-\def\filedate{1994/03/31}
-
-% PiCTeX als LaTeX-Style oder LaTeX2e-Package einladen. Allerdings
-% wird eine Datei pictexwd.tex geladen, die weniger Dimensionsregister
-% benutzt.
-%
-% Style von Andreas Schrell
-
-\ifx\fiverm\undefined
- \newfont\fiverm{cmr5}
-\fi
-\input prepictex
-\input pictexwd
-\input postpictex
-\catcode`\@=11
-\@input{picmore.tex}
-\@input{piccorr.sty}
-\endinput
+\def\fileversion{1.0}
+\def\filedate{1994/03/31}
+
+% PiCTeX als LaTeX-Style oder LaTeX2e-Package einladen. Allerdings
+% wird eine Datei pictexwd.tex geladen, die weniger Dimensionsregister
+% benutzt.
+%
+% Style von Andreas Schrell
+
+\ifx\fiverm\undefined
+ \newfont\fiverm{cmr5}
+\fi
+\input prepictex
+\input pictexwd
+\input postpictex
+\catcode`\@=11
+\@input{picmore.tex}
+\@input{piccorr.sty}
+\endinput
diff --git a/graphics/pictex/addon/pictexwd.tex b/graphics/pictex/addon/pictexwd.tex
index 43141efe6b..f2caff17cb 100644
--- a/graphics/pictex/addon/pictexwd.tex
+++ b/graphics/pictex/addon/pictexwd.tex
@@ -1,3677 +1,3677 @@
-% G"andertes PiCTeX.TEX mit weniger Dimensionsregistern %
-% von Andreas Schrell, ohne Gew"ahr!!!!!!!
-% Version 0.0 vom 31.03.1994
-% FEHLERMELDUNGEN an Andreas.Schrell@RS.maus.de
-
-% This is PiCTeXWD, Version 1.1 9/21/87
-
-% CAVEAT: The PiCTeX manual often has a more lucid explanation
-% of any given topic than you will find in the internal documentation
-% of the macros.
-
-% PiCTeX's commands can be classified into two groups: (1) public (or
-% external), and (2) private (or internal). The public macros are
-% discussed at length in the manual. The only discussion of the private
-% macros is the internal documentation. The private macros all have
-% names beginning with an exclamation point (!) of category code 11.
-% Since in normal usage "!" has category code 12, these macros can't
-% be accessed or modified by the general user.
-
-% The macros are organized into thematically related groups. For example,
-% the macros dealing with dots & dashes are all in the DASHPATTERN group.
-% The table below shows which macros are in which groups. The table
-% covers all public macros, and many (but not all) of PiCTeX's upper level
-% private macros. Following the table, the various groups are listed
-% in the order in which they appear in the table.
-
-% *********************** TABLE OF GROUPS OF MACROS **********************
-
-% HACKS: Utility macros
-% \PiC
-% \PiCTeX
-% \placevalueinpts
-% \!!loop
-% \!cfor
-% \!copylist
-% \!ecfor
-% \!etfor
-% \!getnext
-% \!getnextvalueof
-% \!ifempty
-% \!ifnextchar
-% \!leftappend
-% \!listaddon
-% \!loop
-% \!lop
-% \!mlap
-% \!not
-% \!removept
-% \!rightappend
-% \!tfor
-% \!vmlap
-% \!wlet
-
-% ALLOCATION: Allocates registers
-
-% AREAS: Deals with plot areas
-% \axis
-% \grid
-% \invisibleaxes
-% \normalgraphs
-% \plotheading
-% \setplotarea
-% \visibleaxes
-
-% ARROWS: Draws arrows
-% \arrow
-% \betweenarrows
-
-% BARS: Draws bars
-% \putbar
-% \setbars
-
-% BOXES: Draws rectangles
-% \frame
-% \putrectangle
-% \rectangle
-% \shaderectangleson
-% \shaderectanglesoff
-
-% CURVES: Upper level plot commands
-% \hshade
-% \plot
-% \sethistograms
-% \setlinear
-% \setquadratic
-% \vshade
-
-% DASHPATTERNS: Sets up dash patterns
-% \findlength
-% \setdashes
-% \setdashesnear
-% \setdashpattern
-% \setdots
-% \setdotsnear
-% \setsolid
-% \!dashingoff
-% \!dashingon
-
-% DIVISION: Does long division of dimension registers
-% \Divide
-% \!divide
-
-% ELLIPSES: Draws ellipses and circles
-% \circulararc
-% \ellipticalarc
-
-% RULES: Draws rules, i.e., horizontal & vertical lines
-% \putrule
-% \!putdashedhline
-% \!putdashedvline
-% \!puthline
-% \!putsolidhline
-% \!putsolidvline
-% \!putvline
-
-% LINEAR ARC: Draws straight lines -- solid and dashed
-% \inboundscheckoff
-% \inboundscheckon
-% \!advancedashing
-% \!drawlinearsegment
-% \!initinboundscheck
-% \!linearsolid
-% \!lineardashed
-% \!ljoin
-% \!plotifinbounds
-% \!start
-
-% LOGTEN: Log_10 function
-% \!logten
-
-% PICTURES: Basic setups for PiCtures; \put commands
-% \accountingoff
-% \accountingon
-% \beginpicture
-% \endpicture
-% \endpicturesave
-% \lines
-% \multiput
-% \put
-% \setcoordinatemode
-% \setcoordinatesystem
-% \setdimensionmode
-% \stack
-% \Lines
-% \Xdistance
-% \Ydistance
-% \!dimenput
-% \!ifcoordmode
-% \!ifdimenmode
-% \!setcoordmode
-% \!setdimenmode
-% \!setputobject
-
-% PLOTTING: Things to do with plotting
-% \dontsavelinesandcurves
-% \replot
-% \savelinesandcurves
-% \setplotsymbol
-% \writesavefile
-% \!plot
-
-% PYTHAGORAS: Euclidean distance function
-% \placehypotenuse
-% \!Pythag
-
-% QUADRATIC ARC: Draws a quadratic arc
-% \!qjoin
-
-% ROTATIONS: Handles rotations
-% \startrotation
-% \stoprotation
-% \!rotateaboutpivot
-% \!rotateonly
-
-% SHADING: Handles shading
-% \setshadegrid
-% \setshadesymbol
-% \!lshade
-% \!qshade
-% \!starthshade
-% \!startvshade
-
-% TICKS: Draws ticks on graphs
-% \gridlines
-% \loggedticks
-% \nogridlines
-% \ticksin
-% \ticksout
-% \unloggesticks
-
-% ***************** END OF TABLE OF GROUPS OF MACROS ********************
-
-
-\catcode`!=11 % ***** THIS MUST NEVER BE OMITTED
-% *******************************
-% *** HACKS (Utility macros) ***
-% *******************************
-
-% ** User commands
-% ** \PiC{P\kern-.12em\lower.5ex\hbox{I}\kern-.075emC}
-% ** \PiCTeX{\PiC\kern-.11em\TeX}
-% ** \placevalueinpts of <DIMENSION REGISTER> in {CONTROL SEQUENCE}
-
-% ** Internal commands
-% ** \!ifnextchar{CHARACTER}{TRUE ACTION}{FALSE ACTION}
-% ** \!tfor NAME := LIST \do {BODY}
-% ** \!etfor NAME:= LIST \do {BODY}
-% ** \!cfor NAME := LIST \do {BODY}
-% ** \!ecfor NAME:= LIST \do {BODY}
-% ** \!ifempty{MACRO}{TRUE ACTION}{FALSE ACTION}
-% ** \!getnext\\ITEMfrom\LIST
-% ** \!getnextvalueof\DIMEN\from\LIST
-% ** \!copylist\LISTMACRO_A\to\LISTMACRO_B
-% ** \!wlet\CONTROL_SEQUENCE_A=\CONTROL_SEQUENCE_B
-% ** \!listaddon ITEM LIST
-% ** \!rightappendITEM\withCS\to\LISTMACRO
-% ** \!leftappendITEM\withCS\to\LISTMACRO
-% ** \!lop\LISTMACRO\to\ITEM
-% ** \!loop ... repeat
-% ** \!!loop ... repeat
-% ** \!removept{DIMENSION REGISTER}{CONTROL SEQUENCE}
-% ** \!mlap{...}
-% ** \!vmlap{...}
-% ** \!not{TEK if-CONDITION}
-
-% ** First, here are the the PiCTeX logo, and the syllable PiC:
-\def\PiC{P\kern-.12em\lower.5ex\hbox{I}\kern-.075emC}
-\def\PiCTeX{\PiC\kern-.11em\TeX}
-
-% ** The following macro expands to parameter #2 or parameter #3 according to
-% ** whether the next non-blank character following the macro is or is not #1.
-% ** Blanks following the macro are gobbled.
-\def\!ifnextchar#1#2#3{%
- \let\!testchar=#1%
- \def\!first{#2}%
- \def\!second{#3}%
- \futurelet\!nextchar\!testnext}
-\def\!testnext{%
- \ifx \!nextchar \!spacetoken
- \let\!next=\!skipspacetestagain
- \else
- \ifx \!nextchar \!testchar
- \let\!next=\!first
- \else
- \let\!next=\!second
- \fi
- \fi
- \!next}
-\def\\{\!skipspacetestagain}
- \expandafter\def\\ {\futurelet\!nextchar\!testnext}
-\def\\{\let\!spacetoken= } \\ % ** set \spacetoken to a space token
-
-
-% ** Borrow the "tfor" macro from Latex:
-% ** \!tfor NAME := LIST \do {BODY}
-% ** if, before expansion, LIST = T1 ... Tn, where each Ti is a token
-% ** or {...}, then executes BODY n times, with NAME = Ti on the
-% ** i-th iteration. Works for n=0.
-\def\!tfor#1:=#2\do#3{%
- \edef\!fortemp{#2}%
- \ifx\!fortemp\!empty
- \else
- \!tforloop#2\!nil\!nil\!!#1{#3}%
- \fi}
-\def\!tforloop#1#2\!!#3#4{%
- \def#3{#1}%
- \ifx #3\!nnil
- \let\!nextwhile=\!fornoop
- \else
- #4\relax
- \let\!nextwhile=\!tforloop
- \fi
- \!nextwhile#2\!!#3{#4}}
-
-
-% ** \!etfor NAME:= LIST\do {BODY}
-% ** This is like \!cfor, but LIST is any balanced token list whose complete
-% ** expansion has the form T1 ... Tn
-\def\!etfor#1:=#2\do#3{%
- \def\!!tfor{\!tfor#1:=}%
- \edef\!!!tfor{#2}%
- \expandafter\!!tfor\!!!tfor\do{#3}}
-
-
-% ** modify the Latex \tfor (token-for) loop to a \cfor (comma-for) loop.
-% ** \!cfor NAME := LIST \do {BODY}
-% ** if, before expansion, LIST = a1,a2,...an, then executes BODY n times,
-% ** with NAME = ai on the i-th iteration. Works for n=0.
-\def\!cfor#1:=#2\do#3{%
- \edef\!fortemp{#2}%
- \ifx\!fortemp\!empty
- \else
- \!cforloop#2,\!nil,\!nil\!!#1{#3}%
- \fi}
-\def\!cforloop#1,#2\!!#3#4{%
- \def#3{#1}%
- \ifx #3\!nnil
- \let\!nextwhile=\!fornoop
- \else
- #4\relax
- \let\!nextwhile=\!cforloop
- \fi
- \!nextwhile#2\!!#3{#4}}
-
-
-% ** \!ecfor NAME:= LIST\do {BODY}
-% ** This is like \!cfor, but LIST is any balanced token list whose complete
-% ** expansion has the form a1,a2,...,an.
-\def\!ecfor#1:=#2\do#3{%
- \def\!!cfor{\!cfor#1:=}%
- \edef\!!!cfor{#2}%
- \expandafter\!!cfor\!!!cfor\do{#3}}
-
-
-\def\!empty{}
-\def\!nnil{\!nil}
-\def\!fornoop#1\!!#2#3{}
-
-
-% ** \!ifempty{ARG}{TRUE ACTION}{FALSE ACTION}
-\def\!ifempty#1#2#3{%
- \edef\!emptyarg{#1}%
- \ifx\!emptyarg\!empty
- #2%
- \else
- #3%
- \fi}
-
-% ** \!getnext\\ITEMfrom\LIST
-% ** \LIST has the form \\{item1}\\{item2}\\{item3}...\\{itemk}
-% ** This routine sets \ITEM to item1, and cycles \LIST to
-% ** \\{item2}\\{item3}...\\{itemk}\\{item1}
-\def\!getnext#1\from#2{%
- \expandafter\!gnext#2\!#1#2}%
-\def\!gnext\\#1#2\!#3#4{%
- \def#3{#1}%
- \def#4{#2\\{#1}}%
- \ignorespaces}
-
-
-% ** \!getnextvalueof\DIMEN\from\LIST
-% ** Similar to !getnext.
-% ** \LIST has the form \\{dimen1}\\{dimen2}\\{dimen3} ...
-% ** \DIMEN is a dimension register
-% ** Works also for counts
-%
-\def\!getnextvalueof#1\from#2{%
- \expandafter\!gnextv#2\!#1#2}%
-\def\!gnextv\\#1#2\!#3#4{%
- #3=#1%
- \def#4{#2\\{#1}}%
- \ignorespaces}
-
-
-% ** \!copylist\LISTMACROA\to\LISTMACROB
-% ** makes the replacement text of LISTMACRO B identical to that of
-% ** list macro A.
-\def\!copylist#1\to#2{%
- \expandafter\!!copylist#1\!#2}
-\def\!!copylist#1\!#2{%
- \def#2{#1}\ignorespaces}
-
-
-% ** \!wlet\CSA=\CSB
-% ** lets control sequence \CSB = control sequence \CSA, and writes a
-% ** message to that effect in the log file using plain TEK's \wlog
-\def\!wlet#1=#2{%
- \let#1=#2
- \wlog{\string#1=\string#2}}
-
-% ** \!listaddon ITEM LIST
-% ** LIST <-- LIST \\ ITEM
-\def\!listaddon#1#2{%
- \expandafter\!!listaddon#2\!{#1}#2}
-\def\!!listaddon#1\!#2#3{%
- \def#3{#1\\#2}}
-
-% ** \!rightappendITEM\to\LISTMACRO
-% ** \LISTMACRO --> \LISTMACRO\\{ITEM}
-%\def\!rightappend#1\to#2{\expandafter\!!rightappend#2\!{#1}#2}
-%\def\!!rightappend#1\!#2#3{\def#3{#1\\{#2}}}
-
-
-% ** \!rightappendITEM\withCS\to\LISTMACRO
-% ** \LISTMACRO --> \LISTMACRO||CS||{ITEM}
-\def\!rightappend#1\withCS#2\to#3{\expandafter\!!rightappend#3\!#2{#1}#3}
-\def\!!rightappend#1\!#2#3#4{\def#4{#1#2{#3}}}
-
-
-% ** \!leftappendITEM\withCS\to\LISTMACRO
-% ** \LISTMACRO --> CS||{ITEM}||\LISTMACRO
-\def\!leftappend#1\withCS#2\to#3{\expandafter\!!leftappend#3\!#2{#1}#3}
-\def\!!leftappend#1\!#2#3#4{\def#4{#2{#3}#1}}
-
-
-% ** \!lop\LISTMACRO\to\ITEM
-% ** \\{item1}\\{item2}\\{item3} ... --> \\{item2}\\{item3} ...
-% ** item1 --> \ITEM
-\def\!lop#1\to#2{\expandafter\!!lop#1\!#1#2}
-\def\!!lop\\#1#2\!#3#4{\def#4{#1}\def#3{#2}}
-
-
-% ** \!placeNUMBER\of\LISTMACRO\in\ITEM
-% ** the NUMBERth item of \LISTMACRO --> replacement text of \ITEM
-%\def\!place#1\of#2\in#3{\def#3{\outofrange}%
-%{\count0=#1\def\\##1{\advance\count0-1 \ifnum\count0=0 \gdef#3{##1}\fi}#2}}
-
-
-% ** Following code converts a commalist to a list macro, with all items
-% ** fully expanded.
-%\!ecfor\item:=\commalist\do{\expandafter\!rightappend\item\to\list}
-
-
-% ** \!loop ... repeat
-% ** This is exactly like TEX's \loop ... repeat. It can be used in nesting
-% ** two loops, without puting the inner one inside a group.
-\def\!loop#1\repeat{\def\!body{#1}\!iterate}
-\def\!iterate{\!body\let\!next=\!iterate\else\let\!next=\relax\fi\!next}
-
-% ** \!!loop ... repeat
-% ** This is exactly like TEX's \loop ... repeat. It can be used in nesting
-% ** two loops, without puting the inner one inside a group.
-\def\!!loop#1\repeat{\def\!!body{#1}\!!iterate}
-\def\!!iterate{\!!body\let\!!next=\!!iterate\else\let\!!next=\relax\fi\!!next}
-% (\multiput uses \!!loop)
-
-% ** \!removept{DIMENREG}{\CS}
-% ** Defines the control sequence CS to be the value (in points) in the
-% ** dimension register DIMENREG (but without the "pt" TEK usually adds)
-% ** E.g., after \dimen0=12.3pt \!removept\dimen0\A, \A expands to 12.3
-\def\!removept#1#2{\edef#2{\expandafter\!!removePT\the#1}}
-{\catcode`p=12 \catcode`t=12 \gdef\!!removePT#1pt{#1}}
-
-% ** \pladevalueinpts of <DIMENSION REGISTER> in {CONTROL SEQUENCE}
-\def\placevalueinpts of <#1> in #2 {%
- \!removept{#1}{#2}}
-
-% ** \!mlap{...} \!vmlap{...}
-% ** Center ... in a box of width 0.
-\def\!mlap#1{\hbox to 0pt{\hss#1\hss}}
-\def\!vmlap#1{\vbox to 0pt{\vss#1\vss}}
-
-% ** \!not{TEK if-CONDITION}
-% ** By a TEK if-CONDITION is meant something like
-% ** \ifnum\N<0, or \ifdim\A>\B
-% ** \!not produces an if-condition which is false if the original condition
-% ** is true, and true if the original condition is false.
-\def\!not#1{%
- #1\relax
- \!switchfalse
- \else
- \!switchtrue
- \fi
- \if!switch
- \ignorespaces}
-
-
-% *******************
-% *** ALLOCATIONS ***
-% *******************
-
-% This section allocates all the registers PiCTeX uses. Following
-% each allocation is a string of the form ....N.D...L......... ;
-% the various letters show which sections of PiCTeX make explicit
-% reference to that register, according to the following code:
-
-% H Hacks
-% A Areas
-% W arroWs
-% B Bars
-% X boXes
-% C Curves
-% D Dashpattterns
-% V diVision
-% E Ellipses
-% U rUles
-% L Linear arc
-% G loGten
-% P Pictures
-% O plOtting
-% Y pYthagoras
-% Q Quadratic arc
-% R Rotations
-% S Shading
-% T Ticks
-
-% Turn off messages from TeX's allocation macros
-\let\!!!wlog=\wlog % "\wlog" is defined in plain TeX
-\def\wlog#1{}
-
-\newskip\headingtoplotskip %.A................. %-as-%
-\newskip\linethickness %.A..X....U........T
-\newskip\longticklength %.A................T %-as-%
-\newskip\plotsymbolspacing %......D...L....Q...
-\newskip\shortticklength %.A................T %-as-%
-\newskip\stackleading %.A..........P...... %-as-%
-\newskip\tickstovaluesleading %.A................T %-as-%
-\newskip\totalarclength %......D...L....Q...
-\newskip\valuestolabelleading %.A................. %-as-%
-
-\newbox\!boxA %.AW...............T
-\newbox\!boxB %..W................
-\newbox\!picbox %............P......
-\newbox\!plotsymbol %..........L..O.....
-\newbox\!putobject %............PO...S.
-\newbox\!shadesymbol %.................S.
-
-\newcount\!countA %.A....D..UL....Q.ST
-\newcount\!countB %......D..U.....Q.ST
-\newcount\!countC %...............Q..T
-\newcount\!countD %...................
-\newcount\!countE %.............O....T
-\newcount\!countF %.............O....T
-\newcount\!countG %..................T
-\newcount\!fiftypt %.........U.........
-\newcount\!intervalno %..........L....Q...
-\newcount\!npoints %..........L........
-\newcount\!nsegments %.........U.........
-\newcount\!ntemp %............P......
-\newcount\!parity %.................S.
-\newcount\!scalefactor %..................T
-\newcount\!tickcase %..................T
-
-\newskip\!Xleft %............P......
-\newskip\!Xright %............P......
-\newskip\!Xsave %.A................T
-\newskip\!Ybot %............P......
-\newskip\!Ysave %.A................T
-\newskip\!Ytop %............P......
-\newskip\!angle %........E..........
-\newskip\!arclength %..W......UL....Q...
-\newskip\!areabloc %.A........L........
-\newskip\!arealloc %.A........L........
-\newskip\!arearloc %.A........L........
-\newskip\!areatloc %.A........L........
-\newskip\!bshrinkage %.................S.
-\newskip\!checkbot %..........L........
-\newskip\!checkleft %..........L........
-\newskip\!checkright %..........L........
-\newskip\!checktop %..........L........
-\newdimen\!dimenA %.AW.X.DVEUL..OYQRST
-\newdimen\!dimenB %....X.DVEU...O.QRS.
-\newdimen\!dimenC %..W.X.DVEU......RS.
-\newdimen\!dimenD %..W.X.DVEU....Y.RS.
-\newdimen\!dimenE %..W........G..YQ.S.
-\newdimen\!dimenF %...........G..YQ.S.
-\newdimen\!dimenG %...........G..YQ.S.
-\newdimen\!dimenH %...........G..Y..S.
-\newdimen\!dimenI %...BX.........Y....
-\newdimen\!distacross %..........L....Q...
-\newdimen\!downlength %..........L........
-\newdimen\!dp %.A..X.......P....S.
-\newdimen\!dshade %.................S.
-\newdimen\!dxpos %..W......U..P....S.
-\newdimen\!dxprime %...............Q...
-\newdimen\!dypos %..WB.....U..P......
-\newdimen\!dyprime %...............Q...
-\newdimen\!ht %.A..X.......P....S.
-\newdimen\!leaderlength %......D..U.........
-\newdimen\!lshrinkage %.................S.
-\newdimen\!midarclength %...............Q...
-\newdimen\!offset %.A................T
-\newdimen\!plotheadingoffset %.A.................
-\newdimen\!plotsymbolxshift %..........L..O.....
-\newdimen\!plotsymbolyshift %..........L..O.....
-\newdimen\!plotxorigin %..........L..O.....
-\newdimen\!plotyorigin %..........L..O.....
-\newdimen\!rshrinkage %.................S.
-\newdimen\!shadesymbolxshift %.................S.
-\newdimen\!shadesymbolyshift %.................S.
-\newdimen\!tshrinkage %.................S.
-\newdimen\!uplength %..........L........
-\newdimen\!wd %....X.......P....S.
-\newdimen\!xB %...............Q...
-\newdimen\!xC %...............Q...
-\newdimen\!xE %..W.....E.L....Q.S.
-\newdimen\!xM %..W.....E......Q.S.
-\newdimen\!xS %..W.....E.L....Q.S.
-\newdimen\!xaxislength %.A................T
-\newdimen\!xdiff %..........L........
-\newdimen\!xleft %............P......
-\newdimen\!xloc %..WB.....U.......S.
-\newdimen\!xorigin %.A........L.P....S.
-\newdimen\!xpivot %................R..
-\newdimen\!xpos %..........L.P..Q.ST
-\newdimen\!xprime %...............Q...
-\newdimen\!xright %............P......
-\newdimen\!xshade %.................S.
-\newdimen\!xshift %..W.........PO...S.
-\newdimen\!xtemp %............P......
-\newdimen\!xunit %.AWBX...EUL.P..QRS.
-\newdimen\!xxE %........E..........
-\newdimen\!xxM %........E..........
-\newdimen\!xxS %........E..........
-\newdimen\!xxloc %..WB....EU.........
-\newdimen\!yB %...............Q...
-\newdimen\!yC %...............Q...
-\newdimen\!yE %..W.....E.L....Q...
-\newdimen\!yM %..W.....E......Q...
-\newdimen\!yS %..W.....E.L....Q...
-\newdimen\!yaxislength %.A................T
-\newdimen\!ybot %............P......
-\newdimen\!ydiff %..........L........
-\newdimen\!yloc %..WB.....U.......S.
-\newdimen\!yorigin %.A........L.P....S.
-\newdimen\!ypivot %................R..
-\newdimen\!ypos %..........L.P..Q.ST
-\newdimen\!yprime %...............Q...
-\newdimen\!yshade %.................S.
-\newdimen\!yshift %..W.........PO...S.
-\newdimen\!ytemp %............P......
-\newdimen\!ytop %............P......
-\newdimen\!yunit %.AWBX...EUL.P..QRS.
-\newdimen\!yyE %........E..........
-\newdimen\!yyM %........E..........
-\newdimen\!yyS %........E..........
-\newdimen\!yyloc %..WB....EU.........
-
-\newif\if!axisvisible %.A.................
-\newif\if!gridlinestoo %..................T
-\newif\if!keepPO %...................
-\newif\if!placeaxislabel %.A.................
-\newif\if!switch %H..................
-\newif\if!xswitch %.A................T
-
-\newtoks\!axisLaBeL %.A.................
-\newtoks\!keywordtoks %.A.................
-
-\newwrite\!replotfile %.............O.....
-
-\newhelp\!keywordhelp{The keyword mentioned in the error message in unknown.
-Replace NEW KEYWORD in the indicated response by the keyword that
-should have been specified.} %.A.................
-
-% The following commands assign alternate names to some of the
-% above registers. "\!wlet" is defined in Hacks.
-\!wlet\!!origin=\!xM %.A................T
-\!wlet\!!unit=\!uplength %.A................T
-\!wlet\!Lresiduallength=\!dimenG %.........U.........
-\!wlet\!Rresiduallength=\!dimenF %.........U.........
-\!wlet\!axisLength=\!distacross %.A................T
-\!wlet\!axisend=\!ydiff %.A................T
-\!wlet\!axisstart=\!xdiff %.A................T
-\!wlet\!axisxlevel=\!arclength %.A................T
-\!wlet\!axisylevel=\!downlength %.A................T
-\!wlet\!beta=\!dimenE %...............Q...
-\!wlet\!gamma=\!dimenF %...............Q...
-\!wlet\!shadexorigin=\!plotxorigin %.................S.
-\!wlet\!shadeyorigin=\!plotyorigin %.................S.
-\!wlet\!ticklength=\!xS %..................T
-\!wlet\!ticklocation=\!xE %..................T
-\!wlet\!ticklocationincr=\!yE %..................T
-\!wlet\!tickwidth=\!yS %..................T
-\!wlet\!totalleaderlength=\!dimenE %.........U.........
-\!wlet\!xone=\!xprime %....X..............
-\!wlet\!xtwo=\!dxprime %....X..............
-\!wlet\!ySsave=\!yM %...................
-\!wlet\!ybB=\!yB %.................S.
-\!wlet\!ybC=\!yC %.................S.
-\!wlet\!ybE=\!yE %.................S.
-\!wlet\!ybM=\!yM %.................S.
-\!wlet\!ybS=\!yS %.................S.
-\!wlet\!ybpos=\!yyloc %.................S.
-\!wlet\!yone=\!yprime %....X..............
-\!wlet\!ytB=\!xB %.................S.
-\!wlet\!ytC=\!xC %.................S.
-\!wlet\!ytE=\!downlength %.................S.
-\!wlet\!ytM=\!arclength %.................S.
-\!wlet\!ytS=\!distacross %.................S.
-\!wlet\!ytpos=\!xxloc %.................S.
-\!wlet\!ytwo=\!dyprime %....X..............
-
-
-% Initial values for registers
-\def\!zpt{0pt} % static
-\!xunit=1pt
-\!yunit=1pt
-\!arearloc=\!xunit
-\!areatloc=\!yunit
-\!dshade=5pt
-\!leaderlength=24in
-\def\!tfs{256} % static
-\def\!wmax{5.3pt} % static
-\def\!wmin{2.7pt} % static
-\!xaxislength=\!xunit
-\!xpivot=\!zpt
-\!yaxislength=\!yunit
-\!ypivot=\!zpt
-\plotsymbolspacing=.4pt
- \!dimenA=50pt \def\!fiftypt{\the\!dimenA} % static
-
-\def\!rootten{3.162278pt} % static
-\def\!tenAa{8.690286pt} % static (A5)
-\def\!tenAc{2.773839pt} % static (A3)
-\def\!tenAe{2.543275pt} % static (A1)
-
-% Initial values for control sequences
-\def\!cosrotationangle{1} %................R..
-\def\!sinrotationangle{0} %................R..
-\def\!xpivotcoord{0} %................R..
-\def\!xref{0} %............P......
-\def\!xshadesave{0} %.................S.
-\def\!ypivotcoord{0} %................R..
-\def\!yref{0} %............P......
-\def\!yshadesave{0} %.................S.
-\def\!zero{0} %..................T
-
-% Reset TeX to report allocations
-\let\wlog=\!!!wlog
-% *************************************
-% *** AREAS: Deals with plot areas ***
-% *************************************
-%
-% ** User commands
-% ** \setplotarea x from LEFT XCOORD to RIGTH XCOORD, y from BOTTOM YCOORD
-% ** to TOP YCOORD
-% ** \axis BOTTOM-LEFT-TOP-RIGHT [SHIFTEDTO xy=COORD] [VISIBLE-INVISIBLE]
-% ** [LABEL {label}] [TICKS] /
-% ** \visibleaxes
-% ** \invisibleaxes
-% ** \plotheading {HEADING}
-% ** \grid {# of columns} {# of rows}
-% ** \normalgraphs
-
-% ** \normalgraphs
-% ** Sets defaults for graph setup. See Subsection 3.4 of manual.
-\def\normalgraphs{%
- \longticklength=.4\baselineskip
- \shortticklength=.25\baselineskip
- \tickstovaluesleading=.25\baselineskip
- \valuestolabelleading=.8\baselineskip
- \linethickness=.4pt
- \stackleading=.17\baselineskip
- \headingtoplotskip=1.5\baselineskip
- \visibleaxes
- \ticksout
- \nogridlines
- \unloggedticks}
-%
-% ** \setplotarea x from LEFT XCOORD to RIGTH XCOORD, y from BOTTOM YCOORD
-% ** to TOP YCOORD
-% ** Reserves space in PICBOX for a rectangular box with the indicated
-% ** coordinates. Must be specified before calls to \axis,
-% ** \grid, \plotheading.
-% ** See Subsection 3.1 of the manual.
-\def\setplotarea x from #1 to #2, y from #3 to #4 {%
- \!arealloc=\!M{#1}\!xunit \advance \!arealloc -\!xorigin
- \!areabloc=\!M{#3}\!yunit \advance \!areabloc -\!yorigin
- \!arearloc=\!M{#2}\!xunit \advance \!arearloc -\!xorigin
- \!areatloc=\!M{#4}\!yunit \advance \!areatloc -\!yorigin
- \!initinboundscheck
- \!xaxislength=\!arearloc \advance\!xaxislength -\!arealloc
- \!yaxislength=\!areatloc \advance\!yaxislength -\!areabloc
- \!plotheadingoffset=\!zpt
- \!dimenput {{\setbox0=\hbox{}\wd0=\!xaxislength\ht0=\!yaxislength\box0}}
- [bl] (\!arealloc,\!areabloc)}
-%
-% ** \visibleaxes, \invisibleaxes
-% ** Switches for setting visibility of subsequent axes.
-% ** See Subsection 3.2 of the manual.
-\def\visibleaxes{%
- \def\!axisvisibility{\!axisvisibletrue}}
-\def\invisibleaxes{%
- \def\!axisvisibility{\!axisvisiblefalse}}
-%
-% ** The next few macros enable the user to fix up an erroneous keyword
-% ** in the \axis command.
-% \newhelp is in ALLOCATIONS
-% \newhelp\!keywordhelp{The keyword mentioned in the error message in unknown.
-% Replace NEW KEYWORD in the indicated response by the keyword that
-% should have been specified.}
-
-\def\!fixkeyword#1{%
- \errhelp=\!keywordhelp
- \errmessage{Unrecognized keyword `#1': \the\!keywordtoks{NEW KEYWORD}'}}
-
-% \newtoks\!keywordtoks In ALLOCATIONS.
-\!keywordtoks={enter `i\fixkeyword}
-
-\def\fixkeyword#1{%
- \!nextkeyword#1 }
-
-% ** \axis BOTTOM-LEFT-TOP-RIGHT [SHIFTEDTO xy=COORD] [VISIBLE-INVISIBLE]
-% ** [LABEL {label}] [TICKS] /
-% ** Exactly one of the keywords BOTTOM, LEFT, TOP, RIGHT must be
-% ** specified. Axis is drawn along the indicated edge of the current
-% ** plot area, shifted if the SHIFTEDTO option is used, visible or
-% ** invisible according the selected option, with an optional LABEL,
-% ** and optional TICKS (see ticks.tex for the options avialabel with
-% ** TICKS). The TICKS option must be the last one specified. The \axis
-% ** MUST be terminated with a / followed by a space.
-% ** See Subsection 3.2 of the manual for more information.
-
-% ** The various options of the \axis command are processed by the
-% ** \!nextkeyword macro defined below. For example,
-% ** `\!nextkeyword shiftedto ' expands to `\!axisshiftedto'.
-\def\axis {%
- \def\!nextkeyword##1 {%
- \expandafter\ifx\csname !axis##1\endcsname \relax
- \def\!next{\!fixkeyword{##1}}%
- \else
- \def\!next{\csname !axis##1\endcsname}%
- \fi
- \!next}%
- \!offset=\!zpt
- \!axisvisibility
- \!placeaxislabelfalse
- \!nextkeyword}
-
-% ** This and the various macros that follow handle the keyword
-% ** specifications on the \axis command
-% ** See Subsection 3.2 of the manual.
-\def\!axisbottom{%
- \!axisylevel=\!areabloc
- \def\!tickxsign{0}%
- \def\!tickysign{-}%
- \def\!axissetup{\!axisxsetup}%
- \def\!axislabeltbrl{t}%
- \!nextkeyword}
-
-\def\!axistop{%
- \!axisylevel=\!areatloc
- \def\!tickxsign{0}%
- \def\!tickysign{+}%
- \def\!axissetup{\!axisxsetup}%
- \def\!axislabeltbrl{b}%
- \!nextkeyword}
-
-\def\!axisleft{%
- \!axisxlevel=\!arealloc
- \def\!tickxsign{-}%
- \def\!tickysign{0}%
- \def\!axissetup{\!axisysetup}%
- \def\!axislabeltbrl{r}%
- \!nextkeyword}
-
-\def\!axisright{%
- \!axisxlevel=\!arearloc
- \def\!tickxsign{+}%
- \def\!tickysign{0}%
- \def\!axissetup{\!axisysetup}%
- \def\!axislabeltbrl{l}%
- \!nextkeyword}
-
-\def\!axisshiftedto#1=#2 {%
- \if 0\!tickxsign
- \!axisylevel=\!M{#2}\!yunit
- \advance\!axisylevel -\!yorigin
- \else
- \!axisxlevel=\!M{#2}\!xunit
- \advance\!axisxlevel -\!xorigin
- \fi
- \!nextkeyword}
-
-\def\!axisvisible{%
- \!axisvisibletrue
- \!nextkeyword}
-
-\def\!axisinvisible{%
- \!axisvisiblefalse
- \!nextkeyword}
-
-\def\!axislabel#1 {%
- \!axisLaBeL={#1}%
- \!placeaxislabeltrue
- \!nextkeyword}
-
-\expandafter\def\csname !axis/\endcsname{%
- \!axissetup % This could done already by "ticks"; if so, now \relax
- \if!placeaxislabel
- \!placeaxislabel
- \fi
- \if +\!tickysign % ** (A "top" axis)
- \!dimenA=\!axisylevel
- \advance\!dimenA \!offset % ** dimA = top of the axis structure
- \advance\!dimenA -\!areatloc % ** dimA = excess over the plot area
- \ifdim \!dimenA>\!plotheadingoffset
- \!plotheadingoffset=\!dimenA % ** Greatest excess over the plot area
- \fi
- \fi}
-
-% ** \grid {c} {r}
-% ** Partitions the plot area into c columns and r rows; see Subsection 3.3
-% ** of the manual.
-% ** (Other grid patterns can be drawn with the TICKS option of the \axis
-% ** command.
-\def\grid #1 #2 {%
- \!countA=#1\advance\!countA 1
- \axis bottom invisible ticks length <\!zpt> andacross quantity {\!countA} /
- \!countA=#2\advance\!countA 1
- \axis left invisible ticks length <\!zpt> andacross quantity {\!countA} / }
-
-% ** \plotheading{HEADING}
-% ** Places HEADING centered above the top of the plotarea (and above
-% ** any top axis ticks marks, tick labels, and axis label); see
-% ** Subsection 3.3 of the manual.
-\def\plotheading#1 {%
- \advance\!plotheadingoffset \headingtoplotskip
- \!dimenput {#1} [B] <.5\!xaxislength,\!plotheadingoffset>
- (\!arealloc,\!areatloc)}
-
-% ** From here on, the routines are internal.
-\def\!axisxsetup{%
- \!axisxlevel=\!arealloc
- \!axisstart=\!arealloc
- \!axisend=\!arearloc
- \!axisLength=\!xaxislength
- \!!origin=\!xorigin
- \!!unit=\!xunit
- \!xswitchtrue
- \if!axisvisible
- \!makeaxis
- \fi}
-
-\def\!axisysetup{%
- \!axisylevel=\!areabloc
- \!axisstart=\!areabloc
- \!axisend=\!areatloc
- \!axisLength=\!yaxislength
- \!!origin=\!yorigin
- \!!unit=\!yunit
- \!xswitchfalse
- \if!axisvisible
- \!makeaxis
- \fi}
-
-\def\!makeaxis{%
- \setbox\!boxA=\hbox{% (Make a pseudo-y[x] tick for an x[y]-axis)
- \beginpicture
- \!setdimenmode
- \setcoordinatesystem point at {\!zpt} {\!zpt}
- \putrule from {\!zpt} {\!zpt} to
- {\!tickysign\!tickysign\!axisLength}
- {\!tickxsign\!tickxsign\!axisLength}
- \endpicturesave <\!Xsave,\!Ysave>}%
- \wd\!boxA=\!zpt
- \!placetick\!axisstart}
-
-\def\!placeaxislabel{%
- \advance\!offset \valuestolabelleading
- \if!xswitch
- \!dimenput {\the\!axisLaBeL} [\!axislabeltbrl]
- <.5\!axisLength,\!tickysign\!offset> (\!axisxlevel,\!axisylevel)
- \advance\!offset \!dp % ** advance offset by the "tallness"
- \advance\!offset \!ht % ** of the label
- \else
- \!dimenput {\the\!axisLaBeL} [\!axislabeltbrl]
- <\!tickxsign\!offset,.5\!axisLength> (\!axisxlevel,\!axisylevel)
- \fi
- \!axisLaBeL={}}
-
-
-% *******************************
-% *** ARROWS (Draws arrows) ***
-% *******************************
-%
-% ** User commands
-% ** \arrow <ARROW HEAD LENGTH> [MID FRACTION, BASE FRACTION]
-% ** [<XSHIFT,YSHIFT>] from XFROM YFROM to XTO YTO
-% ** \betweenarrows {TEXT} [orientation & shift] from XFROM YFROM to XTO YTO
-
-% ** \arrow <ARROW HEAD LENGTH> [MID FRACTION, BASE FRACTION]
-% ** [<XSHIFT,YSHIFT>] from XFROM YFROM to XTO YTO
-% ** Draws an arrow from (XFROM,YFROM) to (XTO,YTO). The arrow head
-% ** is constructed two quadratic arcs, which extend back a distance
-% ** ARROW HEAD LENGTH (a dimension) on both sides of the arrow shaft.
-% ** All the way back the arcs are a distance BASE FRACTION*ARROW HEAD
-% ** LENGTH apart, while half-way back they are a distance MID FRACTION*
-% ** ARROW HEAD LENGTH apart. <XSHIFT,YSHIFT> is optional, and has
-% ** its usual interpreation. See Subsection 5.4 of the manual.
-
-\def\arrow <#1> [#2,#3]{%
- \!ifnextchar<{\!arrow{#1}{#2}{#3}}{\!arrow{#1}{#2}{#3}<\!zpt,\!zpt> }}
-
-\def\!arrow#1#2#3<#4,#5> from #6 #7 to #8 #9 {%
-%
-% ** convert to dimensions
- \!xloc=\!M{#8}\!xunit
- \!yloc=\!M{#9}\!yunit
- \!dxpos=\!xloc \!dimenA=\!M{#6}\!xunit \advance \!dxpos -\!dimenA
- \!dypos=\!yloc \!dimenA=\!M{#7}\!yunit \advance \!dypos -\!dimenA
- \let\!MAH=\!M% ** save current c/d mode
- \!setdimenmode% ** go into dimension mode
-%
- \!xshift=#4\relax \!yshift=#5\relax% ** pick up shift
- \!reverserotateonly\!xshift\!yshift% ** back rotate shift
- \advance\!xshift\!xloc \advance\!yshift\!yloc
-%
-% ** draw shaft of arrow
- \!xS=-\!dxpos \advance\!xS\!xshift
- \!yS=-\!dypos \advance\!yS\!yshift
- \!start (\!xS,\!yS)
- \!ljoin (\!xshift,\!yshift)
-%
-% ** find 32*cosine and 32*sine of angle of rotation
- \!Pythag\!dxpos\!dypos\!arclength
- \!divide\!dxpos\!arclength\!dxpos
- \!dxpos=32\!dxpos \!removept\!dxpos\!!cos
- \!divide\!dypos\!arclength\!dypos
- \!dypos=32\!dypos \!removept\!dypos\!!sin
-%
-% ** construct arrowhead
- \!halfhead{#1}{#2}{#3}% ** draw half of arrow head
- \!halfhead{#1}{-#2}{-#3}% ** draw other half
-%
- \let\!M=\!MAH% ** restore old c/d mode
- \ignorespaces}
-%
-% ** draw half of arrow head
- \def\!halfhead#1#2#3{%
- \!dimenC=-#1%
- \divide \!dimenC 2 % ** half way back
- \!dimenD=#2\!dimenC% ** half the mid width
- \!rotate(\!dimenC,\!dimenD)by(\!!cos,\!!sin)to(\!xM,\!yM)
- \!dimenC=-#1% ** all the way back
- \!dimenD=#3\!dimenC
- \!dimenD=.5\!dimenD% ** half the full width
- \!rotate(\!dimenC,\!dimenD)by(\!!cos,\!!sin)to(\!xE,\!yE)
- \!start (\!xshift,\!yshift)
- \advance\!xM\!xshift \advance\!yM\!yshift
- \advance\!xE\!xshift \advance\!yE\!yshift
- \!qjoin (\!xM,\!yM) (\!xE,\!yE)
- \ignorespaces}
-
-
-% ** \betweenarrows {TEXT} [orientation & shift] from XFROM YFROM to XTO YTO
-% ** Makes things like <--- text --->, using arrow heads from TeX's fonts.
-% ** See Subsection 5.4 of the manual.
-\def\betweenarrows #1#2 from #3 #4 to #5 #6 {%
- \!xloc=\!M{#3}\!xunit \!xxloc=\!M{#5}\!xunit%
- \!yloc=\!M{#4}\!yunit \!yyloc=\!M{#6}\!yunit%
- \!dxpos=\!xxloc \advance\!dxpos by -\!xloc
- \!dypos=\!yyloc \advance\!dypos by -\!yloc
- \advance\!xloc .5\!dxpos
- \advance\!yloc .5\!dypos
-%
- \let\!MBA=\!M% ** save current coord\dimen mode
- \!setdimenmode% ** express locations in dimens
- \ifdim\!dypos=\!zpt
- \ifdim\!dxpos<\!zpt \!dxpos=-\!dxpos \fi
- \put {\!lrarrows{\!dxpos}{#1}}#2{} at {\!xloc} {\!yloc}
- \else
- \ifdim\!dxpos=\!zpt
- \ifdim\!dypos<\!zpt \!dypos=-\!zpt \fi
- \put {\!udarrows{\!dypos}{#1}}#2{} at {\!xloc} {\!yloc}
- \fi
- \fi
- \let\!M=\!MBA% ** restore previous c/d mode
- \ignorespaces}
-
-% ** Subroutine for left-right between arrows
-\def\!lrarrows#1#2{% #1=width, #2=text
- {\setbox\!boxA=\hbox{$\mkern-2mu\mathord-\mkern-2mu$}%
- \setbox\!boxB=\hbox{$\leftarrow$}\!dimenE=\ht\!boxB
- \setbox\!boxB=\hbox{}\ht\!boxB=2\!dimenE
- \hbox to #1{$\mathord\leftarrow\mkern-6mu
- \cleaders\copy\!boxA\hfil
- \mkern-6mu\mathord-$%
- \kern.4em $\vcenter{\box\!boxB}$$\vcenter{\hbox{#2}}$\kern.4em
- $\mathord-\mkern-6mu
- \cleaders\copy\!boxA\hfil
- \mkern-6mu\mathord\rightarrow$}}}
-
-% ** Subroutine for up-down between arrows
-\def\!udarrows#1#2{% #1=width, #2=text
- {\setbox\!boxB=\hbox{#2}%
- \setbox\!boxA=\hbox to \wd\!boxB{\hss$\vert$\hss}%
- \!dimenE=\ht\!boxA \advance\!dimenE \dp\!boxA \divide\!dimenE 2
- \vbox to #1{\offinterlineskip
- \vskip .05556\!dimenE
- \hbox to \wd\!boxB{\hss$\mkern.4mu\uparrow$\hss}\vskip-\!dimenE
- \cleaders\copy\!boxA\vfil
- \vskip-\!dimenE\copy\!boxA
- \vskip\!dimenE\copy\!boxB\vskip.4em
- \copy\!boxA\vskip-\!dimenE
- \cleaders\copy\!boxA\vfil
- \vskip-\!dimenE \hbox to \wd\!boxB{\hss$\mkern.4mu\downarrow$\hss}
- \vskip .05556\!dimenE}}}
-
-
-% ***************************
-% *** BARS (Draws bars) ***
-% ***************************
-%
-% ** User commands:
-% ** \putbar [<XSHIFT,YSHIFT>] breadth <BREADTH> from XSTART YSTART
-% ** to XEND YEND
-% ** \setbars [<XSHIFT,YSHIFT>] breadth <BREADTH> baseline at XY = COORD
-% ** [baselabels ([B_ORIENTATION_x,B_ORIENTATION_y] <B_XSHIFT,B_YSHIFT>)]
-% ** [endlabels ([E_ORIENTATION_x,E_ORIENTATION_y] <E_XSHIFT,E_YSHIFT>)]
-
-
-% ** \putbar [<XSHIFT,YSHIFT>] breadth <BREADTH> from XSTART YSTART
-% ** to XEND YEND
-% ** Either XSTART=XEND or YSTART=YEND. Draws a rectangle between
-% ** (XSTART,YSTART) & (XEND,YEND). The "depth" of the rectangle
-% ** is determined by those two plot positions; its other
-% ** dimension "breadth" is specified by the dimension BREADTH.
-% ** See Subsection 4.2 of the manual.
-\def\putbar#1breadth <#2> from #3 #4 to #5 #6 {%
- \!xloc=\!M{#3}\!xunit \!xxloc=\!M{#5}\!xunit%
- \!yloc=\!M{#4}\!yunit \!yyloc=\!M{#6}\!yunit%
- \!dypos=\!yyloc \advance\!dypos by -\!yloc
- \!dimenI=#2
-%
- \ifdim \!dimenI=\!zpt % ** If 0 breadth
- \putrule#1from {#3} {#4} to {#5} {#6} % ** Then draw line
- \else % ** Else, put in a rectangle
- \let\!MBar=\!M% ** save current c/d mode
- \!setdimenmode % ** go into dimension mode
- \divide\!dimenI 2
- \ifdim \!dypos=\!zpt
- \advance \!yloc -\!dimenI % ** Equal y coordinates
- \advance \!yyloc \!dimenI
- \else
- \advance \!xloc -\!dimenI % ** Equal x coordinates
- \advance \!xxloc \!dimenI
- \fi
- \putrectangle#1corners at {\!xloc} {\!yloc} and {\!xxloc} {\!yyloc}
- \let\!M=\!MBar % ** restore c/d mode
- \fi
- \ignorespaces}
-
-
-% ** \setbars [<XSHIFT,YSHIFT>] breadth <BREADTH> baseline at XY = COORD
-% ** [baselabels ([B_ORIENTATION_x,B_ORIENTATION_y] <B_XSHIFT,B_YSHIFT>)]
-% ** [endlabels ([E_ORIENTATION_x,E_ORIENTATION_y] <E_XSHIFT,E_YSHIFT>)]
-% ** This command puts PiCTeX into the bar graph drawing mode described
-% ** in Subsection 4.4 of the manual.
-\def\setbars#1breadth <#2> baseline at #3 = #4 {%
- \edef\!barshift{#1}%
- \edef\!barbreadth{#2}%
- \edef\!barorientation{#3}%
- \edef\!barbaseline{#4}%
- \def\!bardobaselabel{\!bardoendlabel}%
- \def\!bardoendlabel{\!barfinish}%
- \let\!drawcurve=\!barcurve
- \!setbars}
-\def\!setbars{%
- \futurelet\!nextchar\!!setbars}
-\def\!!setbars{%
- \if b\!nextchar
- \def\!!!setbars{\!setbarsbget}%
- \else
- \if e\!nextchar
- \def\!!!setbars{\!setbarseget}%
- \else
- \def\!!!setbars{\relax}%
- \fi
- \fi
- \!!!setbars}
-\def\!setbarsbget baselabels (#1) {%
- \def\!barbaselabelorientation{#1}%
- \def\!bardobaselabel{\!!bardobaselabel}%
- \!setbars}
-\def\!setbarseget endlabels (#1) {%
- \edef\!barendlabelorientation{#1}%
- \def\!bardoendlabel{\!!bardoendlabel}%
- \!setbars}
-
-% ** \!barcurve
-% ** Draws a bargraph with preset values of barshift, barbreadth,
-% ** barorientation (x or y) and barbaseline (coordinate)
-\def\!barcurve #1 #2 {%
- \if y\!barorientation
- \def\!basexarg{#1}%
- \def\!baseyarg{\!barbaseline}%
- \else
- \def\!basexarg{\!barbaseline}%
- \def\!baseyarg{#2}%
- \fi
- \expandafter\putbar\!barshift breadth <\!barbreadth> from {\!basexarg}
- {\!baseyarg} to {#1} {#2}
- \def\!endxarg{#1}%
- \def\!endyarg{#2}%
- \!bardobaselabel}
-
-\def\!!bardobaselabel "#1" {%
- \put {#1}\!barbaselabelorientation{} at {\!basexarg} {\!baseyarg}
- \!bardoendlabel}
-
-\def\!!bardoendlabel "#1" {%
- \put {#1}\!barendlabelorientation{} at {\!endxarg} {\!endyarg}
- \!barfinish}
-
-\def\!barfinish{%
- \!ifnextchar/{\!finish}{\!barcurve}}
-
-
-% ********************************
-% *** BOXES (Draws rectangles) ***
-% ********************************
-%
-% ** User commands:
-% ** \putrectangle [<XSHIFT,YSHIFT>] corners at XCOORD1 YCOORD1
-% ** and XCOORD2 YCOORD2
-% ** \shaderectangleson
-% ** \shaderectanglesoff
-% ** \frame [<SEPARATION>] {TEXT}
-% ** \rectangle <WIDTH> <HEIGHT>
-%
-%
-% ** \putrectangle [<XSHIFT,YSHIFT>] corners at XCOORD1 YCOORD1
-% ** and XCOORD2 YCOORD2
-% ** Draws a rectangle with corners at (X1,Y1), (X2,Y1), (X1,Y2), (X2,Y2)
-% ** Lines have thickness \linethickness, and overlap at the corners.
-% ** The optional field <XSHIFT,YSHIFT> functions as with a \put command.
-% ** See Subsection 4.2 of the manual.
-\def\putrectangle{%
- \!ifnextchar<{\!putrectangle}{\!putrectangle<\!zpt,\!zpt> }}
-\def\!putrectangle<#1,#2> corners at #3 #4 and #5 #6 {%
-%
-% ** get locations
- \!xone=\!M{#3}\!xunit \!xtwo=\!M{#5}\!xunit%
- \!yone=\!M{#4}\!yunit \!ytwo=\!M{#6}\!yunit%
- \ifdim \!xtwo<\!xone
- \!dimenI=\!xone \!xone=\!xtwo \!xtwo=\!dimenI
- \fi
- \ifdim \!ytwo<\!yone
- \!dimenI=\!yone \!yone=\!ytwo \!ytwo=\!dimenI
- \fi
- \!dimenI=#1\relax \advance\!xone\!dimenI \advance\!xtwo\!dimenI
- \!dimenI=#2\relax \advance\!yone\!dimenI \advance\!ytwo\!dimenI
- \let\!MRect=\!M% ** save current coord/dimen mode
- \!setdimenmode
-%
-% ** shade rectangle if appropriate
- \!shaderectangle
-%
-% ** draw horizontal edges
- \!dimenI=.5\linethickness
- \advance \!xone -\!dimenI% ** adjust x-location to overlap corners
- \advance \!xtwo \!dimenI% ** ditto
- \putrule from {\!xone} {\!yone} to {\!xtwo} {\!yone}
- \putrule from {\!xone} {\!ytwo} to {\!xtwo} {\!ytwo}
-%
-% ** draw vertical edges
- \advance \!xone \!dimenI% ** restore original x-values
- \advance \!xtwo -\!dimenI%
- \advance \!yone -\!dimenI% ** adjust y-location to overlap corners
- \advance \!ytwo \!dimenI% ** ditto
- \putrule from {\!xone} {\!yone} to {\!xone} {\!ytwo}
- \putrule from {\!xtwo} {\!yone} to {\!xtwo} {\!ytwo}
-%
- \let\!M=\!MRect% ** restore coord/dimen mode
- \ignorespaces}
-
-% ** \shaderectangleson
-% ** Subsequent rectangles will be shaded according to
-% ** the current shading pattern. Affects \putrectangle, \putbar,
-% ** \frame, \sethistograms, and \setbars. See Subsection 7.5 of the manual.
-\def\shaderectangleson{%
- \def\!shaderectangle{\!!shaderectangle}%
- \ignorespaces}
-% ** \shaderectanglesoff
-% ** Suppresses \shaderectangleson. The default.
-\def\shaderectanglesoff{%
- \def\!shaderectangle{}%
- \ignorespaces}
-
-\shaderectanglesoff
-
-% ** The following internal routine shades the current rectangle, when
-% ** \!shaderectangle = \!!shaderectangle .
-\def\!!shaderectangle{%
- \!dimenA=\!xtwo \advance \!dimenA -\!xone
- \!dimenB=\!ytwo \advance \!dimenB -\!yone
- \ifdim \!dimenA<\!dimenB
- \!startvshade (\!xone,\!yone,\!ytwo)
- \!lshade (\!xtwo,\!yone,\!ytwo)
- \else
- \!starthshade (\!yone,\!xone,\!xtwo)
- \!lshade (\!ytwo,\!xone,\!xtwo)
- \fi
- \ignorespaces}
-
-% ** \frame [<SEPARATION>] {TEXT}
-% ** Draws a frame of thickness linethickness about the box enclosing
-% ** TEXT; the frame is separated from the box by a distance of
-% ** SEPARATION. The result is an hbox with the same baseline as TEXT.
-% ** If <SEPARATION> is omitted, you get the effect of <0pt>.
-% ** See Subsection 4.2 of the manual.
-\def\frame{%
- \!ifnextchar<{\!frame}{\!frame<\!zpt> }}
-\long\def\!frame<#1> #2{%
- \beginpicture
- \setcoordinatesystem units <1pt,1pt> point at 0 0
- \put {#2} [Bl] at 0 0
- \!dimenA=#1\relax
- \!dimenB=\!wd \advance \!dimenB \!dimenA
- \!dimenC=\!ht \advance \!dimenC \!dimenA
- \!dimenD=\!dp \advance \!dimenD \!dimenA
- \let\!MFr=\!M
- \!setdimenmode
- \putrectangle corners at {-\!dimenA} {-\!dimenD} and {\!dimenB} {\!dimenC}
- \!setcoordmode
- \let\!M=\!MFr
- \endpicture
- \ignorespaces}
-
-% ** \rectangle <WIDTH> <HEIGHT>
-% ** Constructs a rectangle of width WIDTH and heigth HEIGHT.
-% ** See Subsection 4.2 of the manual.
-\def\rectangle <#1> <#2> {%
- \setbox0=\hbox{}\wd0=#1\ht0=#2\frame {\box0}}
-
-
-% *********************************************
-% *** CURVES (Upper level \plot commands) ***
-% *********************************************
-%
-% ** User commands
-% ** \plot DATA /
-% ** \plot "FILE NAME"
-% ** \setquadratic
-% ** \setlinear
-% ** \sethistograms
-% ** \vshade ...
-% ** \hshade ...
-
-% \plot: multi-purpose command. Draws histograms, bar graphs, piecewise-linear
-% or piecewise quadratic curves, depending on the setting of \!drawcurve.
-% See Subsections 4.3-4.5, 5.1, 5.2 of the manual.
-\def\plot{%
- \!ifnextchar"{\!plotfromfile}{\!drawcurve}}
-\def\!plotfromfile"#1"{%
- \expandafter\!drawcurve \input #1 /}
-
-% Command to set piecewise quadratic mode
-% See Subsections 5.1, 7.3, and 7.4 of the manual.
-\def\setquadratic{%
- \let\!drawcurve=\!qcurve
- \let\!!Shade=\!!qShade
- \let\!!!Shade=\!!!qShade}
-
-% Command to set piecewise linear mode
-% See Subsections 5.1, 7.3, and 7.4 of the manual.
-\def\setlinear{%
- \let\!drawcurve=\!lcurve
- \let\!!Shade=\!!lShade
- \let\!!!Shade=\!!!lShade}
-
-% Command to set histogram mode
-% See Subsection 4.3 of the manual.
-\def\sethistograms{%
- \let\!drawcurve=\!hcurve}
-
-% Commands to cycle through list of coordinates in piecewise quadratic
-% interpolation mode
-\def\!qcurve #1 #2 {%
- \!start (#1,#2)
- \!Qjoin}
-\def\!Qjoin#1 #2 #3 #4 {%
- \!qjoin (#1,#2) (#3,#4) % \!qjoin is defined in QUADRATIC
- \!ifnextchar/{\!finish}{\!Qjoin}}
-
-% Commands to cycle through list of coordinates in piecewise linear
-% interpolation mode
-\def\!lcurve #1 #2 {%
- \!start (#1,#2)
- \!Ljoin}
-\def\!Ljoin#1 #2 {%
- \!ljoin (#1,#2) % \!ljoin is defined in LINEAR
- \!ifnextchar/{\!finish}{\!Ljoin}}
-
-\def\!finish/{\ignorespaces}
-
-% Command to cycle through list of coordinates in histogram mode
-\def\!hcurve #1 #2 {%
- \edef\!hxS{#1}%
- \edef\!hyS{#2}%
- \!hjoin}
-\def\!hjoin#1 #2 {%
- \putrectangle corners at {\!hxS} {\!hyS} and {#1} {#2}
- \edef\!hxS{#1}%
- \!ifnextchar/{\!finish}{\!hjoin}}
-
-
-% \vshade: See Subsection 7.3 of the manual.
-\def\vshade #1 #2 #3 {%
- \!startvshade (#1,#2,#3)
- \!Shadewhat}
-
-% \hshade: See Subsection 7.4 of the manual.
-\def\hshade #1 #2 #3 {%
- \!starthshade (#1,#2,#3)
- \!Shadewhat}
-
-% Commands to cycle through coordinates and optional "edge effect"
-% fields while shading.
-\def\!Shadewhat{%
- \futurelet\!nextchar\!Shade}
-\def\!Shade{%
- \if <\!nextchar
- \def\!nextShade{\!!Shade}%
- \else
- \if /\!nextchar
- \def\!nextShade{\!finish}%
- \else
- \def\!nextShade{\!!!Shade}%
- \fi
- \fi
- \!nextShade}
-\def\!!lShade<#1> #2 #3 #4 {%
- \!lshade <#1> (#2,#3,#4) % \!lshade is defined in SHADING
- \!Shadewhat}
-\def\!!!lShade#1 #2 #3 {%
- \!lshade (#1,#2,#3)
- \!Shadewhat}
-\def\!!qShade<#1> #2 #3 #4 #5 #6 #7 {%
- \!qshade <#1> (#2,#3,#4) (#5,#6,#7) % \!qshade is defined in SHADING
- \!Shadewhat}
-\def\!!!qShade#1 #2 #3 #4 #5 #6 {%
- \!qshade (#1,#2,#3) (#4,#5,#6)
- \!Shadewhat}
-
-% ** Set default interpolation mode
-\setlinear
-
-
-% ********************************************
-% *** DASHPATTERNS (Sets up dash patterns) ***
-% ********************************************
-
-% ** User commands:
-% ** \setdashpattern <DIMEN1,DIMEN2,DIMEN3,...>
-% ** \setdots <INTRADOT_DISTANCE>
-% ** \setdotsnear <INTRADOT_DISTANCE> for <ARC LENGTH>
-% ** \setdashes <DASH/SKIP_DISTANCE>
-% ** \setdashesnear <DASH/SKIP_DISTANCE> for <ARC LENGTH>
-% ** \setsolid
-% ** \findlength {CURVE CMDS}
-
-% ** Internal commands:
-% ** \!dashingon
-% ** \!dashingoff
-
-% ** Dash patterns are specified by a balanced token list whose complete
-% ** expansion has the form: DIMEN1,DIMEN2,DIMEN3,DIMEN4,... ; this produces
-% ** an arc of length DIMEN1, a skip of length DIMEN2, an arc of length
-% ** DIMEN3, a skip of length DIMEN4, ... . Any number of DIMEN values may
-% ** be given. The pattern is repeated as many times (perhaps fractional)
-% ** as necessary to draw the curve.
-% ** A dash pattern remains in effect until it is overridden by a call to
-% ** \setdashpattern, or to \setdots, \setdotsnear ... , \setdashes,
-% ** \setdashesnear ... , or \setsolid.
-% ** Solid lines are the default.
-
-
-% ** \def\setdashpattern <DIMEN1,DIMEN2,DIMEN3,...>
-% ** The following routine converts a balanced list of tokens whose
-% ** complete expansion has the form DIMEN1,DIMEN2, ... , DIMENk into
-% ** three list macros that are used in drawing dashed rules and curves:
-% ** !Flist: \!Rule{DIMEN1}\!Skip{DIMEN2}\!Rule{DIMEN3}\!Skip{DIMEN4} ...
-% ** !Blist: ...\!Skip{DIMEN4}\!Rule{DIMEN3}\!Skip{DIMEN2}\!Rule{DIMEN1}
-% ** !UDlist: \\{DIMEN1}\\{DIMEN2}\\{DIMEN3}\\{DIMEN4} ...;
-% ** calculates \!leaderlength := DIMEN1 + ... + DIMENk; and
-% ** sets the curve drawing routines to dash mode.
-% ** Those lists are used by the curve drawing routines.
-% ** Dimenj ... may be given as an explicit dimension (e.g., 5pt), or
-% ** as an expression involving a dimension register (e.g., -2.5\dimen0).
-% ** See Subsection 6.2 of the manual
-\def\setdashpattern <#1>{%
- \def\!Flist{}\def\!Blist{}\def\!UDlist{}%
- \!countA=0
- \!ecfor\!item:=#1\do{%
- \!dimenA=\!item\relax
- \expandafter\!rightappend\the\!dimenA\withCS{\\}\to\!UDlist%
- \advance\!countA 1
- \ifodd\!countA
- \expandafter\!rightappend\the\!dimenA\withCS{\!Rule}\to\!Flist%
- \expandafter\!leftappend\the\!dimenA\withCS{\!Rule}\to\!Blist%
- \else
- \expandafter\!rightappend\the\!dimenA\withCS{\!Skip}\to\!Flist%
- \expandafter\!leftappend\the\!dimenA\withCS{\!Skip}\to\!Blist%
- \fi}%
- \!leaderlength=\!zpt
- \def\!Rule##1{\advance\!leaderlength ##1}%
- \def\!Skip##1{\advance\!leaderlength ##1}%
- \!Flist%
- \ifdim\!leaderlength>\!zpt
- \else
- \def\!Flist{\!Skip{24in}}\def\!Blist{\!Skip{24in}}\ignorespaces
- \def\!UDlist{\\{\!zpt}\\{24in}}\ignorespaces
- \!leaderlength=24in
- \fi
- \!dashingon}
-
-
-% ** \!dashingon -- puts the curve drawing routines into dash mode
-% ** \!dashingoff -- puts the curve drawing routines into solid mode
-% ** These are internal commands, invoked by \setdashpattern and \setsolid
-\def\!dashingon{%
- \def\!advancedashing{\!!advancedashing}%
- \def\!drawlinearsegment{\!lineardashed}%
- \def\!puthline{\!putdashedhline}%
- \def\!putvline{\!putdashedvline}%
-% \def\!putsline{\!putdashedsline}%
- \ignorespaces}%
-\def\!dashingoff{%
- \def\!advancedashing{\relax}%
- \def\!drawlinearsegment{\!linearsolid}%
- \def\!puthline{\!putsolidhline}%
- \def\!putvline{\!putsolidvline}%
-% \def\!putsline{\!putsolidsline}%
- \ignorespaces}
-
-
-% ** \setdots <LENGTH> -- sets up a dot/skip pattern where dot (actually
-% ** the current plotsymbol) is plunked down once for every LENGTH
-% ** traveled along the curve. LENGTH defaults to 5pt.
-% ** See Subsection 6.1 of the manual.
-\def\setdots{%
- \!ifnextchar<{\!setdots}{\!setdots<5pt>}}
-\def\!setdots<#1>{%
- \!dimenB=#1\advance\!dimenB -\plotsymbolspacing
- \ifdim\!dimenB<\!zpt
- \!dimenB=\!zpt
- \fi
-\setdashpattern <\plotsymbolspacing,\!dimenB>}
-
-% ** \setdotsnear <LENGTH> for <ARC LENGTH>
-% ** sets up a dot pattern where the dots are approximately LENGTH apart,
-% ** the total length of the pattern is ARC LENGTH, and the pattern
-% ** begins and ends with a dot. See Subsection 6.3 of the manual.
-\def\setdotsnear <#1> for <#2>{%
- \!dimenB=#2\relax \advance\!dimenB -.05pt
- \!dimenC=#1\relax \!countA=\!dimenC
- \!dimenD=\!dimenB \advance\!dimenD .5\!dimenC \!countB=\!dimenD
- \divide \!countB \!countA
- \ifnum 1>\!countB
- \!countB=1
- \fi
- \divide\!dimenB \!countB
- \setdots <\!dimenB>}
-
-% ** \setdashes <LENGTH> -- sets up a dash/skip pattern where the dash
-% ** and the skip are each of length LENGTH (the dash is formed by
-% ** plunking down the current plotsymbol over an arc of length LENGTH
-% ** and so may actually be longer than LENGTH. LENGTH defaults to 5pt.
-% ** See Subsection 6.1 of the manual.
-\def\setdashes{%
- \!ifnextchar<{\!setdashes}{\!setdashes<5pt>}}
-\def\!setdashes<#1>{\setdashpattern <#1,#1>}
-
-% ** \setdashesnear ...
-% ** Like \setdotsnear; the pattern begins and ends with a dash.
-% ** See Subsection 6.3 of the manual.
-\def\setdashesnear <#1> for <#2>{%
- \!dimenB=#2\relax
- \!dimenC=#1\relax \!countA=\!dimenC
- \!dimenD=\!dimenB \advance\!dimenD .5\!dimenC \!countB=\!dimenD
- \divide \!countB \!countA
- \ifodd \!countB
- \else
- \advance \!countB 1
- \fi
- \divide\!dimenB \!countB
- \setdashes <\!dimenB>}
-
-% ** \setsolid -- puts the curve drawing routines in "solid line" mode,
-% ** the default mode. See Subsection 6.1 of the manual.
-\def\setsolid{%
- \def\!Flist{\!Rule{24in}}\def\!Blist{\!Rule{24in}}%
- \def\!UDlist{\\{24in}\\{\!zpt}}%
- \!dashingoff}
-\setsolid
-
-% ** \findlength {CURVE CMDS}
-% ** PiCTeX executes the \start, \ljoin, and \qjoin cmds comprising
-% ** CURVE CMDS without plotting anything, but stashes the length
-% ** of the phantom curve away in \totalarclength.
-% ** See Subsection 6.3 of the manual.
-\def\findlength#1{%
- \begingroup
- \setdashpattern <0pt, \maxdimen>
- \setplotsymbol ({})
- \dontsavelinesandcurves
- #1%
- \endgroup
- \ignorespaces}
-
-
-% *************************************************************
-% *** DIVISION (Does long division of dimension registers) ***
-% *************************************************************
-
-% ** User command:
-% ** \Divide {DIVIDEND} by {DIVISOR} forming {RESULT}
-
-% ** Internal command
-% ** \!divide{DIVIDEND}{DIVISOR}{RESULT}
-
-% ** \!divide DIVIDEND [by] DIVISOR [to get] ANSWER
-% ** Divides the dimension DIVIDEND by the dimension DIVISOR, placing the
-% ** quotient in the dimension register ANSWER. Values are understood to
-% ** be in points. E.g. 12.5pt/1.4pt=8.92857pt.
-% ** Quotient is accurate to 1/65536pt=2**[-16]pt
-% ** |DIVISOR| should be < 2048pt (about 28 inches).
-\def\!divide#1#2#3{%
- \!dimenB=#1% ** dimB holds current remainder (r)
- \!dimenC=#2% ** dimC holds divisor (d)
- \!dimenD=\!dimenB% ** dimD holds quotient q=r/d for this
- \divide \!dimenD \!dimenC% ** step, in units of scaled pts
- \!dimenA=\!dimenD% ** dimA eventually holds answer (a)
- \multiply\!dimenD \!dimenC% ** r <-- r - dq
- \advance\!dimenB -\!dimenD% ** First step complete. Have integer part
-% ** of a, and corresponding remainder.
- \!dimenD=\!dimenC% ** Temporarily use dimD to hold |d|
- \ifdim\!dimenD<\!zpt \!dimenD=-\!dimenD
- \fi
- \ifdim\!dimenD<64pt% ** Branch on the magnitude of |d|
- \!divstep[\!tfs]\!divstep[\!tfs]%
- \else
- \!!divide
- \fi
- #3=\!dimenA\ignorespaces}
-
-% ** The following code handles divisors d with
-% ** (1) .88in = 64pt <= d < 256pt = 3.54in
-% ** (2) 3.54in = 256pt <= d < 2048pt = 28.34in
-% ** Anything bigger than that may result in an overflow condition.
-% ** For our purposes, we should never even see case (2).
-\def\!!divide{%
- \ifdim\!dimenD<256pt
- \!divstep[64]\!divstep[32]\!divstep[32]%
- \else
- \!divstep[8]\!divstep[8]\!divstep[8]\!divstep[8]\!divstep[8]%
- \!dimenA=2\!dimenA
- \fi}
-
-
-% ** The following macro does the real long division work.
-\def\!divstep[#1]{% ** #1 = "B"
- \!dimenB=#1\!dimenB% ** r <-- B*r
- \!dimenD=\!dimenB% ** dimD holds quotient q=r/d for this
- \divide \!dimenD by \!dimenC% ** step, in units of scaled pts
- \!dimenA=#1\!dimenA% ** a <-- B*a + q
- \advance\!dimenA by \!dimenD%
- \multiply\!dimenD by \!dimenC% ** r <-- r - dq
- \advance\!dimenB by -\!dimenD}
-
-% ** \Divide: See Subsection 9.3 of the manual.
-\def\Divide <#1> by <#2> forming <#3> {%
- \!divide{#1}{#2}{#3}}
-
-
-% *********************************************
-% *** ELLIPSES (Draws ellipses and circles) ***
-% *********************************************
-
-% ** User commands
-% ** \ellipticalarc axes ratio A:B DEGREES degrees from XSTART YSTART
-% ** center at XCENTER YCENTER
-% ** \circulararc DEGREES degrees from XSTART YSTART
-% ** center at XCENTER YCENTER
-
-% ** Internal command
-% ** \!sinandcos{32*ANGLE in radians}{32*SIN}{32*COS}
-
-
-% ** \ellipticalarc axes ratio A:B DEGREES degrees from XSTART YSTART
-% ** center at XCENTER YCENTER
-% ** Draws a elliptical arc starting at the coordinate point (XSTART,YSTART).
-% ** The center of the ellipse of which the arc is a segment is at
-% ** (XCENTER,YCENTER).
-% ** The arc extends through an angle of DEGREES degrees (may be + or -).
-% ** A:B is the ratio of the length of the xaxis to the length of
-% ** the yaxis of the ellipse
-% ** Sqrt{[(XSTART-XCENTER)/A]**2 + [(YSTART-YCENTER)/B]**2}
-% ** must be < 512pt (about 7in).
-% ** Doesn't modify the dimensions (ht, dp, wd) of the PiCture under
-% ** construction.
-
-% ** \circulararc -- See Subsection 5.3 of the manual.
-\def\circulararc{%
- \ellipticalarc axes ratio 1:1 }
-
-% ** \ellipticalarc -- See Subsection 5.3 of the manual.
-\def\ellipticalarc axes ratio #1:#2 #3 degrees from #4 #5 center at #6 #7 {%
- \!angle=#3pt\relax% ** get angle
- \ifdim\!angle>\!zpt
- \def\!sign{}% ** counterclockwise
- \else
- \def\!sign{-}\!angle=-\!angle% ** clockwise
- \fi
- \!xxloc=\!M{#6}\!xunit% ** convert CENTER to dimension
- \!yyloc=\!M{#7}\!yunit
- \!xxS=\!M{#4}\!xunit% ** get STARTing point on rim of ellipse
- \!yyS=\!M{#5}\!yunit
- \advance\!xxS -\!xxloc% ** make center of ellipse (0,0)
- \advance\!yyS -\!yyloc
- \!divide\!xxS{#1pt}\!xxS % ** scale point on ellipse to point on
- \!divide\!yyS{#2pt}\!yyS % corresponding circle
-%
- \let\!MC=\!M% ** save current c/d mode
- \!setdimenmode% ** go into dimension mode
-%
- \!xS=#1\!xxS \advance\!xS\!xxloc
- \!yS=#2\!yyS \advance\!yS\!yyloc
- \!start (\!xS,\!yS)%
- \!loop\ifdim\!angle>14.9999pt% ** draw in major portion of ellipse
- \!rotate(\!xxS,\!yyS)by(\!cos,\!sign\!sin)to(\!xxM,\!yyM)
- \!rotate(\!xxM,\!yyM)by(\!cos,\!sign\!sin)to(\!xxE,\!yyE)
- \!xM=#1\!xxM \advance\!xM\!xxloc \!yM=#2\!yyM \advance\!yM\!yyloc
- \!xE=#1\!xxE \advance\!xE\!xxloc \!yE=#2\!yyE \advance\!yE\!yyloc
- \!qjoin (\!xM,\!yM) (\!xE,\!yE)
- \!xxS=\!xxE \!yyS=\!yyE
- \advance \!angle -15pt
- \repeat
- \ifdim\!angle>\!zpt% ** complete remaining arc, if any
- \!angle=100.53096\!angle% ** convert angle to radians, divide
- \divide \!angle 360 % ** by 2, and multiply by 32
- \!sinandcos\!angle\!!sin\!!cos% ** get 32*sin & 32*cos
- \!rotate(\!xxS,\!yyS)by(\!!cos,\!sign\!!sin)to(\!xxM,\!yyM)
- \!rotate(\!xxM,\!yyM)by(\!!cos,\!sign\!!sin)to(\!xxE,\!yyE)
- \!xM=#1\!xxM \advance\!xM\!xxloc \!yM=#2\!yyM \advance\!yM\!yyloc
- \!xE=#1\!xxE \advance\!xE\!xxloc \!yE=#2\!yyE \advance\!yE\!yyloc
- \!qjoin (\!xM,\!yM) (\!xE,\!yE)
- \fi
-%
- \let\!M=\!MC% ** restore c/d mode
- \ignorespaces}% ** if appropriate
-
-
-% ** \!rotate(XREG,YREG)by(32cos,32sin)to(XXREG,YYREG)
-% ** rotates (XREG,YREG) by angle with specfied scaled cos & sin to
-% ** (XXREG,YYREG). Uses \!dimenA & \!dimenB as scratch registers.
-\def\!rotate(#1,#2)by(#3,#4)to(#5,#6){%
- \!dimenA=#3#1\advance \!dimenA -#4#2% ** Rcos(x+t)=Rcosx*cost - Rsinx*sint
- \!dimenB=#3#2\advance \!dimenB #4#1% ** Rsin(x+t)=Rsinx*cost + Rcosx*sint
- \divide \!dimenA 32 \divide \!dimenB 32
- #5=\!dimenA #6=\!dimenB
- \ignorespaces}
-\def\!sin{4.17684}% ** 32*sin(pi/24) (pi/24=7.5deg)
-\def\!cos{31.72624}% ** 32*cos(pi/24)
-
-
-% ** \!sinandcos{32*ANGLE in radians}{\SINCS}{\COSCS}
-% ** Computes the 32*sine and 32*cosine of a small ANGLE expressed in
-% ** radians/32 and puts these values in the replacement texts of
-% ** \SINCS and \COSCS
-\def\!sinandcos#1#2#3{%
- \!dimenD=#1% ** angle is expressed in radians/32: 1pt = 1/32rad
- \!dimenA=\!dimenD% ** dimA will eventually contain 32sin(angle)in pts
- \!dimenB=32pt% ** dimB will eventually contain 32cos(angle)in pts
- \!removept\!dimenD\!value% ** get value of 32*angle, without "pt"
- \!dimenC=\!dimenD% ** holds 32*angle**i/i! in pts
- \!dimenC=\!value\!dimenC \divide\!dimenC by 64 % ** now 32*angle**2/2
- \advance\!dimenB by -\!dimenC% ** 32-32*angle**2/2
- \!dimenC=\!value\!dimenC \divide\!dimenC by 96 % ** now 32*angle**3/3!
- \advance\!dimenA by -\!dimenC% ** now 32*(angle-angle**3/6)
- \!dimenC=\!value\!dimenC \divide\!dimenC by 128 % ** now 32*angle**4/4!
- \advance\!dimenB by \!dimenC%
- \!removept\!dimenA#2% ** set 32*sin(angle)
- \!removept\!dimenB#3% ** set 32*cos(angle)
- \ignorespaces}
-
-
-% *****************************************************************
-% *** RULES (Draws rules, i.e., horizontal & vertical lines) ***
-% *****************************************************************
-
-% ** User command:
-% ** \putrule [<XDIMEN,YDIMEN>] from XCOORD1 YCOORD1
-% ** to XCOORD2 YCOORD2
-
-% ** Internal commands:
-% ** \!puthline [<XDIMEN,YDIMEN>] (h = horizontal)
-% ** Set by dashpat to either: \!putsolidhline or \!putdashedhline
-% ** \!putvline [<XDIMEN,YDIMEN>] (v = vertical)
-% ** Either: \!putsolidvline or \!putdashedvline
-
-
-% ** \putrule [<XDIMEN,YDIMEN>] from XCOORD1 YCOORD1
-% ** to XCOORD2 YCOORD2
-% ** Draws a rule -- dashed or solid depending on the current dash pattern --
-% ** from (X1,Y1) to (X2,Y2). Uses TEK's \hrule & \vrule & \leaders
-% ** constructions to handle horizontal & vertical lines efficiently both
-% ** in terms of execution time and space in the DVI file.
-% ** See Subsection 4.1 of the manual.
-\def\putrule#1from #2 #3 to #4 #5 {%
- \!xloc=\!M{#2}\!xunit \!xxloc=\!M{#4}\!xunit%
- \!yloc=\!M{#3}\!yunit \!yyloc=\!M{#5}\!yunit%
- \!dxpos=\!xxloc \advance\!dxpos by -\!xloc
- \!dypos=\!yyloc \advance\!dypos by -\!yloc
-%
- \ifdim\!dypos=\!zpt
- \def\!!Line{\!puthline{#1}}\ignorespaces
- \else
- \ifdim\!dxpos=\!zpt
- \def\!!Line{\!putvline{#1}}\ignorespaces
- \else
- \def\!!Line{}
- \fi
- \fi
- \let\!ML=\!M% ** save current coord\dimen mode
- \!setdimenmode% ** express locations in dimens
- \!!Line%
- \let\!M=\!ML% ** restore previous c/d mode
- \ignorespaces}
-
-
-% ** \!putsolidhline [<XDIMEN,YDIMEN>]
-% ** Place horizontal solid line
-\def\!putsolidhline#1{%
- \ifdim\!dxpos>\!zpt
- \put{\!hline\!dxpos}#1[l] at {\!xloc} {\!yloc}
- \else
- \put{\!hline{-\!dxpos}}#1[l] at {\!xxloc} {\!yyloc}
- \fi
- \ignorespaces}
-
-% ** \!putsolidvline [shifted <XDIMEN,YDIMEN>]
-% ** Place vertical solid line
-\def\!putsolidvline#1{%
- \ifdim\!dypos>\!zpt
- \put{\!vline\!dypos}#1[b] at {\!xloc} {\!yloc}
- \else
- \put{\!vline{-\!dypos}}#1[b] at {\!xxloc} {\!yyloc}
- \fi
- \ignorespaces}
-
-\def\!hline#1{\hbox to #1{\leaders \hrule height\linethickness\hfill}}
-\def\!vline#1{\vbox to #1{\leaders \vrule width\linethickness\vfill}}
-
-
-% ** \!putdashedhline [<XDIMEN,YDIMEN>]
-% ** Place dashed horizontal line
-\def\!putdashedhline#1{%
- \ifdim\!dxpos>\!zpt
- \!DLsetup\!Flist\!dxpos
- \put{\hbox to \!totalleaderlength{\!hleaders}\!hpartialpattern\!Rtrunc}
- #1[l] at {\!xloc} {\!yloc}
- \else
- \!DLsetup\!Blist{-\!dxpos}
- \put{\!hpartialpattern\!Ltrunc\hbox to \!totalleaderlength{\!hleaders}}
- #1[r] at {\!xloc} {\!yloc}
- \fi
- \ignorespaces}
-
-% ** \!putdashedhline [<XDIMEN,YDIMEN>]
-% ** Place dashed vertical line
-\def\!putdashedvline#1{%
- \!dypos=-\!dypos% ** vertical leaders go from top to bottom
- \ifdim\!dypos>\!zpt
- \!DLsetup\!Flist\!dypos
- \put{\vbox{\vbox to \!totalleaderlength{\!vleaders}
- \!vpartialpattern\!Rtrunc}}#1[t] at {\!xloc} {\!yloc}
- \else
- \!DLsetup\!Blist{-\!dypos}
- \put{\vbox{\!vpartialpattern\!Ltrunc
- \vbox to \!totalleaderlength{\!vleaders}}}#1[b] at {\!xloc} {\!yloc}
- \fi
- \ignorespaces}
-
-
-% ** The rest of the macros in this section are subroutines used by
-% ** \!putdashedhline and \!putdashedvline.
-\def\!DLsetup#1#2{% ** Dashed-Line set up
- \let\!RSlist=#1% ** set !Rule-Skip list
- \!countB=#2% ** convert rule length to integer (number of sps)
- \!countA=\!leaderlength% ** ditto, leaderlength
- \divide\!countB by \!countA% ** number of complete leader units
- \!totalleaderlength=\!countB\!leaderlength
- \!Rresiduallength=#2%
- \advance \!Rresiduallength by -\!totalleaderlength% \** excess length
- \!Lresiduallength=\!leaderlength
- \advance \!Lresiduallength by -\!Rresiduallength
- \ignorespaces}
-
-\def\!hleaders{%
- \def\!Rule##1{\vrule height\linethickness width##1}%
- \def\!Skip##1{\hskip##1}%
- \leaders\hbox{\!RSlist}\hfill}
-
-\def\!hpartialpattern#1{%
- \!dimenA=\!zpt \!dimenB=\!zpt
- \def\!Rule##1{#1{##1}\vrule height\linethickness width\!dimenD}%
- \def\!Skip##1{#1{##1}\hskip\!dimenD}%
- \!RSlist}
-
-\def\!vleaders{%
- \def\!Rule##1{\hrule width\linethickness height##1}%
- \def\!Skip##1{\vskip##1}%
- \leaders\vbox{\!RSlist}\vfill}
-
-\def\!vpartialpattern#1{%
- \!dimenA=\!zpt \!dimenB=\!zpt
- \def\!Rule##1{#1{##1}\hrule width\linethickness height\!dimenD}%
- \def\!Skip##1{#1{##1}\vskip\!dimenD}%
- \!RSlist}
-
-\def\!Rtrunc#1{\!trunc{#1}>\!Rresiduallength}
-\def\!Ltrunc#1{\!trunc{#1}<\!Lresiduallength}
-
-\def\!trunc#1#2#3{%
- \!dimenA=\!dimenB
- \advance\!dimenB by #1%
- \!dimenD=\!dimenB \ifdim\!dimenD#2#3\!dimenD=#3\fi
- \!dimenC=\!dimenA \ifdim\!dimenC#2#3\!dimenC=#3\fi
- \advance \!dimenD by -\!dimenC}
-
-
-% ****************************************************************
-% *** LINEAR ARC (Draws straight lines -- solid and dashed) ***
-% ****************************************************************
-
-% ** User commands
-% ** \inboundscheckoff
-% ** \inboundscheckon
-
-% ** Internal commands
-% ** \!start (XCOORD,YCOORD)
-% ** \!ljoin (XCOORD,YCOORD)
-% ** \!drawlinearsegment -- set by \dashpat to either
-% ** \!linearsolid or \!lineardashed
-% ** \!advancedashing -- set by \dashpat to either
-% ** \relax or \!!advancedashing
-% ** \!plotifinbounds -- set by \inboundscheck off/on to either
-% ** \!plot or \!!plotifinbounds
-% ** \!initinboundscheck -- set by \inboundscheck off/on to either
-% ** \relax or \!!initinboundscheck
-
-
-% \plotsymbolspacing ** distance between consecutive plot positions
-% \!xS ** starting x
-% \!yS ** starting y
-% \!xE ** ending x
-% \!yE ** ending y
-% \!xdiff ** x_end - x_start
-% \!ydiff ** y_end - y_start
-% \!distacross ** how far along curve next point to be plotted is
-% \!arclength ** approximate length of arc for current interval
-% \!downlength ** remaining length for "pen" to be down
-% \!uplength ** length for "pen" to be down
-% \!intervalno ** counts segments to curve
-% \totalarclength ** cumulative distance along curve
-% \!npoints ** approximately (arc length / plotsymbolspacing)
-
-% ** Calls -- \!Pythag, \!divide, \!plot
-
-
-% ** \!start (XCOORD,YCOORD)
-% ** Sets initial point for linearly (or quadratically) interpolated curve
-\def\!start (#1,#2){%
- \!plotxorigin=\!xorigin \advance \!plotxorigin by \!plotsymbolxshift
- \!plotyorigin=\!yorigin \advance \!plotyorigin by \!plotsymbolyshift
- \!xS=\!M{#1}\!xunit \!yS=\!M{#2}\!yunit
- \!rotateaboutpivot\!xS\!yS
- \!copylist\!UDlist\to\!!UDlist% **\!UDlist has the form \\{dimen1}\\{dimen2}..
-% ** Routine will draw dashed line with pen
-% ** down for dimen1, up for dimen2, ...
- \!getnextvalueof\!downlength\from\!!UDlist
- \!distacross=\!zpt% ** 1st point goes at start of curve
- \!intervalno=0 % ** initialize interval counter
- \global\totalarclength=\!zpt% ** initialize distance traveled along curve
- \ignorespaces}
-
-
-% ** \!ljoin (XCOORD,YCOORD)
-% ** Draws a straight line starting at the last point specified
-% ** by the most recent \!start, \!ljoin, or \!qjoin, and
-% ** ending at (XCOORD,YCOORD).
-\def\!ljoin (#1,#2){%
- \advance\!intervalno by 1
- \!xE=\!M{#1}\!xunit \!yE=\!M{#2}\!yunit
- \!rotateaboutpivot\!xE\!yE
- \!xdiff=\!xE \advance \!xdiff by -\!xS%** xdiff = xE - xS
- \!ydiff=\!yE \advance \!ydiff by -\!yS%** ydiff = yE - yS
- \!Pythag\!xdiff\!ydiff\!arclength% ** arclength = sqrt(xdiff**2+ydiff**2)
- \global\advance \totalarclength by \!arclength%
- \!drawlinearsegment% ** set by dashpat to \!linearsolid or \!lineardashed
- \!xS=\!xE \!yS=\!yE% ** shift ending points to starting points
- \ignorespaces}
-
-
-% ** The following routine is used to draw a "solid" line between (xS,yS)
-% ** and (xE,yE). Points are spaced nearly every \plotsymbolspacing length
-% ** along the line.
-\def\!linearsolid{%
- \!npoints=\!arclength
- \!countA=\plotsymbolspacing
- \divide\!npoints by \!countA% ** now #pts =. arclength/plotsymbolspacing
- \ifnum \!npoints<1
- \!npoints=1
- \fi
- \divide\!xdiff by \!npoints
- \divide\!ydiff by \!npoints
- \!xpos=\!xS \!ypos=\!yS
-%
- \loop\ifnum\!npoints>-1
- \!plotifinbounds
- \advance \!xpos by \!xdiff
- \advance \!ypos by \!ydiff
- \advance \!npoints by -1
- \repeat
- \ignorespaces}
-
-
-% ** The following routine is used to draw a dashed line between (xS,yS)
-% ** and (xE,yE). The dash pattern continues from the previous segment.
-\def\!lineardashed{%
-% **
- \ifdim\!distacross>\!arclength
- \advance \!distacross by -\!arclength %nothing to plot in this interval
-%
- \else
-%
- \loop\ifdim\!distacross<\!arclength
-% ** plot point, interpolating linearly in x and y
- \!divide\!distacross\!arclength\!dimenA% ** dimA = across/arclength
- \!removept\!dimenA\!t% ** \!t holds value in dimA, without the "pt"
- \!xpos=\!t\!xdiff \advance \!xpos by \!xS
- \!ypos=\!t\!ydiff \advance \!ypos by \!yS
- \!plotifinbounds
- \advance\!distacross by \plotsymbolspacing
- \!advancedashing
- \repeat
-%
- \advance \!distacross by -\!arclength% ** prepare for next interval
- \fi
- \ignorespaces}
-
-
-\def\!!advancedashing{%
- \advance\!downlength by -\plotsymbolspacing
- \ifdim \!downlength>\!zpt
- \else
- \advance\!distacross by \!downlength
- \!getnextvalueof\!uplength\from\!!UDlist
- \advance\!distacross by \!uplength
- \!getnextvalueof\!downlength\from\!!UDlist
- \fi}
-
-
-% ** \inboundscheckoff & \inboundscheckon: See Subsection 5.5 of the manual.
-\def\inboundscheckoff{%
- \def\!plotifinbounds{\!plot(\!xpos,\!ypos)}%
- \def\!initinboundscheck{\relax}\ignorespaces}
-\def\inboundscheckon{%
- \def\!plotifinbounds{\!!plotifinbounds}%
- \def\!initinboundscheck{\!!initinboundscheck}%
- \!initinboundscheck\ignorespaces}
-\inboundscheckoff
-
-% ** The following code plots the current point only if it falls in the
-% ** current plotarea. It doesn't matter if the coordinate system has
-% ** changed since the plotarea was set up. However, shifts of the plot
-% ** are ignored (how the plotsymbol stands relative to its plot position is
-% ** unknown anyway).
-\def\!!plotifinbounds{%
- \ifdim \!xpos<\!checkleft
- \else
- \ifdim \!xpos>\!checkright
- \else
- \ifdim \!ypos<\!checkbot
- \else
- \ifdim \!ypos>\!checktop
- \else
- \!plot(\!xpos,\!ypos)
- \fi
- \fi
- \fi
- \fi}
-
-
-\def\!!initinboundscheck{%
- \!checkleft=\!arealloc \advance\!checkleft by \!xorigin
- \!checkright=\!arearloc \advance\!checkright by \!xorigin
- \!checkbot=\!areabloc \advance\!checkbot by \!yorigin
- \!checktop=\!areatloc \advance\!checktop by \!yorigin}
-
-
-% *********************************
-% *** LOGTEN (Log_10 function) ***
-% *********************************
-%
-% ** \!logten{X}
-% ** Calculates log_10 of X. X and LOG10(X) are in fixed point notation.
-% ** X must be positive; it may have an optional `+' sign; any number
-% ** of digits may be specified for X. The absolute error in LOG10(X) is
-% ** less than .0001 (probably < .00006). That's about as good as you
-% ** hope for, since TEX only operates to 5 figures after the decimal
-% ** point anyway.
-
-% \!rootten=3.162278pt **** These are values are set in ALLOCATIONS
-% \!tenAe=2.543275pt (=A5)
-% \!tenAc=2.773839pt (=A3)
-% \!tenAa=8.690286pt (=A1)
-
-\def\!logten#1#2{%
- \expandafter\!!logten#1\!nil
- \!removept\!dimenF#2%
- \ignorespaces}
-
-\def\!!logten#1#2\!nil{%
- \if -#1%
- \!dimenF=\!zpt
- \def\!next{\ignorespaces}%
- \else
- \if +#1%
- \def\!next{\!!logten#2\!nil}%
- \else
- \if .#1%
- \def\!next{\!!logten0.#2\!nil}%
- \else
- \def\!next{\!!!logten#1#2..\!nil}%
- \fi
- \fi
- \fi
- \!next}
-
-\def\!!!logten#1#2.#3.#4\!nil{%
- \!dimenF=1pt % ** DimF holds log10 original argument
- \if 0#1%
- \!!logshift#3pt % ** Argument < 1
- \else % ** Argument >= 1
- \!logshift#2/% ** Shift decimal pt as many places
- \!dimenE=#1.#2#3pt % ** as there are figures in #2
- \fi % ** Now dimE holds revised X want log10 of
- \ifdim \!dimenE<\!rootten% ** Transform X to XX between sqrt(10)
- \multiply \!dimenE 10 % ** and 10*sqrt(10)
- \advance \!dimenF -1pt
- \fi
- \!dimenG=\!dimenE% ** dimG <- (XX + 10)
- \advance\!dimenG 10pt
- \advance\!dimenE -10pt % ** dimE <- (XX - 10)
- \multiply\!dimenE 10 % ** dimE = 10*(XX-10)
- \!divide\!dimenE\!dimenG\!dimenE% ** Now dimE=10t==10*(XX-10)/(XX+10)
- \!removept\!dimenE\!t% ** !t=10t, with "pt" removed
- \!dimenG=\!t\!dimenE% ** dimG=100t**2
- \!removept\!dimenG\!tt% ** !tt=100t**2, with "pt" removed
- \!dimenH=\!tt\!tenAe% ** dimH=10*a5*(10t)**2 /100
- \divide\!dimenH 100
- \advance\!dimenH \!tenAc% ** ditto + 10*a3
- \!dimenH=\!tt\!dimenH% ** ditto * (10t)**2 /100
- \divide\!dimenH 100
- \advance\!dimenH \!tenAa% ** ditto + 10*a1
- \!dimenH=\!t\!dimenH% ** ditto * 10t / 100
- \divide\!dimenH 100 % ** Now dimH = log10(XX) - 1
- \advance\!dimenF \!dimenH}% ** dimF = log10(X)
-
-\def\!logshift#1{%
- \if #1/%
- \def\!next{\ignorespaces}%
- \else
- \advance\!dimenF 1pt
- \def\!next{\!logshift}%
- \fi
- \!next}
-
- \def\!!logshift#1{%
- \advance\!dimenF -1pt
- \if 0#1%
- \def\!next{\!!logshift}%
- \else
- \if p#1%
- \!dimenF=1pt
- \def\!next{\!dimenE=1p}%
- \else
- \def\!next{\!dimenE=#1.}%
- \fi
- \fi
- \!next}
-
-
-% ***********************************************************
-% *** PICTURES (Basic setups for PiCtures; \put commands) ***
-% ***********************************************************
-
-% ** User Commands:
-% ** \beginpicture
-% ** \endpicture
-% ** \endpicturesave <XREG,YREG>
-% ** \setcoordinatesystem units <XUNIT,YUNIT> point at XREF YREF
-% ** \put {OBJECT} [ORIENTATION] <XSHIFT,YSHIFT> at XCOORD YCOORD
-% ** \multiput {OJBECT} [ORIENTATION] <XSHIFT,YSHIFT>) at
-% ** XCOORD YCOORD
-% ** *NUMBER_OF_TIMES DXCOORD DYCOORD /
-% ** \accountingon
-% ** \accountingoff
-% ** \stack [ORIENTATION] <LEADING> {LIST OF ITEMS}
-% ** \lines [ORIENTATION] {LINES}
-% ** \Lines [ORIENTATION] {LINES}
-% ** \setdimensionmode
-% ** \setcoordinatemode
-% ** \Xdistance
-% ** \Ydistance
-
-% ** Internal commands:
-% ** \!setputobject{OBJECT}{[ORIENTATION]<XSHIFT,YSHIFT>}
-% ** \!dimenput{OBJECT}[ORIENTATION]<XSHIFT,YSHIFT>(XDIMEN,YDIMEN)
-% ** \!setdimenmode
-% ** \!setcoordmode
-% ** \!ifdimenmode
-% ** \!ifcoordmode
-
-
-% ** \beginpicture
-% ** \endpicture
-% ** \endpicturesave <XREG,YREG>
-% ** \beginpicture ... \endpicture creates an hbox. Objects are
-% ** placed in this box using the \put command and the like (see below).
-% ** The location of an object is specified in terms of coordinate system(s)
-% ** established by \setcoordinatesystem. Each coordinate system (there
-% ** might be just one) specifies the length of 1 horizontal unit, the length
-% ** of 1 vertical unit, and the coordinates of a "reference point". The
-% ** reference points of various coordinate systems will be in the same
-% ** physical location. The macros keep track of the size of the objects
-% ** and their locations. The resulting hbox is the smallest hbox which
-% ** encloses all the objects, and whose TEK reference point is the point
-% ** on the left edge of the box closest vertically to the PICTEX reference
-% ** point. Using \endpicturesave, you can (globally) save the distance TEK's
-% ** reference point is to the right (respectively, up from) PICTEX's
-% ** reference point in the dimension register \XREG (respectively \YREG).
-% ** You can then \put the picture OBJECT into a larger picture so that its
-% ** reference point is at (XCOORD,YCOORD) with the command
-% ** \put {picture OBJECT} [Bl] <\XREG, \YREG> at XCOORD YCOORD
-
-% ** \beginpicture : See Subsection 1.1 of the manual.
-\def\beginpicture{%
- \setbox\!picbox=\hbox\bgroup%
- \!xleft=\maxdimen
- \!xright=-\maxdimen
- \!ybot=\maxdimen
- \!ytop=-\maxdimen}
-
-% ** \endpicture : See Subsection 1.1 of the manual.
-\def\endpicture{%
- \ifdim\!xleft=\maxdimen% ** check if nothing was put in picbox
- \!xleft=\!zpt \!xright=\!zpt \!ybot=\!zpt \!ytop=\!zpt
- \fi
- \global\!Xleft=\!xleft \global\!Xright=\!xright
- \global\!Ybot=\!ybot \global\!Ytop=\!ytop
- \egroup%
- \ht\!picbox=\!Ytop \dp\!picbox=-\!Ybot
- \ifdim\!Ybot>\!zpt
- \else
- \ifdim\!Ytop<\!zpt
- \!Ybot=\!Ytop
- \else
- \!Ybot=\!zpt
- \fi
- \fi
- \hbox{\kern-\!Xleft\lower\!Ybot\box\!picbox\kern\!Xright}}
-
-% ** \endpicturesave : See Subsection 8.4 of the manual.
-\def\endpicturesave <#1,#2>{%
- \endpicture \global #1=\!Xleft \global #2=\!Ybot \ignorespaces}
-
-
-% ** \setcoordinatesystem units <XUNIT,YUNIT>
-% ** point at XREF YREF
-% ** Each of `units <XUNIT,YUNIT>' and `point at XREF YREF'
-% ** are optional.
-% ** Unit lengths must be given in dimensions (e.g., <10pt,1in>).
-% ** Default unit lengths are 1pt, 1pt, or previous unit lengths.
-% ** Reference point is specified in current units (e.g., 3 5 ).
-% ** Default reference point is 0 0 , or previous reference point.
-% ** Unit lengths and reference points obey TEX's scoping rules.
-% ** See Subsection 1.2 of the manual.
-\def\setcoordinatesystem{%
- \!ifnextchar{u}{\!getlengths }
- {\!getlengths units <\!xunit,\!yunit>}}
-\def\!getlengths units <#1,#2>{%
- \!xunit=#1\relax
- \!yunit=#2\relax
- \!ifcoordmode
- \let\!SCnext=\!SCccheckforRP
- \else
- \let\!SCnext=\!SCdcheckforRP
- \fi
- \!SCnext}
-\def\!SCccheckforRP{%
- \!ifnextchar{p}{\!cgetreference }
- {\!cgetreference point at {\!xref} {\!yref} }}
-\def\!cgetreference point at #1 #2 {%
- \edef\!xref{#1}\edef\!yref{#2}%
- \!xorigin=\!xref\!xunit \!yorigin=\!yref\!yunit
- \!initinboundscheck % ** See linear.tex
- \ignorespaces}
-\def\!SCdcheckforRP{%
- \!ifnextchar{p}{\!dgetreference}%
- {\ignorespaces}}
-\def\!dgetreference point at #1 #2 {%
- \!xorigin=#1\relax \!yorigin=#2\relax
- \ignorespaces}
-
-
-% ** \put {OBJECT} [XY] <XDIMEN,YDIMEN> at (XCOORD,YCOORD)
-% ** `[XY]' and `<XDIMEN,YDIMEN>' are optional.
-% ** First OBJECT is placed in an hbox (the "objectbox") and then a
-% ** "reference point" is assigned to the objectbox as follows:
-% ** [1] first, the reference point is taken to be the center of the box;
-% ** [2] next, centering is overridden by the specifications
-% ** X=l -- reference point along the left edge of the objectbox
-% ** X=r -- reference point along the right edge of the objectbox
-% ** Y=b -- reference point along the bottom edge of the objectbox
-% ** Y=B -- reference point along the Baseline of the objectbox
-% ** Y=t -- reference point along the top edge of the objectbox;
-% ** [3] finally the reference point is shifted left by XDIMEN, down
-% ** by YDIMEN (both default to 0pt).
-% ** The objectbox is placed within PICBOX with its reference point at
-% ** (XCOORD,YCOORD).
-% ** If OBJECT is a saved box, say box0, you have to write
-% ** \put{\box0}... or \put{\copy0}...
-% ** The objectbox is void after the put.
-% ** See Subsection 2.1 of the manual.
-\long\def\put#1#2 at #3 #4 {%
- \!setputobject{#1}{#2}%
- \!xpos=\!M{#3}\!xunit \!ypos=\!M{#4}\!yunit
- \!rotateaboutpivot\!xpos\!ypos%
- \advance\!xpos -\!xorigin \advance\!xpos -\!xshift
- \advance\!ypos -\!yorigin \advance\!ypos -\!yshift
- \kern\!xpos\raise\!ypos\box\!putobject\kern-\!xpos%
- \!doaccounting\ignorespaces}
-
-% ** \multiput etc. Like \put. The objectbox is not voided until the
-% ** termininating /, and is placed repeatedly with:
-% ** XCOORD YCOORD -- the objectbox is put down with its reference point
-% ** at (XCOORD,YCOORD);
-% ** *N DXCOORD DYCOORD -- each of N times the current
-% ** (xcoord,ycoord) is incremented by (DXCOORD,DYCOORD), and the
-% ** objectbox is put down with its reference point at (xcoord,ycoord)
-% ** (This specification has to follow an XCOORD YCOORD pair)
-% ** See Subsection 2.2 of the manual.
-\long\def\multiput #1#2 at {%
- \!setputobject{#1}{#2}%
- \!ifnextchar"{\!putfromfile}{\!multiput}}
-\def\!putfromfile"#1"{%
- \expandafter\!multiput \input #1 /}
-\def\!multiput{%
- \futurelet\!nextchar\!!multiput}
-\def\!!multiput{%
- \if *\!nextchar
- \def\!nextput{\!alsoby}%
- \else
- \if /\!nextchar
- \def\!nextput{\!finishmultiput}%
- \else
- \def\!nextput{\!alsoat}%
- \fi
- \fi
- \!nextput}
-\def\!finishmultiput/{%
- \setbox\!putobject=\hbox{}%
- \ignorespaces}
-
-% ** \!alsoat XCOORD YCOORD
-% ** The objectbox is put down with reference point at XCOORD,YCOORD
-\def\!alsoat#1 #2 {%
- \!xpos=\!M{#1}\!xunit \!ypos=\!M{#2}\!yunit
- \!rotateaboutpivot\!xpos\!ypos%
- \advance\!xpos -\!xorigin \advance\!xpos -\!xshift
- \advance\!ypos -\!yorigin \advance\!ypos -\!yshift
- \kern\!xpos\raise\!ypos\copy\!putobject\kern-\!xpos%
- \!doaccounting
- \!multiput}
-
-% ** \!alsoby*N DXCOORD DYCOORD
-% ** N times, the current (XCOORD,YCOORD) is advanced by (DXCOORD,DYCOORD),
-% ** and the current (shifted, oriented) OBJECT is put down.
-\def\!alsoby*#1 #2 #3 {%
- \!dxpos=\!M{#2}\!xunit \!dypos=\!M{#3}\!yunit
- \!rotateonly\!dxpos\!dypos
- \!ntemp=#1%
- \!!loop\ifnum\!ntemp>0
- \advance\!xpos by \!dxpos \advance\!ypos by \!dypos
- \kern\!xpos\raise\!ypos\copy\!putobject\kern-\!xpos%
- \advance\!ntemp by -1
- \repeat
- \!doaccounting
- \!multiput}
-
-% ** \accountingoff : Suspends PiCTeX's accounting of the aggregate
-% ** size of the picture box.
-% ** \accounting on : Reinstates accounting.
-% ** See Subsection 8.2 of the manual.
-\def\accountingon{\def\!doaccounting{\!!doaccounting}\ignorespaces}
-\def\accountingoff{\def\!doaccounting{}\ignorespaces}
-\accountingon
-\def\!!doaccounting{%
- \!xtemp=\!xpos
- \!ytemp=\!ypos
- \ifdim\!xtemp<\!xleft
- \!xleft=\!xtemp
- \fi
- \advance\!xtemp by \!wd
- \ifdim\!xright<\!xtemp
- \!xright=\!xtemp
- \fi
- \advance\!ytemp by -\!dp
- \ifdim\!ytemp<\!ybot
- \!ybot=\!ytemp
- \fi
- \advance\!ytemp by \!dp
- \advance\!ytemp by \!ht
- \ifdim\!ytemp>\!ytop
- \!ytop=\!ytemp
- \fi}
-
-\long\def\!setputobject#1#2{%
- \setbox\!putobject=\hbox{#1}%
- \!ht=\ht\!putobject \!dp=\dp\!putobject \!wd=\wd\!putobject
- \wd\!putobject=\!zpt
- \!xshift=.5\!wd \!yshift=.5\!ht \advance\!yshift by -.5\!dp
- \edef\!putorientation{#2}%
- \expandafter\!SPOreadA\!putorientation[]\!nil%
- \expandafter\!SPOreadB\!putorientation<\!zpt,\!zpt>\!nil\ignorespaces}
-
-\def\!SPOreadA#1[#2]#3\!nil{\!etfor\!orientation:=#2\do\!SPOreviseshift}
-
-\def\!SPOreadB#1<#2,#3>#4\!nil{\advance\!xshift by -#2\advance\!yshift by -#3}
-
-\def\!SPOreviseshift{%
- \if l\!orientation
- \!xshift=\!zpt
- \else
- \if r\!orientation
- \!xshift=\!wd
- \else
- \if b\!orientation
- \!yshift=-\!dp
- \else
- \if B\!orientation
- \!yshift=\!zpt
- \else
- \if t\!orientation
- \!yshift=\!ht
- \fi
- \fi
- \fi
- \fi
- \fi}
-
-
-% ** \!dimenput{OBJECT} <XDIMEN,YDIMEN> [XY] (XLOC,YLOC)
-% ** This is an internal put routine, similar to \put, except that
-% ** XLOC=distance right from reference point, YLOC=distance up from
-% ** reference point. XLOC and YLOC are dimensions, so this routine
-% ** is completely independent of the current coordinate system.
-% ** This routine does NOT do ROTATIONS.
-\long\def\!dimenput#1#2(#3,#4){%
- \!setputobject{#1}{#2}%
- \!xpos=#3\advance\!xpos by -\!xshift
- \!ypos=#4\advance\!ypos by -\!yshift
- \kern\!xpos\raise\!ypos\box\!putobject\kern-\!xpos%
- \!doaccounting\ignorespaces}
-
-
-% ** The following macros permit the picture drawing routines to be used
-% ** either in the default "coordinate mode", or in "dimension mode".
-% ** In coordinate mode \!M(1.5,\!xunit) expands to 1.5\!xunit
-% ** In dimension mode \!M(1.5pt,\!xunit) expands to 1.5pt
-% ** Dimension mode is useful in coding macros.
-% ** Any special purpose picture macro that sets dimension mode should
-% ** reset coordinate mode before completion.
-% ** See Subsection 9.2 of the manual.
-\def\!setdimenmode{%
- \let\!M=\!M!!\ignorespaces}
-\def\!setcoordmode{%
- \let\!M=\!M!\ignorespaces}
-\def\!ifcoordmode{%
- \ifx \!M \!M!}
-\def\!ifdimenmode{%
- \ifx \!M \!M!!}
-\def\!M!#1#2{#1#2}
-\def\!M!!#1#2{#1}
-\!setcoordmode
-\let\setdimensionmode=\!setdimenmode
-\let\setcoordinatemode=\!setcoordmode
-
-% ** \Xdistance{XCOORD}, \Ydistance{YCOORD} are the horizontal and
-% ** vertical distances from the origin (0,0) to the point
-% ** (XCOORD,YCOORD) in the current coordinate system.
-% ** See Subsection 9.2 of the manual.
-\def\Xdistance#1{%
- \!M{#1}\!xunit
- \ignorespaces}
-\def\Ydistance#1{%
- \!M{#1}\!yunit
- \ignorespaces}
-
-% ** The following macros -- \stack, \line, and \Lines -- are useful for
-% ** annotating PiCtures. They can be used outside the \beginpicture ...
-% ** \endpicture environment.
-
-% ** \stack [POSITIONING] <LEADING> {VALUESLIST}
-% ** Builds a vertical stack of the values in VALUESLIST. Values in
-% ** VALUESLIST are separated by commas. In the resulting stack, values are
-% ** centered by default, and positioned flush left (right) if
-% ** POSITIONING = l (r). Values are separated vertically by LEADING,
-% ** which defaults to \stackleading.
-% ** See Subsection 2.3 of the manual.
-\def\stack{%
- \!ifnextchar[{\!stack}{\!stack[c]}}
-\def\!stack[#1]{%
- \let\!lglue=\hfill \let\!rglue=\hfill
- \expandafter\let\csname !#1glue\endcsname=\relax
- \!ifnextchar<{\!!stack}{\!!stack<\stackleading>}}
-\def\!!stack<#1>#2{%
- \vbox{\def\!valueslist{}\!ecfor\!value:=#2\do{%
- \expandafter\!rightappend\!value\withCS{\\}\to\!valueslist}%
- \!lop\!valueslist\to\!value
- \let\\=\cr\lineskiplimit=\maxdimen\lineskip=#1%
- \baselineskip=-1000pt\halign{\!lglue##\!rglue\cr \!value\!valueslist\cr}}%
- \ignorespaces}
-
-% ** \lines [POSITIONING] {LINES}
-% ** Builds a vertical array of the lines in LINES. Each line in LINES
-% ** is terminated by a \cr. In the resulting array, lines are
-% ** centered by default, and positioned flush left (right) if
-% ** POSITIONING = l (r). The lines in the array are subject to TeX's
-% ** usual spacing rules: in particular the baselines are ordinarily an equal
-% ** distance apart. The baseline of the array is the baseline of the
-% ** the bottom line.
-% ** See Subsection 2.3 of the manual.
-\def\lines{%
- \!ifnextchar[{\!lines}{\!lines[c]}}
-\def\!lines[#1]#2{%
- \let\!lglue=\hfill \let\!rglue=\hfill
- \expandafter\let\csname !#1glue\endcsname=\relax
- \vbox{\halign{\!lglue##\!rglue\cr #2\crcr}}%
- \ignorespaces}
-
-% ** \Lines [POSITIONING] {LINES}
-% ** Like \lines, but the baseline of the array is the baseline of the
-% ** top line. See Subsection 2.3 of the manual.
-\def\Lines{%
- \!ifnextchar[{\!Lines}{\!Lines[c]}}
-\def\!Lines[#1]#2{%
- \let\!lglue=\hfill \let\!rglue=\hfill
- \expandafter\let\csname !#1glue\endcsname=\relax
- \vtop{\halign{\!lglue##\!rglue\cr #2\crcr}}%
- \ignorespaces}
-
-
-% *********************************************
-% *** PLOTTING (Things to do with plotting) ***
-% *********************************************
-
-% ** User commands
-% ** \setplotsymbol ({PLOTSYMBOL} [ORIENTATION] <XSHIFT,YSHIFT>)
-% ** \savelinesandcurves on "FILE_NAME"
-% ** \dontsavelinesandcurves
-% ** \writesavefile {MESSAGE}
-% ** \replot {FILE_NAME}
-
-% ** Internal command
-% ** \!plot(XDIMEN,YDIMEN)
-
-% ** \setplotsymbol ({PLOTSYMBOL} [ ] < , >)
-% ** Save PLOTSYMBOL away in an hbox for use with curve plotting routines
-% ** See Subsection 5.2 of the manual.
-\def\setplotsymbol(#1#2){%
- \!setputobject{#1}{#2}
- \setbox\!plotsymbol=\box\!putobject%
- \!plotsymbolxshift=\!xshift
- \!plotsymbolyshift=\!yshift
- \ignorespaces}
-
-\font\fiverm=cmr5
-\setplotsymbol({\fiverm .})% ** initialize plotsymbol
-
-
-% ** \!plot is either \!!plot (when no lines and curves are being saved) or
-% ** \!!!plot (when lines and curves are being saved)
-
-% ** \!!plot(XDIMEN,YDIMEN)
-% ** Places the current plotsymbol a horizontal distance=XDIMEN-xorigin
-% ** and a vertical distance=YDIMEN-yorigin from the current
-% ** reference point.
-\def\!!plot(#1,#2){%
- \!dimenA=-\!plotxorigin \advance \!dimenA by #1% ** over
- \!dimenB=-\!plotyorigin \advance \!dimenB by #2% ** up
- \kern\!dimenA\raise\!dimenB\copy\!plotsymbol\kern-\!dimenA%
- \ignorespaces}
-
-% ** \!!!plot(XDIMEN,YDIMEN)
-% ** Like \!!plot, but also saves the plot location in units of
-% ** scaled point, on file `replotfile'
-\def\!!!plot(#1,#2){%
- \!dimenA=-\!plotxorigin \advance \!dimenA by #1% ** over
- \!dimenB=-\!plotyorigin \advance \!dimenB by #2% ** up
- \kern\!dimenA\raise\!dimenB\copy\!plotsymbol\kern-\!dimenA%
- \!countE=\!dimenA
- \!countF=\!dimenB
- \immediate\write\!replotfile{\the\!countE,\the\!countF.}%
- \ignorespaces}
-
-
-% ** \savelinesandcurves on "FILE_NAME"
-% ** Switch to save locations used for plotting lines and curves
-% ** (No advantage in saving locations for solid lines; however
-% ** replotting curve locations speeds things up by a factor of about 4.
-% ** \dontsavelinesandcurves
-% ** Terminates \savelinesandcurves. The default.
-% ** See Subsection 5.6 of the manual.
-\def\savelinesandcurves on "#1" {%
- \immediate\closeout\!replotfile
- \immediate\openout\!replotfile=#1%
- \let\!plot=\!!!plot}
-
-\def\dontsavelinesandcurves {%
- \let\!plot=\!!plot}
-\dontsavelinesandcurves
-
-% ** \writesavefile {MESSAGE}
-% ** The message is preceded by a "%", so that it won't interfere
-% ** with replotting.
-% ** See Subsection 5.6 of the manual.
-{\catcode`\%=11\xdef\!Commentsignal{%}}
-\def\writesavefile#1 {%
- \immediate\write\!replotfile{\!Commentsignal #1}%
- \ignorespaces}
-
-% ** \replot "FILE_NAME"
-% ** Replots the locations saved earlier under \savelinesandcurves
-% ** on "FILE_NAME"
-% ** See Subsection 5.6 of the manual.
-\def\replot"#1" {%
- \expandafter\!replot\input #1 /}
-\def\!replot#1,#2. {%
- \!dimenA=#1sp
- \kern\!dimenA\raise#2sp\copy\!plotsymbol\kern-\!dimenA
- \futurelet\!nextchar\!!replot}
-\def\!!replot{%
- \if /\!nextchar
- \def\!next{\!finish}%
- \else
- \def\!next{\!replot}%
- \fi
- \!next}
-% **************************************************
-% *** PYTHAGORAS (Euclidean distance function) ***
-% **************************************************
-
-% ** User command:
-% ** \placehypotenuse for <dimension1> and <dimension2> in <register>
-
-% ** Internal command:
-% ** \!Pythag{X}{Y}{Z}
-% ** Input X,Y are dimensions, or dimension registers.
-% ** Output Z == sqrt(X**2+Y**2) must be a dimension register.
-% ** Assumes that |X|+|Y| < 2048pt (about 28in).
-
-% ** Without loss of generality, suppose x>0, y>0. Put s = x+y,
-% ** z = sqrt(x**2+y**2). Then z = s*f, where f = sqrt(t**2 + (1-t)**2)
-% ** = sqrt((1+tau**2)/2), where t = x/s and tau = 2(t-1/2) .
-
-% ** Uses the \!divide macro (which uses registers \!dimenA--\!dimenD.
-% ** Uses the \!removept macro (e.g., 123.45pt --> 123.45)
-% ** Uses registers \!dimenE--\!dimenI.
-\def\!Pythag#1#2#3{%
- \!dimenE=#1\relax
- \ifdim\!dimenE<\!zpt
- \!dimenE=-\!dimenE
- \fi% ** dimE = |x|
- \!dimenF=#2\relax
- \ifdim\!dimenF<\!zpt
- \!dimenF=-\!dimenF
- \fi% ** dimF = |y|
- \advance \!dimenF by \!dimenE% ** dimF = s = |x|+|y|
- \ifdim\!dimenF=\!zpt
- \!dimenG=\!zpt% ** dimG = z = sqrt(x**2+y**2)
- \else
- \!divide{8\!dimenE}\!dimenF\!dimenE% ** now dimE = 8t = (8|x|)/s
- \advance\!dimenE by -4pt% ** 8tau = (8t-4)*2
- \!dimenE=2\!dimenE% ** (tau = 2*t - 1)
- \!removept\!dimenE\!!t% ** 8tau, without "pt"
- \!dimenE=\!!t\!dimenE% ** (8tau)**2, in pts
- \advance\!dimenE by 64pt% ** u = [64 + (8tau)**2]/2
- \divide \!dimenE by 2% ** [u = (8f)**2]
- \!dimenH=7pt% ** initial guess g at sqrt(u)
- \!!Pythag\!!Pythag\!!Pythag% ** 3 iterations give sqrt(u)
- \!removept\!dimenH\!!t% ** 8f=sqrt(u), without "pt"
- \!dimenG=\!!t\!dimenF% ** z = (8f)*s/8
- \divide\!dimenG by 8
- \fi
- #3=\!dimenG
- \ignorespaces}
-
-\def\!!Pythag{% ** Newton-Raphson for sqrt
- \!divide\!dimenE\!dimenH\!dimenI% ** v = u/g
- \advance\!dimenH by \!dimenI% ** g <-- (g + u/g)/2
- \divide\!dimenH by 2}
-
-% ** \placehypotenuse for <XI> and <ETA> in <ZETA>
-% ** See Subsection 9.3 of the manual.
-\def\placehypotenuse for <#1> and <#2> in <#3> {%
- \!Pythag{#1}{#2}{#3}}
-
-
-% **********************************************
-% *** QUADRATIC ARC (Draws a quadratic arc) ***
-% **********************************************
-
-% ** Internal command
-% ** \!qjoin (XCOORD1,YCOORD1) (XCOORD2,YCOORD2)
-
-% ** \!qjoin (XCOORD1,YCOORD1) (XCOORD2,YCOORD2)
-% ** Draws an arc starting at the (last) point specified by the most recent
-% ** \!qjoin, or \!ljoin, or \!start and passing through (X_1,Y_1), (X_2,Y_2).
-% ** Uses quadratic interpolation in both x and y:
-% ** x(t), 0 <= t <= 1, interpolates x_0, x_1, x_2 at t=0, .5, 1
-% ** y(t), 0 <= t <= 1, interpolates y_0, y_1, y_2 at t=0, .5, 1
-
-\def\!qjoin (#1,#2) (#3,#4){%
- \advance\!intervalno by 1
- \!ifcoordmode
- \edef\!xmidpt{#1}\edef\!ymidpt{#2}%
- \else
- \!dimenA=#1\relax \edef\!xmidpt{\the\!dimenA}%
- \!dimenA=#2\relax \edef\!ymidpt{\the\!dimenA}%
- \fi
- \!xM=\!M{#1}\!xunit \!yM=\!M{#2}\!yunit \!rotateaboutpivot\!xM\!yM
- \!xE=\!M{#3}\!xunit \!yE=\!M{#4}\!yunit \!rotateaboutpivot\!xE\!yE
-%
-% ** Find coefficients for x(t)=a_x + b_x*t + c_x*t**2
- \!dimenA=\!xM \advance \!dimenA by -\!xS% ** dimA = I = xM - xS
- \!dimenB=\!xE \advance \!dimenB by -\!xM% ** dimB = II = xE-xM
- \!xB=3\!dimenA \advance \!xB by -\!dimenB% ** b=3I-II
- \!xC=2\!dimenB \advance \!xC by -2\!dimenA% ** c=2(II-I)
-%
-% ** Find coefficients for y(t)=y_x + b_y*t + c_y*t**2
- \!dimenA=\!yM \advance \!dimenA by -\!yS%
- \!dimenB=\!yE \advance \!dimenB by -\!yM%
- \!yB=3\!dimenA \advance \!yB by -\!dimenB%
- \!yC=2\!dimenB \advance \!yC by -2\!dimenA%
-%
-% ** Use Simpson's rule to calculate arc length over [0,1/2]:
-% ** arc length = 1/2[1/6 f(0) + 4/6 f(1/4) + 1/6 f(1/2)]
-% ** with f(t) = sqrt(x'(t)**2 + y'(t)**2).
- \!xprime=\!xB \!yprime=\!yB% ** x'(t) = b + 2ct
- \!dxprime=.5\!xC \!dyprime=.5\!yC% ** dt=1/4 ==> dx'(t) = c/2
- \!getf \!midarclength=\!dimenA
- \!getf \advance \!midarclength by 4\!dimenA
- \!getf \advance \!midarclength by \!dimenA
- \divide \!midarclength by 12
-%
-% ** Get arc length over [0,1].
- \!arclength=\!dimenA
- \!getf \advance \!arclength by 4\!dimenA
- \!getf \advance \!arclength by \!dimenA
- \divide \!arclength by 12% ** Now have arc length over [1/2,1]
- \advance \!arclength by \!midarclength
- \global\advance \totalarclength by \!arclength
-%
-%
-% ** Check to see if there's anything to plot in this interval
- \ifdim\!distacross>\!arclength
- \advance \!distacross by -\!arclength% ** nothing
-%
- \else
- \!initinverseinterp% ** initialize for inverse interpolation on arc length
- \loop\ifdim\!distacross<\!arclength% ** loop over points on arc
- \!inverseinterp% ** find t such that arc length[0,t] = distacross,
-% ** using inverse quadratic interpolation
-% ** now evaluate x(t)=(c*t + b)*t + a
- \!xpos=\!t\!xC \advance\!xpos by \!xB
- \!xpos=\!t\!xpos \advance \!xpos by \!xS
-% ** evaluate y(t)
- \!ypos=\!t\!yC \advance\!ypos by \!yB
- \!ypos=\!t\!ypos \advance \!ypos by \!yS
- \!plotifinbounds% ** plot point if in bounds
- \advance\!distacross \plotsymbolspacing%** advance arc length for next pt
- \!advancedashing% ** see "linear"
- \repeat
-%
- \advance \!distacross by -\!arclength% ** prepare for next interval
- \fi
-%
- \!xS=\!xE% ** shift ending points to starting points
- \!yS=\!yE
- \ignorespaces}
-
-
-% ** \!getf -- Calculates sqrt(x'(t)**2 + y'(t)**2) and advances
-% ** x'(t) and y'(t)
-\def\!getf{\!Pythag\!xprime\!yprime\!dimenA%
- \advance\!xprime by \!dxprime
- \advance\!yprime by \!dyprime}
-
-
-% ** \!initinverseinterp -- initializes for inverse quadratic interpolation
-% ** of arc length provided 1/3 < midarclength/arclength < 2/3; otherwise
-% ** initializes for inverse linear interpolation.
-\def\!initinverseinterp{%
- \ifdim\!arclength>\!zpt
- \!divide{8\!midarclength}\!arclength\!dimenE% ** dimE=8w=8r/s, where r
-% ** = midarclength, s=arclength
-% ** Test for w out of range: w<1/3 or w>2/3
- \ifdim\!dimenE<\!wmin \!setinverselinear
- \else
- \ifdim\!dimenE>\!wmax \!setinverselinear
- \else% ** w in range: initialize
- \def\!inverseinterp{\!inversequad}\ignorespaces
-%
-% ** Calculate the coefficients \!beta and \!gamma of the quadratic
-% ** t = \!beta*v + \!gamma*v**2
-% ** taking the values t=0, 1/2, 1 at v=0, w==r/s, 1 respectively:
-% ** \!beta = (1/2 - w**2)/[w(1-w)]
-% ** \!gamma = 1 - beta.
-%
- \!removept\!dimenE\!Ew% ** 8w, without "pt"
- \!dimenF=-\!Ew\!dimenE% ** -(8w)**2
- \advance\!dimenF by 32pt% ** 32 - (8w)**2
- \!dimenG=8pt
- \advance\!dimenG by -\!dimenE% ** 8 - 8w
- \!dimenG=\!Ew\!dimenG% ** (8w)*(8-8w)
- \!divide\!dimenF\!dimenG\!beta% ** beta = (32-(8w)**2)/(8w(8-8w))
-% ** = (1/2 - w**2)/(w(1-w))
- \!gamma=1pt
- \advance \!gamma by -\!beta% ** gamma = 1-beta
- \fi% ** end of the \ifdim\!dimenE>\!wmax
- \fi% ** end of the \ifdim\!dimenE<\!wmin
- \fi% ** end of the \ifdim\!arclength>\!zpt
- \ignorespaces}
-
-
-% ** For 0 <= t <= 1, let AL(t) = arclength[0,t]/arclength[0,1]; note
-% ** AL(0)=0, AL(1/2)=midarclength/arclength, AL(1)=1. This routine
-% ** calculates an approximation to AL^{-1}(distance across/arclength),
-% ** using the assumption that AL^{-1} is quadratic. Specifically,
-% ** it finds t such that
-% ** AL^{-1}(v) =. t = v*(\!beta + \!gamma*v)
-% ** where \!beta and \!gamma are set by \!initinv, and where
-% ** v=distance across/arclength
-\def\!inversequad{%
- \!divide\!distacross\!arclength\!dimenG% ** dimG = v = distacross/arclength
- \!removept\!dimenG\!v% ** v, without "pt"
- \!dimenG=\!v\!gamma% ** gamma*v
- \advance\!dimenG by \!beta% ** beta + gamma*v
- \!dimenG=\!v\!dimenG% ** t = v*(beta + gamma*v)
- \!removept\!dimenG\!t}% ** t, without "pt"
-
-
-% ** When w <= 1/3 or w >= 2/3, the following routine writes (using
-% ** plain TEK's \wlog command) a warning message on the user's log file,
-% ** and initializes for inverse linear interpolation on arc length.
-\def\!setinverselinear{%
- \def\!inverseinterp{\!inverselinear}%
- \divide\!dimenE by 8 \!removept\!dimenE\!t
- \!countC=\!intervalno \multiply \!countC 2
- \!countB=\!countC \advance \!countB -1
- \!countA=\!countB \advance \!countA -1
- \wlog{\the\!countB th point (\!xmidpt,\!ymidpt) being plotted
- doesn't lie in the}%
- \wlog{ middle third of the arc between the \the\!countA th
- and \the\!countC th points:}%
- \wlog{ [arc length \the\!countA\space to \the\!countB]/[arc length
- \the \!countA\space to \the\!countC]=\!t.}%
- \ignorespaces}
-
-% ** Inverse linear interpolation
-\def\!inverselinear{%
- \!divide\!distacross\!arclength\!dimenG
- \!removept\!dimenG\!t}
-
-
-% **************************************
-% ** ROTATIONS (Handles rotations) ***
-% **************************************
-
-% ** User commands
-% ** \startrotation [by COS_OF_ANGLE SIN_OF_ANGLE] [about XPIVOT YPIVOT]
-% ** \stoprotation
-
-% ** \startrotation [by COS_OF_ANGLE SIN_OF_ANGLE] [about XPIVOT YPIVOT]
-% ** Future (XCOORD,YCOORD)'s will be rotated about (XPIVOT,YPIVOT)
-% ** by the angle with the give COS and SIN. Both fields are optional.
-% ** [COS,SIN] defaults to previous value, or (1,0).
-% ** (XPIVOT,YPIVOT) defaults to previous value, or (0,0)
-% ** You can't change the coordinate system in the scope of a rotation.
-% ** See Subsection 9.1 of the manual.
-\def\startrotation{%
- \let\!rotateaboutpivot=\!!rotateaboutpivot
- \let\!rotateonly=\!!rotateonly
- \!ifnextchar{b}{\!getsincos }%
- {\!getsincos by {\!cosrotationangle} {\!sinrotationangle} }}
-\def\!getsincos by #1 #2 {%
- \edef\!cosrotationangle{#1}%
- \edef\!sinrotationangle{#2}%
- \!ifcoordmode
- \let\!ROnext=\!ccheckforpivot
- \else
- \let\!ROnext=\!dcheckforpivot
- \fi
- \!ROnext}
-\def\!ccheckforpivot{%
- \!ifnextchar{a}{\!cgetpivot}%
- {\!cgetpivot about {\!xpivotcoord} {\!ypivotcoord} }}
-\def\!cgetpivot about #1 #2 {%
- \edef\!xpivotcoord{#1}%
- \edef\!ypivotcoord{#2}%
- \!xpivot=#1\!xunit \!ypivot=#2\!yunit
- \ignorespaces}
-\def\!dcheckforpivot{%
- \!ifnextchar{a}{\!dgetpivot}{\ignorespaces}}
-\def\!dgetpivot about #1 #2 {%
- \!xpivot=#1\relax \!ypivot=#2\relax
- \ignorespaces}
-
-
-% ** Following terminates rotation.
-% ** See Subsection 9.1 of the manual.
-\def\stoprotation{%
- \let\!rotateaboutpivot=\!!!rotateaboutpivot
- \let\!rotateonly=\!!!rotateonly
- \ignorespaces}
-
-% ** !!rotateaboutpivot{XREG}{YREG}
-% ** XREG <-- xpvt + cos(angle)*(XREG-xpvt) - sin(angle)*(YREG-ypvt)
-% ** YREG <-- ypvt + cos(angle)*(YREG-ypvt) + sin(angle)*(XREG-xpvt)
-% ** XREG,YREG are dimension registers. Can't be \!dimenA to \!dimenD
-\def\!!rotateaboutpivot#1#2{%
- \!dimenA=#1\relax \advance\!dimenA -\!xpivot
- \!dimenB=#2\relax \advance\!dimenB -\!ypivot
- \!dimenC=\!cosrotationangle\!dimenA
- \advance \!dimenC -\!sinrotationangle\!dimenB
- \!dimenD=\!cosrotationangle\!dimenB
- \advance \!dimenD \!sinrotationangle\!dimenA
- \advance\!dimenC \!xpivot \advance\!dimenD \!ypivot
- #1=\!dimenC #2=\!dimenD
- \ignorespaces}
-
-% ** \!!rotateonly{XREG}{YREG}
-% ** Like \!!rotateaboutpivot, but with a pivot of (0,0)
-\def\!!rotateonly#1#2{%
- \!dimenA=#1\relax \!dimenB=#2\relax
- \!dimenC=\!cosrotationangle\!dimenA
- \advance \!dimenC -\!rotsign\!sinrotationangle\!dimenB
- \!dimenD=\!cosrotationangle\!dimenB
- \advance \!dimenD \!rotsign\!sinrotationangle\!dimenA
- #1=\!dimenC #2=\!dimenD
- \ignorespaces}
-\def\!rotsign{}
-\def\!!!rotateaboutpivot#1#2{\relax}
-\def\!!!rotateonly#1#2{\relax}
-\stoprotation
-
-\def\!reverserotateonly#1#2{%
- \def\!rotsign{-}%
- \!rotateonly{#1}{#2}%
- \def\!rotsign{}%
- \ignorespaces}
-
-
-% **********************************
-% *** SHADING (Handles shading) ***
-% **********************************
-
-% ** User commands
-% ** \setshadegrid [span <SPAN>] [point at XSHADE YSHADE]
-% ** \setshadesymbol [<LS, RS, BS, TS>] ({SHADESYMBOL}
-% ** <XDIMEN,YDIMEN> [ORIENTATION])
-
-% ** Internal commands:
-% ** \!startvshade (xS,ybS,ytS)
-% ** \!starthshade (yS,xlS,xrS)
-% ** \!lshade [<LS,RS,BS,TS>]
-% ** ** when shading vertically:
-% ** [the region from (xS,ybS,ytS) to] (xE,ybE,ytE)
-% ** ** when shading horizontally:
-% ** [the region from (yS,xlS,xrS) to] (yE,xlE,xrE)
-% ** \!qshade [<LS,RS,BS,TS>]
-% ** ** when shading vertically:
-% ** [the region from (xS,ybS,ytS) to] (xM,ybM,ytM) (xE,ybE,ytE)
-% ** ** when shading horizontally:
-% ** [the region from (yS,xlS,xrS) to] (yM,xlM,xrM) (yE,xlE,xrE)
-% ** \!lattice{ANCHOR}{SPAN}{LOCATION}{INDEX}{LATTICE LOCATION}
-% ** \!override{NOMINAL DIMEN}{REPLACEMENT DIMEN}{DIMEN}
-
-
-% ** The shading routine can operate either in a "vertical mode" or a
-% ** "horizontal mode". In vertical mode, the region to be shaded is specified
-% ** in the form
-% ** {(x,y): xl <= x <= xr & yb(x) <= y <= yt(x)}
-% ** where yb and yt are functions of x. In horizontal mode, the region
-% ** is specified in the form
-% ** {(x,y): yb <= y <= yt & xl(y) <= x <= xr(y)}.
-% ** The functions yb and yt may be either both linear or both quadratic;
-% ** similarly for xl and xr. A region with say, piecewise quadratic bottom
-% ** and top boundaries, can be shaded by consecutive (vertical) \!qshades,
-% ** proceeding from left to right. Similarly, a region with piecewise
-% ** quadratic left and right boundaries can be shaded by consecutive
-% ** (horizontal) \!qshades, proceeding from bottom to top. More complex
-% ** regions can be shaded by partitioning them into appropriate subregions,
-% ** and shading those.
-
-% ** Shading is accomplished by placing a user-selected shading symbol at
-% ** those points of a regular grid which fall within the region to be
-% ** shaded. This region can be "shrunk" so that a largish shading symbol
-% ** will not extend outside it. Shrinking is accomplished by specifying
-% ** shrinkages for the left, right, bottom, and top boundaries, in a manner
-% ** discussed further below.
-
-% ** \shades and \!joins MUST NOT be intermingled. Finish drawing a curve
-% ** before starting to shade a region, and finish shading a region before
-% ** starting to draw a curve.
-
-
-% ** \setshadegrid [span <SPAN>] [point at XSHADE YSHADE]
-% ** The shading symbol is placed down on the points of a grid centered
-% ** at the coordinate point (XSHADE,YSHADE). The grid points are of the
-% ** form (j*SPAN,k*SPAN), with j+k even. SPAN is specified
-% ** as a dimension.
-% ** (XSHADE,YSHADE) defaults to previous (XSHADE,YSHADE) (or (0,0) if none)
-% ** SPAN defaults to previous span (or 5pt if none)
-% ** See Subsection 7.2 of the manual.
-\def\setshadegrid{%
- \!ifnextchar{s}{\!getspan }
- {\!getspan span <\!dshade>}}
-\def\!getspan span <#1>{%
- \!dshade=#1\relax
- \!ifcoordmode
- \let\!GRnext=\!GRccheckforAP
- \else
- \let\!GRnext=\!GRdcheckforAP
- \fi
- \!GRnext}
-\def\!GRccheckforAP{%
- \!ifnextchar{p}{\!cgetanchor }
- {\!cgetanchor point at {\!xshadesave} {\!yshadesave} }}
-\def\!cgetanchor point at #1 #2 {%
- \edef\!xshadesave{#1}\edef\!yshadesave{#2}%
- \!xshade=\!xshadesave\!xunit \!yshade=\!yshadesave\!yunit
- \ignorespaces}
-\def\!GRdcheckforAP{%
- \!ifnextchar{p}{\!dgetanchor}%
- {\ignorespaces}}
-\def\!dgetanchor point at #1 #2 {%
- \!xshade=#1\relax \!yshade=#2\relax
- \ignorespaces}
-
-% ** \setshadesymbol [<LS, RS, BS, TS>] ({SHADESYMBOL}
-% ** <XDIMEN,YDIMEN> [ORIENTATION])
-% ** Saves SHADESYMBOL away in an hbox for use with shading routines.
-% ** A shade symbol will not be plotted if its plot position comes within
-% ** distance LS of the left boundary, RS of the right boundary, TS of the
-% ** top boundary, BS of the bottom boundary. These parameters have
-% ** default values that should work in most cases (see below).
-% ** To override a default value, specify the replacement value
-% ** in the appropriate subfield of the shrinkages field.
-% ** 0pt may be coded as "z" (without the quotes). To accept a
-% ** default value, leave the field empty. Thus
-% ** [,z,,5pt] sets LS=default, RS=0pt, BS=default, TS=5pt .
-% ** Skipping the shrinkages field accepts all the defaults.
-% ** See Subsection 7.1 of the manual.
-\def\setshadesymbol{%
- \!ifnextchar<{\!setshadesymbol}{\!setshadesymbol<,,,> }}
-
-\def\!setshadesymbol <#1,#2,#3,#4> (#5#6){%
-% ** set the shadesymbol
- \!setputobject{#5}{#6}%
- \setbox\!shadesymbol=\box\!putobject%
- \!shadesymbolxshift=\!xshift \!shadesymbolyshift=\!yshift
-%
-% ** set the shrinkages
- \!dimenA=\!xshift \advance\!dimenA \!smidge% ** default LS = xshift - smidge
- \!override\!dimenA{#1}\!lshrinkage%
- \!dimenA=\!wd \advance \!dimenA -\!xshift% ** default RS = width - xshift
- \advance\!dimenA \!smidge% - smidge
- \!override\!dimenA{#2}\!rshrinkage
- \!dimenA=\!dp \advance \!dimenA \!yshift% ** default BS = depth + yshift
- \advance\!dimenA \!smidge% - smidge
- \!override\!dimenA{#3}\!bshrinkage
- \!dimenA=\!ht \advance \!dimenA -\!yshift% ** default TS = height - yshift
- \advance\!dimenA \!smidge% - smidge
- \!override\!dimenA{#4}\!tshrinkage
- \ignorespaces}
-\def\!smidge{-.2pt}%
-
-% ** \!override{NOMINAL DIMEN}{REPLACEMENT DIMEN}{DIMEN}
-% ** Overrides the NOMINAL DIMEN by the REPLACEMENT DIMEN to produce DIMEN,
-% ** according to the following rules:
-% ** REPLACEMENT DIMEN empty: DIMEN <-- NOMINAL DIMEN
-% ** REPLACEMENT DIMEN z: DIMEN <-- 0pt
-% ** otherwise: DIMEN <-- REPLACEMENT DIMEN
-% ** DIMEN must be a dimension register
-\def\!override#1#2#3{%
- \edef\!!override{#2}%
- \ifx \!!override\empty
- #3=#1\relax
- \else
- \if z\!!override
- #3=\!zpt
- \else
- \ifx \!!override\!blankz
- #3=\!zpt
- \else
- #3=#2\relax
- \fi
- \fi
- \fi
- \ignorespaces}
-\def\!blankz{ z}
-
-\setshadesymbol ({\fiverm .})% ** initialize plotsymbol
-% ** \fivesy ^^B is a small cross
-
-
-% ** \!startvshade [at] (xS,ybS,ytS)
-% ** Initiates vertical shading mode
-\def\!startvshade#1(#2,#3,#4){%
- \let\!!xunit=\!xunit%
- \let\!!yunit=\!yunit%
- \let\!!xshade=\!xshade%
- \let\!!yshade=\!yshade%
- \def\!getshrinkages{\!vgetshrinkages}%
- \let\!setshadelocation=\!vsetshadelocation%
- \!xS=\!M{#2}\!!xunit
- \!ybS=\!M{#3}\!!yunit
- \!ytS=\!M{#4}\!!yunit
- \!shadexorigin=\!xorigin \advance \!shadexorigin \!shadesymbolxshift
- \!shadeyorigin=\!yorigin \advance \!shadeyorigin \!shadesymbolyshift
- \ignorespaces}
-
-% ** \!starthshade [at] (yS,xlS,xrS)
-% ** Initiates horizontal shading mode
-\def\!starthshade#1(#2,#3,#4){%
- \let\!!xunit=\!yunit%
- \let\!!yunit=\!xunit%
- \let\!!xshade=\!yshade%
- \let\!!yshade=\!xshade%
- \def\!getshrinkages{\!hgetshrinkages}%
- \let\!setshadelocation=\!hsetshadelocation%
- \!xS=\!M{#2}\!!xunit
- \!ybS=\!M{#3}\!!yunit
- \!ytS=\!M{#4}\!!yunit
- \!shadexorigin=\!xorigin \advance \!shadexorigin \!shadesymbolxshift
- \!shadeyorigin=\!yorigin \advance \!shadeyorigin \!shadesymbolyshift
- \ignorespaces}
-
-
-% ** \!lattice{ANCHOR}{SPAN}{LOCATION}{INDEX}{LATTICE LOCATION}
-% ** Consider the lattice with points ANCHOR + j*SPAN. This routine determines
-% ** the index k of the smallest lattice point >= LOCATION, and sets
-% ** LATTICE LOCATION = ANCHOR + k*SPAN.
-% ** INDEX is assumed to be a count register, LATTICE LOCATION a dimen reg.
-\def\!lattice#1#2#3#4#5{%
- \!dimenA=#1% ** dimA = ANCHOR
- \!dimenB=#2% ** dimB = SPAN (assumed > 0pt)
- \!countB=\!dimenB% ** ctB = SPAN, as a count
-%
-% ** Determine index of smallest lattice point >= LOCATION
- \!dimenC=#3% ** dimC = LOCATION
- \advance\!dimenC -\!dimenA% ** now dimC = LOCATION-ANCHOR
- \!countA=\!dimenC% ** ctA = above, as a count
- \divide\!countA \!countB% ** now ctA = desired index, if dimC <= 0
- \ifdim\!dimenC>\!zpt
- \!dimenD=\!countA\!dimenB% ** (tentative k)*span
- \ifdim\!dimenD<\!dimenC% ** if this is false, ctA = desired index
- \advance\!countA 1 % ** if true, have to add 1
- \fi
- \fi
-%
- \!dimenC=\!countA\!dimenB% ** lattice location = anchor + ctA*span
- \advance\!dimenC \!dimenA
- #4=\!countA% ** the desired index
- #5=\!dimenC% ** corresponding lattice location
- \ignorespaces}
-
-
-% ** \!qshade [with shrinkages] [[LS,RS,BS,TS]]
-% ***** during vertical shading:
-% ** [the region from (xS,ybS,ytS) to] (xM,ybM,ytM) [and] (xE,ybE,ytE)
-% ** Shades the region {(x,y): xS <= x <= xE, yb(x) <= y <= yt(x)}, where
-% ** yb is the quadratic thru (xS,ybS) & (xM,ybM) & (xE,ybE)
-% ** yt is the quadratic thru (xS,ytS) & (xM,ybM) & (xE,ytE)
-% ** xS,ybS,ytS are either given by \!startvshade or carried over
-% ** as the ending values of the immediately preceding \!qshade.
-% ** For the interpretation of LS, RS, BS, & TS, see \setshadesymbol. The
-% ** values set there can be overridden, for the course of this \!qshade
-% ** only, in the same manner as overrides are specified for
-% ** \setshadesymbol.
-% ***** during horizontal shading:
-% ** [the region from (yS,xlS,xrS) to] (yM,xlM,xrM) [and] (yE,xlE,xrE)
-\def\!qshade#1(#2,#3,#4)#5(#6,#7,#8){%
- \!xM=\!M{#2}\!!xunit
- \!ybM=\!M{#3}\!!yunit
- \!ytM=\!M{#4}\!!yunit
- \!xE=\!M{#6}\!!xunit
- \!ybE=\!M{#7}\!!yunit
- \!ytE=\!M{#8}\!!yunit
- \!getcoeffs\!xS\!ybS\!xM\!ybM\!xE\!ybE\!ybB\!ybC%**Get coefficients B & C for
- \!getcoeffs\!xS\!ytS\!xM\!ytM\!xE\!ytE\!ytB\!ytC%**y=y0 + B(x-X0) + C(x-X0)**2
- \def\!getylimits{\!qgetylimits}%
- \!shade{#1}\ignorespaces}
-
-% ** \!lshade ... (xE,ybE,ytE)
-% ** This is like \!qshade, but the top and bottom boundaries are linear,
-% ** rather than quadratic.
-\def\!lshade#1(#2,#3,#4){%
- \!xE=\!M{#2}\!!xunit
- \!ybE=\!M{#3}\!!yunit
- \!ytE=\!M{#4}\!!yunit
- \!dimenE=\!xE \advance \!dimenE -\!xS% ** xE-xS
- \!dimenC=\!ytE \advance \!dimenC -\!ytS% ** ytE-ytS
- \!divide\!dimenC\!dimenE\!ytB% ** ytB = (ytE-ytS)/(xE-xS)
- \!dimenC=\!ybE \advance \!dimenC -\!ybS% ** ybE-ybS
- \!divide\!dimenC\!dimenE\!ybB% ** ybB = (ybE-ybS)/(xE-xS)
- \def\!getylimits{\!lgetylimits}%
- \!shade{#1}\ignorespaces}
-
-% ** \!getcoeffs{X0}{Y0}{X1}{Y1}{X2}{Y2}{B}{C}
-% ** Finds B and C such that the quadratic y = Y0 + B(x-X0) + C(x-X0)**2
-% ** passes through (X1,Y1) and (X2,Y2): when X0=0=Y0, the formulas are:
-% ** B = S1 - X1*C, C = (S2-S1)/X2
-% ** with
-% ** S1 = Y1/X1, S2 = (Y2-Y1)/(X2-X1).
-\def\!getcoeffs#1#2#3#4#5#6#7#8{%
- \!dimenC=#4\advance \!dimenC -#2% ** dimC=Y1-Y0
- \!dimenE=#3\advance \!dimenE -#1% ** dimE=X1-X0
- \!divide\!dimenC\!dimenE\!dimenF% ** dimF=S1
- \!dimenC=#6\advance \!dimenC -#4% ** dimC=Y2-Y1
- \!dimenH=#5\advance \!dimenH -#3% ** dimH=X2-X1
- \!divide\!dimenC\!dimenH\!dimenG% ** dimG=S2
- \advance\!dimenG -\!dimenF% ** dimG=S2-S1
- \advance \!dimenH \!dimenE% ** dimH=X2-X0
- \!divide\!dimenG\!dimenH#8% ** C=(S2-S1)/(X2-X0)
- \!removept#8\!t% ** C, without "pt"
- #7=-\!t\!dimenE% ** -C*(X1-X0)
- \advance #7\!dimenF% ** B=S1-C*(X1-X0)
- \ignorespaces}
-
-
-\def\!shade#1{%
-% ** Get LS,RS,BS,TS for this panel
- \!getshrinkages#1<,,,>\!nil% % ** now effective LS=dimE, RS=dimF,
-% ** BS=dimG, TS=dimH
- \advance \!dimenE \!xS% ** now dimE=xS+LS
- \!lattice\!!xshade\!dshade\!dimenE% ** set parity=index of left-mst x-lattice
- \!parity\!xpos% ** point >= xS+LS, xpos=its location
- \!dimenF=-\!dimenF% ** set dimF=xE-RS
- \advance\!dimenF \!xE
-%
- \!loop\!not{\ifdim\!xpos>\!dimenF}% ** loop over x-lattice points <= xE-RS
- \!shadecolumn%
- \advance\!xpos \!dshade% ** move over to next column
- \advance\!parity 1% ** increase index of x-point
- \repeat
-%
- \!xS=\!xE% ** shift ending values to starting values
- \!ybS=\!ybE
- \!ytS=\!ytE
- \ignorespaces}
-
-
-\def\!vgetshrinkages#1<#2,#3,#4,#5>#6\!nil{%
- \!override\!lshrinkage{#2}\!dimenE
- \!override\!rshrinkage{#3}\!dimenF
- \!override\!bshrinkage{#4}\!dimenG
- \!override\!tshrinkage{#5}\!dimenH
- \ignorespaces}
-\def\!hgetshrinkages#1<#2,#3,#4,#5>#6\!nil{%
- \!override\!lshrinkage{#2}\!dimenG
- \!override\!rshrinkage{#3}\!dimenH
- \!override\!bshrinkage{#4}\!dimenE
- \!override\!tshrinkage{#5}\!dimenF
- \ignorespaces}
-
-
-\def\!shadecolumn{%
- \!dxpos=\!xpos
- \advance\!dxpos -\!xS% ** dx = x - xS
- \!removept\!dxpos\!dx% ** ditto, without "pt"
- \!getylimits% ** get top and bottom y-values
- \advance\!ytpos -\!dimenH% ** less TS
- \advance\!ybpos \!dimenG% ** plus BS
- \!yloc=\!!yshade% ** get anchor point for this column
- \ifodd\!parity
- \advance\!yloc \!dshade
- \fi
- \!lattice\!yloc{2\!dshade}\!ybpos%
- \!countA\!ypos% ** ypos=smallest y point for this column
- \!dimenA=-\!shadexorigin \advance \!dimenA \!xpos% ** over
- \loop\!not{\ifdim\!ypos>\!ytpos}% ** loop over ypos <= yt(t)
- \!setshadelocation% ** vmode: xloc=xpos, yloc=ypos
-% ** hmode: xloc=ypos, yloc=xpos
- \!rotateaboutpivot\!xloc\!yloc%
- \!dimenA=-\!shadexorigin \advance \!dimenA \!xloc% ** over
- \!dimenB=-\!shadeyorigin \advance \!dimenB \!yloc% ** up
- \kern\!dimenA \raise\!dimenB\copy\!shadesymbol \kern-\!dimenA
- \advance\!ypos 2\!dshade
- \repeat
- \ignorespaces}
-
-\def\!qgetylimits{%
- \!dimenA=\!dx\!ytC
- \advance\!dimenA \!ytB% ** yt(t)=ytS + dx*(Bt + dx*Ct)
- \!ytpos=\!dx\!dimenA
- \advance\!ytpos \!ytS
- \!dimenA=\!dx\!ybC
- \advance\!dimenA \!ybB% ** yb(t)=ybS + dx*(Bb + dx*Cb)
- \!ybpos=\!dx\!dimenA
- \advance\!ybpos \!ybS}
-
-\def\!lgetylimits{%
- \!ytpos=\!dx\!ytB% ** yt(t)=ytS + dx*Bt
- \advance\!ytpos \!ytS
- \!ybpos=\!dx\!ybB% ** yb(t)=ybS + dx*Bb
- \advance\!ybpos \!ybS}
-
-\def\!vsetshadelocation{% ** vmode: xloc=xpos, yloc=ypos
- \!xloc=\!xpos
- \!yloc=\!ypos}
-\def\!hsetshadelocation{% ** hmode: xloc=ypos, yloc=xpos
- \!xloc=\!ypos
- \!yloc=\!xpos}
-
-
-% **************************************
-% *** TICKS (Draws ticks on graphs) ***
-% **************************************
-
-% ** User commands
-% ** \ticksout
-% ** \ticksin
-% ** \gridlines
-% ** \nogridlines
-% ** \loggedticks
-% ** \unloggesticks
-% ** See Subsection 3.4 of the manual
-
-% ** The following is an option of the \axis command
-% ** ticks
-% ** [in] [out]
-% ** [long] [short] [length <LENGTH>]
-% ** [width <WIDTH>]
-% ** [andacross] [butnotacross]
-% ** [logged] [unlogged]
-% ** [unlabeled] [numbered] [withvalues VALUE1 VALUE2 ... VALUEk / ]
-% ** [quantity Q] [at LOC1 LOC2 ... LOCk / ] [from LOC1 to LOC2 by
-% ** LOC_INCREMENT]
-% ** See Subsection 3.2 of the manual for the rules.
-
-% ** The various options of the tick field are processed by the
-% ** \!nextkeyword command defined below.
-% ** For example, `\!nextkeyword short ' expands to `\!ticksshort',
-% ** while `\!nextkeyword withvalues' expands to `\!tickswithvalues'.
-
-\def\!axisticks {%
- \def\!nextkeyword##1 {%
- \expandafter\ifx\csname !ticks##1\endcsname \relax
- \def\!next{\!fixkeyword{##1}}%
- \else
- \def\!next{\csname !ticks##1\endcsname}%
- \fi
- \!next}%
- \!axissetup
- \def\!axissetup{\relax}%
- \edef\!ticksinoutsign{\!ticksinoutSign}%
- \!ticklength=\longticklength
- \!tickwidth=\linethickness
- \!gridlinestatus
- \!setticktransform
- \!maketick
- \!tickcase=0
- \def\!LTlist{}%
- \!nextkeyword}
-
-\def\ticksout{%
- \def\!ticksinoutSign{+}}
-\def\ticksin{%
- \def\!ticksinoutSign{-}}
-\ticksout
-
-\def\gridlines{%
- \def\!gridlinestatus{\!gridlinestootrue}}
-\def\nogridlines{%
- \def\!gridlinestatus{\!gridlinestoofalse}}
-\nogridlines
-
-\def\loggedticks{%
- \def\!setticktransform{\let\!ticktransform=\!logten}}
-\def\unloggedticks{%
- \def\!setticktransform{\let\!ticktransform=\!donothing}}
-\def\!donothing#1#2{\def#2{#1}}
-\unloggedticks
-
-% ** \!ticks/ : terminates read of tick options
-\expandafter\def\csname !ticks/\endcsname{%
- \!not {\ifx \!LTlist\empty}
- \!placetickvalues
- \fi
- \def\!tickvalueslist{}%
- \def\!LTlist{}%
- \expandafter\csname !axis/\endcsname}
-
-\def\!maketick{%
- \setbox\!boxA=\hbox{%
- \beginpicture
- \!setdimenmode
- \setcoordinatesystem point at {\!zpt} {\!zpt}
- \linethickness=\!tickwidth
- \ifdim\!ticklength>\!zpt
- \putrule from {\!zpt} {\!zpt} to
- {\!ticksinoutsign\!tickxsign\!ticklength}
- {\!ticksinoutsign\!tickysign\!ticklength}
- \fi
- \if!gridlinestoo
- \putrule from {\!zpt} {\!zpt} to
- {-\!tickxsign\!xaxislength} {-\!tickysign\!yaxislength}
- \fi
- \endpicturesave <\!Xsave,\!Ysave>}%
- \wd\!boxA=\!zpt}
-
-\def\!ticksin{%
- \def\!ticksinoutsign{-}%
- \!maketick
- \!nextkeyword}
-
-\def\!ticksout{%
- \def\!ticksinoutsign{+}%
- \!maketick
- \!nextkeyword}
-
-\def\!tickslength<#1> {%
- \!ticklength=#1\relax
- \!maketick
- \!nextkeyword}
-
-\def\!tickslong{%
- \!tickslength<\longticklength> }
-
-\def\!ticksshort{%
- \!tickslength<\shortticklength> }
-
-\def\!tickswidth<#1> {%
- \!tickwidth=#1\relax
- \!maketick
- \!nextkeyword}
-
-\def\!ticksandacross{%
- \!gridlinestootrue
- \!maketick
- \!nextkeyword}
-
-\def\!ticksbutnotacross{%
- \!gridlinestoofalse
- \!maketick
- \!nextkeyword}
-
-\def\!tickslogged{%
- \let\!ticktransform=\!logten
- \!nextkeyword}
-
-\def\!ticksunlogged{%
- \let\!ticktransform=\!donothing
- \!nextkeyword}
-
-\def\!ticksunlabeled{%
- \!tickcase=0
- \!nextkeyword}
-
-\def\!ticksnumbered{%
- \!tickcase=1
- \!nextkeyword}
-
-\def\!tickswithvalues#1/ {%
- \edef\!tickvalueslist{#1! /}%
- \!tickcase=2
- \!nextkeyword}
-
-\def\!ticksquantity#1 {%
- \ifnum #1>1
- \!updatetickoffset
- \!countA=#1\relax
- \advance \!countA -1
- \!ticklocationincr=\!axisLength
- \divide \!ticklocationincr \!countA
- \!ticklocation=\!axisstart
- \loop \!not{\ifdim \!ticklocation>\!axisend}
- \!placetick\!ticklocation
- \ifcase\!tickcase
- \relax % Case 0: no labels
- \or
- \relax % Case 1: numbered -- not available here
- \or
- \expandafter\!gettickvaluefrom\!tickvalueslist
- \edef\!tickfield{{\the\!ticklocation}{\!value}}%
- \expandafter\!listaddon\expandafter{\!tickfield}\!LTlist%
- \fi
- \advance \!ticklocation \!ticklocationincr
- \repeat
- \fi
- \!nextkeyword}
-
-\def\!ticksat#1 {%
- \!updatetickoffset
- \edef\!Loc{#1}%
- \if /\!Loc
- \def\next{\!nextkeyword}%
- \else
- \!ticksincommon
- \def\next{\!ticksat}%
- \fi
- \next}
-
-\def\!ticksfrom#1 to #2 by #3 {%
- \!updatetickoffset
- \edef\!arg{#3}%
- \expandafter\!separate\!arg\!nil
- \!scalefactor=1
- \expandafter\!countfigures\!arg/
- \edef\!arg{#1}%
- \!scaleup\!arg by\!scalefactor to\!countE
- \edef\!arg{#2}%
- \!scaleup\!arg by\!scalefactor to\!countF
- \edef\!arg{#3}%
- \!scaleup\!arg by\!scalefactor to\!countG
- \loop \!not{\ifnum\!countE>\!countF}
- \ifnum\!scalefactor=1
- \edef\!Loc{\the\!countE}%
- \else
- \!scaledown\!countE by\!scalefactor to\!Loc
- \fi
- \!ticksincommon
- \advance \!countE \!countG
- \repeat
- \!nextkeyword}
-
-\def\!updatetickoffset{%
- \!dimenA=\!ticksinoutsign\!ticklength
- \ifdim \!dimenA>\!offset
- \!offset=\!dimenA
- \fi}
-
-\def\!placetick#1{%
- \if!xswitch
- \!xpos=#1\relax
- \!ypos=\!axisylevel
- \else
- \!xpos=\!axisxlevel
- \!ypos=#1\relax
- \fi
- \advance\!xpos \!Xsave
- \advance\!ypos \!Ysave
- \kern\!xpos\raise\!ypos\copy\!boxA\kern-\!xpos
- \ignorespaces}
-
-\def\!gettickvaluefrom#1 #2 /{%
- \edef\!value{#1}%
- \edef\!tickvalueslist{#2 /}%
- \ifx \!tickvalueslist\!endtickvaluelist
- \!tickcase=0
- \fi}
-\def\!endtickvaluelist{! /}
-
-\def\!ticksincommon{%
- \!ticktransform\!Loc\!t
- \!ticklocation=\!t\!!unit
- \advance\!ticklocation -\!!origin
- \!placetick\!ticklocation
- \ifcase\!tickcase
- \relax % Case 0: no labels
- \or % Case 1: numbered
- \ifdim\!ticklocation<-\!!origin
- \edef\!Loc{$\!Loc$}%
- \fi
- \edef\!tickfield{{\the\!ticklocation}{\!Loc}}%
- \expandafter\!listaddon\expandafter{\!tickfield}\!LTlist%
- \or % Case 2: labeled
- \expandafter\!gettickvaluefrom\!tickvalueslist
- \edef\!tickfield{{\the\!ticklocation}{\!value}}%
- \expandafter\!listaddon\expandafter{\!tickfield}\!LTlist%
- \fi}
-
-\def\!separate#1\!nil{%
- \!ifnextchar{-}{\!!separate}{\!!!separate}#1\!nil}
-\def\!!separate-#1\!nil{%
- \def\!sign{-}%
- \!!!!separate#1..\!nil}
-\def\!!!separate#1\!nil{%
- \def\!sign{+}%
- \!!!!separate#1..\!nil}
-\def\!!!!separate#1.#2.#3\!nil{%
- \def\!arg{#1}%
- \ifx\!arg\!empty
- \!countA=0
- \else
- \!countA=\!arg
- \fi
- \def\!arg{#2}%
- \ifx\!arg\!empty
- \!countB=0
- \else
- \!countB=\!arg
- \fi}
-
-\def\!countfigures#1{%
- \if #1/%
- \def\!next{\ignorespaces}%
- \else
- \multiply\!scalefactor 10
- \def\!next{\!countfigures}%
- \fi
- \!next}
-
-\def\!scaleup#1by#2to#3{%
- \expandafter\!separate#1\!nil
- \multiply\!countA #2\relax
- \advance\!countA \!countB
- \if -\!sign
- \!countA=-\!countA
- \fi
- #3=\!countA
- \ignorespaces}
-
-\def\!scaledown#1by#2to#3{%
- \!countA=#1\relax% ** get original #
- \ifnum \!countA<0 % ** take abs value,
- \def\!sign{-}% ** remember sign
- \!countA=-\!countA
- \else
- \def\!sign{}%
- \fi
- \!countB=\!countA% ** copy |#|
- \divide\!countB #2\relax% ** integer part (|#|/sf)
- \!countC=\!countB% ** get sf * (|#|/sf)
- \multiply\!countC #2\relax
- \advance \!countA -\!countC% ** ctA is now remainder
- \edef#3{\!sign\the\!countB.}% ** +- integerpart.
- \!countC=\!countA % ** Tack on proper number
- \ifnum\!countC=0 % ** of zeros after .
- \!countC=1
- \fi
- \multiply\!countC 10
- \!loop \ifnum #2>\!countC
- \edef#3{#3\!zero}%
- \multiply\!countC 10
- \repeat
- \edef#3{#3\the\!countA}% ** Add on rest of remainder
- \ignorespaces}
-
-\def\!placetickvalues{%
- \advance\!offset \tickstovaluesleading
- \if!xswitch
- \setbox\!boxA=\hbox{%
- \def\\##1##2{%
- \!dimenput {##2} [B] (##1,\!axisylevel)}%
- \beginpicture
- \!LTlist
- \endpicturesave <\!Xsave,\!Ysave>}%
- \!dimenA=\!axisylevel
- \advance\!dimenA -\!Ysave
- \advance\!dimenA \!tickysign\!offset
- \if -\!tickysign
- \advance\!dimenA -\ht\!boxA
- \else
- \advance\!dimenA \dp\!boxA
- \fi
- \advance\!offset \ht\!boxA
- \advance\!offset \dp\!boxA
- \!dimenput {\box\!boxA} [Bl] <\!Xsave,\!Ysave> (\!zpt,\!dimenA)
- \else
- \setbox\!boxA=\hbox{%
- \def\\##1##2{%
- \!dimenput {##2} [r] (\!axisxlevel,##1)}%
- \beginpicture
- \!LTlist
- \endpicturesave <\!Xsave,\!Ysave>}%
- \!dimenA=\!axisxlevel
- \advance\!dimenA -\!Xsave
- \advance\!dimenA \!tickxsign\!offset
- \if -\!tickxsign
- \advance\!dimenA -\wd\!boxA
- \fi
- \advance\!offset \wd\!boxA
- \!dimenput {\box\!boxA} [Bl] <\!Xsave,\!Ysave> (\!dimenA,\!zpt)
- \fi}
-
-
-\normalgraphs
-\catcode`!=12 % ***** THIS MUST NEVER BE OMITTED
+% G"andertes PiCTeX.TEX mit weniger Dimensionsregistern %
+% von Andreas Schrell, ohne Gew"ahr!!!!!!!
+% Version 0.0 vom 31.03.1994
+% FEHLERMELDUNGEN an Andreas.Schrell@RS.maus.de
+
+% This is PiCTeXWD, Version 1.1 9/21/87
+
+% CAVEAT: The PiCTeX manual often has a more lucid explanation
+% of any given topic than you will find in the internal documentation
+% of the macros.
+
+% PiCTeX's commands can be classified into two groups: (1) public (or
+% external), and (2) private (or internal). The public macros are
+% discussed at length in the manual. The only discussion of the private
+% macros is the internal documentation. The private macros all have
+% names beginning with an exclamation point (!) of category code 11.
+% Since in normal usage "!" has category code 12, these macros can't
+% be accessed or modified by the general user.
+
+% The macros are organized into thematically related groups. For example,
+% the macros dealing with dots & dashes are all in the DASHPATTERN group.
+% The table below shows which macros are in which groups. The table
+% covers all public macros, and many (but not all) of PiCTeX's upper level
+% private macros. Following the table, the various groups are listed
+% in the order in which they appear in the table.
+
+% *********************** TABLE OF GROUPS OF MACROS **********************
+
+% HACKS: Utility macros
+% \PiC
+% \PiCTeX
+% \placevalueinpts
+% \!!loop
+% \!cfor
+% \!copylist
+% \!ecfor
+% \!etfor
+% \!getnext
+% \!getnextvalueof
+% \!ifempty
+% \!ifnextchar
+% \!leftappend
+% \!listaddon
+% \!loop
+% \!lop
+% \!mlap
+% \!not
+% \!removept
+% \!rightappend
+% \!tfor
+% \!vmlap
+% \!wlet
+
+% ALLOCATION: Allocates registers
+
+% AREAS: Deals with plot areas
+% \axis
+% \grid
+% \invisibleaxes
+% \normalgraphs
+% \plotheading
+% \setplotarea
+% \visibleaxes
+
+% ARROWS: Draws arrows
+% \arrow
+% \betweenarrows
+
+% BARS: Draws bars
+% \putbar
+% \setbars
+
+% BOXES: Draws rectangles
+% \frame
+% \putrectangle
+% \rectangle
+% \shaderectangleson
+% \shaderectanglesoff
+
+% CURVES: Upper level plot commands
+% \hshade
+% \plot
+% \sethistograms
+% \setlinear
+% \setquadratic
+% \vshade
+
+% DASHPATTERNS: Sets up dash patterns
+% \findlength
+% \setdashes
+% \setdashesnear
+% \setdashpattern
+% \setdots
+% \setdotsnear
+% \setsolid
+% \!dashingoff
+% \!dashingon
+
+% DIVISION: Does long division of dimension registers
+% \Divide
+% \!divide
+
+% ELLIPSES: Draws ellipses and circles
+% \circulararc
+% \ellipticalarc
+
+% RULES: Draws rules, i.e., horizontal & vertical lines
+% \putrule
+% \!putdashedhline
+% \!putdashedvline
+% \!puthline
+% \!putsolidhline
+% \!putsolidvline
+% \!putvline
+
+% LINEAR ARC: Draws straight lines -- solid and dashed
+% \inboundscheckoff
+% \inboundscheckon
+% \!advancedashing
+% \!drawlinearsegment
+% \!initinboundscheck
+% \!linearsolid
+% \!lineardashed
+% \!ljoin
+% \!plotifinbounds
+% \!start
+
+% LOGTEN: Log_10 function
+% \!logten
+
+% PICTURES: Basic setups for PiCtures; \put commands
+% \accountingoff
+% \accountingon
+% \beginpicture
+% \endpicture
+% \endpicturesave
+% \lines
+% \multiput
+% \put
+% \setcoordinatemode
+% \setcoordinatesystem
+% \setdimensionmode
+% \stack
+% \Lines
+% \Xdistance
+% \Ydistance
+% \!dimenput
+% \!ifcoordmode
+% \!ifdimenmode
+% \!setcoordmode
+% \!setdimenmode
+% \!setputobject
+
+% PLOTTING: Things to do with plotting
+% \dontsavelinesandcurves
+% \replot
+% \savelinesandcurves
+% \setplotsymbol
+% \writesavefile
+% \!plot
+
+% PYTHAGORAS: Euclidean distance function
+% \placehypotenuse
+% \!Pythag
+
+% QUADRATIC ARC: Draws a quadratic arc
+% \!qjoin
+
+% ROTATIONS: Handles rotations
+% \startrotation
+% \stoprotation
+% \!rotateaboutpivot
+% \!rotateonly
+
+% SHADING: Handles shading
+% \setshadegrid
+% \setshadesymbol
+% \!lshade
+% \!qshade
+% \!starthshade
+% \!startvshade
+
+% TICKS: Draws ticks on graphs
+% \gridlines
+% \loggedticks
+% \nogridlines
+% \ticksin
+% \ticksout
+% \unloggesticks
+
+% ***************** END OF TABLE OF GROUPS OF MACROS ********************
+
+
+\catcode`!=11 % ***** THIS MUST NEVER BE OMITTED
+% *******************************
+% *** HACKS (Utility macros) ***
+% *******************************
+
+% ** User commands
+% ** \PiC{P\kern-.12em\lower.5ex\hbox{I}\kern-.075emC}
+% ** \PiCTeX{\PiC\kern-.11em\TeX}
+% ** \placevalueinpts of <DIMENSION REGISTER> in {CONTROL SEQUENCE}
+
+% ** Internal commands
+% ** \!ifnextchar{CHARACTER}{TRUE ACTION}{FALSE ACTION}
+% ** \!tfor NAME := LIST \do {BODY}
+% ** \!etfor NAME:= LIST \do {BODY}
+% ** \!cfor NAME := LIST \do {BODY}
+% ** \!ecfor NAME:= LIST \do {BODY}
+% ** \!ifempty{MACRO}{TRUE ACTION}{FALSE ACTION}
+% ** \!getnext\\ITEMfrom\LIST
+% ** \!getnextvalueof\DIMEN\from\LIST
+% ** \!copylist\LISTMACRO_A\to\LISTMACRO_B
+% ** \!wlet\CONTROL_SEQUENCE_A=\CONTROL_SEQUENCE_B
+% ** \!listaddon ITEM LIST
+% ** \!rightappendITEM\withCS\to\LISTMACRO
+% ** \!leftappendITEM\withCS\to\LISTMACRO
+% ** \!lop\LISTMACRO\to\ITEM
+% ** \!loop ... repeat
+% ** \!!loop ... repeat
+% ** \!removept{DIMENSION REGISTER}{CONTROL SEQUENCE}
+% ** \!mlap{...}
+% ** \!vmlap{...}
+% ** \!not{TEK if-CONDITION}
+
+% ** First, here are the the PiCTeX logo, and the syllable PiC:
+\def\PiC{P\kern-.12em\lower.5ex\hbox{I}\kern-.075emC}
+\def\PiCTeX{\PiC\kern-.11em\TeX}
+
+% ** The following macro expands to parameter #2 or parameter #3 according to
+% ** whether the next non-blank character following the macro is or is not #1.
+% ** Blanks following the macro are gobbled.
+\def\!ifnextchar#1#2#3{%
+ \let\!testchar=#1%
+ \def\!first{#2}%
+ \def\!second{#3}%
+ \futurelet\!nextchar\!testnext}
+\def\!testnext{%
+ \ifx \!nextchar \!spacetoken
+ \let\!next=\!skipspacetestagain
+ \else
+ \ifx \!nextchar \!testchar
+ \let\!next=\!first
+ \else
+ \let\!next=\!second
+ \fi
+ \fi
+ \!next}
+\def\\{\!skipspacetestagain}
+ \expandafter\def\\ {\futurelet\!nextchar\!testnext}
+\def\\{\let\!spacetoken= } \\ % ** set \spacetoken to a space token
+
+
+% ** Borrow the "tfor" macro from Latex:
+% ** \!tfor NAME := LIST \do {BODY}
+% ** if, before expansion, LIST = T1 ... Tn, where each Ti is a token
+% ** or {...}, then executes BODY n times, with NAME = Ti on the
+% ** i-th iteration. Works for n=0.
+\def\!tfor#1:=#2\do#3{%
+ \edef\!fortemp{#2}%
+ \ifx\!fortemp\!empty
+ \else
+ \!tforloop#2\!nil\!nil\!!#1{#3}%
+ \fi}
+\def\!tforloop#1#2\!!#3#4{%
+ \def#3{#1}%
+ \ifx #3\!nnil
+ \let\!nextwhile=\!fornoop
+ \else
+ #4\relax
+ \let\!nextwhile=\!tforloop
+ \fi
+ \!nextwhile#2\!!#3{#4}}
+
+
+% ** \!etfor NAME:= LIST\do {BODY}
+% ** This is like \!cfor, but LIST is any balanced token list whose complete
+% ** expansion has the form T1 ... Tn
+\def\!etfor#1:=#2\do#3{%
+ \def\!!tfor{\!tfor#1:=}%
+ \edef\!!!tfor{#2}%
+ \expandafter\!!tfor\!!!tfor\do{#3}}
+
+
+% ** modify the Latex \tfor (token-for) loop to a \cfor (comma-for) loop.
+% ** \!cfor NAME := LIST \do {BODY}
+% ** if, before expansion, LIST = a1,a2,...an, then executes BODY n times,
+% ** with NAME = ai on the i-th iteration. Works for n=0.
+\def\!cfor#1:=#2\do#3{%
+ \edef\!fortemp{#2}%
+ \ifx\!fortemp\!empty
+ \else
+ \!cforloop#2,\!nil,\!nil\!!#1{#3}%
+ \fi}
+\def\!cforloop#1,#2\!!#3#4{%
+ \def#3{#1}%
+ \ifx #3\!nnil
+ \let\!nextwhile=\!fornoop
+ \else
+ #4\relax
+ \let\!nextwhile=\!cforloop
+ \fi
+ \!nextwhile#2\!!#3{#4}}
+
+
+% ** \!ecfor NAME:= LIST\do {BODY}
+% ** This is like \!cfor, but LIST is any balanced token list whose complete
+% ** expansion has the form a1,a2,...,an.
+\def\!ecfor#1:=#2\do#3{%
+ \def\!!cfor{\!cfor#1:=}%
+ \edef\!!!cfor{#2}%
+ \expandafter\!!cfor\!!!cfor\do{#3}}
+
+
+\def\!empty{}
+\def\!nnil{\!nil}
+\def\!fornoop#1\!!#2#3{}
+
+
+% ** \!ifempty{ARG}{TRUE ACTION}{FALSE ACTION}
+\def\!ifempty#1#2#3{%
+ \edef\!emptyarg{#1}%
+ \ifx\!emptyarg\!empty
+ #2%
+ \else
+ #3%
+ \fi}
+
+% ** \!getnext\\ITEMfrom\LIST
+% ** \LIST has the form \\{item1}\\{item2}\\{item3}...\\{itemk}
+% ** This routine sets \ITEM to item1, and cycles \LIST to
+% ** \\{item2}\\{item3}...\\{itemk}\\{item1}
+\def\!getnext#1\from#2{%
+ \expandafter\!gnext#2\!#1#2}%
+\def\!gnext\\#1#2\!#3#4{%
+ \def#3{#1}%
+ \def#4{#2\\{#1}}%
+ \ignorespaces}
+
+
+% ** \!getnextvalueof\DIMEN\from\LIST
+% ** Similar to !getnext.
+% ** \LIST has the form \\{dimen1}\\{dimen2}\\{dimen3} ...
+% ** \DIMEN is a dimension register
+% ** Works also for counts
+%
+\def\!getnextvalueof#1\from#2{%
+ \expandafter\!gnextv#2\!#1#2}%
+\def\!gnextv\\#1#2\!#3#4{%
+ #3=#1%
+ \def#4{#2\\{#1}}%
+ \ignorespaces}
+
+
+% ** \!copylist\LISTMACROA\to\LISTMACROB
+% ** makes the replacement text of LISTMACRO B identical to that of
+% ** list macro A.
+\def\!copylist#1\to#2{%
+ \expandafter\!!copylist#1\!#2}
+\def\!!copylist#1\!#2{%
+ \def#2{#1}\ignorespaces}
+
+
+% ** \!wlet\CSA=\CSB
+% ** lets control sequence \CSB = control sequence \CSA, and writes a
+% ** message to that effect in the log file using plain TEK's \wlog
+\def\!wlet#1=#2{%
+ \let#1=#2
+ \wlog{\string#1=\string#2}}
+
+% ** \!listaddon ITEM LIST
+% ** LIST <-- LIST \\ ITEM
+\def\!listaddon#1#2{%
+ \expandafter\!!listaddon#2\!{#1}#2}
+\def\!!listaddon#1\!#2#3{%
+ \def#3{#1\\#2}}
+
+% ** \!rightappendITEM\to\LISTMACRO
+% ** \LISTMACRO --> \LISTMACRO\\{ITEM}
+%\def\!rightappend#1\to#2{\expandafter\!!rightappend#2\!{#1}#2}
+%\def\!!rightappend#1\!#2#3{\def#3{#1\\{#2}}}
+
+
+% ** \!rightappendITEM\withCS\to\LISTMACRO
+% ** \LISTMACRO --> \LISTMACRO||CS||{ITEM}
+\def\!rightappend#1\withCS#2\to#3{\expandafter\!!rightappend#3\!#2{#1}#3}
+\def\!!rightappend#1\!#2#3#4{\def#4{#1#2{#3}}}
+
+
+% ** \!leftappendITEM\withCS\to\LISTMACRO
+% ** \LISTMACRO --> CS||{ITEM}||\LISTMACRO
+\def\!leftappend#1\withCS#2\to#3{\expandafter\!!leftappend#3\!#2{#1}#3}
+\def\!!leftappend#1\!#2#3#4{\def#4{#2{#3}#1}}
+
+
+% ** \!lop\LISTMACRO\to\ITEM
+% ** \\{item1}\\{item2}\\{item3} ... --> \\{item2}\\{item3} ...
+% ** item1 --> \ITEM
+\def\!lop#1\to#2{\expandafter\!!lop#1\!#1#2}
+\def\!!lop\\#1#2\!#3#4{\def#4{#1}\def#3{#2}}
+
+
+% ** \!placeNUMBER\of\LISTMACRO\in\ITEM
+% ** the NUMBERth item of \LISTMACRO --> replacement text of \ITEM
+%\def\!place#1\of#2\in#3{\def#3{\outofrange}%
+%{\count0=#1\def\\##1{\advance\count0-1 \ifnum\count0=0 \gdef#3{##1}\fi}#2}}
+
+
+% ** Following code converts a commalist to a list macro, with all items
+% ** fully expanded.
+%\!ecfor\item:=\commalist\do{\expandafter\!rightappend\item\to\list}
+
+
+% ** \!loop ... repeat
+% ** This is exactly like TEX's \loop ... repeat. It can be used in nesting
+% ** two loops, without puting the inner one inside a group.
+\def\!loop#1\repeat{\def\!body{#1}\!iterate}
+\def\!iterate{\!body\let\!next=\!iterate\else\let\!next=\relax\fi\!next}
+
+% ** \!!loop ... repeat
+% ** This is exactly like TEX's \loop ... repeat. It can be used in nesting
+% ** two loops, without puting the inner one inside a group.
+\def\!!loop#1\repeat{\def\!!body{#1}\!!iterate}
+\def\!!iterate{\!!body\let\!!next=\!!iterate\else\let\!!next=\relax\fi\!!next}
+% (\multiput uses \!!loop)
+
+% ** \!removept{DIMENREG}{\CS}
+% ** Defines the control sequence CS to be the value (in points) in the
+% ** dimension register DIMENREG (but without the "pt" TEK usually adds)
+% ** E.g., after \dimen0=12.3pt \!removept\dimen0\A, \A expands to 12.3
+\def\!removept#1#2{\edef#2{\expandafter\!!removePT\the#1}}
+{\catcode`p=12 \catcode`t=12 \gdef\!!removePT#1pt{#1}}
+
+% ** \pladevalueinpts of <DIMENSION REGISTER> in {CONTROL SEQUENCE}
+\def\placevalueinpts of <#1> in #2 {%
+ \!removept{#1}{#2}}
+
+% ** \!mlap{...} \!vmlap{...}
+% ** Center ... in a box of width 0.
+\def\!mlap#1{\hbox to 0pt{\hss#1\hss}}
+\def\!vmlap#1{\vbox to 0pt{\vss#1\vss}}
+
+% ** \!not{TEK if-CONDITION}
+% ** By a TEK if-CONDITION is meant something like
+% ** \ifnum\N<0, or \ifdim\A>\B
+% ** \!not produces an if-condition which is false if the original condition
+% ** is true, and true if the original condition is false.
+\def\!not#1{%
+ #1\relax
+ \!switchfalse
+ \else
+ \!switchtrue
+ \fi
+ \if!switch
+ \ignorespaces}
+
+
+% *******************
+% *** ALLOCATIONS ***
+% *******************
+
+% This section allocates all the registers PiCTeX uses. Following
+% each allocation is a string of the form ....N.D...L......... ;
+% the various letters show which sections of PiCTeX make explicit
+% reference to that register, according to the following code:
+
+% H Hacks
+% A Areas
+% W arroWs
+% B Bars
+% X boXes
+% C Curves
+% D Dashpattterns
+% V diVision
+% E Ellipses
+% U rUles
+% L Linear arc
+% G loGten
+% P Pictures
+% O plOtting
+% Y pYthagoras
+% Q Quadratic arc
+% R Rotations
+% S Shading
+% T Ticks
+
+% Turn off messages from TeX's allocation macros
+\let\!!!wlog=\wlog % "\wlog" is defined in plain TeX
+\def\wlog#1{}
+
+\newskip\headingtoplotskip %.A................. %-as-%
+\newskip\linethickness %.A..X....U........T
+\newskip\longticklength %.A................T %-as-%
+\newskip\plotsymbolspacing %......D...L....Q...
+\newskip\shortticklength %.A................T %-as-%
+\newskip\stackleading %.A..........P...... %-as-%
+\newskip\tickstovaluesleading %.A................T %-as-%
+\newskip\totalarclength %......D...L....Q...
+\newskip\valuestolabelleading %.A................. %-as-%
+
+\newbox\!boxA %.AW...............T
+\newbox\!boxB %..W................
+\newbox\!picbox %............P......
+\newbox\!plotsymbol %..........L..O.....
+\newbox\!putobject %............PO...S.
+\newbox\!shadesymbol %.................S.
+
+\newcount\!countA %.A....D..UL....Q.ST
+\newcount\!countB %......D..U.....Q.ST
+\newcount\!countC %...............Q..T
+\newcount\!countD %...................
+\newcount\!countE %.............O....T
+\newcount\!countF %.............O....T
+\newcount\!countG %..................T
+\newcount\!fiftypt %.........U.........
+\newcount\!intervalno %..........L....Q...
+\newcount\!npoints %..........L........
+\newcount\!nsegments %.........U.........
+\newcount\!ntemp %............P......
+\newcount\!parity %.................S.
+\newcount\!scalefactor %..................T
+\newcount\!tickcase %..................T
+
+\newskip\!Xleft %............P......
+\newskip\!Xright %............P......
+\newskip\!Xsave %.A................T
+\newskip\!Ybot %............P......
+\newskip\!Ysave %.A................T
+\newskip\!Ytop %............P......
+\newskip\!angle %........E..........
+\newskip\!arclength %..W......UL....Q...
+\newskip\!areabloc %.A........L........
+\newskip\!arealloc %.A........L........
+\newskip\!arearloc %.A........L........
+\newskip\!areatloc %.A........L........
+\newskip\!bshrinkage %.................S.
+\newskip\!checkbot %..........L........
+\newskip\!checkleft %..........L........
+\newskip\!checkright %..........L........
+\newskip\!checktop %..........L........
+\newdimen\!dimenA %.AW.X.DVEUL..OYQRST
+\newdimen\!dimenB %....X.DVEU...O.QRS.
+\newdimen\!dimenC %..W.X.DVEU......RS.
+\newdimen\!dimenD %..W.X.DVEU....Y.RS.
+\newdimen\!dimenE %..W........G..YQ.S.
+\newdimen\!dimenF %...........G..YQ.S.
+\newdimen\!dimenG %...........G..YQ.S.
+\newdimen\!dimenH %...........G..Y..S.
+\newdimen\!dimenI %...BX.........Y....
+\newdimen\!distacross %..........L....Q...
+\newdimen\!downlength %..........L........
+\newdimen\!dp %.A..X.......P....S.
+\newdimen\!dshade %.................S.
+\newdimen\!dxpos %..W......U..P....S.
+\newdimen\!dxprime %...............Q...
+\newdimen\!dypos %..WB.....U..P......
+\newdimen\!dyprime %...............Q...
+\newdimen\!ht %.A..X.......P....S.
+\newdimen\!leaderlength %......D..U.........
+\newdimen\!lshrinkage %.................S.
+\newdimen\!midarclength %...............Q...
+\newdimen\!offset %.A................T
+\newdimen\!plotheadingoffset %.A.................
+\newdimen\!plotsymbolxshift %..........L..O.....
+\newdimen\!plotsymbolyshift %..........L..O.....
+\newdimen\!plotxorigin %..........L..O.....
+\newdimen\!plotyorigin %..........L..O.....
+\newdimen\!rshrinkage %.................S.
+\newdimen\!shadesymbolxshift %.................S.
+\newdimen\!shadesymbolyshift %.................S.
+\newdimen\!tshrinkage %.................S.
+\newdimen\!uplength %..........L........
+\newdimen\!wd %....X.......P....S.
+\newdimen\!xB %...............Q...
+\newdimen\!xC %...............Q...
+\newdimen\!xE %..W.....E.L....Q.S.
+\newdimen\!xM %..W.....E......Q.S.
+\newdimen\!xS %..W.....E.L....Q.S.
+\newdimen\!xaxislength %.A................T
+\newdimen\!xdiff %..........L........
+\newdimen\!xleft %............P......
+\newdimen\!xloc %..WB.....U.......S.
+\newdimen\!xorigin %.A........L.P....S.
+\newdimen\!xpivot %................R..
+\newdimen\!xpos %..........L.P..Q.ST
+\newdimen\!xprime %...............Q...
+\newdimen\!xright %............P......
+\newdimen\!xshade %.................S.
+\newdimen\!xshift %..W.........PO...S.
+\newdimen\!xtemp %............P......
+\newdimen\!xunit %.AWBX...EUL.P..QRS.
+\newdimen\!xxE %........E..........
+\newdimen\!xxM %........E..........
+\newdimen\!xxS %........E..........
+\newdimen\!xxloc %..WB....EU.........
+\newdimen\!yB %...............Q...
+\newdimen\!yC %...............Q...
+\newdimen\!yE %..W.....E.L....Q...
+\newdimen\!yM %..W.....E......Q...
+\newdimen\!yS %..W.....E.L....Q...
+\newdimen\!yaxislength %.A................T
+\newdimen\!ybot %............P......
+\newdimen\!ydiff %..........L........
+\newdimen\!yloc %..WB.....U.......S.
+\newdimen\!yorigin %.A........L.P....S.
+\newdimen\!ypivot %................R..
+\newdimen\!ypos %..........L.P..Q.ST
+\newdimen\!yprime %...............Q...
+\newdimen\!yshade %.................S.
+\newdimen\!yshift %..W.........PO...S.
+\newdimen\!ytemp %............P......
+\newdimen\!ytop %............P......
+\newdimen\!yunit %.AWBX...EUL.P..QRS.
+\newdimen\!yyE %........E..........
+\newdimen\!yyM %........E..........
+\newdimen\!yyS %........E..........
+\newdimen\!yyloc %..WB....EU.........
+
+\newif\if!axisvisible %.A.................
+\newif\if!gridlinestoo %..................T
+\newif\if!keepPO %...................
+\newif\if!placeaxislabel %.A.................
+\newif\if!switch %H..................
+\newif\if!xswitch %.A................T
+
+\newtoks\!axisLaBeL %.A.................
+\newtoks\!keywordtoks %.A.................
+
+\newwrite\!replotfile %.............O.....
+
+\newhelp\!keywordhelp{The keyword mentioned in the error message in unknown.
+Replace NEW KEYWORD in the indicated response by the keyword that
+should have been specified.} %.A.................
+
+% The following commands assign alternate names to some of the
+% above registers. "\!wlet" is defined in Hacks.
+\!wlet\!!origin=\!xM %.A................T
+\!wlet\!!unit=\!uplength %.A................T
+\!wlet\!Lresiduallength=\!dimenG %.........U.........
+\!wlet\!Rresiduallength=\!dimenF %.........U.........
+\!wlet\!axisLength=\!distacross %.A................T
+\!wlet\!axisend=\!ydiff %.A................T
+\!wlet\!axisstart=\!xdiff %.A................T
+\!wlet\!axisxlevel=\!arclength %.A................T
+\!wlet\!axisylevel=\!downlength %.A................T
+\!wlet\!beta=\!dimenE %...............Q...
+\!wlet\!gamma=\!dimenF %...............Q...
+\!wlet\!shadexorigin=\!plotxorigin %.................S.
+\!wlet\!shadeyorigin=\!plotyorigin %.................S.
+\!wlet\!ticklength=\!xS %..................T
+\!wlet\!ticklocation=\!xE %..................T
+\!wlet\!ticklocationincr=\!yE %..................T
+\!wlet\!tickwidth=\!yS %..................T
+\!wlet\!totalleaderlength=\!dimenE %.........U.........
+\!wlet\!xone=\!xprime %....X..............
+\!wlet\!xtwo=\!dxprime %....X..............
+\!wlet\!ySsave=\!yM %...................
+\!wlet\!ybB=\!yB %.................S.
+\!wlet\!ybC=\!yC %.................S.
+\!wlet\!ybE=\!yE %.................S.
+\!wlet\!ybM=\!yM %.................S.
+\!wlet\!ybS=\!yS %.................S.
+\!wlet\!ybpos=\!yyloc %.................S.
+\!wlet\!yone=\!yprime %....X..............
+\!wlet\!ytB=\!xB %.................S.
+\!wlet\!ytC=\!xC %.................S.
+\!wlet\!ytE=\!downlength %.................S.
+\!wlet\!ytM=\!arclength %.................S.
+\!wlet\!ytS=\!distacross %.................S.
+\!wlet\!ytpos=\!xxloc %.................S.
+\!wlet\!ytwo=\!dyprime %....X..............
+
+
+% Initial values for registers
+\def\!zpt{0pt} % static
+\!xunit=1pt
+\!yunit=1pt
+\!arearloc=\!xunit
+\!areatloc=\!yunit
+\!dshade=5pt
+\!leaderlength=24in
+\def\!tfs{256} % static
+\def\!wmax{5.3pt} % static
+\def\!wmin{2.7pt} % static
+\!xaxislength=\!xunit
+\!xpivot=\!zpt
+\!yaxislength=\!yunit
+\!ypivot=\!zpt
+\plotsymbolspacing=.4pt
+ \!dimenA=50pt \def\!fiftypt{\the\!dimenA} % static
+
+\def\!rootten{3.162278pt} % static
+\def\!tenAa{8.690286pt} % static (A5)
+\def\!tenAc{2.773839pt} % static (A3)
+\def\!tenAe{2.543275pt} % static (A1)
+
+% Initial values for control sequences
+\def\!cosrotationangle{1} %................R..
+\def\!sinrotationangle{0} %................R..
+\def\!xpivotcoord{0} %................R..
+\def\!xref{0} %............P......
+\def\!xshadesave{0} %.................S.
+\def\!ypivotcoord{0} %................R..
+\def\!yref{0} %............P......
+\def\!yshadesave{0} %.................S.
+\def\!zero{0} %..................T
+
+% Reset TeX to report allocations
+\let\wlog=\!!!wlog
+% *************************************
+% *** AREAS: Deals with plot areas ***
+% *************************************
+%
+% ** User commands
+% ** \setplotarea x from LEFT XCOORD to RIGTH XCOORD, y from BOTTOM YCOORD
+% ** to TOP YCOORD
+% ** \axis BOTTOM-LEFT-TOP-RIGHT [SHIFTEDTO xy=COORD] [VISIBLE-INVISIBLE]
+% ** [LABEL {label}] [TICKS] /
+% ** \visibleaxes
+% ** \invisibleaxes
+% ** \plotheading {HEADING}
+% ** \grid {# of columns} {# of rows}
+% ** \normalgraphs
+
+% ** \normalgraphs
+% ** Sets defaults for graph setup. See Subsection 3.4 of manual.
+\def\normalgraphs{%
+ \longticklength=.4\baselineskip
+ \shortticklength=.25\baselineskip
+ \tickstovaluesleading=.25\baselineskip
+ \valuestolabelleading=.8\baselineskip
+ \linethickness=.4pt
+ \stackleading=.17\baselineskip
+ \headingtoplotskip=1.5\baselineskip
+ \visibleaxes
+ \ticksout
+ \nogridlines
+ \unloggedticks}
+%
+% ** \setplotarea x from LEFT XCOORD to RIGTH XCOORD, y from BOTTOM YCOORD
+% ** to TOP YCOORD
+% ** Reserves space in PICBOX for a rectangular box with the indicated
+% ** coordinates. Must be specified before calls to \axis,
+% ** \grid, \plotheading.
+% ** See Subsection 3.1 of the manual.
+\def\setplotarea x from #1 to #2, y from #3 to #4 {%
+ \!arealloc=\!M{#1}\!xunit \advance \!arealloc -\!xorigin
+ \!areabloc=\!M{#3}\!yunit \advance \!areabloc -\!yorigin
+ \!arearloc=\!M{#2}\!xunit \advance \!arearloc -\!xorigin
+ \!areatloc=\!M{#4}\!yunit \advance \!areatloc -\!yorigin
+ \!initinboundscheck
+ \!xaxislength=\!arearloc \advance\!xaxislength -\!arealloc
+ \!yaxislength=\!areatloc \advance\!yaxislength -\!areabloc
+ \!plotheadingoffset=\!zpt
+ \!dimenput {{\setbox0=\hbox{}\wd0=\!xaxislength\ht0=\!yaxislength\box0}}
+ [bl] (\!arealloc,\!areabloc)}
+%
+% ** \visibleaxes, \invisibleaxes
+% ** Switches for setting visibility of subsequent axes.
+% ** See Subsection 3.2 of the manual.
+\def\visibleaxes{%
+ \def\!axisvisibility{\!axisvisibletrue}}
+\def\invisibleaxes{%
+ \def\!axisvisibility{\!axisvisiblefalse}}
+%
+% ** The next few macros enable the user to fix up an erroneous keyword
+% ** in the \axis command.
+% \newhelp is in ALLOCATIONS
+% \newhelp\!keywordhelp{The keyword mentioned in the error message in unknown.
+% Replace NEW KEYWORD in the indicated response by the keyword that
+% should have been specified.}
+
+\def\!fixkeyword#1{%
+ \errhelp=\!keywordhelp
+ \errmessage{Unrecognized keyword `#1': \the\!keywordtoks{NEW KEYWORD}'}}
+
+% \newtoks\!keywordtoks In ALLOCATIONS.
+\!keywordtoks={enter `i\fixkeyword}
+
+\def\fixkeyword#1{%
+ \!nextkeyword#1 }
+
+% ** \axis BOTTOM-LEFT-TOP-RIGHT [SHIFTEDTO xy=COORD] [VISIBLE-INVISIBLE]
+% ** [LABEL {label}] [TICKS] /
+% ** Exactly one of the keywords BOTTOM, LEFT, TOP, RIGHT must be
+% ** specified. Axis is drawn along the indicated edge of the current
+% ** plot area, shifted if the SHIFTEDTO option is used, visible or
+% ** invisible according the selected option, with an optional LABEL,
+% ** and optional TICKS (see ticks.tex for the options avialabel with
+% ** TICKS). The TICKS option must be the last one specified. The \axis
+% ** MUST be terminated with a / followed by a space.
+% ** See Subsection 3.2 of the manual for more information.
+
+% ** The various options of the \axis command are processed by the
+% ** \!nextkeyword macro defined below. For example,
+% ** `\!nextkeyword shiftedto ' expands to `\!axisshiftedto'.
+\def\axis {%
+ \def\!nextkeyword##1 {%
+ \expandafter\ifx\csname !axis##1\endcsname \relax
+ \def\!next{\!fixkeyword{##1}}%
+ \else
+ \def\!next{\csname !axis##1\endcsname}%
+ \fi
+ \!next}%
+ \!offset=\!zpt
+ \!axisvisibility
+ \!placeaxislabelfalse
+ \!nextkeyword}
+
+% ** This and the various macros that follow handle the keyword
+% ** specifications on the \axis command
+% ** See Subsection 3.2 of the manual.
+\def\!axisbottom{%
+ \!axisylevel=\!areabloc
+ \def\!tickxsign{0}%
+ \def\!tickysign{-}%
+ \def\!axissetup{\!axisxsetup}%
+ \def\!axislabeltbrl{t}%
+ \!nextkeyword}
+
+\def\!axistop{%
+ \!axisylevel=\!areatloc
+ \def\!tickxsign{0}%
+ \def\!tickysign{+}%
+ \def\!axissetup{\!axisxsetup}%
+ \def\!axislabeltbrl{b}%
+ \!nextkeyword}
+
+\def\!axisleft{%
+ \!axisxlevel=\!arealloc
+ \def\!tickxsign{-}%
+ \def\!tickysign{0}%
+ \def\!axissetup{\!axisysetup}%
+ \def\!axislabeltbrl{r}%
+ \!nextkeyword}
+
+\def\!axisright{%
+ \!axisxlevel=\!arearloc
+ \def\!tickxsign{+}%
+ \def\!tickysign{0}%
+ \def\!axissetup{\!axisysetup}%
+ \def\!axislabeltbrl{l}%
+ \!nextkeyword}
+
+\def\!axisshiftedto#1=#2 {%
+ \if 0\!tickxsign
+ \!axisylevel=\!M{#2}\!yunit
+ \advance\!axisylevel -\!yorigin
+ \else
+ \!axisxlevel=\!M{#2}\!xunit
+ \advance\!axisxlevel -\!xorigin
+ \fi
+ \!nextkeyword}
+
+\def\!axisvisible{%
+ \!axisvisibletrue
+ \!nextkeyword}
+
+\def\!axisinvisible{%
+ \!axisvisiblefalse
+ \!nextkeyword}
+
+\def\!axislabel#1 {%
+ \!axisLaBeL={#1}%
+ \!placeaxislabeltrue
+ \!nextkeyword}
+
+\expandafter\def\csname !axis/\endcsname{%
+ \!axissetup % This could done already by "ticks"; if so, now \relax
+ \if!placeaxislabel
+ \!placeaxislabel
+ \fi
+ \if +\!tickysign % ** (A "top" axis)
+ \!dimenA=\!axisylevel
+ \advance\!dimenA \!offset % ** dimA = top of the axis structure
+ \advance\!dimenA -\!areatloc % ** dimA = excess over the plot area
+ \ifdim \!dimenA>\!plotheadingoffset
+ \!plotheadingoffset=\!dimenA % ** Greatest excess over the plot area
+ \fi
+ \fi}
+
+% ** \grid {c} {r}
+% ** Partitions the plot area into c columns and r rows; see Subsection 3.3
+% ** of the manual.
+% ** (Other grid patterns can be drawn with the TICKS option of the \axis
+% ** command.
+\def\grid #1 #2 {%
+ \!countA=#1\advance\!countA 1
+ \axis bottom invisible ticks length <\!zpt> andacross quantity {\!countA} /
+ \!countA=#2\advance\!countA 1
+ \axis left invisible ticks length <\!zpt> andacross quantity {\!countA} / }
+
+% ** \plotheading{HEADING}
+% ** Places HEADING centered above the top of the plotarea (and above
+% ** any top axis ticks marks, tick labels, and axis label); see
+% ** Subsection 3.3 of the manual.
+\def\plotheading#1 {%
+ \advance\!plotheadingoffset \headingtoplotskip
+ \!dimenput {#1} [B] <.5\!xaxislength,\!plotheadingoffset>
+ (\!arealloc,\!areatloc)}
+
+% ** From here on, the routines are internal.
+\def\!axisxsetup{%
+ \!axisxlevel=\!arealloc
+ \!axisstart=\!arealloc
+ \!axisend=\!arearloc
+ \!axisLength=\!xaxislength
+ \!!origin=\!xorigin
+ \!!unit=\!xunit
+ \!xswitchtrue
+ \if!axisvisible
+ \!makeaxis
+ \fi}
+
+\def\!axisysetup{%
+ \!axisylevel=\!areabloc
+ \!axisstart=\!areabloc
+ \!axisend=\!areatloc
+ \!axisLength=\!yaxislength
+ \!!origin=\!yorigin
+ \!!unit=\!yunit
+ \!xswitchfalse
+ \if!axisvisible
+ \!makeaxis
+ \fi}
+
+\def\!makeaxis{%
+ \setbox\!boxA=\hbox{% (Make a pseudo-y[x] tick for an x[y]-axis)
+ \beginpicture
+ \!setdimenmode
+ \setcoordinatesystem point at {\!zpt} {\!zpt}
+ \putrule from {\!zpt} {\!zpt} to
+ {\!tickysign\!tickysign\!axisLength}
+ {\!tickxsign\!tickxsign\!axisLength}
+ \endpicturesave <\!Xsave,\!Ysave>}%
+ \wd\!boxA=\!zpt
+ \!placetick\!axisstart}
+
+\def\!placeaxislabel{%
+ \advance\!offset \valuestolabelleading
+ \if!xswitch
+ \!dimenput {\the\!axisLaBeL} [\!axislabeltbrl]
+ <.5\!axisLength,\!tickysign\!offset> (\!axisxlevel,\!axisylevel)
+ \advance\!offset \!dp % ** advance offset by the "tallness"
+ \advance\!offset \!ht % ** of the label
+ \else
+ \!dimenput {\the\!axisLaBeL} [\!axislabeltbrl]
+ <\!tickxsign\!offset,.5\!axisLength> (\!axisxlevel,\!axisylevel)
+ \fi
+ \!axisLaBeL={}}
+
+
+% *******************************
+% *** ARROWS (Draws arrows) ***
+% *******************************
+%
+% ** User commands
+% ** \arrow <ARROW HEAD LENGTH> [MID FRACTION, BASE FRACTION]
+% ** [<XSHIFT,YSHIFT>] from XFROM YFROM to XTO YTO
+% ** \betweenarrows {TEXT} [orientation & shift] from XFROM YFROM to XTO YTO
+
+% ** \arrow <ARROW HEAD LENGTH> [MID FRACTION, BASE FRACTION]
+% ** [<XSHIFT,YSHIFT>] from XFROM YFROM to XTO YTO
+% ** Draws an arrow from (XFROM,YFROM) to (XTO,YTO). The arrow head
+% ** is constructed two quadratic arcs, which extend back a distance
+% ** ARROW HEAD LENGTH (a dimension) on both sides of the arrow shaft.
+% ** All the way back the arcs are a distance BASE FRACTION*ARROW HEAD
+% ** LENGTH apart, while half-way back they are a distance MID FRACTION*
+% ** ARROW HEAD LENGTH apart. <XSHIFT,YSHIFT> is optional, and has
+% ** its usual interpreation. See Subsection 5.4 of the manual.
+
+\def\arrow <#1> [#2,#3]{%
+ \!ifnextchar<{\!arrow{#1}{#2}{#3}}{\!arrow{#1}{#2}{#3}<\!zpt,\!zpt> }}
+
+\def\!arrow#1#2#3<#4,#5> from #6 #7 to #8 #9 {%
+%
+% ** convert to dimensions
+ \!xloc=\!M{#8}\!xunit
+ \!yloc=\!M{#9}\!yunit
+ \!dxpos=\!xloc \!dimenA=\!M{#6}\!xunit \advance \!dxpos -\!dimenA
+ \!dypos=\!yloc \!dimenA=\!M{#7}\!yunit \advance \!dypos -\!dimenA
+ \let\!MAH=\!M% ** save current c/d mode
+ \!setdimenmode% ** go into dimension mode
+%
+ \!xshift=#4\relax \!yshift=#5\relax% ** pick up shift
+ \!reverserotateonly\!xshift\!yshift% ** back rotate shift
+ \advance\!xshift\!xloc \advance\!yshift\!yloc
+%
+% ** draw shaft of arrow
+ \!xS=-\!dxpos \advance\!xS\!xshift
+ \!yS=-\!dypos \advance\!yS\!yshift
+ \!start (\!xS,\!yS)
+ \!ljoin (\!xshift,\!yshift)
+%
+% ** find 32*cosine and 32*sine of angle of rotation
+ \!Pythag\!dxpos\!dypos\!arclength
+ \!divide\!dxpos\!arclength\!dxpos
+ \!dxpos=32\!dxpos \!removept\!dxpos\!!cos
+ \!divide\!dypos\!arclength\!dypos
+ \!dypos=32\!dypos \!removept\!dypos\!!sin
+%
+% ** construct arrowhead
+ \!halfhead{#1}{#2}{#3}% ** draw half of arrow head
+ \!halfhead{#1}{-#2}{-#3}% ** draw other half
+%
+ \let\!M=\!MAH% ** restore old c/d mode
+ \ignorespaces}
+%
+% ** draw half of arrow head
+ \def\!halfhead#1#2#3{%
+ \!dimenC=-#1%
+ \divide \!dimenC 2 % ** half way back
+ \!dimenD=#2\!dimenC% ** half the mid width
+ \!rotate(\!dimenC,\!dimenD)by(\!!cos,\!!sin)to(\!xM,\!yM)
+ \!dimenC=-#1% ** all the way back
+ \!dimenD=#3\!dimenC
+ \!dimenD=.5\!dimenD% ** half the full width
+ \!rotate(\!dimenC,\!dimenD)by(\!!cos,\!!sin)to(\!xE,\!yE)
+ \!start (\!xshift,\!yshift)
+ \advance\!xM\!xshift \advance\!yM\!yshift
+ \advance\!xE\!xshift \advance\!yE\!yshift
+ \!qjoin (\!xM,\!yM) (\!xE,\!yE)
+ \ignorespaces}
+
+
+% ** \betweenarrows {TEXT} [orientation & shift] from XFROM YFROM to XTO YTO
+% ** Makes things like <--- text --->, using arrow heads from TeX's fonts.
+% ** See Subsection 5.4 of the manual.
+\def\betweenarrows #1#2 from #3 #4 to #5 #6 {%
+ \!xloc=\!M{#3}\!xunit \!xxloc=\!M{#5}\!xunit%
+ \!yloc=\!M{#4}\!yunit \!yyloc=\!M{#6}\!yunit%
+ \!dxpos=\!xxloc \advance\!dxpos by -\!xloc
+ \!dypos=\!yyloc \advance\!dypos by -\!yloc
+ \advance\!xloc .5\!dxpos
+ \advance\!yloc .5\!dypos
+%
+ \let\!MBA=\!M% ** save current coord\dimen mode
+ \!setdimenmode% ** express locations in dimens
+ \ifdim\!dypos=\!zpt
+ \ifdim\!dxpos<\!zpt \!dxpos=-\!dxpos \fi
+ \put {\!lrarrows{\!dxpos}{#1}}#2{} at {\!xloc} {\!yloc}
+ \else
+ \ifdim\!dxpos=\!zpt
+ \ifdim\!dypos<\!zpt \!dypos=-\!zpt \fi
+ \put {\!udarrows{\!dypos}{#1}}#2{} at {\!xloc} {\!yloc}
+ \fi
+ \fi
+ \let\!M=\!MBA% ** restore previous c/d mode
+ \ignorespaces}
+
+% ** Subroutine for left-right between arrows
+\def\!lrarrows#1#2{% #1=width, #2=text
+ {\setbox\!boxA=\hbox{$\mkern-2mu\mathord-\mkern-2mu$}%
+ \setbox\!boxB=\hbox{$\leftarrow$}\!dimenE=\ht\!boxB
+ \setbox\!boxB=\hbox{}\ht\!boxB=2\!dimenE
+ \hbox to #1{$\mathord\leftarrow\mkern-6mu
+ \cleaders\copy\!boxA\hfil
+ \mkern-6mu\mathord-$%
+ \kern.4em $\vcenter{\box\!boxB}$$\vcenter{\hbox{#2}}$\kern.4em
+ $\mathord-\mkern-6mu
+ \cleaders\copy\!boxA\hfil
+ \mkern-6mu\mathord\rightarrow$}}}
+
+% ** Subroutine for up-down between arrows
+\def\!udarrows#1#2{% #1=width, #2=text
+ {\setbox\!boxB=\hbox{#2}%
+ \setbox\!boxA=\hbox to \wd\!boxB{\hss$\vert$\hss}%
+ \!dimenE=\ht\!boxA \advance\!dimenE \dp\!boxA \divide\!dimenE 2
+ \vbox to #1{\offinterlineskip
+ \vskip .05556\!dimenE
+ \hbox to \wd\!boxB{\hss$\mkern.4mu\uparrow$\hss}\vskip-\!dimenE
+ \cleaders\copy\!boxA\vfil
+ \vskip-\!dimenE\copy\!boxA
+ \vskip\!dimenE\copy\!boxB\vskip.4em
+ \copy\!boxA\vskip-\!dimenE
+ \cleaders\copy\!boxA\vfil
+ \vskip-\!dimenE \hbox to \wd\!boxB{\hss$\mkern.4mu\downarrow$\hss}
+ \vskip .05556\!dimenE}}}
+
+
+% ***************************
+% *** BARS (Draws bars) ***
+% ***************************
+%
+% ** User commands:
+% ** \putbar [<XSHIFT,YSHIFT>] breadth <BREADTH> from XSTART YSTART
+% ** to XEND YEND
+% ** \setbars [<XSHIFT,YSHIFT>] breadth <BREADTH> baseline at XY = COORD
+% ** [baselabels ([B_ORIENTATION_x,B_ORIENTATION_y] <B_XSHIFT,B_YSHIFT>)]
+% ** [endlabels ([E_ORIENTATION_x,E_ORIENTATION_y] <E_XSHIFT,E_YSHIFT>)]
+
+
+% ** \putbar [<XSHIFT,YSHIFT>] breadth <BREADTH> from XSTART YSTART
+% ** to XEND YEND
+% ** Either XSTART=XEND or YSTART=YEND. Draws a rectangle between
+% ** (XSTART,YSTART) & (XEND,YEND). The "depth" of the rectangle
+% ** is determined by those two plot positions; its other
+% ** dimension "breadth" is specified by the dimension BREADTH.
+% ** See Subsection 4.2 of the manual.
+\def\putbar#1breadth <#2> from #3 #4 to #5 #6 {%
+ \!xloc=\!M{#3}\!xunit \!xxloc=\!M{#5}\!xunit%
+ \!yloc=\!M{#4}\!yunit \!yyloc=\!M{#6}\!yunit%
+ \!dypos=\!yyloc \advance\!dypos by -\!yloc
+ \!dimenI=#2
+%
+ \ifdim \!dimenI=\!zpt % ** If 0 breadth
+ \putrule#1from {#3} {#4} to {#5} {#6} % ** Then draw line
+ \else % ** Else, put in a rectangle
+ \let\!MBar=\!M% ** save current c/d mode
+ \!setdimenmode % ** go into dimension mode
+ \divide\!dimenI 2
+ \ifdim \!dypos=\!zpt
+ \advance \!yloc -\!dimenI % ** Equal y coordinates
+ \advance \!yyloc \!dimenI
+ \else
+ \advance \!xloc -\!dimenI % ** Equal x coordinates
+ \advance \!xxloc \!dimenI
+ \fi
+ \putrectangle#1corners at {\!xloc} {\!yloc} and {\!xxloc} {\!yyloc}
+ \let\!M=\!MBar % ** restore c/d mode
+ \fi
+ \ignorespaces}
+
+
+% ** \setbars [<XSHIFT,YSHIFT>] breadth <BREADTH> baseline at XY = COORD
+% ** [baselabels ([B_ORIENTATION_x,B_ORIENTATION_y] <B_XSHIFT,B_YSHIFT>)]
+% ** [endlabels ([E_ORIENTATION_x,E_ORIENTATION_y] <E_XSHIFT,E_YSHIFT>)]
+% ** This command puts PiCTeX into the bar graph drawing mode described
+% ** in Subsection 4.4 of the manual.
+\def\setbars#1breadth <#2> baseline at #3 = #4 {%
+ \edef\!barshift{#1}%
+ \edef\!barbreadth{#2}%
+ \edef\!barorientation{#3}%
+ \edef\!barbaseline{#4}%
+ \def\!bardobaselabel{\!bardoendlabel}%
+ \def\!bardoendlabel{\!barfinish}%
+ \let\!drawcurve=\!barcurve
+ \!setbars}
+\def\!setbars{%
+ \futurelet\!nextchar\!!setbars}
+\def\!!setbars{%
+ \if b\!nextchar
+ \def\!!!setbars{\!setbarsbget}%
+ \else
+ \if e\!nextchar
+ \def\!!!setbars{\!setbarseget}%
+ \else
+ \def\!!!setbars{\relax}%
+ \fi
+ \fi
+ \!!!setbars}
+\def\!setbarsbget baselabels (#1) {%
+ \def\!barbaselabelorientation{#1}%
+ \def\!bardobaselabel{\!!bardobaselabel}%
+ \!setbars}
+\def\!setbarseget endlabels (#1) {%
+ \edef\!barendlabelorientation{#1}%
+ \def\!bardoendlabel{\!!bardoendlabel}%
+ \!setbars}
+
+% ** \!barcurve
+% ** Draws a bargraph with preset values of barshift, barbreadth,
+% ** barorientation (x or y) and barbaseline (coordinate)
+\def\!barcurve #1 #2 {%
+ \if y\!barorientation
+ \def\!basexarg{#1}%
+ \def\!baseyarg{\!barbaseline}%
+ \else
+ \def\!basexarg{\!barbaseline}%
+ \def\!baseyarg{#2}%
+ \fi
+ \expandafter\putbar\!barshift breadth <\!barbreadth> from {\!basexarg}
+ {\!baseyarg} to {#1} {#2}
+ \def\!endxarg{#1}%
+ \def\!endyarg{#2}%
+ \!bardobaselabel}
+
+\def\!!bardobaselabel "#1" {%
+ \put {#1}\!barbaselabelorientation{} at {\!basexarg} {\!baseyarg}
+ \!bardoendlabel}
+
+\def\!!bardoendlabel "#1" {%
+ \put {#1}\!barendlabelorientation{} at {\!endxarg} {\!endyarg}
+ \!barfinish}
+
+\def\!barfinish{%
+ \!ifnextchar/{\!finish}{\!barcurve}}
+
+
+% ********************************
+% *** BOXES (Draws rectangles) ***
+% ********************************
+%
+% ** User commands:
+% ** \putrectangle [<XSHIFT,YSHIFT>] corners at XCOORD1 YCOORD1
+% ** and XCOORD2 YCOORD2
+% ** \shaderectangleson
+% ** \shaderectanglesoff
+% ** \frame [<SEPARATION>] {TEXT}
+% ** \rectangle <WIDTH> <HEIGHT>
+%
+%
+% ** \putrectangle [<XSHIFT,YSHIFT>] corners at XCOORD1 YCOORD1
+% ** and XCOORD2 YCOORD2
+% ** Draws a rectangle with corners at (X1,Y1), (X2,Y1), (X1,Y2), (X2,Y2)
+% ** Lines have thickness \linethickness, and overlap at the corners.
+% ** The optional field <XSHIFT,YSHIFT> functions as with a \put command.
+% ** See Subsection 4.2 of the manual.
+\def\putrectangle{%
+ \!ifnextchar<{\!putrectangle}{\!putrectangle<\!zpt,\!zpt> }}
+\def\!putrectangle<#1,#2> corners at #3 #4 and #5 #6 {%
+%
+% ** get locations
+ \!xone=\!M{#3}\!xunit \!xtwo=\!M{#5}\!xunit%
+ \!yone=\!M{#4}\!yunit \!ytwo=\!M{#6}\!yunit%
+ \ifdim \!xtwo<\!xone
+ \!dimenI=\!xone \!xone=\!xtwo \!xtwo=\!dimenI
+ \fi
+ \ifdim \!ytwo<\!yone
+ \!dimenI=\!yone \!yone=\!ytwo \!ytwo=\!dimenI
+ \fi
+ \!dimenI=#1\relax \advance\!xone\!dimenI \advance\!xtwo\!dimenI
+ \!dimenI=#2\relax \advance\!yone\!dimenI \advance\!ytwo\!dimenI
+ \let\!MRect=\!M% ** save current coord/dimen mode
+ \!setdimenmode
+%
+% ** shade rectangle if appropriate
+ \!shaderectangle
+%
+% ** draw horizontal edges
+ \!dimenI=.5\linethickness
+ \advance \!xone -\!dimenI% ** adjust x-location to overlap corners
+ \advance \!xtwo \!dimenI% ** ditto
+ \putrule from {\!xone} {\!yone} to {\!xtwo} {\!yone}
+ \putrule from {\!xone} {\!ytwo} to {\!xtwo} {\!ytwo}
+%
+% ** draw vertical edges
+ \advance \!xone \!dimenI% ** restore original x-values
+ \advance \!xtwo -\!dimenI%
+ \advance \!yone -\!dimenI% ** adjust y-location to overlap corners
+ \advance \!ytwo \!dimenI% ** ditto
+ \putrule from {\!xone} {\!yone} to {\!xone} {\!ytwo}
+ \putrule from {\!xtwo} {\!yone} to {\!xtwo} {\!ytwo}
+%
+ \let\!M=\!MRect% ** restore coord/dimen mode
+ \ignorespaces}
+
+% ** \shaderectangleson
+% ** Subsequent rectangles will be shaded according to
+% ** the current shading pattern. Affects \putrectangle, \putbar,
+% ** \frame, \sethistograms, and \setbars. See Subsection 7.5 of the manual.
+\def\shaderectangleson{%
+ \def\!shaderectangle{\!!shaderectangle}%
+ \ignorespaces}
+% ** \shaderectanglesoff
+% ** Suppresses \shaderectangleson. The default.
+\def\shaderectanglesoff{%
+ \def\!shaderectangle{}%
+ \ignorespaces}
+
+\shaderectanglesoff
+
+% ** The following internal routine shades the current rectangle, when
+% ** \!shaderectangle = \!!shaderectangle .
+\def\!!shaderectangle{%
+ \!dimenA=\!xtwo \advance \!dimenA -\!xone
+ \!dimenB=\!ytwo \advance \!dimenB -\!yone
+ \ifdim \!dimenA<\!dimenB
+ \!startvshade (\!xone,\!yone,\!ytwo)
+ \!lshade (\!xtwo,\!yone,\!ytwo)
+ \else
+ \!starthshade (\!yone,\!xone,\!xtwo)
+ \!lshade (\!ytwo,\!xone,\!xtwo)
+ \fi
+ \ignorespaces}
+
+% ** \frame [<SEPARATION>] {TEXT}
+% ** Draws a frame of thickness linethickness about the box enclosing
+% ** TEXT; the frame is separated from the box by a distance of
+% ** SEPARATION. The result is an hbox with the same baseline as TEXT.
+% ** If <SEPARATION> is omitted, you get the effect of <0pt>.
+% ** See Subsection 4.2 of the manual.
+\def\frame{%
+ \!ifnextchar<{\!frame}{\!frame<\!zpt> }}
+\long\def\!frame<#1> #2{%
+ \beginpicture
+ \setcoordinatesystem units <1pt,1pt> point at 0 0
+ \put {#2} [Bl] at 0 0
+ \!dimenA=#1\relax
+ \!dimenB=\!wd \advance \!dimenB \!dimenA
+ \!dimenC=\!ht \advance \!dimenC \!dimenA
+ \!dimenD=\!dp \advance \!dimenD \!dimenA
+ \let\!MFr=\!M
+ \!setdimenmode
+ \putrectangle corners at {-\!dimenA} {-\!dimenD} and {\!dimenB} {\!dimenC}
+ \!setcoordmode
+ \let\!M=\!MFr
+ \endpicture
+ \ignorespaces}
+
+% ** \rectangle <WIDTH> <HEIGHT>
+% ** Constructs a rectangle of width WIDTH and heigth HEIGHT.
+% ** See Subsection 4.2 of the manual.
+\def\rectangle <#1> <#2> {%
+ \setbox0=\hbox{}\wd0=#1\ht0=#2\frame {\box0}}
+
+
+% *********************************************
+% *** CURVES (Upper level \plot commands) ***
+% *********************************************
+%
+% ** User commands
+% ** \plot DATA /
+% ** \plot "FILE NAME"
+% ** \setquadratic
+% ** \setlinear
+% ** \sethistograms
+% ** \vshade ...
+% ** \hshade ...
+
+% \plot: multi-purpose command. Draws histograms, bar graphs, piecewise-linear
+% or piecewise quadratic curves, depending on the setting of \!drawcurve.
+% See Subsections 4.3-4.5, 5.1, 5.2 of the manual.
+\def\plot{%
+ \!ifnextchar"{\!plotfromfile}{\!drawcurve}}
+\def\!plotfromfile"#1"{%
+ \expandafter\!drawcurve \input #1 /}
+
+% Command to set piecewise quadratic mode
+% See Subsections 5.1, 7.3, and 7.4 of the manual.
+\def\setquadratic{%
+ \let\!drawcurve=\!qcurve
+ \let\!!Shade=\!!qShade
+ \let\!!!Shade=\!!!qShade}
+
+% Command to set piecewise linear mode
+% See Subsections 5.1, 7.3, and 7.4 of the manual.
+\def\setlinear{%
+ \let\!drawcurve=\!lcurve
+ \let\!!Shade=\!!lShade
+ \let\!!!Shade=\!!!lShade}
+
+% Command to set histogram mode
+% See Subsection 4.3 of the manual.
+\def\sethistograms{%
+ \let\!drawcurve=\!hcurve}
+
+% Commands to cycle through list of coordinates in piecewise quadratic
+% interpolation mode
+\def\!qcurve #1 #2 {%
+ \!start (#1,#2)
+ \!Qjoin}
+\def\!Qjoin#1 #2 #3 #4 {%
+ \!qjoin (#1,#2) (#3,#4) % \!qjoin is defined in QUADRATIC
+ \!ifnextchar/{\!finish}{\!Qjoin}}
+
+% Commands to cycle through list of coordinates in piecewise linear
+% interpolation mode
+\def\!lcurve #1 #2 {%
+ \!start (#1,#2)
+ \!Ljoin}
+\def\!Ljoin#1 #2 {%
+ \!ljoin (#1,#2) % \!ljoin is defined in LINEAR
+ \!ifnextchar/{\!finish}{\!Ljoin}}
+
+\def\!finish/{\ignorespaces}
+
+% Command to cycle through list of coordinates in histogram mode
+\def\!hcurve #1 #2 {%
+ \edef\!hxS{#1}%
+ \edef\!hyS{#2}%
+ \!hjoin}
+\def\!hjoin#1 #2 {%
+ \putrectangle corners at {\!hxS} {\!hyS} and {#1} {#2}
+ \edef\!hxS{#1}%
+ \!ifnextchar/{\!finish}{\!hjoin}}
+
+
+% \vshade: See Subsection 7.3 of the manual.
+\def\vshade #1 #2 #3 {%
+ \!startvshade (#1,#2,#3)
+ \!Shadewhat}
+
+% \hshade: See Subsection 7.4 of the manual.
+\def\hshade #1 #2 #3 {%
+ \!starthshade (#1,#2,#3)
+ \!Shadewhat}
+
+% Commands to cycle through coordinates and optional "edge effect"
+% fields while shading.
+\def\!Shadewhat{%
+ \futurelet\!nextchar\!Shade}
+\def\!Shade{%
+ \if <\!nextchar
+ \def\!nextShade{\!!Shade}%
+ \else
+ \if /\!nextchar
+ \def\!nextShade{\!finish}%
+ \else
+ \def\!nextShade{\!!!Shade}%
+ \fi
+ \fi
+ \!nextShade}
+\def\!!lShade<#1> #2 #3 #4 {%
+ \!lshade <#1> (#2,#3,#4) % \!lshade is defined in SHADING
+ \!Shadewhat}
+\def\!!!lShade#1 #2 #3 {%
+ \!lshade (#1,#2,#3)
+ \!Shadewhat}
+\def\!!qShade<#1> #2 #3 #4 #5 #6 #7 {%
+ \!qshade <#1> (#2,#3,#4) (#5,#6,#7) % \!qshade is defined in SHADING
+ \!Shadewhat}
+\def\!!!qShade#1 #2 #3 #4 #5 #6 {%
+ \!qshade (#1,#2,#3) (#4,#5,#6)
+ \!Shadewhat}
+
+% ** Set default interpolation mode
+\setlinear
+
+
+% ********************************************
+% *** DASHPATTERNS (Sets up dash patterns) ***
+% ********************************************
+
+% ** User commands:
+% ** \setdashpattern <DIMEN1,DIMEN2,DIMEN3,...>
+% ** \setdots <INTRADOT_DISTANCE>
+% ** \setdotsnear <INTRADOT_DISTANCE> for <ARC LENGTH>
+% ** \setdashes <DASH/SKIP_DISTANCE>
+% ** \setdashesnear <DASH/SKIP_DISTANCE> for <ARC LENGTH>
+% ** \setsolid
+% ** \findlength {CURVE CMDS}
+
+% ** Internal commands:
+% ** \!dashingon
+% ** \!dashingoff
+
+% ** Dash patterns are specified by a balanced token list whose complete
+% ** expansion has the form: DIMEN1,DIMEN2,DIMEN3,DIMEN4,... ; this produces
+% ** an arc of length DIMEN1, a skip of length DIMEN2, an arc of length
+% ** DIMEN3, a skip of length DIMEN4, ... . Any number of DIMEN values may
+% ** be given. The pattern is repeated as many times (perhaps fractional)
+% ** as necessary to draw the curve.
+% ** A dash pattern remains in effect until it is overridden by a call to
+% ** \setdashpattern, or to \setdots, \setdotsnear ... , \setdashes,
+% ** \setdashesnear ... , or \setsolid.
+% ** Solid lines are the default.
+
+
+% ** \def\setdashpattern <DIMEN1,DIMEN2,DIMEN3,...>
+% ** The following routine converts a balanced list of tokens whose
+% ** complete expansion has the form DIMEN1,DIMEN2, ... , DIMENk into
+% ** three list macros that are used in drawing dashed rules and curves:
+% ** !Flist: \!Rule{DIMEN1}\!Skip{DIMEN2}\!Rule{DIMEN3}\!Skip{DIMEN4} ...
+% ** !Blist: ...\!Skip{DIMEN4}\!Rule{DIMEN3}\!Skip{DIMEN2}\!Rule{DIMEN1}
+% ** !UDlist: \\{DIMEN1}\\{DIMEN2}\\{DIMEN3}\\{DIMEN4} ...;
+% ** calculates \!leaderlength := DIMEN1 + ... + DIMENk; and
+% ** sets the curve drawing routines to dash mode.
+% ** Those lists are used by the curve drawing routines.
+% ** Dimenj ... may be given as an explicit dimension (e.g., 5pt), or
+% ** as an expression involving a dimension register (e.g., -2.5\dimen0).
+% ** See Subsection 6.2 of the manual
+\def\setdashpattern <#1>{%
+ \def\!Flist{}\def\!Blist{}\def\!UDlist{}%
+ \!countA=0
+ \!ecfor\!item:=#1\do{%
+ \!dimenA=\!item\relax
+ \expandafter\!rightappend\the\!dimenA\withCS{\\}\to\!UDlist%
+ \advance\!countA 1
+ \ifodd\!countA
+ \expandafter\!rightappend\the\!dimenA\withCS{\!Rule}\to\!Flist%
+ \expandafter\!leftappend\the\!dimenA\withCS{\!Rule}\to\!Blist%
+ \else
+ \expandafter\!rightappend\the\!dimenA\withCS{\!Skip}\to\!Flist%
+ \expandafter\!leftappend\the\!dimenA\withCS{\!Skip}\to\!Blist%
+ \fi}%
+ \!leaderlength=\!zpt
+ \def\!Rule##1{\advance\!leaderlength ##1}%
+ \def\!Skip##1{\advance\!leaderlength ##1}%
+ \!Flist%
+ \ifdim\!leaderlength>\!zpt
+ \else
+ \def\!Flist{\!Skip{24in}}\def\!Blist{\!Skip{24in}}\ignorespaces
+ \def\!UDlist{\\{\!zpt}\\{24in}}\ignorespaces
+ \!leaderlength=24in
+ \fi
+ \!dashingon}
+
+
+% ** \!dashingon -- puts the curve drawing routines into dash mode
+% ** \!dashingoff -- puts the curve drawing routines into solid mode
+% ** These are internal commands, invoked by \setdashpattern and \setsolid
+\def\!dashingon{%
+ \def\!advancedashing{\!!advancedashing}%
+ \def\!drawlinearsegment{\!lineardashed}%
+ \def\!puthline{\!putdashedhline}%
+ \def\!putvline{\!putdashedvline}%
+% \def\!putsline{\!putdashedsline}%
+ \ignorespaces}%
+\def\!dashingoff{%
+ \def\!advancedashing{\relax}%
+ \def\!drawlinearsegment{\!linearsolid}%
+ \def\!puthline{\!putsolidhline}%
+ \def\!putvline{\!putsolidvline}%
+% \def\!putsline{\!putsolidsline}%
+ \ignorespaces}
+
+
+% ** \setdots <LENGTH> -- sets up a dot/skip pattern where dot (actually
+% ** the current plotsymbol) is plunked down once for every LENGTH
+% ** traveled along the curve. LENGTH defaults to 5pt.
+% ** See Subsection 6.1 of the manual.
+\def\setdots{%
+ \!ifnextchar<{\!setdots}{\!setdots<5pt>}}
+\def\!setdots<#1>{%
+ \!dimenB=#1\advance\!dimenB -\plotsymbolspacing
+ \ifdim\!dimenB<\!zpt
+ \!dimenB=\!zpt
+ \fi
+\setdashpattern <\plotsymbolspacing,\!dimenB>}
+
+% ** \setdotsnear <LENGTH> for <ARC LENGTH>
+% ** sets up a dot pattern where the dots are approximately LENGTH apart,
+% ** the total length of the pattern is ARC LENGTH, and the pattern
+% ** begins and ends with a dot. See Subsection 6.3 of the manual.
+\def\setdotsnear <#1> for <#2>{%
+ \!dimenB=#2\relax \advance\!dimenB -.05pt
+ \!dimenC=#1\relax \!countA=\!dimenC
+ \!dimenD=\!dimenB \advance\!dimenD .5\!dimenC \!countB=\!dimenD
+ \divide \!countB \!countA
+ \ifnum 1>\!countB
+ \!countB=1
+ \fi
+ \divide\!dimenB \!countB
+ \setdots <\!dimenB>}
+
+% ** \setdashes <LENGTH> -- sets up a dash/skip pattern where the dash
+% ** and the skip are each of length LENGTH (the dash is formed by
+% ** plunking down the current plotsymbol over an arc of length LENGTH
+% ** and so may actually be longer than LENGTH. LENGTH defaults to 5pt.
+% ** See Subsection 6.1 of the manual.
+\def\setdashes{%
+ \!ifnextchar<{\!setdashes}{\!setdashes<5pt>}}
+\def\!setdashes<#1>{\setdashpattern <#1,#1>}
+
+% ** \setdashesnear ...
+% ** Like \setdotsnear; the pattern begins and ends with a dash.
+% ** See Subsection 6.3 of the manual.
+\def\setdashesnear <#1> for <#2>{%
+ \!dimenB=#2\relax
+ \!dimenC=#1\relax \!countA=\!dimenC
+ \!dimenD=\!dimenB \advance\!dimenD .5\!dimenC \!countB=\!dimenD
+ \divide \!countB \!countA
+ \ifodd \!countB
+ \else
+ \advance \!countB 1
+ \fi
+ \divide\!dimenB \!countB
+ \setdashes <\!dimenB>}
+
+% ** \setsolid -- puts the curve drawing routines in "solid line" mode,
+% ** the default mode. See Subsection 6.1 of the manual.
+\def\setsolid{%
+ \def\!Flist{\!Rule{24in}}\def\!Blist{\!Rule{24in}}%
+ \def\!UDlist{\\{24in}\\{\!zpt}}%
+ \!dashingoff}
+\setsolid
+
+% ** \findlength {CURVE CMDS}
+% ** PiCTeX executes the \start, \ljoin, and \qjoin cmds comprising
+% ** CURVE CMDS without plotting anything, but stashes the length
+% ** of the phantom curve away in \totalarclength.
+% ** See Subsection 6.3 of the manual.
+\def\findlength#1{%
+ \begingroup
+ \setdashpattern <0pt, \maxdimen>
+ \setplotsymbol ({})
+ \dontsavelinesandcurves
+ #1%
+ \endgroup
+ \ignorespaces}
+
+
+% *************************************************************
+% *** DIVISION (Does long division of dimension registers) ***
+% *************************************************************
+
+% ** User command:
+% ** \Divide {DIVIDEND} by {DIVISOR} forming {RESULT}
+
+% ** Internal command
+% ** \!divide{DIVIDEND}{DIVISOR}{RESULT}
+
+% ** \!divide DIVIDEND [by] DIVISOR [to get] ANSWER
+% ** Divides the dimension DIVIDEND by the dimension DIVISOR, placing the
+% ** quotient in the dimension register ANSWER. Values are understood to
+% ** be in points. E.g. 12.5pt/1.4pt=8.92857pt.
+% ** Quotient is accurate to 1/65536pt=2**[-16]pt
+% ** |DIVISOR| should be < 2048pt (about 28 inches).
+\def\!divide#1#2#3{%
+ \!dimenB=#1% ** dimB holds current remainder (r)
+ \!dimenC=#2% ** dimC holds divisor (d)
+ \!dimenD=\!dimenB% ** dimD holds quotient q=r/d for this
+ \divide \!dimenD \!dimenC% ** step, in units of scaled pts
+ \!dimenA=\!dimenD% ** dimA eventually holds answer (a)
+ \multiply\!dimenD \!dimenC% ** r <-- r - dq
+ \advance\!dimenB -\!dimenD% ** First step complete. Have integer part
+% ** of a, and corresponding remainder.
+ \!dimenD=\!dimenC% ** Temporarily use dimD to hold |d|
+ \ifdim\!dimenD<\!zpt \!dimenD=-\!dimenD
+ \fi
+ \ifdim\!dimenD<64pt% ** Branch on the magnitude of |d|
+ \!divstep[\!tfs]\!divstep[\!tfs]%
+ \else
+ \!!divide
+ \fi
+ #3=\!dimenA\ignorespaces}
+
+% ** The following code handles divisors d with
+% ** (1) .88in = 64pt <= d < 256pt = 3.54in
+% ** (2) 3.54in = 256pt <= d < 2048pt = 28.34in
+% ** Anything bigger than that may result in an overflow condition.
+% ** For our purposes, we should never even see case (2).
+\def\!!divide{%
+ \ifdim\!dimenD<256pt
+ \!divstep[64]\!divstep[32]\!divstep[32]%
+ \else
+ \!divstep[8]\!divstep[8]\!divstep[8]\!divstep[8]\!divstep[8]%
+ \!dimenA=2\!dimenA
+ \fi}
+
+
+% ** The following macro does the real long division work.
+\def\!divstep[#1]{% ** #1 = "B"
+ \!dimenB=#1\!dimenB% ** r <-- B*r
+ \!dimenD=\!dimenB% ** dimD holds quotient q=r/d for this
+ \divide \!dimenD by \!dimenC% ** step, in units of scaled pts
+ \!dimenA=#1\!dimenA% ** a <-- B*a + q
+ \advance\!dimenA by \!dimenD%
+ \multiply\!dimenD by \!dimenC% ** r <-- r - dq
+ \advance\!dimenB by -\!dimenD}
+
+% ** \Divide: See Subsection 9.3 of the manual.
+\def\Divide <#1> by <#2> forming <#3> {%
+ \!divide{#1}{#2}{#3}}
+
+
+% *********************************************
+% *** ELLIPSES (Draws ellipses and circles) ***
+% *********************************************
+
+% ** User commands
+% ** \ellipticalarc axes ratio A:B DEGREES degrees from XSTART YSTART
+% ** center at XCENTER YCENTER
+% ** \circulararc DEGREES degrees from XSTART YSTART
+% ** center at XCENTER YCENTER
+
+% ** Internal command
+% ** \!sinandcos{32*ANGLE in radians}{32*SIN}{32*COS}
+
+
+% ** \ellipticalarc axes ratio A:B DEGREES degrees from XSTART YSTART
+% ** center at XCENTER YCENTER
+% ** Draws a elliptical arc starting at the coordinate point (XSTART,YSTART).
+% ** The center of the ellipse of which the arc is a segment is at
+% ** (XCENTER,YCENTER).
+% ** The arc extends through an angle of DEGREES degrees (may be + or -).
+% ** A:B is the ratio of the length of the xaxis to the length of
+% ** the yaxis of the ellipse
+% ** Sqrt{[(XSTART-XCENTER)/A]**2 + [(YSTART-YCENTER)/B]**2}
+% ** must be < 512pt (about 7in).
+% ** Doesn't modify the dimensions (ht, dp, wd) of the PiCture under
+% ** construction.
+
+% ** \circulararc -- See Subsection 5.3 of the manual.
+\def\circulararc{%
+ \ellipticalarc axes ratio 1:1 }
+
+% ** \ellipticalarc -- See Subsection 5.3 of the manual.
+\def\ellipticalarc axes ratio #1:#2 #3 degrees from #4 #5 center at #6 #7 {%
+ \!angle=#3pt\relax% ** get angle
+ \ifdim\!angle>\!zpt
+ \def\!sign{}% ** counterclockwise
+ \else
+ \def\!sign{-}\!angle=-\!angle% ** clockwise
+ \fi
+ \!xxloc=\!M{#6}\!xunit% ** convert CENTER to dimension
+ \!yyloc=\!M{#7}\!yunit
+ \!xxS=\!M{#4}\!xunit% ** get STARTing point on rim of ellipse
+ \!yyS=\!M{#5}\!yunit
+ \advance\!xxS -\!xxloc% ** make center of ellipse (0,0)
+ \advance\!yyS -\!yyloc
+ \!divide\!xxS{#1pt}\!xxS % ** scale point on ellipse to point on
+ \!divide\!yyS{#2pt}\!yyS % corresponding circle
+%
+ \let\!MC=\!M% ** save current c/d mode
+ \!setdimenmode% ** go into dimension mode
+%
+ \!xS=#1\!xxS \advance\!xS\!xxloc
+ \!yS=#2\!yyS \advance\!yS\!yyloc
+ \!start (\!xS,\!yS)%
+ \!loop\ifdim\!angle>14.9999pt% ** draw in major portion of ellipse
+ \!rotate(\!xxS,\!yyS)by(\!cos,\!sign\!sin)to(\!xxM,\!yyM)
+ \!rotate(\!xxM,\!yyM)by(\!cos,\!sign\!sin)to(\!xxE,\!yyE)
+ \!xM=#1\!xxM \advance\!xM\!xxloc \!yM=#2\!yyM \advance\!yM\!yyloc
+ \!xE=#1\!xxE \advance\!xE\!xxloc \!yE=#2\!yyE \advance\!yE\!yyloc
+ \!qjoin (\!xM,\!yM) (\!xE,\!yE)
+ \!xxS=\!xxE \!yyS=\!yyE
+ \advance \!angle -15pt
+ \repeat
+ \ifdim\!angle>\!zpt% ** complete remaining arc, if any
+ \!angle=100.53096\!angle% ** convert angle to radians, divide
+ \divide \!angle 360 % ** by 2, and multiply by 32
+ \!sinandcos\!angle\!!sin\!!cos% ** get 32*sin & 32*cos
+ \!rotate(\!xxS,\!yyS)by(\!!cos,\!sign\!!sin)to(\!xxM,\!yyM)
+ \!rotate(\!xxM,\!yyM)by(\!!cos,\!sign\!!sin)to(\!xxE,\!yyE)
+ \!xM=#1\!xxM \advance\!xM\!xxloc \!yM=#2\!yyM \advance\!yM\!yyloc
+ \!xE=#1\!xxE \advance\!xE\!xxloc \!yE=#2\!yyE \advance\!yE\!yyloc
+ \!qjoin (\!xM,\!yM) (\!xE,\!yE)
+ \fi
+%
+ \let\!M=\!MC% ** restore c/d mode
+ \ignorespaces}% ** if appropriate
+
+
+% ** \!rotate(XREG,YREG)by(32cos,32sin)to(XXREG,YYREG)
+% ** rotates (XREG,YREG) by angle with specfied scaled cos & sin to
+% ** (XXREG,YYREG). Uses \!dimenA & \!dimenB as scratch registers.
+\def\!rotate(#1,#2)by(#3,#4)to(#5,#6){%
+ \!dimenA=#3#1\advance \!dimenA -#4#2% ** Rcos(x+t)=Rcosx*cost - Rsinx*sint
+ \!dimenB=#3#2\advance \!dimenB #4#1% ** Rsin(x+t)=Rsinx*cost + Rcosx*sint
+ \divide \!dimenA 32 \divide \!dimenB 32
+ #5=\!dimenA #6=\!dimenB
+ \ignorespaces}
+\def\!sin{4.17684}% ** 32*sin(pi/24) (pi/24=7.5deg)
+\def\!cos{31.72624}% ** 32*cos(pi/24)
+
+
+% ** \!sinandcos{32*ANGLE in radians}{\SINCS}{\COSCS}
+% ** Computes the 32*sine and 32*cosine of a small ANGLE expressed in
+% ** radians/32 and puts these values in the replacement texts of
+% ** \SINCS and \COSCS
+\def\!sinandcos#1#2#3{%
+ \!dimenD=#1% ** angle is expressed in radians/32: 1pt = 1/32rad
+ \!dimenA=\!dimenD% ** dimA will eventually contain 32sin(angle)in pts
+ \!dimenB=32pt% ** dimB will eventually contain 32cos(angle)in pts
+ \!removept\!dimenD\!value% ** get value of 32*angle, without "pt"
+ \!dimenC=\!dimenD% ** holds 32*angle**i/i! in pts
+ \!dimenC=\!value\!dimenC \divide\!dimenC by 64 % ** now 32*angle**2/2
+ \advance\!dimenB by -\!dimenC% ** 32-32*angle**2/2
+ \!dimenC=\!value\!dimenC \divide\!dimenC by 96 % ** now 32*angle**3/3!
+ \advance\!dimenA by -\!dimenC% ** now 32*(angle-angle**3/6)
+ \!dimenC=\!value\!dimenC \divide\!dimenC by 128 % ** now 32*angle**4/4!
+ \advance\!dimenB by \!dimenC%
+ \!removept\!dimenA#2% ** set 32*sin(angle)
+ \!removept\!dimenB#3% ** set 32*cos(angle)
+ \ignorespaces}
+
+
+% *****************************************************************
+% *** RULES (Draws rules, i.e., horizontal & vertical lines) ***
+% *****************************************************************
+
+% ** User command:
+% ** \putrule [<XDIMEN,YDIMEN>] from XCOORD1 YCOORD1
+% ** to XCOORD2 YCOORD2
+
+% ** Internal commands:
+% ** \!puthline [<XDIMEN,YDIMEN>] (h = horizontal)
+% ** Set by dashpat to either: \!putsolidhline or \!putdashedhline
+% ** \!putvline [<XDIMEN,YDIMEN>] (v = vertical)
+% ** Either: \!putsolidvline or \!putdashedvline
+
+
+% ** \putrule [<XDIMEN,YDIMEN>] from XCOORD1 YCOORD1
+% ** to XCOORD2 YCOORD2
+% ** Draws a rule -- dashed or solid depending on the current dash pattern --
+% ** from (X1,Y1) to (X2,Y2). Uses TEK's \hrule & \vrule & \leaders
+% ** constructions to handle horizontal & vertical lines efficiently both
+% ** in terms of execution time and space in the DVI file.
+% ** See Subsection 4.1 of the manual.
+\def\putrule#1from #2 #3 to #4 #5 {%
+ \!xloc=\!M{#2}\!xunit \!xxloc=\!M{#4}\!xunit%
+ \!yloc=\!M{#3}\!yunit \!yyloc=\!M{#5}\!yunit%
+ \!dxpos=\!xxloc \advance\!dxpos by -\!xloc
+ \!dypos=\!yyloc \advance\!dypos by -\!yloc
+%
+ \ifdim\!dypos=\!zpt
+ \def\!!Line{\!puthline{#1}}\ignorespaces
+ \else
+ \ifdim\!dxpos=\!zpt
+ \def\!!Line{\!putvline{#1}}\ignorespaces
+ \else
+ \def\!!Line{}
+ \fi
+ \fi
+ \let\!ML=\!M% ** save current coord\dimen mode
+ \!setdimenmode% ** express locations in dimens
+ \!!Line%
+ \let\!M=\!ML% ** restore previous c/d mode
+ \ignorespaces}
+
+
+% ** \!putsolidhline [<XDIMEN,YDIMEN>]
+% ** Place horizontal solid line
+\def\!putsolidhline#1{%
+ \ifdim\!dxpos>\!zpt
+ \put{\!hline\!dxpos}#1[l] at {\!xloc} {\!yloc}
+ \else
+ \put{\!hline{-\!dxpos}}#1[l] at {\!xxloc} {\!yyloc}
+ \fi
+ \ignorespaces}
+
+% ** \!putsolidvline [shifted <XDIMEN,YDIMEN>]
+% ** Place vertical solid line
+\def\!putsolidvline#1{%
+ \ifdim\!dypos>\!zpt
+ \put{\!vline\!dypos}#1[b] at {\!xloc} {\!yloc}
+ \else
+ \put{\!vline{-\!dypos}}#1[b] at {\!xxloc} {\!yyloc}
+ \fi
+ \ignorespaces}
+
+\def\!hline#1{\hbox to #1{\leaders \hrule height\linethickness\hfill}}
+\def\!vline#1{\vbox to #1{\leaders \vrule width\linethickness\vfill}}
+
+
+% ** \!putdashedhline [<XDIMEN,YDIMEN>]
+% ** Place dashed horizontal line
+\def\!putdashedhline#1{%
+ \ifdim\!dxpos>\!zpt
+ \!DLsetup\!Flist\!dxpos
+ \put{\hbox to \!totalleaderlength{\!hleaders}\!hpartialpattern\!Rtrunc}
+ #1[l] at {\!xloc} {\!yloc}
+ \else
+ \!DLsetup\!Blist{-\!dxpos}
+ \put{\!hpartialpattern\!Ltrunc\hbox to \!totalleaderlength{\!hleaders}}
+ #1[r] at {\!xloc} {\!yloc}
+ \fi
+ \ignorespaces}
+
+% ** \!putdashedhline [<XDIMEN,YDIMEN>]
+% ** Place dashed vertical line
+\def\!putdashedvline#1{%
+ \!dypos=-\!dypos% ** vertical leaders go from top to bottom
+ \ifdim\!dypos>\!zpt
+ \!DLsetup\!Flist\!dypos
+ \put{\vbox{\vbox to \!totalleaderlength{\!vleaders}
+ \!vpartialpattern\!Rtrunc}}#1[t] at {\!xloc} {\!yloc}
+ \else
+ \!DLsetup\!Blist{-\!dypos}
+ \put{\vbox{\!vpartialpattern\!Ltrunc
+ \vbox to \!totalleaderlength{\!vleaders}}}#1[b] at {\!xloc} {\!yloc}
+ \fi
+ \ignorespaces}
+
+
+% ** The rest of the macros in this section are subroutines used by
+% ** \!putdashedhline and \!putdashedvline.
+\def\!DLsetup#1#2{% ** Dashed-Line set up
+ \let\!RSlist=#1% ** set !Rule-Skip list
+ \!countB=#2% ** convert rule length to integer (number of sps)
+ \!countA=\!leaderlength% ** ditto, leaderlength
+ \divide\!countB by \!countA% ** number of complete leader units
+ \!totalleaderlength=\!countB\!leaderlength
+ \!Rresiduallength=#2%
+ \advance \!Rresiduallength by -\!totalleaderlength% \** excess length
+ \!Lresiduallength=\!leaderlength
+ \advance \!Lresiduallength by -\!Rresiduallength
+ \ignorespaces}
+
+\def\!hleaders{%
+ \def\!Rule##1{\vrule height\linethickness width##1}%
+ \def\!Skip##1{\hskip##1}%
+ \leaders\hbox{\!RSlist}\hfill}
+
+\def\!hpartialpattern#1{%
+ \!dimenA=\!zpt \!dimenB=\!zpt
+ \def\!Rule##1{#1{##1}\vrule height\linethickness width\!dimenD}%
+ \def\!Skip##1{#1{##1}\hskip\!dimenD}%
+ \!RSlist}
+
+\def\!vleaders{%
+ \def\!Rule##1{\hrule width\linethickness height##1}%
+ \def\!Skip##1{\vskip##1}%
+ \leaders\vbox{\!RSlist}\vfill}
+
+\def\!vpartialpattern#1{%
+ \!dimenA=\!zpt \!dimenB=\!zpt
+ \def\!Rule##1{#1{##1}\hrule width\linethickness height\!dimenD}%
+ \def\!Skip##1{#1{##1}\vskip\!dimenD}%
+ \!RSlist}
+
+\def\!Rtrunc#1{\!trunc{#1}>\!Rresiduallength}
+\def\!Ltrunc#1{\!trunc{#1}<\!Lresiduallength}
+
+\def\!trunc#1#2#3{%
+ \!dimenA=\!dimenB
+ \advance\!dimenB by #1%
+ \!dimenD=\!dimenB \ifdim\!dimenD#2#3\!dimenD=#3\fi
+ \!dimenC=\!dimenA \ifdim\!dimenC#2#3\!dimenC=#3\fi
+ \advance \!dimenD by -\!dimenC}
+
+
+% ****************************************************************
+% *** LINEAR ARC (Draws straight lines -- solid and dashed) ***
+% ****************************************************************
+
+% ** User commands
+% ** \inboundscheckoff
+% ** \inboundscheckon
+
+% ** Internal commands
+% ** \!start (XCOORD,YCOORD)
+% ** \!ljoin (XCOORD,YCOORD)
+% ** \!drawlinearsegment -- set by \dashpat to either
+% ** \!linearsolid or \!lineardashed
+% ** \!advancedashing -- set by \dashpat to either
+% ** \relax or \!!advancedashing
+% ** \!plotifinbounds -- set by \inboundscheck off/on to either
+% ** \!plot or \!!plotifinbounds
+% ** \!initinboundscheck -- set by \inboundscheck off/on to either
+% ** \relax or \!!initinboundscheck
+
+
+% \plotsymbolspacing ** distance between consecutive plot positions
+% \!xS ** starting x
+% \!yS ** starting y
+% \!xE ** ending x
+% \!yE ** ending y
+% \!xdiff ** x_end - x_start
+% \!ydiff ** y_end - y_start
+% \!distacross ** how far along curve next point to be plotted is
+% \!arclength ** approximate length of arc for current interval
+% \!downlength ** remaining length for "pen" to be down
+% \!uplength ** length for "pen" to be down
+% \!intervalno ** counts segments to curve
+% \totalarclength ** cumulative distance along curve
+% \!npoints ** approximately (arc length / plotsymbolspacing)
+
+% ** Calls -- \!Pythag, \!divide, \!plot
+
+
+% ** \!start (XCOORD,YCOORD)
+% ** Sets initial point for linearly (or quadratically) interpolated curve
+\def\!start (#1,#2){%
+ \!plotxorigin=\!xorigin \advance \!plotxorigin by \!plotsymbolxshift
+ \!plotyorigin=\!yorigin \advance \!plotyorigin by \!plotsymbolyshift
+ \!xS=\!M{#1}\!xunit \!yS=\!M{#2}\!yunit
+ \!rotateaboutpivot\!xS\!yS
+ \!copylist\!UDlist\to\!!UDlist% **\!UDlist has the form \\{dimen1}\\{dimen2}..
+% ** Routine will draw dashed line with pen
+% ** down for dimen1, up for dimen2, ...
+ \!getnextvalueof\!downlength\from\!!UDlist
+ \!distacross=\!zpt% ** 1st point goes at start of curve
+ \!intervalno=0 % ** initialize interval counter
+ \global\totalarclength=\!zpt% ** initialize distance traveled along curve
+ \ignorespaces}
+
+
+% ** \!ljoin (XCOORD,YCOORD)
+% ** Draws a straight line starting at the last point specified
+% ** by the most recent \!start, \!ljoin, or \!qjoin, and
+% ** ending at (XCOORD,YCOORD).
+\def\!ljoin (#1,#2){%
+ \advance\!intervalno by 1
+ \!xE=\!M{#1}\!xunit \!yE=\!M{#2}\!yunit
+ \!rotateaboutpivot\!xE\!yE
+ \!xdiff=\!xE \advance \!xdiff by -\!xS%** xdiff = xE - xS
+ \!ydiff=\!yE \advance \!ydiff by -\!yS%** ydiff = yE - yS
+ \!Pythag\!xdiff\!ydiff\!arclength% ** arclength = sqrt(xdiff**2+ydiff**2)
+ \global\advance \totalarclength by \!arclength%
+ \!drawlinearsegment% ** set by dashpat to \!linearsolid or \!lineardashed
+ \!xS=\!xE \!yS=\!yE% ** shift ending points to starting points
+ \ignorespaces}
+
+
+% ** The following routine is used to draw a "solid" line between (xS,yS)
+% ** and (xE,yE). Points are spaced nearly every \plotsymbolspacing length
+% ** along the line.
+\def\!linearsolid{%
+ \!npoints=\!arclength
+ \!countA=\plotsymbolspacing
+ \divide\!npoints by \!countA% ** now #pts =. arclength/plotsymbolspacing
+ \ifnum \!npoints<1
+ \!npoints=1
+ \fi
+ \divide\!xdiff by \!npoints
+ \divide\!ydiff by \!npoints
+ \!xpos=\!xS \!ypos=\!yS
+%
+ \loop\ifnum\!npoints>-1
+ \!plotifinbounds
+ \advance \!xpos by \!xdiff
+ \advance \!ypos by \!ydiff
+ \advance \!npoints by -1
+ \repeat
+ \ignorespaces}
+
+
+% ** The following routine is used to draw a dashed line between (xS,yS)
+% ** and (xE,yE). The dash pattern continues from the previous segment.
+\def\!lineardashed{%
+% **
+ \ifdim\!distacross>\!arclength
+ \advance \!distacross by -\!arclength %nothing to plot in this interval
+%
+ \else
+%
+ \loop\ifdim\!distacross<\!arclength
+% ** plot point, interpolating linearly in x and y
+ \!divide\!distacross\!arclength\!dimenA% ** dimA = across/arclength
+ \!removept\!dimenA\!t% ** \!t holds value in dimA, without the "pt"
+ \!xpos=\!t\!xdiff \advance \!xpos by \!xS
+ \!ypos=\!t\!ydiff \advance \!ypos by \!yS
+ \!plotifinbounds
+ \advance\!distacross by \plotsymbolspacing
+ \!advancedashing
+ \repeat
+%
+ \advance \!distacross by -\!arclength% ** prepare for next interval
+ \fi
+ \ignorespaces}
+
+
+\def\!!advancedashing{%
+ \advance\!downlength by -\plotsymbolspacing
+ \ifdim \!downlength>\!zpt
+ \else
+ \advance\!distacross by \!downlength
+ \!getnextvalueof\!uplength\from\!!UDlist
+ \advance\!distacross by \!uplength
+ \!getnextvalueof\!downlength\from\!!UDlist
+ \fi}
+
+
+% ** \inboundscheckoff & \inboundscheckon: See Subsection 5.5 of the manual.
+\def\inboundscheckoff{%
+ \def\!plotifinbounds{\!plot(\!xpos,\!ypos)}%
+ \def\!initinboundscheck{\relax}\ignorespaces}
+\def\inboundscheckon{%
+ \def\!plotifinbounds{\!!plotifinbounds}%
+ \def\!initinboundscheck{\!!initinboundscheck}%
+ \!initinboundscheck\ignorespaces}
+\inboundscheckoff
+
+% ** The following code plots the current point only if it falls in the
+% ** current plotarea. It doesn't matter if the coordinate system has
+% ** changed since the plotarea was set up. However, shifts of the plot
+% ** are ignored (how the plotsymbol stands relative to its plot position is
+% ** unknown anyway).
+\def\!!plotifinbounds{%
+ \ifdim \!xpos<\!checkleft
+ \else
+ \ifdim \!xpos>\!checkright
+ \else
+ \ifdim \!ypos<\!checkbot
+ \else
+ \ifdim \!ypos>\!checktop
+ \else
+ \!plot(\!xpos,\!ypos)
+ \fi
+ \fi
+ \fi
+ \fi}
+
+
+\def\!!initinboundscheck{%
+ \!checkleft=\!arealloc \advance\!checkleft by \!xorigin
+ \!checkright=\!arearloc \advance\!checkright by \!xorigin
+ \!checkbot=\!areabloc \advance\!checkbot by \!yorigin
+ \!checktop=\!areatloc \advance\!checktop by \!yorigin}
+
+
+% *********************************
+% *** LOGTEN (Log_10 function) ***
+% *********************************
+%
+% ** \!logten{X}
+% ** Calculates log_10 of X. X and LOG10(X) are in fixed point notation.
+% ** X must be positive; it may have an optional `+' sign; any number
+% ** of digits may be specified for X. The absolute error in LOG10(X) is
+% ** less than .0001 (probably < .00006). That's about as good as you
+% ** hope for, since TEX only operates to 5 figures after the decimal
+% ** point anyway.
+
+% \!rootten=3.162278pt **** These are values are set in ALLOCATIONS
+% \!tenAe=2.543275pt (=A5)
+% \!tenAc=2.773839pt (=A3)
+% \!tenAa=8.690286pt (=A1)
+
+\def\!logten#1#2{%
+ \expandafter\!!logten#1\!nil
+ \!removept\!dimenF#2%
+ \ignorespaces}
+
+\def\!!logten#1#2\!nil{%
+ \if -#1%
+ \!dimenF=\!zpt
+ \def\!next{\ignorespaces}%
+ \else
+ \if +#1%
+ \def\!next{\!!logten#2\!nil}%
+ \else
+ \if .#1%
+ \def\!next{\!!logten0.#2\!nil}%
+ \else
+ \def\!next{\!!!logten#1#2..\!nil}%
+ \fi
+ \fi
+ \fi
+ \!next}
+
+\def\!!!logten#1#2.#3.#4\!nil{%
+ \!dimenF=1pt % ** DimF holds log10 original argument
+ \if 0#1%
+ \!!logshift#3pt % ** Argument < 1
+ \else % ** Argument >= 1
+ \!logshift#2/% ** Shift decimal pt as many places
+ \!dimenE=#1.#2#3pt % ** as there are figures in #2
+ \fi % ** Now dimE holds revised X want log10 of
+ \ifdim \!dimenE<\!rootten% ** Transform X to XX between sqrt(10)
+ \multiply \!dimenE 10 % ** and 10*sqrt(10)
+ \advance \!dimenF -1pt
+ \fi
+ \!dimenG=\!dimenE% ** dimG <- (XX + 10)
+ \advance\!dimenG 10pt
+ \advance\!dimenE -10pt % ** dimE <- (XX - 10)
+ \multiply\!dimenE 10 % ** dimE = 10*(XX-10)
+ \!divide\!dimenE\!dimenG\!dimenE% ** Now dimE=10t==10*(XX-10)/(XX+10)
+ \!removept\!dimenE\!t% ** !t=10t, with "pt" removed
+ \!dimenG=\!t\!dimenE% ** dimG=100t**2
+ \!removept\!dimenG\!tt% ** !tt=100t**2, with "pt" removed
+ \!dimenH=\!tt\!tenAe% ** dimH=10*a5*(10t)**2 /100
+ \divide\!dimenH 100
+ \advance\!dimenH \!tenAc% ** ditto + 10*a3
+ \!dimenH=\!tt\!dimenH% ** ditto * (10t)**2 /100
+ \divide\!dimenH 100
+ \advance\!dimenH \!tenAa% ** ditto + 10*a1
+ \!dimenH=\!t\!dimenH% ** ditto * 10t / 100
+ \divide\!dimenH 100 % ** Now dimH = log10(XX) - 1
+ \advance\!dimenF \!dimenH}% ** dimF = log10(X)
+
+\def\!logshift#1{%
+ \if #1/%
+ \def\!next{\ignorespaces}%
+ \else
+ \advance\!dimenF 1pt
+ \def\!next{\!logshift}%
+ \fi
+ \!next}
+
+ \def\!!logshift#1{%
+ \advance\!dimenF -1pt
+ \if 0#1%
+ \def\!next{\!!logshift}%
+ \else
+ \if p#1%
+ \!dimenF=1pt
+ \def\!next{\!dimenE=1p}%
+ \else
+ \def\!next{\!dimenE=#1.}%
+ \fi
+ \fi
+ \!next}
+
+
+% ***********************************************************
+% *** PICTURES (Basic setups for PiCtures; \put commands) ***
+% ***********************************************************
+
+% ** User Commands:
+% ** \beginpicture
+% ** \endpicture
+% ** \endpicturesave <XREG,YREG>
+% ** \setcoordinatesystem units <XUNIT,YUNIT> point at XREF YREF
+% ** \put {OBJECT} [ORIENTATION] <XSHIFT,YSHIFT> at XCOORD YCOORD
+% ** \multiput {OJBECT} [ORIENTATION] <XSHIFT,YSHIFT>) at
+% ** XCOORD YCOORD
+% ** *NUMBER_OF_TIMES DXCOORD DYCOORD /
+% ** \accountingon
+% ** \accountingoff
+% ** \stack [ORIENTATION] <LEADING> {LIST OF ITEMS}
+% ** \lines [ORIENTATION] {LINES}
+% ** \Lines [ORIENTATION] {LINES}
+% ** \setdimensionmode
+% ** \setcoordinatemode
+% ** \Xdistance
+% ** \Ydistance
+
+% ** Internal commands:
+% ** \!setputobject{OBJECT}{[ORIENTATION]<XSHIFT,YSHIFT>}
+% ** \!dimenput{OBJECT}[ORIENTATION]<XSHIFT,YSHIFT>(XDIMEN,YDIMEN)
+% ** \!setdimenmode
+% ** \!setcoordmode
+% ** \!ifdimenmode
+% ** \!ifcoordmode
+
+
+% ** \beginpicture
+% ** \endpicture
+% ** \endpicturesave <XREG,YREG>
+% ** \beginpicture ... \endpicture creates an hbox. Objects are
+% ** placed in this box using the \put command and the like (see below).
+% ** The location of an object is specified in terms of coordinate system(s)
+% ** established by \setcoordinatesystem. Each coordinate system (there
+% ** might be just one) specifies the length of 1 horizontal unit, the length
+% ** of 1 vertical unit, and the coordinates of a "reference point". The
+% ** reference points of various coordinate systems will be in the same
+% ** physical location. The macros keep track of the size of the objects
+% ** and their locations. The resulting hbox is the smallest hbox which
+% ** encloses all the objects, and whose TEK reference point is the point
+% ** on the left edge of the box closest vertically to the PICTEX reference
+% ** point. Using \endpicturesave, you can (globally) save the distance TEK's
+% ** reference point is to the right (respectively, up from) PICTEX's
+% ** reference point in the dimension register \XREG (respectively \YREG).
+% ** You can then \put the picture OBJECT into a larger picture so that its
+% ** reference point is at (XCOORD,YCOORD) with the command
+% ** \put {picture OBJECT} [Bl] <\XREG, \YREG> at XCOORD YCOORD
+
+% ** \beginpicture : See Subsection 1.1 of the manual.
+\def\beginpicture{%
+ \setbox\!picbox=\hbox\bgroup%
+ \!xleft=\maxdimen
+ \!xright=-\maxdimen
+ \!ybot=\maxdimen
+ \!ytop=-\maxdimen}
+
+% ** \endpicture : See Subsection 1.1 of the manual.
+\def\endpicture{%
+ \ifdim\!xleft=\maxdimen% ** check if nothing was put in picbox
+ \!xleft=\!zpt \!xright=\!zpt \!ybot=\!zpt \!ytop=\!zpt
+ \fi
+ \global\!Xleft=\!xleft \global\!Xright=\!xright
+ \global\!Ybot=\!ybot \global\!Ytop=\!ytop
+ \egroup%
+ \ht\!picbox=\!Ytop \dp\!picbox=-\!Ybot
+ \ifdim\!Ybot>\!zpt
+ \else
+ \ifdim\!Ytop<\!zpt
+ \!Ybot=\!Ytop
+ \else
+ \!Ybot=\!zpt
+ \fi
+ \fi
+ \hbox{\kern-\!Xleft\lower\!Ybot\box\!picbox\kern\!Xright}}
+
+% ** \endpicturesave : See Subsection 8.4 of the manual.
+\def\endpicturesave <#1,#2>{%
+ \endpicture \global #1=\!Xleft \global #2=\!Ybot \ignorespaces}
+
+
+% ** \setcoordinatesystem units <XUNIT,YUNIT>
+% ** point at XREF YREF
+% ** Each of `units <XUNIT,YUNIT>' and `point at XREF YREF'
+% ** are optional.
+% ** Unit lengths must be given in dimensions (e.g., <10pt,1in>).
+% ** Default unit lengths are 1pt, 1pt, or previous unit lengths.
+% ** Reference point is specified in current units (e.g., 3 5 ).
+% ** Default reference point is 0 0 , or previous reference point.
+% ** Unit lengths and reference points obey TEX's scoping rules.
+% ** See Subsection 1.2 of the manual.
+\def\setcoordinatesystem{%
+ \!ifnextchar{u}{\!getlengths }
+ {\!getlengths units <\!xunit,\!yunit>}}
+\def\!getlengths units <#1,#2>{%
+ \!xunit=#1\relax
+ \!yunit=#2\relax
+ \!ifcoordmode
+ \let\!SCnext=\!SCccheckforRP
+ \else
+ \let\!SCnext=\!SCdcheckforRP
+ \fi
+ \!SCnext}
+\def\!SCccheckforRP{%
+ \!ifnextchar{p}{\!cgetreference }
+ {\!cgetreference point at {\!xref} {\!yref} }}
+\def\!cgetreference point at #1 #2 {%
+ \edef\!xref{#1}\edef\!yref{#2}%
+ \!xorigin=\!xref\!xunit \!yorigin=\!yref\!yunit
+ \!initinboundscheck % ** See linear.tex
+ \ignorespaces}
+\def\!SCdcheckforRP{%
+ \!ifnextchar{p}{\!dgetreference}%
+ {\ignorespaces}}
+\def\!dgetreference point at #1 #2 {%
+ \!xorigin=#1\relax \!yorigin=#2\relax
+ \ignorespaces}
+
+
+% ** \put {OBJECT} [XY] <XDIMEN,YDIMEN> at (XCOORD,YCOORD)
+% ** `[XY]' and `<XDIMEN,YDIMEN>' are optional.
+% ** First OBJECT is placed in an hbox (the "objectbox") and then a
+% ** "reference point" is assigned to the objectbox as follows:
+% ** [1] first, the reference point is taken to be the center of the box;
+% ** [2] next, centering is overridden by the specifications
+% ** X=l -- reference point along the left edge of the objectbox
+% ** X=r -- reference point along the right edge of the objectbox
+% ** Y=b -- reference point along the bottom edge of the objectbox
+% ** Y=B -- reference point along the Baseline of the objectbox
+% ** Y=t -- reference point along the top edge of the objectbox;
+% ** [3] finally the reference point is shifted left by XDIMEN, down
+% ** by YDIMEN (both default to 0pt).
+% ** The objectbox is placed within PICBOX with its reference point at
+% ** (XCOORD,YCOORD).
+% ** If OBJECT is a saved box, say box0, you have to write
+% ** \put{\box0}... or \put{\copy0}...
+% ** The objectbox is void after the put.
+% ** See Subsection 2.1 of the manual.
+\long\def\put#1#2 at #3 #4 {%
+ \!setputobject{#1}{#2}%
+ \!xpos=\!M{#3}\!xunit \!ypos=\!M{#4}\!yunit
+ \!rotateaboutpivot\!xpos\!ypos%
+ \advance\!xpos -\!xorigin \advance\!xpos -\!xshift
+ \advance\!ypos -\!yorigin \advance\!ypos -\!yshift
+ \kern\!xpos\raise\!ypos\box\!putobject\kern-\!xpos%
+ \!doaccounting\ignorespaces}
+
+% ** \multiput etc. Like \put. The objectbox is not voided until the
+% ** termininating /, and is placed repeatedly with:
+% ** XCOORD YCOORD -- the objectbox is put down with its reference point
+% ** at (XCOORD,YCOORD);
+% ** *N DXCOORD DYCOORD -- each of N times the current
+% ** (xcoord,ycoord) is incremented by (DXCOORD,DYCOORD), and the
+% ** objectbox is put down with its reference point at (xcoord,ycoord)
+% ** (This specification has to follow an XCOORD YCOORD pair)
+% ** See Subsection 2.2 of the manual.
+\long\def\multiput #1#2 at {%
+ \!setputobject{#1}{#2}%
+ \!ifnextchar"{\!putfromfile}{\!multiput}}
+\def\!putfromfile"#1"{%
+ \expandafter\!multiput \input #1 /}
+\def\!multiput{%
+ \futurelet\!nextchar\!!multiput}
+\def\!!multiput{%
+ \if *\!nextchar
+ \def\!nextput{\!alsoby}%
+ \else
+ \if /\!nextchar
+ \def\!nextput{\!finishmultiput}%
+ \else
+ \def\!nextput{\!alsoat}%
+ \fi
+ \fi
+ \!nextput}
+\def\!finishmultiput/{%
+ \setbox\!putobject=\hbox{}%
+ \ignorespaces}
+
+% ** \!alsoat XCOORD YCOORD
+% ** The objectbox is put down with reference point at XCOORD,YCOORD
+\def\!alsoat#1 #2 {%
+ \!xpos=\!M{#1}\!xunit \!ypos=\!M{#2}\!yunit
+ \!rotateaboutpivot\!xpos\!ypos%
+ \advance\!xpos -\!xorigin \advance\!xpos -\!xshift
+ \advance\!ypos -\!yorigin \advance\!ypos -\!yshift
+ \kern\!xpos\raise\!ypos\copy\!putobject\kern-\!xpos%
+ \!doaccounting
+ \!multiput}
+
+% ** \!alsoby*N DXCOORD DYCOORD
+% ** N times, the current (XCOORD,YCOORD) is advanced by (DXCOORD,DYCOORD),
+% ** and the current (shifted, oriented) OBJECT is put down.
+\def\!alsoby*#1 #2 #3 {%
+ \!dxpos=\!M{#2}\!xunit \!dypos=\!M{#3}\!yunit
+ \!rotateonly\!dxpos\!dypos
+ \!ntemp=#1%
+ \!!loop\ifnum\!ntemp>0
+ \advance\!xpos by \!dxpos \advance\!ypos by \!dypos
+ \kern\!xpos\raise\!ypos\copy\!putobject\kern-\!xpos%
+ \advance\!ntemp by -1
+ \repeat
+ \!doaccounting
+ \!multiput}
+
+% ** \accountingoff : Suspends PiCTeX's accounting of the aggregate
+% ** size of the picture box.
+% ** \accounting on : Reinstates accounting.
+% ** See Subsection 8.2 of the manual.
+\def\accountingon{\def\!doaccounting{\!!doaccounting}\ignorespaces}
+\def\accountingoff{\def\!doaccounting{}\ignorespaces}
+\accountingon
+\def\!!doaccounting{%
+ \!xtemp=\!xpos
+ \!ytemp=\!ypos
+ \ifdim\!xtemp<\!xleft
+ \!xleft=\!xtemp
+ \fi
+ \advance\!xtemp by \!wd
+ \ifdim\!xright<\!xtemp
+ \!xright=\!xtemp
+ \fi
+ \advance\!ytemp by -\!dp
+ \ifdim\!ytemp<\!ybot
+ \!ybot=\!ytemp
+ \fi
+ \advance\!ytemp by \!dp
+ \advance\!ytemp by \!ht
+ \ifdim\!ytemp>\!ytop
+ \!ytop=\!ytemp
+ \fi}
+
+\long\def\!setputobject#1#2{%
+ \setbox\!putobject=\hbox{#1}%
+ \!ht=\ht\!putobject \!dp=\dp\!putobject \!wd=\wd\!putobject
+ \wd\!putobject=\!zpt
+ \!xshift=.5\!wd \!yshift=.5\!ht \advance\!yshift by -.5\!dp
+ \edef\!putorientation{#2}%
+ \expandafter\!SPOreadA\!putorientation[]\!nil%
+ \expandafter\!SPOreadB\!putorientation<\!zpt,\!zpt>\!nil\ignorespaces}
+
+\def\!SPOreadA#1[#2]#3\!nil{\!etfor\!orientation:=#2\do\!SPOreviseshift}
+
+\def\!SPOreadB#1<#2,#3>#4\!nil{\advance\!xshift by -#2\advance\!yshift by -#3}
+
+\def\!SPOreviseshift{%
+ \if l\!orientation
+ \!xshift=\!zpt
+ \else
+ \if r\!orientation
+ \!xshift=\!wd
+ \else
+ \if b\!orientation
+ \!yshift=-\!dp
+ \else
+ \if B\!orientation
+ \!yshift=\!zpt
+ \else
+ \if t\!orientation
+ \!yshift=\!ht
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi}
+
+
+% ** \!dimenput{OBJECT} <XDIMEN,YDIMEN> [XY] (XLOC,YLOC)
+% ** This is an internal put routine, similar to \put, except that
+% ** XLOC=distance right from reference point, YLOC=distance up from
+% ** reference point. XLOC and YLOC are dimensions, so this routine
+% ** is completely independent of the current coordinate system.
+% ** This routine does NOT do ROTATIONS.
+\long\def\!dimenput#1#2(#3,#4){%
+ \!setputobject{#1}{#2}%
+ \!xpos=#3\advance\!xpos by -\!xshift
+ \!ypos=#4\advance\!ypos by -\!yshift
+ \kern\!xpos\raise\!ypos\box\!putobject\kern-\!xpos%
+ \!doaccounting\ignorespaces}
+
+
+% ** The following macros permit the picture drawing routines to be used
+% ** either in the default "coordinate mode", or in "dimension mode".
+% ** In coordinate mode \!M(1.5,\!xunit) expands to 1.5\!xunit
+% ** In dimension mode \!M(1.5pt,\!xunit) expands to 1.5pt
+% ** Dimension mode is useful in coding macros.
+% ** Any special purpose picture macro that sets dimension mode should
+% ** reset coordinate mode before completion.
+% ** See Subsection 9.2 of the manual.
+\def\!setdimenmode{%
+ \let\!M=\!M!!\ignorespaces}
+\def\!setcoordmode{%
+ \let\!M=\!M!\ignorespaces}
+\def\!ifcoordmode{%
+ \ifx \!M \!M!}
+\def\!ifdimenmode{%
+ \ifx \!M \!M!!}
+\def\!M!#1#2{#1#2}
+\def\!M!!#1#2{#1}
+\!setcoordmode
+\let\setdimensionmode=\!setdimenmode
+\let\setcoordinatemode=\!setcoordmode
+
+% ** \Xdistance{XCOORD}, \Ydistance{YCOORD} are the horizontal and
+% ** vertical distances from the origin (0,0) to the point
+% ** (XCOORD,YCOORD) in the current coordinate system.
+% ** See Subsection 9.2 of the manual.
+\def\Xdistance#1{%
+ \!M{#1}\!xunit
+ \ignorespaces}
+\def\Ydistance#1{%
+ \!M{#1}\!yunit
+ \ignorespaces}
+
+% ** The following macros -- \stack, \line, and \Lines -- are useful for
+% ** annotating PiCtures. They can be used outside the \beginpicture ...
+% ** \endpicture environment.
+
+% ** \stack [POSITIONING] <LEADING> {VALUESLIST}
+% ** Builds a vertical stack of the values in VALUESLIST. Values in
+% ** VALUESLIST are separated by commas. In the resulting stack, values are
+% ** centered by default, and positioned flush left (right) if
+% ** POSITIONING = l (r). Values are separated vertically by LEADING,
+% ** which defaults to \stackleading.
+% ** See Subsection 2.3 of the manual.
+\def\stack{%
+ \!ifnextchar[{\!stack}{\!stack[c]}}
+\def\!stack[#1]{%
+ \let\!lglue=\hfill \let\!rglue=\hfill
+ \expandafter\let\csname !#1glue\endcsname=\relax
+ \!ifnextchar<{\!!stack}{\!!stack<\stackleading>}}
+\def\!!stack<#1>#2{%
+ \vbox{\def\!valueslist{}\!ecfor\!value:=#2\do{%
+ \expandafter\!rightappend\!value\withCS{\\}\to\!valueslist}%
+ \!lop\!valueslist\to\!value
+ \let\\=\cr\lineskiplimit=\maxdimen\lineskip=#1%
+ \baselineskip=-1000pt\halign{\!lglue##\!rglue\cr \!value\!valueslist\cr}}%
+ \ignorespaces}
+
+% ** \lines [POSITIONING] {LINES}
+% ** Builds a vertical array of the lines in LINES. Each line in LINES
+% ** is terminated by a \cr. In the resulting array, lines are
+% ** centered by default, and positioned flush left (right) if
+% ** POSITIONING = l (r). The lines in the array are subject to TeX's
+% ** usual spacing rules: in particular the baselines are ordinarily an equal
+% ** distance apart. The baseline of the array is the baseline of the
+% ** the bottom line.
+% ** See Subsection 2.3 of the manual.
+\def\lines{%
+ \!ifnextchar[{\!lines}{\!lines[c]}}
+\def\!lines[#1]#2{%
+ \let\!lglue=\hfill \let\!rglue=\hfill
+ \expandafter\let\csname !#1glue\endcsname=\relax
+ \vbox{\halign{\!lglue##\!rglue\cr #2\crcr}}%
+ \ignorespaces}
+
+% ** \Lines [POSITIONING] {LINES}
+% ** Like \lines, but the baseline of the array is the baseline of the
+% ** top line. See Subsection 2.3 of the manual.
+\def\Lines{%
+ \!ifnextchar[{\!Lines}{\!Lines[c]}}
+\def\!Lines[#1]#2{%
+ \let\!lglue=\hfill \let\!rglue=\hfill
+ \expandafter\let\csname !#1glue\endcsname=\relax
+ \vtop{\halign{\!lglue##\!rglue\cr #2\crcr}}%
+ \ignorespaces}
+
+
+% *********************************************
+% *** PLOTTING (Things to do with plotting) ***
+% *********************************************
+
+% ** User commands
+% ** \setplotsymbol ({PLOTSYMBOL} [ORIENTATION] <XSHIFT,YSHIFT>)
+% ** \savelinesandcurves on "FILE_NAME"
+% ** \dontsavelinesandcurves
+% ** \writesavefile {MESSAGE}
+% ** \replot {FILE_NAME}
+
+% ** Internal command
+% ** \!plot(XDIMEN,YDIMEN)
+
+% ** \setplotsymbol ({PLOTSYMBOL} [ ] < , >)
+% ** Save PLOTSYMBOL away in an hbox for use with curve plotting routines
+% ** See Subsection 5.2 of the manual.
+\def\setplotsymbol(#1#2){%
+ \!setputobject{#1}{#2}
+ \setbox\!plotsymbol=\box\!putobject%
+ \!plotsymbolxshift=\!xshift
+ \!plotsymbolyshift=\!yshift
+ \ignorespaces}
+
+\font\fiverm=cmr5
+\setplotsymbol({\fiverm .})% ** initialize plotsymbol
+
+
+% ** \!plot is either \!!plot (when no lines and curves are being saved) or
+% ** \!!!plot (when lines and curves are being saved)
+
+% ** \!!plot(XDIMEN,YDIMEN)
+% ** Places the current plotsymbol a horizontal distance=XDIMEN-xorigin
+% ** and a vertical distance=YDIMEN-yorigin from the current
+% ** reference point.
+\def\!!plot(#1,#2){%
+ \!dimenA=-\!plotxorigin \advance \!dimenA by #1% ** over
+ \!dimenB=-\!plotyorigin \advance \!dimenB by #2% ** up
+ \kern\!dimenA\raise\!dimenB\copy\!plotsymbol\kern-\!dimenA%
+ \ignorespaces}
+
+% ** \!!!plot(XDIMEN,YDIMEN)
+% ** Like \!!plot, but also saves the plot location in units of
+% ** scaled point, on file `replotfile'
+\def\!!!plot(#1,#2){%
+ \!dimenA=-\!plotxorigin \advance \!dimenA by #1% ** over
+ \!dimenB=-\!plotyorigin \advance \!dimenB by #2% ** up
+ \kern\!dimenA\raise\!dimenB\copy\!plotsymbol\kern-\!dimenA%
+ \!countE=\!dimenA
+ \!countF=\!dimenB
+ \immediate\write\!replotfile{\the\!countE,\the\!countF.}%
+ \ignorespaces}
+
+
+% ** \savelinesandcurves on "FILE_NAME"
+% ** Switch to save locations used for plotting lines and curves
+% ** (No advantage in saving locations for solid lines; however
+% ** replotting curve locations speeds things up by a factor of about 4.
+% ** \dontsavelinesandcurves
+% ** Terminates \savelinesandcurves. The default.
+% ** See Subsection 5.6 of the manual.
+\def\savelinesandcurves on "#1" {%
+ \immediate\closeout\!replotfile
+ \immediate\openout\!replotfile=#1%
+ \let\!plot=\!!!plot}
+
+\def\dontsavelinesandcurves {%
+ \let\!plot=\!!plot}
+\dontsavelinesandcurves
+
+% ** \writesavefile {MESSAGE}
+% ** The message is preceded by a "%", so that it won't interfere
+% ** with replotting.
+% ** See Subsection 5.6 of the manual.
+{\catcode`\%=11\xdef\!Commentsignal{%}}
+\def\writesavefile#1 {%
+ \immediate\write\!replotfile{\!Commentsignal #1}%
+ \ignorespaces}
+
+% ** \replot "FILE_NAME"
+% ** Replots the locations saved earlier under \savelinesandcurves
+% ** on "FILE_NAME"
+% ** See Subsection 5.6 of the manual.
+\def\replot"#1" {%
+ \expandafter\!replot\input #1 /}
+\def\!replot#1,#2. {%
+ \!dimenA=#1sp
+ \kern\!dimenA\raise#2sp\copy\!plotsymbol\kern-\!dimenA
+ \futurelet\!nextchar\!!replot}
+\def\!!replot{%
+ \if /\!nextchar
+ \def\!next{\!finish}%
+ \else
+ \def\!next{\!replot}%
+ \fi
+ \!next}
+% **************************************************
+% *** PYTHAGORAS (Euclidean distance function) ***
+% **************************************************
+
+% ** User command:
+% ** \placehypotenuse for <dimension1> and <dimension2> in <register>
+
+% ** Internal command:
+% ** \!Pythag{X}{Y}{Z}
+% ** Input X,Y are dimensions, or dimension registers.
+% ** Output Z == sqrt(X**2+Y**2) must be a dimension register.
+% ** Assumes that |X|+|Y| < 2048pt (about 28in).
+
+% ** Without loss of generality, suppose x>0, y>0. Put s = x+y,
+% ** z = sqrt(x**2+y**2). Then z = s*f, where f = sqrt(t**2 + (1-t)**2)
+% ** = sqrt((1+tau**2)/2), where t = x/s and tau = 2(t-1/2) .
+
+% ** Uses the \!divide macro (which uses registers \!dimenA--\!dimenD.
+% ** Uses the \!removept macro (e.g., 123.45pt --> 123.45)
+% ** Uses registers \!dimenE--\!dimenI.
+\def\!Pythag#1#2#3{%
+ \!dimenE=#1\relax
+ \ifdim\!dimenE<\!zpt
+ \!dimenE=-\!dimenE
+ \fi% ** dimE = |x|
+ \!dimenF=#2\relax
+ \ifdim\!dimenF<\!zpt
+ \!dimenF=-\!dimenF
+ \fi% ** dimF = |y|
+ \advance \!dimenF by \!dimenE% ** dimF = s = |x|+|y|
+ \ifdim\!dimenF=\!zpt
+ \!dimenG=\!zpt% ** dimG = z = sqrt(x**2+y**2)
+ \else
+ \!divide{8\!dimenE}\!dimenF\!dimenE% ** now dimE = 8t = (8|x|)/s
+ \advance\!dimenE by -4pt% ** 8tau = (8t-4)*2
+ \!dimenE=2\!dimenE% ** (tau = 2*t - 1)
+ \!removept\!dimenE\!!t% ** 8tau, without "pt"
+ \!dimenE=\!!t\!dimenE% ** (8tau)**2, in pts
+ \advance\!dimenE by 64pt% ** u = [64 + (8tau)**2]/2
+ \divide \!dimenE by 2% ** [u = (8f)**2]
+ \!dimenH=7pt% ** initial guess g at sqrt(u)
+ \!!Pythag\!!Pythag\!!Pythag% ** 3 iterations give sqrt(u)
+ \!removept\!dimenH\!!t% ** 8f=sqrt(u), without "pt"
+ \!dimenG=\!!t\!dimenF% ** z = (8f)*s/8
+ \divide\!dimenG by 8
+ \fi
+ #3=\!dimenG
+ \ignorespaces}
+
+\def\!!Pythag{% ** Newton-Raphson for sqrt
+ \!divide\!dimenE\!dimenH\!dimenI% ** v = u/g
+ \advance\!dimenH by \!dimenI% ** g <-- (g + u/g)/2
+ \divide\!dimenH by 2}
+
+% ** \placehypotenuse for <XI> and <ETA> in <ZETA>
+% ** See Subsection 9.3 of the manual.
+\def\placehypotenuse for <#1> and <#2> in <#3> {%
+ \!Pythag{#1}{#2}{#3}}
+
+
+% **********************************************
+% *** QUADRATIC ARC (Draws a quadratic arc) ***
+% **********************************************
+
+% ** Internal command
+% ** \!qjoin (XCOORD1,YCOORD1) (XCOORD2,YCOORD2)
+
+% ** \!qjoin (XCOORD1,YCOORD1) (XCOORD2,YCOORD2)
+% ** Draws an arc starting at the (last) point specified by the most recent
+% ** \!qjoin, or \!ljoin, or \!start and passing through (X_1,Y_1), (X_2,Y_2).
+% ** Uses quadratic interpolation in both x and y:
+% ** x(t), 0 <= t <= 1, interpolates x_0, x_1, x_2 at t=0, .5, 1
+% ** y(t), 0 <= t <= 1, interpolates y_0, y_1, y_2 at t=0, .5, 1
+
+\def\!qjoin (#1,#2) (#3,#4){%
+ \advance\!intervalno by 1
+ \!ifcoordmode
+ \edef\!xmidpt{#1}\edef\!ymidpt{#2}%
+ \else
+ \!dimenA=#1\relax \edef\!xmidpt{\the\!dimenA}%
+ \!dimenA=#2\relax \edef\!ymidpt{\the\!dimenA}%
+ \fi
+ \!xM=\!M{#1}\!xunit \!yM=\!M{#2}\!yunit \!rotateaboutpivot\!xM\!yM
+ \!xE=\!M{#3}\!xunit \!yE=\!M{#4}\!yunit \!rotateaboutpivot\!xE\!yE
+%
+% ** Find coefficients for x(t)=a_x + b_x*t + c_x*t**2
+ \!dimenA=\!xM \advance \!dimenA by -\!xS% ** dimA = I = xM - xS
+ \!dimenB=\!xE \advance \!dimenB by -\!xM% ** dimB = II = xE-xM
+ \!xB=3\!dimenA \advance \!xB by -\!dimenB% ** b=3I-II
+ \!xC=2\!dimenB \advance \!xC by -2\!dimenA% ** c=2(II-I)
+%
+% ** Find coefficients for y(t)=y_x + b_y*t + c_y*t**2
+ \!dimenA=\!yM \advance \!dimenA by -\!yS%
+ \!dimenB=\!yE \advance \!dimenB by -\!yM%
+ \!yB=3\!dimenA \advance \!yB by -\!dimenB%
+ \!yC=2\!dimenB \advance \!yC by -2\!dimenA%
+%
+% ** Use Simpson's rule to calculate arc length over [0,1/2]:
+% ** arc length = 1/2[1/6 f(0) + 4/6 f(1/4) + 1/6 f(1/2)]
+% ** with f(t) = sqrt(x'(t)**2 + y'(t)**2).
+ \!xprime=\!xB \!yprime=\!yB% ** x'(t) = b + 2ct
+ \!dxprime=.5\!xC \!dyprime=.5\!yC% ** dt=1/4 ==> dx'(t) = c/2
+ \!getf \!midarclength=\!dimenA
+ \!getf \advance \!midarclength by 4\!dimenA
+ \!getf \advance \!midarclength by \!dimenA
+ \divide \!midarclength by 12
+%
+% ** Get arc length over [0,1].
+ \!arclength=\!dimenA
+ \!getf \advance \!arclength by 4\!dimenA
+ \!getf \advance \!arclength by \!dimenA
+ \divide \!arclength by 12% ** Now have arc length over [1/2,1]
+ \advance \!arclength by \!midarclength
+ \global\advance \totalarclength by \!arclength
+%
+%
+% ** Check to see if there's anything to plot in this interval
+ \ifdim\!distacross>\!arclength
+ \advance \!distacross by -\!arclength% ** nothing
+%
+ \else
+ \!initinverseinterp% ** initialize for inverse interpolation on arc length
+ \loop\ifdim\!distacross<\!arclength% ** loop over points on arc
+ \!inverseinterp% ** find t such that arc length[0,t] = distacross,
+% ** using inverse quadratic interpolation
+% ** now evaluate x(t)=(c*t + b)*t + a
+ \!xpos=\!t\!xC \advance\!xpos by \!xB
+ \!xpos=\!t\!xpos \advance \!xpos by \!xS
+% ** evaluate y(t)
+ \!ypos=\!t\!yC \advance\!ypos by \!yB
+ \!ypos=\!t\!ypos \advance \!ypos by \!yS
+ \!plotifinbounds% ** plot point if in bounds
+ \advance\!distacross \plotsymbolspacing%** advance arc length for next pt
+ \!advancedashing% ** see "linear"
+ \repeat
+%
+ \advance \!distacross by -\!arclength% ** prepare for next interval
+ \fi
+%
+ \!xS=\!xE% ** shift ending points to starting points
+ \!yS=\!yE
+ \ignorespaces}
+
+
+% ** \!getf -- Calculates sqrt(x'(t)**2 + y'(t)**2) and advances
+% ** x'(t) and y'(t)
+\def\!getf{\!Pythag\!xprime\!yprime\!dimenA%
+ \advance\!xprime by \!dxprime
+ \advance\!yprime by \!dyprime}
+
+
+% ** \!initinverseinterp -- initializes for inverse quadratic interpolation
+% ** of arc length provided 1/3 < midarclength/arclength < 2/3; otherwise
+% ** initializes for inverse linear interpolation.
+\def\!initinverseinterp{%
+ \ifdim\!arclength>\!zpt
+ \!divide{8\!midarclength}\!arclength\!dimenE% ** dimE=8w=8r/s, where r
+% ** = midarclength, s=arclength
+% ** Test for w out of range: w<1/3 or w>2/3
+ \ifdim\!dimenE<\!wmin \!setinverselinear
+ \else
+ \ifdim\!dimenE>\!wmax \!setinverselinear
+ \else% ** w in range: initialize
+ \def\!inverseinterp{\!inversequad}\ignorespaces
+%
+% ** Calculate the coefficients \!beta and \!gamma of the quadratic
+% ** t = \!beta*v + \!gamma*v**2
+% ** taking the values t=0, 1/2, 1 at v=0, w==r/s, 1 respectively:
+% ** \!beta = (1/2 - w**2)/[w(1-w)]
+% ** \!gamma = 1 - beta.
+%
+ \!removept\!dimenE\!Ew% ** 8w, without "pt"
+ \!dimenF=-\!Ew\!dimenE% ** -(8w)**2
+ \advance\!dimenF by 32pt% ** 32 - (8w)**2
+ \!dimenG=8pt
+ \advance\!dimenG by -\!dimenE% ** 8 - 8w
+ \!dimenG=\!Ew\!dimenG% ** (8w)*(8-8w)
+ \!divide\!dimenF\!dimenG\!beta% ** beta = (32-(8w)**2)/(8w(8-8w))
+% ** = (1/2 - w**2)/(w(1-w))
+ \!gamma=1pt
+ \advance \!gamma by -\!beta% ** gamma = 1-beta
+ \fi% ** end of the \ifdim\!dimenE>\!wmax
+ \fi% ** end of the \ifdim\!dimenE<\!wmin
+ \fi% ** end of the \ifdim\!arclength>\!zpt
+ \ignorespaces}
+
+
+% ** For 0 <= t <= 1, let AL(t) = arclength[0,t]/arclength[0,1]; note
+% ** AL(0)=0, AL(1/2)=midarclength/arclength, AL(1)=1. This routine
+% ** calculates an approximation to AL^{-1}(distance across/arclength),
+% ** using the assumption that AL^{-1} is quadratic. Specifically,
+% ** it finds t such that
+% ** AL^{-1}(v) =. t = v*(\!beta + \!gamma*v)
+% ** where \!beta and \!gamma are set by \!initinv, and where
+% ** v=distance across/arclength
+\def\!inversequad{%
+ \!divide\!distacross\!arclength\!dimenG% ** dimG = v = distacross/arclength
+ \!removept\!dimenG\!v% ** v, without "pt"
+ \!dimenG=\!v\!gamma% ** gamma*v
+ \advance\!dimenG by \!beta% ** beta + gamma*v
+ \!dimenG=\!v\!dimenG% ** t = v*(beta + gamma*v)
+ \!removept\!dimenG\!t}% ** t, without "pt"
+
+
+% ** When w <= 1/3 or w >= 2/3, the following routine writes (using
+% ** plain TEK's \wlog command) a warning message on the user's log file,
+% ** and initializes for inverse linear interpolation on arc length.
+\def\!setinverselinear{%
+ \def\!inverseinterp{\!inverselinear}%
+ \divide\!dimenE by 8 \!removept\!dimenE\!t
+ \!countC=\!intervalno \multiply \!countC 2
+ \!countB=\!countC \advance \!countB -1
+ \!countA=\!countB \advance \!countA -1
+ \wlog{\the\!countB th point (\!xmidpt,\!ymidpt) being plotted
+ doesn't lie in the}%
+ \wlog{ middle third of the arc between the \the\!countA th
+ and \the\!countC th points:}%
+ \wlog{ [arc length \the\!countA\space to \the\!countB]/[arc length
+ \the \!countA\space to \the\!countC]=\!t.}%
+ \ignorespaces}
+
+% ** Inverse linear interpolation
+\def\!inverselinear{%
+ \!divide\!distacross\!arclength\!dimenG
+ \!removept\!dimenG\!t}
+
+
+% **************************************
+% ** ROTATIONS (Handles rotations) ***
+% **************************************
+
+% ** User commands
+% ** \startrotation [by COS_OF_ANGLE SIN_OF_ANGLE] [about XPIVOT YPIVOT]
+% ** \stoprotation
+
+% ** \startrotation [by COS_OF_ANGLE SIN_OF_ANGLE] [about XPIVOT YPIVOT]
+% ** Future (XCOORD,YCOORD)'s will be rotated about (XPIVOT,YPIVOT)
+% ** by the angle with the give COS and SIN. Both fields are optional.
+% ** [COS,SIN] defaults to previous value, or (1,0).
+% ** (XPIVOT,YPIVOT) defaults to previous value, or (0,0)
+% ** You can't change the coordinate system in the scope of a rotation.
+% ** See Subsection 9.1 of the manual.
+\def\startrotation{%
+ \let\!rotateaboutpivot=\!!rotateaboutpivot
+ \let\!rotateonly=\!!rotateonly
+ \!ifnextchar{b}{\!getsincos }%
+ {\!getsincos by {\!cosrotationangle} {\!sinrotationangle} }}
+\def\!getsincos by #1 #2 {%
+ \edef\!cosrotationangle{#1}%
+ \edef\!sinrotationangle{#2}%
+ \!ifcoordmode
+ \let\!ROnext=\!ccheckforpivot
+ \else
+ \let\!ROnext=\!dcheckforpivot
+ \fi
+ \!ROnext}
+\def\!ccheckforpivot{%
+ \!ifnextchar{a}{\!cgetpivot}%
+ {\!cgetpivot about {\!xpivotcoord} {\!ypivotcoord} }}
+\def\!cgetpivot about #1 #2 {%
+ \edef\!xpivotcoord{#1}%
+ \edef\!ypivotcoord{#2}%
+ \!xpivot=#1\!xunit \!ypivot=#2\!yunit
+ \ignorespaces}
+\def\!dcheckforpivot{%
+ \!ifnextchar{a}{\!dgetpivot}{\ignorespaces}}
+\def\!dgetpivot about #1 #2 {%
+ \!xpivot=#1\relax \!ypivot=#2\relax
+ \ignorespaces}
+
+
+% ** Following terminates rotation.
+% ** See Subsection 9.1 of the manual.
+\def\stoprotation{%
+ \let\!rotateaboutpivot=\!!!rotateaboutpivot
+ \let\!rotateonly=\!!!rotateonly
+ \ignorespaces}
+
+% ** !!rotateaboutpivot{XREG}{YREG}
+% ** XREG <-- xpvt + cos(angle)*(XREG-xpvt) - sin(angle)*(YREG-ypvt)
+% ** YREG <-- ypvt + cos(angle)*(YREG-ypvt) + sin(angle)*(XREG-xpvt)
+% ** XREG,YREG are dimension registers. Can't be \!dimenA to \!dimenD
+\def\!!rotateaboutpivot#1#2{%
+ \!dimenA=#1\relax \advance\!dimenA -\!xpivot
+ \!dimenB=#2\relax \advance\!dimenB -\!ypivot
+ \!dimenC=\!cosrotationangle\!dimenA
+ \advance \!dimenC -\!sinrotationangle\!dimenB
+ \!dimenD=\!cosrotationangle\!dimenB
+ \advance \!dimenD \!sinrotationangle\!dimenA
+ \advance\!dimenC \!xpivot \advance\!dimenD \!ypivot
+ #1=\!dimenC #2=\!dimenD
+ \ignorespaces}
+
+% ** \!!rotateonly{XREG}{YREG}
+% ** Like \!!rotateaboutpivot, but with a pivot of (0,0)
+\def\!!rotateonly#1#2{%
+ \!dimenA=#1\relax \!dimenB=#2\relax
+ \!dimenC=\!cosrotationangle\!dimenA
+ \advance \!dimenC -\!rotsign\!sinrotationangle\!dimenB
+ \!dimenD=\!cosrotationangle\!dimenB
+ \advance \!dimenD \!rotsign\!sinrotationangle\!dimenA
+ #1=\!dimenC #2=\!dimenD
+ \ignorespaces}
+\def\!rotsign{}
+\def\!!!rotateaboutpivot#1#2{\relax}
+\def\!!!rotateonly#1#2{\relax}
+\stoprotation
+
+\def\!reverserotateonly#1#2{%
+ \def\!rotsign{-}%
+ \!rotateonly{#1}{#2}%
+ \def\!rotsign{}%
+ \ignorespaces}
+
+
+% **********************************
+% *** SHADING (Handles shading) ***
+% **********************************
+
+% ** User commands
+% ** \setshadegrid [span <SPAN>] [point at XSHADE YSHADE]
+% ** \setshadesymbol [<LS, RS, BS, TS>] ({SHADESYMBOL}
+% ** <XDIMEN,YDIMEN> [ORIENTATION])
+
+% ** Internal commands:
+% ** \!startvshade (xS,ybS,ytS)
+% ** \!starthshade (yS,xlS,xrS)
+% ** \!lshade [<LS,RS,BS,TS>]
+% ** ** when shading vertically:
+% ** [the region from (xS,ybS,ytS) to] (xE,ybE,ytE)
+% ** ** when shading horizontally:
+% ** [the region from (yS,xlS,xrS) to] (yE,xlE,xrE)
+% ** \!qshade [<LS,RS,BS,TS>]
+% ** ** when shading vertically:
+% ** [the region from (xS,ybS,ytS) to] (xM,ybM,ytM) (xE,ybE,ytE)
+% ** ** when shading horizontally:
+% ** [the region from (yS,xlS,xrS) to] (yM,xlM,xrM) (yE,xlE,xrE)
+% ** \!lattice{ANCHOR}{SPAN}{LOCATION}{INDEX}{LATTICE LOCATION}
+% ** \!override{NOMINAL DIMEN}{REPLACEMENT DIMEN}{DIMEN}
+
+
+% ** The shading routine can operate either in a "vertical mode" or a
+% ** "horizontal mode". In vertical mode, the region to be shaded is specified
+% ** in the form
+% ** {(x,y): xl <= x <= xr & yb(x) <= y <= yt(x)}
+% ** where yb and yt are functions of x. In horizontal mode, the region
+% ** is specified in the form
+% ** {(x,y): yb <= y <= yt & xl(y) <= x <= xr(y)}.
+% ** The functions yb and yt may be either both linear or both quadratic;
+% ** similarly for xl and xr. A region with say, piecewise quadratic bottom
+% ** and top boundaries, can be shaded by consecutive (vertical) \!qshades,
+% ** proceeding from left to right. Similarly, a region with piecewise
+% ** quadratic left and right boundaries can be shaded by consecutive
+% ** (horizontal) \!qshades, proceeding from bottom to top. More complex
+% ** regions can be shaded by partitioning them into appropriate subregions,
+% ** and shading those.
+
+% ** Shading is accomplished by placing a user-selected shading symbol at
+% ** those points of a regular grid which fall within the region to be
+% ** shaded. This region can be "shrunk" so that a largish shading symbol
+% ** will not extend outside it. Shrinking is accomplished by specifying
+% ** shrinkages for the left, right, bottom, and top boundaries, in a manner
+% ** discussed further below.
+
+% ** \shades and \!joins MUST NOT be intermingled. Finish drawing a curve
+% ** before starting to shade a region, and finish shading a region before
+% ** starting to draw a curve.
+
+
+% ** \setshadegrid [span <SPAN>] [point at XSHADE YSHADE]
+% ** The shading symbol is placed down on the points of a grid centered
+% ** at the coordinate point (XSHADE,YSHADE). The grid points are of the
+% ** form (j*SPAN,k*SPAN), with j+k even. SPAN is specified
+% ** as a dimension.
+% ** (XSHADE,YSHADE) defaults to previous (XSHADE,YSHADE) (or (0,0) if none)
+% ** SPAN defaults to previous span (or 5pt if none)
+% ** See Subsection 7.2 of the manual.
+\def\setshadegrid{%
+ \!ifnextchar{s}{\!getspan }
+ {\!getspan span <\!dshade>}}
+\def\!getspan span <#1>{%
+ \!dshade=#1\relax
+ \!ifcoordmode
+ \let\!GRnext=\!GRccheckforAP
+ \else
+ \let\!GRnext=\!GRdcheckforAP
+ \fi
+ \!GRnext}
+\def\!GRccheckforAP{%
+ \!ifnextchar{p}{\!cgetanchor }
+ {\!cgetanchor point at {\!xshadesave} {\!yshadesave} }}
+\def\!cgetanchor point at #1 #2 {%
+ \edef\!xshadesave{#1}\edef\!yshadesave{#2}%
+ \!xshade=\!xshadesave\!xunit \!yshade=\!yshadesave\!yunit
+ \ignorespaces}
+\def\!GRdcheckforAP{%
+ \!ifnextchar{p}{\!dgetanchor}%
+ {\ignorespaces}}
+\def\!dgetanchor point at #1 #2 {%
+ \!xshade=#1\relax \!yshade=#2\relax
+ \ignorespaces}
+
+% ** \setshadesymbol [<LS, RS, BS, TS>] ({SHADESYMBOL}
+% ** <XDIMEN,YDIMEN> [ORIENTATION])
+% ** Saves SHADESYMBOL away in an hbox for use with shading routines.
+% ** A shade symbol will not be plotted if its plot position comes within
+% ** distance LS of the left boundary, RS of the right boundary, TS of the
+% ** top boundary, BS of the bottom boundary. These parameters have
+% ** default values that should work in most cases (see below).
+% ** To override a default value, specify the replacement value
+% ** in the appropriate subfield of the shrinkages field.
+% ** 0pt may be coded as "z" (without the quotes). To accept a
+% ** default value, leave the field empty. Thus
+% ** [,z,,5pt] sets LS=default, RS=0pt, BS=default, TS=5pt .
+% ** Skipping the shrinkages field accepts all the defaults.
+% ** See Subsection 7.1 of the manual.
+\def\setshadesymbol{%
+ \!ifnextchar<{\!setshadesymbol}{\!setshadesymbol<,,,> }}
+
+\def\!setshadesymbol <#1,#2,#3,#4> (#5#6){%
+% ** set the shadesymbol
+ \!setputobject{#5}{#6}%
+ \setbox\!shadesymbol=\box\!putobject%
+ \!shadesymbolxshift=\!xshift \!shadesymbolyshift=\!yshift
+%
+% ** set the shrinkages
+ \!dimenA=\!xshift \advance\!dimenA \!smidge% ** default LS = xshift - smidge
+ \!override\!dimenA{#1}\!lshrinkage%
+ \!dimenA=\!wd \advance \!dimenA -\!xshift% ** default RS = width - xshift
+ \advance\!dimenA \!smidge% - smidge
+ \!override\!dimenA{#2}\!rshrinkage
+ \!dimenA=\!dp \advance \!dimenA \!yshift% ** default BS = depth + yshift
+ \advance\!dimenA \!smidge% - smidge
+ \!override\!dimenA{#3}\!bshrinkage
+ \!dimenA=\!ht \advance \!dimenA -\!yshift% ** default TS = height - yshift
+ \advance\!dimenA \!smidge% - smidge
+ \!override\!dimenA{#4}\!tshrinkage
+ \ignorespaces}
+\def\!smidge{-.2pt}%
+
+% ** \!override{NOMINAL DIMEN}{REPLACEMENT DIMEN}{DIMEN}
+% ** Overrides the NOMINAL DIMEN by the REPLACEMENT DIMEN to produce DIMEN,
+% ** according to the following rules:
+% ** REPLACEMENT DIMEN empty: DIMEN <-- NOMINAL DIMEN
+% ** REPLACEMENT DIMEN z: DIMEN <-- 0pt
+% ** otherwise: DIMEN <-- REPLACEMENT DIMEN
+% ** DIMEN must be a dimension register
+\def\!override#1#2#3{%
+ \edef\!!override{#2}%
+ \ifx \!!override\empty
+ #3=#1\relax
+ \else
+ \if z\!!override
+ #3=\!zpt
+ \else
+ \ifx \!!override\!blankz
+ #3=\!zpt
+ \else
+ #3=#2\relax
+ \fi
+ \fi
+ \fi
+ \ignorespaces}
+\def\!blankz{ z}
+
+\setshadesymbol ({\fiverm .})% ** initialize plotsymbol
+% ** \fivesy ^^B is a small cross
+
+
+% ** \!startvshade [at] (xS,ybS,ytS)
+% ** Initiates vertical shading mode
+\def\!startvshade#1(#2,#3,#4){%
+ \let\!!xunit=\!xunit%
+ \let\!!yunit=\!yunit%
+ \let\!!xshade=\!xshade%
+ \let\!!yshade=\!yshade%
+ \def\!getshrinkages{\!vgetshrinkages}%
+ \let\!setshadelocation=\!vsetshadelocation%
+ \!xS=\!M{#2}\!!xunit
+ \!ybS=\!M{#3}\!!yunit
+ \!ytS=\!M{#4}\!!yunit
+ \!shadexorigin=\!xorigin \advance \!shadexorigin \!shadesymbolxshift
+ \!shadeyorigin=\!yorigin \advance \!shadeyorigin \!shadesymbolyshift
+ \ignorespaces}
+
+% ** \!starthshade [at] (yS,xlS,xrS)
+% ** Initiates horizontal shading mode
+\def\!starthshade#1(#2,#3,#4){%
+ \let\!!xunit=\!yunit%
+ \let\!!yunit=\!xunit%
+ \let\!!xshade=\!yshade%
+ \let\!!yshade=\!xshade%
+ \def\!getshrinkages{\!hgetshrinkages}%
+ \let\!setshadelocation=\!hsetshadelocation%
+ \!xS=\!M{#2}\!!xunit
+ \!ybS=\!M{#3}\!!yunit
+ \!ytS=\!M{#4}\!!yunit
+ \!shadexorigin=\!xorigin \advance \!shadexorigin \!shadesymbolxshift
+ \!shadeyorigin=\!yorigin \advance \!shadeyorigin \!shadesymbolyshift
+ \ignorespaces}
+
+
+% ** \!lattice{ANCHOR}{SPAN}{LOCATION}{INDEX}{LATTICE LOCATION}
+% ** Consider the lattice with points ANCHOR + j*SPAN. This routine determines
+% ** the index k of the smallest lattice point >= LOCATION, and sets
+% ** LATTICE LOCATION = ANCHOR + k*SPAN.
+% ** INDEX is assumed to be a count register, LATTICE LOCATION a dimen reg.
+\def\!lattice#1#2#3#4#5{%
+ \!dimenA=#1% ** dimA = ANCHOR
+ \!dimenB=#2% ** dimB = SPAN (assumed > 0pt)
+ \!countB=\!dimenB% ** ctB = SPAN, as a count
+%
+% ** Determine index of smallest lattice point >= LOCATION
+ \!dimenC=#3% ** dimC = LOCATION
+ \advance\!dimenC -\!dimenA% ** now dimC = LOCATION-ANCHOR
+ \!countA=\!dimenC% ** ctA = above, as a count
+ \divide\!countA \!countB% ** now ctA = desired index, if dimC <= 0
+ \ifdim\!dimenC>\!zpt
+ \!dimenD=\!countA\!dimenB% ** (tentative k)*span
+ \ifdim\!dimenD<\!dimenC% ** if this is false, ctA = desired index
+ \advance\!countA 1 % ** if true, have to add 1
+ \fi
+ \fi
+%
+ \!dimenC=\!countA\!dimenB% ** lattice location = anchor + ctA*span
+ \advance\!dimenC \!dimenA
+ #4=\!countA% ** the desired index
+ #5=\!dimenC% ** corresponding lattice location
+ \ignorespaces}
+
+
+% ** \!qshade [with shrinkages] [[LS,RS,BS,TS]]
+% ***** during vertical shading:
+% ** [the region from (xS,ybS,ytS) to] (xM,ybM,ytM) [and] (xE,ybE,ytE)
+% ** Shades the region {(x,y): xS <= x <= xE, yb(x) <= y <= yt(x)}, where
+% ** yb is the quadratic thru (xS,ybS) & (xM,ybM) & (xE,ybE)
+% ** yt is the quadratic thru (xS,ytS) & (xM,ybM) & (xE,ytE)
+% ** xS,ybS,ytS are either given by \!startvshade or carried over
+% ** as the ending values of the immediately preceding \!qshade.
+% ** For the interpretation of LS, RS, BS, & TS, see \setshadesymbol. The
+% ** values set there can be overridden, for the course of this \!qshade
+% ** only, in the same manner as overrides are specified for
+% ** \setshadesymbol.
+% ***** during horizontal shading:
+% ** [the region from (yS,xlS,xrS) to] (yM,xlM,xrM) [and] (yE,xlE,xrE)
+\def\!qshade#1(#2,#3,#4)#5(#6,#7,#8){%
+ \!xM=\!M{#2}\!!xunit
+ \!ybM=\!M{#3}\!!yunit
+ \!ytM=\!M{#4}\!!yunit
+ \!xE=\!M{#6}\!!xunit
+ \!ybE=\!M{#7}\!!yunit
+ \!ytE=\!M{#8}\!!yunit
+ \!getcoeffs\!xS\!ybS\!xM\!ybM\!xE\!ybE\!ybB\!ybC%**Get coefficients B & C for
+ \!getcoeffs\!xS\!ytS\!xM\!ytM\!xE\!ytE\!ytB\!ytC%**y=y0 + B(x-X0) + C(x-X0)**2
+ \def\!getylimits{\!qgetylimits}%
+ \!shade{#1}\ignorespaces}
+
+% ** \!lshade ... (xE,ybE,ytE)
+% ** This is like \!qshade, but the top and bottom boundaries are linear,
+% ** rather than quadratic.
+\def\!lshade#1(#2,#3,#4){%
+ \!xE=\!M{#2}\!!xunit
+ \!ybE=\!M{#3}\!!yunit
+ \!ytE=\!M{#4}\!!yunit
+ \!dimenE=\!xE \advance \!dimenE -\!xS% ** xE-xS
+ \!dimenC=\!ytE \advance \!dimenC -\!ytS% ** ytE-ytS
+ \!divide\!dimenC\!dimenE\!ytB% ** ytB = (ytE-ytS)/(xE-xS)
+ \!dimenC=\!ybE \advance \!dimenC -\!ybS% ** ybE-ybS
+ \!divide\!dimenC\!dimenE\!ybB% ** ybB = (ybE-ybS)/(xE-xS)
+ \def\!getylimits{\!lgetylimits}%
+ \!shade{#1}\ignorespaces}
+
+% ** \!getcoeffs{X0}{Y0}{X1}{Y1}{X2}{Y2}{B}{C}
+% ** Finds B and C such that the quadratic y = Y0 + B(x-X0) + C(x-X0)**2
+% ** passes through (X1,Y1) and (X2,Y2): when X0=0=Y0, the formulas are:
+% ** B = S1 - X1*C, C = (S2-S1)/X2
+% ** with
+% ** S1 = Y1/X1, S2 = (Y2-Y1)/(X2-X1).
+\def\!getcoeffs#1#2#3#4#5#6#7#8{%
+ \!dimenC=#4\advance \!dimenC -#2% ** dimC=Y1-Y0
+ \!dimenE=#3\advance \!dimenE -#1% ** dimE=X1-X0
+ \!divide\!dimenC\!dimenE\!dimenF% ** dimF=S1
+ \!dimenC=#6\advance \!dimenC -#4% ** dimC=Y2-Y1
+ \!dimenH=#5\advance \!dimenH -#3% ** dimH=X2-X1
+ \!divide\!dimenC\!dimenH\!dimenG% ** dimG=S2
+ \advance\!dimenG -\!dimenF% ** dimG=S2-S1
+ \advance \!dimenH \!dimenE% ** dimH=X2-X0
+ \!divide\!dimenG\!dimenH#8% ** C=(S2-S1)/(X2-X0)
+ \!removept#8\!t% ** C, without "pt"
+ #7=-\!t\!dimenE% ** -C*(X1-X0)
+ \advance #7\!dimenF% ** B=S1-C*(X1-X0)
+ \ignorespaces}
+
+
+\def\!shade#1{%
+% ** Get LS,RS,BS,TS for this panel
+ \!getshrinkages#1<,,,>\!nil% % ** now effective LS=dimE, RS=dimF,
+% ** BS=dimG, TS=dimH
+ \advance \!dimenE \!xS% ** now dimE=xS+LS
+ \!lattice\!!xshade\!dshade\!dimenE% ** set parity=index of left-mst x-lattice
+ \!parity\!xpos% ** point >= xS+LS, xpos=its location
+ \!dimenF=-\!dimenF% ** set dimF=xE-RS
+ \advance\!dimenF \!xE
+%
+ \!loop\!not{\ifdim\!xpos>\!dimenF}% ** loop over x-lattice points <= xE-RS
+ \!shadecolumn%
+ \advance\!xpos \!dshade% ** move over to next column
+ \advance\!parity 1% ** increase index of x-point
+ \repeat
+%
+ \!xS=\!xE% ** shift ending values to starting values
+ \!ybS=\!ybE
+ \!ytS=\!ytE
+ \ignorespaces}
+
+
+\def\!vgetshrinkages#1<#2,#3,#4,#5>#6\!nil{%
+ \!override\!lshrinkage{#2}\!dimenE
+ \!override\!rshrinkage{#3}\!dimenF
+ \!override\!bshrinkage{#4}\!dimenG
+ \!override\!tshrinkage{#5}\!dimenH
+ \ignorespaces}
+\def\!hgetshrinkages#1<#2,#3,#4,#5>#6\!nil{%
+ \!override\!lshrinkage{#2}\!dimenG
+ \!override\!rshrinkage{#3}\!dimenH
+ \!override\!bshrinkage{#4}\!dimenE
+ \!override\!tshrinkage{#5}\!dimenF
+ \ignorespaces}
+
+
+\def\!shadecolumn{%
+ \!dxpos=\!xpos
+ \advance\!dxpos -\!xS% ** dx = x - xS
+ \!removept\!dxpos\!dx% ** ditto, without "pt"
+ \!getylimits% ** get top and bottom y-values
+ \advance\!ytpos -\!dimenH% ** less TS
+ \advance\!ybpos \!dimenG% ** plus BS
+ \!yloc=\!!yshade% ** get anchor point for this column
+ \ifodd\!parity
+ \advance\!yloc \!dshade
+ \fi
+ \!lattice\!yloc{2\!dshade}\!ybpos%
+ \!countA\!ypos% ** ypos=smallest y point for this column
+ \!dimenA=-\!shadexorigin \advance \!dimenA \!xpos% ** over
+ \loop\!not{\ifdim\!ypos>\!ytpos}% ** loop over ypos <= yt(t)
+ \!setshadelocation% ** vmode: xloc=xpos, yloc=ypos
+% ** hmode: xloc=ypos, yloc=xpos
+ \!rotateaboutpivot\!xloc\!yloc%
+ \!dimenA=-\!shadexorigin \advance \!dimenA \!xloc% ** over
+ \!dimenB=-\!shadeyorigin \advance \!dimenB \!yloc% ** up
+ \kern\!dimenA \raise\!dimenB\copy\!shadesymbol \kern-\!dimenA
+ \advance\!ypos 2\!dshade
+ \repeat
+ \ignorespaces}
+
+\def\!qgetylimits{%
+ \!dimenA=\!dx\!ytC
+ \advance\!dimenA \!ytB% ** yt(t)=ytS + dx*(Bt + dx*Ct)
+ \!ytpos=\!dx\!dimenA
+ \advance\!ytpos \!ytS
+ \!dimenA=\!dx\!ybC
+ \advance\!dimenA \!ybB% ** yb(t)=ybS + dx*(Bb + dx*Cb)
+ \!ybpos=\!dx\!dimenA
+ \advance\!ybpos \!ybS}
+
+\def\!lgetylimits{%
+ \!ytpos=\!dx\!ytB% ** yt(t)=ytS + dx*Bt
+ \advance\!ytpos \!ytS
+ \!ybpos=\!dx\!ybB% ** yb(t)=ybS + dx*Bb
+ \advance\!ybpos \!ybS}
+
+\def\!vsetshadelocation{% ** vmode: xloc=xpos, yloc=ypos
+ \!xloc=\!xpos
+ \!yloc=\!ypos}
+\def\!hsetshadelocation{% ** hmode: xloc=ypos, yloc=xpos
+ \!xloc=\!ypos
+ \!yloc=\!xpos}
+
+
+% **************************************
+% *** TICKS (Draws ticks on graphs) ***
+% **************************************
+
+% ** User commands
+% ** \ticksout
+% ** \ticksin
+% ** \gridlines
+% ** \nogridlines
+% ** \loggedticks
+% ** \unloggesticks
+% ** See Subsection 3.4 of the manual
+
+% ** The following is an option of the \axis command
+% ** ticks
+% ** [in] [out]
+% ** [long] [short] [length <LENGTH>]
+% ** [width <WIDTH>]
+% ** [andacross] [butnotacross]
+% ** [logged] [unlogged]
+% ** [unlabeled] [numbered] [withvalues VALUE1 VALUE2 ... VALUEk / ]
+% ** [quantity Q] [at LOC1 LOC2 ... LOCk / ] [from LOC1 to LOC2 by
+% ** LOC_INCREMENT]
+% ** See Subsection 3.2 of the manual for the rules.
+
+% ** The various options of the tick field are processed by the
+% ** \!nextkeyword command defined below.
+% ** For example, `\!nextkeyword short ' expands to `\!ticksshort',
+% ** while `\!nextkeyword withvalues' expands to `\!tickswithvalues'.
+
+\def\!axisticks {%
+ \def\!nextkeyword##1 {%
+ \expandafter\ifx\csname !ticks##1\endcsname \relax
+ \def\!next{\!fixkeyword{##1}}%
+ \else
+ \def\!next{\csname !ticks##1\endcsname}%
+ \fi
+ \!next}%
+ \!axissetup
+ \def\!axissetup{\relax}%
+ \edef\!ticksinoutsign{\!ticksinoutSign}%
+ \!ticklength=\longticklength
+ \!tickwidth=\linethickness
+ \!gridlinestatus
+ \!setticktransform
+ \!maketick
+ \!tickcase=0
+ \def\!LTlist{}%
+ \!nextkeyword}
+
+\def\ticksout{%
+ \def\!ticksinoutSign{+}}
+\def\ticksin{%
+ \def\!ticksinoutSign{-}}
+\ticksout
+
+\def\gridlines{%
+ \def\!gridlinestatus{\!gridlinestootrue}}
+\def\nogridlines{%
+ \def\!gridlinestatus{\!gridlinestoofalse}}
+\nogridlines
+
+\def\loggedticks{%
+ \def\!setticktransform{\let\!ticktransform=\!logten}}
+\def\unloggedticks{%
+ \def\!setticktransform{\let\!ticktransform=\!donothing}}
+\def\!donothing#1#2{\def#2{#1}}
+\unloggedticks
+
+% ** \!ticks/ : terminates read of tick options
+\expandafter\def\csname !ticks/\endcsname{%
+ \!not {\ifx \!LTlist\empty}
+ \!placetickvalues
+ \fi
+ \def\!tickvalueslist{}%
+ \def\!LTlist{}%
+ \expandafter\csname !axis/\endcsname}
+
+\def\!maketick{%
+ \setbox\!boxA=\hbox{%
+ \beginpicture
+ \!setdimenmode
+ \setcoordinatesystem point at {\!zpt} {\!zpt}
+ \linethickness=\!tickwidth
+ \ifdim\!ticklength>\!zpt
+ \putrule from {\!zpt} {\!zpt} to
+ {\!ticksinoutsign\!tickxsign\!ticklength}
+ {\!ticksinoutsign\!tickysign\!ticklength}
+ \fi
+ \if!gridlinestoo
+ \putrule from {\!zpt} {\!zpt} to
+ {-\!tickxsign\!xaxislength} {-\!tickysign\!yaxislength}
+ \fi
+ \endpicturesave <\!Xsave,\!Ysave>}%
+ \wd\!boxA=\!zpt}
+
+\def\!ticksin{%
+ \def\!ticksinoutsign{-}%
+ \!maketick
+ \!nextkeyword}
+
+\def\!ticksout{%
+ \def\!ticksinoutsign{+}%
+ \!maketick
+ \!nextkeyword}
+
+\def\!tickslength<#1> {%
+ \!ticklength=#1\relax
+ \!maketick
+ \!nextkeyword}
+
+\def\!tickslong{%
+ \!tickslength<\longticklength> }
+
+\def\!ticksshort{%
+ \!tickslength<\shortticklength> }
+
+\def\!tickswidth<#1> {%
+ \!tickwidth=#1\relax
+ \!maketick
+ \!nextkeyword}
+
+\def\!ticksandacross{%
+ \!gridlinestootrue
+ \!maketick
+ \!nextkeyword}
+
+\def\!ticksbutnotacross{%
+ \!gridlinestoofalse
+ \!maketick
+ \!nextkeyword}
+
+\def\!tickslogged{%
+ \let\!ticktransform=\!logten
+ \!nextkeyword}
+
+\def\!ticksunlogged{%
+ \let\!ticktransform=\!donothing
+ \!nextkeyword}
+
+\def\!ticksunlabeled{%
+ \!tickcase=0
+ \!nextkeyword}
+
+\def\!ticksnumbered{%
+ \!tickcase=1
+ \!nextkeyword}
+
+\def\!tickswithvalues#1/ {%
+ \edef\!tickvalueslist{#1! /}%
+ \!tickcase=2
+ \!nextkeyword}
+
+\def\!ticksquantity#1 {%
+ \ifnum #1>1
+ \!updatetickoffset
+ \!countA=#1\relax
+ \advance \!countA -1
+ \!ticklocationincr=\!axisLength
+ \divide \!ticklocationincr \!countA
+ \!ticklocation=\!axisstart
+ \loop \!not{\ifdim \!ticklocation>\!axisend}
+ \!placetick\!ticklocation
+ \ifcase\!tickcase
+ \relax % Case 0: no labels
+ \or
+ \relax % Case 1: numbered -- not available here
+ \or
+ \expandafter\!gettickvaluefrom\!tickvalueslist
+ \edef\!tickfield{{\the\!ticklocation}{\!value}}%
+ \expandafter\!listaddon\expandafter{\!tickfield}\!LTlist%
+ \fi
+ \advance \!ticklocation \!ticklocationincr
+ \repeat
+ \fi
+ \!nextkeyword}
+
+\def\!ticksat#1 {%
+ \!updatetickoffset
+ \edef\!Loc{#1}%
+ \if /\!Loc
+ \def\next{\!nextkeyword}%
+ \else
+ \!ticksincommon
+ \def\next{\!ticksat}%
+ \fi
+ \next}
+
+\def\!ticksfrom#1 to #2 by #3 {%
+ \!updatetickoffset
+ \edef\!arg{#3}%
+ \expandafter\!separate\!arg\!nil
+ \!scalefactor=1
+ \expandafter\!countfigures\!arg/
+ \edef\!arg{#1}%
+ \!scaleup\!arg by\!scalefactor to\!countE
+ \edef\!arg{#2}%
+ \!scaleup\!arg by\!scalefactor to\!countF
+ \edef\!arg{#3}%
+ \!scaleup\!arg by\!scalefactor to\!countG
+ \loop \!not{\ifnum\!countE>\!countF}
+ \ifnum\!scalefactor=1
+ \edef\!Loc{\the\!countE}%
+ \else
+ \!scaledown\!countE by\!scalefactor to\!Loc
+ \fi
+ \!ticksincommon
+ \advance \!countE \!countG
+ \repeat
+ \!nextkeyword}
+
+\def\!updatetickoffset{%
+ \!dimenA=\!ticksinoutsign\!ticklength
+ \ifdim \!dimenA>\!offset
+ \!offset=\!dimenA
+ \fi}
+
+\def\!placetick#1{%
+ \if!xswitch
+ \!xpos=#1\relax
+ \!ypos=\!axisylevel
+ \else
+ \!xpos=\!axisxlevel
+ \!ypos=#1\relax
+ \fi
+ \advance\!xpos \!Xsave
+ \advance\!ypos \!Ysave
+ \kern\!xpos\raise\!ypos\copy\!boxA\kern-\!xpos
+ \ignorespaces}
+
+\def\!gettickvaluefrom#1 #2 /{%
+ \edef\!value{#1}%
+ \edef\!tickvalueslist{#2 /}%
+ \ifx \!tickvalueslist\!endtickvaluelist
+ \!tickcase=0
+ \fi}
+\def\!endtickvaluelist{! /}
+
+\def\!ticksincommon{%
+ \!ticktransform\!Loc\!t
+ \!ticklocation=\!t\!!unit
+ \advance\!ticklocation -\!!origin
+ \!placetick\!ticklocation
+ \ifcase\!tickcase
+ \relax % Case 0: no labels
+ \or % Case 1: numbered
+ \ifdim\!ticklocation<-\!!origin
+ \edef\!Loc{$\!Loc$}%
+ \fi
+ \edef\!tickfield{{\the\!ticklocation}{\!Loc}}%
+ \expandafter\!listaddon\expandafter{\!tickfield}\!LTlist%
+ \or % Case 2: labeled
+ \expandafter\!gettickvaluefrom\!tickvalueslist
+ \edef\!tickfield{{\the\!ticklocation}{\!value}}%
+ \expandafter\!listaddon\expandafter{\!tickfield}\!LTlist%
+ \fi}
+
+\def\!separate#1\!nil{%
+ \!ifnextchar{-}{\!!separate}{\!!!separate}#1\!nil}
+\def\!!separate-#1\!nil{%
+ \def\!sign{-}%
+ \!!!!separate#1..\!nil}
+\def\!!!separate#1\!nil{%
+ \def\!sign{+}%
+ \!!!!separate#1..\!nil}
+\def\!!!!separate#1.#2.#3\!nil{%
+ \def\!arg{#1}%
+ \ifx\!arg\!empty
+ \!countA=0
+ \else
+ \!countA=\!arg
+ \fi
+ \def\!arg{#2}%
+ \ifx\!arg\!empty
+ \!countB=0
+ \else
+ \!countB=\!arg
+ \fi}
+
+\def\!countfigures#1{%
+ \if #1/%
+ \def\!next{\ignorespaces}%
+ \else
+ \multiply\!scalefactor 10
+ \def\!next{\!countfigures}%
+ \fi
+ \!next}
+
+\def\!scaleup#1by#2to#3{%
+ \expandafter\!separate#1\!nil
+ \multiply\!countA #2\relax
+ \advance\!countA \!countB
+ \if -\!sign
+ \!countA=-\!countA
+ \fi
+ #3=\!countA
+ \ignorespaces}
+
+\def\!scaledown#1by#2to#3{%
+ \!countA=#1\relax% ** get original #
+ \ifnum \!countA<0 % ** take abs value,
+ \def\!sign{-}% ** remember sign
+ \!countA=-\!countA
+ \else
+ \def\!sign{}%
+ \fi
+ \!countB=\!countA% ** copy |#|
+ \divide\!countB #2\relax% ** integer part (|#|/sf)
+ \!countC=\!countB% ** get sf * (|#|/sf)
+ \multiply\!countC #2\relax
+ \advance \!countA -\!countC% ** ctA is now remainder
+ \edef#3{\!sign\the\!countB.}% ** +- integerpart.
+ \!countC=\!countA % ** Tack on proper number
+ \ifnum\!countC=0 % ** of zeros after .
+ \!countC=1
+ \fi
+ \multiply\!countC 10
+ \!loop \ifnum #2>\!countC
+ \edef#3{#3\!zero}%
+ \multiply\!countC 10
+ \repeat
+ \edef#3{#3\the\!countA}% ** Add on rest of remainder
+ \ignorespaces}
+
+\def\!placetickvalues{%
+ \advance\!offset \tickstovaluesleading
+ \if!xswitch
+ \setbox\!boxA=\hbox{%
+ \def\\##1##2{%
+ \!dimenput {##2} [B] (##1,\!axisylevel)}%
+ \beginpicture
+ \!LTlist
+ \endpicturesave <\!Xsave,\!Ysave>}%
+ \!dimenA=\!axisylevel
+ \advance\!dimenA -\!Ysave
+ \advance\!dimenA \!tickysign\!offset
+ \if -\!tickysign
+ \advance\!dimenA -\ht\!boxA
+ \else
+ \advance\!dimenA \dp\!boxA
+ \fi
+ \advance\!offset \ht\!boxA
+ \advance\!offset \dp\!boxA
+ \!dimenput {\box\!boxA} [Bl] <\!Xsave,\!Ysave> (\!zpt,\!dimenA)
+ \else
+ \setbox\!boxA=\hbox{%
+ \def\\##1##2{%
+ \!dimenput {##2} [r] (\!axisxlevel,##1)}%
+ \beginpicture
+ \!LTlist
+ \endpicturesave <\!Xsave,\!Ysave>}%
+ \!dimenA=\!axisxlevel
+ \advance\!dimenA -\!Xsave
+ \advance\!dimenA \!tickxsign\!offset
+ \if -\!tickxsign
+ \advance\!dimenA -\wd\!boxA
+ \fi
+ \advance\!offset \wd\!boxA
+ \!dimenput {\box\!boxA} [Bl] <\!Xsave,\!Ysave> (\!dimenA,\!zpt)
+ \fi}
+
+
+\normalgraphs
+\catcode`!=12 % ***** THIS MUST NEVER BE OMITTED
diff --git a/graphics/pictex/postpictex.tex b/graphics/pictex/postpictex.tex
index d46612a862..b70bc1cdaf 100644
--- a/graphics/pictex/postpictex.tex
+++ b/graphics/pictex/postpictex.tex
@@ -1,4 +1,9 @@
-% This is postpictex.tex Version 1.1 9/10/87
+% This is postpictex.tex
+% Version 1.1 9/10/87.
+% See section 10 of the PiCTeX manual.
+% Version 1.1b 2021-06-08 extended LaTeX support for picture environment
+% LaTeX Project (with Michael Wichura's permission for the update)
+% add \put and \multiput to the list of commands restored for LaTeX.
% To use the PiCTeX macros under LaTeX, you first need to \input the
% file prepictex.tex, then the main corpus of PiCTeX macros (pictex.tex),
@@ -39,6 +44,13 @@
\let\linethickness=\!latexlinethickness
\let\pictexlinethickness=\!pictexlinethickness
+% 2021-06-08 and same for \put and \multiput
+\let\put=\!latexput
+\let\pictexput=\!pictexput
+\let\multiput=\!latexmultiput
+\let\pictexmultiput=\!pictexmultiput
+
+
% Reset LaTeX's default meaning of \\
\let\\=\@normalcr
\catcode`@=12 \catcode`!=12
diff --git a/graphics/pictex/prepictex.tex b/graphics/pictex/prepictex.tex
index cd7f92e2fe..a0e825066f 100644
--- a/graphics/pictex/prepictex.tex
+++ b/graphics/pictex/prepictex.tex
@@ -1,4 +1,8 @@
-% This is prepictex.tex Version 1.1 9/10/87
+% This is prepictex.tex
+% Version 1.1 9/10/87. See section 10 of the PiCTeX manual.
+% Version 1.1b 2021-06-08 extended LaTeX support for picture environment
+% LaTeX Project (with Michael Wichura's permission for the update)
+% Support lengths in LaTeX picture mode coordinates in recent LaTeX.
% To use the PiCTeX macros under LaTeX, you first need to \input this
% file, then the main corpus of PiCTeX macros (pictex.tex), and then
@@ -20,14 +24,16 @@
\let\!latexput=\put
% Redefine the LaTeX \@picture macro
+% 2021-06-08 Adjust so working for old and new LaTeX releases
+\let\!latex@picture\@picture
\def\@picture(#1,#2)(#3,#4){%
- \@picht #2\unitlength
- \setbox\@picbox\hbox to #1\unitlength\bgroup
+ \!latex@picture(#1,#2)(#3,#4)%
\let\endpicture=\!latexendpicture
\let\frame=\!latexframe
\let\linethickness=\!latexlinethickness
\let\multiput=\!latexmultiput
\let\put=\!latexput
- \hskip -#3\unitlength \lower #4\unitlength \hbox\bgroup}
+ \ignorespaces}
+
\catcode`@=12 \catcode`!=12
diff --git a/macros/generic/wichura-table/README.txt b/macros/generic/wichura-table/README.txt
new file mode 100644
index 0000000000..5ce8820fe6
--- /dev/null
+++ b/macros/generic/wichura-table/README.txt
@@ -0,0 +1,18 @@
+The TaBlE macro package is released under the LaTeX Project Public
+License, version 1 or (at your option) any later version.
+
+TABLE 1.0
+Copyright Michael J. Wichura August 1988
+
+
+
+NOTE. There is a detailed manual for TaBlE available from CTAN;
+ see TaBlE_manual.pdf
+
+Uploaded to CTAN as
+
+https://ctan.org/pkg/wichura-table
+(macros/generic/wichura-table/table.tex)
+
+by David Carlisle with Michael's permission
+and no changes to the files other than this README.
diff --git a/macros/generic/wichura-table/TaBlE_manual.pdf b/macros/generic/wichura-table/TaBlE_manual.pdf
new file mode 100644
index 0000000000..e9c4d80ff4
--- /dev/null
+++ b/macros/generic/wichura-table/TaBlE_manual.pdf
Binary files differ
diff --git a/macros/generic/wichura-table/table.tex b/macros/generic/wichura-table/table.tex
new file mode 100644
index 0000000000..cb21f24109
--- /dev/null
+++ b/macros/generic/wichura-table/table.tex
@@ -0,0 +1,1961 @@
+% TABLE 1.0
+% Copyright Michael J. Wichura August 1988
+
+
+% The TABLE macros are divided into sections, roughly according to
+% function:
+
+% Section Name Function
+% a Allocation Allocates storage registers for parameters.
+% f Format Reads format section; builds preamble for \halign;
+% processes \ReFormat command.
+% g Get Value Converts "spec"'s (as in spec_{LT}) to
+% corresponding "values"'s (as in value_{LT}).
+% h Hacks Utility macros; error messages; miscellaneous commands.
+% k Keys Definition and scanning of format keys.
+% n Numeric Macros for TABLE's numeric format.
+% s Struts Macros for struts.
+% t Tables Sets up \halign for table; end-of-row processing;
+% alternate vertical rules; spanning; horizontal
+% lines; stretching and shrinking; repositioning
+% commands.
+
+% The name of each internal macro begins with the prefix "\!t", the
+% "!" having category code 11, followed by the letter of the section
+% in which the macro is defined. For example, a macro beginning "\!th"
+% is defined in Section h (Hacks). There a few exceptions:
+% the general purpose macros "\!ttemp", "\!ttempa", "\!ttempb", and
+% "\!tnext" are repeatedly defined on the spot as the need arises.
+
+% External macros (and active characters) are defined in the following
+% sections:
+% Macro Section
+% " t
+% \- t
+% \= t
+% \ActivateBarAndQuote h
+% \AugmentedTableStrut s
+% \BackSpace h
+% \BeginFormat f
+% \BeginTable t
+% \BeginTableParBox a
+% \Center t
+% \ColumnWidthFactor a
+% \ColumnWidthUnit a
+% \DQuote h
+% \EndFormat k (\EndFormat is actually a key)
+% \EndTable t
+% \EndTableParBox a
+% \Enlarge s
+% \enlarge s
+% \EveryTable a
+% \EveryTableParBox a
+% \Expand t
+% \InterColumnSpaceFactor a
+% \InterColumnSpaceUnit a
+% \JustCenter t
+% \JustLeft t
+% \JustRight t
+% \KernFactor a
+% \KernUnit a
+% \Left t
+% \LeftTabskip a
+% \LineThicknessFactor a
+% \LineThicknessUnit a
+% \LongLines t
+% \Lower h
+% \MakeStrut s
+% \NewFormatKey k
+% \NormalCWU a
+% \NormalICSU a
+% \NormalKU a
+% \NormalLTU a
+% \NormalSU a
+% \NormalTableUnits a
+% \OpenUp s
+% \PseudoVrule t
+% \Raise h
+% \ReadFormatKeys k
+% \ReFormat f
+% \Right t
+% \RightTabskip a
+% \SetTableToWidth t
+% \Smash h
+% \StandardTableStrut s
+% \StrutDepthFactor a
+% \StrutHeightFactor a
+% \StrutUnit a
+% \TaBlE h
+% \TracingFormats a
+% \TracingKeys a
+% \Use t
+% \use t
+% \VBar h
+% \Vspace h
+% \VspaceFactor a
+% \WidenTableBy t
+% \\ t
+% \_ t
+% \| t
+% | t
+% ~ t
+%
+\catcode `\!=11
+\catcode `\@=11
+
+% Don't try to read the TABLE macros until after you've read the
+% TABLE manual. The internal documentation of the macros is
+% sketchy; you need the manual to understand what's going on.
+% You should also review the material on \halign s in the TeXbook,
+% since TABLE uses an \halign to perform its alignments.
+
+% In studying the TABLE macros, you should start by skimming the
+% macros in the "miscellaneous hacks", "error messages", and "loops"
+% subsections of Section h, as well as the "\GetValue" macro in
+% Section g; these macros are called many times by the other macros.
+% To continue with a "bottom-up" approach, read next Sections k,
+% f, and t. (Top-downers should reverse the order.) The other
+% Sections can be looked at as the need arises.
+
+
+
+% *********************************************************************
+% SECTION A: ALLOCATION
+% *********************************************************************
+
+\let\!tacr=\\ % Save meaning of \\ (Needed if TABLE is used with LaTeX
+
+% *********************************************************************
+% TABLE PARAMETERS: Units
+% *********************************************************************
+
+\newdimen\LineThicknessUnit
+\newdimen\StrutUnit
+\newskip \InterColumnSpaceUnit
+\newdimen\ColumnWidthUnit
+\newdimen\KernUnit
+
+\let\!taLTU=\LineThicknessUnit % Used in preamble
+\let\!taCWU=\ColumnWidthUnit % Used in preamble
+\let\!taKU =\KernUnit % Used in preamble
+
+\newtoks\NormalTLTU
+\newtoks\NormalTSU
+\newtoks\NormalTICSU
+\newtoks\NormalTCWU
+\newtoks\NormalTKU
+
+% NOTE: The user should modify the following DEFAULTS to suit his/her
+% taste, and output device:
+%\def\PixelsPerInch{300}
+\NormalTLTU={1in \divide \LineThicknessUnit by 300 }
+\NormalTSU ={\normalbaselineskip
+ \divide \StrutUnit by 11 } % 11 = 8+3 = NormalT Height+Depth Factors
+\NormalTICSU={.5em plus 1fil minus .25em} % .5em = width of a digit
+\NormalTCWU ={.5em}
+\NormalTKU ={.5em}
+
+\def\NormalTableUnits{%
+ \LineThicknessUnit =\the\NormalTLTU
+ \StrutUnit =\the\NormalTSU
+ \InterColumnSpaceUnit=\the\NormalTICSU
+ \ColumnWidthUnit =\the\NormalTCWU
+ \KernUnit =\the\NormalTKU}
+
+\NormalTableUnits
+
+% The user should issue \NormalTableUnits when setting a table
+% in a different point size, since the Table...Units themselves
+% are static while the Normal...Units vary with the point size.
+
+
+% *********************************************************************
+% TABLE PARAMETERS: Factors
+% *********************************************************************
+
+\newcount\LineThicknessFactor
+\newcount\StrutHeightFactor
+\newcount\StrutDepthFactor
+\newcount\InterColumnSpaceFactor
+\newcount\ColumnWidthFactor
+\newcount\KernFactor
+\newcount\VspaceFactor
+
+% DEFAULTS:
+\LineThicknessFactor =2
+\StrutHeightFactor =8
+\StrutDepthFactor =3
+\InterColumnSpaceFactor =3
+\ColumnWidthFactor =10
+\KernFactor =1
+\VspaceFactor =2
+
+
+% *********************************************************************
+% DIAGNOSTIC PARAMETERS
+% *********************************************************************
+
+\newcount\TracingKeys % >=1 reports new keys, >=2 reports key usage
+\newcount\TracingFormats % >=1 reports templates for columns
+ % >=2 reports \halign preamble
+
+
+% *********************************************************************
+% PARBLOCK PARAMETERS
+% *********************************************************************
+
+\def\BeginTableParBox#1{%
+ \vtop\bgroup
+ \hsize=#1
+ \normalbaselines
+ \let~=\!ttTie
+ \let\-=\!ttDH
+ \the\EveryTableParBox}
+
+\def\EndTableParBox{%
+ \MakeStrut{0pt}{\StrutDepthFactor\StrutUnit}
+ \egroup} % finishes the \vtop begun by \BeginTableParbox
+
+\newtoks\EveryTableParBox
+\EveryTableParBox={%
+ \parindent=0pt
+ \raggedright
+ \rightskip=0pt plus 4em % Provide more stretch
+ \relax}
+
+
+% *********************************************************************
+% EVERY TABLE TOKENS
+% *********************************************************************
+
+\newtoks\EveryTable
+\newtoks\!taTableSpread
+
+
+% *********************************************************************
+% Extreme left- and right- tabskips
+% *********************************************************************
+
+\newskip\LeftTabskip
+\newskip\RightTabskip
+
+
+% *********************************************************************
+% INTERNAL VARIABLES
+% *********************************************************************
+
+\newcount\!taCountA
+\newcount\!taColumnNumber
+\newcount\!taRecursionLevel % (Initially 0)
+\newcount\!ttmscount % like plain TeX's \mscount, only private
+
+\newdimen\!taDimenA % used by \Enlarge
+\newdimen\!taDimenB % used by \Enlarge
+\newdimen\!taDimenC % used by numeric.tex
+\newdimen\!taMinimumColumnWidth
+
+\newtoks\!taToksA
+
+\newtoks\!taPreamble
+\newtoks\!taDataColumnTemplate
+\newtoks\!taRuleColumnTemplate
+\newtoks\!taOldRuleColumnTemplate
+\newtoks\!taLeftGlue
+\newtoks\!taRightGlue
+
+\newskip\!taLastRegularTabskip
+
+\newif\if!taDigit
+\newif\if!taBeginFormat
+\newif\if!taOnceOnlyTabskip
+
+
+
+% *********************************************************************
+% SECTION H: HACKS
+% *********************************************************************
+
+% ****************************************************************
+% TABLE LOGO
+% ****************************************************************
+\def\TaBlE{%
+ T\kern-.27em\lower.5ex\hbox{A}\kern-.18em B\kern-.1em
+ \lower.5ex\hbox{L}\kern-.075em E}
+
+
+% ****************************************************************
+% ACTIVE CHARACTERS
+% ****************************************************************
+
+% ACTIVATE BAR AND QUOTE: Makes | and " active if they aren't
+% already active (in which case the user will probably have given
+% them special meanings); definitions are provided which effectively
+% undoes the activeness outside a Table.
+
+{\catcode`\|=13 \catcode`\"=13
+ \gdef\ActivateBarAndQuote{%
+ \ifnum \catcode`\|=13
+ \else
+ \catcode`\|=13
+ \def|{%
+ \ifmmode
+ \vert
+ \else
+ \char`\|
+ \fi}%
+ \fi
+ \ifnum \catcode`\"=13
+ \else
+ \catcode`\"=13
+ \def"{\char`\"}%
+ \fi}}
+
+% ****************************************************************
+% Macros for | and " having category code 12.
+% ****************************************************************
+{\catcode `\|=12 \catcode `\"=12
+\gdef\VBar{|}
+\gdef\DQuote{"}}
+
+
+% ****************************************************************
+% MISCELANEOUS HACKS
+% ****************************************************************
+
+% MESSAGE <Message>: Writes out <Message> to terminal and log file.
+\def\!thMessage#1{\immediate\write16{#1}\ignorespaces}
+
+% X: Abbreviation for expandafter
+\let\!thx=\expandafter
+
+% GOBBLE: Eats next token
+\def\!thGobble#1{}
+
+% SPACE TOKEN
+\def\\{\let\!thSpaceToken= }\\
+
+% HEIGHT, DEPTH, AND WIDTH
+\def\!thHeight{height}
+\def\!thDepth{depth}
+\def\!thWidth{width}
+
+% TOKSEDEF <token register>=<replacement text>: Places <replacement
+% text>, fully expanded a la \edef, in the specified <token register>.
+\def\!thToksEdef#1=#2{%
+ \edef\!ttemp{#2}%
+ #1\!thx{\!ttemp}%
+ \ignorespaces}
+
+
+% ****************************************************************
+% ERROR MESSAGES
+% ****************************************************************
+
+% STORE ERROR MSG <Control Sequence> <Message>
+% Replacement text of <Control Sequence> is a macro with Message
+% as its name. E.g., after \StoreErrorMsg\Help{Type <CR>},
+% \Help expands to "\Type <CR>"
+\def\!thStoreErrorMsg#1#2{%
+ \toks0 =\!thx{\csname #2\endcsname}%
+ \edef#1{\the\toks0 }}
+
+% READ ERROR MSG <Control sequence>
+% Continuing the above example, \ReadErrorMsg\Help produces "Type <CR>"
+\def\!thReadErrorMsg#1{%
+ \!thx\!thx\!thx\!thGobble\!thx\string #1}
+
+% ERROR <Error Message> <Error Help>
+\def\!thError#1#2{%
+ \begingroup
+ \newlinechar=`\^^J%
+ \edef\!ttemp{#2}%
+ \errhelp=\!thx{\!ttemp}%
+ \!thMessage{%
+ ^^J\!thReadErrorMsg\!thErrorMsgA
+ ^^J\!thReadErrorMsg\!thErrorMsgB}%
+ \errmessage{#1}%
+ \endgroup}
+
+% TEXT FOR ERROR MESSAGE
+\!thStoreErrorMsg\!thErrorMsgA{%
+ TABLE error; see manual for explanation.}
+\!thStoreErrorMsg\!thErrorMsgB{%
+ Type \space H <return> \space for immediate help.}
+
+% GET REPLACEMENT <Prompt Message> <Replacement Value>
+% <Replacement Vale> must be a control sequence
+\def\!thGetReplacement#1#2{%
+ \begingroup
+ \!thMessage{#1}
+ \endlinechar=-1
+ \global\read16 to#2%
+ \endgroup}
+
+
+% ****************************************************************
+% LOOP MACRO
+% ****************************************************************
+
+% LOOP ... REPEAT macro from TUGboat Vol 8 #2: 1987
+% Syntax is like that of plain TeX's \loop ... \repeat macro
+\def\!thLoop#1\repeat{%
+ \def\!thIterate{%
+ #1%
+ \!thx \!thIterate
+ \fi}%
+ \!thIterate
+ \let\!thIterate\relax}
+
+
+% ***************************************************************
+% VERTICALLY-CENTERED SMASH
+% ***************************************************************
+
+% SMASH: Like TeX's \smash, only the argument
+% is centered vertically before its height and depth are smashed to 0pt.
+\def\Smash{%
+ \relax
+ \ifmmode
+ \expandafter\mathpalette
+ \expandafter\!thDoMathVCS
+ \else
+ \expandafter\!thDoVCS
+ \fi}
+
+% DO VCS
+\def\!thDoVCS#1{%
+ \setbox\z@\hbox{#1}%
+ \!thFinishVCS}
+
+% DO MATH VCS
+\def\!thDoMathVCS#1#2{%
+ \setbox\z@\hbox{$\m@th#1{#2}$}%
+ \!thFinishVCS}
+
+% FINISH VCS
+\def\!thFinishVCS{%
+ \vbox to\z@{\vss\box\z@\vss}}
+
+
+% ***************************************************************
+% RAISE AND LOWER
+% ***************************************************************
+
+% Like TeX's \raise and \lower, except: (1) The first argument
+% to these commands is a dimension expressed in TABLE's usual conventions;
+% the default is (StrutHeightFactor+StrutDepthFactor)*StrutUnit/2
+% (2) like \smash, these commands function in math mode as well
+% as horizontal mode; (3) again like \smash, the result is declared
+% to have height and depth 0pt
+
+% Examples \Raise2{Stuff}: "Stuff" is raised 2*StrutUnit
+% \Raise {Stuff}: "Stuff" is raised a half-line
+% $\Lower(10pt){\alpha}$: "$\alpha$" is lowered 10 points
+
+% RAISE
+\def\Raise{%
+ \def\!thSign{+}%
+ \!tgGetValue\!thSetDimen}
+
+% LOWER
+\def\Lower{%
+ \def\!thSign{-}%
+ \!tgGetValue\!thSetDimen}
+
+% SET DIMEN
+\def\!thSetDimen{%
+ \ifnum \!tgCode=1
+ \ifx \!tgValue\empty
+ \!taDimenA \StrutHeightFactor\StrutUnit
+ \advance \!taDimenA \StrutDepthFactor\StrutUnit
+ \divide \!taDimenA 2
+ \else
+ \!taDimenA \!tgValue\StrutUnit
+ \fi
+ \else
+ \!taDimenA \!tgValue
+ \fi
+ \!taDimenA=\!thSign\!taDimenA\relax
+ %
+ % BRANCH ON MODE
+ \ifmmode
+ \expandafter\mathpalette
+ \expandafter\!thDoMathRaise
+ \else
+ \expandafter\!thDoSimpleRaise
+ \fi}
+
+% DO SIMPLE RAISE
+\def\!thDoSimpleRaise#1{%
+ \setbox\z@\hbox{\raise \!taDimenA\hbox{#1}}%
+ \!thFinishRaise} % From Plain TeX: \ht0=0pt \dp0=0pt \box0
+
+% DO MATH RAISE
+\def\!thDoMathRaise#1#2{%
+ \setbox\z@\hbox{\raise \!taDimenA\hbox{$\m@th#1{#2}$}}%
+ \!thFinishRaise}
+
+% FINISH RAISE. This is the same as Plain's \finsm@sh; some macro
+% packages redefine \finsm@sh.
+\def\!thFinishRaise{%
+ \ht\z@\z@
+ \dp\z@\z@
+ \box\z@}
+
+
+% ***************************************************************
+% BACK SPACE
+% ***************************************************************
+\def\BackSpace{%
+ \!tgGetValue\!thKernBack}
+
+\def\!thKernBack{%
+ \kern -
+ \ifnum \!tgCode=1
+ \ifx \!tgValue\empty
+ \the\KernFactor
+ \else
+ \!tgValue % user-specified integer
+ \fi
+ \KernUnit
+ \else
+ \!tgValue % user-specified dimension
+ \fi
+ \ignorespaces}%
+
+
+% ***************************************************************
+% Vspace
+% ***************************************************************
+\def\Vspace{%
+ \noalign
+ \bgroup
+ \!tgGetValue\!thVspace}
+
+\def\!thVspace{%
+ \vskip
+ \ifnum \!tgCode=1
+ \ifx \!tgValue\empty
+ \the\VspaceFactor
+ \else
+ \!tgValue % user-specified integer
+ \fi
+ \StrutUnit
+ \else
+ \!tgValue % user-specified skip
+ \fi
+ \egroup} % Ends the \noalign
+
+
+
+% *********************************************************************
+% SECTION F: FORMAT
+% *********************************************************************
+
+% As explained in Section 3.3 of the manual, TABLE alternates each
+% of the user's "data" columns with a "rule" column; moreover, TABLE
+% places a "dummy data" column at the left and right of a table.
+% A table with n nominal data columns therefore actually has a
+% total of
+% n (nominal data columns)
+% +(n+1) (rule columns)
+% + 2 (dummy data columns)
+% ____
+% 2n+3
+% columns.
+
+% FORMATs job is to create an \halign preamble for the alignment
+% of these (2n+3) columns. The preamble consists of templates
+% for the various columns, strung together with &'s and interlaced
+% with \tabskip glue specifications.
+
+% FORMAT constructs the template for a nomimal data column according
+% to the user-specified format keys. As the keys are read from left
+% to right, the template is built up "from the inside out" (as
+% illustrated in Section 3.1.9 of the manual), the inner-most part
+% being the "#" sign. A "|" in the format terminates template
+% building; the completed template is adjoined to preamble along
+% with the template for the following rule column.
+
+% Minimum column widths, if specified, are implemented by creating
+% an "artificial row" with data entries of the form
+% \hskip <minimum column width>.
+% This row has zero height and depth and is completely invisible.
+
+
+% BEGIN FORMAT
+\def\BeginFormat{%
+ \catcode`\|=12 % Inhibit expansion if | immediately follows a <number>
+ \catcode`\"=12 % read by \getvalue.
+ \!taPreamble={}%
+ \!taColumnNumber=0
+ \skip0 =\InterColumnSpaceUnit
+ \multiply\skip0 \InterColumnSpaceFactor
+ \divide\skip0 2
+ \!taRuleColumnTemplate=\!thx{%
+ \!thx\tabskip\the\skip0 }%
+ \!taLastRegularTabskip=\skip0
+ \!taOnceOnlyTabskipfalse
+ \!taBeginFormattrue % Used to intercept key "]"
+ \def\!tfRowOfWidths{}% Artificial Table Row with horizontal struts
+ % to enforce specified minimum column widths
+ \ReadFormatKeys}
+
+% SET (MINIMUM COLUMN) WIDTH: Invoked by the key "w".
+\def\!tfSetWidth{%
+ \ifx \!tfRowOfWidths \empty % true if no prior "w" keys
+ \ifnum \!taColumnNumber>0 % true if "w" key is to right of first "|"
+ \begingroup % RowOfWidths={&\omit || n copies of
+ % &\omit&\omit}, where n = number of columns
+ \!taCountA=1 % to the left of this one
+ \aftergroup \edef \aftergroup \!tfRowOfWidths \aftergroup {%
+ \aftergroup &\aftergroup \omit
+ \!thLoop
+ \ifnum \!taCountA<\!taColumnNumber
+ \advance\!taCountA 1
+ \aftergroup \!tfAOAO
+ \repeat
+ \aftergroup }%
+ \endgroup
+ \fi
+ \fi
+ \ifx [\!ttemp % \!tgGetValue sets \!ttemp = token after w
+ \!thx\!tfSetWidthText
+ \else
+ \!thx\!tfSetWidthValue
+ \fi}
+
+% AOAO = (Apersand Omit Ampersand Omit)
+\def\!tfAOAO{%
+ &\omit&\omit}
+
+% SET WIDTH TEXT
+\def\!tfSetWidthText [#1]{% #1 = specified text
+ \def\!tfWidthText{#1}%
+ \ReadFormatKeys}
+
+% SET WIDTH VALUE
+\def\!tfSetWidthValue{%
+ \!taMinimumColumnWidth =
+ \ifnum \!tgCode=1
+ \ifx\!tgValue\empty % Use default multiplier if user didn't specify one
+ \ColumnWidthFactor
+ \else
+ \!tgValue
+ \fi
+ \ColumnWidthUnit
+ \else
+ \!tgValue
+ \fi
+ \def\!tfWidthText{}% Override possible prior `w[sample entry]'
+ \ReadFormatKeys}
+
+
+% SET TABSKIP: Invoked by the tabskip keys "t" and "o"
+\def\!tfSetTabskip{%
+ \ifnum \!tgCode=1
+ \skip0 =\InterColumnSpaceUnit
+ \multiply\skip0
+ \ifx \!tgValue\empty
+ \InterColumnSpaceFactor % Default integer
+ \else
+ \!tgValue % User-specified integer
+ \fi
+ \else
+ \skip0 =\!tgValue % User-specified <skip>
+ \fi
+ \divide\skip0 by 2
+ \ifnum\!taColumnNumber=0
+ \!thToksEdef\!taRuleColumnTemplate={%
+ \the\!taRuleColumnTemplate
+ \tabskip \the\skip0 }
+ \else
+ \!thToksEdef\!taDataColumnTemplate={%
+ \the\!taDataColumnTemplate
+ \tabskip \the\skip0 }
+ \fi
+ \if!taOnceOnlyTabskip
+ % % Tabskip used at right of this col only
+ \else
+ \!taLastRegularTabskip=\skip0 % Remember this Tabskip, for possible
+ \fi % restoration after a subsequent"OnceOnly"
+ \ReadFormatKeys}
+
+
+% SET VRULE: Invoked by the key "|"
+\def\!tfSetVrule{%
+ \!thToksEdef\!taRuleColumnTemplate={%
+ \noexpand\hfil
+ \noexpand\vrule
+ \noexpand\!thWidth
+ \ifnum \!tgCode=1
+ \ifx \!tgValue\empty
+ \the\LineThicknessFactor % Default integer
+ \else
+ \!tgValue % User-specified integer
+ \fi
+ \!taLTU % \LineThicknessUnit
+ \else
+ \!tgValue % User-specified dimension
+ \fi
+ ####%
+ \noexpand\hfil
+ \the\!taRuleColumnTemplate} % has \tabskips, when column number=0
+ \!tfAdjoinPriorColumn}
+
+% SET ALTERNATE VRULE: Invoked by the key "\|", in the form
+% \|{<template for (rule) column>}. The "{" and "}" are mandatory,
+% and the <template for column> must contain a "#". The key system
+% CAN'T be used to set up this template. The <template> can have the
+% form "\span\macro".
+\def\!tfSetAlternateVrule{%
+ \afterassignment\!tfSetAlternateA
+ \toks0 =} % Put template into \toks0
+
+\def\!tfSetAlternateA{%
+ \!thToksEdef\!taRuleColumnTemplate={%
+ \the\toks0 \the\!taRuleColumnTemplate} % RCT may have \tabskips
+ \!tfAdjoinPriorColumn}
+
+% ADJOIN PRIOR COLUMN
+\def\!tfAdjoinPriorColumn{%
+ \ifnum \!taColumnNumber=0
+ \!taPreamble=\!taRuleColumnTemplate % New \tabskip may have been added
+ \ifnum \TracingFormats>0
+ \!tfShowRuleTemplate
+ \fi
+ \else
+ \ifx\!tfRowOfWidths\empty % no "w" keys specified yet, not even this col
+ \else
+ \!tfUpdateRowOfWidths
+ \fi
+ % Adjoin positioning glues to left and right of template
+ \!thToksEdef\!taDataColumnTemplate={%
+ \the \!taLeftGlue
+ \the \!taDataColumnTemplate
+ \the \!taRightGlue}
+ \ifnum \TracingFormats>0
+ \!tfShowTemplates
+ \fi
+ % Adjoin data- and rule-column templates to preamble
+ \!thToksEdef\!taPreamble={%
+ \the\!taPreamble
+ &
+ \the\!taDataColumnTemplate
+ &
+ \the\!taRuleColumnTemplate}
+ \fi
+%
+% START NEW COLUMN
+ \advance \!taColumnNumber 1
+ % Initialize data-column template, restoring last "regular" tabskip
+ % after a "once only" tabskip
+ \if!taOnceOnlyTabskip
+ \!thToksEdef\!taDataColumnTemplate={%
+ ####\tabskip \the\!taLastRegularTabskip}
+ \else
+ \!taDataColumnTemplate{##}%
+ \fi
+ % Remaining initializations
+ \!taRuleColumnTemplate{}% # is inserted by \SetVrule, or \SetAlternateVrule
+ \!taLeftGlue{\hfil}% % Default positioning is "center"
+ \!taRightGlue{\hfil}%
+ \!taMinimumColumnWidth=0pt
+ \def\!tfWidthText{}%
+ \!taOnceOnlyTabskipfalse % Set true by key "o"
+ \ReadFormatKeys}
+
+% UPDATE ROW OF WIDTHS
+\def\!tfUpdateRowOfWidths{%
+ % If user had a "w[<Text>]" key, set <Text> according to the
+ % template for this column, and find the width of the result
+ \ifx \!tfWidthText\empty
+ \else % set specified text according to current template & find width
+ \!tfComputeMinColWidth
+ \fi
+ \edef\!tfRowOfWidths{%
+ \!tfRowOfWidths
+ &%
+ \omit % Data Column
+ \ifdim \!taMinimumColumnWidth>0pt
+ \hskip \the\!taMinimumColumnWidth
+ \fi
+ &
+ \omit}} % Rule Column
+
+% COMPUTE MINIMUM COLUMN WIDTH (from specified WidthText)
+\def\!tfComputeMinColWidth{%
+ \setbox0 =\vbox{%
+ \ialign{% Plain's initialized \halign; \tabskip=0pt \everycr={}
+ \span\the\!taDataColumnTemplate\cr
+ \!tfWidthText\cr}}%
+ \!taMinimumColumnWidth=\wd0 }
+
+% SHOW (INITIAL) RULE TEMPLATE
+\def\!tfShowRuleTemplate{%
+ \!thMessage{}
+ \!thMessage{TABLE FORMAT}
+ \!thMessage{Column: Template}
+ \!thMessage{%
+ \space *c: ##\tabskip \the\LeftTabskip}
+ \!taOldRuleColumnTemplate=\!taRuleColumnTemplate}
+
+% SHOW TEMPLATES
+\def\!tfShowTemplates{%
+ \!thMessage{%
+ \space \space r: \the\!taOldRuleColumnTemplate}
+ \!taOldRuleColumnTemplate=\!taRuleColumnTemplate
+ \!thMessage{%
+ \ifnum \!taColumnNumber<10
+ \space
+ \fi
+ \the\!taColumnNumber c: \the\!taDataColumnTemplate}
+ \ifdim\!taMinimumColumnWidth>0pt
+ \!thMessage{%
+ \space \space w: \the\!taMinimumColumnWidth}
+ \fi}
+
+
+% FINISH UP: Invoked by the keys "." and \EndFormat
+\def\!tfFinishFormat{%
+ \ifnum \TracingFormats>0
+ \!thMessage{%
+ \space \space r: \the\!taOldRuleColumnTemplate
+ \tabskip \the\RightTabskip}%
+ \!thMessage{%
+ \space *c: ##\tabskip 0pt}
+ \fi
+ \ifnum \!taColumnNumber<2
+ \!thError{%
+ \ifnum \!taColumnNumber=0
+ No
+ \else
+ Only 1
+ \fi
+ "|"}%
+ {\!thReadErrorMsg\!tfTooFewBarsA
+ ^^J\!thReadErrorMsg\!tfTooFewBarsB
+ ^^J\!thReadErrorMsg\!tkFixIt}%
+ \fi
+ \!thToksEdef\!taPreamble={%
+ ####\tabskip\LeftTabskip
+ &
+ \the\!taPreamble \tabskip\RightTabskip
+ &
+ ####\tabskip 0pt \cr}
+ \ifnum \TracingFormats>1
+ \!thMessage{Preamble=\the\!taPreamble}
+ \fi
+ \ifnum \TracingFormats>2
+ \!thMessage{Row Of Widths="\!tfRowOfWidths"}
+ \fi
+ \!taBeginFormatfalse % Intercepts "|", tabskips, and "."
+ \catcode`\|=13
+ \catcode`\"=13
+ \!ttDoHalign}
+
+% ERROR MESSAGE FOR NOT ENOUGH "|"'s
+\!thStoreErrorMsg\!tfTooFewBarsA{%
+ There must be at least 2 "|"'s (and/or "\string \|"'s)}
+\!thStoreErrorMsg\!tfTooFewBarsB{%
+ between \string\BeginFormat\space and \string\EndFormat\space (or ".").}
+
+
+% REFORMAT [<key letters>]{<text>}: Formats <text> according to
+% <key letters>. Used to override the template for a column,
+% or columns when used after \use.
+\def\ReFormat[{%
+ \omit
+ \!taDataColumnTemplate{##}%
+ \!taLeftGlue{}%
+ \!taRightGlue{}%
+ \catcode`\|=12 % Inhibit expansion if | immediately follows a <number>
+ \catcode`\"=12 % read by \getvalue. Actually, '|' and '"' shouldn't
+ \ReadFormatKeys}% appear in a \ReFormat cmd; this is here as a safeguard.
+
+% END REFORMAT: Invoked by the key "]"
+\def\!tfEndReFormat{%
+ \ifnum \TracingFormats>0
+ \!thMessage{ReF:
+ \the\!taLeftGlue
+ \hbox{\the\!taDataColumnTemplate}% White lie
+ \the\!taRightGlue}
+ \fi
+ \catcode`\|=13
+ \catcode`\"=13
+ \!tfReFormat}
+
+\def\!tfReFormat#1{%
+ \the \!taLeftGlue
+ \vbox{%
+ \ialign{%
+ \span\the\!taDataColumnTemplate\cr
+ #1\cr}}%
+ \the \!taRightGlue}
+
+
+
+% *********************************************************************
+% SECTION G: GET VALUE
+% *********************************************************************
+
+% GET_VALUE{<return macro>}<tokens> functions as follows:
+
+% If <tokens> has the form <(stuff)>, then
+% code=2 and value=<stuff>
+
+% Otherwise <tokens> has the form <DDDXYZ> where <DDD> denotes (a possibly
+% empty) string of consecutive digits (0,1,2,...,9) terminated by the first
+% character <X> (possibly a blank) that is not a digit. In this case
+% code=1 and value=<DDD> (= <null>, if <DDD> is non-empty).
+
+% Examples: Code Value
+% "\GetValue{\macro} 3" 1 null
+% "\GetValue{\macro}A " 1 null
+% "\GetValue{\macro}1 " 1 1
+% "\GetValue{\macro}25A" 1 25
+% "\GetValue{\macro}25012 " 1 25012
+% "\GetValue{\macro}(10pt)" 2 10pt
+% "\GetValue{\macro}(1in)" 2 1in
+% "\GetValue{\macro} (1in)" 1 null
+
+
+% GET_VALUE{<macro to execute after value is found>}
+\def\!tgGetValue#1{%
+ \def\!tgReturn{#1}% Set return
+ \futurelet\!ttemp\!tgCheckForParen}% Now \!ttemp is the token
+ % immediately after {}
+
+% CHECK_PAREN: See if \!ttemp is a (
+\def\!tgCheckForParen{%
+ \ifx\!ttemp (%
+ \!thx \!tgDoParen
+ \else
+ \!thx \!tgCheckForSpace
+ \fi}
+
+% DO_PAREN: Set code to 2, value to stuff inside ( )'s
+\def\!tgDoParen(#1){%
+ \def\!tgCode{2}%
+ \def\!tgValue{#1}% NOTE #1 MUST BE A LEGITIMATE VALUE
+ \!tgReturn}
+
+% CHECK_SPACE: See if \!ttemp is a <blank space>
+\def\!tgCheckForSpace{%
+ \def\!tgCode{1}%
+ \def\!tgValue{}% Initialize value to <null>
+ \ifx\!ttemp\!thSpaceToken
+ \!thx \!tgReturn % <blank space> means no value was specified
+ \else
+ \!thx \!tgCheckForDigit
+ \fi}
+
+% CHECK_DIGIT: \!ttemp is not a <blank space>; if its a digit (0,1,...,9)
+% get the <number> starting with that digit.
+\def\!tgCheckForDigit{%
+ \!taDigitfalse
+ \ifx 0\!ttemp
+ \!taDigittrue
+ \else
+ \ifx 1\!ttemp
+ \!taDigittrue
+ \else
+ \ifx 2\!ttemp
+ \!taDigittrue
+ \else
+ \ifx 3\!ttemp
+ \!taDigittrue
+ \else
+ \ifx 4\!ttemp
+ \!taDigittrue
+ \else
+ \ifx 5\!ttemp
+ \!taDigittrue
+ \else
+ \ifx 6\!ttemp
+ \!taDigittrue
+ \else
+ \ifx 7\!ttemp
+ \!taDigittrue
+ \else
+ \ifx 8\!ttemp
+ \!taDigittrue
+ \else
+ \ifx 9\!ttemp
+ \!taDigittrue
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \if!taDigit
+ \!thx \!tgGetNumber
+ \else
+ \!thx \!tgReturn
+ \fi}
+
+% GET_NUMBER
+\def\!tgGetNumber{%
+ \afterassignment\!tgGetNumberA
+ \!taCountA=}
+\def\!tgGetNumberA{%
+ \edef\!tgValue{\the\!taCountA}%
+ \!tgReturn}
+
+
+% ********************************************************************
+% MISCELANEOUS "RETURNS" FROM \getvalue
+% ********************************************************************
+
+% SET UP PAR BOX: Puts \BeginTableParBox{<user-specified \hsize>}
+% to the left of "#" and \EndTableParBox to the right of "#".
+\def\!tgSetUpParBox{%
+ \edef\!ttemp{%
+ \noexpand \ReadFormatKeys
+ b{\noexpand \BeginTableParBox{%
+ \ifnum \!tgCode=1
+ \ifx \!tgValue\empty
+ \the\ColumnWidthFactor
+ \else
+ \!tgValue % user-specified integer
+ \fi
+ \!taCWU % \ColumnWidthUnit
+ \else
+ \!tgValue % user-specified dimension
+ \fi}}}%
+ \!ttemp
+ a{\EndTableParBox}}
+
+% SET KERNS
+\def\!tgInsertKern{%
+ \edef\!ttemp{%
+ \kern
+ \ifnum \!tgCode=1
+ \ifx \!tgValue\empty
+ \the\KernFactor
+ \else
+ \!tgValue % user-specified integer
+ \fi
+ \!taKU % \KernUnit
+ \else
+ \!tgValue % user-specified dimension
+ \fi}%
+ \edef\!ttemp{%
+ \noexpand\ReadFormatKeys
+ \ifh@ % true if kern goes to left of "#"
+ b{\!ttemp}
+ \fi
+ \ifv@ % true if kern goes to right of "#"
+ a{\!ttemp}
+ \fi}%
+ \!ttemp}
+
+
+
+% *********************************************************************
+% SECTION K: KEYS
+% *********************************************************************
+
+% ****************************************************************
+% DEFINING NEW KEYS
+% ****************************************************************
+
+% NEW FORMAT KEY <Key Letter>: Must be followed by
+% <Parameter Text> <Replacement Text>
+% Sets up a new key letter command by expanding (essentially) to
+% \expandafter \def \csname !tk<Key Letter>\endcsname
+% <Parameter Text>{<Replacement Text>}
+% A warning message is issued if <Key Letter> is already in use.
+\def\NewFormatKey#1{%
+ \!thx\def\!thx\!ttempa\!thx{\string #1}%
+ \!thx\def\!thx\!ttempb\!thx{\csname !tk<\!ttempa>\endcsname}%
+ \ifnum \TracingKeys>0
+ \!tkReportNewKey
+ \fi
+ \!thx\ifx \!ttempb \relax
+ \!thx\!tkDefineKey
+ \else
+ \!thx\!tkRejectKey
+ \fi}
+
+% REPORT NEW KEY
+\def\!tkReportNewKey{%
+ \!taToksA\!thx{\!ttempa}%
+ \!thMessage{NEW KEY: "\the\!taToksA"}}
+
+% DEFINE KEY
+\def\!tkDefineKey{%
+ \!thx\def\!ttempb}%
+
+% DUPLICATE KEY
+\def\!tkRejectKey{%
+ \!taToksA\!thx{\!ttempa}%
+ \!thError{Key letter "\the\!taToksA" already used}
+ {\!thReadErrorMsg\!tkFixIt}
+ \def\!tkGarbage}%
+
+% ERROR MESSAGE FOR DUPLICATE KEY
+\!thStoreErrorMsg\!tkFixIt{%
+ You'd better type \space 'E' \space and fix your file.}
+
+
+% ****************************************************************
+% READING FORMAT KEYS
+% ****************************************************************
+
+% READ FORMAT KEYS
+\def\ReadFormatKeys#1{%
+ \!thx\def\!thx\!ttempa\!thx{\string #1}%
+ \!thx\def\!thx\!ttempb\!thx{\csname !tk<\!ttempa>\endcsname}%
+ \ifnum \TracingKeys>1
+ \!tkReportKey
+ \fi
+ \!thx\ifx \!ttempb\relax
+ \!thx\!tkReplaceKey
+ \else
+ \!thx\!ttempb
+ \fi}
+
+% REPORT KEY
+\def\!tkReportKey{%
+ \!taToksA\!thx{\!ttempa}%
+ \!thMessage{KEY: "\the\!taToksA"}}
+
+% REPLACE KEY
+\def\!tkReplaceKey{%
+ \!taToksA\!thx{\!ttempa}%
+ \!thError {Undefined format key "\the\!taToksA"}
+ {\!thReadErrorMsg\!tkUndefined ^^J\!thReadErrorMsg\!tkBadKey}
+ \!tkReplaceKeyA}
+
+\def\!tkReplaceKeyA{%
+ \!thGetReplacement{\!thReadErrorMsg\!tkReplace}\!tkReplacement
+ \!thx\ReadFormatKeys\!tkReplacement}
+
+% ERROR MESSAGES FOR KEY RELACEMENT
+\!thStoreErrorMsg\!tkUndefined{%
+ The format key in " "'s on the next to top line is undefined.}
+\!thStoreErrorMsg\!tkBadKey{%
+ Type \space E \space to quit now, or
+ \space<CR> \space and respond to next prompt.}
+\!thStoreErrorMsg\!tkReplace{%
+ Type \space<replacement key><CR> \space,
+ or simply \space<CR> \space to skip offending key:}
+
+
+% ****************************************************************
+% PRIMITIVE KEYS
+% ****************************************************************
+
+% Key "b": b{TOKENS} adds TOKENS to the left of (before) the template
+\NewFormatKey b#1{%
+ \!thx\!tkJoin\!thx{\the\!taDataColumnTemplate}{#1}%
+ \ReadFormatKeys}
+
+\def\!tkJoin#1#2{%
+ \!taDataColumnTemplate{#2#1}}%
+
+% Key "a": a{TOKENS} adds TOKENS to the right of (after) the template
+\NewFormatKey a#1{%
+ \!taDataColumnTemplate\!thx{\the\!taDataColumnTemplate #1}%
+ \ReadFormatKeys}
+
+% Key "\{": Enclose template in braces.
+\NewFormatKey \{{%
+ \!taDataColumnTemplate=\!thx{\!thx{\the\!taDataColumnTemplate}}%
+ \ReadFormatKeys}
+
+% Key "*": "*{N}{KEY LETTERS}" is equivalent to specifying
+% <KEY LETTERS> N times.
+% KEY LETTERS may contain further * specifications
+\NewFormatKey *#1#2{%
+ \!taCountA=#1\relax
+ \!taToksA={}%
+ \!thLoop
+ \ifnum \!taCountA > 0
+ \!taToksA\!thx{\the\!taToksA #2}%
+ \advance\!taCountA -1
+ \repeat
+ \!thx\ReadFormatKeys\the\!taToksA}
+
+
+% ****************************************************************
+% POSITIONING KEYS
+% ****************************************************************
+
+% Key "\LeftGlue": Specifies the glue (usually \hfil, or nothing) to be
+% added to extreme left of the template to position a column
+\NewFormatKey \LeftGlue#1{%
+ \!taLeftGlue{#1}%
+ \ReadFormatKeys}
+
+% Key "\RightGlue": Specifies the glue (usually \hfil, or nothing) to be
+% added to the extreme right of the template to position a column
+\NewFormatKey \RightGlue#1{%
+ \!taRightGlue{#1}%
+ \ReadFormatKeys}
+
+% Key "c": Centered column.
+\NewFormatKey c{%
+ \ReadFormatKeys
+ \LeftGlue\hfil
+ \RightGlue\hfil}
+
+% Key "l": Left-adjusted column.
+\NewFormatKey l{%
+ \ReadFormatKeys
+ \LeftGlue{} % In case more than one positioning key is specified.
+ \RightGlue\hfil}
+
+% Key "r": Right-adjusted column.
+\NewFormatKey r{%
+ \ReadFormatKeys
+ \LeftGlue\hfil
+ \RightGlue{}}
+
+% Key "k": Adds kerns to left and right of "#"
+% This key and the two below use Plain TeX's \if@h as if it were \if@left,
+% and \if@v as if it were \if@right. Table making goes on in a group,
+% so even in the unlikely circumstance that a \phantom is currently under
+% construction, there's no problem.
+\NewFormatKey k{%
+ \h@true
+ \v@true
+ \!tgGetValue{\!tgInsertKern}}
+
+% Key "i": Adds a kern to the left of "#"
+\NewFormatKey i{%
+ \h@true
+ \v@false
+ \!tgGetValue{\!tgInsertKern}}
+
+% Key "j": Adds a kern to the right of "#"
+\NewFormatKey j{%
+ \h@false
+ \v@true
+ \!tgGetValue{\!tgInsertKern}}
+
+
+% ****************************************************************
+% NUMERIC ITEM KEYS
+% ****************************************************************
+
+% Key "n": numeric item , non-math mode.
+\NewFormatKey n{%
+ \def\!tnStyle{}%
+ \futurelet\!tnext\!tnTestForBracket}
+
+% Key "N": numeric item, math mode.
+\NewFormatKey N{%
+ \def\!tnStyle{$}%
+ \futurelet\!tnext\!tnTestForBracket}
+
+
+% ****************************************************************
+% ATTRIBUTE KEYS
+% ****************************************************************
+
+% Key "m": Math mode.
+\NewFormatKey m{%
+ \ReadFormatKeys b$ a$}
+
+% Key "M": Displaymath mode.
+\NewFormatKey M{%
+ \ReadFormatKeys \{ b{$\displaystyle} a$}
+
+% Key "\m": Template ${}#\hfil$
+\NewFormatKey \m{%
+ \ReadFormatKeys l b{{}} m}
+
+% Key "\M": Template $\displaystyle{{}#\hfil}$
+\NewFormatKey \M{%
+ \ReadFormatKeys l b{{}} M}
+
+% Key "f": Set font (E.g., f\it sets up italic font (assuming \it
+% has its usual meaning)
+\NewFormatKey f#1{%
+ \ReadFormatKeys b{#1}}
+
+% Key "B": abbreviation for f\bf
+\NewFormatKey B{%
+ \ReadFormatKeys f\bf}
+
+% Key "I": abbreviation for f\it
+\NewFormatKey I{%
+ \ReadFormatKeys f\it}
+
+% Key "S": abbreviation for f\sl
+\NewFormatKey S{%
+ \ReadFormatKeys f\sl}
+
+% Key "R": abbreviation for f\rm
+\NewFormatKey R{%
+ \ReadFormatKeys f\rm}
+
+% Key "T": abbreviation for f\tt
+\NewFormatKey T{%
+ \ReadFormatKeys f\tt}
+
+% Key "p": ParBox
+\NewFormatKey p{%
+ \!tgGetValue{\!tgSetUpParBox}}
+
+
+% ****************************************************************
+% MINIMUM COLUMN WIDTH KEY
+% ****************************************************************
+
+% Key "w": minimum column width
+\NewFormatKey w{%
+ \!tkTestForBeginFormat w{\!tgGetValue{\!tfSetWidth}}}
+
+
+% ****************************************************************
+% TABSKIP KEYS
+% ****************************************************************
+
+% Key "s": Set tabskip for the inter-column space to the right
+% of the current column, and all subsequent spaces, until overriden
+% by a new "s" or "o" key.
+\NewFormatKey s{%
+ \!taOnceOnlyTabskipfalse % in case same column has a prior "o" key
+ \!tkTestForBeginFormat t{\!tgGetValue{\!tfSetTabskip}}}
+
+% Key "o": Apply the \tabskip stated for this column ONLY to the
+% inter-column space just to the right of this column; restore the
+% the previous \tabskip for subsequent columns.
+\NewFormatKey o{%
+ \!taOnceOnlyTabskiptrue
+ \!tkTestForBeginFormat o{\!tgGetValue{\!tfSetTabskip}}}
+
+
+% ****************************************************************
+% RULE KEYS
+% ****************************************************************
+
+% Key "|": Standard rule column designator
+\NewFormatKey |{%
+ \!tkTestForBeginFormat |{\!tgGetValue{\!tfSetVrule}}}
+
+% Key "\|": Non-standard rule column designator
+\NewFormatKey \|{%
+ \!tkTestForBeginFormat \|{\!tfSetAlternateVrule}}
+
+
+% ****************************************************************
+% END-OF-FORMAT KEYS
+% ****************************************************************
+
+% Key ".": PERIOD -- end of \BeginFormat section.
+\NewFormatKey .{%
+ \!tkTestForBeginFormat.{\!tfFinishFormat}}
+
+% Key "\EndFormat": Equivalent to "."
+\NewFormatKey \EndFormat{%
+ \!tkTestForBeginFormat\EndFormat{\!tfFinishFormat}}
+
+% Key "]": End of \ReFormat section
+\NewFormatKey ]{%
+ \!tkTestForReFormat ] \!tfEndReFormat}
+
+
+% ****************************************************************
+% VALIDITY CHECKS
+% ****************************************************************
+
+% TEST FOR BEGIN FORMAT{<Key>}{Intended Action}: This test is run
+% on keys that can only be used by \BeginFormat --- "s", "o",
+% "|", "\|", "w", ".", and "\EndFormat".
+\def\!tkTestForBeginFormat#1#2{%
+ \if!taBeginFormat
+ \def\!ttemp{#2}%
+ \!thx \!ttemp
+ \else
+ \toks0={#1}%
+ \toks2=\!thx{\string\ReFormat}%
+ \!thx \!tkImproperUse
+ \fi}
+
+% TEST FOR RE FORMAT{<Key>}{Intended Action}: This test is run
+% on the key "]", which can only be used by \ReFormat.
+\def\!tkTestForReFormat#1#2{%
+ \if!taBeginFormat
+ \toks0={#1}%
+ \toks2=\!thx{\string\BeginFormat}%
+ \!thx \!tkImproperUse
+ \else
+ \def\!ttemp{#2}%
+ \!thx \!ttemp
+ \fi}
+
+% IMPROPER USE OF KEY
+\def\!tkImproperUse{%
+ \!thError{\!thReadErrorMsg\!tkBadUseA "\the\toks0 "}%
+ {\!thReadErrorMsg\!tkBadUseB \the\toks2 \space command.
+ ^^J\!thReadErrorMsg\!tkBadKey}%
+ \!tkReplaceKeyA}
+
+% ERROR MESSAGES FOR IMPROPER USE OF KEY
+\!thStoreErrorMsg\!tkBadUseA{Improper use of key }
+\!thStoreErrorMsg\!tkBadUseB{%
+ The key mentioned above can't be used in a }
+
+
+
+% *********************************************************************
+% SECTION n: NUMERIC
+% *********************************************************************
+
+% NOTE: THE SPACE BETWEEN A NUMERIC ENTRY AND THE FOLLOWING '|', '"',
+% OR '\|' IS MANDATORY.
+% EMPTY NUMERIC ENTRIES ARE NOT ALLOWED: USE '{}' OR '\omit' INSTEAD.
+
+% TEST FOR BRACKET: Invoked by the keys "n" and "N".
+\def\!tnTestForBracket{%
+ \ifx [\!tnext
+ \!thx\!tnGetArgument
+ \else
+ \!thx\!tnGetCode
+ \fi}
+
+% GET CODE: E.g. "4", or "4.0", "0.4", or "10.2"
+\def\!tnGetCode#1 {% NOTE THE BLANK
+ \!tnConvertCode #1..!}
+
+% CONVERT CODE: E.g. converts above to [0000], [0000.], [.0000],
+% [0000000000.00]
+\def\!tnConvertCode #1.#2.#3!{%
+ \begingroup
+ \aftergroup\edef \aftergroup\!ttemp \aftergroup{%
+ \aftergroup[%
+ \!taCountA #1
+ \!thLoop
+ \ifnum \!taCountA>0
+ \advance\!taCountA -1
+ \aftergroup0
+ \repeat
+ \def\!ttemp{#3}%
+ \ifx\!ttemp \empty
+ \else
+ \aftergroup.
+ \!taCountA #2
+ \!thLoop
+ \ifnum \!taCountA>0
+ \advance\!taCountA -1
+ \aftergroup0
+ \repeat
+ \fi
+ \aftergroup]\aftergroup}%
+ \endgroup\relax
+ \!thx\!tnGetArgument\!ttemp}
+
+% GET ARGUMENT: [<sample left field> <optional .<sample right field>>
+\def\!tnGetArgument[#1]{%
+ \!tnMakeNumericTemplate\!tnStyle#1..!}
+
+% MAKE NUMERIC TEMPLATE
+\def\!tnMakeNumericTemplate#1#2.#3.#4!{% #1=<empty> or $
+ \def\!ttemp{#4}%
+ \ifx\!ttemp\empty
+ \!taDimenC=0pt
+ \else
+ \setbox0=\hbox{\m@th #1.#3#1}%
+ \!taDimenC=\wd0
+ \fi
+ \setbox0 =\hbox{\m@th #1#2#1}%
+ \!thToksEdef\!taDataColumnTemplate={%
+ \noexpand\!tnSetNumericItem
+ {\the\wd0 }%
+ {\the\!taDimenC}%
+ {#1}%
+ \the\!taDataColumnTemplate} % Might have tabskip glue in here
+ \ReadFormatKeys}
+
+% SET NUMERIC ITEM
+\def\!tnSetNumericItem #1#2#3#4 {% NOTE THE BLANK
+ \!tnSetNumericItemA {#1}{#2}{#3}#4..!}
+
+\def\!tnSetNumericItemA #1#2#3#4.#5.#6!{%
+ \def\!ttemp{#6}%
+ \hbox to #1{\hss \m@th #3#4#3}%
+ \hbox to #2{%
+ \ifx\!ttemp\empty
+ \else
+ \m@th #3.#5#3%
+ \fi
+ \hss}}
+
+
+
+% *********************************************************************
+% SECTION S: STRUTS
+% *********************************************************************
+
+% The following are in ALLOCATIONS
+ %\newdimen\StrutUnit (normal value \normalbaselineskip / 11)
+ %\newcount\StrutHeightFactor (normal value 8)
+ %\newcount\StrutDepthFactor (normal value 3)
+
+% MAKE STRUT OF SPECIFIED HEIGHT AND DIMENSION
+% \MakeStrut <height><depth>; height and depth are <dimen>'s
+\def\MakeStrut#1#2{%
+ \vrule width0pt height #1 depth #2}
+
+% STANDARD VERTICAL STRUT
+% Makes a strut of height=StrutHeightFactor*StrutUnit
+% depth =StrutDepthFactor *StrutUnit
+\def\StandardTableStrut{%
+ \MakeStrut{\StrutHeightFactor\StrutUnit}
+ {\StrutDepthFactor\StrutUnit}}
+
+
+% STANDARD VERTICAL STRUT, WITH EXTRA HEIGHT/DEPTH
+% \AugmentedTableStrut<multiple for extra height><multiple for extra depth>
+% makes a strut of height=(StrutHeightFactor+#1)*StrutUnit
+% depth =(StrutDepthFactor+#2)*StrutUnit
+\def\AugmentedTableStrut#1#2{%
+ \dimen@=\StrutHeightFactor\StrutUnit
+ \advance\dimen@ #1\StrutUnit
+ \dimen@ii=\StrutDepthFactor\StrutUnit
+ \advance\dimen@ii #2\StrutUnit
+ \MakeStrut{\dimen@}{\dimen@ii}}
+
+
+% ENLARGE<extra height><extra depth><original>
+% Enlarges "original" by extra height and extra depth.
+% Extra height and extra depth are <dimen>'s.
+% Works for various math styles, and takes into account
+% \spacefactor in horizontal mode
+\def\Enlarge#1#2{% 3rd argument is picked up later
+ % #1=extra height
+ % #2=extra depth
+ \!taDimenA=#1\relax
+ \!taDimenB=#2\relax
+ \let\!TsSpaceFactor=\empty
+ \ifmmode
+ \!thx \mathpalette
+ \!thx \!TsEnlargeMath
+ \else
+ \!thx \!TsEnlargeOther
+ \fi}
+
+\def\!TsEnlargeOther#1{%
+ \ifhmode
+ \setbox\z@=\hbox{#1%
+ \xdef\!TsSpaceFactor{\spacefactor=\the\spacefactor}}%
+ \else
+ \setbox\z@=\hbox{#1}%
+ \fi
+ \!TsFinishEnlarge}
+
+\def\!TsEnlargeMath#1#2{%
+ \setbox\z@=\hbox{$\m@th#1{#2}$}%
+ \!TsFinishEnlarge}
+
+\def\!TsFinishEnlarge{%
+ \dimen@=\ht\z@
+ \advance \dimen@ \!taDimenA
+ \ht\z@=\dimen@
+ \dimen@=\dp\z@
+ \advance \dimen@ \!taDimenB
+ \dp\z@=\dimen@
+ \box\z@ \!TsSpaceFactor{}}
+
+
+% ENLARGE BY MULTIPLES OF StrutUnit
+% \enlarge<multiple for extra height><multiple for extra depth><original>
+% Enlarges by (multiple for extra heigth)*StrutUnit
+% and (multiple for extra depth) *StrutUnit
+\def\enlarge#1#2{% 3rd argument is picked up later
+ \Enlarge{#1\StrutUnit}{#2\StrutUnit}}
+
+
+% OPENUP#1#2: increases strut height and depth factors by #1 and #2.
+\def\OpenUp#1#2{%
+ \advance \StrutHeightFactor #1\relax
+ \advance \StrutDepthFactor #2\relax}
+
+
+
+% *********************************************************************
+% SECTION T: TABLES
+% *********************************************************************
+
+% Table-making is initiated by \BeginTable. After processing that
+% command, TeX absorbs the instructions in the prologue to the table
+% until it gets to \BeginFormat. \BeginFormat sets up the preamble
+% for the \halign that will be used to create the table. \EndFormat
+% initiates the \halign-ment, which is terminated by \EndTable.
+
+
+% *********************************************************************
+% BEGIN TABLE, (DO HALIGN), END TABLE
+% *********************************************************************
+% BEGIN TABLE
+\def\BeginTable{%
+ \futurelet\!tnext\!ttBeginTable}
+
+\def\!ttBeginTable{%
+ \ifx [\!tnext
+ \def\!tnext{\!ttBeginTableA}%
+ \else
+ \def\!tnext{\!ttBeginTableA[c]}%
+ \fi
+ \!tnext}
+
+\def\!ttBeginTableA[#1]{%
+ \if #1u% % "unboxed" table
+ \ifmmode
+ \def\!ttEndTable{% % user had better be in display math mode
+ \relax}% % and have only one table at the outer level
+ \else % user had better be in vertical mode
+ \bgroup
+ \def\!ttEndTable{%
+ \egroup}%
+ \fi
+ \else
+ \hbox\bgroup $
+ \def\!ttEndTable{%
+ \egroup % for the \vtop, \vbox, or \vcenter, yet to come
+ $% for math mode
+ \egroup}% for the \hbox
+ \if #1t%
+ \vtop
+ \else
+ \if #1b%
+ \vbox
+ \else
+ \vcenter % math mode was essential for this
+ \fi
+ \fi
+ \bgroup % for the \vtop, \vbox, or \vcenter
+ \fi
+ \advance\!taRecursionLevel 1 % RecursionLevel governs initialization
+ \let\!ttRightGlue=\relax % This may be changed by \JustCenter, etc
+ \everycr={}
+ \ifnum \!taRecursionLevel=1
+ \!ttInitializeTable
+ \fi}
+
+% INITIALIZE TABLE
+\bgroup
+ \catcode`\|=13
+ \catcode`\"=13
+ \catcode`\~=13
+ \gdef\!ttInitializeTable{%
+ \let\!ttTie=~ % Meanings of ~ and \- are
+ \let\!ttDH=\- % restored by \BeginTableParBox
+ \catcode`\|=\active
+ \catcode`\"=\active
+ \catcode`\~=\active
+ \def |{\unskip\!ttRightGlue&&}% Use rule-column template
+ \def\|{\unskip\!ttRightGlue&\omit\!ttAlternateVrule}%
+ % Override rule-column template
+ \def"{\unskip\!ttRightGlue&\omit&}% Omit rule-column template
+ \def~{\kern .5em}% ~ now has the width of a digit
+ \def\\{\!ttEndOfRow}%
+ \def\-{\!ttShortHrule}%
+ \def\={\!ttLongHrule}%
+ \def\_{\!ttFullHrule}%
+ \def\Left##1{##1\hfill\null}% \null prevents \unskip from
+ \def\Center##1{\hfill ##1\hfill\null}% killing the \hfill
+ \def\Right##1{\hfill##1}%
+ \def\use{\!ttuse}%
+ \def\Use{\!ttUse}%
+ \the\EveryTable}
+\egroup
+
+\let\!ttRightGlue=\relax % This may be changed, in a group, by
+ % \JustCenter, etc
+
+% DO HALIGN: Invoked by END FORMAT (or the key ".")
+\def\!ttDoHalign{%
+ \baselineskip=0pt \lineskiplimit=0pt \lineskip=0pt %
+ \tabskip=0pt
+ \halign \the\!taTableSpread \bgroup
+ \span\the\!taPreamble
+ \ifx \!tfRowOfWidths \empty
+ \else
+ \!tfRowOfWidths \cr %
+ \fi}
+
+% END TABLE
+\def\EndTable{%
+ \egroup % finishes the \halign
+ \!ttEndTable}% closes off the table envirnoment set up by \BeginTable
+
+
+% *********************************************************************
+% END OF ROW PROCESSING
+% *********************************************************************
+
+% END OF ROW: When followed by
+% 0, inserts no strut
+% +, inserts an AugmentedTableStrut (with <x-height> and <x-depth>
+% as arguments
+% anything else, inserts a StandardTableStrut,
+% and finished off the row with a \cr.
+\def\!ttEndOfRow{%
+ \futurelet\!tnext\!ttTestForBlank}
+
+% TEST FOR BLANK
+\def\!ttTestForBlank{%
+% \!thMessage{At Test For Blank: \meaning\!tnext}
+ \ifx \!tnext\!thSpaceToken % the "usual" case
+ \!thx\!ttDoStandard
+ \else
+ \!thx\!ttTestForZero
+ \fi}
+
+% TEST FOR ZERO
+\def\!ttTestForZero{%
+ \ifx 0\!tnext
+ \!thx \!ttDoZero
+ \else
+ \!thx \!ttTestForPlus
+ \fi}
+
+% TEST FOR PLUS
+\def\!ttTestForPlus{%
+ \ifx +\!tnext
+ \!thx \!ttDoPlus
+ \else
+ \!thx \!ttDoStandard
+ \fi}
+
+% DO ZERO: No strut
+\def\!ttDoZero#1{% #1 eats the 0
+ \cr}
+
+% DO PLUS: Insert "Extra" strut; #2=extra height, #3=extra depth, both
+% as integers (units of \StrutUnit)
+\def\!ttDoPlus#1#2#3{% #1 eats the +
+ \AugmentedTableStrut{#2}{#3}%
+ \cr}
+
+% DO STANDARD: Insert standard table strut
+\def\!ttDoStandard{%
+ \StandardTableStrut
+ \cr}
+
+
+% *********************************************************************
+% ALTERNATE VRULES
+% *********************************************************************
+
+% A '\|' can appear in a rule-column in place of a '|', '"', or '&'.
+
+% If '\|' is immediately followed by a blank, a string of digits, or
+% (...) [... had better be a <dimen>], a \vrule is placed in the
+% rule column; the thickness of the \vrule follows TABLE's usual
+% conventions. Be sure to put a blank after a string of digits.
+
+% If '\|' is immediately followed by a '*', a user-specified default
+% "pseudo"-rule is placed in the rule column. This P.R. is specified
+% by the parameterless macro \PseudoVrule. For example,
+% to place a "double rule" into a rule column, you could make the definition
+% \def\PseudoVrule{\hfil\vrule \hskip1pt \vrule\hfil}
+
+% If none of the above cases applies, a non-space token follows '\|':
+% that token is placed in the rule-column. To put a '*' in a
+% rule-column, enter '\|{*}'. '\|\PseudoVrule' has the same effect
+% as '\|*'.
+
+% ALTERNATE VRULE
+\def\!ttAlternateVrule{%
+ \!tgGetValue{\!ttAVTestForCode}} % AV == Alternate Vrule
+
+% TEST FOR CODE (2)
+\def\!ttAVTestForCode{%
+ \ifnum \!tgCode=2 % (...) follows "\|"
+ \!thx\!ttInsertVrule % \InsertVrule ends with "&"
+ \else
+ \!thx\!ttAVTestForEmpty
+ \fi}
+
+% TEST FOR EMPTY (VALUE)
+\def\!ttAVTestForEmpty{%
+ \ifx \!tgValue\empty % non-digit after "\|"
+ \!thx\!ttAVTestForBlank
+ \else
+ \!thx\!ttInsertVrule % integer after "\|"
+ \fi}
+
+% TEST FOR BLANK
+\def\!ttAVTestForBlank{%
+ \ifx \!ttemp\!thSpaceToken % blank after "\|"
+ \!thx\!ttInsertVrule
+ \else
+ \!thx\!ttAVTestForStar
+ \fi}
+
+% TEST FOR STAR
+\def\!ttAVTestForStar{%
+ \ifx *\!ttemp % "*" after "\|"
+ \!thx\!ttInsertDefaultPR % PR == pseudo-rule
+ \else
+ \!thx\!ttGetPseudoVrule % "Anything else" after "\|"
+ \fi}
+
+% INSERT VRULE
+\def\!ttInsertVrule{%
+ \hfil
+ \vrule \!thWidth
+ \ifnum \!tgCode=1
+ \ifx \!tgValue\empty
+ \LineThicknessFactor
+ \else
+ \!tgValue
+ \fi
+ \LineThicknessUnit
+ \else
+ \!tgValue
+ \fi
+ \hfil
+ &}
+
+% INSERT DEFAULT PSEUDO-RULE
+\def\!ttInsertDefaultPR*{%
+ \PseudoVrule % User-specified default pseudo-rule
+ &}
+
+% GET PSEUDO-RULE
+\def\!ttGetPseudoVrule#1{%
+ \toks0={#1}%
+ #1&}
+
+% DEFAULT PSEUDO-RULE
+\def\PseudoVrule{}
+
+
+% *********************************************************************
+% USE: Version of \multispan for rule-&-column tables
+% *********************************************************************
+
+% USE
+% \use <number> spans the next <number> data columns.
+\def\!ttuse#1{%
+ \ifnum #1>\@ne
+ \omit
+ \!ttmscount=#1
+ \advance\!ttmscount by \m@ne
+ \advance\!ttmscount by \!ttmscount
+ \!thLoop
+ \ifnum\!ttmscount>\@ne
+ \!ttspan
+ \repeat
+ \span
+ \fi}
+
+\def\!ttUse#1[{%
+ \!ttuse{#1}%
+ \ReFormat[}
+
+\def\!ttspan{\span\omit \advance\!ttmscount\m@ne}
+
+
+% *********************************************************************
+% HRULES
+% *********************************************************************
+
+% FULL HORIZONTAL RULE: Draws a rule across the table,
+% using \noalign{\hrule}
+\def\!ttFullHrule{%
+ \noalign
+ \bgroup
+ \!tgGetValue{\!ttFullHruleA}}
+
+\def\!ttFullHruleA{%
+ \!ttGetHalfRuleThickness % Sets \dimen0 to half of specified thickness
+ \hrule \!thHeight \dimen0 \!thDepth \dimen0
+ \penalty0 % so can break an ``unboxed'' table after a horizontal rule.
+ \egroup} % ends the \noalign
+
+% SHORT HORIZONTAL RULE: Draws a rule across 1 (or more) columns,
+% using \leaders; this rule doesn't extend across the neighboring
+% tabskip glues to join up with adjacent rule columns. By contrast
+% the LONG HORIZONTAL RULE below does just that.
+\def\!ttShortHrule{%
+ \omit
+ \!tgGetValue{\!ttShortHruleA}}
+
+\def\!ttShortHruleA{%
+ \!ttGetHalfRuleThickness % Sets \dimen0 to half of specified thickness
+ \leaders \hrule \!thHeight \dimen0 \!thDepth \dimen0 \hfill
+ \null % prevents an \unskip from annihilating the \leaders
+ \ignorespaces}
+
+% LONG HORIZONTAL RULE: This rule requires special coding.
+% It must be preceded and followed by '&', instead of the usual
+% '|' or '"'. However, '\_' can follow '\use' in the usual manner.
+% And in fact, to insert long-rules in two or more contiguous columns,
+% '\use' MUST be used with an argument = total number of columns involved.
+\def\!ttLongHrule{%
+ \omit\span\omit\span \!ttShortHrule}
+
+% GET RULE THICKNESS
+\def\!ttGetHalfRuleThickness{%
+ \dimen0 =
+ \ifnum \!tgCode=1
+ \ifx \!tgValue\empty
+ \LineThicknessFactor
+ \else
+ \!tgValue % user-specified integer
+ \fi
+ \LineThicknessUnit
+ \else
+ \!tgValue % user-specified dimension
+ \fi
+ \divide\dimen0 2 }
+
+
+% *********************************************************************
+% STRETCHING AND SHRINKING A TABLE
+% *********************************************************************
+
+% SET TABLE TO WIDTH <dimen>
+\def\SetTableToWidth#1{%
+ \!taTableSpread={to #1}}
+
+% WIDEN TABLE BY <dimen>
+\def\WidenTableBy#1{%
+ \ifdim #1=0pt
+ \!taTableSpread={}%
+ \else
+ \!taTableSpread={spread #1}%
+ \fi}
+
+\def\Expand{%
+ \SetTableToWidth{\hsize}}%
+
+\def\LongLines{%
+ \LeftTabskip =0pt plus 1fill
+ \RightTabskip=\LeftTabskip
+ \Expand}
+
+
+% *********************************************************************
+% REPOSITIONING COMMANDS (\JUSTLEFT, etc.)
+% *********************************************************************
+
+\def\JustLeft{%
+ \omit \let\!ttRightGlue=\hfill}
+\def\JustCenter{%
+ \omit \hfill\null \let\!ttRightGlue=\hfill}
+\def\JustRight{%
+ \omit \hfill\null}
+
+
+% *********************************************************************
+% Restore meaning of \\, and reset category codes
+% *********************************************************************
+\let\\=\!tacr
+\catcode`\!=12
+\catcode`\@=12
+
+
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-mla/CHANGES b/macros/latex/contrib/biblatex-contrib/biblatex-mla/CHANGES
index a3a9f7e2c0..f750e28d10 100644
--- a/macros/latex/contrib/biblatex-contrib/biblatex-mla/CHANGES
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-mla/CHANGES
@@ -1,24 +1,67 @@
+Changelog for version 2.0
+- changes for compatibility with the 9th edition of the MLA handbook, which is
+ very similar to that of the 8th edition; call "style=mla" to use the new
+ style.
+- renamed support for the older 7th edition; use "style=mla7" to use that older
+ style.
+- the new "style=mla-strict" option bypasses attempted intelligence in source
+ mapping first added in version 1.9
+- added additional source mappings to match MLA style
+- support added for a new containerized entrytype @mlasource to match the MLA
+ Handbook
+- support added for @manual, @misc, @movie, @patent, and @report entrytypes
+- by default, the bibliography now uses em-dashes instead of hyphens for
+ repeated author names
+- new "longdash=false" package option reverts from em-dash to hyphens for
+ repeated author names in the bibliography
+- new "showlocation" package option and entry option override the default of
+ omitting publisher locations
+- change in function of "totalnames" entry option; now, the number of names in
+ a citation will match the bibliographic entry
+- added default support for "datecirca"; use a tilde after a date to indicate
+ vagueness
+- fixed errors in code to make biblatex-mla work with the current version of
+ Biblatex, especially with dates
+- fixed presentation of multi-volume books
+- fixed problems in presentation of the titleaddon field to accommodate more
+ use cases
+- improved support for untitled works and works with unformatted titles
+- removed confusing logic of ibid citations with prenotes
+- corrected styling of titles in citations for @bookinbook, @inbook, @mvbook,
+ and @online entries
+- fixed multiple citation errors using simpler, suggested code from moewe
+- added booktitle in citations when title undefined
+- updated localizations for Spanish and Portuguese
+- improved documentation
+
Changelog for version 1.9
-- changes for compatibility with the latest MLA edition; use "style=mla-new" to change the Works Cited to the new style
-- added support for some common biblatex-chicago citation commands (\headlesscite, \textcite, etc.)
-- added preliminary support for new entry types (@artwork, @audio, @image, @letter, @music)
+- changes for compatibility with the latest MLA edition; use "style=mla-new" to
+ change the Works Cited to the new style
+- added support for some common biblatex-chicago citation commands
+ (\headlesscite, \textcite, etc.)
+- added preliminary support for new entry types (@artwork, @audio, @image,
+ @letter, @music)
- added style intelligence with source mapping:
* the word "University" in publisher names will automatically shorten to "U"
* the word "Press" in publisher names will automatically shorten to "P"
- * the phrase "University Press" in publisher names will automatically shorten to "UP"
- * certain words in publisher names--including "Company," "Corporation," "Incorporated", "Limited," and their
- respective abbreviations--will not be printed
- * if an entry includes a URL pointing to a number of eprint domains--including include JSTOR, Project Muse, Adelaide
- Online Books, Google Books, EBSCO Academic Search Complete, EBSCO LexisNexis, and the EBSCO MLA Database--
- biblatex-mla will correctly reformat it as an eprint
- * if an entry includes a URL pointing to a doi server, biblatex-mla will correctly reformat it as an doi reference
+ * the phrase "University Press" in publisher names will automatically
+ shorten to "UP"
+ * certain words in publisher names--including "Company," "Corporation,"
+ "Incorporated", "Limited," and their respective abbreviations--will not
+ be printed
+ * if an entry includes a URL pointing to a number of eprint
+ domains--including include JSTOR, Project Muse, Adelaide Online Books,
+ Google Books, EBSCO Academic Search Complete, EBSCO LexisNexis, and the
+ EBSCO MLA Database--biblatex-mla will correctly reformat it as an eprint
+ * if an entry includes a URL pointing to a doi server, biblatex-mla will
+ correctly reformat it as an doi reference
Changelog for version 1.6
- changes for compatibility with Biblatex 3.3+
- changed behavior of "mancitepar", which now defaults to false
- fixed buggy repetition of series field (hopefully)
-- an upcoming version will provide support for more entrytypes and reflect changes made
- in the 2016 MLA handbook
+- an upcoming version will provide support for more entrytypes and reflect
+ changes made in the 2016 MLA handbook
Changelog for version 1.5:
- changes for compatibility with Biblatex 2.5
@@ -27,8 +70,8 @@ Changelog for version 1.5:
- added epprinttype "jstor"
- added package options "noremoteinfo" and "mancitepar"
- added hyperref linking to "Web" bibstring
-- quashed lingering spacing errors, improved bibnamedash, and improved handling of starred
- autocites
+- quashed lingering spacing errors, improved bibnamedash, and improved handling
+ of starred autocites
- improved documentation, examples
Changelog for version 0.9.5:
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-mla/README b/macros/latex/contrib/biblatex-contrib/biblatex-mla/README
index 1020e057c6..25d2a52bcc 100644
--- a/macros/latex/contrib/biblatex-contrib/biblatex-mla/README
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-mla/README
@@ -3,7 +3,7 @@ Biblatex-mla provides Biblatex support for references and citations in the
style defined by the Modern Language Association (MLA). The style is a common
standard for writers in the humanities and is outlined in the MLA Style Manual
and the MLA Handbook for Writers of Research Papers. These files follow
-definitions for the 7th and 8th editions of the MLA Handbook. Before using
+definitions for the 9th, 8th, and 7th editions of the MLA Handbook. Before using
biblatex-mla, you will need to install Biblatex. Biblatex is commonly
included with most installations of LaTeX, but it can also be found at
http://www.ctan.org/pkg/biblatex
@@ -11,7 +11,7 @@ http://www.ctan.org/pkg/biblatex
Manual Installation:
1. Locate your latex installation folder
- - In OS X, it can be found at
+ - In OS X, it can probably be found at
~/Library/texmf/tex/latex/
2. Create a new folder called "biblatex-mla" if there isn't already one there
3. Place the biblatex-mla files into this folder
@@ -22,12 +22,15 @@ Usage:
your Latex preface:
\usepackage[american]{babel}
\usepackage{csquotes}
- \usepackage[style=mla-new]{biblatex}
+ \usepackage[style=mla]{biblatex}
\addbibresource{<bibfile>}
- - (replace "style=mla-new" with "style=mla" if you'd prefer to use the
- style described in the old edition of the Handbook)
+ - (replace "style=mla" with "style=mla7" if you'd prefer to use the
+ style described in the older 7th edition of the handbook)
+ - (replace "style=mla" with "style=mla-strict" if you'd prefer to avoid some
+ attempted cleverness to apply transformations to entries, including
+ publishers, URLs and eprint fields)
- (replace "<bibfile>" with the name of your .bib bibliography file)
- - to use MLA-style footnotes, use the "autocite=footnote" package option
+ - to use MLA-style footnotes (no longer well supported), use the "autocite=footnote" package option
2. Cite a text with \autocite{<key>}, cite a page with
\autocite[<page>]{<key>}, and include a citational prenote---"'To be or not to
be,' he wrote (Shakespeare qtd. in Brown 34)"---with
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-mla/american-mla.lbx b/macros/latex/contrib/biblatex-contrib/biblatex-mla/american-mla.lbx
index 3c5d93cc14..ca79f29c73 100644
--- a/macros/latex/contrib/biblatex-contrib/biblatex-mla/american-mla.lbx
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-mla/american-mla.lbx
@@ -1,14 +1,12 @@
-% american-mla.lbx v0.2.5 2013/03/24
-
-\ProvidesFile{american-mla.lbx}[2013/03/24 v0.2.5 biblatex style localization]
-
+% american-mla.lbx v2.0 2021/06/07
+\ProvidesFile{american-mla.lbx}[2021/06/07 v2.0 biblatex style localization]
\InheritBibliographyExtras{american}
\DeclareBibliographyExtras{%
\protected\def\mkbibdatelong#1#2#3{%
\iffieldundef{#3}
{}
- {\mkdatezeros{\thefield{#3}}%
+ {\mkdayzeros{\thefield{#3}}%
\iffieldundef{#2}{}{\nobreakspace}}%
\iffieldundef{#2}
{}
@@ -18,17 +16,17 @@
\protected\def\mkbibdateshort#1#2#3{%
\iffieldundef{#3}
{}
- {\mkdatezeros{\thefield{#3}}%
+ {\mkdayzeros{\thefield{#3}}%
\iffieldundef{#2}{}{/}}%
\iffieldundef{#2}
{}
- {\mkdatezeros{\thefield{#2}}%
+ {\mkmonthzeros{\thefield{#2}}%
\iffieldundef{#1}{}{/}}%
- \mkdatezeros{\thefield{#1}}}%
+ \mkyearzeros{\thefield{#1}}}%
}
\DeclareBibliographyStrings{%
inherit = {english},
}%
-\endinput \ No newline at end of file
+\endinput
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-mla/doc/biblatex-mla.pdf b/macros/latex/contrib/biblatex-contrib/biblatex-mla/doc/biblatex-mla.pdf
index 2dfff282c7..dca222c0fc 100644
--- a/macros/latex/contrib/biblatex-contrib/biblatex-mla/doc/biblatex-mla.pdf
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-mla/doc/biblatex-mla.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-mla/doc/biblatex-mla.tex b/macros/latex/contrib/biblatex-contrib/biblatex-mla/doc/biblatex-mla.tex
index 46a4d53e56..63e0567090 100644
--- a/macros/latex/contrib/biblatex-contrib/biblatex-mla/doc/biblatex-mla.tex
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-mla/doc/biblatex-mla.tex
@@ -1,14 +1,12 @@
-% biblatex-mla.tex v1.9 2016/11/01
+% biblatex-mla.tex v2.0 2021/06/07
% Maintained at <https://github.com/jmclawson/biblatex-mla/> by James Clawson.
%
% This material is subject to the LaTeX Project Public License. Feel free to improve, redistribute, and adapt to your own ends, as allowed by that license. (See http://www.ctan.org/tex-archive/help/Catalogue/licenses.lppl.html for license details.) For inclusion in future versions, please share improvements in formatting and MLA standards compliance back to James Clawson: <biblatex-mla@konx.net>.
-%
-% File is in constant progress. Things are messy. Ignore platypi.
-\documentclass{ltxdockit}[2011/03/25]
+\documentclass{ltxdockit}
\usepackage{xcolor}
-\usepackage{btxdockit}
-\usepackage[latin9]{inputenc}
+% \usepackage{btxdockit}
+% \usepackage[latin9]{inputenc}
\usepackage[american]{babel}
\usepackage[strict]{csquotes}
\usepackage[style=mla,mancitepar=false]{biblatex}
@@ -88,8 +86,8 @@ citecolor=black,%
subtitle={\mla{} Style Using \biblatex},
url={\biblatexmlahome},
author={James Clawson},
- email={biblatex-mla@konx.net},
- revision={1.9},
+ email={},%},
+ revision={2.0},
date={\today}}
\hypersetup{%
@@ -101,6 +99,9 @@ citecolor=black,%
% colors
\definecolor{spot}{rgb}{1,0.5,0}
+\definecolor{new}{rgb}{0,0.5,1}
+
+\newcommand*{\newthis}{\textbf{\textcolor{new}{|(new in 2.0)|}} }
% tables
@@ -175,7 +176,7 @@ citecolor=black,%
\renewcommand*{\multinamedelim}{\addspace\bibstring{and}\space}
-\newcommand{\mlafullexample}[2]{\newline%
+\newcommand{\mlafullexample}[2]{%\newline%
\mlabibbox{orange}{\begin{description}\item\mlaexample{#1}\end{description}}%
\normalfont{#2}\selectlanguage{american}%
\mlaprintbox{white}{\begin{description}\item\normalfont\fullcite{#1}\end{description}}}
@@ -286,14 +287,14 @@ citecolor=black,%
% subsection examples (end)
\section{Version Note}
-This beta update is for testing compatibility with the 8\superscript{th} edition of the \emph{MLA Handbook}, published April 2016. This current version supports both the old edition (by using \sty{style=mla} in the preamble) and the newer edition (using \sty{style=mla-new}); an upcoming version of \biblatexmla will deprecate support for the 7\superscript{th} edition in favor of the 8\superscript{th}. See \secref{mla:sec:use} for more on switching between editions.
+This update is to improve compatibility with the 9\superscript{th} edition of the \emph{MLA Handbook}, published April 2021. See \secref{mla:sec:use} for more on switching between editions.
\section{Introduction}
\label{int}
\Biblatexmla provides support to \biblatex, \bibtex, and \latex for citations and Works Cited lists in the style established by the Modern Language Association (\mla). For commands and options to change package defaults, see \secref{mla:subsec:commands} and \secref{mla:subsec:options}, respectively, below.
-\mla style, a common standard for writers in the humanities, is outlined in the \emph{MLA Style Manual}, in its 3\superscript{rd} edition, and the \emph{MLA Handbook for Writers of Research Papers}, now in its 8\superscript{th} edition. \Biblatexmla follows the style outlined in the latter of these. It also follows the logic of the \mla{} when citing similar material repeatedly, trimming unnecessary information from citations where necessary. \Biblatexmla is compatible with \biblatex's support for \sty{hyperref} and \sty{tex4ht}, and the main word in each citation (either the author's name, the title, or the page number) serves as a link to the particular entry in the Works Cited. For anything not covered by this manual, please also see the \biblatex documentation or contact me by email.
+\mla style, a common standard for writers in the humanities, is outlined in the \emph{MLA Style Manual}, in its 3\superscript{rd} edition, and the \emph{MLA Handbook for Writers of Research Papers}, now in its 9\superscript{th} edition. \Biblatexmla follows the style outlined in the latter of these. It also follows the logic of the \mla{} when citing similar material repeatedly, trimming unnecessary information from citations where necessary. \Biblatexmla is compatible with \biblatex's support for \sty{hyperref} and \sty{tex4ht}, and the main word in each citation (either the author's name, the title, or the page number) serves as a link to the particular entry in the Works Cited. For anything not covered by this manual, please also see the \biblatex documentation or reach out via GitHub.
\newpage
\section{Use}
@@ -301,38 +302,56 @@ This beta update is for testing compatibility with the 8\superscript{th} edition
To ensure American-style quotation marks (if that's your thing),%
%%
-\footnote{Other localization files, \sty{mla-spanish.lbx}, \sty{mla-portuguese.lbx}, and \sty{mla-italian.lbx}, are also available to use \biblatexmla in languages other than English. These and other localization files are included in \biblatexmla releases, but they will not always be the latest versions available. Updated and new localization files will be kept on GitHub (\mylink{\biblatexmlahome}) once they are ready. There is also support for proper punctuation in non-American dialects of English. Try \mycode{british}, \mycode{canadian}, or other Babel identifiers, such as \mycode{spanish}.} %
+\footnote{Other localization files, \sty{mla-spanish.lbx}, \sty{mla-portuguese.lbx}, and \sty{mla-italian.lbx}, are also available to use \biblatexmla in languages other than English. These and other localization files are included in \biblatexmla releases, but they have fallen out of sync with the English versions. The latest version of these files will be kept on GitHub (\mylink{\biblatexmlahome}); new translations are welcome. There is also support for proper punctuation in non-American dialects of English. Try \mycode{british}, \mycode{canadian}, or other Babel identifiers, such as \mycode{spanish}.} %
%%
-you need to call the \sty{babel} and \sty{csquotes} packages in the preamble
+call the \sty{babel} and \sty{csquotes} packages in the preamble
of your \latex document:
\begin{quote}
\begin{verbatim}
\usepackage[american]{babel}
\usepackage{csquotes}
- \usepackage[style=mla-new]{biblatex}
+ \usepackage[style=mla]{biblatex}
\addbibresource{<bibfile.bib>}
\end{verbatim}
\end{quote}
-To use the style called for by the previous (7\superscript{th}) edition of the \emph{MLA Handbook}, drop the ``new'' from the third line:
+
+By default, \biblatexmla will transform some data in ways preferred by \mla style: for example, URLs will omit protocol prefixes like |http://|, some URLs will be converted to eprint entries, and publisher names will be simplified to abbreviate ``University Press'' to ``UP.'' To skip these transformations, change the style referenced in the third line to \textbf{|mla-strict|}:
\begin{quote}
\begin{verbatim}
\usepackage[american]{babel}
\usepackage{csquotes}
- \usepackage[style=mla]{biblatex}
+ \usepackage[style=mla-strict]{biblatex}
+ \addbibresource{<bibfile.bib>}
+ \end{verbatim}
+\end{quote}
+
+To use the older style called for by the 7\superscript{th} edition of the \emph{MLA Handbook}, change this line to \textbf{|mla7|}:
+\begin{quote}
+ \begin{verbatim}
+ \usepackage[american]{babel}
+ \usepackage{csquotes}
+ \usepackage[style=mla7]{biblatex}
\addbibresource{<bibfile.bib>}
\end{verbatim}
\end{quote}
-Replace <|<bibfile.bib>|> with the name of your .bib bibliography file. The style (provisionally) supports footnote citations with the \mycode{autocite=footnote} package option. Some of the other options supported by \biblatexmla include \mycode{firstlonghand}, \mycode{mladraft}, \mycode{annotation}, \mycode{noremoteinfo}, \mycode{nofullfootnote}, \mycode{publimedium}, and \mycode{guessmedium}, all discussed in \secref{mla:subsec:options}.
+Replace <|<bibfile.bib>|> with the name of your .bib bibliography file. The style (provisionally) supports footnote citations with the \mycode{autocite=footnote} package option. Some of the other options supported by \biblatexmla include \mycode{firstlonghand}, \mycode{noremoteinfo}, \mycode{showlocation}, and others discussed in \secref{mla:subsec:options}.
-\subsection{Citation commands}
+\subsection{Commands}
\label{mla:subsec:commands}
The standard commands for \biblatexmla generally follow those defined by \biblatex. Included below are the most typical commands. For more commands and options, reference the \biblatex manual.
+\subsubsection{Typical Commands}
+\label{mla:subsubsec:typical}
+
\begin{commandlist}
+\commanditem{printbibliography}
+
+Insert the list of Works Cited; typically used at the end of a document. As may be expected, this command will print a bibliography including full, alphabetized, MLA-style entries for every source cited using one of the below citation commands.
+
\commanditem{autocite}
Insert a citation. This is the most common command for citing in \biblatexmla, and it defaults to printing a parenthetical citation. See \tabref{use:cit:all} for examples. For best results, use the command before punctuation like this:
@@ -363,9 +382,7 @@ When citing a page number without any prenote, only one set of square brackets i
\end{verbatim}
\end{quote}
-\commanditem{autocite*}
-
-Suppress the author's name in a citation. See \tabref{use:cit:all} for examples. Use this starred variant of the above command when indicating the author's name in the sentence calling the citation.
+To omit the name of the author (or editor) responsible for the source when they've already been named in the sentence, use the starred version (\cmd{autocite*[z][y]\{x\}}) of this command.
\commanditem{autocites}
@@ -377,43 +394,21 @@ Insert a citation for multiple sources at once. The respective citations will be
\end{quote}
The curled braces always indicate the bibkey, and the squared braces respectively belong to the curly braces that follow them.
-\commanditem{cite}
-
-Insert a citation without parentheses.
-
-\commanditem{cite*}
-
-Insert a citation without parentheses and without the author's name.
+\commanditem{parencite}
-\commanditem{headlesscite}
-
-Suppress the author's name in a citation. This command is an alias to \cmd{autocite*} to make it easier to use \biblatexmla with \biblatexcms.
+Insert a citation inside parentheses. Indicate page numbers and any prenote like ``qtd.\ in'' in the spaces marked |y| and |z| below, respectively:
-\commanditem{textcite}
-
-Print a citation without parentheses. This command may be useful in certain circumstances, such as a citation that must come within a parenthetical aside.
-
-% (these commands aren't yet working.)
-%
-% \commanditem{fullcite}
-%
-% Print a full citation where a shortened citation might otherwise come.
-%
-% \commanditem{headlessfullcite}
-%
-% Except for the author's name, print a nearly-full citation where a shortened citation might otherwise come.
-
-\commanditem{mancite}
-
-Reset most trackers that shorten subsequent citations. See \tabref{use:cit:all} for an example. If \biblatexmla is getting so ambitious in shortening subsequent citations that it leads to ambiguity, use this command before the ambiguous citation.
-
-\commanditem{citereset}
+\begin{quote}
+ \begin{verbatim}
+ \parencite[z][y]{x}
+ \end{verbatim}
+\end{quote}
-Reset all citation trackers for \biblatexmla.%
+All of these citation commands follow the pattern described above for |\autocite{}|, which is the preferred citation command to use. To omit the source author or editor, use the starred version of this command: \cmd{parencite*[z][y]\{x\}}
-\commanditem{printbibliography}
+\commanditem{footcite}
-Insert the list of Works Cited.
+Insert a citation in a footnote. The |\footcite| command should be reserved for occasional use in favor of the general use of |\autocite| with the package option |autocite=footnote|, mentioned above. To omit the name of the author or editor, use the starred version of this command: \cmd{footcite*[z][y]\{x\}}
\end{commandlist}
@@ -469,6 +464,63 @@ Insert the list of Works Cited.
\label{use:cit:all}
\end{table}
+\clearpage
+
+\subsubsection{In-Text Commands}
+\label{mla:subsubsec:intext}
+
+\begin{commandlist}
+
+\commanditem{cite}
+
+Insert a citation without parentheses or footnote styling. These kinds of citations aren't often used in writing for \mla{}-related fields, but the command may be useful within a parenthetical aside or a footnote. To omit the name of the author or editor, use the starred version of this command: \cmd{cite*[z][y]\{x\}}
+
+\commanditem{citeauthor}
+
+Print the names of the author(s) or editor(s) associated with a source. In its current form, the unstarred command will always print given and family names, while the starred variant (\cmd{citeauthor*\{x\}}) will omit given names.
+
+\commanditem{citetitle}
+
+Print the title of a source. The unstarred version will print the |shorttitle| if it is available; the starred version (\cmd{citetitle*\{x\}}) will always print the full title.
+
+\commanditem{citeyear}
+
+Print the year associated with a source.
+
+% (these commands aren't yet working.)
+%
+% \commanditem{fullcite}
+%
+% Print a full citation where a shortened citation might otherwise come.
+%
+% \commanditem{headlessfullcite}
+%
+% Except for the author's name, print a nearly-full citation where a shortened citation might otherwise come.
+
+\end{commandlist}
+
+\subsubsection{Special Commands}
+\label{mla:subsubsec:special}
+
+\begin{commandlist}
+
+\commanditem{mancite}
+
+Reset most trackers that would shorten subsequent citations. See \tabref{use:cit:all} for an example. If \biblatexmla{}'s ambition to shorten citations leads to ambiguity, using this command before a citation should print the longer version.
+
+\commanditem{citereset}
+
+Reset all citation trackers for \biblatexmla.%
+
+\commanditem{headlesscite}
+
+Suppress the author's name in a citation. This command provides an alias to \cmd{autocite*} to make it easier for anyone using \biblatexmla and \biblatexcms interchangeably.
+
+\commanditem{textcite}
+
+An alias to |\cite|, above.
+
+\end{commandlist}
\subsection{Package Options}
\label{mla:subsec:options}
@@ -476,12 +528,21 @@ Insert the list of Works Cited.
\Biblatexmla defaults to the recommendations established by the \mla{}, but there may be times when it is appropriate to change some of these options for publication or other uses. Package options change the default functionality of \biblatexmla.
\begin{optionslist}
-\optionitem{autocite=footnote}
+% \optionitem{autocite=footnote}
+%
+% Using \mycommand{autocite} with biblatex-mla defaults to \mla{}-preferred inline, parenthetical citations. To style citations as footnotes, set the \mycode{autocite=footnote} option in your preamble:
+% \begin{quote}
+% \begin{verbatim}
+% \usepackage[style=mla,autocite=footnote]{biblatex}
+% \end{verbatim}
+% \end{quote}
-Using \mycommand{autocite} with biblatex-mla defaults to \mla{}-preferred inline, parenthetical citations. To style citations as footnotes, set the \mycode{autocite=footnote} option in your preamble:
+\optionitem{annotation}
+It is possible to print annotations to entries in the Works Cited if the \mycode{annotation} field is defined in an entry. To turn on this option, add \mycode{annotation=true} to your
+preamble:
\begin{quote}
\begin{verbatim}
- \usepackage[style=mla,autocite=footnote]{biblatex}
+ \usepackage[style=mla,annotation=true]{biblatex}
\end{verbatim}
\end{quote}
@@ -492,21 +553,30 @@ The first citation of a source with a shorthand defined will always print a cita
\usepackage[style=mla,firstlonghand=false]{biblatex}
\end{verbatim}
\end{quote}
+% \noindent\begin{minipage}{\linewidth}
+% \end{minipage}
-\optionitem{nofullfootnote}\label{mla:internal:nofullfootnote}
-When using biblatex-mla for footnotes, the style file will provide full bibliographic detail for the first citation of every source. To turn off this option, add to your preamble \mycode{nofullfootnote}:
+\optionitem{guessmedium}
+When using the |style=mla7| option, an entry with no defined \sty{howpublished} field will default either to a <Web> publication (if there's a defined \sty{url} field or \sty{eprint} field) or a <Print> publication (if there's not). To avoid \biblatexmla guessing the publication medium, thereby printing nothing when the field is undefined, deactivate the \mycode{guessmedium} option:
\begin{quote}
\begin{verbatim}
- \usepackage[style=mla,autocite=footnote,nofullfootnote]{biblatex}
+ \usepackage[style=mla7,guessmedium=false]{biblatex}
\end{verbatim}
\end{quote}
-\optionitem{annotation}
-It is possible to print annotations to entries in the Works Cited if the \mycode{annotation} field is defined in an entry. To turn on this option, add \mycode{annotation=true} to your
-preamble:
+\optionitem{longdash}\label{mla:internal:longdash}
+\newthis The 9\superscript{th} edition of the \emph{\mla Handbook} clarifies that dashes indicating multiple entries by one author can either be styled wih three em-dashes or three hyphens. From version 2.0, \biblatexmla defaults to em-dashes, but setting |longdash| to false in the document header reverts to using hyphens:
\begin{quote}
\begin{verbatim}
- \usepackage[style=mla,annotation=true]{biblatex}
+ \usepackage[style=mla,longdash=false]{biblatex}
+ \end{verbatim}
+\end{quote}
+
+\optionitem{mancitepar}
+Although perhaps they should, the author trackers in \biblatexmla do not by default reset with each paragraph or page. As a result, shortened citations may be unclear when much distance has passed from previous, fuller citations. To avoid this ambiguity, the \cmd{mancite} command can be called before an unclear citation. (See \tabref{use:cit:all} for the effects of \cmd{mancite}.) Alternatively, consider asking \biblatexmla to silently call the \cmd{mancite} command with each new paragraph by enabling the \mycode{mancitepar} package option:
+\begin{quote}
+ \begin{verbatim}
+ \usepackage[style=mla,mancitepar=true]{biblatex}
\end{verbatim}
\end{quote}
@@ -518,39 +588,48 @@ When using \mla{} parenthetical citations, it is best practice to cite only when
\end{verbatim}
\end{quote}
+\optionitem{nofullfootnote}\label{mla:internal:nofullfootnote}
+When using \biblatexmla for footnotes, the style file will provide full bibliographic detail for the first citation of every source. To turn off this option, add to your preamble \mycode{nofullfootnote}:
+\begin{quote}
+ \begin{verbatim}
+ \usepackage[style=mla,autocite=footnote,nofullfootnote]{biblatex}
+ \end{verbatim}
+\end{quote}
+
\optionitem{noremoteinfo}\label{mla:internal:noremoteinfo}
-Modeled after the implementation in biblatex-apa to suppress remote information in the \sty{.bib} file from being printed in the bibliography, this option affects \sty{isbn}, \sty{issn}, \sty{isrn}, \sty{doi}, and \sty{eprint} fields.
+Modeled after the implementation in |biblatex-apa| to suppress remote information in the \sty{.bib} file from being printed in the bibliography, this option affects \sty{isbn}, \sty{issn}, \sty{isrn}, \sty{doi}, and \sty{eprint} fields.
\begin{quote}
\begin{verbatim}
\usepackage[style=mla,noremoteinfo=true]{biblatex}
\end{verbatim}
\end{quote}
-\optionitem{showmedium}
-\Biblatexmla version 0.9 introduced support for the 3\superscript{rd} edition of the \emph{Style Manual}, requiring the publication medium of each entry to be printed in the list of Works Cited. By default, \biblatexmla will do the same, using the \sty{howpublished} field. Turn off this option---and the other new changes from the 3\superscript{rd} edition---by setting the \mycode{showmedium} option to false:
+\optionitem{showlocation}\label{mla:internal:showlocation}
+\newthis The 8\superscript{th} and 9\superscript{th} editions of the \emph{\mla Handbook} advise witholding publication location for most entries, so \biblatexmla omits showing the |location| field for many entry types. To show these location fields for all sources when they exist, use the |showlocation| option in the document header:
\begin{quote}
\begin{verbatim}
- \usepackage[style=mla,showmedium=false]{biblatex}
+ \usepackage[style=mla,showlocation=true]{biblatex}
\end{verbatim}
\end{quote}
-\optionitem{guessmedium}
-An entry with no defined \sty{howpublished} field will default either to a <Web> publication (if there's a defined \sty{url} field or \sty{eprint} field) or a <Print> publication (if there's not). To avoid \biblatexmla guessing the publication medium, thereby printing nothing when the field is undefined, deactivate the \mycode{guessmedium} option:
+Alternatively, selectively show the location for individual entries by defining the |options| field in the |.bib| file:
\begin{quote}
\begin{verbatim}
- \usepackage[style=mla,guessmedium=false]{biblatex}
+ @book{dewey99aa,
+ ...
+ options = {showlocation=true}
+ }
\end{verbatim}
\end{quote}
-\optionitem{mancitepar}
-Although perhaps they should, the author trackers in \biblatexmla do not by default reset with each paragraph or page. As a result, shortened citations may be unclear when much distance has passed from previous, fuller citations. To avoid this ambiguity, the \cmd{mancite} command can be called before an unclear citation. (See \tabref{use:cit:all} for the effects of \cmd{mancite}.) Alternatively, consider asking \biblatexmla to silently call the \cmd{mancite} command with each new paragraph by enabling the \mycode{mancitepar} package option:
+\optionitem{showmedium}
+When using the |style=mla7| option, \biblatexmla will print the publication medium at the end of each entry in the list of Works Cited. Turn off this option---and some other new changes from the 3\superscript{rd} edition---by setting the \mycode{showmedium} option to false:
\begin{quote}
\begin{verbatim}
- \usepackage[style=mla,mancitepar=true]{biblatex}
+ \usepackage[style=mla7,showmedium=false]{biblatex}
\end{verbatim}
\end{quote}
-
\end{optionslist}
\section{Database Guide}
@@ -558,23 +637,23 @@ Although perhaps they should, the author trackers in \biblatexmla do not by defa
% I lost my original documentation files, including original style files I created to maintain them, so I'm transitioning everything to Philipp Lehman's \sty{ltxdockit}. This part of the user guide, explaining how to create \sty{bibtex} entries for use with \biblatexmla, will be updated shortly. Until then, please see \S{} 4 (pages 7--20) of the previous version: \mylink{http://konx.net/biblatex-mla/biblatex-mla.pdf}.
-\biblatex (and, thus, \biblatexmla) uses \bibtex-style databases to manage the citations and list of works cited. While these databases are just flat text files, there are many good programs available to help manage them. Zotero, Endnote, and other commercial programs, for example, can export as \bibtex; each of these will nevertheless export with varying degrees of success. Standalone \bibtex managers such as JabRef and BibDesk use \sty{.bib} files as their native filetype and are much more reliable for managing your list of sources. Whether exporting from a program, managing .bib files in a standalone editor, or manipulating them in a text editor, it is necessary to be familiar with fields available to \biblatexmla---especially as some of these are unique \biblatex and \biblatexmla. Below are the different \sty{@types} and the \mycode{fields} available to them. Keep in mind that some of the fields in the \sty{@book} and \sty{@article} types (e.g., \sty{nameaddon}, \sty{origyear}, and others) are also available in others where it makes sense; I don't repeat them here to save room.
-
+\biblatex uses \bibtex-style databases to manage the citations and list of works cited. With some notable distinctions, \biblatexmla tries to follow typical \biblatex conventions for fields and entry types. % The guide below explains some are the different \sty{@types} and the \mycode{fields} available to them. Keep in mind that some of the fields in the \sty{@book} and \sty{@article} types (e.g., \sty{nameaddon}, \sty{origyear}, and others) are also available in others where it makes sense; I don't repeat them here to save room.
+%
% \subsection{Typical fields} % (fold)
% \label{sub:typical_fields}
%
-% The best way to acquaint oneself with \biblatexmla is to explore the included \sty{.bib} files, \sty{.tex} files, and the resulting \sty{.pdf} output. Much of the the bibfile database is pretty obvious. Take a look at \tabref{fig:example-book}, for example.
+% The best way to acquaint oneself with \biblatexmla is to explore the included \sty{.bib} file, \sty{.tex} files, and the resulting \sty{.pdf} output. Much of the the bibfile database is pretty obvious. Take a look at \tabref{fig:example-book}, for example.
% \begin{table}[tbp]
% \centering
% \includegraphics[width=4.8in]{example-book.pdf}
% \caption{A standard \sty{.bib} file \mycode{@book} entry and its corresponding output in the list of Works Cited, beneath.}
% \label{fig:example-book}
% \end{table}
-%
% In addition to many of the standard fields one might expect to find, \biblatexmla is also capable of handling unusual fields, described below. For a fuller consideration of the fields supported by \biblatexmla, see the example files and consult the Biblatex manual.
-
-
-% \mlafullexample{douglas93aa}{The above entry, found in the \sty{.bib} file, outputs to the below entry in the list of works cited:} %Below are the different \sty{@types} and the fields available to them. Keep in mind that some of the fields in the \sty{@book} and \sty{@article} types (for example, \sty{nameaddon}, \sty{origyear}, and others) are also available in others where it makes sense; I don't repeat them here to save room.
+%
+%
+% \mlafullexample{douglas93aa}{The above entry, found in the \sty{.bib} file, outputs to the below entry in the list of works cited:} %
+Much of the the bibfile database is pretty obvious, so the best way to get acquainted with \biblatexmla is to explore the included \sty{.bib}, \sty{.tex}, and \sty{.pdf} files. Additionally, some of the different \sty{@types} and fields are explained below. Keep in mind that some of the fields in the \sty{@book} and \sty{@article} types (for example, \sty{nameaddon}, \sty{origyear}, and others) are also available in others where it makes sense; I don't repeat them here to save room.
% subsection typical_fields (end)
@@ -595,12 +674,13 @@ Although perhaps they should, the author trackers in \biblatexmla do not by defa
\optionitem{options}
separate the following options with a comma:
\begin{description}
+ \item[noremoteinfo=false] indicates that the ``remote'' information of an entry is to be printed, including the fields \sty{isbn}, \sty{issn}, \sty{isrn}, \sty{doi}, and \sty{eprint}. These fields are usually omitted. See also the global option also called \mycode{noremoteinfo}, on page~\pageref{mla:internal:noremoteinfo}, above, for defining this option on a per-document basis. The \mycode{noremoteinfo} option defaults to true.
+ \item[showlocation=true] \newthis indicates that the publisher's city of operations for an entry is to be printed. These fields are usually omitted. See also the global option also called \mycode{showlocation}, on page~\pageref{mla:internal:showlocation}, above, for defining this option on a per-document basis. The \mycode{showlocation} option defaults to false.
+ \item[totalnames=true] allows the label to include all the names in its list, rather than maxing out at three. The \mycode{totalnames} option defaults to false.
+ \item[uniquetranslator=true] indicates that a translator of a particular \sty{@incollection} entry is unique to that work, rather than the collection at large. The \mycode{uniquetranslator} option defaults to false.
\item[useauthor=false] allows the label of the entry to default to something other than the author, when the author field is defined. If the editor is defined, the label will default to that. The \mycode{useauthor} option defaults to true.
\item[useeditor=false] allows the label of the entry default to something other than the editor in the case of the author field being undefined or the \mycode{useauthor} option set to false. The \mycode{useeditor} option defaults to true.
\item[usetranslator=true] allows the label of the entry to inherit the name of the translator when the author and editor fields are undefined or the \mycode{useauthor} and \mycode{useeditor} options are set to false. The \mycode{usetranslator} option defaults to false.
- \item[totalnames=true] allows the label to include all the names in its list, rather than maxing out at three. The \mycode{totalnames} option defaults to false.
- \item[uniquetranslator=true] indicates that a translator of a particular \sty{@incollection} entry is unique to that work, rather than the collection at large. The \mycode{uniquetranslator} option defaults to false.
- \item[noremoteinfo=false] indicates that the ``remote'' information of an entry is to be printed, including the fields \sty{isbn}, \sty{issn}, \sty{isrn}, \sty{doi}, and \sty{eprint}. These fields are usually omitted. See also the global option also called \mycode{noremoteinfo}, on page~\pageref{mla:internal:noremoteinfo}, above, for defining this option on a per-document basis. The \mycode{noremoteinfo} option defaults to true.
\end{description}
\end{optionslistNOT}
@@ -622,13 +702,13 @@ A book, usually with one author. \mla{}-style book entries are straightforward,
book subtitle; when using \sty{crossref}, also define \sty{booksubtitle} and be sure to define \sty{subtitle} of the child
\optionitem{location}
- entryplace of publication
+ place of publication; ignored unless |showlocation| is |true|
\optionitem{publisher}
publishing house
\optionitem{date}
- date of publication; defined as \sty{YYYY} for a year, \sty{YYYY-MM} for a month, \sty{YYYY-MM-DD} for a day, or \sty{YYYY-MM-DD/YYYY-MM-DD} for a range
+ date of publication; defined as \sty{YYYY} for a year, \sty{YYYY-MM} for a month, \sty{YYYY-MM-DD} for a day, or \sty{YYYY-MM-DD/YYYY-MM-DD} for a range. Use a tilde to indicate uncertainty: \sty{{\raisebox{0.5ex}{\texttildelow}}1400} will print as ``circa 1400'' in the list of Works Cited.
\end{optionslistNOT}
Other fields might come in handy for further granularity:
@@ -638,7 +718,7 @@ Other fields might come in handy for further granularity:
original publication date, for reprints; defined as \sty{YYYY} for a year, \sty{YYYY-MM} for a month, \sty{YYYY-MM-DD} for a day, or \sty{YYYY-MM-DD/YYYY-MM-DD} for a range
\optionitem{edition}
- edition number
+ edition number, preferably an integer
\optionitem{volume}
volume number of book
@@ -712,25 +792,25 @@ Finally, the style files also define the following note fields for further clari
\end{optionslistNOT}
-Fields not yet supported in biblatex-mla (but which should be supported in future versions) include the following:
-
-\begin{optionslistNOT}
- \optionitem{howpublished}
- to be used in support of the MLA-style revisions in the third edition of the \emph{MLA Style Manual} and the 7th edition of the \emph{MLA Handbook}; will default to ``Print'' when undefined
-
- \optionitem{origlocation}
- original place of publication (for reprints)
-
- \optionitem{origpublisher}
- original publisher (for reprints)
-
- \optionitem{origtitle}
- original title (for reprints)
-
- \optionitem{origlanguage}
- the original language of a translated, reprinted work. Biblatex-mla will not print information in this field, but if the field has information in it, it will use the phrase ``Trans. of'' before the original title, instead of ``Rept. of''.
-
-\end{optionslistNOT}
+% Fields not yet supported in biblatex-mla (but which should be supported in future versions) include the following:
+%
+% \begin{optionslistNOT}
+% \optionitem{howpublished}
+% to be used in support of the MLA-style revisions in the third edition of the \emph{MLA Style Manual} and the 7th edition of the \emph{MLA Handbook}; will default to ``Print'' when undefined
+%
+% \optionitem{origlocation}
+% original place of publication (for reprints)
+%
+% \optionitem{origpublisher}
+% original publisher (for reprints)
+%
+% \optionitem{origtitle}
+% original title (for reprints)
+%
+% \optionitem{origlanguage}
+% the original language of a translated, reprinted work. Biblatex-mla will not print information in this field, but if the field has information in it, it will use the phrase ``Trans. of'' before the original title, instead of ``Rept. of''.
+%
+% \end{optionslistNOT}
\subsubsection*{@booklet}
Small pamphlet, often without an author listed. In \biblatexmla, \mycode{@booklet} is an alias for \mycode{@book} (see above), and is styled similarly.
@@ -864,14 +944,14 @@ The entry for a @thesis that has been published needs a few additional fields:
\optionitem{entrysubtype}
- \biblatexmla recognizes only two keys in the \sty{entrysubtype} field for the \sty{@thesis}:
+ When using the 7\superscript{th} edition style, which differentiates between published and unpublished dissertation titles, \biblatexmla recognizes two keys in the \sty{entrysubtype} field for the \sty{@thesis}:
\begin{description}
\item[published] for published theses
\item[unpublished] for unpublished theses
\end{description}
- any key other than \sty{published} or \sty{unpublished} will be treated as if it were \sty{unpublished}
+ Any key other than \sty{published} or \sty{unpublished} will be treated as if it were \sty{unpublished}.
\optionitem{location}
@@ -1055,7 +1135,7 @@ Note that \sty{@inreference} entries do not need to cite page numbers, though th
\subsubsection*{@letter}
-The \sty{@letter} entry type is only partially supported in \biblatexmla in order to begin work to support it further in the future. It is currently built onto the same backend as \sty{@article} entries, so it will accept additional fields used in that entry type.
+The \sty{@letter} entry type is defined similarly to the \sty{@article} type, so it will accept additional fields used in those entries.
\begin{optionslistNOT}
@@ -1126,7 +1206,7 @@ A foreword, introduction, preface, or other supplementary (and often untitled) m
\subsection{Other media}
\subsubsection*{@artwork}
-The \sty{@artwork} entry type is only partially supported in \biblatexmla in order to begin work to support it further in the future. It is currently built onto the same backend as \sty{@article} entries, so it accepts additional fields used in that entry type.
+The \sty{@artwork} entry type is defined similarly to the \sty{@article} type, so it will accept additional fields used in those entries.
\begin{optionslistNOT}
@@ -1147,7 +1227,7 @@ The \sty{@artwork} entry type is only partially supported in \biblatexmla in ord
\end{optionslistNOT}
\subsubsection*{@audio}
-The \sty{@audio} entry type is only partially supported in \biblatexmla in order to begin work to support it further in the future. It is currently built onto the same backend as \sty{@article} entries, so it accepts additional fields used in that entry type.
+The \sty{@audio} entry type is defined similarly to the \sty{@article} type, so it will accept additional fields used in those entries.
\begin{optionslistNOT}
@@ -1170,7 +1250,7 @@ The \sty{@audio} entry type is only partially supported in \biblatexmla in order
\end{optionslistNOT}
\subsubsection*{@image}
-The \sty{@image} entry type is only partially supported in \biblatexmla in order to begin work to support it further in the future. It is currently built onto the same backend as \sty{@article} entries, so it accepts additional fields used in that entry type.
+The \sty{@image} entry type is defined similarly to the \sty{@article} type, so it will accept additional fields used in those entries.
\begin{optionslistNOT}
@@ -1190,12 +1270,33 @@ The \sty{@image} entry type is only partially supported in \biblatexmla in order
\end{optionslistNOT}
+\subsubsection*{@manual}
+\newthis This entry type is an alias for \sty{@book}.
+
+\subsubsection*{@misc}
+\newthis This entry type behaves like \sty{@article} entries, but titles aren't printed inside quotation marks.
+
+\subsubsection*{@movie}
+\newthis This entry type is an alias for \sty{@video}.
+
\subsubsection*{@music}
This entry type is an alias for \sty{@audio}.
\subsubsection*{@online}
This entry type is an alias for \sty{@article}.
+\subsubsection*{@patent}
+\newthis This entry type is currently built onto the same backend as \sty{@article} entries, so it accepts additional fields used in that entry type. Additionally, it adds some additional operations to the type field:
+
+\begin{optionslistNOT}
+
+ \optionitem{type} the type of patent, with relation to the country in which it was issued. For instance, \sty{patenteu} or \sty{patentus} will automatically establish some standard expectations for the Works Cited entry of a patent from the European Union or one from the United States. See section 4.9.2.20 of the \biblatex manual for more of these expected strings.
+
+\end{optionslistNOT}
+
+\subsubsection*{@report}
+\newthis This entry type is an alias for \sty{@book}.
+
\subsubsection*{@unpublished}
An unpublished manuscript or typescript. \Biblatexmla supports the following fields typical to an unpublished entry:
@@ -1215,14 +1316,24 @@ An unpublished manuscript or typescript. \Biblatexmla supports the following fie
\optionitem{note} further information used to classify the collection; typeset before the \sty{type} field
- \optionitem{type} form of the material. \Biblatexmla defines some MLA-style \sty{@unpublished} types pre-localized; choose from the following strings to get accurate styling:
+ \optionitem{type} form of the material. For example, some of the following strings are recognized:
+
+ \begin{description}
+ \item[manuscript] printed as ``Manuscript'' or ``ms'' in English
+ \item[transcript] printed as ``Typescript'' or ``ts'' in English
+ \end{description}
+
+ For all other types not matching the above codes, \biblatexmla will print the \sty{type} field exactly as entered, respecting all existing capitalization
+
+ \optionitem{entrysubtype} \newthis special consideration for styling the title of the work or for indicating that a given title is just a description of the material consulted. The following strings are recognized:
\begin{description}
- \item[manuscript] for the manuscript of a work; printed as ``Ms.'' or ``ms.'' in English
- \item[transcript] for the typescript of a work; printed as ``Ts.'' or ``ts.'' in English
+ \item[untitled] for unstyled titles
+ \item[book] for titles that should be styled like a book
+ \item[article] for titles that should be styled like an article
\end{description}
- For all other types not matching the above codes, \biblatexmla will print the type \sty{field} exactly as entered, respecting all existing capitalization
+ \Biblatexmla will further try to style the title to match any type listed in the \sty{entrysubtype} field.
\optionitem{number} identifying number (such as a call number, box, or folio reference) in a library or archive
@@ -1282,14 +1393,68 @@ Note that \biblatexmla will print the \sty{author} field before the \sty{title}
\end{optionslistNOT}
+%%%%%%%
+\subsection{MLA-Style Containers}
+
+\subsubsection*{@mlasource}
+\newthis In addition to these typical \biblatex-supported entry types, \biblatexmla 2.0 introduces support for defining entries using the containerized explanations of sources first described in the 8\superscript{th} edition of the \emph{MLA Handbook}. Because the non-author fields are defined to handle information literally, this kind of entry is in many ways inferior to the above semantically-defined entry types, which should handle punctuation in lists of editor names, strings like ``vol.'' and ``by,'', subtitle punctuation, and other matters. The user will need to keep output in mind as they define the metadata of an \sty{@mlasource} entry. All of these fields are optional, and they should only include information set out in the \emph{MLA Handbook}.
+
+\begin{optionslistNOT}
+
+ \optionitem{author} the name of the person(s) who should be used as the label for a work.
+
+ \optionitem{title} title of the piece; subtitles and any necessary colons should be included within the |title| field.
+
+ \optionitem{titletype} a string like \textbf{|complete|}, \textbf{|part|}, or \textbf{|unstyled|} determining how the source's |title| gets printed. This field is typically unnecessary: \biblatexmla assumes |complete| if the source lacks a |titlea| field, and it assumes |part| if the |titlea| field is defined, styling the title in italics or in quotation marks, respectively. Setting this field overrides \biblatexmla{}'s logic.
+
+ \optionitem{supplemental} any supplemental information for the source.
+
+ \optionitem{titlea} the title of the first container; \biblatexmla will style |titlea| in italics, but subtitles and any necessary colons should be included within the this field.
+
+ \optionitem{contributora} any necessary contributors to the first container.
+
+ \optionitem{versiona} the version or edition of the first container.
+
+ \optionitem{numbera} the number of the first container.
+
+ \optionitem{publishera} the publisher of the first container.
+
+ \optionitem{datea} the date associated with the first container.
+
+ \optionitem{locationa} the location of the first container.
+
+ \optionitem{supplementala} any supplemental information for the first container.
+
+ \optionitem{titleb} the title of the second container; \biblatexmla will style |titleb| in italics, but subtitles and any necessary colons should be included within the this field.
+
+ \optionitem{contributorb} any necessary contributors to the second container.
+
+ \optionitem{versionb} the version or edition of the second container.
+
+ \optionitem{numberb} the number of the second container.
+
+ \optionitem{publisherb} the publisher of the second container.
+
+ \optionitem{dateb} the date associated with the second container.
+
+ \optionitem{locationb} the location of the second container.
+
+ \optionitem{supplementalb} any supplemental information for the second container.
+
+
+
+\end{optionslistNOT}
+
+%%%%%%%
+
\section{Meta}
\subsection{License}
-\biblatexmla is copyrighted \textcopyright\ 2007--2016, by James Clawson. Permission is granted to copy, distribute, and modify this software under the terms of the \lppl, version 1.3: \mylink{http://www.ctan.org/tex-archive/macros/latex/base/lppl.txt}.
+\biblatexmla is copyrighted \textcopyright\ 2007--2021, by James Clawson. Permission is granted to copy, distribute, and modify this software under the terms of the \lppl, version 1.3: \mylink{http://www.ctan.org/tex-archive/macros/latex/base/lppl.txt}.
\subsection[Feedback]{Feedback}
\label{int:feb}
-If you have any questions, requests, or other feedback please email me. My email address is at the top of this document. If you end up improving the code to be more accurate to the \mla{} standard, please be kind to the rest of us and share; I'm very happy to incorporate improvements! If anything works differently than you feel it ought to work, please let me know. Apart from time and my willingness to write documentation, I'm limited only by the problems of which I'm unaware.
+If you have any questions, requests, or other feedback please email me or reach out on GitHub. If you end up improving the code to be more accurate to the \mla{} standard, please be kind to the rest of us and share; I'm very happy to incorporate improvements! If anything works differently than you feel it ought to work, please let me know. Apart from time and my willingness to write documentation, I'm limited only by the problems of which I'm unaware.
\end{document}
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-mla/doc/citation-examples-new.pdf b/macros/latex/contrib/biblatex-contrib/biblatex-mla/doc/citation-examples-new.pdf
deleted file mode 100644
index 24d703f317..0000000000
--- a/macros/latex/contrib/biblatex-contrib/biblatex-mla/doc/citation-examples-new.pdf
+++ /dev/null
Binary files differ
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-mla/doc/citation-examples-new.tex b/macros/latex/contrib/biblatex-contrib/biblatex-mla/doc/citation-examples-new.tex
deleted file mode 100644
index 8bbaddb925..0000000000
--- a/macros/latex/contrib/biblatex-contrib/biblatex-mla/doc/citation-examples-new.tex
+++ /dev/null
@@ -1,33 +0,0 @@
-\documentclass{article}
-\usepackage[T1]{fontenc}
-\usepackage[american]{babel}
-\usepackage{csquotes}
-% \setlength{\parindent}{0.5in}
-\usepackage[style=mla-new,eprint=true]{biblatex}
-\usepackage{hyperref}
-\usepackage{libertine}
-
-\addbibresource{samples.bib}
-
-\begin{document}
-
-\section{Sample citations in text}
-Here is a normal citation to an incollection work \autocite[7]{haggis99aa}. We will follow that up with a second citation to the same work \autocite[8]{haggis99aa}. Then we reference a book \autocite[194]{public08aa}. Finally, we reference an online work \autocite{Grammar-Girl2008}.
-
-Here is a citation for a thesis \autocite[22]{webb84aa}. We will cite it a second time \autocite[23]{webb84aa}. Next is a citation for a film \autocite{jhabvala85aa}. We will follow that up with a reference for a reference entry \autocite{reference-noon89aa}. After that is a citation for an entire issue of a journal \autocite{appiah92aa}. Keeping up the theme of unusual entry types, we add a reference for an unpublished work \autocite{salviatiXXaa}. Next we cite a review \autocite[224]{slater01aa}. Finally we reference an anonymous review \autocite[785]{danish1972aa}.
-
-Here is a citation for one work by an author with multiple works \autocite[12]{askme06aa}. We follow it up with a citation for a different work by the same author \autocite[34]{askme92aa}. Next, we show another call back to the first work \autocite[45]{askme06aa}, and we end it with a third reference to the first work \autocite[56]{askme06aa}. Here is a citation for a work with many authors \autocite[34]{Babich:2011dg}. And here is a second citation to the same work \autocite[32]{Babich:2011dg}.
-
-A typical citation \autocite[12]{morrison02aa}. Immediately subsequent citation to the same source \autocite[34]{morrison02aa}. Immediately subsequent citations lacking page reference \autocite{morrison02aa}. Citation to a text by a prolific author \autocite[12]{frye57ab}. Subsequent immediate citations to the same source \autocite[34]{frye57ab}. Citation to new source, same author \autocite[56]{frye91aa}.\footnote{The title of the new work ought to be printed here. I've just noticed this error right before submitting 1.9 to CTAN; expect this error to be fixed in the next update.} Citation interrupting those by Frye \autocite[101]{morrison02aa}. Author tracker starts over \autocite[78]{frye91aa}. Suppressing the author's name for an entry with a single attribution to a given author prints only the page numbers \autocite*[102]{morrison02aa}. Suppressing the name of a prolific author will print enough information to avoid ambiguity \autocite*[91]{frye57ab}. Suppressing author's name without a page number prints the title of the work \autocite*{morrison02aa}. Different author citation to reset trackers \autocite[91]{frye91aa}. Typical citation \autocite[12]{morrison02aa}. Citation using \verb|\mancite| to ignore the previous citation \mancite\autocite[34]{morrison02aa}.
-
-\section{Items still incomplete in the transition to version 1.9}
-\begin{itemize}
- \item Toggle for showing publication location
- \item Toggle for showing URL
- \item Toggle for ISBN, etc.
-\end{itemize}
-
-\nocite{*}
-
-\printbibliography
-\end{document}
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-mla/doc/citation-examples.pdf b/macros/latex/contrib/biblatex-contrib/biblatex-mla/doc/citation-examples.pdf
deleted file mode 100644
index ee6ecf2ff8..0000000000
--- a/macros/latex/contrib/biblatex-contrib/biblatex-mla/doc/citation-examples.pdf
+++ /dev/null
Binary files differ
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-mla/doc/citation-examples.tex b/macros/latex/contrib/biblatex-contrib/biblatex-mla/doc/citation-examples.tex
deleted file mode 100644
index 525a36d2ed..0000000000
--- a/macros/latex/contrib/biblatex-contrib/biblatex-mla/doc/citation-examples.tex
+++ /dev/null
@@ -1,23 +0,0 @@
-\documentclass{article}
-\usepackage[T1]{fontenc}
-\usepackage[american]{babel}
-\usepackage{csquotes}
-\setlength{\parindent}{0.5in}
-\usepackage[style=mla]{biblatex}
-\usepackage{hyperref}
-\usepackage{libertine}
-
-\addbibresource{samples.bib}
-
-\begin{document}
-
-Here is a normal citation to an incollection work \autocite[7]{haggis99aa}. We will follow that up with a second citation to the same work \autocite[8]{haggis99aa}. Then we reference a book \autocite[194]{public08aa}. Finally, we reference an online work \autocite{Grammar-Girl2008}.
-
-Here is a citation for a thesis \autocite[22]{webb84aa}. We will cite it a second time \autocite[23]{webb84aa}. Next is a citation for a film \autocite{jhabvala85aa}. We will follow that up with a reference for a reference entry \autocite{reference-noon89aa}. After that is a citation for an entire issue of a journal \autocite{appiah92aa}. Keeping up the theme of unusual entry types, we add a reference for an unpublished work \autocite{salviatiXXaa}. Next we cite a review \autocite[224]{slater01aa}. Finally we reference an anonymous review \autocite[785]{danish1972aa}.
-
-Here is a citation for one work by an author with multiple works \autocite[12]{askme06aa}. We follow it up with a citation for a different work by the same author \autocite[34]{askme92aa}. Next, we show another call back to the first work \autocite[45]{askme06aa}, and we end it with a third reference to the first work \autocite[56]{askme06aa}. Here is a citation for a work with many authors \autocite[34]{Babich:2011dg}. And here is a second citation to the same work \autocite[32]{Babich:2011dg}.
-
-A typical citation \autocite[12]{morrison02aa}. Immediately subsequent citation to the same source \autocite[34]{morrison02aa}. Immediately subsequent citations lacking page reference \autocite{morrison02aa}. Citation to a text by a prolific author \autocite[12]{frye57ab}. Subsequent immediate citations to the same source \autocite[34]{frye57ab}. Citation to new source, same author \autocite[56]{frye91aa}. Citation interrupting those by Frye \autocite[101]{morrison02aa}. Author tracker starts over \autocite[78]{frye91aa}. Suppressing the author's name for an entry with a single attribution to a given author prints only the page numbers \autocite*[102]{morrison02aa}. Suppressing the name of a prolific author will print enough information to avoid ambiguity \autocite*[91]{frye57ab}. Suppressing author's name without a page number prints the title of the work \autocite*{morrison02aa}. Different author citation to reset trackers \autocite[91]{frye91aa}. Typical citation \autocite[12]{morrison02aa}. Citation ignoring the previous citation \mancite\autocite[34]{morrison02aa}.
-
-\printbibliography
-\end{document}
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-mla/doc/handbooksamples-new.bib b/macros/latex/contrib/biblatex-contrib/biblatex-mla/doc/examples.bib
index 3071955806..0e12af3a7a 100644
--- a/macros/latex/contrib/biblatex-contrib/biblatex-mla/doc/handbooksamples-new.bib
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-mla/doc/examples.bib
@@ -1,11 +1,696 @@
-%% This BibTeX bibliography file was created using BibDesk.
-%% http://bibdesk.sourceforge.net/
+@mlasource{mla:shaw,
+ author = {Jane Smith},
+ title = {Heartbreak House},
+ titletype = {part},
+ contributora = {Directed by Robin Lefevre},
+ publishera = {Roundabout Theatre Company},
+ datea = {11 Oct. 2006},
+ locationa = {American Airlines Theatre, New York City},
+}
+
+@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},
+ options = {totalnames=true},
+ langid = {english},
+}
+
+@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},
+}
+
+@misc{misc:smith,
+ author = {Smith, Jane},
+ title = {Personal interview},
+ date = {2014-05-19},
+}
+
+@misc{elkm,
+ author = {Anne Elk},
+ title = {Lecture on a Theory on Brontosauruses},
+ date = {1972-11-16},
+ publisher = {University of Python},
+ location = {Monty},
+ note = {Online lecture},
+}
+
+@bookinbook{tolstoy:kreutzer,
+ author = {Tolstoy, Leo},
+ title = {Крейцерова соната},
+ titleaddon = {\mkbibbrackets{Kreĭtserova sonata; \emph{Kreutzer Sonata}}},
+ shorttitle = {Крейцерова \emph{\mkbibbrackets{\emph{Kreĭtserova}}}},
+ volume = {27},
+ pages = {5-78},
+ crossref = {tolstoy:complete},
+}
+
+@incollection{tolstoy:readers,
+ author = {Tolstoy, Leo},
+ title = {К читателям},
+ titleaddon = {\mkbibbrackets{K chitateliam; To Readers}},
+ shorttitle = {К читателям \mkbibbrackets{K chitateliam}},
+ volume = {1},
+ pages = {207-209},
+ crossref = {tolstoy:complete},
+}
+
+@book{tolstoy:complete,
+ author = {Tolstoy, Leo},
+ title = {Лев Толстой: Полное cобрание cочинений},
+ titleaddon = {\mkbibbrackets{Lev Tolstoĭ: Polnoe sobranie sochineniĭ; \emph{Leo Tolstoy: Complete Collected Works}}},
+ shorttitle = {Лев Толстой \emph{\mkbibbrackets{\emph{Lev Tolstoĭ}}}},
+ langid = {other},
+ volumes = {90},
+ publisher = {Khudozhestvennaya Literatura},
+ date = {1928/1958}
+}
+
+@unpublished{librodehorasisabel,
+ Booktitle = {Libro de horas de Isabel I},
+ Sorttitle = {Libro de horas de Isabel I},
+ Library = {Real Biblioteca del Palacio Real de Madrid},
+ Number = {II/Tesoro},
+ Year = {15\textsuperscript{th}~c.}}
+
+@incollection{interview:amis,
+ author = {Amis, Kingsley},
+ title = {Mimic and Moralist},
+ entrysubtype = {interview},
+ booktitle = {Interviews with Britain's Angry Young Men},
+ bookauthor = {Dale Salwak},
+ publisher = {Borgo Press},
+ date = {1984},
+ pages = {13-40}
+}
+
+
+@article{interview:gaitskill,
+ author = {Gaitskill, Mary},
+ title = {Interview with Charles Bock},
+ entrysubtype = {untitled},
+ journal = {Mississippi Review},
+ volume = {27},
+ number = {3},
+ date = {1999},
+ pages = {129-150}
+}
+
+@book{cejador33,
+ Address = {Madrid},
+ Author = {Julio {Cejador y Frauca}},
+ Edition = {3},
+ Publisher = {Hernando},
+ Title = {Historia de la lengua y literatura castellana},
+ Volume = {1},
+ Year = {1933}}
+
+@article{Babich:2011dg,
+ author = {Babich, L P and Kudryavtsev, A Yu and Kudryavtseva, M L and Kutsyk, I M},
+ title = {Atmospheric Gamma-Ray and Neutron Flashes},
+ journal = {Journal of Experimental and Theoretical Physics},
+ date = {2011-02},
+ volume = {106},
+ number = {1},
+ pages = {65--76},
+ doi = {10.1134/S1063776108010056},
+ language = {English},
+ url = {http://link.springer.com/10.1134/S1063776108010056},
+ urldate = {2013-03-30}}
+
+@online{shimabukuro2006aa,
+ Annote = {This is the citation for a YouTube video. I found this source listed in the OWL Purdue MLA Formatting and Style Guide.},
+ Author = {Jake Shimabukuro},
+ Date = {2006-04-22},
+ Maintitle = {YouTube},
+ Publisher = {YouTube},
+ Titleaddon = {Online video clip},
+ Title = {Ukulele Weeps by Jake Shimabukuro},
+ Url = {www.youtube.com/watch?v=puSkP3uym5k},
+ Urldate = {2013-03-04}}
+
+@online{Grammar-Girl2008,
+ Author = {{Grammar Girl}},
+ Date = {2008-09-16},
+ Date-Added = {2013-03-24 16:34:36 +0000},
+ Date-Modified = {2013-03-24 16:41:10 +0000},
+ Mainsubtitle = {Quick and Dirty Tips for Better Writing},
+ Maintitle = {Grammar Girl},
+ Nameaddon = {Mignon Fogarty},
+ Publisher = {Macmillan},
+ Title = {What Is the Plural of `Mouse'?},
+ Url = {http://grammar.quickanddirtytips.com/the-plural-of-mouse.aspx},
+ Urldate = {2013-03-04},
+ Bdsk-Url-1 = {http://grammar.quickanddirtytips.com/the-plural-of-mouse.aspx}}
+
+@article{a,
+ Author = {Larry Port},
+ Journal = {Law Practice: The Business of Practicing Law},
+ Number = {5},
+ Pages = {18},
+ Title = {Four Ways to Eliminate Procrastination},
+ Url = {http://search.ebscohost.com/login.aspx?direct=true&db=a9h&AN=54459308&site=ehost-live},
+ Urldate = {2011-09-08},
+ Volume = {36},
+ Year = {2010}}
+
+@periodical{appiah92aa,
+ Annote = {This is the citation for a periodical entrytype. I found this source listed in the \emph{MLA Style Manual}.},
+ Booktitle = {Critical Inquiry},
+ Date-Added = {2008-10-20 14:15:43 +0100},
+ Date-Modified = {2008-10-20 14:27:34 +0100},
+ Editor = {Kwame Anthony Appiah and Gates, Jr., Henry Louis},
+ Issuetitle = {Identities},
+ Number = {4},
+ Pages = {625--884.},
+ Title = {Critical Inquiry},
+ Volume = {18},
+ Year = {1992}}
+
+@proceedings{smith09aa,
+ Address = {Amsterdam},
+ Annote = {This is the citation for a proceedings entrytype.},
+ Booktitle = {What a Cool Booktitle!},
+ Date-Added = {2008-10-20 13:52:39 +0100},
+ Date-Modified = {2008-10-27 08:18:19 +0000},
+ Editor = {Bob Smith},
+ Eventtitle = {Cool Titles Conf.},
+ Institution = {Hali\c{c} University},
+ Organization = {Funny Little Society},
+ Pages = {101-112},
+ Publisher = {Rodopi},
+ Title = {What a Cool Booktitle!},
+ Urldate = {2008-04-17},
+ Venue = {Istanbul},
+ Year = {2009}}
+
+@phdthesis{webb80ab,
+ Annote = {This is the citation for a phdthesis entrytype.},
+ Author = {I. C. Webb},
+ Date-Added = {2008-10-20 10:39:11 +0100},
+ Date-Modified = {2008-10-20 10:59:54 +0100},
+ Entrysubtype = {unpublished},
+ Institution = {Correspondence Course State University},
+ Location = {Somewhere, NB},
+ Origyear = {1975},
+ Publisher = {Routledge},
+ Shorttitle = {MSc},
+ Sorttitle = {MSc},
+ Title = {An Unpublished Lic.~Phil.~Thesis},
+ Type = {lic},
+ Year = {1981}}
+
+@phdthesis{webb80aa,
+ Annote = {This is the citation for a phdthesis entrytype.},
+ Author = {I. C. Webb},
+ Date-Added = {2008-10-20 10:33:40 +0100},
+ Date-Modified = {2008-10-20 11:12:18 +0100},
+ Entrysubtype = {published},
+ Institution = {Correspondence Course State University},
+ Location = {Somewhere, NB},
+ Number = {4},
+ Origyear = {1975},
+ Publisher = {Routledge},
+ Series = {Transnational Thought},
+ Shorttitle = {MSc},
+ Sorttitle = {MSc},
+ Title = {A Published MSc Thesis},
+ Type = {msc},
+ Year = {1981}}
+
+@article{slinger07ab,
+ Annote = {This is the citation for an article entrytype.},
+ Author = {Mudd Slinger},
+ Date = {2007-07-02},
+ Date-Added = {2008-10-04 12:10:52 +0100},
+ Date-Modified = {2008-10-04 12:40:18 +0100},
+ Entrysubtype = {newspaper},
+ Journal = {Copycat},
+ Pages = {1-3},
+ Shorttitle = {Sectional},
+ Sorttitle = {Sectional 2},
+ Title = {Sectional Sections with Numbers in Newspapers}}
+
+@article{slinger07aa,
+ Annote = {This is the citation for an article entrytype.},
+ Author = {Mudd Slinger},
+ Chapter = {4},
+ Date = {2007-06-27},
+ Date-Added = {2008-10-04 11:48:09 +0100},
+ Date-Modified = {2008-10-04 12:39:49 +0100},
+ Entrysubtype = {newspaper},
+ Journaltitle = {Zeitgeist},
+ Location = {Albuquerque},
+ Pages = {2-4},
+ Shorttitle = {Sectional},
+ Sorttitle = {Sectional 1},
+ Title = {Sectional Sections with Numbers in Newspapers},
+ Version = {natl. ed.}}
+
+@book{craig87aa,
+ Address = {Aberdeen},
+ Annote = {This is the citation for a book entrytype.},
+ Author = {Craig, Cairns},
+ Bookauthor = {Craig, Cairns},
+ Date-Added = {2008-09-12 14:25:31 +0100},
+ Date-Modified = {2008-09-12 14:26:29 +0100},
+ Publisher = {Aberdeen UP},
+ Title = {History of Scottish Literature},
+ Volume = {2--3},
+ Date = {1987/1988}}
+
+@book{gamer00aa,
+ Address = {Cambridge},
+ Annote = {This is the citation for a book entrytype.},
+ Author = {Gamer, Michael},
+ Date-Added = {2008-09-12 14:21:23 +0100},
+ Date-Modified = {2008-09-12 14:22:14 +0100},
+ Number = {40},
+ Publisher = {Cambridge UP},
+ Series = {Cambridge Studies in Romanticism},
+ Title = {Romanticism and the Gothic: Genre, Reception, and Canon Formation},
+ Year = {2000}}
+
+@article{makward95ab,
+ Annote = {This is the citation for an article entrytype.},
+ Author = {Christiane Makward},
+ Date-Added = {2008-09-09 14:53:56 +0100},
+ Date-Modified = {2008-10-04 11:42:47 +0100},
+ Issuetitle = {Maryse Cond{\'e}},
+ Journal = {Callaloo},
+ Number = {3},
+ Pages = {681--689},
+ Shorttitle = {Reading},
+ Title = {Reading Maryse Cond{\'e}'s Theater},
+ Volume = {18},
+ Year = {1995}}
+
+@article{makward95aa,
+ Annote = {This is the citation for an article entrytype. I found this source listed in the \emph{MLA Style Manual}.},
+ Author = {Christiane Makward},
+ Date-Added = {2008-09-09 14:21:14 +0100},
+ Date-Modified = {2008-10-04 11:59:19 +0100},
+ Editor = {Delphine Perret and Marie-Denise Shelton},
+ Issuetitle = {Maryse Cond{\'e}},
+ Journal = {Callaloo},
+ Number = {3},
+ Pages = {681--689},
+ Shorttitle = {Reading},
+ Title = {Reading Maryse Cond{\'e}'s Theater},
+ Volume = {18},
+ Year = {1995}}
+
+@inreference{reference-noon89aa,
+ Annote = {This is the citation for an inreference entrytype. I found this source listed in the \emph{MLA Style Manual}.},
+ Booktitle = {The Oxford English Dictionary},
+ Date-Added = {2008-05-08 14:08:17 +0100},
+ Date-Modified = {2008-05-08 14:08:48 +0100},
+ Edition = {2},
+ Title = {Noon},
+ Titleaddon = {Def.~4b},
+ Date = {1989}}
+@inreference{reference-ginsburg02aa,
+ Annote = {This is the citation for an inreference entrytype. I found this source listed in the \emph{MLA Style Manual}.},
+ Booktitle = {Who's Who in Americana},
+ Date-Added = {2008-05-08 14:03:36 +0100},
+ Date-Modified = {2008-05-08 14:04:29 +0100},
+ Edition = {56},
+ Title = {Ginsburg, Ruth Bader},
+ Year = {2002}}
-%% Created for James M Clawson at 2013-03-24 11:49:03 -0500
+@inreference{mohanty87aa,
+ Annote = {This is the citation for an inreference entrytype. I found this source listed in the \emph{MLA Style Manual}.},
+ Author = {Jitendra M. Mohanty},
+ Booktitle = {The New Encyclopaedia Britannica},
+ Booksubtitle = {Macropaedia},
+ Date-Added = {2008-05-08 14:08:17 +0100},
+ Date-Modified = {2008-05-08 14:08:48 +0100},
+ Edition = {15},
+ Title = {Indian Philosophy},
+ Date = {1987}}
+
+@video{capra01aa,
+ Annote = {This is the citation for a video entrytype. I found this source listed in the \emph{MLA Style Manual}.},
+ Date-Added = {2008-05-08 13:29:17 +0100},
+ Date-Modified = {2008-10-20 19:05:07 +0100},
+ Editor = {Frank Capra},
+ Editortype = {director},
+ Howpublished = {DVD},
+ Namea = {James Stewart and Donna Read and Lionel Barrymore and Thomas Mitchell},
+ Nameatype = {performers},
+ Options = {useeditor=false},
+ Origdate = {1946},
+ Publisher = {Republic},
+ Title = {It's a Wonderful Life},
+ Year = {2001}}
+
+@video{jhabvala85aa,
+ Annote = {This is the citation for a video entrytype. I found this source listed in the \emph{MLA Style Manual}.},
+ Author = {Ruth Prawer Jhabvala},
+ Authortype = {adaptor},
+ Bookauthor = {E. M. Forster},
+ Date-Added = {2008-05-08 13:29:17 +0100},
+ Date-Modified = {2008-10-20 19:04:40 +0100},
+ Editor = {James Ivory},
+ Editortype = {director},
+ Namea = {Ismail Merchant},
+ Nameatype = {producer},
+ Nameb = {Maggie Smith and Denholm Eliot and Helena Bonham Carter and Daniel Day-Lewis},
+ Namebtype = {performers},
+ Publisher = {Cinecom Intl.~Films},
+ Title = {A Room with a View},
+ Year = {1985}}
+
+@review{danish1972aa,
+ Annote = {Listed here are examples of annotations listed within the Works Cited. This particular entry is the citation for a review entrytype. I found the source listed in the \emph{MLA Style Manual}.\par Define annotations in the .bib file, and call them with an option in the preamble. Indicate paragraph breaks using the ``par'' command.},
+ Booktitle = {Anthology of Danish Literature},
+ Date = {1972-07-07},
+ Date-Added = {2008-05-05 12:05:33 +0100},
+ Date-Modified = {2008-05-05 12:15:42 +0100},
+ Editor = {F. J. Billeskov Jansen and P. M. Mitchell},
+ Entrysubtype = {newspaper},
+ Journaltitle = {Times Literary Supplement},
+ Pages = {785},
+ Sortname = {{Anthology of Danish Literature}}}
+
+@review{slater01aa,
+ Annote = {This is the citation for a review entrytype.},
+ Author = {Lisa Slater},
+ Bookauthor = {Kim Scott},
+ Booktitle = {Benang: From the Heart},
+ Date = {2001},
+ Date-Added = {2008-05-05 11:18:18 +0100},
+ Date-Modified = {2008-05-05 11:21:01 +0100},
+ Journaltitle = {Southerly},
+ Number = {1},
+ Pages = {224},
+ Title = {\emph{Benang}: \mkbibquote{I found myself among Paper}},
+ Volume = {61}}
+
+@incollection{haggis99aa,
+ Annote = {This is the citation for an incollection entrytype.},
+ Author = {Mary Haggis},
+ Crossref = {reader99aa},
+ Date-Added = {2007-08-14 12:55:28 +0100},
+ Date-Modified = {2008-10-26 23:22:40 +0000},
+ Origyear = {1965},
+ Pages = {6-10},
+ Title = {Another Article (Incollection) Cross-Reffing a Book}}
+
+@incollection{sampul99aa,
+ Annote = {This is the citation for an incollection entrytype.},
+ Author = {F. I. N. Al Sampul},
+ Crossref = {reader99aa},
+ Date-Added = {2007-08-14 12:54:53 +0100},
+ Date-Modified = {2007-08-14 12:55:25 +0100},
+ Pages = {1-5},
+ Title = {An Article Crossref-ing a Collection}}
+
+@collection{reader99aa,
+ Address = {Utopia, NB},
+ Annote = {This is the citation for a collection entrytype.},
+ Booktitle = {Book of Collected Things by Many People for Crossrefs},
+ Date-Added = {2007-08-14 12:51:22 +0100},
+ Date-Modified = {2007-08-14 13:10:32 +0100},
+ Editor = {Ima G. Reader},
+ Publisher = {Publishers, Ltd.},
+ Shorttitle = {Book of Collected},
+ Title = {Book of Collected Things by Many People for Crossrefs},
+ Year = {1999}}
+
+@incollection{example99aa,
+ Annote = {This is the citation for an incollection entrytype.},
+ Author = {Anna Other Example},
+ Crossref = {public99ac},
+ Date-Added = {2007-08-14 12:49:19 +0100},
+ Date-Modified = {2007-08-14 12:51:16 +0100},
+ Pages = {105-195},
+ Shorttitle = {Incollection},
+ Title = {Incollection Template},
+ Volume = {1}}
+@incollection{example99ab,
+ Annote = {This is the citation for an incollection entrytype.},
+ Author = {Anna Other Example},
+ Crossref = {public99ac},
+ Date-Added = {2007-08-14 12:49:19 +0100},
+ Date-Modified = {2007-08-14 12:51:16 +0100},
+ Pages = {275-301},
+ Shorttitle = {Yet Another},
+ Title = {Yet Another Crossref Work},
+ Volume = {1}}
-%% Saved with string encoding Unicode (UTF-8)
+@thesis{webb84aa,
+ Address = {Somewhere, NB},
+ Annote = {This is the citation for a thesis entrytype.},
+ Author = {I. C. Webb},
+ Date-Added = {2007-08-14 12:48:08 +0100},
+ Date-Modified = {2008-10-04 11:07:25 +0100},
+ Note = {Nota bene},
+ School = {Correspondence Course State University},
+ Sorttitle = {Masters},
+ Title = {The Masters Thesis Template},
+ Titleaddon = {Nota bene},
+ Type = {msc},
+ Year = {1984}}
+
+@thesis{webb81aa,
+ Address = {Somewhere, NB},
+ Annote = {This is the citation for a thesis entrytype.},
+ Author = {I. C. Webb},
+ Date-Added = {2007-08-14 12:46:19 +0100},
+ Date-Modified = {2007-08-22 08:57:18 +0100},
+ School = {Correspondence Course State University},
+ Shorttitle = {PhD},
+ Sorttitle = {PhD},
+ Title = {A PhD Dissertation Template},
+ Type = {phd},
+ Year = {1981}}
+
+@article{webb83aa,
+ Annote = {This is the citation for an article entrytype.},
+ Author = {I. C. Webb},
+ Date-Added = {2008-01-29 12:44:36 +0100},
+ Date-Modified = {2008-01-29 13:13:08 +0100},
+ Journal = {Online Studies},
+ Number = {1},
+ Shorttitle = {Online},
+ Title = {Online Article Template with Access Date},
+ Url = {www.example.com/webb1983},
+ Urldate = {2007-11-22},
+ Volume = {9},
+ Year = {1983},
+ Bdsk-Url-1 = {www.example.com/webb1983}}
+
+@article{askme06aa,
+ Annote = {This is the citation for an article entrytype.},
+ Author = {Donna Askme},
+ Date-Added = {2007-08-14 12:43:03 +0100},
+ Date-Modified = {2007-08-14 12:44:20 +0100},
+ Journal = {Journal of Translated Articles},
+ Month = {9},
+ Pages = {12-19},
+ Shorttitle = {Elaborate},
+ Title = {Elaborate Article},
+ Translator = {Minnie Tongues},
+ Volume = {29},
+ Year = {2006}}
+
+@article{askme92aa,
+ Annote = {This is the citation for an article entrytype.},
+ Author = {Donna Askme},
+ Journal = {Journal of Pseudonyms},
+ Nameaddon = {Donnatella},
+ Number = {1},
+ Pages = {314--329},
+ Shorttitle = {Unique},
+ Title = {Unique Pseudonymity},
+ Volume = {4},
+ Year = {1992}}
+
+@article{taskme06aa,
+ Annote = {This is the citation for an article entrytype.},
+ Author = {Donna Taskme},
+ Date-Added = {2007-08-14 12:43:03 +0100},
+ Date-Modified = {2007-08-14 12:44:20 +0100},
+ Journal = {Journal of Translated Articles},
+ Month = {9},
+ Pages = {12-19},
+ Shorthand = {EA},
+ Shorttitle = {Elaborate Article},
+ Title = {Elaborate Article with Shorthand},
+ Translator = {Minnie Tongues},
+ Volume = {29},
+ Year = {2006}}
+
+@article{taskme07aa,
+ Annote = {This is the citation for an article entrytype.},
+ Author = {Donna Taskme},
+ Date-Added = {2007-08-14 12:43:03 +0100},
+ Date-Modified = {2007-08-14 12:44:20 +0100},
+ Journal = {Journal of Translated Articles},
+ Month = {9},
+ Pages = {12-19},
+ Shorttitle = {Simple Article},
+ Title = {Simple Article without Shorthand},
+ Translator = {Minnie Tongues},
+ Volume = {29},
+ Year = {2007}}
+
+@article{doe05aa,
+ Annote = {This is the citation for an article entrytype.},
+ Author = {Jane Doe},
+ Date-Added = {2007-08-14 12:41:58 +0100},
+ Date-Modified = {2007-08-14 12:42:46 +0100},
+ Journal = {General Studies},
+ Number = {4},
+ Pages = {12-45},
+ Shorttitle = {Default},
+ Title = {Default Article Template},
+ Volume = {4},
+ Year = {2005}}
+
+@article{slinger02aa,
+ Annote = {This is the citation for an article entrytype.},
+ Author = {Mudd Slinger},
+ Date = {2002-10-13},
+ Date-Added = {2007-08-14 12:41:58 +0100},
+ Date-Modified = {2008-10-04 11:52:12 +0100},
+ Entrysubtype = {newspaper},
+ Journal = {Daily Newspaper},
+ Location = {Toronto},
+ Pages = {B1+},
+ Shorttitle = {Newspaper},
+ Title = {Newspaper Article},
+ Version = {late ed.}}
+
+@book{public08aa,
+ Address = {Hello, HI},
+ Annote = {This is the citation for a book entrytype.},
+ Author = {John Q. Public},
+ Booktitle = {Absolutely Elaborate Book Template},
+ Date-Added = {2007-08-14 12:39:11 +0100},
+ Date-Modified = {2007-08-14 12:41:55 +0100},
+ Edition = {9},
+ Editor = {Ima G. Reader},
+ Number = {4},
+ Origyear = {2007},
+ Publisher = {Publishers Unlimited},
+ Series = {Elaborate Book Template Series},
+ Shorttitle = {Elaborate},
+ Title = {Absolutely Elaborate Book Template},
+ Translator = {Minnie Tongues},
+ Year = {2008}}
+
+@incollection{beowulf06aa,
+ Address = {New York},
+ Annote = {This is the citation for an incollection entrytype.},
+ Booktitle = {The Norton Anthology of English Literature},
+ Edition = {8},
+ Editor = {Stephen Greenblatt and M. H. Abrams and Carol T. Christ and Alfred David and Barbara K. Lewalski and Lawrence Lipking and George M. Logan and Deidre Shauna Lynch},
+ Options = {useeditor=false},
+ Pages = {34-100},
+ Publisher = {W. W. Norton},
+ Title = {Beowulf},
+ Volume = {1},
+ Year = {2006}}
+
+@collection{public99ac,
+ Address = {Utopia, NB},
+ Annote = {This is the citation for a collection entrytype.},
+ Booktitle = {My Favorite Things},
+ Date-Added = {2007-08-14 12:49:19 +0100},
+ Date-Modified = {2007-08-14 12:51:16 +0100},
+ Editor = {John Q. Public},
+ Publisher = {Publishers, Ltd.},
+ Shorttitle = {Collected},
+ Title = {Collected Poems},
+ Volume = {1},
+ Year = {1999}}
+
+@book{public08ab,
+ Address = {Hello, HI},
+ Annote = {This is the citation for a book entrytype.},
+ Author = {John Q. Public and Mimi Moi},
+ Booktitle = {Multi-Authored, More Elaborate Book Template},
+ Edition = {9},
+ Editor = {Ima G. Reader},
+ Number = {4},
+ Publisher = {Publishers Unlimited},
+ Series = {Elaborate Book Template Series},
+ Shorttitle = {Multi-Elaborate},
+ Title = {Multi-Authored, More Elaborate Book Template},
+ Translator = {Minnie Tongues},
+ Year = {2008}}
+
+@book{coulson64aa,
+ Address = {New York},
+ Annote = {This is the citation for a book entrytype. I found this source listed in the \emph{MLA Style Manual}.},
+ Author = {Feodor Dostoevsky},
+ Date-Modified = {2008-10-26 17:52:29 +0000},
+ Editor = {George Gibian},
+ Options = {useauthor=false,useeditor=false,usetranslator=true},
+ Publisher = {Norton},
+ Sorttitle = {Coulson, Jessie},
+ Title = {Crime and Punishment},
+ Translator = {Jessie Coulson},
+ Year = {1964}}
+
+@book{public07aa,
+ Address = {Anywhere, NB},
+ Annote = {This is the citation for a book entrytype.},
+ Author = {John Q. Public},
+ Booktitle = {Default Book Template},
+ Date-Added = {2007-08-14 12:37:30 +0100},
+ Date-Modified = {2007-08-14 12:39:01 +0100},
+ Publisher = {Publishers, Ltd.},
+ Shorttitle = {Default},
+ Title = {Default Book Template},
+ Year = {2007}}
+
+@book{king,
+ address = {Boston},
+ series = {The King Legacy Series},
+ title = {Where Do We Go from Here: Chaos or Community?},
+ isbn = {978-0-8070-0067-0},
+ shorttitle = {Where Do We Go from Here},
+ publisher = {Beacon Press},
+ location = {Boston},
+ author = {King, Jr, Martin Luther},
+ year = {2010},
+ origdate = {1967},
+ keywords = {African Americans, Civil rights, History, Race relations, Racism, United States}
+}
+
+@article{social-media-family,
+ Author = {Ünal, Selime},
+ ISSN = {21461961},
+ Journal = {International Journal of Eurasia Social Sciences / Uluslararasi Avrasya Sosyal Bilimler Dergisi},
+ Keywords = {SOCIAL media, FAMILIES, VIRTUAL reality, ACQUISITION of data, aile iletişimi, facebook, family communication, Healthy communication, Sağlıklı iletişim, sanal iletişim, social media, sosyal medya, virtual communication, aile iletişimi, Sağlıklı iletişim, sanal iletişim, sosyal medya, FACEBOOK (Web resource)},
+ Number = {31},
+ Pages = {550 - 578},
+ Title = {The Effect of Social Media Use to the Time Spent With Family Members},
+ Volume = {9},
+ url = {http://search.ebscohost.com/login.aspx?direct=true&AuthType=ip,sso&db=a9h&AN=129236793&site=ehost-live&scope=site&custid=s8356098},
+ Year = {2018},
+ urldate = {2018-02-28}
+}
@inbook{plutarch,
Author = {Plutarch},
@@ -47,19 +732,19 @@
Title = {Seattle; Historic Past Makes `Jewel of the Pacific Northwest' a Precious Commodity}}
@book{Florida:2002fu,
-Address = {Cambridge, MA},
-Author = {Richard Florida},
-Date-Added = {2012-05-14 23:18:17 +0000},
-Date-Modified = {2012-05-14 23:19:31 +0000},
-Publisher = {Basic Books},
-Title = {The Rise of the Creative Class},
-Year = {2002}}
+ Address = {Cambridge, MA},
+ Author = {Richard Florida},
+ Date-Added = {2012-05-14 23:18:17 +0000},
+ Date-Modified = {2012-05-14 23:19:31 +0000},
+ Publisher = {Basic Books},
+ Title = {The Rise of the Creative Class},
+ Year = {2002}}
@COLLECTION{adorno-gs10.2,
editor = {Rolf Tiedemann},
year = {2003},
- maintitle = {Gesammelte Schriften Bd. 10.2},
- mainsubtitle = {Kulturkritik und Gesellschaft II. Eingriffe. Stichworte},
+ title = {Gesammelte Schriften Bd. 10.2},
+ subtitle = {Kulturkritik und Gesellschaft II. Eingriffe. Stichworte},
publisher = {Suhrkamp},
location = {Frankfurt am Main},
author = {Theodor W. Adorno},
@@ -72,8 +757,8 @@ Year = {2002}}
@COLLECTION{adorno-gs8,
editor = {Rolf Tiedemann},
year = {2003},
- maintitle = {Gesammelte Schriften Bd. 8},
- mainsubtitle = {Soziologische Schriften I},
+ title = {Gesammelte Schriften Bd. 8},
+ subtitle = {Soziologische Schriften I},
publisher = {Suhrkamp},
location = {Frankfurt am Main},
author = {Theodor W. Adorno},
@@ -105,20 +790,6 @@ Year = {2002}}
Title = {The Technology Ownership and Information Acquisition Habits of HBCU Freshmen},
Volume = {2}}
-@online{Grammar-Girl2008,
- Author = {{Grammar Girl}},
- Date = {2008-09-16},
- Date-Added = {2013-03-24 16:34:36 +0000},
- Date-Modified = {2013-03-24 16:41:10 +0000},
- Mainsubtitle = {Quick and Dirty Tips for Better Writing},
- Maintitle = {Grammar Girl},
- Nameaddon = {Mignon Fogarty},
- Publisher = {Macmillan},
- Title = {What Is the Plural of `Mouse'?},
- Url = {http://grammar.quickanddirtytips.com/the-plural-of-mouse.aspx},
- Urldate = {2013-03-04},
- Bdsk-Url-1 = {http://grammar.quickanddirtytips.com/the-plural-of-mouse.aspx}}
-
@book{crane17aa,
Author = {Stephen Crane},
Booktitle = {The Red Badge of Courage},
@@ -127,7 +798,7 @@ Year = {2002}}
Eprint = {NBMCAAAAYAAJ},
Eprinttype = {googlebooks},
Origdate = {1895},
- Publisher = {D. Appleton and Company},
+ Publisher = {{D. Appleton and Company}},
Title = {The Red Badge of Courage},
Url = {http://books.google.com/books?id=NBMCAAAAYAAJ},
Urldate = {2010-04-16},
@@ -272,6 +943,7 @@ Year = {2002}}
Author = {John Dewey},
Booktitle = {The School and Society},
Date = {1899},
+ Options = {showlocation = true},
Date-Added = {2009-07-24 09:30:18 -0400},
Date-Modified = {2009-07-24 09:30:38 -0400},
Title = {The School and Society}}
@@ -281,6 +953,7 @@ Year = {2002}}
Author = {Richard Brome},
Booktitle = {The Dramatic Works of Richard Brome},
Date = {1873},
+ Options = {showlocation = true},
Date-Added = {2009-07-24 09:25:16 -0400},
Date-Modified = {2009-07-24 09:25:46 -0400},
Title = {The Dramatic Works of Richard Brome},
@@ -336,7 +1009,7 @@ Year = {2002}}
Date-Added = {2009-07-24 09:14:46 -0400},
Date-Modified = {2009-07-24 09:15:48 -0400},
Editor = {Jean Bessi\`{e}re},
- Publisher = {PUF},
+ Publisher = {Presses Universitaires de France},
Subtitle = {Champs critiques},
Title = {Mythologies de l'\'{e}criture}}
@@ -532,8 +1205,8 @@ Year = {2002}}
Editoratype = {generaleditor},
Eventdate = {1969/1976},
Maintitle = {The University of Virginia Edition of the Works of Stephen Crane},
- Publisher = {UP of Virginia},
- Subtitle = {An Episode of the American Civil War},
+ Publisher = {University Press of Virginia},
+ Booksubtitle = {An Episode of the American Civil War},
Title = {The Red Badge of Courage},
Volume = {2},
Volumes = {10}}
@@ -649,7 +1322,7 @@ Year = {2002}}
Date-Added = {2009-07-22 10:40:33 -0400},
Date-Modified = {2009-07-22 10:40:57 -0400},
Editor = {Owen Dudley Edwards},
- Publisher = {Oxford UP},
+ Publisher = {Oxford University Press},
Title = {The Oxford Sherlock Holmes},
Volume = {8},
Volumes = {9}}
@@ -682,18 +1355,6 @@ Year = {2002}}
Title = {The Letters of D.~H.~Lawrence},
Volume = {8}}
-@book{doyle93ab,
- Address = {New York},
- Author = {Arthur Conan Doyle},
- Booktitle = {The Oxford Sherlock Holmes},
- Date = {1993},
- Date-Added = {2009-07-22 10:20:00 -0400},
- Date-Modified = {2009-07-22 10:22:01 -0400},
- Editor = {Owen Dudley Edwards},
- Publisher = {Oxford UP},
- Title = {The Oxford Sherlock Holmes},
- Volume = {8}}
-
@book{wellek55aa,
Address = {New Haven},
Author = {Ren\'{e} Wellek},
@@ -717,18 +1378,6 @@ Year = {2002}}
Title = {The Letters of D.~H.~Lawrence},
Volumes = {8}}
-@book{crane69aa,
- Address = {Charlottesville},
- Author = {Stephen Crane},
- Booktitle = {The University of Virginia Edition of the Works of Stephen Crane},
- Date = {1969/1976},
- Date-Added = {2009-06-29 08:18:02 -0400},
- Date-Modified = {2010-02-15 11:38:32 -0600},
- Editor = {Fredson Bowers},
- Publisher = {UP of Virginia},
- Title = {The University of Virginia Edition of the Works of Stephen Crane},
- Volumes = {10}}
-
@book{churchill56aa,
Address = {New York},
Author = {Winston S. Churchill},
@@ -799,18 +1448,6 @@ Year = {2002}}
Title = {The Heath Anthology of American Literature},
Volumes = {2}}
-@book{doyle93aa,
- Address = {New York},
- Author = {Arthur Conan Doyle},
- Booktitle = {The Oxford Sherlock Holmes},
- Date = {1993},
- Date-Added = {2009-06-29 07:50:51 -0400},
- Date-Modified = {2009-06-29 07:51:40 -0400},
- Editor = {Owen Dudley Edwards},
- Publisher = {Oxford UP},
- Title = {The Oxford Sherlock Holmes},
- Volumes = {9}}
-
@book{blanco93aa,
Address = {Hamden},
Booktitle = {The American Revolution},
@@ -830,7 +1467,7 @@ Year = {2002}}
Date = {1985},
Date-Added = {2009-06-28 14:56:44 -0400},
Date-Modified = {2009-06-28 14:57:55 -0400},
- Edition = {Abr.~ed.},
+ Edition = {\autocap{a}bridged~ed.},
Publisher = {Vintage-Random},
Title = {The Tale of Genji},
Translator = {Edward G. Seidensticker}}
@@ -842,7 +1479,7 @@ Year = {2002}}
Date = {1986},
Date-Added = {2009-06-28 14:55:59 -0400},
Date-Modified = {2009-06-28 14:56:39 -0400},
- Edition = {Rev.~ed.},
+ Edition = {\autocap{r}evised~ed.},
Publisher = {Watts},
Subtitle = {The Hidden Epidemic},
Title = {Suicide}}
@@ -854,8 +1491,8 @@ Year = {2002}}
Date = {1997},
Date-Added = {2009-06-28 14:54:19 -0400},
Date-Modified = {2009-06-28 14:55:29 -0400},
- Edition = {Expanded ed.},
- Publisher = {U of Pennsylvania P},
+ Edition = {Expanded edition},
+ Publisher = {University of Pennsylvania Press},
Subtitle = {Translation and Colonization from \emph{The Tempest} to \emph{Tarzan}},
Title = {The Poetics of Imperialism}}
@@ -971,7 +1608,7 @@ Year = {2002}}
Editor = {Fredson Bowers},
Options = {useauthor=false},
Origdate = {1895},
- Publisher = {UP of Virginia},
+ Publisher = {University Press of Virginia},
Sorttitle = {Red Badge of Courage},
Subtitle = {An Episode of the American Civil War},
Title = {The Red Badge of Courage}}
@@ -1041,7 +1678,7 @@ Year = {2002}}
Date-Modified = {2009-06-17 10:20:46 -0400},
Editor = {Fredson Bowers},
Origdate = {1895},
- Publisher = {UP of Virginia},
+ Publisher = {University Press of Virginia},
Sorttitle = {Red Badge of Courage},
Subtitle = {An Episode of the American Civil War},
Title = {The Red Badge of Courage}}
@@ -1170,17 +1807,6 @@ Year = {2002}}
Entrysubtype = {foreword},
Pages = {x-xvi}}
-@periodical{appiah92aa,
- Date = {1992},
- Date-Added = {2009-06-16 13:07:41 -0400},
- Date-Modified = {2009-06-16 13:14:35 -0400},
- Editor = {Kwame Anthony Appiah and {Henry Louis Gates, Jr.}},
- Issuetitle = {Identities},
- Journaltitle = {Critical Inquiry},
- Number = {4},
- Pages = {625--884.},
- Volume = {18}}
-
@unpublished{smithXXaa,
Author = {Sonia Smith},
Date-Added = {2009-06-16 12:02:53 -0400},
@@ -1195,15 +1821,16 @@ Year = {2002}}
Library = {U of California},
Location = {Berkeley},
Note = {Mark Twain Papers},
- Titleaddon = {Notebook 32},
+ Title = {Notebook 32},
+ Entrysubtype = {untitled},
Type = {typescript}}
@unpublished{octovianXXaa,
Booktitle = {Octovian},
Date-Added = {2009-06-16 12:02:53 -0400},
Date-Modified = {2009-06-16 12:02:53 -0400},
- Library = {Dean and Chapter Lib.},
- Location = {Lincolnshire, Eng.},
+ Library = {Dean and Chapter Library},
+ Location = {Lincolnshire, England},
Number = {91},
Sorttitle = {Octovian},
Type = {manuscript}}
@@ -1223,11 +1850,11 @@ Year = {2002}}
Booktitle = {The Canterbury Tales},
Date-Added = {2009-06-16 12:02:14 -0400},
Date-Modified = {2009-06-16 12:02:14 -0400},
- Library = {British Lib.},
+ Library = {British Library},
Location = {London},
Number = {7334},
- Title = {The Canterbury Tales},
- Type = {Harley ms}}
+ Type = {Harley MS},
+ Origdate = {1400~/1410}}
@book{wpa00aa,
Address = {Tuscaloosa},
@@ -1383,25 +2010,6 @@ Year = {2002}}
Title = {Privacy in Health Care},
Volumes = {5}}
-@inreference{noon89aa,
- Booktitle = {The Oxford English Dictionary},
- Date = {1989},
- Date-Added = {2009-05-27 14:19:08 +0100},
- Date-Modified = {2009-05-27 14:23:26 +0100},
- Edition = {2},
- Title = {Noon},
- Titleaddon = {Def.~4b}}
-
-@inreference{mohanty87aa,
- Author = {Jitendra M. Mohanty},
- Booksubtitle = {Macropaedia},
- Booktitle = {The New Encyclopedia Britannica},
- Date = {1987},
- Date-Added = {2009-05-27 14:18:08 +0100},
- Date-Modified = {2009-05-27 14:18:56 +0100},
- Edition = {15},
- Title = {Indian Philosophy}}
-
@inreference{mandarin94aa,
Booktitle = {The Encyclopedia Americana},
Date = {1994},
@@ -1410,14 +2018,6 @@ Year = {2002}}
Edition = {1994},
Title = {Mandarin}}
-@inreference{ginsburg02aa,
- Booktitle = {Who's Who in Americana},
- Date = {2002},
- Date-Added = {2009-05-27 13:00:23 +0100},
- Date-Modified = {2009-05-27 13:00:56 +0100},
- Edition = {56},
- Title = {Ginsburg, Ruth Bader}}
-
@inreference{azimuthal93aa,
Booktitle = {Merriam-Webster's Collegiate Dictionary},
Date = {1993},
@@ -1450,7 +2050,7 @@ Year = {2002}}
Entrysubtype = {book},
Origdate = {1845},
Pages = {267--368},
- Publisher = {Lib. of Amer.},
+ Publisher = {Library of America},
Shorttitle = {Narrative},
Title = {Narrative of the Life of Frederick Douglass, an American Slave, Written by Himself}}
@@ -1988,51 +2588,4 @@ Year = {2002}}
Date-Modified = {2010-02-12 11:24:53 -0600},
Editor = {Joyce Carol Oates and Robert Atwan},
Publisher = {Houghton},
- Sorttitle = {Best American Essays of the Century}}
-
-@comment{BibDesk Smart Groups{
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<array>
- <dict>
- <key>conditions</key>
- <array>
- <dict>
- <key>comparison</key>
- <integer>4</integer>
- <key>key</key>
- <string>Doublecheck</string>
- <key>value</key>
- <string>-</string>
- <key>version</key>
- <string>1</string>
- </dict>
- </array>
- <key>conjunction</key>
- <integer>0</integer>
- <key>group name</key>
- <string>Doublecheck</string>
- </dict>
- <dict>
- <key>conditions</key>
- <array>
- <dict>
- <key>comparison</key>
- <integer>0</integer>
- <key>key</key>
- <string>Date-Added</string>
- <key>value</key>
- <string></string>
- <key>version</key>
- <string>1</string>
- </dict>
- </array>
- <key>conjunction</key>
- <integer>0</integer>
- <key>group name</key>
- <string>today</string>
- </dict>
-</array>
-</plist>
-}}
+ Sorttitle = {Best American Essays of the Century}} \ No newline at end of file
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-mla/doc/examples.pdf b/macros/latex/contrib/biblatex-contrib/biblatex-mla/doc/examples.pdf
new file mode 100644
index 0000000000..5309046352
--- /dev/null
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-mla/doc/examples.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-mla/doc/examples.tex b/macros/latex/contrib/biblatex-contrib/biblatex-mla/doc/examples.tex
new file mode 100644
index 0000000000..1f9c8aee57
--- /dev/null
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-mla/doc/examples.tex
@@ -0,0 +1,46 @@
+% !TEX TS-program = xelatex
+\documentclass{article}
+\usepackage{fontspec}
+\setmainfont{Times}
+\usepackage[american]{babel}
+\usepackage{csquotes}
+% \setlength{\parindent}{0.5in}
+\usepackage[style=mla]{biblatex}
+\usepackage{hyperref}
+\hypersetup{colorlinks,%
+citecolor=black,%
+% filecolor=black,%
+linkcolor=black,%
+urlcolor=black
+}
+
+\addbibresource{examples.bib}
+
+\begin{document}
+
+\section{Citations to Sources}
+Here is a normal citation to an incollection work \autocite[7]{haggis99aa}. We will follow that up with a second citation to the same work \autocite[8]{haggis99aa}. Then we reference a book \autocite[194]{public08aa}. Finally, we reference an online work \autocite{Grammar-Girl2008}.
+
+Here is a citation for a thesis \autocite[22]{webb84aa}. We will cite it a second time \autocite[23]{webb84aa}. Next is a citation for a film \autocite{jhabvala85aa}. We will follow that up with a reference for a reference entry \autocite{reference-noon89aa}. After that is a citation for an entire issue of a journal \autocite{appiah92aa}. Keeping up the theme of unusual entry types, we add a reference for an unpublished work \autocite{salviatiXXaa}. Next we cite a review \autocite[224]{slater01aa}. Finally we reference an anonymous review \autocite[785]{danish1972aa}.
+
+Here is a citation for one work by an author with multiple works \autocite[12]{askme06aa}. We follow it up with a citation for a different work by the same author \autocite[34]{askme92aa}. Next, we show another call back to the first work \autocite[45]{askme06aa}, and we end it with a third reference to the first work \autocite[56]{askme06aa}. Here is a citation for a work with many authors \autocite[34]{Babich:2011dg}. And here is a second citation to the same work \autocite[32]{Babich:2011dg}.
+
+Here's a citation for a native MLA-style, nonsemantic entry fashioned from containers \autocite{mla:shaw}. This ``containerized'' type is not generally recommended for widespread use, but it is included here to allow for maximum compatibility with the 9th edition of the \emph{MLA Handbook}. Here's a citation for a patent with the option enabled to show all authors in a citation and entry \autocite[12]{sorace}. Here's a citation for another patent without this option set \autocite[102]{laufenberg}. Here's a citation to a personal interview \autocite{misc:smith}, and here's one to an online lecture \autocite{elkm}.
+
+Here's a book-length work by Tolstoy, showing a citation using non-Latin characters \autocite[22]{tolstoy:kreutzer}. Here's an entry with a general editor \autocite{crane69ab}; notice, too, that the publisher name is automatically truncated. Here's an essay-length work by Tolstoy with the title styled differently \autocite[22]{tolstoy:readers}.
+
+This is another typical citation \autocite[12]{morrison02aa}. This is an immediately subsequent citation to the same source \autocite[34]{morrison02aa}, followed by an example of immediately subsequent citations lacking page reference \autocite{morrison02aa}. This one shows a citation to a text by a prolific author \autocite[12]{frye57ab}. Subsequent immediate citations to the same source look like this \autocite[34]{frye57ab}. Citations to a different source, same author, look like this \autocite[56]{frye91aa}. A citation to a source by a different author will reset some of these trackers \autocite[101]{morrison02aa}. Another citation to a different author again resets the author tracker \autocite[78]{frye91aa}. Suppressing the author's name for someone like Morrison with only one source in the bibliography will print only the page numbers \autocite*[102]{morrison02aa}. Suppressing the name of a prolific author like Frye will print enough information to avoid ambiguity \autocite*[91]{frye57ab}. Suppressing Morrison's name without a page number prints the title of the work \autocite*{morrison02aa}. Different author citation to reset trackers \autocite[91]{frye91aa}. Typical citation \autocite[12]{morrison02aa}. Citation using \verb|\mancite| to ignore the previous citation \mancite\autocite[34]{morrison02aa}.
+
+\section{Metadata from Sources}
+In addition to the above citations, it is also possible to use commands within a sentence to reference specific metadata for sources without having to look up this metadata directly. Using correct styling, these commands will print the full or shortened names of a work's author(s), the full or shortened title, and the year of publication, respectively: \verb|\citeauthor{}|, \verb|\citeauthor*{}|, \verb|\citetitle{}|, \verb|\citetitle*{}|, and \verb|\citeyear{}|. The starred and unstarred variants of these commands might eventually swap places, so please keep this instability in mind with future updates.
+
+This is the unstarred use of the first command to reference the full names of \citeauthor{appiah92aa}. It is followed by the starred use to cite just the last names of \citeauthor*{appiah92aa}.
+
+Here's an unstarred command to cite the title of a source with a defined \verb!shorttitle! field: \citetitle{wpa00aa}. Here's the starred version, which prints the long version of the title: \citetitle*{wpa00aa}. Here's the same effect using a work with no short title: \citetitle{librodehorasisabel}. And here's the starred variant of the same source, showing no change: \citetitle*{librodehorasisabel}. The command also works for a title which ought to be printed in quotation marks: \citetitle{Babich:2011dg}. Even though the command appears before the final period, this punctuation is pulled inside the quotation marks when using American localization.
+
+Finally, here's an example showing the year alongside the title and author, using code to explain that our version of \citetitle{interview:amis} by \citeauthor{interview:amis} was published in \citeyear{interview:amis}.
+
+\nocite{*}
+
+\printbibliography
+\end{document}
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-mla/doc/handbooksamplebib-new.pdf b/macros/latex/contrib/biblatex-contrib/biblatex-mla/doc/handbooksamplebib-new.pdf
deleted file mode 100644
index 3fcfd4fd80..0000000000
--- a/macros/latex/contrib/biblatex-contrib/biblatex-mla/doc/handbooksamplebib-new.pdf
+++ /dev/null
Binary files differ
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-mla/doc/handbooksamplebib-new.tex b/macros/latex/contrib/biblatex-contrib/biblatex-mla/doc/handbooksamplebib-new.tex
deleted file mode 100644
index e7440cff74..0000000000
--- a/macros/latex/contrib/biblatex-contrib/biblatex-mla/doc/handbooksamplebib-new.tex
+++ /dev/null
@@ -1,18 +0,0 @@
-\documentclass{article}
-\usepackage[utf8]{inputenc}
-\usepackage[T1]{fontenc}
-\usepackage[american]{babel}
-\usepackage{csquotes}
-\usepackage[style=mla-new,eprint=true]{biblatex}
-\usepackage{hyperref}
-\usepackage{libertine}
-
-\addbibresource{handbooksamples-new.bib}
-
-\begin{document}
-
-% \autocite{dietze82aa}
-\nocite{*}
-
-\printbibliography
-\end{document}
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-mla/doc/handbooksamplebib.pdf b/macros/latex/contrib/biblatex-contrib/biblatex-mla/doc/handbooksamplebib.pdf
deleted file mode 100644
index ab6aecbb42..0000000000
--- a/macros/latex/contrib/biblatex-contrib/biblatex-mla/doc/handbooksamplebib.pdf
+++ /dev/null
Binary files differ
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-mla/doc/handbooksamplebib.tex b/macros/latex/contrib/biblatex-contrib/biblatex-mla/doc/handbooksamplebib.tex
deleted file mode 100644
index c0e20c09e7..0000000000
--- a/macros/latex/contrib/biblatex-contrib/biblatex-mla/doc/handbooksamplebib.tex
+++ /dev/null
@@ -1,17 +0,0 @@
-\documentclass{article}
-\usepackage[T1]{fontenc}
-\usepackage[american]{babel}
-\usepackage{csquotes}
-\usepackage[style=mla]{biblatex}
-\usepackage{hyperref}
-\usepackage{libertine}
-
-\addbibresource{handbooksamples.bib}
-
-\begin{document}
-
-%\autocite{dietze82aa}
-\nocite{*}
-
-\printbibliography
-\end{document}
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-mla/doc/handbooksamples.bib b/macros/latex/contrib/biblatex-contrib/biblatex-mla/doc/handbooksamples.bib
deleted file mode 100644
index 9188fc7f89..0000000000
--- a/macros/latex/contrib/biblatex-contrib/biblatex-mla/doc/handbooksamples.bib
+++ /dev/null
@@ -1,2038 +0,0 @@
-%% This BibTeX bibliography file was created using BibDesk.
-%% http://bibdesk.sourceforge.net/
-
-
-%% Created for James M Clawson at 2013-03-24 11:49:03 -0500
-
-
-%% Saved with string encoding Unicode (UTF-8)
-
-@inbook{plutarch,
- Author = {Plutarch},
- Booktitle = {Plutarch's Lives, Volume I},
- Title = {Life of Lykurgus},
- Translator = {Aubrey Stewart and George Long},
- Publisher = {Project Gutenberg},
- Date = {2004},
- URL = {http://www.gutenberg.org/files/14033/14033-h/14033-h.htm},
- Urldate = {2013-04-08}}
-
-@article{engle,
- Author = {Gwendolyn Compton-Engle},
- Title = {Stolen Cloaks in Aristophanes' `Ecclesiazusae'},
- Journaltitle = {Transactions of the American Philological Association (1974-- )},
- Volume = {135},
- Number = {1},
- Issue = {Spring},
- Date = {2005},
- Pages = {163-176},
- Eprint = {20054125},
- Eprinttype = {jstor},
- URL = {http://www.jstor.org/stable/20054125},
- Urldate = {2013-04-08}}
-
-@article{Balcone:xx,
- Author = {Pete Balcone},
- Date = {1997-09-28},
- Journal = {The Pantagraph},
- Pages = {B1},
- Title = {This is an article that doesn't set the entrysubtype as newspaper}}
-
-@article{Falcone:xx,
- Author = {Pete Falcone},
- Date = {1997-09-28},
- Entrysubtype = {newspaper},
- Journal = {The Pantagraph},
- Pages = {B1},
- Title = {Seattle; Historic Past Makes `Jewel of the Pacific Northwest' a Precious Commodity}}
-
-@book{Florida:2002fu,
-Address = {Cambridge, MA},
-Author = {Richard Florida},
-Date-Added = {2012-05-14 23:18:17 +0000},
-Date-Modified = {2012-05-14 23:19:31 +0000},
-Publisher = {Basic Books},
-Title = {The Rise of the Creative Class},
-Year = {2002}}
-
-@COLLECTION{adorno-gs10.2,
- editor = {Rolf Tiedemann},
- year = {2003},
- maintitle = {Gesammelte Schriften Bd. 10.2},
- mainsubtitle = {Kulturkritik und Gesellschaft II. Eingriffe. Stichworte},
- publisher = {Suhrkamp},
- location = {Frankfurt am Main},
- author = {Theodor W. Adorno},
- howpublished = {Print},
- options = {useeditor=false},
- owner = {jakob},
- shortauthor = {{In: GS 10.2}},
- timestamp = {30.03.2012}}
-
-@COLLECTION{adorno-gs8,
- editor = {Rolf Tiedemann},
- year = {2003},
- maintitle = {Gesammelte Schriften Bd. 8},
- mainsubtitle = {Soziologische Schriften I},
- publisher = {Suhrkamp},
- location = {Frankfurt am Main},
- author = {Theodor W. Adorno},
- howpublished = {Print},
- options = {useeditor=false},
- owner = {jakob},
- shortauthor = {{In: GS 8}},
- timestamp = {30.03.2012}}
-
-@article{buzetto-more2006aa,
- Author = {Nicole A. Buzetto-More and Retta Sweat-Guy},
- Date = {2006},
- Date-Added = {2013-03-24 16:48:59 +0000},
- Date-Modified = {2013-03-24 16:48:59 +0000},
- Journal = {Journal of Information Technology Education},
- Pages = {153-164},
- Shorttitle = {Incorporating},
- Title = {Incorporating the Hybrid Learning Model into Minority Education at a Historically Black University},
- Volume = {5}}
-
-@article{buzetto-more2007aa,
- Author = {Nicole A. Buzetto-More and Retta Sweat-Guy},
- Date = {2007-03-24},
- Date-Added = {2013-03-24 16:48:59 +0000},
- Date-Modified = {2013-03-24 16:48:59 +0000},
- Journal = {Interdisciplinary Journal of Information, Knowledgement, and Management},
- Pages = {59-72},
- Shorttitle = {Technology Ownership},
- Title = {The Technology Ownership and Information Acquisition Habits of HBCU Freshmen},
- Volume = {2}}
-
-@online{Grammar-Girl2008,
- Author = {{Grammar Girl}},
- Date = {2008-09-16},
- Date-Added = {2013-03-24 16:34:36 +0000},
- Date-Modified = {2013-03-24 16:41:10 +0000},
- Mainsubtitle = {Quick and Dirty Tips for Better Writing},
- Maintitle = {Grammar Girl},
- Nameaddon = {Mignon Fogarty},
- Publisher = {Macmillan},
- Title = {What Is the Plural of `Mouse'?},
- Url = {http://grammar.quickanddirtytips.com/the-plural-of-mouse.aspx},
- Urldate = {2013-03-04},
- Bdsk-Url-1 = {http://grammar.quickanddirtytips.com/the-plural-of-mouse.aspx}}
-
-@book{crane17aa,
- Author = {Stephen Crane},
- Booktitle = {The Red Badge of Courage},
- Date-Added = {2010-04-18 08:22:46 -0500},
- Date-Modified = {2010-04-18 08:28:50 -0500},
- Eprint = {NBMCAAAAYAAJ},
- Eprinttype = {googlebooks},
- Origdate = {1895},
- Publisher = {D. Appleton and Company},
- Title = {The Red Badge of Courage},
- Url = {http://books.google.com/books?id=NBMCAAAAYAAJ},
- Urldate = {2010-04-16},
- Year = {1917},
- Bdsk-Url-1 = {http://books.google.com/books?id=NBMCAAAAYAAJ}}
-
-@suppbook{doctorow82aa,
- Address = {New York},
- Author = {E. L. Doctorow},
- Bookauthor = {Theodore Dreiser},
- Booktitle = {Sister Carrie},
- Date = {1982},
- Date-Added = {2009-07-27 12:37:15 -0400},
- Date-Modified = {2009-07-27 12:38:25 -0400},
- Entrysubtype = {introduction},
- Pages = {v-xi},
- Publisher = {Bantam}}
-
-@book{murasaki-shikibu76aa,
- Address = {New York},
- Author = {{Murasaki Shikibu}},
- Booktitle = {The Tale of Genji},
- Date = {1976},
- Date-Added = {2009-07-27 10:31:55 -0400},
- Date-Modified = {2009-07-27 10:32:36 -0400},
- Options = {useauthor=false,usetranslator=true},
- Publisher = {Knopf},
- Title = {The Tale of Genji},
- Translator = {Edward G. Seidensticker}}
-
-@thesis{fullerton01aa,
- Addendum = {AAT 3023579},
- Address = {Ann Arbor},
- Author = {Matilda Fullerton},
- Date = {2001},
- Date-Added = {2009-07-24 10:05:36 -0400},
- Date-Modified = {2009-07-24 10:11:14 -0400},
- Entrysubtype = {published},
- Origdate = {2001},
- Publisher = {UMI},
- School = {Washington State U},
- Subtitle = {Towards a Feminist Educational Leadership Model},
- Title = {Women's Leadership in the Public Schools},
- Type = {phd}}
-
-@thesis{dietze82aa,
- Address = {N\"{u}rnburg},
- Author = {Rudolf F. Dietze},
- Date = {1982},
- Date-Added = {2009-07-24 09:54:34 -0400},
- Date-Modified = {2009-07-24 10:05:05 -0400},
- Entrysubtype = {published},
- Number = {70},
- Origdate = {1982},
- Publisher = {Carl},
- School = {U Erlangen-N\"{u}rnburg},
- Series = {Erlanger Beitr\"{a}ge zur Sprach- und Kunstwissenschaft},
- Subtitle = {The Genesis of an Artist},
- Title = {Ralph Ellison},
- Type = {phd}}
-
-@thesis{kelly01aa,
- Author = {Mary Kelly},
- Date = {2001},
- Date-Added = {2009-07-24 09:52:59 -0400},
- Date-Modified = {2009-07-24 09:53:28 -0400},
- School = {U of Michigan},
- Title = {Factors Predicting Hospital Readmission of Normal Newborns},
- Type = {phd}}
-
-@thesis{boyle83aa,
- Author = {Anthony T. Boyle},
- Date = {1983},
- Date-Added = {2009-07-24 09:51:50 -0400},
- Date-Modified = {2009-07-24 09:52:56 -0400},
- School = {New York U},
- Title = {The Epistemological Evolution of Renaissance Utopian Literature, 1516--1657},
- Type = {phd}}
-
-@book{sendak63aa,
- Addendum = {n.~pag.},
- Address = {New York},
- Author = {Maurice Sendak},
- Booktitle = {Where the Wild Things Are},
- Date = {1963},
- Date-Added = {2009-07-24 09:43:27 -0400},
- Date-Modified = {2009-07-24 09:44:13 -0400},
- Publisher = {Harper},
- Title = {Where the Wild Things Are}}
-
-@book{photographic-viewXXaa,
- Addendum = {n.~pag.},
- Address = {[Eng.]},
- Booktitle = {Photographic View Album of Cambridge},
- Date-Added = {2009-07-24 09:41:10 -0400},
- Date-Modified = {2010-04-18 08:44:04 -0500},
- Publisher = {n.p.},
- Title = {Photographic View Album of Cambridge},
- Year = {n.d.}}
-
-@booklet{michelangelo92aa,
- Addendum = {n.~pag.},
- Address = {New York},
- Author = {Michelangelo},
- Date = {1992},
- Date-Added = {2009-07-24 09:37:38 -0400},
- Date-Modified = {2009-07-24 09:50:04 -0400},
- Publisher = {Wings},
- Title = {The Sistine Chapel}}
-
-@proceedings{malachi09aa,
- Address = {[Tel Aviv]},
- Booktitle = {Proceedings of the International Conference on Literary and Linguistic Computing},
- Date-Added = {2009-07-24 09:36:10 -0400},
- Date-Modified = {2010-12-16 18:04:00 -0600},
- Editor = {Zvi Malachi},
- Options = {nodate},
- Publisher = {[Fac.\ of Humanities, Tel Aviv U]},
- Title = {Proceedings of the International Conference on Literary and Linguistic Computing}}
-
-@book{bauer71aa,
- Address = {[Stuttgart]},
- Author = {Johann Bauer},
- Booktitle = {Kafka und Prag},
- Date-Added = {2009-07-24 09:32:48 -0400},
- Date-Modified = {2010-04-18 08:43:22 -0500},
- Publisher = {Belser},
- Title = {Kafka und Prag},
- Year = {[1971?]}}
-
-@book{segni49aa,
- Address = {Firenze},
- Author = {Bernardo Segni},
- Booktitle = {Rettorica et poetica d'Aristotile},
- Date = {1549},
- Date-Added = {2009-07-24 09:31:02 -0400},
- Date-Modified = {2009-07-24 09:31:25 -0400},
- Title = {Rettorica et poetica d'Aristotile}}
-
-@book{dewey99aa,
- Address = {Chicago},
- Author = {John Dewey},
- Booktitle = {The School and Society},
- Date = {1899},
- Date-Added = {2009-07-24 09:30:18 -0400},
- Date-Modified = {2009-07-24 09:30:38 -0400},
- Title = {The School and Society}}
-
-@book{brome73aa,
- Address = {London},
- Author = {Richard Brome},
- Booktitle = {The Dramatic Works of Richard Brome},
- Date = {1873},
- Date-Added = {2009-07-24 09:25:16 -0400},
- Date-Modified = {2009-07-24 09:25:46 -0400},
- Title = {The Dramatic Works of Richard Brome},
- Volumes = {3}}
-
-@book{poche77aa,
- Address = {Praha [Prague]},
- Author = {Emanuel Poche},
- Booktitle = {Prazsk\'{e} Palace},
- Date = {1977},
- Date-Added = {2009-07-24 09:22:31 -0400},
- Date-Modified = {2009-07-24 09:23:06 -0400},
- Publisher = {Odeon},
- Title = {Prazsk\'{e} Palace}}
-
-@book{maraini00aa,
- Address = {Milano},
- Author = {Dacia Maraini},
- Booktitle = {Amata scrittura},
- Date = {2000},
- Date-Added = {2009-07-24 09:21:30 -0400},
- Date-Modified = {2009-07-24 09:22:26 -0400},
- Editor = {Viviana Rosi and Maria Pia Simonetti},
- Publisher = {Rizzoli},
- Subtitle = {Laboratorio di analisi, letture, proposte, conversazioni},
- Title = {Amata scrittura}}
-
-@book{esquivel89aa,
- Address = {M\'{e}xico, DF [Mexico City]},
- Author = {Laura Esquivel},
- Booktitle = {Como agua para chocolate},
- Date = {1989},
- Date-Added = {2009-07-24 09:16:41 -0400},
- Date-Modified = {2009-07-24 09:21:27 -0400},
- Publisher = {Planeta},
- Subtitle = {Novelas de entregas mensuales, con recetas, amores y remedios caseros},
- Title = {Como agua para chocolate}}
-
-@book{dahlhaus67aa,
- Address = {K\"{o}ln},
- Author = {Carl Dahlhaus},
- Booktitle = {Musik\"{a}sthetik},
- Date = {1967},
- Date-Added = {2009-07-24 09:15:54 -0400},
- Date-Modified = {2009-07-24 09:16:38 -0400},
- Publisher = {Gerig},
- Title = {Musik\"{a}sthetik}}
-
-@book{bessiere90aa,
- Address = {Paris},
- Booktitle = {Mythologies de l'\'{e}criture},
- Date = {1990},
- Date-Added = {2009-07-24 09:14:46 -0400},
- Date-Modified = {2009-07-24 09:15:48 -0400},
- Editor = {Jean Bessi\`{e}re},
- Publisher = {PUF},
- Subtitle = {Champs critiques},
- Title = {Mythologies de l'\'{e}criture}}
-
-@proceedings{freed91aa,
- Address = {Lexington},
- Booktitle = {Foreign Language Acquisition Research and the Classroom},
- Date = {1991},
- Date-Added = {2009-07-23 13:24:40 -0400},
- Date-Modified = {2010-04-18 08:39:04 -0500},
- Editor = {Barbara F. Freed},
- Eventdate = {1989-10},
- Eventtitle = {Consortium for Lang.\ Teaching and Learning Conf.},
- Institution = {U of Pennsylvania},
- Publisher = {Heath},
- Title = {Foreign Language Acquisition Research and the Classroom}}
-
-@inproceedings{hualde00aa,
- Address = {Berkeley},
- Author = {Jos\'{e} Ignacio Hualde},
- Booktitle = {Proceedings of the Twenty-Fifth Annual Meeting of the Berkeley Linguistics Society, February 12--15, 1999: General Session and Parassession on Loan Word Phenomena},
- Date = {2000},
- Date-Added = {2009-07-23 13:23:06 -0400},
- Date-Modified = {2009-07-23 13:24:38 -0400},
- Editor = {Steve S. Chang and Lily Liaw and Josef Ruppenhofer},
- Pages = {348--58},
- Publisher = {Berkeley Linguistics Soc.},
- Title = {Patterns of Correspondence in the Adaptation of Spanish Borrowings in Basque}}
-
-@proceedings{chang00aa,
- Address = {Berkeley},
- Booktitle = {Proceedings of the Twenty-Fifth Annual Meeting of the Berkeley Linguistics Society, February 12--15, 1999: General Session and Parassession on Loan Word Phenomena},
- Date = {2000},
- Date-Added = {2009-07-23 13:17:06 -0400},
- Date-Modified = {2009-07-23 13:22:37 -0400},
- Editor = {Steve S. Chang and Lily Liaw and Josef Ruppenhofer},
- Publisher = {Berkeley Linguistics Soc.},
- Title = {Proceedings of the Twenty-Fifth Annual Meeting of the Berkeley Linguistics Society, February 12--15, 1999: General Session and Parassession on Loan Word Phenomena}}
-
-@booklet{washingtondc00aa,
- Annote = {This is the citation for a booklet entrytype. I found this source listed in the \emph{MLA Style Manual}.},
- Date = {2000},
- Date-Added = {2009-07-23 13:12:40 -0400},
- Date-Modified = {2009-07-23 13:12:40 -0400},
- Location = {New York},
- Publisher = {Trip Builder},
- Title = {Washington, DC}}
-
-@booklet{renoir94aa,
- Annote = {This is the citation for a booklet entrytype. I found this source listed in the \emph{MLA Style Manual}.},
- Date = {1994},
- Date-Added = {2009-07-23 13:12:40 -0400},
- Date-Modified = {2009-07-23 13:12:40 -0400},
- Location = {New York},
- Publisher = {Dover},
- Title = {Renoir Lithographs}}
-
-@book{morrison02aa,
- Address = {New York},
- Author = {Toni Morrison},
- Booktitle = {Sula},
- Date = {2002},
- Date-Added = {2009-07-23 13:09:43 -0400},
- Date-Modified = {2009-07-23 13:10:14 -0400},
- Origdate = {1973},
- Publisher = {Plume-Penguin},
- Title = {Sula}}
-
-@book{dreiser00aa,
- Address = {New York},
- Author = {Theodore Dreiser},
- Booktitle = {Sister Carrie},
- Date = {2000},
- Date-Added = {2009-07-23 13:04:33 -0400},
- Date-Modified = {2009-07-23 13:05:29 -0400},
- Introduction = {Richard Lingeman},
- Origdate = {1900},
- Publisher = {New Amer.\ Lib.-Penguin},
- Title = {Sister Carrie}}
-
-@book{douglas93aa,
- Address = {London},
- Author = {Mary Douglas},
- Booktitle = {Purity and Danger},
- Date = {1993},
- Date-Added = {2009-07-23 13:03:34 -0400},
- Date-Modified = {2009-07-23 13:04:10 -0400},
- Origdate = {1966},
- Publisher = {Routledge},
- Subtitle = {An Analysis of the Concepts of Pollution and Taboo},
- Title = {Purity and Danger}}
-
-@book{doctorow96aa,
- Address = {New York},
- Author = {E. L. Doctorow},
- Booktitle = {Welcome to Hard Times},
- Date = {1996},
- Date-Added = {2009-07-23 13:02:52 -0400},
- Date-Modified = {2009-07-23 13:03:22 -0400},
- Origdate = {1960},
- Publisher = {Viking-Penguin},
- Title = {Welcome to Hard Times}}
-
-@book{atwood01aa,
- Address = {New York},
- Author = {Margaret Atwood},
- Booktitle = {The Blind Assassin},
- Date = {2001},
- Date-Added = {2009-07-23 13:02:15 -0400},
- Date-Modified = {2009-07-23 13:02:50 -0400},
- Origdate = {2000},
- Publisher = {Knopf-Random},
- Title = {The Blind Assassin}}
-
-@book{riccoboni98aa,
- Address = {New York},
- Author = {Marie Riccoboni},
- Booktitle = {The Story of Ernestine},
- Date = {1998},
- Date-Added = {2009-07-23 12:54:25 -0400},
- Date-Modified = {2009-07-23 12:55:23 -0400},
- Number = {6},
- Publisher = {MLA},
- Series = {Texts and Trans.},
- Title = {The Story of Ernestine},
- Translator = {Joan Hinde Stewart and Philip Stewart}}
-
-@book{neruda91aa,
- Address = {Berkeley},
- Author = {Pablo Neruda},
- Booktitle = {Canto General},
- Date = {1991},
- Date-Added = {2009-07-23 12:53:25 -0400},
- Date-Modified = {2009-07-23 12:54:21 -0400},
- Number = {7},
- Publisher = {U of California P},
- Series = {Latin Amer.\ Lit.\ and Culture},
- Title = {Canto General},
- Translator = {Jack Schmitt}}
-
-@book{murck00aa,
- Address = {Cambridge},
- Author = {Alfreda Murck},
- Booktitle = {Poetry and Painting in Song China},
- Date = {2000},
- Date-Added = {2009-07-23 12:51:14 -0400},
- Date-Modified = {2010-02-12 11:24:58 -0600},
- Number = {50},
- Publisher = {Harvard UP},
- Series = {Harvard-Yenching Inst.\ Monograph Ser.},
- Subtitle = {The Subtle Art of Dissent},
- Title = {Poetry and Painting in Song China}}
-
-@book{mitchell-boyask02aa,
- Address = {New York},
- Booktitle = {Approaches to Teaching the Dramas of Euripides},
- Date = {2002},
- Date-Added = {2009-07-23 12:49:30 -0400},
- Date-Modified = {2009-07-23 12:50:41 -0400},
- Editor = {Robin Mitchell-Boyask},
- Number = {73},
- Publisher = {MLA},
- Series = {Approaches to Teaching World Lit.},
- Title = {Approaches to Teaching the Dramas of Euripides}}
-
-@book{howells68aa,
- Address = {Bloomington},
- Author = {W. D. Howells},
- Booktitle = {Their Wedding Journey},
- Date = {1968},
- Date-Added = {2009-07-23 12:28:44 -0400},
- Date-Modified = {2011-04-19 19:09:23 -0500},
- Doublecheck = {-},
- Editor = {John K. Reeves},
- Editora = {Edwin H. Cady},
- Editoratype = {generaleditor},
- Eventdate = {1968/1983},
- Maintitle = {A Selected Edition of W. D. Howells},
- Publisher = {Indiana UP},
- Rating = {0},
- Title = {Their Wedding Journey},
- Volume = {5},
- Volumes = {32}}
-
-@book{crane69ab,
- Address = {Charlottesville},
- Author = {Stephen Crane},
- Booktitle = {The Red Badge of Courage},
- Date = {1975},
- Date-Added = {2009-07-23 12:23:16 -0400},
- Date-Modified = {2011-04-19 19:17:33 -0500},
- Doublecheck = {-},
- Editora = {Fredson Bowers},
- Editoratype = {generaleditor},
- Eventdate = {1969/1976},
- Maintitle = {The University of Virginia Edition of the Works of Stephen Crane},
- Publisher = {UP of Virginia},
- Subtitle = {An Episode of the American Civil War},
- Title = {The Red Badge of Courage},
- Volume = {2},
- Volumes = {10}}
-
-@book{durant65ac,
- Address = {New York},
- Author = {Will Durant and Ariel Durant},
- Booktitle = {The Age of Voltaire},
- Date = {1965},
- Date-Added = {2009-07-23 11:42:38 -0400},
- Date-Modified = {2011-04-19 19:18:19 -0500},
- Doublecheck = {-},
- Eventdate = {1935/1975},
- Maintitle = {The Story of Civilization},
- Publisher = {Knopf},
- Title = {The Age of Voltaire},
- Volume = {9},
- Volumes = {11}}
-
-@book{churchill57ab,
- Address = {New York},
- Author = {Winston S. Churchill},
- Booktitle = {The Age of Revolution},
- Date = {1957},
- Date-Added = {2009-07-23 11:41:48 -0400},
- Date-Modified = {2010-02-15 11:37:39 -0600},
- Eventdate = {1956/1958},
- Maintitle = {A History of the English-Speaking Peoples},
- Publisher = {Knopf},
- Title = {The Age of Revolution},
- Volume = {3},
- Volumes = {4}}
-
-@book{caro02ab,
- Address = {New York},
- Author = {Robert A. Caro},
- Booktitle = {Master of the Senate},
- Date = {2002},
- Date-Added = {2009-07-23 08:52:10 -0400},
- Date-Modified = {2011-04-19 19:19:06 -0500},
- Doublecheck = {-},
- Eventdate = {1982/},
- Maintitle = {The Dates of Lyndon Johnson},
- Publisher = {Knopf},
- Title = {Master of the Senate},
- Volume = {3},
- Volumes = {3}}
-
-@book{durant65ab,
- Address = {New York},
- Author = {Will Durant and Ariel Durant},
- Booktitle = {The Age of Voltaire},
- Date = {1965},
- Date-Added = {2009-07-23 08:51:18 -0400},
- Date-Modified = {2009-07-23 08:51:48 -0400},
- Publisher = {Knopf},
- Title = {The Age of Voltaire}}
-
-@book{churchill57aa,
- Address = {New York},
- Author = {Winston S. Churchill},
- Booktitle = {The Age of Revolution},
- Date = {1957},
- Date-Added = {2009-07-23 08:50:54 -0400},
- Date-Modified = {2009-07-23 08:51:16 -0400},
- Publisher = {Knopf},
- Title = {The Age of Revolution}}
-
-@book{caro02aa,
- Address = {New York},
- Author = {Robert A. Caro},
- Booktitle = {Master of the Senate},
- Date = {2002},
- Date-Added = {2009-07-23 08:50:20 -0400},
- Date-Modified = {2009-07-23 08:53:15 -0400},
- Publisher = {Knopf},
- Title = {Master of the Senate}}
-
-@book{wellek86aa,
- Address = {New Haven},
- Author = {Ren\'{e} Wellek},
- Date = {1986},
- Date-Added = {2009-07-22 10:42:39 -0400},
- Date-Modified = {2009-07-22 10:43:35 -0400},
- Eventdate = {1955/1992},
- Publisher = {Yale UP},
- Title = {A History of Modern Criticism, 1750--1950},
- Volume = {5},
- Volumes = {8}}
-
-@incollection{stowe02ab,
- Address = {Boston},
- Author = {Harriet Beecher Stowe},
- Booktitle = {The Heath Anthology of American Literature},
- Date = {2002},
- Date-Added = {2009-07-22 10:40:33 -0400},
- Date-Modified = {2009-07-22 11:02:13 -0400},
- Edition = {4},
- Editor = {Paul Lauter and Many Others and Some More and More Than Three},
- Eventdate = {1863},
- Pages = {2530-38},
- Publisher = {Houghton},
- Shorttitle = {Sojourner Truth},
- Title = {Sojourner Truth, the Libyan Sibyl},
- Volume = {1},
- Volumes = {2}}
-
-@book{doyle93ac,
- Address = {New York},
- Author = {Arthur Conan Doyle},
- Booktitle = {The Oxford Sherlock Holmes},
- Date = {1993},
- Date-Added = {2009-07-22 10:40:33 -0400},
- Date-Modified = {2009-07-22 10:40:57 -0400},
- Editor = {Owen Dudley Edwards},
- Publisher = {Oxford UP},
- Title = {The Oxford Sherlock Holmes},
- Volume = {8},
- Volumes = {9}}
-
-@incollection{stowe02aa,
- Address = {Boston},
- Author = {Harriet Beecher Stowe},
- Booktitle = {The Heath Anthology of American Literature},
- Date = {2002},
- Date-Added = {2009-07-22 10:23:44 -0400},
- Date-Modified = {2009-07-22 10:26:02 -0400},
- Edition = {4},
- Editor = {Paul Lauter and Many Others and Some More and More Than Three},
- Origdate = {1863},
- Pages = {2530-38},
- Publisher = {Houghton},
- Shorttitle = {Sojourner Truth},
- Title = {Sojourner Truth, the Libyan Sibyl},
- Volume = {1}}
-
-@book{lawrence00aa,
- Address = {New York},
- Author = {D. H. Lawrence},
- Booktitle = {The Letters of D.~H.~Lawrence},
- Date = {2000},
- Date-Added = {2009-07-22 10:22:28 -0400},
- Date-Modified = {2009-07-22 10:23:42 -0400},
- Editor = {James T. Boulton},
- Publisher = {Cambridge UP},
- Title = {The Letters of D.~H.~Lawrence},
- Volume = {8}}
-
-@book{doyle93ab,
- Address = {New York},
- Author = {Arthur Conan Doyle},
- Booktitle = {The Oxford Sherlock Holmes},
- Date = {1993},
- Date-Added = {2009-07-22 10:20:00 -0400},
- Date-Modified = {2009-07-22 10:22:01 -0400},
- Editor = {Owen Dudley Edwards},
- Publisher = {Oxford UP},
- Title = {The Oxford Sherlock Holmes},
- Volume = {8}}
-
-@book{wellek55aa,
- Address = {New Haven},
- Author = {Ren\'{e} Wellek},
- Booktitle = {A History of Modern Criticism, 1750--1950},
- Date = {1955/1992},
- Date-Added = {2009-06-29 08:20:17 -0400},
- Date-Modified = {2009-06-29 08:20:57 -0400},
- Publisher = {Yale UP},
- Title = {A History of Modern Criticism, 1750--1950},
- Volumes = {8}}
-
-@collection{boulton79aa,
- Address = {New York},
- Author = {D. H. Lawrence},
- Booktitle = {The Letters of D.~H.~Lawrence},
- Date = {1979/2000},
- Date-Added = {2009-06-29 08:19:05 -0400},
- Date-Modified = {2009-06-29 08:20:12 -0400},
- Editor = {James T. Boulton},
- Publisher = {Cambridge UP},
- Title = {The Letters of D.~H.~Lawrence},
- Volumes = {8}}
-
-@book{crane69aa,
- Address = {Charlottesville},
- Author = {Stephen Crane},
- Booktitle = {The University of Virginia Edition of the Works of Stephen Crane},
- Date = {1969/1976},
- Date-Added = {2009-06-29 08:18:02 -0400},
- Date-Modified = {2010-02-15 11:38:32 -0600},
- Editor = {Fredson Bowers},
- Publisher = {UP of Virginia},
- Title = {The University of Virginia Edition of the Works of Stephen Crane},
- Volumes = {10}}
-
-@book{churchill56aa,
- Address = {New York},
- Author = {Winston S. Churchill},
- Booktitle = {A History of the English-Speaking Peoples},
- Date = {1956/1958},
- Date-Added = {2009-06-29 08:17:05 -0400},
- Date-Modified = {2009-06-29 08:17:58 -0400},
- Publisher = {Dodd},
- Title = {A History of the English-Speaking Peoples},
- Volumes = {4}}
-
-@reference{cassidy85aa,
- Address = {Cambridge},
- Booktitle = {Dictionary of American Regional English},
- Date = {1985/},
- Date-Added = {2009-06-29 08:11:42 -0400},
- Date-Modified = {2010-02-15 10:33:42 -0600},
- Editor = {Frederic Cassidy},
- Publisher = {Belknap-Harvard UP},
- Title = {Dictionary of American Regional English},
- Volumes = {3}}
-
-@book{schlesinger73aa,
- Address = {New York},
- Booktitle = {History of U.S. Political Parties},
- Date = {1973},
- Date-Added = {2009-06-29 08:07:29 -0400},
- Date-Modified = {2009-06-29 08:09:10 -0400},
- Editor = {Schlesinger, Arthur M., Jr.},
- Editortype = {generaleditor},
- Publisher = {Chelsea},
- Title = {History of U.S. Political Parties},
- Volumes = {4}}
-
-@book{sadie80aa,
- Address = {London},
- Booktitle = {The New Grove Dictionary of Music and Musicians},
- Date = {1980},
- Date-Added = {2009-06-29 07:55:00 -0400},
- Date-Modified = {2009-06-29 07:56:21 -0400},
- Editor = {Stanley Sadie},
- Publisher = {Macmillan},
- Sorttitle = {New Grove Dictionary of Music and Musicians},
- Title = {The New Grove Dictionary of Music and Musicians},
- Volumes = {20}}
-
-@book{rampersand02aa,
- Address = {New York},
- Author = {Arnold Rampersand},
- Booktitle = {The Life of Langston Hughes},
- Date = {2002},
- Date-Added = {2009-06-29 07:53:09 -0400},
- Date-Modified = {2009-06-29 07:54:58 -0400},
- Edition = {2},
- Publisher = {Oxford UP},
- Title = {The Life of Langston Hughes},
- Volumes = {2}}
-
-@collection{lauter02aa,
- Address = {Boston},
- Booktitle = {The Heath Anthology of American Literature},
- Date = {2002},
- Date-Added = {2009-06-29 07:51:48 -0400},
- Date-Modified = {2009-06-29 07:53:04 -0400},
- Edition = {4},
- Editor = {Paul Lauter and Saul Lauter and Paul Sauter and Saul Sauter},
- Publisher = {Houghton},
- Title = {The Heath Anthology of American Literature},
- Volumes = {2}}
-
-@book{doyle93aa,
- Address = {New York},
- Author = {Arthur Conan Doyle},
- Booktitle = {The Oxford Sherlock Holmes},
- Date = {1993},
- Date-Added = {2009-06-29 07:50:51 -0400},
- Date-Modified = {2009-06-29 07:51:40 -0400},
- Editor = {Owen Dudley Edwards},
- Publisher = {Oxford UP},
- Title = {The Oxford Sherlock Holmes},
- Volumes = {9}}
-
-@book{blanco93aa,
- Address = {Hamden},
- Booktitle = {The American Revolution},
- Date = {1993},
- Date-Added = {2009-06-29 07:49:30 -0400},
- Date-Modified = {2009-06-29 07:50:48 -0400},
- Editor = {Richard L. Blanco},
- Publisher = {Garland},
- Subtitle = {An Encyclopedia},
- Title = {The American Revolution, 1775--1783},
- Volumes = {2}}
-
-@book{murasaki-shikibu85aa,
- Address = {New York},
- Author = {{Murasaki Shikibu}},
- Booktitle = {The Tale of Genji},
- Date = {1985},
- Date-Added = {2009-06-28 14:56:44 -0400},
- Date-Modified = {2009-06-28 14:57:55 -0400},
- Edition = {Abr.~ed.},
- Publisher = {Vintage-Random},
- Title = {The Tale of Genji},
- Translator = {Edward G. Seidensticker}}
-
-@book{hyde86aa,
- Address = {New York},
- Author = {Margaret O. Hyde and Elizabeth Held Forsyth},
- Booktitle = {Suicide},
- Date = {1986},
- Date-Added = {2009-06-28 14:55:59 -0400},
- Date-Modified = {2009-06-28 14:56:39 -0400},
- Edition = {Rev.~ed.},
- Publisher = {Watts},
- Subtitle = {The Hidden Epidemic},
- Title = {Suicide}}
-
-@book{cheyfitz97aa,
- Address = {Philadelphia},
- Author = {Eric Cheyfitz},
- Booktitle = {The Poetics of Imperialism},
- Date = {1997},
- Date-Added = {2009-06-28 14:54:19 -0400},
- Date-Modified = {2009-06-28 14:55:29 -0400},
- Edition = {Expanded ed.},
- Publisher = {U of Pennsylvania P},
- Subtitle = {Translation and Colonization from \emph{The Tempest} to \emph{Tarzan}},
- Title = {The Poetics of Imperialism}}
-
-@book{chaucer57aa,
- Address = {Boston},
- Author = {Geoffrey Chaucer},
- Booktitle = {The Works of Geoffrey Chaucer},
- Date = {1957},
- Date-Added = {2009-06-28 14:53:43 -0400},
- Date-Modified = {2009-06-28 14:54:16 -0400},
- Edition = {2},
- Editor = {F. N. Robinson},
- Publisher = {Houghton},
- Title = {The Works of Geoffrey Chaucer}}
-
-@book{bondanella01aa,
- Address = {New York},
- Author = {Peter Bondanella},
- Booktitle = {Peter Bondanella},
- Date = {2001},
- Date-Added = {2009-06-28 14:51:18 -0400},
- Date-Modified = {2009-06-28 14:52:26 -0400},
- Edition = {3},
- Publisher = {Continuum},
- Subtitle = {From Neorealism to the Present},
- Title = {Italian Cinema}}
-
-@book{levi87aa,
- Address = {New York},
- Author = {Primo Levi},
- Booktitle = {Survival in Auschwitz},
- Date = {1987},
- Date-Added = {2009-06-17 11:10:18 -0400},
- Date-Modified = {2009-06-17 11:12:43 -0400},
- Origdate = {1958},
- Origlanguage = {italian},
- Origtitle = {Se questo \`{e} un uomo},
- Publisher = {Collier-Macmillan},
- Subtitle = {The Nazi Assault on Humanity},
- Title = {Survival in Auschwitz},
- Translator = {Stuart Woolf}}
-
-@book{esquivel92ab,
- Address = {New York},
- Author = {Laura Esquivel},
- Booktitle = {Like Water for Chocolate},
- Date = {1992},
- Date-Added = {2009-06-17 11:06:49 -0400},
- Date-Modified = {2009-06-17 11:09:53 -0400},
- Origdate = {1989},
- Origlanguage = {spanish},
- Origlocation = {M\'{e}xico, DF [Mexico City]},
- Origpublisher = {Planeta},
- Origtitle = {Como agua para chocolate: Novelas de entregas mensuales, con recetas, amores y remedios caseros},
- Publisher = {Doubleday},
- Subtitle = {A Novelty in Monthly Installments, with Recipes, Romances, and Home Remedies},
- Title = {Like Water for Chocolate},
- Translator = {Carol Christensen and Thomas Christensen}}
-
-@book{mu76aa,
- Address = {New York},
- Author = {{Murasaki Shikibu}},
- Booktitle = {The Tale of Genji},
- Date = {1976},
- Date-Added = {2009-06-17 10:55:32 -0400},
- Date-Modified = {2009-06-17 10:56:31 -0400},
- Publisher = {Knopf},
- Title = {The Tale of Genji},
- Translator = {Edward G. Seidensticker}}
-
-@book{hildegard-of-bingen01aa,
- Address = {New York},
- Author = {{Hildegard of Bingen}},
- Booktitle = {Selected Writings},
- Date = {2001},
- Date-Added = {2009-06-17 10:54:22 -0400},
- Date-Modified = {2009-06-17 10:55:12 -0400},
- Publisher = {Penguin},
- Title = {Selected Writings},
- Translator = {Mark Atherton}}
-
-@book{esquivel92aa,
- Address = {New York},
- Author = {Laura Esquivel},
- Booktitle = {Like Water for Chocolate},
- Date = {1992},
- Date-Added = {2009-06-17 10:53:05 -0400},
- Date-Modified = {2009-06-17 10:54:15 -0400},
- Publisher = {Doubleday},
- Subtitle = {A Novelty in Monthly Installments, with Recipes, Romances, and Home Remedies},
- Title = {Like Water for Chocolate},
- Translator = {Carol Christensen and Thomas Christensen}}
-
-@book{beowulf01aa,
- Address = {New York},
- Booktitle = {Beowulf},
- Date = {2001},
- Date-Added = {2009-06-17 10:50:55 -0400},
- Date-Modified = {2009-06-17 10:52:33 -0400},
- Editor = {Nicholas Howe},
- Options = {useeditor=false},
- Publisher = {Norton},
- Title = {Beowulf},
- Translator = {E. Talbot Donaldson}}
-
-@book{crane75ab,
- Address = {Charlottesville},
- Author = {Stephen Crane},
- Booktitle = {The Red Badge of Courage},
- Date = {1975},
- Date-Added = {2009-06-17 10:19:53 -0400},
- Date-Modified = {2009-06-17 10:20:35 -0400},
- Editor = {Fredson Bowers},
- Options = {useauthor=false},
- Origdate = {1895},
- Publisher = {UP of Virginia},
- Sorttitle = {Red Badge of Courage},
- Subtitle = {An Episode of the American Civil War},
- Title = {The Red Badge of Courage}}
-
-@book{twain93aa,
- Author = {Mark Twain},
- Booktitle = {Roughing It},
- Date = {1993},
- Date-Added = {2009-06-17 10:17:53 -0400},
- Date-Modified = {2009-06-17 10:18:27 -0400},
- Editor = {Harriet E. Smith and Edgar M. Branch},
- Publisher = {U of California P},
- Title = {Roughing It}}
-
-@book{smith02aa,
- Address = {Bloomington},
- Author = {Charlotte Smith},
- Booktitle = {The Collected Letters of Charlotte Smith},
- Date = {2002},
- Date-Added = {2009-06-17 10:17:21 -0400},
- Date-Modified = {2009-06-17 10:18:39 -0400},
- Editor = {Judith Stanton},
- Publisher = {Indiana UP},
- Sorttitle = {Collected Letters of Charlotte Smith},
- Title = {The Collected Letters of Charlotte Smith}}
-
-@book{shakespeare92aa,
- Address = {New York},
- Author = {William Shakespeare},
- Booktitle = {Hamlet},
- Date = {1992},
- Date-Added = {2009-06-17 10:16:30 -0400},
- Date-Modified = {2009-06-17 10:17:05 -0400},
- Editor = {Barbara A. Mowat and Paul Werstine},
- Publisher = {Washington Square-Pocket},
- Title = {Hamlet}}
-
-@book{octovian86aa,
- Address = {London},
- Date = {1986},
- Date-Added = {2009-06-17 10:16:14 -0400},
- Date-Modified = {2009-06-17 10:16:14 -0400},
- Editor = {Frances McSparran},
- Number = {289},
- Options = {useeditor=false},
- Publisher = {Oxford UP},
- Series = {Early English Text Soc.},
- Title = {Octovian}}
-
-@book{edgeworth92aa,
- Address = {London},
- Author = {Maria Edgeworth},
- Booktitle = {\emph{Castle Rackrent} and \emph{Ennui}},
- Date = {1992},
- Date-Added = {2009-06-17 10:15:03 -0400},
- Date-Modified = {2009-06-17 10:19:42 -0400},
- Editor = {Marilyn Butler},
- Publisher = {Penguin},
- Title = {\emph{Castle Rackrent} and \emph{Ennui}}}
-
-@book{crane75aa,
- Address = {Charlottesville},
- Author = {Stephen Crane},
- Booktitle = {The Red Badge of Courage},
- Date = {1975},
- Date-Added = {2009-06-17 10:14:04 -0400},
- Date-Modified = {2009-06-17 10:20:46 -0400},
- Editor = {Fredson Bowers},
- Origdate = {1895},
- Publisher = {UP of Virginia},
- Sorttitle = {Red Badge of Courage},
- Subtitle = {An Episode of the American Civil War},
- Title = {The Red Badge of Courage}}
-
-@book{austen01aa,
- Address = {New York},
- Author = {Jane Austen},
- Booktitle = {Sense and Sensibility},
- Date = {2001},
- Date-Added = {2009-06-17 10:11:53 -0400},
- Date-Modified = {2009-06-17 10:19:32 -0400},
- Editor = {Claudia Johnson},
- Publisher = {Norton},
- Title = {Sense and Sensibility}}
-
-@book{bible84aa,
- Address = {Grand Rapids},
- Booktitle = {The Holy Bible},
- Date = {1984},
- Date-Added = {2009-06-17 07:29:05 -0400},
- Date-Modified = {2009-06-17 07:29:05 -0400},
- Publisher = {Zondervan},
- Sorttitle = {Holy Bible},
- Subtitle = {New International Version},
- Title = {The Holy Bible}}
-
-@book{virginia93aa,
- Address = {New York},
- Booktitle = {Encyclopedia of Virginia},
- Date = {1993},
- Date-Added = {2009-06-17 07:29:05 -0400},
- Date-Modified = {2009-06-17 07:29:05 -0400},
- Publisher = {Somerset},
- Title = {Encyclopedia of Virginia}}
-
-@book{NewYorkPublicLibrary97aa,
- Address = {New York},
- Booktitle = {New York Public Library American History Desk Reference},
- Date = {1997},
- Date-Added = {2009-06-17 07:29:05 -0400},
- Date-Modified = {2009-06-17 07:29:05 -0400},
- Publisher = {Macmillan},
- Title = {New York Public Library American History Desk Reference}}
-
-@incollection{lennon86aa,
- Author = {John Lennon},
- Crossref = {baker86aa},
- Date-Added = {2009-06-17 07:15:34 -0400},
- Date-Modified = {2009-06-17 07:15:34 -0400},
- Pages = {357-58},
- Title = {The Fat Budgie}}
-
-@incollection{angelou86aa,
- Author = {Maya Angelou},
- Crossref = {baker86aa},
- Date-Added = {2009-06-17 07:15:34 -0400},
- Date-Modified = {2009-06-17 07:15:34 -0400},
- Pages = {276-78},
- Title = {Pickin Em Up and Layin Em Down}}
-
-@incollection{lebowitz93aa,
- Author = {Fran Lebowitz},
- Crossref = {baker93aa},
- Date-Added = {2009-06-17 07:15:34 -0400},
- Date-Modified = {2009-06-17 07:15:34 -0400},
- Pages = {556-59},
- Title = {Manners}}
-
-@incollection{hurston93aa,
- Author = {Zora Neale Hurston},
- Crossref = {baker93aa},
- Date-Added = {2009-06-17 07:15:34 -0400},
- Date-Modified = {2009-06-17 07:15:34 -0400},
- Pages = {458-59},
- Title = {Squinch Owl Story}}
-
-@incollection{walker00aa,
- Author = {Alice Walker},
- Crossref = {oates2000aa},
- Date-Added = {2009-06-17 07:15:34 -0400},
- Date-Modified = {2009-06-17 07:15:34 -0400},
- Pages = {395-411},
- Title = {Looking for Zora}}
-
-@incollection{rodriguez00aa,
- Author = {Richard Rodriguez},
- Crossref = {oates2000aa},
- Date-Added = {2009-06-17 07:15:34 -0400},
- Date-Modified = {2009-06-17 07:15:34 -0400},
- Pages = {447-66},
- Subtitle = {A Memoir of a Bilingual Childhood},
- Title = {Aria}}
-
-@incollection{kingston00aa,
- Author = {Maxine Hong Kingston},
- Crossref = {oates2000aa},
- Date-Added = {2009-06-17 07:15:34 -0400},
- Date-Modified = {2009-06-17 07:15:34 -0400},
- Pages = {383-94},
- Title = {No Name Woman}}
-
-@incollection{agee00aa,
- Author = {James Agee},
- Crossref = {oates2000aa},
- Date-Added = {2009-06-17 07:15:34 -0400},
- Date-Modified = {2009-06-17 07:15:34 -0400},
- Pages = {171--75},
- Subtitle = {Summer of 1915},
- Title = {Knoxville}}
-
-@incollection{agee00xx,
- Author = {James Agee},
- Crossref = {oates2000aa},
- Date-Added = {2009-06-17 07:15:34 -0400},
- Date-Modified = {2009-06-17 07:15:34 -0400},
- Entrysubtype = {book},
- Pages = {171--75},
- Subtitle = {Summer of 1915},
- Title = {Knoxville}}
-
-@suppcollection{atwan00aa,
- Author = {Robert Atwan},
- Crossref = {oates2000aa},
- Date-Added = {2009-06-17 07:15:34 -0400},
- Date-Modified = {2009-06-17 07:15:34 -0400},
- Entrysubtype = {foreword},
- Pages = {x-xvi}}
-
-@periodical{appiah92aa,
- Date = {1992},
- Date-Added = {2009-06-16 13:07:41 -0400},
- Date-Modified = {2009-06-16 13:14:35 -0400},
- Editor = {Kwame Anthony Appiah and {Henry Louis Gates, Jr.}},
- Issuetitle = {Identities},
- Journaltitle = {Critical Inquiry},
- Number = {4},
- Pages = {625--884.},
- Volume = {18}}
-
-@unpublished{smithXXaa,
- Author = {Sonia Smith},
- Date-Added = {2009-06-16 12:02:53 -0400},
- Date-Modified = {2009-06-16 12:02:53 -0400},
- Note = {Unpublished essay, 1998},
- Title = {Shakespeare's Dark Lady Revisited}}
-
-@unpublished{twainXXaa,
- Author = {Mark Twain},
- Date-Added = {2009-06-16 12:02:53 -0400},
- Date-Modified = {2011-04-19 19:50:17 -0500},
- Library = {U of California},
- Location = {Berkeley},
- Note = {Mark Twain Papers},
- Titleaddon = {Notebook 32},
- Type = {typescript}}
-
-@unpublished{octovianXXaa,
- Booktitle = {Octovian},
- Date-Added = {2009-06-16 12:02:53 -0400},
- Date-Modified = {2009-06-16 12:02:53 -0400},
- Library = {Dean and Chapter Lib.},
- Location = {Lincolnshire, Eng.},
- Number = {91},
- Sorttitle = {Octovian},
- Type = {manuscript}}
-
-@unpublished{salviatiXXaa,
- Author = {Lionardo Salviati},
- Booktitle = {Poetica d'Aristotile parafrasata e comentata},
- Date-Added = {2009-06-16 12:02:53 -0400},
- Date-Modified = {2009-06-16 12:02:53 -0400},
- Library = {Biblioteca Nazionale Centrale},
- Location = {Firenze},
- Number = {2.2.11},
- Type = {manuscript}}
-
-@unpublished{chaucerXXaa,
- Author = {Geoffrey Chaucer},
- Booktitle = {The Canterbury Tales},
- Date-Added = {2009-06-16 12:02:14 -0400},
- Date-Modified = {2009-06-16 12:02:14 -0400},
- Library = {British Lib.},
- Location = {London},
- Number = {7334},
- Title = {The Canterbury Tales},
- Type = {Harley ms}}
-
-@book{wpa00aa,
- Address = {Tuscaloosa},
- Booktitle = {The WPA Guide to 1930s Alabama},
- Date = {2000},
- Date-Added = {2009-06-16 09:30:35 -0400},
- Date-Modified = {2009-06-16 09:44:39 -0400},
- Origdate = {1941},
- Origtitle = {Alabama: A Guide to the Deep South},
- Publisher = {U of Alabama P},
- Shorttitle = {WPA Guide},
- Sorttitle = {WPA Guide to 1930s Alabama},
- Title = {The WPA Guide to 1930s Alabama}}
-
-@book{ishiguro01aa,
- Address = {New York},
- Author = {Kazuo Ishiguro},
- Booktitle = {When We Were Orphans},
- Date = {2001},
- Date-Added = {2009-06-16 09:27:38 -0400},
- Date-Modified = {2009-06-16 09:28:57 -0400},
- Origdate = {2000},
- Origlocation = {London},
- Origpublisher = {Faber},
- Publisher = {Vintage-Random},
- Shorttitle = {When We Were},
- Title = {When We Were Orphans}}
-
-@suppbook{doody96aa,
- Address = {New Brunswick},
- Author = {Margaret Anne Doody},
- Booktitle = {The True Story of the Novel},
- Date = {1996},
- Date-Added = {2009-05-27 14:48:46 +0100},
- Date-Modified = {2009-05-27 14:49:34 +0100},
- Entrysubtype = {introduction},
- Pages = {1--11},
- Publisher = {Rutgers UP},
- Title = {In Search of the Ancient Novel}}
-
-@suppbook{brodsky97aa,
- Address = {Evanston},
- Author = {Joseph Brodsky},
- Bookauthor = {Tomas Venclova},
- Booktitle = {Winter Dialogue},
- Date = {1997},
- Date-Added = {2009-05-27 14:46:24 +0100},
- Date-Modified = {2009-05-27 14:48:15 +0100},
- Entrysubtype = {foreword},
- Pages = {vii-xviii},
- Publisher = {Hydra-Northwestern UP},
- Title = {Poetry as a Form of Resistance to Reality},
- Translator = {Diana Senechal}}
-
-@suppbook{sears01aa,
- Address = {New York},
- Author = {Barry Sears},
- Bookauthor = {Upton Sinclair},
- Booktitle = {The Jungle},
- Date = {2001},
- Date-Added = {2009-05-27 14:45:03 +0100},
- Date-Modified = {2009-05-27 14:45:43 +0100},
- Entrysubtype = {afterword},
- Pages = {343--347},
- Publisher = {Signet}}
-
-@suppbook{marsalis93aa,
- Address = {New York},
- Author = {Wynton Marsalis},
- Bookauthor = {John Edward Hasse},
- Booksubtitle = {The Life and Genius of Duke Ellington},
- Booktitle = {Beyond Category},
- Date = {1993},
- Date-Added = {2009-05-27 14:43:47 +0100},
- Date-Modified = {2009-05-27 14:44:52 +0100},
- Entrysubtype = {foreword},
- Pages = {13--14},
- Publisher = {Simon}}
-
-@suppcollection{hamill94aa,
- Address = {New York},
- Author = {Pete Hamill},
- Booksubtitle = {Thirty Writers Celebrate America's Favorite Borough},
- Booktitle = {The Brooklyn Reader},
- Date = {1994},
- Date-Added = {2009-05-27 14:41:41 +0100},
- Date-Modified = {2009-05-27 14:43:14 +0100},
- Editor = {Andrea Wyatt Sexton and Alice Leccese Powers},
- Entrysubtype = {introduction},
- Pages = {xi--xiv},
- Publisher = {Harmony}}
-
-@suppbook{drabble85aa,
- Address = {New York},
- Author = {Margaret Drabble},
- Bookauthor = {George Eliot},
- Booktitle = {Middlemarch},
- Date = {1985},
- Date-Added = {2009-05-27 14:40:44 +0100},
- Date-Modified = {2009-05-27 14:41:30 +0100},
- Entrysubtype = {introduction},
- Pages = {vii--xvii},
- Publisher = {Bantam}}
-
-@suppbook{coetzee01aa,
- Address = {New York},
- Author = {J. M. Coetzee},
- Bookauthor = {Robert Musil},
- Booktitle = {The Confusions of Young T\"{o}rless},
- Date = {2001},
- Date-Added = {2009-05-27 14:36:28 +0100},
- Date-Modified = {2009-05-27 14:39:28 +0100},
- Entrysubtype = {introduction},
- Pages = {v-xiii},
- Publisher = {Penguin},
- Translator = {Shaun Whiteside}}
-
-@suppcollection{borges73aa,
- Address = {New York},
- Author = {Jorge Luis Borges},
- Bookauthor = {Jorge Luis Borges},
- Booktitle = {Selected Poems, 1923--1967},
- Date = {1973},
- Date-Added = {2009-05-27 14:27:27 +0100},
- Date-Modified = {2009-05-27 14:40:21 +0100},
- Editor = {Norman Thomas {Di Giovanni}},
- Entrysubtype = {foreword},
- Pages = {xv--xvi},
- Publisher = {Delta-Dell}}
-
-@inreference{le-patourel87aa,
- Author = {John {Le Patourel}},
- Booktitle = {Dictionary of the Middle Ages},
- Date = {1987},
- Date-Added = {2009-05-27 14:23:51 +0100},
- Date-Modified = {2009-06-15 17:39:21 -0400},
- Editor = {Joseph R. Strayer},
- Location = {New York},
- Publisher = {Scribner's},
- Title = {Normans and Normandy},
- Volumes = {13}}
-
-@inreference{allen95aa,
- Author = {Anita L. Allen},
- Booktitle = {Encyclopedia of Bioethics},
- Date = {1995},
- Date-Added = {2009-05-27 14:20:24 +0100},
- Date-Modified = {2009-05-27 14:22:12 +0100},
- Edition = {Rev.~ed.},
- Editor = {Warren T. Reich},
- Location = {New York},
- Publisher = {MacMillan-Simon},
- Title = {Privacy in Health Care},
- Volumes = {5}}
-
-@inreference{noon89aa,
- Booktitle = {The Oxford English Dictionary},
- Date = {1989},
- Date-Added = {2009-05-27 14:19:08 +0100},
- Date-Modified = {2009-05-27 14:23:26 +0100},
- Edition = {2},
- Title = {Noon},
- Titleaddon = {Def.~4b}}
-
-@inreference{mohanty87aa,
- Author = {Jitendra M. Mohanty},
- Booksubtitle = {Macropaedia},
- Booktitle = {The New Encyclopedia Britannica},
- Date = {1987},
- Date-Added = {2009-05-27 14:18:08 +0100},
- Date-Modified = {2009-05-27 14:18:56 +0100},
- Edition = {15},
- Title = {Indian Philosophy}}
-
-@inreference{mandarin94aa,
- Booktitle = {The Encyclopedia Americana},
- Date = {1994},
- Date-Added = {2009-05-27 13:01:48 +0100},
- Date-Modified = {2009-05-27 14:17:14 +0100},
- Edition = {1994},
- Title = {Mandarin}}
-
-@inreference{ginsburg02aa,
- Booktitle = {Who's Who in Americana},
- Date = {2002},
- Date-Added = {2009-05-27 13:00:23 +0100},
- Date-Modified = {2009-05-27 13:00:56 +0100},
- Edition = {56},
- Title = {Ginsburg, Ruth Bader}}
-
-@inreference{azimuthal93aa,
- Booktitle = {Merriam-Webster's Collegiate Dictionary},
- Date = {1993},
- Date-Added = {2009-05-27 12:58:10 +0100},
- Date-Modified = {2009-05-27 12:59:22 +0100},
- Edition = {10},
- Title = {Azimuthal Equidistant Projection}}
-
-@incollection{franklin92aa,
- Address = {Boston},
- Author = {Benjamin Franklin},
- Booktitle = {The Faber Book of America},
- Date = {1992},
- Date-Added = {2009-05-25 16:33:01 +0100},
- Date-Modified = {2009-05-25 16:34:08 +0100},
- Editor = {Chrisopher Ricks and William L. Vance},
- Origdate = {1782},
- Pages = {24--26},
- Publisher = {Faber},
- Title = {Emigration to America}}
-
-@incollection{douglass00aa,
- Address = {New York},
- Author = {Frederick Douglass},
- Booktitle = {Slave Narratives},
- Date = {2000},
- Date-Added = {2009-05-25 16:21:38 +0100},
- Date-Modified = {2009-05-25 16:25:35 +0100},
- Editor = {William L. Andrews and Gates, Jr., Henry Louis},
- Entrysubtype = {book},
- Origdate = {1845},
- Pages = {267--368},
- Publisher = {Lib. of Amer.},
- Shorttitle = {Narrative},
- Title = {Narrative of the Life of Frederick Douglass, an American Slave, Written by Himself}}
-
-@incollection{witchcraft86aa,
- Address = {Flagstaff},
- Booksubtitle = {Tales from a Vanishing Culture},
- Booktitle = {The Hopi Way},
- Date = {1986},
- Date-Added = {2009-05-25 16:14:20 +0100},
- Date-Modified = {2009-06-15 21:06:19 -0400},
- Editor = {Mando Sevillano},
- Editortype = {compiler},
- Options = {useeditor=false},
- Pages = {33--42},
- Publisher = {Northland},
- Sorttitle = {Witchcraft Story},
- Title = {A Witchcraft Story}}
-
-@incollection{more97aa,
- Address = {Baltimore},
- Author = {Hannah More},
- Booktitle = {British Women Poets of the Romantic Era},
- Date = {1997},
- Date-Added = {2009-05-25 16:11:24 +0100},
- Date-Modified = {2009-05-25 16:13:40 +0100},
- Editor = {Paula R. Feldman},
- Pages = {472--482},
- Publisher = {Johns Hopkins UP},
- Subtitle = {A Poem},
- Title = {The Black Slave Trade}}
-
-@incollection{hanzlik92aa,
- Address = {Cheltenham},
- Author = {Josef Hanzl\'{i}k},
- Booktitle = {Interference: The Story of Czechoslovakia in the Words of its Writers},
- Date = {1992},
- Date-Added = {2009-05-25 16:06:43 +0100},
- Date-Modified = {2009-05-25 16:09:48 +0100},
- Editor = {Peter Spafford},
- Editortype = {compilerandeditor},
- Options = {uniquetranslator},
- Publisher = {New Clarion},
- Title = {Vengeance},
- Translator = {Ewald Osers}}
-
-@incollection{hansberry71aa,
- Address = {New York},
- Author = {Lorraine Hansberry},
- Booktitle = {Black Theater: A Twentieth-Century Collection of the Work of Its Best Playwrights},
- Date = {1971},
- Date-Added = {2009-05-25 15:45:41 +0100},
- Date-Modified = {2009-05-25 15:51:00 +0100},
- Editor = {Lindsay Patterson},
- Entrysubtype = {play},
- Pages = {221--276},
- Publisher = {Dodd},
- Shorttitle = {Raisin in the Sun},
- Title = {A Raisin in the Sun}}
-
-@incollection{franco98aa,
- Address = {Chicago},
- Author = {Veronica Franco},
- Booktitle = {Poems and Selected Letters},
- Date = {1998},
- Date-Added = {2009-05-25 15:41:45 +0100},
- Date-Modified = {2009-06-16 11:35:16 -0400},
- Editor = {Ann Rosalind Jones and Margaret F. Rosenthal},
- Pages = {35--37},
- Publisher = {U of Chicago P},
- Title = {To the Painter Jacopo Tintoretto},
- Translator = {Ann Rosalind Jones and Margaret F. Rosenthal}}
-
-@incollection{allende92aa,
- Author = {Isabel Allende},
- Crossref = {colchie92aa},
- Date-Added = {2009-05-25 09:37:20 +0100},
- Date-Modified = {2009-05-25 15:39:27 +0100},
- Options = {uniquetranslator},
- Pages = {83--88},
- Title = {Toad's Mouth},
- Translator = {Margaret Sayers Peden},
- Xref = {colchie92aa}}
-
-@collection{colchie92aa,
- Address = {New York},
- Booksubtitle = {Stories from Latin America},
- Booktitle = {A Hammock Beneath the Mangoes},
- Date = {1992},
- Date-Added = {2009-05-25 09:35:41 +0100},
- Date-Modified = {2009-05-25 11:49:06 +0100},
- Editor = {Thomas Colchie},
- Publisher = {Plume},
- Title = {A Hammock Beneath the Mangoes: Stories from Latin America},
- Translator = {Margaret Sayers Peden}}
-
-@book{public-agenda-foundation92aa,
- Address = {New York},
- Author = {{Public Agenda Foundation}},
- Booktitle = {The Health Care Crisis},
- Date = {1992},
- Date-Added = {2009-05-24 15:19:48 +0100},
- Date-Modified = {2009-05-24 15:20:24 +0100},
- Publisher = {McGraw},
- Subtitle = {Containing Costs, Expanding Coverage},
- Title = {The Health Care Crisis}}
-
-@book{national-research-council00aa,
- Address = {Washington},
- Author = {{National Research Council}},
- Booktitle = {Beyond Six Billion},
- Date = {2000},
- Date-Added = {2009-05-24 15:18:49 +0100},
- Date-Modified = {2009-05-24 15:19:33 +0100},
- Publisher = {Natl. Acad.},
- Subtitle = {Forecasting the World's Population},
- Title = {Beyond Six Billion}}
-
-@book{american-medical-association89aa,
- Address = {New York},
- Author = {{American Medical Association}},
- Booktitle = {The American Medical Association Encyclopedia of Medicine},
- Date = {1989},
- Date-Added = {2009-05-24 15:16:04 +0100},
- Date-Modified = {2009-05-24 15:17:02 +0100},
- Editor = {Charles B. Clayman},
- Publisher = {Random},
- Title = {The American Medical Association Encyclopedia of Medicine}}
-
-@collection{rabkin83aa,
- Address = {Carbondale},
- Booktitle = {No Place Else},
- Date = {1983},
- Date-Added = {2009-05-24 15:10:25 +0100},
- Date-Modified = {2009-05-24 15:11:36 +0100},
- Editor = {Eric S. Rabkin and Martin H. Greenberg and Joseph D. Olander},
- Publisher = {Southern Illinois UP},
- Subtitle = {Explorations in Utopian and Dystopian Fiction},
- Title = {No Place Else}}
-
-@book{marquart94aa,
- Address = {Austin},
- Author = {James W. Marquart and Sheldon Ekland Olson and Jonathan R. Sorensen},
- Booktitle = {The Rope, the Chair, and the Needle},
- Date = {1994},
- Date-Added = {2009-05-24 15:08:26 +0100},
- Date-Modified = {2009-05-24 15:10:01 +0100},
- Publisher = {U of Texas P},
- Shorttitle = {Rope, Chair, and Needle},
- Subtitle = {Capital Punishment in Texas, 1923--1990},
- Title = {The Rope, the Chair, and the Needle}}
-
-@collection{frye57ab,
- Address = {New York},
- Booktitle = {Sound and Poetry},
- Date = {1957},
- Date-Added = {2009-05-24 15:05:15 +0100},
- Date-Modified = {2009-05-24 15:06:05 +0100},
- Editor = {Northrop Frye},
- Publisher = {Columbia UP},
- Title = {Sound and Poetry}}
-
-@book{frye91aa,
- Address = {Toronto},
- Author = {Northrop Frye},
- Booktitle = {The Double Vision},
- Date = {1991},
- Date-Added = {2009-05-24 15:04:06 +0100},
- Date-Modified = {2009-05-24 15:05:01 +0100},
- Publisher = {U of Toronto P},
- Shorttitle = {Double Vision},
- Sorttitle = {Double Vision},
- Subtitle = {Language and Meaning in Religion},
- Title = {The Double Vision}}
-
-@collection{frye62aa,
- Address = {Toronto},
- Booktitle = {Design for Learning},
- Date = {1962},
- Date-Added = {2009-05-24 14:57:09 +0100},
- Date-Modified = {2009-05-24 14:58:25 +0100},
- Editor = {Northrop Frye},
- Publisher = {U of Toronto P},
- Subtitle = {Reports Submitted to the Joint Committee of the Toronto Board of Education and the University of Toronto},
- Title = {Design for Learning}}
-
-@collection{frye57aa,
- Address = {Princeton},
- Author = {Northrop Frye},
- Booktitle = {Anatomy of Criticism},
- Date = {1957},
- Date-Added = {2009-05-24 14:55:45 +0100},
- Date-Modified = {2009-05-24 14:56:40 +0100},
- Publisher = {Princeton UP},
- Subtitle = {Four Essays},
- Title = {Anatomy of Criticism}}
-
-@collection{weisser01aa,
- Address = {New York},
- Booktitle = {Women and Romance},
- Date = {2001},
- Date-Added = {2009-05-24 14:47:39 +0100},
- Date-Modified = {2009-05-24 14:55:37 +0100},
- Editor = {Susan Ostrov Weisser},
- Publisher = {New York UP},
- Subtitle = {A Reader},
- Title = {Women and Romance}}
-
-@book{spafford92aa,
- Address = {Cheltenham},
- Booktitle = {Interference},
- Date = {1992},
- Date-Added = {2009-05-24 14:37:08 +0100},
- Date-Modified = {2009-06-15 18:25:11 -0500},
- Editor = {Peter Spafford},
- Editortype = {compilerandeditor},
- Publisher = {New Clarion},
- Subtitle = {The Story of Czechoslovakia in the Words of Its Writers},
- Title = {Interference}}
-
-@book{sevillano86aa,
- Address = {Flagstaff},
- Booktitle = {The Hopi Way},
- Date = {1986},
- Date-Added = {2009-05-24 14:28:51 +0100},
- Date-Modified = {2009-05-24 14:30:39 +0100},
- Editor = {Mando Sevillano},
- Editortype = {compiler},
- Publisher = {Northland},
- Subtitle = {Tales from a Vanishing Culture},
- Title = {The Hopi Way}}
-
-@collection{gilbert01ab,
- Address = {New York},
- Booktitle = {Grand Ol' Time},
- Date = {2001},
- Date-Added = {2009-05-24 14:11:23 +0100},
- Date-Modified = {2009-05-24 14:16:55 +0100},
- Editor = {Goofy Dog and Puddy Tat and Mickey Mouse and Donald Duck},
- Options = {totalnames=false},
- Publisher = {Norton},
- Subtitle = {A Book of Elegies},
- Title = {Grand Ol' Time}}
-
-@book{tatar92aa,
- Address = {Princeton},
- Author = {Maria Tatar},
- Booktitle = {Off with Their Heads!},
- Date = {1992},
- Date-Added = {2009-05-24 14:07:48 +0100},
- Date-Modified = {2009-05-24 16:08:02 +0100},
- Publisher = {Princeton UP},
- Shorttitle = {Off with Their Heads!},
- Subtitle = {Fairy Tales and the Culture of Childhood},
- Title = {Off with Their Heads!}}
-
-@book{silver97aa,
- Address = {New York},
- Author = {Lee M. Silver},
- Booktitle = {Remaking Eden},
- Date = {1997},
- Date-Added = {2009-05-24 14:07:01 +0100},
- Date-Modified = {2009-05-24 14:07:36 +0100},
- Publisher = {Avon},
- Subtitle = {Cloning and Beyond in a Brave New World},
- Title = {Remaking Eden}}
-
-@book{rowling00aa,
- Address = {New York},
- Author = {J[oanne] K[athleen] Rowling},
- Booktitle = {Harry Potter and the Goblet of Fire},
- Date = {2000},
- Date-Added = {2009-05-24 14:05:45 +0100},
- Date-Modified = {2009-05-24 14:06:25 +0100},
- Publisher = {Levine-Scholastic},
- Title = {Harry Potter and the Goblet of Fire}}
-
-@book{lecarre01aa,
- Address = {New York},
- Author = {Le Carr\'{e}, John},
- Booktitle = {The Constant Gardner},
- Date = {2001},
- Date-Added = {2009-05-24 13:59:37 +0100},
- Date-Modified = {2009-05-25 16:47:46 +0100},
- Nameaddon = {David Cornwell},
- Options = {useprefix=true},
- Publisher = {Scribner's},
- Shorttitle = {Constant Gardner},
- Sorttitle = {Constant Gardner},
- Title = {The Constant Gardner}}
-
-@book{kurlansky02aa,
- Address = {New York},
- Author = {Mark Kurlansky},
- Booktitle = {Salt},
- Date = {2002},
- Date-Added = {2009-05-24 13:58:51 +0100},
- Date-Modified = {2009-05-24 13:59:22 +0100},
- Publisher = {Walker},
- Subtitle = {A World History},
- Title = {Salt}}
-
-@book{freedman84aa,
- Address = {New York},
- Author = {Richard R. Freedman},
- Booktitle = {What Do Unions Do?},
- Date = {1984},
- Date-Added = {2009-05-24 13:57:53 +0100},
- Date-Modified = {2009-05-24 13:58:20 +0100},
- Publisher = {Basic},
- Title = {What Do Unions Do?}}
-
-@book{berlage94aa,
- Address = {Westport},
- Author = {Gai Ingham Berlage},
- Booktitle = {Women in Baseball},
- Date = {1994},
- Date-Added = {2009-05-24 13:56:44 +0100},
- Date-Modified = {2009-05-24 13:57:37 +0100},
- Publisher = {Greenwood},
- Subtitle = {The Forgotten History},
- Title = {Women in Baseball}}
-
-@book{gilbert79aa,
- Address = {New Haven},
- Author = {Sandra M. Gilbert and Susan Gubar},
- Booktitle = {The Madwoman in the Attic},
- Date = {1979},
- Date-Added = {2009-05-24 13:27:39 +0100},
- Date-Modified = {2009-05-24 13:31:28 +0100},
- Publisher = {Yale UP},
- Shorttitle = {Madwoman in the Attic},
- Sorttitle = {Madwoman in the Attic},
- Subtitle = {The Woman Writer and the Nineteenth-Century Literary Imagination},
- Title = {The Madwoman in the Attic}}
-
-@collection{gilbert01aa,
- Address = {New York},
- Booktitle = {Inventions of Farewell},
- Date = {2001},
- Date-Added = {2009-05-24 13:26:30 +0100},
- Date-Modified = {2009-05-24 13:30:25 +0100},
- Editor = {Sandra M. Gilbert},
- Publisher = {Norton},
- Subtitle = {A Book of Elegies},
- Title = {Inventions of Farewell}}
-
-@collection{gilbert95aa,
- Address = {New York},
- Author = {Sandra M. Gilbert},
- Booktitle = {Ghost Volcano},
- Date = {1995},
- Date-Added = {2009-05-24 13:25:29 +0100},
- Date-Modified = {2009-05-24 13:26:26 +0100},
- Publisher = {Norton},
- Subtitle = {Poems},
- Title = {Ghost Volcano}}
-
-@book{durant77aa,
- Address = {New York},
- Author = {Will Durant and Ariel Durant},
- Booktitle = {A Dual Autobiography},
- Date = {1977},
- Date-Added = {2009-05-24 13:24:36 +0100},
- Date-Modified = {2009-05-24 13:31:47 +0100},
- Publisher = {Simon},
- Shorttitle = {Dual Autobiography},
- Sorttitle = {Dual Autobiography},
- Title = {A Dual Autobiography}}
-
-@book{durant65aa,
- Address = {New York},
- Author = {Will Durant and Ariel Durant},
- Booktitle = {The Age of Voltaire},
- Date = {1965},
- Date-Added = {2009-05-24 13:23:53 +0100},
- Date-Modified = {2009-05-24 13:31:38 +0100},
- Publisher = {Simon},
- Shorttitle = {Age of Voltaire},
- Sorttitle = {Age of Voltaire},
- Title = {The Age of Voltaire}}
-
-@book{gilman93ab,
- Address = {Berkeley, CA},
- Author = {Sander Gilman and Helen King and Roy Porter and George Rousseau and Elaine Showalter},
- Booktitle = {Hysteria beyond Freud},
- Date = {1993},
- Date-Added = {2009-05-24 12:35:28 +0100},
- Date-Modified = {2009-05-24 12:47:58 +0100},
- Options = {totalnames=true},
- Publisher = {U of California P},
- Shortauthor = {{Gilman, King, Porter, Rousseau, and Showalter}},
- Title = {Hysteria beyond Freud}}
-
-@book{gilman93aa,
- Address = {Berkeley, CA},
- Author = {Sander Gilman and Helen King and Roy Porter and George Rousseau and Elaine Showalter},
- Booktitle = {Hysteria beyond Freud},
- Date = {1993},
- Date-Added = {2009-05-24 12:34:30 +0100},
- Date-Modified = {2009-05-24 12:35:21 +0100},
- Publisher = {U of California P},
- Title = {Hysteria beyond Freud}}
-
-@book{quirk85ab,
- Address = {London},
- Author = {Randolph Quirk and Sidney Greenbaum and Geoffrey Leech and Jan Svartvik},
- Booktitle = {A Comprehensive Grammar of the English Language},
- Date = {1985},
- Date-Added = {2009-05-24 12:13:04 +0100},
- Date-Modified = {2009-05-24 13:32:02 +0100},
- Options = {totalnames=true},
- Publisher = {Longman},
- Shortauthor = {{Quirk, Greenbaum, Leech, and Svartvik}},
- Shorttitle = {Comprehensive Grammar},
- Sorttitle = {Comprehensive Grammar of the English},
- Title = {A Comprehensive Grammar of the English Language}}
-
-@book{quirk85aa,
- Address = {London},
- Author = {Randolph Quirk and Sidney Greenbaum and Geoffrey Leech and Jan Svartvik},
- Booktitle = {A Comprehensive Grammar of the English Language},
- Date = {1985},
- Date-Added = {2009-05-24 12:11:58 +0100},
- Date-Modified = {2009-05-24 13:32:08 +0100},
- Publisher = {Longman},
- Shorttitle = {Comprehensive Grammar},
- Sorttitle = {Comprehensive Grammar of the English},
- Title = {A Comprehensive Grammar of the English Language}}
-
-@book{hutcheon00aa,
- Address = {Lincoln},
- Author = {Linda Hutcheon and Michael Hutcheon},
- Booktitle = {Bodily Charm},
- Date = {2000},
- Date-Added = {2009-05-24 12:10:55 +0100},
- Date-Modified = {2009-05-24 12:11:31 +0100},
- Publisher = {U of Nebraska P},
- Subtitle = {Living Opera},
- Title = {Bodily Charm}}
-
-@book{eggins97aa,
- Address = {London},
- Author = {Suzanne Eggins and Diana Slade},
- Booktitle = {Analysing Casual Conversation},
- Date = {1997},
- Date-Added = {2009-05-24 12:09:54 +0100},
- Date-Modified = {2009-05-24 12:10:20 +0100},
- Publisher = {Cassell},
- Title = {Analysing Casual Conversation}}
-
-@collection{borroff63aa,
- Address = {Englewood Cliffs},
- Booktitle = {Wallace Stevens},
- Date = {1963},
- Date-Added = {2009-05-24 12:03:13 +0100},
- Date-Modified = {2009-05-24 12:06:05 +0100},
- Editor = {Marie Borroff},
- Publisher = {Prentice},
- Subtitle = {A Collection of Critical Essays},
- Title = {Wallace Stevens}}
-
-@book{borroff67aa,
- Address = {New York},
- Booktitle = {Sir Gawain and the Green Knight},
- Date = {1967},
- Date-Added = {2009-05-24 12:02:17 +0100},
- Date-Modified = {2009-05-24 12:05:41 +0100},
- Options = {usetranslator=true},
- Publisher = {Norton},
- Title = {Sir Gawain and the Green Knight},
- Translator = {Marie Borroff}}
-
-@book{borroff79aa,
- Address = {Chicago},
- Author = {Marie Borroff},
- Booktitle = {Language and the Past},
- Date = {1979},
- Date-Added = {2009-05-24 12:00:30 +0100},
- Date-Modified = {2009-05-24 12:02:16 +0100},
- Publisher = {U of Chicago P},
- Shorttitle = {Language and the Past},
- Subtitle = {Verbal Artistry in Frost, Stevens, and Moore},
- Title = {Language and the Past}}
-
-@collection{lopate94aa,
- Address = {New York},
- Booktitle = {The Art of the Personal Essay},
- Date = {1994},
- Date-Added = {2009-05-24 11:58:05 +0100},
- Date-Modified = {2009-05-24 13:32:22 +0100},
- Editor = {Phillip Lopate},
- Publisher = {Anchor-Doubleday},
- Shorttitle = {Art of the Personal Essay},
- Sorttitle = {Art of the Personal Essay},
- Subtitle = {An Anthology from the Classical Era to the Present},
- Title = {The Art of the Personal Essay}}
-
-@book{fukuyama02aa,
- Address = {New York},
- Author = {Francis Fukuyama},
- Booktitle = {Our Posthuman Future},
- Date = {2002},
- Date-Added = {2009-05-24 11:47:10 +0100},
- Date-Modified = {2009-05-24 11:49:41 +0100},
- Publisher = {Farrar},
- Shorttitle = {Our Posthuman Future},
- Subtitle = {Consequences of the Biotechnology Revolution},
- Title = {Our Posthuman Future}}
-
-@collection{baker86aa,
- Address = {New York},
- Booktitle = {The Norton Book of Light Verse},
- Date = {1986},
- Date-Added = {2009-06-17 07:15:34 -0400},
- Date-Modified = {2009-06-17 07:15:34 -0400},
- Editor = {Russell Baker},
- Publisher = {Norton},
- Shorttitle = {Norton}}
-
-@collection{baker93aa,
- Address = {New York},
- Booktitle = {Russell Baker's Book of American Humor},
- Date = {1993},
- Date-Added = {2009-06-17 07:15:34 -0400},
- Date-Modified = {2009-06-17 07:15:34 -0400},
- Editor = {Russell Baker},
- Publisher = {Norton},
- Shorttitle = {Russell Baker's Book}}
-
-@collection{oates2000aa,
- Address = {Boston},
- Booktitle = {The Best American Essays of the Century},
- Date = {2000},
- Date-Added = {2009-06-17 07:15:34 -0400},
- Date-Modified = {2010-02-12 11:24:53 -0600},
- Editor = {Joyce Carol Oates and Robert Atwan},
- Publisher = {Houghton},
- Sorttitle = {Best American Essays of the Century}}
-
-@comment{BibDesk Smart Groups{
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<array>
- <dict>
- <key>conditions</key>
- <array>
- <dict>
- <key>comparison</key>
- <integer>4</integer>
- <key>key</key>
- <string>Doublecheck</string>
- <key>value</key>
- <string>-</string>
- <key>version</key>
- <string>1</string>
- </dict>
- </array>
- <key>conjunction</key>
- <integer>0</integer>
- <key>group name</key>
- <string>Doublecheck</string>
- </dict>
- <dict>
- <key>conditions</key>
- <array>
- <dict>
- <key>comparison</key>
- <integer>0</integer>
- <key>key</key>
- <string>Date-Added</string>
- <key>value</key>
- <string></string>
- <key>version</key>
- <string>1</string>
- </dict>
- </array>
- <key>conjunction</key>
- <integer>0</integer>
- <key>group name</key>
- <string>today</string>
- </dict>
-</array>
-</plist>
-}}
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-mla/doc/samples.bib b/macros/latex/contrib/biblatex-contrib/biblatex-mla/doc/samples.bib
deleted file mode 100644
index 319cf90a07..0000000000
--- a/macros/latex/contrib/biblatex-contrib/biblatex-mla/doc/samples.bib
+++ /dev/null
@@ -1,661 +0,0 @@
-%% This BibTeX bibliography file was created using BibDesk.
-%% http://bibdesk.sourceforge.net/
-
-
-%% Created for James Clawson at 2011-09-27 00:26:36 -0500
-
-
-%% Saved with string encoding Western (ASCII)
-
-@book{morrison02aa,
- Address = {New York},
- Author = {Toni Morrison},
- Booktitle = {Sula},
- Date = {2002},
- Date-Added = {2009-07-23 13:09:43 -0400},
- Date-Modified = {2009-07-23 13:10:14 -0400},
- Origdate = {1973},
- Publisher = {Plume-Penguin},
- Title = {Sula}}
-
-@collection{frye57ab,
- Address = {New York},
- Booktitle = {Sound and Poetry},
- Date = {1957},
- Date-Added = {2009-05-24 15:05:15 +0100},
- Date-Modified = {2009-05-24 15:06:05 +0100},
- Editor = {Northrop Frye},
- Publisher = {Columbia University Press},
- Title = {Sound and Poetry}}
-
-@book{frye91aa,
- Address = {Toronto},
- Author = {Northrop Frye},
- Booksubtitle = {Language and Meaning in Religion},
- Booktitle = {The Double Vision},
- Date = {1991},
- Date-Added = {2009-05-24 15:04:06 +0100},
- Date-Modified = {2009-05-24 15:05:01 +0100},
- Publisher = {University of Toronto Press},
- Shorttitle = {Double Vision},
- Sorttitle = {Double Vision}}
-
-@article{Babich:2011dg,
- author = {Babich, L P and Kudryavtsev, A Yu and Kudryavtseva, M L and Kutsyk, I M},
- title = {Atmospheric gamma-ray and neutron flashes},
- journal = {Journal of Experimental and Theoretical Physics},
- date = {2011-02},
- volume = {106},
- number = {1},
- pages = {65--76},
- doi = {10.1134/S1063776108010056},
- language = {English},
- url = {http://link.springer.com/10.1134/S1063776108010056},
- urldate = {2013-03-30}}
-
-@online{shimabukuro2006aa,
- Annote = {This is the citation for a YouTube video. I found this source listed in the OWL Purdue MLA Formatting and Style Guide.},
- Author = {Jake Shimabukuro},
- Date = {2006-04-22},
- Maintitle = {YouTube},
- Publisher = {YouTube},
- Titleaddon = {Online video clip},
- Title = {Ukulele Weeps by Jake Shimabukuro},
- Url = {www.youtube.com/watch?v=puSkP3uym5k},
- Urldate = {2013-03-04}}
-
-@online{Grammar-Girl2008,
- Author = {{Grammar Girl}},
- Date = {2008-09-16},
- Date-Added = {2013-03-24 16:34:36 +0000},
- Date-Modified = {2013-03-24 16:41:10 +0000},
- Mainsubtitle = {Quick and Dirty Tips for Better Writing},
- Maintitle = {Grammar Girl},
- Nameaddon = {Mignon Fogarty},
- Publisher = {Macmillan},
- Title = {What Is the Plural of `Mouse'?},
- Url = {http://grammar.quickanddirtytips.com/the-plural-of-mouse.aspx},
- Urldate = {2013-03-04},
- Bdsk-Url-1 = {http://grammar.quickanddirtytips.com/the-plural-of-mouse.aspx}}
-
-@article{a,
- Author = {Larry Port},
- Journal = {Law Practice: The Business of Practicing Law},
- Number = {5},
- Pages = {18},
- Title = {Four Ways to Eliminate Procrastination},
- Url = {http://search.ebscohost.com/login.aspx?direct=true&db=a9h&AN=54459308&site=ehost-live},
- Urldate = {2011-09-08},
- Volume = {36},
- Year = {2010}}
-
-@periodical{appiah92aa,
- Annote = {This is the citation for a periodical entrytype. I found this source listed in the \emph{MLA Style Manual}.},
- Booktitle = {Critical Inquiry},
- Date-Added = {2008-10-20 14:15:43 +0100},
- Date-Modified = {2008-10-20 14:27:34 +0100},
- Editor = {Kwame Anthony Appiah and Gates, Jr., Henry Louis},
- Issuetitle = {Identities},
- Number = {4},
- Pages = {625--884.},
- Title = {Critical Inquiry},
- Volume = {18},
- Year = {1992}}
-
-@proceedings{smith09aa,
- Address = {Amsterdam},
- Annote = {This is the citation for a proceedings entrytype.},
- Booktitle = {What a Cool Booktitle!},
- Date-Added = {2008-10-20 13:52:39 +0100},
- Date-Modified = {2008-10-27 08:18:19 +0000},
- Editor = {Bob Smith},
- Eventtitle = {Cool Titles Conf.},
- Institution = {Hali\c{c} University},
- Organization = {Funny Little Society},
- Pages = {101-112},
- Publisher = {Rodopi},
- Title = {What a Cool Booktitle!},
- Urldate = {2008-04-17},
- Venue = {Istanbul},
- Year = {2009}}
-
-@unpublished{smithXXaa,
- Annote = {This is the citation for an unpublished entrytype. I found this source listed in the \emph{MLA Style Manual}.},
- Author = {Sonia Smith},
- Date-Added = {2008-10-20 11:57:22 +0100},
- Date-Modified = {2008-10-20 11:58:13 +0100},
- Note = {Unpublished essay, 1998},
- Title = {Shakespeare's Dark Lady Revisited}}
-
-@unpublished{twainXXaa,
- Annote = {This is the citation for an unpublished entrytype. I found this source listed in the \emph{MLA Style Manual}.},
- Author = {Mark Twain},
- Date-Added = {2008-10-20 11:54:52 +0100},
- Date-Modified = {2008-10-20 11:57:18 +0100},
- Library = {U of California},
- Location = {Berkeley},
- Note = {Mark Twain Papers},
- Titleaddon = {Notebook 32},
- Type = {typescript}}
-
-@unpublished{octovianXXaa,
- Annote = {This is the citation for an unpublished entrytype. I found this source listed in the \emph{MLA Style Manual}.},
- Booktitle = {Octovian},
- Date-Added = {2008-10-20 11:54:00 +0100},
- Date-Modified = {2008-10-20 12:12:41 +0100},
- Library = {Dean and Chapter Lib.},
- Location = {Lincolnshire, Eng.},
- Number = {91},
- Sorttitle = {Octovian},
- Type = {manuscript}}
-
-@unpublished{salviatiXXaa,
- Annote = {This is the citation for an unpublished entrytype. I found this source listed in the \emph{MLA Style Manual}.},
- Author = {Lionardo Salviati},
- Booktitle = {Poetica d'Aristotile parafrasata e comentata},
- Date-Added = {2008-10-20 11:51:04 +0100},
- Date-Modified = {2008-10-20 12:12:11 +0100},
- Library = {Biblioteca Nazionale Centrale},
- Location = {Firenze},
- Number = {2.2.11},
- Type = {manuscript}}
-
-@unpublished{chaucerXXaa,
- Annote = {This is the citation for an unpublished entrytype. I found this source listed in the \emph{MLA Style Manual}.},
- Author = {Geoffrey Chaucer},
- Booktitle = {The Canterbury Tales},
- Date-Added = {2008-10-20 11:49:22 +0100},
- Date-Modified = {2008-10-20 11:51:01 +0100},
- Library = {British Lib.},
- Location = {London},
- Number = {7334},
- Type = {Harley ms}}
-
-@phdthesis{webb80ab,
- Annote = {This is the citation for a phdthesis entrytype.},
- Author = {I. C. Webb},
- Date-Added = {2008-10-20 10:39:11 +0100},
- Date-Modified = {2008-10-20 10:59:54 +0100},
- Entrysubtype = {unpublished},
- Institution = {Correspondence Course State University},
- Location = {Somewhere, NB},
- Origyear = {1975},
- Publisher = {Routledge},
- Shorttitle = {MSc},
- Sorttitle = {MSc},
- Title = {An Unpublished Lic.~Phil.~Thesis},
- Type = {lic},
- Year = {1981}}
-
-@phdthesis{webb80aa,
- Annote = {This is the citation for a phdthesis entrytype.},
- Author = {I. C. Webb},
- Date-Added = {2008-10-20 10:33:40 +0100},
- Date-Modified = {2008-10-20 11:12:18 +0100},
- Entrysubtype = {published},
- Institution = {Correspondence Course State University},
- Location = {Somewhere, NB},
- Number = {4},
- Origyear = {1975},
- Publisher = {Routledge},
- Series = {Transnational Thought},
- Shorttitle = {MSc},
- Sorttitle = {MSc},
- Title = {A Published MSc Thesis},
- Type = {msc},
- Year = {1981}}
-
-@article{slinger07ab,
- Annote = {This is the citation for an article entrytype.},
- Author = {Mudd Slinger},
- Date = {2007-07-02},
- Date-Added = {2008-10-04 12:10:52 +0100},
- Date-Modified = {2008-10-04 12:40:18 +0100},
- Entrysubtype = {newspaper},
- Journal = {Copycat},
- Pages = {1-3},
- Shorttitle = {Sectional},
- Sorttitle = {Sectional 2},
- Title = {Sectional Sections with Numbers in Newspapers}}
-
-@article{slinger07aa,
- Annote = {This is the citation for an article entrytype.},
- Author = {Mudd Slinger},
- Chapter = {4},
- Date = {2007-06-27},
- Date-Added = {2008-10-04 11:48:09 +0100},
- Date-Modified = {2008-10-04 12:39:49 +0100},
- Entrysubtype = {newspaper},
- Journaltitle = {Zeitgeist},
- Location = {Albuquerque},
- Pages = {2-4},
- Shorttitle = {Sectional},
- Sorttitle = {Sectional 1},
- Title = {Sectional Sections with Numbers in Newspapers},
- Version = {natl. ed.}}
-
-@book{craig87aa,
- Address = {Aberdeen},
- Annote = {This is the citation for a book entrytype.},
- Author = {Craig, Cairns},
- Bookauthor = {Craig, Cairns},
- Date-Added = {2008-09-12 14:25:31 +0100},
- Date-Modified = {2008-09-12 14:26:29 +0100},
- Publisher = {Aberdeen UP},
- Title = {History of Scottish Literature},
- Volume = {2--3},
- Date = {1987/1988}}
-
-@book{gamer00aa,
- Address = {Cambridge},
- Annote = {This is the citation for a book entrytype.},
- Author = {Gamer, Michael},
- Date-Added = {2008-09-12 14:21:23 +0100},
- Date-Modified = {2008-09-12 14:22:14 +0100},
- Number = {40},
- Publisher = {Cambridge UP},
- Series = {Cambridge Studies in Romanticism},
- Title = {Romanticism and the Gothic: Genre, Reception, and Canon Formation},
- Year = {2000}}
-
-@article{makward95ab,
- Annote = {This is the citation for an article entrytype.},
- Author = {Christiane Makward},
- Date-Added = {2008-09-09 14:53:56 +0100},
- Date-Modified = {2008-10-04 11:42:47 +0100},
- Issuetitle = {Maryse Cond{\'e}},
- Journal = {Callaloo},
- Number = {3},
- Pages = {681--689},
- Shorttitle = {Reading},
- Title = {Reading Maryse Cond{\'e}'s Theater},
- Volume = {18},
- Year = {1995}}
-
-@article{makward95aa,
- Annote = {This is the citation for an article entrytype. I found this source listed in the \emph{MLA Style Manual}.},
- Author = {Christiane Makward},
- Date-Added = {2008-09-09 14:21:14 +0100},
- Date-Modified = {2008-10-04 11:59:19 +0100},
- Editor = {Delphine Perret and Marie-Denise Shelton},
- Issuetitle = {Maryse Cond{\'e}},
- Journal = {Callaloo},
- Number = {3},
- Pages = {681--689},
- Shorttitle = {Reading},
- Title = {Reading Maryse Cond{\'e}'s Theater},
- Volume = {18},
- Year = {1995}}
-
-@inreference{reference-noon89aa,
- Annote = {This is the citation for an inreference entrytype. I found this source listed in the \emph{MLA Style Manual}.},
- Booktitle = {The Oxford English Dictionary},
- Date-Added = {2008-05-08 14:08:17 +0100},
- Date-Modified = {2008-05-08 14:08:48 +0100},
- Edition = {2},
- Title = {Noon},
- Titleaddon = {Def.~4b},
- Year = {1989}}
-
-@inreference{reference-ginsburg02aa,
- Annote = {This is the citation for an inreference entrytype. I found this source listed in the \emph{MLA Style Manual}.},
- Booktitle = {Who's Who in Americana},
- Date-Added = {2008-05-08 14:03:36 +0100},
- Date-Modified = {2008-05-08 14:04:29 +0100},
- Edition = {56},
- Title = {Ginsburg, Ruth Bader},
- Year = {2002}}
-
-@inreference{mohanty87aa,
- Annote = {This is the citation for an inreference entrytype. I found this source listed in the \emph{MLA Style Manual}.},
- Author = {Jitendra M. Mohanty},
- Booktitle = {The New Encyclopaedia Britannica: Macropedia},
- Date-Added = {2008-05-08 14:08:17 +0100},
- Date-Modified = {2008-05-08 14:08:48 +0100},
- Edition = {15},
- Title = {Indian Philosophy},
- Year = {1987}}
-
-@booklet{washingtondc00aa,
- Annote = {This is the citation for a booklet entrytype. I found this source listed in the \emph{MLA Style Manual}.},
- Location = {New York},
- Publisher = {Trip Builder},
- Title = {Washington, DC},
- Year = {2000}}
-
-@booklet{renoir94aa,
- Annote = {This is the citation for a booklet entrytype. I found this source listed in the \emph{MLA Style Manual}.},
- Location = {New York},
- Publisher = {Dover},
- Title = {Renoir Lithographs},
- Year = {1994}}
-
-@video{capra01aa,
- Annote = {This is the citation for a video entrytype. I found this source listed in the \emph{MLA Style Manual}.},
- Date-Added = {2008-05-08 13:29:17 +0100},
- Date-Modified = {2008-10-20 19:05:07 +0100},
- Editor = {Frank Capra},
- Editortype = {director},
- Howpublished = {DVD},
- Namea = {James Stewart and Donna Read and Lionel Barrymore and Thomas Mitchell},
- Nameatype = {performers},
- Options = {useeditor=false},
- Origdate = {1946},
- Publisher = {Republic},
- Title = {It's a Wonderful Life},
- Year = {2001}}
-
-@video{jhabvala85aa,
- Annote = {This is the citation for a video entrytype. I found this source listed in the \emph{MLA Style Manual}.},
- Author = {Ruth Prawer Jhabvala},
- Authortype = {adaptor},
- Bookauthor = {E. M. Forster},
- Date-Added = {2008-05-08 13:29:17 +0100},
- Date-Modified = {2008-10-20 19:04:40 +0100},
- Editor = {James Ivory},
- Editortype = {director},
- Namea = {Ismail Merchant},
- Nameatype = {producer},
- Nameb = {Maggie Smith and Denholm Eliot and Helena Bonham Carter and Daniel Day-Lewis},
- Namebtype = {performers},
- Publisher = {Cinecom Intl.~Films},
- Title = {A Room with a View},
- Year = {1985}}
-
-@review{danish1972aa,
- Annote = {Listed here are examples of annotations listed within the Works Cited. This particular entry is the citation for a review entrytype. I found the source listed in the \emph{MLA Style Manual}.\par Define annotations in the .bib file, and call them with an option in the preamble. Indicate paragraph breaks using the ``par'' command.},
- Booktitle = {Anthology of Danish Literature},
- Date = {1972-07-07},
- Date-Added = {2008-05-05 12:05:33 +0100},
- Date-Modified = {2008-05-05 12:15:42 +0100},
- Editor = {F. J. Billeskov Jansen and P. M. Mitchell},
- Entrysubtype = {newspaper},
- Journaltitle = {Times Literary Supplement},
- Pages = {785},
- Sortname = {{Anthology of Danish Literature}}}
-
-@review{slater01aa,
- Annote = {This is the citation for a review entrytype.},
- Author = {Lisa Slater},
- Bookauthor = {Kim Scott},
- Booktitle = {Benang: From the Heart},
- Date = {2001},
- Date-Added = {2008-05-05 11:18:18 +0100},
- Date-Modified = {2008-05-05 11:21:01 +0100},
- Journaltitle = {Southerly},
- Number = {1},
- Pages = {224},
- Title = {\emph{Benang}: \mkbibquote{I found myself among Paper}},
- Volume = {61}}
-
-@incollection{haggis99aa,
- Annote = {This is the citation for an incollection entrytype.},
- Author = {Mary Haggis},
- Crossref = {reader99aa},
- Date-Added = {2007-08-14 12:55:28 +0100},
- Date-Modified = {2008-10-26 23:22:40 +0000},
- Origyear = {1965},
- Pages = {6-10},
- Title = {Another Article (Incollection) Cross-Reffing a Book}}
-
-@incollection{sampul99aa,
- Annote = {This is the citation for an incollection entrytype.},
- Author = {F. I. N. Al Sampul},
- Crossref = {reader99aa},
- Date-Added = {2007-08-14 12:54:53 +0100},
- Date-Modified = {2007-08-14 12:55:25 +0100},
- Pages = {1-5},
- Title = {An Article Crossref-ing a Collection}}
-
-@collection{reader99aa,
- Address = {Utopia, NB},
- Annote = {This is the citation for a collection entrytype.},
- Booktitle = {Book of Collected Things by Many People for Crossrefs},
- Date-Added = {2007-08-14 12:51:22 +0100},
- Date-Modified = {2007-08-14 13:10:32 +0100},
- Editor = {Ima G. Reader},
- Publisher = {Publishers, Ltd.},
- Shorttitle = {Book of Collected},
- Title = {Book of Collected Things by Many People for Crossrefs},
- Year = {1999}}
-
-@incollection{example99aa,
- Annote = {This is the citation for an incollection entrytype.},
- Author = {Anna Other Example},
- Crossref = {public99ac},
- Date-Added = {2007-08-14 12:49:19 +0100},
- Date-Modified = {2007-08-14 12:51:16 +0100},
- Pages = {105-195},
- Shorttitle = {Incollection},
- Title = {Incollection Template},
- Volume = {1}}
-
-@incollection{example99ab,
- Annote = {This is the citation for an incollection entrytype.},
- Author = {Anna Other Example},
- Crossref = {public99ac},
- Date-Added = {2007-08-14 12:49:19 +0100},
- Date-Modified = {2007-08-14 12:51:16 +0100},
- Pages = {275-301},
- Shorttitle = {Yet Another},
- Title = {Yet Another Crossref Work},
- Volume = {1}}
-
-@thesis{webb84aa,
- Address = {Somewhere, NB},
- Annote = {This is the citation for a thesis entrytype.},
- Author = {I. C. Webb},
- Date-Added = {2007-08-14 12:48:08 +0100},
- Date-Modified = {2008-10-04 11:07:25 +0100},
- Note = {Nota bene},
- School = {Correspondence Course State University},
- Sorttitle = {Masters},
- Title = {The Masters Thesis Template},
- Titleaddon = {Nota bene},
- Type = {msc},
- Year = {1984}}
-
-@thesis{webb81aa,
- Address = {Somewhere, NB},
- Annote = {This is the citation for a thesis entrytype.},
- Author = {I. C. Webb},
- Date-Added = {2007-08-14 12:46:19 +0100},
- Date-Modified = {2007-08-22 08:57:18 +0100},
- School = {Correspondence Course State University},
- Shorttitle = {PhD},
- Sorttitle = {PhD},
- Title = {A PhD Dissertation Template},
- Type = {phd},
- Year = {1981}}
-
-@article{webb83aa,
- Annote = {This is the citation for an article entrytype.},
- Author = {I. C. Webb},
- Date-Added = {2008-01-29 12:44:36 +0100},
- Date-Modified = {2008-01-29 13:13:08 +0100},
- Journal = {Online Studies},
- Number = {1},
- Shorttitle = {Online},
- Title = {Online Article Template with Access Date},
- Url = {www.example.com/webb1983},
- Urldate = {2007-11-22},
- Volume = {9},
- Year = {1983},
- Bdsk-Url-1 = {www.example.com/webb1983}}
-
-@article{askme06aa,
- Annote = {This is the citation for an article entrytype.},
- Author = {Donna Askme},
- Date-Added = {2007-08-14 12:43:03 +0100},
- Date-Modified = {2007-08-14 12:44:20 +0100},
- Journal = {Journal of Translated Articles},
- Month = {9},
- Pages = {12-19},
- Shorttitle = {Elaborate},
- Title = {Elaborate Article},
- Translator = {Minnie Tongues},
- Volume = {29},
- Year = {2006}}
-
-@article{askme92aa,
- Annote = {This is the citation for an article entrytype.},
- Author = {Donna Askme},
- Journal = {Journal of Pseudonyms},
- Nameaddon = {Donnatella},
- Number = {1},
- Pages = {314--329},
- Shorttitle = {Unique},
- Title = {Unique Pseudonymity},
- Volume = {4},
- Year = {1992}}
-
-@article{taskme06aa,
- Annote = {This is the citation for an article entrytype.},
- Author = {Donna Taskme},
- Date-Added = {2007-08-14 12:43:03 +0100},
- Date-Modified = {2007-08-14 12:44:20 +0100},
- Journal = {Journal of Translated Articles},
- Month = {9},
- Pages = {12-19},
- Shorthand = {EA},
- Shorttitle = {Elaborate Article},
- Title = {Elaborate Article with Shorthand},
- Translator = {Minnie Tongues},
- Volume = {29},
- Year = {2006}}
-
-@article{taskme07aa,
- Annote = {This is the citation for an article entrytype.},
- Author = {Donna Taskme},
- Date-Added = {2007-08-14 12:43:03 +0100},
- Date-Modified = {2007-08-14 12:44:20 +0100},
- Journal = {Journal of Translated Articles},
- Month = {9},
- Pages = {12-19},
- Shorttitle = {Simple Article},
- Title = {Simple Article without Shorthand},
- Translator = {Minnie Tongues},
- Volume = {29},
- Year = {2007}}
-
-@article{doe05aa,
- Annote = {This is the citation for an article entrytype.},
- Author = {Jane Doe},
- Date-Added = {2007-08-14 12:41:58 +0100},
- Date-Modified = {2007-08-14 12:42:46 +0100},
- Journal = {General Studies},
- Number = {4},
- Pages = {12-45},
- Shorttitle = {Default},
- Title = {Default Article Template},
- Volume = {4},
- Year = {2005}}
-
-@article{slinger02aa,
- Annote = {This is the citation for an article entrytype.},
- Author = {Mudd Slinger},
- Date = {2002-10-13},
- Date-Added = {2007-08-14 12:41:58 +0100},
- Date-Modified = {2008-10-04 11:52:12 +0100},
- Entrysubtype = {newspaper},
- Journal = {Daily Newspaper},
- Location = {Toronto},
- Pages = {B1+},
- Shorttitle = {Newspaper},
- Title = {Newspaper Article},
- Version = {late ed.}}
-
-@book{public08aa,
- Address = {Hello, HI},
- Annote = {This is the citation for a book entrytype.},
- Author = {John Q. Public},
- Booktitle = {Absolutely Elaborate Book Template},
- Date-Added = {2007-08-14 12:39:11 +0100},
- Date-Modified = {2007-08-14 12:41:55 +0100},
- Edition = {9},
- Editor = {Ima G. Reader},
- Number = {4},
- Origyear = {2007},
- Publisher = {Publishers Unlimited},
- Series = {Elaborate Book Template Series},
- Shorttitle = {Elaborate},
- Title = {Absolutely Elaborate Book Template},
- Translator = {Minnie Tongues},
- Year = {2008}}
-
-@book{octovian86aa,
- Address = {London},
- Annote = {This is the citation for a book entrytype. I found this source listed in the \emph{MLA Style Manual}.},
- Editor = {Frances McSparran},
- Number = {289},
- Options = {useeditor=false},
- Publisher = {Oxford UP},
- Series = {Early English Text Soc.},
- Title = {Octovian},
- Year = {1986}}
-
-@incollection{beowulf06aa,
- Address = {New York},
- Annote = {This is the citation for an incollection entrytype.},
- Booktitle = {The Norton Anthology of English Literature},
- Edition = {8},
- Editor = {Stephen Greenblatt and M. H. Abrams and Carol T. Christ and Alfred David and Barbara K. Lewalski and Lawrence Lipking and George M. Logan and Deidre Shauna Lynch},
- Options = {useeditor=false},
- Pages = {34-100},
- Publisher = {W. W. Norton},
- Title = {Beowulf},
- Volume = {1},
- Year = {2006}}
-
-@collection{public99ac,
- Address = {Utopia, NB},
- Annote = {This is the citation for a collection entrytype.},
- Booktitle = {My Favorite Things},
- Date-Added = {2007-08-14 12:49:19 +0100},
- Date-Modified = {2007-08-14 12:51:16 +0100},
- Editor = {John Q. Public},
- Publisher = {Publishers, Ltd.},
- Shorttitle = {Collected},
- Title = {Collected Poems},
- Volume = {1},
- Year = {1999}}
-
-@book{public08ab,
- Address = {Hello, HI},
- Annote = {This is the citation for a book entrytype.},
- Author = {John Q. Public and Mimi Moi},
- Booktitle = {Multi-Authored, More Elaborate Book Template},
- Edition = {9},
- Editor = {Ima G. Reader},
- Number = {4},
- Publisher = {Publishers Unlimited},
- Series = {Elaborate Book Template Series},
- Shorttitle = {Multi-Elaborate},
- Title = {Multi-Authored, More Elaborate Book Template},
- Translator = {Minnie Tongues},
- Year = {2008}}
-
-@book{coulson64aa,
- Address = {New York},
- Annote = {This is the citation for a book entrytype. I found this source listed in the \emph{MLA Style Manual}.},
- Author = {Feodor Dostoevsky},
- Date-Modified = {2008-10-26 17:52:29 +0000},
- Editor = {George Gibian},
- Options = {useauthor=false,useeditor=false,usetranslator=true},
- Publisher = {Norton},
- Sorttitle = {Coulson, Jessie},
- Title = {Crime and Punishment},
- Translator = {Jessie Coulson},
- Year = {1964}}
-
-@book{public07aa,
- Address = {Anywhere, NB},
- Annote = {This is the citation for a book entrytype.},
- Author = {John Q. Public},
- Booktitle = {Default Book Template},
- Date-Added = {2007-08-14 12:37:30 +0100},
- Date-Modified = {2007-08-14 12:39:01 +0100},
- Publisher = {Publishers, Ltd.},
- Shorttitle = {Default},
- Title = {Default Book Template},
- Year = {2007}}
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-mla/english-mla.lbx b/macros/latex/contrib/biblatex-contrib/biblatex-mla/english-mla.lbx
index 1e98c7d73c..9246682fc5 100644
--- a/macros/latex/contrib/biblatex-contrib/biblatex-mla/english-mla.lbx
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-mla/english-mla.lbx
@@ -1,6 +1,6 @@
-% english-mla.lbx v0.4.5 2013/03/24
+% english-mla.lbx v2.0 2021/05/12
-\ProvidesFile{english-mla.lbx}[2013/03/24 v0.4.5 biblatex style localization]
+\ProvidesFile{english-mla.lbx}[2021/05/12 v2.0 biblatex style localization]
\InheritBibliographyExtras{english}
\DeclareBibliographyExtras{%
@@ -13,17 +13,17 @@
{}
{\mkbibmonth{\thefield{#2}}%
\iffieldundef{#1}{}{\space}}%
- \mkdatezeros{\thefield{#1}}}%
+ \mkyearzeros{\thefield{#1}}}%
\protected\def\mkbibdateshort#1#2#3{%
\iffieldundef{#3}
{}
- {\mkdatezeros{\thefield{#3}}%
+ {\mkdayzeros{\thefield{#3}}%
\iffieldundef{#2}{}{/}}%
\iffieldundef{#2}
{}
- {\mkdatezeros{\thefield{#2}}%
+ {\mkmonthzeros{\thefield{#2}}%
\iffieldundef{#1}{}{/}}%
- \mkdatezeros{\thefield{#1}}}%
+ \mkyearzeros{\thefield{#1}}}%
}
\DeclareBibliographyStrings{%
@@ -31,21 +31,21 @@
bibliography = {{Works Cited}{Works Cited}},
references = {{Works Cited}{Works Cited}},
compilerandeditor = {{compiler and editor}{comp\adddotspace and ed\adddot}},% 0.95
- bycompilerandeditor = {{compiled and edited by}{comp\adddotspace and ed\adddot}},% 0.95
+ bycompilerandeditor = {{compiled and edited by}{compiled and edited by}},% 0.95
% typecompilerandeditor = {{compiler and editor}{comp\adddotspace and ed\adddot}},% 0.7
% bytypecompilerandeditor = {{compiled and edited by}{comp\adddotspace and ed\adddot}},% 0.7
% typegeneraleditor = {{general editor}{gen\adddotspace ed\adddot}},% 0.7.1
% bytypegeneraleditor = {{general editor}{gen\adddotspace ed\adddot}},% 0.7.1
- generaleditor = {{general editor}{gen\adddotspace ed\adddot}},
+ generaleditor = {{gen\adddot ed\adddot}{general editor}},
bytranslator = {{translated by}{translated by}},
byeditor = {{edited by}{edited by}},
% byserieseditor = {{general editor}{general editor}},% not used?
% page = {{\unskip}{\unskip}},
% pages = {{\unskip}{\unskip}},
- byeditortr = {{ed\adddotspace and trans\adddot}{ed\adddotspace and trans\adddot}},
+ byeditortr = {{ed\adddotspace and trans\adddot}{edited and translated}},
byeditorco = {{ed\adddotspace and comm\adddot}{ed\adddotspace and comm\adddot}},
byeditoran = {{ed\adddotspace and annot\adddot}{ed\adddotspace and annot\adddot}},
- byeditorin = {{ed\adddotspace and introd\adddot}{ed\adddotspace and introd\adddot}},
+ byeditorin = {{ed\adddotspace and introd\adddot}{edited and introduced by}},
byeditorfo = {{ed\adddotspace and forew\adddot}{ed\adddotspace and forew\adddot}},
byeditoraf = {{ed\adddotspace and afterw\adddot}{ed\adddotspace and afterw\adddot}},
byeditortrco = {{ed, trans\adddot, and comm\adddot}{ed, trans\adddot, and comm\adddot}},
@@ -76,10 +76,11 @@
bytranslatoranin = {{trans\adddot, annot\adddot, and introd\adddot}{trans\adddot, annot\adddot, and introd\adddot}},
bytranslatoranfo = {{trans\adddot, annot\adddot, and forew\adddot}{trans\adddot, annot\adddot, and forew\adddot}},
bytranslatoranaf = {{trans\adddot, annot\adddot, and afterw\adddot}{trans\adddot, annot\adddot, and afterw\adddot}},
+ circa = {{ca\adddot}{circa}},
newseries = {{ns}{ns}},
oldseries = {{os}{os}},
reprintof = {{reprint of}{rpt\adddotspace of}},% 0.7.1 fixed
- phdthesis = {{Diss\adddot}{Diss\adddot}},
+ phdthesis = {{PhD dissertation}{PhD dissertation}},
reviewof = {{rev\adddotspace of}{rev\adddotspace of}},
specissue = {{spec\adddot\addspace issue of}{spec\adddot\addspace issue of}},
section = {{sec\adddot}{sec\adddot}},
@@ -88,16 +89,27 @@
withintroduction = {{introd\adddot}{introd\adddot}},
withforeword = {{forew\adddot}{forew\adddot}},
withafterword = {{afterw\adddot}{afterw\adddot}},
- phd = {{Diss\adddot}{Diss\adddot}},
- dphil = {{Diss\adddot}{Diss\adddot}},
+ phd = {{PhD dissertation}{PhD dissertation}},
+ dphil = {{DPhil dissertation}{DPhil dissertation}},
lic = {{Licentiate thesis}{Licentiate thesis}},
- ma = {{{MA}\adddotspace thesis}{{MA}\adddotspace thesis}},
- ms = {{{MS}\adddotspace thesis}{{MS}\adddotspace thesis}},
- msc = {{{MS}c\adddotspace thesis}{{MS}c\adddotspace thesis}},
- mphil = {{{MP}hil\adddotspace thesis}{{MP}hil\adddotspace thesis}},
- mlitt = {{{ML}itt\adddotspace thesis}{{ML}itt\adddotspace thesis}},
- manuscript = {{ms\adddot}{ms\adddot}},
- typescript = {{ts\adddot}{ts\adddot}},
+ ma = {{{MA} thesis}{{MA} thesis}},
+ ms = {{{MS} thesis}{{MS} thesis}},
+ msc = {{{MS}c thesis}{{MS}c thesis}},
+ mphil = {{{MP}hil thesis}{{MP}hil thesis}},
+ mlitt = {{{ML}itt thesis}{{ML}itt thesis}},
+ manuscript = {{manuscript}{manuscript}},
+ patentde = {{Deutsches Patent- und Markenamt}{DE}},
+ patenteu = {{European Patent Office}{EU}},
+ patentfr = {{Institut National de la Propriété Industrielle}{FR}},
+ patentuk = {{The Intellectual Property Office of the United Kingdom}{UK}},
+ patentus = {{United States Patent and Trademark Office}{US}},
+ % 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 = {{Institut National de la Propriété Industrielle}{FR 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}},
+ typescript = {{typescript}{typescript}},
director = {{dir\adddot}{dir\adddot}},
screenplay = {{adapt\adddot}{adapt\adddot}},
adaptation = {{adapt\adddot}{adapt\adddot}},
@@ -139,4 +151,4 @@
%
% regex for find and replace (moving from mla.bbx to localized modules)
% find: {(.*?)},
-% replace: {{$1}{$1}}, \ No newline at end of file
+% replace: {{$1}{$1}},
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-mla/italian-mla.lbx b/macros/latex/contrib/biblatex-contrib/biblatex-mla/italian-mla.lbx
index 46a0dae504..20aee0c0ec 100644
--- a/macros/latex/contrib/biblatex-contrib/biblatex-mla/italian-mla.lbx
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-mla/italian-mla.lbx
@@ -1,9 +1,10 @@
-% italian-mla.lbx v0.1.5 2013/03/24
+% italian-mla.lbx v0.1.6 2021/06/08
%
% Italian localization in this file provided by Andrea Marchitelli.
% Abbreviations taken, whenever possible, from Italian Cataloguing Rules
+% Updated inexpertly by a non-native speaker many years later.
-\ProvidesFile{italian-mla.lbx}[2013/03/24 v0.1.5 biblatex style localization]
+\ProvidesFile{italian-mla.lbx}[2021/06/08 v0.1.6 biblatex style localization]
\InheritBibliographyExtras{italian}
@@ -17,17 +18,17 @@
{}
{\mkbibmonth{\thefield{#2}}%
\iffieldundef{#1}{}{\space}}%
- \mkdatezeros{\thefield{#1}}}%
+ \mkyearzeros{\thefield{#1}}}%
\protected\def\mkbibdateshort#1#2#3{%
\iffieldundef{#3}
{}
- {\mkdatezeros{\thefield{#3}}%
+ {\mkdayzeros{\thefield{#3}}%
\iffieldundef{#2}{}{/}}%
\iffieldundef{#2}
{}
- {\mkdatezeros{\thefield{#2}}%
+ {\mkmonthzeros{\thefield{#2}}%
\iffieldundef{#1}{}{/}}%
- \mkdatezeros{\thefield{#1}}}%
+ \mkyearzeros{\thefield{#1}}}%
}
\DeclareBibliographyStrings{%
@@ -90,24 +91,43 @@
msc = {{MSc\addabbrvspace tesis}{MSc\addabbrvspace tesis}},% 0.6
mphil = {{MPhil\addabbrvspace tesis}{MPhil\addabbrvspace tesis}},% 0.6
mlitt = {{MLitt\addabbrvspace tesis}{MLitt\addabbrvspace tesis}},% 0.6
- manuscript = {{manoscritto}{ms\adddot}},
- typescript = {{dattiloscritto}{datt\adddot}},
- director = {{regista}{reg\adddot}},
- screenplay = {{sceneggiatura\adddot}{scen\adddot}},
+ manuscript = {{manoscritto}{manoscritto}},
+ typescript = {{dattiloscritto}{dattiloscritto}},
+ director = {{regista}{regista}},
+ screenplay = {{sceneggiatura}{scen\adddot}},
adaptation = {{adattamento}{adatt\adddot}},
- adaptor = {{adatt\adddot}{adapt\adddot}},%
+ adaptor = {{adatt\adddot}{adatt\adddot}},%
% performer = {{perf\adddot}{perf\adddot}},%
% performers = {{perf\adddot}{perf\adddot}},%
% composer = {{compositore}{compositore}},
% composedby = {{composto~da}{composto~da}},%
% producer = {{produttore}{produttore}},
with = {{con}{con}},
- proceedings = {{atti}{atti}},% FIXME
+ proceedings = {{atti}{atti}},
bycompiler = {{compilato da}{comp\addotspace da}},
print = {{a stampa}{a stampa}},% 0.9
- web = {{online}{online}},% 0.9
- transof = {{traduzione di}{trad\adddotspace di}},% 0.7
- reprintof = {{ristampa di}{rpt\adddotspace of}},% 0.7.1 fixed
+ web = {{web}{web}},% 2.0 changed
+ transof = {{traduzione di}{traduzione di},
+ reprintof = {{ristampa di}{rpt\adddotspace of}},
+ % FIXME 2.0 check the following for quality of Italian translation
+ patentde = {{Deutsches Patent- und Markenamt}{DE}},% localised in German
+ patenteu = {{Ufficio europeo dei brevetti}{EU}},
+ patentfr = {{Institut National de la Propriété Industrielle}{FR}},% localised in French
+ patentuk = {{The Intellectual Property Office of the United Kingdom}{UK}},% localised in English
+ patentus = {{United States Patent and Trademark Office}{US}},% localised in English
+ % 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 = {{Institut National de la Propriété Industrielle}{FR 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}},
+ performer = {{artista}{artista},
+ performers = {{art\adddot}{art\adddot},
+ composer = {{comp\adddot}{comp\adddot}},
+ composedby = {{composto~da}{composto~da}},
+ producer = {{prod\adddot}{prod\adddot}},
+ volstodate = {{volumi fino ad oggi}{volumi fino ad oggi}},
+ supptotitle = {{a}{a}},
}
-\endinput \ No newline at end of file
+\endinput
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-mla/mla-footnotes.cbx b/macros/latex/contrib/biblatex-contrib/biblatex-mla/mla-footnotes.cbx
new file mode 100644
index 0000000000..ff89a9212f
--- /dev/null
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-mla/mla-footnotes.cbx
@@ -0,0 +1,434 @@
+% This cbx file does not supply a stand-alone type. Rather, these functions are separated in order to simplify maintenance of the main mla-strict.cbx file, since the MLA Handbook no longer advises on ways to style full bibliographic information in the footnote. To use MLA-style footnotes, please set your style to "mla" or "mla-strict" and add the option "autocite=footnote".
+\ProvidesFile{mla-footnotes.cbx}[2021/05/12 v2.0 biblatex citation style]
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%% Format Declarations %%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\@ifpackagelater{biblatex}{2016/03/01}{%
+ \DeclareNameFormat{cite:foot:editor}{%
+ \nameparts{#1}%
+ \usebibmacro{name:given-family}{\namepartfamily}{\namepartgiven}{\namepartprefix}{\partnamesuffix}%
+ \usebibmacro{name:andothers}}%
+ \DeclareNameFormat{cite:foot:translator}{%
+ \nameparts{#1}%
+ \usebibmacro{name:given-family}{\namepartfamily}{\namepartgiven}{\namepartprefix}{\partnamesuffix}%
+ \usebibmacro{name:andothers}}%
+}{%
+ \DeclareNameFormat{cite:foot:editor}{%
+ \usebibmacro{name:first-last}{#1}{#3}{#5}{#7}%
+ \usebibmacro{name:andothers}}%
+ \DeclareNameFormat{cite:foot:translator}{%
+ \usebibmacro{name:first-last}{#1}{#3}{#5}{#7}%
+ \usebibmacro{name:andothers}}%
+}%
+\DeclareFieldFormat{foot:cite:edition:format}{%
+ \ifinteger{#1}%
+ {\mkbibordinal{#1}~\bibstring{edition}}%
+ {\printtext[mla:lowercase]{#1}}}
+\DeclareFieldFormat{supptotitle}%
+ {\bibstring{supptotitle}\addspace\mkbibemph{#1}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%% Footnote Definitions %%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\newbibmacro*{cite:mla:foot}{%
+ \ifciteseen%
+ {\usebibmacro{cite:mla:seen}}%
+ {\ifbool{cbx@nofullfootnote}%
+ {\usebibmacro{cite:mla:seen}}%
+ {\usedriver{}{footcite:\strfield{entrytype}}}%
+ }}
+
+\newbibmacro*{cite:foot:name}{%
+ \global\boolfalse{cbx@named}%
+ \usebibmacro{cite:foot:author/editor}%
+ \savefield{namehash}{\cbx@lasthash}}%
+
+\newbibmacro*{cite:foot:author:review}{%
+ \global\boolfalse{cbx@named}%
+ \ifnameundef{author}%
+ {}%
+ {\usebibmacro{cite:foot:author}%
+ \savefield{namehash}{\cbx@lasthash}%
+ \global\booltrue{cbx@named}%
+ }}%
+
+\newbibmacro*{cite:foot:author/editor}%
+{\ifthenelse{\ifuseauthor\AND\NOT\ifnameundef{author}}%
+ {\usebibmacro{cite:foot:author}}%
+ {\usebibmacro{cite:foot:editor}}}%
+
+\newbibmacro*{cite:foot:author}{%
+ \ifbool{bbx@totalnames}%
+ {\printnames[byauthor][-\value{listtotal}]{author}}%
+ {\printnames[byauthor]{author}}%
+ \clearname{author}\global\booltrue{cbx@named}%
+ \printfield{nameaddon}}
+
+\newbibmacro*{cite:foot:editor}{%
+ \ifthenelse{\ifuseeditor\AND\NOT\ifnameundef{editor}}%
+ {\ifbool{bbx@totalnames}%
+ {\printnames[byeditor][[-\value{listtotal}]]{editor}}%
+ {\printnames[byeditor]{editor}}%
+ \setunit*{\addcomma\space}%
+ \usebibmacro{editorstrg}%
+ \clearname{editor}\global\booltrue{cbx@named}}%
+ {\ifusetranslator%
+ {\printnames[byeditor]{translator}%
+ \setunit*{\addcomma\space}%
+ \usebibmacro{translatorstrg}%
+ \clearname{translator}\global\booltrue{cbx@named}}%
+ {}%
+ }}%
+
+\newbibmacro*{cite:foot:byauthor:incollection}{%
+ \ifthenelse{\ifuseauthor\OR%
+ \ifnameundef{author}\OR%
+ \ifnamesequal{author}{bookauthor}}%
+ {}%
+ {\biblcstring{byauthor}\addspace%
+ \printnames[byauthor]{author}}}
+
+\newbibmacro*{cite:foot:byauthor}{%
+ \ifthenelse{\ifuseauthor\OR%
+ \ifnameundef{author}}%
+ {}%
+ {\bibstring{byauthor}\addspace\printnames[byauthor]{author}}}
+
+\newbibmacro*{cite:foot:bybookauthor}{%
+ \ifthenelse{\ifnameundef{bookauthor}\OR%
+ \(\ifnamesequal{author}{bookauthor}\AND\ifuseauthor\)\OR%
+ \iffieldequalstr{entrytype}{inbook}}%
+ {}%
+ {\bibstring{byauthor}\addspace\printnames[byauthor]{bookauthor}}}
+
+\DeclareBibliographyDriver{footcite:booklet}{%
+ \usedriver{}{footcite:book}}
+
+\DeclareBibliographyDriver{footcite:mvbook}{%
+ \usedriver{}{footcite:book}}
+
+\DeclareBibliographyDriver{footcite:collection}{%
+ \usedriver{}{footcite:book}}
+
+\DeclareBibliographyDriver{footcite:reference}{%
+ \usedriver{}{footcite:book}}
+
+\DeclareBibliographyDriver{footcite:book}{%
+ \usebibmacro{cite:foot:name}%
+ \ifbool{cbx@named}% 0.7.1
+ {\setunit{\newunitpunct}}%
+ {\setunit{}}%
+ \usebibmacro{cite:foot:title}%
+ \newunit%
+ \usebibmacro{cite:foot:byauthor}%
+ \newunit%
+ \usebibmacro{cite:foot:byeditor}%
+ \newunit%
+ \usebibmacro{cite:foot:bytranslator}%
+ \newunit%
+ \printfield{edition}%
+ \newunit%
+ \iffieldundef{maintitle}%
+ {\printfield{volume}%
+ \printfield{part}}%
+ {}%
+ \newunit%
+ \printfield{volumes}%
+ \newunit%
+ \usebibmacro{series+number}%
+ \setunit{\addspace}%
+ \usebibmacro{cite:foot:publisher+location+year}}
+
+\newbibmacro*{cite:foot:publisher+location+year}{%
+ \printtext[parens]{%
+ \printfield[noformat]{origyear}%
+ \setunit*{\addsemicolon\addspace}%
+ \printlist{location}%
+ \iflistundef{publisher}%
+ {\setunit*{\addspace}}%
+ {\setunit*{\addcolon\space}}%
+ \printlist{publisher}%
+ \newunit%
+ \printfield{year}}}
+
+\DeclareBibliographyDriver{footcite:article}{%
+ \usebibmacro{cite:foot:name}%
+ \newunit%
+ \usebibmacro{cite:foot:title}%
+ \newunit%
+ \usebibmacro{cite:foot:byauthor:incollection}%
+ \newunit%
+ \usebibmacro{cite:foot:bytranslator}%
+ \newunit%
+ \usebibmacro{journal+issuetitle}%
+ \newunit%
+ \iffieldundef{url}{}{\usebibmacro{cite:foot:url+urldate}}%
+ \setunit{\addcolon\addspace}%
+ \iffieldundef{postnote}%
+ {\printfield{pages}}%
+ {}}%
+
+\newbibmacro*{cite:foot:url+urldate}{%
+ \printtext{\biburldatelong}%
+ \setunit{\addspace}%
+ \printfield{url}}
+
+\DeclareBibliographyDriver{footcite:inreference}{%
+ \usedriver{}{footcite:incollection}}
+
+\DeclareBibliographyDriver{footcite:inbook}{%
+ \usedriver{}{footcite:incollection}}
+
+\DeclareBibliographyDriver{footcite:incollection}{%
+ \usebibmacro{cite:foot:name}%
+ \ifbool{cbx@named}% 0.7.1
+ {\setunit{\newunitpunct}}%
+ {\setunit{}}%
+ \ifthenelse{%
+ \iffieldequalstr{entrysubtype}{book}%
+ \OR%
+ \iffieldequalstr{entrysubtype}{play}}%
+ {\usebibmacro{cite:foot:title:incollection:italics}}%
+ {\usebibmacro{cite:foot:title}}%
+ \newunit%
+ \printfield[mla:lowercase]{titleaddon}%
+ \newunit%
+ \usebibmacro{cite:foot:byauthor:incollection}%
+ \newunit%
+ \ifbool{bbx@uniquetranslator}%
+ {\usebibmacro{cite:foot:bytranslator}\clearname{translator}}%
+ {}%
+ \ifthenelse{%
+ \iffieldequalstr{entrysubtype}{book}%
+ \OR%
+ \iffieldequalstr{entrysubtype}{play}}%
+ {\setunit{\addcomma\addspace\bibstring{in}\addspace}}%
+ {\newunit}%
+ \printtext[citetitle:book]{%
+ \printfield[noformat]{booktitle}%
+ \setunit{\subtitlepunct}%
+ \printfield[noformat]{booksubtitle}%
+ }%
+ \usebibmacro{cite:foot:bybookauthor}%
+ \newunit%
+ \usebibmacro{cite:foot:byeditor}%
+ \newunit%
+ \iffieldsequal{year}{edition}%
+ {\printfield{year}~\bibstring{edition}\clearfield{year}}%
+ {\printfield[foot:cite:edition:format]{edition}\isdot}%
+ \newunit%
+ \iffieldundef{maintitle}%
+ {\printfield{volume}%
+ \printfield{part}}%
+ {}%
+ \newunit%
+ \printfield{volumes}%
+ \newunit%
+ \usebibmacro{series+number}%
+ \setunit{\addspace}%
+ \iffieldundef{year}%
+ {}%
+ {\usebibmacro{cite:foot:publisher+location+year}}%
+ \setunit{\addspace}%
+ \iffieldundef{postnote}%
+ {\printfield{pages}}%
+ {}%
+ }%
+
+\DeclareBibliographyDriver{footcite:phdthesis}{%
+ \usedriver{}{footcite:thesis}}
+
+\DeclareBibliographyDriver{footcite:thesis}{%
+ \usebibmacro{cite:foot:name}%
+ \newunit%
+ \usebibmacro{title}%
+ \newunit%
+ \ifbibstring{\thefield{type}}%
+ {\printtext[default]{\bibstring{\thefield{type}}}}%
+ {\printtext[default]{\printfield{type}}}%
+ \newunit%
+ \printlist{institution}%
+ \newunit%
+ \iffieldequalstr{entrysubtype}{published}%
+ {\printfield{origyear}\clearfield{origyear}}%
+ {\printfield{year}}%
+ \newunit%
+ \iffieldequalstr{entrysubtype}{published}%
+ {\usebibmacro{series+number}%
+ \setunit{\addspace}%
+ \usebibmacro{cite:foot:publisher+location+year}}%
+ {}}
+
+\DeclareBibliographyDriver{footcite:review}{%
+ \usebibmacro{cite:foot:author:review}%
+ \ifbool{cbx@named}%
+ {\setunit{\newunitpunct}}%
+ {\setunit{}}%
+ \usebibmacro{cite:foot:title}%
+ \setunit*{\newunitpunct}%
+ \printtext[bibhyperref]%
+ {\bibstring{reviewof}\addspace\printfield{booktitle}}%
+ \newunit%
+ \ifnameundef{bookauthor}%
+ {\printtext[reviewededitor]{\printnames[default]{editor}}}%
+ {\printtext[reviewedauthor]{\printnames[default]{bookauthor}}}%
+ \newunit%
+ \usebibmacro{journal+issuetitle}%
+ \newunit%
+ \iffieldundef{url}{}{\usebibmacro{cite:foot:url+urldate}}%
+ \setunit{\addcolon\addspace}%
+ \iffieldundef{postnote}%
+ {\printfield{pages}}%
+ {}}%
+
+\DeclareBibliographyDriver{footcite:video}{%
+ \setbool{cbx@named}{false}%
+ \ifnamesequal{labelname}{author}%
+ {\usebibmacro{mla:video:name:first:footnote}{author}%
+ \setbool{cbx@named}{true}}%
+ {}%
+ \ifnamesequal{labelname}{editor}%
+ {\usebibmacro{mla:video:name:first:footnote}{editor}%
+ \setbool{cbx@named}{true}}%
+ {}%
+ \ifbool{cbx@named}%
+ {\setunit{\newunitpunct}}%
+ {\setunit{}}%
+ \printtext[bibhyperref]{\printfield{title}}%
+ \newunit%
+ \ifnameundef{bookauthor}%
+ {}%
+ {\printtext[reviewedauthor]{\printnames[byeditor]{bookauthor}}}%
+ \newunit%
+ \usebibmacro{mla:video:name:second:footnote}{author}%
+ \newunit%
+ \usebibmacro{mla:video:name:second:footnote}{editor}%
+ \newunit%
+ \usebibmacro{mla:video:name:second:footnote}{namea}%
+ \newunit%
+ \usebibmacro{mla:video:name:second:footnote}{nameb}%
+ \newunit%
+ \usebibmacro{mla:video:name:second:footnote}{namec}%
+ \newunit%
+ \printfield{origyear}%
+ \newunit%
+ \printfield{howpublished}%
+ \newunit%
+ \printlist{publisher}%
+ \newunit%
+ \printfield{year}%
+ \addperiod}
+
+\DeclareBibliographyDriver{footcite:suppcollection}{%
+ \usedriver{}{footcite:suppbook}}
+
+\DeclareBibliographyDriver{footcite:suppbook}{%
+ \usebibmacro{cite:foot:name}%
+ \newunit%
+ \usebibmacro{cite:foot:title}%
+ \newunit%
+ \printfield{entrysubtype}%
+ \newunit%
+ \usebibmacro{booktitle}%
+ \setunit{\newunitpunct\bibstring{bytypeauthor}\addspace}%
+ \ifnamesequal{labelname}{bookauthor}%
+ {\printnames[mla:last]{bookauthor}}%
+ {\printnames[byauthor]{bookauthor}}%
+ \newunit%
+ \usebibmacro{byeditor+others}%
+ \newunit%
+ \printfield{edition}%
+ \newunit%
+ \iffieldundef{maintitle}%
+ {\printfield{volume}%
+ \printfield{part}}%
+ {}%
+ \newunit%
+ \printfield{volumes}%
+ \newunit%
+ \usebibmacro{series+number}%
+ \setunit{\addspace}%
+ \usebibmacro{cite:foot:publisher+location+year}%
+ \setunit{\addspace}%
+ \iffieldundef{postnote}%
+ {\printfield{pages}}%
+ {}}
+
+\DeclareBibliographyDriver{footcite:unpublished}{%
+ \usebibmacro{cite:foot:name}%
+ \newunit%
+ \usebibmacro{mla:title:unpublished}%
+ \newunit%
+ \newunit%
+ \printfield{note}%
+ \newunit%
+ \usebibmacro{mla:all:type:foot}%
+ \setunit*{\isdot\addspace}%
+ \printfield{number}%
+ \newunit%
+ \printfield{library}%
+ \setunit{\addcomma\addspace}%
+ \printlist{location}%
+ \newunit%
+ \printfield{addendum}%
+ \usebibmacro{finentry}}
+
+\DeclareBibliographyDriver{footcite:periodical}{%
+ \usebibmacro{cite:foot:editor}%
+ \setunit{\labelnamepunct}\newblock%
+ \usebibmacro{mla:article:journal+issuetitle}%
+ \newunit\newblock
+ \printfield{note}%
+ \setunit{\addcolon\addspace}\newblock
+ \iffieldundef{postnote}%
+ {\printfield{pages}}%
+ {}%
+ \newunit\newblock
+ \usebibmacro{url+urldate}%
+ \newunit\newblock
+ \printfield{addendum}%
+ \newunit\newblock
+ \usebibmacro{pageref}%
+ \usebibmacro{finentry}}
+
+\newbibmacro*{cite:foot:title}{%
+ \iffieldundef{title}%
+ {}%
+ {\printtext[bibhyperref]{%
+ \printtext[citetitle:\strfield{entrytype}]{%
+ \printfield[noformat]{title}%
+ \setunit{\subtitlepunct}%
+ \printfield[noformat]{subtitle}}}%
+ }}%
+
+\newbibmacro*{cite:foot:title:incollection:italics}{%
+ \printtext[bibhyperref]{%
+ \printtext[title:book]{%
+ \printfield[noformat]{title}%
+ \setunit{\subtitlepunct}%
+ \printfield[noformat]{subtitle}}%
+ }}%
+
+\newbibmacro*{cite:foot:bytranslator}{%
+ \ifnameundef{translator}%
+ {}%
+ {\printtext[default]{\bibstring{bytranslator}\addspace%
+ \printnames[cite:foot:translator]{translator}}}}
+
+\newbibmacro*{cite:foot:byeditor}{%
+ \ifthenelse{\ifnameundef{editor}\OR%
+ \( \iffieldequalstr{entrytype}{collection}\AND%
+ \ifnameundef{author} \)}%
+ {}%
+ {\usebibmacro{byeditor+others}}}
+
+\newbibmacro*{mla:foot:postnote}{%
+ \iffieldundef{postnote}%
+ {\unspace}%
+ {\unspace\addspace\printfield[footpostnote]{postnote}}%
+ \usebibmacro{cite:reset}}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-mla/mla-new.bbx b/macros/latex/contrib/biblatex-contrib/biblatex-mla/mla-new.bbx
index ee436e14d2..fa518c9e51 100644
--- a/macros/latex/contrib/biblatex-contrib/biblatex-mla/mla-new.bbx
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-mla/mla-new.bbx
@@ -1,1292 +1,6 @@
-% mla.bbx, v1.9 2016/11/01 * compatible with biblatex 3.4
-% Maintained at <https://github.com/jmclawson/biblatex-mla> by James Clawson.
-%
-% Feel free to improve, redistribute, and adapt to your own ends. Please share improvements in formatting and MLA standards compliance back to James Clawson: <clawson@gmail.com>.
-%
-% This material is subject to the LaTeX Project Public License. See http://www.ctan.org/tex-archive/help/Catalogue/licenses.lppl.html for the details of that license.
-
-\ProvidesFile{mla-new.bbx}[2016/11/01 v1.9 biblatex bibliography style]
-
-\RequireBibliographyStyle{standard}
-\DeclareLanguageMapping{american}{american-mla}
-\DeclareLanguageMapping{english}{english-mla}
-
-\NewBibliographyString{byserieseditor}
-\NewBibliographyString{reviewof}
-\NewBibliographyString{specissue}
-\NewBibliographyString{phd}
-\NewBibliographyString{dphil}
-\NewBibliographyString{lic}
-\NewBibliographyString{ma}
-\NewBibliographyString{ms}
-\NewBibliographyString{msc}
-\NewBibliographyString{mphil}
-\NewBibliographyString{mlitt}
-\NewBibliographyString{manuscript}
-\NewBibliographyString{typescript}
-\NewBibliographyString{director}
-\NewBibliographyString{screenplay}
-\NewBibliographyString{adaptation}
-\NewBibliographyString{adaptor}
-\NewBibliographyString{performer}
-\NewBibliographyString{performers}
-\NewBibliographyString{composer}
-\NewBibliographyString{composedby}
-\NewBibliographyString{producer}
-\NewBibliographyString{with}
-\NewBibliographyString{proceedings}
-\NewBibliographyString{compilerandeditor}%
-\NewBibliographyString{bycompilerandeditor}%
-\NewBibliographyString{transof}%
-\NewBibliographyString{volstodate}%
-\NewBibliographyString{supptotitle}%
-\NewBibliographyString{print}%
-\NewBibliographyString{web}%
-\NewBibliographyString{generaleditor}%
-
-\setlength{\bibitemsep}{0pt}
-\renewcommand*{\mkbibnamesuffix}[1]{\addcomma\addlowpenspace#1}
-
-\DeclareNameAlias{author}{sortname}
-\@ifpackagelater{biblatex}{2016/03/01}{%
- \DeclareNameFormat{mla:last}{\nameparts{#1}\namepartfamily}%
- \DeclareNameFormat{default}{%
- \nameparts{#1}%
- \ifgiveninits{%
- \usebibmacro{name:given-family}{\namepartfamily}{\namepartgiveni}{\namepartprefix}{\namepartsuffix}%
- }{%
- \usebibmacro{name:given-family}{\namepartfamily}{\namepartgiven}{\namepartprefix}{\namepartsuffix}%
- }%
- \usebibmacro{name:andothers}%
- }%
-}{%
- \DeclareNameFormat{mla:last}{#1}%
- \DeclareNameFormat{default}{%
- \iffirstinits{%
- \usebibmacro{name:first-last}{#1}{#4}{#5}{#7}%
- }{%
- \usebibmacro{name:first-last}{#1}{#3}{#5}{#7}%
- }%
- \usebibmacro{name:andothers}%
- }%
-}
-
-\defbibenvironment{bibliography}
- {\list
- {}
- {\setlength{\leftmargin}{\bibhang}%
- \setlength{\itemindent}{-\leftmargin}%
- \setlength{\itemsep}{\bibitemsep}%
- \setlength{\parsep}{\bibparsep}}}
- {\endlist}
- {\item}
-
-\DeclareFieldFormat{title:article}{\mkbibquote{#1}}%
-\DeclareFieldFormat{title:online}{\mkbibquote{#1}}%
-\DeclareFieldFormat{title:inreference}{\mkbibquote{#1}}%
-\DeclareFieldFormat{title:book}{\mkbibemph{#1}}
-\DeclareFieldFormat{title:booklet}{\mkbibemph{#1}}
-\DeclareFieldFormat{title:collection}{\mkbibemph{#1}}
-\DeclareFieldFormat{title:incollection}{\mkbibquote{#1}}%
-\DeclareFieldFormat{title:inbook}{\mkbibquote{#1}}%
-\DeclareFieldFormat{title:inproceedings}{\mkbibquote{#1}}%
-\DeclareFieldFormat{title:thesis}{\mkbibquote{#1}}%
-\DeclareFieldFormat{title:reviewedbook}{\bibstring{reviewof}\addspace\mkbibemph{#1}}%
-\DeclareFieldFormat{title:reference}{\mkbibemph{#1}}%
-\DeclareFieldFormat{isbn}{}
-\DeclareFieldFormat{pages}{\mkpageprefix[bookpagination]{#1}}
-\DeclareFieldFormat[review]{volume}{#1}%
-\DeclareFieldFormat[article]{volume}{#1}%
-\DeclareListFormat[article]{location}%
- {\unspace\mkbibbrackets{#1}\addspace}%
-\DeclareFieldFormat[article]{version}{#1\isdot}%
-\DeclareFieldFormat[incollection]{bibliography:origyear}{\openrangeformat{#1}\addperiod}%
-\DeclareFieldFormat[video]{mla:publimedium}{\MakeCapital{film}}%
-\DeclareFieldFormat{mla:publimedium}{\MakeCapital{#1}}%
-\DeclareFieldFormat{mla:capital}{\MakeCapital{#1}}%
-\DeclareFieldFormat{url}{%
- \ifhyperref%
- {\href{http://#1}{\nolinkurl{#1}}}%
- {\url{#1}}}%
-\DeclareFieldFormat{mla:lowercase}{\MakeLowercase{#1}}%
-\DeclareFieldFormat{nameaddon}{\mkbibbrackets{#1}}%
-\DeclareFieldFormat{issuetitle}{\mkbibemph{#1}}
-\DeclareFieldFormat{mla:newspaper:section}{\bibstring{section}\addspace#1}%
-\DeclareFieldFormat{library}{#1\isdot}%
-\DeclareFieldFormat{reviewededitor}{\bibstring{byeditor}\addspace#1}%
-\DeclareFieldFormat{reviewedauthor}{\bibstring{byauthor}\addspace#1}%
-\DeclareFieldFormat{title:suppbook}{\mkbibquote{#1}}
-\DeclareFieldFormat{openrangevolumes}{#1~\bibstring{volstodate}}%
-\DeclareFieldFormat{volumeof}{\bibstring{volume}~#1~\bibstring{ofseries}}%
-\DeclareFieldFormat{mla:sentence-case}{\MakeSentenceCase{#1}}%
-\DeclareFieldFormat{eprinttype}{\mkbibemph{#1}}
-\DeclareFieldFormat{eprint:jstor}{%
- \iffieldundef{url}{%
- \mkbibemph{JSTOR}\addcomma\space \printtext[url]{www.jstor.org/stable/#1}}{%
- \mkbibemph{JSTOR}}}
-\DeclareFieldFormat{eprint:hulu}{%
- \iffieldundef{url}{%
- \mkbibemph{Hulu}\addcomma\space \printtext[url]{www.hulu.com/watch/#1}}{%
- \mkbibemph{Hulu}}}
-\DeclareFieldFormat{eprint:googlebooks}{%
- \iffieldundef{url}{%
- \mkbibemph{Google Books}\addcomma\space \printtext[url]{books.google.com/books?id=#1}}{%
- \mkbibemph{Google Books}}}
-\DeclareFieldFormat{eprint:muse}{%
- \iffieldundef{url}{%
- \mkbibemph{Project Muse}\addcomma\space \printtext[url]{muse.jhu.edu/article/#1}}{%
- \mkbibemph{Project Muse}}}
-\DeclareFieldFormat{eprint}{\emph{#1}}%
-
-\DeclareFieldFormat{urldate}{#1}%
-\DeclareFieldFormat[article,periodical,review]{volume}{\bibstring{volume}\ppspace#1}% volume of a journal
-\DeclareFieldFormat[article,periodical,review]{number}{\bibstring{number}\ppspace#1}% number of a journal
-
-\DeclareBibliographyAlias{artwork}{article}%
-\DeclareBibliographyAlias{audio}{article}%
-\DeclareBibliographyAlias{booklet}{book}
-\DeclareBibliographyAlias{bookinbook}{incollection}%
-\DeclareBibliographyAlias{collection}{book}
-\DeclareBibliographyAlias{reference}{book}
-\DeclareBibliographyAlias{image}{article}%
-\DeclareBibliographyAlias{inbook}{incollection}%
-\DeclareBibliographyAlias{letter}{article}%
-\DeclareBibliographyAlias{manual}{customa}
-\DeclareBibliographyAlias{misc}{customa}
-\DeclareBibliographyAlias{music}{audio}%
-\DeclareBibliographyAlias{online}{article}
-\DeclareBibliographyAlias{patent}{customa}
-\DeclareBibliographyAlias{report}{customa}
-\DeclareBibliographyAlias{suppcollection}{suppbook}
-
-\DeclareFieldAlias[online]{maintitle}{journaltitle}
-\DeclareFieldAlias[book]{subtitle}{booksubtitle}
-\DeclareFieldAlias[book]{title}{booktitle}
-
-\renewcommand*{\newunitpunct}{\addcomma\space}
-\renewcommand*{\multilistdelim}{/}
-\renewcommand*{\finallistdelim}{/}
-\renewcommand*{\newblockpunct}{\addperiod\space}
-\renewcommand*{\andothersdelim}{\ifcitation{}{\addcomma}\addspace}
-\renewcommand*{\subtitlepunct}{\ifterm{}{\addcolon}\space}
-
-\newboolean{bbx@mla-incollection}
-\newbool{bbx@inset}
-
-\DeclareBibliographyOption{dashed}[true]{%
- \ifstrequal{#1}{true}
- {\ExecuteBibliographyOptions{pagetracker}%
- \renewbibmacro*{bbx:savehash}{\savefield{fullhash}{\bbx@lasthash}}}
- {\ExecuteBibliographyOptions{pagetracker=false}%
- \renewbibmacro*{bbx:savehash}{}}}
-
-\newboolean{bbx@annotation}% same as biblatex-dw
-\DeclareBibliographyOption{annotation}[true]{%
-\setbool{bbx@annotation}{#1}}
-
-\newboolean{bbx@totalnames}
-\DeclareEntryOption{totalnames}[true]{%
- \setbool{bbx@totalnames}{#1}}
-
-% for translated incollections where the collection has no shared translator
-\newboolean{bbx@uniquetranslator}%
-\DeclareEntryOption{uniquetranslator}[true]{%
- \setbool{bbx@uniquetranslator}{#1}}
-
-\newbool{bbx:gnoreminfo}%
-\setbool{bbx:gnoreminfo}{false}
-\DeclareBibliographyOption{noremoteinfo}[true]{\setbool{bbx:gnoreminfo}{#1}}
-
-\newbool{bbx:lnoreminfo}%
-\setbool{bbx:lnoreminfo}{false}
-\DeclareEntryOption{noremoteinfo}[true]{\setbool{bbx:lnoreminfo}{#1}}
-
-\newtoggle{bbx:isan}
-\DeclareBibliographyOption{isan}[true]{\settoggle{bbx:isan}{#1}}%
-
-\newtoggle{bbx:ismn}
-\DeclareBibliographyOption{ismn}[true]{\settoggle{bbx:ismn}{#1}}%
-
-\newtoggle{bbx:isrn}
-\DeclareBibliographyOption{isrn}[true]{\settoggle{bbx:isrn}{#1}}%
-
-\newtoggle{bbx:issn}
-\DeclareBibliographyOption[boolean]{issn}[true]{\settoggle{bbx:issn}{#1}}%
-
-\newboolean{mla@nodate}%
-\DeclareEntryOption{nodate}[true]{\setbool{mla@nodate}{#1}}
-
-\ExecuteBibliographyOptions{maxnames=2,datezeros=false,eprint=true}%
-
-\newrobustcmd{\openrangeformat}[1]{%
- \begingroup%
- \let\blx@org@rangedash=\bibrangedash%
- \def\bibrangedash{%
- \blx@org@rangedash%
- \futurelet\@let@token\blx@openrangeformat}%
- #1%
- \endgroup}
-
-\newcommand*{\blx@openrangeformat}{%
- \ifx\@let@token\endgroup%
- \openrangemark%
- \fi}
-
-\newcommand*{\openrangemark}{\mbox{ }}%
-
-\newbibmacro*{bbx:savehash}{%
- \savefield{fullhash}{\bbx@lasthash}}
-
-\renewcommand*{\bibnamedash}{% suggested by StackExchange user Audrey
- \mlanamedash%
- \iffieldundef{nameaddon}{\addperiod\addspace}{\nopunct}}%
-
-\newcommand*{\mlanamedash}{-{}-{}-}
-
-\renewbibmacro*{author}{%
- \ifthenelse{\ifuseauthor\AND\NOT\ifnameundef{author}}
- {\usebibmacro{bbx:dashcheck}%
- {\bibnamedash}%
- {\ifbool{bbx@totalnames}%
- {\printnames[sortname][-\value{listtotal}]{author}}
- {\printnames{author}}%
- \usebibmacro{bbx:savehash}}%
- \iffieldundef{nameaddon}%
- {}%
- {\setunit{\addspace}%
- \printfield{nameaddon}}%
- \iffieldundef{authortype}%
- {}%
- {\newunit%
- \usebibmacro{authorstrg}}}%
- {\global\undef\bbx@lasthash}}
-
-\renewbibmacro*{editor}{%
- \ifthenelse{\ifuseeditor\AND\NOT\ifnameundef{editor}}%
- {\ifthenelse{\iffieldequals{namehash}{\bbx@lasthash}\AND\NOT
- \iffirstonpage}%
- {\mbox{\mlanamedash\unspace\addcomma\addspace}}%
- {\ifbool{bbx@totalnames}%
- {\printnames[sortname][-\value{listtotal}]{editor}}%
- {\printnames{editor}}%
- \newunit%
- \savefield{namehash}{\bbx@lasthash}}%
- \usebibmacro{editorstrg}\clearname{editor}\setunit{\addperiod\space}}%
- {\global\undef\bbx@lasthash}}
-
-\renewbibmacro*{editor+others}{%
- \ifthenelse{\ifuseeditor\AND\NOT\ifnameundef{editor}}%
- {\ifthenelse{\iffieldequals{namehash}{\bbx@lasthash}\AND\NOT
- \iffirstonpage}%
- {\mbox{\mlanamedash\unspace\addcomma\addspace}}%
- {\ifbool{bbx@totalnames}%
- {\printnames[sortname][-\value{listtotal}]{editor}}%
- {\printnames[sortname]{editor}}%
- \newunit%
- \savefield{namehash}{\bbx@lasthash}}%
- \usebibmacro{editor+othersstrg}\clearname{editor}}%
- {\global\undef\bbx@lasthash}}
-
-\renewbibmacro*{translator}{%
- \ifthenelse{\ifusetranslator\AND\NOT\ifnameundef{translator}}%
- {\ifthenelse{\iffieldequals{namehash}{\bbx@lasthash}\AND\NOT
- \iffirstonpage}%
- {\mbox{\mlanamedash\unspace\addcomma\addspace}}%
- {\ifbool{bbx@totalnames}%
- {\printnames[sortname][-\value{listtotal}]{translator}}%
- {\printnames[sortname]{translator}}%
- \newunit%
- \savefield{namehash}{\bbx@lasthash}}%
- \usebibmacro{translatorstrg}\clearname{translator}}%
- {\global\undef\bbx@lasthash}}
-
-\renewbibmacro*{translator+others}{%
- \ifthenelse{\ifusetranslator\AND\NOT\ifnameundef{translator}}%
- {\ifthenelse{\iffieldequals{namehash}{\bbx@lasthash}\AND\NOT
- \iffirstonpage}%
- {\mbox{\mlanamedash\unspace\addcomma\addspace}}%
- {\ifbool{bbx@totalnames}%
- {\printnames[sortname][-\value{listtotal}]{translator}}%
- {\printnames[sortname]{translator}}%
- \newunit%
- \savefield{namehash}{\bbx@lasthash}}%
- \usebibmacro{translator+othersstrg}\clearname{translator}}%
- {\global\undef\bbx@lasthash}}
-
-\newbibmacro*{journal+issue+year+pages}{%
- \usebibmacro{journal+ser+vol+num}%
- \setunit{\addspace}%
- \printtext[parens]{%
- \iffieldundef{issue}%
- {\iffieldundef{month}%
- {\printfield{year}}%
- {\iffieldundef{day}%
- {\printfield{month}%
- \setunit{\addspace}%
- \printfield{year}}%
- {\printtext{\bibdate}}}}%
- {\printfield{issue}%
- \setunit{\addspace}%
- \printfield{year}}}%
- \newunit%
- \printfield{pages}}
-
-\renewbibmacro*{url+urldate}{%
- \printfield[mla:capital:web]{url}\clearfield{url}%
- \printunit{\addperiod\space}\newblock%
- \iffieldundef{urlyear}{}{\printtext{Accessed}\space\printurldate\clearfield{urlyear}}%
- }
-
-\newbibmacro*{mla:container:top}{%
- \usebibmacro{bibindex}%
- \usebibmacro{author/editor+others/translator+others}%
- \setunit{\addperiod\space}\newblock%
- \ifthenelse{%
- \iffieldequalstr{entrytype}{suppbook}%
- \OR%
- \iffieldequalstr{entrytype}{suppcollection}}%
- {\ifthenelse{\iffieldundef{title}}{\printfield[mla:capital]{entrysubtype}}{\usebibmacro{title}}%
- \printunit{\addperiod\space}\newblock%
- \newunit}%
- {\usebibmacro{maintitle+booktitle}}%
- \printunit{\addperiod\space}\newblock%
- }
-
-\newbibmacro*{mla:container:one}{%
- \usebibmacro{mla:article:journal+issuetitle}%
- \newunit\newblock
- \printfield{note}%
- \newunit%
- \printfield{pages}%
- \newunit%
- \ifthenelse{\iffieldundef{eprinttype} \OR \(\iffieldundef{eprinttype} \AND \iffieldundef{eprint}\)}
- {\usebibmacro{url+urldate}}%
- {}%
- \printunit{\addperiod\space}\newblock%
- }
-
-\newbibmacro*{mla:container:two}{%
- \usebibmacro{mla:isbn/issn+doi+eprint}%
- \newunit\newblock
- \usebibmacro{url+urldate}%
- \newunit\newblock
- \printfield{addendum}%
- \printunit{\addperiod\space}\newblock%
- \usebibmacro{pageref}%
- }
-
-\DeclareBibliographyDriver{book}{%
- \usebibmacro{mla:container:top}%
- \printunit{\addperiod\space}\newblock%
- \usebibmacro{bytranslator+others}%
- \newunit%
- \usebibmacro{byeditor+others}%
- \newunit%
- \printfield{edition}\isdot%
- \newunit%
- \iffieldundef{maintitle}{\printfield{volume}\printfield{part}}{}%
- \newunit%
- \iffieldundef{volume}{\printfield{volumes}\clearfield{volumes}}{}%%
- \newunit%
- \usebibmacro{series+number}%
- \newunit%
- \printfield{note}%
- \newunit%
- \printlist{publisher}%
- \newunit%
- \printdate%
- \newunit%
- \printfield{pages}%
- \newunit%
- \usebibmacro{mla:isbn/issn+doi+eprint}%
- \newunit%
- \iffieldundef{origtitle}%
- {}%
- {\usebibmacro{mla:reprint}}%
- \newunit%
- \iffieldundef{volumes}%
- {}%
- {\usebibmacro{mla:multivolumes}}%
- \newunit%
- \printfield[mla:sentence-case]{addendum}%
- \newunit%
- \usebibmacro{pageref}%
- \newunit%
- \usebibmacro{finentry}}
-
-\DeclareBibliographyDriver{article}{%
- \usebibmacro{mla:container:top}%
- \printunit{\addperiod\space}\newblock%
- \usebibmacro{mla:container:one}%
- \printunit{\addperiod\space}\newblock%
- \usebibmacro{mla:container:two}%
- \usebibmacro{finentry}}
-
-\DeclareBibliographyDriver{periodical}{%
- \usebibmacro{bibindex}%
- \usebibmacro{author/editor+others/translator+others}%
- \setunit{\addperiod\space}\newblock%
- \usebibmacro{mla:article:journal+issuetitle}%
- \newunit\newblock%
- \printfield{note}%
- \newunit%
- \printfield{pages}%
- \newunit\newblock%
- \usebibmacro{mla:isbn/issn+doi+eprint}%
- \newunit\newblock%
- \usebibmacro{url+urldate}%
- \newunit\newblock%
- \printfield{addendum}%
- \newunit\newblock%
- \usebibmacro{pageref}%
- \newunit%
- \usebibmacro{finentry}}
-
-\newbibmacro*{mla:reprint}{%
- \iffieldundef{origtitle}%
- {\newunit}%
- {\iffieldundef{origlanguage}
- {\setunit{\newunitpunct\bibstring{reprintof}\addspace}}%
- {\setunit{\newunitpunct\bibstring{transof}\addspace}}%
-}%
- \printfield[title:\strfield{entrytype}]{origtitle}%
- \newunit\newblock%
- \printlist{origlocation}\clearlist{origlocation}%
- \setunit*{\addcolon\addspace}%
- \printlist{origpublisher}\clearlist{origpublisher}%
- \newunit%
- \ifbool{bbx@mla-incollection}%
- {\printfield[bibliography:origyear]{origyear}\clearfield{origyear}}%
- {\ifthenelse{\iffieldundef{volume}\OR\iffieldundef{volumes}}%
- {\printorigdate\clearfield{origyear}}%
- {}%
- }%
-}
-
-\newbibmacro*{mla:multivolumes}{%
- \iffieldundef{maintitle}%
- {}%
- {\printfield[volumeof]{volume}%
- \setunit{\addspace}%
- \usebibmacro{maintitle}}%
- \usebibmacro{mla:generaleditor}%
- \iffieldequalstr{eventendyear}{}%
- {\printfield[openrangevolumes]{volumes}\clearfield{volumes}}%
- {\printfield{volumes}\clearfield{volumes}}%
- \newunit\newblock%
- \printeventdate\clearfield{eventyear}%
-}
-
-
-\renewbibmacro*{byeditorx}{%
- \usebibmacro{byeditorx:internal}{a}%
- \usebibmacro{byeditorx:internal}{b}%
- \usebibmacro{byeditorx:internal}{c}%
-}
-
-\newbibmacro*{byeditorx:internal}[1]{%
- \ifnameundef{editor#1}
- {}
- {\iffieldequalstr{editor#1type}{generaleditor}
- {}
- {\usebibmacro{bytypestrg}{editor#1}{editor}%
- \setunit{\addspace}%
- \printnames[byeditor#1]{editor#1}%
- \newunit}}%
-}
-
-\newbibmacro*{mla:generaleditor}{%
- \usebibmacro{mla:generaleditor:internal}{}%
- \usebibmacro{mla:generaleditor:internal}{a}%
- \usebibmacro{mla:generaleditor:internal}{b}%
- \usebibmacro{mla:generaleditor:internal}{c}%
-}
-
-\newbibmacro*{mla:generaleditor:internal}[1]{%
- \iffieldequalstr{editor#1type}{generaleditor}%
- {\printnames{editor#1}%
- \newunit%
- \bibstring{generaleditor}%
- \newunit}%
- {}%
-}
-
-\newbibmacro*{mla:isbn/issn+doi+eprint}{%
- \iftoggle{bbx:isan}{\printfield{isan}\clearfield{isan}}{}%
- \newunit\newblock%
- \iftoggle{bbx:isbn}{\printfield{isbn}\clearfield{isbn}}{}%
- \newunit\newblock%
- \iftoggle{bbx:ismn}{\printfield{ismn}\clearfield{ismn}}{}%
- \newunit\newblock%
- \iftoggle{bbx:isrn}{\printfield{isrn}\clearfield{isrn}}{}%
- \newunit\newblock%
- \iftoggle{bbx:issn}{\printfield{issn}\clearfield{issn}}{}%
- \newunit\newblock%
- \iftoggle{bbx:doi}{\printfield{doi}\clearfield{doi}}{}%
- \newunit\newblock%
- \iftoggle{bbx:eprint}{\usebibmacro{eprint+extra}}{}%
- \newunit\newblock}
-
-\newbibmacro*{eprint+extra}{%
- \iffieldundef{eprinttype}
- {\printfield{eprint}}
- {\iffieldundef{eprint}
- {\printfield{eprinttype}}
- {\printfield[eprint:\strfield{eprinttype}]{eprint}}}}
-
-\DeclareBibliographyDriver{suppbook}{%
- \usebibmacro{mla:container:top}%
- \newunit\newblock
- \iffieldundef{crossref}%
- {\iffieldundef{xref}%
- {\usebibmacro{mla:incollection:internal}}%
- {\bbx@crossref{\thefield{xref}}%
- \setunit{\addspace}%
- \printfield{pages}}}%
- {\bbx@crossref{\thefield{crossref}}%
- \setunit{\addspace}%
- \printfield{pages}%
- \newunit}%
- \newunit%
- \usebibmacro{finentry}}
-
-\DeclareCiteCommand{\bbx@crossref}%
- {}
- {\ifsingletitle%
- {\printtext[bibhyperref]{\printnames{labelname}}%
- \setunit{\space}}%
- {\printnames{labelname}%
- \newunit%
- \printtext[bibhyperref]{\printfield[citetitle:book]{labeltitle}}
- \setunit{\space}}}%
- {}%
- {}
-
-\DeclareBibliographyDriver{incollection}{%
- \usebibmacro{bibindex}%
- \usebibmacro{author/editor+others/translator+others}%
- \setunit{\addperiod\space}\newblock%
- \ifthenelse{%
- \iffieldequalstr{entrysubtype}{book}%
- \OR%
- \iffieldequalstr{entrysubtype}{play}%
- \OR%
- \iffieldequalstr{entrytype}{bookinbook}}%
- {\usebibmacro{title:incollection:italics}}%
- {\setbool{bbx@mla-incollection}{true}%
- \usebibmacro{title}%
- \setbool{bbx@mla-incollection}{false}}%
- \newunit\newblock%
- \ifbool{bbx@uniquetranslator}%
- {\usebibmacro{bytranslator+others}\newunit}%
- {}%
- \newunit\newblock%
- \iffieldundef{crossref}%
- {\iffieldundef{xref}%
- {\usebibmacro{mla:incollection:internal}}%
- {\bbx@crossref{\thefield{xref}}%
- \setunit{\addspace}%
- \printfield{pages}}}%
- {\bbx@crossref{\thefield{crossref}}%
- \setunit{\addspace}%
- \printfield{pages}%
- \newunit}%
- \newunit%
- \usebibmacro{finentry}}
-
-\newbibmacro*{mla:incollection:internal}{%
- \setbool{bbx@mla-incollection}{true}%
- \usebibmacro{maintitle+booktitle}%
- \ifthenelse{%
- \iffieldequalstr{entrytype}{suppbook}%
- \OR%
- \iffieldequalstr{entrytype}{suppcollection}}%
- {\setunit{\newunitpunct\bibstring{byauthor}\addspace}%
- \ifnamesequal{labelname}{bookauthor}%
- {\printnames[mla:last]{bookauthor}}%
- {\printnames[byauthor]{bookauthor}}}%
- {}%
- \newunit\newblock%
- \usebibmacro{byauthor}%
- \newunit\newblock
- \usebibmacro{byeditor+others}%
- \newunit\newblock
- \printfield{edition}\isdot%
- \newunit
- \iffieldundef{maintitle}%
- {\printfield{volume}\printfield{part}}%
- {}%
- \newunit
- \iffieldundef{volume}%
- {\printfield{volumes}\clearfield{volumes}}%
- {}%%
- \newunit\newblock
- \usebibmacro{series+number}%
- \newunit\newblock
- \printfield{note}%
- \newunit\newblock
- \usebibmacro{publisher+location+date}%
- \newunit%
- \usebibmacro{chapter+pages}%
- \newunit%
- \usebibmacro{mla:isbn/issn+doi+eprint}%
- \newunit%
- \usebibmacro{url+urldate}%
- \newunit%
- \iffieldundef{volumes}%
- {}%
- {\usebibmacro{mla:multivolumes}}%
- \newunit%
- \printfield{addendum}%
- \newunit%
- \usebibmacro{pageref}%
- \setbool{bbx@mla-incollection}{false}}
-
-\DeclareBibliographyDriver{inproceedings}{%
- \usebibmacro{bibindex}%
- \usebibmacro{author/editor+others/translator+others}%
- \setunit{\addperiod\space}\newblock%
- \usebibmacro{title}%
- \setunit{\addperiod\space}\newblock%
- \usebibmacro{mla:proceedings:booktitle}%
- \newunit\newblock
- \usebibmacro{byeditor+others}%
- \newunit\newblock
- \usebibmacro{series+number}%
- \newunit\newblock
- \printfield{note}%
- \newunit
- \usebibmacro{publisher+location+date}%
- \newunit\newblock
- \usebibmacro{chapter+pages}%
- \newunit\newblock
- \printfield{addendum}%
- \newunit\newblock
- \usebibmacro{pageref}%
- \newunit%
- \usebibmacro{finentry}}
-
-\DeclareBibliographyDriver{proceedings}{%
- \usebibmacro{bibindex}%
- \usebibmacro{author/editor+others/translator+others}%
- \setunit{\addperiod\space}\newblock%
- \usebibmacro{mla:proceedings:booktitle}%
- \newunit\newblock
- \usebibmacro{byeditor+others}%
- \newunit\newblock
- \usebibmacro{series+number}%
- \newunit\newblock
- \printfield{note}%
- \newunit
- \usebibmacro{publisher+location+date}%
- \newunit\newblock
- \usebibmacro{chapter+pages}%
- \newunit\newblock
- \printfield{addendum}%
- \newunit\newblock
- \usebibmacro{pageref}%
- \newunit%
- \usebibmacro{finentry}}
-
-\DeclareBibliographyDriver{unpublished}{%
- \usebibmacro{bibindex}%
- \usebibmacro{author/editor+others/translator+others}%
- \setunit{\addperiod\space}\newblock%
- \usebibmacro{title}%
- \setunit{\addperiod\space}\newblock%
- \printfield{note}%
- \newunit\newblock
- \usebibmacro{mla:all:type}%
- \newunit\newblock
- \printfield{number}%
- \newunit\newblock
- \printfield{library}%
- \newunit%
- \printlist{location}%
- \newunit\newblock
- \printfield{addendum}%
- \newunit%
- \usebibmacro{finentry}}
-
-\DeclareBibliographyDriver{thesis}{%
- \usebibmacro{bibindex}%
- \usebibmacro{author/editor+others/translator+others}%
- \setunit{\addperiod\space}\newblock%
- \usebibmacro{title}%
- \setunit{\addperiod\space}\newblock%
- \usebibmacro{mla:thesis:type}%
- \newunit\newblock
- \printlist{institution}%
- \newunit%
- \iffieldequalstr{entrysubtype}{published}%
- {\printfield{origyear}\clearfield{origyear}}%
- {\printfield{year}}%
- \newunit\newblock
- \iffieldequalstr{entrysubtype}{published}%
- {\usebibmacro{series+number}%
- \newunit%
- \printlist{location}%
- \setunit{\addcolon\addspace}%
- \printlist{publisher}%
- \newunit%
- \printfield{year}}%
- {}%
- \newunit\newblock
- \printfield{addendum}%
- \newunit\newblock
- \newunit%
- \usebibmacro{finentry}}
-
-\DeclareBibliographyDriver{review}{%
- \usebibmacro{bibindex}%
- \usebibmacro{author}%
- \setunit{\addperiod\space}\newblock%
- \printfield[title:article]{title}%
- \setunit{\addperiod\space}\newblock%
- \printfield[title:reviewedbook]{booktitle}%
- \newunit%
- \ifnameundef{bookauthor}%
- {\printtext[reviewededitor]{\printnames[default]{editor}}}%
- {\printtext[reviewedauthor]{\printnames[default]{bookauthor}}}%
- \setunit{\addperiod\space}\newblock%
- \usebibmacro{mla:container:one}%
- \setunit{\addperiod\space}\newblock%
- \usebibmacro{mla:container:two}%
- \usebibmacro{finentry}}
-
-\DeclareBibliographyDriver{inreference}{%
- \usebibmacro{bibindex}%
- \usebibmacro{author}%
- \setunit{\addperiod\space}\newblock%
- \usebibmacro{title}%
- \setunit{\addperiod\space}\newblock%
- \iffieldundef{crossref}%
- {\iffieldundef{xref}%
- {\newunit\newblock
- \usebibmacro{maintitle+booktitle}%
- \newunit\newblock
- \usebibmacro{byeditor+others}%
- \newunit\newblock
- \iffieldsequal{year}{edition}%
- {\printfield{year}~\bibstring{edition}\clearfield{year}}%
- {\printfield{edition}\isdot}%
- \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
- \usebibmacro{mla:isbn/issn+doi+eprint}%
- \newunit\newblock
- \usebibmacro{url+urldate}%
- \newunit\newblock
- \printfield{addendum}%
- \newunit\newblock
- \usebibmacro{pageref}}%
- {}}%
- {\bbx@crossref{\thefield{crossref}}%
- \nopunct\unspace\printfield{pages}}%
- \newunit%
- \usebibmacro{finentry}}
-
-\newbibmacro{mlabelnamepunct}{\setunit{\labelnamepunct}\newblock}
-
-\newbibmacro{mla:video:localized:last-first}[1]{%
- \ifnameundef{#1}%
- {}%
- {\printnames{#1}\addcomma\addspace%
- \ifthenelse{\iffieldbibstring{#1type} \and \not %
- \iffieldundef{#1type}}%
- {\bibstring{\thefield{#1type}}}%
- {\iffieldundef{#1type}%
- {\bibstring{with}}%
- {\printfield[mla:lowercase]{#1type}}}}%
-\newunit}%
-
-\newbibmacro{mla:video:name:first:footnote}[1]{%
- \ifnameundef{#1}%
- {}%
- {\printnames[byeditor]{#1}\addcomma\addspace%
- \ifthenelse{\iffieldbibstring{#1type} \and \not %
- \iffieldundef{#1type}}%
- {\bibstring{\thefield{#1type}}}%
- {\iffieldundef{#1type}%
- {\bibstring{with}}%
- {\printfield[mla:lowercase]{#1type}}}}%
- \clearname{#1}%
-}
-
-\newbibmacro{mla:video:localized:first-last}[1]{%
- \ifnameundef{#1}%
- {}%
- {\ifthenelse{\iffieldbibstring{#1type} \and \not %
- \iffieldundef{#1type} \and \not %
- \iffieldequalstr{#1type}{composer}}%
- {\bibstring{\thefield{#1type}}}%
- {\iffieldundef{#1type}%
- {\bibstring{with}}%
- {\iffieldequalstr{#1type}{composer}%
- {\bibstring{composedby}}%
- {\printfield[mla:capital]{#1type}}}}%
- \addspace\printnames[byeditor][-\value{listtotal}]{#1}}%
-\newunit}%
-
-\newbibmacro{mla:video:name:second:footnote}[1]{%
- \ifnameundef{#1}%
- {}%
- {\ifthenelse{\iffieldbibstring{#1type} \and \not %
- \iffieldundef{#1type} \and \not %
- \iffieldequalstr{#1type}{composer}}%
- {\bibstring{\thefield{#1type}}}%
- {\iffieldundef{#1type}%
- {\bibstring{with}}%
- {\iffieldequalstr{#1type}{composer}%
- {\bibstring{composedby}}%
- {\printfield[mla:lowercase]{#1type}}}}%
- \addspace\printnames[byeditor][-\value{listtotal}]{#1}%
- }}%
-
-\DeclareBibliographyDriver{video}{%
- \ifnamesequal{labelname}{author}%
- {\usebibmacro{mla:video:localized:last-first}{author}}{}%
- \ifnamesequal{labelname}{editor}%
- {\usebibmacro{mla:video:localized:last-first}{editor}}{}%
- \printfield{title}%
- \setunit{\newunitpunct\bibstring{byauthor}\addspace}%
- \printnames[byeditor]{bookauthor}%
- \newunit%
- \ifthenelse{\NOT\ifnamesequal{author}{labelname}%
- \AND\NOT\ifnameundef{author}}%
- {\usebibmacro{mla:video:localized:first-last}{author}}%
- {}%
- \ifthenelse{\NOT\ifnamesequal{editor}{labelname}%
- \AND\NOT\ifnameundef{editor}}%
- {\usebibmacro{mla:video:localized:first-last}{editor}}%
- {}%
- \usebibmacro{mla:video:localized:first-last}{namea}%
- \usebibmacro{mla:video:localized:first-last}{nameb}%
- \usebibmacro{mla:video:localized:first-last}{namec}%
- \printfield{origyear}\clearfield{origyear}%
- \newunit\newblock%
- \printlist{publisher}%
- \newunit%
- \printfield{year}%
- \newunit\newblock%
- \usebibmacro{finentry}}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% % % % % % % % % % % % % % % % % % % % % %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% drivers to add eventually:
-% * \DeclareBibliographyDriver{misc}
-% * \DeclareBibliographyDriver{artwork}
-% * \DeclareBibliographyDriver{audio}
-% * \DeclareBibliographyDriver{image}
-% * \DeclareBibliographyDriver{movie}
-% * \DeclareBibliographyDriver{music}
-% * \DeclareBibliographyDriver{performance}
-%
-% Specifically important mainstay types to add for MLA users
-% 0 support for multiple publishers? % can't do with bibtex
-% * editorial
-% * letter (to the editor, etc.)
-% * interview
-
-\newbibmacro*{mtitle+mstitle+vol+part+title+stitle}{%
- \iffieldundef{maintitle}%
- {}%
- {\printtext[maintitle]{%
- \printfield[noformat]{maintitle}%
- \newunit
- \printfield[noformat]{mainsubtitle}}%
- \newunit
- \printfield{maintitleaddon}%
- \newunit\newblock
- \iffieldundef{volume}%
- {}%
- {\printfield{volume}%
- \printfield{part}%
- \setunit{\addcolon\space}}}%
- \usebibmacro{title+stitle}}
-
-\renewbibmacro*{series+number}{%
- \iffieldundef{series}%
- {}%
- {\printfield{series}\clearfield{series}\setunit*{\addspace}\printfield{number}}%
-}
-
-\renewbibmacro*{title}{%
- \iffieldequalstr{entrytype}{thesis}%
- {\usebibmacro{mla:title:thesis}}%
- {\iffieldequalstr{entrytype}{unpublished}%
- {\usebibmacro{mla:title:unpublished}}%
- {\usebibmacro{title+stitle}}}}%
-
-\renewbibmacro*{publisher+location+date}{%
- % \printlist{location}% platypus - removed for 1.9... add an option to 2.0 for printing location
- % \iflistundef{publisher}%
- % {\setunit*{\addcomma\space}}%
- % {\setunit*{\addcolon\space}}%
- \printlist{publisher}%
- \newunit%
- \ifbool{mla@nodate}{\printtext{n.d.}}%
- \printdate%
- \newunit}
-
-\newbibmacro*{mla:title:unpublished}{%
- \ifthenelse{\iffieldundef{author} \AND \iffieldundef{nameaddon}}%
- {\unspace}%
- {}%
- \iffieldundef{title}%
- {}%
- {\printtext[title:article]{%
- \printfield[noformat]{title}%
- \setunit{\subtitlepunct}%
- \printfield[noformat]{subtitle}}}%
- \newunit
- \printtext[title:book]{%
- \printfield[noformat]{booktitle}%
- \setunit{\subtitlepunct}%
- \printfield[noformat]{booksubtitle}}%
- \newunit
- \ifcitation%
- {\printfield[mla:lowercase]{titleaddon}}%
- {\printfield{titleaddon}}%
- \newunit}
-
-\newbibmacro*{name:first-last:andothers}{%
- \ifthenelse{\value{listcount}=\value{liststop}\AND
- \ifmorenames}
- {\ifnum\value{liststop}>1 \finalandcomma\fi
- \addspace\bibstring{andothers}}
- {}}
-
-\newbibmacro*{mla:title:thesis}{%
- \iffieldundef{title}%
- {}%
- {\iffieldequalstr{entrysubtype}{published}%
- {\printtext[title:book]{%
- \printfield[noformat]{title}%
- \setunit{\subtitlepunct}%
- \printfield[noformat]{subtitle}}}%
- {\printtext[title:\strfield{entrytype}]{%
- \printfield[noformat]{title}%
- \setunit{\subtitlepunct}%
- \printfield[noformat]{subtitle}}}%
- \newunit%
- \printfield{titleaddon}%
- \newunit\newblock}}
-
-\newbibmacro*{mla:thesis:type}{%
- \iffieldundef{type}%
- {\printtext[mla:capital]{\bibstring{phdthesis}}}%
- {\usebibmacro{mla:all:type}}}%
-
-\newbibmacro*{mla:all:type}{%
- \ifbibstring{\thefield{type}}%
- {\printtext[mla:capital]{\bibstring{\thefield{type}}}}%
- {\printtext[mla:capital]{\printfield{type}}}}%
-
-\newbibmacro*{mla:all:type:foot}{%
- \ifbibstring{\thefield{type}}%
- {\printtext[noformat]{\bibstring{\thefield{type}}}}%
- {\printtext[noformat]{\printfield{type}}}}%
-
-\renewbibmacro*{maintitle+title}{%
- \usebibmacro{title}%
- \newunit%
- \iffieldsequal{maintitle}{title}%
- {\clearfield{maintitle}%
- \clearfield{mainsubtitle}%
- \clearfield{maintitleaddon}}%
- {}%
- \iffieldundef{volume}%
- {\usebibmacro{maintitle}}%
- {}%
- \iffieldundef{maintitle}%
- {\printfield{volume}\clearfield{volume}}%
- {}%
- \newunit}
-
-\renewbibmacro*{maintitle+booktitle}{%
- \usebibmacro{booktitle}%
- \printunit*{\addperiod\space}%
- \iffieldundef{maintitle}%
- {}%
- {\usebibmacro{maintitle}%
- \newunit%
- \iffieldundef{volume}%
- {}%
- {\printfield{volume}%
- \printfield{part}%
- \setunit{\addcolon\space}}}%
- \printunit*{\addperiod\space}}
-
-\renewbibmacro*{booktitle}{%
- \ifboolexpr{
- test {\iffieldundef{booktitle}}
- and
- test {\iffieldundef{booksubtitle}}
- }
- {\usebibmacro{title}}
- {\printtext[booktitle]{%
- \printfield[titlecase]{booktitle}%
- \setunit{\subtitlepunct}%
- \printfield[titlecase]{booksubtitle}}%
- \newunit}%
- \printfield{booktitleaddon}}
-
-\newbibmacro*{mla:proceedings:booktitle}{%
- \usebibmacro{booktitle}%
- \newunit%
- \iffieldundef{eventtitle}%
- {}%
- {\printtext[default]{%
- \bibstring{proceedings}\addspace\bibstring{ofseries}\addspace%
- \printfield[default]{eventtitle}\isdot}}%
- \setunit*{\isdot\addcomma\addspace}%
- \printlist{organization}%
- \newunit%
- \printeventdate%
- \newunit%
- \printlist{institution}%
- \newunit%
- \printfield{venue}}
-
-\newbibmacro*{title+stitle}{%
- \iffieldundef{title}%
- {\ifthenelse{%
- \iffieldequalstr{entrytype}{suppbook}%
- \OR%
- \iffieldequalstr{entrytype}{suppcollection}}%
- {}%
- {\printtext[title:\strfield{entrytype}]{%
- \printfield[noformat]{booktitle}%
- \setunit*{\subtitlepunct}%
- \printfield[noformat]{booksubtitle}}}}%
- {\printtext[title:\strfield{entrytype}]{%
- \printfield[noformat]{title}%
- \setunit*{\subtitlepunct}%
- \printfield[noformat]{subtitle}}}%
- \printunit{\addperiod\space}%
- \printfield[noformat]{titleaddon}%
- \newunit%
- \usebibmacro{byauthor}%
- \iffieldundef{origtitle}%
- {\usebibmacro{mla:reprint}}%
- {}%
-}%
-
-\newbibmacro*{title:incollection:italics}{%
- \iffieldundef{title}%
- {}%
- {\printtext[title:book]{%
- \printfield[noformat]{title}%
- \setunit*{\subtitlepunct}%
- \printfield[noformat]{subtitle}}%
- \newunit%
- \printfield[noformat]{titleaddon}%
- \newunit%
- \setbool{bbx@mla-incollection}{true}\usebibmacro{mla:reprint}\setbool{bbx@mla-incollection}{false}%
- \newunit\newblock}}
-
-\newbibmacro*{mla:article:journal+issuetitle}{%
- \usebibmacro{issue}%
- \newunit\newblock%
- \iffieldundef{issuetitle}%
- {}%
- {\usebibmacro{byeditor+others}%
- \newunit\newblock%
- \bibstring{specissue}\setunit*{\addspace}}%
- \ifthenelse{\iffieldequalstr{entrytype}{periodical} \AND \iffieldundef{journaltitle}}%
- {\usebibmacro{periodical}}%
- {\usebibmacro{journal}}%
- \ifthenelse{\iffieldequalstr{entrytype}{online}}{\usebibmacro{mla:online}}{\setunit*{\addspace}}%
- \ifthenelse{\iffieldequalstr{entrysubtype}{newspaper} \or \iffieldequalstr{entrysubtype}{magazine} \or \iffieldequalstr{entrytype}{online}}%
- {\printlist[brackets]{location}%
- \newunit%
- \printtext{\printdate}%
- \newunit%
- \printfield{version}%
- \newunit%
- \printfield[mla:newspaper:section]{chapter}%
- }%
- {\printfield{series}\clearfield{series}%
- \newunit%
- \printfield{volume}%
- \newunit%
- \printfield{number}\clearfield{number}%
- \newunit%
- \usebibmacro{issue+date}%
- \newunit\newblock
- \newunit}%
-}
-
-\newbibmacro*{mla:online}{%
- \iffieldundef{maintitle}%
- {}%
- {\printtext[maintitle]{%
- \printfield[titlecase]{maintitle}%
- \setunit{\subtitlepunct}%
- \printfield[titlecase]{mainsubtitle}}}%
- \newunit\newblock%
- \printlist{publisher}%
- \newunit%
-}
-
-\renewbibmacro*{journal+issuetitle}{%
- \usebibmacro{journal}%
- \setunit*{\addspace}%
- \ifthenelse{\iffieldequalstr{entrysubtype}{newspaper} \or \iffieldequalstr{entrysubtype}{magazine}}%
- {\printlist[brackets]{location}%
- \printtext{\printdate}%
- \newunit%
- \printfield{version}%
- \newunit%
- \printfield[mla:newspaper:section]{chapter}%
- }%
- {\printfield{series}\clearfield{series}%
- \setunit{\addspace}%
- \printfield{volume}%
- \newunit%
- \printfield{number}\clearfield{number}%
- \newunit%
- \usebibmacro{mla:isbn/issn+doi+eprint}%
- \newunit%
- \usebibmacro{issue+date}%
- \newunit\newblock
- \usebibmacro{issue}%
- \newunit}}
-
-\renewbibmacro*{issue+date}{%
- \printtext{%
- \iffieldundef{issue}
- {\usebibmacro{date}}
- {\printfield{issue}%
- \setunit*{\addspace}%
- \usebibmacro{date}}}%
- \newunit}
-
-\renewbibmacro{finentry}{%
- \finentry%
- \iffieldundef{annotation}%
- {}%
- {\ifbool{bbx@annotation}%
- {\begin{quotation}\noindent%
- \printfield{annotation}%
- \end{quotation}}%
- {}}%
-}
-
-% \newbibmacro{publimedium}{%
-% \ifbool{bbx@publimedium}%
-% {\printfield[mla:capital]{howpublished}%
-% \ifthenelse{\iffieldundef{howpublished}\AND\boolean{bbx@guessmedium}}%
-% {\ifthenelse{\iffieldundef{url}\AND\iffieldundef{eprinttype}}%
-% {\printtext[mla:publimedium]{\bibstring{print}}}%
-% {\iffieldundef{eprinttype}%
-% {\printfield{eprint}}%
-% {\printfield[eprint:\strfield{eprinttype}]{eprint}}%
-% \newunit%
-% \usebibmacro{url+urldate}%
-% }%
-% }%
-% {}%-keep-blank
-% \newunit%
-% \usebibmacro{series+number}}%
-% \newunit%
-% \usebibmacro{mla:reprint}%
-% {}%-keep-blank
-% }
-
-\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}}
-
-\DeclareStyleSourcemap{
- \maps[datatype=bibtex]{
- \map{
- \step[fieldsource=publisher, match={University Press}, replace={UP}]
- \step[fieldsource=publisher, match={University}, replace={U}]
- \step[fieldsource=publisher, match={Press}, replace={P}]
- \step[fieldsource=publisher, match=\regexp{Company|Co\.|Corporation|Corp\.|Incorporated|Inc\.|Limited|Ltd\.}, replace={}]
- \step[fieldsource=url, match=\regexp{http(s)?://}, replace={}]
- }
- \map{% JSTOR
- \step[fieldsource=url, match={jstor.org}, final]
- \step[fieldset=eprint, fieldvalue={JSTOR}]
- % \step[fieldset=urldate, null]
- }
- \map{% Project Muse
- \step[fieldsource=url, match={muse.jhu.edu}, final]
- \step[fieldset=eprint, fieldvalue={Project Muse}]
- % \step[fieldset=urldate, null]
- }
- \map{% Adelaide eBooks
- \step[fieldsource=url, match={ebooks.adelaide.edu.au}, final]
- \step[fieldset=eprint, origfieldval]
- \step[fieldset=eprinttype, fieldvalue={adelaide}]
- % \step[fieldset=urldate, null]
- }
- \map{% Google Books
- \step[fieldsource=url, match={books.google}, final]
- \step[fieldset=eprint, fieldvalue={Google Books}]
- % \step[fieldset=urldate, null]
- }
- \map{% EBSCO - Academic Search Complete
- \step[fieldsource=url, match={db=a9h}, final]
- \step[fieldset=eprint, fieldvalue={Academic Search Complete}]
- % \step[fieldset=urldate, null]
- }
- \map{% EBSCO - LexisNexis Academic
- \step[fieldsource=url, match={db=fdcaae48}, final]
- \step[fieldset=eprint, fieldvalue={LexisNexis Academic}]
- % \step[fieldset=urldate, null]
- }
- \map{% EBSCO - MLA Database
- \step[fieldsource=url, match={db=mzh}, final]
- \step[fieldset=eprint, fieldvalue={MLA International Bibliography}]
- % \step[fieldset=urldate, null]
- }
- \map{
- \step[fieldsource=url, match=\regexp{dx.doi.org/(.+)}, fieldtarget=doi]
- \step[fieldsource=doi, match=\regexp{http(s)?://dx.doi.org/(.+)}, replace=\regexp{$1}]
- \step[fieldsource=doi, match=\regexp{dx.doi.org/(.+)}, replace=\regexp{$1}]
- }
- \map{ % removes url + urldate field from all entries that have a doi field
- \step[fieldsource=doi, final]
- \step[fieldset=url, null]
- \step[fieldset=urldate, null]
- }
- % \map{ % removes url + urldate field from all entries that have an eprint field
- % \step[fieldsource=eprint, final]
- % \step[fieldset=urldate, null]
- % }
- }
-}
-
-\endinput
+% This file exists just to help avoid any breakage when updating from older versions of biblatex-mla.
+\ProvidesFile{mla-new.bbx}[2021/06/07 v2.0 biblatex citation style]
+\RequireBibliographyStyle{mla}
\endinput
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-mla/mla-new.cbx b/macros/latex/contrib/biblatex-contrib/biblatex-mla/mla-new.cbx
index 21923bd97a..6f5d00babf 100644
--- a/macros/latex/contrib/biblatex-contrib/biblatex-mla/mla-new.cbx
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-mla/mla-new.cbx
@@ -1,834 +1,6 @@
-% mla.cbx, v1.9 2016/11/01 * compatible with biblatex 3.4
-% Maintained at <https://github.com/jmclawson/biblatex-mla> by James Clawson.
-%
-% Feel free to improve, redistribute, and adapt to your own ends. Please share improvements in formatting and MLA standards compliance back to James Clawson: <clawson@gmail.com>.
-%
-% This material is subject to the LaTeX Project Public License. See http://www.ctan.org/tex-archive/help/Catalogue/licenses.lppl.html for the details of that license.
-
-\ProvidesFile{mla-new.cbx}[2016/11/01 v1.9 biblatex citation style]
-
-\newboolean{cbx@firstlonghand}%
-\DeclareBibliographyOption{firstlonghand}[true]{\setboolean{cbx@firstlonghand}{#1}}
-\newboolean{cbx@nofullfootnote}%
-\DeclareBibliographyOption{nofullfootnote}[true]{\setboolean{cbx@nofullfootnote}{#1}}
-
-\DeclareBibliographyOption{mancitepar}[true]{%
- \ifstrequal{#1}{true}{%
- \let\mypkg@@everypar\everypar
- \newtoks\mypkg@everypar
- \mypkg@everypar\expandafter{\the\everypar}
- \mypkg@@everypar{\mypkgs@ownstuff\the\mypkg@everypar}
- \def\mypkgs@ownstuff{%
- \mancite}%
- \let\everypar\mypkg@everypar
- }{}}
-
-% The following is taken from biblatex-chicago-notes-df for parity of feature set. I don't like the naming of the option there ("strict"), so even though consistency trumps (or defines) clarity, I changed the name for now.
-\DeclareBibliographyOption{footnoterulestrict}[true]{% 0.7 renamed
- \let\splitfootnoterule\footnoterule
- \renewcommand\footnoterule{}%
- \advance\skip\footins 4\p@\@plus2\p@\relax
- \gdef\split@prev{0}
- \let\pagefootnoterule\footnoterule
- \def\footnoterule{\relax
- \ifnum\split@prev=\z@
- \pagefootnoterule
- \else
- \splitfootnoterule
- \fi
- \xdef\split@prev{\the\insertpenalties}%
- }}
-
-\ExecuteBibliographyOptions{citetracker=true,ibidtracker=constrict,opcittracker=constrict,singletitle,autocite=inline,uniquename=init,hyperref=true,useprefix=true,firstlonghand,annotation=false,loccittracker=strict,noremoteinfo=true,date=long,urldate=long,mancitepar=false,datezeros=false}%
-
-\newbool{cbx@named}%
-\newbool{cbx@mlafootnotes}%
-\newbool{cbx@hyperpages}%
-
-\newbool{cbx@mladraft}%
-\DeclareBibliographyOption{mladraft}[true]{%
- \setboolean{cbx@mladraft}{#1}}
-
-\urlstyle{same}
-
-\newbibmacro*{cite:init}{%
- \global\let\cbx@tempa=\empty
- \global\undef\cbx@lasthash}
-
-\renewcommand*{\citereset}{%
- \usebibmacro{cite:reset}
- \@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}}
-
-\InitializeCitationStyle{%
- \usebibmacro{cite:reset}%
- \@expandtwoargs\in@{,draft,}{,\@classoptionslist,}%
- \ifin@%
- \ExecuteBibliographyOptions{mladraft}% draft option present
- \fi
- \long\def\mlasymbolfootnote#1{\begingroup\def%
- \thefootnote{\fnsymbol{footnote}}\footnote[0]{#1}\endgroup}%
- \newcounter{mladraftnote}}
-
-\OnManualCitation{%
- \usebibmacro{cite:reset}%
- \global\let\cbx@lastpostnote=\empty}
-
-\newbibmacro*{cite:reset}{%
- \global\undef\cbx@lasthash}%
-
-\newbibmacro*{cite:save}{%
- \savefield{entrykey}{\cbx@lastkey}%
- \savefield{namehash}{\cbx@lasthash}%
- \savefieldcs{entrykey}{cbx@lastkey@\thefield{namehash}}%
- \csxdef{cbx@lastcite@\thefield{entrykey}}{\the\value{instcount}}}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%% In-Line Citations %%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\newbibmacro*{cite:mla}{%
- \bibhypertarget{cite\the\value{instcount}}{%
- \ifciteseen%
- {\usebibmacro{cite:mla:seen}}
- {\usebibmacro{cite:mla:unseen}\usebibmacro{cite:save}}%
- \global\boolfalse{cbx@mlafootnotes}}}
-
-\newbibmacro*{cite:mla:unseen}{%
- \ifbool{cbx@firstlonghand}
- {\usebibmacro{cite:mla:noshorthand}}%
- {\usebibmacro{cite:mla:seen}}}
-
-\newbibmacro*{cite:mla:seen}{%
- \iffieldundef{shorthand}%
- {\usebibmacro{cite:mla:noshorthand}}%
- {\usebibmacro{cite:mla:shorthand}%
- \savefield{namehash}{\cbx@lasthash}}}
-
-\newbibmacro*{cite:mla:noshorthand}{%
- \ifciteibid%
- {\ifbool{cbx@mlafootnotes}%
- {\usebibmacro{cite:mla:noibid}\usebibmacro{cite:save}}%
- {\usebibmacro{cite:ibid}}}%
- {\usebibmacro{cite:mla:noibid}\usebibmacro{cite:save}}}%
-
-\newbibmacro*{cite:mla:noibid}%
- {\global\boolfalse{cbx@hyperpages}%
- \ifthenelse{\iffieldequals{namehash}{\cbx@lasthash}}%
- {\usebibmacro{cite:idem}%
- \usebibmacro{cite:mla:title}}%
- {\ifnameundef{labelname}%
- {\global\boolfalse{cbx@named}\usebibmacro{cite:mla:title}}%
- {\ifthenelse{\iffieldequalstr{entrytype}{incollection} \or \iffieldequalstr{entrytype}{inreference} \or \iffieldequalstr{entrytype}{review}} %
- {\ifnameundef{author}%
- {\global\boolfalse{cbx@named}%
- \usebibmacro{cite:mla:title}}%
- {\usebibmacro{cite:name}%
- \usebibmacro{cite:mla:title}\setunit{\addspace}}}%
- {\usebibmacro{cite:name}%
- \usebibmacro{cite:mla:title}}}}}%
-
-\newbibmacro*{cite:mla:shorthand}{%
- \ifciteibid%
- {\ifbool{cbx@mlafootnotes}%
- {\printtext[bibhyperref]{%
- \printfield[citetitle:\strfield{entrytype}]{shorthand}}\setunit{\addspace}}%
- {\usebibmacro{cite:ibid}}}%
- {\global\boolfalse{cbx@hyperpages}\printtext[bibhyperref]{%
- \printfield[citetitle:\strfield{entrytype}]{shorthand}}\setunit{\addspace}}}
-
-\newbibmacro*{cite:name}{%
- \ifsingletitle%
- {\printtext[bibhyperref]{%
- \printnames{labelname}}%
- \savefield{namehash}{\cbx@lasthash}%
- \global\booltrue{cbx@named}}%
- {\printnames{labelname}%
- \savefield{namehash}{\cbx@lasthash}%
- \global\booltrue{cbx@named}}}%
-
-\newbibmacro*{cite:mla:title}{%
- \ifnameundef{labelname}%
- {\printtext[bibhyperref]{%
- \printfield[citetitle:\strfield{entrytype}]{labeltitle}}}%
- {\ifsingletitle%
- {}%
- {\usebibmacro{cite:mla:title:internal}}}%
- \ifthenelse{\iffieldequalstr{entrytype}{review}%
- \and\ifnameundef{author}%
- \and\iffieldundef{title}}%
- {\printtext[bibhyperref]%
- {\printtext{\bibcpstring{reviewof}%
- \setunit{\addspace}%
- \printfield{booktitle}}}}%
- {}%
- \setunit{\addspace}}%
-
-\newbibmacro*{cite:mla:title:internal}{%
- \ifbool{cbx@named}{\setunit{\addcomma\addspace}}{}%
- \iffieldundef{title}%
- {\iffieldequalstr{entrytype}{review}%
- {\printtext[bibhyperref]%
- {\printtext{\bibcpstring{reviewof}%
- \setunit{\addspace}%
- \printfield{booktitle}}}}%
- {\ifthenelse{\iffieldequalstr{entrytype}{suppbook}%
- \OR\iffieldequalstr{entrytype}{suppcollection}}%
- {\printtext[bibhyperref]{%
- \printfield[mla:capital]{entrysubtype}}}%
- {}}}%
- {\printtext[bibhyperref]{%
- \printfield[citetitle:\strfield{entrytype}]{labeltitle}}}}%
-
-%%%%%%%%%%% for ibid, idem, opcit %%%%%%%%
-
-\newbibmacro*{cite:idem}{%
- \ifsingletitle%
- {\usebibmacro{cite:name}}%
- {\global\boolfalse{cbx@named}}}
-
-\newbibmacro*{cite:opcit}{%
- \usebibmacro{cite:mla:title}\setunit{\addspace}}
-
-\newbibmacro*{cite:ibid}{%
- \iffieldundef{postnote}%
- {\usebibmacro{cite:mla:noibid}}%
- {\global\booltrue{cbx@hyperpages}}%
- \usebibmacro{cite:save}%
- \iffieldundef{prenote}%
- {}%
- {\usebibmacro{cite:mla:noibid}\usebibmacro{cite:reset}}}%
-
-\renewcommand*{\postnotedelim}{\addspace}%
-
-\renewbibmacro*{postnote}{%
- \iffieldundef{postnote}
- {}
- {\setunit{\addspace}%
- \ifbool{cbx@hyperpages}%
- {\printtext[bibhyperref]{\printfield[ibidpostnote]{postnote}}}%
- {\printfield[ibidpostnote]{postnote}}}}%
-
-\newbibmacro*{locpostnote}{%
- \ifbool{cbx@mladraft}%
- {\ifbool{cbx@hyperpages}%
- {\printtext[mlarepeatedcites]{%
- \printtext[bibhyperref]{\printfield[ibidpostnote]{postnote}}}}%
- {\printtext[mlarepeatedcites]{%
- \printfield[ibidpostnote]{postnote}}}%
- \ifthenelse{\value{mladraftnote}<2}%
- {\mlasymbolfootnote{\addtocounter{mladraftnote}{4}%
- $\clubsuit$ It is best to cite once at the end %
- of a passage quoting a single page range.}}%
- {}}%
- {\usebibmacro{postnote}}}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%% Footnote Citations %%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\newbibmacro*{cite:mla:foot}{%
- \ifciteseen%
- {\usebibmacro{cite:mla:seen}}%
- {\ifbool{cbx@nofullfootnote}%
- {\usebibmacro{cite:mla:seen}}%
- {\usedriver{}{footcite:\strfield{entrytype}}}%
- }}
-
-\newbibmacro*{cite:foot:name}{%
- \global\boolfalse{cbx@named}%
- \usebibmacro{cite:foot:author/editor}%
- \savefield{namehash}{\cbx@lasthash}}%
-
-\newbibmacro*{cite:foot:author:review}{%
- \global\boolfalse{cbx@named}%
- \ifnameundef{author}%
- {}%
- {\usebibmacro{cite:foot:author}%
- \savefield{namehash}{\cbx@lasthash}%
- \global\booltrue{cbx@named}%
- }}%
-
-\newbibmacro*{cite:foot:author/editor}%
-{\ifthenelse{\ifuseauthor\AND\NOT\ifnameundef{author}}%
- {\usebibmacro{cite:foot:author}}%
- {\usebibmacro{cite:foot:editor}}}%
-
-\newbibmacro*{cite:foot:author}{%
- \ifbool{bbx@totalnames}%
- {\printnames[byauthor][-\value{listtotal}]{author}}%
- {\printnames[byauthor]{author}}%
- \clearname{author}\global\booltrue{cbx@named}%
- \printfield{nameaddon}}
-
-\newbibmacro*{cite:foot:editor}{%
- \ifthenelse{\ifuseeditor\AND\NOT\ifnameundef{editor}}%
- {\ifbool{bbx@totalnames}%
- {\printnames[byeditor][[-\value{listtotal}]]{editor}}%
- {\printnames[byeditor]{editor}}%
- \setunit*{\addcomma\space}%
- \usebibmacro{editorstrg}%
- \clearname{editor}\global\booltrue{cbx@named}}%
- {\ifusetranslator%
- {\printnames[byeditor]{translator}%
- \setunit*{\addcomma\space}%
- \usebibmacro{translatorstrg}%
- \clearname{translator}\global\booltrue{cbx@named}}%
- {}%
- }}%
-
-\newbibmacro*{cite:foot:byauthor:incollection}{%
- \ifthenelse{\ifuseauthor\OR%
- \ifnameundef{author}\OR%
- \ifnamesequal{author}{bookauthor}}%
- {}%
- {\biblcstring{byauthor}\addspace%
- \printnames[byauthor]{author}}}
-
-\newbibmacro*{cite:foot:byauthor}{%
- \ifthenelse{\ifuseauthor\OR%
- \ifnameundef{author}}%
- {}%
- {\bibstring{byauthor}\addspace\printnames[byauthor]{author}}}
-
-\newbibmacro*{cite:foot:bybookauthor}{%
- \ifthenelse{\ifnameundef{bookauthor}\OR%
- \(\ifnamesequal{author}{bookauthor}\AND\ifuseauthor\)}%
- {}%
- {\bibstring{byauthor}\addspace\printnames[byauthor]{bookauthor}}}
-
-\DeclareBibliographyDriver{footcite:booklet}{%
- \usedriver{}{footcite:book}}
-
-\DeclareBibliographyDriver{footcite:collection}{%
- \usedriver{}{footcite:book}}
-
-\DeclareBibliographyDriver{footcite:reference}{%
- \usedriver{}{footcite:book}}
-
-\DeclareBibliographyDriver{footcite:book}{%
- \usebibmacro{cite:foot:name}%
- \ifbool{cbx@named}% 0.7.1
- {\setunit{\newunitpunct}}%
- {\setunit{}}%
- \usebibmacro{cite:foot:title}%
- \newunit%
- \usebibmacro{cite:foot:byauthor}%
- \newunit%
- \usebibmacro{cite:foot:byeditor}%
- \newunit%
- \usebibmacro{cite:foot:bytranslator}%
- \newunit%
- \printfield{edition}%
- \newunit%
- \iffieldundef{maintitle}%
- {\printfield{volume}%
- \printfield{part}}%
- {}%
- \newunit%
- \printfield{volumes}%
- \newunit%
- \usebibmacro{series+number}%
- \setunit{\addspace}%
- \usebibmacro{cite:foot:publisher+location+year}}
-
-\newbibmacro*{cite:foot:publisher+location+year}{%
- \printtext[parens]{%
- \printfield[noformat]{origyear}%
- \setunit*{\addsemicolon\addspace}%
- \printlist{location}%
- \iflistundef{publisher}%
- {\setunit*{\addspace}}%
- {\setunit*{\addcolon\space}}%
- \printlist{publisher}%
- \newunit%
- \printfield{year}}}
-
-\DeclareBibliographyDriver{footcite:article}{%
- \usebibmacro{cite:foot:name}%
- \newunit%
- \usebibmacro{cite:foot:title}%
- \newunit%
- \usebibmacro{cite:foot:byauthor:incollection}%
- \newunit%
- \usebibmacro{cite:foot:bytranslator}%
- \newunit%
- \usebibmacro{journal+issuetitle}%
- \newunit%
- \iffieldundef{url}{}{\usebibmacro{cite:foot:url+urldate}}%
- \setunit{\addcolon\addspace}%
- \iffieldundef{postnote}%
- {\printfield{pages}}%
- {}}%
-
-\newbibmacro*{cite:foot:url+urldate}{%
- \printtext{\biburldatelong}%
- \setunit{\addspace}%
- \printfield{url}}
-
-\DeclareBibliographyDriver{footcite:inreference}{%
- \usedriver{}{footcite:incollection}}
-
-\DeclareBibliographyDriver{footcite:incollection}{%
- \usebibmacro{cite:foot:name}%
- \ifbool{cbx@named}% 0.7.1
- {\setunit{\newunitpunct}}%
- {\setunit{}}%
- \ifthenelse{%
- \iffieldequalstr{entrysubtype}{book}%
- \OR%
- \iffieldequalstr{entrysubtype}{play}}%
- {\usebibmacro{cite:foot:title:incollection:italics}}%
- {\usebibmacro{cite:foot:title}}%
- \newunit%
- \printfield[mla:lowercase]{titleaddon}%
- \newunit%
- \usebibmacro{cite:foot:byauthor:incollection}%
- \newunit%
- \ifbool{bbx@uniquetranslator}%
- {\usebibmacro{cite:foot:bytranslator}\clearname{translator}}%
- {}%
- \ifthenelse{%
- \iffieldequalstr{entrysubtype}{book}%
- \OR%
- \iffieldequalstr{entrysubtype}{play}}%
- {\setunit{\addcomma\addspace\bibstring{in}\addspace}}%
- {\newunit}%
- \printtext[citetitle:book]{%
- \printfield[noformat]{booktitle}%
- \setunit{\subtitlepunct}%
- \printfield[noformat]{booksubtitle}%
- }%
- \usebibmacro{cite:foot:bybookauthor}%
- \newunit%
- \usebibmacro{cite:foot:byeditor}%
- \newunit%
- \iffieldsequal{year}{edition}%
- {\printfield{year}~\bibstring{edition}\clearfield{year}}%
- {\printfield[foot:cite:edition:format]{edition}\isdot}%
- \newunit%
- \iffieldundef{maintitle}%
- {\printfield{volume}%
- \printfield{part}}%
- {}%
- \newunit%
- \printfield{volumes}%
- \newunit%
- \usebibmacro{series+number}%
- \setunit{\addspace}%
- \iffieldundef{year}%
- {}%
- {\usebibmacro{cite:foot:publisher+location+year}}%
- \setunit{\addspace}%
- \iffieldundef{postnote}%
- {\printfield{pages}}%
- {}%
- }%
-
-\DeclareBibliographyDriver{footcite:phdthesis}{%
- \usedriver{}{footcite:thesis}}
-
-\DeclareBibliographyDriver{footcite:thesis}{%
- \usebibmacro{cite:foot:name}%
- \newunit%
- \usebibmacro{title}%
- \newunit%
- \ifbibstring{\thefield{type}}%
- {\printtext[default]{\bibstring{\thefield{type}}}}%
- {\printtext[default]{\printfield{type}}}%
- \newunit%
- \printlist{institution}%
- \newunit%
- \iffieldequalstr{entrysubtype}{published}%
- {\printfield{origyear}\clearfield{origyear}}%
- {\printfield{year}}%
- \newunit%
- \iffieldequalstr{entrysubtype}{published}%
- {\usebibmacro{series+number}%
- \setunit{\addspace}%
- \usebibmacro{cite:foot:publisher+location+year}}%
- {}}
-
-\DeclareBibliographyDriver{footcite:review}{%
- \usebibmacro{cite:foot:author:review}%
- \ifbool{cbx@named}%
- {\setunit{\newunitpunct}}%
- {\setunit{}}%
- \usebibmacro{cite:foot:title}%
- \setunit*{\newunitpunct}%
- \printtext[bibhyperref]%
- {\bibstring{reviewof}\addspace\printfield{booktitle}}%
- \newunit%
- \ifnameundef{bookauthor}%
- {\printtext[reviewededitor]{\printnames[default]{editor}}}%
- {\printtext[reviewedauthor]{\printnames[default]{bookauthor}}}%
- \newunit%
- \usebibmacro{journal+issuetitle}%
- \newunit%
- \iffieldundef{url}{}{\usebibmacro{cite:foot:url+urldate}}%
- \setunit{\addcolon\addspace}%
- \iffieldundef{postnote}%
- {\printfield{pages}}%
- {}}%
-
-\DeclareBibliographyDriver{footcite:video}{%
- \setbool{cbx@named}{false}%
- \ifnamesequal{labelname}{author}%
- {\usebibmacro{mla:video:name:first:footnote}{author}%
- \setbool{cbx@named}{true}}%
- {}%
- \ifnamesequal{labelname}{editor}%
- {\usebibmacro{mla:video:name:first:footnote}{editor}%
- \setbool{cbx@named}{true}}%
- {}%
- \ifbool{cbx@named}%
- {\setunit{\newunitpunct}}%
- {\setunit{}}%
- \printtext[bibhyperref]{\printfield{title}}%
- \newunit%
- \ifnameundef{bookauthor}%
- {}%
- {\printtext[reviewedauthor]{\printnames[byeditor]{bookauthor}}}%
- \newunit%
- \usebibmacro{mla:video:name:second:footnote}{author}%
- \newunit%
- \usebibmacro{mla:video:name:second:footnote}{editor}%
- \newunit%
- \usebibmacro{mla:video:name:second:footnote}{namea}%
- \newunit%
- \usebibmacro{mla:video:name:second:footnote}{nameb}%
- \newunit%
- \usebibmacro{mla:video:name:second:footnote}{namec}%
- \newunit%
- \printfield{origyear}%
- \newunit%
- \printfield{howpublished}%
- \newunit%
- \printlist{publisher}%
- \newunit%
- \printfield{year}%
- \addperiod}
-
-\DeclareBibliographyDriver{footcite:suppcollection}{%
- \usedriver{}{footcite:suppbook}}
-
-\DeclareCiteCommand{\titleandsubtitle}
- {\boolfalse{citetracker}%
- \boolfalse{pagetracker}%
- \usebibmacro{prenote}}
- {\indexfield{indextitle}%
- \printtext[citetitle]{%
- \printfield[noformat]{title}%
- \iffieldundef{subtitle}{}{\subtitlepunct}%
- \printfield[noformat]{subtitle}}}%
- {\multicitedelim}
- {\usebibmacro{postnote}}
-
-\DeclareBibliographyDriver{footcite:suppbook}{%
- \usebibmacro{cite:foot:name}%
- \newunit%
- \usebibmacro{cite:foot:title}%
- \newunit%
- \printfield{entrysubtype}%
- \newunit%
- \usebibmacro{booktitle}%
- \setunit{\newunitpunct\bibstring{bytypeauthor}\addspace}%
- \ifnamesequal{labelname}{bookauthor}%
- {\printnames[mla:last]{bookauthor}}%
- {\printnames[byauthor]{bookauthor}}%
- \newunit%
- \usebibmacro{byeditor+others}%
- \newunit%
- \printfield{edition}%
- \newunit%
- \iffieldundef{maintitle}%
- {\printfield{volume}%
- \printfield{part}}%
- {}%
- \newunit%
- \printfield{volumes}%
- \newunit%
- \usebibmacro{series+number}%
- \setunit{\addspace}%
- \usebibmacro{cite:foot:publisher+location+year}%
- \setunit{\addspace}%
- \iffieldundef{postnote}%
- {\printfield{pages}}%
- {}}
-
-\DeclareBibliographyDriver{footcite:unpublished}{%
- \usebibmacro{cite:foot:name}%
- \newunit%
- \usebibmacro{mla:title:unpublished}%
- \newunit%
- \newunit%
- \printfield{note}%
- \newunit%
- \usebibmacro{mla:all:type:foot}%
- \setunit*{\isdot\addspace}%
- \printfield{number}%
- \newunit%
- \printfield{library}%
- \setunit{\addcomma\addspace}%
- \printlist{location}%
- \newunit%
- \printfield{addendum}%
- \usebibmacro{finentry}}
-
-\DeclareBibliographyDriver{footcite:periodical}{%
- \usebibmacro{cite:foot:editor}%
- \setunit{\labelnamepunct}\newblock%
- \usebibmacro{mla:article:journal+issuetitle}%
- \newunit\newblock
- \printfield{note}%
- \setunit{\addcolon\addspace}\newblock
- \iffieldundef{postnote}%
- {\printfield{pages}}%
- {}%
- \newunit\newblock
- \usebibmacro{url+urldate}%
- \newunit\newblock
- \printfield{addendum}%
- \newunit\newblock
- \usebibmacro{pageref}%
- \usebibmacro{finentry}}
-
-\newbibmacro*{cite:foot:title}{%
- \iffieldundef{title}%
- {}%
- {\printtext[bibhyperref]{%
- \printtext[citetitle:\strfield{entrytype}]{%
- \printfield[noformat]{title}%
- \setunit{\subtitlepunct}%
- \printfield[noformat]{subtitle}}}%
- }}%
-
-\newbibmacro*{cite:foot:title:incollection:italics}{%
- \printtext[bibhyperref]{%
- \printtext[title:book]{%
- \printfield[noformat]{title}%
- \setunit{\subtitlepunct}%
- \printfield[noformat]{subtitle}}%
- }}%
-
-\newbibmacro*{cite:foot:bytranslator}{%
- \ifnameundef{translator}%
- {}%
- {\printtext[default]{\bibstring{bytranslator}\addspace%
- \printnames[cite:foot:translator]{translator}}}}
-
-\newbibmacro*{cite:foot:byeditor}{%
- \ifthenelse{\ifnameundef{editor}\OR%
- \( \iffieldequalstr{entrytype}{collection}\AND%
- \ifnameundef{author} \)}%
- {}%
- {\usebibmacro{byeditor+others}}}
-
-\newbibmacro*{mla:foot:postnote}{%
- \iffieldundef{postnote}%
- {\unspace}%
- {\unspace\addspace\printfield[footpostnote]{postnote}}%
- \usebibmacro{cite:reset}}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%% Format Declarations %%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\DeclareFieldFormat{citetitle:article}{\mkbibquote{#1}}
-\DeclareFieldFormat{citetitle:inreference}{\mkbibquote{#1}}
-\DeclareFieldFormat{citetitle:book}{\mkbibemph{#1}}
-\DeclareFieldFormat{citetitle:booklet}{\mkbibemph{#1}}%
-\DeclareFieldFormat{citetitle:collection}{\mkbibemph{#1}}%
-\DeclareFieldFormat{citetitle:reference}{\mkbibemph{#1}}%
-\DeclareFieldFormat{citetitle:incollection}{\mkbibquote{#1}}
-\DeclareFieldFormat{citetitle:online}{\mkbibquote{#1}}% 1.4.9
-\DeclareFieldFormat{citetitle:inproceedings}{\mkbibquote{#1}}
-\DeclareFieldFormat{citetitle:unpublished}{\mkbibquote{#1}}
-\DeclareFieldFormat{citetitle:thesis}{\mkbibquote{#1}}
-\DeclareFieldFormat{citetitle:video}{\mkbibemph{#1}}
-\DeclareFieldFormat{citetitle:review}{\mkbibquote{#1}}%
-\DeclareFieldFormat{mla:lowercase}{\MakeLowercase{#1}}%
-\DeclareFieldFormat{ibidpostnote}{#1}%
-\DeclareFieldFormat{footpostnote}{#1}%
-\DeclareFieldFormat{mlarepeatedcites}{\fbox{#1}%
- \marginpar{\hfill\footnotesize{$\clubsuit$}}}%
-\@ifpackagelater{biblatex}{2016/03/01}{%
- \DeclareNameFormat{cite:foot:editor}{%
- \nameparts{#1}%
- \usebibmacro{name:given-family}{\namepartfamily}{\namepartgiven}{\namepartprefix}{\partnamesuffix}%
- \usebibmacro{name:andothers}}%
- \DeclareNameFormat{cite:foot:translator}{%
- \nameparts{#1}%
- \usebibmacro{name:given-family}{\namepartfamily}{\namepartgiven}{\namepartprefix}{\partnamesuffix}%
- \usebibmacro{name:andothers}}%
-}{%
- \DeclareNameFormat{cite:foot:editor}{%
- \usebibmacro{name:first-last}{#1}{#3}{#5}{#7}%
- \usebibmacro{name:andothers}}%
- \DeclareNameFormat{cite:foot:translator}{%
- \usebibmacro{name:first-last}{#1}{#3}{#5}{#7}%
- \usebibmacro{name:andothers}}%
-}%
-\DeclareFieldFormat{foot:cite:edition:format}{%
- \ifinteger{#1}%
- {\mkbibordinal{#1}~\bibstring{edition}}%
- {\printtext[mla:lowercase]{#1}}}
-\DeclareFieldFormat{supptotitle}%
- {\bibstring{supptotitle}\addspace\mkbibemph{#1}}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%% Cite Commands %%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\renewbibmacro*{prenote}{%
- \iffieldundef{prenote}
- {\global\undef\cbx@lastprenote}
- {\printfield{prenote}%
- \prenotedelim%
- \ifthenelse{\iffieldequals{prenote}{\cbx@lastprenote} \and \iffieldequals{entrykey}{\cbx@lastkey}}%
- {}%
- {\usebibmacro{cite:reset}}%
- \savefield{prenote}{\cbx@lastprenote}}}
-
-\DeclareCiteCommand{\parencite}[\mkbibparens]
- {\usebibmacro{prenote}}
- {\usebibmacro{citeindex}%
- \usebibmacro{cite:mla}}
- {}
- {\ifthenelse{\iffieldequals{postnote}{\cbx@lastpostnote} \and \iffieldequals{entrykey}{\cbx@lastkey}}%
- {\usebibmacro{locpostnote}}%
- {\usebibmacro{postnote}}%
- \savefield{postnote}{\cbx@lastpostnote}}%
-
-\DeclareCiteCommand*{\parencite}[\mkbibparens]
- {\global\undef\cbx@lasthash\usebibmacro{prenote}}%
- {\usebibmacro{citeindex}%
- \usebibmacro{cite:mla:starred:title}}
- {}
- {\usebibmacro{postnote}}
-
-\DeclareCiteCommand{\cite}% 1.9 added support for smart switching when used in footnote
- {\iffootnote{\iffieldundef{prenote}
- {\global\undef\cbx@lastprenote
- \printtext{See\addspace}}}
- \usebibmacro{prenote}}%
- {\usebibmacro{citeindex}%
- \usebibmacro{cite:mla}}%
- {}%
- {\usebibmacro{postnote}}
-
-\DeclareCiteCommand{\textcite}% 1.9 new
- {\iffootnote{\iffieldundef{prenote}
- {\global\undef\cbx@lastprenote
- \printtext{See\addspace}}}
- \usebibmacro{prenote}}%
- {\usebibmacro{citeindex}%
- \usebibmacro{cite:mla}}%
- {}%
- {\usebibmacro{postnote}}
-
-\DeclareCiteCommand{\headlesscite}% 1.9 added alias to starred command for Chicago compatibility
- {\iffootnote{\iffieldundef{prenote}
- {\global\undef\cbx@lastprenote
- \printtext{See\addspace}}}
- \usebibmacro{prenote}}%
- {\usebibmacro{citeindex}%
- \usebibmacro{cite:mla:starred:title}}
- {}%
- {\usebibmacro{postnote}}
-
-\DeclareCiteCommand*{\cite}% 1.9 added support for smart switching when used in footnote
- {\iffootnote{\iffieldundef{prenote}
- {\global\undef\cbx@lastprenote
- \printtext{See\addspace}}}
- \usebibmacro{prenote}}%
- {\usebibmacro{citeindex}%
- \usebibmacro{cite:mla:starred:title}}
- {}%
- {\usebibmacro{postnote}}
-
-\DeclareCiteCommand{\footcite}[\mkbibfootnote]
- {\bibsentence%
- \usebibmacro{cite:init}%
- \usebibmacro{prenote}}
- {\usebibmacro{citeindex}%
- \global\booltrue{cbx@mlafootnotes}%
- \renewcommand*{\newunitpunct}{\addcomma\space}%
- \usebibmacro{cite:mla:foot}}
- {}
- {\usebibmacro{mla:foot:postnote}}
-
-\DeclareCiteCommand{\fullcite}
- {\iffootnote{\iffieldundef{prenote}
- {\global\undef\cbx@lastprenote
- \printtext{See\addspace}}}
- \usebibmacro{prenote}}%
- {\usebibmacro{citeindex}%
- \usebibmacro{cite:mla:title}}
- {}%
- {\usebibmacro{postnote}}
-
-\DeclareCiteCommand{\headlessfullcite}
- {\iffootnote{\iffieldundef{prenote}
- {\global\undef\cbx@lastprenote
- \printtext{See\addspace}}}
- \usebibmacro{prenote}}%
- {\usebibmacro{citeindex}%
- \usebibmacro{cite:mla:starred:title}}
- {}%
- {\usebibmacro{postnote}}
-
-\newbibmacro{mla:fullcite:prenote}{%
-\citereset\renewbibmacro*{author}{%
- \ifthenelse{\ifuseauthor\AND\NOT\ifnameundef{author}}
- {\DeclareNameAlias{author}{default}\ifthenelse{\iffieldequals{namehash}{\cbx@lasthash}\AND\NOT
- \iffirstonpage}
- {\mbox{\mlanamedash\unspace\newunitpunct}}
- {\printnames{author}%
- \savefield{namehash}{\cbx@lasthash}}}
- {\let\cbx@lasthash\undefined}}}
-
-% \DeclareCiteCommand{\fullcite}
-% {\usebibmacro{mla:fullcite:prenote}\usebibmacro{prenote}}
-% {\usedriver
-% {\DeclareNameAlias{sortname}{default}\DeclareNameAlias{default}{last-first}}
-% {\thefield{entrytype}}}
-% {\multicitedelim}
-% {\usebibmacro{postnote}}
-
-\DeclareCiteCommand{\smartcite}[\iffootnote\mkbibparens\mkbibfootnote]%
- {\usebibmacro{prenote}}
- {\usebibmacro{citeindex}%
- \usebibmacro{cite:mla}}
- {\multicitedelim}
- {\usebibmacro{cite:postnote}}
-
-\newbibmacro*{cite:mla:starred:title}{%
- \ifciteibid
- {\iffieldundef{postnote}
- {\usebibmacro{cite:mla:title:alone}}
- {\global\booltrue{cbx@hyperpages}}}
- {\iffieldundef{shorthand}
- {\ifsingletitle%
- {\iffieldundef{postnote}
- {\usebibmacro{cite:mla:title:alone}}
- {\global\booltrue{cbx@hyperpages}}}%
- {\usebibmacro{cite:mla:title:alone}\setunit{\addspace}}}
- {\usebibmacro{cite:mla:shorthand}}}}
-
-\newbibmacro*{cite:mla:title:alone}{%
- \printtext[bibhyperref]{% suggested by StackExchange user Audrey
- \printfield[citetitle:\strfield{entrytype}]{labeltitle}}%
- \ifthenelse{\iffieldequalstr{entrytype}{suppbook}\and\iffieldundef{title}}%
- {\printtext[bibhyperref]{%
- \printfield[mla:capital]{entrysubtype}}}%
- {}}
+% This file exists just to help avoid any breakage when updating from older versions of biblatex-mla.
+\ProvidesFile{mla-new.cbx}[2021/06/07 v2.0 biblatex citation style]
+\RequireCitationStyle{mla}
\endinput
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-mla/mla-strict.bbx b/macros/latex/contrib/biblatex-contrib/biblatex-mla/mla-strict.bbx
new file mode 100644
index 0000000000..ce97a2b3a0
--- /dev/null
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-mla/mla-strict.bbx
@@ -0,0 +1,1337 @@
+% mla-strict.bbx, v2.0 2021/06/07 * compatible with biblatex 3.16
+% Maintained at <https://github.com/jmclawson/biblatex-mla>.
+%
+% Feel free to improve, redistribute, and adapt to your own ends. Please share improvements back to the project on GitHub or to James Clawson: <clawson@gmail.com>.
+%
+% This material is subject to the LaTeX Project Public License. See http://www.ctan.org/tex-archive/help/Catalogue/licenses.lppl.html for the details of that license.
+
+\ProvidesFile{mla-strict.bbx}[2021/06/07 v2.0 biblatex bibliography style]
+
+\RequireBibliographyStyle{standard}
+\DeclareLanguageMappingSuffix{-mla}
+
+\NewBibliographyString{byserieseditor}
+\NewBibliographyString{reviewof}
+\NewBibliographyString{specissue}
+\NewBibliographyString{phd}
+\NewBibliographyString{dphil}
+\NewBibliographyString{lic}
+\NewBibliographyString{ma}
+\NewBibliographyString{ms}
+\NewBibliographyString{msc}
+\NewBibliographyString{mphil}
+\NewBibliographyString{mlitt}
+\NewBibliographyString{manuscript}
+\NewBibliographyString{typescript}
+\NewBibliographyString{director}
+\NewBibliographyString{screenplay}
+\NewBibliographyString{adaptation}
+\NewBibliographyString{adaptor}
+\NewBibliographyString{performer}
+\NewBibliographyString{performers}
+\NewBibliographyString{composer}
+\NewBibliographyString{composedby}
+\NewBibliographyString{producer}
+\NewBibliographyString{with}
+\NewBibliographyString{proceedings}
+\NewBibliographyString{compilerandeditor}%
+\NewBibliographyString{bycompilerandeditor}%
+\NewBibliographyString{transof}%
+\NewBibliographyString{volstodate}%
+\NewBibliographyString{supptotitle}%
+\NewBibliographyString{print}%
+\NewBibliographyString{web}%
+\NewBibliographyString{generaleditor}%
+
+\setlength{\bibitemsep}{0pt}
+\renewcommand*{\mkbibnamesuffix}[1]{\addcomma\addlowpenspace#1}
+
+\DeclareNameAlias{author}{sortname}
+\@ifpackagelater{biblatex}{2016/03/01}{%
+ \DeclareNameFormat{mla:last}{\nameparts{#1}\namepartfamily}%
+ \DeclareNameFormat{default}{%
+ \nameparts{#1}%
+ \ifgiveninits{%
+ \usebibmacro{name:given-family}{\namepartfamily}{\namepartgiveni}{\namepartprefix}{\namepartsuffix}%
+ }{%
+ \usebibmacro{name:given-family}{\namepartfamily}{\namepartgiven}{\namepartprefix}{\namepartsuffix}%
+ }%
+ \usebibmacro{name:andothers}%
+ }%
+}{%
+ \DeclareNameFormat{mla:last}{#1}%
+ \DeclareNameFormat{default}{%
+ \iffirstinits{%
+ \usebibmacro{name:first-last}{#1}{#4}{#5}{#7}%
+ }{%
+ \usebibmacro{name:first-last}{#1}{#3}{#5}{#7}%
+ }%
+ \usebibmacro{name:andothers}%
+ }%
+}
+
+\defbibenvironment{bibliography}
+ {\list
+ {}
+ {\setlength{\leftmargin}{\bibhang}%
+ \setlength{\itemindent}{-\leftmargin}%
+ \setlength{\itemsep}{\bibitemsep}%
+ \setlength{\parsep}{\bibparsep}}}
+ {\endlist}
+ {\item}
+
+\DeclareFieldFormat{title:article}{\mkbibquote{#1}}%
+\DeclareFieldFormat{title:online}{\mkbibquote{#1}}%
+\DeclareFieldFormat{title:inreference}{\mkbibquote{#1}}%
+\DeclareFieldFormat{title:book}{\mkbibemph{#1}}
+\DeclareFieldFormat{title:booklet}{\mkbibemph{#1}}
+\DeclareFieldFormat{title:collection}{\mkbibemph{#1}}
+\DeclareFieldFormat{title:incollection}{\mkbibquote{#1}}%
+\DeclareFieldFormat{title:inbook}{\mkbibquote{#1}}%
+\DeclareFieldFormat{title:inproceedings}{\mkbibquote{#1}}%
+\DeclareFieldFormat{title:mvbook}{\mkbibemph{#1}}% mla-2.0
+\DeclareFieldFormat{title:patent}{\mkbibquote{#1}}
+\DeclareFieldFormat{title:thesis}{\mkbibquote{#1}}%
+\DeclareFieldFormat{title:unpublished}{\mkbibquote{#1}}%
+\DeclareFieldFormat{title:reviewedbook}{\bibstring{reviewof}\addspace\mkbibemph{#1}}%
+\DeclareFieldFormat{title:reference}{\mkbibemph{#1}}%
+\DeclareFieldFormat{isbn}{#1}%
+\DeclareFieldFormat{pages}{\mkpageprefix[bookpagination]{#1}}
+\DeclareFieldFormat[review]{volume}{#1}%
+\DeclareFieldFormat[article]{volume}{#1}%
+\DeclareListFormat[article]{location}%
+ {\unspace\mkbibbrackets{#1}\addspace}%
+\DeclareFieldFormat[article]{version}{#1\isdot}%
+\DeclareFieldFormat[incollection]{bibliography:origyear}{\openrangeformat{#1}\addperiod}%
+\DeclareFieldFormat[video]{mla:publimedium}{\MakeCapital{film}}%
+
+\DeclareFieldFormat[patent]{number}{#1}%
+
+\DeclareFieldFormat{mla:publimedium}{\MakeCapital{#1}}%
+\DeclareFieldFormat{mla:capital}{\MakeCapital{#1}}%
+\DeclareFieldFormat{url}{%
+ \ifhyperref%
+ {\href{http://#1}{\nolinkurl{#1}}}%
+ {\url{#1}}}%
+\DeclareFieldFormat{mla:lowercase}{\MakeLowercase{#1}}%
+\DeclareFieldFormat{nameaddon}{\mkbibbrackets{#1}}%
+\DeclareFieldFormat{issuetitle}{\mkbibemph{#1}}
+\DeclareFieldFormat{mla:newspaper:section}{\bibstring{section}\addspace#1}%
+\DeclareFieldFormat{library}{#1\isdot}%
+\DeclareFieldFormat{reviewededitor}{\bibstring{byeditor}\addspace#1}%
+\DeclareFieldFormat{reviewedauthor}{\bibstring{byauthor}\addspace#1}%
+\DeclareFieldFormat{title:suppbook}{\mkbibquote{#1}}
+\DeclareFieldFormat{openrangevolumes}{#1~\bibstring{volstodate}}%
+\DeclareFieldFormat{volumeof}{\bibstring{volume}~#1~\bibstring{ofseries}}%
+\DeclareFieldFormat{mla:sentence-case}{\MakeSentenceCase{#1}}%
+\DeclareFieldFormat{eprinttype}{\mkbibemph{#1}}
+\DeclareFieldFormat{eprint:arxiv}{%
+ \iffieldundef{url}{%
+ \mkbibemph{arXiv}\addcomma\space \printtext[url]{arxiv.org/abs/#1}}{%
+ \mkbibemph{arXiv}}}
+\DeclareFieldFormat{eprint:jstor}{%
+ \iffieldundef{url}{%
+ \mkbibemph{JSTOR}\addcomma\space \printtext[url]{www.jstor.org/stable/#1}}{%
+ \mkbibemph{JSTOR}}}
+\DeclareFieldFormat{eprint:hulu}{%
+ \iffieldundef{url}{%
+ \mkbibemph{Hulu}\addcomma\space \printtext[url]{www.hulu.com/watch/#1}}{%
+ \mkbibemph{Hulu}}}
+\DeclareFieldFormat{eprint:googlebooks}{%
+ \iffieldundef{url}{%
+ \mkbibemph{Google Books}\addcomma\space \printtext[url]{books.google.com/books?id=#1}}{%
+ \mkbibemph{Google Books}}}
+\DeclareFieldFormat{eprint:muse}{%
+ \iffieldundef{url}{%
+ \mkbibemph{Project Muse}\addcomma\space \printtext[url]{muse.jhu.edu/article/#1}}{%
+ \mkbibemph{Project Muse}}}
+\DeclareFieldFormat{eprint}{\emph{#1}}%
+\DeclareFieldFormat{doi}{%
+ doi\addcolon%
+ \ifhyperref%
+ {\href{https://doi.org/#1}{\nolinkurl{#1}}}%
+ {\nolinkurl{#1}}}
+
+\DeclareFieldFormat{urldate}{#1}%
+\DeclareFieldFormat[article,periodical,review]{volume}{\bibstring{volume}\ppspace#1}% volume of a journal
+\DeclareFieldFormat[article,periodical,review]{number}{\bibstring{number}\ppspace#1}% number of a journal
+
+\DeclareBibliographyAlias{artwork}{article}%
+\DeclareBibliographyAlias{audio}{article}%
+\DeclareBibliographyAlias{booklet}{book}%
+\DeclareBibliographyAlias{bookinbook}{incollection}%
+\DeclareBibliographyAlias{collection}{book}%
+\DeclareBibliographyAlias{reference}{book}%
+\DeclareBibliographyAlias{image}{article}%
+\DeclareBibliographyAlias{inbook}{incollection}%
+\DeclareBibliographyAlias{letter}{article}%
+\DeclareBibliographyAlias{manual}{book}% 2.0 ADDED √
+\DeclareBibliographyAlias{misc}{article}% 2.0 ADDED √
+\DeclareBibliographyAlias{movie}{video}% 2.0 ADDED √
+\DeclareBibliographyAlias{music}{audio}%
+\DeclareBibliographyAlias{online}{article}
+\DeclareBibliographyAlias{patent}{article}% 2.0 ADDED √
+\DeclareBibliographyAlias{report}{book}% 2.0 ADDED √
+\DeclareBibliographyAlias{suppcollection}{suppbook}%
+
+\DeclareFieldAlias[online]{maintitle}{journaltitle}
+\DeclareFieldAlias[book]{subtitle}{booksubtitle}
+\DeclareFieldAlias[book]{title}{booktitle}
+% \DeclareFieldAlias[patent]{holder}{addendum}
+
+\renewcommand*{\newunitpunct}{\addcomma\addspace}
+\renewcommand*{\multilistdelim}{/}
+\renewcommand*{\finallistdelim}{/}
+\renewcommand*{\newblockpunct}{\addperiod\addspace}
+\renewcommand*{\andothersdelim}{\ifcitation{}{\addcomma}\addspace}
+\renewcommand*{\subtitlepunct}{\ifterm{}{\addcolon}\addspace}
+
+\newboolean{bbx@mla-incollection}
+\newbool{bbx@inset}
+
+\DeclareBibliographyOption{dashed}[true]{%
+ \ifstrequal{#1}{true}
+ {\ExecuteBibliographyOptions{pagetracker}%
+ \renewbibmacro*{bbx:savehash}{\savefield{fullhash}{\bbx@lasthash}}}
+ {\ExecuteBibliographyOptions{pagetracker=false}%
+ \renewbibmacro*{bbx:savehash}{}}}
+
+\newboolean{bbx@annotation}% same as biblatex-dw
+\DeclareBibliographyOption{annotation}[true]{%
+\setbool{bbx@annotation}{#1}}
+
+\newboolean{bbx@totalnames}
+\newboolean{cbx@totalnames}
+\DeclareEntryOption{totalnames}[true]{%
+ \setbool{bbx@totalnames}{#1}\setbool{cbx@totalnames}{#1}}
+
+% for translated incollections where the collection has no shared translator
+\newboolean{bbx@uniquetranslator}%
+\DeclareEntryOption{uniquetranslator}[true]{%
+ \setbool{bbx@uniquetranslator}{#1}}
+
+\newtoggle{bbx:showlocation}% 2.0 add a global/entry toggle to show location
+\settoggle{bbx:showlocation}{false}
+\DeclareBibliographyOption{showlocation}[true]{\settoggle{bbx:showlocation}{#1}}
+\DeclareEntryOption{showlocation}[true]{\settoggle{bbx:showlocation}{#1}}
+
+\newtoggle{bbx:longdash}% 2.0 change bibnamedash default and add a toggle to revert
+\settoggle{bbx:longdash}{true}
+\DeclareBibliographyOption{longdash}[true]{\settoggle{bbx:longdash}{#1}}
+
+\newbool{bbx:gnoreminfo}%
+\setbool{bbx:gnoreminfo}{false}
+\DeclareBibliographyOption{noremoteinfo}[true]{\setbool{bbx:gnoreminfo}{#1}}
+
+\newbool{bbx:lnoreminfo}%
+\setbool{bbx:lnoreminfo}{false}
+\DeclareEntryOption{noremoteinfo}[true]{\setbool{bbx:lnoreminfo}{#1}}
+
+\newtoggle{bbx:isan}
+\DeclareBibliographyOption{isan}[true]{\settoggle{bbx:isan}{#1}}%
+
+\newtoggle{bbx:ismn}
+\DeclareBibliographyOption{ismn}[true]{\settoggle{bbx:ismn}{#1}}%
+
+\newtoggle{bbx:isrn}
+\DeclareBibliographyOption{isrn}[true]{\settoggle{bbx:isrn}{#1}}%
+
+\newtoggle{bbx:issn}
+\DeclareBibliographyOption[boolean]{issn}[true]{\settoggle{bbx:issn}{#1}}%
+
+\newboolean{mla@nodate}%
+\DeclareEntryOption{nodate}[true]{\setbool{mla@nodate}{#1}}
+
+\ExecuteBibliographyOptions{maxnames=2,datezeros=false,eprint=true}%
+
+\newrobustcmd{\openrangeformat}[1]{%
+ \begingroup%
+ \let\blx@org@rangedash=\bibrangedash%
+ \def\bibrangedash{%
+ \blx@org@rangedash%
+ \futurelet\@let@token\blx@openrangeformat}%
+ #1%
+ \endgroup}
+
+\newcommand*{\blx@openrangeformat}{%
+ \ifx\@let@token\endgroup%
+ \openrangemark%
+ \fi}
+
+\newcommand*{\openrangemark}{\mbox{ }}%
+
+\newbibmacro*{bbx:savehash}{%
+ \savefield{fullhash}{\bbx@lasthash}}
+
+\iftoggle{bbx:longdash}% MLA Handbook 9 says either is viable if used consistently
+ {\newcommand*{\mlanamedash}{\textemdash\textemdash\textemdash}}
+ {\newcommand*{\mlanamedash}{-{}-{}-}}
+
+\renewcommand*{\bibnamedash}{%
+ \iftoggle{bbx:longdash}% MLA Handbook 9 says either is viable if used consistently
+ {\printtext[noformat]{\textemdash\textemdash\textemdash}}%
+ {\printtext[noformat]{-{}-{}-}}%
+ % \printtext[noformat]{\mlanamedash}%
+ \iffieldundef{nameaddon}%
+ {\setunit{\addperiod\addspace}}%
+ {\setunit{\nopunct}}}%
+
+\renewbibmacro*{author}{%
+ \ifthenelse{\ifuseauthor\AND\NOT\ifnameundef{author}}
+ {\usebibmacro{bbx:dashcheck}%
+ {\bibnamedash}%
+ {\ifbool{bbx@totalnames}%
+ {\printnames[sortname][-\value{listtotal}]{author}}
+ {\printnames{author}}%
+ \usebibmacro{bbx:savehash}}%
+ \iffieldundef{nameaddon}%
+ {}%
+ {\setunit{\addspace}%
+ \printfield{nameaddon}}%
+ \iffieldundef{authortype}%
+ {}%
+ {\newunit%
+ \usebibmacro{authorstrg}}}%
+ {\global\undef\bbx@lasthash}}
+
+\renewbibmacro*{editor}{%
+ \ifthenelse{\ifuseeditor\AND\NOT\ifnameundef{editor}}%
+ {\ifthenelse{\iffieldequals{namehash}{\bbx@lasthash}\AND\NOT
+ \iffirstonpage}%
+ {\mbox{\mlanamedash\unspace\addcomma\addspace}}%
+ {\ifbool{bbx@totalnames}%
+ {\printnames[sortname][-\value{listtotal}]{editor}}%
+ {\printnames{editor}}%
+ \newunit%
+ \savefield{namehash}{\bbx@lasthash}}%
+ \usebibmacro{editorstrg}\clearname{editor}\setunit{\addperiod\space}}%
+ {\global\undef\bbx@lasthash}}
+
+\renewbibmacro*{editor+others}{%
+ \ifthenelse{\ifuseeditor\AND\NOT\ifnameundef{editor}}%
+ {\ifthenelse{\iffieldequals{namehash}{\bbx@lasthash}\AND\NOT
+ \iffirstonpage}%
+ {\mbox{\mlanamedash\unspace\addcomma\addspace}}%
+ {\ifbool{bbx@totalnames}%
+ {\printnames[sortname][-\value{listtotal}]{editor}}%
+ {\printnames[sortname]{editor}}%
+ \newunit%
+ \savefield{namehash}{\bbx@lasthash}}%
+ \usebibmacro{editor+othersstrg}\clearname{editor}\clearfield{editortype}}%
+ {\global\undef\bbx@lasthash}}
+
+\renewbibmacro*{translator}{%
+ \ifthenelse{\ifusetranslator\AND\NOT\ifnameundef{translator}}%
+ {\ifthenelse{\iffieldequals{namehash}{\bbx@lasthash}\AND\NOT
+ \iffirstonpage}%
+ {\mbox{\mlanamedash\unspace\addcomma\addspace}}%
+ {\ifbool{bbx@totalnames}%
+ {\printnames[sortname][-\value{listtotal}]{translator}}%
+ {\printnames[sortname]{translator}}%
+ \newunit%
+ \savefield{namehash}{\bbx@lasthash}}%
+ \usebibmacro{translatorstrg}\clearname{translator}}%
+ {\global\undef\bbx@lasthash}}
+
+\renewbibmacro*{translator+others}{%
+ \ifthenelse{\ifusetranslator\AND\NOT\ifnameundef{translator}}%
+ {\ifthenelse{\iffieldequals{namehash}{\bbx@lasthash}\AND\NOT
+ \iffirstonpage}%
+ {\mbox{\mlanamedash\unspace\addcomma\addspace}}%
+ {\ifbool{bbx@totalnames}%
+ {\printnames[sortname][-\value{listtotal}]{translator}}%
+ {\printnames[sortname]{translator}}%
+ \newunit%
+ \savefield{namehash}{\bbx@lasthash}}%
+ \usebibmacro{translator+othersstrg}\clearname{translator}}%
+ {\global\undef\bbx@lasthash}}
+
+\newbibmacro*{journal+issue+year+pages}{%
+ \usebibmacro{journal+ser+vol+num}%
+ \setunit{\addspace}%
+ \printtext[parens]{%
+ \iffieldundef{issue}%
+ {\iffieldundef{month}%
+ {\printfield{year}}%
+ {\iffieldundef{day}%
+ {\printfield{month}%
+ \setunit{\addspace}%
+ \printfield{year}}%
+ {\printtext{\bibdate}}}}%
+ {\printfield{issue}%
+ \setunit{\addspace}%
+ \printfield{year}}}%
+ \newunit%
+ \printfield{pages}}
+
+\renewbibmacro*{url+urldate}{%
+ \printfield[mla:capital:web]{url}\clearfield{url}%
+ \printunit{\addperiod\space}\newblock%
+ \iffieldundef{urlyear}{}{\printtext{Accessed}\space\printurldate\clearfield{urlyear}}%
+ }
+
+\newbibmacro*{mla:container:top}{%
+ \usebibmacro{bibindex}%
+ \usebibmacro{author/editor+others/translator+others}% bibnamedash
+ \setunit{\addperiod\space}\newblock%
+ \ifthenelse{%
+ \iffieldequalstr{entrytype}{suppbook}%
+ \OR%
+ \iffieldequalstr{entrytype}{suppcollection}}%
+ {\usebibmacro{title}%
+ \printunit{\addperiod\space}\newblock%
+ \printfield[mla:capital]{entrysubtype}}% 2.0 adjusted to show both title and entrysubtype
+ {\ifentrytype{book}
+ {\usebibmacro{booktitle}}
+ {\usebibmacro{maintitle+booktitle}}}%
+ \printunit{\addperiod\space}\newblock%
+ }
+
+\newbibmacro*{mla:container:one}{%
+ \usebibmacro{mla:article:journal+issuetitle}%
+ \newunit\newblock
+ \printfield{note}%
+ \newunit%
+ \printfield{pages}%
+ \newunit%
+ \ifthenelse{\iffieldundef{eprinttype} \OR \(\iffieldundef{eprinttype} \AND \iffieldundef{eprint}\)}
+ {}%\usebibmacro{url+urldate}}% mla9 - drop
+ {}%
+ \printunit{\addperiod\space}\newblock%
+ }
+
+\newbibmacro*{mla:container:two}{%
+ \usebibmacro{mla:isbn/issn+doi+eprint}%
+ \newunit\newblock
+ \usebibmacro{url+urldate}%
+ \newunit\newblock
+ \printfield{addendum}%
+ \printunit{\addperiod\space}\newblock%
+ \usebibmacro{pageref}%
+ }
+
+\DeclareFieldFormat{titlea}{\mkbibemph{#1}}
+\DeclareFieldFormat{titleb}{\mkbibemph{#1}}
+\DeclareFieldFormat[mlasource]{mla:unstyled}{#1}
+\DeclareFieldFormat[mlasource]{mla:complete}{\mkbibemph{#1}}
+\DeclareFieldFormat[mlasource]{mla:part}{\mkbibquote{#1}}
+
+\newbibmacro*{mla:source}{%
+ \usebibmacro{bibindex}%
+ \usebibmacro{author/editor+others/translator+others}%
+ \setunit{\addperiod\space}\newblock%
+ \iffieldundef{titletype}
+ {\iffieldundef{titlea}
+ {\printfield[mla:complete]{title}}
+ {\printfield[mla:part]{title}}}
+ {\printfield[mla:\thefield{titletype}]{title}}
+ \setunit{\addperiod\space}\newblock%
+ \printfield[noformat]{supplemental}
+ }
+
+\newbibmacro*{mla:containera}{%
+ \printfield{titlea}%
+ \newunit\newblock
+ \printfield{contributora}%
+ \newunit\newblock
+ \printfield{versiona}%
+ \newunit\newblock
+ \printfield{numbera}%
+ \newunit\newblock
+ \printfield{publishera}%
+ \newunit\newblock
+ \printfield{datea}%
+ \newunit\newblock
+ \printfield{locationa}%
+ \newunit\newblock
+ \printfield{supplementala}%
+}
+
+\newbibmacro*{mla:containerb}{%
+ \printfield{titleb}%
+ \newunit\newblock
+ \printfield{contributorb}%
+ \newunit\newblock
+ \printfield{versionb}%
+ \newunit\newblock
+ \printfield{numberb}%
+ \newunit\newblock
+ \printfield{publisherb}%
+ \newunit\newblock
+ \printfield{dateb}%
+ \newunit\newblock
+ \printfield{locationb}%
+ \newunit\newblock
+ \printfield{supplementalb}%
+}
+
+\DeclareBibliographyDriver{mlasource}{%
+ \usebibmacro{mla:source}%
+ \printunit{\addperiod\space}\newblock%
+ \usebibmacro{mla:containera}%
+ \printunit{\addperiod\space}\newblock%
+ \usebibmacro{mla:containerb}%
+ \usebibmacro{finentry}}
+
+\DeclareBibliographyDriver{book}{%
+ \usebibmacro{mla:container:top}%
+ \printunit{\addperiod\space}\newblock%
+ \usebibmacro{bytranslator+others}%
+ \newunit%
+ \usebibmacro{byeditor+others}%
+ \newunit%
+ \printfield{edition}\isdot%
+ \newunit%
+ \iffieldundef{maintitle}{\printfield{volume}\clearfield{volume}\printfield{part}}{}%
+ % \newunit%
+ % \iffieldundef{volume}{\printfield{volumes}\clearfield{volumes}}{}%% 2.0 undefined to show later
+ \newunit%
+ \usebibmacro{series+number}%
+ \newunit%
+ \printfield{note}%
+ \newunit%
+ \iftoggle{bbx:showlocation}{\printlist{location}}{}% new toggle IN 2.0
+ \newunit%
+ \iffieldundef{maintitle}
+ {\newunit%
+ \printlist{publisher}\clearlist{publisher}}
+ {}%
+ \newunit%
+ \printdate%
+ \newunit%
+ \printfield{pages}% really?
+ \newunit\newblock%
+ \usebibmacro{mla:isbn/issn+doi+eprint}%
+ \newunit%
+ \iffieldundef{origtitle}%
+ {}%
+ {\usebibmacro{mla:reprint}}%
+ \setunit{\addperiod\addspace}%
+ \iffieldundef{volumes}%
+ {}%
+ {\usebibmacro{mla:multivolumes}}%
+ \newunit%
+ \printfield[mla:sentence-case]{addendum}%
+ \newunit%
+ \usebibmacro{pageref}%
+ \newunit%
+ \usebibmacro{finentry}}
+
+\DeclareBibliographyDriver{article}{%
+ \usebibmacro{mla:container:top}%
+ \printunit{\addperiod\space}\newblock%
+ \usebibmacro{mla:container:one}%
+ \printunit{\addperiod\space}\newblock%
+ \usebibmacro{mla:container:two}%
+ \usebibmacro{finentry}}
+
+\DeclareBibliographyDriver{periodical}{%
+ \usebibmacro{bibindex}%
+ \usebibmacro{author/editor+others/translator+others}%
+ \setunit{\addperiod\space}\newblock%
+ \usebibmacro{mla:article:journal+issuetitle}%
+ \newunit\newblock%
+ \printfield{note}%
+ \newunit%
+ \printfield{pages}%
+ \newunit\newblock%
+ \usebibmacro{mla:isbn/issn+doi+eprint}%
+ \newunit\newblock%
+ \usebibmacro{url+urldate}%
+ \newunit\newblock%
+ \printfield{addendum}%
+ \newunit\newblock%
+ \usebibmacro{pageref}%
+ \newunit%
+ \usebibmacro{finentry}}
+
+\newbibmacro*{mla:reprint}{%
+ \iffieldundef{origtitle}%
+ {\newunit}%
+ {\iflistundef{origlanguage}
+ {\setunit{\newunitpunct\bibstring{reprintof}\addspace}}%
+ {\setunit{\newunitpunct\bibstring{transof}\addspace}}%
+}%
+ \printfield[title:\strfield{entrytype}]{origtitle}%
+ \newunit\newblock%
+ \printlist{origlocation}\clearlist{origlocation}%
+ \setunit*{\addcolon\addspace}%
+ \printlist{origpublisher}\clearlist{origpublisher}%
+ \newunit%
+ \ifbool{bbx@mla-incollection}%
+ {\printfield[bibliography:origyear]{origyear}\clearfield{origyear}}%
+ {\ifthenelse{\iffieldundef{volume}\OR\iffieldundef{volumes}}%
+ {\printorigdate\clearfield{origyear}}%
+ {}%
+ }%
+}
+
+\newbibmacro*{mla:multivolumes}{% 2.0 improvement for mla-compliant multivolumes
+ \usebibmacro{maintitle}%
+ \newunit%
+ \usebibmacro{mla:generaleditor}%
+ \newunit%
+ \printfield{volume}%
+ \newunit%
+ \printlist{publisher}\clearlist{publisher}%
+ \newunit%
+ \printeventdate\clearfield{eventyear}%
+ \setunit{\addperiod\addspace}%
+ \iffieldequalstr{eventendyear}{}%
+ {\printfield[openrangevolumes]{volumes}\clearfield{volumes}}%
+ {\printfield{volumes}\clearfield{volumes}}%
+}
+
+
+\renewbibmacro*{byeditorx}{%
+ \usebibmacro{byeditorx:internal}{a}%
+ \usebibmacro{byeditorx:internal}{b}%
+ \usebibmacro{byeditorx:internal}{c}%
+}
+
+\newbibmacro*{byeditorx:internal}[1]{%
+ \ifnameundef{editor#1}
+ {}
+ {\iffieldequalstr{editor#1type}{generaleditor}
+ {}
+ {\usebibmacro{bytypestrg}{editor#1}{editor}%
+ \setunit{\addspace}%
+ \printnames[byeditor#1]{editor#1}%
+ \newunit}}%
+}
+
+\newbibmacro*{mla:generaleditor}{%
+ \usebibmacro{mla:generaleditor:internal}{}%
+ \usebibmacro{mla:generaleditor:internal}{a}%
+ \usebibmacro{mla:generaleditor:internal}{b}%
+ \usebibmacro{mla:generaleditor:internal}{c}%
+}
+
+\newbibmacro*{mla:generaleditor:internal}[1]{%
+ \iffieldequalstr{editor#1type}{generaleditor}%
+ {\printnames{editor#1}%
+ \setunit{\addcomma\addspace}
+ \bibstring{generaleditor}
+ \newunit}%
+ {}%
+}
+
+\newbibmacro*{mla:isbn/issn+doi+eprint}{%
+ \iftoggle{bbx:isan}{\printfield{isan}\clearfield{isan}}{}%
+ \newunit\newblock%
+ \iftoggle{bbx:isbn}{\printfield{isbn}\clearfield{isbn}}{}%
+ \newunit\newblock%
+ \iftoggle{bbx:ismn}{\printfield{ismn}\clearfield{ismn}}{}%
+ \newunit\newblock%
+ \iftoggle{bbx:isrn}{\printfield{isrn}\clearfield{isrn}}{}%
+ \newunit\newblock%
+ \iftoggle{bbx:issn}{\printfield{issn}\clearfield{issn}}{}%
+ \newunit\newblock%
+ \iftoggle{bbx:doi}{\printfield{doi}\clearfield{doi}}{}%
+ \newunit\newblock%
+ \iftoggle{bbx:eprint}{\setunit{\addperiod\space}\newblock\usebibmacro{eprint+extra}}{}%
+ \newunit\newblock}
+
+\newbibmacro*{eprint+extra}{%
+ \iffieldundef{eprinttype}
+ {\printfield{eprint}}
+ {\iffieldundef{eprint}
+ {\printfield{eprinttype}}
+ {\printfield[eprint:\strfield{eprinttype}]{eprint}}}}
+
+\DeclareBibliographyDriver{suppbook}{%
+ \usebibmacro{mla:container:top}%
+ \newunit\newblock
+ \iffieldundef{crossref}%
+ {\iffieldundef{xref}%
+ {\usebibmacro{mla:incollection:internal}}%
+ {\bbx@crossref{\thefield{xref}}%
+ \setunit{\addspace}%
+ \printfield{pages}}}%
+ {\bbx@crossref{\thefield{crossref}}%
+ \setunit{\addspace}%
+ \printfield{pages}%
+ \newunit}%
+ \newunit%
+ \usebibmacro{finentry}}
+
+\DeclareCiteCommand{\bbx@crossref}%
+ {}
+ {\ifsingletitle%
+ {\printtext[bibhyperref]{\printnames{labelname}}%
+ \setunit{\space}}%
+ {\printnames{labelname}%
+ \newunit%
+ \printtext[bibhyperref]{\printfield[citetitle:book]{labeltitle}}%
+ }}%
+ {}%
+ {}
+
+\DeclareBibliographyDriver{incollection}{%
+ \usebibmacro{bibindex}%
+ \usebibmacro{author/editor+others/translator+others}%
+ \setunit{\addperiod\space}\newblock%
+ \ifthenelse{%
+ \iffieldequalstr{entrysubtype}{book}%
+ \OR%
+ \iffieldequalstr{entrysubtype}{play}%
+ \OR%
+ \iffieldequalstr{entrytype}{bookinbook}}%
+ {\usebibmacro{title:incollection:italics}}%
+ {\setbool{bbx@mla-incollection}{true}%
+ \usebibmacro{title}%
+ \setbool{bbx@mla-incollection}{false}}%
+ \newunit\newblock%
+ \ifbool{bbx@uniquetranslator}%
+ {\usebibmacro{bytranslator+others}}%
+ {}%
+ \setunit{\addperiod\addspace}%
+ \iffieldundef{crossref}%
+ {\iffieldundef{xref}%
+ {\usebibmacro{mla:incollection:internal}}%
+ {\bbx@crossref{\thefield{xref}}%
+ \setunit{\addspace}%
+ \printfield{pages}}}%
+ {\bbx@crossref{\thefield{crossref}}%
+ \setunit{\addcomma\addspace}%
+ \printfield{volume}%
+ \setunit{\addcomma\addspace}%
+ \printfield{pages}%
+ \newunit}%
+ \newunit%
+ \usebibmacro{finentry}}
+
+\newbibmacro*{mla:incollection:internal}{%
+ \setbool{bbx@mla-incollection}{true}%
+ \usebibmacro{maintitle+booktitle}%
+ \ifthenelse{%
+ \iffieldequalstr{entrytype}{suppbook}%
+ \OR%
+ \iffieldequalstr{entrytype}{suppcollection}%
+ \OR%
+ \iffieldequalstr{entrysubtype}{interview}%
+ \OR%
+ \iffieldequalstr{entrysubtype}{untitled}}%
+ {\setunit{\newunitpunct\bibstring{byauthor}\addspace}%
+ \ifnamesequal{labelname}{bookauthor}%
+ {\printnames[mla:last]{bookauthor}}%
+ {\printnames[byauthor]{bookauthor}}}%
+ {}%
+ \newunit\newblock%
+ \usebibmacro{byauthor}%
+ \newunit\newblock
+ \usebibmacro{byeditor+others}%
+ \newunit\newblock
+ \printfield{edition}\isdot%
+ \newunit
+ \iffieldundef{maintitle}%
+ {\printfield{volume}\printfield{part}}%
+ {}%
+ \newunit
+ \iffieldundef{volume}%
+ {\printfield{volumes}\clearfield{volumes}}%
+ {}%%
+ \newunit\newblock
+ \usebibmacro{series+number}%
+ \newunit\newblock
+ \printfield{note}%
+ \newunit\newblock
+ \usebibmacro{publisher+location+date}%
+ \newunit%
+ \usebibmacro{chapter+pages}%
+ \newunit%
+ \usebibmacro{mla:isbn/issn+doi+eprint}%
+ \newunit%
+ \usebibmacro{url+urldate}%
+ \newunit%
+ \iffieldundef{volumes}%
+ {}%
+ {\usebibmacro{mla:multivolumes}}%
+ \newunit%
+ \printfield{addendum}%
+ \newunit%
+ \usebibmacro{pageref}%
+ \setbool{bbx@mla-incollection}{false}}
+
+\DeclareBibliographyDriver{inproceedings}{%
+ \usebibmacro{bibindex}%
+ \usebibmacro{author/editor+others/translator+others}%
+ \setunit{\addperiod\space}\newblock%
+ \usebibmacro{title}%
+ \setunit{\addperiod\space}\newblock%
+ \usebibmacro{mla:proceedings:booktitle}%
+ \newunit\newblock
+ \usebibmacro{byeditor+others}%
+ \newunit\newblock
+ \usebibmacro{series+number}%
+ \newunit\newblock
+ \printfield{note}%
+ \newunit
+ \usebibmacro{publisher+location+date}%
+ \newunit\newblock
+ \usebibmacro{chapter+pages}%
+ \newunit\newblock
+ \printfield{addendum}%
+ \newunit\newblock
+ \usebibmacro{pageref}%
+ \newunit%
+ \usebibmacro{finentry}}
+
+\DeclareBibliographyDriver{proceedings}{%
+ \usebibmacro{bibindex}%
+ \usebibmacro{author/editor+others/translator+others}%
+ \setunit{\addperiod\space}\newblock%
+ \usebibmacro{mla:proceedings:booktitle}%
+ \newunit\newblock
+ \usebibmacro{byeditor+others}%
+ \newunit\newblock
+ \usebibmacro{series+number}%
+ \newunit\newblock
+ \printfield{note}%
+ \newunit
+ \usebibmacro{publisher+location+date}%
+ \newunit\newblock
+ \usebibmacro{chapter+pages}%
+ \newunit\newblock
+ \printfield{addendum}%
+ \newunit\newblock
+ \usebibmacro{pageref}%
+ \newunit%
+ \usebibmacro{finentry}}
+
+\DeclareBibliographyDriver{unpublished}{%
+ \usebibmacro{bibindex}%
+ \usebibmacro{author/editor+others/translator+others}%
+ \setunit{\addperiod\space}\newblock%
+ \usebibmacro{title}%
+ \setunit{\addperiod\space}\newblock%
+ \printfield{note}%
+ \newunit\newblock%
+ \printfield{origyear}
+ \newunit\newblock
+ \printfield{library}%
+ \newunit%
+ \printlist{location}%
+ \newunit\newblock
+ \usebibmacro{mla:all:type}%
+ \setunit{\addspace}
+ \printfield{number}%
+ \setunit{\addperiod\addspace}
+ \printfield{addendum}%
+ \newunit%
+ \usebibmacro{finentry}}
+
+\DeclareBibliographyDriver{thesis}{%
+ \usebibmacro{bibindex}%
+ \usebibmacro{author/editor+others/translator+others}%
+ \setunit{\addperiod\space}\newblock%
+ \usebibmacro{title}%
+ \setunit{\addperiod\space}\newblock%
+ \iffieldequalstr{entrysubtype}{published}%
+ {\printfield{origyear}\clearfield{origyear}}%
+ {\printfield{year}}%
+ \printunit{\addperiod\space}\newblock%
+ \newunit\newblock
+ \printlist{institution}%
+ \newunit%
+ \usebibmacro{mla:thesis:type}%
+ \printunit{\addperiod\addspace}\newblock%
+ \iffieldequalstr{entrysubtype}{published}%
+ {\usebibmacro{series+number}%
+ \newunit%
+ \usebibmacro{publisher+location+date}}%
+ {}%
+ \newunit\newblock
+ \printfield{addendum}%
+ \newunit\newblock
+ \newunit%
+ \usebibmacro{finentry}}
+
+\DeclareBibliographyDriver{review}{%
+ \usebibmacro{bibindex}%
+ \usebibmacro{author}%
+ \setunit{\addperiod\space}\newblock%
+ \printfield[title:article]{title}%
+ \setunit{\addperiod\space}\newblock%
+ \printfield[title:reviewedbook]{booktitle}%
+ \newunit%
+ \ifnameundef{bookauthor}%
+ {\printtext[reviewededitor]{\printnames[default]{editor}}}%
+ {\printtext[reviewedauthor]{\printnames[default]{bookauthor}}}%
+ \setunit{\addperiod\space}\newblock%
+ \usebibmacro{mla:container:one}%
+ \setunit{\addperiod\space}\newblock%
+ \usebibmacro{mla:container:two}%
+ \usebibmacro{finentry}}
+
+\DeclareBibliographyDriver{inreference}{%
+ \usebibmacro{bibindex}%
+ \usebibmacro{author}%
+ \setunit{\addperiod\space}\newblock%
+ \usebibmacro{title}%
+ \setunit{\addperiod\space}\newblock%
+ \iffieldundef{crossref}%
+ {\iffieldundef{xref}%
+ {\newunit\newblock
+ \usebibmacro{maintitle+booktitle}%
+ \newunit\newblock
+ \usebibmacro{byeditor+others}%
+ \newunit\newblock
+ \iffieldsequal{year}{edition}%
+ {\printfield{year}~\bibstring{edition}\clearfield{year}}%
+ {\printfield{edition}\isdot}%
+ \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
+ \usebibmacro{mla:isbn/issn+doi+eprint}%
+ \newunit\newblock
+ \usebibmacro{url+urldate}%
+ \newunit\newblock
+ \printfield{addendum}%
+ \newunit\newblock
+ \usebibmacro{pageref}}%
+ {}}%
+ {\bbx@crossref{\thefield{crossref}}%
+ \nopunct\unspace\printfield{pages}}%
+ \newunit%
+ \usebibmacro{finentry}}
+
+\newbibmacro{mlabelnamepunct}{\setunit{\labelnamepunct}\newblock}
+
+\newbibmacro{mla:video:localized:last-first}[1]{%
+ \ifnameundef{#1}%
+ {}%
+ {\printnames{#1}\addcomma\addspace%
+ \ifthenelse{\iffieldbibstring{#1type} \and \not %
+ \iffieldundef{#1type}}%
+ {\bibstring{\thefield{#1type}}}%
+ {\iffieldundef{#1type}%
+ {\bibstring{with}}%
+ {\printfield[mla:lowercase]{#1type}}}}%
+\newunit}%
+
+\newbibmacro{mla:video:name:first:footnote}[1]{%
+ \ifnameundef{#1}%
+ {}%
+ {\printnames[byeditor]{#1}\addcomma\addspace%
+ \ifthenelse{\iffieldbibstring{#1type} \and \not %
+ \iffieldundef{#1type}}%
+ {\bibstring{\thefield{#1type}}}%
+ {\iffieldundef{#1type}%
+ {\bibstring{with}}%
+ {\printfield[mla:lowercase]{#1type}}}}%
+ \clearname{#1}%
+}
+
+\newbibmacro{mla:video:localized:first-last}[1]{%
+ \ifnameundef{#1}%
+ {}%
+ {\ifthenelse{\iffieldbibstring{#1type} \and \not %
+ \iffieldundef{#1type} \and \not %
+ \iffieldequalstr{#1type}{composer}}%
+ {\bibstring{\thefield{#1type}}}%
+ {\iffieldundef{#1type}%
+ {\bibstring{with}}%
+ {\iffieldequalstr{#1type}{composer}%
+ {\bibstring{composedby}}%
+ {\printfield[mla:capital]{#1type}}}}%
+ \addspace\printnames[byeditor][-\value{listtotal}]{#1}}%
+\newunit}%
+
+\newbibmacro{mla:video:name:second:footnote}[1]{%
+ \ifnameundef{#1}%
+ {}%
+ {\ifthenelse{\iffieldbibstring{#1type} \and \not %
+ \iffieldundef{#1type} \and \not %
+ \iffieldequalstr{#1type}{composer}}%
+ {\bibstring{\thefield{#1type}}}%
+ {\iffieldundef{#1type}%
+ {\bibstring{with}}%
+ {\iffieldequalstr{#1type}{composer}%
+ {\bibstring{composedby}}%
+ {\printfield[mla:lowercase]{#1type}}}}%
+ \addspace\printnames[byeditor][-\value{listtotal}]{#1}%
+ }}%
+
+\DeclareBibliographyDriver{video}{%
+ \ifnamesequal{labelname}{author}%
+ {\usebibmacro{mla:video:localized:last-first}{author}}{}%
+ \ifnamesequal{labelname}{editor}%
+ {\usebibmacro{mla:video:localized:last-first}{editor}}{}%
+ \printfield{title}%
+ \setunit{\newunitpunct\bibstring{byauthor}\addspace}%
+ \printnames[byeditor]{bookauthor}%
+ \newunit%
+ \ifthenelse{\NOT\ifnamesequal{author}{labelname}%
+ \AND\NOT\ifnameundef{author}}%
+ {\usebibmacro{mla:video:localized:first-last}{author}}%
+ {}%
+ \ifthenelse{\NOT\ifnamesequal{editor}{labelname}%
+ \AND\NOT\ifnameundef{editor}}%
+ {\usebibmacro{mla:video:localized:first-last}{editor}}%
+ {}%
+ \usebibmacro{mla:video:localized:first-last}{namea}%
+ \usebibmacro{mla:video:localized:first-last}{nameb}%
+ \usebibmacro{mla:video:localized:first-last}{namec}%
+ \printfield{origyear}\clearfield{origyear}%
+ \newunit\newblock%
+ \printlist{publisher}%
+ \newunit%
+ \printfield{year}%
+ \newunit\newblock%
+ \usebibmacro{finentry}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% % % % % % % % % % % % % % % % % % % % % %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% drivers to add eventually:
+% * \DeclareBibliographyDriver{performance}
+%
+% Specifically important mainstay types to check for MLA users
+% 0 support for multiple publishers? % can't do with bibtex
+% * editorial
+% * letter (to the editor, etc.)
+% * interview
+
+\newbibmacro*{mtitle+mstitle+vol+part+title+stitle}{%
+ \iffieldundef{maintitle}%
+ {}%
+ {\printtext[maintitle]{%
+ \printfield[noformat]{maintitle}%
+ \newunit
+ \printfield[noformat]{mainsubtitle}}%
+ \setunit{\addspace}% 2.0 include titleaddon inside unit punctuation
+ \printfield{maintitleaddon}%
+ \newunit\newblock
+ \iffieldundef{volume}%
+ {}%
+ {\printfield{volume}%
+ \printfield{part}%
+ \setunit{\addcolon\space}}}%
+ \usebibmacro{title+stitle}}
+
+\renewbibmacro*{series+number}{%
+ \iffieldundef{series}%
+ {}%
+ {\printfield{series}\clearfield{series}\setunit*{\addspace}\printfield{number}}%
+}
+
+\renewbibmacro*{title}{%
+ \iffieldequalstr{entrytype}{thesis}%
+ {\usebibmacro{mla:title:thesis}}%
+ {\ifthenelse{\iffieldequalstr{entrytype}{unpublished}\OR\iffieldequalstr{entrytype}{misc}} %
+ {\usebibmacro{mla:title:unpublished}}%
+ {\usebibmacro{title+stitle}}}}%
+
+\renewbibmacro*{publisher+location+date}{%
+ \iftoggle{bbx:showlocation}{\printlist{location}}{}% new toggle in 2.0
+ \newunit%
+ \printlist{publisher}%
+ \newunit%
+ \ifbool{mla@nodate}{\printtext{n.d.}}%
+ \printdate%
+ \newunit}
+
+\newbibmacro*{mla:title:unpublished}{%
+ \iffieldundef{title}%
+ {}%
+ {\iffieldundef{entrysubtype}%
+ {\printtext[title:\strfield{entrytype}]{%
+ \printfield[noformat]{title}%
+ \setunit*{\subtitlepunct}%
+ \printfield[noformat]{subtitle}}}%
+ {\printtext[title:\strfield{entrysubtype}]{%
+ \printfield[noformat]{title}%
+ \setunit*{\subtitlepunct}%
+ \printfield[noformat]{subtitle}}}%
+ }%
+ \setunit{\addspace}% 2.0 include titleaddon inside unit punctuation
+ \printfield[noformat]{titleaddon}%
+ \printunit{\addperiod\space}%
+ \usebibmacro{byauthor}%
+ \iffieldundef{origtitle}%
+ {\usebibmacro{mla:reprint}}%
+ {}%
+}%
+
+
+\newbibmacro*{name:first-last:andothers}{%
+ \ifthenelse{\value{listcount}=\value{liststop}\AND
+ \ifmorenames}
+ {\ifnum\value{liststop}>1 \finalandcomma\fi
+ \addspace\bibstring{andothers}}
+ {}}
+
+\newbibmacro*{mla:title:thesis}{%
+ \iffieldundef{title}%
+ {}%
+ {\ifthenelse{\iffieldequalstr{type}{phd}\OR%
+ \iffieldequalstr{type}{dphil}}%
+ {\printtext[title:book]{%
+ \printfield[noformat]{title}%
+ \setunit{\subtitlepunct}%
+ \printfield[noformat]{subtitle}}}%
+ {\printtext[title:\strfield{entrytype}]{%
+ \printfield[noformat]{title}%
+ \setunit{\subtitlepunct}%
+ \printfield[noformat]{subtitle}}}%
+ \setunit{\addspace}% 2.0 include titleaddon inside unit punctuation
+ \printfield{titleaddon}%
+ \newunit\newblock}}
+
+\newbibmacro*{mla:thesis:type}{%
+ \iffieldundef{type}%
+ {\printtext[mla:capital]{\bibstring{phdthesis}}}%
+ {\usebibmacro{mla:all:type}}}%
+
+\newbibmacro*{mla:all:type}{%
+ \iffieldbibstring{type}%
+ {\printtext[mla:capital]{\bibstring{\thefield{type}}}}%
+ {\printfield[mla:capital]{type}}}%
+
+\newbibmacro*{mla:all:type:foot}{%
+ \ifbibstring{\thefield{type}}%
+ {\printtext[noformat]{\bibstring{\thefield{type}}}}%
+ {\printtext[noformat]{\printfield{type}}}}%
+
+\renewbibmacro*{maintitle+title}{%
+ \usebibmacro{title}%
+ \newunit%
+ \iffieldsequal{maintitle}{title}%
+ {\clearfield{maintitle}%
+ \clearfield{mainsubtitle}%
+ \clearfield{maintitleaddon}}%
+ {}%
+ \iffieldundef{volume}%
+ {\usebibmacro{maintitle}}%
+ {}%
+ \iffieldundef{maintitle}%
+ {\printfield{volume}\clearfield{volume}}%
+ {}%
+ \newunit}
+
+\renewbibmacro*{maintitle+booktitle}{%
+ \usebibmacro{booktitle}%
+ \printunit*{\addperiod\space}%
+ \iffieldundef{maintitle}%
+ {}%
+ {\usebibmacro{maintitle}%
+ \newunit%
+ \iffieldundef{volume}%
+ {}%
+ {\printfield{volume}%
+ \printfield{part}%
+ \setunit{\addcolon\space}}}%
+ \printunit*{\addperiod\space}}
+
+\renewbibmacro*{booktitle}{%
+ \ifboolexpr{
+ test {\iffieldundef{booktitle}}
+ and
+ test {\iffieldundef{booksubtitle}}
+ }
+ {\usebibmacro{title}}
+ {\printtext[booktitle]{%
+ \printfield[titlecase]{booktitle}%
+ \setunit{\subtitlepunct}%
+ \printfield[titlecase]{booksubtitle}}}%
+ \setunit{\addspace}%
+ \printfield{booktitleaddon}%
+ \newunit% 2.0 include titleaddon inside unit punctuation
+ }
+
+\newbibmacro*{mla:proceedings:booktitle}{%
+ \usebibmacro{booktitle}%
+ \newunit%
+ \iffieldundef{eventtitle}%
+ {}%
+ {\printtext[default]{%
+ \bibstring{proceedings}\addspace\bibstring{ofseries}\addspace%
+ \printfield[default]{eventtitle}\isdot}}%
+ \setunit*{\isdot\addcomma\addspace}%
+ \printlist{organization}%
+ \newunit%
+ \printeventdate%
+ \newunit%
+ \printlist{institution}%
+ \newunit%
+ \printfield{venue}}
+
+\newbibmacro*{title+stitle}{%
+ \iffieldundef{title}%
+ {\ifthenelse{%
+ \iffieldequalstr{entrytype}{suppbook}%
+ \OR%
+ \iffieldequalstr{entrytype}{suppcollection}}%
+ {}%
+ {\ifthenelse{% 2.0 changed logic to allow for untitled pieces (e.g. for interviews)% CHECK
+ \iffieldundef{booktitle}}%
+ {}%
+ {\printtext[title:\strfield{entrytype}]{%
+ \printfield[noformat]{booktitle}%
+ \setunit*{\subtitlepunct}%
+ \printfield[noformat]{booksubtitle}}}}}%
+ {\iffieldequalstr{entrysubtype}{untitled}% 2.0 added check to allow for works with unformatted titles
+ {\printfield[noformat]{title}%
+ \setunit*{\subtitlepunct}%
+ \printfield[noformat]{subtitle}}%
+ {\printtext[title:\strfield{entrytype}]{%
+ \printfield[noformat]{title}%
+ \setunit*{\subtitlepunct}%
+ \printfield[noformat]{subtitle}}}}%
+ \setunit{\addspace}% 2.0 include titleaddon inside unit punctuation
+ \printfield[noformat]{titleaddon}%
+ \printunit{\addperiod\space}% 2.0 include titleaddon inside unit punctuation
+ \usebibmacro{byauthor}%
+ \iffieldundef{origtitle}%
+ {\usebibmacro{mla:reprint}}%
+ {}%
+}%
+
+\newbibmacro*{title:incollection:italics}{%
+ \iffieldundef{title}%
+ {}%
+ {\printtext[title:book]{%
+ \printfield[noformat]{title}%
+ \setunit*{\subtitlepunct}%
+ \printfield[noformat]{subtitle}}%
+ \setunit{\addspace}% 2.0 include titleaddon inside unit punctuation
+ \printfield[noformat]{titleaddon}%
+ % \newunit\newblock% platyp
+ \printunit{\addperiod\addspace}% platyp troubleshooting incollection with titleaddon
+ \setbool{bbx@mla-incollection}{true}\usebibmacro{mla:reprint}\setbool{bbx@mla-incollection}{false}%
+ \newunit\newblock}}
+
+\newbibmacro*{mla:article:journal+issuetitle}{%
+ \usebibmacro{issue}%
+ \newunit\newblock%
+ \iffieldundef{issuetitle}%
+ {}%
+ {\usebibmacro{byeditor+others}%
+ \newunit\newblock%
+ \bibstring{specissue}\setunit*{\addspace}}%
+ \ifthenelse{\iffieldequalstr{entrytype}{periodical} \AND \iffieldundef{journaltitle}}%
+ {\usebibmacro{periodical}}%
+ {\usebibmacro{journal}}%
+ \ifthenelse{\iffieldequalstr{entrytype}{online}}{\usebibmacro{mla:online}}{\setunit*{\addspace}}%
+ \ifthenelse{\iffieldequalstr{entrysubtype}{newspaper} \or \iffieldequalstr{entrysubtype}{magazine} \or \iffieldequalstr{entrytype}{online}}%
+ {\printlist[brackets]{location}%
+ \newunit%
+ \printtext{\printdate}%
+ \newunit%
+ \printfield{version}%
+ \newunit%
+ \printfield[mla:newspaper:section]{chapter}%
+ }%
+ {\printfield{series}\clearfield{series}%
+ \newunit%
+ \printfield{volume}%
+ \newunit%
+ \ifthenelse{\iffieldequalstr{entrytype}{patent}}%
+ {\printfield{type}%
+ \setunit*{\addspace}%
+ \printfield{number}\clearfield{number}%
+ \newunit}%
+ {\printfield{number}\clearfield{number}
+ \newunit}%
+ \printnames{holder}% mla9- NEW IN 2.0 - preliminary support for patents
+ \newunit%
+ \ifthenelse{\iffieldequalstr{entrytype}{patent}}%
+ {\iffieldbibstring{type}%
+ {\biblstring{\strfield{type}}%
+ \newunit}%
+ {}%
+ }%
+ {}%
+ \usebibmacro{issue+date}%
+ \newunit\newblock
+ \newunit}%
+}
+
+\newbibmacro*{mla:online}{%
+ \iffieldundef{maintitle}%
+ {}%
+ {\printtext[maintitle]{%
+ \printfield[titlecase]{maintitle}%
+ \setunit{\subtitlepunct}%
+ \printfield[titlecase]{mainsubtitle}}}%
+ \newunit\newblock%
+ \printlist{publisher}%
+ \newunit%
+}
+
+\renewbibmacro*{journal+issuetitle}{%
+ \usebibmacro{journal}%
+ \setunit*{\addspace}%
+ \ifthenelse{\iffieldequalstr{entrysubtype}{newspaper} \or \iffieldequalstr{entrysubtype}{magazine}}%
+ {\printlist[brackets]{location}%
+ \printtext{\printdate}%
+ \newunit%
+ \printfield{version}%
+ \newunit%
+ \printfield[mla:newspaper:section]{chapter}%
+ }%
+ {\printfield{series}\clearfield{series}%
+ \setunit{\addspace}%
+ \printfield{volume}%
+ \newunit%
+ \printfield{number}\clearfield{number}%
+ \newunit%
+ \usebibmacro{mla:isbn/issn+doi+eprint}%
+ \newunit%
+ \usebibmacro{issue+date}%
+ \newunit\newblock
+ \usebibmacro{issue}%
+ \newunit}}
+
+\renewbibmacro*{issue+date}{%
+ \printtext{%
+ \iffieldundef{issue}
+ {\usebibmacro{date}}
+ {\printfield{issue}%
+ \setunit*{\addspace}%
+ \usebibmacro{date}}}%
+ \newunit}
+
+\renewbibmacro{finentry}{%
+ \finentry%
+ \iffieldundef{annotation}%
+ {}%
+ {\ifbool{bbx@annotation}%
+ {\begin{quotation}\noindent%
+ \printfield{annotation}%
+ \end{quotation}}%
+ {}}%
+}
+
+\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}}
+
+% mla-basic.bbx has no sourcemap rules; use mla.bbx for some standard mla-style replacements
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-mla/mla-strict.cbx b/macros/latex/contrib/biblatex-contrib/biblatex-mla/mla-strict.cbx
new file mode 100644
index 0000000000..e95302f1ad
--- /dev/null
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-mla/mla-strict.cbx
@@ -0,0 +1,5 @@
+\ProvidesFile{mla-strict.cbx}[2021/05/12 v2.0 biblatex citation style]
+
+\RequireCitationStyle{mla}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-mla/mla.bbx b/macros/latex/contrib/biblatex-contrib/biblatex-mla/mla.bbx
index cae6845d71..2ee9431d57 100644
--- a/macros/latex/contrib/biblatex-contrib/biblatex-mla/mla.bbx
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-mla/mla.bbx
@@ -1,1229 +1,99 @@
-% mla-this.bbx, v1.9 2016/11/01 * compatible with biblatex 3.4
-% Maintained at <https://github.com/jmclawson/biblatex-mla> by James Clawson.
-%
-% Feel free to improve, redistribute, and adapt to your own ends. Please share improvements in formatting and MLA standards compliance back to James Clawson: <clawson@gmail.com>.
-%
-% This material is subject to the LaTeX Project Public License. See http://www.ctan.org/tex-archive/help/Catalogue/licenses.lppl.html for the details of that license.
-
-\ProvidesFile{mla-this.bbx}[2016/11/01 v1.9 biblatex bibliography style]
-
-\RequireBibliographyStyle{standard}
-\DeclareLanguageMapping{american}{american-mla}
-\DeclareLanguageMapping{english}{english-mla}
-
-\NewBibliographyString{byserieseditor}
-\NewBibliographyString{reviewof}
-\NewBibliographyString{specissue}
-\NewBibliographyString{phd}
-\NewBibliographyString{dphil}
-\NewBibliographyString{lic}
-\NewBibliographyString{ma}
-\NewBibliographyString{ms}
-\NewBibliographyString{msc}
-\NewBibliographyString{mphil}
-\NewBibliographyString{mlitt}
-\NewBibliographyString{manuscript}
-\NewBibliographyString{typescript}
-\NewBibliographyString{director}
-\NewBibliographyString{screenplay}
-\NewBibliographyString{adaptation}
-\NewBibliographyString{adaptor}
-\NewBibliographyString{performer}
-\NewBibliographyString{performers}
-\NewBibliographyString{composer}
-\NewBibliographyString{composedby}
-\NewBibliographyString{producer}
-\NewBibliographyString{with}
-\NewBibliographyString{proceedings}
-\NewBibliographyString{compilerandeditor}%
-\NewBibliographyString{bycompilerandeditor}%
-\NewBibliographyString{transof}%
-\NewBibliographyString{volstodate}%
-\NewBibliographyString{supptotitle}%
-\NewBibliographyString{print}%
-\NewBibliographyString{web}%
-\NewBibliographyString{generaleditor}%
-
-\setlength{\bibitemsep}{0pt}
-\renewcommand*{\mkbibnamesuffix}[1]{\addcomma\addlowpenspace#1}
-
-\DeclareNameAlias{author}{sortname}
-\@ifpackagelater{biblatex}{2016/03/01}{%
- \DeclareNameFormat{mla:last}{\nameparts{#1}\namepartfamily}%
- \DeclareNameFormat{default}{%
- \nameparts{#1}%
- \ifgiveninits{%
- \usebibmacro{name:given-family}{\namepartfamily}{\namepartgiveni}{\namepartprefix}{\namepartsuffix}%
- }{%
- \usebibmacro{name:given-family}{\namepartfamily}{\namepartgiven}{\namepartprefix}{\namepartsuffix}%
- }%
- \usebibmacro{name:andothers}%
- }%
-}{%
- \DeclareNameFormat{mla:last}{#1}%
- \DeclareNameFormat{default}{%
- \iffirstinits{%
- \usebibmacro{name:first-last}{#1}{#4}{#5}{#7}%
- }{%
- \usebibmacro{name:first-last}{#1}{#3}{#5}{#7}%
- }%
- \usebibmacro{name:andothers}%
- }%
-}
-
-\defbibenvironment{bibliography}
- {\list
- {}
- {\setlength{\leftmargin}{\bibhang}%
- \setlength{\itemindent}{-\leftmargin}%
- \setlength{\itemsep}{\bibitemsep}%
- \setlength{\parsep}{\bibparsep}}}
- {\endlist}
- {\item}
-
-\DeclareFieldFormat{title:article}{\mkbibquote{#1}}%
-\DeclareFieldFormat{title:online}{\mkbibquote{#1}}%
-\DeclareFieldFormat{title:inreference}{\mkbibquote{#1}}%
-\DeclareFieldFormat{title:book}{\mkbibemph{#1}}
-\DeclareFieldFormat{title:booklet}{\mkbibemph{#1}}
-\DeclareFieldFormat{title:collection}{\mkbibemph{#1}}
-\DeclareFieldFormat{title:incollection}{\mkbibquote{#1}}%
-\DeclareFieldFormat{title:inbook}{\mkbibquote{#1}}%
-\DeclareFieldFormat{title:inproceedings}{\mkbibquote{#1}}%
-\DeclareFieldFormat{title:thesis}{\mkbibquote{#1}}%
-\DeclareFieldFormat{title:reviewedbook}{\bibstring{reviewof}\addspace\mkbibemph{#1}}%
-\DeclareFieldFormat{title:reference}{\mkbibemph{#1}}%
-\DeclareFieldFormat{url}{$<$\url{#1}$>$}% suggested by Jay Savage <http://www.engatiki.org/2007/11/28/171>
-\DeclareFieldFormat{isbn}{}
-\DeclareFieldFormat{pages}{#1}%
-\DeclareFieldFormat[review]{volume}{#1}%
-\DeclareListFormat[article]{location}%
- {\unspace\mkbibbrackets{#1}\addspace}%
-\DeclareFieldFormat[article]{version}{#1\isdot}%
-\DeclareFieldFormat[incollection]{bibliography:origyear}{\openrangeformat{#1}\addperiod}%
-\DeclareFieldFormat[video]{mla:publimedium}{\MakeCapital{film}}%
-\DeclareFieldFormat{mla:publimedium}{\MakeCapital{#1}}%
-\DeclareFieldFormat{mla:capital}{\MakeCapital{#1}}%
-\DeclareFieldFormat{mla:capital:web}{%
- \ifhyperref%
- {\href{#1}{\MakeCapital{\bibstring{web}}}}%
- {\MakeCapital{\bibstring{web}}}}%
-\DeclareFieldFormat{mla:lowercase}{\MakeLowercase{#1}}%
-\DeclareFieldFormat{nameaddon}{\mkbibbrackets{#1}}%
-\DeclareFieldFormat{issuetitle}{\mkbibemph{#1}}
-\DeclareFieldFormat{mla:newspaper:section}{\bibstring{section}\addspace#1}%
-\DeclareFieldFormat{library}{#1\isdot}%
-\DeclareFieldFormat{reviewededitor}{\bibstring{byeditor}\addspace#1}%
-\DeclareFieldFormat{reviewedauthor}{\bibstring{byauthor}\addspace#1}%
-\DeclareFieldFormat{title:suppbook}{\mkbibquote{#1}}
-\DeclareFieldFormat{openrangevolumes}{#1~\bibstring{volstodate}}%
-\DeclareFieldFormat{volumeof}{\bibstring{volume}~#1~\bibstring{ofseries}}%
-\DeclareFieldFormat{mla:sentence-case}{\MakeSentenceCase{#1}}%
-\DeclareFieldFormat{eprint:jstor}{%
- \ifhyperref%
- {\href{http://www.jstor.org/stable/#1}{\emph{JSTOR}}}%
- {\emph{JSTOR}}}%
-\DeclareFieldFormat{eprint:googlebooks}{%
- \ifhyperref%
- {\href{http://books.google.com/books?id=#1}{\emph{Google Books}}}%
- {\emph{Google Books}}}
-\DeclareFieldFormat{eprint:adelaide}{%
- \ifhyperref%
- {\href{#1}{\emph{eBooks@Adelaide}}}%
- {\emph{eBooks@Adelaide}}}
-\DeclareFieldFormat{eprint:muse}{%5
- \ifhyperref%
- {\href{#1}{\emph{Project Muse}}}%
- {\emph{Project Muse}}}
-\DeclareFieldFormat{urldate}{#1}%
-
-\DeclareBibliographyAlias{booklet}{book}
-\DeclareBibliographyAlias{bookinbook}{incollection}%
-\DeclareBibliographyAlias{collection}{book}
-\DeclareBibliographyAlias{reference}{book}
-
-\DeclareBibliographyAlias{inbook}{incollection}%
-
-\DeclareBibliographyAlias{manual}{customa}
-\DeclareBibliographyAlias{misc}{customa}
-\DeclareBibliographyAlias{online}{article}
-\DeclareBibliographyAlias{patent}{customa}
-\DeclareBibliographyAlias{report}{customa}
-\DeclareBibliographyAlias{suppcollection}{suppbook}
-
-\DeclareFieldAlias[online]{maintitle}{journaltitle}
-
-\renewcommand*{\newunitpunct}{\addperiod\space}
-\renewcommand*{\andothersdelim}{\ifcitation{}{\addcomma}\addspace}
-\renewcommand*{\bibpagespunct}{\addperiod\space}
-\renewcommand*{\subtitlepunct}{\ifterm{}{\addcolon}\space}
-
-\newboolean{bbx@mla-incollection}
-\newbool{bbx@inset}
-
-\DeclareBibliographyOption{dashed}[true]{%
- \ifstrequal{#1}{true}
- {\ExecuteBibliographyOptions{pagetracker}%
- \renewbibmacro*{bbx:savehash}{\savefield{fullhash}{\bbx@lasthash}}}
- {\ExecuteBibliographyOptions{pagetracker=false}%
- \renewbibmacro*{bbx:savehash}{}}}
-
-\newboolean{bbx@annotation}% same as biblatex-dw
-\DeclareBibliographyOption{annotation}[true]{%
-\setboolean{bbx@annotation}{#1}}
-
-\newboolean{bbx@totalnames}
-\DeclareEntryOption{totalnames}[true]{%
- \setboolean{bbx@totalnames}{#1}}
-
-% for translated incollections where the collection has no shared translator
-\newboolean{bbx@uniquetranslator}%
-\DeclareEntryOption{uniquetranslator}[true]{%
- \setboolean{bbx@uniquetranslator}{#1}}
-
-\newbool{bbx:gnoreminfo}%
-\setboolean{bbx:gnoreminfo}{false}
-\DeclareBibliographyOption{noremoteinfo}[true]{\setboolean{bbx:gnoreminfo}{#1}}
-
-\newbool{bbx:lnoreminfo}%
-\setboolean{bbx:lnoreminfo}{false}
-\DeclareEntryOption{noremoteinfo}[true]{\setboolean{bbx:lnoreminfo}{#1}}
-
-\newbool{bbx@publimedium}%
-\setboolean{bbx@publimedium}{true}%
-\DeclareBibliographyOption{showmedium}[true]{\setboolean{bbx@publimedium}{#1}}%
-
-\newbool{bbx@guessmedium}%
-\setboolean{bbx@guessmedium}{true}
-\DeclareBibliographyOption{guessmedium}[true]{\setboolean{bbx@guessmedium}{#1}}%
-
-\newboolean{bbx@nodate}%
-\DeclareEntryOption{nodate}[true]{%
- \setboolean{bbx@nodate}{#1}}
-
-
-% 0.7.1 for years with open range
-\newrobustcmd{\openrangeformat}[1]{% 0.7.1
- \begingroup%
- \let\blx@org@rangedash=\bibrangedash%
- \def\bibrangedash{%
- \blx@org@rangedash%
- \futurelet\@let@token\blx@openrangeformat}%
- #1%
- \endgroup}
-
-% 0.7.1 for years with open range
-\newcommand*{\blx@openrangeformat}{% 0.7.1
- \ifx\@let@token\endgroup%
- \openrangemark%
- \fi}
-
-% 0.7.1 for years with open range
-\newcommand*{\openrangemark}{\mbox{ }}% 0.7.1
-
-\newbibmacro*{bbx:savehash}{%
- \savefield{fullhash}{\bbx@lasthash}}
-
-\renewcommand*{\bibnamedash}{% suggested by StackExchange user Audrey
- \mlanamedash%
- \iffieldundef{nameaddon}{\adddot}{\nopunct}}%
-
-\newcommand*{\mlanamedash}{\textendash\textendash\textendash}
-
-\renewbibmacro*{author}{%
- \ifthenelse{\ifuseauthor\AND\NOT\ifnameundef{author}}
- {\usebibmacro{bbx:dashcheck}%
- {\bibnamedash}%
- {\ifbool{bbx@totalnames}%
- {\printnames[sortname][-\value{listtotal}]{author}}
- {\printnames{author}}%
- \usebibmacro{bbx:savehash}}%
- \iffieldundef{nameaddon}%
- {}%
- {\setunit{\addspace}%
- \printfield{nameaddon}}%
- \iffieldundef{authortype}%
- {}%
- {\setunit{\addcomma\space}%
- \usebibmacro{authorstrg}}}%
- {\global\undef\bbx@lasthash}}
-
-\renewbibmacro*{editor}{%
- \ifthenelse{\ifuseeditor\AND\NOT\ifnameundef{editor}}%
- {\ifthenelse{\iffieldequals{namehash}{\bbx@lasthash}\AND\NOT
- \iffirstonpage}%
- {\mbox{\mlanamedash\unspace\addcomma\addspace}}%
- {\ifbool{bbx@totalnames}%
- {\printnames[sortname][-\value{listtotal}]{editor}}%
- {\printnames{editor}}%
- \setunit{\addcomma\space}%
- \savefield{namehash}{\bbx@lasthash}}%
- \usebibmacro{editorstrg}\clearname{editor}}%
- {\global\undef\bbx@lasthash}}
-
-\renewbibmacro*{editor+others}{%
- \ifthenelse{\ifuseeditor\AND\NOT\ifnameundef{editor}}%
- {\ifthenelse{\iffieldequals{namehash}{\bbx@lasthash}\AND\NOT
- \iffirstonpage}%
- {\mbox{\mlanamedash\unspace\addcomma\addspace}}%
- {\ifbool{bbx@totalnames}%
- {\printnames[sortname][-\value{listtotal}]{editor}}%
- {\printnames[sortname]{editor}}%
- \setunit{\addcomma\space}%
- \savefield{namehash}{\bbx@lasthash}}%
- \usebibmacro{editor+othersstrg}\clearname{editor}}%
- {\global\undef\bbx@lasthash}}
-
-\renewbibmacro*{translator}{%
- \ifthenelse{\ifusetranslator\AND\NOT\ifnameundef{translator}}%
- {\ifthenelse{\iffieldequals{namehash}{\bbx@lasthash}\AND\NOT
- \iffirstonpage}%
- {\mbox{\mlanamedash\unspace\addcomma\addspace}}%
- {\ifbool{bbx@totalnames}%
- {\printnames[sortname][-\value{listtotal}]{translator}}%
- {\printnames[sortname]{translator}}%
- \setunit{\addcomma\space}%
- \savefield{namehash}{\bbx@lasthash}}%
- \usebibmacro{translatorstrg}\clearname{translator}}%
- {\global\undef\bbx@lasthash}}
-
-\renewbibmacro*{translator+others}{%
- \ifthenelse{\ifusetranslator\AND\NOT\ifnameundef{translator}}%
- {\ifthenelse{\iffieldequals{namehash}{\bbx@lasthash}\AND\NOT
- \iffirstonpage}%
- {\mbox{\mlanamedash\unspace\addcomma\addspace}}%
- {\ifbool{bbx@totalnames}%
- {\printnames[sortname][-\value{listtotal}]{translator}}%
- {\printnames[sortname]{translator}}%
- \setunit{\addcomma\space}%
- \savefield{namehash}{\bbx@lasthash}}%
- \usebibmacro{translator+othersstrg}\clearname{translator}}%
- {\global\undef\bbx@lasthash}}
-
-\newbibmacro*{journal+issue+year+pages}{%
- \usebibmacro{journal+ser+vol+num}%
- \setunit{\addspace}%
- \printtext[parens]{%
- \iffieldundef{issue}%
- {\iffieldundef{month}%
- {\printfield{year}}%
- {\iffieldundef{day}%
- {\printfield{month}%
- \setunit{\addspace}%
- \printfield{year}}%
- {\printtext{\bibdate}}}}%
- {\printfield{issue}%
- \setunit{\addspace}%
- \printfield{year}}}%
- \addcolon\addspace
- \printfield{pages}}
-
-\renewbibmacro*{date}{\printdate}%
-
-\renewbibmacro*{url+urldate}{%
- \ifthenelse{\boolean{bbx@publimedium}\AND\NOT \(\iffieldundef{url} \AND \iffieldundef{eprint}\)}%
- {\printfield[mla:capital:web]{url}\newunit}%
- {\iffieldundef{urlyear}{}{\setunit{\addspace}}}%
- \iffieldundef{urlyear}%
- {}%
- {\printtext{\printurldate}%
- \setunit{\addspace}}% Suggested by Stephen Brumbaugh
- \ifthenelse{\boolean{bbx@publimedium}\AND\NOT\iffieldundef{url}}%
- {\ifthenelse{\boolean{bbx:gnoreminfo}}%
- {}%
- {\setunit{\newunitpunct}%
- \printfield{url}}}%
- {\printfield{url}}%
- }
-
-\DeclareBibliographyDriver{periodical}{%
- \usebibmacro{bibindex}%
- \usebibmacro{author/editor+others/translator+others}%
- \setunit{\labelnamepunct}\newblock%
- \usebibmacro{mla:article:journal+issuetitle}%
- \newunit\newblock
- \printfield{note}%
- \setunit{\addcolon\addspace}\newblock
- \printfield{pages}%
- \newunit\newblock
- \usebibmacro{mla:isbn/issn+doi+eprint}%
- \newunit\newblock
- \ifbool{bbx@publimedium}{}{\usebibmacro{url+urldate}}%
- \newunit\newblock
- \printfield{addendum}%
- \newunit\newblock
- \usebibmacro{pageref}%
- \newunit%
- \usebibmacro{publimedium}%
- \usebibmacro{finentry}}
-
-\DeclareBibliographyDriver{article}{%
- \usebibmacro{bibindex}%
- \usebibmacro{author/editor+others/translator+others}%
- \usebibmacro{mlabelnamepunct}%
- \usebibmacro{title}%
- \newunit%
- \usebibmacro{bytranslator+others}%
- \newunit%
- \usebibmacro{mla:article:journal+issuetitle}%
- \newunit\newblock
- \printfield{note}%
- \setunit{\addcolon\addspace}\newblock
- \printfield{pages}%
- \newunit\newblock
- \usebibmacro{mla:isbn/issn+doi+eprint}%
- \newunit\newblock
- \ifbool{bbx@publimedium}{}{\usebibmacro{url+urldate}}%
- \newunit\newblock
- \printfield{addendum}%
- \newunit\newblock
- \usebibmacro{pageref}%
- \newunit%
- \usebibmacro{publimedium}%
- \usebibmacro{finentry}}
-
-\DeclareBibliographyDriver{book}{%
- \usebibmacro{bibindex}%
- \usebibmacro{author/editor+others/translator+others}%
- \usebibmacro{mlabelnamepunct}%
- \usebibmacro{maintitle+title}%
- \newunit\newblock%
- \usebibmacro{byeditor+others}%
- \newunit\newblock%
- \printfield{edition}\isdot%
- \newunit%
- \iffieldundef{maintitle}%
- {\printfield{volume}%
- \printfield{part}}%
- {}%
- \newunit%
- \iffieldundef{volume}%
- {\printfield{volumes}\clearfield{volumes}}%
- {}%%
- \newunit\newblock%
- \ifbool{bbx@publimedium}%
- {}%
- {\usebibmacro{series+number}}%
- \newunit\newblock%
- \printfield{note}%
- \newunit\newblock%
- \usebibmacro{publisher+location+date}%
- \newunit\newblock%
- \printfield{pages}%
- \newunit\newblock%
- \usebibmacro{mla:isbn/issn+doi+eprint}%
- \newunit\newblock%
- \iffieldundef{origtitle}%
- {}%
- {\ifbool{bbx@publimedium}%
- {}
- {\usebibmacro{mla:reprint}}}%
- \newunit\newblock%
- \iffieldundef{volumes}%
- {}%
- {\usebibmacro{mla:multivolumes}}%
- \newunit\newblock%
- \printfield[mla:sentence-case]{addendum}%
- \newunit\newblock%
- \usebibmacro{pageref}%
- \newunit%
- \usebibmacro{publimedium}%
- \usebibmacro{finentry}}
-
-\newbibmacro*{mla:reprint}{%
- \iffieldundef{origtitle}%
- {\newunit}%
- {\iffieldundef{origlanguage}
- {\setunit{\newunitpunct\bibstring{reprintof}\addspace}}%
- {\setunit{\newunitpunct\bibstring{transof}\addspace}}%
-}%
- \printfield[title:\strfield{entrytype}]{origtitle}%
- \newunit\newblock%
- \printlist{origlocation}\clearlist{origlocation}%
- \setunit*{\addcolon\addspace}%
- \printlist{origpublisher}\clearlist{origpublisher}%
- \setunit*{\addcomma\addspace}%
- \ifbool{bbx@mla-incollection}%
- {\printfield[bibliography:origyear]{origyear}\clearfield{origyear}}%
- {\ifthenelse{\iffieldundef{volume}\OR\iffieldundef{volumes}}% 1.4.9 cleared up most spurious punct
- {\printorigdate\clearfield{origyear}}%
- {}%
- }%
-}
-
-\newbibmacro*{mla:multivolumes}{%
- \iffieldundef{maintitle}%
- {}%
- {\printfield[volumeof]{volume}%
- \setunit{\addspace}%
- \usebibmacro{maintitle}}%
- \usebibmacro{mla:generaleditor}%
- \iffieldequalstr{eventendyear}{}%
- {\printfield[openrangevolumes]{volumes}\clearfield{volumes}}%
- {\printfield{volumes}\clearfield{volumes}}%
- \newunit\newblock%
- \printeventdate\clearfield{eventyear}%
-}
-
-
-\renewbibmacro*{byeditorx}{%
- \usebibmacro{byeditorx:internal}{a}%
- \usebibmacro{byeditorx:internal}{b}%
- \usebibmacro{byeditorx:internal}{c}%
-}
-
-\newbibmacro*{byeditorx:internal}[1]{%
- \ifnameundef{editor#1}
- {}
- {\iffieldequalstr{editor#1type}{generaleditor}
- {}
- {\usebibmacro{bytypestrg}{editor#1}{editor}%
- \setunit{\addspace}%
- \printnames[byeditor#1]{editor#1}%
- \newunit}}%
-}
-
-\newbibmacro*{mla:generaleditor}{%
- \usebibmacro{mla:generaleditor:internal}{}%
- \usebibmacro{mla:generaleditor:internal}{a}%
- \usebibmacro{mla:generaleditor:internal}{b}%
- \usebibmacro{mla:generaleditor:internal}{c}%
+% These sourcemap declarations allow for .bib file oddities. Additionally, to comport with MLA expectations, they modify strings in publisher fields, drop unneeded parts of URLs, and look for patterns in a URL field to fill in missing eprint fields. If the choices here seem to do too much, use "style=mla-strict", which makes fewer accommodations and more exactly prints entries as they're defined in a given bibtex file.
+\ProvidesFile{mla.bbx}[2021/06/07 v2.0 biblatex bibliography style]
+
+\RequireBibliographyStyle{mla-strict}
+
+\DeclareStyleSourcemap{
+ \maps[datatype=bibtex]{
+ \map[overwrite=true]{% Convert non-integer year field to addendum field
+ \step[fieldsource=year, match=\regexp{[a-zA-Z]}, final]
+ \step[fieldsource=year, match=\regexp{(.+)}, final]
+ \step[fieldset=addendum, fieldvalue=\regexp{$1}]
+ \step[fieldset=year, null]
+ }
+ \map{% Convert unpublished booktitle to title, with entrysubtype "book"
+ \pertype{unpublished}
+ \step[notfield=title, final]
+ \step[fieldsource=booktitle, match=\regexp{(.+)}, final]
+ \step[fieldset=title, fieldvalue=\regexp{$1}, final]
+ \step[fieldset=booktitle, null]
+ \step[fieldset=entrysubtype, fieldvalue={book}]
+ }
+ \map{% Fill in missing publisher for US patents
+ \pertype{patent}
+ \step[notfield=publisher, final]
+ \step[fieldsource=type, match=\regexp{patentus}, final]
+ \step[fieldset=publisher, fieldvalue={United States Patent and Trademark Office}]
+ }
+ \map[overwrite=true]{% force consistent abbreviations for editions
+ \step[fieldsource=edition, match={edition}, replace={ed.}]
+ }
+ \map[overwrite=true]{% drop unnecessary elements of company names ("and" suggests list)
+ \step[fieldsource=publisher, match={and Company}, replace={}]
+ \step[fieldsource=publisher, match={and Co.}, replace={}]
+ }
+ \map{% abbreviate and drop unneeded parts of publisher names
+ \step[fieldsource=publisher, match={University Press}, replace={UP}]
+ \step[fieldsource=publisher, match={University}, replace={U}]
+ \step[fieldsource=publisher, match=\regexp{Press\b}, replace={P}]
+ \step[fieldsource=publisher, match=\regexp{Corporation|Corp.|Incorporated|Inc.|Limited|Ltd.}, replace={}]
+ \step[fieldsource=url, match=\regexp{http(s)?://}, replace={}]
+ }
+ \map{% JSTOR url to eprint
+ \step[fieldsource=url, match={jstor.org}, final]
+ \step[fieldset=eprint, fieldvalue={JSTOR}]
+ % \step[fieldset=urldate, null]
+ }
+ \map{% Project Muse url to eprint
+ \step[fieldsource=url, match={muse.jhu.edu}, final]
+ \step[fieldset=eprint, fieldvalue={Project Muse}]
+ % \step[fieldset=urldate, null]
+ }
+ \map{% Adelaide eBooks url to eprint
+ \step[fieldsource=url, match={ebooks.adelaide.edu.au}, final]
+ \step[fieldset=eprint, origfieldval]
+ \step[fieldset=eprinttype, fieldvalue={adelaide}]
+ % \step[fieldset=urldate, null]
+ }
+ \map{% Google Books url to eprint
+ \step[fieldsource=url, match={books.google}, final]
+ \step[fieldset=eprint, fieldvalue={Google Books}]
+ % \step[fieldset=urldate, null]
+ }
+ \map{% EBSCO - Academic Search Complete url to eprint
+ \step[fieldsource=url, match={db=a9h}, final]
+ \step[fieldset=eprint, fieldvalue={Academic Search Complete}]
+ % \step[fieldset=urldate, null]
+ }
+ \map{% EBSCO - LexisNexis Academic url to eprint
+ \step[fieldsource=url, match={db=fdcaae48}, final]
+ \step[fieldset=eprint, fieldvalue={LexisNexis Academic}]
+ % \step[fieldset=urldate, null]
+ }
+ \map{% EBSCO - MLA Database url to eprint
+ \step[fieldsource=url, match={db=mzh}, final]
+ \step[fieldset=eprint, fieldvalue={MLA International Bibliography}]
+ % \step[fieldset=urldate, null]
+ }
+ \map{% USPTO url to eprint
+ \step[fieldsource=url, match={patft.uspto.gov}, final]
+ \step[fieldset=eprint, fieldvalue={USPTO Patent Full-Text and Image Database}]
+ }
+ \map{% DOI url to doi
+ \step[fieldsource=url, match=\regexp{dx.doi.org/(.+)}, fieldtarget=doi]
+ \step[fieldsource=doi, match=\regexp{http(s)?://dx.doi.org/(.+)}, replace=\regexp{$1}]
+ \step[fieldsource=doi, match=\regexp{dx.doi.org/(.+)}, replace=\regexp{$1}]
+ }
+ \map{ % remove isbns from Works Cited
+ \step[fieldsource=isbn, final]
+ \step[fieldset=isbn, null]
+ }
+ \map{ % remove url + urldate field from all entries that have a doi field
+ \step[fieldsource=doi, final]
+ \step[fieldset=url, null]
+ \step[fieldset=urldate, null]
+ }
+ }
}
-\newbibmacro*{mla:generaleditor:internal}[1]{%
- \iffieldequalstr{editor#1type}{generaleditor}%
- {\printnames{editor#1}%
- \setunit{\addcomma\addspace}%
- \bibstring{generaleditor}%
- \newunit}%
- {}%
-}
-
-\newbibmacro*{mla:isbn/issn+doi+eprint}{% 0.7.1 modeled after biblatex-apa, here just a proof of concept and work in progress, ignoring any of the URL hiding implemented by Philip Kime
- \ifthenelse{\boolean{bbx:gnoreminfo}\OR\boolean{bbx:lnoreminfo}}%
- {\global\boolfalse{bbx:lnoreminfo}}%
- {\printfield{isbn}\clearfield{isbn}%
- \newunit\newblock%
- \printfield{issn}\clearfield{issn}%
- \newunit\newblock%
- \printfield{isrn}\clearfield{isrn}%
- \newunit\newblock%
- \printfield{doi}\clearfield{doi}%
- \newunit\newblock%
- \usebibmacro{eprint}%
- }}
-
-\DeclareBibliographyDriver{suppbook}{%
- \usebibmacro{bibindex}%
- \usebibmacro{author/editor}%
- \usebibmacro{mlabelnamepunct}%
- \usebibmacro{maintitle+title}%
- \newunit\newblock
- \printfield[mla:capital]{entrysubtype}%
- \newunit\newblock
- \iffieldundef{crossref}%
- {\iffieldundef{xref}%
- {\usebibmacro{mla:incollection:internal}}%
- {\bbx@crossref{\thefield{xref}}%
- \setunit{\addspace}%
- \printfield{pages}}}%
- {\bbx@crossref{\thefield{crossref}}%
- \setunit{\addspace}%
- \printfield{pages}%
- \newunit}%
- \newunit%
- \usebibmacro{publimedium}%
- \usebibmacro{finentry}}
-
-\DeclareCiteCommand{\bbx@crossref}%
- {}
- {\ifsingletitle%
- {\printtext[bibhyperref]{\printnames{labelname}}%
- \setunit{\space}}%
- {\printnames{labelname}%
- \setunit{\addcomma\addspace}%
- \printtext[bibhyperref]{\printfield[citetitle:book]{labeltitle}}
- \setunit{\space}}}%
- {}%
- {}
-
-\DeclareBibliographyDriver{incollection}{%
- \usebibmacro{bibindex}%
- \usebibmacro{author/editor+others/translator+others}%
- \usebibmacro{mlabelnamepunct}%
- \ifthenelse{%
- \iffieldequalstr{entrysubtype}{book}%
- \OR%
- \iffieldequalstr{entrysubtype}{play}%
- \OR%
- \iffieldequalstr{entrytype}{bookinbook}}%
- {\usebibmacro{title:incollection:italics}}%
- {\setboolean{bbx@mla-incollection}{true}%
- \usebibmacro{title}%
- \setboolean{bbx@mla-incollection}{false}}%
- \newunit\newblock%
- \ifbool{bbx@uniquetranslator}%
- {\usebibmacro{bytranslator+others}\newunit}%
- {}%
- \newunit\newblock%
- \iffieldundef{crossref}%
- {\iffieldundef{xref}%
- {\usebibmacro{mla:incollection:internal}}%
- {\bbx@crossref{\thefield{xref}}%
- \setunit{\addspace}%
- \printfield{pages}}}%
- {\bbx@crossref{\thefield{crossref}}%
- \setunit{\addspace}%
- \printfield{pages}%
- \newunit}%
- \newunit%
- \usebibmacro{publimedium}%
- \usebibmacro{finentry}}
-
-\newbibmacro*{mla:incollection:internal}{%
- \setboolean{bbx@mla-incollection}{true}%
- \usebibmacro{maintitle+booktitle}%
- \ifthenelse{%
- \iffieldequalstr{entrytype}{suppbook}%
- \OR%
- \iffieldequalstr{entrytype}{suppcollection}}%
- {\setunit{\newunitpunct\bibstring{byauthor}\addspace}%
- \ifnamesequal{labelname}{bookauthor}%
- {\printnames[mla:last]{bookauthor}}%
- {\printnames[byauthor]{bookauthor}}}%
- {}%
- \newunit\newblock%
- \usebibmacro{byauthor}%
- \newunit\newblock
- \usebibmacro{byeditor+others}%
- \newunit\newblock
- \printfield{edition}\isdot%
- \newunit
- \iffieldundef{maintitle}%
- {\printfield{volume}\printfield{part}}%
- {}%
- \newunit
- \iffieldundef{volume}%
- {\printfield{volumes}\clearfield{volumes}}%
- {}%%
- \newunit\newblock
- \ifbool{bbx@publimedium}%
- {}%
- {\usebibmacro{series+number}}%
- \newunit\newblock
- \printfield{note}%
- \newunit\newblock
- \usebibmacro{publisher+location+date}%
- \newunit\newblock
- \usebibmacro{chapter+pages}%
- \newunit\newblock
- \usebibmacro{mla:isbn/issn+doi+eprint}%
- \newunit\newblock
- \ifbool{bbx@publimedium}{}{\usebibmacro{url+urldate}}%
- \newunit\newblock
- \iffieldundef{volumes}%
- {}%
- {\usebibmacro{mla:multivolumes}}%
- \newunit\newblock
- \printfield{addendum}%
- \newunit\newblock
- \usebibmacro{pageref}%
- \setboolean{bbx@mla-incollection}{false}}
-
-\DeclareBibliographyDriver{inproceedings}{%
- \usebibmacro{bibindex}%
- \usebibmacro{author/editor+others/translator+others}%
- \usebibmacro{mlabelnamepunct}%
- \usebibmacro{title}%
- \newunit\newblock
- \usebibmacro{mla:proceedings:booktitle}%
- \newunit\newblock
- \usebibmacro{byeditor+others}%
- \newunit\newblock
- \ifbool{bbx@publimedium}%
- {}%
- {\usebibmacro{series+number}}%
- \newunit\newblock
- \printfield{note}%
- \newunit
- \usebibmacro{publisher+location+date}%
- \newunit\newblock
- \usebibmacro{chapter+pages}%
- \newunit\newblock
- \printfield{addendum}%
- \newunit\newblock
- \usebibmacro{pageref}%
- \newunit%
- \usebibmacro{publimedium}%
- \usebibmacro{finentry}}
-
-\DeclareBibliographyDriver{proceedings}{%
- \usebibmacro{bibindex}%
- \usebibmacro{author/editor+others/translator+others}%
- \usebibmacro{mlabelnamepunct}%
- \usebibmacro{mla:proceedings:booktitle}%
- \newunit\newblock
- \usebibmacro{byeditor+others}%
- \newunit\newblock
- \ifbool{bbx@publimedium}%
- {}%
- {\usebibmacro{series+number}}%
- \newunit\newblock
- \printfield{note}%
- \newunit
- \usebibmacro{publisher+location+date}%
- \newunit\newblock
- \usebibmacro{chapter+pages}%
- \newunit\newblock
- \printfield{addendum}%
- \newunit\newblock
- \usebibmacro{pageref}%
- \newunit%
- \usebibmacro{publimedium}%
- \usebibmacro{finentry}}
-
-\DeclareBibliographyDriver{unpublished}{%
- \usebibmacro{bibindex}%
- \usebibmacro{author/editor+others/translator+others}%
- \usebibmacro{mlabelnamepunct}%
- \usebibmacro{title}%
- \newunit\newblock
- \printfield{note}%
- \newunit\newblock
- \usebibmacro{mla:all:type}%
- \newunit\newblock
- \printfield{number}%
- \newunit\newblock
- \printfield{library}%
- \setunit{\addcomma\addspace}%
- \printlist{location}%
- \newunit\newblock
- \printfield{addendum}%
- \newunit%
- \usebibmacro{publimedium}%
- \usebibmacro{finentry}}
-
-\DeclareBibliographyDriver{thesis}{%
- \usebibmacro{bibindex}%
- \usebibmacro{author/editor+others/translator+others}%
- \usebibmacro{mlabelnamepunct}%
- \usebibmacro{title}%
- \newunit\newblock%
- \usebibmacro{mla:thesis:type}%
- \newunit\newblock
- \printlist{institution}%
- \setunit*{\addcomma\space}%
- \iffieldequalstr{entrysubtype}{published}%
- {\printfield{origyear}\clearfield{origyear}}% 1.4.9 cleared origyear
- {\printfield{year}}%
- \newunit\newblock
- \iffieldequalstr{entrysubtype}{published}%
- {\ifbool{bbx@publimedium}%
- {}%
- {\usebibmacro{series+number}}%
- \newunit%
- \printlist{location}%
- \setunit{\addcolon\addspace}%
- \printlist{publisher}%
- \setunit{\addcomma\addspace}%
- \printfield{year}}%
- {}%
- \newunit\newblock
- \printfield{addendum}%
- \newunit\newblock
- \newunit%
- \usebibmacro{publimedium}%
- \usebibmacro{finentry}}
-
-\DeclareBibliographyDriver{review}{%
- \usebibmacro{bibindex}%
- \usebibmacro{author}%
- \usebibmacro{mlabelnamepunct}%
- \printfield[title:article]{title}%
- \newunit\newblock%
- \printfield[title:reviewedbook]{booktitle}%
- \setunit{\addcomma\space}%
- \ifnameundef{bookauthor}%
- {\printtext[reviewededitor]{\printnames[default]{editor}}}%
- {\printtext[reviewedauthor]{\printnames[default]{bookauthor}}}%
- \newunit\newblock
- \usebibmacro{journal}%
- \setunit*{\addspace}%
- \ifthenelse{\iffieldequalstr{entrysubtype}{newspaper} \or \iffieldequalstr{entrysubtype}{magazine}}%
- {\printfield[brackets]{location}%
- \printtext{\printdate}%
- \newunit}%
- {\printfield{series}\clearfield{series}%
- \setunit{\addspace}%
- \printfield[default]{volume}%
- \setunit*{\adddot}%
- \printfield{number}\clearfield{number}%
- \setunit{\addcomma\space}%
- \printfield{eid}%
- \setunit{\addspace}%
- \usebibmacro{issue+date}%
- \newunit\newblock%
- \usebibmacro{issue}%
- \newunit}%
- \setunit{\addcolon\addspace}%
- \printfield{pages}%
- \newunit\newblock%
- \usebibmacro{publimedium}% 1.4.9 updated
- \usebibmacro{finentry}}
-
-\DeclareBibliographyDriver{inreference}{%
- \usebibmacro{bibindex}%
- \usebibmacro{author}%
- \usebibmacro{mlabelnamepunct}%
- \usebibmacro{title}%
- \newunit\newblock%
- \iffieldundef{crossref}%
- {\iffieldundef{xref}%
- {\newunit\newblock
- \usebibmacro{maintitle+booktitle}%
- \newunit\newblock
- \usebibmacro{byeditor+others}%
- \newunit\newblock
- \iffieldsequal{year}{edition}%
- {\printfield{year}~\bibstring{edition}\clearfield{year}}%
- {\printfield{edition}\isdot}%
- \newunit
- \iffieldundef{maintitle}%
- {\printfield{volume}%
- \printfield{part}}%
- {}%
- \newunit
- \printfield{volumes}%
- \newunit\newblock
- \ifbool{bbx@publimedium}%
- {}%
- {\usebibmacro{series+number}}%
- \newunit\newblock
- \printfield{note}%
- \newunit\newblock
- \usebibmacro{publisher+location+date}%
- \newunit\newblock
- \usebibmacro{chapter+pages}%
- \newunit\newblock
- \usebibmacro{mla:isbn/issn+doi+eprint}%
- \newunit\newblock
- \ifbool{bbx@publimedium}{}{\usebibmacro{url+urldate}}%
- \newunit\newblock
- \printfield{addendum}%
- \newunit\newblock
- \usebibmacro{pageref}}%
- {}}%
- {\bbx@crossref{\thefield{crossref}}%
- \nopunct\unspace\printfield{pages}}%
- \newunit%
- \usebibmacro{publimedium}%
- \usebibmacro{finentry}}
-
-\newbibmacro{mlabelnamepunct}{\setunit{\labelnamepunct}\newblock}
-
-\newbibmacro{mla:video:localized:last-first}[1]{%
- \ifnameundef{#1}%
- {}%
- {\printnames{#1}\addcomma\addspace%
- \ifthenelse{\iffieldbibstring{#1type} \and \not %
- \iffieldundef{#1type}}%
- {\bibstring{\thefield{#1type}}}%
- {\iffieldundef{#1type}%
- {\bibstring{with}}%
- {\printfield[mla:lowercase]{#1type}}}}%
-\iffootnote{\setunit{\addcomma\addspace}}{\newunit}}%
-
-\newbibmacro{mla:video:name:first:footnote}[1]{%
- \ifnameundef{#1}%
- {}%
- {\printnames[byeditor]{#1}\addcomma\addspace%
- \ifthenelse{\iffieldbibstring{#1type} \and \not %
- \iffieldundef{#1type}}%
- {\bibstring{\thefield{#1type}}}%
- {\iffieldundef{#1type}%
- {\bibstring{with}}%
- {\printfield[mla:lowercase]{#1type}}}}%
- \clearname{#1}%
-}
-
-\newbibmacro{mla:video:localized:first-last}[1]{%
- \ifnameundef{#1}%
- {}%
- {\ifthenelse{\iffieldbibstring{#1type} \and \not %
- \iffieldundef{#1type} \and \not %
- \iffieldequalstr{#1type}{composer}}%
- {\bibstring{\thefield{#1type}}}%
- {\iffieldundef{#1type}%
- {\bibstring{with}}%
- {\iffieldequalstr{#1type}{composer}%
- {\bibstring{composedby}}%
- {\printfield[mla:capital]{#1type}}}}%
- \addspace\printnames[byeditor][-\value{listtotal}]{#1}}%
-\newunit}%
-
-\newbibmacro{mla:video:name:second:footnote}[1]{%
- \ifnameundef{#1}%
- {}%
- {\ifthenelse{\iffieldbibstring{#1type} \and \not %
- \iffieldundef{#1type} \and \not %
- \iffieldequalstr{#1type}{composer}}%
- {\bibstring{\thefield{#1type}}}%
- {\iffieldundef{#1type}%
- {\bibstring{with}}%
- {\iffieldequalstr{#1type}{composer}%
- {\bibstring{composedby}}%
- {\printfield[mla:lowercase]{#1type}}}}%
- \addspace\printnames[byeditor][-\value{listtotal}]{#1}%
- }}%
-
-\DeclareBibliographyDriver{video}{%
- \ifnamesequal{labelname}{author}%
- {\usebibmacro{mla:video:localized:last-first}{author}}{}%
- \ifnamesequal{labelname}{editor}%
- {\usebibmacro{mla:video:localized:last-first}{editor}}{}%
- \printfield{title}%
- \setunit{\newunitpunct\bibstring{byauthor}\addspace}%
- \printnames[byeditor]{bookauthor}%
- \newunit%
- \ifthenelse{\NOT\ifnamesequal{author}{labelname}%
- \AND\NOT\ifnameundef{author}}%
- {\usebibmacro{mla:video:localized:first-last}{author}}%
- {}%
- \ifthenelse{\NOT\ifnamesequal{editor}{labelname}%
- \AND\NOT\ifnameundef{editor}}%
- {\usebibmacro{mla:video:localized:first-last}{editor}}%
- {}%
- \usebibmacro{mla:video:localized:first-last}{namea}%
- \usebibmacro{mla:video:localized:first-last}{nameb}%
- \usebibmacro{mla:video:localized:first-last}{namec}%
- \printfield{origyear}\clearfield{origyear}%
- \newunit\newblock%
- \printlist{publisher}%
- \setunit{\addcomma\addspace}%
- \printfield{year}%
- \newunit\newblock%
- \usebibmacro{publimedium}% 1.4.9 updated to most recent MLA format
- \usebibmacro{finentry}}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% % % % % % % % % % % % % % % % % % % % % %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% drivers to add eventually:
-% * \DeclareBibliographyDriver{misc}
-% * \DeclareBibliographyDriver{artwork}
-% * \DeclareBibliographyDriver{audio}
-% * \DeclareBibliographyDriver{image}
-% * \DeclareBibliographyDriver{movie}
-% * \DeclareBibliographyDriver{music}
-% * \DeclareBibliographyDriver{performance}
-%
-% Specifically important mainstay types to add for MLA users
-% 0 support for multiple publishers? % can't do with bibtex
-% * editorial
-% * letter (to the editor, etc.)
-% * interview
-
-\newbibmacro*{mtitle+mstitle+vol+part+title+stitle}{%
- \iffieldundef{maintitle}%
- {}%
- {\printtext[maintitle]{%
- \printfield[noformat]{maintitle}%
- \newunit
- \printfield[noformat]{mainsubtitle}}%
- \newunit
- \printfield{maintitleaddon}%
- \newunit\newblock
- \iffieldundef{volume}%
- {}%
- {\printfield{volume}%
- \printfield{part}%
- \setunit{\addcolon\space}}}%
- \usebibmacro{title+stitle}}
-
-\renewbibmacro*{series+number}{%
- \iffieldundef{series}%
- {}%
- {\printfield{series}\clearfield{series}\setunit*{\addspace}\printfield{number}}%
-}
-
-\renewbibmacro*{title}{%
- \iffieldequalstr{entrytype}{thesis}%
- {\usebibmacro{mla:title:thesis}}%
- {\iffieldequalstr{entrytype}{unpublished}%
- {\usebibmacro{mla:title:unpublished}}%
- {\usebibmacro{title+stitle}}}}%
-
-\renewbibmacro*{publisher+location+date}{%
- \printlist{location}%
- \iflistundef{publisher}%
- {\setunit*{\addcomma\space}}%
- {\setunit*{\addcolon\space}}%
- \printlist{publisher}%
- \setunit*{\addcomma\space}%
- \ifbool{bbx@nodate}{\printtext{n.d.}}%
- \printdate%
- \newunit}
-
-\newbibmacro*{mla:title:unpublished}{%
- \ifthenelse{\iffieldundef{author} \AND \iffieldundef{nameaddon}}%
- {\unspace}%
- {}%
- \iffieldundef{title}%
- {}%
- {\printtext[title:article]{%
- \printfield[noformat]{title}%
- \setunit{\subtitlepunct}%
- \printfield[noformat]{subtitle}}}%
- \newunit
- \printtext[title:book]{%
- \printfield[noformat]{booktitle}%
- \setunit{\subtitlepunct}%
- \printfield[noformat]{booksubtitle}}%
- \newunit
- \ifcitation%
- {\printfield[mla:lowercase]{titleaddon}}%
- {\printfield{titleaddon}}%
- \setunit{\addcomma\addspace}}
-
-\newbibmacro*{name:first-last:andothers}{%
- \ifthenelse{\value{listcount}=\value{liststop}\AND
- \ifmorenames}
- {\ifnum\value{liststop}>1 \finalandcomma\fi
- \addspace\bibstring{andothers}}
- {}}
-
-\newbibmacro*{mla:title:thesis}{%
- \iffieldundef{title}%
- {}%
- {\iffieldequalstr{entrysubtype}{published}%
- {\printtext[title:book]{%
- \printfield[noformat]{title}%
- \setunit{\subtitlepunct}%
- \printfield[noformat]{subtitle}}}%
- {\printtext[title:\strfield{entrytype}]{%
- \printfield[noformat]{title}%
- \setunit{\subtitlepunct}%
- \printfield[noformat]{subtitle}}}%
- \newunit%
- \printfield{titleaddon}%
- \newunit\newblock}}
-
-\newbibmacro*{mla:thesis:type}{%
- \iffieldundef{type}%
- {\printtext[mla:capital]{\bibstring{phdthesis}}}%
- {\usebibmacro{mla:all:type}}}%
-
-\newbibmacro*{mla:all:type}{%
- \ifbibstring{\thefield{type}}%
- {\printtext[mla:capital]{\bibstring{\thefield{type}}}}%
- {\printtext[mla:capital]{\printfield{type}}}}%
-
-\newbibmacro*{mla:all:type:foot}{%
- \ifbibstring{\thefield{type}}%
- {\printtext[noformat]{\bibstring{\thefield{type}}}}%
- {\printtext[noformat]{\printfield{type}}}}%
-
-\renewbibmacro*{maintitle+title}{%
- \usebibmacro{title}%
- \newunit%
- \iffieldsequal{maintitle}{title}%
- {\clearfield{maintitle}%
- \clearfield{mainsubtitle}%
- \clearfield{maintitleaddon}}%
- {}%
- \iffieldundef{volume}%
- {\usebibmacro{maintitle}}%
- {}%
- \iffieldundef{maintitle}%
- {\printfield{volume}\clearfield{volume}}%
- {}%
- \newunit\newblock}
-
-\renewbibmacro*{maintitle+booktitle}{%
- \usebibmacro{booktitle}%
- \newunit
- \iffieldundef{maintitle}%
- {}%
- {\usebibmacro{maintitle}%
- \newunit\newblock
- \iffieldundef{volume}%
- {}%
- {\printfield{volume}%
- \printfield{part}%
- \setunit{\addcolon\space}}}%
- \newunit}
-
-\newbibmacro*{mla:proceedings:booktitle}{%
- \usebibmacro{booktitle}%
- \newunit%
- \iffieldundef{eventtitle}%
- {}%
- {\printtext[default]{%
- \bibstring{proceedings}\addspace\bibstring{ofseries}\addspace%
- \printfield[default]{eventtitle}\isdot}}%
- \setunit*{\isdot\addcomma\addspace}%
- \printlist{organization}%
- \setunit*{\addcomma\addspace}%
- \printeventdate%
- \setunit*{\addcomma\addspace}%
- \printlist{institution}%
- \setunit*{\addcomma\addspace}%
- \printfield{venue}}
-
-\newbibmacro*{title+stitle}{%
- \iffieldundef{title}%
- {\ifthenelse{%
- \iffieldequalstr{entrytype}{suppbook}%
- \OR%
- \iffieldequalstr{entrytype}{suppcollection}}%
- {}%
- {\printtext[title:\strfield{entrytype}]{%
- \printfield[noformat]{booktitle}%
- \setunit*{\subtitlepunct}%
- \printfield[noformat]{booksubtitle}}}}%
- {\printtext[title:\strfield{entrytype}]{%
- \printfield[noformat]{title}%
- \setunit*{\subtitlepunct}%
- \printfield[noformat]{subtitle}}}%
- \newunit%
- \printfield[noformat]{titleaddon}%
- \newunit%
- \usebibmacro{byauthor}%
- \iffieldundef{origtitle}%
- {\usebibmacro{mla:reprint}}%
- {}%
-}%
-
-\newbibmacro*{title:incollection:italics}{%
- \iffieldundef{title}%
- {}%
- {\printtext[title:book]{%
- \printfield[noformat]{title}%
- \setunit*{\subtitlepunct}%
- \printfield[noformat]{subtitle}}%
- \newunit%
- \printfield[noformat]{titleaddon}%
- \newunit%
- \setboolean{bbx@mla-incollection}{true}\usebibmacro{mla:reprint}\setboolean{bbx@mla-incollection}{false}%
- \newunit\newblock}}
-
-\newbibmacro*{mla:article:journal+issuetitle}{%
- \usebibmacro{issue}%
- \newunit\newblock%
- \iffieldundef{issuetitle}%
- {}%
- {\usebibmacro{byeditor+others}%
- \newunit\newblock%
- \bibstring{specissue}\setunit*{\addspace}}%
- \ifthenelse{\iffieldequalstr{entrytype}{periodical} \AND \iffieldundef{journaltitle}}%
- {\usebibmacro{periodical}}%
- {\usebibmacro{journal}}%
- \ifthenelse{\iffieldequalstr{entrytype}{online}}{\usebibmacro{mla:online}}{\setunit*{\addspace}}%
- \ifthenelse{\iffieldequalstr{entrysubtype}{newspaper} \or \iffieldequalstr{entrysubtype}{magazine} \or \iffieldequalstr{entrytype}{online}}%
- {\printlist[brackets]{location}%
- \printtext{\printdate}%
- \setunit*{\addcomma\addspace}%
- \printfield{version}%
- \setunit*{\addcomma\addspace}%
- \printfield[mla:newspaper:section]{chapter}%
- }%
- {\printfield{series}\clearfield{series}%
- \setunit*{\addspace}%
- \printfield{volume}%
- \setunit*{\adddot}%
- \printfield{number}\clearfield{number}%
- \setunit*{\addcomma\space}%
- \usebibmacro{mla:isbn/issn+doi+eprint}%
- \setunit{\addspace}%
- \usebibmacro{issue+date}%
- \newunit\newblock
- \newunit}%
-}
-
-\newbibmacro*{mla:online}{%
- \iffieldundef{maintitle}%
- {}%
- {\printtext[maintitle]{%
- \printfield[titlecase]{maintitle}%
- \setunit{\subtitlepunct}%
- \printfield[titlecase]{mainsubtitle}}}%
- \newunit\newblock%
- \printlist{publisher}%
- \setunit*{\addcomma\addspace}%
-}
-
-\renewbibmacro*{journal+issuetitle}{%
- \usebibmacro{journal}%
- \setunit*{\addspace}%
- \ifthenelse{\iffieldequalstr{entrysubtype}{newspaper} \or \iffieldequalstr{entrysubtype}{magazine}}%
- {\printlist[brackets]{location}%
- \printtext{\printdate}%
- \setunit{\addcomma\addspace}%
- \printfield{version}%
- \setunit{\addcomma\addspace}%
- \printfield[mla:newspaper:section]{chapter}%
- }%
- {\printfield{series}\clearfield{series}%
- \setunit{\addspace}%
- \printfield{volume}%
- \setunit*{\adddot}%
- \printfield{number}\clearfield{number}%
- \setunit{\addcomma\space}%
- \usebibmacro{mla:isbn/issn+doi+eprint}%
- \setunit{\addspace}%
- \usebibmacro{issue+date}%
- \newunit\newblock
- \usebibmacro{issue}%
- \newunit}}
-
-\renewbibmacro{finentry}{%
- \finentry%
- \iffieldundef{annotation}%
- {}%
- {\ifbool{bbx@annotation}%
- {\begin{quotation}\noindent%
- \printfield{annotation}%
- \end{quotation}}%
- {}}%
-}
-
-\newbibmacro{publimedium}{%
- \ifbool{bbx@publimedium}%
- {\printfield[mla:capital]{howpublished}%
- \ifthenelse{\iffieldundef{howpublished}\AND\boolean{bbx@guessmedium}}%
- {\ifthenelse{\iffieldundef{url}\AND\iffieldundef{eprinttype}}%
- {\printtext[mla:publimedium]{\bibstring{print}}}%
- {\iffieldundef{eprinttype}%
- {\printfield{eprint}}%
- {\printfield[eprint:\strfield{eprinttype}]{eprint}}%
- \newunit%
- \usebibmacro{url+urldate}%
- }%
- }%
- {}%-keep-blank
- \newunit%
- \usebibmacro{series+number}}%
- \newunit%
- \usebibmacro{mla:reprint}%
- {}%-keep-blank
-}
-
-\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
-
-
\endinput
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-mla/mla.cbx b/macros/latex/contrib/biblatex-contrib/biblatex-mla/mla.cbx
index a8d62a8a1b..1085fb5623 100644
--- a/macros/latex/contrib/biblatex-contrib/biblatex-mla/mla.cbx
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-mla/mla.cbx
@@ -1,11 +1,13 @@
-% mla-this.cbx, v1.9 2016/11/01 * compatible with biblatex 3.4
-% Maintained at <https://github.com/jmclawson/biblatex-mla> by James Clawson.
+% mla.cbx, v2.0 2021/06/07 * compatible with biblatex 3.16
+% Maintained at <https://github.com/jmclawson/biblatex-mla>.
%
-% Feel free to improve, redistribute, and adapt to your own ends. Please share improvements in formatting and MLA standards compliance back to James Clawson: <clawson@gmail.com>.
+% Feel free to improve, redistribute, and adapt to your own ends. Please share improvements back to the project on GitHub or to James Clawson: <clawson@gmail.com>.
%
% This material is subject to the LaTeX Project Public License. See http://www.ctan.org/tex-archive/help/Catalogue/licenses.lppl.html for the details of that license.
-\ProvidesFile{mla-this.cbx}[2016/11/01 v1.9 biblatex citation style]
+\ProvidesFile{mla.cbx}[2021/06/07 v2.0 biblatex citation style]
+
+\RequireCitationStyle{mla-footnotes}
\newboolean{cbx@firstlonghand}%
\DeclareBibliographyOption{firstlonghand}[true]{\setboolean{cbx@firstlonghand}{#1}}
@@ -23,8 +25,7 @@
\let\everypar\mypkg@everypar
}{}}
-% The following is taken from biblatex-chicago-notes-df for parity of feature set. I don't like the naming of the option there ("strict"), so even though consistency trumps (or defines) clarity, I changed the name for now.
-\DeclareBibliographyOption{footnoterulestrict}[true]{% 0.7 renamed
+\DeclareBibliographyOption{footnoterulestrict}[true]{%
\let\splitfootnoterule\footnoterule
\renewcommand\footnoterule{}%
\advance\skip\footins 4\p@\@plus2\p@\relax
@@ -39,7 +40,7 @@
\xdef\split@prev{\the\insertpenalties}%
}}
-\ExecuteBibliographyOptions{citetracker=true,ibidtracker=constrict,opcittracker=constrict,singletitle,autocite=inline,uniquename=init,hyperref=true,useprefix=true,firstlonghand,annotation=false,loccittracker=strict,noremoteinfo=true,date=long,urldate=long,mancitepar=false,datezeros=false}%
+\ExecuteBibliographyOptions{citetracker=true,ibidtracker=constrict,opcittracker=constrict,singletitle,autocite=inline,uniquename=init,hyperref=true,useprefix=true,firstlonghand,annotation=false,loccittracker=strict,noremoteinfo=true,date=comp,urldate=long,mancitepar=false,datezeros=false,datecirca=true,eprint=true}%
\newbool{cbx@named}%
\newbool{cbx@mlafootnotes}%
@@ -55,7 +56,6 @@
\global\let\cbx@tempa=\empty
\global\undef\cbx@lasthash}
-% 0.7.1 trying to get \citereset working again after I fiddled around with \InitializeCitationStyle to add mladraft stuff
\renewcommand*{\citereset}{%
\usebibmacro{cite:reset}
\@ifstar
@@ -91,10 +91,8 @@
\csxdef{cbx@lastcite@\thefield{entrykey}}{\the\value{instcount}}}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%% In-Line Citations %%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newbibmacro*{cite:mla}{%
\bibhypertarget{cite\the\value{instcount}}{%
@@ -128,7 +126,7 @@
\usebibmacro{cite:mla:title}}%
{\ifnameundef{labelname}%
{\global\boolfalse{cbx@named}\usebibmacro{cite:mla:title}}%
- {\ifthenelse{\iffieldequalstr{entrytype}{incollection} \or \iffieldequalstr{entrytype}{inreference} \or \iffieldequalstr{entrytype}{review}} %
+ {\ifthenelse{\iffieldequalstr{entrytype}{incollection} \or \iffieldequalstr{entrytype}{inreference} \or \iffieldequalstr{entrytype}{review}}%
{\ifnameundef{author}%
{\global\boolfalse{cbx@named}%
\usebibmacro{cite:mla:title}}%
@@ -156,10 +154,23 @@
\savefield{namehash}{\cbx@lasthash}%
\global\booltrue{cbx@named}}}%
+\newbibmacro*{just:title:it}{%
+ \iffieldequalstr{entrytype}{mlasource}%
+ {\iffieldundef{titletype}%
+ {\iffieldundef{titlea}%
+ {\printtext[bibhyperref]{\printfield[mla:complete]{labeltitle}}}%
+ {\printtext[bibhyperref]{\printfield[mla:part]{labeltitle}}}}%
+ {\printtext[bibhyperref]{\printfield[mla:\thefield{titletype}]{labeltitle}}}}%
+ {\ifthenelse{\(\iffieldequalstr{entrytype}{unpublished}\OR\iffieldequalstr{entrytype}{misc}\)%
+ \AND\NOT\iffieldundef{entrysubtype}}% 2.0 added clear (next line)
+ {\printtext[bibhyperref]{\printfield[citetitle:\strfield{entrysubtype}]{labeltitle}}\clearfield{title}}%
+ {\iffieldequalstr{entrysubtype}{untitled}%
+ {\printtext[bibhyperref]{\printfield[noformat]{labeltitle}}}%
+ {\printtext[bibhyperref]{\printfield[citetitle:\strfield{entrytype}]{labeltitle}}}}}}
+
\newbibmacro*{cite:mla:title}{%
\ifnameundef{labelname}%
- {\printtext[bibhyperref]{%
- \printfield[citetitle:\strfield{entrytype}]{labeltitle}}}%
+ {\usebibmacro{just:title:it}}%
{\ifsingletitle%
{}%
{\usebibmacro{cite:mla:title:internal}}}%
@@ -185,11 +196,13 @@
\OR\iffieldequalstr{entrytype}{suppcollection}}%
{\printtext[bibhyperref]{%
\printfield[mla:capital]{entrysubtype}}}%
- {}}}%
- {\printtext[bibhyperref]{%
- \printfield[citetitle:\strfield{entrytype}]{labeltitle}}}}%
+ {\iffieldundef{booktitle}% 2.0 fallback to print booktitle
+ {}%
+ {\printfield{booktitle}}%
+ }}}%
+ {\usebibmacro{just:title:it}}}%
-% %%%%%%%%%% for ibid, idem, opcit %%%%%%%%
+%%%%%%%%%%% for ibid, idem, opcit %%%%%%%%
\newbibmacro*{cite:idem}{%
\ifsingletitle%
@@ -201,20 +214,19 @@
\newbibmacro*{cite:ibid}{%
\iffieldundef{postnote}%
- {\usebibmacro{cite:mla:noibid}}%
+ {\usebibmacro{cite:mla:noibid}}% 2.0 - check: add check here to see whether author should be printed?
{\global\booltrue{cbx@hyperpages}}%
\usebibmacro{cite:save}%
\iffieldundef{prenote}%
{}%
- {\usebibmacro{cite:mla:noibid}\usebibmacro{cite:reset}}}%
+ {}}% 2.0 removed confusing attempt to disambiguate with prenotes
\renewcommand*{\postnotedelim}{\addspace}%
\renewbibmacro*{postnote}{%
- \iffieldundef{postnote}
- {}
- {\setunit{\addspace}%
- \ifbool{cbx@hyperpages}%
+ \iffieldundef{postnote}%
+ {}%
+ {\ifbool{cbx@hyperpages}%
{\printtext[bibhyperref]{\printfield[ibidpostnote]{postnote}}}%
{\printfield[ibidpostnote]{postnote}}}}%
@@ -232,414 +244,6 @@
{}}%
{\usebibmacro{postnote}}}
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%% Footnote Citations %%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\newbibmacro*{cite:mla:foot}{%
- \ifciteseen%
- {\usebibmacro{cite:mla:seen}}%
- {\ifbool{cbx@nofullfootnote}%
- {\usebibmacro{cite:mla:seen}}%
- {\usedriver{}{footcite:\strfield{entrytype}}}%
- }}
-
-\newbibmacro*{cite:foot:name}{%
- \global\boolfalse{cbx@named}%
- \usebibmacro{cite:foot:author/editor}%
- \savefield{namehash}{\cbx@lasthash}}%
-
-\newbibmacro*{cite:foot:author:review}{%
- \global\boolfalse{cbx@named}%
- \ifnameundef{author}%
- {}%
- {\usebibmacro{cite:foot:author}%
- \savefield{namehash}{\cbx@lasthash}%
- \global\booltrue{cbx@named}%
- }}%
-
-\newbibmacro*{cite:foot:author/editor}%
-{\ifthenelse{\ifuseauthor\AND\NOT\ifnameundef{author}}%
- {\usebibmacro{cite:foot:author}}%
- {\usebibmacro{cite:foot:editor}}}%
-
-\newbibmacro*{cite:foot:author}{%
- \ifbool{bbx@totalnames}%
- {\printnames[byauthor][-\value{listtotal}]{author}}%
- {\printnames[byauthor]{author}}%
- \clearname{author}\global\booltrue{cbx@named}%
- \printfield{nameaddon}}
-
-\newbibmacro*{cite:foot:editor}{%
- \ifthenelse{\ifuseeditor\AND\NOT\ifnameundef{editor}}%
- {\ifbool{bbx@totalnames}%
- {\printnames[byeditor][[-\value{listtotal}]]{editor}}%
- {\printnames[byeditor]{editor}}%
- \setunit*{\addcomma\space}%
- \usebibmacro{editorstrg}%
- \clearname{editor}\global\booltrue{cbx@named}}%
- {\ifusetranslator%
- {\printnames[byeditor]{translator}%
- \setunit*{\addcomma\space}%
- \usebibmacro{translatorstrg}%
- \clearname{translator}\global\booltrue{cbx@named}}%
- {}%
- }}%
-
-\newbibmacro*{cite:foot:byauthor:incollection}{%
- \ifthenelse{\ifuseauthor\OR%
- \ifnameundef{author}\OR%
- \ifnamesequal{author}{bookauthor}}%
- {}%
- {\biblcstring{byauthor}\addspace%
- \printnames[byauthor]{author}}}
-
-\newbibmacro*{cite:foot:byauthor}{%
- \ifthenelse{\ifuseauthor\OR%
- \ifnameundef{author}}%
- {}%
- {\bibstring{byauthor}\addspace\printnames[byauthor]{author}}}
-
-\newbibmacro*{cite:foot:bybookauthor}{%
- \ifthenelse{\ifnameundef{bookauthor}\OR%
- \(\ifnamesequal{author}{bookauthor}\AND\ifuseauthor\)}%
- {}%
- {\bibstring{byauthor}\addspace\printnames[byauthor]{bookauthor}}}
-
-\DeclareBibliographyDriver{footcite:booklet}{%
- \usedriver{}{footcite:book}}
-
-\DeclareBibliographyDriver{footcite:collection}{%
- \usedriver{}{footcite:book}}
-
-\DeclareBibliographyDriver{footcite:reference}{%
- \usedriver{}{footcite:book}}
-
-\DeclareBibliographyDriver{footcite:book}{%
- \usebibmacro{cite:foot:name}%
- \ifbool{cbx@named}% 0.7.1
- {\setunit{\newunitpunct}}%
- {\setunit{}}%
- \usebibmacro{cite:foot:title}%
- \newunit%
- \usebibmacro{cite:foot:byauthor}%
- \newunit%
- \usebibmacro{cite:foot:byeditor}%
- \newunit%
- \usebibmacro{cite:foot:bytranslator}%
- \newunit%
- \printfield{edition}%
- \newunit%
- \iffieldundef{maintitle}%
- {\printfield{volume}%
- \printfield{part}}%
- {}%
- \newunit%
- \printfield{volumes}%
- \newunit%
- \usebibmacro{series+number}%
- \setunit{\addspace}%
- \usebibmacro{cite:foot:publisher+location+year}}
-
-\newbibmacro*{cite:foot:publisher+location+year}{%
- \printtext[parens]{%
- \printfield[noformat]{origyear}%
- \setunit*{\addsemicolon\addspace}%
- \printlist{location}%
- \iflistundef{publisher}%
- {\setunit*{\addspace}}%
- {\setunit*{\addcolon\space}}%
- \printlist{publisher}%
- \newunit%
- \printfield{year}}}
-
-\DeclareBibliographyDriver{footcite:article}{%
- \usebibmacro{cite:foot:name}%
- \newunit%
- \usebibmacro{cite:foot:title}%
- \newunit%
- \usebibmacro{cite:foot:byauthor:incollection}%
- \newunit%
- \usebibmacro{cite:foot:bytranslator}%
- \newunit%
- \usebibmacro{journal+issuetitle}%
- \newunit%
- \iffieldundef{url}{}{\usebibmacro{cite:foot:url+urldate}}%
- \setunit{\addcolon\addspace}%
- \iffieldundef{postnote}%
- {\printfield{pages}}%
- {}}%
-
-\newbibmacro*{cite:foot:url+urldate}{%
- \printtext{\biburldatelong}%
- \setunit{\addspace}%
- \printfield{url}}
-
-\DeclareBibliographyDriver{footcite:inreference}{%
- \usedriver{}{footcite:incollection}}
-
-\DeclareBibliographyDriver{footcite:incollection}{%
- \usebibmacro{cite:foot:name}%
- \ifbool{cbx@named}% 0.7.1
- {\setunit{\newunitpunct}}%
- {\setunit{}}%
- \ifthenelse{%
- \iffieldequalstr{entrysubtype}{book}%
- \OR%
- \iffieldequalstr{entrysubtype}{play}}%
- {\usebibmacro{cite:foot:title:incollection:italics}}%
- {\usebibmacro{cite:foot:title}}%
- \newunit%
- \printfield[mla:lowercase]{titleaddon}%
- \newunit%
- \usebibmacro{cite:foot:byauthor:incollection}%
- \newunit%
- \ifbool{bbx@uniquetranslator}%
- {\usebibmacro{cite:foot:bytranslator}\clearname{translator}}%
- {}%
- \ifthenelse{%
- \iffieldequalstr{entrysubtype}{book}%
- \OR%
- \iffieldequalstr{entrysubtype}{play}}%
- {\setunit{\addcomma\addspace\bibstring{in}\addspace}}%
- {\newunit}%
- \printtext[citetitle:book]{%
- \printfield[noformat]{booktitle}%
- \setunit{\subtitlepunct}%
- \printfield[noformat]{booksubtitle}%
- }%
- \usebibmacro{cite:foot:bybookauthor}%
- \newunit%
- \usebibmacro{cite:foot:byeditor}% ...check for spacing
- \newunit%
- \iffieldsequal{year}{edition}%
- {\printfield{year}~\bibstring{edition}\clearfield{year}}%
- {\printfield[foot:cite:edition:format]{edition}\isdot}%
- \newunit%
- \iffieldundef{maintitle}%
- {\printfield{volume}%
- \printfield{part}}%
- {}%
- \newunit%
- \printfield{volumes}%
- \newunit%
- \usebibmacro{series+number}%
- \setunit{\addspace}%
- \iffieldundef{year}%
- {}%
- {\usebibmacro{cite:foot:publisher+location+year}}%
- \setunit{\addspace}%
- \iffieldundef{postnote}%
- {\printfield{pages}}%
- {}%
- }%
-
-\DeclareBibliographyDriver{footcite:phdthesis}{%
- \usedriver{}{footcite:thesis}}
-
-\DeclareBibliographyDriver{footcite:thesis}{%
- \usebibmacro{cite:foot:name}%
- \newunit%
- \usebibmacro{title}%
- \newunit%
- \ifbibstring{\thefield{type}}%
- {\printtext[default]{\bibstring{\thefield{type}}}}%
- {\printtext[default]{\printfield{type}}}%
- \newunit%
- \printlist{institution}%
- \newunit%
- \iffieldequalstr{entrysubtype}{published}%
- {\printfield{origyear}\clearfield{origyear}}%
- {\printfield{year}}%
- \newunit%
- \iffieldequalstr{entrysubtype}{published}%
- {\usebibmacro{series+number}%
- \setunit{\addspace}%
- \usebibmacro{cite:foot:publisher+location+year}}%
- {}}
-
-\DeclareBibliographyDriver{footcite:review}{%
- \usebibmacro{cite:foot:author:review}%
- \ifbool{cbx@named}%
- {\setunit{\newunitpunct}}%
- {\setunit{}}%
- \usebibmacro{cite:foot:title}%
- \setunit*{\newunitpunct}%
- \printtext[bibhyperref]%
- {\bibstring{reviewof}\addspace\printfield{booktitle}}%
- \newunit%
- \ifnameundef{bookauthor}%
- {\printtext[reviewededitor]{\printnames[default]{editor}}}%
- {\printtext[reviewedauthor]{\printnames[default]{bookauthor}}}%
- \newunit%
- \usebibmacro{journal+issuetitle}%
- \newunit%
- \iffieldundef{url}{}{\usebibmacro{cite:foot:url+urldate}}%
- \setunit{\addcolon\addspace}%
- \iffieldundef{postnote}%
- {\printfield{pages}}%
- {}}%
-
-\DeclareBibliographyDriver{footcite:video}{%
- \setbool{cbx@named}{false}%
- \ifnamesequal{labelname}{author}%
- {\usebibmacro{mla:video:name:first:footnote}{author}%
- \setbool{cbx@named}{true}}%
- {}%
- \ifnamesequal{labelname}{editor}%
- {\usebibmacro{mla:video:name:first:footnote}{editor}%
- \setbool{cbx@named}{true}}%
- {}%
- \ifbool{cbx@named}%
- {\setunit{\newunitpunct}}%
- {\setunit{}}%
- \printtext[bibhyperref]{\printfield{title}}%
- \newunit%
- \ifnameundef{bookauthor}%
- {}%
- {\printtext[reviewedauthor]{\printnames[byeditor]{bookauthor}}}%
- \newunit%
- \usebibmacro{mla:video:name:second:footnote}{author}%
- \newunit%
- \usebibmacro{mla:video:name:second:footnote}{editor}%
- \newunit%
- \usebibmacro{mla:video:name:second:footnote}{namea}%
- \newunit%
- \usebibmacro{mla:video:name:second:footnote}{nameb}%
- \newunit%
- \usebibmacro{mla:video:name:second:footnote}{namec}%
- \newunit%
- \printfield{origyear}%
- \newunit%
- \printfield{howpublished}%
- \newunit%
- \printlist{publisher}%
- \newunit%
- \printfield{year}%
- \addperiod}
-
-\DeclareBibliographyDriver{footcite:suppcollection}{%
- \usedriver{}{footcite:suppbook}}
-
-\DeclareCiteCommand{\titleandsubtitle}
- {\boolfalse{citetracker}%
- \boolfalse{pagetracker}%
- \usebibmacro{prenote}}
- {\indexfield{indextitle}%
- \printtext[citetitle]{%
- \printfield[noformat]{title}%
- \iffieldundef{subtitle}{}{\subtitlepunct}%
- \printfield[noformat]{subtitle}}}%
- {\multicitedelim}
- {\usebibmacro{postnote}}
-
-\DeclareBibliographyDriver{footcite:suppbook}{%
- \usebibmacro{cite:foot:name}%
- \newunit%
- \usebibmacro{cite:foot:title}%
- \newunit%
- \printfield{entrysubtype}%
- \newunit%
- \usebibmacro{booktitle}%
- \setunit{\newunitpunct\bibstring{bytypeauthor}\addspace}%
- \ifnamesequal{labelname}{bookauthor}% 0.7
- {\printnames[mla:last]{bookauthor}}%
- {\printnames[byauthor]{bookauthor}}%
- \newunit%
- \usebibmacro{byeditor+others}%
- \newunit%
- \printfield{edition}%
- \newunit%
- \iffieldundef{maintitle}%
- {\printfield{volume}%
- \printfield{part}}%
- {}%
- \newunit%
- \printfield{volumes}%
- \newunit%
- \usebibmacro{series+number}%
- \setunit{\addspace}%
- \usebibmacro{cite:foot:publisher+location+year}%
- \setunit{\addspace}%
- \iffieldundef{postnote}%
- {\printfield{pages}}%
- {}}
-
-\DeclareBibliographyDriver{footcite:unpublished}{%
- \usebibmacro{cite:foot:name}%
- \newunit%
- \usebibmacro{mla:title:unpublished}%
- \newunit%
- \newunit%
- \printfield{note}%
- \newunit%
- \usebibmacro{mla:all:type:foot}%
- \setunit*{\isdot\addspace}%
- \printfield{number}%
- \newunit%
- \printfield{library}%
- \setunit{\addcomma\addspace}%
- \printlist{location}%
- \newunit%
- \printfield{addendum}%
- \usebibmacro{finentry}}
-
-\DeclareBibliographyDriver{footcite:periodical}{%
- \usebibmacro{cite:foot:editor}%
- \setunit{\labelnamepunct}\newblock%
- \usebibmacro{mla:article:journal+issuetitle}%
- \newunit\newblock
- \printfield{note}%
- \setunit{\addcolon\addspace}\newblock
- \iffieldundef{postnote}%
- {\printfield{pages}}%
- {}%
- \newunit\newblock
- \usebibmacro{url+urldate}%
- \newunit\newblock
- \printfield{addendum}%
- \newunit\newblock
- \usebibmacro{pageref}%
- \usebibmacro{finentry}}
-
-\newbibmacro*{cite:foot:title}{%
- \iffieldundef{title}%
- {}%
- {\printtext[bibhyperref]{%
- \printtext[citetitle:\strfield{entrytype}]{%
- \printfield[noformat]{title}%
- \setunit{\subtitlepunct}%
- \printfield[noformat]{subtitle}}}%
- }}%
-
-\newbibmacro*{cite:foot:title:incollection:italics}{%
- \printtext[bibhyperref]{%
- \printtext[title:book]{%
- \printfield[noformat]{title}%
- \setunit{\subtitlepunct}%
- \printfield[noformat]{subtitle}}%
- }}%
-
-\newbibmacro*{cite:foot:bytranslator}{%
- \ifnameundef{translator}%
- {}%
- {\printtext[default]{\bibstring{bytranslator}\addspace%
- \printnames[cite:foot:translator]{translator}}}}
-
-\newbibmacro*{cite:foot:byeditor}{%
- \ifthenelse{\ifnameundef{editor}\OR%
- \( \iffieldequalstr{entrytype}{collection}\AND%
- \ifnameundef{author} \)}%
- {}%
- {\usebibmacro{byeditor+others}}}
-
-\newbibmacro*{mla:foot:postnote}{%
- \iffieldundef{postnote}%
- {\unspace}%
- {\unspace\addspace\printfield[footpostnote]{postnote}}%
- \usebibmacro{cite:reset}}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%% Format Declarations %%%%%%%%%%%%%%%%%%
@@ -648,65 +252,48 @@
\DeclareFieldFormat{citetitle:article}{\mkbibquote{#1}}
\DeclareFieldFormat{citetitle:inreference}{\mkbibquote{#1}}
\DeclareFieldFormat{citetitle:book}{\mkbibemph{#1}}
+\DeclareFieldFormat{citetitle:bookinbook}{\mkbibemph{#1}}% NEW in 2.0
\DeclareFieldFormat{citetitle:booklet}{\mkbibemph{#1}}%
\DeclareFieldFormat{citetitle:collection}{\mkbibemph{#1}}%
\DeclareFieldFormat{citetitle:reference}{\mkbibemph{#1}}%
\DeclareFieldFormat{citetitle:incollection}{\mkbibquote{#1}}
-\DeclareFieldFormat{citetitle:online}{\mkbibquote{#1}}% 1.4.9
+\DeclareFieldFormat{citetitle:inbook}{\mkbibquote{#1}}% NEW in 2.0
+\DeclareFieldFormat{citetitle:mvbook}{\mkbibemph{#1}}% NEW in 2.0
+\DeclareFieldFormat{citetitle:online}{\mkbibquote{#1}}%
\DeclareFieldFormat{citetitle:inproceedings}{\mkbibquote{#1}}
\DeclareFieldFormat{citetitle:unpublished}{\mkbibquote{#1}}
\DeclareFieldFormat{citetitle:thesis}{\mkbibquote{#1}}
\DeclareFieldFormat{citetitle:video}{\mkbibemph{#1}}
\DeclareFieldFormat{citetitle:review}{\mkbibquote{#1}}%
\DeclareFieldFormat{mla:lowercase}{\MakeLowercase{#1}}%
+\DeclareFieldFormat[mlasource]{mla:unstyled}{#1\unspace}%
+\DeclareFieldFormat[mlasource]{mla:complete}{\mkbibemph{#1}\unspace}%
+\DeclareFieldFormat[mlasource]{mla:part}{\mkbibquote{#1}}%
\DeclareFieldFormat{ibidpostnote}{#1}%
\DeclareFieldFormat{footpostnote}{#1}%
\DeclareFieldFormat{mlarepeatedcites}{\fbox{#1}%
\marginpar{\hfill\footnotesize{$\clubsuit$}}}%
-\@ifpackagelater{biblatex}{2016/03/01}{%
- \DeclareNameFormat{cite:foot:editor}{%
- \nameparts{#1}%
- \usebibmacro{name:given-family}{\namepartfamily}{\namepartgiven}{\namepartprefix}{\partnamesuffix}%
- \usebibmacro{name:andothers}}%
- \DeclareNameFormat{cite:foot:translator}{%
- \nameparts{#1}%
- \usebibmacro{name:given-family}{\namepartfamily}{\namepartgiven}{\namepartprefix}{\partnamesuffix}%
- \usebibmacro{name:andothers}}%
-}{%
- \DeclareNameFormat{cite:foot:editor}{%
- \usebibmacro{name:first-last}{#1}{#3}{#5}{#7}%
- \usebibmacro{name:andothers}}%
- \DeclareNameFormat{cite:foot:translator}{%
- \usebibmacro{name:first-last}{#1}{#3}{#5}{#7}%
- \usebibmacro{name:andothers}}%
-}%
-\DeclareFieldFormat{foot:cite:edition:format}{%
- \ifinteger{#1}%
- {\mkbibordinal{#1}~\bibstring{edition}}%
- {\printtext[mla:lowercase]{#1}}}
-\DeclareFieldFormat{supptotitle}%
- {\bibstring{supptotitle}\addspace\mkbibemph{#1}}
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%% Cite Commands %%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% updated for parity with mla-new.cbx
\renewbibmacro*{prenote}{%
- \iffieldundef{prenote}
- {\global\undef\cbx@lastprenote}
+ \iffieldundef{prenote}%
+ {\global\undef\cbx@lastprenote}%
{\printfield{prenote}%
\prenotedelim%
\ifthenelse{\iffieldequals{prenote}{\cbx@lastprenote} \and \iffieldequals{entrykey}{\cbx@lastkey}}%
{}%
- {\usebibmacro{cite:reset}}%
+ {}%\usebibmacro{cite:reset}}% 2.0 remove "clever" ibid reset with prenotes
\savefield{prenote}{\cbx@lastprenote}}}
\DeclareCiteCommand{\parencite}[\mkbibparens]
{\usebibmacro{prenote}}
{\usebibmacro{citeindex}%
\usebibmacro{cite:mla}}
- {}
+ {\multicitedelim}
{\ifthenelse{\iffieldequals{postnote}{\cbx@lastpostnote} \and \iffieldequals{entrykey}{\cbx@lastkey}}%
{\usebibmacro{locpostnote}}%
{\usebibmacro{postnote}}%
@@ -716,47 +303,43 @@
{\global\undef\cbx@lasthash\usebibmacro{prenote}}%
{\usebibmacro{citeindex}%
\usebibmacro{cite:mla:starred:title}}
- {}
+ {\multicitedelim}
{\usebibmacro{postnote}}
-\DeclareCiteCommand{\cite}% 1.9 added support for smart switching when used in footnote
- {\iffootnote{\iffieldundef{prenote}
- {\global\undef\cbx@lastprenote
- \printtext{See\addspace}}}
- \usebibmacro{prenote}}%
+\newbibmacro{mla:prenote:see}{% Suggested by moewe on StackExchange
+ \iffootnote
+ {\iffieldundef{prenote}
+ {\global\undef\cbx@lastprenote
+ \printtext{See\addspace}}
+ {\usebibmacro{prenote}}}
+ {}}
+
+\DeclareCiteCommand{\cite}%
+ {\usebibmacro{mla:prenote:see}}%
{\usebibmacro{citeindex}%
\usebibmacro{cite:mla}}%
- {}%
+ {\multicitedelim}%
{\usebibmacro{postnote}}
-\DeclareCiteCommand{\textcite}
- {\iffootnote{\iffieldundef{prenote}
- {\global\undef\cbx@lastprenote
- \printtext{See\addspace}}}
- \usebibmacro{prenote}}%
+\DeclareCiteCommand{\textcite}%
+ {\usebibmacro{mla:prenote:see}}%
{\usebibmacro{citeindex}%
\usebibmacro{cite:mla}}%
- {}%
+ {\multicitedelim}%
{\usebibmacro{postnote}}
-\DeclareCiteCommand{\headlesscite}% 1.9 added alias to starred command for Chicago compatibility
- {\iffootnote{\iffieldundef{prenote}
- {\global\undef\cbx@lastprenote
- \printtext{See\addspace}}}
- \usebibmacro{prenote}}%
+\DeclareCiteCommand{\headlesscite}%
+ {\usebibmacro{mla:prenote:see}}%
{\usebibmacro{citeindex}%
\usebibmacro{cite:mla:starred:title}}
- {}%
+ {\multicitedelim}%
{\usebibmacro{postnote}}
-\DeclareCiteCommand*{\cite}% 1.9 added support for smart switching when used in footnote
- {\iffootnote{\iffieldundef{prenote}
- {\global\undef\cbx@lastprenote
- \printtext{See\addspace}}}
- \usebibmacro{prenote}}%
+\DeclareCiteCommand*{\cite}%
+ {\usebibmacro{mla:prenote:see}}%
{\usebibmacro{citeindex}%
\usebibmacro{cite:mla:starred:title}}
- {}%
+ {\multicitedelim}%
{\usebibmacro{postnote}}
\DeclareCiteCommand{\footcite}[\mkbibfootnote]
@@ -767,24 +350,18 @@
\global\booltrue{cbx@mlafootnotes}%
\renewcommand*{\newunitpunct}{\addcomma\space}%
\usebibmacro{cite:mla:foot}}
- {}
+ {\multicitedelim}
{\usebibmacro{mla:foot:postnote}}
-\DeclareCiteCommand{\fullcite}%
- {\iffootnote{\iffieldundef{prenote}
- {\global\undef\cbx@lastprenote
- \printtext{See\addspace}}}
- \usebibmacro{prenote}}%
+\DeclareCiteCommand{\fullcite}
+ {\usebibmacro{mla:prenote:see}}%
{\usebibmacro{citeindex}%
\usebibmacro{cite:mla:title}}
{}%
{\usebibmacro{postnote}}
\DeclareCiteCommand{\headlessfullcite}
- {\iffootnote{\iffieldundef{prenote}
- {\global\undef\cbx@lastprenote
- \printtext{See\addspace}}}
- \usebibmacro{prenote}}%
+ {\usebibmacro{mla:prenote:see}}%
{\usebibmacro{citeindex}%
\usebibmacro{cite:mla:starred:title}}
{}%
@@ -799,21 +376,82 @@
{\printnames{author}%
\savefield{namehash}{\cbx@lasthash}}}
{\let\cbx@lasthash\undefined}}}
+
+ \DeclareCiteCommand{\smartcite}[\iffootnote\mkbibparens\mkbibfootnote]% 2.0 changed to align with footcite
+ {\bibsentence%
+ \usebibmacro{cite:init}%
+ \usebibmacro{prenote}}
+ {\usebibmacro{citeindex}%
+ \global\booltrue{cbx@mlafootnotes}%
+ \renewcommand*{\newunitpunct}{\addcomma\space}%
+ \usebibmacro{cite:mla:foot}}
+ {\multicitedelim}
+ {\usebibmacro{mla:foot:postnote}}
+
+\DeclareCiteCommand{\titleandsubtitle}
+ {\boolfalse{citetracker}%
+ \boolfalse{pagetracker}%
+ \usebibmacro{prenote}}
+ {\indexfield{indextitle}%
+ \printtext[bibhyperref]{\printtext[citetitle]{% 2.0 added hyperref
+ \printfield[noformat]{title}%
+ \iffieldundef{subtitle}{}{\subtitlepunct}%
+ \printfield[noformat]{subtitle}}}}%
+ {\multicitedelim}
+ {\usebibmacro{postnote}}
+
+\DeclareCiteCommand{\citeauthor}%
+ {\usebibmacro{prenote}}
+ {\ifciteindex
+ {\indexnames{labelname}}
+ {}%
+ \printnames[given-family]{labelname}%FUTURE add check for citeseen (to print first name on first mention)
+ }
+ {\multicitedelim}
+ {\usebibmacro{postnote}\usebibmacro{cite:save}}
+
+\DeclareCiteCommand*{\citeauthor}%
+ {\usebibmacro{prenote}}
+ {\ifciteindex
+ {\indexnames{labelname}}
+ {}%
+ \printnames[family]{labelname}%
+ % \ifentryseen{labelname}%FUTURE skeleton to check for first mention - doesn't work just now
+ % {\printnames{labelname}}% TRUE
+ % {\printnames[given-family]{labelname}}% FALSE
+ }
+ {\multicitedelim}
+ {\usebibmacro{postnote}\usebibmacro{cite:save}}
-% \DeclareCiteCommand{\fullcite}
-% {\usebibmacro{mla:fullcite:prenote}\usebibmacro{prenote}}
-% {\usedriver
-% {\DeclareNameAlias{sortname}{default}\DeclareNameAlias{default}{last-first}}
-% {\thefield{entrytype}}}
-% {\multicitedelim}
-% {\usebibmacro{postnote}}
+\DeclareCiteCommand{\citetitle}
+ {\boolfalse{citetracker}%
+ \boolfalse{pagetracker}%
+ \usebibmacro{prenote}}
+ {\ifciteindex
+ {\indexfield{indextitle}}
+ {}%
+ \ifthenelse{\iffieldequalstr{entrytype}{unpublished}%
+ \AND\NOT%
+ \iffieldundef{entrysubtype}}%
+ {\printfield[citetitle:\strfield{entrysubtype}]{labeltitle}}%
+ {\printfield[citetitle]{labeltitle}}}
+ {\multicitedelim}
+ {\usebibmacro{postnote}}
-\DeclareCiteCommand{\smartcite}[\iffootnote\mkbibparens\mkbibfootnote]%
- {\usebibmacro{prenote}}
- {\usebibmacro{citeindex}%
- \usebibmacro{cite:mla}}
+\DeclareCiteCommand*{\citetitle}
+ {\boolfalse{citetracker}%
+ \boolfalse{pagetracker}%
+ \usebibmacro{prenote}}
+ {\ifciteindex
+ {\indexfield{indextitle}}
+ {}%
+ \ifthenelse{\iffieldequalstr{entrytype}{unpublished}%
+ \AND\NOT%
+ \iffieldundef{entrysubtype}}%
+ {\printfield[citetitle:\strfield{entrysubtype}]{title}}%
+ {\printfield[citetitle]{title}}}%
{\multicitedelim}
- {\usebibmacro{cite:postnote}}
+ {\usebibmacro{postnote}}
\newbibmacro*{cite:mla:starred:title}{%
\ifciteibid
@@ -830,11 +468,16 @@
\newbibmacro*{cite:mla:title:alone}{%
\printtext[bibhyperref]{% suggested by StackExchange user Audrey
- \printfield[citetitle:\strfield{entrytype}]{labeltitle}}%
- \ifthenelse{\iffieldequalstr{entrytype}{suppbook}\and\iffieldundef{title}}%
- {\printtext[bibhyperref]{%
- \printfield[mla:capital]{entrysubtype}}}%
- {}}
+ \ifthenelse{%
+ \iffieldequalstr{entrytype}{unpublished}\AND\NOT\iffieldundef{entrysubtype}%
+ }%
+ {\printfield[citetitle:\strfield{entrysubtype}]{labeltitle}}%
+ {\ifthenelse{\iffieldequalstr{entrytype}{suppbook}\and\iffieldundef{title}}%
+ {\printtext[bibhyperref]{%
+ \printfield[mla:capital]{entrysubtype}}}%
+ {\printfield[citetitle:\strfield{entrytype}]{labeltitle}}}%
+ }%
+}
\endinput
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-mla/mla.dbx b/macros/latex/contrib/biblatex-contrib/biblatex-mla/mla.dbx
new file mode 100644
index 0000000000..7db24ca444
--- /dev/null
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-mla/mla.dbx
@@ -0,0 +1,56 @@
+% mla.dbx, v2.0 2021/06/07 * compatible with biblatex 3.16
+% Maintained at <https://github.com/jmclawson/biblatex-mla>.
+%
+% Feel free to improve, redistribute, and adapt to your own ends. Please share improvements back to the project on GitHub or to James Clawson: <clawson@gmail.com>.
+%
+% This material is subject to the LaTeX Project Public License. See http://www.ctan.org/tex-archive/help/Catalogue/licenses.lppl.html for the details of that license.
+
+\ProvidesFile{mla.dbx}[2021/06/07 v2.0 biblatex citation style]
+
+\DeclareDatamodelEntrytypes{mlasource}
+
+\DeclareDatamodelFields[type=field, datatype=literal]{
+ supplemental,
+ titletype,
+ titlea,
+ contributora,
+ versiona,
+ numbera,
+ publishera,
+ datea,
+ locationa,
+ supplementala,
+ titleb,
+ contributorb,
+ versionb,
+ numberb,
+ publisherb,
+ dateb,
+ locationb,
+ supplementalb
+}
+\DeclareDatamodelEntryfields[mlasource]{
+ jkauthor,
+ authortype,
+ title,
+ titletype,
+ supplemental,
+ titlea,
+ contributora,
+ versiona,
+ numbera,
+ publishera,
+ datea,
+ locationa,
+ supplementala,
+ titleb,
+ contributorb,
+ versionb,
+ numberb,
+ publisherb,
+ dateb,
+ locationb,
+ supplementalb
+}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-mla/mla7.bbx b/macros/latex/contrib/biblatex-contrib/biblatex-mla/mla7.bbx
new file mode 100644
index 0000000000..e43dc555cd
--- /dev/null
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-mla/mla7.bbx
@@ -0,0 +1,1224 @@
+% This bbx file is provided for minimal compatibility with bibliographic entries described by the 7th edition of the MLA Handbook (2009). This style was superseded by a major redesign in the 8th edition in 2016, which was further clarified by the 9th edition in 2021. To use this older version, set "style=mla7" in the biblatex package options. To use the current version of the handbook, set "style=mla" for best outcomes. Biblatex-mla support and updates will prioritize the most recent edition of the MLA Handbook.
+
+\ProvidesFile{mla7.bbx}[2021/05/12 v2.0 biblatex bibliography style]
+
+\RequireBibliographyStyle{standard}
+\DeclareLanguageMapping{american}{american-mla}
+\DeclareLanguageMapping{english}{english-mla}
+
+\NewBibliographyString{byserieseditor}
+\NewBibliographyString{reviewof}
+\NewBibliographyString{specissue}
+\NewBibliographyString{phd}
+\NewBibliographyString{dphil}
+\NewBibliographyString{lic}
+\NewBibliographyString{ma}
+\NewBibliographyString{ms}
+\NewBibliographyString{msc}
+\NewBibliographyString{mphil}
+\NewBibliographyString{mlitt}
+\NewBibliographyString{manuscript}
+\NewBibliographyString{typescript}
+\NewBibliographyString{director}
+\NewBibliographyString{screenplay}
+\NewBibliographyString{adaptation}
+\NewBibliographyString{adaptor}
+\NewBibliographyString{performer}
+\NewBibliographyString{performers}
+\NewBibliographyString{composer}
+\NewBibliographyString{composedby}
+\NewBibliographyString{producer}
+\NewBibliographyString{with}
+\NewBibliographyString{proceedings}
+\NewBibliographyString{compilerandeditor}%
+\NewBibliographyString{bycompilerandeditor}%
+\NewBibliographyString{transof}%
+\NewBibliographyString{volstodate}%
+\NewBibliographyString{supptotitle}%
+\NewBibliographyString{print}%
+\NewBibliographyString{web}%
+\NewBibliographyString{generaleditor}%
+
+\setlength{\bibitemsep}{0pt}
+\renewcommand*{\mkbibnamesuffix}[1]{\addcomma\addlowpenspace#1}
+
+\DeclareNameAlias{author}{sortname}
+\@ifpackagelater{biblatex}{2016/03/01}{%
+ \DeclareNameFormat{mla:last}{\nameparts{#1}\namepartfamily}%
+ \DeclareNameFormat{default}{%
+ \nameparts{#1}%
+ \ifgiveninits{%
+ \usebibmacro{name:given-family}{\namepartfamily}{\namepartgiveni}{\namepartprefix}{\namepartsuffix}%
+ }{%
+ \usebibmacro{name:given-family}{\namepartfamily}{\namepartgiven}{\namepartprefix}{\namepartsuffix}%
+ }%
+ \usebibmacro{name:andothers}%
+ }%
+}{%
+ \DeclareNameFormat{mla:last}{#1}%
+ \DeclareNameFormat{default}{%
+ \iffirstinits{%
+ \usebibmacro{name:first-last}{#1}{#4}{#5}{#7}%
+ }{%
+ \usebibmacro{name:first-last}{#1}{#3}{#5}{#7}%
+ }%
+ \usebibmacro{name:andothers}%
+ }%
+}
+
+\defbibenvironment{bibliography}
+ {\list
+ {}
+ {\setlength{\leftmargin}{\bibhang}%
+ \setlength{\itemindent}{-\leftmargin}%
+ \setlength{\itemsep}{\bibitemsep}%
+ \setlength{\parsep}{\bibparsep}}}
+ {\endlist}
+ {\item}
+
+\DeclareFieldFormat{title:article}{\mkbibquote{#1}}%
+\DeclareFieldFormat{title:online}{\mkbibquote{#1}}%
+\DeclareFieldFormat{title:inreference}{\mkbibquote{#1}}%
+\DeclareFieldFormat{title:book}{\mkbibemph{#1}}
+\DeclareFieldFormat{title:booklet}{\mkbibemph{#1}}
+\DeclareFieldFormat{title:collection}{\mkbibemph{#1}}
+\DeclareFieldFormat{title:incollection}{\mkbibquote{#1}}%
+\DeclareFieldFormat{title:inbook}{\mkbibquote{#1}}%
+\DeclareFieldFormat{title:inproceedings}{\mkbibquote{#1}}%
+\DeclareFieldFormat{title:thesis}{\mkbibquote{#1}}%
+\DeclareFieldFormat{title:reviewedbook}{\bibstring{reviewof}\addspace\mkbibemph{#1}}%
+\DeclareFieldFormat{title:reference}{\mkbibemph{#1}}%
+\DeclareFieldFormat{url}{$<$\url{#1}$>$}% suggested by Jay Savage <http://www.engatiki.org/2007/11/28/171>
+\DeclareFieldFormat{isbn}{}
+\DeclareFieldFormat{pages}{#1}%
+\DeclareFieldFormat[review]{volume}{#1}%
+\DeclareListFormat[article]{location}%
+ {\unspace\mkbibbrackets{#1}\addspace}%
+\DeclareFieldFormat[article]{version}{#1\isdot}%
+\DeclareFieldFormat[incollection]{bibliography:origyear}{\openrangeformat{#1}\addperiod}%
+\DeclareFieldFormat[video]{mla:publimedium}{\MakeCapital{film}}%
+\DeclareFieldFormat{mla:publimedium}{\MakeCapital{#1}}%
+\DeclareFieldFormat{mla:capital}{\MakeCapital{#1}}%
+\DeclareFieldFormat{mla:capital:web}{%
+ \ifhyperref%
+ {\href{#1}{\MakeCapital{\bibstring{web}}}}%
+ {\MakeCapital{\bibstring{web}}}}%
+\DeclareFieldFormat{mla:lowercase}{\MakeLowercase{#1}}%
+\DeclareFieldFormat{nameaddon}{\mkbibbrackets{#1}}%
+\DeclareFieldFormat{issuetitle}{\mkbibemph{#1}}
+\DeclareFieldFormat{mla:newspaper:section}{\bibstring{section}\addspace#1}%
+\DeclareFieldFormat{library}{#1\isdot}%
+\DeclareFieldFormat{reviewededitor}{\bibstring{byeditor}\addspace#1}%
+\DeclareFieldFormat{reviewedauthor}{\bibstring{byauthor}\addspace#1}%
+\DeclareFieldFormat{title:suppbook}{\mkbibquote{#1}}
+\DeclareFieldFormat{openrangevolumes}{#1~\bibstring{volstodate}}%
+\DeclareFieldFormat{volumeof}{\bibstring{volume}~#1~\bibstring{ofseries}}%
+\DeclareFieldFormat{mla:sentence-case}{\MakeSentenceCase{#1}}%
+\DeclareFieldFormat{eprint:jstor}{%
+ \ifhyperref%
+ {\href{http://www.jstor.org/stable/#1}{\emph{JSTOR}}}%
+ {\emph{JSTOR}}}%
+\DeclareFieldFormat{eprint:googlebooks}{%
+ \ifhyperref%
+ {\href{http://books.google.com/books?id=#1}{\emph{Google Books}}}%
+ {\emph{Google Books}}}
+\DeclareFieldFormat{eprint:adelaide}{%
+ \ifhyperref%
+ {\href{#1}{\emph{eBooks@Adelaide}}}%
+ {\emph{eBooks@Adelaide}}}
+\DeclareFieldFormat{eprint:muse}{%5
+ \ifhyperref%
+ {\href{#1}{\emph{Project Muse}}}%
+ {\emph{Project Muse}}}
+\DeclareFieldFormat{urldate}{#1}%
+
+\DeclareBibliographyAlias{booklet}{book}
+\DeclareBibliographyAlias{bookinbook}{incollection}%
+\DeclareBibliographyAlias{collection}{book}
+\DeclareBibliographyAlias{reference}{book}
+
+\DeclareBibliographyAlias{inbook}{incollection}%
+
+\DeclareBibliographyAlias{manual}{customa}
+\DeclareBibliographyAlias{misc}{customa}
+\DeclareBibliographyAlias{online}{article}
+\DeclareBibliographyAlias{patent}{customa}
+\DeclareBibliographyAlias{report}{customa}
+\DeclareBibliographyAlias{suppcollection}{suppbook}
+
+\DeclareFieldAlias[online]{maintitle}{journaltitle}
+
+\renewcommand*{\newunitpunct}{\addperiod\space}
+\renewcommand*{\andothersdelim}{\ifcitation{}{\addcomma}\addspace}
+\renewcommand*{\bibpagespunct}{\addperiod\space}
+\renewcommand*{\subtitlepunct}{\ifterm{}{\addcolon}\space}
+
+\newboolean{bbx@mla-incollection}
+\newbool{bbx@inset}
+
+\DeclareBibliographyOption{dashed}[true]{%
+ \ifstrequal{#1}{true}
+ {\ExecuteBibliographyOptions{pagetracker}%
+ \renewbibmacro*{bbx:savehash}{\savefield{fullhash}{\bbx@lasthash}}}
+ {\ExecuteBibliographyOptions{pagetracker=false}%
+ \renewbibmacro*{bbx:savehash}{}}}
+
+\newboolean{bbx@annotation}% same as biblatex-dw
+\DeclareBibliographyOption{annotation}[true]{%
+\setboolean{bbx@annotation}{#1}}
+
+\newboolean{bbx@totalnames}
+\DeclareEntryOption{totalnames}[true]{%
+ \setboolean{bbx@totalnames}{#1}}
+
+% for translated incollections where the collection has no shared translator
+\newboolean{bbx@uniquetranslator}%
+\DeclareEntryOption{uniquetranslator}[true]{%
+ \setboolean{bbx@uniquetranslator}{#1}}
+
+\newbool{bbx:gnoreminfo}%
+\setboolean{bbx:gnoreminfo}{false}
+\DeclareBibliographyOption{noremoteinfo}[true]{\setboolean{bbx:gnoreminfo}{#1}}
+
+\newbool{bbx:lnoreminfo}%
+\setboolean{bbx:lnoreminfo}{false}
+\DeclareEntryOption{noremoteinfo}[true]{\setboolean{bbx:lnoreminfo}{#1}}
+
+\newbool{bbx@publimedium}%
+\setboolean{bbx@publimedium}{true}%
+\DeclareBibliographyOption{showmedium}[true]{\setboolean{bbx@publimedium}{#1}}%
+
+\newbool{bbx@guessmedium}%
+\setboolean{bbx@guessmedium}{true}
+\DeclareBibliographyOption{guessmedium}[true]{\setboolean{bbx@guessmedium}{#1}}%
+
+\newboolean{bbx@nodate}%
+\DeclareEntryOption{nodate}[true]{%
+ \setboolean{bbx@nodate}{#1}}
+
+
+% 0.7.1 for years with open range
+\newrobustcmd{\openrangeformat}[1]{% 0.7.1
+ \begingroup%
+ \let\blx@org@rangedash=\bibrangedash%
+ \def\bibrangedash{%
+ \blx@org@rangedash%
+ \futurelet\@let@token\blx@openrangeformat}%
+ #1%
+ \endgroup}
+
+% 0.7.1 for years with open range
+\newcommand*{\blx@openrangeformat}{% 0.7.1
+ \ifx\@let@token\endgroup%
+ \openrangemark%
+ \fi}
+
+% 0.7.1 for years with open range
+\newcommand*{\openrangemark}{\mbox{ }}% 0.7.1
+
+\newbibmacro*{bbx:savehash}{%
+ \savefield{fullhash}{\bbx@lasthash}}
+
+\renewcommand*{\bibnamedash}{% suggested by StackExchange user Audrey
+ \mlanamedash%
+ \iffieldundef{nameaddon}{\setunit{\adddot\addspace}}{\nopunct}}%
+
+\newcommand*{\mlanamedash}{\printtext{\textendash\textendash\textendash}}
+
+\renewbibmacro*{author}{%
+ \ifthenelse{\ifuseauthor\AND\NOT\ifnameundef{author}}
+ {\usebibmacro{bbx:dashcheck}%
+ {\bibnamedash}%
+ {\ifbool{bbx@totalnames}%
+ {\printnames[sortname][-\value{listtotal}]{author}}
+ {\printnames{author}}%
+ \usebibmacro{bbx:savehash}}%
+ \iffieldundef{nameaddon}%
+ {}%
+ {\setunit{\addspace}%
+ \printfield{nameaddon}}%
+ \iffieldundef{authortype}%
+ {}%
+ {\setunit{\addcomma\space}%
+ \usebibmacro{authorstrg}}}%
+ {\global\undef\bbx@lasthash}}
+
+\renewbibmacro*{editor}{%
+ \ifthenelse{\ifuseeditor\AND\NOT\ifnameundef{editor}}%
+ {\ifthenelse{\iffieldequals{namehash}{\bbx@lasthash}\AND\NOT
+ \iffirstonpage}%
+ {\mbox{\mlanamedash\unspace\addcomma\addspace}}%
+ {\ifbool{bbx@totalnames}%
+ {\printnames[sortname][-\value{listtotal}]{editor}}%
+ {\printnames{editor}}%
+ \setunit{\addcomma\space}%
+ \savefield{namehash}{\bbx@lasthash}}%
+ \usebibmacro{editorstrg}\clearname{editor}}%
+ {\global\undef\bbx@lasthash}}
+
+\renewbibmacro*{editor+others}{%
+ \ifthenelse{\ifuseeditor\AND\NOT\ifnameundef{editor}}%
+ {\ifthenelse{\iffieldequals{namehash}{\bbx@lasthash}\AND\NOT
+ \iffirstonpage}%
+ {\mbox{\mlanamedash\unspace\addcomma\addspace}}%
+ {\ifbool{bbx@totalnames}%
+ {\printnames[sortname][-\value{listtotal}]{editor}}%
+ {\printnames[sortname]{editor}}%
+ \setunit{\addcomma\space}%
+ \savefield{namehash}{\bbx@lasthash}}%
+ \usebibmacro{editor+othersstrg}\clearname{editor}}%
+ {\global\undef\bbx@lasthash}}
+
+\renewbibmacro*{translator}{%
+ \ifthenelse{\ifusetranslator\AND\NOT\ifnameundef{translator}}%
+ {\ifthenelse{\iffieldequals{namehash}{\bbx@lasthash}\AND\NOT
+ \iffirstonpage}%
+ {\mbox{\mlanamedash\unspace\addcomma\addspace}}%
+ {\ifbool{bbx@totalnames}%
+ {\printnames[sortname][-\value{listtotal}]{translator}}%
+ {\printnames[sortname]{translator}}%
+ \setunit{\addcomma\space}%
+ \savefield{namehash}{\bbx@lasthash}}%
+ \usebibmacro{translatorstrg}\clearname{translator}}%
+ {\global\undef\bbx@lasthash}}
+
+\renewbibmacro*{translator+others}{%
+ \ifthenelse{\ifusetranslator\AND\NOT\ifnameundef{translator}}%
+ {\ifthenelse{\iffieldequals{namehash}{\bbx@lasthash}\AND\NOT
+ \iffirstonpage}%
+ {\mbox{\mlanamedash\unspace\addcomma\addspace}}%
+ {\ifbool{bbx@totalnames}%
+ {\printnames[sortname][-\value{listtotal}]{translator}}%
+ {\printnames[sortname]{translator}}%
+ \setunit{\addcomma\space}%
+ \savefield{namehash}{\bbx@lasthash}}%
+ \usebibmacro{translator+othersstrg}\clearname{translator}}%
+ {\global\undef\bbx@lasthash}}
+
+\newbibmacro*{journal+issue+year+pages}{%
+ \usebibmacro{journal+ser+vol+num}%
+ \setunit{\addspace}%
+ \printtext[parens]{%
+ \iffieldundef{issue}%
+ {\iffieldundef{month}%
+ {\printfield{year}}%
+ {\iffieldundef{day}%
+ {\printfield{month}%
+ \setunit{\addspace}%
+ \printfield{year}}%
+ {\printtext{\bibdate}}}}%
+ {\printfield{issue}%
+ \setunit{\addspace}%
+ \printfield{year}}}%
+ \addcolon\addspace
+ \printfield{pages}}
+
+\renewbibmacro*{date}{\printdate}%
+
+\renewbibmacro*{url+urldate}{%
+ \ifthenelse{\boolean{bbx@publimedium}\AND\NOT \(\iffieldundef{url} \AND \iffieldundef{eprint}\)}%
+ {\printfield[mla:capital:web]{url}\newunit}%
+ {\iffieldundef{urlyear}{}{\setunit{\addspace}}}%
+ \iffieldundef{urlyear}%
+ {}%
+ {\printtext{\printurldate}%
+ \setunit{\addspace}}% Suggested by Stephen Brumbaugh
+ \ifthenelse{\boolean{bbx@publimedium}\AND\NOT\iffieldundef{url}}%
+ {\ifthenelse{\boolean{bbx:gnoreminfo}}%
+ {}%
+ {\setunit{\newunitpunct}%
+ \printfield{url}}}%
+ {\printfield{url}}%
+ }
+
+\DeclareBibliographyDriver{periodical}{%
+ \usebibmacro{bibindex}%
+ \usebibmacro{author/editor+others/translator+others}%
+ \setunit{\labelnamepunct}\newblock%
+ \usebibmacro{mla:article:journal+issuetitle}%
+ \newunit\newblock
+ \printfield{note}%
+ \setunit{\addcolon\addspace}\newblock
+ \printfield{pages}%
+ \newunit\newblock
+ \usebibmacro{mla:isbn/issn+doi+eprint}%
+ \newunit\newblock
+ \ifbool{bbx@publimedium}{}{\usebibmacro{url+urldate}}%
+ \newunit\newblock
+ \printfield{addendum}%
+ \newunit\newblock
+ \usebibmacro{pageref}%
+ \newunit%
+ \usebibmacro{publimedium}%
+ \usebibmacro{finentry}}
+
+\DeclareBibliographyDriver{article}{%
+ \usebibmacro{bibindex}%
+ \usebibmacro{author/editor+others/translator+others}%
+ \usebibmacro{mlabelnamepunct}%
+ \usebibmacro{title}%
+ \newunit%
+ \usebibmacro{bytranslator+others}%
+ \newunit%
+ \usebibmacro{mla:article:journal+issuetitle}%
+ \newunit\newblock
+ \printfield{note}%
+ \setunit{\addcolon\addspace}\newblock
+ \printfield{pages}%
+ \newunit\newblock
+ \usebibmacro{mla:isbn/issn+doi+eprint}%
+ \newunit\newblock
+ \ifbool{bbx@publimedium}{}{\usebibmacro{url+urldate}}%
+ \newunit\newblock
+ \printfield{addendum}%
+ \newunit\newblock
+ \usebibmacro{pageref}%
+ \newunit%
+ \usebibmacro{publimedium}%
+ \usebibmacro{finentry}}
+
+\DeclareBibliographyDriver{book}{%
+ \usebibmacro{bibindex}%
+ \usebibmacro{author/editor+others/translator+others}%
+ \usebibmacro{mlabelnamepunct}%
+ \usebibmacro{maintitle+title}%
+ \newunit\newblock%
+ \usebibmacro{byeditor+others}%
+ \newunit\newblock%
+ \printfield{edition}\isdot%
+ \newunit%
+ \iffieldundef{maintitle}%
+ {\printfield{volume}%
+ \printfield{part}}%
+ {}%
+ \newunit%
+ \iffieldundef{volume}%
+ {\printfield{volumes}\clearfield{volumes}}%
+ {}%%
+ \newunit\newblock%
+ \ifbool{bbx@publimedium}%
+ {}%
+ {\usebibmacro{series+number}}%
+ \newunit\newblock%
+ \printfield{note}%
+ \newunit\newblock%
+ \usebibmacro{publisher+location+date}%
+ \newunit\newblock%
+ \printfield{pages}%
+ \newunit\newblock%
+ \usebibmacro{mla:isbn/issn+doi+eprint}%
+ \newunit\newblock%
+ \iffieldundef{origtitle}%
+ {}%
+ {\ifbool{bbx@publimedium}%
+ {}
+ {\usebibmacro{mla:reprint}}}%
+ \newunit\newblock%
+ \iffieldundef{volumes}%
+ {}%
+ {\usebibmacro{mla:multivolumes}}%
+ \newunit\newblock%
+ \printfield[mla:sentence-case]{addendum}%
+ \newunit\newblock%
+ \usebibmacro{pageref}%
+ \newunit%
+ \usebibmacro{publimedium}%
+ \usebibmacro{finentry}}
+
+\newbibmacro*{mla:reprint}{%
+ \iffieldundef{origtitle}%
+ {\newunit}%
+ {\iffieldundef{origlanguage}
+ {\setunit{\newunitpunct\bibstring{reprintof}\addspace}}%
+ {\setunit{\newunitpunct\bibstring{transof}\addspace}}%
+}%
+ \printfield[title:\strfield{entrytype}]{origtitle}%
+ \newunit\newblock%
+ \printlist{origlocation}\clearlist{origlocation}%
+ \setunit*{\addcolon\addspace}%
+ \printlist{origpublisher}\clearlist{origpublisher}%
+ \setunit*{\addcomma\addspace}%
+ \ifbool{bbx@mla-incollection}%
+ {\printfield[bibliography:origyear]{origyear}\clearfield{origyear}}%
+ {\ifthenelse{\iffieldundef{volume}\OR\iffieldundef{volumes}}% 1.4.9 cleared up most spurious punct
+ {\printorigdate\clearfield{origyear}}%
+ {}%
+ }%
+}
+
+\newbibmacro*{mla:multivolumes}{%
+ \iffieldundef{maintitle}%
+ {}%
+ {\printfield[volumeof]{volume}%
+ \setunit{\addspace}%
+ \usebibmacro{maintitle}}%
+ \usebibmacro{mla:generaleditor}%
+ \iffieldequalstr{eventendyear}{}%
+ {\printfield[openrangevolumes]{volumes}\clearfield{volumes}}%
+ {\printfield{volumes}\clearfield{volumes}}%
+ \newunit\newblock%
+ \printeventdate\clearfield{eventyear}%
+}
+
+
+\renewbibmacro*{byeditorx}{%
+ \usebibmacro{byeditorx:internal}{a}%
+ \usebibmacro{byeditorx:internal}{b}%
+ \usebibmacro{byeditorx:internal}{c}%
+}
+
+\newbibmacro*{byeditorx:internal}[1]{%
+ \ifnameundef{editor#1}
+ {}
+ {\iffieldequalstr{editor#1type}{generaleditor}
+ {}
+ {\usebibmacro{bytypestrg}{editor#1}{editor}%
+ \setunit{\addspace}%
+ \printnames[byeditor#1]{editor#1}%
+ \newunit}}%
+}
+
+\newbibmacro*{mla:generaleditor}{%
+ \usebibmacro{mla:generaleditor:internal}{}%
+ \usebibmacro{mla:generaleditor:internal}{a}%
+ \usebibmacro{mla:generaleditor:internal}{b}%
+ \usebibmacro{mla:generaleditor:internal}{c}%
+}
+
+\newbibmacro*{mla:generaleditor:internal}[1]{%
+ \iffieldequalstr{editor#1type}{generaleditor}%
+ {\printnames{editor#1}%
+ \setunit{\addcomma\addspace}%
+ \bibstring{generaleditor}%
+ \newunit}%
+ {}%
+}
+
+\newbibmacro*{mla:isbn/issn+doi+eprint}{% 0.7.1 modeled after biblatex-apa, here just a proof of concept and work in progress, ignoring any of the URL hiding implemented by Philip Kime
+ \ifthenelse{\boolean{bbx:gnoreminfo}\OR\boolean{bbx:lnoreminfo}}%
+ {\global\boolfalse{bbx:lnoreminfo}}%
+ {\printfield{isbn}\clearfield{isbn}%
+ \newunit\newblock%
+ \printfield{issn}\clearfield{issn}%
+ \newunit\newblock%
+ \printfield{isrn}\clearfield{isrn}%
+ \newunit\newblock%
+ \printfield{doi}\clearfield{doi}%
+ \newunit\newblock%
+ \usebibmacro{eprint}%
+ }}
+
+\DeclareBibliographyDriver{suppbook}{%
+ \usebibmacro{bibindex}%
+ \usebibmacro{author/editor}%
+ \usebibmacro{mlabelnamepunct}%
+ \usebibmacro{maintitle+title}%
+ \newunit\newblock
+ \printfield[mla:capital]{entrysubtype}%
+ \newunit\newblock
+ \iffieldundef{crossref}%
+ {\iffieldundef{xref}%
+ {\usebibmacro{mla:incollection:internal}}%
+ {\bbx@crossref{\thefield{xref}}%
+ \setunit{\addspace}%
+ \printfield{pages}}}%
+ {\bbx@crossref{\thefield{crossref}}%
+ \setunit{\addspace}%
+ \printfield{pages}%
+ \newunit}%
+ \newunit%
+ \usebibmacro{publimedium}%
+ \usebibmacro{finentry}}
+
+\DeclareCiteCommand{\bbx@crossref}%
+ {}
+ {\ifsingletitle%
+ {\printtext[bibhyperref]{\printnames{labelname}}%
+ \setunit{\space}}%
+ {\printnames{labelname}%
+ \setunit{\addcomma\addspace}%
+ \printtext[bibhyperref]{\printfield[citetitle:book]{labeltitle}}
+ \setunit{\space}}}%
+ {}%
+ {}
+
+\DeclareBibliographyDriver{incollection}{%
+ \usebibmacro{bibindex}%
+ \usebibmacro{author/editor+others/translator+others}%
+ \usebibmacro{mlabelnamepunct}%
+ \ifthenelse{%
+ \iffieldequalstr{entrysubtype}{book}%
+ \OR%
+ \iffieldequalstr{entrysubtype}{play}%
+ \OR%
+ \iffieldequalstr{entrytype}{bookinbook}}%
+ {\usebibmacro{title:incollection:italics}}%
+ {\setboolean{bbx@mla-incollection}{true}%
+ \usebibmacro{title}%
+ \setboolean{bbx@mla-incollection}{false}}%
+ \newunit\newblock%
+ \ifbool{bbx@uniquetranslator}%
+ {\usebibmacro{bytranslator+others}\newunit}%
+ {}%
+ \newunit\newblock%
+ \iffieldundef{crossref}%
+ {\iffieldundef{xref}%
+ {\usebibmacro{mla:incollection:internal}}%
+ {\bbx@crossref{\thefield{xref}}%
+ \setunit{\addspace}%
+ \printfield{pages}}}%
+ {\bbx@crossref{\thefield{crossref}}%
+ \setunit{\addspace}%
+ \printfield{pages}%
+ \newunit}%
+ \newunit%
+ \usebibmacro{publimedium}%
+ \usebibmacro{finentry}}
+
+\newbibmacro*{mla:incollection:internal}{%
+ \setboolean{bbx@mla-incollection}{true}%
+ \usebibmacro{maintitle+booktitle}%
+ \ifthenelse{%
+ \iffieldequalstr{entrytype}{suppbook}%
+ \OR%
+ \iffieldequalstr{entrytype}{suppcollection}}%
+ {\setunit{\newunitpunct\bibstring{byauthor}\addspace}%
+ \ifnamesequal{labelname}{bookauthor}%
+ {\printnames[mla:last]{bookauthor}}%
+ {\printnames[byauthor]{bookauthor}}}%
+ {}%
+ \newunit\newblock%
+ \usebibmacro{byauthor}%
+ \newunit\newblock
+ \usebibmacro{byeditor+others}%
+ \newunit\newblock
+ \printfield{edition}\isdot%
+ \newunit
+ \iffieldundef{maintitle}%
+ {\printfield{volume}\printfield{part}}%
+ {}%
+ \newunit
+ \iffieldundef{volume}%
+ {\printfield{volumes}\clearfield{volumes}}%
+ {}%%
+ \newunit\newblock
+ \ifbool{bbx@publimedium}%
+ {}%
+ {\usebibmacro{series+number}}%
+ \newunit\newblock
+ \printfield{note}%
+ \newunit\newblock
+ \usebibmacro{publisher+location+date}%
+ \newunit\newblock
+ \usebibmacro{chapter+pages}%
+ \newunit\newblock
+ \usebibmacro{mla:isbn/issn+doi+eprint}%
+ \newunit\newblock
+ \ifbool{bbx@publimedium}{}{\usebibmacro{url+urldate}}%
+ \newunit\newblock
+ \iffieldundef{volumes}%
+ {}%
+ {\usebibmacro{mla:multivolumes}}%
+ \newunit\newblock
+ \printfield{addendum}%
+ \newunit\newblock
+ \usebibmacro{pageref}%
+ \setboolean{bbx@mla-incollection}{false}}
+
+\DeclareBibliographyDriver{inproceedings}{%
+ \usebibmacro{bibindex}%
+ \usebibmacro{author/editor+others/translator+others}%
+ \usebibmacro{mlabelnamepunct}%
+ \usebibmacro{title}%
+ \newunit\newblock
+ \usebibmacro{mla:proceedings:booktitle}%
+ \newunit\newblock
+ \usebibmacro{byeditor+others}%
+ \newunit\newblock
+ \ifbool{bbx@publimedium}%
+ {}%
+ {\usebibmacro{series+number}}%
+ \newunit\newblock
+ \printfield{note}%
+ \newunit
+ \usebibmacro{publisher+location+date}%
+ \newunit\newblock
+ \usebibmacro{chapter+pages}%
+ \newunit\newblock
+ \printfield{addendum}%
+ \newunit\newblock
+ \usebibmacro{pageref}%
+ \newunit%
+ \usebibmacro{publimedium}%
+ \usebibmacro{finentry}}
+
+\DeclareBibliographyDriver{proceedings}{%
+ \usebibmacro{bibindex}%
+ \usebibmacro{author/editor+others/translator+others}%
+ \usebibmacro{mlabelnamepunct}%
+ \usebibmacro{mla:proceedings:booktitle}%
+ \newunit\newblock
+ \usebibmacro{byeditor+others}%
+ \newunit\newblock
+ \ifbool{bbx@publimedium}%
+ {}%
+ {\usebibmacro{series+number}}%
+ \newunit\newblock
+ \printfield{note}%
+ \newunit
+ \usebibmacro{publisher+location+date}%
+ \newunit\newblock
+ \usebibmacro{chapter+pages}%
+ \newunit\newblock
+ \printfield{addendum}%
+ \newunit\newblock
+ \usebibmacro{pageref}%
+ \newunit%
+ \usebibmacro{publimedium}%
+ \usebibmacro{finentry}}
+
+\DeclareBibliographyDriver{unpublished}{%
+ \usebibmacro{bibindex}%
+ \usebibmacro{author/editor+others/translator+others}%
+ \usebibmacro{mlabelnamepunct}%
+ \usebibmacro{title}%
+ \newunit\newblock
+ \printfield{note}%
+ \newunit\newblock
+ \usebibmacro{mla:all:type}%
+ \newunit\newblock
+ \printfield{number}%
+ \newunit\newblock
+ \printfield{library}%
+ \setunit{\addcomma\addspace}%
+ \printlist{location}%
+ \newunit\newblock
+ \printfield{addendum}%
+ \newunit%
+ \usebibmacro{publimedium}%
+ \usebibmacro{finentry}}
+
+\DeclareBibliographyDriver{thesis}{%
+ \usebibmacro{bibindex}%
+ \usebibmacro{author/editor+others/translator+others}%
+ \usebibmacro{mlabelnamepunct}%
+ \usebibmacro{title}%
+ \newunit\newblock%
+ \usebibmacro{mla:thesis:type}%
+ \newunit\newblock
+ \printlist{institution}%
+ \setunit*{\addcomma\space}%
+ \iffieldequalstr{entrysubtype}{published}%
+ {\printfield{origyear}\clearfield{origyear}}% 1.4.9 cleared origyear
+ {\printfield{year}}%
+ \newunit\newblock
+ \iffieldequalstr{entrysubtype}{published}%
+ {\ifbool{bbx@publimedium}%
+ {}%
+ {\usebibmacro{series+number}}%
+ \newunit%
+ \printlist{location}%
+ \setunit{\addcolon\addspace}%
+ \printlist{publisher}%
+ \setunit{\addcomma\addspace}%
+ \printfield{year}}%
+ {}%
+ \newunit\newblock
+ \printfield{addendum}%
+ \newunit\newblock
+ \newunit%
+ \usebibmacro{publimedium}%
+ \usebibmacro{finentry}}
+
+\DeclareBibliographyDriver{review}{%
+ \usebibmacro{bibindex}%
+ \usebibmacro{author}%
+ \usebibmacro{mlabelnamepunct}%
+ \printfield[title:article]{title}%
+ \newunit\newblock%
+ \printfield[title:reviewedbook]{booktitle}%
+ \setunit{\addcomma\space}%
+ \ifnameundef{bookauthor}%
+ {\printtext[reviewededitor]{\printnames[default]{editor}}}%
+ {\printtext[reviewedauthor]{\printnames[default]{bookauthor}}}%
+ \newunit\newblock
+ \usebibmacro{journal}%
+ \setunit*{\addspace}%
+ \ifthenelse{\iffieldequalstr{entrysubtype}{newspaper} \or \iffieldequalstr{entrysubtype}{magazine}}%
+ {\printfield[brackets]{location}%
+ \printtext{\printdate}%
+ \newunit}%
+ {\printfield{series}\clearfield{series}%
+ \setunit{\addspace}%
+ \printfield[default]{volume}%
+ \setunit*{\adddot}%
+ \printfield{number}\clearfield{number}%
+ \setunit{\addcomma\space}%
+ \printfield{eid}%
+ \setunit{\addspace}%
+ \usebibmacro{issue+date}%
+ \newunit\newblock%
+ \usebibmacro{issue}%
+ \newunit}%
+ \setunit{\addcolon\addspace}%
+ \printfield{pages}%
+ \newunit\newblock%
+ \usebibmacro{publimedium}% 1.4.9 updated
+ \usebibmacro{finentry}}
+
+\DeclareBibliographyDriver{inreference}{%
+ \usebibmacro{bibindex}%
+ \usebibmacro{author}%
+ \usebibmacro{mlabelnamepunct}%
+ \usebibmacro{title}%
+ \newunit\newblock%
+ \iffieldundef{crossref}%
+ {\iffieldundef{xref}%
+ {\newunit\newblock
+ \usebibmacro{maintitle+booktitle}%
+ \newunit\newblock
+ \usebibmacro{byeditor+others}%
+ \newunit\newblock
+ \iffieldsequal{year}{edition}%
+ {\printfield{year}~\bibstring{edition}\clearfield{year}}%
+ {\printfield{edition}\isdot}%
+ \newunit
+ \iffieldundef{maintitle}%
+ {\printfield{volume}%
+ \printfield{part}}%
+ {}%
+ \newunit
+ \printfield{volumes}%
+ \newunit\newblock
+ \ifbool{bbx@publimedium}%
+ {}%
+ {\usebibmacro{series+number}}%
+ \newunit\newblock
+ \printfield{note}%
+ \newunit\newblock
+ \usebibmacro{publisher+location+date}%
+ \newunit\newblock
+ \usebibmacro{chapter+pages}%
+ \newunit\newblock
+ \usebibmacro{mla:isbn/issn+doi+eprint}%
+ \newunit\newblock
+ \ifbool{bbx@publimedium}{}{\usebibmacro{url+urldate}}%
+ \newunit\newblock
+ \printfield{addendum}%
+ \newunit\newblock
+ \usebibmacro{pageref}}%
+ {}}%
+ {\bbx@crossref{\thefield{crossref}}%
+ \nopunct\unspace\printfield{pages}}%
+ \newunit%
+ \usebibmacro{publimedium}%
+ \usebibmacro{finentry}}
+
+\newbibmacro{mlabelnamepunct}{\setunit{\labelnamepunct}\newblock}
+
+\newbibmacro{mla:video:localized:last-first}[1]{%
+ \ifnameundef{#1}%
+ {}%
+ {\printnames{#1}\addcomma\addspace%
+ \ifthenelse{\iffieldbibstring{#1type} \and \not %
+ \iffieldundef{#1type}}%
+ {\bibstring{\thefield{#1type}}}%
+ {\iffieldundef{#1type}%
+ {\bibstring{with}}%
+ {\printfield[mla:lowercase]{#1type}}}}%
+\iffootnote{\setunit{\addcomma\addspace}}{\newunit}}%
+
+\newbibmacro{mla:video:name:first:footnote}[1]{%
+ \ifnameundef{#1}%
+ {}%
+ {\printnames[byeditor]{#1}\addcomma\addspace%
+ \ifthenelse{\iffieldbibstring{#1type} \and \not %
+ \iffieldundef{#1type}}%
+ {\bibstring{\thefield{#1type}}}%
+ {\iffieldundef{#1type}%
+ {\bibstring{with}}%
+ {\printfield[mla:lowercase]{#1type}}}}%
+ \clearname{#1}%
+}
+
+\newbibmacro{mla:video:localized:first-last}[1]{%
+ \ifnameundef{#1}%
+ {}%
+ {\ifthenelse{\iffieldbibstring{#1type} \and \not %
+ \iffieldundef{#1type} \and \not %
+ \iffieldequalstr{#1type}{composer}}%
+ {\bibstring{\thefield{#1type}}}%
+ {\iffieldundef{#1type}%
+ {\bibstring{with}}%
+ {\iffieldequalstr{#1type}{composer}%
+ {\bibstring{composedby}}%
+ {\printfield[mla:capital]{#1type}}}}%
+ \addspace\printnames[byeditor][-\value{listtotal}]{#1}}%
+\newunit}%
+
+\newbibmacro{mla:video:name:second:footnote}[1]{%
+ \ifnameundef{#1}%
+ {}%
+ {\ifthenelse{\iffieldbibstring{#1type} \and \not %
+ \iffieldundef{#1type} \and \not %
+ \iffieldequalstr{#1type}{composer}}%
+ {\bibstring{\thefield{#1type}}}%
+ {\iffieldundef{#1type}%
+ {\bibstring{with}}%
+ {\iffieldequalstr{#1type}{composer}%
+ {\bibstring{composedby}}%
+ {\printfield[mla:lowercase]{#1type}}}}%
+ \addspace\printnames[byeditor][-\value{listtotal}]{#1}%
+ }}%
+
+\DeclareBibliographyDriver{video}{%
+ \ifnamesequal{labelname}{author}%
+ {\usebibmacro{mla:video:localized:last-first}{author}}{}%
+ \ifnamesequal{labelname}{editor}%
+ {\usebibmacro{mla:video:localized:last-first}{editor}}{}%
+ \printfield{title}%
+ \setunit{\newunitpunct\bibstring{byauthor}\addspace}%
+ \printnames[byeditor]{bookauthor}%
+ \newunit%
+ \ifthenelse{\NOT\ifnamesequal{author}{labelname}%
+ \AND\NOT\ifnameundef{author}}%
+ {\usebibmacro{mla:video:localized:first-last}{author}}%
+ {}%
+ \ifthenelse{\NOT\ifnamesequal{editor}{labelname}%
+ \AND\NOT\ifnameundef{editor}}%
+ {\usebibmacro{mla:video:localized:first-last}{editor}}%
+ {}%
+ \usebibmacro{mla:video:localized:first-last}{namea}%
+ \usebibmacro{mla:video:localized:first-last}{nameb}%
+ \usebibmacro{mla:video:localized:first-last}{namec}%
+ \printfield{origyear}\clearfield{origyear}%
+ \newunit\newblock%
+ \printlist{publisher}%
+ \setunit{\addcomma\addspace}%
+ \printfield{year}%
+ \newunit\newblock%
+ \usebibmacro{publimedium}% 1.4.9 updated to most recent MLA format
+ \usebibmacro{finentry}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% % % % % % % % % % % % % % % % % % % % % %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% drivers to add eventually:
+% * \DeclareBibliographyDriver{misc}
+% * \DeclareBibliographyDriver{artwork}
+% * \DeclareBibliographyDriver{audio}
+% * \DeclareBibliographyDriver{image}
+% * \DeclareBibliographyDriver{movie}
+% * \DeclareBibliographyDriver{music}
+% * \DeclareBibliographyDriver{performance}
+%
+% Specifically important mainstay types to add for MLA users
+% 0 support for multiple publishers? % can't do with bibtex
+% * editorial
+% * letter (to the editor, etc.)
+% * interview
+
+\newbibmacro*{mtitle+mstitle+vol+part+title+stitle}{%
+ \iffieldundef{maintitle}%
+ {}%
+ {\printtext[maintitle]{%
+ \printfield[noformat]{maintitle}%
+ \newunit
+ \printfield[noformat]{mainsubtitle}}%
+ \newunit
+ \printfield{maintitleaddon}%
+ \newunit\newblock
+ \iffieldundef{volume}%
+ {}%
+ {\printfield{volume}%
+ \printfield{part}%
+ \setunit{\addcolon\space}}}%
+ \usebibmacro{title+stitle}}
+
+\renewbibmacro*{series+number}{%
+ \iffieldundef{series}%
+ {}%
+ {\printfield{series}\clearfield{series}\setunit*{\addspace}\printfield{number}}%
+}
+
+\renewbibmacro*{title}{%
+ \iffieldequalstr{entrytype}{thesis}%
+ {\usebibmacro{mla:title:thesis}}%
+ {\iffieldequalstr{entrytype}{unpublished}%
+ {\usebibmacro{mla:title:unpublished}}%
+ {\usebibmacro{title+stitle}}}}%
+
+\renewbibmacro*{publisher+location+date}{%
+ \printlist{location}%
+ \iflistundef{publisher}%
+ {\setunit*{\addcomma\space}}%
+ {\setunit*{\addcolon\space}}%
+ \printlist{publisher}%
+ \setunit*{\addcomma\space}%
+ \ifbool{bbx@nodate}{\printtext{n.d.}}%
+ \printdate%
+ \newunit}
+
+\newbibmacro*{mla:title:unpublished}{%
+ \ifthenelse{\iffieldundef{author} \AND \iffieldundef{nameaddon}}%
+ {\unspace}%
+ {}%
+ \iffieldundef{title}%
+ {}%
+ {\printtext[title:article]{%
+ \printfield[noformat]{title}%
+ \setunit{\subtitlepunct}%
+ \printfield[noformat]{subtitle}}}%
+ \newunit
+ \printtext[title:book]{%
+ \printfield[noformat]{booktitle}%
+ \setunit{\subtitlepunct}%
+ \printfield[noformat]{booksubtitle}}%
+ \newunit
+ \ifcitation%
+ {\printfield[mla:lowercase]{titleaddon}}%
+ {\printfield{titleaddon}}%
+ \setunit{\addcomma\addspace}}
+
+\newbibmacro*{name:first-last:andothers}{%
+ \ifthenelse{\value{listcount}=\value{liststop}\AND
+ \ifmorenames}
+ {\ifnum\value{liststop}>1 \finalandcomma\fi
+ \addspace\bibstring{andothers}}
+ {}}
+
+\newbibmacro*{mla:title:thesis}{%
+ \iffieldundef{title}%
+ {}%
+ {\iffieldequalstr{entrysubtype}{published}%
+ {\printtext[title:book]{%
+ \printfield[noformat]{title}%
+ \setunit{\subtitlepunct}%
+ \printfield[noformat]{subtitle}}}%
+ {\printtext[title:\strfield{entrytype}]{%
+ \printfield[noformat]{title}%
+ \setunit{\subtitlepunct}%
+ \printfield[noformat]{subtitle}}}%
+ \newunit%
+ \printfield{titleaddon}%
+ \newunit\newblock}}
+
+\newbibmacro*{mla:thesis:type}{%
+ \iffieldundef{type}%
+ {\printtext[mla:capital]{\bibstring{phdthesis}}}%
+ {\usebibmacro{mla:all:type}}}%
+
+\newbibmacro*{mla:all:type}{%
+ \ifbibstring{\thefield{type}}%
+ {\printtext[mla:capital]{\bibstring{\thefield{type}}}}%
+ {\printtext[mla:capital]{\printfield{type}}}}%
+
+\newbibmacro*{mla:all:type:foot}{%
+ \ifbibstring{\thefield{type}}%
+ {\printtext[noformat]{\bibstring{\thefield{type}}}}%
+ {\printtext[noformat]{\printfield{type}}}}%
+
+\renewbibmacro*{maintitle+title}{%
+ \usebibmacro{title}%
+ \newunit%
+ \iffieldsequal{maintitle}{title}%
+ {\clearfield{maintitle}%
+ \clearfield{mainsubtitle}%
+ \clearfield{maintitleaddon}}%
+ {}%
+ \iffieldundef{volume}%
+ {\usebibmacro{maintitle}}%
+ {}%
+ \iffieldundef{maintitle}%
+ {\printfield{volume}\clearfield{volume}}%
+ {}%
+ \newunit\newblock}
+
+\renewbibmacro*{maintitle+booktitle}{%
+ \usebibmacro{booktitle}%
+ \newunit
+ \iffieldundef{maintitle}%
+ {}%
+ {\usebibmacro{maintitle}%
+ \newunit\newblock
+ \iffieldundef{volume}%
+ {}%
+ {\printfield{volume}%
+ \printfield{part}%
+ \setunit{\addcolon\space}}}%
+ \newunit}
+
+\newbibmacro*{mla:proceedings:booktitle}{%
+ \usebibmacro{booktitle}%
+ \newunit%
+ \iffieldundef{eventtitle}%
+ {}%
+ {\printtext[default]{%
+ \bibstring{proceedings}\addspace\bibstring{ofseries}\addspace%
+ \printfield[default]{eventtitle}\isdot}}%
+ \setunit*{\isdot\addcomma\addspace}%
+ \printlist{organization}%
+ \setunit*{\addcomma\addspace}%
+ \printeventdate%
+ \setunit*{\addcomma\addspace}%
+ \printlist{institution}%
+ \setunit*{\addcomma\addspace}%
+ \printfield{venue}}
+
+\newbibmacro*{title+stitle}{%
+ \iffieldundef{title}%
+ {\ifthenelse{%
+ \iffieldequalstr{entrytype}{suppbook}%
+ \OR%
+ \iffieldequalstr{entrytype}{suppcollection}}%
+ {}%
+ {\printtext[title:\strfield{entrytype}]{%
+ \printfield[noformat]{booktitle}%
+ \setunit*{\subtitlepunct}%
+ \printfield[noformat]{booksubtitle}}}}%
+ {\printtext[title:\strfield{entrytype}]{%
+ \printfield[noformat]{title}%
+ \setunit*{\subtitlepunct}%
+ \printfield[noformat]{subtitle}}}%
+ \newunit%
+ \printfield[noformat]{titleaddon}%
+ \newunit%
+ \usebibmacro{byauthor}%
+ \iffieldundef{origtitle}%
+ {\usebibmacro{mla:reprint}}%
+ {}%
+}%
+
+\newbibmacro*{title:incollection:italics}{%
+ \iffieldundef{title}%
+ {}%
+ {\printtext[title:book]{%
+ \printfield[noformat]{title}%
+ \setunit*{\subtitlepunct}%
+ \printfield[noformat]{subtitle}}%
+ \newunit%
+ \printfield[noformat]{titleaddon}%
+ \newunit%
+ \setboolean{bbx@mla-incollection}{true}\usebibmacro{mla:reprint}\setboolean{bbx@mla-incollection}{false}%
+ \newunit\newblock}}
+
+\newbibmacro*{mla:article:journal+issuetitle}{%
+ \usebibmacro{issue}%
+ \newunit\newblock%
+ \iffieldundef{issuetitle}%
+ {}%
+ {\usebibmacro{byeditor+others}%
+ \newunit\newblock%
+ \bibstring{specissue}\setunit*{\addspace}}%
+ \ifthenelse{\iffieldequalstr{entrytype}{periodical} \AND \iffieldundef{journaltitle}}%
+ {\usebibmacro{periodical}}%
+ {\usebibmacro{journal}}%
+ \ifthenelse{\iffieldequalstr{entrytype}{online}}{\usebibmacro{mla:online}}{\setunit*{\addspace}}%
+ \ifthenelse{\iffieldequalstr{entrysubtype}{newspaper} \or \iffieldequalstr{entrysubtype}{magazine} \or \iffieldequalstr{entrytype}{online}}%
+ {\printlist[brackets]{location}%
+ \printtext{\printdate}%
+ \setunit*{\addcomma\addspace}%
+ \printfield{version}%
+ \setunit*{\addcomma\addspace}%
+ \printfield[mla:newspaper:section]{chapter}%
+ }%
+ {\printfield{series}\clearfield{series}%
+ \setunit*{\addspace}%
+ \printfield{volume}%
+ \setunit*{\adddot}%
+ \printfield{number}\clearfield{number}%
+ \setunit*{\addcomma\space}%
+ \usebibmacro{mla:isbn/issn+doi+eprint}%
+ \setunit{\addspace}%
+ \usebibmacro{issue+date}%
+ \newunit\newblock
+ \newunit}%
+}
+
+\newbibmacro*{mla:online}{%
+ \iffieldundef{maintitle}%
+ {}%
+ {\printtext[maintitle]{%
+ \printfield[titlecase]{maintitle}%
+ \setunit{\subtitlepunct}%
+ \printfield[titlecase]{mainsubtitle}}}%
+ \newunit\newblock%
+ \printlist{publisher}%
+ \setunit*{\addcomma\addspace}%
+}
+
+\renewbibmacro*{journal+issuetitle}{%
+ \usebibmacro{journal}%
+ \setunit*{\addspace}%
+ \ifthenelse{\iffieldequalstr{entrysubtype}{newspaper} \or \iffieldequalstr{entrysubtype}{magazine}}%
+ {\printlist[brackets]{location}%
+ \printtext{\printdate}%
+ \setunit{\addcomma\addspace}%
+ \printfield{version}%
+ \setunit{\addcomma\addspace}%
+ \printfield[mla:newspaper:section]{chapter}%
+ }%
+ {\printfield{series}\clearfield{series}%
+ \setunit{\addspace}%
+ \printfield{volume}%
+ \setunit*{\adddot}%
+ \printfield{number}\clearfield{number}%
+ \setunit{\addcomma\space}%
+ \usebibmacro{mla:isbn/issn+doi+eprint}%
+ \setunit{\addspace}%
+ \usebibmacro{issue+date}%
+ \newunit\newblock
+ \usebibmacro{issue}%
+ \newunit}}
+
+\renewbibmacro{finentry}{%
+ \finentry%
+ \iffieldundef{annotation}%
+ {}%
+ {\ifbool{bbx@annotation}%
+ {\begin{quotation}\noindent%
+ \printfield{annotation}%
+ \end{quotation}}%
+ {}}%
+}
+
+\newbibmacro{publimedium}{%
+ \ifbool{bbx@publimedium}%
+ {\printfield[mla:capital]{howpublished}%
+ \ifthenelse{\iffieldundef{howpublished}\AND\boolean{bbx@guessmedium}}%
+ {\ifthenelse{\iffieldundef{url}\AND\iffieldundef{eprinttype}}%
+ {\printtext[mla:publimedium]{\bibstring{print}}}%
+ {\iffieldundef{eprinttype}%
+ {\printfield{eprint}}%
+ {\printfield[eprint:\strfield{eprinttype}]{eprint}}%
+ \newunit%
+ \usebibmacro{url+urldate}%
+ }%
+ }%
+ {}%-keep-blank
+ \newunit%
+ \usebibmacro{series+number}}%
+ \newunit%
+ \usebibmacro{mla:reprint}%
+ {}%-keep-blank
+}
+
+\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
+
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-mla/mla7.cbx b/macros/latex/contrib/biblatex-contrib/biblatex-mla/mla7.cbx
new file mode 100644
index 0000000000..b781433e83
--- /dev/null
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-mla/mla7.cbx
@@ -0,0 +1,5 @@
+\ProvidesFile{mla7.cbx}[2021/05/12 v2.0 biblatex bibliography style]
+
+\RequireCitationStyle{mla}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-mla/portuguese-mla.lbx b/macros/latex/contrib/biblatex-contrib/biblatex-mla/portuguese-mla.lbx
index ac58fc1ac0..c9300b8a3a 100644
--- a/macros/latex/contrib/biblatex-contrib/biblatex-mla/portuguese-mla.lbx
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-mla/portuguese-mla.lbx
@@ -16,17 +16,17 @@
{}
{\mkbibmonth{\thefield{#2}}%
\iffieldundef{#1}{}{\space}}%
- \mkdatezeros{\thefield{#1}}}%
+ \mkyearzeros{\thefield{#1}}}%
\protected\def\mkbibdateshort#1#2#3{%
\iffieldundef{#3}
{}
- {\mkdatezeros{\thefield{#3}}%
+ {\mkdayzeros{\thefield{#3}}%
\iffieldundef{#2}{}{/}}%
\iffieldundef{#2}
{}
- {\mkdatezeros{\thefield{#2}}%
+ {\mkmonthzeros{\thefield{#2}}%
\iffieldundef{#1}{}{/}}%
- \mkdatezeros{\thefield{#1}}}%
+ \mkyearzeros{\thefield{#1}}}%
}
\DeclareBibliographyStrings{%
@@ -87,19 +87,36 @@
msc = {{Tese de Mestr\adddot}{Tese de Mestr\adddot}},% 0.6
mphil = {{Tese de Mestr\adddot}{Tese de Mestr\adddot}},% 0.6
mlitt = {{Tese de Mestr\adddot}{Tese de Mestr\adddot}},% 0.6
- % manuscript = {{ms\adddot}{ms\adddot}},% FIXME
- % typescript = {{ts\adddot}{ts\adddot}},% FIXME
- % director = {{dir\adddot}{dir\adddot}},% FIXME
- % screenplay = {{adapt\adddot}{adapt\adddot}},% FIXME
- % adaptation = {{adapt\adddot}{adapt\adddot}},% FIXME
- % adaptor = {{adapt\adddot}{adapt\adddot}},% FIXME
- % performer = {{perf\adddot}{perf\adddot}},% FIXME
- % performers = {{perf\adddot}{perf\adddot}},% FIXME
- % composer = {{composer\adddot}{composer\adddot}},% FIXME
- % composedby = {{composed~by}{composed~by}},% FIXME
- % producer = {{prod\adddot}{prod\adddot}},% FIXME
- % with = {{with}{with}},% FIXME
- % proceedings = {{proc\adddot}{proc\adddot}},% FIXME
+ % FIXME 2.0 check the following for quality of Portuguese translation
+ manuscript = {{manuscrito}{manuscrito}},
+ patentde = {{Deutsches Patent- und Markenamt}{DE}},% localised in German
+ patenteu = {{Escritório Europeu de Patentes}{EU}},
+ patentfr = {{Institut National de la Propriété Industrielle}{FR}},% localised in French
+ patentuk = {{The Intellectual Property Office of the United Kingdom}{UK}},% localised in English
+ patentus = {{United States Patent and Trademark Office}{US}},% localised in English
+ % 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 = {{Institut National de la Propriété Industrielle}{FR 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}},
+ typescript = {{texto datilografado}{texto datilografado}},
+ director = {{dir\adddot}{dir\adddot}},
+ screenplay = {{adapt\adddot}{adapt\adddot}},
+ adaptation = {{adapt\adddot}{adapt\adddot}},
+ adaptor = {{adapt\adddot}{adapt\adddot}},
+ performer = {{artista}{artista},
+ performers = {{artistas}{artistas},
+ composer = {{comp\adddot}{comp\adddot}},
+ composedby = {{composto~por}{composto~por}},
+ producer = {{prod\adddot}{prod\adddot}},
+ with = {{com}{com}},
+ proceedings = {{processo}{processo}},
+ transof = {{tradução~de}{tradução~de}},
+ volstodate = {{volumes até hoje}{volumes até hoje}},
+ supptotitle = {{a}{a}},
+ print = {{impressão}{impressão}},
+ web = {{rede}{rede}},
}
\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-mla/spanish-mla.lbx b/macros/latex/contrib/biblatex-contrib/biblatex-mla/spanish-mla.lbx
index f8b1a8ebc2..3414eb8ac9 100644
--- a/macros/latex/contrib/biblatex-contrib/biblatex-mla/spanish-mla.lbx
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-mla/spanish-mla.lbx
@@ -18,17 +18,17 @@
{}
{\mkbibmonth{\thefield{#2}}%
\iffieldundef{#1}{}{\space}}%
- \mkdatezeros{\thefield{#1}}}%
+ \mkyearzeros{\thefield{#1}}}%
\protected\def\mkbibdateshort#1#2#3{%
\iffieldundef{#3}
{}
- {\mkdatezeros{\thefield{#3}}%
+ {\mkdayzeros{\thefield{#3}}%
\iffieldundef{#2}{}{/}}%
\iffieldundef{#2}
{}
- {\mkdatezeros{\thefield{#2}}%
+ {\mkmonthzeros{\thefield{#2}}%
\iffieldundef{#1}{}{/}}%
- \mkdatezeros{\thefield{#1}}}%
+ \mkyearzeros{\thefield{#1}}}%
}
\DeclareBibliographyStrings{%
@@ -91,19 +91,36 @@
msc = {{MSc\addabbrvspace tesis}{MSc\addabbrvspace tesis}},% 0.6
mphil = {{MPhil\addabbrvspace tesis}{MPhil\addabbrvspace tesis}},% 0.6
mlitt = {{MLitt\addabbrvspace tesis}{MLitt\addabbrvspace tesis}},% 0.6
- % manuscript = {{ms\adddot}{ms\adddot}},% FIXME
- % typescript = {{ts\adddot}{ts\adddot}},% FIXME
- % director = {{dir\adddot}{dir\adddot}},% FIXME
- % screenplay = {{adapt\adddot}{adapt\adddot}},% FIXME
- % adaptation = {{adapt\adddot}{adapt\adddot}},% FIXME
- % adaptor = {{adapt\adddot}{adapt\adddot}},% FIXME
- % performer = {{perf\adddot}{perf\adddot}},% FIXME
- % performers = {{perf\adddot}{perf\adddot}},% FIXME
- % composer = {{composer\adddot}{composer\adddot}},% FIXME
- % composedby = {{composed~by}{composed~by}},% FIXME
- % producer = {{prod\adddot}{prod\adddot}},% FIXME
- % with = {{with}{with}},% FIXME
- % proceedings = {{proc\adddot}{proc\adddot}},% FIXME
+ % FIXME 2.0 check the following for quality of Spanish translation
+ manuscript = {{manuscrito}{manuscrito}},
+ patentde = {{Deutsches Patent- und Markenamt}{DE}},% localised in German
+ patenteu = {{Oficina Europea de Patentes}{EU}},
+ patentfr = {{Institut National de la Propriété Industrielle}{FR}},% localised in French
+ patentuk = {{The Intellectual Property Office of the United Kingdom}{UK}},% localised in English
+ patentus = {{United States Patent and Trademark Office}{US}},% localised in English
+ % 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 = {{Institut National de la Propriété Industrielle}{FR 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}},
+ typescript = {{mecanografiado}{mecanografiado}},
+ director = {{dir\adddot}{dir\adddot}},
+ screenplay = {{adapt\adddot}{adapt\adddot}},
+ adaptation = {{adapt\adddot}{adapt\adddot}},
+ adaptor = {{adapt\adddot}{adapt\adddot}},
+ performer = {{ejecutante}{ejecutante},
+ performers = {{ejecutantes}{ejecutantes},
+ composer = {{comp\adddot}{comp\adddot}},
+ composedby = {{compuesto~por}{compuesto~por}},
+ producer = {{prod\adddot}{prod\adddot}},
+ with = {{con}{con}},
+ proceedings = {{actas}{actas}},
+ transof = {{traducción~de}{traducción~de}},
+ volstodate = {{volúmenes hasta ahora}{volúmenes hasta ahora}},
+ supptotitle = {{a}{a}},
+ print = {{impresión}{impresión}},
+ web = {{web}{web}},
}
\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/easybook/easybook.dtx b/macros/latex/contrib/easybook/easybook.dtx
index 43e86f831b..7304189a36 100644
--- a/macros/latex/contrib/easybook/easybook.dtx
+++ b/macros/latex/contrib/easybook/easybook.dtx
@@ -23,12 +23,12 @@
%
% \changes{v1.20}{2021/01/09}{修改和完善用户文档。}
% \changes{v1.20}{2021/01/09}{模板更改为使用 CC-BY 许可协议。}
-% \changes{v1.25w}{2021/05/03}{取消附带的示例文件,可查看历史版本及其它来源的使用样例。}
-% \changes{v1.25w}{2021/06/02}{将模块的代码独立出来为 \pkg{easybase} 宏包,适用于 \CTeX 文档类。}
+% \changes{v1.25x}{2021/05/03}{取消附带的示例文件,可查看历史版本及其它来源的使用样例。}
+% \changes{v1.25x}{2021/06/02}{将模块的代码独立出来为 \pkg{easybase} 宏包,适用于 \CTeX 文档类。}
%
% \title{\sffamily easybook 文档类手册}
% \author{瞿毅}
-% \date{2021/06/08\hskip\ccwd\relax v1.25w\thanks{\url{https://gitee.com/texl3/easybook}}}
+% \date{2021/06/09\hskip\ccwd\relax v1.25x\thanks{\url{https://gitee.com/texl3/easybook}}}
%
% \maketitle
% \begin{abstract}
@@ -134,7 +134,7 @@
% \end{syntax}
% 传递给 \cls{ctexbook} 设置字体,最好不要使用原有的 \opt{fontset} 选项,默认情况下使用自定义字体而不开启这个选项,可根据安装的字体及电脑系统选取。\opt{noto} 与 \opt{none} 选项的相关描述见小节 \ref{subsec:font settings},\opt{overleaf} 是一个各系统通用选项,会检测系统环境选取对应字体。
% \changes{v1.21}{2021/01/12}{默认字体与 \CTeX 一致,不再是自定义字体。}
-% \changes{v1.25w}{2021/05/04}{修复使用 \pkg{xeCJK} 与 \pkg{fontspec} 宏包的字体设置命令在 \hologo{LuaLaTeX} 下失效的问题。}
+% \changes{v1.25x}{2021/05/04}{修复使用 \pkg{xeCJK} 与 \pkg{fontspec} 宏包的字体设置命令在 \hologo{LuaLaTeX} 下失效的问题。}
% \end{function}
%
% \begin{function}[rEXP,added = 2021-01-05,updated = 2021-01-13]{paper}
@@ -184,7 +184,7 @@
% \tn{listoflstlistings*+}\oarg{键值列表}
% \end{syntax}
% \tn{listoffigures} 命令输出图片目录,\tn{listoftables} 输出表格目录,\tn{listoflstlistings} 输出代码目录。带有星号的目录命令不将标题添加进主文档目录,带有+号的目录命令可以使当前标题编号。\tn{tableofcontents+} 与其它命令不同是用于输出双语目录,需要与双语目录标题命令 \tn{bichapter} 等或设置图片、表格和代码等英文目录的标题配合使用,附加代码是中文与英文目录之间的代码,可以插入目录样式和换页等命令。目录的键值列表选项如下
-% \changes{v1.25w}{2021/05/05}{命令 \tn{tableofcontents} 可以输出双语目录。}
+% \changes{v1.25x}{2021/05/05}{命令 \tn{tableofcontents} 可以输出双语目录。}
% \end{function}
%
% \begin{function}{multoc,columns,title,format,aftertitle,pagestyle,chapter,section}
@@ -201,7 +201,7 @@
% 在书籍模式且 \opt{chapter} 选项开启或者文章模式的情况下,\opt{format} 用于设置目录标题的格式,\opt{aftertitle} 选项的代码将被插入到目录标题内容之后,\opt{pagestyle} 是目录标题所在页的页面格式,除此之外还支持 \opt{ctexset/chapter} 或 \opt{ctexset/section} 所有的章节标题样式选项。\opt{chapter} 选项使目录标题按照 chapter 级别输出,\opt{section} 选项使目录标题按照 section 级别输出,默认为 chapter 级别。
% \changes{v1.23}{2021/03/15}{为几个目录增加键值列表的选项,可设置标题输出级别以及是否加入主目录。}
% \changes{v1.24}{2021/04/04}{目录命令的可选参数增加标题键值。}
-% \changes{v1.25w}{2021/06/02}{目录可设置多栏,并在 article 模式仍然生效。}
+% \changes{v1.25x}{2021/06/02}{目录可设置多栏,并在 article 模式仍然生效。}
% \end{function}
%
% \subsubsection{标题命令}
@@ -214,7 +214,7 @@
% 双语目录的标题命令目前设置了常用的三个级别,它们将中文标题正常输出,并使中英文标题加入双语目录,这个功能是为国内一些大学的学位论文模板的要求设计,在一般情况和英文模式下不需要使用。
%
% 它们的星号变体命令使文中标题不编号,但是仍然加入双语目录,若英文标题参数空置那么仅加入中文目录而不加入英文目录,这一特点与 \tn{chapter*} 等命令的行为不太一样,在一些情况下会用到。可选参数是目录中的中文标题,默认与中文标题一致,正文标题过长时可用它设置在目录中显示的标题。双语目录的格式是一致的,共享使用 \tn{tocset} 的设置,英文目录的章级别标题名及编号的修改方式如下
-% \changes{v1.25w}{2021/05/05}{增加与双语目录配合的标题命令。}
+% \changes{v1.25x}{2021/05/05}{增加与双语目录配合的标题命令。}
% \end{function}
%
% \begin{function}{chapter/biname,chapter/binmuber}
@@ -314,7 +314,7 @@
% \changes{v1.10}{2021/01/08}{修复了 \opt{linktopage} 选项关闭时目录中标题编号无超链接的问题。}
% \changes{v1.23}{2021/03/19}{修复在 \pkg{ctex} v2.5.6 更新后 \cls{easybook} 与 \pkg{hyperref} 冲突问题。}
% \changes{v1.24}{2021/04/05}{增加 \pkg{hyperref} 超链接选项完整的支持。}
-% \changes{v1.25w}{2021/05/06}{模块名 \opt{link} 改为 \opt{refset},\opt{link} 作为兼容性保留。}
+% \changes{v1.25x}{2021/05/06}{模块名 \opt{link} 改为 \opt{refset},\opt{link} 作为兼容性保留。}
% \end{function}
%
% \begin{optdesc}
@@ -371,7 +371,7 @@
% \ding{229} 以上选项路径为 \opt{subfont/...}
% \changes{v1.10}{2021/01/08}{加入自定义非正文字体选项。}
% \changes{v1.23}{2021/02/08}{修复使用 \tn{zihao} 命令设置字体失效的问题。}
-% \changes{v1.25w}{2021/05/31}{其它字体模块名由 \opt{elsefont} 改为 \opt{subfont},并增加数学字体的选项 \opt{subfont/math}。}
+% \changes{v1.25x}{2021/05/31}{其它字体模块名由 \opt{elsefont} 改为 \opt{subfont},并增加数学字体的选项 \opt{subfont/math}。}
% \end{function}
%
% \begin{optdesc}
@@ -396,7 +396,7 @@
% \changes{v1.21}{2021/01/11}{增加 \opt{bibset} 选项,可以使用 \hologo{BibTeX} 或 \hologo{biber} 编译参考文献。}
% \changes{v1.23}{2021/02/23}{使用 \opt{bibset} 选项时可设置标注风格。}
% \changes{v1.24}{2021/04/09}{可以不载入参考文献包手动配置参考文献格式。}
-% \changes{v1.25w}{2021/05/12}{取消 \opt{bib-loadpkg} 选项,由是否设置参考文献数据库来决定载入宏包。}
+% \changes{v1.25x}{2021/05/12}{取消 \opt{bib-loadpkg} 选项,由是否设置参考文献数据库来决定载入宏包。}
% \end{function}
%
% \begin{optdesc}
@@ -602,7 +602,7 @@
% 上面几个选项用于设置脚注格式,\opt{fnparskip} 和 \opt{fnparindent} 选项仅在 \opt{fnhang = true} 时有效。\opt{fnhang} 用于将脚注设置为悬挂缩进的格式,\opt{fnmark-pos} 选项设置脚注编号的位置,正常文本或是上标形式。\opt{fnmark-num} 选项设置脚注编号的格式,默认为原生样式 \opt{plain},还可以改为 \opt{pifont} 的各个版本,从左往右依次为普通版、阴文衬线版、阳文无衬线版和阴文无衬线版,缺点是它们的编号仅包括1-10。
%
% \opt{fnmark-form} 是脚注标记的格式,在此设置字体命令会覆盖 \opt{subfont/footnote} 的设置,最后一个格式命令可以带有一个参数,这个参数接受脚注编号,一般配合 \opt{fnmark-num = plain} 使用。\opt{afterfnmark} 是脚注标记后的代码,一般用于设置标记与文本间的距离。
-% \changes{v1.25w}{2021/05/12}{增加脚注样式设置选项。}
+% \changes{v1.25x}{2021/05/12}{增加脚注样式设置选项。}
% \end{function}
%
% \subsection{目录样式}
@@ -621,7 +621,7 @@
% \opt{format} 是目录中标题的格式,可以设置字体和加入垂直间距等,垂直间距最好使用无间距重合的 \tn{addvspace} 命令,带有加号的 \opt{format+} 选项用于在已有的格式命令后附加内容。\opt{indent} 是目录中标题在页面左侧的缩进距离,应该有长度单位。\opt{rule} 选项中一般应当使用 \tn{tocrule} 命令,将会在接下来介绍。\opt{numsep} 是有编号的标题在目录中编号与标题的间距。
% \changes{v1.21}{2021/01/13}{增加配置目录样式的选项。}
% \changes{v1.24}{2021/04/20}{增加目录中编号与标题的间距选项 \opt{numsep}。}
-% \changes{v1.25w}{2021/05/14}{可以分别设置图片、表格和代码目录的格式。}
+% \changes{v1.25x}{2021/05/14}{可以分别设置图片、表格和代码目录的格式。}
% \end{function}
%
% \begin{function}[added = 2021-01-13,updated = 2021-04-20]{\tocrule,\EBNumberLine}
@@ -706,7 +706,7 @@
% \tn{end}\marg{环境名}
% \end{syntax}
% \pkg{tabularray} 是一个较新的宏包,不仅提供了 \pkg{tabularx}、\pkg{multirow}、和 \pkg{booktabs} 宏包的功能,并且不依赖其它宏包与它们同时使用不会产生冲突,还实现了用简便的键值列表方式设置表格样式。目前除了表头斜线以及跨页功能存在不足,其它方面已满足对表格绝大多数格式的需求,具体用法可见宏包的说明文档。
-% \changes{v1.25w}{2021/05/17}{使用功能更便捷齐全的 \pkg{tabularray} 宏包设置表格样式。}
+% \changes{v1.25x}{2021/05/17}{使用功能更便捷齐全的 \pkg{tabularray} 宏包设置表格样式。}
% \end{function}
%
% \subsection{列表}
@@ -879,7 +879,7 @@
% \tn{qtyrange}\oarg{键值列表}\marg{数字1}\marg{数字2}\marg{单位}
% \end{syntax}
% \pkg{siunitx} 宏包的 \tn{num} 命令可以输出以科学计数法表示的数值,单位格式化命令 \tn{unit} 包含文字项目(例如字母或数字)时,使用 . 和 \~{} 放置在单元乘积中间,并使用 \_ 和 \^{} 正确放置指定的下标和上标。格式化方法可在数学和文本模式下使用。而 \tn{qty} 命令可用来输出带有单位的量,\tn{qtyrange} 可以输出带有范围和单位的量。
-% \changes{v1.25w}{2021/05/18}{\pkg{siunitx} 宏包 v3.0.0 更新后用法改变,修改相关配置选项。}
+% \changes{v1.25x}{2021/05/18}{\pkg{siunitx} 宏包 v3.0.0 更新后用法改变,修改相关配置选项。}
% \end{function}
%
% \begin{ctexexam}
@@ -1062,7 +1062,7 @@
%<*class>
\NeedsTeXFormat{LaTeX2e}[2020/10/01]
\RequirePackage{l3keys2e}
-\ProvidesExplClass{easybook}{2021/06/08}{1.25w}{beta}
+\ProvidesExplClass{easybook}{2021/06/09}{1.25x}{beta}
\bool_set_false:N \l__eb_compile_draft_bool
\bool_set_false:N \l__eb_title_newline_bool
@@ -1124,7 +1124,7 @@
config .tl_set:N = \g__eb_config_tl,
unknown .code:n =
- { \clist_gput_right:No \g__eb_options_clist { \CurrentOption } }
+ { \clist_gput_right:NV \g__eb_options_clist \CurrentOption }
}
\ProcessKeysOptions{easybook}
@@ -1306,7 +1306,7 @@
%<*package>
\NeedsTeXFormat{LaTeX2e}[2020/10/01]
\RequirePackage{etoolbox}
-\ProvidesExplPackage{easybase}{2021/06/08}{1.25w}{beta}
+\ProvidesExplPackage{easybase}{2021/06/09}{1.25x}{beta}
\cs_generate_variant:Nn \eb_ctex_define:nn { nx }
\cs_generate_variant:Nn \int_to_arabic:n { v }
@@ -1707,7 +1707,7 @@
\geometry{showframe}
}
\tl_if_empty:NF \l_eb_graphics_path_tl
- { \exp_args:No \graphicspath { \l_eb_graphics_path_tl } }
+ { \exp_args:NV \graphicspath \l_eb_graphics_path_tl }
\cs_if_exist:NF \kaishu { \cs_gset_eq:NN \kaishu \itshape }
}
@@ -2619,8 +2619,8 @@
}
\eb_at_end_preamble:n
{
- \exp_last_unbraced:No
- \declaretheoremstyle { \c__eb_thmtools_keyval_tl }{easy-theorem}
+ \exp_last_unbraced:NV
+ \declaretheoremstyle \c__eb_thmtools_keyval_tl{easy-theorem}
\eb_thmname_set:nnn { exercise } { Exercise } { 练习 }
\cs_undefine:N \proof
\clist_map_inline:nn
@@ -2855,7 +2855,7 @@
{
standard~jigsaw,
nobeforeafter,tcbox~raise~base,
- top = 1.25wt,bottom = 1.25wt,left = 1.25wt,right = 1.25wt,
+ top = 1.25xt,bottom = 1.25xt,left = 1.25xt,right = 1.25xt,
boxrule = 0.75pt,arc = 1pt,
colback = #1,opacityback = 0.12,colframe = #1,#3
}{#2}
diff --git a/macros/latex/contrib/easybook/easybook.pdf b/macros/latex/contrib/easybook/easybook.pdf
index d1ab5cccd4..ff5485e64d 100644
--- a/macros/latex/contrib/easybook/easybook.pdf
+++ b/macros/latex/contrib/easybook/easybook.pdf
Binary files differ
diff --git a/macros/latex/contrib/hvfloat/Changes b/macros/latex/contrib/hvfloat/Changes
index 18e87aded3..2b809bb337 100644
--- a/macros/latex/contrib/hvfloat/Changes
+++ b/macros/latex/contrib/hvfloat/Changes
@@ -1,4 +1,6 @@
hvfloat.sty:
+2.28 2021-06-09 - fix for missing type that leads to nonFloat _and_ onlyText
+ - fix for \thehv@pfigure and \thehv@ptablee
2.27 2021-06-07 - added \tabcaptionbelow
- fix bug with vertical alignment for top captions
- fix for local caption and subcaption setting
diff --git a/macros/latex/contrib/hvfloat/doc/examples/capPos.pdf b/macros/latex/contrib/hvfloat/doc/examples/capPos.pdf
index 834f4949c7..473cc1322e 100644
--- a/macros/latex/contrib/hvfloat/doc/examples/capPos.pdf
+++ b/macros/latex/contrib/hvfloat/doc/examples/capPos.pdf
Binary files differ
diff --git a/macros/latex/contrib/hvfloat/doc/examples/odd2s1c.pdf b/macros/latex/contrib/hvfloat/doc/examples/odd2s1c.pdf
index ef2c6e6b8d..f13f5e2831 100644
--- a/macros/latex/contrib/hvfloat/doc/examples/odd2s1c.pdf
+++ b/macros/latex/contrib/hvfloat/doc/examples/odd2s1c.pdf
Binary files differ
diff --git a/macros/latex/contrib/hvfloat/doc/hvfloat.pdf b/macros/latex/contrib/hvfloat/doc/hvfloat.pdf
index ce628eaf57..46bc0b2bcc 100644
--- a/macros/latex/contrib/hvfloat/doc/hvfloat.pdf
+++ b/macros/latex/contrib/hvfloat/doc/hvfloat.pdf
Binary files differ
diff --git a/macros/latex/contrib/hvfloat/latex/hvfloat.sty b/macros/latex/contrib/hvfloat/latex/hvfloat.sty
index cb9f1b0742..c6bb68b8fb 100644
--- a/macros/latex/contrib/hvfloat/latex/hvfloat.sty
+++ b/macros/latex/contrib/hvfloat/latex/hvfloat.sty
@@ -1,4 +1,4 @@
-%% $Id: hvfloat.sty 105 2021-06-07 07:30:15Z herbert $
+%% $Id: hvfloat.sty 107 2021-06-09 06:43:25Z herbert $
%%
%%
%% IMPORTANT NOTICE:
@@ -15,8 +15,8 @@
%% `hvfloat' offers rotating of captions and objects for floats
%%
\NeedsTeXFormat{LaTeX2e}
-\def\fileversion{2.27}
-\def\filedate{2021/06/07}
+\def\fileversion{2.28}
+\def\filedate{2021/06/09}
\message{`hvfloat' v\fileversion, \filedate\space (Herbert Voss)}
\ProvidesPackage{hvfloat}[\filedate\ rotating of floating objects]
\let\hvFloatFileVersion\fileversion
@@ -422,11 +422,10 @@
\newcounter{hv@tempCNTfigB}%
\newcounter{hv@tempCNTtabA}%
\newcounter{hv@tempCNTtabB}%
-
-\newcounter{hv@pfigure}
-\newcounter{hv@ptable}
-\newcounter{subhv@pfigure}
-\newcounter{subhv@ptable}
+\newcounter{hv@pfigure}%
+\newcounter{hv@ptable}%
+\newcounter{subhv@pfigure}%
+\newcounter{subhv@ptable}%
\newif\ifhv@star
\newif\if@hvsubstar
@@ -453,12 +452,18 @@
% \setlength\hvWideWidth{\dimexpr\linewidth+\marginparwidth}%
\hv@maxImageWidth=\textwidth
\reset@special@float
- \global\setcounter{hv@pfigure}{\value{figure}}%
- \global\setcounter{hv@ptable}{\value{table}}%
+ \setcounter{hv@pfigure}{\value{figure}}%
+ \setcounter{hv@ptable}{\value{table}}%
\setcounter{hv@tempCNTfigA}{\value{figure}}%
\setcounter{hv@tempCNTfigB}{\value{figure}}%
\setcounter{hv@tempCNTtabA}{\value{table}}%
\setcounter{hv@tempCNTtabB}{\value{table}}%
+ \renewcommand\thehv@pfigure{\thefigure}%
+ \renewcommand\thehv@ptable{\thetable}%
+ \renewcommand\thehv@tempCNTfigA{\thefigure}%
+ \renewcommand\thehv@tempCNTfigB{\thefigure}%
+ \renewcommand\thehv@tempCNTtabA{\thetable}%
+ \renewcommand\thehv@tempCNTtabB{\thetable}%
\gdef\hv@save@setting{#1}%
\ifx\relax#1\relax\else\setkeys{hvSet}{#1}\fi
\ifx\hv@caption@format\@empty\else\expandafter\captionsetup\expandafter{\hv@caption@format}\fi
@@ -525,8 +530,10 @@
\hv@maxImageWidth=\textwidth
\ifx\relax#1\relax\else\setkeys{hvSet}{#1}\fi
\gdef\hv@floatType{#2}%
+ \ifx\relax#2\relax
+ \setkeys{hvSet}{nonFloat,onlyText}
+ \fi
\xdef\hv@floatListOfExt{\@nameuse{ext@\hv@floatType}}%
- \ifx\relax#2\relax \setkeys{hvSet}{nonFloat=true}\fi
\gdef\hv@floatObject{#3}%
\@ifnextchar[{\do@@hvFloat}{\do@@hvFloat[]}%
}
@@ -642,15 +649,15 @@
\else
\ifx\hv@floatType\hv@figure
\ifx\relax\hv@shortCap\relax
- \figcaption{\hv@longCap}%
+ \figcaption{\hv@longCap\ifx\hv@label\@empty\else\label{\hv@label}\fi}%
\else
- \figcaption[\hv@shortCap]{\hv@longCap}%
+ \figcaption[\hv@shortCap]{\hv@longCap\ifx\hv@label\@empty\else\label{\hv@label}\fi}%
\fi
\else
\ifx\relax\hv@shortCap\relax
- \tabcaption{\hv@longCap}%
+ \tabcaption{\hv@longCap\ifx\hv@label\@empty\else\label{\hv@label}\fi}%
\else
- \tabcaption[\hv@shortCap]{\hv@longCap}%
+ \tabcaption[\hv@shortCap]{\hv@longCap\ifx\hv@label\@empty\else\label{\hv@label}\fi}%
\fi
\fi
\fi
@@ -660,9 +667,9 @@
\else
\let\@captype\hv@floatType
\ifx\hv@shortCap\@empty\caption{\hv@longCap}\else\caption[\hv@shortCap]{\hv@longCap}\fi
+ \ifx\hv@label\@empty\else\label{\hv@label}\fi
\fi
\fi
- \ifx\hv@label\@empty\else\label{\hv@label}\fi
\endminipage
}%
\else
@@ -794,10 +801,10 @@
\fi
\centering
\ifhv@fbox
- \fbox{\usebox{\hvCaptionBox}}\\[\hvBelowCaptionSkip]%
+ \fbox{\usebox{\hvCaptionBox}}\\[0.5\hvBelowCaptionSkip]%
\fbox{\usebox{\hvObjectBox}}%
\else
- \usebox{\hvCaptionBox}\\[\hvBelowCaptionSkip]%
+ \usebox{\hvCaptionBox}\\[0.5\hvBelowCaptionSkip]%
\usebox{\hvObjectBox}%
\fi
\end{minipage}%
@@ -825,10 +832,10 @@
\fi
\centering
\ifhv@fbox
- \fbox{\usebox{\hvObjectBox}}\\[\hvAboveCaptionSkip]%
+ \fbox{\usebox{\hvObjectBox}}\\[0.5\hvAboveCaptionSkip]%
\fbox{\usebox{\hvCaptionBox}}%
\else
- \ifhv@objectFrame\frame{\usebox{\hvObjectBox}}\else\usebox{\hvObjectBox}\fi\\[\hvAboveCaptionSkip]%
+ \ifhv@objectFrame\frame{\usebox{\hvObjectBox}}\else\usebox{\hvObjectBox}\fi\\[0.5\hvAboveCaptionSkip]%
\usebox{\hvCaptionBox}%
\fi
\end{minipage}%
@@ -1084,15 +1091,17 @@
\setcounter{totalnumber}{0}%
\setcounter{dbltopnumber}{0}%
\def\dblfloatpagefraction{0.5}%
+ \global\renewcommand\thehv@tempCNTfigA{xyz}%
+ \global\renewcommand\thehv@tempCNTfigB{xyz}%
\begin{\hv@floatType*}[!t]
\global\savebox{\hvObjectBox}{\ifhv@useOBox\usebox{\hvOBox}\else\hv@floatObject\fi}%
\clipbox*{0 -\depth{} \hv@leftPageObjectWidth{} \height}{\usebox\hvObjectBox}%
\ifx\hv@label\@empty
\else
\ifx\hv@floatType\hv@figure
- \refstepcounter{hv@tempCNTfigA}%
+ \global\refstepcounter{hv@tempCNTfigA}%
\else
- \refstepcounter{hv@tempCNTtabA}% before caption
+ \global\refstepcounter{hv@tempCNTtabA}% before caption
\fi
\label{\hv@label}%
\fi
diff --git a/macros/latex/contrib/siunitx/CHANGELOG.md b/macros/latex/contrib/siunitx/CHANGELOG.md
index a465aea145..364058db97 100644
--- a/macros/latex/contrib/siunitx/CHANGELOG.md
+++ b/macros/latex/contrib/siunitx/CHANGELOG.md
@@ -7,6 +7,13 @@ Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to
## [Unreleased]
+## [v3.0.12]
+
+### Fixed
+- Modify warning message (fixes #476)
+- Rounding zero values to a fixed number of places (issue #477)
+- Remove stray debug code in symbol allocation (issue #478)
+
## [v3.0.11]
### Changed
@@ -1361,7 +1368,8 @@ Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to
### Added
- First public testing release (as `si`)
-[Unreleased]: https://github.com/josephwright/siunitx/compare/v3.0.11...HEAD
+[Unreleased]: https://github.com/josephwright/siunitx/compare/v3.0.12...HEAD
+[v3.0.12]: https://github.com/josephwright/siunitx/compare/v3.0.11...v3.0.12
[v3.0.11]: https://github.com/josephwright/siunitx/compare/v3.0.10...v3.0.11
[v3.0.10]: https://github.com/josephwright/siunitx/compare/v3.0.9...v3.0.10
[v3.0.9]: https://github.com/josephwright/siunitx/compare/v3.0.8...v3.0.9
diff --git a/macros/latex/contrib/siunitx/siunitx-code.pdf b/macros/latex/contrib/siunitx/siunitx-code.pdf
index d4f36b226f..b62b22632d 100644
--- a/macros/latex/contrib/siunitx/siunitx-code.pdf
+++ b/macros/latex/contrib/siunitx/siunitx-code.pdf
Binary files differ
diff --git a/macros/latex/contrib/siunitx/siunitx-emulation.dtx b/macros/latex/contrib/siunitx/siunitx-emulation.dtx
index 9d0133affb..8e11abda62 100644
--- a/macros/latex/contrib/siunitx/siunitx-emulation.dtx
+++ b/macros/latex/contrib/siunitx/siunitx-emulation.dtx
@@ -1025,8 +1025,8 @@
Unit~macro~#1~has~been~deprecated~in~this~release. \\ \\
The~BIPM~have~removed~this~unit~from~the~SI~Brochure.~
You~should~define~it~yourself~using~\token_to_str:N \DeclareSIUnit\ %
- in~your~source. The~current~definition~is\\ \\
- \token_to_str:N \DeclareSIUnit \{ #2 \}
+ in~your~source.~The~current~definition~is\\ \\
+ \token_to_str:N \DeclareSIUnit #1 \{ #2 \}
}
\cs_gset_protected:Npn \@@_tmp:w #1#2
{
diff --git a/macros/latex/contrib/siunitx/siunitx-number.dtx b/macros/latex/contrib/siunitx/siunitx-number.dtx
index b304a573c9..2dfa66374c 100644
--- a/macros/latex/contrib/siunitx/siunitx-number.dtx
+++ b/macros/latex/contrib/siunitx/siunitx-number.dtx
@@ -1691,7 +1691,8 @@
%
% \begin{macro}{\siunitx_number_process:NN}
% \begin{macro}{\@@_process:nnnnnnnNN}
-% A top-level interface for the processing tools.
+% A top-level interface for the processing tools. Rounding happens in all
+% cases, but exponents are only processed if the value is not $0$.
% \begin{macrocode}
\cs_new_protected:Npn \siunitx_number_process:NN #1#2
{
@@ -1707,12 +1708,13 @@
}
\cs_new_protected:Npn \@@_process:nnnnnnnNN #1#2#3#4#5#6#7#8#9
{
- \bool_lazy_and:nnF
+ \bool_lazy_and:nnTF
{ \str_if_eq_p:nn {#3} { 0 } }
{
\str_if_eq_p:ee
{ \exp_not:n {#4} } { \prg_replicate:nn { \tl_count:n {#4} } { 0 } }
}
+ { \@@_round:NN #8 #9 }
{
\@@_exponent:NN #8 #9
\@@_round:NN #9 #9
@@ -2547,15 +2549,27 @@
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}[EXP]{\@@_round_figures:nnnnnnn}
+% \begin{macro}[EXP]{\@@_round_figures:nnnnnnn, \@@_round_figures_aux:nnnnnnn}
% \begin{macro}[EXP]{\@@_round_figures_count:nnN}
% \begin{macro}[EXP]{\@@_round_figures_count:nnnN}
-% Rounding to a fixed number of significant figures starts by checking that
+% Rounding to figures only makes sense if the number is not $0$, so we start
+% by filtering out that case. We then check that
% there is no uncertainty, and that the number of figures requested is
% positive: if not, the result is always fixed at zero.
% \begin{macrocode}
\cs_new:Npn \@@_round_figures:nnnnnnn #1#2#3#4#5#6#7
{
+ \bool_lazy_and:nnTF
+ { \str_if_eq_p:nn {#3} { 0 } }
+ {
+ \str_if_eq_p:ee
+ { \exp_not:n {#4} } { \prg_replicate:nn { \tl_count:n {#4} } { 0 } }
+ }
+ { \exp_not:n { {#1} {#2} {#3} {#4} {#5} {#6} {#7} } }
+ { \@@_round_figures_aux:nnnnnnn {#1} {#2} {#3} {#4} {#5} {#6} {#7} }
+ }
+\cs_new:Npn \@@_round_figures_aux:nnnnnnn #1#2#3#4#5#6#7
+ {
\tl_if_blank:nTF {#5}
{
\int_compare:nNnTF \l_@@_round_precision_int > 0
diff --git a/macros/latex/contrib/siunitx/siunitx-symbol.dtx b/macros/latex/contrib/siunitx/siunitx-symbol.dtx
index 251d257c4b..6c7154d751 100644
--- a/macros/latex/contrib/siunitx/siunitx-symbol.dtx
+++ b/macros/latex/contrib/siunitx/siunitx-symbol.dtx
@@ -149,7 +149,6 @@
\prg_return_true:
}
{
- \show\l_@@_tmpa_tl \show\l_@@_tmpb_tl
\group_end:
\prg_return_false:
}
diff --git a/macros/latex/contrib/siunitx/siunitx.dtx b/macros/latex/contrib/siunitx/siunitx.dtx
index 03d06b4cb3..53cfbd8426 100644
--- a/macros/latex/contrib/siunitx/siunitx.dtx
+++ b/macros/latex/contrib/siunitx/siunitx.dtx
@@ -121,7 +121,7 @@
%
% Identify the package and give the over all version information.
% \begin{macrocode}
-\ProvidesExplPackage {siunitx} {2021-06-07} {3.0.11}
+\ProvidesExplPackage {siunitx} {2021-06-09} {3.0.12}
{A comprehensive (SI) units package}
% \end{macrocode}
%
diff --git a/macros/latex/contrib/siunitx/siunitx.pdf b/macros/latex/contrib/siunitx/siunitx.pdf
index 62115e1004..36c97918d0 100644
--- a/macros/latex/contrib/siunitx/siunitx.pdf
+++ b/macros/latex/contrib/siunitx/siunitx.pdf
Binary files differ
diff --git a/macros/latex/contrib/siunitx/siunitx.tex b/macros/latex/contrib/siunitx/siunitx.tex
index 360a395e6f..28eaa37b2c 100644
--- a/macros/latex/contrib/siunitx/siunitx.tex
+++ b/macros/latex/contrib/siunitx/siunitx.tex
@@ -3044,7 +3044,7 @@ adjust the appearance of litres: both \enquote{\unit{l}} and \enquote{\unit{L}}
are commonly used. The recommended approach to adjustment is to re-declare
the \cs{litre} macro, as \cs{liter} will follow automatically.
\begin{LaTeXdemo}[code only]
- \DeclareSIUnit\liter{l}
+ \DeclareSIUnit\litre{l}
\end{LaTeXdemo}
\subsection{Ensuring text or math output%
diff --git a/macros/luatex/generic/minim-math/EUPL-1.2-EN.txt b/macros/luatex/generic/minim-math/EUPL-1.2-EN.txt
new file mode 100644
index 0000000000..4153cd3775
--- /dev/null
+++ b/macros/luatex/generic/minim-math/EUPL-1.2-EN.txt
@@ -0,0 +1,287 @@
+ EUROPEAN UNION PUBLIC LICENCE v. 1.2
+ EUPL © the European Union 2007, 2016
+
+This European Union Public Licence (the ‘EUPL’) applies to the Work (as defined
+below) which is provided under the terms of this Licence. Any use of the Work,
+other than as authorised under this Licence is prohibited (to the extent such
+use is covered by a right of the copyright holder of the Work).
+
+The Work is provided under the terms of this Licence when the Licensor (as
+defined below) has placed the following notice immediately following the
+copyright notice for the Work:
+
+ Licensed under the EUPL
+
+or has expressed by any other means his willingness to license under the EUPL.
+
+1. Definitions
+
+In this Licence, the following terms have the following meaning:
+
+- ‘The Licence’: this Licence.
+
+- ‘The Original Work’: the work or software distributed or communicated by the
+ Licensor under this Licence, available as Source Code and also as Executable
+ Code as the case may be.
+
+- ‘Derivative Works’: the works or software that could be created by the
+ Licensee, based upon the Original Work or modifications thereof. This Licence
+ does not define the extent of modification or dependence on the Original Work
+ required in order to classify a work as a Derivative Work; this extent is
+ determined by copyright law applicable in the country mentioned in Article 15.
+
+- ‘The Work’: the Original Work or its Derivative Works.
+
+- ‘The Source Code’: the human-readable form of the Work which is the most
+ convenient for people to study and modify.
+
+- ‘The Executable Code’: any code which has generally been compiled and which is
+ meant to be interpreted by a computer as a program.
+
+- ‘The Licensor’: the natural or legal person that distributes or communicates
+ the Work under the Licence.
+
+- ‘Contributor(s)’: any natural or legal person who modifies the Work under the
+ Licence, or otherwise contributes to the creation of a Derivative Work.
+
+- ‘The Licensee’ or ‘You’: any natural or legal person who makes any usage of
+ the Work under the terms of the Licence.
+
+- ‘Distribution’ or ‘Communication’: any act of selling, giving, lending,
+ renting, distributing, communicating, transmitting, or otherwise making
+ available, online or offline, copies of the Work or providing access to its
+ essential functionalities at the disposal of any other natural or legal
+ person.
+
+2. Scope of the rights granted by the Licence
+
+The Licensor hereby grants You a worldwide, royalty-free, non-exclusive,
+sublicensable licence to do the following, for the duration of copyright vested
+in the Original Work:
+
+- use the Work in any circumstance and for all usage,
+- reproduce the Work,
+- modify the Work, and make Derivative Works based upon the Work,
+- communicate to the public, including the right to make available or display
+ the Work or copies thereof to the public and perform publicly, as the case may
+ be, the Work,
+- distribute the Work or copies thereof,
+- lend and rent the Work or copies thereof,
+- sublicense rights in the Work or copies thereof.
+
+Those rights can be exercised on any media, supports and formats, whether now
+known or later invented, as far as the applicable law permits so.
+
+In the countries where moral rights apply, the Licensor waives his right to
+exercise his moral right to the extent allowed by law in order to make effective
+the licence of the economic rights here above listed.
+
+The Licensor grants to the Licensee royalty-free, non-exclusive usage rights to
+any patents held by the Licensor, to the extent necessary to make use of the
+rights granted on the Work under this Licence.
+
+3. Communication of the Source Code
+
+The Licensor may provide the Work either in its Source Code form, or as
+Executable Code. If the Work is provided as Executable Code, the Licensor
+provides in addition a machine-readable copy of the Source Code of the Work
+along with each copy of the Work that the Licensor distributes or indicates, in
+a notice following the copyright notice attached to the Work, a repository where
+the Source Code is easily and freely accessible for as long as the Licensor
+continues to distribute or communicate the Work.
+
+4. Limitations on copyright
+
+Nothing in this Licence is intended to deprive the Licensee of the benefits from
+any exception or limitation to the exclusive rights of the rights owners in the
+Work, of the exhaustion of those rights or of other applicable limitations
+thereto.
+
+5. Obligations of the Licensee
+
+The grant of the rights mentioned above is subject to some restrictions and
+obligations imposed on the Licensee. Those obligations are the following:
+
+Attribution right: The Licensee shall keep intact all copyright, patent or
+trademarks notices and all notices that refer to the Licence and to the
+disclaimer of warranties. The Licensee must include a copy of such notices and a
+copy of the Licence with every copy of the Work he/she distributes or
+communicates. The Licensee must cause any Derivative Work to carry prominent
+notices stating that the Work has been modified and the date of modification.
+
+Copyleft clause: If the Licensee distributes or communicates copies of the
+Original Works or Derivative Works, this Distribution or Communication will be
+done under the terms of this Licence or of a later version of this Licence
+unless the Original Work is expressly distributed only under this version of the
+Licence — for example by communicating ‘EUPL v. 1.2 only’. The Licensee
+(becoming Licensor) cannot offer or impose any additional terms or conditions on
+the Work or Derivative Work that alter or restrict the terms of the Licence.
+
+Compatibility clause: If the Licensee Distributes or Communicates Derivative
+Works or copies thereof based upon both the Work and another work licensed under
+a Compatible Licence, this Distribution or Communication can be done under the
+terms of this Compatible Licence. For the sake of this clause, ‘Compatible
+Licence’ refers to the licences listed in the appendix attached to this Licence.
+Should the Licensee's obligations under the Compatible Licence conflict with
+his/her obligations under this Licence, the obligations of the Compatible
+Licence shall prevail.
+
+Provision of Source Code: When distributing or communicating copies of the Work,
+the Licensee will provide a machine-readable copy of the Source Code or indicate
+a repository where this Source will be easily and freely available for as long
+as the Licensee continues to distribute or communicate the Work.
+
+Legal Protection: This Licence does not grant permission to use the trade names,
+trademarks, service marks, or names of the Licensor, except as required for
+reasonable and customary use in describing the origin of the Work and
+reproducing the content of the copyright notice.
+
+6. Chain of Authorship
+
+The original Licensor warrants that the copyright in the Original Work granted
+hereunder is owned by him/her or licensed to him/her and that he/she has the
+power and authority to grant the Licence.
+
+Each Contributor warrants that the copyright in the modifications he/she brings
+to the Work are owned by him/her or licensed to him/her and that he/she has the
+power and authority to grant the Licence.
+
+Each time You accept the Licence, the original Licensor and subsequent
+Contributors grant You a licence to their contributions to the Work, under the
+terms of this Licence.
+
+7. Disclaimer of Warranty
+
+The Work is a work in progress, which is continuously improved by numerous
+Contributors. It is not a finished work and may therefore contain defects or
+‘bugs’ inherent to this type of development.
+
+For the above reason, the Work is provided under the Licence on an ‘as is’ basis
+and without warranties of any kind concerning the Work, including without
+limitation merchantability, fitness for a particular purpose, absence of defects
+or errors, accuracy, non-infringement of intellectual property rights other than
+copyright as stated in Article 6 of this Licence.
+
+This disclaimer of warranty is an essential part of the Licence and a condition
+for the grant of any rights to the Work.
+
+8. Disclaimer of Liability
+
+Except in the cases of wilful misconduct or damages directly caused to natural
+persons, the Licensor will in no event be liable for any direct or indirect,
+material or moral, damages of any kind, arising out of the Licence or of the use
+of the Work, including without limitation, damages for loss of goodwill, work
+stoppage, computer failure or malfunction, loss of data or any commercial
+damage, even if the Licensor has been advised of the possibility of such damage.
+However, the Licensor will be liable under statutory product liability laws as
+far such laws apply to the Work.
+
+9. Additional agreements
+
+While distributing the Work, You may choose to conclude an additional agreement,
+defining obligations or services consistent with this Licence. However, if
+accepting obligations, You may act only on your own behalf and on your sole
+responsibility, not on behalf of the original Licensor or any other Contributor,
+and only if You agree to indemnify, defend, and hold each Contributor harmless
+for any liability incurred by, or claims asserted against such Contributor by
+the fact You have accepted any warranty or additional liability.
+
+10. Acceptance of the Licence
+
+The provisions of this Licence can be accepted by clicking on an icon ‘I agree’
+placed under the bottom of a window displaying the text of this Licence or by
+affirming consent in any other similar way, in accordance with the rules of
+applicable law. Clicking on that icon indicates your clear and irrevocable
+acceptance of this Licence and all of its terms and conditions.
+
+Similarly, you irrevocably accept this Licence and all of its terms and
+conditions by exercising any rights granted to You by Article 2 of this Licence,
+such as the use of the Work, the creation by You of a Derivative Work or the
+Distribution or Communication by You of the Work or copies thereof.
+
+11. Information to the public
+
+In case of any Distribution or Communication of the Work by means of electronic
+communication by You (for example, by offering to download the Work from a
+remote location) the distribution channel or media (for example, a website) must
+at least provide to the public the information requested by the applicable law
+regarding the Licensor, the Licence and the way it may be accessible, concluded,
+stored and reproduced by the Licensee.
+
+12. Termination of the Licence
+
+The Licence and the rights granted hereunder will terminate automatically upon
+any breach by the Licensee of the terms of the Licence.
+
+Such a termination will not terminate the licences of any person who has
+received the Work from the Licensee under the Licence, provided such persons
+remain in full compliance with the Licence.
+
+13. Miscellaneous
+
+Without prejudice of Article 9 above, the Licence represents the complete
+agreement between the Parties as to the Work.
+
+If any provision of the Licence is invalid or unenforceable under applicable
+law, this will not affect the validity or enforceability of the Licence as a
+whole. Such provision will be construed or reformed so as necessary to make it
+valid and enforceable.
+
+The European Commission may publish other linguistic versions or new versions of
+this Licence or updated versions of the Appendix, so far this is required and
+reasonable, without reducing the scope of the rights granted by the Licence. New
+versions of the Licence will be published with a unique version number.
+
+All linguistic versions of this Licence, approved by the European Commission,
+have identical value. Parties can take advantage of the linguistic version of
+their choice.
+
+14. Jurisdiction
+
+Without prejudice to specific agreement between parties,
+
+- any litigation resulting from the interpretation of this License, arising
+ between the European Union institutions, bodies, offices or agencies, as a
+ Licensor, and any Licensee, will be subject to the jurisdiction of the Court
+ of Justice of the European Union, as laid down in article 272 of the Treaty on
+ the Functioning of the European Union,
+
+- any litigation arising between other parties and resulting from the
+ interpretation of this License, will be subject to the exclusive jurisdiction
+ of the competent court where the Licensor resides or conducts its primary
+ business.
+
+15. Applicable Law
+
+Without prejudice to specific agreement between parties,
+
+- this Licence shall be governed by the law of the European Union Member State
+ where the Licensor has his seat, resides or has his registered office,
+
+- this licence shall be governed by Belgian law if the Licensor has no seat,
+ residence or registered office inside a European Union Member State.
+
+Appendix
+
+‘Compatible Licences’ according to Article 5 EUPL are:
+
+- GNU General Public License (GPL) v. 2, v. 3
+- GNU Affero General Public License (AGPL) v. 3
+- Open Software License (OSL) v. 2.1, v. 3.0
+- Eclipse Public License (EPL) v. 1.0
+- CeCILL v. 2.0, v. 2.1
+- Mozilla Public Licence (MPL) v. 2
+- GNU Lesser General Public Licence (LGPL) v. 2.1, v. 3
+- Creative Commons Attribution-ShareAlike v. 3.0 Unported (CC BY-SA 3.0) for
+ works other than software
+- European Union Public Licence (EUPL) v. 1.1, v. 1.2
+- Québec Free and Open-Source Licence — Reciprocity (LiLiQ-R) or Strong
+ Reciprocity (LiLiQ-R+).
+
+The European Commission may update this Appendix to later versions of the above
+licences without producing a new version of the EUPL, as long as they provide
+the rights granted in Article 2 of this Licence and protect the covered Source
+Code from exclusive appropriation.
+
+All other changes or additions to this Appendix require the production of a new
+EUPL version.
diff --git a/macros/luatex/generic/minim-math/README b/macros/luatex/generic/minim-math/README
new file mode 100644
index 0000000000..b463a8bad3
--- /dev/null
+++ b/macros/luatex/generic/minim-math/README
@@ -0,0 +1,27 @@
+Version: 2021/1.0
+
+SUMMARY
+
+This package gives a simple and higly-configurable way of using unicode and
+OpenType mathematics with plain LuaTeX, making use of most of the latter
+engine’s new capabilities in mathematical typesetting. Also included are
+proper settings and definitions for nearly all unicode mathematical
+characters.
+
+
+DOCUMENTATION
+
+In order to obtain the typeset manual of this package, simply say:
+
+ luatex minim-math.doc
+
+
+COPYING
+
+(c) 2021 Esger Renkema
+
+These files may be distributed under the terms of the European Union Public
+Licence (EUPL) version 1.2 or later. A copy can be obtained at:
+
+https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+
diff --git a/macros/luatex/generic/minim-math/minim-math-table.lua b/macros/luatex/generic/minim-math/minim-math-table.lua
new file mode 100644
index 0000000000..3a12d1da99
--- /dev/null
+++ b/macros/luatex/generic/minim-math/minim-math-table.lua
@@ -0,0 +1,2507 @@
+-- vim: nowrap fo-=a
+return
+ { { code = 0x00021, char = '!', class = 'punct', cs = 'exclam' } -- exclamation mark
+ , { code = 0x00023, char = '#', class = 'ord', cs = 'octothorpe' } -- number sign
+ , { code = 0x00024, char = '$', class = 'ord', cs = 'mathdollar' } -- dollar sign
+ , { code = 0x00025, char = '%', class = 'ord', cs = 'percent' } -- percent sign
+ , { code = 0x00026, char = '&', class = 'ord', cs = 'ampersand' } -- ampersand
+ , { code = 0x00028, char = '(', class = 'open', cs = 'lparen' } -- left parenthesis
+ , { code = 0x00029, char = ')', class = 'close', cs = 'rparen' } -- right parenthesis
+ , { code = 0x0002B, char = '+', class = 'bin', cs = 'plus' } -- plus sign
+ , { code = 0x0002C, char = ',', class = 'punct', cs = 'comma' } -- comma
+ , { code = 0x0002E, char = '.', class = 'ord', cs = 'ldot' } -- full stop
+ , { code = 0x0002F, char = '/', class = 'ord', cs = 'mathslash' } -- solidus
+ , { code = 0x00030, char = '0', class = 'var', alphabet = 'digits' } -- digit zero
+ , { code = 0x00031, char = '1', class = 'var', alphabet = 'digits' } -- digit one
+ , { code = 0x00032, char = '2', class = 'var', alphabet = 'digits' } -- digit two
+ , { code = 0x00033, char = '3', class = 'var', alphabet = 'digits' } -- digit three
+ , { code = 0x00034, char = '4', class = 'var', alphabet = 'digits' } -- digit four
+ , { code = 0x00035, char = '5', class = 'var', alphabet = 'digits' } -- digit five
+ , { code = 0x00036, char = '6', class = 'var', alphabet = 'digits' } -- digit six
+ , { code = 0x00037, char = '7', class = 'var', alphabet = 'digits' } -- digit seven
+ , { code = 0x00038, char = '8', class = 'var', alphabet = 'digits' } -- digit eight
+ , { code = 0x00039, char = '9', class = 'var', alphabet = 'digits' } -- digit nine
+ , { code = 0x0003A, char = ':', class = 'punct', cs = 'colon' } -- colon
+ , { code = 0x0003B, char = ';', class = 'punct', cs = 'semicolon' } -- semicolon
+ , { code = 0x0003C, char = '<', class = 'rel', cs = 'less' } -- less-than sign
+ , { code = 0x0003D, char = '=', class = 'rel', cs = 'equal' } -- equals sign
+ , { code = 0x0003E, char = '>', class = 'rel', cs = 'greater' } -- greater-than sign
+ , { code = 0x0003F, char = '?', class = 'ord', cs = 'question' } -- question mark
+ , { code = 0x00040, char = '@', class = 'ord', cs = 'atsign' } -- commercial at
+ , { code = 0x00041, char = 'A', class = 'var', alphabet = 'Latin' } -- latin capital letter a
+ , { code = 0x00042, char = 'B', class = 'var', alphabet = 'Latin' } -- latin capital letter b
+ , { code = 0x00043, char = 'C', class = 'var', alphabet = 'Latin' } -- latin capital letter c
+ , { code = 0x00044, char = 'D', class = 'var', alphabet = 'Latin' } -- latin capital letter d
+ , { code = 0x00045, char = 'E', class = 'var', alphabet = 'Latin' } -- latin capital letter e
+ , { code = 0x00046, char = 'F', class = 'var', alphabet = 'Latin' } -- latin capital letter f
+ , { code = 0x00047, char = 'G', class = 'var', alphabet = 'Latin' } -- latin capital letter g
+ , { code = 0x00048, char = 'H', class = 'var', alphabet = 'Latin' } -- latin capital letter h
+ , { code = 0x00049, char = 'I', class = 'var', alphabet = 'Latin' } -- latin capital letter i
+ , { code = 0x0004A, char = 'J', class = 'var', alphabet = 'Latin' } -- latin capital letter j
+ , { code = 0x0004B, char = 'K', class = 'var', alphabet = 'Latin' } -- latin capital letter k
+ , { code = 0x0004C, char = 'L', class = 'var', alphabet = 'Latin' } -- latin capital letter l
+ , { code = 0x0004D, char = 'M', class = 'var', alphabet = 'Latin' } -- latin capital letter m
+ , { code = 0x0004E, char = 'N', class = 'var', alphabet = 'Latin' } -- latin capital letter n
+ , { code = 0x0004F, char = 'O', class = 'var', alphabet = 'Latin' } -- latin capital letter o
+ , { code = 0x00050, char = 'P', class = 'var', alphabet = 'Latin' } -- latin capital letter p
+ , { code = 0x00051, char = 'Q', class = 'var', alphabet = 'Latin' } -- latin capital letter q
+ , { code = 0x00052, char = 'R', class = 'var', alphabet = 'Latin' } -- latin capital letter r
+ , { code = 0x00053, char = 'S', class = 'var', alphabet = 'Latin' } -- latin capital letter s
+ , { code = 0x00054, char = 'T', class = 'var', alphabet = 'Latin' } -- latin capital letter t
+ , { code = 0x00055, char = 'U', class = 'var', alphabet = 'Latin' } -- latin capital letter u
+ , { code = 0x00056, char = 'V', class = 'var', alphabet = 'Latin' } -- latin capital letter v
+ , { code = 0x00057, char = 'W', class = 'var', alphabet = 'Latin' } -- latin capital letter w
+ , { code = 0x00058, char = 'X', class = 'var', alphabet = 'Latin' } -- latin capital letter x
+ , { code = 0x00059, char = 'Y', class = 'var', alphabet = 'Latin' } -- latin capital letter y
+ , { code = 0x0005A, char = 'Z', class = 'var', alphabet = 'Latin' } -- latin capital letter z
+ , { code = 0x00061, char = 'a', class = 'var', alphabet = 'latin' } -- latin small letter a
+ , { code = 0x00062, char = 'b', class = 'var', alphabet = 'latin' } -- latin small letter b
+ , { code = 0x00063, char = 'c', class = 'var', alphabet = 'latin' } -- latin small letter c
+ , { code = 0x00064, char = 'd', class = 'var', alphabet = 'latin' } -- latin small letter d
+ , { code = 0x00065, char = 'e', class = 'var', alphabet = 'latin' } -- latin small letter e
+ , { code = 0x00066, char = 'f', class = 'var', alphabet = 'latin' } -- latin small letter f
+ , { code = 0x00067, char = 'g', class = 'var', alphabet = 'latin' } -- latin small letter g
+ , { code = 0x00068, char = 'h', class = 'var', alphabet = 'latin' } -- latin small letter h
+ , { code = 0x00069, char = 'i', class = 'var', alphabet = 'latin' } -- latin small letter i
+ , { code = 0x0006A, char = 'j', class = 'var', alphabet = 'latin' } -- latin small letter j
+ , { code = 0x0006B, char = 'k', class = 'var', alphabet = 'latin' } -- latin small letter k
+ , { code = 0x0006C, char = 'l', class = 'var', alphabet = 'latin' } -- latin small letter l
+ , { code = 0x0006D, char = 'm', class = 'var', alphabet = 'latin' } -- latin small letter m
+ , { code = 0x0006E, char = 'n', class = 'var', alphabet = 'latin' } -- latin small letter n
+ , { code = 0x0006F, char = 'o', class = 'var', alphabet = 'latin' } -- latin small letter o
+ , { code = 0x00070, char = 'p', class = 'var', alphabet = 'latin' } -- latin small letter p
+ , { code = 0x00071, char = 'q', class = 'var', alphabet = 'latin' } -- latin small letter q
+ , { code = 0x00072, char = 'r', class = 'var', alphabet = 'latin' } -- latin small letter r
+ , { code = 0x00073, char = 's', class = 'var', alphabet = 'latin' } -- latin small letter s
+ , { code = 0x00074, char = 't', class = 'var', alphabet = 'latin' } -- latin small letter t
+ , { code = 0x00075, char = 'u', class = 'var', alphabet = 'latin' } -- latin small letter u
+ , { code = 0x00076, char = 'v', class = 'var', alphabet = 'latin' } -- latin small letter v
+ , { code = 0x00077, char = 'w', class = 'var', alphabet = 'latin' } -- latin small letter w
+ , { code = 0x00078, char = 'x', class = 'var', alphabet = 'latin' } -- latin small letter x
+ , { code = 0x00079, char = 'y', class = 'var', alphabet = 'latin' } -- latin small letter y
+ , { code = 0x0007A, char = 'z', class = 'var', alphabet = 'latin' } -- latin small letter z
+ , { code = 0x0005B, char = '[', class = 'open', cs = 'lbrack' } -- left square bracket
+ , { code = 0x0005C, char = '\\', class = 'ord', cs = 'mathbackslash' } -- reverse solidus
+ , { code = 0x0005D, char = ']', class = 'close', cs = 'rbrack' } -- right square bracket
+ , { code = 0x0007B, char = '{', class = 'open', cs = 'lbrace' } -- left curly bracket
+ , { code = 0x0007C, char = '|', class = 'fence', cs = 'vert' } -- vertical line
+ , { code = 0x0007D, char = '}', class = 'close', cs = 'rbrace' } -- right curly bracket
+ , { code = 0x000A3, char = '£', class = 'ord', cs = 'sterling' } -- pound sign
+ , { code = 0x000A5, char = '¥', class = 'ord', cs = 'yen' } -- yen sign
+ , { code = 0x000AC, char = '¬', class = 'ord', cs = 'neg' } -- not sign
+ , { code = 0x000B1, char = '±', class = 'bin', cs = 'pm' } -- plus-minus sign
+ , { code = 0x000B7, char = '·', class = 'punct', cs = 'cdotp' } -- middle dot
+ , { code = 0x000D7, char = '×', class = 'bin', cs = 'times' } -- multiplication sign
+ , { code = 0x000F0, char = 'ð', class = 'ord', cs = 'matheth' } -- latin small letter eth
+ , { code = 0x000F7, char = '÷', class = 'bin', cs = 'div' } -- division sign
+ , { code = 0x001B5, char = 'Ƶ', class = 'ord', cs = 'Zbar' } -- latin capital letter z with stroke
+ , { code = 0x00300, char = ' ̀', class = 'accent', cs = 'grave' } -- combining grave accent
+ , { code = 0x00301, char = ' ́', class = 'accent', cs = 'acute' } -- combining acute accent
+ , { code = 0x00302, char = ' ̂', class = 'accent', cs = 'hat' } -- combining circumflex accent
+ , { code = 0x00303, char = ' ̃', class = 'accent', cs = 'tilde' } -- combining tilde
+ , { code = 0x00304, char = ' ̄', class = 'accent', cs = 'bar' } -- combining macron
+ , { code = 0x00305, char = ' ̅', class = 'accent', cs = 'overbar' } -- combining overline
+ , { code = 0x00306, char = ' ̆', class = 'accent', cs = 'breve' } -- combining breve
+ , { code = 0x00307, char = ' ̇', class = 'accent', cs = 'dot' } -- combining dot above
+ , { code = 0x00308, char = ' ̈', class = 'accent', cs = 'ddot' } -- combining diaeresis
+ , { code = 0x00309, char = ' ̉', class = 'accent', cs = 'ovhook' } -- combining hook above
+ , { code = 0x0030A, char = ' ̊', class = 'accent', cs = 'ocirc' } -- combining ring above
+ , { code = 0x0030C, char = ' ̌', class = 'accent', cs = 'check' } -- combining caron
+ , { code = 0x00310, char = ' ̐', class = 'accent', cs = 'candra' } -- combining candrabindu
+ , { code = 0x00312, char = ' ̒', class = 'accent', cs = 'oturnedcomma' } -- combining turned comma above
+ , { code = 0x00315, char = ' ̕', class = 'accent', cs = 'ocommatopright' } -- combining comma above right
+ , { code = 0x0031A, char = ' ̚', class = 'accent', cs = 'droang' } -- combining left angle above
+ , { code = 0x00330, char = ' ̰', class = 'botaccent', cs = 'wideutilde' } -- combining tilde below
+ , { code = 0x00331, char = ' ̱', class = 'botaccent', cs = 'underbar' } -- combining macron below
+ , { code = 0x00338, char = ' ̸', class = 'overlay', cs = 'not' } -- combining long solidus overlay
+ , { code = 0x00391, char = 'Α', class = 'var', cs = 'Alpha', alphabet = 'Greek' } -- greek capital letter alpha
+ , { code = 0x00392, char = 'Β', class = 'var', cs = 'Beta', alphabet = 'Greek' } -- greek capital letter beta
+ , { code = 0x00393, char = 'Γ', class = 'var', cs = 'Gamma', alphabet = 'Greek' } -- greek capital letter gamma
+ , { code = 0x00394, char = 'Δ', class = 'var', cs = 'Delta', alphabet = 'Greek' } -- greek capital letter delta
+ , { code = 0x00395, char = 'Ε', class = 'var', cs = 'Epsilon', alphabet = 'Greek' } -- greek capital letter epsilon
+ , { code = 0x00396, char = 'Ζ', class = 'var', cs = 'Zeta', alphabet = 'Greek' } -- greek capital letter zeta
+ , { code = 0x00397, char = 'Η', class = 'var', cs = 'Eta', alphabet = 'Greek' } -- greek capital letter eta
+ , { code = 0x00398, char = 'Θ', class = 'var', cs = 'Theta', alphabet = 'Greek' } -- greek capital letter theta
+ , { code = 0x00399, char = 'Ι', class = 'var', cs = 'Iota', alphabet = 'Greek' } -- greek capital letter iota
+ , { code = 0x0039A, char = 'Κ', class = 'var', cs = 'Kappa', alphabet = 'Greek' } -- greek capital letter kappa
+ , { code = 0x0039B, char = 'Λ', class = 'var', cs = 'Lambda', alphabet = 'Greek' } -- greek capital letter lamda
+ , { code = 0x0039C, char = 'Μ', class = 'var', cs = 'Mu', alphabet = 'Greek' } -- greek capital letter mu
+ , { code = 0x0039D, char = 'Ν', class = 'var', cs = 'Nu', alphabet = 'Greek' } -- greek capital letter nu
+ , { code = 0x0039E, char = 'Ξ', class = 'var', cs = 'Xi', alphabet = 'Greek' } -- greek capital letter xi
+ , { code = 0x0039F, char = 'Ο', class = 'var', cs = 'Omicron', alphabet = 'Greek' } -- greek capital letter omicron
+ , { code = 0x003A0, char = 'Π', class = 'var', cs = 'Pi', alphabet = 'Greek' } -- greek capital letter pi
+ , { code = 0x003A1, char = 'Ρ', class = 'var', cs = 'Rho', alphabet = 'Greek' } -- greek capital letter rho
+ , { code = 0x003A3, char = 'Σ', class = 'var', cs = 'Sigma', alphabet = 'Greek' } -- greek capital letter sigma
+ , { code = 0x003A4, char = 'Τ', class = 'var', cs = 'Tau', alphabet = 'Greek' } -- greek capital letter tau
+ , { code = 0x003A5, char = 'Υ', class = 'var', cs = 'Upsilon', alphabet = 'Greek' } -- greek capital letter upsilon
+ , { code = 0x003A6, char = 'Φ', class = 'var', cs = 'Phi', alphabet = 'Greek' } -- greek capital letter phi
+ , { code = 0x003A7, char = 'Χ', class = 'var', cs = 'Chi', alphabet = 'Greek' } -- greek capital letter chi
+ , { code = 0x003A8, char = 'Ψ', class = 'var', cs = 'Psi', alphabet = 'Greek' } -- greek capital letter psi
+ , { code = 0x003A9, char = 'Ω', class = 'var', cs = 'Omega', alphabet = 'Greek' } -- greek capital letter omega
+ , { code = 0x003B1, char = 'α', class = 'var', cs = 'alpha', alphabet = 'greek' } -- greek small letter alpha
+ , { code = 0x003B2, char = 'β', class = 'var', cs = 'beta', alphabet = 'greek' } -- greek small letter beta
+ , { code = 0x003B3, char = 'γ', class = 'var', cs = 'gamma', alphabet = 'greek' } -- greek small letter gamma
+ , { code = 0x003B4, char = 'δ', class = 'var', cs = 'delta', alphabet = 'greek' } -- greek small letter delta
+ , { code = 0x003B5, char = 'ε', class = 'var', cs = 'epsilon', alphabet = 'greek' } -- greek small letter epsilon
+ , { code = 0x003B6, char = 'ζ', class = 'var', cs = 'zeta', alphabet = 'greek' } -- greek small letter zeta
+ , { code = 0x003B7, char = 'η', class = 'var', cs = 'eta', alphabet = 'greek' } -- greek small letter eta
+ , { code = 0x003B8, char = 'θ', class = 'var', cs = 'theta', alphabet = 'greek' } -- greek small letter theta
+ , { code = 0x003B9, char = 'ι', class = 'var', cs = 'iota', alphabet = 'greek' } -- greek small letter iota
+ , { code = 0x003BA, char = 'κ', class = 'var', cs = 'kappa', alphabet = 'greek' } -- greek small letter kappa
+ , { code = 0x003BB, char = 'λ', class = 'var', cs = 'lambda', alphabet = 'greek' } -- greek small letter lamda
+ , { code = 0x003BC, char = 'μ', class = 'var', cs = 'mu', alphabet = 'greek' } -- greek small letter mu
+ , { code = 0x003BD, char = 'ν', class = 'var', cs = 'nu', alphabet = 'greek' } -- greek small letter nu
+ , { code = 0x003BE, char = 'ξ', class = 'var', cs = 'xi', alphabet = 'greek' } -- greek small letter xi
+ , { code = 0x003BF, char = 'ο', class = 'var', cs = 'omicron', alphabet = 'greek' } -- greek small letter omicron
+ , { code = 0x003C0, char = 'π', class = 'var', cs = 'pi', alphabet = 'greek' } -- greek small letter pi
+ , { code = 0x003C1, char = 'ρ', class = 'var', cs = 'rho', alphabet = 'greek' } -- greek small letter rho
+ , { code = 0x003C2, char = 'ς', class = 'var', cs = 'varsigma', alphabet = 'greek' } -- greek small letter final sigma
+ , { code = 0x003C3, char = 'σ', class = 'var', cs = 'sigma', alphabet = 'greek' } -- greek small letter sigma
+ , { code = 0x003C4, char = 'τ', class = 'var', cs = 'tau', alphabet = 'greek' } -- greek small letter tau
+ , { code = 0x003C5, char = 'υ', class = 'var', cs = 'upsilon', alphabet = 'greek' } -- greek small letter upsilon
+ , { code = 0x003C6, char = 'φ', class = 'var', cs = 'phi', alphabet = 'greek' } -- greek small letter phi
+ , { code = 0x003C7, char = 'χ', class = 'var', cs = 'chi', alphabet = 'greek' } -- greek small letter chi
+ , { code = 0x003C8, char = 'ψ', class = 'var', cs = 'psi', alphabet = 'greek' } -- greek small letter psi
+ , { code = 0x003C9, char = 'ω', class = 'var', cs = 'omega', alphabet = 'greek' } -- greek small letter omega
+ , { code = 0x003D0, char = 'ϐ', class = 'ord', cs = 'varbeta' } -- greek beta symbol
+ , { code = 0x003D1, char = 'ϑ', class = 'var', cs = 'vartheta', alphabet = 'greek' } -- greek theta symbol
+ , { code = 0x003D5, char = 'ϕ', class = 'var', cs = 'varphi', alphabet = 'greek' } -- greek phi symbol
+ , { code = 0x003D6, char = 'ϖ', class = 'var', cs = 'varpi', alphabet = 'greek' } -- greek pi symbol
+ , { code = 0x003D8, char = 'Ϙ', class = 'ord', cs = 'oldKoppa' } -- greek letter archaic koppa
+ , { code = 0x003D9, char = 'ϙ', class = 'ord', cs = 'oldkoppa' } -- greek small letter archaic koppa
+ , { code = 0x003DA, char = 'Ϛ', class = 'ord', cs = 'Stigma' } -- greek letter stigma
+ , { code = 0x003DB, char = 'ϛ', class = 'ord', cs = 'stigma' } -- greek small letter stigma
+ , { code = 0x003DC, char = 'Ϝ', class = 'ord', cs = 'Digamma' } -- greek letter digamma
+ , { code = 0x003DD, char = 'ϝ', class = 'ord', cs = 'digamma' } -- greek small letter digamma
+ , { code = 0x003DE, char = 'Ϟ', class = 'ord', cs = 'Koppa' } -- greek letter koppa
+ , { code = 0x003DF, char = 'ϟ', class = 'ord', cs = 'koppa' } -- greek small letter koppa
+ , { code = 0x003E0, char = 'Ϡ', class = 'ord', cs = 'Sampi' } -- greek letter sampi
+ , { code = 0x003E1, char = 'ϡ', class = 'ord', cs = 'sampi' } -- greek small letter sampi
+ , { code = 0x003F0, char = 'ϰ', class = 'var', cs = 'varkappa', alphabet = 'greek' } -- greek kappa symbol
+ , { code = 0x003F1, char = 'ϱ', class = 'var', cs = 'varrho', alphabet = 'greek' } -- greek rho symbol
+ , { code = 0x003F4, char = 'ϴ', class = 'var', cs = 'varTheta', alphabet = 'Greek' } -- greek capital theta symbol
+ , { code = 0x003F5, char = 'ϵ', class = 'var', cs = 'varepsilon', alphabet = 'greek' } -- greek lunate epsilon symbol
+ , { code = 0x003F6, char = '϶', class = 'ord', cs = 'backepsilon' } -- greek reversed lunate epsilon symbol
+ , { code = 0x02015, char = '―', class = 'ord', cs = 'horizbar' } -- horizontal bar
+ , { code = 0x02016, char = '‖', class = 'fence', cs = 'Vert' } -- double vertical line
+ , { code = 0x02017, char = '‗', class = 'ord', cs = 'twolowline' } -- double low line
+ , { code = 0x02020, char = '†', class = 'bin', cs = 'dagger' } -- dagger
+ , { code = 0x02021, char = '‡', class = 'bin', cs = 'ddagger' } -- double dagger
+ , { code = 0x02022, char = '•', class = 'bin', cs = 'smblkcircle' } -- bullet
+ , { code = 0x02025, char = '‥', class = 'ord', cs = 'enleadertwodots' } -- two dot leader
+ , { code = 0x02026, char = '…', class = 'ord', cs = 'unicodeellipsis' } -- horizontal ellipsis
+ , { code = 0x02032, char = '′', class = 'ord', cs = 'prime' } -- prime
+ , { code = 0x02033, char = '″', class = 'ord', cs = 'dprime' } -- double prime
+ , { code = 0x02034, char = '‴', class = 'ord', cs = 'trprime' } -- triple prime
+ , { code = 0x02035, char = '‵', class = 'ord', cs = 'backprime' } -- reversed prime
+ , { code = 0x02036, char = '‶', class = 'ord', cs = 'backdprime' } -- reversed double prime
+ , { code = 0x02037, char = '‷', class = 'ord', cs = 'backtrprime' } -- reversed triple prime
+ , { code = 0x02038, char = '‸', class = 'ord', cs = 'caretinsert' } -- caret
+ , { code = 0x0203C, char = '‼', class = 'ord', cs = 'Exclam' } -- double exclamation mark
+ , { code = 0x02040, char = '⁀', class = 'bin', cs = 'tieconcat' } -- char acter tie
+ , { code = 0x02043, char = '⁃', class = 'ord', cs = 'hyphenbullet' } -- hyphen bullet
+ , { code = 0x02044, char = '⁄', class = 'bin', cs = 'fracslash' } -- fraction slash
+ , { code = 0x02047, char = '⁇', class = 'ord', cs = 'Question' } -- double question mark
+ , { code = 0x02050, char = '⁐', class = 'rel', cs = 'closure' } -- close up
+ , { code = 0x02057, char = '⁗', class = 'ord', cs = 'qprime' } -- quadruple prime
+ , { code = 0x020AC, char = '€', class = 'ord', cs = 'euro' } -- euro sign
+ , { code = 0x020D0, char = ' ⃐', class = 'accent', cs = 'leftharpoonaccent' } -- combining left harpoon above
+ , { code = 0x020D1, char = ' ⃑', class = 'accent', cs = 'rightharpoonaccent' } -- combining right harpoon above
+ , { code = 0x020D2, char = ' ⃒', class = 'overlay', cs = 'vertoverlay' } -- combining long vertical line overlay
+ , { code = 0x020D6, char = ' ⃖', class = 'accent', cs = 'overleftarrow' } -- combining left arrow above
+ , { code = 0x020D7, char = ' ⃗', class = 'accent', cs = 'vec' } -- combining right arrow above
+ , { code = 0x020DB, char = ' ⃛', class = 'accent', cs = 'dddot' } -- combining three dots above
+ , { code = 0x020DC, char = ' ⃜', class = 'accent', cs = 'ddddot' } -- combining four dots above
+ , { code = 0x020DD, char = '⃝', class = 'ord', cs = 'enclosecircle' } -- combining enclosing circle
+ , { code = 0x020DE, char = '⃞', class = 'ord', cs = 'enclosesquare' } -- combining enclosing square
+ , { code = 0x020DF, char = '⃟', class = 'ord', cs = 'enclosediamond' } -- combining enclosing iamond
+ , { code = 0x020E1, char = ' ⃡', class = 'accent', cs = 'overleftrightarrow' } -- combining left right arrow above
+ , { code = 0x020E4, char = '⃤', class = 'ord', cs = 'enclosetriangle' } -- combining enclosing upward pointing triangle
+ , { code = 0x020E7, char = ' ⃧', class = 'accent', cs = 'annuity' } -- combining annuity symbol
+ , { code = 0x020E8, char = ' ⃨', class = 'botaccent', cs = 'threeunderdot' } -- combining triple underdot
+ , { code = 0x020E9, char = ' ⃩', class = 'accent', cs = 'widebridgeabove' } -- combining wide bridge above
+ , { code = 0x020EC, char = ' ⃬', class = 'botaccent', cs = 'underrightharpoondown' } -- combining rightwards harpoon with barb downwards
+ , { code = 0x020ED, char = ' ⃭', class = 'botaccent', cs = 'underleftharpoondown' } -- combining leftwards harpoon with barb downwards
+ , { code = 0x020EE, char = ' ⃮', class = 'botaccent', cs = 'underleftarrow' } -- combining left arrow below
+ , { code = 0x020EF, char = ' ⃯', class = 'botaccent', cs = 'underrightarrow' } -- combining right arrow below
+ , { code = 0x020F0, char = ' ⃰', class = 'accent', cs = 'asteraccent' } -- combining asterisk above
+ , { code = 0x02102, char = 'ℂ', class = 'ord', cs = 'BbbC', alphabet = 'blackboard' } -- double-struck capital c
+ , { code = 0x02107, char = 'ℇ', class = 'ord', cs = 'Eulerconst' } -- euler constant
+ , { code = 0x0210A, char = 'ℊ', class = 'ord', cs = 'mscrg', alphabet = 'script' } -- script small g
+ , { code = 0x0210B, char = 'ℋ', class = 'ord', cs = 'mscrH', alphabet = 'script' } -- script capital h
+ , { code = 0x0210C, char = 'ℌ', class = 'ord', cs = 'mfrakH' } -- black-letter capital h
+ , { code = 0x0210D, char = 'ℍ', class = 'ord', cs = 'BbbH', alphabet = 'blackboard' } -- double-struck capital h
+ , { code = 0x0210E, char = 'ℎ', class = 'ord', cs = 'mith' } -- planck constant
+ , { code = 0x0210F, char = 'ℏ', class = 'ord', cs = 'hbar' } -- planck constant over two pi
+ , { code = 0x02110, char = 'ℐ', class = 'ord', cs = 'mscrI', alphabet = 'script' } -- script capital i
+ , { code = 0x02111, char = 'ℑ', class = 'ord', cs = 'Im' } -- black-letter capital i
+ , { code = 0x02112, char = 'ℒ', class = 'ord', cs = 'mscrL', alphabet = 'script' } -- script capital l
+ , { code = 0x02113, char = 'ℓ', class = 'ord', cs = 'ell', alphabet = 'script' } -- script small l
+ , { code = 0x02115, char = 'ℕ', class = 'ord', cs = 'BbbN', alphabet = 'blackboard' } -- double-struck capital n
+ , { code = 0x02118, char = '℘', class = 'ord', cs = 'wp', } -- weierstrass elliptic function
+ , { code = 0x02119, char = 'ℙ', class = 'ord', cs = 'BbbP', alphabet = 'blackboard' } -- double-struck capital p
+ , { code = 0x0211A, char = 'ℚ', class = 'ord', cs = 'BbbQ', alphabet = 'blackboard' } -- double-struck capital q
+ , { code = 0x0211B, char = 'ℛ', class = 'ord', cs = 'mscrR', alphabet = 'script' } -- script capital r
+ , { code = 0x0211C, char = 'ℜ', class = 'ord', cs = 'Re' } -- black-letter capital r
+ , { code = 0x0211D, char = 'ℝ', class = 'ord', cs = 'BbbR', alphabet = 'blackboard' } -- double-struck capital r
+ , { code = 0x02124, char = 'ℤ', class = 'ord', cs = 'BbbZ', alphabet = 'blackboard' } -- double-struck capital z
+ , { code = 0x02127, char = '℧', class = 'ord', cs = 'mho' } -- inverted ohm sign
+ , { code = 0x02128, char = 'ℨ', class = 'ord', cs = 'mfrakZ' } -- black-letter capital z
+ , { code = 0x02129, char = '℩', class = 'ord', cs = 'turnediota' } -- turned greek small letter iota
+ , { code = 0x0212B, char = 'Å', class = 'ord', cs = 'Angstrom' } -- angstrom sign
+ , { code = 0x0212C, char = 'ℬ', class = 'ord', cs = 'mscrB', alphabet = 'script' } -- script capital b
+ , { code = 0x0212D, char = 'ℭ', class = 'ord', cs = 'mfrakC' } -- black-letter capital c
+ , { code = 0x0212F, char = 'ℯ', class = 'ord', cs = 'mscre', alphabet = 'script' } -- script small e
+ , { code = 0x02130, char = 'ℰ', class = 'ord', cs = 'mscrE', alphabet = 'script' } -- script capital e
+ , { code = 0x02131, char = 'ℱ', class = 'ord', cs = 'mscrF', alphabet = 'script' } -- script capital f
+ , { code = 0x02132, char = 'Ⅎ', class = 'ord', cs = 'Finv' } -- turned capital f
+ , { code = 0x02133, char = 'ℳ', class = 'ord', cs = 'mscrM', alphabet = 'script' } -- script capital m
+ , { code = 0x02134, char = 'ℴ', class = 'ord', cs = 'mscro', alphabet = 'script' } -- script small o
+ , { code = 0x02135, char = 'ℵ', class = 'ord', cs = 'aleph' } -- alef symbol
+ , { code = 0x02136, char = 'ℶ', class = 'ord', cs = 'beth' } -- bet symbol
+ , { code = 0x02137, char = 'ℷ', class = 'ord', cs = 'gimel' } -- gimel symbol
+ , { code = 0x02138, char = 'ℸ', class = 'ord', cs = 'daleth' } -- dalet symbol
+ , { code = 0x0213C, char = 'ℼ', class = 'ord', cs = 'Bbbpi', alphabet = 'blackboard' } -- double-struck small pi
+ , { code = 0x0213D, char = 'ℽ', class = 'ord', cs = 'Bbbgamma', alphabet = 'blackboard' } -- double-struck small gamma
+ , { code = 0x0213E, char = 'ℾ', class = 'ord', cs = 'BbbGamma', alphabet = 'blackboard' } -- double-struck capital gamma
+ , { code = 0x0213F, char = 'ℿ', class = 'ord', cs = 'BbbPi', alphabet = 'blackboard' } -- double-struck capital pi
+ , { code = 0x02140, char = '⅀', class = 'op', cs = 'Bbbsum', alphabet = 'blackboard' } -- double-struck n-ary summation
+ , { code = 0x02141, char = '⅁', class = 'ord', cs = 'Game' } -- turned sans-serif capital g
+ , { code = 0x02142, char = '⅂', class = 'ord', cs = 'sansLturned' } -- turned sans-serif capital l
+ , { code = 0x02143, char = '⅃', class = 'ord', cs = 'sansLmirrored' } -- reversed sans-serif capital l
+ , { code = 0x02144, char = '⅄', class = 'ord', cs = 'Yup' } -- turned sans-serif capital y
+ , { code = 0x02145, char = 'ⅅ', class = 'ord', cs = 'mitBbbD', alphabet = 'blackboard' } -- double-struck italic capital d
+ , { code = 0x02146, char = 'ⅆ', class = 'ord', cs = 'mitBbbd', alphabet = 'blackboard' } -- double-struck italic small d
+ , { code = 0x02147, char = 'ⅇ', class = 'ord', cs = 'mitBbbe', alphabet = 'blackboard' } -- double-struck italic small e
+ , { code = 0x02148, char = 'ⅈ', class = 'ord', cs = 'mitBbbi', alphabet = 'blackboard' } -- double-struck italic small i
+ , { code = 0x02149, char = 'ⅉ', class = 'ord', cs = 'mitBbbj', alphabet = 'blackboard' } -- double-struck italic small j
+ , { code = 0x0214A, char = '⅊', class = 'ord', cs = 'PropertyLine' } -- property line
+ , { code = 0x0214B, char = '⅋', class = 'bin', cs = 'upand' } -- turned ampersand
+ , { code = 0x02190, char = '←', class = 'rel', cs = 'leftarrow' } -- leftwards arrow
+ , { code = 0x02191, char = '↑', class = 'rel', cs = 'uparrow' } -- upwards arrow
+ , { code = 0x02192, char = '→', class = 'rel', cs = 'rightarrow' } -- rightwards arrow
+ , { code = 0x02193, char = '↓', class = 'rel', cs = 'downarrow' } -- downwards arrow
+ , { code = 0x02194, char = '↔', class = 'rel', cs = 'leftrightarrow' } -- left right arrow
+ , { code = 0x02195, char = '↕', class = 'rel', cs = 'updownarrow' } -- up down arrow
+ , { code = 0x02196, char = '↖', class = 'rel', cs = 'nwarrow' } -- north west arrow
+ , { code = 0x02197, char = '↗', class = 'rel', cs = 'nearrow' } -- north east arrow
+ , { code = 0x02198, char = '↘', class = 'rel', cs = 'searrow' } -- south east arrow
+ , { code = 0x02199, char = '↙', class = 'rel', cs = 'swarrow' } -- south west arrow
+ , { code = 0x0219A, char = '↚', class = 'rel', cs = 'nleftarrow' } -- leftwards arrow with stroke
+ , { code = 0x0219B, char = '↛', class = 'rel', cs = 'nrightarrow' } -- rightwards arrow with stroke
+ , { code = 0x0219C, char = '↜', class = 'rel', cs = 'leftwavearrow' } -- leftwards wave arrow
+ , { code = 0x0219D, char = '↝', class = 'rel', cs = 'rightwavearrow' } -- rightwards wave arrow
+ , { code = 0x0219E, char = '↞', class = 'rel', cs = 'twoheadleftarrow' } -- leftwards two headed arrow
+ , { code = 0x0219F, char = '↟', class = 'rel', cs = 'twoheaduparrow' } -- upwards two headed arrow
+ , { code = 0x021A0, char = '↠', class = 'rel', cs = 'twoheadrightarrow' } -- rightwards two headed arrow
+ , { code = 0x021A1, char = '↡', class = 'rel', cs = 'twoheaddownarrow' } -- downwards two headed arrow
+ , { code = 0x021A2, char = '↢', class = 'rel', cs = 'leftarrowtail' } -- leftwards arrow with tail
+ , { code = 0x021A3, char = '↣', class = 'rel', cs = 'rightarrowtail' } -- rightwards arrow with tail
+ , { code = 0x021A4, char = '↤', class = 'rel', cs = 'mapsfrom' } -- leftwards arrow from bar
+ , { code = 0x021A5, char = '↥', class = 'rel', cs = 'mapsup' } -- upwards arrow from bar
+ , { code = 0x021A6, char = '↦', class = 'rel', cs = 'mapsto' } -- rightwards arrow from bar
+ , { code = 0x021A7, char = '↧', class = 'rel', cs = 'mapsdown' } -- downwards arrow from bar
+ , { code = 0x021A8, char = '↨', class = 'ord', cs = 'updownarrowbar' } -- up down arrow with base
+ , { code = 0x021A9, char = '↩', class = 'rel', cs = 'hookleftarrow' } -- leftwards arrow with hook
+ , { code = 0x021AA, char = '↪', class = 'rel', cs = 'hookrightarrow' } -- rightwards arrow with hook
+ , { code = 0x021AB, char = '↫', class = 'rel', cs = 'looparrowleft' } -- leftwards arrow with loop
+ , { code = 0x021AC, char = '↬', class = 'rel', cs = 'looparrowright' } -- rightwards arrow with loop
+ , { code = 0x021AD, char = '↭', class = 'rel', cs = 'leftrightsquigarrow' } -- left right wave arrow
+ , { code = 0x021AE, char = '↮', class = 'rel', cs = 'nleftrightarrow' } -- left right arrow with stroke
+ , { code = 0x021AF, char = '↯', class = 'rel', cs = 'downzigzagarrow' } -- downwards zigzag arrow
+ , { code = 0x021B0, char = '↰', class = 'rel', cs = 'Lsh' } -- upwards arrow with tip leftwards
+ , { code = 0x021B1, char = '↱', class = 'rel', cs = 'Rsh' } -- upwards arrow with tip rightwards
+ , { code = 0x021B2, char = '↲', class = 'rel', cs = 'Ldsh' } -- downwards arrow with tip leftwards
+ , { code = 0x021B3, char = '↳', class = 'rel', cs = 'Rdsh' } -- downwards arrow with tip rightwards
+ , { code = 0x021B4, char = '↴', class = 'ord', cs = 'linefeed' } -- rightwards arrow with corner downwards
+ , { code = 0x021B5, char = '↵', class = 'ord', cs = 'carriagereturn' } -- downwards arrow with corner leftwards
+ , { code = 0x021B6, char = '↶', class = 'rel', cs = 'curvearrowleft' } -- anticlockwise top semicircle arrow
+ , { code = 0x021B7, char = '↷', class = 'rel', cs = 'curvearrowright' } -- clockwise top semicircle arrow
+ , { code = 0x021B8, char = '↸', class = 'ord', cs = 'barovernorthwestarrow' } -- north west arrow to long bar
+ , { code = 0x021B9, char = '↹', class = 'ord', cs = 'barleftarrowrightarrowbar' } -- leftwards arrow to bar over rightwards arrow to bar
+ , { code = 0x021BA, char = '↺', class = 'ord', cs = 'acwopencirclearrow' } -- anticlockwise open circle arrow
+ , { code = 0x021BB, char = '↻', class = 'ord', cs = 'cwopencirclearrow' } -- clockwise open circle arrow
+ , { code = 0x021BC, char = '↼', class = 'rel', cs = 'leftharpoonup' } -- leftwards harpoon with barb upwards
+ , { code = 0x021BD, char = '↽', class = 'rel', cs = 'leftharpoondown' } -- leftwards harpoon with barb downwards
+ , { code = 0x021BE, char = '↾', class = 'rel', cs = 'upharpoonright' } -- upwards harpoon with barb rightwards
+ , { code = 0x021BF, char = '↿', class = 'rel', cs = 'upharpoonleft' } -- upwards harpoon with barb leftwards
+ , { code = 0x021C0, char = '⇀', class = 'rel', cs = 'rightharpoonup' } -- rightwards harpoon with barb upwards
+ , { code = 0x021C1, char = '⇁', class = 'rel', cs = 'rightharpoondown' } -- rightwards harpoon with barb downwards
+ , { code = 0x021C2, char = '⇂', class = 'rel', cs = 'downharpoonright' } -- downwards harpoon with barb rightwards
+ , { code = 0x021C3, char = '⇃', class = 'rel', cs = 'downharpoonleft' } -- downwards harpoon with barb leftwards
+ , { code = 0x021C4, char = '⇄', class = 'rel', cs = 'rightleftarrows' } -- rightwards arrow over leftwards arrow
+ , { code = 0x021C5, char = '⇅', class = 'rel', cs = 'updownarrows' } -- upwards arrow leftwards of downwards arrow
+ , { code = 0x021C6, char = '⇆', class = 'rel', cs = 'leftrightarrows' } -- leftwards arrow over rightwards arrow
+ , { code = 0x021C7, char = '⇇', class = 'rel', cs = 'leftleftarrows' } -- leftwards paired arrows
+ , { code = 0x021C8, char = '⇈', class = 'rel', cs = 'upuparrows' } -- upwards paired arrows
+ , { code = 0x021C9, char = '⇉', class = 'rel', cs = 'rightrightarrows' } -- rightwards paired arrows
+ , { code = 0x021CA, char = '⇊', class = 'rel', cs = 'downdownarrows' } -- downwards paired arrows
+ , { code = 0x021CB, char = '⇋', class = 'rel', cs = 'leftrightharpoons' } -- leftwards harpoon over rightwards harpoon
+ , { code = 0x021CC, char = '⇌', class = 'rel', cs = 'rightleftharpoons' } -- rightwards harpoon over leftwards harpoon
+ , { code = 0x021CD, char = '⇍', class = 'rel', cs = 'nLeftarrow' } -- leftwards double arrow with stroke
+ , { code = 0x021CE, char = '⇎', class = 'rel', cs = 'nLeftrightarrow' } -- left right double arrow with stroke
+ , { code = 0x021CF, char = '⇏', class = 'rel', cs = 'nRightarrow' } -- rightwards double arrow with stroke
+ , { code = 0x021D0, char = '⇐', class = 'rel', cs = 'Leftarrow' } -- leftwards double arrow
+ , { code = 0x021D1, char = '⇑', class = 'rel', cs = 'Uparrow' } -- upwards double arrow
+ , { code = 0x021D2, char = '⇒', class = 'rel', cs = 'Rightarrow' } -- rightwards double arrow
+ , { code = 0x021D3, char = '⇓', class = 'rel', cs = 'Downarrow' } -- downwards double arrow
+ , { code = 0x021D4, char = '⇔', class = 'rel', cs = 'Leftrightarrow' } -- left right double arrow
+ , { code = 0x021D5, char = '⇕', class = 'rel', cs = 'Updownarrow' } -- up down double arrow
+ , { code = 0x021D6, char = '⇖', class = 'rel', cs = 'Nwarrow' } -- north west double arrow
+ , { code = 0x021D7, char = '⇗', class = 'rel', cs = 'Nearrow' } -- north east double arrow
+ , { code = 0x021D8, char = '⇘', class = 'rel', cs = 'Searrow' } -- south east double arrow
+ , { code = 0x021D9, char = '⇙', class = 'rel', cs = 'Swarrow' } -- south west double arrow
+ , { code = 0x021DA, char = '⇚', class = 'rel', cs = 'Lleftarrow' } -- leftwards triple arrow
+ , { code = 0x021DB, char = '⇛', class = 'rel', cs = 'Rrightarrow' } -- rightwards triple arrow
+ , { code = 0x021DC, char = '⇜', class = 'rel', cs = 'leftsquigarrow' } -- leftwards squiggle arrow
+ , { code = 0x021DD, char = '⇝', class = 'rel', cs = 'rightsquigarrow' } -- rightwards squiggle arrow
+ , { code = 0x021DE, char = '⇞', class = 'ord', cs = 'nHuparrow' } -- upwards arrow with double stroke
+ , { code = 0x021DF, char = '⇟', class = 'ord', cs = 'nHdownarrow' } -- downwards arrow with double stroke
+ , { code = 0x021E0, char = '⇠', class = 'ord', cs = 'leftdasharrow' } -- leftwards dashed arrow
+ , { code = 0x021E1, char = '⇡', class = 'ord', cs = 'updasharrow' } -- upwards dashed arrow
+ , { code = 0x021E2, char = '⇢', class = 'ord', cs = 'rightdasharrow' } -- rightwards dashed arrow
+ , { code = 0x021E3, char = '⇣', class = 'ord', cs = 'downdasharrow' } -- downwards dashed arrow
+ , { code = 0x021E4, char = '⇤', class = 'rel', cs = 'barleftarrow' } -- leftwards arrow to bar
+ , { code = 0x021E5, char = '⇥', class = 'rel', cs = 'rightarrowbar' } -- rightwards arrow to bar
+ , { code = 0x021E6, char = '⇦', class = 'ord', cs = 'leftwhitearrow' } -- leftwards white arrow
+ , { code = 0x021E7, char = '⇧', class = 'ord', cs = 'upwhitearrow' } -- upwards white arrow
+ , { code = 0x021E8, char = '⇨', class = 'ord', cs = 'rightwhitearrow' } -- rightwards white arrow
+ , { code = 0x021E9, char = '⇩', class = 'ord', cs = 'downwhitearrow' } -- downwards white arrow
+ , { code = 0x021EA, char = '⇪', class = 'ord', cs = 'whitearrowupfrombar' } -- upwards white arrow from bar
+ , { code = 0x021F4, char = '⇴', class = 'rel', cs = 'circleonrightarrow' } -- right arrow with small circle
+ , { code = 0x021F5, char = '⇵', class = 'rel', cs = 'downuparrows' } -- downwards arrow leftwards of upwards arrow
+ , { code = 0x021F6, char = '⇶', class = 'rel', cs = 'rightthreearrows' } -- three rightwards arrows
+ , { code = 0x021F7, char = '⇷', class = 'rel', cs = 'nvleftarrow' } -- leftwards arrow with vertical stroke
+ , { code = 0x021F8, char = '⇸', class = 'rel', cs = 'nvrightarrow' } -- rightwards arrow with vertical stroke
+ , { code = 0x021F9, char = '⇹', class = 'rel', cs = 'nvleftrightarrow' } -- left right arrow with vertical stroke
+ , { code = 0x021FA, char = '⇺', class = 'rel', cs = 'nVleftarrow' } -- leftwards arrow with double vertical stroke
+ , { code = 0x021FB, char = '⇻', class = 'rel', cs = 'nVrightarrow' } -- rightwards arrow with double vertical stroke
+ , { code = 0x021FC, char = '⇼', class = 'rel', cs = 'nVleftrightarrow' } -- left right arrow with double vertical stroke
+ , { code = 0x021FD, char = '⇽', class = 'rel', cs = 'leftarrowtriangle' } -- leftwards open-headed arrow
+ , { code = 0x021FE, char = '⇾', class = 'rel', cs = 'rightarrowtriangle' } -- rightwards open-headed arrow
+ , { code = 0x021FF, char = '⇿', class = 'rel', cs = 'leftrightarrowtriangle' } -- left right open-headed arrow
+ , { code = 0x02200, char = '∀', class = 'ord', cs = 'forall' } -- for all
+ , { code = 0x02201, char = '∁', class = 'ord', cs = 'complement' } -- complement
+ , { code = 0x02202, char = '∂', class = 'var', cs = 'partial' } -- partial differential
+ , { code = 0x02203, char = '∃', class = 'ord', cs = 'exists' } -- there exists
+ , { code = 0x02204, char = '∄', class = 'ord', cs = 'nexists' } -- there does not exist
+ , { code = 0x02205, char = '∅', class = 'ord', cs = 'varnothing' } -- empty set
+ , { code = 0x02206, char = '∆', class = 'ord', cs = 'increment' } -- increment
+ , { code = 0x02207, char = '∇', class = 'var', cs = 'nabla' } -- nabla
+ , { code = 0x02208, char = '∈', class = 'rel', cs = 'in' } -- element of
+ , { code = 0x02209, char = '∉', class = 'rel', cs = 'notin' } -- not an element of
+ , { code = 0x0220A, char = '∊', class = 'rel', cs = 'smallin' } -- small element of
+ , { code = 0x0220B, char = '∋', class = 'rel', cs = 'ni' } -- contains as member
+ , { code = 0x0220C, char = '∌', class = 'rel', cs = 'nni' } -- does not contain as member
+ , { code = 0x0220D, char = '∍', class = 'rel', cs = 'smallni' } -- small contains as member
+ , { code = 0x0220E, char = '∎', class = 'ord', cs = 'QED' } -- end of proof
+ , { code = 0x0220F, char = '∏', class = 'op', cs = 'prod' } -- n-ary product
+ , { code = 0x02210, char = '∐', class = 'op', cs = 'coprod' } -- n-ary coproduct
+ , { code = 0x02211, char = '∑', class = 'op', cs = 'sum' } -- n-ary summation
+ , { code = 0x02212, char = '−', class = 'bin', cs = 'minus' } -- minus sign
+ , { code = 0x02213, char = '∓', class = 'bin', cs = 'mp' } -- minus-or-plus sign
+ , { code = 0x02214, char = '∔', class = 'bin', cs = 'dotplus' } -- dot plus
+ , { code = 0x02215, char = '∕', class = 'bin', cs = 'divslash' } -- division slash
+ , { code = 0x02216, char = '∖', class = 'bin', cs = 'smallsetminus' } -- set minus
+ , { code = 0x02217, char = '∗', class = 'bin', cs = 'ast' } -- asterisk operator
+ , { code = 0x02218, char = '∘', class = 'bin', cs = 'vysmwhtcircle' } -- ring operator
+ , { code = 0x02219, char = '∙', class = 'bin', cs = 'vysmblkcircle' } -- bullet operator
+ , { code = 0x0221A, char = '√', class = 'radical', cs = 'sqrt' } -- square root
+ , { code = 0x0221B, char = '∛', class = 'radical', cs = 'cuberoot' } -- cube root
+ , { code = 0x0221C, char = '∜', class = 'radical', cs = 'fourthroot' } -- fourth root
+ , { code = 0x0221D, char = '∝', class = 'rel', cs = 'propto' } -- proportional to
+ , { code = 0x0221E, char = '∞', class = 'ord', cs = 'infty' } -- infinity
+ , { code = 0x0221F, char = '∟', class = 'ord', cs = 'rightangle' } -- right angle
+ , { code = 0x02220, char = '∠', class = 'ord', cs = 'angle' } -- angle
+ , { code = 0x02221, char = '∡', class = 'ord', cs = 'measuredangle' } -- measured angle
+ , { code = 0x02222, char = '∢', class = 'ord', cs = 'sphericalangle' } -- spherical angle
+ , { code = 0x02223, char = '∣', class = 'rel', cs = 'mid' } -- divides
+ , { code = 0x02224, char = '∤', class = 'rel', cs = 'nmid' } -- does not divide
+ , { code = 0x02225, char = '∥', class = 'rel', cs = 'parallel' } -- parallel to
+ , { code = 0x02226, char = '∦', class = 'rel', cs = 'nparallel' } -- not parallel to
+ , { code = 0x02227, char = '∧', class = 'bin', cs = 'wedge' } -- logical and
+ , { code = 0x02228, char = '∨', class = 'bin', cs = 'vee' } -- logical or
+ , { code = 0x02229, char = '∩', class = 'bin', cs = 'cap' } -- intersection
+ , { code = 0x0222A, char = '∪', class = 'bin', cs = 'cup' } -- union
+ , { code = 0x0222B, char = '∫', class = 'op', cs = 'intop' } -- integral
+ , { code = 0x0222C, char = '∬', class = 'op', cs = 'iintop' } -- double integral
+ , { code = 0x0222D, char = '∭', class = 'op', cs = 'iiintop' } -- triple integral
+ , { code = 0x0222E, char = '∮', class = 'op', cs = 'ointop' } -- contour integral
+ , { code = 0x0222F, char = '∯', class = 'op', cs = 'oiintop' } -- surface integral
+ , { code = 0x02230, char = '∰', class = 'op', cs = 'oiiintop' } -- volume integral
+ , { code = 0x02231, char = '∱', class = 'op', cs = 'intclockwiseop' } -- clockwise integral
+ , { code = 0x02232, char = '∲', class = 'op', cs = 'varointclockwiseop' } -- clockwise contour integral
+ , { code = 0x02233, char = '∳', class = 'op', cs = 'ointctrclockwiseop' } -- anticlockwise contour integral
+ , { code = 0x02234, char = '∴', class = 'ord', cs = 'therefore' } -- therefore
+ , { code = 0x02235, char = '∵', class = 'ord', cs = 'because' } -- because
+ , { code = 0x02236, char = '∶', class = 'rel', cs = 'ratio' } -- ratio
+ , { code = 0x02237, char = '∷', class = 'rel', cs = 'Colon' } -- proportion
+ , { code = 0x02238, char = '∸', class = 'bin', cs = 'dotminus' } -- dot minus
+ , { code = 0x02239, char = '∹', class = 'rel', cs = 'dashcolon' } -- excess
+ , { code = 0x0223A, char = '∺', class = 'rel', cs = 'dotsminusdots' } -- geometric proportion
+ , { code = 0x0223B, char = '∻', class = 'rel', cs = 'kernelcontraction' } -- homothetic
+ , { code = 0x0223C, char = '∼', class = 'rel', cs = 'sim' } -- tilde operator
+ , { code = 0x0223D, char = '∽', class = 'rel', cs = 'backsim' } -- reversed tilde
+ , { code = 0x0223E, char = '∾', class = 'bin', cs = 'invlazys' } -- inverted lazy s
+ , { code = 0x0223F, char = '∿', class = 'ord', cs = 'sinewave' } -- sine wave
+ , { code = 0x02240, char = '≀', class = 'bin', cs = 'wr' } -- wreath product
+ , { code = 0x02241, char = '≁', class = 'rel', cs = 'nsim' } -- not tilde
+ , { code = 0x02242, char = '≂', class = 'rel', cs = 'eqsim' } -- minus tilde
+ , { code = 0x02243, char = '≃', class = 'rel', cs = 'simeq' } -- asymptotically equal to
+ , { code = 0x02244, char = '≄', class = 'rel', cs = 'nsimeq' } -- not asymptotically equal to
+ , { code = 0x02245, char = '≅', class = 'rel', cs = 'cong' } -- approximately equal to
+ , { code = 0x02246, char = '≆', class = 'rel', cs = 'simneqq' } -- approximately but not actually equal to
+ , { code = 0x02247, char = '≇', class = 'rel', cs = 'ncong' } -- neither approximately nor actually equal to
+ , { code = 0x02248, char = '≈', class = 'rel', cs = 'approx' } -- almost equal to
+ , { code = 0x02249, char = '≉', class = 'rel', cs = 'napprox' } -- not almost equal to
+ , { code = 0x0224A, char = '≊', class = 'rel', cs = 'approxeq' } -- almost equal or equal to
+ , { code = 0x0224B, char = '≋', class = 'rel', cs = 'approxident' } -- triple tilde
+ , { code = 0x0224C, char = '≌', class = 'rel', cs = 'backcong' } -- all equal to
+ , { code = 0x0224D, char = '≍', class = 'rel', cs = 'asymp' } -- equivalent to
+ , { code = 0x0224E, char = '≎', class = 'rel', cs = 'Bumpeq' } -- geometrically equivalent to
+ , { code = 0x0224F, char = '≏', class = 'rel', cs = 'bumpeq' } -- difference between
+ , { code = 0x02250, char = '≐', class = 'rel', cs = 'doteq' } -- approaches the limit
+ , { code = 0x02251, char = '≑', class = 'rel', cs = 'Doteq' } -- geometrically equal to
+ , { code = 0x02252, char = '≒', class = 'rel', cs = 'fallingdotseq' } -- approximately equal to or the image of
+ , { code = 0x02253, char = '≓', class = 'rel', cs = 'risingdotseq' } -- image of or approximately equal to
+ , { code = 0x02254, char = '≔', class = 'rel', cs = 'coloneq' } -- colon equals
+ , { code = 0x02255, char = '≕', class = 'rel', cs = 'eqcolon' } -- equals colon
+ , { code = 0x02256, char = '≖', class = 'rel', cs = 'eqcirc' } -- ring in equal to
+ , { code = 0x02257, char = '≗', class = 'rel', cs = 'circeq' } -- ring equal to
+ , { code = 0x02258, char = '≘', class = 'rel', cs = 'arceq' } -- corresponds to
+ , { code = 0x02259, char = '≙', class = 'rel', cs = 'wedgeq' } -- estimates
+ , { code = 0x0225A, char = '≚', class = 'rel', cs = 'veeeq' } -- equiangular to
+ , { code = 0x0225B, char = '≛', class = 'rel', cs = 'stareq' } -- star equals
+ , { code = 0x0225C, char = '≜', class = 'rel', cs = 'triangleq' } -- delta equal to
+ , { code = 0x0225D, char = '≝', class = 'rel', cs = 'eqdef' } -- equal to by definition
+ , { code = 0x0225E, char = '≞', class = 'rel', cs = 'measeq' } -- measured by
+ , { code = 0x0225F, char = '≟', class = 'rel', cs = 'questeq' } -- questioned equal to
+ , { code = 0x02260, char = '≠', class = 'rel', cs = 'ne' } -- not equal to
+ , { code = 0x02261, char = '≡', class = 'rel', cs = 'equiv' } -- identical to
+ , { code = 0x02262, char = '≢', class = 'rel', cs = 'nequiv' } -- not identical to
+ , { code = 0x02263, char = '≣', class = 'rel', cs = 'Equiv' } -- strictly equivalent to
+ , { code = 0x02264, char = '≤', class = 'rel', cs = 'leq' } -- less-than or equal to
+ , { code = 0x02265, char = '≥', class = 'rel', cs = 'geq' } -- greater-than or equal to
+ , { code = 0x02266, char = '≦', class = 'rel', cs = 'leqq' } -- less-than over equal to
+ , { code = 0x02267, char = '≧', class = 'rel', cs = 'geqq' } -- greater-than over equal to
+ , { code = 0x02268, char = '≨', class = 'rel', cs = 'lneqq' } -- less-than but not equal to
+ , { code = 0x02269, char = '≩', class = 'rel', cs = 'gneqq' } -- greater-than but not equal to
+ , { code = 0x0226A, char = '≪', class = 'rel', cs = 'll' } -- much less-than
+ , { code = 0x0226B, char = '≫', class = 'rel', cs = 'gg' } -- much greater-than
+ , { code = 0x0226C, char = '≬', class = 'rel', cs = 'between' } -- between
+ , { code = 0x0226D, char = '≭', class = 'rel', cs = 'nasymp' } -- not equivalent to
+ , { code = 0x0226E, char = '≮', class = 'rel', cs = 'nless' } -- not less-than
+ , { code = 0x0226F, char = '≯', class = 'rel', cs = 'ngtr' } -- not greater-than
+ , { code = 0x02270, char = '≰', class = 'rel', cs = 'nleq' } -- neither less-than nor equal to
+ , { code = 0x02271, char = '≱', class = 'rel', cs = 'ngeq' } -- neither greater-than nor equal to
+ , { code = 0x02272, char = '≲', class = 'rel', cs = 'lesssim' } -- less-than or equivalent to
+ , { code = 0x02273, char = '≳', class = 'rel', cs = 'gtrsim' } -- greater-than or equivalent to
+ , { code = 0x02274, char = '≴', class = 'rel', cs = 'nlesssim' } -- neither less-than nor equivalent to
+ , { code = 0x02275, char = '≵', class = 'rel', cs = 'ngtrsim' } -- neither greater-than nor equivalent to
+ , { code = 0x02276, char = '≶', class = 'rel', cs = 'lessgtr' } -- less-than or greater-than
+ , { code = 0x02277, char = '≷', class = 'rel', cs = 'gtrless' } -- greater-than or less-than
+ , { code = 0x02278, char = '≸', class = 'rel', cs = 'nlessgtr' } -- neither less-than nor greater-than
+ , { code = 0x02279, char = '≹', class = 'rel', cs = 'ngtrless' } -- neither greater-than nor less-than
+ , { code = 0x0227A, char = '≺', class = 'rel', cs = 'prec' } -- precedes
+ , { code = 0x0227B, char = '≻', class = 'rel', cs = 'succ' } -- succeeds
+ , { code = 0x0227C, char = '≼', class = 'rel', cs = 'preccurlyeq' } -- precedes or equal to
+ , { code = 0x0227D, char = '≽', class = 'rel', cs = 'succcurlyeq' } -- succeeds or equal to
+ , { code = 0x0227E, char = '≾', class = 'rel', cs = 'precsim' } -- precedes or equivalent to
+ , { code = 0x0227F, char = '≿', class = 'rel', cs = 'succsim' } -- succeeds or equivalent to
+ , { code = 0x02280, char = '⊀', class = 'rel', cs = 'nprec' } -- does not precede
+ , { code = 0x02281, char = '⊁', class = 'rel', cs = 'nsucc' } -- does not succeed
+ , { code = 0x02282, char = '⊂', class = 'rel', cs = 'subset' } -- subset of
+ , { code = 0x02283, char = '⊃', class = 'rel', cs = 'supset' } -- superset of
+ , { code = 0x02284, char = '⊄', class = 'rel', cs = 'nsubset' } -- not a subset of
+ , { code = 0x02285, char = '⊅', class = 'rel', cs = 'nsupset' } -- not a superset of
+ , { code = 0x02286, char = '⊆', class = 'rel', cs = 'subseteq' } -- subset of or equal to
+ , { code = 0x02287, char = '⊇', class = 'rel', cs = 'supseteq' } -- superset of or equal to
+ , { code = 0x02288, char = '⊈', class = 'rel', cs = 'nsubseteq' } -- neither a subset of nor equal to
+ , { code = 0x02289, char = '⊉', class = 'rel', cs = 'nsupseteq' } -- neither a superset of nor equal to
+ , { code = 0x0228A, char = '⊊', class = 'rel', cs = 'subsetneq' } -- subset of with not equal to
+ , { code = 0x0228B, char = '⊋', class = 'rel', cs = 'supsetneq' } -- superset of with not equal to
+ , { code = 0x0228C, char = '⊌', class = 'bin', cs = 'cupleftarrow' } -- multiset
+ , { code = 0x0228D, char = '⊍', class = 'bin', cs = 'cupdot' } -- multiset multiplication
+ , { code = 0x0228E, char = '⊎', class = 'bin', cs = 'uplus' } -- multiset union
+ , { code = 0x0228F, char = '⊏', class = 'rel', cs = 'sqsubset' } -- square image of
+ , { code = 0x02290, char = '⊐', class = 'rel', cs = 'sqsupset' } -- square original of
+ , { code = 0x02291, char = '⊑', class = 'rel', cs = 'sqsubseteq' } -- square image of or equal to
+ , { code = 0x02292, char = '⊒', class = 'rel', cs = 'sqsupseteq' } -- square original of or equal to
+ , { code = 0x02293, char = '⊓', class = 'bin', cs = 'sqcap' } -- square cap
+ , { code = 0x02294, char = '⊔', class = 'bin', cs = 'sqcup' } -- square cup
+ , { code = 0x02295, char = '⊕', class = 'bin', cs = 'oplus' } -- circled plus
+ , { code = 0x02296, char = '⊖', class = 'bin', cs = 'ominus' } -- circled minus
+ , { code = 0x02297, char = '⊗', class = 'bin', cs = 'otimes' } -- circled times
+ , { code = 0x02298, char = '⊘', class = 'bin', cs = 'oslash' } -- circled division slash
+ , { code = 0x02299, char = '⊙', class = 'bin', cs = 'odot' } -- circled dot operator
+ , { code = 0x0229A, char = '⊚', class = 'bin', cs = 'circledcirc' } -- circled ring operator
+ , { code = 0x0229B, char = '⊛', class = 'bin', cs = 'circledast' } -- circled asterisk operator
+ , { code = 0x0229C, char = '⊜', class = 'bin', cs = 'circledequal' } -- circled equals
+ , { code = 0x0229D, char = '⊝', class = 'bin', cs = 'circleddash' } -- circled dash
+ , { code = 0x0229E, char = '⊞', class = 'bin', cs = 'boxplus' } -- squared plus
+ , { code = 0x0229F, char = '⊟', class = 'bin', cs = 'boxminus' } -- squared minus
+ , { code = 0x022A0, char = '⊠', class = 'bin', cs = 'boxtimes' } -- squared times
+ , { code = 0x022A1, char = '⊡', class = 'bin', cs = 'boxdot' } -- squared dot operator
+ , { code = 0x022A2, char = '⊢', class = 'rel', cs = 'vdash' } -- right tack
+ , { code = 0x022A3, char = '⊣', class = 'rel', cs = 'dashv' } -- left tack
+ , { code = 0x022A4, char = '⊤', class = 'ord', cs = 'top' } -- down tack
+ , { code = 0x022A5, char = '⊥', class = 'ord', cs = 'bot' } -- up tack
+ , { code = 0x022A6, char = '⊦', class = 'rel', cs = 'assert' } -- assertion
+ , { code = 0x022A7, char = '⊧', class = 'rel', cs = 'models' } -- models
+ , { code = 0x022A8, char = '⊨', class = 'rel', cs = 'vDash' } -- true
+ , { code = 0x022A9, char = '⊩', class = 'rel', cs = 'Vdash' } -- forces
+ , { code = 0x022AA, char = '⊪', class = 'rel', cs = 'Vvdash' } -- triple vertical bar right turnstile
+ , { code = 0x022AB, char = '⊫', class = 'rel', cs = 'VDash' } -- double vertical bar double right turnstile
+ , { code = 0x022AC, char = '⊬', class = 'rel', cs = 'nvdash' } -- does not prove
+ , { code = 0x022AD, char = '⊭', class = 'rel', cs = 'nvDash' } -- not true
+ , { code = 0x022AE, char = '⊮', class = 'rel', cs = 'nVdash' } -- does not force
+ , { code = 0x022AF, char = '⊯', class = 'rel', cs = 'nVDash' } -- negated double vertical bar double right turnstile
+ , { code = 0x022B0, char = '⊰', class = 'rel', cs = 'prurel' } -- precedes under relation
+ , { code = 0x022B1, char = '⊱', class = 'rel', cs = 'scurel' } -- succeeds under relation
+ , { code = 0x022B2, char = '⊲', class = 'rel', cs = 'vartriangleleft' } -- normal subgroup of
+ , { code = 0x022B3, char = '⊳', class = 'rel', cs = 'vartriangleright' } -- contains as normal subgroup
+ , { code = 0x022B4, char = '⊴', class = 'rel', cs = 'trianglelefteq' } -- normal subgroup of or equal to
+ , { code = 0x022B5, char = '⊵', class = 'rel', cs = 'trianglerighteq' } -- contains as normal subgroup or equal to
+ , { code = 0x022B6, char = '⊶', class = 'rel', cs = 'origof' } -- original of
+ , { code = 0x022B7, char = '⊷', class = 'rel', cs = 'imageof' } -- image of
+ , { code = 0x022B8, char = '⊸', class = 'rel', cs = 'multimap' } -- multimap
+ , { code = 0x022B9, char = '⊹', class = 'ord', cs = 'hermitmatrix' } -- hermitian conjugate matrix
+ , { code = 0x022BA, char = '⊺', class = 'bin', cs = 'intercal' } -- intercalate
+ , { code = 0x022BB, char = '⊻', class = 'bin', cs = 'veebar' } -- xor
+ , { code = 0x022BC, char = '⊼', class = 'bin', cs = 'barwedge' } -- nand
+ , { code = 0x022BD, char = '⊽', class = 'bin', cs = 'barvee' } -- nor
+ , { code = 0x022BE, char = '⊾', class = 'ord', cs = 'measuredrightangle' } -- right angle with arc
+ , { code = 0x022BF, char = '⊿', class = 'ord', cs = 'varlrtriangle' } -- right triangle
+ , { code = 0x022C0, char = '⋀', class = 'op', cs = 'bigwedge' } -- n-ary logical and
+ , { code = 0x022C1, char = '⋁', class = 'op', cs = 'bigvee' } -- n-ary logical or
+ , { code = 0x022C2, char = '⋂', class = 'op', cs = 'bigcap' } -- n-ary intersection
+ , { code = 0x022C3, char = '⋃', class = 'op', cs = 'bigcup' } -- n-ary union
+ , { code = 0x022C4, char = '⋄', class = 'bin', cs = 'smwhtdiamond' } -- diamond operator
+ , { code = 0x022C5, char = '⋅', class = 'bin', cs = 'cdot' } -- dot operator
+ , { code = 0x022C6, char = '⋆', class = 'bin', cs = 'star' } -- star operator
+ , { code = 0x022C7, char = '⋇', class = 'bin', cs = 'divideontimes' } -- division times
+ , { code = 0x022C8, char = '⋈', class = 'rel', cs = 'bowtie' } -- bowtie
+ , { code = 0x022C9, char = '⋉', class = 'bin', cs = 'ltimes' } -- left normal factor semidirect product
+ , { code = 0x022CA, char = '⋊', class = 'bin', cs = 'rtimes' } -- right normal factor semidirect product
+ , { code = 0x022CB, char = '⋋', class = 'bin', cs = 'leftthreetimes' } -- left semidirect product
+ , { code = 0x022CC, char = '⋌', class = 'bin', cs = 'rightthreetimes' } -- right semidirect product
+ , { code = 0x022CD, char = '⋍', class = 'rel', cs = 'backsimeq' } -- reversed tilde equals
+ , { code = 0x022CE, char = '⋎', class = 'bin', cs = 'curlyvee' } -- curly logical or
+ , { code = 0x022CF, char = '⋏', class = 'bin', cs = 'curlywedge' } -- curly logical and
+ , { code = 0x022D0, char = '⋐', class = 'rel', cs = 'Subset' } -- double subset
+ , { code = 0x022D1, char = '⋑', class = 'rel', cs = 'Supset' } -- double superset
+ , { code = 0x022D2, char = '⋒', class = 'bin', cs = 'Cap' } -- double intersection
+ , { code = 0x022D3, char = '⋓', class = 'bin', cs = 'Cup' } -- double union
+ , { code = 0x022D4, char = '⋔', class = 'rel', cs = 'pitchfork' } -- pitchfork
+ , { code = 0x022D5, char = '⋕', class = 'rel', cs = 'equalparallel' } -- equal and parallel to
+ , { code = 0x022D6, char = '⋖', class = 'rel', cs = 'lessdot' } -- less-than with dot
+ , { code = 0x022D7, char = '⋗', class = 'rel', cs = 'gtrdot' } -- greater-than with dot
+ , { code = 0x022D8, char = '⋘', class = 'rel', cs = 'lll' } -- very much less-than
+ , { code = 0x022D9, char = '⋙', class = 'rel', cs = 'ggg' } -- very much greater-than
+ , { code = 0x022DA, char = '⋚', class = 'rel', cs = 'lesseqgtr' } -- less-than equal to or greater-than
+ , { code = 0x022DB, char = '⋛', class = 'rel', cs = 'gtreqless' } -- greater-than equal to or less-than
+ , { code = 0x022DC, char = '⋜', class = 'rel', cs = 'eqless' } -- equal to or less-than
+ , { code = 0x022DD, char = '⋝', class = 'rel', cs = 'eqgtr' } -- equal to or greater-than
+ , { code = 0x022DE, char = '⋞', class = 'rel', cs = 'curlyeqprec' } -- equal to or precedes
+ , { code = 0x022DF, char = '⋟', class = 'rel', cs = 'curlyeqsucc' } -- equal to or succeeds
+ , { code = 0x022E0, char = '⋠', class = 'rel', cs = 'npreccurlyeq' } -- does not precede or equal
+ , { code = 0x022E1, char = '⋡', class = 'rel', cs = 'nsucccurlyeq' } -- does not succeed or equal
+ , { code = 0x022E2, char = '⋢', class = 'rel', cs = 'nsqsubseteq' } -- not square image of or equal to
+ , { code = 0x022E3, char = '⋣', class = 'rel', cs = 'nsqsupseteq' } -- not square original of or equal to
+ , { code = 0x022E4, char = '⋤', class = 'rel', cs = 'sqsubsetneq' } -- square image of or not equal to
+ , { code = 0x022E5, char = '⋥', class = 'rel', cs = 'sqsupsetneq' } -- square original of or not equal to
+ , { code = 0x022E6, char = '⋦', class = 'rel', cs = 'lnsim' } -- less-than but not equivalent to
+ , { code = 0x022E7, char = '⋧', class = 'rel', cs = 'gnsim' } -- greater-than but not equivalent to
+ , { code = 0x022E8, char = '⋨', class = 'rel', cs = 'precnsim' } -- precedes but not equivalent to
+ , { code = 0x022E9, char = '⋩', class = 'rel', cs = 'succnsim' } -- succeeds but not equivalent to
+ , { code = 0x022EA, char = '⋪', class = 'rel', cs = 'nvartriangleleft' } -- not normal subgroup of
+ , { code = 0x022EB, char = '⋫', class = 'rel', cs = 'nvartriangleright' } -- does not contain as normal subgroup
+ , { code = 0x022EC, char = '⋬', class = 'rel', cs = 'ntrianglelefteq' } -- not normal subgroup of or equal to
+ , { code = 0x022ED, char = '⋭', class = 'rel', cs = 'ntrianglerighteq' } -- does not contain as normal subgroup or equal
+ , { code = 0x022EE, char = '⋮', class = 'rel', cs = 'unicodevdots' } -- vertical ellipsis
+ , { code = 0x022EF, char = '⋯', class = 'ord', cs = 'unicodecdots' } -- midline horizontal ellipsis
+ , { code = 0x022F0, char = '⋰', class = 'rel', cs = 'unicodeadots' } -- up right diagonal ellipsis
+ , { code = 0x022F1, char = '⋱', class = 'rel', cs = 'unicodeddots' } -- down right diagonal ellipsis
+ , { code = 0x022F2, char = '⋲', class = 'rel', cs = 'disin' } -- element of with long horizontal stroke
+ , { code = 0x022F3, char = '⋳', class = 'rel', cs = 'varisins' } -- element of with vertical bar at end of horizontal stroke
+ , { code = 0x022F4, char = '⋴', class = 'rel', cs = 'isins' } -- small element of with vertical bar at end of horizontal stroke
+ , { code = 0x022F5, char = '⋵', class = 'rel', cs = 'isindot' } -- element of with dot above
+ , { code = 0x022F6, char = '⋶', class = 'rel', cs = 'varisinobar' } -- element of with overbar
+ , { code = 0x022F7, char = '⋷', class = 'rel', cs = 'isinobar' } -- small element of with overbar
+ , { code = 0x022F8, char = '⋸', class = 'rel', cs = 'isinvb' } -- element of with underbar
+ , { code = 0x022F9, char = '⋹', class = 'rel', cs = 'isinE' } -- element of with two horizontal strokes
+ , { code = 0x022FA, char = '⋺', class = 'rel', cs = 'nisd' } -- contains with long horizontal stroke
+ , { code = 0x022FB, char = '⋻', class = 'rel', cs = 'varnis' } -- contains with vertical bar at end of horizontal stroke
+ , { code = 0x022FC, char = '⋼', class = 'rel', cs = 'nis' } -- small contains with vertical bar at end of horizontal stroke
+ , { code = 0x022FD, char = '⋽', class = 'rel', cs = 'varniobar' } -- contains with overbar
+ , { code = 0x022FE, char = '⋾', class = 'rel', cs = 'niobar' } -- small contains with overbar
+ , { code = 0x022FF, char = '⋿', class = 'rel', cs = 'bagmember' } -- z notation bag membership
+ , { code = 0x02300, char = '⌀', class = 'ord', cs = 'diameter' } -- diameter sign
+ , { code = 0x02302, char = '⌂', class = 'ord', cs = 'house' } -- house
+ , { code = 0x02305, char = '⌅', class = 'bin', cs = 'varbarwedge' } -- projective
+ , { code = 0x02306, char = '⌆', class = 'bin', cs = 'vardoublebarwedge' } -- perspective
+ , { code = 0x02308, char = '⌈', class = 'open', cs = 'lceil' } -- left ceiling
+ , { code = 0x02309, char = '⌉', class = 'close', cs = 'rceil' } -- right ceiling
+ , { code = 0x0230A, char = '⌊', class = 'open', cs = 'lfloor' } -- left floor
+ , { code = 0x0230B, char = '⌋', class = 'close', cs = 'rfloor' } -- right floor
+ , { code = 0x02310, char = '⌐', class = 'ord', cs = 'invnot' } -- reversed not sign
+ , { code = 0x02311, char = '⌑', class = 'ord', cs = 'sqlozenge' } -- square lozenge
+ , { code = 0x02312, char = '⌒', class = 'ord', cs = 'profline' } -- arc
+ , { code = 0x02313, char = '⌓', class = 'ord', cs = 'profsurf' } -- segment
+ , { code = 0x02317, char = '⌗', class = 'ord', cs = 'viewdata' } -- viewdata square
+ , { code = 0x02319, char = '⌙', class = 'ord', cs = 'turnednot' } -- turned not sign
+ , { code = 0x0231C, char = '⌜', class = 'open', cs = 'ulcorner' } -- top left corner
+ , { code = 0x0231D, char = '⌝', class = 'close', cs = 'urcorner' } -- top right corner
+ , { code = 0x0231E, char = '⌞', class = 'open', cs = 'llcorner' } -- bottom left corner
+ , { code = 0x0231F, char = '⌟', class = 'close', cs = 'lrcorner' } -- bottom right corner
+ , { code = 0x02320, char = '⌠', class = 'ord', cs = 'inttop' } -- top half integral
+ , { code = 0x02321, char = '⌡', class = 'ord', cs = 'intbottom' } -- bottom half integral
+ , { code = 0x02322, char = '⌢', class = 'rel', cs = 'frown' } -- frown
+ , { code = 0x02323, char = '⌣', class = 'rel', cs = 'smile' } -- smile
+ , { code = 0x0232C, char = '⌬', class = 'ord', cs = 'varhexagonlrbonds' } -- benzene ring
+ , { code = 0x02332, char = '⌲', class = 'ord', cs = 'conictaper' } -- conical taper
+ , { code = 0x02336, char = '⌶', class = 'ord', cs = 'topbot' } -- apl functional symbol i-beam
+ , { code = 0x0233D, char = '⌽', class = 'bin', cs = 'obar' } -- apl functional symbol circle stile
+ , { code = 0x0233F, char = '⌿', class = 'rel', cs = 'APLnotslash' } -- apl functional symbol slash bar
+ , { code = 0x02340, char = '⍀', class = 'ord', cs = 'APLnotbackslash' } -- apl functional symbol backslash bar
+ , { code = 0x02353, char = '⍓', class = 'ord', cs = 'APLboxupcaret' } -- apl functional symbol quad up caret
+ , { code = 0x02370, char = '⍰', class = 'ord', cs = 'APLboxquestion' } -- apl functional symbol quad question
+ , { code = 0x0237C, char = '⍼', class = 'ord', cs = 'rangledownzigzagarrow' } -- right angle with downwards zigzag arrow
+ , { code = 0x02394, char = '⎔', class = 'ord', cs = 'hexagon' } -- software-function symbol
+ , { code = 0x0239B, char = '⎛', class = 'ord', cs = 'lparenuend' } -- left parenthesis upper hook
+ , { code = 0x0239C, char = '⎜', class = 'ord', cs = 'lparenextender' } -- left parenthesis extension
+ , { code = 0x0239D, char = '⎝', class = 'ord', cs = 'lparenlend' } -- left parenthesis lower hook
+ , { code = 0x0239E, char = '⎞', class = 'ord', cs = 'rparenuend' } -- right parenthesis upper hook
+ , { code = 0x0239F, char = '⎟', class = 'ord', cs = 'rparenextender' } -- right parenthesis extension
+ , { code = 0x023A0, char = '⎠', class = 'ord', cs = 'rparenlend' } -- right parenthesis lower hook
+ , { code = 0x023A1, char = '⎡', class = 'ord', cs = 'lbrackuend' } -- left square bracket upper corner
+ , { code = 0x023A2, char = '⎢', class = 'ord', cs = 'lbrackextender' } -- left square bracket extension
+ , { code = 0x023A3, char = '⎣', class = 'ord', cs = 'lbracklend' } -- left square bracket lower corner
+ , { code = 0x023A4, char = '⎤', class = 'ord', cs = 'rbrackuend' } -- right square bracket upper corner
+ , { code = 0x023A5, char = '⎥', class = 'ord', cs = 'rbrackextender' } -- right square bracket extension
+ , { code = 0x023A6, char = '⎦', class = 'ord', cs = 'rbracklend' } -- right square bracket lower corner
+ , { code = 0x023A7, char = '⎧', class = 'ord', cs = 'lbraceuend' } -- left curly bracket upper hook
+ , { code = 0x023A8, char = '⎨', class = 'ord', cs = 'lbracemid' } -- left curly bracket middle piece
+ , { code = 0x023A9, char = '⎩', class = 'ord', cs = 'lbracelend' } -- left curly bracket lower hook
+ , { code = 0x023AA, char = '⎪', class = 'ord', cs = 'vbraceextender' } -- curly bracket extension
+ , { code = 0x023AB, char = '⎫', class = 'ord', cs = 'rbraceuend' } -- right curly bracket upper hook
+ , { code = 0x023AC, char = '⎬', class = 'ord', cs = 'rbracemid' } -- right curly bracket middle piece
+ , { code = 0x023AD, char = '⎭', class = 'ord', cs = 'rbracelend' } -- right curly bracket lower hook
+ , { code = 0x023AE, char = '⎮', class = 'ord', cs = 'intextender' } -- integral extension
+ , { code = 0x023AF, char = '⎯', class = 'ord', cs = 'harrowextender' } -- horizontal line extension
+ , { code = 0x023B0, char = '⎰', class = 'open', cs = 'lmoustache' } -- upper left or lower right curly bracket section
+ , { code = 0x023B1, char = '⎱', class = 'close', cs = 'rmoustache' } -- upper right or lower left curly bracket section
+ , { code = 0x023B2, char = '⎲', class = 'ord', cs = 'sumtop' } -- summation top
+ , { code = 0x023B3, char = '⎳', class = 'ord', cs = 'sumbottom' } -- summation bottom
+ , { code = 0x023B4, char = '⎴', class = 'over', cs = 'overbracket' } -- top square bracket
+ , { code = 0x023B5, char = '⎵', class = 'under', cs = 'underbracket' } -- bottom square bracket
+ , { code = 0x023B6, char = '⎶', class = 'ord', cs = 'bbrktbrk' } -- bottom square bracket over top square bracket
+ , { code = 0x023B7, char = '⎷', class = 'ord', cs = 'sqrtbottom' } -- radical symbol bottom
+ , { code = 0x023B8, char = '⎸', class = 'ord', cs = 'lvboxline' } -- left vertical box line
+ , { code = 0x023B9, char = '⎹', class = 'ord', cs = 'rvboxline' } -- right vertical box line
+ , { code = 0x023CE, char = '⏎', class = 'ord', cs = 'varcarriagereturn' } -- return symbol
+ , { code = 0x023DC, char = '⏜', class = 'over', cs = 'overparen' } -- top parenthesis
+ , { code = 0x023DD, char = '⏝', class = 'under', cs = 'underparen' } -- bottom parenthesis
+ , { code = 0x023DE, char = '⏞', class = 'over', cs = 'overbrace' } -- top curly bracket
+ , { code = 0x023DF, char = '⏟', class = 'under', cs = 'underbrace' } -- bottom curly bracket
+ , { code = 0x023E0, char = '⏠', class = 'ord', cs = 'obrbrak' } -- top tortoise shell bracket
+ , { code = 0x023E1, char = '⏡', class = 'ord', cs = 'ubrbrak' } -- bottom tortoise shell bracket
+ , { code = 0x023E2, char = '⏢', class = 'ord', cs = 'trapezium' } -- white trapezium
+ , { code = 0x023E3, char = '⏣', class = 'ord', cs = 'benzenr' } -- benzene ring with circle
+ , { code = 0x023E4, char = '⏤', class = 'ord', cs = 'strns' } -- straightness
+ , { code = 0x023E5, char = '⏥', class = 'ord', cs = 'fltns' } -- flatness
+ , { code = 0x023E6, char = '⏦', class = 'ord', cs = 'accurrent' } -- ac current
+ , { code = 0x023E7, char = '⏧', class = 'ord', cs = 'elinters' } -- electrical intersection
+ , { code = 0x02422, char = '␢', class = 'ord', cs = 'blanksymbol' } -- blank symbol
+ , { code = 0x02423, char = '␣', class = 'ord', cs = 'mathvisiblespace' } -- open box
+ , { code = 0x02506, char = '┆', class = 'ord', cs = 'bdtriplevdash' } -- box drawings light triple dash vertical
+ , { code = 0x02580, char = '▀', class = 'ord', cs = 'blockuphalf' } -- upper half block
+ , { code = 0x02584, char = '▄', class = 'ord', cs = 'blocklowhalf' } -- lower half block
+ , { code = 0x02588, char = '█', class = 'ord', cs = 'blockfull' } -- full block
+ , { code = 0x0258C, char = '▌', class = 'ord', cs = 'blocklefthalf' } -- left half block
+ , { code = 0x02590, char = '▐', class = 'ord', cs = 'blockrighthalf' } -- right half block
+ , { code = 0x02591, char = '░', class = 'ord', cs = 'blockqtrshaded' } -- light shade
+ , { code = 0x02592, char = '▒', class = 'ord', cs = 'blockhalfshaded' } -- medium shade
+ , { code = 0x02593, char = '▓', class = 'ord', cs = 'blockthreeqtrshaded' } -- dark shade
+ , { code = 0x025A0, char = '■', class = 'ord', cs = 'mdlgblksquare' } -- black square
+ , { code = 0x025A1, char = '□', class = 'ord', cs = 'mdlgwhtsquare' } -- white square
+ , { code = 0x025A2, char = '▢', class = 'ord', cs = 'squoval' } -- white square with rounded corners
+ , { code = 0x025A3, char = '▣', class = 'ord', cs = 'blackinwhitesquare' } -- white square containing black small square
+ , { code = 0x025A4, char = '▤', class = 'ord', cs = 'squarehfill' } -- square with horizontal fill
+ , { code = 0x025A5, char = '▥', class = 'ord', cs = 'squarevfill' } -- square with vertical fill
+ , { code = 0x025A6, char = '▦', class = 'ord', cs = 'squarehvfill' } -- square with orthogonal crosshatch fill
+ , { code = 0x025A7, char = '▧', class = 'ord', cs = 'squarenwsefill' } -- square with upper left to lower right fill
+ , { code = 0x025A8, char = '▨', class = 'ord', cs = 'squareneswfill' } -- square with upper right to lower left fill
+ , { code = 0x025A9, char = '▩', class = 'ord', cs = 'squarecrossfill' } -- square with diagonal crosshatch fill
+ , { code = 0x025AA, char = '▪', class = 'ord', cs = 'smblksquare' } -- black small square
+ , { code = 0x025AB, char = '▫', class = 'ord', cs = 'smwhtsquare' } -- white small square
+ , { code = 0x025AC, char = '▬', class = 'ord', cs = 'hrectangleblack' } -- black rectangle
+ , { code = 0x025AD, char = '▭', class = 'ord', cs = 'hrectangle' } -- white rectangle
+ , { code = 0x025AE, char = '▮', class = 'ord', cs = 'vrectangleblack' } -- black vertical rectangle
+ , { code = 0x025AF, char = '▯', class = 'ord', cs = 'vrectangle' } -- white vertical rectangle
+ , { code = 0x025B0, char = '▰', class = 'ord', cs = 'parallelogramblack' } -- black parallelogram
+ , { code = 0x025B1, char = '▱', class = 'ord', cs = 'parallelogram' } -- white parallelogram
+ , { code = 0x025B2, char = '▲', class = 'ord', cs = 'bigblacktriangleup' } -- black up-pointing triangle
+ , { code = 0x025B3, char = '△', class = 'bin', cs = 'bigtriangleup' } -- white up-pointing triangle
+ , { code = 0x025B4, char = '▴', class = 'ord', cs = 'blacktriangle' } -- black up-pointing small triangle
+ , { code = 0x025B5, char = '▵', class = 'rel', cs = 'vartriangle' } -- white up-pointing small triangle
+ , { code = 0x025B6, char = '▶', class = 'ord', cs = 'blacktriangleright' } -- black right-pointing triangle
+ , { code = 0x025B7, char = '▷', class = 'bin', cs = 'triangleright' } -- white right-pointing triangle
+ , { code = 0x025B8, char = '▸', class = 'ord', cs = 'smallblacktriangleright' } -- black right-pointing small triangle
+ , { code = 0x025B9, char = '▹', class = 'ord', cs = 'smalltriangleright' } -- white right-pointing small triangle
+ , { code = 0x025BA, char = '►', class = 'ord', cs = 'blackpointerright' } -- black right-pointing pointer
+ , { code = 0x025BB, char = '▻', class = 'ord', cs = 'whitepointerright' } -- white right-pointing pointer
+ , { code = 0x025BC, char = '▼', class = 'ord', cs = 'bigblacktriangledown' } -- black down-pointing triangle
+ , { code = 0x025BD, char = '▽', class = 'ord', cs = 'bigtriangledown' } -- white down-pointing triangle
+ , { code = 0x025BE, char = '▾', class = 'ord', cs = 'blacktriangledown' } -- black down-pointing small triangle
+ , { code = 0x025BF, char = '▿', class = 'ord', cs = 'triangledown' } -- white down-pointing small triangle
+ , { code = 0x025C0, char = '◀', class = 'ord', cs = 'blacktriangleleft' } -- black left-pointing triangle
+ , { code = 0x025C1, char = '◁', class = 'bin', cs = 'triangleleft' } -- white left-pointing triangle
+ , { code = 0x025C2, char = '◂', class = 'ord', cs = 'smallblacktriangleleft' } -- black left-pointing small triangle
+ , { code = 0x025C3, char = '◃', class = 'ord', cs = 'smalltriangleleft' } -- white left-pointing small triangle
+ , { code = 0x025C4, char = '◄', class = 'ord', cs = 'blackpointerleft' } -- black left-pointing pointer
+ , { code = 0x025C5, char = '◅', class = 'ord', cs = 'whitepointerleft' } -- white left-pointing pointer
+ , { code = 0x025C6, char = '◆', class = 'ord', cs = 'mdlgblkdiamond' } -- black diamond
+ , { code = 0x025C7, char = '◇', class = 'ord', cs = 'mdlgwhtdiamond' } -- white diamond
+ , { code = 0x025C8, char = '◈', class = 'ord', cs = 'blackinwhitediamond' } -- white diamond containing black small diamond
+ , { code = 0x025C9, char = '◉', class = 'ord', cs = 'fisheye' } -- fisheye
+ , { code = 0x025CA, char = '◊', class = 'ord', cs = 'mdlgwhtlozenge' } -- lozenge
+ , { code = 0x025CB, char = '○', class = 'bin', cs = 'mdlgwhtcircle' } -- white circle
+ , { code = 0x025CC, char = '◌', class = 'ord', cs = 'dottedcircle' } -- dotted circle
+ , { code = 0x025CD, char = '◍', class = 'ord', cs = 'circlevertfill' } -- circle with vertical fill
+ , { code = 0x025CE, char = '◎', class = 'ord', cs = 'bullseye' } -- bullseye
+ , { code = 0x025CF, char = '●', class = 'ord', cs = 'mdlgblkcircle' } -- black circle
+ , { code = 0x025D0, char = '◐', class = 'ord', cs = 'circlelefthalfblack' } -- circle with left half black
+ , { code = 0x025D1, char = '◑', class = 'ord', cs = 'circlerighthalfblack' } -- circle with right half black
+ , { code = 0x025D2, char = '◒', class = 'ord', cs = 'circlebottomhalfblack' } -- circle with lower half black
+ , { code = 0x025D3, char = '◓', class = 'ord', cs = 'circletophalfblack' } -- circle with upper half black
+ , { code = 0x025D4, char = '◔', class = 'ord', cs = 'circleurquadblack' } -- circle with upper right quadrant black
+ , { code = 0x025D5, char = '◕', class = 'ord', cs = 'blackcircleulquadwhite' } -- circle with all but upper left quadrant black
+ , { code = 0x025D6, char = '◖', class = 'ord', cs = 'blacklefthalfcircle' } -- left half black circle
+ , { code = 0x025D7, char = '◗', class = 'ord', cs = 'blackrighthalfcircle' } -- right half black circle
+ , { code = 0x025D8, char = '◘', class = 'ord', cs = 'inversebullet' } -- inverse bullet
+ , { code = 0x025D9, char = '◙', class = 'ord', cs = 'inversewhitecircle' } -- inverse white circle
+ , { code = 0x025DA, char = '◚', class = 'ord', cs = 'invwhiteupperhalfcircle' } -- upper half inverse white circle
+ , { code = 0x025DB, char = '◛', class = 'ord', cs = 'invwhitelowerhalfcircle' } -- lower half inverse white circle
+ , { code = 0x025DC, char = '◜', class = 'ord', cs = 'ularc' } -- upper left quadrant circular arc
+ , { code = 0x025DD, char = '◝', class = 'ord', cs = 'urarc' } -- upper right quadrant circular arc
+ , { code = 0x025DE, char = '◞', class = 'ord', cs = 'lrarc' } -- lower right quadrant circular arc
+ , { code = 0x025DF, char = '◟', class = 'ord', cs = 'llarc' } -- lower left quadrant circular arc
+ , { code = 0x025E0, char = '◠', class = 'ord', cs = 'topsemicircle' } -- upper half circle
+ , { code = 0x025E1, char = '◡', class = 'ord', cs = 'botsemicircle' } -- lower half circle
+ , { code = 0x025E2, char = '◢', class = 'ord', cs = 'lrblacktriangle' } -- black lower right triangle
+ , { code = 0x025E3, char = '◣', class = 'ord', cs = 'llblacktriangle' } -- black lower left triangle
+ , { code = 0x025E4, char = '◤', class = 'ord', cs = 'ulblacktriangle' } -- black upper left triangle
+ , { code = 0x025E5, char = '◥', class = 'ord', cs = 'urblacktriangle' } -- black upper right triangle
+ , { code = 0x025E6, char = '◦', class = 'ord', cs = 'smwhtcircle' } -- white bullet
+ , { code = 0x025E7, char = '◧', class = 'ord', cs = 'squareleftblack' } -- square with left half black
+ , { code = 0x025E8, char = '◨', class = 'ord', cs = 'squarerightblack' } -- square with right half black
+ , { code = 0x025E9, char = '◩', class = 'ord', cs = 'squareulblack' } -- square with upper left diagonal half black
+ , { code = 0x025EA, char = '◪', class = 'ord', cs = 'squarelrblack' } -- square with lower right diagonal half black
+ , { code = 0x025EB, char = '◫', class = 'bin', cs = 'boxbar' } -- white square with vertical bisecting line
+ , { code = 0x025EC, char = '◬', class = 'ord', cs = 'trianglecdot' } -- white up-pointing triangle with dot
+ , { code = 0x025ED, char = '◭', class = 'ord', cs = 'triangleleftblack' } -- up-pointing triangle with left half black
+ , { code = 0x025EE, char = '◮', class = 'ord', cs = 'trianglerightblack' } -- up-pointing triangle with right half black
+ , { code = 0x025EF, char = '◯', class = 'ord', cs = 'lgwhtcircle' } -- large circle
+ , { code = 0x025F0, char = '◰', class = 'ord', cs = 'squareulquad' } -- white square with upper left quadrant
+ , { code = 0x025F1, char = '◱', class = 'ord', cs = 'squarellquad' } -- white square with lower left quadrant
+ , { code = 0x025F2, char = '◲', class = 'ord', cs = 'squarelrquad' } -- white square with lower right quadrant
+ , { code = 0x025F3, char = '◳', class = 'ord', cs = 'squareurquad' } -- white square with upper right quadrant
+ , { code = 0x025F4, char = '◴', class = 'ord', cs = 'circleulquad' } -- white circle with upper left quadrant
+ , { code = 0x025F5, char = '◵', class = 'ord', cs = 'circlellquad' } -- white circle with lower left quadrant
+ , { code = 0x025F6, char = '◶', class = 'ord', cs = 'circlelrquad' } -- white circle with lower right quadrant
+ , { code = 0x025F7, char = '◷', class = 'ord', cs = 'circleurquad' } -- white circle with upper right quadrant
+ , { code = 0x025F8, char = '◸', class = 'ord', cs = 'ultriangle' } -- upper left triangle
+ , { code = 0x025F9, char = '◹', class = 'ord', cs = 'urtriangle' } -- upper right triangle
+ , { code = 0x025FA, char = '◺', class = 'ord', cs = 'lltriangle' } -- lower left triangle
+ , { code = 0x025FB, char = '◻', class = 'ord', cs = 'mdwhtsquare' } -- white medium square
+ , { code = 0x025FC, char = '◼', class = 'ord', cs = 'mdblksquare' } -- black medium square
+ , { code = 0x025FD, char = '◽', class = 'ord', cs = 'mdsmwhtsquare' } -- white medium small square
+ , { code = 0x025FE, char = '◾', class = 'ord', cs = 'mdsmblksquare' } -- black medium small square
+ , { code = 0x025FF, char = '◿', class = 'ord', cs = 'lrtriangle' } -- lower right triangle
+ , { code = 0x02605, char = '★', class = 'ord', cs = 'bigstar' } -- black star
+ , { code = 0x02606, char = '☆', class = 'ord', cs = 'bigwhitestar' } -- white star
+ , { code = 0x02609, char = '☉', class = 'ord', cs = 'astrosun' } -- sun
+ , { code = 0x02621, char = '☡', class = 'ord', cs = 'danger' } -- caution sign
+ , { code = 0x0263B, char = '☻', class = 'ord', cs = 'blacksmiley' } -- black smiling face
+ , { code = 0x0263C, char = '☼', class = 'ord', cs = 'sun' } -- white sun with rays
+ , { code = 0x0263D, char = '☽', class = 'ord', cs = 'rightmoon' } -- first quarter moon
+ , { code = 0x0263E, char = '☾', class = 'ord', cs = 'leftmoon' } -- last quarter moon
+ , { code = 0x02640, char = '♀', class = 'ord', cs = 'female' } -- female sign
+ , { code = 0x02642, char = '♂', class = 'ord', cs = 'male' } -- male sign
+ , { code = 0x02660, char = '♠', class = 'ord', cs = 'spadesuit' } -- black spade suit
+ , { code = 0x02661, char = '♡', class = 'ord', cs = 'heartsuit' } -- white heart suit
+ , { code = 0x02662, char = '♢', class = 'ord', cs = 'diamondsuit' } -- white diamond suit
+ , { code = 0x02663, char = '♣', class = 'ord', cs = 'clubsuit' } -- black club suit
+ , { code = 0x02664, char = '♤', class = 'ord', cs = 'varspadesuit' } -- white spade suit
+ , { code = 0x02665, char = '♥', class = 'ord', cs = 'varheartsuit' } -- black heart suit
+ , { code = 0x02666, char = '♦', class = 'ord', cs = 'vardiamondsuit' } -- black diamond suit
+ , { code = 0x02667, char = '♧', class = 'ord', cs = 'varclubsuit' } -- white club suit
+ , { code = 0x02669, char = '♩', class = 'ord', cs = 'quarternote' } -- quarter note
+ , { code = 0x0266A, char = '♪', class = 'ord', cs = 'eighthnote' } -- eighth note
+ , { code = 0x0266B, char = '♫', class = 'ord', cs = 'twonotes' } -- beamed eighth notes
+ , { code = 0x0266D, char = '♭', class = 'ord', cs = 'flat' } -- music flat sign
+ , { code = 0x0266E, char = '♮', class = 'ord', cs = 'natural' } -- music natural sign
+ , { code = 0x0266F, char = '♯', class = 'ord', cs = 'sharp' } -- music sharp sign
+ , { code = 0x0267E, char = '♾', class = 'ord', cs = 'acidfree' } -- permanent paper sign
+ , { code = 0x02680, char = '⚀', class = 'ord', cs = 'dicei' } -- die face-1
+ , { code = 0x02681, char = '⚁', class = 'ord', cs = 'diceii' } -- die face-2
+ , { code = 0x02682, char = '⚂', class = 'ord', cs = 'diceiii' } -- die face-3
+ , { code = 0x02683, char = '⚃', class = 'ord', cs = 'diceiv' } -- die face-4
+ , { code = 0x02684, char = '⚄', class = 'ord', cs = 'dicev' } -- die face-5
+ , { code = 0x02685, char = '⚅', class = 'ord', cs = 'dicevi' } -- die face-6
+ , { code = 0x02686, char = '⚆', class = 'ord', cs = 'circledrightdot' } -- white circle with dot right
+ , { code = 0x02687, char = '⚇', class = 'ord', cs = 'circledtwodots' } -- white circle with two dots
+ , { code = 0x02688, char = '⚈', class = 'ord', cs = 'blackcircledrightdot' } -- black circle with white dot right
+ , { code = 0x02689, char = '⚉', class = 'ord', cs = 'blackcircledtwodots' } -- black circle with two white dots
+ , { code = 0x026A5, char = '⚥', class = 'ord', cs = 'Hermaphrodite' } -- male and female sign
+ , { code = 0x026AA, char = '⚪', class = 'ord', cs = 'mdwhtcircle' } -- medium white circle
+ , { code = 0x026AB, char = '⚫', class = 'ord', cs = 'mdblkcircle' } -- medium black circle
+ , { code = 0x026AC, char = '⚬', class = 'ord', cs = 'mdsmwhtcircle' } -- medium small white circle
+ , { code = 0x026B2, char = '⚲', class = 'ord', cs = 'neuter' } -- neuter
+ , { code = 0x02713, char = '✓', class = 'ord', cs = 'checkmark' } -- check mark
+ , { code = 0x02720, char = '✠', class = 'ord', cs = 'maltese' } -- maltese cross
+ , { code = 0x0272A, char = '✪', class = 'ord', cs = 'circledstar' } -- circled white star
+ , { code = 0x02736, char = '✶', class = 'ord', cs = 'varstar' } -- six pointed black star
+ , { code = 0x0273D, char = '✽', class = 'ord', cs = 'dingasterisk' } -- heavy teardrop-spoked asterisk
+ , { code = 0x02772, char = '❲', class = 'open', cs = 'lbrbrak' } -- light left tortoise shell bracket ornament
+ , { code = 0x02773, char = '❳', class = 'close', cs = 'rbrbrak' } -- light right tortoise shell bracket ornament
+ , { code = 0x0279B, char = '➛', class = 'ord', cs = 'draftingarrow' } -- drafting point rightwards arrow
+ , { code = 0x027C0, char = '⟀', class = 'ord', cs = 'threedangle' } -- three dimensional angle
+ , { code = 0x027C1, char = '⟁', class = 'ord', cs = 'whiteinwhitetriangle' } -- white triangle containing small white triangle
+ , { code = 0x027C2, char = '⟂', class = 'rel', cs = 'perp' } -- perpendicular
+ , { code = 0x027C3, char = '⟃', class = 'ord', cs = 'subsetcirc' } -- open subset
+ , { code = 0x027C4, char = '⟄', class = 'ord', cs = 'supsetcirc' } -- open superset
+ , { code = 0x027C5, char = '⟅', class = 'open', cs = 'lbag' } -- left s-shaped bag delimiter
+ , { code = 0x027C6, char = '⟆', class = 'close', cs = 'rbag' } -- right s-shaped bag delimiter
+ , { code = 0x027C7, char = '⟇', class = 'bin', cs = 'veedot' } -- or with dot inside
+ , { code = 0x027C8, char = '⟈', class = 'rel', cs = 'bsolhsub' } -- reverse solidus preceding subset
+ , { code = 0x027C9, char = '⟉', class = 'rel', cs = 'suphsol' } -- superset preceding solidus
+ , { code = 0x027CC, char = '⟌', class = 'radical', cs = 'longdivision' } -- long division
+ , { code = 0x027D0, char = '⟐', class = 'ord', cs = 'diamondcdot' } -- white diamond with centred dot
+ , { code = 0x027D1, char = '⟑', class = 'bin', cs = 'wedgedot' } -- and with dot
+ , { code = 0x027D2, char = '⟒', class = 'rel', cs = 'upin' } -- element of opening upwards
+ , { code = 0x027D3, char = '⟓', class = 'rel', cs = 'pullback' } -- lower right corner with dot
+ , { code = 0x027D4, char = '⟔', class = 'rel', cs = 'pushout' } -- upper left corner with dot
+ , { code = 0x027D5, char = '⟕', class = 'op', cs = 'leftouterjoin' } -- left outer join
+ , { code = 0x027D6, char = '⟖', class = 'op', cs = 'rightouterjoin' } -- right outer join
+ , { code = 0x027D7, char = '⟗', class = 'op', cs = 'fullouterjoin' } -- full outer join
+ , { code = 0x027D8, char = '⟘', class = 'op', cs = 'bigbot' } -- large up tack
+ , { code = 0x027D9, char = '⟙', class = 'op', cs = 'bigtop' } -- large down tack
+ , { code = 0x027DA, char = '⟚', class = 'rel', cs = 'DashVDash' } -- left and right double turnstile
+ , { code = 0x027DB, char = '⟛', class = 'rel', cs = 'dashVdash' } -- left and right tack
+ , { code = 0x027DC, char = '⟜', class = 'rel', cs = 'multimapinv' } -- left multimap
+ , { code = 0x027DD, char = '⟝', class = 'rel', cs = 'vlongdash' } -- long right tack
+ , { code = 0x027DE, char = '⟞', class = 'rel', cs = 'longdashv' } -- long left tack
+ , { code = 0x027DF, char = '⟟', class = 'rel', cs = 'cirbot' } -- up tack with circle above
+ , { code = 0x027E0, char = '⟠', class = 'bin', cs = 'lozengeminus' } -- lozenge divided by horizontal rule
+ , { code = 0x027E1, char = '⟡', class = 'bin', cs = 'concavediamond' } -- white concave-sided diamond
+ , { code = 0x027E2, char = '⟢', class = 'bin', cs = 'concavediamondtickleft' } -- white concave-sided diamond with leftwards tick
+ , { code = 0x027E3, char = '⟣', class = 'bin', cs = 'concavediamondtickright' } -- white concave-sided diamond with rightwards tick
+ , { code = 0x027E4, char = '⟤', class = 'bin', cs = 'whitesquaretickleft' } -- white square with leftwards tick
+ , { code = 0x027E5, char = '⟥', class = 'bin', cs = 'whitesquaretickright' } -- white square with rightwards tick
+ , { code = 0x027E6, char = '⟦', class = 'open', cs = 'lBrack' } -- mathematical left white square bracket
+ , { code = 0x027E7, char = '⟧', class = 'close', cs = 'rBrack' } -- mathematical right white square bracket
+ , { code = 0x027E8, char = '⟨', class = 'open', cs = 'langle' } -- mathematical left angle bracket
+ , { code = 0x027E9, char = '⟩', class = 'close', cs = 'rangle' } -- mathematical right angle bracket
+ , { code = 0x027EA, char = '⟪', class = 'open', cs = 'lAngle' } -- mathematical left double angle bracket
+ , { code = 0x027EB, char = '⟫', class = 'close', cs = 'rAngle' } -- mathematical right double angle bracket
+ , { code = 0x027EC, char = '⟬', class = 'open', cs = 'Lbrbrak' } -- mathematical left white tortoise shell bracket
+ , { code = 0x027ED, char = '⟭', class = 'close', cs = 'Rbrbrak' } -- mathematical right white tortoise shell bracket
+ , { code = 0x027EE, char = '⟮', class = 'open', cs = 'lgroup' } -- mathematical left flattened parenthesis
+ , { code = 0x027EF, char = '⟯', class = 'close', cs = 'rgroup' } -- mathematical right flattened parenthesis
+ , { code = 0x027F0, char = '⟰', class = 'rel', cs = 'UUparrow' } -- upwards quadruple arrow
+ , { code = 0x027F1, char = '⟱', class = 'rel', cs = 'DDownarrow' } -- downwards quadruple arrow
+ , { code = 0x027F2, char = '⟲', class = 'rel', cs = 'acwgapcirclearrow' } -- anticlockwise gapped circle arrow
+ , { code = 0x027F3, char = '⟳', class = 'rel', cs = 'cwgapcirclearrow' } -- clockwise gapped circle arrow
+ , { code = 0x027F4, char = '⟴', class = 'rel', cs = 'rightarrowonoplus' } -- right arrow with circled plus
+ , { code = 0x027F5, char = '⟵', class = 'rel', cs = 'longleftarrow' } -- long leftwards arrow
+ , { code = 0x027F6, char = '⟶', class = 'rel', cs = 'longrightarrow' } -- long rightwards arrow
+ , { code = 0x027F7, char = '⟷', class = 'rel', cs = 'longleftrightarrow' } -- long left right arrow
+ , { code = 0x027F8, char = '⟸', class = 'rel', cs = 'Longleftarrow' } -- long leftwards double arrow
+ , { code = 0x027F9, char = '⟹', class = 'rel', cs = 'Longrightarrow' } -- long rightwards double arrow
+ , { code = 0x027FA, char = '⟺', class = 'rel', cs = 'Longleftrightarrow' } -- long left right double arrow
+ , { code = 0x027FB, char = '⟻', class = 'rel', cs = 'longmapsfrom' } -- long leftwards arrow from bar
+ , { code = 0x027FC, char = '⟼', class = 'rel', cs = 'longmapsto' } -- long rightwards arrow from bar
+ , { code = 0x027FD, char = '⟽', class = 'rel', cs = 'Longmapsfrom' } -- long leftwards double arrow from bar
+ , { code = 0x027FE, char = '⟾', class = 'rel', cs = 'Longmapsto' } -- long rightwards double arrow from bar
+ , { code = 0x027FF, char = '⟿', class = 'rel', cs = 'longrightsquigarrow' } -- long rightwards squiggle arrow
+ , { code = 0x02900, char = '⤀', class = 'rel', cs = 'nvtwoheadrightarrow' } -- rightwards two-headed arrow with vertical stroke
+ , { code = 0x02901, char = '⤁', class = 'rel', cs = 'nVtwoheadrightarrow' } -- rightwards two-headed arrow with double vertical stroke
+ , { code = 0x02902, char = '⤂', class = 'rel', cs = 'nvLeftarrow' } -- leftwards double arrow with vertical stroke
+ , { code = 0x02903, char = '⤃', class = 'rel', cs = 'nvRightarrow' } -- rightwards double arrow with vertical stroke
+ , { code = 0x02904, char = '⤄', class = 'rel', cs = 'nvLeftrightarrow' } -- left right double arrow with vertical stroke
+ , { code = 0x02905, char = '⤅', class = 'rel', cs = 'twoheadmapsto' } -- rightwards two-headed arrow from bar
+ , { code = 0x02906, char = '⤆', class = 'rel', cs = 'Mapsfrom' } -- leftwards double arrow from bar
+ , { code = 0x02907, char = '⤇', class = 'rel', cs = 'Mapsto' } -- rightwards double arrow from bar
+ , { code = 0x02908, char = '⤈', class = 'rel', cs = 'downarrowbarred' } -- downwards arrow with horizontal stroke
+ , { code = 0x02909, char = '⤉', class = 'rel', cs = 'uparrowbarred' } -- upwards arrow with horizontal stroke
+ , { code = 0x0290A, char = '⤊', class = 'rel', cs = 'Uuparrow' } -- upwards triple arrow
+ , { code = 0x0290B, char = '⤋', class = 'rel', cs = 'Ddownarrow' } -- downwards triple arrow
+ , { code = 0x0290C, char = '⤌', class = 'rel', cs = 'leftbkarrow' } -- leftwards double dash arrow
+ , { code = 0x0290D, char = '⤍', class = 'rel', cs = 'rightbkarrow' } -- rightwards double dash arrow
+ , { code = 0x0290E, char = '⤎', class = 'rel', cs = 'leftdbkarrow' } -- leftwards triple dash arrow
+ , { code = 0x0290F, char = '⤏', class = 'rel', cs = 'dbkarow' } -- rightwards triple dash arrow
+ , { code = 0x02910, char = '⤐', class = 'rel', cs = 'drbkarow' } -- rightwards two-headed triple dash arrow
+ , { code = 0x02911, char = '⤑', class = 'rel', cs = 'rightdotarrow' } -- rightwards arrow with dotted stem
+ , { code = 0x02912, char = '⤒', class = 'rel', cs = 'baruparrow' } -- upwards arrow to bar
+ , { code = 0x02913, char = '⤓', class = 'rel', cs = 'downarrowbar' } -- downwards arrow to bar
+ , { code = 0x02914, char = '⤔', class = 'rel', cs = 'nvrightarrowtail' } -- rightwards arrow with tail with vertical stroke
+ , { code = 0x02915, char = '⤕', class = 'rel', cs = 'nVrightarrowtail' } -- rightwards arrow with tail with double vertical stroke
+ , { code = 0x02916, char = '⤖', class = 'rel', cs = 'twoheadrightarrowtail' } -- rightwards two-headed arrow with tail
+ , { code = 0x02917, char = '⤗', class = 'rel', cs = 'nvtwoheadrightarrowtail' } -- rightwards two-headed arrow with tail with vertical stroke
+ , { code = 0x02918, char = '⤘', class = 'rel', cs = 'nVtwoheadrightarrowtail' } -- rightwards two-headed arrow with tail with double vertical stroke
+ , { code = 0x02919, char = '⤙', class = 'rel', cs = 'lefttail' } -- leftwards arrow-tail
+ , { code = 0x0291A, char = '⤚', class = 'rel', cs = 'righttail' } -- rightwards arrow-tail
+ , { code = 0x0291B, char = '⤛', class = 'rel', cs = 'leftdbltail' } -- leftwards double arrow-tail
+ , { code = 0x0291C, char = '⤜', class = 'rel', cs = 'rightdbltail' } -- rightwards double arrow-tail
+ , { code = 0x0291D, char = '⤝', class = 'rel', cs = 'diamondleftarrow' } -- leftwards arrow to black diamond
+ , { code = 0x0291E, char = '⤞', class = 'rel', cs = 'rightarrowdiamond' } -- rightwards arrow to black diamond
+ , { code = 0x0291F, char = '⤟', class = 'rel', cs = 'diamondleftarrowbar' } -- leftwards arrow from bar to black diamond
+ , { code = 0x02920, char = '⤠', class = 'rel', cs = 'barrightarrowdiamond' } -- rightwards arrow from bar to black diamond
+ , { code = 0x02921, char = '⤡', class = 'rel', cs = 'nwsearrow' } -- north west and south east arrow
+ , { code = 0x02922, char = '⤢', class = 'rel', cs = 'neswarrow' } -- north east and south west arrow
+ , { code = 0x02923, char = '⤣', class = 'rel', cs = 'hknwarrow' } -- north west arrow with hook
+ , { code = 0x02924, char = '⤤', class = 'rel', cs = 'hknearrow' } -- north east arrow with hook
+ , { code = 0x02925, char = '⤥', class = 'rel', cs = 'hksearrow' } -- south east arrow with hook
+ , { code = 0x02926, char = '⤦', class = 'rel', cs = 'hkswarrow' } -- south west arrow with hook
+ , { code = 0x02927, char = '⤧', class = 'rel', cs = 'tona' } -- north west arrow and north east arrow
+ , { code = 0x02928, char = '⤨', class = 'rel', cs = 'toea' } -- north east arrow and south east arrow
+ , { code = 0x02929, char = '⤩', class = 'rel', cs = 'tosa' } -- south east arrow and south west arrow
+ , { code = 0x0292A, char = '⤪', class = 'rel', cs = 'towa' } -- south west arrow and north west arrow
+ , { code = 0x0292B, char = '⤫', class = 'ord', cs = 'rdiagovfdiag' } -- rising diagonal crossing falling diagonal
+ , { code = 0x0292C, char = '⤬', class = 'ord', cs = 'fdiagovrdiag' } -- falling diagonal crossing rising diagonal
+ , { code = 0x0292D, char = '⤭', class = 'ord', cs = 'seovnearrow' } -- south east arrow crossing north east arrow
+ , { code = 0x0292E, char = '⤮', class = 'ord', cs = 'neovsearrow' } -- north east arrow crossing south east arrow
+ , { code = 0x0292F, char = '⤯', class = 'ord', cs = 'fdiagovnearrow' } -- falling diagonal crossing north east arrow
+ , { code = 0x02930, char = '⤰', class = 'ord', cs = 'rdiagovsearrow' } -- rising diagonal crossing south east arrow
+ , { code = 0x02931, char = '⤱', class = 'ord', cs = 'neovnwarrow' } -- north east arrow crossing north west arrow
+ , { code = 0x02932, char = '⤲', class = 'ord', cs = 'nwovnearrow' } -- north west arrow crossing north east arrow
+ , { code = 0x02933, char = '⤳', class = 'rel', cs = 'rightcurvedarrow' } -- wave arrow pointing directly right
+ , { code = 0x02934, char = '⤴', class = 'ord', cs = 'uprightcurvearrow' } -- arrow pointing rightwards then curving upwards
+ , { code = 0x02935, char = '⤵', class = 'ord', cs = 'downrightcurvedarrow' } -- arrow pointing rightwards then curving downwards
+ , { code = 0x02936, char = '⤶', class = 'rel', cs = 'leftdowncurvedarrow' } -- arrow pointing downwards then curving leftwards
+ , { code = 0x02937, char = '⤷', class = 'rel', cs = 'rightdowncurvedarrow' } -- arrow pointing downwards then curving rightwards
+ , { code = 0x02938, char = '⤸', class = 'rel', cs = 'cwrightarcarrow' } -- right-side arc clockwise arrow
+ , { code = 0x02939, char = '⤹', class = 'rel', cs = 'acwleftarcarrow' } -- left-side arc anticlockwise arrow
+ , { code = 0x0293A, char = '⤺', class = 'rel', cs = 'acwoverarcarrow' } -- top arc anticlockwise arrow
+ , { code = 0x0293B, char = '⤻', class = 'rel', cs = 'acwunderarcarrow' } -- bottom arc anticlockwise arrow
+ , { code = 0x0293C, char = '⤼', class = 'rel', cs = 'curvearrowrightminus' } -- top arc clockwise arrow with minus
+ , { code = 0x0293D, char = '⤽', class = 'rel', cs = 'curvearrowleftplus' } -- top arc anticlockwise arrow with plus
+ , { code = 0x0293E, char = '⤾', class = 'rel', cs = 'cwundercurvearrow' } -- lower right semicircular clockwise arrow
+ , { code = 0x0293F, char = '⤿', class = 'rel', cs = 'ccwundercurvearrow' } -- lower left semicircular anticlockwise arrow
+ , { code = 0x02940, char = '⥀', class = 'rel', cs = 'acwcirclearrow' } -- anticlockwise closed circle arrow
+ , { code = 0x02941, char = '⥁', class = 'rel', cs = 'cwcirclearrow' } -- clockwise closed circle arrow
+ , { code = 0x02942, char = '⥂', class = 'rel', cs = 'rightarrowshortleftarrow' } -- rightwards arrow above short leftwards arrow
+ , { code = 0x02943, char = '⥃', class = 'rel', cs = 'leftarrowshortrightarrow' } -- leftwards arrow above short rightwards arrow
+ , { code = 0x02944, char = '⥄', class = 'rel', cs = 'shortrightarrowleftarrow' } -- short rightwards arrow above leftwards arrow
+ , { code = 0x02945, char = '⥅', class = 'rel', cs = 'rightarrowplus' } -- rightwards arrow with plus below
+ , { code = 0x02946, char = '⥆', class = 'rel', cs = 'leftarrowplus' } -- leftwards arrow with plus below
+ , { code = 0x02947, char = '⥇', class = 'rel', cs = 'rightarrowx' } -- rightwards arrow through x
+ , { code = 0x02948, char = '⥈', class = 'rel', cs = 'leftrightarrowcircle' } -- left right arrow through small circle
+ , { code = 0x02949, char = '⥉', class = 'rel', cs = 'twoheaduparrowcircle' } -- upwards two-headed arrow from small circle
+ , { code = 0x0294A, char = '⥊', class = 'rel', cs = 'leftrightharpoonupdown' } -- left barb up right barb down harpoon
+ , { code = 0x0294B, char = '⥋', class = 'rel', cs = 'leftrightharpoondownup' } -- left barb down right barb up harpoon
+ , { code = 0x0294C, char = '⥌', class = 'rel', cs = 'updownharpoonrightleft' } -- up barb right down barb left harpoon
+ , { code = 0x0294D, char = '⥍', class = 'rel', cs = 'updownharpoonleftright' } -- up barb left down barb right harpoon
+ , { code = 0x0294E, char = '⥎', class = 'rel', cs = 'leftrightharpoonupup' } -- left barb up right barb up harpoon
+ , { code = 0x0294F, char = '⥏', class = 'rel', cs = 'updownharpoonrightright' } -- up barb right down barb right harpoon
+ , { code = 0x02950, char = '⥐', class = 'rel', cs = 'leftrightharpoondowndown' } -- left barb down right barb down harpoon
+ , { code = 0x02951, char = '⥑', class = 'rel', cs = 'updownharpoonleftleft' } -- up barb left down barb left harpoon
+ , { code = 0x02952, char = '⥒', class = 'rel', cs = 'barleftharpoonup' } -- leftwards harpoon with barb up to bar
+ , { code = 0x02953, char = '⥓', class = 'rel', cs = 'rightharpoonupbar' } -- rightwards harpoon with barb up to bar
+ , { code = 0x02954, char = '⥔', class = 'rel', cs = 'barupharpoonright' } -- upwards harpoon with barb right to bar
+ , { code = 0x02955, char = '⥕', class = 'rel', cs = 'downharpoonrightbar' } -- downwards harpoon with barb right to bar
+ , { code = 0x02956, char = '⥖', class = 'rel', cs = 'barleftharpoondown' } -- leftwards harpoon with barb down to bar
+ , { code = 0x02957, char = '⥗', class = 'rel', cs = 'rightharpoondownbar' } -- rightwards harpoon with barb down to bar
+ , { code = 0x02958, char = '⥘', class = 'rel', cs = 'barupharpoonleft' } -- upwards harpoon with barb left to bar
+ , { code = 0x02959, char = '⥙', class = 'rel', cs = 'downharpoonleftbar' } -- downwards harpoon with barb left to bar
+ , { code = 0x0295A, char = '⥚', class = 'rel', cs = 'leftharpoonupbar' } -- leftwards harpoon with barb up from bar
+ , { code = 0x0295B, char = '⥛', class = 'rel', cs = 'barrightharpoonup' } -- rightwards harpoon with barb up from bar
+ , { code = 0x0295C, char = '⥜', class = 'rel', cs = 'upharpoonrightbar' } -- upwards harpoon with barb right from bar
+ , { code = 0x0295D, char = '⥝', class = 'rel', cs = 'bardownharpoonright' } -- downwards harpoon with barb right from bar
+ , { code = 0x0295E, char = '⥞', class = 'rel', cs = 'leftharpoondownbar' } -- leftwards harpoon with barb down from bar
+ , { code = 0x0295F, char = '⥟', class = 'rel', cs = 'barrightharpoondown' } -- rightwards harpoon with barb down from bar
+ , { code = 0x02960, char = '⥠', class = 'rel', cs = 'upharpoonleftbar' } -- upwards harpoon with barb left from bar
+ , { code = 0x02961, char = '⥡', class = 'rel', cs = 'bardownharpoonleft' } -- downwards harpoon with barb left from bar
+ , { code = 0x02962, char = '⥢', class = 'rel', cs = 'leftharpoonsupdown' } -- leftwards harpoon with barb up above leftwards harpoon with barb down
+ , { code = 0x02963, char = '⥣', class = 'rel', cs = 'upharpoonsleftright' } -- upwards harpoon with barb left beside upwards harpoon with barb right
+ , { code = 0x02964, char = '⥤', class = 'rel', cs = 'rightharpoonsupdown' } -- rightwards harpoon with barb up above rightwards harpoon with barb down
+ , { code = 0x02965, char = '⥥', class = 'rel', cs = 'downharpoonsleftright' } -- downwards harpoon with barb left beside downwards harpoon with barb right
+ , { code = 0x02966, char = '⥦', class = 'rel', cs = 'leftrightharpoonsup' } -- leftwards harpoon with barb up above rightwards harpoon with barb up
+ , { code = 0x02967, char = '⥧', class = 'rel', cs = 'leftrightharpoonsdown' } -- leftwards harpoon with barb down above rightwards harpoon with barb down
+ , { code = 0x02968, char = '⥨', class = 'rel', cs = 'rightleftharpoonsup' } -- rightwards harpoon with barb up above leftwards harpoon with barb up
+ , { code = 0x02969, char = '⥩', class = 'rel', cs = 'rightleftharpoonsdown' } -- rightwards harpoon with barb down above leftwards harpoon with barb down
+ , { code = 0x0296A, char = '⥪', class = 'rel', cs = 'leftharpoonupdash' } -- leftwards harpoon with barb up above long dash
+ , { code = 0x0296B, char = '⥫', class = 'rel', cs = 'dashleftharpoondown' } -- leftwards harpoon with barb down below long dash
+ , { code = 0x0296C, char = '⥬', class = 'rel', cs = 'rightharpoonupdash' } -- rightwards harpoon with barb up above long dash
+ , { code = 0x0296D, char = '⥭', class = 'rel', cs = 'dashrightharpoondown' } -- rightwards harpoon with barb down below long dash
+ , { code = 0x0296E, char = '⥮', class = 'rel', cs = 'updownharpoonsleftright' } -- upwards harpoon with barb left beside downwards harpoon with barb right
+ , { code = 0x0296F, char = '⥯', class = 'rel', cs = 'downupharpoonsleftright' } -- downwards harpoon with barb left beside upwards harpoon with barb right
+ , { code = 0x02970, char = '⥰', class = 'rel', cs = 'rightimply' } -- right double arrow with rounded head
+ , { code = 0x02971, char = '⥱', class = 'rel', cs = 'equalrightarrow' } -- equals sign above rightwards arrow
+ , { code = 0x02972, char = '⥲', class = 'rel', cs = 'similarrightarrow' } -- tilde operator above rightwards arrow
+ , { code = 0x02973, char = '⥳', class = 'rel', cs = 'leftarrowsimilar' } -- leftwards arrow above tilde operator
+ , { code = 0x02974, char = '⥴', class = 'rel', cs = 'rightarrowsimilar' } -- rightwards arrow above tilde operator
+ , { code = 0x02975, char = '⥵', class = 'rel', cs = 'rightarrowapprox' } -- rightwards arrow above almost equal to
+ , { code = 0x02976, char = '⥶', class = 'rel', cs = 'ltlarr' } -- less-than above leftwards arrow
+ , { code = 0x02977, char = '⥷', class = 'rel', cs = 'leftarrowless' } -- leftwards arrow through less-than
+ , { code = 0x02978, char = '⥸', class = 'rel', cs = 'gtrarr' } -- greater-than above rightwards arrow
+ , { code = 0x02979, char = '⥹', class = 'rel', cs = 'subrarr' } -- subset above rightwards arrow
+ , { code = 0x0297A, char = '⥺', class = 'rel', cs = 'leftarrowsubset' } -- leftwards arrow through subset
+ , { code = 0x0297B, char = '⥻', class = 'rel', cs = 'suplarr' } -- superset above leftwards arrow
+ , { code = 0x0297C, char = '⥼', class = 'rel', cs = 'leftfishtail' } -- left fish tail
+ , { code = 0x0297D, char = '⥽', class = 'rel', cs = 'rightfishtail' } -- right fish tail
+ , { code = 0x0297E, char = '⥾', class = 'rel', cs = 'upfishtail' } -- up fish tail
+ , { code = 0x0297F, char = '⥿', class = 'rel', cs = 'downfishtail' } -- down fish tail
+ , { code = 0x02980, char = '⦀', class = 'fence', cs = 'Vvert' } -- triple vertical bar delimiter
+ , { code = 0x02981, char = '⦁', class = 'ord', cs = 'mdsmblkcircle' } -- z notation spot
+ , { code = 0x02982, char = '⦂', class = 'bin', cs = 'typecolon' } -- z notation type colon
+ , { code = 0x02983, char = '⦃', class = 'open', cs = 'lBrace' } -- left white curly bracket
+ , { code = 0x02984, char = '⦄', class = 'close', cs = 'rBrace' } -- right white curly bracket
+ , { code = 0x02985, char = '⦅', class = 'open', cs = 'lParen' } -- left white parenthesis
+ , { code = 0x02986, char = '⦆', class = 'close', cs = 'rParen' } -- right white parenthesis
+ , { code = 0x02987, char = '⦇', class = 'open', cs = 'llparenthesis' } -- z notation left image bracket
+ , { code = 0x02988, char = '⦈', class = 'close', cs = 'rrparenthesis' } -- z notation right image bracket
+ , { code = 0x02989, char = '⦉', class = 'open', cs = 'llangle' } -- z notation left binding bracket
+ , { code = 0x0298A, char = '⦊', class = 'close', cs = 'rrangle' } -- z notation right binding bracket
+ , { code = 0x0298B, char = '⦋', class = 'open', cs = 'lbrackubar' } -- left square bracket with underbar
+ , { code = 0x0298C, char = '⦌', class = 'close', cs = 'rbrackubar' } -- right square bracket with underbar
+ , { code = 0x0298D, char = '⦍', class = 'open', cs = 'lbrackultick' } -- left square bracket with tick in top corner
+ , { code = 0x0298E, char = '⦎', class = 'close', cs = 'rbracklrtick' } -- right square bracket with tick in bottom corner
+ , { code = 0x0298F, char = '⦏', class = 'open', cs = 'lbracklltick' } -- left square bracket with tick in bottom corner
+ , { code = 0x02990, char = '⦐', class = 'close', cs = 'rbrackurtick' } -- right square bracket with tick in top corner
+ , { code = 0x02991, char = '⦑', class = 'open', cs = 'langledot' } -- left angle bracket with dot
+ , { code = 0x02992, char = '⦒', class = 'close', cs = 'rangledot' } -- right angle bracket with dot
+ , { code = 0x02993, char = '⦓', class = 'open', cs = 'lparenless' } -- left arc less-than bracket
+ , { code = 0x02994, char = '⦔', class = 'close', cs = 'rparengtr' } -- right arc greater-than bracket
+ , { code = 0x02995, char = '⦕', class = 'open', cs = 'Lparengtr' } -- double left arc greater-than bracket
+ , { code = 0x02996, char = '⦖', class = 'close', cs = 'Rparenless' } -- double right arc less-than bracket
+ , { code = 0x02997, char = '⦗', class = 'open', cs = 'lblkbrbrak' } -- left black tortoise shell bracket
+ , { code = 0x02998, char = '⦘', class = 'close', cs = 'rblkbrbrak' } -- right black tortoise shell bracket
+ , { code = 0x02999, char = '⦙', class = 'ord', cs = 'fourvdots' } -- dotted fence
+ , { code = 0x0299A, char = '⦚', class = 'ord', cs = 'vzigzag' } -- vertical zigzag line
+ , { code = 0x0299B, char = '⦛', class = 'ord', cs = 'measuredangleleft' } -- measured angle opening left
+ , { code = 0x0299C, char = '⦜', class = 'ord', cs = 'rightanglesqr' } -- right angle variant with square
+ , { code = 0x0299D, char = '⦝', class = 'ord', cs = 'rightanglemdot' } -- measured right angle with dot
+ , { code = 0x0299E, char = '⦞', class = 'ord', cs = 'angles' } -- angle with s inside
+ , { code = 0x0299F, char = '⦟', class = 'ord', cs = 'angdnr' } -- acute angle
+ , { code = 0x029A0, char = '⦠', class = 'ord', cs = 'gtlpar' } -- spherical angle opening left
+ , { code = 0x029A1, char = '⦡', class = 'ord', cs = 'sphericalangleup' } -- spherical angle opening up
+ , { code = 0x029A2, char = '⦢', class = 'ord', cs = 'turnangle' } -- turned angle
+ , { code = 0x029A3, char = '⦣', class = 'ord', cs = 'revangle' } -- reversed angle
+ , { code = 0x029A4, char = '⦤', class = 'ord', cs = 'angleubar' } -- angle with underbar
+ , { code = 0x029A5, char = '⦥', class = 'ord', cs = 'revangleubar' } -- reversed angle with underbar
+ , { code = 0x029A6, char = '⦦', class = 'ord', cs = 'wideangledown' } -- oblique angle opening up
+ , { code = 0x029A7, char = '⦧', class = 'ord', cs = 'wideangleup' } -- oblique angle opening down
+ , { code = 0x029A8, char = '⦨', class = 'ord', cs = 'measanglerutone' } -- measured angle with open arm ending in arrow pointing up and right
+ , { code = 0x029A9, char = '⦩', class = 'ord', cs = 'measanglelutonw' } -- measured angle with open arm ending in arrow pointing up and left
+ , { code = 0x029AA, char = '⦪', class = 'ord', cs = 'measanglerdtose' } -- measured angle with open arm ending in arrow pointing down and right
+ , { code = 0x029AB, char = '⦫', class = 'ord', cs = 'measangleldtosw' } -- measured angle with open arm ending in arrow pointing down and left
+ , { code = 0x029AC, char = '⦬', class = 'ord', cs = 'measangleurtone' } -- measured angle with open arm ending in arrow pointing right and up
+ , { code = 0x029AD, char = '⦭', class = 'ord', cs = 'measangleultonw' } -- measured angle with open arm ending in arrow pointing left and up
+ , { code = 0x029AE, char = '⦮', class = 'ord', cs = 'measangledrtose' } -- measured angle with open arm ending in arrow pointing right and down
+ , { code = 0x029AF, char = '⦯', class = 'ord', cs = 'measangledltosw' } -- measured angle with open arm ending in arrow pointing left and down
+ , { code = 0x029B0, char = '⦰', class = 'ord', cs = 'revemptyset' } -- reversed empty set
+ , { code = 0x029B1, char = '⦱', class = 'ord', cs = 'emptysetobar' } -- empty set with overbar
+ , { code = 0x029B2, char = '⦲', class = 'ord', cs = 'emptysetocirc' } -- empty set with small circle above
+ , { code = 0x029B3, char = '⦳', class = 'ord', cs = 'emptysetoarr' } -- empty set with right arrow above
+ , { code = 0x029B4, char = '⦴', class = 'ord', cs = 'emptysetoarrl' } -- empty set with left arrow above
+ , { code = 0x029B5, char = '⦵', class = 'bin', cs = 'circlehbar' } -- circle with horizontal bar
+ , { code = 0x029B6, char = '⦶', class = 'bin', cs = 'circledvert' } -- circled vertical bar
+ , { code = 0x029B7, char = '⦷', class = 'bin', cs = 'circledparallel' } -- circled parallel
+ , { code = 0x029B8, char = '⦸', class = 'bin', cs = 'obslash' } -- circled reverse solidus
+ , { code = 0x029B9, char = '⦹', class = 'bin', cs = 'operp' } -- circled perpendicular
+ , { code = 0x029BA, char = '⦺', class = 'ord', cs = 'obot' } -- circle divided by horizontal bar and top half divided by vertical bar
+ , { code = 0x029BB, char = '⦻', class = 'ord', cs = 'olcross' } -- circle with superimposed x
+ , { code = 0x029BC, char = '⦼', class = 'ord', cs = 'odotslashdot' } -- circled anticlockwise-rotated division sign
+ , { code = 0x029BD, char = '⦽', class = 'ord', cs = 'uparrowoncircle' } -- up arrow through circle
+ , { code = 0x029BE, char = '⦾', class = 'ord', cs = 'circledwhitebullet' } -- circled white bullet
+ , { code = 0x029BF, char = '⦿', class = 'ord', cs = 'circledbullet' } -- circled bullet
+ , { code = 0x029C0, char = '⧀', class = 'bin', cs = 'olessthan' } -- circled less-than
+ , { code = 0x029C1, char = '⧁', class = 'bin', cs = 'ogreaterthan' } -- circled greater-than
+ , { code = 0x029C2, char = '⧂', class = 'ord', cs = 'cirscir' } -- circle with small circle to the right
+ , { code = 0x029C3, char = '⧃', class = 'ord', cs = 'cirE' } -- circle with two horizontal strokes to the right
+ , { code = 0x029C4, char = '⧄', class = 'bin', cs = 'boxdiag' } -- squared rising diagonal slash
+ , { code = 0x029C5, char = '⧅', class = 'bin', cs = 'boxbslash' } -- squared falling diagonal slash
+ , { code = 0x029C6, char = '⧆', class = 'bin', cs = 'boxast' } -- squared asterisk
+ , { code = 0x029C7, char = '⧇', class = 'bin', cs = 'boxcircle' } -- squared small circle
+ , { code = 0x029C8, char = '⧈', class = 'bin', cs = 'boxbox' } -- squared square
+ , { code = 0x029C9, char = '⧉', class = 'ord', cs = 'boxonbox' } -- two joined squares
+ , { code = 0x029CA, char = '⧊', class = 'ord', cs = 'triangleodot' } -- triangle with dot above
+ , { code = 0x029CB, char = '⧋', class = 'ord', cs = 'triangleubar' } -- triangle with underbar
+ , { code = 0x029CC, char = '⧌', class = 'ord', cs = 'triangles' } -- s in triangle
+ , { code = 0x029CD, char = '⧍', class = 'bin', cs = 'triangleserifs' } -- triangle with serifs at bottom
+ , { code = 0x029CE, char = '⧎', class = 'rel', cs = 'rtriltri' } -- right triangle above left triangle
+ , { code = 0x029CF, char = '⧏', class = 'rel', cs = 'ltrivb' } -- left triangle beside vertical bar
+ , { code = 0x029D0, char = '⧐', class = 'rel', cs = 'vbrtri' } -- vertical bar beside right triangle
+ , { code = 0x029D1, char = '⧑', class = 'rel', cs = 'lfbowtie' } -- bowtie with left half black
+ , { code = 0x029D2, char = '⧒', class = 'rel', cs = 'rfbowtie' } -- bowtie with right half black
+ , { code = 0x029D3, char = '⧓', class = 'rel', cs = 'fbowtie' } -- black bowtie
+ , { code = 0x029D4, char = '⧔', class = 'rel', cs = 'lftimes' } -- times with left half black
+ , { code = 0x029D5, char = '⧕', class = 'rel', cs = 'rftimes' } -- times with right half black
+ , { code = 0x029D6, char = '⧖', class = 'bin', cs = 'hourglass' } -- white hourglass
+ , { code = 0x029D7, char = '⧗', class = 'bin', cs = 'blackhourglass' } -- black hourglass
+ , { code = 0x029D8, char = '⧘', class = 'open', cs = 'lvzigzag' } -- left wiggly fence
+ , { code = 0x029D9, char = '⧙', class = 'close', cs = 'rvzigzag' } -- right wiggly fence
+ , { code = 0x029DA, char = '⧚', class = 'open', cs = 'Lvzigzag' } -- left double wiggly fence
+ , { code = 0x029DB, char = '⧛', class = 'close', cs = 'Rvzigzag' } -- right double wiggly fence
+ , { code = 0x029DC, char = '⧜', class = 'ord', cs = 'iinfin' } -- incomplete infinity
+ , { code = 0x029DD, char = '⧝', class = 'ord', cs = 'tieinfty' } -- tie over infinity
+ , { code = 0x029DE, char = '⧞', class = 'ord', cs = 'nvinfty' } -- infinity negated with vertical bar
+ , { code = 0x029DF, char = '⧟', class = 'rel', cs = 'dualmap' } -- double-ended multimap
+ , { code = 0x029E0, char = '⧠', class = 'ord', cs = 'laplac' } -- square with contoured outline
+ , { code = 0x029E1, char = '⧡', class = 'rel', cs = 'lrtriangleeq' } -- increases as
+ , { code = 0x029E2, char = '⧢', class = 'bin', cs = 'shuffle' } -- shuffle product
+ , { code = 0x029E3, char = '⧣', class = 'rel', cs = 'eparsl' } -- equals sign and slanted parallel
+ , { code = 0x029E4, char = '⧤', class = 'rel', cs = 'smeparsl' } -- equals sign and slanted parallel with tilde above
+ , { code = 0x029E5, char = '⧥', class = 'rel', cs = 'eqvparsl' } -- identical to and slanted parallel
+ , { code = 0x029E6, char = '⧦', class = 'rel', cs = 'gleichstark' } -- gleich stark
+ , { code = 0x029E7, char = '⧧', class = 'ord', cs = 'thermod' } -- thermodynamic
+ , { code = 0x029E8, char = '⧨', class = 'ord', cs = 'downtriangleleftblack' } -- down-pointing triangle with left half black
+ , { code = 0x029E9, char = '⧩', class = 'ord', cs = 'downtrianglerightblack' } -- down-pointing triangle with right half black
+ , { code = 0x029EA, char = '⧪', class = 'ord', cs = 'blackdiamonddownarrow' } -- black diamond with down arrow
+ , { code = 0x029EB, char = '⧫', class = 'bin', cs = 'mdlgblklozenge' } -- black lozenge
+ , { code = 0x029EC, char = '⧬', class = 'ord', cs = 'circledownarrow' } -- white circle with down arrow
+ , { code = 0x029ED, char = '⧭', class = 'ord', cs = 'blackcircledownarrow' } -- black circle with down arrow
+ , { code = 0x029EE, char = '⧮', class = 'ord', cs = 'errbarsquare' } -- error-barred white square
+ , { code = 0x029EF, char = '⧯', class = 'ord', cs = 'errbarblacksquare' } -- error-barred black square
+ , { code = 0x029F0, char = '⧰', class = 'ord', cs = 'errbardiamond' } -- error-barred white diamond
+ , { code = 0x029F1, char = '⧱', class = 'ord', cs = 'errbarblackdiamond' } -- error-barred black diamond
+ , { code = 0x029F2, char = '⧲', class = 'ord', cs = 'errbarcircle' } -- error-barred white circle
+ , { code = 0x029F3, char = '⧳', class = 'ord', cs = 'errbarblackcircle' } -- error-barred black circle
+ , { code = 0x029F4, char = '⧴', class = 'rel', cs = 'ruledelayed' } -- rule-delayed
+ , { code = 0x029F5, char = '⧵', class = 'bin', cs = 'setminus' } -- reverse solidus operator
+ , { code = 0x029F6, char = '⧶', class = 'bin', cs = 'dsol' } -- solidus with overbar
+ , { code = 0x029F7, char = '⧷', class = 'bin', cs = 'rsolbar' } -- reverse solidus with horizontal stroke
+ , { code = 0x029F8, char = '⧸', class = 'op', cs = 'xsol' } -- big solidus
+ , { code = 0x029F9, char = '⧹', class = 'op', cs = 'xbsol' } -- big reverse solidus
+ , { code = 0x029FA, char = '⧺', class = 'bin', cs = 'doubleplus' } -- double plus
+ , { code = 0x029FB, char = '⧻', class = 'bin', cs = 'tripleplus' } -- triple plus
+ , { code = 0x029FC, char = '⧼', class = 'open', cs = 'lcurvyangle' } -- left-pointing curved angle bracket
+ , { code = 0x029FD, char = '⧽', class = 'close', cs = 'rcurvyangle' } -- right-pointing curved angle bracket
+ , { code = 0x029FE, char = '⧾', class = 'bin', cs = 'tplus' } -- tiny
+ , { code = 0x029FF, char = '⧿', class = 'bin', cs = 'tminus' } -- miny
+ , { code = 0x02A00, char = '⨀', class = 'op', cs = 'bigodot' } -- n-ary circled dot operator
+ , { code = 0x02A01, char = '⨁', class = 'op', cs = 'bigoplus' } -- n-ary circled plus operator
+ , { code = 0x02A02, char = '⨂', class = 'op', cs = 'bigotimes' } -- n-ary circled times operator
+ , { code = 0x02A03, char = '⨃', class = 'op', cs = 'bigcupdot' } -- n-ary union operator with dot
+ , { code = 0x02A04, char = '⨄', class = 'op', cs = 'biguplus' } -- n-ary union operator with plus
+ , { code = 0x02A05, char = '⨅', class = 'op', cs = 'bigsqcap' } -- n-ary square intersection operator
+ , { code = 0x02A06, char = '⨆', class = 'op', cs = 'bigsqcup' } -- n-ary square union operator
+ , { code = 0x02A07, char = '⨇', class = 'op', cs = 'conjquant' } -- two logical and operator
+ , { code = 0x02A08, char = '⨈', class = 'op', cs = 'disjquant' } -- two logical or operator
+ , { code = 0x02A09, char = '⨉', class = 'op', cs = 'bigtimes' } -- n-ary times operator
+ , { code = 0x02A0A, char = '⨊', class = 'op', cs = 'modtwosum' } -- modulo two sum
+ , { code = 0x02A0B, char = '⨋', class = 'op', cs = 'sumint' } -- summation with integral
+ , { code = 0x02A0C, char = '⨌', class = 'op', cs = 'iiiint' } -- quadruple integral operator
+ , { code = 0x02A0D, char = '⨍', class = 'op', cs = 'intbar' } -- finite part integral
+ , { code = 0x02A0E, char = '⨎', class = 'op', cs = 'intBar' } -- integral with double stroke
+ , { code = 0x02A0F, char = '⨏', class = 'op', cs = 'fint' } -- integral average with slash
+ , { code = 0x02A10, char = '⨐', class = 'op', cs = 'cirfnint' } -- circulation function
+ , { code = 0x02A11, char = '⨑', class = 'op', cs = 'awint' } -- anticlockwise integration
+ , { code = 0x02A12, char = '⨒', class = 'op', cs = 'rppolint' } -- line integration with rectangular path around pole
+ , { code = 0x02A13, char = '⨓', class = 'op', cs = 'scpolint' } -- line integration with semicircular path around pole
+ , { code = 0x02A14, char = '⨔', class = 'op', cs = 'npolint' } -- line integration not including the pole
+ , { code = 0x02A15, char = '⨕', class = 'op', cs = 'pointint' } -- integral around a point operator
+ , { code = 0x02A16, char = '⨖', class = 'op', cs = 'sqint' } -- quaternion integral operator
+ , { code = 0x02A17, char = '⨗', class = 'op', cs = 'intlarhk' } -- integral with leftwards arrow with hook
+ , { code = 0x02A18, char = '⨘', class = 'op', cs = 'intx' } -- integral with times sign
+ , { code = 0x02A19, char = '⨙', class = 'op', cs = 'intcap' } -- integral with intersection
+ , { code = 0x02A1A, char = '⨚', class = 'op', cs = 'intcup' } -- integral with union
+ , { code = 0x02A1B, char = '⨛', class = 'op', cs = 'upint' } -- integral with overbar
+ , { code = 0x02A1C, char = '⨜', class = 'op', cs = 'lowint' } -- integral with underbar
+ , { code = 0x02A1D, char = '⨝', class = 'op', cs = 'Join' } -- join
+ , { code = 0x02A1E, char = '⨞', class = 'op', cs = 'bigtriangleleft' } -- large left triangle operator
+ , { code = 0x02A1F, char = '⨟', class = 'op', cs = 'zcmp' } -- z notation schema composition
+ , { code = 0x02A20, char = '⨠', class = 'op', cs = 'zpipe' } -- z notation schema piping
+ , { code = 0x02A21, char = '⨡', class = 'op', cs = 'zproject' } -- z notation schema projection
+ , { code = 0x02A22, char = '⨢', class = 'bin', cs = 'ringplus' } -- plus sign with small circle above
+ , { code = 0x02A23, char = '⨣', class = 'bin', cs = 'plushat' } -- plus sign with circumflex accent above
+ , { code = 0x02A24, char = '⨤', class = 'bin', cs = 'simplus' } -- plus sign with tilde above
+ , { code = 0x02A25, char = '⨥', class = 'bin', cs = 'plusdot' } -- plus sign with dot below
+ , { code = 0x02A26, char = '⨦', class = 'bin', cs = 'plussim' } -- plus sign with tilde below
+ , { code = 0x02A27, char = '⨧', class = 'bin', cs = 'plussubtwo' } -- plus sign with subscript two
+ , { code = 0x02A28, char = '⨨', class = 'bin', cs = 'plustrif' } -- plus sign with black triangle
+ , { code = 0x02A29, char = '⨩', class = 'bin', cs = 'commaminus' } -- minus sign with comma above
+ , { code = 0x02A2A, char = '⨪', class = 'bin', cs = 'minusdot' } -- minus sign with dot below
+ , { code = 0x02A2B, char = '⨫', class = 'bin', cs = 'minusfdots' } -- minus sign with falling dots
+ , { code = 0x02A2C, char = '⨬', class = 'bin', cs = 'minusrdots' } -- minus sign with rising dots
+ , { code = 0x02A2D, char = '⨭', class = 'bin', cs = 'opluslhrim' } -- plus sign in left half circle
+ , { code = 0x02A2E, char = '⨮', class = 'bin', cs = 'oplusrhrim' } -- plus sign in right half circle
+ , { code = 0x02A2F, char = '⨯', class = 'bin', cs = 'vectimes' } -- vector or cross product
+ , { code = 0x02A30, char = '⨰', class = 'bin', cs = 'dottimes' } -- multiplication sign with dot above
+ , { code = 0x02A31, char = '⨱', class = 'bin', cs = 'timesbar' } -- multiplication sign with underbar
+ , { code = 0x02A32, char = '⨲', class = 'bin', cs = 'btimes' } -- semidirect product with bottom closed
+ , { code = 0x02A33, char = '⨳', class = 'bin', cs = 'smashtimes' } -- smash product
+ , { code = 0x02A34, char = '⨴', class = 'bin', cs = 'otimeslhrim' } -- multiplication sign in left half circle
+ , { code = 0x02A35, char = '⨵', class = 'bin', cs = 'otimesrhrim' } -- multiplication sign in right half circle
+ , { code = 0x02A36, char = '⨶', class = 'bin', cs = 'otimeshat' } -- circled multiplication sign with circumflex accent
+ , { code = 0x02A37, char = '⨷', class = 'bin', cs = 'Otimes' } -- multiplication sign in double circle
+ , { code = 0x02A38, char = '⨸', class = 'bin', cs = 'odiv' } -- circled division sign
+ , { code = 0x02A39, char = '⨹', class = 'bin', cs = 'triangleplus' } -- plus sign in triangle
+ , { code = 0x02A3A, char = '⨺', class = 'bin', cs = 'triangleminus' } -- minus sign in triangle
+ , { code = 0x02A3B, char = '⨻', class = 'bin', cs = 'triangletimes' } -- multiplication sign in triangle
+ , { code = 0x02A3C, char = '⨼', class = 'bin', cs = 'intprod' } -- interior product
+ , { code = 0x02A3D, char = '⨽', class = 'bin', cs = 'intprodr' } -- righthand interior product
+ , { code = 0x02A3E, char = '⨾', class = 'bin', cs = 'fcmp' } -- z notation relational composition
+ , { code = 0x02A3F, char = '⨿', class = 'bin', cs = 'amalg' } -- amalgamation or coproduct
+ , { code = 0x02A40, char = '⩀', class = 'bin', cs = 'capdot' } -- intersection with dot
+ , { code = 0x02A41, char = '⩁', class = 'bin', cs = 'uminus' } -- union with minus sign
+ , { code = 0x02A42, char = '⩂', class = 'bin', cs = 'barcup' } -- union with overbar
+ , { code = 0x02A43, char = '⩃', class = 'bin', cs = 'barcap' } -- intersection with overbar
+ , { code = 0x02A44, char = '⩄', class = 'bin', cs = 'capwedge' } -- intersection with logical and
+ , { code = 0x02A45, char = '⩅', class = 'bin', cs = 'cupvee' } -- union with logical or
+ , { code = 0x02A46, char = '⩆', class = 'bin', cs = 'cupovercap' } -- union above intersection
+ , { code = 0x02A47, char = '⩇', class = 'bin', cs = 'capovercup' } -- intersection above union
+ , { code = 0x02A48, char = '⩈', class = 'bin', cs = 'cupbarcap' } -- union above bar above intersection
+ , { code = 0x02A49, char = '⩉', class = 'bin', cs = 'capbarcup' } -- intersection above bar above union
+ , { code = 0x02A4A, char = '⩊', class = 'bin', cs = 'twocups' } -- union beside and joined with union
+ , { code = 0x02A4B, char = '⩋', class = 'bin', cs = 'twocaps' } -- intersection beside and joined with intersection
+ , { code = 0x02A4C, char = '⩌', class = 'bin', cs = 'closedvarcup' } -- closed union with serifs
+ , { code = 0x02A4D, char = '⩍', class = 'bin', cs = 'closedvarcap' } -- closed intersection with serifs
+ , { code = 0x02A4E, char = '⩎', class = 'bin', cs = 'Sqcap' } -- double square intersection
+ , { code = 0x02A4F, char = '⩏', class = 'bin', cs = 'Sqcup' } -- double square union
+ , { code = 0x02A50, char = '⩐', class = 'bin', cs = 'closedvarcupsmashprod' } -- closed union with serifs and smash product
+ , { code = 0x02A51, char = '⩑', class = 'bin', cs = 'wedgeodot' } -- logical and with dot above
+ , { code = 0x02A52, char = '⩒', class = 'bin', cs = 'veeodot' } -- logical or with dot above
+ , { code = 0x02A53, char = '⩓', class = 'bin', cs = 'Wedge' } -- double logical and
+ , { code = 0x02A54, char = '⩔', class = 'bin', cs = 'Vee' } -- double logical or
+ , { code = 0x02A55, char = '⩕', class = 'bin', cs = 'wedgeonwedge' } -- two intersecting logical and
+ , { code = 0x02A56, char = '⩖', class = 'bin', cs = 'veeonvee' } -- two intersecting logical or
+ , { code = 0x02A57, char = '⩗', class = 'bin', cs = 'bigslopedvee' } -- sloping large or
+ , { code = 0x02A58, char = '⩘', class = 'bin', cs = 'bigslopedwedge' } -- sloping large and
+ , { code = 0x02A59, char = '⩙', class = 'rel', cs = 'veeonwedge' } -- logical or overlapping logical and
+ , { code = 0x02A5A, char = '⩚', class = 'bin', cs = 'wedgemidvert' } -- logical and with middle stem
+ , { code = 0x02A5B, char = '⩛', class = 'bin', cs = 'veemidvert' } -- logical or with middle stem
+ , { code = 0x02A5C, char = '⩜', class = 'bin', cs = 'midbarwedge' } -- logical and with horizontal dash
+ , { code = 0x02A5D, char = '⩝', class = 'bin', cs = 'midbarvee' } -- logical or with horizontal dash
+ , { code = 0x02A5E, char = '⩞', class = 'bin', cs = 'doublebarwedge' } -- logical and with double overbar
+ , { code = 0x02A5F, char = '⩟', class = 'bin', cs = 'wedgebar' } -- logical and with underbar
+ , { code = 0x02A60, char = '⩠', class = 'bin', cs = 'wedgedoublebar' } -- logical and with double underbar
+ , { code = 0x02A61, char = '⩡', class = 'bin', cs = 'varveebar' } -- small vee with underbar
+ , { code = 0x02A62, char = '⩢', class = 'bin', cs = 'doublebarvee' } -- logical or with double overbar
+ , { code = 0x02A63, char = '⩣', class = 'bin', cs = 'veedoublebar' } -- logical or with double underbar
+ , { code = 0x02A64, char = '⩤', class = 'bin', cs = 'dsub' } -- z notation domain antirestriction
+ , { code = 0x02A65, char = '⩥', class = 'bin', cs = 'rsub' } -- z notation range antirestriction
+ , { code = 0x02A66, char = '⩦', class = 'rel', cs = 'eqdot' } -- equals sign with dot below
+ , { code = 0x02A67, char = '⩧', class = 'rel', cs = 'dotequiv' } -- identical with dot above
+ , { code = 0x02A68, char = '⩨', class = 'rel', cs = 'equivVert' } -- triple horizontal bar with double vertical stroke
+ , { code = 0x02A69, char = '⩩', class = 'rel', cs = 'equivVvert' } -- triple horizontal bar with triple vertical stroke
+ , { code = 0x02A6A, char = '⩪', class = 'rel', cs = 'dotsim' } -- tilde operator with dot above
+ , { code = 0x02A6B, char = '⩫', class = 'rel', cs = 'simrdots' } -- tilde operator with rising dots
+ , { code = 0x02A6C, char = '⩬', class = 'rel', cs = 'simminussim' } -- similar minus similar
+ , { code = 0x02A6D, char = '⩭', class = 'rel', cs = 'congdot' } -- congruent with dot above
+ , { code = 0x02A6E, char = '⩮', class = 'rel', cs = 'asteq' } -- equals with asterisk
+ , { code = 0x02A6F, char = '⩯', class = 'rel', cs = 'hatapprox' } -- almost equal to with circumflex accent
+ , { code = 0x02A70, char = '⩰', class = 'rel', cs = 'approxeqq' } -- approximately equal or equal to
+ , { code = 0x02A71, char = '⩱', class = 'bin', cs = 'eqqplus' } -- equals sign above plus sign
+ , { code = 0x02A72, char = '⩲', class = 'bin', cs = 'pluseqq' } -- plus sign above equals sign
+ , { code = 0x02A73, char = '⩳', class = 'rel', cs = 'eqqsim' } -- equals sign above tilde operator
+ , { code = 0x02A74, char = '⩴', class = 'rel', cs = 'Coloneq' } -- double colon equal
+ , { code = 0x02A75, char = '⩵', class = 'rel', cs = 'eqeq' } -- two consecutive equals signs
+ , { code = 0x02A76, char = '⩶', class = 'rel', cs = 'eqeqeq' } -- three consecutive equals signs
+ , { code = 0x02A77, char = '⩷', class = 'rel', cs = 'ddotseq' } -- equals sign with two dots above and two dots below
+ , { code = 0x02A78, char = '⩸', class = 'rel', cs = 'equivDD' } -- equivalent with four dots above
+ , { code = 0x02A79, char = '⩹', class = 'rel', cs = 'ltcir' } -- less-than with circle inside
+ , { code = 0x02A7A, char = '⩺', class = 'rel', cs = 'gtcir' } -- greater-than with circle inside
+ , { code = 0x02A7B, char = '⩻', class = 'rel', cs = 'ltquest' } -- less-than with question mark above
+ , { code = 0x02A7C, char = '⩼', class = 'rel', cs = 'gtquest' } -- greater-than with question mark above
+ , { code = 0x02A7D, char = '⩽', class = 'rel', cs = 'leqslant' } -- less-than or slanted equal to
+ , { code = 0x02A7E, char = '⩾', class = 'rel', cs = 'geqslant' } -- greater-than or slanted equal to
+ , { code = 0x02A7F, char = '⩿', class = 'rel', cs = 'lesdot' } -- less-than or slanted equal to with dot inside
+ , { code = 0x02A80, char = '⪀', class = 'rel', cs = 'gesdot' } -- greater-than or slanted equal to with dot inside
+ , { code = 0x02A81, char = '⪁', class = 'rel', cs = 'lesdoto' } -- less-than or slanted equal to with dot above
+ , { code = 0x02A82, char = '⪂', class = 'rel', cs = 'gesdoto' } -- greater-than or slanted equal to with dot above
+ , { code = 0x02A83, char = '⪃', class = 'rel', cs = 'lesdotor' } -- less-than or slanted equal to with dot above right
+ , { code = 0x02A84, char = '⪄', class = 'rel', cs = 'gesdotol' } -- greater-than or slanted equal to with dot above left
+ , { code = 0x02A85, char = '⪅', class = 'rel', cs = 'lessapprox' } -- less-than or approximate
+ , { code = 0x02A86, char = '⪆', class = 'rel', cs = 'gtrapprox' } -- greater-than or approximate
+ , { code = 0x02A87, char = '⪇', class = 'rel', cs = 'lneq' } -- less-than and single-line not equal to
+ , { code = 0x02A88, char = '⪈', class = 'rel', cs = 'gneq' } -- greater-than and single-line not equal to
+ , { code = 0x02A89, char = '⪉', class = 'rel', cs = 'lnapprox' } -- less-than and not approximate
+ , { code = 0x02A8A, char = '⪊', class = 'rel', cs = 'gnapprox' } -- greater-than and not approximate
+ , { code = 0x02A8B, char = '⪋', class = 'rel', cs = 'lesseqqgtr' } -- less-than above double-line equal above greater-than
+ , { code = 0x02A8C, char = '⪌', class = 'rel', cs = 'gtreqqless' } -- greater-than above double-line equal above less-than
+ , { code = 0x02A8D, char = '⪍', class = 'rel', cs = 'lsime' } -- less-than above similar or equal
+ , { code = 0x02A8E, char = '⪎', class = 'rel', cs = 'gsime' } -- greater-than above similar or equal
+ , { code = 0x02A8F, char = '⪏', class = 'rel', cs = 'lsimg' } -- less-than above similar above greater-than
+ , { code = 0x02A90, char = '⪐', class = 'rel', cs = 'gsiml' } -- greater-than above similar above less-than
+ , { code = 0x02A91, char = '⪑', class = 'rel', cs = 'lgE' } -- less-than above greater-than above double-line equal
+ , { code = 0x02A92, char = '⪒', class = 'rel', cs = 'glE' } -- greater-than above less-than above double-line equal
+ , { code = 0x02A93, char = '⪓', class = 'rel', cs = 'lesges' } -- less-than above slanted equal above greater-than above slanted equal
+ , { code = 0x02A94, char = '⪔', class = 'rel', cs = 'gesles' } -- greater-than above slanted equal above less-than above slanted equal
+ , { code = 0x02A95, char = '⪕', class = 'rel', cs = 'eqslantless' } -- slanted equal to or less-than
+ , { code = 0x02A96, char = '⪖', class = 'rel', cs = 'eqslantgtr' } -- slanted equal to or greater-than
+ , { code = 0x02A97, char = '⪗', class = 'rel', cs = 'elsdot' } -- slanted equal to or less-than with dot inside
+ , { code = 0x02A98, char = '⪘', class = 'rel', cs = 'egsdot' } -- slanted equal to or greater-than with dot inside
+ , { code = 0x02A99, char = '⪙', class = 'rel', cs = 'eqqless' } -- double-line equal to or less-than
+ , { code = 0x02A9A, char = '⪚', class = 'rel', cs = 'eqqgtr' } -- double-line equal to or greater-than
+ , { code = 0x02A9B, char = '⪛', class = 'rel', cs = 'eqqslantless' } -- double-line slanted equal to or less-than
+ , { code = 0x02A9C, char = '⪜', class = 'rel', cs = 'eqqslantgtr' } -- double-line slanted equal to or greater-than
+ , { code = 0x02A9D, char = '⪝', class = 'rel', cs = 'simless' } -- similar or less-than
+ , { code = 0x02A9E, char = '⪞', class = 'rel', cs = 'simgtr' } -- similar or greater-than
+ , { code = 0x02A9F, char = '⪟', class = 'rel', cs = 'simlE' } -- similar above less-than above equals sign
+ , { code = 0x02AA0, char = '⪠', class = 'rel', cs = 'simgE' } -- similar above greater-than above equals sign
+ , { code = 0x02AA1, char = '⪡', class = 'rel', cs = 'Lt' } -- double nested less-than
+ , { code = 0x02AA2, char = '⪢', class = 'rel', cs = 'Gt' } -- double nested greater-than
+ , { code = 0x02AA3, char = '⪣', class = 'rel', cs = 'partialmeetcontraction' } -- double nested less-than with underbar
+ , { code = 0x02AA4, char = '⪤', class = 'rel', cs = 'glj' } -- greater-than overlapping less-than
+ , { code = 0x02AA5, char = '⪥', class = 'rel', cs = 'gla' } -- greater-than beside less-than
+ , { code = 0x02AA6, char = '⪦', class = 'rel', cs = 'ltcc' } -- less-than closed by curve
+ , { code = 0x02AA7, char = '⪧', class = 'rel', cs = 'gtcc' } -- greater-than closed by curve
+ , { code = 0x02AA8, char = '⪨', class = 'rel', cs = 'lescc' } -- less-than closed by curve above slanted equal
+ , { code = 0x02AA9, char = '⪩', class = 'rel', cs = 'gescc' } -- greater-than closed by curve above slanted equal
+ , { code = 0x02AAA, char = '⪪', class = 'rel', cs = 'smt' } -- smaller than
+ , { code = 0x02AAB, char = '⪫', class = 'rel', cs = 'lat' } -- larger than
+ , { code = 0x02AAC, char = '⪬', class = 'rel', cs = 'smte' } -- smaller than or equal to
+ , { code = 0x02AAD, char = '⪭', class = 'rel', cs = 'late' } -- larger than or equal to
+ , { code = 0x02AAE, char = '⪮', class = 'rel', cs = 'bumpeqq' } -- equals sign with bumpy above
+ , { code = 0x02AAF, char = '⪯', class = 'rel', cs = 'preceq' } -- precedes above single-line equals sign
+ , { code = 0x02AB0, char = '⪰', class = 'rel', cs = 'succeq' } -- succeeds above single-line equals sign
+ , { code = 0x02AB1, char = '⪱', class = 'rel', cs = 'precneq' } -- precedes above single-line not equal to
+ , { code = 0x02AB2, char = '⪲', class = 'rel', cs = 'succneq' } -- succeeds above single-line not equal to
+ , { code = 0x02AB3, char = '⪳', class = 'rel', cs = 'preceqq' } -- precedes above equals sign
+ , { code = 0x02AB4, char = '⪴', class = 'rel', cs = 'succeqq' } -- succeeds above equals sign
+ , { code = 0x02AB5, char = '⪵', class = 'rel', cs = 'precneqq' } -- precedes above not equal to
+ , { code = 0x02AB6, char = '⪶', class = 'rel', cs = 'succneqq' } -- succeeds above not equal to
+ , { code = 0x02AB7, char = '⪷', class = 'rel', cs = 'precapprox' } -- precedes above almost equal to
+ , { code = 0x02AB8, char = '⪸', class = 'rel', cs = 'succapprox' } -- succeeds above almost equal to
+ , { code = 0x02AB9, char = '⪹', class = 'rel', cs = 'precnapprox' } -- precedes above not almost equal to
+ , { code = 0x02ABA, char = '⪺', class = 'rel', cs = 'succnapprox' } -- succeeds above not almost equal to
+ , { code = 0x02ABB, char = '⪻', class = 'rel', cs = 'Prec' } -- double precedes
+ , { code = 0x02ABC, char = '⪼', class = 'rel', cs = 'Succ' } -- double succeeds
+ , { code = 0x02ABD, char = '⪽', class = 'rel', cs = 'subsetdot' } -- subset with dot
+ , { code = 0x02ABE, char = '⪾', class = 'rel', cs = 'supsetdot' } -- superset with dot
+ , { code = 0x02ABF, char = '⪿', class = 'rel', cs = 'subsetplus' } -- subset with plus sign below
+ , { code = 0x02AC0, char = '⫀', class = 'rel', cs = 'supsetplus' } -- superset with plus sign below
+ , { code = 0x02AC1, char = '⫁', class = 'rel', cs = 'submult' } -- subset with multiplication sign below
+ , { code = 0x02AC2, char = '⫂', class = 'rel', cs = 'supmult' } -- superset with multiplication sign below
+ , { code = 0x02AC3, char = '⫃', class = 'rel', cs = 'subedot' } -- subset of or equal to with dot above
+ , { code = 0x02AC4, char = '⫄', class = 'rel', cs = 'supedot' } -- superset of or equal to with dot above
+ , { code = 0x02AC5, char = '⫅', class = 'rel', cs = 'subseteqq' } -- subset of above equals sign
+ , { code = 0x02AC6, char = '⫆', class = 'rel', cs = 'supseteqq' } -- superset of above equals sign
+ , { code = 0x02AC7, char = '⫇', class = 'rel', cs = 'subsim' } -- subset of above tilde operator
+ , { code = 0x02AC8, char = '⫈', class = 'rel', cs = 'supsim' } -- superset of above tilde operator
+ , { code = 0x02AC9, char = '⫉', class = 'rel', cs = 'subsetapprox' } -- subset of above almost equal to
+ , { code = 0x02ACA, char = '⫊', class = 'rel', cs = 'supsetapprox' } -- superset of above almost equal to
+ , { code = 0x02ACB, char = '⫋', class = 'rel', cs = 'subsetneqq' } -- subset of above not equal to
+ , { code = 0x02ACC, char = '⫌', class = 'rel', cs = 'supsetneqq' } -- superset of above not equal to
+ , { code = 0x02ACD, char = '⫍', class = 'rel', cs = 'lsqhook' } -- square left open box operator
+ , { code = 0x02ACE, char = '⫎', class = 'rel', cs = 'rsqhook' } -- square right open box operator
+ , { code = 0x02ACF, char = '⫏', class = 'rel', cs = 'csub' } -- closed subset
+ , { code = 0x02AD0, char = '⫐', class = 'rel', cs = 'csup' } -- closed superset
+ , { code = 0x02AD1, char = '⫑', class = 'rel', cs = 'csube' } -- closed subset or equal to
+ , { code = 0x02AD2, char = '⫒', class = 'rel', cs = 'csupe' } -- closed superset or equal to
+ , { code = 0x02AD3, char = '⫓', class = 'rel', cs = 'subsup' } -- subset above superset
+ , { code = 0x02AD4, char = '⫔', class = 'rel', cs = 'supsub' } -- superset above subset
+ , { code = 0x02AD5, char = '⫕', class = 'rel', cs = 'subsub' } -- subset above subset
+ , { code = 0x02AD6, char = '⫖', class = 'rel', cs = 'supsup' } -- superset above superset
+ , { code = 0x02AD7, char = '⫗', class = 'rel', cs = 'suphsub' } -- superset beside subset
+ , { code = 0x02AD8, char = '⫘', class = 'rel', cs = 'supdsub' } -- superset beside and joined by dash with subset
+ , { code = 0x02AD9, char = '⫙', class = 'rel', cs = 'forkv' } -- element of opening downwards
+ , { code = 0x02ADA, char = '⫚', class = 'rel', cs = 'topfork' } -- pitchfork with tee top
+ , { code = 0x02ADB, char = '⫛', class = 'rel', cs = 'mlcp' } -- transversal intersection
+ , { code = 0x02ADC, char = '⫝̸', class = 'rel', cs = 'forks' } -- forking
+ , { code = 0x02ADD, char = '⫝', class = 'rel', cs = 'forksnot' } -- nonforking
+ , { code = 0x02ADE, char = '⫞', class = 'rel', cs = 'shortlefttack' } -- short left tack
+ , { code = 0x02ADF, char = '⫟', class = 'rel', cs = 'shortdowntack' } -- short down tack
+ , { code = 0x02AE0, char = '⫠', class = 'rel', cs = 'shortuptack' } -- short up tack
+ , { code = 0x02AE1, char = '⫡', class = 'ord', cs = 'perps' } -- perpendicular with s
+ , { code = 0x02AE2, char = '⫢', class = 'rel', cs = 'vDdash' } -- vertical bar triple right turnstile
+ , { code = 0x02AE3, char = '⫣', class = 'rel', cs = 'dashV' } -- double vertical bar left turnstile
+ , { code = 0x02AE4, char = '⫤', class = 'rel', cs = 'Dashv' } -- vertical bar double left turnstile
+ , { code = 0x02AE5, char = '⫥', class = 'rel', cs = 'DashV' } -- double vertical bar double left turnstile
+ , { code = 0x02AE6, char = '⫦', class = 'rel', cs = 'varVdash' } -- long dash from left member of double vertical
+ , { code = 0x02AE7, char = '⫧', class = 'rel', cs = 'Barv' } -- short down tack with overbar
+ , { code = 0x02AE8, char = '⫨', class = 'rel', cs = 'vBar' } -- short up tack with underbar
+ , { code = 0x02AE9, char = '⫩', class = 'rel', cs = 'vBarv' } -- short up tack above short down tack
+ , { code = 0x02AEA, char = '⫪', class = 'rel', cs = 'barV' } -- double down tack
+ , { code = 0x02AEB, char = '⫫', class = 'rel', cs = 'Vbar' } -- double up tack
+ , { code = 0x02AEC, char = '⫬', class = 'rel', cs = 'Not' } -- double stroke not sign
+ , { code = 0x02AED, char = '⫭', class = 'rel', cs = 'bNot' } -- reversed double stroke not sign
+ , { code = 0x02AEE, char = '⫮', class = 'rel', cs = 'revnmid' } -- does not divide with reversed negation slash
+ , { code = 0x02AEF, char = '⫯', class = 'rel', cs = 'cirmid' } -- vertical line with circle above
+ , { code = 0x02AF0, char = '⫰', class = 'rel', cs = 'midcir' } -- vertical line with circle below
+ , { code = 0x02AF1, char = '⫱', class = 'ord', cs = 'topcir' } -- down tack with circle below
+ , { code = 0x02AF2, char = '⫲', class = 'rel', cs = 'nhpar' } -- parallel with horizontal stroke
+ , { code = 0x02AF3, char = '⫳', class = 'rel', cs = 'parsim' } -- parallel with tilde operator
+ , { code = 0x02AF4, char = '⫴', class = 'bin', cs = 'interleave' } -- triple vertical bar binary relation
+ , { code = 0x02AF5, char = '⫵', class = 'bin', cs = 'nhVvert' } -- triple vertical bar with horizontal stroke
+ , { code = 0x02AF6, char = '⫶', class = 'bin', cs = 'threedotcolon' } -- triple colon operator
+ , { code = 0x02AF7, char = '⫷', class = 'rel', cs = 'lllnest' } -- triple nested less-than
+ , { code = 0x02AF8, char = '⫸', class = 'rel', cs = 'gggnest' } -- triple nested greater-than
+ , { code = 0x02AF9, char = '⫹', class = 'rel', cs = 'leqqslant' } -- double-line slanted less-than or equal to
+ , { code = 0x02AFA, char = '⫺', class = 'rel', cs = 'geqqslant' } -- double-line slanted greater-than or equal to
+ , { code = 0x02AFB, char = '⫻', class = 'bin', cs = 'trslash' } -- triple solidus binary relation
+ , { code = 0x02AFC, char = '⫼', class = 'op', cs = 'biginterleave' } -- large triple vertical bar operator
+ , { code = 0x02AFD, char = '⫽', class = 'bin', cs = 'sslash' } -- double solidus operator
+ , { code = 0x02AFE, char = '⫾', class = 'bin', cs = 'talloblong' } -- white vertical bar
+ , { code = 0x02AFF, char = '⫿', class = 'op', cs = 'bigtalloblong' } -- n-ary white vertical bar
+ , { code = 0x02B12, char = '⬒', class = 'ord', cs = 'squaretopblack' } -- square with top half black
+ , { code = 0x02B13, char = '⬓', class = 'ord', cs = 'squarebotblack' } -- square with bottom half black
+ , { code = 0x02B14, char = '⬔', class = 'ord', cs = 'squareurblack' } -- square with upper right diagonal half black
+ , { code = 0x02B15, char = '⬕', class = 'ord', cs = 'squarellblack' } -- square with lower left diagonal half black
+ , { code = 0x02B16, char = '⬖', class = 'ord', cs = 'diamondleftblack' } -- diamond with left half black
+ , { code = 0x02B17, char = '⬗', class = 'ord', cs = 'diamondrightblack' } -- diamond with right half black
+ , { code = 0x02B18, char = '⬘', class = 'ord', cs = 'diamondtopblack' } -- diamond with top half black
+ , { code = 0x02B19, char = '⬙', class = 'ord', cs = 'diamondbotblack' } -- diamond with bottom half black
+ , { code = 0x02B1A, char = '⬚', class = 'ord', cs = 'dottedsquare' } -- dotted square
+ , { code = 0x02B1B, char = '⬛', class = 'ord', cs = 'lgblksquare' } -- black large square
+ , { code = 0x02B1C, char = '⬜', class = 'ord', cs = 'lgwhtsquare' } -- white large square
+ , { code = 0x02B1D, char = '⬝', class = 'ord', cs = 'vysmblksquare' } -- black very small square
+ , { code = 0x02B1E, char = '⬞', class = 'ord', cs = 'vysmwhtsquare' } -- white very small square
+ , { code = 0x02B1F, char = '⬟', class = 'ord', cs = 'pentagonblack' } -- black pentagon
+ , { code = 0x02B20, char = '⬠', class = 'ord', cs = 'pentagon' } -- white pentagon
+ , { code = 0x02B21, char = '⬡', class = 'ord', cs = 'varhexagon' } -- white hexagon
+ , { code = 0x02B22, char = '⬢', class = 'ord', cs = 'varhexagonblack' } -- black hexagon
+ , { code = 0x02B23, char = '⬣', class = 'ord', cs = 'hexagonblack' } -- horizontal black hexagon
+ , { code = 0x02B24, char = '⬤', class = 'ord', cs = 'lgblkcircle' } -- black large circle
+ , { code = 0x02B25, char = '⬥', class = 'ord', cs = 'mdblkdiamond' } -- black medium diamond
+ , { code = 0x02B26, char = '⬦', class = 'ord', cs = 'mdwhtdiamond' } -- white medium diamond
+ , { code = 0x02B27, char = '⬧', class = 'ord', cs = 'mdblklozenge' } -- black medium lozenge
+ , { code = 0x02B28, char = '⬨', class = 'ord', cs = 'mdwhtlozenge' } -- white medium lozenge
+ , { code = 0x02B29, char = '⬩', class = 'ord', cs = 'smblkdiamond' } -- black small diamond
+ , { code = 0x02B2A, char = '⬪', class = 'ord', cs = 'smblklozenge' } -- black small lozenge
+ , { code = 0x02B2B, char = '⬫', class = 'ord', cs = 'smwhtlozenge' } -- white small lozenge
+ , { code = 0x02B2C, char = '⬬', class = 'ord', cs = 'blkhorzoval' } -- black horizontal ellipse
+ , { code = 0x02B2D, char = '⬭', class = 'ord', cs = 'whthorzoval' } -- white horizontal ellipse
+ , { code = 0x02B2E, char = '⬮', class = 'ord', cs = 'blkvertoval' } -- black vertical ellipse
+ , { code = 0x02B2F, char = '⬯', class = 'ord', cs = 'whtvertoval' } -- white vertical ellipse
+ , { code = 0x02B30, char = '⬰', class = 'rel', cs = 'circleonleftarrow' } -- left arrow with small circle
+ , { code = 0x02B31, char = '⬱', class = 'rel', cs = 'leftthreearrows' } -- three leftwards arrows
+ , { code = 0x02B32, char = '⬲', class = 'rel', cs = 'leftarrowonoplus' } -- left arrow with circled plus
+ , { code = 0x02B33, char = '⬳', class = 'rel', cs = 'longleftsquigarrow' } -- long leftwards squiggle arrow
+ , { code = 0x02B34, char = '⬴', class = 'rel', cs = 'nvtwoheadleftarrow' } -- leftwards two-headed arrow with vertical stroke
+ , { code = 0x02B35, char = '⬵', class = 'rel', cs = 'nVtwoheadleftarrow' } -- leftwards two-headed arrow with double vertical stroke
+ , { code = 0x02B36, char = '⬶', class = 'rel', cs = 'twoheadmapsfrom' } -- leftwards two-headed arrow from bar
+ , { code = 0x02B37, char = '⬷', class = 'rel', cs = 'twoheadleftdbkarrow' } -- leftwards two-headed triple dash arrow
+ , { code = 0x02B38, char = '⬸', class = 'rel', cs = 'leftdotarrow' } -- leftwards arrow with dotted stem
+ , { code = 0x02B39, char = '⬹', class = 'rel', cs = 'nvleftarrowtail' } -- leftwards arrow with tail with vertical stroke
+ , { code = 0x02B3A, char = '⬺', class = 'rel', cs = 'nVleftarrowtail' } -- leftwards arrow with tail with double vertical stroke
+ , { code = 0x02B3B, char = '⬻', class = 'rel', cs = 'twoheadleftarrowtail' } -- leftwards two-headed arrow with tail
+ , { code = 0x02B3C, char = '⬼', class = 'rel', cs = 'nvtwoheadleftarrowtail' } -- leftwards two-headed arrow with tail with vertical stroke
+ , { code = 0x02B3D, char = '⬽', class = 'rel', cs = 'nVtwoheadleftarrowtail' } -- leftwards two-headed arrow with tail with double vertical stroke
+ , { code = 0x02B3E, char = '⬾', class = 'rel', cs = 'leftarrowx' } -- leftwards arrow through x
+ , { code = 0x02B3F, char = '⬿', class = 'rel', cs = 'leftcurvedarrow' } -- wave arrow pointing directly left
+ , { code = 0x02B40, char = '⭀', class = 'rel', cs = 'equalleftarrow' } -- equals sign above leftwards arrow
+ , { code = 0x02B41, char = '⭁', class = 'rel', cs = 'bsimilarleftarrow' } -- reverse tilde operator above leftwards arrow
+ , { code = 0x02B42, char = '⭂', class = 'rel', cs = 'leftarrowbackapprox' } -- leftwards arrow above reverse almost equal to
+ , { code = 0x02B43, char = '⭃', class = 'rel', cs = 'rightarrowgtr' } -- rightwards arrow through greater-than
+ , { code = 0x02B44, char = '⭄', class = 'rel', cs = 'rightarrowsupset' } -- rightwards arrow through superset
+ , { code = 0x02B45, char = '⭅', class = 'rel', cs = 'LLeftarrow' } -- leftwards quadruple arrow
+ , { code = 0x02B46, char = '⭆', class = 'rel', cs = 'RRightarrow' } -- rightwards quadruple arrow
+ , { code = 0x02B47, char = '⭇', class = 'rel', cs = 'bsimilarrightarrow' } -- reverse tilde operator above rightwards arrow
+ , { code = 0x02B48, char = '⭈', class = 'rel', cs = 'rightarrowbackapprox' } -- rightwards arrow above reverse almost equal to
+ , { code = 0x02B49, char = '⭉', class = 'rel', cs = 'similarleftarrow' } -- tilde operator above leftwards arrow
+ , { code = 0x02B4A, char = '⭊', class = 'rel', cs = 'leftarrowapprox' } -- leftwards arrow above almost equal to
+ , { code = 0x02B4B, char = '⭋', class = 'rel', cs = 'leftarrowbsimilar' } -- leftwards arrow above reverse tilde operator
+ , { code = 0x02B4C, char = '⭌', class = 'rel', cs = 'rightarrowbsimilar' } -- rightwards arrow above reverse tilde operator
+ , { code = 0x02B50, char = '⭐', class = 'ord', cs = 'medwhitestar' } -- white medium star
+ , { code = 0x02B51, char = '⭑', class = 'ord', cs = 'medblackstar' } -- black small star
+ , { code = 0x02B52, char = '⭒', class = 'ord', cs = 'smwhitestar' } -- white small star
+ , { code = 0x02B53, char = '⭓', class = 'ord', cs = 'rightpentagonblack' } -- black right-pointing pentagon
+ , { code = 0x02B54, char = '⭔', class = 'ord', cs = 'rightpentagon' } -- white right-pointing pentagon
+ , { code = 0x03012, char = '〒', class = 'ord', cs = 'postalmark' } -- postal mark
+ , { code = 0x03014, char = '〔', class = 'open', cs = 'lbrbrak' } -- left tortoise shell bracket
+ , { code = 0x03015, char = '〕', class = 'close', cs = 'rbrbrak' } -- right tortoise shell bracket
+ , { code = 0x03018, char = '〘', class = 'open', cs = 'Lbrbrak' } -- left white tortoise shell bracket
+ , { code = 0x03019, char = '〙', class = 'close', cs = 'Rbrbrak' } -- right white tortoise shell bracket
+ , { code = 0x03030, char = '〰', class = 'ord', cs = 'hzigzag' } -- wavy dash
+ , { code = 0x1D400, char = '𝐀', class = 'ord', cs = 'mbfA', alphabet = 'bold' } -- mathematical bold capital a
+ , { code = 0x1D401, char = '𝐁', class = 'ord', cs = 'mbfB', alphabet = 'bold' } -- mathematical bold capital b
+ , { code = 0x1D402, char = '𝐂', class = 'ord', cs = 'mbfC', alphabet = 'bold' } -- mathematical bold capital c
+ , { code = 0x1D403, char = '𝐃', class = 'ord', cs = 'mbfD', alphabet = 'bold' } -- mathematical bold capital d
+ , { code = 0x1D404, char = '𝐄', class = 'ord', cs = 'mbfE', alphabet = 'bold' } -- mathematical bold capital e
+ , { code = 0x1D405, char = '𝐅', class = 'ord', cs = 'mbfF', alphabet = 'bold' } -- mathematical bold capital f
+ , { code = 0x1D406, char = '𝐆', class = 'ord', cs = 'mbfG', alphabet = 'bold' } -- mathematical bold capital g
+ , { code = 0x1D407, char = '𝐇', class = 'ord', cs = 'mbfH', alphabet = 'bold' } -- mathematical bold capital h
+ , { code = 0x1D408, char = '𝐈', class = 'ord', cs = 'mbfI', alphabet = 'bold' } -- mathematical bold capital i
+ , { code = 0x1D409, char = '𝐉', class = 'ord', cs = 'mbfJ', alphabet = 'bold' } -- mathematical bold capital j
+ , { code = 0x1D40A, char = '𝐊', class = 'ord', cs = 'mbfK', alphabet = 'bold' } -- mathematical bold capital k
+ , { code = 0x1D40B, char = '𝐋', class = 'ord', cs = 'mbfL', alphabet = 'bold' } -- mathematical bold capital l
+ , { code = 0x1D40C, char = '𝐌', class = 'ord', cs = 'mbfM', alphabet = 'bold' } -- mathematical bold capital m
+ , { code = 0x1D40D, char = '𝐍', class = 'ord', cs = 'mbfN', alphabet = 'bold' } -- mathematical bold capital n
+ , { code = 0x1D40E, char = '𝐎', class = 'ord', cs = 'mbfO', alphabet = 'bold' } -- mathematical bold capital o
+ , { code = 0x1D40F, char = '𝐏', class = 'ord', cs = 'mbfP', alphabet = 'bold' } -- mathematical bold capital p
+ , { code = 0x1D410, char = '𝐐', class = 'ord', cs = 'mbfQ', alphabet = 'bold' } -- mathematical bold capital q
+ , { code = 0x1D411, char = '𝐑', class = 'ord', cs = 'mbfR', alphabet = 'bold' } -- mathematical bold capital r
+ , { code = 0x1D412, char = '𝐒', class = 'ord', cs = 'mbfS', alphabet = 'bold' } -- mathematical bold capital s
+ , { code = 0x1D413, char = '𝐓', class = 'ord', cs = 'mbfT', alphabet = 'bold' } -- mathematical bold capital t
+ , { code = 0x1D414, char = '𝐔', class = 'ord', cs = 'mbfU', alphabet = 'bold' } -- mathematical bold capital u
+ , { code = 0x1D415, char = '𝐕', class = 'ord', cs = 'mbfV', alphabet = 'bold' } -- mathematical bold capital v
+ , { code = 0x1D416, char = '𝐖', class = 'ord', cs = 'mbfW', alphabet = 'bold' } -- mathematical bold capital w
+ , { code = 0x1D417, char = '𝐗', class = 'ord', cs = 'mbfX', alphabet = 'bold' } -- mathematical bold capital x
+ , { code = 0x1D418, char = '𝐘', class = 'ord', cs = 'mbfY', alphabet = 'bold' } -- mathematical bold capital y
+ , { code = 0x1D419, char = '𝐙', class = 'ord', cs = 'mbfZ', alphabet = 'bold' } -- mathematical bold capital z
+ , { code = 0x1D41A, char = '𝐚', class = 'ord', cs = 'mbfa', alphabet = 'bold' } -- mathematical bold small a
+ , { code = 0x1D41B, char = '𝐛', class = 'ord', cs = 'mbfb', alphabet = 'bold' } -- mathematical bold small b
+ , { code = 0x1D41C, char = '𝐜', class = 'ord', cs = 'mbfc', alphabet = 'bold' } -- mathematical bold small c
+ , { code = 0x1D41D, char = '𝐝', class = 'ord', cs = 'mbfd', alphabet = 'bold' } -- mathematical bold small d
+ , { code = 0x1D41E, char = '𝐞', class = 'ord', cs = 'mbfe', alphabet = 'bold' } -- mathematical bold small e
+ , { code = 0x1D41F, char = '𝐟', class = 'ord', cs = 'mbff', alphabet = 'bold' } -- mathematical bold small f
+ , { code = 0x1D420, char = '𝐠', class = 'ord', cs = 'mbfg', alphabet = 'bold' } -- mathematical bold small g
+ , { code = 0x1D421, char = '𝐡', class = 'ord', cs = 'mbfh', alphabet = 'bold' } -- mathematical bold small h
+ , { code = 0x1D422, char = '𝐢', class = 'ord', cs = 'mbfi', alphabet = 'bold' } -- mathematical bold small i
+ , { code = 0x1D423, char = '𝐣', class = 'ord', cs = 'mbfj', alphabet = 'bold' } -- mathematical bold small j
+ , { code = 0x1D424, char = '𝐤', class = 'ord', cs = 'mbfk', alphabet = 'bold' } -- mathematical bold small k
+ , { code = 0x1D425, char = '𝐥', class = 'ord', cs = 'mbfl', alphabet = 'bold' } -- mathematical bold small l
+ , { code = 0x1D426, char = '𝐦', class = 'ord', cs = 'mbfm', alphabet = 'bold' } -- mathematical bold small m
+ , { code = 0x1D427, char = '𝐧', class = 'ord', cs = 'mbfn', alphabet = 'bold' } -- mathematical bold small n
+ , { code = 0x1D428, char = '𝐨', class = 'ord', cs = 'mbfo', alphabet = 'bold' } -- mathematical bold small o
+ , { code = 0x1D429, char = '𝐩', class = 'ord', cs = 'mbfp', alphabet = 'bold' } -- mathematical bold small p
+ , { code = 0x1D42A, char = '𝐪', class = 'ord', cs = 'mbfq', alphabet = 'bold' } -- mathematical bold small q
+ , { code = 0x1D42B, char = '𝐫', class = 'ord', cs = 'mbfr', alphabet = 'bold' } -- mathematical bold small r
+ , { code = 0x1D42C, char = '𝐬', class = 'ord', cs = 'mbfs', alphabet = 'bold' } -- mathematical bold small s
+ , { code = 0x1D42D, char = '𝐭', class = 'ord', cs = 'mbft', alphabet = 'bold' } -- mathematical bold small t
+ , { code = 0x1D42E, char = '𝐮', class = 'ord', cs = 'mbfu', alphabet = 'bold' } -- mathematical bold small u
+ , { code = 0x1D42F, char = '𝐯', class = 'ord', cs = 'mbfv', alphabet = 'bold' } -- mathematical bold small v
+ , { code = 0x1D430, char = '𝐰', class = 'ord', cs = 'mbfw', alphabet = 'bold' } -- mathematical bold small w
+ , { code = 0x1D431, char = '𝐱', class = 'ord', cs = 'mbfx', alphabet = 'bold' } -- mathematical bold small x
+ , { code = 0x1D432, char = '𝐲', class = 'ord', cs = 'mbfy', alphabet = 'bold' } -- mathematical bold small y
+ , { code = 0x1D433, char = '𝐳', class = 'ord', cs = 'mbfz', alphabet = 'bold' } -- mathematical bold small z
+ , { code = 0x1D434, char = '𝐴', class = 'ord', cs = 'mitA' } -- mathematical italic capital a
+ , { code = 0x1D435, char = '𝐵', class = 'ord', cs = 'mitB' } -- mathematical italic capital b
+ , { code = 0x1D436, char = '𝐶', class = 'ord', cs = 'mitC' } -- mathematical italic capital c
+ , { code = 0x1D437, char = '𝐷', class = 'ord', cs = 'mitD' } -- mathematical italic capital d
+ , { code = 0x1D438, char = '𝐸', class = 'ord', cs = 'mitE' } -- mathematical italic capital e
+ , { code = 0x1D439, char = '𝐹', class = 'ord', cs = 'mitF' } -- mathematical italic capital f
+ , { code = 0x1D43A, char = '𝐺', class = 'ord', cs = 'mitG' } -- mathematical italic capital g
+ , { code = 0x1D43B, char = '𝐻', class = 'ord', cs = 'mitH' } -- mathematical italic capital h
+ , { code = 0x1D43C, char = '𝐼', class = 'ord', cs = 'mitI' } -- mathematical italic capital i
+ , { code = 0x1D43D, char = '𝐽', class = 'ord', cs = 'mitJ' } -- mathematical italic capital j
+ , { code = 0x1D43E, char = '𝐾', class = 'ord', cs = 'mitK' } -- mathematical italic capital k
+ , { code = 0x1D43F, char = '𝐿', class = 'ord', cs = 'mitL' } -- mathematical italic capital l
+ , { code = 0x1D440, char = '𝑀', class = 'ord', cs = 'mitM' } -- mathematical italic capital m
+ , { code = 0x1D441, char = '𝑁', class = 'ord', cs = 'mitN' } -- mathematical italic capital n
+ , { code = 0x1D442, char = '𝑂', class = 'ord', cs = 'mitO' } -- mathematical italic capital o
+ , { code = 0x1D443, char = '𝑃', class = 'ord', cs = 'mitP' } -- mathematical italic capital p
+ , { code = 0x1D444, char = '𝑄', class = 'ord', cs = 'mitQ' } -- mathematical italic capital q
+ , { code = 0x1D445, char = '𝑅', class = 'ord', cs = 'mitR' } -- mathematical italic capital r
+ , { code = 0x1D446, char = '𝑆', class = 'ord', cs = 'mitS' } -- mathematical italic capital s
+ , { code = 0x1D447, char = '𝑇', class = 'ord', cs = 'mitT' } -- mathematical italic capital t
+ , { code = 0x1D448, char = '𝑈', class = 'ord', cs = 'mitU' } -- mathematical italic capital u
+ , { code = 0x1D449, char = '𝑉', class = 'ord', cs = 'mitV' } -- mathematical italic capital v
+ , { code = 0x1D44A, char = '𝑊', class = 'ord', cs = 'mitW' } -- mathematical italic capital w
+ , { code = 0x1D44B, char = '𝑋', class = 'ord', cs = 'mitX' } -- mathematical italic capital x
+ , { code = 0x1D44C, char = '𝑌', class = 'ord', cs = 'mitY' } -- mathematical italic capital y
+ , { code = 0x1D44D, char = '𝑍', class = 'ord', cs = 'mitZ' } -- mathematical italic capital z
+ , { code = 0x1D44E, char = '𝑎', class = 'ord', cs = 'mita' } -- mathematical italic small a
+ , { code = 0x1D44F, char = '𝑏', class = 'ord', cs = 'mitb' } -- mathematical italic small b
+ , { code = 0x1D450, char = '𝑐', class = 'ord', cs = 'mitc' } -- mathematical italic small c
+ , { code = 0x1D451, char = '𝑑', class = 'ord', cs = 'mitd' } -- mathematical italic small d
+ , { code = 0x1D452, char = '𝑒', class = 'ord', cs = 'mite' } -- mathematical italic small e
+ , { code = 0x1D453, char = '𝑓', class = 'ord', cs = 'mitf' } -- mathematical italic small f
+ , { code = 0x1D454, char = '𝑔', class = 'ord', cs = 'mitg' } -- mathematical italic small g
+ , { code = 0x1D456, char = '𝑖', class = 'ord', cs = 'miti' } -- mathematical italic small i
+ , { code = 0x1D457, char = '𝑗', class = 'ord', cs = 'mitj' } -- mathematical italic small j
+ , { code = 0x1D458, char = '𝑘', class = 'ord', cs = 'mitk' } -- mathematical italic small k
+ , { code = 0x1D459, char = '𝑙', class = 'ord', cs = 'mitl' } -- mathematical italic small l
+ , { code = 0x1D45A, char = '𝑚', class = 'ord', cs = 'mitm' } -- mathematical italic small m
+ , { code = 0x1D45B, char = '𝑛', class = 'ord', cs = 'mitn' } -- mathematical italic small n
+ , { code = 0x1D45C, char = '𝑜', class = 'ord', cs = 'mito' } -- mathematical italic small o
+ , { code = 0x1D45D, char = '𝑝', class = 'ord', cs = 'mitp' } -- mathematical italic small p
+ , { code = 0x1D45E, char = '𝑞', class = 'ord', cs = 'mitq' } -- mathematical italic small q
+ , { code = 0x1D45F, char = '𝑟', class = 'ord', cs = 'mitr' } -- mathematical italic small r
+ , { code = 0x1D460, char = '𝑠', class = 'ord', cs = 'mits' } -- mathematical italic small s
+ , { code = 0x1D461, char = '𝑡', class = 'ord', cs = 'mitt' } -- mathematical italic small t
+ , { code = 0x1D462, char = '𝑢', class = 'ord', cs = 'mitu' } -- mathematical italic small u
+ , { code = 0x1D463, char = '𝑣', class = 'ord', cs = 'mitv' } -- mathematical italic small v
+ , { code = 0x1D464, char = '𝑤', class = 'ord', cs = 'mitw' } -- mathematical italic small w
+ , { code = 0x1D465, char = '𝑥', class = 'ord', cs = 'mitx' } -- mathematical italic small x
+ , { code = 0x1D466, char = '𝑦', class = 'ord', cs = 'mity' } -- mathematical italic small y
+ , { code = 0x1D467, char = '𝑧', class = 'ord', cs = 'mitz' } -- mathematical italic small z
+ , { code = 0x1D468, char = '𝑨', class = 'ord', cs = 'mbfitA', alphabet = 'bold' } -- mathematical bold italic capital a
+ , { code = 0x1D469, char = '𝑩', class = 'ord', cs = 'mbfitB', alphabet = 'bold' } -- mathematical bold italic capital b
+ , { code = 0x1D46A, char = '𝑪', class = 'ord', cs = 'mbfitC', alphabet = 'bold' } -- mathematical bold italic capital c
+ , { code = 0x1D46B, char = '𝑫', class = 'ord', cs = 'mbfitD', alphabet = 'bold' } -- mathematical bold italic capital d
+ , { code = 0x1D46C, char = '𝑬', class = 'ord', cs = 'mbfitE', alphabet = 'bold' } -- mathematical bold italic capital e
+ , { code = 0x1D46D, char = '𝑭', class = 'ord', cs = 'mbfitF', alphabet = 'bold' } -- mathematical bold italic capital f
+ , { code = 0x1D46E, char = '𝑮', class = 'ord', cs = 'mbfitG', alphabet = 'bold' } -- mathematical bold italic capital g
+ , { code = 0x1D46F, char = '𝑯', class = 'ord', cs = 'mbfitH', alphabet = 'bold' } -- mathematical bold italic capital h
+ , { code = 0x1D470, char = '𝑰', class = 'ord', cs = 'mbfitI', alphabet = 'bold' } -- mathematical bold italic capital i
+ , { code = 0x1D471, char = '𝑱', class = 'ord', cs = 'mbfitJ', alphabet = 'bold' } -- mathematical bold italic capital j
+ , { code = 0x1D472, char = '𝑲', class = 'ord', cs = 'mbfitK', alphabet = 'bold' } -- mathematical bold italic capital k
+ , { code = 0x1D473, char = '𝑳', class = 'ord', cs = 'mbfitL', alphabet = 'bold' } -- mathematical bold italic capital l
+ , { code = 0x1D474, char = '𝑴', class = 'ord', cs = 'mbfitM', alphabet = 'bold' } -- mathematical bold italic capital m
+ , { code = 0x1D475, char = '𝑵', class = 'ord', cs = 'mbfitN', alphabet = 'bold' } -- mathematical bold italic capital n
+ , { code = 0x1D476, char = '𝑶', class = 'ord', cs = 'mbfitO', alphabet = 'bold' } -- mathematical bold italic capital o
+ , { code = 0x1D477, char = '𝑷', class = 'ord', cs = 'mbfitP', alphabet = 'bold' } -- mathematical bold italic capital p
+ , { code = 0x1D478, char = '𝑸', class = 'ord', cs = 'mbfitQ', alphabet = 'bold' } -- mathematical bold italic capital q
+ , { code = 0x1D479, char = '𝑹', class = 'ord', cs = 'mbfitR', alphabet = 'bold' } -- mathematical bold italic capital r
+ , { code = 0x1D47A, char = '𝑺', class = 'ord', cs = 'mbfitS', alphabet = 'bold' } -- mathematical bold italic capital s
+ , { code = 0x1D47B, char = '𝑻', class = 'ord', cs = 'mbfitT', alphabet = 'bold' } -- mathematical bold italic capital t
+ , { code = 0x1D47C, char = '𝑼', class = 'ord', cs = 'mbfitU', alphabet = 'bold' } -- mathematical bold italic capital u
+ , { code = 0x1D47D, char = '𝑽', class = 'ord', cs = 'mbfitV', alphabet = 'bold' } -- mathematical bold italic capital v
+ , { code = 0x1D47E, char = '𝑾', class = 'ord', cs = 'mbfitW', alphabet = 'bold' } -- mathematical bold italic capital w
+ , { code = 0x1D47F, char = '𝑿', class = 'ord', cs = 'mbfitX', alphabet = 'bold' } -- mathematical bold italic capital x
+ , { code = 0x1D480, char = '𝒀', class = 'ord', cs = 'mbfitY', alphabet = 'bold' } -- mathematical bold italic capital y
+ , { code = 0x1D481, char = '𝒁', class = 'ord', cs = 'mbfitZ', alphabet = 'bold' } -- mathematical bold italic capital z
+ , { code = 0x1D482, char = '𝒂', class = 'ord', cs = 'mbfita', alphabet = 'bold' } -- mathematical bold italic small a
+ , { code = 0x1D483, char = '𝒃', class = 'ord', cs = 'mbfitb', alphabet = 'bold' } -- mathematical bold italic small b
+ , { code = 0x1D484, char = '𝒄', class = 'ord', cs = 'mbfitc', alphabet = 'bold' } -- mathematical bold italic small c
+ , { code = 0x1D485, char = '𝒅', class = 'ord', cs = 'mbfitd', alphabet = 'bold' } -- mathematical bold italic small d
+ , { code = 0x1D486, char = '𝒆', class = 'ord', cs = 'mbfite', alphabet = 'bold' } -- mathematical bold italic small e
+ , { code = 0x1D487, char = '𝒇', class = 'ord', cs = 'mbfitf', alphabet = 'bold' } -- mathematical bold italic small f
+ , { code = 0x1D488, char = '𝒈', class = 'ord', cs = 'mbfitg', alphabet = 'bold' } -- mathematical bold italic small g
+ , { code = 0x1D489, char = '𝒉', class = 'ord', cs = 'mbfith', alphabet = 'bold' } -- mathematical bold italic small h
+ , { code = 0x1D48A, char = '𝒊', class = 'ord', cs = 'mbfiti', alphabet = 'bold' } -- mathematical bold italic small i
+ , { code = 0x1D48B, char = '𝒋', class = 'ord', cs = 'mbfitj', alphabet = 'bold' } -- mathematical bold italic small j
+ , { code = 0x1D48C, char = '𝒌', class = 'ord', cs = 'mbfitk', alphabet = 'bold' } -- mathematical bold italic small k
+ , { code = 0x1D48D, char = '𝒍', class = 'ord', cs = 'mbfitl', alphabet = 'bold' } -- mathematical bold italic small l
+ , { code = 0x1D48E, char = '𝒎', class = 'ord', cs = 'mbfitm', alphabet = 'bold' } -- mathematical bold italic small m
+ , { code = 0x1D48F, char = '𝒏', class = 'ord', cs = 'mbfitn', alphabet = 'bold' } -- mathematical bold italic small n
+ , { code = 0x1D490, char = '𝒐', class = 'ord', cs = 'mbfito', alphabet = 'bold' } -- mathematical bold italic small o
+ , { code = 0x1D491, char = '𝒑', class = 'ord', cs = 'mbfitp', alphabet = 'bold' } -- mathematical bold italic small p
+ , { code = 0x1D492, char = '𝒒', class = 'ord', cs = 'mbfitq', alphabet = 'bold' } -- mathematical bold italic small q
+ , { code = 0x1D493, char = '𝒓', class = 'ord', cs = 'mbfitr', alphabet = 'bold' } -- mathematical bold italic small r
+ , { code = 0x1D494, char = '𝒔', class = 'ord', cs = 'mbfits', alphabet = 'bold' } -- mathematical bold italic small s
+ , { code = 0x1D495, char = '𝒕', class = 'ord', cs = 'mbfitt', alphabet = 'bold' } -- mathematical bold italic small t
+ , { code = 0x1D496, char = '𝒖', class = 'ord', cs = 'mbfitu', alphabet = 'bold' } -- mathematical bold italic small u
+ , { code = 0x1D497, char = '𝒗', class = 'ord', cs = 'mbfitv', alphabet = 'bold' } -- mathematical bold italic small v
+ , { code = 0x1D498, char = '𝒘', class = 'ord', cs = 'mbfitw', alphabet = 'bold' } -- mathematical bold italic small w
+ , { code = 0x1D499, char = '𝒙', class = 'ord', cs = 'mbfitx', alphabet = 'bold' } -- mathematical bold italic small x
+ , { code = 0x1D49A, char = '𝒚', class = 'ord', cs = 'mbfity', alphabet = 'bold' } -- mathematical bold italic small y
+ , { code = 0x1D49B, char = '𝒛', class = 'ord', cs = 'mbfitz', alphabet = 'bold' } -- mathematical bold italic small z
+ , { code = 0x1D49C, char = '𝒜', class = 'ord', cs = 'mscrA', alphabet = 'script' } -- mathematical script capital a
+ , { code = 0x1D49E, char = '𝒞', class = 'ord', cs = 'mscrC', alphabet = 'script' } -- mathematical script capital c
+ , { code = 0x1D49F, char = '𝒟', class = 'ord', cs = 'mscrD', alphabet = 'script' } -- mathematical script capital d
+ , { code = 0x1D4A2, char = '𝒢', class = 'ord', cs = 'mscrG', alphabet = 'script' } -- mathematical script capital g
+ , { code = 0x1D4A5, char = '𝒥', class = 'ord', cs = 'mscrJ', alphabet = 'script' } -- mathematical script capital j
+ , { code = 0x1D4A6, char = '𝒦', class = 'ord', cs = 'mscrK', alphabet = 'script' } -- mathematical script capital k
+ , { code = 0x1D4A9, char = '𝒩', class = 'ord', cs = 'mscrN', alphabet = 'script' } -- mathematical script capital n
+ , { code = 0x1D4AA, char = '𝒪', class = 'ord', cs = 'mscrO', alphabet = 'script' } -- mathematical script capital o
+ , { code = 0x1D4AB, char = '𝒫', class = 'ord', cs = 'mscrP', alphabet = 'script' } -- mathematical script capital p
+ , { code = 0x1D4AC, char = '𝒬', class = 'ord', cs = 'mscrQ', alphabet = 'script' } -- mathematical script capital q
+ , { code = 0x1D4AE, char = '𝒮', class = 'ord', cs = 'mscrS', alphabet = 'script' } -- mathematical script capital s
+ , { code = 0x1D4AF, char = '𝒯', class = 'ord', cs = 'mscrT', alphabet = 'script' } -- mathematical script capital t
+ , { code = 0x1D4B0, char = '𝒰', class = 'ord', cs = 'mscrU', alphabet = 'script' } -- mathematical script capital u
+ , { code = 0x1D4B1, char = '𝒱', class = 'ord', cs = 'mscrV', alphabet = 'script' } -- mathematical script capital v
+ , { code = 0x1D4B2, char = '𝒲', class = 'ord', cs = 'mscrW', alphabet = 'script' } -- mathematical script capital w
+ , { code = 0x1D4B3, char = '𝒳', class = 'ord', cs = 'mscrX', alphabet = 'script' } -- mathematical script capital x
+ , { code = 0x1D4B4, char = '𝒴', class = 'ord', cs = 'mscrY', alphabet = 'script' } -- mathematical script capital y
+ , { code = 0x1D4B5, char = '𝒵', class = 'ord', cs = 'mscrZ', alphabet = 'script' } -- mathematical script capital z
+ , { code = 0x1D4B6, char = '𝒶', class = 'ord', cs = 'mscra', alphabet = 'script' } -- mathematical script small a
+ , { code = 0x1D4B7, char = '𝒷', class = 'ord', cs = 'mscrb', alphabet = 'script' } -- mathematical script small b
+ , { code = 0x1D4B8, char = '𝒸', class = 'ord', cs = 'mscrc', alphabet = 'script' } -- mathematical script small c
+ , { code = 0x1D4B9, char = '𝒹', class = 'ord', cs = 'mscrd', alphabet = 'script' } -- mathematical script small d
+ , { code = 0x1D4BB, char = '𝒻', class = 'ord', cs = 'mscrf', alphabet = 'script' } -- mathematical script small f
+ , { code = 0x1D4BD, char = '𝒽', class = 'ord', cs = 'mscrh', alphabet = 'script' } -- mathematical script small h
+ , { code = 0x1D4BE, char = '𝒾', class = 'ord', cs = 'mscri', alphabet = 'script' } -- mathematical script small i
+ , { code = 0x1D4BF, char = '𝒿', class = 'ord', cs = 'mscrj', alphabet = 'script' } -- mathematical script small j
+ , { code = 0x1D4C0, char = '𝓀', class = 'ord', cs = 'mscrk', alphabet = 'script' } -- mathematical script small k
+ , { code = 0x1D4C1, char = '𝓁', class = 'ord', cs = 'mscrl', alphabet = 'script' } -- mathematical script small l
+ , { code = 0x1D4C2, char = '𝓂', class = 'ord', cs = 'mscrm', alphabet = 'script' } -- mathematical script small m
+ , { code = 0x1D4C3, char = '𝓃', class = 'ord', cs = 'mscrn', alphabet = 'script' } -- mathematical script small n
+ , { code = 0x1D4C5, char = '𝓅', class = 'ord', cs = 'mscrp', alphabet = 'script' } -- mathematical script small p
+ , { code = 0x1D4C6, char = '𝓆', class = 'ord', cs = 'mscrq', alphabet = 'script' } -- mathematical script small q
+ , { code = 0x1D4C7, char = '𝓇', class = 'ord', cs = 'mscrr', alphabet = 'script' } -- mathematical script small r
+ , { code = 0x1D4C8, char = '𝓈', class = 'ord', cs = 'mscrs', alphabet = 'script' } -- mathematical script small s
+ , { code = 0x1D4C9, char = '𝓉', class = 'ord', cs = 'mscrt', alphabet = 'script' } -- mathematical script small t
+ , { code = 0x1D4CA, char = '𝓊', class = 'ord', cs = 'mscru', alphabet = 'script' } -- mathematical script small u
+ , { code = 0x1D4CB, char = '𝓋', class = 'ord', cs = 'mscrv', alphabet = 'script' } -- mathematical script small v
+ , { code = 0x1D4CC, char = '𝓌', class = 'ord', cs = 'mscrw', alphabet = 'script' } -- mathematical script small w
+ , { code = 0x1D4CD, char = '𝓍', class = 'ord', cs = 'mscrx', alphabet = 'script' } -- mathematical script small x
+ , { code = 0x1D4CE, char = '𝓎', class = 'ord', cs = 'mscry', alphabet = 'script' } -- mathematical script small y
+ , { code = 0x1D4CF, char = '𝓏', class = 'ord', cs = 'mscrz', alphabet = 'script' } -- mathematical script small z
+ , { code = 0x1D4D0, char = '𝓐', class = 'ord', cs = 'mbfscrA', alphabet = 'script' } -- mathematical bold script capital a
+ , { code = 0x1D4D1, char = '𝓑', class = 'ord', cs = 'mbfscrB', alphabet = 'script' } -- mathematical bold script capital b
+ , { code = 0x1D4D2, char = '𝓒', class = 'ord', cs = 'mbfscrC', alphabet = 'script' } -- mathematical bold script capital c
+ , { code = 0x1D4D3, char = '𝓓', class = 'ord', cs = 'mbfscrD', alphabet = 'script' } -- mathematical bold script capital d
+ , { code = 0x1D4D4, char = '𝓔', class = 'ord', cs = 'mbfscrE', alphabet = 'script' } -- mathematical bold script capital e
+ , { code = 0x1D4D5, char = '𝓕', class = 'ord', cs = 'mbfscrF', alphabet = 'script' } -- mathematical bold script capital f
+ , { code = 0x1D4D6, char = '𝓖', class = 'ord', cs = 'mbfscrG', alphabet = 'script' } -- mathematical bold script capital g
+ , { code = 0x1D4D7, char = '𝓗', class = 'ord', cs = 'mbfscrH', alphabet = 'script' } -- mathematical bold script capital h
+ , { code = 0x1D4D8, char = '𝓘', class = 'ord', cs = 'mbfscrI', alphabet = 'script' } -- mathematical bold script capital i
+ , { code = 0x1D4D9, char = '𝓙', class = 'ord', cs = 'mbfscrJ', alphabet = 'script' } -- mathematical bold script capital j
+ , { code = 0x1D4DA, char = '𝓚', class = 'ord', cs = 'mbfscrK', alphabet = 'script' } -- mathematical bold script capital k
+ , { code = 0x1D4DB, char = '𝓛', class = 'ord', cs = 'mbfscrL', alphabet = 'script' } -- mathematical bold script capital l
+ , { code = 0x1D4DC, char = '𝓜', class = 'ord', cs = 'mbfscrM', alphabet = 'script' } -- mathematical bold script capital m
+ , { code = 0x1D4DD, char = '𝓝', class = 'ord', cs = 'mbfscrN', alphabet = 'script' } -- mathematical bold script capital n
+ , { code = 0x1D4DE, char = '𝓞', class = 'ord', cs = 'mbfscrO', alphabet = 'script' } -- mathematical bold script capital o
+ , { code = 0x1D4DF, char = '𝓟', class = 'ord', cs = 'mbfscrP', alphabet = 'script' } -- mathematical bold script capital p
+ , { code = 0x1D4E0, char = '𝓠', class = 'ord', cs = 'mbfscrQ', alphabet = 'script' } -- mathematical bold script capital q
+ , { code = 0x1D4E1, char = '𝓡', class = 'ord', cs = 'mbfscrR', alphabet = 'script' } -- mathematical bold script capital r
+ , { code = 0x1D4E2, char = '𝓢', class = 'ord', cs = 'mbfscrS', alphabet = 'script' } -- mathematical bold script capital s
+ , { code = 0x1D4E3, char = '𝓣', class = 'ord', cs = 'mbfscrT', alphabet = 'script' } -- mathematical bold script capital t
+ , { code = 0x1D4E4, char = '𝓤', class = 'ord', cs = 'mbfscrU', alphabet = 'script' } -- mathematical bold script capital u
+ , { code = 0x1D4E5, char = '𝓥', class = 'ord', cs = 'mbfscrV', alphabet = 'script' } -- mathematical bold script capital v
+ , { code = 0x1D4E6, char = '𝓦', class = 'ord', cs = 'mbfscrW', alphabet = 'script' } -- mathematical bold script capital w
+ , { code = 0x1D4E7, char = '𝓧', class = 'ord', cs = 'mbfscrX', alphabet = 'script' } -- mathematical bold script capital x
+ , { code = 0x1D4E8, char = '𝓨', class = 'ord', cs = 'mbfscrY', alphabet = 'script' } -- mathematical bold script capital y
+ , { code = 0x1D4E9, char = '𝓩', class = 'ord', cs = 'mbfscrZ', alphabet = 'script' } -- mathematical bold script capital z
+ , { code = 0x1D4EA, char = '𝓪', class = 'ord', cs = 'mbfscra', alphabet = 'script' } -- mathematical bold script small a
+ , { code = 0x1D4EB, char = '𝓫', class = 'ord', cs = 'mbfscrb', alphabet = 'script' } -- mathematical bold script small b
+ , { code = 0x1D4EC, char = '𝓬', class = 'ord', cs = 'mbfscrc', alphabet = 'script' } -- mathematical bold script small c
+ , { code = 0x1D4ED, char = '𝓭', class = 'ord', cs = 'mbfscrd', alphabet = 'script' } -- mathematical bold script small d
+ , { code = 0x1D4EE, char = '𝓮', class = 'ord', cs = 'mbfscre', alphabet = 'script' } -- mathematical bold script small e
+ , { code = 0x1D4EF, char = '𝓯', class = 'ord', cs = 'mbfscrf', alphabet = 'script' } -- mathematical bold script small f
+ , { code = 0x1D4F0, char = '𝓰', class = 'ord', cs = 'mbfscrg', alphabet = 'script' } -- mathematical bold script small g
+ , { code = 0x1D4F1, char = '𝓱', class = 'ord', cs = 'mbfscrh', alphabet = 'script' } -- mathematical bold script small h
+ , { code = 0x1D4F2, char = '𝓲', class = 'ord', cs = 'mbfscri', alphabet = 'script' } -- mathematical bold script small i
+ , { code = 0x1D4F3, char = '𝓳', class = 'ord', cs = 'mbfscrj', alphabet = 'script' } -- mathematical bold script small j
+ , { code = 0x1D4F4, char = '𝓴', class = 'ord', cs = 'mbfscrk', alphabet = 'script' } -- mathematical bold script small k
+ , { code = 0x1D4F5, char = '𝓵', class = 'ord', cs = 'mbfscrl', alphabet = 'script' } -- mathematical bold script small l
+ , { code = 0x1D4F6, char = '𝓶', class = 'ord', cs = 'mbfscrm', alphabet = 'script' } -- mathematical bold script small m
+ , { code = 0x1D4F7, char = '𝓷', class = 'ord', cs = 'mbfscrn', alphabet = 'script' } -- mathematical bold script small n
+ , { code = 0x1D4F8, char = '𝓸', class = 'ord', cs = 'mbfscro', alphabet = 'script' } -- mathematical bold script small o
+ , { code = 0x1D4F9, char = '𝓹', class = 'ord', cs = 'mbfscrp', alphabet = 'script' } -- mathematical bold script small p
+ , { code = 0x1D4FA, char = '𝓺', class = 'ord', cs = 'mbfscrq', alphabet = 'script' } -- mathematical bold script small q
+ , { code = 0x1D4FB, char = '𝓻', class = 'ord', cs = 'mbfscrr', alphabet = 'script' } -- mathematical bold script small r
+ , { code = 0x1D4FC, char = '𝓼', class = 'ord', cs = 'mbfscrs', alphabet = 'script' } -- mathematical bold script small s
+ , { code = 0x1D4FD, char = '𝓽', class = 'ord', cs = 'mbfscrt', alphabet = 'script' } -- mathematical bold script small t
+ , { code = 0x1D4FE, char = '𝓾', class = 'ord', cs = 'mbfscru', alphabet = 'script' } -- mathematical bold script small u
+ , { code = 0x1D4FF, char = '𝓿', class = 'ord', cs = 'mbfscrv', alphabet = 'script' } -- mathematical bold script small v
+ , { code = 0x1D500, char = '𝔀', class = 'ord', cs = 'mbfscrw', alphabet = 'script' } -- mathematical bold script small w
+ , { code = 0x1D501, char = '𝔁', class = 'ord', cs = 'mbfscrx', alphabet = 'script' } -- mathematical bold script small x
+ , { code = 0x1D502, char = '𝔂', class = 'ord', cs = 'mbfscry', alphabet = 'script' } -- mathematical bold script small y
+ , { code = 0x1D503, char = '𝔃', class = 'ord', cs = 'mbfscrz', alphabet = 'script' } -- mathematical bold script small z
+ , { code = 0x1D504, char = '𝔄', class = 'ord', cs = 'mfrakA', alphabet = 'fraktur' } -- mathematical fraktur capital a
+ , { code = 0x1D505, char = '𝔅', class = 'ord', cs = 'mfrakB', alphabet = 'fraktur' } -- mathematical fraktur capital b
+ , { code = 0x1D507, char = '𝔇', class = 'ord', cs = 'mfrakD', alphabet = 'fraktur' } -- mathematical fraktur capital d
+ , { code = 0x1D508, char = '𝔈', class = 'ord', cs = 'mfrakE', alphabet = 'fraktur' } -- mathematical fraktur capital e
+ , { code = 0x1D509, char = '𝔉', class = 'ord', cs = 'mfrakF', alphabet = 'fraktur' } -- mathematical fraktur capital f
+ , { code = 0x1D50A, char = '𝔊', class = 'ord', cs = 'mfrakG', alphabet = 'fraktur' } -- mathematical fraktur capital g
+ , { code = 0x1D50D, char = '𝔍', class = 'ord', cs = 'mfrakJ', alphabet = 'fraktur' } -- mathematical fraktur capital j
+ , { code = 0x1D50E, char = '𝔎', class = 'ord', cs = 'mfrakK', alphabet = 'fraktur' } -- mathematical fraktur capital k
+ , { code = 0x1D50F, char = '𝔏', class = 'ord', cs = 'mfrakL', alphabet = 'fraktur' } -- mathematical fraktur capital l
+ , { code = 0x1D510, char = '𝔐', class = 'ord', cs = 'mfrakM', alphabet = 'fraktur' } -- mathematical fraktur capital m
+ , { code = 0x1D511, char = '𝔑', class = 'ord', cs = 'mfrakN', alphabet = 'fraktur' } -- mathematical fraktur capital n
+ , { code = 0x1D512, char = '𝔒', class = 'ord', cs = 'mfrakO', alphabet = 'fraktur' } -- mathematical fraktur capital o
+ , { code = 0x1D513, char = '𝔓', class = 'ord', cs = 'mfrakP', alphabet = 'fraktur' } -- mathematical fraktur capital p
+ , { code = 0x1D514, char = '𝔔', class = 'ord', cs = 'mfrakQ', alphabet = 'fraktur' } -- mathematical fraktur capital q
+ , { code = 0x1D516, char = '𝔖', class = 'ord', cs = 'mfrakS', alphabet = 'fraktur' } -- mathematical fraktur capital s
+ , { code = 0x1D517, char = '𝔗', class = 'ord', cs = 'mfrakT', alphabet = 'fraktur' } -- mathematical fraktur capital t
+ , { code = 0x1D518, char = '𝔘', class = 'ord', cs = 'mfrakU', alphabet = 'fraktur' } -- mathematical fraktur capital u
+ , { code = 0x1D519, char = '𝔙', class = 'ord', cs = 'mfrakV', alphabet = 'fraktur' } -- mathematical fraktur capital v
+ , { code = 0x1D51A, char = '𝔚', class = 'ord', cs = 'mfrakW', alphabet = 'fraktur' } -- mathematical fraktur capital w
+ , { code = 0x1D51B, char = '𝔛', class = 'ord', cs = 'mfrakX', alphabet = 'fraktur' } -- mathematical fraktur capital x
+ , { code = 0x1D51C, char = '𝔜', class = 'ord', cs = 'mfrakY', alphabet = 'fraktur' } -- mathematical fraktur capital y
+ , { code = 0x1D51E, char = '𝔞', class = 'ord', cs = 'mfraka', alphabet = 'fraktur' } -- mathematical fraktur small a
+ , { code = 0x1D51F, char = '𝔟', class = 'ord', cs = 'mfrakb', alphabet = 'fraktur' } -- mathematical fraktur small b
+ , { code = 0x1D520, char = '𝔠', class = 'ord', cs = 'mfrakc', alphabet = 'fraktur' } -- mathematical fraktur small c
+ , { code = 0x1D521, char = '𝔡', class = 'ord', cs = 'mfrakd', alphabet = 'fraktur' } -- mathematical fraktur small d
+ , { code = 0x1D522, char = '𝔢', class = 'ord', cs = 'mfrake', alphabet = 'fraktur' } -- mathematical fraktur small e
+ , { code = 0x1D523, char = '𝔣', class = 'ord', cs = 'mfrakf', alphabet = 'fraktur' } -- mathematical fraktur small f
+ , { code = 0x1D524, char = '𝔤', class = 'ord', cs = 'mfrakg', alphabet = 'fraktur' } -- mathematical fraktur small g
+ , { code = 0x1D525, char = '𝔥', class = 'ord', cs = 'mfrakh', alphabet = 'fraktur' } -- mathematical fraktur small h
+ , { code = 0x1D526, char = '𝔦', class = 'ord', cs = 'mfraki', alphabet = 'fraktur' } -- mathematical fraktur small i
+ , { code = 0x1D527, char = '𝔧', class = 'ord', cs = 'mfrakj', alphabet = 'fraktur' } -- mathematical fraktur small j
+ , { code = 0x1D528, char = '𝔨', class = 'ord', cs = 'mfrakk', alphabet = 'fraktur' } -- mathematical fraktur small k
+ , { code = 0x1D529, char = '𝔩', class = 'ord', cs = 'mfrakl', alphabet = 'fraktur' } -- mathematical fraktur small l
+ , { code = 0x1D52A, char = '𝔪', class = 'ord', cs = 'mfrakm', alphabet = 'fraktur' } -- mathematical fraktur small m
+ , { code = 0x1D52B, char = '𝔫', class = 'ord', cs = 'mfrakn', alphabet = 'fraktur' } -- mathematical fraktur small n
+ , { code = 0x1D52C, char = '𝔬', class = 'ord', cs = 'mfrako', alphabet = 'fraktur' } -- mathematical fraktur small o
+ , { code = 0x1D52D, char = '𝔭', class = 'ord', cs = 'mfrakp', alphabet = 'fraktur' } -- mathematical fraktur small p
+ , { code = 0x1D52E, char = '𝔮', class = 'ord', cs = 'mfrakq', alphabet = 'fraktur' } -- mathematical fraktur small q
+ , { code = 0x1D52F, char = '𝔯', class = 'ord', cs = 'mfrakr', alphabet = 'fraktur' } -- mathematical fraktur small r
+ , { code = 0x1D530, char = '𝔰', class = 'ord', cs = 'mfraks', alphabet = 'fraktur' } -- mathematical fraktur small s
+ , { code = 0x1D531, char = '𝔱', class = 'ord', cs = 'mfrakt', alphabet = 'fraktur' } -- mathematical fraktur small t
+ , { code = 0x1D532, char = '𝔲', class = 'ord', cs = 'mfraku', alphabet = 'fraktur' } -- mathematical fraktur small u
+ , { code = 0x1D533, char = '𝔳', class = 'ord', cs = 'mfrakv', alphabet = 'fraktur' } -- mathematical fraktur small v
+ , { code = 0x1D534, char = '𝔴', class = 'ord', cs = 'mfrakw', alphabet = 'fraktur' } -- mathematical fraktur small w
+ , { code = 0x1D535, char = '𝔵', class = 'ord', cs = 'mfrakx', alphabet = 'fraktur' } -- mathematical fraktur small x
+ , { code = 0x1D536, char = '𝔶', class = 'ord', cs = 'mfraky', alphabet = 'fraktur' } -- mathematical fraktur small y
+ , { code = 0x1D537, char = '𝔷', class = 'ord', cs = 'mfrakz', alphabet = 'fraktur' } -- mathematical fraktur small z
+ , { code = 0x1D538, char = '𝔸', class = 'ord', cs = 'BbbA', alphabet = 'blackboard' } -- mathematical double-struck capital a
+ , { code = 0x1D539, char = '𝔹', class = 'ord', cs = 'BbbB', alphabet = 'blackboard' } -- mathematical double-struck capital b
+ , { code = 0x1D53B, char = '𝔻', class = 'ord', cs = 'BbbD', alphabet = 'blackboard' } -- mathematical double-struck capital d
+ , { code = 0x1D53C, char = '𝔼', class = 'ord', cs = 'BbbE', alphabet = 'blackboard' } -- mathematical double-struck capital e
+ , { code = 0x1D53D, char = '𝔽', class = 'ord', cs = 'BbbF', alphabet = 'blackboard' } -- mathematical double-struck capital f
+ , { code = 0x1D53E, char = '𝔾', class = 'ord', cs = 'BbbG', alphabet = 'blackboard' } -- mathematical double-struck capital g
+ , { code = 0x1D540, char = '𝕀', class = 'ord', cs = 'BbbI', alphabet = 'blackboard' } -- mathematical double-struck capital i
+ , { code = 0x1D541, char = '𝕁', class = 'ord', cs = 'BbbJ', alphabet = 'blackboard' } -- mathematical double-struck capital j
+ , { code = 0x1D542, char = '𝕂', class = 'ord', cs = 'BbbK', alphabet = 'blackboard' } -- mathematical double-struck capital k
+ , { code = 0x1D543, char = '𝕃', class = 'ord', cs = 'BbbL', alphabet = 'blackboard' } -- mathematical double-struck capital l
+ , { code = 0x1D544, char = '𝕄', class = 'ord', cs = 'BbbM', alphabet = 'blackboard' } -- mathematical double-struck capital m
+ , { code = 0x1D546, char = '𝕆', class = 'ord', cs = 'BbbO', alphabet = 'blackboard' } -- mathematical double-struck capital o
+ , { code = 0x1D54A, char = '𝕊', class = 'ord', cs = 'BbbS', alphabet = 'blackboard' } -- mathematical double-struck capital s
+ , { code = 0x1D54B, char = '𝕋', class = 'ord', cs = 'BbbT', alphabet = 'blackboard' } -- mathematical double-struck capital t
+ , { code = 0x1D54C, char = '𝕌', class = 'ord', cs = 'BbbU', alphabet = 'blackboard' } -- mathematical double-struck capital u
+ , { code = 0x1D54D, char = '𝕍', class = 'ord', cs = 'BbbV', alphabet = 'blackboard' } -- mathematical double-struck capital v
+ , { code = 0x1D54E, char = '𝕎', class = 'ord', cs = 'BbbW', alphabet = 'blackboard' } -- mathematical double-struck capital w
+ , { code = 0x1D54F, char = '𝕏', class = 'ord', cs = 'BbbX', alphabet = 'blackboard' } -- mathematical double-struck capital x
+ , { code = 0x1D550, char = '𝕐', class = 'ord', cs = 'BbbY', alphabet = 'blackboard' } -- mathematical double-struck capital y
+ , { code = 0x1D552, char = '𝕒', class = 'ord', cs = 'Bbba', alphabet = 'blackboard' } -- mathematical double-struck small a
+ , { code = 0x1D553, char = '𝕓', class = 'ord', cs = 'Bbbb', alphabet = 'blackboard' } -- mathematical double-struck small b
+ , { code = 0x1D554, char = '𝕔', class = 'ord', cs = 'Bbbc', alphabet = 'blackboard' } -- mathematical double-struck small c
+ , { code = 0x1D555, char = '𝕕', class = 'ord', cs = 'Bbbd', alphabet = 'blackboard' } -- mathematical double-struck small d
+ , { code = 0x1D556, char = '𝕖', class = 'ord', cs = 'Bbbe', alphabet = 'blackboard' } -- mathematical double-struck small e
+ , { code = 0x1D557, char = '𝕗', class = 'ord', cs = 'Bbbf', alphabet = 'blackboard' } -- mathematical double-struck small f
+ , { code = 0x1D558, char = '𝕘', class = 'ord', cs = 'Bbbg', alphabet = 'blackboard' } -- mathematical double-struck small g
+ , { code = 0x1D559, char = '𝕙', class = 'ord', cs = 'Bbbh', alphabet = 'blackboard' } -- mathematical double-struck small h
+ , { code = 0x1D55A, char = '𝕚', class = 'ord', cs = 'Bbbi', alphabet = 'blackboard' } -- mathematical double-struck small i
+ , { code = 0x1D55B, char = '𝕛', class = 'ord', cs = 'Bbbj', alphabet = 'blackboard' } -- mathematical double-struck small j
+ , { code = 0x1D55C, char = '𝕜', class = 'ord', cs = 'Bbbk', alphabet = 'blackboard' } -- mathematical double-struck small k
+ , { code = 0x1D55D, char = '𝕝', class = 'ord', cs = 'Bbbl', alphabet = 'blackboard' } -- mathematical double-struck small l
+ , { code = 0x1D55E, char = '𝕞', class = 'ord', cs = 'Bbbm', alphabet = 'blackboard' } -- mathematical double-struck small m
+ , { code = 0x1D55F, char = '𝕟', class = 'ord', cs = 'Bbbn', alphabet = 'blackboard' } -- mathematical double-struck small n
+ , { code = 0x1D560, char = '𝕠', class = 'ord', cs = 'Bbbo', alphabet = 'blackboard' } -- mathematical double-struck small o
+ , { code = 0x1D561, char = '𝕡', class = 'ord', cs = 'Bbbp', alphabet = 'blackboard' } -- mathematical double-struck small p
+ , { code = 0x1D562, char = '𝕢', class = 'ord', cs = 'Bbbq', alphabet = 'blackboard' } -- mathematical double-struck small q
+ , { code = 0x1D563, char = '𝕣', class = 'ord', cs = 'Bbbr', alphabet = 'blackboard' } -- mathematical double-struck small r
+ , { code = 0x1D564, char = '𝕤', class = 'ord', cs = 'Bbbs', alphabet = 'blackboard' } -- mathematical double-struck small s
+ , { code = 0x1D565, char = '𝕥', class = 'ord', cs = 'Bbbt', alphabet = 'blackboard' } -- mathematical double-struck small t
+ , { code = 0x1D566, char = '𝕦', class = 'ord', cs = 'Bbbu', alphabet = 'blackboard' } -- mathematical double-struck small u
+ , { code = 0x1D567, char = '𝕧', class = 'ord', cs = 'Bbbv', alphabet = 'blackboard' } -- mathematical double-struck small v
+ , { code = 0x1D568, char = '𝕨', class = 'ord', cs = 'Bbbw', alphabet = 'blackboard' } -- mathematical double-struck small w
+ , { code = 0x1D569, char = '𝕩', class = 'ord', cs = 'Bbbx', alphabet = 'blackboard' } -- mathematical double-struck small x
+ , { code = 0x1D56A, char = '𝕪', class = 'ord', cs = 'Bbby', alphabet = 'blackboard' } -- mathematical double-struck small y
+ , { code = 0x1D56B, char = '𝕫', class = 'ord', cs = 'Bbbz', alphabet = 'blackboard' } -- mathematical double-struck small z
+ , { code = 0x1D56C, char = '𝕬', class = 'ord', cs = 'mbffrakA', alphabet = 'fraktur' } -- mathematical bold fraktur capital a
+ , { code = 0x1D56D, char = '𝕭', class = 'ord', cs = 'mbffrakB', alphabet = 'fraktur' } -- mathematical bold fraktur capital b
+ , { code = 0x1D56E, char = '𝕮', class = 'ord', cs = 'mbffrakC', alphabet = 'fraktur' } -- mathematical bold fraktur capital c
+ , { code = 0x1D56F, char = '𝕯', class = 'ord', cs = 'mbffrakD', alphabet = 'fraktur' } -- mathematical bold fraktur capital d
+ , { code = 0x1D570, char = '𝕰', class = 'ord', cs = 'mbffrakE', alphabet = 'fraktur' } -- mathematical bold fraktur capital e
+ , { code = 0x1D571, char = '𝕱', class = 'ord', cs = 'mbffrakF', alphabet = 'fraktur' } -- mathematical bold fraktur capital f
+ , { code = 0x1D572, char = '𝕲', class = 'ord', cs = 'mbffrakG', alphabet = 'fraktur' } -- mathematical bold fraktur capital g
+ , { code = 0x1D573, char = '𝕳', class = 'ord', cs = 'mbffrakH', alphabet = 'fraktur' } -- mathematical bold fraktur capital h
+ , { code = 0x1D574, char = '𝕴', class = 'ord', cs = 'mbffrakI', alphabet = 'fraktur' } -- mathematical bold fraktur capital i
+ , { code = 0x1D575, char = '𝕵', class = 'ord', cs = 'mbffrakJ', alphabet = 'fraktur' } -- mathematical bold fraktur capital j
+ , { code = 0x1D576, char = '𝕶', class = 'ord', cs = 'mbffrakK', alphabet = 'fraktur' } -- mathematical bold fraktur capital k
+ , { code = 0x1D577, char = '𝕷', class = 'ord', cs = 'mbffrakL', alphabet = 'fraktur' } -- mathematical bold fraktur capital l
+ , { code = 0x1D578, char = '𝕸', class = 'ord', cs = 'mbffrakM', alphabet = 'fraktur' } -- mathematical bold fraktur capital m
+ , { code = 0x1D579, char = '𝕹', class = 'ord', cs = 'mbffrakN', alphabet = 'fraktur' } -- mathematical bold fraktur capital n
+ , { code = 0x1D57A, char = '𝕺', class = 'ord', cs = 'mbffrakO', alphabet = 'fraktur' } -- mathematical bold fraktur capital o
+ , { code = 0x1D57B, char = '𝕻', class = 'ord', cs = 'mbffrakP', alphabet = 'fraktur' } -- mathematical bold fraktur capital p
+ , { code = 0x1D57C, char = '𝕼', class = 'ord', cs = 'mbffrakQ', alphabet = 'fraktur' } -- mathematical bold fraktur capital q
+ , { code = 0x1D57D, char = '𝕽', class = 'ord', cs = 'mbffrakR', alphabet = 'fraktur' } -- mathematical bold fraktur capital r
+ , { code = 0x1D57E, char = '𝕾', class = 'ord', cs = 'mbffrakS', alphabet = 'fraktur' } -- mathematical bold fraktur capital s
+ , { code = 0x1D57F, char = '𝕿', class = 'ord', cs = 'mbffrakT', alphabet = 'fraktur' } -- mathematical bold fraktur capital t
+ , { code = 0x1D580, char = '𝖀', class = 'ord', cs = 'mbffrakU', alphabet = 'fraktur' } -- mathematical bold fraktur capital u
+ , { code = 0x1D581, char = '𝖁', class = 'ord', cs = 'mbffrakV', alphabet = 'fraktur' } -- mathematical bold fraktur capital v
+ , { code = 0x1D582, char = '𝖂', class = 'ord', cs = 'mbffrakW', alphabet = 'fraktur' } -- mathematical bold fraktur capital w
+ , { code = 0x1D583, char = '𝖃', class = 'ord', cs = 'mbffrakX', alphabet = 'fraktur' } -- mathematical bold fraktur capital x
+ , { code = 0x1D584, char = '𝖄', class = 'ord', cs = 'mbffrakY', alphabet = 'fraktur' } -- mathematical bold fraktur capital y
+ , { code = 0x1D585, char = '𝖅', class = 'ord', cs = 'mbffrakZ', alphabet = 'fraktur' } -- mathematical bold fraktur capital z
+ , { code = 0x1D586, char = '𝖆', class = 'ord', cs = 'mbffraka', alphabet = 'fraktur' } -- mathematical bold fraktur small a
+ , { code = 0x1D587, char = '𝖇', class = 'ord', cs = 'mbffrakb', alphabet = 'fraktur' } -- mathematical bold fraktur small b
+ , { code = 0x1D588, char = '𝖈', class = 'ord', cs = 'mbffrakc', alphabet = 'fraktur' } -- mathematical bold fraktur small c
+ , { code = 0x1D589, char = '𝖉', class = 'ord', cs = 'mbffrakd', alphabet = 'fraktur' } -- mathematical bold fraktur small d
+ , { code = 0x1D58A, char = '𝖊', class = 'ord', cs = 'mbffrake', alphabet = 'fraktur' } -- mathematical bold fraktur small e
+ , { code = 0x1D58B, char = '𝖋', class = 'ord', cs = 'mbffrakf', alphabet = 'fraktur' } -- mathematical bold fraktur small f
+ , { code = 0x1D58C, char = '𝖌', class = 'ord', cs = 'mbffrakg', alphabet = 'fraktur' } -- mathematical bold fraktur small g
+ , { code = 0x1D58D, char = '𝖍', class = 'ord', cs = 'mbffrakh', alphabet = 'fraktur' } -- mathematical bold fraktur small h
+ , { code = 0x1D58E, char = '𝖎', class = 'ord', cs = 'mbffraki', alphabet = 'fraktur' } -- mathematical bold fraktur small i
+ , { code = 0x1D58F, char = '𝖏', class = 'ord', cs = 'mbffrakj', alphabet = 'fraktur' } -- mathematical bold fraktur small j
+ , { code = 0x1D590, char = '𝖐', class = 'ord', cs = 'mbffrakk', alphabet = 'fraktur' } -- mathematical bold fraktur small k
+ , { code = 0x1D591, char = '𝖑', class = 'ord', cs = 'mbffrakl', alphabet = 'fraktur' } -- mathematical bold fraktur small l
+ , { code = 0x1D592, char = '𝖒', class = 'ord', cs = 'mbffrakm', alphabet = 'fraktur' } -- mathematical bold fraktur small m
+ , { code = 0x1D593, char = '𝖓', class = 'ord', cs = 'mbffrakn', alphabet = 'fraktur' } -- mathematical bold fraktur small n
+ , { code = 0x1D594, char = '𝖔', class = 'ord', cs = 'mbffrako', alphabet = 'fraktur' } -- mathematical bold fraktur small o
+ , { code = 0x1D595, char = '𝖕', class = 'ord', cs = 'mbffrakp', alphabet = 'fraktur' } -- mathematical bold fraktur small p
+ , { code = 0x1D596, char = '𝖖', class = 'ord', cs = 'mbffrakq', alphabet = 'fraktur' } -- mathematical bold fraktur small q
+ , { code = 0x1D597, char = '𝖗', class = 'ord', cs = 'mbffrakr', alphabet = 'fraktur' } -- mathematical bold fraktur small r
+ , { code = 0x1D598, char = '𝖘', class = 'ord', cs = 'mbffraks', alphabet = 'fraktur' } -- mathematical bold fraktur small s
+ , { code = 0x1D599, char = '𝖙', class = 'ord', cs = 'mbffrakt', alphabet = 'fraktur' } -- mathematical bold fraktur small t
+ , { code = 0x1D59A, char = '𝖚', class = 'ord', cs = 'mbffraku', alphabet = 'fraktur' } -- mathematical bold fraktur small u
+ , { code = 0x1D59B, char = '𝖛', class = 'ord', cs = 'mbffrakv', alphabet = 'fraktur' } -- mathematical bold fraktur small v
+ , { code = 0x1D59C, char = '𝖜', class = 'ord', cs = 'mbffrakw', alphabet = 'fraktur' } -- mathematical bold fraktur small w
+ , { code = 0x1D59D, char = '𝖝', class = 'ord', cs = 'mbffrakx', alphabet = 'fraktur' } -- mathematical bold fraktur small x
+ , { code = 0x1D59E, char = '𝖞', class = 'ord', cs = 'mbffraky', alphabet = 'fraktur' } -- mathematical bold fraktur small y
+ , { code = 0x1D59F, char = '𝖟', class = 'ord', cs = 'mbffrakz', alphabet = 'fraktur' } -- mathematical bold fraktur small z
+ , { code = 0x1D5A0, char = '𝖠', class = 'ord', cs = 'msansA', alphabet = 'sans' } -- mathematical sans-serif capital a
+ , { code = 0x1D5A1, char = '𝖡', class = 'ord', cs = 'msansB', alphabet = 'sans' } -- mathematical sans-serif capital b
+ , { code = 0x1D5A2, char = '𝖢', class = 'ord', cs = 'msansC', alphabet = 'sans' } -- mathematical sans-serif capital c
+ , { code = 0x1D5A3, char = '𝖣', class = 'ord', cs = 'msansD', alphabet = 'sans' } -- mathematical sans-serif capital d
+ , { code = 0x1D5A4, char = '𝖤', class = 'ord', cs = 'msansE', alphabet = 'sans' } -- mathematical sans-serif capital e
+ , { code = 0x1D5A5, char = '𝖥', class = 'ord', cs = 'msansF', alphabet = 'sans' } -- mathematical sans-serif capital f
+ , { code = 0x1D5A6, char = '𝖦', class = 'ord', cs = 'msansG', alphabet = 'sans' } -- mathematical sans-serif capital g
+ , { code = 0x1D5A7, char = '𝖧', class = 'ord', cs = 'msansH', alphabet = 'sans' } -- mathematical sans-serif capital h
+ , { code = 0x1D5A8, char = '𝖨', class = 'ord', cs = 'msansI', alphabet = 'sans' } -- mathematical sans-serif capital i
+ , { code = 0x1D5A9, char = '𝖩', class = 'ord', cs = 'msansJ', alphabet = 'sans' } -- mathematical sans-serif capital j
+ , { code = 0x1D5AA, char = '𝖪', class = 'ord', cs = 'msansK', alphabet = 'sans' } -- mathematical sans-serif capital k
+ , { code = 0x1D5AB, char = '𝖫', class = 'ord', cs = 'msansL', alphabet = 'sans' } -- mathematical sans-serif capital l
+ , { code = 0x1D5AC, char = '𝖬', class = 'ord', cs = 'msansM', alphabet = 'sans' } -- mathematical sans-serif capital m
+ , { code = 0x1D5AD, char = '𝖭', class = 'ord', cs = 'msansN', alphabet = 'sans' } -- mathematical sans-serif capital n
+ , { code = 0x1D5AE, char = '𝖮', class = 'ord', cs = 'msansO', alphabet = 'sans' } -- mathematical sans-serif capital o
+ , { code = 0x1D5AF, char = '𝖯', class = 'ord', cs = 'msansP', alphabet = 'sans' } -- mathematical sans-serif capital p
+ , { code = 0x1D5B0, char = '𝖰', class = 'ord', cs = 'msansQ', alphabet = 'sans' } -- mathematical sans-serif capital q
+ , { code = 0x1D5B1, char = '𝖱', class = 'ord', cs = 'msansR', alphabet = 'sans' } -- mathematical sans-serif capital r
+ , { code = 0x1D5B2, char = '𝖲', class = 'ord', cs = 'msansS', alphabet = 'sans' } -- mathematical sans-serif capital s
+ , { code = 0x1D5B3, char = '𝖳', class = 'ord', cs = 'msansT', alphabet = 'sans' } -- mathematical sans-serif capital t
+ , { code = 0x1D5B4, char = '𝖴', class = 'ord', cs = 'msansU', alphabet = 'sans' } -- mathematical sans-serif capital u
+ , { code = 0x1D5B5, char = '𝖵', class = 'ord', cs = 'msansV', alphabet = 'sans' } -- mathematical sans-serif capital v
+ , { code = 0x1D5B6, char = '𝖶', class = 'ord', cs = 'msansW', alphabet = 'sans' } -- mathematical sans-serif capital w
+ , { code = 0x1D5B7, char = '𝖷', class = 'ord', cs = 'msansX', alphabet = 'sans' } -- mathematical sans-serif capital x
+ , { code = 0x1D5B8, char = '𝖸', class = 'ord', cs = 'msansY', alphabet = 'sans' } -- mathematical sans-serif capital y
+ , { code = 0x1D5B9, char = '𝖹', class = 'ord', cs = 'msansZ', alphabet = 'sans' } -- mathematical sans-serif capital z
+ , { code = 0x1D5BA, char = '𝖺', class = 'ord', cs = 'msansa', alphabet = 'sans' } -- mathematical sans-serif small a
+ , { code = 0x1D5BB, char = '𝖻', class = 'ord', cs = 'msansb', alphabet = 'sans' } -- mathematical sans-serif small b
+ , { code = 0x1D5BC, char = '𝖼', class = 'ord', cs = 'msansc', alphabet = 'sans' } -- mathematical sans-serif small c
+ , { code = 0x1D5BD, char = '𝖽', class = 'ord', cs = 'msansd', alphabet = 'sans' } -- mathematical sans-serif small d
+ , { code = 0x1D5BE, char = '𝖾', class = 'ord', cs = 'msanse', alphabet = 'sans' } -- mathematical sans-serif small e
+ , { code = 0x1D5BF, char = '𝖿', class = 'ord', cs = 'msansf', alphabet = 'sans' } -- mathematical sans-serif small f
+ , { code = 0x1D5C0, char = '𝗀', class = 'ord', cs = 'msansg', alphabet = 'sans' } -- mathematical sans-serif small g
+ , { code = 0x1D5C1, char = '𝗁', class = 'ord', cs = 'msansh', alphabet = 'sans' } -- mathematical sans-serif small h
+ , { code = 0x1D5C2, char = '𝗂', class = 'ord', cs = 'msansi', alphabet = 'sans' } -- mathematical sans-serif small i
+ , { code = 0x1D5C3, char = '𝗃', class = 'ord', cs = 'msansj', alphabet = 'sans' } -- mathematical sans-serif small j
+ , { code = 0x1D5C4, char = '𝗄', class = 'ord', cs = 'msansk', alphabet = 'sans' } -- mathematical sans-serif small k
+ , { code = 0x1D5C5, char = '𝗅', class = 'ord', cs = 'msansl', alphabet = 'sans' } -- mathematical sans-serif small l
+ , { code = 0x1D5C6, char = '𝗆', class = 'ord', cs = 'msansm', alphabet = 'sans' } -- mathematical sans-serif small m
+ , { code = 0x1D5C7, char = '𝗇', class = 'ord', cs = 'msansn', alphabet = 'sans' } -- mathematical sans-serif small n
+ , { code = 0x1D5C8, char = '𝗈', class = 'ord', cs = 'msanso', alphabet = 'sans' } -- mathematical sans-serif small o
+ , { code = 0x1D5C9, char = '𝗉', class = 'ord', cs = 'msansp', alphabet = 'sans' } -- mathematical sans-serif small p
+ , { code = 0x1D5CA, char = '𝗊', class = 'ord', cs = 'msansq', alphabet = 'sans' } -- mathematical sans-serif small q
+ , { code = 0x1D5CB, char = '𝗋', class = 'ord', cs = 'msansr', alphabet = 'sans' } -- mathematical sans-serif small r
+ , { code = 0x1D5CC, char = '𝗌', class = 'ord', cs = 'msanss', alphabet = 'sans' } -- mathematical sans-serif small s
+ , { code = 0x1D5CD, char = '𝗍', class = 'ord', cs = 'msanst', alphabet = 'sans' } -- mathematical sans-serif small t
+ , { code = 0x1D5CE, char = '𝗎', class = 'ord', cs = 'msansu', alphabet = 'sans' } -- mathematical sans-serif small u
+ , { code = 0x1D5CF, char = '𝗏', class = 'ord', cs = 'msansv', alphabet = 'sans' } -- mathematical sans-serif small v
+ , { code = 0x1D5D0, char = '𝗐', class = 'ord', cs = 'msansw', alphabet = 'sans' } -- mathematical sans-serif small w
+ , { code = 0x1D5D1, char = '𝗑', class = 'ord', cs = 'msansx', alphabet = 'sans' } -- mathematical sans-serif small x
+ , { code = 0x1D5D2, char = '𝗒', class = 'ord', cs = 'msansy', alphabet = 'sans' } -- mathematical sans-serif small y
+ , { code = 0x1D5D3, char = '𝗓', class = 'ord', cs = 'msansz', alphabet = 'sans' } -- mathematical sans-serif small z
+ , { code = 0x1D5D4, char = '𝗔', class = 'ord', cs = 'mbfsansA', alphabet = 'sans' } -- mathematical sans-serif bold capital a
+ , { code = 0x1D5D5, char = '𝗕', class = 'ord', cs = 'mbfsansB', alphabet = 'sans' } -- mathematical sans-serif bold capital b
+ , { code = 0x1D5D6, char = '𝗖', class = 'ord', cs = 'mbfsansC', alphabet = 'sans' } -- mathematical sans-serif bold capital c
+ , { code = 0x1D5D7, char = '𝗗', class = 'ord', cs = 'mbfsansD', alphabet = 'sans' } -- mathematical sans-serif bold capital d
+ , { code = 0x1D5D8, char = '𝗘', class = 'ord', cs = 'mbfsansE', alphabet = 'sans' } -- mathematical sans-serif bold capital e
+ , { code = 0x1D5D9, char = '𝗙', class = 'ord', cs = 'mbfsansF', alphabet = 'sans' } -- mathematical sans-serif bold capital f
+ , { code = 0x1D5DA, char = '𝗚', class = 'ord', cs = 'mbfsansG', alphabet = 'sans' } -- mathematical sans-serif bold capital g
+ , { code = 0x1D5DB, char = '𝗛', class = 'ord', cs = 'mbfsansH', alphabet = 'sans' } -- mathematical sans-serif bold capital h
+ , { code = 0x1D5DC, char = '𝗜', class = 'ord', cs = 'mbfsansI', alphabet = 'sans' } -- mathematical sans-serif bold capital i
+ , { code = 0x1D5DD, char = '𝗝', class = 'ord', cs = 'mbfsansJ', alphabet = 'sans' } -- mathematical sans-serif bold capital j
+ , { code = 0x1D5DE, char = '𝗞', class = 'ord', cs = 'mbfsansK', alphabet = 'sans' } -- mathematical sans-serif bold capital k
+ , { code = 0x1D5DF, char = '𝗟', class = 'ord', cs = 'mbfsansL', alphabet = 'sans' } -- mathematical sans-serif bold capital l
+ , { code = 0x1D5E0, char = '𝗠', class = 'ord', cs = 'mbfsansM', alphabet = 'sans' } -- mathematical sans-serif bold capital m
+ , { code = 0x1D5E1, char = '𝗡', class = 'ord', cs = 'mbfsansN', alphabet = 'sans' } -- mathematical sans-serif bold capital n
+ , { code = 0x1D5E2, char = '𝗢', class = 'ord', cs = 'mbfsansO', alphabet = 'sans' } -- mathematical sans-serif bold capital o
+ , { code = 0x1D5E3, char = '𝗣', class = 'ord', cs = 'mbfsansP', alphabet = 'sans' } -- mathematical sans-serif bold capital p
+ , { code = 0x1D5E4, char = '𝗤', class = 'ord', cs = 'mbfsansQ', alphabet = 'sans' } -- mathematical sans-serif bold capital q
+ , { code = 0x1D5E5, char = '𝗥', class = 'ord', cs = 'mbfsansR', alphabet = 'sans' } -- mathematical sans-serif bold capital r
+ , { code = 0x1D5E6, char = '𝗦', class = 'ord', cs = 'mbfsansS', alphabet = 'sans' } -- mathematical sans-serif bold capital s
+ , { code = 0x1D5E7, char = '𝗧', class = 'ord', cs = 'mbfsansT', alphabet = 'sans' } -- mathematical sans-serif bold capital t
+ , { code = 0x1D5E8, char = '𝗨', class = 'ord', cs = 'mbfsansU', alphabet = 'sans' } -- mathematical sans-serif bold capital u
+ , { code = 0x1D5E9, char = '𝗩', class = 'ord', cs = 'mbfsansV', alphabet = 'sans' } -- mathematical sans-serif bold capital v
+ , { code = 0x1D5EA, char = '𝗪', class = 'ord', cs = 'mbfsansW', alphabet = 'sans' } -- mathematical sans-serif bold capital w
+ , { code = 0x1D5EB, char = '𝗫', class = 'ord', cs = 'mbfsansX', alphabet = 'sans' } -- mathematical sans-serif bold capital x
+ , { code = 0x1D5EC, char = '𝗬', class = 'ord', cs = 'mbfsansY', alphabet = 'sans' } -- mathematical sans-serif bold capital y
+ , { code = 0x1D5ED, char = '𝗭', class = 'ord', cs = 'mbfsansZ', alphabet = 'sans' } -- mathematical sans-serif bold capital z
+ , { code = 0x1D5EE, char = '𝗮', class = 'ord', cs = 'mbfsansa', alphabet = 'sans' } -- mathematical sans-serif bold small a
+ , { code = 0x1D5EF, char = '𝗯', class = 'ord', cs = 'mbfsansb', alphabet = 'sans' } -- mathematical sans-serif bold small b
+ , { code = 0x1D5F0, char = '𝗰', class = 'ord', cs = 'mbfsansc', alphabet = 'sans' } -- mathematical sans-serif bold small c
+ , { code = 0x1D5F1, char = '𝗱', class = 'ord', cs = 'mbfsansd', alphabet = 'sans' } -- mathematical sans-serif bold small d
+ , { code = 0x1D5F2, char = '𝗲', class = 'ord', cs = 'mbfsanse', alphabet = 'sans' } -- mathematical sans-serif bold small e
+ , { code = 0x1D5F3, char = '𝗳', class = 'ord', cs = 'mbfsansf', alphabet = 'sans' } -- mathematical sans-serif bold small f
+ , { code = 0x1D5F4, char = '𝗴', class = 'ord', cs = 'mbfsansg', alphabet = 'sans' } -- mathematical sans-serif bold small g
+ , { code = 0x1D5F5, char = '𝗵', class = 'ord', cs = 'mbfsansh', alphabet = 'sans' } -- mathematical sans-serif bold small h
+ , { code = 0x1D5F6, char = '𝗶', class = 'ord', cs = 'mbfsansi', alphabet = 'sans' } -- mathematical sans-serif bold small i
+ , { code = 0x1D5F7, char = '𝗷', class = 'ord', cs = 'mbfsansj', alphabet = 'sans' } -- mathematical sans-serif bold small j
+ , { code = 0x1D5F8, char = '𝗸', class = 'ord', cs = 'mbfsansk', alphabet = 'sans' } -- mathematical sans-serif bold small k
+ , { code = 0x1D5F9, char = '𝗹', class = 'ord', cs = 'mbfsansl', alphabet = 'sans' } -- mathematical sans-serif bold small l
+ , { code = 0x1D5FA, char = '𝗺', class = 'ord', cs = 'mbfsansm', alphabet = 'sans' } -- mathematical sans-serif bold small m
+ , { code = 0x1D5FB, char = '𝗻', class = 'ord', cs = 'mbfsansn', alphabet = 'sans' } -- mathematical sans-serif bold small n
+ , { code = 0x1D5FC, char = '𝗼', class = 'ord', cs = 'mbfsanso', alphabet = 'sans' } -- mathematical sans-serif bold small o
+ , { code = 0x1D5FD, char = '𝗽', class = 'ord', cs = 'mbfsansp', alphabet = 'sans' } -- mathematical sans-serif bold small p
+ , { code = 0x1D5FE, char = '𝗾', class = 'ord', cs = 'mbfsansq', alphabet = 'sans' } -- mathematical sans-serif bold small q
+ , { code = 0x1D5FF, char = '𝗿', class = 'ord', cs = 'mbfsansr', alphabet = 'sans' } -- mathematical sans-serif bold small r
+ , { code = 0x1D600, char = '𝘀', class = 'ord', cs = 'mbfsanss', alphabet = 'sans' } -- mathematical sans-serif bold small s
+ , { code = 0x1D601, char = '𝘁', class = 'ord', cs = 'mbfsanst', alphabet = 'sans' } -- mathematical sans-serif bold small t
+ , { code = 0x1D602, char = '𝘂', class = 'ord', cs = 'mbfsansu', alphabet = 'sans' } -- mathematical sans-serif bold small u
+ , { code = 0x1D603, char = '𝘃', class = 'ord', cs = 'mbfsansv', alphabet = 'sans' } -- mathematical sans-serif bold small v
+ , { code = 0x1D604, char = '𝘄', class = 'ord', cs = 'mbfsansw', alphabet = 'sans' } -- mathematical sans-serif bold small w
+ , { code = 0x1D605, char = '𝘅', class = 'ord', cs = 'mbfsansx', alphabet = 'sans' } -- mathematical sans-serif bold small x
+ , { code = 0x1D606, char = '𝘆', class = 'ord', cs = 'mbfsansy', alphabet = 'sans' } -- mathematical sans-serif bold small y
+ , { code = 0x1D607, char = '𝘇', class = 'ord', cs = 'mbfsansz', alphabet = 'sans' } -- mathematical sans-serif bold small z
+ , { code = 0x1D608, char = '𝘈', class = 'ord', cs = 'mitsansA', alphabet = 'sans' } -- mathematical sans-serif italic capital a
+ , { code = 0x1D609, char = '𝘉', class = 'ord', cs = 'mitsansB', alphabet = 'sans' } -- mathematical sans-serif italic capital b
+ , { code = 0x1D60A, char = '𝘊', class = 'ord', cs = 'mitsansC', alphabet = 'sans' } -- mathematical sans-serif italic capital c
+ , { code = 0x1D60B, char = '𝘋', class = 'ord', cs = 'mitsansD', alphabet = 'sans' } -- mathematical sans-serif italic capital d
+ , { code = 0x1D60C, char = '𝘌', class = 'ord', cs = 'mitsansE', alphabet = 'sans' } -- mathematical sans-serif italic capital e
+ , { code = 0x1D60D, char = '𝘍', class = 'ord', cs = 'mitsansF', alphabet = 'sans' } -- mathematical sans-serif italic capital f
+ , { code = 0x1D60E, char = '𝘎', class = 'ord', cs = 'mitsansG', alphabet = 'sans' } -- mathematical sans-serif italic capital g
+ , { code = 0x1D60F, char = '𝘏', class = 'ord', cs = 'mitsansH', alphabet = 'sans' } -- mathematical sans-serif italic capital h
+ , { code = 0x1D610, char = '𝘐', class = 'ord', cs = 'mitsansI', alphabet = 'sans' } -- mathematical sans-serif italic capital i
+ , { code = 0x1D611, char = '𝘑', class = 'ord', cs = 'mitsansJ', alphabet = 'sans' } -- mathematical sans-serif italic capital j
+ , { code = 0x1D612, char = '𝘒', class = 'ord', cs = 'mitsansK', alphabet = 'sans' } -- mathematical sans-serif italic capital k
+ , { code = 0x1D613, char = '𝘓', class = 'ord', cs = 'mitsansL', alphabet = 'sans' } -- mathematical sans-serif italic capital l
+ , { code = 0x1D614, char = '𝘔', class = 'ord', cs = 'mitsansM', alphabet = 'sans' } -- mathematical sans-serif italic capital m
+ , { code = 0x1D615, char = '𝘕', class = 'ord', cs = 'mitsansN', alphabet = 'sans' } -- mathematical sans-serif italic capital n
+ , { code = 0x1D616, char = '𝘖', class = 'ord', cs = 'mitsansO', alphabet = 'sans' } -- mathematical sans-serif italic capital o
+ , { code = 0x1D617, char = '𝘗', class = 'ord', cs = 'mitsansP', alphabet = 'sans' } -- mathematical sans-serif italic capital p
+ , { code = 0x1D618, char = '𝘘', class = 'ord', cs = 'mitsansQ', alphabet = 'sans' } -- mathematical sans-serif italic capital q
+ , { code = 0x1D619, char = '𝘙', class = 'ord', cs = 'mitsansR', alphabet = 'sans' } -- mathematical sans-serif italic capital r
+ , { code = 0x1D61A, char = '𝘚', class = 'ord', cs = 'mitsansS', alphabet = 'sans' } -- mathematical sans-serif italic capital s
+ , { code = 0x1D61B, char = '𝘛', class = 'ord', cs = 'mitsansT', alphabet = 'sans' } -- mathematical sans-serif italic capital t
+ , { code = 0x1D61C, char = '𝘜', class = 'ord', cs = 'mitsansU', alphabet = 'sans' } -- mathematical sans-serif italic capital u
+ , { code = 0x1D61D, char = '𝘝', class = 'ord', cs = 'mitsansV', alphabet = 'sans' } -- mathematical sans-serif italic capital v
+ , { code = 0x1D61E, char = '𝘞', class = 'ord', cs = 'mitsansW', alphabet = 'sans' } -- mathematical sans-serif italic capital w
+ , { code = 0x1D61F, char = '𝘟', class = 'ord', cs = 'mitsansX', alphabet = 'sans' } -- mathematical sans-serif italic capital x
+ , { code = 0x1D620, char = '𝘠', class = 'ord', cs = 'mitsansY', alphabet = 'sans' } -- mathematical sans-serif italic capital y
+ , { code = 0x1D621, char = '𝘡', class = 'ord', cs = 'mitsansZ', alphabet = 'sans' } -- mathematical sans-serif italic capital z
+ , { code = 0x1D622, char = '𝘢', class = 'ord', cs = 'mitsansa', alphabet = 'sans' } -- mathematical sans-serif italic small a
+ , { code = 0x1D623, char = '𝘣', class = 'ord', cs = 'mitsansb', alphabet = 'sans' } -- mathematical sans-serif italic small b
+ , { code = 0x1D624, char = '𝘤', class = 'ord', cs = 'mitsansc', alphabet = 'sans' } -- mathematical sans-serif italic small c
+ , { code = 0x1D625, char = '𝘥', class = 'ord', cs = 'mitsansd', alphabet = 'sans' } -- mathematical sans-serif italic small d
+ , { code = 0x1D626, char = '𝘦', class = 'ord', cs = 'mitsanse', alphabet = 'sans' } -- mathematical sans-serif italic small e
+ , { code = 0x1D627, char = '𝘧', class = 'ord', cs = 'mitsansf', alphabet = 'sans' } -- mathematical sans-serif italic small f
+ , { code = 0x1D628, char = '𝘨', class = 'ord', cs = 'mitsansg', alphabet = 'sans' } -- mathematical sans-serif italic small g
+ , { code = 0x1D629, char = '𝘩', class = 'ord', cs = 'mitsansh', alphabet = 'sans' } -- mathematical sans-serif italic small h
+ , { code = 0x1D62A, char = '𝘪', class = 'ord', cs = 'mitsansi', alphabet = 'sans' } -- mathematical sans-serif italic small i
+ , { code = 0x1D62B, char = '𝘫', class = 'ord', cs = 'mitsansj', alphabet = 'sans' } -- mathematical sans-serif italic small j
+ , { code = 0x1D62C, char = '𝘬', class = 'ord', cs = 'mitsansk', alphabet = 'sans' } -- mathematical sans-serif italic small k
+ , { code = 0x1D62D, char = '𝘭', class = 'ord', cs = 'mitsansl', alphabet = 'sans' } -- mathematical sans-serif italic small l
+ , { code = 0x1D62E, char = '𝘮', class = 'ord', cs = 'mitsansm', alphabet = 'sans' } -- mathematical sans-serif italic small m
+ , { code = 0x1D62F, char = '𝘯', class = 'ord', cs = 'mitsansn', alphabet = 'sans' } -- mathematical sans-serif italic small n
+ , { code = 0x1D630, char = '𝘰', class = 'ord', cs = 'mitsanso', alphabet = 'sans' } -- mathematical sans-serif italic small o
+ , { code = 0x1D631, char = '𝘱', class = 'ord', cs = 'mitsansp', alphabet = 'sans' } -- mathematical sans-serif italic small p
+ , { code = 0x1D632, char = '𝘲', class = 'ord', cs = 'mitsansq', alphabet = 'sans' } -- mathematical sans-serif italic small q
+ , { code = 0x1D633, char = '𝘳', class = 'ord', cs = 'mitsansr', alphabet = 'sans' } -- mathematical sans-serif italic small r
+ , { code = 0x1D634, char = '𝘴', class = 'ord', cs = 'mitsanss', alphabet = 'sans' } -- mathematical sans-serif italic small s
+ , { code = 0x1D635, char = '𝘵', class = 'ord', cs = 'mitsanst', alphabet = 'sans' } -- mathematical sans-serif italic small t
+ , { code = 0x1D636, char = '𝘶', class = 'ord', cs = 'mitsansu', alphabet = 'sans' } -- mathematical sans-serif italic small u
+ , { code = 0x1D637, char = '𝘷', class = 'ord', cs = 'mitsansv', alphabet = 'sans' } -- mathematical sans-serif italic small v
+ , { code = 0x1D638, char = '𝘸', class = 'ord', cs = 'mitsansw', alphabet = 'sans' } -- mathematical sans-serif italic small w
+ , { code = 0x1D639, char = '𝘹', class = 'ord', cs = 'mitsansx', alphabet = 'sans' } -- mathematical sans-serif italic small x
+ , { code = 0x1D63A, char = '𝘺', class = 'ord', cs = 'mitsansy', alphabet = 'sans' } -- mathematical sans-serif italic small y
+ , { code = 0x1D63B, char = '𝘻', class = 'ord', cs = 'mitsansz', alphabet = 'sans' } -- mathematical sans-serif italic small z
+ , { code = 0x1D63C, char = '𝘼', class = 'ord', cs = 'mbfitsansA', alphabet = 'sans' } -- mathematical sans-serif bold italic capital a
+ , { code = 0x1D63D, char = '𝘽', class = 'ord', cs = 'mbfitsansB', alphabet = 'sans' } -- mathematical sans-serif bold italic capital b
+ , { code = 0x1D63E, char = '𝘾', class = 'ord', cs = 'mbfitsansC', alphabet = 'sans' } -- mathematical sans-serif bold italic capital c
+ , { code = 0x1D63F, char = '𝘿', class = 'ord', cs = 'mbfitsansD', alphabet = 'sans' } -- mathematical sans-serif bold italic capital d
+ , { code = 0x1D640, char = '𝙀', class = 'ord', cs = 'mbfitsansE', alphabet = 'sans' } -- mathematical sans-serif bold italic capital e
+ , { code = 0x1D641, char = '𝙁', class = 'ord', cs = 'mbfitsansF', alphabet = 'sans' } -- mathematical sans-serif bold italic capital f
+ , { code = 0x1D642, char = '𝙂', class = 'ord', cs = 'mbfitsansG', alphabet = 'sans' } -- mathematical sans-serif bold italic capital g
+ , { code = 0x1D643, char = '𝙃', class = 'ord', cs = 'mbfitsansH', alphabet = 'sans' } -- mathematical sans-serif bold italic capital h
+ , { code = 0x1D644, char = '𝙄', class = 'ord', cs = 'mbfitsansI', alphabet = 'sans' } -- mathematical sans-serif bold italic capital i
+ , { code = 0x1D645, char = '𝙅', class = 'ord', cs = 'mbfitsansJ', alphabet = 'sans' } -- mathematical sans-serif bold italic capital j
+ , { code = 0x1D646, char = '𝙆', class = 'ord', cs = 'mbfitsansK', alphabet = 'sans' } -- mathematical sans-serif bold italic capital k
+ , { code = 0x1D647, char = '𝙇', class = 'ord', cs = 'mbfitsansL', alphabet = 'sans' } -- mathematical sans-serif bold italic capital l
+ , { code = 0x1D648, char = '𝙈', class = 'ord', cs = 'mbfitsansM', alphabet = 'sans' } -- mathematical sans-serif bold italic capital m
+ , { code = 0x1D649, char = '𝙉', class = 'ord', cs = 'mbfitsansN', alphabet = 'sans' } -- mathematical sans-serif bold italic capital n
+ , { code = 0x1D64A, char = '𝙊', class = 'ord', cs = 'mbfitsansO', alphabet = 'sans' } -- mathematical sans-serif bold italic capital o
+ , { code = 0x1D64B, char = '𝙋', class = 'ord', cs = 'mbfitsansP', alphabet = 'sans' } -- mathematical sans-serif bold italic capital p
+ , { code = 0x1D64C, char = '𝙌', class = 'ord', cs = 'mbfitsansQ', alphabet = 'sans' } -- mathematical sans-serif bold italic capital q
+ , { code = 0x1D64D, char = '𝙍', class = 'ord', cs = 'mbfitsansR', alphabet = 'sans' } -- mathematical sans-serif bold italic capital r
+ , { code = 0x1D64E, char = '𝙎', class = 'ord', cs = 'mbfitsansS', alphabet = 'sans' } -- mathematical sans-serif bold italic capital s
+ , { code = 0x1D64F, char = '𝙏', class = 'ord', cs = 'mbfitsansT', alphabet = 'sans' } -- mathematical sans-serif bold italic capital t
+ , { code = 0x1D650, char = '𝙐', class = 'ord', cs = 'mbfitsansU', alphabet = 'sans' } -- mathematical sans-serif bold italic capital u
+ , { code = 0x1D651, char = '𝙑', class = 'ord', cs = 'mbfitsansV', alphabet = 'sans' } -- mathematical sans-serif bold italic capital v
+ , { code = 0x1D652, char = '𝙒', class = 'ord', cs = 'mbfitsansW', alphabet = 'sans' } -- mathematical sans-serif bold italic capital w
+ , { code = 0x1D653, char = '𝙓', class = 'ord', cs = 'mbfitsansX', alphabet = 'sans' } -- mathematical sans-serif bold italic capital x
+ , { code = 0x1D654, char = '𝙔', class = 'ord', cs = 'mbfitsansY', alphabet = 'sans' } -- mathematical sans-serif bold italic capital y
+ , { code = 0x1D655, char = '𝙕', class = 'ord', cs = 'mbfitsansZ', alphabet = 'sans' } -- mathematical sans-serif bold italic capital z
+ , { code = 0x1D656, char = '𝙖', class = 'ord', cs = 'mbfitsansa', alphabet = 'sans' } -- mathematical sans-serif bold italic small a
+ , { code = 0x1D657, char = '𝙗', class = 'ord', cs = 'mbfitsansb', alphabet = 'sans' } -- mathematical sans-serif bold italic small b
+ , { code = 0x1D658, char = '𝙘', class = 'ord', cs = 'mbfitsansc', alphabet = 'sans' } -- mathematical sans-serif bold italic small c
+ , { code = 0x1D659, char = '𝙙', class = 'ord', cs = 'mbfitsansd', alphabet = 'sans' } -- mathematical sans-serif bold italic small d
+ , { code = 0x1D65A, char = '𝙚', class = 'ord', cs = 'mbfitsanse', alphabet = 'sans' } -- mathematical sans-serif bold italic small e
+ , { code = 0x1D65B, char = '𝙛', class = 'ord', cs = 'mbfitsansf', alphabet = 'sans' } -- mathematical sans-serif bold italic small f
+ , { code = 0x1D65C, char = '𝙜', class = 'ord', cs = 'mbfitsansg', alphabet = 'sans' } -- mathematical sans-serif bold italic small g
+ , { code = 0x1D65D, char = '𝙝', class = 'ord', cs = 'mbfitsansh', alphabet = 'sans' } -- mathematical sans-serif bold italic small h
+ , { code = 0x1D65E, char = '𝙞', class = 'ord', cs = 'mbfitsansi', alphabet = 'sans' } -- mathematical sans-serif bold italic small i
+ , { code = 0x1D65F, char = '𝙟', class = 'ord', cs = 'mbfitsansj', alphabet = 'sans' } -- mathematical sans-serif bold italic small j
+ , { code = 0x1D660, char = '𝙠', class = 'ord', cs = 'mbfitsansk', alphabet = 'sans' } -- mathematical sans-serif bold italic small k
+ , { code = 0x1D661, char = '𝙡', class = 'ord', cs = 'mbfitsansl', alphabet = 'sans' } -- mathematical sans-serif bold italic small l
+ , { code = 0x1D662, char = '𝙢', class = 'ord', cs = 'mbfitsansm', alphabet = 'sans' } -- mathematical sans-serif bold italic small m
+ , { code = 0x1D663, char = '𝙣', class = 'ord', cs = 'mbfitsansn', alphabet = 'sans' } -- mathematical sans-serif bold italic small n
+ , { code = 0x1D664, char = '𝙤', class = 'ord', cs = 'mbfitsanso', alphabet = 'sans' } -- mathematical sans-serif bold italic small o
+ , { code = 0x1D665, char = '𝙥', class = 'ord', cs = 'mbfitsansp', alphabet = 'sans' } -- mathematical sans-serif bold italic small p
+ , { code = 0x1D666, char = '𝙦', class = 'ord', cs = 'mbfitsansq', alphabet = 'sans' } -- mathematical sans-serif bold italic small q
+ , { code = 0x1D667, char = '𝙧', class = 'ord', cs = 'mbfitsansr', alphabet = 'sans' } -- mathematical sans-serif bold italic small r
+ , { code = 0x1D668, char = '𝙨', class = 'ord', cs = 'mbfitsanss', alphabet = 'sans' } -- mathematical sans-serif bold italic small s
+ , { code = 0x1D669, char = '𝙩', class = 'ord', cs = 'mbfitsanst', alphabet = 'sans' } -- mathematical sans-serif bold italic small t
+ , { code = 0x1D66A, char = '𝙪', class = 'ord', cs = 'mbfitsansu', alphabet = 'sans' } -- mathematical sans-serif bold italic small u
+ , { code = 0x1D66B, char = '𝙫', class = 'ord', cs = 'mbfitsansv', alphabet = 'sans' } -- mathematical sans-serif bold italic small v
+ , { code = 0x1D66C, char = '𝙬', class = 'ord', cs = 'mbfitsansw', alphabet = 'sans' } -- mathematical sans-serif bold italic small w
+ , { code = 0x1D66D, char = '𝙭', class = 'ord', cs = 'mbfitsansx', alphabet = 'sans' } -- mathematical sans-serif bold italic small x
+ , { code = 0x1D66E, char = '𝙮', class = 'ord', cs = 'mbfitsansy', alphabet = 'sans' } -- mathematical sans-serif bold italic small y
+ , { code = 0x1D66F, char = '𝙯', class = 'ord', cs = 'mbfitsansz', alphabet = 'sans' } -- mathematical sans-serif bold italic small z
+ , { code = 0x1D670, char = '𝙰', class = 'ord', cs = 'mttA', alphabet = 'mono' } -- mathematical monospace capital a
+ , { code = 0x1D671, char = '𝙱', class = 'ord', cs = 'mttB', alphabet = 'mono' } -- mathematical monospace capital b
+ , { code = 0x1D672, char = '𝙲', class = 'ord', cs = 'mttC', alphabet = 'mono' } -- mathematical monospace capital c
+ , { code = 0x1D673, char = '𝙳', class = 'ord', cs = 'mttD', alphabet = 'mono' } -- mathematical monospace capital d
+ , { code = 0x1D674, char = '𝙴', class = 'ord', cs = 'mttE', alphabet = 'mono' } -- mathematical monospace capital e
+ , { code = 0x1D675, char = '𝙵', class = 'ord', cs = 'mttF', alphabet = 'mono' } -- mathematical monospace capital f
+ , { code = 0x1D676, char = '𝙶', class = 'ord', cs = 'mttG', alphabet = 'mono' } -- mathematical monospace capital g
+ , { code = 0x1D677, char = '𝙷', class = 'ord', cs = 'mttH', alphabet = 'mono' } -- mathematical monospace capital h
+ , { code = 0x1D678, char = '𝙸', class = 'ord', cs = 'mttI', alphabet = 'mono' } -- mathematical monospace capital i
+ , { code = 0x1D679, char = '𝙹', class = 'ord', cs = 'mttJ', alphabet = 'mono' } -- mathematical monospace capital j
+ , { code = 0x1D67A, char = '𝙺', class = 'ord', cs = 'mttK', alphabet = 'mono' } -- mathematical monospace capital k
+ , { code = 0x1D67B, char = '𝙻', class = 'ord', cs = 'mttL', alphabet = 'mono' } -- mathematical monospace capital l
+ , { code = 0x1D67C, char = '𝙼', class = 'ord', cs = 'mttM', alphabet = 'mono' } -- mathematical monospace capital m
+ , { code = 0x1D67D, char = '𝙽', class = 'ord', cs = 'mttN', alphabet = 'mono' } -- mathematical monospace capital n
+ , { code = 0x1D67E, char = '𝙾', class = 'ord', cs = 'mttO', alphabet = 'mono' } -- mathematical monospace capital o
+ , { code = 0x1D67F, char = '𝙿', class = 'ord', cs = 'mttP', alphabet = 'mono' } -- mathematical monospace capital p
+ , { code = 0x1D680, char = '𝚀', class = 'ord', cs = 'mttQ', alphabet = 'mono' } -- mathematical monospace capital q
+ , { code = 0x1D681, char = '𝚁', class = 'ord', cs = 'mttR', alphabet = 'mono' } -- mathematical monospace capital r
+ , { code = 0x1D682, char = '𝚂', class = 'ord', cs = 'mttS', alphabet = 'mono' } -- mathematical monospace capital s
+ , { code = 0x1D683, char = '𝚃', class = 'ord', cs = 'mttT', alphabet = 'mono' } -- mathematical monospace capital t
+ , { code = 0x1D684, char = '𝚄', class = 'ord', cs = 'mttU', alphabet = 'mono' } -- mathematical monospace capital u
+ , { code = 0x1D685, char = '𝚅', class = 'ord', cs = 'mttV', alphabet = 'mono' } -- mathematical monospace capital v
+ , { code = 0x1D686, char = '𝚆', class = 'ord', cs = 'mttW', alphabet = 'mono' } -- mathematical monospace capital w
+ , { code = 0x1D687, char = '𝚇', class = 'ord', cs = 'mttX', alphabet = 'mono' } -- mathematical monospace capital x
+ , { code = 0x1D688, char = '𝚈', class = 'ord', cs = 'mttY', alphabet = 'mono' } -- mathematical monospace capital y
+ , { code = 0x1D689, char = '𝚉', class = 'ord', cs = 'mttZ', alphabet = 'mono' } -- mathematical monospace capital z
+ , { code = 0x1D68A, char = '𝚊', class = 'ord', cs = 'mtta', alphabet = 'mono' } -- mathematical monospace small a
+ , { code = 0x1D68B, char = '𝚋', class = 'ord', cs = 'mttb', alphabet = 'mono' } -- mathematical monospace small b
+ , { code = 0x1D68C, char = '𝚌', class = 'ord', cs = 'mttc', alphabet = 'mono' } -- mathematical monospace small c
+ , { code = 0x1D68D, char = '𝚍', class = 'ord', cs = 'mttd', alphabet = 'mono' } -- mathematical monospace small d
+ , { code = 0x1D68E, char = '𝚎', class = 'ord', cs = 'mtte', alphabet = 'mono' } -- mathematical monospace small e
+ , { code = 0x1D68F, char = '𝚏', class = 'ord', cs = 'mttf', alphabet = 'mono' } -- mathematical monospace small f
+ , { code = 0x1D690, char = '𝚐', class = 'ord', cs = 'mttg', alphabet = 'mono' } -- mathematical monospace small g
+ , { code = 0x1D691, char = '𝚑', class = 'ord', cs = 'mtth', alphabet = 'mono' } -- mathematical monospace small h
+ , { code = 0x1D692, char = '𝚒', class = 'ord', cs = 'mtti', alphabet = 'mono' } -- mathematical monospace small i
+ , { code = 0x1D693, char = '𝚓', class = 'ord', cs = 'mttj', alphabet = 'mono' } -- mathematical monospace small j
+ , { code = 0x1D694, char = '𝚔', class = 'ord', cs = 'mttk', alphabet = 'mono' } -- mathematical monospace small k
+ , { code = 0x1D695, char = '𝚕', class = 'ord', cs = 'mttl', alphabet = 'mono' } -- mathematical monospace small l
+ , { code = 0x1D696, char = '𝚖', class = 'ord', cs = 'mttm', alphabet = 'mono' } -- mathematical monospace small m
+ , { code = 0x1D697, char = '𝚗', class = 'ord', cs = 'mttn', alphabet = 'mono' } -- mathematical monospace small n
+ , { code = 0x1D698, char = '𝚘', class = 'ord', cs = 'mtto', alphabet = 'mono' } -- mathematical monospace small o
+ , { code = 0x1D699, char = '𝚙', class = 'ord', cs = 'mttp', alphabet = 'mono' } -- mathematical monospace small p
+ , { code = 0x1D69A, char = '𝚚', class = 'ord', cs = 'mttq', alphabet = 'mono' } -- mathematical monospace small q
+ , { code = 0x1D69B, char = '𝚛', class = 'ord', cs = 'mttr', alphabet = 'mono' } -- mathematical monospace small r
+ , { code = 0x1D69C, char = '𝚜', class = 'ord', cs = 'mtts', alphabet = 'mono' } -- mathematical monospace small s
+ , { code = 0x1D69D, char = '𝚝', class = 'ord', cs = 'mttt', alphabet = 'mono' } -- mathematical monospace small t
+ , { code = 0x1D69E, char = '𝚞', class = 'ord', cs = 'mttu', alphabet = 'mono' } -- mathematical monospace small u
+ , { code = 0x1D69F, char = '𝚟', class = 'ord', cs = 'mttv', alphabet = 'mono' } -- mathematical monospace small v
+ , { code = 0x1D6A0, char = '𝚠', class = 'ord', cs = 'mttw', alphabet = 'mono' } -- mathematical monospace small w
+ , { code = 0x1D6A1, char = '𝚡', class = 'ord', cs = 'mttx', alphabet = 'mono' } -- mathematical monospace small x
+ , { code = 0x1D6A2, char = '𝚢', class = 'ord', cs = 'mtty', alphabet = 'mono' } -- mathematical monospace small y
+ , { code = 0x1D6A3, char = '𝚣', class = 'ord', cs = 'mttz', alphabet = 'mono' } -- mathematical monospace small z
+ , { code = 0x1D6A4, char = '𝚤', class = 'ord', cs = 'imath' } -- mathematical italic small dotless i
+ , { code = 0x1D6A5, char = '𝚥', class = 'ord', cs = 'jmath' } -- mathematical italic small dotless j
+ , { code = 0x1D6A8, char = '𝚨', class = 'ord', cs = 'mbfAlpha', alphabet = 'boldgreek' } -- mathematical bold capital alpha
+ , { code = 0x1D6A9, char = '𝚩', class = 'ord', cs = 'mbfBeta', alphabet = 'boldgreek' } -- mathematical bold capital beta
+ , { code = 0x1D6AA, char = '𝚪', class = 'ord', cs = 'mbfGamma', alphabet = 'boldgreek' } -- mathematical bold capital gamma
+ , { code = 0x1D6AB, char = '𝚫', class = 'ord', cs = 'mbfDelta', alphabet = 'boldgreek' } -- mathematical bold capital delta
+ , { code = 0x1D6AC, char = '𝚬', class = 'ord', cs = 'mbfEpsilon', alphabet = 'boldgreek'} -- mathematical bold capital epsilon
+ , { code = 0x1D6AD, char = '𝚭', class = 'ord', cs = 'mbfZeta', alphabet = 'boldgreek' } -- mathematical bold capital zeta
+ , { code = 0x1D6AE, char = '𝚮', class = 'ord', cs = 'mbfEta', alphabet = 'boldgreek' } -- mathematical bold capital eta
+ , { code = 0x1D6AF, char = '𝚯', class = 'ord', cs = 'mbfTheta', alphabet = 'boldgreek' } -- mathematical bold capital theta
+ , { code = 0x1D6B0, char = '𝚰', class = 'ord', cs = 'mbfIota', alphabet = 'boldgreek' } -- mathematical bold capital iota
+ , { code = 0x1D6B1, char = '𝚱', class = 'ord', cs = 'mbfKappa', alphabet = 'boldgreek' } -- mathematical bold capital kappa
+ , { code = 0x1D6B2, char = '𝚲', class = 'ord', cs = 'mbfLambda', alphabet = 'boldgreek' } -- mathematical bold capital lamda
+ , { code = 0x1D6B3, char = '𝚳', class = 'ord', cs = 'mbfMu', alphabet = 'boldgreek' } -- mathematical bold capital mu
+ , { code = 0x1D6B4, char = '𝚴', class = 'ord', cs = 'mbfNu', alphabet = 'boldgreek' } -- mathematical bold capital nu
+ , { code = 0x1D6B5, char = '𝚵', class = 'ord', cs = 'mbfXi', alphabet = 'boldgreek' } -- mathematical bold capital xi
+ , { code = 0x1D6B6, char = '𝚶', class = 'ord', cs = 'mbfOmicron', alphabet = 'boldgreek'} -- mathematical bold capital omicron
+ , { code = 0x1D6B7, char = '𝚷', class = 'ord', cs = 'mbfPi', alphabet = 'boldgreek' } -- mathematical bold capital pi
+ , { code = 0x1D6B8, char = '𝚸', class = 'ord', cs = 'mbfRho', alphabet = 'boldgreek' } -- mathematical bold capital rho
+ , { code = 0x1D6B9, char = '𝚹', class = 'ord', cs = 'mbfvarTheta', alphabet = 'boldgreek'} -- mathematical bold capital theta symbol
+ , { code = 0x1D6BA, char = '𝚺', class = 'ord', cs = 'mbfSigma', alphabet = 'boldgreek' } -- mathematical bold capital sigma
+ , { code = 0x1D6BB, char = '𝚻', class = 'ord', cs = 'mbfTau', alphabet = 'boldgreek' } -- mathematical bold capital tau
+ , { code = 0x1D6BC, char = '𝚼', class = 'ord', cs = 'mbfUpsilon', alphabet = 'boldgreek'} -- mathematical bold capital upsilon
+ , { code = 0x1D6BD, char = '𝚽', class = 'ord', cs = 'mbfPhi', alphabet = 'boldgreek' } -- mathematical bold capital phi
+ , { code = 0x1D6BE, char = '𝚾', class = 'ord', cs = 'mbfChi', alphabet = 'boldgreek' } -- mathematical bold capital chi
+ , { code = 0x1D6BF, char = '𝚿', class = 'ord', cs = 'mbfPsi', alphabet = 'boldgreek' } -- mathematical bold capital psi
+ , { code = 0x1D6C0, char = '𝛀', class = 'ord', cs = 'mbfOmega', alphabet = 'boldgreek' } -- mathematical bold capital omega
+ , { code = 0x1D6C1, char = '𝛁', class = 'ord', cs = 'mbfnabla' } -- mathematical bold nabla
+ , { code = 0x1D6C2, char = '𝛂', class = 'ord', cs = 'mbfalpha', alphabet = 'boldgreek' } -- mathematical bold small alpha
+ , { code = 0x1D6C3, char = '𝛃', class = 'ord', cs = 'mbfbeta', alphabet = 'boldgreek' } -- mathematical bold small beta
+ , { code = 0x1D6C4, char = '𝛄', class = 'ord', cs = 'mbfgamma', alphabet = 'boldgreek' } -- mathematical bold small gamma
+ , { code = 0x1D6C5, char = '𝛅', class = 'ord', cs = 'mbfdelta', alphabet = 'boldgreek' } -- mathematical bold small delta
+ , { code = 0x1D6C6, char = '𝛆', class = 'ord', cs = 'mbfepsilon', alphabet = 'boldgreek'} -- mathematical bold small epsilon
+ , { code = 0x1D6C7, char = '𝛇', class = 'ord', cs = 'mbfzeta', alphabet = 'boldgreek' } -- mathematical bold small zeta
+ , { code = 0x1D6C8, char = '𝛈', class = 'ord', cs = 'mbfeta', alphabet = 'boldgreek' } -- mathematical bold small eta
+ , { code = 0x1D6C9, char = '𝛉', class = 'ord', cs = 'mbftheta', alphabet = 'boldgreek' } -- mathematical bold small theta
+ , { code = 0x1D6CA, char = '𝛊', class = 'ord', cs = 'mbfiota', alphabet = 'boldgreek' } -- mathematical bold small iota
+ , { code = 0x1D6CB, char = '𝛋', class = 'ord', cs = 'mbfkappa', alphabet = 'boldgreek' } -- mathematical bold small kappa
+ , { code = 0x1D6CC, char = '𝛌', class = 'ord', cs = 'mbflambda', alphabet = 'boldgreek' } -- mathematical bold small lamda
+ , { code = 0x1D6CD, char = '𝛍', class = 'ord', cs = 'mbfmu', alphabet = 'boldgreek' } -- mathematical bold small mu
+ , { code = 0x1D6CE, char = '𝛎', class = 'ord', cs = 'mbfnu', alphabet = 'boldgreek' } -- mathematical bold small nu
+ , { code = 0x1D6CF, char = '𝛏', class = 'ord', cs = 'mbfxi', alphabet = 'boldgreek' } -- mathematical bold small xi
+ , { code = 0x1D6D0, char = '𝛐', class = 'ord', cs = 'mbfomicron', alphabet = 'boldgreek'} -- mathematical bold small omicron
+ , { code = 0x1D6D1, char = '𝛑', class = 'ord', cs = 'mbfpi', alphabet = 'boldgreek' } -- mathematical bold small pi
+ , { code = 0x1D6D2, char = '𝛒', class = 'ord', cs = 'mbfrho', alphabet = 'boldgreek' } -- mathematical bold small rho
+ , { code = 0x1D6D3, char = '𝛓', class = 'ord', cs = 'mbfvarsigma', alphabet = 'boldgreek'} -- mathematical bold small final sigma
+ , { code = 0x1D6D4, char = '𝛔', class = 'ord', cs = 'mbfsigma', alphabet = 'boldgreek' } -- mathematical bold small sigma
+ , { code = 0x1D6D5, char = '𝛕', class = 'ord', cs = 'mbftau', alphabet = 'boldgreek' } -- mathematical bold small tau
+ , { code = 0x1D6D6, char = '𝛖', class = 'ord', cs = 'mbfupsilon', alphabet = 'boldgreek'} -- mathematical bold small upsilon
+ , { code = 0x1D6D7, char = '𝛗', class = 'ord', cs = 'mbfphi', alphabet = 'boldgreek' } -- mathematical bold small phi
+ , { code = 0x1D6D8, char = '𝛘', class = 'ord', cs = 'mbfchi', alphabet = 'boldgreek' } -- mathematical bold small chi
+ , { code = 0x1D6D9, char = '𝛙', class = 'ord', cs = 'mbfpsi', alphabet = 'boldgreek' } -- mathematical bold small psi
+ , { code = 0x1D6DA, char = '𝛚', class = 'ord', cs = 'mbfomega', alphabet = 'boldgreek' } -- mathematical bold small omega
+ , { code = 0x1D6DB, char = '𝛛', class = 'ord', cs = 'mbfpartial' } -- mathematical bold partial differential
+ , { code = 0x1D6DC, char = '𝛜', class = 'ord', cs = 'mbfvarepsilon', alphabet = 'boldgreek'} -- mathematical bold epsilon symbol
+ , { code = 0x1D6DD, char = '𝛝', class = 'ord', cs = 'mbfvartheta', alphabet = 'boldgreek'} -- mathematical bold theta symbol
+ , { code = 0x1D6DE, char = '𝛞', class = 'ord', cs = 'mbfvarkappa', alphabet = 'boldgreek'} -- mathematical bold kappa symbol
+ , { code = 0x1D6DF, char = '𝛟', class = 'ord', cs = 'mbfvarphi', alphabet = 'boldgreek' } -- mathematical bold phi symbol
+ , { code = 0x1D6E0, char = '𝛠', class = 'ord', cs = 'mbfvarrho', alphabet = 'boldgreek' } -- mathematical bold rho symbol
+ , { code = 0x1D6E1, char = '𝛡', class = 'ord', cs = 'mbfvarpi', alphabet = 'boldgreek' } -- mathematical bold pi symbol
+ , { code = 0x1D6E2, char = '𝛢', class = 'ord', cs = 'mitAlpha' } -- mathematical italic capital alpha
+ , { code = 0x1D6E3, char = '𝛣', class = 'ord', cs = 'mitBeta' } -- mathematical italic capital beta
+ , { code = 0x1D6E4, char = '𝛤', class = 'ord', cs = 'mitGamma' } -- mathematical italic capital gamma
+ , { code = 0x1D6E5, char = '𝛥', class = 'ord', cs = 'mitDelta' } -- mathematical italic capital delta
+ , { code = 0x1D6E6, char = '𝛦', class = 'ord', cs = 'mitEpsilon' } -- mathematical italic capital epsilon
+ , { code = 0x1D6E7, char = '𝛧', class = 'ord', cs = 'mitZeta' } -- mathematical italic capital zeta
+ , { code = 0x1D6E8, char = '𝛨', class = 'ord', cs = 'mitEta' } -- mathematical italic capital eta
+ , { code = 0x1D6E9, char = '𝛩', class = 'ord', cs = 'mitTheta' } -- mathematical italic capital theta
+ , { code = 0x1D6EA, char = '𝛪', class = 'ord', cs = 'mitIota' } -- mathematical italic capital iota
+ , { code = 0x1D6EB, char = '𝛫', class = 'ord', cs = 'mitKappa' } -- mathematical italic capital kappa
+ , { code = 0x1D6EC, char = '𝛬', class = 'ord', cs = 'mitLambda' } -- mathematical italic capital lamda
+ , { code = 0x1D6ED, char = '𝛭', class = 'ord', cs = 'mitMu' } -- mathematical italic capital mu
+ , { code = 0x1D6EE, char = '𝛮', class = 'ord', cs = 'mitNu' } -- mathematical italic capital nu
+ , { code = 0x1D6EF, char = '𝛯', class = 'ord', cs = 'mitXi' } -- mathematical italic capital xi
+ , { code = 0x1D6F0, char = '𝛰', class = 'ord', cs = 'mitOmicron' } -- mathematical italic capital omicron
+ , { code = 0x1D6F1, char = '𝛱', class = 'ord', cs = 'mitPi' } -- mathematical italic capital pi
+ , { code = 0x1D6F2, char = '𝛲', class = 'ord', cs = 'mitRho' } -- mathematical italic capital rho
+ , { code = 0x1D6F3, char = '𝛳', class = 'ord', cs = 'mitvarTheta' } -- mathematical italic capital theta symbol
+ , { code = 0x1D6F4, char = '𝛴', class = 'ord', cs = 'mitSigma' } -- mathematical italic capital sigma
+ , { code = 0x1D6F5, char = '𝛵', class = 'ord', cs = 'mitTau' } -- mathematical italic capital tau
+ , { code = 0x1D6F6, char = '𝛶', class = 'ord', cs = 'mitUpsilon' } -- mathematical italic capital upsilon
+ , { code = 0x1D6F7, char = '𝛷', class = 'ord', cs = 'mitPhi' } -- mathematical italic capital phi
+ , { code = 0x1D6F8, char = '𝛸', class = 'ord', cs = 'mitChi' } -- mathematical italic capital chi
+ , { code = 0x1D6F9, char = '𝛹', class = 'ord', cs = 'mitPsi' } -- mathematical italic capital psi
+ , { code = 0x1D6FA, char = '𝛺', class = 'ord', cs = 'mitOmega' } -- mathematical italic capital omega
+ , { code = 0x1D6FB, char = '𝛻', class = 'ord', cs = 'mitnabla' } -- mathematical italic nabla
+ , { code = 0x1D6FC, char = '𝛼', class = 'ord', cs = 'mitalpha' } -- mathematical italic small alpha
+ , { code = 0x1D6FD, char = '𝛽', class = 'ord', cs = 'mitbeta' } -- mathematical italic small beta
+ , { code = 0x1D6FE, char = '𝛾', class = 'ord', cs = 'mitgamma' } -- mathematical italic small gamma
+ , { code = 0x1D6FF, char = '𝛿', class = 'ord', cs = 'mitdelta' } -- mathematical italic small delta
+ , { code = 0x1D700, char = '𝜀', class = 'ord', cs = 'mitepsilon' } -- mathematical italic small epsilon
+ , { code = 0x1D701, char = '𝜁', class = 'ord', cs = 'mitzeta' } -- mathematical italic small zeta
+ , { code = 0x1D702, char = '𝜂', class = 'ord', cs = 'miteta' } -- mathematical italic small eta
+ , { code = 0x1D703, char = '𝜃', class = 'ord', cs = 'mittheta' } -- mathematical italic small theta
+ , { code = 0x1D704, char = '𝜄', class = 'ord', cs = 'mitiota' } -- mathematical italic small iota
+ , { code = 0x1D705, char = '𝜅', class = 'ord', cs = 'mitkappa' } -- mathematical italic small kappa
+ , { code = 0x1D706, char = '𝜆', class = 'ord', cs = 'mitlambda' } -- mathematical italic small lamda
+ , { code = 0x1D707, char = '𝜇', class = 'ord', cs = 'mitmu' } -- mathematical italic small mu
+ , { code = 0x1D708, char = '𝜈', class = 'ord', cs = 'mitnu' } -- mathematical italic small nu
+ , { code = 0x1D709, char = '𝜉', class = 'ord', cs = 'mitxi' } -- mathematical italic small xi
+ , { code = 0x1D70A, char = '𝜊', class = 'ord', cs = 'mitomicron' } -- mathematical italic small omicron
+ , { code = 0x1D70B, char = '𝜋', class = 'ord', cs = 'mitpi' } -- mathematical italic small pi
+ , { code = 0x1D70C, char = '𝜌', class = 'ord', cs = 'mitrho' } -- mathematical italic small rho
+ , { code = 0x1D70D, char = '𝜍', class = 'ord', cs = 'mitvarsigma' } -- mathematical italic small final sigma
+ , { code = 0x1D70E, char = '𝜎', class = 'ord', cs = 'mitsigma' } -- mathematical italic small sigma
+ , { code = 0x1D70F, char = '𝜏', class = 'ord', cs = 'mittau' } -- mathematical italic small tau
+ , { code = 0x1D710, char = '𝜐', class = 'ord', cs = 'mitupsilon' } -- mathematical italic small upsilon
+ , { code = 0x1D711, char = '𝜑', class = 'ord', cs = 'mitphi' } -- mathematical italic small phi
+ , { code = 0x1D712, char = '𝜒', class = 'ord', cs = 'mitchi' } -- mathematical italic small chi
+ , { code = 0x1D713, char = '𝜓', class = 'ord', cs = 'mitpsi' } -- mathematical italic small psi
+ , { code = 0x1D714, char = '𝜔', class = 'ord', cs = 'mitomega' } -- mathematical italic small omega
+ , { code = 0x1D715, char = '𝜕', class = 'ord', cs = 'mitpartial' } -- mathematical italic partial differential
+ , { code = 0x1D716, char = '𝜖', class = 'ord', cs = 'mitvarepsilon' } -- mathematical italic epsilon symbol
+ , { code = 0x1D717, char = '𝜗', class = 'ord', cs = 'mitvartheta' } -- mathematical italic theta symbol
+ , { code = 0x1D718, char = '𝜘', class = 'ord', cs = 'mitvarkappa' } -- mathematical italic kappa symbol
+ , { code = 0x1D719, char = '𝜙', class = 'ord', cs = 'mitvarphi' } -- mathematical italic phi symbol
+ , { code = 0x1D71A, char = '𝜚', class = 'ord', cs = 'mitvarrho' } -- mathematical italic rho symbol
+ , { code = 0x1D71B, char = '𝜛', class = 'ord', cs = 'mitvarpi' } -- mathematical italic pi symbol
+ , { code = 0x1D71C, char = '𝜜', class = 'ord', cs = 'mbfitAlpha', alphabet = 'boldgreek' } -- mathematical bold italic capital alpha
+ , { code = 0x1D71D, char = '𝜝', class = 'ord', cs = 'mbfitBeta', alphabet = 'boldgreek' } -- mathematical bold italic capital beta
+ , { code = 0x1D71E, char = '𝜞', class = 'ord', cs = 'mbfitGamma', alphabet = 'boldgreek' } -- mathematical bold italic capital gamma
+ , { code = 0x1D71F, char = '𝜟', class = 'ord', cs = 'mbfitDelta', alphabet = 'boldgreek' } -- mathematical bold italic capital delta
+ , { code = 0x1D720, char = '𝜠', class = 'ord', cs = 'mbfitEpsilon', alphabet = 'boldgreek'} -- mathematical bold italic capital epsilon
+ , { code = 0x1D721, char = '𝜡', class = 'ord', cs = 'mbfitZeta', alphabet = 'boldgreek' } -- mathematical bold italic capital zeta
+ , { code = 0x1D722, char = '𝜢', class = 'ord', cs = 'mbfitEta', alphabet = 'boldgreek' } -- mathematical bold italic capital eta
+ , { code = 0x1D723, char = '𝜣', class = 'ord', cs = 'mbfitTheta', alphabet = 'boldgreek' } -- mathematical bold italic capital theta
+ , { code = 0x1D724, char = '𝜤', class = 'ord', cs = 'mbfitIota', alphabet = 'boldgreek' } -- mathematical bold italic capital iota
+ , { code = 0x1D725, char = '𝜥', class = 'ord', cs = 'mbfitKappa', alphabet = 'boldgreek' } -- mathematical bold italic capital kappa
+ , { code = 0x1D726, char = '𝜦', class = 'ord', cs = 'mbfitLambda', alphabet = 'boldgreek'} -- mathematical bold italic capital lamda
+ , { code = 0x1D727, char = '𝜧', class = 'ord', cs = 'mbfitMu', alphabet = 'boldgreek' } -- mathematical bold italic capital mu
+ , { code = 0x1D728, char = '𝜨', class = 'ord', cs = 'mbfitNu', alphabet = 'boldgreek' } -- mathematical bold italic capital nu
+ , { code = 0x1D729, char = '𝜩', class = 'ord', cs = 'mbfitXi', alphabet = 'boldgreek' } -- mathematical bold italic capital xi
+ , { code = 0x1D72A, char = '𝜪', class = 'ord', cs = 'mbfitOmicron', alphabet = 'boldgreek'} -- mathematical bold italic capital omicron
+ , { code = 0x1D72B, char = '𝜫', class = 'ord', cs = 'mbfitPi', alphabet = 'boldgreek' } -- mathematical bold italic capital pi
+ , { code = 0x1D72C, char = '𝜬', class = 'ord', cs = 'mbfitRho', alphabet = 'boldgreek' } -- mathematical bold italic capital rho
+ , { code = 0x1D72D, char = '𝜭', class = 'ord', cs = 'mbfitvarTheta', alphabet = 'boldgreek'} -- mathematical bold italic capital theta symbol
+ , { code = 0x1D72E, char = '𝜮', class = 'ord', cs = 'mbfitSigma', alphabet = 'boldgreek' } -- mathematical bold italic capital sigma
+ , { code = 0x1D72F, char = '𝜯', class = 'ord', cs = 'mbfitTau', alphabet = 'boldgreek' } -- mathematical bold italic capital tau
+ , { code = 0x1D730, char = '𝜰', class = 'ord', cs = 'mbfitUpsilon', alphabet = 'boldgreek'} -- mathematical bold italic capital upsilon
+ , { code = 0x1D731, char = '𝜱', class = 'ord', cs = 'mbfitPhi', alphabet = 'boldgreek' } -- mathematical bold italic capital phi
+ , { code = 0x1D732, char = '𝜲', class = 'ord', cs = 'mbfitChi', alphabet = 'boldgreek' } -- mathematical bold italic capital chi
+ , { code = 0x1D733, char = '𝜳', class = 'ord', cs = 'mbfitPsi', alphabet = 'boldgreek' } -- mathematical bold italic capital psi
+ , { code = 0x1D734, char = '𝜴', class = 'ord', cs = 'mbfitOmega', alphabet = 'boldgreek' } -- mathematical bold italic capital omega
+ , { code = 0x1D735, char = '𝜵', class = 'ord', cs = 'mbfitnabla' } -- mathematical bold italic nabla
+ , { code = 0x1D736, char = '𝜶', class = 'ord', cs = 'mbfitalpha', alphabet = 'boldgreek' } -- mathematical bold italic small alpha
+ , { code = 0x1D737, char = '𝜷', class = 'ord', cs = 'mbfitbeta', alphabet = 'boldgreek' } -- mathematical bold italic small beta
+ , { code = 0x1D738, char = '𝜸', class = 'ord', cs = 'mbfitgamma', alphabet = 'boldgreek' } -- mathematical bold italic small gamma
+ , { code = 0x1D739, char = '𝜹', class = 'ord', cs = 'mbfitdelta', alphabet = 'boldgreek' } -- mathematical bold italic small delta
+ , { code = 0x1D73A, char = '𝜺', class = 'ord', cs = 'mbfitepsilon', alphabet = 'boldgreek'} -- mathematical bold italic small epsilon
+ , { code = 0x1D73B, char = '𝜻', class = 'ord', cs = 'mbfitzeta', alphabet = 'boldgreek' } -- mathematical bold italic small zeta
+ , { code = 0x1D73C, char = '𝜼', class = 'ord', cs = 'mbfiteta', alphabet = 'boldgreek' } -- mathematical bold italic small eta
+ , { code = 0x1D73D, char = '𝜽', class = 'ord', cs = 'mbfittheta', alphabet = 'boldgreek' } -- mathematical bold italic small theta
+ , { code = 0x1D73E, char = '𝜾', class = 'ord', cs = 'mbfitiota', alphabet = 'boldgreek' } -- mathematical bold italic small iota
+ , { code = 0x1D73F, char = '𝜿', class = 'ord', cs = 'mbfitkappa', alphabet = 'boldgreek' } -- mathematical bold italic small kappa
+ , { code = 0x1D740, char = '𝝀', class = 'ord', cs = 'mbfitlambda', alphabet = 'boldgreek'} -- mathematical bold italic small lamda
+ , { code = 0x1D741, char = '𝝁', class = 'ord', cs = 'mbfitmu', alphabet = 'boldgreek' } -- mathematical bold italic small mu
+ , { code = 0x1D742, char = '𝝂', class = 'ord', cs = 'mbfitnu', alphabet = 'boldgreek' } -- mathematical bold italic small nu
+ , { code = 0x1D743, char = '𝝃', class = 'ord', cs = 'mbfitxi', alphabet = 'boldgreek' } -- mathematical bold italic small xi
+ , { code = 0x1D744, char = '𝝄', class = 'ord', cs = 'mbfitomicron', alphabet = 'boldgreek'} -- mathematical bold italic small omicron
+ , { code = 0x1D745, char = '𝝅', class = 'ord', cs = 'mbfitpi', alphabet = 'boldgreek' } -- mathematical bold italic small pi
+ , { code = 0x1D746, char = '𝝆', class = 'ord', cs = 'mbfitrho', alphabet = 'boldgreek' } -- mathematical bold italic small rho
+ , { code = 0x1D747, char = '𝝇', class = 'ord', cs = 'mbfitvarsigma', alphabet = 'boldgreek'} -- mathematical bold italic small final sigma
+ , { code = 0x1D748, char = '𝝈', class = 'ord', cs = 'mbfitsigma', alphabet = 'boldgreek' } -- mathematical bold italic small sigma
+ , { code = 0x1D749, char = '𝝉', class = 'ord', cs = 'mbfittau', alphabet = 'boldgreek' } -- mathematical bold italic small tau
+ , { code = 0x1D74A, char = '𝝊', class = 'ord', cs = 'mbfitupsilon', alphabet = 'boldgreek'} -- mathematical bold italic small upsilon
+ , { code = 0x1D74B, char = '𝝋', class = 'ord', cs = 'mbfitphi', alphabet = 'boldgreek' } -- mathematical bold italic small phi
+ , { code = 0x1D74C, char = '𝝌', class = 'ord', cs = 'mbfitchi', alphabet = 'boldgreek' } -- mathematical bold italic small chi
+ , { code = 0x1D74D, char = '𝝍', class = 'ord', cs = 'mbfitpsi', alphabet = 'boldgreek' } -- mathematical bold italic small psi
+ , { code = 0x1D74E, char = '𝝎', class = 'ord', cs = 'mbfitomega', alphabet = 'boldgreek' } -- mathematical bold italic small omega
+ , { code = 0x1D74F, char = '𝝏', class = 'ord', cs = 'mbfitpartial' } -- mathematical bold italic partial differential
+ , { code = 0x1D750, char = '𝝐', class = 'ord', cs = 'mbfitvarepsilon', alphabet = 'boldgreek'} -- mathematical bold italic epsilon symbol
+ , { code = 0x1D751, char = '𝝑', class = 'ord', cs = 'mbfitvartheta', alphabet = 'boldgreek'} -- mathematical bold italic theta symbol
+ , { code = 0x1D752, char = '𝝒', class = 'ord', cs = 'mbfitvarkappa', alphabet = 'boldgreek'} -- mathematical bold italic kappa symbol
+ , { code = 0x1D753, char = '𝝓', class = 'ord', cs = 'mbfitvarphi', alphabet = 'boldgreek'} -- mathematical bold italic phi symbol
+ , { code = 0x1D754, char = '𝝔', class = 'ord', cs = 'mbfitvarrho', alphabet = 'boldgreek'} -- mathematical bold italic rho symbol
+ , { code = 0x1D755, char = '𝝕', class = 'ord', cs = 'mbfitvarpi', alphabet = 'boldgreek' } -- mathematical bold italic pi symbol
+ , { code = 0x1D756, char = '𝝖', class = 'ord', cs = 'mbfsansAlpha', alphabet = 'sansgreek' } -- mathematical sans-serif bold capital alpha
+ , { code = 0x1D757, char = '𝝗', class = 'ord', cs = 'mbfsansBeta', alphabet = 'sansgreek' } -- mathematical sans-serif bold capital beta
+ , { code = 0x1D758, char = '𝝘', class = 'ord', cs = 'mbfsansGamma', alphabet = 'sansgreek' } -- mathematical sans-serif bold capital gamma
+ , { code = 0x1D759, char = '𝝙', class = 'ord', cs = 'mbfsansDelta', alphabet = 'sansgreek' } -- mathematical sans-serif bold capital delta
+ , { code = 0x1D75A, char = '𝝚', class = 'ord', cs = 'mbfsansEpsilon', alphabet = 'sansgreek' } -- mathematical sans-serif bold capital epsilon
+ , { code = 0x1D75B, char = '𝝛', class = 'ord', cs = 'mbfsansZeta', alphabet = 'sansgreek' } -- mathematical sans-serif bold capital zeta
+ , { code = 0x1D75C, char = '𝝜', class = 'ord', cs = 'mbfsansEta', alphabet = 'sansgreek' } -- mathematical sans-serif bold capital eta
+ , { code = 0x1D75D, char = '𝝝', class = 'ord', cs = 'mbfsansTheta', alphabet = 'sansgreek' } -- mathematical sans-serif bold capital theta
+ , { code = 0x1D75E, char = '𝝞', class = 'ord', cs = 'mbfsansIota', alphabet = 'sansgreek' } -- mathematical sans-serif bold capital iota
+ , { code = 0x1D75F, char = '𝝟', class = 'ord', cs = 'mbfsansKappa', alphabet = 'sansgreek' } -- mathematical sans-serif bold capital kappa
+ , { code = 0x1D760, char = '𝝠', class = 'ord', cs = 'mbfsansLambda', alphabet = 'sansgreek' } -- mathematical sans-serif bold capital lamda
+ , { code = 0x1D761, char = '𝝡', class = 'ord', cs = 'mbfsansMu', alphabet = 'sansgreek' } -- mathematical sans-serif bold capital mu
+ , { code = 0x1D762, char = '𝝢', class = 'ord', cs = 'mbfsansNu', alphabet = 'sansgreek' } -- mathematical sans-serif bold capital nu
+ , { code = 0x1D763, char = '𝝣', class = 'ord', cs = 'mbfsansXi', alphabet = 'sansgreek' } -- mathematical sans-serif bold capital xi
+ , { code = 0x1D764, char = '𝝤', class = 'ord', cs = 'mbfsansOmicron', alphabet = 'sansgreek' } -- mathematical sans-serif bold capital omicron
+ , { code = 0x1D765, char = '𝝥', class = 'ord', cs = 'mbfsansPi', alphabet = 'sansgreek' } -- mathematical sans-serif bold capital pi
+ , { code = 0x1D766, char = '𝝦', class = 'ord', cs = 'mbfsansRho', alphabet = 'sansgreek' } -- mathematical sans-serif bold capital rho
+ , { code = 0x1D767, char = '𝝧', class = 'ord', cs = 'mbfsansvarTheta', alphabet = 'sansgreek' } -- mathematical sans-serif bold capital theta symbol
+ , { code = 0x1D768, char = '𝝨', class = 'ord', cs = 'mbfsansSigma', alphabet = 'sansgreek' } -- mathematical sans-serif bold capital sigma
+ , { code = 0x1D769, char = '𝝩', class = 'ord', cs = 'mbfsansTau', alphabet = 'sansgreek' } -- mathematical sans-serif bold capital tau
+ , { code = 0x1D76A, char = '𝝪', class = 'ord', cs = 'mbfsansUpsilon', alphabet = 'sansgreek' } -- mathematical sans-serif bold capital upsilon
+ , { code = 0x1D76B, char = '𝝫', class = 'ord', cs = 'mbfsansPhi', alphabet = 'sansgreek' } -- mathematical sans-serif bold capital phi
+ , { code = 0x1D76C, char = '𝝬', class = 'ord', cs = 'mbfsansChi', alphabet = 'sansgreek' } -- mathematical sans-serif bold capital chi
+ , { code = 0x1D76D, char = '𝝭', class = 'ord', cs = 'mbfsansPsi', alphabet = 'sansgreek' } -- mathematical sans-serif bold capital psi
+ , { code = 0x1D76E, char = '𝝮', class = 'ord', cs = 'mbfsansOmega', alphabet = 'sansgreek' } -- mathematical sans-serif bold capital omega
+ , { code = 0x1D76F, char = '𝝯', class = 'ord', cs = 'mbfsansnabla' } -- mathematical sans-serif bold nabla
+ , { code = 0x1D770, char = '𝝰', class = 'ord', cs = 'mbfsansalpha', alphabet = 'sansgreek' } -- mathematical sans-serif bold small alpha
+ , { code = 0x1D771, char = '𝝱', class = 'ord', cs = 'mbfsansbeta', alphabet = 'sansgreek' } -- mathematical sans-serif bold small beta
+ , { code = 0x1D772, char = '𝝲', class = 'ord', cs = 'mbfsansgamma', alphabet = 'sansgreek' } -- mathematical sans-serif bold small gamma
+ , { code = 0x1D773, char = '𝝳', class = 'ord', cs = 'mbfsansdelta', alphabet = 'sansgreek' } -- mathematical sans-serif bold small delta
+ , { code = 0x1D774, char = '𝝴', class = 'ord', cs = 'mbfsansepsilon', alphabet = 'sansgreek' } -- mathematical sans-serif bold small epsilon
+ , { code = 0x1D775, char = '𝝵', class = 'ord', cs = 'mbfsanszeta', alphabet = 'sansgreek' } -- mathematical sans-serif bold small zeta
+ , { code = 0x1D776, char = '𝝶', class = 'ord', cs = 'mbfsanseta', alphabet = 'sansgreek' } -- mathematical sans-serif bold small eta
+ , { code = 0x1D777, char = '𝝷', class = 'ord', cs = 'mbfsanstheta', alphabet = 'sansgreek' } -- mathematical sans-serif bold small theta
+ , { code = 0x1D778, char = '𝝸', class = 'ord', cs = 'mbfsansiota', alphabet = 'sansgreek' } -- mathematical sans-serif bold small iota
+ , { code = 0x1D779, char = '𝝹', class = 'ord', cs = 'mbfsanskappa', alphabet = 'sansgreek' } -- mathematical sans-serif bold small kappa
+ , { code = 0x1D77A, char = '𝝺', class = 'ord', cs = 'mbfsanslambda', alphabet = 'sansgreek' } -- mathematical sans-serif bold small lamda
+ , { code = 0x1D77B, char = '𝝻', class = 'ord', cs = 'mbfsansmu', alphabet = 'sansgreek' } -- mathematical sans-serif bold small mu
+ , { code = 0x1D77C, char = '𝝼', class = 'ord', cs = 'mbfsansnu', alphabet = 'sansgreek' } -- mathematical sans-serif bold small nu
+ , { code = 0x1D77D, char = '𝝽', class = 'ord', cs = 'mbfsansxi', alphabet = 'sansgreek' } -- mathematical sans-serif bold small xi
+ , { code = 0x1D77E, char = '𝝾', class = 'ord', cs = 'mbfsansomicron', alphabet = 'sansgreek' } -- mathematical sans-serif bold small omicron
+ , { code = 0x1D77F, char = '𝝿', class = 'ord', cs = 'mbfsanspi', alphabet = 'sansgreek' } -- mathematical sans-serif bold small pi
+ , { code = 0x1D780, char = '𝞀', class = 'ord', cs = 'mbfsansrho', alphabet = 'sansgreek' } -- mathematical sans-serif bold small rho
+ , { code = 0x1D781, char = '𝞁', class = 'ord', cs = 'mbfsansvarsigma', alphabet = 'sansgreek' } -- mathematical sans-serif bold small final sigma
+ , { code = 0x1D782, char = '𝞂', class = 'ord', cs = 'mbfsanssigma', alphabet = 'sansgreek' } -- mathematical sans-serif bold small sigma
+ , { code = 0x1D783, char = '𝞃', class = 'ord', cs = 'mbfsanstau', alphabet = 'sansgreek' } -- mathematical sans-serif bold small tau
+ , { code = 0x1D784, char = '𝞄', class = 'ord', cs = 'mbfsansupsilon', alphabet = 'sansgreek' } -- mathematical sans-serif bold small upsilon
+ , { code = 0x1D785, char = '𝞅', class = 'ord', cs = 'mbfsansphi', alphabet = 'sansgreek' } -- mathematical sans-serif bold small phi
+ , { code = 0x1D786, char = '𝞆', class = 'ord', cs = 'mbfsanschi', alphabet = 'sansgreek' } -- mathematical sans-serif bold small chi
+ , { code = 0x1D787, char = '𝞇', class = 'ord', cs = 'mbfsanspsi', alphabet = 'sansgreek' } -- mathematical sans-serif bold small psi
+ , { code = 0x1D788, char = '𝞈', class = 'ord', cs = 'mbfsansomega', alphabet = 'sansgreek' } -- mathematical sans-serif bold small omega
+ , { code = 0x1D789, char = '𝞉', class = 'ord', cs = 'mbfsanspartial' } -- mathematical sans-serif bold partial differential
+ , { code = 0x1D78A, char = '𝞊', class = 'ord', cs = 'mbfsansvarepsilon', alphabet = 'sansgreek'} -- mathematical sans-serif bold epsilon symbol
+ , { code = 0x1D78B, char = '𝞋', class = 'ord', cs = 'mbfsansvartheta', alphabet = 'sansgreek' } -- mathematical sans-serif bold theta symbol
+ , { code = 0x1D78C, char = '𝞌', class = 'ord', cs = 'mbfsansvarkappa', alphabet = 'sansgreek' } -- mathematical sans-serif bold kappa symbol
+ , { code = 0x1D78D, char = '𝞍', class = 'ord', cs = 'mbfsansvarphi', alphabet = 'sansgreek' } -- mathematical sans-serif bold phi symbol
+ , { code = 0x1D78E, char = '𝞎', class = 'ord', cs = 'mbfsansvarrho', alphabet = 'sansgreek' } -- mathematical sans-serif bold rho symbol
+ , { code = 0x1D78F, char = '𝞏', class = 'ord', cs = 'mbfsansvarpi', alphabet = 'sansgreek' } -- mathematical sans-serif bold pi symbol
+ , { code = 0x1D790, char = '𝞐', class = 'ord', cs = 'mbfitsansAlpha', alphabet = 'sansgreek' } -- mathematical sans-serif bold italic capital alpha
+ , { code = 0x1D791, char = '𝞑', class = 'ord', cs = 'mbfitsansBeta', alphabet = 'sansgreek' } -- mathematical sans-serif bold italic capital beta
+ , { code = 0x1D792, char = '𝞒', class = 'ord', cs = 'mbfitsansGamma', alphabet = 'sansgreek' } -- mathematical sans-serif bold italic capital gamma
+ , { code = 0x1D793, char = '𝞓', class = 'ord', cs = 'mbfitsansDelta', alphabet = 'sansgreek' } -- mathematical sans-serif bold italic capital delta
+ , { code = 0x1D794, char = '𝞔', class = 'ord', cs = 'mbfitsansEpsilon', alphabet = 'sansgreek' } -- mathematical sans-serif bold italic capital epsilon
+ , { code = 0x1D795, char = '𝞕', class = 'ord', cs = 'mbfitsansZeta', alphabet = 'sansgreek' } -- mathematical sans-serif bold italic capital zeta
+ , { code = 0x1D796, char = '𝞖', class = 'ord', cs = 'mbfitsansEta', alphabet = 'sansgreek' } -- mathematical sans-serif bold italic capital eta
+ , { code = 0x1D797, char = '𝞗', class = 'ord', cs = 'mbfitsansTheta', alphabet = 'sansgreek' } -- mathematical sans-serif bold italic capital theta
+ , { code = 0x1D798, char = '𝞘', class = 'ord', cs = 'mbfitsansIota', alphabet = 'sansgreek' } -- mathematical sans-serif bold italic capital iota
+ , { code = 0x1D799, char = '𝞙', class = 'ord', cs = 'mbfitsansKappa', alphabet = 'sansgreek' } -- mathematical sans-serif bold italic capital kappa
+ , { code = 0x1D79A, char = '𝞚', class = 'ord', cs = 'mbfitsansLambda', alphabet = 'sansgreek' } -- mathematical sans-serif bold italic capital lamda
+ , { code = 0x1D79B, char = '𝞛', class = 'ord', cs = 'mbfitsansMu', alphabet = 'sansgreek' } -- mathematical sans-serif bold italic capital mu
+ , { code = 0x1D79C, char = '𝞜', class = 'ord', cs = 'mbfitsansNu', alphabet = 'sansgreek' } -- mathematical sans-serif bold italic capital nu
+ , { code = 0x1D79D, char = '𝞝', class = 'ord', cs = 'mbfitsansXi', alphabet = 'sansgreek' } -- mathematical sans-serif bold italic capital xi
+ , { code = 0x1D79E, char = '𝞞', class = 'ord', cs = 'mbfitsansOmicron', alphabet = 'sansgreek' } -- mathematical sans-serif bold italic capital omicron
+ , { code = 0x1D79F, char = '𝞟', class = 'ord', cs = 'mbfitsansPi', alphabet = 'sansgreek' } -- mathematical sans-serif bold italic capital pi
+ , { code = 0x1D7A0, char = '𝞠', class = 'ord', cs = 'mbfitsansRho', alphabet = 'sansgreek' } -- mathematical sans-serif bold italic capital rho
+ , { code = 0x1D7A1, char = '𝞡', class = 'ord', cs = 'mbfitsansvarTheta', alphabet = 'sansgreek'} -- mathematical sans-serif bold italic capital theta symbol
+ , { code = 0x1D7A2, char = '𝞢', class = 'ord', cs = 'mbfitsansSigma', alphabet = 'sansgreek' } -- mathematical sans-serif bold italic capital sigma
+ , { code = 0x1D7A3, char = '𝞣', class = 'ord', cs = 'mbfitsansTau', alphabet = 'sansgreek' } -- mathematical sans-serif bold italic capital tau
+ , { code = 0x1D7A4, char = '𝞤', class = 'ord', cs = 'mbfitsansUpsilon', alphabet = 'sansgreek' } -- mathematical sans-serif bold italic capital upsilon
+ , { code = 0x1D7A5, char = '𝞥', class = 'ord', cs = 'mbfitsansPhi', alphabet = 'sansgreek' } -- mathematical sans-serif bold italic capital phi
+ , { code = 0x1D7A6, char = '𝞦', class = 'ord', cs = 'mbfitsansChi', alphabet = 'sansgreek' } -- mathematical sans-serif bold italic capital chi
+ , { code = 0x1D7A7, char = '𝞧', class = 'ord', cs = 'mbfitsansPsi', alphabet = 'sansgreek' } -- mathematical sans-serif bold italic capital psi
+ , { code = 0x1D7A8, char = '𝞨', class = 'ord', cs = 'mbfitsansOmega', alphabet = 'sansgreek' } -- mathematical sans-serif bold italic capital omega
+ , { code = 0x1D7A9, char = '𝞩', class = 'ord', cs = 'mbfitsansnabla' } -- mathematical sans-serif bold italic nabla
+ , { code = 0x1D7AA, char = '𝞪', class = 'ord', cs = 'mbfitsansalpha', alphabet = 'sansgreek' } -- mathematical sans-serif bold italic small alpha
+ , { code = 0x1D7AB, char = '𝞫', class = 'ord', cs = 'mbfitsansbeta', alphabet = 'sansgreek' } -- mathematical sans-serif bold italic small beta
+ , { code = 0x1D7AC, char = '𝞬', class = 'ord', cs = 'mbfitsansgamma', alphabet = 'sansgreek' } -- mathematical sans-serif bold italic small gamma
+ , { code = 0x1D7AD, char = '𝞭', class = 'ord', cs = 'mbfitsansdelta', alphabet = 'sansgreek' } -- mathematical sans-serif bold italic small delta
+ , { code = 0x1D7AE, char = '𝞮', class = 'ord', cs = 'mbfitsansepsilon', alphabet = 'sansgreek' } -- mathematical sans-serif bold italic small epsilon
+ , { code = 0x1D7AF, char = '𝞯', class = 'ord', cs = 'mbfitsanszeta', alphabet = 'sansgreek' } -- mathematical sans-serif bold italic small zeta
+ , { code = 0x1D7B0, char = '𝞰', class = 'ord', cs = 'mbfitsanseta', alphabet = 'sansgreek' } -- mathematical sans-serif bold italic small eta
+ , { code = 0x1D7B1, char = '𝞱', class = 'ord', cs = 'mbfitsanstheta', alphabet = 'sansgreek' } -- mathematical sans-serif bold italic small theta
+ , { code = 0x1D7B2, char = '𝞲', class = 'ord', cs = 'mbfitsansiota', alphabet = 'sansgreek' } -- mathematical sans-serif bold italic small iota
+ , { code = 0x1D7B3, char = '𝞳', class = 'ord', cs = 'mbfitsanskappa', alphabet = 'sansgreek' } -- mathematical sans-serif bold italic small kappa
+ , { code = 0x1D7B4, char = '𝞴', class = 'ord', cs = 'mbfitsanslambda', alphabet = 'sansgreek' } -- mathematical sans-serif bold italic small lamda
+ , { code = 0x1D7B5, char = '𝞵', class = 'ord', cs = 'mbfitsansmu', alphabet = 'sansgreek' } -- mathematical sans-serif bold italic small mu
+ , { code = 0x1D7B6, char = '𝞶', class = 'ord', cs = 'mbfitsansnu', alphabet = 'sansgreek' } -- mathematical sans-serif bold italic small nu
+ , { code = 0x1D7B7, char = '𝞷', class = 'ord', cs = 'mbfitsansxi', alphabet = 'sansgreek' } -- mathematical sans-serif bold italic small xi
+ , { code = 0x1D7B8, char = '𝞸', class = 'ord', cs = 'mbfitsansomicron', alphabet = 'sansgreek' } -- mathematical sans-serif bold italic small omicron
+ , { code = 0x1D7B9, char = '𝞹', class = 'ord', cs = 'mbfitsanspi', alphabet = 'sansgreek' } -- mathematical sans-serif bold italic small pi
+ , { code = 0x1D7BA, char = '𝞺', class = 'ord', cs = 'mbfitsansrho', alphabet = 'sansgreek' } -- mathematical sans-serif bold italic small rho
+ , { code = 0x1D7BB, char = '𝞻', class = 'ord', cs = 'mbfitsansvarsigma', alphabet = 'sansgreek'} -- mathematical sans-serif bold italic small final sigma
+ , { code = 0x1D7BC, char = '𝞼', class = 'ord', cs = 'mbfitsanssigma', alphabet = 'sansgreek' } -- mathematical sans-serif bold italic small sigma
+ , { code = 0x1D7BD, char = '𝞽', class = 'ord', cs = 'mbfitsanstau', alphabet = 'sansgreek' } -- mathematical sans-serif bold italic small tau
+ , { code = 0x1D7BE, char = '𝞾', class = 'ord', cs = 'mbfitsansupsilon', alphabet = 'sansgreek' } -- mathematical sans-serif bold italic small upsilon
+ , { code = 0x1D7BF, char = '𝞿', class = 'ord', cs = 'mbfitsansphi', alphabet = 'sansgreek' } -- mathematical sans-serif bold italic small phi
+ , { code = 0x1D7C0, char = '𝟀', class = 'ord', cs = 'mbfitsanschi', alphabet = 'sansgreek' } -- mathematical sans-serif bold italic small chi
+ , { code = 0x1D7C1, char = '𝟁', class = 'ord', cs = 'mbfitsanspsi', alphabet = 'sansgreek' } -- mathematical sans-serif bold italic small psi
+ , { code = 0x1D7C2, char = '𝟂', class = 'ord', cs = 'mbfitsansomega', alphabet = 'sansgreek' } -- mathematical sans-serif bold italic small omega
+ , { code = 0x1D7C3, char = '𝟃', class = 'ord', cs = 'mbfitsanspartial' } -- mathematical sans-serif bold italic partial differential
+ , { code = 0x1D7C4, char = '𝟄', class = 'ord', cs = 'mbfitsansvarepsilon', alphabet = 'sansgreek'} -- mathematical sans-serif bold italic epsilon symbol
+ , { code = 0x1D7C5, char = '𝟅', class = 'ord', cs = 'mbfitsansvartheta', alphabet = 'sansgreek'} -- mathematical sans-serif bold italic theta symbol
+ , { code = 0x1D7C6, char = '𝟆', class = 'ord', cs = 'mbfitsansvarkappa', alphabet = 'sansgreek'} -- mathematical sans-serif bold italic kappa symbol
+ , { code = 0x1D7C7, char = '𝟇', class = 'ord', cs = 'mbfitsansvarphi', alphabet = 'sansgreek' } -- mathematical sans-serif bold italic phi symbol
+ , { code = 0x1D7C8, char = '𝟈', class = 'ord', cs = 'mbfitsansvarrho', alphabet = 'sansgreek' } -- mathematical sans-serif bold italic rho symbol
+ , { code = 0x1D7C9, char = '𝟉', class = 'ord', cs = 'mbfitsansvarpi', alphabet = 'sansgreek' } -- mathematical sans-serif bold italic pi symbol
+ , { code = 0x1D7CA, char = '𝟊', class = 'ord', cs = 'mbfDigamma', alphabet = 'boldgreek'} -- mathematical bold capital digamma
+ , { code = 0x1D7CB, char = '𝟋', class = 'ord', cs = 'mbfdigamma', alphabet = 'boldgreek'} -- mathematical bold small digamma
+ , { code = 0x1D7CE, char = '𝟎', class = 'ord', cs = 'mbfzero', alphabet = 'bold' } -- mathematical bold digit zero
+ , { code = 0x1D7CF, char = '𝟏', class = 'ord', cs = 'mbfone', alphabet = 'bold' } -- mathematical bold digit one
+ , { code = 0x1D7D0, char = '𝟐', class = 'ord', cs = 'mbftwo', alphabet = 'bold' } -- mathematical bold digit two
+ , { code = 0x1D7D1, char = '𝟑', class = 'ord', cs = 'mbfthree', alphabet = 'bold' } -- mathematical bold digit three
+ , { code = 0x1D7D2, char = '𝟒', class = 'ord', cs = 'mbffour', alphabet = 'bold' } -- mathematical bold digit four
+ , { code = 0x1D7D3, char = '𝟓', class = 'ord', cs = 'mbffive', alphabet = 'bold' } -- mathematical bold digit five
+ , { code = 0x1D7D4, char = '𝟔', class = 'ord', cs = 'mbfsix', alphabet = 'bold' } -- mathematical bold digit six
+ , { code = 0x1D7D5, char = '𝟕', class = 'ord', cs = 'mbfseven', alphabet = 'bold' } -- mathematical bold digit seven
+ , { code = 0x1D7D6, char = '𝟖', class = 'ord', cs = 'mbfeight', alphabet = 'bold' } -- mathematical bold digit eight
+ , { code = 0x1D7D7, char = '𝟗', class = 'ord', cs = 'mbfnine', alphabet = 'bold' } -- mathematical bold digit nine
+ , { code = 0x1D7D8, char = '𝟘', class = 'ord', cs = 'Bbbzero', alphabet = 'blackboard' } -- mathematical double-struck digit zero
+ , { code = 0x1D7D9, char = '𝟙', class = 'ord', cs = 'Bbbone', alphabet = 'blackboard' } -- mathematical double-struck digit one
+ , { code = 0x1D7DA, char = '𝟚', class = 'ord', cs = 'Bbbtwo', alphabet = 'blackboard' } -- mathematical double-struck digit two
+ , { code = 0x1D7DB, char = '𝟛', class = 'ord', cs = 'Bbbthree', alphabet = 'blackboard' } -- mathematical double-struck digit three
+ , { code = 0x1D7DC, char = '𝟜', class = 'ord', cs = 'Bbbfour', alphabet = 'blackboard' } -- mathematical double-struck digit four
+ , { code = 0x1D7DD, char = '𝟝', class = 'ord', cs = 'Bbbfive', alphabet = 'blackboard' } -- mathematical double-struck digit five
+ , { code = 0x1D7DE, char = '𝟞', class = 'ord', cs = 'Bbbsix', alphabet = 'blackboard' } -- mathematical double-struck digit six
+ , { code = 0x1D7DF, char = '𝟟', class = 'ord', cs = 'Bbbseven', alphabet = 'blackboard' } -- mathematical double-struck digit seven
+ , { code = 0x1D7E0, char = '𝟠', class = 'ord', cs = 'Bbbeight', alphabet = 'blackboard' } -- mathematical double-struck digit eight
+ , { code = 0x1D7E1, char = '𝟡', class = 'ord', cs = 'Bbbnine', alphabet = 'blackboard' } -- mathematical double-struck digit nine
+ , { code = 0x1D7E2, char = '𝟢', class = 'ord', cs = 'msanszero', alphabet = 'sans' } -- mathematical sans-serif digit zero
+ , { code = 0x1D7E3, char = '𝟣', class = 'ord', cs = 'msansone', alphabet = 'sans' } -- mathematical sans-serif digit one
+ , { code = 0x1D7E4, char = '𝟤', class = 'ord', cs = 'msanstwo', alphabet = 'sans' } -- mathematical sans-serif digit two
+ , { code = 0x1D7E5, char = '𝟥', class = 'ord', cs = 'msansthree', alphabet = 'sans' } -- mathematical sans-serif digit three
+ , { code = 0x1D7E6, char = '𝟦', class = 'ord', cs = 'msansfour', alphabet = 'sans' } -- mathematical sans-serif digit four
+ , { code = 0x1D7E7, char = '𝟧', class = 'ord', cs = 'msansfive', alphabet = 'sans' } -- mathematical sans-serif digit five
+ , { code = 0x1D7E8, char = '𝟨', class = 'ord', cs = 'msanssix', alphabet = 'sans' } -- mathematical sans-serif digit six
+ , { code = 0x1D7E9, char = '𝟩', class = 'ord', cs = 'msansseven', alphabet = 'sans' } -- mathematical sans-serif digit seven
+ , { code = 0x1D7EA, char = '𝟪', class = 'ord', cs = 'msanseight', alphabet = 'sans' } -- mathematical sans-serif digit eight
+ , { code = 0x1D7EB, char = '𝟫', class = 'ord', cs = 'msansnine', alphabet = 'sans' } -- mathematical sans-serif digit nine
+ , { code = 0x1D7EC, char = '𝟬', class = 'ord', cs = 'mbfsanszero', alphabet = 'sans' } -- mathematical sans-serif bold digit zero
+ , { code = 0x1D7ED, char = '𝟭', class = 'ord', cs = 'mbfsansone', alphabet = 'sans' } -- mathematical sans-serif bold digit one
+ , { code = 0x1D7EE, char = '𝟮', class = 'ord', cs = 'mbfsanstwo', alphabet = 'sans' } -- mathematical sans-serif bold digit two
+ , { code = 0x1D7EF, char = '𝟯', class = 'ord', cs = 'mbfsansthree', alphabet = 'sans' } -- mathematical sans-serif bold digit three
+ , { code = 0x1D7F0, char = '𝟰', class = 'ord', cs = 'mbfsansfour', alphabet = 'sans' } -- mathematical sans-serif bold digit four
+ , { code = 0x1D7F1, char = '𝟱', class = 'ord', cs = 'mbfsansfive', alphabet = 'sans' } -- mathematical sans-serif bold digit five
+ , { code = 0x1D7F2, char = '𝟲', class = 'ord', cs = 'mbfsanssix', alphabet = 'sans' } -- mathematical sans-serif bold digit six
+ , { code = 0x1D7F3, char = '𝟳', class = 'ord', cs = 'mbfsansseven', alphabet = 'sans' } -- mathematical sans-serif bold digit seven
+ , { code = 0x1D7F4, char = '𝟴', class = 'ord', cs = 'mbfsanseight', alphabet = 'sans' } -- mathematical sans-serif bold digit eight
+ , { code = 0x1D7F5, char = '𝟵', class = 'ord', cs = 'mbfsansnine', alphabet = 'sans' } -- mathematical sans-serif bold digit nine
+ , { code = 0x1D7F6, char = '𝟶', class = 'ord', cs = 'mttzero', alphabet = 'mono' } -- mathematical monospace digit zero
+ , { code = 0x1D7F7, char = '𝟷', class = 'ord', cs = 'mttone', alphabet = 'mono' } -- mathematical monospace digit one
+ , { code = 0x1D7F8, char = '𝟸', class = 'ord', cs = 'mtttwo', alphabet = 'mono' } -- mathematical monospace digit two
+ , { code = 0x1D7F9, char = '𝟹', class = 'ord', cs = 'mttthree', alphabet = 'mono' } -- mathematical monospace digit three
+ , { code = 0x1D7FA, char = '𝟺', class = 'ord', cs = 'mttfour', alphabet = 'mono' } -- mathematical monospace digit four
+ , { code = 0x1D7FB, char = '𝟻', class = 'ord', cs = 'mttfive', alphabet = 'mono' } -- mathematical monospace digit five
+ , { code = 0x1D7FC, char = '𝟼', class = 'ord', cs = 'mttsix', alphabet = 'mono' } -- mathematical monospace digit six
+ , { code = 0x1D7FD, char = '𝟽', class = 'ord', cs = 'mttseven', alphabet = 'mono' } -- mathematical monospace digit seven
+ , { code = 0x1D7FE, char = '𝟾', class = 'ord', cs = 'mtteight', alphabet = 'mono' } -- mathematical monospace digit eight
+ , { code = 0x1D7FF, char = '𝟿', class = 'ord', cs = 'mttnine', alphabet = 'mono' } -- mathematical monospace digit nine
+}
diff --git a/macros/luatex/generic/minim-math/minim-math.doc b/macros/luatex/generic/minim-math/minim-math.doc
new file mode 100644
index 0000000000..a176c9b1d0
--- /dev/null
+++ b/macros/luatex/generic/minim-math/minim-math.doc
@@ -0,0 +1,244 @@
+
+\input minim-doc.sty
+
+\manual{minim-math}
+
+\ifchapter \chapter Mathematics
+
+\else \startmetadata
+ author {Esger Renkema}
+ title {minim-math}
+ date {2021-06-01}
+ version {2021/1.0}
+ keywords {LuaTeX; Plain TeX; Unicode mathematics}
+ stopmetadata
+\maketitle \fi
+
+This package gives a simple and higly-configurable way of using unicode and
+OpenType mathematics with plain LuaTeX, making use of most of the latter
+engine’s new capabilities in mathematical typesetting. Also included are proper
+settings and definitions for nearly all unicode mathematical characters, as
+well as a few shorthands and helper macros that seemed useful additions.
+
+Load the package by saying ⟦\input minim-math.tex⟧; this will set up luatex for
+using opentype mathematical fonts and unicode math input.
+It will not, however, select mathematical fonts for you. That you will have to
+do for yourself; see below for instructions.
+
+
+\section Styles and alphabets
+
+For some (mostly alphabetical) characters, multiple variants are available,
+e.g. $\mit A \mup A \mbf A \mbfit A \mbb A \frak A \bffrak A \scr A \bfscr A$.
+You can (locally) override the default style of these with
+⟦*\mathstyle {style}⟧ (equivalent to the old ⟦\bf⟧, ⟦\rm⟧ etc.)
+or with one of the shorthands that apply the style to their argument only:
+\smallskip\smallskip\automarktable \halign{\qquad
+ #\unskip\quad\hfil &#\unskip\quad\hfil &#\unskip\hfil\cr
+Shorthand\quad\strut & Value of ⟦style⟧\quad\strut & Result \cr
+⟦*\mup⟧ & ⟦up⟧/⟦rm⟧ & $\mup {ABC}$ \cr
+⟦*\mit⟧ & ⟦it⟧ & $\mit {ABC}$ \cr
+⟦*\mbf⟧ & ⟦bf⟧ & $\mbf {ABC}$ \cr
+⟦*\mbfit⟧ & ⟦bfit⟧ & $\mbfit {ABC}$ \cr
+⟦*\mbb⟧ & ⟦bb⟧ & $\mbb {ABC}$ \cr
+⟦*\frak⟧ & ⟦frak⟧ & $\frak {ABC}$ \cr
+⟦*\bffrak⟧ & ⟦bffrak⟧ & $\bffrak {ABC}$ \cr
+⟦*\scr⟧ & ⟦cal⟧/⟦scr⟧ & $\scr {ABC}$ \cr
+⟦*\bfscr⟧ & ⟦bfscr⟧ & $\bfscr {ABC}$ \cr
+}
+Styles without shorthand are ⟦sans⟧/⟦sf⟧, ⟦sfit⟧, ⟦sfbf⟧, ⟦sfbfit⟧, ⟦tt⟧/⟦mono⟧
+and finally the special value ⟦*clear⟧ for using the default style.
+You can use the shorthands directly in sub- and superscripts: ⟦v^\scr F⟧ will
+result in $v^\scr F$.
+
+While math families are not used anymore for switching between styles (see
+below), you still can use ⟦\fam⟧ with the values 0, 1, 2, 4, 5, 6 or~7 for
+doing so. This means that plain tex’s ⟦\rm⟧, ⟦\it⟧, ⟦\cal⟧, ⟦\sl⟧, ⟦\bf⟧ and
+⟦\tt⟧ can still be used (at least in math mode).
+
+Please note that ⟦*\mup⟧ is not the right choice for upright multiletter
+symbols or operators: you should use ⟦*\mord⟧ or ⟦*\mop⟧ instead (see near the
+end of this chapter).
+For nonmathematical text, you should use ⟦*\text⟧ instead of ⟦\mup⟧.
+
+The default properties of characters can be set with one of the following three
+commands:
+\startlist
+\item\ignore. ⟦*\mathmap {character list} {style}⟧
+\item\ignore. ⟦*\mathclass {character list} {class}⟧
+\item\ignore. ⟦*\mathfam {character list} nr⟧
+\stoplist
+There, ⟦style⟧ is one of the above and ⟦class⟧ is the name of a class as below.
+Finally, the ⟦character list⟧ should be a comma-separated list with elements of
+one of the following forms:
+\startlist
+{\def\⟦#1{⟦[\uppercase{#1}#1]\kern-1pt}
+\item1. a list of characters, like ⟦abc⟧ or ⟦\partial⟧ or $ℝ$;
+\item2. a character range, like ⟦`A-`Z⟧, ⟦65-90⟧ or ⟦"41-"5A⟧;
+\item3. one of the alphabets \⟦latin⟧, \⟦greek⟧, or ⟦digits⟧;
+\item4. one of the style groups ⟦bold⟧, ⟦boldgreek⟧, ⟦sans⟧, ⟦sansgreek⟧,
+⟦mono⟧, ⟦blackboard⟧, ⟦fraktur⟧ or ⟦script⟧;
+\item5. the name of a math class:
+⟦ord⟧, ⟦op⟧, ⟦bin⟧, ⟦rel⟧, ⟦fence⟧, ⟦open⟧, ⟦close⟧ or ⟦punct⟧.
+}\stoplist
+
+Note that unicode is somewhat irregular in its encoding of mathematical
+letters; this is taken into account when using ranges as under~(2) above. Thus,
+⟦`\mscra-`\mscrz⟧ really gives you all lowercase script characters, despite
+e.g.~$ℯ$ being well outside that range.
+
+The default style settings are ⟦\mathmap {latin, greek, Latin}{it}⟧.
+Since the math family setting is not used anymore for selecting different
+styles, the default family of every symbol is zero.
+Instead, you can use ⟦\mathfam⟧ for mixing fonts (see below).
+The ⟦class⟧ option to ⟦\mathclass⟧ should be one of the names under~5.
+
+
+\section Character variants
+
+You can change the default appearance of several greek characters with
+⟦*\use∥-math∥-variant {chars}⟧ or ⟦*\usemathdefault {chars}⟧, where ⟦chars⟧ is
+a list of normal greek characters.
+As in unicode but against tex’s tradition, the variants are
+$\usemathvariant{εθΘκπρφ}εθΘκπρφ$ and the defaults $εθΘκπρφ$.
+The macros ⟦*\varepsilon⟧ etc. have been updated to reflect the unicode
+variants.
+
+The appearance of root symbols can be set with ⟦*\closedroots⟧ ($\closedroots
+\smash{√2}$) and ⟦*\normalroots⟧ ($\smash{√2}$, the default).
+
+Say ⟦*\unicodedots⟧ to use the unicode dots characters ($\unicodedots…⋮⋰⋱$) and
+⟦*\traditionaldots⟧ to construct these characters from periods ($\smash{…⋮⋰⋱}$,
+the default).
+Both settings affect the meaning of both the actual characters and the ⟦\xdots⟧
+macros ($\mathstyle{mono}x∈\{l,v,c,a,d\}$).
+Unlike in traditional plain tex, the traditional dots are available in script
+sizes, too.
+
+Say ⟦*\decimalcomma⟧ and have commas appear as $\decimalcomma1,2$ instead
+of~$1,2$ (⟦*\nodecimalcomma⟧ restores the default).
+The explicit ⟦*\comma⟧, like ⟦*\colon⟧, will always be punctuation.
+
+The behaviour of limits on integral signs can be set by redefining
+⟦*\intlimits⟧ (the default is ⟦\let \intlimits = \nolimits⟧).
+
+If you want to change the meaning (inside math mode) altogether for a single
+character, you can use the commands ⟦*\mathdef⟧ and ⟦*\mathlet⟧.
+For example, by default, you can use the letter ħ for the reduced planck
+constant~$ħ$;
+this has been made so with ⟦*\mathdef ħ {\hbar}⟧ (you could also have said
+⟦\mathlet ħ \hbar⟧).
+
+
+\section Setting up fonts
+
+The minimum you need do to set up a mathematical font is this:
+
+⟦*\font\tenmath
+ {Latin Modern Math:mode=base;script=math;ssty=0} at 10pt
+\font\tenmaths
+ {Latin Modern Math:mode=base;script=math;ssty=1} at 7pt
+\font\tenmathss
+ {Latin Modern Math:mode=base;script=math;ssty=2} at 5pt
+\textfont 0 = \tenmath
+\scriptfont 0 = \tenmaths
+\scriptscriptfont 0 = \tenmathss⟧
+
+Note that you only have to set up the font for a single family: opentype
+mathematical fonts typically contain all necessary variants of all mathematical
+characters.
+Therefore, the ⟦*\fam⟧ setting has been made a no-op (use ⟦*\setfam⟧ if you
+really need the old primitive) and the default family of all symbols has been
+set to zero.
+
+As mentioned above, you can still change the family number of specific
+characters and this allows you to mix mathematical fonts. For instance, if you
+dislike the current blackboard bold characters, just assign a second font to
+family
+1 and say ⟦\mathfam {blackboard} 1⟧. Less useful are the parameters
+⟦*\accentfam⟧, ⟦*\radicalfam⟧ and ⟦*\extensiblefam⟧ that control the family of
+all accents, radicals and extensibles.
+
+
+\section Shorthands and additions
+
+You can use ⟦*\text⟧ for adding nonmathematical text to your equations.
+It will behave well in sub- and superscripts:
+⟦\text{word}^\text{word}⟧ gives $\smash{\text{word}^\text{word}}$.
+By default, the font used is the normal mathematical font. You can change this
+by setting the ⟦*\textfam⟧ parameter to some nonzero value and assigning
+a different font to that family (see above).
+You probably want to do this, since most commonly-used mathematical fonts do not
+include a normal kerning table.
+
+All the usual arrows can be made extensible by prefacing them with an ⟦x⟧,
+including ⟦\xmapsto⟧ and ⟦\xmapsfrom⟧. Alternatively, you can use ⟦\→⟧ etc. as
+shorthands. Additionally, you can use the following:
+
+{\smallskip\smallskip\automarktable \halign{\qquad
+ \vrule width0pt depth 9pt#\unskip\hfil
+ &&\qquad#\unskip\hfil\cr
+Shorthand & Result \cr
+⟦\bra x, \ket y⟧ & $\bra x, \ket y$ \cr
+⟦\braket x y⟧ & $\braket x y$ \cr
+⟦\norm x, \Norm x⟧ & $\norm x, \Norm x$ \cr
+⟦x \stackrel ?= y⟧ & $x \stackrel ?= y$ \cr
+⟦x \stackbin a+ y⟧ & $x \stackbin a+ y$ \cr
+⟦f\inv⟧ & $f\inv$ \quad (cf. $f^{-1}$) \cr
+⟦a \xrightarrow[down]{up} b⟧ & $a \xrightarrow[down]{up} b$ \cr
+⟦a \xeq[down]{up} b⟧ & $a \xeq[down]{up} b$ \cr
+⟦\frac12, \tfrac12, \dfrac12⟧& $\frac12, \tfrac12, \dfrac12$\cr
+}\smallskip}
+
+Also new are the operators
+⟦\Tr⟧, ⟦\tr⟧, ⟦\Span⟧, ⟦\GL⟧, ⟦\SL⟧, ⟦\SU⟧, ⟦\U⟧, ⟦\SO⟧, ⟦\O⟧,
+⟦\Sp⟧, ⟦\im⟧, ⟦\End⟧, ⟦\Aut⟧, ⟦\Dom⟧ and ⟦\Codom⟧.
+You can define new operators with ⟦*\newmathop⟧ and ⟦*\newlargemathop⟧:
+⟦\newmathop{op}⟧ will define the new operator ⟦\op⟧.
+For single use of an upright symbol, operator or large operator you can use
+⟦*\mord⟧, ⟦*\mop⟧ and ⟦*\mlop⟧.
+The difference between ⟦\mord⟧ and ⟦\mup⟧ is that ⟦\mord⟧ also applies the
+correct symbol spacing.
+
+The accents ⟦\overbrace⟧, ⟦\underbracket⟧ etc. allow a label between square
+brackets:
+⟦$$\underbrace[=1]{(x^2+∥penalty0y^2)}$$⟧ gives
+$$\underbrace[=1]{(x^2 + y^2)}.$$
+
+
+\section Best practices
+
+The following remarks on mathematical typesetting have no relation to the
+contents of this package; I have included them because I find them hard to
+remember.
+
+\startlist
+\item1. ⟦*\eqalign⟧ gives a vertically centered box and can occur many times in
+an equation, while ⟦*\eqalignno⟧ and ⟦*\leqalignno⟧ span whole lines (put the
+equation numbers in the third column). All assume the relation (or operator)
+appears at the right hand side of the ampsersand.
+\item2. The command ⟦*\displaylines⟧ can only have one column that spans the
+whole line (and you will have to add the equation number by hand).
+\item3. Further alignment commands are ⟦*\cases⟧, ⟦*\matrix⟧, ⟦*\pmatrix⟧ (with
+parentheses) and ⟦*\bordermatrix⟧ (includes labels for lines and columns).
+\item4. Finetuning alignments can be done with ⟦*\smash⟧, ⟦*\phantom⟧,
+⟦*\hphantom⟧ and ⟦*\vphantom⟧.
+\item5. Small matrices like $1\;2\choose3\;4$ can be made by misusing
+⟦*\choose⟧ or ⟦*\atop⟧.
+\item6. If you start a line with a binary operator, put a ⟦*{}⟧ before it: this
+way, tex recognises it as such.
+\item7. Thin spaces (⟦*\,⟧) should be inserted: before $\mup dx$, before units,
+after factorials and after ⟦*\dots⟧ if those are followed by a closing
+parenthesis.
+\item8. Whether the differential operator should be set upright or not is as of
+yet an open question in mathematics.
+\item9. You should prefer ⟦*\bigr⟧ and ⟦*\bigl⟧ etc. over ⟦\big⟧, ⟦\Big⟧,
+⟦\bigg⟧ and ⟦\Bigg⟧.
+\item10. An overview of mathematical symbols, with control sequences and their
+availability in different fonts, can be found in ⟦*unimath-symbols.pdf⟧, which
+is part of the unicode-math package.
+\stoplist
+
+\endmanual
+
+
diff --git a/macros/luatex/generic/minim-math/minim-math.lua b/macros/luatex/generic/minim-math/minim-math.lua
new file mode 100644
index 0000000000..194e938819
--- /dev/null
+++ b/macros/luatex/generic/minim-math/minim-math.lua
@@ -0,0 +1,482 @@
+
+local M = {}
+
+local alloc = require ('minim-alloc')
+local callbacks = require ('minim-callbacks')
+
+alloc.remember('minim-math')
+
+-- 1 Alphabet tables
+
+--[[ There are gaps left in the unicode math alphabets
+-- for characters that were already represented
+-- elsewhere. These tables will be used for redirecting
+-- characters mapped to these gaps.
+--]]
+
+local gaps =
+ { [0x1d455] = 0x0210e -- H
+ , [0x1d49d] = 0x0212c -- script B
+ , [0x1d4a0] = 0x02130 -- script E
+ , [0x1d4a1] = 0x02131 -- script F
+ , [0x1d4a3] = 0x0210b -- script H
+ , [0x1d4a4] = 0x02110 -- script I
+ , [0x1d4a7] = 0x02112 -- script L
+ , [0x1d4a8] = 0x02133 -- script M
+ , [0x1d4ad] = 0x0211b -- script R
+ , [0x1d4ba] = 0x0212f -- script e
+ , [0x1d4bc] = 0x0210a -- script g
+ , [0x1d4c4] = 0x02134 -- script o
+ , [0x1d506] = 0x0212d -- fraktur C
+ , [0x1d50b] = 0x0210c -- fraktur H
+ , [0x1d50c] = 0x02111 -- fraktur I
+ , [0x1d515] = 0x0211c -- fraktur R
+ , [0x1d51d] = 0x02128 -- fraktur Z
+ , [0x1d53a] = 0x02102 -- bb C
+ , [0x1d53f] = 0x0210d -- bb H
+ , [0x1d545] = 0x02115 -- bb N
+ , [0x1d547] = 0x02119 -- bb P
+ , [0x1d548] = 0x0211a -- bb Q
+ , [0x1d549] = 0x0211d -- bb R
+ , [0x1d551] = 0x02124 -- bb Z
+ }
+
+-- greek variants have irregular upright values
+local varcorr =
+ { [0x03f4] = 0x03a2 -- ϴ
+ , [0x2207] = 0x03aa -- ∇
+ , [0x2202] = 0x03ca -- ∂
+ , [0x03f5] = 0x03cb -- ϵ
+ , [0x03d1] = 0x03cc -- ϑ
+ , [0x03f0] = 0x03cd -- ϰ
+ , [0x03d5] = 0x03ce -- ϕ
+ , [0x03f1] = 0x03cf -- ϱ
+ , [0x03d6] = 0x03d0 -- ϖ
+ }
+
+--[[ When transforming to other stylistic variants, we need
+-- to know which alphabet a character is in; the transformation
+-- offsets differ for each alphabet.
+--]]
+
+local function getalphabet (n)
+ if n >= 0x61 and n <= 0x7A then return 0x61 -- latin
+ elseif n >= 0x41 and n <= 0x5A then return 0x41 -- Latin
+ elseif n >= 0x30 and n <= 0x39 then return 0x30 -- digits
+ elseif n >= 0x3b1 and n <= 0x3c9 then return 0x3b1 -- greek
+ elseif n >= 0x391 and n <= 0x3a9 then return 0x391 -- Greek
+ elseif (varcorr[n] or 0xfff) < 0x3c0 then return 0x391 -- varGreek
+ elseif (varcorr[n] or 0xfff) < 0x3f0 then return 0x3b1 -- vargreek
+ else return 0 -- the character cannot transform
+ end
+end
+
+--[[ In the offsets table, all transformations can be found for the first
+-- character in the alphabet. The numbers in the table are increments.
+--]]
+
+local offsets =
+ { [0] = {}
+ , [0x61] = -- latin
+ { [1] = 0x1d3ed -- it 𝑎 = 0x1d44e
+ , [3] = 0x1d421 -- bfit 𝒂 = 0x1d482
+ , [4] = 0x1d4f1 -- bb 𝕒 = 0x1d552
+ , [2] = 0x1d3b9 -- bf 𝐚 = 0x1d41a
+ , [5] = 0x1d4bd -- frak 𝔞 = 0x1d51e
+ , [6] = 0x1d525 -- bffrak 𝖆 = 0x1d586
+ , [7] = 0x1d455 -- cal 𝒶 = 0x1d4b6
+ , [8] = 0x1d489 -- bfcal 𝓪 = 0x1d4ea
+ , [9] = 0x1d559 -- sans 𝖺 = 0x1d5ba
+ , [10]= 0x1d5c1 -- sfit 𝘢 = 0x1d622
+ , [11]= 0x1d58d -- sfbf 𝗮 = 0x1d5ee
+ , [12]= 0x1d5f5 -- sfbfit 𝙖 = 0x1d656
+ , [13]= 0x1d629 -- mono 𝚊 = 0x1d68a
+ }
+ , [0x41] = -- Latin
+ { [1] = 0x1d3f3 -- it 𝐴 = 0x1d434
+ , [3] = 0x1d427 -- bfit 𝑨 = 0x1d468
+ , [4] = 0x1d4f7 -- bb 𝔸 = 0x1d538
+ , [2] = 0x1d3bf -- bf 𝐀 = 0x1d400
+ , [5] = 0x1d4c3 -- frak 𝔄 = 0x1d504
+ , [6] = 0x1d52b -- bffrak 𝕬 = 0x1d56c
+ , [7] = 0x1d45b -- cal 𝒜 = 0x1d49c
+ , [8] = 0x1d48f -- bfcal 𝓐 = 0x1d4d0
+ , [9] = 0x1d55f -- sans 𝖠 = 0x1d5a0
+ , [10]= 0x1d5c7 -- sfit 𝘈 = 0x1d608
+ , [11]= 0x1d593 -- sfbf 𝗔 = 0x1d5d4
+ , [12]= 0x1d5fb -- sfbfit 𝘼 = 0x1d63c
+ , [13]= 0x1d62f -- mono 𝙰 = 0x1d670
+ }
+ , [0x30] = -- digits
+ { [2] = 0x1d79e -- bf 𝐀 = 0x1d7ce
+ , [4] = 0x1d7a8 -- bb 𝔸 = 0x1d7d8
+ , [9] = 0x1d7b2 -- sans 𝟬 = 0x1d47e2
+ , [11]= 0x1d7bc -- bfsans 𝟬 = 0x1d47ec
+ , [13]= 0x1d7c6 -- mono 𝟬 = 0x1d47f7
+ }
+ , [0x3b1] = -- greek
+ { [1] = 0x1d34b -- it 𝛼 = 0x1d6fc
+ , [2] = 0x1d311 -- bf 𝛂 = 0x1d6c2
+ , [3] = 0x1d385 -- bfit 𝜶 = 0x1d736
+ , [11]= 0x1d3bf -- sfbf 𝝖 = 0x1d756
+ , [12]= 0x1d3f9 -- sfbfit 𝞪 = 0x1d7aa
+ }
+ , [0x391] = -- Greek
+ { [1] = 0x1d351 -- it 𝛢 = 0x1d6e2
+ , [2] = 0x1d317 -- bf 𝚨 = 0x1d6a8
+ , [3] = 0x1d38b -- bfit 𝜜 = 0x1d71c
+ , [11]= 0x1d3c5 -- sfbf 𝝖 = 0x1d756
+ , [12]= 0x1d3ff -- sfbfit 𝞐 = 0x1d790
+ }
+ }
+
+--[[ The function transform_char() returns a transformed character, or nil if
+-- the character cannot be transformed like that. It is used by the setmap
+-- function (which gives a warning on nil) and by the mlist callback (which
+-- ignores nil).
+--]]
+
+local function add_fam(num)
+ local _, fam, _ = tex.getmathcodes(num)
+ return num, fam
+end
+
+local function transform_char(num, style)
+ if style == 0 then
+ return add_fam(num)
+ else
+ local base = getalphabet(num)
+ local n = offsets[base][style]
+ if n == nil then
+ return nil, nil
+ else
+ local res = varcorr[num] or num
+ res = gaps[n+res] or n+res
+ return add_fam(res)
+ end
+ end
+end
+
+-- 1 Parsing user input
+
+--[[ We accept the following as argument to our lua-side functions:
+-- * An alphabet or class name;
+-- * A numerical range of the form [0-9]+@[0-9]+
+-- * Ordinary strings
+--]]
+
+-- math alphabets like 𝒶𝒷𝒸, 𝔞𝔟𝔠, 𝕒𝕓𝕔, and classes like ord, rel etc.
+local alphabets = alloc.saved_table('math:alphabets')
+
+local function add_to_alphabet(num, code)
+ alphabets[code] = (alphabets[code] or '') .. string.utfcharacter(num)
+end
+
+local function chars_iterator(input)
+ local a = alphabets[input]
+ if a then
+ return string.utfvalues(a)
+ else
+ local from, to = string.match(input, '^([0-9]+)@([0-9]+)$')
+ if from then
+ local i, n = tonumber(from) - 1, tonumber(to)
+ return function()
+ i = i + 1
+ if i <= n then return gaps[i] or i end
+ end
+ else
+ return string.utfvalues(input)
+ end
+ end
+end
+
+local function apply_settings(input, fn, ...)
+ for char in chars_iterator(input) do
+ fn(char, ...)
+ end
+end
+
+-- 1 Switching class and family
+
+--[[ Setting class and family information is rather simple: the difficult part
+-- of this package is switching between math alphabets.
+--]]
+
+local classes = {}
+classes.ord = 0
+classes.op = 1
+classes.bin = 2
+classes.rel = 3
+classes.fence = 3
+classes.open = 4
+classes.close = 5
+classes.punct = 6
+classes.var = 7
+
+local function setclass(char, class)
+ local _, fam , sym = tex.getmathcodes (char)
+ tex.setmathcode (char, classes[class] or class, fam, sym)
+end
+
+local function setfam(char, fam)
+ local class, _, sym = tex.getmathcodes (char)
+ tex.setmathcode (char, class, fam, sym)
+end
+
+function M.setclass (input, class)
+ apply_settings(input, setclass, class)
+end
+
+function M.setfam (input, fam)
+ apply_settings(input, setfam, fam)
+end
+
+-- 1 Character variants
+
+--[[ The settings of variant characters is not coupled to the style mechanism:
+-- rather, it changes the \Umathcode-s directly. Of course, the variant
+-- characters can transform.
+--]]
+
+M.greek_variants =
+ { [0x3b5] = 0x3f5 -- ε ϵ
+ , [0x398] = 0x3f4 -- Θ ϴ
+ , [0x3b8] = 0x3d1 -- θ ϑ
+ , [0x3ba] = 0x3f0 -- κ ϰ
+ , [0x3c6] = 0x3d5 -- φ ϕ
+ , [0x3c1] = 0x3f1 -- ρ ϱ
+ , [0x3c0] = 0x3d6 -- π ϖ
+ }
+
+function M.usevariant (char)
+ for num in string.utfvalues (char) do
+ local class, fam, _ = tex.getmathcodes(num)
+ tex.setmathcode (num, class, fam, M.greek_variants[num] or num)
+ end
+end
+
+function M.usedefault (char)
+ for num in string.utfvalues (char) do
+ local class, fam, _ = tex.getmathcodes(num)
+ tex.setmathcode (num, class, fam, num)
+ end
+end
+
+-- 1 Styles
+
+--[[ The style table gives a numerical value to every math style. The value
+-- `clear' unsets the style attribute.
+--]]
+
+local styles = {}
+styles.clear = alloc.unset
+styles.up = 0
+styles.rm = 0
+styles.it = 1
+styles.mit = 1
+styles.bf = 2
+styles.bfit = 3
+styles.bb = 4
+styles.frak = 5
+styles.bffrak = 6
+styles.cal = 7
+styles.scr = 7
+styles.script = 7
+styles.bfcal = 8
+styles.bfscr = 8
+styles.sf = 9
+styles.sans = 9
+styles.sfit = 10
+styles.sfbf = 11
+styles.sfbfit = 12
+styles.mono = 13
+styles.tt = 13
+
+local style_attribute = alloc.new_attribute ('math style attribute')
+
+function M.setstyle (style)
+ tex.setattribute (style_attribute, styles[style])
+end
+
+-- 1 Switching alphabets
+
+--[[ Which glyph a variable character should transform to is determined by
+-- a tex \count register. This ensures that changes to the math style respect
+-- grouping.
+--
+-- On the lua side, we keep track of these counts in a table (it is filled
+-- from the tex side).
+--]]
+
+local transformcodes = alloc.saved_table ('math:transformcodes')
+
+-- set a character as transformable
+local function set_transform (num, char)
+ c = alloc.new_count ('math transform '..char)
+ transformcodes[num] = c
+ tex.setcount ('global', c, num)
+end
+
+-- query the destination
+local function dest_char (num)
+ local c = transformcodes[num]
+ if c == nil then
+ return num, nil
+ else
+ return add_fam(tex.count[c])
+ end
+end
+
+-- set the destination
+local function setmap (char, style)
+ local target = transform_char (char, styles[style])
+ if target == nil then
+ texio.write_nl ('! minim warning: style '..style..' not available for char '..char..'.')
+ else
+ tex.count[transformcodes[char]] = target
+ end
+end
+
+function M.setmap(input, style)
+ apply_settings(input, setmap, style)
+end
+
+--[[ To allow saving and restoring math style settings, the following function
+-- is a dump of \count and \Umathcode values.
+--]]
+
+function M.save_mathstyles ()
+ for _,v in pairs(transformcodes) do
+ tex.sprint('\\count'..v..'='..tex.count[v]..'\\relax')
+ end
+ for v,_ in pairs(M.greek_variants) do
+ local a,b,c = tex.getmathcodes(v)
+ tex.sprint('\\Umathcode'..v..'='..a..' '..b..' '..c..'\\relax')
+ end
+end
+
+-- 1 The transformation callback
+
+--[[ The stilistic mappings are done in the mlist_to_mlist callback. The
+-- function noad_iterator returns an iterator over the noad list; all
+-- math_char nodes are inspected.
+--
+-- The listmathfields table contains all noad fields that can contain another
+-- list of noads.
+--]]
+
+local listmathfields = { 'head', 'nucleus', 'sub', 'sup', 'accent', 'bot_accent',
+ 'display', 'text', 'script', 'scriptscript', 'num', 'denom', 'degree', 'next' }
+
+local function noad_iterator (head)
+ local nodelist = { link=nil, content=head }
+ return function ()
+ if nodelist == nil then return nil end
+ local n = nodelist.content
+ nodelist = nodelist.link
+ for _,f in pairs(listmathfields) do
+ if node.has_field (n, f) and n[f] ~= nil then
+ nodelist = { link=nodelist, content=n[f] }
+ end
+ end
+ return n
+ end
+end
+
+local math_char = node.id ('math_char')
+
+local function inspect_noads (h,d,n)
+ for nd in noad_iterator (h) do
+ if nd.id == math_char then
+ local sa = node.has_attribute(nd, style_attribute)
+ local char, fam
+ if sa then
+ char, fam = transform_char(nd.char, sa)
+ else
+ char, fam = dest_char(nd.char)
+ end
+ nd.char, nd.fam = char or nd.char, fam or nd.fam
+ end
+ end
+ -- if we would not use minim-callbacks, we would have to call
+ -- node.mlist_to_hlist (h,d,n) here
+ return true
+end
+
+callbacks.register ('mlist_to_mlist', inspect_noads)
+
+-- 1 Reading the math character table
+
+--[[ The following are used for processing the character table. Control
+-- sequences are defined from the lua side; for accents and radicals this
+-- means using tex-side helper macros.
+--
+-- When using the add_mathchar function with accents or radicals, please keep
+-- in mind that it assumes \catcode`\:=11.
+--]]
+
+local default_fam = 0
+
+local accents =
+ { accent = 'accent{}'
+ , botaccent = 'accent{bottom}'
+ , overlay = 'accent{overlay}'
+ , over = 'stack{}'
+ , under = 'stack{bottom}'
+ }
+local is_delimiter =
+ { fence = true
+ , open = true
+ , close = true
+ }
+
+local function tex_accent(class, num, char)
+ kind = kind or ''
+ return '\\math:'..accents[class]..'{'..num..'}'..char
+end
+
+local function add_mathchar(code, char, class, cs, alphabet)
+ if char:sub(0,1) == ' ' then
+ -- accents can be given above a space (compare ' ́' with '́')
+ char = char:sub(2)
+ end
+ local class_nr = classes[class]
+ if class_nr then
+ tex.setmathcode(code, class_nr, default_fam, code)
+ if cs then token.set_macro(cs, char) end
+ if class_nr == 7 then set_transform(code, char) end
+ if is_delimiter[class] then tex.setdelcode(code, default_fam, code, 0, 0) end
+ elseif class == 'radical' then
+ if cs then
+ token.set_macro(cs, '\\math:radical{'..code..'}'..char)
+ tex.print('\\mathlet\\'..char..'\\'..cs)
+ end
+ else
+ -- TODO: in the future, allow accent characters by re-ordering them
+ tex.setmathcode(code, 0, default_fam, 0) -- provisional
+ if cs then token.set_macro(cs, tex_accent(class, code, char)) end
+ end
+ add_to_alphabet(code, class)
+ if alphabet then
+ add_to_alphabet(code, alphabet)
+ end
+end
+
+function M.add_mathchar(t)
+ add_mathchar(t.code, t.char, t.class, t.cs, t.alphabet)
+end
+
+-- 1 Tex-side user interface
+
+alloc.luadef('math:mathcls', function() M.setclass(token.scan_string(), token.scan_string()) end)
+alloc.luadef('math:mathfam', function() M.setfam(token.scan_string(), token.scan_string()) end)
+alloc.luadef('math:mathmap', function() M.setmap(token.scan_string(), token.scan_string()) end)
+
+alloc.luadef('usemathvariant', function() M.usevariant(token.scan_string()) end, 'protected')
+alloc.luadef('usemathdefault', function() M.usedefault(token.scan_string()) end, 'protected')
+alloc.luadef('mathstyle', function() M.setstyle(token.scan_string()) end, 'protected')
+
+--
+
+return M
+
diff --git a/macros/luatex/generic/minim-math/minim-math.pdf b/macros/luatex/generic/minim-math/minim-math.pdf
new file mode 100644
index 0000000000..b5269815dc
--- /dev/null
+++ b/macros/luatex/generic/minim-math/minim-math.pdf
Binary files differ
diff --git a/macros/luatex/generic/minim-math/minim-math.tex b/macros/luatex/generic/minim-math/minim-math.tex
new file mode 100644
index 0000000000..e05ce17f7c
--- /dev/null
+++ b/macros/luatex/generic/minim-math/minim-math.tex
@@ -0,0 +1,517 @@
+
+\ifdefined \minimmathloaded
+ \message{(skipped)}
+ \expandafter\endinput \fi
+\chardef\minimmathloaded=\catcode`:
+\catcode`:=11
+
+\input minim-alloc
+
+% \mathdef c {expansion}
+\protected\def\mathdef#1#2{%
+ \def\mathdef:tmp{#2}%
+ \mathlet{#1}\mathdef:tmp}
+% \mathlet c \csname
+\protected\def\mathlet#1#2{%
+ \mathcode`#1="8000\relax
+ \letcharcode`#1=#2}
+
+% 1 Global style transformations
+
+% first, helper functions for parsing arguments
+
+\def\math:parselist#1#2#3#4{% \function \argwrap {list} {arg}
+ \edef\math:expandedlist{{#3}}%
+ \def\math:listaction##1{#1{##1}{#2{#4}}}%
+ \expandafter\splitcommalist
+ \expandafter\math:parseitem
+ \math:expandedlist}
+
+\def\math:parseitem#1{\math:getrange#1--\math:getrange}
+\def\math:getrange#1-#2-{\def\math:tmp{#2}%
+ \ifx\math:tmp\empty \math:singleargument{#1}\fi
+ \math:rangeargument{#1}{#2}}
+\def\math:singleargument#1#2\math:getrange{\fi%
+ \math:listaction{#1}}
+\def\math:rangeargument#1#2#3\math:getrange{%
+ \math:listaction{\the\numexpr(#1)@\the\numexpr(#2)}}
+
+\def\math:simplequote#1{#1}
+\def\math:tonumber#1{\the\numexpr(#1)\relax}
+
+% then, the user interface
+
+\protected\def\mathcls{\math:parselist\math:mathcls\math:simplequote}
+\protected\def\mathfam{\math:parselist\math:mathfam\math:tonumber}
+\protected\def\mathmap{\math:parselist\math:mathmap\math:simplequote}
+
+% defined from the lua side: \usemathvariant, \usemathdefault, \mathstyle
+
+% 1 Local style transformations
+
+% We use the variable class, but not the family mechanism
+\fam = -1
+\let\setfam=\fam
+
+% for backwards compatibility with plain.tex
+\newcount\math:famcount
+\protected\def\fam{%
+ \afterassignment\math:fam
+ \math:famcount}
+\def\math:fam{%
+ \ifcase\math:famcount
+ \mathstyle{up}\or
+ \mathstyle{it}\or
+ \mathstyle{cal}\or
+ \or % plain family 3 is \tenex
+ \mathstyle{it}\or
+ \mathstyle{sf}\or % slanted math not in unicode
+ \mathstyle{bf}\or
+ \mathstyle{tt}\fi}
+
+% style switches
+\protected\def\mit#1{{\mathstyle{it}#1}}
+\protected\def\mup#1{{\mathstyle{up}#1}}
+\protected\def\mbf#1{{\mathstyle{bf}#1}}
+\protected\def\mbfit#1{{\mathstyle{bfit}#1}}
+\protected\def\mbb#1{{\mathstyle{bb}#1}}
+\protected\def\frak#1{{\mathstyle{frak}#1}}
+\protected\def\bffrak#1{{\mathstyle{bffrak}#1}}
+\protected\def\scr#1{{\mathstyle{scr}#1}} \let\mcal = \cal
+\protected\def\bfscr#1{{\mathstyle{bfscr}#1}} \let\bfcal = \bfscr
+
+% 1 Processing the character table
+
+\newcount \radicalfam \radicalfam = 0
+\newcount \accentfam \accentfam = 0
+\newcount \extensiblefam \extensiblefam = 0
+
+\def\math:accent{\ifmmode% spec num char
+ \expandafter\math:mathaccent\else
+ \expandafter\math:textaccent\fi}
+\def\math:mathaccent#1#2#3{\Umathaccent #1"0 \accentfam #2 }
+\def\math:textaccent#1#2#3#4{#4#3}% might be a normal combining accent
+
+\def\math:stack#1#2#3{% spec num char
+ \withoptions[]{\math:stack:{#1}{#2}{#3}}}
+\def\math:stack:#1#2#3[#4]#5{%
+ {\mathop{\math:accent{#1}{#2}{#3}{#5}}%
+ \ifx\math:stack#4\math:stack\else \limits
+ \ifx\math:stack#1\math:stack^\else_\fi{#4}\fi}}
+
+\def\math:radical{\ifmmode% num char
+ \expandafter\math:mathradical\else
+ \expandafter\math:textradical\fi}
+\def\math:mathradical#1#2{\Uradical\radicalfam #1 }
+\def\math:textradical#1#2{#2}
+
+% We initiate the processing here instead of from the lua side, because the lua
+% file will be executed again inside \everyjob. We are only setting parameters
+% here that will be saved to the format file, so we need not repeat it.
+
+\directlua{%
+ local m = require('minim-math')
+ local file = kpse.find_file('minim-math-table', 'lua')
+ local table = loadfile(file)()
+ for _, t in ipairs(table) do
+ m.add_mathchar(t)
+ end
+}
+
+% 1 Fixing a few characters
+
+% fixing a math cs (prevents expansion loops)
+\def\explicitmathchar#1{%
+ \expandafter\Umathcharnumdef
+ \expandafter#1%
+ \expandafter\Umathcodenum
+ \expandafter`#1}
+
+% special characters must be explicit
+\explicitmathchar\lbrace \let\{=\lbrace
+\explicitmathchar\rbrace \let\}=\rbrace
+\explicitmathchar\percent
+\explicitmathchar\mathdollar
+\explicitmathchar\octothorpe
+\explicitmathchar\ampersand
+
+% decimal comma settings
+\explicitmathchar \comma
+\protected\def\decimalcomma {\Umathcode`\, = 0 \Umathcharfam`\, `\,}
+\protected\def\nodecimalcomma{\Umathcode`\, = 6 \Umathcharfam`\, `\,}
+
+% set the colon to how it used to be
+\Umathcode`\:="3"0"2236 % \ratio
+\Umathchardef\colon "6"0"3A
+
+% ldot as a punctuation mark
+\Umathchardef\ldotp "6"0"2E
+\let \period = \ldotp
+
+% remapping two characters
+\mathlet * \ast
+\mathlet - \minus
+
+% interpret the normal middle dot as the middle dot operator
+\mathlet · \cdot
+\Umathchardef\cdotp "6"0"B7
+
+% some aliases
+\let\neq = \ne
+\let\le = \leq
+\let\ge = \geq
+\let\owns = \ni
+\let\gets = \leftarrow
+\let\to = \rightarrow
+\let\land = \wedge
+\let\lor = \vee
+\let\lnot = \neg
+
+% replace \mathhexbox macros
+\protected\def\mathcharbox#1{\leavevmode
+ \hbox{$\mathsurround0pt\relax#1$}}
+\protected\def\dag{\mathcharbox†}
+\protected\def\ddag{\mathcharbox‡}
+\protected\def\S{\mathcharbox§}
+\protected\def\P{\mathcharbox¶}
+\protected\def\Orb{\mathcharbox◯}
+
+% wide accents are default
+\let\widehat = \hat
+\let\widetilde = \tilde
+\let\overline = \overbar
+\let\underline = \underbar
+
+% integrals
+\let\intlimits=\nolimits
+
+\explicitmathchar\intop
+\explicitmathchar\iintop
+\explicitmathchar\iiintop
+\explicitmathchar\ointop
+\explicitmathchar\oiintop
+\explicitmathchar\oiiintop
+\explicitmathchar\intclockwiseop
+\explicitmathchar\varointclockwiseop
+\explicitmathchar\ointctrclockwiseop
+
+\edef\int {\intop\intlimits}
+\edef\iint {\iintop\intlimits}
+\edef\iiint {\iiintop\intlimits}
+\edef\oint {\ointop\intlimits}
+\edef\oiint {\oiintop\intlimits}
+\edef\oiiint {\oiiintop\intlimits}
+\edef\intclockwise {\intclockwiseop\intlimits}
+\edef\varointclockwise {\varointclockwiseop\intlimits}
+\edef\ointctrclockwise {\ointctrclockwiseop\intlimits}
+
+\mathlet ∫ \int
+\mathlet ∬ \iint
+\mathlet ∭ \iiint
+\mathlet ∮ \oint
+\mathlet ∯ \oiint
+\mathlet ∰ \oiiint
+\mathlet ∱ \intclockwise
+\mathlet ∲ \varointclockwise
+\mathlet ∳ \ointctrclockwise
+
+% 1 Roots
+
+\protected\def\sqrt{\sqrt:make{\Uradical\radicalfam"221A}}
+\protected\def\root#1\of{\sqrt:make{\Uroot\radicalfam"221A{#1}}}
+\def\sqrt:open#1#2{#1{#2}} % braces are necessary
+\def\sqrt:close#1{\mathpalette{\sqrt:closed{#1}}}
+\def\sqrt:closed#1#2#3{% root style content
+ \setbox0=\hbox{$#2\Uradical\radicalfam"221A{#3}$}%
+ #2#1{#3\mkern2mu}\kern-\Umathradicalrule#2%
+ \raise\dimexpr\ht0-1\Umathradicalkern#2-.5\Umathradicalrule#2\hbox
+ {\vrule height0pt depth.2\ht0 width\Umathradicalrule#2}%
+ \kern\Umathradicalkern#2}
+
+\protected\def\normalroots{\let\sqrt:make\sqrt:open}
+\protected\def\closedroots{\let\sqrt:make\sqrt:close}
+
+\normalroots
+
+\mathlet √ \sqrt
+\mathdef ∛ {\root3\of}
+\mathdef ∜ {\root4\of}
+
+% 1 Dots
+
+% \vdots, \ddots, \adots
+\newdimen\mathdots:pt
+\newbox\mathdots:box
+\def\mathdots:init#1#2{%
+ \mathdots:pt=.1\fontdimen6#20\relax
+ \setbox\mathdots:box=\hbox{$#1.$}%
+ \ht\mathdots:box=\mathdots:pt}
+\def\mathdots:choice#1{\mathinner{\mathchoice
+ {\mathdots:init\displaystyle\textfont#1}
+ {\mathdots:init\textstyle\textfont#1}
+ {\mathdots:init\scriptstyle\scriptfont#1}
+ {\mathdots:init\scriptscriptstyle\scriptscriptfont#1}}}
+\protected\def\texvdots{\mathdots:choice{\vbox{%
+ \baselineskip4\mathdots:pt\lineskiplimit0pt\relax \kern6\mathdots:pt
+ \copy\mathdots:box \copy\mathdots:box \copy\mathdots:box}}}
+\protected\def\texddots{\mathdots:choice{\mkern1mu
+ \raise7\mathdots:pt \vbox{\kern7\mathdots:pt\copy\mathdots:box}\mkern2mu
+ \raise4\mathdots:pt \copy\mathdots:box\mkern2mu
+ \raise1\mathdots:pt \copy\mathdots:box\mkern1mu}}
+\protected\def\texadots{\mathdots:choice{\mkern1mu
+ \raise1\mathdots:pt \copy\mathdots:box\mkern2mu
+ \raise4\mathdots:pt \copy\mathdots:box\mkern2mu
+ \raise7\mathdots:pt \vbox{\kern7\mathdots:pt\copy\mathdots:box}\mkern1mu}}
+
+% \ldots and \cdots are unchanged from plain.tex
+\protected\edef\texldots{\ldots}
+\protected\edef\texcdots{\cdots}
+
+% \traditionaldots
+\protected\def\traditionaldots{%
+ \mathlet \⋮ \texvdots \let\vdots = \texvdots
+ \mathlet \⋯ \texcdots \let\cdots = \texcdots
+ \mathlet \⋰ \texadots \let\adots = \texadots
+ \mathlet \⋱ \texddots \let\ddots = \texddots
+ \mathlet \… \texldots \let\ldots = \texldots}
+
+% \unicodedots
+\protected\def\unicodedots{%
+ \Umathcode `\⋮ = "3"0"22EE \let\vdots = \unicodevdots
+ \Umathcode `\⋯ = "0"0"22EF \let\cdots = \unicodecdots
+ \Umathcode `\⋰ = "3"0"22F0 \let\adots = \unicodeadots
+ \Umathcode `\⋱ = "3"0"22F1 \let\ddots = \unicodeddots
+ \Umathcode `\… = "3"0"2026 \let\ldots = \unicodeellipsis}
+
+\traditionaldots
+
+% 1 Primes
+
+% primes
+\mathdef'{\math:prime{}}
+\mathdef`{\math:bprime{}}
+\def\math:prime#1{%
+ \nextifx'{\math:prime:plus{#1}}%
+ {^\csname#1prime\endcsname}}
+\def\math:prime:plus#1'{%
+ \math:prime{#1p}}
+\def\math:bprime#1{%
+ \nextifx`{\math:bprime:plus{#1}}%
+ {^\csname b#1prime\endcsname}}
+\def\math:bprime:plus#1`{%
+ \math:bprime{#1p}}
+% \pprime etc.
+\let\pprime=\dprime
+\let\ppprime=\trprime
+\let\pppprime=\qprime
+\let\bprime=\backprime
+\let\bpprime=\backdprime
+\let\bppprime=\backtrprime
+
+% 1 Superscripts and subscripts
+
+\edef\math:tmp{%
+ \mathdef\Uchar"00B2{^2}
+ \mathdef\Uchar"00B3{^3}
+ \mathdef\Uchar"00B9{^1}
+ \mathdef\Uchar"2070{^0}
+ \mathdef\Uchar"2071{^i}
+ \mathdef\Uchar"2074{^4}
+ \mathdef\Uchar"2075{^5}
+ \mathdef\Uchar"2076{^6}
+ \mathdef\Uchar"2077{^7}
+ \mathdef\Uchar"2078{^8}
+ \mathdef\Uchar"2079{^9}
+ \mathdef\Uchar"207A{^+}
+ \mathdef\Uchar"207B{^-}
+ \mathdef\Uchar"207C{^=}
+ \mathdef\Uchar"207D{^(}
+ \mathdef\Uchar"207E{^)}
+ \mathdef\Uchar"207F{^n}
+ \mathdef\Uchar"1D62{_i}
+ \mathdef\Uchar"1D63{_r}
+ \mathdef\Uchar"1D64{_u}
+ \mathdef\Uchar"1D65{_v}
+ \mathdef\Uchar"1D66{_β}
+ \mathdef\Uchar"1D67{_γ}
+ \mathdef\Uchar"1D68{_ρ}
+ \mathdef\Uchar"1D69{_φ}
+ \mathdef\Uchar"1D6A{_χ}
+ \mathdef\Uchar"2080{_0}
+ \mathdef\Uchar"2081{_1}
+ \mathdef\Uchar"2082{_2}
+ \mathdef\Uchar"2083{_3}
+ \mathdef\Uchar"2084{_4}
+ \mathdef\Uchar"2085{_5}
+ \mathdef\Uchar"2086{_6}
+ \mathdef\Uchar"2087{_7}
+ \mathdef\Uchar"2088{_8}
+ \mathdef\Uchar"2089{_9}
+ \mathdef\Uchar"208A{_+}
+ \mathdef\Uchar"208B{_-}
+ \mathdef\Uchar"208C{_=}
+ \mathdef\Uchar"208D{_(}
+ \mathdef\Uchar"208E{_)}
+ \mathdef\Uchar"2090{_a}
+ \mathdef\Uchar"2091{_e}
+ \mathdef\Uchar"2092{_o}
+ \mathdef\Uchar"2093{_x}
+ \mathdef\Uchar"2094{_ə}
+ \mathdef\Uchar"2095{_h}
+ \mathdef\Uchar"2096{_k}
+ \mathdef\Uchar"2097{_l}
+ \mathdef\Uchar"2098{_m}
+ \mathdef\Uchar"2099{_n}
+ \mathdef\Uchar"209A{_p}
+ \mathdef\Uchar"209B{_s}
+ \mathdef\Uchar"209C{_t}
+ \mathdef\Uchar"2C7C{_j}}
+\math:tmp
+
+% 1 Long arrows
+
+\def\extend#1#2#3{\withoptions[]{\extend:#1{#2}{#3}}}
+\def\extend:#1#2#3[#4]#5{\mathrel{% char left right below above
+ \mathpalette\extend:choose{#1{#2}{#3}{#4}{#5}}}}
+\def\extend:choose#1#2{\extend:choose:#1#2}
+\def\extend:choose:#1#2#3#4#5#6{% style char left right below above
+ \setbox0=\hbox{$#1#5$}\setbox2=\hbox{$#1#6$}%
+ \ifdim \wd0 < \wd2
+ \mathop{\Uoverdelimiter \extensiblefam `#2
+ {\mkern#3mu#6\mkern#4mu}}\limits_{#5}\else
+ \mathop{\Uunderdelimiter \extensiblefam `#2
+ {\mkern#3mu#5\mkern#4mu}}\limits^{#6}\fi}
+
+\protected\def\xleftarrow {\extend←73}
+\protected\def\xrightarrow{\extend→37}
+
+\protected\def\xLeftarrow {\extend⇐73}
+\protected\def\xRightarrow{\extend⇒37}
+
+\protected\def\xleftrightarrow{\extend↔77}
+\protected\def\xLeftrightarrow{\extend⇔77}
+
+\protected\def\xmapsto {\extend↦47}
+\protected\def\xmapsfrom {\extend↤74}
+
+\protected\def\xhookrightarrow {\extend↪67}
+\protected\def\xhookleftarrow {\extend↩76}
+
+\protected\def\xleftrightarrows {\extend⇆77}
+\protected\def\xleftleftarrows {\extend⇇73}
+\protected\def\xrightrightarrows {\extend⇉37}
+
+\protected\def\xeq{\extend=11}
+
+\let \→ \xrightarrow
+\let \⇒ \xRightarrow
+\let \← \xleftarrow
+\let \⇐ \xLeftarrow
+\let \↔ \xleftrightarrow
+\let \⇔ \xLeftrightarrow
+\let \↦ \xmapsto
+\let \↤ \xmapsfrom
+
+% 1 Miscellaneous mathematical functions
+
+% \stackrel {super} {rel}
+\protected\def\stackrel#1#2{\mathrel{\mathop{#2}\limits^{#1}}}
+% \stackbin {super} {bin}
+\protected\def\stackbin#1#2{\mathbin{\mathop{#2}\limits^{#1}}}
+
+% \text {text}
+\newcount\textfam
+\textfam=0
+\protected\def\text#1{{\mathchoice
+ {\hbox{\the\textfont\textfam#1}}%
+ {\hbox{\the\textfont\textfam#1}}%
+ {\hbox{\the\scriptfont\textfam#1}}%
+ {\hbox{\the\scriptscriptfont\textfam#1}}}}
+
+% some definitions with vertical lines
+\def\bra#1{\left⟨#1\right\vert}
+\def\ket#1{\left\vert#1\right⟩}
+\def\braket#1#2{\left⟨#1\middle\vert#2\right⟩}
+\def\norm#1{\left\vert#1\right\vert} \let \abs=\norm
+\def\Norm#1{\left\Vert#1\right\Vert}
+
+% a smaller inverse-function sign
+\protected\def\inv{^{\scriptscriptstyle
+ \mathbin{\setbox0=\hbox{$\scriptscriptstyle-$}
+ \kern.75\wd0 \pdfextension save
+ \pdfextension setmatrix{.75 0 0 1}
+ \kern-\wd0\box0 \pdfextension restore}
+ \mkern-2mu 1}}
+
+% upright multiletter symbols
+\def\mord#1{\mathord{\mathstyle{up}#1}}
+\def\mop #1{\mathop {\mathstyle{up}#1}\nolimits}
+\def\mlop#1{\mathop {\mathstyle{up}#1}\limits}
+
+% \frac, \tfrac, \dfrac
+\protected\def\frac#1#2{\Ustack{#1\over#2}}
+\protected\def\tfrac#1#2{{\textstyle{#1\over#2}}}
+\protected\def\dfrac#1#2{{\displaystyle{#1\over#2}}}
+
+% make a few plain macros \protected
+\def\minim:protect#1{\protected\edef#1{\expandafter\unexpanded\expandafter{#1}}}
+\minim:protect\smash
+\minim:protect\dotfill
+
+% 1 Operators
+
+\def\newmathop#1{\protected\expandafter\def
+ \csname#1\endcsname{\mathop{\mathstyle{up}#1}\nolimits}}
+\def\newlargemathop#1{\protected\expandafter\def
+ \csname#1\endcsname{\mathop{\mathstyle{up}#1}}}
+
+% ported operators
+\newlargemathop {lim}
+\newlargemathop {gcd} \newlargemathop {lcm}
+\newlargemathop {max} \newlargemathop {min}
+\newlargemathop {sup} \newlargemathop {inf}
+\newlargemathop {det}
+\newlargemathop {Pr}
+\newmathop {log} \newmathop {lg} \newmathop {ln}
+\newmathop {sin} \newmathop {arcsin} \newmathop {sinh}
+\newmathop {cos} \newmathop {arccos} \newmathop {cosh}
+\newmathop {tan} \newmathop {arctan} \newmathop {tanh}
+\newmathop {cot} \newmathop {coth}
+\newmathop {sec} \newmathop {csc}
+\newmathop {arg}
+\newmathop {ker}
+\newmathop {dim}
+\newmathop {hom}
+\newmathop {exp}
+\newmathop {deg}
+
+\protected\def\limsup{\mathop{\mathstyle{up}lim\,sup}}
+\protected\def\liminf{\mathop{\mathstyle{up}lim\,inf}}
+
+\let\para=\parallel
+
+% additional operators
+\newmathop {Tr} \newmathop {tr} \newmathop{Span}
+\newmathop {GL} \newmathop {SL}
+\newmathop {SU} \newmathop {U}
+\newmathop {SO} \newmathop {O}
+\newmathop {Sp}
+\newmathop {im}
+\newmathop {End} \newmathop {Aut}
+\newmathop {Dom} \newmathop {Codom}
+
+
+%  standard mappings
+
+\mathstyle{clear}
+\mathmap{latin, greek, Latin}{it}
+
+% map ħ (h-with-stroke) to ℏ (planck-constant)
+\mathdef ħ {ℏ}
+
+% \reqno
+\let\reqno = \eqno
+
+\let\math:tmp=\undefined
+\catcode`:=\minimmathloaded
+
diff --git a/macros/luatex/generic/minim-mp/EUPL-1.2-EN.txt b/macros/luatex/generic/minim-mp/EUPL-1.2-EN.txt
new file mode 100644
index 0000000000..4153cd3775
--- /dev/null
+++ b/macros/luatex/generic/minim-mp/EUPL-1.2-EN.txt
@@ -0,0 +1,287 @@
+ EUROPEAN UNION PUBLIC LICENCE v. 1.2
+ EUPL © the European Union 2007, 2016
+
+This European Union Public Licence (the ‘EUPL’) applies to the Work (as defined
+below) which is provided under the terms of this Licence. Any use of the Work,
+other than as authorised under this Licence is prohibited (to the extent such
+use is covered by a right of the copyright holder of the Work).
+
+The Work is provided under the terms of this Licence when the Licensor (as
+defined below) has placed the following notice immediately following the
+copyright notice for the Work:
+
+ Licensed under the EUPL
+
+or has expressed by any other means his willingness to license under the EUPL.
+
+1. Definitions
+
+In this Licence, the following terms have the following meaning:
+
+- ‘The Licence’: this Licence.
+
+- ‘The Original Work’: the work or software distributed or communicated by the
+ Licensor under this Licence, available as Source Code and also as Executable
+ Code as the case may be.
+
+- ‘Derivative Works’: the works or software that could be created by the
+ Licensee, based upon the Original Work or modifications thereof. This Licence
+ does not define the extent of modification or dependence on the Original Work
+ required in order to classify a work as a Derivative Work; this extent is
+ determined by copyright law applicable in the country mentioned in Article 15.
+
+- ‘The Work’: the Original Work or its Derivative Works.
+
+- ‘The Source Code’: the human-readable form of the Work which is the most
+ convenient for people to study and modify.
+
+- ‘The Executable Code’: any code which has generally been compiled and which is
+ meant to be interpreted by a computer as a program.
+
+- ‘The Licensor’: the natural or legal person that distributes or communicates
+ the Work under the Licence.
+
+- ‘Contributor(s)’: any natural or legal person who modifies the Work under the
+ Licence, or otherwise contributes to the creation of a Derivative Work.
+
+- ‘The Licensee’ or ‘You’: any natural or legal person who makes any usage of
+ the Work under the terms of the Licence.
+
+- ‘Distribution’ or ‘Communication’: any act of selling, giving, lending,
+ renting, distributing, communicating, transmitting, or otherwise making
+ available, online or offline, copies of the Work or providing access to its
+ essential functionalities at the disposal of any other natural or legal
+ person.
+
+2. Scope of the rights granted by the Licence
+
+The Licensor hereby grants You a worldwide, royalty-free, non-exclusive,
+sublicensable licence to do the following, for the duration of copyright vested
+in the Original Work:
+
+- use the Work in any circumstance and for all usage,
+- reproduce the Work,
+- modify the Work, and make Derivative Works based upon the Work,
+- communicate to the public, including the right to make available or display
+ the Work or copies thereof to the public and perform publicly, as the case may
+ be, the Work,
+- distribute the Work or copies thereof,
+- lend and rent the Work or copies thereof,
+- sublicense rights in the Work or copies thereof.
+
+Those rights can be exercised on any media, supports and formats, whether now
+known or later invented, as far as the applicable law permits so.
+
+In the countries where moral rights apply, the Licensor waives his right to
+exercise his moral right to the extent allowed by law in order to make effective
+the licence of the economic rights here above listed.
+
+The Licensor grants to the Licensee royalty-free, non-exclusive usage rights to
+any patents held by the Licensor, to the extent necessary to make use of the
+rights granted on the Work under this Licence.
+
+3. Communication of the Source Code
+
+The Licensor may provide the Work either in its Source Code form, or as
+Executable Code. If the Work is provided as Executable Code, the Licensor
+provides in addition a machine-readable copy of the Source Code of the Work
+along with each copy of the Work that the Licensor distributes or indicates, in
+a notice following the copyright notice attached to the Work, a repository where
+the Source Code is easily and freely accessible for as long as the Licensor
+continues to distribute or communicate the Work.
+
+4. Limitations on copyright
+
+Nothing in this Licence is intended to deprive the Licensee of the benefits from
+any exception or limitation to the exclusive rights of the rights owners in the
+Work, of the exhaustion of those rights or of other applicable limitations
+thereto.
+
+5. Obligations of the Licensee
+
+The grant of the rights mentioned above is subject to some restrictions and
+obligations imposed on the Licensee. Those obligations are the following:
+
+Attribution right: The Licensee shall keep intact all copyright, patent or
+trademarks notices and all notices that refer to the Licence and to the
+disclaimer of warranties. The Licensee must include a copy of such notices and a
+copy of the Licence with every copy of the Work he/she distributes or
+communicates. The Licensee must cause any Derivative Work to carry prominent
+notices stating that the Work has been modified and the date of modification.
+
+Copyleft clause: If the Licensee distributes or communicates copies of the
+Original Works or Derivative Works, this Distribution or Communication will be
+done under the terms of this Licence or of a later version of this Licence
+unless the Original Work is expressly distributed only under this version of the
+Licence — for example by communicating ‘EUPL v. 1.2 only’. The Licensee
+(becoming Licensor) cannot offer or impose any additional terms or conditions on
+the Work or Derivative Work that alter or restrict the terms of the Licence.
+
+Compatibility clause: If the Licensee Distributes or Communicates Derivative
+Works or copies thereof based upon both the Work and another work licensed under
+a Compatible Licence, this Distribution or Communication can be done under the
+terms of this Compatible Licence. For the sake of this clause, ‘Compatible
+Licence’ refers to the licences listed in the appendix attached to this Licence.
+Should the Licensee's obligations under the Compatible Licence conflict with
+his/her obligations under this Licence, the obligations of the Compatible
+Licence shall prevail.
+
+Provision of Source Code: When distributing or communicating copies of the Work,
+the Licensee will provide a machine-readable copy of the Source Code or indicate
+a repository where this Source will be easily and freely available for as long
+as the Licensee continues to distribute or communicate the Work.
+
+Legal Protection: This Licence does not grant permission to use the trade names,
+trademarks, service marks, or names of the Licensor, except as required for
+reasonable and customary use in describing the origin of the Work and
+reproducing the content of the copyright notice.
+
+6. Chain of Authorship
+
+The original Licensor warrants that the copyright in the Original Work granted
+hereunder is owned by him/her or licensed to him/her and that he/she has the
+power and authority to grant the Licence.
+
+Each Contributor warrants that the copyright in the modifications he/she brings
+to the Work are owned by him/her or licensed to him/her and that he/she has the
+power and authority to grant the Licence.
+
+Each time You accept the Licence, the original Licensor and subsequent
+Contributors grant You a licence to their contributions to the Work, under the
+terms of this Licence.
+
+7. Disclaimer of Warranty
+
+The Work is a work in progress, which is continuously improved by numerous
+Contributors. It is not a finished work and may therefore contain defects or
+‘bugs’ inherent to this type of development.
+
+For the above reason, the Work is provided under the Licence on an ‘as is’ basis
+and without warranties of any kind concerning the Work, including without
+limitation merchantability, fitness for a particular purpose, absence of defects
+or errors, accuracy, non-infringement of intellectual property rights other than
+copyright as stated in Article 6 of this Licence.
+
+This disclaimer of warranty is an essential part of the Licence and a condition
+for the grant of any rights to the Work.
+
+8. Disclaimer of Liability
+
+Except in the cases of wilful misconduct or damages directly caused to natural
+persons, the Licensor will in no event be liable for any direct or indirect,
+material or moral, damages of any kind, arising out of the Licence or of the use
+of the Work, including without limitation, damages for loss of goodwill, work
+stoppage, computer failure or malfunction, loss of data or any commercial
+damage, even if the Licensor has been advised of the possibility of such damage.
+However, the Licensor will be liable under statutory product liability laws as
+far such laws apply to the Work.
+
+9. Additional agreements
+
+While distributing the Work, You may choose to conclude an additional agreement,
+defining obligations or services consistent with this Licence. However, if
+accepting obligations, You may act only on your own behalf and on your sole
+responsibility, not on behalf of the original Licensor or any other Contributor,
+and only if You agree to indemnify, defend, and hold each Contributor harmless
+for any liability incurred by, or claims asserted against such Contributor by
+the fact You have accepted any warranty or additional liability.
+
+10. Acceptance of the Licence
+
+The provisions of this Licence can be accepted by clicking on an icon ‘I agree’
+placed under the bottom of a window displaying the text of this Licence or by
+affirming consent in any other similar way, in accordance with the rules of
+applicable law. Clicking on that icon indicates your clear and irrevocable
+acceptance of this Licence and all of its terms and conditions.
+
+Similarly, you irrevocably accept this Licence and all of its terms and
+conditions by exercising any rights granted to You by Article 2 of this Licence,
+such as the use of the Work, the creation by You of a Derivative Work or the
+Distribution or Communication by You of the Work or copies thereof.
+
+11. Information to the public
+
+In case of any Distribution or Communication of the Work by means of electronic
+communication by You (for example, by offering to download the Work from a
+remote location) the distribution channel or media (for example, a website) must
+at least provide to the public the information requested by the applicable law
+regarding the Licensor, the Licence and the way it may be accessible, concluded,
+stored and reproduced by the Licensee.
+
+12. Termination of the Licence
+
+The Licence and the rights granted hereunder will terminate automatically upon
+any breach by the Licensee of the terms of the Licence.
+
+Such a termination will not terminate the licences of any person who has
+received the Work from the Licensee under the Licence, provided such persons
+remain in full compliance with the Licence.
+
+13. Miscellaneous
+
+Without prejudice of Article 9 above, the Licence represents the complete
+agreement between the Parties as to the Work.
+
+If any provision of the Licence is invalid or unenforceable under applicable
+law, this will not affect the validity or enforceability of the Licence as a
+whole. Such provision will be construed or reformed so as necessary to make it
+valid and enforceable.
+
+The European Commission may publish other linguistic versions or new versions of
+this Licence or updated versions of the Appendix, so far this is required and
+reasonable, without reducing the scope of the rights granted by the Licence. New
+versions of the Licence will be published with a unique version number.
+
+All linguistic versions of this Licence, approved by the European Commission,
+have identical value. Parties can take advantage of the linguistic version of
+their choice.
+
+14. Jurisdiction
+
+Without prejudice to specific agreement between parties,
+
+- any litigation resulting from the interpretation of this License, arising
+ between the European Union institutions, bodies, offices or agencies, as a
+ Licensor, and any Licensee, will be subject to the jurisdiction of the Court
+ of Justice of the European Union, as laid down in article 272 of the Treaty on
+ the Functioning of the European Union,
+
+- any litigation arising between other parties and resulting from the
+ interpretation of this License, will be subject to the exclusive jurisdiction
+ of the competent court where the Licensor resides or conducts its primary
+ business.
+
+15. Applicable Law
+
+Without prejudice to specific agreement between parties,
+
+- this Licence shall be governed by the law of the European Union Member State
+ where the Licensor has his seat, resides or has his registered office,
+
+- this licence shall be governed by Belgian law if the Licensor has no seat,
+ residence or registered office inside a European Union Member State.
+
+Appendix
+
+‘Compatible Licences’ according to Article 5 EUPL are:
+
+- GNU General Public License (GPL) v. 2, v. 3
+- GNU Affero General Public License (AGPL) v. 3
+- Open Software License (OSL) v. 2.1, v. 3.0
+- Eclipse Public License (EPL) v. 1.0
+- CeCILL v. 2.0, v. 2.1
+- Mozilla Public Licence (MPL) v. 2
+- GNU Lesser General Public Licence (LGPL) v. 2.1, v. 3
+- Creative Commons Attribution-ShareAlike v. 3.0 Unported (CC BY-SA 3.0) for
+ works other than software
+- European Union Public Licence (EUPL) v. 1.1, v. 1.2
+- Québec Free and Open-Source Licence — Reciprocity (LiLiQ-R) or Strong
+ Reciprocity (LiLiQ-R+).
+
+The European Commission may update this Appendix to later versions of the above
+licences without producing a new version of the EUPL, as long as they provide
+the rights granted in Article 2 of this Licence and protect the covered Source
+Code from exclusive appropriation.
+
+All other changes or additions to this Appendix require the production of a new
+EUPL version.
diff --git a/macros/luatex/generic/minim-mp/README b/macros/luatex/generic/minim-mp/README
new file mode 100644
index 0000000000..dee13d1bfe
--- /dev/null
+++ b/macros/luatex/generic/minim-mp/README
@@ -0,0 +1,28 @@
+Version: 2021/1.0
+
+SUMMARY
+
+This package offers low-level mplib integration for plain LuaTeX and is
+designed with the purpose of being easy to extend.
+
+The use of multiple simultaneous MetaPost instances is supported, as well as
+running TeX or lua code from within MetaPost. With the included minim-mp
+format file, you can even use LuaTeX as a stand-alone MetaPost compiler.
+
+
+DOCUMENTATION
+
+In order to obtain the typeset manual of this package, simply say:
+
+ luatex minim-mp.doc
+
+
+COPYING
+
+(c) 2021 Esger Renkema
+
+These files may be distributed under the terms of the European Union Public
+Licence (EUPL) version 1.2 or later. A copy can be obtained at:
+
+https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+
diff --git a/macros/luatex/generic/minim-mp/minim-mp.doc b/macros/luatex/generic/minim-mp/minim-mp.doc
new file mode 100644
index 0000000000..788d26b6a0
--- /dev/null
+++ b/macros/luatex/generic/minim-mp/minim-mp.doc
@@ -0,0 +1,329 @@
+
+\input minim-doc.sty
+
+\manual{minim-mp}
+
+\ifchapter \chapter Metapost
+
+\else \startmetadata
+ author {Esger Renkema}
+ title {minim-mp}
+ date {2021-06-01}
+ version {2021/1.0}
+ keywords {LuaTeX; Plain TeX; MetaPost; mplib}
+ stopmetadata
+\maketitle \fi
+
+This package offers low-level mplib integration for plain luatex.
+The use of multiple simultaneous metapost instances is supported, as well as
+running tex or lua code from within metapost.
+In order to use it, simply say ⟦\input minim-mp.tex⟧.
+
+After this, ⟦*\directmetapost [ options ] { mp code }⟧ will result in a series
+of images corresponding to the ⟦beginfig ... endfig⟧ statements in your
+⟦mp code⟧. Every image will be in a box of its own.
+
+Every call to ⟦\directmetapost⟧ opens and closes a separate metapost instance.
+If you want your second call to remember the first, you will have to define
+a persistent metapost instance. This will also give you more control over image
+extraction. See below under „Metapost instances”. The ⟦options⟧ will also be
+explained there (for simple cases, you will not need them).
+
+The logging of the metapost run will be included in the regular log file. If an
+error occurs, the logging will also be shown on the terminal.
+
+This package can also be used as a stand-alone metapost compiler. Saying
+\stopformulatagging$$\hbox{⟦luatex --fmt=minim-mp your_file.mp⟧}$$\startformulatagging
+will create a pdf file of all images in ⟦your_file.mp⟧, in order, with page
+sizes adjusted to image dimensions.
+
+\section Metapost instances % 1
+
+For more complicated uses, you can define your own instances by saying
+⟦*\newmetapostinstance [ options ] \id⟧.
+An instance can be closed with ⟦*\closemetapostinstance \id⟧.
+These are the options you can use:
+
+\smallskip\smallskip\automarktable
+\halign{#\quad\hfil&#\quad\hfil&#\hfil\cr
+Option&Default&Description\cr
+⟦jobname⟧&⟦':metapost:'⟧&Used in error messages.\cr
+⟦format⟧&⟦'plain.mp'⟧&Format to initialise the instance with.\cr
+⟦math⟧&⟦'scaled'⟧&One of ⟦scaled⟧, ⟦decimal⟧ or ⟦double⟧.\cr
+⟦seed⟧&⟦nil⟧&Random seed for this instance.\cr
+⟦catcodes⟧&⟦0⟧&Catcode table for ⟦btex ... etex⟧.\cr
+⟦env⟧&copy of ⟦_G⟧&Lua environment; see below.\cr
+}\smallskip
+
+Now that you have your own instance, you can run chunks of metapost code in it
+with ⟦*\runmetapost \id { code }⟧. Any images that your code may have contained
+will have to be extracted explicitly. This is possible in a number of ways,
+although each image can be retrieved only once.
+
+⟦*\getnextmpimage \id⟧
+– Writes the first unretrieved image to the current node list.
+There, the image will be contained in a single box node.
+
+⟦*\getnamedmpimage \id {name}⟧
+– Retrieves an image by name
+regardless of its position,
+and writes it to the current node list.
+
+⟦*\boxnextmpimage \id box-nr⟧
+– Puts the next unretrieved image in box ⟦box-nr⟧. The number may be anything
+tex can parse as a number.
+
+⟦*\boxnamedmpimage \id box-nr {name}⟧
+– Puts the image named ⟦name⟧ in box ⟦box-nr⟧.
+
+Say ⟦*\remainingmpimages \id⟧ for the number of images not yet retrieved.
+Finally, as a shorthand, ⟦*\runmetapostimage \id { code }⟧ will add
+⟦beginfig ... endfig⟧ to your ⟦code⟧ and write the resulting image immediately
+to the current list.
+
+
+\section Running tex from within metapost % 1
+
+You can include tex snippets with either ⟦*maketext "tex text"⟧ or
+⟦*btex ... etex⟧ statements. The tex code will be executed in the current
+environment without an extra grouping level. The result of either statement at
+the place where it is invoked is an image object of the proper dimensions that
+can be moved, scaled, rotated and mirrored. You can even specify a colour. Its
+contents, however, will only be added afterwards and are invisible to metapost.
+
+Arbitrary tex statements may be included in ⟦*verbatimtex ... etex⟧, which may
+occur anywhere. These ⟦btex⟧ and ⟦verbatimtex⟧ statements are executed in the
+order they are given.
+
+You can also use metapost’s ⟦*infont⟧ operator, which restricts the text
+to-be-typeset to a single font, but returns an ⟦picture⟧ containing a ⟦picture⟧
+for each character. The right-hand argument of ⟦infont⟧ should either be
+a (numerical) font id or the (cs)name of a font.
+
+One possible use of the ⟦infont⟧ operator is setting text along curves:
+
+⟦beginfig(1)
+ save t, w, r, a; picture t;
+ t = "Running TeX from within MetaPost" infont "tenrm";
+ w = xpart lrcorner t = 3.141593 r;
+ for c within t :
+ x := xpart (llcorner c + lrcorner c)/2;
+ a := 90 - 180 x/w;
+ draw c rotatedaround((x,0), a)
+ shifted (-r*sind(a)-x, r*cosd(a));
+ endfor
+endfig;⟧
+\vskip-2\parskip plus 2\parskip
+\quitvmode\hfil
+\startelement alt {The text ‘Running TeX from within MetaPost’ set along a half-circle.} {Figure}%
+\stoptagging\directmetapost{%
+beginfig(1)
+ save t, w, r, a; picture t;
+ t = "Running TeX from within MetaPost" infont "tenrm";
+ w = xpart lrcorner t = 3.141593 r;
+ for c within t :
+ x := xpart (llcorner c + lrcorner c)/2;
+ a := 90 - 180 x/w;
+ draw c rotatedaround((x,0), a)
+ shifted (-r*sind(a)-x, r*cosd(a));
+ endfor
+endfig;}\starttagging \stopelement{Figure}
+
+\section Running lua from within metapost % 1
+
+You can call out to lua with ⟦*runscript "lua code"⟧. For this purpose, each
+metapost instance carries around its own lua environment so that assignments
+you make are local to the instance. (You can of course order the global
+environment to be used by giving ⟦env = _G⟧ as option to
+⟦\newmetapostinstance⟧.)
+
+If your lua snippet returns nothing, the ⟦runscript⟧ call will be invisible to
+metapost. If on the other hand it does return a value, that value will have to
+be translated to metapost. Numbers and strings will be returned as they are
+(so make sure the string is surrounded by quotes if you want to return
+a metapost string). You can return a point or colour by returning an array of
+two to four elements. For other return values, ⟦tostring()⟧ will be called.
+
+Do keep in mind that metapost and lua represent numbers in different ways and
+that rounding errors may occur. For instance, metapost’s ⟦decimal epsilon⟧
+returns ⟦0.00002⟧, which metapost understands as ⟦1/65536⟧, but lua as
+⟦1/50000⟧. Use the metapost macro ⟦*hexadecimal⟧ instead of ⟦decimal⟧ for
+passing unambiguous numbers to lua.
+
+Additionally, you should be aware that metapost uses slightly bigger points
+than tex, so that ⟦epsilon⟧ when taken as a dimension is not quite equal to
+⟦1sp⟧. Use the metapost macro ⟦*scaledpoints⟧ for passing to lua a metapost
+dimension as an integral number of scaled points.
+
+
+\section Tiling patterns % 1
+
+The ⟦*withpattern(<name>)⟧ added to a ⟦fill⟧ statement will fill the path with
+a pattern instead of a solid colour. If the patterns contains no colour
+information of itself, it will have the colour given by ⟦withcolor⟧.
+Stroking operations (the ⟦draw⟧ part) will not be affected.
+Patterns will always look the same, irrespective of any transformations you
+apply to the picture.
+
+To define a pattern, sketch it between
+⟦*beginpattern(<name>) ... endpattern(xstep, ystep);⟧
+where ⟦<name>⟧ is a suffix and ⟦(xstep, ystep)⟧ are the horizontal and vertical
+distances between applications of the pattern.
+Inside the definition, you can draw the pattern using whatever coordinates you
+like; assign a value to the ⟦*matrix⟧ transformation to specify how the pattern
+should be projected onto the page. This ⟦matrix⟧ will also be applied to
+⟦xstep⟧ and ⟦ystep⟧.
+
+You can also change the internal variable ⟦*tilingtype⟧ and the normal variable
+⟦*painttype⟧, although the latter will be set to~1 automatically if you use any
+colour inside the pattern definition. Consult the pdf specification for more
+information on these parameters.
+
+You can use text inside patterns, as in this example:
+\hfill \vbox to 0pt{
+\startelement alt{A circle filled with red As in a rectangular pattern.}{Figure}
+\directmetapost{
+% define the pattern
+picture letter; letter = maketext("a");
+beginpattern(a)
+ draw letter rotated 45;
+ matrix = identity rotated 45;
+endpattern(12pt,12pt);
+% use the pattern
+beginfig(1)
+ fill fullcircle scaled 3cm withpattern(a) withcolor 3/4red;
+ draw fullcircle scaled 3cm withpen pencircle scaled 1;
+endfig;}\stopelement{Figure}\vss}\hskip10pt\strut
+
+⟦% define the pattern
+picture letter; letter = maketext("a");
+beginpattern(a)
+ draw letter rotated 45;
+ matrix = identity rotated 45;
+endpattern(12pt,12pt);
+% use the pattern
+beginfig(1)
+ fill fullcircle scaled 3cm withpattern(a) withcolor 3/4red;
+ draw fullcircle scaled 3cm withpen pencircle scaled 1;
+endfig;⟧
+
+A small pattern library is available in the ⟦*minim-hatching.mp⟧ file; see the
+accompanying documentation sheet for an overview of patterns.
+Tiling patterns cannot be used together with tikz/pgf; see below under
+‘Resource management’.
+
+
+\section Other metapost extensions % 1
+
+There is currently no support for the ⟦*glyph of⟧ operator.
+
+You can set the baseline of an image with ⟦*baseline(p)⟧. There, ⟦p⟧ must
+either be a point through which the baseline should pass, or a number (where an
+x~coordinate of zero will be added). Transformations will be taken into
+account, hence the specification of two coordinates. The last given baseline
+will be used.
+
+Previously-defined box resources can be included with ⟦*boxresource(nr)⟧. The
+result will be an image object with the proper dimensions. This image can be
+transformed in any way you like, but you cannot inspect the contents of the
+resource within metapost.
+
+You can write to tex’s log directly with ⟦*texmessage "hello"⟧.
+
+You can write direct pdf statements with ⟦*special "pdf: statements"⟧ and you
+can add comments to the pdf file with ⟦*special "pdfcomment: comments"⟧.
+Say ⟦*special "latelua: lua code"⟧ to insert a ⟦late_lua⟧ whatsit.
+All three specials can also be given as pre- or postscripts to another object.
+In that case, they will be added before or after the object they are attached to.
+
+
+\section Lua interface % 1
+
+In what follows, you should assume ⟦M⟧ to be the result of
+\stopformulatagging$$\hbox{⟦M = require('minim-mp')⟧}$$\startformulatagging
+as this package does not claim a table in the global environment for itself.
+
+You can open a new instance with ⟦*nr = M.open {options}⟧.
+This returns an index in the ⟦*M.instances⟧ table.
+Run code with ⟦*M.run (nr, code)⟧ and close the instance with ⟦*M.close (nr)⟧.
+Images can be retrieved only with ⟦*box_node = M.get_image(nr, [name])⟧; omit
+the ⟦name⟧ to select the first image.
+Say ⟦*nr_remaining = M.left(nr)⟧ for the number of remaining images.
+
+Each metapost instance is a table containing the following entries:
+
+\smallskip\smallskip
+\marktableaslist \halign{\qquad#\quad\hfil&#\hfil\cr
+⟦jobname⟧&The jobname.\cr
+⟦instance⟧&The primitive metapost instance.\cr
+⟦results⟧&A linked list of unretrieved images.\cr
+⟦status⟧&The last exit status (will never decrease).\cr
+⟦catcodes⟧&Number of the catcode table used with ⟦btex ... etex⟧.\cr
+⟦env⟧&The lua environment for ⟦runscript⟧.\cr}
+
+
+\section PDF resource management % 1
+
+This package can add ⟦/Pattern⟧ and ⟦/ColorSpace⟧ entries to all page and xform
+resource dictionaries.
+Both refer to a single, global dictionary shared by all pages.
+Support for other keys may be added in the future.
+
+At the moment, this implementation only serves tiling pattern support;
+the mechanism will be enabled automatically at the first use of a tiling
+pattern (merely defining a pattern will not enable it) and is of little use for
+anything else.
+The relevant tables, should you want to expand on it yourself, are
+⟦M.colourspaces⟧ and ⟦M.patterns⟧; see the source file for additional
+instructions.
+
+Since pdf resource management must be done exactly once, this package may clash
+with other graphics packages doing the same.
+In particular, minim’s resource management will cause double (and thus invalid)
+entries in pages’ attribute dictionaries when used together with \red{tikz} or
+\red{pgf}.
+They can be used together, however, if you do not use minim’s tiling patterns.
+
+
+\section Debugging % 1
+
+You can enable (global) debugging by saying ⟦*debug_pdf⟧ to metapost or
+⟦*M.enable_debugging()⟧ to lua. This will write out a summary of metapost
+object information to the pdf file, just above the pdf instructions that object
+was translated into. For this purpose, the pdf will be generated uncompressed.
+Additionally, a small summary of every generated image will be written to log
+and terminal.
+
+
+\section Extending metapost % 1
+
+You can extend this package by adding new metapost specials. Specials should
+have the form ⟦"identifier: instructions"⟧ and can be added as pre- or
+postscript to metapost objects. A single object can carry multiple specials and a
+⟦*special "..."⟧ statement is equivalent to an empty object with a single
+prefix.
+
+Handling of specials is specified in three lua tables: ⟦*M.specials⟧,
+⟦*M.prescripts⟧ and ⟦*M.postscripts⟧.
+The ⟦identifier⟧ above should equal the key of an entry in the relevant table,
+while the value of an entry in one of these tables should be a function with
+three parameters: the internal image processor state, the ⟦instructions⟧ from
+above and the metapost object itself.
+
+If the ⟦identifier⟧ of a prescript is present in the first table, the
+corresponding function will replace normal object processing.
+Only one prescript may match with this table.
+Functions in the the other two tables will run before or after normal
+processing.
+
+Specials can store information in the ⟦user⟧ table of the picture that is being
+processed; this information is still available inside the ⟦*finish_mpfigure⟧
+callback that is executed just before the processed image is surrounded by
+properly-dimensioned boxes.
+
+The ⟦*M.init_files⟧ table contains the list of metapost files that new instances
+are initialised with.
+The actual format will be loaded after the files in this table.
+
+\endmanual %
+
diff --git a/macros/luatex/generic/minim-mp/minim-mp.ini b/macros/luatex/generic/minim-mp/minim-mp.ini
new file mode 100644
index 0000000000..a257f6a18a
--- /dev/null
+++ b/macros/luatex/generic/minim-mp/minim-mp.ini
@@ -0,0 +1,17 @@
+
+\catcode`\{=1 \catcode`\}=2
+\def\fmtname{minim-mp}
+\def\fmtversion{2021/1.0}
+
+\input minim.ini
+
+\toksapp\everyjob{%
+ \message{This is the minim metapost processor.}\relax
+ \newmetapostinstance[jobname="\jobname", mathmode="scaled"]\MP
+ \runmetapost\MP{input "\jobname";}%
+ \directlua {require('minim-mp').shipout(\the\MP)}%
+ \closemetapostinstance\MP
+ \bye}
+
+\dump
+
diff --git a/macros/luatex/generic/minim-mp/minim-mp.lua b/macros/luatex/generic/minim-mp/minim-mp.lua
new file mode 100644
index 0000000000..0f1851eba0
--- /dev/null
+++ b/macros/luatex/generic/minim-mp/minim-mp.lua
@@ -0,0 +1,1282 @@
+
+local alloc = require ('minim-alloc')
+local cb = require('minim-callbacks')
+alloc.remember ('minim-mp')
+
+local M = {}
+
+-- 1 AUXILIARY FUNCTIONS
+
+-- 2 pdf resource management
+
+-- We add /ColorSpace and /Pattern entries to all page and xform resources.
+-- Each key refers to a central (global) object mapping names to objects. This
+-- central dictionary will be written to the pdf inside the finish_pdffile
+-- callback.
+--
+-- In the future, /Shading and /ExtGState may also be added.
+--
+-- Central resource dictionaries and all used resources will be written to the
+-- pdf inside the finish_pdf callback.
+--
+-- Since a resource dictionary can only contain one entry of each kind, this
+-- package cannot coëxist with other packages doing their own resource
+-- management. I am aware of only one other package doing that, however, which
+-- is pgf. Luckily, pgf users are unlikely to be interested in metapost. Due to
+-- this incompatibility, however, resource management must be enabled
+-- explicitly.
+
+-- keys are pdf names (starting with a slash)
+local patterns = { }; M.patterns = patterns
+local colourspaces = { }; M.colourspaces = colourspaces
+
+local global_resources, pattern_dict_objnum, colourspace_dict_objnum
+function M.enable_resource_management()
+ if global_resources then return end
+ -- central dictionary objects
+ pattern_dict_objnum = pdf.reserveobj()
+ colourspace_dict_objnum = pdf.reserveobj()
+ global_resources = string.format('/Pattern %d 0 R /ColorSpace %d 0 R',
+ pattern_dict_objnum, colourspace_dict_objnum)
+ -- add to page and xform resources
+ pdf.setpageresources((pdf.getpageresources() or '')..global_resources)
+ pdf.setxformresources((pdf.getxformresources() or '')..global_resources)
+end
+
+-- Saved patterns should have the following fields:
+-- objnum the reserved object number for the pattern (optional)
+-- used true if the pattern is in use (should be set automatically)
+-- attr the pattern attributes
+-- stream the pattern drawing statements
+-- painttype the paint type of the pattern (1 or 2)
+-- Saved colour spaces should have the following fields:
+-- objnum the reserved object number for the colour space (optional)
+-- used true if the pattern is in use (should be set automatically)
+-- content the colour space contents (a pdf array)
+
+function M.write_resources()
+ if not global_resources then return end
+ -- patterns
+ local used_patterns = { '<<' }
+ for name, pat in pairs(patterns) do
+ if pat.used then
+ local objnum = pat.objnum or pdf.reserveobj()
+ pdf.immediateobj(objnum, 'stream', pat.stream, pat.attr)
+ table.insert(used_patterns, string.format('%s %d 0 R', name, objnum))
+ end
+ end
+ table.insert(used_patterns, '>>')
+ pdf.immediateobj(pattern_dict_objnum, table.concat(used_patterns, ' '))
+ -- colour spaces
+ local used_spaces = { '<<' }
+ for name, space in pairs(colourspaces) do
+ if space.used then
+ local objnum = space.objnum or pdf.reserveobj()
+ pdf.immediateobj(objnum, space.content)
+ table.insert(used_spaces, string.format('%s %d 0 R', name, objnum))
+ end
+ end
+ table.insert(used_spaces, '>>')
+ pdf.immediateobj(colourspace_dict_objnum, table.concat(used_spaces, ' '))
+end
+
+-- Write out resource objects at the end of the run
+cb.register('finish_pdffile', M.write_resources)
+
+-- 2 state metatable
+
+-- q Q store/restore graphics state
+
+-- In what follows, ‘append’ is a structure that contains a (tex) node list
+-- that will become the picture that is being constructed and an internal
+-- graphics state.
+--
+-- We can call append:somefunction(...) to append a node or append:somevariable
+-- to query the graphics state. These go via its metatable:
+
+local A = { } -- appending functions
+local append_meta =
+{
+ -- Either return an appending function or an entry in the graphics state.
+ __index = function(table, key)
+ return A[key] or table.state[#table.state][key]
+ end,
+ __newindex = function(table, key, value)
+ table.state[#table.state][key] = value
+ end
+}
+
+local function init_append()
+ return setmetatable({
+ head = false, tail = false, -- node list
+ baseline = false, -- internal state
+ node_count = 0, -- node count
+ state = { }, -- graphics state variables
+ user = { }, -- user data for extensions
+ }, append_meta)
+end
+
+function A.node(append, nd)
+ append.node_count = append.node_count + 1
+ append.head, append.tail = node.insert_after(append.head or nil, append.tail or nil, nd)
+end
+
+function A.save(append)
+ local st = append.state[#append.state] or { }
+ append.state[#append.state+1] =
+ {
+ miterlimit = st.miterlimit,
+ linejoin = st.linejoin,
+ linecap = st.linecap,
+ dashed = st.dashed,
+ stroke = st.stroke,
+ fill = st.fill
+ }
+ append:node(node.new(8, 30)) -- q
+end
+
+function A.restore(append)
+ append.state[#append.state] = nil
+ append:node(node.new(8, 31)) -- Q
+end
+
+-- The following callback is executed just before the final step of surrounding
+-- the image in properly-dimensioned boxes. It receives the processed image
+-- object as argument. That object has the following fields:
+-- head the head of the node list
+-- name the image name
+-- user the image user table
+-- wd, ht, dp tex dimensions
+-- x0, y0 position of (0,0) w.r.t. tex dimension
+-- bbox original metapost bounding box
+-- discard whether not to save this image
+cb.new_callback('finish_mpfigure', 'simple')
+
+-- 2 debugging
+
+local debugging = false
+
+function M.enable_debugging()
+ debugging = true
+ pdf.setcompresslevel(0)
+end
+
+local function print_prop(append, obj, prop)
+ if obj[prop] then
+ local val = string.gsub(tostring(obj[prop]), '\r', '<CR>')
+ append:literal('%% %s: %s', prop, val)
+ end
+end
+
+local function print_multi(append, obj, prop)
+ if obj[prop] then
+ local x = ''
+ for i = 1,#obj[prop] do
+ x = x .. tostring(obj[prop][i])..' '
+ end
+ append:literal('%% %s: %s', prop, x)
+ end
+end
+
+local function print_knots(append, obj, ptype)
+ if obj[ptype] then
+ append:literal('%% %s: see below', ptype)
+ for i = 1, #obj[ptype] do
+ local a,b = obj[ptype][i].left_type or 'joined', obj[ptype][i].right_type or 'joined'
+ append:literal('%% -+- knot: %s-%s', a, b)
+ append:literal('%% | x_coord: %s', tostring(obj[ptype][i].x_coord))
+ append:literal('%% | y_coord: %s', tostring(obj[ptype][i].y_coord))
+ append:literal('%% | right_x: %s', tostring(obj[ptype][i].right_x))
+ append:literal('%% | right_y: %s', tostring(obj[ptype][i].right_y))
+ append:literal('%% | left_x: %s', tostring(obj[ptype][i].left_x))
+ append:literal('%% | left_y: %s', tostring(obj[ptype][i].left_y))
+ end
+ end
+end
+
+function A.printobj(append, obj)
+ if not debugging then return end
+ local nc = append.node_count
+ append:literal('%%Object Type: %s', obj.type)
+ print_prop(append, obj, 'text')
+ print_prop(append, obj, 'font')
+ print_prop(append, obj, 'dsize')
+ print_prop(append, obj, 'width')
+ print_prop(append, obj, 'height')
+ print_prop(append, obj, 'depth')
+ print_multi(append, obj, 'transform')
+ print_multi(append, obj, 'color')
+ print_knots(append, obj, 'path')
+ print_knots(append, obj, 'htap')
+ if obj.pen then
+ local x = obj.pen.type or 'not elliptical'
+ append:literal('%% pen: see below, form: %s', x)
+ local x = mplib.pen_info(obj)
+ append:literal('%% | width: %s', tostring(x.width))
+ append:literal('%% | sx: %s', tostring(x.sx))
+ append:literal('%% | sy: %s', tostring(x.sy))
+ append:literal('%% | rx: %s', tostring(x.rx))
+ append:literal('%% | ry: %s', tostring(x.ry))
+ append:literal('%% | tx: %s', tostring(x.tx))
+ append:literal('%% | ty: %s', tostring(x.ty))
+ print_knots(append, obj, 'pen')
+ end
+ if obj.dash then
+ local d = ''
+ for i = 1,#obj.dash.dashes do
+ d = d ..tonumber(obj.dash.dashes[i]).. ' '
+ end
+ append:literal('%% dashes: %s', d)
+ append:literal('%%dash offset: %s', tostring(obj.dash.offset))
+ end
+ print_prop(append, obj, 'prescript')
+ print_prop(append, obj, 'postscript')
+ print_prop(append, obj, 'miterlimit')
+ print_prop(append, obj, 'linejoin')
+ print_prop(append, obj, 'linecap')
+ append.node_count = nc
+end
+
+-- 2 pdf literal helpers
+
+local function format_numbers(...)
+ return (string.format(...)
+ :gsub('[.]0+ ', ' ')
+ :gsub('([.][1-9]+)0+ ', '%1 '))
+end
+
+-- Only to be used for coordinates: ‘cm’ parameters should not be rounded.
+local function pdfnum(operator, ...)
+ local fmt = string.format('%%.%sf %s', pdf.getdecimaldigits(), operator)
+ return format_numbers(fmt, ...)
+end
+
+local function point_fmt(operator, ...)
+ local dd = pdf.getdecimaldigits()
+ local fmt = string.format('%%.%sf %%.%sf %s', dd, dd, operator)
+ return format_numbers(fmt, ...)
+end
+
+local function bbox_fmt(...)
+ local dd = pdf.getdecimaldigits()
+ local fmt = string.format('/BBox [ %%.%sf %%.%sf %%.%sf %%.%sf ]', dd, dd, dd, dd)
+ return format_numbers(fmt, ...)
+end
+
+local function curve_fmt(...)
+ local dd = pdf.getdecimaldigits()
+ local fmt = string.format('%%.%sf %%.%sf %%.%sf %%.%sf %%.%sf %%.%sf c', dd, dd, dd, dd, dd, dd)
+ return format_numbers(fmt, ...)
+end
+
+function A.literal(append, fmt, ...)
+ local lit = node.new(8,16)
+ lit.data = fmt:format(...)
+ append:node(lit)
+end
+
+-- 2 colour conversion
+
+local function rgb_to_gray (r,g,b)
+ return ( tex.count['RtoG'] * r / 10000
+ + tex.count['GtoG'] * g / 10000
+ + tex.count['BtoG'] * b / 10000 )
+end
+
+local function cmyk_to_rgb (c,m,y,k)
+ return (1-k)*(1-c), (1-k)*(1-m), (1-k)*(1-y)
+end
+
+local function rgb_to_cmyk (r, g, b)
+ local k = 1 - math.max(r, g, b)
+ if k == 1 then
+ return 0, 0, 0, k
+ else
+ return (1-r-k)/(1-k), (1-g-k)/(1-k), (1-b-k)/(1-k), k
+ end
+end
+
+local function convert_colour(cr)
+ -- always write rgb or cmyk black as grayscale
+ if cr[1] == 0 and cr[2] == 0 and cr[3] == 0
+ and (cr[4] == 1 or not cr[4]) then
+ return { 0 }
+ end
+ -- see if we must convert to another colour space
+ local n = #cr
+ local convert = tex.count['convertmpcolours']
+ if convert == 1 then
+ if n == 3 then
+ return { rgb_to_gray(table.unpack(cr)) }
+ elseif n == 4 then
+ return { rgb_to_gray(cmyk_to_rgb(table.unpack(cr))) }
+ end
+ elseif convert == 3 and n == 4 then
+ return { cmyk_to_rgb(table.unpack(cr)) }
+ elseif convert == 4 and n == 3 then
+ return { rgb_to_cmyk(table.unpack(cr)) }
+ end
+ -- otherwise return the colour unchanged
+ return cr
+end
+
+-- 2 colour literals
+
+-- MetaPost supports colour models with 1, 3 or 4 parameters. The corresponding
+-- pdf operators are
+
+-- RG rg RGB colour model for stroke/filling
+-- K k CMYK colour model for stroke/filling
+-- G g Grayscale colour model for stroke/filling
+
+-- ... CS cs select colourspace for stroke/filling
+-- ... SCN scn select colour in colourspace for stroke/filling
+
+-- In order to prevent duplicate colour settings, ‘append’ contains the state
+-- variables ‘stroke’ and ‘fill’ that record the last-used colour settings.
+
+-- preload device colour pattern colour spaces
+colourspaces['/PsG'] = { content = '[ /Pattern /DeviceGray ]' }
+colourspaces['/PsRG'] = { content = '[ /Pattern /DeviceRGB ]' }
+colourspaces['/PsK'] = { content = '[ /Pattern /DeviceCMYK ]' }
+
+local colour_template = { '%.3f ', '%.3f %.3f ', '%.3f %.3f %.3f ', '%.3f %.3f %.3f %.3f ' }
+local colour_stroke_operators = { 'G', nil, 'RG', 'K' }
+local colour_fill_operators = { 'g', nil, 'rg', 'k' }
+local colour_pattern_spaces = { '/PsG', nil, '/PsRG', '/PsK' }
+
+local function get_colour_params(cr)
+ return format_numbers(colour_template[#cr], table.unpack(cr))
+end
+
+local function get_stroke_colour(cr)
+ return get_colour_params(cr)..colour_stroke_operators[#cr]
+end
+
+local function get_fill_colour(cr, pattern)
+ local params = get_colour_params(cr)
+ if pattern then
+ local ptype, pname = table.unpack(pattern)
+ if ptype == 2 then -- coloured pattern
+ local space = colour_pattern_spaces[#cr]
+ colourspaces[space].used = true
+ return string.format('%s cs %s%s scn', space, params, pname)
+ elseif ptype == 1 then -- uncoloured pattern
+ return string.format('/Pattern cs %s scn', pname)
+ else -- should be unreachable
+ alloc.err('Unknown pattern paint type %s', ptype)
+ end
+ end
+ return params..colour_fill_operators[#cr]
+end
+
+-- TODO We should allow the user access to the internals here, so that support
+-- for other colour spaces may be added. Then, pattern support could also be
+-- moved into a plugin.
+function A.colour(append, cr, otype)
+ if cr and #cr > 0 then
+ cr = convert_colour(cr)
+ -- stroke colour
+ if otype ~= 'fill' then
+ local stroke = get_stroke_colour(cr)
+ if stroke ~= append.stroke then
+ append.stroke = stroke
+ append:literal(stroke)
+ end
+ end
+ -- fill colour (possibly a pattern)
+ if otype ~= 'outline' then
+ local fill = get_fill_colour(cr, append.pattern)
+ append.pattern = nil -- patterns only apply to one object
+ if fill ~= append.fill then
+ append.fill = fill
+ append:literal(fill)
+ end
+ end
+ end
+end
+
+-- 2 stroke setting literals
+
+-- M miterlimit
+-- j linejoin
+-- J linecap
+-- d dash
+
+-- As with colour, we record the last-used settings in ‘append’. This function
+-- is only called for fill/outline objects.
+
+function A.linestate (append, object)
+ local ml = object.miterlimit
+ local res = { }
+ if ml and ml ~= append.miterlimit then
+ append.miterlimit = ml
+ table.insert(res, pdfnum('M', ml)) -- TODO is pdfnum here correct?
+ end
+ local lj = object.linejoin
+ if lj and lj ~= append.linejoin then
+ append.linejoin = lj
+ table.insert(res, string.format('%i j', lj))
+ end
+ local lc = object.linecap
+ if lc and lc ~= append.linecap then
+ append.linecap = lc
+ table.insert(res, string.format('%i J', lc))
+ end
+ local dl = object.dash
+ if dl then
+ local d = string.format('[%s] %i d', table.concat(dl.dashes or {},' '), dl.offset)
+ if d ~= append.dashed then
+ append.dashed = d
+ table.insert(res, d)
+ end
+ elseif append.dashed then
+ append.dashed = false
+ table.insert(res, string.format('[] 0 d'))
+ end
+ append:literal(table.concat(res, ' '))
+end
+
+-- 2 path literals
+
+-- MetaPost only gives us curved lines; if some of the segments are straight,
+-- we have to find out ourselves:
+
+local bend_tolerance = 131/65536 -- context uses this value, presumably with good reasons
+
+local function curved (a,b)
+ local d = b.left_x - a.right_x
+ if math.abs(a.right_x - a.x_coord - d) <= bend_tolerance
+ and math.abs(b.x_coord - b.left_x - d) <= bend_tolerance then
+ d = b.left_y - a.right_y
+ if math.abs(a.right_y - a.y_coord - d) <= bend_tolerance
+ and math.abs(b.y_coord - b.left_y - d) <= bend_tolerance then
+ return false
+ end
+ end
+ return true
+end
+
+-- Write the path as list of points.
+
+-- m move to this point without drawing anything
+-- c make a curved line (two control points)
+-- l make a straight line
+
+function A.curve(append, path, open, concat)
+ -- The ‘concat’ function transforms the given coordinate pairs
+ -- according to the current transformation.
+ concat = concat or function(px, py) return px, py end
+ local res = { }
+ local append_line = function(to, op)
+ table.insert(res, point_fmt(op, concat(to.x_coord, to.y_coord)))
+ end
+ local append_curve = function(from, to)
+ local a, b = concat(from.right_x, from.right_y)
+ local c, d = concat(to.left_x, to.left_y)
+ table.insert(res, curve_fmt(a,b,c,d,concat(to.x_coord, to.y_coord)))
+ end
+ local append_knot = function(from, to)
+ if not from then
+ append_line(to, 'm')
+ elseif curved(from, to) then
+ append_curve(from, to)
+ else
+ append_line(to, 'l')
+ end
+ end
+ local knot, prev_knot
+ for i=1, #path do
+ knot = path[i]
+ append_knot(prev_knot, knot)
+ prev_knot = knot
+ end
+ if not open then
+ append_knot(knot, path[1])
+ elseif #path == 1 then
+ append_line(path[1], 'l') -- special case: draw a point
+ end
+ append:literal(table.concat(res, ' '))
+end
+
+-- And actually draw the path.
+
+-- S draw the path
+-- h close the path
+-- s close and draw the path (equivalent to h S)
+-- f fill the path (implies h)
+-- b close, fill and draw the path (equivalent to h B)
+-- n do nothing (used for clipping paths)
+
+local function get_path_operator (otype, open)
+ if otype == 'fill' then
+ return 'f'
+ elseif otype == 'outline' then
+ return (open and 'S') or 's'
+ elseif otype == 'both' then
+ return 'b'
+ end
+end
+
+--
+
+-- 1 PROCESSING OBJECTS
+
+-- Our processors are located in two tables: one that contains a processor for
+-- each object and one that contains processors for certain ‘special’ statements. Every
+-- table contains functions that take the ‘append’ structure and the current
+-- object as arguments. The tables are indexed by object/special name.
+
+-- The treatment of pre- and postscripts is like this:
+-- * Pre- and postscripts should be of the form ‘type: instruction’.
+-- * If the type of a prescript is present in the ‘specials’ table, the
+-- corresponding function will be used in place of the default handling.
+-- * Execution of other prescripts and of all postscripts will be given by the
+-- entries in the ‘prescripts’ and ‘postscripts’ table corresponding to the
+-- type.
+
+local process = {}
+local specials = {}
+M.specials = specials
+
+local prescripts = {}
+local postscripts = {}
+M.prescripts = prescripts
+M.postscripts = postscripts
+
+-- 2 choosing a parser
+
+local function split_specials(specials)
+ if not specials then return function() return end end
+ local l = specials:explode('\r')
+ local i, n = 0, #l
+ return function()
+ if i < n then i = i + 1 else return end
+ local sp, instr = l[i]:match('^([a-zA-Z_]+): *(.*)')
+ return sp, instr or l[i]
+ end
+end
+
+local function parse_object (append, object)
+ append:printobj(object)
+ local processor = nil
+ for sp, instr in split_specials(object.prescript) do
+ if not sp then
+ alloc.err('Unrecognised prescript: %s', instr)
+ append:literal('%% unsupported special excluded (see log file)')
+ elseif specials[sp] then
+ processor = function() specials[sp](append, instr, object) end
+ elseif prescripts[sp] then
+ prescripts[sp](append, instr, object)
+ else
+ alloc.err('Unrecognised prescript ‘%s’ with instruction: %s', sp, instr)
+ append:literal('%% unsupported special excluded (see log file)')
+ end
+ end
+ if processor then
+ processor()
+ else
+ process[object.type](append, object)
+ end
+ for sp, instr in split_specials(object.postscript) do
+ if not sp then
+ alloc.err('Unrecognised postscript: %s', instr)
+ append:literal('%% unsupported special excluded (see log file)')
+ elseif postscripts[sp] then
+ postscripts[sp](append, instr, object)
+ else
+ alloc.err('Unrecognised postscript ‘%s’ with instruction: %s', sp, instr)
+ append:literal('%% unsupported special excluded (see log file)')
+ end
+ end
+end
+
+-- 2 start/stop bounds
+
+-- These can be ignored, because they are taken into account by MetaPost when
+-- it reports the bounding box of the picture.
+
+process.start_bounds = function(append, object) end
+process.stop_bounds = function(append, object) end
+
+-- 2 clipping
+
+-- W clipping operator
+-- n path no-op
+
+process.start_clip = function(append, object)
+ append:save()
+ append:curve(object.path, false)
+ append:literal('W n')
+end
+
+process.stop_clip = function(append, object)
+ append:restore()
+end
+
+-- 2 fill and outline
+
+function A.set_pen(append, object, otype, open)
+ if object.pen and object.pen.type == 'elliptical' then
+ -- metapost includes nonelliptical pens in the outline
+ local t = mplib.pen_info(object)
+ append:literal(pdfnum('w', t.width))
+ if otype == 'fill' then otype = 'both' end
+ local transformed = not ( t.sx == 1 and t.rx == 0
+ and t.ry == 0 and t.sy == 1
+ and t.tx == 0 and t.ty == 0 )
+ return transformed and t, get_path_operator(otype, open), otype
+ else
+ return false, get_path_operator(otype, open), otype
+ end
+end
+
+process.fill_or_outline = function(append, object, otype)
+ local open = object.path
+ and object.path[1].left_type
+ and object.path[#object.path].right_type
+ local t, operator, otype = append:set_pen(object, otype, open)
+ append:colour(object.color, otype)
+ append:linestate(object)
+ local appendpath
+ if t then
+ local d = t.sx * t.sy - t.rx - t.ry
+ local concat = function(px, py)
+ return (t.sy*px - t.ry*py)/d, (t.sx*py - t.rx*px)/d
+ end
+ appendpath = function(path)
+ append:save()
+ append:literal('%f %f %f %f %f %f cm', t.sx, t.rx, t.ry, t.sy, t.tx, t.ty)
+ append:curve(path, open, concat)
+ append:literal(operator)
+ append:restore()
+ end
+ else
+ appendpath = function(path)
+ append:curve(path, open)
+ append:literal(operator)
+ end
+ end
+ if object.path then appendpath(object.path) end
+ if object.htap then appendpath(object.htap) end -- reversed trajectory
+end
+
+process.fill = function(append, object)
+ process.fill_or_outline(append, object, 'fill')
+end
+
+process.outline = function(append, object)
+ process.fill_or_outline(append, object, 'outline')
+end
+
+-- 2 specials
+
+-- pure specials are already taken care of in parse_object (they only have
+-- a ‘prescript’ field).
+process.special = function(append, object) end
+
+prescripts.pdf = function(append, special, object)
+ append:literal(special)
+end
+postscripts.pdf = prescripts.pdf
+
+prescripts.pdfcomment = function(append, str, object)
+ append:literal('%% %s', str)
+end
+postscripts.pdfcomment = prescripts.pdfcomment
+
+prescripts.latelua = function(append, str, object)
+ local n = node.new(8,7) -- late_lua
+ n.data = str
+ append:node(n)
+end
+postscripts.latelua = prescripts.latelua
+
+specials.BASELINE = function(append, str, object)
+ -- object is a ‘fill’ statement with only a single point in its path (and
+ -- will thus not have to be transformed).
+ append.baseline = object.path[1].y_coord
+end
+
+-- 2 patterns
+
+prescripts.fillpattern = function(append, str, object)
+ M.enable_resource_management()
+ local name = '/MnmP'..tonumber(str)
+ local pat = patterns[name]
+ if not pat then
+ alloc.err('Unknown pattern %s', name)
+ else
+ append.pattern = { pat.painttype, name }
+ pat.used = true
+ end
+end
+
+specials.definepattern = function(append, str, object)
+ local nr, tiling, paint, xs, ys, xx, xy, yx, yy = table.unpack(str:explode())
+ append.user.pattern_info = { nr = nr, xstep = xs, ystep = ys,
+ tilingtype = tiling, painttype = paint,
+ matrix = { xx = xx, xy = xy, yx = yx, yy = yy, x = 0, y = 0 } }
+end
+
+local function definepattern(head, user, bb)
+ local bb = bbox_fmt(table.unpack(bb))
+ local pat, literals, resources = { }, { }
+ -- pattern content
+ for n in node.traverse(head) do
+ -- try if we can construct the content stream ourselves; otherwise,
+ -- stuff the pattern template into an xform.
+ if n.id == 8 then
+ -- try if we can simply concatenate pdf statements
+ if n.subtype == 16 then -- literal
+ table.insert(literals, n.data)
+ elseif n.subtype == 30 then -- save
+ table.insert(literals, 'q')
+ elseif n.subtype == 31 then -- restore
+ table.insert(literals, 'Q')
+ else
+ goto fail
+ end
+ end
+ pat.stream = table.concat(literals, '\n')
+ end
+ ::fail:: do
+ -- regrettably, pdf.refobj does not work with xforms, so we must
+ -- write it to the pdf immediately, whether the pattern will be
+ -- used or not.
+ local xform = tex.saveboxresource(node.hpack(node.copy_list(head)),
+ '/Subtype/Form '..bb, resources, true, 4)
+ resources = string.format(' /Resources << /XObject << /PTempl %d 0 R >> >>', xform)
+ pat.stream = '/PTempl Do'
+ end
+ -- construct the pattern object
+ local i = user.pattern_info
+ local m = i.matrix
+ pat.painttype = tonumber(i.painttype)
+ pat.attr = table.concat({
+ string.format(' /PatternType 1 /PaintType %d /TilingType %s /XStep %f /YStep %f\n',
+ i.painttype, i.tilingtype, i.xstep, i.ystep),
+ string.format('%s\n/Matrix [ %s %s %s %s %s %s ]', bb, m.xx, m.xy, m.yx, m.yy, m.x, m.y),
+ resources }, '')
+ -- remember the pattern
+ patterns['/MnmP'..i.nr] = pat
+end
+
+cb.register('finish_mpfigure', function(img)
+ if img.user.pattern_info then
+ definepattern(img.head, img.user, img.bbox)
+ img.discard = true
+ end
+end)
+
+-- 2 text
+
+process.text = function(append, object)
+ alloc.err('Text figure primitives are not supported (this message should not occur)')
+end
+
+local function get_transform(rect)
+ -- reconstruct the applied transformation by examining a unit square, i.e.
+ -- ‘rect’ was originally the path (0,0) -- (0,1) -- (1,1) -- (1,0)
+ local ll, lr, ul = rect[1], rect[2], rect[4]
+ -- determine translation from (0,0)
+ local tx, ty = ll.x_coord, ll.y_coord
+ -- determine rotation and scaling from the diagonals
+ local sx, rx = lr.x_coord - tx, lr.y_coord - ty
+ local ry, sy = ul.x_coord - tx, ul.y_coord - ty
+ return sx, rx, ry, sy, tx, ty
+end
+
+local function make_surrounding(nd_id, head)
+ local nd = node.new(nd_id)
+ nd.dir = 'TLT'
+ nd.head = head
+ return nd
+end
+
+local function apply_translation(box, tx, ty)
+ local horizontal = make_surrounding(0, box)
+ local vertical = make_surrounding(1, horizontal)
+ local outer = make_surrounding(0, vertical)
+ vertical.shift = tex.sp('-'..ty..'bp')
+ horizontal.shift = tex.sp(''..tx..'bp')
+ return outer
+end
+
+local function apply_transform(rect, box)
+ local sx, rx, ry, sy, tx, ty = get_transform(rect)
+ local transform = node.new(8,29)
+ transform.next, box.prev = box, transform
+ transform.data = string.format('%f %f %f %f', sx, rx, ry, sy)
+ return apply_translation(transform, tx, ty)
+end
+
+function A.box(append, object, box)
+ box.width = 0 ; box.height = 0 ; box.depth = 0;
+ local outer = apply_transform(object.path, box)
+ append:colour(object.color, 'fill')
+ append:save()
+ append:node(outer)
+ append:restore()
+end
+
+specials.TEXBOX = function(append, box, object)
+ local box = tex.getbox(tonumber(box))
+ append:box(object, node.copy_list(box))
+end
+
+specials.CHAR = function(append, data, object)
+ local char, font, xo, yo = table.unpack(data:explode(' '))
+ local n = node.new(29)
+ n.char, n.font, n.xoffset, n.yoffset =
+ tonumber(char), tonumber(font), tonumber(xo), tonumber(yo)
+ append:box(object, node.hpack(n))
+end
+
+specials.BOXRESOURCE = function(append, resource, object)
+ local rule = tex.useboxresource(tonumber(resource))
+ append:box(object, rule)
+end
+
+--
+
+-- 1 METAPOST INSTANCES
+
+local instances = { }
+M.instances = instances
+
+-- 2 small instance helper functions
+
+local default_catcodes = alloc.new_catcodetable('minim:mp:catcodes')
+
+-- parameters: wd, ht+dp, dp
+local function make_transform(w, h, d)
+ return string.format('identity xscaled %fpt yscaled %fpt shifted (0,-%fpt)',
+ w/65536, (h+d)/65536, d/65536)
+end
+
+local function print_log (nr, res)
+ local i = instances[nr]
+ -- only write to term if exit status increases
+ local log, alog
+ if res.status > i.status then
+ local nrlines, maxlines = 0, 16
+ alog = alloc.amsg
+ log = function(...)
+ if nrlines == maxlines then
+ alloc.log(...)
+ alloc.term('╧ [... see log file for full report ...]')
+ log, alog = alloc.log, alloc.alog
+ else
+ nrlines = nrlines + 1
+ alloc.msg(...)
+ end
+ end
+ else
+ log, alog = alloc.log, alloc.alog
+ end
+ -- split log into lines; discard empty lines at the end
+ local report = res.log and res.log:explode('\n') or { }
+ while report[#report] == '' do
+ report[#report] = nil
+ end
+ -- write out the log
+ if #report > 0 then
+ log('┌ exit status %d', res.status)
+ for _,line in ipairs(report) do
+ log('│ '..line)
+ end
+ log('└')
+ else
+ log('[ no logs for this run; exit status %d ]', res.status)
+ end
+ -- generate error or warning if needed
+ if res.status > i.status then
+ if res.status == 3 then
+ alloc.err('Metapost instance now defunct')
+ elseif res.status == 2 then
+ alloc.err('Error in metapost code. Further errors will be ignored')
+ elseif res.status == 1 then
+ alloc.msg('Metapost: code caused warning')
+ end
+ end
+ -- save the exit status for later comparison
+ i.status = res.status
+end
+
+local function finder (name, mode, ftype)
+ if mode == 'w' then
+ return name
+ else
+ return kpse.find_file(name,ftype)
+ end
+end
+
+-- 2 processing results
+
+local function process_results(nr, res)
+ print_log(nr, res)
+ local pictures = {}
+ if res.fig then
+ alloc.alog (' (%d figures)', #res.fig)
+ for i=1, #res.fig do
+ local fig = res.fig[i]
+ local name = fig:filename()
+ local append = init_append()
+ -- parse and append all objects
+ append:save()
+ local objects = fig:objects()
+ for j=1, #objects do
+ parse_object (append, objects[j])
+ end
+ append:restore()
+ -- bounding box and baseline information
+ local bb = fig:boundingbox()
+ local llx, lly, urx, ury = table.unpack(bb)
+ local bas = append.baseline or lly
+ local pic =
+ { head = append.head
+ , user = append.user
+ , name = name
+ , bbox = bb }
+ if llx > urx and lly > ury then
+ pic.discard = true -- picture is empty
+ pic.wd, pic.ht, pic.dp, pic.x0, pic.y0 = 0,0,0,0,0
+ else
+ pic.wd = tex.sp(string.format('%s bp', urx - llx))
+ pic.ht = tex.sp(string.format('%s bp', ury - bas))
+ pic.dp = tex.sp(string.format('%s bp', bas - lly))
+ pic.x0 = tex.sp(string.format('%s bp', -llx ))
+ pic.y0 = tex.sp(string.format('%s bp', -bas ))
+ end
+ cb.call_callback('finish_mpfigure', pic)
+ if not pic.discard then
+ pic.head = apply_translation(append.head, -llx, -bas)
+ end
+ if debugging then
+ alloc.msg('┌ image %s, with %s objects, %s nodes',
+ name, #objects, append.node_count)
+ alloc.msg('│ dimensions (%fpt+%fpt)x%fpt',
+ pic.ht/65536, pic.dp/65536, pic.wd/65536)
+ alloc.msg('└ origin (%fpt,%fpt)',
+ pic.x0/65536, pic.y0/65536)
+ if pic.discard then alloc.amsg(' [discarded]') end
+ end
+ table.insert(pictures, pic)
+ end
+ else
+ alloc.alog (' (no figures)')
+ end
+ return pictures
+end
+
+-- 2 running lua scripts
+
+-- Code run with runscript may return a value; we will try and convert it to
+-- a string that metapost can understand.
+--
+-- Tables of the form { 'box_size', width, height, depth, margin } are
+-- converted to a transformation. (The margin will be ignored for now, this may
+-- change in the future.)
+
+local function default_env()
+ local env = { }
+ for k,v in pairs(_G) do
+ env[k] = v
+ end
+ return env
+end
+
+local current_instance = false
+
+local function runscript(code)
+ local f, msg = load(code, current_instance.jobname, 't', current_instance.env)
+ if f then
+ local result = f()
+ if result == nil then
+ return
+ else
+ local t = type(result)
+ if t == 'number' then
+ return string.format('%.16f', result)
+ elseif t == 'string' then
+ return result
+ elseif t == 'table' and t[1] == 'box_size' then
+ -- TODO: take the margin into account if present (t[5])?
+ return make_transform(t[2], t[3], t[4])
+ elseif t == 'table' and #t < 5 then
+ local fmt = #t == 1 and '%.16f'
+ or #t == 2 and '(%.16f, %.16f)'
+ or #t == 3 and '(%.16f, %.16f, %.16f)'
+ or #t == 4 and '(%.16f, %.16f, %.16f, %.16f)'
+ return fmt:format(table.unpack(t))
+ else
+ return tostring(result)
+ end
+ end
+ else
+ local mp_msg = string.gsub(msg, '"', '"&ditto&"')
+ -- TODO: provide errhelp once the echo is gone
+ return string.format('hide(errmessage "Lua error: %s")', mp_msg)
+ end
+end
+
+-- 2 typesetting with tex
+
+-- The result of the maketext function is fed back into metapost; on that side,
+-- the representation of a <picture primary> will be expected for btex...etex
+-- and an empty string for verbatimtex...etex. maketext is indistinguishable
+-- from btex...etex.
+--
+-- We return here an image() containing a single path; it is that path that
+-- will be replaced with a stored node list later on.
+--
+-- The path itself is a unit rectangle: from the rectangle we will be able to
+-- reconstruct how the tex box will have been transformed. We indicate with
+-- a prescript that the rectangle should be replaced.
+--
+-- The size of the picture is communicated to MetaPost by a ‘setbounds’
+-- instruction.
+
+local function maketext(text, mode)
+ if mode == 0 then -- btex or maketext
+ local nr = alloc.new_box()
+ table.insert(current_instance.boxes, nr)
+ local assignment = string.format('\\global\\setbox%s=\\hbox{%s}', nr, text)
+ tex.runtoks(function() tex.print(current_instance.catcodes, assignment:explode('\n')) end)
+ local box = tex.box[nr]
+ return 'image ( fill unitsquare withprescript "TEXBOX:' ..nr..'";'..
+ 'setbounds currentpicture to unitsquare transformed '..
+ make_transform(box.width, box.height, box.depth) .. ';)'
+ elseif mode == 1 then -- verbatimtex
+ tex.runtoks(function() tex.print(current_instance.catcodes, text:explode('\n')) end)
+ end
+end
+
+local infont_box = alloc.new_box('infont box')
+function M.infont(text, fnt)
+ local fontid = tonumber(fnt) or font.id(fnt)
+ tex.runtoks(function()
+ tex.sprint(default_catcodes, string.format(
+ '\\setbox%d=\\hbox{\\setfontid%d\\relax', infont_box, fontid))
+ tex.sprint(-2, text); tex.sprint(default_catcodes, '}')
+ end)
+ local res, x = { }, 0
+ for n in node.traverse(tex.box[infont_box].list) do
+ if n.id == 29 then -- glyph
+ table.insert(res, string.format(
+ 'draw image ( fill unitsquare shifted (%fpt,0) withprescript "CHAR:%d %d %d %d";'
+ ..'setbounds currentpicture to unitsquare transformed %s shifted (%fpt,0););',
+ x/65536, n.char, n.font, n.xoffset, n.yoffset,
+ make_transform(n.width, n.height, n.depth), x/65536))
+ x = x + n.width
+ elseif n.id == 12 then -- glue
+ x = x + n.width
+ elseif n.id == 13 then -- kern
+ x = x + n.kern
+ end
+ end
+ return table.concat(res, '')
+end
+
+-- 2 opening, running and and closing instances
+
+local function apply_default_instance_opts(t)
+ return
+ { ini_version = true
+ , error_line = (texconfig.error_line or 79) - 5
+ , extensions = 1
+ , find_file = finder
+ --, script_error = ...
+ , job_name = t.jobname
+ , math_mode = t.math or 'scaled'
+ , random_seed = t.seed or nil
+ -- , file_line_error_style
+ , make_text = maketext
+ , run_script = runscript
+ }
+end
+
+local function save_image_list(self, res)
+ for _, img in ipairs(res) do
+ if img.discard then
+ node.flush_list(img.head)
+ else
+ self.results.count = self.results.count + 1
+ img.prev, img.next = self.results.last, nil
+ self.results.by_name[img.name] = img
+ if nil == self.results.first then
+ self.results.first = img
+ else
+ self.results.last.next = img
+ end
+ self.results.last = img
+ end
+ end
+end
+
+function M.run (nr, code)
+ local self = instances[nr]
+ if self.status == 3 then
+ alloc.msg('metapost instance %s (%s) is defunct and will not run', self.jobname, nr)
+ return
+ end
+ current_instance = self
+ alloc.log ('metapost: executing chunk in %s (%d)', self.jobname, nr)
+ local res = process_results(nr, self.instance:execute(code))
+ save_image_list(self, res)
+end
+
+M.init_files = { 'minim.mp' }
+
+function M.open (t)
+ local nr = #instances + 1
+ t.jobname = t.jobname or ':metapost:'
+ alloc.log ('metapost: creating instance %s (%d)', t.jobname, nr)
+ -- creating instance options
+ local init = ""
+ for _, f in ipairs(M.init_files) do
+ init = string.format('%s input %s;', init, f)
+ end
+ init = string.format('%s input %s;', init, t.format or 'plain.mp')
+ local opts = apply_default_instance_opts(t)
+ local instance = mplib.new(opts)
+ instance:execute(init)
+ local continue
+ -- adding the instance
+ instances[nr] =
+ { nr = nr
+ , instance = instance
+ , jobname = t.jobname
+ , results = { first = nil, last = nil, by_name = {}, count = 0 }
+ , status = 0
+ , catcodes = t.catcodes or default_catcodes
+ , boxes = { } -- allocated by maketext
+ , env = t.env or default_env()
+ }
+ return nr
+end
+
+function M.close (nr)
+ local i = instances[nr]
+ alloc.log ('metapost: closing instance %s (%d) ', i.jobname, nr)
+ if i.instance then
+ local res = i.instance:finish()
+ print_log(nr, res)
+ end
+ for _, nr in ipairs(i.boxes) do
+ -- remove allocated boxes
+ tex.box[nr] = nil
+ end
+ instances[nr] = false
+end
+
+-- 2 retrieving and using results
+
+local function retrieve(nr, name)
+ local results = instances[nr].results
+ local image
+ if name then
+ image = results.by_name[name]
+ results.by_name [name] = nil
+ else
+ image = results.first
+ end
+ results.count = results.count - 1
+ if image.prev then
+ if image.next then
+ image.prev.next = image.next
+ image.next.prev = image.prev
+ else
+ image.prev.next = nil
+ results.last = image.prev
+ end
+ elseif image.next then
+ results.first = image.next
+ image.next.prev = nil
+ else
+ results.first = nil
+ results.last = nil
+ end
+ return image
+end
+
+function M.left (nr)
+ return instances[nr].results.count
+end
+
+function M.get_image(nr, name)
+ local image = retrieve(nr, name)
+ if image then
+ local box = node.hpack(image.head)
+ box.width = image.wd
+ box.height = image.ht
+ box.depth = image.dp
+ return box
+ end
+end
+
+function M.shipout(nr)
+ local ox, oy = pdf.getorigin
+ local ho, vo = tex.hoffset, tex.voffset
+ pdf.setorigin()
+ tex.hoffset = 0
+ while M.left(nr) > 0 do
+ local image = retrieve(nr)
+ tex.pageheight = (image.ht + image.dp)
+ tex.pagewidth = image.wd
+ tex.voffset = image.ht
+ tex.box[255] = node.vpack(node.hpack(image.head))
+ tex.shipout(255)
+ tex.count[0] = tex.count[0] + 1
+ end
+ pdf.setorigin(ox, oy)
+ tex.hoffset, tex.voffset = ho, vo
+end
+
+-- 2 tex interface
+
+local scan_int = token.scan_int
+local scan_string = token.scan_string
+
+alloc.luadef('closemetapostinstance', function() M.close(scan_int()) end)
+
+alloc.luadef('runmetapost', function()
+ M.run(scan_int(), scan_string())
+end, 'protected')
+alloc.luadef('runmetapostimage', function()
+ local i = scan_int()
+ M.run(i, 'beginfig(0); '..scan_string()..' endfig;')
+ node.write(M.get_image(i))
+end, 'protected')
+
+alloc.luadef('getnextmpimage', function()
+ node.write(M.get_image(scan_int()))
+end)
+alloc.luadef('getnamedmpimage', function()
+ node.write(M.get_image(scan_int(), scan_string()))
+end)
+
+alloc.luadef('boxnextmpimage', function()
+ local i = scan_int()
+ local b = scan_int()
+ tex.box[b] = M.get_image(i)
+end)
+
+alloc.luadef('boxnamedmpimage', function()
+ local i = scan_int()
+ local b = scan_int()
+ local n = scan_string()
+ tex.box[b] = M.get_image(i, n)
+end)
+
+alloc.luadef('remainingmpimages', function()
+ tex.sprint(M.left(scan_int()))
+end)
+
+--
+
+--
+
+return M
+
diff --git a/macros/luatex/generic/minim-mp/minim-mp.pdf b/macros/luatex/generic/minim-mp/minim-mp.pdf
new file mode 100644
index 0000000000..b511de3297
--- /dev/null
+++ b/macros/luatex/generic/minim-mp/minim-mp.pdf
Binary files differ
diff --git a/macros/luatex/generic/minim-mp/minim-mp.tex b/macros/luatex/generic/minim-mp/minim-mp.tex
new file mode 100644
index 0000000000..8e39c7f227
--- /dev/null
+++ b/macros/luatex/generic/minim-mp/minim-mp.tex
@@ -0,0 +1,61 @@
+
+\ifdefined\minimmploaded
+ \message{(skipped)}
+ \expandafter\endinput\fi
+\chardef\minimmploaded = \catcode`\:
+\catcode`\: = 11
+
+\input minim-alloc
+
+% a default catcode table
+\newcatcodetable \minim:mp:catcodes
+{\catcode`\:=12 \catcode`\@=12
+ \savecatcodetable\csname minim:mp:catcodes\endcsname}
+
+\directlua { require('minim-mp') }
+
+% The following are provided from the lua side.
+%
+% Note that only two of these are \protected – you are responsible for the
+% proper time and place of expansion of the others.
+%
+% \closemetapostinstance \instance
+% \runmetapost \instance { code } % \protected
+% \runmetapostimage \instance { code } % \protected
+% \getnextmpimage \instance
+% \getnamedmpimage \instance {name}
+% \remainingmpimages \instance
+% \boxnextmpimage \instance box-nr
+% \boxnamedmpimage \instance box-nr {name}
+
+% \directmetapost [ options ] { code }
+\protected\def\directmetapost{\withoptions[]\directmetapost:}
+\def\directmetapost:[#1]#2{%
+ \begingroup
+ \newmetapostinstance[#1]\:mpinst:
+ \runmetapost\:mpinst:{#2}%
+ \loop \ifnum\remainingmpimages\:mpinst:>0\relax
+ \getnextmpimage\:mpinst: \repeat
+ \closemetapostinstance\:mpinst:
+ \endgroup}
+
+% \newmetapostinstance [ options ] \instance
+\protected\def\newmetapostinstance{\withoptions[]\newmetapostinstance:}
+\def\newmetapostinstance:[#1]#2{%
+ \chardef#2=\directlua{
+ tex.sprint(require('minim-mp').open{#1})
+ }\relax}
+
+% colour conversion: 1 grayscale 2 cmyk 3 rgb 4 rgb as spot
+\newcount \convertmpcolours
+\convertmpcolours = 0
+
+\newcount\RtoG \RtoG = 2126
+\newcount\GtoG \GtoG = 7152
+\newcount\BtoG \BtoG = 0722
+
+\catcode`\: = \minimmploaded
+
+
+
+
diff --git a/macros/luatex/generic/minim-mp/minim.mp b/macros/luatex/generic/minim-mp/minim.mp
new file mode 100644
index 0000000000..c78dde2a92
--- /dev/null
+++ b/macros/luatex/generic/minim-mp/minim.mp
@@ -0,0 +1,73 @@
+
+delimiters ();
+
+message "Loading the minim extension macros";
+
+% interaction with tex
+def baseline expr o =
+ fill if numeric o: (0,o) else o fi
+ -- cycle withprescript "BASELINE:"; enddef;
+def boxresource expr nr = image(
+ fill unitsquare withprescript "BOXRESOURCE:" & decimal nr ;
+ setbounds currentpicture to unitsquare transformed runscript
+ ("return { 'box_size', tex.getboxresourcedimensions(" & decimal nr & ") }");
+ ) enddef;
+
+primarydef t infont f = image( runscript(
+ "return require('minim-mp').infont("&ditto&t&ditto&", "
+ &if numeric f: decimal(f) else: ditto&f&ditto fi&")" ) ) enddef;
+
+% interaction with lua
+vardef hexadecimal expr n =
+ % TODO: support other number systems
+ save d, a, m; a = ASCII("a"); m := abs n;
+ if n < 0: "-0x" else: "0x" fi
+ for i = 1 upto 7: &
+ hide(d := floor m div 256; m := 16(m - 256d);)
+ if d < 10: decimal d else: char(a+d-10) fi
+ if i = 3: & "." fi
+ endfor enddef;
+vardef scaledpoints expr n =
+ % use the fact that 800bp = 803pt
+ save a, m; m := abs n;
+ a1 = m div (1025/1024); % 1025/1024 = 800epsilon * 82
+ m := m mod (1025/1024);
+ a2 = m div 800epsilon; % max 82
+ m := (m mod 800epsilon) div epsilon;
+ a3 = floor(m*803/800 + 1/2);
+ if n < 0: "-(" else: "(" fi
+ & decimal(a1) & "*803*82 + "
+ & decimal(a2) & "*803 + "
+ & decimal(a3) & ")" enddef;
+
+% reporting
+def debug_pdf = runscript
+ ("require('minim-mp').enable_debugging()") enddef;
+def texmessage expr msg = runscript
+ ("texio.write_nl("&ditto&msg&ditto&")") enddef;
+
+% patterns
+def withpattern(suffix s) = withprescript
+ ("fillpattern: " & decimal(_patterns_.s)) enddef;
+def beginpattern(suffix s) =
+ begingroup clearxy; clearit;
+ interim defaultcolormodel:=1;
+ charcode:=incr _patterns_._last_;
+ _patterns_.s:=charcode; drawoptions();
+ pickup pencircle scaled 0.4pt;
+ save painttype; painttype:=2;
+ save _withcolor; let _withcolor = withcolor; save withcolor;
+ def withcolor = hide(painttype:=1) _withcolor enddef;
+ save matrix; transform matrix; enddef;
+def endpattern (expr xstep, ystep) =
+ if unknown matrix : matrix:=identity; fi
+ special "definepattern:" for e = charcode, tilingtype, painttype,
+ xstep, ystep, xxpart matrix, xypart matrix, yxpart matrix, yypart matrix:
+ & " " & decimal(e) endfor;
+ shipit; endgroup enddef;
+newinternal tilingtype; tilingtype:=1;
+_patterns_._last_ := 0;
+
+% so that we can load plain.mp after this
+let dump = endinput ;
+
diff --git a/macros/luatex/generic/minim-pdf/EUPL-1.2-EN.txt b/macros/luatex/generic/minim-pdf/EUPL-1.2-EN.txt
new file mode 100644
index 0000000000..4153cd3775
--- /dev/null
+++ b/macros/luatex/generic/minim-pdf/EUPL-1.2-EN.txt
@@ -0,0 +1,287 @@
+ EUROPEAN UNION PUBLIC LICENCE v. 1.2
+ EUPL © the European Union 2007, 2016
+
+This European Union Public Licence (the ‘EUPL’) applies to the Work (as defined
+below) which is provided under the terms of this Licence. Any use of the Work,
+other than as authorised under this Licence is prohibited (to the extent such
+use is covered by a right of the copyright holder of the Work).
+
+The Work is provided under the terms of this Licence when the Licensor (as
+defined below) has placed the following notice immediately following the
+copyright notice for the Work:
+
+ Licensed under the EUPL
+
+or has expressed by any other means his willingness to license under the EUPL.
+
+1. Definitions
+
+In this Licence, the following terms have the following meaning:
+
+- ‘The Licence’: this Licence.
+
+- ‘The Original Work’: the work or software distributed or communicated by the
+ Licensor under this Licence, available as Source Code and also as Executable
+ Code as the case may be.
+
+- ‘Derivative Works’: the works or software that could be created by the
+ Licensee, based upon the Original Work or modifications thereof. This Licence
+ does not define the extent of modification or dependence on the Original Work
+ required in order to classify a work as a Derivative Work; this extent is
+ determined by copyright law applicable in the country mentioned in Article 15.
+
+- ‘The Work’: the Original Work or its Derivative Works.
+
+- ‘The Source Code’: the human-readable form of the Work which is the most
+ convenient for people to study and modify.
+
+- ‘The Executable Code’: any code which has generally been compiled and which is
+ meant to be interpreted by a computer as a program.
+
+- ‘The Licensor’: the natural or legal person that distributes or communicates
+ the Work under the Licence.
+
+- ‘Contributor(s)’: any natural or legal person who modifies the Work under the
+ Licence, or otherwise contributes to the creation of a Derivative Work.
+
+- ‘The Licensee’ or ‘You’: any natural or legal person who makes any usage of
+ the Work under the terms of the Licence.
+
+- ‘Distribution’ or ‘Communication’: any act of selling, giving, lending,
+ renting, distributing, communicating, transmitting, or otherwise making
+ available, online or offline, copies of the Work or providing access to its
+ essential functionalities at the disposal of any other natural or legal
+ person.
+
+2. Scope of the rights granted by the Licence
+
+The Licensor hereby grants You a worldwide, royalty-free, non-exclusive,
+sublicensable licence to do the following, for the duration of copyright vested
+in the Original Work:
+
+- use the Work in any circumstance and for all usage,
+- reproduce the Work,
+- modify the Work, and make Derivative Works based upon the Work,
+- communicate to the public, including the right to make available or display
+ the Work or copies thereof to the public and perform publicly, as the case may
+ be, the Work,
+- distribute the Work or copies thereof,
+- lend and rent the Work or copies thereof,
+- sublicense rights in the Work or copies thereof.
+
+Those rights can be exercised on any media, supports and formats, whether now
+known or later invented, as far as the applicable law permits so.
+
+In the countries where moral rights apply, the Licensor waives his right to
+exercise his moral right to the extent allowed by law in order to make effective
+the licence of the economic rights here above listed.
+
+The Licensor grants to the Licensee royalty-free, non-exclusive usage rights to
+any patents held by the Licensor, to the extent necessary to make use of the
+rights granted on the Work under this Licence.
+
+3. Communication of the Source Code
+
+The Licensor may provide the Work either in its Source Code form, or as
+Executable Code. If the Work is provided as Executable Code, the Licensor
+provides in addition a machine-readable copy of the Source Code of the Work
+along with each copy of the Work that the Licensor distributes or indicates, in
+a notice following the copyright notice attached to the Work, a repository where
+the Source Code is easily and freely accessible for as long as the Licensor
+continues to distribute or communicate the Work.
+
+4. Limitations on copyright
+
+Nothing in this Licence is intended to deprive the Licensee of the benefits from
+any exception or limitation to the exclusive rights of the rights owners in the
+Work, of the exhaustion of those rights or of other applicable limitations
+thereto.
+
+5. Obligations of the Licensee
+
+The grant of the rights mentioned above is subject to some restrictions and
+obligations imposed on the Licensee. Those obligations are the following:
+
+Attribution right: The Licensee shall keep intact all copyright, patent or
+trademarks notices and all notices that refer to the Licence and to the
+disclaimer of warranties. The Licensee must include a copy of such notices and a
+copy of the Licence with every copy of the Work he/she distributes or
+communicates. The Licensee must cause any Derivative Work to carry prominent
+notices stating that the Work has been modified and the date of modification.
+
+Copyleft clause: If the Licensee distributes or communicates copies of the
+Original Works or Derivative Works, this Distribution or Communication will be
+done under the terms of this Licence or of a later version of this Licence
+unless the Original Work is expressly distributed only under this version of the
+Licence — for example by communicating ‘EUPL v. 1.2 only’. The Licensee
+(becoming Licensor) cannot offer or impose any additional terms or conditions on
+the Work or Derivative Work that alter or restrict the terms of the Licence.
+
+Compatibility clause: If the Licensee Distributes or Communicates Derivative
+Works or copies thereof based upon both the Work and another work licensed under
+a Compatible Licence, this Distribution or Communication can be done under the
+terms of this Compatible Licence. For the sake of this clause, ‘Compatible
+Licence’ refers to the licences listed in the appendix attached to this Licence.
+Should the Licensee's obligations under the Compatible Licence conflict with
+his/her obligations under this Licence, the obligations of the Compatible
+Licence shall prevail.
+
+Provision of Source Code: When distributing or communicating copies of the Work,
+the Licensee will provide a machine-readable copy of the Source Code or indicate
+a repository where this Source will be easily and freely available for as long
+as the Licensee continues to distribute or communicate the Work.
+
+Legal Protection: This Licence does not grant permission to use the trade names,
+trademarks, service marks, or names of the Licensor, except as required for
+reasonable and customary use in describing the origin of the Work and
+reproducing the content of the copyright notice.
+
+6. Chain of Authorship
+
+The original Licensor warrants that the copyright in the Original Work granted
+hereunder is owned by him/her or licensed to him/her and that he/she has the
+power and authority to grant the Licence.
+
+Each Contributor warrants that the copyright in the modifications he/she brings
+to the Work are owned by him/her or licensed to him/her and that he/she has the
+power and authority to grant the Licence.
+
+Each time You accept the Licence, the original Licensor and subsequent
+Contributors grant You a licence to their contributions to the Work, under the
+terms of this Licence.
+
+7. Disclaimer of Warranty
+
+The Work is a work in progress, which is continuously improved by numerous
+Contributors. It is not a finished work and may therefore contain defects or
+‘bugs’ inherent to this type of development.
+
+For the above reason, the Work is provided under the Licence on an ‘as is’ basis
+and without warranties of any kind concerning the Work, including without
+limitation merchantability, fitness for a particular purpose, absence of defects
+or errors, accuracy, non-infringement of intellectual property rights other than
+copyright as stated in Article 6 of this Licence.
+
+This disclaimer of warranty is an essential part of the Licence and a condition
+for the grant of any rights to the Work.
+
+8. Disclaimer of Liability
+
+Except in the cases of wilful misconduct or damages directly caused to natural
+persons, the Licensor will in no event be liable for any direct or indirect,
+material or moral, damages of any kind, arising out of the Licence or of the use
+of the Work, including without limitation, damages for loss of goodwill, work
+stoppage, computer failure or malfunction, loss of data or any commercial
+damage, even if the Licensor has been advised of the possibility of such damage.
+However, the Licensor will be liable under statutory product liability laws as
+far such laws apply to the Work.
+
+9. Additional agreements
+
+While distributing the Work, You may choose to conclude an additional agreement,
+defining obligations or services consistent with this Licence. However, if
+accepting obligations, You may act only on your own behalf and on your sole
+responsibility, not on behalf of the original Licensor or any other Contributor,
+and only if You agree to indemnify, defend, and hold each Contributor harmless
+for any liability incurred by, or claims asserted against such Contributor by
+the fact You have accepted any warranty or additional liability.
+
+10. Acceptance of the Licence
+
+The provisions of this Licence can be accepted by clicking on an icon ‘I agree’
+placed under the bottom of a window displaying the text of this Licence or by
+affirming consent in any other similar way, in accordance with the rules of
+applicable law. Clicking on that icon indicates your clear and irrevocable
+acceptance of this Licence and all of its terms and conditions.
+
+Similarly, you irrevocably accept this Licence and all of its terms and
+conditions by exercising any rights granted to You by Article 2 of this Licence,
+such as the use of the Work, the creation by You of a Derivative Work or the
+Distribution or Communication by You of the Work or copies thereof.
+
+11. Information to the public
+
+In case of any Distribution or Communication of the Work by means of electronic
+communication by You (for example, by offering to download the Work from a
+remote location) the distribution channel or media (for example, a website) must
+at least provide to the public the information requested by the applicable law
+regarding the Licensor, the Licence and the way it may be accessible, concluded,
+stored and reproduced by the Licensee.
+
+12. Termination of the Licence
+
+The Licence and the rights granted hereunder will terminate automatically upon
+any breach by the Licensee of the terms of the Licence.
+
+Such a termination will not terminate the licences of any person who has
+received the Work from the Licensee under the Licence, provided such persons
+remain in full compliance with the Licence.
+
+13. Miscellaneous
+
+Without prejudice of Article 9 above, the Licence represents the complete
+agreement between the Parties as to the Work.
+
+If any provision of the Licence is invalid or unenforceable under applicable
+law, this will not affect the validity or enforceability of the Licence as a
+whole. Such provision will be construed or reformed so as necessary to make it
+valid and enforceable.
+
+The European Commission may publish other linguistic versions or new versions of
+this Licence or updated versions of the Appendix, so far this is required and
+reasonable, without reducing the scope of the rights granted by the Licence. New
+versions of the Licence will be published with a unique version number.
+
+All linguistic versions of this Licence, approved by the European Commission,
+have identical value. Parties can take advantage of the linguistic version of
+their choice.
+
+14. Jurisdiction
+
+Without prejudice to specific agreement between parties,
+
+- any litigation resulting from the interpretation of this License, arising
+ between the European Union institutions, bodies, offices or agencies, as a
+ Licensor, and any Licensee, will be subject to the jurisdiction of the Court
+ of Justice of the European Union, as laid down in article 272 of the Treaty on
+ the Functioning of the European Union,
+
+- any litigation arising between other parties and resulting from the
+ interpretation of this License, will be subject to the exclusive jurisdiction
+ of the competent court where the Licensor resides or conducts its primary
+ business.
+
+15. Applicable Law
+
+Without prejudice to specific agreement between parties,
+
+- this Licence shall be governed by the law of the European Union Member State
+ where the Licensor has his seat, resides or has his registered office,
+
+- this licence shall be governed by Belgian law if the Licensor has no seat,
+ residence or registered office inside a European Union Member State.
+
+Appendix
+
+‘Compatible Licences’ according to Article 5 EUPL are:
+
+- GNU General Public License (GPL) v. 2, v. 3
+- GNU Affero General Public License (AGPL) v. 3
+- Open Software License (OSL) v. 2.1, v. 3.0
+- Eclipse Public License (EPL) v. 1.0
+- CeCILL v. 2.0, v. 2.1
+- Mozilla Public Licence (MPL) v. 2
+- GNU Lesser General Public Licence (LGPL) v. 2.1, v. 3
+- Creative Commons Attribution-ShareAlike v. 3.0 Unported (CC BY-SA 3.0) for
+ works other than software
+- European Union Public Licence (EUPL) v. 1.1, v. 1.2
+- Québec Free and Open-Source Licence — Reciprocity (LiLiQ-R) or Strong
+ Reciprocity (LiLiQ-R+).
+
+The European Commission may update this Appendix to later versions of the above
+licences without producing a new version of the EUPL, as long as they provide
+the rights granted in Article 2 of this Licence and protect the covered Source
+Code from exclusive appropriation.
+
+All other changes or additions to this Appendix require the production of a new
+EUPL version.
diff --git a/macros/luatex/generic/minim-pdf/README b/macros/luatex/generic/minim-pdf/README
new file mode 100644
index 0000000000..1d1f02a913
--- /dev/null
+++ b/macros/luatex/generic/minim-pdf/README
@@ -0,0 +1,36 @@
+Version: 2021/1.0
+
+SUMMARY
+
+This package adds low-level support to plain LuaTeX for marking up the
+structure of a PDF document. The implementation is rather basic, but should
+allow you to make your PDFs fully PDF/A-compliant.
+
+This encompasses the following features:
+
+ - Creating Tagged PDF
+ - Marking hyperlinks, bookmarks and page labels
+ - Marking spaces and (implicit) hyphens
+ - Embedding associated files
+ - Declaring PDF/A conformance
+
+Support for XMP data inclusion (another requirement of PDF/A) is provided by
+a separate package, minim-xmp.
+
+
+DOCUMENTATION
+
+In order to obtain the typeset manual of this package, simply say:
+
+ luatex minim-pdf.doc
+
+
+COPYING
+
+(c) 2021 Esger Renkema
+
+These files may be distributed under the terms of the European Union Public
+Licence (EUPL) version 1.2 or later. A copy can be obtained at:
+
+https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+
diff --git a/macros/luatex/generic/minim-pdf/minim-languagecodes.lua b/macros/luatex/generic/minim-pdf/minim-languagecodes.lua
new file mode 100644
index 0000000000..df3e95a65e
--- /dev/null
+++ b/macros/luatex/generic/minim-pdf/minim-languagecodes.lua
@@ -0,0 +1,146 @@
+
+-- Associating language codes with language names used with \uselanguage.
+
+return {
+ afrikaans = 'af',
+ akkadian = 'akk',
+ american = 'en-US',
+ amharic = 'am',
+ ancientgreek = 'grc',
+ arabic = 'ar',
+ aramaic = 'arc',
+ armenian = 'hy',
+ assamese = 'as',
+ avestan = 'ae',
+ basque = 'eu',
+ belarusian = 'be',
+ bengali = 'bn',
+ biblicalhebrew = 'hbo',
+ bohairic = 'cop-x-bohairic',
+ bokmal = 'nb',
+ bosnian = 'bs',
+ brazilian = 'pt-BR',
+ breton = 'br',
+ british = 'en-UK',
+ bulgarian = 'bg',
+ burmese = 'my',
+ byzantine = 'gkm',
+ cantonese = 'yue',
+ catalan = 'ca',
+ chechen = 'ce',
+ cherokee = 'chr',
+ chinese = 'zh',
+ churchlatin = 'la-x-liturgic',
+ churchslavonic = 'cu',
+ classiclatin = 'la-x-classic',
+ classictibetan = 'xtc',
+ coptic = 'cop',
+ croatian = 'hr',
+ czech = 'cs',
+ danish = 'da',
+ dari = 'prs',
+ dutch = 'nl',
+ english = 'en',
+ espanol = 'es',
+ esperanto = 'eo',
+ estonian = 'et',
+ ethiopic = 'mul-ethi',
+ etruscan = 'ett',
+ farsi = 'fa',
+ finnish = 'fi',
+ flemish = 'nl-BE',
+ francais = 'fr',
+ french = 'fr',
+ frisian = 'fy',
+ friulan = 'fur',
+ galician = 'gl',
+ geez = 'gez',
+ georgian = 'ka',
+ german = 'de',
+ ['german-x-latest'] = 'de',
+ gothic = 'got',
+ greek = 'el',
+ gujarati = 'gu',
+ hebrew = 'he',
+ hindi = 'hi',
+ hittite = 'hit',
+ hungarian = 'hu',
+ icelandic = 'is',
+ indonesian = 'id',
+ interlingua = 'ia',
+ irish = 'ga',
+ italian = 'it',
+ japanese = 'ja',
+ kannada = 'kn',
+ koine = 'grc-x-koine',
+ kurmanji = 'kmr',
+ latin = 'la',
+ latvian = 'lv',
+ lithuanian = 'lt',
+ liturgicallatin = 'la-x-liturgic',
+ malayalam = 'ml',
+ marathi = 'mr',
+ medievalgreek = 'gkm',
+ medievallatin = 'la-x-medieval',
+ mongolian = 'mn-cyrl',
+ mongolianlmc = 'mn-cyrl-x-lmc',
+ monogreek = 'el-monoton',
+ multiple = 'mul',
+ ngerman = 'de-1996',
+ ['ngerman-x-latest'] = 'de-1996',
+ nohyph = 'und',
+ nolang = 'zxx',
+ norsk = 'nb',
+ norwegian = 'nb',
+ nynorsk = 'nn',
+ occitan = 'oc',
+ oriya = 'or',
+ pali = 'pi',
+ patois = 'fr',
+ persian = 'fa',
+ piedmontese = 'pms',
+ pinyin = 'zh-latn-pinyin',
+ polish = 'pl',
+ polygreek = 'el-polyton',
+ portuges = 'pt',
+ portuguese = 'pt',
+ punjabi = 'pa',
+ romanian = 'ro',
+ romansh = 'rm',
+ russian = 'ru',
+ sahidic = 'cop-x-sahidic',
+ samaritan = 'smp',
+ sanskrit = 'sa',
+ serbian = 'sr-latn',
+ serbianc = 'sr-cyrl',
+ slovak = 'sk',
+ slovene = 'sl',
+ slovenian = 'sl',
+ spanish = 'es',
+ sumerian = 'sux',
+ swedish = 'sv',
+ swissgerman = 'de-CH',
+ syriac = 'syr',
+ talmudic = 'tmr',
+ tamil = 'ta',
+ telugu = 'te',
+ thai = 'th',
+ tibetan = 'bo',
+ turkish = 'tr',
+ turkmen = 'tk',
+ ugaritic = 'uga',
+ uncoded = 'mis',
+ undetermined = 'und',
+ ukenglish = 'en-UK',
+ UKenglish = 'en-UK',
+ ukrainian = 'uk',
+ uppersorbian = 'hsb',
+ usenglish = 'en-US',
+ USenglish = 'en-US',
+ usenglishmax = 'en-US',
+ vedic = 'sa-vaidika',
+ walloon = 'wa',
+ welsh = 'cy',
+ yiddish = 'yi',
+}
+
diff --git a/macros/luatex/generic/minim-pdf/minim-pdf.doc b/macros/luatex/generic/minim-pdf/minim-pdf.doc
new file mode 100644
index 0000000000..2c06dd25b0
--- /dev/null
+++ b/macros/luatex/generic/minim-pdf/minim-pdf.doc
@@ -0,0 +1,425 @@
+
+\input minim-doc.sty
+
+\manual{minim-pdf}
+
+\ifchapter \chapter Hypertext
+
+This chapter and the next document the support of the modern pdf features
+provided by the minim-pdf package.
+Load it by saying ⟦\input minim-pdf⟧.
+The next chapter concerns the creation of tagged pdf;
+all other features of the package are described here.
+
+\else \startmetadata
+ author {Esger Renkema}
+ title {minim-pdf}
+ date {2021-06-01}
+ version {2021/1.0}
+ keywords {LuaTeX; Plain TeX; PDF/A; Tagged PDF; accessibility; a11y;
+ hypertext; bookmarks; document outline; associated files}
+ stopmetadata
+\maketitle
+
+This package adds low-level support to plain luatex for marking up the
+structure of a pdf document. The implementation is rather basic, but should
+allow you to make your pdfs fully pdf/a-compliant.
+Load the package by saying ⟦\input minim-pdf⟧.
+
+The creation of tagged pdf will be described in the second half of this manual;
+all other features will be covered first.
+
+\fi
+
+\section Hyperlinks % 1
+
+For most simple cases, you can use
+⟦*\hyperlink [name {...} | url {...}] ... \endlink⟧ for linking to a named
+destination in your own document or to an external hyperlink respectively.
+There is no support for nonsimple cases.
+
+A named destination can be created with ⟦*\nameddestination {...}⟧ (also in
+horizontal mode, unlike the backend primitive) and if you cannot think of
+a name, ⟦*\newdestinationname⟧ should generate a unique one.
+If you need the latter twice, ⟦*\lastdestinationname⟧ gives the last
+generated name.
+
+
+\section Bookmarks % 1
+
+Bookmarks can be added with ⟦*\outline [open] [dest {name}] {title}⟧.
+Add ⟦open⟧ to have the bookmark appear initially open and
+say ⟦dest {name}⟧ for having it refer to a specific named destination
+(otherwise, a new one will be created where the ⟦\outline⟧ command appears).
+
+A bookmark is automatically associated with the current structure element and
+the hierarchy of structure elements determines the nesting of bookmarks.
+Therefore, if you want nested bookmarks, you \emph{must} precede the ⟦\outline⟧
+command with a declaration of the current structure element, even if you have
+otherwise disabled tagging. See the next chapter on how to do this.
+
+
+\section Page labels % 1
+
+If the page numbers of your document are not a simple sequence starting with~1,
+you can use ⟦*\setpagelabels [pre {prefix}] style nr⟧ for communicating
+this to the pdf viewer.
+This command affects the page labels from the next page on: ⟦nr⟧ should be the
+numerical page number of that page.
+The ⟦prefix⟧ is prepended to each number and the
+⟦style⟧ must be one of ⟦decimal⟧, ⟦roman⟧, ⟦Roman⟧, ⟦alphabetic⟧, ⟦Alphabetic⟧
+or ⟦none⟧. In the last case, only the prefix is used.
+
+
+\section PDF/A % 1
+
+You can declare pdf/a conformance with ⟦*\pdfalevel xy⟧, with version $\tt
+x ∈ \{1,2,3\}$ and conformance level $\tt y ∈ \{a,b,u\}$. This will set the
+correct pdf version and ⟦pdfaid⟧ metadata. If the conformance level is ‘⟦a⟧’,
+tagging will be enabled (see the next chapter). Finally, a default RGB colour
+profile will be included.
+The conformance level can be queried from the ⟦*\pdfaconformancelevel⟧ register.
+
+Note that merely declaring conformance will not make your document pdf/a
+compliant, and that minim will not warn you if it is not.
+However, the features described in this chapter and the next should be enough
+to make pdf/a compliance possible.
+
+Also note that there currently is no documented way of choosing a different
+colour profile from the default (i.e. the default rgb profile provided by the
+colorprofiles package).
+Should you need do that, you will have to do so manually, after
+disabling the automatic inclusion by saying
+⟦\expandafter\let \csname minim:default:rgb:profile\endcsname = \relax⟧.
+
+Finally, note that pdf/a requires that spaces are represented by actual space
+characters and that discretionary hyphens are marked as soft hyphens
+(⟦U+00AD⟧).
+Since both features benefit accessibility and text extraction in general, they
+are enabled by default.
+You can disable them by setting ⟦*\writehyphensandspaces⟧ to a nonpositive value.
+
+
+\section Embedded files % 1
+
+You can attach (associate) files with ⟦*\embedfile <options>⟧.
+The file will be attached to the current structure element (see the next
+chapter) unless the ⟦global⟧ option is given: then it will be added to the
+document catalog.
+Arguments consisting of a single word can be given without braces and
+exactly one of the options ⟦file⟧ or ⟦string⟧ must be present.
+
+\smallskip\marktableaslist \halign{#\quad\hfil&#\hfil\cr
+⟦file ⟧\hfill⟦{...}⟧ & The file to embed.\cr
+⟦string ⟧\hfill⟦{...}⟧ & The string to embed.\cr
+⟦global⟧ & Attach to the document catalog.\cr
+⟦uncompressed⟧ & Do not compress the file stream.\cr
+⟦mimetype ⟧\hfill⟦{...}⟧ & The file’s mime type.\cr
+⟦moddate ⟧\hfill⟦{...}⟧\rlap{*} & The modification date (see * below).\cr
+⟦desc ⟧\hfill⟦{...}⟧ & A description (the ⟦/Desc⟧ key).\cr
+⟦relation ⟧\hfill⟦{...}⟧ & The ⟦/AFRelationship⟧ value as defined in pdf/a-3.\cr
+⟦name ⟧\hfill⟦{...}⟧ & The file name (only required when writing a ⟦string⟧).\cr }
+
+* The modification date must be of the form ⟦yyyy[-m[m][-d[d]]]⟧. A default
+moddate can be set with ⟦*\setembeddedfilesmoddate {default}⟧.
+The ⟦default⟧ date will be expanded fully at the time of embedding.
+With the minim-xmp package, a useful setting is
+⟦\setembeddedfilesmoddate {\getmetadata date}⟧.
+
+\section Lua module % 1
+
+The interface of the lua module (available via
+⟦local M = require('minim-pdf')⟧) is not stable yet, and may change.
+One function of interest, however, is
+⟦M.pdf_string(...)⟧, wich converts a lua string to a pdf string. The
+surrounding ⟦<>⟧ or ⟦()⟧ characters are included in the return value.
+
+
+% 
+
+\chapter Tagged PDF
+
+This chapter is a continuation of the previous and describes the parts of
+minim-pdf that concern the creation of tagged pdf. All features in this chapter
+must be explicitly enabled by setting ⟦*\writedocumentstructure⟧ to a positive
+value. This will be done automatically if you declare pdf/a conformance (see
+above).
+
+This part of the package is rather low-level and this chapter rather technical.
+For a more general introduction to and discussion of tagged pdf, please read
+the (excellent) manual of latex’s tagpdf package.
+
+
+\section Purpose, limitations and pitfalls % 1
+
+The main purpose of this package is semi-automatically marking up the
+(hierarchical) structure of your document, thereby creating so-called tagged pdf.
+The mechanism presented here is not quite as versatile as the pdf format
+allows. The most important restriction is that all content of the document must
+be seen by tex’s stomach in the \emph{logical} order.
+
+Furthermore, while the macros in this package are sophisticated enough that
+tagging can be done without any manual intervantion, it is quite possible and
+rather easy to generate the wrong document structore, or even cause syntax
+errors in the resulting pdf code.
+You should always check the result in an external application.
+
+This is the full list of limitations, pitfalls and shortcomings:
+\startlist
+\item1. Document content must be seen by tex in its logical order (although you
+can mark out-of-order content explicitly if you know what you are doing; see
+below).
+\item2. Artifacts cannot be split across pages. A pagebreak inmidst an artifact
+will cause incorrect pdf without error or warning.
+\item3. The contents of ⟦\localleftbox⟧ and ⟦\localrightbox⟧ must be marked
+manually, probably as artifact.
+\item4. You must mark page header, page footer and footnote rule yourself; no
+default is set.
+\item5. There currently is no way of marking xforms or other pdf objects as
+content items of themselves.
+\item6. The content of xforms (i.e. pdf objects created by ⟦\useboxresource⟧)
+should not contain tagging commands.
+\item7. Likewise, you should be careful with box reuse: it might work, but you
+should check.
+\item8. The use of structure element attributes is currently not supported
+except in a limited number of cases.
+\item9. This package currently only supports pdf~1.7 tagging and is not yet
+ready for use with pdf~2.0.
+\stoplist
+
+In order to help you debugging, some errors will refer you to the resulting pdf
+file. If you get such errors, decompress the pdf and search for the string
+‘Warning:’. It will appear in the pdf stream at the exact spot the problem
+occurs.
+
+
+\section General overview % 1
+
+When speaking about tagging, we have to do with two (or perhaps three) separate
+and orthogonal tagging processes.
+The first is the creation of a hierarchical \emph{document structure}, made up
+of \emph{structure elements} (SEs). The document structure describes the
+logical structure of a document, made up of chapters, paragraphs, references
+etc.
+The second tagging process is the tagging of \emph{marked content items}
+(MCIs): this is the partition of the actual page contents into (disjoint)
+blocks that can be assigned to the proper structure element.
+Finally, as a separate process, some parts of the page can be marked as
+\emph{artifacts}, excluding their content from both content and structure
+tagging.
+
+When using this package, artifacts and structure elements (excluding
+paragraphs; see below) must be marked explicitly, while marked content items
+will be created, marked and assigned automatically.
+There is some (partial and optional) logic for automatically arranging
+structure elements in their correct hierarchical relation.
+
+The mechanism through which this is achieved uses attributes and whatsits for
+marking the contents and borders of SEs, MCIs and artifacts. At the end of the
+output routine, just before the pdf page is assembled, this information will be
+converted into markers inserted in the pdf stream.
+
+
+\section Marked content items % 1
+
+Content items are automatically delineated at page, artifact and structure
+element boundaries and terminated at paragraph or display skips.
+This should relieve you from any manual intervention. However, if you run into
+problems, the commands below might be helpful.
+
+Use of ⟦ActualText⟧, ⟦Alt⟧ or ⟦Lang⟧ attribute on MCIs, while allowed by the
+pdf standard, is not supported by this package. You should set these on the
+structure element instead.
+
+The begining and ending of a content item can be forced with
+⟦*\startcontentitem⟧ and ⟦*\stopcontentitem⟧, while ⟦*\ensurecontentitem⟧ will
+only open a new content item if you are currently outside any.
+If you need some part to be a single content item, that can use
+⟦*\startsinglecontentitem ... \stopsinglecontentitem⟧.
+This will disable all SE and MCI tagging inside.
+
+Tagging (both of MCIs and SEs) can be disabled and re-enabled locally with
+⟦*\stoptagging⟧ and ⟦*\starttagging⟧.
+
+
+\section Artifacts % 1
+
+Artifacts can be marked in two ways: with ⟦*\markartifact {type} {...}⟧ or with
+⟦*\startartifact {type} ... \stopartifact⟧.
+The ⟦type⟧ is written to the pdf attribute dictionary directly, so that if you
+need a subtype, you can write e.g.
+⟦\startartifact {Pagination /Subtype/Header} etc⟧.
+Do make sure your artifact does not contain a page break, as this will result
+in invalid output.
+
+Inside artifacts, other structure content markers will be ignored. Furthermore,
+this package makes sure artifacts are never part of marked content items,
+automatically closing and re-opening content items before and after the
+artifact.
+While the pdf standard does not require the latter, not enforcing this seems to
+confuse some pdf software.
+
+
+\section Document structure % 1
+
+Like artifacts, structure elements can be given as ⟦*\markelement {Tag} {...}⟧
+or ⟦*\startelement {Tag} ... \stopelement {Tag}⟧.
+Here, in many cases the ⟦\stopelement⟧ is optional: whenever opening an element
+would cause a nesting of incompatible ⟦Tag⟧s, the current element will be
+closed until such a nesting is possible.
+Thus, opening a ⟦TR⟧ will close the previous ⟦TR⟧, opening an ⟦H1⟧ will
+automatically close any open inline or block structure elements, opening
+a ⟦TOCI⟧ will close all elements up until the current ⟦TOC⟧ etc. etc.
+
+As a special case, the tags ⟦Document⟧, ⟦Part⟧, ⟦Art⟧, ⟦Sect⟧ and ⟦Div⟧ (and
+their aliases) will try and close all open structure elements up to and
+including the last structure element with the same tag.
+(An alias will of course only match the same alias.)
+
+While the above can greatly reduce the effort of tagging, the logic is neither
+perfect nor complete. You should always check the results in an external
+application.
+Particular care should be taken when ‘skipping’ structure levels: the sequence
+chapter – subsection – section will result in the section beneath the subsection.
+If you are in doubt about an element being closed already, you can use
+⟦*\ensurestopelement {Tag}⟧ instead of ⟦\stopelement⟧
+to prevent an error being raised.
+
+All these helpful features can also be disabled by setting
+⟦*\strictstructuretagging⟧ to a positive value. Then, every structure element
+will have to be closed by an explicit closing tag, as in xml.
+In this case, ⟦\stopelement⟧ and ⟦\ensurestopelement⟧ will be equivalent.
+
+By default, ⟦P⟧ structure elements are inserted automatically at the start of
+every paragraph. The tag can be changed with ⟦*\nextpartag {Tag}⟧; leaving the
+argument empty will prevent marking the next paragraph.
+Auto-marking paragraphs can be (locally) disabled or enabled by saying
+⟦*\markparagraphsfalse⟧ or ⟦*\markparagraphstrue⟧.
+
+
+\section Structure element aliases % 1
+
+New structure element tags can be created with
+⟦*\addstructuretype [options] Existing Alias⟧.
+This will create a new structure tag named ⟦Alias⟧ with the same properties as
+⟦Existing⟧.
+The properties can be modified by specifying ⟦options⟧: these will set values
+of the corresponding entry in the ⟦structure_types⟧ table (see the lua source
+file for this package).
+Any aliases you declare will be written to the pdf’s ⟦RoleMap⟧ only if they
+have actually been used.
+
+
+\section Manipulating the logical order % 1
+
+With the process outlined above, the logical order of structure elements has to
+coincide with the order in which the SEs are ‘digested’ by tex.
+This, together with the marked content items being assigned to structure
+elements in their order of appearance, lies behind the restriction that logical
+and processing orders should match.
+
+With manual intervention, this restriction can be relaxed somewhat.
+Issuing the pair ⟦*\savecurrentelement ... \continueelement⟧ will append the
+MCIs following ⟦\continueelement⟧ to the SE containing ⟦\savecurrentelement⟧.
+Since the assignments made here are global, this process cannot be nested;
+in more complicated situations you should therefore use
+⟦*\savecurrentelementto\name ... \continueelementfrom\name⟧ which restores the
+current SE from a named identifier ⟦\name⟧.
+
+
+\section Structure element options % 1
+
+The ⟦\startcontentitem⟧ command allows a few options that are not mentioned
+above: its full syntax is ⟦*\startcontentitem <options> {Tag}⟧.
+The three most useful options are ⟦alt⟧ for setting an alt-text (the ⟦/Alt⟧
+entry in the structure element dicionary), ⟦actual⟧ for a text replacement
+(⟦/ActualText⟧) and ⟦lang⟧ for the language (⟦/Lang⟧; see the next section).
+The alternative and actual texts can also be given after the fact with
+⟦*\setalttext{...}⟧ and ⟦*\setactualtext{...}⟧. These apply to the current
+structure element.
+
+Setting structure element attributes is not supported at this moment, except
+the placement attributes ⟦block⟧ and ⟦inline⟧, which can be given as options.
+
+
+\section Languages % 1
+
+If you do not specify a language code for a structure element, its language
+will be determined automatically.
+In order for this to work, you must associate a language code to every used
+language; you can do so with ⟦*\setlanguagecode name code⟧, where ⟦name⟧ must
+be an identifier used with ⟦\uselanguage {name}⟧ and ⟦code⟧ must be a two or
+three-letter language code, optionally followed by a dialect specification,
+a country code, and/or some other tag.
+Note that the language code is associated to a language \emph{name}, not to the
+numerical value of the ⟦\language⟧ parameter. This allows you to assign
+separate codes to dialects.
+
+There is a small set of default language code associations, which can be found
+in the file ⟦minim-languagecodes.lua⟧.
+It covers most languages defined by the hyph-utf8 package, as well as (due to
+their ubiquitous use) many ancient languages.
+
+An actual language change introduced by ⟦\uselanguage⟧ will not otherwise be
+acted upon by this package. Therefore, you will probably want to add
+⟦\startelement{Span}⟧ after every in-line invocation of ⟦\uselanguage⟧.
+
+You can set the document language with ⟦*\setdocumentlanguage language-code⟧.
+If unset, the language code associated with the first ⟦\uselanguage⟧ statement
+will be used, or else ⟦und⟧ (undetermined). The only function of the document
+language is that it is mentioned in the pdf catalog: it has no other influence.
+
+New languages can be declared with ⟦*\newnamedlanguage {name} {lhm} {rhm}⟧ and
+new dialects with ⟦*\newnameddialect {language name} {dialect name}⟧.
+Dialects will use the same hyphenation patterns (and will indeed have the same
+⟦\language⟧ value) as their parent languages; newly declared languages will
+start with no hyphenation patterns.
+Do note that you will probably also have to specify language codes for new
+languages or dialects.
+
+This package ensures the existence of the ⟦nohyph⟧, ⟦nolang⟧, ⟦uncoded⟧ and
+⟦undetermined⟧ dummy languages, all without hyphenation.
+
+
+\section Helper macros
+
+For marking up an entry in a table of contents, you can use the macro
+⟦*\marktocentry {dest} {lbl} {title} {filler} {pageno}⟧, which should insert all
+tags in the correct way. (The ⟦dest⟧ is a link destination and can be empty;
+the ⟦lbl⟧ is a section number and can also be empty.)
+
+For marking up tables, a whole array of helper macros is available. First,
+⟦*\marktable⟧ should be given \emph{before} the ⟦\halign⟧.
+Then, in the template, the first cell should start with ⟦*\marktablerow⟧ and
+each subsequent cell with ⟦*\marktablecell⟧.
+If your table starts with a header, insert ⟦*\marktableheader⟧ before it and
+⟦*\marktablebody⟧ after.
+Before a table footer, insert ⟦*\marktablefooter⟧.
+
+For greater convenience, insert just ⟦*\automarktable⟧ before the ⟦\halign⟧.
+Then you can leave out all the above commands (unless you ⟦\omit⟧ a template of
+course).
+This assumes the table has a single header row and more than one column.
+If you use a table for typesetting a list, you can use ⟦*\marktableaslist⟧
+instead, which marks the first column as list label and the second column as
+list item. Of course, this only works with two-column tables.
+
+Finally, you can auto-tag equations as formulas by specifing
+⟦*\autotagformulas⟧. This is especially dangerous, because sometimes equations
+are used for lay-out and should not be marked as such.
+After the latter command, auto-tagging can be switched off and on with
+⟦*\stopformulatagging⟧ and ⟦*\startformulatagging⟧.
+
+Both alt and actualtext of the ⟦Formula⟧ structure element will be set to the
+(unexpanded) source code of the equation, surrounded by the appropriate number
+of dollar signs.
+Furthermore, if ⟦\pdfaconformancelevel⟧ equals three, the source of the formula
+will be attached in an embedded file with the ⟦/AFRelation⟧ set to ⟦Source⟧.
+The name of this file can be changed by redefining ⟦*\formulafilename⟧ inside
+the equation.
+
+
+% 
+
+\endmanual
+
diff --git a/macros/luatex/generic/minim-pdf/minim-pdf.lua b/macros/luatex/generic/minim-pdf/minim-pdf.lua
new file mode 100644
index 0000000000..ffe845061c
--- /dev/null
+++ b/macros/luatex/generic/minim-pdf/minim-pdf.lua
@@ -0,0 +1,1114 @@
+
+local M = { }
+local alloc = require('minim-alloc')
+local cb = require('minim-callbacks')
+alloc.remember('minim-pdf')
+
+-- 1 helper functions
+
+local function insert_formatted(t, ...)
+ table.insert(t, string.format(...))
+end
+
+local function add_to_catalog(...)
+ pdf.setcatalog((pdf.getcatalog() or '') .. string.format(...) .. ' ')
+end
+
+local function add_to_names(...)
+ pdf.setnames((pdf.getnames() or '') .. string.format(...) .. ' ')
+end
+
+-- in-depth node list traversal
+-- returns current and parent node
+-- only dives into hbox and vbox nodes
+local function full_traverse(head)
+ return function(stack, last)
+ local next = last.next
+ if not next then
+ next, stack.box = table.unpack(table.remove(stack))
+ else
+ while next.list do
+ table.insert(stack, { next, stack.box })
+ next, stack.box = next.list, next
+ end
+ end
+ return next, stack.box
+ end, { { } }, { next = head }
+end
+
+-- re-encode to utf-16 and surround by <>
+local function pdf_hex_string(text)
+ local str = { [1] = '<feff' }
+ for i in text:utfvalues() do
+ if i < 0xFFFF then
+ insert_formatted(str, '%04x', i)
+ else
+ i = i - 0x10000
+ m = math.floor(i/0x400) + 0xD800
+ n = ( i % 0x400 ) + 0xDC00
+ insert_formatted(str, '%04x%04x' ,m, n)
+ end
+ end
+ table.insert(str, '>')
+ return table.concat(str,'')
+end
+
+-- try and produce a () string first, then fall back to <>
+function M.pdf_string(text)
+ local str = { '(' }
+ for i in text:utfvalues() do
+ if i > 0x7E then
+ return pdf_hex_string(text)
+ elseif i < 0x20 then
+ insert_formatted(str, '\\%03o', i)
+ elseif i == 0x28 or i == 0x29 or i == 0x5c then
+ insert_formatted(str, '\\%c', i)
+ else
+ insert_formatted(str, '%c', i)
+ end
+ end
+ table.insert(str, ')')
+ return table.concat(str,'')
+ end
+
+-- make available as \pdfstring{...}
+alloc.luadef('pdfstring', function() M.pdf_string(token.scan_string()) end)
+
+-- try and produce a date of the format (D:YYYYMMDD)
+function M.pdf_date(text)
+ local y, m, d = string.match(text, '^([12][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)$')
+ if not y then d, m, y = string.match(text, '^([0-9][0-9]?)-([0-9][0-9]?)-([12][0-9][0-9][0-9])$') end
+ if y then
+ return string.format('(D:%4d%02d%02d)', y, m, d)
+ else
+ return string.format('(D:%s)', text)
+ end
+end
+
+function M.options_scanner()
+ return { scanners = { },
+ add = function(this, name, scanner)
+ this.scanners[name] = scanner
+ return this
+ end,
+ keyword = function(this, name)
+ return this:add(name, function() return true end)
+ end,
+ int = function(this, name)
+ return this:add(name, token.scan_int)
+ end,
+ glue = function(this, name)
+ return this:add(name, token.scan_glue)
+ end,
+ dimen = function(this, name)
+ return this:add(name, token.scan_dimen)
+ end,
+ string = function(this, name)
+ return this:add(name, token.scan_string)
+ end,
+ argument = function(this, name)
+ return this:add(name, token.scan_argument)
+ end,
+ word = function(this, name)
+ return this:add(name, token.scan_word)
+ end,
+ list = function(this, name)
+ return this:add(name, token.scan_list)
+ end,
+ scan = function(this, defaults)
+ local res = defaults or { }
+ repeat
+ local matched = false
+ for name, scanner in pairs(this.scanners) do
+ if token.scan_keyword(name) then
+ matched, this.scanners[name] = true, nil
+ res[name] = scanner()
+ end
+ end
+ until not matched
+ return res
+ end
+ }
+end
+
+local function pdf_err(n, msg)
+ local m = node.new(8,16)
+ m.mode, m.token = 2, '%% Warning: '..msg
+ node.insert_after(n, n, m)
+end
+
+-- 1 infrastructure and bookkeeping
+
+local function tagging_enabled()
+ return tex.count['writedocumentstructure'] > 0
+end
+
+local function spaces_enabled()
+ return tex.count['writehyphensandspaces'] > 0
+end
+
+-- we start with the document at the top level
+local structure = { {
+ index = 1,
+ struct = 'Document',
+ children = { },
+} }
+
+-- the parent tree will be filled automatically and separately
+local parent_tree = { } -- list of list of structure elements
+
+-- Our four helper attributes
+local current_struct = alloc.new_attribute('tagging:current:se')
+local current_order = alloc.new_attribute('tagging:element:order')
+local current_status = alloc.new_attribute('tagging:current:status')
+local current_lang = alloc.new_attribute('tagging:current:language')
+
+local function current_structure_element()
+ return structure[tex.attribute[current_struct]]
+end
+
+-- Marker whatsits
+local marker_whatsit = alloc.new_whatsit('tagged pdf marker')
+
+local function make_whatsit(t, se, order)
+ local n = node.new(8, 8); -- user_defined
+ n.user_id, n.type = marker_whatsit, 108
+ n[current_struct] = se or tex.attribute['tagging:current:se']
+ n[current_order] = order or tex.attribute['tagging:element:order']
+ n.value = t
+ return n
+end
+
+alloc.luadef('tagging:mci:content', function()
+ node.write(make_whatsit{ what = 'content' })
+end, 'protected')
+alloc.luadef('tagging:mci:markstart', function()
+ node.write(make_whatsit{ what = 'mci_start' })
+end, 'protected')
+alloc.luadef('tagging:mci:markstop', function()
+ node.write(make_whatsit{ what = 'mci_stop' })
+end, 'protected')
+alloc.luadef('tagging:art:markstart', function()
+ node.write(make_whatsit{ what = 'art_start', it = token.scan_string() })
+end, 'protected')
+alloc.luadef('tagging:art:markstop', function()
+ node.write(make_whatsit{ what = 'art_stop' })
+end, 'protected')
+
+-- 1 structure type table and type aliases
+
+local structure_types = alloc.saved_table('structure types', {
+ -- grouping types that may carry a bookmark
+ Document = { type = 'section' },
+ Part = { type = 'section' },
+ Art = { type = 'section' },
+ Sect = { type = 'section' },
+ Div = { type = 'group' },
+ -- grouping elements
+ BlockQuote = { type = 'group' },
+ Caption = { type = 'group' },
+ TOC = { type = 'group', contains = { TOC=1, TOCI=1, Caption=1 } },
+ TOCI = { contains = { Lbl=1, Reference=1, P=1, NonStruct=1, TOC=1 }, contained = { TOC=1 } },
+ Index = { type = 'group' },
+ NonStruct = { type = 'none' }, -- meaningless grouping
+ -- illustration elements
+ Figure = { type = 'inline', needsalt=1 },
+ Formula = { type = 'inline', needsalt=1 },
+ Form = { type = 'inline', needsalt=1 },
+ -- block level structure elements (BLSE)
+ P = { type = 'block' },
+ H = { type = 'block' },
+ H1 = { type = 'block' }, -- for nonhierarchical tagging (do not use?)
+ H2 = { type = 'block' }, -- __________ „ __________
+ H3 = { type = 'block' }, -- __________ „ __________
+ H4 = { type = 'block' }, -- __________ „ __________
+ H5 = { type = 'block' }, -- __________ „ __________
+ H6 = { type = 'block' }, -- __________ „ __________
+ L = { type = 'block', contains = { LI=1, Caption=1 } },
+ LI = { contains = { Lbl=1, LBody=1 }, contained = { L=1 } },
+ LBody = { type = 'contain', contained = { LI=1 } },
+ Lbl = { type = 'block', contained = { Note=1, Bibentry=1, LI=1, TOCI=1 } },
+ -- tables (neither BLSE nor ILSE)
+ Table = { type = 'block', contains = { TR=1, THead=1, TBody=1, TFoot=1, Caption=1 } },
+ THead = { contains = { TR=1 }, contained = { Table=1 } },
+ TBody = { contains = { TR=1 }, contained = { Table=1 } },
+ TFoot = { contains = { TR=1 }, contained = { Table=1 } },
+ TR = { contains = { TH=1, TD=1 }, contained = { THead=1, TBody=1, TFoot=1 } },
+ TH = { type = 'contain', contained = { TR=1 } }, -- header cell
+ TD = { type = 'contain', contained = { TR=1 } }, -- data cell
+ -- inline structure elements ILSE
+ Span = { type = 'inline' },
+ Quote = { type = 'inline' },
+ Note = { type = 'inline' },
+ Reference = { type = 'inline' },
+ BibEntry = { type = 'inline' },
+ Code = { type = 'inline' },
+ Link = { type = 'inline' }, -- contains link objects
+ Annot = { type = 'inline' }, -- contains other annotations
+ -- ruby/warichu
+ Ruby = { type = 'inline', contains = { RB=1, RT=1, RP=1 } },
+ RB = { contains = { }, contained = { Ruby=1 } },
+ RT = { contains = { }, contained = { Ruby=1 } },
+ RP = { contains = { }, contained = { Ruby=1 } },
+ Warichu = { type = 'inline', contains = { WT=1, WP=1 } },
+ WT = { contains = { }, contained = { Warichu=1 } },
+ WP = { contains = { }, contained = { Warichu=1 } },
+})
+
+local structure_type_compatibility = {
+ none = { none=1, section=1, group=1, block=1, inline=1, contain=1 },
+ section = { none=1, section=1, group=1, block=1 },
+ group = { none=1, group=1, block=1 },
+ block = { none=1, inline=1 },
+ inline = { none=1, inline=1 },
+ contain = { none=1, inline=1, block=1, group=1 },
+}
+
+local function check_structure_compatibility(parent, child, childtype)
+ local p, c = structure_types[parent], structure_types[child]
+ childtype = childtype or c.type
+ if p.contains then
+ return p.contains[child]
+ elseif c.contained then
+ return c.contained[parent]
+ elseif childtype == 'section' and parent == child then
+ return false
+ else
+ return structure_type_compatibility[p.type][childtype]
+ end
+end
+
+local function determine_parent_node(current, se)
+ local c = current
+ if tex.count['strictstructuretagging'] > 0 then
+ c = check_structure_compatibility(c.struct, se.struct, c.type) and c
+ else
+ while c and not check_structure_compatibility(c.struct, se.struct, c.type) do
+ c = c.parent
+ end
+ end
+ if not c then
+ alloc.err('Structure type mismatch: %s in %s', se.struct, current.struct)
+ end
+ return c or current
+end
+
+function M.add_structure_alias(stype, alias, settings)
+ local t, attr = { }, { }
+ local info = structure_types[stype] or
+ alloc.err('Unknown structure type ‘%s’', stype) and {}
+ for k, v in pairs(info) do t[k] = v end
+ for k,v in pairs(t.attributes or {}) do attr[k] = v end -- copy to new table
+ t.attributes = nil
+ for k, v in pairs(settings or {}) do t[k] = v end -- may re-set attributes
+ for k,v in pairs(t.attributes or {}) do attr[k] = v end
+ if #attr > 0 then t.attributes = attr end
+ for _, s in pairs(structure_types) do
+ if s.contains and s.contains[stype] then s.contains[alias] = 1 end
+ if s.contained and s.contained[stype] then s.contained[alias] = 1 end
+ end
+ t.aliasof, t.inuse = t.aliasof or stype, false
+ structure_types[alias] = t
+end
+
+alloc.luadef('struct:addalias', function()
+ local settings = load(token.scan_string())()
+ local stype = token.scan_string()
+ local alias = token.scan_string()
+ M.add_structure_alias(stype, alias, settings)
+end, 'protected')
+
+
+-- 1 writing the document structure
+
+local function stable_sort_on_order_field(unsorted)
+ -- n.b. ‘unsorted’ is likely to closely resemble two concatenated
+ -- monotonously increasing lists.
+ local sorted, oldsorted = { unsorted[1] }, nil
+ local i, next, c = 2, unsorted[2], nil
+ while next do
+ oldsorted, sorted = sorted, { }
+ for _, e in ipairs(oldsorted) do
+ c = e.order
+ while next and next.order < c do
+ table.insert(sorted, next);
+ i = i+1; next = unsorted[i]
+ end
+ table.insert(sorted, e);
+ end
+ while next and c <= next.order do
+ c = next.order
+ table.insert(sorted, next);
+ i = i+1; next = unsorted[i]
+ end
+ end
+ return sorted
+end
+
+local function format_K_array(se)
+ local res = { '[' }
+ for _, k in ipairs(stable_sort_on_order_field(se.children)) do
+ se.mainpage = se.mainpage or k.pageobj
+ if k.mcid then
+ if se.mainpage == k.pageobj then
+ insert_formatted(res, '%d', k.mcid)
+ else
+ insert_formatted(res, '<< /Type/MCR /Pg %d 0 R /MCID %d >>', k.pageobj, k.mcid)
+ end
+ elseif k.children then
+ insert_formatted(res, '%s 0 R', k.objnum)
+ else
+ if se.mainpage == k.pageobj then
+ insert_formatted(res, '<< /Type/OBJR /Obj %d 0 R >>', k.objnum)
+ else
+ insert_formatted(res, '<< /Type/OBJR /Obj %d 0 R /Pg %s 0 R >>', k.objnum, k.pageobj)
+ end
+ end
+ end
+ table.insert(res, ']')
+ return table.concat(res, ' ')
+end
+
+local function make_rolemap()
+ local aliases = { }
+ for k, v in pairs(structure_types) do
+ if v.aliasof and v.inuse and v.aliasof ~= k then
+ insert_formatted(aliases, '/%s/%s', k, v.aliasof)
+ end
+ end
+ if #aliases > 0 then
+ return '\n/RoleMap << ' .. table.concat(aliases,' ') .. ' >>'
+ end
+ return ''
+end
+
+local function write_structure()
+ if #structure == 1 then return end
+ -- reserve object numbers, prepare for writing
+ local root_obj, parent_tree_obj = pdf.reserveobj(), pdf.reserveobj()
+ structure[1].parent = { objnum = root_obj }
+ for _, se in ipairs(structure) do
+ if not se.hidden then se.objnum = pdf.reserveobj() end
+ end
+ -- update the document catalog
+ add_to_catalog('/MarkInfo << /Marked true >>')
+ add_to_catalog('/StructTreeRoot %s 0 R', root_obj)
+ -- write the structure tree root
+ pdf.immediateobj(root_obj, string.format(
+ '<< /Type/StructTreeRoot /K %d 0 R /ParentTree %d 0 R%s >>',
+ structure[1].objnum, parent_tree_obj, make_rolemap()))
+ -- write structure elements
+ for _, se in ipairs(structure) do
+ if not se.hidden then
+ local res = { '<<' }
+ insert_formatted(res, '/Type/StructElem /S/%s /P %d 0 R', se.struct, se.parent.objnum)
+ if se.lang and se.lang ~= se.parent.lang then insert_formatted(res, '/Lang (%s)', se.lang) end
+ if se.alt then insert_formatted(res, '/Alt %s', M.pdf_string(se.alt)) end
+ if se.actual then insert_formatted(res, '/ActualText %s', M.pdf_string(se.actual)) end
+ if #se.children > 0 then insert_formatted(res, '\n/K %s', format_K_array(se)) end
+ if se.mainpage then insert_formatted(res, '/Pg %d 0 R', se.mainpage) end
+ if se.attributes then
+ table.insert(res, '/A <<')
+ for k,v in pairs(se.attributes) do insert_formatted(res, '/%s %s', k, v) end
+ table.insert(res, '>>')
+ end
+ if se.files then
+ table.insert(res, '/AF [')
+ for _, fs in ipairs(se.files) do
+ insert_formatted(res, '%d 0 R', fs)
+ end
+ table.insert(res, ']')
+ end
+ table.insert(res, '>>')
+ pdf.immediateobj(se.objnum, table.concat(res, ' '))
+ end
+ end
+ -- write the parent tree
+ local res = { '<< /Nums [' }
+ for i, parents in ipairs(parent_tree) do
+ -- i, parents = StructParents index + 1, list of structure elems
+ if type(parents) == 'number' then
+ table.insert(res, string.format('%d %d 0 R', i-1, structure[parents].objnum))
+ else
+ local entry = { }
+ insert_formatted(entry, '%d [', i-1)
+ for _, p in ipairs(parents) do
+ insert_formatted(entry, '%d 0 R', p.objnum)
+ end
+ table.insert(entry, ']')
+ table.insert(res, table.concat(entry, ' '))
+ end
+ end
+ table.insert(res, '] >>')
+ pdf.immediateobj(parent_tree_obj, table.concat(res, '\n'))
+end
+
+-- 1 languages
+
+-- name|code ↦ nr & nr ↦ code
+local language_codes = alloc.saved_table('language codes')
+
+function M.set_language_code(name, code)
+ if not language_codes[code] then
+ table.insert(language_codes, code)
+ language_codes[code] = #language_codes
+ end
+ language_codes[name] = language_codes[code]
+end
+
+if not language_codes.sumerian then
+ local defaults = require('minim-languagecodes')
+ for name, code in pairs(defaults) do
+ M.set_language_code(name, code)
+ end
+end
+
+-- \setlanguagecode dutch nl_BE
+alloc.luadef('setlanguagecode', function()
+ M.set_language_code(token.scan_string(), token.scan_string())
+end, 'protected')
+
+function M.get_language_code(name_or_code)
+ local nr = language_codes[name_or_code]
+ return nr and language_codes[nr] or name_or_code
+end
+
+function M.get_current_language_code()
+ return language_codes[tex.attribute['tagging:current:language']]
+end
+
+function M.set_document_language(code)
+ structure[1].lang = code
+end
+
+alloc.luadef('setdocumentlanguage', function()
+ M.set_document_language(M.get_language_code(token.scan_string()))
+end, 'protected')
+
+-- \uselanguage patch; provide default document language
+-- and associate names with numbers
+alloc.luadef('minim:apply:language:code', function()
+ local name = token.scan_string()
+ local nr = language_codes[name] or alloc.err('No language code known for ‘%s’', name) and 1
+ if not structure[1].lang then M.set_document_language(language_codes[nr]) end
+ tex.sprint(nr)
+end)
+
+local function write_language()
+ add_to_catalog('/Lang (%s)', structure[1].lang or 'und')
+end
+
+-- 1 marking structure elements
+
+local function get_ancestor_of_type(se, stype)
+ while se and se.struct ~= stype do
+ if se.level == -1000 then return end
+ se = se.parent
+ end
+ return se and se.parent
+end
+
+function M.close_structure_node(stype, raiseerror)
+ local strict = tex.count['strictstructuretagging'] > 0
+ local current, open = current_structure_element(), false
+ if strict then
+ open = current.struct == stype and current.parent
+ else
+ open = get_ancestor_of_type(current, stype)
+ end
+ if open then
+ tex.setattribute(current_struct, open.index)
+ elseif strict then
+ alloc.err('Cannot close structure element %s: %s still open', stype, current.struct)
+ elseif raiseerror then
+ alloc.err('Cannot close structure element %s: no open tag found', stype)
+ end
+end
+
+alloc.luadef('tagging:stopelement', function()
+ M.close_structure_node(token.scan_string(), true)
+end, 'protected')
+
+alloc.luadef('tagging:ensurestopelement', function()
+ M.close_structure_node(token.scan_string(), false)
+end, 'protected')
+
+function M.open_structure_node(n)
+ local info = structure_types[n.struct]
+ if not info then
+ alloc.err('Unknown structure type %s replaced by NonStruct', n.struct)
+ n.struct, info = 'NonStruct', structure_types.NonStruct
+ end
+ info.inuse = true
+ if info.attributes then
+ n.attributes = n.attributes or { }
+ for k,v in pairs(info.attributes) do
+ n.attributes[k] = n.attributes[k] or v
+ end
+ end
+ if n.block then
+ n.type = 'block'
+ n.attributes = n.attributes or { }
+ n.attributes.Placement = '/Block'
+ elseif n.inline then
+ n.type = 'inline'
+ n.attributes = n.attributes or { }
+ n.attributes.Placement = '/Inline'
+ end
+ n.index = #structure + 1
+ n.children = { }
+ -- order and parent can be forced (needed for asynchronous elements)
+ n.order = n.order or tex.getattribute(current_order)
+ n.parent = (n.parent and structure[n.parent])
+ or determine_parent_node(current_structure_element(), n)
+ table.insert(structure, n)
+ if n.lang then
+ n.lang = get_language_code(n.lang)
+ else
+ local lang = tex.getattribute(current_lang)
+ n.lang = language_codes[lang]
+ end
+ if not n.hidden then table.insert(n.parent.children, n) end
+ if not n.async then tex.setattribute(current_struct, #structure) end
+end
+
+alloc.luadef('tagging:startelement', function()
+ local s = M.options_scanner()
+ :string('type') -- 'section', 'group', 'block' etc.
+ :argument('alt')
+ :argument('actual')
+ :string('lang')
+ :keyword('block')
+ :keyword('inline')
+ :scan()
+ s.struct = token.scan_string()
+ M.open_structure_node(s)
+end, 'protected')
+
+alloc.luadef('tagging:alt', function()
+ current_structure_element().alt = token.scan_string()
+end)
+
+alloc.luadef('tagging:actual', function()
+ current_structure_element().actual = token.scan_string()
+end)
+
+
+-- 1 marking content items
+
+-- All content items should be explicitly opened and closed, per page, by the
+-- late_lua nodes constructed beneath. After the page is finished, the MCIDs
+-- will be stored in the parent tree entry associated to the page.
+
+-- For the insertion of these late_lua nodes, see the next section; this one
+-- only deals with the bookkeeping mechanics.
+
+-- Note that we do not nest artifacts within marked content items. This would
+-- be allowed by the spec, but confuses some pdf readers (e.g. poppler).
+
+local mcid_list, pageobj
+
+local function clear_page_tagging_parameters()
+ mcid_list, pageobj = { }, nil
+ _open_mci_node_ = function (se_num, order)
+ pageobj = pageobj or pdf.getpageref(status.total_pages + 1)
+ local se = structure[se_num]
+ pdf.print(string.format('/%s <</MCID %d>> BDC ', se.struct, #mcid_list))
+ table.insert(se.children, { mcid = #mcid_list, order = order, pageobj = pageobj })
+ table.insert(mcid_list, se)
+ -- unhide hidden parents (done here to preserve the correct order)
+ if se.hidden then
+ table.insert(se.parent.children, se)
+ se.hidden = false
+ end
+ end
+end
+clear_page_tagging_parameters()
+
+local function new_open_mci_node(se, order)
+ local n = node.new(8,7) -- late_lua
+ n.token = string.format('_open_mci_node_(%d, %d)', se, order)
+ return n
+end
+
+local function new_open_art_node(atype)
+ local n = node.new(8,16) -- pdf_literal
+ n.mode, n.token = 1, string.format('/Artifact << /Type/%s >> BDC', atype)
+ return n
+end
+
+local function new_emc_node()
+ local n = node.new(8,16) -- pdf_literal
+ n.mode, n.token = 1, 'EMC'
+ return n
+end
+
+cb.register('finish_pdfpage', function(shippingout)
+ if shippingout then
+ local pageattr = string.gsub(pdf.getpageattributes() or '', ' */StructParents %d+', '' )
+ if #mcid_list > 0 then
+ pageattr = pageattr..string.format('/StructParents %d', #parent_tree)
+ table.insert(parent_tree, mcid_list)
+ end
+ pdf.setpageattributes(pageattr)
+ clear_page_tagging_parameters()
+ end
+end)
+
+-- 1 content item boundaries and linking
+
+function M.mark_content_items(box)
+ local se, order, open
+ local start_node, end_node, parent_node
+ local pageobj = pdf.getpageref(status.total_pages + 1)
+ -- inserting mci markers
+ local insert_tags = function(end_parent)
+ if not open then return end
+ parent_node.list = node.insert_before(parent_node.list, start_node, open)
+ node.insert_after(end_parent.list, end_node, new_emc_node())
+ start_node, end_node, parent_node, open = nil, nil, nil, nil
+ end
+ local start_content = function(n, b)
+ se, order = n[current_struct], n[current_order]
+ start_node, end_node, parent_node = n, n, b
+ end
+ -- traversing all nodes
+ for n, b in full_traverse(box) do
+ local marker = n.id == 8 and n.subtype == 8
+ and n.user_id == marker_whatsit and n.value
+ if marker and marker.what == 'art_start' then
+ -- first we start with marking artifacts
+ insert_tags(b);
+ start_content(n, b)
+ open = new_open_art_node(marker.it)
+ elseif marker and marker.what == 'art_stop' then
+ end_node = n
+ insert_tags(b);
+ elseif n[current_status] then
+ -- inside artifact, do nothing
+ elseif n.id == 8 and n.subtype == 19 then -- pdf_start_link
+ -- then attach links to Link elements
+ local _se, _order = n[current_struct], n[current_order]
+ local link = structure[_se]
+ if link.struct == 'Link' then
+ table.insert(link.children, { objnum = n.objnum, order = _order, pageobj = pageobj })
+ n.link_attr = string.format('%s /StructParent %d', n.link_attr, #parent_tree)
+ table.insert(parent_tree, _se)
+ else
+ alloc.err('Link found outside Link structure element (see pdf)')
+ pdf_err(n, 'unmarked link')
+ end
+ elseif marker and marker.what == 'mci_start' then
+ -- explicit start and stop nodes
+ insert_tags(b);
+ start_content(n, b)
+ open = new_open_mci_node(se, order)
+ elseif marker and marker.what == 'mci_stop' then
+ end_node = end_node and n; insert_tags(b)
+ elseif n.id == 2 or n.id == 29 -- rule, glyph or content marker
+ or marker and marker.what == 'content' then
+ -- now see if we need to intervene between content nodes
+ local _se, _order = n[current_struct], n[current_order]
+ if n.id == 2 and (n.width == 0 or n.height == 0 and n.depth == 0) then
+ -- ignore invisible rules
+ elseif not _se or not _order then
+ -- unmarkable content should not be possible (but is)
+ alloc.err('Unmarkable content on page %d (see pdf)', status.total_pages + 1)
+ pdf_err(n, 'possible unmarked content')
+ elseif se ~= _se or order ~= _order or not end_node then
+ -- new content item on changing attributes
+ insert_tags(b);
+ start_content(n, b)
+ open = new_open_mci_node(se, order)
+ else
+ -- nothing changed: continue current mci
+ end_node = n
+ end
+ elseif n.id == 12 and n.subtype > 2 and n.subtype < 8 then
+ -- parskip or displayskip always closes mci
+ insert_tags(b)
+ end
+ end
+ -- close the last mci
+ if start_node and start_node.user_id and start_node.value
+ and start_node.value.what == 'art_start' then
+ alloc.err('Page %d ends with a broken artifact', status.total_pages+1)
+ end
+ insert_tags(box)
+end
+
+cb.register('pre_shipout', function(nr)
+ if tagging_enabled() then
+ M.mark_content_items(tex.box[nr])
+ end
+end)
+
+-- 1 destinations
+
+local dest_count = alloc.new_count('link dest count')
+local function new_dest_name()
+ local dest_nr = tex.count[dest_count] + 1
+ tex.setcount('global', dest_count, dest_nr)
+ return 'hyper:dest:'..dest_nr
+end
+
+local function last_dest_name()
+ return 'hyper:dest:'..tex.count[dest_count]
+end
+
+local function write_new_dest()
+ local name = new_dest_name()
+ tex.sprint(string.format('\\nameddestination{%s}', name))
+ return name
+end
+
+-- make available as \newdestinationname, \lastdestinationname
+alloc.luadef('newdestinationname', function() tex.sprint(new_dest_name()) end)
+alloc.luadef('lastdestinationname', function() tex.sprint(last_dest_name()) end)
+
+-- 1 bookmarks
+
+-- start with a dummy top-level bookmark
+local bookmarks = { { count = 0 } }
+structure[1].bookmark = bookmarks[1]
+
+local function write_bookmarks()
+ if #bookmarks == 1 then return end
+ -- reserve objects in a row
+ for i=1, #bookmarks do
+ bookmarks[i].outline_obj = pdf.reserveobj()
+ end
+ -- write outlines object
+ add_to_catalog('/Outlines %s 0 R', bookmarks[1].outline_obj)
+ pdf.immediateobj(bookmarks[1].outline_obj, string.format(
+ ' <</Type /Outlines /First %s 0 R /Last %s 0 R /Count %s >> ',
+ bookmarks[2].outline_obj, bookmarks[1].last.outline_obj, #bookmarks - 1))
+ -- write bookmark objects
+ for i=2, #bookmarks do
+ local bm, res = bookmarks[i], { }
+ insert_formatted(res, '<< /Title %s\n/Parent %s 0 R /Dest (%s)', M.pdf_string(bm.title),
+ bm.parent and bm.parent.outline_obj or bookmarks[1].outline_obj, bm.dest)
+ if bm.next then insert_formatted(res, '/Next %s 0 R', bm.next.outline_obj) end
+ if bm.prev then insert_formatted(res, '/Prev %s 0 R', bm.prev.outline_obj) end
+ if bm.struct and bm.struct.objnum then
+ insert_formatted(res, '/SE %s 0 R', bm.struct.objnum)
+ end
+ if bm.count > 0 then
+ insert_formatted(res, '/First %s 0 R /Last %s 0 R /Count %s%s',
+ bm.first.outline_obj, bm.last.outline_obj, bm.open and '' or '-', bm.count)
+ end
+ pdf.immediateobj(bm.outline_obj, table.concat(res,'\n')..' >>')
+ end
+end
+
+function M.add_bookmark(bm)
+ local se = current_structure_element()
+ bm.parent, bm.count = false, 0
+ bm.dest = bm.dest or write_new_dest()
+ se.bookmark, bm.struct = bm, se
+ -- find and update the parent bookmarks
+ local p = se.parent
+ while p do
+ local pbm = p.bookmark
+ if pbm then
+ if not bm.parent then
+ if pbm.last then pbm.last.next = bm end
+ bm.parent, bm.prev = pbm, pbm.last
+ pbm.first, pbm.last = pbm.first or bm, bm
+ end
+ -- update the count until the first closed bookmark
+ pbm.count = pbm.count + 1
+ p = pbm.open and pbm.parent
+ else
+ p = p.parent
+ end
+ end
+ table.insert(bookmarks, bm)
+end
+
+alloc.luadef('outline', function()
+ local s = M.options_scanner()
+ :keyword('open')
+ :keyword('closed') -- default; ignored
+ :string('dest')
+ :scan()
+ s.title = token.scan_string()
+ M.add_bookmark(s)
+end, 'protected')
+
+
+-- 1 associated files
+
+local attached_files = { }
+local function write_fileattachments()
+ if #attached_files > 0 then
+ table.sort(attached_files, function(a,b) return a.name < b.name end)
+ local afs = { '/AF [' }
+ local nms = { '<< /Names [' }
+ for _, t in ipairs(attached_files) do
+ insert_formatted(afs, '%d 0 R', t.objnum)
+ insert_formatted(nms, '%s %d 0 R', t.name, t.objnum)
+ end
+ table.insert(afs, ']')
+ table.insert(nms, '] >>')
+ add_to_catalog(table.concat(afs, ' '))
+ local efs = pdf.immediateobj(table.concat(nms, ' '))
+ add_to_names('/EmbeddedFiles %d 0 R', efs)
+ end
+end
+
+function M.embed_file(t)
+ -- default moddate
+ if not t.moddate then
+ tex.runtoks(function() tex.print('\\csname minim:makedefaultmoddate\\endcsname') end)
+ local moddate = tex.toks['embeddedfiles:moddate']
+ if moddate ~= '' then t.moddate = moddate end
+ end
+ -- embed the file
+ local attr = { '/Type/EmbeddedFile' }
+ if t.mimetype then insert_formatted(attr, '/Subtype/%s', string.gsub(t.mimetype, '/', '#2F')) end
+ if t.moddate then insert_formatted(attr, '/Params << /ModDate %s >>', M.pdf_date(t.moddate)) end
+ local ef = pdf.obj {
+ immediate = true,
+ compresslevel = t.uncompressed and 0 or nil,
+ type = 'stream',
+ file = t.file and kpse.find_file(t.file),
+ string = t.string,
+ attr = table.concat(attr, ' ') }
+ -- write the filespec
+ local res = { '<< /Type/Filespec' }
+ insert_formatted(res, '/F %s /UF %s /EF << /F %d 0 R /UF %d 0 R >>', t.name, t.name, ef, ef)
+ if t.desc then insert_formatted(res, '/Desc %s', M.pdf_string(t.desc)) end
+ if t.relation then insert_formatted(res, '/AFRelationship /%s', t.relation) end
+ table.insert(res, '>>')
+ local fs = pdf.immediateobj(table.concat(res, ' '))
+ -- (globally) attach the file
+ return fs, ef
+end
+
+alloc.luadef('embedfile', function()
+ local t = M.options_scanner()
+ :string('desc')
+ :string('file')
+ :string('string')
+ :string('mimetype')
+ :string('moddate')
+ :string('relation')
+ :string('name')
+ :keyword('global')
+ :keyword('uncompressed')
+ :scan()
+ if not t.name then
+ t.name = t.file or aloc.err('No name specified for embedded file stream')
+ end
+ t.name = M.pdf_string(t.name or '(unnamed)')
+ local fs, ef = M.embed_file(t, t.global)
+ -- where to attach?
+ if t.global then
+ table.insert(attached_files, { name = t.name, objnum = fs } )
+ elseif tagging_enabled() then
+ local se = current_structure_element()
+ se.files = se.files or { }
+ table.insert(se.files, fs)
+ else
+ alloc.err('In untagged pdf, \\embedfile must be used with ‘global’ keyword')
+ table.insert(attached_files, { name = t.name, objnum = fs } )
+ end
+end, 'protected')
+
+
+-- 1 hyphenation
+
+function M.mark_discretionaries(head, gc)
+ if not spaces_enabled() then return end
+ for disc in node.traverse_id(7, head) do
+ if disc.subtype ~= 2 then -- ‘automatic’ (exclude explicit hyphens)
+ local pre, post, replace = disc.pre, disc.post, disc.replace
+ local se, order = disc[current_struct], disc[current_order]
+ -- get the replacement text
+ local actual = { }
+ for c in node.traverse_id(29, replace) do
+ table.insert(actual, c.char)
+ end
+ -- special case: a single hyphen
+ if #actual == 0 and pre.char and pre.char == 0x2D then
+ actual = '­' -- soft hyphen U+00AD
+ elseif #actual > 0 then
+ actual = string.utfcharacter(table.unpack(actual))
+ else
+ goto continue
+ end
+ -- reserve a structure element (but hide it)
+ M.open_structure_node { hidden = true, async = true,
+ struct = 'Span', parent = se, order = order, actual = actual }
+ -- apply the new se to pre and post
+ for n, _ in full_traverse(pre) do n[current_struct] = #structure end
+ for n, _ in full_traverse(past) do n[current_struct] = #structure end
+ end
+ ::continue::
+ end
+ return true
+end
+
+cb.register('pre_linebreak_filter', M.mark_discretionaries)
+
+-- 1 spaces
+
+local space_attr = alloc.new_attribute('space insertion marker')
+
+function M.mark_spaces(head, gc)
+ if not spaces_enabled() then return end
+ for g in node.traverse_id(12, head) do -- glue
+ if g.prev and g.subtype == 13 or g.subtype == 14 then -- (x)spaceskip
+ local p = g.prev
+ p[space_attr] = p.id == 29 and p.font
+ or g.next and g.next.id == 29 and g.next.font
+ or font.current()
+ end
+ end
+ return true
+end
+
+local function create_space(n)
+ local s = node.new(29) -- glyph
+ s.char, s.font, s.attr = 0x20, n[space_attr], n.attr
+ local b = node.hpack(s)
+ b.width, b.height, b.depth = 0, 0, 0
+ return b
+end
+
+local function insert_spaces(head)
+ for n in node.traverse(head) do
+ if n[space_attr] then
+ node.insert_after(head, n, create_space(n))
+ end
+ end
+end
+
+function M.insert_spaces(head, gc)
+ if not spaces_enabled() then return end
+ for line in node.traverse_id(0, head) do
+ insert_spaces(line.head)
+ end
+ return true
+end
+
+function M.mark_and_insert_spaces(head, gc, ...)
+ if not spaces_enabled() then return end
+ M.mark_spaces(head, gc)
+ insert_spaces(head)
+ return true
+end
+
+cb.register('pre_linebreak_filter', M.mark_spaces)
+cb.register('post_linebreak_filter', M.insert_spaces)
+cb.register('hpack_filter', M.mark_and_insert_spaces)
+
+-- 1 page labels
+
+local pagelabels = { }
+
+function M.page_labels(abs_nr, nr, style, prefix)
+ table.insert(pagelabels, { start = abs_nr, st = nr, s = style, p = prefix })
+end
+
+local pagelabel_styles = {
+ Decimal = 'D',
+ Roman = 'R',
+ roman = 'r',
+ Alphabetic = 'A',
+ alphabetic = 'a',
+ none = false }
+
+alloc.luadef('setpagelabels', function()
+ local prefix = token.scan_keyword('prefix') and token.scan_string()
+ local style = token.scan_word()
+ local nr = token.scan_int()
+ local st = pagelabel_styles[style]
+ if st == nil then alloc.err('Unknown page label style »%s«', style) end
+ M.page_labels(status.total_pages, nr, st, prefix)
+end, 'protected')
+
+local function write_pagelabels()
+ if #pagelabels == 0 then return end
+ if pagelabels[1].start ~= 0 then
+ table.insert(pagelabels, 1, { start = 0, st = 1, s = 'D' })
+ end
+ local res = { '/PageLabels << /Nums [' }
+ for _, l in ipairs(pagelabels) do
+ local s, p = l.s and '/S/'..l.s, l.p and ' /P '..M.pdf_string(l.p)
+ table.insert(res, string.format('%d << /St %d %s%s >>', l.start, l.st, s or '', p or ''))
+ end
+ table.insert(res, ']')
+ add_to_catalog(table.concat(res, ' '))
+end
+
+-- 1 output intents
+
+local output_intents = { }
+
+function M.add_output_intent(t)
+ table.insert(output_intents, t)
+end
+
+local function write_output_intents()
+ if #output_intents == 0 then return end
+ local res = { '[' }
+ for _, oi in ipairs(output_intents) do
+ local p = pdf.obj { type = 'stream',
+ file = kpse.find_file(oi.path),
+ compresslevel = 9,
+ attr = string.format('/N %d', oi.N),
+ immediate = true }
+ insert_formatted(res, '<< /Type/OutputIntent /DestOutputProfile %d 0 R', p)
+ insert_formatted(res, '/S/%s /OutputConditionIdentifier (%s)', oi.subtype, oi.id)
+ if oi.info then insert_formatted(res, '/Info (%s)', oi.info) end
+ if oi.condition then insert_formatted(res, '/OutputCondition (%s)', oi.condition) end
+ if oi.registry then insert_formatted(res, '/RegistryName (%s)', oi.registry) end
+ table.insert(res, '>>')
+ end
+ table.insert(res, ']')
+ local objnum = pdf.immediateobj(table.concat(res, ' '))
+ add_to_catalog('/OutputIntents %d 0 R', objnum)
+end
+
+function M.add_default_rgb_output_intent(t)
+ t = t or {}
+ M.add_output_intent {
+ subtype = t.subtype or 'GTS_PDFA1',
+ info = t.info or 'IEC 61966-2.1 Default RGB colour space - sRGB',
+ condition = t.condition,
+ registry = 'http://www.iev.ch',
+ id = 'IEC sRGB',
+ N = 3, path = 'sRGB.icc' }
+end
+
+function M.add_default_cmyk_output_intents(t)
+ t = t or {}
+ M.add_output_intent {
+ subtype = t.subtype or 'GTS_PDFA1',
+ info = t.info or 'FOGRA39L Coated',
+ condition = t.condition or 'FOGRA39L Coated',
+ registry = 'http://www.fogra.org',
+ id = 'Offset printing, according to ISO 12647-2:2004/Amd 1, OFCOM, paper type 1 or 2 = coated art, 115 g/m2, tone value increase curves A (CMY) and B (K)',
+ N = 4, path = 'FOGRA39L_coated.icc' }
+end
+
+alloc.luadef('minim:default:rgb:profile', function() M.add_default_rgb_output_intent() end)
+alloc.luadef('minim:default:cmyk:profile', function() M.add_default_cmyk_output_intent() end)
+
+--
+
+cb.register ('finish_pdffile', function()
+ if tagging_enabled() then
+ write_language()
+ write_structure()
+ end
+ write_bookmarks()
+ write_pagelabels()
+ write_output_intents()
+ write_fileattachments()
+end)
+
+return M
+
diff --git a/macros/luatex/generic/minim-pdf/minim-pdf.pdf b/macros/luatex/generic/minim-pdf/minim-pdf.pdf
new file mode 100644
index 0000000000..b460bdf4ed
--- /dev/null
+++ b/macros/luatex/generic/minim-pdf/minim-pdf.pdf
Binary files differ
diff --git a/macros/luatex/generic/minim-pdf/minim-pdf.tex b/macros/luatex/generic/minim-pdf/minim-pdf.tex
new file mode 100644
index 0000000000..f8075ae6e4
--- /dev/null
+++ b/macros/luatex/generic/minim-pdf/minim-pdf.tex
@@ -0,0 +1,351 @@
+
+\ifdefined\minimpdfloaded
+ \message{(skipped)}
+ \expandafter\endinput\fi
+\chardef\minimpdfloaded = \catcode`\:
+\catcode`\: = 11
+
+% Abbreviations used throughout this document:
+% se structure element
+% mci marked content item
+
+\newcount \writedocumentstructure
+\newcount \writehyphensandspaces
+\newcount \strictstructuretagging
+
+\writedocumentstructure = 0
+\writehyphensandspaces = 1
+\strictstructuretagging = 0
+
+% 1 the attributes
+
+\input minim-alloc
+\input minim-hooks
+
+% By three attributes do we determine the document structure.
+%
+% One for marking the current structure element:
+% - is the index of the lua-side se table
+% - assignments are always local
+\newattribute \tagging:current:se \tagging:current:se = 1
+%
+% One for ordering children of structure elements:
+% - assignments are always global
+% - should generally increase monotously
+% - should change (increase) at every se boundary
+\newattribute \tagging:element:order \tagging:element:order = 1
+%
+% One for marking the status:
+% - assignments are generally local
+% - if set, disables tagging and content marking
+\newattribute \tagging:current:status \tagging:current:status = \unset
+%
+% A fourth attribute keeps track of the current language
+% - assignments are local
+% - sets language of structure elements
+\newattribute \tagging:current:language \tagging:current:language = \language
+
+\directlua { require('minim-pdf') }
+
+% 1 artifacts and content items
+
+% \stoptagging ... \starttagging
+% disables marking structure elements
+\newif\iftagging:enabled \tagging:enabledtrue
+\protected\def\starttagging{\tagging:enabledtrue
+ \ifnum1=\tagging:current:status
+ \tagging:current:status\unset\fi}
+\protected\def\stoptagging{\tagging:enabledfalse
+ \ifnum\unset=\tagging:current:status
+ \tagging:current:status1\relax\fi}
+
+% \markartifact {Layout} {...}
+% \startartifact {Pagination /Subtype/Header} ... \stopartifact
+\long\def\markartifact#1#2{\startartifact{#1}#2\stopartifact}
+\protected\def\startartifact{\begingroup\stoptagging
+ \tagging:mci:incr\tagging:art:markstart}
+\protected\def\stopartifact{\tagging:art:markstop\tagging:mci:incr\endgroup}
+
+% \startcontentitem ... \stopcontentitem
+\protected\def\startcontentitem{\iftagging:enabled\tagging:mci:incr\tagging:mci:markstart\fi}
+\protected\def\stopcontentitem{\iftagging:enabled\tagging:mci:markstop\tagging:mci:incr\fi}
+
+% \startsinglecontentitem ... \stopsinglecontentitem
+\protected\def\startsinglecontentitem{\begingroup \startcontentitem\stoptagging}
+\protected\def\stopsinglecontentitem{\endgroup\stopcontentitem}
+
+% \ensurecontentitem
+\protected\def\ensurecontentitem{\iftagging:enabled\tagging:mci:content\fi}
+\protected\def\tagging:mci:incr{\global\advance\tagging:element:order1\relax}
+
+% 1 structure elements
+
+% \savecurrentelement ... \continueelement
+% \savecurrentelementto\name ... \continueelementfrom\name
+\protected\def\savecurrentelementto#1{\global\chardef#1\tagging:current:se}
+\protected\def\continueelementfrom#1{\tagging:current:se#1\tagging:mci:incr}
+\def\savecurrentelement{\savecurrentelementto\tagging:saved:se}
+\def\continueelement{\continueelementfrom\tagging:saved:se}
+
+% \markelement {Tag} {...}
+% \startelement {Tag} ... \stopelement {Tag}
+% \ensurestopelement {Tag}
+\long\protected\def\markelement#1#2{\iftagging:enabled
+ \startelement{#1}#2\stopelement{#1}\else#2\fi}
+\protected\def\startelement{\iftagging:enabled \tagging:mci:incr
+ \expandafter\tagging:startelement\else
+ \expandafter\tagging:ignore\fi}
+\protected\def\stopelement{\iftagging:enabled \tagging:mci:incr
+ \expandafter\tagging:stopelement\else
+ \expandafter\tagging:ignore\fi}
+\protected\def\ensurestopelement{\iftagging:enabled \tagging:mci:incr
+ % n.b. this can cause problems if you skip levels
+ \expandafter\tagging:ensurestopelement\else
+ \expandafter\tagging:ignore\fi}
+\def\tagging:ignore#1#{\ignore}
+
+% \addstructuretype [options] Existing Alias
+\protected\def\addstructuretype{\withoptions[]\addstructure:type}
+\def\addstructure:type[#1]{\struct:addalias{return {#1}}}
+
+% \setalttext {...} and \setactualtext {...}
+\protected\def\setalttext{\iftagging:enabled
+ \expandafter\tagging:alt\fi}
+\protected\def\setactualtext{\iftagging:enabled
+ \expandafter\tagging:actual\fi}
+
+
+% 1 auto-marking paragraphs
+
+% \nextpartag {H}
+% \nextpartag {} % no tag inserted for next paragraph
+% \markparagraphs(true|false)
+\newif\ifmarkparagraphs \markparagraphstrue
+\newtoks\nextpartag \nextpartag{P}
+\toksapp\minim:ateverypar{\iftagging:enabled \ifmarkparagraphs
+ \expandafter\ifx\expandafter\relax\the\nextpartag\relax\else
+ \startelement{\the\nextpartag}\fi
+ \nextpartag{P}\fi \fi}
+
+% 1 tagging helper macros
+
+% \marktocentry {destination}{label}{title}{filler}{page}
+\def\marktocentry#1#2#3#4#5{%
+ \ifx\marktocentry#1\marktocentry
+ \def\marktocentry:link##1{##1}\else
+ \def\marktocentry:link##1{\hyperlink dest{#1}##1\endlink}\fi
+ \markelement{TOCI}{\nextpartag{}\quitvmode
+ \ifx\marktocentry#2\marktocentry\else
+ \markelement{Lbl}{\marktocentry:link{#2}}\fi
+ \markelement{Reference}{\marktocentry:link{#3%
+ \ifx\marktocentry#4\marktocentry\else
+ \markartifact{Layout}{#4}\fi#5}}}}
+
+% \marktable \halign {\marktablerow#&\marktablecell#\cr
+% \marktableheader
+% Header & cells \cr
+% \marktablebody
+% ... & ... \cr ...
+% \marktablefooter
+% ... & ... \cr ... }
+%
+\def\marktable{\startelement{Table}%
+ \def\tagging:cell{TD}}
+\def\marktableheader{%
+ \noalign{\gdef\tagging:cell{TH}%
+ \startelement{THead}%
+ \savecurrentelementto\tagging:tpart}}
+\def\marktablebody{%
+ \noalign{\gdef\tagging:cell{TD}%
+ \startelement{TBody}%
+ \savecurrentelementto\tagging:tpart}}
+\def\marktablefooter{%
+ \noalign{\startelement{TFoot}%
+ \savecurrentelementto\tagging:tpart}}
+\def\marktablerow{
+ \unless\ifdefined\tagging:tpart
+ \startelement{TBody}%
+ \savecurrentelementto\tagging:tpart\fi
+ \continueelementfrom\tagging:tpart
+ \startelement{TR}%
+ \savecurrentelementto\tagging:row
+ \startelement{\tagging:cell}}
+\def\marktablecell{%
+ \continueelementfrom\tagging:row
+ \startelement{\tagging:cell}}
+
+% \automarktable \halign ... { ... }
+\def\automarktable#1#{\marktable
+ \def\tagging:table{\tagging:mktrow{#1}}%
+ \afterassignment\tagging:table
+ \let\tagging:tmp= }
+\def\tagging:mktrow#1#2&#3\cr{\iftrue
+ \tagging:mktcell{#1\bgroup\marktablerow#2}\fi
+ #3&\tagging:mktrow&\cr}
+\def\tagging:mktcell#1#2\fi#3&{\fi
+ \ifx\tagging:mktrow#3\tagging:mkthdr{#1}\fi
+ \ifx\tagging:mktrow#3\tagging:mktrow
+ \tagging:mktcell{#1&}\else
+ \tagging:mktcell{#1&\marktablecell#3}\fi}
+\def\tagging:mkthdr#1#2\cr#3\cr{\fi#1\cr
+ \marktableheader#3\cr\marktablebody}
+\def\tagging:fi{\fi}
+
+% \marktableaslist \halign ... { ... }
+\def\marktableaslist#1#{\startelement{L}%
+ \def\tagging:table{\tagging:mktlist{#1}}%
+ \afterassignment\tagging:table
+ \let\tagging:tmp= }
+\def\tagging:mktlist#1#2&{#1\bgroup
+ \startelement{LI}\savecurrentelement
+ \startelement{Lbl}#2&\continueelement
+ \startelement{LBody}}
+
+% \autotagformulas
+% \stopformulatagging ... \startformulatagging
+% \formulafilename
+\newif \iftagging:indisplay
+\newif \iftagging:toplevelmath \tagging:toplevelmathtrue
+\newif \iftagging:formulaenabled
+\let\startformulatagging = \tagging:formulaenabledtrue
+\let\stopformulatagging = \tagging:formulaenabledfalse
+\newcount \tagging:formulanr
+\def\formulafilename{unnumbered-equation-\the\tagging:formulanr}
+\def\autotagformulas{\startformulatagging
+ \everymath\expandafter{\the\everymath
+ \tagging:formula\tagging:startformula}%
+ \everydisplay\expandafter{\the\everydisplay \tagging:indisplaytrue
+ \tagging:formula\tagging:startdisplay}}
+\def\tagging:formula#1{%
+ \iftagging:enabled \iftagging:formulaenabled \iftagging:toplevelmath
+ \tagging:toplevelmathfalse #1\fi\fi\fi}
+\def\tagging:startformula\fi\fi\fi#1${\tagging:makeformula{#1}{$}}
+\def\tagging:startdisplay\fi\fi\fi#1$${\tagging:makeformula{#1}{$$}}
+\def\tagging:makeformula#1#2{\fi\fi\fi
+ \global\advance\tagging:formulanr1\relax
+ \startelement\iftagging:indisplay block\else inline\fi{Formula}%
+ \setalttext{\tagging:formulasource{#1}}%
+ \setactualtext{\tagging:formulasource{#1}}%
+ \ifnum3=\pdfaconformancelevel
+ \embedfile mimetype text/x-tex
+ relation Source desc {Equation source}
+ name {\formulafilename.tex}
+ string {\tagging:formulasource{#1}}\fi
+ \scantextokens{#1}#2}
+\def\tagging:formulasource#1{%
+ $\iftagging:indisplay$\fi
+ \unexpanded{#1}%
+ $\iftagging:indisplay$\fi}
+
+% 1 hyperlinks
+
+% provided by the lua module:
+% \newdestinationname
+% \lastdestinationname
+
+% \nameddestination {name}
+\def\nameddestination{\ifhmode\expandafter\linkdest:h\else\expandafter\linkdest:v\fi}
+\def\linkdest:h#1{\vadjust pre{\linkdest:v{#1}}}
+\def\linkdest:v#1{\pdfextension dest name {#1} xyz\nobreak}
+
+% \hyperlink dest {name} ... \endlink
+% \hyperlink url {url} ... \endlink
+\protected\def\endlink{\pdfextension endlink\stopelement{Link}\relax}
+\protected\def\startlink{\startelement{Link}\pdfextension startlink}
+\def\hyperlink#1#{\quitvmode\hyperlink:rmspace#1 \hyperlink:rmspace}
+\def\hyperlink:rmspace#1 #2\hyperlink:rmspace{%
+ \startlink attr {\minim:linkattr}%
+ \csname hyperlink:#1\endcsname}
+\def\hyperlink:dest#1{user {/Subtype/Link /F 4 /A <</S/GoTo /D (#1)>>}}
+\def\hyperlink:url#1{user {/Subtype/Link /F 4 /A <</S/URI /URI (#1)>>}}
+\def\minim:linkattr{/Border [0 0 0]}
+
+% 1 languages
+
+% provided by the lua module:
+% \setdocumentlanguage {name or code}
+% \setlanguagecode {name} {code}
+% \minim:apply:language:code{name} → index
+
+% patch in language codes to \uselanguage
+\ifcsname uselanguage@hook\endcsname
+ \expandafter\let
+ \expandafter\minim:uselanguagehook
+ \lastnamedcs \fi
+\expandafter\edef\csname uselanguage@hook\endcsname#1{%
+ % tagging support
+ \noexpand\tagging:current:language
+ \noexpand\minim:apply:language:code{#1}%
+ % previous definitions
+ \ifdefined\minim:uselanguagehook
+ \noexpand\minim:uselanguagehook{#1}\fi}
+
+% \newnamedlanguage {name} {lhm} {rhm}
+\def\newnamedlanguage#1#2#3{%
+ \expandafter\newlanguage\csname lang@#1\endcsname
+ \expandafter\chardef\csname lhm@#1\endcsname=#2\relax
+ \expandafter\chardef\csname rhm@#1\endcsname=#3\relax
+ \csname lu@texhyphen@loaded@\the\csname lang@#1\endcsname\endcsname}
+
+% \newnameddialect {language} {dialect}
+\def\newnameddialect#1#2{%
+ \expandafter\chardef\csname lang@#2\endcsname\csname lang@#1\endcsname
+ \expandafter\chardef\csname lhm@#2\endcsname\csname lhm@#1\endcsname
+ \expandafter\chardef\csname rhm@#2\endcsname\csname rhm@#1\endcsname}
+
+% and provide several dummy languages
+\ifcsname lang@nohyph\endcsname \else
+ \newnamedlanguage {nohyph} 1 1 \fi
+\ifcsname lang@nolang\endcsname \else
+ \newnameddialect {nohyph} {nolang} \fi
+\ifcsname lang@uncoded\endcsname \else
+ \newnameddialect {nohyph} {uncoded} \fi
+\ifcsname lang@undetermined\endcsname \else
+ \newnameddialect {nohyph} {undetermined} \fi
+
+% 1 embedded files
+
+% provided by the lua module
+% \embedfile <options>
+
+% \setembeddedfilesmodate { yyyy-mm-dd }
+\newtoks\setembeddedfilesmoddate
+ \setembeddedfilesmoddate{}
+\newtoks\embeddedfiles:moddate
+\def\minim:makedefaultmoddate{%
+ \expandafter\edef\expandafter
+ \minim:tmp\expandafter{\the\setembeddedfilesmoddate}%
+ \embeddedfiles:moddate\expandafter{\minim:tmp}}
+
+% 1 declarations of pdf/a conformance
+
+\newcount \pdfaconformancelevel
+\pdfaconformancelevel = 0
+
+% \pdfalevel 2b
+\def\pdfalevel#1#2{%
+ \global\pdfaconformancelevel=#1\relax
+ \ifcsname minim:pdfa:#1#2\endcsname \lastnamedcs\else
+ \errmessage{Unknown pdf/a standard pdf/a-#1}\fi}
+
+\def\minim:pdfasettings#1#2#3{%
+ \pdfvariable minorversion #1\relax
+ \minim:default:rgb:profile
+ \if#2A\writedocumentstructure1\fi
+ \input minim-xmp
+ \setmetadata pdfaid:conformance{#2}%
+ \setmetadata pdfaid:part{#3}}
+
+\expandafter\def\csname minim:pdfa:1a\endcsname{\minim:pdfasettings 4A1}
+\expandafter\def\csname minim:pdfa:1b\endcsname{\minim:pdfasettings 4B1}
+\expandafter\def\csname minim:pdfa:2a\endcsname{\minim:pdfasettings 7A2}
+\expandafter\def\csname minim:pdfa:2b\endcsname{\minim:pdfasettings 7B2}
+\expandafter\def\csname minim:pdfa:2u\endcsname{\minim:pdfasettings 7U2}
+\expandafter\def\csname minim:pdfa:3a\endcsname{\minim:pdfasettings 7A3}
+\expandafter\def\csname minim:pdfa:3b\endcsname{\minim:pdfasettings 7B3}
+\expandafter\def\csname minim:pdfa:3u\endcsname{\minim:pdfasettings 7U3}
+
+% 
+
+\catcode`\: = \minimpdfloaded
+
diff --git a/macros/luatex/generic/minim/EUPL-1.2-EN.txt b/macros/luatex/generic/minim/EUPL-1.2-EN.txt
new file mode 100644
index 0000000000..4153cd3775
--- /dev/null
+++ b/macros/luatex/generic/minim/EUPL-1.2-EN.txt
@@ -0,0 +1,287 @@
+ EUROPEAN UNION PUBLIC LICENCE v. 1.2
+ EUPL © the European Union 2007, 2016
+
+This European Union Public Licence (the ‘EUPL’) applies to the Work (as defined
+below) which is provided under the terms of this Licence. Any use of the Work,
+other than as authorised under this Licence is prohibited (to the extent such
+use is covered by a right of the copyright holder of the Work).
+
+The Work is provided under the terms of this Licence when the Licensor (as
+defined below) has placed the following notice immediately following the
+copyright notice for the Work:
+
+ Licensed under the EUPL
+
+or has expressed by any other means his willingness to license under the EUPL.
+
+1. Definitions
+
+In this Licence, the following terms have the following meaning:
+
+- ‘The Licence’: this Licence.
+
+- ‘The Original Work’: the work or software distributed or communicated by the
+ Licensor under this Licence, available as Source Code and also as Executable
+ Code as the case may be.
+
+- ‘Derivative Works’: the works or software that could be created by the
+ Licensee, based upon the Original Work or modifications thereof. This Licence
+ does not define the extent of modification or dependence on the Original Work
+ required in order to classify a work as a Derivative Work; this extent is
+ determined by copyright law applicable in the country mentioned in Article 15.
+
+- ‘The Work’: the Original Work or its Derivative Works.
+
+- ‘The Source Code’: the human-readable form of the Work which is the most
+ convenient for people to study and modify.
+
+- ‘The Executable Code’: any code which has generally been compiled and which is
+ meant to be interpreted by a computer as a program.
+
+- ‘The Licensor’: the natural or legal person that distributes or communicates
+ the Work under the Licence.
+
+- ‘Contributor(s)’: any natural or legal person who modifies the Work under the
+ Licence, or otherwise contributes to the creation of a Derivative Work.
+
+- ‘The Licensee’ or ‘You’: any natural or legal person who makes any usage of
+ the Work under the terms of the Licence.
+
+- ‘Distribution’ or ‘Communication’: any act of selling, giving, lending,
+ renting, distributing, communicating, transmitting, or otherwise making
+ available, online or offline, copies of the Work or providing access to its
+ essential functionalities at the disposal of any other natural or legal
+ person.
+
+2. Scope of the rights granted by the Licence
+
+The Licensor hereby grants You a worldwide, royalty-free, non-exclusive,
+sublicensable licence to do the following, for the duration of copyright vested
+in the Original Work:
+
+- use the Work in any circumstance and for all usage,
+- reproduce the Work,
+- modify the Work, and make Derivative Works based upon the Work,
+- communicate to the public, including the right to make available or display
+ the Work or copies thereof to the public and perform publicly, as the case may
+ be, the Work,
+- distribute the Work or copies thereof,
+- lend and rent the Work or copies thereof,
+- sublicense rights in the Work or copies thereof.
+
+Those rights can be exercised on any media, supports and formats, whether now
+known or later invented, as far as the applicable law permits so.
+
+In the countries where moral rights apply, the Licensor waives his right to
+exercise his moral right to the extent allowed by law in order to make effective
+the licence of the economic rights here above listed.
+
+The Licensor grants to the Licensee royalty-free, non-exclusive usage rights to
+any patents held by the Licensor, to the extent necessary to make use of the
+rights granted on the Work under this Licence.
+
+3. Communication of the Source Code
+
+The Licensor may provide the Work either in its Source Code form, or as
+Executable Code. If the Work is provided as Executable Code, the Licensor
+provides in addition a machine-readable copy of the Source Code of the Work
+along with each copy of the Work that the Licensor distributes or indicates, in
+a notice following the copyright notice attached to the Work, a repository where
+the Source Code is easily and freely accessible for as long as the Licensor
+continues to distribute or communicate the Work.
+
+4. Limitations on copyright
+
+Nothing in this Licence is intended to deprive the Licensee of the benefits from
+any exception or limitation to the exclusive rights of the rights owners in the
+Work, of the exhaustion of those rights or of other applicable limitations
+thereto.
+
+5. Obligations of the Licensee
+
+The grant of the rights mentioned above is subject to some restrictions and
+obligations imposed on the Licensee. Those obligations are the following:
+
+Attribution right: The Licensee shall keep intact all copyright, patent or
+trademarks notices and all notices that refer to the Licence and to the
+disclaimer of warranties. The Licensee must include a copy of such notices and a
+copy of the Licence with every copy of the Work he/she distributes or
+communicates. The Licensee must cause any Derivative Work to carry prominent
+notices stating that the Work has been modified and the date of modification.
+
+Copyleft clause: If the Licensee distributes or communicates copies of the
+Original Works or Derivative Works, this Distribution or Communication will be
+done under the terms of this Licence or of a later version of this Licence
+unless the Original Work is expressly distributed only under this version of the
+Licence — for example by communicating ‘EUPL v. 1.2 only’. The Licensee
+(becoming Licensor) cannot offer or impose any additional terms or conditions on
+the Work or Derivative Work that alter or restrict the terms of the Licence.
+
+Compatibility clause: If the Licensee Distributes or Communicates Derivative
+Works or copies thereof based upon both the Work and another work licensed under
+a Compatible Licence, this Distribution or Communication can be done under the
+terms of this Compatible Licence. For the sake of this clause, ‘Compatible
+Licence’ refers to the licences listed in the appendix attached to this Licence.
+Should the Licensee's obligations under the Compatible Licence conflict with
+his/her obligations under this Licence, the obligations of the Compatible
+Licence shall prevail.
+
+Provision of Source Code: When distributing or communicating copies of the Work,
+the Licensee will provide a machine-readable copy of the Source Code or indicate
+a repository where this Source will be easily and freely available for as long
+as the Licensee continues to distribute or communicate the Work.
+
+Legal Protection: This Licence does not grant permission to use the trade names,
+trademarks, service marks, or names of the Licensor, except as required for
+reasonable and customary use in describing the origin of the Work and
+reproducing the content of the copyright notice.
+
+6. Chain of Authorship
+
+The original Licensor warrants that the copyright in the Original Work granted
+hereunder is owned by him/her or licensed to him/her and that he/she has the
+power and authority to grant the Licence.
+
+Each Contributor warrants that the copyright in the modifications he/she brings
+to the Work are owned by him/her or licensed to him/her and that he/she has the
+power and authority to grant the Licence.
+
+Each time You accept the Licence, the original Licensor and subsequent
+Contributors grant You a licence to their contributions to the Work, under the
+terms of this Licence.
+
+7. Disclaimer of Warranty
+
+The Work is a work in progress, which is continuously improved by numerous
+Contributors. It is not a finished work and may therefore contain defects or
+‘bugs’ inherent to this type of development.
+
+For the above reason, the Work is provided under the Licence on an ‘as is’ basis
+and without warranties of any kind concerning the Work, including without
+limitation merchantability, fitness for a particular purpose, absence of defects
+or errors, accuracy, non-infringement of intellectual property rights other than
+copyright as stated in Article 6 of this Licence.
+
+This disclaimer of warranty is an essential part of the Licence and a condition
+for the grant of any rights to the Work.
+
+8. Disclaimer of Liability
+
+Except in the cases of wilful misconduct or damages directly caused to natural
+persons, the Licensor will in no event be liable for any direct or indirect,
+material or moral, damages of any kind, arising out of the Licence or of the use
+of the Work, including without limitation, damages for loss of goodwill, work
+stoppage, computer failure or malfunction, loss of data or any commercial
+damage, even if the Licensor has been advised of the possibility of such damage.
+However, the Licensor will be liable under statutory product liability laws as
+far such laws apply to the Work.
+
+9. Additional agreements
+
+While distributing the Work, You may choose to conclude an additional agreement,
+defining obligations or services consistent with this Licence. However, if
+accepting obligations, You may act only on your own behalf and on your sole
+responsibility, not on behalf of the original Licensor or any other Contributor,
+and only if You agree to indemnify, defend, and hold each Contributor harmless
+for any liability incurred by, or claims asserted against such Contributor by
+the fact You have accepted any warranty or additional liability.
+
+10. Acceptance of the Licence
+
+The provisions of this Licence can be accepted by clicking on an icon ‘I agree’
+placed under the bottom of a window displaying the text of this Licence or by
+affirming consent in any other similar way, in accordance with the rules of
+applicable law. Clicking on that icon indicates your clear and irrevocable
+acceptance of this Licence and all of its terms and conditions.
+
+Similarly, you irrevocably accept this Licence and all of its terms and
+conditions by exercising any rights granted to You by Article 2 of this Licence,
+such as the use of the Work, the creation by You of a Derivative Work or the
+Distribution or Communication by You of the Work or copies thereof.
+
+11. Information to the public
+
+In case of any Distribution or Communication of the Work by means of electronic
+communication by You (for example, by offering to download the Work from a
+remote location) the distribution channel or media (for example, a website) must
+at least provide to the public the information requested by the applicable law
+regarding the Licensor, the Licence and the way it may be accessible, concluded,
+stored and reproduced by the Licensee.
+
+12. Termination of the Licence
+
+The Licence and the rights granted hereunder will terminate automatically upon
+any breach by the Licensee of the terms of the Licence.
+
+Such a termination will not terminate the licences of any person who has
+received the Work from the Licensee under the Licence, provided such persons
+remain in full compliance with the Licence.
+
+13. Miscellaneous
+
+Without prejudice of Article 9 above, the Licence represents the complete
+agreement between the Parties as to the Work.
+
+If any provision of the Licence is invalid or unenforceable under applicable
+law, this will not affect the validity or enforceability of the Licence as a
+whole. Such provision will be construed or reformed so as necessary to make it
+valid and enforceable.
+
+The European Commission may publish other linguistic versions or new versions of
+this Licence or updated versions of the Appendix, so far this is required and
+reasonable, without reducing the scope of the rights granted by the Licence. New
+versions of the Licence will be published with a unique version number.
+
+All linguistic versions of this Licence, approved by the European Commission,
+have identical value. Parties can take advantage of the linguistic version of
+their choice.
+
+14. Jurisdiction
+
+Without prejudice to specific agreement between parties,
+
+- any litigation resulting from the interpretation of this License, arising
+ between the European Union institutions, bodies, offices or agencies, as a
+ Licensor, and any Licensee, will be subject to the jurisdiction of the Court
+ of Justice of the European Union, as laid down in article 272 of the Treaty on
+ the Functioning of the European Union,
+
+- any litigation arising between other parties and resulting from the
+ interpretation of this License, will be subject to the exclusive jurisdiction
+ of the competent court where the Licensor resides or conducts its primary
+ business.
+
+15. Applicable Law
+
+Without prejudice to specific agreement between parties,
+
+- this Licence shall be governed by the law of the European Union Member State
+ where the Licensor has his seat, resides or has his registered office,
+
+- this licence shall be governed by Belgian law if the Licensor has no seat,
+ residence or registered office inside a European Union Member State.
+
+Appendix
+
+‘Compatible Licences’ according to Article 5 EUPL are:
+
+- GNU General Public License (GPL) v. 2, v. 3
+- GNU Affero General Public License (AGPL) v. 3
+- Open Software License (OSL) v. 2.1, v. 3.0
+- Eclipse Public License (EPL) v. 1.0
+- CeCILL v. 2.0, v. 2.1
+- Mozilla Public Licence (MPL) v. 2
+- GNU Lesser General Public Licence (LGPL) v. 2.1, v. 3
+- Creative Commons Attribution-ShareAlike v. 3.0 Unported (CC BY-SA 3.0) for
+ works other than software
+- European Union Public Licence (EUPL) v. 1.1, v. 1.2
+- Québec Free and Open-Source Licence — Reciprocity (LiLiQ-R) or Strong
+ Reciprocity (LiLiQ-R+).
+
+The European Commission may update this Appendix to later versions of the above
+licences without producing a new version of the EUPL, as long as they provide
+the rights granted in Article 2 of this Licence and protect the covered Source
+Code from exclusive appropriation.
+
+All other changes or additions to this Appendix require the production of a new
+EUPL version.
diff --git a/macros/luatex/generic/minim/README b/macros/luatex/generic/minim/README
new file mode 100644
index 0000000000..4a16b4e801
--- /dev/null
+++ b/macros/luatex/generic/minim/README
@@ -0,0 +1,40 @@
+Version: 2021/1.0
+
+SUMMARY
+
+This is a modern plain format for the LuaTeX engine, adding improved low-level
+support for many LuaTeX extensions and newer PDF features. While it can be
+used as drop-in replacement for plain TeX, it probably is most useful as
+a basis for your own formats.
+
+Most features included in the format are provided by separate packages that
+can be used on their own; see the packages
+
+ minim-mp for mplib (MetaPost) support
+ minim-math for unicode mathematics
+ minim-pdf for creating Tagged PDF
+ minim-xmp for XMP (metadata) inclusion
+
+This package proper only contains their shared lowest-level programming
+interface, together with their combined format.
+
+
+DOCUMENTATION
+
+In order to obtain the typeset manual of this package, simply say:
+
+ luatex minim.doc
+
+For the sake of completeness, this manual also includes the documentation of
+the packages mentioned above.
+
+
+COPYING
+
+(c) 2021 Esger Renkema
+
+These files may be distributed under the terms of the European Union Public
+Licence (EUPL) version 1.2 or later. A copy can be obtained at:
+
+https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+
diff --git a/macros/luatex/generic/minim/minim-alloc.doc b/macros/luatex/generic/minim/minim-alloc.doc
new file mode 100644
index 0000000000..fa08988bf4
--- /dev/null
+++ b/macros/luatex/generic/minim/minim-alloc.doc
@@ -0,0 +1,216 @@
+
+\input minim-doc.sty
+
+This chapter describes the programming helper modules on which all the above
+modules depend. It mainly concerns register allocation, callback management and
+format file inclusion.
+
+They can be loaded separately by saying ⟦\input minim-alloc⟧;
+thereafter, you can use ⟦local M = require('minim-alloc')⟧ to access the lua
+interface.
+In this chapter, when discussing lua functions, you are assumed to have issued
+the latter statement, so that the table ⟦M⟧ refers to the contents of this
+module.
+
+The callback-related code lives in a separate file that can and must be loaded
+separately as ⟦local C = require('minim-callbacks')⟧. This is the only file in
+this collection that does not itself depend on the minim-alloc module.
+
+There is a large functional overlap between this module and the ltluatex
+package. You can use both at the same time, however, and the order in which you
+load both packages should not matter.
+
+\section Format files
+
+A major motivation for writing this module (and not, instead, depending on
+⟦ltluatex.tex⟧) is the ability to write lua-heavy code that can be safely
+included in format files.
+For this purpose, the register allocation functions described below allow
+ensuring that the allocation is made only once.
+
+Apart from registers, you need only do two more things to make your code format
+file safe. The first is saying ⟦*M.remember('your-file.lua')⟧ somewhere,
+anywhere. This will mark your file for inclusion in the format. At the start of
+every job, all remembered files will be executed (in order) and their return
+values will be stored to be retrieved whenever you say ⟦require('your-file')⟧.
+Note that while this feature does not improve speed in any meaningful way, it
+will ensure the lua file used by the format is identical to the one used to
+create it.
+
+It does mean, however, that your file may be executed twice: once when building
+the format and once when the format is used. In most cases (e.g. callback
+registration) this is exactly what you want.
+Sometimes however, you may need to store variable (configurable) data in the
+format file.
+You can do this by saying
+⟦*local t = M.saved_table('identifier', default-table)⟧.
+This will retrieve the table from the format file if possible; otherwise, it
+will return ⟦default-table⟧ and mark it to be saved to the format. A missing
+second argument is equivalent to an empty table.
+Saved tables may only contain (arbitrary but non-cyclic nestings of) tables,
+numbers and strings.
+
+\section Register allocation
+
+For allocating the new luatex registers, you can use the following:
+⟦*\newfunction⟧,
+⟦*\newattribute⟧,
+⟦*\newwhatsit⟧,
+⟦*\newluabytecode⟧,
+⟦*\newluachunkname⟧,
+⟦*\newcatcodetable⟧ and
+⟦*\newuserrule⟧.
+Note the one difference with ltluatex, which has ⟦\newluafunction⟧ instead.
+(The reason for this is that ltluatex, instead of a more sensible method, uses
+this macro for determining whether it has been read before.)
+Internally, the very same counts are used for keeping track of register
+allocation as in ltluatex.
+Their effect should therefore be identical in all circumstances, with one
+exception:
+no bounds checking is performed on any allocation macro defined by minim.
+Please do not go and use more than sixty five thousand different whatsits.
+
+All the above and all traditional registers can be allocated from within lua as
+well, using ⟦*M.new_count('name')⟧, ⟦*M.new_whatsit('name')⟧ etc. All return
+the allocated number. The (optional) string ⟦name⟧ prevents the same allocation
+from being made twice: if another register has been retrieved with the same
+name, the number of that register will be returned. You will need this when you
+want to allow your lua code to be included in a format file; it has nothing to
+do with the tex-side ⟦\countdef⟧ and the like.
+
+For the new allocation macros listed above and (as a special case) for
+⟦\newbox⟧,
+after saying ⟦\newwhatsit\name⟧, the call ⟦M.new_whatsit('name')⟧ will return
+the number of ⟦\name⟧. For the other (older) allocation macros, this is not the
+case. After all, because of the ⟦\countdef⟧ etc. included in ⟦\newcount⟧ etc.
+you can already use ⟦tex.count['name']⟧ etc. for retrieving tex-side
+allocations from lua. The exceptions to this are ⟦\newbox⟧, which is why it is
+included with the new macros, and ⟦\newattribute⟧, for which you can use both
+methods.
+
+Besides ⟦\newluachunkname\name⟧, you can also use
+⟦*\setluachunkname \name {actual name}⟧
+to enter the value of the name directly.
+
+Finally, for the registers for which etex defines a local allocation macro (and
+for those only), you can use ⟦*M.local_count()⟧ etc. These allocation functions
+take no parameters.
+
+
+\section Callbacks
+
+As noted at the beginning of this chapter, the callback functions are only
+available after you say ⟦local C = require('minim-callbacks')⟧.
+
+This module will override the primitive callback functions with its own
+⟦*C.register⟧, ⟦*C.find⟧ and ⟦*C.list⟧; the original primitive functions can be
+found in the ⟦*C.primitives⟧ table.
+
+The simple function of this module is allowing multiple callbacks to co-exist.
+Different callbacks call for different implementations, and some callbacks can
+only contain a single function.
+Any callbacks that are already assigned before loading this module will be
+preserved; this includes the ltluatex callback mechanism if it has already been
+installed.
+
+You can create your own callbacks with ⟦*C.new_callback(name, type)⟧. The ⟦type⟧
+should be one of the types mentioned below or ⟦'single'⟧ for callbacks that
+allow only one function. If the ⟦name⟧ is that of a primitive callback, new
+registrations will target your new callback.
+You can call the new callback with ⟦*C.call_callback(name, ...)⟧, adding any
+number of parameters.
+
+Callbacks of type ⟦*node⟧ operate on a node list: for these, all registered
+functions will be called in order, each function receiving the result of the
+last.
+After one function returns ⟦false⟧, no others will be called.
+Callbacks of this type are
+⟦pre_linebreak_filter⟧,
+⟦post_linebreak_filter⟧,
+⟦hpack_filter⟧,
+⟦vpack_filter⟧,
+⟦pre_output_filter⟧ and
+⟦mlist_to_mlist⟧.
+There is no way of unregistering callbacks of this type.
+
+Similarly, for the ⟦*data⟧ callbacks
+⟦process_input_buffer⟧,
+⟦process_output_buffer⟧ and
+⟦process_jobname⟧,
+all registered functions will be called in order on the output of the previous.
+Returning ⟦false⟧ will in this case result in the output of the previous
+function passing to the next.
+
+For ⟦*stack⟧ callbacks, a stack is kept and only the top function on the stack
+will be called. These are
+⟦mlist_to_hlist⟧,
+⟦hpack_quality⟧,
+⟦vpack_quality⟧,
+⟦hyphenate⟧,
+⟦linebreak_filter⟧,
+⟦buildpage_filter⟧ and
+⟦build_page_insert⟧.
+Register ⟦nil⟧ at the callback to pop a function off the stack.
+
+Finally, for the ⟦*simple⟧ callbacks
+⟦contribute_filter⟧,
+⟦pre_dump⟧,
+⟦wrapup_run⟧,
+⟦finish_pdffile⟧,
+⟦finish_pdfpage⟧,
+⟦insert_local_par⟧,
+⟦ligaturing⟧,
+⟦kerning⟧ and
+⟦process_rule⟧.
+all registered functions are called in order with the same arguments.
+
+The new ⟦*mlist_to_mlist⟧ callback is called before ⟦mlist_to_hlist⟧ and should
+not convert noads to nodes.
+
+If you create a new callback with a number for a name, that callback will
+replace the ⟦*process_rule⟧ callback when its number matches the index property
+of the rule.
+
+
+\section Miscellaneous functions
+
+This section describes functions and macros that are internal to this package,
+but might be of general usefulness.
+
+For instance, you might find the function ⟦*M.table_to_text(table)⟧ useful when
+debugging lua code.
+The small functions
+⟦*M.msg(...)⟧, ⟦*M.log(...)⟧ and ⟦*M.err(...)⟧
+include a call to ⟦M.string.format⟧;
+additionally,
+⟦*M.amsg(...)⟧ and ⟦*M.alog(...)⟧
+do not start a new line.
+
+Very useful is ⟦*M.luadef('csname', function, ...)⟧ for defining primitive-like
+tex macros from lua: ⟦function⟧ can be any function (it will be assigned a lua
+function register) and at the place of the dots you may append ⟦'protected'⟧
+and/or ⟦'global'⟧.
+
+Both ⟦*M.unset⟧ and ⟦*\unset⟧ contain the value ⟦-0x7FFFFFFF⟧ that can be used
+for clearing attributes.
+
+On the tex side, ⟦*\voidbox⟧, ⟦*\ignore⟧, ⟦*\spacechar⟧, ⟦*\unbrace⟧,
+⟦*\firstoftwo⟧ and ⟦*\secondoftwo⟧ should be self-explanatory and
+uncontroversial additions. For looking ahead, you can use
+⟦*\nextif \token {executed if present} {executed if not}⟧
+or its siblings ⟦*\nextifx⟧ and ⟦*\nextifcat⟧.
+For defining macros with optional arguments, ⟦*\withoptions[default]{code}⟧
+will ensure something within square brackets follows ⟦code⟧.
+
+Finally, ⟦*\splitcommalist {code} {list}⟧ will apply ⟦code⟧ to every nonempty
+item on a comma-separated ⟦list⟧.
+Items of the list will be re-tokenised and have surrounding spaces removed.
+This macro is fully expandable.
+
+Because of their usefulness and simplicity, these macros have been made
+available without special characters in their names; I hope you can tolerate
+their presence. Please let me know if their names clash with something
+important.
+
+\endinput
+
diff --git a/macros/luatex/generic/minim/minim-alloc.lua b/macros/luatex/generic/minim/minim-alloc.lua
new file mode 100644
index 0000000000..c99ca2c73d
--- /dev/null
+++ b/macros/luatex/generic/minim/minim-alloc.lua
@@ -0,0 +1,196 @@
+
+local M = {}
+
+-- 1 messages
+
+function M.msg(...)
+ texio.write_nl(string.format(...))
+end
+
+function M.amsg(...)
+ texio.write(string.format(...))
+end
+
+function M.log(...)
+ texio.write_nl('log', string.format(...))
+end
+
+function M.alog(...)
+ texio.write('log', string.format(...))
+end
+
+function M.term(...)
+ texio.write_nl('term', string.format(...))
+end
+
+function M.err (...)
+ tex.error(string.format(...))
+end
+
+-- 1 saving modules and tables
+
+local tables = package.loaded['minim-saved-tables']
+ or { ['minim:modules'] = { } }
+local modules = tables ['minim:modules']
+
+function M.remember (name)
+ if modules[name] == nil then
+ modules[name] = false -- will be a number if a bytecode register is reserved
+ modules[#modules+1] = name
+ end
+end
+
+function M.saved_table (identifier, table)
+ if tables[identifier] == nil then
+ tables[identifier] = table or { }
+ end
+ return tables[identifier]
+end
+
+-- saved tables may only contain values that can be converted to and from
+-- strings with tostring() or other tables meeting the same requirement.
+function M.table_to_text (tbl)
+ local r = { }
+ for i,t in pairs(tbl) do
+ local l = ''
+ if type(i) == 'string' then
+ l = string.format('[%q] = ', i)
+ else
+ l = string.format('[%s] = ', i)
+ end
+ if type(t) == 'table' then
+ l = l .. M.table_to_text (t)
+ elseif type(t) == 'string' then
+ l = l .. string.format ('%q', t)
+ else
+ l = l .. tostring(t)
+ end
+ r[#r+1] = l
+ end
+ return '{ ' .. table.concat (r,', ') .. ' }'
+end
+
+require('minim-callbacks')
+M.remember('minim-callbacks')
+M.remember('minim-alloc')
+
+-- 1 allocation functions
+
+-- like \unset
+M.unset = -0x7FFFFFFF
+
+local allocations = M.saved_table ('minim:allocations')
+
+local function make_alloc_new (fname, globcount)
+ allocations[fname] = allocations[fname] or { }
+ M['new_'..fname] = function (id)
+ local nr
+ if id and allocations[fname][id] then
+ nr = allocations[fname][id]
+ else
+ nr = tex.count[globcount] + 1
+ tex.setcount('global', globcount, nr)
+ if id then allocations[fname][id] = nr end
+ M.log('\\%s%d : %s', fname, nr, id or '<unnamed>')
+ end
+ return nr
+ end
+end
+
+make_alloc_new ('attribute' , 'e@alloc@attribute@count' )
+make_alloc_new ('whatsit' , 'e@alloc@whatsit@count' )
+make_alloc_new ('luabytecode' , 'e@alloc@bytecode@count' )
+make_alloc_new ('function' , 'e@alloc@luafunction@count' )
+make_alloc_new ('luachunkname' , 'e@alloc@luachunk@count' )
+make_alloc_new ('catcodetable' , 'e@alloc@ccodetable@count' )
+make_alloc_new ('userrule' , 'e@alloc@rule@count' )
+
+-- We need different allocation functions for the older registers, because
+-- etex’s global allocation macros are off-by-one w.r.t. all other.
+--
+local function make_alloc_old (fname, globcount, loccount)
+ allocations[fname] = allocations[fname] or { }
+ M['new_'..fname] = function (id)
+ local nr
+ if id and allocations[fname][id] then
+ nr = allocations[fname][id]
+ else
+ nr = tex.count[globcount]
+ tex.setcount('global', globcount, nr + 1)
+ if id then allocations[fname][id] = nr end
+ M.log('\\%s%d : %s', fname, nr, id or '<unnamed>')
+ end
+ return nr
+ end
+ M['local_'..fname] = function ()
+ local nr = tex.count[loccount] - 1
+ tex.setcount(loccount, nr)
+ return nr
+ end
+end
+
+-- existing allocation counters
+make_alloc_old ('count', 260, 270 )
+make_alloc_old ('dimen', 261, 271 )
+make_alloc_old ('skip', 262, 272 )
+make_alloc_old ('muskip', 263, 273 )
+make_alloc_old ('box', 264, 274 )
+make_alloc_old ('toks', 265, 275 )
+make_alloc_old ('marks', 266, 276 )
+
+function M.luadef (csname, fn, ...)
+ local nr = M.new_function(csname)
+ lua.get_functions_table()[nr] = fn
+ token.set_lua(csname, nr, ...)
+end
+
+M.luadef ('minim:rememberalloc', function()
+ allocations[token.scan_string()][token.scan_string()] = tex.count['allocationnumber']
+end)
+
+-- 1 dumping information to the format file
+
+-- reserve a bytecode register
+local saved_tables_bytecode = M.new_luabytecode('saved_tables_bytecode')
+
+-- we cannot use set_lua because lua functions are not included in the format file
+token.set_macro('minim:restoremodules', '\\luabytecodecall'..saved_tables_bytecode)
+
+local function dump_saved_tables()
+ M.msg('pre_dump: save modules and tables to format file')
+ -- save modules
+ for i,name in ipairs (modules) do
+ if not modules[name] then
+ M.msg('saving module '..name)
+ -- reserve (if necessary) a bytecode register
+ modules[name] = M.new_luabytecode ('module '..name)
+ -- store the file into the format file
+ lua.bytecode[modules[name]] = loadfile(kpse.find_file(name,'lua'))
+ end
+ end
+ -- save tables (and restore modules)
+ local saved_tables = [[
+
+ -- include all saved tables in this bytecode register
+ local t = ]]..M.table_to_text(tables)..[[
+
+ -- and make them available via require()
+ package.loaded['minim-saved-tables'] = t
+
+ -- restore all remembered modules from their saved bytecode
+ local s = t['minim:modules']
+ for _, name in ipairs (s) do
+ texio.write_nl('log', 'minim: restoring module '..name)
+ package.loaded[name] = lua.bytecode[ s[name] ] ()
+ end
+
+ ]]
+ lua.bytecode[saved_tables_bytecode] = load(saved_tables)
+end
+
+callback.register ('pre_dump', dump_saved_tables)
+
+--
+
+return M
+
diff --git a/macros/luatex/generic/minim/minim-alloc.tex b/macros/luatex/generic/minim/minim-alloc.tex
new file mode 100644
index 0000000000..66f08c9045
--- /dev/null
+++ b/macros/luatex/generic/minim/minim-alloc.tex
@@ -0,0 +1,184 @@
+
+\ifdefined \minimloaded
+ \message{(skipped)}
+ \expandafter\endinput\fi
+\chardef\minimloaded=\catcode`\:
+\catcode`\:=11
+
+% 1 settings
+
+\suppressoutererror = 1
+\frenchspacing
+
+% 1 programming macros
+
+\newbox\voidbox \setbox0=\box\voidbox
+
+\long\def\ignore#1{}
+\long\def\unbrace#1{#1}
+\long\def\firstoftwo#1#2{#1}
+\long\def\secondoftwo#1#2{#2}
+
+% \spacechar is equivalent to a space character
+{\let\@\relax \global\futurelet\spacechar\@ \relax}
+
+% \nextif c {yes} {no}
+\protected\def\nextif{\nextif:\if}
+% \nextifx c {yes} {no}
+\protected\def\nextifx{\nextif:\ifx}
+% \nextifcat c {yes} {no}
+\protected\def\nextifcat{\nextif:\ifcat}
+
+\long\def\nextif:#1#2#3#4{\begingroup % \if c {yes} {no}
+ \def\nextif:test{#1\nextif:token#2\relax
+ \expandafter\firstoftwo\else
+ \expandafter\secondoftwo\fi
+ {\endgroup#3}{\endgroup#4}}%
+ \futurelet\nextif:token\nextif:test}
+
+% \withoptions [default] {code}
+\protected\def\withoptions[#1]#2{\nextifx[{#2}{#2[#1]}} %]
+
+% \splitcommalist {code} {list}
+\def\splitcommalist#1#2{\splitcommalist:parse{#1}#2,\splitcommalist:end,}
+\def\splitcommalist:parse#1#2,{% command partial-list,
+ \ifx\splitcommalist:end#2\empty\else % test for end-of-list
+ \expandafter\splitcommalist:item
+ \expandafter{\scantextokens{#2}}{#1}\fi} % remove spaces
+\def\splitcommalist:item#1#2\fi{\fi
+ \ifx\splitcommalist:end#1\splitcommalist:end\else#2{#1}\fi
+ \splitcommalist:parse{#2}}
+\protected\def\splitcommalist:end{\splitcommalist:end}
+
+% \decompressedpdf
+\def\decompressedpdf{%
+ \pdfvariable compresslevel = 0
+ \pdfvariable objcompresslevel = 0
+ \pdfvariable recompress = 1
+}
+
+% \unset
+\newcount\unset \unset = -"7FFFFFFF
+
+% 1 ltluatex compatibility
+
+% repair ltluatex, which, without apparent reason, resets all allocation
+% counters, even if they already exist
+\def\minim:ltltx:file{ltluatex.tex}
+\let\ProvidesFile:saved=\ProvidesFile
+\def\ProvidesFile#1#2[#3]{%
+ \ifdefined\ProvidesFile:saved \ProvidesFile:saved{#1}#2[#3]\fi
+ \def\minim:ltltx:arg{#1}%
+ \ifx\minim:ltltx:file\minim:ltltx:arg
+ \let\ProvidesFile=\ProvidesFile:saved
+ \let\endinput:saved=\endinput
+ \protected\edef\endinput{%
+ \minim:ltltx:fix{e@alloc@attribute@count}%
+ \minim:ltltx:fix{e@alloc@whatsit@count}%
+ \minim:ltltx:fix{e@alloc@bytecode@count}%
+ \minim:ltltx:fix{e@alloc@luafunction@count}%
+ \minim:ltltx:fix{e@alloc@luachunk@count}%
+ \minim:ltltx:fix{e@alloc@ccodetable@count}%
+ % also patch in remembering allocations to lua
+ \alloc:patch \noexpand\attribute
+ \alloc:patch \noexpand\whatsit
+ \alloc:patch \noexpand\luabytecode
+ \alloc:patch \noexpand\luachunkname
+ \alloc:patch \noexpand\catcodetable
+ \alloc:patch \noexpand\userrule
+ % restore register allocation functions
+ \directlua{ local C = require('minim-callbacks')
+ callback.register, callback.find, callback.list
+ = C.register, C.find, C.list }%
+ \let\noexpand\endinput=\noexpand\endinput:saved
+ \noexpand\endinput}\fi}
+\def\minim:ltltx:fix#1{%
+ \ifnum0<\the\csname#1\endcsname
+ \wlog{Restoring \csname#1\endcsname to previous value \the\csname#1\endcsname}%
+ \expandafter\noexpand\csname#1\endcsname =\the\csname#1\endcsname\relax\fi}
+\protected\def\alloc:patch#1{%
+ \expandafter\expandafter\expandafter\let
+ \expandafter\expandafter\csname\csstring#1:ltluatex:new\endcsname
+ \csname new\csstring#1\endcsname
+ \expandafter\edef\csname new\csstring#1\endcsname##1{%
+ \noexpand\minim:rememberalloc{\csstring#1}{\noexpand\csstring##1}%
+ \expandafter\noexpand\csname\csstring#1:ltluatex:new\endcsname{##1}}}
+
+% 1 allocation
+
+% use global allocation (see etex.src)
+\let\newcount = \globcount
+\let\newdimen = \globdimen
+\let\newskip = \globskip
+\let\newmuskip = \globmuskip
+\let\newbox = \globbox
+\let\newtoks = \globtoks
+\let\newmarks = \globmarks
+
+% new allocation macros
+
+\def\alloc:makenew#1#2#3{%
+ \unless\ifcsname#3\endcsname
+ \expandafter\newcount \csname#3\endcsname
+ \csname#3\endcsname 0\fi
+ \ifcsname new\csstring#1\endcsname
+ \alloc:patch#1\else
+ \expandafter\edef\csname new\csstring#1\endcsname{%
+ \noexpand\minim:alloc\noexpand#1\noexpand#2%
+ \expandafter\noexpand\csname#3\endcsname}\fi}
+
+\def\minim:alloc#1#2#3#4{% \register \chardef \alloccount \name
+ \global\advance#31%
+ \allocationnumber#3%
+ \global#2#4\allocationnumber
+ \wlog{\string#4=\string#1\the\allocationnumber}%
+ % minim:rememberalloc will be defined from lua side
+ \minim:rememberalloc{\csstring#1}{\csstring#4}}
+
+% all names and counters below are identical to those from ltluatex
+% note: we cannot use \newluafunction, or ltluatex will not load
+\alloc:makenew \function \chardef {e@alloc@luafunction@count}
+\alloc:makenew \attribute \attributedef {e@alloc@attribute@count}
+\alloc:makenew \whatsit \chardef {e@alloc@whatsit@count}
+\alloc:makenew \luabytecode \chardef {e@alloc@bytecode@count}
+\alloc:makenew \luachunkname \chardef:chunk {e@alloc@luachunk@count}
+\alloc:makenew \catcodetable \catcode:chardef {e@alloc@ccodetable@count}
+\alloc:makenew \userrule \chardef {e@alloc@rule@count}
+
+% initialise new catcode tables
+\def\catcode:chardef#1#2{\chardef#1#2\initcatcodetable#2}
+\csname e@alloc@ccodetable@count\endcsname = 4 % because ltluatex allocates 4...
+
+% set initial chunk name value
+\def\chardef:chunk#1#2{\chardef#1#2\directlua{lua.name[\the#2]='\csstring#1'}}
+
+% \setluachunkname
+\protected\def\setluachunkname#1#2{\newluachunkname#1%
+ \directlua{lua.name[\the#1]='\luaescapestring{#2}'}}
+
+% patch in remembering box allocations
+\def\minim:boxchardef#1{%
+ \minim:rememberalloc{box}{\csstring#1}%
+ \mathchardef#1}
+\edef\newbox{%
+ \expandafter\noexpand\csname et@xglob\endcsname
+ 4\box\noexpand\minim:boxchardef}
+
+% undefine our helper functions
+\let\alloc:makenew=\undefined
+
+% 1 format file compatibility
+
+% all other work is done at the lua end
+\directlua { require ('minim-alloc') }
+\directlua { require ('minim-callbacks') }
+
+% restore lua modules (the macro will be defined from the lua end)
+\toksapp\everyjob{\minim:restoremodules
+ \message{... all done.}}
+
+% 
+
+\catcode`\:=\minimloaded
+\endinput
+
diff --git a/macros/luatex/generic/minim/minim-callbacks.lua b/macros/luatex/generic/minim/minim-callbacks.lua
new file mode 100644
index 0000000000..3ac075dc01
--- /dev/null
+++ b/macros/luatex/generic/minim/minim-callbacks.lua
@@ -0,0 +1,265 @@
+
+local M = {}
+
+local function log(msg, ...)
+ texio.write_nl('log', string.format(msg, ...))
+end
+
+-- 1 capturing the callback mechanism
+
+-- if ltluatex is loaded, we must get callback.register back
+if luatexbase ~= nil then
+ local luatex_base = luatexbase
+ luatexbase.uninstall ()
+ luatexbase = luatex_base
+end
+
+local primitives = { }
+M.primitives = primitives
+primitives.register = callback.register
+primitives.find = callback.find
+primitives.list = callback.list
+
+local own_callbacks = {}
+local callback_lists = {}
+local callback_stacks = {}
+
+-- 1 finding callbacks
+
+function M.find (name)
+ local f = own_callbacks[name]
+ if f == nil then
+ return primitives.find(name)
+ else
+ return f
+ end
+end
+
+function M.list (name)
+ local t = {}
+ for n,f in pairs(callback_lists) do
+ if f then
+ t[n] = #f
+ else
+ t[n] = false
+ end
+ end
+ for n,f in pairs(own_callbacks) do
+ if f then
+ t[n] = t[n] or true
+ else
+ t[n] = t[n] or false
+ end
+ end
+ for n,f in pairs(primitives.list()) do
+ if f then
+ t[n] = t[n] or true
+ else
+ t[n] = t[n] or false
+ end
+ end
+ return t
+end
+
+-- 1 registering callbacks
+
+local function register_simple (cb,f)
+ -- prefer user-defined callbacks over built-in
+ local x = own_callbacks[cb]
+ if x == nil then
+ return primitives.register (cb, f)
+ else
+ -- default to false because nil would delete the callback itself
+ own_callbacks[cb] = f or false
+ return -1
+ end
+end
+
+-- will be redefined later
+local function announce_callback(cb, f) end
+
+function M.register (cb, f)
+ announce_callback(cb, f)
+ local list = callback_lists[cb]
+ local stack = callback_stacks[cb]
+ if stack then
+ if f == nil then -- pop
+ local p = stack[#stack]
+ stack[#stack] = nil
+ return register_simple (cb,p)
+ else -- push
+ stack[#stack+1] = M.find (cb)
+ return register_simple (cb,f)
+ end
+ elseif list ~= nil then
+ list[#list+1] = f
+ return -2
+ else
+ return register_simple (cb,f)
+ end
+end
+
+
+-- 1 lists of callback functions
+
+local function call_list_node (lst)
+ return function (head, ...)
+ local list = callback_lists[lst]
+ for _,f in ipairs(list) do
+ local newhead = f(head,...)
+ if node.is_node(newhead) then
+ head = newhead
+ elseif newhead == false then
+ return false
+ end
+ end
+ return head
+ end
+end
+
+local function call_list_data (lst)
+ return function (str)
+ local list = callback_lists[lst]
+ for _,f in ipairs(list) do
+ str = f(str) or str
+ end
+ return str
+ end
+end
+
+local function call_list_simple (lst)
+ return function (...)
+ local list = callback_lists[lst]
+ for _,f in ipairs(list) do
+ f(...)
+ end
+ end
+end
+
+-- 1 creating and calling callbacks
+
+local function register_list (lst, fn)
+ M.register (lst, fn(lst))
+ callback_lists[lst] = {}
+end
+
+local function stack_callback (cb)
+ callback_stacks[cb] = {}
+end
+
+function M.new_callback (name, prop)
+ own_callbacks[name] = false -- false means empty here
+ if prop == 'stack' then
+ stack_callback (name)
+ elseif prop == 'node' then
+ register_list (name, call_list_node)
+ elseif prop == 'simple' then
+ register_list (name, call_list_simple)
+ elseif prop == 'data' then
+ register_list (name, call_list_data)
+ end
+end
+
+function M.call_callback (name, ...)
+ local f = own_callbacks[name]
+ if f then
+ return f (...)
+ else
+ return false
+ end
+end
+
+-- 1 initialisation
+
+-- save all registered callbacks
+local saved = {}
+for n,s in pairs(primitives.list()) do
+ if s then
+ log('save callback: %s', n)
+ saved[n] = callback.find(n)
+ end
+end
+
+-- replace the primitive registering
+callback.register = M.register
+callback.find = M.find
+callback.list = M.list
+
+-- string processing callbacks
+register_list ('process_input_buffer', call_list_data)
+register_list ('process_output_buffer', call_list_data)
+register_list ('process_jobname', call_list_data)
+
+-- node list processing callbacks
+register_list ('pre_linebreak_filter', call_list_node)
+register_list ('post_linebreak_filter', call_list_node)
+--register_list ('append_to_vlist_filter', call_list_node) -- TODO this breaks something
+register_list ('hpack_filter', call_list_node)
+register_list ('vpack_filter', call_list_node)
+register_list ('pre_output_filter', call_list_node)
+
+-- mlist_to_mlist and mlist_to_mlist
+M.new_callback ('mlist_to_mlist', 'node')
+M.new_callback ('mlist_to_hlist', 'stack')
+M.register ('mlist_to_hlist', node.mlist_to_hlist )
+primitives.register ('mlist_to_hlist', function (head, ...)
+ local newhead = M.call_callback ('mlist_to_mlist', head, ...)
+ if newhead ~= true then
+ head = newhead or head
+ end
+ newhead = M.call_callback ('mlist_to_hlist', head, ...)
+ return newhead
+end)
+
+-- simple listable callbacks
+register_list ('contribute_filter', call_list_simple)
+register_list ('pre_dump', call_list_simple)
+register_list ('wrapup_run', call_list_simple)
+register_list ('finish_pdffile', call_list_simple)
+register_list ('finish_pdfpage', call_list_simple)
+register_list ('insert_local_par', call_list_simple)
+
+register_list ('ligaturing', call_list_simple)
+register_list ('kerning', call_list_simple)
+
+-- stack callbacks
+stack_callback ('hpack_quality')
+stack_callback ('vpack_quality')
+stack_callback ('hyphenate')
+stack_callback ('linebreak_filter')
+stack_callback ('buildpage_filter')
+stack_callback ('build_page_insert')
+
+-- process_rule
+M.new_callback ('process_rule', 'simple')
+primitives.register ('process_rule', function (rule, ...)
+ local p = own_callbacks[rule.index]
+ if p then
+ p (rule, ...)
+ else
+ M.call_callback ('process_rule')
+ end
+end)
+
+-- restore all registered callbacks
+for n,f in pairs(saved) do
+ log('restore callback: %s', n)
+ M.register (n,f)
+end
+saved = nil
+
+
+local function announce_callback(cb, f)
+ if f then
+ log('callback added: %s', cb)
+ else
+ log('callback removed: %s', cb)
+ end
+end
+
+
+--
+
+return M
+
+
diff --git a/macros/luatex/generic/minim/minim-doc.sty b/macros/luatex/generic/minim/minim-doc.sty
new file mode 100644
index 0000000000..1d3c2d4cea
--- /dev/null
+++ b/macros/luatex/generic/minim/minim-doc.sty
@@ -0,0 +1,215 @@
+
+%% This is the style file for the manuals of the minim format and related
+%% packages.
+
+\ifdefined \manual
+ \expandafter\endinput\fi
+
+\input minim
+
+\pdfalevel 3a
+\overfullrule = 0pt
+
+% 1 page layout
+
+\pdfvariable horigin 0pt
+\pdfvariable vorigin 0pt
+\frenchspacing
+\raggedbottom
+
+\uselanguage{ukenglish}
+\hyphenation {
+ mark-tab-le-cell
+ }
+
+\parindent 0pt
+\baselineskip 12pt plus 1pt
+\parskip 8pt plus 4pt minus 1pt
+
+\abovedisplayskip 3pt plus 2pt
+\belowdisplayskip 4pt plus 2pt
+
+\hsize 12cm
+\vsize 56\baselineskip
+
+\voffset = \dimexpr (\pageheight-\vsize)/2\relax
+\hoffset = \dimexpr (\pagewidth-\hsize)/2\relax
+
+% 1 fonts
+
+\input luaotfload.sty
+\font\tenrm {Latin Modern Roman:script=latn;protrusion=default} at 10pt
+\font\tenbf {Latin Modern Roman/B:script=latn} at 10pt
+\font\tenit {Latin Modern Roman/I:script=latn} at 10pt
+\font\tentt {Latin Modern Mono:script=latn;+smcp} at 10pt
+\font\title {Latin Modern Roman/B:script=latn} at 12pt
+\font\Title {Latin Modern Roman/B:script=latn} at 16pt
+
+\font\tenmath {Latin Modern Math:mode=base;script=math;ssty=0} at 10pt
+\font\tenmaths {Latin Modern Math:mode=base;script=math;ssty=1} at 7pt
+\font\tenmathss {Latin Modern Math:mode=base;script=math;ssty=2} at 5pt
+\textfont 0 = \tenmath
+\scriptfont 0 = \tenmaths
+\scriptscriptfont 0 = \tenmathss
+
+\font\altmath {Tex Gyre Pagella Math:mode=base;script=math;ssty=0} at 10pt
+\font\altmaths {Tex Gyre Pagella Math:mode=base;script=math;ssty=1} at 7pt
+\font\altmathss {Tex Gyre Pagella Math:mode=base;script=math;ssty=2} at 5pt
+\textfont 1 = \altmath
+\scriptfont 1 = \altmaths
+\scriptscriptfont 1 = \altmathss
+
+\expandglyphsinfont \tenrm 40 25 5
+\protrudechars=2 \adjustspacing=2
+\tenrm
+
+\mathfam{blackboard, `\mscra-`\mscrz} 1
+
+% 1 code typesetting
+
+\def\red#1{\quitvmode\pdfextension
+ literal{0.75 0 0 rg}{#1}\pdfextension literal{0 g}}
+
+\def\emph#1{{\tenit #1\/}}
+
+\def\breakablespace{\penalty0~}
+\catcode`\⟦=\active
+\def⟦{\quitvmode\begingroup\catcode`\∥=0\relax
+ \markparagraphsfalse
+ \def\do##1{\catcode`##1=12}\dospecials
+ \catcode`\ =\active
+ \letcharcode`\ =\breakablespace\obeylines
+ \parskip0pt\tentt
+ \nextif*{\verbatim\ignore}{\expandafter\ignore\verbatim}}
+\def\verbatim#1⟧{\red{\markelement{Code}{#1}}\endgroup}
+
+% 1 the minim symbol
+
+\newbox\notehead
+\newmetapostinstance \mnmMP
+\runmetapost \mnmMP {
+beginfig(1)
+ w:=1/27; pickup pencircle scaled 1/9;
+ path c; c :=
+ (-3/5,-1/6 ) {down}..
+ (-1/5,-1/2 ) {right}..
+ ( 3/5, 1/6 ) {up}..
+ ( 1/5, 1/2 ) {left}.. cycle;
+ filldraw c withcolor .75 red;
+ path p; p :=
+ (-0.383-w,-0.323-w) ..tension 1.35.. (-0.094-w, 0.094+w) ..tension 1.5..
+ ( 0.383+w, 0.323+w) ..tension 1.35.. ( 0.094+w,-0.094-w) ..tension 1.5.. cycle ;
+ p := (-1,-1) -- (1,-1) -- (1,1) -- p -- (1,1) -- (-1,1) -- cycle ;
+ clip currentpicture to p;
+ draw (3/5, 1/6) -- (3/5, 5/2) withcolor .75 red;
+ setbounds currentpicture to c;
+ currentpicture := currentpicture scaled 8pt ;
+endfig;}
+\boxnextmpimage \mnmMP \notehead
+\setbox\notehead=\hbox{\markartifact{Layout}{\box\notehead}}
+\closemetapostinstance \mnmMP
+
+%
+% 1 document structure
+
+% page artifacts
+\edef\tmp{\markartifact{Pagination /Subtype/Footer}{\the\footline}}
+\footline\expandafter{\tmp}
+\def\footnoterule{\markartifact{Layout}{\kern-3\p@
+ \hrule width 2truein \kern 2.6\p@}} % the \hrule is .4pt high
+
+% \startlist \item x. ... \stoplist
+\def\listskip{\vskip 3pt plus 2pt\vskip-\parskip}
+\def\startlist{\smallskip\startelement{L}}
+\def\stoplist{\stopelement{L}\smallskip}
+\def\item#1.{\listskip
+ \nextpartag{LI}\hangindent2em\quitvmode
+ \hbox to 2em{\hss\startelement{Lbl}#1.~~}%
+ \startelement{LBody}\ignorespaces}
+
+% \chapter Title \par
+\addstructuretype Sect Chapter
+\protected\def\chapter#1 \par{%
+ \vfil\break
+ \ensurestopelement{Section}%
+ \startelement{Chapter}%
+ \outline open {#1}%
+ \nextpartag{H}\red{\Title#1\hfill\copy\notehead}%
+ \addtotoc{\chapter{#1}{\lastdestinationname}}%
+ \bigskip}
+
+% \section Title \par
+\addstructuretype Sect Section
+\protected\def\section#1 \par{%
+ \bigskip\penalty-50\relax
+ \startelement{Section}%
+ \outline closed {#1}%
+ \nextpartag{H}\quitvmode
+ \addtotoc{\section{#1}{\lastdestinationname}}%
+ \red{\title#1}%
+ \par\nobreak}
+
+% table of contents
+\newtoks\toc \newif\iftoc \toctrue
+\def\addtotoc#1{%
+ \iftoc \edef\toctmp{#1}%
+ \write\auxfile\expandafter
+ {\expandafter\toksapp\expandafter\toc
+ \expandafter{\toctmp{\the\count0}}}\fi\toctrue}
+
+% an auxiliary file
+\newread \auxfile
+\immediate\openin\auxfile = \jobname.aux
+\ifeof\auxfile
+ \def\next{}\else
+ \def\next{\input \jobname.aux}\fi
+\immediate\closein\auxfile \next
+\newwrite \auxfile
+\immediate\openout\auxfile = \jobname.aux
+
+\autotagformulas
+
+\def\maketitle{%
+ \setembeddedfilesmoddate {\getmetadata date}
+ \begingroup
+ \def\outline##1##{\ignore}
+ \tocfalse \chapter \getmetadata title
+ \hfill \tenrm version \getmetadata version
+ \par\endgroup
+ \marktableaslist \halign {\strut
+ \qquad##\quad&##\hfil\cr
+ author&\getmetadata author\cr
+ contact&{\def\tmp{@}\def\TMP{.}%
+ minim\tmp elrenkema\TMP nl}\cr}
+ \smallskip}
+
+% 1 Chapters and full manuals
+
+\def\licencesection{\section Licence
+
+\embedfile global file {EUPL-1.2-EN.txt}
+ desc {Licence for this package (EUPL).}
+ name LICENCE mimetype text/plain
+ relation Unspecified uncompressed
+
+This package may be distributed under the terms of the European Union Public
+Licence (EUPL) version 1.2 or later. An english version of this licence has
+been included as an attachment to this file; copies in other languages can be
+obtained at
+\stopformulatagging$$\hbox
+{\hyperlink url {https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12}%
+https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\endlink}$$\startformulatagging}
+
+
+% for identifying which file we are typesetting
+\edef\thejobname{\expandafter\scantextokens\expandafter{\jobname}}
+\newif \ifchapter
+\def\manual#1{\def\tmp{#1}\ifx\thejobname\tmp
+ \chapterfalse\else\chaptertrue\fi}
+\def\endmanual{\ifchapter\expandafter\endinput\else
+ \licencesection\expandafter\bye\fi}
+
+%  introduction
+
+\endinput
+
diff --git a/macros/luatex/generic/minim/minim-etex.tex b/macros/luatex/generic/minim/minim-etex.tex
new file mode 100644
index 0000000000..bdf71def16
--- /dev/null
+++ b/macros/luatex/generic/minim/minim-etex.tex
@@ -0,0 +1,413 @@
+
+% This is a stripped-down version of etex.src, meant as companion to
+% minim-plain.tex.
+%
+% It follows e-TeX V2.1;0-luatex2.
+%
+% The following has been removed:
+% - Module loading
+% - Version checks
+%
+% The following has been retained:
+% - Language handling (somewhat simplified)
+% - Tracing and logging extensions
+% - The \eTeX symbol
+% - Register allocation
+
+\catcode `\@=\catcode `\A
+
+% Define the language-handling commands
+
+\def \uselanguage #1%
+ {\ifcsname lang@#1\endcsname
+ \language=\csname lang@#1\endcsname
+ \lefthyphenmin=\csname lhm@#1\endcsname
+ \righthyphenmin=\csname rhm@#1\endcsname
+ \ifcsname lu@texhyphen@loaded@\the\language\endcsname \else
+ \global\expandafter\def\csname
+ lu@texhyphen@loaded@\the\language\endcsname{}%
+ \directlua{
+ if not status.ini_version then
+ require("luatex-hyphen")
+ luatexhyphen.loadlanguage("\luatexluaescapestring{#1}",
+ \the\language)
+ end}%
+ \fi
+ \ifdefined\uselanguage@hook \uselanguage@hook{#1}\fi
+ \else
+ \begingroup\errorcontextlines=0\relax
+ \errhelp {You are trying to use a language which has not previously
+ been defined; remember that any language you want to use
+ will need to have been specified at the time the format
+ was created.%
+ }%
+ \errmessage {Language #1 undefined.}\endgroup
+ \fi}
+
+\def \addlanguage #1#2#3#4#5{% language patterns exceptions lhm rhm
+ \expandafter\newlanguage \csname lang@#1\endcsname
+ \expandafter\chardef \csname lhm@#1\endcsname=#4
+ \expandafter\chardef \csname rhm@#1\endcsname=#5
+ \csname if\directlua{% do we want to skip this language now?
+ require("luatex-hyphen")
+ if (luatexhyphen.lookupname("\luatexluaescapestring{#1}") == nil)
+ or (\number\csname lang@#1\endcsname == 0) then
+ tex.sprint("false") % no, load it (execute 'else' part)
+ else
+ tex.sprint("true") % yes, skip
+ end}\endcsname
+ \else
+ \uselanguage {#1}%
+ \input #2
+ \if *#3*\else \input #3 \fi
+ \edef \fmtversion {\fmtversion/#1}%
+ \fi
+ \ifdefined\addlanguage@hook \addlanguage@hook{#1}\fi}
+
+% Decrement \count 19, because \newlanguage will increment it again
+
+\advance \count 19 by -1
+
+% We are about to try to process a user/site-specific file "language.def",
+% which establishes a Babel-like language selection environment.
+
+\input language.def
+
+% All that was just to set up natural language handling...
+% The "real" work of "etex.src", however, is to augment the non-primitives
+% of Plain.TeX to incorporate e-TeX specific features, and to add new
+% non-primitives to simplify access to new e-TeX specific primitives.
+
+\message {Augmenting the Plain TeX definitions:}
+\message {\string \tracingall;}
+
+\def \tracingall
+ {\tracingonline=\@ne
+ \tracingcommands=\thr@@ % plain.tex has \tw@
+ \tracingstats=\tw@
+ \tracingpages=\@ne
+ \tracingoutput=\@ne
+ \tracinglostchars=\tw@ % plain.tex has \@ne
+ \tracingmacros=\tw@
+ \tracingparagraphs=\@ne
+ \tracingrestores=\@ne
+ \showboxbreadth=\maxdimen
+ \showboxdepth=\maxdimen
+ \errorstopmode
+ \tracinggroups=\@ne
+ \tracingifs=\@ne
+ \tracingscantokens=\@ne
+ \tracingnesting=\@ne
+ \tracingassigns=\tw@
+ }
+
+\message {Adding new e-TeX definitions:}
+
+\message {\string \eTeX,}
+\def \eTeX {$\varepsilon$-\TeX} %%% the simple version, not suitable for maths;
+
+\message {\string \loggingall,}
+\def \loggingall {\tracingall \tracingonline=\z@}
+
+\message {\string \tracingnone,}
+\def \tracingnone
+ {\tracingassigns=\z@
+ \tracingnesting=\z@
+ \tracingscantokens=\z@
+ \tracingifs=\z@
+ \tracinggroups=\z@
+ \showboxdepth=\thr@@
+ \showboxbreadth=5
+ \tracingrestores=\z@
+ \tracingparagraphs=\z@
+ \tracingmacros=\z@
+ \tracinglostchars=\@ne
+ \tracingoutput=\z@
+ \tracingpages=\z@
+ \tracingstats=\z@
+ \tracingcommands=\z@
+ \tracingonline=\z@
+ }
+
+\message {register allocation;}
+
+\newcount \et@xins % our insertion counter (\insc@unt is used differently)
+
+% We have to adjust the Plain TeX register allocation counts for our
+% slightly modified book-keeping:
+
+\advance \count 10 by 1 % \count 10=23 % allocates \count registers 23, 24, ...
+\advance \count 11 by 1 % \count 11=10 % allocates \dimen registers 10, 11, ...
+\advance \count 12 by 1 % \count 12=10 % allocates \skip registers 10, 11, ...
+\advance \count 13 by 1 % \count 13=10 % allocates \muskip registers 10, 11, ...
+\advance \count 14 by 1 % \count 14=10 % allocates \box registers 10, 11, ...
+\advance \count 15 by 1 % \count 15=10 % allocates \toks registers 10, 11, ...
+\advance \count 16 by 1 % \count 16=0 % allocates input streams 0, 1, ...
+\advance \count 17 by 1 % \count 17=0 % allocates output streams 0, 1, ...
+\advance \count 18 by 1 % \count 18=4 % allocates math families 4, 5, ...
+\advance \count 19 by 1 % \count 19=0 % allocates \language codes 0, 1, ...
+
+\et@xins=\insc@unt % \et@xins=255 % allocates insertions 254, 253, ...
+
+% We don't change the Plain TeX definitions of \newcount, etc., but the
+% \alloc@ macro doing the actual work is redefined.
+
+% When the normal register pool for \count, \dimen, \skip, \muskip,
+% \box, or \toks registers is exhausted, we switch to the extended pool.
+
+\def \alloc@ #1#2#3#4#5%
+ {\ifnum \count 1#1 < #4% make sure there's still room
+ \allocationnumber=\count 1#1
+ \global \advance \count 1#1 by \@ne
+ \global #3#5=\allocationnumber
+ \wlog {\string #5=\string #2\the \allocationnumber}%
+ \else \ifnum #1 < 6
+ \begingroup \escapechar=\m@ne
+ \expandafter \alloc@@ \expandafter {\string #2}#5%
+ \else
+ \errmessage {No room for a new #2}%
+ \fi
+ \fi
+ }
+
+% The \expandafter construction used here allows the generation of
+% \newcount and \globcount from #1=count. Moreover (and more important)
+% this construction avoids the appearance of \outer macros inside
+% macro definitions or conditionals.
+
+\def \alloc@@ #1#2%
+ {\endgroup % restore \escapechar
+ \message {Normal \csname#1\endcsname register pool exhausted,
+ switching to extended pool.}%
+ \global \expandafter
+ \let \csname new#1\expandafter \endcsname \csname glob#1\endcsname
+ \csname new#1\endcsname#2%
+ }
+
+% We do change the Plain TeX definition of \newinsert
+
+\outer \def \newinsert #1%make sure there's still room for ...
+ {\ch@ck 0 \et@xins \count % ... a \count, ...
+ {\ch@ck 1 \et@xins \dimen % ... \dimen, ...
+ {\ch@ck 2 \et@xins \skip % ... \skip, ...
+ {\ch@ck 4 \et@xins \box % ... and \box register
+ {\global \advance \et@xins by \m@ne
+ \unless
+ \ifnum \insc@unt < \et@xins
+ \global \insc@unt=\et@xins
+ \fi
+ \allocationnumber=\et@xins
+ \global \chardef #1=\allocationnumber
+ \wlog {\string #1=\string \insert \the \allocationnumber}%
+ }%
+ }%
+ }%
+ }%
+ }
+
+\def \ch@ck #1#2#3#4%
+ {\ifnum \count 1#1 < #2#4\else \errmessage {No room for a new #3}\fi}
+
+% And we define \reserveinserts, so that you can say \reserveinserts{17}
+% in order to reserve room for up to 17 additional insertion classes that will
+% not be taken away by \newcount, \newdimen, \newskip, or \newbox.
+
+\outer \def \reserveinserts#1%
+ {\global \insc@unt=\numexpr \et@xins \ifnum #1 > \z@ -#1\fi \relax}
+
+\message {extended register allocation;}
+
+% Now, we define \globcount, \globbox, etc., so that you can say
+% \globcount\foo and \foo will be defined (with \countdef) to be the
+% next count register from the vastly larger but somewhat less efficient
+% extended register pool. We also define \loccount, etc., but these
+% register definitions are local to the current group.
+
+\count 260=277 % globally allocates \count registers 277, 278, ...
+\count 261=\@cclvi % globally allocates \dimen registers 256, 257, ...
+\count 262=\@cclvi % globally allocates \skip registers 256, 257, ...
+\count 263=\@cclvi % globally allocates \muskip registers 256, 257, ...
+\count 264=\@cclvi % globally allocates \box registers 256, 257, ...
+\count 265=\@cclvi % globally allocates \toks registers 256, 257, ...
+\count 266=\@ne % globally allocates \marks classes 1, 2, ...
+
+\def \et@xmaxregs {32768}
+
+\count 270=\et@xmaxregs % locally allocates \count registers 32767, 32766, ...
+\count 271=\et@xmaxregs % ditto for \dimen registers
+\count 272=\et@xmaxregs % ditto for \skip registers
+\count 273=\et@xmaxregs % ditto for \muskip registers
+\count 274=\et@xmaxregs % ditto for \box registers
+\count 275=\et@xmaxregs % ditto for \toks registers
+\count 276=\et@xmaxregs % ditto for \marks classes
+
+% \count registers 256-259 and 267-269 are not (yet) used
+
+\outer \def \globcount {\et@xglob 0 \count \countdef}
+ \def \loccount {\et@xloc 0 \count \countdef}
+\outer \def \globdimen {\et@xglob 1 \dimen \dimendef}
+ \def \locdimen {\et@xloc 1 \dimen \dimendef}
+\outer \def \globskip {\et@xglob 2 \skip \skipdef}
+ \def \locskip {\et@xloc 2 \skip \skipdef}
+\outer \def \globmuskip {\et@xglob 3 \muskip \muskipdef}
+ \def \locmuskip {\et@xloc 3 \muskip \muskipdef}
+\outer \def \globbox {\et@xglob 4 \box \mathchardef}
+ \def \locbox {\et@xloc 4 \box \mathchardef}
+\outer \def \globtoks {\et@xglob 5 \toks \toksdef}
+ \def \loctoks {\et@xloc 5 \toks \toksdef}
+\outer \def \globmarks {\et@xglob 6 \marks \mathchardef}
+ \def \locmarks {\et@xloc 6 \marks \mathchardef}
+
+\let\newmark=\globmarks %%% 2.0;14
+\let\newmarks=\globmarks
+
+\def \et@xglob #1#2#3#4%
+ {\et@xchk #1#2% make sure there's still room
+ {\allocationnumber=\count 26#1
+ \global \advance \count 26#1 by \@ne
+ \global #3#4=\allocationnumber
+ \wlog {\string #4=\string #2\the \allocationnumber}%
+ }%
+ }
+
+\def \et@xloc#1#2#3#4%
+ {\et@xchk #1#2% make sure there's still room
+ {\advance \count 27#1 by \m@ne
+ \allocationnumber=\count 27#1
+ #3#4=\allocationnumber
+ \wlog {\string #4=\string #2\the \allocationnumber \space (local)}%
+ }%
+ }
+
+\def \et@xchk #1#2#3%
+ {\ifnum \count 26#1 < \count 27#1
+ #3%
+ \else
+ \errmessage {No room for a new #2}%
+ \fi
+ }
+
+% Next we define \globcountblk, \loccountblk, etc., so that one can
+% write \globcountblk\foo{17} and \foo will be defined (with \mathchardef)
+% as the first (the zeroth?) of a block of 17 consecutive registers.
+% Thus the user is intended to reference elements <\foo+0> to <\foo+n-1>,
+% where n is the length of the block allocated.
+
+\outer \def \globcountblk {\et@xgblk 0 \count}
+ \def \loccountblk {\et@xlblk 0 \count}
+\outer \def \globdimenblk {\et@xgblk 1 \dimen}
+ \def \locdimenblk {\et@xlblk 1 \dimen}
+\outer \def \globskipblk {\et@xgblk 2 \skip}
+ \def \locskipblk {\et@xlblk 2 \skip}
+\outer \def \globmuskipblk {\et@xgblk 3 \muskip}
+ \def \locmuskipblk {\et@xlblk 3 \muskip}
+\outer \def \globboxblk {\et@xgblk 4 \box}
+ \def \locboxblk {\et@xlblk 4 \box}
+\outer \def \globtoksblk {\et@xgblk 5 \toks}
+ \def \loctoksblk {\et@xlblk 5 \toks}
+\outer \def \globmarksblk {\et@xgblk 6 \marks}
+ \def \locmarksblk {\et@xlblk 6 \marks}
+
+% And, both to provide a higher-level interface to the block allocation
+% scheme, and to demonstrate possible applications of the new \...expr
+% primitives, we also define \globcountvector and \loccountvector (etc)
+% which allow the user to access elements with embedded arithmetic, as in
+
+% \globcountvector \foo {12}
+% \foo {\count 0 + 3} = \foo {\count 1 * 2}
+
+\outer \def \globcountvector {\et@xgvec 0 \count}
+ \def \loccountvector {\et@xlvec 0 \count}
+\outer \def \globdimenvector {\et@xgvec 1 \dimen}
+ \def \locdimenvector {\et@xlvec 1 \dimen}
+\outer \def \globskipvector {\et@xgvec 2 \skip}
+ \def \locskipvector {\et@xlvec 2 \skip}
+\outer \def \globmuskipvector {\et@xgvec 3 \muskip}
+ \def \locmuskipvector {\et@xlvec 3 \muskip}
+\outer \def \globboxvector {\et@xgvec 4 \box}
+ \def \locboxvector {\et@xlvec 4 \box}
+\outer \def \globtoksvector {\et@xgvec 5 \toks}
+ \def \loctoksvector {\et@xlvec 5 \toks}
+\outer \def \globmarksvector {\et@xgvec 6 \marks}
+ \def \locmarksvector {\et@xlvec 6 \marks}
+
+\def \et@xgblk #1#2#3#4%
+ {\et@xchkblk #1#2{#4}% make sure there's still room
+ {\allocationnumber=\count 26#1
+ \global \advance \count 26#1 by #4%
+ \global \mathchardef #3=\allocationnumber
+ \wlog {\string #3=\string #2blk{\number #4} at \the \allocationnumber}%
+ }%
+ }
+
+\def \et@xlblk #1#2#3#4%
+ {\et@xchkblk #1#2{#4}% make sure there's still room
+ {\advance \count 27#1 by -#4%
+ \allocationnumber=\count 27#1
+ \mathchardef #3=\allocationnumber
+ \wlog {\string #3=\string #2blk{\number #4}
+ at \the \allocationnumber \space (local)%
+ }%
+ }%
+ }
+
+\begingroup
+\catcode `\# = 12
+\gdef \et@xhash {#}
+\endgroup
+
+\def \et@xgvec #1#2#3#4%
+ {\et@xchkblk #1#2{#4}% make sure there's still room
+ {\allocationnumber=\count 26#1
+ \global \advance \count 26#1 by #4%
+ \ifx #2\box
+ \def \2{}%
+ \else \ifx #2\marks
+ \def \2{}%
+ \else
+ \def \2{\string #2}%
+ \fi
+ \fi
+ \xdef #3##1{\2 \noexpand \numexpr \the \allocationnumber+##1\relax}%
+ \wlog {\string #3 {\et@xhash 1} =
+ \2 {\the \allocationnumber+\et@xhash 1} (global #2 vector)%
+ }%
+ }%
+ }
+
+\def \et@xlvec #1#2#3#4%
+ {\et@xchkblk #1#2{#4}% make sure there's still room
+ {\advance \count 27#1 by -#4%
+ \allocationnumber=\count27#1
+ \mathchardef #3=\allocationnumber
+ \ifx #2\box
+ \def \2{}%
+ \else \ifx #2\marks
+ \def \2{}%
+ \else
+ \def \2{\string #2}%
+ \fi
+ \fi
+ \edef #3##1{\2 \noexpand \numexpr \the \allocationnumber+##1\relax}%
+ \wlog {\string #3 {\et@xhash 1} =
+ \2 {\the \allocationnumber+\et@xhash 1} (local #2 vector)%
+ }%
+ }%
+ }
+
+\def \et@xchkblk #1#2#3#4%
+ {\ifnum #3 < \z@
+ \errmessage {Negative register block size \number #3}%
+ \else \ifnum \numexpr \count 26#1+#3 > \count 27#1
+ \errmessage {No room for new #2block of size \number#3}%
+ \else
+ #4%
+ \fi
+ \fi
+ }
+
+% And finally re-catcode commercial-at
+
+\catcode `\@=12
+
+
diff --git a/macros/luatex/generic/minim/minim-hooks.lua b/macros/luatex/generic/minim/minim-hooks.lua
new file mode 100644
index 0000000000..c399547c9e
--- /dev/null
+++ b/macros/luatex/generic/minim/minim-hooks.lua
@@ -0,0 +1,30 @@
+
+-- Adds a callback just before a box is shipped out, opposite to
+-- 'finish_pdfpage'.
+
+local alloc = require('minim-alloc')
+local cb = require ('minim-callbacks')
+alloc.remember('minim-hooks')
+
+local M = { }
+
+cb.new_callback('pre_shipout', 'simple')
+
+M.primitive_shipout = tex.shipout
+function tex.shipout(nr)
+ cb.call_callback('pre_shipout', nr)
+ M.primitive_shipout(nr)
+end
+
+local shipout_box = alloc.new_box('minim:shipout:box')
+
+alloc.luadef('minim:shipout', function()
+ tex.box[shipout_box] = token.scan_list()
+ cb.call_callback('pre_shipout', shipout_box)
+ -- we must let tex do the rest, because some other package may have
+ -- redefined \shipout before us.
+ tex.sprint(token.create('minim:shipout:do'))
+end, 'protected')
+
+return M
+
diff --git a/macros/luatex/generic/minim/minim-hooks.tex b/macros/luatex/generic/minim/minim-hooks.tex
new file mode 100644
index 0000000000..b3b8092654
--- /dev/null
+++ b/macros/luatex/generic/minim/minim-hooks.tex
@@ -0,0 +1,56 @@
+
+% The purpose of this module is allowing arbitrary code be run at specific
+% places. I have not yet included it in the manual, because I still am a bit
+% unsure about the details of the implementation.
+%
+% The first thing done here is inserting a callback into \shipout (and
+% tex.shipout) mirroring finish_pdf, allowing last-minute manipulation before
+% the pdf code will be assembled.
+%
+% The second feature is adding things to the beginning of a paragraph without
+% (seemingly) disturbing \everypar, and also adding things to the next
+% paragraph only.
+%
+% Both features are implemented in a way that is repeatable and should coexist
+% peacefully with other packages doing something of the same. But please let me
+% know if you run into any problems.
+
+\ifdefined\minimhooksloaded
+ \message{(skipped)}
+ \expandafter\endinput\fi
+\chardef\minimhooksloaded = \catcode`\:
+\catcode`\: = 11
+
+\input minim-alloc
+
+% 1 the pre_shipout callback
+
+\newbox\minim:shipout:box \let\minim:shipout:orig = \shipout
+\def\minim:shipout:do{\minim:shipout:orig\box\minim:shipout:box}
+\directlua{require('minim-hooks')} \let\shipout\minim:shipout
+
+% 1 invisibly adding to \everypar
+
+\let\minim:everypar = \everypar
+\newtoks\minim:ateverypar
+\newtoks\minim:atnextpar
+\newtoks\everypar \everypar\minim:everypar
+\minim:everypar\expandafter{\expandafter
+ \minim:changeparindent
+ % expansion makes this process repeatable
+ \expandafter\the\everypar
+ \the\minim:ateverypar
+ \minim:atnextpar\expandafter
+ {\expandafter}\the\minim:atnextpar}
+\let\minim:changeparindent = \relax % as of yet unused
+
+% There is no need for the following.
+
+%\let\minim:par = \par
+%\newtoks\minim:aftereverypar
+%\protected\def\par{\ifhmode \unskip
+% \the\minim:aftereverypar \fi \minim:par}
+
+\catcode`\: = \minimhooksloaded
+
+
diff --git a/macros/luatex/generic/minim/minim-lmodern.tex b/macros/luatex/generic/minim/minim-lmodern.tex
new file mode 100644
index 0000000000..61bc0054e9
--- /dev/null
+++ b/macros/luatex/generic/minim/minim-lmodern.tex
@@ -0,0 +1,28 @@
+
+% This file, used in the minim and minim-mp formats, replaces the named fonts
+% from plain.tex with latin modern equivalents.
+
+\ifdefined\minimlmodernloaded
+ \message{(skipped)}
+ \expandafter\endinput\fi
+\chardef\minimlmodernloaded=\catcode`\:
+\catcode`\:=11
+
+\def\preloadfont#1#2#3{\def#1{\initfontloader\font#1{#2}at#3#1}}
+\def\initfontloader{\input luaotfload.sty \let\initfontloader=\relax}
+
+\preloadfont \tenrm {Latin Modern Roman:script=latn;+liga;+kern;+dlig}{10pt}
+\preloadfont \tenit {Latin Modern Roman/I:script=latn;+liga;+kern;+dlig}{10pt}
+\preloadfont \tenbf {Latin Modern Roman/B:script=latn;+liga;+kern;+dlig}{10pt}
+\preloadfont \tensl {Latin Modern Roman Slanted:script=latn;+liga;+kern;+dlig}{10pt}
+\preloadfont \tentt {Latin Modern Mono:script=latn;+liga;+kern;+dlig}{10pt}
+
+\preloadfont\tenmath {Latin Modern Math:mode=base;script=math;ssty=0}{10pt}
+\preloadfont\tenmaths {Latin Modern Math:mode=base;script=math;ssty=1}{7pt}
+\preloadfont\tenmathss {Latin Modern Math:mode=base;script=math;ssty=2}{5pt}
+
+\toksapp\everyjob{\tenmath\tenmaths\tenmathss\tenrm
+ \textfont0=\tenmath\scriptfont0=\tenmaths\scriptscriptfont0=\tenmathss}
+
+\catcode`\:=\minimlmodernloaded
+
diff --git a/macros/luatex/generic/minim/minim-plain.tex b/macros/luatex/generic/minim/minim-plain.tex
new file mode 100644
index 0000000000..85fd802b8b
--- /dev/null
+++ b/macros/luatex/generic/minim/minim-plain.tex
@@ -0,0 +1,786 @@
+
+% This is a stripped-down version of plain TeX.
+%
+% It follows plain.tex version 3.141592653.
+%
+% The following has been removed:
+% - All fonts and font switches
+% - \fmtname and \fmtversion
+% - \mathcode, \delcode, \mathchardef, \mathaccent and \delimiter settings
+% - Most math-related macros
+% - Loading hyphen.tex
+
+\catcode`\{=1 % left brace is begin-group character
+\catcode`\}=2 % right brace is end-group character
+\catcode`\$=3 % dollar sign is math shift
+\catcode`\&=4 % ampersand is alignment tab
+\catcode`\#=6 % hash mark is macro parameter character
+\catcode`\^=7 \catcode`\^^K=7 % circumflex and uparrow are for superscripts
+\catcode`\_=8 \catcode`\^^A=8 % underline and downarrow are for subscripts
+\catcode`\^^I=10 % ascii tab is a blank space
+\chardef\active=13 \catcode`\~=\active % tilde is active
+\catcode`\^^L=\active \outer\def^^L{\par} % ascii form-feed is "\outer\par"
+
+\message{Preloading the plain format: codes,}
+
+% We had to define the \catcodes right away, before the message line,
+% since \message uses the { and } characters.
+% When INITEX (the TeX initializer) starts up,
+% it has defined the following \catcode values:
+% \catcode`\^^@=9 % ascii null is ignored
+% \catcode`\^^M=5 % ascii return is end-line
+% \catcode`\\=0 % backslash is TeX escape character
+% \catcode`\%=14 % percent sign is comment character
+% \catcode`\ =10 % ascii space is blank space
+% \catcode`\^^?=15 % ascii delete is invalid
+% \catcode`\A=11 ... \catcode`\Z=11 % uppercase letters
+% \catcode`\a=11 ... \catcode`\z=11 % lowercase letters
+% all others are type 12 (other)
+
+% Here is a list of the characters that have been specially catcoded:
+\def\dospecials{\do\ \do\\\do\{\do\}\do\$\do\&%
+ \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~}
+% (not counting ascii null, tab, linefeed, formfeed, return, delete)
+% Each symbol in the list is preceded by \do, which can be defined
+% if you want to do something to every item in the list.
+
+% We make @ signs act like letters, temporarily, to avoid conflict
+% between user names and internal control sequences of plain format.
+\catcode`@=11
+
+% INITEX sets \uccode`x=`X and \uccode `X=`X for all letters x,
+% and \lccode`x=`x, \lccode`X=`x; all other values are zero.
+% No changes to those tables are needed in plain TeX format.
+
+% INITEX sets \sfcode x=1000 for all x, except that \sfcode`X=999
+% for uppercase letters. The following changes are needed:
+\sfcode`\)=0 \sfcode`\'=0 \sfcode`\]=0
+% The \nonfrenchspacing macro will make further changes to \sfcode values.
+
+% To make the plain macros more efficient in time and space,
+% several constant values are declared here as control sequences.
+% If they were changed, anything could happen; so they are private symbols.
+\chardef\@ne=1
+\chardef\tw@=2
+\chardef\thr@@=3
+\chardef\sixt@@n=16
+\chardef\@cclv=255
+\mathchardef\@cclvi=256
+\mathchardef\@m=1000
+\mathchardef\@M=10000
+\mathchardef\@MM=20000
+
+% Allocation of registers
+
+% Here are macros for the automatic allocation of \count, \box, \dimen,
+% \skip, \muskip, and \toks registers, as well as \read and \write
+% stream numbers, \fam codes, \language codes, and \insert numbers.
+
+\message{registers,}
+
+% When a register is used only temporarily, it need not be allocated;
+% grouping can be used, making the value previously in the register return
+% after the close of the group. The main use of these macros is for
+% registers that are defined by one macro and used by others, possibly at
+% different nesting levels. All such registers should be defined through
+% these macros; otherwise conflicts may occur, especially when two or more
+% macro packages are being used at once.
+
+% The following counters are reserved:
+% 0 to 9 page numbering
+% 10 count allocation
+% 11 dimen allocation
+% 12 skip allocation
+% 13 muskip allocation
+% 14 box allocation
+% 15 toks allocation
+% 16 read file allocation
+% 17 write file allocation
+% 18 math family allocation
+% 19 language allocation
+% 20 insert allocation
+% 21 the most recently allocated number
+% 22 constant -1
+% New counters are allocated starting with 23, 24, etc. Other registers are
+% allocated starting with 10. This leaves 0 through 9 for the user to play
+% with safely, except that counts 0 to 9 are considered to be the page and
+% subpage numbers (since they are displayed during output). In this scheme,
+% \count 10 always contains the number of the highest-numbered counter that
+% has been allocated, \count 14 the highest-numbered box, etc.
+% Inserts are given numbers 254, 253, etc., since they require a \count,
+% \dimen, \skip, and \box all with the same number; \count 20 contains the
+% lowest-numbered insert that has been allocated. Of course, \box255 is
+% reserved for \output; \count255, \dimen255, and \skip255 can be used freely.
+
+% It is recommended that macro designers always use
+% \global assignments with respect to registers numbered 1, 3, 5, 7, 9, and
+% always non-\global assignments with respect to registers 0, 2, 4, 6, 8, 255.
+% This will prevent ``save stack buildup'' that might otherwise occur.
+
+\count10=22 % allocates \count registers 23, 24, ...
+\count11=9 % allocates \dimen registers 10, 11, ...
+\count12=9 % allocates \skip registers 10, 11, ...
+\count13=9 % allocates \muskip registers 10, 11, ...
+\count14=9 % allocates \box registers 10, 11, ...
+\count15=9 % allocates \toks registers 10, 11, ...
+\count16=-1 % allocates input streams 0, 1, ...
+\count17=-1 % allocates output streams 0, 1, ...
+\count18=3 % allocates math families 4, 5, ...
+\count19=0 % allocates \language codes 1, 2, ...
+\count20=255 % allocates insertions 254, 253, ...
+\countdef\insc@unt=20 % the insertion counter
+\countdef\allocationnumber=21 % the most recent allocation
+\countdef\m@ne=22 \m@ne=-1 % a handy constant
+\def\wlog{\immediate\write\m@ne} % write on log file (only)
+
+% Here are abbreviations for the names of scratch registers
+% that don't need to be allocated.
+
+\countdef\count@=255
+\dimendef\dimen@=0
+\dimendef\dimen@i=1 % global only
+\dimendef\dimen@ii=2
+\skipdef\skip@=0
+\toksdef\toks@=0
+
+% Now, we define \newcount, \newbox, etc. so that you can say \newcount\foo
+% and \foo will be defined (with \countdef) to be the next counter.
+% To find out which counter \foo is, you can look at \allocationnumber.
+% Since there's no \boxdef command, \chardef is used to define a \newbox,
+% \newinsert, \newfam, and so on.
+
+\outer\def\newcount{\alloc@0\count\countdef\insc@unt}
+\outer\def\newdimen{\alloc@1\dimen\dimendef\insc@unt}
+\outer\def\newskip{\alloc@2\skip\skipdef\insc@unt}
+\outer\def\newmuskip{\alloc@3\muskip\muskipdef\@cclvi}
+\outer\def\newbox{\alloc@4\box\chardef\insc@unt}
+\let\newtoks=\relax % we do this to allow plain.tex to be read in twice
+\outer\def\newhelp#1#2{\newtoks#1#1\expandafter{\csname#2\endcsname}}
+\outer\def\newtoks{\alloc@5\toks\toksdef\@cclvi}
+\outer\def\newread{\alloc@6\read\chardef\sixt@@n}
+\outer\def\newwrite{\alloc@7\write\chardef\sixt@@n}
+\outer\def\newfam{\alloc@8\fam\chardef\sixt@@n}
+\outer\def\newlanguage{\alloc@9\language\chardef\@cclvi}
+\def\alloc@#1#2#3#4#5{\global\advance\count1#1by\@ne
+ \ch@ck#1#4#2% make sure there's still room
+ \allocationnumber=\count1#1%
+ \global#3#5=\allocationnumber
+ \wlog{\string#5=\string#2\the\allocationnumber}}
+\outer\def\newinsert#1{\global\advance\insc@unt by\m@ne
+ \ch@ck0\insc@unt\count
+ \ch@ck1\insc@unt\dimen
+ \ch@ck2\insc@unt\skip
+ \ch@ck4\insc@unt\box
+ \allocationnumber=\insc@unt
+ \global\chardef#1=\allocationnumber
+ \wlog{\string#1=\string\insert\the\allocationnumber}}
+\def\ch@ck#1#2#3{\ifnum\count1#1<#2%
+ \else\errmessage{No room for a new #3}\fi}
+
+% Here are some examples of allocation.
+\newdimen\maxdimen \maxdimen=16383.99999pt % the largest legal <dimen>
+\newskip\hideskip \hideskip=-1000pt plus 1fill % negative but can grow
+\newskip\centering \centering=0pt plus 1000pt minus 1000pt
+\newdimen\p@ \p@=1pt % this saves macro space and time
+\newdimen\z@ \z@=0pt % can be used both for 0pt and 0
+\newskip\z@skip \z@skip=0pt plus0pt minus0pt
+\newbox\voidb@x % permanently void box register
+
+% And here's a different sort of allocation:
+% For example, \newif\iffoo creates \footrue, \foofalse to go with \iffoo.
+\outer\def\newif#1{\count@\escapechar \escapechar\m@ne
+ \expandafter\expandafter\expandafter
+ \def\@if#1{true}{\let#1=\iftrue}%
+ \expandafter\expandafter\expandafter
+ \def\@if#1{false}{\let#1=\iffalse}%
+ \@if#1{false}\escapechar\count@} % the condition starts out false
+\def\@if#1#2{\csname\expandafter\if@\string#1#2\endcsname}
+{\uccode`1=`i \uccode`2=`f \uppercase{\gdef\if@12{}}} % `if' is required
+
+% Assign initial values to TeX's parameters
+
+\message{parameters,}
+
+% All of TeX's numeric parameters are listed here,
+% but the code is commented out if no special value needs to be set.
+% INITEX makes all parameters zero except where noted.
+
+\pretolerance=100
+\tolerance=200 % INITEX sets this to 10000
+\hbadness=1000
+\vbadness=1000
+\linepenalty=10
+\hyphenpenalty=50
+\exhyphenpenalty=50
+\binoppenalty=700
+\relpenalty=500
+\clubpenalty=150
+\widowpenalty=150
+\displaywidowpenalty=50
+\brokenpenalty=100
+\predisplaypenalty=10000
+% \postdisplaypenalty=0
+% \interlinepenalty=0
+% \floatingpenalty=0, set during \insert
+% \outputpenalty=0, set before TeX enters \output
+\doublehyphendemerits=10000
+\finalhyphendemerits=5000
+\adjdemerits=10000
+% \looseness=0, cleared by TeX after each paragraph
+% \pausing=0
+% \holdinginserts=0
+% \tracingonline=0
+% \tracingmacros=0
+% \tracingstats=0
+% \tracingparagraphs=0
+% \tracingpages=0
+% \tracingoutput=0
+\tracinglostchars=1
+% \tracingcommands=0
+% \tracingrestores=0
+% \language=0
+\uchyph=1
+% \lefthyphenmin=2 \righthyphenmin=3 set below
+% \globaldefs=0
+% \maxdeadcycles=25 % INITEX does this
+% \hangafter=1 % INITEX does this, also TeX after each paragraph
+% \fam=0
+% \mag=1000 % INITEX does this
+% \escapechar=`\\ % INITEX does this
+\defaulthyphenchar=`\-
+\defaultskewchar=-1
+% \endlinechar=`\^^M % INITEX does this
+\newlinechar=-1
+\delimiterfactor=901
+% \time=now % TeX does this at beginning of job
+% \day=now % TeX does this at beginning of job
+% \month=now % TeX does this at beginning of job
+% \year=now % TeX does this at beginning of job
+\showboxbreadth=5
+\showboxdepth=3
+\errorcontextlines=5
+
+\hfuzz=0.1pt
+\vfuzz=0.1pt
+\overfullrule=5pt
+\hsize=6.5in
+\vsize=8.9in
+\maxdepth=4pt
+\splitmaxdepth=\maxdimen
+\boxmaxdepth=\maxdimen
+% \lineskiplimit=0pt, changed by \normalbaselines
+\delimitershortfall=5pt
+\nulldelimiterspace=1.2pt
+\scriptspace=0.5pt
+% \mathsurround=0pt
+% \predisplaysize=0pt, set before TeX enters $$
+% \displaywidth=0pt, set before TeX enters $$
+% \displayindent=0pt, set before TeX enters $$
+\parindent=20pt
+% \hangindent=0pt, zeroed by TeX after each paragraph
+% \hoffset=0pt
+% \voffset=0pt
+
+% \baselineskip=0pt, changed by \normalbaselines
+% \lineskip=0pt, changed by \normalbaselines
+\parskip=0pt plus 1pt
+\abovedisplayskip=12pt plus 3pt minus 9pt
+\abovedisplayshortskip=0pt plus 3pt
+\belowdisplayskip=12pt plus 3pt minus 9pt
+\belowdisplayshortskip=7pt plus 3pt minus 4pt
+% \leftskip=0pt
+% \rightskip=0pt
+\topskip=10pt
+\splittopskip=10pt
+% \tabskip=0pt
+% \spaceskip=0pt
+% \xspaceskip=0pt
+\parfillskip=0pt plus 1fil
+
+\thinmuskip=3mu
+\medmuskip=4mu plus 2mu minus 4mu
+\thickmuskip=5mu plus 5mu
+
+% We also define special registers that function like parameters:
+\newskip\smallskipamount \smallskipamount=3pt plus 1pt minus 1pt
+\newskip\medskipamount \medskipamount=6pt plus 2pt minus 2pt
+\newskip\bigskipamount \bigskipamount=12pt plus 4pt minus 4pt
+\newskip\normalbaselineskip \normalbaselineskip=12pt
+\newskip\normallineskip \normallineskip=1pt
+\newdimen\normallineskiplimit \normallineskiplimit=0pt
+\newdimen\jot \jot=3pt
+\newcount\interdisplaylinepenalty \interdisplaylinepenalty=100
+\newcount\interfootnotelinepenalty \interfootnotelinepenalty=100
+
+% Definitions for preloaded fonts
+
+\def\magstephalf{1095 }
+\def\magstep#1{\ifcase#1 \@m\or 1200\or 1440\or 1728\or 2074\or 2488\fi\relax}
+
+\message{fonts (omitted),}
+
+\def\rm{\fam\z@\tenrm}
+\def\mit{\fam\@ne}
+\def\cal{\fam\tw@}
+\def\it{\fam4\tenit}
+\def\sl{\fam5\tensl}
+\def\bf{\fam6\tenbf}
+\def\tt{\fam7\tentt}
+
+% Macros for setting ordinary text
+\message{macros,}
+
+\def\frenchspacing{\sfcode`\.\@m \sfcode`\?\@m \sfcode`\!\@m
+ \sfcode`\:\@m \sfcode`\;\@m \sfcode`\,\@m}
+\def\nonfrenchspacing{\sfcode`\.3000\sfcode`\?3000\sfcode`\!3000%
+ \sfcode`\:2000\sfcode`\;1500\sfcode`\,1250 }
+
+\def\normalbaselines{\lineskip\normallineskip
+ \baselineskip\normalbaselineskip \lineskiplimit\normallineskiplimit}
+
+\def\^^M{\ } % control <return> = control <space>
+\def\^^I{\ } % same for <tab>
+
+\def\lq{`} \def\rq{'}
+\def\lbrack{[} \def\rbrack{]}
+
+\let\endgraf=\par \let\endline=\cr
+
+\def\space{ }
+\def\empty{}
+\def\null{\hbox{}}
+
+\let\bgroup={ \let\egroup=}
+
+% In \obeylines, we say `\let^^M=\par' instead of `\def^^M{\par}'
+% since this allows, for example, `\let\par=\cr \obeylines \halign{...'
+{\catcode`\^^M=\active % these lines must end with %
+ \gdef\obeylines{\catcode`\^^M\active \let^^M\par}%
+ \global\let^^M\par} % this is in case ^^M appears in a \write
+\def\obeyspaces{\catcode`\ \active}
+{\obeyspaces\global\let =\space}
+
+\def\loop#1\repeat{\def\body{#1}\iterate}
+\def\iterate{\body \let\next\iterate \else\let\next\relax\fi \next}
+\let\repeat=\fi % this makes \loop...\if...\repeat skippable
+
+\def\thinspace{\kern .16667em }
+\def\negthinspace{\kern-.16667em }
+\def\enspace{\kern.5em }
+
+\def\enskip{\hskip.5em\relax}
+\def\quad{\hskip1em\relax}
+\def\qquad{\hskip2em\relax}
+
+\def\smallskip{\vskip\smallskipamount}
+\def\medskip{\vskip\medskipamount}
+\def\bigskip{\vskip\bigskipamount}
+
+\def\nointerlineskip{\prevdepth-1000\p@}
+\def\offinterlineskip{\baselineskip-1000\p@
+ \lineskip\z@ \lineskiplimit\maxdimen}
+
+\def\topglue{\nointerlineskip\vglue-\topskip\vglue} % for top of page
+\def\vglue{\afterassignment\vgl@\skip@=}
+\def\vgl@{\par \dimen@\prevdepth \hrule height\z@
+ \nobreak\vskip\skip@ \prevdepth\dimen@}
+\def\hglue{\afterassignment\hgl@\skip@=}
+\def\hgl@{\leavevmode \count@\spacefactor \vrule width\z@
+ \nobreak\hskip\skip@ \spacefactor\count@}
+
+\def~{\penalty\@M \ } % tie
+\def\slash{/\penalty\exhyphenpenalty} % a `/' that acts like a `-'
+
+\def\break{\penalty-\@M}
+\def\nobreak{\penalty \@M}
+\def\allowbreak{\penalty \z@}
+
+\def\filbreak{\par\vfil\penalty-200\vfilneg}
+\def\goodbreak{\par\penalty-500 }
+\def\eject{\par\break}
+\def\supereject{\par\penalty-\@MM}
+
+\def\removelastskip{\ifdim\lastskip=\z@\else\vskip-\lastskip\fi}
+\def\smallbreak{\par\ifdim\lastskip<\smallskipamount
+ \removelastskip\penalty-50\smallskip\fi}
+\def\medbreak{\par\ifdim\lastskip<\medskipamount
+ \removelastskip\penalty-100\medskip\fi}
+\def\bigbreak{\par\ifdim\lastskip<\bigskipamount
+ \removelastskip\penalty-200\bigskip\fi}
+
+\def\line{\hbox to\hsize}
+\def\leftline#1{\line{#1\hss}}
+\def\rightline#1{\line{\hss#1}}
+\def\centerline#1{\line{\hss#1\hss}}
+
+\def\rlap#1{\hbox to\z@{#1\hss}}
+\def\llap#1{\hbox to\z@{\hss#1}}
+
+\def\m@th{\mathsurround\z@}
+\def\underbar#1{$\setbox\z@\hbox{#1}\dp\z@\z@
+ \m@th \underline{\box\z@}$}
+
+\newbox\strutbox
+\setbox\strutbox=\hbox{\vrule height8.5pt depth3.5pt width\z@}
+\def\strut{\relax\ifmmode\copy\strutbox\else\unhcopy\strutbox\fi}
+
+\def\hidewidth{\hskip\hideskip} % for alignment entries that can stick out
+\def\ialign{\everycr{}\tabskip\z@skip\halign} % initialized \halign
+\newcount\mscount
+\def\multispan#1{\omit \mscount#1\relax
+ \loop\ifnum\mscount>\@ne \sp@n\repeat}
+\def\sp@n{\span\omit\advance\mscount\m@ne}
+
+\newif\ifus@ \newif\if@cr
+\newbox\tabs \newbox\tabsyet \newbox\tabsdone
+
+\def\cleartabs{\global\setbox\tabsyet\null \setbox\tabs\null}
+\def\settabs{\setbox\tabs\null \futurelet\next\sett@b}
+\let\+=\relax % in case this file is being read in twice
+\def\sett@b{\ifx\next\+\def\nxt{\afterassignment\s@tt@b\let\nxt}%
+ \else\let\nxt\s@tcols\fi \let\next\relax \nxt}
+\def\s@tt@b{\let\nxt\relax \us@false\m@ketabbox}
+\def\tabalign{\us@true\m@ketabbox} % non-\outer version of \+
+\outer\def\+{\tabalign}
+\def\s@tcols#1\columns{\count@#1\dimen@\hsize
+ \loop\ifnum\count@>\z@ \@nother \repeat}
+\def\@nother{\dimen@ii\dimen@ \divide\dimen@ii\count@
+ \setbox\tabs\hbox{\hbox to\dimen@ii{}\unhbox\tabs}%
+ \advance\dimen@-\dimen@ii \advance\count@\m@ne}
+
+\def\m@ketabbox{\begingroup
+ \global\setbox\tabsyet\copy\tabs
+ \global\setbox\tabsdone\null
+ \def\cr{\@crtrue\crcr\egroup\egroup
+ \ifus@\unvbox\z@\lastbox\fi\endgroup
+ \setbox\tabs\hbox{\unhbox\tabsyet\unhbox\tabsdone}}%
+ \setbox\z@\vbox\bgroup\@crfalse
+ \ialign\bgroup&\t@bbox##\t@bb@x\crcr}
+
+\def\t@bbox{\setbox\z@\hbox\bgroup}
+\def\t@bb@x{\if@cr\egroup % now \box\z@ holds the column
+ \else\hss\egroup \global\setbox\tabsyet\hbox{\unhbox\tabsyet
+ \global\setbox\@ne\lastbox}% now \box\@ne holds its size
+ \ifvoid\@ne\global\setbox\@ne\hbox to\wd\z@{}%
+ \else\setbox\z@\hbox to\wd\@ne{\unhbox\z@}\fi
+ \global\setbox\tabsdone\hbox{\box\@ne\unhbox\tabsdone}\fi
+ \box\z@}
+
+\def\hang{\hangindent\parindent}
+\def\textindent#1{\indent\llap{#1\enspace}\ignorespaces}
+\def\item{\par\hang\textindent}
+\def\itemitem{\par\indent \hangindent2\parindent \textindent}
+\def\narrower{\advance\leftskip\parindent
+ \advance\rightskip\parindent}
+
+\outer\def\beginsection#1\par{\vskip\z@ plus.3\vsize\penalty-250
+ \vskip\z@ plus-.3\vsize\bigskip\vskip\parskip
+ \message{#1}\leftline{\bf#1}\nobreak\smallskip\noindent}
+\outer\def\proclaim #1. #2\par{\medbreak
+ \noindent{\bf#1.\enspace}{\sl#2\par}%
+ \ifdim\lastskip<\medskipamount \removelastskip\penalty55\medskip\fi}
+
+\def\raggedright{\rightskip\z@ plus2em \spaceskip.3333em \xspaceskip.5em\relax}
+\def\ttraggedright{\tt\rightskip\z@ plus2em\relax} % for use with \tt only
+
+\chardef\%=`\%
+\chardef\&=`\&
+\chardef\#=`\#
+\chardef\$=`\$
+
+\def\leavevmode{\unhbox\voidb@x} % begins a paragraph, if necessary
+\def\_{\leavevmode \kern.06em \vbox{\hrule width.3em}}
+\def\AA{\leavevmode\setbox0\hbox{!}\dimen@\ht0\advance\dimen@-1ex%
+ \rlap{\raise.67\dimen@\hbox{\char'27}}A}
+
+\def\mathhexbox#1#2#3{\leavevmode
+ \hbox{$\m@th \mathchar"#1#2#3$}}
+
+\def\oalign#1{\leavevmode\vtop{\baselineskip\z@skip \lineskip.25ex%
+ \ialign{##\crcr#1\crcr}}} \def\o@lign{\lineskiplimit\z@ \oalign}
+\def\ooalign{\lineskiplimit-\maxdimen \oalign} % chars over each other
+{\catcode`p=12 \catcode`t=12 \gdef\\#1pt{#1}} \let\getf@ctor=\\
+\def\sh@ft#1{\dimen@#1\kern\expandafter\getf@ctor\the\fontdimen1\font
+ \dimen@} % kern by #1 times the current slant
+\def\d#1{{\o@lign{\relax#1\crcr\hidewidth\sh@ft{-1ex}.\hidewidth}}}
+\def\b#1{{\o@lign{\relax#1\crcr\hidewidth\sh@ft{-3ex}%
+ \vbox to.2ex{\hbox{\char22}\vss}\hidewidth}}}
+\def\c#1{{\setbox\z@\hbox{#1}\ifdim\ht\z@=1ex\accent24 #1%
+ \else\ooalign{\unhbox\z@\crcr\hidewidth\char24\hidewidth}\fi}}
+\def\copyright{{\ooalign{\hfil\raise.07ex\hbox{c}\hfil\crcr\Orb}}}
+
+\def\dots{\relax\ifmmode\ldots\else$\m@th\ldots\,$\fi}
+\def\TeX{T\kern-.1667em\lower.5ex\hbox{E}\kern-.125emX}
+
+\def\`#1{{\accent18 #1}}
+\def\'#1{{\accent19 #1}}
+\def\v#1{{\accent20 #1}} \let\^^_=\v
+\def\u#1{{\accent21 #1}} \let\^^S=\u
+\def\=#1{{\accent22 #1}}
+\def\^#1{{\accent94 #1}} \let\^^D=\^
+\def\.#1{{\accent95 #1}}
+\def\H#1{{\accent"7D #1}}
+\def\~#1{{\accent"7E #1}}
+\def\"#1{{\accent"7F #1}}
+\def\t#1{{\edef\next{\the\font}\the\textfont1\accent"7F\next#1}}
+
+\def\hrulefill{\leaders\hrule\hfill}
+\def\dotfill{\cleaders\hbox{$\m@th \mkern1.5mu.\mkern1.5mu$}\hfill}
+\def\rightarrowfill{$\m@th\smash-\mkern-7mu%
+ \cleaders\hbox{$\mkern-2mu\smash-\mkern-2mu$}\hfill
+ \mkern-7mu\mathord\rightarrow$}
+\def\leftarrowfill{$\m@th\mathord\leftarrow\mkern-7mu%
+ \cleaders\hbox{$\mkern-2mu\smash-\mkern-2mu$}\hfill
+ \mkern-7mu\smash-$}
+\mathchardef\braceld="37A \mathchardef\bracerd="37B
+\mathchardef\bracelu="37C \mathchardef\braceru="37D
+\def\downbracefill{$\m@th \setbox\z@\hbox{$\braceld$}%
+ \braceld\leaders\vrule height\ht\z@ depth\z@\hfill\braceru
+ \bracelu\leaders\vrule height\ht\z@ depth\z@\hfill\bracerd$}
+\def\upbracefill{$\m@th \setbox\z@\hbox{$\braceld$}%
+ \bracelu\leaders\vrule height\ht\z@ depth\z@\hfill\bracerd
+ \braceld\leaders\vrule height\ht\z@ depth\z@\hfill\braceru$}
+
+\outer\def\bye{\par\vfill\supereject\end}
+
+% Macros for math setting
+\message{math definitions,}
+
+\let\sp=^ \let\sb=_
+\def\,{\mskip\thinmuskip}
+\def\>{\mskip\medmuskip}
+\def\;{\mskip\thickmuskip}
+\def\!{\mskip-\thinmuskip}
+\def\*{\discretionary{\thinspace\the\textfont2\char2}{}{}}
+{\catcode`\'=\active \gdef'{^\bgroup\prim@s}}
+\def\prim@s{\prime\futurelet\next\pr@m@s}
+\def\pr@m@s{\ifx'\next\let\nxt\pr@@@s \else\ifx^\next\let\nxt\pr@@@t
+ \else\let\nxt\egroup\fi\fi \nxt}
+\def\pr@@@s#1{\prim@s} \def\pr@@@t#1#2{#2\egroup}
+{\catcode`\^^Z=\active \gdef^^Z{\not=}} % ^^Z is like \ne in math
+
+{\catcode`\_=\active \global\let_=\_} % _ in math is either subscript or \_
+
+\def\joinrel{\mathrel{\mkern-3mu}}
+\def\relbar{\mathrel{\smash-}} % \smash, because - has the same height as +
+\def\Relbar{\mathrel=}
+\def\bowtie{\mathrel\triangleright\joinrel\mathrel\triangleleft}
+\def\models{\mathrel|\joinrel=}
+\def\Longrightarrow{\Relbar\joinrel\Rightarrow}
+\def\longrightarrow{\relbar\joinrel\rightarrow}
+\def\longleftarrow{\leftarrow\joinrel\relbar}
+\def\Longleftarrow{\Leftarrow\joinrel\Relbar}
+\def\longmapsto{\mapstochar\longrightarrow}
+\def\longleftrightarrow{\leftarrow\joinrel\rightarrow}
+\def\Longleftrightarrow{\Leftarrow\joinrel\Rightarrow}
+\def\iff{\;\Longleftrightarrow\;}
+
+\def\ldots{\mathinner{\ldotp\ldotp\ldotp}}
+\def\cdots{\mathinner{\cdotp\cdotp\cdotp}}
+
+\def\skew#1#2#3{{\muskip\z@#1mu\divide\muskip\z@\tw@ \mkern\muskip\z@
+ #2{\mkern-\muskip\z@{#3}\mkern\muskip\z@}\mkern-\muskip\z@}{}}
+
+\def\bigl{\mathopen\big}
+\def\bigm{\mathrel\big}
+\def\bigr{\mathclose\big}
+\def\Bigl{\mathopen\Big}
+\def\Bigm{\mathrel\Big}
+\def\Bigr{\mathclose\Big}
+\def\biggl{\mathopen\bigg}
+\def\biggm{\mathrel\bigg}
+\def\biggr{\mathclose\bigg}
+\def\Biggl{\mathopen\Bigg}
+\def\Biggm{\mathrel\Bigg}
+\def\Biggr{\mathclose\Bigg}
+\def\big#1{{\hbox{$\left#1\vbox to8.5\p@{}\right.\n@space$}}}
+\def\Big#1{{\hbox{$\left#1\vbox to11.5\p@{}\right.\n@space$}}}
+\def\bigg#1{{\hbox{$\left#1\vbox to14.5\p@{}\right.\n@space$}}}
+\def\Bigg#1{{\hbox{$\left#1\vbox to17.5\p@{}\right.\n@space$}}}
+\def\n@space{\nulldelimiterspace\z@ \m@th}
+
+\def\choose{\atopwithdelims()}
+\def\brack{\atopwithdelims[]}
+\def\brace{\atopwithdelims\{\}}
+
+\def\mathpalette#1#2{\mathchoice{#1\displaystyle{#2}}%
+ {#1\textstyle{#2}}{#1\scriptstyle{#2}}{#1\scriptscriptstyle{#2}}}
+\newif\ifv@ \newif\ifh@
+\def\vphantom{\v@true\h@false\ph@nt}
+\def\hphantom{\v@false\h@true\ph@nt}
+\def\phantom{\v@true\h@true\ph@nt}
+\def\ph@nt{\ifmmode\def\next{\mathpalette\mathph@nt}%
+ \else\let\next\makeph@nt\fi\next}
+\def\makeph@nt#1{\setbox\z@\hbox{#1}\finph@nt}
+\def\mathph@nt#1#2{\setbox\z@\hbox{$\m@th#1{#2}$}\finph@nt}
+\def\finph@nt{\setbox\tw@\null
+ \ifv@ \ht\tw@\ht\z@ \dp\tw@\dp\z@\fi
+ \ifh@ \wd\tw@\wd\z@\fi \box\tw@}
+\def\mathstrut{\vphantom(}
+\def\smash{\relax % \relax, in case this comes first in \halign
+ \ifmmode\def\next{\mathpalette\mathsm@sh}\else\let\next\makesm@sh
+ \fi\next}
+\def\makesm@sh#1{\setbox\z@\hbox{#1}\finsm@sh}
+\def\mathsm@sh#1#2{\setbox\z@\hbox{$\m@th#1{#2}$}\finsm@sh}
+\def\finsm@sh{\ht\z@\z@ \dp\z@\z@ \box\z@}
+
+\def\cong{\mathrel{\mathpalette\@vereq\sim}} % congruence sign
+\def\@vereq#1#2{\lower.5\p@\vbox{\lineskiplimit\maxdimen\lineskip-.5\p@
+ \ialign{$\m@th#1\hfil##\hfil$\crcr#2\crcr=\crcr}}}
+\def\notin{\mathrel{\mathpalette\c@ncel\in}}
+\def\c@ncel#1#2{\m@th\ooalign{$\hfil#1\mkern1mu/\hfil$\crcr$#1#2$}}
+\def\rightleftharpoons{\mathrel{\mathpalette\rlh@{}}}
+\def\rlh@#1{\vcenter{\m@th\hbox{\ooalign{\raise2pt
+ \hbox{$#1\rightharpoonup$}\crcr
+ $#1\leftharpoondown$}}}}
+\def\buildrel#1\over#2{\mathrel{\mathop{\kern\z@#2}\limits^{#1}}}
+\def\doteq{\buildrel\textstyle.\over=}
+
+\def\cases#1{\left\{\,\vcenter{\normalbaselines\m@th
+ \ialign{$##\hfil$&\quad##\hfil\crcr#1\crcr}}\right.}
+\def\matrix#1{\null\,\vcenter{\normalbaselines\m@th
+ \ialign{\hfil$##$\hfil&&\quad\hfil$##$\hfil\crcr
+ \mathstrut\crcr\noalign{\kern-\baselineskip}
+ #1\crcr\mathstrut\crcr\noalign{\kern-\baselineskip}}}\,}
+\def\pmatrix#1{\left(\matrix{#1}\right)}
+\newdimen\p@renwd
+\setbox0=\hbox{\kern8.75002pt} \p@renwd=\wd0 % width of the big left (
+\def\bordermatrix#1{\begingroup \m@th
+ \setbox\z@\vbox{\def\cr{\crcr\noalign{\kern2\p@\global\let\cr\endline}}%
+ \ialign{$##$\hfil\kern2\p@\kern\p@renwd&\thinspace\hfil$##$\hfil
+ &&\quad\hfil$##$\hfil\crcr
+ \omit\strut\hfil\crcr\noalign{\kern-\baselineskip}%
+ #1\crcr\omit\strut\cr}}%
+ \setbox\tw@\vbox{\unvcopy\z@\global\setbox\@ne\lastbox}%
+ \setbox\tw@\hbox{\unhbox\@ne\unskip\global\setbox\@ne\lastbox}%
+ \setbox\tw@\hbox{$\kern\wd\@ne\kern-\p@renwd\left(\kern-\wd\@ne
+ \global\setbox\@ne\vbox{\box\@ne\kern2\p@}%
+ \vcenter{\kern-\ht\@ne\unvbox\z@\kern-\baselineskip}\,\right)$}%
+ \null\;\vbox{\kern\ht\@ne\box\tw@}\endgroup}
+
+\def\openup{\afterassignment\@penup\dimen@=}
+\def\@penup{\advance\lineskip\dimen@
+ \advance\baselineskip\dimen@
+ \advance\lineskiplimit\dimen@}
+\def\eqalign#1{\null\,\vcenter{\openup\jot\m@th
+ \ialign{\strut\hfil$\displaystyle{##}$&$\displaystyle{{}##}$\hfil
+ \crcr#1\crcr}}\,}
+\newif\ifdt@p
+\def\displ@y{\global\dt@ptrue\openup\jot\m@th
+ \everycr{\noalign{\ifdt@p \global\dt@pfalse \ifdim\prevdepth>-1000\p@
+ \vskip-\lineskiplimit \vskip\normallineskiplimit \fi
+ \else \penalty\interdisplaylinepenalty \fi}}}
+\def\@lign{\tabskip\z@skip\everycr{}} % restore inside \displ@y
+\def\displaylines#1{\displ@y \tabskip\z@skip
+ \halign{\hbox to\displaywidth{$\@lign\hfil\displaystyle##\hfil$}\crcr
+ #1\crcr}}
+\def\eqalignno#1{\displ@y \tabskip\centering
+ \halign to\displaywidth{\hfil$\@lign\displaystyle{##}$\tabskip\z@skip
+ &$\@lign\displaystyle{{}##}$\hfil\tabskip\centering
+ &\llap{$\@lign##$}\tabskip\z@skip\crcr
+ #1\crcr}}
+\def\leqalignno#1{\displ@y \tabskip\centering
+ \halign to\displaywidth{\hfil$\@lign\displaystyle{##}$\tabskip\z@skip
+ &$\@lign\displaystyle{{}##}$\hfil\tabskip\centering
+ &\kern-\displaywidth\rlap{$\@lign##$}\tabskip\displaywidth\crcr
+ #1\crcr}}
+
+% Definitions related to output
+
+\message{output routines,}
+
+\countdef\pageno=0 \pageno=1 % first page is number 1
+\newtoks\headline \headline={\hfil} % headline is normally blank
+\newtoks\footline \footline={\hss\tenrm\folio\hss}
+ % footline is normally a centered page number in font \tenrm
+\newif\ifr@ggedbottom
+\def\raggedbottom{\topskip 10\p@ plus60\p@ \r@ggedbottomtrue}
+\def\normalbottom{\topskip 10\p@ \r@ggedbottomfalse} % undoes \raggedbottom
+\def\folio{\ifnum\pageno<\z@ \romannumeral-\pageno \else\number\pageno \fi}
+\def\nopagenumbers{\footline{\hfil}} % blank out the footline
+\def\advancepageno{\ifnum\pageno<\z@ \global\advance\pageno\m@ne
+ \else\global\advance\pageno\@ne \fi} % increase |pageno|
+
+\newinsert\footins
+\def\footnote#1{\let\@sf\empty % parameter #2 (the text) is read later
+ \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\/\fi
+ #1\@sf\vfootnote{#1}}
+\def\vfootnote#1{\insert\footins\bgroup
+ \interlinepenalty\interfootnotelinepenalty
+ \splittopskip\ht\strutbox % top baseline for broken footnotes
+ \splitmaxdepth\dp\strutbox \floatingpenalty\@MM
+ \leftskip\z@skip \rightskip\z@skip \spaceskip\z@skip \xspaceskip\z@skip
+ \textindent{#1}\footstrut\futurelet\next\fo@t}
+\def\fo@t{\ifcat\bgroup\noexpand\next \let\next\f@@t
+ \else\let\next\f@t\fi \next}
+\def\f@@t{\bgroup\aftergroup\@foot\let\next}
+\def\f@t#1{#1\@foot}
+\def\@foot{\strut\egroup}
+\def\footstrut{\vbox to\splittopskip{}}
+\skip\footins=\bigskipamount % space added when footnote is present
+\count\footins=1000 % footnote magnification factor (1 to 1)
+\dimen\footins=8in % maximum footnotes per page
+
+\newinsert\topins
+\newif\ifp@ge \newif\if@mid
+\def\topinsert{\@midfalse\p@gefalse\@ins}
+\def\midinsert{\@midtrue\@ins}
+\def\pageinsert{\@midfalse\p@getrue\@ins}
+\skip\topins=\z@skip % no space added when a topinsert is present
+\count\topins=1000 % magnification factor (1 to 1)
+\dimen\topins=\maxdimen % no limit per page
+\def\@ins{\par\begingroup\setbox\z@\vbox\bgroup} % start a \vbox
+\def\endinsert{\egroup % finish the \vbox
+ \if@mid \dimen@\ht\z@ \advance\dimen@\dp\z@ \advance\dimen@12\p@
+ \advance\dimen@\pagetotal \advance\dimen@-\pageshrink
+ \ifdim\dimen@>\pagegoal\@midfalse\p@gefalse\fi\fi
+ \if@mid \bigskip\box\z@\bigbreak
+ \else\insert\topins{\penalty100 % floating insertion
+ \splittopskip\z@skip
+ \splitmaxdepth\maxdimen \floatingpenalty\z@
+ \ifp@ge \dimen@\dp\z@
+ \vbox to\vsize{\unvbox\z@\kern-\dimen@}% depth is zero
+ \else \box\z@\nobreak\bigskip\fi}\fi\endgroup}
+
+\output{\plainoutput}
+\def\plainoutput{\shipout\vbox{\makeheadline\pagebody\makefootline}%
+ \advancepageno
+ \ifnum\outputpenalty>-\@MM \else\dosupereject\fi}
+\def\pagebody{\vbox to\vsize{\boxmaxdepth\maxdepth \pagecontents}}
+\def\makeheadline{\vbox to\z@{\vskip-22.5\p@
+ \line{\vbox to8.5\p@{}\the\headline}\vss}\nointerlineskip}
+\def\makefootline{\baselineskip24\p@\lineskiplimit\z@\line{\the\footline}}
+\def\dosupereject{\ifnum\insertpenalties>\z@ % something is being held over
+ \line{}\kern-\topskip\nobreak\vfill\supereject\fi}
+
+\def\pagecontents{\ifvoid\topins\else\unvbox\topins\fi
+ \dimen@=\dp\@cclv \unvbox\@cclv % open up \box255
+ \ifvoid\footins\else % footnote info is present
+ \vskip\skip\footins
+ \footnoterule
+ \unvbox\footins\fi
+ \ifr@ggedbottom \kern-\dimen@ \vfil \fi}
+\def\footnoterule{\kern-3\p@
+ \hrule width 2truein \kern 2.6\p@} % the \hrule is .4pt high
+
+% Hyphenation, miscellaneous macros, and initial values for standard layout
+\message{hyphenation}
+
+\lefthyphenmin=2 \righthyphenmin=3 % disallow x- or -xx breaks
+
+\def\magnification{\afterassignment\m@g\count@}
+\def\m@g{\mag\count@
+ \hsize6.5truein\vsize8.9truein\dimen\footins8truein}
+
+\def\loggingall{\tracingcommands\tw@\tracingstats\tw@
+ \tracingpages\@ne\tracingoutput\@ne\tracinglostchars\@ne
+ \tracingmacros\tw@\tracingparagraphs\@ne\tracingrestores\@ne
+ \showboxbreadth\maxdimen\showboxdepth\maxdimen}
+\def\tracingall{\tracingonline\@ne\loggingall}
+
+\def\showhyphens#1{\setbox0\vbox{\parfillskip\z@skip\hsize\maxdimen\tenrm
+ \pretolerance\m@ne\tolerance\m@ne\hbadness0\showboxdepth0\ #1}}
+
+\normalbaselines
+\catcode`@=12 % at signs are no longer letters
+
diff --git a/macros/luatex/generic/minim/minim.doc b/macros/luatex/generic/minim/minim.doc
new file mode 100644
index 0000000000..d16250a0fe
--- /dev/null
+++ b/macros/luatex/generic/minim/minim.doc
@@ -0,0 +1,81 @@
+
+\input minim-doc.sty
+
+\startmetadata
+ author {Esger Renkema}
+ title {minim}
+ date {2021-06-01}
+ version {2021/1.0}
+ keywords {LuaTeX; Plain TeX; MetaPost; PDF/A; Tagged PDF; accessibility; a11y;
+ Unicode mathematics; XMP; metadata; hypertext; bookmarks}
+stopmetadata
+
+\maketitle
+
+This is a modern plain format for the LuaTeX engine, adding improved low-level
+support for many LuaTeX extensions and newer PDF features. While it can be
+used as drop-in replacement for plain TeX, it probably is most useful as
+a basis for your own formats.
+
+Most features included in the format are provided by separate packages that can
+be used on their own; see the packages
+
+\smallskip\marktableaslist \halign {\strut
+ \vrule height10ptdepth2ptwidth0pt\qquad
+ \red{#}\quad\hfil&#\hfil\cr
+minim-mp&for mplib (MetaPost) support\cr
+minim-math&for Unicode mathematics\cr
+minim-pdf&for hypertext and Tagged PDF\cr
+minim-xmp&for XMP (metadata) inclusion\cr}
+
+The documentation for the above packages will be replicated in separate
+chapters below.
+
+You can use this package by simply saying ⟦\input minim⟧; this will load the
+file \red{minim.tex}.
+For building your own format files, you can re-use the file \red{minim.ini}:
+if you define ⟦\fmtname⟧ before inputting this file, no ⟦\dump⟧ will be
+performed.
+
+
+\bigskip
+
+\tocfalse \section Contents \par \bigskip
+\begingroup \parskip1pt
+\protected\def\chapter#1#2#3{%
+ \stopelement{TOC}\smallskip
+ \nextpartag{}\red{\tenbf\marktocentry{#2}{}{\strut#1}{\hfill~}{#3}}%
+ \smallskip\startelement{TOC}}
+\protected\def\section#1#2#3{%
+ \marktocentry{#2}{}{\strut\quad#1}{\dotfill~}{#3}\par}
+\startelement{TOC} \startelement{TOC}
+\the\toc
+\stopelement{TOC} \stopelement{TOC}
+\endgroup
+
+\section Compatibility
+
+One central design goal of minim is to be as unobtrusive as possible: you
+should be able to safely ignore any function you do not want to use.
+Please get in touch if you find this not the case.
+
+Particular care has been taken to be compatible with \red{ltluatex}. All
+overlapping functions should produce the same results and ltluatex can be
+loaded either before or after minim.
+
+One point of incompatibility exists between \red{tikz/pgf} and the pattern
+functionality of minim-mp, due to conflicting implementations of pdf resource
+management.
+If you do not use filling patterns, however, the two packages can be used
+together.
+
+\licencesection
+
+\input minim-mp.doc
+\input minim-math.doc
+\input minim-pdf.doc
+\input minim-xmp.doc
+\input minim-alloc.doc
+
+\bye
+
diff --git a/macros/luatex/generic/minim/minim.ini b/macros/luatex/generic/minim/minim.ini
new file mode 100644
index 0000000000..26aed3a2c5
--- /dev/null
+++ b/macros/luatex/generic/minim/minim.ini
@@ -0,0 +1,25 @@
+
+% following luatex.ini
+\input luatexconfig
+\input luatexiniconfig
+\input load-unicode-data
+
+\input minim-plain
+
+\unless\ifdefined\fmtversion
+ \def\fmtversion{2021/1.0}\fi
+\suppressoutererror = 1
+
+\input minim-etex
+
+% and the actual minim
+\input minim
+
+% prepare default fonts
+\input minim-lmodern
+
+\unless\ifdefined\fmtname
+ \def\fmtname{minim}
+ \expandafter\dump\fi
+
+
diff --git a/macros/luatex/generic/minim/minim.pdf b/macros/luatex/generic/minim/minim.pdf
new file mode 100644
index 0000000000..715525bcf9
--- /dev/null
+++ b/macros/luatex/generic/minim/minim.pdf
Binary files differ
diff --git a/macros/luatex/generic/minim/minim.tex b/macros/luatex/generic/minim/minim.tex
new file mode 100644
index 0000000000..6003e52a85
--- /dev/null
+++ b/macros/luatex/generic/minim/minim.tex
@@ -0,0 +1,8 @@
+
+\input minim-alloc
+\input minim-mp
+\input minim-math
+\input minim-pdf
+\input minim-xmp
+
+
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb b/systems/texlive/tlnet/tlpkg/texlive.tlpdb
index 9c3dd62b0f..4d58ee7bd1 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/2021
-depend revision/59526
+depend revision/59539
name 00texlive.image
category TLCore
-revision 59501
+revision 59539
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
@@ -2729,6 +2729,11 @@ runfiles size=13875
tlpkg/tlpsrc/minibox.tlpsrc
tlpkg/tlpsrc/minidocument.tlpsrc
tlpkg/tlpsrc/minifp.tlpsrc
+ tlpkg/tlpsrc/minim-hatching.tlpsrc
+ tlpkg/tlpsrc/minim-math.tlpsrc
+ tlpkg/tlpsrc/minim-mp.tlpsrc
+ tlpkg/tlpsrc/minim-pdf.tlpsrc
+ tlpkg/tlpsrc/minim.tlpsrc
tlpkg/tlpsrc/minimalist.tlpsrc
tlpkg/tlpsrc/minipage-marginpar.tlpsrc
tlpkg/tlpsrc/miniplot.tlpsrc
@@ -37459,7 +37464,7 @@ catalogue-version 1.0
name biblatex-ext
category Package
-revision 58975
+revision 59532
shortdesc Extended BibLaTeX standard styles
relocated 1
longdesc The BibLaTeX-ext bundle provides styles that slightly extend
@@ -37469,11 +37474,11 @@ longdesc stylistic decisions made in the standard styles. At the same
longdesc time they stay as close to their standard counterparts as
longdesc possible, so that most customisation methods can be applied
longdesc here as well.
-containersize 26848
-containerchecksum 5169ab48cfb03c1456fa16f63df4ba8f18dd909cabd247d7159cb9430cea0f16dbc6ce586840e54eff1c044c3a0711df65dd1f45374f53c601f2dcc10bed09ae
-doccontainersize 864040
-doccontainerchecksum 4e013851c68bcd2f756f7bc910a048e400af66d40bfa0381a44c497200826ea98467a94429cb62b6c11ee9e75e6d40741453b2963051eee3afb2f2fb18e8c49c
-docfiles size=249
+containersize 27124
+containerchecksum 8dc7d09152199e68e868819fc1711d716bafc59aa0071b36646d229d343641d6b715ced1e5d2341543b9a202c0a1859bd72374346158866da31e18951ce98f17
+doccontainersize 866312
+doccontainerchecksum d757751c0c2aea49507c3cb8fc60445dbb9f0f08f19e2b5198e36a74f924e8340ad300fd5e56a8b6af62aa17eed77025b1dd3ea409213d0615f557991596f24a
+docfiles size=250
RELOC/doc/latex/biblatex-ext/CHANGES.md
RELOC/doc/latex/biblatex-ext/README.md details="Readme"
RELOC/doc/latex/biblatex-ext/biblatex-ext-examples.bib
@@ -37559,7 +37564,7 @@ catalogue-contact-home https://github.com/moewew/biblatex-ext
catalogue-ctan /macros/latex/contrib/biblatex-contrib/biblatex-ext
catalogue-license lppl1.3c
catalogue-topics biblatex
-catalogue-version 0.12b
+catalogue-version 0.13
name biblatex-fiwi
category Package
@@ -38060,45 +38065,45 @@ catalogue-version 2.1.2
name biblatex-mla
category Package
-revision 42445
+revision 59529
shortdesc MLA style files for BibLaTeX
relocated 1
longdesc The package provides BibLaTeX support for citations in the
longdesc format specified by the MLA handbook.
-containersize 15540
-containerchecksum b6e3f7b5323e0246c1b2e1ee1c767b624e59d4d1ab9aac4bc24d59c15d1f8228695ccc072b30bbe1f4a2de24fb6eeee3c81095fa572f3e27a09f0de7c5b3994e
-doccontainersize 1273944
-doccontainerchecksum 87e9b73615b404f8b676b8a4158edac551f8dd3712e1f6ecaec473789df884c85d6ba48eafad428eebce10ff6f0c13b382fb4e4c79cc960b860565bedf7f935f
-docfiles size=420
+containersize 18908
+containerchecksum 3f9ce622de66c8bc936954e9f29381fd8a604c5ba94ce425c577ec5850a4099ee5f09e6b5b2bdf05eae9c4fa6549878b3061c25da916ccc0041d302534512623
+doccontainersize 291456
+doccontainerchecksum 1f9ee8d696dcc31e56d47edcb9e53fac525fe1ff5408f0d649ca090fcdce5d132dc3191c82f43aff94e02ee34e3445b2dd0be3513a21b963f72ef1f2ac058d5e
+docfiles size=113
RELOC/doc/latex/biblatex-mla/CHANGES
RELOC/doc/latex/biblatex-mla/README details="Readme"
RELOC/doc/latex/biblatex-mla/doc/biblatex-mla.pdf details="Package documentation"
RELOC/doc/latex/biblatex-mla/doc/biblatex-mla.tex
- RELOC/doc/latex/biblatex-mla/doc/citation-examples-new.pdf
- RELOC/doc/latex/biblatex-mla/doc/citation-examples-new.tex
- RELOC/doc/latex/biblatex-mla/doc/citation-examples.pdf
- RELOC/doc/latex/biblatex-mla/doc/citation-examples.tex
- RELOC/doc/latex/biblatex-mla/doc/handbooksamplebib-new.pdf
- RELOC/doc/latex/biblatex-mla/doc/handbooksamplebib-new.tex
- RELOC/doc/latex/biblatex-mla/doc/handbooksamplebib.pdf
- RELOC/doc/latex/biblatex-mla/doc/handbooksamplebib.tex
- RELOC/doc/latex/biblatex-mla/doc/handbooksamples-new.bib
- RELOC/doc/latex/biblatex-mla/doc/handbooksamples.bib
- RELOC/doc/latex/biblatex-mla/doc/samples.bib
-runfiles size=44
+ RELOC/doc/latex/biblatex-mla/doc/examples.bib
+ RELOC/doc/latex/biblatex-mla/doc/examples.pdf
+ RELOC/doc/latex/biblatex-mla/doc/examples.tex
+runfiles size=49
RELOC/tex/latex/biblatex-mla/american-mla.lbx
RELOC/tex/latex/biblatex-mla/english-mla.lbx
RELOC/tex/latex/biblatex-mla/italian-mla.lbx
+ RELOC/tex/latex/biblatex-mla/mla-footnotes.cbx
RELOC/tex/latex/biblatex-mla/mla-new.bbx
RELOC/tex/latex/biblatex-mla/mla-new.cbx
+ RELOC/tex/latex/biblatex-mla/mla-strict.bbx
+ RELOC/tex/latex/biblatex-mla/mla-strict.cbx
RELOC/tex/latex/biblatex-mla/mla.bbx
RELOC/tex/latex/biblatex-mla/mla.cbx
+ RELOC/tex/latex/biblatex-mla/mla.dbx
+ RELOC/tex/latex/biblatex-mla/mla7.bbx
+ RELOC/tex/latex/biblatex-mla/mla7.cbx
RELOC/tex/latex/biblatex-mla/portuguese-mla.lbx
RELOC/tex/latex/biblatex-mla/spanish-mla.lbx
+catalogue-contact-bugs https://github.com/jmclawson/biblatex-mla/issues
+catalogue-contact-repository https://github.com/jmclawson/biblatex-mla
catalogue-ctan /macros/latex/contrib/biblatex-contrib/biblatex-mla
catalogue-license lppl
catalogue-topics linguistic journalpub biblatex
-catalogue-version 1.9
+catalogue-version 2.0
name biblatex-morenames
category Package
@@ -68745,7 +68750,7 @@ containerchecksum f763ff9a6832abce7a148bc5e8b9e5860f883ce0a56ad2119d9e18e7fb4dad
name collection-luatex
category Collection
-revision 59184
+revision 59538
shortdesc LuaTeX packages
relocated 1
longdesc Packages for LuaTeX, a Unicode-aware extension of pdfTeX, using
@@ -68798,6 +68803,10 @@ depend luatexko
depend luatextra
depend luavlna
depend luaxml
+depend minim
+depend minim-math
+depend minim-mp
+depend minim-pdf
depend newpax
depend nodetree
depend odsfile
@@ -68811,8 +68820,8 @@ depend spelling
depend stricttex
depend typewriter
depend uninormalize
-containersize 724
-containerchecksum a2407366eb3f8c1532a5a532ec44535f360aee851d73d0b7b3592200d9ec4b2306808f664e3ac1b69132862cdb6ed7baa65761ffabb739d7e4227cd1f141f046
+containersize 736
+containerchecksum f238704809e10eb64eb4d307e78ec7ba32b24917c81b49d9d46e4039a32fdc9edcc28a49e3cabd2f5cb0b32fafc65cf05c9e3c373e8f7ec0d2bca93c051b5394
name collection-mathscience
category Collection
@@ -69043,7 +69052,7 @@ containerchecksum edeba178757097d9412ce806793a19728ffa13e0846aa39f1514d0eeb4888e
name collection-metapost
category Collection
-revision 50293
+revision 59531
shortdesc MetaPost and Metafont packages
relocated 1
depend automata
@@ -69075,6 +69084,7 @@ depend metapost-colorbrewer
depend metauml
depend mfpic
depend mfpic4ode
+depend minim-hatching
depend mp3d
depend mparrows
depend mpattern
@@ -69091,8 +69101,8 @@ depend splines
depend suanpan
depend textpath
depend threeddice
-containersize 540
-containerchecksum 09dfaa35971f85134d0854c08a99c4d2b01ddf08e8ab97449460bb99d1236a38c48643501e7bb56197a844491509af301da6c4f75a33d9286601633211ec7d93
+containersize 548
+containerchecksum ee47dbed65feb3bb1dd76628eb42508660714984742835afaeceae583bc2c81cb2570d41b1d5e8963f2a5eb6a2c63adb9bd7e9f50b827cc9e57b95aead54b31d
name collection-music
category Collection
@@ -137769,7 +137779,7 @@ catalogue-version 0.02
name hvfloat
category Package
-revision 59506
+revision 59533
shortdesc Rotating caption and object of floats independently
relocated 1
longdesc This package defines a macro to place objects (tables and
@@ -137781,11 +137791,11 @@ longdesc \hvFloat{figure}{\includegraphics{rose}}{Caption}{fig:0}.
longdesc Options are provided to place captions to the right or left,
longdesc and rotated. Setting nonFloat=true results in placing the float
longdesc here.
-containersize 10484
-containerchecksum 18e3cb391110c2159cabda07447f2f3280cb058a378b2ed338afd6ec9b16e084368d720002c2e7ae8c834e2589feb51cc258de3eaab011d124b36585836840a8
-doccontainersize 7673684
-doccontainerchecksum 1b17894b34ac06bd048a00165b53e894986b4d1300e149e30b2a174e1e1141d34c9582cf6f079b1b5cc97673d715bee60c7560891fee080661200e4a6ae20882
-docfiles size=3918
+containersize 10540
+containerchecksum 535d49e4e4ed40e871f045a3402b0c074c8361e44d64d4223d3b939ee0397ea32f6344cd6720b1a6d0ae79911fc291b088f85d2e76f34968279201e4f48d91bb
+doccontainersize 7877664
+doccontainerchecksum f7231ce15d67c016a75036d51371cab74f96aa6cea5be41320fa695858a96a296b2cc7d5eb7b558f655e5fc483b602bf99935018770015bb79a25992559bea04
+docfiles size=3962
RELOC/doc/latex/hvfloat/CTAN.png
RELOC/doc/latex/hvfloat/Changes
RELOC/doc/latex/hvfloat/README details="Readme"
@@ -137915,7 +137925,7 @@ catalogue-also rotating
catalogue-ctan /macros/latex/contrib/hvfloat
catalogue-license lppl
catalogue-topics float box-manip
-catalogue-version 2.27
+catalogue-version 2.28
name hvindex
category Package
@@ -152439,7 +152449,7 @@ catalogue-version 1.30
name jfmutil
category Package
-revision 55044
+revision 59530
shortdesc Utility to process pTeX-extended TFM and VF
longdesc This program provides functionality to process data files (JFM
longdesc and VF) that form logical fonts used in (u)pTeX. The functions
@@ -152451,10 +152461,10 @@ longdesc counterpart to the vftovp/vptovf programs. The mutual
longdesc conversion between VF files alone and files in the "ZVP0
longdesc format", which is a subset of the ZVP format.
depend jfmutil.ARCH
-containersize 25772
-containerchecksum ba0c853d1624ef00407e9eb4c6051fa9f71f505e0e55ea2a698d4a9f7fee241c1339d46e873d77573252c781ccacb05b9d447b80aa43887ad76da667977c666b
-doccontainersize 9584
-doccontainerchecksum d4b255cccbe58ec85240be3f0a390dd2fd716fd40c744732494d3e113899747133e99be75f8bab888d240e66e16195dbd2b12188f3551e5535a2cbe157c5bf9f
+containersize 25768
+containerchecksum 44aa7f53dd720f42493418e84fe15797265760a379b03776cdc83b52f7fb0ddee2a346ad0da43ccaeffe67fb49f9add206825203ae60ba4b8d007cff648524b7
+doccontainersize 9632
+doccontainerchecksum 678ef523ce143ff5662be0c43d1b684ccb5665eb27f7745faadc667c7bbac444942de0850c4919ed0534f003ddb39f27eedf5edc78ceedbefc9a2bfc3ba7be76
docfiles size=9
texmf-dist/doc/fonts/jfmutil/LICENSE
texmf-dist/doc/fonts/jfmutil/README-ja.md details="Readme (Japanese)" language="ja"
@@ -152464,7 +152474,7 @@ runfiles size=26
catalogue-ctan /fonts/utilities/jfmutil
catalogue-license mit
catalogue-topics font-proc japanese
-catalogue-version 1.3.1
+catalogue-version 1.3.2
name jfmutil.aarch64-linux
category Package
@@ -167937,7 +167947,7 @@ binfiles arch=x86_64-solaris size=1
name latexmk
category Package
-revision 59258
+revision 59535
shortdesc Fully automated LaTeX document generation
longdesc Latexmk completely automates the process of generating a LaTeX
longdesc document. Given the source files for a document, latexmk issues
@@ -167949,11 +167959,11 @@ longdesc files), and reruns LaTeX, etc., whenever a source file has
longdesc changed. Thus a previewer can offer a display of the document's
longdesc latest state.
depend latexmk.ARCH
-containersize 93556
-containerchecksum 5d935af51656f79cae548bd34b79513cebf0ad65cad596a4335a987c6407403f7fa0a325ffe7b7e6b664df78d3e4d290db7b60961897162acea931cf6b8c50b2
-doccontainersize 479652
-doccontainerchecksum 2b4f79ab77471284b2a6996fb26723135ff1a392cec02db0c32cc50b7276ee0a992037fc95999bbdd91aee6a08e4de250b1b9878e3ee28ab56ca759661ec6945
-docfiles size=259
+containersize 94048
+containerchecksum 00b164bd7ff5d3d8ebbe0fec932491fcaa4fa9be63b935c2849977cbbbffc1d8a962cb573258420b54ed83482056ccfea74bc41c8e520ef8cd3ec6f83300722c
+doccontainersize 487068
+doccontainerchecksum 42812673130f1c40c3b3fbf128a981bace7496ce8bce167e3cae85a06e70af75250a13a18747270956b65ac5baad5b5c6c5d588b0bdfae4c5c22aed2f2d84877
+docfiles size=263
texmf-dist/doc/man/man1/latexmk.1
texmf-dist/doc/man/man1/latexmk.man1.pdf
texmf-dist/doc/support/latexmk/CHANGES
@@ -168006,7 +168016,7 @@ catalogue-contact-home http://personal.psu.edu/~jcc8/software/latexmk/
catalogue-ctan /support/latexmk
catalogue-license gpl2
catalogue-topics compilation
-catalogue-version 4.74
+catalogue-version 4.74b
name latexmk.aarch64-linux
category Package
@@ -197726,6 +197736,167 @@ catalogue-license lppl1.3
catalogue-topics arithmetic calculation random
catalogue-version 0.96
+name minim
+category Package
+revision 59536
+shortdesc A modern plain format for the LuaTeX engine
+relocated 1
+longdesc This is a modern plain format for the LuaTeX engine, adding
+longdesc improved low-level support for many LuaTeX extensions and newer
+longdesc PDF features. While it can be used as drop-in replacement for
+longdesc plain TeX, it probably is most useful as a basis for your own
+longdesc formats. Most features included in the format are provided by
+longdesc separate packages that can be used on their own; see the
+longdesc packages minim-mp for mplib (MetaPost) support minim-math for
+longdesc unicode mathematics minim-pdf for creating Tagged PDF minim-xmp
+longdesc for XMP (metadata) inclusion This package contains only their
+longdesc shared lowest-level programming interface, along with their
+longdesc combined format.
+containersize 21692
+containerchecksum f5a7c16a30f877c0a867b4fa79d00721e48ce1790eac136a474c74310867abacdc14cc5ff62fd6c3a8d856816edf8838796fab90eb4acd776b202422d92414f3
+doccontainersize 265976
+doccontainerchecksum b65c4714dafb1b5199e51cc294dd5a28f974e217b3d888eaf6b517cae8ecc0c8e39ee70052b46e51fe40e517c6cea423fc33828b99e189fd9b3f5014c71d7db4
+docfiles size=79
+ RELOC/doc/luatex/minim/EUPL-1.2-EN.txt
+ RELOC/doc/luatex/minim/README details="Readme"
+ RELOC/doc/luatex/minim/minim-alloc.doc
+ RELOC/doc/luatex/minim/minim.doc
+ RELOC/doc/luatex/minim/minim.pdf details="Package documentation"
+runfiles size=25
+ RELOC/tex/luatex/minim/minim-alloc.lua
+ RELOC/tex/luatex/minim/minim-alloc.tex
+ RELOC/tex/luatex/minim/minim-callbacks.lua
+ RELOC/tex/luatex/minim/minim-doc.sty
+ RELOC/tex/luatex/minim/minim-etex.tex
+ RELOC/tex/luatex/minim/minim-hooks.lua
+ RELOC/tex/luatex/minim/minim-hooks.tex
+ RELOC/tex/luatex/minim/minim-lmodern.tex
+ RELOC/tex/luatex/minim/minim-plain.tex
+ RELOC/tex/luatex/minim/minim.ini
+ RELOC/tex/luatex/minim/minim.tex
+catalogue-also optex
+catalogue-contact-repository https://gitlab.com/renkema/minim
+catalogue-ctan /macros/luatex/generic/minim
+catalogue-license other-free
+catalogue-topics luatex format
+catalogue-version 2021/1.0
+
+name minim-hatching
+category Package
+revision 59531
+shortdesc Create tiling patterns with the minim-mp MetaPost processor
+relocated 1
+longdesc This is a small proof-of-concept library of tiling patterns for
+longdesc use with the minim-mp MetaPost processor.
+containersize 2240
+containerchecksum 2ef4fdef86cc308d2202fc2a60a410679b6f4974f2770d7e7a348dab5f26059c652a65a7cac0832781f29b5eeb389d7a5ace0ebeedc65a5ba6efce03c705a48b
+doccontainersize 27364
+doccontainerchecksum 2535f5d3958d099a8f1f8be8da0c871b1149346f700b2b9c5c6bab873facf659549491df979c805b7e328bbcacf0e3e679e39ebdab64f9395486099dd39507e3
+docfiles size=23
+ RELOC/doc/latex/minim-hatching/EUPL-1.2-EN.txt
+ RELOC/doc/latex/minim-hatching/README details="Readme"
+ RELOC/doc/latex/minim-hatching/minim-hatching-doc.mp
+ RELOC/doc/latex/minim-hatching/minim-hatching-doc.pdf details="Package documentation"
+runfiles size=2
+ RELOC/metapost/minim-hatching/minim-hatching.mp
+catalogue-also minim hatching
+catalogue-contact-repository https://gitlab.com/renkema/minim
+catalogue-ctan /graphics/minim-hatching
+catalogue-license other-free
+catalogue-topics luatex graphics-subpic
+catalogue-version 2021/1.0
+
+name minim-math
+category Package
+revision 59537
+shortdesc Extensive maths for LuaTeX
+relocated 1
+longdesc This package provides a simple and highly configurable way to
+longdesc use Unicode and OpenType mathematics with simple LuaTeX, taking
+longdesc advantage of most of the engine's new capabilities in
+longdesc mathematical typesetting. Also included are the proper settings
+longdesc and definitions for almost all Unicode mathematical characters.
+containersize 33168
+containerchecksum c9d48b920c26b20195e4afd1a8d7f74a3862cf32ded6be1739ea2733ad3e2c1d727271a8caca5dbe7992438ac0f43289f50272615ca63f34f585f730467303c6
+doccontainersize 93496
+doccontainerchecksum 3940f8a9fd61b4c9901f8c69f3bf6303e40ae805aca619f24be14a187d969a55e8a6c73de9c998f987c3375c3f453f4fa0453a9d316be7a1d85a2a329c6cf28e
+docfiles size=35
+ RELOC/doc/luatex/minim-math/EUPL-1.2-EN.txt
+ RELOC/doc/luatex/minim-math/README details="Readme"
+ RELOC/doc/luatex/minim-math/minim-math.doc
+ RELOC/doc/luatex/minim-math/minim-math.pdf details="Package documentation"
+runfiles size=91
+ RELOC/tex/luatex/minim-math/minim-math-table.lua
+ RELOC/tex/luatex/minim-math/minim-math.lua
+ RELOC/tex/luatex/minim-math/minim-math.tex
+catalogue-also minim
+catalogue-contact-repository https://gitlab.com/renkema/minim
+catalogue-ctan /macros/luatex/generic/minim-math
+catalogue-license other-free
+catalogue-topics luatex maths
+catalogue-version 2021/1.0
+
+name minim-mp
+category Package
+revision 59538
+shortdesc Low-level mplib integration for LuaTeX
+relocated 1
+longdesc This package offers low-level mplib integration for plain
+longdesc LuaTeX and is designed with the purpose of being easy to
+longdesc extend. The use of multiple simultaneous MetaPost instances is
+longdesc supported, as well as running TeX or lua code from within
+longdesc MetaPost. With the included minim-mp format file, you can even
+longdesc use LuaTeX as a stand-alone MetaPost compiler.
+containersize 13608
+containerchecksum a98b4db3e303fb993852b92901937e0f8031269e5ce51651fbd59b787574504bc8948522243e3525efe3eae68c2fc00030763dca855b605575c722d5ca89aecc
+doccontainersize 76608
+doccontainerchecksum a1398b441bb27a3a7e340edd152dffaca406fb9b4151523e64132f8a13c44bbdec22e3aba22208dc60a2d209c0337824cc54ed4f32910ee91d709428dfc029d4
+docfiles size=30
+ RELOC/doc/luatex/minim-mp/EUPL-1.2-EN.txt
+ RELOC/doc/luatex/minim-mp/README details="Readme"
+ RELOC/doc/luatex/minim-mp/minim-mp.doc
+ RELOC/doc/luatex/minim-mp/minim-mp.pdf details="Package documentation"
+runfiles size=14
+ RELOC/metapost/minim-mp/minim.mp
+ RELOC/tex/luatex/minim-mp/minim-mp.ini
+ RELOC/tex/luatex/minim-mp/minim-mp.lua
+ RELOC/tex/luatex/minim-mp/minim-mp.tex
+catalogue-also minim
+catalogue-contact-repository https://gitlab.com/renkema/minim
+catalogue-ctan /macros/luatex/generic/minim-mp
+catalogue-license other-free
+catalogue-topics luatex mp-supp mp-use
+catalogue-version 2021/1.0
+
+name minim-pdf
+category Package
+revision 59539
+shortdesc Low-level PDF integration for LuaTeX
+relocated 1
+longdesc This package adds low-level support to plain LuaTeX for marking
+longdesc up the structure of a PDF document. The implementation is
+longdesc rather basic, but should allow you to make your PDFs fully
+longdesc PDF/A-compliant.
+containersize 14280
+containerchecksum e45568da0fff7ccb2024cc791cf48303d1368946227cab47474790de647a4215a55f898d9c9c6e402ab1693cc211a77f8d9e3f637ded806ea587fbeccac84ce6
+doccontainersize 103612
+doccontainerchecksum 184c5224f703a7f2713e19a675855921a0effe47aa4bb57b696f232539eab8fb1de35eb8da51f49f9e74b0c903d8f63879f3405087efffe107f500d858a72464
+docfiles size=37
+ RELOC/doc/luatex/minim-pdf/EUPL-1.2-EN.txt
+ RELOC/doc/luatex/minim-pdf/README details="Readme"
+ RELOC/doc/luatex/minim-pdf/minim-pdf.doc
+ RELOC/doc/luatex/minim-pdf/minim-pdf.pdf details="Package documentation"
+runfiles size=16
+ RELOC/tex/luatex/minim-pdf/minim-languagecodes.lua
+ RELOC/tex/luatex/minim-pdf/minim-pdf.lua
+ RELOC/tex/luatex/minim-pdf/minim-pdf.tex
+catalogue-also minim
+catalogue-contact-repository https://gitlab.com/renkema/minim
+catalogue-ctan /macros/luatex/generic/minim-pdf
+catalogue-license other-free
+catalogue-topics luatex tagged-pdf pdf-feat
+catalogue-version 2021/1.0
+
name minimalist
category Package
revision 59513
@@ -274295,7 +274466,7 @@ catalogue-version 1.0
name siunitx
category Package
-revision 59516
+revision 59534
shortdesc A comprehensive (SI) units package
relocated 1
longdesc Typesetting values with units requires care to ensure that the
@@ -274320,18 +274491,18 @@ longdesc The package relies on LaTeX 3 support from the l3kernel and
longdesc l3packages bundles.
depend l3kernel
depend l3packages
-containersize 60948
-containerchecksum 9e6226dae878b6719dbe94787e5d5d065f1bee25b1190ce0e40cefb6815d09ff7467da44c9badc5ec67efab05d1589d8c915ee540b2292c7b727e75690789b28
-doccontainersize 2417064
-doccontainerchecksum 4ab5d74ce25a349cfc7633d1c9c6bdbca164d8dfbfed0006560abafcb32c614ecfd4eb6e16f00b2227a8355307ee0b9f6cbc185fefee8c9c2aa2adaf11c2bac0
+containersize 60956
+containerchecksum 6298d32b46851f834dfd7902e7a959ec5c5185612990ea114be4d1c4a589e13eb7c7a3fcde6386936014d7bd63e810e31b7584dddb326f539c289fc060598108
+doccontainersize 2417948
+doccontainerchecksum c888c4cca835e48e52a56196b8cd9f73e8f4aca5dc84738886bff8ac4a88e80f4ddb9a1f93ee00721a87e35f820ca100ad2d9f371e1cf2aa96a5df5dc9214981
docfiles size=647
RELOC/doc/latex/siunitx/CHANGELOG.md
RELOC/doc/latex/siunitx/README.md details="Readme"
RELOC/doc/latex/siunitx/siunitx-code.pdf details="Code documentation"
RELOC/doc/latex/siunitx/siunitx-table.pdf
RELOC/doc/latex/siunitx/siunitx.pdf details="User manual"
-srccontainersize 104720
-srccontainerchecksum 89b84135e931c96948ce9fd115a7560622576be9981d82ea8367566f45f8d82127731c0ee467dceae73f90d2d1f77a30a502074462c45b649542a68eb0559ac6
+srccontainersize 104820
+srccontainerchecksum 21814c887378f28d1fabb7e3f5794ef4437d398ea16de133fd5c19003339278a7d942a364a9fd9c4acaa01c5cb563755f62c4fa2ac9dcf0413b674ba99855fed
srcfiles size=161
RELOC/source/latex/siunitx/siunitx-abbreviation.dtx
RELOC/source/latex/siunitx/siunitx-angle.dtx
@@ -274363,7 +274534,7 @@ catalogue-contact-repository https://github.com/josephwright/siunitx
catalogue-ctan /macros/latex/contrib/siunitx
catalogue-license lppl1.3c
catalogue-topics units scientific-docs expl3
-catalogue-version 3.0.11
+catalogue-version 3.0.12
name skak
category Package
@@ -299684,14 +299855,14 @@ catalogue-version 5.1
name texlive-common
category TLCore
-revision 59073
+revision 59528
shortdesc TeX Live documentation (common elements)
relocated 1
postaction shortcut type=menu name="TeX Live documentation" cmd=TEXDIR/texmf-dist/doc/texlive/index.html
-containersize 348
-containerchecksum 4b34ce5639e3d7d47f4c8be4e90abe43c2cee611ab3aaf57da6f34420c1a20af7f5e3ab449beeebbac7e9ebd40288e4becb20814a144557179f2bb85cb3a49c4
-doccontainersize 577640
-doccontainerchecksum 4871c4ac92808de513174af31f4150d105e7e2b1e06e7cce5dba878424d8ff7fc6e7aa46694157b45e7e19e6f11cbbcd5e4350b32cf4455f0ad3542b60d5c674
+containersize 344
+containerchecksum 9094bc74a141e53dc12843b99a167b154e808030d197d15c041d75282d1b552af8cfb96ab6ede2f0adcb87d6b06a5b10402c3868eac0c6f699f6c1156bfde214
+doccontainersize 577652
+doccontainerchecksum 507a5616e997258670f85f3f333f52383ac088bdc48f5cee781cbaa063f7de98d86fd727284648163dff83306c5a36f66ca2ef9b557fb4ec8e0a3669ed219b4c
docfiles size=188
RELOC/doc/texlive/index.html
RELOC/doc/texlive/install-tl.html
@@ -299986,7 +300157,7 @@ docfiles size=376
name texlive-scripts
category TLCore
-revision 59520
+revision 59528
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.
@@ -299994,10 +300165,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 108008
-containerchecksum 7a929e5069223c0168c55f12dc0e8916835d1d4544695ffd73b07f9640ac7f9c3007fb08ef0116f9dad23616456b79b93d8ac7ca055d1ef21972822edde7053e
-doccontainersize 397504
-doccontainerchecksum 1299612ef2038177860f9d7d56a3ccbff482c10d27f756a58be0c96632301f6bc8ebdde60c3df25b4d21c4856f33cd1492ec6f02f42a8b83cd485909ccf04810
+containersize 108012
+containerchecksum 231a08cf01e68e5afb627474e267a2a5afbf667c5bae4ce0f254eba82f4d4c4bae6c1c1eef6ba147c251dc9dc4104d900e19fe3995c7fbcd78255677b1843e11
+doccontainersize 397492
+doccontainerchecksum 64b9aa7d2e643ad7e8aa47ed5c16dde828f4acd8ac2cea235b391dd054d57220816c72cbb78d76cc99fc85ea950636df669a4e8b9057ed5ffd36f7be74c7465e
docfiles size=490
doc.html
texmf-dist/doc/man/man1/fmtutil-sys.1
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
index 8739e830d1..73f8631178 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
@@ -1 +1 @@
-e44d6b9901e259742154860a034fb47a texlive.tlpdb
+b27212ff760e958cc3bfb015f814427e texlive.tlpdb
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
index a6c877ff8e..99a5634bb6 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
@@ -1 +1 @@
-a9bac14642582d16c37e50372eaa15b6241cf8d13d704970f0896194e2837bf50ad820b85714e645455e7162b7e3ef634480929bb0156d6db2a4ea080bd49500 texlive.tlpdb
+eb58e603d864393f47ec0b0f99328e887751cb08a272ce8cb162556cc0d9c300bca065284067d1b75068187c1a453977a4774a3d4360e2019bcfc2285b39be96 texlive.tlpdb
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
index 86f8aa568f..1d1841709b 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-----
-iQEcBAEBCgAGBQJgwAKKAAoJEEzhh34ZQ4xwgEQH/0YDF78n3tHjT/JGqY0B3erN
-9MB0MPD4ia4ca9nvmUnUtrrxPR62xAwROLZ9MDiKFVryCtKbYRu65oSqJiN5b8N8
-rtPX1wl/vgbqxqVklFaDDOipMIjipwVRxxmLHrLE1l5XzcUQ25N/N/KlH2v65U2X
-TubpKNxP+O/WeXI4NdEMmnuGzKQm471Y5RkETbym9wlZAamX163xxYMNttQjzPLK
-YprFI1mWg4LgXmvAvof7JvPq5BHaG22eynQNxHFiB0qAOKZxBW/guiq5TktDVhQt
-amvGBig3r5sEBtlkOtTq9h+FTRY6P2ZNNk28dpjdMaITf1pLAwoqHr5Rs08G/5I=
-=tUV/
+iQEcBAEBCgAGBQJgwVQ6AAoJEEzhh34ZQ4xw7b8H/21UIZ1iQPPO0srrhCd/KW3C
+5sJ1ugNFJdJREKwp1PUTHNz18JiGkdPOQIEak2gtvEncRtjjP3rv61ay6RqV4pzl
+2ps1D3V09PSr9ARm0vvBGnS7FekvhR9lqeCHo3Ze7MCFiE/56gARvs1HwvHdbTQ+
+zpWuly61AMqgyRFq4/dAtuAqcNij/x9VzbyHaHm97Z06NbmkXvVBAu0upTF8aWA/
+30j2atUvfhEpvuQSydzUlXQ+NXUGoD0LmT8vfm0vmbD+CFrY8qQPivrL40wvOFFN
+DK3MRdFLwVB97+INWiulMCfsCjG/tBXZ17UAKXDP1as+oTtXwI7ouEZWwQmMwL8=
+=PBWr
-----END PGP SIGNATURE-----
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
index d7382a67d3..bd1ebb3ae5 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/files.csv.lzma b/systems/win32/miktex/tm/packages/files.csv.lzma
index 6ac7fd8ab0..871f5481f0 100644
--- a/systems/win32/miktex/tm/packages/files.csv.lzma
+++ b/systems/win32/miktex/tm/packages/files.csv.lzma
Binary files differ
diff --git a/systems/win32/miktex/tm/packages/next/files.csv.lzma b/systems/win32/miktex/tm/packages/next/files.csv.lzma
index dd59ae9358..bbaabdcf2f 100644
--- a/systems/win32/miktex/tm/packages/next/files.csv.lzma
+++ b/systems/win32/miktex/tm/packages/next/files.csv.lzma
Binary files differ
diff --git a/systems/win32/miktex/tm/packages/next/pr.ini b/systems/win32/miktex/tm/packages/next/pr.ini
index 0a4e2a28a0..7724bed7eb 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=1623183376
+date=1623269701
lastupd=miktex-arctrl-bin-2.9 miktex-arctrl-bin-x64-2.9 miktex-asymptote-bin-2.9 miktex-asymptote-bin-x64-2.9 miktex-autosp-bin-2.9 miktex-autosp-bin-x64-2.9 miktex-axohelp-bin-2.9 miktex-axohelp-bin-x64-2.9 miktex-bibarts-bin-2.9 miktex-bibarts-bin-x64-2.9 miktex-bibtex-bin-2.9 miktex-bibtex-bin-x64-2.9 miktex-bibtex8bit-bin-2.9 miktex-bibtex8bit-bin-x64-2.9 miktex-bzip2-bin-2.9 miktex-bzip2-bin-x64-2.9 miktex-cairo-bin-2.9 miktex-cairo-bin-x64-2.9 miktex-chktex-bin-2.9 miktex-chktex-bin-x64-2.9
-lstdigest=c770949a94ee5907ebef7e6727cfa9b7
-numpkg=4266
+lstdigest=59cae72e056b7d3b994b058df584b99b
+numpkg=4274
relstate=next
-version=7829
+version=7830
;;;;This configuration file is signed by a MiKTeX maintainer. The signature follows.
;;;;-----BEGIN MIKTEX SIGNATURE-----
-;;;; signature/miktex: odaxgHSphl4UaaLYKK7MKZ3oKYLutUsk5eK51gxTajHm91k4H96O3OKIpILYtCsn51Oq/oWre7oDRHUCpxCpZ5MIdliP6z9JuVQ1J/Z80pFBA+OWRljuvZM4mYU+FNwROzxvNs887KCqNRmulE+edrtDyiljo4RwjNac2hajMCONeACqxiw7tf+bNzNQyzeW8+ZnXtGWImRlWZ7wXHNb8WrB4Irhla3CQcWWepBcWfXXFaBt5UE/cwqOivPE7AxdDjxlYmywlB7a6/5/GU3g30aSZReayUGwrf4tIzn2X7JFiwwZtHcUPsZnzwtPmqFIONbRblE6jkZclYqLuWA+MQ==
+;;;; signature/miktex: EqVsCqq7bQiMVpfnk8faY103esPl/wRWbv+Ibw9/W7JUcMhI/fOy4fqzzNL3RLM5R8+D4LEWIkNUoIWSq2VbEzTUshJkSrz2sIh++9fXgxXC5YbQ4kdKwVKwnUKV1Asi5mm6Pt1MqguqtfgPdKVEzswg6Q+uAqcmvQ/5p9b0HrQCVfleq/4I44dJUIXm8ExMNYwRz1C9Dgf8cGCA8MLcirRWqhO7ISqtjGw4mtC6+sNOZW3p9bw//6eGUZm+UwcOcls2Bv3kCf5j62MGumx92J8mVHhCHBbeNxMV1t0dASOUarudwsiA5xh1HRKbsrf/gujol0W7Rj1X7URksUNKSw==
;;;;-----END MIKTEX SIGNATURE-----
diff --git a/systems/win32/miktex/tm/packages/pr.ini b/systems/win32/miktex/tm/packages/pr.ini
index 50149a8e1c..b33cb001c6 100644
--- a/systems/win32/miktex/tm/packages/pr.ini
+++ b/systems/win32/miktex/tm/packages/pr.ini
@@ -1,13 +1,13 @@
[repository]
-date=1623183088
-lastupd=bangla bangla__doc bangla__source bjfuthesis bjfuthesis__doc bjfuthesis__source colorist colorist__doc colorist__source easybook easybook__doc easybook__source hvfloat hvfloat__doc hvfloat__source hyperref hyperref__doc hyperref__source luatexja luatexja__doc
-lstdigest=c27201a522f91d52187e67cba1c5fc76
-numpkg=4266
+date=1623269479
+lastupd=biblatex-ext biblatex-ext__doc biblatex-ext__source csvsimple csvsimple__doc easybook easybook__doc easybook__source keyfloat keyfloat__doc keyfloat__source latexmk latexmk__doc latexmk__source xintsession xintsession__doc bangla bangla__doc bangla__source bjfuthesis
+lstdigest=f57eb338a46912587f154b42711c77e7
+numpkg=4274
relstate=stable
-version=7829
+version=7830
;;;;This configuration file is signed by a MiKTeX maintainer. The signature follows.
;;;;-----BEGIN MIKTEX SIGNATURE-----
-;;;; signature/miktex: d67VqTCJz2wL6IIkhJjI2/kFciPr2e0Z75ZkqTPE8cAVUD9R62/Y892/EOUexrtKzF23K1e+UOID2i4YgYaVDwvtxcSU8szfI3R9vzU4ebZk3jBtwT6eNaYBEGAHtzMj9kzvZ+kmutWbMV4x9wCbbK8uTvvR1YBjwDWF4skeWlyroL8e3cWoq/LdbhU7M6dSb4azVTIiK/gnwBuoR4/aGfNIdFxAFT/kfE9T+PYHFBRO7ZmgosYoMTjZfLv9qrglCEdZWFWSUMofHjP01rl0ytHG0vq1gSEDkZPjE70lJqvWxJKqwTIOgB5eAyWmruxzmaUwaRIoNwlRHF6Srw9IVQ==
+;;;; signature/miktex: OqqTwxj2VBUz3fOQOKDHQqSVDH6wWx0reOiz/Xm/9/EACNuFMe0QN0t0ATvxHMohTciYnh8IDwkB/osk+cu7wfNjQ2pXzT2kefKT+/87z0onBqfyHc7QkE8ub7PqvUv3azrdTu3Y4NKDW7BWpBS5UZuWb0TXgHMRYtxVUlOYzRXOW+dC3qT7jvdeCBdM45VoBVf4a0uJyX6jTvTRGY+jD+k5M8pPWoxOZOAOaGFz/xfJQouWucMQI+d+0XjpwYlZNl9j06hCnW7q3rnt0c4TlgDP5a3Z+hg8hWMLeo6RKWvmWvnyGg2bid+HNKfAqbWU0KgOVNafSaDtr4mlIA6fhw==
;;;;-----END MIKTEX SIGNATURE-----
diff --git a/systems/win32/w32tex/ChangeLog b/systems/win32/w32tex/ChangeLog
index 133fb29b7f..c55bb00d58 100644
--- a/systems/win32/w32tex/ChangeLog
+++ b/systems/win32/w32tex/ChangeLog
@@ -1,5 +1,27 @@
W32TeX (x86 & x64) ChangeLog
+[2021/06/09]
+(01) biblatex-biber.tar.xz
+ Update biblatex-ext.
+(02) context.tar.xz
+ ConTeXt version: 2021.06.09 00:11.
+(03) dvipdfm-w32.tar.xz
+ Update dvipdfmx.dll.
+(04) ltxpkgs.tar.xz
+ Update keyfloat.
+(05) ptex-ng-w32.tar.xz
+ Update libdpx.
+(06) web2c-w32.tar.xz
+ Update latexmk.
+(07) xetex-w32.tar.xz
+ Update dvipdfmx.dll.
+(08) win64/dvipdfm-w64.tar.xz
+ Update dvipdfmx.dll.
+(09) win64/ptex-ng-w64.tar.xz
+ Update libdpx.
+(10) win64/xetex-w64.tar.xz
+ Update dvipdfmx.dll.
+
[2021/06/08]
(01) cjkzr.tar.xz
Update pxjahyper.
diff --git a/timestamp b/timestamp
index 0dda1b257e..a185bc1ea1 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:
-2021-06-09-02-02
+2021-06-10-02-02