summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2020-12-09 03:02:14 +0000
committerNorbert Preining <norbert@preining.info>2020-12-09 03:02:14 +0000
commit6c3488e145a5b86adaa393a1282b0af6fa355f4a (patch)
treea7d012c2f7548dfb76d383126f5007df22db0c7e
parent2d234d1cf6b222448569c5e7596c7f835fd54bd2 (diff)
CTAN sync 202012090302
-rw-r--r--FILES.byname634
-rw-r--r--FILES.byname.gzbin2237209 -> 2237358 bytes
-rw-r--r--FILES.last07days1474
-rw-r--r--macros/latex/contrib/decision-table/LICENSE415
-rw-r--r--macros/latex/contrib/decision-table/README12
-rw-r--r--macros/latex/contrib/decision-table/decision-table-doc.pdfbin262752 -> 0 bytes
-rw-r--r--macros/latex/contrib/decision-table/decision-table-doc.tex209
-rw-r--r--macros/latex/contrib/decision-table/decision-table.dtx474
-rw-r--r--macros/latex/contrib/decision-table/decision-table.ins47
-rw-r--r--macros/latex/contrib/decision-table/decision-table.pdfbin0 -> 112176 bytes
-rw-r--r--macros/latex/contrib/decision-table/decision-table.sty149
-rw-r--r--macros/latex/contrib/draftwatermark/README.md32
-rw-r--r--macros/latex/contrib/draftwatermark/draftwatermark.dtx583
-rw-r--r--macros/latex/contrib/draftwatermark/draftwatermark.ins52
-rw-r--r--macros/latex/contrib/draftwatermark/draftwatermark.pdfbin264619 -> 297379 bytes
-rw-r--r--macros/latex/contrib/jslectureplanner/README2
-rw-r--r--macros/latex/contrib/jslectureplanner/examples/English/lecturebib-english.pdfbin85104 -> 85100 bytes
-rw-r--r--macros/latex/contrib/jslectureplanner/examples/English/lecturehandout-english.pdfbin57923 -> 57920 bytes
-rw-r--r--macros/latex/contrib/jslectureplanner/examples/English/lecturepresentation-english.pdfbin84606 -> 84600 bytes
-rw-r--r--macros/latex/contrib/jslectureplanner/examples/English/lectureprogram-english.pdfbin56905 -> 56906 bytes
-rw-r--r--macros/latex/contrib/jslectureplanner/examples/English/lecturescript-english.pdfbin34575 -> 34578 bytes
-rw-r--r--macros/latex/contrib/jslectureplanner/examples/English/membertable-blank-english.pdfbin28442 -> 28442 bytes
-rw-r--r--macros/latex/contrib/jslectureplanner/examples/English/membertable-filled-english.pdfbin28450 -> 28449 bytes
-rw-r--r--macros/latex/contrib/jslectureplanner/examples/English/presencetable-blank-english.pdfbin27974 -> 27971 bytes
-rw-r--r--macros/latex/contrib/jslectureplanner/examples/English/presencetable-filled-english.pdfbin26752 -> 26749 bytes
-rw-r--r--macros/latex/contrib/jslectureplanner/examples/English/presentation-list-english.pdfbin25688 -> 25685 bytes
-rw-r--r--macros/latex/contrib/jslectureplanner/examples/German/lecturebib.pdfbin85488 -> 85483 bytes
-rw-r--r--macros/latex/contrib/jslectureplanner/examples/German/lecturehandout.pdfbin59148 -> 59144 bytes
-rw-r--r--macros/latex/contrib/jslectureplanner/examples/German/lecturepresentation.pdfbin84992 -> 84982 bytes
-rw-r--r--macros/latex/contrib/jslectureplanner/examples/German/lectureprogram.pdfbin57899 -> 57898 bytes
-rw-r--r--macros/latex/contrib/jslectureplanner/examples/German/lecturescript.pdfbin34772 -> 34769 bytes
-rw-r--r--macros/latex/contrib/jslectureplanner/examples/German/membertable-blank.pdfbin28387 -> 28386 bytes
-rw-r--r--macros/latex/contrib/jslectureplanner/examples/German/membertable-filled.pdfbin28509 -> 28506 bytes
-rw-r--r--macros/latex/contrib/jslectureplanner/examples/German/presencetable-blank.pdfbin27896 -> 27891 bytes
-rw-r--r--macros/latex/contrib/jslectureplanner/examples/German/presencetable-filled.pdfbin26784 -> 26778 bytes
-rw-r--r--macros/latex/contrib/jslectureplanner/examples/German/presentation-list.pdfbin26864 -> 26863 bytes
-rw-r--r--macros/latex/contrib/jslectureplanner/jslectureplanner.pdfbin478838 -> 480426 bytes
-rw-r--r--macros/latex/contrib/jslectureplanner/jslectureplanner.sty33
-rw-r--r--macros/latex/contrib/jslectureplanner/jslectureplanner.tex32
-rw-r--r--macros/latex/contrib/jslectureplanner/jsmembertable.sty4
-rw-r--r--macros/latex/contrib/microtype/README.md5
-rw-r--r--macros/latex/contrib/microtype/microtype-utf.dtx7
-rw-r--r--macros/latex/contrib/microtype/microtype.dtx922
-rw-r--r--macros/latex/contrib/microtype/microtype.ins2
-rw-r--r--macros/latex/contrib/microtype/microtype.pdfbin1694528 -> 1786700 bytes
-rw-r--r--macros/latex/contrib/stringstrings/stringstrings.dtx8771
-rw-r--r--macros/latex/contrib/stringstrings/stringstrings.ins12
-rw-r--r--macros/latex/contrib/stringstrings/stringstrings.pdfbin436700 -> 425249 bytes
-rw-r--r--macros/unicodetex/latex/polyglossia/README.md2
-rw-r--r--macros/unicodetex/latex/polyglossia/polyglossia.dtx219
-rw-r--r--macros/unicodetex/latex/polyglossia/polyglossia.pdfbin279219 -> 280545 bytes
-rw-r--r--support/aspell/dict/0index.html4
-rw-r--r--support/aspell/dict/0index.html.sigbin65 -> 65 bytes
-rw-r--r--systems/mac/mactex/ExtrasFolder.pdfbin38029 -> 37901 bytes
-rw-r--r--systems/mac/mactex/Licenses.txt4
-rw-r--r--systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl9
-rw-r--r--systems/texlive/tlnet/tlpkg/texlive.tlpdb298
-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.xzbin2247172 -> 2249232 bytes
-rw-r--r--systems/win32/miktex/tm/packages/next/pr.ini8
-rw-r--r--systems/win32/miktex/tm/packages/pr.ini8
-rw-r--r--systems/win32/w32tex/ChangeLog35
-rw-r--r--timestamp2
65 files changed, 7134 insertions, 7344 deletions
diff --git a/FILES.byname b/FILES.byname
index 99d3e00542..f4c211dcc4 100644
--- a/FILES.byname
+++ b/FILES.byname
@@ -5025,7 +5025,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
-2020/12/07 | 164032 | FILES.last07days
+2020/12/08 | 164478 | 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
@@ -168101,7 +168101,7 @@
2020/10/04 | 3618140 | install/macros/latex/contrib/memoir.tds.zip
2020/08/06 | 24409080 | install/macros/latex/contrib/mercatormap.tds.zip
2017/11/14 | 704736 | install/macros/latex/contrib/mfirstuc.tds.zip
-2019/11/18 | 1918343 | install/macros/latex/contrib/microtype.tds.zip
+2020/12/08 | 2005990 | install/macros/latex/contrib/microtype.tds.zip
2016/07/03 | 499067 | install/macros/latex/contrib/milog.tds.zip
2013/06/21 | 285067 | install/macros/latex/contrib/minibox.tds.zip
2018/07/13 | 7002043 | install/macros/latex/contrib/minitoc.tds.zip
@@ -168260,7 +168260,7 @@
2013/07/02 | 153964 | install/macros/plain/contrib/plstmary.tds.zip
2008/05/18 | 22279 | install/macros/plain/plnfss.tds.zip
2020/02/21 | 1370731 | install/macros/unicodetex/latex/fontspec.tds.zip
-2020/10/15 | 1029839 | install/macros/unicodetex/latex/polyglossia.tds.zip
+2020/12/08 | 1020393 | install/macros/unicodetex/latex/polyglossia.tds.zip
2016/02/13 | 111305 | install/macros/unicodetex/latex/realscripts.tds.zip
2020/08/30 | 4957201 | install/macros/unicodetex/latex/texnegar.tds.zip
2020/01/31 | 1873940 | install/macros/unicodetex/latex/unicode-math.tds.zip
@@ -191167,12 +191167,11 @@
2011/06/05 | 1577 | macros/latex/contrib/decimal/decimal.ins
2011/06/05 | 187033 | macros/latex/contrib/decimal/decimal.pdf
2011/06/05 | 165517 | macros/latex/contrib/decimal.zip
-2020/08/22 | 262752 | macros/latex/contrib/decision-table/decision-table-doc.pdf
-2020/08/22 | 7006 | macros/latex/contrib/decision-table/decision-table-doc.tex
-2020/08/22 | 5450 | macros/latex/contrib/decision-table/decision-table.sty
-2020/08/13 | 19105 | macros/latex/contrib/decision-table/LICENSE
-2020/08/22 | 626 | macros/latex/contrib/decision-table/README
-2020/08/22 | 271509 | macros/latex/contrib/decision-table.zip
+2020/12/08 | 15895 | macros/latex/contrib/decision-table/decision-table.dtx
+2020/12/08 | 1471 | macros/latex/contrib/decision-table/decision-table.ins
+2020/12/08 | 112176 | macros/latex/contrib/decision-table/decision-table.pdf
+2020/12/08 | 868 | macros/latex/contrib/decision-table/README
+2020/12/08 | 113076 | macros/latex/contrib/decision-table.zip
2020/05/21 | 56004 | macros/latex/contrib/decorule/decorule.dtx
2020/05/21 | 2186 | macros/latex/contrib/decorule/decorule.ins
2020/05/21 | 396165 | macros/latex/contrib/decorule/decorule.pdf
@@ -191871,11 +191870,11 @@
2009/10/31 | 8910 | macros/latex/contrib/draftmark/draftmark.sty
2009/10/06 | 1457 | macros/latex/contrib/draftmark/README
2009/11/03 | 252964 | macros/latex/contrib/draftmark.zip
-2020/07/01 | 38671 | macros/latex/contrib/draftwatermark/draftwatermark.dtx
-2020/07/01 | 3271 | macros/latex/contrib/draftwatermark/draftwatermark.ins
-2020/07/01 | 264619 | macros/latex/contrib/draftwatermark/draftwatermark.pdf
-2020/07/01 | 1580 | macros/latex/contrib/draftwatermark/README.md
-2020/07/01 | 276692 | macros/latex/contrib/draftwatermark.zip
+2020/12/08 | 49527 | macros/latex/contrib/draftwatermark/draftwatermark.dtx
+2020/12/08 | 3629 | macros/latex/contrib/draftwatermark/draftwatermark.ins
+2020/12/08 | 297379 | macros/latex/contrib/draftwatermark/draftwatermark.pdf
+2020/12/08 | 1615 | macros/latex/contrib/draftwatermark/README.md
+2020/12/08 | 310111 | macros/latex/contrib/draftwatermark.zip
2014/12/18 | 125852 | macros/latex/contrib/dramatist/dramatist.dtx
2012/02/02 | 417 | macros/latex/contrib/dramatist/dramatist.ins
2014/12/18 | 415250 | macros/latex/contrib/dramatist/dramatist.pdf
@@ -197631,60 +197630,60 @@
2015/07/09 | 1361 | macros/latex/contrib/jslectureplanner/cologne.lps
2018/09/26 | 2829 | macros/latex/contrib/jslectureplanner/english.lps
2017/03/12 | 710 | macros/latex/contrib/jslectureplanner/examples/English/lecpresbody-english.tex
-2020/05/11 | 85104 | macros/latex/contrib/jslectureplanner/examples/English/lecturebib-english.pdf
+2020/12/08 | 85100 | macros/latex/contrib/jslectureplanner/examples/English/lecturebib-english.pdf
2017/03/12 | 629 | macros/latex/contrib/jslectureplanner/examples/English/lecturebib-english.tex
-2020/05/11 | 57923 | macros/latex/contrib/jslectureplanner/examples/English/lecturehandout-english.pdf
+2020/12/08 | 57920 | macros/latex/contrib/jslectureplanner/examples/English/lecturehandout-english.pdf
2017/03/12 | 415 | macros/latex/contrib/jslectureplanner/examples/English/lecturehandout-english.tex
2014/12/10 | 22080 | macros/latex/contrib/jslectureplanner/examples/English/lectureplanner-examples.bib
-2020/05/11 | 84606 | macros/latex/contrib/jslectureplanner/examples/English/lecturepresentation-english.pdf
+2020/12/08 | 84600 | macros/latex/contrib/jslectureplanner/examples/English/lecturepresentation-english.pdf
2017/03/12 | 337 | macros/latex/contrib/jslectureplanner/examples/English/lecturepresentation-english.tex
-2020/05/11 | 56905 | macros/latex/contrib/jslectureplanner/examples/English/lectureprogram-english.pdf
+2020/12/08 | 56906 | macros/latex/contrib/jslectureplanner/examples/English/lectureprogram-english.pdf
2017/03/12 | 758 | macros/latex/contrib/jslectureplanner/examples/English/lectureprogram-english.tex
-2020/05/11 | 34575 | macros/latex/contrib/jslectureplanner/examples/English/lecturescript-english.pdf
+2020/12/08 | 34578 | macros/latex/contrib/jslectureplanner/examples/English/lecturescript-english.pdf
2017/03/12 | 643 | macros/latex/contrib/jslectureplanner/examples/English/lecturescript-english.tex
-2020/05/11 | 28442 | macros/latex/contrib/jslectureplanner/examples/English/membertable-blank-english.pdf
+2020/12/08 | 28442 | macros/latex/contrib/jslectureplanner/examples/English/membertable-blank-english.pdf
2017/03/12 | 486 | macros/latex/contrib/jslectureplanner/examples/English/membertable-blank-english.tex
-2020/05/11 | 28450 | macros/latex/contrib/jslectureplanner/examples/English/membertable-filled-english.pdf
+2020/12/08 | 28449 | macros/latex/contrib/jslectureplanner/examples/English/membertable-filled-english.pdf
2017/03/12 | 501 | macros/latex/contrib/jslectureplanner/examples/English/membertable-filled-english.tex
2019/02/04 | 2348 | macros/latex/contrib/jslectureplanner/examples/English/metadata.tex
-2020/05/11 | 27974 | macros/latex/contrib/jslectureplanner/examples/English/presencetable-blank-english.pdf
+2020/12/08 | 27971 | macros/latex/contrib/jslectureplanner/examples/English/presencetable-blank-english.pdf
2017/03/12 | 563 | macros/latex/contrib/jslectureplanner/examples/English/presencetable-blank-english.tex
-2020/05/11 | 26752 | macros/latex/contrib/jslectureplanner/examples/English/presencetable-filled-english.pdf
+2020/12/08 | 26749 | macros/latex/contrib/jslectureplanner/examples/English/presencetable-filled-english.pdf
2017/03/12 | 578 | macros/latex/contrib/jslectureplanner/examples/English/presencetable-filled-english.tex
-2020/05/11 | 25688 | macros/latex/contrib/jslectureplanner/examples/English/presentation-list-english.pdf
+2020/12/08 | 25685 | macros/latex/contrib/jslectureplanner/examples/English/presentation-list-english.pdf
2017/03/12 | 562 | macros/latex/contrib/jslectureplanner/examples/English/presentation-list-english.tex
2015/07/14 | 237 | macros/latex/contrib/jslectureplanner/examples/English/students.csv
2017/03/12 | 717 | macros/latex/contrib/jslectureplanner/examples/German/lecpresbody.tex
-2020/05/11 | 85488 | macros/latex/contrib/jslectureplanner/examples/German/lecturebib.pdf
+2020/12/08 | 85483 | macros/latex/contrib/jslectureplanner/examples/German/lecturebib.pdf
2017/03/12 | 651 | macros/latex/contrib/jslectureplanner/examples/German/lecturebib.tex
-2020/05/11 | 59148 | macros/latex/contrib/jslectureplanner/examples/German/lecturehandout.pdf
+2020/12/08 | 59144 | macros/latex/contrib/jslectureplanner/examples/German/lecturehandout.pdf
2017/03/12 | 420 | macros/latex/contrib/jslectureplanner/examples/German/lecturehandout.tex
2014/12/10 | 22080 | macros/latex/contrib/jslectureplanner/examples/German/lectureplanner-examples.bib
-2020/05/11 | 84992 | macros/latex/contrib/jslectureplanner/examples/German/lecturepresentation.pdf
+2020/12/08 | 84982 | macros/latex/contrib/jslectureplanner/examples/German/lecturepresentation.pdf
2015/07/07 | 343 | macros/latex/contrib/jslectureplanner/examples/German/lecturepresentation.tex
-2020/05/11 | 57899 | macros/latex/contrib/jslectureplanner/examples/German/lectureprogram.pdf
+2020/12/08 | 57898 | macros/latex/contrib/jslectureplanner/examples/German/lectureprogram.pdf
2015/07/07 | 776 | macros/latex/contrib/jslectureplanner/examples/German/lectureprogram.tex
-2020/05/11 | 34772 | macros/latex/contrib/jslectureplanner/examples/German/lecturescript.pdf
+2020/12/08 | 34769 | macros/latex/contrib/jslectureplanner/examples/German/lecturescript.pdf
2015/07/07 | 640 | macros/latex/contrib/jslectureplanner/examples/German/lecturescript.tex
-2020/05/11 | 28387 | macros/latex/contrib/jslectureplanner/examples/German/membertable-blank.pdf
+2020/12/08 | 28386 | macros/latex/contrib/jslectureplanner/examples/German/membertable-blank.pdf
2015/07/09 | 500 | macros/latex/contrib/jslectureplanner/examples/German/membertable-blank.tex
-2020/05/11 | 28509 | macros/latex/contrib/jslectureplanner/examples/German/membertable-filled.pdf
+2020/12/08 | 28506 | macros/latex/contrib/jslectureplanner/examples/German/membertable-filled.pdf
2015/07/14 | 515 | macros/latex/contrib/jslectureplanner/examples/German/membertable-filled.tex
2019/02/04 | 2385 | macros/latex/contrib/jslectureplanner/examples/German/metadata.tex
-2020/05/11 | 27896 | macros/latex/contrib/jslectureplanner/examples/German/presencetable-blank.pdf
+2020/12/08 | 27891 | macros/latex/contrib/jslectureplanner/examples/German/presencetable-blank.pdf
2015/07/08 | 576 | macros/latex/contrib/jslectureplanner/examples/German/presencetable-blank.tex
-2020/05/11 | 26784 | macros/latex/contrib/jslectureplanner/examples/German/presencetable-filled.pdf
+2020/12/08 | 26778 | macros/latex/contrib/jslectureplanner/examples/German/presencetable-filled.pdf
2015/07/14 | 591 | macros/latex/contrib/jslectureplanner/examples/German/presencetable-filled.tex
-2020/05/11 | 26864 | macros/latex/contrib/jslectureplanner/examples/German/presentation-list.pdf
+2020/12/08 | 26863 | macros/latex/contrib/jslectureplanner/examples/German/presentation-list.pdf
2015/07/14 | 584 | macros/latex/contrib/jslectureplanner/examples/German/presentation-list.tex
2015/07/14 | 237 | macros/latex/contrib/jslectureplanner/examples/German/students.csv
2018/09/26 | 2852 | macros/latex/contrib/jslectureplanner/german-default.lps
-2020/05/11 | 478838 | macros/latex/contrib/jslectureplanner/jslectureplanner.pdf
-2020/05/11 | 50900 | macros/latex/contrib/jslectureplanner/jslectureplanner.sty
-2020/05/11 | 79491 | macros/latex/contrib/jslectureplanner/jslectureplanner.tex
-2020/05/11 | 23626 | macros/latex/contrib/jslectureplanner/jsmembertable.sty
-2020/05/11 | 9969 | macros/latex/contrib/jslectureplanner/README
-2020/05/11 | 1450056 | macros/latex/contrib/jslectureplanner.zip
+2020/12/08 | 480426 | macros/latex/contrib/jslectureplanner/jslectureplanner.pdf
+2020/12/08 | 51545 | macros/latex/contrib/jslectureplanner/jslectureplanner.sty
+2020/12/08 | 80396 | macros/latex/contrib/jslectureplanner/jslectureplanner.tex
+2020/12/08 | 23626 | macros/latex/contrib/jslectureplanner/jsmembertable.sty
+2020/12/08 | 10031 | macros/latex/contrib/jslectureplanner/README
+2020/12/08 | 1451971 | macros/latex/contrib/jslectureplanner.zip
2015/06/02 | 141342 | macros/latex/contrib/jumplines/jumplines_doc.pdf
2015/06/02 | 10822 | macros/latex/contrib/jumplines/jumplines_doc.tex
2015/06/02 | 110248 | macros/latex/contrib/jumplines/jumplines_example.pdf
@@ -200023,12 +200022,12 @@
2015/08/25 | 424 | macros/latex/contrib/mhequ/README
2015/08/26 | 103328 | macros/latex/contrib/mhequ.zip
1998/06/11 | 136750 | macros/latex/contrib/mhs/mhs.sty
-2019/11/18 | 653235 | macros/latex/contrib/microtype/microtype.dtx
-2019/11/18 | 6237 | macros/latex/contrib/microtype/microtype.ins
-2019/11/18 | 1694528 | macros/latex/contrib/microtype/microtype.pdf
-2019/11/18 | 38046 | macros/latex/contrib/microtype/microtype-utf.dtx
-2019/11/18 | 3170 | macros/latex/contrib/microtype/README.md
-2019/11/18 | 1818410 | macros/latex/contrib/microtype.zip
+2020/12/08 | 661100 | macros/latex/contrib/microtype/microtype.dtx
+2020/12/08 | 6237 | macros/latex/contrib/microtype/microtype.ins
+2020/12/08 | 1786700 | macros/latex/contrib/microtype/microtype.pdf
+2020/12/08 | 38124 | macros/latex/contrib/microtype/microtype-utf.dtx
+2020/12/08 | 3114 | macros/latex/contrib/microtype/README.md
+2020/12/08 | 1905545 | macros/latex/contrib/microtype.zip
2010/03/15 | 194469 | macros/latex/contrib/midpage/midpage.pdf
2009/09/03 | 601 | macros/latex/contrib/midpage/midpage.sty
2010/03/15 | 976 | macros/latex/contrib/midpage/midpage.tex
@@ -207062,11 +207061,11 @@
2019/11/30 | 312236 | macros/latex/contrib/stringenc/stringenc.dtx
2019/11/30 | 723365 | macros/latex/contrib/stringenc/stringenc.pdf
2019/11/30 | 709246 | macros/latex/contrib/stringenc.zip
-2015/02/02 | 973 | macros/latex/contrib/stringstrings/README
-2015/02/02 | 156652 | macros/latex/contrib/stringstrings/stringstrings.dtx
-2007/10/02 | 210 | macros/latex/contrib/stringstrings/stringstrings.ins
-2015/02/02 | 436700 | macros/latex/contrib/stringstrings/stringstrings.pdf
-2015/02/02 | 436082 | macros/latex/contrib/stringstrings.zip
+2020/12/08 | 973 | macros/latex/contrib/stringstrings/README
+2020/12/08 | 161107 | macros/latex/contrib/stringstrings/stringstrings.dtx
+2007/10/02 | 216 | macros/latex/contrib/stringstrings/stringstrings.ins
+2020/12/08 | 425249 | macros/latex/contrib/stringstrings/stringstrings.pdf
+2020/12/08 | 422329 | macros/latex/contrib/stringstrings.zip
2018/06/04 | 2090 | macros/latex/contrib/struktex/LIESMICH.md
2018/06/04 | 2153 | macros/latex/contrib/struktex/README.md
2018/06/04 | 455221 | macros/latex/contrib/struktex/struktex.de.pdf
@@ -221658,10 +221657,10 @@
2020/09/29 | 211 | macros/unicodetex/latex/lilyglyphs/tex/README-tex
2020/09/29 | 49 | macros/unicodetex/latex/lilyglyphs/VERSION
2020/09/29 | 2283370 | macros/unicodetex/latex/lilyglyphs.zip
-2020/10/15 | 891187 | macros/unicodetex/latex/polyglossia/polyglossia.dtx
-2020/10/15 | 279219 | macros/unicodetex/latex/polyglossia/polyglossia.pdf
-2020/10/15 | 1943 | macros/unicodetex/latex/polyglossia/README.md
-2020/10/15 | 477946 | macros/unicodetex/latex/polyglossia.zip
+2020/12/08 | 897120 | macros/unicodetex/latex/polyglossia/polyglossia.dtx
+2020/12/08 | 280545 | macros/unicodetex/latex/polyglossia/polyglossia.pdf
+2020/12/08 | 1942 | macros/unicodetex/latex/polyglossia/README.md
+2020/12/08 | 480486 | macros/unicodetex/latex/polyglossia.zip
2020/10/16 | 341562 | macros/unicodetex/latex/quran/doc/quran-doc.pdf
2020/10/16 | 47890 | macros/unicodetex/latex/quran/doc/quran-doc.tex
2020/10/16 | 8846 | macros/unicodetex/latex/quran/doc/quran.png
@@ -245541,8 +245540,8 @@
2007/10/25 | 65 | support/aspell/aspell-lang-20071024.tar.bz2.sig
2010/11/22 | 294398 | support/aspell/aspell-lang-20101122.tar.gz
2010/11/22 | 65 | support/aspell/aspell-lang-20101122.tar.gz.sig
-2019/10/07 | 20056 | support/aspell/dict/0index.html
-2019/10/07 | 65 | support/aspell/dict/0index.html.sig
+2020/12/08 | 20056 | support/aspell/dict/0index.html
+2020/12/08 | 65 | support/aspell/dict/0index.html.sig
2004/03/15 | 256111 | support/aspell/dict/af/aspell-af-0.50-0.tar.bz2
2004/03/15 | 65 | support/aspell/dict/af/aspell-af-0.50-0.tar.bz2.sig
2004/12/28 | 40493 | support/aspell/dict/am/aspell6-am-0.03-1.tar.bz2
@@ -245616,6 +245615,8 @@
2018/04/17 | 65 | support/aspell/dict/en/aspell6-en-2018.04.16-0.tar.bz2.sig
2019/10/07 | 188331 | support/aspell/dict/en/aspell6-en-2019.10.06-0.tar.bz2
2019/10/07 | 65 | support/aspell/dict/en/aspell6-en-2019.10.06-0.tar.bz2.sig
+2020/12/08 | 188972 | support/aspell/dict/en/aspell6-en-2020.12.07-0.tar.bz2
+2020/12/08 | 65 | support/aspell/dict/en/aspell6-en-2020.12.07-0.tar.bz2.sig
2004/08/27 | 182442 | support/aspell/dict/en/aspell6-en-6.0-0.tar.bz2
2004/08/27 | 65 | support/aspell/dict/en/aspell6-en-6.0-0.tar.bz2.sig
2010/12/28 | 175534 | support/aspell/dict/en/aspell6-en-7.0-0.tar.bz2
@@ -254231,9 +254232,9 @@
1994/02/22 | 94984 | systems/mac/macmakeindex2.12.sea.hqx
1993/07/19 | 61321 | systems/mac/macmakeindex.sit.hqx
2020/04/10 | 47 | systems/mac/mactex/BasicTeX.pkg.md5
-2020/11/19 | 38029 | systems/mac/mactex/ExtrasFolder.pdf
+2020/12/07 | 37901 | systems/mac/mactex/ExtrasFolder.pdf
2020/04/10 | 50 | systems/mac/mactex/Ghostscript.pkg.md5
-2020/11/19 | 1780 | systems/mac/mactex/Licenses.txt
+2020/12/07 | 1780 | systems/mac/mactex/Licenses.txt
2020/04/08 | 4206162866 | systems/mac/mactex/mactex-20200407.pkg
2020/04/08 | 54 | systems/mac/mactex/mactex-20200407.pkg.md5
2020/04/07 | 83213937 | systems/mac/mactex/mactex-basictex-20200407.pkg
@@ -254241,8 +254242,8 @@
2020/03/29 | 24931926 | systems/mac/mactex/mactex-ghostscript-9.50-20200329.pkg
2020/03/29 | 71 | systems/mac/mactex/mactex-ghostscript-9.50-20200329.pkg.md5
2020/04/10 | 45 | systems/mac/mactex/MacTeX.pkg.md5
-2020/11/19 | 375624188 | systems/mac/mactex/MacTeXtras-20201119.zip
-2020/11/19 | 58 | systems/mac/mactex/MacTeXtras-20201119.zip.md5
+2020/12/07 | 375530616 | systems/mac/mactex/MacTeXtras-20201207.zip
+2020/12/07 | 58 | systems/mac/mactex/MacTeXtras-20201207.zip.md5
2020/04/10 | 169 | 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
@@ -255499,6 +255500,23 @@
2020/09/07 | 145756 | systems/texlive/tlnet/archive/akshar.doc.r56277.tar.xz
2020/09/07 | 2988 | systems/texlive/tlnet/archive/akshar.r56277.tar.xz
2020/09/07 | 1526912 | systems/texlive/tlnet/archive/akshar.source.r56277.tar.xz
+2020/12/08 | 340 | systems/texlive/tlnet/archive/albatross.aarch64-linux.r57089.tar.xz
+2020/12/08 | 340 | systems/texlive/tlnet/archive/albatross.amd64-freebsd.r57089.tar.xz
+2020/12/08 | 340 | systems/texlive/tlnet/archive/albatross.amd64-netbsd.r57089.tar.xz
+2020/12/08 | 340 | systems/texlive/tlnet/archive/albatross.armhf-linux.r57089.tar.xz
+2020/12/08 | 85344 | systems/texlive/tlnet/archive/albatross.doc.r57089.tar.xz
+2020/12/08 | 340 | systems/texlive/tlnet/archive/albatross.i386-cygwin.r57089.tar.xz
+2020/12/08 | 340 | systems/texlive/tlnet/archive/albatross.i386-freebsd.r57089.tar.xz
+2020/12/08 | 340 | systems/texlive/tlnet/archive/albatross.i386-linux.r57089.tar.xz
+2020/12/08 | 340 | systems/texlive/tlnet/archive/albatross.i386-netbsd.r57089.tar.xz
+2020/12/08 | 340 | systems/texlive/tlnet/archive/albatross.i386-solaris.r57089.tar.xz
+2020/12/08 | 2786276 | systems/texlive/tlnet/archive/albatross.r57089.tar.xz
+2020/12/08 | 340 | systems/texlive/tlnet/archive/albatross.x86_64-cygwin.r57089.tar.xz
+2020/12/08 | 348 | systems/texlive/tlnet/archive/albatross.x86_64-darwinlegacy.r57089.tar.xz
+2020/12/08 | 340 | systems/texlive/tlnet/archive/albatross.x86_64-darwin.r57089.tar.xz
+2020/12/08 | 344 | systems/texlive/tlnet/archive/albatross.x86_64-linuxmusl.r57089.tar.xz
+2020/12/08 | 344 | systems/texlive/tlnet/archive/albatross.x86_64-linux.r57089.tar.xz
+2020/12/08 | 340 | systems/texlive/tlnet/archive/albatross.x86_64-solaris.r57089.tar.xz
2020/03/24 | 1107112 | systems/texlive/tlnet/archive/alegreya.doc.r54512.tar.xz
2020/03/24 | 24434164 | systems/texlive/tlnet/archive/alegreya.r54512.tar.xz
2020/10/03 | 243640 | systems/texlive/tlnet/archive/aleph.aarch64-linux.r56522.tar.xz
@@ -255727,9 +255745,9 @@
2019/02/28 | 344 | systems/texlive/tlnet/archive/arara.x86_64-linuxmusl.r46840.tar.xz
2019/02/28 | 336 | systems/texlive/tlnet/archive/arara.x86_64-linux.r29036.tar.xz
2019/02/28 | 340 | systems/texlive/tlnet/archive/arara.x86_64-solaris.r29036.tar.xz
-2020/08/09 | 1059164 | systems/texlive/tlnet/archive/archaeologie.doc.r56075.tar.xz
-2020/08/09 | 72932 | systems/texlive/tlnet/archive/archaeologie.r56075.tar.xz
-2020/08/09 | 136216 | systems/texlive/tlnet/archive/archaeologie.source.r56075.tar.xz
+2020/12/08 | 1059164 | systems/texlive/tlnet/archive/archaeologie.doc.r57090.tar.xz
+2020/12/08 | 72928 | systems/texlive/tlnet/archive/archaeologie.r57090.tar.xz
+2020/12/08 | 136220 | systems/texlive/tlnet/archive/archaeologie.source.r57090.tar.xz
2019/02/28 | 2944788 | systems/texlive/tlnet/archive/archaic.doc.r38005.tar.xz
2019/02/28 | 372708 | systems/texlive/tlnet/archive/archaic.r38005.tar.xz
2019/02/28 | 134456 | systems/texlive/tlnet/archive/archaic.source.r38005.tar.xz
@@ -256501,8 +256519,8 @@
2019/02/28 | 1980 | systems/texlive/tlnet/archive/biblatex-source-division.r45379.tar.xz
2019/02/28 | 70196 | systems/texlive/tlnet/archive/biblatex-subseries.doc.r43330.tar.xz
2019/02/28 | 1384 | systems/texlive/tlnet/archive/biblatex-subseries.r43330.tar.xz
-2020/11/24 | 513436 | systems/texlive/tlnet/archive/biblatex-swiss-legal.doc.r56991.tar.xz
-2020/11/24 | 18148 | systems/texlive/tlnet/archive/biblatex-swiss-legal.r56991.tar.xz
+2020/12/08 | 513436 | systems/texlive/tlnet/archive/biblatex-swiss-legal.doc.r57090.tar.xz
+2020/12/08 | 18148 | systems/texlive/tlnet/archive/biblatex-swiss-legal.r57090.tar.xz
2019/02/28 | 333008 | systems/texlive/tlnet/archive/biblatex-trad.doc.r46668.tar.xz
2019/02/28 | 4172 | systems/texlive/tlnet/archive/biblatex-trad.r46668.tar.xz
2019/02/28 | 70876 | systems/texlive/tlnet/archive/biblatex-true-citepages-omit.doc.r44653.tar.xz
@@ -257425,7 +257443,7 @@
2020/03/04 | 596 | systems/texlive/tlnet/archive/collection-context.r54074.tar.xz
2020/12/06 | 1852 | systems/texlive/tlnet/archive/collection-fontsextra.r57074.tar.xz
2020/03/04 | 560 | systems/texlive/tlnet/archive/collection-fontsrecommended.r54074.tar.xz
-2020/03/04 | 524 | systems/texlive/tlnet/archive/collection-fontutils.r54074.tar.xz
+2020/12/08 | 528 | systems/texlive/tlnet/archive/collection-fontutils.r57089.tar.xz
2020/03/04 | 568 | systems/texlive/tlnet/archive/collection-formatsextra.r54074.tar.xz
2020/10/11 | 532 | systems/texlive/tlnet/archive/collection-games.r56623.tar.xz
2020/10/07 | 588 | systems/texlive/tlnet/archive/collection-humanities.r56575.tar.xz
@@ -258202,8 +258220,8 @@
2019/02/28 | 155764 | systems/texlive/tlnet/archive/decimal.doc.r23374.tar.xz
2019/02/28 | 1420 | systems/texlive/tlnet/archive/decimal.r23374.tar.xz
2019/02/28 | 6576 | systems/texlive/tlnet/archive/decimal.source.r23374.tar.xz
-2020/08/24 | 270388 | systems/texlive/tlnet/archive/decision-table.doc.r56164.tar.xz
-2020/08/24 | 2716 | systems/texlive/tlnet/archive/decision-table.r56164.tar.xz
+2020/12/08 | 270388 | systems/texlive/tlnet/archive/decision-table.doc.r57090.tar.xz
+2020/12/08 | 2712 | systems/texlive/tlnet/archive/decision-table.r57090.tar.xz
2020/05/22 | 397084 | systems/texlive/tlnet/archive/decorule.doc.r55230.tar.xz
2020/05/22 | 1476 | systems/texlive/tlnet/archive/decorule.r55230.tar.xz
2020/05/22 | 17264 | systems/texlive/tlnet/archive/decorule.source.r55230.tar.xz
@@ -258740,13 +258758,13 @@
2020/03/23 | 1603892 | systems/texlive/tlnet/archive/dvisvgm.amd64-freebsd.r54481.tar.xz
2020/03/23 | 1773452 | systems/texlive/tlnet/archive/dvisvgm.amd64-netbsd.r54471.tar.xz
2020/03/28 | 1525404 | systems/texlive/tlnet/archive/dvisvgm.armhf-linux.r54582.tar.xz
-2020/08/24 | 102720 | systems/texlive/tlnet/archive/dvisvgm.doc.r56166.tar.xz
+2020/12/08 | 102720 | systems/texlive/tlnet/archive/dvisvgm.doc.r57090.tar.xz
2020/06/02 | 1657680 | systems/texlive/tlnet/archive/dvisvgm.i386-cygwin.r55384.tar.xz
2020/03/23 | 1534660 | systems/texlive/tlnet/archive/dvisvgm.i386-freebsd.r54481.tar.xz
2020/03/22 | 1743172 | systems/texlive/tlnet/archive/dvisvgm.i386-linux.r54460.tar.xz
2020/03/23 | 1750000 | systems/texlive/tlnet/archive/dvisvgm.i386-netbsd.r54471.tar.xz
2020/03/23 | 1899780 | systems/texlive/tlnet/archive/dvisvgm.i386-solaris.r54481.tar.xz
-2020/08/24 | 880 | systems/texlive/tlnet/archive/dvisvgm.r56166.tar.xz
+2020/12/08 | 880 | systems/texlive/tlnet/archive/dvisvgm.r57090.tar.xz
2020/03/22 | 1461268 | systems/texlive/tlnet/archive/dvisvgm.win32.r54458.tar.xz
2020/06/02 | 1676208 | systems/texlive/tlnet/archive/dvisvgm.x86_64-cygwin.r55384.tar.xz
2020/03/23 | 1485812 | systems/texlive/tlnet/archive/dvisvgm.x86_64-darwinlegacy.r54481.tar.xz
@@ -258973,9 +258991,9 @@
2019/02/28 | 23748 | systems/texlive/tlnet/archive/enctex.r34957.tar.xz
2019/02/28 | 251156 | systems/texlive/tlnet/archive/encxvlna.doc.r34087.tar.xz
2019/02/28 | 2572 | systems/texlive/tlnet/archive/encxvlna.r34087.tar.xz
-2019/05/06 | 181292 | systems/texlive/tlnet/archive/endfloat.doc.r51003.tar.xz
-2019/05/06 | 5148 | systems/texlive/tlnet/archive/endfloat.r51003.tar.xz
-2019/05/06 | 29220 | systems/texlive/tlnet/archive/endfloat.source.r51003.tar.xz
+2020/12/08 | 181292 | systems/texlive/tlnet/archive/endfloat.doc.r57090.tar.xz
+2020/12/08 | 5080 | systems/texlive/tlnet/archive/endfloat.r57090.tar.xz
+2020/12/08 | 29220 | systems/texlive/tlnet/archive/endfloat.source.r57090.tar.xz
2019/02/28 | 229624 | systems/texlive/tlnet/archive/endheads.doc.r43750.tar.xz
2019/02/28 | 2584 | systems/texlive/tlnet/archive/endheads.r43750.tar.xz
2019/02/28 | 7828 | systems/texlive/tlnet/archive/endheads.source.r43750.tar.xz
@@ -261130,9 +261148,9 @@
2020/10/28 | 3641928 | systems/texlive/tlnet/archive/l3experimental.doc.r56785.tar.xz
2020/10/28 | 28592 | systems/texlive/tlnet/archive/l3experimental.r56785.tar.xz
2020/10/28 | 91228 | systems/texlive/tlnet/archive/l3experimental.source.r56785.tar.xz
-2020/12/07 | 10281132 | systems/texlive/tlnet/archive/l3kernel.doc.r57085.tar.xz
-2020/12/07 | 157592 | systems/texlive/tlnet/archive/l3kernel.r57085.tar.xz
-2020/12/07 | 552204 | systems/texlive/tlnet/archive/l3kernel.source.r57085.tar.xz
+2020/12/08 | 10282408 | systems/texlive/tlnet/archive/l3kernel.doc.r57088.tar.xz
+2020/12/08 | 157680 | systems/texlive/tlnet/archive/l3kernel.r57088.tar.xz
+2020/12/08 | 552264 | systems/texlive/tlnet/archive/l3kernel.source.r57088.tar.xz
2020/10/28 | 1781628 | systems/texlive/tlnet/archive/l3packages.doc.r56785.tar.xz
2020/10/28 | 20568 | systems/texlive/tlnet/archive/l3packages.r56785.tar.xz
2020/10/28 | 66940 | systems/texlive/tlnet/archive/l3packages.source.r56785.tar.xz
@@ -263402,8 +263420,8 @@
2019/02/28 | 2096 | systems/texlive/tlnet/archive/ot-tableau.r44889.tar.xz
2019/02/28 | 60352 | systems/texlive/tlnet/archive/oubraces.doc.r21833.tar.xz
2019/02/28 | 1660 | systems/texlive/tlnet/archive/oubraces.r21833.tar.xz
-2020/11/24 | 511088 | systems/texlive/tlnet/archive/oup-authoring-template.doc.r56991.tar.xz
-2020/11/24 | 15128 | systems/texlive/tlnet/archive/oup-authoring-template.r56991.tar.xz
+2020/12/08 | 511088 | systems/texlive/tlnet/archive/oup-authoring-template.doc.r57090.tar.xz
+2020/12/08 | 15128 | systems/texlive/tlnet/archive/oup-authoring-template.r57090.tar.xz
2020/03/13 | 1596 | systems/texlive/tlnet/archive/outerhbox.r54254.tar.xz
2019/02/28 | 234580 | systems/texlive/tlnet/archive/outline.doc.r18360.tar.xz
2019/02/28 | 1528 | systems/texlive/tlnet/archive/outline.r18360.tar.xz
@@ -265790,9 +265808,9 @@
2019/02/28 | 310384 | systems/texlive/tlnet/archive/syllogism.doc.r15878.tar.xz
2019/02/28 | 2728 | systems/texlive/tlnet/archive/syllogism.r15878.tar.xz
2019/02/28 | 36132 | systems/texlive/tlnet/archive/symbol.r31835.tar.xz
-2019/02/28 | 1844 | systems/texlive/tlnet/archive/sympytexpackage.doc.r45818.tar.xz
-2019/02/28 | 3640 | systems/texlive/tlnet/archive/sympytexpackage.r45818.tar.xz
-2019/02/28 | 17088 | systems/texlive/tlnet/archive/sympytexpackage.source.r45818.tar.xz
+2020/12/08 | 1844 | systems/texlive/tlnet/archive/sympytexpackage.doc.r57090.tar.xz
+2020/12/08 | 3636 | systems/texlive/tlnet/archive/sympytexpackage.r57090.tar.xz
+2020/12/08 | 17084 | systems/texlive/tlnet/archive/sympytexpackage.source.r57090.tar.xz
2020/03/02 | 71256 | systems/texlive/tlnet/archive/synctex.aarch64-linux.r53999.tar.xz
2020/03/02 | 76492 | systems/texlive/tlnet/archive/synctex.amd64-freebsd.r53999.tar.xz
2020/03/02 | 65356 | systems/texlive/tlnet/archive/synctex.amd64-netbsd.r53995.tar.xz
@@ -266184,8 +266202,8 @@
2020/03/24 | 280 | systems/texlive/tlnet/archive/texlive-cz.r54496.tar.xz
2020/03/29 | 1338300 | systems/texlive/tlnet/archive/texlive-de.doc.r54604.tar.xz
2020/03/29 | 272 | systems/texlive/tlnet/archive/texlive-de.r54604.tar.xz
-2020/12/06 | 170500 | systems/texlive/tlnet/archive/texlive-docindex.doc.r57070.tar.xz
-2020/12/06 | 388 | systems/texlive/tlnet/archive/texlive-docindex.r57070.tar.xz
+2020/12/08 | 170532 | systems/texlive/tlnet/archive/texlive-docindex.doc.r57087.tar.xz
+2020/12/08 | 388 | systems/texlive/tlnet/archive/texlive-docindex.r57087.tar.xz
2020/04/16 | 1891392 | systems/texlive/tlnet/archive/texlive-en.doc.r54755.tar.xz
2020/04/16 | 272 | systems/texlive/tlnet/archive/texlive-en.r54755.tar.xz
2020/03/22 | 3090144 | systems/texlive/tlnet/archive/texlive-es.doc.r54465.tar.xz
@@ -266241,7 +266259,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
-2020/12/07 | 218656 | systems/texlive/tlnet/archive/texlive-scripts.doc.r57076.tar.xz
+2020/12/08 | 218652 | systems/texlive/tlnet/archive/texlive-scripts.doc.r57087.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
@@ -266265,7 +266283,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
-2020/12/07 | 132124 | systems/texlive/tlnet/archive/texlive-scripts.r57076.tar.xz
+2020/12/08 | 132056 | systems/texlive/tlnet/archive/texlive-scripts.r57087.tar.xz
2020/08/24 | 36336 | systems/texlive/tlnet/archive/texlive-scripts.win32.r56157.tar.xz
2020/05/17 | 588 | systems/texlive/tlnet/archive/texlive-scripts.x86_64-cygwin.r55172.tar.xz
2020/05/12 | 592 | systems/texlive/tlnet/archive/texlive-scripts.x86_64-darwinlegacy.r55117.tar.xz
@@ -267249,9 +267267,9 @@
2020/10/23 | 1890332 | systems/texlive/tlnet/archive/utfsym.r56729.tar.xz
2019/02/28 | 2820 | systems/texlive/tlnet/archive/utopia.doc.r15878.tar.xz
2019/02/28 | 205556 | systems/texlive/tlnet/archive/utopia.r15878.tar.xz
-2020/11/25 | 116936 | systems/texlive/tlnet/archive/ut-thesis.doc.r56996.tar.xz
-2020/11/25 | 2540 | systems/texlive/tlnet/archive/ut-thesis.r56996.tar.xz
-2020/11/25 | 6608 | systems/texlive/tlnet/archive/ut-thesis.source.r56996.tar.xz
+2020/12/08 | 116940 | systems/texlive/tlnet/archive/ut-thesis.doc.r57090.tar.xz
+2020/12/08 | 2544 | systems/texlive/tlnet/archive/ut-thesis.r57090.tar.xz
+2020/12/08 | 6604 | systems/texlive/tlnet/archive/ut-thesis.source.r57090.tar.xz
2019/02/28 | 11764 | systems/texlive/tlnet/archive/uwmslide.doc.r27354.tar.xz
2019/02/28 | 3916 | systems/texlive/tlnet/archive/uwmslide.r27354.tar.xz
2019/02/28 | 137544 | systems/texlive/tlnet/archive/uwthesis.doc.r15878.tar.xz
@@ -267925,16 +267943,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
2020/12/03 | 105972 | systems/texlive/tlnet/install-tl
-2020/12/07 | 5500857 | systems/texlive/tlnet/install-tl-unx.tar.gz
-2020/12/07 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
-2020/12/07 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
+2020/12/08 | 5500587 | systems/texlive/tlnet/install-tl-unx.tar.gz
+2020/12/08 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
+2020/12/08 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
2020/08/23 | 4889 | systems/texlive/tlnet/install-tl-windows.bat
-2020/12/07 | 19385967 | systems/texlive/tlnet/install-tl-windows.exe
-2020/12/07 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
-2020/12/07 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
-2020/12/07 | 24270285 | systems/texlive/tlnet/install-tl.zip
-2020/12/07 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
-2020/12/07 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc
+2020/12/08 | 19382807 | systems/texlive/tlnet/install-tl-windows.exe
+2020/12/08 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
+2020/12/08 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
+2020/12/08 | 24270228 | systems/texlive/tlnet/install-tl.zip
+2020/12/08 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
+2020/12/08 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc
2020/03/05 | 1215 | systems/texlive/tlnet/README.md
2020/04/06 | 5961 | systems/texlive/tlnet/tlpkg/gpg/pubring.gpg
2016/04/12 | 600 | systems/texlive/tlnet/tlpkg/gpg/random_seed
@@ -267943,7 +267961,7 @@
2020/04/06 | 1280 | systems/texlive/tlnet/tlpkg/gpg/trustdb.gpg
2020/11/22 | 49274 | systems/texlive/tlnet/tlpkg/installer/config.guess
2010/11/11 | 11651 | systems/texlive/tlnet/tlpkg/installer/COPYING.MinGW-runtime.txt
-2020/12/05 | 6607 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
+2020/12/07 | 6323 | 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
2018/04/29 | 13647 | systems/texlive/tlnet/tlpkg/installer/DirSelect.pm
@@ -267990,12 +268008,12 @@
2020/05/17 | 20322 | systems/texlive/tlnet/tlpkg/TeXLive/TLCrypto.pm
2020/05/03 | 4786 | systems/texlive/tlnet/tlpkg/TeXLive/TLDownload.pm
2020/09/22 | 27563 | systems/texlive/tlnet/tlpkg/TeXLive/TLPaper.pm
-2020/12/07 | 16672559 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
-2020/12/07 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
+2020/12/08 | 16679012 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
+2020/12/08 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
2020/05/13 | 86417 | systems/texlive/tlnet/tlpkg/TeXLive/TLPDB.pm
-2020/12/07 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
-2020/12/07 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
-2020/12/07 | 2247172 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
+2020/12/08 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
+2020/12/08 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
+2020/12/08 | 2249232 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
2020/04/15 | 58761 | systems/texlive/tlnet/tlpkg/TeXLive/TLPOBJ.pm
2020/03/20 | 41736 | systems/texlive/tlnet/tlpkg/TeXLive/TLPSRC.pm
2020/05/11 | 15010 | systems/texlive/tlnet/tlpkg/TeXLive/TLTREE.pm
@@ -272549,7 +272567,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
-2020/12/07 | 552523 | systems/win32/miktex/tm/packages/files.csv.lzma
+2020/12/08 | 552523 | 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
@@ -273727,9 +273745,9 @@
2018/01/12 | 157226 | systems/win32/miktex/tm/packages/miktex-zip-bin-x64.tar.lzma
2020/10/31 | 39333 | systems/win32/miktex/tm/packages/miktex-zlib-bin-2.9.tar.lzma
2020/10/31 | 43032 | systems/win32/miktex/tm/packages/miktex-zlib-bin-x64-2.9.tar.lzma
-2020/12/07 | 204962 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma
-2020/12/07 | 1229495 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma
-2020/12/07 | 1148088 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma
+2020/12/08 | 204981 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma
+2020/12/08 | 1230284 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma
+2020/12/08 | 1147508 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma
2020/10/31 | 13300 | systems/win32/miktex/tm/packages/miktex-zzip-bin-2.9.tar.lzma
2020/10/31 | 14127 | 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
@@ -273886,187 +273904,187 @@
2018/04/09 | 400132 | systems/win32/miktex/tm/packages/newunicodechar.tar.lzma
2011/09/19 | 101312 | systems/win32/miktex/tm/packages/newvbtm.tar.lzma
2020/09/06 | 231669 | systems/win32/miktex/tm/packages/newverbs.tar.lzma
-2020/12/07 | 552335 | systems/win32/miktex/tm/packages/next/files.csv.lzma
-2020/12/07 | 50452 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-2.9.tar.lzma
-2020/12/07 | 55965 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma
-2020/12/07 | 965514 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-2.9.tar.lzma
-2020/12/07 | 1074600 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma
-2020/12/07 | 28657 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-2.9.tar.lzma
-2020/12/07 | 30915 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma
-2020/12/07 | 28898 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-2.9.tar.lzma
-2020/12/07 | 33998 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma
-2020/12/07 | 49422 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-2.9.tar.lzma
-2020/12/07 | 57203 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma
-2020/12/07 | 84738 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-2.9.tar.lzma
-2020/12/07 | 93679 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma
-2020/12/07 | 65721 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-2.9.tar.lzma
-2020/12/07 | 73446 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma
-2020/12/07 | 26995 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-2.9.tar.lzma
-2020/12/07 | 30649 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma
-2020/12/07 | 329590 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-2.9.tar.lzma
-2020/12/07 | 392150 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma
-2020/12/07 | 32316 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-2.9.tar.lzma
-2020/12/07 | 36388 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma
-2020/12/07 | 50539 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-2.9.tar.lzma
-2020/12/07 | 55651 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma
-2020/12/07 | 204265 | systems/win32/miktex/tm/packages/next/miktex-console-bin-2.9.tar.lzma
-2020/12/07 | 224177 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma
-2020/12/07 | 179093 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-2.9.tar.lzma
-2020/12/07 | 195311 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma
-2020/12/07 | 51929 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-2.9.tar.lzma
-2020/12/07 | 58649 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma
-2020/12/07 | 20829 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-2.9.tar.lzma
-2020/12/07 | 22999 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma
-2020/12/07 | 461715 | systems/win32/miktex/tm/packages/next/miktex-doc.tar.lzma
-2020/12/07 | 45338 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-2.9.tar.lzma
-2020/12/07 | 51141 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma
-2020/12/07 | 279278 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-2.9.tar.lzma
-2020/12/07 | 318749 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma
-2020/12/07 | 40851 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-2.9.tar.lzma
-2020/12/07 | 44897 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma
-2020/12/07 | 116218 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-2.9.tar.lzma
-2020/12/07 | 130354 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma
-2020/12/07 | 1285437 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-2.9.tar.lzma
-2020/12/07 | 1416710 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma
-2020/12/07 | 86707 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-2.9.tar.lzma
-2020/12/07 | 98630 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma
-2020/12/07 | 42905 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-2.9.tar.lzma
-2020/12/07 | 47716 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma
-2020/12/07 | 24898 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-2.9.tar.lzma
-2020/12/07 | 27781 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma
-2020/12/07 | 55826 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-2.9.tar.lzma
-2020/12/07 | 62897 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma
-2020/12/07 | 133552 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-2.9.tar.lzma
-2020/12/07 | 151979 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma
-2020/12/07 | 72804 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-2.9.tar.lzma
-2020/12/07 | 77323 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma
-2020/12/07 | 71539 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-2.9.tar.lzma
-2020/12/07 | 80446 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma
-2020/12/07 | 258167 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-2.9.tar.lzma
-2020/12/07 | 295231 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma
-2020/12/07 | 21841 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-2.9.tar.lzma
-2020/12/07 | 24823 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma
-2020/12/07 | 99234 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-2.9.tar.lzma
-2020/12/07 | 114664 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma
-2020/12/07 | 63643 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-2.9.tar.lzma
-2020/12/07 | 72753 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma
-2020/12/07 | 94299 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-2.9.tar.lzma
-2020/12/07 | 113947 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma
-2020/12/07 | 37687 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-2.9.tar.lzma
-2020/12/07 | 42288 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma
-2020/12/07 | 483407 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-2.9.tar.lzma
-2020/12/07 | 567631 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma
-2020/12/07 | 146912 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-2.9.tar.lzma
-2020/12/07 | 159474 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma
-2020/12/07 | 94654 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-2.9.tar.lzma
-2020/12/07 | 108985 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma
-2020/12/07 | 15964 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-2.9.tar.lzma
-2020/12/07 | 17629 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma
-2020/12/07 | 27997 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-2.9.tar.lzma
-2020/12/07 | 29697 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma
-2020/12/07 | 623507 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-2.9.tar.lzma
-2020/12/07 | 677736 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma
-2020/12/07 | 531525 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-2.9.tar.lzma
-2020/12/07 | 596563 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma
-2020/12/07 | 558066 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-2.9.tar.lzma
-2020/12/07 | 598902 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma
-2020/12/07 | 93718 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-2.9.tar.lzma
-2020/12/07 | 102801 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma
-2020/12/07 | 1714522 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-2.9.tar.lzma
-2020/12/07 | 1985739 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma
-2020/12/07 | 67417 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-2.9.tar.lzma
-2020/12/07 | 74028 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma
-2020/12/07 | 27125 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-2.9.tar.lzma
-2020/12/07 | 31248 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma
-2020/12/07 | 7566 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-2.9.tar.lzma
-2020/12/07 | 8574 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma
-2020/12/07 | 194080 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-2.9.tar.lzma
-2020/12/07 | 212137 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma
-2020/12/07 | 248724 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-2.9.tar.lzma
-2020/12/07 | 282561 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma
-2020/12/07 | 96468 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-2.9.tar.lzma
-2020/12/07 | 101650 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma
-2020/12/07 | 58555 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-2.9.tar.lzma
-2020/12/07 | 65756 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-x64-2.9.tar.lzma
-2020/12/07 | 119031 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-2.9.tar.lzma
-2020/12/07 | 130414 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma
-2020/12/07 | 144052 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-2.9.tar.lzma
-2020/12/07 | 159901 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma
-2020/12/07 | 199148 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-2.9.tar.lzma
-2020/12/07 | 179969 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma
-2020/12/07 | 64449 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-2.9.tar.lzma
-2020/12/07 | 74252 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma
-2020/12/07 | 31034 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-2.9.tar.lzma
-2020/12/07 | 34805 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma
-2020/12/07 | 36649 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-2.9.tar.lzma
-2020/12/07 | 41062 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma
-2020/12/07 | 42661 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-2.9.tar.lzma
-2020/12/07 | 46536 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma
-2020/12/07 | 45776 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-2.9.tar.lzma
-2020/12/07 | 52229 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma
-2020/12/07 | 192316 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-2.9.tar.lzma
-2020/12/07 | 210332 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-x64-2.9.tar.lzma
-2020/12/07 | 35163 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin.tar.lzma
-2020/12/07 | 39368 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin-x64.tar.lzma
-2020/12/07 | 737759 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-2.9.tar.lzma
-2020/12/07 | 809206 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma
-2020/12/07 | 197960 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-2.9.tar.lzma
-2020/12/07 | 202380 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma
-2020/12/07 | 207520 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-2.9.tar.lzma
-2020/12/07 | 243117 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma
-2020/12/07 | 78412 | systems/win32/miktex/tm/packages/next/miktex-png-bin-2.9.tar.lzma
-2020/12/07 | 87475 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma
-2020/12/07 | 1167388 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-2.9.tar.lzma
-2020/12/07 | 1302723 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma
-2020/12/07 | 19935 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-2.9.tar.lzma
-2020/12/07 | 23647 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma
-2020/12/07 | 31228 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-2.9.tar.lzma
-2020/12/07 | 36951 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma
-2020/12/07 | 63433 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-2.9.tar.lzma
-2020/12/07 | 71568 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma
-2020/12/07 | 42644 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-2.9.tar.lzma
-2020/12/07 | 50791 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma
-2020/12/07 | 1125771 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-2.9.tar.lzma
-2020/12/07 | 1245440 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma
-2020/12/07 | 42092 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-2.9.tar.lzma
-2020/12/07 | 51471 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma
-2020/12/07 | 55959 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin.tar.lzma
-2020/12/07 | 59527 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64.tar.lzma
-2020/12/07 | 26917 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-2.9.tar.lzma
-2020/12/07 | 29139 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma
-2020/12/07 | 16005 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-2.9.tar.lzma
-2020/12/07 | 17753 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma
-2020/12/07 | 63137 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-2.9.tar.lzma
-2020/12/07 | 69666 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma
-2020/12/07 | 151757 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-2.9.tar.lzma
-2020/12/07 | 165548 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma
-2020/12/07 | 56674 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-2.9.tar.lzma
-2020/12/07 | 65238 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma
-2020/12/07 | 97425 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-2.9.tar.lzma
-2020/12/07 | 104536 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma
-2020/12/07 | 2512502 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-2.9.tar.lzma
-2020/12/07 | 2635596 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma
-2020/12/07 | 54679 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-2.9.tar.lzma
-2020/12/07 | 61705 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma
-2020/12/07 | 33124 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin.tar.lzma
-2020/12/07 | 36951 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin-x64.tar.lzma
-2020/12/07 | 27073 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-2.9.tar.lzma
-2020/12/07 | 32892 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma
-2020/12/07 | 65962 | systems/win32/miktex/tm/packages/next/miktex-web-bin-2.9.tar.lzma
-2020/12/07 | 70065 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma
-2020/12/07 | 250993 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-2.9.tar.lzma
-2020/12/07 | 280228 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma
-2020/12/07 | 580811 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-2.9.tar.lzma
-2020/12/07 | 617783 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma
-2020/12/07 | 39338 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-2.9.tar.lzma
-2020/12/07 | 43106 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma
-2020/12/07 | 204960 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma
-2020/12/07 | 1229940 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma
-2020/12/07 | 1147999 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma
-2020/12/07 | 13302 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-2.9.tar.lzma
-2020/12/07 | 14154 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma
+2020/12/08 | 552335 | systems/win32/miktex/tm/packages/next/files.csv.lzma
+2020/12/08 | 50433 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-2.9.tar.lzma
+2020/12/08 | 55976 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma
+2020/12/08 | 965373 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-2.9.tar.lzma
+2020/12/08 | 1075786 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma
+2020/12/08 | 28612 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-2.9.tar.lzma
+2020/12/08 | 30912 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma
+2020/12/08 | 28920 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-2.9.tar.lzma
+2020/12/08 | 33978 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma
+2020/12/08 | 49754 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-2.9.tar.lzma
+2020/12/08 | 57245 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma
+2020/12/08 | 84620 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-2.9.tar.lzma
+2020/12/08 | 93707 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma
+2020/12/08 | 65787 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-2.9.tar.lzma
+2020/12/08 | 73416 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma
+2020/12/08 | 27012 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-2.9.tar.lzma
+2020/12/08 | 30656 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma
+2020/12/08 | 329582 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-2.9.tar.lzma
+2020/12/08 | 392404 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma
+2020/12/08 | 32354 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-2.9.tar.lzma
+2020/12/08 | 36405 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma
+2020/12/08 | 50512 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-2.9.tar.lzma
+2020/12/08 | 55768 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma
+2020/12/08 | 204248 | systems/win32/miktex/tm/packages/next/miktex-console-bin-2.9.tar.lzma
+2020/12/08 | 224263 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma
+2020/12/08 | 179271 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-2.9.tar.lzma
+2020/12/08 | 195313 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma
+2020/12/08 | 51886 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-2.9.tar.lzma
+2020/12/08 | 58688 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma
+2020/12/08 | 20832 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-2.9.tar.lzma
+2020/12/08 | 22967 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma
+2020/12/08 | 461603 | systems/win32/miktex/tm/packages/next/miktex-doc.tar.lzma
+2020/12/08 | 45388 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-2.9.tar.lzma
+2020/12/08 | 51130 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma
+2020/12/08 | 279880 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-2.9.tar.lzma
+2020/12/08 | 318604 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma
+2020/12/08 | 40901 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-2.9.tar.lzma
+2020/12/08 | 44951 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma
+2020/12/08 | 115954 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-2.9.tar.lzma
+2020/12/08 | 130424 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma
+2020/12/08 | 1277098 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-2.9.tar.lzma
+2020/12/08 | 1411213 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma
+2020/12/08 | 86758 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-2.9.tar.lzma
+2020/12/08 | 98550 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma
+2020/12/08 | 42912 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-2.9.tar.lzma
+2020/12/08 | 47702 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma
+2020/12/08 | 24906 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-2.9.tar.lzma
+2020/12/08 | 27777 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma
+2020/12/08 | 55873 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-2.9.tar.lzma
+2020/12/08 | 62963 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma
+2020/12/08 | 133611 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-2.9.tar.lzma
+2020/12/08 | 151903 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma
+2020/12/08 | 72870 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-2.9.tar.lzma
+2020/12/08 | 77209 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma
+2020/12/08 | 71606 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-2.9.tar.lzma
+2020/12/08 | 80702 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma
+2020/12/08 | 258237 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-2.9.tar.lzma
+2020/12/08 | 295355 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma
+2020/12/08 | 21855 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-2.9.tar.lzma
+2020/12/08 | 24841 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma
+2020/12/08 | 99169 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-2.9.tar.lzma
+2020/12/08 | 114679 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma
+2020/12/08 | 63618 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-2.9.tar.lzma
+2020/12/08 | 72761 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma
+2020/12/08 | 94346 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-2.9.tar.lzma
+2020/12/08 | 113589 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma
+2020/12/08 | 37675 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-2.9.tar.lzma
+2020/12/08 | 42214 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma
+2020/12/08 | 482931 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-2.9.tar.lzma
+2020/12/08 | 567242 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma
+2020/12/08 | 146834 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-2.9.tar.lzma
+2020/12/08 | 159692 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma
+2020/12/08 | 94622 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-2.9.tar.lzma
+2020/12/08 | 109009 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma
+2020/12/08 | 15987 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-2.9.tar.lzma
+2020/12/08 | 17636 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma
+2020/12/08 | 27934 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-2.9.tar.lzma
+2020/12/08 | 29687 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma
+2020/12/08 | 623616 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-2.9.tar.lzma
+2020/12/08 | 677881 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma
+2020/12/08 | 531249 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-2.9.tar.lzma
+2020/12/08 | 596989 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma
+2020/12/08 | 558263 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-2.9.tar.lzma
+2020/12/08 | 596589 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma
+2020/12/08 | 93674 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-2.9.tar.lzma
+2020/12/08 | 102964 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma
+2020/12/08 | 1703669 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-2.9.tar.lzma
+2020/12/08 | 1966202 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma
+2020/12/08 | 67416 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-2.9.tar.lzma
+2020/12/08 | 74060 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma
+2020/12/08 | 27136 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-2.9.tar.lzma
+2020/12/08 | 31154 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma
+2020/12/08 | 7564 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-2.9.tar.lzma
+2020/12/08 | 8568 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma
+2020/12/08 | 194078 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-2.9.tar.lzma
+2020/12/08 | 212303 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma
+2020/12/08 | 248707 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-2.9.tar.lzma
+2020/12/08 | 282553 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma
+2020/12/08 | 96314 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-2.9.tar.lzma
+2020/12/08 | 101632 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma
+2020/12/08 | 58641 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-2.9.tar.lzma
+2020/12/08 | 65987 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-x64-2.9.tar.lzma
+2020/12/08 | 119105 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-2.9.tar.lzma
+2020/12/08 | 130423 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma
+2020/12/08 | 144033 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-2.9.tar.lzma
+2020/12/08 | 159998 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma
+2020/12/08 | 199193 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-2.9.tar.lzma
+2020/12/08 | 179748 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma
+2020/12/08 | 64464 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-2.9.tar.lzma
+2020/12/08 | 74275 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma
+2020/12/08 | 31027 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-2.9.tar.lzma
+2020/12/08 | 34794 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma
+2020/12/08 | 36640 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-2.9.tar.lzma
+2020/12/08 | 41044 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma
+2020/12/08 | 42625 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-2.9.tar.lzma
+2020/12/08 | 46526 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma
+2020/12/08 | 45805 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-2.9.tar.lzma
+2020/12/08 | 52188 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma
+2020/12/08 | 192715 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-2.9.tar.lzma
+2020/12/08 | 210108 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-x64-2.9.tar.lzma
+2020/12/08 | 35192 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin.tar.lzma
+2020/12/08 | 39352 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin-x64.tar.lzma
+2020/12/08 | 736335 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-2.9.tar.lzma
+2020/12/08 | 810168 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma
+2020/12/08 | 197663 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-2.9.tar.lzma
+2020/12/08 | 202394 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma
+2020/12/08 | 207498 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-2.9.tar.lzma
+2020/12/08 | 243148 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma
+2020/12/08 | 78397 | systems/win32/miktex/tm/packages/next/miktex-png-bin-2.9.tar.lzma
+2020/12/08 | 87434 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma
+2020/12/08 | 1168221 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-2.9.tar.lzma
+2020/12/08 | 1302638 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma
+2020/12/08 | 19930 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-2.9.tar.lzma
+2020/12/08 | 23638 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma
+2020/12/08 | 31226 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-2.9.tar.lzma
+2020/12/08 | 36957 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma
+2020/12/08 | 63544 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-2.9.tar.lzma
+2020/12/08 | 71612 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma
+2020/12/08 | 42613 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-2.9.tar.lzma
+2020/12/08 | 50945 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma
+2020/12/08 | 1125542 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-2.9.tar.lzma
+2020/12/08 | 1246706 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma
+2020/12/08 | 42090 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-2.9.tar.lzma
+2020/12/08 | 51467 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma
+2020/12/08 | 55990 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin.tar.lzma
+2020/12/08 | 59484 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64.tar.lzma
+2020/12/08 | 26857 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-2.9.tar.lzma
+2020/12/08 | 29110 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma
+2020/12/08 | 16009 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-2.9.tar.lzma
+2020/12/08 | 17730 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma
+2020/12/08 | 63090 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-2.9.tar.lzma
+2020/12/08 | 69643 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma
+2020/12/08 | 151749 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-2.9.tar.lzma
+2020/12/08 | 165518 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma
+2020/12/08 | 56663 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-2.9.tar.lzma
+2020/12/08 | 65246 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma
+2020/12/08 | 97427 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-2.9.tar.lzma
+2020/12/08 | 104454 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma
+2020/12/08 | 2512398 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-2.9.tar.lzma
+2020/12/08 | 2634843 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma
+2020/12/08 | 54850 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-2.9.tar.lzma
+2020/12/08 | 62032 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma
+2020/12/08 | 33113 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin.tar.lzma
+2020/12/08 | 36891 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin-x64.tar.lzma
+2020/12/08 | 27067 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-2.9.tar.lzma
+2020/12/08 | 32898 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma
+2020/12/08 | 65937 | systems/win32/miktex/tm/packages/next/miktex-web-bin-2.9.tar.lzma
+2020/12/08 | 70154 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma
+2020/12/08 | 251037 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-2.9.tar.lzma
+2020/12/08 | 280313 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma
+2020/12/08 | 581035 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-2.9.tar.lzma
+2020/12/08 | 617507 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma
+2020/12/08 | 39275 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-2.9.tar.lzma
+2020/12/08 | 43071 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma
+2020/12/08 | 205011 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma
+2020/12/08 | 1229729 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma
+2020/12/08 | 1147595 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma
+2020/12/08 | 13300 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-2.9.tar.lzma
+2020/12/08 | 14160 | 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
-2020/12/07 | 1153 | systems/win32/miktex/tm/packages/next/pr.ini
+2020/12/08 | 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
@@ -274392,7 +274410,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
2020/10/27 | 357822 | systems/win32/miktex/tm/packages/principia.tar.lzma
-2020/12/07 | 837 | systems/win32/miktex/tm/packages/pr.ini
+2020/12/08 | 837 | 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
@@ -275559,7 +275577,7 @@
2020/12/05 | 5175604 | systems/win32/w32tex/aleph-w32.tar.xz
2020/11/16 | 65991060 | systems/win32/w32tex/biblatex-biber.tar.xz
2016/12/13 | 65971452 | systems/win32/w32tex/cbfonts.tar.xz
-2020/12/05 | 748704 | systems/win32/w32tex/ChangeLog
+2020/12/07 | 749708 | 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
@@ -275567,7 +275585,7 @@
2017/06/24 | 644754 | systems/win32/w32tex/ChangeLog.4
2020/10/20 | 23448752 | systems/win32/w32tex/cjkzr.tar.xz
2013/04/27 | 15858676 | systems/win32/w32tex/context-doc.tar.xz
-2020/12/05 | 141595396 | systems/win32/w32tex/context.tar.xz
+2020/12/06 | 141574864 | systems/win32/w32tex/context.tar.xz
2020/12/05 | 911348 | systems/win32/w32tex/cweb-w32.tar.xz
2020/09/21 | 6434128 | systems/win32/w32tex/datetime2.tar.xz
2020/12/05 | 846308 | systems/win32/w32tex/dvi2ps-w32.tar.xz
@@ -275575,23 +275593,23 @@
2020/12/05 | 4660268 | systems/win32/w32tex/dvipdfm-w32.tar.xz
2020/12/05 | 4550296 | systems/win32/w32tex/dvipsk-w32.tar.xz
2020/12/05 | 2649244 | systems/win32/w32tex/dvitools-w32.tar.xz
-2020/12/02 | 1178644 | systems/win32/w32tex/extractpdfmark-w32.tar.xz
+2020/12/06 | 1177432 | systems/win32/w32tex/extractpdfmark-w32.tar.xz
2020/12/05 | 17348896 | systems/win32/w32tex/gregorio-w32.tar.xz
2009/08/03 | 1072620 | systems/win32/w32tex/gtftex.zip
2020/12/05 | 1828748 | systems/win32/w32tex/jtex-w32.tar.xz
-2020/12/05 | 47231296 | systems/win32/w32tex/latex-dev.tar.xz
+2020/12/07 | 47151740 | systems/win32/w32tex/latex-dev.tar.xz
2020/10/29 | 34573456 | systems/win32/w32tex/latex.tar.xz
2020/12/05 | 1008204 | systems/win32/w32tex/lcdf-typetools-w32.tar.xz
2020/11/30 | 401922176 | systems/win32/w32tex/ltxpkgdocs.tar.xz
-2020/12/05 | 33880108 | systems/win32/w32tex/ltxpkgs.tar.xz
+2020/12/07 | 33890000 | systems/win32/w32tex/ltxpkgs.tar.xz
2020/12/05 | 3852240 | systems/win32/w32tex/luajittex-dev-w32.tar.xz
2020/12/05 | 3823332 | systems/win32/w32tex/luajittex-exp-w32.tar.xz
2020/12/05 | 3829892 | systems/win32/w32tex/luajittex-w32.tar.xz
2020/09/25 | 837108 | systems/win32/w32tex/luasec-w32.tar.xz
-2020/12/05 | 18599128 | systems/win32/w32tex/luatex-dev-w32.tar.xz
-2020/12/05 | 18566576 | systems/win32/w32tex/luatex-exp-w32.tar.xz
+2020/12/07 | 18556940 | systems/win32/w32tex/luatex-dev-w32.tar.xz
+2020/12/07 | 18586688 | systems/win32/w32tex/luatex-exp-w32.tar.xz
2020/10/31 | 69225976 | systems/win32/w32tex/luatexja.tar.xz
-2020/12/05 | 18561268 | systems/win32/w32tex/luatex-w32.tar.xz
+2020/12/07 | 18580740 | systems/win32/w32tex/luatex-w32.tar.xz
2020/12/05 | 1606828 | systems/win32/w32tex/makeindex-w32.tar.xz
2015/05/26 | 1542676 | systems/win32/w32tex/manual.tar.xz
2020/12/05 | 439396 | systems/win32/w32tex/mftools.tar.xz
@@ -275601,7 +275619,7 @@
2020/11/03 | 9773132 | systems/win32/w32tex/newtxpx-boondoxfonts.tar.xz
2020/12/05 | 1245344 | systems/win32/w32tex/omegaj-w32.tar.xz
2020/11/16 | 324540 | systems/win32/w32tex/otfbeta.tar.xz
-2020/12/05 | 21145752 | systems/win32/w32tex/pdftex-w32.tar.xz
+2020/12/07 | 21127732 | systems/win32/w32tex/pdftex-w32.tar.xz
2020/12/05 | 87345256 | systems/win32/w32tex/pgfcontrib.tar.xz
2015/01/26 | 189072 | systems/win32/w32tex/plain2-2.54-w32.tar.xz
2020/11/27 | 2807432 | systems/win32/w32tex/platex.tar.xz
@@ -275609,12 +275627,12 @@
2020/12/05 | 1171272 | systems/win32/w32tex/pstoedit-w32.tar.xz
2020/10/25 | 274208000 | systems/win32/w32tex/pstricks.tar.xz
2020/12/05 | 517812 | systems/win32/w32tex/psutils-w32.tar.xz
-2020/12/05 | 6607704 | systems/win32/w32tex/ptex-ng-w32.tar.xz
-2020/12/05 | 10624160 | systems/win32/w32tex/ptex-w32.tar.xz
+2020/12/07 | 6607476 | systems/win32/w32tex/ptex-ng-w32.tar.xz
+2020/12/07 | 10623348 | systems/win32/w32tex/ptex-w32.tar.xz
2019/04/15 | 499188 | systems/win32/w32tex/sam2p-w32.tar.xz
2020/10/14 | 87958692 | systems/win32/w32tex/t1fonts.tar.xz
2020/10/31 | 142032 | systems/win32/w32tex/t1utils-w32.tar.xz
-2020/12/05 | 2599140 | systems/win32/w32tex/tex4htk-w32.tar.xz
+2020/12/06 | 2592200 | systems/win32/w32tex/tex4htk-w32.tar.xz
2018/06/20 | 15940044 | systems/win32/w32tex/tex-gyre.tar.xz
2020/12/05 | 4485596 | systems/win32/w32tex/texinfo-w32.tar.xz
2020/10/28 | 2050458 | systems/win32/w32tex/texinstwin.zip
@@ -275631,11 +275649,11 @@
2020/01/19 | 5856 | systems/win32/w32tex/txtutil.tar.xz
2013/04/08 | 71588 | systems/win32/w32tex/ums.tar.xz
2012/05/28 | 233472 | systems/win32/w32tex/unzip.exe
-2020/12/05 | 8384428 | systems/win32/w32tex/uptex-w32.tar.xz
+2020/12/07 | 8384428 | systems/win32/w32tex/uptex-w32.tar.xz
2013/04/08 | 722652 | systems/win32/w32tex/utf.tar.xz
2013/04/08 | 13748 | systems/win32/w32tex/vf-n2bk.tar.xz
-2020/03/27 | 38319492 | systems/win32/w32tex/w32tex-src.tar.xz
-2020/11/28 | 99364196 | systems/win32/w32tex/web2c-lib.tar.xz
+2020/12/07 | 52767872 | systems/win32/w32tex/w32tex-src.tar.xz
+2020/12/07 | 99753196 | systems/win32/w32tex/web2c-lib.tar.xz
2020/12/05 | 45785380 | systems/win32/w32tex/web2c-w32.tar.xz
2020/12/05 | 811568 | systems/win32/w32tex/win64/aleph-w64.tar.xz
2020/08/20 | 22351540 | systems/win32/w32tex/win64/biblatex-biber-w64.tar.xz
@@ -275646,7 +275664,7 @@
2020/12/05 | 806352 | systems/win32/w32tex/win64/dvipdfm-w64.tar.xz
2020/12/05 | 759736 | systems/win32/w32tex/win64/dvipsk-w64.tar.xz
2020/12/05 | 2368896 | systems/win32/w32tex/win64/dvitools-w64.tar.xz
-2020/12/02 | 1087928 | systems/win32/w32tex/win64/extractpdfmark-w64.tar.xz
+2020/12/06 | 1087480 | systems/win32/w32tex/win64/extractpdfmark-w64.tar.xz
2020/12/05 | 305192 | systems/win32/w32tex/win64/gregorio-w64.tar.xz
2020/12/05 | 587828 | systems/win32/w32tex/win64/jtex-w64.tar.xz
2019/11/11 | 2568 | systems/win32/w32tex/win64/latex-dev-w64.tar.xz
@@ -275663,7 +275681,7 @@
2020/12/05 | 376832 | systems/win32/w32tex/win64/mftrace-w64.tar.xz
2020/01/18 | 362540 | systems/win32/w32tex/win64/m-tx-w64.tar.xz
2020/12/05 | 407176 | systems/win32/w32tex/win64/omegaj-w64.tar.xz
-2020/12/05 | 6359424 | systems/win32/w32tex/win64/pdftex-w64.tar.xz
+2020/12/06 | 6365880 | systems/win32/w32tex/win64/pdftex-w64.tar.xz
2015/01/26 | 41440 | systems/win32/w32tex/win64/plain2-2.54-w64.tar.xz
2020/03/20 | 557532 | systems/win32/w32tex/win64/pmx-w64.tar.xz
2020/12/05 | 791172 | systems/win32/w32tex/win64/pstoedit-w64.tar.xz
@@ -275679,7 +275697,7 @@
2020/12/05 | 1805324 | systems/win32/w32tex/win64/uptex-w64.tar.xz
2020/12/05 | 3382452 | systems/win32/w32tex/win64/web2c-w64.tar.xz
2020/12/05 | 11091208 | systems/win32/w32tex/win64/xetex-w64.tar.xz
-2020/12/05 | 49045280 | systems/win32/w32tex/xetex-w32.tar.xz
+2020/12/07 | 49044720 | systems/win32/w32tex/xetex-w32.tar.xz
2020/05/29 | 2936068 | systems/win32/w32tex/xindy-w32.tar.xz
2013/11/19 | 11356248 | systems/win32/w32tex/xymtex.tar.xz
2016/09/09 | 4334636 | systems/win32/w32tex/xypic.tar.xz
@@ -275776,7 +275794,7 @@
2004/06/04 | 404 | tds/tds.sed
2004/06/23 | 65418 | tds/tds.tex
2019/05/29 | 304264 | tds.zip
-2020/12/08 | 186 | timestamp
+2020/12/09 | 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 2f0d58e3b9..3f15714757 100644
--- a/FILES.byname.gz
+++ b/FILES.byname.gz
Binary files differ
diff --git a/FILES.last07days b/FILES.last07days
index eb19fc6f99..7a732b0c58 100644
--- a/FILES.last07days
+++ b/FILES.last07days
@@ -1,338 +1,452 @@
+2020/12/08 | 99169 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-2.9.tar.lzma
+2020/12/08 | 98550 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma
+2020/12/08 | 97427 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-2.9.tar.lzma
+2020/12/08 | 973 | macros/latex/contrib/stringstrings/README
+2020/12/08 | 965373 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-2.9.tar.lzma
+2020/12/08 | 96314 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-2.9.tar.lzma
+2020/12/08 | 94622 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-2.9.tar.lzma
+2020/12/08 | 94346 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-2.9.tar.lzma
+2020/12/08 | 93707 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma
+2020/12/08 | 93674 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-2.9.tar.lzma
+2020/12/08 | 897120 | macros/unicodetex/latex/polyglossia/polyglossia.dtx
+2020/12/08 | 880 | systems/texlive/tlnet/archive/dvisvgm.r57090.tar.xz
+2020/12/08 | 87434 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma
+2020/12/08 | 868 | macros/latex/contrib/decision-table/README
+2020/12/08 | 86758 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-2.9.tar.lzma
+2020/12/08 | 8568 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma
+2020/12/08 | 85483 | macros/latex/contrib/jslectureplanner/examples/German/lecturebib.pdf
+2020/12/08 | 85344 | systems/texlive/tlnet/archive/albatross.doc.r57089.tar.xz
+2020/12/08 | 85100 | macros/latex/contrib/jslectureplanner/examples/English/lecturebib-english.pdf
+2020/12/08 | 84982 | macros/latex/contrib/jslectureplanner/examples/German/lecturepresentation.pdf
+2020/12/08 | 84620 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-2.9.tar.lzma
+2020/12/08 | 84600 | macros/latex/contrib/jslectureplanner/examples/English/lecturepresentation-english.pdf
+2020/12/08 | 837 | systems/win32/miktex/tm/packages/pr.ini
+2020/12/08 | 810168 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma
+2020/12/08 | 80702 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma
+2020/12/08 | 80396 | macros/latex/contrib/jslectureplanner/jslectureplanner.tex
+2020/12/08 | 78397 | systems/win32/miktex/tm/packages/next/miktex-png-bin-2.9.tar.lzma
+2020/12/08 | 77209 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma
+2020/12/08 | 7564 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-2.9.tar.lzma
+2020/12/08 | 74275 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma
+2020/12/08 | 74060 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma
+2020/12/08 | 736335 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-2.9.tar.lzma
+2020/12/08 | 73416 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma
+2020/12/08 | 72928 | systems/texlive/tlnet/archive/archaeologie.r57090.tar.xz
+2020/12/08 | 72870 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-2.9.tar.lzma
+2020/12/08 | 72761 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma
+2020/12/08 | 71612 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma
+2020/12/08 | 71606 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-2.9.tar.lzma
+2020/12/08 | 70154 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma
+2020/12/08 | 69643 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma
+2020/12/08 | 677881 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma
+2020/12/08 | 67416 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-2.9.tar.lzma
+2020/12/08 | 661100 | macros/latex/contrib/microtype/microtype.dtx
+2020/12/08 | 6604 | systems/texlive/tlnet/archive/ut-thesis.source.r57090.tar.xz
+2020/12/08 | 65 | support/aspell/dict/en/aspell6-en-2020.12.07-0.tar.bz2.sig
+2020/12/08 | 65 | support/aspell/dict/0index.html.sig
+2020/12/08 | 65987 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-x64-2.9.tar.lzma
+2020/12/08 | 65937 | systems/win32/miktex/tm/packages/next/miktex-web-bin-2.9.tar.lzma
+2020/12/08 | 65787 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-2.9.tar.lzma
+2020/12/08 | 65246 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma
+2020/12/08 | 64464 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-2.9.tar.lzma
+2020/12/08 | 63618 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-2.9.tar.lzma
+2020/12/08 | 63544 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-2.9.tar.lzma
+2020/12/08 | 63090 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-2.9.tar.lzma
+2020/12/08 | 62963 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma
+2020/12/08 | 6237 | macros/latex/contrib/microtype/microtype.ins
+2020/12/08 | 623616 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-2.9.tar.lzma
+2020/12/08 | 62032 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma
+2020/12/08 | 617507 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma
+2020/12/08 | 596989 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma
+2020/12/08 | 596589 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma
+2020/12/08 | 59484 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64.tar.lzma
+2020/12/08 | 59144 | macros/latex/contrib/jslectureplanner/examples/German/lecturehandout.pdf
+2020/12/08 | 58688 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma
+2020/12/08 | 58641 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-2.9.tar.lzma
+2020/12/08 | 581035 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-2.9.tar.lzma
+2020/12/08 | 57920 | macros/latex/contrib/jslectureplanner/examples/English/lecturehandout-english.pdf
+2020/12/08 | 57898 | macros/latex/contrib/jslectureplanner/examples/German/lectureprogram.pdf
+2020/12/08 | 57245 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma
+2020/12/08 | 56906 | macros/latex/contrib/jslectureplanner/examples/English/lectureprogram-english.pdf
+2020/12/08 | 567242 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma
+2020/12/08 | 56663 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-2.9.tar.lzma
+2020/12/08 | 55990 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin.tar.lzma
+2020/12/08 | 55976 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma
+2020/12/08 | 55873 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-2.9.tar.lzma
+2020/12/08 | 558263 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-2.9.tar.lzma
+2020/12/08 | 55768 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma
+2020/12/08 | 552523 | systems/win32/miktex/tm/packages/files.csv.lzma
+2020/12/08 | 552335 | systems/win32/miktex/tm/packages/next/files.csv.lzma
+2020/12/08 | 552264 | systems/texlive/tlnet/archive/l3kernel.source.r57088.tar.xz
+2020/12/08 | 5500587 | systems/texlive/tlnet/install-tl-unx.tar.gz
+2020/12/08 | 54850 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-2.9.tar.lzma
+2020/12/08 | 531249 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-2.9.tar.lzma
+2020/12/08 | 528 | systems/texlive/tlnet/archive/collection-fontutils.r57089.tar.xz
+2020/12/08 | 52188 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma
+2020/12/08 | 51886 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-2.9.tar.lzma
+2020/12/08 | 51545 | macros/latex/contrib/jslectureplanner/jslectureplanner.sty
+2020/12/08 | 51467 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma
+2020/12/08 | 513436 | systems/texlive/tlnet/archive/biblatex-swiss-legal.doc.r57090.tar.xz
+2020/12/08 | 51130 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma
+2020/12/08 | 511088 | systems/texlive/tlnet/archive/oup-authoring-template.doc.r57090.tar.xz
+2020/12/08 | 50945 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma
+2020/12/08 | 5080 | systems/texlive/tlnet/archive/endfloat.r57090.tar.xz
+2020/12/08 | 50512 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-2.9.tar.lzma
+2020/12/08 | 50433 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-2.9.tar.lzma
+2020/12/08 | 49754 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-2.9.tar.lzma
+2020/12/08 | 49527 | macros/latex/contrib/draftwatermark/draftwatermark.dtx
+2020/12/08 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
+2020/12/08 | 482931 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-2.9.tar.lzma
+2020/12/08 | 480486 | macros/unicodetex/latex/polyglossia.zip
+2020/12/08 | 480426 | macros/latex/contrib/jslectureplanner/jslectureplanner.pdf
+2020/12/08 | 47702 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma
+2020/12/08 | 46526 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma
+2020/12/08 | 461603 | systems/win32/miktex/tm/packages/next/miktex-doc.tar.lzma
+2020/12/08 | 45805 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-2.9.tar.lzma
+2020/12/08 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
+2020/12/08 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc
+2020/12/08 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
+2020/12/08 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
+2020/12/08 | 45388 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-2.9.tar.lzma
+2020/12/08 | 44951 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma
+2020/12/08 | 43071 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma
+2020/12/08 | 42912 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-2.9.tar.lzma
+2020/12/08 | 42625 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-2.9.tar.lzma
+2020/12/08 | 42613 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-2.9.tar.lzma
+2020/12/08 | 425249 | macros/latex/contrib/stringstrings/stringstrings.pdf
+2020/12/08 | 422329 | macros/latex/contrib/stringstrings.zip
+2020/12/08 | 42214 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma
+2020/12/08 | 42090 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-2.9.tar.lzma
+2020/12/08 | 41044 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma
+2020/12/08 | 40901 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-2.9.tar.lzma
+2020/12/08 | 39352 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin-x64.tar.lzma
+2020/12/08 | 39275 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-2.9.tar.lzma
+2020/12/08 | 392404 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma
+2020/12/08 | 388 | systems/texlive/tlnet/archive/texlive-docindex.r57087.tar.xz
+2020/12/08 | 38124 | macros/latex/contrib/microtype/microtype-utf.dtx
+2020/12/08 | 37675 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-2.9.tar.lzma
+2020/12/08 | 36957 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma
+2020/12/08 | 36891 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin-x64.tar.lzma
+2020/12/08 | 36640 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-2.9.tar.lzma
+2020/12/08 | 36405 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma
+2020/12/08 | 3636 | systems/texlive/tlnet/archive/sympytexpackage.r57090.tar.xz
+2020/12/08 | 3629 | macros/latex/contrib/draftwatermark/draftwatermark.ins
+2020/12/08 | 35192 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin.tar.lzma
+2020/12/08 | 348 | systems/texlive/tlnet/archive/albatross.x86_64-darwinlegacy.r57089.tar.xz
+2020/12/08 | 34794 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma
+2020/12/08 | 34769 | macros/latex/contrib/jslectureplanner/examples/German/lecturescript.pdf
+2020/12/08 | 34578 | macros/latex/contrib/jslectureplanner/examples/English/lecturescript-english.pdf
+2020/12/08 | 344 | systems/texlive/tlnet/archive/albatross.x86_64-linux.r57089.tar.xz
+2020/12/08 | 344 | systems/texlive/tlnet/archive/albatross.x86_64-linuxmusl.r57089.tar.xz
+2020/12/08 | 340 | systems/texlive/tlnet/archive/albatross.x86_64-solaris.r57089.tar.xz
+2020/12/08 | 340 | systems/texlive/tlnet/archive/albatross.x86_64-darwin.r57089.tar.xz
+2020/12/08 | 340 | systems/texlive/tlnet/archive/albatross.x86_64-cygwin.r57089.tar.xz
+2020/12/08 | 340 | systems/texlive/tlnet/archive/albatross.i386-solaris.r57089.tar.xz
+2020/12/08 | 340 | systems/texlive/tlnet/archive/albatross.i386-netbsd.r57089.tar.xz
+2020/12/08 | 340 | systems/texlive/tlnet/archive/albatross.i386-linux.r57089.tar.xz
+2020/12/08 | 340 | systems/texlive/tlnet/archive/albatross.i386-freebsd.r57089.tar.xz
+2020/12/08 | 340 | systems/texlive/tlnet/archive/albatross.i386-cygwin.r57089.tar.xz
+2020/12/08 | 340 | systems/texlive/tlnet/archive/albatross.armhf-linux.r57089.tar.xz
+2020/12/08 | 340 | systems/texlive/tlnet/archive/albatross.amd64-netbsd.r57089.tar.xz
+2020/12/08 | 340 | systems/texlive/tlnet/archive/albatross.amd64-freebsd.r57089.tar.xz
+2020/12/08 | 340 | systems/texlive/tlnet/archive/albatross.aarch64-linux.r57089.tar.xz
+2020/12/08 | 33978 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma
+2020/12/08 | 33113 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin.tar.lzma
+2020/12/08 | 329582 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-2.9.tar.lzma
+2020/12/08 | 32898 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma
+2020/12/08 | 32354 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-2.9.tar.lzma
+2020/12/08 | 318604 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma
+2020/12/08 | 31226 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-2.9.tar.lzma
+2020/12/08 | 31154 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma
+2020/12/08 | 3114 | macros/latex/contrib/microtype/README.md
+2020/12/08 | 31027 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-2.9.tar.lzma
+2020/12/08 | 310111 | macros/latex/contrib/draftwatermark.zip
+2020/12/08 | 30912 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma
+2020/12/08 | 30656 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma
+2020/12/08 | 297379 | macros/latex/contrib/draftwatermark/draftwatermark.pdf
+2020/12/08 | 29687 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma
+2020/12/08 | 295355 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma
+2020/12/08 | 29220 | systems/texlive/tlnet/archive/endfloat.source.r57090.tar.xz
+2020/12/08 | 29110 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma
+2020/12/08 | 28920 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-2.9.tar.lzma
+2020/12/08 | 28612 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-2.9.tar.lzma
+2020/12/08 | 28506 | macros/latex/contrib/jslectureplanner/examples/German/membertable-filled.pdf
+2020/12/08 | 28449 | macros/latex/contrib/jslectureplanner/examples/English/membertable-filled-english.pdf
+2020/12/08 | 28442 | macros/latex/contrib/jslectureplanner/examples/English/membertable-blank-english.pdf
+2020/12/08 | 28386 | macros/latex/contrib/jslectureplanner/examples/German/membertable-blank.pdf
+2020/12/08 | 282553 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma
+2020/12/08 | 280545 | macros/unicodetex/latex/polyglossia/polyglossia.pdf
+2020/12/08 | 280313 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma
+2020/12/08 | 279880 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-2.9.tar.lzma
+2020/12/08 | 27971 | macros/latex/contrib/jslectureplanner/examples/English/presencetable-blank-english.pdf
+2020/12/08 | 27934 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-2.9.tar.lzma
+2020/12/08 | 27891 | macros/latex/contrib/jslectureplanner/examples/German/presencetable-blank.pdf
+2020/12/08 | 2786276 | systems/texlive/tlnet/archive/albatross.r57089.tar.xz
+2020/12/08 | 27777 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma
+2020/12/08 | 27136 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-2.9.tar.lzma
+2020/12/08 | 2712 | systems/texlive/tlnet/archive/decision-table.r57090.tar.xz
+2020/12/08 | 27067 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-2.9.tar.lzma
+2020/12/08 | 270388 | systems/texlive/tlnet/archive/decision-table.doc.r57090.tar.xz
+2020/12/08 | 27012 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-2.9.tar.lzma
+2020/12/08 | 26863 | macros/latex/contrib/jslectureplanner/examples/German/presentation-list.pdf
+2020/12/08 | 26857 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-2.9.tar.lzma
+2020/12/08 | 26778 | macros/latex/contrib/jslectureplanner/examples/German/presencetable-filled.pdf
+2020/12/08 | 26749 | macros/latex/contrib/jslectureplanner/examples/English/presencetable-filled-english.pdf
+2020/12/08 | 2634843 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma
+2020/12/08 | 258237 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-2.9.tar.lzma
+2020/12/08 | 25685 | macros/latex/contrib/jslectureplanner/examples/English/presentation-list-english.pdf
+2020/12/08 | 2544 | systems/texlive/tlnet/archive/ut-thesis.r57090.tar.xz
+2020/12/08 | 2512398 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-2.9.tar.lzma
+2020/12/08 | 251037 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-2.9.tar.lzma
+2020/12/08 | 24906 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-2.9.tar.lzma
+2020/12/08 | 248707 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-2.9.tar.lzma
+2020/12/08 | 24841 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma
+2020/12/08 | 243148 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma
+2020/12/08 | 24270228 | systems/texlive/tlnet/install-tl.zip
+2020/12/08 | 23638 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma
+2020/12/08 | 23626 | macros/latex/contrib/jslectureplanner/jsmembertable.sty
+2020/12/08 | 22967 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma
+2020/12/08 | 2249232 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
+2020/12/08 | 224263 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma
+2020/12/08 | 218652 | systems/texlive/tlnet/archive/texlive-scripts.doc.r57087.tar.xz
+2020/12/08 | 21855 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-2.9.tar.lzma
+2020/12/08 | 212303 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma
+2020/12/08 | 210108 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-x64-2.9.tar.lzma
+2020/12/08 | 20832 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-2.9.tar.lzma
+2020/12/08 | 207498 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-2.9.tar.lzma
+2020/12/08 | 205011 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma
+2020/12/08 | 204981 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma
+2020/12/08 | 204248 | systems/win32/miktex/tm/packages/next/miktex-console-bin-2.9.tar.lzma
+2020/12/08 | 202394 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma
+2020/12/08 | 2005990 | install/macros/latex/contrib/microtype.tds.zip
+2020/12/08 | 20056 | support/aspell/dict/0index.html
+2020/12/08 | 19930 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-2.9.tar.lzma
+2020/12/08 | 199193 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-2.9.tar.lzma
+2020/12/08 | 197663 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-2.9.tar.lzma
+2020/12/08 | 1966202 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma
+2020/12/08 | 195313 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma
+2020/12/08 | 1942 | macros/unicodetex/latex/polyglossia/README.md
+2020/12/08 | 194078 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-2.9.tar.lzma
+2020/12/08 | 19382807 | systems/texlive/tlnet/install-tl-windows.exe
+2020/12/08 | 192715 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-2.9.tar.lzma
+2020/12/08 | 1905545 | macros/latex/contrib/microtype.zip
+2020/12/08 | 188972 | support/aspell/dict/en/aspell6-en-2020.12.07-0.tar.bz2
+2020/12/08 | 1844 | systems/texlive/tlnet/archive/sympytexpackage.doc.r57090.tar.xz
+2020/12/08 | 18148 | systems/texlive/tlnet/archive/biblatex-swiss-legal.r57090.tar.xz
+2020/12/08 | 181292 | systems/texlive/tlnet/archive/endfloat.doc.r57090.tar.xz
+2020/12/08 | 179748 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma
+2020/12/08 | 179271 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-2.9.tar.lzma
+2020/12/08 | 1786700 | macros/latex/contrib/microtype/microtype.pdf
+2020/12/08 | 17730 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma
+2020/12/08 | 17636 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma
+2020/12/08 | 17084 | systems/texlive/tlnet/archive/sympytexpackage.source.r57090.tar.xz
+2020/12/08 | 170532 | systems/texlive/tlnet/archive/texlive-docindex.doc.r57087.tar.xz
+2020/12/08 | 1703669 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-2.9.tar.lzma
+2020/12/08 | 16679012 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
+2020/12/08 | 165518 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma
+2020/12/08 | 1615 | macros/latex/contrib/draftwatermark/README.md
+2020/12/08 | 161107 | macros/latex/contrib/stringstrings/stringstrings.dtx
+2020/12/08 | 16009 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-2.9.tar.lzma
+2020/12/08 | 159998 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma
+2020/12/08 | 15987 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-2.9.tar.lzma
+2020/12/08 | 159692 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma
+2020/12/08 | 15895 | macros/latex/contrib/decision-table/decision-table.dtx
+2020/12/08 | 157680 | systems/texlive/tlnet/archive/l3kernel.r57088.tar.xz
+2020/12/08 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
+2020/12/08 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
+2020/12/08 | 151903 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma
+2020/12/08 | 151749 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-2.9.tar.lzma
+2020/12/08 | 15128 | systems/texlive/tlnet/archive/oup-authoring-template.r57090.tar.xz
+2020/12/08 | 1471 | macros/latex/contrib/decision-table/decision-table.ins
+2020/12/08 | 146834 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-2.9.tar.lzma
+2020/12/08 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
+2020/12/08 | 1451971 | macros/latex/contrib/jslectureplanner.zip
+2020/12/08 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
+2020/12/08 | 144033 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-2.9.tar.lzma
+2020/12/08 | 14160 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma
+2020/12/08 | 1411213 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma
+2020/12/08 | 136220 | systems/texlive/tlnet/archive/archaeologie.source.r57090.tar.xz
+2020/12/08 | 133611 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-2.9.tar.lzma
+2020/12/08 | 13300 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-2.9.tar.lzma
+2020/12/08 | 132056 | systems/texlive/tlnet/archive/texlive-scripts.r57087.tar.xz
+2020/12/08 | 130424 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma
+2020/12/08 | 130423 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma
+2020/12/08 | 1302638 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma
+2020/12/08 | 1277098 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-2.9.tar.lzma
+2020/12/08 | 1246706 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma
+2020/12/08 | 1230284 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma
+2020/12/08 | 1229729 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma
+2020/12/08 | 119105 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-2.9.tar.lzma
+2020/12/08 | 116940 | systems/texlive/tlnet/archive/ut-thesis.doc.r57090.tar.xz
+2020/12/08 | 1168221 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-2.9.tar.lzma
+2020/12/08 | 115954 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-2.9.tar.lzma
+2020/12/08 | 1153 | systems/win32/miktex/tm/packages/next/pr.ini
+2020/12/08 | 1147595 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma
+2020/12/08 | 1147508 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma
+2020/12/08 | 114679 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma
+2020/12/08 | 113589 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma
+2020/12/08 | 113076 | macros/latex/contrib/decision-table.zip
+2020/12/08 | 1125542 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-2.9.tar.lzma
+2020/12/08 | 112176 | macros/latex/contrib/decision-table/decision-table.pdf
+2020/12/08 | 109009 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma
+2020/12/08 | 1075786 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma
+2020/12/08 | 1059164 | systems/texlive/tlnet/archive/archaeologie.doc.r57090.tar.xz
+2020/12/08 | 104454 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma
+2020/12/08 | 102964 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma
+2020/12/08 | 10282408 | systems/texlive/tlnet/archive/l3kernel.doc.r57088.tar.xz
+2020/12/08 | 102720 | systems/texlive/tlnet/archive/dvisvgm.doc.r57090.tar.xz
+2020/12/08 | 1020393 | install/macros/unicodetex/latex/polyglossia.tds.zip
+2020/12/08 | 101632 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma
+2020/12/08 | 10031 | macros/latex/contrib/jslectureplanner/README
2020/12/07 | 9999 | macros/latex/contrib/l3kernel/l3news10.tex
-2020/12/07 | 99234 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-2.9.tar.lzma
-2020/12/07 | 98630 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma
+2020/12/07 | 99753196 | systems/win32/w32tex/web2c-lib.tar.xz
2020/12/07 | 9772 | macros/latex/contrib/l3kernel/l3docstrip.dtx
-2020/12/07 | 97425 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-2.9.tar.lzma
-2020/12/07 | 965514 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-2.9.tar.lzma
-2020/12/07 | 96468 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-2.9.tar.lzma
2020/12/07 | 9465 | macros/latex/contrib/l3kernel/l3news08.tex
-2020/12/07 | 94654 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-2.9.tar.lzma
2020/12/07 | 9436 | macros/latex/contrib/l3kernel/l3flag.dtx
-2020/12/07 | 94299 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-2.9.tar.lzma
-2020/12/07 | 93718 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-2.9.tar.lzma
-2020/12/07 | 93679 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma
2020/12/07 | 9216 | macros/latex/contrib/l3kernel/l3unicode.dtx
2020/12/07 | 898560 | systems/texlive/tlnet/archive/tex4ht.r57077.tar.xz
2020/12/07 | 89226 | macros/latex/contrib/l3kernel/l3int.dtx
2020/12/07 | 87967 | macros/latex/contrib/l3kernel/l3seq.dtx
-2020/12/07 | 87475 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma
-2020/12/07 | 86707 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-2.9.tar.lzma
2020/12/07 | 86151 | macros/latex/contrib/l3kernel/l3coffins.dtx
-2020/12/07 | 8574 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma
2020/12/07 | 8481 | macros/latex/contrib/l3kernel/l3news11.tex
2020/12/07 | 84816 | macros/latex/contrib/l3kernel/l3fp-basics.dtx
-2020/12/07 | 84738 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-2.9.tar.lzma
-2020/12/07 | 837 | systems/win32/miktex/tm/packages/pr.ini
-2020/12/07 | 809206 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma
-2020/12/07 | 80446 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma
+2020/12/07 | 8384428 | systems/win32/w32tex/uptex-w32.tar.xz
2020/12/07 | 79653 | macros/latex/contrib/l3kernel/l3names.dtx
2020/12/07 | 794636 | systems/texlive/tlnet/archive/chemnum.doc.r57084.tar.xz
2020/12/07 | 7868 | systems/texlive/tlnet/archive/babel-japanese.source.r57078.tar.xz
-2020/12/07 | 78412 | systems/win32/miktex/tm/packages/next/miktex-png-bin-2.9.tar.lzma
2020/12/07 | 77528 | macros/latex/contrib/l3kernel/l3box.dtx
2020/12/07 | 77434 | macros/latex/contrib/l3kernel/l3msg.dtx
-2020/12/07 | 77323 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma
2020/12/07 | 76990 | support/albatross/doc/albatross-manual.pdf
2020/12/07 | 76428 | macros/latex/contrib/l3kernel/l3skip.dtx
2020/12/07 | 76183 | macros/latex/contrib/l3kernel/l3prefixes.pdf
-2020/12/07 | 7566 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-2.9.tar.lzma
2020/12/07 | 75662 | macros/latex/contrib/l3kernel/l3clist.dtx
-2020/12/07 | 74252 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma
-2020/12/07 | 74028 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma
+2020/12/07 | 749708 | systems/win32/w32tex/ChangeLog
2020/12/07 | 73845 | macros/latex/contrib/l3kernel/l3fp-trig.dtx
-2020/12/07 | 737759 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-2.9.tar.lzma
-2020/12/07 | 73446 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma
2020/12/07 | 73140 | macros/latex/contrib/l3kernel/l3str.dtx
2020/12/07 | 729612 | systems/texlive/tlnet/archive/apa7.doc.r57083.tar.xz
-2020/12/07 | 72804 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-2.9.tar.lzma
-2020/12/07 | 72753 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma
-2020/12/07 | 71568 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma
-2020/12/07 | 71539 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-2.9.tar.lzma
2020/12/07 | 70908 | macros/latex/contrib/l3kernel/expl3.dtx
2020/12/07 | 70350 | macros/latex/contrib/l3kernel/l3fp.dtx
-2020/12/07 | 70065 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma
2020/12/07 | 6974 | macros/latex/contrib/l3kernel/l3fp-assign.dtx
-2020/12/07 | 69666 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma
2020/12/07 | 68540 | macros/latex/contrib/l3kernel/l3text-case.dtx
2020/12/07 | 679472 | systems/texlive/tlnet/archive/baskervaldx.r57080.tar.xz
-2020/12/07 | 677736 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma
-2020/12/07 | 67417 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-2.9.tar.lzma
2020/12/07 | 6677 | macros/latex/contrib/l3kernel/l3news02.tex
-2020/12/07 | 65962 | systems/win32/miktex/tm/packages/next/miktex-web-bin-2.9.tar.lzma
-2020/12/07 | 65756 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-x64-2.9.tar.lzma
-2020/12/07 | 65721 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-2.9.tar.lzma
-2020/12/07 | 65238 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma
+2020/12/07 | 6607476 | systems/win32/w32tex/ptex-ng-w32.tar.xz
2020/12/07 | 64938 | macros/latex/contrib/l3kernel/l3prg.dtx
2020/12/07 | 6482 | macros/latex/contrib/l3kernel/l3news03.tex
2020/12/07 | 6450 | macros/latex/contrib/l3kernel/l3term-glossary.tex
-2020/12/07 | 64449 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-2.9.tar.lzma
2020/12/07 | 6431 | macros/latex/contrib/l3kernel/l3news06.tex
-2020/12/07 | 63643 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-2.9.tar.lzma
-2020/12/07 | 63433 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-2.9.tar.lzma
-2020/12/07 | 63137 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-2.9.tar.lzma
-2020/12/07 | 62897 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma
+2020/12/07 | 6323 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
2020/12/07 | 6267 | macros/latex/contrib/l3kernel/l3syntax-changes.tex
-2020/12/07 | 623507 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-2.9.tar.lzma
2020/12/07 | 6192 | macros/latex/contrib/l3kernel/l3.ins
2020/12/07 | 61801 | macros/latex/contrib/l3kernel/l3candidates.dtx
-2020/12/07 | 617783 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma
-2020/12/07 | 61705 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma
2020/12/07 | 5 | support/albatross/doc/version.tex
2020/12/07 | 5990023 | macros/latex/contrib/l3kernel/source3.pdf
-2020/12/07 | 598902 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma
-2020/12/07 | 596563 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma
-2020/12/07 | 59527 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64.tar.lzma
2020/12/07 | 590307 | macros/latex/contrib/l3kernel/expl3.pdf
-2020/12/07 | 58649 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma
-2020/12/07 | 58555 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-2.9.tar.lzma
-2020/12/07 | 580811 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-2.9.tar.lzma
+2020/12/07 | 58 | systems/mac/mactex/MacTeXtras-20201207.zip.md5
2020/12/07 | 5795 | support/albatross/source/albatross-0.1.0-src.zip
2020/12/07 | 575 | support/albatross/scripts/albatross.sh
-2020/12/07 | 57203 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma
-2020/12/07 | 567631 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma
-2020/12/07 | 56674 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-2.9.tar.lzma
2020/12/07 | 56546 | macros/latex/contrib/l3kernel/l3tl-analysis.dtx
2020/12/07 | 5653 | macros/latex/contrib/l3kernel/l3color-base.dtx
2020/12/07 | 560 | systems/texlive/tlnet/archive/cjk-gs-integrate.source.r57081.tar.xz
-2020/12/07 | 55965 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma
-2020/12/07 | 55959 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin.tar.lzma
-2020/12/07 | 55826 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-2.9.tar.lzma
-2020/12/07 | 558066 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-2.9.tar.lzma
-2020/12/07 | 55651 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma
-2020/12/07 | 552523 | systems/win32/miktex/tm/packages/files.csv.lzma
-2020/12/07 | 552335 | systems/win32/miktex/tm/packages/next/files.csv.lzma
-2020/12/07 | 552204 | systems/texlive/tlnet/archive/l3kernel.source.r57085.tar.xz
-2020/12/07 | 5500857 | systems/texlive/tlnet/install-tl-unx.tar.gz
-2020/12/07 | 54679 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-2.9.tar.lzma
2020/12/07 | 5429 | macros/latex/contrib/l3kernel/l3news04.tex
-2020/12/07 | 531525 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-2.9.tar.lzma
-2020/12/07 | 52229 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma
-2020/12/07 | 51929 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-2.9.tar.lzma
-2020/12/07 | 51471 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma
+2020/12/07 | 52767872 | systems/win32/w32tex/w32tex-src.tar.xz
2020/12/07 | 512 | systems/texlive/tlnet/archive/dtk-bibliography.r57082.tar.xz
-2020/12/07 | 51141 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma
2020/12/07 | 51061 | macros/latex/contrib/l3kernel/l3prop.dtx
2020/12/07 | 51059 | macros/latex/contrib/l3kernel/l3fp-extended.dtx
-2020/12/07 | 50791 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma
2020/12/07 | 505456 | systems/texlive/tlnet/archive/babel-japanese.doc.r57078.tar.xz
-2020/12/07 | 50539 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-2.9.tar.lzma
-2020/12/07 | 50452 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-2.9.tar.lzma
2020/12/07 | 4977 | macros/latex/contrib/l3kernel/l3news07.tex
-2020/12/07 | 49422 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-2.9.tar.lzma
2020/12/07 | 49386 | macros/latex/contrib/l3kernel/l3fp-expo.dtx
2020/12/07 | 4935 | macros/latex/contrib/l3kernel/l3news01.tex
-2020/12/07 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
+2020/12/07 | 49044720 | systems/win32/w32tex/xetex-w32.tar.xz
2020/12/07 | 4891 | macros/latex/contrib/l3kernel/l3news.tex
-2020/12/07 | 483407 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-2.9.tar.lzma
2020/12/07 | 4788 | systems/texlive/tlnet/archive/bookcover.r57079.tar.xz
-2020/12/07 | 47716 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma
2020/12/07 | 4716 | macros/latex/contrib/l3kernel/l3news05.tex
+2020/12/07 | 47151740 | systems/win32/w32tex/latex-dev.tar.xz
2020/12/07 | 47145 | macros/latex/contrib/l3kernel/l3fp-aux.dtx
-2020/12/07 | 46536 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma
-2020/12/07 | 461715 | systems/win32/miktex/tm/packages/next/miktex-doc.tar.lzma
-2020/12/07 | 45776 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-2.9.tar.lzma
-2020/12/07 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
-2020/12/07 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc
-2020/12/07 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
-2020/12/07 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
-2020/12/07 | 45338 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-2.9.tar.lzma
-2020/12/07 | 44897 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma
2020/12/07 | 43333 | macros/latex/contrib/l3kernel/l3debug.dtx
-2020/12/07 | 43106 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma
-2020/12/07 | 42905 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-2.9.tar.lzma
-2020/12/07 | 42661 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-2.9.tar.lzma
-2020/12/07 | 42644 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-2.9.tar.lzma
-2020/12/07 | 42288 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma
-2020/12/07 | 42092 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-2.9.tar.lzma
2020/12/07 | 411208 | systems/texlive/tlnet/archive/dtk-bibliography.doc.r57082.tar.xz
-2020/12/07 | 41062 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma
-2020/12/07 | 40851 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-2.9.tar.lzma
2020/12/07 | 40672 | macros/latex/contrib/l3kernel/l3sort.dtx
-2020/12/07 | 39368 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin-x64.tar.lzma
-2020/12/07 | 39338 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-2.9.tar.lzma
-2020/12/07 | 392150 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma
2020/12/07 | 384459 | macros/latex/contrib/l3kernel/l3news.pdf
-2020/12/07 | 37687 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-2.9.tar.lzma
-2020/12/07 | 36951 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin-x64.tar.lzma
-2020/12/07 | 36951 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma
-2020/12/07 | 36649 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-2.9.tar.lzma
+2020/12/07 | 37901 | systems/mac/mactex/ExtrasFolder.pdf
+2020/12/07 | 375530616 | systems/mac/mactex/MacTeXtras-20201207.zip
2020/12/07 | 36633 | macros/latex/contrib/l3kernel/l3prefixes.csv
-2020/12/07 | 36388 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma
2020/12/07 | 36348 | systems/texlive/tlnet/archive/cjk-gs-integrate.r57081.tar.xz
2020/12/07 | 35831 | macros/latex/contrib/l3kernel/l3quark.dtx
-2020/12/07 | 35163 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin.tar.lzma
2020/12/07 | 35098 | macros/latex/contrib/l3kernel/l3text.dtx
-2020/12/07 | 34805 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma
-2020/12/07 | 33998 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma
-2020/12/07 | 33124 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin.tar.lzma
-2020/12/07 | 329590 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-2.9.tar.lzma
-2020/12/07 | 32892 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma
+2020/12/07 | 33890000 | systems/win32/w32tex/ltxpkgs.tar.xz
2020/12/07 | 32712 | systems/texlive/tlnet/archive/apa7.source.r57083.tar.xz
-2020/12/07 | 32316 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-2.9.tar.lzma
-2020/12/07 | 318749 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma
2020/12/07 | 31374 | macros/latex/contrib/l3kernel/l3sys.dtx
-2020/12/07 | 31248 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma
-2020/12/07 | 31228 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-2.9.tar.lzma
2020/12/07 | 31120 | macros/latex/contrib/l3kernel/l3cctab.dtx
-2020/12/07 | 31034 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-2.9.tar.lzma
-2020/12/07 | 30915 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma
2020/12/07 | 3088115 | support/albatross/scripts/albatross.jar
-2020/12/07 | 30649 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma
2020/12/07 | 30363 | macros/latex/contrib/l3kernel/l3deprecation.dtx
2020/12/07 | 2997 | macros/latex/contrib/l3kernel/README.md
2020/12/07 | 29884 | support/albatross/doc/albatross-manual.tex
-2020/12/07 | 29697 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma
-2020/12/07 | 295231 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma
2020/12/07 | 29370 | macros/latex/contrib/l3kernel/l3kernel-functions.dtx
-2020/12/07 | 29139 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma
2020/12/07 | 2906402 | support/albatross.zip
-2020/12/07 | 28898 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-2.9.tar.lzma
-2020/12/07 | 28657 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-2.9.tar.lzma
-2020/12/07 | 282561 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma
2020/12/07 | 2817 | macros/latex/contrib/l3kernel/l3prefixes.tex
-2020/12/07 | 280228 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma
-2020/12/07 | 27997 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-2.9.tar.lzma
2020/12/07 | 279953 | macros/latex/contrib/l3kernel/l3styleguide.pdf
-2020/12/07 | 279278 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-2.9.tar.lzma
-2020/12/07 | 27781 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma
-2020/12/07 | 27125 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-2.9.tar.lzma
-2020/12/07 | 27073 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-2.9.tar.lzma
-2020/12/07 | 26995 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-2.9.tar.lzma
-2020/12/07 | 26917 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-2.9.tar.lzma
2020/12/07 | 26841 | support/albatross/README.md
2020/12/07 | 267776 | macros/latex/contrib/l3kernel/l3regex.dtx
2020/12/07 | 26401 | macros/latex/contrib/l3kernel/CHANGELOG.md
-2020/12/07 | 2635596 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma
2020/12/07 | 263181 | macros/latex/contrib/l3kernel/l3docstrip.pdf
-2020/12/07 | 258167 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-2.9.tar.lzma
2020/12/07 | 25739 | macros/latex/contrib/l3kernel/l3fp-random.dtx
-2020/12/07 | 2512502 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-2.9.tar.lzma
-2020/12/07 | 250993 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-2.9.tar.lzma
2020/12/07 | 2494277 | systems/win32/miktex/tm/packages/xcharter.tar.lzma
-2020/12/07 | 24898 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-2.9.tar.lzma
-2020/12/07 | 248724 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-2.9.tar.lzma
2020/12/07 | 2484 | macros/latex/contrib/l3kernel/l3legacy.dtx
-2020/12/07 | 24823 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma
-2020/12/07 | 243117 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma
-2020/12/07 | 24270285 | systems/texlive/tlnet/install-tl.zip
2020/12/07 | 241016 | macros/latex/contrib/l3kernel/l3news09.pdf
2020/12/07 | 2372 | systems/texlive/tlnet/archive/babel-japanese.r57078.tar.xz
-2020/12/07 | 23647 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma
2020/12/07 | 23107 | macros/latex/contrib/l3kernel/l3fp-logic.dtx
-2020/12/07 | 22999 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma
2020/12/07 | 228253 | macros/latex/contrib/l3kernel/l3syntax-changes.pdf
-2020/12/07 | 2247172 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
-2020/12/07 | 224177 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma
2020/12/07 | 21926 | macros/latex/contrib/l3kernel/source3body.tex
-2020/12/07 | 218656 | systems/texlive/tlnet/archive/texlive-scripts.doc.r57076.tar.xz
-2020/12/07 | 21841 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-2.9.tar.lzma
2020/12/07 | 217624 | macros/latex/contrib/l3kernel/l3term-glossary.pdf
2020/12/07 | 2153 | macros/latex/contrib/l3kernel/source3.tex
-2020/12/07 | 212137 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma
2020/12/07 | 21168 | macros/latex/contrib/l3kernel/l3luatex.dtx
+2020/12/07 | 21127732 | systems/win32/w32tex/pdftex-w32.tar.xz
2020/12/07 | 21116 | macros/latex/contrib/l3kernel/l3text-purify.dtx
-2020/12/07 | 210332 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-x64-2.9.tar.lzma
2020/12/07 | 21004 | macros/latex/contrib/l3kernel/l3intarray.dtx
2020/12/07 | 209588 | systems/texlive/tlnet/archive/baskervaldx.doc.r57080.tar.xz
-2020/12/07 | 20829 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-2.9.tar.lzma
-2020/12/07 | 207520 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-2.9.tar.lzma
-2020/12/07 | 204962 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma
-2020/12/07 | 204960 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma
-2020/12/07 | 204265 | systems/win32/miktex/tm/packages/next/miktex-console-bin-2.9.tar.lzma
-2020/12/07 | 202380 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma
-2020/12/07 | 19935 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-2.9.tar.lzma
-2020/12/07 | 199148 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-2.9.tar.lzma
-2020/12/07 | 1985739 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma
-2020/12/07 | 197960 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-2.9.tar.lzma
2020/12/07 | 197648 | macros/latex/contrib/l3kernel/l3news12.pdf
2020/12/07 | 1975628 | systems/texlive/tlnet/archive/bookcover.doc.r57079.tar.xz
2020/12/07 | 19653 | macros/latex/contrib/l3kernel/l3fp-convert.dtx
-2020/12/07 | 195311 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma
-2020/12/07 | 194080 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-2.9.tar.lzma
-2020/12/07 | 19385967 | systems/texlive/tlnet/install-tl-windows.exe
-2020/12/07 | 192316 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-2.9.tar.lzma
2020/12/07 | 1909 | macros/latex/contrib/l3kernel/interface3.tex
2020/12/07 | 18591 | macros/latex/contrib/l3kernel/l3fp-round.dtx
-2020/12/07 | 179969 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma
-2020/12/07 | 179093 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-2.9.tar.lzma
-2020/12/07 | 17753 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma
-2020/12/07 | 17629 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma
-2020/12/07 | 1714522 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-2.9.tar.lzma
-2020/12/07 | 16672559 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
-2020/12/07 | 165548 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma
+2020/12/07 | 18586688 | systems/win32/w32tex/luatex-exp-w32.tar.xz
+2020/12/07 | 18580740 | systems/win32/w32tex/luatex-w32.tar.xz
+2020/12/07 | 18556940 | systems/win32/w32tex/luatex-dev-w32.tar.xz
+2020/12/07 | 1780 | systems/mac/mactex/Licenses.txt
2020/12/07 | 164409 | macros/latex/contrib/l3kernel/l3news11.pdf
-2020/12/07 | 16005 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-2.9.tar.lzma
-2020/12/07 | 159901 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma
-2020/12/07 | 15964 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-2.9.tar.lzma
-2020/12/07 | 159474 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma
-2020/12/07 | 157592 | systems/texlive/tlnet/archive/l3kernel.r57085.tar.xz
2020/12/07 | 1571265 | macros/latex/contrib/l3kernel/interface3.pdf
-2020/12/07 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
-2020/12/07 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
2020/12/07 | 152504 | macros/latex/contrib/l3kernel/l3news08.pdf
-2020/12/07 | 151979 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma
-2020/12/07 | 151757 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-2.9.tar.lzma
2020/12/07 | 149377 | macros/latex/contrib/l3kernel/l3doc.dtx
2020/12/07 | 14913 | macros/latex/contrib/l3kernel/l3news12.tex
2020/12/07 | 14708 | macros/latex/contrib/l3kernel/l3bootstrap.dtx
-2020/12/07 | 146912 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-2.9.tar.lzma
-2020/12/07 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
2020/12/07 | 145548 | macros/latex/contrib/l3kernel/l3news10.pdf
-2020/12/07 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
-2020/12/07 | 144052 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-2.9.tar.lzma
2020/12/07 | 143207 | macros/latex/contrib/l3kernel/l3news03.pdf
2020/12/07 | 14292 | systems/texlive/tlnet/archive/apa7.r57083.tar.xz
-2020/12/07 | 1416710 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma
-2020/12/07 | 14154 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma
2020/12/07 | 140905 | macros/latex/contrib/l3kernel/l3news06.pdf
2020/12/07 | 140873 | macros/latex/contrib/l3kernel/l3news02.pdf
2020/12/07 | 140409 | macros/latex/contrib/l3kernel/l3tl.dtx
2020/12/07 | 136160 | systems/texlive/tlnet/archive/tex4ht.doc.r57077.tar.xz
-2020/12/07 | 133552 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-2.9.tar.lzma
-2020/12/07 | 13302 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-2.9.tar.lzma
2020/12/07 | 132352 | macros/latex/contrib/l3kernel/l3file.dtx
2020/12/07 | 13232 | systems/texlive/tlnet/archive/cjk-gs-integrate.doc.r57081.tar.xz
-2020/12/07 | 132124 | systems/texlive/tlnet/archive/texlive-scripts.r57076.tar.xz
-2020/12/07 | 130414 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma
-2020/12/07 | 130354 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma
-2020/12/07 | 1302723 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma
2020/12/07 | 12965 | macros/latex/contrib/l3kernel/l3fp-traps.dtx
-2020/12/07 | 1285437 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-2.9.tar.lzma
2020/12/07 | 127477 | macros/latex/contrib/l3kernel/l3basics.dtx
2020/12/07 | 124692 | macros/latex/contrib/l3kernel/l3token.dtx
-2020/12/07 | 1245440 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma
-2020/12/07 | 1229940 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma
-2020/12/07 | 1229495 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma
2020/12/07 | 12064014 | install/macros/latex/contrib/l3kernel.tds.zip
2020/12/07 | 119094 | macros/latex/contrib/l3kernel/l3news07.pdf
-2020/12/07 | 119031 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-2.9.tar.lzma
2020/12/07 | 11884 | macros/latex/contrib/l3kernel/l3styleguide.tex
2020/12/07 | 11836945 | macros/latex/contrib/l3kernel.zip
2020/12/07 | 11812 | macros/latex/contrib/l3kernel/l3fparray.dtx
2020/12/07 | 11780 | systems/texlive/tlnet/archive/bookcover.source.r57079.tar.xz
-2020/12/07 | 1167388 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-2.9.tar.lzma
-2020/12/07 | 116218 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-2.9.tar.lzma
-2020/12/07 | 1153 | systems/win32/miktex/tm/packages/next/pr.ini
2020/12/07 | 11508 | systems/texlive/tlnet/archive/chemnum.r57084.tar.xz
-2020/12/07 | 1148088 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma
-2020/12/07 | 1147999 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma
-2020/12/07 | 114664 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma
2020/12/07 | 114026 | macros/latex/contrib/l3kernel/l3str-convert.dtx
-2020/12/07 | 113947 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma
2020/12/07 | 113533 | macros/latex/contrib/l3kernel/l3news01.pdf
2020/12/07 | 112652 | macros/latex/contrib/l3kernel/l3keys.dtx
-2020/12/07 | 1125771 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-2.9.tar.lzma
-2020/12/07 | 108985 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma
2020/12/07 | 107921 | macros/latex/contrib/l3kernel/l3expan.dtx
-2020/12/07 | 1074600 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma
2020/12/07 | 107379 | macros/latex/contrib/l3kernel/l3news09.tex
2020/12/07 | 107122 | macros/latex/contrib/l3kernel/l3news04.pdf
+2020/12/07 | 10623348 | systems/win32/w32tex/ptex-w32.tar.xz
2020/12/07 | 105735 | macros/latex/contrib/l3kernel/l3fp-parse.dtx
2020/12/07 | 105090 | macros/latex/contrib/l3kernel/l3news05.pdf
-2020/12/07 | 104536 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma
-2020/12/07 | 10281132 | systems/texlive/tlnet/archive/l3kernel.doc.r57085.tar.xz
-2020/12/07 | 102801 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma
-2020/12/07 | 101650 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma
2020/12/06 | 982 | macros/latex/contrib/babel-contrib/japanese/Makefile
2020/12/06 | 9755 | fonts/utilities/cjk-gs-integrate/database/zrlistttc.lua
2020/12/06 | 914 | fonts/utilities/cjk-gs-integrate/database/cjkgs-wenquanyi.dat
@@ -354,6 +468,7 @@
2020/12/06 | 65283 | macros/latex/contrib/apa7/samples/shortsample.pdf
2020/12/06 | 648 | fonts/utilities/cjk-gs-integrate/database/cjkgs-monotype.dat
2020/12/06 | 6484 | fonts/utilities/cjk-gs-integrate/database/cjkgs-kozuka.dat
+2020/12/06 | 6365880 | systems/win32/w32tex/win64/pdftex-w64.tar.xz
2020/12/06 | 595 | fonts/utilities/cjk-gs-integrate/database/cjkgs-typebank.dat
2020/12/06 | 592366 | macros/latex/contrib/chemnum/chemnum_en.pdf
2020/12/06 | 575 | fonts/utilities/cjk-gs-integrate/Makefile
@@ -373,7 +488,6 @@
2020/12/06 | 421681 | info/dtk-bibliography.zip
2020/12/06 | 4162847 | macros/latex/contrib/bookcover.zip
2020/12/06 | 3922 | fonts/utilities/cjk-gs-integrate/database/cjkgs-mogamobo.dat
-2020/12/06 | 388 | systems/texlive/tlnet/archive/texlive-docindex.r57070.tar.xz
2020/12/06 | 385 | fonts/utilities/cjk-gs-integrate/database/cjkgs-hancom.dat
2020/12/06 | 37938 | macros/latex/contrib/babel-contrib/japanese/babel-japanese-sample.pdf
2020/12/06 | 365112 | info/dtk-bibliography/dtk-bibliography.pdf
@@ -385,6 +499,7 @@
2020/12/06 | 2785 | fonts/utilities/cjk-gs-integrate/database/cjkgs-apple.dat
2020/12/06 | 2716 | fonts/utilities/cjk-gs-integrate/database/cjkgs-ryokana.dat
2020/12/06 | 2644 | fonts/utilities/cjk-gs-integrate/database/cjkgs-dynacomware.dat
+2020/12/06 | 2592200 | systems/win32/w32tex/tex4htk-w32.tar.xz
2020/12/06 | 2447 | macros/latex/contrib/babel-contrib/japanese/README.md
2020/12/06 | 2393 | fonts/utilities/cjk-gs-integrate/database/cjkgs-ipa.dat
2020/12/06 | 233431 | macros/latex/contrib/chemnum/scheme-bla.ps
@@ -400,13 +515,13 @@
2020/12/06 | 1852 | systems/texlive/tlnet/archive/collection-fontsextra.r57074.tar.xz
2020/12/06 | 183 | fonts/utilities/cjk-gs-integrate/database/cjkgs-sazanami.dat
2020/12/06 | 1835270 | macros/latex/contrib/bookcover/bookcover.pdf
-2020/12/06 | 170500 | systems/texlive/tlnet/archive/texlive-docindex.doc.r57070.tar.xz
2020/12/06 | 165 | fonts/utilities/cjk-gs-integrate/database/cjkgs-removeonly.dat
2020/12/06 | 1658 | fonts/utilities/cjk-gs-integrate/database/cjkgs-unfonts.dat
2020/12/06 | 1652 | fonts/utilities/cjk-gs-integrate/database/cjkgs-toppan.dat
2020/12/06 | 16078 | fonts/utilities/cjk-gs-integrate/database/cjkgs-morisawa.dat
2020/12/06 | 1541 | fonts/utilities/cjk-gs-integrate/database/cjkgs-nanum.dat
2020/12/06 | 1472 | fonts/utilities/cjk-gs-integrate/database/cjkgs-fontworks.dat
+2020/12/06 | 141574864 | systems/win32/w32tex/context.tar.xz
2020/12/06 | 14152 | fonts/utilities/cjk-gs-integrate/database/cjkgs-macos-removeonly.dat
2020/12/06 | 135234 | macros/latex/contrib/babel-contrib/japanese/babel-japanese.pdf
2020/12/06 | 1339 | macros/latex/contrib/chemnum/README
@@ -415,9 +530,11 @@
2020/12/06 | 1212 | fonts/utilities/cjk-gs-integrate/database/cjkgs-heisei.dat
2020/12/06 | 1208 | fonts/utilities/cjk-gs-integrate/database/cjkgs-cjkuni.dat
2020/12/06 | 1180 | fonts/utilities/cjk-gs-integrate/database/cjkgs-adobe.dat
+2020/12/06 | 1177432 | systems/win32/w32tex/extractpdfmark-w32.tar.xz
2020/12/06 | 11551 | macros/latex/contrib/bookcover/figures/bookcover-ruler.pdf
2020/12/06 | 1104 | fonts/utilities/cjk-gs-integrate/database/cjkgs-bizud.dat
2020/12/06 | 1094 | fonts/utilities/cjk-gs-integrate/database/cjkgs-arphic.dat
+2020/12/06 | 1087480 | systems/win32/w32tex/win64/extractpdfmark-w64.tar.xz
2020/12/05 | 9828 | fonts/baskervaldx/tfm/Baskervaldx-Ita-lf-t1.tfm
2020/12/05 | 9824 | fonts/baskervaldx/tfm/Baskervaldx-Ita-osf-t1.tfm
2020/12/05 | 9800 | fonts/baskervaldx/tfm/Baskervaldx-Ita-tlf-t1.tfm
@@ -453,7 +570,6 @@
2020/12/05 | 846308 | systems/win32/w32tex/dvi2ps-w32.tar.xz
2020/12/05 | 843967 | systems/win32/miktex/tm/packages/schemata.tar.lzma
2020/12/05 | 839464 | systems/win32/w32tex/ttf2pt1-w32.tar.xz
-2020/12/05 | 8384428 | systems/win32/w32tex/uptex-w32.tar.xz
2020/12/05 | 837358 | systems/win32/miktex/tm/packages/elsarticle.tar.lzma
2020/12/05 | 83592 | fonts/baskervaldx/type1/Baskervaldx-Bol.pfb
2020/12/05 | 830 | fonts/stepgreek/map/STEPGreekTest.map
@@ -489,7 +605,6 @@
2020/12/05 | 760 | fonts/baskervaldx/vf/Baskervaldx-Bol-lf-sc-ot1.vf
2020/12/05 | 759736 | systems/win32/w32tex/win64/dvipsk-w64.tar.xz
2020/12/05 | 758812 | systems/win32/w32tex/win64/dvi2ps-w64.tar.xz
-2020/12/05 | 748704 | systems/win32/w32tex/ChangeLog
2020/12/05 | 734780 | systems/win32/w32tex/win64/ttf2pk-w64.tar.xz
2020/12/05 | 696196 | systems/win32/w32tex/win64/ttf2pt1-w64.tar.xz
2020/12/05 | 686 | fonts/stepgreek/README
@@ -498,10 +613,7 @@
2020/12/05 | 6840 | fonts/baskervaldx/tfm/Baskervaldx-Bol-tosf-sc-ot1.tfm
2020/12/05 | 6840 | fonts/baskervaldx/tfm/Baskervaldx-Bol-tlf-sc-ot1.tfm
2020/12/05 | 66300 | fonts/baskervaldx/opentype/Baskervaldx-Bol.otf
-2020/12/05 | 6607 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
-2020/12/05 | 6607704 | systems/win32/w32tex/ptex-ng-w32.tar.xz
2020/12/05 | 64636 | fonts/baskervaldx/opentype/Baskervaldx-BolIta.otf
-2020/12/05 | 6359424 | systems/win32/w32tex/win64/pdftex-w64.tar.xz
2020/12/05 | 63260 | fonts/baskervaldx/opentype/Baskervaldx-Reg.otf
2020/12/05 | 6212 | systems/texlive/tlnet/archive/collection-latexextra.r57067.tar.xz
2020/12/05 | 61752 | fonts/baskervaldx/opentype/Baskervaldx-Ita.otf
@@ -533,10 +645,8 @@
2020/12/05 | 508 | fonts/baskervaldx/vf/Baskervaldx-Bol-tlf-ts1.vf
2020/12/05 | 508 | fonts/baskervaldx/vf/Baskervaldx-Bol-osf-ts1.vf
2020/12/05 | 508 | fonts/baskervaldx/vf/Baskervaldx-Bol-lf-ts1.vf
-2020/12/05 | 49045280 | systems/win32/w32tex/xetex-w32.tar.xz
2020/12/05 | 483748 | systems/win32/w32tex/dvi2tty-w32.tar.xz
2020/12/05 | 480807 | fonts/stepgreek.zip
-2020/12/05 | 47231296 | systems/win32/w32tex/latex-dev.tar.xz
2020/12/05 | 4660268 | systems/win32/w32tex/dvipdfm-w32.tar.xz
2020/12/05 | 4632 | fonts/baskervaldx/tfm/Baskervaldx-Ita-lf-ot1.tfm
2020/12/05 | 4628 | fonts/baskervaldx/tfm/Baskervaldx-Ita-osf-ot1.tfm
@@ -599,7 +709,6 @@
2020/12/05 | 3423 | fonts/baskervaldx/enc/zbv_mu6kzn.enc
2020/12/05 | 3418 | fonts/baskervaldx/enc/zbv_cv7nez.enc
2020/12/05 | 3414 | fonts/baskervaldx/enc/zbv_v577lu.enc
-2020/12/05 | 33880108 | systems/win32/w32tex/ltxpkgs.tar.xz
2020/12/05 | 3382452 | systems/win32/w32tex/win64/web2c-w64.tar.xz
2020/12/05 | 3376 | fonts/baskervaldx/enc/zbv_7d54ky.enc
2020/12/05 | 3374 | fonts/baskervaldx/enc/zbv_uy4eps.enc
@@ -705,7 +814,6 @@
2020/12/05 | 2649244 | systems/win32/w32tex/dvitools-w32.tar.xz
2020/12/05 | 2645191 | systems/win32/miktex/tm/packages/asymptote.tar.lzma
2020/12/05 | 262612 | systems/win32/miktex/tm/packages/eso-pic.tar.lzma
-2020/12/05 | 2599140 | systems/win32/w32tex/tex4htk-w32.tar.xz
2020/12/05 | 2585 | macros/latex/contrib/bookcover/bookcover-example1.tex
2020/12/05 | 25608 | fonts/baskervaldx/tfm/Baskervaldx-BolIta-osf-sc-t1.tfm
2020/12/05 | 25608 | fonts/baskervaldx/tfm/Baskervaldx-BolIta-lf-sc-t1.tfm
@@ -745,7 +853,6 @@
2020/12/05 | 2132 | fonts/baskervaldx/tfm/Baskervaldx-Ita-lf-sc-ly1--base.tfm
2020/12/05 | 2128 | fonts/baskervaldx/tfm/Baskervaldx-BolIta-tosf-sc-ly1--base.tfm
2020/12/05 | 2128 | fonts/baskervaldx/tfm/Baskervaldx-BolIta-tlf-sc-ly1--base.tfm
-2020/12/05 | 21145752 | systems/win32/w32tex/pdftex-w32.tar.xz
2020/12/05 | 2104 | fonts/baskervaldx/tfm/Baskervaldx-Ita-tlf-sc-ly1--base.tfm
2020/12/05 | 2100 | fonts/baskervaldx/tfm/Baskervaldx-Ita-tosf-sc-ly1--base.tfm
2020/12/05 | 209966 | systems/win32/miktex/tm/packages/mf2pt1.tar.lzma
@@ -788,14 +895,11 @@
2020/12/05 | 1872024 | systems/win32/w32tex/win64/ptex-w64.tar.xz
2020/12/05 | 1868 | fonts/baskervaldx/tfm/Baskervaldx-Bol-sup-t1.tfm
2020/12/05 | 1860 | fonts/baskervaldx/tfm/Baskervaldx-Bol-lf-t1--base.tfm
-2020/12/05 | 18599128 | systems/win32/w32tex/luatex-dev-w32.tar.xz
2020/12/05 | 1856 | fonts/baskervaldx/tfm/Baskervaldx-Reg-tosf-ly1--base.tfm
2020/12/05 | 1856 | fonts/baskervaldx/tfm/Baskervaldx-Reg-tlf-ly1--base.tfm
2020/12/05 | 1856 | fonts/baskervaldx/tfm/Baskervaldx-Reg-sup-ly1.tfm
2020/12/05 | 1856 | fonts/baskervaldx/tfm/Baskervaldx-Reg-osf-sc-ly1--base.tfm
2020/12/05 | 1856 | fonts/baskervaldx/tfm/Baskervaldx-Bol-osf-t1--base.tfm
-2020/12/05 | 18566576 | systems/win32/w32tex/luatex-exp-w32.tar.xz
-2020/12/05 | 18561268 | systems/win32/w32tex/luatex-w32.tar.xz
2020/12/05 | 1852 | fonts/baskervaldx/tfm/Baskervaldx-Reg-sup-ly1--base.tfm
2020/12/05 | 1852 | fonts/baskervaldx/tfm/Baskervaldx-Reg-lf-sc-ly1--base.tfm
2020/12/05 | 1852 | fonts/baskervaldx/tfm/Baskervaldx-Bol-sup-t1--base.tfm
@@ -939,7 +1043,6 @@
2020/12/05 | 150417 | systems/win32/miktex/tm/packages/rest-api.tar.lzma
2020/12/05 | 146091 | macros/latex/contrib/apa7/apa7.dtx
2020/12/05 | 142288 | systems/texlive/tlnet/archive/rest-api.doc.r57068.tar.xz
-2020/12/05 | 141595396 | systems/win32/w32tex/context.tar.xz
2020/12/05 | 141252 | systems/texlive/tlnet/archive/texlive-msg-translations.r57063.tar.xz
2020/12/05 | 140671 | systems/win32/miktex/tm/packages/babel-albanian.tar.lzma
2020/12/05 | 1400 | fonts/baskervaldx/tfm/Baskervaldx-Reg-tosf-ts1.tfm
@@ -981,7 +1084,6 @@
2020/12/05 | 10887733 | systems/win32/miktex/tm/packages/l3kernel.tar.lzma
2020/12/05 | 10872 | systems/texlive/tlnet/archive/pbalance.source.r57067.tar.xz
2020/12/05 | 1076576 | systems/win32/w32tex/win64/makeindex-w64.tar.xz
-2020/12/05 | 10624160 | systems/win32/w32tex/ptex-w32.tar.xz
2020/12/05 | 10476 | fonts/baskervaldx/tfm/Baskervaldx-Ita-osf-ly1.tfm
2020/12/05 | 10476 | fonts/baskervaldx/tfm/Baskervaldx-Ita-lf-ly1.tfm
2020/12/05 | 10469963 | systems/win32/miktex/tm/packages/reledmac.tar.lzma
@@ -1077,934 +1179,4 @@
2020/12/02 | 201472 | systems/texlive/tlnet/archive/scholax.doc.r57042.tar.xz
2020/12/02 | 1883144 | systems/texlive/tlnet/archive/scholax.r57042.tar.xz
2020/12/02 | 1359472 | systems/texlive/tlnet/archive/hep-paper.doc.r57045.tar.xz
-2020/12/02 | 1178644 | systems/win32/w32tex/extractpdfmark-w32.tar.xz
-2020/12/02 | 1087928 | systems/win32/w32tex/win64/extractpdfmark-w64.tar.xz
2020/12/02 | 10712908 | systems/texlive/tlnet/archive/pgf.doc.r57043.tar.xz
-2020/12/01 | 9989 | graphics/pgf/base/tex/pgfmathfunctions.code.tex
-2020/12/01 | 997 | graphics/pgf/base/tex/tikzlibrarydatavisualization.barcharts.code.tex
-2020/12/01 | 992 | graphics/pgf/base/tex/pgfcore.code.tex
-2020/12/01 | 99196 | macros/latex/contrib/hep-paper/hep-paper-implementation.dtx
-2020/12/01 | 989 | graphics/pgf/base/tex/pgfcomp-version-1-18.sty
-2020/12/01 | 989 | graphics/pgf/base/source/RandomPlacer_script.h
-2020/12/01 | 9893 | graphics/pgf/base/lua/graphdrawing/pgf/gd/bindings/BindingToPGF.lua
-2020/12/01 | 98820 | graphics/pgf/base/doc/text-en/pgfmanual-en-library-shapes.tex
-2020/12/01 | 982 | graphics/pgf/base/lua/graphdrawing/pgf/gd/layered/NodeRankingMinimumHeight.lua
-2020/12/01 | 9829 | graphics/pgf/base/doc/text-en/pgfmanual-en-library-backgrounds.tex
-2020/12/01 | 981 | graphics/pgf/base/tex/tikzlibraryscopes.code.tex
-2020/12/01 | 981 | graphics/pgf/base/source/RandomMerger_script.h
-2020/12/01 | 976 | graphics/pgf/base/lua/graphdrawing/pgf/gd/lib/Stack.lua
-2020/12/01 | 974 | graphics/pgf/base/lua/graphdrawing/pgf/gd/doc/ogdf/energybased/multilevelmixer/BarycenterPlacer.lua
-2020/12/01 | 973 | graphics/pgf/base/source/InterfaceFromOGDF.h
-2020/12/01 | 973 | graphics/pgf/base/lua/graphdrawing/pgf/gd/doc/ogdf/energybased/multilevelmixer/IndependentSetMerger.lua
-2020/12/01 | 970 | graphics/pgf/base/lua/graphdrawing/pgf/gd/examples/ASCIIDisplayer.lua
-2020/12/01 | 969 | graphics/pgf/base/doc/version-for-dvipdfmx/en/Makefile
-2020/12/01 | 9690 | graphics/pgf/base/tex/pgfcorepatterns.code.tex
-2020/12/01 | 968 | graphics/pgf/base/source/ZeroPlacer_script.h
-2020/12/01 | 968 | graphics/pgf/base/lua/graphdrawing/pgf/gd/doc/ogdf/energybased/multilevelmixer/LocalBiconnectedMerger.lua
-2020/12/01 | 968 | graphics/pgf/base/doc/text-en/pgfmanual-en-gd-trees.tex
-2020/12/01 | 967 | graphics/pgf/base/lua/graphdrawing/pgf/gd/deprecated/Cluster.lua
-2020/12/01 | 9652 | graphics/pgf/base/lua/graphdrawing/pgf/gd/deprecated/Graph.lua
-2020/12/01 | 9631 | graphics/pgf/base/doc/text-en/pgfmanual-en-gd-binding-layer.tex
-2020/12/01 | 962 | graphics/pgf/base/lua/graphdrawing/pgf/gd/doc/ogdf/energybased/multilevelmixer/MatchingMerger.lua
-2020/12/01 | 9614 | graphics/pgf/base/tex/tikzlibrarycircuits.ee.IEC.code.tex
-2020/12/01 | 954 | graphics/pgf/base/lua/graphdrawing/pgf/gd/doc/ogdf/energybased/multilevelmixer/EdgeCoverMerger.lua
-2020/12/01 | 953 | graphics/pgf/base/lua/graphdrawing/pgf/gd/doc/ogdf/energybased/multilevelmixer/ZeroPlacer.lua
-2020/12/01 | 95375 | graphics/pgf/base/tex/pgfmoduledatavisualization.code.tex
-2020/12/01 | 952 | graphics/pgf/base/lua/graphdrawing/pgf/gd/doc/ogdf/energybased/multilevelmixer/RandomPlacer.lua
-2020/12/01 | 950 | graphics/pgf/base/doc/text-en/pgfmanual-en-gd-layered.tex
-2020/12/01 | 948 | graphics/pgf/base/lua/graphdrawing/pgf/gd/doc/ogdf/energybased/multilevelmixer/RandomMerger.lua
-2020/12/01 | 946 | graphics/pgf/base/tex/tikzlibrarycircuits.logic.code.tex
-2020/12/01 | 946 | graphics/pgf/base/lua/graphdrawing/pgf/gd/trees/library.lua
-2020/12/01 | 93 | graphics/pgf/base/doc/licenses/manifest-documentation.txt
-2020/12/01 | 93853 | graphics/pgf/base/tex/tikzlibrarydatavisualization.code.tex
-2020/12/01 | 93690 | graphics/pgf/base/doc/text-en/pgfmanual-en-library-circuits.tex
-2020/12/01 | 934 | graphics/pgf/base/lua/graphdrawing/pgf/gd/phylogenetics/library.lua
-2020/12/01 | 931 | graphics/pgf/base/lua/graphdrawing/pgf/gd/experimental/evolving/library.lua
-2020/12/01 | 92 | graphics/pgf/base/doc/version-for-xetex/en/plots/pgf-exp.gnuplot
-2020/12/01 | 92 | graphics/pgf/base/doc/version-for-pdftex/en/plots/pgf-exp.gnuplot
-2020/12/01 | 92 | graphics/pgf/base/doc/version-for-luatex/en/plots/pgf-exp.gnuplot
-2020/12/01 | 92 | graphics/pgf/base/doc/version-for-dvisvgm/en/plots/pgf-exp.gnuplot
-2020/12/01 | 92 | graphics/pgf/base/doc/version-for-dvips/en/plots/pgf-exp.gnuplot
-2020/12/01 | 92 | graphics/pgf/base/doc/version-for-dvipdfmx/en/plots/pgf-exp.gnuplot
-2020/12/01 | 92 | graphics/pgf/base/doc/version-for-dvipdfm/en/plots/pgf-exp.gnuplot
-2020/12/01 | 926 | graphics/pgf/base/tex/pgf.cfg
-2020/12/01 | 926 | graphics/pgf/base/lua/graphdrawing/pgf/gd/ogdf/library.lua
-2020/12/01 | 92405 | graphics/pgf/base/tex/pgfmathfunctions.trigonometric.code.tex
-2020/12/01 | 9212 | graphics/pgf/base/doc/text-en/pgfmanual-en-pgfsys-paths.tex
-2020/12/01 | 919 | graphics/pgf/base/tex/tikzlibraryshapes.multipart.code.tex
-2020/12/01 | 91587 | graphics/pgf/base/tex/pgflibraryshapes.arrows.code.tex
-2020/12/01 | 911 | graphics/pgf/base/tex/tikzlibrarysvg.path.code.tex
-2020/12/01 | 90 | graphics/pgf/base/doc/version-for-xetex/en/plots/pgfplotgnuplot-example.gnuplot
-2020/12/01 | 90 | graphics/pgf/base/doc/version-for-pdftex/en/plots/pgfplotgnuplot-example.gnuplot
-2020/12/01 | 90 | graphics/pgf/base/doc/version-for-luatex/en/plots/pgfplotgnuplot-example.gnuplot
-2020/12/01 | 90 | graphics/pgf/base/doc/version-for-dvisvgm/en/plots/pgfplotgnuplot-example.gnuplot
-2020/12/01 | 90 | graphics/pgf/base/doc/version-for-dvips/en/plots/pgfplotgnuplot-example.gnuplot
-2020/12/01 | 90 | graphics/pgf/base/doc/version-for-dvipdfmx/en/plots/pgfplotgnuplot-example.gnuplot
-2020/12/01 | 90 | graphics/pgf/base/doc/version-for-dvipdfm/en/plots/pgfplotgnuplot-example.gnuplot
-2020/12/01 | 909 | graphics/pgf/base/lua/graphdrawing/pgf/gd/doc/ogdf/energybased/MultilevelLayout.lua
-2020/12/01 | 90515 | graphics/pgf/base/tex/pgflibraryshapes.symbols.code.tex
-2020/12/01 | 89878 | graphics/pgf/base/doc/text-en/pgfmanual-en-library-decorations.tex
-2020/12/01 | 89737 | graphics/pgf/base/doc/images/pgfmanual-mindmap-2.pdf
-2020/12/01 | 8907 | graphics/pgf/base/lua/graphdrawing/pgf/gd/layered/CrossingMinimizationGansnerKNV1993.lua
-2020/12/01 | 88 | graphics/pgf/base/doc/licenses/manifest-code.txt
-2020/12/01 | 8893 | graphics/pgf/base/tex/pgfcoretransparency.code.tex
-2020/12/01 | 8843 | graphics/pgf/base/tex/pgflibrarydecorations.pathmorphing.code.tex
-2020/12/01 | 87 | graphics/pgf/base/doc/version-for-xetex/en/plots/pgf-sin.gnuplot
-2020/12/01 | 87 | graphics/pgf/base/doc/version-for-pdftex/en/plots/pgf-sin.gnuplot
-2020/12/01 | 87 | graphics/pgf/base/doc/version-for-luatex/en/plots/pgf-sin.gnuplot
-2020/12/01 | 87 | graphics/pgf/base/doc/version-for-dvisvgm/en/plots/pgf-sin.gnuplot
-2020/12/01 | 87 | graphics/pgf/base/doc/version-for-dvips/en/plots/pgf-sin.gnuplot
-2020/12/01 | 87 | graphics/pgf/base/doc/version-for-dvipdfmx/en/plots/pgf-sin.gnuplot
-2020/12/01 | 87 | graphics/pgf/base/doc/version-for-dvipdfm/en/plots/pgf-sin.gnuplot
-2020/12/01 | 873 | graphics/pgf/base/lua/graphdrawing/pgf/gd/planar/List.lua
-2020/12/01 | 873 | graphics/pgf/base/doc/version-for-pdftex/en/Makefile
-2020/12/01 | 873 | graphics/pgf/base/doc/version-for-luatex/en/Makefile
-2020/12/01 | 8724 | graphics/pgf/base/tex/tikzlibrarycircuits.code.tex
-2020/12/01 | 86658 | graphics/pgf/base/tex/tikzlibrarygraphs.code.tex
-2020/12/01 | 8612 | graphics/pgf/base/lua/graphdrawing/pgf/gd/deprecated/Edge.lua
-2020/12/01 | 86071 | graphics/pgf/base/tex/pgflibraryfpu.code.tex
-2020/12/01 | 8605 | graphics/pgf/base/lua/graphdrawing/pgf/gd/model/Path_arced.lua
-2020/12/01 | 85454 | graphics/pgf/base/tex/pgflibraryshapes.gates.logic.US.code.tex
-2020/12/01 | 853 | graphics/pgf/base/lua/graphdrawing/pgf/gd/doc/ogdf/layered/GreedyCycleRemoval.lua
-2020/12/01 | 8471 | graphics/pgf/base/tex/pgfmathutil.code.tex
-2020/12/01 | 8444 | graphics/pgf/base/lua/graphdrawing/pgf/gd/examples/SimpleHuffman.lua
-2020/12/01 | 8432 | graphics/pgf/base/lua/graphdrawing/pgf/gd/phylogenetics/SokalMichener1958.lua
-2020/12/01 | 831 | graphics/pgf/base/source/BalloonLayout_script.h
-2020/12/01 | 8251 | graphics/pgf/base/tex/pgflibrarylindenmayersystems.code.tex
-2020/12/01 | 8247 | graphics/pgf/base/doc/text-en/pgfmanual-en-math-commands.tex
-2020/12/01 | 823 | graphics/pgf/base/source/energybased_script.h
-2020/12/01 | 823 | graphics/pgf/base/lua/graphdrawing/pgf/gd/doc/ogdf/layered/DfsAcyclicSubgraph.lua
-2020/12/01 | 8196 | graphics/pgf/base/lua/graphdrawing/pgf/gd/force/jedi/base/CoarseGraphFW.lua
-2020/12/01 | 813 | graphics/pgf/base/doc/text-en/pgfmanual-en-gd-edge-routing.tex
-2020/12/01 | 80 | graphics/pgf/base/doc/version-for-xetex/en/plots/pgf-x.gnuplot
-2020/12/01 | 80 | graphics/pgf/base/doc/version-for-pdftex/en/plots/pgf-x.gnuplot
-2020/12/01 | 80 | graphics/pgf/base/doc/version-for-luatex/en/plots/pgf-x.gnuplot
-2020/12/01 | 80 | graphics/pgf/base/doc/version-for-dvisvgm/en/plots/pgf-x.gnuplot
-2020/12/01 | 80 | graphics/pgf/base/doc/version-for-dvips/en/plots/pgf-x.gnuplot
-2020/12/01 | 80 | graphics/pgf/base/doc/version-for-dvipdfmx/en/plots/pgf-x.gnuplot
-2020/12/01 | 80 | graphics/pgf/base/doc/version-for-dvipdfm/en/plots/pgf-x.gnuplot
-2020/12/01 | 802 | graphics/pgf/base/lua/graphdrawing/pgf/gd/examples/library.lua
-2020/12/01 | 7987 | graphics/pgf/base/doc/text-en/pgfmanual-en-library-shadings.tex
-2020/12/01 | 796 | graphics/pgf/base/tex/t-pgfsys.tex
-2020/12/01 | 795 | graphics/pgf/base/doc/text-en/pgfmanual-en-gd-misc.tex
-2020/12/01 | 7936 | graphics/pgf/base/tex/pgflibrarypatterns.code.tex
-2020/12/01 | 791 | graphics/pgf/base/tex/t-tikz.tex
-2020/12/01 | 788 | graphics/pgf/base/tex/tikzlibrarydecorations.markings.code.tex
-2020/12/01 | 787 | graphics/pgf/base/tex/t-pgfrcs.tex
-2020/12/01 | 78671 | graphics/pgf/base/doc/images/brave-gnu-world-logo.jpg
-2020/12/01 | 785 | graphics/pgf/base/doc/version-for-luatex/en/pgfmanual.tex
-2020/12/01 | 782 | graphics/pgf/base/tex/LUA_CODING_STYLE
-2020/12/01 | 7789 | graphics/pgf/base/tex/pgfmathfunctions.random.code.tex
-2020/12/01 | 7778 | graphics/pgf/base/tex/pgfsyssoftpath.code.tex
-2020/12/01 | 7763 | graphics/pgf/base/doc/text-en/pgfmanual-en-library-folding.tex
-2020/12/01 | 771 | graphics/pgf/base/doc/version-for-tex4ht/en/Makefile
-2020/12/01 | 770 | graphics/pgf/base/tex/tikzlibrarypatterns.code.tex
-2020/12/01 | 7692 | graphics/pgf/base/doc/text-en/pgfmanual-en-dv-introduction.tex
-2020/12/01 | 7646 | graphics/pgf/base/tex/tikzlibraryrdf.code.tex
-2020/12/01 | 750124 | info/install-latex-guide-zh-cn.zip
-2020/12/01 | 74959 | graphics/pgf/base/tex/tikzlibraryfolding.code.tex
-2020/12/01 | 747 | graphics/pgf/base/source/MakefileConfig.mk
-2020/12/01 | 7474 | graphics/pgf/base/tex/pgflibrarydecorations.pathreplacing.code.tex
-2020/12/01 | 7412 | graphics/pgf/base/doc/text-en/pgfmanual-en-library-3d.tex
-2020/12/01 | 73 | graphics/pgf/base/lua/graphdrawing/pgf/gd/planar.lua
-2020/12/01 | 7390 | graphics/pgf/base/doc/text-en/pgfmanual-en-installation.tex
-2020/12/01 | 734 | graphics/pgf/base/lua/graphdrawing/pgf/gd/doc/ogdf/layered/GreedyInsertHeuristic.lua
-2020/12/01 | 7327 | graphics/pgf/base/tex/pgfautomata.sty
-2020/12/01 | 731 | graphics/pgf/base/lua/graphdrawing/pgf/gd/doc/ogdf/energybased/multilevelmixer/MedianPlacer.lua
-2020/12/01 | 730 | graphics/pgf/base/lua/graphdrawing/pgf/gd/doc/ogdf/energybased/multilevelmixer/SolarPlacer.lua
-2020/12/01 | 72 | graphics/pgf/base/lua/graphdrawing/pgf/gd/planar/library.lua
-2020/12/01 | 729 | graphics/pgf/base/lua/graphdrawing/pgf/gd/doc/ogdf/layered/BarycenterHeuristic.lua
-2020/12/01 | 7275 | graphics/pgf/base/tex/tikzlibrarygraphdrawing.code.tex
-2020/12/01 | 7256 | graphics/pgf/base/doc/text-en/pgfmanual-en-library-arrows.tex
-2020/12/01 | 7251 | graphics/pgf/base/tex/pgfutil-common-lists.tex
-2020/12/01 | 724 | graphics/pgf/base/tex/t-pgfmat.tex
-2020/12/01 | 7235 | graphics/pgf/base/tex/pgflibrarydatavisualization.polar.code.tex
-2020/12/01 | 722 | graphics/pgf/base/lua/graphdrawing/pgf/gd/doc/ogdf/layered/MedianHeuristic.lua
-2020/12/01 | 720 | graphics/pgf/base/lua/graphdrawing/pgf/gd/doc/ogdf/layered/SplitHeuristic.lua
-2020/12/01 | 71722 | graphics/pgf/base/tex/pgfmoduledecorations.code.tex
-2020/12/01 | 7167 | graphics/pgf/base/lua/graphdrawing/pgf/gd/control/Orientation.lua
-2020/12/01 | 7163 | graphics/pgf/base/lua/graphdrawing/pgf/gd/trees/ChildSpec.lua
-2020/12/01 | 714 | graphics/pgf/base/doc/version-for-xetex/en/Makefile
-2020/12/01 | 713 | graphics/pgf/base/doc/text-en/pgfmanual-en-dv-backend.tex
-2020/12/01 | 711253 | info/install-latex-guide-zh-cn/install-latex-guide-zh-cn.pdf
-2020/12/01 | 708 | graphics/pgf/base/tex/tikzlibraryshadings.code.tex
-2020/12/01 | 701 | graphics/pgf/base/doc/version-for-dvipdfm/en/Makefile
-2020/12/01 | 7011 | graphics/pgf/base/lua/graphdrawing/pgf/gd/force/QuadTree.lua
-2020/12/01 | 6995 | graphics/pgf/base/tex/pgflibrarytimelines.code.tex
-2020/12/01 | 6958 | graphics/pgf/base/tex/pgfmathode.code.tex
-2020/12/01 | 6944 | graphics/pgf/base/tex/pgfcoreimage.code.tex
-2020/12/01 | 691 | graphics/pgf/base/tex/t-pgfcal.tex
-2020/12/01 | 68833 | graphics/pgf/base/tex/tikzexternalshared.code.tex
-2020/12/01 | 6860 | graphics/pgf/base/tex/pgfutil-latex.def
-2020/12/01 | 68559 | graphics/pgf/base/doc/text-en/pgfmanual-en-pgfkeys.tex
-2020/12/01 | 6846 | graphics/pgf/base/tex/pgflibraryarrows.spaced.code.tex
-2020/12/01 | 6810 | graphics/pgf/base/tex/tikzlibrarychains.code.tex
-2020/12/01 | 6774 | graphics/pgf/base/lua/graphdrawing/pgf/gd/layered/Ranking.lua
-2020/12/01 | 6762 | graphics/pgf/base/tex/pgfsys-common-pdf-via-dvi.def
-2020/12/01 | 668 | graphics/pgf/base/doc/version-for-vtex/en/Makefile
-2020/12/01 | 666 | graphics/pgf/base/tex/t-pgffor.tex
-2020/12/01 | 6661 | graphics/pgf/base/lua/graphdrawing/pgf/gd/bindings/Binding.lua
-2020/12/01 | 665 | graphics/pgf/base/doc/version-for-dvisvgm/en/pgfmanual-test.tex
-2020/12/01 | 663 | graphics/pgf/base/source/MedianPlacer_script.h
-2020/12/01 | 6616 | graphics/pgf/base/doc/text-en/pgfmanual-en-library-trees.tex
-2020/12/01 | 66153 | graphics/pgf/base/doc/text-en/pgfmanual-en-license.tex
-2020/12/01 | 6593 | graphics/pgf/base/doc/text-en/pgfmanual-en-library-fit.tex
-2020/12/01 | 658 | graphics/pgf/base/doc/text-en/pgfmanual-en-gd-circular.tex
-2020/12/01 | 655 | graphics/pgf/base/source/SolarPlacer_script.h
-2020/12/01 | 6550 | graphics/pgf/base/lua/graphdrawing/pgf/gd/model/Coordinate.lua
-2020/12/01 | 6529 | graphics/pgf/base/lua/graphdrawing/pgf/gd/control/doc.lua
-2020/12/01 | 6364 | graphics/pgf/base/doc/text-en/pgfmanual-en-base-quick.tex
-2020/12/01 | 633 | graphics/pgf/base/tex/t-pgfkey.tex
-2020/12/01 | 632 | graphics/pgf/base/tex/tikzlibrarydatavisualization.sparklines.code.tex
-2020/12/01 | 63197 | graphics/pgf/base/doc/images/brave-gnu-world-logo.eps
-2020/12/01 | 630 | graphics/pgf/base/lua/graphdrawing/pgf/gd/force/SpringLayouts.lua
-2020/12/01 | 6265 | graphics/pgf/base/lua/graphdrawing/pgf/gd/deprecated/Node.lua
-2020/12/01 | 62618 | graphics/pgf/base/doc/text-en/pgfmanual-en-pgfsys-animations.tex
-2020/12/01 | 6254 | graphics/pgf/base/lua/graphdrawing/pgf/gd/model/Collection.lua
-2020/12/01 | 62448 | graphics/pgf/base/tex/pgfsys-common-svg.def
-2020/12/01 | 62281 | graphics/pgf/base/tex/pgflibraryshapes.multipart.code.tex
-2020/12/01 | 6223 | graphics/pgf/base/lua/graphdrawing/pgf/gd/lib/PriorityQueue.lua
-2020/12/01 | 620 | graphics/pgf/base/lua/graphdrawing/pgf/gd/circular/library.lua
-2020/12/01 | 6189 | graphics/pgf/base/doc/text-en/pgfmanual-en-base-design.tex
-2020/12/01 | 61664 | graphics/pgf/base/doc/text-en/pgfmanual-en-base-animations.tex
-2020/12/01 | 61358 | graphics/pgf/base/doc/text-en/pgfmanual-en-tutorial-map.tex
-2020/12/01 | 60544 | graphics/pgf/base/tex/pgfsys.code.tex
-2020/12/01 | 60485 | graphics/pgf/base/doc/images/brave-gnu-world-logo-mask.jpg
-2020/12/01 | 6038 | graphics/pgf/base/tex/pgfcoregraphicstate.code.tex
-2020/12/01 | 6017 | graphics/pgf/base/tex/pgflibrarydatavisualization.formats.functions.code.tex
-2020/12/01 | 5984 | graphics/pgf/base/lua/graphdrawing/pgf/gd/lib/Simplifiers.lua
-2020/12/01 | 597 | graphics/pgf/base/lua/graphdrawing/pgf/gd/routing/library.lua
-2020/12/01 | 596 | graphics/pgf/base/doc/description.html
-2020/12/01 | 59652 | graphics/pgf/base/tex/pgfsysanimations.code.tex
-2020/12/01 | 5923 | graphics/pgf/base/lua/graphdrawing/pgf/gd/model/Edge.lua
-2020/12/01 | 591 | graphics/pgf/base/source/GreedyInsertHeuristic_script.h
-2020/12/01 | 59122 | graphics/pgf/base/doc/text-en/pgfmanual-en-tutorial.tex
-2020/12/01 | 590 | graphics/pgf/base/tex/tikzlibrarycircuits.logic.CDH.code.tex
-2020/12/01 | 58801 | graphics/pgf/base/tex/pgflibraryarrows.meta.code.tex
-2020/12/01 | 586 | graphics/pgf/base/source/module_script.h
-2020/12/01 | 5849 | graphics/pgf/base/doc/text-en/pgfmanual-en-library-fixedpoint.tex
-2020/12/01 | 577 | graphics/pgf/base/source/BarycenterHeuristic_script.h
-2020/12/01 | 57653 | graphics/pgf/base/doc/FILES
-2020/12/01 | 575 | graphics/pgf/base/source/GreedyCycleRemoval_script.h
-2020/12/01 | 575 | graphics/pgf/base/source/DfsAcyclicSubgraph_script.h
-2020/12/01 | 57538 | graphics/pgf/base/doc/text-en/pgfmanual-en-pgfsys-commands.tex
-2020/12/01 | 57429 | graphics/pgf/base/doc/text-en/pgfmanual-en-tikz-paths.tex
-2020/12/01 | 57255 | graphics/pgf/base/tex/pgfmanual-en-macros.tex
-2020/12/01 | 57081 | graphics/pgf/base/doc/images/brave-gnu-world-logo.25.jpg
-2020/12/01 | 5693 | graphics/pgf/base/lua/graphdrawing/pgf/gd/force/jedi/algorithms/SocialGravityDegree.lua
-2020/12/01 | 561 | graphics/pgf/base/doc/version-for-luatex/en/plots/pgf-parametric-example.table
-2020/12/01 | 561 | graphics/pgf/base/doc/version-for-luatex/en/plots/pgf-parametric-example-cut.table
-2020/12/01 | 561 | graphics/pgf/base/doc/version-for-dvipdfmx/en/plots/pgf-parametric-example.table
-2020/12/01 | 561 | graphics/pgf/base/doc/version-for-dvipdfmx/en/plots/pgf-parametric-example-cut.table
-2020/12/01 | 5601 | graphics/pgf/base/lua/graphdrawing/pgf/gd/deprecated/Vector.lua
-2020/12/01 | 55873 | graphics/pgf/base/doc/text-en/pgfmanual-en-base-nodes.tex
-2020/12/01 | 5573 | graphics/pgf/base/lua/graphdrawing/pgf/gd/lib/PathLengths.lua
-2020/12/01 | 5546 | graphics/pgf/base/tex/pgfsys-common-pdf.def
-2020/12/01 | 553 | graphics/pgf/base/source/ogdf_script.c++
-2020/12/01 | 5515 | graphics/pgf/base/doc/text-en/pgfmanual-en-base-layers.tex
-2020/12/01 | 5510 | graphics/pgf/base/tex/pgfsys-dvisvgm.def
-2020/12/01 | 549 | graphics/pgf/base/source/MedianHeuristic_script.h
-2020/12/01 | 5493 | graphics/pgf/base/tex/tikzlibrarydecorations.code.tex
-2020/12/01 | 544 | graphics/pgf/base/doc/version-for-luatex/en/plots/pgf-sin.table
-2020/12/01 | 544 | graphics/pgf/base/doc/version-for-dvipdfmx/en/plots/pgf-sin.table
-2020/12/01 | 54438 | graphics/pgf/base/doc/text-en/pgfmanual-en-tikz-actions.tex
-2020/12/01 | 543 | graphics/pgf/base/tex/t-pgf.tex
-2020/12/01 | 543 | graphics/pgf/base/doc/version-for-luatex/en/plots/pgf-exp.table
-2020/12/01 | 543 | graphics/pgf/base/doc/version-for-dvipdfmx/en/plots/pgf-exp.table
-2020/12/01 | 542 | graphics/pgf/base/source/SplitHeuristic_script.h
-2020/12/01 | 541 | graphics/pgf/base/source/tikzexternaltest.sharedpreamble.tex
-2020/12/01 | 5401 | graphics/pgf/base/lua/graphdrawing/pgf/gd/force/jedi/forcetypes/ForceGraphDistance.lua
-2020/12/01 | 5400 | graphics/pgf/base/lua/graphdrawing/pgf/gd/control/NodeAnchors.lua
-2020/12/01 | 5364 | graphics/pgf/base/lua/graphdrawing/pgf/gd/control/Components.lua
-2020/12/01 | 5364 | graphics/pgf/base/doc/extract.lua
-2020/12/01 | 534 | graphics/pgf/base/doc/version-for-dvipdfmx/en/pgfmanual-test.tex
-2020/12/01 | 533 | graphics/pgf/base/doc/version-for-luatex/en/plots/pgf-x.table
-2020/12/01 | 533 | graphics/pgf/base/doc/version-for-luatex/en/pgfmanual-test.tex
-2020/12/01 | 533 | graphics/pgf/base/doc/version-for-dvipdfmx/en/plots/pgf-x.table
-2020/12/01 | 532 | graphics/pgf/base/tex/tikzlibrarygraphdrawing.evolving.code.tex
-2020/12/01 | 532 | graphics/pgf/base/doc/version-for-dvips/en/pgfmanual-test.tex
-2020/12/01 | 5297 | graphics/pgf/base/lua/graphdrawing/pgf/gd/force/library.lua
-2020/12/01 | 5292 | graphics/pgf/base/tex/tikzexternal.sty
-2020/12/01 | 5287 | graphics/pgf/base/lua/graphdrawing/pgf/gd/experimental/evolving/GreedyTemporalCycleRemoval.lua
-2020/12/01 | 5286 | graphics/pgf/base/tex/tikzlibraryintersections.code.tex
-2020/12/01 | 5258 | graphics/pgf/base/lua/graphdrawing/pgf/gd/interface/InterfaceCore.lua
-2020/12/01 | 5251 | graphics/pgf/base/doc/text-en/pgfmanual-en-library-views.tex
-2020/12/01 | 523 | graphics/pgf/base/tex/pgfsys.tex
-2020/12/01 | 5227 | graphics/pgf/base/lua/graphdrawing/pgf/gd/force/jedi/forcetypes/ForceCanvasDistance.lua
-2020/12/01 | 52250 | graphics/pgf/base/doc/text-en/pgfmanual-en-tikz-coordinates.tex
-2020/12/01 | 5222 | graphics/pgf/base/lua/graphdrawing/pgf/gd/experimental/evolving/SupergraphVertexSplitOptimization.lua
-2020/12/01 | 5220 | graphics/pgf/base/tex/pgflibrarydecorations.markings.code.tex
-2020/12/01 | 521 | graphics/pgf/base/tex/pgfmath.code.tex
-2020/12/01 | 5214 | graphics/pgf/base/lua/graphdrawing/pgf/gd/trees/ReingoldTilford1981.lua
-2020/12/01 | 520 | graphics/pgf/base/doc/version-for-xetex/en/plots/pgf-parametric-example.table
-2020/12/01 | 520 | graphics/pgf/base/doc/version-for-vtex/en/plots/pgf-parametric-example.table
-2020/12/01 | 520 | graphics/pgf/base/doc/version-for-tex4ht/en/plots/pgf-parametric-example.table
-2020/12/01 | 520 | graphics/pgf/base/doc/version-for-pdftex/en/plots/pgf-parametric-example.table
-2020/12/01 | 520 | graphics/pgf/base/doc/version-for-dvisvgm/en/plots/pgf-parametric-example.table
-2020/12/01 | 520 | graphics/pgf/base/doc/version-for-dvips/en/plots/pgf-parametric-example.table
-2020/12/01 | 520 | graphics/pgf/base/doc/version-for-dvipdfm/en/plots/pgf-parametric-example.table
-2020/12/01 | 520 | graphics/pgf/base/doc/text-en/plots/pgf-parametric-example.table
-2020/12/01 | 5204 | graphics/pgf/base/source/InterfaceFromC++.c++
-2020/12/01 | 5196 | graphics/pgf/base/tex/pgfcorerdf.code.tex
-2020/12/01 | 517 | graphics/pgf/base/tex/pgflibraryshapes.code.tex
-2020/12/01 | 5149 | graphics/pgf/base/lua/graphdrawing/pgf/gd/force/ControlCoarsening.lua
-2020/12/01 | 513 | graphics/pgf/base/doc/version-for-xetex/en/plots/pgf-sin.table
-2020/12/01 | 513 | graphics/pgf/base/doc/version-for-vtex/en/plots/pgf-sin.table
-2020/12/01 | 513 | graphics/pgf/base/doc/version-for-tex4ht/en/plots/pgf-sin.table
-2020/12/01 | 513 | graphics/pgf/base/doc/version-for-pdftex/en/plots/pgf-sin.table
-2020/12/01 | 513 | graphics/pgf/base/doc/version-for-dvisvgm/en/plots/pgf-sin.table
-2020/12/01 | 513 | graphics/pgf/base/doc/version-for-dvips/en/plots/pgf-sin.table
-2020/12/01 | 513 | graphics/pgf/base/doc/version-for-dvipdfm/en/plots/pgf-sin.table
-2020/12/01 | 513 | graphics/pgf/base/doc/text-en/plots/pgf-sin.table
-2020/12/01 | 5082 | graphics/pgf/base/lua/graphdrawing/pgf/gd/force/jedi/base/PathLengthsFW.lua
-2020/12/01 | 507 | graphics/pgf/base/doc/version-for-xetex/en/plots/pgf-x.table
-2020/12/01 | 507 | graphics/pgf/base/doc/version-for-xetex/en/plots/pgf-exp.table
-2020/12/01 | 507 | graphics/pgf/base/doc/version-for-vtex/en/plots/pgf-x.table
-2020/12/01 | 507 | graphics/pgf/base/doc/version-for-vtex/en/plots/pgf-exp.table
-2020/12/01 | 507 | graphics/pgf/base/doc/version-for-tex4ht/en/plots/pgf-x.table
-2020/12/01 | 507 | graphics/pgf/base/doc/version-for-tex4ht/en/plots/pgf-exp.table
-2020/12/01 | 507 | graphics/pgf/base/doc/version-for-pdftex/en/plots/pgf-x.table
-2020/12/01 | 507 | graphics/pgf/base/doc/version-for-pdftex/en/plots/pgf-exp.table
-2020/12/01 | 507 | graphics/pgf/base/doc/version-for-dvisvgm/en/plots/pgf-x.table
-2020/12/01 | 507 | graphics/pgf/base/doc/version-for-dvisvgm/en/plots/pgf-exp.table
-2020/12/01 | 507 | graphics/pgf/base/doc/version-for-dvips/en/plots/pgf-x.table
-2020/12/01 | 507 | graphics/pgf/base/doc/version-for-dvips/en/plots/pgf-exp.table
-2020/12/01 | 507 | graphics/pgf/base/doc/version-for-dvipdfm/en/plots/pgf-x.table
-2020/12/01 | 507 | graphics/pgf/base/doc/version-for-dvipdfm/en/plots/pgf-exp.table
-2020/12/01 | 507 | graphics/pgf/base/doc/text-en/plots/pgf-x.table
-2020/12/01 | 507 | graphics/pgf/base/doc/text-en/plots/pgf-exp.table
-2020/12/01 | 50671 | graphics/pgf/base/tex/pgfmanual.prettyprinter.code.tex
-2020/12/01 | 503 | graphics/pgf/base/tex/pgf.tex
-2020/12/01 | 50179 | graphics/pgf/base/doc/images/brave-gnu-world-logo.25.eps
-2020/12/01 | 499 | graphics/pgf/base/tex/pgflibrarysnakes.code.tex
-2020/12/01 | 496 | graphics/pgf/base/doc/version-for-luatex/pgfmanual-luatex.cfg
-2020/12/01 | 494 | graphics/pgf/base/tex/tikzlibraryshapes.code.tex
-2020/12/01 | 49471 | graphics/pgf/base/doc/text-en/pgfmanual-en-library-external.tex
-2020/12/01 | 493 | graphics/pgf/base/tex/pgflibrarygraphdrawing.trees.code.tex
-2020/12/01 | 4937 | graphics/pgf/base/lua/graphdrawing/pgf/gd/tools/make_gd_wrap.lua
-2020/12/01 | 491 | graphics/pgf/base/doc/version-for-dvipdfmx/pgfmanual-dvipdfmx.cfg
-2020/12/01 | 4919 | graphics/pgf/base/doc/text-en/pgfmanual-en-base-internalregisters.tex
-2020/12/01 | 490 | graphics/pgf/base/doc/version-for-pdftex/pgfmanual-pdftex.cfg
-2020/12/01 | 4883 | graphics/pgf/base/tex/pgfcorelayers.code.tex
-2020/12/01 | 4878 | graphics/pgf/base/tex/pgflibraryshapes.gates.ee.code.tex
-2020/12/01 | 4876 | graphics/pgf/base/doc/text-en/pgfmanual-en-gd-ogdf.tex
-2020/12/01 | 4865 | graphics/pgf/base/doc/text-en/pgfmanual-en-library-er.tex
-2020/12/01 | 485 | graphics/pgf/base/tex/pgfbasesnakes.tex
-2020/12/01 | 4855 | graphics/pgf/base/tex/pgflibrarydatavisualization.barcharts.code.tex
-2020/12/01 | 48091 | graphics/pgf/base/doc/text-en/pgfmanual-en-base-transformations.tex
-2020/12/01 | 475 | graphics/pgf/base/tex/tikzlibraryshapes.symbols.code.tex
-2020/12/01 | 475 | graphics/pgf/base/tex/pgfbaseshapes.tex
-2020/12/01 | 475 | graphics/pgf/base/tex/pgfbasematrix.tex
-2020/12/01 | 470 | graphics/pgf/base/doc/README
-2020/12/01 | 46825 | graphics/pgf/base/doc/text-en/pgfmanual-en-base-arrows.tex
-2020/12/01 | 467 | graphics/pgf/base/tex/pgfbaseplot.tex
-2020/12/01 | 465 | graphics/pgf/base/tex/pgf.revision.tex
-2020/12/01 | 462 | graphics/pgf/base/tex/pgfrcs.tex
-2020/12/01 | 46241 | graphics/pgf/base/tex/pgflibraryshapes.misc.code.tex
-2020/12/01 | 46142 | graphics/pgf/base/doc/text-en/pgfmanual-en-tutorial-chains.tex
-2020/12/01 | 4611 | graphics/pgf/base/lua/graphdrawing/pgf/gd/force/jedi/algorithms/SocialGravityCloseness.lua
-2020/12/01 | 458 | graphics/pgf/base/doc/version-for-dvisvgm/en/pgfmanual.tex
-2020/12/01 | 457 | graphics/pgf/base/tex/t-pgfbim.tex
-2020/12/01 | 4572 | graphics/pgf/base/tex/tikzlibrarybackgrounds.code.tex
-2020/12/01 | 456 | graphics/pgf/base/doc/version-for-dvipdfm/pgfmanual-dvipdfm.cfg
-2020/12/01 | 455 | graphics/pgf/base/doc/version-for-xetex/pgfmanual-xetex.cfg
-2020/12/01 | 45551 | graphics/pgf/base/doc/text-en/pgfmanual-en-library-rdf.tex
-2020/12/01 | 4513 | graphics/pgf/base/lua/graphdrawing/pgf/gd/layered.lua
-2020/12/01 | 450 | graphics/pgf/base/doc/version-for-dvipdfmx/en/pgfmanual.tex
-2020/12/01 | 449 | graphics/pgf/base/doc/version-for-dvipdfm/en/pgfmanual.tex
-2020/12/01 | 4494 | graphics/pgf/base/tex/pgfrcs.code.tex
-2020/12/01 | 448 | graphics/pgf/base/tex/tikz.tex
-2020/12/01 | 448 | graphics/pgf/base/doc/version-for-xetex/en/pgfmanual.tex
-2020/12/01 | 448 | graphics/pgf/base/doc/version-for-pdftex/en/pgfmanual.tex
-2020/12/01 | 448 | graphics/pgf/base/doc/version-for-dvips/en/pgfmanual.tex
-2020/12/01 | 447 | graphics/pgf/base/doc/version-for-vtex/en/pgfmanual.tex
-2020/12/01 | 4477 | graphics/pgf/base/lua/graphdrawing/pgf/gd/control/library.lua
-2020/12/01 | 4474 | graphics/pgf/base/doc/text-en/pgfmanual-en-math-design.tex
-2020/12/01 | 44571 | graphics/pgf/base/tex/pgflibraryintersections.code.tex
-2020/12/01 | 4445 | graphics/pgf/base/source/GEMLayout_script.h
-2020/12/01 | 443 | graphics/pgf/base/tex/pgfsys.sty
-2020/12/01 | 442 | graphics/pgf/base/lua/graphdrawing/pgf/gd/pedigrees/library.lua
-2020/12/01 | 44195 | graphics/pgf/base/tex/pgfcorepathconstruct.code.tex
-2020/12/01 | 4415 | graphics/pgf/base/source/InterfaceFromC++.h
-2020/12/01 | 440 | graphics/pgf/base/doc/version-for-tex4ht/en/pgfmanual.tex
-2020/12/01 | 4404 | graphics/pgf/base/lua/graphdrawing/pgf/gd/lib/Bezier.lua
-2020/12/01 | 43904 | graphics/pgf/base/doc/text-en/pgfmanual-en-tutorial-nodes.tex
-2020/12/01 | 438581 | macros/latex/contrib/hep-paper/hep-paper-documentation.pdf
-2020/12/01 | 43820 | graphics/pgf/base/tex/pgfcorearrows.code.tex
-2020/12/01 | 437 | graphics/pgf/base/tex/pgfarrows.sty
-2020/12/01 | 4375 | graphics/pgf/base/tex/tikzlibrarypetri.code.tex
-2020/12/01 | 4363 | graphics/pgf/base/lua/graphdrawing/pgf/gd/circular/doc.lua
-2020/12/01 | 435 | graphics/pgf/base/tex/pgfshade.sty
-2020/12/01 | 435 | graphics/pgf/base/tex/pgfbasepatterns.tex
-2020/12/01 | 43551 | graphics/pgf/base/doc/text-en/pgfmanual-en-base-decorations.tex
-2020/12/01 | 43539 | graphics/pgf/base/doc/text-en/pgfmanual-en-math-parsing.tex
-2020/12/01 | 434 | graphics/pgf/base/tex/pgfnodes.sty
-2020/12/01 | 432 | systems/texlive/tlnet/archive/lshort-italian.r57038.tar.xz
-2020/12/01 | 432 | graphics/pgf/base/tex/pgfmath.tex
-2020/12/01 | 432 | graphics/pgf/base/tex/pgfcore.tex
-2020/12/01 | 4326 | graphics/pgf/base/lua/graphdrawing/pgf/gd/planar/PlanarLayout.lua
-2020/12/01 | 43260 | graphics/pgf/base/tex/pgfmoduleshapes.code.tex
-2020/12/01 | 431 | graphics/pgf/base/tex/pgfbaselayers.tex
-2020/12/01 | 430 | graphics/pgf/base/tex/pgflibrarygraphdrawing.circular.code.tex
-2020/12/01 | 429 | graphics/pgf/base/tex/pgfbaseimage.tex
-2020/12/01 | 4294 | graphics/pgf/base/doc/text-en/pgfmanual-en-library-babel.tex
-2020/12/01 | 4285 | graphics/pgf/base/lua/graphdrawing/pgf/gd/control/ComponentDistance.lua
-2020/12/01 | 4253 | graphics/pgf/base/lua/graphdrawing/pgf/gd/layered/cycle_removal.lua
-2020/12/01 | 421 | graphics/pgf/base/doc/version-for-xetex/en/plots/pgfmanual-sine.table
-2020/12/01 | 421 | graphics/pgf/base/doc/version-for-vtex/en/plots/pgfmanual-sine.table
-2020/12/01 | 421 | graphics/pgf/base/doc/version-for-tex4ht/en/plots/pgfmanual-sine.table
-2020/12/01 | 421 | graphics/pgf/base/doc/version-for-pdftex/en/plots/pgfmanual-sine.table
-2020/12/01 | 421 | graphics/pgf/base/doc/version-for-dvisvgm/en/plots/pgfmanual-sine.table
-2020/12/01 | 421 | graphics/pgf/base/doc/version-for-dvips/en/plots/pgfmanual-sine.table
-2020/12/01 | 421 | graphics/pgf/base/doc/version-for-dvipdfmx/en/plots/pgfmanual-sine.table
-2020/12/01 | 421 | graphics/pgf/base/doc/version-for-dvipdfm/en/plots/pgfmanual-sine.table
-2020/12/01 | 421 | graphics/pgf/base/doc/text-en/plots/pgfmanual-sine.table
-2020/12/01 | 4202 | graphics/pgf/base/tex/tikzlibrarymatrix.code.tex
-2020/12/01 | 417 | graphics/pgf/base/doc/version-for-vtex/pgfmanual-vtex.cfg
-2020/12/01 | 4177 | graphics/pgf/base/tex/tikzlibrarycircuits.ee.code.tex
-2020/12/01 | 416 | graphics/pgf/base/tex/pgflibraryplothandlers.sty
-2020/12/01 | 415 | graphics/pgf/base/tex/pgflibrarytikzbackgrounds.sty
-2020/12/01 | 4156 | graphics/pgf/base/lua/graphdrawing/pgf/gd/circular/Tantau2012.lua
-2020/12/01 | 4151 | graphics/pgf/base/lua/graphdrawing/pgf/gd/doc/ogdf/energybased/GEMLayout.lua
-2020/12/01 | 414 | graphics/pgf/base/tex/tikzlibrarydatavisualization.formats.functions.code.tex
-2020/12/01 | 411 | graphics/pgf/base/tex/pgflibraryautomata.sty
-2020/12/01 | 41155 | graphics/pgf/base/doc/text-en/pgfmanual-en-base-scopes.tex
-2020/12/01 | 41150 | graphics/pgf/base/source/pgfmathtestsuite.tex
-2020/12/01 | 410 | graphics/pgf/base/tex/tikzlibraryshapes.arrows.code.tex
-2020/12/01 | 410 | graphics/pgf/base/tex/pgflibraryplotmarks.sty
-2020/12/01 | 410 | graphics/pgf/base/tex/pgfcore.sty
-2020/12/01 | 4100 | graphics/pgf/base/tex/tikzlibraryexternal.code.tex
-2020/12/01 | 4099 | graphics/pgf/base/lua/graphdrawing/pgf/gd/control/FineTune.lua
-2020/12/01 | 4076 | graphics/pgf/base/lua/graphdrawing/pgf/gd/force/jedi/base/Preprocessing.lua
-2020/12/01 | 4073 | graphics/pgf/base/lua/graphdrawing/pgf/gd/doc/ogdf/energybased/FMMMLayout.lua
-2020/12/01 | 4070 | graphics/pgf/base/tex/tikzlibraryspy.code.tex
-2020/12/01 | 405 | graphics/pgf/base/tex/pgflibraryshapes.sty
-2020/12/01 | 4051 | graphics/pgf/base/doc/text-en/pgfmanual-en-library-angles.tex
-2020/12/01 | 404 | graphics/pgf/base/tex/t-pgfbsn.tex
-2020/12/01 | 404 | graphics/pgf/base/tex/pgflibrarysnakes.sty
-2020/12/01 | 403 | graphics/pgf/base/tex/pgflibraryarrows.sty
-2020/12/01 | 402 | graphics/pgf/base/lua/graphdrawing/pgf/gd/layered/EdgeRoutingGansnerKNV1993.lua
-2020/12/01 | 400 | graphics/pgf/base/tex/pgflibrarytikztrees.sty
-2020/12/01 | 3998 | graphics/pgf/base/doc/version-for-luatex/en/plots/pgf-asymptotic-example.table
-2020/12/01 | 3998 | graphics/pgf/base/doc/version-for-dvipdfmx/en/plots/pgf-asymptotic-example.table
-2020/12/01 | 398 | graphics/pgf/base/tex/pgfbasesnakes.sty
-2020/12/01 | 3986 | graphics/pgf/base/tex/tikzlibraryautomata.code.tex
-2020/12/01 | 3969 | graphics/pgf/base/lua/graphdrawing/pgf/gd/doc/ogdf/layered/SugiyamaLayout.lua
-2020/12/01 | 3968 | graphics/pgf/base/doc/text-en/pgfmanual-en-library-turtle.tex
-2020/12/01 | 39636 | graphics/pgf/base/tex/pgfmoduleanimations.code.tex
-2020/12/01 | 394 | graphics/pgf/base/lua/graphdrawing/pgf/gd/interface.lua
-2020/12/01 | 393 | graphics/pgf/base/tex/t-pgfbsh.tex
-2020/12/01 | 393 | graphics/pgf/base/tex/t-pgfbma.tex
-2020/12/01 | 393 | graphics/pgf/base/tex/pgffor.tex
-2020/12/01 | 3937 | graphics/pgf/base/tex/tikzlibrarypositioning.code.tex
-2020/12/01 | 3937 | graphics/pgf/base/lua/graphdrawing/pgf/gd/force/jedi/algorithms/FruchtermanReingold.lua
-2020/12/01 | 39378 | graphics/pgf/base/lua/graphdrawing/pgf/gd/control/LayoutPipeline.lua
-2020/12/01 | 3931 | graphics/pgf/base/tex/tikzlibraryquotes.code.tex
-2020/12/01 | 392 | graphics/pgf/base/lua/graphdrawing/pgf/gd/examples.lua
-2020/12/01 | 392 | graphics/pgf/base/lua/graphdrawing/pgf/gd/bindings.lua
-2020/12/01 | 3928 | graphics/pgf/base/doc/version-for-xetex/en/plots/pgf-asymptotic-example.table
-2020/12/01 | 3928 | graphics/pgf/base/doc/version-for-vtex/en/plots/pgf-asymptotic-example.table
-2020/12/01 | 3928 | graphics/pgf/base/doc/version-for-tex4ht/en/plots/pgf-asymptotic-example.table
-2020/12/01 | 3928 | graphics/pgf/base/doc/version-for-pdftex/en/plots/pgf-asymptotic-example.table
-2020/12/01 | 3928 | graphics/pgf/base/doc/version-for-dvisvgm/en/plots/pgf-asymptotic-example.table
-2020/12/01 | 3928 | graphics/pgf/base/doc/version-for-dvips/en/plots/pgf-asymptotic-example.table
-2020/12/01 | 3928 | graphics/pgf/base/doc/version-for-dvipdfm/en/plots/pgf-asymptotic-example.table
-2020/12/01 | 3928 | graphics/pgf/base/doc/text-en/plots/pgf-asymptotic-example.table
-2020/12/01 | 3905 | graphics/pgf/base/doc/text-en/pgfmanual-en-library-plot-marks.tex
-2020/12/01 | 389 | graphics/pgf/base/lua/graphdrawing/pgf/gd/control.lua
-2020/12/01 | 388 | graphics/pgf/base/tex/t-pgfbpl.tex
-2020/12/01 | 388 | graphics/pgf/base/tex/pgfbaseshapes.sty
-2020/12/01 | 388 | graphics/pgf/base/tex/pgfbasematrix.sty
-2020/12/01 | 388 | graphics/pgf/base/lua/graphdrawing/pgf/gd/phylogenetics.lua
-2020/12/01 | 386 | graphics/pgf/base/lua/graphdrawing/pgf/gd/model.lua
-2020/12/01 | 386 | graphics/pgf/base/lua/graphdrawing/pgf/gd/force.lua
-2020/12/01 | 3869 | graphics/pgf/base/lua/graphdrawing/pgf/gd/layered/library.lua
-2020/12/01 | 3865 | graphics/pgf/base/tex/pgfmathfunctions.comparison.code.tex
-2020/12/01 | 384 | graphics/pgf/base/tex/pgfcalendar.tex
-2020/12/01 | 384 | graphics/pgf/base/tex/pgfbaseplot.sty
-2020/12/01 | 384 | graphics/pgf/base/lua/graphdrawing/pgf/gd/ogdf.lua
-2020/12/01 | 38364 | graphics/pgf/base/doc/text-en/pgfmanual-en-library-calendar.tex
-2020/12/01 | 380 | graphics/pgf/base/tex/tikzlibrarybabel.code.tex
-2020/12/01 | 378 | graphics/pgf/base/lua/graphdrawing/pgf/gd/circular.lua
-2020/12/01 | 376 | graphics/pgf/base/lua/graphdrawing/pgf/gd/pedigrees.lua
-2020/12/01 | 374 | graphics/pgf/base/lua/graphdrawing/pgf/gd/routing.lua
-2020/12/01 | 37431 | graphics/pgf/base/tex/pgfkeysfiltered.code.tex
-2020/12/01 | 37424 | graphics/pgf/base/doc/text-en/pgfmanual-en-tikz-transparency.tex
-2020/12/01 | 37376 | graphics/pgf/base/tex/pgfmathparser.code.tex
-2020/12/01 | 372 | graphics/pgf/base/tex/pgfkeys.tex
-2020/12/01 | 372 | graphics/pgf/base/doc/text-en/pgfmanual-en-main.tex
-2020/12/01 | 3727 | graphics/pgf/base/tex/pgfpict2e.sty
-2020/12/01 | 3706 | graphics/pgf/base/lua/graphdrawing/pgf/gd/examples/SimpleEdgeDemo.lua
-2020/12/01 | 36938 | graphics/pgf/base/tex/pgfkeys.code.tex
-2020/12/01 | 368 | graphics/pgf/base/tex/pgflibrarygraphdrawing.layered.code.tex
-2020/12/01 | 367 | graphics/pgf/base/doc/version-for-dvips/pgfmanual-dvips.cfg
-2020/12/01 | 366 | graphics/pgf/base/tex/pgflibrarygraphdrawing.examples.code.tex
-2020/12/01 | 3653384 | systems/texlive/tlnet/archive/lshort-italian.doc.r57038.tar.xz
-2020/12/01 | 364 | graphics/pgf/base/lua/graphdrawing/pgf/gd/trees.lua
-2020/12/01 | 3648 | graphics/pgf/base/doc/text-en/pgfmanual-en-xxcolor.tex
-2020/12/01 | 3643 | graphics/pgf/base/tex/tikzlibraryfit.code.tex
-2020/12/01 | 3640 | graphics/pgf/base/lua/graphdrawing/pgf/gd/layered/NodePositioningGansnerKNV1993.lua
-2020/12/01 | 36299 | graphics/pgf/base/tex/pgfpages.sty
-2020/12/01 | 3614 | graphics/pgf/base/tex/tikzlibraryangles.code.tex
-2020/12/01 | 35 | graphics/pgf/base/doc/version-for-dvisvgm/en/color.cfg
-2020/12/01 | 3594 | graphics/pgf/base/tex/pgflibraryshapes.gates.logic.code.tex
-2020/12/01 | 3583 | graphics/pgf/base/doc/version-for-tex4ht/pgfmanual-tex4ht.cfg
-2020/12/01 | 357 | graphics/pgf/base/lua/graphdrawing/pgf/gd/doc/ogdf/module/TwoLayerCrossMin.lua
-2020/12/01 | 357 | graphics/pgf/base/lua/graphdrawing/pgf/gd/doc/ogdf/misclayout.lua
-2020/12/01 | 3574 | graphics/pgf/base/lua/graphdrawing/pgf/gd/doc.lua
-2020/12/01 | 3544 | graphics/pgf/base/tex/tikzlibraryperspective.code.tex
-2020/12/01 | 3534 | graphics/pgf/base/lua/graphdrawing/pgf/gd/force/ControlIteration.lua
-2020/12/01 | 352 | graphics/pgf/base/lua/graphdrawing/pgf/gd/doc/ogdf/layered.lua
-2020/12/01 | 35298 | graphics/pgf/base/doc/text-en/pgfmanual-en-gd-algorithm-layer.tex
-2020/12/01 | 35249 | graphics/pgf/base/tex/pgfcoreshade.code.tex
-2020/12/01 | 351 | graphics/pgf/base/tex/t-pgfbpt.tex
-2020/12/01 | 351 | graphics/pgf/base/lua/graphdrawing/pgf/gd/doc/ogdf/planarity.lua
-2020/12/01 | 350 | graphics/pgf/base/lua/graphdrawing/pgf/gd/doc/ogdf/module/AcyclicSubgraphModule.lua
-2020/12/01 | 349 | graphics/pgf/base/tex/t-pgfbla.tex
-2020/12/01 | 34987 | graphics/pgf/base/doc/text-en/pgfmanual-en-gd-algorithms-in-c.tex
-2020/12/01 | 34957 | graphics/pgf/base/tex/pgflibrarygraphdrawing.code.tex
-2020/12/01 | 3493 | graphics/pgf/base/lua/graphdrawing/pgf/gd/lib/Event.lua
-2020/12/01 | 348 | graphics/pgf/base/tex/pgffor.sty
-2020/12/01 | 3473 | graphics/pgf/base/doc/text-en/pgfmanual-en-pgfsys-protocol.tex
-2020/12/01 | 346 | graphics/pgf/base/doc/text-en/pgfmanual-en-gd-examples.tex
-2020/12/01 | 3466 | graphics/pgf/base/lua/graphdrawing/pgf/gd/layered/NodeRankingGansnerKNV1993.lua
-2020/12/01 | 345 | graphics/pgf/base/tex/tikzlibrarybending.code.tex
-2020/12/01 | 344 | graphics/pgf/base/tex/pgfbasepatterns.sty
-2020/12/01 | 344 | graphics/pgf/base/tex/pgfbaselayers.sty
-2020/12/01 | 344 | graphics/pgf/base/tex/pgfbaseimage.sty
-2020/12/01 | 344 | graphics/pgf/base/lua/graphdrawing/pgf/gd/doc/ogdf/module/MultilevelBuilder.lua
-2020/12/01 | 34338 | graphics/pgf/base/doc/text-en/pgfmanual-en-gd-usage-pgf.tex
-2020/12/01 | 342 | graphics/pgf/base/lua/graphdrawing/pgf/gd/doc/ogdf/module/HierarchyLayoutModule.lua
-2020/12/01 | 3427007 | fonts/scholax.zip
-2020/12/01 | 340 | graphics/pgf/base/lua/graphdrawing/pgf/gd/doc/ogdf/module/InitialPlacer.lua
-2020/12/01 | 34020 | graphics/pgf/base/lua/graphdrawing/pgf/gd/interface/InterfaceToAlgorithms.lua
-2020/12/01 | 339 | graphics/pgf/base/tex/tikz.sty
-2020/12/01 | 339 | graphics/pgf/base/tex/tikzlibraryshapes.geometric.code.tex
-2020/12/01 | 3397 | graphics/pgf/base/tex/pgflibrarygraphdrawing.force.code.tex
-2020/12/01 | 33851 | graphics/pgf/base/doc/text-en/pgfmanual-en-dv-main.tex
-2020/12/01 | 337 | graphics/pgf/base/lua/graphdrawing/pgf/gd/doc/ogdf/energybased.lua
-2020/12/01 | 3379 | graphics/pgf/base/tex/pgfmathfunctions.round.code.tex
-2020/12/01 | 33646 | graphics/pgf/base/lua/graphdrawing/pgf/gd/model/Path.lua
-2020/12/01 | 3360 | graphics/pgf/base/tex/tikzlibrarytrees.code.tex
-2020/12/01 | 33432 | graphics/pgf/base/tex/tikzlibraryanimations.code.tex
-2020/12/01 | 333 | graphics/pgf/base/lua/graphdrawing/pgf/gd/doc/ogdf/module/RankingModule.lua
-2020/12/01 | 33336 | graphics/pgf/base/tex/pgflibraryshapes.callouts.code.tex
-2020/12/01 | 33335 | graphics/pgf/base/tex/pgfcorepoints.code.tex
-2020/12/01 | 332 | graphics/pgf/base/tex/pgfparser.sty
-2020/12/01 | 332 | graphics/pgf/base/tex/pgfmanual.sty
-2020/12/01 | 331 | graphics/pgf/base/tex/tikzlibraryplothandlers.code.tex
-2020/12/01 | 331 | graphics/pgf/base/lua/graphdrawing/pgf/gd/model/library.lua
-2020/12/01 | 329 | graphics/pgf/base/tex/tikzlibraryshapes.misc.code.tex
-2020/12/01 | 32995 | graphics/pgf/base/tex/pgflibraryplothandlers.code.tex
-2020/12/01 | 3294 | graphics/pgf/base/lua/graphdrawing/pgf/gd/force/jedi/forcetypes/ForcePullToGrid.lua
-2020/12/01 | 32926 | graphics/pgf/base/doc/text-en/pgfmanual-en-base-paths.tex
-2020/12/01 | 328 | graphics/pgf/base/tex/pgfcalendar.sty
-2020/12/01 | 32766 | graphics/pgf/base/doc/text-en/pgfmanual-en-tikz-matrices.tex
-2020/12/01 | 325 | graphics/pgf/base/tex/tikzlibraryplotmarks.code.tex
-2020/12/01 | 325 | graphics/pgf/base/tex/pgfrcs.sty
-2020/12/01 | 3243 | graphics/pgf/base/tex/tikzlibrary3d.code.tex
-2020/12/01 | 321 | graphics/pgf/base/tex/tikzlibrarydecorations.pathmorphing.code.tex
-2020/12/01 | 321 | graphics/pgf/base/doc/INSTALL
-2020/12/01 | 3216 | graphics/pgf/base/lua/graphdrawing/pgf/gd/experimental/evolving/doc.lua
-2020/12/01 | 32095 | graphics/pgf/base/doc/text-en/pgfmanual-en-tikz-trees.tex
-2020/12/01 | 319 | graphics/pgf/base/tex/tikzlibrarydecorations.footprints.code.tex
-2020/12/01 | 319 | graphics/pgf/base/tex/tikzlibraryarrows.code.tex
-2020/12/01 | 31877 | graphics/pgf/base/doc/text-en/pgfmanual-en-guidelines.tex
-2020/12/01 | 31874 | graphics/pgf/base/tex/pgflibraryarrows.code.tex
-2020/12/01 | 3183 | graphics/pgf/base/lua/graphdrawing/pgf/gd/routing/Hints.lua
-2020/12/01 | 317 | graphics/pgf/base/tex/tikzlibrarydecorations.fractals.code.tex
-2020/12/01 | 3177 | graphics/pgf/base/tex/pgfmathfunctions.integerarithmetics.code.tex
-2020/12/01 | 31708 | graphics/pgf/base/doc/text-en/pgfmanual-en-base-shadings.tex
-2020/12/01 | 315 | graphics/pgf/base/tex/tikzlibrarydecorations.shapes.code.tex
-2020/12/01 | 3159 | graphics/pgf/base/lua/graphdrawing/pgf/gd/lib/Storage.lua
-2020/12/01 | 3150 | graphics/pgf/base/lua/graphdrawing/pgf/gd/layered/crossing_minimization.lua
-2020/12/01 | 3134 | graphics/pgf/base/lua/graphdrawing/pgf/gd/interface/Scope.lua
-2020/12/01 | 31195 | graphics/pgf/base/doc/text-en/pgfmanual-en-math-numberprinting.tex
-2020/12/01 | 3107 | graphics/pgf/base/lua/graphdrawing/pgf/gd/planar/ShiftMethod.lua
-2020/12/01 | 31025 | graphics/pgf/base/lua/graphdrawing/pgf/gd/interface/InterfaceToDisplay.lua
-2020/12/01 | 3096 | graphics/pgf/base/lua/graphdrawing/pgf/gd/layered/CycleRemovalEadesLS1993.lua
-2020/12/01 | 3081 | graphics/pgf/base/lua/graphdrawing/pgf/gd/force/ControlElectric.lua
-2020/12/01 | 30763 | graphics/pgf/base/doc/text-en/pgfmanual-en-tikz-plots.tex
-2020/12/01 | 306 | graphics/pgf/base/tex/pgfmath.sty
-2020/12/01 | 3063 | graphics/pgf/base/tex/pgfint.code.tex
-2020/12/01 | 3057 | graphics/pgf/base/lua/graphdrawing/pgf/gd/force/jedi/forcetypes/ForceCanvasPosition.lua
-2020/12/01 | 3056 | graphics/pgf/base/lua/graphdrawing/pgf/gd/force/jedi/forcetypes/ForcePullToPoint.lua
-2020/12/01 | 3036 | graphics/pgf/base/tex/tikzlibrarypatterns.meta.code.tex
-2020/12/01 | 3034 | graphics/pgf/base/lua/graphdrawing/pgf/gd/planar/parameters.lua
-2020/12/01 | 302 | graphics/pgf/base/source/misclayout_script.h
-2020/12/01 | 301 | graphics/pgf/base/doc/RELEASE_NOTES.md
-2020/12/01 | 3013 | graphics/pgf/base/lua/graphdrawing/pgf/gd/pedigrees/Koerner2015.lua
-2020/12/01 | 29754 | graphics/pgf/base/tex/tikzlibrarydecorations.text.code.tex
-2020/12/01 | 2968 | graphics/pgf/base/lua/graphdrawing/pgf/gd/force/jedi/algorithms/HuSpringElectricalFW.lua
-2020/12/01 | 2965 | graphics/pgf/base/tex/pgfcorequick.code.tex
-2020/12/01 | 2964 | graphics/pgf/base/lua/graphdrawing/pgf/gd/doc/ogdf/layered/FastHierarchyLayout.lua
-2020/12/01 | 29582 | graphics/pgf/base/source/InterfaceFromC.c
-2020/12/01 | 2926 | graphics/pgf/base/tex/pgfsys-xetex.def
-2020/12/01 | 2926 | graphics/pgf/base/doc/text-en/pgfmanual-en-pgfsys-overview.tex
-2020/12/01 | 2919 | graphics/pgf/base/tex/tikzlibrarydatavisualization.3d.code.tex
-2020/12/01 | 2889 | graphics/pgf/base/tex/tikzlibraryshadows.code.tex
-2020/12/01 | 28891 | graphics/pgf/base/doc/text-en/pgfmanual-en-oo.tex
-2020/12/01 | 28872 | graphics/pgf/base/doc/text-en/pgfmanual-en-dv-visualizers.tex
-2020/12/01 | 28852 | graphics/pgf/base/lua/graphdrawing/pgf/gd/experimental/evolving/Skambath2016.lua
-2020/12/01 | 2866 | graphics/pgf/base/tex/tikzlibrarylindenmayersystems.code.tex
-2020/12/01 | 28643 | graphics/pgf/base/doc/text-en/pgfmanual-en-main-body.tex
-2020/12/01 | 2861 | graphics/pgf/base/lua/graphdrawing/pgf/gd/experimental/evolving/layered.lua
-2020/12/01 | 28579 | graphics/pgf/base/tex/pgfutil-common.tex
-2020/12/01 | 283 | graphics/pgf/base/tex/tikzlibraryfpu.code.tex
-2020/12/01 | 28178 | graphics/pgf/base/tex/pgfmathfunctions.basic.code.tex
-2020/12/01 | 28115 | graphics/pgf/base/doc/text-en/pgfmanual-en-tutorial-Euclid.tex
-2020/12/01 | 2804 | graphics/pgf/base/lua/graphdrawing/pgf/gd/doc/ogdf/layered/FastSimpleHierarchyLayout.lua
-2020/12/01 | 2790 | graphics/pgf/base/lua/graphdrawing/pgf/gd/lib/Direct.lua
-2020/12/01 | 2774 | graphics/pgf/base/lua/graphdrawing/pgf/gd/lib/Transform.lua
-2020/12/01 | 276 | graphics/pgf/base/tex/tikzlibraryfixedpointarithmetic.code.tex
-2020/12/01 | 2763 | graphics/pgf/base/tex/pgfsys-textures.def
-2020/12/01 | 2758 | graphics/pgf/base/tex/pgfsys-vtex.def
-2020/12/01 | 2757 | graphics/pgf/base/lua/graphdrawing/pgf/gd/control/ComponentOrder.lua
-2020/12/01 | 274 | graphics/pgf/base/tex/pgfkeys.sty
-2020/12/01 | 274109 | graphics/pgf/base/doc/images/brave-gnu-world-logo-mask.eps
-2020/12/01 | 2739 | graphics/pgf/base/tex/pgflibrarydecorations.fractals.code.tex
-2020/12/01 | 27353 | graphics/pgf/base/doc/text-en/pgfmanual-en-library-fpu.tex
-2020/12/01 | 2732 | graphics/pgf/base/tex/tikzlibrarysnakes.code.tex
-2020/12/01 | 27253 | graphics/pgf/base/doc/text-en/pgfmanual-en-pages.tex
-2020/12/01 | 27080 | graphics/pgf/base/tex/pgfmoduleoo.code.tex
-2020/12/01 | 26872 | graphics/pgf/base/doc/text-en/pgfmanual-en-dv-formats.tex
-2020/12/01 | 2668 | graphics/pgf/base/lua/graphdrawing/pgf/gd/control/Anchoring.lua
-2020/12/01 | 26467 | graphics/pgf/base/lua/graphdrawing/pgf/gd/model/Digraph.lua
-2020/12/01 | 262 | graphics/pgf/base/tex/example_graph_for_ascii_displayer.txt
-2020/12/01 | 2627 | graphics/pgf/base/tex/pgfsys-dvipdfm.def
-2020/12/01 | 2616 | graphics/pgf/base/doc/text-en/pgfmanual-en-dv-examples.tex
-2020/12/01 | 260 | graphics/pgf/base/doc/images/brave-gnu-world-logo.xbb
-2020/12/01 | 2576 | graphics/pgf/base/tex/tikzlibrarygraphs.standard.code.tex
-2020/12/01 | 2571 | graphics/pgf/base/lua/graphdrawing/pgf/gd/deprecated/Iterators.lua
-2020/12/01 | 2563 | graphics/pgf/base/tex/pgflibraryfadings.code.tex
-2020/12/01 | 255 | graphics/pgf/base/source/tikzexternaltestmakefile.tex
-2020/12/01 | 2556 | graphics/pgf/base/source/SpringEmbedderFRExact_script.h
-2020/12/01 | 25517 | graphics/pgf/base/tex/tikzlibrarymath.code.tex
-2020/12/01 | 2549 | graphics/pgf/base/lua/graphdrawing/pgf/gd/doc/ogdf/misclayout/CircularLayout.lua
-2020/12/01 | 2544 | graphics/pgf/base/tex/pgfmanual.code.tex
-2020/12/01 | 2544 | graphics/pgf/base/tex/pgfcoreobjects.code.tex
-2020/12/01 | 2541 | graphics/pgf/base/lua/graphdrawing/pgf/gd/force/jedi/forcetypes/ForceAbsoluteValue.lua
-2020/12/01 | 2540 | graphics/pgf/base/lua/graphdrawing/pgf/gd/lib/LookupTable.lua
-2020/12/01 | 251 | graphics/pgf/base/source/tikzexternaltest.tex
-2020/12/01 | 2505 | graphics/pgf/base/source/InterfaceFromOGDF.c++
-2020/12/01 | 24998 | graphics/pgf/base/lua/graphdrawing/pgf/gd/phylogenetics/Maeusle2012.lua
-2020/12/01 | 24941 | graphics/pgf/base/doc/text-en/pgfmanual-en-tikz-scopes.tex
-2020/12/01 | 2488 | graphics/pgf/base/lua/graphdrawing/pgf/gd/force/jedi/library.lua
-2020/12/01 | 2479 | graphics/pgf/base/lua/graphdrawing/pgf/gd/routing/NecklaceRouting.lua
-2020/12/01 | 24742 | graphics/pgf/base/tex/pgflibrarysvg.path.code.tex
-2020/12/01 | 2472 | graphics/pgf/base/lua/graphdrawing/pgf/gd/interface/InterfaceToC.lua
-2020/12/01 | 2463 | graphics/pgf/base/lua/graphdrawing/pgf/gd/force/jedi/algorithms/SimpleSpring.lua
-2020/12/01 | 24617 | graphics/pgf/base/tex/pgflibraryshapes.gates.logic.IEC.code.tex
-2020/12/01 | 2439 | graphics/pgf/base/doc/text-en/pgfmanual-en-gd-phylogenetics.tex
-2020/12/01 | 24091 | graphics/pgf/base/tex/pgfcalendar.code.tex
-2020/12/01 | 23997 | graphics/pgf/base/tex/pgffor.code.tex
-2020/12/01 | 23888 | graphics/pgf/base/doc/text-en/pgfmanual-en-tikz-pics.tex
-2020/12/01 | 23778 | graphics/pgf/base/source/InterfaceFromC.h
-2020/12/01 | 23738 | graphics/pgf/base/tex/pgfsys-dvips.def
-2020/12/01 | 23635 | graphics/pgf/base/doc/text-en/pgfmanual-en-tikz-decorations.tex
-2020/12/01 | 235 | graphics/pgf/base/source/planarity_script.h
-2020/12/01 | 2351 | graphics/pgf/base/lua/graphdrawing/pgf/gd/examples/SimpleDemo.lua
-2020/12/01 | 23492 | graphics/pgf/base/doc/text-en/pgfmanual-en-base-points.tex
-2020/12/01 | 23458 | graphics/pgf/base/doc/text-en/pgfmanual-en-base-plots.tex
-2020/12/01 | 233 | graphics/pgf/base/doc/version-for-dvisvgm/en/pgfmanual.html
-2020/12/01 | 23159 | graphics/pgf/base/doc/text-en/pgfmanual-en-library-plot-handlers.tex
-2020/12/01 | 22936 | graphics/pgf/base/lua/graphdrawing/pgf/gd/force/SpringElectricalHu2006.lua
-2020/12/01 | 2291 | graphics/pgf/base/lua/graphdrawing/pgf/gd/doc/ogdf/energybased/SpringEmbedderKK.lua
-2020/12/01 | 22892 | graphics/pgf/base/tex/pgflibraryshapes.gates.ee.IEC.code.tex
-2020/12/01 | 2288 | graphics/pgf/base/lua/graphdrawing/pgf/gd/phylogenetics/PhylogeneticTree.lua
-2020/12/01 | 2282 | graphics/pgf/base/lua/graphdrawing/pgf/gd/lib/DepthFirstSearch.lua
-2020/12/01 | 225 | graphics/pgf/base/doc/text-en/pgfmanual-en-library-calc.tex
-2020/12/01 | 2238 | graphics/pgf/base/source/FastMultipoleEmbedder_script.h
-2020/12/01 | 2232 | graphics/pgf/base/tex/xxcolor.sty
-2020/12/01 | 22307 | graphics/pgf/base/lua/graphdrawing/pgf/gd/planar/BoyerMyrvold2004.lua
-2020/12/01 | 2224 | graphics/pgf/base/lua/graphdrawing/pgf/gd/doc/ogdf/planarity/PlanarizationLayout.lua
-2020/12/01 | 22211 | graphics/pgf/base/tex/pgfsys-common-postscript.def
-2020/12/01 | 2220 | graphics/pgf/base/tex/pgfheaps.sty
-2020/12/01 | 22123 | graphics/pgf/base/tex/pgflibraryluamath.code.tex
-2020/12/01 | 22072 | graphics/pgf/base/doc/text-en/pgfmanual-en-gd-usage-tikz.tex
-2020/12/01 | 22045 | graphics/pgf/base/lua/graphdrawing/pgf/gd/layered/NetworkSimplex.lua
-2020/12/01 | 21989 | graphics/pgf/base/tex/pgfcoretransformations.code.tex
-2020/12/01 | 21933 | graphics/pgf/base/doc/text-en/pgfmanual-en-pgfcalendar.tex
-2020/12/01 | 21856 | graphics/pgf/base/doc/text-en/pgfmanual-en-pgfkeysfiltered.tex
-2020/12/01 | 2184 | graphics/pgf/base/tex/tikzlibraryturtle.code.tex
-2020/12/01 | 2161 | graphics/pgf/base/doc/text-en/pgfmanual-en-library-svg-path.tex
-2020/12/01 | 2152 | graphics/pgf/base/lua/graphdrawing/pgf/gd/doc/ogdf/energybased/SpringEmbedderFRExact.lua
-2020/12/01 | 21452 | graphics/pgf/base/doc/text-en/pgfmanual-en-drivers.tex
-2020/12/01 | 21326 | graphics/pgf/base/lua/graphdrawing/pgf/gd/experimental/evolving/GraphAnimationCoordination.lua
-2020/12/01 | 21302 | graphics/pgf/base/tex/pgfcorepathusage.code.tex
-2020/12/01 | 21201 | graphics/pgf/base/tex/pgfmodulematrix.code.tex
-2020/12/01 | 2108 | graphics/pgf/base/tex/tikzlibrarycircuits.logic.IEC.code.tex
-2020/12/01 | 21068 | graphics/pgf/base/doc/text-en/pgfmanual-en-library-mindmaps.tex
-2020/12/01 | 21013 | graphics/pgf/base/tex/pgfcomp-version-0-65.sty
-2020/12/01 | 21005 | graphics/pgf/base/lua/graphdrawing/pgf/gd/model/Arc.lua
-2020/12/01 | 2095 | graphics/pgf/base/README
-2020/12/01 | 20726 | graphics/pgf/base/tex/pgfcorescopes.code.tex
-2020/12/01 | 2070 | graphics/pgf/base/doc/version-for-luatex/en/plots/pgf-tan-example.table
-2020/12/01 | 2070 | graphics/pgf/base/doc/version-for-dvipdfmx/en/plots/pgf-tan-example.table
-2020/12/01 | 20502 | graphics/pgf/base/tex/tikzlibrarydatavisualization.polar.code.tex
-2020/12/01 | 20474 | graphics/pgf/base/doc/text-en/pgfmanual-en-base-external.tex
-2020/12/01 | 2044 | graphics/pgf/base/doc/version-for-xetex/en/plots/pgf-tan-example.table
-2020/12/01 | 2044 | graphics/pgf/base/doc/version-for-pdftex/en/plots/pgf-tan-example.table
-2020/12/01 | 2044 | graphics/pgf/base/doc/version-for-dvisvgm/en/plots/pgf-tan-example.table
-2020/12/01 | 2044 | graphics/pgf/base/doc/version-for-dvips/en/plots/pgf-tan-example.table
-2020/12/01 | 2044 | graphics/pgf/base/doc/version-for-dvipdfm/en/plots/pgf-tan-example.table
-2020/12/01 | 2044 | graphics/pgf/base/doc/text-en/plots/pgf-tan-example.table
-2020/12/01 | 20415 | graphics/pgf/base/doc/licenses/gnu-free-documentation-license-1.2.txt
-2020/12/01 | 20414 | macros/latex/contrib/hep-paper/bibliography.bib
-2020/12/01 | 20330 | graphics/pgf/base/doc/text-en/pgfmanual-en-library-patterns.tex
-2020/12/01 | 20166 | graphics/pgf/base/tex/pgflibraryprofiler.code.tex
-2020/12/01 | 1 | graphics/pgf/base/doc/CTAN_NOTES.md
-2020/12/01 | 1997 | graphics/pgf/base/lua/graphdrawing/pgf/gd/doc/ogdf/layered/LongestPathRanking.lua
-2020/12/01 | 19862 | graphics/pgf/base/doc/text-en/pgfmanual-en-tikz-transformations.tex
-2020/12/01 | 19835 | graphics/pgf/base/doc/text-en/pgfmanual-en-library-chains.tex
-2020/12/01 | 19781 | graphics/pgf/base/lua/graphdrawing/pgf/gd/planar/Embedding.lua
-2020/12/01 | 1977 | graphics/pgf/base/doc/version-for-luatex/en/plots/pgfplotgnuplot-example.table
-2020/12/01 | 1977 | graphics/pgf/base/doc/version-for-dvipdfmx/en/plots/pgfplotgnuplot-example.table
-2020/12/01 | 19702 | graphics/pgf/base/doc/text-en/pgfmanual-en-library-spy.tex
-2020/12/01 | 19618 | graphics/pgf/base/lua/graphdrawing/pgf/gd/phylogenetics/BalancedMinimumEvolution.lua
-2020/12/01 | 19581 | graphics/pgf/base/tex/pgfmoduleparser.code.tex
-2020/12/01 | 1952 | graphics/pgf/base/lua/graphdrawing/pgf/gd/layered/CycleRemovalBergerS1990b.lua
-2020/12/01 | 19512 | graphics/pgf/base/lua/graphdrawing/pgf/gd/force/SpringElectricalWalshaw2000.lua
-2020/12/01 | 1945 | graphics/pgf/base/lua/graphdrawing/pgf/gd/force/ControlSprings.lua
-2020/12/01 | 1944 | graphics/pgf/base/lua/graphdrawing/pgf/gd/force/jedi/initialpositioning/CircularInitialPositioning.lua
-2020/12/01 | 1944 | graphics/pgf/base/doc/version-for-xetex/en/plots/pgfplotgnuplot-example.table
-2020/12/01 | 1944 | graphics/pgf/base/doc/version-for-vtex/en/plots/pgfplotgnuplot-example.table
-2020/12/01 | 1944 | graphics/pgf/base/doc/version-for-tex4ht/en/plots/pgfplotgnuplot-example.table
-2020/12/01 | 1944 | graphics/pgf/base/doc/version-for-pdftex/en/plots/pgfplotgnuplot-example.table
-2020/12/01 | 1944 | graphics/pgf/base/doc/version-for-dvisvgm/en/plots/pgfplotgnuplot-example.table
-2020/12/01 | 1944 | graphics/pgf/base/doc/version-for-dvips/en/plots/pgfplotgnuplot-example.table
-2020/12/01 | 1944 | graphics/pgf/base/doc/version-for-dvipdfm/en/plots/pgfplotgnuplot-example.table
-2020/12/01 | 1944 | graphics/pgf/base/doc/text-en/plots/pgfplotgnuplot-example.table
-2020/12/01 | 19324 | graphics/pgf/base/tex/pgfcoreexternal.code.tex
-2020/12/01 | 191 | graphics/pgf/base/doc/version-for-dvisvgm/en/pgfmanual-test.html
-2020/12/01 | 1918 | graphics/pgf/base/tex/pgfmodulesorting.code.tex
-2020/12/01 | 19154 | graphics/pgf/base/doc/text-en/pgfmanual-en-base-actions.tex
-2020/12/01 | 19110 | graphics/pgf/base/doc/licenses/latex-project-public-license-1.3c.txt
-2020/12/01 | 1910 | graphics/pgf/base/lua/graphdrawing/pgf.lua
-2020/12/01 | 19040 | macros/latex/contrib/hep-paper/license.md
-2020/12/01 | 1896 | graphics/pgf/base/tex/pgfsysprotocol.code.tex
-2020/12/01 | 188050 | graphics/pgf/base/tex/tikz.code.tex
-2020/12/01 | 18773 | graphics/pgf/base/lua/graphdrawing/pgf/gd/planar/PDP.lua
-2020/12/01 | 1868 | graphics/pgf/base/lua/graphdrawing/pgf/gd/phylogenetics/AuthorDefinedPhylogeny.lua
-2020/12/01 | 18669 | graphics/pgf/base/lua/graphdrawing/pgf/gd/experimental/evolving/Supergraph.lua
-2020/12/01 | 18668 | graphics/pgf/base/lua/graphdrawing/pgf/gd/trees/SpanningTreeComputation.lua
-2020/12/01 | 1865 | graphics/pgf/base/source/CirclePlacer_script.h
-2020/12/01 | 1864 | graphics/pgf/base/lua/graphdrawing/pgf/gd/examples/BindingToASCII.lua
-2020/12/01 | 18491 | graphics/pgf/base/tex/pgfsys-dvipdfmx.def
-2020/12/01 | 1841 | graphics/pgf/base/lua/graphdrawing/pgf/gd/doc/ogdf/energybased/FastMultipoleEmbedder.lua
-2020/12/01 | 183 | graphics/pgf/base/doc/version-for-vtex/en/plots/pgf-asymptotic-example.gnuplot
-2020/12/01 | 183 | graphics/pgf/base/doc/version-for-tex4ht/en/plots/pgf-asymptotic-example.gnuplot
-2020/12/01 | 183 | graphics/pgf/base/doc/text-en/plots/pgf-asymptotic-example.gnuplot
-2020/12/01 | 1839 | graphics/pgf/base/lua/graphdrawing/pgf/gd/layered/node_ranking.lua
-2020/12/01 | 18393 | graphics/pgf/base/doc/text-en/pgfmanual-en-base-matrices.tex
-2020/12/01 | 1838 | graphics/pgf/base/lua/graphdrawing/pgf/gd/doc/ogdf/energybased/SpringEmbedderFR.lua
-2020/12/01 | 1835 | graphics/pgf/base/lua/graphdrawing/pgf/gd/layered/CycleRemovalBergerS1990a.lua
-2020/12/01 | 182136 | graphics/pgf/base/doc/ChangeLog
-2020/12/01 | 18032 | graphics/pgf/base/doc/licenses/gnu-public-license-2.txt
-2020/12/01 | 1790 | graphics/pgf/base/lua/graphdrawing/pgf/gd/layered/node_positioning.lua
-2020/12/01 | 1778 | graphics/pgf/base/lua/graphdrawing/pgf/gd/planar/LinkedList.lua
-2020/12/01 | 17612 | graphics/pgf/base/tex/pgfsys-tex4ht.def
-2020/12/01 | 175 | graphics/pgf/base/INSTALL_NOTES
-2020/12/01 | 1741 | graphics/pgf/base/lua/graphdrawing/pgf/gd/force/jedi/base/InitialTemplate.lua
-2020/12/01 | 1740 | graphics/pgf/base/source/FastHierarchyLayout_script.h
-2020/12/01 | 1731 | graphics/pgf/base/source/SugiyamaLayout_script.h
-2020/12/01 | 17311 | graphics/pgf/base/tex/pgfcorepathprocessing.code.tex
-2020/12/01 | 17294 | graphics/pgf/base/doc/text-en/pgfmanual-en-dv-polar.tex
-2020/12/01 | 17288 | graphics/pgf/base/doc/text-en/pgfmanual-en-library-math.tex
-2020/12/01 | 1718 | graphics/pgf/base/tex/tikzlibraryviews.code.tex
-2020/12/01 | 1715 | graphics/pgf/base/lua/graphdrawing/pgf/gd/force/jedi/initialpositioning/GridInitialPositioning.lua
-2020/12/01 | 17151 | graphics/pgf/base/lua/graphdrawing/pgf/gd/force/jedi/base/ForceController.lua
-2020/12/01 | 170 | graphics/pgf/base/doc/version-for-xetex/en/plots/pgf-asymptotic-example.gnuplot
-2020/12/01 | 170 | graphics/pgf/base/doc/version-for-pdftex/en/plots/pgf-asymptotic-example.gnuplot
-2020/12/01 | 170 | graphics/pgf/base/doc/version-for-luatex/en/plots/pgf-asymptotic-example.gnuplot
-2020/12/01 | 170 | graphics/pgf/base/doc/version-for-dvisvgm/en/plots/pgf-asymptotic-example.gnuplot
-2020/12/01 | 170 | graphics/pgf/base/doc/version-for-dvips/en/plots/pgf-asymptotic-example.gnuplot
-2020/12/01 | 170 | graphics/pgf/base/doc/version-for-dvipdfmx/en/plots/pgf-asymptotic-example.gnuplot
-2020/12/01 | 170 | graphics/pgf/base/doc/version-for-dvipdfm/en/plots/pgf-asymptotic-example.gnuplot
-2020/12/01 | 1705 | graphics/pgf/base/tex/pgfsys-dvisvgm4ht.def
-2020/12/01 | 1701 | graphics/pgf/base/source/LongestPathRanking_script.h
-2020/12/01 | 1699 | graphics/pgf/base/lua/graphdrawing/pgf/gd.lua
-2020/12/01 | 16959 | graphics/pgf/base/source/unittest_luamathparser.tex
-2020/12/01 | 1694 | macros/latex/contrib/hep-paper/README.md
-2020/12/01 | 1679 | graphics/pgf/base/lua/graphdrawing/pgf/gd/control/ComponentDirection.lua
-2020/12/01 | 16757 | graphics/pgf/base/lua/luamath/pgf/luamath/parser.lua
-2020/12/01 | 1651 | graphics/pgf/base/source/CircularLayout_script.h
-2020/12/01 | 16467 | graphics/pgf/base/tex/pgflibrarydecorations.shapes.code.tex
-2020/12/01 | 16342 | graphics/pgf/base/doc/text-en/pgfmanual-en-library-lsystems.tex
-2020/12/01 | 16323 | graphics/pgf/base/doc/text-en/pgfmanual-en-pgffor.tex
-2020/12/01 | 16121 | graphics/pgf/base/tex/pgfmoduleplot.code.tex
-2020/12/01 | 160993 | graphics/pgf/base/tex/pgflibraryshapes.geometric.code.tex
-2020/12/01 | 1608 | graphics/pgf/base/source/SpringEmbedderFR_script.h
-2020/12/01 | 16083 | graphics/pgf/base/doc/text-en/pgfmanual-en-library-petri.tex
-2020/12/01 | 159 | graphics/pgf/base/doc/version-for-vtex/en/plots/pgf-parametric-example.gnuplot
-2020/12/01 | 159 | graphics/pgf/base/doc/version-for-tex4ht/en/plots/pgf-parametric-example.gnuplot
-2020/12/01 | 159 | graphics/pgf/base/doc/text-en/plots/pgf-parametric-example.gnuplot
-2020/12/01 | 1597 | macros/latex/contrib/hep-paper/hep-paper.ins
-2020/12/01 | 15929 | graphics/pgf/base/tex/tikzlibrarycalc.code.tex
-2020/12/01 | 1589 | graphics/pgf/base/lua/graphdrawing/pgf/gd/layered/CycleRemovalGansnerKNV1993.lua
-2020/12/01 | 1576 | graphics/pgf/base/doc/version-for-dvisvgm/en/Makefile
-2020/12/01 | 1572 | graphics/pgf/base/source/SimpleDemoC.c
-2020/12/01 | 1571 | graphics/pgf/base/tex/tikzlibrarycircuits.logic.US.code.tex
-2020/12/01 | 1563 | graphics/pgf/base/lua/graphdrawing/pgf/gd/force/ControlDeclare.lua
-2020/12/01 | 15631 | graphics/pgf/base/tex/pgflibraryfixedpointarithmetic.code.tex
-2020/12/01 | 156060 | graphics/pgf/base/doc/text-en/pgfmanual-en-dv-axes.tex
-2020/12/01 | 154 | graphics/pgf/base/source/ExampleLocalMakefileConfig.mk
-2020/12/01 | 15497 | graphics/pgf/base/tex/pgfmanual.pdflinks.code.tex
-2020/12/01 | 15479 | graphics/pgf/base/doc/text-en/pgfmanual-en-base-transparency.tex
-2020/12/01 | 15474 | graphics/pgf/base/tex/pgflibrarypatterns.meta.code.tex
-2020/12/01 | 1532 | graphics/pgf/base/tex/tikzlibraryshapes.gates.logic.IEC.code.tex
-2020/12/01 | 1524 | graphics/pgf/base/doc/text-en/pgfmanual-en-library-fadings.tex
-2020/12/01 | 151 | graphics/pgf/base/doc/version-for-xetex/en/plots/pgf-parametric-example-cut.gnuplot
-2020/12/01 | 151 | graphics/pgf/base/doc/version-for-pdftex/en/plots/pgf-parametric-example-cut.gnuplot
-2020/12/01 | 151 | graphics/pgf/base/doc/version-for-luatex/en/plots/pgf-parametric-example-cut.gnuplot
-2020/12/01 | 151 | graphics/pgf/base/doc/version-for-dvisvgm/en/plots/pgf-parametric-example-cut.gnuplot
-2020/12/01 | 151 | graphics/pgf/base/doc/version-for-dvips/en/plots/pgf-parametric-example-cut.gnuplot
-2020/12/01 | 151 | graphics/pgf/base/doc/version-for-dvipdfmx/en/plots/pgf-parametric-example-cut.gnuplot
-2020/12/01 | 151 | graphics/pgf/base/doc/version-for-dvipdfm/en/plots/pgf-parametric-example-cut.gnuplot
-2020/12/01 | 1518099 | macros/latex/contrib/hep-paper.zip
-2020/12/01 | 1508 | graphics/pgf/base/lua/graphdrawing/pgf/gd/force/jedi/initialpositioning/RandomInitialPositioning.lua
-2020/12/01 | 14804 | graphics/pgf/base/tex/tikzlibrarymindmap.code.tex
-2020/12/01 | 14802 | graphics/pgf/base/lua/graphdrawing/pgf/gd/control/Sublayouts.lua
-2020/12/01 | 147175 | graphics/pgf/base/doc/images/pgfmanual-mindmap-1.pdf
-2020/12/01 | 1468 | graphics/pgf/base/lua/graphdrawing/pgf/gd/experimental/evolving/TimeSpec.lua
-2020/12/01 | 14536 | graphics/pgf/base/doc/text-en/pgfmanual-en-introduction.tex
-2020/12/01 | 14534 | graphics/pgf/base/lua/luamath/pgf/luamath/functions.lua
-2020/12/01 | 14524 | graphics/pgf/base/tex/pgflibraryplotmarks.code.tex
-2020/12/01 | 14515 | graphics/pgf/base/doc/text-en/pgfmanual-en-library-perspective.tex
-2020/12/01 | 14504 | graphics/pgf/base/doc/text-en/pgfmanual-en-gd-overview.tex
-2020/12/01 | 144 | graphics/pgf/base/doc/version-for-xetex/en/plots/pgf-parametric-example.gnuplot
-2020/12/01 | 144 | graphics/pgf/base/doc/version-for-pdftex/en/plots/pgf-parametric-example.gnuplot
-2020/12/01 | 144 | graphics/pgf/base/doc/version-for-luatex/en/plots/pgf-parametric-example.gnuplot
-2020/12/01 | 144 | graphics/pgf/base/doc/version-for-dvisvgm/en/plots/pgf-parametric-example.gnuplot
-2020/12/01 | 144 | graphics/pgf/base/doc/version-for-dvips/en/plots/pgf-parametric-example.gnuplot
-2020/12/01 | 144 | graphics/pgf/base/doc/version-for-dvipdfmx/en/plots/pgf-parametric-example.gnuplot
-2020/12/01 | 144 | graphics/pgf/base/doc/version-for-dvipdfm/en/plots/pgf-parametric-example.gnuplot
-2020/12/01 | 14370 | graphics/pgf/base/lua/graphdrawing/pgf/gd/force/CoarseGraph.lua
-2020/12/01 | 1433 | graphics/pgf/base/lua/graphdrawing/pgf/gd/doc/ogdf/misclayout/BalloonLayout.lua
-2020/12/01 | 143246 | graphics/pgf/base/doc/text-en/pgfmanual-en-tikz-graphs.tex
-2020/12/01 | 142672 | graphics/pgf/base/doc/text-en/pgfmanual-en-dv-stylesheets.tex
-2020/12/01 | 14117 | graphics/pgf/base/tex/pgflibrarycurvilinear.code.tex
-2020/12/01 | 14014 | graphics/pgf/base/lua/graphdrawing/pgf/gd/control/ComponentAlign.lua
-2020/12/01 | 139 | graphics/pgf/base/doc/images/brave-gnu-world-logo-mask.bb
-2020/12/01 | 1398 | graphics/pgf/base/lua/graphdrawing/pgf/gd/doc/ogdf/energybased/multilevelmixer/CirclePlacer.lua
-2020/12/01 | 13892 | graphics/pgf/base/doc/text-en/pgfmanual-en-module-parser.tex
-2020/12/01 | 137 | graphics/pgf/base/doc/images/brave-gnu-world-logo.25.bb
-2020/12/01 | 134 | graphics/pgf/base/doc/images/brave-gnu-world-logo.bb
-2020/12/01 | 13391 | graphics/pgf/base/tex/pgfmathcalc.code.tex
-2020/12/01 | 1337 | graphics/pgf/base/source/layered_script.h
-2020/12/01 | 13375 | graphics/pgf/base/tex/pgflibrarydecorations.footprints.code.tex
-2020/12/01 | 1334 | graphics/pgf/base/source/FMMMLayout_script.h
-2020/12/01 | 13244 | graphics/pgf/base/tex/pgfsys-luatex.def
-2020/12/01 | 1319 | graphics/pgf/base/tex/tikzlibrarydecorations.pathreplacing.code.tex
-2020/12/01 | 13198388 | install/graphics/pgf/base/pgf.tds.zip
-2020/12/01 | 13134 | graphics/pgf/base/tex/pgflibraryshadings.code.tex
-2020/12/01 | 13124698 | graphics/pgf/base.zip
-2020/12/01 | 1310 | graphics/pgf/base/doc/text-en/pgfmanual-en-gd-force.tex
-2020/12/01 | 1309 | graphics/pgf/base/lua/graphdrawing/pgf/gd/layered/edge_routing.lua
-2020/12/01 | 13093 | graphics/pgf/base/lua/graphdrawing/pgf/gd/force/SpringHu2006.lua
-2020/12/01 | 1308 | graphics/pgf/base/source/PlanarizationLayout_script.h
-2020/12/01 | 1303 | graphics/pgf/base/tex/tikzlibraryshapes.gates.logic.US.code.tex
-2020/12/01 | 1303 | graphics/pgf/base/source/FastSimpleHierarchyLayout_script.h
-2020/12/01 | 13039 | graphics/pgf/base/doc/text-en/pgfmanual-en-library-automata.tex
-2020/12/01 | 1296 | graphics/pgf/base/tex/t-pgfmod.tex
-2020/12/01 | 1286 | graphics/pgf/base/tex/t-pgfcor.tex
-2020/12/01 | 1280 | graphics/pgf/base/tex/pgfexternalwithdepth.tex
-2020/12/01 | 1280 | graphics/pgf/base/source/SpringEmbedderKK_script.h
-2020/12/01 | 12656 | graphics/pgf/base/tex/pgflibrarydecorations.text.code.tex
-2020/12/01 | 12653 | graphics/pgf/base/tex/tikzlibrarycalendar.code.tex
-2020/12/01 | 126096 | graphics/pgf/base/doc/text-en/pgfmanual-en-tikz-shapes.tex
-2020/12/01 | 12601 | graphics/pgf/base/tex/pgfsys-pdftex.def
-2020/12/01 | 1254 | graphics/pgf/base/source/SimpleDemoCPlusPlus.c++
-2020/12/01 | 1251 | graphics/pgf/base/doc/text-en/pgfmanual-en-library-through.tex
-2020/12/01 | 12413 | graphics/pgf/base/lua/graphdrawing/pgf/gd/phylogenetics/DistanceMatrix.lua
-2020/12/01 | 1238 | graphics/pgf/base/lua/graphdrawing/pgf/gd/doc/ogdf/layered/CoffmanGrahamRanking.lua
-2020/12/01 | 12261 | graphics/pgf/base/lua/graphdrawing/pgf/gd/phylogenetics/BalancedNearestNeighbourInterchange.lua
-2020/12/01 | 12243 | graphics/pgf/base/tex/pgfmodulenonlineartransformations.code.tex
-2020/12/01 | 1222 | graphics/pgf/base/source/SolarMerger_script.h
-2020/12/01 | 12227 | graphics/pgf/base/lua/graphdrawing/pgf/gd/layered/Sugiyama.lua
-2020/12/01 | 1201 | graphics/pgf/base/tex/tikzlibraryshapes.callouts.code.tex
-2020/12/01 | 11960 | graphics/pgf/base/doc/text-en/pgfmanual-en-base-images.tex
-2020/12/01 | 1179 | graphics/pgf/base/tex/tikzlibraryfadings.code.tex
-2020/12/01 | 11777 | graphics/pgf/base/tex/pgfutil-context.def
-2020/12/01 | 1172 | graphics/pgf/base/lua/graphdrawing/pgf/gd/doc/ogdf/energybased/multilevelmixer/SolarMerger.lua
-2020/12/01 | 1172 | graphics/pgf/base/doc/version-for-dvips/en/Makefile
-2020/12/01 | 1169 | graphics/pgf/base/tex/tikzlibraryer.code.tex
-2020/12/01 | 1169 | graphics/pgf/base/source/SiftingHeuristic_script.h
-2020/12/01 | 11601 | graphics/pgf/base/doc/text-en/pgfmanual-en-gd-display-layer.tex
-2020/12/01 | 11566 | graphics/pgf/base/doc/version-for-dvisvgm/pgfmanual-dvisvgm.cfg
-2020/12/01 | 11557 | graphics/pgf/base/doc/text-en/pgfmanual-en-library-edges.tex
-2020/12/01 | 1151 | graphics/pgf/base/lua/graphdrawing/pgf/gd/doc/ogdf/layered/OptimalRanking.lua
-2020/12/01 | 115153 | graphics/pgf/base/doc/text-en/pgfmanual-en-tikz-animations.tex
-2020/12/01 | 1142 | graphics/pgf/base/doc/licenses/LICENSE
-2020/12/01 | 11407 | graphics/pgf/base/doc/text-en/pgfmanual-en-tikz-design.tex
-2020/12/01 | 113 | graphics/pgf/base/doc/version-for-xetex/en/plots/pgf-tan-example.gnuplot
-2020/12/01 | 113 | graphics/pgf/base/doc/version-for-vtex/en/plots/pgf-exp.gnuplot
-2020/12/01 | 113 | graphics/pgf/base/doc/version-for-tex4ht/en/plots/pgf-exp.gnuplot
-2020/12/01 | 113 | graphics/pgf/base/doc/version-for-pdftex/en/plots/pgf-tan-example.gnuplot
-2020/12/01 | 113 | graphics/pgf/base/doc/version-for-luatex/en/plots/pgf-tan-example.gnuplot
-2020/12/01 | 113 | graphics/pgf/base/doc/version-for-dvisvgm/en/plots/pgf-tan-example.gnuplot
-2020/12/01 | 113 | graphics/pgf/base/doc/version-for-dvips/en/plots/pgf-tan-example.gnuplot
-2020/12/01 | 113 | graphics/pgf/base/doc/version-for-dvipdfmx/en/plots/pgf-tan-example.gnuplot
-2020/12/01 | 113 | graphics/pgf/base/doc/version-for-dvipdfm/en/plots/pgf-tan-example.gnuplot
-2020/12/01 | 113 | graphics/pgf/base/doc/text-en/plots/pgf-tan-example.gnuplot
-2020/12/01 | 113 | graphics/pgf/base/doc/text-en/plots/pgf-exp.gnuplot
-2020/12/01 | 11399 | graphics/pgf/base/tex/tikzlibrarytopaths.code.tex
-2020/12/01 | 1135 | graphics/pgf/base/lua/graphdrawing/pgf/gd/force/ControlStart.lua
-2020/12/01 | 11349 | graphics/pgf/base/tex/pgfsys-dvi.def
-2020/12/01 | 11324 | graphics/pgf/base/lua/graphdrawing/pgf/gd/trees/doc.lua
-2020/12/01 | 11312 | graphics/pgf/base/lua/graphdrawing/pgf/gd/model/Vertex.lua
-2020/12/01 | 111 | graphics/pgf/base/doc/version-for-vtex/en/plots/pgfplotgnuplot-example.gnuplot
-2020/12/01 | 111 | graphics/pgf/base/doc/version-for-tex4ht/en/plots/pgfplotgnuplot-example.gnuplot
-2020/12/01 | 111 | graphics/pgf/base/doc/text-en/plots/pgfplotgnuplot-example.gnuplot
-2020/12/01 | 111 | graphics/pgf/base/doc/AUTHORS
-2020/12/01 | 11127 | graphics/pgf/base/lua/graphdrawing/pgf/gd/lib.lua
-2020/12/01 | 11083 | graphics/pgf/base/lua/graphdrawing/pgf/gd/control/Distances.lua
-2020/12/01 | 1107 | graphics/pgf/base/source/tikzexternaltest.code.tex
-2020/12/01 | 1105 | graphics/pgf/base/lua/graphdrawing/pgf/gd/force/jedi/base/ForceTemplate.lua
-2020/12/01 | 1104 | graphics/pgf/base/source/IndependentSetMerger_script.h
-2020/12/01 | 1101 | graphics/pgf/base/source/LocalBiconnectedMerger_script.h
-2020/12/01 | 10925 | graphics/pgf/base/tex/pgfmathfunctions.misc.code.tex
-2020/12/01 | 1090 | graphics/pgf/base/tex/pgf.sty
-2020/12/01 | 10901 | graphics/pgf/base/tex/pgfmodulebending.code.tex
-2020/12/01 | 108 | graphics/pgf/base/doc/version-for-vtex/en/plots/pgf-sin.gnuplot
-2020/12/01 | 108 | graphics/pgf/base/doc/version-for-tex4ht/en/plots/pgf-sin.gnuplot
-2020/12/01 | 108 | graphics/pgf/base/doc/text-en/plots/pgf-sin.gnuplot
-2020/12/01 | 1087 | graphics/pgf/base/source/multilevelmixer_script.h
-2020/12/01 | 1087 | graphics/pgf/base/lua/graphdrawing/pgf/gd/force/SpringElectricalLayouts.lua
-2020/12/01 | 1080 | graphics/pgf/base/source/INSTALL
-2020/12/01 | 107 | graphics/pgf/base/doc/version-for-xetex/en/plots/pgfmanual-sine.gnuplot
-2020/12/01 | 107 | graphics/pgf/base/doc/version-for-vtex/en/plots/pgfmanual-sine.gnuplot
-2020/12/01 | 107 | graphics/pgf/base/doc/version-for-tex4ht/en/plots/pgfmanual-sine.gnuplot
-2020/12/01 | 107 | graphics/pgf/base/doc/version-for-pdftex/en/plots/pgfmanual-sine.gnuplot
-2020/12/01 | 107 | graphics/pgf/base/doc/version-for-dvips/en/plots/pgfmanual-sine.gnuplot
-2020/12/01 | 107 | graphics/pgf/base/doc/version-for-dvipdfmx/en/plots/pgfmanual-sine.gnuplot
-2020/12/01 | 107 | graphics/pgf/base/doc/version-for-dvipdfm/en/plots/pgfmanual-sine.gnuplot
-2020/12/01 | 107 | graphics/pgf/base/doc/text-en/plots/pgfmanual-sine.gnuplot
-2020/12/01 | 1077 | graphics/pgf/base/source/SimpleDemoOGDF.c++
-2020/12/01 | 1077 | graphics/pgf/base/source/BarycenterPlacer_script.h
-2020/12/01 | 10778 | graphics/pgf/base/doc/text-en/pgfmanual-en-library-matrices.tex
-2020/12/01 | 1068 | graphics/pgf/base/lua/graphdrawing/pgf/gd/doc/ogdf/layered/SiftingHeuristic.lua
-2020/12/01 | 106851 | graphics/pgf/base/doc/text-en/pgfmanual-en-tikz-arrows.tex
-2020/12/01 | 10610 | graphics/pgf/base/doc/text-en/pgfmanual-en-library-profiler.tex
-2020/12/01 | 1057 | graphics/pgf/base/source/CoffmanGrahamRanking_script.h
-2020/12/01 | 10578098 | graphics/pgf/base/doc/pgfmanual.pdf
-2020/12/01 | 10535 | graphics/pgf/base/doc/text-en/pgfmanual-en-base-patterns.tex
-2020/12/01 | 1052262 | macros/latex/contrib/hep-paper/hep-paper-implementation.pdf
-2020/12/01 | 104935 | graphics/pgf/base/tex/pgfmathfloat.code.tex
-2020/12/01 | 10461 | graphics/pgf/base/doc/text-en/pgfmanual-en-library-shadows.tex
-2020/12/01 | 10416 | graphics/pgf/base/doc/text-en/pgfmanual-en-math-algorithms.tex
-2020/12/01 | 1040 | graphics/pgf/base/tex/tikzlibrarythrough.code.tex
-2020/12/01 | 1033 | graphics/pgf/base/source/MatchingMerger_script.h
-2020/12/01 | 1030 | graphics/pgf/base/lua/graphdrawing/pgf/gd/model/Hyperedge.lua
-2020/12/01 | 1022 | graphics/pgf/base/source/OptimalRanking_script.h
-2020/12/01 | 101 | graphics/pgf/base/doc/version-for-vtex/en/plots/pgf-x.gnuplot
-2020/12/01 | 101 | graphics/pgf/base/doc/version-for-tex4ht/en/plots/pgf-x.gnuplot
-2020/12/01 | 101 | graphics/pgf/base/doc/text-en/plots/pgf-x.gnuplot
-2020/12/01 | 10197 | graphics/pgf/base/lua/graphdrawing/pgf/gd/force/jedi/doc.lua
-2020/12/01 | 1017 | graphics/pgf/base/tex/pgfexternal.tex
-2020/12/01 | 1017 | graphics/pgf/base/source/EdgeCoverMerger_script.h
-2020/12/01 | 10165 | graphics/pgf/base/tex/pgfmathfunctions.base.code.tex
-2020/12/01 | 10130 | graphics/pgf/base/tex/pgfmodulesnakes.code.tex
-2020/12/01 | 10074 | graphics/pgf/base/doc/text-en/pgfmanual-en-main-preamble.tex
-2020/12/01 | 1000 | graphics/pgf/base/source/MultilevelLayout_script.h
-2020/12/01 | 10009 | graphics/pgf/base/tex/pgfutil-plain.def
diff --git a/macros/latex/contrib/decision-table/LICENSE b/macros/latex/contrib/decision-table/LICENSE
deleted file mode 100644
index 4db9b5af29..0000000000
--- a/macros/latex/contrib/decision-table/LICENSE
+++ /dev/null
@@ -1,415 +0,0 @@
-The LaTeX Project Public License
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
-
-LPPL Version 1.3c 2008-05-04
-
-Copyright 1999 2002-2008 LaTeX3 Project
- Everyone is allowed to distribute verbatim copies of this
- license document, but modification of it is not allowed.
-
-
-PREAMBLE
-========
-
-The LaTeX Project Public License (LPPL) is the primary license under
-which the LaTeX kernel and the base LaTeX packages are distributed.
-
-You may use this license for any work of which you hold the copyright
-and which you wish to distribute. This license may be particularly
-suitable if your work is TeX-related (such as a LaTeX package), but
-it is written in such a way that you can use it even if your work is
-unrelated to TeX.
-
-The section `WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE',
-below, gives instructions, examples, and recommendations for authors
-who are considering distributing their works under this license.
-
-This license gives conditions under which a work may be distributed
-and modified, as well as conditions under which modified versions of
-that work may be distributed.
-
-We, the LaTeX3 Project, believe that the conditions below give you
-the freedom to make and distribute modified versions of your work
-that conform with whatever technical specifications you wish while
-maintaining the availability, integrity, and reliability of
-that work. If you do not see how to achieve your goal while
-meeting these conditions, then read the document `cfgguide.tex'
-and `modguide.tex' in the base LaTeX distribution for suggestions.
-
-
-DEFINITIONS
-===========
-
-In this license document the following terms are used:
-
- `Work'
- Any work being distributed under this License.
-
- `Derived Work'
- Any work that under any applicable law is derived from the Work.
-
- `Modification'
- Any procedure that produces a Derived Work under any applicable
- law -- for example, the production of a file containing an
- original file associated with the Work or a significant portion of
- such a file, either verbatim or with modifications and/or
- translated into another language.
-
- `Modify'
- To apply any procedure that produces a Derived Work under any
- applicable law.
-
- `Distribution'
- Making copies of the Work available from one person to another, in
- whole or in part. Distribution includes (but is not limited to)
- making any electronic components of the Work accessible by
- file transfer protocols such as FTP or HTTP or by shared file
- systems such as Sun's Network File System (NFS).
-
- `Compiled Work'
- A version of the Work that has been processed into a form where it
- is directly usable on a computer system. This processing may
- include using installation facilities provided by the Work,
- transformations of the Work, copying of components of the Work, or
- other activities. Note that modification of any installation
- facilities provided by the Work constitutes modification of the Work.
-
- `Current Maintainer'
- A person or persons nominated as such within the Work. If there is
- no such explicit nomination then it is the `Copyright Holder' under
- any applicable law.
-
- `Base Interpreter'
- A program or process that is normally needed for running or
- interpreting a part or the whole of the Work.
-
- A Base Interpreter may depend on external components but these
- are not considered part of the Base Interpreter provided that each
- external component clearly identifies itself whenever it is used
- interactively. Unless explicitly specified when applying the
- license to the Work, the only applicable Base Interpreter is a
- `LaTeX-Format' or in the case of files belonging to the
- `LaTeX-format' a program implementing the `TeX language'.
-
-
-
-CONDITIONS ON DISTRIBUTION AND MODIFICATION
-===========================================
-
-1. Activities other than distribution and/or modification of the Work
-are not covered by this license; they are outside its scope. In
-particular, the act of running the Work is not restricted and no
-requirements are made concerning any offers of support for the Work.
-
-2. You may distribute a complete, unmodified copy of the Work as you
-received it. Distribution of only part of the Work is considered
-modification of the Work, and no right to distribute such a Derived
-Work may be assumed under the terms of this clause.
-
-3. You may distribute a Compiled Work that has been generated from a
-complete, unmodified copy of the Work as distributed under Clause 2
-above, as long as that Compiled Work is distributed in such a way that
-the recipients may install the Compiled Work on their system exactly
-as it would have been installed if they generated a Compiled Work
-directly from the Work.
-
-4. If you are the Current Maintainer of the Work, you may, without
-restriction, modify the Work, thus creating a Derived Work. You may
-also distribute the Derived Work without restriction, including
-Compiled Works generated from the Derived Work. Derived Works
-distributed in this manner by the Current Maintainer are considered to
-be updated versions of the Work.
-
-5. If you are not the Current Maintainer of the Work, you may modify
-your copy of the Work, thus creating a Derived Work based on the Work,
-and compile this Derived Work, thus creating a Compiled Work based on
-the Derived Work.
-
-6. If you are not the Current Maintainer of the Work, you may
-distribute a Derived Work provided the following conditions are met
-for every component of the Work unless that component clearly states
-in the copyright notice that it is exempt from that condition. Only
-the Current Maintainer is allowed to add such statements of exemption
-to a component of the Work.
-
- a. If a component of this Derived Work can be a direct replacement
- for a component of the Work when that component is used with the
- Base Interpreter, then, wherever this component of the Work
- identifies itself to the user when used interactively with that
- Base Interpreter, the replacement component of this Derived Work
- clearly and unambiguously identifies itself as a modified version
- of this component to the user when used interactively with that
- Base Interpreter.
-
- b. Every component of the Derived Work contains prominent notices
- detailing the nature of the changes to that component, or a
- prominent reference to another file that is distributed as part
- of the Derived Work and that contains a complete and accurate log
- of the changes.
-
- c. No information in the Derived Work implies that any persons,
- including (but not limited to) the authors of the original version
- of the Work, provide any support, including (but not limited to)
- the reporting and handling of errors, to recipients of the
- Derived Work unless those persons have stated explicitly that
- they do provide such support for the Derived Work.
-
- d. You distribute at least one of the following with the Derived Work:
-
- 1. A complete, unmodified copy of the Work;
- if your distribution of a modified component is made by
- offering access to copy the modified component from a
- designated place, then offering equivalent access to copy
- the Work from the same or some similar place meets this
- condition, even though third parties are not compelled to
- copy the Work along with the modified component;
-
- 2. Information that is sufficient to obtain a complete,
- unmodified copy of the Work.
-
-7. If you are not the Current Maintainer of the Work, you may
-distribute a Compiled Work generated from a Derived Work, as long as
-the Derived Work is distributed to all recipients of the Compiled
-Work, and as long as the conditions of Clause 6, above, are met with
-regard to the Derived Work.
-
-8. The conditions above are not intended to prohibit, and hence do not
-apply to, the modification, by any method, of any component so that it
-becomes identical to an updated version of that component of the Work as
-it is distributed by the Current Maintainer under Clause 4, above.
-
-9. Distribution of the Work or any Derived Work in an alternative
-format, where the Work or that Derived Work (in whole or in part) is
-then produced by applying some process to that format, does not relax or
-nullify any sections of this license as they pertain to the results of
-applying that process.
-
-10. a. A Derived Work may be distributed under a different license
- provided that license itself honors the conditions listed in
- Clause 6 above, in regard to the Work, though it does not have
- to honor the rest of the conditions in this license.
-
- b. If a Derived Work is distributed under a different license, that
- Derived Work must provide sufficient documentation as part of
- itself to allow each recipient of that Derived Work to honor the
- restrictions in Clause 6 above, concerning changes from the Work.
-
-11. This license places no restrictions on works that are unrelated to
-the Work, nor does this license place any restrictions on aggregating
-such works with the Work by any means.
-
-12. Nothing in this license is intended to, or may be used to, prevent
-complete compliance by all parties with all applicable laws.
-
-
-NO WARRANTY
-===========
-
-There is no warranty for the Work. Except when otherwise stated in
-writing, the Copyright Holder provides the Work `as is', without
-warranty of any kind, either expressed or implied, including, but not
-limited to, the implied warranties of merchantability and fitness for a
-particular purpose. The entire risk as to the quality and performance
-of the Work is with you. Should the Work prove defective, you assume
-the cost of all necessary servicing, repair, or correction.
-
-In no event unless required by applicable law or agreed to in writing
-will The Copyright Holder, or any author named in the components of the
-Work, or any other party who may distribute and/or modify the Work as
-permitted above, be liable to you for damages, including any general,
-special, incidental or consequential damages arising out of any use of
-the Work or out of inability to use the Work (including, but not limited
-to, loss of data, data being rendered inaccurate, or losses sustained by
-anyone as a result of any failure of the Work to operate with any other
-programs), even if the Copyright Holder or said author or said other
-party has been advised of the possibility of such damages.
-
-
-MAINTENANCE OF THE WORK
-=======================
-
-The Work has the status `author-maintained' if the Copyright Holder
-explicitly and prominently states near the primary copyright notice in
-the Work that the Work can only be maintained by the Copyright Holder
-or simply that it is `author-maintained'.
-
-The Work has the status `maintained' if there is a Current Maintainer
-who has indicated in the Work that they are willing to receive error
-reports for the Work (for example, by supplying a valid e-mail
-address). It is not required for the Current Maintainer to acknowledge
-or act upon these error reports.
-
-The Work changes from status `maintained' to `unmaintained' if there
-is no Current Maintainer, or the person stated to be Current
-Maintainer of the work cannot be reached through the indicated means
-of communication for a period of six months, and there are no other
-significant signs of active maintenance.
-
-You can become the Current Maintainer of the Work by agreement with
-any existing Current Maintainer to take over this role.
-
-If the Work is unmaintained, you can become the Current Maintainer of
-the Work through the following steps:
-
- 1. Make a reasonable attempt to trace the Current Maintainer (and
- the Copyright Holder, if the two differ) through the means of
- an Internet or similar search.
-
- 2. If this search is successful, then enquire whether the Work
- is still maintained.
-
- a. If it is being maintained, then ask the Current Maintainer
- to update their communication data within one month.
-
- b. If the search is unsuccessful or no action to resume active
- maintenance is taken by the Current Maintainer, then announce
- within the pertinent community your intention to take over
- maintenance. (If the Work is a LaTeX work, this could be
- done, for example, by posting to comp.text.tex.)
-
- 3a. If the Current Maintainer is reachable and agrees to pass
- maintenance of the Work to you, then this takes effect
- immediately upon announcement.
-
- b. If the Current Maintainer is not reachable and the Copyright
- Holder agrees that maintenance of the Work be passed to you,
- then this takes effect immediately upon announcement.
-
- 4. If you make an `intention announcement' as described in 2b. above
- and after three months your intention is challenged neither by
- the Current Maintainer nor by the Copyright Holder nor by other
- people, then you may arrange for the Work to be changed so as
- to name you as the (new) Current Maintainer.
-
- 5. If the previously unreachable Current Maintainer becomes
- reachable once more within three months of a change completed
- under the terms of 3b) or 4), then that Current Maintainer must
- become or remain the Current Maintainer upon request provided
- they then update their communication data within one month.
-
-A change in the Current Maintainer does not, of itself, alter the fact
-that the Work is distributed under the LPPL license.
-
-If you become the Current Maintainer of the Work, you should
-immediately provide, within the Work, a prominent and unambiguous
-statement of your status as Current Maintainer. You should also
-announce your new status to the same pertinent community as
-in 2b) above.
-
-
-WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE
-======================================================
-
-This section contains important instructions, examples, and
-recommendations for authors who are considering distributing their
-works under this license. These authors are addressed as `you' in
-this section.
-
-Choosing This License or Another License
-----------------------------------------
-
-If for any part of your work you want or need to use *distribution*
-conditions that differ significantly from those in this license, then
-do not refer to this license anywhere in your work but, instead,
-distribute your work under a different license. You may use the text
-of this license as a model for your own license, but your license
-should not refer to the LPPL or otherwise give the impression that
-your work is distributed under the LPPL.
-
-The document `modguide.tex' in the base LaTeX distribution explains
-the motivation behind the conditions of this license. It explains,
-for example, why distributing LaTeX under the GNU General Public
-License (GPL) was considered inappropriate. Even if your work is
-unrelated to LaTeX, the discussion in `modguide.tex' may still be
-relevant, and authors intending to distribute their works under any
-license are encouraged to read it.
-
-A Recommendation on Modification Without Distribution
------------------------------------------------------
-
-It is wise never to modify a component of the Work, even for your own
-personal use, without also meeting the above conditions for
-distributing the modified component. While you might intend that such
-modifications will never be distributed, often this will happen by
-accident -- you may forget that you have modified that component; or
-it may not occur to you when allowing others to access the modified
-version that you are thus distributing it and violating the conditions
-of this license in ways that could have legal implications and, worse,
-cause problems for the community. It is therefore usually in your
-best interest to keep your copy of the Work identical with the public
-one. Many works provide ways to control the behavior of that work
-without altering any of its licensed components.
-
-How to Use This License
------------------------
-
-To use this license, place in each of the components of your work both
-an explicit copyright notice including your name and the year the work
-was authored and/or last substantially modified. Include also a
-statement that the distribution and/or modification of that
-component is constrained by the conditions in this license.
-
-Here is an example of such a notice and statement:
-
- %% pig.dtx
- %% Copyright 2005 M. Y. Name
- %
- % This work may be distributed and/or modified under the
- % conditions of the LaTeX Project Public License, either version 1.3
- % of this license or (at your option) any later version.
- % The latest version of this license is in
- % http://www.latex-project.org/lppl.txt
- % and version 1.3 or later is part of all distributions of LaTeX
- % version 2005/12/01 or later.
- %
- % This work has the LPPL maintenance status `maintained'.
- %
- % The Current Maintainer of this work is M. Y. Name.
- %
- % This work consists of the files pig.dtx and pig.ins
- % and the derived file pig.sty.
-
-Given such a notice and statement in a file, the conditions
-given in this license document would apply, with the `Work' referring
-to the three files `pig.dtx', `pig.ins', and `pig.sty' (the last being
-generated from `pig.dtx' using `pig.ins'), the `Base Interpreter'
-referring to any `LaTeX-Format', and both `Copyright Holder' and
-`Current Maintainer' referring to the person `M. Y. Name'.
-
-If you do not want the Maintenance section of LPPL to apply to your
-Work, change `maintained' above into `author-maintained'.
-However, we recommend that you use `maintained', as the Maintenance
-section was added in order to ensure that your Work remains useful to
-the community even when you can no longer maintain and support it
-yourself.
-
-Derived Works That Are Not Replacements
----------------------------------------
-
-Several clauses of the LPPL specify means to provide reliability and
-stability for the user community. They therefore concern themselves
-with the case that a Derived Work is intended to be used as a
-(compatible or incompatible) replacement of the original Work. If
-this is not the case (e.g., if a few lines of code are reused for a
-completely different task), then clauses 6b and 6d shall not apply.
-
-
-Important Recommendations
--------------------------
-
- Defining What Constitutes the Work
-
- The LPPL requires that distributions of the Work contain all the
- files of the Work. It is therefore important that you provide a
- way for the licensee to determine which files constitute the Work.
- This could, for example, be achieved by explicitly listing all the
- files of the Work near the copyright notice of each file or by
- using a line such as:
-
- % This work consists of all files listed in manifest.txt.
-
- in that place. In the absence of an unequivocal list it might be
- impossible for the licensee to determine what is considered by you
- to comprise the Work and, in such a case, the licensee would be
- entitled to make reasonable conjectures as to which files comprise
- the Work.
diff --git a/macros/latex/contrib/decision-table/README b/macros/latex/contrib/decision-table/README
index 48923bccbb..feb434fb75 100644
--- a/macros/latex/contrib/decision-table/README
+++ b/macros/latex/contrib/decision-table/README
@@ -1,5 +1,5 @@
-dmn.sty
-Copyright 2020 Simon Vandevelde
+decision-table.sty
+Copyright 2020 Simon Vandevelde, Francois Pantigny
This work may be distributed and/or modified under the
conditions of the LaTeX Project Public License, either version 1.3c
@@ -11,8 +11,10 @@ version 2005/12/01 or later.
This work has the LPPL maintenance status “maintained”.
-The Current Maintainer of this work is Simon Vandevelde.
+The Current Maintainers of this work are Simon Vandevelde and Francois Pantigny.
-This work consists of the files dmn.sty.
+This work consists of the files decision-table.dtx and decision-table.ins.
+You can generate the decision-table.sty package by placing both the dtx and ins
+in the same directory, and running `latex decision-table.ins`.
-The dmn LaTeX package allows easy construction of dmn decision tables.
+The decision-table LaTeX package allows easy construction of DMN decision tables.
diff --git a/macros/latex/contrib/decision-table/decision-table-doc.pdf b/macros/latex/contrib/decision-table/decision-table-doc.pdf
deleted file mode 100644
index 54156a937c..0000000000
--- a/macros/latex/contrib/decision-table/decision-table-doc.pdf
+++ /dev/null
Binary files differ
diff --git a/macros/latex/contrib/decision-table/decision-table-doc.tex b/macros/latex/contrib/decision-table/decision-table-doc.tex
deleted file mode 100644
index 266e88acbf..0000000000
--- a/macros/latex/contrib/decision-table/decision-table-doc.tex
+++ /dev/null
@@ -1,209 +0,0 @@
-\documentclass{article}
-\usepackage{decision-table}
-\usepackage{hyperref}
-\usepackage{listings}
-\usepackage{float}
-
-\author{Simon Vandevelde}
-
-\title{The \texttt{decision-table} Package}
-\date{2020/08/22}
-
-\begin{document}
-
-\maketitle
-
-\section{Description}
-
-The \texttt{decision-table} package allows for an easy way to generate decision tables in the Decision Model and Notation (DMN) format. (See Fig. \ref{ex1})
-This package ensures consistency in the tables (i.e. fontsize), and is thus a better alternative to inserting tables via images.
-
-\begin{figure}[H]
- \centering
- \dmntable{Calculate BMI}{U}{Weight(kgs),Length(m)}{BMI}{
- ---,---,weight/length*length}
- \caption{Example of a DMN table}
- \label{ex1}
-\end{figure}
-\section{How to use}
-
-The \texttt{decision-table} package adds the \texttt{dmntable} command, with which tables can be created.
-This command expands into a \texttt{tabular}, so it can be used within a \texttt{table} or \texttt{figure} environment.
-Furthermore, this allows labels and captions to be added seamlessly.
-It is also possible to place multiple DMN tables in one \texttt{table}/\texttt{figure} environment.
-
-The \texttt{dmntable} command has the following inputs:
-\begin{itemize}
- \item title
- \item hit policy
- \item input column headers
- \item output column headers
- \item the table values
-\end{itemize}
-The command is used as follows:
-\begin{lstlisting}[language=tex, frame=single]
-\dmntable{title}{hitpolicy}{input}{output}{values}
-\end{lstlisting}
-
-The input, output and cell values are split by a comma.
-It is not necessary to include the row numbers for the cell values.
-For example, \ref{ex1} is generated by the following code:
-\begin{lstlisting}[language=tex, frame=single, basicstyle=\small]
-\begin{figure}[H]
- \centering
- \dmntable{Calculate BMI}{U} % Title and HP
- {Weight(kgs),Length(m)}{BMI} % Input, output
- {---,---,weight/length*length} % Cell values
- \caption{Example of a DMN table}
- \label{ex1}
-\end{figure}
-\end{lstlisting}
-
-If a cell value contains multiple values (e.g. multiple string values), then accolades should be written around them.
-See the example \ref{ex2}.
-
-
-\section{Examples}
-This section contains some example code and their resulting tables.
-
-\begin{lstlisting}[language=tex, frame=single, basicstyle=\small]
-\begin{figure}[H]
- \centering
- \dmntable{Calculate BMI}{U} % Title and HP
- {Weight(kgs),Length(m)}{BMI} % Input, output
- {---,---,weight/length*length} % Cell values
- \caption{Example of a DMN table}
-\end{figure}
-\end{lstlisting}
-\begin{figure}[H]
- \centering
- \dmntable{Calculate BMI}{U} % Title and HP
- {Weight(kgs),Length(m)}{BMI} % Input, output
- {---,---,weight/length*length} % Cell values
- \caption{Example of a DMN table}
-\end{figure}
-
-
-\begin{lstlisting}[language=tex, frame=single, basicstyle=\small]
-\begin{ligure}[H]
- \centering
- \dmntable{Decide BMI Level}{U} % Title and HP
- {BMI}{BMI Level, Risk Level} % Input, output
- {$< 18.5$, Underweight, Increased,
- $[18.5..24.9]$, Normal, Low,
- $[25..29.9]$, overweight, Increased,
- $[30..34.9]$, Obese I, High,
- $[35..39.9]$, Obese II, Very High,
- $> 39.9$, Extreme Obesity, Extremely High}
- \caption{Example of a DMN table}
-\end{figure}
-\end{lstlisting}
-\begin{figure}[H]
- \centering
- \dmntable{Decide BMI Level}{U} % Title, HP
- {BMI}{BMI Level, Risk Level} % Input, output
- {$< 18.5$, Underweight, Increased,
- $[18.5..24.9]$, Normal, Low,
- $[25..29.9]$, overweight, Increased,
- $[30..34.9]$, Obese I, High,
- $[35..39.9]$, Obese II, Very High,
- $> 39.9$, Extreme Obesity, Extremely High}
- \caption{Example of a larger DMN table}
-\end{figure}
-
-\begin{lstlisting}[language=tex, frame=single, basicstyle=\tiny]
-\begin{figure}[H]
- \centering
- \dmntable{Decide Risk Level}{U}
- {BMI level, Waist(cm)}{Risk Level}
- {Overweight, $<=88$, Increased,
- Overweight, $ > 88$, High,
- Obese I,$ <= 88$, High,
- Obese II, ---, Very High,
- Extreme Obesity, ---, Extremely High,
- {not(Overweight, Obese I, Obese II, Extreme Obesity)}, ---, Low
- }
- \caption{Example of cell with multiple values}
- \label{ex2}
-\end{figure}
-\end{lstlisting}
-
-\begin{figure}[H]
- \centering
- \dmntable{Decide Risk Level}{U}
- {BMI level, Waist(cm)}{Risk Level}
- {Overweight, $<=88$, Increased,
- Overweight, $ > 88$, High,
- Obese I,$ <= 88$, High,
- Obese II, ---, Very High,
- Extreme Obesity, ---, Extremely High,
- {not(Overweight, Obese I, Obese II, Extreme Obesity)}, ---, Low
- }
- \caption{Example of cell with multiple values}
- \label{ex2}
-\end{figure}
-
-\begin{lstlisting}[language=tex, frame=single, basicstyle=\tiny]
-\begin{figure}[H]
- \centering
- \dmntable{Rule 1}{U}
- {Age, Service Years}{Eligible1}
- {$\leq18$, ---, Yes,
- $\geq60$, ---, Yes,
- {$[18, 60]$}, $\geq 30$, Yes
- }
- \dmntable{Rule 2}{U}
- {Age, Service Years}{Eligible2}
- {---,$\geq30$, Yes,
- $\geq60$,$<30$, Yes
- }
- \dmntable{Rule 3}{U}
- {Age, Service Years}{Eligible3}
- {$< 45$, {$[15, 30)$}, Yes,
- $> 45$, ---, Yes
- }
- \dmntable{Vacation days}{C+}
- {Eligible1, Eligible2, Eligble3}{Vacation Days}
- {---, ---, ---, 22,
- Yes, ---, ---, 5,
- ---, Yes, ---, 3,
- No, ---, Yes, 2
- }
- \caption{dmn table example for the Vacation Days}
-\end{figure}
-\end{lstlisting}
-\begin{figure}[H]
- \centering
- \dmntable{Rule 1}{U}
- {Age, Service Years}{Eligible1}
- {$\leq18$, ---, Yes,
- $\geq60$, ---, Yes,
- {$[18, 60]$}, $\geq 30$, Yes
- }
- \dmntable{Rule 2}{U}
- {Age, Service Years}{Eligible2}
- {---,$\geq30$, Yes,
- $\geq60$,$<30$, Yes
- }
- \dmntable{Rule 3}{U}
- {Age, Service Years}{Eligible3}
- {$< 45$, {$[15, 30)$}, Yes,
- $> 45$, ---, Yes
- }
- \dmntable{Vacation days}{C+}
- {Eligible1, Eligible2, Eligble3}{Vacation Days}
- {---, ---, ---, 22,
- Yes, ---, ---, 5,
- ---, Yes, ---, 3,
- No, ---, Yes, 2
- }
- \caption{DMN table example for the Vacation Days}
-\end{figure}
-
-
-\section{Contributing}
-
-Contributions are always welcome.
-The project is hosted at \url{https://gitlab.com/Vadevesi/dmn-tex}
-
-\end{document}
diff --git a/macros/latex/contrib/decision-table/decision-table.dtx b/macros/latex/contrib/decision-table/decision-table.dtx
new file mode 100644
index 0000000000..ba9eada069
--- /dev/null
+++ b/macros/latex/contrib/decision-table/decision-table.dtx
@@ -0,0 +1,474 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2020 by S. Vandevelde, F. Pantigny
+% ------------------------------------------------
+%
+% This file may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in:
+%
+% http://www.latex-project.org/lppl.txt
+%
+% and version 1.3c or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+%
+% \fi
+% \iffalse
+%
+\def\dmnfileversion{0.0.3}
+\def\dmnfiledate{2020/12/08}
+%
+%<*batchfile>
+\begingroup
+\input l3docstrip.tex
+\keepsilent
+\usedir{tex/latex/cascade}
+\preamble
+
+Copyright (C) 2020 by S.Vandevelde, F. Pantigny
+-----------------------------------
+
+This file may be distributed and/or modified under the
+conditions of the LaTeX Project Public License, either version 1.3
+of this license or (at your option) any later version.
+The latest version of this license is in:
+
+http://www.latex-project.org/lppl.txt
+
+and version 1.3c or later is part of all distributions of LaTeX
+version 2005/12/01 or later.
+
+\endpreamble
+\askforoverwritefalse
+\endgroup
+%</batchfile>
+%
+%<@@=cascade>
+%<*driver>
+\documentclass[dvipsnames]{l3doc}% option dvipsnames is for xcolor (loaded by tikz)
+\usepackage{xltxtra}
+\usepackage{geometry}
+\geometry{left=2.8cm,right=2.8cm,top=2.5cm,bottom=2.5cm,papersize={21cm,29.7cm}}
+\setlength{\fboxsep}{0pt}
+\usepackage{tikz}
+\usepackage{hyperref}
+\usepackage{listings}
+\usepackage{float}
+\usetikzlibrary{calc}
+\usepackage{decision-table}
+\hfuzz=5cm
+\def\interitem{\vskip 7mm plus 2 mm minus 3mm}
+\def\emphase{\bgroup\color{RoyalPurple}\let\next=}
+\fvset{commandchars=\~\#\@,formatcom={\color{gray}}}
+\parindent 0pt
+\skip\footins = 2\bigskipamount
+
+
+
+\begin{document}
+\DocInput{decision-table.dtx}
+\end{document}
+%</driver>
+% \fi
+% \title{The package \pkg{decision-table}\thanks{This document corresponds to the
+% version~\dmnfileversion\space of \pkg{decision-table}, at the date of~\dmnfiledate.}}
+% \author{S. Vandevelde, F. Pantigny \\ \texttt{s.vandevelde@kuleuven.be} \\ \texttt{fpantigny@wanadoo.fr}}
+%
+% \maketitle
+%
+% \begin{abstract}
+% The LaTeX package \pkg{decision-table} provides a command |\dmntable|, which allows for an easy way to generate decision tables in the Decision Model and Notation (DMN) format. (See Fig. \ref{ex1})
+% This package ensures consistency in the tables (i.e. fontsize), and is thus a better alternative to inserting tables via images.
+% \end{abstract}
+%
+%
+%
+% \vspace{1cm}
+% \section{Description}
+%
+% The \texttt{decision-table} package allows for an easy way to generate decision tables in the Decision Model and Notation (DMN) format. (See Fig. \ref{ex1})
+% This package ensures consistency in the tables (i.e. fontsize), and is thus a better alternative to inserting tables via images.
+%
+% \begin{figure}[H]
+% \centering
+% \dmntable{Calculate BMI}{U}{Weight(kgs),Length(m)}{BMI}{ % ---,---,weight/length*length}
+% \caption{Example of a DMN table}
+% \label{ex1}
+% \end{figure}
+% \section{How to use}
+%
+% The \texttt{decision-table} package adds the \texttt{dmntable} command, with which tables can be created.
+% This command expands into a \texttt{tabular}, so it can be used within a \texttt{table} or \texttt{figure} environment.
+% Furthermore, this allows labels and captions to be added seamlessly.
+% It is also possible to place multiple DMN tables in one \texttt{table}/\texttt{figure} environment.
+%
+% The \texttt{dmntable} command has the following inputs:
+% \begin{itemize}
+% \item title
+% \item hit policy
+% \item input column headers
+% \item output column headers
+% \item the table values
+% \end{itemize}
+% The command is used as follows:
+% \begin{lstlisting}[language=tex, frame=single]
+% \dmntable{title}{hitpolicy}{input}{output}{values}
+% \end{lstlisting}
+%
+% The input, output and cell values are split by a comma.
+% It is not necessary to include the row numbers for the cell values.
+% For example, \ref{ex1} is generated by the following code:
+% \begin{lstlisting}[language=tex, frame=single, basicstyle=\small]
+% \begin{figure}[H]
+% \centering
+% \dmntable{Calculate BMI}{U} % Title and HP
+% {Weight(kgs),Length(m)}{BMI} % Input, output
+% {---,---,weight/length*length} % Cell values
+% \caption{Example of a DMN table}
+% \label{ex1}
+% \end{figure}
+% \end{lstlisting}
+%
+% If a cell value contains multiple values (e.g. multiple string values), then accolades should be written around them.
+% See the example \ref{ex2}.
+%
+%
+% \section{Examples}
+% This section contains some example code and their resulting tables.
+%
+% \begin{lstlisting}[language=tex, frame=single, basicstyle=\small]
+% \begin{figure}[H]
+% \centering
+% \dmntable{Calculate BMI}{U} % Title and HP
+% {Weight(kgs),Length(m)}{BMI} % Input, output
+% {---,---,weight/length*length} % Cell values
+% \caption{Example of a DMN table}
+% \end{figure}
+% \end{lstlisting}
+% \begin{figure}[H]
+% \centering
+% \dmntable{Calculate BMI}{U}
+% {Weight(kgs),Length(m)}{BMI}
+% {---,---,weight/length*length}
+% \caption{Example of a DMN table}
+% \end{figure}
+%
+%
+% \begin{lstlisting}[language=tex, frame=single, basicstyle=\small]
+% \begin{ligure}[H]
+% \centering
+% \dmntable{Decide BMI Level}{U}
+% {BMI}{BMI Level, Risk Level}
+% {$< 18.5$, Underweight, Increased,
+% $[18.5..24.9]$, Normal, Low,
+% $[25..29.9]$, overweight, Increased,
+% $[30..34.9]$, Obese I, High,
+% $[35..39.9]$, Obese II, Very High,
+% $> 39.9$, Extreme Obesity, Extremely High}
+% \caption{Example of a DMN table}
+% \end{figure}
+% \end{lstlisting}
+% \begin{figure}[H]
+% \centering
+% \dmntable{Decide BMI Level}{U}
+% {BMI}{BMI Level, Risk Level}
+% {$< 18.5$, Underweight, Increased,
+% $[18.5..24.9]$, Normal, Low,
+% $[25..29.9]$, overweight, Increased,
+% $[30..34.9]$, Obese I, High,
+% $[35..39.9]$, Obese II, Very High,
+% $> 39.9$, Extreme Obesity, Extremely High}
+% \caption{Example of a larger DMN table}
+% \end{figure}
+%
+% \begin{lstlisting}[language=tex, frame=single, basicstyle=\tiny]
+% \begin{figure}[H]
+% \centering
+% \dmntable{Decide Risk Level}{U}
+% {BMI level, Waist(cm)}{Risk Level}
+% {Overweight, $<=88$, Increased,
+% Overweight, $ > 88$, High,
+% Obese I,$ <= 88$, High,
+% Obese II, ---, Very High,
+% Extreme Obesity, ---, Extremely High,
+% {not(Overweight, Obese I, Obese II, Extreme Obesity)}, ---, Low
+% }
+% \caption{Example of cell with multiple values}
+% \label{ex2}
+% \end{figure}
+% \end{lstlisting}
+%
+% \begin{figure}[H]
+% \centering
+% \dmntable{Decide Risk Level}{U}
+% {BMI level, Waist(cm)}{Risk Level}
+% {Overweight, $<=88$, Increased,
+% Overweight, $ > 88$, High,
+% Obese I,$ <= 88$, High,
+% Obese II, ---, Very High,
+% Extreme Obesity, ---, Extremely High,
+% {not(Overweight, Obese I, Obese II, Extreme Obesity)}, ---, Low
+% }
+% \caption{Example of cell with multiple values}
+% \label{ex2}
+% \end{figure}
+%
+% \begin{lstlisting}[language=tex, frame=single, basicstyle=\tiny]
+% \begin{figure}[H]
+% \centering
+% \dmntable{Rule 1}{U}
+% {Age, Service Years}{Eligible1}
+% {$\leq18$, ---, Yes,
+% $\geq60$, ---, Yes,
+% {$[18, 60]$}, $\geq 30$, Yes
+% }
+% \dmntable{Rule 2}{U}
+% {Age, Service Years}{Eligible2}
+% {---,$\geq30$, Yes,
+% $\geq60$,$<30$, Yes
+% }
+% \dmntable{Rule 3}{U}
+% {Age, Service Years}{Eligible3}
+% {$< 45$, {$[15, 30)$}, Yes,
+% $> 45$, ---, Yes
+% }
+% \dmntable{Vacation days}{C+}
+% {Eligible1, Eligible2, Eligble3}{Vacation Days}
+% {---, ---, ---, 22,
+% Yes, ---, ---, 5,
+% ---, Yes, ---, 3,
+% No, ---, Yes, 2
+% }
+% \caption{dmn table example for the Vacation Days}
+% \end{figure}
+% \end{lstlisting}
+% \begin{figure}[H]
+% \centering
+% \dmntable{Rule 1}{U}
+% {Age, Service Years}{Eligible1}
+% {$\leq18$, ---, Yes,
+% $\geq60$, ---, Yes,
+% {$[18, 60]$}, $\geq 30$, Yes
+% }
+% \dmntable{Rule 2}{U}
+% {Age, Service Years}{Eligible2}
+% {---,$\geq30$, Yes,
+% $\geq60$,$<30$, Yes
+% }
+% \dmntable{Rule 3}{U}
+% {Age, Service Years}{Eligible3}
+% {$< 45$, {$[15, 30)$}, Yes,
+% $> 45$, ---, Yes
+% }
+% \dmntable{Vacation days}{C+}
+% {Eligible1, Eligible2, Eligble3}{Vacation Days}
+% {---, ---, ---, 22,
+% Yes, ---, ---, 5,
+% ---, Yes, ---, 3,
+% No, ---, Yes, 2
+% }
+% \caption{DMN table example for the Vacation Days}
+% \end{figure}
+%
+%
+% \section{Contributing}
+%
+% Contributions are always welcome.
+% The project is hosted at \url{https://gitlab.com/Vadevesi/dmn-tex}
+
+%
+% \newgeometry{left=4cm}
+%
+% \section{Implementation}
+%
+%<@@=dmn>
+%
+% \bigskip
+%
+%
+% We give the traditional declaration of a package written with |expl3|:
+% \begin{macrocode}
+\RequirePackage{l3keys2e}
+\ProvidesExplPackage
+ {decision-table}
+ {\dmnfiledate}
+ {\dmnfileversion}
+ {Table of decision}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\RequirePackage { nicematrix }
+% \end{macrocode}
+%
+% \bigskip
+% We define the command |\dmntable| with the tools of \pkg{xparse} (in 2020
+% October, \pkg{xparse} will be included in the LaTeX kernel).
+% \begin{macrocode}
+\NewDocumentCommand \dmntable { m m m m m }
+ {
+% \end{macrocode}
+% The clist (\emph{commad separated list}) |\l_@@_input_clist| is for the list
+% of the names of the input fields.
+% \begin{macrocode}
+ \clist_clear_new:N \l_@@_input_clist
+ \clist_set:Nn \l_@@_input_clist { #3 }
+% \end{macrocode}
+%
+% \bigskip
+% The clist |\l_@@_output_clist| is for the list of the names of the output fields.
+% \begin{macrocode}
+ \clist_clear_new:N \l_@@_output_clist
+ \clist_set:Nn \l_@@_output_clist { #4 }
+% \end{macrocode}
+%
+% \bigskip
+% The integer |\l_@@_input_int| is the number of the input fields.
+% \begin{macrocode}
+ \int_zero_new:N \l_@@_input_int
+ \int_set:Nn \l_@@_input_int { \clist_count:N \l_@@_input_clist }
+% \end{macrocode}
+%
+% \bigskip
+% The integer |\l_@@_output_int| is the number of the output fields.
+% \begin{macrocode}
+ \int_zero_new:N \l_@@_output_int
+ \int_set:Nn \l_@@_output_int { \clist_count:N \l_@@_output_clist }
+% \end{macrocode}
+%
+%
+% \bigskip
+% The sequence |\l_@@_cells_seq| is the sequence of all the cells of the
+% ``body'' of the tabular.
+% \begin{macrocode}
+ \seq_clear_new:N \l_@@_cells_seq
+ \seq_set_split:Nnn \l_@@_cells_seq { , } { #5 }
+% \end{macrocode}
+%
+%
+% \vspace{1cm}
+% Now, we will begin the construction of the tabular (a |{NiceTabular}| of
+% \pkg{nicematrix}).
+%
+% \bigskip
+% The command |\use:x| will expand its argument. Indeed, the preamble of the
+% |{NiceTabular}| (which has the same format as a preamble of |{tabular}| must
+% be computed before the execution of the |\begin{NiceTabular}|.
+% \begin{macrocode}
+ \use:x
+ {
+ \exp_not:N \begin { NiceTabular }
+% \end{macrocode}
+% Here is the preamble of the tabular. The command |\prg_replicate:nn| is
+% expandable and hence will be expanded by the |use:x|.
+% \begin{macrocode}
+ { r \prg_replicate:nn { \l_@@_input_int + \l_@@_output_int } l }
+% \end{macrocode}
+% Here is the list of options of the |{NiceTabular}| (a standard tabular of
+% |{array}| don't have such list of options. Once again, we have to compute some
+% quantities in this list of options before the execution of |\begin{NiceTabular}|.
+% \begin{macrocode}
+ [
+% \end{macrocode}
+% The key |hvlines-except-corners| will draw all the rules of the tabular,
+% excepted in the (upper right) corner.
+% \begin{macrocode}
+ hvlines-except-corners ,
+% \end{macrocode}
+% The key |code-before| of |{NiceTabular}| contains instructions to color the
+% cells \emph{before} the rules (doing so, the resulting \textsc{pdf} gives
+% better results in the \textsc{pdf} viewers).
+% \begin{macrocode}
+ code-before =
+% \end{macrocode}
+% First, a |\rectanglecolor| for the labels of the ``input'' fields. The command
+% |\int_eval:n| is expandable and, hence, will be expanded by the |\use:x|. On
+% the other side, we have to prevent the expansion of |\rectanglecolor| which,
+% in fact, at that point is not defined (it will be defined by \pkg{nicematrix}
+% after the construction of the array).
+% \begin{macrocode}
+ \exp_not:N \rectanglecolor
+ { blue!10!green!60!black!30 }
+ { 2 - 2 }
+ { 2 - \int_eval:n { \l_@@_input_int + 1 } }
+% \end{macrocode}
+% A |\rectanglecolor| for the labels of the ``output'' fields.
+% \begin{macrocode}
+ \exp_not:N \rectanglecolor
+ { green!30!blue!15 }
+ { 2 - \int_eval:n { \l_@@_input_int + 2 } }
+ { 2 - \int_eval:n { \l_@@_input_int + \l_@@_output_int + 1 } }
+ ]
+ }
+% \end{macrocode}
+% Now, we begin the body of the tabular (the environment |{NiceTabular}|).
+%
+% \medskip
+% The body begins by a |\multicolumn| for the title. However, we have to compute
+% the number of cells of that |\multicolumn|. That's why we have to expand the
+% first argument of the |\multicolumn| before executing the |\multicolumn|.
+% However, we have to do that in an expandable way in order to prevent the
+% functionnality of the |\multicolumn| (which internally give a |\omit| of TeX).
+% That's why we have to use |\exp_args:Ne| (|\exp_args:Nx| would not do the job).
+% \begin{macrocode}
+ \exp_args:Ne \multicolumn
+ { \int_eval:n { \l_@@_input_int + 1 } }
+ { l }
+ { #1 } \\
+% \end{macrocode}
+% |#2| is the \emph{hit policy}.
+% \begin{macrocode}
+ #2 &
+% \end{macrocode}
+% Now, the fields (``input fields'' and ``output fields''). By using
+% |\clist_use:Nn|, we replace the commas by ampersands (|&|).
+% \begin{macrocode}
+ \clist_use:Nn \l_@@_input_clist { & } &
+ \clist_use:Nn \l_@@_output_clist { & } \\
+% \end{macrocode}
+% Now, all the rows corresponding to the rules. We begin a loop over all the
+% cells with |\seq_map_inline:Nn|.
+% \begin{macrocode}
+ 1 &
+ \seq_map_inline:Nn \l_@@_cells_seq
+ {
+% \end{macrocode}
+% |\c@jCol| and |\c@iRow| are counters provided by |{NiceTabular}| for the
+% current column and the current row. If you are in the first column, we insert
+% the number of rule.
+% \begin{macrocode}
+ \int_compare:nT { \c@jCol = 0 } { \int_eval:n { \c@iRow - 1 } & }
+% \end{macrocode}
+% Now, we add one composante of |\l_@@_cells_seq|.
+% \begin{macrocode}
+ ##1
+% \end{macrocode}
+% Before the following cell, we have, of course, to add |\\| (if we are at the
+% end of the row) or |&| (elsewhere).
+% \begin{macrocode}
+ \int_compare:nTF { \c@jCol = \l_@@_input_int + \l_@@_output_int + 1 }
+ { \\ }
+ { & }
+ }
+ \end { NiceTabular }
+ }
+% \end{macrocode}
+%
+%
+%
+% \tableofcontents
+%
+% \end{document}
+%
+% Local Variables:
+% TeX-fold-mode: t
+% TeX-fold-preserve-comments: nil
+% flyspell-mode: nil
+% fill-column: 80
+% End:
+
+
+
+
+
+
diff --git a/macros/latex/contrib/decision-table/decision-table.ins b/macros/latex/contrib/decision-table/decision-table.ins
new file mode 100644
index 0000000000..e6e24bff6f
--- /dev/null
+++ b/macros/latex/contrib/decision-table/decision-table.ins
@@ -0,0 +1,47 @@
+%%
+%% Copyright (C) 2020 by S. Vandevelde and F. Pantigny
+%%
+%%
+%% This file may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3c of this license or (at your option) any later
+%% version. The latest version of this license is in:
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% and version 1.3c or later is part of all distributions of
+%% LaTeX version 2005/12/01 or later.
+%%
+\input l3docstrip.tex
+\keepsilent
+\usedir{tex/latex/decision-table}
+\preamble
+
+Copyright (C) 2020 by S. Vandevelde, F. Pantigny
+
+This file may be distributed and/or modified under the
+conditions of the LaTeX Project Public License, either
+version 1.3c of this license or (at your option) any later
+version. The latest version of this license is in:
+
+ http://www.latex-project.org/lppl.txt
+
+and version 1.3c or later is part of all distributions of
+LaTeX version 2005/12/01 or later.
+
+\endpreamble
+\generate{\file{decision-table.sty}{\from{decision-table.dtx}{package}}}
+\Msg{*********************************************************}
+\Msg{*}
+\Msg{* To finish the installation you have to move the}
+\Msg{* following file into a directory searched by TeX:}
+\Msg{*}
+\Msg{* \space\space decision-table.sty}
+\Msg{*}
+\Msg{* To produce the documentation run the file decision-table.dtx}
+\Msg{* through XeLaTeX.}
+\Msg{*}
+\Msg{* Happy TeXing!}
+\Msg{*********************************************************}
+\endbatchfile
+
diff --git a/macros/latex/contrib/decision-table/decision-table.pdf b/macros/latex/contrib/decision-table/decision-table.pdf
new file mode 100644
index 0000000000..001dea8435
--- /dev/null
+++ b/macros/latex/contrib/decision-table/decision-table.pdf
Binary files differ
diff --git a/macros/latex/contrib/decision-table/decision-table.sty b/macros/latex/contrib/decision-table/decision-table.sty
deleted file mode 100644
index 2e1bf38539..0000000000
--- a/macros/latex/contrib/decision-table/decision-table.sty
+++ /dev/null
@@ -1,149 +0,0 @@
-% The decision-table package is the easiest way to generate tables in the Decision Model and Notation (DMN) format.
-%
-%% decision-table.sty
-%% Copyright 2020 Simon Vandevelde
-%
-% This work may be distributed and/or modified under the
-% conditions of the LaTeX Project Public License, either version 1.3c
-% of this license or (at your option) any later version.
-% The latest version of this license is in
-% http://www.latex-project.org/lppl.txt
-% and version 1.3c or later is part of all distributions of LaTeX
-% version 2005/12/01 or later.
-%
-% This work has the LPPL maintenance status “maintained”.
-%
-% The Current Maintainer of this work is Simon Vandevelde.
-%
-% This work consists of the file decision-table.sty
-%
-%% This package creates the \dmntable command.
-%% Requires the following input:
-%% 1: table title
-%% 2: hit policy
-%% 3: input columns, separated by commas (e.g. 'weight, length')
-%% 4: output columns, separated by commas (e.g. 'BMI')
-%% 5: cell values, separated by commas (e.g. '>80, ---, weight/length*length,
-%
-%% The package depends on two other packages: 'colortbl' and 'booktabs'.
-
-\ProvidesPackage{decision-table}[2020/08/22 v0.0.2 LaTeX package for DMN]
-
-
-\RequirePackage{colortbl} % Color in the cells.
-\RequirePackage{booktabs} % Special header format.
-
-
-\definecolor{inputgreen}{RGB}{182, 215, 168}
-\definecolor{inputblue}{RGB}{207, 226, 243}
-\definecolor{glossaryorange}{RGB}{255, 123, 89}
-\definecolor{executered}{RGB}{236, 155, 164}
-\newcommand{\inputcol}[1]{\cellcolor{inputgreen} \textbf{#1}}
-\newcommand{\outputcol}[1]{\cellcolor{inputblue} \textbf{#1}}
-\newcommand{\glossarycol}[0]{\cellcolor{glossaryorange}}
-\newcommand{\executecol}[0]{\cellcolor{executered}}
-\newcommand{\dmnfont}[0]{\fontsize{7}{9} \fontfamily{put} \selectfont \setlength{\belowrulesep}{0pt}}
-
-% Code to iterate over strings separated by comma's and executing a macro on each of them.
-\makeatletter
-
-% Functional foreach construct
-% 1 - Function to call on each comma-separated item in param 3
-% 2 - Parameter to pass to function in param 1 as first parameter
-% 3 - Comma-separated list of items to pass as second parameter to function in param 1
-\def\foreach#1#2#3{%
- \@test@foreach{#1}{#2}#3,\@end@token%
-}
-
-% Internal helper function - Eats one input
-\def\@swallow#1{}
-
-% Internal helper function - Checks the next character after param 1 and param 2 and
-% continues loop iteration if \@end@token is not found
-\def\@test@foreach#1#2{%
- \@ifnextchar\@end@token%
- {\@swallow}%
- {\@foreach{#1}{#2}}%
-}
-
-% Internal helper function - Calls 1{2}{3} and recurses
-% The magic of splitting the third parameter occurs in the pattern matching of the \def
-\def\@foreach#1#2#3,#4\@end@token{%
- #1{#2}{#3}%
- \@test@foreach{#1}{#2}#4\@end@token%
-}
-
-%%% Macro's which are used in the above iteration function.
-% Formats the inputcol as "\& \inputcol('input')".
-\def\makeinputcol#1#2{&\inputcol{#2}}
-% Formats the outputcol as "\& \outputcol('output')".
-\def\makeoutputcol#1#2{&\outputcol{#2}}
-
-\def\makecol#1#2{ % Format the cells. Needs to add in \\\hline after the right amount of cells.
- \ifnum\colcounter=\nbcols% If we're at the end of a row, reset the counter and add the \\\hline
- \global\colcounter=0\relax
- \uppercase{\\} \hline \the\rowcounter
- \global\advance\rowcounter by 1
- \else
- \fi%5
- \global\advance\colcounter by 1
- \uppercase{&} {#2}
-}
-
-% Increments the counters by one, in order to count inputs or outputs using the above loop function.
-\def\countinput#1#2{\global\advance\nbinputs by 1\relax}
-\def\countoutput#1#2{\global\advance\nboutputs by 1\relax}
-
-\makeatother
-
-% Command to create a DMN table in a tabular environment.
-% Requires the following input:
-% 1: table title
-% 2: hit policy
-% 3: input columns, separated by commas (e.g. 'weight, length')
-% 4: output columns, separated by commas (e.g. 'BMI')
-% 5: cell values, separated by commas (e.g. '>80, ---, weight/length*length,
-% <80, ---, length/weight*weight')
-\newcommand{\dmntable}[5]{
- % Create and instantiate counters.
- \newcount{\nbinputs}
- \newcount{\nboutputs}
- \newcount{\nbcols} % The width of a table.
- \newcount{\colcounter}
- \newcount{\rowcounter}
- \nbinputs=0\relax
- \nboutputs=0\relax
- \nbcols=0\relax
- \colcounter=0\relax
- \rowcounter=2\relax
-
- \newcount\X
- {
- % Set the correct font.
- \dmnfont
-
- % Count the amount of inputs and outputs.
- \foreach{\countinput}{}{#3}
- \foreach{\countoutput}{}{#4}
- % Sum them together to find the number of columns of the table.
- \advance\nbcols by \nbinputs
- \advance\nbcols by \nboutputs
-
- % X is the first index number, always 1.
- \X=1
- \advance\nbinputs by 1\relax % To make space for the index
- \begin{tabular}{|r|*{\nbcols}{l|}}
- \expandafter\cmidrule{1-\nbinputs} % Makes sure the top hline is not the full width.
- \multicolumn{\nbinputs}{|l|}{#1} & \multicolumn{\nboutputs}{c}{}\\ % Set the input and output as multicolumn.
- \hline
- #2 \foreach{\makeinputcol}{}{#3} \foreach{\makeoutputcol}{}{#4} \\ % Generate input and outputheaders.
- \hline
- \the\X \foreach{\makecol}{}{#5} \\ % Generate the cell values
- \hline
- \end{tabular}
- }
-}
-
-\endinput
-%%%
-%%% End of file 'dmn.sty'
diff --git a/macros/latex/contrib/draftwatermark/README.md b/macros/latex/contrib/draftwatermark/README.md
index 7b22c3a1fc..527bffa1ff 100644
--- a/macros/latex/contrib/draftwatermark/README.md
+++ b/macros/latex/contrib/draftwatermark/README.md
@@ -6,27 +6,37 @@ document. Typical usage may consist in writing words such as "DRAFT" or
"CONFIDENTIAL" across document pages. The package may remind in some sense
`draftcopy` by Dr. Juergen Vollmer, but its implementation is lighter (as the
reduced code footprint shows) and does not rely on postscript specials, making
-the package fully compatible with pdfLaTeX, XeLaTeX and LuaLaTeX. The package
-depends on `everypage.sty` by the same author.
+the package fully compatible with pdfLaTeX, XeLaTeX and LuaLaTeX.
The package focus is on simplicity, for complex layouts please consider
-`scrlayer.sty` in the KOMA script bundle.
+`scrlayer.sty` in the KOMA script bundle or directly employing the new
+LaTeX hooks `shiphout/background` and `shipout/foreground`.
The `draftwatermark` package is copyright 2006, 2012, 2020 by Sergio Callegari
<sergio.callegari@gmail.com>.
-This work consists of this `README.md` file, as well as files `draftwatermark.dtx`,
-`draftwatermark.ins` and the derived file `draftwatermark.sty`.
+This work consists of this `README.md` file, as well as files:
+- `draftwatermark.dtx`,
+- `draftwatermark.ins`
+and the derived files.
-To install the package, run LaTeX on the installation script
+To install the package, run TeX/LaTeX on the installation script
`draftwatermark.ins` and follow the instructions provided by the script itself.
-This work may be distributed and/or modified under the conditions of the LaTeX
-Project Public License version 1.3. This license is available at
-<https://www.latex-project.org/lppl/> and it is part of all distributions of
-LaTeX version 2005/12/01 or later.
-This work has the LPPL maintenance status "author-maintained".
+## License
+
+Package `draftwatermark` may be distributed and/or modified under the
+conditions of the LaTeX Project Public License, version 1.3. This license is
+available at <https://www.latex-project.org/lppl/lppl-1-3c/>.
+
+
+## Maintenace status
+
+This work has the LPPL maintenance status "maintained".
+
+
+## Development and bug tracking
Development happens on github at
<https://github.com/callegar/LaTeX-draftwatermark>. Please refer to that site
diff --git a/macros/latex/contrib/draftwatermark/draftwatermark.dtx b/macros/latex/contrib/draftwatermark/draftwatermark.dtx
index b759f29eb7..216fd1072c 100644
--- a/macros/latex/contrib/draftwatermark/draftwatermark.dtx
+++ b/macros/latex/contrib/draftwatermark/draftwatermark.dtx
@@ -8,14 +8,16 @@
% a contribution to the LaTeX2e system.
% ---------------------------------------------
%
-% It may be distributed and/or modified under the conditions of the
-% LaTeX Project Public License, version 1.3. This license is at
-% https://www.latex-project.org/lppl/ and is part
-% of all distributions of LaTeX version 2005/12/01 or later.
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, version 1.3c.
+% This license is in
+% https://www.latex-project.org/lppl/lppl-1-3c/
+% and is part of all distributions of LaTeX later than
+% 2008-05-04.
%
-% This work has the LPPL maintenance status "author-maintained".
+% This work has the LPPL maintenance status "maintained".
%
-% This program consists of the files listed in the README file
+% This program consists of the files listed in the README.md file
% included in the package.
%
%<*driver>
@@ -27,40 +29,8 @@
\usepackage{textcomp}
\usepackage{url}
\EnableCrossrefs
-
-\setcounter{IndexColumns}{2}
-\setlength{\IndexMin}{3cm}
-
-\DoNotIndex{\\}
-\DoNotIndex{\begin, \end, \begingroup, \endgroup}
-\DoNotIndex{\csname, \endcsname}
-\DoNotIndex{\if, \else, \fi}
-\DoNotIndex{\ifx, \fi}
-\DoNotIndex{\ifodd, \fi}
-\DoNotIndex{\@car, \@empty, \@ifnextchar, \@nil, \@onelevel@sanitize,
- \@tempboxa, \@tempdima, \@tempdimb, \@tfor}
-\DoNotIndex{\AddEverypageHook, \AddThispageHook, \addtolength, \author}
-\DoNotIndex{\bfseries, \box}
-\DoNotIndex{\color}
-\DoNotIndex{\DeclareBoolOption, \DeclareComplementaryOption,
- \DeclareStringOption, \def, \define@key, \dimexpr, \DisableKeyvalOption,
- \do, \documentclass, \dp}
-\DoNotIndex{\edef, \expandafter}
-\DoNotIndex{\fbox, \fontsize}
-\DoNotIndex{\hbox, \hspace, \hss, \ht}
-\DoNotIndex{\let, \lipsum}
-\DoNotIndex{\maketitle, \MyWM}
-\DoNotIndex{\newcommand, \newsavebox, \NeedsTeXFormat}
-\DoNotIndex{\PackageError, \paperheight, \paperwidth,
- \ProcessKeyvalOptions, \ProvidesPackage}
-\DoNotIndex{\relax, \RequirePackage, \rotatebox}
-\DoNotIndex{\savebox, \sbox, \scalebox, \section, \selectfont, \setkeys,
- \setlength, \sffamily, \shortstack}
-\DoNotIndex{\thepage, \title}
-\DoNotIndex{\usebox, \usepackage}
-\DoNotIndex{\vbox, \vspace, \vss}
-\DoNotIndex{\wd, \wmbox}
-
+\CodelineIndex
+\RecordChanges
\CodelineIndex
%\RecordChanges
\begin{document}
@@ -70,12 +40,47 @@
%
% \fi
%
-% \CheckSum{291}
+% \CheckSum{576}
%
% \def\filename{draftwatermark.dtx}
-% \def\fileversion{2.2}
-% \def\filedate{2020/06/29}
-% \def\docdate{2020/06/29}
+% \def\fileversion{3.0}
+% \def\filedate{2020/12/08}
+% \def\docdate{2020/12/08}
+%
+% \DoNotIndex{\\}
+% \DoNotIndex{\begin, \end, \begingroup, \endgroup}
+% \DoNotIndex{\csname, \endcsname}
+% \DoNotIndex{\if, \else, \fi}
+% \DoNotIndex{\ifx, \fi}
+% \DoNotIndex{\ifodd, \fi}
+% \DoNotIndex{\@car, \@empty, \@ifnextchar, \@ifundefined, \@nil,
+% \@onelevel@sanitize, \@tempboxa, \@tempdima, \@tempdimb, \@tfor}
+% \DoNotIndex{\AddEverypageHook, \AddThispageHook, \AddToHook, \AddToHookNext,
+% \addtolength, \author}
+% \DoNotIndex{\bfseries, \box}
+% \DoNotIndex{\color}
+% \DoNotIndex{\DeclareBoolOption, \DeclareComplementaryOption,
+% \DeclareStringOption, \def, \define@key, \depth, \dimexpr,
+% \DisableKeyvalOption, \do, \documentclass, \dp}
+% \DoNotIndex{\edef, \endinput, \expandafter}
+% \DoNotIndex{\fbox, \fontsize}
+% \DoNotIndex{\hbox, \hspace, \hss, \ht}
+% \DoNotIndex{\let, \lipsum}
+% \DoNotIndex{\maketitle, \MyWM, \MessageBreak}
+% \DoNotIndex{\newcommand, \newsavebox, \NeedsTeXFormat}
+% \DoNotIndex{\PackageError, \PackageWarningNoLine, \paperheight,
+% \paperwidth, \ProcessKeyvalOptions, \ProvidesPackage, \put}
+% \DoNotIndex{\raisebox, \relax, \RequirePackage, \RequirePackageWithOptions,
+% \rotatebox}
+% \DoNotIndex{\savebox, \sbox, \scalebox, \section, \selectfont, \setkeys,
+% \SetupKeyvalOptions, \setlength, \sffamily, \shortstack}
+% \DoNotIndex{\thepage, \title}
+% \DoNotIndex{\usebox, \usepackage}
+% \DoNotIndex{\vbox, \vspace, \vss}
+% \DoNotIndex{\wd, \wmbox}
+%
+% \setcounter{IndexColumns}{2}
+% \setlength{\IndexMin}{3cm}
%
% \newcommand*{\Lpack}[1]{\textsf {#1}} ^^A typeset a package
% \newcommand*{\Lopt}[1]{\texttt {#1}} ^^A typeset an option
@@ -97,28 +102,30 @@
% \maketitle
%
% \begin{abstract}
-% The \Lpack{draftwatermark} package extends \LaTeX\ providing a means
-% to add a watermark (typically textual and light gray, but possibly
-% more sophisticated) on the pages of a document (either on every page,
-% on the first page, or on selected pages). Typical usage may consist in
-% writing words such as ``DRAFT'' or ``CONFIDENTIAL'' across the
-% pages. The package may remind in some sense \Lpack{draftcopy} by
-% Dr.~Juergen Vollmer, but its implementation is lighter (as the reduced
-% code footprint shows) and does not rely on postscript specials, making
-% the package fully compatible with \hologo{pdfLaTeX}, \hologo{XeLaTeX}
-% and \hologo{LuaLaTeX}. The \Lpack{draftwatermark} package depends on
-% \Lpack{everypage} by the same author. Its feature set is somehow
-% restricted because the emphasis is on the simplicity of the
-% interface. For complex layouts, \Lpack{scrlayer.sty} from the
-% \emph{KOMA script} bundle may represent a valuable alternative.
+% The \Lpack{draftwatermark} package extends \hologo{LaTeX} providing a
+% means to add a watermark (typically textual and light gray, but
+% possibly more sophisticated) on the pages of a document (either on
+% every page, on the first page, or on selected pages). Typical usage
+% may consist in writing words such as ``DRAFT'' or ``CONFIDENTIAL''
+% across the pages. The package may remind in some sense
+% \Lpack{draftcopy} by Dr.~Juergen Vollmer, but its implementation is
+% lighter (as the reduced code footprint shows) and does not rely on
+% postscript specials, making the package fully compatible with
+% \hologo{pdfLaTeX}, \hologo{XeLaTeX} and \hologo{LuaLaTeX}. Its feature
+% set is somehow restricted because the emphasis is on the simplicity of
+% the interface. For complex layouts, consider \Lpack{scrlayer.sty} from
+% the \emph{KOMA script} bundle or directly using the new \hologo{LaTeX}
+% shipout hooks.
% \end{abstract}
%
% \section{Introduction}
-%
-% This package extends \LaTeX\ providing a means to add a textual, usually
-% light gray (but possibly colored) watermark on every page, the first
-% page, or selected pages of a document. Typical usage may consist in
-% writing words such as ``DRAFT'' or ``CONFIDENTIAL'' across document
+%
+% \changes{R1.0}{2006/06/30}{Initial release.}%
+% \changes{R1.1}{2012/01/06}{Many small fixes in the documentation.}
+% This package extends \hologo{LaTeX} providing a means to add a textual,
+% usually light gray (but possibly colored) watermark on every page, the
+% first page, or selected pages of a document. Typical usage may consist
+% in writing words such as ``DRAFT'' or ``CONFIDENTIAL'' across document
% pages.
%
% The package may remind in some sense \Lpack{draftcopy} by Dr.~Juergen
@@ -162,11 +169,10 @@
% other packages affecting the page building, e.g., with respect to the
% stacking order of the objects on the page. For any complex layout, or
% when the Z-ordering is important, the recommendation is to look at the
-% \Lpack{scrlayer} package in the \emph{KOMA script} bundle.
+% \Lpack{scrlayer} package in the \emph{KOMA script} bundle or to rely
+% directly on the new shipout hook mechanism provided by \hologo{LaTeX}.
+%
%
-% For the actual page building \Lpack{draftwatermark} depends on the
-% \Lpack{everypage} package by the same author.
-%
% \section{User interface}
% When loaded, \Lpack{draftwatermark} sets up a number of defaults
% (detailed later and modifiable by specific commands) and immediately
@@ -185,7 +191,8 @@
% |\usepackage[<options>]{draftwatermark}|
% \end{quote}
%
-% \DescribeMacro{\DraftwatermarkOptions}
+% \DescribeMacro{\DraftwatermarkOptions}
+% \changes{R2.0}{2020/03/08}{Introduction of a keyval option mechanism.}
% The package behavior can also be dynamically changed \emph{after the
% package is loaded} by the command |\DraftwatermarkOptions{<options>}|
% that can be used anywhere in the document source. In either case,
@@ -198,11 +205,13 @@
% command is a bit quirky, hence when specifying options with the
% |<key>=<value>| syntax, some values that are accepted by
% |\DraftwatermarkOptions| may cause issues when specifying options with
-% |\usepackage|.
-% \medskip
+% |\usepackage|. \medskip
%
% The available options are:
% \begin{itemize}
+% \changes{R1.1}{2012/01/06}{Introduce the ``stamp'', ``nostamp'' and
+% ``final'' options to control whether the watermark should actually
+% be printed.}^^A
% \item \verb!firstpageonly=true|false!\\
% If no value is provided, |true| is assumed. Default is |false|.\\
% Instructs \Lpack{draftwatermark} to only apply the watermark on the
@@ -322,21 +331,21 @@
% fact, sufficiently large to get the word ``DRAFT'', rotated at
% 45\textdegree, take about half of the page width.
%
-% Nonetheless asking for a large font may not work, if \LaTeX\ has not
-% been set up to use \emph{scalable} fonts. For this reason, the
-% recommendation is to always use \Lpack{draftwatermark} on \LaTeX\ or
-% \hologo{pdfLaTeX} together with other packages that trigger the usage of
-% fully scalable fonts (practical examples may be \Lpack{newtx} or
+% Nonetheless asking for a large font may not work, if \hologo{LaTeX} has
+% not been set up to use \emph{scalable} fonts. For this reason, the
+% recommendation is to always use \Lpack{draftwatermark} on \hologo{LaTeX}
+% or \hologo{pdfLaTeX} together with other packages that trigger the usage
+% of fully scalable fonts (practical examples may be \Lpack{newtx} or
% \Lpack{mathptmx}, etc.). An even better alternative is to use modern
% \TeX\ engines, as in \hologo{XeLaTeX} or \hologo{LuaLaTeX} with
% \Lpack{fontspec}. In any case, recall that even with scalable fonts,
-% \LaTeX\ may be unable to deal with extremely large font sizes (e.g.,
-% $\gg 5\,\mathrm{cm}$). If really large letters are required for the
-% watermark, a suitable combination of |fontsize| and |scale| may be
+% \hologo{LaTeX} may be unable to deal with extremely large font sizes
+% (e.g., $\gg 5\,\mathrm{cm}$). If really large letters are required for
+% the watermark, a suitable combination of |fontsize| and |scale| may be
% needed.
%
-% One can immediately realize when \LaTeX\ is unable to deal with the
-% package default or selected |fontsize| from two things: (i) a font
+% One can immediately realize when \hologo{LaTeX} is unable to deal with
+% the package default or selected |fontsize| from two things: (i) a font
% warning from \LaTeX; and (ii) a tiny watermark text whose size seems not
% to react to the |fontsize| option. In this case, either switch to
% scalable fonts or select a small |fontsize| (e.g., |12pt|) together with
@@ -352,21 +361,21 @@
% (e.g., |\bfseries|). In fact, it is also possible to use a command to
% include an image as the text. In case line breaks are present, the text
% is left, right, center aligned according to the |alignment| option. A
-% word of caution is necessary, though. To use \LaTeX\ commands in the
-% watermark text, please configure the latter via the
+% word of caution is necessary, though. To use \hologo{LaTeX} commands in
+% the watermark text, please configure the latter via the
% |\DraftwatermarkOptions| command. Trying to do so by passing options to
% the \Lpack{draftwatermark} package via the |\usepackage| mechanism may
-% fail due to how \LaTeX\ parses option strings. Also note that the text
-% may need to be surrounded by braces.
+% fail due to how \hologo{LaTeX} parses option strings. Also note that the
+% text may need to be surrounded by braces.
%
% If the watermark text includes line breaks, \Lpack{draftwatermark} will
% use a very thin interline space, according to the fact that the
-% multi-line text is managed by surrounding the it with a \LaTeX\
+% multi-line text is managed by surrounding the it with a \hologo{LaTeX}
% |shortstack| command.
%
-% Also, note that the watermark typesetting happens inside a \TeX\
-% group, to make sure that any parameter setting you do in the |text|
-% token list can stay local.
+% Also, note that the watermark typesetting happens inside a \TeX\ group,
+% to make sure that any parameter setting you do in the |text| token list
+% can stay local.
%
% As a further remark, observe that in order to only put a watermark on
% selected pages, an alternative to changing the |stamp| configuration
@@ -391,18 +400,21 @@
% anchoring.
%
% As a final remark, observe that the specification of the positioning
-% coordinates can be based on \LaTeX\ macros. For instance, one can set
-% the horizontal position |hpos| at |0.5\paperwidth| (for centering) or at
-% |\dimexpr\paperwidth-5mm| (for placement at the right hand side of the
-% page). Interestingly, \Lpack{draftwatermark} re-evaluates the
+% coordinates can be based on \hologo{LaTeX} macros. For instance, one can
+% set the horizontal position |hpos| at |0.5\paperwidth| (for centering)
+% or at |\dimexpr\paperwidth-5mm| (for placement at the right hand side of
+% the page). Interestingly, \Lpack{draftwatermark} re-evaluates the
% positioning coordinates on every page. This means that positions based
% on |\paperwidth| or |\paperheight| should dynamically adjust if the page
-% size is changed through the document. To some extent, this is also true
+% size is changed through the document.
+% \changes{R2.1}{2020/05/11}{Let anchor directives be re-evaluated on
+% every page.}^^A
+% To some extent, this is also true
% of the anchor options. For instance, one may set the horizontal anchor
% |hanchor| at |\ifodd\thepage r\else l\fi| causing the anchor point to
% alternate between |r| and |l| at every new page. In conjunction with a
% similarly conditional |hpos| setting, for instance
-% |\ifodd\thepage \dimexpr\paperwidth-5mm\else 5mm\fi|, this enables
+% |\ifodd\thepage \dimexpr\paperwidth-5mm \else 5mm\fi|, this enables
% interesting effects, like placing the watermark close to the right side
% of the page on odd pages and to the left side of the page on even
% pages. Obviously, this kind of setting is only applicable with the
@@ -442,8 +454,33 @@
%
% \end{sloppy}
%
-% \section{Compatibility notes for package version 2.0 and later}
+% \section{Compatibility notes}
+%
+% \subsection{Compatibility notes for package version 3.0 and later}
+%
+% \changes{R3.0}{2020/12/08}{Remove dependency on package
+% \Lpack{everypage}.}^^A
+% Version 3.0 of the package takes advantage of the new functionalities
+% introduced in \hologo{LaTeX} with the Fall 2020 release and gets rid of
+% its dependency on \Lpack{everypage}. In principle, this could result in
+% behavioral differences in corner cases.
+%
+% \changes{R3.0}{2020/12/08}{Automatically load legacy code for older
+% \hologo{LaTeX} formats.}^^A
+% For users of versions of \hologo{LaTeX} before Fall 2020,
+% \Lpack{draftwatermarks} falls back to its own legacy code base, now
+% packaged as \Lpack{draftwatermark-2x}.
%
+% It is worth remarking that there is no advantage in trying to explicitly
+% load \Lpack{draftwatermark-2x} on a modern \hologo{LaTeX} to try to get
+% the past behavior. In fact, even if the old code base uses
+% \Lpack{everypage}, on modern \hologo{LaTeX} formats, the latter tries
+% itself to rely on the new \hologo{LaTeX} functionalities rather than its
+% own legacy mechanisms.
+%
+% \subsection{Compatibility notes for package version 2.0 and later}
+%
+% \changes{R2.0}{2020/03/08}{Complete package overhaul.}
% Version 2.0 of the package is an almost complete rewrite with respect to
% version 1.2. Specifically, all the configuration mechanism has been
% overhauled, by moving to an interface based on configuration keys and
@@ -465,6 +502,8 @@
% Command |\SetWatermarkAngle{<real>}| is the same as\\
% |\DraftwatermarkOptions{angle=<real>}|.
% \item \DescribeMacro{\SetWatermarkColor}^^A
+% \changes{R1.1}{2012/01/06}{Add support for specifying color
+% of textual watermark.}^^A
% Command |\SetWatermarkColor[<model>]{<color spec>}| is the same as\\
% |\DraftwatermarkOptions{color={[<model>]{<color spec>}}}|.
% \item \DescribeMacro{\SetWatermarkLightness}^^A
@@ -478,14 +517,18 @@
% Command |\SetWatermarkScale{<real>}| is the same as\\
% |\DraftwatermarkOptions{scale=<real>}|.
% \item \DescribeMacro{\SetWatermarkHorCenter}^^A
+% \changes{R1.2}{2015/02/19}{Add support for specifying the watermark
+% horizontal position.}^^A
% Command |\SetWatermarkHorCenter{<length>}| is the same as\\
% |\DraftwatermarkOptions{hpos=<length>, hanchor=c}|.
% \item \DescribeMacro{\SetWatermarkVerCenter}^^A
+% \changes{R1.2}{2015/02/19}{Add support for specifying the watermark
+% vertical position.}^^A
% Command |\SetWatermarkVerCenter{<length>}| is the same as\\
% |\DraftwatermarkOptions{vpos=<length>, vanchor=m}|.
% \item \DescribeMacro{\SetWatermarkText}^^A
% Command |\SetWatermarkText{<text>}| is the same as\\
-% |\DraftwatermarkOptions{text=<text>}|.
+% |\DraftwatermarkOptions{text={<text>}}|.
% \end{itemize}
%
% Note that the legacy interface supports only a subset of what is
@@ -503,7 +546,7 @@
% \fi
% \begin{macrocode}
\documentclass{article}
-\usepackage[named]{xcolor}
+\usepackage[svgnames]{xcolor}
\usepackage[T1]{fontenc}
\usepackage[firstpageonly, color={[gray]{0.5}},
text=DRAFT\\COPY]{draftwatermark}
@@ -526,7 +569,6 @@
% \iffalse
%</samplecode-modern>
% \fi
-% \makeatletter \c@CodelineNo\z@ \makeatother
%
% This produces a two pages document with placeholder content, putting a
% page-centered watermark on the first page only. The watermark is made a
@@ -541,7 +583,7 @@
% \fi
% \begin{macrocode}
\documentclass{article}
-\usepackage[named]{xcolor}
+\usepackage[svgnames]{xcolor}
\usepackage[T1]{fontenc}
\usepackage[firstpage]{draftwatermark}
\usepackage{mathptmx}
@@ -567,7 +609,6 @@
% \iffalse
%</samplecode-legacy>
% \fi
-% \makeatletter \c@CodelineNo\z@ \makeatother
%
% \subsection{Things that cannot be done with the legacy interface}
%
@@ -581,7 +622,7 @@
% \fi
% \begin{macrocode}
\documentclass{article}
-\usepackage[named]{xcolor}
+\usepackage[svgnames]{xcolor}
\usepackage[T1]{fontenc}
\usepackage[firstpage, anchor=tr, color=red,
pos={\dimexpr\paperwidth-5mm, 5mm},
@@ -606,7 +647,6 @@
% \iffalse
%</samplecode-anchor>
% \fi
-% \makeatletter \c@CodelineNo\z@ \makeatother
%
% Another interesting possibility of the modern interface derives from the
% fact that the positioning and anchoring options are re-evaluated for
@@ -619,7 +659,7 @@
% \fi
% \begin{macrocode}
\documentclass{article}
-\usepackage[named]{xcolor}
+\usepackage[svgnames]{xcolor}
\usepackage[T1]{fontenc}
\usepackage[color=red, fontsize=32pt]{draftwatermark}
\usepackage{mathptmx}
@@ -650,7 +690,6 @@
% \iffalse
%</samplecode-dynamic>
% \fi
-% \makeatletter \c@CodelineNo\z@ \makeatother
%
% \subsection{Maximum freedom with a custom watermarking command}
%
@@ -662,7 +701,7 @@
% \fi
% \begin{macrocode}
\documentclass{article}
-\usepackage[named]{xcolor}
+\usepackage[svgnames]{xcolor}
\usepackage[T1]{fontenc}
\usepackage{draftwatermark}
\usepackage{mathptmx}
@@ -697,7 +736,6 @@
% \iffalse
%</samplecode-custom>
% \fi
-% \makeatletter \c@CodelineNo\z@ \makeatother
%
%
% \section{Development and support}
@@ -711,23 +749,10 @@
% requests that, from the present document, would evidently require moving
% against some fundamental design decisions.
%
-% \section{Changelog}
-%
-% \begin{description}
-% \item[1.0 - 2006/06/30] Initial version.
-% \item[1.1 - 2012/01/06] Add support for colored watermarks; options to
-% disable watermarking; many small fixes in the documentation.
-% \item[1.2 - 2015/02/19] Add support for watermark position.
-% \item[2.0 - 2020/03/08] Configuration management overhaul; introduction
-% of a legacy interface for compatibility.
-% \item[2.1 - 2020/05/11] Allow anchor information to be re-evaluated on
-% every page.
-% \item[2.2 - 2020/06/29] Make line breaks in watermark text work.
-% \end{description}
-%
% \StopEventually {}
%
% \section{Implementation}
+% \subsection{Implementation of \Lpack{draftwatermark}}
%
% Announce the name and version of the package, which requires
% \LaTeXe.
@@ -737,7 +762,277 @@
% \begin{macrocode}
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{draftwatermark}%
- [2020/06/29 2.2 Put a gray textual watermark on document pages]
+ [2020/12/08 3.0 Put a gray textual watermark on document pages]
+% \end{macrocode}
+% \changes{R3.0}{2020/12/08}{Automatically load legacy code for older
+% \hologo{LaTeX} formats.}^^A
+% Depending on the actual functionalities provided by \hologo{LaTeX}
+% consider loading \Lpack{draftwatermark-2x}. If so doing, warn about this,
+% and hand over the operation to that package.
+% \begin{macrocode}
+\@ifundefined{AddToHook}{%
+ \PackageWarningNoLine{draftwatermark}{%
+ You appear to be running a version of LaTeX\MessageBreak
+ unsupported by current draftwatermark.\MessageBreak
+ Forcing fallback to `draftwatermark-2x` that\MessageBreak
+ uses an older code base}%
+ \RequirePackageWithOptions{draftwatermark-2x}%
+ \endinput}{}
+% \end{macrocode}
+%
+% Require the needed packages.
+% \begin{macrocode}
+\RequirePackage{kvoptions}
+\RequirePackage{graphicx}
+\RequirePackage{color}
+% \end{macrocode}
+%
+% Define the configuration options and default values.
+% \begin{macrocode}
+\DeclareBoolOption[false]{firstpageonly}
+\define@key{draftwatermark}{firstpage}[true]{%
+ \csname draftwatermark@firstpageonly#1\endcsname}
+\DeclareBoolOption[true]{stamp}
+\DeclareComplementaryOption{nostamp}{stamp}
+\DeclareComplementaryOption{final}{stamp}
+\DeclareStringOption[45]{angle}
+\DeclareStringOption[1]{scale}
+\DeclareStringOption[DRAFT]{text}
+\DeclareStringOption[0.5\paperwidth]{hpos}
+\DeclareStringOption[0.5\paperheight]{vpos}
+\DeclareStringOption[0.25\paperwidth]{fontsize}
+\DeclareStringOption[gray]{colormodel}
+\DeclareStringOption[0.8]{colorspec}
+\DeclareStringOption[c]{hanchor}
+\DeclareStringOption[m]{vanchor}
+\DeclareStringOption[c]{alignment}
+\DeclareStringOption[\DraftwatermarkStdMark]{markcmd}
+\define@key{draftwatermark}{pos}{%
+ \draftwatermark@processpos #1\@nil}
+\define@key{draftwatermark}{anchor}{%
+ \draftwatermark@processanchor{#1}}
+\define@key{draftwatermark}{color}{%
+ \draftwatermark@processcolor #1\@nil}
+% \end{macrocode}
+%
+% Set up some helper marcros to process the options. These should be
+% rather self-explanatory.
+% \begin{macrocode}
+\def\draftwatermark@processpos#1,#2\@nil{%
+ \def\draftwatermark@hpos{#1}%
+ \def\draftwatermark@vpos{#2}}
+
+\def\draftwatermark@processanchor#1{%
+ \def\draftwatermark@tempa{#1}
+ \@onelevel@sanitize \draftwatermark@tempa
+ \expandafter \@tfor \expandafter \draftwatermark@tempb
+ \expandafter :\expandafter =\draftwatermark@tempa
+ \do
+ {%
+ \if \draftwatermark@tempb l%
+ \def \draftwatermark@hanchor{l}%
+ \else \if \draftwatermark@tempb c%
+ \def \draftwatermark@hanchor{c}%
+ \else \if \draftwatermark@tempb r%
+ \def \draftwatermark@hanchor{r}%
+ \else \if \draftwatermark@tempb t%
+ \def \draftwatermark@vanchor{t}%
+ \else \if \draftwatermark@tempb m%
+ \def \draftwatermark@vanchor{m}%
+ \else \if \draftwatermark@tempb b%
+ \def \draftwatermark@vanchor{b}
+ \else
+ \PackageError{draftwatermark}{%
+ Illegal anchor directive `\draftwatermark@tempb'}%
+ {Directive has been ingnored.}%
+ \fi\fi\fi\fi\fi\fi
+ }}
+
+\def\draftwatermark@processcolor{%
+ \@ifnextchar[
+ \draftwatermark@processcolor@ii\draftwatermark@processcolor@i}
+
+\def\draftwatermark@processcolor@i#1\@nil{%
+ \def\draftwatermark@colormodel{}%
+ \def\draftwatermark@colorspec{#1}}
+
+\def\draftwatermark@processcolor@ii[#1]#2\@nil{%
+ \def\draftwatermark@colormodel{#1}%
+ \def\draftwatermark@colorspec{#2}}
+
+% \end{macrocode}
+%
+% Process the package options\dots
+% \begin{macrocode}
+\ProcessKeyvalOptions*
+% \end{macrocode}
+%
+% \dots\, and then disable the |firstpageonly| and |firstpage| options,
+% that can only be used at the package loading time.
+% \begin{macrocode}
+\DisableKeyvalOption{draftwatermark}{firstpageonly}
+\DisableKeyvalOption{draftwatermark}{firstpage}
+
+% \end{macrocode}
+%
+% \begin{macro}{\DraftwatermarkOptions}
+% Set up a command to modify the configuration as needed.
+% \begin{macrocode}
+\newcommand\DraftwatermarkOptions[1]{\setkeys{draftwatermark}{#1}}
+
+% \end{macrocode}
+% \end{macro}
+%
+% Introduce the legacy interface.
+% \begin{macro}{\SetWatermarkAngle}
+% Legacy command to set the rotation angle for the standard watermark
+% \begin{macrocode}
+\newcommand\SetWatermarkAngle[1]{\DraftwatermarkOptions{angle=#1}}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\SetWatermarkFontSize}
+% Legacy command to set the font size for the standard watermark
+% \begin{macrocode}
+\newcommand\SetWatermarkFontSize[1]{\DraftwatermarkOptions{fontsize=#1}}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\SetWatermarkScale}
+% Legacy command to set the scale for the standard watermark
+% \begin{macrocode}
+\newcommand\SetWatermarkScale[1]{\DraftwatermarkOptions{scale=#1}}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\SetWatermarkHorCenter}
+% \begin{macro}{\SetWatermarkVerCenter}
+% Legacy commands to set the horizontal and vertical position for the
+% standard watermark, also forcing it to be centered there.
+% \begin{macrocode}
+\newcommand\SetWatermarkHorCenter[1]{%
+ \DraftwatermarkOptions{hpos=#1, hanchor=c}}
+\newcommand\SetWatermarkVerCenter[1]{%
+ \DraftwatermarkOptions{vpos=#1, vanchor=m}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\SetWatermarkText}
+% \changes{R2.3}{2020/12/06}{Fix legacy interface to accept
+% text including commas.}^^A
+% Legacy command to set the text of the standard watermark
+% \begin{macrocode}
+\newcommand\SetWatermarkText[1]{\DraftwatermarkOptions{text={#1}}}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\SetWatermarColor}
+% \begin{macro}{\SetWatermarkLightness}
+% Legacy commands to set the color for the
+% standard watermark.
+% \begin{macrocode}
+\newcommand\SetWatermarkColor[2][]{%
+ \DraftwatermarkOptions{colormodel=#1, colorspec=#2}}
+\newcommand\SetWatermarkLightness[1]{%
+ \DraftwatermarkOptions{colormodel=gray, colorspec=#1}}
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\DraftwatermarkStdMark}
+% The command to generate the standard watermark
+% \changes{R2.2}{2020/06/29}{Wrap watermark text in a shortstack to make
+% line breaks possible.}
+% \begin{macrocode}
+\newcommand\DraftwatermarkStdMark{%
+ \rotatebox{\draftwatermark@angle}{%
+ \scalebox{\draftwatermark@scale}{%
+ \begingroup
+ \ifx\draftwatermark@colormodel\@empty
+ \color{\draftwatermark@colorspec}%
+ \else
+ \color[\draftwatermark@colormodel]{\draftwatermark@colorspec}%
+ \fi
+ \setlength{\@tempdima}{\draftwatermark@fontsize}%
+ \fontsize{\@tempdima}{1.2\@tempdima}\selectfont
+ \shortstack[\draftwatermark@alignment]{\draftwatermark@text}%
+ \endgroup}}}
+
+% \end{macrocode}
+% \end{macro}
+%
+% The code to actually print the watermark
+% \begin{macrocode}
+\newcommand\draftwatermark@printwm[1]{%
+ \sbox\@tempboxa{\raisebox{\depth}{#1}}%
+ \setlength{\@tempdima}{\draftwatermark@hpos}%
+ \setlength{\@tempdimb}{-\draftwatermark@vpos}%
+ \edef \draftwatermark@tempa{\draftwatermark@hanchor}%
+ \@onelevel@sanitize \draftwatermark@tempa
+ \expandafter\def\expandafter\draftwatermark@tempb
+ \expandafter{\expandafter\@car \draftwatermark@tempa\@nil}%
+ \if \draftwatermark@tempb r%
+ \addtolength\@tempdima{-\wd\@tempboxa}%
+ \else\if \draftwatermark@tempb c%
+ \addtolength\@tempdima{-0.5\wd\@tempboxa}%
+ \else\if \draftwatermark@tempb l%
+ \relax
+ \else
+ \PackageError{draftwatermark}{%
+ Illegal anchor directive `\draftwatermark@tempb'}%
+ {Anchoring to left side.}%
+ \fi\fi\fi
+ \edef \draftwatermark@tempa{\draftwatermark@vanchor}%
+ \@onelevel@sanitize \draftwatermark@tempa
+ \expandafter\def\expandafter\draftwatermark@tempb
+ \expandafter{\expandafter\@car \draftwatermark@tempa\@nil}%
+ \if \draftwatermark@tempb b%
+ \relax
+ \else\if \draftwatermark@tempb m%
+ \addtolength\@tempdimb{-0.5\ht\@tempboxa}%
+ \else\if \draftwatermark@tempb t%
+ \addtolength\@tempdimb{-\ht\@tempboxa}%
+ \else
+ \PackageError{draftwatermark}{%
+ Illegal anchor directive `\draftwatermark@tempb'}%
+ {Anchoring to top side.}%
+ \fi\fi\fi
+ \put(\@tempdima,\@tempdimb){\usebox\@tempboxa}%
+}
+
+% \end{macrocode}
+%
+% A wrapper to make the watermark printing conditional
+% \begin{macrocode}
+\newcommand\draftwatermark@print[1]{%
+ \ifdraftwatermark@stamp
+ \draftwatermark@printwm{#1}%
+ \fi}
+% \end{macrocode}
+%
+% \dots\, and finally the code to set up the \Lpack{everypage} hooks to
+% assure that the watermark printing commands are called when needed
+% \begin{macrocode}
+\ifdraftwatermark@firstpageonly
+ \AddToHookNext{shipout/background}{%
+ \draftwatermark@print{\draftwatermark@markcmd}}%
+\else
+ \AddToHook{shipout/background}{%
+ \draftwatermark@print{\draftwatermark@markcmd}}%
+\fi
+% \end{macrocode}
+% \iffalse
+%</draftwatermark>
+% \fi
+%
+% \subsection{Implementation of \Lpack{draftwatermark-2x}}
+%
+% Announce the name and version of the package, which requires
+% \LaTeXe.
+% \iffalse
+%<*draftwatermark-2x>
+% \fi
+% \begin{macrocode}
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{draftwatermark}%
+ [2020/12/06 2.3 Put a gray textual watermark on document pages]
% \end{macrocode}
%
@@ -749,6 +1044,11 @@
\RequirePackage{color}
% \end{macrocode}
+% Set up options and assumptions for the \Lpack{kvoptions} package
+% \begin{macrocode}
+\SetupKeyvalOptions{family=draftwatermark, prefix=draftwatermark@}
+
+% \end{macrocode}
%
% Define the configuration options and default values.
% \begin{macrocode}
@@ -879,9 +1179,11 @@
% \end{macro}
% \end{macro}
% \begin{macro}{\SetWatermarkText}
+% \changes{R2.3}{2020/12/06}{Fix legacy interface to accept
+% text including commas.}^^A
% Legacy command to set the text of the standard watermark
% \begin{macrocode}
-\newcommand\SetWatermarkText[1]{\DraftwatermarkOptions{text=#1}}
+\newcommand\SetWatermarkText[1]{\DraftwatermarkOptions{text={#1}}}
% \end{macrocode}
% \end{macro}
% \begin{macro}{\SetWatermarColor}
@@ -985,30 +1287,31 @@
\AddEverypageHook{\draftwatermark@print{\draftwatermark@markcmd}}
\fi
% \end{macrocode}
-
-
% \iffalse
-%</draftwatermark>
+%</draftwatermark-2x>
% \fi
%
+%
% \Finale
+% \PrintChanges
+% \pagebreak[1]
% \PrintIndex
%
-%% \CharacterTable
-%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
-%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
-%% Digits \0\1\2\3\4\5\6\7\8\9
-%% Exclamation \! Double quote \" Hash (number) \#
-%% Dollar \$ Percent \% Ampersand \&
-%% Acute accent \' Left paren \( Right paren \)
-%% Asterisk \* Plus \+ Comma \,
-%% Minus \- Point \. Solidus \/
-%% Colon \: Semicolon \; Less than \<
-%% Equals \= Greater than \> Question mark \?
-%% Commercial at \@ Left bracket \[ Backslash \\
-%% Right bracket \] Circumflex \^ Underscore \_
-%% Grave accent \` Left brace \{ Vertical bar \|
-%% Right brace \} Tilde \~}
+% \CharacterTable
+% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+% Digits \0\1\2\3\4\5\6\7\8\9
+% Exclamation \! Double quote \" Hash (number) \#
+% Dollar \$ Percent \% Ampersand \&
+% Acute accent \' Left paren \( Right paren \)
+% Asterisk \* Plus \+ Comma \,
+% Minus \- Point \. Solidus \/
+% Colon \: Semicolon \; Less than \<
+% Equals \= Greater than \> Question mark \?
+% Commercial at \@ Left bracket \[ Backslash \\
+% Right bracket \] Circumflex \^ Underscore \_
+% Grave accent \` Left brace \{ Vertical bar \|
+% Right brace \} Tilde \~}
\endinput
%%% Local Variables:
diff --git a/macros/latex/contrib/draftwatermark/draftwatermark.ins b/macros/latex/contrib/draftwatermark/draftwatermark.ins
index 1365e64ebf..151fcec0a0 100644
--- a/macros/latex/contrib/draftwatermark/draftwatermark.ins
+++ b/macros/latex/contrib/draftwatermark/draftwatermark.ins
@@ -7,12 +7,14 @@
%% a contribution to the LaTeX2e system.
%% ---------------------------------------------
%%
-%% It may be distributed and/or modified under the conditions of the LaTeX
-%% Project Public License, version 1.3. The license is at
-%% https://www.latex-project.org/lppl/ and is part of all distributions of
-%% LaTeX version 2005/12/01 or later.
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, version 1.3c.
+%% This license is in
+%% https://www.latex-project.org/lppl/lppl-1-3c/
+%% and is part of all distributions of LaTeX later than
+%% 2008-05-04.
%%
-%% This work has the LPPL maintenance status "author-maintained".
+%% This work has the LPPL maintenance status "maintained".
%%
%% This program consists of the files listed in the README.md file
%% included in the package.
@@ -43,35 +45,39 @@ a contribution to the LaTeX2e system.
This program consists of the files listed in the README.md file included
in the package.
-Any modified versions of this file must be renamed with new filenames distinct
-from draftwatermark.sty.
+Any modified versions of this file must be renamed with new filenames
+distinct from \outFileName.
For distribution of the original source see the terms for copying and
-modification in the file draftwatermark.dtx.
+modification in the file \inFileName.
-This generated file may be distributed as long as the original source files, as
-listed above, are part of the same distribution. (The sources need not
+This generated file may be distributed as long as the original source files,
+as listed above, are part of the same distribution. (The sources need not
necessarily be in the same archive or directory.)
\endpreamble
\Msg{*** Generating the LaTeX2e package files ***}
+\usedir{tex/latex/draftwatermark}
\generate{\file{draftwatermark.sty}{%
- \from{draftwatermark.dtx}{draftwatermark}}}
+ \from{draftwatermark.dtx}{draftwatermark}}}
+\generate{\file{draftwatermark-2x.sty}{%
+ \from{draftwatermark.dtx}{draftwatermark-2x}}}
\preamble
\endpreamble
\Msg{*** Generating the example files ***}
-\generate{\file{test_draftwatermark1.tex}{%
+\usedir{doc/latex/draftwatermark/examples}
+\generate{\file{test_draftwatermark-1.tex}{%
\from{draftwatermark.dtx}{samplecode-modern}}}
-\generate{\file{test_draftwatermark2.tex}{%
+\generate{\file{test_draftwatermark-2.tex}{%
\from{draftwatermark.dtx}{samplecode-legacy}}}
-\generate{\file{test_draftwatermark3.tex}{%
+\generate{\file{test_draftwatermark-3.tex}{%
\from{draftwatermark.dtx}{samplecode-anchor}}}
-\generate{\file{test_draftwatermark4.tex}{%
+\generate{\file{test_draftwatermark-4.tex}{%
\from{draftwatermark.dtx}{samplecode-dynamic}}}
-\generate{\file{test_draftwatermark5.tex}{%
+\generate{\file{test_draftwatermark-5.tex}{%
\from{draftwatermark.dtx}{samplecode-custom}}}
%\ReportTotals
@@ -84,14 +90,18 @@ necessarily be in the same archive or directory.)
\Msg{* \space\space draftwatermark.sty}
\Msg{*}
\Msg{*}
-\Msg{* To produce the documentation run draftwatermark.dtx}
-\Msg{* through LaTeX (or maybe pdfLaTeX).}
+\Msg{* To produce the documentation:
+run draftwatermark.dtx}
+\Msg{* - run draftwatermark.dtx through LaTeX}
\Msg{* Process draftwatermark.idx file by:}
\Msg{* \space\space\space\space makeindex -s gind.ist draftwatermark}
-%\Msg{* Process draftwatermark.glo file by:}
-%\Msg{* \space\space\space\space makeindex -s gglo.ist -o draftwatermark.gls
-% draftwatermark.glo}
+\Msg{* Process draftwatermark.glo file by:}
+\Msg{* \space\space\space\space makeindex -s gglo.ist -o draftwatermark.gls
+ draftwatermark.glo}
\Msg{* Re run through LaTeX the draftwatermark.dtx file as necessary}
+\Msg{* You may then want to move the test_draftwatermark*.tex files produced by}
+\Msg{* processing this ins file together with the documentation (e.g., in an}
+\Msg{* examples subdirectory}
\Msg{*}
\Msg{***********************************************************}
diff --git a/macros/latex/contrib/draftwatermark/draftwatermark.pdf b/macros/latex/contrib/draftwatermark/draftwatermark.pdf
index e872276964..9b79678161 100644
--- a/macros/latex/contrib/draftwatermark/draftwatermark.pdf
+++ b/macros/latex/contrib/draftwatermark/draftwatermark.pdf
Binary files differ
diff --git a/macros/latex/contrib/jslectureplanner/README b/macros/latex/contrib/jslectureplanner/README
index 5f9da681e1..e5dae559d2 100644
--- a/macros/latex/contrib/jslectureplanner/README
+++ b/macros/latex/contrib/jslectureplanner/README
@@ -68,6 +68,8 @@ instructions; also have a look at the example files.
== CHANGES ==
+* V. 1.12 (2020-12-08): - Correctly parse staryear/endyear.
+
* V. 1.11 (2020-05-11): - Allow for customization of program and presentation lists.
- Correctly set first session in presentation list.
diff --git a/macros/latex/contrib/jslectureplanner/examples/English/lecturebib-english.pdf b/macros/latex/contrib/jslectureplanner/examples/English/lecturebib-english.pdf
index ae0607b469..7fe67e794f 100644
--- a/macros/latex/contrib/jslectureplanner/examples/English/lecturebib-english.pdf
+++ b/macros/latex/contrib/jslectureplanner/examples/English/lecturebib-english.pdf
Binary files differ
diff --git a/macros/latex/contrib/jslectureplanner/examples/English/lecturehandout-english.pdf b/macros/latex/contrib/jslectureplanner/examples/English/lecturehandout-english.pdf
index 54a3fe2529..24941bb9b1 100644
--- a/macros/latex/contrib/jslectureplanner/examples/English/lecturehandout-english.pdf
+++ b/macros/latex/contrib/jslectureplanner/examples/English/lecturehandout-english.pdf
Binary files differ
diff --git a/macros/latex/contrib/jslectureplanner/examples/English/lecturepresentation-english.pdf b/macros/latex/contrib/jslectureplanner/examples/English/lecturepresentation-english.pdf
index 1d90d42f0c..4f8220e8e5 100644
--- a/macros/latex/contrib/jslectureplanner/examples/English/lecturepresentation-english.pdf
+++ b/macros/latex/contrib/jslectureplanner/examples/English/lecturepresentation-english.pdf
Binary files differ
diff --git a/macros/latex/contrib/jslectureplanner/examples/English/lectureprogram-english.pdf b/macros/latex/contrib/jslectureplanner/examples/English/lectureprogram-english.pdf
index ac529f1a97..0b8f229180 100644
--- a/macros/latex/contrib/jslectureplanner/examples/English/lectureprogram-english.pdf
+++ b/macros/latex/contrib/jslectureplanner/examples/English/lectureprogram-english.pdf
Binary files differ
diff --git a/macros/latex/contrib/jslectureplanner/examples/English/lecturescript-english.pdf b/macros/latex/contrib/jslectureplanner/examples/English/lecturescript-english.pdf
index f949f346aa..b756c85705 100644
--- a/macros/latex/contrib/jslectureplanner/examples/English/lecturescript-english.pdf
+++ b/macros/latex/contrib/jslectureplanner/examples/English/lecturescript-english.pdf
Binary files differ
diff --git a/macros/latex/contrib/jslectureplanner/examples/English/membertable-blank-english.pdf b/macros/latex/contrib/jslectureplanner/examples/English/membertable-blank-english.pdf
index 8618c4a994..30b972c602 100644
--- a/macros/latex/contrib/jslectureplanner/examples/English/membertable-blank-english.pdf
+++ b/macros/latex/contrib/jslectureplanner/examples/English/membertable-blank-english.pdf
Binary files differ
diff --git a/macros/latex/contrib/jslectureplanner/examples/English/membertable-filled-english.pdf b/macros/latex/contrib/jslectureplanner/examples/English/membertable-filled-english.pdf
index 619c62ce97..c844df95f2 100644
--- a/macros/latex/contrib/jslectureplanner/examples/English/membertable-filled-english.pdf
+++ b/macros/latex/contrib/jslectureplanner/examples/English/membertable-filled-english.pdf
Binary files differ
diff --git a/macros/latex/contrib/jslectureplanner/examples/English/presencetable-blank-english.pdf b/macros/latex/contrib/jslectureplanner/examples/English/presencetable-blank-english.pdf
index 826431e8b1..fbfee149f8 100644
--- a/macros/latex/contrib/jslectureplanner/examples/English/presencetable-blank-english.pdf
+++ b/macros/latex/contrib/jslectureplanner/examples/English/presencetable-blank-english.pdf
Binary files differ
diff --git a/macros/latex/contrib/jslectureplanner/examples/English/presencetable-filled-english.pdf b/macros/latex/contrib/jslectureplanner/examples/English/presencetable-filled-english.pdf
index a51da79d67..4e81e8d909 100644
--- a/macros/latex/contrib/jslectureplanner/examples/English/presencetable-filled-english.pdf
+++ b/macros/latex/contrib/jslectureplanner/examples/English/presencetable-filled-english.pdf
Binary files differ
diff --git a/macros/latex/contrib/jslectureplanner/examples/English/presentation-list-english.pdf b/macros/latex/contrib/jslectureplanner/examples/English/presentation-list-english.pdf
index 3effb91217..883a071f06 100644
--- a/macros/latex/contrib/jslectureplanner/examples/English/presentation-list-english.pdf
+++ b/macros/latex/contrib/jslectureplanner/examples/English/presentation-list-english.pdf
Binary files differ
diff --git a/macros/latex/contrib/jslectureplanner/examples/German/lecturebib.pdf b/macros/latex/contrib/jslectureplanner/examples/German/lecturebib.pdf
index a30a8d7d73..dc7be35d41 100644
--- a/macros/latex/contrib/jslectureplanner/examples/German/lecturebib.pdf
+++ b/macros/latex/contrib/jslectureplanner/examples/German/lecturebib.pdf
Binary files differ
diff --git a/macros/latex/contrib/jslectureplanner/examples/German/lecturehandout.pdf b/macros/latex/contrib/jslectureplanner/examples/German/lecturehandout.pdf
index 4df0807950..3bd76674b0 100644
--- a/macros/latex/contrib/jslectureplanner/examples/German/lecturehandout.pdf
+++ b/macros/latex/contrib/jslectureplanner/examples/German/lecturehandout.pdf
Binary files differ
diff --git a/macros/latex/contrib/jslectureplanner/examples/German/lecturepresentation.pdf b/macros/latex/contrib/jslectureplanner/examples/German/lecturepresentation.pdf
index 7494a82a67..4e02a240b8 100644
--- a/macros/latex/contrib/jslectureplanner/examples/German/lecturepresentation.pdf
+++ b/macros/latex/contrib/jslectureplanner/examples/German/lecturepresentation.pdf
Binary files differ
diff --git a/macros/latex/contrib/jslectureplanner/examples/German/lectureprogram.pdf b/macros/latex/contrib/jslectureplanner/examples/German/lectureprogram.pdf
index 326beb4f68..58cf55305f 100644
--- a/macros/latex/contrib/jslectureplanner/examples/German/lectureprogram.pdf
+++ b/macros/latex/contrib/jslectureplanner/examples/German/lectureprogram.pdf
Binary files differ
diff --git a/macros/latex/contrib/jslectureplanner/examples/German/lecturescript.pdf b/macros/latex/contrib/jslectureplanner/examples/German/lecturescript.pdf
index d353936903..1f535cb2f1 100644
--- a/macros/latex/contrib/jslectureplanner/examples/German/lecturescript.pdf
+++ b/macros/latex/contrib/jslectureplanner/examples/German/lecturescript.pdf
Binary files differ
diff --git a/macros/latex/contrib/jslectureplanner/examples/German/membertable-blank.pdf b/macros/latex/contrib/jslectureplanner/examples/German/membertable-blank.pdf
index 3ecc09846a..67df001b4c 100644
--- a/macros/latex/contrib/jslectureplanner/examples/German/membertable-blank.pdf
+++ b/macros/latex/contrib/jslectureplanner/examples/German/membertable-blank.pdf
Binary files differ
diff --git a/macros/latex/contrib/jslectureplanner/examples/German/membertable-filled.pdf b/macros/latex/contrib/jslectureplanner/examples/German/membertable-filled.pdf
index 303b1dae40..db9feda975 100644
--- a/macros/latex/contrib/jslectureplanner/examples/German/membertable-filled.pdf
+++ b/macros/latex/contrib/jslectureplanner/examples/German/membertable-filled.pdf
Binary files differ
diff --git a/macros/latex/contrib/jslectureplanner/examples/German/presencetable-blank.pdf b/macros/latex/contrib/jslectureplanner/examples/German/presencetable-blank.pdf
index 464a6c7f3b..b846ca5779 100644
--- a/macros/latex/contrib/jslectureplanner/examples/German/presencetable-blank.pdf
+++ b/macros/latex/contrib/jslectureplanner/examples/German/presencetable-blank.pdf
Binary files differ
diff --git a/macros/latex/contrib/jslectureplanner/examples/German/presencetable-filled.pdf b/macros/latex/contrib/jslectureplanner/examples/German/presencetable-filled.pdf
index d09b39386e..0cd64cb49a 100644
--- a/macros/latex/contrib/jslectureplanner/examples/German/presencetable-filled.pdf
+++ b/macros/latex/contrib/jslectureplanner/examples/German/presencetable-filled.pdf
Binary files differ
diff --git a/macros/latex/contrib/jslectureplanner/examples/German/presentation-list.pdf b/macros/latex/contrib/jslectureplanner/examples/German/presentation-list.pdf
index 0050ea7045..62f446fa15 100644
--- a/macros/latex/contrib/jslectureplanner/examples/German/presentation-list.pdf
+++ b/macros/latex/contrib/jslectureplanner/examples/German/presentation-list.pdf
Binary files differ
diff --git a/macros/latex/contrib/jslectureplanner/jslectureplanner.pdf b/macros/latex/contrib/jslectureplanner/jslectureplanner.pdf
index 7a0c357150..971a3b29bc 100644
--- a/macros/latex/contrib/jslectureplanner/jslectureplanner.pdf
+++ b/macros/latex/contrib/jslectureplanner/jslectureplanner.pdf
Binary files differ
diff --git a/macros/latex/contrib/jslectureplanner/jslectureplanner.sty b/macros/latex/contrib/jslectureplanner/jslectureplanner.sty
index 72c62b27fa..31bbfd3530 100644
--- a/macros/latex/contrib/jslectureplanner/jslectureplanner.sty
+++ b/macros/latex/contrib/jslectureplanner/jslectureplanner.sty
@@ -23,8 +23,8 @@
%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\def\filedate{2020/05/11}
-\def\fileversion{1.11}
+\def\filedate{2020/12/08}
+\def\fileversion{1.12}
\def\filename{jslectureplanner.sty}
\NeedsTeXFormat{LaTeX2e}
@@ -58,6 +58,8 @@
\def\lecnsemverb{}
\def\lecnsemny{}
\def\lecyear{}
+\def\lecendyear{}
+\def\lecendyearsep{/}
\def\lecsemester{}
\def\lecsemesterverb{}
\def\lecuniversity{}
@@ -256,6 +258,7 @@
\def\lecshorttitle{#1}%
\global\toggletrue{uniquelecshorttitle}}
\define@key{lec}{year}{\def\lecyear{#1}}
+\define@key{lec}{endyear}{\def\lecendyear{#1}}
\define@key{lec}{uni}{\def\lecuniversity{#1}}
\define@key{lec}{institute}{\def\lecinstitute{#1}}
\define@key{lec}{platform}{\def\lecplatform{#1}}
@@ -313,12 +316,31 @@
%
% ALTERNATIVE SETUP MACROS
%
+\RequirePackage{xparse}
+
+% LecYear parses and splits {...}{startyear/endyear}
+\ExplSyntaxOn
+\NewDocumentCommand \LecYear { m m }
+{
+ % #1: semester/term
+ \setkeys{lec}{lecsem=#1}
+ % split #2 at / if available (startyear/endyear)
+ \seq_set_split:Nnn \seq_jslp_lec_year { / } { #2 }
+ \seq_pop_left:NNT \seq_jslp_lec_year \tl_jslp_start_year
+ {
+ \setkeys{lec}{year=\tl_jslp_start_year}
+ }
+ \seq_get_right:NNT \seq_jslp_lec_year \tl_jslp_end_year
+ {
+ \setkeys{lec}{endyear=\tl_jslp_end_year}
+ }
+}
+\ExplSyntaxOff
\newcommand*{\LecType}[1]{\setkeys{lec}{lectype=#1}}
\newcommand*{\LecTitle}[2][]{\setkeys{lec}{shorttitle={#2},#1,title={#2}}}
\newcommand*{\LecTitleSep}[1]{\setkeys{lec}{titlesep={#1}}}
\newcommand*{\LecSubTitle}[1]{\setkeys{lec}{subtitle={#1}}}
-\newcommand*{\LecYear}[2]{\setkeys{lec}{lecsem=#1,year=#2}}
\newcommand*{\LecUni}[1]{\setkeys{lec}{uni={#1}}}
\newcommand*{\LecInstitute}[1]{\setkeys{lec}{institute={#1}}}
\newcommand*{\LecRoom}[1]{\setkeys{lec}{room={#1}}}
@@ -341,7 +363,6 @@
%
% Courtesy of Christian Hupfer at
% https://tex.stackexchange.com/a/473552/19291
-\RequirePackage{xparse}
\ExplSyntaxOn
\cs_generate_variant:Nn \int_set:Nn {NV}
@@ -384,8 +405,8 @@
%
% CONCATENATED VARIABLES
%
-\def\lecsemester{\lecsemshort~\lecyear}
-\def\lecsemesterverb{\lecsemverb\ \lecyear}
+\def\lecsemester{\lecsemshort~\lecyear\ifcsempty{lecendyear}{}{\lecendyearsep\lecendyear}}
+\def\lecsemesterverb{\lecsemverb\ \lecyear\ifcsempty{lecendyear}{}{\lecendyearsep\lecendyear}}
\def\lecfulltitle{\lectitle\lectitlesep\lecsubtitle}
\def\sesfulltitle{\sestitle\sestitlesep\sessubtitle}
\def\lecendtime{\jslp@endtime{\@lecstarttime}{\lecduration}}
diff --git a/macros/latex/contrib/jslectureplanner/jslectureplanner.tex b/macros/latex/contrib/jslectureplanner/jslectureplanner.tex
index 4792ba03bb..ecadf4b79a 100644
--- a/macros/latex/contrib/jslectureplanner/jslectureplanner.tex
+++ b/macros/latex/contrib/jslectureplanner/jslectureplanner.tex
@@ -87,7 +87,7 @@ colorlinks=false
\author{Jürgen Spitzmüller%
\thanks{Please report issues via \protect\url{https://github.com/jspitz/jslectureplanner}.}}
-\date{Version 1.11, 2020/05/11}
+\date{Version 1.12, 2020/12/08}
\maketitle
@@ -238,7 +238,8 @@ Please also cf. sec.~\ref{sec:styles} on the concept of ``styles''.
Sec.~\ref{sec:customizing-strings} explains how to customize and extend this list.
Also cf. sec.~\ref{sec:styles}.
-\item [\joption{year=\jparam{year}}] Year of the term
+\item [\joption{year=\jparam{year}}] (Start) year of the term
+\item [\joption{endyear=\jparam{year}}] End year of the term if applicable (in case of terms such as \emph{Winter Term 2020/21})
\item [\joption{uni=\jparam{university}}] Your university
\item [\joption{institute=\jparam{institute}}] Your institute/department
\item [\joption{room=\jparam{room}}] The room where the course generally takes place;
@@ -315,6 +316,10 @@ description.}
\item \joption{ss}: Summer term (\emph{Sommersemester})
\item \joption{ws}: Winter term (\emph{Wintersemester})
\end{itemize}
+%
+If the \joption{\jparam{year}} spans multiple years, always use a slash as separator (e.\,g., 2020/21)
+for parsing purposes in the input.
+The separator that is used in the output can be customized (see sec.~\ref{sec:custstrings}).
\item \jcsmacro{LecUni\{\jparam{university}\}}: Record the name of
your university
\item \jcsmacro{LecInstitute\{\jparam{institute}\}}: Record your institute's/department's name
@@ -358,7 +363,6 @@ your university
\item \jcsmacro{SessionTitleSep\{\jparam{separator}\}}: Specify a default separator between session title and subtitle (e.\,g., ``. '' or `` -- ''). This is used if no specific separator has been specified in the session entry (see sec.~\ref{sec:lecplan}); by default, no separator is defined.
\end{itemize}
-\clearpage
\section{Setting up a course schedule}\label{sec:lecplan}
@@ -512,11 +516,13 @@ there is a unique short title by the test
the term type (e.\,g., ``WS'')
\item \jcsmacro{lecsemverb}: Outputs the verbose version
of the term type (such as ``Winter\-semester'')
-\item \jcsmacro{lecyear}: Outputs the year
+\item \jcsmacro{lecyear}: Outputs the (start) year
+\item \jcsmacro{lecendyear}: Outputs the end year if available
+\item \jcsmacro{lecendyearsep}: Outputs the separator between start and end year (slash by default)
\item \jcsmacro{lecsemester}: Outputs the short version of
-the semester (e.\,g., ``WS 2014'')
+the semester (e.\,g., ``WS 2014/15'')
\item \jcsmacro{lecsemesterverb}: Outputs the verbose version
-of the semester (such as ``Winter\-semester 2014'')
+of the semester (such as ``Winter\-semester 2014/15'')
\item \jcsmacro{adjsemester}: Outputs the short version of
the semester that \emph{follows} this one (e.\,g., ``SoSe 2015'')
\item \jcsmacro{adjsemesterverb}: Outputs the verbose version
@@ -999,7 +1005,7 @@ Analogous macros for canceled session items, exam items and presentation list it
\begin{lstlisting}[language={[LaTeX]TeX},basicstyle={\small\ttfamily},
frame=single,moretexcs={[3]{ProgramListCancelItem,programdateformat,cansestitleformat}}]
\newcommand*{\ProgramListCancelItem}[4]{\item[\programdateformat{#1}]
- \cansestitleformat{#2#3#4 \leccancel}}
+ \cansestitleformat{#2#3#4\leccancel}}
\end{lstlisting}
\begin{lstlisting}[language={[LaTeX]TeX},basicstyle={\small\ttfamily},
frame=single,moretexcs={[3]{ProgramListExamItem,programdateformat,exsestitleformat}}]
@@ -1132,7 +1138,7 @@ frame=single,moretexcs={[1]{breakevent}}]
and if so, it is output followed by the separator given as second argument and the break
title (\texttt{\#2}). If not, only the break title (\texttt{\#2}) is output.
-\subsubsection{Strings}
+\subsubsection{Strings}\label{sec:custstrings}
For canceled sessions, the program outputs
``\jparam{Session title} -- keine \jparam{Session}'' (``keine''
@@ -1163,6 +1169,12 @@ an em-dash), can be redefined by changing
moretexcs={[1]{emptypressession}}]
\newcommand*\emptypressession{---}
\end{lstlisting}
+%
+The separator between start and end year of a term can be redefined by changing
+\begin{lstlisting}[language={[LaTeX]TeX},basicstyle={\small\ttfamily},frame=single,
+moretexcs={[1]{lecendyearsep}}]
+\newcommand*\lecendyearsep{/}
+\end{lstlisting}
\subsection{Using styles}\label{sec:styles}
@@ -1427,6 +1439,10 @@ the \jslp\ style files. Thanks, Dominik.
\section{Release History}
\begin{itemize}
+\item 2020/12/08 (v. 1.12):
+ \begin{itemize}
+ \item Correctly parse staryear/endyear.
+ \end{itemize}
\item 2020/05/11 (v. 1.11):
\begin{itemize}
\item Allow for customization of program and presentation lists (see sec.~\ref{sec:listcust}).
diff --git a/macros/latex/contrib/jslectureplanner/jsmembertable.sty b/macros/latex/contrib/jslectureplanner/jsmembertable.sty
index 8d8b634bba..a371a492a5 100644
--- a/macros/latex/contrib/jslectureplanner/jsmembertable.sty
+++ b/macros/latex/contrib/jslectureplanner/jsmembertable.sty
@@ -24,8 +24,8 @@
%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\def\filedate{2020/05/11}
-\def\fileversion{1.11}
+\def\filedate{2020/12/08}
+\def\fileversion{1.12}
\def\filename{jsmembertable.sty}
\NeedsTeXFormat{LaTeX2e}
diff --git a/macros/latex/contrib/microtype/README.md b/macros/latex/contrib/microtype/README.md
index 47a727711c..bef433731f 100644
--- a/macros/latex/contrib/microtype/README.md
+++ b/macros/latex/contrib/microtype/README.md
@@ -4,7 +4,7 @@ The `microtype` package
**Subliminal refinements towards typographical perfection**
- (v2.7d -- 2019/11/18)
+ (v2.8 -- 2020/12/07)
Overview
@@ -76,5 +76,4 @@ provided that: (1) the original copyright statement is not removed, and
(2) the identification string is changed.
------------------------------------------------------
-Copyright (c) 2004--2019 R Schlicht `<w.m.l@gmx.net>`
-------------------------------------------------------
+Copyright (c) 2004--2020 R Schlicht `<w.m.l@gmx.net>`
diff --git a/macros/latex/contrib/microtype/microtype-utf.dtx b/macros/latex/contrib/microtype/microtype-utf.dtx
index 36b08620a2..7bc673f3de 100644
--- a/macros/latex/contrib/microtype/microtype-utf.dtx
+++ b/macros/latex/contrib/microtype/microtype-utf.dtx
@@ -1,11 +1,11 @@
%\iffalse meta-comment
% !Mode:: "TeX:DTX:UK"
% !smartQuote:: "English"
-% !DTXversion:: "2.7d"
+% !DTXversion:: "2.8"
% ------------------------------------------------------------------------
% The `microtype' package
% Subliminal refinements towards typographical perfection
-% Copyright (c) 2004--2019 R Schlicht <w.m.l@gmx.net>
+% Copyright (c) 2004--2020 R Schlicht <w.m.l@gmx.net>
%
% This work may be distributed and/or modified under the conditions of the
% LaTeX Project Public License, either version 1.3c of this license or (at
@@ -26,7 +26,7 @@
%
\ProvidesFile
%<*driver>
- {\jobname.dtx}[2019/11/18 v2.7d]
+ {\jobname.dtx}[2020/12/07 v2.8]
%</driver>
%<CharisSIL> {mt-CharisSIL.cfg}[2017/07/07 v1.1 microtype config. file: Charis SIL (RS)]
%<LatinModernRoman> {mt-LatinModernRoman.cfg}[2013/03/13 v1.0 microtype config. file: Latin Modern Roman (RS)]
@@ -113,6 +113,7 @@ luatexbase.add_to_callback("pre_linebreak_filter", nodeprocessor, "replace missi
% \fi
%\StopEventually{}
%
+% ^^A -------------------------------------------------------------------------
%\GeneralChanges{Documentation}
%\changes{v2.5a}{2013/05/15}{include OpenType configuration files}
%\changes{v2.6}{2015/12/07}{missing characters printed with Charis <SIL>}
diff --git a/macros/latex/contrib/microtype/microtype.dtx b/macros/latex/contrib/microtype/microtype.dtx
index 9f92e7296f..698eec0772 100644
--- a/macros/latex/contrib/microtype/microtype.dtx
+++ b/macros/latex/contrib/microtype/microtype.dtx
@@ -1,11 +1,11 @@
%\iffalse meta-comment
% !Mode:: "TeX:DTX:UK"
% !smartQuote:: "English"
-% !DTXversion:: "2.7d"
+% !DTXversion:: "2.8"
% ------------------------------------------------------------------------
% The `microtype' package
% Subliminal refinements towards typographical perfection
-% Copyright (c) 2004--2019 R Schlicht <w.m.l@gmx.net>
+% Copyright (c) 2004--2020 R Schlicht <w.m.l@gmx.net>
%
% This work may be distributed and/or modified under the conditions of the
% LaTeX Project Public License, either version 1.3c of this license or (at
@@ -37,7 +37,7 @@
%<luatex-def> {microtype-luatex.def}
%<xetex-def> {microtype-xetex.def}
%<*package|letterspace|m-t|pdftex-def|luatex-def|xetex-def>
- [2019/11/18 v2.7d
+ [2020/12/07 v2.8
%<package> Micro-typographical refinements
%<letterspace> Robust letterspacing
%<m-t> microtype main configuration file
@@ -51,8 +51,8 @@
%<luafile>local microtype = microtype
%<luafile>microtype.module = {
%<luafile> name = "microtype",
-%<luafile> version = "2.7d",
-%<luafile> date = "2019/11/18",
+%<luafile> version = "2.8",
+%<luafile> date = "2020/12/07",
%<luafile> description = "microtype module.",
%<luafile> author = "E. Roux, R. Schlicht and P. Gesang",
%<luafile> copyright = "E. Roux, R. Schlicht and P. Gesang",
@@ -91,7 +91,7 @@
\def\SourceSansPro@scale{1.02}
\def\ttdefault{blg}
{\ttfamily\selectfont
- \DeclareFontShape{T1}{blg}{k}{n}{<-> ssub * blg/b/n}{}}
+ \DeclareFontShape{T1}{blg}{eb}{n}{<-> ssub * blg/b/n}{}}
\usepackage{textcomp}
\usepackage{iftex}
%<*!docsty>
@@ -192,11 +192,11 @@
\def\PackageFont{\sffamily}
\def\match{\textbullet}
\usepackage{amssymb} % \varnothing
- \let\OrigTeX\TeX
+ \expandafter\let\expandafter\OrigTeX\csname TeX \endcsname
\DeclareRobustCommand\TeX{\textoractual{\OrigTeX}{TeX}}
\setlength\textheight{49\baselineskip}
\else
- \def\bfdefault{b}
+ \let\bfdefault\bfdefault@previous % undo mathdesign's \def\bdefault{b}
\def\Module#1{{\color{theblue}\textoractual{$\langle$}{<}\textit{#1}\textoractual{$\rangle$}{>}}}
\DeclareRobustCommand\TeX{\textoractual{T\kern-.1em\lower.4ex\hbox{E}\kern-.075emX\@}{TeX}}
\DeclareRobustCommand\LaTeX{\textoractual{L\kern-.26em{\sbox\z@ T\vbox to\ht\z@{%
@@ -206,6 +206,7 @@
\def\match{{\large\raisebox{-.15em}{\textbullet}}}
{\catcode`\`=\active % indiscernible from ' in Bitstream Letter Gothic
\g@addto@macro\macro@code{\let`\textasciigrave}}
+ \DeclareEncodingSubset{TS1}{blg}{1} % for \textasciigrave
\linespread{1.07}\normalfont
\setlength\textheight{48\baselineskip}
\fi
@@ -217,15 +218,15 @@
\def\section{\@startsection {section}{1}{\z@}%
{-3.5ex \@plus -1ex \@minus -.2ex}%
{2.3ex \@plus.2ex}%
- {\normalfont\Large\ifcmr\fontseries{bx}\else\fontseries{k}\fi\sffamily\color{sectioning}}}
+ {\normalfont\Large\ifcmr\fontseries{bx}\else\fontseries{eb}\fi\sffamily\color{sectioning}}}
\def\subsection{\@startsection{subsection}{2}{\z@}%
{-3.25ex\@plus -1ex \@minus -.2ex}%
{1.5ex \@plus .2ex}%
- {\normalfont\large\ifcmr\fontseries{bx}\else\fontseries{k}\fi\sffamily\color{sectioning}}}
+ {\normalfont\large\ifcmr\fontseries{bx}\else\fontseries{eb}\fi\sffamily\color{sectioning}}}
\def\subsubsection{\@startsection{subsubsection}{3}{\z@}%
{-3.25ex\@plus -1ex \@minus -.2ex}%
{1.5ex \@plus .2ex}%
- {\normalfont\normalsize\ifcmr\fontseries{bx}\else\fontseries{k}\fi\sffamily\color{sectioning}}}
+ {\normalfont\normalsize\ifcmr\fontseries{bx}\else\fontseries{eb}\fi\sffamily\color{sectioning}}}
\def\paragraph{\@startsection{paragraph}{4}%
{0pt}{8pt plus 2pt minus 1pt}{-1em}%
{\normalfont\normalsize\itshape}}
@@ -559,7 +560,8 @@
colorlinks,linkcolor=theblue,citecolor=theblue,urlcolor=thered,
hyperindex=false,hyperfootnotes=false]
{hyperref}
- \usepackage{hyperxmp}
+ \PassOptionsToPackage{nodvi}{totpages} % remove annoying log output
+ \usepackage{hyperxmp} % (hyperxmp loads totpages)
\usepackage{attachfile}
\usepackage{pdfpages}
\hypersetup{
@@ -569,7 +571,7 @@
pdfkeywords={TeX, LaTeX, pdfTeX, LuaTeX, XeTeX, typography, micro-typography,
character protrusion, margin kerning, optical alignment, font expansion,
font scaling, hz, kerning, spacing, glue, letterspacing, tracking, ligatures},
- pdfcopyright={\textcopyright\ 2004--2019 R Schlicht\012%
+ pdfcopyright={\textcopyright\ 2004--2020 R Schlicht\012%
This work may be distributed and/or modified under the conditions
of the LaTeX Project Public License, either version 1.3c of this
license or (at your option) any later version.\012%
@@ -607,7 +609,7 @@
\href{https://www.ctan.org/pkg/#1}{\nolinkurl{pkg/#1}}}
\DeclareRobustCommand\mailto[1]{\href{mailto:#1}{\nolinkurl{#1}}}
\def\mailtoRS{\href % some PDF viewers don't like spaces:
- {mailto:<w.m.l@gmx.net>\%20Robert\%20Schlicht?subject=[microtype\%20\fileversion]}
+ {mailto:Robert\%20Schlicht\%3cw.m.l@gmx.net\%3e?subject=[microtype\%20\fileversion]}
{\texttt{w.m.l@gmx.net}}}
% the samples in the introduction, utilising nested optional content groups (aka. layers):
\ifnum\pdftexversion<140 \else
@@ -812,7 +814,7 @@
% other extensions (see section~\ref{sec:lettersp}).
%
%\bigskip\noindent
-% This package is copyright \textcopyright\ 2004\kern.09em--2019 R Schlicht.
+% This package is copyright \textcopyright\ 2004\kern.09em--2020 R Schlicht.
% It may be distributed and/or modified under the conditions of the
% \IfFileExists{lppl.tex}{\hyperref[LPPL:LPPL]}{\href{http://www.latex-project.org/lppl/}}
% {\LaTeX\ Project Public License},
@@ -823,7 +825,7 @@
%
%\newpage
%\emptypdfpageresources ^^A layers of the logo
-%{\sffamily\def\familydefault{\sfdefault}\ifcmr\else\def\bfdefault{sb}\fi
+%{\sffamily\def\familydefault{\sfdefault}\ifcmr\else\DeclareFontSeriesDefault[sf]{bf}{sb}\fi
% \tableofcontents
% \listoftables
%}
@@ -972,8 +974,8 @@
% the well-known |key=value| syntax. In the following, you will find a
% description of all \key{keys} and their possible |values|
% (`|true|' may be omitted; multiple values, where allowed, must be enclosed in
-% braces; the default value is shown on the right, preceded by an asterisk
-% if it is contingent on the \TeX\ engine, version and/or the output mode).
+% braces; the default value is shown on the right -- if preceded by an asterisk,
+% this default only applies when running an up-to-date \pdftex\ in <PDF> mode).
%
%
%\subsection{Enabling the micro-typographic features}\label{sub:options-microtype}
@@ -989,7 +991,7 @@
% output mode (see section~\ref{sub:options-misc}), or with \xetex.
% In other words, \microtype\ will try to apply as much micro-typography as
% can safely be expected to work under the respective conditions (hence, it is
-% usually not necessary to load the package with different options for <PDF>
+% usually not necessary to load the package with different options, \eg, for <PDF>
% resp. <DVI> mode).
%
% Protrusion and expansion may be enabled or disabled independently from each
@@ -1068,15 +1070,15 @@
% & $\less$ 0.14f & <DVI>/<PDF> & _ & _ & _ & _ & _ & _\\
% & $\geq$ 0.14f & <DVI>/<PDF> & ! & ? & _ & _ & _ & _\\
% & $\geq$ 1.20 & <DVI> & ! & ? & _ & _ & _ & _\\
-% & & <PDF> & ! & ! & ! & _ & _ & _\\
+% & & <PDF> & ! & ? & ! & _ & _ & _\\
% & $\geq$ 1.40 & <DVI> & ! & ? & _ & ? & ? & _\\
-% & & <PDF> & ! & ! & ! & ? & ? & ?\\^^A\,\textsuperscript{\itshape a}\\
+% & & <PDF> & ! & ? & ! & ? & ? & ?\\
%\cmidrule(r){1-3}
-% \luatex ^^A we will have to re-model kerning, spacing and tracking with \luatex
+% \luatex ^^A we will have to re-model kerning and spacing with \luatex
% & $\geq$ 0.30 & <DVI> & ! & ? & _ & _ & _ & _\\
-% & & <PDF> & ! & ! & ! & _ & _ & _\\
-% & $\geq$ 0.62 & <DVI> & ! & ? & ?\,\textsuperscript{\itshape a} & _ & _ & ?\,\textsuperscript{\itshape a}\\
-% & & <PDF> & ! & ! & ! & _ & _ & ?\\
+% & & <PDF> & ! & ? & ! & _ & _ & _\\
+% & $\geq$ 0.62 & <DVI> & ! & _ & \hskip1em\llap{(}\textcolor{theblue}{$\boxtimes$})\textsuperscript{\itshape a} & _ & _ & ?\\
+% & & <PDF> & ! & _ & ! & _ & _ & ?\\
%\cmidrule(r){1-3}
% \let\textoractual\@firstoftwo ^^A why?
% \xetex
@@ -1084,14 +1086,13 @@
%\bottomrule
%\end{tabular}^^A
%\vskip4pt\footnotesize
-%\hskip-.8em
+%\hskip-1em
% ! = enabled\quad
% ? = not enabled\quad
% _ = not available
%\hfill
-% ^^A \textit{a}\quad $\geq$ 1.40.4 recommended
-% \textit{a}\quad for legacy (<TFM>) fonts only
-%\vskip3pt
+% \textit{a}\quad by means of variable tracking\hskip1em
+%\vskip4pt
%\end{minipage}^^A
%}\kern-\dimexpr\fboxsep+\fboxrule\relax ^^A end \fcolorbox
%\end{table}
@@ -1138,7 +1139,13 @@
% instances of the fonts may be calculated automatically and at run-time instead
% of the user having to prepare them in advance. This option is true
% by default provided that you are using a \TeX\ engine with this capability
-% and the output mode is <PDF>.
+% and the output mode is <PDF>.\footnote{
+% With \pdftex, automatic font expansion does not work with bitmap fonts.
+% Therefore, if you are using the Computer Modern Roman fonts in <T1> encoding,
+% you should either install the \pkg{cm-super} package or use the Latin Modern
+% fonts (package \pkg{lmodern}).}
+%\changes{v1.9}{2005/08/27}{add remark about Type\,1 fonts required for
+% automatic font expansion}
% If \opt{auto} is set to false, the font instances for all expansion steps must exist
% (with files called \meta{font~name}\texttt{\textpm}\meta{expansion value},
% \eg, \file{cmr12+10}, as described in the \cite{pdftexman}).
@@ -1146,23 +1153,17 @@
% If expanded instances of the fonts are available, they will be used
% regardless whether \opt{auto} is true or not.
%\fi
+% With \luatex, expansion is always automatic.
%
-%\changes{v1.9}{2005/08/27}{add remark about Type\,1 fonts required for
-% automatic font expansion}
-% With \pdftex, automatic font expansion does not work with bitmap fonts. Therefore, if you
-% are using the Computer Modern Roman fonts in <T1> encoding,
-%\iffalse
-% \footnote{
-% En passant, it may be noted that Type\,1 format and <T1> encoding are in
-% no other way related than that both start with a `T' and end with a `1'.}
-%\fi
-% you should either install the \pkg{cm-super} fonts or use the Latin Modern
-% fonts (package \pkg{lmodern}).
-%\changes{v2.7}{2017/07/06}{add remark about automatic font expansion with \texttt{dvilualatex}}
-% With \luatex, expansion is always automatic, and also works in <DVI> mode
-% (|dvilualatex|), however, because postprocessing programs like |dvips|
-% or |dvipdfmx| are not (yet) capable of dealing with OpenType fonts,
-% only for legacy fonts.
+% When generating <DVI> files, font expansion has to be enabled explicitly.
+% With \pdftex, \emph{automatic} font expansion will not work because
+% the postprocessing drivers (|dvips|, |dvipdfm|, etc.) resp. the <DVI> viewer
+% are not able to generate the fonts on the fly.
+%^^A\changes{v2.7}{2017/07/06}{add remark about automatic font expansion with \texttt{dvilualatex}}
+%\changes{v2.8}{2020/02/09}{squash fake news about automatic font expansion with \texttt{dvilualatex}}^^A
+% With \luatex, on the other hand, expansion in <DVI> mode is realised by
+% modifying the inter-letter spacing (tracking) instead of the glyphs
+% themselves, which may or may not be desired.
%
%\medskip
%\Describe{Option}{stretch}{:integer}[20]
@@ -1212,36 +1213,11 @@
% to +1000.
%
%
-%\enlargethispage{\baselineskip} ^^A layout
%\subsection{Miscellaneous options}\label{sub:options-misc}
%
-%\Describe{Option}{DVIoutput}{true,*false}
-% \pdftex\ and \luatex\ are not only able to generate <PDF> output but can also
-% spit out <DVI> files.\footnote{
-% All recent \TeX\ systems are using \pdftex\ as the default engine also for
-% <DVI> output.}
-% The latter can be ordered with the option \opt{DVIoutput}, which will set
-% \cmd\pdfoutput\ to zero.
-% For \xetex, this option is not applicable.
-%
-%\changes{v1.5}{2004/12/15}{add note about \opt{DVIoutput} option}
-% Note that this will confuse packages that depend on the value of
-% \cmd\pdfoutput\ if they were loaded earlier, as they had been made believe
-% that they were called to generate <PDF> output where they actually weren't.
-% These packages are, among others: \pkg{graphics}, \pkg{color},
-% \pkg{hyperref}, \pkg{pstricks} and, obviously, \pkg{ifpdf}. Either load these
-% packages after \microtype\ or else issue the command |\pdfoutput=0| earlier
-% -- in the latter case, the \opt{DVIoutput} option is redundant.
-%
-% When generating <DVI> files, font expansion has to be enabled explicitly.
-% With \pdftex, neither letterspacing nor \emph{automatic} font expansion will work because
-% the postprocessing drivers (|dvips|, |dvipdfm|, etc.) resp. the <DVI> viewer
-% are not able to generate the fonts on the fly.
-%
%\changes{v2.0}{2006/11/28}{add remark about `\opt{draft}' option disabling \microtype\
% (noted by \contributor Michalis Miatidis <miatidis\at informatik.rwth-aachen.de>)}
% ^^A private mail, 2006/11/26
-%\medskip
%\Describe{Option}{draft}{true,!false}
%\DescribeOption{final}
% If the \opt{draft} option is passed to the package, \emph{all
@@ -1276,6 +1252,31 @@
% You can have a different configuration file loaded instead by specifying its
% name \emph{without the extension}, \eg, |config=mycrotype|.
%
+%\medskip
+%\Describe{Option}{DVIoutput}{true,*false}
+% \pdftex\ and \luatex\ are not only able to generate <PDF> output but can also
+% spit out <DVI> files. In fact, all recent \TeX\ systems are using \pdftex\ as
+% the default engine also for <DVI> output, and \luatex\ too can be called
+% in <DVI> mode. However, since changing the output mode inside the document
+% may have undesired effects, this option should be considered deprecated;
+% instead, it is recommended to just call the respective program (|latex| resp.
+% |dvilualatex|).
+%\changes{v2.8}{2020/04/02}{declare \opt{DVIoutput} option deprecated}
+% For \xetex, this option is not applicable.
+%
+%\iffalse
+%\changes{v1.5}{2004/12/15}{add note about \opt{DVIoutput} option}
+% The latter can be ordered with the option \opt{DVIoutput}, which will set
+% \cmd\pdfoutput\ to zero.
+% Note that this will confuse packages that depend on the value of
+% \cmd\pdfoutput\ if they were loaded earlier, as they had been made believe
+% that they were called to generate <PDF> output where they actually weren't.
+% These packages are, among others: \pkg{graphics}, \pkg{color},
+% \pkg{hyperref}, \pkg{pstricks} and, obviously, \pkg{ifpdf}. Either load these
+% packages after \microtype\ or else issue the command |\pdfoutput=0| earlier
+% -- in the latter case, the \opt{DVIoutput} option is redundant.
+%\fi
+%
%\iffalse ^^A ... waiting for bug reports before documenting yet another option ...
%\medskip
%\Describe{Option}{defersetup}{!true,false}
@@ -1301,7 +1302,7 @@
% expansion settings with a |context| keyword are encountered. If these
% settings are loaded after the preamble, however, it is too late, and you
% should set the \opt{copyfonts} option manually.
-% This only works with \pdftex\ 1.40.4 or later.
+% This only works with \pdftex\ 1.40.4 or later, or \luatex.
%\fi
%
%
@@ -1413,20 +1414,13 @@
% normal font. Size selection commands are possible, too, however, ranges are
% not allowed.
%
-%\medskip\noindent
-% Table~\ref{tab:predefined-font-sets} lists the eleven predefined font sets.
-% They may also be activated by passing their name to the feature options
-% \opt{protrusion}, \opt{expansion}, \opt{tracking}, \opt{kerning} and
-% \opt{spacing} when loading the package, for example:
-%\begin{verbatim}
-%\usepackage[protrusion=allmath,tracking=smallcaps]{microtype}
-%\end{verbatim}
-%
+%\newcounter{nrfontsets}
%\begin{table}\microtypesetup{protrusion=false}\small
%\caption{Predefined font sets}\label{tab:predefined-font-sets}
%\catcode`\!=13 \def!{\textcolor{thered}{$\varnothing$}}
%\catcode`\/=13 \def/#1/{\textcolor{thegreen}{#1}}
%\def<#1>{\textcolor{theblue}{\acronym{#1}}}
+%\def\s#1{|#1|\stepcounter{nrfontsets}}
%\setlength\fboxsep{4pt}
%\leavevmode\kern-\dimexpr\fboxsep+\fboxrule\relax
%\fcolorbox{theframe}{white}{^^A
@@ -1443,56 +1437,56 @@
% & \footnotesize Size\\
%\cmidrule(r){1-1}\cmidrule(r){2-2}\cmidrule(r){3-3}
%\cmidrule(r){4-4}\cmidrule(r){5-5}\cmidrule{6-6}
-% |all|
+% \s{all}
% & !
% & !
% & !
% & !
% & ! \\
%\cmidrule(r){1-1}
-% |alltext|\linebreak(|allmath|)
+% \s{alltext}\linebreak(\s{allmath})
% & Text encodings, <TS1>\linebreak (<OML>, <OMS>, <U>)
% & !
% & !
% & !
% & ! \\
%\cmidrule(r){1-1}
-% |alltext-nott|\linebreak(|allmath-nott|)
+% \s{alltext-nott}\linebreak(\s{allmath-nott})
% & Text encodings, <TS1>\linebreak (<OML>, <OMS>, <U>)
% & /\cmd\rm|*|/,\linebreak/\cmd\sf|*|/
% & !
% & !
% & ! \\
%\cmidrule(r){1-1}
-% |basictext|\linebreak(|basicmath|)
+% \s{basictext}\linebreak(\s{basicmath})
% & Text encodings \linebreak (<OML>, <OMS>)
% & /\cmd\rm|*|/,\linebreak/\cmd\sf|*|/
% & /\cmd\md|*|/
% & !
% & /\cmd\normalsize/, /\cmd\footnotesize/, /\cmd\small/, /\cmd\large/\\
%\cmidrule(r){1-1}
-% |smallcaps|
+% \s{smallcaps}
% & Text encodings
% & !
% & !
% & /\cmd\sc|*|/,/si/,/scit/
% & ! \\
%\cmidrule(r){1-1}
-% |footnotesize|
+% \s{footnotesize}
% & Text encodings, <TS1>
% & !
% & !
% & !
% & |-|/\cmd\small/\\
%\cmidrule(r){1-1}
-% |scriptsize|
+% \s{scriptsize}
% & Text encodings, <TS1>
% & !
% & !
% & !
% & |-|/\cmd\footnotesize/\\
%\cmidrule(r){1-1}
-% |normalfont|
+% \s{normalfont}
% & /\cmd\encoding|*|/
% & /\cmd\family|*|/
% & /\cmd\series|*|/
@@ -1504,11 +1498,23 @@
% `Text encodings' = <OT1>, <T1>, <T2A>, <LY1>, <OT4>, <QX>, <T5>, <EU1>, <EU2>, <TU>
%\hfill
% `/\bslash\,\dots|*|/' = `/\bslash\,\dots|default|/'
-%\vskip3pt
+%\vskip4pt
%\end{minipage}^^A
%}\kern-\dimexpr\fboxsep+\fboxrule\relax ^^A end \fcolorbox
+%\ifcase\c@nrfontsets\or\or\or\or\or\or\or\or\or\or\or
+% \def\@currentlabel{eleven}\or \def\@currentlabel{twelve}\else
+% \PackageError{\MT@MT}{I cannot count any further}{}\fi\label{nrfontsets}
%\end{table}
%
+%\medskip\noindent
+% Table~\ref{tab:predefined-font-sets} lists the \ref*{nrfontsets} predefined font sets.
+% They may also be activated by passing their name to the feature options
+% \opt{protrusion}, \opt{expansion}, \opt{tracking}, \opt{kerning} and
+% \opt{spacing} when loading the package, for example:
+%\begin{verbatim}
+%\usepackage[protrusion=allmath,tracking=smallcaps]{microtype}
+%\end{verbatim}
+%
%\ifcmr\else\pagebreak\fi ^^A layout
%\medskip
%\Describe{Macro}{\UseMicrotypeSet}{?features,set name}
@@ -1521,8 +1527,8 @@
%\Describe{Macro}{\DeclareMicrotypeSetDefault}{?features,set name}
% If a feature is enabled but no font set has been chosen explicitly, the sets
% declared by this command will be activated. By default, the `|alltext|' font
-% set will be used for character protrusion and additional kerning, the
-% `|basictext|' set for font expansion and interword spacing, and the
+% set will be activated for character protrusion and additional kerning, the
+% `|alltext-nott|' set for font expansion and interword spacing, and the
% `|smallcaps|' set for tracking.
%
%\medskip\noindent
@@ -1625,7 +1631,7 @@
% (since the value that comes last will take precedence). Font settings
% will be loaded recursively.
% The following options will affect all loaded lists, in other words,
-% any options from the loaded lists will be ignored:
+% any options from the loaded lists will be ignored:\looseness=-1 ^^A layout
%\changes{v1.8}{2005/06/23}{add example for \texttt{factor} option}
% \item[\key{factor}] This option can be used to influence all protrusion
% factors of the list, overriding any global \opt{factor} setting (see
@@ -1736,12 +1742,13 @@
% This paragraph contains a `fussy' widow.}
%\end{verbatim}
% This method of employing contexts to temporarily apply different
-% expansion parameters only works with \pdftex\ version 1.40.4 or later.^^A
+% expansion parameters only works with \pdftex\ version 1.40.4 or later,^^A
% \footnote{For older versions, a dirty trick is laid out in
% section~\ref{ssec:font-setup} on page~\pageref{exp-hack}.}
-% Also note that \pdftex\ prohibits the use of fonts with different expansion
+% or with \luatex.
+% Also note that both \pdftex\ and \luatex\ prohibit the use of fonts with different expansion
% limits or steps (even of different fonts) within one paragraph, hence
-% the |sloppy| context has to be applied to complete paragraphs.
+% the |sloppy| context would have to be applied to complete paragraphs.
% \item[\key{factor}]
% This option provides a different method to alter expansion settings for
% certain fonts, working around the restriction just mentioned. The
@@ -1936,7 +1943,7 @@
% is, whenever a particular character appears in the text, the specified
% kerning will be inserted, regardless of which character precedes resp.
% follows it.
-% (Put in another way, this feature allows to modify the left or right
+% (Put differently, this feature allows modifying the left or right
% \textit{sidebearings} of specific glyphs.)
%
%\emptypdfpageresources ^^A layers of letterspacing illustration
@@ -2116,6 +2123,7 @@
% This package ships with configuration files for a number of font families.
% Table~\ref{tab:fonts} lists them all.
%
+%\enlargethispage{\baselineskip} ^^A layout
%\begin{table}[t]\small
%\changes{v1.6a}{2005/02/02}{add table of fonts with tailored protrusion settings}
%\caption{Fonts with tailored protrusion settings}\label{tab:fonts}
@@ -2125,10 +2133,10 @@
%\begin{minipage}{\textwidth}
%\def\arraystretch{1.2}
%\long\def\@makefntext#1{%
-% \leftskip 0pt
-% \parindent 0pt
-% \everypar{\parindent 0pt}%
-% \leavevmode\hbox to 15pt{\@thefnmark\hss}#1}
+% \leftskip 1em
+% \parindent -1em
+% \everypar{\parindent -1em}%
+% \leavevmode\hbox to 1em{\@thefnmark\hss}#1}
%\let\footnoterule\relax
%\def\fnref#1{\textsuperscript{\itshape\ifpdf\ref*{#1}\else\ref{#1}\fi}}
%\begin{tabular*}{\textwidth}{@{\extracolsep{\fill}}*3l@{}}
@@ -2141,7 +2149,7 @@
% Generic
% & <OT1>, <T1>, <T2A>, <LY1>, <QX>, (<TS1>)\footnote{Incomplete\label{fn:incmpl}}
% & n, (it, sl, sc)\fnref{fn:incmpl} \\
-% Computer Modern Roman (|cmr|)\footnote{Aliases: Latin Modern (|lmr|),
+% Computer Modern Roman (|cmr|)\footnote{Aliases: Latin Modern Roman (|lmr|),
% \pkg{ae} (|aer|), \pkg{zefonts} (|zer|),
% \pkg{eco} (|cmor|), \pkg{hfoldsty} (|hfor|)}
% & <OT1>, <OT4>, <T1>, <T2A>, <T5>, <LY1>, <TS1>
@@ -2164,15 +2172,15 @@
% & n, it, (sl)\fnref{fn:it-sl}, sc, si\\
% Palatino (|ppl|, |pplx|, |pplj|)\footnote{Aliases: \pkg{pxfonts} (|pxr|),
% \pkg{qfonts}/QuasiPalatino, \TeX\ Gyre Pagella (|qpl|),
-% \pkg{newpx}, <FPL> Neu (|fp9x|, |fp9j|)}
+% \pkg{newpx}, <FPL> Neu (|fp9x|, |fp9j|), \pkg{domitian}}
% & <OT1>, <OT4>, <T1>, <LY1>, (<TS1>)\fnref{fn:incmpl}
% & n, it, (sl)\fnref{fn:it-sl}, sc \\
% Times (|ptm|, |ptmx|, |ptmj|)\footnote{Aliases: \pkg{txfonts} (|txr|),
% \pkg{qfonts}/QuasiTimes, \TeX\ Gyre Termes (|qtm|),
-% \pkg{newtx}, \pkg{tempora}}
+% \pkg{newtx}, \pkg{tempora}, \pkg{step}, \pkg{stix}/\pkg{stix2}}
% & <OT1>, <OT4>, <T1>, <LY1>, <QX>, (<TS1>)\fnref{fn:incmpl}
% & n, it, (sl)\fnref{fn:it-sl}, sc \\
-% Latin Modern Roman
+% Latin Modern Roman\footnote{Alias: New Computer Modern}
% & <EU1>/<2>, <TU> [Latin, Greek]
% & n, it, (sl)\fnref{fn:it-sl}\\
% Charis <SIL>
@@ -2183,7 +2191,7 @@
% & <EU1>/<2>, <TU> [Latin, Cyrillic, Greek]
% & n, it, sc, si\\
%\fi
-% Palatino Linotype\footnote{Aliases: \TeX\ Gyre Pagella, Palatino <LT> Std, Palatino}
+% Palatino Linotype\footnote{Aliases: \TeX\ Gyre Pagella, Palatino <LT> Std, Palatino, Domitian}
% & <EU1>/<2>, <TU> [Latin]
% & n, it, sc\\
% Computer Modern math (|cmsy|, |cmm|)\footnote{Aliases: Latin Modern (|lmsy|, |lmm|)}
@@ -2619,8 +2627,8 @@
%\end{verbatim}
% This error message will occur if you are trying to employ font expansion
% while creating <DVI> output. Remember that \emph{automatic} font expansion
-% only works when running \pdftex\ in <PDF> mode. Although expansion is also
-% possible in <DVI> mode, it requires that all instances of the expanded fonts
+% only works when running \pdftex\ or \luatex\ in <PDF> mode. Although expansion is also
+% possible in <DVI> mode with \pdftex, it requires that all instances of the expanded fonts
% exist on your \TeX\ system.
%
%\changes{v2.2}{2007/06/13}{add hint about error message with \pdftex\ 1.40}
@@ -2652,7 +2660,7 @@
% distributions, this can be changed in the file \file{updmap.cfg} by setting
% |pdftexDownloadBase14| to |true|.
%
-%\pagebreak ^^A layout
+%\ifcmr\else\pagebreak\fi ^^A layout
%\changes{v1.9a}{2005/11/15}{add explanation for error message with non-Type\,1 fonts}
% \item
%\begin{verbatim}
@@ -2871,10 +2879,14 @@
% \contributor Phelype Oleinik <phe.h.o1\at gmail.com>,
% \contributor Falk Hanisch <falk.hanisch\at tu-dresden.de>,
% \contributor Markus Kohm <komascript\at gmx.info>,
-% \contributor Paolo Polesana <@\at @>, ^^A https://tex.stackexchange.com/users/95083/paolo-polesana
-% \contributor Oliver Kopp <koppdev\at gmail.com>
+% \contributor Paolo Polesana <@\at @>, ^^A https://tex.stackexchange.com/users/95083/paolo-polesana
+% \contributor Oliver Kopp <koppdev\at gmail.com>,
+% \contributor Hironori Kitagawa <h_kitagawa2001\at yahoo.co.jp>,
+% `\contributor d909 <@\at @>', ^^A https://tex.stackexchange.com/users/176404/d909
+% \contributor Daniel Benjamin Miller <dbmiller\at dbmiller.org>,
+% \contributor Md Ayquassar <mdayq0\at lenta.ru>
% and
-% \contributor Hironori Kitagawa <h_kitagawa2001\at yahoo.co.jp>.
+% \contributor Marcel Kr\"uger <tex\at 2krueger.de>.
%
%
%\iffalse
@@ -2946,9 +2958,9 @@
% \newblock (Online at \url{http://www.tug.org/TUGboat/Articles/tb29-1/tb91thanh-fonts.pdf})
%
% \bibitem[\pdftex\ manual]{pdftexman}
-% \thanh, Sebastian Rahtz, Hans Hagen, Hartmut Henkel, Pawe\l\ Jackowski, Martin Schr\"oder,
+% \thanh, Sebastian Rahtz, Hans Hagen, Hartmut Henkel, Pawe\l\ Jackowski, Martin Schr\"oder, Karl Berry,
% \emph{The \pdftex\ user manual},
-% \newblock 2~January 2018.
+% \newblock 2~March 2020.
% \newblock (\ctanurl{systems/doc/pdftex/manual/pdftex-a.pdf})
% ^^A latest version at \url{http://sarovar.org/projects/pdftex/}
% ^^A or even \url{http://foundry.supelec.fr/scm/?group_id=23}
@@ -2960,19 +2972,19 @@
%
% \bibitem[\LaTeXe\ font selection]{fntguide}
% \LaTeX3 Project Team, \emph{\LaTeXe\ font selection},
-% \newblock July 2019.
+% \newblock July 2020.
% \newblock (\ctanurl{macros/latex/base/fntguide.pdf})
%
% \bibitem[\pkg{fontspec}]{fontspec}
% Will Robertson,
% \emph{The \pkg{fontspec} package: Font selection for \xe\LaTeX\ and Lua\LaTeX},
-% \newblock 19~October 2019.
+% \newblock 21~February 2020.
% \newblock (\ctanpkgurl{fontspec})
%
% \bibitem[\pkg{luaotfload}]{luaotfload}
% \'Elie Roux, Khaled Hosny, Philipp Gesang, Ulrike Fischer, Marcel Kr\"uger,
% \emph{The \pkg{luaotfload} package},
-% \newblock 10~November 2019.
+% \newblock 2~September 2020.
% \newblock (\ctanpkgurl{luaotfload})
%
% \bibitem[\pkg{pdfcprot}]{pdfcprot}
@@ -3023,7 +3035,11 @@
%
%\begin{History}
%
-%\VersionDate{\expandafter\@gobble\fileversion}{\filedate}
+%\Version{\expandafter\@gobble\fileversion}{\filedate}
+% \item New default font sets for expansion and spacing: `|alltext-nott|'
+% \refsection{\ref{sec:font-sets}, table~\ref{tab:predefined-font-sets}}
+%
+%\VersionDate{2.7d}{2019/11/18}
%
%\VersionDate{2.7c}{2019/10/10}
%
@@ -3277,6 +3293,7 @@
% \setlength{\linewidth}{\textwidth}
% \footnotesize
%}
+%
%\def\LPPLSettings{
%\changes{v1.9e}{2006/06/13}{include <LPPL>}
% \let\LPPLicense\empty
@@ -3353,9 +3370,9 @@
%^^A \tagcode,\letterspacefont,\pdfcopyfont,\pdffontexpand,\pdfnoligatures,
%^^A \pdfprotrudechars,\pdfadjust(interwordglue,spacing),\pdf(ap,pre)pendkern,
%^^A \pdftracingfonts} ^^A pdftex
-%\DoNotIndex{\XeTeXversion,\XeTeXrevision} ^^A xetex
-%^^A\DoNotIndex{\XeTeXcharglyph,\XeTeXcountglyphs,\XeTeXfonttype,\XeTeXglyph,
-%^^A \XeTeXglyphindex,\XeTeXglyphname,\XeTeXprotrudechars}
+%\DoNotIndex{\XeTeXversion,\XeTeXrevision,\strcmp} ^^A xetex
+%^^A\DoNotIndex{\XeTeXcharglyph,\XeTeXfonttype,\XeTeXglyph,\XeTeXglyphindex,
+%^^A \XeTeXglyphname,\XeTeXlastfontchar,\XeTeXprotrudechars}
%\DoNotIndex{\directlua,\luatexversion} ^^A luatex
%^^A\DoNotIndex{\adjustspacing,\copyfont,\expandglyphsinfont,
%^^A \ignoreligaturesinfont,\outputmode,\protrudechars,\tracingfonts}
@@ -3396,7 +3413,7 @@
%\DoNotIndex{\RequireLuaModule} ^^A luatexbase
%\DoNotIndex{\pdf@escapestring} ^^A pdftexcmds
%\DoNotIndex{\py@macron} ^^A pinyin
-%\DoNotIndex{\SOUL@,\soulregister} ^^A soul
+%\DoNotIndex{\SOUL@,\SOUL@doword,\soulregister} ^^A soul
%\DoNotIndex{\tikz@expandcount} ^^A tikz
%\DoNotIndex{\conditionally@traceoff} ^^A trace
%\DoNotIndex{\@xspace,\@xspace@firsttrue} ^^A xspace
@@ -3495,11 +3512,11 @@
\def\MT@fix@catcode#1#2{%
\edef\MT@restore@catcodes{%
\MT@restore@catcodes
- \catcode#1 \the\catcode#1\relax
+ \catcode#1=\the\catcode#1\relax
}%
- \catcode#1 #2\relax
+ \catcode#1=#2\relax
}
-%<package>\MT@fix@catcode{17}{14}% ^^Q (comment)
+\MT@fix@catcode{17}{14}% ^^Q (comment)
\MT@fix@catcode{24} {9}% ^^X (ignore)
%<package>\MT@fix@catcode{33}{12}% !
%<package>\MT@fix@catcode{34}{12}% "
@@ -3780,6 +3797,7 @@
%\end{macro}
%\changes{v2.2}{2007/05/01}{use catcode trickery for \etex\ test}
%^^A\changes{v2.3a}{2007/12/29}{removed} ^^A \MT@maybe@etex
+%\changes{v2.8}{2020/05/26}{\letterspace\ works with \etex\ only}
% For definitions that depend on \etex\ features.
% \begin{macrocode}
\ifcase 0%
@@ -3791,6 +3809,8 @@
\else
\catcode`\^^Q=9 \catcode`\^^X=14
\fi
+%<letterspace>^^Q\MT@warning@nl{This package requires the etex extensions.
+%<letterspace>^^Q \MessageBreak Exiting}\MT@restore@catcodes\endinput
%<debug>\MT@dinfo@nl{0}{this is
%<debug>^^Q not
%<debug> etex}
@@ -3850,9 +3870,11 @@
\ifnum\luatexversion < 62 \def\MT@engine@tooold{0}
\else
\def\MT@engine@tooold{1}
+ \let\MT@lua\directlua
\ifnum\luatexversion > 84
\let\pdfoutput\outputmode
\let\pdfprotrudechars\protrudechars
+ \let\pdfadjustspacing\adjustspacing
\fi
\fi
%</letterspace>
@@ -3968,7 +3990,11 @@
% \item N/A
% \item \luatex\ ($\less$~0.36)
% \item + \cmd\directlua\ without state number ($\geq$~0.36)
-% \item + \cmd\letterspacefont\ ($\geq$~0.62)
+% \item + \cmd\letterspacefont; non-automatic expansion doesn't work anymore,
+% and automatic expansion in <DVI> mode is realised by modifying the tracking,
+% not the glyphs\footnote{This may have been changed earlier, but I'm no longer able
+% to find out when (the last version that actually works for me is 0.40).}
+% ($\geq$~0.62)
% \item + almost all of the \pdftex\ primitives have been renamed ($\geq$~0.85)
% \item + default \cmd\efcode\,=\,1000;
% \cmd\protrusionboundary\ [not yet supported] ($\geq$~0.90)
@@ -3988,7 +4014,7 @@
% number.
%\changes{v2.3d}{2009/03/25}{update for \luatex\ 0.36}
% \begin{macrocode}
-\def\MT@lua{\directlua}
+\let\MT@lua\directlua
\def\MT@luatex@no{5}
\ifnum\luatexversion<90
\def\MT@luatex@no{4}
@@ -4094,6 +4120,7 @@
%\end{macro}
%\end{macro}
%\end{macro}
+% [This line intentionally left blank.]
%\begin{macro}{\MT@pr@level}
%\begin{macro}{\MT@ex@level}
%\begin{macro}{\MT@pr@factor}
@@ -4224,7 +4251,7 @@
%<pdftex-def> \MT@pdftex@no
%<luatex-def> \MT@luatex@no
<#1 \expandafter\@secondoftwo\else\expandafter\@firstoftwo\fi}
-%<luatex-def&debug>\MT@requires@luatex4{\directlua{tex.enableprimitives('pdf',{'tracingfonts'})}}\relax
+%<luatex-def&debug>\MT@requires@luatex4{\MT@lua{tex.enableprimitives('pdf',{'tracingfonts'})}}\relax
%<pdftex-def&debug>\MT@requires@pdftex6{
%<debug>\pdftracingfonts=1
%<pdftex-def&debug>}\relax
@@ -4249,8 +4276,9 @@
% load \pkg{fontspec} before \microtype.
% There will hardly be any \luatex\ documents that don't load this package, anyway.
%\changes{v2.6}{2013/06/19}{load \pkg{luaotfload} with \luatex}
+% Since 2017/01/01, it is already loaded in the format.
% \begin{macrocode}
-\RequirePackage{luaotfload}
+\@ifl@t@r\fmtversion{2017/01/01}\relax{\RequirePackage{luaotfload}}
\MT@lua{require("microtype")}
%</luatex-def>
% \end{macrocode}
@@ -4262,6 +4290,7 @@
% \contributor Ulrike Fischer <news3\at nililand.de>)}
% ^^A private mail, 2019/02/19
% ^^A private mail, 2019/02/26
+%\changes{v2.8}{2020/05/26}{fix for \pkg{luatexbase}}
% \begin{macrocode}
%<*luafile>
@@ -4277,7 +4306,7 @@ local catpackage
if luatexbase.registernumber then
catpackage = luatexbase.registernumber("catcodetable@atletter") -- LaTeX
else
- catpackage = luatexbase.catcodetables.CatcodeTableAtletter -- luatexbase
+ catpackage = luatexbase.catcodetables.CatcodeTableLaTeXAtLetter -- luatexbase
end
function microtype.sprint (...)
tex.sprint(catpackage, ...)
@@ -4589,19 +4618,21 @@ microtype.if_dimen = if_dimen
% (found by \contributor Wiebke Petersen <petersew\at uni-duesseldorf.de>)}
% ^^A MID: <esmd6k$954$1@news1.rz.uni-duesseldorf.de>
%\changes{v2.2}{2007/05/10}{employ \luatex\ features if available}
+%\changes{v2.8}{2020/06/18}{use \xetex's \cmd\stringcmp}
% \begin{macrocode}
-%<*pdftex-def>
-\MT@requires@pdftex5{
+%<*pdftex-def|xetex-def>
+%<pdftex-def>\MT@requires@pdftex5{
\def\MT@ifstreq#1#2{%
- \ifcase\pdfstrcmp{#1}{#2}\relax
+%<pdftex-def> \ifnum\pdfstrcmp{#1}{#2}=\z@
+%<xetex-def> \ifnum\strcmp{#1}{#2}=\z@
\expandafter\@firstoftwo
\else
\expandafter\@secondoftwo
\fi
}
+%</pdftex-def|xetex-def>
+%<*pdftex-def>
}{
-%</pdftex-def>
-%<*pdftex-def|xetex-def>
\def\MT@ifstreq#1#2{%
\edef\MT@res@a{#1}%
\edef\MT@res@b{#2}%
@@ -4611,8 +4642,8 @@ microtype.if_dimen = if_dimen
\expandafter\@secondoftwo
\fi
}
-%</pdftex-def|xetex-def>
-%<pdftex-def>}
+}
+%</pdftex-def>
%<luatex-def>\def\MT@ifstreq#1#2{\csname\MT@lua{microtype.if_str_eq([[#1]],[[#2]])}\endcsname}
%<*luafile>
local function if_str_eq(s1, s2)
@@ -4842,21 +4873,45 @@ microtype.if_str_eq = if_str_eq
% \end{macrocode}
%\end{macro}
%\changes{v2.6a}{2016/05/03}{fixes for \letterspace\ package with \luatex}
+%\begin{macro}{\MT@if@luaotf@font}
+%\changes{v2.8}{2019/11/27}{use \texttt{lua} function}
+% For fonts loaded by \pkg{luaotfload} we query the font's table.
+% \begin{macrocode}
+%<letterspace>\MT@pdf@or@lua{\let\MT@if@luaotf@font\@secondoftwo}{
+%<luatex-def|letterspace>\def\MT@if@luaotf@font{\csname\MT@lua{%
+%<luatex-def> microtype.if_luaotf_font()
+%<*luafile|letterspace>
+%<luafile>local function if_luaotf_font()
+ local thefont = font.getfont(font.current())
+ if thefont and ( thefont.format == "opentype" or thefont.format == "truetype" )
+ then tex.write("@firstoftwo")
+ else tex.write("@secondoftwo")
+ end
+%<luafile>end
+%<luafile>microtype.if_luaotf_font = if_luaotf_font
+%<luafile>
+%</luafile|letterspace>
+%<luatex-def|letterspace> }\endcsname
+%<luatex-def|letterspace>}
+%<letterspace>}
+% \end{macrocode}
+%\end{macro}
%\begin{macro}{\MT@do@font}
% Execute \meta{\#1} 256 times,
% \begin{macrocode}
%<pdftex-def|letterspace>\def\MT@do@font{\MT@while@num\z@\@cclvi}
% \end{macrocode}
-% resp. for the whole font for \luatex, if loaded by \pkg{fontspec}/\pkg{luaotfload}.
+% resp. for the whole font for \luatex, if it's a Unicode font.
%\changes{v2.5}{2010/08/14}{adapt for \luatex}
%\changes{v2.6}{2013/07/14}{speed up for \luatex}
%\changes{v2.6a}{2015/05/10}{fix \texttt{lua} function
% (reported by \contributor Herbert Vo\ss{} <Herbert.Voss\at FU-Berlin.DE>)}
% ^^A private mail, 2016/05/10
+%\changes{v2.8}{2020/06/20}{simplify \texttt{lua} function}
% \begin{macrocode}
%<*luatex-def>
\def\MT@do@font#1{%
- \MT@if@fontspec@font{%
+ \MT@if@luaotf@font{%
\def\MT@dofont@function{#1}%
\MT@lua{microtype.do_font()}%
}{\MT@while@num\z@\@cclvi{#1}}%
@@ -4864,23 +4919,15 @@ microtype.if_str_eq = if_str_eq
%</luatex-def>
% \end{macrocode}
% This is the |lua| function, which is much faster than looping through all glyphs
-% in \TeX. Legacy fonts (which this function might be fed with, because \pkg{fontspec}
-% isn't always getting it right) don't contain a |v.index| field.
+% in \TeX. Legacy fonts (which this function should never work on) don't contain a |v.index| field.
% \begin{macrocode}
%<*luafile>
local function do_font()
- if fonts then
- local thefont
- if fonts.ids then --- legacy luaotfload
- thefont = fonts.ids[font.current()]
- else --- new location
- thefont = fonts.hashes.identifiers[font.current()]
- end
- if thefont then
- for i,v in next,thefont.characters do
- if v.index == nil or v.index > 0 then
- microtype.sprint([[\@tempcnta=]]..i..[[\relax\MT@dofont@function]])
- end
+ local thefont = font.getfont(font.current())
+ if thefont then
+ for i,v in next,thefont.characters do
+ if v.index == nil or v.index > 0 then
+ microtype.sprint([[\@tempcnta=]]..i..[[\relax\MT@dofont@function]])
end
end
end
@@ -4889,15 +4936,17 @@ microtype.do_font = do_font
%</luafile>
% \end{macrocode}
-% The \xetex\ variant.
+% The \xetex\ variant (it's slow~\dots!).
%\changes{v2.5}{2010/05/18}{adapt for \xetex}
+%\changes{v2.8}{2020/02/06}{fix for \xetex}
% \begin{macrocode}
%<*xetex-def>
\def\MT@do@font#1{%
\@tempcnta=\z@
- \MT@loop #1%
- \advance\@tempcnta \@ne
- \ifnum\@tempcnta < \XeTeXcountglyphs\MT@font \MT@repeat
+ \MT@loop
+ \iffontchar\MT@font\@tempcnta #1\fi
+ \advance\@tempcnta\@ne
+ \ifnum\@tempcnta < \XeTeXlastfontchar\MT@font \MT@repeat
}
%</xetex-def>
%<*package>
@@ -5219,27 +5268,8 @@ microtype.do_font = do_font
% \begin{macrocode}
\newif\ifMT@xunicode
\MT@with@package@T{xunicode}\MT@xunicodetrue
-%</package>
\newif\ifMT@fontspec
-%<letterspace>\MT@requires@latex2{
\MT@with@package@T{fontspec}\MT@fontspectrue
-%<letterspace>}{\MT@fontspecfalse}
-% \end{macrocode}
-%\end{macro}
-%\end{macro}
-%\begin{macro}{\MT@if@fontspec@font}
-%\begin{macro}{\MT@fontspec@setup}
-%\changes{v2.6}{2016/04/23}{fix \cs{MT@if@fontspec@font} ABD}
-% For fonts loaded by \pkg{fontspec} (or, rather, \pkg{luaotfload}) we can
-% use some of the features the latter package provides.
-% \begin{macrocode}
-\let\MT@if@fontspec@font\@secondoftwo
-\def\MT@fontspec@setup{%
- \@ifpackagelater{fontspec}{2013/05/23}{
- \MT@let@cn\MT@if@fontspec@font{fontspec_if_fontspec_font:TF}%
- }\relax
-}
-\ifMT@fontspec\MT@fontspec@setup\fi
% \end{macrocode}
%\end{macro}
%\end{macro}
@@ -5255,7 +5285,6 @@ microtype.do_font = do_font
% lest we disturb \pkg{tikz}. This is used in \cs{MT@afteraftergroup}, and we
% don't need it for \letterspace.
% \begin{macrocode}
-%<*package>
\let\MT@maybe@gobble@with@tikz\@firstofone
\def\MT@tikz@setup{%
\def\MT@maybe@gobble@with@tikz{%
@@ -5359,11 +5388,7 @@ time will almost certainly lead to undesired results. Have your choice!}%
\MT@with@package@T {eledmac}\MT@ledmac@setup
\MT@with@package@T{reledmac}\MT@ledmac@setup
\MT@with@package@T{xunicode}\MT@xunicodetrue
-%</package>
-%<plain> \MT@requires@latex2{
- \MT@with@package@T{fontspec}{\MT@fontspectrue\MT@fontspec@setup}%
-%<plain> }\relax
-%<*package>
+ \MT@with@package@T{fontspec}\MT@fontspectrue
% \end{macrocode}
% We can clean up \cs{MT@setupfont@hook} now.
%\changes{v2.6}{2014/03/17}{redefine \cs{MT@setupfont@hook} globally
@@ -5426,9 +5451,9 @@ time will almost certainly lead to undesired results. Have your choice!}%
% \begin{macrocode}
\MT@with@package@T{listings}{%
\g@addto@macro\MT@cfg@catcodes{%
- \MT@while@num{"30}{"3A}{\catcode\@tempcnta 12\relax}%
- \MT@while@num{"41}{"5B}{\catcode\@tempcnta 11\relax}%
- \MT@while@num{"61}{"7B}{\catcode\@tempcnta 11\relax}%
+ \MT@while@num{"30}{"3A}{\catcode\@tempcnta=12\relax}%
+ \MT@while@num{"41}{"5B}{\catcode\@tempcnta=11\relax}%
+ \MT@while@num{"61}{"7B}{\catcode\@tempcnta=11\relax}%
}%
% \end{macrocode}
% \dots~and the backslash (which would lead to problems in \cs{MT@get@slot}).
@@ -5437,7 +5462,7 @@ time will almost certainly lead to undesired results. Have your choice!}%
% ^^A private mail, 2006/09/15
% \begin{macrocode}
\g@addto@macro\MT@setupfont@hook{%
- \catcode`\\\z@
+ \catcode`\\=\z@
% \end{macrocode}
% Inside a listing, \cmd\space\ is redefined.
%\changes{v2.5}{2011/05/03}{restore \cmd\space\ inside \pkg{listings}
@@ -5445,7 +5470,7 @@ time will almost certainly lead to undesired results. Have your choice!}%
% ^^A private mail, 2011/04/30
% ^^A (beta:07)
% \begin{macrocode}
- \def\space{ }%
+ \def\space{ }%
% \end{macrocode}
%\changes{v1.9b}{2005/12/23}{compatibility with the \texttt{extendedchar} option of
% the \pkg{listings} package}
@@ -5462,24 +5487,23 @@ time will almost certainly lead to undesired results. Have your choice!}%
% Of course, using both \pkg{soul}'s and \microtype's letterspacing mechanisms
% at the same time doesn't make much sense. But \pkg{soul} can do more, \eg,
% underlining. The optional argument to \cs{textls} may not be used.
+%\changes{v2.8}{2020/04/11}{compatibility with \pkg{soul}: patch for font change
+% (reported by \contributor Md Ayquassar <mdayq0\at lenta.ru>)}
+% ^^A https://github.com/latex3/babel/issues/53#issuecomment-598307655
+% Also, we have to disable expansion within \pkg{soul}'s trial run.
+%\changes{v2.3a}{2008/01/06}{fix test for \pkg{soul} under plain \TeX}
+% Under plain \TeX, \pkg{soul} doesn't register itself the \LaTeX\ way, so
+% we just test for its main command.
% \begin{macrocode}
%</package>
-%<plain> \MT@requires@latex2{
- \MT@with@package@T{soul}{%
+ \ifx\SOUL@\@undefined\else
\soulregister\lsstyle 0%
\soulregister\textls 1%
- }%
-% \end{macrocode}
-%\changes{v2.3a}{2008/01/06}{fix test for \pkg{soul} under plain \TeX}
-% Under plain \TeX, \pkg{soul} doesn't register itself the \LaTeX\ way, hence
-% we have to use a different test in this case.
-% \begin{macrocode}
-%<*plain>
- }{\ifx\SOUL@\@undefined\else
- \soulregister\lsstyle 0%
- \soulregister\textls 1%
- \fi}%
-%</plain>
+ \ifx\XeTeXrevision\@undefined
+ \let\MT@SOUL@doword\SOUL@doword
+ \def\SOUL@doword{\pdfadjustspacing=\z@ \MT@SOUL@doword}%
+ \fi
+ \fi
%<*package>
\MT@with@package@T{tikz}\MT@tikz@setup
% \end{macrocode}
@@ -5667,12 +5691,12 @@ time will almost certainly lead to undesired results. Have your choice!}%
% \end{macrocode}
%\end{macro}
% Even though \luatex\ also provides the primitive from \pdftex\ (even renamed to
-% \cmd\copyfont, that is, `promoted' as per the \luatex\ manual), it is crippled
-% in that OpenType features will be lost. ^^A see https://mailman.ntg.nl/pipermail/ntg-context/2016/087541.html
+% \cmd\copyfont, that is, `promoted' as per the \luatex\ manual), it is seriously
+% crippled in that OpenType features will be lost. ^^A see https://mailman.ntg.nl/pipermail/ntg-context/2016/087541.html seqq.
%\changes{v2.7d}{2019/11/17}{in \luatex, don't use the \cmd\copyfont\ primitive, but load the font anew
% (reported by \contributor Paolo Polesana <@\at @> and
% \contributor Oliver Kopp <koppdev\at gmail.com>)}
-% ^^A http://tex.stackexchange.com/questions/338942/cancellation-of-color-fontspec-font-settings-while-defining-microtype-context
+% ^^A https://tex.stackexchange.com/questions/338942/cancellation-of-color-fontspec-font-settings-while-defining-microtype-context
% ^^A https://tex.stackexchange.com/questions/419288/microtypecontext-with-lualatex
% Therefore, we do not copy the font but load it anew.
% \begin{macrocode}
@@ -5695,9 +5719,7 @@ time will almost certainly lead to undesired results. Have your choice!}%
\let\font@name\MT@font@copy
% \end{macrocode}
% But we have to properly substitute the font after we're done.
-% In \luatex, for some reason, one expansion step more.
% \begin{macrocode}
-%<luatex-def> \aftergroup\MT@exp@two@c
\aftergroup\let\aftergroup\font@name\aftergroup\MT@font@copy
}
% \end{macrocode}
@@ -5751,6 +5773,39 @@ time will almost certainly lead to undesired results. Have your choice!}%
% prevent a different design size being selected.
%
%\bigskip
+%\begin{macro}{\MT@fix@fontdimen@six}
+%\changes{v1.8}{2005/05/03}{new macro: test whether \fontdim6 is defined}
+%\changes{v2.3e}{2009/08/31}{fix: gobbling settings with tracking failed
+% (reported by \contributor Leo <sdl.web\at gmail.com>)}
+% ^^A MID: <m0vdk4g8t2.fsf@cam.ac.uk>
+%\changes{v2.8}{2020/05/25}{try to fix zero \fontdim6}
+%\begin{macro}{\MT@dimen@six}
+% If \fontdim6 is zero, character protrusion, spacing, kerning and tracking
+% won't work, and we could skip the settings (for example, the \pkg{dsfont}
+% fonts don't specify this dimension; this is probably a bug -- the \pkg{fourier}
+% and \pkg{newpx}/\pkg{newtx} packages have been fixed in the meantime).
+% However, we can fix it ourselves -- only tracking still doesn't work (it seems
+% that \cmd\letterspacefont\ uses the \fontdim6 from the original font).
+% \xetex\ doesn't provide an equivalent to \cmd\pdffontsize, so we use the
+% nominal size instead.
+% \begin{macrocode}
+%<*pdftex-def|luatex-def|xetex-def>
+\def\MT@fix@fontdimen@six{%
+ \ifnum\fontdimen6\MT@font=\z@
+ \fontdimen6\MT@font=%
+%<pdftex-def> \pdffontsize\MT@font
+%<luatex-def> \MT@requires@luatex4{\pdffeedback fontsize}{\pdffontsize}\MT@font
+%<xetex-def> \MT@size pt
+ \MT@info{Fixing zero \string\fontdimen 6 for font `\MT@@font'\MessageBreak
+ (new value: \the\fontdimen6\MT@font)}%
+ \MT@glet@nc{\MT@@font-fake6}\@empty
+ \fi
+ \edef\MT@dimen@six{\number\fontdimen6\MT@font}%
+}
+%</pdftex-def|luatex-def|xetex-def>
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
%\begin{macro}{\MT@split@name}
%\changes{v1.7}{2005/02/27}{don't define \cs{MT@encoding} \&c. \cmd\global ly}
%\changes{v2.0}{2006/12/19}{adjust to possible letterspacing}
@@ -5774,6 +5829,7 @@ time will almost certainly lead to undesired results. Have your choice!}%
\def\MT@series {#3}%
\def\MT@shape {#4}%
\def\MT@size {#5}%
+ \MT@fix@fontdimen@six
% \end{macrocode}
%\begin{macro}{\MT@familyalias}
% Alias family?
@@ -6035,57 +6091,30 @@ time will almost certainly lead to undesired results. Have your choice!}%
\MT@glet@nc{\MT@encoding-\MT@family-settings}\@empty
}%
\fi
- \MT@get@font@dimen@six{%
- \MT@get@opt
- \MT@reset@pr@codes
+ \MT@get@opt
+ \MT@reset@pr@codes
% \end{macrocode}
% Get the name of the inheritance list and parse it.
% \begin{macrocode}
- \MT@get@inh@list
+ \MT@get@inh@list
% \end{macrocode}
% Set an input encoding?
% \begin{macrocode}
- \MT@set@inputenc{c}%
+ \MT@set@inputenc{c}%
% \end{macrocode}
% Load additional lists?
% \begin{macrocode}
- \MT@load@list\MT@pr@c@name
- \MT@set@listname
+ \MT@load@list\MT@pr@c@name
+ \MT@set@listname
% \end{macrocode}
% Load the main list.
% \begin{macrocode}
- \MT@let@cn\@tempc{MT@pr@c@\MT@pr@c@name}%
- \expandafter\MT@set@codes\@tempc,\relax,}%
+ \MT@let@cn\@tempc{MT@pr@c@\MT@pr@c@name}%
+ \expandafter\MT@set@codes\@tempc,\relax,%
}\MT@reset@pr@codes
}
% \end{macrocode}
%\end{macro}
-%\begin{macro}{\MT@get@font@dimen@six}
-%\changes{v1.8}{2005/05/03}{new macro: test whether \fontdim6 is defined}
-%\changes{v2.3e}{2009/08/31}{fix: gobbling settings with tracking failed
-% (reported by \contributor Leo <sdl.web\at gmail.com>)}
-% ^^A MID: <m0vdk4g8t2.fsf@cam.ac.uk>
-%\begin{macro}{\MT@dimen@six}
-% If \fontdim6 is zero, character protrusion, spacing, kerning and tracking
-% won't work, and we can skip the settings (for example, the \pkg{dsfont} and
-% \pkg{fourier} fonts don't specify this dimension; this is probably a bug in
-% the fonts).
-% \begin{macrocode}
-\def\MT@get@font@dimen@six{%
- \ifnum\fontdimen6\MT@font=\z@
- \MT@warning@nl{%
- Font `\MT@@font' does not specify its\MessageBreak
- \@backslashchar fontdimen 6 (width of an `em')! Therefore,\MessageBreak
- \@nameuse{MT@abbr@\MT@feat} will not work with this font}%
- \expandafter\@gobble
- \else
- \edef\MT@dimen@six{\number\fontdimen6\MT@font}%
- \expandafter\@firstofone
- \fi
-}
-% \end{macrocode}
-%\end{macro}
-%\end{macro}
%\begin{macro}{\MT@set@all@pr}
%\changes{v2.2}{2007/06/16}{(et al.) allow empty values}
% Set all protrusion codes of the font.
@@ -6372,7 +6401,8 @@ time will almost certainly lead to undesired results. Have your choice!}%
%\end{macro}
%\begin{macro}{\MT@get@opt}
% The optional argument to the configuration commands (except for
-% \cs{SetExpansion}, which is being dealt with in \cs{MT@get@ex@opt}).
+% \cs{SetExpansion} and \cs{SetTracking}, which are being dealt with
+% in \cs{MT@get@ex@opt} and \cs{MT@get@tr@opt}, resp.).
% \begin{macrocode}
\def\MT@get@opt{%
\MT@set@listname
@@ -6554,8 +6584,8 @@ time will almost certainly lead to undesired results. Have your choice!}%
% \begin{macrocode}
%<*pdftex-def|xetex-def|luatex-def>
\def\MT@set@pr@heirs#1{%
- \lpcode\MT@font #1 =\lpcode\MT@font\MT@char\relax
- \rpcode\MT@font #1 =\rpcode\MT@font\MT@char\relax
+ \lpcode\MT@font #1=\lpcode\MT@font\MT@char\relax
+ \rpcode\MT@font #1=\rpcode\MT@font\MT@char\relax
%<debug>\MT@dinfo@nl{2}{-- heir of \MT@char: #1}%
%<debug>\MT@dinfo@nl{4}{;;; lp/rp (#1): \number\lpcode\MT@font\MT@char\space/%
%<debug> \number\rpcode\MT@font\MT@char\space}%
@@ -6671,7 +6701,7 @@ time will almost certainly lead to undesired results. Have your choice!}%
\let\MT@stretch@ \MT@stretch
\let\MT@shrink@ \MT@shrink
\let\MT@step@ \MT@step
-%<pdftex-def> \let\MT@auto@ \MT@auto
+ \let\MT@auto@ \MT@auto
\let\MT@ex@factor@\MT@ex@factor
}%
\MT@reset@ef@codes
@@ -6690,30 +6720,33 @@ time will almost certainly lead to undesired results. Have your choice!}%
% \end{macrocode}
%\end{macro}
%\begin{macro}{\MT@expandfont}
-% Expand the font.
+% Expand the font. For some reason, older \luatex\ versions freeze if
+% the |autoexpand| modifier is missing. Can't be bothered to find out why.
+% For newer versions, we could also use the function |font.setexpansion|,
+% or, in the future, \pkg{luaotfload}'s expansion font feature. ^^A https://github.com/latex3/luaotfload/commit/4907e23407c52437cca56966d11d3b4548bba585
+%\iffalse
% In \luatex, we try to go the |lua| way, if the |font.setexpansion| function exists.
%\changes{v2.7d}{2019/11/17}{use \luatex\ function \texttt{font.}\penalty\exhyphenpenalty\texttt{setexpansion} if available}
+%\fi
% \begin{macrocode}
%<*luatex-def>
-\directlua{\detokenize{
- if font.setexpansion == nil then
- tex.print("\\@firstoftwo")
- else
- tex.print("\\@secondoftwo")
- end
-}}{
+\MT@requires@luatex3{
\MT@requires@luatex4{\let\pdffontexpand\expandglyphsinfont}\relax
-%</luatex-def>
+\ifnum\luatexversion<79
\def\MT@expandfont{%
- \pdffontexpand\MT@font \MT@stretch@ \MT@shrink@ \MT@step@ \MT@auto@\relax
+ \pdffontexpand\MT@font \MT@stretch@ \MT@shrink@ \MT@step@ autoexpand\relax
}
-%<*luatex-def>
-}{
+\else
\def\MT@expandfont{%
- \directlua{font.setexpansion(font.current(),\MT@stretch@,\MT@shrink@,\MT@step@)}%
-}
+ \pdffontexpand\MT@font \MT@stretch@ \MT@shrink@ \MT@step@\relax
}
+\fi
+}{
%</luatex-def>
+\def\MT@expandfont{%
+ \pdffontexpand\MT@font \MT@stretch@ \MT@shrink@ \MT@step@ \MT@auto@\relax
+}
+%<luatex-def>}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\MT@set@all@ex}
@@ -6809,8 +6842,9 @@ time will almost certainly lead to undesired results. Have your choice!}%
\MT@get@ex@opt@{stretch}{Setting stretch limit to \number\MT@stretch@}%
\MT@get@ex@opt@{shrink} {Setting shrink limit to \number\MT@shrink@}%
\MT@get@ex@opt@{step} {Setting expansion step to \number\MT@step@}%
-%<pdftex-def> \def\@tempa{autoexpand}%
-%<pdftex-def> \MT@get@ex@opt@{auto}{\ifx\@tempa\MT@auto@ En\else Dis\fi abling automatic expansion}%
+%<luatex-def> \MT@requires@luatex3\relax{%
+ \MT@get@ex@opt@{auto}{\MT@ifstreq{\MT@auto@}{autoexpand}{En}{Dis}abling automatic expansion}%
+%<luatex-def> }%
\MT@ifdefined@n@T{MT@ex@c@\MT@ex@c@name @preset}{%
\MT@preset@ex
\let\MT@reset@ef@codes\relax
@@ -6870,15 +6904,14 @@ time will almost certainly lead to undesired results. Have your choice!}%
% \begin{macrocode}
\def\MT@set@sp@codes{%
\MT@if@list@exists{%
- \MT@get@font@dimen@six{%
- \MT@get@opt
- \MT@reset@sp@codes
- \MT@get@inh@list
- \MT@set@inputenc{c}%
- \MT@load@list\MT@sp@c@name
- \MT@set@listname
- \MT@let@cn\@tempc{MT@sp@c@\MT@sp@c@name}%
- \expandafter\MT@set@codes\@tempc,\relax,}%
+ \MT@get@opt
+ \MT@reset@sp@codes
+ \MT@get@inh@list
+ \MT@set@inputenc{c}%
+ \MT@load@list\MT@sp@c@name
+ \MT@set@listname
+ \MT@let@cn\@tempc{MT@sp@c@\MT@sp@c@name}%
+ \expandafter\MT@set@codes\@tempc,\relax,%
}\MT@reset@sp@codes
}
% \end{macrocode}
@@ -6987,15 +7020,14 @@ time will almost certainly lead to undesired results. Have your choice!}%
% \begin{macrocode}
\def\MT@set@kn@codes{%
\MT@if@list@exists{%
- \MT@get@font@dimen@six{%
- \MT@get@opt
- \MT@reset@kn@codes
- \MT@get@inh@list
- \MT@set@inputenc{c}%
- \MT@load@list\MT@kn@c@name
- \MT@set@listname
- \MT@let@cn\@tempc{MT@kn@c@\MT@kn@c@name}%
- \expandafter\MT@set@codes\@tempc,\relax,}%
+ \MT@get@opt
+ \MT@reset@kn@codes
+ \MT@get@inh@list
+ \MT@set@inputenc{c}%
+ \MT@load@list\MT@kn@c@name
+ \MT@set@listname
+ \MT@let@cn\@tempc{MT@kn@c@\MT@kn@c@name}%
+ \expandafter\MT@set@codes\@tempc,\relax,%
}\MT@reset@kn@codes
}
% \end{macrocode}
@@ -7120,12 +7152,23 @@ time will almost certainly lead to undesired results. Have your choice!}%
% The tracking amount is determined by the optional argument to \cs{textls},
% settings from \cs{SetTracking}, or the global \opt{letterspace} option, in
% this order.
+%
+% Tracking won't work if the original font's \fontdim6 is zero, in which
+% case we issue a warning (once for every font).
% \begin{macrocode}
%<*pdftex-def|luatex-def|letterspace>
\def\MT@set@tr@codes{%
%<*pdftex-def|luatex-def>
\MT@vinfo{Tracking font `\MT@@font'\on@line}%
- \MT@get@font@dimen@six{%
+ \MT@ifdefined@n@TF{\MT@@font-fake6}{%
+ \expandafter\ifx\csname\MT@@font-fake6\endcsname\@empty
+ \MT@warning@nl{%
+ Font `\MT@@font' does not specify its\MessageBreak
+ \@backslashchar fontdimen 6 (width of an `em')! Therefore,\MessageBreak
+ \@nameuse{MT@abbr@\MT@feat} will not work with this font}%
+ \MT@glet@nc{\MT@@font-fake6}\relax
+ \fi
+ }{%
\MT@if@list@exists
\MT@get@tr@opt
\relax
@@ -7170,8 +7213,8 @@ time will almost certainly lead to undesired results. Have your choice!}%
% than the \pdftex\ primitive \cmd\letterspacefont.
% \begin{macrocode}
%<*luatex-def|letterspace>
- \MT@if@fontspec@font{%
-%<luatex-def&debug>\MT@dinfo@nl{1}{... fontspec font: \MessageBreak
+ \MT@if@luaotf@font{%
+%<luatex-def&debug>\MT@dinfo@nl{1}{... luaotf font: \MessageBreak
%<luatex-def&debug> \expandafter\fontname\font@name}%
\ifnum\MT@letterspace@<\z@\def\MT@minus{-}\else\let\MT@minus\@empty\fi
\global\expandafter\font\MT@lsfont=%
@@ -7231,7 +7274,7 @@ time will almost certainly lead to undesired results. Have your choice!}%
% (reported by \contributor Wolfram Schaalo <schaalo\at gmx.net>)}
% ^^A private mail, 2008/05/12
% \begin{macrocode}
-%<luatex-def|letterspace> \MT@if@fontspec@font\relax{%
+%<luatex-def|letterspace> \MT@if@luaotf@font\relax{%
%<debug>\MT@dinfo@nl{2}{... compensating for tracking (\number\MT@letterspace@)}%
\MT@do@font{\lpcode\MT@lsfont\@tempcnta=\numexpr\MT@letterspace@/2\relax
\rpcode\MT@lsfont\@tempcnta=\numexpr\MT@letterspace@/2\relax}%
@@ -7245,7 +7288,7 @@ time will almost certainly lead to undesired results. Have your choice!}%
% \begin{macrocode}
\aftergroup\MT@set@lsfont
%<pdftex-def|luatex-def> \let\MT@font\MT@lsfont
-%<luatex-def> \MT@if@fontspec@font\MT@font\relax
+%<luatex-def> \MT@if@luaotf@font\MT@font\relax
% \end{macrocode}
%\begin{macro}{\MT@set@curr@ls}
%\begin{macro}{\MT@curr@ls}
@@ -7367,23 +7410,26 @@ time will almost certainly lead to undesired results. Have your choice!}%
%<*pdftex-def|luatex-def>
\def\MT@get@tr@opt{%
\MT@set@listname
- \MT@ifdefined@n@T{MT@tr@c@\MT@tr@c@name}{%
- \MT@let@cn\MT@letterspace{MT@tr@c@\MT@tr@c@name}%
+ \let\MT@tr@factor@\@m
% \end{macrocode}
%\begin{macro}{\MT@tr@unit@}
-% Different unit?
+% Different unit (for |letterspace| and/or |(outer)spacing|)?
+%\changes{v2.8}{2020/11/22}{fix: allow unit regardless whether letterspacing is set}
% \begin{macrocode}
- \MT@ifdefined@n@T{MT@tr@c@\MT@tr@c@name @unit}{%
- \MT@let@cn\MT@tr@unit@{MT@tr@c@\MT@tr@c@name @unit}%
- \ifdim\MT@tr@unit@=1em
- \let\MT@tr@unit@\@undefined
- \else
- \MT@let@cn\@tempb{MT@tr@c@\MT@tr@c@name}%
- \MT@get@unit\MT@tr@unit@
- \let\MT@tr@factor@\@m
- \MT@scale@to@em
- \edef\MT@letterspace{\number\@tempcntb}%
- \fi
+ \MT@ifdefined@n@T{MT@tr@c@\MT@tr@c@name @unit}{%
+ \MT@let@cn\MT@tr@unit@{MT@tr@c@\MT@tr@c@name @unit}%
+ \ifdim\MT@tr@unit@=1em
+ \let\MT@tr@unit@\@undefined
+ \else
+ \MT@get@unit\MT@tr@unit@
+ \fi
+ }%
+ \MT@ifdefined@n@T{MT@tr@c@\MT@tr@c@name}{%
+ \MT@let@cn\MT@letterspace{MT@tr@c@\MT@tr@c@name}%
+ \MT@ifdefined@c@T\MT@tr@unit@{%
+ \let\@tempb\MT@letterspace
+ \MT@scale@to@em
+ \edef\MT@letterspace{\number\@tempcntb}%
}%
}%
% \end{macrocode}
@@ -7448,12 +7494,18 @@ time will almost certainly lead to undesired results. Have your choice!}%
%\changes{v2.7}{2016/08/03}{fix: prevent infinite loop with \pkg{psnfss} and \pkg{exscale} packages
% (reported by \contributor user11126 <@\at @>,
% solution by \contributor Ulrike Fischer <fischer\at troubleshooting-tex.de>)}
-% Setting \cmd\glb@currsize\ to \cmd\@empty\ (our previous solution) could
+% ^^A https://tex.stackexchange.com/questions/316231/microtype-and-exscale-crashing-in-texlive-2016#comment771828_316252
+% Setting \cmd\glb@currsize\ globally to \cmd\@empty\ (our previous solution) could
% throw us into an infinite loop (\eg, with the \pkg{psnfss} packages,
% via \cmd\every@math@size), so we issue \cmd\glb@settings\ instead.
+%\changes{v2.8}{2020/05/26}{fix: enforce math setup, again}
+% However, in certain situations, we may still miss some math fonts, so
+% let's try to also enforce it by emptying \cmd\glb@currsize, fingers crossed.
+% The overhead seems small.
% \begin{macrocode}
\DeclareRobustCommand\lsstyle{%
\not@math@alphabet\lsstyle\textls
+ \let\glb@currsize\@empty
%<pdftex-def|luatex-def> \MT@maybe@gobble@with@tikz{\aftergroup\glb@settings}%
%<pdftex-def|luatex-def> \def\MT@feat{tr}%
\let\MT@tracking\MT@set@tr@codes
@@ -7598,16 +7650,15 @@ time will almost certainly lead to undesired results. Have your choice!}%
%\begin{macro}{\MT@tr@set@space@}
% If settings for outer spacing \meta{\#2} don't exist, they will be inherited
% from the inner spacing settings \meta{\#1}.
+%\changes{v2.8}{2020/11/24}{simplified}
% \begin{macrocode}
\def\MT@tr@set@space@#1#2#3#4{%
\MT@ifempty{#2}{%
- \MT@ifempty{#1}{%
- \edef\MT@temp{\MT@temp#4\the\fontdimen#3\MT@lsfont}%
- }{%
+ \MT@ifempty{#1}\relax{%
\MT@tr@set@space@@{#1}{#3}{1000}%
- \edef\MT@temp{\MT@temp#4\the\@tempdima}%
\fontdimen#3\MT@lsfont=\@tempdima
}%
+ \edef\MT@temp{\MT@temp#4\the\fontdimen#3\MT@lsfont}%
}{%
\MT@tr@set@space@@{#2}{#3}{2000}%
\edef\MT@temp{\MT@temp#4\the\@tempdima}%
@@ -7629,8 +7680,7 @@ time will almost certainly lead to undesired results. Have your choice!}%
\MT@ifdefined@c@TF\MT@tr@unit@
{\edef\@tempb{#1}\MT@scale@to@em}
{\@tempcntb=#1\relax}%
- \@tempdima=\dimexpr \dimexpr\@tempcntb sp*\MT@dimen@six/1000\relax
- -\fontdimen#2\MT@lsfont\relax
+ \@tempdima=\dimexpr\@tempcntb sp*\MT@dimen@six/1000\relax
% \end{macrocode}
% For \fontdim2, we also have to subtract the kerning that letterspacing adds
% to each side of the characters (only half if it's for outer spacing).
@@ -7638,7 +7688,6 @@ time will almost certainly lead to undesired results. Have your choice!}%
\ifnum#2=\tw@
\advance\@tempdima -\dimexpr\MT@letterspace@ sp*\MT@dimen@six/#3\relax
\fi
- \@tempdima=\dimexpr \fontdimen#2\MT@lsfont+\@tempdima\relax
}{%
\MT@ifempty\@tempa{\let\@tempa\MT@letterspace@}\relax
\@tempdima=\dimexpr \numexpr1000+\@tempa sp *\fontdimen#2\MT@lsfont/1000\relax
@@ -8061,7 +8110,7 @@ time will almost certainly lead to undesired results. Have your choice!}%
% in a table (used by the \pkg{luaotfload} function |keepligature|).
%\changes{v2.6}{2016/04/20}{use \pkg{luaotfload} function to keep\slash inhibit ligatures}
% \begin{macrocode}
-%<luatex-def> \MT@if@fontspec@font
+%<luatex-def> \MT@if@luaotf@font
%<luatex-def> {\MT@lua{microtype.noligatures([[#1]],[[\MT@char]])}}\relax
\fi
}%
@@ -8074,7 +8123,7 @@ time will almost certainly lead to undesired results. Have your choice!}%
}%
}{%
\pdfnoligatures#1%
-%<luatex-def> \MT@if@fontspec@font
+%<luatex-def> \MT@if@luaotf@font
%<luatex-def> {\MT@lua{microtype.noligatures([[#1]],"_all_")}}\relax
\MT@vinfo{... Disabling all ligatures}%
}%
@@ -8739,17 +8788,17 @@ else
local function name_to_slot(name, unsafe)
if fonts then
local unicodes
- if fonts.ids then --- legacy luaotfload
+ if fonts.ids then -- legacy luaotfload
local tfmdata = fonts.ids[font.current()]
if not tfmdata then return end
unicodes = tfmdata.shared.otfdata.luatex.unicodes
- else --- new location
+ else -- new location
local tfmdata = fonts.hashes.identifiers[font.current()]
if not tfmdata then return end
unicodes = tfmdata.resources.unicodes
end
local unicode = unicodes[name]
- if unicode then --- does the 'or' branch actually exist?
+ if unicode then -- does the 'or' branch actually exist?
return type(unicode) == "number" and unicode or unicode[1]
end
end
@@ -9067,10 +9116,12 @@ end
%\end{macro}
%\end{macro}
%\begin{macro}{\MT@is@tlig}
-% This might have to change again with the next \LaTeX\ release. ^^A see https://github.com/latex3/latex2e/issues/165
+% This might have to change again with the next \LaTeX\ release, ^^A see https://github.com/latex3/latex2e/issues/165
+% \dots\ or so I feared, but it still seems to be fine.
% \begin{macrocode}
\def\MT@is@tlig#1#2{%
\ifx#1\remove@tlig
+%<debug> \MT@dinfo@nl{3}{> `\the\MT@toks' (removing remove@tlig)}%
\MT@is@number #2\relax\relax
\fi
}
@@ -9619,15 +9670,24 @@ end
% ^^A MID: <46ab4fbb$0$31632$9b4e6d93@newsspool3.arcor-online.net>
%\changes{v2.6}{2014/03/26}{allow \texttt{activate} shortcut (reported by \contributor Karl Berry <karl\at freefriends.org>)}
% ^^A private mail, 2014/03/21
+%\changes{v2.8}{2019/11/25}{fix \texttt{activate} shortcut}
+%\changes{v2.8}{2019/12/12}{ignore spaces}
+%\begin{macro}{\MT@microtypecontext}
% The user may change the context, so that different setups are possible. This
% is especially useful for multi-lingual documents.
%
-% Inside the preamble, it shouldn't actually do anything but remember it for
+% Inside the preamble, this command shouldn't actually do anything but remember itself for
% later.
% \begin{macrocode}
-\def\microtypecontext#1{\MT@addto@setup{\microtypecontext{#1}}}
+\def\microtypecontext{\MT@begin@catcodes\MT@microtypecontext}
+\def\MT@microtypecontext#1{\MT@end@catcodes\MT@addto@setup{\microtypecontext{#1}}}
\MT@addto@setup{%
- \DeclareRobustCommand\microtypecontext[1]{%
+ \DeclareRobustCommand\microtypecontext{%
+ \MT@begin@catcodes
+ \MT@microtypecontext
+ }%
+ \def\MT@microtypecontext#1{%
+ \MT@end@catcodes
\MT@setup@contexts
\let\MT@reset@context\relax
% \end{macrocode}
@@ -9643,13 +9703,21 @@ end
}
% \end{macrocode}
%\end{macro}
+%\end{macro}
%\begin{macro}{\textmicrotypecontext}
%\changes{v2.2}{2007/07/03}{new command: wrapper around \cs{microtypecontext}}
+%\changes{v2.8}{2019/12/12}{ignore spaces}
+%\begin{macro}{\MT@textmicrotypecontext}
+%\begin{macro}{\MT@text@microtypecontext}
% This is just a wrapper around \cs{microtypecontext}.
% \begin{macrocode}
-\DeclareRobustCommand\textmicrotypecontext[2]{{\microtypecontext{#1}#2}}
+\DeclareRobustCommand\textmicrotypecontext{\MT@begin@catcodes\MT@textmicrotypecontext}
+\def\MT@textmicrotypecontext#1{\MT@end@catcodes\MT@text@microtypecontext{#1}}
+\def\MT@text@microtypecontext#1#2{{\microtypecontext{#1}#2}}
% \end{macrocode}
%\end{macro}
+%\end{macro}
+%\end{macro}
%\begin{macro}{\MT@reset@context}
%\changes{v1.9f}{2006/08/03}{only reset context if it has actually been changed}
%\begin{macro}{\MT@reset@context@}
@@ -9701,6 +9769,7 @@ end
\def\MT@reset@context{\aftergroup\MT@reset@context@}%
% \end{macrocode}
% The next time we see the font, we have to reset \emph{all} factors.
+%^^A TODO: only for pdftex? or why at all?
% \begin{macrocode}
\MT@glet@nn{MT@reset@\@tempb @codes}{MT@reset@\@tempb @codes@}%
% \end{macrocode}
@@ -9721,8 +9790,8 @@ end
% We also allow the |activate| shortcut.
% \begin{macrocode}
\define@key{MTC}{activate}[]{%
- \setkeys{MT}{protrusion={#1}}%
- \setkeys{MT}{expansion={#1}}%
+ \setkeys{MTC}{protrusion={#1}}%
+ \setkeys{MTC}{expansion={#1}}%
}
% \end{macrocode}
%\begin{macro}{\MT@pr@context}
@@ -9888,7 +9957,7 @@ end
Ignoring `#1 = {\@tempa*}' in font set\MessageBreak`\MT@curr@set@name'}%
\let\MT@val\@empty}%
% \end{macrocode}
-% In contrast to earlier version, these values will not be expanded immediately
+% In contrast to earlier versions, these values will not be expanded immediately,
% but at the end of the preamble.
%\changes{v1.2}{2004/09/26}{check whether defaults have changed}
%\changes{v1.5}{2004/12/02}{don't test defaults if called after begin document}
@@ -10978,23 +11047,19 @@ end
%\changes{v1.7}{2005/03/07}{disallow automatic expansion if \pdftex\ too old}
%\changes{v2.7a}{2017/08/08}{disallow non-automatic expansion with \luatex}
% \begin{macrocode}
-%<*pdftex-def>
- \MT@requires@pdftex4{%
- \MT@gdef@n{MT@ex@c@\MT@curr@set@name @auto}{autoexpand}%
- }{%
- \MT@warning{pdftex too old for automatic font expansion}%
- }
-%</pdftex-def>
+%<pdftex-def> \MT@requires@pdftex4%
+%<luatex-def> \MT@requires@luatex3\relax
+ {\MT@gdef@n{MT@ex@c@\MT@curr@set@name @auto}{autoexpand}}%
+%<pdftex-def> {\MT@warning{pdftex too old for automatic font expansion}}%
\else
-%<*pdftex-def>
- \MT@requires@pdftex4{%
- \MT@glet@nc{MT@ex@c@\MT@curr@set@name @auto}\@empty
- }\relax
-%</pdftex-def>
+%<pdftex-def> \MT@requires@pdftex4%
%<*luatex-def>
- \MT@warning{Non-automatic font expansion doesn't work with\MessageBreak
- luatex}%
+ \MT@requires@luatex3{%
+ \MT@warning{Non-automatic font expansion doesn't work with\MessageBreak
+ luatex}}%
%</luatex-def>
+ {\MT@glet@nc{MT@ex@c@\MT@curr@set@name @auto}\@empty}%
+%<pdftex-def> \relax
\fi
}
% \end{macrocode}
@@ -12238,11 +12303,30 @@ end
% For <DVI> output, the user must have explicitly passed the \opt{expansion}
% option to the package.
%\changes{v1.5}{2004/12/02}{defaults: turn off expansion for <DVI> output}
+% Under \luatex, expansion works quite differently: the glyphs will be
+% positioned as if they were transformed, without actually being transformed.
+% Since this could still be considered a viable option, we don't disable
+% the feature completely, but issue a warning.
+%\changes{v2.8}{2020/02/09}{warning when expanding in <DVI> mode with \luatex\
+% (reported by \contributor d909 <@\at @>)}
+% ^^A https://tex.stackexchange.com/questions/531413/dvipdfmx-and-dvips-do-not-expand-fonts-properly-with-lualatex-in-dvi-mode
% \begin{macrocode}
%<*pdftex-def|luatex-def>
\def\MT@setup@expansion{%
\ifnum\pdfoutput<\@ne
- \ifMT@opt@expansion \else
+ \ifMT@opt@expansion
+%<*luatex-def>
+ \ifMT@expansion
+ \MT@requires@luatex3{%
+ \MT@warning@nl{Font expansion doesn't work properly with luatex in\MessageBreak
+ DVI mode: the glyphs won't be actually transformed,\MessageBreak
+ but will only be shifted. You might want to use\MessageBreak
+ pdflatex instead. I'll continue anyway ..}%
+ %\MT@expansionfalse
+ }\relax
+ \fi
+%</luatex-def>
+ \else
\MT@expansionfalse
\fi
\fi
@@ -12316,14 +12400,13 @@ end
% (reported by \contributor Ulrike Fischer <news3\at nililand.de>)}
% ^^A private mail, 2017/10/29
% In \luatex\ 1.0.6, the `|autoexpand|' option seems to have been removed altogether
-% and would trigger an error.
+% and would trigger a warning.
% \begin{macrocode}
-%<luatex-def> \let\MT@auto@\@empty
-%<pdftex-def> \let\MT@auto\@empty
+ \let\MT@auto\@empty
\ifMT@auto
% \end{macrocode}
%\end{macro}
-% We turn off automatic expansion if output mode is <DVI> and we're running \pdftex.
+% We turn off automatic expansion if output mode is <DVI>.
%\changes{v1.5}{2004/12/02}{disable automatic expansion for <DVI> output}
%\changes{v2.7}{2017/07/02}{don't disable automatic expansion for <DVI> output with \luatex}
% \begin{macrocode}
@@ -12359,6 +12442,7 @@ end
\def\MT@auto{1000 }%
}%
%</pdftex-def>
+%<luatex-def> \MT@requires@luatex3\relax{\def\MT@auto{autoexpand}}%
\else
%<*pdftex-def>
% \end{macrocode}
@@ -12369,10 +12453,13 @@ end
}%
%</pdftex-def>
%<*luatex-def>
- \ifMT@opt@auto
- \MT@error{Non-automatic font expansion does not work with\MessageBreak
- luatex}{Remove `auto=false' from the package options, or use pdftex.}%
- \fi
+ \MT@requires@luatex3{%
+ \ifMT@opt@auto
+ \MT@error{Non-automatic font expansion does not work with\MessageBreak
+ luatex}{Remove `auto=false' from the package options, or use pdftex.}%
+ \MT@autotrue
+ \fi
+ }\relax
%</luatex-def>
\fi
% \end{macrocode}
@@ -12917,13 +13004,15 @@ end
% \end{macrocode}
% The default sets.
%\changes{v2.2}{2007/04/15}{default set for tracking: \texttt{smallcaps}}
+%\changes{v2.8}{2019/12/04}{default set for expansion: \texttt{alltext-nott}}
+%\changes{v2.8}{2019/12/04}{default set for spacing: \texttt{alltext-nott}}
% \begin{macrocode}
%%% -----------------------------------------------------------------------
%%% DEFAULT SETS
\DeclareMicrotypeSetDefault[protrusion]{alltext}
-\DeclareMicrotypeSetDefault[expansion] {basictext}
-\DeclareMicrotypeSetDefault[spacing] {basictext}
+\DeclareMicrotypeSetDefault[expansion] {alltext-nott}
+\DeclareMicrotypeSetDefault[spacing] {alltext-nott}
\DeclareMicrotypeSetDefault[kerning] {alltext}
\DeclareMicrotypeSetDefault[tracking] {smallcaps}
@@ -12932,13 +13021,11 @@ end
%\subsection{Font variants and aliases}
%\GeneralChanges{Font aliases}
%
-% \begin{macrocode}
-%%% -----------------------------------------------------------------------
-%%% FONT VARIANTS AND ALIASES
-% \end{macrocode}
% These are the variants I happen to be using (expert encoding, oldstyle
% numerals, swashes, alternative, display, inferior and superior numerals):
% \begin{macrocode}
+%%% -----------------------------------------------------------------------
+%%% FONT VARIANTS AND ALIASES
\DeclareMicrotypeVariants{x,j,w,a,d,0,1}
% \end{macrocode}
@@ -12968,9 +13055,10 @@ end
\fi
\ifMT@fontspec\MT@if@true\fi
\ifMT@if@
+%% -- Computer/Latin Modern Roman
\DeclareMicrotypeAlias{lmr}{Latin Modern Roman}
\else
-\DeclareMicrotypeAlias{lmr}{cmr} % lmodern
+\DeclareMicrotypeAlias{lmr}{cmr} % lmodern
\fi
% \end{macrocode}
% The Latin Modern fonts, the virtual fonts from the
@@ -12986,12 +13074,17 @@ end
% (reported by \contributor Jonas Hogstrom <hjb981\at gmail.com>)}
% ^^A https://tex.stackexchange.com/questions/63558/how-to-get-microtype-to-work-with-mathematical-minus-sign-and-package-lmodern
% \begin{macrocode}
-\DeclareMicrotypeAlias{lmsy}{cmsy}
-\DeclareMicrotypeAlias{lmm} {cmm}
-\DeclareMicrotypeAlias{aer} {cmr} % ae
-\DeclareMicrotypeAlias{zer} {cmr} % zefonts
-\DeclareMicrotypeAlias{cmor}{cmr} % eco
-\DeclareMicrotypeAlias{hfor}{cmr} % hfoldsty
+\DeclareMicrotypeAlias{lmsy}{cmsy} % "
+\DeclareMicrotypeAlias{lmm} {cmm} % "
+\DeclareMicrotypeAlias{aer} {cmr} % ae
+\DeclareMicrotypeAlias{zer} {cmr} % zefonts
+\DeclareMicrotypeAlias{cmor}{cmr} % eco
+\DeclareMicrotypeAlias{hfor}{cmr} % hfoldsty
+% \end{macrocode}
+% Another, new Computer Modern extension.
+%\changes{v2.8}{2019/11/22}{declare New Computer Modern as an alias of Latin Modern Roman}
+% \begin{macrocode}
+\DeclareMicrotypeAlias{New Computer Modern}{Latin Modern Roman}
% \end{macrocode}
% The packages \pkg{pxfonts} and \pkg{txfonts} fonts inherit Palatino and Times
% settings respectively,
@@ -13001,67 +13094,84 @@ end
%\changes{v1.9}{2005/08/16}{declare \texttt{qpl} and \texttt{qtm} (\pkg{qfonts}, \TeX\ Gyre)
% as aliases of \texttt{ppl} resp. \texttt{ptm}}
% \begin{macrocode}
-\DeclareMicrotypeAlias{pxr} {ppl} % pxfonts
-\DeclareMicrotypeAlias{qpl} {ppl} % TeX Gyre Pagella (formerly: qfonts/QuasiPalatino)
+%% -- Palatino
+\DeclareMicrotypeAlias{pxr} {ppl} % pxfonts
+\DeclareMicrotypeAlias{qpl} {ppl} % TeX Gyre Pagella (formerly: qfonts/QuasiPalatino)
% \end{macrocode}
% The `<FPL> Neu' fonts, a `re-implementation' of Palatino.
%\changes{v2.2}{2007/05/27}{declare \texttt{fp9x}, \texttt{fp9j} (<FPL> Neu) as aliases of \texttt{ppl[xj]}}
% \begin{macrocode}
-\DeclareMicrotypeAlias{fp9x}{pplx} % FPL Neu
-\DeclareMicrotypeAlias{fp9j}{pplj} % "
+\DeclareMicrotypeAlias{fp9x}{pplx} % FPL Neu
+\DeclareMicrotypeAlias{fp9j}{pplj} % "
% \end{macrocode}
% The \pkg{newpx} package, a replacement for \pkg{pxfonts}.
%\changes{v2.7}{2017/03/13}{declare aliases for \pkg{newpx}}
% \begin{macrocode}
-\DeclareMicrotypeAlias{zpllf}{ppl} % newpxtext
-\DeclareMicrotypeAlias{zplosf}{ppl} % "
-\DeclareMicrotypeAlias{zpltlf}{ppl} % "
-\DeclareMicrotypeAlias{zpltosf}{ppl} % "
-\DeclareMicrotypeAlias{txr} {ptm} % txfonts
-% \end{macrocode}
-% The \pkg{newtx} package, a replacement for \pkg{txfonts}.
-%\changes{v2.7}{2017/02/25}{declare aliases for \pkg{newtx}}
-% \begin{macrocode}
-\DeclareMicrotypeAlias{ntxlf}{ptm} % newtxtext
-\DeclareMicrotypeAlias{ntxosf}{ptm} % "
-\DeclareMicrotypeAlias{ntxtlf}{ptm} % "
-\DeclareMicrotypeAlias{ntxtosf}{ptm} % "
+\DeclareMicrotypeAlias{zpllf}{pplx} % newpxtext
+\DeclareMicrotypeAlias{zplosf}{pplj} % "
+\DeclareMicrotypeAlias{zpltlf}{pplx} % "
+\DeclareMicrotypeAlias{zpltosf}{pplj} % "
% \end{macrocode}
-% The \pkg{tempora} package.
-%\changes{v2.7}{2017/02/25}{declare aliases for \pkg{tempora}}
+% The \pkg{domitian} package.
+%\changes{v2.8}{2020/03/07}{declare aliases for \pkg{step} and \pkg{domitian}
+% (notified by \contributor Daniel Benjamin Miller <dbmiller\at dbmiller.org>)}
+% ^^A private mail, 2020/02/27
% \begin{macrocode}
-\DeclareMicrotypeAlias{Tempora-TLF}{ptm} % tempora
-\DeclareMicrotypeAlias{Tempora-TOsF}{ptm}% "
-\DeclareMicrotypeAlias{qtm} {ptm} % TeX Gyre Termes (formerly: qfonts/QuasiTimes)
+\DeclareMicrotypeAlias{Domitian-TLF} {pplx}% domitian
+\DeclareMicrotypeAlias{Domitian-TOsF}{pplj}% "
% \end{macrocode}
% The OpenType versions:
%
%\changes{v2.5}{2012/03/29}{declare TeX Gyre Pagella, Asana Math, Palatino <LT> Std, and Palatino
% as aliases of Palatino Linotype (OpenType version)}
% \begin{macrocode}
+\DeclareMicrotypeAlias{Domitian} {Palatino Linotype}
\DeclareMicrotypeAlias{TeX Gyre Pagella}{Palatino Linotype}
\DeclareMicrotypeAlias{Palatino LT Std} {Palatino Linotype}
\DeclareMicrotypeAlias{Palatino} {Palatino Linotype}
\DeclareMicrotypeAlias{Asana Math} {Palatino Linotype}
+%% -- Times New Roman
+\DeclareMicrotypeAlias{txr}{ptm} % txfonts
+% \end{macrocode}
+% The \pkg{newtx} package, a replacement for \pkg{txfonts}.
+%\changes{v2.7}{2017/02/25}{declare aliases for \pkg{newtx}}
+% \begin{macrocode}
+\DeclareMicrotypeAlias{ntxlf}{ptmx} % newtxtext
+\DeclareMicrotypeAlias{ntxosf}{ptmj} % "
+\DeclareMicrotypeAlias{ntxtlf}{ptmx} % "
+\DeclareMicrotypeAlias{ntxtosf}{ptmj} % "
+% \end{macrocode}
+% The \pkg{tempora} package.
+%\changes{v2.7}{2017/02/25}{declare aliases for \pkg{tempora}}
+% \begin{macrocode}
+\DeclareMicrotypeAlias{Tempora-TLF}{ptmx} % tempora
+\DeclareMicrotypeAlias{Tempora-TOsF}{ptmj} % "
+\DeclareMicrotypeAlias{qtm}{ptm} % TeX Gyre Termes (formerly: qfonts/QuasiTimes)
+% \end{macrocode}
+% The \pkg{step} package.
+% \begin{macrocode}
+\DeclareMicrotypeAlias{STEP-TLF}{ptmx} % step
+\DeclareMicrotypeAlias{STEP-TOsF}{ptmj} % "
+% \end{macrocode}
+% The \pkg{stix} and \pkg{stix2} packages (the latter has departed a bit from being
+% a Times clone, but still seems close enough).
+%\changes{v2.8}{2020/05/31}{declare aliases for \pkg{stix} and \pkg{stix2} fonts}
+% \begin{macrocode}
+\DeclareMicrotypeAlias{stix} {ptm} % stix
+\DeclareMicrotypeAlias{stix2}{ptm} % stix2
% \end{macrocode}
%\todo{check Times variants}
% More Times variants, to be checked: |pns|, |mns| (TimesNewRomanPS); |mnt|
% (Times\-NewRomanMT, TimesNRSevenMT), |mtm| (TimesSmallTextMT); |pte|
% (TimesEuropa); |ptt| (TimesTen); TimesEighteen; TimesModernEF.
%
-% The \pkg{eulervm} package virtually extends the Euler fonts.
-%\changes{v1.9e}{2006/07/28}{declare \texttt{zeur} and \texttt{zeus} (\pkg{eulervm})
-% as aliases of \texttt{eur} resp. \texttt{eus} (\pkg{euler})}
-% \begin{macrocode}
-\DeclareMicrotypeAlias{zeur}{eur} % Euler VM
-\DeclareMicrotypeAlias{zeus}{eus} % "
-% \end{macrocode}
% MicroPress's Charter version (\pkg{chmath}).
%\changes{v2.2}{2007/06/08}{declare \texttt{chr} (\pkg{chmath}) as an alias of \texttt{bch}
% (reported by \contributor Geoff Vallis <gkv\at Princeton.EDU>)}
% ^^A private mail, 2007/06/07
% \begin{macrocode}
-\DeclareMicrotypeAlias{chr} {bch} % CH Math
+%% -- Charter
+\DeclareMicrotypeAlias{chr}{bch} % CH Math
% \end{macrocode}
%\changes{v2.7}{2017/03/13}{declare aliases for \pkg{XCharter}}
% The \pkg{XCharter} package extends the Charter fonts.
@@ -13074,29 +13184,38 @@ end
% as an alias of \texttt{bch}}
% and <URW> Garamond.
% \begin{macrocode}
-\DeclareMicrotypeAlias{mdbch}{bch} % mathdesign/Charter
-\DeclareMicrotypeAlias{mdugm}{ugm} % mathdesign/URW Garamond
+\DeclareMicrotypeAlias{mdbch}{bch} % mathdesign/Charter
+%% -- Garamond
+\DeclareMicrotypeAlias{mdugm}{ugm} % mathdesign/URW Garamond
% \end{macrocode}
% The \pkg{garamondx} package, an extension of <URW> Garamond, providing
% small caps and oldstyle figures.
%\changes{v2.5}{2013/02/20}{declare \texttt{zgmx} etc. (\pkg{garamondx})
% as aliases of \texttt{ugm}}
% \begin{macrocode}
-\DeclareMicrotypeAlias{zgmx}{ugm} % garamondx
-\DeclareMicrotypeAlias{zgmj}{ugm} % "
-\DeclareMicrotypeAlias{zgmI}{ugm} % "
-\DeclareMicrotypeAlias{zgmq}{ugm} % "
+\DeclareMicrotypeAlias{zgmx}{ugm} % garamondx
+\DeclareMicrotypeAlias{zgmj}{ugm} % "
+\DeclareMicrotypeAlias{zgmI}{ugm} % "
+\DeclareMicrotypeAlias{zgmq}{ugm} % "
+%% --
% \end{macrocode}
% <URW> Letter Gothic is similar enough to Bitstream Letter Gothic to share the
% configuration.
% \begin{macrocode}
-\DeclareMicrotypeAlias{ulg} {blg} % URW LetterGothic -> Bitstream LetterGothic12Pitch
+\DeclareMicrotypeAlias{ulg}{blg} % URW LetterGothic -> Bitstream LetterGothic12Pitch
+% \end{macrocode}
+% The \pkg{eulervm} package virtually extends the Euler fonts.
+%\changes{v1.9e}{2006/07/28}{declare \texttt{zeur} and \texttt{zeus} (\pkg{eulervm})
+% as aliases of \texttt{eur} resp. \texttt{eus} (\pkg{euler})}
+% \begin{macrocode}
+\DeclareMicrotypeAlias{zeur}{eur} % Euler VM
+\DeclareMicrotypeAlias{zeus}{eus} % "
% \end{macrocode}
% Euro symbol fonts, to save some files.
% \begin{macrocode}
-\DeclareMicrotypeAlias{zpeus} {zpeu} % Adobe Euro sans -> serif
-\DeclareMicrotypeAlias{eurosans}{zpeu} % Adobe Euro sans -> serif
-\DeclareMicrotypeAlias{euroitcs}{euroitc}% ITC Euro sans -> serif
+\DeclareMicrotypeAlias{zpeus} {zpeu} % Adobe Euro sans -> serif
+\DeclareMicrotypeAlias{eurosans}{zpeu} % Adobe Euro sans -> serif
+\DeclareMicrotypeAlias{euroitcs}{euroitc} % ITC Euro sans -> serif
% \end{macrocode}
%
@@ -13145,7 +13264,7 @@ end
% encoding with \cmd\DeclareTextSymbol\ or \cmd\DeclareTextComposite.
% Characters defined via \cmd\chardef\ are also possible.
%
-% Ligatures and \cmd\mathchardef ed symbols have to be specified numerically.
+% Ligatures and \cmd\mathchardef'ed symbols have to be specified numerically.
% Of course, numerical identification is possible in any other case, too.
%
%\changes{v1.1}{2004/09/14}{remove 8-bit characters from the configuration files
@@ -13157,7 +13276,8 @@ end
% combination with the `|inputenc|' key.
%
% With \xetex\ or \luatex, in contrast, it is advisable to use the proper
-% Unicode characters.
+% Unicode characters, or the font-specific glyph names prefixed with `|/|'
+% (cf. section \ref{sec:OpenType}).
%
%\subsection{Character inheritance}
%\GeneralChanges{Inheritance}
@@ -16971,9 +17091,9 @@ end
%
%\IfFileExists{microtype-utf.pdf}
% {\includepdf[pages=-,
-% addtotoc={1,section,1,OpenType configuration files,section.\thesection,
-% \utfsectioni,subsection,2,Character inheritance,subsection.\thesection.1,
-% \utfsectionii,subsection,2,Character protrusion,subsection.\thesection.2}]
+% addtotoc={1,section,1,OpenType configuration files,sec:OpenType,
+% \utfsectioni,subsection,2,Character inheritance,sub:OT-inheritance,
+% \utfsectionii,subsection,2,Character protrusion,sub:OT-protrusion}]
% {microtype-utf.pdf}}
% {\section{OpenType configuration settings}
% To view the OpenType configuration settings, first typeset
@@ -17134,7 +17254,7 @@ normal, and shrunk by 5\%:
% Grave accent \` Left brace \{ Vertical bar \|
% Right brace \} Tilde \~}
%
-% \CheckSum{10666}
+% \CheckSum{10748}
%
% \Finale
%
diff --git a/macros/latex/contrib/microtype/microtype.ins b/macros/latex/contrib/microtype/microtype.ins
index 7fa515b865..e26326e802 100644
--- a/macros/latex/contrib/microtype/microtype.ins
+++ b/macros/latex/contrib/microtype/microtype.ins
@@ -10,7 +10,7 @@
The `microtype' package
Subliminal refinements towards typographical perfection
- Copyright (c) 2004--2019 R Schlicht <w.m.l@gmx.net>
+ Copyright (c) 2004--2020 R Schlicht <w.m.l@gmx.net>
This work may be distributed and/or modified under the conditions of the
LaTeX Project Public License, either version 1.3c of this license or (at
diff --git a/macros/latex/contrib/microtype/microtype.pdf b/macros/latex/contrib/microtype/microtype.pdf
index 6c2810a2c9..9a628fbca3 100644
--- a/macros/latex/contrib/microtype/microtype.pdf
+++ b/macros/latex/contrib/microtype/microtype.pdf
Binary files differ
diff --git a/macros/latex/contrib/stringstrings/stringstrings.dtx b/macros/latex/contrib/stringstrings/stringstrings.dtx
index 24baeeda9c..9f0effbb27 100644
--- a/macros/latex/contrib/stringstrings/stringstrings.dtx
+++ b/macros/latex/contrib/stringstrings/stringstrings.dtx
@@ -1,4385 +1,4386 @@
-% \iffalse
-%<package>\ProvidesPackage{stringstrings}
-%<package>[2015/02/02 v1.23
-%<package> Extensive array of string manipulation routines for
-%<package> cosmetic and programming application]
-%<package>\NeedsTeXFormat{LaTeX2e}
-%<*driver>
-% This work may be distributed and/or modified under the
-% conditions of the LaTeX Project Public License, either version 1.3
-% of this license or (at your option) any later version.
-% The latest version of this license is in
-% http://www.latex-project.org/lppl.txt
-% and version 1.3c or later is part of all distributions of LaTeX
-% version 2005/12/01 or later.
-%
-% This work has the LPPL maintenance status `maintained'.
-%
-% The Current Maintainer of this work is Steven B. Segletes.
-%
-% v1.00 -Initial Release
-% v1.01 -Included support for & character, though it loses catcode 4
-% status
-% v1.02 -Bug fix. Needed some % chars in \convertchar to avoid extra spaces
-% v1.03 -Documentation fix; notably removed 's' from \narg in \getargs
-% v1.04 -Removed \rotate command, as it conflicts with environment in
-% \usepackage{rotating}
-% v1.10 -Fixed bug in convertword by adding @@@stringsize definition to
-% \whereisword
-% -Added suite of routines to support \capitalizetitle functionality
-% v1.20 -Added ability to encode/decode arbitrary tokens
-% v1.21 -Added %, removing extra space (bug) from \whereisword
-% v1.22 -Added %, removing extra space (bug) from \getargs
-% v1.23 -Changed {~} to {\ } in \retokenizechar
-% -Forced all stringtest commands to function outside of math mode
-% which will give correct result, when invoked within math mode.
-\documentclass{ltxdoc}
-\usepackage{stringstrings}
-\DisableCrossrefs
-\CodelineNumbered
-% DEFINE SOME CAMMANDS THAT ARE EASIER HERE THAN IN DocInput ENVIRONMENT
-\newcommand\stringstrings{\textsf{stringstrings}~}
-\newcommand\coolstr{\textsf{coolstr}~}
-% ITALICIZED i.e.,
-\newcommand{\ie}{\textit{i.e.},~}%
-% ITALICIZED e.g.,
-\newcommand{\eg}{\textit{e.g.},~}%
-% ITALICIZED etc.
-\newcommand{\etc}{\textit{etc}.}%
-\def\modetablelayout{|l|c|c|c|}
-\def\mylayout{@{}c|c|l@{}}
-\stringencode{\|}
-\stringdecode[q]{\thestring}
-\edef\mypipe{\thestring}
-\stringencode{\carat}
-\stringdecode[q]{\thestring}
-\edef\mycarat{\thestring}
-
-\GetFileInfo{stringstrings.sty}
-\begin{document}
- \title{The \stringstrings Package\\
- \rule{0em}{0.7em}\small\fileinfo}
- \author{Steven B. Segletes\\
- steven.b.segletes.civ@mail.mil}
- \date{\filedate\\
- \fileversion}
- \maketitle
- \DocInput{stringstrings.dtx}
-\end{document}
-%</driver>
-%\fi
-% \parskip 1ex
-% \begin{abstract}
-% The \stringstrings package provides a large and sundry array of routines
-% for the manipulation of strings. The routines are developed not only
-% for cosmetic application, such as the changing of letter
-% cases, selective removal of character classes, and string
-% substitution,
-% but also for programming application, such as character look-ahead
-% applications, argument parsing, |\if|-tests for various string
-% conditions, etc. A key tenet employed during the
-% development of this package (unlike, for comparison, the |\uppercase|
-% and |\lowercase| routines) was to have resultant strings be
-% ``expanded'' (\ie the product of an |\edef|), so that the
-% \stringstrings routines could be strung together sequentially and
-% nested (after a fashion) to achieve very complex manipulations.
-%
-% \end{abstract}
-%
-% \vspace{-.55em}
-% \tableofcontents\rule[.2em]{4.5in}{.3mm}\vspace{-1.5em}
-%
-% \section {Motivation}
-%
-% There were two seminal moments that brought about my motivation to
-% develop this package. The first was the realization of the oft
-% cited and infamous \LaTeX{} limitation concerning the inability to
-% nest letter-case changes with \LaTeX{}'s intrinsic |\uppercase| and
-% |\lowercase| routines. The second,
-% though not diminishing its utility in many useful applications, was
-% the inherent limitations of the \coolstr package, which is otherwise
-% a useful tool for extracting substrings and measuring string lengths.
-%
-% The former is well documented and need not be delved into in great
-% detail. Basically, as it was explained to me, |\uppercase| and
-% |\lowercase| are expanded by \LaTeX{} at the last possible moment, and
-% thus attempts to capture their result for subsequent use are doomed to
-% failure. One is forced to adopt the left-to-right (rather than
-% nested) approach to case changes.
-%
-% In the case of the \coolstr package, I again want to express
-% my admiration for the utility of this package. I briefly considered
-% building the \stringstrings package around it, but it proved
-% unworkable, because of some intrinsic limitations.
-% First, \coolstr operates on
-% strings, not tokens, and so in order to fool it into working on
-% tokenized inputs, one must use the cumbersome nomenclature of
-%
-% |\expandafter\substr\expandafter{\TokenizedString}{...}{...}|
-% \vspace{1ex}\\%
-% in order to, for example grab a substring of |\TokenizedString|. One
-% may |\def| the result of this subroutine, and use it elsewhere in an
-% unaltered state. However, one may not expand, via |\edef|, the
-% result of |\substr| in order to use it as input to a subsequent string
-% manipulation. And thus, the desire to engage in successive string
-% manipulations of different natures (\eg capitalization of leading
-% characters, extraction of words, reversal of character sequence,
-% removal of character classes, etc., etc.) are not achievable in the
-% context of \textsf{coolstr}.
-%
-% It was this state of affairs that brought me to hunger for routines
-% that could thoroughly manipulate strings, and yet produce their result
-% ``in the clear'' (\ie in an untokenized form) which could be used as
-% input for the next manipulation. It turns out the heart of the
-% \stringstrings package which achieves this goal is based on the simple
-% (if much maligned) |\if| construct of \LaTeX{}, by using successive
-% iterations of the following construct:
-%
-% |\if <|\textit{test char.}|><|\textit{string}|><|\textit{manipulated
-% test char.}|>\else ...\fi|
-% \vspace{1ex}\\%
-% in which a character at the begining of a string is tested. If a
-% match is found,
-% the manipulated test character is replaced at the end of the string,
-% while the original test character is lopped off from the beginning of
-% the string. A false result is used to proceed to a different test
-% character. In this manner, the string may be rotated through,
-% character by character, performing the desired manipulations. And,
-% most importantly, the product of this operation may be placed into an
-% |\edef|.
-%
-% It turns out there was one glitch to this process (which has been
-% successfully remedied in the \stringstrings package). And that is that
-% there are several tokenized \LaTeX{} symbols (\eg |\$|, |\{|, |\}|,
-% |\AE|, |\oe|, etc.) which expand to more than a single byte. If
-% I was more savvy on \LaTeX{} constructs, I would probably have known
-% how to handle this better. But my solution was to develop my own
-% encoding scheme wherein these problematic characters were re-encoded
-% in my intermediate calculations as a 2-byte (escape character-escape code)
-% combination, and only converted back into \LaTeX{} symbols at the last
-% moment, as the finalized strings were handed back to the user.
-%
-% There are also several tokens, like |\dag|, |\ddag|, |\P|, |\d|, |\t|,
-% |\b|, and |\copyright| which
-% can not be put into an |\edef| construct. The solution developed for
-% strings containing these such characters was to convert the encoded
-% string not into an expanded |\edef| construct, but rather back into a
-% tokenized form amenable to |\def|. The |\retokenize| command
-% accomplishes this task and several others.
-%
-% There was also one glitch that I have not yet been able to resolve
-% to my full satisfaction, though I have provided a workaround.
-% And that is the occurance of \LaTeX{} grouping characters, |{| and
-% |}|, that might typically occur in math mode. The problem is that the
-% character-rotate technique that is the core of \stringstrings breaks
-% when rotating these group characters. Why?? Because a string
-% comprised of |...{...}...|, during the rotation process, will
-% eventually become |...}......{| during an intermediate stage of
-% character rotation. This
-% latter string breaks \LaTeX{} because it is not a properly constructed
-% grouping, even if subsequent rotations would intend to bring it back
-% into a proper construction.
-%
-% And so, while \stringstrings can handle certain math-mode
-% constructs (\eg |$|, |^|, and |_|), it is unable to {\it directly}
-% handle groupings that are brought about by the use of curly braces.
-% Note that |\{| and |\}| are handled just fine, but not |{| and |}|.
-% As a result of this limitation regarding the use of grouping braces
-% within strings, \stringstrings support for various math symbols
-% remains quite limited.
-%
-% While it is also common to use curly braces to
-% delimit the arguments of diacritcal marks in words like
-% |m\"{u}de| \etc, the same result can be achieved without the
-% use of braces as |m\"ude|, with the proper result obtained: m\"ude.
-% For diacritical marks that have an alphabetic token such as the breve,
-% given by |\u|, the curly braces can also be omitted, with the only
-% change being a space required after the |\u| to delimit the token.
-% Thus, |c\u at| becomes c\u at. Therefore, when manipulating strings
-% containing diacritical marks, it is best to formulate them, if
-% possible, without the use of curly braces.
-%
-% The workaround fix I have developed, to provide grouping functions
-% within \stringstrings arguments, involves the use of newly defined
-% tokens |\LB| and |\RB| (to be used in lieu of |{| and |}|),
-% along with a command |\retokenize|. This
-% workaround will be described subsequently, in the Disclaimers section.
-%
-% \section{Philosophy of Operation}
-%
-% There are several classes of commands that have been developed as part
-% of the \stringstrings package. In addition to {\bf Configuration
-% Commands}, which set parameters for subsequent string operations,
-% there are the following command classes:
-% \begin{itemize}
-% \item {\bf Commands to Manipulate Strings} -- these commands take an
-% input string or token and perform a specific manipulation on the
-% string;
-% \item {\bf Commands to Extract String Information} -- these commands
-% take an input string or token, and ascertain a particular
-% characteristic of the string; and
-% \item {\bf Commands to Test Strings} -- these commands take an input
-% string or token and test for a particular alphanumeric condition.
-% \end{itemize}
-% Of course, there are also {\bf Support Commands} which are low-level
-% routines which provide functionality to the package, which are
-% generally not accessible to the user.
-%
-% To support the intended philosophy that the user may achieve a complex
-% string manipulation though a series of simpler manipulations (which
-% is otherwise known as nesting), a mechanism had to be developed. True
-% command nesting of the form |\commandA{\commandB{\commandC{string}}}|
-% is {\bf not} supported by the \stringstrings package, since many of
-% the manipulation commands make use of (and would thus inadvertantly
-% overwrite) the same sets of variables used by other routines.
-% Furthermore, there is that 'ol left-to-right philosophy of \LaTeX{} to
-% contend with.
-%
-% Instead, for the case of commands that manipulate strings, the expanded
-% (\ie |\edef|'ed) result of the manipulation is placed into a string
-% called |\thestring|\DescribeMacro{\thestring}. Then, |\thestring|
-% may either be directly used
-% as the input to a subsequent operation, or |\edef|'ed into another
-% variable to save it for future use.
-%
-% String manipulation commands use an optional first argument to specify
-% what to do with the manipulated string (in addition to putting it in
-% |\thestring|). Most string manipulation
-% commands default to verbose mode |[v]|\DescribeMacro{[v]}, and print
-% out their result immediately on the assumption that a simple string
-% manipulation is, many times, all that is required. If the user wishes
-% to use the manipulated result as is, but needs to use it later in the
-% document, a quiet mode |[q]| \DescribeMacro{[q]} is provided which
-% suppresses the immediate output of |\thestring|.
-%
-% In the absence of symbol tokens (\eg |\$|, |\&|, |\oe|, |\^|, \etc),
-% the verbose and quiet modes would prove sufficient. However, when a
-% tokenized symbol is |\edef|'ed, the token is expanded to the actual
-% symbolic representation of the character. If this expanded symbol is
-% used as part of an input string to a
-% subsequent \stringstrings manipulation
-% routine, it gets confused, because the means to detect the token are
-% characteristically different than the means to detect the expanded
-% symbol. Thus, if one wishes to use |\thestring| as an input to a
-% subsequent manipulation routine, \stringstrings provides an encoded
-% mode |[e]| \DescribeMacro{[e]} which places an encoded version of the
-% resulting manipulation into
-% |\thestring|. The encoded mode is also a quiet mode, since it leaves
-% |\thestring| in a visually unappealing state that is intended for
-% subsequent manipulation.
-%
-% The encoded mode is not a \LaTeX{} standard,
-% but was developed for this application. And therefore, if the result
-% of a \stringstrings manipulation is needed as input for a routine
-% outside of the \stringstrings package, the encoded mode will be of no
-% use. For this reason (and others),
-% the |\retokenize| \DescribeMacro{\retokenize}
-% command is provided. Its use is one of only three times that a
-% \stringstrings command
-% returns a tokenized |\def|'ed string in |\thestring|, rather than an
-% expanded, |\edef|'ed string. And in the other two cases, both
-% call upon |\retokenize|.
-%
-% In addition to providing tokenized strings that can be passed to other
-% \LaTeX{} packages, |\retokenize| can also remedy \stringstrings problems
-% associated with inadequate character encodings (OT1) and the use of
-% grouping characters |{| and |}| within \stringstrings arguments. This
-% issue is discussed more fully in the Disclaimers section, and in the
-% actual |\retokenize| command description.
-%
-% Therefore, for complex multistage string manipulations, the
-% recommended procedure
-% is to perform each stage of the manipulation in encoded |[e]| mode,
-% passing along |\thestring| to each subsequent stage of the
-% manipulation, until the very last manipulation, which should be,
-% at the last, performed in verbose |[v]| or quiet |[q]| modes. If
-% the resulting manipulation is to be passed to a command outside of the
-% \stringstrings package for further manipulation (or if the string
-% contains characters which cannot be placed into an |\edef|),
-% |\thestring| may
-% need to be |\retokenize|'ed. If concatenations of two (or more) different
-% manipulations are to be used as input to a third manipulation,
-% |\thestring| from the first manipulation will need to be immediately
-% |\edef|'ed into a different variable, since |\thestring| will be
-% overwritten by the second manipulation (see Table~\ref{tbl:modes}
-% for summary).
-% \begin{table}[h]
-% \begin{center}
-% \caption{\bf Execution Modes of \stringstrings Commands
-% \label{tbl:modes}}\vspace{0.5em}
-% \small
-% \begin{tabular}\modetablelayout
-% \hline
-% Mode & Coding & Use when result is & |\thestring| is\\
-% \hline
-% \hline
-% |[v]| verbose & decoded or retokenized & final & echoed \\
-% |[q]| quiet & decoded or retokenized & final & not echoed \\
-% |[e]| encoded & encoded & intermediate & not echoed \\
-% \hline
-% \end{tabular}
-% \end{center}
-% \end{table}
-%
-% Moving on to commands that extract string information, this class of
-% commands (unless otherwise noted) output their result into a token
-% which is given the name |\theresult|\DescribeMacro{\theresult}.
-% This token does not contain a manipulated form of the string, but
-% rather a piece of information about the string, such as ``how many
-% characters are in the string?'', ``how many words are in the string?'',
-% ``how many letter `e's are in the string?'', \etc
-%
-% The final class of \stringstrings commands are the string-test
-% commands. While some of this class of commands also store their
-% test result in |\theresult|, most of these commands use the
-% |\test|{\it condition}|{|{\it string}|}| |\if|{\it
-% condition} constructs (see {\sf ifthen} package) to answer true/false
-% questions like ``is the string composed entirely of lowercase
-% characters?'', ``is the string's first letter capitalized?'' \etc
-%
-% \section {Configuration Commands}
-%
-% \noindent%
-% |\Treatments{|{\it U-mode}|}{|{\it l-mode}|}{|{\it p-mode}|}{|{\it%
-% n-mode}|}{|{\it s-mode}|}{|{\it b-mode}|}|\\
-% |\defaultTreatments|\\
-% |\encodetoken[|{\it index}|]{|{\it token}|}|\\
-% |\decodetoken[|{\it index}|]{|{\it token}|}|\\
-% |\+|\\
-% |\?|
-%
-% The command |\Treatments| \DescribeMacro{\Treatments}
-% is used to define how different classes of
-% characters are to be treated by the command |\substring|, which is the
-% brains of the \stringstrings package. As will be explained in the
-% next section, most string manipulation routines end up calling
-% |\substring|, the difference between them being a matter of how these
-% character treatments are set prior to the call.
-% Because most string manipulation
-% commands will set the treatments as necessary to perform their given
-% task, and reset them to the default upon conclusion, one should set
-% the |\Treatments| immediately prior to the call upon |\substring|.
-%
-% |\Treatments| has six arguments, that define the mode of treatment
-% for the six classes of characters that \stringstrings has designated.
-% All modes are one-digit integers. They are described below:
-% \begin{itemize}
-% \item{\it U-mode---} This mode defines the
-% treatment for the upper-case characters (A--Z, \OE, \AE, \AA, \O, and
-% \L).
-% A mode of 0 tells |\substring| to remove upper-case characters, a
-% mode of 1 indicates to leave upper-case characters alone, and
-% a mode of 2 indicates to change the case of upper-case
-% characters to lower case.
-%
-% \item {\it l-mode---} This mode defines the
-% treatment for the lower-case characters (a--z, \oe, \ae, \aa, \o, \l,
-% and \ss).
-% A mode of 0 tells |\substring| to remove lower-case characters, a
-% mode of 1 indicates to leave lower-case characters alone, and
-% a mode of 2 indicates to change the case of lower-case
-% characters to upper case. In the case of the eszett character (\ss),
-% there is no uppercase equivalent, and so an {\it l-mode} of 2 will
-% leave the eszett unchanged.
-%
-% \item {\it p-mode---} This mode defines the
-% treatment for the punctuation characters. \stringstrings
-% defines the punctuation characters as ; : ' " , . ? ` and ! A mode of
-% 0 tells |\substring| to remove punctuation characters, while a mode of
-% 1 indicates to leave punctuation characters as is.
-%
-% \item {\it n-mode---} This mode defines the
-% treatment for the numerals (0--9). A mode of
-% 0 tells |\substring| to remove numerals, while a mode of
-% 1 indicates to leave numerals as is.
-%
-% \item {\it s-mode---} This mode defines the
-% treatment for the symbols. \stringstrings
-% defines symbols as the following characters and diacritical marks:
-% \substring{/ * ( ) - = + [ ] $<$ $>$}{1}{$} \& |\& \% \# \{ \} \_ \$|
-% \dag~\ddag~\S~\P~\L~\pounds~\copyright~\v x \^x \~x \"x \`x \'x \=x
-% \.x \u x \v x
-% \H x \c x \d x \t{xx} \b x as well as |@|, math and text carats,
-% and the pipe symbol. A mode of
-% 0 tells |\substring| to remove symbols, while a mode of
-% 1 indicates to leave symbols as is. Note that the \$ symbol, when
-% used for entering and exiting math mode, is left intact, regardless of
-% {\it s-mode}.
-%
-% % \item {\it b-mode---} This mode defines the
-% treatment for blankspaces. A mode of
-% 0 tells |\substring| to remove blankspaces, while a mode of
-% 1 indicates to leave blankspaces as is. The treatment apples to both
-% soft (~) as well as hard (|~|) spaces.
-% \end{itemize}
-%
-% The command |\defaultTreatments| \DescribeMacro{\defaultTreatments}
-% resets all treatment modes to their default settings, which are to
-% leave individual characters unaltered by a string manipulation.
-%
-% The commands |\encodetoken| \DescribeMacro{\encodetoken} and
-% |\decodetoken| \DescribeMacro{\decodetoken} have been introduced in
-% \stringstrings v1.20. Prior to this version, the ability of
-% \stringstrings to handle a particular token was dependent on whether
-% provisions for encoding that token had been explicitly hardwired into
-% the \stringstrings package. A large number of alphabetic and
-% diacritical marks had reserved encodings set aside in \stringstrings
-% for their treatment (see next paragraph or Table 2 for their enumeration).
-% However, requests would invariable come in for treating yet another
-% token, which required a new \stringstrings release for each revision.
-% The command |\encodetoken| allows the user to specify an arbitrary
-% token, to be assigned to the reserved encoding slot associated with the
-% index (permissible indices are in the range 1--3, 1 being the default).
-% Once assigned an encoding slot, a token may be successfully manipulated in
-% \stringstrings routines. Once \stringstrings manipulation is
-% complete, the token must undergo a |\decodetoken| operation in order
-% for that token to be reset to a normal \LaTeX{} token again (lest it
-% display in its encoded \stringstrings form).
-%
-% The commands |\+| and |\?| \DescribeMacro{\+}\DescribeMacro{\?}
-% are a pair that work in tandem to turn on \stringstrings encoding and
-% turn off \stringstrings encoding, respectively. Generally, the user
-% will not need these commands unless he is writing his own routines to
-% take advantage of the \stringstrings library. After |\+| is called,
-% tokens which would otherwise expand to multi-byte sequences are
-% instead encoded according to the \stringstrings methodology. The
-% affected tokens
-% include
-% |\$ \^ \" \{ \} \_ \dag \ddag \P \S \ss \AA \aa \O \o \AE \ae|
-% |\OE|, |\oe|, |\~|, |\`|, |\'|, |\=|, |\.|, |\u|, |\v|, |\H|, |\c|,
-% |\d|, |\t|, |\b|, |\copyright|, |\pounds|, |\L|, |\l|, and |\ss|. In
-% addition, pipes, text carats, and hard spaces (|~|) are encoded
-% as well. The command |\?| restores the
-% standard \LaTeX{} encoding for these tokens.
-%
-% \section {Commands to Manipulate Strings}
-%
-% These commands take an
-% input string or token and perform a specific manipulation on the
-% string. They include:
-%
-% \noindent|\substring[|{\it mode}|]{|{\it
-% string}|}{|{\it min}|}{|{\it max}|}|\\
-% |\caseupper[|{\it mode}|]{|{\it string}|}|\\
-% |\caselower[|{\it mode}|]{|{\it string}|}|\\
-% |\solelyuppercase[|{\it mode}|]{|{\it string}|}|\\
-% |\solelylowercase[|{\it mode}|]{|{\it string}|}|\\
-% |\changecase[|{\it mode}|]{|{\it string}|}|\\
-% |\noblanks[|{\it mode}|]{|{\it string}|}|\\
-% |\nosymbolsnumerals[|{\it mode}|]{|{\it string}|}|\\
-% |\alphabetic[|{\it mode}|]{|{\it string}|}|\\
-% |\capitalize[|{\it mode}|]{|{\it string}|}|\\
-% |\capitalizewords[|{\it mode}|]{|{\it string}|}|\\
-% |\capitalizetitle[|{\it mode}|]{|{\it string}|}|\\
-% |\addlcword{|{\it word}|}|\\
-% |\addlcwords{|{\it word1 word2 word3 \ldots}|}|\\
-% |\resetlcwords|\\
-% |\reversestring[|{\it mode}|]{|{\it string}|}|\\
-% |\convertchar[|{\it mode}|]{|{\it
-% string}|}{|{\it from-char}|}{|{\it to-string}|}|\\
-% |\convertword[|{\it mode}|]{|{\it
-% string}|}{|{\it from-string}|}{|{\it to-string}|}|\\
-% |\rotateword[|{\it mode}|]{|{\it string}|}|\\
-% |\removeword[|{\it mode}|]{|{\it string}|}|\\
-% |\getnextword[|{\it mode}|]{|{\it string}|}|\\
-% |\getaword[|{\it mode}|]{|{\it string}|}{|{\it n}|}|\\
-% |\rotateleadingspaces[|{\it mode}|]{|{\it string}|}|\\
-% |\removeleadingspaces[|{\it mode}|]{|{\it string}|}|\\
-% |\stringencode[|{\it mode}|]{|{\it string}|}|\\
-% |\stringdecode[|{\it mode}|]{|{\it string}|}|\\
-% |\gobblechar[|{\it mode}|]{|{\it string}|}|\\
-% |\gobblechars[|{\it mode}|]{|{\it string}|}{|{\it n}|}|\\
-% |\retokenize[|{\it mode}|]{|{\it string}|}|
-%
-% \noindent
-% Unless otherwise noted, the {\it mode} may take one of three values:
-% |[v]| for verbose mode (generally, the default), |[q]| for quiet mode,
-% and |[e]| for encoded mode. In all cases, the result of
-% the operation is stored in |\thestring|. In verbose mode, it is also
-% output immediately (and may be captured by an |\edef|). In quiet mode,
-% no string is output, though the result still resides in |\thestring|.
-% Encoded mode is also a quiet mode. However, the encoded mode saves
-% the string with its \stringstrings encodings. Encoded mode indicates
-% that the result is an intermediate result which will be subsequently
-% used as input to another \stringstrings manipulation.
-%
-% The command |\substring| \DescribeMacro{\substring} is the brains of
-% the \stringstrings package, in that most of the commands in this
-% section call upon |\substring| in one form or another. Nominally, the
-% routine returns a substring of {\it string} between the characters
-% defined by the integers {\it min} and {\it max}, inclusive.
-% However, the returned substring is
-% affected by the designated |\Treatments| which have been defined
-% for various classes of characters. Additionally, a shorthand of \$
-% may be used in {\it min} and {\it max} to define END-OF-STRING, and
-% the shorthand \$--{\it integer} may be used to define an offset of
-% {\it integer} relative to the END-OF-STRING.
-%
-% Regardless of how many bytes a \LaTeX{} token otherwise expands
-% to, or how many characters are in the token name, each \LaTeX{}
-% symbol token
-% counts as a single character for the purposes of defining the
-% substring limits, {\it min} and {\it max}.
-%
-% While the combination of |\Treatments| and |\substring| are sufficient
-% to achieve a wide array of character manipulations, many of those
-% possibilities are useful enough that separate commands have been
-% created to describe them, for convenience. Several of the commands
-% that follow fall into this category.
-%
-% The command |\caseupper| \DescribeMacro{\caseupper} takes the input
-% string or token, and converts all lowercase characters in the string
-% to uppercase. All other character classes are left untouched.
-% Default mode is |[v]|.
-%
-% The command |\caselower| \DescribeMacro{\caselower} takes the input
-% string or token, and converts all uppercase characters in the string
-% to lowercase. All other character classes are left untouched.
-% Default mode is |[v]|.
-%
-% The command |\solelyuppercase| \DescribeMacro{\solelyuppercase} is
-% similar to |\caseupper|, except that all punctuation, numerals, and
-% symbols are discarded from the string. Blankspaces are left alone,
-% and lowercase characters are converted to uppercase.
-% Default mode is |[v]|.
-%
-% The command |\solelylowercase| \DescribeMacro{\solelylowercase} is
-% similar to |\caselower|, except that all punctuation, numerals, and
-% symbols are discarded from the string. Blankspaces are left alone,
-% and uppercase characters are converted to lowercase.
-% Default mode is |[v]|.
-%
-% The command |\changecase| \DescribeMacro{\changecase} switches lower
-% case to upper case and upper case to lower case. All other characters
-% are left unchanged.
-% Default mode is |[v]|.
-%
-% The command |\noblanks| \DescribeMacro{\noblanks} removes blankspaces
-% (both hard and soft) from
-% a string, while leaving other characters unchanged.
-% Default mode is |[v]|.
-%
-% The command |\nosymbolsnumerals| \DescribeMacro{\nosymbolsnumerals}
-% removes symbols and numerals from
-% a string, while leaving other characters unchanged.
-% Default mode is |[v]|.
-%
-% The command |\alphabetic| \DescribeMacro{\alphabetic} discards
-% punctuation, symbols, and numerals, while retaining alphabetic
-% characters and blankspaces.
-% Default mode is |[v]|.
-%
-% The command |\capitalize| \DescribeMacro{\capitalize} turns the first
-% character of {\it string} into its upper case, if it is alphabetic.
-% Otherwise, that character will remain unaltered.
-% Default mode is |[v]|.
-%
-% The command |\capitalizewords| \DescribeMacro{\capitalizewords} turns
-% the first character of every word in {\it string} into its upper
-% case, if it is alphabetic.
-% Otherwise, that character will remain unaltered. For the purposes of
-% this command, ``the first character of a word'' is defined as either
-% the first character of the string, or the first non-blank
-% character that follows one or more blankspaces.
-% Default mode is |[v]|.
-%
-% The command |\capitalizetitle| \DescribeMacro{\capitalizetitle} is a
-% command similar to |\capitalizewords|, except that words which have
-% been previously designated as ``lower-case words'' are not
-% capitalized (\eg prepositions, conjunctions, \etc). In all cases,
-% the first word of the string is
-% capitalized, even if it is on the lower-case word list. Words are
-% added to the lower-case word list with the commands
-% |\addlcword|\DescribeMacro{\addlcword}, in the case of a single word,
-% or with |\addlcwords|\DescribeMacro{\addlcwords}, in the case of
-% multiple (space-separated) words. Because the addition of many words
-% to the lower-case list can substantially slow-down the execution of
-% the |\capitalizetitle| command, the command
-% |\resetlcwords| \DescribeMacro{\resetlcwords} has been added to
-% allow the user to zero out the lower-case word list.
-% (See newer \textsf{titlecaps} package as an alternative to this
-% command.)
-%
-% The command |\reversestring| \DescribeMacro{\reversestring} reverses
-% the sequence of characters in a string, such that what started as
-% the first character becomes the last character in the manipulated
-% string, and what started as the last character becomes the
-% first character.
-% Default mode is |[v]|.
-%
-% The command |\convertchar| \DescribeMacro{\convertchar} is a substitution
-% command in which a specified match character in the original string
-% ({\it from-char}) is substituted with a different string ({\it
-% to-string}). All occurances of {\it from-char} in the original
-% string are replaced. The {\it from-char} can only be a single
-% character (or tokenized symbol), whereas {\it to-string} can range
-% from the null-string (\ie character removal) to a single character
-% (\ie character substitution)
-% to a complete multi-character string.
-% Default mode is |[v]|.
-%
-% The command |\convertword| \DescribeMacro{\convertword} is a substitution
-% command in which a specified match string in the original string
-% ({\it from-string}) is substituted with a different string ({\it
-% to-string}). All occurances of {\it from-string} in the original
-% string are replaced. If {\it from-string} includes spaces, use
-% hard-space |(~)| characters instead of blanks.
-% Default mode is |[v]|.
-%
-% The command |\rotateword| \DescribeMacro{\rotateword} takes the first
-% word of {\it string} (and its leading and trailing spaces)
-% and rotates them to the end of the string.
-% Care must be taken to have a blankspace at the beginning or end
-% of {\it string} if one wishes to retain a blankspace word
-% separator between the original last word of the string and the
-% original first word which has been rotated to the end of the string.
-% Default mode is |[v]|.
-%
-% The command |\removeword| \DescribeMacro{\removeword} removes the
-% first word of {\it string}, along with any of its leading and trailing
-% spaces.
-% Default mode is |[v]|.
-%
-% The command |\getnextword| \DescribeMacro{\getnextword} returns the
-% next word of {\it string}. In this case, ``word'' is a sequence of
-% characters delimited either by spaces or by the beginning or end
-% of the string.
-% Default mode is |[v]|.
-%
-% The command |\getaword| \DescribeMacro{\getaword} returns a
-% word of {\it string} defined by the index, {\it n}.
-% In this case, ``word'' is a sequence of
-% characters delimited either by spaces or by the first or last
-% characters of the string. If the index, {\it n}, requested exceeds the
-% number of words available in the string, the index wraps around back
-% to the first argument of the string, such that asking for the tenth word
-% of an eight word string will return the second word of the string.
-% Default mode is |[v]|.
-%
-% The command |\rotateleadingspaces|
-% \DescribeMacro{\rotateleadingspaces} takes any leading spaces of the
-% string and rotates them to the end of the string.
-% Default mode is |[v]|.
-%
-% The command |\removeleadingspaces|
-% \DescribeMacro{\removeleadingspaces} removes any leading spaces of the
-% string.
-% Default mode is |[v]|.
-%
-% The command |\stringencode| \DescribeMacro{\stringencode} returns a
-% copy of the string that has been encoded according to the
-% \stringstrings encoding scheme. Because an encoded string is an
-% intermediate result, the default mode for this command is |[e]|.
-%
-% The command |\stringdecode| \DescribeMacro{\stringdecode} returns a
-% copy of the string that has been decoded.
-% Default mode is |[v]|.
-%
-% The command |\gobblechar| \DescribeMacro{\gobblechar} returns a string
-% in which the first character of {\it string} has been removed. Unlike
-% the \LaTeX{} system command |\@gobble| which removes the next {\bf
-% byte} in
-% the input stream, |\gobblechar| not only takes an argument as the
-% target of its gobble, but also removes one {\bf character}, regardless
-% of whether that character is a single-byte or multi-byte character.
-% Because this command may have utility outside of the \stringstrings
-% environment, the result of this command is retokenized (\ie |def|'ed)
-% rather than expanded (\ie |edef|'ed).
-% Default mode is |[q]|. Mode |[e]| is not recognized.
-%
-% The command |\gobblechars| \DescribeMacro{\gobblechars} returns a string
-% in which the first {\it n} characters of {\it string} have been removed.
-% Like |\gobblechar|, |\gobblechars| removes characters, regardless
-% of whether those characters are single-byte or multi-byte characters.
-% Likewise, the result of this command is retokenized (\ie |def|'ed)
-% rather than expanded (\ie |edef|'ed).
-% Default mode is |[q]|. Mode |[e]| is not recognized.
-%
-% The command |\retokenize| \DescribeMacro{\retokenize} takes a string
-% that is encoded according to the \stringstrings encoding scheme, and
-% repopulates the encoded characters with their \LaTeX{} tokens. This
-% command is particularly useful for exporting a string to a routine
-% outside of the \stringstrings library or if the string includes
-% the following
-% characters: |\{|, |\}|, \verb,\|,, |\dag|, |\ddag|, |\d|, |\t|, |\b|,
-% |\copyright|, and |\P|.
-% Default mode is |[q]|. Mode |[e]| is not recognized.
-%
-% \section {Commands to Extract String Information}
-%
-% These commands
-% take an input string or token, and ascertain a particular
-% characteristic of the string. They include:
-%
-% \noindent|\stringlength[|{\it mode}|]{|{\it string}|}|\\
-% |\findchars[|{\it mode}|]{|{\it string}|}{|{\it match-char}|}|\\
-% |\findwords[|{\it mode}|]{|{\it string}|}{|{\it match-string}|}|\\
-% |\whereischar[|{\it mode}|]{|{\it string}|}{|{\it match-char}|}|\\
-% |\whereisword[|{\it mode}|]{|{\it string}|}{|{\it match-string}|}|\\
-% |\wordcount[|{\it mode}|]{|{\it string}|}|\\
-% |\getargs[|{\it mode}|]{|{\it string}|}|
-%
-% \noindent Commands in this section return their result in the string
-% |\theresult|, unless otherwise specified.
-% Unless otherwise noted, the {\it mode} may take one of two values:
-% |[v]| for verbose mode (generally, the default), and |[q]| for quiet
-% mode. In both cases, the result of
-% the operation is stored in |\theresult|. In verbose mode, it is also
-% output immediately (and may be captured by an |\edef|). In quiet mode,
-% no string is output, though the result still resides in |\theresult|.
-%
-% The command |\stringlength| \DescribeMacro{\stringlength} returns the
-% length of {\it string} in characters (not bytes).
-% Default mode is |[v]|.
-%
-% The command |\findchars| \DescribeMacro{\findchars} checks to see if
-% the character {\it match-char} occurs anywhere in {\it string}. The
-% number of occurances is stored in |\theresult| and, if in verbose
-% mode, printed. If it is desired to find blankspaces, {\it match-char}
-% should be set to |{~}| and not |{ }|.
-% Default mode is |[v]|.
-%
-% The command |\findwords| \DescribeMacro{\findwords} checks to see if
-% the string {\it match-string} occurs anywhere in {\it string}. The
-% number of occurances is stored in |\theresult| and, if in verbose
-% mode, printed. If it is desired to find blankspaces, those
-% characters in {\it match-string}
-% should be set to hardspaces (\ie tildes) and not softspaces (\ie
-% blanks), regardless of how they are defined in {\it string}.
-% Default mode is |[v]|.
-%
-% The command |\whereischar| \DescribeMacro{\whereischar} checks to see
-% where
-% the character {\it match-char} first occurs in {\it string}. The
-% location of that occurance is stored in |\theresult| and, if in verbose
-% mode, printed. If the character is not found, |\theresult| is set to
-% a value of 0. If it is desired to find blankspaces, {\it match-char}
-% should be set to |{~}| and not |{ }|.
-% Default mode is |[v]|.
-%
-% The command |\whereisword| \DescribeMacro{\whereisword} checks to see
-% where
-% the string {\it match-string} first occurs in {\it string}. The
-% location of that occurance is stored in |\theresult| and, if in verbose
-% mode, printed. If {\it match-string} is not found, |\theresult| is set to
-% a value of 0. If it is desired to find blankspaces, those characters
-% in {\it match-string}
-% should be set to hardspaces (\ie tildes) and not softspaces (\ie
-% blanks), regardless of how they are defined in {\it string}.
-% Default mode is |[v]|.
-%
-% The command |\wordcount| \DescribeMacro{\wordcount} counts the number
-% of space-separated words that occur in {\it string}.
-% Default mode is |[v]|.
-%
-% The command |\getargs| \DescribeMacro{\getargs} mimics the Unix
-% command of the same name, in that it parses {\it string} to determine
-% how many arguments (\ie words) are in {\it string}, and extracts
-% each word into a separate variable. The number of arguments is placed
-% in |\narg| and the individual arguments are placed in variables of
-% the name |\argi|, |\argii|, |\argiii|, |\argiv|, etc. This command
-% may be used to facilitate simply the use of multiple optional
-% arguments in a \LaTeX{} command, for example
-% |\mycommand[|{\it option1 option2 option3}|]{|{\it argument}|}|.
-% In this case,
-% |\mycommand| should exercise |\getargs{#1}|, with the result being
-% that {\it option1} is stored in |\argi|, \etc~The command |\mycommand|
-% may then proceed to parse the optional arguments and branch
-% accordingly.
-% Default mode is |[q]|; |[e]| mode is permitted, while |[v]| mode
-% is disabled.
-%
-% \section {Commands to Test Strings}
-%
-% These commands take an input
-% string or token and test for a particular alphanumeric condition.
-% They include:
-%
-% \noindent%
-% |\isnextbyte[|{\it mode}|]{|{\it match-byte}|}{|{\it string}|}|\\
-% |\testmatchingchar{|{\it
-% string}|}{|{\it n}|}{|{\it match-char}|}|\\
-% |\testcapitalized{|{\it string}|}|\\
-% |\testuncapitalized{|{\it string}|}|\\
-% |\testleadingalpha{|{\it string}|}|\\
-% |\testuppercase{|{\it string}|}|\\
-% |\testsolelyuppercase{|{\it string}|}|\\
-% |\testlowercase{|{\it string}|}|\\
-% |\testsolelylowercase{|{\it string}|}|\\
-% |\testalphabetic{|{\it string}|}|
-%
-% The command |\isnextbyte| \DescribeMacro{\isnextbyte} tests to see if
-% the first byte of {\it string} equals {\it match-byte}. It
-% is the only string-testing command in
-% this section which does not use the {\sf ifthen} test structure for
-% its result. Rather, |\isnextbyte| returns the result of its test as
-% a |T| or |F| in the string |\theresult|. More importantly, and
-% unlike other \stringstrings commands, |\isnextbyte| is a {\it byte} test
-% and not a {\it character} test. This means that, while |\isnextbyte|
-% operates very efficiently, it cannot
-% be used to directly detect multi-byte characters like |\$|,
-% |\^|, |\{|, |\}|, |\_|, |\dag|, |\ddag|, |\AE|, |\ae|, |\OE|,
-% |\oe|, \etc~(|\isnextbyte| will give false positives or negatives
-% when testing for these multi-byte characters).
-% The default mode of |\isnextbyte| is |[v]|.
-%
-% If a character needs to be tested, rather than a byte,
-% \DescribeMacro{\testmatchingchar} |\testmatchingchar| should be used.
-% The command |\testmatchingchar| is
-% used to ascertain whether character {\it n} of {\it string} equals
-% {\it match-char} or not. Whereas |\isnextbyte| checks only a {\it
-% byte}, |\testmatchingchar| tests for a {\it character} (single- or
-% multi-byte character). After the test is called, the action(s) may be
-% called out with |\ifmatchingchar| {\it true-code} |\else| {\it
-% false-code} |\fi|.
-%
-% The command |\testcapitalized| \DescribeMacro{\testcapitalized} is
-% used to ascertain whether the first character of {\it string} is
-% capitalized or not. If the first character is non-alphabetic, the
-% test will return FALSE. After the test is called, the action(s) may be
-% called out with |\ifcapitalized| {\it true-code} |\else| {\it
-% false-code} |\fi|.
-%
-% The command |\testuncapitalized| \DescribeMacro{\testuncapitalized} is
-% used to ascertain whether the first character of {\it string} is
-% uncapitalized. If the first character is non-alphabetic, the
-% test will return FALSE. After the test is called, the action(s) may be
-% called out with |\ifuncapitalized| {\it true-code} |\else| {\it
-% false-code} |\fi|.
-%
-% The command |\testleadingalpha| \DescribeMacro{\testleadingalpha} is
-% used to ascertain whether the first character of {\it string} is
-% alphabetic. After the test is called, the action(s) may be
-% called out with |\ifleadingalpha| {\it true-code} |\else| {\it
-% false-code} |\fi|.
-%
-% The command |\testuppercase| \DescribeMacro{\testuppercase} is
-% used to ascertain whether all the alphabetic characters in {\it
-% string} are uppercase or not. The presence of non-alphabetic
-% characters in {\it string} does not falsify the test,
-% but are merely ignored. However, a string completely void of
-% alphabetic characters will always test FALSE.
-% After the test is called, the action(s) may be
-% called out with |\ifuppercase| {\it true-code} |\else| {\it
-% false-code} |\fi|.
-%
-% The command |\testsolelyuppercase|
-% \DescribeMacro{\testsolelyuppercase} is
-% used to ascertain whether {\it all} the characters in {\it
-% string} are uppercase or not. The presence of non-alphabetic
-% characters in {\it string} other than blankspaces will automatically
-% falsify the test. Blankspaces are ignored. However, a null string or
-% a string composed solely of blankspaces will also test FALSE.
-% After the test is called, the action(s) may be
-% called out with |\ifsolelyuppercase| {\it true-code} |\else| {\it
-% false-code} |\fi|.
-%
-% The command |\testlowercase| \DescribeMacro{\testlowercase} is
-% used to ascertain whether all the alphabetic characters in {\it
-% string} are lowercase or not. The presence of non-alphabetic
-% characters in {\it string} does not falsify the test,
-% but are merely ignored. However, a string completely void of
-% alphabetic characters will always test FALSE.
-% After the test is called, the action(s) may be
-% called out with |\iflowercase| {\it true-code} |\else| {\it
-% false-code} |\fi|.
-%
-% The command |\testsolelylowercase|
-% \DescribeMacro{\testsolelylowercase} is
-% used to ascertain whether {\it all} the characters in {\it
-% string} are lowercase or not. The presence of non-alphabetic
-% characters in {\it string} other than blankspaces will automatically
-% falsify the test. Blankspaces are ignored. However, a null string or
-% a string composed solely of blankspaces will also test FALSE.
-% After the test is called, the action(s) may be
-% called out with |\ifsolelylowercase| {\it true-code} |\else| {\it
-% false-code} |\fi|.
-%
-% The command |\testalphabetic|
-% \DescribeMacro{\testalphabetic} is
-% used to ascertain whether {\it all} the characters in {\it
-% string} are alphabetic or not. The presence of non-alphabetic
-% characters in {\it string} other than blankspaces will automatically
-% falsify the test. Blankspaces are ignored. However, a null string or
-% a string composed solely of blankspaces will also test FALSE.
-% After the test is called, the action(s) may be
-% called out with |\ifalphabetic| {\it true-code} |\else| {\it
-% false-code} |\fi|.
-%
-% \section{Disclaimers}
-%
-% Now that we have described the commands available in the
-% \stringstrings package, it is appropriate to lay out the quirks and
-% warnings associated with the use of the package.
-%
-% First, \stringstrings is currently set to handle a string no larger
-% than 500 characters. A user could circumvent this, presumably, by
-% editing the style package to increase the value of
-% |\@MAXSTRINGSIZE| \DescribeMacro{\@MAXSTRINGSIZE}.
-%
-% It is important to remember that \stringstrings follows the underlying
-% rules of \LaTeX{}. Therefore, a passed string could not contain a raw
-% |%| as part of it, because it would, in fact, comment out the
-% remainder of the line. Naturally, the string may freely contain
-% instances of |\%|.
-%
-% Tokens that take two or more characters to express
-% (\eg |\#|, |\oe|, |\ddag|, \etc) are {\bf counted as
-% a single character} within the string.
-% The rule applies if you wanted to know the length
-% of a string that was populated with such tokens, or wanted to extract
-% a substring from a such a string. Of course, the exception that makes
-% the rule is that of diacritical marks, which count as separate symbols
-% from the characters they mark. For example,
-% |\^a| counts as two characters, because the |a| is
-% really just the operand of the |\^| token, even though the net result
-% looks like a single character (\^a).
-%
-% Consistent with
-% \LaTeX{} convention, groups of spaces are treated as a single
-% blankspace, unless encoded with |~| characters. And finally, again
-% consistent with the way \LaTeX{} operates, the space
-% that follows an alphabetic token is not actually a space in the
-% string, but serves as the delimiter to the token. Therefore,
-% |\OE dipus| (\OE dipus) has a length of six characters,
-% one for the |\OE| and five
-% for the |dipus|. The intervening space merely closes out the |\OE|
-% token, and does not represent a space in the middle of the string.
-%
-% One quirk worthy of particular note concerns the tabbing character,
-% meaning \&
-% as opposed to |\&| (which is handled without problem).
-% As of version 1.01, \stringstrings has the
-% capability to operate on arguments containg the ampersand \&,
-% normally reserved as the \LaTeX{} tabbing character. However, one
-% adverse by-product is that \& characters returned in |\thestring|
-% lose their catcode-4 value, and thus lose their ability to function as
-% tabbing characters. In the following example,\\
-% | |\\
-% | \caseupper[q]{a & b & c & d}|\\
-% | \begin{tabular}{|\verb,|l|c|c|c|,|}|\\
-% | \hline|\\
-% | \thestring\\|\\
-% | \hline|\\
-% | \end{tabular}|\\
-% | |\\
-% will produce \caseupper[q]{a & b & c & d}
-% \begin{tabular}{\modetablelayout}
-% \hline
-% \thestring\\
-% \hline
-% \end{tabular}
-% instead of the desired
-% \begin{tabular}{\modetablelayout}
-% \hline
-% A & B & C & D\\
-% \hline
-% \end{tabular}
-% .
-%
-% In the |\substring| command, no tests are performed to guarantee that
-% the lower limit, {\it min}, is less than the upper limit, {\it max},
-% or that {\it min} is even positive. However, the upper limit,
-% {\it max}, is corrected, if set larger than the string length. Also,
-% the use of the `\$' symbol to signify the last character of the string
-% and `\$--{\it n}' to denote an offset of {\it n} characters from the
-% end of the string can be helpful in avoiding the misindexing of strings.
-%
-% \begin{table}[p]
-% \caption{\bf Problematic Characters/Tokens and \stringstrings Solutions%
-% \label{tbl:prob}}\vspace{.5em}
-% \small
-% \begin{tabular}{\mylayout}
-% \LaTeX{} & Symbol/Name & Problem/Solution\\
-% \hline
-% \hline
-% |{| & begin group & Cannot use |{| and |}| in \stringstrings
-% arguments.\\
-% |}| & end group & However, use |\LB|\ldots|\RB| in lieu of |{|\ldots|}|;\\
-% & & manipulate string in |[e]| mode \& |\retokenize| \\
-% \hline
-% |\dag| & \dag~~Dagger & Cannot |\edef| these tokens; Thus, |[v]| mode\\
-% |\ddag| & \ddag~~Double Dagger & fails with both OT1 and T1 encoding; \\
-% |\P| & \P~~Pilcrow & manipulate string in |[e]| mode \& |\retokenize| \\
-% |\d| & \d x~~Underdot & \\
-% |\t| & \t xx~~Joining Arch & \\
-% |\b| & \b x~~Letter Underline & \\
-% |\copyright| & \copyright~Copyright & \\
-% \hline
-% \hline
-% |\_| & \_~~Underscore & Cannot |\edef| with OT1 encoding; either\\
-% |\{| & \{~~Left Curly Brace & |\renewcommand\encodingdefault{T1}|, or \\
-% |\}| & \}~~Right Curly Brace &
-% manipulate string in |[e]| mode \& |\retokenize|. \\
-% |\S| & \S~~Section Symbol & With OT1, |\S|, |\c| and |\pounds| break\\
-% |\c| & \c x~~Cedilla & \stringstrings |[v]| mode.\\
-% |\pounds| & \pounds~~Pounds & \\
-% \hline
-% \verb,\|,& \stringstrings Pipe Char. & Distinct from \verb,|,,
-% the \stringstrings encoded-\\
-% & \verb,|, (T1) ~~~\stringdecode{\|} (OT1) & escape character\\
-% \hline
-% \hline
-% |\$| & \$~~Dollar & Either cannot |\edef|, or\\
-% |\carat| & \mycarat~~(text mode) &
-% cannot identify uniquely with |\if| construct, or \\
-% |\^| & \^x~~Circumflex & expanded character is more than one byte. \\
-% |\'| & \'x~~Acute & \\
-% |\"| & \"x~~Umlaut & {\it However},\\
-% |\~| & \~x~~Tilde &
-% Use these characters freely, \stringstrings\\
-% |\`| & \`x~~Grave &
-% encoding functions transparently with them.\\
-% |\.| & \.x~~Overdot & \\
-% |\=| & \=x~~Macron & |\retokenize| also works\\
-% |\u| & \u x~~Breve & \\
-% |\v| & \v x~~Caron & \\
-% |\H| & \H x~~Double Acute & \\
-% |\ss| & \ss~~Eszett & \\
-% |\AE \ae| & \AE~\ae~~\ae sc & \\
-% |\OE \oe| & \OE~\oe~~\oe thel & \\
-% |\AA \aa| & \AA~\aa~~angstrom & \\
-% |\O \o| & \O~\o~~slashed O & \\
-% |\L \l| & \L~\l~~barred L & \\
-% |~| & Hardspace &\\
-% \hline
-% |$| & begin/end math mode & These characters pose no difficulties;\\
-% |^| & math superscript & However, cannot extract substring that \\
-% |_| & math subscript & breaks in middle of math mode.\\
-% & & Other math mode symbols NOT supported.\\
-% \hline
-% \& & ampersand & Version 1.01 \stringstrings can manipulate the\\
-% & & ampersand. However, returned strings\\
-% & & containing the \& character lose their\\
-% & & catcode-4 status, making them unfit\\
-% & & for use as tabbing characters.\\
-% \hline
-% \hline
-% \end{tabular}
-% \end{table}
-% Table~\ref{tbl:prob} shows a variety of characters and tokens, some of
-% which pose a challenge to \stringstrings manipulations. In all cases,
-% a solution or workaround is provided. For symbols in the top two
-% categories, the workaround
-% solution includes the use of retokenized strings instead of expanded
-% strings. For symbols in the next two categories, use of T1 encoding
-% or retokenizing provides a satisfactory solution. In the bottom three
-% categories, because of \stringstrings encoded |[e]| mode,
-% there is nothing to impede the use of these characters in
-% \stringstrings arguments, if encoded |[e]| mode is employed for
-% intermediate calculations. Some of the
-% details of these problematic cases is described below.
-%
-% Not surprisingly, you are not allowed to extract a substring of a
-% string, if it breaks in the middle of math mode, because a substring
-% with only one |$| in it cannot be |\edef|'ed.
-%
-% There are a few potential quirks when using \LaTeX{}'s native OT1
-% character encoding, most of which can be circumvented by using the
-% more modern
-% T1 encoding (accessed via |\renewcommand\encodingdefault{T1}| in the
-% document preamble). The quirks arise because there are
-% several characters that, while displayable in \LaTeX{}, are not part
-% of the OT1 character encoding. The characters include |\{|, |\}|, and
-% the \verb,|, symbol (accessed in \stringstrings via \verb,\|,).
-% When using \stringstrings to manipulate strings containing
-% these characters in the presence of OT1 encoding,
-% they come out looking like \stringdecode{\{}, \stringdecode{\}},
-% and \stringdecode{\|}, respectively. However, if the T1 encoding fix
-% is not an option for you, you can also work around this problem by
-% |\retokenize|'ing the affected string (the |\retokenize| command is
-% provided to convert encoded, expanded strings back into tokenized
-% form, if need be).
-%
-% Likewise, for both OT1 and T1 encoding, the characters \dag~(|\dag|),
-% \ddag~(|\ddag|), \P~(|\P|), \d~~(|\d|), \t~~~(|\t|), \b~~~(|\b|),
-% and \copyright~(|\copyright|)
-% cannot be in the argument of an |\edef| expression. For
-% manipulated strings including these characters, |\retokenize| is the
-% only option available to retain the integrity of the string.
-%
-% As discussed thoroughly in the previous section, an ``encoded'' form of
-% the string manipulation routines is provided to prevent the
-% undesirable circumstance of passing an |\edef|'ed symbol as input
-% to a subsequent manipulation. Likewise, never try to ``decode''
-% an already ``decoded'' string.
-%
-% When \stringstrings doesn't understand a token, it is supposed to
-% replace it with a period. However, some undecipherable characters may
-% inadvertantly be replaced with a space, instead. Of course, neither
-% of these possibilities is any comfort to the user.
-%
-% As mentioned already, \stringstrings cannot handle curly braces that
-% are used for grouping purposes, a circumstance which often arises in
-% math mode. Nonetheless, |\LB| and |\RB| may be used within
-% \stringstrings arguments in lieu of grouping braces, {\it if the final
-% result is to be retokenized}. Thus, |\caselower[e]{$X^\LB Y + Z\RB$}|
-% followed by |\convertchar[e]{\thestring}{x}{(1+x)}|, when finished up
-% with the following command,
-% |\retokenize[v]{\thestring}| yields as its result:\\
-% \caselower[e]{$X^\LB Y + Z\RB$}\convertchar[e]{\thestring}{x}{(1+x)}
-% \retokenize[v]{\thestring}.
-%
-% One might ask, ``why not retokenize everything, instead of using the
-% |[v]| mode of the \stringstrings routines?'' While one {\it could}
-% do this, the answer is simply
-% that |\retokenize| is a computationally intensive command, and that
-% it is best used, therefore, only when the more efficient methods
-% will not suffice. In many, if not most cases, strings to be
-% manipulated will be solely composed of alphanumeric characters which
-% don't require the use of |\retokenize|, T1 encoding, or even
-% \stringstrings encoding.
-%
-% Despite these several disclaimers and workarounds required when
-% dealing with problematic characters, I hope you find the \stringstrings
-% architecture and feel to be straightforward and useful. There is only
-% one thing left, and that is to dissect the code\ldots and so here we
-% go.
-%
-%% \CharacterTable
-%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
-%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
-%% Digits \0\1\2\3\4\5\6\7\8\9
-%% Exclamation \! Double quote \" Hash (number) \#
-%% Dollar \$ Percent \% Ampersand \&
-%% Acute accent \' Left paren \( Right paren \)
-%% Asterisk \* Plus \+ Comma \,
-%% Minus \- Point \. Solidus \/
-%% Colon \: Semicolon \; Less than \<
-%% Equals \= Greater than \> Question mark \?
-%% Commercial at \@ Left bracket \[ Backslash \\
-%% Right bracket \] Circumflex \^ Underscore \_
-%% Grave accent \` Left brace \{ Vertical bar \|
-%% Right brace \} Tilde \~}
-% \StopEventually{}
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% \vspace{-0.8em}
-% \begin{macro}{stringstrings.sty}
-% \section{Code Listing}
-% I'll try to lay out herein
-% the workings of the \stringstrings style package.
-% \begin{macrocode}
-%<*package>
-
-%%%%% INITIALIZATIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\catcode`\&=12
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{ifthen}
-% This package makes wide use of the {\sf ifthen} style package.
-% \begin{macrocode}
-\usepackage{ifthen}
-% \end{macrocode}
-% \end{macro}
-
-% \begin{macro}{\@MAXSTRINGSIZE}
-% The parameter |\@MAXSTRINGSIZE| defines the maximum allowable string
-% size that \stringstrings can operate upon.
-% \begin{macrocode}
-\def\@MAXSTRINGSIZE{500}
-% \end{macrocode}
-% \end{macro}
-
-% \begin{macrocode}
-\def\endofstring{@E@o@S@}%
-\def\undecipherable{.}% UNDECIPHERABLE TOKENS TO BE REPLACED BY PERIOD
-\def\@blankaction{\BlankSpace}
-% \end{macrocode}
-% Save the symbols which will get redefined \stringstrings encoding.
-
-% \begin{macrocode}
-\let\SaveDollar\$
-\let\SaveHardspace~
-\let\SaveCircumflex\^
-\let\SaveTilde\~
-\let\SaveUmlaut\"
-\let\SaveGrave\`
-\let\SaveAcute\'
-\let\SaveMacron\=
-\let\SaveOverdot\.
-\let\SaveBreve\u
-\let\SaveCaron\v
-\let\SaveDoubleAcute\H
-\let\SaveCedilla\c
-\let\SaveUnderdot\d
-\let\SaveArchJoin\t
-\let\SaveLineUnder\b
-\let\SaveCopyright\copyright
-\let\SavePounds\pounds
-\let\SaveLeftBrace\{
-\let\SaveRightBrace\}
-\let\SaveUnderscore\_
-\let\SaveDagger\dag
-\let\SaveDoubleDagger\ddag
-\let\SaveSectionSymbol\S
-\let\SavePilcrow\P
-\let\SaveAEsc\AE
-\let\Saveaesc\ae
-\let\SaveOEthel\OE
-\let\Saveoethel\oe
-\let\SaveAngstrom\AA
-\let\Saveangstrom\aa
-\let\SaveSlashedO\O
-\let\SaveSlashedo\o
-\let\SaveBarredL\L
-\let\SaveBarredl\l
-\let\SaveEszett\ss
-\let\SaveLB{
-\let\SaveRB}
-% \end{macrocode}
-
-% The BlankSpace character is the only character which is reencoded
-% with a 1-byte re-encoding\ldots in this case the \OE~character.
-% \begin{macrocode}
-\def\EncodedBlankSpace{\SaveOEthel}
-\edef\BlankSpace{ }
-% \end{macrocode}
-% All other reencoded symbols consist of 2 bytes: an escape character
-% plus a unique code. The escape character is a pipe symbol. the
-% unique code comprises either a single number, letter, or symbol.
-
-% \begin{macrocode}
-\def\EscapeChar{|}
-
-% |0 IS AN ENCODED |, ACCESSED VIA \|
-\def\PipeCode{0}
-\def\EncodedPipe{\EscapeChar\PipeCode}
-\def\Pipe{|}
-\let\|\EncodedPipe
-
-% |1 IS AN ENCODED \$
-\def\DollarCode{1}
-\def\EncodedDollar{\EscapeChar\DollarCode}
-% THE FOLLOWING IS NEEDED TO KEEP OT1 ENCODING FROM BREAKING;
-% IT PROVIDES AN ADEQUATE BUT NOT IDEAL ENVIRONMENT FOR T1 ENCODING
-\def\Dollar{\symbol{36}}
-% THE FOLLOWING IS BETTER FOR T1 ENCODING, BUT BREAKS OT1 ENCODING
-%\def\Dollar{\SaveDollar}
-
-% |W IS RESERVED TO BE ASSIGNED TO AN ARBITRARY TOKEN
-\def\UvariCode{W}
-\def\EncodedUvari{\EscapeChar\UvariCode}
-\def\Uvari{Uvari}
-\let\uvari\EncodedUvari
-
-% |X IS RESERVED TO BE ASSIGNED TO AN ARBITRARY TOKEN
-\def\UvariiCode{X}
-\def\EncodedUvarii{\EscapeChar\UvariiCode}
-\def\Uvarii{Uvarii}
-\let\uvarii\EncodedUvarii
-
-% |Y IS RESERVED TO BE ASSIGNED TO AN ARBITRARY TOKEN
-\def\UvariiiCode{Y}
-\def\EncodedUvariii{\EscapeChar\UvariiiCode}
-\def\Uvariii{Uvariii}
-\let\uvariii\EncodedUvariii
-
-% |2 IS AN ENCODED ^ FOR USE IN TEXT MODE, ACCESSED VIA \carat
-\def\CaratCode{2}
-\def\EncodedCarat{\EscapeChar\CaratCode}
-\def\Carat{\symbol{94}}
-\let\carat\EncodedCarat
-
-% |4 IS AN ENCODED \{
-\def\LeftBraceCode{4}
-\def\EncodedLeftBrace{\EscapeChar\LeftBraceCode}
-% THE FOLLOWING IS NEEDED TO KEEP OT1 ENCODING FROM BREAKING;
-% IT PROVIDES AN ADEQUATE BUT NOT IDEAL ENVIRONMENT FOR T1 ENCODING
-\def\LeftBrace{\symbol{123}}
-% THE FOLLOWING IS BETTER FOR T1 ENCODING, BUT BREAKS OT1 ENCODING
-%\def\LeftBrace{\SaveLeftBrace}
-
-% |5 IS AN ENCODED \}
-\def\RightBraceCode{5}
-\def\EncodedRightBrace{\EscapeChar\RightBraceCode}
-% THE FOLLOWING IS NEEDED TO KEEP OT1 ENCODING FROM BREAKING;
-% IT PROVIDES AN ADEQUATE BUT NOT IDEAL ENVIRONMENT FOR T1 ENCODING
-\def\RightBrace{\symbol{125}}
-% THE FOLLOWING IS BETTER FOR T1 ENCODING, BUT BREAKS OT1 ENCODING
-%\def\RightBrace{\SaveRightBrace}
-
-% |6 IS AN ENCODED \_
-\def\UnderscoreCode{6}
-\def\EncodedUnderscore{\EscapeChar\UnderscoreCode}
-\def\Underscore{\symbol{95}}
-%\def\Underscore{\SaveUnderscore}
-
-% |7 IS AN ENCODED \^
-\def\CircumflexCode{7}
-\def\EncodedCircumflex{\EscapeChar\CircumflexCode}
-\def\Circumflex{\noexpand\SaveCircumflex}
-
-% |8 IS AN ENCODED \~
-\def\TildeCode{8}
-\def\EncodedTilde{\EscapeChar\TildeCode}
-\def\Tilde{\noexpand\SaveTilde}
-
-% |" IS AN ENCODED \"
-\def\UmlautCode{"}
-\def\EncodedUmlaut{\EscapeChar\UmlautCode}
-\def\Umlaut{\noexpand\SaveUmlaut}
-
-% |` IS AN ENCODED \`
-\def\GraveCode{`}
-\def\EncodedGrave{\EscapeChar\GraveCode}
-\def\Grave{\noexpand\SaveGrave}
-
-% |' IS AN ENCODED \'
-\def\AcuteCode{'}
-\def\EncodedAcute{\EscapeChar\AcuteCode}
-\def\Acute{\noexpand\SaveAcute}
-
-% |= IS AN ENCODED \=
-\def\MacronCode{=}
-\def\EncodedMacron{\EscapeChar\MacronCode}
-\def\Macron{\noexpand\SaveMacron}
-
-% |. IS AN ENCODED \.
-\def\OverdotCode{.}
-\def\EncodedOverdot{\EscapeChar\OverdotCode}
-\def\Overdot{\noexpand\SaveOverdot}
-
-% |u IS AN ENCODED \u
-\def\BreveCode{u}
-\def\EncodedBreve{\EscapeChar\BreveCode}
-\def\Breve{\noexpand\SaveBreve}
-
-% |v IS AN ENCODED \v
-\def\CaronCode{v}
-\def\EncodedCaron{\EscapeChar\CaronCode}
-\def\Caron{\noexpand\SaveCaron}
-
-% |H IS AN ENCODED \H
-\def\DoubleAcuteCode{H}
-\def\EncodedDoubleAcute{\EscapeChar\DoubleAcuteCode}
-\def\DoubleAcute{\noexpand\SaveDoubleAcute}
-
-% |c IS AN ENCODED \c
-\def\CedillaCode{c}
-\def\EncodedCedilla{\EscapeChar\CedillaCode}
-\def\Cedilla{\noexpand\SaveCedilla}
-
-% |d IS AN ENCODED \d
-\def\UnderdotCode{d}
-\def\EncodedUnderdot{\EscapeChar\UnderdotCode}
-\def\Underdot{.}% CANNOT \edef \d
-
-% |t IS AN ENCODED \t
-\def\ArchJoinCode{t}
-\def\EncodedArchJoin{\EscapeChar\ArchJoinCode}
-\def\ArchJoin{.}% CANNOT \edef \t
-
-% |b IS AN ENCODED \b
-\def\LineUnderCode{b}
-\def\EncodedLineUnder{\EscapeChar\LineUnderCode}
-\def\LineUnder{.}% CANNOT \edef \b
-
-% |C IS AN ENCODED \copyright
-\def\CopyrightCode{C}
-\def\EncodedCopyright{\EscapeChar\CopyrightCode}
-\def\Copyright{.}% CANNOT \edef \copyright
-
-% |p IS AN ENCODED \pounds
-\def\PoundsCode{p}
-\def\EncodedPounds{\EscapeChar\PoundsCode}
-\def\Pounds{\SavePounds}
-
-% |[ IS AN ENCODED {
-\def\LBCode{[}
-\def\EncodedLB{\EscapeChar\LBCode}
-\def\UnencodedLB{.}
-\def\LB{\EncodedLB}
-
-% |] IS AN ENCODED }
-\def\RBCode{]}
-\def\EncodedRB{\EscapeChar\RBCode}
-\def\UnencodedRB{.}
-\def\RB{\EncodedRB}
-
-% |z IS AN ENCODED \dag
-\def\DaggerCode{z}
-\def\EncodedDagger{\EscapeChar\DaggerCode}
-\def\Dagger{.}% CANNOT \edef \dag
-
-% |Z IS AN ENCODED \ddag
-\def\DoubleDaggerCode{Z}
-\def\EncodedDoubleDagger{\EscapeChar\DoubleDaggerCode}
-\def\DoubleDagger{.}% CANNOT \edef \ddag
-
-% |S IS AN ENCODED \S
-\def\SectionSymbolCode{S}
-\def\EncodedSectionSymbol{\EscapeChar\SectionSymbolCode}
-\def\SectionSymbol{\SaveSectionSymbol}
-
-% |P IS AN ENCODED \P
-\def\PilcrowCode{P}
-\def\EncodedPilcrow{\EscapeChar\PilcrowCode}
-\def\Pilcrow{.}% CANNOT \edef \P
-
-% |E IS AN ENCODED \AE
-\def\AEscCode{E}
-\def\EncodedAEsc{\EscapeChar\AEscCode}
-\def\AEsc{\SaveAEsc}
-
-% |e IS AN ENCODED \ae
-\def\aescCode{e}
-\def\Encodedaesc{\EscapeChar\aescCode}
-\def\aesc{\Saveaesc}
-
-% |O IS AN ENCODED \OE
-\def\OEthelCode{O}
-\def\EncodedOEthel{\EscapeChar\OEthelCode}
-\def\OEthel{\SaveOEthel}
-
-% |o IS AN ENCODED \oe
-\def\oethelCode{o}
-\def\Encodedoethel{\EscapeChar\oethelCode}
-\def\oethel{\Saveoethel}
-
-% |A IS AN ENCODED \AA
-\def\AngstromCode{A}
-\def\EncodedAngstrom{\EscapeChar\AngstromCode}
-\def\Angstrom{\SaveAngstrom}
-
-% |a IS AN ENCODED \aa
-\def\angstromCode{a}
-\def\Encodedangstrom{\EscapeChar\angstromCode}
-\def\angstrom{\Saveangstrom}
-
-% |Q IS AN ENCODED \O
-\def\SlashedOCode{Q}
-\def\EncodedSlashedO{\EscapeChar\SlashedOCode}
-\def\SlashedO{\SaveSlashedO}
-
-% |q IS AN ENCODED \o
-\def\SlashedoCode{q}
-\def\EncodedSlashedo{\EscapeChar\SlashedoCode}
-\def\Slashedo{\SaveSlashedo}
-
-% |L IS AN ENCODED \L
-\def\BarredLCode{L}
-\def\EncodedBarredL{\EscapeChar\BarredLCode}
-\def\BarredL{\SaveBarredL}
-
-% |l IS AN ENCODED \l
-\def\BarredlCode{l}
-\def\EncodedBarredl{\EscapeChar\BarredlCode}
-\def\Barredl{\SaveBarredl}
-
-% |s IS AN ENCODED \ss
-\def\EszettCode{s}
-\def\EncodedEszett{\EscapeChar\EszettCode}
-\def\Eszett{\SaveEszett}
-
-\newcounter{@letterindex}
-\newcounter{@@letterindex}
-\newcounter{@@@letterindex}
-\newcounter{@wordindex}
-\newcounter{@iargc}
-\newcounter{@gobblesize}
-\newcounter{@maxrotation}
-\newcounter{@stringsize}
-\newcounter{@@stringsize}
-\newcounter{@@@stringsize}
-\newcounter{@revisedstringsize}
-\newcounter{@gobbleindex}
-\newcounter{@charsfound}
-\newcounter{@alph}
-\newcounter{@alphaindex}
-\newcounter{@capstrigger}
-\newcounter{@fromindex}
-\newcounter{@toindex}
-\newcounter{@previousindex}
-\newcounter{@flag}
-\newcounter{@matchloc}
-\newcounter{@matchend}
-\newcounter{@matchsize}
-\newcounter{@matchmax}
-\newcounter{@skipped}
-\newcounter{@lcwords}
-% \end{macrocode}
-% \begin{macrocode}
-%%%%% CONFIGURATION COMMANDS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% \end{macrocode}
-
-% \begin{macro}{\defaultTreatments}
-% This command can be used to restore the default string treatments,
-% prior to calling |\substring|. The default treatments leave all
-% symbol types intact and unaltered.
-% \begin{macrocode}
-\newcommand\defaultTreatments{%
- \def\EncodingTreatment{v}% <--Set=v to decode special chars (vs. q,e)
- \def\AlphaCapsTreatment{1}% <--Set=1 to retain uppercase (vs. 0,2)
- \def\AlphaTreatment{1}% <--Set=1 to retain lowercase (vs. 0,2)
- \def\PunctuationTreatment{1}% <--Set=1 to retain punctuation (vs. 0)
- \def\NumeralTreatment{1}% <--Set=1 to retain numerals (vs. 0)
- \def\SymbolTreatment{1}% <--Set=1 to retain special chars (vs. 0)
- \def\BlankTreatment{1}% <--Set=1 to retain blanks (vs. 0)
- \def\CapitalizeString{0}% <--Set=0 for no special action (vs. 1,2)
- \def\SeekBlankSpace{0}% <--Set=0 for no special action (vs. 1,2)
-}
-\defaultTreatments
-% \end{macrocode}
-% \end{macro}
-
-% \begin{macro}{\Treatments}
-% This command allows the user to specify the desired character class
-% treatments, prior to a call to |\substring|. Unfortunately for the
-% user, I have specified which character class each symbol belongs to.
-% Therefore, it is not easy if the user decides that he wants a cedilla,
-% for example, to be treated like an alphabetic character rather than
-% a symbol.
-% \begin{macrocode}
-% QUICK WAY TO SET UP TREATMENTS BY WHICH \@rotate HANDLES VARIOUS
-% CHARACTERS
-\newcommand\Treatments[6]{%
- \def\AlphaCapsTreatment{#1}% <--Set=0 to remove uppercase
-% =1 to retain uppercase
-% =2 to change UC to lc
- \def\AlphaTreatment{#2}% <--Set=0 to remove lowercase
-% =1 to retain lowercase
-% =2 to change lc to UC
- \def\PunctuationTreatment{#3}%<--Set=0 to remove punctuation
-% =1 to retain punctuation
- \def\NumeralTreatment{#4}% <--Set=0 to remove numerals
-% =1 to retain numerals
- \def\SymbolTreatment{#5}% <--Set=0 to remove special chars
-% =1 to retain special chars
- \def\BlankTreatment{#6}% <--Set=0 to remove blanks
-% =1 to retain blanks
-}
-% \end{macrocode}
-% \end{macro}
-
-% \begin{macro}{\+}
-% This command (|\+|) is used to enact the \stringstrings encoding.
-% Key symbols are redefined, and any |\edef| which occurs while this
-% command is active will adopt these new definitions.
-% \begin{macrocode}
-% REENCODE MULTIBYTE SYMBOLS USING THE stringstrings ENCODING METHOD
-\newcommand\+{%
- \def\${\EncodedDollar}%
- \def~{\EncodedBlankSpace}%
- \def\^{\EncodedCircumflex}%
- \def\~{\EncodedTilde}%
- \def\"{\EncodedUmlaut}%
- \def\`{\EncodedGrave}%
- \def\'{\EncodedAcute}%
- \def\={\EncodedMacron}%
- \def\.{\EncodedOverdot}%
- \def\u{\EncodedBreve}%
- \def\v{\EncodedCaron}%
- \def\H{\EncodedDoubleAcute}%
- \def\c{\EncodedCedilla}%
- \def\d{\EncodedUnderdot}%
- \def\t{\EncodedArchJoin}%
- \def\b{\EncodedLineUnder}%
- \def\copyright{\EncodedCopyright}%
- \def\pounds{\EncodedPounds}%
- \def\{{\EncodedLeftBrace}%
- \def\}{\EncodedRightBrace}%
- \def\_{\EncodedUnderscore}%
- \def\dag{\EncodedDagger}%
- \def\ddag{\EncodedDoubleDagger}%
- \def\S{\EncodedSectionSymbol}%
- \def\P{\EncodedPilcrow}%
- \def\AE{\EncodedAEsc}%
- \def\ae{\Encodedaesc}%
- \def\OE{\EncodedOEthel}%
- \def\oe{\Encodedoethel}%
- \def\AA{\EncodedAngstrom}%
- \def\aa{\Encodedangstrom}%
- \def\O{\EncodedSlashedO}%
- \def\o{\EncodedSlashedo}%
- \def\L{\EncodedBarredL}%
- \def\l{\EncodedBarredl}%
- \def\ss{\EncodedEszett}%
-}
-% \end{macrocode}
-% \end{macro}
-
-% \begin{macro}{\?}
-% The command |\?| reverts the character encodings back to the standard
-% \LaTeX{} definitions. The command effectively undoes a previously
-% enacted |\+|.
-% \begin{macrocode}
-% WHEN TASK IS DONE, REVERT ENCODING TO STANDARD ENCODING METHOD
-\newcommand\?{%
- \let\$\SaveDollar%
- \let~\SaveHardspace%
- \let\^\SaveCircumflex%
- \let\~\SaveTilde%
- \let\"\SaveUmlaut%
- \let\`\SaveGrave%
- \let\'\SaveAcute%
- \let\=\SaveMacron%
- \let\.\SaveOverdot%
- \let\u\SaveBreve%
- \let\v\SaveCaron%
- \let\H\SaveDoubleAcute%
- \let\c\SaveCedilla%
- \let\d\SaveUnderdot%
- \let\t\SaveArchJoin%
- \let\b\SaveLineUnder%
- \let\copyright\SaveCopyright%
- \let\pounds\SavePounds%
- \let\{\SaveLeftBrace%
- \let\}\SaveRightBrace%
- \let\_\SaveUnderscore%
- \let\dag\SaveDagger%
- \let\ddag\SaveDoubleDagger%
- \let\S\SaveSectionSymbol%
- \let\P\SavePilcrow%
- \let\AE\SaveAEsc%
- \let\ae\Saveaesc%
- \let\OE\SaveOEthel%
- \let\oe\Saveoethel%
- \let\AA\SaveAngstrom%
- \let\aa\Saveangstrom%
- \let\O\SaveSlashedO%
- \let\o\SaveSlashedo%
- \let\L\SaveBarredL%
- \let\l\SaveBarredl%
- \let\ss\SaveEszett%
-}
-% \end{macrocode}
-% \end{macro}
-
-% \begin{macro}{\encodetoken}
-% The command |\encodetoken| assigns the supplied token to one of three
-% reserved \stringstrings user variables (the optional argument dictates
-% which user variable). Once encoded, the supplied token cannot be used
-% in the normal way, but only in stringstrings routines, unless and
-% until it is decoded.
-% \begin{macrocode}
-\newcommand\encodetoken[2][1]{%
- \if 1#1%
- \let\Uvari#2%
- \let#2\uvari\else
- \if 2#1%
- \let\Uvarii#2%
- \let#2\uvarii\else
- \if 3#1%
- \let\Uvariii#2%
- \let#2\uvariii%
- \fi
- \fi
- \fi
-}
-% \end{macrocode}
-% \end{macro}
-
-% \begin{macro}{\decodetoken}
-% The command |\decodetoken| deassigns the supplied token from the
-% reserved \stringstrings user variables (the optional argument dictates
-% which user variable), so that the token may be used in the normal way
-% again.
-% \begin{macrocode}
-\newcommand\decodetoken[2][1]{%
- \if 1#1%
- \let#2\Uvari%
- \def\Uvari{Uvari}\else
- \if 2#1%
- \let#2\Uvarii%
- \def\Uvarii{Uvarii}\else
- \if 3#1%
- \let#2\Uvariii%
- \def\Uvariii{Uvariii}%
- \fi
- \fi
- \fi
-}
-% \end{macrocode}
-% \end{macro}
-
-% \begin{macrocode}
-%%%%% COMMANDS TO MANIPULATE STRINGS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% \end{macrocode}
-
-% In the next group of commands, the result is always stored in an
-% expandable string, |\thestring|. Expandable means that |\thestring| can
-% be put into a subsequent |\edef{}| command. Additionally, the
-% optional first argument can be used to cause three actions (verbose,
-% encoded, or quiet):
-% \begin{enumerate}
-% \item [|=v|] |\thestring| is decoded (final result);
-% print it immediately (default)
-% \item [|=e|] |\thestring| is encoded (intermediate result);
-% don't print it
-% \item [|=q|] |\thestring| is decoded (final result),
-% but don't print it
-% \end{enumerate}
-% \begin{macro}{\substring}
-% The command |\substring| is the brains of this package\ldots
-% It is used to acquire a substring from a given string, along with
-% performing specified character manipulations along the way.
-% Its strategy is fundamental to the \stringstrings
-% package: sequentially rotate the 1st character of the
-% string to the end of the string, until the desired substring resides
-% at end of rotated string. Then, gobble up the leading part of
-% string until only the desired substring is left.
-% \begin{macrocode}
-\newcommand\substring[4][v]{\+%
-% \end{macrocode}
-% Obtain the string length of the string to be manipulated and store
-% it in |@stringsize|.
-% \begin{macrocode}
- \@getstringlength{#2}{@stringsize}%
-% \end{macrocode}
-% First,
-% |\@decodepointer| is used to convert indirect references like |$|
-% and |$-3| into integers.
-% \begin{macrocode}
- \@decodepointer{#3}%
- \setcounter{@fromindex}{\@fromtoindex}%
- \@decodepointer{#4}%
- \setcounter{@toindex}{\@fromtoindex}%
-% \end{macrocode}
-% Determine the number of characters to rotate to the end of the string
-% and the number of characters to then gobble from it, in order to leave
-% the desired substring.
-% \begin{macrocode}
- \setcounter{@gobblesize}{\value{@stringsize}}%
- \ifthenelse{\value{@toindex} > \value{@stringsize}}%
- {\setcounter{@maxrotation}{\value{@stringsize}}}%
- {\setcounter{@maxrotation}{\value{@toindex}}}%
- \addtocounter{@gobblesize}{-\value{@maxrotation}}%
- \addtocounter{@gobblesize}{\value{@fromindex}}%
- \addtocounter{@gobblesize}{-1}%
-% \end{macrocode}
-% Prepare for the string rotation by initializing counters, setting the
-% targeted string into the working variable, |\rotatingword|, and set
-% the encoding treatment specified.
-% \begin{macrocode}
- \setcounter{@letterindex}{0}%
- \edef\rotatingword{#2}%
- \def\EncodingTreatment{#1}%
-% \end{macrocode}
-% If capitalization (first character of string or of each word)
-% was specified, the
-% trigger for 1st-character capitalization will be set. However,
-% the treatments for the alphabetic characters for the remainder of the
-% string must be saved and reinstituted after the first character is
-% capitalized.
-% \begin{macrocode}
- \if 0\CapitalizeString%
-% DO NOT SET CAPITALIZE TRIGGER FOR FIRST CHARACTER
- \setcounter{@capstrigger}{0}%
- \else
-% SAVE CERTAIN TREATMENTS FOR LATER RESTORATION
- \let\SaveAlphaTreatment\AlphaTreatment%
- \let\SaveAlphaCapsTreatment\AlphaCapsTreatment%
-% SET CAPITALIZE TRIGGER FOR FIRST CHARACTER
- \setcounter{@capstrigger}{1}%
- \@forcecapson%
- \fi
-% \end{macrocode}
-% The command |\@defineactions| looks at the defined treatments
-% and specifies how each of the \stringstrings encoded
-% characters should be handled (\ie left alone, removed, modified,
-% \etc).
-% \begin{macrocode}
-\@defineactions%
-% \end{macrocode}
-% Here begins the primary loop of |\substring| in which characters of
-% |\rotatingword| are successively moved (and possibly manipulated)
-% from the first character of the string to the last. |@letterindex| is
-% the running index defining how many characters have been operated on.
-% \begin{macrocode}
- \whiledo{\value{@letterindex} < \value{@maxrotation}}{%
- \addtocounter{@letterindex}{1}%
-% \end{macrocode}
-% When |\CapitalizeString| equals 1, only the first character of the
-% string is capitalized. When it equals 2, every word in the string
-% is capitalized. When equal to 2, this bit of code looks for the
-% blankspace that follows the end of a word, and uses it to reset the
-% capitalization trigger for the next non-blank character.
-% \begin{macrocode}
-% IF NEXT CHARACTER BLANK WHILE \CapitalizeString=2,
-% SET OR KEEP ALIVE TRIGGER.
- \if 2\CapitalizeString%
- \isnextbyte[q]{\EncodedBlankSpace}{\rotatingword}%
- \if F\theresult\isnextbyte[q]{\BlankSpace}{\rotatingword}\fi%
- \if T\theresult%
- \if 0\arabic{@capstrigger}%
- \@forcecapson%
- \@defineactions%
- \fi
- \setcounter{@capstrigger}{2}%
- \fi
- \fi
-% \end{macrocode}
-% Is the next character an encoded symbol? If it is a normal character,
-% simply rotate it to the end of the string.
-% If it is an encoded symbol however, its
-% treatment will depend on whether it will be gobbled away or end up
-% in the final substring. If it will be gobbled away, leave it encoded,
-% because the gobbling routine knows how to gobble encoded characters.
-% If it will end up in the substring, manipulate it according to the
-% encoding rules set in |\@defineactions| and rotate it.
-% \begin{macrocode}
-% CHECK IF NEXT CHARACTER IS A SYMBOL
- \isnextbyte[q]{\EscapeChar}{\rotatingword}%
- \ifthenelse{\value{@letterindex} < \value{@fromindex}}%
- {%
-% THIS CHARACTER WILL EVENTUALLY BE GOBBLED
- \if T\theresult%
-% ROTATE THE ESCAPE CHARACTER, WHICH WILL LEAVE THE SYMBOL ENCODED
-% FOR PROPER GOBBLING (ESCAPE CHARACTER DOESN'T COUNT AS A LETTER)
- \edef\rotatingword{\@rotate{\rotatingword}}%
- \addtocounter{@letterindex}{-1}%
- \else
-% NORMAL CHARACTER OR SYMBOL CODE... ROTATE IT
- \edef\rotatingword{\@rotate{\rotatingword}}%
- \fi
- }%
- {%
-% THIS CHARACTER WILL EVENTUALLY MAKE IT INTO SUBSTRING
- \if T\theresult%
-% ROTATE THE SYMBOL USING DEFINED TREATMENT RULES
- \edef\rotatingword{\ESCrotate{\expandafter\@gobble\rotatingword}}%
- \else
-% NORMAL CHARACTER... ROTATE IT
- \edef\rotatingword{\@rotate{\rotatingword}}%
- \fi
- }%
-% \end{macrocode}
-% Here, the capitalization trigger persistently tries to turn
-% itself off with each loop
-% through the string rotation. Only if the earlier code found the
-% rotation to be pointing to the blank character(s) between words while
-% |\CapitalizeString| equals 2 will the trigger be prevented from
-% extinguishing itself.
-% \begin{macrocode}
-% DECREMENT CAPITALIZATION TRIGGER TOWARDS 0, EVERY TIME THROUGH LOOP
- \if 0\arabic{@capstrigger}%
- \else
- \addtocounter{@capstrigger}{-1}%
- \if 0\arabic{@capstrigger}\@relaxcapson\fi
- \fi
-% \end{macrocode}
-% In addition to the standard |\substring| calls in which fixed
-% substring limits are specified (which in turn fixes the number of
-% character rotations to be executed), some \stringstrings commands
-% want the rotations to continue until a blankspace is located.
-% This bit of code looks for that blank space, if that was the option
-% requested. Once found, the rotation will stop. However, depending
-% on the value of |\SeekBlankSpace|, the remainder of the string may
-% either be retained or discarded.
-% \begin{macrocode}
-% IF SOUGHT SPACE IS FOUND, END ROTATION OF STRING
- \if 0\SeekBlankSpace\else
- \isnextbyte[q]{\EncodedBlankSpace}{\rotatingword}%
- \if F\theresult\isnextbyte[q]{\BlankSpace}{\rotatingword}\fi%
- \if T\theresult%
- \if 1\SeekBlankSpace%
-% STOP ROTATION, KEEP REMAINDER OF STRING
- \setcounter{@maxrotation}{\value{@letterindex}}%
- \else
-% STOP ROTATION, THROW AWAY REMAINDER OF STRING
- \addtocounter{@gobblesize}{\value{@maxrotation}}%
- \setcounter{@maxrotation}{\value{@letterindex}}%
- \addtocounter{@gobblesize}{-\value{@maxrotation}}%
- \fi
- \fi
- \fi
- }%
-% \end{macrocode}
-% The loop has ended.\\
-% Gobble up the first |@gobblesize| characters (not bytes!)~of the string,
-% which should leave the desired substring as the remainder. If the
-% mode is verbose, print out the resulting substring.
-% \begin{macrocode}
-% GOBBLE AWAY THAT PART OF STRING THAT ISN'T PART OF REQUESTED SUBSTRING
- \@gobblearg{\rotatingword}{\arabic{@gobblesize}}%
- \edef\thestring{\gobbledword}%
- \if v#1\thestring\fi%
-\?}
-% \end{macrocode}
-% \end{macro}
-
-% Many of the following commands are self-expanatory. The recipe they
-% follow is to use |\Treatments| to specify how different character
-% classes are to be manipulated, and then to call upon |\substring| to
-% effect the desired manipulation. Treatments are typically
-% re-defaulted at the conclusion of the command, which is why the user,
-% if desiring special treatments, should specify those treatments
-% immediately before a call to |\substring|.
-% \begin{macro}{\caseupper}
-% \begin{macrocode}
-% Convert Lower to Uppercase; retain all symbols, numerals,
-% punctuation, and blanks.
-\newcommand\caseupper[2][v]{%
- \Treatments{1}{2}{1}{1}{1}{1}%
- \substring[#1]{#2}{1}{\@MAXSTRINGSIZE}%
- \defaultTreatments%
-}
-% \end{macrocode}
-% \end{macro}
-
-% \begin{macro}{\caselower}
-% \begin{macrocode}
-% Convert Upper to Lowercase; retain all symbols, numerals,
-% punctuation, and blanks.
-\newcommand\caselower[2][v]{%
- \Treatments{2}{1}{1}{1}{1}{1}%
- \substring[#1]{#2}{1}{\@MAXSTRINGSIZE}%
- \defaultTreatments%
-}
-% \end{macrocode}
-% \end{macro}
-
-% \begin{macro}{\solelyuppercase}
-% \begin{macrocode}
-% Convert Lower to Uppercase; discard symbols, numerals, and
-% punctuation, but keep blanks.
-\newcommand\solelyuppercase[2][v]{%
- \Treatments{1}{2}{0}{0}{0}{1}%
- \substring[#1]{#2}{1}{\@MAXSTRINGSIZE}%
- \defaultTreatments%
-}
-% \end{macrocode}
-% \end{macro}
-
-% \begin{macro}{\solelylowercase}
-% \begin{macrocode}
-% Convert Upper to Lowercase; discard symbols, numerals, and
-% punctuation, but keep blanks.
-\newcommand\solelylowercase[2][v]{%
- \Treatments{2}{1}{0}{0}{0}{1}%
- \substring[#1]{#2}{1}{\@MAXSTRINGSIZE}%
- \defaultTreatments%
-}
-% \end{macrocode}
-% \end{macro}
-
-% \begin{macro}{\changecase}
-% \begin{macrocode}
-% Convert Lower to Uppercase & Upper to Lower; retain all symbols, numerals,
-% punctuation, and blanks.
-\newcommand\changecase[2][v]{%
- \Treatments{2}{2}{1}{1}{1}{1}%
- \substring[#1]{#2}{1}{\@MAXSTRINGSIZE}%
- \defaultTreatments%
-}
-% \end{macrocode}
-% \end{macro}
-
-% \begin{macro}{\noblanks}
-% \begin{macrocode}
-% Remove blanks; retain all else.
-\newcommand\noblanks[2][v]{%
- \Treatments{1}{1}{1}{1}{1}{0}%
- \substring[#1]{#2}{1}{\@MAXSTRINGSIZE}%
- \defaultTreatments%
-}
-% \end{macrocode}
-% \end{macro}
-
-% \begin{macro}{\nosymbolsnumerals}
-% \begin{macrocode}
-% Retain case; discard symbols & numerals; retain
-% punctuation & blanks.
-\newcommand\nosymbolsnumerals[2][v]{%
- \Treatments{1}{1}{1}{0}{0}{1}%
- \substring[#1]{#2}{1}{\@MAXSTRINGSIZE}%
- \defaultTreatments%
-}
-% \end{macrocode}
-% \end{macro}
-
-% \begin{macro}{\alphabetic}
-% \begin{macrocode}
-% Retain case; discard symbols, numerals &
-% punctuation; retain blanks.
-\newcommand\alphabetic[2][v]{%
- \Treatments{1}{1}{0}{0}{0}{1}%
- \substring[#1]{#2}{1}{\@MAXSTRINGSIZE}%
- \defaultTreatments%
-}
-% \end{macrocode}
-% \end{macro}
-
-% \begin{macro}{\capitalize}
-% The command |\CapitalizeString| is not set by |\Treatments|, but
-% only in |\capitalize| or in |\capitalizewords|.
-% \begin{macrocode}
-% Capitalize first character of string,
-\newcommand\capitalize[2][v]{%
- \defaultTreatments%
- \def\CapitalizeString{1}%
- \substring[#1]{#2}{1}{\@MAXSTRINGSIZE}%
- \def\CapitalizeString{0}%
-}
-% \end{macrocode}
-% \end{macro}
-
-% \begin{macro}{\capitalizewords}
-% \begin{macrocode}
-% Capitalize first character of each word in string,
-\newcommand\capitalizewords[2][v]{%
- \defaultTreatments%
- \def\CapitalizeString{2}%
- \substring[#1]{#2}{1}{\@MAXSTRINGSIZE}%
- \def\CapitalizeString{0}%
-}
-% \end{macrocode}
-% \end{macro}
-
-% \begin{macro}{\reversestring}
-% Reverses a string from back to front. To do this, a loop is set
-% up in which characters are grabbed one at a time from the end of the
-% given string, working towards the beginning of the string. The
-% grabbed characters are concatenated onto the end of the working
-% string, |\@reversedstring|. By the time the loop is complete
-% |\@reversedstring| fully represents the reversed string. The result
-% is placed into |\thestring|.
-% \begin{macrocode}
-% REVERSES SEQUENCE OF CHARACTERS IN STRING
-\newcommand\reversestring[2][v]{%
- \def\@reversedstring{}%
- \+\@getstringlength{#2}{@@stringsize}\?%
- \setcounter{@@@letterindex}{\the@@stringsize}%
- \whiledo{\the@@@letterindex > 0}{%
- \if e#1%
- \substring[e]{#2}{\the@@@letterindex}{\the@@@letterindex}%
- \else
- \substring[q]{#2}{\the@@@letterindex}{\the@@@letterindex}%
- \fi
- \edef\@reversedstring{\@reversedstring\thestring}%
- \addtocounter{@@@letterindex}{-1}%
- }%
- \edef\thestring{\@reversedstring}%
- \if v#1\thestring\fi%
-}
-% \end{macrocode}
-% \end{macro}
-
-% \begin{macro}{\convertchar}
-% Takes a string, and replaces each occurance of a specified character
-% with a replacement string. The only complexity in the logic is that
-% a separate replacement algorithm exists depending on whether the
-% specified character to be replaced is a normal character or an
-% encoded character.
-% \begin{macrocode}
-% TAKES A STARTING STRING #2 AND SUBSTITUTES A SPECIFIED STRING #4
-% FOR EVERY OCCURANCE OF A PARTICULAR GIVEN CHARACTER #3. THE
-% CHARACTER TO BE CONVERTED MAY BE EITHER A PLAIN CHARACTER OR
-% AN ENCODABLE SYMBOL.
-\newcommand\convertchar[4][v]{%
- \+%
- \edef\encodedstring{#2}%
- \edef\encodedfromarg{#3}%
- \edef\encodedtoarg{#4}%
- \?%
- \isnextbyte[q]{\EscapeChar}{\encodedfromarg}%
- \if F\theresult%
-% PLAIN "FROM" ARGUMENT
- \@convertbytetostring[#1]{\encodedstring}{#3}{\encodedtoarg}%
- \else
-% ENCODABLE "FROM" ARGUMENT
- \@convertsymboltostring[#1]{\encodedstring}%
- {\expandafter\@gobble\encodedfromarg}{\encodedtoarg}%
- \fi
-}
-% \end{macrocode}
-% \end{macro}
-
-% \begin{macro}{\convertword}
-% Takes a string, a replaces each occurance of a specified string
-% with a replacement string.
-% \begin{macrocode}
-\newcounter{@@matchloc}
-% LIKE \convertchar, EXCEPT FOR WORDS
-\newcommand\convertword[4][v]{%
- \+\edef\@@teststring{#2}%
- \edef\@fromstring{#3}%
- \edef\@tostring{#4}\?%
- \edef\@@@teststring{\@@teststring}%
- \def\@buildfront{}%
- \edef\@buildstring{\@@teststring}%
- \setcounter{@charsfound}{0}%
- \whiledo{\the@charsfound > -1}{%
-% \end{macrocode}
-% Seek occurance of |\@fromstring| in larger |\@@teststring|
-% \begin{macrocode}
- \whereisword[q]{\@@teststring}{\@fromstring}%
- \setcounter{@matchloc}{\theresult}%
- \ifthenelse{\the@matchloc = 0}%
- {%
-% \end{macrocode}
-% Not found. Done.
-% \begin{macrocode}
- \setcounter{@charsfound}{-1}%
- }%
- {%
-% \end{macrocode}
-% Potential matchstring.
-% \begin{macrocode}
- \addtocounter{@charsfound}{1}%
-% \end{macrocode}
-% Grab current test string from beginning to point just prior
-% to potential match.
-% \begin{macrocode}
- \addtocounter{@matchloc}{-1}%
- \substring[e]{\@@@teststring}{1}{\the@matchloc}%
-% \end{macrocode}
-% The string |\@buildfront| is the total original string, with
-% string substitutions, from character 1 to current potential match.
-% \begin{macrocode}
- \edef\@buildfront{\@buildfront\thestring}%
-% \end{macrocode}
-% See if potential matchstring takes us to end-of-string\ldots
-% \begin{macrocode}
- \addtocounter{@matchloc}{1}%
- \addtocounter{@matchloc}{\the@matchsize}%
- \ifthenelse{\the@matchloc > \the@@@stringsize}%
- {%
-% \end{macrocode}
-% \ldots if so, then match is last one in string. Tack on replacement
-% string to |\@buildfront| to create final string. Exit.
-% \begin{macrocode}
- \setcounter{@charsfound}{-1}%
- \edef\@buildstring{\@buildfront\@tostring}%
- }%
- {%
-% \end{macrocode}
-% \ldots if not, redefine current teststring to begin at point following
-% the current substitution. Make substitutions to current
-% |\@buildstring| and |\@buildfront|. Loop through logic again on new
-% teststring.
-% \begin{macrocode}
- \substring[e]{\@@@teststring}{\the@matchloc}{\@MAXSTRINGSIZE}%
- \edef\@@teststring{\thestring}%
- \edef\@@@teststring{\@@teststring}%
- \edef\@buildstring{\@buildfront\@tostring\@@@teststring}%
- \edef\@buildfront{\@buildfront\@tostring}%
- }%
- }%
- }%
- \substring[#1]{\@buildstring}{1}{\@MAXSTRINGSIZE}%
-}
-% \end{macrocode}
-% \end{macro}
-
-% \begin{macro}{\resetlcwords}
-% Removes all words from designated ``lower-case words'' list. This can
-% be useful because large lists of lower-case words can significantly
-% slow-down the function of |\capitalizetitle|.
-% \begin{macrocode}
-\setcounter{@lcwords}{0}
-% RESET LOWER-CASE WORD COUNT; START OVER
-\newcommand\resetlcwords[0]{%
- \setcounter{@lcwords}{0}%
-}
-% \end{macrocode}
-% \end{macro}
-
-% \begin{macro}{\addlcwords}
-% Add words to the list of designated ``lower-case words'' which will
-% not be capitalized by |\capitalizetitle|. The input should consist of
-% space-separated words, which are, in turn, passed on to |\addlcword|.
-% \begin{macrocode}
-% PROVIDE LIST OF SPACE-SEPARATED WORDS TO REMAIN LOWERCASE IN TITLES
-\newcommand\addlcwords[1]{%
- \getargs{#1}%
- \setcounter{@wordindex}{0}%
- \whiledo{\value{@wordindex} < \narg}{%
- \addtocounter{@wordindex}{1}%
- \addlcword{\csname arg\roman{@wordindex}\endcsname}%
- }
-}
-% \end{macrocode}
-% \end{macro}
-
-% \begin{macro}{\addlcword}
-% Add a word to the list of designated ``lower-case words'' which will
-% not be capitalized by |\capitalizetitle|.
-% \begin{macrocode}
-% PROVIDE A SINGLE WORD TO REMAIN LOWERCASE IN TITLES
-\newcommand\addlcword[1]{%
- \addtocounter{@lcwords}{1}%
- \expandafter\edef\csname lcword\roman{@lcwords}\endcsname{#1}
-}
-% \end{macrocode}
-% \end{macro}
-
-% \begin{macro}{\capitalizetitle}
-% Makes every word of a multi-word input string capitalized, except for
-% specifically noted ``lower-case words'' (examples might include
-% prepositions, conjunctions, \etc). The first word of the input string
-% is capitalized, while lower-case words, previously designated with
-% |\addlcword| and |\addlcwords|, are left in lower case.
-% \begin{macrocode}
-% CAPITALIZE TITLE, EXCEPT FOR DESIGNATED "LOWER-CASE" WORDS
-\newcommand\capitalizetitle[2][v]{%
-% First, capitalize every word (save in encoded form, not printed)
- \capitalizewords[e]{#2}%
-% Then lowercase words that shouldn't be capitalized, like articles,
-% prepositions, etc. (save in encoded form, not printed)
- \setcounter{@wordindex}{0}%
- \whiledo{\value{@wordindex} < \value{@lcwords}}{%
- \addtocounter{@wordindex}{1}%
- \edef\mystring{\thestring}%
- \edef\lcword{\csname lcword\roman{@wordindex}\endcsname}%
- \capitalize[e]{\lcword}%
- \edef\ucword{\thestring}%
- \convertword[e]{\mystring}{\ucword~}{\lcword~}%
- }
-% Finally, recapitalize the first word of the Title, and print it.
- \capitalize[#1]{\thestring}%
-}
-% \end{macrocode}
-% \end{macro}
-
-% \begin{macro}{\rotateword}
-% Moves first word of given string |#2| to end of string, including
-% leading and trailing blank spaces.
-% \begin{macrocode}
-\newcommand\rotateword[2][v]{%
- \+\edef\thestring{#2}\?%
-% \end{macrocode}
-% Rotate leading blank spaces to end of string
-% \begin{macrocode}
- \@treatleadingspaces[e]{\thestring}{}%
-% \end{macrocode}
-% Define end-of-rotate condition for |\substring| as next blank space
-% \begin{macrocode}
- \def\SeekBlankSpace{1}%
-% \end{macrocode}
-% Leave rotated characters alone
-% \begin{macrocode}
- \Treatments{1}{1}{1}{1}{1}{1}%
-% \end{macrocode}
-% Rotate to the next blank space or the end of string, whichever comes
-% first.
-% \begin{macrocode}
- \substring[e]{\thestring}{1}{\@MAXSTRINGSIZE}%
-% \end{macrocode}
-% Rotate trailing spaces.
-% \begin{macrocode}
- \@treatleadingspaces[#1]{\thestring}{}%
- \defaultTreatments%
-}
-% \end{macrocode}
-% \end{macro}
-
-% \begin{macro}{\removeword}
-% Remove the first word of given string |#2|, including leading and
-% trailing spaces. Note that logic is identical to |\rotateword|,
-% except that affected spaces and characters are removed instead of
-% being rotated.
-% \begin{macrocode}
-\newcommand\removeword[2][v]{%
- \+\edef\thestring{#2}\?%
-% \end{macrocode}
-% The |{x}| final argument indicates to delete leading spaces.
-% \begin{macrocode}
- \@treatleadingspaces[e]{\thestring}{x}%
- \def\SeekBlankSpace{1}%
-% \end{macrocode}
-% The Treatments are specified to remove all characters.
-% \begin{macrocode}
- \Treatments{0}{0}{0}{0}{0}{0}%
- \substring[e]{\thestring}{1}{\@MAXSTRINGSIZE}%
-% \end{macrocode}
-% Trailing spaces are also deleted.
-% \begin{macrocode}
- \@treatleadingspaces[#1]{\thestring}{x}%
- \defaultTreatments%
-}
-% \end{macrocode}
-% \end{macro}
-
-% \begin{macro}{\getnextword}
-% A special case of |\getaword|, where word-to-get is specified as
-% ``1''.
-% \begin{macrocode}
-% GETS NEXT WORD FROM STRING #2.
-% NOTE: ROTATES BACK TO BEGINNING, AFTER STRING OTHERWISE EXHAUSTED
-\newcommand\getnextword[2][v]{%
- \getaword[#1]{#2}{1}%
-}
-% \end{macrocode}
-% \end{macro}
-
-% \begin{macro}{\getaword}
-% Obtain a specified word number (|#3|) from string |#2|. Logic: rotate
-% leading spaces to end of string; then loop |#3|~--~1 times through
-% |\rotateword|. Finally, get next word.
-% \begin{macrocode}
-% GETS WORD #3 FROM STRING #2.
-% NOTE: ROTATES BACK TO BEGINNING, AFTER STRING OTHERWISE EXHAUSTED
-\newcommand\getaword[3][v]{%
- \setcounter{@wordindex}{1}%
- \+\edef\thestring{#2}\?%
- \@treatleadingspaces[e]{\thestring}{}%
- \whiledo{\value{@wordindex} < #3}{%
- \rotateword[e]{\thestring}%
- \addtocounter{@wordindex}{1}%
- }%
- \@getnextword[#1]{\thestring}%
-}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\rotateleadingspaces}
-% Rotate leading spaces of string |#2| to the end of string.
-% \begin{macrocode}
-\newcommand\rotateleadingspaces[2][v]{%
- \@treatleadingspaces[#1]{#2}{}%
-}
-% \end{macrocode}
-% \end{macro}
-
-% \begin{macro}{\removeleadingspaces}
-% Remove leading spaces from string |#2|.
-% \begin{macrocode}
-\newcommand\removeleadingspaces[2][v]{%
- \@treatleadingspaces[#1]{#2}{x}%
-}
-% \end{macrocode}
-% \end{macro}
-
-% \begin{macro}{\stringencode}
-% \begin{macrocode}
-% ENCODE STRING; UNLIKE OTHER COMMANDS, DEFAULT IS NO PRINT
-\newcommand\stringencode[2][e]{%
- \defaultTreatments%
- \substring[#1]{#2}{1}{\@MAXSTRINGSIZE}%
-}
-% \end{macrocode}
-% \end{macro}
-
-% \begin{macro}{\stringdecode}
-% \begin{macrocode}
-% DECODE STRING
-\newcommand\stringdecode[2][v]{%
- \defaultTreatments%
- \substring[#1]{#2}{1}{\@MAXSTRINGSIZE}%
-}
-% \end{macrocode}
-% \end{macro}
-
-% \begin{macro}{\gobblechar}
-% Remove first character (not byte!) from string |#2|. Unlike just about
-% all other \stringstrings commands, result is retokenized and not
-% expanded.
-% \begin{macrocode}
-% SINGLE-CHARACTER VERSION OF \gobblechars. IN THIS CASE, TWO-BYTE
-% ESCAPE SEQUENCES, WHEN ENCOUNTERED, COUNT AS A SINGLE GOBBLE.
-\newcommand\gobblechar[2][q]{\+%
- \@gobblearg{#2}{1}%
- \?\retokenize[#1]{\gobbledword}%
-}
-% \end{macrocode}
-% \end{macro}
-
-% \begin{macro}{\gobblechars}
-% Remove first |#3| characters (not bytes!) from string |#2|.
-% Unlike just about all other \stringstrings commands, result is
-% retokenized and not expanded.
-% \begin{macrocode}
-% USER CALLABLE VERSION OF \@gobblearg. TURNS ON REENCODING.
-% GOBBLE FIRST #3 CHARACTERS FROM STRING #2. TWO-BYTE
-% ESCAPE SEQUENCES, WHEN ENCOUNTERED, COUNT AS A SINGLE GOBBLE.
-\newcommand\gobblechars[3][q]{\+%
- \@gobblearg{#2}{#3}%
- \?\retokenize[#1]{\gobbledword}%
-}
-% \end{macrocode}
-% \end{macro}
-
-% \begin{macro}{\retokenize}
-% One of the key \stringstrings routines that provides several
-% indispensible functions. Its function is to take an encoded string
-% |#2| that has been given, and repopulate the string with its \LaTeX{}
-% tokens in a |\def| form (not an expanded |\edef| form). It is
-% useful if required to operate on a string outside of the
-% \stringstrings library routines, following a \stringstrings
-% manipulation. It is also useful to display certain tokens which
-% cannot be manipulated in expanded form. See
-% Table~\ref{tbl:prob} for a list of tokens that will only work when the
-% resulting string is retokenized (and not expanded).
-%
-% Logic: Loop through each character of given string |#2|. Each
-% successive character of the string is retokenized as |\inexttoken|,
-% |\iinexttoken|, |\iiinexttoken|, |\ivnexttoken|, \etc, respectively.
-% Then a series of strings are formed as\\
-% \\
-% |\def\buildtoken{}|\\
-% |\def\buildtokeni{\builtoken\inexttoken}|\\
-% |\def\buildtokenii{\builtokeni\iinexttoken}|\\
-% |\def\buildtokeniii{\builtokenii\iiinexttoken}|\\
-% |\def\buildtokeniv{\builtokeniii\ivnexttoken}|\\
-% \\
-% The last in the sequence of |\builtoken...| strings (renamed
-% |\buildtokenq|) is the retokenized
-% version of string |#2|.
-% \begin{macrocode}
-% CONVERTS ENCODED STRING BACK INTO TOKENIZED FORM (i.e., def'ED).
-\newcommand\retokenize[2][q]{\+%
- \edef\@svstring{#2}%
- \edef\buildtoken{}%
- \@getstringlength{#2}{@@stringsize}\?%
- \setcounter{@@letterindex}{0}%
- \whiledo{\the@@letterindex < \the@@stringsize}{%
- \setcounter{@previousindex}{\the@@letterindex}%
- \addtocounter{@@letterindex}{1}%
- \substring[e]{\@svstring}{\the@@letterindex}{\the@@letterindex}%
- \@retokenizechar{\thestring}{\roman{@@letterindex}nexttoken}%
- \expandafter\def\csname buildtoken\roman{@@letterindex}%
- \expandafter\endcsname\expandafter%
- {\csname buildtoken\roman{@previousindex}\expandafter\endcsname%
- \csname\roman{@@letterindex}nexttoken\endcsname}%
- }%
- \expandafter\def\expandafter\buildtokenq\expandafter{%
- \csname buildtoken\roman{@@letterindex}\endcsname}%
- \def\thestring{\buildtokenq}%
- \if v#1\thestring\fi
-}
-% \end{macrocode}
-% \end{macro}
-
-% \begin{macrocode}
-% %%%%% COMMANDS TO EXTRACT STRING INFORMATION %%%%%%%%%%%%%%%%%%%%%%%%%%
-% \end{macrocode}
-
-% The following group of commands extract information about a string,
-% and store the result in a string called |\theresult|. Since the
-% result is not a substring, a \textit{mode} of |[e]| carries no
-% meaning. Only |[v]| and |[q]| modes apply here.
-% \begin{macro}{\stringlength}
-% Returns the length of the given string in \textit{characters}, not
-% \textit{bytes}.
-% \begin{macrocode}
-% USER CALLABLE VERSION of \@getstringlength:
-% GET'S STRING LENGTH OF [#2], PUTS RESULT IN \theresult. PRINTS RESULT
-% UNLESS IN QUIET [q] MODE.
-\newcommand\stringlength[2][v]{\+%
- \@getstringlength{#2}{@@stringsize}%
- \edef\theresult{\arabic{@@stringsize}}%
- \if v#1\theresult\fi%
-\?}
-% \end{macrocode}
-% \end{macro}
-
-% \begin{macro}{\findchars}
-% Find number of occurances of character |#3| in string |#2|.
-% \begin{macrocode}
-% CHECKS TO SEE IF THE CHARACTER [#3] APPEARS ANYWHERE IN STRING [#2].
-% THE NUMBER OF OCCURANCES IS PRINTED OUT, EXCEPT WHEN [#1]=q, QUIET
-% MODE. RESULT IS ALSO STORED IN \theresult . TO FIND SPACES, ARG3
-% SHOULD BE SET TO {~}, NOT { }.
-\newcommand\findchars[3][v]{\+%
- \@getstringlength{#2}{@@stringsize}%
- \setcounter{@charsfound}{0}%
- \setcounter{@@letterindex}{0}%
-% \end{macrocode}
-% Loop through each character of |#2|.
-% \begin{macrocode}
- \whiledo{\value{@@letterindex} < \value{@@stringsize}}{%
- \addtocounter{@@letterindex}{1}%
-% \end{macrocode}
-% Test if the |@@letterindex| character of string |#2| equals |#3|.
-% If so, add to tally.
-% \begin{macrocode}
- \testmatchingchar{#2}{\arabic{@@letterindex}}{#3}%
- \ifmatchingchar\addtocounter{@charsfound}{1}\fi
- }%
- \edef\theresult{\arabic{@charsfound}}%
- \if q#1\else\theresult\fi%
-\?}
-% \end{macrocode}
-% \end{macro}
-
-% \begin{macro}{\whereischar}
-% Similar to |\findchars|, but instead finds first occurance of match
-% character |#3| within |#2| and returns its location within |#2|.
-% \begin{macrocode}
-% CHECKS TO FIND LOCATION OF FIRST OCCURANCE OF [#3] IN STRING [#2].
-% THE LOCATION IS PRINTED OUT, EXCEPT WHEN [#1]=q, QUIET
-% MODE. RESULT IS ALSO STORED IN \theresult . TO FIND SPACES, ARG3
-% SHOULD BE SET TO {~}, NOT { }.
-\newcommand\whereischar[3][v]{\+%
- \@getstringlength{#2}{@@stringsize}%
- \edef\@theresult{0}%
- \setcounter{@@letterindex}{0}%
-% \end{macrocode}
-% Loop through characters of |#2| sequentially.
-% \begin{macrocode}
- \whiledo{\value{@@letterindex} < \value{@@stringsize}}{%
- \addtocounter{@@letterindex}{1}%
-% \end{macrocode}
-% Look for match. If found, save character-location index,
-% and reset loop index to break from loop.
-% \begin{macrocode}
- \testmatchingchar{#2}{\arabic{@@letterindex}}{#3}%
- \ifmatchingchar%
- \edef\@theresult{\the@@letterindex}%
- \setcounter{@@letterindex}{\the@@stringsize}%
- \fi
- }%
- \edef\theresult{\@theresult}%
- \if q#1\else\theresult\fi%
-\?}
-% \end{macrocode}
-% \end{macro}
-
-% \begin{macro}{\whereisword}
-% Finds location of specified word (|#3|) in string |#2|.
-% \begin{macrocode}
-% LIKE \whereischar, EXCEPT FOR WORDS
-\newcommand\whereisword[3][v]{\+%
- \setcounter{@skipped}{0}%
-% \end{macrocode}
-% |\@@@@teststring| initially contains |#2|. As false alarms are
-% located, the string will be redefined to lop off initial characters
-% of string.
-% \begin{macrocode}
- \edef\@@@@teststring{#2}%
- \edef\@matchstring{#3}%
- \@getstringlength{#2}{@@stringsize}%
- \setcounter{@@@stringsize}{\value{@@stringsize}}%
- \@getstringlength{#3}{@matchsize}%
- \setcounter{@matchmax}{\the@@stringsize}%
- \addtocounter{@matchmax}{-\the@matchsize}%
- \addtocounter{@matchmax}{1}%
- \setcounter{@flag}{0}%
-% \end{macrocode}
-% Define |\matchchar| as the first character of the match string (|#3|).
-% \begin{macrocode}
- \substring[e]{#3}{1}{1}%
- \edef\matchchar{\thestring}%
- \whiledo{\the@flag = 0}{%
-% \end{macrocode}
-% Look for first character of match string within |\@@@@teststring|.
-% \begin{macrocode}
- \whereischar[q]{\@@@@teststring}{\matchchar}%
- \setcounter{@matchloc}{\theresult}%
- \ifthenelse{\equal{0}{\value{@matchloc}}}%
-% \end{macrocode}
-% If none found, we are done.
-% \begin{macrocode}
- {%
- \setcounter{@flag}{1}%
- }%
-% \end{macrocode}
-% If |\matchchar| is found, must determine if it is the beginning
-% of the match string, or just an extraneous match (\ie false alarm).
-% Extract substring
-% of |\@@@@teststring|, of a size equal to the match string.
-% Compare this extracted string with the match string.
-% \begin{macrocode}
- {%
- \setcounter{@matchend}{\theresult}%
- \addtocounter{@matchend}{\value{@matchsize}}%
- \addtocounter{@matchend}{-1}%
- \substring[e]{\@@@@teststring}{\the@matchloc}{\the@matchend}%
- \ifthenelse{\equal{\thestring}{\@matchstring}}%
-% \end{macrocode}
-% Found a match! Save the match location
-% \begin{macrocode}
- {%
- \setcounter{@flag}{1}%
- \addtocounter{@matchloc}{\the@skipped}%
- \edef\theresult{\the@matchloc}%
- }%
-% \end{macrocode}
-% False alarm. Determine if lopping off the leading characters of
-% |\@@@@teststring| (to discard the false-alarm occurance) is feasible.
-% If lopping would take one past the end of the string,
-% then no match is possible. If lopping permissible, redefine the
-% string |\@@@@teststring|, keeping track of the total number of
-% lopped-off characters in the counter |@skipped|.
-% \begin{macrocode}
- {%
- \addtocounter{@skipped}{\the@matchloc}%
- \addtocounter{@matchloc}{1}%
- \ifthenelse{\value{@matchloc} > \value{@matchmax}}%
- {%
- \setcounter{@flag}{1}%
- \edef\theresult{0}%
- }%
- {%
- \substring[e]{\@@@@teststring}{\the@matchloc}{\@MAXSTRINGSIZE}%
- \edef\@@@@teststring{\thestring}%
- }%
- }%
- }%
- }%
- \if q#1\else\theresult\fi%
-\?}
-% \end{macrocode}
-% \end{macro}
-
-% \begin{macro}{\findwords}
-% Finds the number of occurances of a word within the provided string
-% \begin{macrocode}
-% LIKE \findchar, EXCEPT FOR WORDS
-\newcommand\findwords[3][v]{%
- \+\edef\@@teststring{#2}\?%
- \edef\@@@teststring{\@@teststring}%
- \setcounter{@charsfound}{0}%
- \whiledo{\the@charsfound > -1}{%
-% \end{macrocode}
-% Seek occurance of |#3| in the string to be tested
-% \begin{macrocode}
- \whereisword[q]{\@@teststring}{#3}%
- \setcounter{@matchloc}{\theresult}%
- \ifthenelse{\the@matchloc = 0}%
- {%
-% \end{macrocode}
-% None found. Break from loop.
-% \begin{macrocode}
- \edef\theresult{\the@charsfound}%
- \setcounter{@charsfound}{-1}%
- }%
- {%
-% \end{macrocode}
-% Found. Increment count.
-% \begin{macrocode}
- \addtocounter{@charsfound}{1}%
- \addtocounter{@matchloc}{\the@matchsize}%
- \ifthenelse{\the@matchloc > \the@@stringsize}%
- {%
-% \end{macrocode}
-% This "find" takes us to the end-of-string. Break from loop now.
-% \begin{macrocode}
- \edef\theresult{\the@charsfound}%
- \setcounter{@charsfound}{-1}%
- }%
- {%
-% \end{macrocode}
-% More string to search. Lop off what has been searched from string to
-% be tested, and re-loop for next search.
-% \begin{macrocode}
- \substring[e]{\@@@teststring}{\the@matchloc}{\@MAXSTRINGSIZE}%
- \edef\@@teststring{\thestring}%
- \edef\@@@teststring{\@@teststring}%
- }%
- }%
- }%
- \if q#1\else\theresult\fi%
-}
-% \end{macrocode}
-% \end{macro}
-
-% \begin{macro}{\wordcount}
-% Counts words (space-separated text) in a string. Simply removes one
-% word at a time, counting the words as it goes. With each removal,
-% checks for non-zero string size remaining.
-% \begin{macrocode}
-% WORD COUNT
-\newcommand\wordcount[2][v]{\+%
- \edef\@argv{#2}
- \@getstringlength{\@argv}{@stringsize}
- \setcounter{@iargc}{0}
- \whiledo{\value{@stringsize} > 0}{%
- \addtocounter{@iargc}{1}%
- \removeword[e]{\@argv}%
- \edef\@argv{\thestring}%
- \@getstringlength{\@argv}{@stringsize}%
- }
- \edef\theresult{\arabic{@iargc}}%
- \if v#1\theresult\fi%
-\?}
-% \end{macrocode}
-% \end{macro}
-
-% \begin{macro}{\getargs}
-% Parse a string of arguments in Unix-like manner. Define |\argv| as |#2|.
-% Grabs leading word from |\argv| and puts it in |\argi|. Increment
-% argument count; remove leading word from |\argv|. Repeat this process,
-% with each new argument being placed in |\argii|, |\argiii|, |\argiv|,
-% \etc~ Continue until size of |\argv| is exhausted.
-% \begin{macrocode}
-% OBTAINS ARGUMENTS (WORDS) IN #1 ALA UNIX getarg COMMAND
-% narg CONTAINS NUMBER OF ARGUMENTS. ARGUMENTS CONTAINED IN
-% argi, argii, argiii, argiv, ETC.
-% v mode disabled
-\newcommand\getargs[2][q]{\+%
- \if v#1\def\@mode{q}\else\def\@mode{#1}\fi%
- \edef\@argv{#2}%
- \@getstringlength{\@argv}{@stringsize}%
- \setcounter{@iargc}{0}%
- \whiledo{\value{@stringsize} > 0}{%
- \addtocounter{@iargc}{1}%
- \getaword[\@mode]{\@argv}{1}%
- \expandafter\edef\csname arg\roman{@iargc}\endcsname{\thestring}%
- \removeword[e]{\@argv}%
- \edef\@argv{\thestring}%
- \@getstringlength{\@argv}{@stringsize}%
- }%
- \edef\narg{\arabic{@iargc}}%
-\?}
-% \end{macrocode}
-% \end{macro}
-
-% \begin{macrocode}
-%%%%% COMMANDS TO TEST STRINGS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% \end{macrocode}
-
-% The following group of commands test for various alphanumeric
-% string conditions.
-% \begin{macro}{\isnextbyte}
-% This routine performs a simple test to determine if the first byte of
-% string |#3| matches the byte given by |#2|. The only problem is that
-% the test can produce a false negative if the first byte of the test
-% string equals the match byte and the second byte of the test string
-% equals the |SignalChar| (defined below).
-%
-% To resolve this possibility, the test is performed twice with two
-% different values for |\SignalChar|, only one of which can produce
-% a false negative for a given test string. If the two results match,
-% then that result gives the correct answer to the question of whether
-% the first byte of |#3| equals |#2|. If, however, the two results fail
-% to match, then one can assume that one of the results is a false
-% negative, and so a ``true'' condition results.
-% \begin{macrocode}
-% \end{macrocode}
-% The following two ``signal characters,'' used for the two tests,
-% can be any two distinct characters. They are used solely
-% by |\isnextbyte|.
-% \begin{macrocode}
-\def\PrimarySignalChar{@}
-\def\SecondarySignalChar{`}
-
-% \isnextbyte NEEDS TO OPERATE IN RAW (SINGLE BYTE) MODE SO AS TO
-% PERFORM TESTS FOR PRESENCE OF \EscapeChar
-% \end{macrocode}
-% Incidentally,
-% |\isnextbyte| can and is used by \stringstrings to detect
-% multi-byte characters in a manner which may also be employed by the
-% user. To do this:
-% First, the string to be tested should be encoded. Then, |\isnextbyte|
-% may be used to check for |\EscapeChar| which is how every multi-byte
-% character will begin its encoding by the \stringstrings package.
-% If |\EscapeChar| is detected as the next character, then the string to
-% test may have its leading byte gobbled and the next character (called
-% the Escape Code) may be tested, and compared against the known
-% \stringstrings escape codes. The combination of
-% Escape-Character/Escape-Code is how all multi-byte characters are
-% encoded by the \stringstrings package.
-% \begin{macrocode}
-\newcommand\isnextbyte[3][v]{%
-% \end{macrocode}
-% Here's the first test\ldots
-% \begin{macrocode}
- \let\SignalChar\PrimarySignalChar%
- \edef\@x{\if #2#3\else\SignalChar\fi}%
- \edef\@x{\if \SignalChar\@x F\else T\fi}%
-% \end{macrocode}
-% \ldots and the second
-% \begin{macrocode}
- \let\SignalChar\SecondarySignalChar%
- \edef\@y{\if #2#3\else\SignalChar\fi}%
- \edef\@y{\if \SignalChar\@y F\else T\fi}%
-% \end{macrocode}
-% If the two tests produced the same result, then a comparison of |\@x\@y|
-% and |\@y\@x| will show it.
-% \begin{macrocode}
-% BECAUSE THE METHOD ONLY PRODUCES FALSE NEGATIVES, IF RESULTS DON'T
-% AGREE FROM USING TWO DIFFERENT SIGNAL CHARACTERS, RESULT MUST BE TRUE.
- \ifthenelse{\equal{\@x\@y}{\@y\@x}}
- {\edef\theresult{\@x}}%
-% CORRECT THE FALSE NEGATIVE
- {\edef\theresult{T}}%
- \if q#1\else\theresult\fi
-}
-% \end{macrocode}
-% \end{macro}
-
-% \begin{macro}{\testmatchingchar}
-% This routine checks for a specified match-character within a target
-% string. Unlike |\isnextbyte|, this
-% routine checks for characters (single- or multi-byte) and not just
-% individual bytes. Additionally, rather than testing the
-% match-character against the first byte of the test-string, the user
-% specifies (through |#2|) which byte of the test-string should be
-% compared to the match-character.
-%
-% This routine is not as efficient as |\isnextbyte|, but much more
-% versatile.
-% \begin{macrocode}
-% CHECKS TO SEE IF [#2]'th CHARACTER IN STRING [#1] EQUALS [#3]
-% RESULT STORED IN BOOLEAN \ifmatchingchar
-\newif\ifmatchingchar
-\newcommand\testmatchingchar[3]{%
- \setbox0=\hbox{%
-% \end{macrocode}
-% Extract desired character from test string
-% \begin{macrocode}
- \substring[e]{#1}{#2}{#2}\+%
-% \end{macrocode}
-% Determine if the match-character is a multi-byte symbol.
-% \begin{macrocode}
- \isnextbyte[q]{\EscapeChar}{#3}%
- \if T\theresult%
-% \end{macrocode}
-% Is the tested character also a multi-byte symbol?
-% \begin{macrocode}
- \isnextbyte[q]{\EscapeChar}{\thestring}%
- \if T\theresult%
-% \end{macrocode}
-% Yes it is\ldots Therefore, compare codes following the escape character
-% \begin{macrocode}
- \edef\@testcode{\expandafter\@DiscardNextChar\expandafter{#3}}%
- \edef\@teststring{\@DiscardNextChar{\thestring}}%
- \if \@teststring\@testcode\matchingchartrue\else\matchingcharfalse\fi
- \else
-% \end{macrocode}
-% No, we are comparing a normal character against a multi-byte symbol
-% (apples and oranges), a false comparison.
-% \begin{macrocode}
- \global\matchingcharfalse%
- \fi
- \else
-% \end{macrocode}
-% No, we are comparing two normal one-byte characters, not a mult-byte
-% character.
-% \begin{macrocode}
- \if \thestring#3\global\matchingchartrue\else\global\matchingcharfalse\fi
- \fi}
-\?}
-% \end{macrocode}
-% \end{macro}
-
-% \begin{macro}{\testcapitalized}
-% This routine checks to see if first character of string is
-% capitalized. The only quirk is that the routine must ascertain
-% whether that character is a single-byte character or a multi-byte
-% character.
-% \begin{macrocode}
-\newif\ifcapitalized
-\newcommand\testcapitalized[1]{\+%
- \setbox0=\hbox{%
- \isnextbyte[q]{\EscapeChar}{#1}%
- \if T\theresult%
- \def\EncodingTreatment{e}%
- \edef\rotatingword{#1}%
-% \end{macrocode}
-% Rotate the first [multi-byte] character of the string to the end
-% of the string, lowering its case. Store as |\@stringA|.
-% \begin{macrocode}
- \def\AlphaCapsTreatment{2}%
- \@defineactions%
- \edef\@stringA{\ESCrotate{\expandafter\@gobble\rotatingword}}%
-% \end{macrocode}
-% Rotate the first [multi-byte] character of the string to the end
-% of the string, retaining its case. Store as |\@stringB|.
-% \begin{macrocode}
- \def\AlphaCapsTreatment{1}%
- \@defineactions%
- \edef\@stringB{\ESCrotate{\expandafter\@gobble\rotatingword}}%
- \else
-% \end{macrocode}
-% \ldots or, if the first character is a normal one-byte character\ldots
-% Rotate the first [normal] character of the string to the end
-% of the string, lowering its case. Store as |\@stringA|.
-% \begin{macrocode}
- \def\AlphaCapsTreatment{2}%
- \edef\@stringA{\@rotate{#1}}%
-% \end{macrocode}
-% Rotate the first [normal] character of the string to the end
-% of the string, retaining its case. Store as |\@stringB|.
-% \begin{macrocode}
- \def\AlphaCapsTreatment{1}%
- \edef\@stringB{\@rotate{#1}}%
- \fi
-% \end{macrocode}
-% Compare strings A and B, to see if changing the case of first letter
-% altered the string
-% \begin{macrocode}
- \ifthenelse{\equal{\@stringA}{\@stringB}}%
- {\global\capitalizedfalse}{\global\capitalizedtrue}}\?%
- \defaultTreatments%
-}
-% \end{macrocode}
-% \end{macro}
-
-% \begin{macro}{\testuncapitalized}
-% This routine is the complement of |\testcapitalized|. The only
-% difference is that the |\@stringA| has its case made upper for the
-% comparison, instead of lowered.
-% \begin{macrocode}
-\newif\ifuncapitalized
-\newcommand\testuncapitalized[1]{\+%
- \setbox0=\hbox{%
- \isnextbyte[q]{\EscapeChar}{#1}%
- \if T\theresult%
- \def\EncodingTreatment{e}%
- \edef\rotatingword{#1}%
- \def\AlphaTreatment{2}%
- \@defineactions%
- \edef\@stringA{\ESCrotate{\expandafter\@gobble\rotatingword}}%
- \def\AlphaTreatment{1}%
- \@defineactions%
- \edef\@stringB{\ESCrotate{\expandafter\@gobble\rotatingword}}%
- \else
- \def\AlphaTreatment{2}%
- \edef\@stringA{\@rotate{#1}}%
- \def\AlphaTreatment{1}%
- \edef\@stringB{\@rotate{#1}}%
- \fi
- \ifthenelse{\equal{\@stringA}{\@stringB}}%
- {\global\uncapitalizedfalse}{\global\uncapitalizedtrue}}\?%
- \defaultTreatments%
-}
-% \end{macrocode}
-% \end{macro}
-
-% \begin{macro}{\testleadingalpha}
-% Test if the leading character of the string is alphabetic. This is
-% simply accomplished by checking whether the string is either
-% capitalized or uncapitalized. If non-alphabetic, it will show
-% up as false for both those tests.
-% \begin{macrocode}
-\newif\ifleadingalpha
-\newcommand\testleadingalpha[1]{%
- \testcapitalized{#1}%
- \ifcapitalized
- \leadingalphatrue%
- \else
- \testuncapitalized{#1}%
- \ifuncapitalized
- \leadingalphatrue%
- \else
- \leadingalphafalse%
- \fi
- \fi
-}
-% \end{macrocode}
-% \end{macro}
-
-% \begin{macro}{\testuppercase}
-% Checks to see if all alphabetic characters in a string are uppercase.
-% Non-alphabetic characters don't affect the result, unless the string
-% is composed solely of nonalphabetic characters, in which case the test
-% results is false.
-% \begin{macrocode}
-\newif\ifuppercase
-\newcommand\testuppercase[1]{%
- \setbox0=\hbox{%
-% \end{macrocode}
-% Strip all non-alphabetic characters. Save as |\@stringA|.
-% \begin{macrocode}
- \Treatments{1}{1}{0}{0}{0}{0}%
- \substring[e]{#1}{1}{\@MAXSTRINGSIZE}%
- \edef\@stringA{\thestring}%
-% \end{macrocode}
-% Lower the case of all uppercase characters in |\@stringA|. Save as
-% |\@stringB|. Compare these two strings.
-% \begin{macrocode}
- \def\AlphaTreatment{2}%
- \substring[e]{#1}{1}{\@MAXSTRINGSIZE}%
- \edef\@stringB{\thestring}%
- \ifthenelse{\equal{\@stringA}{\@stringB}}%
- {%
-% \end{macrocode}
-% If the strings are equal, then all the alphabetic characters in the
-% original string were uppercase. Need only check to make sure at
-% least one alphabetic character was present in the original string.
-% \begin{macrocode}
- \@getstringlength{\@stringA}{@stringsize}%
- \ifthenelse{\value{@stringsize} = 0}%
- {\global\uppercasefalse}{\global\uppercasetrue}%
- }%
-% \end{macrocode}
-% If strings are not equal, then the alphabetic characters of the
-% original string were not all uppercase. Test false.
-% \begin{macrocode}
- {\global\uppercasefalse}}%
- \defaultTreatments%
-}
-% \end{macrocode}
-% \end{macro}
-
-% \begin{macro}{\ifsolelyuppercase}
-% Compare the original string to one made solely uppercase. If they are
-% equal (and not composed solely of blankspaces), then the original
-% string was solely uppercase to begin with.
-% \begin{macrocode}
-\newif\ifsolelyuppercase
-\newcommand\testsolelyuppercase[1]{%
- \setbox0=\hbox{%
- \stringencode{#1}%
- \edef\@stringA{\thestring}%
- \solelyuppercase[e]{#1}%
- \edef\@stringB{\thestring}%
- \ifthenelse{\equal{\@stringA}{\@stringB}}%
- {%
- \noblanks[q]{\@stringA}%
- \@getstringlength{\thestring}{@stringsize}%
- \ifthenelse{\value{@stringsize} = 0}%
- {\global\solelyuppercasefalse}{\global\solelyuppercasetrue}%
- }%
- {\global\solelyuppercasefalse}}%
- \defaultTreatments%
-}
-% \end{macrocode}
-% \end{macro}
-
-% \begin{macro}{\testlowercase}
-% This routine is the complement to |\testuppercase|, with corresponding
-% logic.
-% \begin{macrocode}
-\newif\iflowercase
-\newcommand\testlowercase[1]{%
- \setbox0=\hbox{%
- \Treatments{1}{1}{0}{0}{0}{0}%
- \substring[e]{#1}{1}{\@MAXSTRINGSIZE}%
- \edef\@stringA{\thestring}%
- \def\AlphaCapsTreatment{2}%
- \substring[e]{#1}{1}{\@MAXSTRINGSIZE}%
- \edef\@stringB{\thestring}%
- \ifthenelse{\equal{\@stringA}{\@stringB}}%
- {%
- \@getstringlength{\@stringA}{@stringsize}%
- \ifnum\value{@stringsize}= 0\relax%
- \global\lowercasefalse\else\global\lowercasetrue\fi%
- }%
- {\global\lowercasefalse}}%
- \defaultTreatments%
-}
-% \end{macrocode}
-% \end{macro}
-
-% \begin{macro}{\testsolelylowercase}
-% This routine is the complement to |\testsolelyuppercase|, with
-% corresponding logic.
-% \begin{macrocode}
-\newif\ifsolelylowercase
-\newcommand\testsolelylowercase[1]{%
- \setbox0=\hbox{%
- \stringencode{#1}%
- \edef\@stringA{\thestring}%
- \solelylowercase[e]{#1}%
- \edef\@stringB{\thestring}%
- \ifthenelse{\equal{\@stringA}{\@stringB}}%
- {%
- \noblanks[q]{\@stringA}%
- \@getstringlength{\thestring}{@stringsize}%
- \ifthenelse{\value{@stringsize} = 0}%
- {\global\solelylowercasefalse}{\global\solelylowercasetrue}%
- }%
- {\global\solelylowercasefalse}}%
- \defaultTreatments%
-}
-% \end{macrocode}
-% \end{macro}
-
-% \begin{macro}{\testalphabetic}
-% Comparable to |\testsolelyuppercase| and
-% |\testsolelylowercase| in its logic, this routine tests whether
-% the string is purely alphabetic or not.
-% \begin{macrocode}
-\newif\ifalphabetic
-\newcommand\testalphabetic[1]{%
- \setbox0=\hbox{%
- \stringencode{#1}%
- \edef\@stringA{\thestring}%
- \alphabetic[e]{#1}%
- \edef\@stringB{\thestring}%
- \ifthenelse{\equal{\@stringA}{\@stringB}}%
- {%
- \noblanks[q]{\@stringA}%
- \@getstringlength{\thestring}{@stringsize}%
- \ifthenelse{\value{@stringsize} = 0}%
- {\global\alphabeticfalse}{\global\alphabetictrue}%
- }%
- {\global\alphabeticfalse}}%
- \defaultTreatments%
-}
-% \end{macrocode}
-% \end{macro}
-
-% \begin{macrocode}
-%
-%%%%% SUPPORT ROUTINES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% \end{macrocode}
-% The following routines support the execution of the \stringstrings
-% package.
-
-% \begin{macro}{\ESCrotate}
-% After the escape character has been ascertained as the next character,
-% this routine operates on the subsequent escape code to rotate the
-% symbol to end of string, in the fashion of macro |\@rotate|.
-% \begin{macrocode}
-\newcommand\ESCrotate[1]{%
- \if\UvariCode#1\@uvariaction\else
- \if\UvariiCode#1\@uvariiaction\else
- \if\UvariiiCode#1\@uvariiiaction\else
- \if\@fromcode#1\@tostring\else
- \if\PipeCode#1\@pipeaction\else
- \if\DollarCode#1\@dollaraction\else
- \if\CaratCode#1\@carataction\else
- \if\CircumflexCode#1\@circumflexaction\else
- \if\TildeCode#1\@tildeaction\else
- \if\UmlautCode#1\@umlautaction\else
- \if\GraveCode#1\@graveaction\else
- \if\AcuteCode#1\@acuteaction\else
- \if\MacronCode#1\@macronaction\else
- \if\OverdotCode#1\@overdotaction\else
- \if\LeftBraceCode#1\@leftbraceaction\else
- \if\RightBraceCode#1\@rightbraceaction\else
- \if\UnderscoreCode#1\@underscoreaction\else
- \if\DaggerCode#1\@daggeraction\else
- \if\DoubleDaggerCode#1\@doubledaggeraction\else
- \if\SectionSymbolCode#1\@sectionsymbolaction\else
- \if\PilcrowCode#1\@pilcrowaction\else
- \if\LBCode#1\@lbaction\else
- \if\RBCode#1\@rbaction\else
- \if\BreveCode#1\@breveaction\else
- \if\CaronCode#1\@caronaction\else
- \if\DoubleAcuteCode#1\@doubleacuteaction\else
- \if\CedillaCode#1\@cedillaaction\else
- \if\UnderdotCode#1\@underdotaction\else
- \if\ArchJoinCode#1\@archjoinaction\else
- \if\LineUnderCode#1\@lineunderaction\else
- \if\CopyrightCode#1\@copyrightaction\else
- \if\PoundsCode#1\@poundsaction\else
- \if\AEscCode#1\@AEscaction\else
- \if\aescCode#1\@aescaction\else
- \if\OEthelCode#1\@OEthelaction\else
- \if\oethelCode#1\@oethelaction\else
- \if\AngstromCode#1\@Angstromaction\else
- \if\angstromCode#1\@angstromaction\else
- \if\SlashedOCode#1\@slashedOaction\else
- \if\SlashedoCode#1\@slashedoaction\else
- \if\BarredlCode#1\@barredlaction\else
- \if\BarredLCode#1\@barredLaction\else
- \if\EszettCode#1\@eszettaction\else
- \expandafter\@gobble#1\undecipherable%
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
-}
-% \end{macrocode}
-% \end{macro}
-
-% \begin{macro}{\@getnextword}
-% A low-level routine designed to extract the next [space-delimited]
-% word of the primary
-% argument. It has several quirks: if the passed string has one leading
-% space, it is included as part of next word. If it has two leading
-% [hard]spaces, the 2$^\mathrm{nd}$ hard space \textit{is} the next word.
-% Using the higher-level |\getnextword| deals automatically with
-% these abberant possibilities.
-% \begin{macrocode}
-\newcommand\@getnextword[2][v]{%
- \defaultTreatments%
- \def\SeekBlankSpace{2}%
- \substring[#1]{#2}{1}{\@MAXSTRINGSIZE}%
- \def\SeekBlankSpace{0}%
-}
-% \end{macrocode}
-% \end{macro}
-
-% \begin{macro}{\@retokenizechar}
-% This command is the guts of the retokenize command. It grabs the
-% character provided in string |#1| and assigns it to a unique token
-% whose name is created from the string |#2|. The command has two
-% primary |\if| branches. The first branch is taken if the
-% character is a special two-byte-encoded escape-sequence, while
-% the second branch is taken if the character is a |&|, |%|, |#|,
-% a blankspace, or any simple one-byte character.
-% \begin{macrocode}
-\newcommand\@retokenizechar[2]{%
- \isnextbyte[q]{\EscapeChar}{#1}%
- \if T\theresult%
- \edef\@ESCcode{\expandafter\@gobble#1}%
- \if\UvariCode\@ESCcode%
- \expandafter\def\csname#2\endcsname{\Uvari}\else
- \if\UvariiCode\@ESCcode%
- \expandafter\def\csname#2\endcsname{\Uvarii}\else
- \if\UvariiiCode\@ESCcode%
- \expandafter\def\csname#2\endcsname{\Uvariii}\else
- \if\PipeCode\@ESCcode%
- \expandafter\def\csname#2\endcsname{\Pipe}\else
- \if\DollarCode\@ESCcode%
- \expandafter\def\csname#2\endcsname{\$}\else
- \if\CaratCode\@ESCcode%
- \expandafter\def\csname#2\endcsname{\Carat}\else
- \if\CircumflexCode\@ESCcode%
- \expandafter\def\csname#2\endcsname{\^}\else
- \if\TildeCode\@ESCcode%
- \expandafter\def\csname#2\endcsname{\~}\else
- \if\UmlautCode\@ESCcode%
- \expandafter\def\csname#2\endcsname{\"}\else
- \if\GraveCode\@ESCcode%
- \expandafter\def\csname#2\endcsname{\`}\else
- \if\AcuteCode\@ESCcode%
- \expandafter\def\csname#2\endcsname{\'}\else
- \if\MacronCode\@ESCcode%
- \expandafter\def\csname#2\endcsname{\=}\else
- \if\OverdotCode\@ESCcode%
- \expandafter\def\csname#2\endcsname{\.}\else
- \if\LeftBraceCode\@ESCcode%
- \expandafter\def\csname#2\endcsname{\{}\else
- \if\RightBraceCode\@ESCcode%
- \expandafter\def\csname#2\endcsname{\}}\else
- \if\UnderscoreCode\@ESCcode%
- \expandafter\def\csname#2\endcsname{\_}\else
- \if\DaggerCode\@ESCcode%
- \expandafter\def\csname#2\endcsname{\dag}\else
- \if\DoubleDaggerCode\@ESCcode%
- \expandafter\def\csname#2\endcsname{\ddag}\else
- \if\SectionSymbolCode\@ESCcode%
- \expandafter\def\csname#2\endcsname{\S}\else
- \if\PilcrowCode\@ESCcode%
- \expandafter\def\csname#2\endcsname{\P}\else
- \if\LBCode\@ESCcode%
- \expandafter\def\csname#2\endcsname{\SaveLB}\else
- \if\RBCode\@ESCcode%
- \expandafter\def\csname#2\endcsname{\SaveRB}\else
- \if\BreveCode\@ESCcode\expandafter\def\csname#2\endcsname{\u}\else
- \if\CaronCode\@ESCcode\expandafter\def\csname#2\endcsname{\v}\else
- \if\DoubleAcuteCode\@ESCcode\expandafter\def\csname#2\endcsname{\H}\else
- \if\CedillaCode\@ESCcode\expandafter\def\csname#2\endcsname{\c}\else
- \if\UnderdotCode\@ESCcode\expandafter\def\csname#2\endcsname{\d}\else
- \if\ArchJoinCode\@ESCcode\expandafter\def\csname#2\endcsname{\t}\else
- \if\LineUnderCode\@ESCcode\expandafter\def\csname#2\endcsname{\b}\else
- \if\CopyrightCode\@ESCcode\expandafter\def\csname#2\endcsname{\copyright}\else
- \if\PoundsCode\@ESCcode\expandafter\def\csname#2\endcsname{\pounds}\else
- \if\AEscCode\@ESCcode\expandafter\def\csname#2\endcsname{\AE}\else
- \if\aescCode\@ESCcode\expandafter\def\csname#2\endcsname{\ae}\else
- \if\OEthelCode\@ESCcode\expandafter\def\csname#2\endcsname{\OE}\else
- \if\oethelCode\@ESCcode\expandafter\def\csname#2\endcsname{\oe}\else
- \if\AngstromCode\@ESCcode\expandafter\def\csname#2\endcsname{\AA}\else
- \if\angstromCode\@ESCcode\expandafter\def\csname#2\endcsname{\aa}\else
- \if\SlashedOCode\@ESCcode\expandafter\def\csname#2\endcsname{\O}\else
- \if\SlashedoCode\@ESCcode\expandafter\def\csname#2\endcsname{\o}\else
- \if\BarredlCode\@ESCcode\expandafter\def\csname#2\endcsname{\l}\else
- \if\BarredLCode\@ESCcode\expandafter\def\csname#2\endcsname{\L}\else
- \if\EszettCode\@ESCcode\expandafter\def\csname#2\endcsname{\ss}\else
- \expandafter\def\csname#2\endcsname{\undecipherable}%
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \else
- \expandafter\ifx\expandafter\&#1%
- \expandafter\def\csname#2\endcsname{\&}\else
- \expandafter\ifx\expandafter\%#1%
- \expandafter\def\csname#2\endcsname{\%}\else
- \expandafter\ifx\expandafter\##1%
- \expandafter\def\csname#2\endcsname{\#}\else
- \if\EncodedBlankSpace#1\expandafter\def\csname#2\endcsname{\ }\else
- \expandafter\edef\csname#2\endcsname{#1}%
- \fi
- \fi
- \fi
- \fi
- \fi
-}
-% \end{macrocode}
-% \end{macro}
-
-% \begin{macro}{\@defineactions}
-% This routine defines how encoded characters are to be treated by the
-% |\ESCrotate| routine, depending on the [encoding, capitalization,
-% blank, symbol, \textit{etc.}] treatments that have
-% been \textit{a priori} specified.
-% \begin{macrocode}
-% \@blankaction AND OTHER ...action'S ARE SET, DEPENDING ON VALUES OF
-% TREATMENT FLAGS. CHARS ARE EITHER ENCODED, DECODED, OR REMOVED.
-\newcommand\@defineactions{%
-% SET UP TREATMENT FOR SPACES, ENCODED SPACES, AND [REENCODED] SYMBOLS
- \if e\EncodingTreatment%
-% ENCODE SPACES, KEEP ENCODED SPACES ENCODED, ENCODE SYMBOLS.
- \edef\@blankaction{\EncodedBlankSpace}%
- \def\@dollaraction{\EncodedDollar}%
- \def\@pipeaction{\EncodedPipe}%
- \def\@uvariaction{\EncodedUvari}%
- \def\@uvariiaction{\EncodedUvarii}%
- \def\@uvariiiaction{\EncodedUvariii}%
- \def\@carataction{\EncodedCarat}%
- \def\@circumflexaction{\EncodedCircumflex}%
- \def\@tildeaction{\EncodedTilde}%
- \def\@umlautaction{\EncodedUmlaut}%
- \def\@graveaction{\EncodedGrave}%
- \def\@acuteaction{\EncodedAcute}%
- \def\@macronaction{\EncodedMacron}%
- \def\@overdotaction{\EncodedOverdot}%
- \def\@breveaction{\EncodedBreve}%
- \def\@caronaction{\EncodedCaron}%
- \def\@doubleacuteaction{\EncodedDoubleAcute}%
- \def\@cedillaaction{\EncodedCedilla}%
- \def\@underdotaction{\EncodedUnderdot}%
- \def\@archjoinaction{\EncodedArchJoin}%
- \def\@lineunderaction{\EncodedLineUnder}%
- \def\@copyrightaction{\EncodedCopyright}%
- \def\@poundsaction{\EncodedPounds}%
- \def\@leftbraceaction{\EncodedLeftBrace}%
- \def\@rightbraceaction{\EncodedRightBrace}%
- \def\@underscoreaction{\EncodedUnderscore}%
- \def\@daggeraction{\EncodedDagger}%
- \def\@doubledaggeraction{\EncodedDoubleDagger}%
- \def\@sectionsymbolaction{\EncodedSectionSymbol}%
- \def\@pilcrowaction{\EncodedPilcrow}%
- \def\@eszettaction{\EncodedEszett}%
- \def\@lbaction{\EncodedLB}%
- \def\@rbaction{\EncodedRB}%
- \if 2\AlphaCapsTreatment%
- \def\@AEscaction{\Encodedaesc}%
- \def\@OEthelaction{\Encodedoethel}%
- \def\@Angstromaction{\Encodedangstrom}%
- \def\@slashedOaction{\EncodedSlashedo}%
- \def\@barredLaction{\EncodedBarredl}%
- \else
- \def\@AEscaction{\EncodedAEsc}%
- \def\@OEthelaction{\EncodedOEthel}%
- \def\@Angstromaction{\EncodedAngstrom}%
- \def\@slashedOaction{\EncodedSlashedO}%
- \def\@barredLaction{\EncodedBarredL}%
- \fi
- \if 2\AlphaTreatment%
- \def\@aescaction{\EncodedAEsc}%
- \def\@oethelaction{\EncodedOEthel}%
- \def\@angstromaction{\EncodedAngstrom}%
- \def\@slashedoaction{\EncodedSlashedO}%
- \def\@barredlaction{\EncodedBarredL}%
- \else
- \def\@aescaction{\Encodedaesc}%
- \def\@oethelaction{\Encodedoethel}%
- \def\@angstromaction{\Encodedangstrom}%
- \def\@slashedoaction{\EncodedSlashedo}%
- \def\@barredlaction{\EncodedBarredl}%
- \fi
- \else
-% EncodingTreatment=v or q:
-% LEAVE SPACES ALONE; RESTORE ENCODED SPACES AND SYMBOLS
- \def\@blankaction{\BlankSpace}%
- \def\@dollaraction{\Dollar}%
- \def\@pipeaction{\Pipe}%
- \def\@uvariaction{\Uvari}%
- \def\@uvariiaction{\Uvarii}%
- \def\@uvariiiaction{\Uvariii}%
- \def\@carataction{\Carat}%
- \def\@circumflexaction{\Circumflex}%
- \def\@tildeaction{\Tilde}%
- \def\@umlautaction{\Umlaut}%
- \def\@graveaction{\Grave}%
- \def\@acuteaction{\Acute}%
- \def\@macronaction{\Macron}%
- \def\@overdotaction{\Overdot}%
- \def\@breveaction{\Breve}%
- \def\@caronaction{\Caron}%
- \def\@doubleacuteaction{\DoubleAcute}%
- \def\@cedillaaction{\Cedilla}%
- \def\@underdotaction{\Underdot}%
- \def\@archjoinaction{\ArchJoin}%
- \def\@lineunderaction{\LineUnder}%
- \def\@copyrightaction{\Copyright}%
- \def\@poundsaction{\Pounds}%
- \def\@leftbraceaction{\LeftBrace}%
- \def\@rightbraceaction{\RightBrace}%
- \def\@underscoreaction{\Underscore}%
- \def\@daggeraction{\Dagger}%
- \def\@doubledaggeraction{\DoubleDagger}%
- \def\@sectionsymbolaction{\SectionSymbol}%
- \def\@pilcrowaction{\Pilcrow}%
- \def\@eszettaction{\Eszett}%
- \def\@lbaction{\UnencodedLB}%
- \def\@rbaction{\UnencodedRB}%
- \if 2\AlphaCapsTreatment%
- \def\@AEscaction{\aesc}%
- \def\@OEthelaction{\oethel}%
- \def\@Angstromaction{\angstrom}%
- \def\@slashedOaction{\Slashedo}%
- \def\@barredLaction{\Barredl}%
- \else
- \def\@AEscaction{\AEsc}%
- \def\@OEthelaction{\OEthel}%
- \def\@Angstromaction{\Angstrom}%
- \def\@slashedOaction{\SlashedO}%
- \def\@barredLaction{\BarredL}%
- \fi
- \if 2\AlphaTreatment%
- \def\@aescaction{\AEsc}%
- \def\@oethelaction{\OEthel}%
- \def\@angstromaction{\Angstrom}%
- \def\@slashedoaction{\SlashedO}%
- \def\@barredlaction{\BarredL}%
- \else
- \def\@aescaction{\aesc}%
- \def\@oethelaction{\oethel}%
- \def\@angstromaction{\angstrom}%
- \def\@slashedoaction{\Slashedo}%
- \def\@barredlaction{\Barredl}%
- \fi
- \fi
-% REMOVE SPACES AND ENCODED SPACES?
- \if 0\BlankTreatment%
- \edef\@blankaction{}%
- \fi
-% REMOVE ENCODED SYMBOLS?
- \if 0\SymbolTreatment%
- \def\@dollaraction{}%
- \def\@pipeaction{}%
- \def\@carataction{}%
- \def\@circumflexaction{}%
- \def\@tildeaction{}%
- \def\@umlautaction{}%
- \def\@graveaction{}%
- \def\@acuteaction{}%
- \def\@macronaction{}%
- \def\@overdotaction{}%
- \def\@breveaction{}%
- \def\@caronaction{}%
- \def\@doubleacuteaction{}%
- \def\@cedillaaction{}%
- \def\@underdotaction{}%
- \def\@archjoinaction{}%
- \def\@lineunderaction{}%
- \def\@copyrightaction{}%
- \def\@poundsaction{}%
- \def\@leftbraceaction{}%
- \def\@rightbraceaction{}%
- \def\@underscoreaction{}%
- \def\@daggeraction{}%
- \def\@doubledaggeraction{}%
- \def\@sectionsymbolaction{}%
- \def\@pilcrowaction{}%
- \def\@lbaction{}%
- \def\@rbaction{}%
- \fi
-% REMOVE ENCODED ALPHACAPS?
- \if 0\AlphaCapsTreatment%
- \def\@AEscaction{}%
- \def\@OEthelaction{}%
- \def\@Angstromaction{}%
- \def\@slashedOaction{}%
- \def\@barredLaction{}%
- \fi
-% REMOVE ENCODED ALPHA?
- \if 0\AlphaTreatment%
- \def\@aescaction{}%
- \def\@oethelaction{}%
- \def\@angstromaction{}%
- \def\@slashedoaction{}%
- \def\@barredlaction{}%
- \def\@eszettaction{}%
- \fi
-}
-% \end{macrocode}
-% \end{macro}
-
-% \begin{macro}{\@forcecapson}
-% Force capitalization of strings processed by |\substring| for the
-% time being.
-% \begin{macrocode}
-\newcommand\@forcecapson{%
- \def\AlphaTreatment{2}%
- \def\AlphaCapsTreatment{1}%
-}
-% \end{macrocode}
-% \end{macro}
-
-% \begin{macro}{\@relaxcapson}
-% Restore prior treatments following a period of enforced capitalization.
-% \begin{macrocode}
-\newcommand\@relaxcapson{%
- \let\AlphaTreatment\SaveAlphaTreatment%
- \let\AlphaCapsTreatment\SaveAlphaCapsTreatment%
- \@defineactions%
-}
-% \end{macrocode}
-% \end{macro}
-
-% \begin{macro}{\@decodepointer}
-% As pertains to arguments 3 and 4 of |\substring|, this routine
-% implements use of the |$| character to mean END-OF-STRING,
-% and |$-{|\textit{integer}|}| for addressing relative to the
-% END-OF-STRING.
-% \begin{macrocode}
-\newcommand\@decodepointer[2][\value{@stringsize}]{%
- \isnextbyte[q]{$}{#2}%
- \if T\theresult%
- \isnextbyte[q]{-}{\expandafter\@gobble#2}%
- \if T\theresult%
- \setcounter{@@@letterindex}{#1}%
- \@gobblearg{#2}{2}%
- \addtocounter{@@@letterindex}{-\gobbledword}%
- \edef\@fromtoindex{\value{@@@letterindex}}%
- \else
- \edef\@fromtoindex{#1}%
- \fi
- \else
- \edef\@fromtoindex{#2}%
- \fi
-}
-% \end{macrocode}
-% \end{macro}
-
-% \begin{macro}{\@getstringlength}
-% Get's string length of |#1|, puts result in counter |#2|.
-% \begin{macrocode}
-\newcommand\@getstringlength[2]{%
- \edef\@@teststring{#1\endofstring}%
- \ifthenelse{\equal{\@@teststring}{\endofstring}}%
- {\setcounter{#2}{0}}%
- {%
- \setcounter{@gobblesize}{1}%
- \whiledo{\value{@gobblesize} < \@MAXSTRINGSIZE}{%
-%
- \@gobblearg{\@@teststring}{1}%
- \edef\@@teststring{\gobbledword}%
- \ifthenelse{\equal{\@@teststring}{\endofstring}}%
- {\setcounter{#2}{\value{@gobblesize}}%
- \setcounter{@gobblesize}{\@MAXSTRINGSIZE}}%
- {\addtocounter{@gobblesize}{1}}%
- }%
- }%
-}
-% \end{macrocode}
-% \end{macro}
-
-% \begin{macro}{\@gobblearg}
-% Gobble first |#2| characters from string |#1|. The
-% result is stored in |\gobbledword|. Two-byte escape sequences,
-% when encountered, count as a single gobble.
-% \begin{macrocode}
-\newcommand\@gobblearg[2]{%
- \setcounter{@letterindex}{0}%
- \setcounter{@gobbleindex}{#2}%
- \edef\gobbledword{#1}%
- \whiledo{\value{@letterindex} < \value{@gobbleindex}}{%
- \isnextbyte[q]{\EscapeChar}{\gobbledword}%
- \if T\theresult%
-% GOBBLE ESCAPE CHARACTER
- \edef\gobbledword{\@DiscardNextChar{\gobbledword}}%
- \fi
-% GOBBLE NORMAL CHARACTER OR ESCAPE CODE
- \edef\gobbledword{\@DiscardNextChar{\gobbledword}}%
- \addtocounter{@letterindex}{1}%
- }%
-}
-% \end{macrocode}
-% \end{macro}
-
-% \begin{macro}{\@DiscardNextChar}
-% Remove the next character from the argument string. Since
-% |\@gobble| skips spaces, the routine must first look for the case of
-% a leading blankspace. If none is found, proceed with a normal
-% |\@gobble|. Note: as per \LaTeX{} convention, |\@DiscardNextChar|
-% treats double/multi-softspaces as single space.
-% \begin{macrocode}
-\newcommand\@DiscardNextChar[1]{%
- \expandafter\if\expandafter\BlankSpace#1\else
- \expandafter\@gobble#1%
- \fi
-}
-% \end{macrocode}
-% \end{macro}
-
-% \begin{macro}{\@convertsymboltostring}
-% Routine for converting an encodable symbol (|#3|) into string (|#4|),
-% for every occurance in the given string |#2|.
-% \begin{macrocode}
-\newcommand\@convertsymboltostring[4][v]{%
- \def\@fromcode{#3}%
- \def\@tostring{#4}%
- \def\EncodingTreatment{e}%
- \substring[e]{#2}{1}{\@MAXSTRINGSIZE}%
- \@convertoff%
- \if e#1\else\substring[#1]{\thestring}{1}{\@MAXSTRINGSIZE}\fi%
-}
-% \end{macrocode}
-% \end{macro}
-
-% \begin{macro}{\@convertbytetostring}
-% Routine for converting an plain byte (|#3|) into string (|#4|),
-% for every occurance in the given string |#2|.
-% \begin{macrocode}
-\newcommand\@convertbytetostring[4][v]{%
- \def\@frombyte{#3}%
- \def\@tostring{#4}%
- \def\EncodingTreatment{e}%
- \substring[e]{#2}{1}{\@MAXSTRINGSIZE}%
- \@convertoff%
- \if e#1\else\substring[#1]{\thestring}{1}{\@MAXSTRINGSIZE}\fi%
-}
-% \end{macrocode}
-% \end{macro}
-
-% \begin{macro}{\@treatleadingspaces}
-% This routine will address the leading spaces of string |#2|. If
-% argument |#3| is an 'x' character, those leading spaces will be
-% deleted from the string. Otherwise, those leading spaces will be
-% rotated to the end of the string.
-% \begin{macrocode}
-\newcommand\@treatleadingspaces[3][v]{\+%
- \defaultTreatments%
- \edef\thestring{#2}%
- \@getstringlength{\thestring}{@stringsize}%
- \setcounter{@maxrotation}{\value{@stringsize}}%
- \setcounter{@letterindex}{0}%
- \whiledo{\value{@letterindex} < \value{@maxrotation}}{%
- \addtocounter{@letterindex}{1}%
- \isnextbyte[q]{\EncodedBlankSpace}{\thestring}%
- \if F\theresult\isnextbyte[q]{\BlankSpace}{\thestring}\fi%
- \if T\theresult%
- \isnextbyte[q]{#3}{x}%
- \if F\theresult%
-% NORMAL OR ENCODED BLANK... ROTATE IT
- \edef\thestring{\@rotate{\thestring}}%
- \else
-% NORMAL OR ENCODED BLANK... DELETE IT (IF 3rd ARG=X)
- \@gobblearg{\thestring}{1}%
- \edef\thestring{\gobbledword}%
- \fi
- \else
- \setcounter{@maxrotation}{\value{@letterindex}}%
- \fi
- }\?%
- \substring[#1]{\thestring}{1}{\@MAXSTRINGSIZE}%
-}
-% \end{macrocode}
-% \end{macro}
-
-% \begin{macro}{\@convertoff}
-% This routine is an initialization routine to
-% guarantee that there is no conversion of |\@frombyte| to |\@tostring|,
-% until further notice. It accomplishes this
-% by setting up such that subsequent |\if\@frombyte| and
-% |\if\@fromcode| clauses will automatically fail.
-% \begin{macrocode}
-\newcommand\@convertoff{\def\@frombyte{xy}\def\@tostring{}%
- \def\@fromcode{xy}}
-\@convertoff
-% \end{macrocode}
-% \end{macro}
-
-% \begin{macro}{\@rotate}
-% The following code is the engine of the string manipulation routine.
-% It is a tree of successive \LaTeX{} commands (each of which is
-% composed of an |\if...| cascade) which have the net
-% effect of rotating the first letter of the string into the last
-% position. Depending on modes set by |\@defineactions| and
-% |\defaultTreatments|, the leading character is either encoded,
-% decoded, or removed in the process.
-% Note: |\@rotate| loses track of double/multi-spaces, per \LaTeX{}
-% convention, unless encoded blanks (|~|) are used.
-% \begin{macrocode}
-\newcommand\@rotate[1]{%
-% CHECK BYTE CONVERSION TEST FIRST
- \if \@frombyte#1\@tostring\else
-% MUST CHECK FOR MULTI-BYTE CHARACTERS NEXT, SO THAT ENCODING CHARACTER
-% ISN'T MISTAKEN FOR A NORMAL CHARACTER LATER IN MACRO.
- \if 0\SymbolTreatment%
- \@removeExpandableSymbols{#1}%
- \else
- \@rotateExpandableSymbols{#1}%
- \fi
- \fi
-}
-
-\newcommand\@rotateExpandableSymbols[1]{%
-% INDIRECT (EXPANDABLE) SYMBOLS
- \expandafter\ifx\expandafter\&#1\&\else
- \expandafter\ifx\expandafter\%#1\%\else
- \expandafter\ifx\expandafter\##1\#\else
- \@rotateBlankSpaces{#1}%
- \fi
- \fi
- \fi
-}
-
-\newcommand\@removeExpandableSymbols[1]{%
-% INDIRECT (EXPANDABLE) SYMBOLS
- \expandafter\ifx\expandafter\&#1\else
- \expandafter\ifx\expandafter\%#1\else
- \expandafter\ifx\expandafter\##1\else
- \@rotateBlankSpaces{#1}%
- \fi
- \fi
- \fi
-}
-
-\newcommand\@rotateBlankSpaces[1]{%
- \expandafter\ifx\expandafter$#1$\else% <---RETAIN GOING INTO/FROM MATH MODE
-% THE FOLLOWING FINDS TILDES, BUT MUST COME AFTER EXPANDABLE SYMBOL
-% SEARCH, OR ELSE IT FINDS THEM TOO, BY MISTAKE.
- \if \EncodedBlankSpace#1\@blankaction\else% <--- FINDS REENCODED TILDE
-% THE FOLLOWING SHOULD FIND TILDES, BUT DOESN'T... THUS, COMMENTED OUT.
-% \expandafter\ifx\expandafter\EncodedBlankSpace#1\@blankaction\else
- \if \BlankSpace#1\@blankaction\else
- \if 2\AlphaTreatment%
- \@chcaseAlpha{#1}%
- \else
- \if 0\AlphaTreatment%
- \@removeAlpha{#1}%
- \else
- \@rotateAlpha{#1}%
- \fi
- \fi
- \fi
-% \fi
- \fi
- \fi
-}
-
-\newcommand\@rotateAlpha[1]{%
-% LOWERCASE
- \if a#1a\else
- \if b#1b\else
- \if c#1c\else
- \if d#1d\else
- \if e#1e\else
- \if f#1f\else
- \if g#1g\else
- \if h#1h\else
- \if i#1i\else
- \if j#1j\else
- \if k#1k\else
- \if l#1l\else
- \if m#1m\else
- \if n#1n\else
- \if o#1o\else
- \if p#1p\else
- \if q#1q\else
- \if r#1r\else
- \if s#1s\else
- \if t#1t\else
- \if u#1u\else
- \if v#1v\else
- \if w#1w\else
- \if x#1x\else
- \if y#1y\else
- \if z#1z\else
- \if 2\AlphaCapsTreatment%
- \@chcaseAlphaCaps{#1}%
- \else
- \if 0\AlphaCapsTreatment%
- \@removeAlphaCaps{#1}%
- \else
- \@rotateAlphaCaps{#1}%
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
-}
-
-\newcommand\@removeAlpha[1]{%
-% LOWERCASE
- \if a#1\else
- \if b#1\else
- \if c#1\else
- \if d#1\else
- \if e#1\else
- \if f#1\else
- \if g#1\else
- \if h#1\else
- \if i#1\else
- \if j#1\else
- \if k#1\else
- \if l#1\else
- \if m#1\else
- \if n#1\else
- \if o#1\else
- \if p#1\else
- \if q#1\else
- \if r#1\else
- \if s#1\else
- \if t#1\else
- \if u#1\else
- \if v#1\else
- \if w#1\else
- \if x#1\else
- \if y#1\else
- \if z#1\else
- \if 2\AlphaCapsTreatment%
- \@chcaseAlphaCaps{#1}%
- \else
- \if 0\AlphaCapsTreatment%
- \@removeAlphaCaps{#1}%
- \else
- \@rotateAlphaCaps{#1}%
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
-}
-
-\newcommand\@chcaseAlpha[1]{%
-% LOWERCASE TO UPPERCASE
- \if a#1A\else
- \if b#1B\else
- \if c#1C\else
- \if d#1D\else
- \if e#1E\else
- \if f#1F\else
- \if g#1G\else
- \if h#1H\else
- \if i#1I\else
- \if j#1J\else
- \if k#1K\else
- \if l#1L\else
- \if m#1M\else
- \if n#1N\else
- \if o#1O\else
- \if p#1P\else
- \if q#1Q\else
- \if r#1R\else
- \if s#1S\else
- \if t#1T\else
- \if u#1U\else
- \if v#1V\else
- \if w#1W\else
- \if x#1X\else
- \if y#1Y\else
- \if z#1Z\else
- \if 2\AlphaCapsTreatment%
- \@chcaseAlphaCaps{#1}%
- \else
- \if 0\AlphaCapsTreatment%
- \@removeAlphaCaps{#1}%
- \else
- \@rotateAlphaCaps{#1}%
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
-}
-
-\newcommand\@rotateAlphaCaps[1]{%
-% UPPERCASE
- \if A#1A\else
- \if B#1B\else
- \if C#1C\else
- \if D#1D\else
- \if E#1E\else
- \if F#1F\else
- \if G#1G\else
- \if H#1H\else
- \if I#1I\else
- \if J#1J\else
- \if K#1K\else
- \if L#1L\else
- \if M#1M\else
- \if N#1N\else
- \if O#1O\else
- \if P#1P\else
- \if Q#1Q\else
- \if R#1R\else
- \if S#1S\else
- \if T#1T\else
- \if U#1U\else
- \if V#1V\else
- \if W#1W\else
- \if X#1X\else
- \if Y#1Y\else
- \if Z#1Z\else
- \if 0\NumeralTreatment%
- \@removeNumerals{#1}%
- \else
- \@rotateNumerals{#1}%
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
-}
-
-\newcommand\@removeAlphaCaps[1]{%
-% UPPERCASE
- \if A#1\else
- \if B#1\else
- \if C#1\else
- \if D#1\else
- \if E#1\else
- \if F#1\else
- \if G#1\else
- \if H#1\else
- \if I#1\else
- \if J#1\else
- \if K#1\else
- \if L#1\else
- \if M#1\else
- \if N#1\else
- \if O#1\else
- \if P#1\else
- \if Q#1\else
- \if R#1\else
- \if S#1\else
- \if T#1\else
- \if U#1\else
- \if V#1\else
- \if W#1\else
- \if X#1\else
- \if Y#1\else
- \if Z#1\else
- \if 0\NumeralTreatment%
- \@removeNumerals{#1}%
- \else
- \@rotateNumerals{#1}%
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
-}
-
-\newcommand\@chcaseAlphaCaps[1]{%
-% UPPERCASE TO LOWERCASE
- \if A#1a\else
- \if B#1b\else
- \if C#1c\else
- \if D#1d\else
- \if E#1e\else
- \if F#1f\else
- \if G#1g\else
- \if H#1h\else
- \if I#1i\else
- \if J#1j\else
- \if K#1k\else
- \if L#1l\else
- \if M#1m\else
- \if N#1n\else
- \if O#1o\else
- \if P#1p\else
- \if Q#1q\else
- \if R#1r\else
- \if S#1s\else
- \if T#1t\else
- \if U#1u\else
- \if V#1v\else
- \if W#1w\else
- \if X#1x\else
- \if Y#1y\else
- \if Z#1z\else
- \if 0\NumeralTreatment%
- \@removeNumerals{#1}%
- \else
- \@rotateNumerals{#1}%
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
-}
-
-\newcommand\@rotateNumerals[1]{%
-% NUMERALS
- \if 1#11\else
- \if 2#12\else
- \if 3#13\else
- \if 4#14\else
- \if 5#15\else
- \if 6#16\else
- \if 7#17\else
- \if 8#18\else
- \if 9#19\else
- \if 0#10\else
- \if 0\PunctuationTreatment%
- \@removePunctuation{#1}%
- \else
- \@rotatePunctuation{#1}%
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
-}
-
-\newcommand\@removeNumerals[1]{%
-% NUMERALS
- \if 1#1\else
- \if 2#1\else
- \if 3#1\else
- \if 4#1\else
- \if 5#1\else
- \if 6#1\else
- \if 7#1\else
- \if 8#1\else
- \if 9#1\else
- \if 0#1\else
- \if 0\PunctuationTreatment%
- \@removePunctuation{#1}%
- \else
- \@rotatePunctuation{#1}%
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
-}
-
-\newcommand\@rotatePunctuation[1]{%
-% PUNCTUATION
- \if ;#1;\else
- \if :#1:\else
- \if '#1'\else
- \if "#1"\else
- \if ,#1,\else
- \if .#1.\else
- \if ?#1?\else
- \if `#1`\else
- \if !#1!\else
- \if 0\SymbolTreatment%
- \@removeDirectSymbols{#1}%
- \else
- \@rotateDirectSymbols{#1}%
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
-}
-
-\newcommand\@removePunctuation[1]{%
-% PUNCTUATION
- \if ;#1\else
- \if :#1\else
- \if '#1\else
- \if "#1\else
- \if ,#1\else
- \if .#1\else
- \if ?#1\else
- \if `#1\else
- \if !#1\else
- \if 0\SymbolTreatment%
- \@removeDirectSymbols{#1}%
- \else
- \@rotateDirectSymbols{#1}%
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
-}
-
-\newcommand\@rotateDirectSymbols[1]{%
-% DIRECT SYMBOLS
- \if /#1/\else
- \if @#1@\else
- \if *#1*\else
- \if (#1(\else
- \if )#1)\else
- \if -#1-\else
- \if _#1_\else
- \if =#1=\else
- \if +#1+\else
- \if [#1[\else
- \if ]#1]\else
- \if ^#1^\else% <--FOR SUPERSCRIPTS, NOT \^
- \if <#1<\else
- \if >#1>\else
- \if |#1|\else
- \if &#1&\else
- \@rotateUndecipherable{#1}%
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
-}
-
-\newcommand\@removeDirectSymbols[1]{%
-% DIRECT SYMBOLS
- \if /#1\else
- \if @#1\else
- \if *#1\else
- \if (#1\else
- \if )#1\else
- \if -#1\else
- \if _#1\else
- \if =#1\else
- \if +#1\else
- \if [#1\else
- \if ]#1\else
- \if ^#1\else% <--FOR SUPERSCRIPTS, NOT \^
- \if <#1\else
- \if >#1\else
- \if |#1\else
- \if &#1\else
- \@rotateUndecipherable{#1}%
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
-}
-
-\newcommand\@rotateUndecipherable[1]{%
-% REPLACE UNDECIPHERABLE SYMBOL WITH A TOKEN CHARACTER (DEFAULT .)
- \expandafter\@gobble#1\undecipherable%
-% DONE... CLOSE UP SHOP
-}
-% \end{macrocode}
-% \end{macro}
-
-% \begin{macrocode}
-\catcode`\&=4
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%</package>
-% \end{macrocode}
-%
-% \Finale
-\endinput
-%
-% End of file `stringstrings.dtx'.
+% \iffalse
+%<package>\ProvidesPackage{stringstrings}
+%<package>[2020/12/08 v1.24
+%<package> Extensive array of string manipulation routines for
+%<package> cosmetic and programming application]
+%<package>\NeedsTeXFormat{LaTeX2e}
+%<*driver>
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3c or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+%
+% This work has the LPPL maintenance status `maintained'.
+%
+% The Current Maintainer of this work is Steven B. Segletes.
+%
+% v1.00 -Initial Release
+% v1.01 -Included support for & character, though it loses catcode 4
+% status
+% v1.02 -Bug fix. Needed some % chars in \convertchar to avoid extra spaces
+% v1.03 -Documentation fix; notably removed 's' from \narg in \getargs
+% v1.04 -Removed \rotate command, as it conflicts with environment in
+% \usepackage{rotating}
+% v1.10 -Fixed bug in convertword by adding @@@stringsize definition to
+% \whereisword
+% -Added suite of routines to support \capitalizetitle functionality
+% v1.20 -Added ability to encode/decode arbitrary tokens
+% v1.21 -Added %, removing extra space (bug) from \whereisword
+% v1.22 -Added %, removing extra space (bug) from \getargs
+% v1.23 -Changed {~} to {\ } in \retokenizechar
+% -Forced all stringtest commands to function outside of math mode
+% which will give correct result, when invoked within math mode.
+% V1.24 -Added %, removing extra space (bug) from \testmatchingchar
+\documentclass{ltxdoc}
+\usepackage{stringstrings}
+\DisableCrossrefs
+\CodelineNumbered
+% DEFINE SOME CAMMANDS THAT ARE EASIER HERE THAN IN DocInput ENVIRONMENT
+\newcommand\stringstrings{\textsf{stringstrings}~}
+\newcommand\coolstr{\textsf{coolstr}~}
+% ITALICIZED i.e.,
+\newcommand{\ie}{\textit{i.e.},~}%
+% ITALICIZED e.g.,
+\newcommand{\eg}{\textit{e.g.},~}%
+% ITALICIZED etc.
+\newcommand{\etc}{\textit{etc}.}%
+\def\modetablelayout{|l|c|c|c|}
+\def\mylayout{@{}c|c|l@{}}
+\stringencode{\|}
+\stringdecode[q]{\thestring}
+\edef\mypipe{\thestring}
+\stringencode{\carat}
+\stringdecode[q]{\thestring}
+\edef\mycarat{\thestring}
+
+\GetFileInfo{stringstrings.sty}
+\begin{document}
+ \title{The \stringstrings Package\\
+ \rule{0em}{0.7em}\small\fileinfo}
+ \author{Steven B. Segletes\\
+ steven.b.segletes.civ@mail.mil}
+ \date{\filedate\\
+ \fileversion}
+ \maketitle
+ \DocInput{stringstrings.dtx}
+\end{document}
+%</driver>
+%\fi
+% \parskip 1ex
+% \begin{abstract}
+% The \stringstrings package provides a large and sundry array of routines
+% for the manipulation of strings. The routines are developed not only
+% for cosmetic application, such as the changing of letter
+% cases, selective removal of character classes, and string
+% substitution,
+% but also for programming application, such as character look-ahead
+% applications, argument parsing, |\if|-tests for various string
+% conditions, etc. A key tenet employed during the
+% development of this package (unlike, for comparison, the |\uppercase|
+% and |\lowercase| routines) was to have resultant strings be
+% ``expanded'' (\ie the product of an |\edef|), so that the
+% \stringstrings routines could be strung together sequentially and
+% nested (after a fashion) to achieve very complex manipulations.
+%
+% \end{abstract}
+%
+% \vspace{-.55em}
+% \tableofcontents\rule[.2em]{4.5in}{.3mm}\vspace{-1.5em}
+%
+% \section {Motivation}
+%
+% There were two seminal moments that brought about my motivation to
+% develop this package. The first was the realization of the oft
+% cited and infamous \LaTeX{} limitation concerning the inability to
+% nest letter-case changes with \LaTeX{}'s intrinsic |\uppercase| and
+% |\lowercase| routines. The second,
+% though not diminishing its utility in many useful applications, was
+% the inherent limitations of the \coolstr package, which is otherwise
+% a useful tool for extracting substrings and measuring string lengths.
+%
+% The former is well documented and need not be delved into in great
+% detail. Basically, as it was explained to me, |\uppercase| and
+% |\lowercase| are expanded by \LaTeX{} at the last possible moment, and
+% thus attempts to capture their result for subsequent use are doomed to
+% failure. One is forced to adopt the left-to-right (rather than
+% nested) approach to case changes.
+%
+% In the case of the \coolstr package, I again want to express
+% my admiration for the utility of this package. I briefly considered
+% building the \stringstrings package around it, but it proved
+% unworkable, because of some intrinsic limitations.
+% First, \coolstr operates on
+% strings, not tokens, and so in order to fool it into working on
+% tokenized inputs, one must use the cumbersome nomenclature of
+%
+% |\expandafter\substr\expandafter{\TokenizedString}{...}{...}|
+% \vspace{1ex}\\%
+% in order to, for example grab a substring of |\TokenizedString|. One
+% may |\def| the result of this subroutine, and use it elsewhere in an
+% unaltered state. However, one may not expand, via |\edef|, the
+% result of |\substr| in order to use it as input to a subsequent string
+% manipulation. And thus, the desire to engage in successive string
+% manipulations of different natures (\eg capitalization of leading
+% characters, extraction of words, reversal of character sequence,
+% removal of character classes, etc., etc.) are not achievable in the
+% context of \textsf{coolstr}.
+%
+% It was this state of affairs that brought me to hunger for routines
+% that could thoroughly manipulate strings, and yet produce their result
+% ``in the clear'' (\ie in an untokenized form) which could be used as
+% input for the next manipulation. It turns out the heart of the
+% \stringstrings package which achieves this goal is based on the simple
+% (if much maligned) |\if| construct of \LaTeX{}, by using successive
+% iterations of the following construct:
+%
+% |\if <|\textit{test char.}|><|\textit{string}|><|\textit{manipulated
+% test char.}|>\else ...\fi|
+% \vspace{1ex}\\%
+% in which a character at the begining of a string is tested. If a
+% match is found,
+% the manipulated test character is replaced at the end of the string,
+% while the original test character is lopped off from the beginning of
+% the string. A false result is used to proceed to a different test
+% character. In this manner, the string may be rotated through,
+% character by character, performing the desired manipulations. And,
+% most importantly, the product of this operation may be placed into an
+% |\edef|.
+%
+% It turns out there was one glitch to this process (which has been
+% successfully remedied in the \stringstrings package). And that is that
+% there are several tokenized \LaTeX{} symbols (\eg |\$|, |\{|, |\}|,
+% |\AE|, |\oe|, etc.) which expand to more than a single byte. If
+% I was more savvy on \LaTeX{} constructs, I would probably have known
+% how to handle this better. But my solution was to develop my own
+% encoding scheme wherein these problematic characters were re-encoded
+% in my intermediate calculations as a 2-byte (escape character-escape code)
+% combination, and only converted back into \LaTeX{} symbols at the last
+% moment, as the finalized strings were handed back to the user.
+%
+% There are also several tokens, like |\dag|, |\ddag|, |\P|, |\d|, |\t|,
+% |\b|, and |\copyright| which
+% can not be put into an |\edef| construct. The solution developed for
+% strings containing these such characters was to convert the encoded
+% string not into an expanded |\edef| construct, but rather back into a
+% tokenized form amenable to |\def|. The |\retokenize| command
+% accomplishes this task and several others.
+%
+% There was also one glitch that I have not yet been able to resolve
+% to my full satisfaction, though I have provided a workaround.
+% And that is the occurance of \LaTeX{} grouping characters, |{| and
+% |}|, that might typically occur in math mode. The problem is that the
+% character-rotate technique that is the core of \stringstrings breaks
+% when rotating these group characters. Why?? Because a string
+% comprised of |...{...}...|, during the rotation process, will
+% eventually become |...}......{| during an intermediate stage of
+% character rotation. This
+% latter string breaks \LaTeX{} because it is not a properly constructed
+% grouping, even if subsequent rotations would intend to bring it back
+% into a proper construction.
+%
+% And so, while \stringstrings can handle certain math-mode
+% constructs (\eg |$|, |^|, and |_|), it is unable to {\it directly}
+% handle groupings that are brought about by the use of curly braces.
+% Note that |\{| and |\}| are handled just fine, but not |{| and |}|.
+% As a result of this limitation regarding the use of grouping braces
+% within strings, \stringstrings support for various math symbols
+% remains quite limited.
+%
+% While it is also common to use curly braces to
+% delimit the arguments of diacritcal marks in words like
+% |m\"{u}de| \etc, the same result can be achieved without the
+% use of braces as |m\"ude|, with the proper result obtained: m\"ude.
+% For diacritical marks that have an alphabetic token such as the breve,
+% given by |\u|, the curly braces can also be omitted, with the only
+% change being a space required after the |\u| to delimit the token.
+% Thus, |c\u at| becomes c\u at. Therefore, when manipulating strings
+% containing diacritical marks, it is best to formulate them, if
+% possible, without the use of curly braces.
+%
+% The workaround fix I have developed, to provide grouping functions
+% within \stringstrings arguments, involves the use of newly defined
+% tokens |\LB| and |\RB| (to be used in lieu of |{| and |}|),
+% along with a command |\retokenize|. This
+% workaround will be described subsequently, in the Disclaimers section.
+%
+% \section{Philosophy of Operation}
+%
+% There are several classes of commands that have been developed as part
+% of the \stringstrings package. In addition to {\bf Configuration
+% Commands}, which set parameters for subsequent string operations,
+% there are the following command classes:
+% \begin{itemize}
+% \item {\bf Commands to Manipulate Strings} -- these commands take an
+% input string or token and perform a specific manipulation on the
+% string;
+% \item {\bf Commands to Extract String Information} -- these commands
+% take an input string or token, and ascertain a particular
+% characteristic of the string; and
+% \item {\bf Commands to Test Strings} -- these commands take an input
+% string or token and test for a particular alphanumeric condition.
+% \end{itemize}
+% Of course, there are also {\bf Support Commands} which are low-level
+% routines which provide functionality to the package, which are
+% generally not accessible to the user.
+%
+% To support the intended philosophy that the user may achieve a complex
+% string manipulation though a series of simpler manipulations (which
+% is otherwise known as nesting), a mechanism had to be developed. True
+% command nesting of the form |\commandA{\commandB{\commandC{string}}}|
+% is {\bf not} supported by the \stringstrings package, since many of
+% the manipulation commands make use of (and would thus inadvertantly
+% overwrite) the same sets of variables used by other routines.
+% Furthermore, there is that 'ol left-to-right philosophy of \LaTeX{} to
+% contend with.
+%
+% Instead, for the case of commands that manipulate strings, the expanded
+% (\ie |\edef|'ed) result of the manipulation is placed into a string
+% called |\thestring|\DescribeMacro{\thestring}. Then, |\thestring|
+% may either be directly used
+% as the input to a subsequent operation, or |\edef|'ed into another
+% variable to save it for future use.
+%
+% String manipulation commands use an optional first argument to specify
+% what to do with the manipulated string (in addition to putting it in
+% |\thestring|). Most string manipulation
+% commands default to verbose mode |[v]|\DescribeMacro{[v]}, and print
+% out their result immediately on the assumption that a simple string
+% manipulation is, many times, all that is required. If the user wishes
+% to use the manipulated result as is, but needs to use it later in the
+% document, a quiet mode |[q]| \DescribeMacro{[q]} is provided which
+% suppresses the immediate output of |\thestring|.
+%
+% In the absence of symbol tokens (\eg |\$|, |\&|, |\oe|, |\^|, \etc),
+% the verbose and quiet modes would prove sufficient. However, when a
+% tokenized symbol is |\edef|'ed, the token is expanded to the actual
+% symbolic representation of the character. If this expanded symbol is
+% used as part of an input string to a
+% subsequent \stringstrings manipulation
+% routine, it gets confused, because the means to detect the token are
+% characteristically different than the means to detect the expanded
+% symbol. Thus, if one wishes to use |\thestring| as an input to a
+% subsequent manipulation routine, \stringstrings provides an encoded
+% mode |[e]| \DescribeMacro{[e]} which places an encoded version of the
+% resulting manipulation into
+% |\thestring|. The encoded mode is also a quiet mode, since it leaves
+% |\thestring| in a visually unappealing state that is intended for
+% subsequent manipulation.
+%
+% The encoded mode is not a \LaTeX{} standard,
+% but was developed for this application. And therefore, if the result
+% of a \stringstrings manipulation is needed as input for a routine
+% outside of the \stringstrings package, the encoded mode will be of no
+% use. For this reason (and others),
+% the |\retokenize| \DescribeMacro{\retokenize}
+% command is provided. Its use is one of only three times that a
+% \stringstrings command
+% returns a tokenized |\def|'ed string in |\thestring|, rather than an
+% expanded, |\edef|'ed string. And in the other two cases, both
+% call upon |\retokenize|.
+%
+% In addition to providing tokenized strings that can be passed to other
+% \LaTeX{} packages, |\retokenize| can also remedy \stringstrings problems
+% associated with inadequate character encodings (OT1) and the use of
+% grouping characters |{| and |}| within \stringstrings arguments. This
+% issue is discussed more fully in the Disclaimers section, and in the
+% actual |\retokenize| command description.
+%
+% Therefore, for complex multistage string manipulations, the
+% recommended procedure
+% is to perform each stage of the manipulation in encoded |[e]| mode,
+% passing along |\thestring| to each subsequent stage of the
+% manipulation, until the very last manipulation, which should be,
+% at the last, performed in verbose |[v]| or quiet |[q]| modes. If
+% the resulting manipulation is to be passed to a command outside of the
+% \stringstrings package for further manipulation (or if the string
+% contains characters which cannot be placed into an |\edef|),
+% |\thestring| may
+% need to be |\retokenize|'ed. If concatenations of two (or more) different
+% manipulations are to be used as input to a third manipulation,
+% |\thestring| from the first manipulation will need to be immediately
+% |\edef|'ed into a different variable, since |\thestring| will be
+% overwritten by the second manipulation (see Table~\ref{tbl:modes}
+% for summary).
+% \begin{table}[h]
+% \begin{center}
+% \caption{\bf Execution Modes of \stringstrings Commands
+% \label{tbl:modes}}\vspace{0.5em}
+% \small
+% \begin{tabular}\modetablelayout
+% \hline
+% Mode & Coding & Use when result is & |\thestring| is\\
+% \hline
+% \hline
+% |[v]| verbose & decoded or retokenized & final & echoed \\
+% |[q]| quiet & decoded or retokenized & final & not echoed \\
+% |[e]| encoded & encoded & intermediate & not echoed \\
+% \hline
+% \end{tabular}
+% \end{center}
+% \end{table}
+%
+% Moving on to commands that extract string information, this class of
+% commands (unless otherwise noted) output their result into a token
+% which is given the name |\theresult|\DescribeMacro{\theresult}.
+% This token does not contain a manipulated form of the string, but
+% rather a piece of information about the string, such as ``how many
+% characters are in the string?'', ``how many words are in the string?'',
+% ``how many letter `e's are in the string?'', \etc
+%
+% The final class of \stringstrings commands are the string-test
+% commands. While some of this class of commands also store their
+% test result in |\theresult|, most of these commands use the
+% |\test|{\it condition}|{|{\it string}|}| |\if|{\it
+% condition} constructs (see {\sf ifthen} package) to answer true/false
+% questions like ``is the string composed entirely of lowercase
+% characters?'', ``is the string's first letter capitalized?'' \etc
+%
+% \section {Configuration Commands}
+%
+% \noindent%
+% |\Treatments{|{\it U-mode}|}{|{\it l-mode}|}{|{\it p-mode}|}{|{\it%
+% n-mode}|}{|{\it s-mode}|}{|{\it b-mode}|}|\\
+% |\defaultTreatments|\\
+% |\encodetoken[|{\it index}|]{|{\it token}|}|\\
+% |\decodetoken[|{\it index}|]{|{\it token}|}|\\
+% |\+|\\
+% |\?|
+%
+% The command |\Treatments| \DescribeMacro{\Treatments}
+% is used to define how different classes of
+% characters are to be treated by the command |\substring|, which is the
+% brains of the \stringstrings package. As will be explained in the
+% next section, most string manipulation routines end up calling
+% |\substring|, the difference between them being a matter of how these
+% character treatments are set prior to the call.
+% Because most string manipulation
+% commands will set the treatments as necessary to perform their given
+% task, and reset them to the default upon conclusion, one should set
+% the |\Treatments| immediately prior to the call upon |\substring|.
+%
+% |\Treatments| has six arguments, that define the mode of treatment
+% for the six classes of characters that \stringstrings has designated.
+% All modes are one-digit integers. They are described below:
+% \begin{itemize}
+% \item{\it U-mode---} This mode defines the
+% treatment for the upper-case characters (A--Z, \OE, \AE, \AA, \O, and
+% \L).
+% A mode of 0 tells |\substring| to remove upper-case characters, a
+% mode of 1 indicates to leave upper-case characters alone, and
+% a mode of 2 indicates to change the case of upper-case
+% characters to lower case.
+%
+% \item {\it l-mode---} This mode defines the
+% treatment for the lower-case characters (a--z, \oe, \ae, \aa, \o, \l,
+% and \ss).
+% A mode of 0 tells |\substring| to remove lower-case characters, a
+% mode of 1 indicates to leave lower-case characters alone, and
+% a mode of 2 indicates to change the case of lower-case
+% characters to upper case. In the case of the eszett character (\ss),
+% there is no uppercase equivalent, and so an {\it l-mode} of 2 will
+% leave the eszett unchanged.
+%
+% \item {\it p-mode---} This mode defines the
+% treatment for the punctuation characters. \stringstrings
+% defines the punctuation characters as ; : ' " , . ? ` and ! A mode of
+% 0 tells |\substring| to remove punctuation characters, while a mode of
+% 1 indicates to leave punctuation characters as is.
+%
+% \item {\it n-mode---} This mode defines the
+% treatment for the numerals (0--9). A mode of
+% 0 tells |\substring| to remove numerals, while a mode of
+% 1 indicates to leave numerals as is.
+%
+% \item {\it s-mode---} This mode defines the
+% treatment for the symbols. \stringstrings
+% defines symbols as the following characters and diacritical marks:
+% \substring{/ * ( ) - = + [ ] $<$ $>$}{1}{$} \& |\& \% \# \{ \} \_ \$|
+% \dag~\ddag~\S~\P~\L~\pounds~\copyright~\v x \^x \~x \"x \`x \'x \=x
+% \.x \u x \v x
+% \H x \c x \d x \t{xx} \b x as well as |@|, math and text carats,
+% and the pipe symbol. A mode of
+% 0 tells |\substring| to remove symbols, while a mode of
+% 1 indicates to leave symbols as is. Note that the \$ symbol, when
+% used for entering and exiting math mode, is left intact, regardless of
+% {\it s-mode}.
+%
+% % \item {\it b-mode---} This mode defines the
+% treatment for blankspaces. A mode of
+% 0 tells |\substring| to remove blankspaces, while a mode of
+% 1 indicates to leave blankspaces as is. The treatment apples to both
+% soft (~) as well as hard (|~|) spaces.
+% \end{itemize}
+%
+% The command |\defaultTreatments| \DescribeMacro{\defaultTreatments}
+% resets all treatment modes to their default settings, which are to
+% leave individual characters unaltered by a string manipulation.
+%
+% The commands |\encodetoken| \DescribeMacro{\encodetoken} and
+% |\decodetoken| \DescribeMacro{\decodetoken} have been introduced in
+% \stringstrings v1.20. Prior to this version, the ability of
+% \stringstrings to handle a particular token was dependent on whether
+% provisions for encoding that token had been explicitly hardwired into
+% the \stringstrings package. A large number of alphabetic and
+% diacritical marks had reserved encodings set aside in \stringstrings
+% for their treatment (see next paragraph or Table 2 for their enumeration).
+% However, requests would invariable come in for treating yet another
+% token, which required a new \stringstrings release for each revision.
+% The command |\encodetoken| allows the user to specify an arbitrary
+% token, to be assigned to the reserved encoding slot associated with the
+% index (permissible indices are in the range 1--3, 1 being the default).
+% Once assigned an encoding slot, a token may be successfully manipulated in
+% \stringstrings routines. Once \stringstrings manipulation is
+% complete, the token must undergo a |\decodetoken| operation in order
+% for that token to be reset to a normal \LaTeX{} token again (lest it
+% display in its encoded \stringstrings form).
+%
+% The commands |\+| and |\?| \DescribeMacro{\+}\DescribeMacro{\?}
+% are a pair that work in tandem to turn on \stringstrings encoding and
+% turn off \stringstrings encoding, respectively. Generally, the user
+% will not need these commands unless he is writing his own routines to
+% take advantage of the \stringstrings library. After |\+| is called,
+% tokens which would otherwise expand to multi-byte sequences are
+% instead encoded according to the \stringstrings methodology. The
+% affected tokens
+% include
+% |\$ \^ \" \{ \} \_ \dag \ddag \P \S \ss \AA \aa \O \o \AE \ae|
+% |\OE|, |\oe|, |\~|, |\`|, |\'|, |\=|, |\.|, |\u|, |\v|, |\H|, |\c|,
+% |\d|, |\t|, |\b|, |\copyright|, |\pounds|, |\L|, |\l|, and |\ss|. In
+% addition, pipes, text carats, and hard spaces (|~|) are encoded
+% as well. The command |\?| restores the
+% standard \LaTeX{} encoding for these tokens.
+%
+% \section {Commands to Manipulate Strings}
+%
+% These commands take an
+% input string or token and perform a specific manipulation on the
+% string. They include:
+%
+% \noindent|\substring[|{\it mode}|]{|{\it
+% string}|}{|{\it min}|}{|{\it max}|}|\\
+% |\caseupper[|{\it mode}|]{|{\it string}|}|\\
+% |\caselower[|{\it mode}|]{|{\it string}|}|\\
+% |\solelyuppercase[|{\it mode}|]{|{\it string}|}|\\
+% |\solelylowercase[|{\it mode}|]{|{\it string}|}|\\
+% |\changecase[|{\it mode}|]{|{\it string}|}|\\
+% |\noblanks[|{\it mode}|]{|{\it string}|}|\\
+% |\nosymbolsnumerals[|{\it mode}|]{|{\it string}|}|\\
+% |\alphabetic[|{\it mode}|]{|{\it string}|}|\\
+% |\capitalize[|{\it mode}|]{|{\it string}|}|\\
+% |\capitalizewords[|{\it mode}|]{|{\it string}|}|\\
+% |\capitalizetitle[|{\it mode}|]{|{\it string}|}|\\
+% |\addlcword{|{\it word}|}|\\
+% |\addlcwords{|{\it word1 word2 word3 \ldots}|}|\\
+% |\resetlcwords|\\
+% |\reversestring[|{\it mode}|]{|{\it string}|}|\\
+% |\convertchar[|{\it mode}|]{|{\it
+% string}|}{|{\it from-char}|}{|{\it to-string}|}|\\
+% |\convertword[|{\it mode}|]{|{\it
+% string}|}{|{\it from-string}|}{|{\it to-string}|}|\\
+% |\rotateword[|{\it mode}|]{|{\it string}|}|\\
+% |\removeword[|{\it mode}|]{|{\it string}|}|\\
+% |\getnextword[|{\it mode}|]{|{\it string}|}|\\
+% |\getaword[|{\it mode}|]{|{\it string}|}{|{\it n}|}|\\
+% |\rotateleadingspaces[|{\it mode}|]{|{\it string}|}|\\
+% |\removeleadingspaces[|{\it mode}|]{|{\it string}|}|\\
+% |\stringencode[|{\it mode}|]{|{\it string}|}|\\
+% |\stringdecode[|{\it mode}|]{|{\it string}|}|\\
+% |\gobblechar[|{\it mode}|]{|{\it string}|}|\\
+% |\gobblechars[|{\it mode}|]{|{\it string}|}{|{\it n}|}|\\
+% |\retokenize[|{\it mode}|]{|{\it string}|}|
+%
+% \noindent
+% Unless otherwise noted, the {\it mode} may take one of three values:
+% |[v]| for verbose mode (generally, the default), |[q]| for quiet mode,
+% and |[e]| for encoded mode. In all cases, the result of
+% the operation is stored in |\thestring|. In verbose mode, it is also
+% output immediately (and may be captured by an |\edef|). In quiet mode,
+% no string is output, though the result still resides in |\thestring|.
+% Encoded mode is also a quiet mode. However, the encoded mode saves
+% the string with its \stringstrings encodings. Encoded mode indicates
+% that the result is an intermediate result which will be subsequently
+% used as input to another \stringstrings manipulation.
+%
+% The command |\substring| \DescribeMacro{\substring} is the brains of
+% the \stringstrings package, in that most of the commands in this
+% section call upon |\substring| in one form or another. Nominally, the
+% routine returns a substring of {\it string} between the characters
+% defined by the integers {\it min} and {\it max}, inclusive.
+% However, the returned substring is
+% affected by the designated |\Treatments| which have been defined
+% for various classes of characters. Additionally, a shorthand of \$
+% may be used in {\it min} and {\it max} to define END-OF-STRING, and
+% the shorthand \$--{\it integer} may be used to define an offset of
+% {\it integer} relative to the END-OF-STRING.
+%
+% Regardless of how many bytes a \LaTeX{} token otherwise expands
+% to, or how many characters are in the token name, each \LaTeX{}
+% symbol token
+% counts as a single character for the purposes of defining the
+% substring limits, {\it min} and {\it max}.
+%
+% While the combination of |\Treatments| and |\substring| are sufficient
+% to achieve a wide array of character manipulations, many of those
+% possibilities are useful enough that separate commands have been
+% created to describe them, for convenience. Several of the commands
+% that follow fall into this category.
+%
+% The command |\caseupper| \DescribeMacro{\caseupper} takes the input
+% string or token, and converts all lowercase characters in the string
+% to uppercase. All other character classes are left untouched.
+% Default mode is |[v]|.
+%
+% The command |\caselower| \DescribeMacro{\caselower} takes the input
+% string or token, and converts all uppercase characters in the string
+% to lowercase. All other character classes are left untouched.
+% Default mode is |[v]|.
+%
+% The command |\solelyuppercase| \DescribeMacro{\solelyuppercase} is
+% similar to |\caseupper|, except that all punctuation, numerals, and
+% symbols are discarded from the string. Blankspaces are left alone,
+% and lowercase characters are converted to uppercase.
+% Default mode is |[v]|.
+%
+% The command |\solelylowercase| \DescribeMacro{\solelylowercase} is
+% similar to |\caselower|, except that all punctuation, numerals, and
+% symbols are discarded from the string. Blankspaces are left alone,
+% and uppercase characters are converted to lowercase.
+% Default mode is |[v]|.
+%
+% The command |\changecase| \DescribeMacro{\changecase} switches lower
+% case to upper case and upper case to lower case. All other characters
+% are left unchanged.
+% Default mode is |[v]|.
+%
+% The command |\noblanks| \DescribeMacro{\noblanks} removes blankspaces
+% (both hard and soft) from
+% a string, while leaving other characters unchanged.
+% Default mode is |[v]|.
+%
+% The command |\nosymbolsnumerals| \DescribeMacro{\nosymbolsnumerals}
+% removes symbols and numerals from
+% a string, while leaving other characters unchanged.
+% Default mode is |[v]|.
+%
+% The command |\alphabetic| \DescribeMacro{\alphabetic} discards
+% punctuation, symbols, and numerals, while retaining alphabetic
+% characters and blankspaces.
+% Default mode is |[v]|.
+%
+% The command |\capitalize| \DescribeMacro{\capitalize} turns the first
+% character of {\it string} into its upper case, if it is alphabetic.
+% Otherwise, that character will remain unaltered.
+% Default mode is |[v]|.
+%
+% The command |\capitalizewords| \DescribeMacro{\capitalizewords} turns
+% the first character of every word in {\it string} into its upper
+% case, if it is alphabetic.
+% Otherwise, that character will remain unaltered. For the purposes of
+% this command, ``the first character of a word'' is defined as either
+% the first character of the string, or the first non-blank
+% character that follows one or more blankspaces.
+% Default mode is |[v]|.
+%
+% The command |\capitalizetitle| \DescribeMacro{\capitalizetitle} is a
+% command similar to |\capitalizewords|, except that words which have
+% been previously designated as ``lower-case words'' are not
+% capitalized (\eg prepositions, conjunctions, \etc). In all cases,
+% the first word of the string is
+% capitalized, even if it is on the lower-case word list. Words are
+% added to the lower-case word list with the commands
+% |\addlcword|\DescribeMacro{\addlcword}, in the case of a single word,
+% or with |\addlcwords|\DescribeMacro{\addlcwords}, in the case of
+% multiple (space-separated) words. Because the addition of many words
+% to the lower-case list can substantially slow-down the execution of
+% the |\capitalizetitle| command, the command
+% |\resetlcwords| \DescribeMacro{\resetlcwords} has been added to
+% allow the user to zero out the lower-case word list.
+% (See newer \textsf{titlecaps} package as an alternative to this
+% command.)
+%
+% The command |\reversestring| \DescribeMacro{\reversestring} reverses
+% the sequence of characters in a string, such that what started as
+% the first character becomes the last character in the manipulated
+% string, and what started as the last character becomes the
+% first character.
+% Default mode is |[v]|.
+%
+% The command |\convertchar| \DescribeMacro{\convertchar} is a substitution
+% command in which a specified match character in the original string
+% ({\it from-char}) is substituted with a different string ({\it
+% to-string}). All occurances of {\it from-char} in the original
+% string are replaced. The {\it from-char} can only be a single
+% character (or tokenized symbol), whereas {\it to-string} can range
+% from the null-string (\ie character removal) to a single character
+% (\ie character substitution)
+% to a complete multi-character string.
+% Default mode is |[v]|.
+%
+% The command |\convertword| \DescribeMacro{\convertword} is a substitution
+% command in which a specified match string in the original string
+% ({\it from-string}) is substituted with a different string ({\it
+% to-string}). All occurances of {\it from-string} in the original
+% string are replaced. If {\it from-string} includes spaces, use
+% hard-space |(~)| characters instead of blanks.
+% Default mode is |[v]|.
+%
+% The command |\rotateword| \DescribeMacro{\rotateword} takes the first
+% word of {\it string} (and its leading and trailing spaces)
+% and rotates them to the end of the string.
+% Care must be taken to have a blankspace at the beginning or end
+% of {\it string} if one wishes to retain a blankspace word
+% separator between the original last word of the string and the
+% original first word which has been rotated to the end of the string.
+% Default mode is |[v]|.
+%
+% The command |\removeword| \DescribeMacro{\removeword} removes the
+% first word of {\it string}, along with any of its leading and trailing
+% spaces.
+% Default mode is |[v]|.
+%
+% The command |\getnextword| \DescribeMacro{\getnextword} returns the
+% next word of {\it string}. In this case, ``word'' is a sequence of
+% characters delimited either by spaces or by the beginning or end
+% of the string.
+% Default mode is |[v]|.
+%
+% The command |\getaword| \DescribeMacro{\getaword} returns a
+% word of {\it string} defined by the index, {\it n}.
+% In this case, ``word'' is a sequence of
+% characters delimited either by spaces or by the first or last
+% characters of the string. If the index, {\it n}, requested exceeds the
+% number of words available in the string, the index wraps around back
+% to the first argument of the string, such that asking for the tenth word
+% of an eight word string will return the second word of the string.
+% Default mode is |[v]|.
+%
+% The command |\rotateleadingspaces|
+% \DescribeMacro{\rotateleadingspaces} takes any leading spaces of the
+% string and rotates them to the end of the string.
+% Default mode is |[v]|.
+%
+% The command |\removeleadingspaces|
+% \DescribeMacro{\removeleadingspaces} removes any leading spaces of the
+% string.
+% Default mode is |[v]|.
+%
+% The command |\stringencode| \DescribeMacro{\stringencode} returns a
+% copy of the string that has been encoded according to the
+% \stringstrings encoding scheme. Because an encoded string is an
+% intermediate result, the default mode for this command is |[e]|.
+%
+% The command |\stringdecode| \DescribeMacro{\stringdecode} returns a
+% copy of the string that has been decoded.
+% Default mode is |[v]|.
+%
+% The command |\gobblechar| \DescribeMacro{\gobblechar} returns a string
+% in which the first character of {\it string} has been removed. Unlike
+% the \LaTeX{} system command |\@gobble| which removes the next {\bf
+% byte} in
+% the input stream, |\gobblechar| not only takes an argument as the
+% target of its gobble, but also removes one {\bf character}, regardless
+% of whether that character is a single-byte or multi-byte character.
+% Because this command may have utility outside of the \stringstrings
+% environment, the result of this command is retokenized (\ie |def|'ed)
+% rather than expanded (\ie |edef|'ed).
+% Default mode is |[q]|. Mode |[e]| is not recognized.
+%
+% The command |\gobblechars| \DescribeMacro{\gobblechars} returns a string
+% in which the first {\it n} characters of {\it string} have been removed.
+% Like |\gobblechar|, |\gobblechars| removes characters, regardless
+% of whether those characters are single-byte or multi-byte characters.
+% Likewise, the result of this command is retokenized (\ie |def|'ed)
+% rather than expanded (\ie |edef|'ed).
+% Default mode is |[q]|. Mode |[e]| is not recognized.
+%
+% The command |\retokenize| \DescribeMacro{\retokenize} takes a string
+% that is encoded according to the \stringstrings encoding scheme, and
+% repopulates the encoded characters with their \LaTeX{} tokens. This
+% command is particularly useful for exporting a string to a routine
+% outside of the \stringstrings library or if the string includes
+% the following
+% characters: |\{|, |\}|, \verb,\|,, |\dag|, |\ddag|, |\d|, |\t|, |\b|,
+% |\copyright|, and |\P|.
+% Default mode is |[q]|. Mode |[e]| is not recognized.
+%
+% \section {Commands to Extract String Information}
+%
+% These commands
+% take an input string or token, and ascertain a particular
+% characteristic of the string. They include:
+%
+% \noindent|\stringlength[|{\it mode}|]{|{\it string}|}|\\
+% |\findchars[|{\it mode}|]{|{\it string}|}{|{\it match-char}|}|\\
+% |\findwords[|{\it mode}|]{|{\it string}|}{|{\it match-string}|}|\\
+% |\whereischar[|{\it mode}|]{|{\it string}|}{|{\it match-char}|}|\\
+% |\whereisword[|{\it mode}|]{|{\it string}|}{|{\it match-string}|}|\\
+% |\wordcount[|{\it mode}|]{|{\it string}|}|\\
+% |\getargs[|{\it mode}|]{|{\it string}|}|
+%
+% \noindent Commands in this section return their result in the string
+% |\theresult|, unless otherwise specified.
+% Unless otherwise noted, the {\it mode} may take one of two values:
+% |[v]| for verbose mode (generally, the default), and |[q]| for quiet
+% mode. In both cases, the result of
+% the operation is stored in |\theresult|. In verbose mode, it is also
+% output immediately (and may be captured by an |\edef|). In quiet mode,
+% no string is output, though the result still resides in |\theresult|.
+%
+% The command |\stringlength| \DescribeMacro{\stringlength} returns the
+% length of {\it string} in characters (not bytes).
+% Default mode is |[v]|.
+%
+% The command |\findchars| \DescribeMacro{\findchars} checks to see if
+% the character {\it match-char} occurs anywhere in {\it string}. The
+% number of occurances is stored in |\theresult| and, if in verbose
+% mode, printed. If it is desired to find blankspaces, {\it match-char}
+% should be set to |{~}| and not |{ }|.
+% Default mode is |[v]|.
+%
+% The command |\findwords| \DescribeMacro{\findwords} checks to see if
+% the string {\it match-string} occurs anywhere in {\it string}. The
+% number of occurances is stored in |\theresult| and, if in verbose
+% mode, printed. If it is desired to find blankspaces, those
+% characters in {\it match-string}
+% should be set to hardspaces (\ie tildes) and not softspaces (\ie
+% blanks), regardless of how they are defined in {\it string}.
+% Default mode is |[v]|.
+%
+% The command |\whereischar| \DescribeMacro{\whereischar} checks to see
+% where
+% the character {\it match-char} first occurs in {\it string}. The
+% location of that occurance is stored in |\theresult| and, if in verbose
+% mode, printed. If the character is not found, |\theresult| is set to
+% a value of 0. If it is desired to find blankspaces, {\it match-char}
+% should be set to |{~}| and not |{ }|.
+% Default mode is |[v]|.
+%
+% The command |\whereisword| \DescribeMacro{\whereisword} checks to see
+% where
+% the string {\it match-string} first occurs in {\it string}. The
+% location of that occurance is stored in |\theresult| and, if in verbose
+% mode, printed. If {\it match-string} is not found, |\theresult| is set to
+% a value of 0. If it is desired to find blankspaces, those characters
+% in {\it match-string}
+% should be set to hardspaces (\ie tildes) and not softspaces (\ie
+% blanks), regardless of how they are defined in {\it string}.
+% Default mode is |[v]|.
+%
+% The command |\wordcount| \DescribeMacro{\wordcount} counts the number
+% of space-separated words that occur in {\it string}.
+% Default mode is |[v]|.
+%
+% The command |\getargs| \DescribeMacro{\getargs} mimics the Unix
+% command of the same name, in that it parses {\it string} to determine
+% how many arguments (\ie words) are in {\it string}, and extracts
+% each word into a separate variable. The number of arguments is placed
+% in |\narg| and the individual arguments are placed in variables of
+% the name |\argi|, |\argii|, |\argiii|, |\argiv|, etc. This command
+% may be used to facilitate simply the use of multiple optional
+% arguments in a \LaTeX{} command, for example
+% |\mycommand[|{\it option1 option2 option3}|]{|{\it argument}|}|.
+% In this case,
+% |\mycommand| should exercise |\getargs{#1}|, with the result being
+% that {\it option1} is stored in |\argi|, \etc~The command |\mycommand|
+% may then proceed to parse the optional arguments and branch
+% accordingly.
+% Default mode is |[q]|; |[e]| mode is permitted, while |[v]| mode
+% is disabled.
+%
+% \section {Commands to Test Strings}
+%
+% These commands take an input
+% string or token and test for a particular alphanumeric condition.
+% They include:
+%
+% \noindent%
+% |\isnextbyte[|{\it mode}|]{|{\it match-byte}|}{|{\it string}|}|\\
+% |\testmatchingchar{|{\it
+% string}|}{|{\it n}|}{|{\it match-char}|}|\\
+% |\testcapitalized{|{\it string}|}|\\
+% |\testuncapitalized{|{\it string}|}|\\
+% |\testleadingalpha{|{\it string}|}|\\
+% |\testuppercase{|{\it string}|}|\\
+% |\testsolelyuppercase{|{\it string}|}|\\
+% |\testlowercase{|{\it string}|}|\\
+% |\testsolelylowercase{|{\it string}|}|\\
+% |\testalphabetic{|{\it string}|}|
+%
+% The command |\isnextbyte| \DescribeMacro{\isnextbyte} tests to see if
+% the first byte of {\it string} equals {\it match-byte}. It
+% is the only string-testing command in
+% this section which does not use the {\sf ifthen} test structure for
+% its result. Rather, |\isnextbyte| returns the result of its test as
+% a |T| or |F| in the string |\theresult|. More importantly, and
+% unlike other \stringstrings commands, |\isnextbyte| is a {\it byte} test
+% and not a {\it character} test. This means that, while |\isnextbyte|
+% operates very efficiently, it cannot
+% be used to directly detect multi-byte characters like |\$|,
+% |\^|, |\{|, |\}|, |\_|, |\dag|, |\ddag|, |\AE|, |\ae|, |\OE|,
+% |\oe|, \etc~(|\isnextbyte| will give false positives or negatives
+% when testing for these multi-byte characters).
+% The default mode of |\isnextbyte| is |[v]|.
+%
+% If a character needs to be tested, rather than a byte,
+% \DescribeMacro{\testmatchingchar} |\testmatchingchar| should be used.
+% The command |\testmatchingchar| is
+% used to ascertain whether character {\it n} of {\it string} equals
+% {\it match-char} or not. Whereas |\isnextbyte| checks only a {\it
+% byte}, |\testmatchingchar| tests for a {\it character} (single- or
+% multi-byte character). After the test is called, the action(s) may be
+% called out with |\ifmatchingchar| {\it true-code} |\else| {\it
+% false-code} |\fi|.
+%
+% The command |\testcapitalized| \DescribeMacro{\testcapitalized} is
+% used to ascertain whether the first character of {\it string} is
+% capitalized or not. If the first character is non-alphabetic, the
+% test will return FALSE. After the test is called, the action(s) may be
+% called out with |\ifcapitalized| {\it true-code} |\else| {\it
+% false-code} |\fi|.
+%
+% The command |\testuncapitalized| \DescribeMacro{\testuncapitalized} is
+% used to ascertain whether the first character of {\it string} is
+% uncapitalized. If the first character is non-alphabetic, the
+% test will return FALSE. After the test is called, the action(s) may be
+% called out with |\ifuncapitalized| {\it true-code} |\else| {\it
+% false-code} |\fi|.
+%
+% The command |\testleadingalpha| \DescribeMacro{\testleadingalpha} is
+% used to ascertain whether the first character of {\it string} is
+% alphabetic. After the test is called, the action(s) may be
+% called out with |\ifleadingalpha| {\it true-code} |\else| {\it
+% false-code} |\fi|.
+%
+% The command |\testuppercase| \DescribeMacro{\testuppercase} is
+% used to ascertain whether all the alphabetic characters in {\it
+% string} are uppercase or not. The presence of non-alphabetic
+% characters in {\it string} does not falsify the test,
+% but are merely ignored. However, a string completely void of
+% alphabetic characters will always test FALSE.
+% After the test is called, the action(s) may be
+% called out with |\ifuppercase| {\it true-code} |\else| {\it
+% false-code} |\fi|.
+%
+% The command |\testsolelyuppercase|
+% \DescribeMacro{\testsolelyuppercase} is
+% used to ascertain whether {\it all} the characters in {\it
+% string} are uppercase or not. The presence of non-alphabetic
+% characters in {\it string} other than blankspaces will automatically
+% falsify the test. Blankspaces are ignored. However, a null string or
+% a string composed solely of blankspaces will also test FALSE.
+% After the test is called, the action(s) may be
+% called out with |\ifsolelyuppercase| {\it true-code} |\else| {\it
+% false-code} |\fi|.
+%
+% The command |\testlowercase| \DescribeMacro{\testlowercase} is
+% used to ascertain whether all the alphabetic characters in {\it
+% string} are lowercase or not. The presence of non-alphabetic
+% characters in {\it string} does not falsify the test,
+% but are merely ignored. However, a string completely void of
+% alphabetic characters will always test FALSE.
+% After the test is called, the action(s) may be
+% called out with |\iflowercase| {\it true-code} |\else| {\it
+% false-code} |\fi|.
+%
+% The command |\testsolelylowercase|
+% \DescribeMacro{\testsolelylowercase} is
+% used to ascertain whether {\it all} the characters in {\it
+% string} are lowercase or not. The presence of non-alphabetic
+% characters in {\it string} other than blankspaces will automatically
+% falsify the test. Blankspaces are ignored. However, a null string or
+% a string composed solely of blankspaces will also test FALSE.
+% After the test is called, the action(s) may be
+% called out with |\ifsolelylowercase| {\it true-code} |\else| {\it
+% false-code} |\fi|.
+%
+% The command |\testalphabetic|
+% \DescribeMacro{\testalphabetic} is
+% used to ascertain whether {\it all} the characters in {\it
+% string} are alphabetic or not. The presence of non-alphabetic
+% characters in {\it string} other than blankspaces will automatically
+% falsify the test. Blankspaces are ignored. However, a null string or
+% a string composed solely of blankspaces will also test FALSE.
+% After the test is called, the action(s) may be
+% called out with |\ifalphabetic| {\it true-code} |\else| {\it
+% false-code} |\fi|.
+%
+% \section{Disclaimers}
+%
+% Now that we have described the commands available in the
+% \stringstrings package, it is appropriate to lay out the quirks and
+% warnings associated with the use of the package.
+%
+% First, \stringstrings is currently set to handle a string no larger
+% than 500 characters. A user could circumvent this, presumably, by
+% editing the style package to increase the value of
+% |\@MAXSTRINGSIZE| \DescribeMacro{\@MAXSTRINGSIZE}.
+%
+% It is important to remember that \stringstrings follows the underlying
+% rules of \LaTeX{}. Therefore, a passed string could not contain a raw
+% |%| as part of it, because it would, in fact, comment out the
+% remainder of the line. Naturally, the string may freely contain
+% instances of |\%|.
+%
+% Tokens that take two or more characters to express
+% (\eg |\#|, |\oe|, |\ddag|, \etc) are {\bf counted as
+% a single character} within the string.
+% The rule applies if you wanted to know the length
+% of a string that was populated with such tokens, or wanted to extract
+% a substring from a such a string. Of course, the exception that makes
+% the rule is that of diacritical marks, which count as separate symbols
+% from the characters they mark. For example,
+% |\^a| counts as two characters, because the |a| is
+% really just the operand of the |\^| token, even though the net result
+% looks like a single character (\^a).
+%
+% Consistent with
+% \LaTeX{} convention, groups of spaces are treated as a single
+% blankspace, unless encoded with |~| characters. And finally, again
+% consistent with the way \LaTeX{} operates, the space
+% that follows an alphabetic token is not actually a space in the
+% string, but serves as the delimiter to the token. Therefore,
+% |\OE dipus| (\OE dipus) has a length of six characters,
+% one for the |\OE| and five
+% for the |dipus|. The intervening space merely closes out the |\OE|
+% token, and does not represent a space in the middle of the string.
+%
+% One quirk worthy of particular note concerns the tabbing character,
+% meaning \&
+% as opposed to |\&| (which is handled without problem).
+% As of version 1.01, \stringstrings has the
+% capability to operate on arguments containg the ampersand \&,
+% normally reserved as the \LaTeX{} tabbing character. However, one
+% adverse by-product is that \& characters returned in |\thestring|
+% lose their catcode-4 value, and thus lose their ability to function as
+% tabbing characters. In the following example,\\
+% | |\\
+% | \caseupper[q]{a & b & c & d}|\\
+% | \begin{tabular}{|\verb,|l|c|c|c|,|}|\\
+% | \hline|\\
+% | \thestring\\|\\
+% | \hline|\\
+% | \end{tabular}|\\
+% | |\\
+% will produce \caseupper[q]{a & b & c & d}
+% \begin{tabular}{\modetablelayout}
+% \hline
+% \thestring\\
+% \hline
+% \end{tabular}
+% instead of the desired
+% \begin{tabular}{\modetablelayout}
+% \hline
+% A & B & C & D\\
+% \hline
+% \end{tabular}
+% .
+%
+% In the |\substring| command, no tests are performed to guarantee that
+% the lower limit, {\it min}, is less than the upper limit, {\it max},
+% or that {\it min} is even positive. However, the upper limit,
+% {\it max}, is corrected, if set larger than the string length. Also,
+% the use of the `\$' symbol to signify the last character of the string
+% and `\$--{\it n}' to denote an offset of {\it n} characters from the
+% end of the string can be helpful in avoiding the misindexing of strings.
+%
+% \begin{table}[p]
+% \caption{\bf Problematic Characters/Tokens and \stringstrings Solutions%
+% \label{tbl:prob}}\vspace{.5em}
+% \small
+% \begin{tabular}{\mylayout}
+% \LaTeX{} & Symbol/Name & Problem/Solution\\
+% \hline
+% \hline
+% |{| & begin group & Cannot use |{| and |}| in \stringstrings
+% arguments.\\
+% |}| & end group & However, use |\LB|\ldots|\RB| in lieu of |{|\ldots|}|;\\
+% & & manipulate string in |[e]| mode \& |\retokenize| \\
+% \hline
+% |\dag| & \dag~~Dagger & Cannot |\edef| these tokens; Thus, |[v]| mode\\
+% |\ddag| & \ddag~~Double Dagger & fails with both OT1 and T1 encoding; \\
+% |\P| & \P~~Pilcrow & manipulate string in |[e]| mode \& |\retokenize| \\
+% |\d| & \d x~~Underdot & \\
+% |\t| & \t xx~~Joining Arch & \\
+% |\b| & \b x~~Letter Underline & \\
+% |\copyright| & \copyright~Copyright & \\
+% \hline
+% \hline
+% |\_| & \_~~Underscore & Cannot |\edef| with OT1 encoding; either\\
+% |\{| & \{~~Left Curly Brace & |\renewcommand\encodingdefault{T1}|, or \\
+% |\}| & \}~~Right Curly Brace &
+% manipulate string in |[e]| mode \& |\retokenize|. \\
+% |\S| & \S~~Section Symbol & With OT1, |\S|, |\c| and |\pounds| break\\
+% |\c| & \c x~~Cedilla & \stringstrings |[v]| mode.\\
+% |\pounds| & \pounds~~Pounds & \\
+% \hline
+% \verb,\|,& \stringstrings Pipe Char. & Distinct from \verb,|,,
+% the \stringstrings encoded-\\
+% & \verb,|, (T1) ~~~\stringdecode{\|} (OT1) & escape character\\
+% \hline
+% \hline
+% |\$| & \$~~Dollar & Either cannot |\edef|, or\\
+% |\carat| & \mycarat~~(text mode) &
+% cannot identify uniquely with |\if| construct, or \\
+% |\^| & \^x~~Circumflex & expanded character is more than one byte. \\
+% |\'| & \'x~~Acute & \\
+% |\"| & \"x~~Umlaut & {\it However},\\
+% |\~| & \~x~~Tilde &
+% Use these characters freely, \stringstrings\\
+% |\`| & \`x~~Grave &
+% encoding functions transparently with them.\\
+% |\.| & \.x~~Overdot & \\
+% |\=| & \=x~~Macron & |\retokenize| also works\\
+% |\u| & \u x~~Breve & \\
+% |\v| & \v x~~Caron & \\
+% |\H| & \H x~~Double Acute & \\
+% |\ss| & \ss~~Eszett & \\
+% |\AE \ae| & \AE~\ae~~\ae sc & \\
+% |\OE \oe| & \OE~\oe~~\oe thel & \\
+% |\AA \aa| & \AA~\aa~~angstrom & \\
+% |\O \o| & \O~\o~~slashed O & \\
+% |\L \l| & \L~\l~~barred L & \\
+% |~| & Hardspace &\\
+% \hline
+% |$| & begin/end math mode & These characters pose no difficulties;\\
+% |^| & math superscript & However, cannot extract substring that \\
+% |_| & math subscript & breaks in middle of math mode.\\
+% & & Other math mode symbols NOT supported.\\
+% \hline
+% \& & ampersand & Version 1.01 \stringstrings can manipulate the\\
+% & & ampersand. However, returned strings\\
+% & & containing the \& character lose their\\
+% & & catcode-4 status, making them unfit\\
+% & & for use as tabbing characters.\\
+% \hline
+% \hline
+% \end{tabular}
+% \end{table}
+% Table~\ref{tbl:prob} shows a variety of characters and tokens, some of
+% which pose a challenge to \stringstrings manipulations. In all cases,
+% a solution or workaround is provided. For symbols in the top two
+% categories, the workaround
+% solution includes the use of retokenized strings instead of expanded
+% strings. For symbols in the next two categories, use of T1 encoding
+% or retokenizing provides a satisfactory solution. In the bottom three
+% categories, because of \stringstrings encoded |[e]| mode,
+% there is nothing to impede the use of these characters in
+% \stringstrings arguments, if encoded |[e]| mode is employed for
+% intermediate calculations. Some of the
+% details of these problematic cases is described below.
+%
+% Not surprisingly, you are not allowed to extract a substring of a
+% string, if it breaks in the middle of math mode, because a substring
+% with only one |$| in it cannot be |\edef|'ed.
+%
+% There are a few potential quirks when using \LaTeX{}'s native OT1
+% character encoding, most of which can be circumvented by using the
+% more modern
+% T1 encoding (accessed via |\renewcommand\encodingdefault{T1}| in the
+% document preamble). The quirks arise because there are
+% several characters that, while displayable in \LaTeX{}, are not part
+% of the OT1 character encoding. The characters include |\{|, |\}|, and
+% the \verb,|, symbol (accessed in \stringstrings via \verb,\|,).
+% When using \stringstrings to manipulate strings containing
+% these characters in the presence of OT1 encoding,
+% they come out looking like \stringdecode{\{}, \stringdecode{\}},
+% and \stringdecode{\|}, respectively. However, if the T1 encoding fix
+% is not an option for you, you can also work around this problem by
+% |\retokenize|'ing the affected string (the |\retokenize| command is
+% provided to convert encoded, expanded strings back into tokenized
+% form, if need be).
+%
+% Likewise, for both OT1 and T1 encoding, the characters \dag~(|\dag|),
+% \ddag~(|\ddag|), \P~(|\P|), \d~~(|\d|), \t~~~(|\t|), \b~~~(|\b|),
+% and \copyright~(|\copyright|)
+% cannot be in the argument of an |\edef| expression. For
+% manipulated strings including these characters, |\retokenize| is the
+% only option available to retain the integrity of the string.
+%
+% As discussed thoroughly in the previous section, an ``encoded'' form of
+% the string manipulation routines is provided to prevent the
+% undesirable circumstance of passing an |\edef|'ed symbol as input
+% to a subsequent manipulation. Likewise, never try to ``decode''
+% an already ``decoded'' string.
+%
+% When \stringstrings doesn't understand a token, it is supposed to
+% replace it with a period. However, some undecipherable characters may
+% inadvertantly be replaced with a space, instead. Of course, neither
+% of these possibilities is any comfort to the user.
+%
+% As mentioned already, \stringstrings cannot handle curly braces that
+% are used for grouping purposes, a circumstance which often arises in
+% math mode. Nonetheless, |\LB| and |\RB| may be used within
+% \stringstrings arguments in lieu of grouping braces, {\it if the final
+% result is to be retokenized}. Thus, |\caselower[e]{$X^\LB Y + Z\RB$}|
+% followed by |\convertchar[e]{\thestring}{x}{(1+x)}|, when finished up
+% with the following command,
+% |\retokenize[v]{\thestring}| yields as its result:\\
+% \caselower[e]{$X^\LB Y + Z\RB$}\convertchar[e]{\thestring}{x}{(1+x)}
+% \retokenize[v]{\thestring}.
+%
+% One might ask, ``why not retokenize everything, instead of using the
+% |[v]| mode of the \stringstrings routines?'' While one {\it could}
+% do this, the answer is simply
+% that |\retokenize| is a computationally intensive command, and that
+% it is best used, therefore, only when the more efficient methods
+% will not suffice. In many, if not most cases, strings to be
+% manipulated will be solely composed of alphanumeric characters which
+% don't require the use of |\retokenize|, T1 encoding, or even
+% \stringstrings encoding.
+%
+% Despite these several disclaimers and workarounds required when
+% dealing with problematic characters, I hope you find the \stringstrings
+% architecture and feel to be straightforward and useful. There is only
+% one thing left, and that is to dissect the code\ldots and so here we
+% go.
+%
+%% \CharacterTable
+%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
+% \StopEventually{}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \vspace{-0.8em}
+% \begin{macro}{stringstrings.sty}
+% \section{Code Listing}
+% I'll try to lay out herein
+% the workings of the \stringstrings style package.
+% \begin{macrocode}
+%<*package>
+
+%%%%% INITIALIZATIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\catcode`\&=12
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{ifthen}
+% This package makes wide use of the {\sf ifthen} style package.
+% \begin{macrocode}
+\usepackage{ifthen}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\@MAXSTRINGSIZE}
+% The parameter |\@MAXSTRINGSIZE| defines the maximum allowable string
+% size that \stringstrings can operate upon.
+% \begin{macrocode}
+\def\@MAXSTRINGSIZE{500}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macrocode}
+\def\endofstring{@E@o@S@}%
+\def\undecipherable{.}% UNDECIPHERABLE TOKENS TO BE REPLACED BY PERIOD
+\def\@blankaction{\BlankSpace}
+% \end{macrocode}
+% Save the symbols which will get redefined \stringstrings encoding.
+
+% \begin{macrocode}
+\let\SaveDollar\$
+\let\SaveHardspace~
+\let\SaveCircumflex\^
+\let\SaveTilde\~
+\let\SaveUmlaut\"
+\let\SaveGrave\`
+\let\SaveAcute\'
+\let\SaveMacron\=
+\let\SaveOverdot\.
+\let\SaveBreve\u
+\let\SaveCaron\v
+\let\SaveDoubleAcute\H
+\let\SaveCedilla\c
+\let\SaveUnderdot\d
+\let\SaveArchJoin\t
+\let\SaveLineUnder\b
+\let\SaveCopyright\copyright
+\let\SavePounds\pounds
+\let\SaveLeftBrace\{
+\let\SaveRightBrace\}
+\let\SaveUnderscore\_
+\let\SaveDagger\dag
+\let\SaveDoubleDagger\ddag
+\let\SaveSectionSymbol\S
+\let\SavePilcrow\P
+\let\SaveAEsc\AE
+\let\Saveaesc\ae
+\let\SaveOEthel\OE
+\let\Saveoethel\oe
+\let\SaveAngstrom\AA
+\let\Saveangstrom\aa
+\let\SaveSlashedO\O
+\let\SaveSlashedo\o
+\let\SaveBarredL\L
+\let\SaveBarredl\l
+\let\SaveEszett\ss
+\let\SaveLB{
+\let\SaveRB}
+% \end{macrocode}
+
+% The BlankSpace character is the only character which is reencoded
+% with a 1-byte re-encoding\ldots in this case the \OE~character.
+% \begin{macrocode}
+\def\EncodedBlankSpace{\SaveOEthel}
+\edef\BlankSpace{ }
+% \end{macrocode}
+% All other reencoded symbols consist of 2 bytes: an escape character
+% plus a unique code. The escape character is a pipe symbol. the
+% unique code comprises either a single number, letter, or symbol.
+
+% \begin{macrocode}
+\def\EscapeChar{|}
+
+% |0 IS AN ENCODED |, ACCESSED VIA \|
+\def\PipeCode{0}
+\def\EncodedPipe{\EscapeChar\PipeCode}
+\def\Pipe{|}
+\let\|\EncodedPipe
+
+% |1 IS AN ENCODED \$
+\def\DollarCode{1}
+\def\EncodedDollar{\EscapeChar\DollarCode}
+% THE FOLLOWING IS NEEDED TO KEEP OT1 ENCODING FROM BREAKING;
+% IT PROVIDES AN ADEQUATE BUT NOT IDEAL ENVIRONMENT FOR T1 ENCODING
+\def\Dollar{\symbol{36}}
+% THE FOLLOWING IS BETTER FOR T1 ENCODING, BUT BREAKS OT1 ENCODING
+%\def\Dollar{\SaveDollar}
+
+% |W IS RESERVED TO BE ASSIGNED TO AN ARBITRARY TOKEN
+\def\UvariCode{W}
+\def\EncodedUvari{\EscapeChar\UvariCode}
+\def\Uvari{Uvari}
+\let\uvari\EncodedUvari
+
+% |X IS RESERVED TO BE ASSIGNED TO AN ARBITRARY TOKEN
+\def\UvariiCode{X}
+\def\EncodedUvarii{\EscapeChar\UvariiCode}
+\def\Uvarii{Uvarii}
+\let\uvarii\EncodedUvarii
+
+% |Y IS RESERVED TO BE ASSIGNED TO AN ARBITRARY TOKEN
+\def\UvariiiCode{Y}
+\def\EncodedUvariii{\EscapeChar\UvariiiCode}
+\def\Uvariii{Uvariii}
+\let\uvariii\EncodedUvariii
+
+% |2 IS AN ENCODED ^ FOR USE IN TEXT MODE, ACCESSED VIA \carat
+\def\CaratCode{2}
+\def\EncodedCarat{\EscapeChar\CaratCode}
+\def\Carat{\symbol{94}}
+\let\carat\EncodedCarat
+
+% |4 IS AN ENCODED \{
+\def\LeftBraceCode{4}
+\def\EncodedLeftBrace{\EscapeChar\LeftBraceCode}
+% THE FOLLOWING IS NEEDED TO KEEP OT1 ENCODING FROM BREAKING;
+% IT PROVIDES AN ADEQUATE BUT NOT IDEAL ENVIRONMENT FOR T1 ENCODING
+\def\LeftBrace{\symbol{123}}
+% THE FOLLOWING IS BETTER FOR T1 ENCODING, BUT BREAKS OT1 ENCODING
+%\def\LeftBrace{\SaveLeftBrace}
+
+% |5 IS AN ENCODED \}
+\def\RightBraceCode{5}
+\def\EncodedRightBrace{\EscapeChar\RightBraceCode}
+% THE FOLLOWING IS NEEDED TO KEEP OT1 ENCODING FROM BREAKING;
+% IT PROVIDES AN ADEQUATE BUT NOT IDEAL ENVIRONMENT FOR T1 ENCODING
+\def\RightBrace{\symbol{125}}
+% THE FOLLOWING IS BETTER FOR T1 ENCODING, BUT BREAKS OT1 ENCODING
+%\def\RightBrace{\SaveRightBrace}
+
+% |6 IS AN ENCODED \_
+\def\UnderscoreCode{6}
+\def\EncodedUnderscore{\EscapeChar\UnderscoreCode}
+\def\Underscore{\symbol{95}}
+%\def\Underscore{\SaveUnderscore}
+
+% |7 IS AN ENCODED \^
+\def\CircumflexCode{7}
+\def\EncodedCircumflex{\EscapeChar\CircumflexCode}
+\def\Circumflex{\noexpand\SaveCircumflex}
+
+% |8 IS AN ENCODED \~
+\def\TildeCode{8}
+\def\EncodedTilde{\EscapeChar\TildeCode}
+\def\Tilde{\noexpand\SaveTilde}
+
+% |" IS AN ENCODED \"
+\def\UmlautCode{"}
+\def\EncodedUmlaut{\EscapeChar\UmlautCode}
+\def\Umlaut{\noexpand\SaveUmlaut}
+
+% |` IS AN ENCODED \`
+\def\GraveCode{`}
+\def\EncodedGrave{\EscapeChar\GraveCode}
+\def\Grave{\noexpand\SaveGrave}
+
+% |' IS AN ENCODED \'
+\def\AcuteCode{'}
+\def\EncodedAcute{\EscapeChar\AcuteCode}
+\def\Acute{\noexpand\SaveAcute}
+
+% |= IS AN ENCODED \=
+\def\MacronCode{=}
+\def\EncodedMacron{\EscapeChar\MacronCode}
+\def\Macron{\noexpand\SaveMacron}
+
+% |. IS AN ENCODED \.
+\def\OverdotCode{.}
+\def\EncodedOverdot{\EscapeChar\OverdotCode}
+\def\Overdot{\noexpand\SaveOverdot}
+
+% |u IS AN ENCODED \u
+\def\BreveCode{u}
+\def\EncodedBreve{\EscapeChar\BreveCode}
+\def\Breve{\noexpand\SaveBreve}
+
+% |v IS AN ENCODED \v
+\def\CaronCode{v}
+\def\EncodedCaron{\EscapeChar\CaronCode}
+\def\Caron{\noexpand\SaveCaron}
+
+% |H IS AN ENCODED \H
+\def\DoubleAcuteCode{H}
+\def\EncodedDoubleAcute{\EscapeChar\DoubleAcuteCode}
+\def\DoubleAcute{\noexpand\SaveDoubleAcute}
+
+% |c IS AN ENCODED \c
+\def\CedillaCode{c}
+\def\EncodedCedilla{\EscapeChar\CedillaCode}
+\def\Cedilla{\noexpand\SaveCedilla}
+
+% |d IS AN ENCODED \d
+\def\UnderdotCode{d}
+\def\EncodedUnderdot{\EscapeChar\UnderdotCode}
+\def\Underdot{.}% CANNOT \edef \d
+
+% |t IS AN ENCODED \t
+\def\ArchJoinCode{t}
+\def\EncodedArchJoin{\EscapeChar\ArchJoinCode}
+\def\ArchJoin{.}% CANNOT \edef \t
+
+% |b IS AN ENCODED \b
+\def\LineUnderCode{b}
+\def\EncodedLineUnder{\EscapeChar\LineUnderCode}
+\def\LineUnder{.}% CANNOT \edef \b
+
+% |C IS AN ENCODED \copyright
+\def\CopyrightCode{C}
+\def\EncodedCopyright{\EscapeChar\CopyrightCode}
+\def\Copyright{.}% CANNOT \edef \copyright
+
+% |p IS AN ENCODED \pounds
+\def\PoundsCode{p}
+\def\EncodedPounds{\EscapeChar\PoundsCode}
+\def\Pounds{\SavePounds}
+
+% |[ IS AN ENCODED {
+\def\LBCode{[}
+\def\EncodedLB{\EscapeChar\LBCode}
+\def\UnencodedLB{.}
+\def\LB{\EncodedLB}
+
+% |] IS AN ENCODED }
+\def\RBCode{]}
+\def\EncodedRB{\EscapeChar\RBCode}
+\def\UnencodedRB{.}
+\def\RB{\EncodedRB}
+
+% |z IS AN ENCODED \dag
+\def\DaggerCode{z}
+\def\EncodedDagger{\EscapeChar\DaggerCode}
+\def\Dagger{.}% CANNOT \edef \dag
+
+% |Z IS AN ENCODED \ddag
+\def\DoubleDaggerCode{Z}
+\def\EncodedDoubleDagger{\EscapeChar\DoubleDaggerCode}
+\def\DoubleDagger{.}% CANNOT \edef \ddag
+
+% |S IS AN ENCODED \S
+\def\SectionSymbolCode{S}
+\def\EncodedSectionSymbol{\EscapeChar\SectionSymbolCode}
+\def\SectionSymbol{\SaveSectionSymbol}
+
+% |P IS AN ENCODED \P
+\def\PilcrowCode{P}
+\def\EncodedPilcrow{\EscapeChar\PilcrowCode}
+\def\Pilcrow{.}% CANNOT \edef \P
+
+% |E IS AN ENCODED \AE
+\def\AEscCode{E}
+\def\EncodedAEsc{\EscapeChar\AEscCode}
+\def\AEsc{\SaveAEsc}
+
+% |e IS AN ENCODED \ae
+\def\aescCode{e}
+\def\Encodedaesc{\EscapeChar\aescCode}
+\def\aesc{\Saveaesc}
+
+% |O IS AN ENCODED \OE
+\def\OEthelCode{O}
+\def\EncodedOEthel{\EscapeChar\OEthelCode}
+\def\OEthel{\SaveOEthel}
+
+% |o IS AN ENCODED \oe
+\def\oethelCode{o}
+\def\Encodedoethel{\EscapeChar\oethelCode}
+\def\oethel{\Saveoethel}
+
+% |A IS AN ENCODED \AA
+\def\AngstromCode{A}
+\def\EncodedAngstrom{\EscapeChar\AngstromCode}
+\def\Angstrom{\SaveAngstrom}
+
+% |a IS AN ENCODED \aa
+\def\angstromCode{a}
+\def\Encodedangstrom{\EscapeChar\angstromCode}
+\def\angstrom{\Saveangstrom}
+
+% |Q IS AN ENCODED \O
+\def\SlashedOCode{Q}
+\def\EncodedSlashedO{\EscapeChar\SlashedOCode}
+\def\SlashedO{\SaveSlashedO}
+
+% |q IS AN ENCODED \o
+\def\SlashedoCode{q}
+\def\EncodedSlashedo{\EscapeChar\SlashedoCode}
+\def\Slashedo{\SaveSlashedo}
+
+% |L IS AN ENCODED \L
+\def\BarredLCode{L}
+\def\EncodedBarredL{\EscapeChar\BarredLCode}
+\def\BarredL{\SaveBarredL}
+
+% |l IS AN ENCODED \l
+\def\BarredlCode{l}
+\def\EncodedBarredl{\EscapeChar\BarredlCode}
+\def\Barredl{\SaveBarredl}
+
+% |s IS AN ENCODED \ss
+\def\EszettCode{s}
+\def\EncodedEszett{\EscapeChar\EszettCode}
+\def\Eszett{\SaveEszett}
+
+\newcounter{@letterindex}
+\newcounter{@@letterindex}
+\newcounter{@@@letterindex}
+\newcounter{@wordindex}
+\newcounter{@iargc}
+\newcounter{@gobblesize}
+\newcounter{@maxrotation}
+\newcounter{@stringsize}
+\newcounter{@@stringsize}
+\newcounter{@@@stringsize}
+\newcounter{@revisedstringsize}
+\newcounter{@gobbleindex}
+\newcounter{@charsfound}
+\newcounter{@alph}
+\newcounter{@alphaindex}
+\newcounter{@capstrigger}
+\newcounter{@fromindex}
+\newcounter{@toindex}
+\newcounter{@previousindex}
+\newcounter{@flag}
+\newcounter{@matchloc}
+\newcounter{@matchend}
+\newcounter{@matchsize}
+\newcounter{@matchmax}
+\newcounter{@skipped}
+\newcounter{@lcwords}
+% \end{macrocode}
+% \begin{macrocode}
+%%%%% CONFIGURATION COMMANDS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \end{macrocode}
+
+% \begin{macro}{\defaultTreatments}
+% This command can be used to restore the default string treatments,
+% prior to calling |\substring|. The default treatments leave all
+% symbol types intact and unaltered.
+% \begin{macrocode}
+\newcommand\defaultTreatments{%
+ \def\EncodingTreatment{v}% <--Set=v to decode special chars (vs. q,e)
+ \def\AlphaCapsTreatment{1}% <--Set=1 to retain uppercase (vs. 0,2)
+ \def\AlphaTreatment{1}% <--Set=1 to retain lowercase (vs. 0,2)
+ \def\PunctuationTreatment{1}% <--Set=1 to retain punctuation (vs. 0)
+ \def\NumeralTreatment{1}% <--Set=1 to retain numerals (vs. 0)
+ \def\SymbolTreatment{1}% <--Set=1 to retain special chars (vs. 0)
+ \def\BlankTreatment{1}% <--Set=1 to retain blanks (vs. 0)
+ \def\CapitalizeString{0}% <--Set=0 for no special action (vs. 1,2)
+ \def\SeekBlankSpace{0}% <--Set=0 for no special action (vs. 1,2)
+}
+\defaultTreatments
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\Treatments}
+% This command allows the user to specify the desired character class
+% treatments, prior to a call to |\substring|. Unfortunately for the
+% user, I have specified which character class each symbol belongs to.
+% Therefore, it is not easy if the user decides that he wants a cedilla,
+% for example, to be treated like an alphabetic character rather than
+% a symbol.
+% \begin{macrocode}
+% QUICK WAY TO SET UP TREATMENTS BY WHICH \@rotate HANDLES VARIOUS
+% CHARACTERS
+\newcommand\Treatments[6]{%
+ \def\AlphaCapsTreatment{#1}% <--Set=0 to remove uppercase
+% =1 to retain uppercase
+% =2 to change UC to lc
+ \def\AlphaTreatment{#2}% <--Set=0 to remove lowercase
+% =1 to retain lowercase
+% =2 to change lc to UC
+ \def\PunctuationTreatment{#3}%<--Set=0 to remove punctuation
+% =1 to retain punctuation
+ \def\NumeralTreatment{#4}% <--Set=0 to remove numerals
+% =1 to retain numerals
+ \def\SymbolTreatment{#5}% <--Set=0 to remove special chars
+% =1 to retain special chars
+ \def\BlankTreatment{#6}% <--Set=0 to remove blanks
+% =1 to retain blanks
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\+}
+% This command (|\+|) is used to enact the \stringstrings encoding.
+% Key symbols are redefined, and any |\edef| which occurs while this
+% command is active will adopt these new definitions.
+% \begin{macrocode}
+% REENCODE MULTIBYTE SYMBOLS USING THE stringstrings ENCODING METHOD
+\newcommand\+{%
+ \def\${\EncodedDollar}%
+ \def~{\EncodedBlankSpace}%
+ \def\^{\EncodedCircumflex}%
+ \def\~{\EncodedTilde}%
+ \def\"{\EncodedUmlaut}%
+ \def\`{\EncodedGrave}%
+ \def\'{\EncodedAcute}%
+ \def\={\EncodedMacron}%
+ \def\.{\EncodedOverdot}%
+ \def\u{\EncodedBreve}%
+ \def\v{\EncodedCaron}%
+ \def\H{\EncodedDoubleAcute}%
+ \def\c{\EncodedCedilla}%
+ \def\d{\EncodedUnderdot}%
+ \def\t{\EncodedArchJoin}%
+ \def\b{\EncodedLineUnder}%
+ \def\copyright{\EncodedCopyright}%
+ \def\pounds{\EncodedPounds}%
+ \def\{{\EncodedLeftBrace}%
+ \def\}{\EncodedRightBrace}%
+ \def\_{\EncodedUnderscore}%
+ \def\dag{\EncodedDagger}%
+ \def\ddag{\EncodedDoubleDagger}%
+ \def\S{\EncodedSectionSymbol}%
+ \def\P{\EncodedPilcrow}%
+ \def\AE{\EncodedAEsc}%
+ \def\ae{\Encodedaesc}%
+ \def\OE{\EncodedOEthel}%
+ \def\oe{\Encodedoethel}%
+ \def\AA{\EncodedAngstrom}%
+ \def\aa{\Encodedangstrom}%
+ \def\O{\EncodedSlashedO}%
+ \def\o{\EncodedSlashedo}%
+ \def\L{\EncodedBarredL}%
+ \def\l{\EncodedBarredl}%
+ \def\ss{\EncodedEszett}%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\?}
+% The command |\?| reverts the character encodings back to the standard
+% \LaTeX{} definitions. The command effectively undoes a previously
+% enacted |\+|.
+% \begin{macrocode}
+% WHEN TASK IS DONE, REVERT ENCODING TO STANDARD ENCODING METHOD
+\newcommand\?{%
+ \let\$\SaveDollar%
+ \let~\SaveHardspace%
+ \let\^\SaveCircumflex%
+ \let\~\SaveTilde%
+ \let\"\SaveUmlaut%
+ \let\`\SaveGrave%
+ \let\'\SaveAcute%
+ \let\=\SaveMacron%
+ \let\.\SaveOverdot%
+ \let\u\SaveBreve%
+ \let\v\SaveCaron%
+ \let\H\SaveDoubleAcute%
+ \let\c\SaveCedilla%
+ \let\d\SaveUnderdot%
+ \let\t\SaveArchJoin%
+ \let\b\SaveLineUnder%
+ \let\copyright\SaveCopyright%
+ \let\pounds\SavePounds%
+ \let\{\SaveLeftBrace%
+ \let\}\SaveRightBrace%
+ \let\_\SaveUnderscore%
+ \let\dag\SaveDagger%
+ \let\ddag\SaveDoubleDagger%
+ \let\S\SaveSectionSymbol%
+ \let\P\SavePilcrow%
+ \let\AE\SaveAEsc%
+ \let\ae\Saveaesc%
+ \let\OE\SaveOEthel%
+ \let\oe\Saveoethel%
+ \let\AA\SaveAngstrom%
+ \let\aa\Saveangstrom%
+ \let\O\SaveSlashedO%
+ \let\o\SaveSlashedo%
+ \let\L\SaveBarredL%
+ \let\l\SaveBarredl%
+ \let\ss\SaveEszett%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\encodetoken}
+% The command |\encodetoken| assigns the supplied token to one of three
+% reserved \stringstrings user variables (the optional argument dictates
+% which user variable). Once encoded, the supplied token cannot be used
+% in the normal way, but only in stringstrings routines, unless and
+% until it is decoded.
+% \begin{macrocode}
+\newcommand\encodetoken[2][1]{%
+ \if 1#1%
+ \let\Uvari#2%
+ \let#2\uvari\else
+ \if 2#1%
+ \let\Uvarii#2%
+ \let#2\uvarii\else
+ \if 3#1%
+ \let\Uvariii#2%
+ \let#2\uvariii%
+ \fi
+ \fi
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\decodetoken}
+% The command |\decodetoken| deassigns the supplied token from the
+% reserved \stringstrings user variables (the optional argument dictates
+% which user variable), so that the token may be used in the normal way
+% again.
+% \begin{macrocode}
+\newcommand\decodetoken[2][1]{%
+ \if 1#1%
+ \let#2\Uvari%
+ \def\Uvari{Uvari}\else
+ \if 2#1%
+ \let#2\Uvarii%
+ \def\Uvarii{Uvarii}\else
+ \if 3#1%
+ \let#2\Uvariii%
+ \def\Uvariii{Uvariii}%
+ \fi
+ \fi
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macrocode}
+%%%%% COMMANDS TO MANIPULATE STRINGS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \end{macrocode}
+
+% In the next group of commands, the result is always stored in an
+% expandable string, |\thestring|. Expandable means that |\thestring| can
+% be put into a subsequent |\edef{}| command. Additionally, the
+% optional first argument can be used to cause three actions (verbose,
+% encoded, or quiet):
+% \begin{enumerate}
+% \item [|=v|] |\thestring| is decoded (final result);
+% print it immediately (default)
+% \item [|=e|] |\thestring| is encoded (intermediate result);
+% don't print it
+% \item [|=q|] |\thestring| is decoded (final result),
+% but don't print it
+% \end{enumerate}
+% \begin{macro}{\substring}
+% The command |\substring| is the brains of this package\ldots
+% It is used to acquire a substring from a given string, along with
+% performing specified character manipulations along the way.
+% Its strategy is fundamental to the \stringstrings
+% package: sequentially rotate the 1st character of the
+% string to the end of the string, until the desired substring resides
+% at end of rotated string. Then, gobble up the leading part of
+% string until only the desired substring is left.
+% \begin{macrocode}
+\newcommand\substring[4][v]{\+%
+% \end{macrocode}
+% Obtain the string length of the string to be manipulated and store
+% it in |@stringsize|.
+% \begin{macrocode}
+ \@getstringlength{#2}{@stringsize}%
+% \end{macrocode}
+% First,
+% |\@decodepointer| is used to convert indirect references like |$|
+% and |$-3| into integers.
+% \begin{macrocode}
+ \@decodepointer{#3}%
+ \setcounter{@fromindex}{\@fromtoindex}%
+ \@decodepointer{#4}%
+ \setcounter{@toindex}{\@fromtoindex}%
+% \end{macrocode}
+% Determine the number of characters to rotate to the end of the string
+% and the number of characters to then gobble from it, in order to leave
+% the desired substring.
+% \begin{macrocode}
+ \setcounter{@gobblesize}{\value{@stringsize}}%
+ \ifthenelse{\value{@toindex} > \value{@stringsize}}%
+ {\setcounter{@maxrotation}{\value{@stringsize}}}%
+ {\setcounter{@maxrotation}{\value{@toindex}}}%
+ \addtocounter{@gobblesize}{-\value{@maxrotation}}%
+ \addtocounter{@gobblesize}{\value{@fromindex}}%
+ \addtocounter{@gobblesize}{-1}%
+% \end{macrocode}
+% Prepare for the string rotation by initializing counters, setting the
+% targeted string into the working variable, |\rotatingword|, and set
+% the encoding treatment specified.
+% \begin{macrocode}
+ \setcounter{@letterindex}{0}%
+ \edef\rotatingword{#2}%
+ \def\EncodingTreatment{#1}%
+% \end{macrocode}
+% If capitalization (first character of string or of each word)
+% was specified, the
+% trigger for 1st-character capitalization will be set. However,
+% the treatments for the alphabetic characters for the remainder of the
+% string must be saved and reinstituted after the first character is
+% capitalized.
+% \begin{macrocode}
+ \if 0\CapitalizeString%
+% DO NOT SET CAPITALIZE TRIGGER FOR FIRST CHARACTER
+ \setcounter{@capstrigger}{0}%
+ \else
+% SAVE CERTAIN TREATMENTS FOR LATER RESTORATION
+ \let\SaveAlphaTreatment\AlphaTreatment%
+ \let\SaveAlphaCapsTreatment\AlphaCapsTreatment%
+% SET CAPITALIZE TRIGGER FOR FIRST CHARACTER
+ \setcounter{@capstrigger}{1}%
+ \@forcecapson%
+ \fi
+% \end{macrocode}
+% The command |\@defineactions| looks at the defined treatments
+% and specifies how each of the \stringstrings encoded
+% characters should be handled (\ie left alone, removed, modified,
+% \etc).
+% \begin{macrocode}
+\@defineactions%
+% \end{macrocode}
+% Here begins the primary loop of |\substring| in which characters of
+% |\rotatingword| are successively moved (and possibly manipulated)
+% from the first character of the string to the last. |@letterindex| is
+% the running index defining how many characters have been operated on.
+% \begin{macrocode}
+ \whiledo{\value{@letterindex} < \value{@maxrotation}}{%
+ \addtocounter{@letterindex}{1}%
+% \end{macrocode}
+% When |\CapitalizeString| equals 1, only the first character of the
+% string is capitalized. When it equals 2, every word in the string
+% is capitalized. When equal to 2, this bit of code looks for the
+% blankspace that follows the end of a word, and uses it to reset the
+% capitalization trigger for the next non-blank character.
+% \begin{macrocode}
+% IF NEXT CHARACTER BLANK WHILE \CapitalizeString=2,
+% SET OR KEEP ALIVE TRIGGER.
+ \if 2\CapitalizeString%
+ \isnextbyte[q]{\EncodedBlankSpace}{\rotatingword}%
+ \if F\theresult\isnextbyte[q]{\BlankSpace}{\rotatingword}\fi%
+ \if T\theresult%
+ \if 0\arabic{@capstrigger}%
+ \@forcecapson%
+ \@defineactions%
+ \fi
+ \setcounter{@capstrigger}{2}%
+ \fi
+ \fi
+% \end{macrocode}
+% Is the next character an encoded symbol? If it is a normal character,
+% simply rotate it to the end of the string.
+% If it is an encoded symbol however, its
+% treatment will depend on whether it will be gobbled away or end up
+% in the final substring. If it will be gobbled away, leave it encoded,
+% because the gobbling routine knows how to gobble encoded characters.
+% If it will end up in the substring, manipulate it according to the
+% encoding rules set in |\@defineactions| and rotate it.
+% \begin{macrocode}
+% CHECK IF NEXT CHARACTER IS A SYMBOL
+ \isnextbyte[q]{\EscapeChar}{\rotatingword}%
+ \ifthenelse{\value{@letterindex} < \value{@fromindex}}%
+ {%
+% THIS CHARACTER WILL EVENTUALLY BE GOBBLED
+ \if T\theresult%
+% ROTATE THE ESCAPE CHARACTER, WHICH WILL LEAVE THE SYMBOL ENCODED
+% FOR PROPER GOBBLING (ESCAPE CHARACTER DOESN'T COUNT AS A LETTER)
+ \edef\rotatingword{\@rotate{\rotatingword}}%
+ \addtocounter{@letterindex}{-1}%
+ \else
+% NORMAL CHARACTER OR SYMBOL CODE... ROTATE IT
+ \edef\rotatingword{\@rotate{\rotatingword}}%
+ \fi
+ }%
+ {%
+% THIS CHARACTER WILL EVENTUALLY MAKE IT INTO SUBSTRING
+ \if T\theresult%
+% ROTATE THE SYMBOL USING DEFINED TREATMENT RULES
+ \edef\rotatingword{\ESCrotate{\expandafter\@gobble\rotatingword}}%
+ \else
+% NORMAL CHARACTER... ROTATE IT
+ \edef\rotatingword{\@rotate{\rotatingword}}%
+ \fi
+ }%
+% \end{macrocode}
+% Here, the capitalization trigger persistently tries to turn
+% itself off with each loop
+% through the string rotation. Only if the earlier code found the
+% rotation to be pointing to the blank character(s) between words while
+% |\CapitalizeString| equals 2 will the trigger be prevented from
+% extinguishing itself.
+% \begin{macrocode}
+% DECREMENT CAPITALIZATION TRIGGER TOWARDS 0, EVERY TIME THROUGH LOOP
+ \if 0\arabic{@capstrigger}%
+ \else
+ \addtocounter{@capstrigger}{-1}%
+ \if 0\arabic{@capstrigger}\@relaxcapson\fi
+ \fi
+% \end{macrocode}
+% In addition to the standard |\substring| calls in which fixed
+% substring limits are specified (which in turn fixes the number of
+% character rotations to be executed), some \stringstrings commands
+% want the rotations to continue until a blankspace is located.
+% This bit of code looks for that blank space, if that was the option
+% requested. Once found, the rotation will stop. However, depending
+% on the value of |\SeekBlankSpace|, the remainder of the string may
+% either be retained or discarded.
+% \begin{macrocode}
+% IF SOUGHT SPACE IS FOUND, END ROTATION OF STRING
+ \if 0\SeekBlankSpace\else
+ \isnextbyte[q]{\EncodedBlankSpace}{\rotatingword}%
+ \if F\theresult\isnextbyte[q]{\BlankSpace}{\rotatingword}\fi%
+ \if T\theresult%
+ \if 1\SeekBlankSpace%
+% STOP ROTATION, KEEP REMAINDER OF STRING
+ \setcounter{@maxrotation}{\value{@letterindex}}%
+ \else
+% STOP ROTATION, THROW AWAY REMAINDER OF STRING
+ \addtocounter{@gobblesize}{\value{@maxrotation}}%
+ \setcounter{@maxrotation}{\value{@letterindex}}%
+ \addtocounter{@gobblesize}{-\value{@maxrotation}}%
+ \fi
+ \fi
+ \fi
+ }%
+% \end{macrocode}
+% The loop has ended.\\
+% Gobble up the first |@gobblesize| characters (not bytes!)~of the string,
+% which should leave the desired substring as the remainder. If the
+% mode is verbose, print out the resulting substring.
+% \begin{macrocode}
+% GOBBLE AWAY THAT PART OF STRING THAT ISN'T PART OF REQUESTED SUBSTRING
+ \@gobblearg{\rotatingword}{\arabic{@gobblesize}}%
+ \edef\thestring{\gobbledword}%
+ \if v#1\thestring\fi%
+\?}
+% \end{macrocode}
+% \end{macro}
+
+% Many of the following commands are self-expanatory. The recipe they
+% follow is to use |\Treatments| to specify how different character
+% classes are to be manipulated, and then to call upon |\substring| to
+% effect the desired manipulation. Treatments are typically
+% re-defaulted at the conclusion of the command, which is why the user,
+% if desiring special treatments, should specify those treatments
+% immediately before a call to |\substring|.
+% \begin{macro}{\caseupper}
+% \begin{macrocode}
+% Convert Lower to Uppercase; retain all symbols, numerals,
+% punctuation, and blanks.
+\newcommand\caseupper[2][v]{%
+ \Treatments{1}{2}{1}{1}{1}{1}%
+ \substring[#1]{#2}{1}{\@MAXSTRINGSIZE}%
+ \defaultTreatments%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\caselower}
+% \begin{macrocode}
+% Convert Upper to Lowercase; retain all symbols, numerals,
+% punctuation, and blanks.
+\newcommand\caselower[2][v]{%
+ \Treatments{2}{1}{1}{1}{1}{1}%
+ \substring[#1]{#2}{1}{\@MAXSTRINGSIZE}%
+ \defaultTreatments%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\solelyuppercase}
+% \begin{macrocode}
+% Convert Lower to Uppercase; discard symbols, numerals, and
+% punctuation, but keep blanks.
+\newcommand\solelyuppercase[2][v]{%
+ \Treatments{1}{2}{0}{0}{0}{1}%
+ \substring[#1]{#2}{1}{\@MAXSTRINGSIZE}%
+ \defaultTreatments%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\solelylowercase}
+% \begin{macrocode}
+% Convert Upper to Lowercase; discard symbols, numerals, and
+% punctuation, but keep blanks.
+\newcommand\solelylowercase[2][v]{%
+ \Treatments{2}{1}{0}{0}{0}{1}%
+ \substring[#1]{#2}{1}{\@MAXSTRINGSIZE}%
+ \defaultTreatments%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\changecase}
+% \begin{macrocode}
+% Convert Lower to Uppercase & Upper to Lower; retain all symbols, numerals,
+% punctuation, and blanks.
+\newcommand\changecase[2][v]{%
+ \Treatments{2}{2}{1}{1}{1}{1}%
+ \substring[#1]{#2}{1}{\@MAXSTRINGSIZE}%
+ \defaultTreatments%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\noblanks}
+% \begin{macrocode}
+% Remove blanks; retain all else.
+\newcommand\noblanks[2][v]{%
+ \Treatments{1}{1}{1}{1}{1}{0}%
+ \substring[#1]{#2}{1}{\@MAXSTRINGSIZE}%
+ \defaultTreatments%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\nosymbolsnumerals}
+% \begin{macrocode}
+% Retain case; discard symbols & numerals; retain
+% punctuation & blanks.
+\newcommand\nosymbolsnumerals[2][v]{%
+ \Treatments{1}{1}{1}{0}{0}{1}%
+ \substring[#1]{#2}{1}{\@MAXSTRINGSIZE}%
+ \defaultTreatments%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\alphabetic}
+% \begin{macrocode}
+% Retain case; discard symbols, numerals &
+% punctuation; retain blanks.
+\newcommand\alphabetic[2][v]{%
+ \Treatments{1}{1}{0}{0}{0}{1}%
+ \substring[#1]{#2}{1}{\@MAXSTRINGSIZE}%
+ \defaultTreatments%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\capitalize}
+% The command |\CapitalizeString| is not set by |\Treatments|, but
+% only in |\capitalize| or in |\capitalizewords|.
+% \begin{macrocode}
+% Capitalize first character of string,
+\newcommand\capitalize[2][v]{%
+ \defaultTreatments%
+ \def\CapitalizeString{1}%
+ \substring[#1]{#2}{1}{\@MAXSTRINGSIZE}%
+ \def\CapitalizeString{0}%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\capitalizewords}
+% \begin{macrocode}
+% Capitalize first character of each word in string,
+\newcommand\capitalizewords[2][v]{%
+ \defaultTreatments%
+ \def\CapitalizeString{2}%
+ \substring[#1]{#2}{1}{\@MAXSTRINGSIZE}%
+ \def\CapitalizeString{0}%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\reversestring}
+% Reverses a string from back to front. To do this, a loop is set
+% up in which characters are grabbed one at a time from the end of the
+% given string, working towards the beginning of the string. The
+% grabbed characters are concatenated onto the end of the working
+% string, |\@reversedstring|. By the time the loop is complete
+% |\@reversedstring| fully represents the reversed string. The result
+% is placed into |\thestring|.
+% \begin{macrocode}
+% REVERSES SEQUENCE OF CHARACTERS IN STRING
+\newcommand\reversestring[2][v]{%
+ \def\@reversedstring{}%
+ \+\@getstringlength{#2}{@@stringsize}\?%
+ \setcounter{@@@letterindex}{\the@@stringsize}%
+ \whiledo{\the@@@letterindex > 0}{%
+ \if e#1%
+ \substring[e]{#2}{\the@@@letterindex}{\the@@@letterindex}%
+ \else
+ \substring[q]{#2}{\the@@@letterindex}{\the@@@letterindex}%
+ \fi
+ \edef\@reversedstring{\@reversedstring\thestring}%
+ \addtocounter{@@@letterindex}{-1}%
+ }%
+ \edef\thestring{\@reversedstring}%
+ \if v#1\thestring\fi%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\convertchar}
+% Takes a string, and replaces each occurance of a specified character
+% with a replacement string. The only complexity in the logic is that
+% a separate replacement algorithm exists depending on whether the
+% specified character to be replaced is a normal character or an
+% encoded character.
+% \begin{macrocode}
+% TAKES A STARTING STRING #2 AND SUBSTITUTES A SPECIFIED STRING #4
+% FOR EVERY OCCURANCE OF A PARTICULAR GIVEN CHARACTER #3. THE
+% CHARACTER TO BE CONVERTED MAY BE EITHER A PLAIN CHARACTER OR
+% AN ENCODABLE SYMBOL.
+\newcommand\convertchar[4][v]{%
+ \+%
+ \edef\encodedstring{#2}%
+ \edef\encodedfromarg{#3}%
+ \edef\encodedtoarg{#4}%
+ \?%
+ \isnextbyte[q]{\EscapeChar}{\encodedfromarg}%
+ \if F\theresult%
+% PLAIN "FROM" ARGUMENT
+ \@convertbytetostring[#1]{\encodedstring}{#3}{\encodedtoarg}%
+ \else
+% ENCODABLE "FROM" ARGUMENT
+ \@convertsymboltostring[#1]{\encodedstring}%
+ {\expandafter\@gobble\encodedfromarg}{\encodedtoarg}%
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\convertword}
+% Takes a string, a replaces each occurance of a specified string
+% with a replacement string.
+% \begin{macrocode}
+\newcounter{@@matchloc}
+% LIKE \convertchar, EXCEPT FOR WORDS
+\newcommand\convertword[4][v]{%
+ \+\edef\@@teststring{#2}%
+ \edef\@fromstring{#3}%
+ \edef\@tostring{#4}\?%
+ \edef\@@@teststring{\@@teststring}%
+ \def\@buildfront{}%
+ \edef\@buildstring{\@@teststring}%
+ \setcounter{@charsfound}{0}%
+ \whiledo{\the@charsfound > -1}{%
+% \end{macrocode}
+% Seek occurance of |\@fromstring| in larger |\@@teststring|
+% \begin{macrocode}
+ \whereisword[q]{\@@teststring}{\@fromstring}%
+ \setcounter{@matchloc}{\theresult}%
+ \ifthenelse{\the@matchloc = 0}%
+ {%
+% \end{macrocode}
+% Not found. Done.
+% \begin{macrocode}
+ \setcounter{@charsfound}{-1}%
+ }%
+ {%
+% \end{macrocode}
+% Potential matchstring.
+% \begin{macrocode}
+ \addtocounter{@charsfound}{1}%
+% \end{macrocode}
+% Grab current test string from beginning to point just prior
+% to potential match.
+% \begin{macrocode}
+ \addtocounter{@matchloc}{-1}%
+ \substring[e]{\@@@teststring}{1}{\the@matchloc}%
+% \end{macrocode}
+% The string |\@buildfront| is the total original string, with
+% string substitutions, from character 1 to current potential match.
+% \begin{macrocode}
+ \edef\@buildfront{\@buildfront\thestring}%
+% \end{macrocode}
+% See if potential matchstring takes us to end-of-string\ldots
+% \begin{macrocode}
+ \addtocounter{@matchloc}{1}%
+ \addtocounter{@matchloc}{\the@matchsize}%
+ \ifthenelse{\the@matchloc > \the@@@stringsize}%
+ {%
+% \end{macrocode}
+% \ldots if so, then match is last one in string. Tack on replacement
+% string to |\@buildfront| to create final string. Exit.
+% \begin{macrocode}
+ \setcounter{@charsfound}{-1}%
+ \edef\@buildstring{\@buildfront\@tostring}%
+ }%
+ {%
+% \end{macrocode}
+% \ldots if not, redefine current teststring to begin at point following
+% the current substitution. Make substitutions to current
+% |\@buildstring| and |\@buildfront|. Loop through logic again on new
+% teststring.
+% \begin{macrocode}
+ \substring[e]{\@@@teststring}{\the@matchloc}{\@MAXSTRINGSIZE}%
+ \edef\@@teststring{\thestring}%
+ \edef\@@@teststring{\@@teststring}%
+ \edef\@buildstring{\@buildfront\@tostring\@@@teststring}%
+ \edef\@buildfront{\@buildfront\@tostring}%
+ }%
+ }%
+ }%
+ \substring[#1]{\@buildstring}{1}{\@MAXSTRINGSIZE}%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\resetlcwords}
+% Removes all words from designated ``lower-case words'' list. This can
+% be useful because large lists of lower-case words can significantly
+% slow-down the function of |\capitalizetitle|.
+% \begin{macrocode}
+\setcounter{@lcwords}{0}
+% RESET LOWER-CASE WORD COUNT; START OVER
+\newcommand\resetlcwords[0]{%
+ \setcounter{@lcwords}{0}%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\addlcwords}
+% Add words to the list of designated ``lower-case words'' which will
+% not be capitalized by |\capitalizetitle|. The input should consist of
+% space-separated words, which are, in turn, passed on to |\addlcword|.
+% \begin{macrocode}
+% PROVIDE LIST OF SPACE-SEPARATED WORDS TO REMAIN LOWERCASE IN TITLES
+\newcommand\addlcwords[1]{%
+ \getargs{#1}%
+ \setcounter{@wordindex}{0}%
+ \whiledo{\value{@wordindex} < \narg}{%
+ \addtocounter{@wordindex}{1}%
+ \addlcword{\csname arg\roman{@wordindex}\endcsname}%
+ }
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\addlcword}
+% Add a word to the list of designated ``lower-case words'' which will
+% not be capitalized by |\capitalizetitle|.
+% \begin{macrocode}
+% PROVIDE A SINGLE WORD TO REMAIN LOWERCASE IN TITLES
+\newcommand\addlcword[1]{%
+ \addtocounter{@lcwords}{1}%
+ \expandafter\edef\csname lcword\roman{@lcwords}\endcsname{#1}
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\capitalizetitle}
+% Makes every word of a multi-word input string capitalized, except for
+% specifically noted ``lower-case words'' (examples might include
+% prepositions, conjunctions, \etc). The first word of the input string
+% is capitalized, while lower-case words, previously designated with
+% |\addlcword| and |\addlcwords|, are left in lower case.
+% \begin{macrocode}
+% CAPITALIZE TITLE, EXCEPT FOR DESIGNATED "LOWER-CASE" WORDS
+\newcommand\capitalizetitle[2][v]{%
+% First, capitalize every word (save in encoded form, not printed)
+ \capitalizewords[e]{#2}%
+% Then lowercase words that shouldn't be capitalized, like articles,
+% prepositions, etc. (save in encoded form, not printed)
+ \setcounter{@wordindex}{0}%
+ \whiledo{\value{@wordindex} < \value{@lcwords}}{%
+ \addtocounter{@wordindex}{1}%
+ \edef\mystring{\thestring}%
+ \edef\lcword{\csname lcword\roman{@wordindex}\endcsname}%
+ \capitalize[e]{\lcword}%
+ \edef\ucword{\thestring}%
+ \convertword[e]{\mystring}{\ucword~}{\lcword~}%
+ }
+% Finally, recapitalize the first word of the Title, and print it.
+ \capitalize[#1]{\thestring}%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\rotateword}
+% Moves first word of given string |#2| to end of string, including
+% leading and trailing blank spaces.
+% \begin{macrocode}
+\newcommand\rotateword[2][v]{%
+ \+\edef\thestring{#2}\?%
+% \end{macrocode}
+% Rotate leading blank spaces to end of string
+% \begin{macrocode}
+ \@treatleadingspaces[e]{\thestring}{}%
+% \end{macrocode}
+% Define end-of-rotate condition for |\substring| as next blank space
+% \begin{macrocode}
+ \def\SeekBlankSpace{1}%
+% \end{macrocode}
+% Leave rotated characters alone
+% \begin{macrocode}
+ \Treatments{1}{1}{1}{1}{1}{1}%
+% \end{macrocode}
+% Rotate to the next blank space or the end of string, whichever comes
+% first.
+% \begin{macrocode}
+ \substring[e]{\thestring}{1}{\@MAXSTRINGSIZE}%
+% \end{macrocode}
+% Rotate trailing spaces.
+% \begin{macrocode}
+ \@treatleadingspaces[#1]{\thestring}{}%
+ \defaultTreatments%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\removeword}
+% Remove the first word of given string |#2|, including leading and
+% trailing spaces. Note that logic is identical to |\rotateword|,
+% except that affected spaces and characters are removed instead of
+% being rotated.
+% \begin{macrocode}
+\newcommand\removeword[2][v]{%
+ \+\edef\thestring{#2}\?%
+% \end{macrocode}
+% The |{x}| final argument indicates to delete leading spaces.
+% \begin{macrocode}
+ \@treatleadingspaces[e]{\thestring}{x}%
+ \def\SeekBlankSpace{1}%
+% \end{macrocode}
+% The Treatments are specified to remove all characters.
+% \begin{macrocode}
+ \Treatments{0}{0}{0}{0}{0}{0}%
+ \substring[e]{\thestring}{1}{\@MAXSTRINGSIZE}%
+% \end{macrocode}
+% Trailing spaces are also deleted.
+% \begin{macrocode}
+ \@treatleadingspaces[#1]{\thestring}{x}%
+ \defaultTreatments%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\getnextword}
+% A special case of |\getaword|, where word-to-get is specified as
+% ``1''.
+% \begin{macrocode}
+% GETS NEXT WORD FROM STRING #2.
+% NOTE: ROTATES BACK TO BEGINNING, AFTER STRING OTHERWISE EXHAUSTED
+\newcommand\getnextword[2][v]{%
+ \getaword[#1]{#2}{1}%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\getaword}
+% Obtain a specified word number (|#3|) from string |#2|. Logic: rotate
+% leading spaces to end of string; then loop |#3|~--~1 times through
+% |\rotateword|. Finally, get next word.
+% \begin{macrocode}
+% GETS WORD #3 FROM STRING #2.
+% NOTE: ROTATES BACK TO BEGINNING, AFTER STRING OTHERWISE EXHAUSTED
+\newcommand\getaword[3][v]{%
+ \setcounter{@wordindex}{1}%
+ \+\edef\thestring{#2}\?%
+ \@treatleadingspaces[e]{\thestring}{}%
+ \whiledo{\value{@wordindex} < #3}{%
+ \rotateword[e]{\thestring}%
+ \addtocounter{@wordindex}{1}%
+ }%
+ \@getnextword[#1]{\thestring}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\rotateleadingspaces}
+% Rotate leading spaces of string |#2| to the end of string.
+% \begin{macrocode}
+\newcommand\rotateleadingspaces[2][v]{%
+ \@treatleadingspaces[#1]{#2}{}%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\removeleadingspaces}
+% Remove leading spaces from string |#2|.
+% \begin{macrocode}
+\newcommand\removeleadingspaces[2][v]{%
+ \@treatleadingspaces[#1]{#2}{x}%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\stringencode}
+% \begin{macrocode}
+% ENCODE STRING; UNLIKE OTHER COMMANDS, DEFAULT IS NO PRINT
+\newcommand\stringencode[2][e]{%
+ \defaultTreatments%
+ \substring[#1]{#2}{1}{\@MAXSTRINGSIZE}%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\stringdecode}
+% \begin{macrocode}
+% DECODE STRING
+\newcommand\stringdecode[2][v]{%
+ \defaultTreatments%
+ \substring[#1]{#2}{1}{\@MAXSTRINGSIZE}%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\gobblechar}
+% Remove first character (not byte!) from string |#2|. Unlike just about
+% all other \stringstrings commands, result is retokenized and not
+% expanded.
+% \begin{macrocode}
+% SINGLE-CHARACTER VERSION OF \gobblechars. IN THIS CASE, TWO-BYTE
+% ESCAPE SEQUENCES, WHEN ENCOUNTERED, COUNT AS A SINGLE GOBBLE.
+\newcommand\gobblechar[2][q]{\+%
+ \@gobblearg{#2}{1}%
+ \?\retokenize[#1]{\gobbledword}%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\gobblechars}
+% Remove first |#3| characters (not bytes!) from string |#2|.
+% Unlike just about all other \stringstrings commands, result is
+% retokenized and not expanded.
+% \begin{macrocode}
+% USER CALLABLE VERSION OF \@gobblearg. TURNS ON REENCODING.
+% GOBBLE FIRST #3 CHARACTERS FROM STRING #2. TWO-BYTE
+% ESCAPE SEQUENCES, WHEN ENCOUNTERED, COUNT AS A SINGLE GOBBLE.
+\newcommand\gobblechars[3][q]{\+%
+ \@gobblearg{#2}{#3}%
+ \?\retokenize[#1]{\gobbledword}%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\retokenize}
+% One of the key \stringstrings routines that provides several
+% indispensible functions. Its function is to take an encoded string
+% |#2| that has been given, and repopulate the string with its \LaTeX{}
+% tokens in a |\def| form (not an expanded |\edef| form). It is
+% useful if required to operate on a string outside of the
+% \stringstrings library routines, following a \stringstrings
+% manipulation. It is also useful to display certain tokens which
+% cannot be manipulated in expanded form. See
+% Table~\ref{tbl:prob} for a list of tokens that will only work when the
+% resulting string is retokenized (and not expanded).
+%
+% Logic: Loop through each character of given string |#2|. Each
+% successive character of the string is retokenized as |\inexttoken|,
+% |\iinexttoken|, |\iiinexttoken|, |\ivnexttoken|, \etc, respectively.
+% Then a series of strings are formed as\\
+% \\
+% |\def\buildtoken{}|\\
+% |\def\buildtokeni{\builtoken\inexttoken}|\\
+% |\def\buildtokenii{\builtokeni\iinexttoken}|\\
+% |\def\buildtokeniii{\builtokenii\iiinexttoken}|\\
+% |\def\buildtokeniv{\builtokeniii\ivnexttoken}|\\
+% \\
+% The last in the sequence of |\builtoken...| strings (renamed
+% |\buildtokenq|) is the retokenized
+% version of string |#2|.
+% \begin{macrocode}
+% CONVERTS ENCODED STRING BACK INTO TOKENIZED FORM (i.e., def'ED).
+\newcommand\retokenize[2][q]{\+%
+ \edef\@svstring{#2}%
+ \edef\buildtoken{}%
+ \@getstringlength{#2}{@@stringsize}\?%
+ \setcounter{@@letterindex}{0}%
+ \whiledo{\the@@letterindex < \the@@stringsize}{%
+ \setcounter{@previousindex}{\the@@letterindex}%
+ \addtocounter{@@letterindex}{1}%
+ \substring[e]{\@svstring}{\the@@letterindex}{\the@@letterindex}%
+ \@retokenizechar{\thestring}{\roman{@@letterindex}nexttoken}%
+ \expandafter\def\csname buildtoken\roman{@@letterindex}%
+ \expandafter\endcsname\expandafter%
+ {\csname buildtoken\roman{@previousindex}\expandafter\endcsname%
+ \csname\roman{@@letterindex}nexttoken\endcsname}%
+ }%
+ \expandafter\def\expandafter\buildtokenq\expandafter{%
+ \csname buildtoken\roman{@@letterindex}\endcsname}%
+ \def\thestring{\buildtokenq}%
+ \if v#1\thestring\fi
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macrocode}
+% %%%%% COMMANDS TO EXTRACT STRING INFORMATION %%%%%%%%%%%%%%%%%%%%%%%%%%
+% \end{macrocode}
+
+% The following group of commands extract information about a string,
+% and store the result in a string called |\theresult|. Since the
+% result is not a substring, a \textit{mode} of |[e]| carries no
+% meaning. Only |[v]| and |[q]| modes apply here.
+% \begin{macro}{\stringlength}
+% Returns the length of the given string in \textit{characters}, not
+% \textit{bytes}.
+% \begin{macrocode}
+% USER CALLABLE VERSION of \@getstringlength:
+% GET'S STRING LENGTH OF [#2], PUTS RESULT IN \theresult. PRINTS RESULT
+% UNLESS IN QUIET [q] MODE.
+\newcommand\stringlength[2][v]{\+%
+ \@getstringlength{#2}{@@stringsize}%
+ \edef\theresult{\arabic{@@stringsize}}%
+ \if v#1\theresult\fi%
+\?}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\findchars}
+% Find number of occurances of character |#3| in string |#2|.
+% \begin{macrocode}
+% CHECKS TO SEE IF THE CHARACTER [#3] APPEARS ANYWHERE IN STRING [#2].
+% THE NUMBER OF OCCURANCES IS PRINTED OUT, EXCEPT WHEN [#1]=q, QUIET
+% MODE. RESULT IS ALSO STORED IN \theresult . TO FIND SPACES, ARG3
+% SHOULD BE SET TO {~}, NOT { }.
+\newcommand\findchars[3][v]{\+%
+ \@getstringlength{#2}{@@stringsize}%
+ \setcounter{@charsfound}{0}%
+ \setcounter{@@letterindex}{0}%
+% \end{macrocode}
+% Loop through each character of |#2|.
+% \begin{macrocode}
+ \whiledo{\value{@@letterindex} < \value{@@stringsize}}{%
+ \addtocounter{@@letterindex}{1}%
+% \end{macrocode}
+% Test if the |@@letterindex| character of string |#2| equals |#3|.
+% If so, add to tally.
+% \begin{macrocode}
+ \testmatchingchar{#2}{\arabic{@@letterindex}}{#3}%
+ \ifmatchingchar\addtocounter{@charsfound}{1}\fi
+ }%
+ \edef\theresult{\arabic{@charsfound}}%
+ \if q#1\else\theresult\fi%
+\?}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\whereischar}
+% Similar to |\findchars|, but instead finds first occurance of match
+% character |#3| within |#2| and returns its location within |#2|.
+% \begin{macrocode}
+% CHECKS TO FIND LOCATION OF FIRST OCCURANCE OF [#3] IN STRING [#2].
+% THE LOCATION IS PRINTED OUT, EXCEPT WHEN [#1]=q, QUIET
+% MODE. RESULT IS ALSO STORED IN \theresult . TO FIND SPACES, ARG3
+% SHOULD BE SET TO {~}, NOT { }.
+\newcommand\whereischar[3][v]{\+%
+ \@getstringlength{#2}{@@stringsize}%
+ \edef\@theresult{0}%
+ \setcounter{@@letterindex}{0}%
+% \end{macrocode}
+% Loop through characters of |#2| sequentially.
+% \begin{macrocode}
+ \whiledo{\value{@@letterindex} < \value{@@stringsize}}{%
+ \addtocounter{@@letterindex}{1}%
+% \end{macrocode}
+% Look for match. If found, save character-location index,
+% and reset loop index to break from loop.
+% \begin{macrocode}
+ \testmatchingchar{#2}{\arabic{@@letterindex}}{#3}%
+ \ifmatchingchar%
+ \edef\@theresult{\the@@letterindex}%
+ \setcounter{@@letterindex}{\the@@stringsize}%
+ \fi
+ }%
+ \edef\theresult{\@theresult}%
+ \if q#1\else\theresult\fi%
+\?}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\whereisword}
+% Finds location of specified word (|#3|) in string |#2|.
+% \begin{macrocode}
+% LIKE \whereischar, EXCEPT FOR WORDS
+\newcommand\whereisword[3][v]{\+%
+ \setcounter{@skipped}{0}%
+% \end{macrocode}
+% |\@@@@teststring| initially contains |#2|. As false alarms are
+% located, the string will be redefined to lop off initial characters
+% of string.
+% \begin{macrocode}
+ \edef\@@@@teststring{#2}%
+ \edef\@matchstring{#3}%
+ \@getstringlength{#2}{@@stringsize}%
+ \setcounter{@@@stringsize}{\value{@@stringsize}}%
+ \@getstringlength{#3}{@matchsize}%
+ \setcounter{@matchmax}{\the@@stringsize}%
+ \addtocounter{@matchmax}{-\the@matchsize}%
+ \addtocounter{@matchmax}{1}%
+ \setcounter{@flag}{0}%
+% \end{macrocode}
+% Define |\matchchar| as the first character of the match string (|#3|).
+% \begin{macrocode}
+ \substring[e]{#3}{1}{1}%
+ \edef\matchchar{\thestring}%
+ \whiledo{\the@flag = 0}{%
+% \end{macrocode}
+% Look for first character of match string within |\@@@@teststring|.
+% \begin{macrocode}
+ \whereischar[q]{\@@@@teststring}{\matchchar}%
+ \setcounter{@matchloc}{\theresult}%
+ \ifthenelse{\equal{0}{\value{@matchloc}}}%
+% \end{macrocode}
+% If none found, we are done.
+% \begin{macrocode}
+ {%
+ \setcounter{@flag}{1}%
+ }%
+% \end{macrocode}
+% If |\matchchar| is found, must determine if it is the beginning
+% of the match string, or just an extraneous match (\ie false alarm).
+% Extract substring
+% of |\@@@@teststring|, of a size equal to the match string.
+% Compare this extracted string with the match string.
+% \begin{macrocode}
+ {%
+ \setcounter{@matchend}{\theresult}%
+ \addtocounter{@matchend}{\value{@matchsize}}%
+ \addtocounter{@matchend}{-1}%
+ \substring[e]{\@@@@teststring}{\the@matchloc}{\the@matchend}%
+ \ifthenelse{\equal{\thestring}{\@matchstring}}%
+% \end{macrocode}
+% Found a match! Save the match location
+% \begin{macrocode}
+ {%
+ \setcounter{@flag}{1}%
+ \addtocounter{@matchloc}{\the@skipped}%
+ \edef\theresult{\the@matchloc}%
+ }%
+% \end{macrocode}
+% False alarm. Determine if lopping off the leading characters of
+% |\@@@@teststring| (to discard the false-alarm occurance) is feasible.
+% If lopping would take one past the end of the string,
+% then no match is possible. If lopping permissible, redefine the
+% string |\@@@@teststring|, keeping track of the total number of
+% lopped-off characters in the counter |@skipped|.
+% \begin{macrocode}
+ {%
+ \addtocounter{@skipped}{\the@matchloc}%
+ \addtocounter{@matchloc}{1}%
+ \ifthenelse{\value{@matchloc} > \value{@matchmax}}%
+ {%
+ \setcounter{@flag}{1}%
+ \edef\theresult{0}%
+ }%
+ {%
+ \substring[e]{\@@@@teststring}{\the@matchloc}{\@MAXSTRINGSIZE}%
+ \edef\@@@@teststring{\thestring}%
+ }%
+ }%
+ }%
+ }%
+ \if q#1\else\theresult\fi%
+\?}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\findwords}
+% Finds the number of occurances of a word within the provided string
+% \begin{macrocode}
+% LIKE \findchar, EXCEPT FOR WORDS
+\newcommand\findwords[3][v]{%
+ \+\edef\@@teststring{#2}\?%
+ \edef\@@@teststring{\@@teststring}%
+ \setcounter{@charsfound}{0}%
+ \whiledo{\the@charsfound > -1}{%
+% \end{macrocode}
+% Seek occurance of |#3| in the string to be tested
+% \begin{macrocode}
+ \whereisword[q]{\@@teststring}{#3}%
+ \setcounter{@matchloc}{\theresult}%
+ \ifthenelse{\the@matchloc = 0}%
+ {%
+% \end{macrocode}
+% None found. Break from loop.
+% \begin{macrocode}
+ \edef\theresult{\the@charsfound}%
+ \setcounter{@charsfound}{-1}%
+ }%
+ {%
+% \end{macrocode}
+% Found. Increment count.
+% \begin{macrocode}
+ \addtocounter{@charsfound}{1}%
+ \addtocounter{@matchloc}{\the@matchsize}%
+ \ifthenelse{\the@matchloc > \the@@stringsize}%
+ {%
+% \end{macrocode}
+% This "find" takes us to the end-of-string. Break from loop now.
+% \begin{macrocode}
+ \edef\theresult{\the@charsfound}%
+ \setcounter{@charsfound}{-1}%
+ }%
+ {%
+% \end{macrocode}
+% More string to search. Lop off what has been searched from string to
+% be tested, and re-loop for next search.
+% \begin{macrocode}
+ \substring[e]{\@@@teststring}{\the@matchloc}{\@MAXSTRINGSIZE}%
+ \edef\@@teststring{\thestring}%
+ \edef\@@@teststring{\@@teststring}%
+ }%
+ }%
+ }%
+ \if q#1\else\theresult\fi%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\wordcount}
+% Counts words (space-separated text) in a string. Simply removes one
+% word at a time, counting the words as it goes. With each removal,
+% checks for non-zero string size remaining.
+% \begin{macrocode}
+% WORD COUNT
+\newcommand\wordcount[2][v]{\+%
+ \edef\@argv{#2}
+ \@getstringlength{\@argv}{@stringsize}
+ \setcounter{@iargc}{0}
+ \whiledo{\value{@stringsize} > 0}{%
+ \addtocounter{@iargc}{1}%
+ \removeword[e]{\@argv}%
+ \edef\@argv{\thestring}%
+ \@getstringlength{\@argv}{@stringsize}%
+ }
+ \edef\theresult{\arabic{@iargc}}%
+ \if v#1\theresult\fi%
+\?}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\getargs}
+% Parse a string of arguments in Unix-like manner. Define |\argv| as |#2|.
+% Grabs leading word from |\argv| and puts it in |\argi|. Increment
+% argument count; remove leading word from |\argv|. Repeat this process,
+% with each new argument being placed in |\argii|, |\argiii|, |\argiv|,
+% \etc~ Continue until size of |\argv| is exhausted.
+% \begin{macrocode}
+% OBTAINS ARGUMENTS (WORDS) IN #1 ALA UNIX getarg COMMAND
+% narg CONTAINS NUMBER OF ARGUMENTS. ARGUMENTS CONTAINED IN
+% argi, argii, argiii, argiv, ETC.
+% v mode disabled
+\newcommand\getargs[2][q]{\+%
+ \if v#1\def\@mode{q}\else\def\@mode{#1}\fi%
+ \edef\@argv{#2}%
+ \@getstringlength{\@argv}{@stringsize}%
+ \setcounter{@iargc}{0}%
+ \whiledo{\value{@stringsize} > 0}{%
+ \addtocounter{@iargc}{1}%
+ \getaword[\@mode]{\@argv}{1}%
+ \expandafter\edef\csname arg\roman{@iargc}\endcsname{\thestring}%
+ \removeword[e]{\@argv}%
+ \edef\@argv{\thestring}%
+ \@getstringlength{\@argv}{@stringsize}%
+ }%
+ \edef\narg{\arabic{@iargc}}%
+\?}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macrocode}
+%%%%% COMMANDS TO TEST STRINGS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \end{macrocode}
+
+% The following group of commands test for various alphanumeric
+% string conditions.
+% \begin{macro}{\isnextbyte}
+% This routine performs a simple test to determine if the first byte of
+% string |#3| matches the byte given by |#2|. The only problem is that
+% the test can produce a false negative if the first byte of the test
+% string equals the match byte and the second byte of the test string
+% equals the |SignalChar| (defined below).
+%
+% To resolve this possibility, the test is performed twice with two
+% different values for |\SignalChar|, only one of which can produce
+% a false negative for a given test string. If the two results match,
+% then that result gives the correct answer to the question of whether
+% the first byte of |#3| equals |#2|. If, however, the two results fail
+% to match, then one can assume that one of the results is a false
+% negative, and so a ``true'' condition results.
+% \begin{macrocode}
+% \end{macrocode}
+% The following two ``signal characters,'' used for the two tests,
+% can be any two distinct characters. They are used solely
+% by |\isnextbyte|.
+% \begin{macrocode}
+\def\PrimarySignalChar{@}
+\def\SecondarySignalChar{`}
+
+% \isnextbyte NEEDS TO OPERATE IN RAW (SINGLE BYTE) MODE SO AS TO
+% PERFORM TESTS FOR PRESENCE OF \EscapeChar
+% \end{macrocode}
+% Incidentally,
+% |\isnextbyte| can and is used by \stringstrings to detect
+% multi-byte characters in a manner which may also be employed by the
+% user. To do this:
+% First, the string to be tested should be encoded. Then, |\isnextbyte|
+% may be used to check for |\EscapeChar| which is how every multi-byte
+% character will begin its encoding by the \stringstrings package.
+% If |\EscapeChar| is detected as the next character, then the string to
+% test may have its leading byte gobbled and the next character (called
+% the Escape Code) may be tested, and compared against the known
+% \stringstrings escape codes. The combination of
+% Escape-Character/Escape-Code is how all multi-byte characters are
+% encoded by the \stringstrings package.
+% \begin{macrocode}
+\newcommand\isnextbyte[3][v]{%
+% \end{macrocode}
+% Here's the first test\ldots
+% \begin{macrocode}
+ \let\SignalChar\PrimarySignalChar%
+ \edef\@x{\if #2#3\else\SignalChar\fi}%
+ \edef\@x{\if \SignalChar\@x F\else T\fi}%
+% \end{macrocode}
+% \ldots and the second
+% \begin{macrocode}
+ \let\SignalChar\SecondarySignalChar%
+ \edef\@y{\if #2#3\else\SignalChar\fi}%
+ \edef\@y{\if \SignalChar\@y F\else T\fi}%
+% \end{macrocode}
+% If the two tests produced the same result, then a comparison of |\@x\@y|
+% and |\@y\@x| will show it.
+% \begin{macrocode}
+% BECAUSE THE METHOD ONLY PRODUCES FALSE NEGATIVES, IF RESULTS DON'T
+% AGREE FROM USING TWO DIFFERENT SIGNAL CHARACTERS, RESULT MUST BE TRUE.
+ \ifthenelse{\equal{\@x\@y}{\@y\@x}}
+ {\edef\theresult{\@x}}%
+% CORRECT THE FALSE NEGATIVE
+ {\edef\theresult{T}}%
+ \if q#1\else\theresult\fi
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\testmatchingchar}
+% This routine checks for a specified match-character within a target
+% string. Unlike |\isnextbyte|, this
+% routine checks for characters (single- or multi-byte) and not just
+% individual bytes. Additionally, rather than testing the
+% match-character against the first byte of the test-string, the user
+% specifies (through |#2|) which byte of the test-string should be
+% compared to the match-character.
+%
+% This routine is not as efficient as |\isnextbyte|, but much more
+% versatile.
+% \begin{macrocode}
+% CHECKS TO SEE IF [#2]'th CHARACTER IN STRING [#1] EQUALS [#3]
+% RESULT STORED IN BOOLEAN \ifmatchingchar
+\newif\ifmatchingchar
+\newcommand\testmatchingchar[3]{%
+ \setbox0=\hbox{%
+% \end{macrocode}
+% Extract desired character from test string
+% \begin{macrocode}
+ \substring[e]{#1}{#2}{#2}\+%
+% \end{macrocode}
+% Determine if the match-character is a multi-byte symbol.
+% \begin{macrocode}
+ \isnextbyte[q]{\EscapeChar}{#3}%
+ \if T\theresult%
+% \end{macrocode}
+% Is the tested character also a multi-byte symbol?
+% \begin{macrocode}
+ \isnextbyte[q]{\EscapeChar}{\thestring}%
+ \if T\theresult%
+% \end{macrocode}
+% Yes it is\ldots Therefore, compare codes following the escape character
+% \begin{macrocode}
+ \edef\@testcode{\expandafter\@DiscardNextChar\expandafter{#3}}%
+ \edef\@teststring{\@DiscardNextChar{\thestring}}%
+ \if \@teststring\@testcode\matchingchartrue\else\matchingcharfalse\fi
+ \else
+% \end{macrocode}
+% No, we are comparing a normal character against a multi-byte symbol
+% (apples and oranges), a false comparison.
+% \begin{macrocode}
+ \global\matchingcharfalse%
+ \fi
+ \else
+% \end{macrocode}
+% No, we are comparing two normal one-byte characters, not a mult-byte
+% character.
+% \begin{macrocode}
+ \if \thestring#3\global\matchingchartrue\else\global\matchingcharfalse\fi
+ \fi}%
+\?}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\testcapitalized}
+% This routine checks to see if first character of string is
+% capitalized. The only quirk is that the routine must ascertain
+% whether that character is a single-byte character or a multi-byte
+% character.
+% \begin{macrocode}
+\newif\ifcapitalized
+\newcommand\testcapitalized[1]{\+%
+ \setbox0=\hbox{%
+ \isnextbyte[q]{\EscapeChar}{#1}%
+ \if T\theresult%
+ \def\EncodingTreatment{e}%
+ \edef\rotatingword{#1}%
+% \end{macrocode}
+% Rotate the first [multi-byte] character of the string to the end
+% of the string, lowering its case. Store as |\@stringA|.
+% \begin{macrocode}
+ \def\AlphaCapsTreatment{2}%
+ \@defineactions%
+ \edef\@stringA{\ESCrotate{\expandafter\@gobble\rotatingword}}%
+% \end{macrocode}
+% Rotate the first [multi-byte] character of the string to the end
+% of the string, retaining its case. Store as |\@stringB|.
+% \begin{macrocode}
+ \def\AlphaCapsTreatment{1}%
+ \@defineactions%
+ \edef\@stringB{\ESCrotate{\expandafter\@gobble\rotatingword}}%
+ \else
+% \end{macrocode}
+% \ldots or, if the first character is a normal one-byte character\ldots
+% Rotate the first [normal] character of the string to the end
+% of the string, lowering its case. Store as |\@stringA|.
+% \begin{macrocode}
+ \def\AlphaCapsTreatment{2}%
+ \edef\@stringA{\@rotate{#1}}%
+% \end{macrocode}
+% Rotate the first [normal] character of the string to the end
+% of the string, retaining its case. Store as |\@stringB|.
+% \begin{macrocode}
+ \def\AlphaCapsTreatment{1}%
+ \edef\@stringB{\@rotate{#1}}%
+ \fi
+% \end{macrocode}
+% Compare strings A and B, to see if changing the case of first letter
+% altered the string
+% \begin{macrocode}
+ \ifthenelse{\equal{\@stringA}{\@stringB}}%
+ {\global\capitalizedfalse}{\global\capitalizedtrue}}\?%
+ \defaultTreatments%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\testuncapitalized}
+% This routine is the complement of |\testcapitalized|. The only
+% difference is that the |\@stringA| has its case made upper for the
+% comparison, instead of lowered.
+% \begin{macrocode}
+\newif\ifuncapitalized
+\newcommand\testuncapitalized[1]{\+%
+ \setbox0=\hbox{%
+ \isnextbyte[q]{\EscapeChar}{#1}%
+ \if T\theresult%
+ \def\EncodingTreatment{e}%
+ \edef\rotatingword{#1}%
+ \def\AlphaTreatment{2}%
+ \@defineactions%
+ \edef\@stringA{\ESCrotate{\expandafter\@gobble\rotatingword}}%
+ \def\AlphaTreatment{1}%
+ \@defineactions%
+ \edef\@stringB{\ESCrotate{\expandafter\@gobble\rotatingword}}%
+ \else
+ \def\AlphaTreatment{2}%
+ \edef\@stringA{\@rotate{#1}}%
+ \def\AlphaTreatment{1}%
+ \edef\@stringB{\@rotate{#1}}%
+ \fi
+ \ifthenelse{\equal{\@stringA}{\@stringB}}%
+ {\global\uncapitalizedfalse}{\global\uncapitalizedtrue}}\?%
+ \defaultTreatments%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\testleadingalpha}
+% Test if the leading character of the string is alphabetic. This is
+% simply accomplished by checking whether the string is either
+% capitalized or uncapitalized. If non-alphabetic, it will show
+% up as false for both those tests.
+% \begin{macrocode}
+\newif\ifleadingalpha
+\newcommand\testleadingalpha[1]{%
+ \testcapitalized{#1}%
+ \ifcapitalized
+ \leadingalphatrue%
+ \else
+ \testuncapitalized{#1}%
+ \ifuncapitalized
+ \leadingalphatrue%
+ \else
+ \leadingalphafalse%
+ \fi
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\testuppercase}
+% Checks to see if all alphabetic characters in a string are uppercase.
+% Non-alphabetic characters don't affect the result, unless the string
+% is composed solely of nonalphabetic characters, in which case the test
+% results is false.
+% \begin{macrocode}
+\newif\ifuppercase
+\newcommand\testuppercase[1]{%
+ \setbox0=\hbox{%
+% \end{macrocode}
+% Strip all non-alphabetic characters. Save as |\@stringA|.
+% \begin{macrocode}
+ \Treatments{1}{1}{0}{0}{0}{0}%
+ \substring[e]{#1}{1}{\@MAXSTRINGSIZE}%
+ \edef\@stringA{\thestring}%
+% \end{macrocode}
+% Lower the case of all uppercase characters in |\@stringA|. Save as
+% |\@stringB|. Compare these two strings.
+% \begin{macrocode}
+ \def\AlphaTreatment{2}%
+ \substring[e]{#1}{1}{\@MAXSTRINGSIZE}%
+ \edef\@stringB{\thestring}%
+ \ifthenelse{\equal{\@stringA}{\@stringB}}%
+ {%
+% \end{macrocode}
+% If the strings are equal, then all the alphabetic characters in the
+% original string were uppercase. Need only check to make sure at
+% least one alphabetic character was present in the original string.
+% \begin{macrocode}
+ \@getstringlength{\@stringA}{@stringsize}%
+ \ifthenelse{\value{@stringsize} = 0}%
+ {\global\uppercasefalse}{\global\uppercasetrue}%
+ }%
+% \end{macrocode}
+% If strings are not equal, then the alphabetic characters of the
+% original string were not all uppercase. Test false.
+% \begin{macrocode}
+ {\global\uppercasefalse}}%
+ \defaultTreatments%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\ifsolelyuppercase}
+% Compare the original string to one made solely uppercase. If they are
+% equal (and not composed solely of blankspaces), then the original
+% string was solely uppercase to begin with.
+% \begin{macrocode}
+\newif\ifsolelyuppercase
+\newcommand\testsolelyuppercase[1]{%
+ \setbox0=\hbox{%
+ \stringencode{#1}%
+ \edef\@stringA{\thestring}%
+ \solelyuppercase[e]{#1}%
+ \edef\@stringB{\thestring}%
+ \ifthenelse{\equal{\@stringA}{\@stringB}}%
+ {%
+ \noblanks[q]{\@stringA}%
+ \@getstringlength{\thestring}{@stringsize}%
+ \ifthenelse{\value{@stringsize} = 0}%
+ {\global\solelyuppercasefalse}{\global\solelyuppercasetrue}%
+ }%
+ {\global\solelyuppercasefalse}}%
+ \defaultTreatments%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\testlowercase}
+% This routine is the complement to |\testuppercase|, with corresponding
+% logic.
+% \begin{macrocode}
+\newif\iflowercase
+\newcommand\testlowercase[1]{%
+ \setbox0=\hbox{%
+ \Treatments{1}{1}{0}{0}{0}{0}%
+ \substring[e]{#1}{1}{\@MAXSTRINGSIZE}%
+ \edef\@stringA{\thestring}%
+ \def\AlphaCapsTreatment{2}%
+ \substring[e]{#1}{1}{\@MAXSTRINGSIZE}%
+ \edef\@stringB{\thestring}%
+ \ifthenelse{\equal{\@stringA}{\@stringB}}%
+ {%
+ \@getstringlength{\@stringA}{@stringsize}%
+ \ifnum\value{@stringsize}= 0\relax%
+ \global\lowercasefalse\else\global\lowercasetrue\fi%
+ }%
+ {\global\lowercasefalse}}%
+ \defaultTreatments%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\testsolelylowercase}
+% This routine is the complement to |\testsolelyuppercase|, with
+% corresponding logic.
+% \begin{macrocode}
+\newif\ifsolelylowercase
+\newcommand\testsolelylowercase[1]{%
+ \setbox0=\hbox{%
+ \stringencode{#1}%
+ \edef\@stringA{\thestring}%
+ \solelylowercase[e]{#1}%
+ \edef\@stringB{\thestring}%
+ \ifthenelse{\equal{\@stringA}{\@stringB}}%
+ {%
+ \noblanks[q]{\@stringA}%
+ \@getstringlength{\thestring}{@stringsize}%
+ \ifthenelse{\value{@stringsize} = 0}%
+ {\global\solelylowercasefalse}{\global\solelylowercasetrue}%
+ }%
+ {\global\solelylowercasefalse}}%
+ \defaultTreatments%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\testalphabetic}
+% Comparable to |\testsolelyuppercase| and
+% |\testsolelylowercase| in its logic, this routine tests whether
+% the string is purely alphabetic or not.
+% \begin{macrocode}
+\newif\ifalphabetic
+\newcommand\testalphabetic[1]{%
+ \setbox0=\hbox{%
+ \stringencode{#1}%
+ \edef\@stringA{\thestring}%
+ \alphabetic[e]{#1}%
+ \edef\@stringB{\thestring}%
+ \ifthenelse{\equal{\@stringA}{\@stringB}}%
+ {%
+ \noblanks[q]{\@stringA}%
+ \@getstringlength{\thestring}{@stringsize}%
+ \ifthenelse{\value{@stringsize} = 0}%
+ {\global\alphabeticfalse}{\global\alphabetictrue}%
+ }%
+ {\global\alphabeticfalse}}%
+ \defaultTreatments%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macrocode}
+%
+%%%%% SUPPORT ROUTINES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% \end{macrocode}
+% The following routines support the execution of the \stringstrings
+% package.
+
+% \begin{macro}{\ESCrotate}
+% After the escape character has been ascertained as the next character,
+% this routine operates on the subsequent escape code to rotate the
+% symbol to end of string, in the fashion of macro |\@rotate|.
+% \begin{macrocode}
+\newcommand\ESCrotate[1]{%
+ \if\UvariCode#1\@uvariaction\else
+ \if\UvariiCode#1\@uvariiaction\else
+ \if\UvariiiCode#1\@uvariiiaction\else
+ \if\@fromcode#1\@tostring\else
+ \if\PipeCode#1\@pipeaction\else
+ \if\DollarCode#1\@dollaraction\else
+ \if\CaratCode#1\@carataction\else
+ \if\CircumflexCode#1\@circumflexaction\else
+ \if\TildeCode#1\@tildeaction\else
+ \if\UmlautCode#1\@umlautaction\else
+ \if\GraveCode#1\@graveaction\else
+ \if\AcuteCode#1\@acuteaction\else
+ \if\MacronCode#1\@macronaction\else
+ \if\OverdotCode#1\@overdotaction\else
+ \if\LeftBraceCode#1\@leftbraceaction\else
+ \if\RightBraceCode#1\@rightbraceaction\else
+ \if\UnderscoreCode#1\@underscoreaction\else
+ \if\DaggerCode#1\@daggeraction\else
+ \if\DoubleDaggerCode#1\@doubledaggeraction\else
+ \if\SectionSymbolCode#1\@sectionsymbolaction\else
+ \if\PilcrowCode#1\@pilcrowaction\else
+ \if\LBCode#1\@lbaction\else
+ \if\RBCode#1\@rbaction\else
+ \if\BreveCode#1\@breveaction\else
+ \if\CaronCode#1\@caronaction\else
+ \if\DoubleAcuteCode#1\@doubleacuteaction\else
+ \if\CedillaCode#1\@cedillaaction\else
+ \if\UnderdotCode#1\@underdotaction\else
+ \if\ArchJoinCode#1\@archjoinaction\else
+ \if\LineUnderCode#1\@lineunderaction\else
+ \if\CopyrightCode#1\@copyrightaction\else
+ \if\PoundsCode#1\@poundsaction\else
+ \if\AEscCode#1\@AEscaction\else
+ \if\aescCode#1\@aescaction\else
+ \if\OEthelCode#1\@OEthelaction\else
+ \if\oethelCode#1\@oethelaction\else
+ \if\AngstromCode#1\@Angstromaction\else
+ \if\angstromCode#1\@angstromaction\else
+ \if\SlashedOCode#1\@slashedOaction\else
+ \if\SlashedoCode#1\@slashedoaction\else
+ \if\BarredlCode#1\@barredlaction\else
+ \if\BarredLCode#1\@barredLaction\else
+ \if\EszettCode#1\@eszettaction\else
+ \expandafter\@gobble#1\undecipherable%
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\@getnextword}
+% A low-level routine designed to extract the next [space-delimited]
+% word of the primary
+% argument. It has several quirks: if the passed string has one leading
+% space, it is included as part of next word. If it has two leading
+% [hard]spaces, the 2$^\mathrm{nd}$ hard space \textit{is} the next word.
+% Using the higher-level |\getnextword| deals automatically with
+% these abberant possibilities.
+% \begin{macrocode}
+\newcommand\@getnextword[2][v]{%
+ \defaultTreatments%
+ \def\SeekBlankSpace{2}%
+ \substring[#1]{#2}{1}{\@MAXSTRINGSIZE}%
+ \def\SeekBlankSpace{0}%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\@retokenizechar}
+% This command is the guts of the retokenize command. It grabs the
+% character provided in string |#1| and assigns it to a unique token
+% whose name is created from the string |#2|. The command has two
+% primary |\if| branches. The first branch is taken if the
+% character is a special two-byte-encoded escape-sequence, while
+% the second branch is taken if the character is a |&|, |%|, |#|,
+% a blankspace, or any simple one-byte character.
+% \begin{macrocode}
+\newcommand\@retokenizechar[2]{%
+ \isnextbyte[q]{\EscapeChar}{#1}%
+ \if T\theresult%
+ \edef\@ESCcode{\expandafter\@gobble#1}%
+ \if\UvariCode\@ESCcode%
+ \expandafter\def\csname#2\endcsname{\Uvari}\else
+ \if\UvariiCode\@ESCcode%
+ \expandafter\def\csname#2\endcsname{\Uvarii}\else
+ \if\UvariiiCode\@ESCcode%
+ \expandafter\def\csname#2\endcsname{\Uvariii}\else
+ \if\PipeCode\@ESCcode%
+ \expandafter\def\csname#2\endcsname{\Pipe}\else
+ \if\DollarCode\@ESCcode%
+ \expandafter\def\csname#2\endcsname{\$}\else
+ \if\CaratCode\@ESCcode%
+ \expandafter\def\csname#2\endcsname{\Carat}\else
+ \if\CircumflexCode\@ESCcode%
+ \expandafter\def\csname#2\endcsname{\^}\else
+ \if\TildeCode\@ESCcode%
+ \expandafter\def\csname#2\endcsname{\~}\else
+ \if\UmlautCode\@ESCcode%
+ \expandafter\def\csname#2\endcsname{\"}\else
+ \if\GraveCode\@ESCcode%
+ \expandafter\def\csname#2\endcsname{\`}\else
+ \if\AcuteCode\@ESCcode%
+ \expandafter\def\csname#2\endcsname{\'}\else
+ \if\MacronCode\@ESCcode%
+ \expandafter\def\csname#2\endcsname{\=}\else
+ \if\OverdotCode\@ESCcode%
+ \expandafter\def\csname#2\endcsname{\.}\else
+ \if\LeftBraceCode\@ESCcode%
+ \expandafter\def\csname#2\endcsname{\{}\else
+ \if\RightBraceCode\@ESCcode%
+ \expandafter\def\csname#2\endcsname{\}}\else
+ \if\UnderscoreCode\@ESCcode%
+ \expandafter\def\csname#2\endcsname{\_}\else
+ \if\DaggerCode\@ESCcode%
+ \expandafter\def\csname#2\endcsname{\dag}\else
+ \if\DoubleDaggerCode\@ESCcode%
+ \expandafter\def\csname#2\endcsname{\ddag}\else
+ \if\SectionSymbolCode\@ESCcode%
+ \expandafter\def\csname#2\endcsname{\S}\else
+ \if\PilcrowCode\@ESCcode%
+ \expandafter\def\csname#2\endcsname{\P}\else
+ \if\LBCode\@ESCcode%
+ \expandafter\def\csname#2\endcsname{\SaveLB}\else
+ \if\RBCode\@ESCcode%
+ \expandafter\def\csname#2\endcsname{\SaveRB}\else
+ \if\BreveCode\@ESCcode\expandafter\def\csname#2\endcsname{\u}\else
+ \if\CaronCode\@ESCcode\expandafter\def\csname#2\endcsname{\v}\else
+ \if\DoubleAcuteCode\@ESCcode\expandafter\def\csname#2\endcsname{\H}\else
+ \if\CedillaCode\@ESCcode\expandafter\def\csname#2\endcsname{\c}\else
+ \if\UnderdotCode\@ESCcode\expandafter\def\csname#2\endcsname{\d}\else
+ \if\ArchJoinCode\@ESCcode\expandafter\def\csname#2\endcsname{\t}\else
+ \if\LineUnderCode\@ESCcode\expandafter\def\csname#2\endcsname{\b}\else
+ \if\CopyrightCode\@ESCcode\expandafter\def\csname#2\endcsname{\copyright}\else
+ \if\PoundsCode\@ESCcode\expandafter\def\csname#2\endcsname{\pounds}\else
+ \if\AEscCode\@ESCcode\expandafter\def\csname#2\endcsname{\AE}\else
+ \if\aescCode\@ESCcode\expandafter\def\csname#2\endcsname{\ae}\else
+ \if\OEthelCode\@ESCcode\expandafter\def\csname#2\endcsname{\OE}\else
+ \if\oethelCode\@ESCcode\expandafter\def\csname#2\endcsname{\oe}\else
+ \if\AngstromCode\@ESCcode\expandafter\def\csname#2\endcsname{\AA}\else
+ \if\angstromCode\@ESCcode\expandafter\def\csname#2\endcsname{\aa}\else
+ \if\SlashedOCode\@ESCcode\expandafter\def\csname#2\endcsname{\O}\else
+ \if\SlashedoCode\@ESCcode\expandafter\def\csname#2\endcsname{\o}\else
+ \if\BarredlCode\@ESCcode\expandafter\def\csname#2\endcsname{\l}\else
+ \if\BarredLCode\@ESCcode\expandafter\def\csname#2\endcsname{\L}\else
+ \if\EszettCode\@ESCcode\expandafter\def\csname#2\endcsname{\ss}\else
+ \expandafter\def\csname#2\endcsname{\undecipherable}%
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \else
+ \expandafter\ifx\expandafter\&#1%
+ \expandafter\def\csname#2\endcsname{\&}\else
+ \expandafter\ifx\expandafter\%#1%
+ \expandafter\def\csname#2\endcsname{\%}\else
+ \expandafter\ifx\expandafter\##1%
+ \expandafter\def\csname#2\endcsname{\#}\else
+ \if\EncodedBlankSpace#1\expandafter\def\csname#2\endcsname{\ }\else
+ \expandafter\edef\csname#2\endcsname{#1}%
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\@defineactions}
+% This routine defines how encoded characters are to be treated by the
+% |\ESCrotate| routine, depending on the [encoding, capitalization,
+% blank, symbol, \textit{etc.}] treatments that have
+% been \textit{a priori} specified.
+% \begin{macrocode}
+% \@blankaction AND OTHER ...action'S ARE SET, DEPENDING ON VALUES OF
+% TREATMENT FLAGS. CHARS ARE EITHER ENCODED, DECODED, OR REMOVED.
+\newcommand\@defineactions{%
+% SET UP TREATMENT FOR SPACES, ENCODED SPACES, AND [REENCODED] SYMBOLS
+ \if e\EncodingTreatment%
+% ENCODE SPACES, KEEP ENCODED SPACES ENCODED, ENCODE SYMBOLS.
+ \edef\@blankaction{\EncodedBlankSpace}%
+ \def\@dollaraction{\EncodedDollar}%
+ \def\@pipeaction{\EncodedPipe}%
+ \def\@uvariaction{\EncodedUvari}%
+ \def\@uvariiaction{\EncodedUvarii}%
+ \def\@uvariiiaction{\EncodedUvariii}%
+ \def\@carataction{\EncodedCarat}%
+ \def\@circumflexaction{\EncodedCircumflex}%
+ \def\@tildeaction{\EncodedTilde}%
+ \def\@umlautaction{\EncodedUmlaut}%
+ \def\@graveaction{\EncodedGrave}%
+ \def\@acuteaction{\EncodedAcute}%
+ \def\@macronaction{\EncodedMacron}%
+ \def\@overdotaction{\EncodedOverdot}%
+ \def\@breveaction{\EncodedBreve}%
+ \def\@caronaction{\EncodedCaron}%
+ \def\@doubleacuteaction{\EncodedDoubleAcute}%
+ \def\@cedillaaction{\EncodedCedilla}%
+ \def\@underdotaction{\EncodedUnderdot}%
+ \def\@archjoinaction{\EncodedArchJoin}%
+ \def\@lineunderaction{\EncodedLineUnder}%
+ \def\@copyrightaction{\EncodedCopyright}%
+ \def\@poundsaction{\EncodedPounds}%
+ \def\@leftbraceaction{\EncodedLeftBrace}%
+ \def\@rightbraceaction{\EncodedRightBrace}%
+ \def\@underscoreaction{\EncodedUnderscore}%
+ \def\@daggeraction{\EncodedDagger}%
+ \def\@doubledaggeraction{\EncodedDoubleDagger}%
+ \def\@sectionsymbolaction{\EncodedSectionSymbol}%
+ \def\@pilcrowaction{\EncodedPilcrow}%
+ \def\@eszettaction{\EncodedEszett}%
+ \def\@lbaction{\EncodedLB}%
+ \def\@rbaction{\EncodedRB}%
+ \if 2\AlphaCapsTreatment%
+ \def\@AEscaction{\Encodedaesc}%
+ \def\@OEthelaction{\Encodedoethel}%
+ \def\@Angstromaction{\Encodedangstrom}%
+ \def\@slashedOaction{\EncodedSlashedo}%
+ \def\@barredLaction{\EncodedBarredl}%
+ \else
+ \def\@AEscaction{\EncodedAEsc}%
+ \def\@OEthelaction{\EncodedOEthel}%
+ \def\@Angstromaction{\EncodedAngstrom}%
+ \def\@slashedOaction{\EncodedSlashedO}%
+ \def\@barredLaction{\EncodedBarredL}%
+ \fi
+ \if 2\AlphaTreatment%
+ \def\@aescaction{\EncodedAEsc}%
+ \def\@oethelaction{\EncodedOEthel}%
+ \def\@angstromaction{\EncodedAngstrom}%
+ \def\@slashedoaction{\EncodedSlashedO}%
+ \def\@barredlaction{\EncodedBarredL}%
+ \else
+ \def\@aescaction{\Encodedaesc}%
+ \def\@oethelaction{\Encodedoethel}%
+ \def\@angstromaction{\Encodedangstrom}%
+ \def\@slashedoaction{\EncodedSlashedo}%
+ \def\@barredlaction{\EncodedBarredl}%
+ \fi
+ \else
+% EncodingTreatment=v or q:
+% LEAVE SPACES ALONE; RESTORE ENCODED SPACES AND SYMBOLS
+ \def\@blankaction{\BlankSpace}%
+ \def\@dollaraction{\Dollar}%
+ \def\@pipeaction{\Pipe}%
+ \def\@uvariaction{\Uvari}%
+ \def\@uvariiaction{\Uvarii}%
+ \def\@uvariiiaction{\Uvariii}%
+ \def\@carataction{\Carat}%
+ \def\@circumflexaction{\Circumflex}%
+ \def\@tildeaction{\Tilde}%
+ \def\@umlautaction{\Umlaut}%
+ \def\@graveaction{\Grave}%
+ \def\@acuteaction{\Acute}%
+ \def\@macronaction{\Macron}%
+ \def\@overdotaction{\Overdot}%
+ \def\@breveaction{\Breve}%
+ \def\@caronaction{\Caron}%
+ \def\@doubleacuteaction{\DoubleAcute}%
+ \def\@cedillaaction{\Cedilla}%
+ \def\@underdotaction{\Underdot}%
+ \def\@archjoinaction{\ArchJoin}%
+ \def\@lineunderaction{\LineUnder}%
+ \def\@copyrightaction{\Copyright}%
+ \def\@poundsaction{\Pounds}%
+ \def\@leftbraceaction{\LeftBrace}%
+ \def\@rightbraceaction{\RightBrace}%
+ \def\@underscoreaction{\Underscore}%
+ \def\@daggeraction{\Dagger}%
+ \def\@doubledaggeraction{\DoubleDagger}%
+ \def\@sectionsymbolaction{\SectionSymbol}%
+ \def\@pilcrowaction{\Pilcrow}%
+ \def\@eszettaction{\Eszett}%
+ \def\@lbaction{\UnencodedLB}%
+ \def\@rbaction{\UnencodedRB}%
+ \if 2\AlphaCapsTreatment%
+ \def\@AEscaction{\aesc}%
+ \def\@OEthelaction{\oethel}%
+ \def\@Angstromaction{\angstrom}%
+ \def\@slashedOaction{\Slashedo}%
+ \def\@barredLaction{\Barredl}%
+ \else
+ \def\@AEscaction{\AEsc}%
+ \def\@OEthelaction{\OEthel}%
+ \def\@Angstromaction{\Angstrom}%
+ \def\@slashedOaction{\SlashedO}%
+ \def\@barredLaction{\BarredL}%
+ \fi
+ \if 2\AlphaTreatment%
+ \def\@aescaction{\AEsc}%
+ \def\@oethelaction{\OEthel}%
+ \def\@angstromaction{\Angstrom}%
+ \def\@slashedoaction{\SlashedO}%
+ \def\@barredlaction{\BarredL}%
+ \else
+ \def\@aescaction{\aesc}%
+ \def\@oethelaction{\oethel}%
+ \def\@angstromaction{\angstrom}%
+ \def\@slashedoaction{\Slashedo}%
+ \def\@barredlaction{\Barredl}%
+ \fi
+ \fi
+% REMOVE SPACES AND ENCODED SPACES?
+ \if 0\BlankTreatment%
+ \edef\@blankaction{}%
+ \fi
+% REMOVE ENCODED SYMBOLS?
+ \if 0\SymbolTreatment%
+ \def\@dollaraction{}%
+ \def\@pipeaction{}%
+ \def\@carataction{}%
+ \def\@circumflexaction{}%
+ \def\@tildeaction{}%
+ \def\@umlautaction{}%
+ \def\@graveaction{}%
+ \def\@acuteaction{}%
+ \def\@macronaction{}%
+ \def\@overdotaction{}%
+ \def\@breveaction{}%
+ \def\@caronaction{}%
+ \def\@doubleacuteaction{}%
+ \def\@cedillaaction{}%
+ \def\@underdotaction{}%
+ \def\@archjoinaction{}%
+ \def\@lineunderaction{}%
+ \def\@copyrightaction{}%
+ \def\@poundsaction{}%
+ \def\@leftbraceaction{}%
+ \def\@rightbraceaction{}%
+ \def\@underscoreaction{}%
+ \def\@daggeraction{}%
+ \def\@doubledaggeraction{}%
+ \def\@sectionsymbolaction{}%
+ \def\@pilcrowaction{}%
+ \def\@lbaction{}%
+ \def\@rbaction{}%
+ \fi
+% REMOVE ENCODED ALPHACAPS?
+ \if 0\AlphaCapsTreatment%
+ \def\@AEscaction{}%
+ \def\@OEthelaction{}%
+ \def\@Angstromaction{}%
+ \def\@slashedOaction{}%
+ \def\@barredLaction{}%
+ \fi
+% REMOVE ENCODED ALPHA?
+ \if 0\AlphaTreatment%
+ \def\@aescaction{}%
+ \def\@oethelaction{}%
+ \def\@angstromaction{}%
+ \def\@slashedoaction{}%
+ \def\@barredlaction{}%
+ \def\@eszettaction{}%
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\@forcecapson}
+% Force capitalization of strings processed by |\substring| for the
+% time being.
+% \begin{macrocode}
+\newcommand\@forcecapson{%
+ \def\AlphaTreatment{2}%
+ \def\AlphaCapsTreatment{1}%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\@relaxcapson}
+% Restore prior treatments following a period of enforced capitalization.
+% \begin{macrocode}
+\newcommand\@relaxcapson{%
+ \let\AlphaTreatment\SaveAlphaTreatment%
+ \let\AlphaCapsTreatment\SaveAlphaCapsTreatment%
+ \@defineactions%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\@decodepointer}
+% As pertains to arguments 3 and 4 of |\substring|, this routine
+% implements use of the |$| character to mean END-OF-STRING,
+% and |$-{|\textit{integer}|}| for addressing relative to the
+% END-OF-STRING.
+% \begin{macrocode}
+\newcommand\@decodepointer[2][\value{@stringsize}]{%
+ \isnextbyte[q]{$}{#2}%
+ \if T\theresult%
+ \isnextbyte[q]{-}{\expandafter\@gobble#2}%
+ \if T\theresult%
+ \setcounter{@@@letterindex}{#1}%
+ \@gobblearg{#2}{2}%
+ \addtocounter{@@@letterindex}{-\gobbledword}%
+ \edef\@fromtoindex{\value{@@@letterindex}}%
+ \else
+ \edef\@fromtoindex{#1}%
+ \fi
+ \else
+ \edef\@fromtoindex{#2}%
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\@getstringlength}
+% Get's string length of |#1|, puts result in counter |#2|.
+% \begin{macrocode}
+\newcommand\@getstringlength[2]{%
+ \edef\@@teststring{#1\endofstring}%
+ \ifthenelse{\equal{\@@teststring}{\endofstring}}%
+ {\setcounter{#2}{0}}%
+ {%
+ \setcounter{@gobblesize}{1}%
+ \whiledo{\value{@gobblesize} < \@MAXSTRINGSIZE}{%
+%
+ \@gobblearg{\@@teststring}{1}%
+ \edef\@@teststring{\gobbledword}%
+ \ifthenelse{\equal{\@@teststring}{\endofstring}}%
+ {\setcounter{#2}{\value{@gobblesize}}%
+ \setcounter{@gobblesize}{\@MAXSTRINGSIZE}}%
+ {\addtocounter{@gobblesize}{1}}%
+ }%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\@gobblearg}
+% Gobble first |#2| characters from string |#1|. The
+% result is stored in |\gobbledword|. Two-byte escape sequences,
+% when encountered, count as a single gobble.
+% \begin{macrocode}
+\newcommand\@gobblearg[2]{%
+ \setcounter{@letterindex}{0}%
+ \setcounter{@gobbleindex}{#2}%
+ \edef\gobbledword{#1}%
+ \whiledo{\value{@letterindex} < \value{@gobbleindex}}{%
+ \isnextbyte[q]{\EscapeChar}{\gobbledword}%
+ \if T\theresult%
+% GOBBLE ESCAPE CHARACTER
+ \edef\gobbledword{\@DiscardNextChar{\gobbledword}}%
+ \fi
+% GOBBLE NORMAL CHARACTER OR ESCAPE CODE
+ \edef\gobbledword{\@DiscardNextChar{\gobbledword}}%
+ \addtocounter{@letterindex}{1}%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\@DiscardNextChar}
+% Remove the next character from the argument string. Since
+% |\@gobble| skips spaces, the routine must first look for the case of
+% a leading blankspace. If none is found, proceed with a normal
+% |\@gobble|. Note: as per \LaTeX{} convention, |\@DiscardNextChar|
+% treats double/multi-softspaces as single space.
+% \begin{macrocode}
+\newcommand\@DiscardNextChar[1]{%
+ \expandafter\if\expandafter\BlankSpace#1\else
+ \expandafter\@gobble#1%
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\@convertsymboltostring}
+% Routine for converting an encodable symbol (|#3|) into string (|#4|),
+% for every occurance in the given string |#2|.
+% \begin{macrocode}
+\newcommand\@convertsymboltostring[4][v]{%
+ \def\@fromcode{#3}%
+ \def\@tostring{#4}%
+ \def\EncodingTreatment{e}%
+ \substring[e]{#2}{1}{\@MAXSTRINGSIZE}%
+ \@convertoff%
+ \if e#1\else\substring[#1]{\thestring}{1}{\@MAXSTRINGSIZE}\fi%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\@convertbytetostring}
+% Routine for converting an plain byte (|#3|) into string (|#4|),
+% for every occurance in the given string |#2|.
+% \begin{macrocode}
+\newcommand\@convertbytetostring[4][v]{%
+ \def\@frombyte{#3}%
+ \def\@tostring{#4}%
+ \def\EncodingTreatment{e}%
+ \substring[e]{#2}{1}{\@MAXSTRINGSIZE}%
+ \@convertoff%
+ \if e#1\else\substring[#1]{\thestring}{1}{\@MAXSTRINGSIZE}\fi%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\@treatleadingspaces}
+% This routine will address the leading spaces of string |#2|. If
+% argument |#3| is an 'x' character, those leading spaces will be
+% deleted from the string. Otherwise, those leading spaces will be
+% rotated to the end of the string.
+% \begin{macrocode}
+\newcommand\@treatleadingspaces[3][v]{\+%
+ \defaultTreatments%
+ \edef\thestring{#2}%
+ \@getstringlength{\thestring}{@stringsize}%
+ \setcounter{@maxrotation}{\value{@stringsize}}%
+ \setcounter{@letterindex}{0}%
+ \whiledo{\value{@letterindex} < \value{@maxrotation}}{%
+ \addtocounter{@letterindex}{1}%
+ \isnextbyte[q]{\EncodedBlankSpace}{\thestring}%
+ \if F\theresult\isnextbyte[q]{\BlankSpace}{\thestring}\fi%
+ \if T\theresult%
+ \isnextbyte[q]{#3}{x}%
+ \if F\theresult%
+% NORMAL OR ENCODED BLANK... ROTATE IT
+ \edef\thestring{\@rotate{\thestring}}%
+ \else
+% NORMAL OR ENCODED BLANK... DELETE IT (IF 3rd ARG=X)
+ \@gobblearg{\thestring}{1}%
+ \edef\thestring{\gobbledword}%
+ \fi
+ \else
+ \setcounter{@maxrotation}{\value{@letterindex}}%
+ \fi
+ }\?%
+ \substring[#1]{\thestring}{1}{\@MAXSTRINGSIZE}%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\@convertoff}
+% This routine is an initialization routine to
+% guarantee that there is no conversion of |\@frombyte| to |\@tostring|,
+% until further notice. It accomplishes this
+% by setting up such that subsequent |\if\@frombyte| and
+% |\if\@fromcode| clauses will automatically fail.
+% \begin{macrocode}
+\newcommand\@convertoff{\def\@frombyte{xy}\def\@tostring{}%
+ \def\@fromcode{xy}}
+\@convertoff
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\@rotate}
+% The following code is the engine of the string manipulation routine.
+% It is a tree of successive \LaTeX{} commands (each of which is
+% composed of an |\if...| cascade) which have the net
+% effect of rotating the first letter of the string into the last
+% position. Depending on modes set by |\@defineactions| and
+% |\defaultTreatments|, the leading character is either encoded,
+% decoded, or removed in the process.
+% Note: |\@rotate| loses track of double/multi-spaces, per \LaTeX{}
+% convention, unless encoded blanks (|~|) are used.
+% \begin{macrocode}
+\newcommand\@rotate[1]{%
+% CHECK BYTE CONVERSION TEST FIRST
+ \if \@frombyte#1\@tostring\else
+% MUST CHECK FOR MULTI-BYTE CHARACTERS NEXT, SO THAT ENCODING CHARACTER
+% ISN'T MISTAKEN FOR A NORMAL CHARACTER LATER IN MACRO.
+ \if 0\SymbolTreatment%
+ \@removeExpandableSymbols{#1}%
+ \else
+ \@rotateExpandableSymbols{#1}%
+ \fi
+ \fi
+}
+
+\newcommand\@rotateExpandableSymbols[1]{%
+% INDIRECT (EXPANDABLE) SYMBOLS
+ \expandafter\ifx\expandafter\&#1\&\else
+ \expandafter\ifx\expandafter\%#1\%\else
+ \expandafter\ifx\expandafter\##1\#\else
+ \@rotateBlankSpaces{#1}%
+ \fi
+ \fi
+ \fi
+}
+
+\newcommand\@removeExpandableSymbols[1]{%
+% INDIRECT (EXPANDABLE) SYMBOLS
+ \expandafter\ifx\expandafter\&#1\else
+ \expandafter\ifx\expandafter\%#1\else
+ \expandafter\ifx\expandafter\##1\else
+ \@rotateBlankSpaces{#1}%
+ \fi
+ \fi
+ \fi
+}
+
+\newcommand\@rotateBlankSpaces[1]{%
+ \expandafter\ifx\expandafter$#1$\else% <---RETAIN GOING INTO/FROM MATH MODE
+% THE FOLLOWING FINDS TILDES, BUT MUST COME AFTER EXPANDABLE SYMBOL
+% SEARCH, OR ELSE IT FINDS THEM TOO, BY MISTAKE.
+ \if \EncodedBlankSpace#1\@blankaction\else% <--- FINDS REENCODED TILDE
+% THE FOLLOWING SHOULD FIND TILDES, BUT DOESN'T... THUS, COMMENTED OUT.
+% \expandafter\ifx\expandafter\EncodedBlankSpace#1\@blankaction\else
+ \if \BlankSpace#1\@blankaction\else
+ \if 2\AlphaTreatment%
+ \@chcaseAlpha{#1}%
+ \else
+ \if 0\AlphaTreatment%
+ \@removeAlpha{#1}%
+ \else
+ \@rotateAlpha{#1}%
+ \fi
+ \fi
+ \fi
+% \fi
+ \fi
+ \fi
+}
+
+\newcommand\@rotateAlpha[1]{%
+% LOWERCASE
+ \if a#1a\else
+ \if b#1b\else
+ \if c#1c\else
+ \if d#1d\else
+ \if e#1e\else
+ \if f#1f\else
+ \if g#1g\else
+ \if h#1h\else
+ \if i#1i\else
+ \if j#1j\else
+ \if k#1k\else
+ \if l#1l\else
+ \if m#1m\else
+ \if n#1n\else
+ \if o#1o\else
+ \if p#1p\else
+ \if q#1q\else
+ \if r#1r\else
+ \if s#1s\else
+ \if t#1t\else
+ \if u#1u\else
+ \if v#1v\else
+ \if w#1w\else
+ \if x#1x\else
+ \if y#1y\else
+ \if z#1z\else
+ \if 2\AlphaCapsTreatment%
+ \@chcaseAlphaCaps{#1}%
+ \else
+ \if 0\AlphaCapsTreatment%
+ \@removeAlphaCaps{#1}%
+ \else
+ \@rotateAlphaCaps{#1}%
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+}
+
+\newcommand\@removeAlpha[1]{%
+% LOWERCASE
+ \if a#1\else
+ \if b#1\else
+ \if c#1\else
+ \if d#1\else
+ \if e#1\else
+ \if f#1\else
+ \if g#1\else
+ \if h#1\else
+ \if i#1\else
+ \if j#1\else
+ \if k#1\else
+ \if l#1\else
+ \if m#1\else
+ \if n#1\else
+ \if o#1\else
+ \if p#1\else
+ \if q#1\else
+ \if r#1\else
+ \if s#1\else
+ \if t#1\else
+ \if u#1\else
+ \if v#1\else
+ \if w#1\else
+ \if x#1\else
+ \if y#1\else
+ \if z#1\else
+ \if 2\AlphaCapsTreatment%
+ \@chcaseAlphaCaps{#1}%
+ \else
+ \if 0\AlphaCapsTreatment%
+ \@removeAlphaCaps{#1}%
+ \else
+ \@rotateAlphaCaps{#1}%
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+}
+
+\newcommand\@chcaseAlpha[1]{%
+% LOWERCASE TO UPPERCASE
+ \if a#1A\else
+ \if b#1B\else
+ \if c#1C\else
+ \if d#1D\else
+ \if e#1E\else
+ \if f#1F\else
+ \if g#1G\else
+ \if h#1H\else
+ \if i#1I\else
+ \if j#1J\else
+ \if k#1K\else
+ \if l#1L\else
+ \if m#1M\else
+ \if n#1N\else
+ \if o#1O\else
+ \if p#1P\else
+ \if q#1Q\else
+ \if r#1R\else
+ \if s#1S\else
+ \if t#1T\else
+ \if u#1U\else
+ \if v#1V\else
+ \if w#1W\else
+ \if x#1X\else
+ \if y#1Y\else
+ \if z#1Z\else
+ \if 2\AlphaCapsTreatment%
+ \@chcaseAlphaCaps{#1}%
+ \else
+ \if 0\AlphaCapsTreatment%
+ \@removeAlphaCaps{#1}%
+ \else
+ \@rotateAlphaCaps{#1}%
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+}
+
+\newcommand\@rotateAlphaCaps[1]{%
+% UPPERCASE
+ \if A#1A\else
+ \if B#1B\else
+ \if C#1C\else
+ \if D#1D\else
+ \if E#1E\else
+ \if F#1F\else
+ \if G#1G\else
+ \if H#1H\else
+ \if I#1I\else
+ \if J#1J\else
+ \if K#1K\else
+ \if L#1L\else
+ \if M#1M\else
+ \if N#1N\else
+ \if O#1O\else
+ \if P#1P\else
+ \if Q#1Q\else
+ \if R#1R\else
+ \if S#1S\else
+ \if T#1T\else
+ \if U#1U\else
+ \if V#1V\else
+ \if W#1W\else
+ \if X#1X\else
+ \if Y#1Y\else
+ \if Z#1Z\else
+ \if 0\NumeralTreatment%
+ \@removeNumerals{#1}%
+ \else
+ \@rotateNumerals{#1}%
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+}
+
+\newcommand\@removeAlphaCaps[1]{%
+% UPPERCASE
+ \if A#1\else
+ \if B#1\else
+ \if C#1\else
+ \if D#1\else
+ \if E#1\else
+ \if F#1\else
+ \if G#1\else
+ \if H#1\else
+ \if I#1\else
+ \if J#1\else
+ \if K#1\else
+ \if L#1\else
+ \if M#1\else
+ \if N#1\else
+ \if O#1\else
+ \if P#1\else
+ \if Q#1\else
+ \if R#1\else
+ \if S#1\else
+ \if T#1\else
+ \if U#1\else
+ \if V#1\else
+ \if W#1\else
+ \if X#1\else
+ \if Y#1\else
+ \if Z#1\else
+ \if 0\NumeralTreatment%
+ \@removeNumerals{#1}%
+ \else
+ \@rotateNumerals{#1}%
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+}
+
+\newcommand\@chcaseAlphaCaps[1]{%
+% UPPERCASE TO LOWERCASE
+ \if A#1a\else
+ \if B#1b\else
+ \if C#1c\else
+ \if D#1d\else
+ \if E#1e\else
+ \if F#1f\else
+ \if G#1g\else
+ \if H#1h\else
+ \if I#1i\else
+ \if J#1j\else
+ \if K#1k\else
+ \if L#1l\else
+ \if M#1m\else
+ \if N#1n\else
+ \if O#1o\else
+ \if P#1p\else
+ \if Q#1q\else
+ \if R#1r\else
+ \if S#1s\else
+ \if T#1t\else
+ \if U#1u\else
+ \if V#1v\else
+ \if W#1w\else
+ \if X#1x\else
+ \if Y#1y\else
+ \if Z#1z\else
+ \if 0\NumeralTreatment%
+ \@removeNumerals{#1}%
+ \else
+ \@rotateNumerals{#1}%
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+}
+
+\newcommand\@rotateNumerals[1]{%
+% NUMERALS
+ \if 1#11\else
+ \if 2#12\else
+ \if 3#13\else
+ \if 4#14\else
+ \if 5#15\else
+ \if 6#16\else
+ \if 7#17\else
+ \if 8#18\else
+ \if 9#19\else
+ \if 0#10\else
+ \if 0\PunctuationTreatment%
+ \@removePunctuation{#1}%
+ \else
+ \@rotatePunctuation{#1}%
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+}
+
+\newcommand\@removeNumerals[1]{%
+% NUMERALS
+ \if 1#1\else
+ \if 2#1\else
+ \if 3#1\else
+ \if 4#1\else
+ \if 5#1\else
+ \if 6#1\else
+ \if 7#1\else
+ \if 8#1\else
+ \if 9#1\else
+ \if 0#1\else
+ \if 0\PunctuationTreatment%
+ \@removePunctuation{#1}%
+ \else
+ \@rotatePunctuation{#1}%
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+}
+
+\newcommand\@rotatePunctuation[1]{%
+% PUNCTUATION
+ \if ;#1;\else
+ \if :#1:\else
+ \if '#1'\else
+ \if "#1"\else
+ \if ,#1,\else
+ \if .#1.\else
+ \if ?#1?\else
+ \if `#1`\else
+ \if !#1!\else
+ \if 0\SymbolTreatment%
+ \@removeDirectSymbols{#1}%
+ \else
+ \@rotateDirectSymbols{#1}%
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+}
+
+\newcommand\@removePunctuation[1]{%
+% PUNCTUATION
+ \if ;#1\else
+ \if :#1\else
+ \if '#1\else
+ \if "#1\else
+ \if ,#1\else
+ \if .#1\else
+ \if ?#1\else
+ \if `#1\else
+ \if !#1\else
+ \if 0\SymbolTreatment%
+ \@removeDirectSymbols{#1}%
+ \else
+ \@rotateDirectSymbols{#1}%
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+}
+
+\newcommand\@rotateDirectSymbols[1]{%
+% DIRECT SYMBOLS
+ \if /#1/\else
+ \if @#1@\else
+ \if *#1*\else
+ \if (#1(\else
+ \if )#1)\else
+ \if -#1-\else
+ \if _#1_\else
+ \if =#1=\else
+ \if +#1+\else
+ \if [#1[\else
+ \if ]#1]\else
+ \if ^#1^\else% <--FOR SUPERSCRIPTS, NOT \^
+ \if <#1<\else
+ \if >#1>\else
+ \if |#1|\else
+ \if &#1&\else
+ \@rotateUndecipherable{#1}%
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+}
+
+\newcommand\@removeDirectSymbols[1]{%
+% DIRECT SYMBOLS
+ \if /#1\else
+ \if @#1\else
+ \if *#1\else
+ \if (#1\else
+ \if )#1\else
+ \if -#1\else
+ \if _#1\else
+ \if =#1\else
+ \if +#1\else
+ \if [#1\else
+ \if ]#1\else
+ \if ^#1\else% <--FOR SUPERSCRIPTS, NOT \^
+ \if <#1\else
+ \if >#1\else
+ \if |#1\else
+ \if &#1\else
+ \@rotateUndecipherable{#1}%
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+}
+
+\newcommand\@rotateUndecipherable[1]{%
+% REPLACE UNDECIPHERABLE SYMBOL WITH A TOKEN CHARACTER (DEFAULT .)
+ \expandafter\@gobble#1\undecipherable%
+% DONE... CLOSE UP SHOP
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macrocode}
+\catcode`\&=4
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%</package>
+% \end{macrocode}
+%
+% \Finale
+\endinput
+%
+% End of file `stringstrings.dtx'.
diff --git a/macros/latex/contrib/stringstrings/stringstrings.ins b/macros/latex/contrib/stringstrings/stringstrings.ins
index 3564603d75..a99e147f5b 100644
--- a/macros/latex/contrib/stringstrings/stringstrings.ins
+++ b/macros/latex/contrib/stringstrings/stringstrings.ins
@@ -1,6 +1,6 @@
-% LaTeX this .ins file in order to generate the .sty file from the .dtx file
-\input docstrip
-\askforoverwritefalse
-\generate{\file{stringstrings.sty}{\from{stringstrings.dtx}{package}}
- }
-\endbatchfile
+% LaTeX this .ins file in order to generate the .sty file from the .dtx file
+\input docstrip
+\askforoverwritefalse
+\generate{\file{stringstrings.sty}{\from{stringstrings.dtx}{package}}
+ }
+\endbatchfile
diff --git a/macros/latex/contrib/stringstrings/stringstrings.pdf b/macros/latex/contrib/stringstrings/stringstrings.pdf
index 13684086f6..9a61441db4 100644
--- a/macros/latex/contrib/stringstrings/stringstrings.pdf
+++ b/macros/latex/contrib/stringstrings/stringstrings.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/polyglossia/README.md b/macros/unicodetex/latex/polyglossia/README.md
index 3510cd2d61..4f4afbf5d7 100644
--- a/macros/unicodetex/latex/polyglossia/README.md
+++ b/macros/unicodetex/latex/polyglossia/README.md
@@ -1,4 +1,4 @@
-# THE POLYGLOSSIA PACKAGE v1.50a
+# THE POLYGLOSSIA PACKAGE v1.51
## Multilingual typesetting with XeLaTeX and LuaLaTeX
This package provides an alternative to Babel for users of XeLaTeX and LuaLaTeX.
diff --git a/macros/unicodetex/latex/polyglossia/polyglossia.dtx b/macros/unicodetex/latex/polyglossia/polyglossia.dtx
index bcc694b3bc..12ab0b4ce0 100644
--- a/macros/unicodetex/latex/polyglossia/polyglossia.dtx
+++ b/macros/unicodetex/latex/polyglossia/polyglossia.dtx
@@ -8,7 +8,7 @@
\iffalse
%</internal>
%<*README>
-# THE POLYGLOSSIA PACKAGE v1.50a
+# THE POLYGLOSSIA PACKAGE v1.51
## Multilingual typesetting with XeLaTeX and LuaLaTeX
This package provides an alternative to Babel for users of XeLaTeX and LuaLaTeX.
@@ -1350,6 +1350,13 @@ to track the issues and follow progress.
% \charifavailable{01C6}{dž}) will be replaced by single characters. This can
% be useful if the ligatures on your font are broken (if the font does not
% have them, they are automatically replaced).
+% \item \xpgboolkeytrue[1.51]{splithyphens}
+% According to Croatian typesetting conventions, if a word with a hard hyphen (such as \emph{je-li})
+% is hyphenated at this hyphen, a second hyphenation character is to be inserted at the beginning
+% of the line that follows the hyphenation (\emph{je-/-li}).
+% By default, this is done automatically (if you are using \LuaTeX, the \pkg{luavlna} package is
+% loaded to achieve this).
+% Set this option to ¦false¦ to disable the feature.
% \end{itemize}
%
% \subsection{czech}\label{czech}
@@ -1467,7 +1474,7 @@ to track the issues and follow progress.
% enabled, spacing in typewriter context is the same as with roman and sans
% serif font, depending on the \xpgvalue{autospacing} and
% \xpgvalue{autospaceguillemets} settings (note that this was the default up
-% to v.~1.44).
+% to v.~1.44).
% \item \xpgboolkeyfalse{frenchfootnote}
% If \xpgvalue{true}, footnotes start with a non-superscripted number
% followed by a dot, as common in French typography. Note that this might
@@ -1479,6 +1486,14 @@ to track the issues and follow progress.
% in French typography. Note that this option is only functional (by
% design) if French is the main language. Also, it might interfere with
% list packages such as \pkg{enumitem}.
+% \item \xpgboolkeytrue[1.51]{frenchpart}
+% By default, \pkg{polyglossia} modifies part headings to match French conventions
+% (\emph{Première partie} rather than \emph{Partie I}). Next to the standard classes,
+% specifics of \pkg{KOMA-script}, \pkg{memoir} and the \pkg{titlesec} package are
+% taken into account. With other classes or packages, redefinition might fail if these
+% have particular part settings.
+% In such case, or if you don't want the redefinition, you can switch off the feature
+% by passing \textit{false} to this option.
% \item \xpgcodekey[1.46]{itemlabels}¦\textemdash¦
% If \emph{frenchitemlabels} is true, you can customize here the used item
% label of all levels.
@@ -2686,7 +2701,7 @@ to track the issues and follow progress.
% \subsection{polyglossia.sty}
% \begin{macrocode}
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{polyglossia}[2020/10/15 v1.50a
+\ProvidesPackage{polyglossia}[2020/12/08 v1.51
Modern multilingual typesetting with XeLaTeX and LuaLaTeX]
\RequirePackage{etoolbox}
\RequirePackage{makecmds}
@@ -2697,19 +2712,23 @@ to track the issues and follow progress.
\RequirePackage{expl3}
\RequirePackage{l3keys2e}
\RequirePackage{xparse}
-\RequirePackage{filehook}
+
+% fontspec now uses LaTeX3 packages such as expl3, so we need this:
+\ExplSyntaxOn
+
+% Execute code #3 if package #1 has been loaded already, else
+% add to package hook #2
+\newcommand\xpg@at@package[3]{%
+ \@ifpackageloaded{#1}{#3}{\AddToHook{#2}{#3}}%
+}
% correct a bug in tracklang
-\AtBeginOfPackageFile*{tracklang}{
+\xpg@at@package{tracklang}{file/after/tracklang.sty}{%
\@ifpackagelater{tracklang}{2019/08/30}{}{\global\def\AddTrackedLangage{\AddTrackedLanguage}}
}
-% fontspec now uses LaTeX3 packages such as expl3, so we need this:
-\ExplSyntaxOn
-
%% This is for compatibility with Babel-aware package:
-\cslet{ver@babel.sty}{\@empty} % this "fakes" babel
\def\languageshorthands#1{\relax} %this is for scrlttr2 class
\def\bbl@cs#1{\csname bbl@#1\endcsname}%
\AtEndPreamble{\let\bbl@set@language\xpg@set@language@aux} %for biblatex
@@ -2855,7 +2874,7 @@ to track the issues and follow progress.
{}%
{\xpg@error{Unknown~ language~ direction~ #1 ~(base~ wrapper)}}%
}
-\AtEndOfPackageFile*{bidi}{%
+\xpg@at@package{bidi}{package/after/bidi}{%
\ExplSyntaxOn%
\cs_gset_nopar:Nn{\polyglossia@setpardirection:n}{%
\str_case_e:nnTF{#1}{%
@@ -2875,7 +2894,7 @@ to track the issues and follow progress.
}%
\ExplSyntaxOff%
}
-\AtEndOfPackageFile*{luabidi}{%
+\xpg@at@package{luabidi}{package/after/luabidi}{%
\ExplSyntaxOn%
\cs_gset_nopar:Nn{\polyglossia@setpardirection:n}{%
\str_case_e:nnTF{#1}{%
@@ -3840,6 +3859,16 @@ to track the issues and follow progress.
\newcommand{\setdefaultlanguage}[2][]{%
+ % latex is an internal language, so do not record
+ \ifstrequal{#2}{latex}{}{%
+ % register polyglossia language name
+ \ifcsundef{#2@registered}{%
+ \global\edef\xpg@loaded{%
+ \ifx\xpg@loaded\@empty\else\xpg@loaded,\fi #2%
+ }%
+ }{}%
+ \csgdef{#2@registered}{}%
+ }%
\ifcsundef{#2@loaded}%
{
\polyglossia_load_lang_definition:nn{#1}{#2}
@@ -8408,7 +8437,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\def\prefacename{Parathenia}%
\def\chaptername{Kapitulli}%
\def\appendixname{Shtesa}%
- \def\contentsname{Përmbajta}%
+ \def\contentsname{Përmbajtja}%
\def\listfigurename{Figurat}%
\def\listtablename{Tabelat}%
\def\indexname{Indeksi}%
@@ -10720,12 +10749,18 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
% BCP-47 compliant aliases
\setlanguagealias*{croatian}{hr}
+\ifluatex
+ \RequirePackage{luavlna}
+\fi
+
\define@boolkey{croatian}[croatian@]{babelshorthands}[true]{}
\define@boolkey{croatian}[croatian@]{disableligatures}[true]{}
+\define@boolkey{croatian}[croatian@]{splithyphens}[true]{}
+
% Register default options
-\xpg@initialize@gloss@options{croatian}{babelshorthands=false,disableligatures=false}
+\xpg@initialize@gloss@options{croatian}{babelshorthands=false,disableligatures=false,splithyphens=true}
\ifsystem@babelshorthands
\setkeys{croatian}{babelshorthands=true}
@@ -10739,6 +10774,19 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\shorthandoff{"}%
}{}
+\def\croatian@@splhyphen#1{%
+ \ifnum\hyphenchar \font>0%
+ \kern\z@\discretionary{-}{\char\hyphenchar\the\font}{#1}%
+ \nobreak\hskip\z@%
+ \else%
+ #1%
+ \fi%
+}
+
+\def\croatian@splhyphen{%
+ \croatian@@splhyphen{-}%
+}
+
\def\croatian@shorthands{%
\bbl@activate{"}%
\def\language@group{croatian}%
@@ -10768,6 +10816,32 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\@ifundefined{initiate@active@char}{}{\bbl@deactivate{"}}%
}
+\ifxetex
+ % splithyphens
+ \newXeTeXintercharclass\croatian@hyphen % -
+ \newXeTeXintercharclass\croatian@nonsyllabicpreposition%
+\fi
+
+\def\croatian@hyphens{%
+ \ifluatex
+ \AfterPreamble{\enablesplithyphens{croatian}}%
+ \else
+ \XeTeXinterchartokenstate=1
+ \XeTeXcharclass `\- \croatian@hyphen
+ \XeTeXinterchartoks \z@ \croatian@hyphen = {\croatian@@splhyphen}% "-" -> "\croatian@@splhyphen-"
+ % necessary if used together with vlna:
+ \XeTeXinterchartoks \croatian@nonsyllabicpreposition \croatian@hyphen = {\croatian@@splhyphen}% "-" -> "\croatian@@splhyphen-"
+ \fi%
+}
+
+\def\nocroatian@hyphens{%
+ \ifluatex
+ \AfterPreamble{\disablesplithyphens{croatian}}%
+ \else
+ \XeTeXcharclass `\- \z@
+ \fi%
+}
+
\newcommand*\hr@charifavailable[2]{%
\ifcroatian@disableligatures
\bgroup#2\egroup%
@@ -10872,14 +10946,17 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\def\noextras@croatian{%
\ifcroatian@babelshorthands\nocroatian@shorthands\fi%
+ \nocroatian@hyphens%
}
\def\blockextras@croatian{%
\ifcroatian@babelshorthands\croatian@shorthands\fi%
+ \ifcroatian@splithyphens\croatian@hyphens\else\nocroatian@hyphens\fi%
}
\def\inlineextras@croatian{%
\ifcroatian@babelshorthands\croatian@shorthands\fi%
+ \ifcroatian@splithyphens\croatian@hyphens\else\nocroatian@hyphens\fi%
}
% \end{macrocode}
@@ -12595,6 +12672,9 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\define@boolkey{french}[french@]{autospacing}[true]{}
\french@autospacingtrue
+\define@boolkey{french}[french@]{frenchpart}[true]{}
+\french@frenchparttrue
+
\newif\iffrench@autospaceguillemets
\define@boolkey{french}[french@]{autospaceguillemets}[true]{}
\french@autospaceguillemetstrue
@@ -12694,7 +12774,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\let\ttfamily\french@ttfamilyORI
}
-\def\xpg@french@thinsp{\kern 0.5\fontdimen2\font}
+\def\xpg@french@thinsp{\kern 0.5\fontdimen2\font\nobreak\hskip\z@skip}
\def\french@punctuation{%
\lccode"2019="2019
@@ -12817,14 +12897,11 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\def\indexname{Index}%
\def\figurename{\textsc{Fig.}}%
\def\tablename{\textsc{Tab.}}%
- \def\@Fpt{\ifcase\value{part}\or Première\or Deuxième\or
- Troisième\or Quatrième\or Cinquième\or Sixième\or
- Septième\or Huitième\or Neuvième\or Dixième\or Onzième\or
- Douzième\or Treizième\or Quatorzième\or Quinzième\or
- Seizième\or Dix-septième\or Dix-huitième\or Dix-neuvième\or
- Vingtième\fi\space}%
- \def\thepart{\@Fpt partie}%
- \def\partname{}%
+ \iffrench@frenchpart
+ \def\partname{partie}%
+ \else
+ \def\partname{Partie}%
+ \fi%
\def\pagename{page}%
\def\seename{\emph{voir}}%
\def\alsoname{\emph{voir aussi}}%
@@ -12844,9 +12921,83 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
décembre\fi
\space \number\year}}
+\def\xpg@french@part{\ifcase\value{part}\or Première\or Deuxième\or%
+ Troisième\or Quatrième\or Cinquième\or Sixième\or%
+ Septième\or Huitième\or Neuvième\or Dixième\or Onzième\or%
+ Douzième\or Treizième\or Quatorzième\or Quinzième\or%
+ Seizième\or Dix-septième\or Dix-huitième\or Dix-neuvième\or%
+ Vingtième\fi}%
+
+\def\french@capsformat{%
+ % Change part heading
+ % With titlesec
+ \ifcsdef{titleformat}{%
+ \ifcsdef{@part}{%
+ \let\xpg@save@part@format\@part%
+ \patchcmd{\@part}%
+ {\partname\nobreakspace\thepart}%
+ {\xpg@french@part\nobreakspace\partname}%
+ {}%
+ {\xpg@warning{Failed to patch part for French}}%
+ }{}%
+ }{% (not \ifdefined\titleformat)
+ % With KOMA
+ \ifcsdef{sectionformat}{%
+ \ifcsdef{partformat}{%
+ \let\xpg@save@part@format\partformat%
+ \renewcommand{\partformat}{\xpg@french@part~\partname}%
+ }{}%
+ }{% (not \ifdefined\sectionformat)
+ % With memoir
+ \ifcsdef{@memptsize}{%
+ \ifcsdef{@part}{%
+ \let\xpg@save@part@format\@part%
+ \patchcmd{\@part}{\printpartname \partnamenum \printpartnum}%
+ {\partnamefont\xpg@french@part\partnamenum\printpartname}%
+ {}%
+ {\xpg@warning{Failed to patch part for French}}%
+ }{}%
+ }{% (not \ifdefined\@memptsize)
+ % With standard classes
+ \ifcsdef{@part}{%
+ \let\xpg@save@part@format\@part%
+ \patchcmd{\@part}%
+ {\partname\nobreakspace\thepart}%
+ {\xpg@french@part\nobreakspace\partname}%
+ {}%
+ {\xpg@warning{Failed to patch part for French}}%
+ }{}% (end \ifdefined\@part)
+ }% (end \ifdefined\@memptsize)
+ }% (end \ifdefined\sectionformat)
+ }% (end \ifdefined\titleformat)
+}
+
+\def\nofrench@capsformat{%
+ % Reset chapter and part heading
+ \ifcsdef{titleformat}{%
+ % With titlesec
+ \ifcsdef{xpg@save@part@format}{%
+ \let\@part\xpg@save@part@format
+ }{}%
+ }{% (not \ifdefined\titleformat)
+ \ifcsdef{sectionformat}{%
+ % With KOMA
+ \ifcsdef{xpg@save@part@format}{%
+ \let\partformat\xpg@save@part@format
+ }{}%
+ }{%
+ % With memoir and standard classes
+ \ifcsdef{xpg@save@part@format}{%
+ \let\@part\xpg@save@part@format
+ }{}%
+ }% (end \ifdefined\sectionformat)
+ }% (end \ifdefined\titleformat)
+}
+
\def\noextras@french{%
\nofrench@punctuation%
\nofrench@fontsetup%
+ \nofrench@capsformat%
}
\def\blockextras@french{%
@@ -12854,6 +13005,9 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
\french@punctuation%
\fi
\french@fontsetup%
+ \iffrench@frenchpart
+ \french@capsformat%
+ \fi%
}
\def\inlineextras@french{%
@@ -14383,7 +14537,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
% Bidi inserts an RTL mark (0x200f) between number and number separator (- .),
% forcing numbers to RTL. This is wrong for Hebrew.
% So we defunc the respective command.
- \renewcommand*{\DigitsDotDashInterCharToks}{}
+ \renewcommand*{\DigitsDotDashInterCharToks}{}%
\fi%
}
@@ -24997,6 +25151,25 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
%
% \iffalse
%<*Changelog>
+1.51 (08-12-2020)
+
+New features:
+ * New option "frenchpart" for French (#458).
+ * New option "splithyphens" for Croatian (#454).
+
+Bug fixes:
+
+ * Use new LaTeX core hooks rather than filehook package. This fixes
+ a recent breakage of filehook with other external packages (#453).
+ * Remove very old code that pretends polyglossia is babel (#455).
+ * Fix spelling of Albanian contentsname (#456).
+ * Fix part heading modification in French (#458).
+ * Fix extra space in Hebrew (#459).
+ * Register main polyglossia language earlier (#461).
+ * Allow for hyphenations in words following opening guillemet in French
+ with XeTeX (#462).
+
+
1.50a (15-10-2020)
Bug fixes:
diff --git a/macros/unicodetex/latex/polyglossia/polyglossia.pdf b/macros/unicodetex/latex/polyglossia/polyglossia.pdf
index 9477b7f13d..c7ef99de2e 100644
--- a/macros/unicodetex/latex/polyglossia/polyglossia.pdf
+++ b/macros/unicodetex/latex/polyglossia/polyglossia.pdf
Binary files differ
diff --git a/support/aspell/dict/0index.html b/support/aspell/dict/0index.html
index 8440c6de2f..acfa4da541 100644
--- a/support/aspell/dict/0index.html
+++ b/support/aspell/dict/0index.html
@@ -43,7 +43,7 @@ Aspell. They are organized by the 2 or 3 letter ISO code.
<tr><td><a href="de">de</a><td>German<td>&nbsp;<td><a href="de/aspell6-de-20161207-7-0.tar.bz2">aspell6-de-20161207-7-0.tar.bz2</a>
<tr><td><a href="de-alt">de-alt</a><td>German - Old Spelling<td>&nbsp;<td><a href="de-alt/aspell6-de-alt-2.1-1.tar.bz2">aspell6-de-alt-2.1-1.tar.bz2</a>
<tr><td><a href="el">el</a><td>Greek<td>Ελληνικά<td><a href="el/aspell6-el-0.08-0.tar.bz2">aspell6-el-0.08-0.tar.bz2</a>
-<tr><td><a href="en">en</a><td>English<td>&nbsp;<td><a href="en/aspell6-en-2019.10.06-0.tar.bz2">aspell6-en-2019.10.06-0.tar.bz2</a>
+<tr><td><a href="en">en</a><td>English<td>&nbsp;<td><a href="en/aspell6-en-2020.12.07-0.tar.bz2">aspell6-en-2020.12.07-0.tar.bz2</a>
<tr><td><a href="eo">eo</a><td>Esperanto<td>&nbsp;<td><a href="eo/aspell6-eo-2.1.20000225a-2.tar.bz2">aspell6-eo-2.1.20000225a-2.tar.bz2</a>
<tr><td><a href="es">es</a><td>Spanish<td>Español<td><a href="es/aspell6-es-1.11-2.tar.bz2">aspell6-es-1.11-2.tar.bz2</a>
<tr><td><a href="et">et</a><td>Estonian<td>&nbsp;<td><a href="et/aspell6-et-0.1.21-1.tar.bz2">aspell6-et-0.1.21-1.tar.bz2</a>
@@ -190,5 +190,5 @@ Aspell. They are organized by the 2 or 3 letter ISO code.
<tr><td>sq<td>Albanian<td>&nbsp;<td><a href="http://psychology.rutgers.edu/~zaimi/software.html">http://psychology.rutgers.edu/~zaimi/software.html</a>
</table>
<hr>
-<p>Last Updated: 2019-10-06
+<p>Last Updated: 2020-12-07
</body></html>
diff --git a/support/aspell/dict/0index.html.sig b/support/aspell/dict/0index.html.sig
index 557b36a8b6..fd1299c6e2 100644
--- a/support/aspell/dict/0index.html.sig
+++ b/support/aspell/dict/0index.html.sig
Binary files differ
diff --git a/systems/mac/mactex/ExtrasFolder.pdf b/systems/mac/mactex/ExtrasFolder.pdf
index 8cefd27c6c..b348131b83 100644
--- a/systems/mac/mactex/ExtrasFolder.pdf
+++ b/systems/mac/mactex/ExtrasFolder.pdf
Binary files differ
diff --git a/systems/mac/mactex/Licenses.txt b/systems/mac/mactex/Licenses.txt
index cb74033bf3..222747e4ab 100644
--- a/systems/mac/mactex/Licenses.txt
+++ b/systems/mac/mactex/Licenses.txt
@@ -1,6 +1,6 @@
$Id: Licenses.txt,v 1.14 2007/02/28 14:23:19 herbs Exp $
-Brief summary of the licensing of the various applications included as of 2020/11/18
+Brief summary of the licensing of the various applications included as of 2020/12/07
Aquamacs Emacs (Intel) - 3.5 - gpl - http://aquamacs.org/
Aquatkbibtex - 1.3 - gpl - http://aquatkbibtex.sourceforge.net/
@@ -19,4 +19,4 @@ Symbols Widget - 1.4.3 - gpl - http://vocaro.com/trevor/sof
TeX FoG (10.4+) - 1.3.2 - gpl - http://homepage.mac.com/marco_coisson/TeXFoG/
TeX Live Utility (10.6+) - 1.3.6 - bsd - https://github.com/amaxwell/tlutility/releases
TexMaker (10.12+) - 5.0.4 - gpl - http://www.xm1math.net/texmaker/
-TeXShop (10.14+) - 4.51 - gpl - http://www.uoregon.edu/~koch/texshop/texshop.html
+TeXShop (10.14+) - 4.53 - gpl - http://www.uoregon.edu/~koch/texshop/texshop.html
diff --git a/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl b/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
index 8cbc00de27..6854aae3d1 100644
--- a/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
+++ b/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
@@ -20,6 +20,7 @@ $mirrors = {
'https://mirrors.cqu.edu.cn/CTAN/' => 1,
'https://mirrors.hit.edu.cn/CTAN/' => 1,
'https://mirrors.nju.edu.cn/CTAN/' => 1,
+ 'https://mirrors.sjtug.sjtu.edu.cn/ctan/' => 1,
'https://mirrors.tuna.tsinghua.edu.cn/CTAN/' => 1,
'https://mirrors.ustc.edu.cn/CTAN/' => 1,
},
@@ -48,12 +49,8 @@ $mirrors = {
'http://mirror.kakao.com/CTAN/' => 1,
'https://cran.asia/tex/' => 1,
'https://ftp.harukasan.org/CTAN/' => 1,
- 'https://mirror.navercorp.com/CTAN/' => 1,
'https://mirror.yongbok.net/ctan/' => 1,
},
- 'Philippines' => {
- 'https://mirror.pregi.net/tex-archive/' => 1,
- },
'Singapore' => {
'https://download.nus.edu.sg/mirror/ctan/' => 1,
},
@@ -120,7 +117,6 @@ $mirrors = {
},
'Netherlands' => {
'http://ctan.cs.uu.nl/' => 1,
- 'https://ftp.snt.utwente.nl/pub/software/tex/' => 1,
'https://mirror.koddos.net/CTAN/' => 1,
'https://mirror.lyrahosting.com/CTAN/' => 1,
},
@@ -166,9 +162,7 @@ $mirrors = {
'Canada' => {
'http://ctan.mirror.colo-serv.net/' => 1,
'http://ctan.mirror.globo.tech/' => 1,
- 'http://ctan.mirror.rafal.ca/' => 1,
'https://ctan.math.ca/tex-archive/' => 1,
- 'https://mirror.its.dal.ca/ctan/' => 1,
'https://muug.ca/mirror/ctan/' => 1,
},
'Costa Rica' => {
@@ -181,7 +175,6 @@ $mirrors = {
'http://mirrors.ibiblio.org/pub/mirrors/CTAN/' => 1,
'https://ctan.math.illinois.edu/' => 1,
'https://mirror.las.iastate.edu/tex-archive/' => 1,
- 'https://mirrors.concertpass.com/tex-archive/' => 1,
'https://mirrors.rit.edu/CTAN/' => 1,
},
},
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb b/systems/texlive/tlnet/tlpkg/texlive.tlpdb
index df0ed8aa71..e58bdee89a 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/2020
-depend revision/57085
+depend revision/57089
name 00texlive.image
category TLCore
-revision 57076
+revision 57090
shortdesc TeX Live files only in the source repository
longdesc The files here are not copied by the installer and containers
longdesc are not built for them; they exist only in the source
@@ -40,7 +40,7 @@ longdesc IgnorePatterns in the check_files routine in tlmgr.pl augment
longdesc this list. Those are not included in the source/ tarball. For
longdesc information on the 00texlive prefix see
longdesc 00texlive.installation(.tlpsrc)
-runfiles size=13571
+runfiles size=13572
.mkisofsrc
autorun.inf
texmf-dist/README
@@ -425,6 +425,7 @@ runfiles size=13571
tlpkg/tlpsrc/akktex.tlpsrc
tlpkg/tlpsrc/akletter.tlpsrc
tlpkg/tlpsrc/akshar.tlpsrc
+ tlpkg/tlpsrc/albatross.tlpsrc
tlpkg/tlpsrc/alegreya.tlpsrc
tlpkg/tlpsrc/aleph.tlpsrc
tlpkg/tlpsrc/alertmessage.tlpsrc
@@ -4303,7 +4304,7 @@ depend setting_available_architectures:aarch64-linux amd64-freebsd amd64-netbsd
name 00texlive.installer
category TLCore
-revision 57070
+revision 57087
shortdesc TeX Live standalone installer package
longdesc This package defines the files to go into the installer
longdesc archives (install-tl-unx.tar.gz, install-tl.zip) built by the
@@ -10432,6 +10433,171 @@ catalogue-license lppl1.3c
catalogue-topics indic expl3
catalogue-version 0.2
+name albatross
+category Package
+revision 57089
+shortdesc Find fonts that contain a given glyph
+longdesc This is a command line tool for finding fonts that contain a
+longdesc given (Unicode) glyph. It relies on Fontconfig.
+depend albatross.ARCH
+containersize 2786276
+containerchecksum 541be3b0438699aac81a21ca0d8116b06bee3558627582fa3f99ab4291c9042193cb44c4fb2b175bd6a2903ec9ffa729021db934264c4d5cd0be0d0410564428
+doccontainersize 85344
+doccontainerchecksum d3f18fa5770b007135feb9418a96716a36d03081e197d8af33a673b3aa30ed5c4690a109c2934d369d6185ec3f3d6a1a07eae13e11a30ca3e1f3a61facc2016b
+docfiles size=37
+ texmf-dist/doc/support/albatross/README.md details="Readme"
+ texmf-dist/doc/support/albatross/albatross-0.1.0-src.zip
+ texmf-dist/doc/support/albatross/albatross-manual.pdf details="Package documentation"
+ texmf-dist/doc/support/albatross/albatross-manual.tex
+ texmf-dist/doc/support/albatross/version.tex
+runfiles size=755
+ texmf-dist/scripts/albatross/albatross.jar
+ texmf-dist/scripts/albatross/albatross.sh
+catalogue-contact-bugs https://gitlab.com/islandoftex/albatross/-/issues
+catalogue-contact-development https://gitlab.com/islandoftex/albatross/
+catalogue-contact-home https://gitlab.com/islandoftex/albatross
+catalogue-contact-repository https://gitlab.com/islandoftex/albatross/
+catalogue-contact-support https://gitter.im/Island-of-TeX/community
+catalogue-ctan /support/albatross
+catalogue-license bsd3
+catalogue-topics unicode font-use
+catalogue-version 0.1.0
+
+name albatross.aarch64-linux
+category Package
+revision 57089
+shortdesc aarch64-linux files of albatross
+containersize 340
+containerchecksum 2105a7922281bc41e3ba8bd0f0be360d2f7d1de6f77f48ac78d80523b276a31eb20c638447a3dc7ce5c3a400002e0c7a3536038bdf7082d6f21255a821a29098
+binfiles arch=aarch64-linux size=1
+ bin/aarch64-linux/albatross
+
+name albatross.amd64-freebsd
+category Package
+revision 57089
+shortdesc amd64-freebsd files of albatross
+containersize 340
+containerchecksum 1034998a66b8dd786fd82568ae042882d8bcee02c6fcc3cd90cb319c65b1c8399083a0a9e0d85557b350ee3c04b134d34b31ca9fdab2a51af533530de84d851e
+binfiles arch=amd64-freebsd size=1
+ bin/amd64-freebsd/albatross
+
+name albatross.amd64-netbsd
+category Package
+revision 57089
+shortdesc amd64-netbsd files of albatross
+containersize 340
+containerchecksum f6fbb838efa944648a312bc920189243aca3134de9508c95f834b399ca78138dfd15265101c677d9f5e9bed97264dbedbc395b00a27b40520030b0fb3e3f1583
+binfiles arch=amd64-netbsd size=1
+ bin/amd64-netbsd/albatross
+
+name albatross.armhf-linux
+category Package
+revision 57089
+shortdesc armhf-linux files of albatross
+containersize 340
+containerchecksum 78923c9d8619692a29b41f3874a124a3cf649eee78a6116a3fb60af0c1fb8c09d61470acc184f046fa75a7d928bd2d6e3c83dee2077ae242c600d42765d44a0a
+binfiles arch=armhf-linux size=1
+ bin/armhf-linux/albatross
+
+name albatross.i386-cygwin
+category Package
+revision 57089
+shortdesc i386-cygwin files of albatross
+containersize 340
+containerchecksum 9e7676e40c65e93db2b1852b9cb11c4a6c31bbd3ec21e30bc4e0779ee4abf7a7a99456f646a581a2cf682fda2658c2396a7858cfda86aca7771e1454bb5bdc40
+binfiles arch=i386-cygwin size=1
+ bin/i386-cygwin/albatross
+
+name albatross.i386-freebsd
+category Package
+revision 57089
+shortdesc i386-freebsd files of albatross
+containersize 340
+containerchecksum 292ddb79369fa31c25d8fd7962ce692633b0d09e08b7903c1d3e6e78aa74c466235ddbf9d09a9cab2d55bd794b95b444c452db41a538591f8945ecfcb5a5c7d1
+binfiles arch=i386-freebsd size=1
+ bin/i386-freebsd/albatross
+
+name albatross.i386-linux
+category Package
+revision 57089
+shortdesc i386-linux files of albatross
+containersize 340
+containerchecksum 9c0ea239ffca16e48d33519a66b938b37567cf0d6556707fc5e644e75e1247d8af0a9d964dd7907cf27f9c86b9d5186a63699b4fc40551e5e646176acde17b2f
+binfiles arch=i386-linux size=1
+ bin/i386-linux/albatross
+
+name albatross.i386-netbsd
+category Package
+revision 57089
+shortdesc i386-netbsd files of albatross
+containersize 340
+containerchecksum a6707978cbb9a68b958fa0ff016589be20e0cc143f31ae06675c4cf6e53139578f214d8d823260bac695b2d3d62de289ffad03e9fc3cd1e40176d79bc7d0b728
+binfiles arch=i386-netbsd size=1
+ bin/i386-netbsd/albatross
+
+name albatross.i386-solaris
+category Package
+revision 57089
+shortdesc i386-solaris files of albatross
+containersize 340
+containerchecksum de1af91276c34cd755d5a71b26c57ddf94816b492d893896bc7c53d86e704739b73316ac86e1a44f144486ed8109ccf571c6d962225858826042142ce0568e8c
+binfiles arch=i386-solaris size=1
+ bin/i386-solaris/albatross
+
+name albatross.x86_64-cygwin
+category Package
+revision 57089
+shortdesc x86_64-cygwin files of albatross
+containersize 340
+containerchecksum 79b87fc420fcbb2241835d04ae82c4441b30e97e23052c62afebdb6f31f7daf5dce957bd1b9dc231413881db63bad677ebd3ee55509a2247a38a5b5d943c55ac
+binfiles arch=x86_64-cygwin size=1
+ bin/x86_64-cygwin/albatross
+
+name albatross.x86_64-darwin
+category Package
+revision 57089
+shortdesc x86_64-darwin files of albatross
+containersize 340
+containerchecksum 9e400b849e8fe5e6fdc7bafa7b4211b8943b4c18f6fa1e17641db7b658b2c125a694de1f5e1d734d7641a8f59f3c6b2ac032a9307a0d5f005a8cedc1db503533
+binfiles arch=x86_64-darwin size=1
+ bin/x86_64-darwin/albatross
+
+name albatross.x86_64-darwinlegacy
+category Package
+revision 57089
+shortdesc x86_64-darwinlegacy files of albatross
+containersize 348
+containerchecksum 260b41e7d4cfb7ba255a3d7acb5ab27993ccbce053011b15a4890d773d3fb720decf2440c46463e6e085bd5aa53714fd0c36599bd7590bc39d3b2d1ef7913835
+binfiles arch=x86_64-darwinlegacy size=1
+ bin/x86_64-darwinlegacy/albatross
+
+name albatross.x86_64-linux
+category Package
+revision 57089
+shortdesc x86_64-linux files of albatross
+containersize 344
+containerchecksum bbf6474028842aab41eef1ed08347d6caaaa24825c7718978d74b2aa00baef08b6ea38a70dcb9ca3bf63cba1501f0b5f7798174df55581f0eec3817e8fbab5b7
+binfiles arch=x86_64-linux size=1
+ bin/x86_64-linux/albatross
+
+name albatross.x86_64-linuxmusl
+category Package
+revision 57089
+shortdesc x86_64-linuxmusl files of albatross
+containersize 344
+containerchecksum 8766d0a4fe4acc24939b7739f4723c0a56560c08ed48fa5f2d72709d67eab414c7d6dadf6d36dfceba10426f640067c56ed85d3ecd1fbcfa423d6877f8ecbda1
+binfiles arch=x86_64-linuxmusl size=1
+ bin/x86_64-linuxmusl/albatross
+
+name albatross.x86_64-solaris
+category Package
+revision 57089
+shortdesc x86_64-solaris files of albatross
+containersize 340
+containerchecksum 3a88f6538dd7f22302b6b4878f229cbdefa0d690842ee4e8181c4d2fd32652d08598d170e109a361c6fcfda80dbe7c6c11eac3205f371b7ed2011aa99e61f87b
+binfiles arch=x86_64-solaris size=1
+ bin/x86_64-solaris/albatross
+
name alegreya
category Package
revision 54512
@@ -20554,22 +20720,22 @@ binfiles arch=x86_64-solaris size=1
name archaeologie
category Package
-revision 56075
+revision 57090
shortdesc A citation-style which covers rules of the German Archaeological Institute
relocated 1
longdesc This citation-style covers the citation and bibliography rules
longdesc of the German Archaeological Institute (DAI). Various options
longdesc are available to change and adjust the outcome according to
longdesc one's own preferences.
-containersize 72932
-containerchecksum 739b7be7d5bce5f3f89eab7c32a06764679f5601ae971001f656b10fadf26e2d9661331187053db6fe84265f099f76887b983f6cbd0931f71a2147ebe535fd94
+containersize 72928
+containerchecksum 40220a43a1f5775076f75379eb7c6c6eb4f7e9c709b7ff22b0db29868f5ac7e5def3cead10dbcd17e3bad2aa33af7942c10f5968c42494b5ab35dd6886c912db
doccontainersize 1059164
-doccontainerchecksum f0093b989605ba792563a598a3862d005aa33bff2b2b66dbde69cd4afcf47abc695837bec4b378d7b5125cb7144fef0d2ab1029fb0c0f0858e4e2b290fa9adab
+doccontainerchecksum efc68c2bb845f1966aecf6cdb20694778212261d6ba6f0136c87ddd0cd5872d0196c99220c56a9c9dd50ecc32c1a59a4d4630ff3fea9b5d953a0a9ee3aa66dcc
docfiles size=294
RELOC/doc/latex/archaeologie/README.md details="Readme"
RELOC/doc/latex/archaeologie/archaeologie.pdf details="Package documentation"
-srccontainersize 136216
-srccontainerchecksum 08518f4c6fa8b69862b65ddca05d54f5656b983ba1ee18a63fed04bae8b2968715cba6de97f89ebac42755028ad02fc6791c697f1e1cd6361ac4456fb2e1ba1a
+srccontainersize 136220
+srccontainerchecksum 2f3324c8844c5d04d35e3e4bbafac591c1c33ac2a0ba21d7b4b1231ae7883ddd53fee555ac89d2f2fe27358c80470b414f14fef073f03fc3ed405b96a5df290f
srcfiles size=199
RELOC/source/latex/archaeologie/Makefile
RELOC/source/latex/archaeologie/archaeologie.dtx
@@ -20590,7 +20756,7 @@ runfiles size=108
RELOC/tex/latex/archaeologie/spanish-archaeologie.lbx
catalogue-also biblatex-archaeology
catalogue-contact-bugs https://github.com/LukasCBossert/biblatex-archaeologie/issues
-catalogue-contact-home http://biblatex-archaeologie.de
+catalogue-contact-home http://biblatex-archaeologie.texografie.de/
catalogue-contact-repository https://github.com/LukasCBossert/biblatex-archaeologie
catalogue-ctan /macros/latex/contrib/biblatex-contrib/archaeologie
catalogue-license lppl1.3
@@ -37172,7 +37338,7 @@ catalogue-version 1.2.0
name biblatex-swiss-legal
category Package
-revision 56991
+revision 57090
shortdesc Bibliography and citation styles following Swiss legal practice
relocated 1
longdesc The package provides BibLaTeX bibliography and citation styles
@@ -37183,9 +37349,9 @@ longdesc ng-biblatex-swiss-legal-not-displayed-correctly the package is
longdesc at present outdated and does not work properly with newer
longdesc versions of BibLaTeX.
containersize 18148
-containerchecksum ebcc4f4dbf8b0ad589f1d82780dc675ca4168e4d80aa0ea60ee9cdbc0cde879bae4a40ce99fc1147f791200619b1db7bc050477aa7ded2c855d53a1d948b4e98
+containerchecksum becdb04f9f57ed063307e96c60cd505b4cbbc205e6d5b21171a1f2672dba842ba8047e3b9f37da4c3cba7701d7e6c441623103783f973f9db9675a6457a18896
doccontainersize 513436
-doccontainerchecksum cbf04a29b2369f38b9f11c8c5a7986d5d7d21353b967ba61b6f44f26f0bb990801f766d886e14c742258999862500e88788b9e2d2cffb8e9469b68c164b255aa
+doccontainerchecksum e2b2b14243616f5b504f5f4693146b4ad3994e81549227b49abe8e820685d40af9e32af9dc5abef39c3002dc027332285e467e0a8f9f0643838c49ebe0d7d0df
docfiles size=145
RELOC/doc/latex/biblatex-swiss-legal/README details="Readme (French and English)"
RELOC/doc/latex/biblatex-swiss-legal/biblatex-swiss-legal.pdf details="Package documentation (French)" language="fr"
@@ -64067,7 +64233,7 @@ containerchecksum eaa6e54780a0813a88102258ee3bd7a4640787be0b89eff4ba2c9cc19298bf
name collection-fontutils
category Collection
-revision 54074
+revision 57089
shortdesc Graphics and font utilities
relocated 1
longdesc Programs for conversion between font formats, testing fonts,
@@ -64076,6 +64242,7 @@ longdesc Manipulating OpenType, TrueType, Type 1,and for manipulation of
longdesc PostScript and other image formats.
depend accfonts
depend afm2pl
+depend albatross
depend collection-basic
depend dosepsbin
depend dvipsconfig
@@ -64091,8 +64258,8 @@ depend ps2pk
depend psutils
depend t1utils
depend ttfutils
-containersize 524
-containerchecksum b7b908d87f1fb38ee1145c820c01aecb6a61b0d2b706278f8662f0f08377335b13d0809ef6a1da8c8dd2ace32a028233a08e4dffa38e293e14e3288894c2057c
+containersize 528
+containerchecksum 9bc0964c2ce55e4bcab2b2ad0ae1c784a49ffc981620ef3cd549052a5e2b201325ddc444d9afbe57da6dc64d1890d61be5e97caa2c9c63ebbafc5f5d0322acae
name collection-formatsextra
category Collection
@@ -85010,23 +85177,23 @@ catalogue-topics typesetting
name decision-table
category Package
-revision 56164
+revision 57090
shortdesc An easy way to create Decision Model and Notation decision tables
relocated 1
longdesc The decision-table package allows for an easy way to generate
longdesc decision tables in the Decision Model and Notation (DMN)
longdesc format. This package ensures consistency in the tables (i.e.
longdesc fontsize), and is thus a better alternative to inserting tables
-longdesc via images. The decision-table package adds the "\dmntable"
+longdesc via images. The decision-table package adds the \dmntable
longdesc command, with which tables can be created. This command expands
longdesc into a tabular, so it can be used within a table or figure
longdesc environment. Furthermore, this allows labels and captions to be
longdesc added seamlessly. It is also possible to place multiple DMN
longdesc tables in one table/figure environment.
-containersize 2716
-containerchecksum af023c527e7624448cf3c745ad4fc6e4216231f267707c635b6465f42a83eef96fb55ec2a44ae180a06375493abfbc070c2e7e40f72c5fdb67f3d1248221a48f
+containersize 2712
+containerchecksum 5ecd72b8330b67fe7998b965446ee17da3247e541cc9d653221273d68084bf422c18d187a0102adfcf9995016c969c3d5b142993dfb3f6662af9cbb6ea9237e8
doccontainersize 270388
-doccontainerchecksum 4866399fc44b5c87e2fb5ee125a9063b22b0d46082448cdca3518a658eacbdbc968078cba246bffc2ab7a1085028273f010d6a93302027b4c7aefcce5d5d7ba3
+doccontainerchecksum 6d79215378c8b6fe33db9e091e312c2c041f5700600256050e2da015e219c1fceeaf92173132d3060d27fe8ffae9d6b5a461a7bcc03bde164ba7ce934d3c0611
docfiles size=73
RELOC/doc/latex/decision-table/LICENSE
RELOC/doc/latex/decision-table/README details="Readme"
@@ -95342,7 +95509,7 @@ catalogue-version 1.6
name dvisvgm
category TLCore
-revision 56166
+revision 57090
shortdesc Convert DVI, EPS, and PDF files to Scalable Vector Graphics format (SVG)
longdesc Dvisvgm is a command line utility that converts TeX DVI as well
longdesc as EPS and PDF files to the XML-based Scalable Vector Graphics
@@ -95359,9 +95526,9 @@ longdesc the kpathsea library. For more detailed information, see the
longdesc project page.
depend dvisvgm.ARCH
containersize 880
-containerchecksum fdf5a23b42d064283d81681c0f68cf4a8a6b566dfb842706e137754909e2389275bf1dab934c6f257a591d8079a0630b5ab619223a0b40f3a90e062c67944732
+containerchecksum fffb20aa49fc40e9cffd37e57cc06996b9a791894d204c6850f679fb33715e72c93b5c7f5429f81d4c05d31376e5d0a47e62a6dd5656d776d8f752cfd4d2dac4
doccontainersize 102720
-doccontainerchecksum b7627afee9db13729f95a0f9a5136a1ee679466ac4e48de440f791d578dabbc5333872cdb9b28dc6033a7a16e2185a33db24ed234ea67f8784c7520b5e0662f6
+doccontainerchecksum f5e845a3c5e5ac6fa8881a3b402f20d47606100ad3f55a3da2bd615d2682a5a35249dcac4064c2cc62bc949314d9cc65b746414fb1c5baa99760095b9ddfb259
docfiles size=40
texmf-dist/doc/man/man1/dvisvgm.1
texmf-dist/doc/man/man1/dvisvgm.man1.pdf
@@ -95372,7 +95539,7 @@ catalogue-contact-repository https://github.com/mgieseki/dvisvgm
catalogue-ctan /dviware/dvisvgm
catalogue-license gpl3+
catalogue-topics dvi-proc
-catalogue-version 2.10
+catalogue-version 2.11
name dvisvgm.aarch64-linux
category TLCore
@@ -102029,7 +102196,7 @@ catalogue-version 1.1
name endfloat
category Package
-revision 51003
+revision 57090
shortdesc Move floats to the end, leaving markers where they belong
relocated 1
longdesc Place all floats on pages by themselves at the end of the
@@ -102039,25 +102206,23 @@ longdesc normally have occurred. Float types figure and table are
longdesc recognised by the package, unmodified. Since several packages
longdesc define other types of float, it is possible to register these
longdesc float types with endfloat.
-containersize 5148
-containerchecksum 2bc564cb0ad7b9bd53af9304f378b6d0cdd9aa32564f2bbb39abcf0d942c4e18015b7181d4be5e873bcdf4e8f971d65678fdbcfb544c005ad012b378eb6e1351
+containersize 5080
+containerchecksum 9c3820ddd36934dcfd049ab766ed037119459d02e9c049401b910b1c14ae2aed93d94110db66f0cdd2149451e152b5bcac14866c7844ba4a47f8c0a27756f733
doccontainersize 181292
-doccontainerchecksum 39a1cfa84a2cbe5ff1b59fd9c5fa6a19cb1d3aafac6d1fbb111f117892e34142f6a21ce7808238608ac0602d905cfff6235a78762a0d510dbc436c881baf59f9
+doccontainerchecksum 0004d60fe959415670b5173bbab6d37733ed82b537d714c7357dae85ff8f7204e316c48d2651b1b53cc9b6ad0206a47c9cde1acdeb6aae676a25e50f363238c2
docfiles size=62
RELOC/doc/latex/endfloat/COPYING
RELOC/doc/latex/endfloat/README details="Readme"
RELOC/doc/latex/endfloat/efxmpl.cfg
RELOC/doc/latex/endfloat/endfloat.pdf details="Package documentation"
srccontainersize 29220
-srccontainerchecksum 551afda371c0d4a6e71299cac919857eaaed3ee8891f96083cd76fb33ededfaa3daa814593efbc9e7e8dbd4e7d257945972df547d7c24665e760960eccea07c9
+srccontainerchecksum bc5150716b23d3aa1e3a66e29fca3e8f9703199feb05b4bf76834e79654c39b0f6790ef1f0c193abeb0acfd0b2717076d4e2c89069221e1bc45716e0de314e85
srcfiles size=30
RELOC/source/latex/endfloat/endfloat.drv
RELOC/source/latex/endfloat/endfloat.dtx
RELOC/source/latex/endfloat/endfloat.ins
runfiles size=5
RELOC/tex/latex/endfloat/endfloat.sty
-catalogue-contact-bugs https://gitlab.com/axelsommerfeldt/endfloat/issues
-catalogue-contact-repository https://gitlab.com/axelsommerfeldt/endfloat
catalogue-ctan /macros/latex/contrib/endfloat
catalogue-license gpl
catalogue-topics float
@@ -156516,7 +156681,7 @@ catalogue-topics macro-supp layout latex3 pre-release
name l3kernel
category Package
-revision 57085
+revision 57088
shortdesc LaTeX3 programming conventions
relocated 1
longdesc The l3kernel bundle provides an implementation of the LaTeX3
@@ -156526,10 +156691,10 @@ longdesc LaTeX3 kernel and other future code are built: it is an API for
longdesc TeX programmers. The packages are set up so that the LaTeX3
longdesc conventions can be used with regular LaTeX2e packages.
depend l3backend
-containersize 157592
-containerchecksum 205690701540296dfd70cc5899e99d468a788a5bf294d65bbea4d11ea57a36439f37017830879c32a948301173a9d03a869dce50875262b6c212f1034f79d2e8
-doccontainersize 10281132
-doccontainerchecksum df966a4c9d6b0c8eb4aa1b98fcf166dd6916b9cf408ece144523b1b570f97305e061577eb8f833bf14630beeb3c6133ddfb004a885d9d7b7ca3c2dec6af2a8fd
+containersize 157680
+containerchecksum 88c7dc3c6d89233cdf67e34de15aa579049cfe3697e1732dfc0cf7b8490bf1495b33bdc2887862be0bea5d3dc52524bd98f055d86947133c612772cbd40bcd13
+doccontainersize 10282408
+doccontainerchecksum a7a2096d9f6f7e314e092c81ac077c0278f15d7a16a7e04fe579f23d641c5e7441a51e40be7a02b05ca6faef440c533a68aa2df82a10b56f142c1f3b8e838e7a
docfiles size=2887
RELOC/doc/latex/l3kernel/CHANGELOG.md
RELOC/doc/latex/l3kernel/README.md details="Readme"
@@ -156576,8 +156741,8 @@ docfiles size=2887
RELOC/doc/latex/l3kernel/source3.pdf
RELOC/doc/latex/l3kernel/source3.tex
RELOC/doc/latex/l3kernel/source3body.tex
-srccontainersize 552204
-srccontainerchecksum 03927de5d6f3cacd06f29fc085d4d7dba4809b8366686baf397fe007006b224c0356444686d5b973a49f7a0db848a6e5138a01d3a46484a1d5da2377bb568a85
+srccontainersize 552264
+srccontainerchecksum 128ec7b9af20d7c4fbbfdce6817f09be325982143a72989ac46e549e6481b67ccb8eb169c00dfdd3096612ea87e2e6764d0d69be4134be81de164c48a0bda3b6
srcfiles size=852
RELOC/source/latex/l3kernel/expl3.dtx
RELOC/source/latex/l3kernel/l3.ins
@@ -226106,7 +226271,7 @@ catalogue-topics maths
name oup-authoring-template
category Package
-revision 56991
+revision 57090
shortdesc A general template for journals published by Oxford University Press (OUP)
relocated 1
longdesc This package provides a general LaTeX template for journals
@@ -226118,9 +226283,9 @@ longdesc see
longdesc https://academic.oup.com/journals/pages/authors/preparing_your_
longdesc manuscript.
containersize 15128
-containerchecksum b86d2e2cceb18e4fbe9277963c1a7fd0f49893232956289f3ccf95811c7beefc0e859fb6697a5c2fafef3f722d602846ea2de5e798734b91ac8556bd9806f293
+containerchecksum b9094e346c347a463f47c7496e3eae74f361b3aa6e21d11bd59a6c0abcd12fe85e04d32d0a861b7ed86dee4e1c9dcda90e63ee3424e822b812485be185edf03b
doccontainersize 511088
-doccontainerchecksum dd9a2fda27eb26abb598e89923eacd22b1685d95c3633fcecb662076a6e56d9d8888a70707ba138b8ff6677c9a91f6b811dcd87f85e788fbac0ef2f716da6afe
+doccontainerchecksum 27974395bb7c57ea5f1fefc1c6cef47a7e879721face9510d0f5ee89356f5bcd836b5b036b0e1a7ccdea6236dcbc347d2ddb2bc49b38386c855258548b5733bd
docfiles size=159
RELOC/doc/latex/oup-authoring-template/README details="Readme"
RELOC/doc/latex/oup-authoring-template/doc/oup-authoring-template-doc.pdf details="User manual"
@@ -277074,29 +277239,30 @@ catalogue-topics font font-type1 font-collection
name sympytexpackage
category Package
-revision 45818
+revision 57090
catalogue sympytex
shortdesc Include symbolic computation (using sympy) in documents
relocated 1
longdesc The bundle supports inclusion of symbolic-python (sympy)
longdesc expressions, as well as graphical output from the sympy
longdesc plotting module (or from matplotlib).
-containersize 3640
-containerchecksum 14813cf24b562ed135e6d5a0078306f0687cd464915ecc17e61df0bb5d9900d7110e8338c469d4d55664b2fecd1eeb6bb4f359b11fb2a07bad72a442b7698842
+containersize 3636
+containerchecksum 9a1fa177703dbed088861ff47e5b53f3c0f433abe15d471d181368c52e0cdae7350090ce5cb3c25d4ca816d1132eb009359977ada3f3c0b5c3b80bc0873f8110
doccontainersize 1844
-doccontainerchecksum c4e7e386852b3acd071d1addea10435985e7722dfffd4933ac2c3821b5a75e8c9500f5c42bb6b3e2315bd06b8d3e2ad12423c2c43547bb51b2f59bd982d7dfd3
+doccontainerchecksum 0013c9c1e21f70e36e6b30f12d777f9f78b727ee1beb2f893133248fffb75f0bc4523c0787c0e292f197ce1c01b5f37b34c33ae97ed713bd900848657d803c59
docfiles size=2
RELOC/doc/latex/sympytexpackage/README details="Readme"
RELOC/doc/latex/sympytexpackage/README.TEXLIVE
-srccontainersize 17088
-srccontainerchecksum 7dfa3975f5c042f7196ef6a76e31b79caeca4101026afc53aed719239e7ce701a7917e733bb77297b569333adccab6b5bc7149befdd6eed4f09d46ea38684579
+srccontainersize 17084
+srccontainerchecksum 45df3251efd8a8e5669f72b83fc8c07c9df777ec90bdae9b8a92ff3c1875fe623574365f69162cc4c2f89e4fc7ea32dd1ac0ce164ee804799496be25466a12bc
srcfiles size=15
RELOC/source/latex/sympytexpackage/sympytexpackage.dtx
RELOC/source/latex/sympytexpackage/sympytexpackage.ins
runfiles size=4
RELOC/scripts/sympytexpackage/sympytex.py
RELOC/tex/latex/sympytexpackage/sympytex.sty
-catalogue-contact-home http://elec.otago.ac.nz/w/index.php/SympyTeX
+catalogue-contact-bugs https://github.com/tmolteno/SympyTeX/issues
+catalogue-contact-repository https://github.com/tmolteno/SympyTeX
catalogue-ctan /macros/latex/contrib/sympytexpackage
catalogue-license gpl2
catalogue-topics callback
@@ -290533,15 +290699,15 @@ docfiles size=592
name texlive-docindex
category TLCore
-revision 57070
+revision 57087
shortdesc top-level TeX Live doc.html, etc.
longdesc These files are regenerated as needed, which is often, so we
longdesc make them a separate package. See the tl-update-auto script for
longdesc the process.
containersize 388
-containerchecksum cda236e5d3752f8a8d0d5366475695cc793ca286c70eff6abe2904a8eed002e69b4de35233eb031401951970ac96c246e3e8a573114b743b87a5f3e6fe24abbe
-doccontainersize 170500
-doccontainerchecksum 6a62ec28d11b93a0bce52bec4ac93aa12f1f17f67258b91abb68a49a548bba8ea64d18a4b7966463d4b48b446e480193b6bef8b82465533013514cc310ce6a3e
+containerchecksum 73ac53d0e24d4baf938229f7c069eeef7c33a228ef36709aab2390f2db3ef86d9890557c6b46cee1636f6151918f913912a5390ae5e8e620ebb52b9ea8e09ba6
+doccontainersize 170532
+doccontainerchecksum 62b271c36155739bf9a8f7cdf491ed44bdf37f2dec84aa4b0ae66e3272c36f6083d676dd9880903c949bca7143bcc86bd1f5539c61f6730f7ad2c00009b8944b
docfiles size=338
doc.html
@@ -290763,7 +290929,7 @@ docfiles size=368
name texlive-scripts
category TLCore
-revision 57076
+revision 57087
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.
@@ -290771,10 +290937,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 132124
-containerchecksum 846d070eb36a161ea3ca53bf3a10037eb27b64ab8376996dab2f8e9db76c4ece8931f19dc9d32eb1e11ed716af54afb533509cc62b1cfd6582be0f673cab2ad9
-doccontainersize 218656
-doccontainerchecksum a70d1e61dedd49711a54a81c3f03f0cb923baa9df06e35bbcebf915d59a602c1a3352173994a602d3331c6435fbdeaef5a7313f5a40db27616833d85ae1cd537
+containersize 132056
+containerchecksum 8846aadeb032ce9c7517930237a7c464281aa2936fcc9c0d45a178430f1817e47e1c948ce928940d1817d99caadef34ccd034e5edfcdae2996905acd9ba7e0d3
+doccontainersize 218652
+doccontainerchecksum 11e1d0b62c7b627cacef3f1ed7f78862ba39073f77587f95b84ce5813204d7125118ab089ac8135f68390524714d114d0f5bd6af68de9d66f0078d9e9f1ed107
docfiles size=141
texmf-dist/doc/man/man1/fmtutil-sys.1
texmf-dist/doc/man/man1/fmtutil-sys.man1.pdf
@@ -314715,7 +314881,7 @@ catalogue-version 1.0
name ut-thesis
category Package
-revision 56996
+revision 57090
shortdesc University of Toronto thesis style
relocated 1
longdesc This LaTeX document class implements the formatting
@@ -314723,15 +314889,15 @@ longdesc requirements of the University of Toronto School of Graduate
longdesc Studies (SGS), as of Fall 2020 (
longdesc https://www.sgs.utoronto.ca/academic-progress/program-completio
longdesc n/formatting). For example usage, see the GitHub repository.
-containersize 2540
-containerchecksum 3a7d0e6650f80526ddd3ed092295db543fbbf17bc27fdb370e8ad6cb6e141393592bc6aaf8fbb15975a0d4dfdf16a69f272a0b69e65f995e369a11c95e66d024
-doccontainersize 116936
-doccontainerchecksum d38772e27cac7154b3d863417c4f95696812e829d51f5a09266018ad63c27ccef3f28072abd47bfdea90076c7c9a3ddb0ad96ddb9c297baaac2e430b12a3f995
+containersize 2544
+containerchecksum ff89eec076d905da4019745635036abbaf35f0e58e9996adb6e2cdf947a7844d422e3d4f8a4266c141552290913fddea6a384c5855f9d61c7cd65eab9a9087fb
+doccontainersize 116940
+doccontainerchecksum eff4f380c365fa572655f5a730a85ac8249f69fc07a5ff7be4f9f806dc243059fe675a554e98bee0a35f58379d1539bb99d927c82a13e800305aad9f99c4e388
docfiles size=30
RELOC/doc/latex/ut-thesis/README details="Readme"
RELOC/doc/latex/ut-thesis/ut-thesis.pdf details="Package documentation"
-srccontainersize 6608
-srccontainerchecksum 98de0ae9e5b17862bb8706179dd1b21392db6b1d64d80f3424bd8d00b243f2a0cd3f03a71aca32deb4300526d4739e6c05636063795f6f50229e873a894e2913
+srccontainersize 6604
+srccontainerchecksum ad95cf21ee1f6d0a209fef8ab08f89c59649297c52a3578c44fec9132e6a773deb94b661973c5b16c30f6f4c4a3d6eb3b6ac972f37bc2b48864498d300d74305
srcfiles size=6
RELOC/source/latex/ut-thesis/ut-thesis.dtx
RELOC/source/latex/ut-thesis/ut-thesis.ins
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
index c2fa159b0f..84f8e3bc43 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
@@ -1 +1 @@
-28b51cb6b5ed8ee66a79b9bfc460c35e texlive.tlpdb
+7b79973afc6e5923ee37262ccf93e6f9 texlive.tlpdb
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
index b344f8a36a..617dc2d7aa 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
@@ -1 +1 @@
-1cbe7f6eff9e4df1cb38d2d0538c6a825d21979c6fce430f5bd70feb5b7183b71cb1647dbf8118a53ebb46d5591b0d6d969ba2236d2b56622363f9e335e94364 texlive.tlpdb
+07fb4e28e940ff5011c0ee75b3670de063983526c859d4c90881180c5eec0d90f88501a57ef2cf01538821fd367b47fc0190eeffbc6c5f6fd5c0ac5fcb5c5909 texlive.tlpdb
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
index 21b4b72d35..e7fa6d79d9 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-----
-iQEcBAEBCgAGBQJfzX4CAAoJEEzhh34ZQ4xwOeQH/1jlyrftZCckiuNQ4ptzs54p
-DHmO3YXr8+Rc7Wqfu5bHpZaiiUkl3PyAGxsAj/09rfhOKxJRUOP3XCltfnbHIkgf
-pv8jWBHzuVHg3whyQUgd3BeqcT5/IlPBUcPyRCAUDQbn9VHWMwfOVQECJbIKbuTI
-Zy5iVRzqPHyOguA7fcwS/ROMZwqDyNuS16J47nV/az3WjUrSaVOKeDseDSzDlgHR
-x3FMqVNXpE8UHawzsQD00co6hSADQoM+cW+TYmeG9DI5OVZpeZ7xH4AW69k4m36p
-9zrMm7/ak8KuOx/72SxHYdB7blRdRIGkwlP06DE4C4JQQ5QYGn5mJj1Lp+sREBU=
-=MWUI
+iQEcBAEBCgAGBQJfzs/OAAoJEEzhh34ZQ4xwUwEIALABfJFFyoX5UHYm3XuDDg0Z
+raQ1Q+PxWHmhOE0JNwKUMp7CzmhaVlqInypr8buYy2+IQZ5OX/8k3TAqV+SSPmUz
+oHjTvqpAdrvTeOEZlOCFXHGd+p+M0PtnJvksA5haIcTrTkskEKED3Vm0uw8Qg3GN
+TM6v80wvCy1lP9zzZFG9yR+Tg1YQfPZN8Mqf2BQFmcx1JsVH7+/3E7NNmcQHR4+5
+1pF2bUU1+ypMiJ9pU2cx7nlFjrucZEUJqFbRnPfwLiAv52lreGk+F7MQ5qg+iXyN
+cphqgKBBtqbW83BPgUcajORN4/4kOghBfZPfT1uXtK3UW8fAUC4/n7nRXKP46+E=
+=nI4v
-----END PGP SIGNATURE-----
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
index 2ea0a10af3..9dc4c6ec7d 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
Binary files differ
diff --git a/systems/win32/miktex/tm/packages/next/pr.ini b/systems/win32/miktex/tm/packages/next/pr.ini
index cca223205b..95ee9bc1a5 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=1607375661
+date=1607462096
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=349d56c3e2a547f4bec5478f9df018a1
+lstdigest=b51a5d09a8190dd16f7cf43452c7aa78
numpkg=4012
relstate=next
-version=7646
+version=7647
;;;;This configuration file is signed by a MiKTeX maintainer. The signature follows.
;;;;-----BEGIN MIKTEX SIGNATURE-----
-;;;; signature/miktex: rwzds9CgNnjjA6bejq7ihOUUi3Tq9tcZ4cLKWIS5mokNCfxDtM+abHIM8Svl3qprTkfwbk7pRvykCpTy/MTTfur/xGV70zPqboO+szqCYjwImnObRecf9a8L3IOrueHLC7gH4mDz3SzMcTYx6j/8fB/IEU4kBfMuNhNaLeH/0UeCafbHqpEV+snPSwuYeAmXNXCKFKHKjObYETdjtVNyHAGhhVnWqSp3WL17suMlIsDkjsfgszY5P4QoM+/jpN7KUzy4nq8e+SUynOef/YJGyoO8UuURT8WETkG8K2Ix9xW5H3gEEPR0WfxYcSWN4qeTHsE+8hnATD9o++iCTI5FVg==
+;;;; signature/miktex: hQI3VsXzbtcYiVClei5O6P3KqrxJCW0YmlCjxBTrnXCGfD2hEQrTS94HVHEBdFte0Z2GfuI/MLRhk2rsjisC955V+pAkxUDu+zFlfmTtpIT6/3Cfa3eaZ73857UH5QSdpkEl/3+W5amcM+zbu25d1OH60DQL0Ol9Dx0fkGXg14EbZCBxT/GTcn5XAdZSCLAxgjbs1wqQHt2qqOdnwz2zen+4+woHJocyY0G8NnG0OLzwtMjR6kQg840JxnHXb7BcLtnNmMTMtpVWp9gy5w0tMz6LEwHzV15RCTxHTU3V67aUk8befIsekL5EbUC0t7In94dbzmjHKbYSzQjOs9A1YQ==
;;;;-----END MIKTEX SIGNATURE-----
diff --git a/systems/win32/miktex/tm/packages/pr.ini b/systems/win32/miktex/tm/packages/pr.ini
index edb2488019..318d2b6287 100644
--- a/systems/win32/miktex/tm/packages/pr.ini
+++ b/systems/win32/miktex/tm/packages/pr.ini
@@ -1,13 +1,13 @@
[repository]
-date=1607375472
+date=1607461920
lastupd=xcharter apa7 asymptote babel-albanian bewerbung bxjaholiday datax elsarticle emisa eso-pic everyshi hep-paper l3kernel lshort-italian lwarp mf2pt1 ms pbalance pgf plautopatch
-lstdigest=df94c2f579918bbc1d659ad632e554e0
+lstdigest=e9de071020e41b15c308111f5e189632
numpkg=4012
relstate=stable
-version=7646
+version=7647
;;;;This configuration file is signed by a MiKTeX maintainer. The signature follows.
;;;;-----BEGIN MIKTEX SIGNATURE-----
-;;;; signature/miktex: ebCdsVs0kAoJirkzS0RBbCgvz5iV8Y24b6NeWHRY5pkK3PIuPOrRRTiOyrjsK9urEuBBZFLr3C4PsrD2g/d5/V5qVfysSFuyxXMcgNmqQCjGG9imrw7iivniIinEKaWcJvY0+O7nm6Pya+FtQHopyhsGrXx3Bq20l5JABTrY/hxDy03T/Pq2T/WuxMNt1x26Pyco+eh2T32GfFY8Q/icXDO8oFk0pisneDqECzn/S/TNdv8os/69rCdU3xtMqAFGmXHvuUQV5pcudszcYld2yYki7dm5hidL4370fwWqwO9IeyXBQFVYS5Fn1PoPTkt1+35k+hgV5xYPH7rrQx4VBw==
+;;;; signature/miktex: Np/+B+73p9NCMenL9KIy/9xa8ggzVLHIP46pESiHMPODG23UP4HLMRMysJw12YRyf6BQOzqs4e/vzWhqqec1d2tfYnG2tZF0M0PjD+LeREvpSUhcb3ZdaATeSLBTBQTx5tefP7Bbcncxxj/Q2/Z+5MojDV1jpNnoRUrDIPaLNaGqivV5wTp6kgow1Ru4qqi3wH0saoaRbfXIjJ9vfLoMKHtz6cesMP877kV3w1umB2bvk3Cl5X4Cjafo7x5UFxSGlkdLmAie5wjRiehdagfNXGdZojFlKfhTj2e1x2PRG33Kzc8x7rfYF21vShB7eSPpTDfgeXLT7FAYdd/d7Z1fGA==
;;;;-----END MIKTEX SIGNATURE-----
diff --git a/systems/win32/w32tex/ChangeLog b/systems/win32/w32tex/ChangeLog
index d68342a60d..5099f323eb 100644
--- a/systems/win32/w32tex/ChangeLog
+++ b/systems/win32/w32tex/ChangeLog
@@ -1,5 +1,40 @@
W32TeX (x86 & x64) ChangeLog
+[2020/12/07]
+(01) context.tar.xz
+ ConTeXt version: 2020.12.06 18:12.
+(02) extractpdfmark-w32.tar.xz
+ Update poppler (20.12.1) in extractpdfmark.exe.
+(03) latex-dev.tar.xz
+ Update format files.
+(04) ltxpkgs.tar.xz
+ Update bookcover, chemnum and l3kernel.
+(05) luatex-dev-w32.tar.xz
+ Update format files.
+(06) luatex-exp-w32.tar.xz
+ Update format files.
+(07) luatex-w32.tar.xz
+ Update format files.
+(08) pdftex-w32.tar.xz
+ Update format files.
+ Update poppler (20.12.1) in poppler utilities.
+(09) ptex-ng-w32.tar.xz
+ Update format files.
+(10) ptex-w32.tar.xz
+ Update format files.
+(11) tex4htk-w32.tar.xz
+ Update html4.4ht and mktex4ht.4ht
+(12) uptex-w32.tar.xz
+ Update format files.
+(13) web2c-lib.tar.xz
+ Update babel/japanese.
+(14) xetex-w32.tar.xz
+ Update format files.
+(15) win64/extractpdfmark-w64.tar.xz
+ Update poppler (20.12.1) in extractpdfmark.exe.
+(16) win64/pdftex-w64.tar.xz
+ Update poppler (20.12.1) in poppler utilities.
+
[2020/12/06]
(01) aleph-w32.tar.xz
(02) context.tar.xz
diff --git a/timestamp b/timestamp
index e01218c3ee..554babe80c 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:
-2020-12-08-02-02
+2020-12-09-02-02