From fb07ccd098248248795fb851a3a6479ecafaaa47 Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Sat, 18 Sep 2021 03:00:49 +0000 Subject: CTAN sync 202109180300 --- FILES.byname | 496 +-- FILES.byname.gz | Bin 2387109 -> 2387094 bytes FILES.last07days | 492 ++- graphics/pstricks/contrib/luapstricks/README.md | 59 + .../pstricks/contrib/luapstricks/luapstricks.lua | 3946 ++++++++++++++++++++ macros/latex/contrib/zref-check/CHANGELOG.md | 15 +- .../latex/contrib/zref-check/zref-check-code.pdf | Bin 710511 -> 739197 bytes macros/latex/contrib/zref-check/zref-check.dtx | 500 +-- macros/latex/contrib/zref-check/zref-check.pdf | Bin 455030 -> 457730 bytes macros/unicodetex/latex/njuthesis/README.md | 9 +- macros/unicodetex/latex/njuthesis/README_ZH_CN.md | 77 + .../latex/njuthesis/figure/njuname-large.jpg | Bin 817068 -> 0 bytes .../latex/njuthesis/figure/njuname-large.pdf | Bin 0 -> 84739 bytes macros/unicodetex/latex/njuthesis/njuthesis.cls | 96 - macros/unicodetex/latex/njuthesis/njuthesis.dtx | 2266 +++++++++++ macros/unicodetex/latex/njuthesis/njuthesis.pdf | Bin 1468177 -> 638180 bytes .../latex/njuthesis/profile/abstract.sty | 136 - .../latex/njuthesis/profile/components.sty | 173 - .../unicodetex/latex/njuthesis/profile/cover.sty | 251 -- macros/unicodetex/latex/njuthesis/profile/font.sty | 219 -- .../latex/njuthesis/profile/packages.sty | 71 - macros/unicodetex/latex/njuthesis/profile/page.sty | 54 - .../latex/njuthesis/profile/reference.sty | 68 - support/TeX4ht/source/ChangeLog | 7 + support/TeX4ht/source/tex4ht-html4.tex | 10 +- support/TeX4ht/source/tex4ht-ooffice.tex | 32 +- support/latex2nemeth/README | 75 +- support/latex2nemeth/contrib/nemeth2odt | 30 + support/latex2nemeth/encodings/nemeth.json | 1762 +++++++++ support/latex2nemeth/encodings/polytonic.json | 10 +- support/latex2nemeth/examples/nemeth.json | 1204 ------ support/latex2nemeth/latex2nemeth | 2 +- .../texlive/tlnet/tlpkg/installer/ctan-mirrors.pl | 2 - systems/texlive/tlnet/tlpkg/texlive.tlpdb | 129 +- systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 | 2 +- systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 | 2 +- .../texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc | 14 +- systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz | Bin 2310484 -> 2311652 bytes systems/win32/miktex/tm/packages/next/pr.ini | 8 +- systems/win32/miktex/tm/packages/pr.ini | 8 +- timestamp | 2 +- 41 files changed, 9109 insertions(+), 3118 deletions(-) create mode 100644 graphics/pstricks/contrib/luapstricks/README.md create mode 100644 graphics/pstricks/contrib/luapstricks/luapstricks.lua create mode 100644 macros/unicodetex/latex/njuthesis/README_ZH_CN.md delete mode 100644 macros/unicodetex/latex/njuthesis/figure/njuname-large.jpg create mode 100644 macros/unicodetex/latex/njuthesis/figure/njuname-large.pdf delete mode 100644 macros/unicodetex/latex/njuthesis/njuthesis.cls create mode 100644 macros/unicodetex/latex/njuthesis/njuthesis.dtx delete mode 100644 macros/unicodetex/latex/njuthesis/profile/abstract.sty delete mode 100644 macros/unicodetex/latex/njuthesis/profile/components.sty delete mode 100644 macros/unicodetex/latex/njuthesis/profile/cover.sty delete mode 100644 macros/unicodetex/latex/njuthesis/profile/font.sty delete mode 100644 macros/unicodetex/latex/njuthesis/profile/packages.sty delete mode 100644 macros/unicodetex/latex/njuthesis/profile/page.sty delete mode 100644 macros/unicodetex/latex/njuthesis/profile/reference.sty create mode 100644 support/latex2nemeth/contrib/nemeth2odt create mode 100644 support/latex2nemeth/encodings/nemeth.json delete mode 100644 support/latex2nemeth/examples/nemeth.json diff --git a/FILES.byname b/FILES.byname index d544cb355c..2798d9369e 100644 --- a/FILES.byname +++ b/FILES.byname @@ -5105,7 +5105,7 @@ 1990/10/02 | 5440 | dviware/vutex/vaxvms.hlp 1990/10/02 | 812 | dviware/vutex/vaxvms.ins 1990/10/02 | 127576 | dviware/vutex/vutex.web -2021/09/16 | 61347 | FILES.last07days +2021/09/17 | 66565 | FILES.last07days 2021/07/24 | 1139410 | fonts/aboensis/Aboensis.glyphs 2021/07/24 | 18907382 | fonts/aboensis/aboensis.pdf 2021/07/24 | 137860 | fonts/aboensis/Aboensis-Regular.otf @@ -156352,6 +156352,9 @@ 2014/07/24 | 36126 | graphics/pstricks/contrib/dsptricks/dsptricks.sty 2014/07/25 | 606 | graphics/pstricks/contrib/dsptricks/README 2014/07/25 | 186879 | graphics/pstricks/contrib/dsptricks.zip +2021/09/17 | 122165 | graphics/pstricks/contrib/luapstricks/luapstricks.lua +2021/09/17 | 3356 | graphics/pstricks/contrib/luapstricks/README.md +2021/09/17 | 25311 | graphics/pstricks/contrib/luapstricks.zip 2009/08/26 | 42811 | graphics/pstricks/contrib/makeplot/makeplot.dtx 2009/08/26 | 2006 | graphics/pstricks/contrib/makeplot/makeplot.ins 2009/08/26 | 147019 | graphics/pstricks/contrib/makeplot/makeplot.pdf @@ -232276,16 +232279,16 @@ 2013/11/26 | 524 | macros/latex/contrib/ziffer/README 2013/11/26 | 3959 | macros/latex/contrib/ziffer/ziffer.sty 2013/11/30 | 2049 | macros/latex/contrib/ziffer.zip -2021/08/17 | 845 | macros/latex/contrib/zref-check/CHANGELOG.md -2021/08/17 | 38 | macros/latex/contrib/zref-check/DEPENDS.txt -2021/08/17 | 1002 | macros/latex/contrib/zref-check/README.md -2021/08/17 | 1151830 | macros/latex/contrib/zref-check.zip -2021/08/17 | 710511 | macros/latex/contrib/zref-check/zref-check-code.pdf -2021/08/17 | 2273 | macros/latex/contrib/zref-check/zref-check-code.tex -2021/08/17 | 86693 | macros/latex/contrib/zref-check/zref-check.dtx -2021/08/17 | 2791 | macros/latex/contrib/zref-check/zref-check.ins -2021/08/17 | 455030 | macros/latex/contrib/zref-check/zref-check.pdf -2021/08/17 | 2607 | macros/latex/contrib/zref-check/zref-check.tex +2021/09/16 | 1382 | macros/latex/contrib/zref-check/CHANGELOG.md +2021/09/16 | 38 | macros/latex/contrib/zref-check/DEPENDS.txt +2021/09/16 | 1002 | macros/latex/contrib/zref-check/README.md +2021/09/17 | 1183078 | macros/latex/contrib/zref-check.zip +2021/09/16 | 739197 | macros/latex/contrib/zref-check/zref-check-code.pdf +2021/09/16 | 2273 | macros/latex/contrib/zref-check/zref-check-code.tex +2021/09/16 | 88851 | macros/latex/contrib/zref-check/zref-check.dtx +2021/09/16 | 2791 | macros/latex/contrib/zref-check/zref-check.ins +2021/09/16 | 457730 | macros/latex/contrib/zref-check/zref-check.pdf +2021/09/16 | 2607 | macros/latex/contrib/zref-check/zref-check.tex 2020/10/09 | 581 | macros/latex/contrib/zref/README.md 2020/10/09 | 690321 | macros/latex/contrib/zref.zip 2020/10/09 | 195694 | macros/latex/contrib/zref/zref.dtx @@ -242363,21 +242366,15 @@ 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 -2021/09/11 | 21738 | macros/unicodetex/latex/njuthesis/figure/njulogo.pdf -2021/09/11 | 817068 | macros/unicodetex/latex/njuthesis/figure/njuname-large.jpg -2021/09/11 | 12747 | macros/unicodetex/latex/njuthesis/figure/njuname.pdf -2021/09/11 | 19105 | macros/unicodetex/latex/njuthesis/LICENSE -2021/09/11 | 3047 | macros/unicodetex/latex/njuthesis/njuthesis.cls -2021/09/11 | 1468177 | macros/unicodetex/latex/njuthesis/njuthesis.pdf -2021/09/11 | 4083 | macros/unicodetex/latex/njuthesis/profile/abstract.sty -2021/09/11 | 4185 | macros/unicodetex/latex/njuthesis/profile/components.sty -2021/09/11 | 7287 | macros/unicodetex/latex/njuthesis/profile/cover.sty -2021/09/11 | 7505 | macros/unicodetex/latex/njuthesis/profile/font.sty -2021/09/11 | 2953 | macros/unicodetex/latex/njuthesis/profile/packages.sty -2021/09/11 | 1833 | macros/unicodetex/latex/njuthesis/profile/page.sty -2021/09/11 | 2143 | macros/unicodetex/latex/njuthesis/profile/reference.sty -2021/09/11 | 823 | macros/unicodetex/latex/njuthesis/README.md -2021/09/11 | 1802308 | macros/unicodetex/latex/njuthesis.zip +2021/09/17 | 21738 | macros/unicodetex/latex/njuthesis/figure/njulogo.pdf +2021/09/17 | 84739 | macros/unicodetex/latex/njuthesis/figure/njuname-large.pdf +2021/09/17 | 12747 | macros/unicodetex/latex/njuthesis/figure/njuname.pdf +2021/09/17 | 19105 | macros/unicodetex/latex/njuthesis/LICENSE +2021/09/17 | 72250 | macros/unicodetex/latex/njuthesis/njuthesis.dtx +2021/09/17 | 638180 | macros/unicodetex/latex/njuthesis/njuthesis.pdf +2021/09/17 | 745 | macros/unicodetex/latex/njuthesis/README.md +2021/09/17 | 3938 | macros/unicodetex/latex/njuthesis/README_ZH_CN.md +2021/09/17 | 725848 | macros/unicodetex/latex/njuthesis.zip 2021/08/05 | 269 | macros/unicodetex/latex/nwafuthesis/build.sh 2021/08/05 | 263 | macros/unicodetex/latex/nwafuthesis/build-win.bat 2021/08/05 | 218987 | macros/unicodetex/latex/nwafuthesis/logo/building.jpg @@ -269693,15 +269690,17 @@ 2018/11/25 | 1101 | support/latex2man/README 2018/11/25 | 29 | support/latex2man/THIS-IS-VERSION-1.29 2018/11/25 | 358895 | support/latex2man.zip -2017/11/15 | 54487 | support/latex2nemeth/encodings/polytonic.json +2021/08/27 | 741 | support/latex2nemeth/contrib/nemeth2odt +2021/07/30 | 55190 | support/latex2nemeth/encodings/nemeth.json +2021/07/30 | 54662 | support/latex2nemeth/encodings/polytonic.json 2016/09/29 | 2775 | support/latex2nemeth/examples/mathpics.tex 2016/09/30 | 13560 | support/latex2nemeth/examples/mathtest.tex -2016/07/18 | 45110 | support/latex2nemeth/examples/nemeth.json 2016/09/29 | 35147 | support/latex2nemeth/gpl-3.0.txt -2020/03/18 | 131 | support/latex2nemeth/latex2nemeth -2020/03/18 | 7967051 | support/latex2nemeth/latex2nemeth-v1.0.2.jar -2020/03/18 | 5750 | support/latex2nemeth/README -2020/03/18 | 7229594 | support/latex2nemeth.zip +2021/07/30 | 124 | support/latex2nemeth/latex2nemeth +2021/07/30 | 8092843 | support/latex2nemeth/latex2nemeth.jar +2021/08/27 | 5844 | support/latex2nemeth/README +2021/09/17 | 149177 | support/latex2nemeth/source.zip +2021/09/17 | 7493000 | support/latex2nemeth.zip 2014/06/16 | 1579721 | support/latex2rtf/latex2rtf-2.3.8.tar.gz 2014/06/16 | 3277975 | support/latex2rtf/latex2rtf-2.3.8_win.exe 2015/12/08 | 3942 | support/latex2rtf/README @@ -282817,15 +282816,15 @@ 2019/02/28 | 344 | systems/texlive/tlnet/archive/latexindent.amd64-freebsd.r32150.tar.xz 2019/02/28 | 344 | systems/texlive/tlnet/archive/latexindent.amd64-netbsd.r32150.tar.xz 2019/02/28 | 344 | systems/texlive/tlnet/archive/latexindent.armhf-linux.r32150.tar.xz -2021/08/02 | 1034864 | systems/texlive/tlnet/archive/latexindent.doc.r60132.tar.xz +2021/09/17 | 1084236 | systems/texlive/tlnet/archive/latexindent.doc.r60522.tar.xz 2019/02/28 | 340 | systems/texlive/tlnet/archive/latexindent.i386-cygwin.r32150.tar.xz 2019/02/28 | 344 | systems/texlive/tlnet/archive/latexindent.i386-freebsd.r32150.tar.xz 2019/02/28 | 344 | systems/texlive/tlnet/archive/latexindent.i386-linux.r32150.tar.xz 2019/02/28 | 344 | systems/texlive/tlnet/archive/latexindent.i386-netbsd.r32150.tar.xz 2019/02/28 | 344 | systems/texlive/tlnet/archive/latexindent.i386-solaris.r32150.tar.xz -2021/08/02 | 64260 | systems/texlive/tlnet/archive/latexindent.r60132.tar.xz +2021/09/17 | 67528 | systems/texlive/tlnet/archive/latexindent.r60522.tar.xz 2021/02/25 | 344 | systems/texlive/tlnet/archive/latexindent.universal-darwin.r57908.tar.xz -2021/08/02 | 4054156 | systems/texlive/tlnet/archive/latexindent.win32.r60132.tar.xz +2021/09/17 | 4060720 | systems/texlive/tlnet/archive/latexindent.win32.r60522.tar.xz 2019/02/28 | 344 | systems/texlive/tlnet/archive/latexindent.x86_64-cygwin.r33557.tar.xz 2019/02/28 | 352 | systems/texlive/tlnet/archive/latexindent.x86_64-darwinlegacy.r43871.tar.xz 2019/02/28 | 348 | systems/texlive/tlnet/archive/latexindent.x86_64-linuxmusl.r46840.tar.xz @@ -283454,9 +283453,9 @@ 2021/05/22 | 8560 | systems/texlive/tlnet/archive/lualibs.source.r59298.tar.xz 2020/06/08 | 226344 | systems/texlive/tlnet/archive/luamesh.doc.r55475.tar.xz 2020/06/08 | 12096 | systems/texlive/tlnet/archive/luamesh.r55475.tar.xz -2021/08/09 | 153676 | systems/texlive/tlnet/archive/luamplib.doc.r60197.tar.xz -2021/08/09 | 11896 | systems/texlive/tlnet/archive/luamplib.r60197.tar.xz -2021/08/09 | 26824 | systems/texlive/tlnet/archive/luamplib.source.r60197.tar.xz +2021/09/17 | 153712 | systems/texlive/tlnet/archive/luamplib.doc.r60521.tar.xz +2021/09/17 | 11892 | systems/texlive/tlnet/archive/luamplib.r60521.tar.xz +2021/09/17 | 26832 | systems/texlive/tlnet/archive/luamplib.source.r60521.tar.xz 2019/02/28 | 348 | systems/texlive/tlnet/archive/luaotfload.aarch64-linux.r46208.tar.xz 2019/02/28 | 352 | systems/texlive/tlnet/archive/luaotfload.amd64-freebsd.r34647.tar.xz 2019/02/28 | 348 | systems/texlive/tlnet/archive/luaotfload.amd64-netbsd.r34647.tar.xz @@ -283525,8 +283524,9 @@ 2021/06/04 | 214628 | systems/texlive/tlnet/archive/lua-typo.doc.r59457.tar.xz 2021/06/04 | 8804 | systems/texlive/tlnet/archive/lua-typo.r59457.tar.xz 2021/06/04 | 22768 | systems/texlive/tlnet/archive/lua-typo.source.r59457.tar.xz -2020/09/24 | 58416 | systems/texlive/tlnet/archive/lua-uca.doc.r56414.tar.xz -2020/09/24 | 70984 | systems/texlive/tlnet/archive/lua-uca.r56414.tar.xz +2021/09/17 | 75268 | systems/texlive/tlnet/archive/lua-uca.doc.r60523.tar.xz +2021/09/17 | 74132 | systems/texlive/tlnet/archive/lua-uca.r60523.tar.xz +2021/09/17 | 1132 | systems/texlive/tlnet/archive/lua-uca.source.r60523.tar.xz 2021/05/14 | 100604 | systems/texlive/tlnet/archive/lua-ul.doc.r59186.tar.xz 2021/05/14 | 6676 | systems/texlive/tlnet/archive/lua-ul.r59186.tar.xz 2021/05/14 | 10640 | systems/texlive/tlnet/archive/lua-ul.source.r59186.tar.xz @@ -284085,9 +284085,9 @@ 2019/02/28 | 3124 | systems/texlive/tlnet/archive/milog.r41610.tar.xz 2020/03/17 | 1565768 | systems/texlive/tlnet/archive/milsymb.doc.r54361.tar.xz 2020/03/17 | 22172 | systems/texlive/tlnet/archive/milsymb.r54361.tar.xz -2021/09/13 | 213208 | systems/texlive/tlnet/archive/mindflow.doc.r60485.tar.xz -2021/09/13 | 2664 | systems/texlive/tlnet/archive/mindflow.r60485.tar.xz -2021/09/13 | 6368 | systems/texlive/tlnet/archive/mindflow.source.r60485.tar.xz +2021/09/17 | 213608 | systems/texlive/tlnet/archive/mindflow.doc.r60520.tar.xz +2021/09/17 | 2704 | systems/texlive/tlnet/archive/mindflow.r60520.tar.xz +2021/09/17 | 6416 | systems/texlive/tlnet/archive/mindflow.source.r60520.tar.xz 2019/02/28 | 281540 | systems/texlive/tlnet/archive/minibox.doc.r30914.tar.xz 2019/02/28 | 1052 | systems/texlive/tlnet/archive/minibox.r30914.tar.xz 2019/02/28 | 3056 | systems/texlive/tlnet/archive/minibox.source.r30914.tar.xz @@ -287828,7 +287828,7 @@ 2020/05/17 | 592 | systems/texlive/tlnet/archive/texlive-scripts.amd64-freebsd.r55172.tar.xz 2020/05/17 | 588 | systems/texlive/tlnet/archive/texlive-scripts.amd64-netbsd.r55172.tar.xz 2020/05/17 | 592 | systems/texlive/tlnet/archive/texlive-scripts.armhf-linux.r55172.tar.xz -2021/09/16 | 400148 | systems/texlive/tlnet/archive/texlive-scripts.doc.r60514.tar.xz +2021/09/17 | 400152 | systems/texlive/tlnet/archive/texlive-scripts.doc.r60518.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 @@ -287852,7 +287852,7 @@ 2020/05/17 | 588 | systems/texlive/tlnet/archive/texlive-scripts.i386-linux.r55172.tar.xz 2020/05/17 | 592 | systems/texlive/tlnet/archive/texlive-scripts.i386-netbsd.r55172.tar.xz 2020/05/17 | 588 | systems/texlive/tlnet/archive/texlive-scripts.i386-solaris.r55172.tar.xz -2021/09/16 | 108300 | systems/texlive/tlnet/archive/texlive-scripts.r60514.tar.xz +2021/09/17 | 108308 | systems/texlive/tlnet/archive/texlive-scripts.r60518.tar.xz 2021/02/25 | 572 | systems/texlive/tlnet/archive/texlive-scripts.universal-darwin.r57908.tar.xz 2021/04/12 | 36308 | systems/texlive/tlnet/archive/texlive-scripts.win32.r58829.tar.xz 2020/05/17 | 588 | systems/texlive/tlnet/archive/texlive-scripts.x86_64-cygwin.r55172.tar.xz @@ -289582,16 +289582,16 @@ 2020/07/18 | 47816 | systems/texlive/tlnet/archive/zztex.doc.r55862.tar.xz 2020/07/18 | 101724 | systems/texlive/tlnet/archive/zztex.r55862.tar.xz 2021/05/02 | 105152 | systems/texlive/tlnet/install-tl -2021/09/16 | 6811636 | systems/texlive/tlnet/install-tl-unx.tar.gz -2021/09/16 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512 -2021/09/16 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc +2021/09/17 | 6811196 | systems/texlive/tlnet/install-tl-unx.tar.gz +2021/09/17 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512 +2021/09/17 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc 2021/04/11 | 4945 | systems/texlive/tlnet/install-tl-windows.bat -2021/09/16 | 20872882 | systems/texlive/tlnet/install-tl-windows.exe -2021/09/16 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512 -2021/09/16 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc -2021/09/16 | 25629536 | systems/texlive/tlnet/install-tl.zip -2021/09/16 | 145 | systems/texlive/tlnet/install-tl.zip.sha512 -2021/09/16 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc +2021/09/17 | 20870598 | systems/texlive/tlnet/install-tl-windows.exe +2021/09/17 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512 +2021/09/17 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc +2021/09/17 | 25629542 | systems/texlive/tlnet/install-tl.zip +2021/09/17 | 145 | systems/texlive/tlnet/install-tl.zip.sha512 +2021/09/17 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc 2021/04/01 | 1229 | systems/texlive/tlnet/README.md 2021/04/01 | 0 | systems/texlive/tlnet/TEXLIVE_2021 2021/07/03 | 7181 | systems/texlive/tlnet/tlpkg/gpg/pubring.gpg @@ -289601,7 +289601,7 @@ 2021/07/03 | 1280 | systems/texlive/tlnet/tlpkg/gpg/trustdb.gpg 2021/07/02 | 49348 | systems/texlive/tlnet/tlpkg/installer/config.guess 2010/11/11 | 11651 | systems/texlive/tlnet/tlpkg/installer/COPYING.MinGW-runtime.txt -2021/09/15 | 6879 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl +2021/09/16 | 6928 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl 2020/04/15 | 223687 | systems/texlive/tlnet/tlpkg/installer/curl/curl-ca-bundle.crt 2020/04/15 | 2606592 | systems/texlive/tlnet/tlpkg/installer/curl/curl.exe 2017/04/16 | 2629 | systems/texlive/tlnet/tlpkg/installer/installer-options.txt @@ -289643,12 +289643,12 @@ 2021/05/16 | 20371 | systems/texlive/tlnet/tlpkg/TeXLive/TLCrypto.pm 2021/05/16 | 5402 | systems/texlive/tlnet/tlpkg/TeXLive/TLDownload.pm 2021/05/16 | 27555 | systems/texlive/tlnet/tlpkg/TeXLive/TLPaper.pm -2021/09/16 | 16883112 | systems/texlive/tlnet/tlpkg/texlive.tlpdb -2021/09/16 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 +2021/09/17 | 16883547 | systems/texlive/tlnet/tlpkg/texlive.tlpdb +2021/09/17 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 2021/05/16 | 86511 | systems/texlive/tlnet/tlpkg/TeXLive/TLPDB.pm -2021/09/16 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 -2021/09/16 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc -2021/09/16 | 2308392 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz +2021/09/17 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 +2021/09/17 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc +2021/09/17 | 2310484 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz 2021/05/16 | 58801 | systems/texlive/tlnet/tlpkg/TeXLive/TLPOBJ.pm 2021/05/16 | 42084 | systems/texlive/tlnet/tlpkg/TeXLive/TLPSRC.pm 2021/05/16 | 16103 | systems/texlive/tlnet/tlpkg/TeXLive/TLTREE.pm @@ -294566,7 +294566,7 @@ 2020/10/03 | 318630 | systems/win32/miktex/tm/packages/filehook.tar.lzma 2012/12/04 | 924573 | systems/win32/miktex/tm/packages/fileinfo.tar.lzma 2011/09/21 | 281409 | systems/win32/miktex/tm/packages/filemod.tar.lzma -2021/09/16 | 615978 | systems/win32/miktex/tm/packages/files.csv.lzma +2021/09/17 | 615978 | 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 @@ -295950,9 +295950,9 @@ 2018/01/12 | 157226 | systems/win32/miktex/tm/packages/miktex-zip-bin-x64.tar.lzma 2021/08/07 | 39000 | systems/win32/miktex/tm/packages/miktex-zlib-bin-2.9.tar.lzma 2021/08/07 | 43393 | systems/win32/miktex/tm/packages/miktex-zlib-bin-x64-2.9.tar.lzma -2021/09/16 | 240461 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma -2021/09/16 | 1357114 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma -2021/09/16 | 1259727 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma +2021/09/17 | 240421 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma +2021/09/17 | 1356205 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma +2021/09/17 | 1260245 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma 2021/08/07 | 13446 | systems/win32/miktex/tm/packages/miktex-zzip-bin-2.9.tar.lzma 2021/08/07 | 14327 | 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 @@ -296160,189 +296160,189 @@ 2018/04/09 | 400132 | systems/win32/miktex/tm/packages/newunicodechar.tar.lzma 2011/09/19 | 101312 | systems/win32/miktex/tm/packages/newvbtm.tar.lzma 2021/03/17 | 232249 | systems/win32/miktex/tm/packages/newverbs.tar.lzma -2021/09/16 | 615727 | systems/win32/miktex/tm/packages/next/files.csv.lzma -2021/09/16 | 51112 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-2.9.tar.lzma -2021/09/16 | 56476 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma -2021/09/16 | 975020 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-2.9.tar.lzma -2021/09/16 | 1077989 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma -2021/09/16 | 29037 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-2.9.tar.lzma -2021/09/16 | 31350 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma -2021/09/16 | 29841 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-2.9.tar.lzma -2021/09/16 | 34666 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma -2021/09/16 | 50151 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-2.9.tar.lzma -2021/09/16 | 57547 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma -2021/09/16 | 83540 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-2.9.tar.lzma -2021/09/16 | 95403 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma -2021/09/16 | 67818 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-2.9.tar.lzma -2021/09/16 | 75792 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma -2021/09/16 | 27199 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-2.9.tar.lzma -2021/09/16 | 30824 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma -2021/09/16 | 330787 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-2.9.tar.lzma -2021/09/16 | 392793 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma -2021/09/16 | 32673 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-2.9.tar.lzma -2021/09/16 | 36628 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma -2021/09/16 | 51309 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-2.9.tar.lzma -2021/09/16 | 56684 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma -2021/09/16 | 241810 | systems/win32/miktex/tm/packages/next/miktex-console-bin-2.9.tar.lzma -2021/09/16 | 263959 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma -2021/09/16 | 180009 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-2.9.tar.lzma -2021/09/16 | 195636 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma -2021/09/16 | 54631 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-2.9.tar.lzma -2021/09/16 | 61812 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma -2021/09/16 | 21224 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-2.9.tar.lzma -2021/09/16 | 23365 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma -2021/09/16 | 461813 | systems/win32/miktex/tm/packages/next/miktex-doc.tar.lzma -2021/09/16 | 45905 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-2.9.tar.lzma -2021/09/16 | 51202 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma -2021/09/16 | 284581 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-2.9.tar.lzma -2021/09/16 | 325042 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma -2021/09/16 | 41194 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-2.9.tar.lzma -2021/09/16 | 45311 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma -2021/09/16 | 119818 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-2.9.tar.lzma -2021/09/16 | 133862 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma -2021/09/16 | 1291299 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-2.9.tar.lzma -2021/09/16 | 1421868 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma -2021/09/16 | 100624 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-2.9.tar.lzma -2021/09/16 | 112982 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma -2021/09/16 | 43027 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-2.9.tar.lzma -2021/09/16 | 48252 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma -2021/09/16 | 25020 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-2.9.tar.lzma -2021/09/16 | 28179 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma -2021/09/16 | 56317 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-2.9.tar.lzma -2021/09/16 | 62785 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma -2021/09/16 | 136812 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-2.9.tar.lzma -2021/09/16 | 154427 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma -2021/09/16 | 73195 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-2.9.tar.lzma -2021/09/16 | 77951 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma -2021/09/16 | 71668 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-2.9.tar.lzma -2021/09/16 | 80447 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma -2021/09/16 | 258880 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-2.9.tar.lzma -2021/09/16 | 295203 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma -2021/09/16 | 22048 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-2.9.tar.lzma -2021/09/16 | 24995 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma -2021/09/16 | 97338 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-2.9.tar.lzma -2021/09/16 | 112087 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma -2021/09/16 | 64428 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-2.9.tar.lzma -2021/09/16 | 73147 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma -2021/09/16 | 96632 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-2.9.tar.lzma -2021/09/16 | 115349 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma -2021/09/16 | 38140 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-2.9.tar.lzma -2021/09/16 | 43003 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma -2021/09/16 | 483653 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-2.9.tar.lzma -2021/09/16 | 566525 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma -2021/09/16 | 147372 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-2.9.tar.lzma -2021/09/16 | 159578 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma -2021/09/16 | 94799 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-2.9.tar.lzma -2021/09/16 | 109031 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma -2021/09/16 | 16357 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-2.9.tar.lzma -2021/09/16 | 17980 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma -2021/09/16 | 28390 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-2.9.tar.lzma -2021/09/16 | 30058 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma -2021/09/16 | 629399 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-2.9.tar.lzma -2021/09/16 | 681252 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma -2021/09/16 | 531852 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-2.9.tar.lzma -2021/09/16 | 596929 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma -2021/09/16 | 476919 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-2.9.tar.lzma -2021/09/16 | 510587 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma -2021/09/16 | 94310 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-2.9.tar.lzma -2021/09/16 | 103400 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma -2021/09/16 | 1713893 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-2.9.tar.lzma -2021/09/16 | 2009905 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma -2021/09/16 | 67618 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-2.9.tar.lzma -2021/09/16 | 74209 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma -2021/09/16 | 27357 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-2.9.tar.lzma -2021/09/16 | 31619 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma -2021/09/16 | 7721 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-2.9.tar.lzma -2021/09/16 | 8766 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma -2021/09/16 | 196872 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-2.9.tar.lzma -2021/09/16 | 215248 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma -2021/09/16 | 250263 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-2.9.tar.lzma -2021/09/16 | 284022 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma -2021/09/16 | 98380 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-2.9.tar.lzma -2021/09/16 | 103203 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma -2021/09/16 | 60637 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-2.9.tar.lzma -2021/09/16 | 68022 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-x64-2.9.tar.lzma -2021/09/16 | 124281 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-2.9.tar.lzma -2021/09/16 | 136821 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma -2021/09/16 | 178353 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-2.9.tar.lzma -2021/09/16 | 196740 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma -2021/09/16 | 199732 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-2.9.tar.lzma -2021/09/16 | 180121 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma -2021/09/16 | 67484 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-2.9.tar.lzma -2021/09/16 | 76825 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma -2021/09/16 | 31231 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-2.9.tar.lzma -2021/09/16 | 35087 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma -2021/09/16 | 37805 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-2.9.tar.lzma -2021/09/16 | 42711 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma -2021/09/16 | 42890 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-2.9.tar.lzma -2021/09/16 | 46906 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma -2021/09/16 | 45969 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-2.9.tar.lzma -2021/09/16 | 52522 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma -2021/09/16 | 194382 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-2.9.tar.lzma -2021/09/16 | 206605 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-x64-2.9.tar.lzma -2021/09/16 | 35691 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin.tar.lzma -2021/09/16 | 40229 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin-x64.tar.lzma -2021/09/16 | 744117 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-2.9.tar.lzma -2021/09/16 | 815242 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma -2021/09/16 | 198169 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-2.9.tar.lzma -2021/09/16 | 202796 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma -2021/09/16 | 208049 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-2.9.tar.lzma -2021/09/16 | 243426 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma -2021/09/16 | 78774 | systems/win32/miktex/tm/packages/next/miktex-png-bin-2.9.tar.lzma -2021/09/16 | 87777 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma -2021/09/16 | 1169717 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-2.9.tar.lzma -2021/09/16 | 1301191 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma -2021/09/16 | 20137 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-2.9.tar.lzma -2021/09/16 | 23902 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma -2021/09/16 | 31537 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-2.9.tar.lzma -2021/09/16 | 37242 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma -2021/09/16 | 64185 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-2.9.tar.lzma -2021/09/16 | 72205 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma -2021/09/16 | 50394 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-2.9.tar.lzma -2021/09/16 | 57728 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma -2021/09/16 | 1340930 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-2.9.tar.lzma -2021/09/16 | 1464201 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma -2021/09/16 | 42385 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-2.9.tar.lzma -2021/09/16 | 51750 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma -2021/09/16 | 56513 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin.tar.lzma -2021/09/16 | 60039 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64.tar.lzma -2021/09/16 | 25290 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-2.9.tar.lzma -2021/09/16 | 27390 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma -2021/09/16 | 16412 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-2.9.tar.lzma -2021/09/16 | 18176 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma -2021/09/16 | 63778 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-2.9.tar.lzma -2021/09/16 | 69914 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma -2021/09/16 | 154805 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-2.9.tar.lzma -2021/09/16 | 169241 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma -2021/09/16 | 57011 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-2.9.tar.lzma -2021/09/16 | 65786 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma -2021/09/16 | 98260 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-2.9.tar.lzma -2021/09/16 | 105221 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma -2021/09/16 | 2672609 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-2.9.tar.lzma -2021/09/16 | 2796725 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma -2021/09/16 | 56355 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-2.9.tar.lzma -2021/09/16 | 62229 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma -2021/09/16 | 33545 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin.tar.lzma -2021/09/16 | 37359 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin-x64.tar.lzma -2021/09/16 | 27727 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-2.9.tar.lzma -2021/09/16 | 33633 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma -2021/09/16 | 65619 | systems/win32/miktex/tm/packages/next/miktex-web-bin-2.9.tar.lzma -2021/09/16 | 70648 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma -2021/09/16 | 312107 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-2.9.tar.lzma -2021/09/16 | 345739 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma -2021/09/16 | 55498 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin.tar.lzma -2021/09/16 | 57139 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin-x64.tar.lzma -2021/09/16 | 589842 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-2.9.tar.lzma -2021/09/16 | 624652 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma -2021/09/16 | 39128 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-2.9.tar.lzma -2021/09/16 | 43426 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma -2021/09/16 | 240477 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma -2021/09/16 | 1356285 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma -2021/09/16 | 1261068 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma -2021/09/16 | 13465 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-2.9.tar.lzma -2021/09/16 | 14348 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma +2021/09/17 | 615727 | systems/win32/miktex/tm/packages/next/files.csv.lzma +2021/09/17 | 51112 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-2.9.tar.lzma +2021/09/17 | 56475 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma +2021/09/17 | 975022 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-2.9.tar.lzma +2021/09/17 | 1077990 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma +2021/09/17 | 29038 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-2.9.tar.lzma +2021/09/17 | 31353 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma +2021/09/17 | 29842 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-2.9.tar.lzma +2021/09/17 | 34667 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma +2021/09/17 | 50152 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-2.9.tar.lzma +2021/09/17 | 57547 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma +2021/09/17 | 83540 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-2.9.tar.lzma +2021/09/17 | 95402 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma +2021/09/17 | 67819 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-2.9.tar.lzma +2021/09/17 | 75792 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma +2021/09/17 | 27199 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-2.9.tar.lzma +2021/09/17 | 30824 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma +2021/09/17 | 330788 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-2.9.tar.lzma +2021/09/17 | 392793 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma +2021/09/17 | 32673 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-2.9.tar.lzma +2021/09/17 | 36628 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma +2021/09/17 | 51310 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-2.9.tar.lzma +2021/09/17 | 56685 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma +2021/09/17 | 241812 | systems/win32/miktex/tm/packages/next/miktex-console-bin-2.9.tar.lzma +2021/09/17 | 263959 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma +2021/09/17 | 180010 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-2.9.tar.lzma +2021/09/17 | 195636 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma +2021/09/17 | 54633 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-2.9.tar.lzma +2021/09/17 | 61813 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma +2021/09/17 | 21226 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-2.9.tar.lzma +2021/09/17 | 23365 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma +2021/09/17 | 461807 | systems/win32/miktex/tm/packages/next/miktex-doc.tar.lzma +2021/09/17 | 45905 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-2.9.tar.lzma +2021/09/17 | 51203 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma +2021/09/17 | 284581 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-2.9.tar.lzma +2021/09/17 | 325044 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma +2021/09/17 | 41194 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-2.9.tar.lzma +2021/09/17 | 45312 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma +2021/09/17 | 119820 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-2.9.tar.lzma +2021/09/17 | 133863 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma +2021/09/17 | 1291299 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-2.9.tar.lzma +2021/09/17 | 1421868 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma +2021/09/17 | 100625 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-2.9.tar.lzma +2021/09/17 | 112982 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma +2021/09/17 | 43029 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-2.9.tar.lzma +2021/09/17 | 48252 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma +2021/09/17 | 25020 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-2.9.tar.lzma +2021/09/17 | 28181 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma +2021/09/17 | 56318 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-2.9.tar.lzma +2021/09/17 | 62787 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma +2021/09/17 | 136817 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-2.9.tar.lzma +2021/09/17 | 154426 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma +2021/09/17 | 73196 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-2.9.tar.lzma +2021/09/17 | 77951 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma +2021/09/17 | 71670 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-2.9.tar.lzma +2021/09/17 | 80450 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma +2021/09/17 | 258882 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-2.9.tar.lzma +2021/09/17 | 295204 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma +2021/09/17 | 22048 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-2.9.tar.lzma +2021/09/17 | 24996 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma +2021/09/17 | 97339 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-2.9.tar.lzma +2021/09/17 | 112088 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma +2021/09/17 | 64427 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-2.9.tar.lzma +2021/09/17 | 73147 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma +2021/09/17 | 96633 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-2.9.tar.lzma +2021/09/17 | 115351 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma +2021/09/17 | 38141 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-2.9.tar.lzma +2021/09/17 | 43003 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma +2021/09/17 | 483654 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-2.9.tar.lzma +2021/09/17 | 566529 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma +2021/09/17 | 147373 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-2.9.tar.lzma +2021/09/17 | 159579 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma +2021/09/17 | 94800 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-2.9.tar.lzma +2021/09/17 | 109033 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma +2021/09/17 | 16357 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-2.9.tar.lzma +2021/09/17 | 17980 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma +2021/09/17 | 28390 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-2.9.tar.lzma +2021/09/17 | 30058 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma +2021/09/17 | 629398 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-2.9.tar.lzma +2021/09/17 | 681252 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma +2021/09/17 | 531854 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-2.9.tar.lzma +2021/09/17 | 596929 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma +2021/09/17 | 476922 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-2.9.tar.lzma +2021/09/17 | 510586 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma +2021/09/17 | 94311 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-2.9.tar.lzma +2021/09/17 | 103400 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma +2021/09/17 | 1713894 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-2.9.tar.lzma +2021/09/17 | 2009903 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma +2021/09/17 | 67618 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-2.9.tar.lzma +2021/09/17 | 74210 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma +2021/09/17 | 27357 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-2.9.tar.lzma +2021/09/17 | 31620 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma +2021/09/17 | 7723 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-2.9.tar.lzma +2021/09/17 | 8768 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma +2021/09/17 | 196872 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-2.9.tar.lzma +2021/09/17 | 215249 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma +2021/09/17 | 250264 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-2.9.tar.lzma +2021/09/17 | 284024 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma +2021/09/17 | 98379 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-2.9.tar.lzma +2021/09/17 | 103205 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma +2021/09/17 | 60637 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-2.9.tar.lzma +2021/09/17 | 68024 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-x64-2.9.tar.lzma +2021/09/17 | 124282 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-2.9.tar.lzma +2021/09/17 | 136821 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma +2021/09/17 | 178354 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-2.9.tar.lzma +2021/09/17 | 196741 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma +2021/09/17 | 199732 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-2.9.tar.lzma +2021/09/17 | 180121 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma +2021/09/17 | 67484 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-2.9.tar.lzma +2021/09/17 | 76826 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma +2021/09/17 | 31231 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-2.9.tar.lzma +2021/09/17 | 35086 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma +2021/09/17 | 37806 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-2.9.tar.lzma +2021/09/17 | 42711 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma +2021/09/17 | 42891 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-2.9.tar.lzma +2021/09/17 | 46907 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma +2021/09/17 | 45970 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-2.9.tar.lzma +2021/09/17 | 52523 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma +2021/09/17 | 194384 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-2.9.tar.lzma +2021/09/17 | 206604 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-x64-2.9.tar.lzma +2021/09/17 | 35692 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin.tar.lzma +2021/09/17 | 40229 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin-x64.tar.lzma +2021/09/17 | 744118 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-2.9.tar.lzma +2021/09/17 | 815242 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma +2021/09/17 | 198170 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-2.9.tar.lzma +2021/09/17 | 202798 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma +2021/09/17 | 208049 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-2.9.tar.lzma +2021/09/17 | 243427 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma +2021/09/17 | 78774 | systems/win32/miktex/tm/packages/next/miktex-png-bin-2.9.tar.lzma +2021/09/17 | 87777 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma +2021/09/17 | 1169715 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-2.9.tar.lzma +2021/09/17 | 1301192 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma +2021/09/17 | 20137 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-2.9.tar.lzma +2021/09/17 | 23902 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma +2021/09/17 | 31538 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-2.9.tar.lzma +2021/09/17 | 37241 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma +2021/09/17 | 64185 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-2.9.tar.lzma +2021/09/17 | 72206 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma +2021/09/17 | 50392 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-2.9.tar.lzma +2021/09/17 | 57727 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma +2021/09/17 | 1340931 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-2.9.tar.lzma +2021/09/17 | 1464203 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma +2021/09/17 | 42386 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-2.9.tar.lzma +2021/09/17 | 51750 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma +2021/09/17 | 56515 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin.tar.lzma +2021/09/17 | 60039 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64.tar.lzma +2021/09/17 | 25291 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-2.9.tar.lzma +2021/09/17 | 27391 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma +2021/09/17 | 16413 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-2.9.tar.lzma +2021/09/17 | 18176 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma +2021/09/17 | 63777 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-2.9.tar.lzma +2021/09/17 | 69916 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma +2021/09/17 | 154805 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-2.9.tar.lzma +2021/09/17 | 169242 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma +2021/09/17 | 57014 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-2.9.tar.lzma +2021/09/17 | 65787 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma +2021/09/17 | 98262 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-2.9.tar.lzma +2021/09/17 | 105223 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma +2021/09/17 | 2672610 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-2.9.tar.lzma +2021/09/17 | 2796726 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma +2021/09/17 | 56358 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-2.9.tar.lzma +2021/09/17 | 62230 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma +2021/09/17 | 33546 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin.tar.lzma +2021/09/17 | 37360 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin-x64.tar.lzma +2021/09/17 | 27725 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-2.9.tar.lzma +2021/09/17 | 33632 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma +2021/09/17 | 65619 | systems/win32/miktex/tm/packages/next/miktex-web-bin-2.9.tar.lzma +2021/09/17 | 70649 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma +2021/09/17 | 312109 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-2.9.tar.lzma +2021/09/17 | 345738 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma +2021/09/17 | 55499 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin.tar.lzma +2021/09/17 | 57139 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin-x64.tar.lzma +2021/09/17 | 589844 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-2.9.tar.lzma +2021/09/17 | 624656 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma +2021/09/17 | 39128 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-2.9.tar.lzma +2021/09/17 | 43426 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma +2021/09/17 | 240549 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma +2021/09/17 | 1356203 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma +2021/09/17 | 1259494 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma +2021/09/17 | 13464 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-2.9.tar.lzma +2021/09/17 | 14348 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma 2019/03/12 | 1412 | systems/win32/miktex/tm/packages/nextpage.tar.lzma -2021/09/16 | 1153 | systems/win32/miktex/tm/packages/next/pr.ini +2021/09/17 | 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 @@ -296731,7 +296731,7 @@ 2020/10/20 | 342254 | systems/win32/miktex/tm/packages/preview.tar.lzma 2019/06/20 | 375963 | systems/win32/miktex/tm/packages/prftree.tar.lzma 2021/04/23 | 274028 | systems/win32/miktex/tm/packages/principia.tar.lzma -2021/09/16 | 976 | systems/win32/miktex/tm/packages/pr.ini +2021/09/17 | 976 | 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 @@ -298330,7 +298330,7 @@ 2004/06/04 | 404 | tds/tds.sed 2004/06/23 | 65418 | tds/tds.tex 2019/05/29 | 304264 | tds.zip -2021/09/17 | 186 | timestamp +2021/09/18 | 186 | timestamp 2002/08/26 | 61898 | usergrps/dante/antrag.pdf 2002/08/26 | 118217 | usergrps/dante/antrag.ps 2021/08/04 | 917 | usergrps/dante/dtk/doc/beispiel.bib diff --git a/FILES.byname.gz b/FILES.byname.gz index 46688b2ae4..a07d998147 100644 Binary files a/FILES.byname.gz and b/FILES.byname.gz differ diff --git a/FILES.last07days b/FILES.last07days index 03c4302585..1965c5a453 100644 --- a/FILES.last07days +++ b/FILES.last07days @@ -1,235 +1,316 @@ -2021/09/16 | 98380 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-2.9.tar.lzma -2021/09/16 | 98260 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-2.9.tar.lzma +2021/09/17 | 98379 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-2.9.tar.lzma +2021/09/17 | 98262 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-2.9.tar.lzma +2021/09/17 | 976 | systems/win32/miktex/tm/packages/pr.ini +2021/09/17 | 975022 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-2.9.tar.lzma +2021/09/17 | 97339 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-2.9.tar.lzma +2021/09/17 | 96633 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-2.9.tar.lzma +2021/09/17 | 95402 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma +2021/09/17 | 94800 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-2.9.tar.lzma +2021/09/17 | 94311 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-2.9.tar.lzma +2021/09/17 | 87777 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma +2021/09/17 | 8768 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma +2021/09/17 | 84739 | macros/unicodetex/latex/njuthesis/figure/njuname-large.pdf +2021/09/17 | 83540 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-2.9.tar.lzma +2021/09/17 | 815242 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma +2021/09/17 | 80450 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma +2021/09/17 | 78774 | systems/win32/miktex/tm/packages/next/miktex-png-bin-2.9.tar.lzma +2021/09/17 | 77951 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma +2021/09/17 | 7723 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-2.9.tar.lzma +2021/09/17 | 76826 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma +2021/09/17 | 75792 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma +2021/09/17 | 75268 | systems/texlive/tlnet/archive/lua-uca.doc.r60523.tar.xz +2021/09/17 | 7493000 | support/latex2nemeth.zip +2021/09/17 | 745 | macros/unicodetex/latex/njuthesis/README.md +2021/09/17 | 744118 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-2.9.tar.lzma +2021/09/17 | 74210 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma +2021/09/17 | 74132 | systems/texlive/tlnet/archive/lua-uca.r60523.tar.xz +2021/09/17 | 73196 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-2.9.tar.lzma +2021/09/17 | 73147 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma +2021/09/17 | 725848 | macros/unicodetex/latex/njuthesis.zip +2021/09/17 | 72250 | macros/unicodetex/latex/njuthesis/njuthesis.dtx +2021/09/17 | 72206 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma +2021/09/17 | 71670 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-2.9.tar.lzma +2021/09/17 | 70649 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma +2021/09/17 | 69916 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma +2021/09/17 | 681252 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma +2021/09/17 | 6811196 | systems/texlive/tlnet/install-tl-unx.tar.gz +2021/09/17 | 68024 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-x64-2.9.tar.lzma +2021/09/17 | 67819 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-2.9.tar.lzma +2021/09/17 | 67618 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-2.9.tar.lzma +2021/09/17 | 67528 | systems/texlive/tlnet/archive/latexindent.r60522.tar.xz +2021/09/17 | 67484 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-2.9.tar.lzma +2021/09/17 | 65787 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma +2021/09/17 | 65619 | systems/win32/miktex/tm/packages/next/miktex-web-bin-2.9.tar.lzma +2021/09/17 | 64427 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-2.9.tar.lzma +2021/09/17 | 64185 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-2.9.tar.lzma +2021/09/17 | 6416 | systems/texlive/tlnet/archive/mindflow.source.r60520.tar.xz +2021/09/17 | 638180 | macros/unicodetex/latex/njuthesis/njuthesis.pdf +2021/09/17 | 63777 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-2.9.tar.lzma +2021/09/17 | 629398 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-2.9.tar.lzma +2021/09/17 | 62787 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma +2021/09/17 | 624656 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma +2021/09/17 | 62230 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma +2021/09/17 | 61813 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma +2021/09/17 | 615978 | systems/win32/miktex/tm/packages/files.csv.lzma +2021/09/17 | 615727 | systems/win32/miktex/tm/packages/next/files.csv.lzma +2021/09/17 | 60637 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-2.9.tar.lzma +2021/09/17 | 60039 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64.tar.lzma +2021/09/17 | 596929 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma +2021/09/17 | 589844 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-2.9.tar.lzma +2021/09/17 | 57727 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma +2021/09/17 | 57547 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma +2021/09/17 | 57139 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin-x64.tar.lzma +2021/09/17 | 57014 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-2.9.tar.lzma +2021/09/17 | 56685 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma +2021/09/17 | 566529 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma +2021/09/17 | 56515 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin.tar.lzma +2021/09/17 | 56475 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma +2021/09/17 | 56358 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-2.9.tar.lzma +2021/09/17 | 56318 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-2.9.tar.lzma +2021/09/17 | 55499 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin.tar.lzma +2021/09/17 | 54633 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-2.9.tar.lzma +2021/09/17 | 531854 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-2.9.tar.lzma +2021/09/17 | 52523 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma +2021/09/17 | 51750 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma +2021/09/17 | 51310 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-2.9.tar.lzma +2021/09/17 | 51203 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma +2021/09/17 | 51112 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-2.9.tar.lzma +2021/09/17 | 510586 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma +2021/09/17 | 50392 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-2.9.tar.lzma +2021/09/17 | 50152 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-2.9.tar.lzma +2021/09/17 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 +2021/09/17 | 483654 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-2.9.tar.lzma +2021/09/17 | 48252 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma +2021/09/17 | 476922 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-2.9.tar.lzma +2021/09/17 | 46907 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma +2021/09/17 | 461807 | systems/win32/miktex/tm/packages/next/miktex-doc.tar.lzma +2021/09/17 | 45970 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-2.9.tar.lzma +2021/09/17 | 45905 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-2.9.tar.lzma +2021/09/17 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc +2021/09/17 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc +2021/09/17 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc +2021/09/17 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc +2021/09/17 | 45312 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma +2021/09/17 | 43426 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma +2021/09/17 | 43029 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-2.9.tar.lzma +2021/09/17 | 43003 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma +2021/09/17 | 42891 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-2.9.tar.lzma +2021/09/17 | 42711 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma +2021/09/17 | 42386 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-2.9.tar.lzma +2021/09/17 | 41194 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-2.9.tar.lzma +2021/09/17 | 4060720 | systems/texlive/tlnet/archive/latexindent.win32.r60522.tar.xz +2021/09/17 | 40229 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin-x64.tar.lzma +2021/09/17 | 400152 | systems/texlive/tlnet/archive/texlive-scripts.doc.r60518.tar.xz +2021/09/17 | 3938 | macros/unicodetex/latex/njuthesis/README_ZH_CN.md +2021/09/17 | 392793 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma +2021/09/17 | 39128 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-2.9.tar.lzma +2021/09/17 | 38141 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-2.9.tar.lzma +2021/09/17 | 37806 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-2.9.tar.lzma +2021/09/17 | 37360 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin-x64.tar.lzma +2021/09/17 | 37241 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma +2021/09/17 | 36628 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma +2021/09/17 | 35692 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin.tar.lzma +2021/09/17 | 35086 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma +2021/09/17 | 34667 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma +2021/09/17 | 345738 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma +2021/09/17 | 33632 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma +2021/09/17 | 3356 | graphics/pstricks/contrib/luapstricks/README.md +2021/09/17 | 33546 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin.tar.lzma +2021/09/17 | 330788 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-2.9.tar.lzma +2021/09/17 | 32673 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-2.9.tar.lzma +2021/09/17 | 325044 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma +2021/09/17 | 31620 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma +2021/09/17 | 31538 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-2.9.tar.lzma +2021/09/17 | 31353 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma +2021/09/17 | 31231 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-2.9.tar.lzma +2021/09/17 | 312109 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-2.9.tar.lzma +2021/09/17 | 30824 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma +2021/09/17 | 30058 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma +2021/09/17 | 29842 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-2.9.tar.lzma +2021/09/17 | 295204 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma +2021/09/17 | 29038 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-2.9.tar.lzma +2021/09/17 | 284581 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-2.9.tar.lzma +2021/09/17 | 284024 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma +2021/09/17 | 28390 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-2.9.tar.lzma +2021/09/17 | 28181 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma +2021/09/17 | 2796726 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma +2021/09/17 | 27725 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-2.9.tar.lzma +2021/09/17 | 27391 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma +2021/09/17 | 27357 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-2.9.tar.lzma +2021/09/17 | 27199 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-2.9.tar.lzma +2021/09/17 | 2704 | systems/texlive/tlnet/archive/mindflow.r60520.tar.xz +2021/09/17 | 26832 | systems/texlive/tlnet/archive/luamplib.source.r60521.tar.xz +2021/09/17 | 2672610 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-2.9.tar.lzma +2021/09/17 | 263959 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma +2021/09/17 | 258882 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-2.9.tar.lzma +2021/09/17 | 25629542 | systems/texlive/tlnet/install-tl.zip +2021/09/17 | 25311 | graphics/pstricks/contrib/luapstricks.zip +2021/09/17 | 25291 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-2.9.tar.lzma +2021/09/17 | 250264 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-2.9.tar.lzma +2021/09/17 | 25020 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-2.9.tar.lzma +2021/09/17 | 24996 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma +2021/09/17 | 243427 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma +2021/09/17 | 241812 | systems/win32/miktex/tm/packages/next/miktex-console-bin-2.9.tar.lzma +2021/09/17 | 240549 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma +2021/09/17 | 240421 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma +2021/09/17 | 23902 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma +2021/09/17 | 23365 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma +2021/09/17 | 2310484 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz +2021/09/17 | 22048 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-2.9.tar.lzma +2021/09/17 | 21738 | macros/unicodetex/latex/njuthesis/figure/njulogo.pdf +2021/09/17 | 215249 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma +2021/09/17 | 213608 | systems/texlive/tlnet/archive/mindflow.doc.r60520.tar.xz +2021/09/17 | 21226 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-2.9.tar.lzma +2021/09/17 | 20870598 | systems/texlive/tlnet/install-tl-windows.exe +2021/09/17 | 208049 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-2.9.tar.lzma +2021/09/17 | 206604 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-x64-2.9.tar.lzma +2021/09/17 | 202798 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma +2021/09/17 | 20137 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-2.9.tar.lzma +2021/09/17 | 2009903 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma +2021/09/17 | 199732 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-2.9.tar.lzma +2021/09/17 | 198170 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-2.9.tar.lzma +2021/09/17 | 196872 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-2.9.tar.lzma +2021/09/17 | 196741 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma +2021/09/17 | 195636 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma +2021/09/17 | 194384 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-2.9.tar.lzma +2021/09/17 | 19105 | macros/unicodetex/latex/njuthesis/LICENSE +2021/09/17 | 18176 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma +2021/09/17 | 180121 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma +2021/09/17 | 180010 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-2.9.tar.lzma +2021/09/17 | 17980 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma +2021/09/17 | 178354 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-2.9.tar.lzma +2021/09/17 | 1713894 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-2.9.tar.lzma +2021/09/17 | 169242 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma +2021/09/17 | 16883547 | systems/texlive/tlnet/tlpkg/texlive.tlpdb +2021/09/17 | 16413 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-2.9.tar.lzma +2021/09/17 | 16357 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-2.9.tar.lzma +2021/09/17 | 159579 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma +2021/09/17 | 154805 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-2.9.tar.lzma +2021/09/17 | 154426 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma +2021/09/17 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512 +2021/09/17 | 153712 | systems/texlive/tlnet/archive/luamplib.doc.r60521.tar.xz +2021/09/17 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512 +2021/09/17 | 149177 | support/latex2nemeth/source.zip +2021/09/17 | 147373 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-2.9.tar.lzma +2021/09/17 | 1464203 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma +2021/09/17 | 145 | systems/texlive/tlnet/install-tl.zip.sha512 +2021/09/17 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 +2021/09/17 | 14348 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma +2021/09/17 | 1421868 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma +2021/09/17 | 136821 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma +2021/09/17 | 136817 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-2.9.tar.lzma +2021/09/17 | 1356205 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma +2021/09/17 | 1356203 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma +2021/09/17 | 13464 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-2.9.tar.lzma +2021/09/17 | 1340931 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-2.9.tar.lzma +2021/09/17 | 133863 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma +2021/09/17 | 1301192 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma +2021/09/17 | 1291299 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-2.9.tar.lzma +2021/09/17 | 12747 | macros/unicodetex/latex/njuthesis/figure/njuname.pdf +2021/09/17 | 1260245 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma +2021/09/17 | 1259494 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma +2021/09/17 | 124282 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-2.9.tar.lzma +2021/09/17 | 122165 | graphics/pstricks/contrib/luapstricks/luapstricks.lua +2021/09/17 | 119820 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-2.9.tar.lzma +2021/09/17 | 11892 | systems/texlive/tlnet/archive/luamplib.r60521.tar.xz +2021/09/17 | 1183078 | macros/latex/contrib/zref-check.zip +2021/09/17 | 1169715 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-2.9.tar.lzma +2021/09/17 | 1153 | systems/win32/miktex/tm/packages/next/pr.ini +2021/09/17 | 115351 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma +2021/09/17 | 1132 | systems/texlive/tlnet/archive/lua-uca.source.r60523.tar.xz +2021/09/17 | 112982 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma +2021/09/17 | 112088 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma +2021/09/17 | 109033 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma +2021/09/17 | 1084236 | systems/texlive/tlnet/archive/latexindent.doc.r60522.tar.xz +2021/09/17 | 108308 | systems/texlive/tlnet/archive/texlive-scripts.r60518.tar.xz +2021/09/17 | 1077990 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma +2021/09/17 | 105223 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma +2021/09/17 | 103400 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma +2021/09/17 | 103205 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma +2021/09/17 | 100625 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-2.9.tar.lzma 2021/09/16 | 9809944 | support/latexindent/latexindent.exe -2021/09/16 | 976 | systems/win32/miktex/tm/packages/pr.ini -2021/09/16 | 975020 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-2.9.tar.lzma -2021/09/16 | 97338 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-2.9.tar.lzma -2021/09/16 | 96632 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-2.9.tar.lzma -2021/09/16 | 95403 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma 2021/09/16 | 9537 | support/latexindent/LatexIndent/IfElseFi.pm -2021/09/16 | 94799 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-2.9.tar.lzma -2021/09/16 | 94310 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-2.9.tar.lzma 2021/09/16 | 93702 | macros/luatex/generic/luamplib/luamplib.dtx 2021/09/16 | 9243 | support/latexindent/LatexIndent/Lines.pm 2021/09/16 | 9048 | macros/luatex/generic/luamplib/NEWS -2021/09/16 | 87777 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma +2021/09/16 | 88851 | macros/latex/contrib/zref-check/zref-check.dtx 2021/09/16 | 8776 | support/latexindent/LatexIndent/LogFile.pm -2021/09/16 | 8766 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma -2021/09/16 | 83540 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-2.9.tar.lzma 2021/09/16 | 833 | support/latexindent/LatexIndent/Version.pm -2021/09/16 | 815242 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma -2021/09/16 | 80447 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma 2021/09/16 | 8035 | support/latexindent/documentation/sec-the-line-switch.tex 2021/09/16 | 7969 | support/latexindent/documentation/sec-introduction.tex -2021/09/16 | 78774 | systems/win32/miktex/tm/packages/next/miktex-png-bin-2.9.tar.lzma -2021/09/16 | 77951 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma -2021/09/16 | 7721 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-2.9.tar.lzma -2021/09/16 | 76825 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma -2021/09/16 | 75792 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma -2021/09/16 | 744117 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-2.9.tar.lzma -2021/09/16 | 74209 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma -2021/09/16 | 73195 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-2.9.tar.lzma -2021/09/16 | 73147 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma +2021/09/16 | 739197 | macros/latex/contrib/zref-check/zref-check-code.pdf 2021/09/16 | 7234 | support/latexindent/documentation/subsubsec-no-add-remaining-code-blocks.tex -2021/09/16 | 72205 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma 2021/09/16 | 72038 | support/lualibs/lua-uca/lua-uca-doc.pdf -2021/09/16 | 71668 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-2.9.tar.lzma 2021/09/16 | 7161 | support/latexindent/documentation/figure-schematic.png -2021/09/16 | 70648 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma -2021/09/16 | 69914 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma 2021/09/16 | 6984 | support/latexindent/LatexIndent/FileExtension.pm +2021/09/16 | 6928 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl 2021/09/16 | 68771 | support/latexindent/documentation/sec-default-user-local.tex -2021/09/16 | 681252 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma -2021/09/16 | 6811636 | systems/texlive/tlnet/install-tl-unx.tar.gz -2021/09/16 | 68022 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-x64-2.9.tar.lzma 2021/09/16 | 6793 | support/latexindent/LatexIndent/MandatoryArgument.pm -2021/09/16 | 67818 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-2.9.tar.lzma -2021/09/16 | 67618 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-2.9.tar.lzma -2021/09/16 | 67484 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-2.9.tar.lzma 2021/09/16 | 6645 | support/latexindent/LatexIndent/BackUpFileProcedure.pm 2021/09/16 | 66280 | support/latexindent/documentation/subsec-poly-switches.tex -2021/09/16 | 65786 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma -2021/09/16 | 65619 | systems/win32/miktex/tm/packages/next/miktex-web-bin-2.9.tar.lzma -2021/09/16 | 64428 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-2.9.tar.lzma -2021/09/16 | 64185 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-2.9.tar.lzma 2021/09/16 | 6402 | support/latexindent/LatexIndent/Item.pm -2021/09/16 | 63778 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-2.9.tar.lzma 2021/09/16 | 6373 | support/latexindent/LatexIndent/TrailingComments.pm 2021/09/16 | 633 | support/latexindent/documentation/cmhlistings.tex 2021/09/16 | 6329 | support/latexindent/LatexIndent/Environment.pm -2021/09/16 | 629399 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-2.9.tar.lzma -2021/09/16 | 62785 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma -2021/09/16 | 624652 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma -2021/09/16 | 62229 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma -2021/09/16 | 61812 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma 2021/09/16 | 61604 | support/latexindent/LatexIndent/AlignmentAtAmpersand.pm -2021/09/16 | 615978 | systems/win32/miktex/tm/packages/files.csv.lzma -2021/09/16 | 615727 | systems/win32/miktex/tm/packages/next/files.csv.lzma -2021/09/16 | 60637 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-2.9.tar.lzma 2021/09/16 | 6062 | support/latexindent/LatexIndent/OptionalArgument.pm 2021/09/16 | 6061 | support/lualibs/lua-uca/lua-uca/lua-uca-tailoring.lua 2021/09/16 | 6053672 | support/latexindent.zip 2021/09/16 | 6005 | support/lualibs/lua-uca/lua-uca/lua-uca-reordering-table.lua -2021/09/16 | 60039 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64.tar.lzma 2021/09/16 | 5979 | support/latexindent/documentation/subsubsec-commands-with-arguments.tex 2021/09/16 | 5969 | support/latexindent/LatexIndent/Else.pm -2021/09/16 | 596929 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma -2021/09/16 | 589842 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-2.9.tar.lzma -2021/09/16 | 57728 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma 2021/09/16 | 5771 | support/latexindent/LatexIndent/UnNamedGroupingBracesBrackets.pm -2021/09/16 | 57547 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma 2021/09/16 | 5728 | support/latexindent/documentation/subsec-combine-text-wrap-para-line-breaks.tex -2021/09/16 | 57139 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin-x64.tar.lzma -2021/09/16 | 57011 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-2.9.tar.lzma -2021/09/16 | 56684 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma -2021/09/16 | 566525 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma -2021/09/16 | 56513 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin.tar.lzma -2021/09/16 | 56476 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma -2021/09/16 | 56355 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-2.9.tar.lzma -2021/09/16 | 56317 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-2.9.tar.lzma 2021/09/16 | 55980 | support/latexindent/LatexIndent/GetYamlSettings.pm -2021/09/16 | 55498 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin.tar.lzma -2021/09/16 | 54631 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-2.9.tar.lzma -2021/09/16 | 531852 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-2.9.tar.lzma 2021/09/16 | 5306 | support/latexindent/LatexIndent/KeyEqualsValuesBraces.pm 2021/09/16 | 5286 | support/latexindent/documentation/subsubsec-headings.tex -2021/09/16 | 52522 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma -2021/09/16 | 51750 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma -2021/09/16 | 51309 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-2.9.tar.lzma -2021/09/16 | 51202 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma -2021/09/16 | 51112 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-2.9.tar.lzma -2021/09/16 | 510587 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma -2021/09/16 | 50394 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-2.9.tar.lzma -2021/09/16 | 50151 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-2.9.tar.lzma 2021/09/16 | 5011 | support/latexindent/LatexIndent/Check.pm -2021/09/16 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 2021/09/16 | 4873 | support/latexindent/documentation/subsubsec-ifelsefi.tex -2021/09/16 | 483653 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-2.9.tar.lzma -2021/09/16 | 48252 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma -2021/09/16 | 476919 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-2.9.tar.lzma -2021/09/16 | 46906 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma -2021/09/16 | 461813 | systems/win32/miktex/tm/packages/next/miktex-doc.tar.lzma -2021/09/16 | 45969 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-2.9.tar.lzma -2021/09/16 | 45905 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-2.9.tar.lzma -2021/09/16 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc -2021/09/16 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc -2021/09/16 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc -2021/09/16 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc -2021/09/16 | 45311 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma +2021/09/16 | 457730 | macros/latex/contrib/zref-check/zref-check.pdf 2021/09/16 | 4503 | support/latexindent/LatexIndent/BlankLines.pm 2021/09/16 | 4446 | support/latexindent/LatexIndent/Preamble.pm 2021/09/16 | 44096 | support/latexindent/documentation/logo.png 2021/09/16 | 4355 | support/latexindent/LatexIndent/RoundBrackets.pm -2021/09/16 | 43426 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma -2021/09/16 | 43027 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-2.9.tar.lzma -2021/09/16 | 43003 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma -2021/09/16 | 42890 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-2.9.tar.lzma -2021/09/16 | 42711 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma 2021/09/16 | 4270 | support/latexindent/LatexIndent/NamedGroupingBracesBrackets.pm -2021/09/16 | 42385 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-2.9.tar.lzma -2021/09/16 | 41194 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-2.9.tar.lzma -2021/09/16 | 40229 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin-x64.tar.lzma 2021/09/16 | 4016 | macros/luatex/generic/luamplib/test-luamplib-latex.tex -2021/09/16 | 400148 | systems/texlive/tlnet/archive/texlive-scripts.doc.r60514.tar.xz -2021/09/16 | 392793 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma -2021/09/16 | 39128 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-2.9.tar.lzma +2021/09/16 | 38 | macros/latex/contrib/zref-check/DEPENDS.txt 2021/09/16 | 3872 | macros/luatex/generic/luamplib/test-luamplib-plain.tex 2021/09/16 | 3860 | support/lualibs/lua-uca/README.md 2021/09/16 | 3850 | support/latexindent/documentation/subsubsec-special.tex 2021/09/16 | 3832 | systems/texlive/tlnet/archive/unicode-data.doc.r60516.tar.xz -2021/09/16 | 38140 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-2.9.tar.lzma -2021/09/16 | 37805 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-2.9.tar.lzma -2021/09/16 | 37359 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin-x64.tar.lzma -2021/09/16 | 37242 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma -2021/09/16 | 36628 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma 2021/09/16 | 3614 | support/latexindent/LatexIndent/Replacement.pm -2021/09/16 | 35691 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin.tar.lzma -2021/09/16 | 35087 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma -2021/09/16 | 34666 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma -2021/09/16 | 345739 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma 2021/09/16 | 3450 | support/latexindent/documentation/subsubsec-environments-with-items.tex 2021/09/16 | 3378 | support/latexindent/LatexIndent/HorizontalWhiteSpace.pm -2021/09/16 | 33633 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma -2021/09/16 | 33545 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin.tar.lzma -2021/09/16 | 330787 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-2.9.tar.lzma 2021/09/16 | 32808 | support/lualibs/lua-uca/lua-uca/lua-uca-languages.lua 2021/09/16 | 3273 | support/latexindent/LatexIndent/Tokens.pm -2021/09/16 | 32673 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-2.9.tar.lzma -2021/09/16 | 325042 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma -2021/09/16 | 31619 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma 2021/09/16 | 3158 | support/lualibs/lua-uca/HACKING.md -2021/09/16 | 31537 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-2.9.tar.lzma -2021/09/16 | 31350 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma 2021/09/16 | 312 | support/lualibs/lua-uca/CHANGELOG.md -2021/09/16 | 31231 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-2.9.tar.lzma -2021/09/16 | 312107 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-2.9.tar.lzma -2021/09/16 | 30824 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma 2021/09/16 | 305540 | systems/texlive/tlnet/archive/unicode-data.r60516.tar.xz 2021/09/16 | 3021 | support/latexindent/documentation/sec-the-m-switch.tex -2021/09/16 | 30058 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma -2021/09/16 | 29841 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-2.9.tar.lzma -2021/09/16 | 295203 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma -2021/09/16 | 29037 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-2.9.tar.lzma 2021/09/16 | 287597 | support/lualibs/lua-uca.zip -2021/09/16 | 284581 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-2.9.tar.lzma -2021/09/16 | 284022 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma -2021/09/16 | 28390 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-2.9.tar.lzma -2021/09/16 | 28179 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma -2021/09/16 | 2796725 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma -2021/09/16 | 27727 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-2.9.tar.lzma +2021/09/16 | 2791 | macros/latex/contrib/zref-check/zref-check.ins 2021/09/16 | 2754 | support/latexindent/latexindent.pl 2021/09/16 | 2752 | macros/luatex/generic/luamplib/Makefile -2021/09/16 | 27390 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma -2021/09/16 | 27357 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-2.9.tar.lzma -2021/09/16 | 27199 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-2.9.tar.lzma -2021/09/16 | 2672609 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-2.9.tar.lzma -2021/09/16 | 263959 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma -2021/09/16 | 258880 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-2.9.tar.lzma -2021/09/16 | 25629536 | systems/texlive/tlnet/install-tl.zip -2021/09/16 | 25290 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-2.9.tar.lzma -2021/09/16 | 250263 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-2.9.tar.lzma -2021/09/16 | 25020 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-2.9.tar.lzma -2021/09/16 | 24995 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma +2021/09/16 | 2607 | macros/latex/contrib/zref-check/zref-check.tex 2021/09/16 | 246 | support/latexindent/documentation/references.tex 2021/09/16 | 24467 | support/latexindent/documentation/latexindent.tex -2021/09/16 | 243426 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma -2021/09/16 | 241810 | systems/win32/miktex/tm/packages/next/miktex-console-bin-2.9.tar.lzma 2021/09/16 | 2412 | support/latexindent/LatexIndent/Switches.pm -2021/09/16 | 240477 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma -2021/09/16 | 240461 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma -2021/09/16 | 23902 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma 2021/09/16 | 23589 | support/latexindent/LatexIndent/Verbatim.pm 2021/09/16 | 23584 | support/latexindent/LatexIndent/Arguments.pm -2021/09/16 | 23365 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma -2021/09/16 | 2308392 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz 2021/09/16 | 22888 | support/latexindent/LatexIndent/ModifyLineBreaks.pm +2021/09/16 | 2273 | macros/latex/contrib/zref-check/zref-check-code.tex 2021/09/16 | 22507 | support/latexindent/documentation/sec-how-to-use.tex 2021/09/16 | 22107 | support/latexindent/documentation/subsec-one-sentence-per-line.tex -2021/09/16 | 22048 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-2.9.tar.lzma 2021/09/16 | 219853 | macros/latex/contrib/mindflow.zip 2021/09/16 | 2188 | support/latexindent/LatexIndent/Logger.pm 2021/09/16 | 21779 | support/latexindent/LatexIndent/Document.pm 2021/09/16 | 21650 | support/latexindent/documentation/sec-replacements.tex -2021/09/16 | 215248 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma -2021/09/16 | 21224 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-2.9.tar.lzma 2021/09/16 | 2120 | support/latexindent/documentation/sec-demonstration.tex 2021/09/16 | 2104448 | systems/texlive/tlnet/archive/kpfonts-otf.doc.r60515.tar.xz -2021/09/16 | 20872882 | systems/texlive/tlnet/install-tl-windows.exe -2021/09/16 | 208049 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-2.9.tar.lzma -2021/09/16 | 206605 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-x64-2.9.tar.lzma 2021/09/16 | 20565 | support/latexindent/LatexIndent/Indent.pm -2021/09/16 | 202796 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma -2021/09/16 | 20137 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-2.9.tar.lzma -2021/09/16 | 2009905 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma -2021/09/16 | 199732 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-2.9.tar.lzma 2021/09/16 | 1996 | macros/luatex/generic/luamplib/README 2021/09/16 | 19822 | support/latexindent/LatexIndent/Sentence.pm 2021/09/16 | 198183 | install/macros/luatex/generic/luamplib.tds.zip -2021/09/16 | 198169 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-2.9.tar.lzma -2021/09/16 | 196872 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-2.9.tar.lzma -2021/09/16 | 196740 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma -2021/09/16 | 195636 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma -2021/09/16 | 194382 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-2.9.tar.lzma 2021/09/16 | 1909 | support/latexindent/documentation/subsec-noAdditionalIndent-indentRules.tex 2021/09/16 | 1879 | support/latexindent/documentation/figure-schematic.tex 2021/09/16 | 18756 | support/latexindent/defaultSettings.yaml @@ -238,75 +319,31 @@ 2021/09/16 | 18435 | support/latexindent/documentation/subsec-text-wrap.tex 2021/09/16 | 183790 | macros/luatex/generic/luamplib.zip 2021/09/16 | 1834704 | support/lualibs/lua-uca/lua-uca/lua-uca-ducet.lua -2021/09/16 | 18176 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma -2021/09/16 | 180121 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma -2021/09/16 | 180009 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-2.9.tar.lzma -2021/09/16 | 17980 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma -2021/09/16 | 178353 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-2.9.tar.lzma -2021/09/16 | 1713893 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-2.9.tar.lzma -2021/09/16 | 169241 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma 2021/09/16 | 1688 | support/latexindent/documentation/sec-conclusions-know-limitations.tex -2021/09/16 | 16883112 | systems/texlive/tlnet/tlpkg/texlive.tlpdb 2021/09/16 | 1664 | support/latexindent/documentation/logo.tex 2021/09/16 | 16597 | support/latexindent/documentation/subsubsec-environments-and-their-arguments.tex -2021/09/16 | 16412 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-2.9.tar.lzma -2021/09/16 | 16357 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-2.9.tar.lzma -2021/09/16 | 159578 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma 2021/09/16 | 1581 | support/lualibs/lua-uca/lua-uca-doc.tex 2021/09/16 | 1558 | support/latexindent/latexindent-module-installer.pl -2021/09/16 | 154805 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-2.9.tar.lzma -2021/09/16 | 154427 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma -2021/09/16 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512 -2021/09/16 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512 2021/09/16 | 151188 | macros/luatex/generic/luamplib/luamplib.pdf 2021/09/16 | 1483 | support/latexindent/LatexIndent/DoubleBackSlash.pm 2021/09/16 | 1477 | support/latexindent/documentation/title.tex -2021/09/16 | 147372 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-2.9.tar.lzma -2021/09/16 | 1464201 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma -2021/09/16 | 145 | systems/texlive/tlnet/install-tl.zip.sha512 -2021/09/16 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 2021/09/16 | 1441 | support/latexindent/documentation/subsec-text-wrap-summary.tex -2021/09/16 | 14348 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma -2021/09/16 | 1421868 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma 2021/09/16 | 14050 | support/latexindent/documentation/subsec-commands-and-their-options.tex -2021/09/16 | 136821 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma -2021/09/16 | 136812 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-2.9.tar.lzma +2021/09/16 | 1382 | macros/latex/contrib/zref-check/CHANGELOG.md 2021/09/16 | 13605 | support/latexindent/documentation/appendices.tex -2021/09/16 | 1357114 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma -2021/09/16 | 1356285 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma 2021/09/16 | 13548 | support/latexindent/LatexIndent/Special.pm -2021/09/16 | 13465 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-2.9.tar.lzma -2021/09/16 | 1340930 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-2.9.tar.lzma -2021/09/16 | 133862 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma -2021/09/16 | 1301191 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma -2021/09/16 | 1291299 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-2.9.tar.lzma 2021/09/16 | 12881 | support/latexindent/LatexIndent/FileContents.pm 2021/09/16 | 12661 | support/latexindent/LatexIndent/Braces.pm -2021/09/16 | 1261068 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma -2021/09/16 | 1259727 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma -2021/09/16 | 124281 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-2.9.tar.lzma 2021/09/16 | 12302 | support/latexindent/LatexIndent/HiddenChildren.pm 2021/09/16 | 12024 | support/latexindent/documentation/sec-fine-tuning.tex -2021/09/16 | 119818 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-2.9.tar.lzma 2021/09/16 | 11976 | support/latexindent/documentation/subsec-remove-para-line-breaks.tex -2021/09/16 | 1169717 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-2.9.tar.lzma -2021/09/16 | 1153 | systems/win32/miktex/tm/packages/next/pr.ini -2021/09/16 | 115349 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma -2021/09/16 | 112982 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma -2021/09/16 | 112087 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma -2021/09/16 | 109031 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma 2021/09/16 | 10859 | support/latexindent/documentation/sec-indent-config-and-settings.tex -2021/09/16 | 108300 | systems/texlive/tlnet/archive/texlive-scripts.r60514.tar.xz 2021/09/16 | 1082224 | systems/texlive/tlnet/archive/kpfonts-otf.r60515.tar.xz 2021/09/16 | 10802 | support/latexindent/LatexIndent/Heading.pm -2021/09/16 | 1077989 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma 2021/09/16 | 1054 | support/lualibs/lua-uca/LICENSE -2021/09/16 | 105221 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma 2021/09/16 | 10407 | support/lualibs/lua-uca/lua-uca/lua-uca-collator.lua 2021/09/16 | 10347 | support/latexindent/LatexIndent/Command.pm -2021/09/16 | 103400 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma -2021/09/16 | 103203 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma -2021/09/16 | 100624 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-2.9.tar.lzma +2021/09/16 | 1002 | macros/latex/contrib/zref-check/README.md 2021/09/16 | 1001116 | support/latexindent/documentation/latexindent.pdf 2021/09/15 | 95663 | macros/generic/unicode-data/GraphemeBreakProperty.txt 2021/09/15 | 9264 | macros/generic/unicode-data/README.md @@ -315,7 +352,6 @@ 2021/09/15 | 84688 | macros/generic/unicode-data/CaseFolding.txt 2021/09/15 | 7139 | macros/generic/unicode-data/load-unicode-xetex-classes.tex 2021/09/15 | 7054 | macros/generic/unicode-data/load-unicode-data.tex -2021/09/15 | 6879 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl 2021/09/15 | 6784012 | systems/texlive/tlnet/archive/pst-mirror.doc.r60506.tar.xz 2021/09/15 | 6701 | fonts/kpfonts-otf/README.md 2021/09/15 | 66440 | fonts/kpfonts-otf/fonts/KpMono-Italic.otf @@ -496,7 +532,6 @@ 2021/09/13 | 72858 | systems/win32/miktex/tm/packages/pstricks.tar.lzma 2021/09/13 | 6993 | systems/win32/miktex/tm/packages/uwa-letterhead__source.tar.lzma 2021/09/13 | 6709 | systems/win32/miktex/tm/packages/mindflow__source.tar.lzma -2021/09/13 | 6368 | systems/texlive/tlnet/archive/mindflow.source.r60485.tar.xz 2021/09/13 | 6246 | systems/win32/miktex/tm/packages/bithesis.tar.lzma 2021/09/13 | 61517 | systems/win32/miktex/tm/packages/siunitx.tar.lzma 2021/09/13 | 608772 | support/TeX4ht/source/tex4ht-html4.tex @@ -551,7 +586,6 @@ 2021/09/13 | 2781 | systems/win32/miktex/tm/packages/crumbs__source.tar.lzma 2021/09/13 | 2717 | macros/latex/contrib/clicks/clicks.tex 2021/09/13 | 266763 | systems/win32/miktex/tm/packages/ejpecp__doc.tar.lzma -2021/09/13 | 2664 | systems/texlive/tlnet/archive/mindflow.r60485.tar.xz 2021/09/13 | 26607576 | systems/texlive/tlnet/archive/noto.r60482.tar.xz 2021/09/13 | 26433751 | systems/win32/miktex/tm/packages/noto.tar.lzma 2021/09/13 | 261728 | systems/win32/miktex/tm/packages/huawei.tar.lzma @@ -570,7 +604,6 @@ 2021/09/13 | 2176954 | systems/win32/miktex/tm/packages/newpx.tar.lzma 2021/09/13 | 2160 | macros/latex/contrib/clicks/clicks.sty 2021/09/13 | 214595 | systems/win32/miktex/tm/packages/mindflow__doc.tar.lzma -2021/09/13 | 213208 | systems/texlive/tlnet/archive/mindflow.doc.r60485.tar.xz 2021/09/13 | 2114 | macros/latex/contrib/huawei/samples/huawei-cfp.tex 2021/09/13 | 2108 | macros/latex/contrib/huawei/samples/huawei-charter.tex 2021/09/13 | 2056168 | systems/win32/miktex/tm/packages/xcharter.tar.lzma @@ -765,14 +798,10 @@ 2021/09/11 | 949 | graphics/pstricks/contrib/pst-dart/README.md 2021/09/11 | 872 | systems/texlive/tlcontrib/packages.txt 2021/09/11 | 824 | systems/texlive/tlcontrib/archive/collection-contrib.r344.tar.xz -2021/09/11 | 823 | macros/unicodetex/latex/njuthesis/README.md -2021/09/11 | 817068 | macros/unicodetex/latex/njuthesis/figure/njuname-large.jpg 2021/09/11 | 78680 | systems/texlive/tlnet/archive/pstricks.r60466.tar.xz 2021/09/11 | 7757792 | systems/texlive/tlnet/archive/pstricks-add.doc.r60465.tar.xz 2021/09/11 | 7526580 | systems/texlive/tlnet/archive/pstricks.doc.r60466.tar.xz -2021/09/11 | 7505 | macros/unicodetex/latex/njuthesis/profile/font.sty 2021/09/11 | 73577 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/README.md -2021/09/11 | 7287 | macros/unicodetex/latex/njuthesis/profile/cover.sty 2021/09/11 | 6416 | systems/texlive/tlnet/archive/uwa-letterhead.source.r60468.tar.xz 2021/09/11 | 6412 | graphics/pstricks/contrib/pst-calendar/doc/pst-calendar-doc.tex 2021/09/11 | 574764 | systems/texlive/tlnet/archive/pst-circ.doc.r60464.tar.xz @@ -783,22 +812,13 @@ 2021/09/11 | 4539 | graphics/pstricks/contrib/pst-dart/tex/pst-dart.tex 2021/09/11 | 4276 | graphics/pstricks/contrib/pst-dart/doc/pst-dart-doc.tex 2021/09/11 | 421175 | graphics/pstricks/contrib/pst-dart/doc/pst-dart-doc.pdf -2021/09/11 | 4185 | macros/unicodetex/latex/njuthesis/profile/components.sty -2021/09/11 | 4083 | macros/unicodetex/latex/njuthesis/profile/abstract.sty 2021/09/11 | 354988 | graphics/pstricks/contrib/pst-dart.zip 2021/09/11 | 3300 | systems/texlive/tlnet/archive/uwa-letterhead.r60468.tar.xz -2021/09/11 | 3047 | macros/unicodetex/latex/njuthesis/njuthesis.cls -2021/09/11 | 2953 | macros/unicodetex/latex/njuthesis/profile/packages.sty 2021/09/11 | 289 | graphics/pstricks/contrib/pst-dart/Changes 2021/09/11 | 24900 | systems/texlive/tlnet/archive/pst-circ.r60464.tar.xz -2021/09/11 | 21738 | macros/unicodetex/latex/njuthesis/figure/njulogo.pdf -2021/09/11 | 2143 | macros/unicodetex/latex/njuthesis/profile/reference.sty 2021/09/11 | 21260 | systems/texlive/tlnet/archive/pstricks-add.r60465.tar.xz 2021/09/11 | 192822 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/biblatex-gb7714-2015.tex -2021/09/11 | 19105 | macros/unicodetex/latex/njuthesis/LICENSE 2021/09/11 | 19057 | graphics/pstricks/contrib/pst-calendar/latex/pst-calendar.sty -2021/09/11 | 1833 | macros/unicodetex/latex/njuthesis/profile/page.sty -2021/09/11 | 1802308 | macros/unicodetex/latex/njuthesis.zip 2021/09/11 | 1751563 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015.zip 2021/09/11 | 174 | graphics/pstricks/contrib/pst-calendar/Changes 2021/09/11 | 166512 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gb7714-2015.bbx @@ -807,41 +827,9 @@ 2021/09/11 | 1637976 | systems/texlive/tlnet/archive/csvsimple.doc.r60470.tar.xz 2021/09/11 | 15733 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gb7714-2015.cbx 2021/09/11 | 15473 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gb7714-2015mx.cbx -2021/09/11 | 1468177 | macros/unicodetex/latex/njuthesis/njuthesis.pdf 2021/09/11 | 146752 | graphics/pstricks/contrib/pst-calendar.zip 2021/09/11 | 14319 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gb7714-2015ay.cbx 2021/09/11 | 142568 | graphics/pstricks/contrib/pst-calendar/doc/pst-calendar-doc.pdf 2021/09/11 | 138702 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gb7714-2015mx.bbx -2021/09/11 | 12747 | macros/unicodetex/latex/njuthesis/figure/njuname.pdf 2021/09/11 | 118237 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gb7714-2015ms.bbx 2021/09/11 | 11244 | systems/texlive/tlnet/archive/csvsimple.r60470.tar.xz -2021/09/10 | 88049 | graphics/pstricks/contrib/pstricks-add/tex/pstricks-add.tex -2021/09/10 | 8679 | graphics/pstricks/base/doc/pst-news21.tex -2021/09/10 | 802 | graphics/pstricks/contrib/pst-circ/dvips/pst-circ.pro -2021/09/10 | 8019179 | graphics/pstricks/base.zip -2021/09/10 | 64473 | macros/unicodetex/latex/uwa-letterhead.zip -2021/09/10 | 639 | graphics/pstricks/contrib/pstricks-add/latex/pstricks-add.sty -2021/09/10 | 610626 | graphics/pstricks/contrib/pst-circ.zip -2021/09/10 | 58265 | macros/unicodetex/latex/uwa-letterhead/uwa-letterhead.pdf -2021/09/10 | 568373 | graphics/pstricks/contrib/pst-circ/doc/pst-circ-doc.pdf -2021/09/10 | 5069 | graphics/pstricks/contrib/pstricks-add/dvips/pstricks-add.pro -2021/09/10 | 4746 | graphics/pstricks/contrib/pst-circ/Changes -2021/09/10 | 468 | graphics/pstricks/contrib/pst-circ/latex/pst-circ.sty -2021/09/10 | 4630 | graphics/pstricks/base/generic/pstricks-color.tex -2021/09/10 | 4255 | graphics/pstricks/base/Changes -2021/09/10 | 37089 | graphics/pstricks/base/dvips/pstricks.pro -2021/09/10 | 330084 | support/TeX4ht/source/tex4ht-ooffice.tex -2021/09/10 | 26440 | macros/unicodetex/latex/uwa-letterhead/uwa-letterhead.dtx -2021/09/10 | 25082 | graphics/pstricks/base/History -2021/09/10 | 224270 | graphics/pstricks/contrib/pst-circ/tex/pst-circ.tex -2021/09/10 | 2183 | macros/unicodetex/latex/uwa-letterhead/uwa-letterhead.ins -2021/09/10 | 193899 | graphics/pstricks/contrib/pstricks-add/doc/pstricks-add-doc.tex -2021/09/10 | 16985 | graphics/pstricks/contrib/pstricks-add/Changes -2021/09/10 | 1328 | graphics/pstricks/contrib/pst-circ/README -2021/09/10 | 130909 | graphics/pstricks/base/generic/pstricks.tex -2021/09/10 | 129583 | graphics/pstricks/base/doc/pst-news21.pdf -2021/09/10 | 12909993 | graphics/pstricks/contrib/pstricks-add/doc/pstricks-add-doc.pdf -2021/09/10 | 126672 | graphics/pstricks/contrib/pst-circ/doc/pst-circ-doc.tex -2021/09/10 | 11484795 | graphics/pstricks/contrib/pstricks-add.zip -2021/09/10 | 1115 | macros/unicodetex/latex/uwa-letterhead/example.tex -2021/09/10 | 1041 | macros/unicodetex/latex/uwa-letterhead/README diff --git a/graphics/pstricks/contrib/luapstricks/README.md b/graphics/pstricks/contrib/luapstricks/README.md new file mode 100644 index 0000000000..d7c3278983 --- /dev/null +++ b/graphics/pstricks/contrib/luapstricks/README.md @@ -0,0 +1,59 @@ +# `luapstricks` -- A PSTricks backend for LuaTeX +Support PSTricks directly in LuaTeX, without requiring external processes, special environments or similar. + +Since recent PSTricks versions load `luapstricks` automatically when LuaLaTeX is used, this does not require changes to the document. +Some advanced features require the `pdfmanagement-testphase` package to be loaded and activated. + +## Usage + 1. Make sure that you have the latest pstricks version installed. + 2. Run `l3build install` *or* copy `luapstricks.lua` from this repository into the directory of your TeX files or another directory in your TeX search path. + 3. Compile your document with `lualatex`. + 4. Given the current state of development of this project, the previous stage probably failed. Write a bug report to the author. Otherwise go to step 7. + 5. Wait for a fix. + 6. Go back to step 2 and try again. + 7. It worked? That's great. Feel free to inform the author anyway and share the awesome images you created. + +## Issues and feature requests +Should you find a bug or want to request a feature, please report it using the [issue tracker](https://github.com/zauguin/luapstricks/issues). + +## License +This code is licensed under the LaTeX Project Public License 1.3. + +## Acknowledgments +This project would never have reached a usable state without all the testing and suggestions by Pablo González Luengo. +Also many thanks to Herbert Voß for adapting PSTricks and related packages to work with luapstricks. + +## Demos +Documentation of PSTricks packages, created by `lualatex` and `luapstricks.lua`: + +- [pst-user](https://hvoss.org/PSTexa/pst-user.pdf) Main (historical) documentation without overlay stuff (is now in pst-ovl) +- [pstricks-add](https://hvoss.org/PSTexa/pstricks-add-doc.pdf) + + +- [pst-3d](https://hvoss.org/PSTexa/pst-3d-doc.pdf) +- [pst-3dplot](https://hvoss.org/PSTexa/pst-3dplot-doc.pdf) +- [pst-am](https://hvoss.org/PSTexa/pst-am-doc.pdf) +- [pst-antiprism](https://hvoss.org/PSTexa/pst-antiprism-doc.pdf) +- [pst-barcode](https://hvoss.org/PSTexa/pst-barcode-doc.pdf) +- [pst-bezier](https://hvoss.org/PSTexa/pst-bezier-doc.pdf) +- [pst-cie](https://hvoss.org/PSTexa/pst-cie-doc.pdf) +- [pst-circ](https://hvoss.org/PSTexa/pst-circ-doc.pdf) +- [pst-coil](https://hvoss.org/PSTexa/pst-coil-doc.pdf) +- [pst-dart](https://hvoss.org/PSTexa/pst-dart-doc.pdf) +- [pst-eucl](https://hvoss.org/PSTexa/pst-eucl-doc.pdf) +- [pst-func](https://hvoss.org/PSTexa/pst-func-doc.pdf) +- [pst-knot](https://hvoss.org/PSTexa/pst-knot-doc.pdf) +- [pst-node](https://hvoss.org/PSTexa/pst-node-doc.pdf) +- [pst-ovl](https://hvoss.org/PSTexa/pst-ovl-doc.pdf) +- [pst-platon](https://hvoss.org/PSTexa/pst-platon-doc.pdf) +- [pst-plot](https://hvoss.org/PSTexa/pst-plot-doc.pdf) +- [pst-poly](https://hvoss.org/PSTexa/pst-poly-doc.pdf) +- [pst-solarsystem](https://hvoss.org/PSTexa/pst-solarsystem-doc.pdf) +- [pst-soroban](https://hvoss.org/PSTexa/pst-soroban-doc.pdf) +- [pst-spinner](https://hvoss.org/PSTexa/pst-spinner-doc.pdf) +- [pst-stru](https://hvoss.org/PSTexa/pst-stru-doc.pdf) +- [pst-tools](https://hvoss.org/PSTexa/pst-tools-doc.pdf) +- [pst-tree](https://hvoss.org/PSTexa/pst-tree-doc.pdf) +- [pst-turtle](https://hvoss.org/PSTexa/pst-turtle-doc.pdf) +- [pst-vehicle](https://hvoss.org/PSTexa/pst-vehicle-doc.pdf) +- [pst-venn](https://hvoss.org/PSTexa/pst-venn-doc.pdf) diff --git a/graphics/pstricks/contrib/luapstricks/luapstricks.lua b/graphics/pstricks/contrib/luapstricks/luapstricks.lua new file mode 100644 index 0000000000..eebca86801 --- /dev/null +++ b/graphics/pstricks/contrib/luapstricks/luapstricks.lua @@ -0,0 +1,3946 @@ +---- luapstricks.lua +-- Copyright 2021 Marcel Krüger +-- +-- 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. Krüger +-- +-- This work consists of the file luapstricks.lua. + +if luatexbase then + luatexbase.provides_module { + name = 'luapstricks', + version = 'v0.1', + date = '2021-09-16', + description = 'PSTricks backend for LuaLaTeX', + } +end + +local pdfprint = vf.pdf -- Set later to have the right mode +local function gobble() end + +local pi = math.pi +local two_pi = 2*pi +local pi2_inv = 2/pi +local pi3_inv = 3/pi + +local sin_table = {0, 1, 0, -1} + +local l = lpeg + +local whitespace = (l.S'\0\t\n\r\f ' + '%' * (1-l.P'\n')^0 * (l.P'\n' + -1))^1 + +local regular = 1 - l.S'\0\t\n\r\f %()<>[]{}/' + +local exitmarker = {} +local lookup + +-- local integer = l.S'+-'^-1 * l.R'09'^1 / tonumber +local real = l.S'+-'^-1 * (l.R'09'^1 * ('.' * l.R'09'^0)^-1 + '.' * l.R'09'^1) * (l.S'Ee' * l.S'+-'^-1 * l.R'09'^1)^-1 / tonumber +local radix_scanner = setmetatable({}, {__index = function(t, b) + local digit + if b < 10 then + digit = l.R('0' .. string.char(string.byte'0' + b - 1)) + else + digit = l.R'09' + if b > 10 then + digit = digit + l.R('A' .. string.char(string.byte'A' + b - 11)) + digit = digit + l.R('a' .. string.char(string.byte'a' + b - 11)) + end + end + digit = l.C(digit^1) * l.Cp() + t[b] = digit + return digit +end}) +local radix = l.Cmt(l.R'09' * l.R'09'^-1 / tonumber * '#', function(subj, pos, radix) + if radix < 2 or radix > 36 then return end + local digits, pos = radix_scanner[radix]:match(subj, pos) + if not digits then return end + digits = tonumber(digits, radix) + return pos, digits +end) +local number = radix + real -- + integer -- Every integer is also a real + +local str_view do + local meta = { + __index = function(s, k) + if k == 'value' then + return string.sub(s.base.value, s.offset, s.last) + end + end, + __newindex = function(s, k, v) + if k == 'value' then + s.base.value = string.sub(s.base.value, 1, s.offset-1) .. v .. string.sub(s.base.value, s.last+1) + return + end + -- We could do rawset here, but there is no reason for setting keys anyway + assert(false) + end, + } + function str_view(base, offset, length) + if getmetatable(base) == meta then + offset = offset + base.offset - 1 + base = base.base + end + return setmetatable({ + kind = 'string', + base = base, + offset = offset, + last = offset + length - 1, + }, meta) + end +end + +local string_patt do + local literal = '(' * l.Cs(l.P{( + l.Cg('\\' * ( + 'n' * l.Cc'\n' + + 'r' * l.Cc'\r' + + 't' * l.Cc'\t' + + 'b' * l.Cc'\b' + + 'f' * l.Cc'\f' + + '\\' * l.Cc'\\' + + '(' * l.Cc'(' + + ')' * l.Cc')' + + l.R'07' * l.R'07'^-2 / function(s) return string.char(tonumber(s, 8) % 0x100) end + + ('\r' * l.P'\n'^-1 + '\n')^-1 * l.Cc'' + )) + + l.Cg('\r' * l.P'\n'^-1 * l.Cc'\n') + + (1-l.S'()') + + '(' * l.V(1) * ')' + )^0}) * ')' + local hexchar = l.R('09', 'af', 'AF') + local hexbyte = hexchar * hexchar^-1 / function(s) + local b = tonumber(s, 16) + return #s == 1 and 16*b or b + end + local hex = '<' * (hexbyte^0 / string.char) * '>' + string_patt = literal + hex -- TODO: Base85 is not implemented +end + +local name = l.C(regular^1 + l.S'[]' + '<<' + '>>') +local literal_name = '/' * l.C(regular^0) +local imm_name = '//' * l.C(regular^0) + +-- All objects are literal by default, except names represented as direct strings and operators +local any_object = l.P{whitespace^-1 * ( + number * -regular + + l.Ct(l.Cg(string_patt, 'value') * l.Cg(l.Cc'string', 'kind')) + + imm_name / function(name) return lookup(name) end + + l.Ct(l.Cg(literal_name, 'value') * l.Cg(l.Cc'name', 'kind')) + + name + + l.Ct(l.Cg(l.Ct(l.Cg('{' * l.Ct(l.V(1)^0) * whitespace^-1 * '}', 'value') * l.Cg(l.Cc'array', 'kind')), 'value') * l.Cg(l.Cc'executable', 'kind')) +)} +local object_list = l.Ct(any_object^0) * whitespace^-1 * (-1 + l.Cp()) + +local function parse_ps(s) + local tokens, fail_offset = object_list:match(s) + if fail_offset then + error(string.format('Failed to parse PS tokens at `%s\'', s:sub(fail_offset))) + end + return tokens +end + +local serialize_pdf do + function serialize_pdf(obj) + local t = type(obj) + if t == 'number' then + return string.format(math.type(obj) == 'float' and '%.5f' or '%i', obj) + elseif t == 'boolean' then + return obj and 'true' or 'false' + elseif t == 'string' then + return '/' .. obj + elseif t == 'table' then + t = obj.kind + if t == 'name' then + return '/' .. obj.value + elseif t == 'string' then + return '(' .. obj.value .. ')' -- TODO: Escaping + elseif t == 'dict' then + local helper = {} + for k, v in next, obj.value do + helper[#helper+1] = serialize_pdf(k) + helper[#helper+1] = serialize_pdf(v) + end + return '<<' .. table.concat(helper, ' ') .. '>>' + elseif t == 'array' then + local helper = {} + for i, v in ipairs(obj.value) do + helper[i] = serialize_pdf(v) + end + return '[' .. table.concat(helper, ' ') .. ']' + else + error'Unable to serialize object' + end + end + error'Unable to serialize object' + end +end + +local srand, rrand, rand do + local state + function srand(s) + state = s//1 + if state < 1 then + state = -(state % 0x7ffffffe) + 1 + elseif state > 0x7ffffffe then + state = 0x7ffffffe + end + end + function rrand() + return state + end + function rand() + state = (16807 * state) % 0x7fffffff + -- if state <= 0 then + -- state = state + 0x7fffffff + -- end + return state + end + srand(math.random(1, 0x7ffffffe)) +end + +local maybe_decompress do + local compressed_pattern = '%!PS\n\z + currentfile<>/FlateDecode filter cvx exec\n' + * l.C(l.P(1)^1) + + local stacklimit = 999000 + + function maybe_decompress(data) + local columns, compressed = compressed_pattern:match(data) + if not columns then return data end + + data = zlib.decompress(compressed) + local bytes do + local size = #data + if size < stacklimit then + bytes = {data:byte(1, -1)} + else + bytes = {} + local off = 1 + for i = 1, size, stacklimit do + table.move({data:byte(i, i+stacklimit-1)}, 1, stacklimit, i, bytes) + end + end + end + local new_data = {} + local start_row = 1 + local out_row = 1 + while true do + local control = bytes[start_row] + if not control then break end + if control == 0 or (control == 2 and start_row == 1) then + table.move(bytes, start_row + 1, start_row + columns, out_row, new_data) + elseif control == 1 then + local last = bytes[start_row + 1] + new_data[out_row] = last + for i = 2, columns do + last = (bytes[start_row + i] + last) & 0xFF + new_data[out_row + i - 1] = last + end + elseif control == 2 then + for i = 1, columns do + new_data[out_row + i - 1] = (bytes[start_row + i] + new_data[out_row - columns - 1 + i]) & 0xFF + end + else + error'Unimplemented' + end + start_row = start_row + columns + 1 + out_row = out_row + columns + end + local result = '' + local size = #new_data + for i = 1, size, stacklimit do + result = result .. string.char(table.unpack(new_data, i, i + stacklimit > size and size or i + stacklimit - 1)) + end + return result + end +end + +local font_aliases = { + -- First add some help to find the TeX Gyre names under the corresponding URW font names + ['NimbusRoman-Regular'] = 'kpse:texgyretermes-regular.otf', + ['NimbusRoman-Italic'] = 'kpse:texgyretermes-italic.otf', + ['NimbusRoman-Bold'] = 'kpse:texgyretermes-bold.otf', + ['NimbusRoman-BoldItalic'] = 'kpse:texgyretermes-bolditalic.otf', + + ['NimbusSans-Regular'] = 'kpse:texgyreheros-regular.otf', + ['NimbusSans-Italic'] = 'kpse:texgyreheros-italic.otf', + ['NimbusSans-Bold'] = 'kpse:texgyreheros-bold.otf', + ['NimbusSans-BoldItalic'] = 'kpse:texgyreheros-bolditalic.otf', + + ['NimbusSansNarrow-Regular'] = 'kpse:texgyreheroscn-regular.otf', + ['NimbusSansNarrow-Oblique'] = 'kpse:texgyreheroscn-italic.otf', + ['NimbusSansNarrow-Bold'] = 'kpse:texgyreheroscn-bold.otf', + ['NimbusSansNarrow-BoldOblique'] = 'kpse:texgyreheroscn-bolditalic.otf', + + ['NimbusMonoPS-Regular'] = 'kpse:texgyrecursor-regular.otf', + ['NimbusMonoPS-Italic'] = 'kpse:texgyrecursor-italic.otf', + ['NimbusMonoPS-Bold'] = 'kpse:texgyrecursor-bold.otf', + ['NimbusMonoPS-BoldItalic'] = 'kpse:texgyrecursor-bolditalic.otf', + + ['URWBookman-Light'] = 'kpse:texgyrebonum-regular.otf', + ['URWBookman-LightItalic'] = 'kpse:texgyrebonum-italic.otf', + ['URWBookman-Demi'] = 'kpse:texgyrebonum-bold.otf', + ['URWBookman-DemiItalic'] = 'kpse:texgyrebonum-bolditalic.otf', + + ['URWGothic-Book'] = 'kpse:texgyreadventor-regular.otf', + ['URWGothic-BookOblique'] = 'kpse:texgyreadventor-italic.otf', + ['URWGothic-Demi'] = 'kpse:texgyreadventor-bold.otf', + ['URWGothic-DemiOblique'] = 'kpse:texgyreadventor-bolditalic.otf', + + -- These fonts have weird names in their URW variant, so we use the standard font names directly instead. + ['NewCenturySchlbk-Roman'] = 'kpse:texgyreschola-regular.otf', + ['NewCenturySchlbk-Italic'] = 'kpse:texgyreschola-italic.otf', + ['NewCenturySchlbk-Bold'] = 'kpse:texgyreschola-bold.otf', + ['NewCenturySchlbk-BoldItalic'] = 'kpse:texgyreschola-bolditalic.otf', + + ['Palatino-Roman'] = 'kpse:texgyrepagella-regular.otf', + ['Palatino-Italic'] = 'kpse:texgyrepagella-italic.otf', + ['Palatino-Bold'] = 'kpse:texgyrepagella-bold.otf', + ['Palatino-BoldItalic'] = 'kpse:texgyrepagella-bolditalic.otf', + + ['ZapfChancery-MediumItalic'] = 'kpse:texgyrechorus-mediumitalic.otf', + + -- The two symbol fonts don't have OpenType equivalents in TeX Live + -- so we use TFM based fonts instead + ['StandardSymbolsPS'] = 'usyr', + ['Dingbats'] = 'uzdr', +} +-- Then map the standard 35 font names to the URW names as done by GhostScript +-- (Except for New Century Schoolbook which got mapped directly before. +for psname, remapped in next, { + ['Times-Roman'] = 'NimbusRoman-Regular', + ['Times-Italic'] = 'NimbusRoman-Italic', + ['Times-Bold'] = 'NimbusRoman-Bold', + ['Times-BoldItalic'] = 'NimbusRoman-BoldItalic', + + ['Helvetica'] = 'NimbusSans-Regular', + ['Helvetica-Oblique'] = 'NimbusSans-Italic', + ['Helvetica-Bold'] = 'NimbusSans-Bold', + ['Helvetica-BoldOblique'] = 'NimbusSans-BoldItalic', + + ['Helvetica-Narrow'] = 'NimbusSansNarrow-Regular', + ['Helvetica-Narrow-Oblique'] = 'NimbusSansNarrow-Oblique', + ['Helvetica-Narrow-Bold'] = 'NimbusSansNarrow-Bold', + ['Helvetica-Narrow-BoldOblique'] = 'NimbusSansNarrow-BoldOblique', + + ['Courier'] = 'NimbusMonoPS-Regular', + ['Courier-Oblique'] = 'NimbusMonoPS-Italic', + ['Courier-Bold'] = 'NimbusMonoPS-Bold', + ['Courier-BoldOblique'] = 'NimbusMonoPS-BoldItalic', + + ['Bookman-Light'] = 'URWBookman-Light', + ['Bookman-LightItalic'] = 'URWBookman-LightItalic', + ['Bookman-Demi'] = 'URWBookman-Demi', + ['Bookman-DemiItalic'] = 'URWBookman-DemiItalic', + + ['AvantGarde-Book'] = 'URWGothic-Book', + ['AvantGarde-BookOblique'] = 'URWGothic-BookOblique', + ['AvantGarde-Demi'] = 'URWGothic-Demi', + ['AvantGarde-DemiOblique'] = 'URWGothic-DemiOblique', + + ['Symbol'] = 'StandardSymbolsPS', + ['StandardSymL'] = 'StandardSymbolsPS', + + ['ZapfDingbats'] = 'Dingbats', + + -- Some additional names needed for PSTricks + ['NimbusRomNo9L-Regu'] = 'NimbusRoman-Regular', + ['NimbusRomNo9L-ReguItal'] = 'NimbusRoman-Italic', + ['NimbusRomNo9L-Medi'] = 'NimbusRoman-Bold', + ['NimbusRomNo9L-MediItal'] = 'NimbusRoman-BoldItalic', + ['NimbusRomNo9L-Bold'] = 'NimbusRoman-Bold', + + ['NimbusSanL-Regu'] = 'NimbusSans-Regular', + ['NimbusSanL-ReguItal'] = 'NimbusSans-Italic', + ['NimbusSanL-Bold'] = 'NimbusSans-Bold', + ['NimbusSanL-BoldItal'] = 'NimbusSans-BoldItalic', + + ['NimbusSanL-BoldCond'] = 'NimbusSansNarrow-Bold', + ['NimbusSanL-BoldCondItal'] = 'NimbusSansNarrow-BoldOblique', + ['NimbusSanL-ReguCond'] = 'NimbusSansNarrow-Regular', + ['NimbusSanL-ReguCondItal'] = 'NimbusSansNarrow-Oblique', + + ['NimbusMonL-Regu'] = 'NimbusMonoPS-Regular', + ['NimbusMonL-ReguObli'] = 'NimbusMonoPS-Italic', + ['NimbusMonL-Bold'] = 'NimbusMonoPS-Bold', + ['NimbusMonL-BoldObli'] = 'NimbusMonoPS-BoldItalic', + + ['URWBookmanL-DemiBoldItal'] = 'URWBookman-DemiItalic', + ['URWBookmanL-DemiBold'] = 'URWBookman-Demi', + ['URWBookmanL-LighItal'] = 'URWBookman-LightItalic', + ['URWBookmanL-Ligh'] = 'URWBookman-Light', + + ['URWGothicL-BookObli'] = 'URWGothic-BookOblique', + ['URWGothicL-Book'] = 'URWGothic-Book', + ['URWGothicL-DemiObli'] = 'URWGothic-DemiOblique', + ['URWGothicL-Demi'] = 'URWGothic-Demi', + + ['CenturySchL-Roma'] = 'NewCenturySchlbk-Roman', + ['CenturySchL-Ital'] = 'NewCenturySchlbk-Italic', + ['CenturySchL-Bold'] = 'NewCenturySchlbk-Bold', + ['CenturySchL-BoldItal'] = 'NewCenturySchlbk-BoldItalic', + + ['URWPalladioL-Roma'] = 'Palatino-Roman', + ['URWPalladioL-Ital'] = 'Palatino-Italic', + ['URWPalladioL-Bold'] = 'Palatino-Bold', + ['URWPalladioL-BoldItal'] = 'Palatino-BoldItalic', + + ['URWChanceryL-MediItal'] = 'ZapfChancery-MediumItalic', +} do + font_aliases[psname] = font_aliases[remapped] or remapped +end + +local operand_stack = {} + +local pushs do + local function helper(height, args, arg, ...) + if args == 0 then return end + height = height + 1 + operand_stack[height] = arg + return helper(height, args - 1, ...) + end + function pushs(...) + return helper(#operand_stack, select('#', ...), ...) + end +end +local function push(value) + operand_stack[#operand_stack+1] = value +end + +local function ps_error(kind, ...) + pushs(...) + return error{pserror = kind, trace = debug.traceback()} +end + +local function pop(...) + local height = #operand_stack + if height == 0 then + return ps_error('stackunderflow', ...) + end + local v = operand_stack[height] + operand_stack[height] = nil + return v, v +end +local function pop_num(...) + local raw = pop(...) + local n = raw + local tn = type(n) + if tn == 'table' and n.kind == 'executable' then + n = n.value + tn = type(n) + end + if tn ~= 'number' then + ps_error('typecheck', raw, ...) + end + return n, raw +end +local pop_int = pop_num +local function pop_proc(...) + local v = pop() + if type(v) ~= 'table' or v.kind ~= 'executable' or type(v.value) ~= 'table' or v.value.kind ~= 'array' then + ps_error('typecheck', v, ...) + end + return v.value.value, v +end +local pop_bool = pop +local function pop_dict() + local orig = pop() + local dict = orig + if type(dict) ~= 'table' then + ps_error('typecheck', orig) + end + if dict.kind == 'executable' then + dict = dict.value + if type(dict) ~= 'table' then + ps_error('typecheck', orig) + end + end + if dict.kind ~= 'dict' then + ps_error('typecheck', orig) + end + return dict.value, orig, dict +end +local function pop_array() + local orig = pop() + local arr = orig + if type(arr) == 'table' and arr.kind == 'executable' then + arr = arr.value + end + if type(arr) ~= 'table' or arr.kind ~= 'array' then + ps_error('typecheck', orig) + end + return arr +end +local pop_string = pop +local function pop_key() + local key = pop() + if type(key) == 'table' then + local kind = key.kind + if kind == 'executable' then + key = key.value + if type(key) ~= 'table' then return key end + kind = key.kind + end + if kind == 'string' or kind == 'name' or kind == 'operator' then + key = key.value + end + end + return key +end + +local execute_ps, execute_tok + +local dictionary_stack +local graphics_stack = {{ + matrix = {10, 0, 0, 10, 0, 0}, -- Chosen for consistency with GhostScript's pdfwrite. Must be the same as defaultmatrix + linewidth = nil, + current_path = nil, + current_point = nil, + color = {}, + fillconstantalpha = 1, + strokeconstantalpha = 1, + alphaisshape = nil, + blendmode = nil, + linejoin = nil, + linecap = nil, + strokeadjust = nil, + font = nil, + dash = nil, + saved_delayed = nil, -- nil if the `gsave` of this graphic state is not delayed + flatness = 1, + miterlimit = nil, +}} + +local lua_node_lookup = setmetatable({}, {__mode = 'k'}) +local char_width_storage -- Non nil only at the beginning of a Type 3 glyph. Used to export the width. +local ExtGStateCount = 0 +local pdfdict_gput = token.create'pdfdict_gput:nnn' +if pdfdict_gput.cmdname == 'undefined_cs' then + pdfdict_gput = nil +end +local lbrace = token.create(string.byte'{') +local rbrace = token.create(string.byte'}') +local ExtGState = setmetatable({}, {__index = pdfdict_gput and function(t, k) + ExtGStateCount = ExtGStateCount + 1 + local name = 'PSExtG' .. ExtGStateCount + tex.runtoks(function() + tex.write(pdfdict_gput, lbrace, 'g__pdf_Core/Page/Resources/ExtGState', rbrace, lbrace, name, rbrace, lbrace, k, rbrace) + end) + ltx.__pdf.Page.Resources.ExtGState = true + ltx.pdf.Page_Resources_gpush(tex.count.g_shipout_readonly_int) + name = '/' .. name .. ' gs' + t[k] = name + return name +end or function() + texio.write_nl"Extended graphic state modifications dropped since `pdfmanagement-testphase' is not loaded." + return '' +end}) + +local write_shading do + local ShadingCount = 0 + if pdfdict_gput then + function write_shading(attr, data) + local obj = pdf.obj{ + type = 'stream', + immediate = false, + attr = attr, + string = data, + } + pdf.refobj(obj) + ShadingCount = ShadingCount + 1 + local name = 'PSShad' .. ShadingCount + local k = obj .. ' 0 R' + tex.runtoks(function() + tex.write(pdfdict_gput, lbrace, 'g__pdf_Core/Page/Resources/Shading', rbrace, lbrace, name, rbrace, lbrace, k, rbrace) + end) + ltx.__pdf.Page.Resources.Shading = true + ltx.pdf.Page_Resources_gpush(tex.count.g_shipout_readonly_int) + name = '/' .. name + return name + end + else + function write_shading() + texio.write_nl"Extended graphic state modifications dropped since `pdfmanagement-testphase' is not loaded." + return '' + end + end +end + +local function matrix_transform(x, y, xx, xy, yx, yy, dx, dy) + return x * xx + y * yx + dx, x * xy + y * yy + dy +end +local function matrix_invert(xx, xy, yx, yy, dx, dy) + local determinante = xx*yy - xy*yx + xx, xy, yx, yy = yy/determinante, -xy/determinante, -yx/determinante, xx/determinante + dx, dy = - dx * xx - dy * yx, - dx * xy - dy * yy + return xx, xy, yx, yy, dx, dy +end +local delayed = { + text = {}, + matrix = {1, 0, 0, 1, 0, 0}, +} +local function update_matrix(xx, xy, yx, yy, dx, dy) + local matrix = graphics_stack[#graphics_stack].matrix + matrix[1], matrix[2], + matrix[3], matrix[4], + matrix[5], matrix[6] + = xx * matrix[1] + xy * matrix[3], xx * matrix[2] + xy * matrix[4], + yx * matrix[1] + yy * matrix[3], yx * matrix[2] + yy * matrix[4], + dx * matrix[1] + dy * matrix[3] + matrix[5], dx * matrix[2] + dy * matrix[4] + matrix[6] + + local delayed_matrix = delayed.matrix + delayed_matrix[1], delayed_matrix[2], + delayed_matrix[3], delayed_matrix[4], + delayed_matrix[5], delayed_matrix[6] + = xx * delayed_matrix[1] + xy * delayed_matrix[3], xx * delayed_matrix[2] + xy * delayed_matrix[4], + yx * delayed_matrix[1] + yy * delayed_matrix[3], yx * delayed_matrix[2] + yy * delayed_matrix[4], + dx * delayed_matrix[1] + dy * delayed_matrix[3] + delayed_matrix[5], dx * delayed_matrix[2] + dy * delayed_matrix[4] + delayed_matrix[6] + + local current_path = graphics_stack[#graphics_stack].current_path + if not current_path then return end + + local determinante = xx*yy - xy*yx + xx, xy, yx, yy, dx, dy = matrix_invert(xx, xy, yx, yy, dx, dy) + local i=1 + while current_path[i] do + local entry = current_path[i] + if type(entry) == 'number' then + local after = current_path[i+1] + assert(type(after) == 'number') + current_path[i], current_path[i+1] = xx * entry + yx * after + dx, xy * entry + yy * after + dy + i = i+2 + else + i = i+1 + end + end + local current_point = graphics_stack[#graphics_stack].current_point + local x, y = current_point[1], current_point[2] + current_point[1], current_point[2] = xx * x + yx * y + dx, xy * x + yy * y + dy +end + +local function delayed_print(str) + local delayed_text = delayed.text + delayed_text[#delayed_text + 1] = str +end + +local function reset_delayed(delayed) + local delayed_matrix = delayed.matrix + local delayed_text = delayed.text + for i=1, #delayed_text do + delayed_text[i] = nil + end + delayed_matrix[1], delayed_matrix[2], + delayed_matrix[3], delayed_matrix[4], + delayed_matrix[5], delayed_matrix[6] = 1, 0, 0, 1, 0, 0 +end + +local function flush_delayed_table(delayed, state, force_start) + local delayed_matrix = delayed.matrix + local delayed_text = delayed.text + + local cm_string = string.format('%.5f %.5f %.5f %.5f %.5f %.5f cm', delayed_matrix[1], delayed_matrix[2], + delayed_matrix[3], delayed_matrix[4], + delayed_matrix[5], delayed_matrix[6]) + if cm_string == "1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 cm" then + cm_string = nil + end + + -- Before flushing, make sure that the current graphics state has started. + graphics_stack_height = graphics_stack_height or #graphics_stack + local saved_delayed = state.saved_delayed + if saved_delayed and(cm_string or delayed_text[1] or force_start) then + state.saved_delayed = nil + pdfprint'q' + end + for i=1, #delayed_text do + pdfprint(delayed_text[i]) + end + if cm_string then + pdfprint((cm_string:gsub('%.?0+ ', ' '))) + end + return reset_delayed(delayed) +end + +local function flush_delayed(force_start) + local pre_first_delayed_group + for i = #graphics_stack, 1, -1 do + if not graphics_stack[i].saved_delayed then + pre_first_delayed_group = i + break + end + end + for i = pre_first_delayed_group, #graphics_stack-1 do + flush_delayed_table(graphics_stack[i+1].saved_delayed, graphics_stack[i]) -- No need for force_start here + end + return flush_delayed_table(delayed, graphics_stack[#graphics_stack], force_start) +end + +function drawarc(xc, yc, r, a1, a2) + a1, a2 = math.rad(a1), math.rad(a2) + local dx, dy = r*math.cos(a1), r*math.sin(a1) + local x, y = xc + dx, yc + dy + local segments = math.ceil(math.abs(a2-a1)*pi2_inv) + local da = (a2-a1)/segments + local state = graphics_stack[#graphics_stack] + local current_path = state.current_path + local i + if current_path then + i = #current_path + 1 + current_path[i], current_path[i+1], current_path[i+2] = x, y, 'l' + i = i + 3 + else + current_path = {x, y, 'm'} + i = 4 + state.current_path = current_path + state.current_point = {} + end + local factor = 4*math.tan(da/4)/3 + dx, dy = factor*dy, -factor*dx + for _=1, segments do + current_path[i], current_path[i+1] = x - dx, y - dy + a1 = a1 + da + dx, dy = r*math.cos(a1), r*math.sin(a1) + x, y = xc + dx, yc + dy + dx, dy = factor*dy, -factor*dx + current_path[i+2], current_path[i+3] = x + dx, y + dy + current_path[i+4], current_path[i+5] = x, y + current_path[i+6] = 'c' + i = i + 7 + end + state.current_point[1], state.current_point[2] = x, y +end + +local function try_lookup(name) + for i = #dictionary_stack, 1, -1 do + local dict = dictionary_stack[i] + local value = dict.value[name] + if value ~= nil then + return value + end + end +end +function lookup(name) + local result = try_lookup(name) + if result == nil then + return error(string.format('Unknown name %q', name)) + end + return result +end +local function bind(proc) + for i=1, #proc do + local entry = proc[i] + local tentry = type(entry) + if tentry == 'table' and entry.kind == 'executable' and type(entry.value) == 'table' and entry.value.kind == 'array' then + bind(entry.value.value) + elseif tentry == 'string' then + local res = try_lookup(entry) + if type(res) == 'function' then + proc[i] = res + end + end + end +end + +local subdivide, flatten do + function subdivide(t, x0, y0, x1, y1, x2, y2, x3, y3) + local mt = 1-t + local x01, y01 = mt * x0 + t * x1, mt * y0 + t * y1 + local x12, y12 = mt * x1 + t * x2, mt * y1 + t * y2 + local x23, y23 = mt * x2 + t * x3, mt * y2 + t * y3 + local x012, y012 = mt * x01 + t * x12, mt * y01 + t * y12 + local x123, y123 = mt * x12 + t * x23, mt * y12 + t * y23 + local x0123, y0123 = mt * x012 + t * x123, mt * y012 + t * y123 + return x01, y01, x012, y012, x0123, y0123, x123, y123, x23, y23, x3, y3 + end + local function flatness(x0, y0, x1, y1, x2, y2, x3, y3) + local dx, dy = x3-x0, y3-y0 + local dist = math.sqrt(dx*dx + dy*dy) + local d1 = math.abs(dx * (x0-x1) - dy * (y0-y1)) / dist + local d2 = math.abs(dx * (x0-x2) - dy * (y0-y2)) / dist + return d1 > d2 and d1 or d2 + end + function flatten(out, target, x0, y0, x1, y1, x2, y2, x3, y3) + local current = flatness(x0, y0, x1, y1, x2, y2, x3, y3) + if current <= target then + local i = #out + -- out[i+1], out[i+2], + -- out[i+3], out[i+4], + -- out[i+5], out[i+6], out[i+7] + -- = x1, y1, x2, y2, x3, y3, 'c' + out[i+1], out[i+2], out[i+3] + = x3, y3, 'l' + return + end + local a, b, c, d, e, f, g, h, i, j, k, l = subdivide(.5, x0, y0, x1, y1, x2, y2, x3, y3) + flatten(out, target, x0, y0, a, b, c, d, e, f) + return flatten(out, target, e, f, g, h, i, j, k, l) + end +end + +local function ps_to_string(a) + local ta = type(a) + if ta == 'table' and a.kind == 'executable' then + a = a.value + ta = type(a) + end + if ta == 'string' then + elseif ta == 'boolean' then + a = a and 'true' or 'false' + elseif ta == 'number' then + a = string.format(math.type(a) == 'float' and '%.6g' or '%i', a) + -- a = tostring(a) + elseif ta == 'function' then + texio.write_nl'Warning: cvs on operators is unsupported. Replaced by dummy.' + a = '--nostringval--' + elseif ta == 'table' then + local kind = a.kind + if kind == 'string' or kind == 'name' then + a = a.value + elseif kind == 'operator' then + texio.write_nl'Warning: cvs on operators is unsupported. Replaced by dummy.' + a = '--nostringval--' + else + a = '--nostringval--' + end + elseif ta == 'userdata' and a.read then + a = 'file' + else + assert(false) + end + return a +end + +local mark = {kind = 'mark'} +local null = {kind = 'null'} +local globaldict = {kind = 'dict', value = {}} +local userdict = {kind = 'dict', value = { + SDict = {kind = 'dict', value = { + normalscale = {kind = 'executable', value = {kind = 'array', value = {}}}, + }}, + ['@beginspecial'] = {kind = 'executable', value = {kind = 'array', value = {}}}, + ['@setspecial'] = {kind = 'executable', value = {kind = 'array', value = {}}}, + ['@endspecial'] = {kind = 'executable', value = {kind = 'array', value = {}}}, +}} +local FontDirectory = {kind = 'dict', value = {}} +local ResourceCategories = {kind = 'dict', value = {}} + +local function num_to_base(num, base, ...) + if num == 0 then return string.char(...) end + local remaining = num // base + local digit = num - base * remaining + if digit < 10 then + digit = digit + 0x30 + else + digit = digit + 0x37 + end + return num_to_base(remaining, base, digit, ...) +end + +local systemdict +local function generic_show(str, ax, ay) + local state = graphics_stack[#graphics_stack] + local current_point = state.current_point + if not current_point then return nil, 'nocurrentpoint' end + local rawpsfont = state.font + if not rawpsfont then return nil, 'invalidfont' end + local str = str.value + local psfont = rawpsfont.value + local fid = psfont.FID + local matrix = psfont.FontMatrix.value + local fonttype = psfont.FontType + if fonttype ~= 0x1CA and fonttype ~= 3 then + texio.write_nl'Font support is not implemented' + return true + end + local x0, y0 = current_point[1], current_point[2] + update_matrix( + matrix[1], matrix[2], + matrix[3], matrix[4], + matrix[5] + x0, matrix[6] + y0) + local w = 0 + if fonttype == 0x1CA then + local characters = assert(font.getfont(fid)).characters + flush_delayed() + if pdfprint ~= gobble then + vf.push() + vf.fontid(fid) + end + for b in string.bytes(str) do + if pdfprint ~= gobble then + vf.char(b) + if ax then + vf.right(ax) + vf.down(-ay) + end + end + local char = characters[b] + w = w + (char and char.width or 0) + end + if pdfprint ~= gobble then + vf.pop() + end + w = w/65781.76 + elseif fonttype == 3 then + for b in string.bytes(str) do + systemdict.value.gsave() + local state = graphics_stack[#graphics_stack] + state.current_point, state.current_path = nil + push(rawpsfont) + push(b) + local this_w + char_width_storage = function(width) + this_w = width + end + execute_tok(psfont.BuildChar) -- FIXME(maybe): Switch to BuildGlyph? + systemdict.value.grestore() + w = w + assert(this_w, 'Type 3 character failed to set width') + update_matrix(1, 0, 0, 1, this_w, 0) + if ax then + update_matrix(1, 0, 0, 1, ax, ay) + end + end + update_matrix(1, 0, 0, 1, -w, 0) + if ax then + local count = #str + update_matrix(1, 0, 0, 1, count * -ax, count * -ay) + end + else + assert(false) + end + if ax then + local count = #str + push(w + count * ax) + push(count * ay) + else + push(w) + push(0) + end + systemdict.value.rmoveto() + update_matrix(matrix_invert( + matrix[1], matrix[2], + matrix[3], matrix[4], + matrix[5] + x0, matrix[6] + y0)) + return true +end + +systemdict = {kind = 'dict', value = { + dup = function() + local v = pop() + push(v) + push(v) + end, + exch = function() + local b = pop() + local a = pop(b) + push(b) + push(a) + end, + pop = function() + pop() + end, + clear = function() + for i = 1, #operand_stack do + operand_stack[i] = nil + end + end, + copy = function() + local arg, orig = pop() + local exec + if type(arg) == 'table' and arg.kind == 'executable' then + exec = true + arg = arg.value + end + if type(arg) == 'number' then + local height = #operand_stack + if arg > height then + error'copy argument larger then stack' + end + table.move(operand_stack, height-arg+1, height, height+1) + elseif type(arg) == 'table' then + -- See remarks in getinterval about missing functionality + local kind = arg.kind + if kind == 'array' then + local src = pop_array().value + if #src ~= #arg.value then + error'copy with different sized arrays is not implemented yet' + end + table.move(src, 1, #src, 1, arg.value) + elseif kind == 'string' then + local src = pop_string().value + if #src == #arg.value then + elseif #src < #arg.value then + arg = str_view(arg, 1, #src) + else + ps_error'rangecheck' + end + arg.value = src + elseif kind == 'dict' then + local src = pop_dict() + if next(arg.value) then + error'Target dictionary must be empty' + end + for k, v in next, src do + arg.value[k] = v + end + else + ps_error'typecheck' + end + push(exec and {kind = 'executable', value = arg} or arg) + else + ps_error('typecheck', orig) + end + end, + roll = function() + local j, arg2 = pop_int() + local n, arg1 = pop_int(arg2) + if n < 0 then + ps_error('rangecheck', arg1, arg2) + end + if n == 0 or j == 0 then return end + local height = #operand_stack + if j < 0 then + j = (-j) % n + local temp = table.move(operand_stack, height-n+1, height-n+j, 1, {}) + table.move(operand_stack, height-n+j+1, height, height-n+1) + table.move(temp, 1, j, height-j+1, operand_stack) + else + j = j % n + local temp = table.move(operand_stack, height-j+1, height, 1, {}) + table.move(operand_stack, height-n+1, height-j, height-n+j+1) + table.move(temp, 1, j, height-n+1, operand_stack) + end + end, + index = function() + local i, arg1 = pop_int() + local height = #operand_stack + if i < 0 or height <= i then + ps_error('rangecheck', arg1) + end + push(operand_stack[height - i]) + end, + null = function() + push(null) + end, + mark = function() + push(mark) + end, + ['['] = function() + push(mark) + end, + [']'] = function() + systemdict.value.counttomark() + systemdict.value.array() + systemdict.value.astore() + systemdict.value.exch() + systemdict.value.pop() + end, + ['<<'] = function() + push(mark) + end, + ['>>'] = function() + local mark_pos + for i = #operand_stack, 1, -1 do + if operand_stack[i] == mark then + mark_pos = i + break + end + end + if not mark_pos then error'Unmatched mark' end + local dict = lua.newtable(0, (#operand_stack-mark_pos) // 2) + for i = mark_pos + 1, #operand_stack - 1, 2 do + push(operand_stack[i]) + local key = pop_key() + dict[key] = operand_stack[i+1] + end + for i = mark_pos, #operand_stack do + operand_stack[i] = nil + end + push{kind = 'dict', value = dict} + end, + count = function() + push(#operand_stack) + end, + counttomark = function() + local height = #operand_stack + for i=height, 1, -1 do + local entry = operand_stack[i] + if type(entry) == 'table' and entry.kind == 'mark' then + return push(height-i) + end + end + error'Unmatched mark' + end, + cleartomark = function() + local entry + repeat + entry = pop() + until (not entry) or type(entry) == 'table' and entry.kind == 'mark' + if not entry then error'Unmatched mark' end + end, + + ['if'] = function() + local proc, arg2 = pop_proc() + local cond = pop_bool(arg2) + if cond then + execute_ps(proc) + end + end, + ifelse = function() + local proc_else, arg3 = pop_proc() + local proc_then, arg2 = pop_proc(arg3) + local cond = pop_bool(arg2, arg3) + if cond then + execute_ps(proc_then) + else + execute_ps(proc_else) + end + end, + ['for'] = function() + local proc, arg4 = pop_proc() + local limit, arg3 = pop_num(arg4) + local step, arg2 = pop_num(arg3, arg4) + local initial = pop_num(arg2, arg3, arg4) + local success, err = pcall(function() + for i=initial, limit, step do + push(i) + execute_ps(proc) + end + end) + if not success and err ~= exitmarker then + error(err, 0) + end + end, + forall = function() + local proc, arg2 = pop_proc() + local obj, arg1 = pop() + if type(obj) ~= 'table' then + ps_error('typecheck', arg1, arg2) + end + if obj.kind == 'executable' then + obj = obj.value + if type(obj) ~= 'table' then + ps_error('typecheck', arg1, arg2) + end + end + local success, err = pcall( + obj.kind == 'array' and function() + for i=1, #obj.value do + push(obj.value[i]) + execute_ps(proc) + end + end + or obj.kind == 'string' and function() + for b in string.bytes(obj.value) do + push(b) + execute_ps(proc) + end + end + or obj.kind == 'dict' and function() + for k, v in next, obj.value do + pushs(k, v) + execute_ps(proc) + end + end + or ps_error('typecheck', arg1, arg2)) + if not success and err ~= exitmarker then + error(err, 0) + end + end, + ['repeat'] = function() + local proc, arg2 = pop_proc() + local count = pop_int(arg2) + local success, err = pcall(function() + for i=1, count do + execute_ps(proc) + end + end) + if not success and err ~= exitmarker then + error(err, 0) + end + end, + loop = function() + local proc = pop_proc() + local success, err = pcall(function() + while true do + execute_ps(proc) + end + end) + if not success and err ~= exitmarker then + error(err, 0) + end + end, + + pathforall = function() + local close = pop_proc() + local curve = pop_proc() + local line = pop_proc() + local move = pop_proc() + local state = graphics_stack[#graphics_stack] + local path = state.current_path + if not path then return end + path = table.move(path, 1, #path, 1, {}) -- We don't want to be affected by modifications + local success, err = pcall( function() + local i = 1 + while true do + local entry = path[i] + if type(entry) == 'string' then + execute_ps(entry == 'm' and move or entry == 'l' and line or entry == 'c' and curve or entry == 'h' and close or error'Unexpected path operator') + elseif entry then + push(entry) + else + break + end + i = i + 1 + end + end) + if not success and err ~= exitmarker then + error(err, 0) + end + end, + + ['.texboxforall'] = function() + local proc, arg2 = pop_proc() + local boxop = pop() + local box = lua_node_lookup[boxop] + if not box then + -- push(boxop) + -- -- push(proc) + ps_error('typecheck', boxop, arg2) + end + if node.direct.getid(box.box) ~= node.id'hlist' then + -- push(boxop) + -- push(proc) + error'.texboxforall is currently only supported for hboxes' + end + + local head = node.direct.getlist(box.box) + head = node.direct.flatten_discretionaries(head) + node.direct.setlist(box.box, head) + local success, err = pcall(function() + local x, y = 0, 0 + local n = head + while n do + local after = node.direct.getnext(n) + local width = node.direct.rangedimensions(box.box, n, after)/65781.76 + push(mark) + local id = node.type(node.direct.getid(n)) + local subbox = {box = n, parent = box} -- parent is needed for lifetime reasons + local function op() + flush_delayed() + vf.push() + local n = subbox.box -- Same as the outer box, but this preserves the lifetime of subbox + local parent = subbox.parent.box + local after = node.direct.getnext(n) + local head = node.direct.getlist(parent) + node.direct.setnext(n, nil) + node.direct.setlist(parent, subbox.box) + vf.node(parent) + node.direct.setnext(n, after) + node.direct.setlist(parent, head) + vf.pop() + end + lua_node_lookup[subbox] = op + push(op) + push(x) + push(y) + push(width) + push(0) + push(id) + execute_ps(proc) + if width ~= 0 then + x = x + width + end + n = after + end + end) + if not success and err ~= exitmarker then + error(err, 0) + end + end, + pathbbox = function() + local current_path = assert(graphics_stack[#graphics_stack].current_path, 'nocurrentpoint') + local i=1 + local llx, lly, urx, ury + while current_path[i] do + local entry = current_path[i] + if type(entry) == 'number' then + local after = current_path[i+1] + assert(type(after) == 'number') + llx = llx and llx < entry and llx or entry + lly = lly and lly < after and lly or after + urx = urx and urx > entry and urx or entry + ury = ury and ury > after and ury or after + i = i+2 + else + i = i+1 + end + end + push(llx) + push(lly) + push(urx) + push(ury) + end, + + ['not'] = function() + local val, orig = pop() + local tval = type(val) + if tval == 'table' and val.kind == 'executable' then + val = val.value + local tval = type(val) + end + if tval == 'boolean' then + push(not val) + elseif tval == 'number' then + push(~val) + else + ps_error('typecheck', orig) + end + end, + ['and'] = function() + local val, orig = pop() + local tval = type(val) + if tval == 'table' and val.kind == 'executable' then + val = val.value + local tval = type(val) + end + if tval == 'boolean' then + push(pop_bool() and val) + elseif tval == 'number' then + push(val & pop_int()) + else + ps_error('typecheck', orig) + end + end, + ['or'] = function() + local val, orig = pop() + local tval = type(val) + if tval == 'table' and val.kind == 'executable' then + val = val.value + local tval = type(val) + end + if tval == 'boolean' then + push(pop_bool() or val) + elseif tval == 'number' then + push(val | pop_int()) + else + ps_error('typecheck', orig) + end + end, + ['xor'] = function() + local val, orig = pop() + local tval = type(val) + if tval == 'table' and val.kind == 'executable' then + val = val.value + local tval = type(val) + end + if tval == 'boolean' then + push(val ~= pop_bool()) + elseif tval == 'number' then + push(val ~ pop_int()) + else + ps_error('typecheck', orig) + end + end, + bitshift = function() + local shift, arg2 = pop_num() + local val = pop_num(arg2) + push(val << shift) + end, + + eq = function() + local b = pop() + local a = pop(b) + if type(a) == 'table' and (a.kind == 'executable' or a.kind == 'name' or a.kind == 'operator') then + a = a.value + end + if type(a) == 'table' and a.kind == 'string' then + a = a.value + end + if type(b) == 'table' and (b.kind == 'executable' or b.kind == 'name' or b.kind == 'operator') then + b = b.value + end + if type(b) == 'table' and b.kind == 'string' then + b = b.value + end + push(a==b) + end, + ne = function() + local b = pop() + local a = pop(b) + if type(a) == 'table' and (a.kind == 'executable' or a.kind == 'name' or a.kind == 'operator') then + a = a.value + end + if type(a) == 'table' and a.kind == 'string' then + a = a.value + end + if type(b) == 'table' and (b.kind == 'executable' or b.kind == 'name' or b.kind == 'operator') then + b = b.value + end + if type(b) == 'table' and b.kind == 'string' then + b = b.value + end + push(a~=b) + end, + gt = function() + local b, arg2 = pop() + local a, arg1 = pop(arg2) + local ta, tb = type(a), type(b) + if ta == 'table' and a.kind == 'executable' then + a = a.value ta = type(a) + end + if tb == 'table' and b.kind == 'executable' then + b = b.value tb = type(b) + end + if ta == 'number' then + if tb ~= 'number' then + ps_error('typecheck', arg1, arg2) + end + elseif ta == 'table' and ta.kind == 'string' then + if tb ~= 'table' or tb.kind ~= 'string' then + ps_error('typecheck', arg1, arg2) + end + a, b = a.value, b.value + else + ps_error('typecheck', arg1, arg2) + end + push(a>b) + end, + ge = function() + local b, arg2 = pop() + local a, arg1 = pop(arg2) + local ta, tb = type(a), type(b) + if ta == 'table' and a.kind == 'executable' then + a = a.value ta = type(a) + end + if tb == 'table' and b.kind == 'executable' then + b = b.value tb = type(b) + end + if ta == 'number' then + if tb ~= 'number' then + ps_error('typecheck', arg1, arg2) + end + elseif ta == 'table' and ta.kind == 'string' then + if tb ~= 'table' or tb.kind ~= 'string' then + ps_error('typecheck', arg1, arg2) + end + a, b = a.value, b.value + else + ps_error('typecheck', arg1, arg2) + end + push(a>=b) + end, + le = function() + local b, arg2 = pop() + local a, arg1 = pop(arg2) + local ta, tb = type(a), type(b) + if ta == 'table' and a.kind == 'executable' then + a = a.value ta = type(a) + end + if tb == 'table' and b.kind == 'executable' then + b = b.value tb = type(b) + end + if ta == 'number' then + if tb ~= 'number' then + ps_error('typecheck', arg1, arg2) + end + elseif ta == 'table' and ta.kind == 'string' then + if tb ~= 'table' or tb.kind ~= 'string' then + ps_error('typecheck', arg1, arg2) + end + a, b = a.value, b.value + else + ps_error('typecheck', arg1, arg2) + end + push(a<=b) + end, + lt = function() + local b, arg2 = pop() + local a, arg1 = pop(arg2) + local ta, tb = type(a), type(b) + if ta == 'table' and a.kind == 'executable' then + a = a.value ta = type(a) + end + if tb == 'table' and b.kind == 'executable' then + b = b.value tb = type(b) + end + if ta == 'number' then + if tb ~= 'number' then + ps_error('typecheck', arg1, arg2) + end + elseif ta == 'table' and a.kind == 'string' then + if tb ~= 'table' or b.kind ~= 'string' then + ps_error('typecheck', arg1, arg2) + end + a, b = a.value, b.value + else + ps_error('typecheck', arg1, arg2) + end + push(a= -0x80000000 then + num = num + 0x100000000 + end + if num < 0 then + ps_error('rangecheck', arg1, arg2, arg3) + end + num = num == 0 and '0' or num_to_base(num, radix) + end + if #old_str.value < #num then ps_error('rangecheck', arg1, arg2, arg3) end + old_str.value = num .. string.sub(old_str.value, #num+1, -1) + return push{kind = 'string', value = num} + end, + + string = function() + push{kind = 'string', value = string.rep('\0', (pop_int()))} + end, + search = function() + local seek = pop_string() + local str = pop_string() + local start, stop = string.find(str.value, seek.value, 1, true) + if start then + push(str_view(str, stop + 1, #str.value - stop)) + push(str_view(str, start, stop - start + 1)) + push(str_view(str, 1, start - 1)) + push(true) + else + push(str) + push(false) + end + end, + + array = function() + local size = pop_int() + local arr = lua.newtable(size, 0) + for i=1, size do arr[i] = null end + push{kind = 'array', value = arr} + end, + astore = function() + local arr = pop_array() + local size = #arr.value + for i=size, 1, -1 do + arr.value[i] = pop() + end + push(arr) + end, + aload = function() + local arr = pop_array() + table.move(arr.value, 1, #arr.value, #operand_stack + 1, operand_stack) + push(arr) + end, + getinterval = function() + local count, arg3 = pop_int() + local index, arg2 = pop_int() + local arr, arg1 = pop() + if type(arr) ~= 'table' then ps_error('typecheck', arg1, arg2, arg3) end + if arr.kind == 'executable' then + arr = arr.value + if type(arr) ~= 'table' then ps_error('typecheck', arg1, arg2, arg3) end + end + if arr.kind == 'string' then + push(str_view(arr, index + 1, count)) + elseif arr.kind == 'array' then + -- TODO: At least for the array case, we could use metamethods to make get element sharing behavior + push{kind = 'array', value = table.move(arr.value, index + 1, index + count, 1, {})} + else + ps_error('typecheck', arg1, arg2, arg3) + end + end, + putinterval = function() + local from, arg2 = pop() + local index, arg1 = pop_int() + if type(from) ~= 'table' then ps_error('typecheck', arg1, arg2) end + if from.kind == 'executable' then + from = from.value + if type(from) ~= 'table' then ps_error('typecheck', arg1, arg2) end + end + if from.kind == 'string' then + local to = pop_string() + from = from.value + to.value = string.sub(to.value, 1, index) .. from .. string.sub(to.value, index + 1 + #from) + elseif from.kind == 'array' then + local to = pop_array() + table.move(from.value, 1, #from.value, index + 1, to.value) + else + ps_error('typecheck', arg1, arg2) + end + end, + + dict = function() + local size = pop_int() + push{kind = 'dict', value = lua.newtable(0, size)} + end, + begin = function() + local _ + _, _, dictionary_stack[#dictionary_stack + 1] = pop_dict() + end, + ['end'] = function() + if #dictionary_stack <= 3 then + ps_error'dictstackunderflow' + end + dictionary_stack[#dictionary_stack] = nil + end, + currentdict = function() + push(dictionary_stack[#dictionary_stack]) + end, + bind = function() + local d = pop() + push(d) + if type(d) ~= 'table' then ps_error'typecheck' end + if d.kind == 'executable' then + d = d.value + if type(d) ~= 'table' then ps_error'typecheck' end + end + if d.kind ~= 'array' then ps_error'typecheck' end + bind(d.value) + end, + def = function() + local value = pop() + local key = pop_key() + dictionary_stack[#dictionary_stack].value[key] = value + end, + store = function() + local value = pop() + local key = pop_key() + for i=#dictionary_stack, 1, -1 do + if dictionary_stack[i].value[key] ~= nil then + dictionary_stack[i].value[key] = value + return + end + end + dictionary_stack[#dictionary_stack].value[key] = value + end, + known = function() + local key = pop_key() + local dict = pop() + push(dict.value[key] ~= nil) + end, + where = function() + local key = pop_key() + for i = #dictionary_stack, 1, -1 do + local dict = dictionary_stack[i] + local value = dict.value[key] + if value ~= nil then + push(dict) + return push(true) + end + end + return push(false) + end, + load = function() + push(lookup(pop_key())) + end, + get = function() + local key = pop() + local obj = pop() + if type(obj) ~= 'table' then ps_error'typecheck' end + if obj.kind == 'executable' then + obj = obj.value + if type(obj) ~= 'table' then ps_error'typecheck' end + end + local val = obj.value + if obj.kind == 'string' then + push(key) key = pop_int() + if key < 0 or key >= #val then ps_error'rangecheck' end + push(string.byte(val, key+1)) + elseif obj.kind == 'array' then + push(key) key = pop_int() + if key < 0 or key >= #val then ps_error'rangecheck' end + push(val[key+1]) + elseif obj.kind == 'dict' then + push(key) key = pop_key() + push(val[key]) + else + ps_error'typecheck' + end + end, + put = function() + local value = pop() + local key = pop() + local obj = pop() + if type(obj) ~= 'table' then ps_error'typecheck' end + if obj.kind == 'executable' then + obj = obj.value + if type(obj) ~= 'table' then ps_error'typecheck' end + end + local val = obj.value + if obj.kind == 'string' then + push(key) key = pop_int() + if key < 0 or key >= #val then ps_error'rangecheck' end + push(value) value = pop_int() + obj.value = string.sub(val, 1, key) .. string.char(value) .. string.sub(val, key+2, #val) + elseif obj.kind == 'array' then + push(key) key = pop_int() + if key < 0 or key >= #val then ps_error'rangecheck' end + val[key+1] = value + elseif obj.kind == 'dict' then + push(key) key = pop_key() + val[key] = value + else + ps_error'typecheck' + end + end, + undef = function() + local key = pop_key() + local dict = pop_dict() + dict[key] = nil + end, + length = function() + local obj = pop() + if type(obj) == 'string' then + return push(#obj) + elseif type(obj) ~= 'table' then + ps_error'typecheck' + end + if obj.kind == 'executable' then + obj = obj.value + if type(obj) ~= 'table' then ps_error'typecheck' end + end + local val = obj.value + if obj.kind == 'string' then + push(#val) + elseif obj.kind == 'name' then + push(#val) + elseif obj.kind == 'array' then + push(#val) + elseif obj.kind == 'dict' then + local length = 0 + for _ in next, val do + length = length + 1 + end + push(length) + else + ps_error'typecheck' + end + end, + + matrix = function() + push{kind = 'array', value = {1, 0, 0, 1, 0, 0}} + end, + defaultmatrix = function() + local m = pop_array() + local mm = m.value + assert(#mm == 6) + mm[1], mm[2], mm[3], mm[4], mm[5], mm[6] = 10, 0, 0, 10, 0, 0 + push(m) + end, + currentmatrix = function() + local m = pop_array() + assert(#m.value == 6) + table.move(graphics_stack[#graphics_stack].matrix, 1, 6, 1, m.value) + push(m) + end, + currentlinewidth = function() + push(assert(graphics_stack[#graphics_stack].linewidth, 'linewidth has to be set before it is queried')) + end, + currentmiterlimit = function() + push(assert(graphics_stack[#graphics_stack].miterlimit, 'miterlimit has to be set before it is queried')) + end, + currentflat = function() + push(graphics_stack[#graphics_stack].flatness) + end, + setlinewidth = function() + local lw = pop_num() + graphics_stack[#graphics_stack].linewidth = lw + delayed_print(string.format('%.3f w', lw)) + end, + setlinejoin = function() + local linejoin = pop_int() + graphics_stack[#graphics_stack].linejoin = linejoin + delayed_print(string.format('%i j', linejoin)) + end, + setlinecap = function() + local linecap = pop_int() + graphics_stack[#graphics_stack].linecap = linecap + delayed_print(string.format('%i J', linecap)) + end, + setmiterlimit = function() + local ml = pop_int() + graphics_stack[#graphics_stack].miterlimit = ml + delayed_print(string.format('%.3f M', ml)) + end, + setstrokeadjust = function() + local sa = pop_bool() + graphics_stack[#graphics_stack].strokeadjust = sa + delayed_print(ExtGState[sa and '<>' or '<>']) + end, + setdash = function() + local offset = pop_num() + local patt = pop_array().value + graphics_stack[#graphics_stack].dash = {offset = offset, pattern = patt} + local mypatt = {} + for i=1, #patt do + mypatt[i] = string.format('%.3f', patt[i]) + end + delayed_print(string.format('[%s] %.3f d', table.concat(mypatt, ' '), offset)) + end, + setflat = function() + local flatness = pop_num() + graphics_stack[#graphics_stack].flatness = flatness + delayed_print(string.format('%.3f i', flatness)) + end, + currentpoint = function() + local current_point = assert(graphics_stack[#graphics_stack].current_point, 'nocurrentpoint') + push(current_point[1]) + push(current_point[2]) + end, + + moveto = function() + local y = pop_num() + local x = pop_num() + local state = graphics_stack[#graphics_stack] + local current_path = state.current_path + if current_path then + local i = #current_path + 1 + current_path[i], current_path[i+1], current_path[i+2] = x, y, 'm' + local current_point = state.current_point + current_point[1], current_point[2] = x, y + else + state.current_path = {x, y, 'm'} + state.current_point = {x, y} + end + end, + rmoveto = function() + local state = graphics_stack[#graphics_stack] + local current_path = assert(state.current_path, 'nocurrentpoint') + local y = pop_num() + local x = pop_num() + local current_point = state.current_point + x, y = current_point[1] + x, current_point[2] + y + local i = #current_path + 1 + current_path[i], current_path[i+1], current_path[i+2] = x, y, 'm' + current_point[1], current_point[2] = x, y + end, + lineto = function() + local state = graphics_stack[#graphics_stack] + local current_path = assert(state.current_path, 'nocurrentpoint') + local y = pop_num() + local x = pop_num() + local i = #current_path + 1 + current_path[i], current_path[i+1], current_path[i+2] = x, y, 'l' + local current_point = state.current_point + current_point[1], current_point[2] = x, y + end, + rlineto = function() + local state = graphics_stack[#graphics_stack] + local current_path = assert(state.current_path, 'nocurrentpoint') + local y = pop_num() + local x = pop_num() + local current_point = state.current_point + x, y = x + current_point[1], y + current_point[2] + local i = #current_path + 1 + current_path[i], current_path[i+1], current_path[i+2] = x, y, 'l' + current_point[1], current_point[2] = x, y + end, + curveto = function() + local state = graphics_stack[#graphics_stack] + local current_path = assert(state.current_path, 'nocurrentpoint') + local y3 = pop_num() + local x3 = pop_num() + local y2 = pop_num() + local x2 = pop_num() + local y1 = pop_num() + local x1 = pop_num() + local i = #current_path + 1 + current_path[i], current_path[i+1], current_path[i+2], current_path[i+3], current_path[i+4], current_path[i+5], current_path[i+6] = x1, y1, x2, y2, x3, y3, 'c' + local current_point = state.current_point + current_point[1], current_point[2] = x3, y3 + end, + rcurveto = function() + local state = graphics_stack[#graphics_stack] + local current_path = assert(state.current_path, 'nocurrentpoint') + local current_point = state.current_point + local x0, y0 = current_point[1], current_point[2] + local y3 = pop_num() + y0 + local x3 = pop_num() + x0 + local y2 = pop_num() + y0 + local x2 = pop_num() + x0 + local y1 = pop_num() + y0 + local x1 = pop_num() + x0 + local i = #current_path + 1 + current_path[i], current_path[i+1], current_path[i+2], current_path[i+3], current_path[i+4], current_path[i+5], current_path[i+6] = x1, y1, x2, y2, x3, y3, 'c' + local current_point = state.current_point + current_point[1], current_point[2] = x3, y3 + end, + closepath = function() + local state = graphics_stack[#graphics_stack] + local current_path = state.current_path + local current_point = state.current_point + if not current_path then return end + local x, y + for i=#current_path, 1, -1 do + if current_path[i] == 'm' then + x, y = assert(tonumber(current_path[i-2])), assert(tonumber(current_path[i-1])) + end + end + current_point[1], current_point[2] = assert(x), y + current_path[#current_path + 1] = 'h' + end, + + arc = function() + local a2 = pop_num() + local a1 = pop_num() + local r = pop_num() + local yc = pop_num() + local xc = pop_num() + while a2 < a1 do + a2 = a2 + 360 + end + drawarc(xc, yc, r, a1, a2) + end, + arcn = function() + local a2 = pop_num() + local a1 = pop_num() + local r = pop_num() + local yc = pop_num() + local xc = pop_num() + while a1 < a2 do + a1 = a1 + 360 + end + drawarc(xc, yc, r, a1, a2) + end, + arcto = function() + local state = graphics_stack[#graphics_stack] + local current_path = assert(state.current_path, 'nocurrentpoint') + local current_point = state.current_point + local x0, y0 = current_point[1], current_point[2] + + local r = pop_num() + local y2 = pop_num() + local x2 = pop_num() + local y1 = pop_num() + local x1 = pop_num() + + local dx1, dy1 = x1 - x0, y1 - y0 + local dx2, dy2 = x2 - x1, y2 - y1 + + local a1 = math.atan(dy1, dx1) + local a2 = math.atan(dy2, dx2) + + if a1 - pi > a2 then + a1 = a1 - two_pi + elseif a2 - pi > a1 then + a2 = a2 - two_pi + end + + if a1 > a2 then + a1 = a1 + math.pi/2 + a2 = a2 + math.pi/2 + else + a1 = a1 - math.pi/2 + a2 = a2 - math.pi/2 + end + + local ox1, oy1 = r * math.cos(a1), r * math.sin(a1) + local ox2, oy2 = r * math.cos(a2), r * math.sin(a2) + -- Now we need to calculate the intersection of the lines offset by o1/o2 + -- to determine the center. We inlin eth ematix inverse for performance and better handling of edge cases. + -- local t1, t2 = matrix_transform(0, 0, matrix_invert(dx1, dy1, dx2, dy2, ox2-ox1, oy2-oy1)) + local det = dx1*dy2 - dy1*dx2 + if math.abs(det) < 0.0000001 then + -- Just draw a line + push(x1) + push(y1) + systemdict.value.lineto() + push(x1) + push(y1) + push(x1) + push(y1) + return + end + local t1 = (ox1 - ox2) * dy2/det + (oy2 - oy1) * dx2/det + local cx, cy = x1 - ox1 + t1 * dx1, y1 - oy1 + t1 * dy1 + -- local ccx, ccy = x1 - ox2 - t2 * dx2, y1 - oy2 + t2 * dy2 + drawarc(cx, cy, r, a1*180/pi, a2*180/pi) + + push(cx + ox1) + push(cy + oy1) + push(cx + ox2) + push(cy + oy2) + end, + arct = function() + systemdict.value.arcto() + pop() + pop() + pop() + pop() + end, + + eoclip = function() + local state = graphics_stack[#graphics_stack] + local current_path = state.current_path + if not current_path then return end + flush_delayed(true) + for i = 1, #current_path do + if type(current_path[i]) == 'number' then + pdfprint(string.format('%.5f', current_path[i])) + else + pdfprint(current_path[i]) + end + end + pdfprint'W* n' + end, + clip = function() + local state = graphics_stack[#graphics_stack] + local current_path = state.current_path + if not current_path then return end + flush_delayed(true) + for i = 1, #current_path do + if type(current_path[i]) == 'number' then + pdfprint(string.format('%.5f', current_path[i])) + else + pdfprint(current_path[i]) + end + end + pdfprint'W n' + end, + eofill = function() + local state = graphics_stack[#graphics_stack] + local current_path = state.current_path + if not current_path then return end + current_path[#current_path+1] = 'f*' + for i = 1, #current_path do + if type(current_path[i]) == 'number' then + current_path[i] = string.format('%.5f', current_path[i]) + end + end + flush_delayed() + pdfprint((table.concat(current_path, ' '):gsub('%.?0+ ', ' '))) + state.current_path, state.current_point = nil + end, + fill = function() + local state = graphics_stack[#graphics_stack] + local current_path = state.current_path + if not current_path then return end + current_path[#current_path+1] = 'f' + for i = 1, #current_path do + if type(current_path[i]) == 'number' then + current_path[i] = string.format('%.5f', current_path[i]) + end + end + flush_delayed() + pdfprint((table.concat(current_path, ' '):gsub('%.?0+ ', ' '))) + state.current_path, state.current_point = nil + end, + stroke = function() + local state = graphics_stack[#graphics_stack] + local current_path = state.current_path + if not current_path then return end + current_path[#current_path+1] = 'S' + for i = 1, #current_path do + if type(current_path[i]) == 'number' then + current_path[i] = string.format('%.5f', current_path[i]) + end + end + flush_delayed() + pdfprint((table.concat(current_path, ' '):gsub('%.?0+ ', ' '))) + state.current_path, state.current_point = nil + end, + flattenpath = function() + local state = graphics_stack[#graphics_stack] + local old_path = state.current_path + if not old_path then return end + local new_path = {} + local last_x, last_y = nil, 0 + local saved_x, saved_y + local subpath_x, subpath_y + local last_op = 1 + local matrix = state.matrix + local tolerance = state.flatness / math.sqrt(matrix[1]*matrix[4]-matrix[2]*matrix[3]) + for i=1, #old_path do + local entry = old_path[i] + if type(entry) == 'string' then + if entry == 'c' then + assert(i - last_op == 6) + flatten(new_path, tolerance, saved_x, saved_y, table.unpack(old_path, last_op, i-1)) + table.move(old_path, last_op + 4, last_op + 5, #new_path + 1, new_path) + new_path[#new_path+1] = 'l' + else + if entry == 'm' then + subpath_x, subpath_y = last_x, last_y + elseif entry == 'h' then + last_x, last_y = subpath_x, subpath_y + end + table.move(old_path, last_op, i, #new_path + 1, new_path) + end + saved_x, saved_y = last_x, last_y + last_op = i + 1 + else + if last_y then + last_x, last_y = entry + else + last_y = entry + end + end + end + assert(last_op == #old_path + 1) + state.current_path = new_path + end, + + rectclip = function() + flush_delayed() + local top = pop() + if type(top) == 'table' and top.kind == 'executable' then + top = top.value + end + if type(top) == 'number' then + local h = top + local w = pop_num() + local y = pop_num() + local x = pop_num() + pdfprint((string.format('%.5f %.5f %.5f %.5f re W n', x, y, w, h):gsub('%.?0+ ', ' '))) + else + error'Unsupported rectclip variant' + end + end, + rectstroke = function() + flush_delayed() + local top = pop() + if type(top) == 'table' and top.kind == 'executable' then + top = top.value + end + if type(top) == 'number' then + local h = top + local w = pop_num() + local y = pop_num() + local x = pop_num() + pdfprint((string.format('%.5f %.5f %.5f %.5f re S', x, y, w, h):gsub('%.?0+ ', ' '))) + else + error'Unsupported rectstroke variant' + end + end, + rectfill = function() + flush_delayed() + local top = pop() + if type(top) == 'table' and top.kind == 'executable' then + top = top.value + end + if type(top) == 'number' then + local h = top + local w = pop_num() + local y = pop_num() + local x = pop_num() + pdfprint((string.format('%.5f %.5f %.5f %.5f re f', x, y, w, h):gsub('%.?0+ ', ' '))) + else + error'Unsupported rectfill variant' + end + end, + + shfill = function() + local shading_dict, arg1 = pop_dict() + flush_delayed() + local data_src + local pdf_dict = '' + for k, v in next, shading_dict do + if k == 'DataSource' then + data_src = v + else + pdf_dict = pdf_dict .. serialize_pdf(k) .. ' ' .. serialize_pdf(v) + end + end + if shading_dict.ShadingType == 4 then + assert(data_src) + if type(data_src) ~= 'table' then + push(arg1) + ps_error'typecheck' + end + if data_src.kind == 'string' then + data_src = data_src.value + elseif data_src.kind == 'array' then + data_src = data_src.value + local color_model = shading_dict.ColorSpace.value[1] + if type(color_model) == 'table' and color_model.kind == 'name' then + color_model = color_model.value + end + if color_model == 'DeviceRGB' then + color_model = 3 + elseif color_model == 'DeviceCMYK' then + color_model = 4 + elseif color_model == 'DeviceGray' then + color_model = 1 + else + error'Unsupported color model in Shading dictionary' + end + local components = color_model + 3 + pdf_dict = pdf_dict .. '/BitsPerCoordinate 24/BitsPerComponent 8/BitsPerFlag 8/Decode[-8192 8191 -8192 8191' .. string.rep(' 0 1', color_model) .. ']' + local data = '' + for i = 1, #data_src-components+1, components do + data = data .. string.pack('>BI3I3', data_src[i], (data_src[i+1]*1024+.5)//1 + 8388608, (data_src[i+2]*1024+.5)//1 + 8388608) + for j = i + 3, i + 2 + color_model do + data = data .. string.pack('B', (data_src[j]*255+.5)//1) + end + end + data_src = data + else + error'Unsupported DataSource variant' + end + local obj = write_shading(pdf_dict, data_src) + pdfprint(string.format('%s sh', write_shading(pdf_dict, data_src))) + end + end, + + scale = function() + local m = pop() + if type(m) == 'table' and m.kind == 'array' then + local mv = m.value + if #mv ~= 6 then error'Unexpected size of matrix' end + local y = pop_num() + local x = pop_num() + mv[1], mv[2], mv[3], mv[4], mv[5], mv[6] = x, 0, 0, y, 0, 0 + push(m) + else + push(m) + local y = pop_num() + local x = pop_num() + update_matrix(x, 0, 0, y, 0, 0) + end + end, + translate = function() + local m = pop() + if type(m) == 'table' and m.kind == 'array' then + local mv = m.value + if #mv ~= 6 then error'Unexpected size of matrix' end + local y = pop_num() + local x = pop_num() + mv[1], mv[2], mv[3], mv[4], mv[5], mv[6] = 1, 0, 0, 1, x, y + push(m) + else + push(m) + local y = pop_num() + local x = pop_num() + update_matrix(1, 0, 0, 1, x, y) + end + end, + rotate = function() + local m = pop() + if type(m) == 'table' and m.kind == 'array' then + local mv = m.value + if #mv ~= 6 then error'Unexpected size of matrix' end + local angle = math.rad(pop_num()) + local s, c = math.sin(angle), math.cos(angle) + mv[1], mv[2], mv[3], mv[4], mv[5], mv[6] = c, s, -s, c, 0, 0 + push(m) + else + push(m) + local angle = math.rad(pop_num()) + local s, c = math.sin(angle), math.cos(angle) + update_matrix(c, s, -s, c, 0, 0) + end + end, + transform = function() + local m = pop() + if type(m) == 'table' and m.kind == 'array' then + m = m.value + if #m ~= 6 then error'Unexpected size of matrix' end + else + push(m) + m = graphics_stack[#graphics_stack].matrix + end + local y = pop_num() + local x = pop_num() + x, y = matrix_transform(x, y, m[1], m[2], m[3], m[4], m[5], m[6]) + push(x) + push(y) + end, + itransform = function() + local m = pop() + if type(m) == 'table' and m.kind == 'array' then + m = m.value + if #m ~= 6 then error'Unexpected size of matrix' end + else + push(m) + m = graphics_stack[#graphics_stack].matrix + end + local y = pop_num() + local x = pop_num() + x, y = matrix_transform(x, y, matrix_invert(m[1], m[2], m[3], m[4], m[5], m[6])) + push(x) + push(y) + end, + dtransform = function() + local m = pop() + if type(m) == 'table' and m.kind == 'array' then + m = m.value + if #m ~= 6 then error'Unexpected size of matrix' end + else + push(m) + m = graphics_stack[#graphics_stack].matrix + end + local y = pop_num() + local x = pop_num() + x, y = matrix_transform(x, y, m[1], m[2], m[3], m[4], 0, 0) + push(x) + push(y) + end, + idtransform = function() + local m = pop() + if type(m) == 'table' and m.kind == 'array' then + m = m.value + if #m ~= 6 then error'Unexpected size of matrix' end + else + push(m) + m = graphics_stack[#graphics_stack].matrix + end + local y = pop_num() + local x = pop_num() + x, y = matrix_transform(x, y, matrix_invert(m[1], m[2], m[3], m[4], 0, 0)) + push(x) + push(y) + end, + concatmatrix = function() + local m3a = pop_array() + local m3 = m3a.value + if #m3 ~= 6 then error'Unexpected size of matrix' end + local m2 = pop_array().value + if #m2 ~= 6 then error'Unexpected size of matrix' end + local m1 = pop_array().value + if #m1 ~= 6 then error'Unexpected size of matrix' end + m3[1], m3[2], + m3[3], m3[4], + m3[5], m3[6] + = m1[1] * m2[1] + m1[2] * m2[3], m1[1] * m2[2] + m1[2] * m2[4], + m1[3] * m2[1] + m1[4] * m2[3], m1[3] * m2[2] + m1[4] * m2[4], + m1[5] * m2[1] + m1[6] * m2[3] + m2[5], m1[5] * m2[2] + m1[6] * m2[4] + m2[6] + push(m3a) + end, + invertmatrix = function() + local target = pop_array() + local T = target.value + assert(#T == 6) + local M = pop_array().value + assert(#M == 6) + T[1], T[2], T[3], T[4], T[5], T[6] + = matrix_invert(M[1], M[2], M[3], M[4], M[5], M[6]) + push(target) + end, + concat = function() + local m = pop_array().value + if #m ~= 6 then error'Unexpected size of matrix' end + update_matrix(m[1], m[2], m[3], m[4], m[5], m[6]) + end, + -- setmatrix is not supported in PDF, so we invert the old matrix first + setmatrix = function() + local m = pop() + if type(m) ~= 'table' or m.kind ~= 'array' then + ps_error'typecheck' + end + local m = m.value + if #m ~= 6 then ps_error'rangecheck' end + local old = graphics_stack[#graphics_stack].matrix + local pt = graphics_stack[#graphics_stack].current_point + local a, b, c, d, e, f = matrix_invert(old[1], old[2], old[3], old[4], old[5], old[6]) + update_matrix(a, b, c, d, e, f) + update_matrix(m[1], m[2], m[3], m[4], m[5], m[6]) + end, + setpdfcolor = function() + local pdf = pop_string().value + local color = graphics_stack[#graphics_stack].color + delayed_print(pdf) + color.space = {kind = 'array', value = {{kind = 'name', value = 'PDF'}}} + for i=2, #color do color[i] = nil end + color[1] = pdf + end, + setgray = function() + local g = pop_num() + local color = graphics_stack[#graphics_stack].color + color.space = {kind = 'array', value = {{kind = 'name', value = 'DeviceGray'}}} + for i=2, #color do color[i] = nil end + color[1] = g + delayed_print(string.format('%.3f g %.3f G', g, g)) + end, + setrgbcolor = function() + local b = pop_num() + local g = pop_num() + local r = pop_num() + local color = graphics_stack[#graphics_stack].color + color.space = {kind = 'array', value = {{kind = 'name', value = 'DeviceRGB'}}} + for i=4, #color do color[i] = nil end + color[1], color[2], color[3] = r, g, b + delayed_print(string.format('%.3f %.3f %.3f rg %.3f %.3f %.3f RG', r, g, b, r, g, b)) + end, + -- Conversion based on Wikipedia article about HSB colorspace + sethsbcolor = function() + local b = pop_num() + local s = pop_num() + local h = pop_num() + if b < 0 then b = 0 elseif b > 1 then b = 1 end + if s < 0 then s = 0 elseif s > 1 then s = 1 end + if h < 0 then h = 0 elseif h > 1 then h = 1 end + local hi, hf = math.modf(6 * h) + local p, q, t = b * (1 - s), b * (1 - s*hf), b * (1 - s * (1-hf)) + if hi == 0 or hi == 6 then + push(b) push(t) push(p) + elseif hi == 1 then + push(q) push(b) push(p) + elseif hi == 2 then + push(p) push(b) push(t) + elseif hi == 3 then + push(p) push(q) push(b) + elseif hi == 4 then + push(t) push(p) push(b) + elseif hi == 5 then + push(b) push(p) push(q) + end + return systemdict.value.setrgbcolor() + end, + setcmykcolor = function() + local k = pop_num() + local y = pop_num() + local m = pop_num() + local c = pop_num() + local color = graphics_stack[#graphics_stack].color + color.space = {kind = 'array', value = {{kind = 'name', value = 'DeviceCMYK'}}} + for i=5, #color do color[i] = nil end + color[1], color[2], color[3], color[4] = c, m, y, k + delayed_print(string.format('%.3f %.3f %.3f %.3f k %.3f %.3f %.3f %.3f K', c, m, y, k, c, m, y, k)) + end, + ['.setopacityalpha'] = function() + error'Unsupported, use .setfillconstantalpha instead' + end, + ['.setfillconstantalpha'] = function() + local alpha = pop_num() + graphics_stack[#graphics_stack].fillconstantalpha = alpha + delayed_print(ExtGState['<>']) + end, + ['.setstrokeconstantalpha'] = function() + local alpha = pop_num() + graphics_stack[#graphics_stack].strokeconstantalpha = alpha + delayed_print(ExtGState['<>']) + end, + ['.currentalphaisshape'] = function() + local ais = graphics_stack[#graphics_stack].alphaisshape + if ais == nil then error'alphaisshape has to be set before it is queried' end + push(ais) + end, + ['.setalphaisshape'] = function() + local ais = pop_bool() + graphics_stack[#graphics_stack].alphaisshape = ais + delayed_print(ExtGState['<>']) + end, + ['.currentblendmode'] = function() + local blendmode = graphics_stack[#graphics_stack].blendmode + if blendmode == nil then error'blendmode has to be set before it is queried' end + push{kind = 'name', value = blendmode} + end, + ['.setblendmode'] = function() + local blendmode = pop() + if type(blendmode) == 'string' then + elseif type(blendmode) == 'table' and blendmode.kind == 'name' then + blendmode = blendmode.value + else + push(blendmode) + ps_error'typecheck' + end + graphics_stack[#graphics_stack].blendmode = blendmode + delayed_print(ExtGState['<>']) + end, + newpath = function() + local state = graphics_stack[#graphics_stack] + state.current_point = nil + state.current_path = nil + end, + + currentcolorspace = function() + local color = graphics_stack[#graphics_stack].color + if not color then error'Color has to be set before it is queried' end + push(color.space) + end, + currentcolor = function() + local color = graphics_stack[#graphics_stack].color + if not color then error'Color has to be set before it is queried' end + for i = 1, #color do + push(color[i]) + end + end, + currentcmykcolor = function() + local c, m, y, k + local color = graphics_stack[#graphics_stack].color + if not color then error'Color has to be set before it is queried' end + local space = color.space.value[1] + if type(space) == 'table' and space.kind == 'name' then space = space.value end + if space == 'DeviceRGB' then + c, m, y = 1 - color[1], 1 - color[2], 1 - color[3] + -- k = math.min(c, m, y) + -- TODO: Undercolor removal/black generation + -- local undercolor = undercolorremoval(k) + -- local undercolor = 0 + -- k = blackgeneration(k) + k = 0 + -- c, m, y = c - undercolor, y - undercolor, k - undercolor + elseif space == 'DeviceGray' then + c, m, y, k = 0, 0, 0, 1 - color[1] + elseif space == 'DeviceCMYK' then + c, m, y, k = color[1], color[2], color[3], color[4] + elseif space == 'PDF' then + c, m, y, k = 0, 0, 0, 1 + print('???', 'tocmyk', color[1]) + else + r, g, b, k = 0, 0, 0, 1 + end + push(r) + push(g) + push(b) + end, + currentgraycolor = function() + local g + local color = graphics_stack[#graphics_stack].color + if not color then error'Color has to be set before it is queried' end + local space = color.space.value[1] + if type(space) == 'table' and space.kind == 'name' then space = space.value end + if space == 'DeviceRGB' then + g = 0.3 * color[1] + 0.59 * color[2], 0.11 * color[3] + elseif space == 'DeviceGray' then + g = color[1] + elseif space == 'DeviceCMYK' then + g = math.min(1, math.max(0, 0.3 * color[1] + 0.59 * color[2] + 0.11 * color[3] + color[4])) + elseif space == 'PDF' then + g = 1 + print('???', 'togray', color[1]) + else + g = 1 + end + push(g) + end, + currentrgbcolor = function() + local r, g, b + local color = graphics_stack[#graphics_stack].color + if not color then error'Color has to be set before it is queried' end + local space = color.space.value[1] + if type(space) == 'table' and space.kind == 'name' then space = space.value end + if space == 'DeviceRGB' then + r, g, b = color[1], color[2], color[3] + elseif space == 'DeviceGray' then + r = color[1] + g, b = r, r + elseif space == 'DeviceCMYK' then + local c, m, y, k = color[1], color[2], color[3], color[4] + c, m, y = c+k, m+k, y+k + r, g, b = c >= 1 and 0 or 1-c, m >= 1 and 0 or 1-m, y >= 1 and 0 or 1-y + elseif space == 'PDF' then + r, g, b = 0, 0, 0 + print('???', 'torgb', color[1]) + else + r, g, b = 0, 0, 0 + end + push(r) + push(g) + push(b) + end, + currenthsbcolor = function() + systemdict.value.currentrgbcolor() + local b = pop_num() + local g = pop_num() + local r = pop_num() + local M, m = math.max(r, g, b), math.min(r, g, b) + local H + if M == m then + H = 0 + elseif M == r then + H = (g-b)/(M-m) / 6 + if H < 0 then H = H + 1 end + elseif M == g then + H = (b-r)/(M-m) / 6 + 1/3 + elseif assert(M == b) then + H = (r-g)/(M-m) / 6 + 2/3 + end + local S = M == 0 and 0 or (M-m)/M + local B = M + push(H) + push(S) + push(B) + end, + currentfont = function() + local f = graphics_stack[#graphics_stack].font + if f then + push(f) + else + push{kind = 'dict', value = { + FID = font.current(), + FontMatrix = {kind = 'array', value = {1, 0, 0, 1, 0, 0}}, + FontName = {kind = 'name', value = tex.fontname(font.current())}, + FontType = 0x1CA, + }} + end + end, + + gsave = function() + graphics_stack[#graphics_stack+1] = table.copy(graphics_stack[#graphics_stack]) + graphics_stack[#graphics_stack].saved_delayed = delayed + delayed = { + text = {}, + matrix = {1, 0, 0, 1, 0, 0}, + } + end, + grestore = function() + local saved_delayed = graphics_stack[#graphics_stack].saved_delayed + if saved_delayed then + delayed = saved_delayed + else + pdfprint'Q' + reset_delayed(delayed) + end + graphics_stack[#graphics_stack] = nil + end, + + setglobal = pop_bool, + + flush = function() + io.stdout:flush() + end, + print = function() + local msg = pop_string() + io.stdout:write(msg.value) + end, + stack = function() + for i=#operand_stack, 1, -1 do + texio.write_nl('term and log', ps_to_string(operand_stack[i])) + end + end, + ['='] = function() + texio.write_nl('term and log', ps_to_string(pop())) + end, + ['=='] = function() -- FIXME: Should give a better representation + texio.write_nl('term and log', ps_to_string(pop())) + end, + + stringwidth = function() + local state = graphics_stack[#graphics_stack] + local rawpsfont = assert(state.font, 'invalidfont') + local str = pop_string().value + local psfont = rawpsfont.value + local fid = psfont.FID + local matrix = psfont.FontMatrix.value + local fonttype = psfont.FontType + if fonttype ~= 0x1CA and fonttype ~= 3 then + texio.write_nl'Font support is not implemented' + return + end + local w = 0 + if fonttype == 0x1CA then + local characters = assert(font.getfont(fid)).characters + for b in string.bytes(str) do + local char = characters[b] + w = w + (char and char.width or 0) + end + w = w/65781.76 + elseif fonttype == 3 then + local saved_delayed = delayed + delayed = { + text = {}, + matrix = {1, 0, 0, 1, 0, 0}, + } + local saved_saved_delayed = state.saved_delayed + state.saved_delayed = nil + local saved_pdfprint = pdfprint + pdfprint = gobble + for b in string.bytes(str) do + systemdict.value.gsave() + local state = graphics_stack[#graphics_stack] + state.current_point, state.current_path = nil + push(rawpsfont) + push(b) + local this_w + char_width_storage = function(width) + this_w = width + end + execute_tok(psfont.BuildChar) -- FIXME(maybe): Switch to BuildGlyph? + systemdict.value.grestore() + w = w + assert(this_w, 'Type 3 character failed to set width') + update_matrix(1, 0, 0, 1, this_w, 0) + end + update_matrix(1, 0, 0, 1, -w, 0) + pdfprint = saved_pdfprint + state.saved_delayed = saved_saved_delayed + delayed = saved_delayed + end + local x, y = matrix_transform(w, 0, + matrix[1], matrix[2], + matrix[3], matrix[4], + 0, 0) + push(x) + push(y) + end, + ashow = function() + local str, arg3 = pop_string() + local ay, arg2 = pop_num(arg3) + local ax, arg1 = pop_num(arg2, arg3) + local res, err = generic_show(str, ax, ay) + if not res then + ps_error(err, arg1, arg2, arg3) + end + end, + show = function() + local str, orig = pop_string() + local res, err = generic_show(str) + if not res then + ps_error(err, orig) + end + end, + definefont = function() + local fontdict, raw_fontdict = pop_dict() + local fontkey = pop_key() + fontdict.FontMatrix = fontdict.FontMatrix or {kind = 'array', value = {1, 0, 0, 1, 0, 0}} + if assert(fontdict.FontType) == 0x1CA then + local fontname = fontdict.FontName + if type(fontname) == 'table' and fontname.kind == 'name' then + fontname = fontname.value + elseif type(fontname) ~= 'string' then + pushs(fontkey, raw_fontdict) + ps_error'typecheck' + end + local fid = fonts.definers.read(fontname, 65782) + if not fid then ps_error'invalidfont' end + if not tonumber(fid) then + local data = fid + fid = font.define(data) + fonts.definers.register(data, fid) + end + fontdict.FID = fid + else + texio.write_nl'definefont is not implemnted. Pushing dummy font.' + end + FontDirectory[fontkey] = raw_fontdict + push(raw_fontdict) + end, + makefont = function() + local m = pop_array().value + if #m ~= 6 then error'Unexpected size of matrix' end + local fontdict = pop_dict() + local new_fontdict = {} + for k,v in next, fontdict do + new_fontdict[k] = v + end + local old_m = assert(fontdict.FontMatrix, 'invalidfont').value + new_fontdict.FontMatrix = {kind = 'array', value = { + old_m[1] * m[1] + old_m[2] * m[3], old_m[1] * m[2] + old_m[2] * m[4], + old_m[3] * m[1] + old_m[4] * m[3], old_m[3] * m[2] + old_m[4] * m[4], + old_m[5] * m[1] + old_m[6] * m[3] + m[5], old_m[5] * m[2] + old_m[6] * m[4] + m[6], + }} + push{kind = 'dict', value = new_fontdict} + end, + scalefont = function() + local factor = pop_num() + local fontdict = pop_dict() + local new_fontdict = {} + for k,v in next, fontdict do + new_fontdict[k] = v + end + local old_m = assert(fontdict.FontMatrix, 'invalidfont').value + new_fontdict.FontMatrix = {kind = 'array', value = { + factor * old_m[1], factor * old_m[2], + factor * old_m[3], factor * old_m[4], + factor * old_m[5], factor * old_m[6], + }} + push{kind = 'dict', value = new_fontdict} + end, + setfont = function() + local _, _, fontdict = pop_dict() + local state = graphics_stack[#graphics_stack] + state.font = fontdict + end, + ['.findfontid'] = function() + local fid = pop_int() + + if font.frozen(fid) == nil then + push(fid) + ps_error'invalidfont' + end + local fontsize_inv = 65782/pdf.getfontsize(fid) + local fontname = tex.fontname(fid) + return push{kind = 'dict', value = { + FID = fid, + FontMatrix = {kind = 'array', value = {fontsize_inv, 0, 0, fontsize_inv, 0, 0}}, + FontName = {kind = 'name', value = fontname}, + FontType = 0x1CA, + }} + end, + findfont = function() + local fontname = pop_key() + local fontdict = FontDirectory[fontname] + if fontdict then push(fontdict) return end + + fontname = font_aliases[fontname] or fontname + local fid = fonts.definers.read(fontname, 65782) + if not fid then ps_error'invalidfont' end + if not tonumber(fid) then + local data = fid + fid = font.define(data) + fonts.definers.register(data, fid) + end + return push{kind = 'dict', value = { + FID = fid, + FontMatrix = {kind = 'array', value = {1, 0, 0, 1, 0, 0}}, + FontName = {kind = 'name', value = fontname}, + FontType = 0x1CA, + }} + end, + selectfont = function() + systemdict.value.exch() + systemdict.value.findfont() + systemdict.value.exch() + if type(operand_stack[#operand_stack]) == 'number' then + systemdict.value.scalefont() + else + systemdict.value.makefont() + end + systemdict.value.setfont() + end, + + setcharwidth = function() + -- Pop and ignore the advance height -- FIXME(maybe) + pop_num() + assert(char_width_storage, 'undefined')(pop_num()) + char_width_storage = nil + end, + setcachedevice = function() + -- First pop and ignore the bounding box + pop_num() + pop_num() + pop_num() + pop_num() + -- Fallback to setcharwidth + systemdict.value.setcharwidth() + end, + setcachedevice2 = function() + -- First pop additional entries for setccachedevice2 -- TODO: Implement other writing modes + pop_num() + pop_num() + pop_num() + pop_num() + -- Fallback to setcachedevice + systemdict.value.setcachedevice() + end, + + findresource = function() + local category = pop_key() + local catdict = ResourceCategories.value[category] + if not catdict then + push(category) + print('undefined resource category', category) + ps_error'undefined' + end + local dict_height = #dictionary_stack + 1 + dictionary_stack[dict_height] = catdict + execute_tok'FindResource' + if #dictionary_stack ~= dict_height or dictionary_stack[dict_height] ~= catdict then + error'Messed up dictionary stack in custom resource' + end + dictionary_stack[dict_height] = nil + end, + resourcestatus = function() + local category = pop_key() + local catdict = ResourceCategories.value[category] + if not catdict then + push(category) + print('undefined resource category', category) + ps_error'undefined' + end + local dict_height = #dictionary_stack + 1 + dictionary_stack[dict_height] = catdict + execute_tok'ResourceStatus' + if #dictionary_stack ~= dict_height or dictionary_stack[dict_height] ~= catdict then + error'Messed up dictionary stack in custom resource' + end + dictionary_stack[dict_height] = nil + end, + resourceforall = function() + local category = pop_key() + local catdict = ResourceCategories.value[category] + if not catdict then + push(category) + print('undefined resource category', category) + ps_error'undefined' + end + local dict_height = #dictionary_stack + 1 + dictionary_stack[dict_height] = catdict + execute_tok'ResourceForAll' + if #dictionary_stack ~= dict_height or dictionary_stack[dict_height] ~= catdict then + error'Messed up dictionary stack in custom resource' + end + dictionary_stack[dict_height] = nil + end, + defineresource = function() + local category = pop_key() + local catdict = ResourceCategories.value[category] + if not catdict then + push(category) + print('undefined resource category', category) + ps_error'undefined' + end + local dict_height = #dictionary_stack + 1 + dictionary_stack[dict_height] = catdict + execute_tok'DefineResource' + if #dictionary_stack ~= dict_height or dictionary_stack[dict_height] ~= catdict then + error'Messed up dictionary stack in custom resource' + end + dictionary_stack[dict_height] = nil + end, + undefineresource = function() + local category = pop_key() + local catdict = ResourceCategories.value[category] + if not catdict then + push(category) + print('undefined resource category', category) + ps_error'undefined' + end + local dict_height = #dictionary_stack + 1 + dictionary_stack[dict_height] = catdict + execute_tok'UndefineResource' + if #dictionary_stack ~= dict_height or dictionary_stack[dict_height] ~= catdict then + error'Messed up dictionary stack in custom resource' + end + dictionary_stack[dict_height] = nil + end, + + realtime = function() + push(os.gettimeofday() * 1000 // 1) + end, + + rrand = function() + push(rrand()) + end, + srand = function() + srand(pop_int()) + end, + rand = function() + push(rand()) + end, + + type = function() + local val = pop() + local tval = type(val) + if tval == 'table' and val.kind == 'executable' then + val = val.value + tval = type(val) + end + local tname + if tval == 'string' then + tname = 'nametype' + elseif tval == 'number' then + tname = math.type(val) == 'integer' and 'integertype' or 'realtype' + elseif tval == 'boolean' then + tname = 'booleantype' + elseif tval == 'function' then + tname = 'operatortype' + elseif tval == 'table' then + local kind = val.kind + if kind == 'name' then + tname = 'nametype' + elseif kind == 'operator' then + tname = 'operatortype' + elseif kind == 'array' then + tname = 'arraytype' + elseif kind == 'dict' then + tname = 'dicttype' + elseif kind == 'dict' then + tname = 'dicttype' + elseif kind == 'null' then + tname = 'nulltype' + elseif kind == 'mark' then + tname = 'nulltype' + elseif kind == 'string' then + tname = 'stringtype' + else + assert(false, 'Unexpected type') + end + else + assert(false, 'Unexpected type') + end + push(tname) + -- filetype + -- fonttype + -- gstatetype (LanguageLevel 2) + -- packedarraytype (LanguageLevel 2) + -- savetype + end, + xcheck = function() + local a = pop() + local ta = type(a) + push(ta == 'function' or ta == 'name' or (ta == 'table' and a.kind == 'executable')) + end, + cvlit = function() + local a = pop() + local ta = type(a) + if (ta == 'table' and a.kind == 'executable') or ta == 'string' or ta == 'function' then + return push(a.value) + end + if ta == 'string' then + return push{kind = 'name', value = a} + end + if ta == 'function' then + return push{kind = 'operator', value = a} + end + return push(a) + end, + cvx = function() + local a = pop() + local ta = type(a) + if (ta == 'table' and a.kind == 'executable') or ta == 'string' or ta == 'function' then + return push(a) + elseif ta == 'table' and (a.kind == 'operator' or a.kind == 'name') then + return push(a.value) + else + return push{kind = 'executable', value = a} + end + end, + exec = function() + return execute_tok((pop())) + end, + stopped = function() + local proc = pop() + local success, err = pcall(execute_tok, proc) + if success then + push(false) + elseif err == 'stop' or true then -- Since we don implement error handlers, all errors act like their error handler included "stop" + push(true) + end + end, + stop = function() + error'stop' + end, + exit = function() + error(exitmarker) + end, + quit = function() + os.exit() + end, + run = function() + local filename = pop_string().value + local resolved = kpse.find_file(filename, 'PostScript header') + if not resolved then + error(string.format('Unable to find file %q.', filename)) + end + local f = assert(io.open(resolved, 'rb')) + local data = maybe_decompress(f:read'a') + f:close() + return execute_tok{kind = 'executable', value = {kind = 'string', value = data}} + end, + + -- We don't implement local/global separation, so we ignore setglobal and always report currentglobal as true + setglobal = function() + pop() + end, + currentglobal = function() + push(true) + end, + + closefile = function() + local f = pop() + f:close() + end, + file = function() + local access = pop_string() + local orig_filename = pop_string() + local filename = orig_filename.value + if access.value:sub(1, 1) == 'a' then + filename = kpse.find_file(filename) + if not filename then + push(orig_filename) + push(access) + ps_error'undefinedfilename' + end + end + if access.value == '' then + push(orig_filename) + push(access) + ps_error'invalidfileaccess' + end + local f = io.open(filename, access.value) + if not f then + push(orig_filename) + push(access) + ps_error'invalidfileaccess' + end + push(f) + end, + write = function() + local data = pop_num() + local f = pop() + data = data % 256 + f:write(string.char(data)) + end, + writestring = function() + local data = pop_string().value + local f = pop() + f:write(data) + end, + readstring = function() + local target = pop_string() + local f = pop() + local data = f:read(#target.value) + if #target.value == #data then + target.value = data + push(target) + push(true) + systemdict.value.stack() + else + target = str_view(target, 1, #data) + target.value = data + push(target) + push(false) + systemdict.value.stack() + end + end, + readline = function() + local target = pop_string() + local f = pop() + local data = f:read'L' -- TODO: \r should be accepted as EOL marker too + if data then + if #data > #target.value then + push(f) + push(target) + ps_error'rangecheck' + end + target = str_view(target, 1, #data) + target.value = data + push(target) + push(true) + else + push{kind = 'string', value = ''} + push(false) + end + end, + + token = function() + local arg = pop() + if type(arg) ~= 'table' or arg.kind ~= 'string' then + push(arg) + if type(arg) == 'userdata' and arg.read then + error'token applied to file arguments is no yet implemented' + else + ps_error'typecheck' + end + end + local str = arg.value + local tok, after = l.match(any_object * l.Cp(), str) + if after == nil then + if l.match(whitespace^-1 * -1, str) then + push(false) + else + push(arg) + ps_error'syntaxerror' + end + else + push(str_view(arg, after, #str - after + 1)) + push(tok) + push(true) + end + end, + + revision = 1000, + ['true'] = true, + ['false'] = false, + systemdict = systemdict, + globaldict = globaldict, + FontDirectory = FontDirectory, + + ISOLatin1Encoding = {kind = 'array', value = { + {kind = 'name', value = '.notdef'}, + {kind = 'name', value = '.notdef'}, + {kind = 'name', value = '.notdef'}, + {kind = 'name', value = '.notdef'}, + {kind = 'name', value = '.notdef'}, + {kind = 'name', value = '.notdef'}, + {kind = 'name', value = '.notdef'}, + {kind = 'name', value = '.notdef'}, + {kind = 'name', value = '.notdef'}, + {kind = 'name', value = '.notdef'}, + {kind = 'name', value = '.notdef'}, + {kind = 'name', value = '.notdef'}, + {kind = 'name', value = '.notdef'}, + {kind = 'name', value = '.notdef'}, + {kind = 'name', value = '.notdef'}, + {kind = 'name', value = '.notdef'}, + {kind = 'name', value = '.notdef'}, + {kind = 'name', value = '.notdef'}, + {kind = 'name', value = '.notdef'}, + {kind = 'name', value = '.notdef'}, + {kind = 'name', value = '.notdef'}, + {kind = 'name', value = '.notdef'}, + {kind = 'name', value = '.notdef'}, + {kind = 'name', value = '.notdef'}, + {kind = 'name', value = '.notdef'}, + {kind = 'name', value = '.notdef'}, + {kind = 'name', value = '.notdef'}, + {kind = 'name', value = '.notdef'}, + {kind = 'name', value = '.notdef'}, + {kind = 'name', value = '.notdef'}, + {kind = 'name', value = '.notdef'}, + {kind = 'name', value = '.notdef'}, + {kind = 'name', value = 'space'}, + {kind = 'name', value = 'exclam'}, + {kind = 'name', value = 'quotedbl'}, + {kind = 'name', value = 'numbersign'}, + {kind = 'name', value = 'dollar'}, + {kind = 'name', value = 'percent'}, + {kind = 'name', value = 'ampersand'}, + {kind = 'name', value = 'quoteright'}, + {kind = 'name', value = 'parenleft'}, + {kind = 'name', value = 'parenright'}, + {kind = 'name', value = 'asterisk'}, + {kind = 'name', value = 'plus'}, + {kind = 'name', value = 'comma'}, + {kind = 'name', value = 'minus'}, + {kind = 'name', value = 'period'}, + {kind = 'name', value = 'slash'}, + {kind = 'name', value = 'zero'}, + {kind = 'name', value = 'one'}, + {kind = 'name', value = 'two'}, + {kind = 'name', value = 'three'}, + {kind = 'name', value = 'four'}, + {kind = 'name', value = 'five'}, + {kind = 'name', value = 'six'}, + {kind = 'name', value = 'seven'}, + {kind = 'name', value = 'eight'}, + {kind = 'name', value = 'nine'}, + {kind = 'name', value = 'colon'}, + {kind = 'name', value = 'semicolon'}, + {kind = 'name', value = 'less'}, + {kind = 'name', value = 'equal'}, + {kind = 'name', value = 'greater'}, + {kind = 'name', value = 'question'}, + {kind = 'name', value = 'at'}, + {kind = 'name', value = 'A'}, + {kind = 'name', value = 'B'}, + {kind = 'name', value = 'C'}, + {kind = 'name', value = 'D'}, + {kind = 'name', value = 'E'}, + {kind = 'name', value = 'F'}, + {kind = 'name', value = 'G'}, + {kind = 'name', value = 'H'}, + {kind = 'name', value = 'I'}, + {kind = 'name', value = 'J'}, + {kind = 'name', value = 'K'}, + {kind = 'name', value = 'L'}, + {kind = 'name', value = 'M'}, + {kind = 'name', value = 'N'}, + {kind = 'name', value = 'O'}, + {kind = 'name', value = 'P'}, + {kind = 'name', value = 'Q'}, + {kind = 'name', value = 'R'}, + {kind = 'name', value = 'S'}, + {kind = 'name', value = 'T'}, + {kind = 'name', value = 'U'}, + {kind = 'name', value = 'V'}, + {kind = 'name', value = 'W'}, + {kind = 'name', value = 'X'}, + {kind = 'name', value = 'Y'}, + {kind = 'name', value = 'Z'}, + {kind = 'name', value = 'bracketleft'}, + {kind = 'name', value = 'backslash'}, + {kind = 'name', value = 'bracketright'}, + {kind = 'name', value = 'asciicircum'}, + {kind = 'name', value = 'underscore'}, + {kind = 'name', value = 'quoteleft'}, + {kind = 'name', value = 'a'}, + {kind = 'name', value = 'b'}, + {kind = 'name', value = 'c'}, + {kind = 'name', value = 'd'}, + {kind = 'name', value = 'e'}, + {kind = 'name', value = 'f'}, + {kind = 'name', value = 'g'}, + {kind = 'name', value = 'h'}, + {kind = 'name', value = 'i'}, + {kind = 'name', value = 'j'}, + {kind = 'name', value = 'k'}, + {kind = 'name', value = 'l'}, + {kind = 'name', value = 'm'}, + {kind = 'name', value = 'n'}, + {kind = 'name', value = 'o'}, + {kind = 'name', value = 'p'}, + {kind = 'name', value = 'q'}, + {kind = 'name', value = 'r'}, + {kind = 'name', value = 's'}, + {kind = 'name', value = 't'}, + {kind = 'name', value = 'u'}, + {kind = 'name', value = 'v'}, + {kind = 'name', value = 'w'}, + {kind = 'name', value = 'x'}, + {kind = 'name', value = 'y'}, + {kind = 'name', value = 'z'}, + {kind = 'name', value = 'braceleft'}, + {kind = 'name', value = 'bar'}, + {kind = 'name', value = 'braceright'}, + {kind = 'name', value = 'asciitilde'}, + {kind = 'name', value = '.notdef'}, + {kind = 'name', value = '.notdef'}, + {kind = 'name', value = '.notdef'}, + {kind = 'name', value = '.notdef'}, + {kind = 'name', value = '.notdef'}, + {kind = 'name', value = '.notdef'}, + {kind = 'name', value = '.notdef'}, + {kind = 'name', value = '.notdef'}, + {kind = 'name', value = '.notdef'}, + {kind = 'name', value = '.notdef'}, + {kind = 'name', value = '.notdef'}, + {kind = 'name', value = '.notdef'}, + {kind = 'name', value = '.notdef'}, + {kind = 'name', value = '.notdef'}, + {kind = 'name', value = '.notdef'}, + {kind = 'name', value = '.notdef'}, + {kind = 'name', value = '.notdef'}, + {kind = 'name', value = 'dotlessi'}, + {kind = 'name', value = 'grave'}, + {kind = 'name', value = 'acute'}, + {kind = 'name', value = 'circumflex'}, + {kind = 'name', value = 'tilde'}, + {kind = 'name', value = 'macron'}, + {kind = 'name', value = 'breve'}, + {kind = 'name', value = 'dotaccent'}, + {kind = 'name', value = 'dieresis'}, + {kind = 'name', value = '.notdef'}, + {kind = 'name', value = 'ring'}, + {kind = 'name', value = 'cedilla'}, + {kind = 'name', value = '.notdef'}, + {kind = 'name', value = 'hungarumlaut'}, + {kind = 'name', value = 'ogonek'}, + {kind = 'name', value = 'caron'}, + {kind = 'name', value = 'space'}, + {kind = 'name', value = 'exclamdown'}, + {kind = 'name', value = 'cent'}, + {kind = 'name', value = 'sterling'}, + {kind = 'name', value = 'currency'}, + {kind = 'name', value = 'yen'}, + {kind = 'name', value = 'brokenbar'}, + {kind = 'name', value = 'section'}, + {kind = 'name', value = 'dieresis'}, + {kind = 'name', value = 'copyright'}, + {kind = 'name', value = 'ordfeminine'}, + {kind = 'name', value = 'guillemotleft'}, + {kind = 'name', value = 'logicalnot'}, + {kind = 'name', value = 'hyphen'}, + {kind = 'name', value = 'registered'}, + {kind = 'name', value = 'macron'}, + {kind = 'name', value = 'degree'}, + {kind = 'name', value = 'plusminus'}, + {kind = 'name', value = 'twosuperior'}, + {kind = 'name', value = 'threesuperior'}, + {kind = 'name', value = 'acute'}, + {kind = 'name', value = 'mu'}, + {kind = 'name', value = 'paragraph'}, + {kind = 'name', value = 'periodcentered'}, + {kind = 'name', value = 'cedilla'}, + {kind = 'name', value = 'onesuperior'}, + {kind = 'name', value = 'ordmasculine'}, + {kind = 'name', value = 'guillemotright'}, + {kind = 'name', value = 'onequarter'}, + {kind = 'name', value = 'onehalf'}, + {kind = 'name', value = 'threequarters'}, + {kind = 'name', value = 'questiondown'}, + {kind = 'name', value = 'Agrave'}, + {kind = 'name', value = 'Aacute'}, + {kind = 'name', value = 'Acircumflex'}, + {kind = 'name', value = 'Atilde'}, + {kind = 'name', value = 'Adieresis'}, + {kind = 'name', value = 'Aring'}, + {kind = 'name', value = 'AE'}, + {kind = 'name', value = 'Ccedilla'}, + {kind = 'name', value = 'Egrave'}, + {kind = 'name', value = 'Eacute'}, + {kind = 'name', value = 'Ecircumflex'}, + {kind = 'name', value = 'Edieresis'}, + {kind = 'name', value = 'Igrave'}, + {kind = 'name', value = 'Iacute'}, + {kind = 'name', value = 'Icircumflex'}, + {kind = 'name', value = 'Idieresis'}, + {kind = 'name', value = 'Eth'}, + {kind = 'name', value = 'Ntilde'}, + {kind = 'name', value = 'Ograve'}, + {kind = 'name', value = 'Oacute'}, + {kind = 'name', value = 'Ocircumflex'}, + {kind = 'name', value = 'Otilde'}, + {kind = 'name', value = 'Odieresis'}, + {kind = 'name', value = 'multiply'}, + {kind = 'name', value = 'Oslash'}, + {kind = 'name', value = 'Ugrave'}, + {kind = 'name', value = 'Uacute'}, + {kind = 'name', value = 'Ucircumflex'}, + {kind = 'name', value = 'Udieresis'}, + {kind = 'name', value = 'Yacute'}, + {kind = 'name', value = 'Thorn'}, + {kind = 'name', value = 'germandbls'}, + {kind = 'name', value = 'agrave'}, + {kind = 'name', value = 'aacute'}, + {kind = 'name', value = 'acircumflex'}, + {kind = 'name', value = 'atilde'}, + {kind = 'name', value = 'adieresis'}, + {kind = 'name', value = 'aring'}, + {kind = 'name', value = 'ae'}, + {kind = 'name', value = 'ccedilla'}, + {kind = 'name', value = 'egrave'}, + {kind = 'name', value = 'eacute'}, + {kind = 'name', value = 'ecircumflex'}, + {kind = 'name', value = 'edieresis'}, + {kind = 'name', value = 'igrave'}, + {kind = 'name', value = 'iacute'}, + {kind = 'name', value = 'icircumflex'}, + {kind = 'name', value = 'idieresis'}, + {kind = 'name', value = 'eth'}, + {kind = 'name', value = 'ntilde'}, + {kind = 'name', value = 'ograve'}, + {kind = 'name', value = 'oacute'}, + {kind = 'name', value = 'ocircumflex'}, + {kind = 'name', value = 'otilde'}, + {kind = 'name', value = 'odieresis'}, + {kind = 'name', value = 'divide'}, + {kind = 'name', value = 'oslash'}, + {kind = 'name', value = 'ugrave'}, + {kind = 'name', value = 'uacute'}, + {kind = 'name', value = 'ucircumflex'}, + {kind = 'name', value = 'udieresis'}, + {kind = 'name', value = 'yacute'}, + {kind = 'name', value = 'thorn'}, + {kind = 'name', value = 'ydieresis'}, + }} +}} +systemdict.value.systemdict = systemdict +dictionary_stack = {systemdict, globaldict, userdict} +-- local execution_stack = {} -- Currently not implemented + +-- Quite some stuff is missing here since these aren't implemented yet. Anyway mostly useful for testing. +ResourceCategories.value.Font = {kind = 'dict', value = { + Category = {kind = 'name', value = 'Font'}, + InstanceType = 'dicttype', + DefineResource = systemdict.value.definefont, + FindResource = systemdict.value.findfont, +}} + +ResourceCategories.value.Generic = {kind = 'dict', value = { + Category = {kind = 'name', value = 'Generic'}, + DefineResource = function() + local instance = pop() + local key = pop_key() + execute_tok'.Instances' + local instances = pop_dict() + instances[key] = instance + push(instance) + end, + UndefineResource = function() + local key = pop_key() + execute_tok'.Instances' + local instances = pop_dict() + instances[key] = nil + end, + FindResource = function() + local key = pop_key() + execute_tok'.Instances' + local instances = pop_dict() + local instance = instances[key] + if instance then + push(instance) + return + end + push(key) + ps_error'undefinedresource' + end, + -- ResourceStatus = function() + -- local key = pop_key() + -- execute_tok'.Instances' + -- local instances = pop_dict() + -- local instance = instances[key] + -- if instance then + -- push(instance) + -- return + -- end + -- push(key) + -- ps_error'undefinedresource' + -- end, + -- ResourceForAll = function() + -- local key = pop_key() + -- execute_tok'.Instances' + -- local instances = pop_dict() + -- local instance = instances[key] + -- if instance then + -- push(instance) + -- return + -- end + -- push(key) + -- ps_error'undefinedresource' + -- end, + ['.Instances'] = {kind = 'dict', value = {}}, +}} + +local register_texbox do + local meta = {__gc = function(t) node.direct.free(t.box) end} + local dict = {} + ResourceCategories.value['.TeXBox'] = {kind = 'dict', value = { + Category = {kind = 'name', value = '.TeXBox'}, + DefineResource = function() + push{kind = 'name', value = '.TeXBox'} + ps_error'undefined' + end, + UndefineResource = function() + local key = pop_key() + dict[key] = nil + end, + FindResource = function() + local key = pop_key() + local instance = dict[key] + if instance then + push(instance) + return + end + push(key) + ps_error'undefinedresource' + end, + }} + local id = 0 + function register_texbox(box) + id = id + 1 + box = setmetatable({box = node.direct.todirect(box)}, meta) + local op = function() flush_delayed() vf.push() vf.node(box.box) vf.pop() end + lua_node_lookup[op] = box + dict[id] = op + return id + end +end + +ResourceCategories.value.Category = {kind = 'dict', value = { + Category = {kind = 'name', value = 'Generic'}, + InstanceType = 'dicttype', + DefineResource = function() + local instance = pop() + local key = pop_key() + ResourceCategories.value[key] = instance + push(instance) + end, + UndefineResource = function() + local key = pop_key() + ResourceCategories.value[key] = nil + end, + FindResource = function() + local key = pop_key() + local instance = ResourceCategories.value[key] + if instance then + push(instance) + return + end + push(key) + ps_error'undefinedresource' + end, + -- ResourceStatus = function() + -- local key = pop_key() + -- execute_tok'.Instances' + -- local instances = pop_dict() + -- local instance = instances[key] + -- if instance then + -- push(instance) + -- return + -- end + -- push(key) + -- ps_error'undefinedresource' + -- end, + -- ResourceForAll = function() + -- local key = pop_key() + -- execute_tok'.Instances' + -- local instances = pop_dict() + -- local instance = instances[key] + -- if instance then + -- push(instance) + -- return + -- end + -- push(key) + -- ps_error'undefinedresource' + -- end, +}} + +function execute_tok(tok, suppress_proc) + local ttok = type(tok) + if ttok == 'string' then + return execute_tok(lookup(tok)) + elseif ttok == 'function' then + return tok() + elseif ttok == 'table' and tok.kind == 'executable' then + local vtok = tok.value + ttok = type(vtok) + if suppress_proc and ttok == 'table' and tok.value.kind == 'array' then + return push(tok) + end + if ttok == 'table' then + local kind = vtok.kind + if kind == 'array' then + return execute_ps(vtok.value) + elseif kind == 'string' then + return execute_ps(assert(parse_ps(vtok.value), 'syntaxerror')) + else + error'Unimplemented' + end + elseif ttok == 'number' then + return push(tok) + else + error'Unimplemented' + end + else + return push(tok) + end +end + +function execute_ps(tokens) + for i=1, #tokens do + execute_tok(tokens[i], true) + end +end +local any_object_or_end = any_object * l.Cp() + whitespace^-1 * -1 * l.Cc(nil) + l.Cp() * l.Cc(false) +function execute_string(str, context) + local pos = 1 + while true do + local tok + tok, pos = any_object_or_end:match(str, pos) + if pos then + local success, err = pcall(execute_tok, tok, true) + if not success then + if context and type(err) == 'table' and err.pserror and not err.context then + err.tok = tok + err.context = context + end + error(err) + end + elseif pos == false then + ps_error'syntaxerror' + else + break + end + end +end + +local func = luatexbase.new_luafunction'luaPSTheader' +token.set_lua('luaPSTheader', func, 'protected') +lua.get_functions_table()[func] = function() + local stack_depth = #operand_stack + local filename = token.scan_argument() + local f = io.open(kpse.find_file(filename, 'PostScript header'), 'r') + local src = f:read'a' + f:close() + execute_string(src, filename) + if #operand_stack ~= stack_depth then + error'Unexpected values on operand stack' + end +end + +local func = luatexbase.new_luafunction'showPS' +token.set_lua('showPS', func, 'protected') +lua.get_functions_table()[func] = function() + local command = token.scan_argument(true) + local tokens = parse_ps(command) + execute_ps(tokens) + for i = 1, #operand_stack do + local op = operand_stack[i] + operand_stack[i] = nil + if type(op) == 'table' then + print(op.kind, op.value) + else + print(op) + end + end +end + +local ps_tokens, ps_direct, ps_context, ps_pos_x, ps_pos_y +local fid = font.define{ + name = 'dummy virtual font for PS rendering', + -- type = 'virtual', + characters = { + [0x1F3A8] = { + commands = { + {'lua', function(fid) + local n = node.new('glyph', 256) + n.font = fid + n.char = 1 + assert(not ps_pos_x) + ps_pos_x, ps_pos_y = pdf.getpos() + n.xoffset = -ps_pos_x + n.yoffset = -ps_pos_y + n = node.hpack(n) + vf.node(node.direct.todirect(n)) + node.free(n) + end} + } + }, + [1] = { + commands = { + {'lua', function() + local tokens, direct = assert(ps_tokens), ps_direct + ps_tokens = nil + local x, y = pdf.getpos() + local height = #operand_stack + operand_stack[height + 1], operand_stack[height + 2] = ps_pos_x/65781.76, ps_pos_y/65781.76 + ps_pos_x, ps_pos_y = nil + if direct then + systemdict.value.moveto() + else + systemdict.value.gsave() + systemdict.value.translate() + end + local success, err = pcall(execute_string, tokens, ps_context) + if not success then + if type(err) == 'table' and err.pserror then + tex.error(string.format('luapstricks: %q error occured while executing PS code from %q', err.pserror, err.context), { + string.format('The error occured while executing the PS command %q.\n%s', err.tok, err.trace) + }) + else + error(err, 0) + end + end + flush_delayed() + if not direct then + systemdict.value.grestore() + local new_height = #operand_stack + assert(new_height >= height) + for k = height + 1, new_height do + operand_stack[k] = nil + end + end + end} + } + }, + }, +} + +local modes = tex.getmodevalues() +local func = luatexbase.new_luafunction'luaPST' +token.set_lua('luaPST', func, 'protected') +lua.get_functions_table()[func] = function() + local context = string.format('%s:%i', status.filename, status.linenumber) + local direct = token.scan_keyword'direct' + local tokens = token.scan_argument(true) + local n = node.new('whatsit', 'late_lua') + function n.data() + assert(not ps_tokens) + ps_tokens = tokens + ps_direct = direct + ps_context = context + end + local nn = node.new('glyph') + nn.subtype = 256 + nn.font, nn.char = fid, 0x1F3A8 + n.next = nn + local modename = modes[math.abs(tex.nest.top.mode)] + if 'horizontal' ~= modename then + n = node.hpack(n) -- Glyphs can only appear in hmode + if 'math' == modename then + local d = node.new'disc' + d.penalty = 10000 + d.replace = n + n = d + end + end + if tex.nest.ptr == 0 then + -- Main vertical list. Here we might appear before the page starts properly + -- and should not freeze page specifications. Since we don't have any outer dimensions, + -- we can ensure this by sneaking our node into the current page list whithout going though + -- build_page. + tex.triggerbuildpage() -- First ensure that everything else is contributed properly. + tex.lists.page_head = node.insert_after(tex.lists.page_head, nil, n) + else + node.write(n) + end +end + +do + func = luatexbase.new_luafunction'luaPSTcolor' + token.set_lua('luaPSTcolor', func) + local ps_rgb = 'rgb ' * l.C(l.P(1)^0) * l.Cc' setrgbcolor' * l.Cc'rgb ' + local ps_cmyk = 'cmyk ' * l.C(l.P(1)^0) * l.Cc' setcmykcolor' * l.Cc'cmyk ' + local ps_gray = 'gray ' * l.C(l.P(1)^0) * l.Cc' setgray' * l.Cc'gray ' + local pscolor = ps_rgb + ps_gray + ps_gray + local pdf_rgb = l.Cmt(l.C(number * whitespace * number * whitespace * number / 0) * whitespace * 'rg' + * whitespace * l.C(number * whitespace * number * whitespace * number / 0) * whitespace * 'RG' * -1, function(s, p, a, b) + if a == b then + return true, a, ' setrgbcolor', 'rgb ' + else + return false + end + end) + local pdf_cmyk = l.Cmt(l.C(number * whitespace * number * whitespace * number * whitespace * number / 0) * whitespace * 'k' + * whitespace * l.C(number * whitespace * number * whitespace * number * whitespace * number / 0) * whitespace * 'K' * -1, function(s, p, a, b) + if a == b then + return true, a, ' setcmykcolor', 'cmyk ' + else + return false + end + end) + local pdf_gray = l.Cmt(l.C(number / 0) * whitespace * 'g' + * whitespace * l.C(number / 0) * whitespace * 'G' * -1, function(s, p, a, b) + if a == b then + return true, a, ' setgray', 'gray ' + else + return false + end + end) + local pdf_other = l.Cs(l.Cc'(' * l.P(1)^0 * l.Cc')') * l.C' setpdfcolor' * l.C'gray ' + local pdfcolor = pdf_rgb + pdf_cmyk + pdf_gray + pdf_other + local anycolor = pscolor + pdfcolor + lua.get_functions_table()[func] = function() + local dvips_format = token.scan_keyword'dvips' + local result, suffix, prefix = anycolor:match(token.scan_argument()) + tex.sprint(-2, dvips_format and prefix .. result or result .. suffix) + end +end + +func = luatexbase.new_luafunction'luaPSTbox' +token.set_lua('luaPSTbox', func) +lua.get_functions_table()[func] = function() + local box = register_texbox(token.scan_list()) + tex.sprint(-2, tostring(box)) +end diff --git a/macros/latex/contrib/zref-check/CHANGELOG.md b/macros/latex/contrib/zref-check/CHANGELOG.md index 130aaf8ad7..7ce9594a63 100644 --- a/macros/latex/contrib/zref-check/CHANGELOG.md +++ b/macros/latex/contrib/zref-check/CHANGELOG.md @@ -1,6 +1,19 @@ # Changelog -## [Unreleased](https://github.com/gusbrs/zref-check/compare/v0.2.0...HEAD) +## [Unreleased](https://github.com/gusbrs/zref-check/compare/v0.2.1...HEAD) + +## [v0.2.1](https://github.com/gusbrs/zref-check/compare/v0.2.0...v0.2.1) (2021-09-16) + +### Changed +- Use `\msg_line_context:` instead of `\msg_line_number:` for messages. +- Use more efficient way to set checks as option keys in `\zcheck`. +- Spare setting end label in `\zcheck` for checks which don't need it. +- Separate `zref` property lists for checks and targets, so that only the + minimum set of required properties for each are used. + +### Added +- New `pagegap` check. +- Provide infrastructure for integration with `zref-clever`. ## [v0.2.0](https://github.com/gusbrs/zref-check/compare/v0.1.0...v0.2.0) (2021-08-17) diff --git a/macros/latex/contrib/zref-check/zref-check-code.pdf b/macros/latex/contrib/zref-check/zref-check-code.pdf index b412a1c5be..f2af1c0794 100644 Binary files a/macros/latex/contrib/zref-check/zref-check-code.pdf and b/macros/latex/contrib/zref-check/zref-check-code.pdf differ diff --git a/macros/latex/contrib/zref-check/zref-check.dtx b/macros/latex/contrib/zref-check/zref-check.dtx index 29c48befbd..584cf1b316 100644 --- a/macros/latex/contrib/zref-check/zref-check.dtx +++ b/macros/latex/contrib/zref-check/zref-check.dtx @@ -231,6 +231,10 @@ % \item[nextpage] \meta{label} occurs on the next page relative to % \cs{zcheck}. % +% \item[pagegap] There is a page gap between \meta{label} and \cs{zcheck}, in +% other words, \meta{label} does \emph{not} occur on \opt{thispage}, +% \opt{prevpage} or \opt{nextpage}. +% % \item[facing] On a \texttt{twoside} document, both \meta{label} and % \cs{zcheck} fall onto a double spread, each on one of the two facing % pages. @@ -512,6 +516,16 @@ % may be needed for these checks to work as expected. % % +% +% \section{Change history} +% +% A change log with relevant changes for each version, eventual upgrade +% instructions, and upcoming changes, is maintained in the package's +% repository, at +% \url{https://github.com/gusbrs/zref-check/blob/main/CHANGELOG.md}. +% +% +% % \end{documentation} % % @@ -549,7 +563,7 @@ % % Identify the package. % \begin{macrocode} -\ProvidesExplPackage {zref-check} {2021-08-17} {0.2.0} +\ProvidesExplPackage {zref-check} {2021-09-16} {0.2.1} {Flexible cross-references with contextual checks based on zref} % \end{macrocode} % @@ -600,14 +614,29 @@ % \end{macrocode} % % -% This is the list of properties to be used by \pkg{zref-check}, that is, the -% list of properties the references and targets store. This is the minimum -% set required, more properties may be added according to options. +% These are the lists of properties to be used by \pkg{zref-check}, that is, +% the list of properties the references and targets store. This is the +% minimum set required, more properties may be added according to options. % \begin{macrocode} -\zref@newlist { zrefcheck } -\zref@addprops { zrefcheck } +\zref@newlist { zrefcheck-check } +\zref@addprops { zrefcheck-check } + { + page , % for messages + abspage , + zc@abschap , + zc@abssec + } +\zref@newlist { zrefcheck-target } +\zref@addprops { zrefcheck-target } + { + page , % so that \zpageref can refer to it + abspage , + zc@abschap , + zc@abssec + } +\zref@newlist { zrefcheck-end } +\zref@addprops { zrefcheck-end } { - page , abspage , zc@abschap , zc@abssec @@ -621,7 +650,7 @@ % % \begin{macro}{\@@_message:nnnn, \@@_message:nnnx} % \begin{macrocode} -\cs_new:Npn \@@_message:nnnn #1#2#3#4 +\cs_new_protected:Npn \@@_message:nnnn #1#2#3#4 { \use:c { msg_ \l_@@_msglevel_tl :nnnnn } { zref-check } {#1} {#2} {#3} {#4} @@ -632,29 +661,20 @@ % % \begin{macrocode} \msg_new:nnn { zref-check } { check-failed } - { - Failed~check~'#1'~for~label~'#2' \iow_newline: - on~page~#3~on~input~line~\msg_line_number:. - } + { Failed~check~'#1'~for~label~'#2'~on~page~#3~\msg_line_context:. } \msg_new:nnn { zref-check } { double-check } - { - Double-check~'#1'~for~label~'#2' \iow_newline: - on~page~#3~on~input~line~\msg_line_number:. - } + { Double-check~'#1'~for~label~'#2'~on~page~#3~\msg_line_context:. } % \end{macrocode} % % \begin{macrocode} \msg_new:nnn { zref-check } { check-missing } - { Check~'#1'~not~defined~on~input~line~\msg_line_number:. } + { Check~'#1'~not~defined~\msg_line_context:. } \msg_new:nnn { zref-check } { property-undefined } - { Property~'#1'~not~defined~on~input~line~\msg_line_number:. } + { Property~'#1'~not~defined~\msg_line_context:. } \msg_new:nnn { zref-check } { property-not-in-label } - { Label~'#1'~has~no~property~'#2'~on~input~line~\msg_line_number:. } + { Label~'#1'~has~no~property~'#2'~\msg_line_context:. } \msg_new:nnn { zref-check } { property-not-integer } - { - Property~'#1'~for~label~'#2'~not~an~integer \iow_newline: - on~input~line~\msg_line_number:. - } + { Property~'#1'~for~label~'#2'~not~an~integer~\msg_line_context:. } % \end{macrocode} % % \begin{macrocode} @@ -671,14 +691,11 @@ Use~option~'msglevel'~instead. } \msg_new:nnn { zref-check } { option-preamble-only } - { - Option~'#1'~only~available~in~the~preamble \iow_newline: - on~input~line~\msg_line_number:. - } + { Option~'#1'~only~available~in~the~preamble~\msg_line_context:. } \msg_new:nnn { zref-check } { closerange-not-positive-integer } { - Option~'closerange'~not~a~positive~integer \iow_newline: - on~input~line~\msg_line_number:.~Using~default~value. + Option~'closerange'~not~a~positive~integer~\msg_line_context:.~ + Using~default~value. } \msg_new:nnn { zref-check } { labelcmd-undefined } { @@ -781,7 +798,7 @@ \bool_if:NT \l_@@_use_hyperref_bool { \RequirePackage { zref-hyperref } - \zref@addprop { zrefcheck } { anchor } + \zref@addprop { zrefcheck-target } { anchor } } } { @@ -930,8 +947,8 @@ % and \texttt{zcregion}. It may be redefined at \texttt{begindocument} % according to option \opt{labelcmd}. % \begin{macrocode} -\cs_new:Npn \@@_target_label:n #1 - { \zref@labelbylist {#1} { zrefcheck } } +\cs_new_protected:Npn \@@_target_label:n #1 + { \zref@labelbylist {#1} { zrefcheck-target } } % \end{macrocode} % \end{macro} % @@ -944,7 +961,7 @@ { \tl_clear:N \l_@@_target_label_tl } \cs_if_exist:cTF { \l_@@_target_label_tl } { - \cs_set:Npx \@@_target_label:n #1 + \cs_set_protected:Npx \@@_target_label:n #1 { \exp_not:o { \cs:w \l_@@_target_label_tl \cs_end: } @@ -952,7 +969,7 @@ } } { - \exp_args:NnnV \msg_warning:nnn { zref-check } + \exp_args:Nnno \msg_warning:nnn { zref-check } { labelcmd-undefined } { \l_@@_target_label_tl } } } @@ -1214,9 +1231,11 @@ % property values as arguments in the checks, however we use here a number % of non-expandable operations. Hence, we receive a local \texttt{tl/int} % variable as third argument and set that, so that it is available (and -% expandable) at the place of use. For this reason, we do not group here, -% because we are passing a local variable around, but it is expected this -% function will be called within a group. +% expandable) at the place of use, and also make these functions `protected' +% (see egreg's \url{https://tex.stackexchange.com/a/572903}: ``a function +% that performs assignments should be \texttt{protected}''). For this +% reason, we do not group here, because we are passing a local variable +% around, but it is expected this function will be called within a group. % % We're returning \cs{c_empty_tl} in case of failure to find the intended % property value (explicitly in \cs{zref@extractdefault}, but that is also @@ -1226,7 +1245,7 @@ % \cs{zrefcheck_get_astl:nnn} \Arg{label} \Arg{prop} \Arg{tl var} % \end{syntax} % \begin{macrocode} -\cs_new:Npn \zrefcheck_get_astl:nnn #1#2#3 +\cs_new_protected:Npn \zrefcheck_get_astl:nnn #1#2#3 { \tl_clear:N #3 \tl_if_eq:nnTF {#2} { lblseq } @@ -1308,7 +1327,7 @@ % \cs{zrefcheck_get_asint:nnn} \Arg{label} \Arg{prop} \Arg{int var} % \end{syntax} % \begin{macrocode} -\cs_new:Npn \zrefcheck_get_asint:nnn #1#2#3 +\cs_new_protected:Npn \zrefcheck_get_asint:nnn #1#2#3 { \zrefcheck_get_astl:nnn {#1} {#2} { \l_@@_propval_tl } \@@_is_integer:nTF { \l_@@_propval_tl } @@ -1357,8 +1376,7 @@ % \end{syntax} % % \begin{macrocode} -\NewDocumentCommand \zcheck - { s O { } > { \SplitList { , } } m m } +\NewDocumentCommand \zcheck { s O { } m m } { \zref@wrapper@babel \@@_zcheck:nnnn {#3} {#1} {#2} {#4} } % \end{macrocode} % \end{macro} @@ -1366,17 +1384,17 @@ % % \begin{variable} % { +% \l_@@_zcheck_labels_seq , % \g_@@_id_int , % \l_@@_checkbeg_tl , -% \l_@@_checkend_tl , % \l_@@_link_label_tl , % \l_@@_link_anchor_tl , % \l_@@_link_star_bool % } % \begin{macrocode} +\seq_new:N \l_@@_zcheck_labels_seq \int_new:N \g_@@_id_int \tl_new:N \l_@@_checkbeg_tl -\tl_new:N \l_@@_checkend_tl \tl_new:N \l_@@_link_label_tl \tl_new:N \l_@@_link_anchor_tl \bool_new:N \l_@@_link_star_bool @@ -1395,36 +1413,31 @@ % \end{syntax} % % \begin{macrocode} -\cs_new:Npn \@@_zcheck:nnnn #1#2#3#4 +\cs_new_protected:Npn \@@_zcheck:nnnn #1#2#3#4 { \group_begin: % \end{macrocode} -% Set checks keys. -% \begin{macrocode} - \@@_set_checks_keys: -% \end{macrocode} % Process local options and checks. % \begin{macrocode} - \keys_set:nn { zref-check } {#3} + \keys_set:nn { zref-check / zcheck } {#3} + \seq_set_from_clist:Nn \l_@@_zcheck_labels_seq {#1} % \end{macrocode} -% Names of the labels for this zrefcheck call. +% Names of the labels for this zcheck call. % \begin{macrocode} \int_gincr:N \g_@@_id_int \tl_set:Nx \l_@@_checkbeg_tl { \@@_check_lblfmt:n { \g_@@_id_int } } - \tl_set:Nx \l_@@_checkend_tl - { \@@_end_lblfmt:n { \l_@@_checkbeg_tl } } % \end{macrocode} % Set checkbeg label. % \begin{macrocode} - \zref@labelbylist { \l_@@_checkbeg_tl } { zrefcheck } + \zref@labelbylist { \l_@@_checkbeg_tl } { zrefcheck-check } % \end{macrocode} % Typeset \marg{text}, with hyperlink when appropriate. Even though the first % argument can receive a list of labels, there is no meaningful way to set % links to multiple targets. Hence, only the first one is considered for % hyperlinking. % \begin{macrocode} - \tl_set:Nn \l_@@_link_label_tl { \tl_head:n {#1} } + \seq_get:NN \l_@@_zcheck_labels_seq \l_@@_link_label_tl \bool_set:Nn \l_@@_link_star_bool {#2} \zref@ifrefundefined { \l_@@_link_label_tl } % \end{macrocode} @@ -1448,16 +1461,21 @@ % \end{macrocode} % Set checkend label. % \begin{macrocode} - \zref@labelbylist { \l_@@_checkend_tl } { zrefcheck } + \bool_if:NT \l_@@_zcheck_end_label_bool + { + \zref@labelbylist + { \@@_end_lblfmt:n { \l_@@_checkbeg_tl } } + { zrefcheck-end } + } % \end{macrocode} % Check if \meta{labels} are defined. % \begin{macrocode} - \tl_map_function:nN {#1} \zref@refused + \seq_map_function:NN \l_@@_zcheck_labels_seq \zref@refused % \end{macrocode} % Run the checks. % \begin{macrocode} - \@@_run_checks:nnv - { \l_@@_zcheck_checks_seq } {#1} { l_@@_checkbeg_tl } + \@@_run_checks:nnx { \l_@@_zcheck_checks_seq } + { \l_@@_zcheck_labels_seq } { \l_@@_checkbeg_tl } \group_end: } % \end{macrocode} @@ -1483,7 +1501,7 @@ \zref@wrapper@babel \@@_target_label:n {#1} #2 \zref@wrapper@babel - \zref@labelbylist { \@@_end_lblfmt:n {#1} } { zrefcheck } + \zref@labelbylist { \@@_end_lblfmt:n {#1} } { zrefcheck-end } \group_end: } % \end{macrocode} @@ -1503,7 +1521,7 @@ } { \zref@wrapper@babel - \zref@labelbylist { \@@_end_lblfmt:n {#1} } { zrefcheck } + \zref@labelbylist { \@@_end_lblfmt:n {#1} } { zrefcheck-end } } % \end{macrocode} % \end{macro} @@ -1516,7 +1534,7 @@ % % First, a conditional function defined with: % -% \cs{prg_new_conditional:Npnn} \cs{@@_check_\meta{check}:nn} |#1#2 { F }| +% \cs{prg_new_protected_conditional:Npnn} \cs{@@_check_\meta{check}:nn} |#1#2 { F }| % % \noindent where \meta{check} is the name of the check, the first argument is % the \Arg{label} and the second the \Arg{reference}. The existence of the @@ -1545,145 +1563,122 @@ % \cs{zref@addprop} and friends, as usual. % % Third, the check must be registered as a key which gets setup in -% \cs{zcheck} by \cs{@@_set_checks_keys:}. +% \cs{zcheck} by the \texttt{ zref-check / zcheck } key set. +% +% Fourth, if the check requires only a single label to work, it should be +% registered in \cs{c_@@_single_label_checks_seq}. +% +% +% \subsection{Single label checks} +% +% +% Some checks do not require an ``end label'' in \cs{zcheck}, notably the +% sectioning ones, which don't rely on page boundaries. Hence, in case +% \cs{zcheck} only calls checks in this set, we can spare the setting of the +% end label. +% +% \begin{variable}{\c_@@_single_label_checks_seq} +% \begin{macrocode} +\seq_new:N \c_@@_single_label_checks_seq +\seq_set_from_clist:Nn \c_@@_single_label_checks_seq + { + thischap , + prevchap , + nextchap , + chapsbefore , + chapsafter , + thissec , + prevsec , + nextsec , + secsbefore , + secsafter , + } +% \end{macrocode} +% \end{variable} +% % % % \subsection{Setup} % -% \begin{variable}{\l_@@_zcheck_checks_seq} +% \begin{variable}{\l_@@_zcheck_checks_seq,\l_@@_end_label_required_bool} % \begin{macrocode} \seq_new:N \l_@@_zcheck_checks_seq +\bool_new:N \l_@@_zcheck_end_label_bool % \end{macrocode} % \end{variable} % -% \begin{macro}{\@@_set_checks_keys:} +% +% First, we inherit all the main options into the keys of \texttt{zref-check / +% zcheck}. % \begin{macrocode} -\cs_new:Npn \@@_set_checks_keys: +\keys_define:nn { } { zref-check / zcheck .inherit:n = zref-check } +% \end{macrocode} +% +% Then we add the checks to it. +% \begin{macrocode} +\clist_map_inline:nn + { + thispage , + prevpage , + nextpage , + facing , + pagegap , + above , + below , + pagesbefore , + ppbefore , + pagesafter , + ppafter , + before , + after , + thischap , + prevchap , + nextchap , + chapsbefore , + chapsafter , + thissec , + prevsec , + nextsec , + secsbefore , + secsafter , + close , + far , + } { - \keys_define:nn { zref-check } + \keys_define:nn { zref-check / zcheck } { - thispage .code:n = - { \seq_put_right:Nn \l_@@_zcheck_checks_seq { thispage } } , - thispage .value_forbidden:n = true , - - prevpage .code:n = - { \seq_put_right:Nn \l_@@_zcheck_checks_seq { prevpage } } , - prevpage .value_forbidden:n = true , - - nextpage .code:n = - { \seq_put_right:Nn \l_@@_zcheck_checks_seq { nextpage } } , - nextpage .value_forbidden:n = true , - - facing .code:n = - { \seq_put_right:Nn \l_@@_zcheck_checks_seq { facing } } , - facing .value_forbidden:n = true , - - above .code:n = - { \seq_put_right:Nn \l_@@_zcheck_checks_seq { above } } , - above .value_forbidden:n = true , - - below .code:n = - { \seq_put_right:Nn \l_@@_zcheck_checks_seq { below } } , - below .value_forbidden:n = true , - - pagesbefore .code:n = - { \seq_put_right:Nn \l_@@_zcheck_checks_seq { pagesbefore } } , - pagesbefore .value_forbidden:n = true , - - ppbefore .code:n = - { \seq_put_right:Nn \l_@@_zcheck_checks_seq { ppbefore } } , - ppbefore .value_forbidden:n = true , - - pagesafter .code:n = - { \seq_put_right:Nn \l_@@_zcheck_checks_seq { pagesafter } } , - pagesafter .value_forbidden:n = true , - - ppafter .code:n = - { \seq_put_right:Nn \l_@@_zcheck_checks_seq { ppafter } } , - ppafter .value_forbidden:n = true , - - before .code:n = - { \seq_put_right:Nn \l_@@_zcheck_checks_seq { before } } , - before .value_forbidden:n = true , - - after .code:n = - { \seq_put_right:Nn \l_@@_zcheck_checks_seq { after } } , - after .value_forbidden:n = true , - - thischap .code:n = - { \seq_put_right:Nn \l_@@_zcheck_checks_seq { thischap } } , - thischap .value_forbidden:n = true , - - prevchap .code:n = - { \seq_put_right:Nn \l_@@_zcheck_checks_seq { prevchap } } , - prevchap .value_forbidden:n = true , - - nextchap .code:n = - { \seq_put_right:Nn \l_@@_zcheck_checks_seq { nextchap } } , - nextchap .value_forbidden:n = true , - - chapsbefore .code:n = - { \seq_put_right:Nn \l_@@_zcheck_checks_seq { chapsbefore } } , - chapsbefore .value_forbidden:n = true , - - chapsafter .code:n = - { \seq_put_right:Nn \l_@@_zcheck_checks_seq { chapsafter } } , - chapsafter .value_forbidden:n = true , - - thissec .code:n = - { \seq_put_right:Nn \l_@@_zcheck_checks_seq { thissec } } , - thissec .value_forbidden:n = true , - - prevsec .code:n = - { \seq_put_right:Nn \l_@@_zcheck_checks_seq { prevsec } } , - prevsec .value_forbidden:n = true , - - nextsec .code:n = - { \seq_put_right:Nn \l_@@_zcheck_checks_seq { nextsec } } , - nextsec .value_forbidden:n = true , - - secsbefore .code:n = - { \seq_put_right:Nn \l_@@_zcheck_checks_seq { secsbefore } } , - secsbefore .value_forbidden:n = true , - - secsafter .code:n = - { \seq_put_right:Nn \l_@@_zcheck_checks_seq { secsafter } } , - secsafter .value_forbidden:n = true , - - close .code:n = - { \seq_put_right:Nn \l_@@_zcheck_checks_seq { close } } , - close .value_forbidden:n = true , - - far .code:n = - { \seq_put_right:Nn \l_@@_zcheck_checks_seq { far } } , - far .value_forbidden:n = true , - } + #1 .code:n = + { + \seq_put_right:Nn \l_@@_zcheck_checks_seq {#1} + \seq_if_in:NnF \c_@@_single_label_checks_seq {#1} + { \bool_set_true:N \l_@@_zcheck_end_label_bool } + } , + #1 .value_forbidden:n = true , + } } % \end{macrocode} -% \end{macro} -% % % % % \subsection{Running} % -% \begin{macro}{\@@_run_checks:nnn, \@@_run_checks:nnv} +% \begin{macro}{\@@_run_checks:nnn} % \begin{syntax} % \cs{@@_run_checks:nnn} \Arg{checks} \Arg{labels} \Arg{reference} % \end{syntax} % \meta{checks} are expected to be received as a sequence variable. % \begin{macrocode} -\cs_new:Npn \@@_run_checks:nnn #1#2#3 +\cs_new_protected:Npn \@@_run_checks:nnn #1#2#3 { \group_begin: - \tl_map_inline:nn {#2} + \seq_map_inline:Nn #2 { \seq_map_inline:Nn #1 { \@@_do_check:nnn {####1} {##1} {#3} } } \group_end: } -\cs_generate_variant:Nn \@@_run_checks:nnn { nnv } +\cs_generate_variant:Nn \@@_run_checks:nnn { nnx } % \end{macrocode} % \end{macro} % @@ -1714,7 +1709,7 @@ % \cs{@@_do_check:nnn} \Arg{check} \Arg{label beg} \Arg{reference beg} % \end{syntax} % \begin{macrocode} -\cs_new:Npn \@@_do_check:nnn #1#2#3 +\cs_new_protected:Npn \@@_do_check:nnn #1#2#3 { \group_begin: % \end{macrocode} @@ -1732,37 +1727,45 @@ \bool_set_false:N \l_@@_onpage_bool \cs_if_exist:cTF { @@_check_ #1 :nnF } { -% \end{macrocode} -% ``label beg'' vs ``reference beg''. -% \begin{macrocode} + % ``label beg'' vs ``reference beg''. \use:c { @@_check_ #1 :nnF } {#2} {#3} { \bool_set_false:N \l_@@_passedcheck_bool } -% \end{macrocode} -% ``label beg'' vs ``reference end''. -% \begin{macrocode} - \exp_args:Nnno \use:c { @@_check_ #1 :nnF } - {#2} { \@@_end_lblfmt:n {#3} } - { \bool_set_false:N \l_@@_passedcheck_bool } -% \end{macrocode} -% ``label end'' \emph{may} have been created by the target commands. -% \begin{macrocode} - \zref@ifrefundefined { \@@_end_lblfmt:n {#2} } - {} + % ``reference end'' \emph{may} exist or not depending on the + % checks. + \zref@ifrefundefined { \@@_end_lblfmt:n {#3} } { -% \end{macrocode} -% ``label end'' vs ``reference beg''. -% \begin{macrocode} - \exp_args:Nno \use:c { @@_check_ #1 :nnF } - { \@@_end_lblfmt:n {#2} } {#3} - { \bool_set_false:N \l_@@_passedcheck_bool } -% \end{macrocode} -% ``label end'' vs ``reference end''. -% \begin{macrocode} - \exp_args:Nnoo \use:c { @@_check_ #1 :nnF } - { \@@_end_lblfmt:n {#2} } - { \@@_end_lblfmt:n {#3} } + % ``label end'' \emph{may} have been created by the + % target commands. + \zref@ifrefundefined { \@@_end_lblfmt:n {#2} } + {} + { + % ``label end'' vs ``reference beg''. + \exp_args:Nno \use:c { @@_check_ #1 :nnF } + { \@@_end_lblfmt:n {#2} } {#3} + { \bool_set_false:N \l_@@_passedcheck_bool } + } + } + { + % ``label beg'' vs ``reference end''. + \exp_args:Nnno \use:c { @@_check_ #1 :nnF } + {#2} { \@@_end_lblfmt:n {#3} } { \bool_set_false:N \l_@@_passedcheck_bool } + % ``label end'' \emph{may} have been created by the + % target commands. + \zref@ifrefundefined { \@@_end_lblfmt:n {#2} } + {} + { + % ``label end'' vs ``reference beg''. + \exp_args:Nno \use:c { @@_check_ #1 :nnF } + { \@@_end_lblfmt:n {#2} } {#3} + { \bool_set_false:N \l_@@_passedcheck_bool } + % ``label end'' vs ``reference end''. + \exp_args:Nnoo \use:c { @@_check_ #1 :nnF } + { \@@_end_lblfmt:n {#2} } + { \@@_end_lblfmt:n {#3} } + { \bool_set_false:N \l_@@_passedcheck_bool } + } } % \end{macrocode} % Handle option \opt{onpage=msg}. This is only granted for tests which @@ -1839,7 +1842,7 @@ % % \begin{macro}{\@@_check_thispage:nn} % \begin{macrocode} -\prg_new_conditional:Npnn \@@_check_thispage:nn #1#2 { T , F , TF } +\prg_new_protected_conditional:Npnn \@@_check_thispage:nn #1#2 { T , F , TF } { \group_begin: \bool_set_true:N \l_@@_integer_bool @@ -1871,7 +1874,7 @@ % % \begin{macro}{\@@_check_above:nn, \@@_check_below:nn} % \begin{macrocode} -\prg_new_conditional:Npnn \@@_check_above:nn #1#2 { F , TF } +\prg_new_protected_conditional:Npnn \@@_check_above:nn #1#2 { F , TF } { \group_begin: \@@_check_thispage:nnTF {#1} {#2} @@ -1893,7 +1896,7 @@ { \group_insert_after:N \prg_return_false: } \group_end: } -\prg_new_conditional:Npnn \@@_check_below:nn #1#2 { F , TF } +\prg_new_protected_conditional:Npnn \@@_check_below:nn #1#2 { F , TF } { \@@_check_thispage:nnTF {#1} {#2} { @@ -1911,7 +1914,7 @@ % % \begin{macro}{\@@_check_before:nn, \@@_check_after:nn} % \begin{macrocode} -\prg_new_conditional:Npnn \@@_check_before:nn #1#2 { F } +\prg_new_protected_conditional:Npnn \@@_check_before:nn #1#2 { F } { \@@_check_pagesbefore:nnTF {#1} {#2} { \prg_return_true: } @@ -1921,7 +1924,7 @@ { \prg_return_false: } } } -\prg_new_conditional:Npnn \@@_check_after:nn #1#2 { F } +\prg_new_protected_conditional:Npnn \@@_check_after:nn #1#2 { F } { \@@_check_pagesafter:nnTF {#1} {#2} { \prg_return_true: } @@ -1945,10 +1948,11 @@ % \@@_check_ppbefore:nn , % \@@_check_pagesafter:nn , % \@@_check_ppafter:nn , +% \@@_check_pagegap:nn , % \@@_check_facing:nn % } % \begin{macrocode} -\prg_new_conditional:Npnn \@@_check_nextpage:nn #1#2 { F } +\prg_new_protected_conditional:Npnn \@@_check_nextpage:nn #1#2 { F } { \group_begin: \bool_set_true:N \l_@@_integer_bool @@ -1966,7 +1970,7 @@ { \group_insert_after:N \prg_return_false: } \group_end: } -\prg_new_conditional:Npnn \@@_check_prevpage:nn #1#2 { F } +\prg_new_protected_conditional:Npnn \@@_check_prevpage:nn #1#2 { F } { \group_begin: \bool_set_true:N \l_@@_integer_bool @@ -1984,7 +1988,7 @@ { \group_insert_after:N \prg_return_false: } \group_end: } -\prg_new_conditional:Npnn \@@_check_pagesbefore:nn #1#2 { F , TF } +\prg_new_protected_conditional:Npnn \@@_check_pagesbefore:nn #1#2 { F , TF } { \group_begin: \bool_set_true:N \l_@@_integer_bool @@ -2003,7 +2007,7 @@ \group_end: } \cs_new_eq:NN \@@_check_ppbefore:nnF \@@_check_pagesbefore:nnF -\prg_new_conditional:Npnn \@@_check_pagesafter:nn #1#2 { F , TF } +\prg_new_protected_conditional:Npnn \@@_check_pagesafter:nn #1#2 { F , TF } { \group_begin: \bool_set_true:N \l_@@_integer_bool @@ -2022,7 +2026,25 @@ \group_end: } \cs_new_eq:NN \@@_check_ppafter:nnF \@@_check_pagesafter:nnF -\prg_new_conditional:Npnn \@@_check_facing:nn #1#2 { F } +\prg_new_protected_conditional:Npnn \@@_check_pagegap:nn #1#2 { F } + { + \group_begin: + \bool_set_true:N \l_@@_integer_bool + \zrefcheck_get_asint:nnn {#1} { abspage } { \l_@@_lbl_int } + \zrefcheck_get_asint:nnn {#2} { abspage } { \l_@@_ref_int } + \bool_lazy_and:nnTF + { \l_@@_integer_bool } + { + \int_compare_p:nNn + { \int_abs:n { \l_@@_lbl_int - \l_@@_ref_int } } > { 1 } && + ! \int_compare_p:nNn { \l_@@_lbl_int } = { 0 } && + ! \int_compare_p:nNn { \l_@@_ref_int } = { 0 } + } + { \group_insert_after:N \prg_return_true: } + { \group_insert_after:N \prg_return_false: } + \group_end: + } +\prg_new_protected_conditional:Npnn \@@_check_facing:nn #1#2 { F } { \group_begin: \bool_set_true:N \l_@@_integer_bool @@ -2065,7 +2087,7 @@ % % \begin{macro}{\@@_check_close:nn, \@@_check_far:nn} % \begin{macrocode} -\prg_new_conditional:Npnn \@@_check_close:nn #1#2 { F , TF } +\prg_new_protected_conditional:Npnn \@@_check_close:nn #1#2 { F , TF } { \group_begin: \bool_set_true:N \l_@@_integer_bool @@ -2085,7 +2107,7 @@ { \group_insert_after:N \prg_return_false: } \group_end: } -\prg_new_conditional:Npnn \@@_check_far:nn #1#2 { F } +\prg_new_protected_conditional:Npnn \@@_check_far:nn #1#2 { F } { \@@_check_close:nnTF {#1} {#2} { \prg_return_false: } @@ -2106,7 +2128,7 @@ % \@@_check_chapsbefore:nn % } % \begin{macrocode} -\prg_new_conditional:Npnn \@@_check_thischap:nn #1#2 { F } +\prg_new_protected_conditional:Npnn \@@_check_thischap:nn #1#2 { F } { \group_begin: \bool_set_true:N \l_@@_integer_bool @@ -2132,7 +2154,7 @@ { \group_insert_after:N \prg_return_false: } \group_end: } -\prg_new_conditional:Npnn \@@_check_nextchap:nn #1#2 { F } +\prg_new_protected_conditional:Npnn \@@_check_nextchap:nn #1#2 { F } { \group_begin: \bool_set_true:N \l_@@_integer_bool @@ -2149,7 +2171,7 @@ { \group_insert_after:N \prg_return_false: } \group_end: } -\prg_new_conditional:Npnn \@@_check_prevchap:nn #1#2 { F } +\prg_new_protected_conditional:Npnn \@@_check_prevchap:nn #1#2 { F } { \group_begin: \bool_set_true:N \l_@@_integer_bool @@ -2167,7 +2189,7 @@ { \group_insert_after:N \prg_return_false: } \group_end: } -\prg_new_conditional:Npnn \@@_check_chapsafter:nn #1#2 { F } +\prg_new_protected_conditional:Npnn \@@_check_chapsafter:nn #1#2 { F } { \group_begin: \bool_set_true:N \l_@@_integer_bool @@ -2184,7 +2206,7 @@ { \group_insert_after:N \prg_return_false: } \group_end: } -\prg_new_conditional:Npnn \@@_check_chapsbefore:nn #1#2 { F } +\prg_new_protected_conditional:Npnn \@@_check_chapsbefore:nn #1#2 { F } { \group_begin: \bool_set_true:N \l_@@_integer_bool @@ -2217,7 +2239,7 @@ % \@@_check_secsbefore:nn % } % \begin{macrocode} -\prg_new_conditional:Npnn \@@_check_thissec:nn #1#2 { F } +\prg_new_protected_conditional:Npnn \@@_check_thissec:nn #1#2 { F } { \group_begin: \bool_set_true:N \l_@@_integer_bool @@ -2247,7 +2269,7 @@ { \group_insert_after:N \prg_return_false: } \group_end: } -\prg_new_conditional:Npnn \@@_check_nextsec:nn #1#2 { F } +\prg_new_protected_conditional:Npnn \@@_check_nextsec:nn #1#2 { F } { \group_begin: \bool_set_true:N \l_@@_integer_bool @@ -2268,7 +2290,7 @@ { \group_insert_after:N \prg_return_false: } \group_end: } -\prg_new_conditional:Npnn \@@_check_prevsec:nn #1#2 { F } +\prg_new_protected_conditional:Npnn \@@_check_prevsec:nn #1#2 { F } { \group_begin: \bool_set_true:N \l_@@_integer_bool @@ -2290,7 +2312,7 @@ { \group_insert_after:N \prg_return_false: } \group_end: } -\prg_new_conditional:Npnn \@@_check_secsafter:nn #1#2 { F } +\prg_new_protected_conditional:Npnn \@@_check_secsafter:nn #1#2 { F } { \group_begin: \bool_set_true:N \l_@@_integer_bool @@ -2311,7 +2333,7 @@ { \group_insert_after:N \prg_return_false: } \group_end: } -\prg_new_conditional:Npnn \@@_check_secsbefore:nn #1#2 { F } +\prg_new_protected_conditional:Npnn \@@_check_secsbefore:nn #1#2 { F } { \group_begin: \bool_set_true:N \l_@@_integer_bool @@ -2337,6 +2359,50 @@ % \end{macro} % % +% +% \section{\pkg{zref-clever} integration} +% +% +% There are four tasks \pkg{zref-clever} needs to do, in order to offer +% integration with \pkg{zref-check} from the options of \cs{zcref}: i) set the +% ``beg label''; ii) set the checks options; iii) run the checks; iv) +% (possibly) set the ``end label''. Since `ii)' can be done directly by +% running |\keys_set:nn { zref-check / zcheck }| on the options received, we +% provide convenience functions for the other three tasks. +% +% +% \begin{macro} +% { +% \zrefcheck_zcref_beg_label: , +% \zrefcheck_zcref_end_label_maybe: , +% \zrefcheck_zcref_run_checks_on_labels:n +% } +% \begin{macrocode} +\cs_new_protected:Npn \zrefcheck_zcref_beg_label: + { + \int_gincr:N \g_@@_id_int + \tl_set:Nx \l_@@_checkbeg_tl + { \@@_check_lblfmt:n { \g_@@_id_int } } + \zref@labelbylist { \l_@@_checkbeg_tl } { zrefcheck-check } + } +\cs_new_protected:Npn \zrefcheck_zcref_end_label_maybe: + { + \bool_if:NT \l_@@_zcheck_end_label_bool + { + \zref@labelbylist + { \@@_end_lblfmt:n { \l_@@_checkbeg_tl } } + { zrefcheck-end } + } + } +\cs_new_protected:Npn \zrefcheck_zcref_run_checks_on_labels:n #1 + { + \@@_run_checks:nnx + { \l_@@_zcheck_checks_seq } {#1} { \l_@@_checkbeg_tl } + } +% \end{macrocode} +% \end{macro} +% +% % \begin{macrocode} % % \end{macrocode} diff --git a/macros/latex/contrib/zref-check/zref-check.pdf b/macros/latex/contrib/zref-check/zref-check.pdf index f7b1110802..2197eda816 100644 Binary files a/macros/latex/contrib/zref-check/zref-check.pdf and b/macros/latex/contrib/zref-check/zref-check.pdf differ diff --git a/macros/unicodetex/latex/njuthesis/README.md b/macros/unicodetex/latex/njuthesis/README.md index d7c4cb33aa..e8e9c42190 100644 --- a/macros/unicodetex/latex/njuthesis/README.md +++ b/macros/unicodetex/latex/njuthesis/README.md @@ -1,11 +1,8 @@ -# NJU Thesis - -[![njuthesis](https://img.shields.io/badge/njuthesis-latex-blue)](https://git.nju.edu.cn/nju-lug/nju-latex-templates) -[![overleaf](https://img.shields.io/badge/overleaf-supported-brightgreen)](https://tex.nju.edu.cn) +# The njuthesis class ## Overview -This is A LaTex Template for Nanjing University Bachelor Thesis. The Template needs `xelatex` or `lualatex`. +This package is intended for typesetting Nanjing University thesis with LaTeX, providing support for bachelor, master, and doctoral thesis. Compilation of this class requires either `xelatex` or `lualatex` engine. ## License @@ -18,7 +15,7 @@ This is A LaTex Template for Nanjing University Bachelor Thesis. The Template ne ## Contributing -If you find a problem with the template, please submit an issue or PR in Github +If you run into any problem with the template, please contact us via Github issue or submit Pull Request. ## Wiki diff --git a/macros/unicodetex/latex/njuthesis/README_ZH_CN.md b/macros/unicodetex/latex/njuthesis/README_ZH_CN.md new file mode 100644 index 0000000000..a3e0d04645 --- /dev/null +++ b/macros/unicodetex/latex/njuthesis/README_ZH_CN.md @@ -0,0 +1,77 @@ +# NJU Thesis + +[![njuthesis](https://img.shields.io/badge/njuthesis-latex-blue)](https://git.nju.edu.cn/nju-lug/nju-latex-templates) +[![overleaf](https://img.shields.io/badge/overleaf-supported-brightgreen)](https://tex.nju.edu.cn) +![build status](https://github.com/nju-lug/NJUThesis/actions/workflows/build.yml/badge.svg) + +> 此项目是基于[NJU thesis 2021](https://github.com/FengChendian/NJUThesis2021)的重构版本,目前本科生版本**已经基本重构完成**,硕博论文**正在**根据研究生院的文件重构,但研究生院的规定并不完善,因此部分格式可能会参考本科的,**如果院系另有要求,请自行修改或者提交issue**。 + +原来的[NJU thesis 2021](https://github.com/FengChendian/NJUThesis2021)模板太过古老并且不支持硕士、博士论文,目前难以维护,因此为了模板的可持续发展,现在将对该项目进行重构,项目挂载于[NJU-LUG](https://github.com/nju-lug)组织仓库下,目前已[发布在CTAN](https://ctan.org/pkg/njuthesis)。 + +相关文档请参见[本项目wiki](https://github.com/nju-lug/NJUThesis/wiki)。 + +## 快速开始 + +从0.9.0版以后,本模板以DocStrip(`.dtx`)格式进行维护。常规的`.cls`格式文件可从Releases页面下载或使用以下方法提取。 + +### 关于DocStrip文件 + +DocStrip格式合并了LaTeX源代码和说明文档,更有利于宏包的发布。要使用该文件,请在当前工作目录下打开终端: + +- 输入`xetex njuthesis.dtx`以提取宏包内容 +- 输入`latexmk njuthesis.dtx`以生成并查看内置的文档 + +请注意,由于文件重名原因,项目中的示例论文模板已被重命名为`njuthesis-sample.tex`。 + +### 本地编译 + +1. [从南大镜像站下载](https://mirror.nju.edu.cn/download/app/TeX%20%E6%8E%92%E7%89%88%E7%B3%BB%E7%BB%9F)并安装TeXLive或者MiKTeX最新版 +2. 下载包含[模板全部文件](https://github.com/nju-lug/NJUThesis/releases/latest)的压缩包`njuthesis.zip` +3. 根据需要更改`njuthesis-sample.tex`文件中的内容 +4. 在模板根目录下运行`latexmk`编译文件,得到对应的PDF + +#### **关于本地编译** + +- 模板支持`latexmk`、`xelatex`、`lualatex`三种编译方式 +- 如果使用`latexmk`,请务必使用完整的命令`latexmk -xelatex`以免产生不必要的问题 +- 如果使用`xelatex`或`lualatex`,需要按照`xelatex/lualatex` -> `biber` -> `xelatex/lualatex` -> `xelatex/lualatex`的顺序编译四次 +- 仓库中`.vscode`附带一份VScode的LaTeX WorkShop的配置文件,可根据需要使用 + +### [南大TeX](https://tex.nju.edu.cn)编译 + +1. 下载包含[模板全部文件](https://github.com/nju-lug/NJUThesis/releases/latest)的压缩包`njuthesis.zip` +2. 登录[南大TeX](https://tex.nju.edu.cn),点击New Project -> Upload Project上传刚刚得到的压缩包,上传后`njuthesis-sample.tex`、`njuthesis.cls`等文件应在根目录,0.9.0以后的目录结构如下所示: + + ```shell + NJUThesis-master/ + │ + ├─figure/ + │ njulogo.pdf + │ njuname.pdf + │ + │ njuthesis.bib + │ njuthesis.cls + │ njuthesis-sample.tex + ``` + +3. 在南大TeX项目内页面左上角的`Menu`中,将编译器改为`XeLaTeX` +4. 编写TeX文档 + +### 其他 + +更多内容请参见项目Wiki中的[使用说明](https://github.com/nju-lug/NJUThesis/wiki/%E4%BD%BF%E7%94%A8%E8%AF%B4%E6%98%8E)。 + +你也可以下载[Release](https://github.com/nju-lug/NJUThesis/releases/latest)中附带的`njuthesis.pdf`,里面详尽阐述了模板的特性和使用方法。 + +## 常见问题 + +请参见[常见问题](https://github.com/nju-lug/NJUThesis/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98)。 + +## 贡献 + +如果你发现了模板的问题,欢迎在Github中[提交issue](https://github.com/nju-lug/NJUThesis/issues)或者PR。 + +## 许可 + +本模板的发布遵守 LaTeX Project Public License(版本 1.3c 或更高)。 + diff --git a/macros/unicodetex/latex/njuthesis/figure/njuname-large.jpg b/macros/unicodetex/latex/njuthesis/figure/njuname-large.jpg deleted file mode 100644 index b69db06921..0000000000 Binary files a/macros/unicodetex/latex/njuthesis/figure/njuname-large.jpg and /dev/null differ diff --git a/macros/unicodetex/latex/njuthesis/figure/njuname-large.pdf b/macros/unicodetex/latex/njuthesis/figure/njuname-large.pdf new file mode 100644 index 0000000000..f7e71662e5 Binary files /dev/null and b/macros/unicodetex/latex/njuthesis/figure/njuname-large.pdf differ diff --git a/macros/unicodetex/latex/njuthesis/njuthesis.cls b/macros/unicodetex/latex/njuthesis/njuthesis.cls deleted file mode 100644 index d8d8f57f3a..0000000000 --- a/macros/unicodetex/latex/njuthesis/njuthesis.cls +++ /dev/null @@ -1,96 +0,0 @@ -\NeedsTeXFormat{LaTeX2e} -\ProvidesExplClass{njuthesis}{2021-09-11}{0.7.3}{NJU Thesis LaTeX Template} - -% 通过类传递参数 -\RequirePackage{l3keys2e} - -\LoadClass[ - a4paper, - twoside, - UTF8, - scheme=chinese, - linespread=1.625,% laTex默认1.2行距,word默认行距是1.3,要求1.5倍word行距,故1.5/1.2*1.3 = 1.625 - fontset=none, - zihao=-4 - ]{ctexbook}[2018/04/01] - -% 定义模板键值 -% 用于格式控制的键值 -\keys_define:nn { nju } -{ - titlelength .int_set:N = \nju_titlelength, - titlelength .initial:n = 1, - - secondmentor .bool_set:N = \nju_second_mentor, - secondmentor .initial:n = false, - - degree .tl_set:N = \nju_degree, - degree .initial:n = UG, - - type .tl_set:N = \nju_type, - type .initial:n = thesis, - - systemfont .bool_set:N = \nju_systemfont, - systemfont .initial:n = true, - - customlatinfont .tl_set:N = \nju_customlatinfont, - customlatinfont .initial:n = windows, - - customchinesefont .tl_set:N = \nju_customchinesefont, - customchinesefont .initial:n = windows, - - info .meta:nn = { nju / info } { #1 } -} - -\keys_define:nn { nju / info } -{ - % 题目 - TitleA .tl_set:N = \nju_title_a, - TitleB .tl_set:N = \nju_title_b, - TitleC .tl_set:N = \nju_title_c, - TitleEN .tl_set:N = \nju_title_en, - - % 年级学号姓名 - Grade .tl_set:N = \nju_grade, - StudentID .tl_set:N = \nju_student_id, - StudentName .tl_set:N = \nju_student_name, - StudentNameEN .tl_set:N = \nju_student_name_en, - - % 院系专业方向 - Department .tl_set:N = \nju_department, - DepartmentEN .tl_set:N = \nju_department_en, - Major .tl_set:N = \nju_major, - MajorEN .tl_set:N = \nju_major_en, - Field .tl_set:N = \nju_field, - FieldEN .tl_set:N = \nju_field_en, - - % 导师 - MentorA .tl_set:N = \nju_mentor_a, - MentorAEN .tl_set:N = \nju_mentor_a_en, - MentorATitle .tl_set:N = \nju_mentor_a_title, - MentorATitleEN .tl_set:N = \nju_mentor_a_title_en, - - % 第二导师 - MentorB .tl_set:N = \nju_mentor_b, - MentorBEN .tl_set:N = \nju_mentor_b_en, - MentorBTitle .tl_set:N = \nju_mentor_b_title, - MentorBTitleEN .tl_set:N = \nju_mentor_b_title_en, - - % 日期 - SubmitDate .tl_set:N = \nju_submit_date, - DefenseDate .tl_set:N = \nju_defense_date, -} - -\NewDocumentCommand \njusetup { m } -{ \keys_set:nn { nju } { #1 } } - -\ProcessKeysOptions { nju } - -% 输入配置文件 -\RequirePackage{profile/packages} -\RequirePackage{profile/font} -\RequirePackage{profile/page} -\RequirePackage{profile/reference} -\RequirePackage{profile/components} -\RequirePackage{profile/cover} -\RequirePackage{profile/abstract} diff --git a/macros/unicodetex/latex/njuthesis/njuthesis.dtx b/macros/unicodetex/latex/njuthesis/njuthesis.dtx new file mode 100644 index 0000000000..008b7173f7 --- /dev/null +++ b/macros/unicodetex/latex/njuthesis/njuthesis.dtx @@ -0,0 +1,2266 @@ +% \iffalse meta-comment +% !TeX program = XeLaTeX +% !TeX encoding = UTF-8 +% +% Copyright (C) 2021 +% by Nanjing University Linux User Group +% +% It may be distributed and/or modified under the conditions of the +% LaTeX Project Public License (LPPL), either version 1.3c of this +% license or (at your option) any later version. The latest version +% of this license is in the file +% +% https://www.latex-project.org/lppl.txt +% +% ----------------------------------------------------------------------- +% +% The development version of the template can be found at +% +% https://github.com/nju-lug/NJUThesis +% +% for those people who are interested. +% +%<*internal> +\iffalse +% +% +%<*readme-zh> +# NJU Thesis + +[![njuthesis](https://img.shields.io/badge/njuthesis-latex-blue)](https://git.nju.edu.cn/nju-lug/nju-latex-templates) +[![overleaf](https://img.shields.io/badge/overleaf-supported-brightgreen)](https://tex.nju.edu.cn) +![build status](https://github.com/nju-lug/NJUThesis/actions/workflows/build.yml/badge.svg) + +> 此项目是基于[NJU thesis 2021](https://github.com/FengChendian/NJUThesis2021)的重构版本,目前本科生版本**已经基本重构完成**,硕博论文**正在**根据研究生院的文件重构,但研究生院的规定并不完善,因此部分格式可能会参考本科的,**如果院系另有要求,请自行修改或者提交issue**。 + +原来的[NJU thesis 2021](https://github.com/FengChendian/NJUThesis2021)模板太过古老并且不支持硕士、博士论文,目前难以维护,因此为了模板的可持续发展,现在将对该项目进行重构,项目挂载于[NJU-LUG](https://github.com/nju-lug)组织仓库下,目前已[发布在CTAN](https://ctan.org/pkg/njuthesis)。 + +相关文档请参见[本项目wiki](https://github.com/nju-lug/NJUThesis/wiki)。 + +## 快速开始 + +从0.9.0版以后,本模板以DocStrip(`.dtx`)格式进行维护。常规的`.cls`格式文件可从Releases页面下载或使用以下方法提取。 + +### 关于DocStrip文件 + +DocStrip格式合并了LaTeX源代码和说明文档,更有利于宏包的发布。要使用该文件,请在当前工作目录下打开终端: + +- 输入`xetex njuthesis.dtx`以提取宏包内容 +- 输入`latexmk njuthesis.dtx`以生成并查看内置的文档 + +请注意,由于文件重名原因,项目中的示例论文模板已被重命名为`njuthesis-sample.tex`。 + +### 本地编译 + +1. [从南大镜像站下载](https://mirror.nju.edu.cn/download/app/TeX%20%E6%8E%92%E7%89%88%E7%B3%BB%E7%BB%9F)并安装TeXLive或者MiKTeX最新版 +2. 下载包含[模板全部文件](https://github.com/nju-lug/NJUThesis/releases/latest)的压缩包`njuthesis.zip` +3. 根据需要更改`njuthesis-sample.tex`文件中的内容 +4. 在模板根目录下运行`latexmk`编译文件,得到对应的PDF + +#### **关于本地编译** + +- 模板支持`latexmk`、`xelatex`、`lualatex`三种编译方式 +- 如果使用`latexmk`,请务必使用完整的命令`latexmk -xelatex`以免产生不必要的问题 +- 如果使用`xelatex`或`lualatex`,需要按照`xelatex/lualatex` -> `biber` -> `xelatex/lualatex` -> `xelatex/lualatex`的顺序编译四次 +- 仓库中`.vscode`附带一份VScode的LaTeX WorkShop的配置文件,可根据需要使用 + +### [南大TeX](https://tex.nju.edu.cn)编译 + +1. 下载包含[模板全部文件](https://github.com/nju-lug/NJUThesis/releases/latest)的压缩包`njuthesis.zip` +2. 登录[南大TeX](https://tex.nju.edu.cn),点击New Project -> Upload Project上传刚刚得到的压缩包,上传后`njuthesis-sample.tex`、`njuthesis.cls`等文件应在根目录,0.9.0以后的目录结构如下所示: + + ```shell + NJUThesis-master/ + │ + ├─figure/ + │ njulogo.pdf + │ njuname.pdf + │ + │ njuthesis.bib + │ njuthesis.cls + │ njuthesis-sample.tex + ``` + +3. 在南大TeX项目内页面左上角的`Menu`中,将编译器改为`XeLaTeX` +4. 编写TeX文档 + +### 其他 + +更多内容请参见项目Wiki中的[使用说明](https://github.com/nju-lug/NJUThesis/wiki/%E4%BD%BF%E7%94%A8%E8%AF%B4%E6%98%8E)。 + +你也可以下载[Release](https://github.com/nju-lug/NJUThesis/releases/latest)中附带的`njuthesis.pdf`,里面详尽阐述了模板的特性和使用方法。 + +## 常见问题 + +请参见[常见问题](https://github.com/nju-lug/NJUThesis/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98)。 + +## 贡献 + +如果你发现了模板的问题,欢迎在Github中[提交issue](https://github.com/nju-lug/NJUThesis/issues)或者PR。 + +## 许可 + +本模板的发布遵守 LaTeX Project Public License(版本 1.3c 或更高)。 + +% +% +%<*readme-en> +# The njuthesis class + +## Overview + +This package is intended for typesetting Nanjing University thesis with LaTeX, providing support for bachelor, master, and doctoral thesis. Compilation of this class requires either `xelatex` or `lualatex` engine. + +## License + +----- + This work may be distributed and/or modified under the conditions of + the [LaTeX Project Public License](http://www.latex-project.org/lppl.txt), + either version 1.3c of this license or (at your option) any later + version. +----- + +## Contributing + +If you run into any problem with the template, please contact us via Github issue or submit Pull Request. + +## Wiki + +Please see [Chinese wiki](https://github.com/nju-lug/NJUThesis/wiki)。 + +----- + +Copyright © NJU-LUG +% +% +%<*internal> +\fi +\begingroup + \def\NameOfLaTeXe{LaTeX2e} +\expandafter\endgroup\ifx\NameOfLaTeXe\fmtname\else +\csname fi\endcsname +% +% +%<*install> +\input l3docstrip.tex +\keepsilent +\askforoverwritefalse + +\preamble + +Copyright (C) 2021 +by Nanjing University Linux User Group + +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.3 or later is part of all distributions of LaTeX version +2005/12/01 or later. + +To produce the documentation run the original source files ending with `.dtx' +through XeTeX. + +\endpreamble + +\generate{ + \usedir{tex/latex/njuthesis} + \file{\jobname.cls} {\from{\jobname.dtx}{class}} +% +%<*internal> + \usedir{source/latex/njuthesis} + \file{\jobname.ins} {\from{\jobname.dtx}{install}} +% +%<*install> + \usedir{doc/latex/njuthesis} + \nopreamble\nopostamble + \file{README_EN.md} {\from{\jobname.dtx}{readme-en}} + \file{README.md} {\from{\jobname.dtx}{readme-zh}} +} + +\obeyspaces +\Msg{*************************************************************} +\Msg{* *} +\Msg{* To finish the installation you have to move the following *} +\Msg{* files into a directory searched by TeX: *} +\Msg{* *} +\Msg{* The recommended directory is TDS:tex/latex/njuthesis *} +\Msg{* *} +\Msg{* njuthesis.cls *} +\Msg{* njuthesis.ins *} +\Msg{* README.md *} +\Msg{* README_EN.md *} +\Msg{* *} +\Msg{* To produce the documentation, run the file njuthesis.dtx *} +\Msg{* through XeLaTeX. *} +\Msg{* *} +\Msg{* Happy TeXing! *} +\Msg{* *} +\Msg{*************************************************************} + +\endbatchfile +% +% +%<*internal> +\fi +% +% +%\NeedsTeXFormat{LaTeX2e} +%\RequirePackage{expl3} +% \GetIdInfo $Id: njuthesis.dtx 0.9.2 2021-09-17 22:00:00 +0800 NJU LUG $ +% {Thesis template for Nanjing University} +%\ProvidesExplClass{\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription} +% +%<*driver> +\ProvidesFile{njuthesis.dtx} +\documentclass{ctxdoc} +\usepackage{listings,xcolor} +\definecolor{njuviolet}{cmyk}{0.5,1,0,0.4} +\definecolor{njumagenta}{cmyk}{0.05,1,0.55,0} +\definecolor{njublue}{cmyk}{0.8,0.5,0,0} +\definecolor{njuyellow}{cmyk}{0,0.3,1,0} +\begin{document} + \DocInput{njuthesis.dtx} +\end{document} +% +% \fi +% +% \title{\color{njuviolet}{The \textsc{NJuThesis} class\\ 南京大学学位论文模板}} +% +% \author{^^A +% Nanjing University Linux User Group +% \thanks{E-mail: \href{mailto:nju.lug@yaoge123.cn}{nju.lug@yaoge123.cn}}} +% +% \date{v0.9.2 \\ Released 2021-09-17} +% +% \maketitle +% +% \begin{abstract} +% 南京大学学位论文\hologo{LaTeX}模板基于本科生院的论文撰写规范制作,同时参考研究生院提供的硕士、博士学位材料包,用于生成符合南京大学学位论文排版要求和相应的国家规范、行业标准的学位论文,旨在为同学提供毕业论文书写的方便。 +% \end{abstract} +% +% \def\abstractname{Abstract} +% \begin{abstract} +% The \textsc{NJuThesis} class is intended for typesetting Nanjing University thesis with LaTeX, providing support for bachelor, master, and doctoral thesis. +% \end{abstract} +% +% \def\abstractname{特别声明} +% \begin{abstract} +% 请注意,本模板仍未完成开发,出现bug或者文档不完善属于正常情况,提issue或Pull Request即可。 +% +% \href{https://git.nju.edu.cn/nju-lug/lug-introduction}{NJU LUG}始终欢迎您的加入与贡献! +% \end{abstract} +% +% \clearpage +% +% \setcounter{tocdepth}{4} +% \tableofcontents +% \clearpage +% +% \EnableDocumentation +%^^A \DisableDocumentation +% +% \begin{documentation} +% +% +% \section{模板介绍} +% \textsc{NJuThesis},即南京大学学位论文模板,是一个由南京大学LUG组织维护的,用于处理本校学生毕业论文排版需求的\hologo{LaTeX}模板。 +% +% \subsection{历史沿革} +% +% 十几年来,多位热心校友发布过自己编写的模板,在GitHub上可考的包括 +% \begin{enumerate} +% \item 杨文博(\href{http://yangwenbo.com/}{@solrex})的\href{https://github.com/solrex/njuthesis}{南京大学学位论文\hologo{LaTeX}模板}(2010) +% \item \href{https://github.com/fireblue}{@fireblue}基于solrex模板的的\href{https://github.com/fireblue/NJUThesis}{南京大学学位论文\hologo{LaTeX}模板}(2013) +% \item \href{https://github.com/wenhai-zheng}{@wenhai-zheng}的\href{https://github.com/wenhai-zheng/NJUThesis}{NJUThesis}(2013) +% \item 胡海星(\href{http://haixing-hu.github.io/}{@Haixing-Hu})的\href{https://github.com/Haixing-Hu/nju-thesis}{NJU-Thesis}(2013 - 2018) +% \item 张楚珩(\href{https://github.com/zhangchuheng123}{@zhangchuheng123})基于胡海星模板的\href{https://github.com/zhangchuheng123/NJUThesis}{NJUThesis}(2016) +% \item 蒋炎岩(\href{http://ics.nju.edu.cn/~jyy/}{@jiangyy})的\href{https://github.com/jiangyy/njuthesis}{南京大学山寨\hologo{LyX}研究生毕业论文模板}(2017) +% \item 饶安逸(\href{https://anyirao.com/}{@AnyiRao})基于胡海星模板的\href{https://github.com/jiangyy/njuthesis}{NJU-Thesis}(2018) +% \item \href{https://github.com/njuHan}{@njuHan}基于胡海星模板的\href{https://github.com/njuHan/njuthesis-nju-thesis-template/}{NJU-Thesis}(2018 - 2021) +% \item 赵懿晨(\href{https://fengchendian.github.io/about.html}{@FengChendian})基于AnyiRao模板的\href{https://github.com/FengChendian/NJUThesis2021}{NJU Thesis 2021}(2021) +% \end{enumerate} +% 至于不幸而未进行代码版本管理的,甚至于说以压缩包形式流传于各人硬盘中的,就更不可计数了。 +% +% 与其让一千个学生做一千种不同的模板,不如有人牵起头来,集中力量办大事。因此,南京大学 Linux User Group 的有志之士在2021年暑期联合起来,参考以上的现成模板,兼顾友校thuthesis、fduthesis等优秀项目,构建了这一全新模板,力求通过\hologo{LaTeX3}语法和清淅的接口实现良好的易用性和可维护性。 +% +% 目前,本模板的主要维护者包括: +% +% \begin{itemize} +% \item 赵懿晨 +% \item 熊煜 +% \end{itemize} +% +% \subsection{君\hologo{LaTeX}本当上手} +% \hologo{LaTeX}并不是一种零门槛的语言,亦不是南京大学学生的必备技能。有同学听到“\emph{给毕业论文交差也得写代码}”这种事情就头疼,实在是我们不愿意见到而必须要面对的情况。目前,中文互联网上的\hologo{LaTeX}写作教程不能说屈指可数,起码也是汗牛充栋,比较著名的包括刘海洋的《\hologo{LaTeX}入门》等等都是不错的参考资料。然而如何快速准确找到所需要的用法,尤其是\hologo{LaTeX3}的新接口,需要一定的时间或者良好的英文阅读能力。在本文档的写作中,我们无力从盘古开天辟地开始从头构建您的相关知识体系,只能\textbf{尽力做到有求必应},在需要的地方顺带提一嘴,保证您少走点弯路。 +% +% \subsection{关于本说明手册} +% +% 本模板通过\textsc{DocStrip}进行维护,实际上是一种\emph{文学编程}。文学编程的本体是那些用来说明的文字,按写书写文章的方式组织。 +% \file{njuthesis.dtx}包含njuthesis模板的所有信息。前半部分为模板说明,即各种常用命令与必要的使用方法;后半部分为代码实现,为带有详细注释的\hologo{TeX}源代码。后者配合附录,为有意了解本模板细节的同学提供简明的指引。 +% +% 下文中将出现若干特殊格式,包括\file{file-example.xxx}等。 +% +% 如果您在使用最新版模板时发现了任何问题,抑或有意向参与本模板的维护,请通过GitHub issue或者QQ群聊联系LUG。 +% +% \section{安装} +% \label{sec:setup} +% +% 本节主要介绍本宏包的获取、安装以及编译方式 +% \subsection{下载模板} +% +% 本宏包已经发布在CTAN,将在明年进入\hologo{TeX}\,Live 2022 发行版。然而CTAN版更新不及时,更推荐使用以下方式下载。 +% +% 从本模板的Github Releases页面下载最新的发布版 +% +% 从本模板的Github仓库下载最新的dtx文件自行安装 +% +% \subsection{本地编译} +% +% \subsubsection{安装\hologo{TeX}发行版} +% +% 首先需要下载\hologo{TeX}软件发行版,校园网环境中使用\href{https://mirror.nju.edu.cn/download/app/TeX%20%E6%8E%92%E7%89%88%E7%B3%BB%E7%BB%9F}{南大镜像站}可以获得最好的体验。\textbf{推荐使用最新的\hologo{TeX}\,Live 2021或者\hologo{MiKTeX} 21以避免潜在的兼容性问题。} +% +% \begin{itemize} +% \item 为了避免不必要的麻烦,请尽可能下载 full 版本,如 texlive-full。简而言之,下载大的那个。 +% \item 并且,尽可能使用最新版(截至目前是 2021)。2020 及之前版本使用 PDF 格式的图片可能会出现加粗问题。 +% \end{itemize} +% +% 下表是目前经过测试的环境。如果有其他可用不可用的环境,欢迎补充。 +% \begin{table}[ht] +% \centering +% \caption{经过测试的环境} +% % \label{tab:1} +% \begin{tabular}{ccc} +% \toprule +% OS & TeX & 测试情况 \\ +% \midrule +% Windows 10 & \hologo{TeX}\,Live 2020 & cref存在格式问题 \\ +% Windows 10 & \hologo{TeX}\,Live 2021 & 通过 \\ +% Windows 10 & \hologo{MiKTeX} & 通过 \\ +% macOS 10.15 & mac\hologo{TeX} 2021 & 通过 \\ +% Ubuntu 20.04 & \hologo{TeX}\,Live 2021 & 通过 \\ +% Arch Linux & \hologo{TeX}\,Live 2021 & 通过 \\ +% \bottomrule +% \end{tabular} +% \end{table} +% +% \subsubsection{选择编辑器} +% +% 配置完编译器后,还需要一个\textbf{文本编辑器}作为前端来完成\texttt{.tex}文件内容的写作。 +% +% 至今仍有相当一部分人认为Windows自带的\textit{记事本}是最好的文本编辑器,但对于本项目而言,在此诚心诚意地推荐你使用\textbf{更现代更美观更多功能}的编辑器,譬如\emph{安装了 LaTeX Workshop 插件 的 \href{https://code.visualstudio.com/}{Visual Studio Code}},来完成论文编写。你也可以根据个人的喜好随便使用其他编辑器,如 TeXworks、TeX Studio 等,顺手就行。 +% +% 若使用 LaTeX Workshop 插件,本项目在|.vscode/|中提供一份简易配置,可以省略初始配置步骤直接使用。 +% +% \subsubsection{编译顺序} +% 假设即将使用的文件名为\file{mynjuthesis.tex} +% 应采用以下命令顺序进行编译,以生成正确的目录、编号和参考文献条目。 +% \begin{ctexexam} +% xelatex mynjuthesis +% biber mynjuthesis +% xelatex mynjuthesis +% xelatex mynjuthesis +% \end{ctexexam} +% 使用 \pkg{latexmk} +% \begin{ctexexam} +% latexmk -xelatex mynjuthesis +% \end{ctexexam} +% +% \begin{ctexexam} +% lualatex mynjuthesis +% biber mynjuthesis +% lualatex mynjuthesis +% lualatex mynjuthesis +% \end{ctexexam} +% 使用 \pkg{latexmk} +% \begin{ctexexam} +% latexmk -lualatex mynjuthesis +% \end{ctexexam} +% +% 编译产物为\file{njuthesis.pdf},位于主目录下。此外还会生成一系列中间文件,可以选择使用以下命令进行清理。 +% +% \begin{ctexexam} +% latexmk -c +% \end{ctexexam} +% +% \subsection{在线编译} +% +% 相信你在接触了本地编译以后,很快就会意识到一些十分显然的事实,譬如\hologo{TeX}编译器安装过程较为漫长,占用空间过大,而且在一部分处理器性能不佳的电脑上需要较长编译时间\footnote{其实这三点都是对广大的Windows用户说的,同一个模板在Linux编译可以节省一半耗时}。拒绝接受这些麻烦的同学不妨尝试本节介绍的在线编译方法。 +% +% \subsubsection{南大\hologo{TeX}平台简介} +% +% \href{https://tex.nju.edu.cn}{南大\hologo{TeX}}基于开源的ShareLaTeX平台\footnote{理论上在\href{https://doc.nju.edu.cn/books/latex}{这个网站}能找到一段平台简介,实际上大家都有意无意地鸽了,下次一定补上。},于2021年3月4日正式上线,面向南京大学全体师生开放,首次使用需凭学校邮箱自助注册账号。 +% +% \subsubsection{操作步骤} +% +% \begin{enumerate} +% \item 下载\href{https://github.com/nju-lug/NJUThesisUndergraduate/archive/refs/heads/master.zip}{模板全部文件} +% \item 访问\href{https://tex.nju.edu.cn}{南大\hologo{TeX}},点击界面右上方Register,使用\emph{南京大学邮箱}注册账号并登录 +% \item 点击New Project -> Upload Project上传刚刚得到的zip文件,上传后njuthesis.tex、njuthesis.cls等文件应在根目录,目录结构如{{sec:directory}}所示 +% \item 在项目页面左上角的Menu中,将编译器改为\hologo{XeLaTeX}或者\hologo{LuaLaTeX} +% \item 编写论文 +% \item 点击Compile按钮进行编译和预览 +% \item 点击编译按钮右侧第三个按钮下载产物 +% \end{enumerate} +% +% \subsubsection{关于Overleaf平台} +% +% 由于\href{https://www.overleaf.com/}{Overleaf平台}的\hologo{TeX}\,Live版本停留在2020,\texttt{cleveref}包在引用章节时会生成错误的标签,引发格式错误;而南大\hologo{TeX}通过及时更新规避了这一问题。因此\emph{请务必不要使用Overleaf官网进行编译}。 +% +% +% +% \section{使用方法} +% +% \subsection{自定义选项} +% +% 尖括号内列出了若干个允许的选项,其中加粗的为默认选项。 +% +% 封面标题留空即可自动化换行 +% +% 第二导师不填则留空,目前来说拥有两位指导老师并不是一种普遍状况。 +% +% \begin{function}[added=2021-09-07]{nlcover} +% \begin{syntax} +% nlcover = <\TTF> +% \end{syntax} +% +% 通过此项可选择是否添加国家图书馆封面,本选项仅对于研究生有效 +% \end{function} +% +% +% \subsubsection{学位信息} +% \begin{function}[added=2021-09-07]{degree} +% \begin{syntax} +% degree = <(ug)|mg|mf|phd> +% \end{syntax} +% +% 选择学位,可选: +% \opt{ug}(默认本科),\opt{mg}即学术硕士,\opt{mf},\opt{phd}。 +% \end{function} +% +% +% \begin{function}[added=2021-09-07]{type} +% \begin{syntax} +% type = <(thesis)|design> +% \end{syntax} +% +% 用于选择文档类型并将相关字段输出在封面和摘要页。可选值包括thesis(表示毕业论文)和design(表示毕业设计),缺省值为thesis。 +% \opt{thesis}(默认),\opt{design}。 +% \end{function} +% +% +% +% \subsubsection{指定字体} +% +% +% 学校论文格式要求使用的字体一般已经预装在各个操作系统,本模板针对不同平台进行了自动检测适配,可以开箱即用。 +% +% 如果希望更改本模板使用的字体,请填写以下两个选项覆盖检测操作系统得到的设置 +% +% +% \begin{function}[added=2021-09-07]{customlatinfont} +% \begin{syntax} +% customlatinfont = <(windows)|macos|gyre|null> +% \end{syntax} +% +% 手动指定英文字体,可选: +% \opt{windows}(默认), \opt{macos}, \opt{gyre}, \opt{null}。 +% \end{function} +% +% +% \begin{function}[added=2021-09-07]{customchinesefont} +% \begin{syntax} +% customchinesefont = <(windows)|macos|fandol|founder|noto|null> +% \end{syntax} +% +% 手动指定中文字体,可选: +% \opt{windows}(默认), \opt{macos}, \opt{fandol}, \opt{founder},\opt{noto},\opt{null}。 +% +% 方正字体(简繁扩展)系列 +% FZSSK \href{http://www.foundertype.com/index.php/FontInfo/index/id/151}{方正书宋} 免费商用 +% +% FZXBSK \href{http://www.foundertype.com/index.php/FontInfo/index/id/164}{方正小标宋} 设计师非商免费 +% +% FZKTK \href{http://www.foundertype.com/index.php/FontInfo/index/id/137}{方正楷体} 免费商用 +% +% FZXH1K \href{http://www.foundertype.com/index.php/FontInfo/index/id/161}{方正细黑一} 设计师非商免费 +% +% FZHTK \href{http://www.foundertype.com/index.php/FontInfo/index/id/131}{方正黑体} 免费商用 +% +% FZFSK \href{http://www.foundertype.com/index.php/FontInfo/index/id/128}{方正仿宋} +% +% FZYouHK_508R \href{http://www.foundertype.com/index.php/FontInfo/index/id/244}{方正悠黑508R} 设计师非商免费 +% +% FZYouHK_511M \href{http://www.foundertype.com/index.php/FontInfo/index/id/244}{方正悠黑511M} 设计师非商免费 +% +% 思源字体\footnote{思源宋体和思源黑体有两种英文命名,本模板采用Google的noto系列}: +% \href{https://www.google.com/get/noto/#serif-hans}{思源宋体}、 +% \href{https://www.google.com/get/noto/#sans-hans}{思源黑体} +% +% +% +% 方正楷体、方正仿宋为免费商用字体,且支持CJK字符集 +% \href{http://www.foundertype.com/index.php/FontInfo/index/id/128.html}{方正仿宋} +% \href{http://www.foundertype.com/index.php/FontInfo/index/id/137.html}{方正楷体} +% +% 各个系统的默认字体请参考。可以看到,不同系统上使用的字体有所差别,实际输出结果可能存在细微不同, 使用时请注意。例如,在Linux平台或者使用了Ubuntu后端的南大\hologo{TeX}上,宋体加粗效果更明显;另一方面,在Windows平台进行编译的效果更接近Word加粗\footnote{因为SimSun没有原生粗体,通过AutoFakeBold=2.17进行模仿},符合视觉习惯。 +% +% \end{function} +% +% +% \subsection{封面信息} +% +% \subsection{输入个人信息} +% +% \begin{function}{\njusetup} +% +% 定义了用于文档封面的诸多属性参数, +% 写作时修改相应字符串即可。注意不要有空行,否则可能报错 +% +% \end{function} +% +% 本科生可以参考如下列表输入个人信息。注意不能有空行,有空格的内容需要将空格替换为波浪线或者两端加上大括号 +% +% \begin{ctexexam} +% \njusetup { +% info = { +% TitleA = 一种使用南京大学\hologo{LaTeX}模版, +% TitleB = 编写毕业论文的经验性方法, +% Title* = {An Empirical Way of Composing Thesis with NJU \hologo{LaTeX} Template}, +% Grade = 2018, +% StudentID = 189114514, +% StudentName = 周煜华, +% StudentName* = Zhou~Yuhua, +% Department = 拉太赫科学与技术学院, +% Department* = School~of~\hologo{LaTeX}, +% Major = 拉太赫语言学, +% Major* = \hologo{LaTeX}~Linguistics, +% SupervisorA = 李成殿, +% SupervisorA*= Li~Chengdian, +% SupervisorATitle = 教授, +% SupervisorATitle* = Professor, +% SupervisorB = 孙赫弥, +% SupervisorB* = Sun~Hemi, +% SupervisorBTitle = 副教授, +% SupervisorBTitle* = Associate professor, +% SubmitDate = 2021年8月10日, +% } +% } +% \end{ctexexam} +% +% 研究生可以参考如下列表输入个人信息 +% +% \begin{ctexexam} +% \njusetup { +% info = { +% TitleA = 一种使用南京大学\hologo{LaTeX}模版, +% TitleB = 编写毕业论文的经验性方法, +% TitleC = (内容已经过时,详见说明手册), +% Title* = {An Empirical Way of Composing Thesis with NJU \hologo{LaTeX} Template}, +% Grade = 2018, +% StudentID = dz18114514, +% StudentName = 周煜华, +% StudentName* = Zhou~Yuhua, +% Department = 拉太赫科学与技术学院, +% Department* = School~of~\hologo{LaTeX}, +% Major = 拉太赫语言学, +% Major* = \hologo{LaTeX}~Linguistics, +% Field = 拉太赫语言在现当代的使用, +% Field* = Contemporary~Usage~of~the~\hologo{LaTeX}~Language, +% SupervisorA = 李成殿, +% SupervisorA*= Li~Chengdian, +% SupervisorATitle = 教授, +% SupervisorATitle* = Professor, +% SubmitDate = 2021年8月10日, +% SubmitDate* = {Aug 10, 2021}, +% DefendDate = 2021年9月19日, +% ReviewerChairman = 张晓山~教授, +% ReviewerA = 王瑞希~教授, +% ReviewerB = 郭德纲~副教授, +% ReviewerC = 华芈库~教授, +% ReviewerD = 戴菲菲~教授, +% Classification = 0175.2, +% SecurityLevel = 限制, +% UDC = 004.72, +% SupervisorContact = {拉太赫科学与技术学院 枝江市结丘路 19 号 114514}, +% } +% } +% \end{ctexexam} +% +% \subsection{摘要页} +% +% 摘要页一般不插入目录,默认只添加pdf书签。如确实有插入目录的需求,请在\texttt{abstract.sty}文件中定位到如下语句 +% +% 在使用\hologo{LuaLaTeX}编译时,研究生中文摘要页的标题会出现空格无下划线的问题,目前正在积极寻求解决方法。 +% +% {前言页} +% 使用\env{preface}环境定义 +% +% +% \subsection{正文格式} +% +% 本科生无页眉,页面编号居中位于页脚;研究生无页脚,页眉包括章节名和页面编号。 +% +% +% 对中文加下划线请使用xeCJKfntef包的CJKunderline命令代替uline,以解决中文的换行问题 +% +% {参考文献页} +% +% 需要使用biber手动编译才会显示,具体内容参考 +% +% {致谢页} +% 同前言,使用\env{acknowledgement}环境 +% +% {附录页} +% +% 附录放在|\appendix|命令后,以英文字母进行编号 +% +% \end{documentation} +% +% \begin{implementation} +% +% \section{代码实现} +% @@在l3docstrip中表示名空间,在生成cls时会被相应字段替换,譬如在njuthesis中@@=nju。 +% 尖括号包裹的|<*class>|||用来指定某段代码属于哪个文件。 +% +% \begin{macrocode} +%<@@=nju> +%<*class> +\LoadClass[ + a4paper, + twoside, + UTF8, + scheme=chinese, +% \end{macrocode} +% +% 关于行距,\hologo{LaTeX}默认1.2行距,word默认行距是1.3,要求1.5倍word行距,故 +% \[ 1.5\times\frac{1.3}{1.2} = 1.625\] +% \begin{macrocode} + linespread=1.625, + fontset=none, + zihao=-4 + ]{ctexbook}[2018/04/01] +% \end{macrocode} +% +% 宏包\pkg{l3keys2e}用于配置模板选项。 +% \begin{macrocode} +\RequirePackage{l3keys2e} +% \end{macrocode} +% 用于存储学位名称的全局变量,注意宏的命名,l代表局部变量,g代表全局变量 +% \begin{macrocode} +\tl_new:N \l_@@_info_degree_tl +\tl_new:N \l_@@_info_type_tl +% \end{macrocode} +% +% 是否需要国家图书馆封面的设置 +% \begin{macrocode} +\keys_define:nn { nju } +{ + nlcover .bool_set:N = \g_@@_nlcover_bool, + nlcover .initial:n = false, +} +% \end{macrocode} +% +% 学位信息的设置 +% \begin{macrocode} +\keys_define:nn { nju } +{ + degree .choices:nn = + { ug, mg, mg, phd } + { \tl_set_eq:NN \l_@@_info_degree_tl \l_keys_choice_tl }, + degree .initial:n = ug, + type .choices:nn = + { thesis, design } + { \tl_set_eq:NN \l_@@_info_type_tl \l_keys_choice_tl }, + type .initial:n = thesis, +} +% \end{macrocode} +% +% \subsection{个人信息} +% 输入个人信息的区域。 +% \begin{macrocode} +\keys_define:nn { nju } +{ + info.meta:nn = { nju / info } { #1 } +} +% \end{macrocode} +% +% 题目 +% \begin{macrocode} +\keys_define:nn { nju / info } +{ + TitleA .tl_set:N = \l_@@_info_title_a_tl, + TitleB .tl_set:N = \l_@@_info_title_b_tl, + TitleC .tl_set:N = \l_@@_info_title_c_tl, + Title* .tl_set:N = \l_@@_info_title_en_tl, +} +% \end{macrocode} +% +% 年级、学号、姓名 +% \begin{macrocode} +\keys_define:nn { nju / info } +{ + Grade .tl_set:N = \l_@@_info_grade_tl, + StudentID .tl_set:N = \l_@@_info_id_tl, + StudentName .tl_set:N = \l_@@_info_author_tl, + StudentName* .tl_set:N = \l_@@_info_author_en_tl, +} +% \end{macrocode} +% +% 院系、专业、方向 +% \begin{macrocode} +\keys_define:nn { nju / info } +{ + Department .tl_set:N = \l_@@_info_dept_tl, + Department* .tl_set:N = \l_@@_info_dept_en_tl, + Major .tl_set:N = \l_@@_major_tl, + Major* .tl_set:N = \l_@@_major_en_tl, + Field .tl_set:N = \l_@@_field_tl, + Field* .tl_set:N = \l_@@_field_en_tl, +} +% \end{macrocode} +% +% 导师 +% +% \begin{macrocode} +\keys_define:nn { nju / info } +{ + SupervisorA .tl_set:N = \l_@@_info_supv_a_tl, + SupervisorA* .tl_set:N = \l_@@_info_supv_a_en_tl, + SupervisorATitle .tl_set:N = \l_@@_info_supv_a_title_tl, + SupervisorATitle* .tl_set:N = \l_@@_info_supv_a_title_en_tl, +} +% \end{macrocode} +% +% 第二导师 +% +% \begin{macrocode} +\keys_define:nn { nju / info } +{ + SupervisorB .tl_set:N = \l_@@_info_supv_b_tl, + SupervisorB* .tl_set:N = \l_@@_info_supv_b_en_tl, + SupervisorBTitle .tl_set:N = \l_@@_info_supv_b_title_tl, + SupervisorBTitle* .tl_set:N = \l_@@_info_supv_b_title_en_tl, +} +% \end{macrocode} +% +% 提交日期 +% \begin{macrocode} +\keys_define:nn { nju / info } +{ + SubmitDate .tl_set:N = \l_@@_submit_date_tl, + SubmitDate* .tl_set:N = \l_@@_submit_date_en_tl, +} +% \end{macrocode} +% +% 答辩 +% \begin{macrocode} +\keys_define:nn { nju / info } +{ + DefendDate .tl_set:N = \l_@@_defend_date_tl, + ReviewerChairman .tl_set:N = \l_@@_info_chairman_tl, + ReviewerA .tl_set:N = \l_@@_info_reviewer_a_tl, + ReviewerB .tl_set:N = \l_@@_info_reviewer_b_tl, + ReviewerC .tl_set:N = \l_@@_info_reviewer_c_tl, + ReviewerD .tl_set:N = \l_@@_info_reviewer_d_tl, +} +% \end{macrocode} +% +% 国家图书馆封面相关 +% \begin{macrocode} +\keys_define:nn { nju / info } +{ + Classification .tl_set:N = \l_@@_info_classif_tl, + SecurityLevel .tl_set:N = \l_@@_info_seclv_tl, + UDC .tl_set:N = \l_@@_info_udc_tl, + SupervisorContact .tl_set:N = \l_@@_info_supv_cont_tl, +} +% \end{macrocode} +% 定义用于设置个人信息的命令 +% \begin{macrocode} +\NewDocumentCommand \njusetup { m } +{ \keys_set:nn { nju } { #1 } } +% \end{macrocode} +% +% 使用\pkg{geometry}设置页边距。 +% \begin{macrocode} +\RequirePackage[ + top=2.5cm, + bottom=2.5cm, + left=3.2cm, + right=3.2cm +]{geometry} +% \end{macrocode} +% +% +% \begin{macrocode} +\RequirePackage{xparse} +\RequirePackage{titletoc} % 修改目录内标题格式 +\RequirePackage[hyphens]{url} % generate better linebreaks in the url +% \RequirePackage[normalem]{ulem} % 绘制下划线 +\RequirePackage{dashundergaps} +\RequirePackage{setspace} +\RequirePackage{lastpage} +\RequirePackage{emptypage} % 清除空白页的页码 +% \end{macrocode} +% +% +% \begin{macrocode} +\RequirePackage{listings} % 代码环境 +\RequirePackage{enumitem} % 用于修改列表环境 +\RequirePackage{caption} +\RequirePackage{floatrow} % 用于图表等页面元素的定位 +\RequirePackage{booktabs} % 用于绘制三线表 +\RequirePackage{multirow} % Cells occupying multiple rows in tables +\RequirePackage{multicol} % Multiple columns in dictionary +\RequirePackage{siunitx} % 用于书写单位符号 +% \end{macrocode} +% +% 用于化学 +% \begin{macrocode} +\RequirePackage[version=4]{mhchem} % 用于绘制分子式 +% \end{macrocode} +% +% 用于生成可以被插入书签的LaTeX logo,TODO: 使用hologo创建|latex{}|命令 +% \begin{macrocode} +\RequirePackage{hologo} +% \end{macrocode} +% +% +% \begin{macrocode} +% Required to prevent page break right after a sectioning command +% \RequirePackage{needspace} + +% \RequirePackage{xspace} % Better print trailing whitespace +% \end{macrocode} +% +% 针对编译引擎,使用不同的宏包重构下划线命令 +% \begin{macrocode} +\sys_if_engine_xetex:T +{ + \RequirePackage{microtype} + + % 加中文下划线,不能用于lualatex + \RequirePackage{xeCJKfntef} + \cs_new:Npn \nju_underline:n #1 {\CJKunderline{#1}} +} +\sys_if_engine_luatex:T{ + % 加中文下划线 + \RequirePackage{lua-ul} + \cs_new:Npn \nju_underline:n #1 {\underLine{#1}} + + % emoji支持 + % \RequirePackage{emoji} + % \setemojifont{Segoe~UI~Emoji} % windows + % \setemojifont{Apple~Color~Emoji} % macos + % \setemojifont{Noto~Color~Emoji} + % For windows. + % Shipped with the best `grinning-face-with-sweat' support. +} +% \end{macrocode} +% +% 生成用于测试的大段无意义英文文字 +% \begin{macrocode} +\RequirePackage{blindtext} +\RequirePackage{zhlipsum} +% \end{macrocode} +% +% 加载以后展示内容边界 +% \begin{macrocode} +% \RequirePackage{showframe} +% \end{macrocode} +% +% 数学 +% \begin{macrocode} +\RequirePackage{amsmath} % Must be loaded before unicode-math +\RequirePackage{amsthm} % Mathematical environments +\RequirePackage{mathtools} % Mathematical tools to use with amsmath +\RequirePackage{thmtools} % Theorem styles +\RequirePackage[ + warnings-off={% 消除与mathtools合用产生的警告 + mathtools-colon, + mathtools-overbracket} + ]{unicode-math} % Math fonts in xetex or luatex +% \end{macrocode} +% +% +% \begin{macrocode} +\RequirePackage{graphicx} +\DeclareGraphicsExtensions{.pdf,.eps,.jpg,.png} +\graphicspath{{figure/}} % 图片路径 +\RequirePackage{wrapfig} % Wrap text around figures +% \end{macrocode} +% +% 必须以该顺序加载以下三个包 +% \begin{macrocode} +% \RequirePackage{varioref} +\RequirePackage[hidelinks,bookmarksnumbered=true]{hyperref} +\RequirePackage[capitalise,nameinlink,noabbrev]{cleveref} +% \end{macrocode} +% +% \subsection{字体设置} +% +% 加载设置字体所需的包\pkg{fontspec} +% \begin{macrocode} +\RequirePackage{fontspec} +% \end{macrocode} +% +% +% +% \begin{variable}{\g_@@_latin_fontset_tl,\g_@@_cjk_fontset_tl} +% 用于存储所使用字体名称的全局变量 +% \begin{macrocode} +\tl_new:N \g_@@_latin_fontset_tl +\tl_new:N \g_@@_cjk_fontset_tl +% \end{macrocode} +% \end{variable} +% +% 定义字体选项 +% \begin{macrocode} +\keys_define:nn { nju } +{ + customlatinfont .choices:nn = + { gyre, macos, windows, null } + { \tl_set_eq:NN \g_@@_latin_fontset_tl \l_keys_choice_tl }, + customchinesefont .choices:nn = + { fandol, founder, macos, noto, windows, null } + { \tl_set_eq:NN \g_@@_cjk_fontset_tl \l_keys_choice_tl }, +} +% \end{macrocode} +% +% \begin{macro}{\ProcessKeysOptions} +% 在定义完全部设置以后从tex文件导言区输入参数 +% \begin{macrocode} +\ProcessKeysOptions { nju } +% \end{macrocode} +% \end{macro} +% +% 如果未进行设置则使用系统默认字体覆盖输入参数 +% +% \begin{variable}{\g_@@_load_system_fontset_bool} +% 用于判断是否需要载入系统预装字体的全局变量 +% \begin{macrocode} +\bool_new:N \g_@@_load_system_fontset_bool +% \end{macrocode} +% \end{variable} +% +% 判断用户是否自定义了中英文字体,如果其中任意一种未被定义, +% 则使用系统预装字体覆盖字体选项 +% \begin{macrocode} +\tl_if_empty:NTF \g_@@_latin_fontset_tl + { \bool_gset_true:N \g_@@_load_system_fontset_bool } +{ + \tl_if_empty:NT \g_@@_cjk_fontset_tl + { \bool_gset_true:N \g_@@_load_system_fontset_bool } +} +\bool_if:NT \g_@@_load_system_fontset_bool +{ + % 检测是否是 Windows + \sys_if_platform_windows:TF + { + \tl_set:Nn \g_@@_latin_fontset_tl { windows } + \tl_set:Nn \g_@@_cjk_fontset_tl { windows } + } + { + % 检测是否是 macOS + \ctex_if_platform_macos:TF + { + \tl_set:Nn \g_@@_latin_fontset_tl { macos } + \tl_set:Nn \g_@@_cjk_fontset_tl { macos } + } + % 其余系统一律使用自由字体 + { + \tl_set:Nn \g_@@_latin_fontset_tl { gyre } + \tl_set:Nn \g_@@_cjk_fontset_tl { fandol } + } + } +} +% \end{macrocode} +% +% 接下来逐个定义所需要使用的字符集 +% +% \begin{macro}{\@@_load_latin_font_windows:} +% Windows 西文字体 +% \begin{macrocode} +\cs_new_protected:Npn \@@_load_latin_font_windows: +{ + \setmainfont{Times~New~Roman} + \setsansfont{Arial} + \setmonofont{Courier~New}[Scale=MatchLowercase] +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\@@_load_latin_font_macos:} +% macOS 西文字体 +% \begin{macrocode} +\cs_new_protected:Npn \@@_load_latin_font_macos: +{ +\setmainfont{Times~New~Roman} +\setsansfont{Arial} +\setmonofont{Menlo}[Scale=MatchLowercase] +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\@@_load_latin_font_gyre:} +% 开源的 gyre 西文字体 +% \begin{macrocode} +\cs_new_protected:Npn \@@_load_latin_font_gyre: +{ +\setmainfont{texgyretermes}[ + Extension=.otf, + UprightFont=*-regular, + BoldFont=*-bold, + ItalicFont=*-italic, + BoldItalicFont=*-bolditalic] +\setsansfont{texgyreheros}[ + Extension=.otf, + UprightFont=*-regular, + BoldFont=*-bold, + ItalicFont=*-italic, + BoldItalicFont=*-bolditalic] +\setmonofont{texgyrecursor}[ + Extension=.otf, + UprightFont=*-regular, + BoldFont=*-bold, + ItalicFont=*-italic, + BoldItalicFont=*-bolditalic, + Scale=MatchLowercase, + Ligatures=CommonOff] +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_load_cjk_font_windows:} +% Windows 中文字体 +% \begin{macrocode} +\cs_new_protected:Npn \@@_load_cjk_font_windows: +{ + \setCJKmainfont{SimSun}[ + AutoFakeBold=2.17, + ItalicFont=KaiTi] + \setCJKsansfont{SimHei} + \setCJKmonofont{FangSong} + \setCJKfamilyfont{zhsong}{SimSun}[AutoFakeBold=2.17] + \setCJKfamilyfont{zhhei}{SimHei} + \setCJKfamilyfont{zhfs}{FangSong} + \setCJKfamilyfont{zhkai}{KaiTi}[AutoFakeBold=2.17] + \setCJKfamilyfont{zhnewhei}{Microsoft~YaHei}[ + BoldFont=Microsoft~YaHei~Bold] +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\@@_load_cjk_font_macos:} +% macOS 字体 +% 参考CTeX手册第9节 LuaLATEX 下的中文支持方式解决issue问题 +% \begin{macrocode} +\cs_new_protected:Npn \@@_load_cjk_font_macos: +{ + % 移除 does not contain script "CJK" 警告 + \msg_redirect_name:nnn {fontspec} {no-script} {info} + \setCJKmainfont{Songti~SC~Light}[ + BoldFont=Songti~SC~Bold, + ItalicFont=Kaiti~SC, + BoldItalicFont=Kaiti~SC~Bold] + \setCJKsansfont{Heiti~SC~Light}[BoldFont=Heiti~SC~Medium] + \setCJKmonofont{STFangsong} + \setCJKfamilyfont{zhsong}{Songti~SC~Light}[BoldFont=Songti~SC~Bold] + \setCJKfamilyfont{zhhei}{Heiti~SC~Light}[BoldFont=Heiti~SC~Medium] + \setCJKfamilyfont{zhfs}{STFangsong} + \setCJKfamilyfont{zhkai}{Kaiti~SC} + [ + BoldFont=Kaiti~SC~Bold, + % AlternateFont = + % { + % {character range1} {alternate font name1} + % {alternate font features2} , + % ...... + % } + ] + \setCJKfamilyfont{zhnewhei}{PingFang~SC} +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\@@_load_cjk_font_fandol:} +% Fandol 字体 +% \begin{macrocode} +\cs_new_protected:Npn \@@_load_cjk_font_fandol: +{ + % 移除 does not contain script "CJK" 警告 + \msg_redirect_name:nnn {fontspec} {no-script} {info} + \setCJKmainfont{FandolSong-Regular}[ + Extension=.otf, + BoldFont=FandolSong-Bold, + ItalicFont=FandolKai-Regular] + \setCJKsansfont{FandolHei-Regular}[ + Extension=.otf, + BoldFont=FandolHei-Bold] + \setCJKmonofont{FandolFang-Regular}[Extension=.otf] + \setCJKfamilyfont{zhsong}{FandolSong-Regular}[ + Extension=.otf, + BoldFont=FandolSong-Bold] + \setCJKfamilyfont{zhhei}{FandolHei-Regular}[ + Extension=.otf, + BoldFont=FandolHei-Bold] + \setCJKfamilyfont{zhfs}{FandolFang-Regular}[Extension=.otf] + \setCJKfamilyfont{zhkai}{FandolKai-Regular}[ + Extension=.otf, + AutoFakeBold=2.17] +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\@@_load_cjk_font_founder:} +% 方正字符集(简繁扩展) +% \begin{macrocode} +\cs_new_protected:Npn \@@_load_cjk_font_founder: +{ + \setCJKmainfont{FZSSK}[% 方正书宋 + Extension=.ttf, + BoldFont=FZXBSK,% 方正小标宋 + ItalicFont=FZKTK]% 方正楷体 + \setCJKsansfont{FZXH1K}[% 方正细黑一 + Extension=.ttf, + BoldFont=FZHTK]% FZHTK 方正黑体 + \setCJKmonofont{FZFSK}[Extension=.ttf]% 方正仿宋 + \setCJKfamilyfont{zhsong} + {FZSSK}[ + Extension=.ttf, + BoldFont=FZXBSK] + \setCJKfamilyfont{zhhei} + {FZHTK}[ + Extension=.ttf, + AutoFakeBold=2.17] + \setCJKfamilyfont{zhfs} + {FZFSK}[Extension=.ttf] + \setCJKfamilyfont{zhkai} + {FZKTK}[Extension=.ttf] + \setCJKfamilyfont{zhnewhei} + {FZYouHK_508R}[% 方正悠黑508R + Extension=.ttf, + BoldFont=FZYouHK_511M]% 方正悠黑511M +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\@@_load_cjk_font_noto:} +% 思源字体 +% \begin{macrocode} +\cs_new_protected:Npn \@@_load_cjk_font_noto: +{ + % 思源宋体 + \setCJKmainfont[ + UprightFont=NotoSerifCJKsc-Regular, + BoldFont=NotoSerifCJKsc-Bold, + ItalicFont=NotoSerifCJKsc-Regular, + BoldItalicFont=NotoSerifCJKsc-Bold, + ItalicFeatures=FakeSlant, + BoldItalicFeatures=FakeSlant]{Noto~Serif~CJK~SC} + + % 思源黑体 + \setCJKsansfont[ + UprightFont=NotoSansCJKsc-Regular, + BoldFont=NotoSansCJKsc-Bold, + ItalicFont=NotoSansCJKsc-Regular, + BoldItalicFont=NotoSansCJKsc-Bold, + ItalicFeatures=FakeSlant, + BoldItalicFeatures=FakeSlant]{Noto~Sans~CJK~SC} + + % 包含于思源黑体 + \setCJKmonofont[ + UprightFont=NotoSansMonoCJKsc-Regular, + BoldFont=NotoSansMonoCJKsc-Bold, + ItalicFont=NotoSansMonoCJKsc-Regular, + BoldItalicFont=NotoSansMonoCJKsc-Bold, + ItalicFeatures=FakeSlant, + BoldItalicFeatures=FakeSlant]{Noto~Sans~Mono~SC} + + \setCJKfamilyfont{zhsong}{Noto~Serif~CJK~SC} + \setCJKfamilyfont{zhhei}{Noto~Sans~CJK~SC} + \setCJKfamilyfont{zhfs}{方正仿宋简体}[AutoFakeBold=2.17] + \setCJKfamilyfont{zhkai}{方正楷体简体}[AutoFakeBold=2.17] +} +% \end{macrocode} +% \end{macro} +% +% 载入设置的字体 +% \begin{macrocode} +\cs_new_protected:Npn \@@_load_font: +{ + \use:c { @@_load_latin_font_ \g_@@_latin_fontset_tl : } + \use:c { @@_load_cjk_font_ \g_@@_cjk_fontset_tl : } + + \NewDocumentCommand\songti{}{\CJKfamily{zhsong}} + \NewDocumentCommand\heiti{}{\CJKfamily{zhhei}} + \NewDocumentCommand\fangsong{}{\CJKfamily{zhfs}} + \NewDocumentCommand\kaishu{}{\CJKfamily{zhkai}} +} +\@@_load_font: +% \end{macrocode} +% +% 设置数学字体 (XITS, 或者 STIX, 与 Times New Roman 最为相近) +% \begin{macrocode} +% \setmathfont{STIXTwoMath-Regular}[Extension = .otf] +\setmathfont{XITSMath-Regular}[ + BoldFont = XITSMath-Bold, + Extension = .otf] +% \end{macrocode} +% +% +% \subsection{页面样式} +% +% \subsubsection{页眉页脚} +% +% +% \begin{macrocode} +\RequirePackage{fancyhdr} % 调整页眉页脚 +% 本科生页眉页脚 +\fancypagestyle{njuplain}{% + \fancyhead{} + \fancyfoot[C]{\zihao{5}\thepage} % 页脚居中 五号新罗马体数字 +} +% \end{macrocode} +% +% +% \begin{macrocode} +% TODO: 研究生页眉页脚 +\fancypagestyle{njuheadings}{% + \fancyhead{} + \fancyfoot[C]{\zihao{5}\thepage} +} +% \end{macrocode} +% +% +% \begin{macrocode} +\str_if_eq:NNTF {\l_@@_info_degree_tl} { ug } +{ + % the header line + \tl_set:Nn \headrulewidth {0pt} + % the footer line + \tl_set:Nn \footrulewidth {0pt} + + \AtBeginDocument{\pagestyle{njuplain}} % 本科无页眉页脚 +} +{ + % the header line + \tl_set:Nn \headrulewidth {1pt} + % the footer line + \tl_set:Nn \footrulewidth {0pt} + + % \AtBeginDocument{\pagestyle{njuplain}} % 无页眉页脚 + \AtBeginDocument{\pagestyle{headings}} % 研究生有页眉页脚 +} +% \end{macrocode} +% +% +% \begin{macrocode} +% ctex格式设置 +% 目录标题 三号宋体加粗 +% 各部分标题 四号黑体 +\ctexset{ + contentsname = 目录, + listfigurename = 插图清单, + listtablename = 表格清单, + chapter/format = \zihao{4}\heiti\centering, + chapter/beforeskip = 10pt, + chapter/afterskip = 60pt, + section/format = \zihao{4}\heiti\raggedright, + subsection/format = \zihao{4}\heiti\raggedright, + subsubsection/format = \zihao{4}\heiti\raggedright +} + +% 重定义目录中章节标题样式 +% 目录内容中章的标题 四号黑体 +% 目录中其他内容 小四号宋体 +\titlecontents{chapter}% 标题级别 + [5em]% 标题左间距 + {\heiti\zihao{4}\vspace{10pt}}% 标题格式 + {\contentslabel{4em}}% 标题标志 + {\hspace*{-4em}}% 无序号标题 + {~\titlerule*[0.6pc]{$.$}~\contentspage}% 指引线与页码 + + \titlecontents{section} + [5em] + {\zihao{-4}\vspace{0pt}} + {\contentslabel{2.5em}} + {\hspace*{-4em}} + {~\titlerule*[0.6pc]{$.$}~\contentspage} + +\titlecontents{subsection} + [8em] + {\zihao{-4}\vspace{0pt}} + {\contentslabel{3em}} + {\hspace*{-4em}} + {~\titlerule*[0.6pc]{$.$}~\contentspage} +% \end{macrocode} +% +% +% \begin{macrocode} +\cs_set:Npn \CTEX@addtocline #1#2 +{ + \addcontentsline { toc } {#1} + { \use:c { CTEX@#1@tocline } {#1} {#2} } +} +% \end{macrocode} +% +% +% \begin{macrocode} +% 目录页面格式修改 +\cs_new:Npn \nju_tocpagestyle:nnn #1 #2 #3 +{ + \newpage + \hspace{0pt} + \vskip 10pt + \begin{center} + \mbox{\songti\bf\zihao{3}{#1}} % 目录页面标题 + \phantomsection + \addcontentsline{toc}{chapter}{#2} % 插入目录 + \end{center} + \vskip 40pt + \@starttoc{#3}% + \cleardoublepage +} +% \end{macrocode} +% +% +% \begin{macrocode} +\tl_set:Nn \tableofcontents +{ + \nju_tocpagestyle:nnn {目\hspace{2em}录}{\contentsname}{toc} +} +\tl_set:Nn \listoffigures +{ + \nju_tocpagestyle:nnn {\listfigurename}{\listfigurename}{lof} +} +\tl_set:Nn \listoftables +{ + \nju_tocpagestyle:nnn {\listtablename}{\listtablename}{lot} +} +% \end{macrocode} +% +% \begin{environment}{preface} +% +% \begin{macrocode} +% 定制前言、致谢环境 +\NewDocumentEnvironment{preface}{} +{% + \chapter*{前言} + \addcontentsline{toc}{chapter}{前言} +}{} +% \end{macrocode} +% \end{environment} +% +% \begin{environment}{acknowledgement} +% 单独制作的致谢页。 +% \begin{macrocode} +\NewDocumentEnvironment{acknowledgement}{} +{% + \chapter*{致谢} + \addcontentsline{toc}{chapter}{致谢} +}{} +% \end{macrocode} +% \end{environment} +% +% +% \begin{macrocode} +% biblatex设置 +\RequirePackage[ + style=gb7714-2015, + %style=numeric-comp, + %citestyle=authortitle-icomp, + % citestyle=numeric-comp, + %bibstyle=authoryear, + % bibstyle=numeric, + sorting=none, + %sorting=nyt, + %sortcites=true, + %autocite=footnote, + backend=biber, % Compile the bibliography with biber + hyperref=true, + backref=false, + citecounter=true, + pagetracker=true, + citetracker=true, + ibidtracker=context, + autopunct=true, + autocite=plain, + % gbpub=false, % Uncomment if you do NOT want '[S.l. : s.n.]' + % in reference entries, GitHub Issue (#47) + % gbnamefmt=lowercase, % Uncomment if you do NOT want uppercase author + % names in reference entries, GitHub Issue (#23) +]{biblatex} +% \end{macrocode} +% +% +% \begin{macrocode} +% Remove some unwanted entries from the bibliography +\AtEveryBibitem{ + \clearfield{abstract} + \clearfield{issn} + \clearfield{isbn} + \clearfield{archivePrefix} + \clearfield{arxivId} + \clearfield{pmid} + \clearfield{eprint} + \ifentrytype{online}{}{\ifentrytype{misc}{}{\clearfield{url}}} + % \ifentrytype{book}{\clearfield{doi}}{} +} +% \end{macrocode} +% +% +% \begin{macrocode} +% 修改标签名称 +\crefdefaultlabelformat{#2#1#3\,} % 默认在名称后面添加空格 + +\crefname{figure}{图}{图} +\crefname{table}{表}{表} +% \crefname{equation}{公式}{公式} +\crefformat{equation}{公式~#2#1#3~} % 删除公式编号的括号 + +\crefformat{chapter}{第#2#1#3章} +\crefformat{section}{第~#2#1#3~节} +\crefformat{subsection}{第~#2#1#3~小节} +\crefformat{subsubsection}{第~#2#1#3~小节} +% \crefname{chapter}{§}{§} +% \crefname{section}{§}{§} +% \crefname{subsection}{§}{§} +% \crefname{subsubsection}{§}{§} +\crefname{appendix}{附录}{附录} + +% \crefname{definition}{定义}{定义} +% \crefname{axiom}{公理}{公理} +% \crefname{property}{性质}{性质} +% \crefname{proposition}{命题}{命题} +% \crefname{lemma}{引理}{引理} +% \crefname{corollary}{推论}{推论} +% \crefname{remark}{注解}{注解} +% \crefname{condition}{条件}{条件} +% \crefname{conclusion}{结论}{结论} +% \crefname{assumption}{假设}{假设} +% \end{macrocode} +% +% soifjsojfosjfos +% \begin{macrocode} +% 图表位置调整 +\floatsetup[lstlisting]{ % Captions for lstlistings + capposition=above,% + margins=centering,% + floatwidth=\textwidth% +} +\floatsetup[figure]{ % Captions for figures + capposition=bottom,% + margins=centering,% + floatwidth=\textwidth% +} +\floatsetup[table]{ % Captions for tables + capposition=above,% + margins=centering,% + floatwidth=\textwidth% +} +% \end{macrocode} +% +% +% \begin{macrocode} +% 代码样式 +\lstset{ + basicstyle=\ttfamily\linespread{1}\small\selectfont, + keywordstyle=\bfseries,% use bold style for keywords + commentstyle=\rmfamily\itshape,% use italic style for comments + stringstyle=\ttfamily,% 字符串风格 + flexiblecolumns,% ? + numbers=left,% left-aligned numbering + showspaces=false,% hide markers for spaces + showstringspaces=false, + captionpos=t,% place the caption at the top + % frame=lrtb,% show all four sides of the frame + % linewidth=.8\textwidth, + % breakatwhitespace=true, + breaklines=true, + xleftmargin=2em,xrightmargin=2em,% set the width of the code environment +} +% \end{macrocode} +% +% +% \begin{macrocode} +\lstdefinestyle{LaTeX}{ + language=TeX, + morekeywords={ + begin, caption, label, mathrm, frac, + toprule, midrule, bottomrule, includegraphics} +} +% \end{macrocode} +% +% +% \begin{macrocode} +% 图表标题样式 +\DeclareCaptionFont{songticap}{\zihao{5}\bf\songti} +\captionsetup{ + font=small,% + labelfont=songticap, + textfont=songticap, + strut=no,% + hypcap=true, % Links point to the top of the figure + % indention=0pt, % Suppress indentation + % % parindent=0pt, % Suppress space between paragraphs + aboveskip=6pt, % Increase the space between the figure and the caption + belowskip=6pt, % Increase the space between the caption and the table +} +% \end{macrocode} +% +% +% \begin{macrocode} +% list configuration +\renewcommand{\labelitemi}{\tiny$\blacktriangleright$} +\renewcommand{\labelitemii}{\textbullet} + +\setlist[itemize]{noitemsep} +\setlist[enumerate]{noitemsep} +\setlist[description]{noitemsep} +% \end{macrocode} +% +% +% \begin{macrocode} +% 数学环境 +\declaretheoremstyle[ + %spaceabove=.5\thm@preskip, + %spacebelow=.5\thm@postskip, + headfont=\bf\songti,%\scshape, + notefont=\songti,% notebraces={ (}{)}, + bodyfont=\songti, + %headformat={\NAME\space\NUMBER\space\NOTE}, + headpunct={}, + %postheadspace={.5em plus .1em minus .1em}, + %prefoothook={\hfill\qedsymbol} + ]{njuthm} + +\theoremstyle{njuthm} +% \end{macrocode} +% +% +% \begin{macrocode} +\let\oldproofname=\proofname +\renewcommand*{\proofname}{\rm\bf\songti{\oldproofname}} % 修改证明环境标题 +% \end{macrocode} +% +% +% \begin{macrocode} +\declaretheorem[ + name=算法, + style=njuthm, + refname={算法,算法}, + Refname={算法,算法}, + % numberwithin=section, +]{algorithm} +\declaretheorem[ + name=假设, + style=njuthm, + refname={假设,假设}, + Refname={假设,假设}, + % numberwithin=section, +]{assumption} +\declaretheorem[ + name=公理, + style=njuthm, + refname={公理,公理}, + Refname={公理,公理}, + % numberwithin=section, +]{axiom} +\declaretheorem[ + name=结论, + style=njuthm, + refname={结论,结论}, + Refname={结论,结论}, + % numberwithin=section, +]{conclusion} +\declaretheorem[ + name=条件, + style=njuthm, + refname={条件,条件}, + Refname={条件,条件}, + % numberwithin=section, +]{condition} +\declaretheorem[ + name=推论, + style=njuthm, + refname={推论,推论}, + Refname={推论,推论}, + % numberwithin=section, +]{corollary} +\declaretheorem[ + name=定义, + style=njuthm, + refname={定义,定义}, + Refname={定义,定义}, + % numberwithin=section, +]{definition} +\declaretheorem[ + name=例, + style=njuthm, + refname={例,例}, + Refname={例,例}, + % numberwithin=section, +]{example} +\declaretheorem[ + name=引理, + style=njuthm, + refname={引理,引理}, + Refname={引理,引理}, + % numberwithin=section, +]{lemma} +\declaretheorem[ + name=性质, + style=njuthm, + refname={性质,性质}, + Refname={性质,性质}, + % numberwithin=section, +]{property} +\declaretheorem[ + name=命题, + style=njuthm, + refname={命题,命题}, + Refname={命题,命题}, + % numberwithin=section, +]{proposition} +\declaretheorem[ + name=注解, + style=njuthm, + refname={注解,注解}, + Refname={注解,注解}, + % numberwithin=section, +]{remark} +\declaretheorem[ + name=定理, + style=njuthm, + refname={定理,定理}, + Refname={定理,定理}, + numberwithin=section, +]{theorem} +% \end{macrocode} +% +% \subsection{封面绘制} +% \begin{macrocode} +% 拼合标题 +\tl_const:Nn \l_@@_info_title_tl +{ + \l_@@_info_title_a_tl + \l_@@_info_title_b_tl + \l_@@_info_title_c_tl +} +% \end{macrocode} +% 双导师的处理 +%% \begin{variable}{\l_@@_info_supv_full_tl,\l_@@_info_supv_full_en_tl} +% 用于存储导师姓名加职称的变量,旧版编译器不支持字符串中含有|\hspace{.5em}|这样的空白空间命令 +% \begin{macrocode} +\tl_new:N \l_@@_info_supv_full_tl +\tl_new:N \l_@@_info_supv_full_en_tl +% \end{macrocode} +% \end{variable} +% +% 拼合导师 +% \begin{macrocode} +\tl_set:Nn \l_@@_info_supv_full_tl +{ + \l_@@_info_supv_a_tl\ + \l_@@_info_supv_a_title_tl\ \ + \l_@@_info_supv_b_tl\ + \l_@@_info_supv_b_title_tl +} +\tl_set:Nn \l_@@_info_supv_full_en_tl +{ + \l_@@_info_supv_a_en_tl\ + \l_@@_info_supv_a_title_en_tl\ \ + \l_@@_info_supv_b_en_tl\ + \l_@@_info_supv_b_title_en_tl +} +% \end{macrocode} +% \begin{variable}{\c_@@_name_degree_tl,\c_@@_name_degree_en_tl} +% 用于存储学位名称的变量 +% \begin{macrocode} +\tl_new:N \c_@@_name_degree_tl +\tl_new:N \c_@@_name_degree_en_tl +% \end{macrocode} +% \end{variable} +% +% 判断学位进行命令定义 +% \begin{macrocode} +\str_if_eq:NNTF {\l_@@_info_degree_tl} { ug } +{ + % 本科 + \tl_const:Nn \l_@@_name_diploma_tl { 本\hfill 科\hfill } + \tl_const:Nn \c_@@_name_title_tl { 题\hfill 目 } + + \tl_const:Nn \c_@@_cover_uline_len_a_tl { 250pt } + \tl_const:Nn \c_@@_cover_uline_len_b_tl { 90pt } + \tl_const:Nn \c_@@_cover_uline_font_tl { \songti } + \tl_const:Nn \c_@@_cover_uline_style_tl { \bf } + \tl_const:Nn \c_@@_cover_uline_bskip_tl {} + + \tl_const:Nn \c_@@_cover_box_len_tl { 4.2em } + + % 本科强制不打印国家图书馆封面 + \bool_set_false:N \g_@@_nlcover_bool +} +{ + % 本科以外都是研究生 + \tl_const:Nn \l_@@_name_diploma_tl { 研\hfill 究\hfill 生\hfill } + \tl_const:Nn \c_@@_name_title_tl { 论\hfill 文\hfill 题\hfill 目 } + + \tl_const:Nn \c_@@_cover_uline_len_a_tl { 250pt } + \tl_const:Nn \c_@@_cover_uline_len_b_tl { 14em } + \tl_const:Nn \c_@@_cover_uline_font_tl { \kaishu } + \tl_const:Nn \c_@@_cover_uline_style_tl {} + \tl_const:Nn \c_@@_cover_uline_bskip_tl { \hspace{1em} } + + \tl_const:Nn \c_@@_cover_box_len_tl { 6em } + + % 研究生学位名称 + \str_if_eq:NNTF { \l_@@_info_degree_tl } { phd } + { + \tl_set:Nn \c_@@_name_degree_tl { 博士 } + \tl_set:Nn \c_@@_name_degree_en_tl { Doctor~of~Philosophy } + } + { + \tl_set:Nn \c_@@_name_degree_en_tl { Master } + \str_if_eq:NNTF { \l_@@_info_degree_tl } { mg } + { \tl_set:Nn \c_@@_name_degree_tl { 硕士 } } + { \tl_set:Nn \c_@@_name_degree_tl { 硕士专业 } } + } +} +% \end{macrocode} +% +% \begin{macro}{\@@_cover_uline_a:n} +% 在封面绘制下划线 +% \begin{macrocode} +\cs_new:Npn \@@_cover_uline_a:n #1 +{ + \uline{\makebox[\c_@@_cover_uline_len_a_tl] + {\rm\c_@@_cover_uline_font_tl #1 }} +} +\cs_new:Npn \@@_cover_uline_b:n #1 +{ + \uline{\makebox[\c_@@_cover_uline_len_b_tl] + {\rm\c_@@_cover_uline_font_tl #1 }} +} +\cs_new:Npn \@@_cover_uline_nl:nn #1 #2 +{ + \uline{\makebox[#1] + {\rm\c_@@_cover_uline_font_tl #2 }} +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\@@_cover_box:n} +% 封面表格边框 +% \begin{macrocode} +\cs_new:Npn \@@_cover_box:n #1 +{ + \makebox[\c_@@_cover_box_len_tl][s]{ + #1\c_@@_cover_uline_bskip_tl} +} +% \end{macrocode} +% \end{macro} +% +% 判断类型 +% +% \begin{macrocode} +\str_if_eq:NNTF { \l_@@_info_type_tl } { thesis } +{ + \tl_const:Nn \l_@@_info_type_tl_name + { \l_@@_name_diploma_tl 毕\hfill 业\hfill 论\hfill 文 } +} +{ + \tl_const:Nn \l_@@_info_type_tl_name + { \l_@@_name_diploma_tl 毕\hfill 业\hfill 设\hfill 计 } +} +% \end{macrocode} +% +% \begin{macro}{\@@_cover_title_breakline:} +% 对多行标题进行自动判断,并输出换行后的结果 +% \begin{macrocode} +\cs_new_protected:Npn \@@_cover_title_breakline: +{ + \@@_cover_box:n {\c_@@_name_title_tl} + & \@@_cover_uline_a:n + { \c_@@_cover_uline_style_tl \l_@@_info_title_a_tl } \\ + % 如果某行标题空则不输出接下来的若干行 + \tl_if_empty:NF \l_@@_info_title_b_tl + { + \tl_if_empty:NTF \l_@@_info_title_c_tl + { + & \@@_cover_uline_a:n + {\c_@@_cover_uline_style_tl \l_@@_info_title_b_tl } \\ + } + { + & \@@_cover_uline_a:n + { \c_@@_cover_uline_style_tl \l_@@_info_title_b_tl } \\ + & \@@_cover_uline_a:n + { \c_@@_cover_uline_style_tl \l_@@_info_title_c_tl } \\ + } + } +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_print_covertab:} +% 封面信息栏 +% \begin{macrocode} +\cs_new_protected:Npn \@@_print_covertab: +{% + \str_if_eq:NNTF { \l_@@_info_degree_tl } { ug } + { + \begin{tabular}{p{4.2em}c} + \@@_cover_box:n {院\hfill 系} + & \@@_cover_uline_a:n {\l_@@_info_dept_tl} \\ + \@@_cover_box:n {专\hfill 业} + & \@@_cover_uline_a:n {\l_@@_major_tl} \\ + \@@_cover_title_breakline: + \end{tabular}\\ + + \begin{tabular}{p{4.2em}cp{4.2em}c} + \@@_cover_box:n {年\hfill 级} + & \@@_cover_uline_b:n {\l_@@_info_grade_tl} + & \@@_cover_box:n {学\hfill 号} + & \@@_cover_uline_b:n {\l_@@_info_id_tl}\\ + \end{tabular}\\ + + \begin{tabular}{p{4.2em}c} + \@@_cover_box:n {学\hfill 生\hfill 姓\hfill 名} + & \@@_cover_uline_a:n {\l_@@_info_author_tl} + \end{tabular}\\ + \begin{tabular}{p{4.2em}cp{4.2em}c} + \@@_cover_box:n {导\hfill 师} + & \@@_cover_uline_b:n {\l_@@_info_supv_a_tl} + & \@@_cover_box:n {职\hfill 称} + & \@@_cover_uline_b:n {\l_@@_info_supv_a_title_tl}\\ + + % 第二导师 + \tl_if_empty:NF \l_@@_info_supv_b_tl + { + \@@_cover_box:n {第\hfill 二\hfill 导\hfill 师} + & \@@_cover_uline_b:n {\l_@@_info_supv_b_tl} + & \@@_cover_box:n {职\hfill 称} + & \@@_cover_uline_b:n {\l_@@_info_supv_b_title_tl}\\ + } + \end{tabular}\\ + + \begin{tabular}{p{4.2em}c} + \@@_cover_box:n {提\hfill 交\hfill 日\hfill 期} + & \@@_cover_uline_a:n {\l_@@_submit_date_tl}\\ + \end{tabular} + } + { + \begin{tabular}{p{6em}c} + \@@_cover_title_breakline: + \@@_cover_box:n {作\hfill 者\hfill 姓\hfill 名} + & \@@_cover_uline_a:n {\l_@@_info_author_tl}\\ + \@@_cover_box:n {专\hfill 业\hfill 名\hfill 称} + & \@@_cover_uline_a:n {\l_@@_major_tl}\\ + \@@_cover_box:n {研\hfill 究\hfill 方\hfill 向} + & \@@_cover_uline_a:n {\l_@@_field_tl}\\ + \@@_cover_box:n {指\hfill 导\hfill 教\hfill 师} + & \@@_cover_uline_a:n {\l_@@_info_supv_full_tl}\\ + \end{tabular} + } +} +% \end{macrocode} +% \end{macro} +% +% +% +% +% \begin{macro}{\@@_print_cover_nl:} +% 按需绘制国家图书馆封面,修改自胡海星模板 +% +% \begin{macrocode} +\cs_new_protected:Npn \@@_print_cover_nl: +{ + \thispagestyle{empty} + \pdfbookmark[0]{国家图书馆封面}{nl} + { + % 顶端 + \hspace{0mm} + \vskip -20mm \hskip -15mm + \songti\zihao{-4} + \makebox[40pt][l]{分类号} + \@@_cover_uline_b:n {\l_@@_info_classif_tl} + \hfill + \makebox[40pt][l]{密级} + \@@_cover_uline_b:n {\l_@@_info_seclv_tl} + \vskip 10pt \hskip -15mm + \makebox[40pt][l]{UDC} + \@@_cover_uline_b:n {\l_@@_info_udc_tl} + } + + % 中部 + \vskip\stretch{2} + \begin{center} + \def\ULthickness{1pt} + {\kaishu\zihao{-0} 学\hspace{0.5em}位\hspace{0.5em}论\hspace{0.5em}文} + { + \kaishu\zihao{1} + \vskip \stretch{1} + \@@_cover_uline_b:n {\l_@@_info_title_a_tl}\\ + \@@_cover_uline_b:n {\l_@@_info_title_b_tl}\\ + \@@_cover_uline_b:n {\l_@@_info_title_c_tl}\\ + } + \vskip \stretch{1} + {\kaishu\zihao{4}(题名和副题名)} + \vskip \stretch{1} \vskip 5mm + {\kaishu\zihao{1}\uline{\makebox{\l_@@_info_author_tl}}} + \vskip \stretch{1} + {\kaishu\zihao{4}(作者姓名)} + \end{center} + + % 底部 + \vskip\stretch{1} + { + \kaishu\zihao{4} + \noindent 指导教师姓名、职务、职称、学位、单位名称及地址% + \@@_cover_uline_nl:nn {94pt}{\l_@@_info_supv_a_tl}\par + \noindent\@@_cover_uline_nl:nn {\textwidth}{% + \l_@@_info_supv_cont_tl}\par + \noindent 申请学位级别% + \@@_cover_uline_nl:nn {9em}{\c_@@_name_degree_tl}% + \noindent 专业名称% + \uline{\hfill\l_@@_major_tl\hfill}\par% 需要调整下划线长度 + \noindent 论文提交日期% + \@@_cover_uline_nl:nn {9em}{\l_@@_submit_date_tl}% + 论文答辩日期% + \uline{\hfill\l_@@_defend_date_tl\hfill}\par% 需要调整下划线长度 + \noindent 学位授予单位和日期\uline{\hfill}\par + \noindent\hfill 答辩委员会主席:% + \@@_cover_uline_nl:nn {9em}{\l_@@_info_chairman_tl}\par + \noindent\hfill 评阅人:% + \@@_cover_uline_nl:nn {9em}{\l_@@_info_reviewer_a_tl}\par + \noindent\hfill\@@_cover_uline_nl:nn {9em}{\l_@@_info_reviewer_b_tl}\par + \noindent\hfill\@@_cover_uline_nl:nn {9em}{\l_@@_info_reviewer_c_tl}\par + \noindent\hfill\@@_cover_uline_nl:nn {9em}{\l_@@_info_reviewer_d_tl}\par + + \begin{center} + \kaishu\zihao{3}\hspace{2em} 年\hspace{1em} 月\hspace{1em} 日 + \end{center} + \vskip -10mm + } + \cleardoublepage +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\@@_print_cover_ug:} +% 本科封面 +% \begin{macrocode} +\cs_new_protected:Npn \@@_print_cover_ug: +{ + \thispagestyle{empty} + \pagenumbering{Roman} + % Start + \pdfbookmark{封面}{封面} % 将封面插入pdf书签 + \begin{spacing}{1.25} + \vskip 0mm + \hspace{-10mm} + \includegraphics[height=3cm]{njulogo}\smallskip + \begin{center} + \includegraphics[height=3.35cm]{njuname} + \vskip 10mm + {\zihao{1}\makebox[9em][s]{\bf{\songti\l_@@_info_type_tl_name}}} + \vfill + \vskip\stretch{0} + {\bgroup + \kaishu\zihao{3} + \def\tabcolsep{1pt} + \def\arraystretch{1.5} + % 绘制信息框 + \@@_print_covertab: + \egroup} + \vfill + \end{center} + \end{spacing} + \cleardoublepage + % \vfill + % \newpage +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\@@_print_cover_g:} +% 研究生封面 +% \begin{macrocode} +\cs_new_protected:Npn \@@_print_cover_g: +{ + \thispagestyle{empty} + \pagenumbering{Roman} + % Start + \pdfbookmark{封面}{封面} % 将封面插入pdf书签 + \begin{spacing}{1.25} + \begin{center} + \hspace{0pt} \vskip 5mm + \includegraphics[height=1.9cm]{njulogo} + \vskip 10mm + \includegraphics[height=2cm]{njuname-large} + \vskip 15mm + {\zihao{1}\makebox[10em][s]{\bf{\kaishu\l_@@_info_type_tl_name}}} + \vskip 5mm + {\zihao{1}\bf{\kaishu{(申请\c_@@_name_degree_tl 学位)}}} + \par\vfill + \vskip\stretch{0} + {\bgroup + \bf\kaishu\zihao{3} + \def\tabcolsep{1pt} + \def\arraystretch{1.5} + \vskip 10mm + % 绘制信息框 + \@@_print_covertab: + \egroup} + \vfill + \vskip 10mm + \bf\kaishu\zihao{4}\l_@@_submit_date_tl + \vskip 15mm + \end{center} + \end{spacing} + + \newpage % 封面背面 + \thispagestyle{empty} + \begin{spacing}{1.625} + % TODO: 等待调整格式 + \hspace{0pt} \vfill + {\bgroup + \kaishu\zihao{3} + \makebox[6em][s]{\bf\kaishu 学\hfill 号}:\MakeUppercase{\l_@@_info_id_tl} + \par + \makebox[6em][s]{\bf\kaishu 论文答辩日期}:\l_@@_defend_date_tl + \par + \makebox[6em][s]{\bf\kaishu 指\hfill 导\hfill 教\hfill 师}:\hspace{50mm}(签字) + \par + \egroup} + \vskip 15mm + \end{spacing} + \cleardoublepage +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_print_cover_en:} +% 研究生英文封面 +% \begin{macrocode} +\cs_new_protected:Npn \@@_print_cover_en: +{ + \thispagestyle{empty} + \pdfbookmark{英文封面}{English~cover} % 将封面插入pdf书签 + \begin{center} + \vspace*{20pt} + \bf\sffamily\zihao{2}\l_@@_info_title_en_tl + \vskip \stretch{1} + \normalfont\rmfamily\zihao{4}{by} + \vskip 3pt + \bf\sffamily\zihao{4}\l_@@_info_author_en_tl + \vskip\stretch{1} + \normalfont\rmfamily\zihao{4}{Supervised~by} + \vskip 3pt + \normalfont\sffamily\zihao{4}\l_@@_info_supv_a_title_en_tl + \hspace{.5em}\l_@@_info_supv_a_en_tl + \vskip\stretch{1} + \normalsize\rmfamily{% + A~dissertation~submitted~to\\ + the~graduate~school~of~Nanjing~University\\ + in~partial~fulfilment~of~the~requirements~for~the~degree~of\\ + {\textsc{\c_@@_name_degree_en_tl}}\\ + in\\ + {\l_@@_major_en_tl} + } + \vskip\stretch{2} + \includegraphics[width=2.5cm]{njulogo} \\ + \vskip 3mm + \normalfont\l_@@_info_dept_en_tl\\ + {Nanjing~University} + \vskip 30pt + \normalfont\normalsize\l_@@_submit_date_en_tl + \end{center} + \normalfont + \cleardoublepage +} +% \end{macrocode} +% \end{macro} +% +% +% 重定义maketitle生成封面 +% \begin{macrocode} +\tl_set:Nn \maketitle +{% + \str_if_eq:NNTF { \l_@@_info_degree_tl } { ug } + { + \@@_print_cover_ug: % 本科封面 + } + { + \bool_if:NT \g_@@_nlcover_bool { \@@_print_cover_nl: } % 国家图书馆封面 + \@@_print_cover_g: % 研究生封面 + \@@_print_cover_en: % 英文封面 + } +} +% \end{macrocode} +% +% \subsection{摘要绘制} +% +% 中文关键词 +% \begin{macrocode} +\NewDocumentCommand \keywords {m} {% + \par\vspace{2ex}\noindent% + {\kaishu\zihao{-4}\makebox[4em][s]{关键词{:}}}~{#1}% +} +% \end{macrocode} +% +% +% 英文关键词 +% +% \begin{macrocode} +\NewDocumentCommand \englishkeywords {m} {% + \par\vspace{2ex}\noindent% + {KEYWORDS{:}}~~{#1}% +} +% \end{macrocode} +% +% +% +% \begin{macrocode} +% 判断学位 +\str_if_eq:NNTF {\l_@@_info_degree_tl} { ug } +{ + % 本科摘要环境 + \NewDocumentEnvironment{abstract} {} + {% + % \pagestyle{plain} + % \pagenumbering{Roman} + % \phantomsection\addcontentsline{toc}{chapter}{中文摘要} % 将摘要插入目录和pdf书签 + \pdfbookmark[0]{中文摘要}{中文摘要} % 将摘要插入pdf书签,与上一行不可共存 + \begin{center} + \kaishu\zihao{-2}{\textbf{ + \uuline{南京大学本科生毕业论文(设计、作品)中文摘要}}} + \end{center} + {\bgroup + \kaishu\zihao{-4} + \tl_set:Nn \tabcolsep {0pt} + \tl_set:Nn \arraystretch {0.8} + \noindent + 题目: \l_@@_info_title_tl \\ + 院系: \l_@@_info_dept_tl \\ + 专业: \l_@@_major_tl \\ + 本科生姓名: \l_@@_info_author_tl \\ + 指导教师(姓名、职称):\l_@@_info_supv_full_tl \\ + 摘要: + \egroup + } + \kaishu\zihao{-4}\par% + }{% + \newpage + } + + % 英文摘要 + \NewDocumentEnvironment{englishabstract} {} + {% + \pagestyle{plain} + % \phantomsection\addcontentsline{toc}{chapter}{英文摘要} % 将摘要插入目录和pdf书签 + \pdfbookmark[0]{英文摘要}{英文摘要} % 将摘要插入pdf书签,与上一行不可共存 + \begin{center} + \kaishu\zihao{-2}{\textbf{\uuline{ + 南京大学本科生毕业论文(设计、作品)英文摘要}}} + \end{center} + { + \bgroup + THESIS: ~~\l_@@_info_title_en_tl \\ + DEPARTMENT: ~~\l_@@_info_dept_en_tl \\ + SPECIALIZATION: ~~\l_@@_major_en_tl \\ + UNDERGRADUATE:~~\l_@@_info_author_en_tl \\ + MENTOR:~~\l_@@_info_supv_full_en_tl \\ + ABSTRACT: + \egroup + } + \zihao{-4}\par% + }{% + \cleardoublepage + \newpage + } +} +% \end{macrocode} +% +% +% \begin{macrocode} +{ + % 研究生摘要环境 + \NewDocumentEnvironment{abstract} {} + {% + \pagestyle{plain} + \pagenumbering{Roman} + % \phantomsection\addcontentsline{toc}{chapter}{中文摘要} % 将摘要插入目录和pdf书签 + \pdfbookmark[0]{中文摘要}{中文摘要} % 将摘要插入pdf书签,与上一行不可共存 + \begin{center} + \kaishu\zihao{-2}{\textbf{\uuline{ + 南京大学研究生毕业论文中文摘要首页用纸}}} + \end{center} + + \bgroup + \kaishu\zihao{4} + \tl_set:Nn \tabcolsep {0pt} + \tl_set:Nn \arraystretch {0.8} + \noindent + 毕业论文题目:\hspace{0.5em}\nju_underline:n {\l_@@_info_title_tl\hfill}\\ + \uline{\makebox[9em]{\l_@@_major_tl}}专业 + \uline{\makebox[4em]{\l_@@_info_grade_tl}}级 + \str_if_eq:NNTF {\l_@@_info_degree_tl} { phd } {博}{硕} + 士生姓名:\uline{\hfill\l_@@_info_author_tl\hfill} \\ + 指导教师(姓名、职称):\uline{\hfill\l_@@_info_supv_full_tl\hfill}\par + \egroup + + \kaishu\zihao{4}\par% + }{% + \newpage + } + + % 英文摘要 + \NewDocumentEnvironment{englishabstract} {} + {% + \pagestyle{plain} + % \phantomsection\addcontentsline{toc}{chapter}{英文摘要} % 将摘要插入目录和pdf书签 + \pdfbookmark[0]{英文摘要}{英文摘要} % 将摘要插入pdf书签,与上一行不可共存 + \begin{center} + \kaishu\zihao{-2}{\textbf{\uuline{ + 南京大学研究生毕业论文英文摘要首页用纸}}} + \end{center} + { + \bgroup + \zihao{4} + THESIS: ~~\l_@@_info_title_en_tl \\ + SPECIALIZATION: ~~\l_@@_major_en_tl \\ + POSTGRADUATE:~~\l_@@_info_author_en_tl \\ + MENTOR:~~\l_@@_info_supv_full_en_tl\par + \egroup + } + \zihao{4}\par% + }{% + \cleardoublepage + \newpage + } +} +% +% \end{macrocode} +% +% +% +% +% \end{implementation} +% +% \PrintIndex diff --git a/macros/unicodetex/latex/njuthesis/njuthesis.pdf b/macros/unicodetex/latex/njuthesis/njuthesis.pdf index 11b1922dea..a254258dd5 100644 Binary files a/macros/unicodetex/latex/njuthesis/njuthesis.pdf and b/macros/unicodetex/latex/njuthesis/njuthesis.pdf differ diff --git a/macros/unicodetex/latex/njuthesis/profile/abstract.sty b/macros/unicodetex/latex/njuthesis/profile/abstract.sty deleted file mode 100644 index 37814cef13..0000000000 --- a/macros/unicodetex/latex/njuthesis/profile/abstract.sty +++ /dev/null @@ -1,136 +0,0 @@ -\ProvidesExplPackage{profile/abstract}{2021-09-11}{0.7.0}{NJU Thesis abstract design} - -% 判断学位 -\str_if_eq:eeTF {\nju_degree} { ug } -{ - % 本科摘要环境 - \NewDocumentEnvironment{abstract} {} - {% - \pagestyle{plain} - \pagenumbering{Roman} - % \phantomsection\addcontentsline{toc}{chapter}{中文摘要} % 将摘要插入目录和pdf书签 - \pdfbookmark[0]{中文摘要}{中文摘要} % 将摘要插入pdf书签,与上一行不可共存 - \begin{center} - \kaishu\zihao{-2}{\textbf{\uuline{南京大学本科生毕业论文(设计、作品)中文摘要}}} - \end{center} - {\bgroup - \kaishu\zihao{-4} - \tl_set:Nn \tabcolsep {0pt} - \tl_set:Nn \arraystretch {0.8} - \noindent - 题目: \nju_title \\ - 院系: \nju_department \\ - 专业: \nju_major \\ - 本科生姓名: \nju_student_name \\ - 指导教师(姓名、职称):\nju_mentor_full \\ - 摘要: - \egroup - } - \kaishu\zihao{-4}\par% - }{% - \newpage - } - - % 中文关键词 - \NewDocumentCommand \keywords {m} {% - \par\vspace{2ex}\noindent% - {\kaishu\zihao{-4}\makebox[4em][s]{关键词{:}}}~{#1}% - } - - % 英文摘要 - \NewDocumentEnvironment{englishabstract} {} - {% - \pagestyle{plain} - % \phantomsection\addcontentsline{toc}{chapter}{英文摘要} % 将摘要插入目录和pdf书签 - \pdfbookmark[0]{英文摘要}{英文摘要} % 将摘要插入pdf书签,与上一行不可共存 - \begin{center} - \kaishu\zihao{-2}{\textbf{\uuline{南京大学本科生毕业论文(设计、作品)英文摘要}}} - \end{center} - { - \bgroup - THESIS: ~~\nju_title_en \\ - DEPARTMENT: ~~\nju_department_en \\ - SPECIALIZATION: ~~\nju_major_en \\ - UNDERGRADUATE:~~\nju_student_name_en \\ - MENTOR:~~\nju_mentor_full_en \\ - ABSTRACT: - \egroup - } - \zihao{-4}\par% - }{% - \cleardoublepage - \newpage - } - - % 英文关键词 - \NewDocumentCommand \englishkeywords {m} {% - \par\vspace{2ex}\noindent% - {KEYWORDS{:}}~~{#1}% - } -} -{ - % 摘要环境 - \NewDocumentEnvironment{abstract} {} - {% - \pagestyle{plain} - \pagenumbering{Roman} - % \phantomsection\addcontentsline{toc}{chapter}{中文摘要} % 将摘要插入目录和pdf书签 - \pdfbookmark[0]{中文摘要}{中文摘要} % 将摘要插入pdf书签,与上一行不可共存 - \begin{center} - \kaishu\zihao{-2}{\textbf{\uuline{南京大学研究生毕业论文中文摘要首页用纸}}} - \end{center} - - \bgroup - \kaishu\zihao{4} - \tl_set:Nn \tabcolsep {0pt} - \tl_set:Nn \arraystretch {0.8} - \noindent - % 毕业论文题目:\ \uline{\nju_title} \\ % 下划线有问题 - 毕业论文题目:\ \nju_title \\ - \uline{\makebox[9em]{\nju_major}}专业\uline{\makebox[3em]{\nju_grade}}级 - \str_if_eq:eeTF {\nju_degree} { d } {博}{硕} - 士生姓名:\uline{\hfill\nju_student_name\hfill} \\ - 指导教师(姓名、职称):\uline{\hfill\nju_mentor_full\hfill}\par - \egroup - - \kaishu\zihao{4}\par% - }{% - \newpage - } - - % 中文关键词 - \NewDocumentCommand \keywords {m} {% - \par\vspace{2ex}\noindent% - {\kaishu\zihao{4}\makebox[4em][s]{关键词{:}}}~{#1}% - } - - % 英文摘要 - \NewDocumentEnvironment{englishabstract} {} - {% - \pagestyle{plain} - % \phantomsection\addcontentsline{toc}{chapter}{英文摘要} % 将摘要插入目录和pdf书签 - \pdfbookmark[0]{英文摘要}{英文摘要} % 将摘要插入pdf书签,与上一行不可共存 - \begin{center} - \kaishu\zihao{-2}{\textbf{\uuline{南京大学研究生毕业论文英文摘要首页用纸}}} - \end{center} - { - \bgroup - \zihao{4} - THESIS: ~~\nju_title_en \\ - SPECIALIZATION: ~~\nju_major_en \\ - POSTGRADUATE:~~\nju_student_name_en \\ - MENTOR:~~\nju_mentor_full_en\par - \egroup - } - \zihao{4}\par% - }{% - \cleardoublepage - \newpage - } - - % 英文关键词 - \NewDocumentCommand \englishkeywords {m} {% - \par\vspace{2ex}\noindent% - {KEYWORDS{:}}~~{#1}% - } -} diff --git a/macros/unicodetex/latex/njuthesis/profile/components.sty b/macros/unicodetex/latex/njuthesis/profile/components.sty deleted file mode 100644 index 4a24fe4f59..0000000000 --- a/macros/unicodetex/latex/njuthesis/profile/components.sty +++ /dev/null @@ -1,173 +0,0 @@ -\ProvidesExplPackage{profile/components}{2021-09-11}{0.6.0}{NJU Thesis components configuration} - -% 图表位置调整 -\floatsetup[lstlisting]{ % Captions for lstlistings - capposition=above,% - margins=centering,% - floatwidth=\textwidth% -} -\floatsetup[figure]{ % Captions for figures - capposition=bottom,% - margins=centering,% - floatwidth=\textwidth% -} -\floatsetup[table]{ % Captions for tables - capposition=above,% - margins=centering,% - floatwidth=\textwidth% -} - -% 代码样式 -\lstset{ - basicstyle=\ttfamily\linespread{1}\small\selectfont, - keywordstyle=\bfseries,% use bold style for keywords - commentstyle=\rmfamily\itshape,% use italic style for comments - stringstyle=\ttfamily,% 字符串风格 - flexiblecolumns,% ? - numbers=left,% left-aligned numbering - showspaces=false,% hide markers for spaces - showstringspaces=false, - captionpos=t,% place the caption at the top - % frame=lrtb,% show all four sides of the frame - % linewidth=.8\textwidth, - % breakatwhitespace=true, - breaklines=true, - xleftmargin=2em,xrightmargin=2em,% set the width of the code environment -} - -\lstdefinestyle{LaTeX}{ - language=TeX, - morekeywords={begin, caption, label, mathrm, frac, toprule, midrule, bottomrule, includegraphics} -} - -% 图表标题样式 -\DeclareCaptionFont{songticap}{\zihao{5}\bf\songti} -\captionsetup{ - font=small,% - labelfont=songticap, - textfont=songticap, - strut=no,% - hypcap=true, % Links point to the top of the figure - % indention=0pt, % Suppress indentation - % % parindent=0pt, % Suppress space between paragraphs - aboveskip=6pt, % Increase the space between the figure and the caption - belowskip=6pt, % Increase the space between the caption and the table -} - -% list configuration -\renewcommand{\labelitemi}{\tiny$\blacktriangleright$} -\renewcommand{\labelitemii}{\textbullet} - -\setlist[itemize]{noitemsep} -\setlist[enumerate]{noitemsep} -\setlist[description]{noitemsep} - -% 数学环境 -\declaretheoremstyle[ - %spaceabove=.5\thm@preskip, - %spacebelow=.5\thm@postskip, - headfont=\bf\songti,%\scshape, - notefont=\songti,% notebraces={ (}{)}, - bodyfont=\songti, - %headformat={\NAME\space\NUMBER\space\NOTE}, - headpunct={}, - %postheadspace={.5em plus .1em minus .1em}, - %prefoothook={\hfill\qedsymbol} - ]{njuthm} - -\theoremstyle{njuthm} - -\let\oldproofname=\proofname -\renewcommand*{\proofname}{\rm\bf\songti{\oldproofname}} % 修改证明环境标题 - -\declaretheorem[ - name=算法, - style=njuthm, - refname={算法,算法}, - Refname={算法,算法}, - % numberwithin=section, -]{algorithm} -\declaretheorem[ - name=假设, - style=njuthm, - refname={假设,假设}, - Refname={假设,假设}, - % numberwithin=section, -]{assumption} -\declaretheorem[ - name=公理, - style=njuthm, - refname={公理,公理}, - Refname={公理,公理}, - % numberwithin=section, -]{axiom} -\declaretheorem[ - name=结论, - style=njuthm, - refname={结论,结论}, - Refname={结论,结论}, - % numberwithin=section, -]{conclusion} -\declaretheorem[ - name=条件, - style=njuthm, - refname={条件,条件}, - Refname={条件,条件}, - % numberwithin=section, -]{condition} -\declaretheorem[ - name=推论, - style=njuthm, - refname={推论,推论}, - Refname={推论,推论}, - % numberwithin=section, -]{corollary} -\declaretheorem[ - name=定义, - style=njuthm, - refname={定义,定义}, - Refname={定义,定义}, - % numberwithin=section, -]{definition} -\declaretheorem[ - name=例, - style=njuthm, - refname={例,例}, - Refname={例,例}, - % numberwithin=section, -]{example} -\declaretheorem[ - name=引理, - style=njuthm, - refname={引理,引理}, - Refname={引理,引理}, - % numberwithin=section, -]{lemma} -\declaretheorem[ - name=性质, - style=njuthm, - refname={性质,性质}, - Refname={性质,性质}, - % numberwithin=section, -]{property} -\declaretheorem[ - name=命题, - style=njuthm, - refname={命题,命题}, - Refname={命题,命题}, - % numberwithin=section, -]{proposition} -\declaretheorem[ - name=注解, - style=njuthm, - refname={注解,注解}, - Refname={注解,注解}, - % numberwithin=section, -]{remark} -\declaretheorem[ - name=定理, - style=njuthm, - refname={定理,定理}, - Refname={定理,定理}, - numberwithin=section, -]{theorem} diff --git a/macros/unicodetex/latex/njuthesis/profile/cover.sty b/macros/unicodetex/latex/njuthesis/profile/cover.sty deleted file mode 100644 index 8293e64780..0000000000 --- a/macros/unicodetex/latex/njuthesis/profile/cover.sty +++ /dev/null @@ -1,251 +0,0 @@ -\ProvidesExplPackage{profile/cover}{2021-09-11}{0.7.0}{NJU Thesis cover design} - -% 拼合标题 -\tl_const:Nn \nju_title {\nju_title_a \nju_title_b \nju_title_c} - -% 拼合导师 -\bool_if:NTF \nju_second_mentor -{ - \tl_const:Nn \nju_mentor_full - { - \nju_mentor_a\ \nju_mentor_a_title - \ \ \nju_mentor_b\ \nju_mentor_b_title - } - \tl_const:Nn \nju_mentor_full_en - { - \nju_mentor_a_en\ \nju_mentor_a_title_en - \ \ \nju_mentor_b_en\ \nju_mentor_b_title_en - } -} -{ - \tl_const:Nn \nju_mentor_full - { - \nju_mentor_a\ \nju_mentor_a_title - } - \tl_const:Nn \nju_mentor_full_en - { - \nju_mentor_a_en\ \nju_mentor_a_title_en - } -} - -% 封面下划线 -\cs_new:Npn \nju_cover_underline_ug:nn #1 #2 { - \uline{\makebox[#1]{\rm\songti#2}} -} -\cs_new:Npn \nju_cover_underline_g:n #1 { - \uline{\makebox[215pt]{\rm\kaishu#1}} -} - -% 封面表格边框 -\cs_new:Npn \nju_coverbox_ug:n #1 { - \makebox[4.2em][s]{#1} -} -\cs_new:Npn \nju_coverbox_g:n #1 { - \makebox[6em][s]{#1\hspace{1em}} -} - -% 判断学位 -\str_if_eq:eeTF {\nju_degree} { ug } -{ \tl_const:Nn \nju_degree_name {本\hfill 科\hfill } } % 本科 -{ - % 本科以外都是研究生 - \tl_const:Nn \nju_degree_name {研\hfill 究\hfill 生\hfill } - - % 研究生类别 - \str_case_e:nn { \nju_degree } - { - { mg } { \tl_const:Nn \nju_degree_title {硕士} } - { mf } { \tl_const:Nn \nju_degree_title {硕士专业} } - { d } { \tl_const:Nn \nju_degree_title {博士} } - } -} - -% 判断类型 -\str_if_eq:eeTF {\nju_type} {thesis} -{\tl_const:Nn \nju_type_name {\nju_degree_name 毕\hfill 业\hfill 论\hfill 文}} -{\tl_const:Nn \nju_type_name {\nju_degree_name 毕\hfill 业\hfill 设\hfill 计}} - -% 封面信息栏 本科 -\tl_new:N \nju_printcoverinfo_ug -\tl_set:Nn \nju_printcoverinfo_ug { - \begin{tabular}{p{4.2em}c} - \nju_coverbox_ug:n {院\hfill 系} - & \nju_cover_underline_ug:nn {250pt}{\nju_department}\\ - \nju_coverbox_ug:n {专\hfill 业} - & \nju_cover_underline_ug:nn {250pt}{\nju_major}\\ - - % 标题换行 - \int_case:nn {\nju_titlelength} - { - { 1 } { - \nju_coverbox_ug:n {题\hfill 目} - & \nju_cover_underline_ug:nn {250pt}{\bf{\nju_title_a}} \\ } - { 2 } { - \nju_coverbox_ug:n {题\hfill 目} - & \nju_cover_underline_ug:nn {250pt}{\bf{\nju_title_a}} \\ - & \nju_cover_underline_ug:nn {250pt}{\bf{\nju_title_b}} \\ } - { 3 } { - \nju_coverbox_ug:n {题\hfill 目} - & \nju_cover_underline_ug:nn {250pt}{\bf{\nju_title_a}} \\ - & \nju_cover_underline_ug:nn {250pt}{\bf{\nju_title_b}} \\ - & \nju_cover_underline_ug:nn {250pt}{\bf{\nju_title_c}} \\} - } - \end{tabular}\\ - - \begin{tabular}{p{4.2em}cp{4.2em}c} - \nju_coverbox_ug:n {年\hfill 级} - & \nju_cover_underline_ug:nn {90pt}{\nju_grade} - & \nju_coverbox_ug:n {学\hfill 号} - & \nju_cover_underline_ug:nn {90pt}{\nju_student_id}\\ - \end{tabular}\\ - - \begin{tabular}{p{4.2em}c} - \nju_coverbox_ug:n {学\hfill 生\hfill 姓\hfill 名} - & \nju_cover_underline_ug:nn {250pt}{\nju_student_name} - \end{tabular}\\ - \begin{tabular}{p{4.2em}cp{4.2em}c} - \nju_coverbox_ug:n {导\hfill 师} - & \nju_cover_underline_ug:nn {90pt}{\nju_mentor_a} - & \nju_coverbox_ug:n {职\hfill 称} - & \nju_cover_underline_ug:nn {90pt}{\nju_mentor_a_title}\\ - - % 第二导师 - \bool_if:NTF \nju_second_mentor - { - \nju_coverbox_ug:n {第\hfill 二\hfill 导\hfill 师} - & \nju_cover_underline_ug:nn {90pt}{\nju_mentor_b} - & \nju_coverbox_ug:n {职\hfill 称} - & \nju_cover_underline_ug:nn {90pt}{\nju_mentor_b_title}\\ - } - {} - \end{tabular}\\ - - \begin{tabular}{p{4.2em}c} - \nju_coverbox_ug:n {提\hfill 交\hfill 日\hfill 期} - & \nju_cover_underline_ug:nn {250pt}{\nju_submit_date}\\ - \end{tabular} -} - -% 封面信息栏 研究生 -\tl_new:N \nju_printcoverinfo_g -\tl_set:Nn \nju_printcoverinfo_g { - \begin{tabular}{p{6em}c} - % 标题换行 - \int_case:nn {\nju_titlelength} - { - { 1 } { - \nju_coverbox_g:n {论\hfill 文\hfill 题\hfill 目} - & \nju_cover_underline_g:n {\nju_title_a} \\ } - { 2 } { - \nju_coverbox_g:n {论\hfill 文\hfill 题\hfill 目} - & \nju_cover_underline_g:n {\nju_title_a} \\ - & \nju_cover_underline_g:n {\nju_title_b} \\ } - { 3 } { - \nju_coverbox_g:n {论\hfill 文\hfill 题\hfill 目} - & \nju_cover_underline_g:n {\nju_title_a} \\ - & \nju_cover_underline_g:n {\nju_title_b} \\ - & \nju_cover_underline_g:n {\nju_title_c} \\} - } - - \nju_coverbox_g:n {作\hfill 者\hfill 姓\hfill 名} - & \nju_cover_underline_g:n {\nju_student_name}\\ - \nju_coverbox_g:n {专\hfill 业\hfill 名\hfill 称} - & \nju_cover_underline_g:n {\nju_major}\\ - \nju_coverbox_g:n {研\hfill 究\hfill 方\hfill 向} - & \nju_cover_underline_g:n {\nju_field}\\ - \nju_coverbox_g:n {指\hfill 导\hfill 教\hfill 师} - & \nju_cover_underline_g:n {\nju_mentor_full}\\ - \end{tabular} -} - -% 绘制封面命令 -\tl_new:N \nju_printcover_ug % 本科封面 -\tl_new:N \nju_printcover_g % 研究生封面 - -% 本科封面 -\tl_set:Nn \nju_printcover_ug { - \thispagestyle{empty} - \pagenumbering{Roman} - % Start - \pdfbookmark{封面}{封面} % 将封面插入pdf书签 - \begin{spacing}{1.25} - \vskip 0mm - \hspace{-10mm} - \includegraphics[height=3cm]{njulogo}\smallskip - \begin{center} - \includegraphics[height=3.35cm]{njuname} - \vskip 10mm - {\zihao{1}\makebox[9em][s]{\bf{\songti\nju_type_name}}} - \vfill - \vskip\stretch{0} - {\bgroup - \kaishu\zihao{3} - \def\tabcolsep{1pt} - \def\arraystretch{1.5} - \nju_printcoverinfo_ug % 绘制信息框 - \egroup} - \vfill - \end{center} - \end{spacing} - \cleardoublepage - \vfill - % \newpage -} - -% 研究生封面 -\tl_set:Nn \nju_printcover_g { - \thispagestyle{empty} - \pagenumbering{Roman} - % Start - \pdfbookmark{封面}{封面} % 将封面插入pdf书签 - \begin{spacing}{1.25} - \begin{center} - \hspace{0pt} \vskip 5mm - \includegraphics[height=1.9cm]{njulogo} - \vskip 10mm - \includegraphics[height=1.9cm]{njuname-large} - \vskip 15mm - {\zihao{1}\makebox[10em][s]{\bf{\kaishu\nju_type_name}}} - \vskip 5mm - {\zihao{1}\bf{\kaishu{(申请\nju_degree_title 学位)}}} - \par\vfill - \vskip\stretch{0} - {\bgroup - \bf\kaishu\zihao{3} - \def\tabcolsep{1pt} - \def\arraystretch{1.5} - \vskip 10mm - \nju_printcoverinfo_g % 绘制信息框 - \egroup} - \vfill - \vskip 10mm - \bf\kaishu\zihao{4}\nju_submit_date - \vskip 15mm - \end{center} - \end{spacing} - - \newpage % 封面背面 - \thispagestyle{empty} - \begin{spacing}{1.625} - % TODO: 等待调整格式 - \hspace{0pt} \vfill - {\bgroup - \bf\kaishu\zihao{3} - \makebox[6em][s]{学\hfill 号}:\nju_student_id - \par - \makebox[6em][s]{论文答辩日期}:\nju_defense_date - \par - \makebox[6em][s]{指\hfill 导\hfill 教\hfill 师}:\hspace{50mm}(签字) - \par - \egroup} - \vskip 15mm - \end{spacing} - \cleardoublepage -} - -% 重定义maketitle生成封面 -\RenewDocumentCommand \maketitle {} {% - \str_if_eq:eeTF {\nju_degree} { ug } - { \nju_printcover_ug } % 本科封面 - { \nju_printcover_g } % 研究生封面 -} diff --git a/macros/unicodetex/latex/njuthesis/profile/font.sty b/macros/unicodetex/latex/njuthesis/profile/font.sty deleted file mode 100644 index d939fb4842..0000000000 --- a/macros/unicodetex/latex/njuthesis/profile/font.sty +++ /dev/null @@ -1,219 +0,0 @@ -\ProvidesExplPackage{profile/font}{2021-09-11}{0.7.0}{NJU Thesis font configuration} - -% \RequireXeTeX -% \RequireLuaTeX - -% 设置西文字体 -\NewDocumentCommand\set_latin_fontset_windows{}{ - \setmainfont{Times~New~Roman} - \setsansfont{Arial} - \setmonofont{Courier~New}[Scale=MatchLowercase] -} - -\NewDocumentCommand\set_latin_fontset_macos{}{ - \setmainfont{Times~New~Roman} - \setsansfont{Arial} - \setmonofont{Menlo}[Scale=MatchLowercase] -} - -\NewDocumentCommand\set_latin_fontset_gyre{}{ - \setmainfont{texgyretermes}[ - Extension=.otf, - UprightFont=*-regular, - BoldFont=*-bold, - ItalicFont=*-italic, - BoldItalicFont=*-bolditalic] - \setsansfont{texgyreheros}[ - Extension=.otf, - UprightFont=*-regular, - BoldFont=*-bold, - ItalicFont=*-italic, - BoldItalicFont=*-bolditalic] - \setmonofont{texgyrecursor}[ - Extension=.otf, - UprightFont=*-regular, - BoldFont=*-bold, - ItalicFont=*-italic, - BoldItalicFont=*-bolditalic, - Scale=MatchLowercase, - Ligatures=CommonOff] -} - -% 设置中文字体 -\NewDocumentCommand\set_chinese_fontset_windows{}{ - \setCJKmainfont{SimSun}[ - AutoFakeBold=2.17, - ItalicFont=KaiTi] - \setCJKsansfont{SimHei} - \setCJKmonofont{FangSong} - \setCJKfamilyfont{zhsong}{SimSun}[AutoFakeBold=2.17] - \setCJKfamilyfont{zhhei}{SimHei} - \setCJKfamilyfont{zhfs}{FangSong} - \setCJKfamilyfont{zhkai}{KaiTi}[AutoFakeBold=2.17] - \setCJKfamilyfont{zhnewhei}{Microsoft~YaHei}[BoldFont=Microsoft~YaHei~Bold] -} - -\NewDocumentCommand\set_chinese_fontset_macos{}{ - \msg_redirect_name:nnn {fontspec} {no-script} {info} % 移除 does not contain script "CJK" 警告 - \setCJKmainfont{Songti~SC~Light}[ - BoldFont=Songti~SC~Bold, - ItalicFont=Kaiti~SC, - BoldItalicFont=Kaiti~SC~Bold] - \setCJKsansfont{Heiti~SC~Light}[BoldFont=Heiti~SC~Medium] - \setCJKmonofont{STFangsong} - \setCJKfamilyfont{zhsong}{Songti~SC~Light}[BoldFont=Songti~SC~Bold] - \setCJKfamilyfont{zhhei}{Heiti~SC~Light}[BoldFont=Heiti~SC~Medium] - \setCJKfamilyfont{zhfs}{STFangsong} - \setCJKfamilyfont{zhkai}{Kaiti~SC}[BoldFont=Kaiti~SC~Bold] - \setCJKfamilyfont{zhnewhei}{PingFang~SC} -} - -\NewDocumentCommand\set_chinese_fontset_fandol{}{ - \msg_redirect_name:nnn {fontspec} {no-script} {info} % 移除 does not contain script "CJK" 警告 - \setCJKmainfont{FandolSong-Regular}[ - Extension=.otf, - BoldFont=FandolSong-Bold, - ItalicFont=FandolKai-Regular] - \setCJKsansfont{FandolHei-Regular}[ - Extension=.otf, - BoldFont=FandolHei-Bold] - \setCJKmonofont{FandolFang-Regular}[Extension=.otf] - \setCJKfamilyfont{zhsong}{FandolSong-Regular}[ - Extension=.otf, - BoldFont=FandolSong-Bold] - \setCJKfamilyfont{zhhei}{FandolHei-Regular}[ - Extension=.otf, - BoldFont=FandolHei-Bold] - \setCJKfamilyfont{zhfs}{FandolFang-Regular}[Extension=.otf] - \setCJKfamilyfont{zhkai}{FandolKai-Regular}[ - Extension=.otf, - AutoFakeBold=2.17] -} - -% 方正字符集 -\NewDocumentCommand\set_chinese_fontset_founder{}{ - % FZSSK 方正书宋(简繁扩展) http://www.foundertype.com/index.php/FontInfo/index/id/151 免费商用 - % FZXBSK 方正小标宋(简繁扩展) http://www.foundertype.com/index.php/FontInfo/index/id/164 设计师非商免费 - % FZKTK 方正楷体(简繁扩展) http://www.foundertype.com/index.php/FontInfo/index/id/137 免费商用 - \setCJKmainfont{FZSSK}[ - Extension=.ttf, - BoldFont=FZXBSK, - ItalicFont=FZKTK] - % FZXH1K 方正细黑一(简繁扩展) http://www.foundertype.com/index.php/FontInfo/index/id/161 设计师非商免费 - % FZHTK 方正黑体(简繁扩展) http://www.foundertype.com/index.php/FontInfo/index/id/131 免费商用 - \setCJKsansfont{FZXH1K}[ - Extension=.ttf, - BoldFont=FZHTK] - % FZFSK 方正仿宋(简繁扩展) http://www.foundertype.com/index.php/FontInfo/index/id/128 - \setCJKmonofont{FZFSK}[Extension=.ttf] - - \setCJKfamilyfont{zhsong}{FZSSK}[ - Extension=.ttf, - BoldFont=FZXBSK] - \setCJKfamilyfont{zhhei}{FZHTK}[ - Extension=.ttf, - AutoFakeBold=2.17] - \setCJKfamilyfont{zhfs}{FZFSK}[Extension=.ttf] - \setCJKfamilyfont{zhkai}{FZKTK}[Extension=.ttf] - % FZYouHK_508R 方正悠黑508R(简繁扩展) http://www.foundertype.com/index.php/FontInfo/index/id/244 设计师非商免费 - % FZYouHK_511M 方正悠黑511M(简繁扩展) http://www.foundertype.com/index.php/FontInfo/index/id/244 设计师非商免费 - \setCJKfamilyfont{zhnewhei}{FZYouHK_508R}[ - Extension=.ttf, - BoldFont=FZYouHK_511M] -} - -\NewDocumentCommand\set_chinese_fontset_noto{}{ - % 思源宋体 https://www.google.com/get/noto/#serif-hans - \setCJKmainfont[ - UprightFont=NotoSerifCJKsc-Regular, - BoldFont=NotoSerifCJKsc-Bold, - ItalicFont=NotoSerifCJKsc-Regular, - BoldItalicFont=NotoSerifCJKsc-Bold, - ItalicFeatures=FakeSlant, - BoldItalicFeatures=FakeSlant]{Noto~Serif~CJK~SC} - - % 思源黑体 https://www.google.com/get/noto/#sans-hans - \setCJKsansfont[ - UprightFont=NotoSansCJKsc-Regular, - BoldFont=NotoSansCJKsc-Bold, - ItalicFont=NotoSansCJKsc-Regular, - BoldItalicFont=NotoSansCJKsc-Bold, - ItalicFeatures=FakeSlant, - BoldItalicFeatures=FakeSlant]{Noto~Sans~CJK~SC} - - % 包含于上述思源黑体 - \setCJKmonofont[ - UprightFont=NotoSansMonoCJKsc-Regular, - BoldFont=NotoSansMonoCJKsc-Bold, - ItalicFont=NotoSansMonoCJKsc-Regular, - BoldItalicFont=NotoSansMonoCJKsc-Bold, - ItalicFeatures=FakeSlant, - BoldItalicFeatures=FakeSlant]{Noto~Sans~Mono~SC} - - \setCJKfamilyfont{zhsong}{Noto~Serif~CJK~SC} - \setCJKfamilyfont{zhhei}{Noto~Sans~CJK~SC} - - % 方正楷体、方正仿宋为免费商用字体,且支持CJK字符集 - % 方正仿宋 http://www.foundertype.com/index.php/FontInfo/index/id/128.html - % 方正楷体 http://www.foundertype.com/index.php/FontInfo/index/id/137.html - \setCJKfamilyfont{zhfs}{方正仿宋简体}[AutoFakeBold=2.17] - \setCJKfamilyfont{zhkai}{方正楷体简体}[AutoFakeBold=2.17] -} - -% 字体判断 -\bool_if:NTF \nju_systemfont -% 根据操作系统自动选择相应字体 -{ - % 检测是否是 Windows - \sys_if_platform_windows:TF - { - \set_latin_fontset_windows - \set_chinese_fontset_windows - } - { - % 检测是否是 macOS - \ctex_if_platform_macos:TF - { - \set_latin_fontset_macos - \set_chinese_fontset_macos - } - % 其余系统一律使用自由字体 - { - \set_latin_fontset_gyre - \set_chinese_fontset_fandol - } - } -} -{ - % 如果用户需要自定义字体 - % 此处需要使用\str_case_e而不是\str_case使宏展开为字符串 - \str_case_e:nn { \nju_customlatinfont } - { - { windows } { \set_latin_fontset_windows } - { macos } { \set_latin_fontset_macos } - { gyre } { \set_latin_fontset_gyre } - { null } {} - } - \str_case_e:nn { \nju_customchinesefont } - { - { windows } { \set_chinese_fontset_windows } - { macos } { \set_chinese_fontset_macos } - { gyre } { \set_chinese_fontset_gyre } - { founder } { \set_chinese_fontset_founder } - { noto } { \set_chinese_fontset_noto } - { null } {} - } -} -% 选择其他字体,请确保相应字体已安装 - -% 设置数学字体 (XITS, 或者 STIX, 与 Times New Roman 最为相近) -% \setmathfont{STIXTwoMath-Regular}[Extension = .otf] -\setmathfont{XITSMath-Regular}[ - BoldFont = XITSMath-Bold, - Extension = .otf] - -\NewDocumentCommand\songti{}{\CJKfamily{zhsong}} -\NewDocumentCommand\heiti{}{\CJKfamily{zhhei}} -\NewDocumentCommand\fangsong{}{\CJKfamily{zhfs}} -\NewDocumentCommand\kaishu{}{\CJKfamily{zhkai}} -% \NewDocumentCommand\lishu{}{\CJKfamily{zhli}} diff --git a/macros/unicodetex/latex/njuthesis/profile/packages.sty b/macros/unicodetex/latex/njuthesis/profile/packages.sty deleted file mode 100644 index 029488b787..0000000000 --- a/macros/unicodetex/latex/njuthesis/profile/packages.sty +++ /dev/null @@ -1,71 +0,0 @@ -\ProvidesExplPackage{profile/packages}{2021-09-11}{0.6.0}{NJU Thesis packages used} - -\RequirePackage{expl3} -\RequirePackage{ifxetex} -\RequirePackage{fontspec} -\RequirePackage[ - top=2.5cm, - bottom=2.5cm, - left=3.2cm, - right=3.2cm -]{geometry} -\RequirePackage{ifthen} -\RequirePackage{xparse} -% \RequirePackage{etoolbox} -\RequirePackage{titlesec} % 修改章节标题功能由CTeX提供 -\RequirePackage{titletoc} -% \RequirePackage{appendix} % 定义附录样式 -\RequirePackage{fancyhdr} % 调整页眉页脚 -\RequirePackage[hyphens]{url} % generate better linebreaks in the url -% \RequirePackage[normalem]{ulem} % 绘制下划线 -% \RequirePackage{soul} % 用不起来 -% \RequirePackage{soulutf8} -\RequirePackage{dashundergaps} -\RequirePackage{setspace} -\RequirePackage{lastpage} -\RequirePackage{emptypage} % 清除空白页的页码 -\RequirePackage{listings} % 代码环境 -\RequirePackage{enumitem} % 用于修改列表环境 -\RequirePackage{caption} -\RequirePackage{floatrow} % 用于图表等页面元素的定位 -\RequirePackage{booktabs} % 用于绘制三线表 -\RequirePackage{multirow} % Cells occupying multiple rows in tables -\RequirePackage{multicol} % Multiple columns in dictionary -\RequirePackage{siunitx} % 用于书写单位符号 -\RequirePackage[version=4]{mhchem} % 用于绘制分子式 -\RequirePackage{hologo} % 用于生成可以被插入书签的LaTeX logo -% \RequirePackage{needspace} % Required to prevent page break right after a sectioning command -% \RequirePackage{xspace} % Better print trailing whitespace -\sys_if_engine_xetex:T{ - \RequirePackage{microtype}} -% \sys_if_engine_luatex:T{ -% \RequirePackage{emoji} -% \setemojifont{Segoe UI Emoji} % For windows. -% % Shipped with the best `grinning-face-with-sweat' support. -% % Use `Apple Color Emoji' for macos -% % or `Noto Color Emoji' if you prefer. -% } - -\RequirePackage{blindtext} % 生成用于测试的大段无意义英文文字 -\RequirePackage{zhlipsum} % 生成用于测试的大段无意义中文文字 -% \RequirePackage{showframe} % 加载以后展示内容边界 - -\RequirePackage{amsmath} % Must be loaded before unicode-math -\RequirePackage{amsthm} % Mathematical environments -\RequirePackage{mathtools} % Mathematical tools to use with amsmath -\RequirePackage{thmtools} % Theorem styles -\RequirePackage[ - warnings-off={% 消除与mathtools合用产生的警告 - mathtools-colon, - mathtools-overbracket} - ]{unicode-math} % Math fonts in xetex or luatex - -\RequirePackage{graphicx} -\DeclareGraphicsExtensions{.pdf,.eps,.jpg,.png} -\graphicspath{{figure/}} % 图片路径 -\RequirePackage{wrapfig} % Wrap text around figures - -% 必须以该顺序加载以下三个包 -% \RequirePackage{varioref} -\RequirePackage[hidelinks,bookmarksnumbered=true]{hyperref} -\RequirePackage[capitalise,nameinlink,noabbrev]{cleveref} diff --git a/macros/unicodetex/latex/njuthesis/profile/page.sty b/macros/unicodetex/latex/njuthesis/profile/page.sty deleted file mode 100644 index e926fa73ea..0000000000 --- a/macros/unicodetex/latex/njuthesis/profile/page.sty +++ /dev/null @@ -1,54 +0,0 @@ -\ProvidesExplPackage{profile/page}{2021-09-11}{0.6.0}{NJU Thesis page layout} - -% 论文页码 页脚居中、五号阿拉伯数字(新罗马体)连续编码 -\fancypagestyle{njuplain}{% - \fancyhead{} - \fancyfoot[C]{\zihao{5}\thepage} -} -% the header line -\tl_set:Nn \headrulewidth {0pt} -% the footer line -\tl_set:Nn \footrulewidth {0pt} - -\AtBeginDocument{\pagestyle{njuplain}} % 无页眉页脚 - -% ctex格式设置 -% 目录标题 三号宋体加粗 -% 各部分标题 四号黑体 -\ctexset{ - contentsname = \songti\bfseries\zihao{3}目\hspace{2em} 录, - chapter/format = \zihao{4}\heiti\centering, - section/format = \zihao{4}\heiti\raggedright, - subsection/format = \zihao{4}\heiti\raggedright, - subsubsection/format = \zihao{4}\heiti\raggedright -} - -% 重定义目录中章节标题样式 -% 目录内容中章的标题 四号黑体 -% 目录中其他内容 小四号宋体 -\titlecontents{chapter}% 标题级别 - [5em]% 标题左间距 - {\heiti\zihao{4}\vspace{10pt}}% 标题格式 - {\contentslabel{4em}}% 标题标志 - {\hspace*{-4em}}% 无序号标题 - {~\titlerule*[0.6pc]{$.$}~\contentspage}% 指引线与页码 - -\titlecontents{section} - [5em] - {\zihao{-4}\vspace{0pt}} - {\contentslabel{2.5em}} - {\hspace*{-4em}} - {~\titlerule*[0.6pc]{$.$}~\contentspage} - -\titlecontents{subsection} - [8em] - {\zihao{-4}\vspace{0pt}} - {\contentslabel{3em}} - {\hspace*{-4em}} - {~\titlerule*[0.6pc]{$.$}~\contentspage} - -% 将目录页插入pdf书签 -\let\savedtableofcontents\tableofcontents -\renewcommand{\tableofcontents}{% - \pdfbookmark{目录}{目录} - \savedtableofcontents} diff --git a/macros/unicodetex/latex/njuthesis/profile/reference.sty b/macros/unicodetex/latex/njuthesis/profile/reference.sty deleted file mode 100644 index 4087f9f561..0000000000 --- a/macros/unicodetex/latex/njuthesis/profile/reference.sty +++ /dev/null @@ -1,68 +0,0 @@ -\ProvidesExplPackage{profile/reference}{2021-09-11}{0.6.0}{NJU Thesis bibliography and reference} - -% biblatex设置 -\RequirePackage[ - style=gb7714-2015, - %style=numeric-comp, - %citestyle=authortitle-icomp, - % citestyle=numeric-comp, - %bibstyle=authoryear, - % bibstyle=numeric, - sorting=none, - %sorting=nyt, - %sortcites=true, - %autocite=footnote, - backend=biber, % Compile the bibliography with biber - hyperref=true, - backref=false, - citecounter=true, - pagetracker=true, - citetracker=true, - ibidtracker=context, - autopunct=true, - autocite=plain, - % gbpub=false, % Uncomment if you do NOT want '[S.l. : s.n.]' in reference entries, GitHub Issue (#47) - % gbnamefmt=lowercase, % Uncomment if you do NOT want uppercase author names in reference entries, GitHub Issue (#23) -]{biblatex} - -% Remove some unwanted entries from the bibliography -\AtEveryBibitem{ - \clearfield{abstract} - \clearfield{issn} - \clearfield{isbn} - \clearfield{archivePrefix} - \clearfield{arxivId} - \clearfield{pmid} - \clearfield{eprint} - \ifentrytype{online}{}{\ifentrytype{misc}{}{\clearfield{url}}} - % \ifentrytype{book}{\clearfield{doi}}{} -} - -% 修改标签名称 -\crefdefaultlabelformat{#2#1#3\,} % 默认在名称后面添加空格 - -\crefname{figure}{图}{图} -\crefname{table}{表}{表} -% \crefname{equation}{公式}{公式} -\crefformat{equation}{公式~#2#1#3~} % 删除公式编号的括号 - -\crefformat{chapter}{第#2#1#3章} -\crefformat{section}{第~#2#1#3~节} -\crefformat{subsection}{第~#2#1#3~小节} -\crefformat{subsubsection}{第~#2#1#3~小节} -% \crefname{chapter}{§}{§} -% \crefname{section}{§}{§} -% \crefname{subsection}{§}{§} -% \crefname{subsubsection}{§}{§} -\crefname{appendix}{附录}{附录} - -% \crefname{definition}{定义}{定义} -% \crefname{axiom}{公理}{公理} -% \crefname{property}{性质}{性质} -% \crefname{proposition}{命题}{命题} -% \crefname{lemma}{引理}{引理} -% \crefname{corollary}{推论}{推论} -% \crefname{remark}{注解}{注解} -% \crefname{condition}{条件}{条件} -% \crefname{conclusion}{结论}{结论} -% \crefname{assumption}{假设}{假设} diff --git a/support/TeX4ht/source/ChangeLog b/support/TeX4ht/source/ChangeLog index 738ecdbd7c..d4d252102d 100644 --- a/support/TeX4ht/source/ChangeLog +++ b/support/TeX4ht/source/ChangeLog @@ -1,3 +1,10 @@ +2021-09-17 Michal Hoftich + + * tex4ht-html4.tex (html4.4ht): fixed support for floating listings. + https://tex.stackexchange.com/a/615703/2891 + * tex4ht-ooffice.tex (ooffice.4ht): fixed listings support in the ODT + format. + 2021-09-14 Michal Hoftich * tex4ht-mathjax.tex (mathjax-latex-4ht.4ht): fixed TOC support for \exp diff --git a/support/TeX4ht/source/tex4ht-html4.tex b/support/TeX4ht/source/tex4ht-html4.tex index 0108f2d289..5dfb67b428 100644 --- a/support/TeX4ht/source/tex4ht-html4.tex +++ b/support/TeX4ht/source/tex4ht-html4.tex @@ -1,4 +1,4 @@ -% $Id: tex4ht-html4.tex 978 2021-09-12 21:26:18Z michal_h21 $ +% $Id: tex4ht-html4.tex 982 2021-09-17 12:20:37Z michal_h21 $ % Compile 4 times: latex tex4ht-html4 % Copy html4.4ht into the work directory before all but the last compilation. % @@ -15254,15 +15254,17 @@ Configuration for the inline code \gdef\start:LstLn{% \HCode{
}% \gdef\start:LstLn{|\HCode{
\Hnewline}}} - \bgroup + \bgroup% + % we put the closing
here in order to support floating listings + % https://tex.stackexchange.com/a/615703/2891 + \pend:def\lst@DeInit{\ifvmode\IgnorePar\fi\EndP\HCode{}}% \Configure{listings} {{\everypar{}\leavevmode}} {{\everypar{}\leavevmode}} {\start:LstLn \HCode{}} {\HCode{}}% } - {\egroup - \ifvmode \IgnorePar\fi \EndP \HCode{}\par} + {\egroup\par} {} {} \Css{.lstlisting .label{margin-right:0.5em; }} \Css{div.lstlisting{font-family: monospace,monospace; white-space: nowrap; diff --git a/support/TeX4ht/source/tex4ht-ooffice.tex b/support/TeX4ht/source/tex4ht-ooffice.tex index 71b3105795..1eac506543 100644 --- a/support/TeX4ht/source/tex4ht-ooffice.tex +++ b/support/TeX4ht/source/tex4ht-ooffice.tex @@ -1,4 +1,4 @@ -% $Id: tex4ht-ooffice.tex 977 2021-09-09 13:53:34Z michal_h21 $ +% $Id: tex4ht-ooffice.tex 983 2021-09-17 14:27:15Z michal_h21 $ % compile 3 times: latex tex4ht-ooffice % htlatex tex4ht-ooffice "xhtml,4,sections+" % @@ -10446,15 +10446,21 @@ Y{0178}\i{00EF}% \ConfigureEnv{lstlisting} {\ifvmode \IgnorePar\fi \EndP \HCode{}% - \HCode{}% - \bgroup \special{t4ht@(}% + % \HCode{}% + \bgroup % + \gdef\start:LstLn{% + \ifvmode\IgnorePar\fi\EndP\HCode{}% + \ht:special{t4ht@(}\ttfamily% + \gdef\start:LstLn{\HCode{}}} + \pend:def\lst@DeInit{\ifvmode\IgnorePar\fi\EndP\HCode{}}% \Configure{listings} {{\everypar{}\leavevmode}} {{\everypar{}\leavevmode}} - {\HCode{}}{}% + {\start:LstLn}{}% } - {\special{t4ht@)}\egroup - \ifvmode \IgnorePar\fi \EndP \HCode{}\par} + {\ht:special{t4ht@)}\egroup + % \ifvmode \IgnorePar\fi \EndP \HCode{}\par} + \par} {} {} >>> @@ -10462,16 +10468,20 @@ Y{0178}\i{00EF}% \Configure{lstinputlisting} {\ifvmode \IgnorePar\fi \EndP \HCode{}% - \HCode{}% - \bgroup \tt \special{t4ht@(}% + % \HCode{}% + \bgroup% + \gdef\start:LstLn{% + \ifvmode\IgnorePar\fi\EndP\HCode{}% + \ht:special{t4ht@(}\ttfamily% + \gdef\start:LstLn{\HCode{}}} + \pend:def\lst@DeInit{\ifvmode\IgnorePar\fi\EndP\HCode{}}% \Configure{listings} {{\everypar{}\leavevmode}} {{\everypar{}\leavevmode}} - {\HCode{}} + {\start:LstLn} {\HCode{}}% } - {\special{t4ht@)}\egroup - \ifvmode \IgnorePar\fi \EndP \HCode{}\par} + {\special{t4ht@)}\egroup\par} >>> diff --git a/support/latex2nemeth/README b/support/latex2nemeth/README index e5a7588528..cfabeb24db 100644 --- a/support/latex2nemeth/README +++ b/support/latex2nemeth/README @@ -1,6 +1,6 @@ Latex2Nemeth ============ -Version 1.0.2 +Version 1.0.3 ==================================== @@ -9,6 +9,8 @@ is basic macro support. The program supports simple replacement commands (such as \newcommand{}{}) and commands with optional arguments (such as \newcommand{\inner}[2]{\langle#1,#2\rangle}). +A bug in Windows loading the default Nemeth table has +also been corrected. ===================================== @@ -23,20 +25,20 @@ This is the source tree for Latex2Nemeth, a tool for translating TeX files to Br Licence ------- -Copyright 2016-2020 by Andreas Papasalοuros, Antonis Tsolomitis. +Copyright 2016-2021 by Andreas Papasalοuros, Antonis Tsolomitis. This program is distributed under the GPL, version 3 or later. Please see the COPYING file for details. Dependencies ------------ -In order to use the tool, you need the following programs: +In order to build the tool from source, you need the following programs: -1. **Java** +1. Java The tool has been tested with `Java 7` and `Java 8`. -2. **Apache Maven** +2. Apache Maven Apache Maven is a software project management and comprehension tool. - For Windows, download the [latest version](https://maven.apache.org/download.cgi). @@ -45,7 +47,7 @@ In order to use the tool, you need the following programs: sudo apt-get install maven -Installing +Building ---------- * Download Latex2Nemeth's sources. E.g. for anonymous access on SourceForge: @@ -57,37 +59,46 @@ Installing cd /path/to/latex2nemeth mvn package -Dmaven.test.skip=true -* **[Optional]** You can compile and also run the tests with `mvn package` +* [Optional] You can compile and also run the tests with `mvn package` Usage ----- After compiling the tool the executable `jar` will be located in the `target/` directory, -e.g. `target/latex2nemeth-v1.0.2.jar`. +e.g. `target/latex2nemeth.jar`. A simple to way to run the tool is - java -jar + java -jar latex2nemeth.jar -**Options** +Options +------- +Option Description +-------------------------------------------------------------------------------- +-e, --encoding The encoding table for Braille Mathematical symbols in the form of + a JSON file. If not specified, default Nemeth table is used. + +-m,--mode The mode of the parser which controls the type of the output + Braille files. It can be either 'nemeth' or 'pef'. The default mode + is nemeth. -|Option|Description| -|------|-----------| -|-e,--encoding | The encoding table for Braille Mathematical symbols in the form of a JSON file. If not specified, default Nemeth table is used. | -| -m,--mode | The mode of the parser which controls the type of the output Braille files. It can be either 'nemeth' or 'pef'. The default mode is nemeth.| -| -o | The output prefix of the Braille files. It can also be prefixed with a path to a specific directory. The default value is the name of the TeX file. The program generates an output file for each chapter in the input TeX file.| +-o The output prefix of the Braille files. It can also be prefixed + with a path to a specific directory. The default value is the name + of the TeX file. The program generates an output file for each + chapter in the input TeX file. -**Examples** +Examples +------------ A simple example: - java -jar target/latex2nemeth-v1.0.2.jar src/test/resources/com/latex2nemeth/bootstrap/mathtest.tex src/test/resources/com/latex2nemeth/bootstrap/mathtest.aux + java -jar latex2nemeth.jar examples/mathtest.tex examples/mathtest.aux A more complicated example: - java -jar target/latex2nemeth-v1.0.2.jar src/test/resources/com/latex2nemeth/bootstrap/mathtest.tex src/test/resources/com/latex2nemeth/bootstrap/mathtest.aux -o ch -m nemeth -e src/test/resources/com/latex2nemeth/bootstrap/nemeth.json + java -jar latex2nemeth.jar examples/mathtest.tex examples/mathtest.aux -o ch -m nemeth -e encodings/nemeth.json An example with pictures: - java -jar target/latex2nemeth-v1.0.2.jar src/test/resources/com/latex2nemeth/bootstrap/mathpics.tex src/test/resources/com/latex2nemeth/bootstrap/mathpics.aux + java -jar latex2nemeth.jar examples/mathpics.tex examples/mathpics.aux -**Notes** +Notes ------------- 1. Input tex files must be in utf-8. If using another encoding (such as iso-8859-7) run first LaTeX to produce the aux file and then convert the source.tex to utf-8 @@ -95,7 +106,7 @@ A simple to way to run the tool is iconv -f iso8859-7 -t utf-8 source.tex > source-utf8.tex - or using your editor. Now run "java -jar latex2nemeth-v1.0.2.jar" as above with + or using your editor. Now run "java -jar latex2nemeth.jar" as above with source-utf8.tex as the tex file and source.aux as the aux file. If errors are produced you need to modify the source-utf8.tex at the line indicated. Usually the errors have to do either with non supported shortcuts for macros @@ -112,24 +123,18 @@ A simple to way to run the tool is 3. To emboss the output open the produced source-utf8.nemeth in LibreOffice with the odt2braille plugin installed, open it as "Unicode UTF-8 encoded text" - and emboss as usually. + and emboss as usually. Steps 1,2, and 3 are automated with the use of the nemeth2odt Bash script, found in the contrib folder (only in Linux). -4. Pictures are exported separately in text files. Currently only `pstricks` pictures are supported. -Currently their preable is hardcoded in `com.latex2nemeth.utils.Preamble`. +4. Pictures are exported separately in text files. Currently only `pstricks` pictures are + supported. Currently their preable is hardcoded in `com.latex2nemeth.utils.Preamble`. 5. In order to save space when braille pages are embossed a paragraph change corresponds -to three spaces. Thus commands such as \\ (double backslash) are transcribed as three spaces. -However, there are cases, such as in poems, that a change of line must occur from line to line. -To support these cases, a new latex-type command, named \latextonemethnewline -is understood by the program, which produces a new line. So the double backslash -at the end of each line of a poem must be substituted by \latextonemethnewline. For LaTeX to run -smoothly a \newcommand can be introduced in the preamble, such as -\newcommand{\latextonemethnewline}{\newline} - -6. It is possible to translate TeX files using different Braille alphabets. A different Braille alphabet -is encoded in a JSON file. For example, in order to translate a texfile into polytonic Greek, the command is as follows: + to three spaces. Thus commands such as \\ (double backslash) are transcribed as three spaces. However, there are cases, such as in poems, that a change of line must occur from line to line. To support these cases, a new latex-type command, named \latextonemethnewline is understood by the program, which produces a new line. So the double backslash at the end of each line of a poem must be substituted by \latextonemethnewline. For LaTeX to run smoothly a \newcommand can be introduced in the preamble, such as \newcommand{\latextonemethnewline}{\newline} + +6. It is possible to translate TeX files using different Braille alphabets. A different + Braille alphabet is encoded in a JSON file. For example, in order to translate a texfile into polytonic Greek, the command is as follows: - java -jar latex2nemeth-v1.0.2.jar texfile.tex auxfile.aux -e /path/to/polytonic.json + java -jar latex2nemeth.jar texfile.tex auxfile.aux -e /path/to/polytonic.json Please report issues related to erratic output to a n d p a p a s [AT] a e g e a n . g r and issues related to the tex file handling/modifying to a n t o n i s . t s o l o m i t i s [AT] g m a i l . c o m diff --git a/support/latex2nemeth/contrib/nemeth2odt b/support/latex2nemeth/contrib/nemeth2odt new file mode 100644 index 0000000000..9777f9322f --- /dev/null +++ b/support/latex2nemeth/contrib/nemeth2odt @@ -0,0 +1,30 @@ +#!/bin/bash +#get a random name first of 8 chars +tmpdir=`cat /dev/urandom | tr -cd 'a-f0-9' | head -c 8` + +#make a folder +mkdir $tmpdir + +#get the base name of the fole to convert +file=`basename "$1" .nemeth` + +#convert nemeth from utf16 to utf8 +iconv -f utf-16 -t utf-8 "$1" > $file.txt + +#convert txt file to odt +libreoffice --headless --convert-to odt $file.txt 1>/dev/null + +# odt is setup with a bultintemplate for convertions +#from text, that uses Liberation Mono font. +#we need DejaVu Serif. We change the font and repack +#the odt file +unzip -qq -d $tmpdir $file.odt +rm -f $file.odt +find $tmpdir -type f | xargs sed -i 's/Liberation Mono/DejaVu Serif/g' +( cd $tmpdir; zip -qq -r ../$file.odt . ) + +#cleanup +/bin/rm -rf $tmpdir $file.txt + + + diff --git a/support/latex2nemeth/encodings/nemeth.json b/support/latex2nemeth/encodings/nemeth.json new file mode 100644 index 0000000000..75be79b10c --- /dev/null +++ b/support/latex2nemeth/encodings/nemeth.json @@ -0,0 +1,1762 @@ +{ + "letters": { + "\\&":"⠸⠯", + "\\$": "⠈⠎", + ".": "\u2832", + ",": "\u2802", + ";": "\u2822", + "'": "\u2804", + "«": "\u2826", + "»": "\u2834", + "(": "\u2837", + ")": "\u283e", + "[": "\u2808\u2837", + "]": "\u2808\u283e", + "\\}": "\u2828\u283e", + "\\{": "\u2828\u2837", + "\\_": "\u2824\u2824", + "\\%": "\u2808\u2834", + ":": "\u2806", + "?": "\u2838\u2826", + "!": "\u2816", + "*": "\u2808\u283c", + "@": "\u2808\u2801\u281e", + "\\euro": "\u2808\u2811", + "+": "\u282e", + "-": "\u2824", + "=": "\u282d", + "\\backslash": "\u2838\u2821", + "\\aa": "⠁⠣⠨⠡", + "\\AA": "⠈⠠⠁", + "\\cent": "⠈⠉", + "\\dag": "⠸⠻", + "\\dj": "⠈⠫", + "\\P": "⠈⠠⠏", + "\\planck": "⠈⠓", + "\\pounds": "⠈⠇", + "\\qoppa": "⠨⠟", + "\\S": "⠈⠠⠎", + "\\samp": "⠨⠉", + "\\stigma": "⠨⠮", + "\\textasciicircum": "⠸⠣", + "\\textbackslash": "⠸⠡", + "\\textregistered": "⠫⠉⠸⠫⠠⠗⠻", + "\\textsection": "⠈⠠⠎", + "\\texttrademark": "⠘⠠⠞⠠⠍", + "\\textvisiblespace": "⠿", + "\\trianglelefteq": "⠫⠐⠅⠇⠱⠻", + "\\varsupsetneq": "⠸⠨⠂⠌⠱", + "\\VDash": "⠫⠳⠳⠒⠒", + "\\#": "\u2828\u283c", + "\\ ": " ", + "\\,": "\u2802", + "--": "\u2824\u2824", + "---": "\u2824\u2824\u2824", + "/": "\u280c", + "\\\n": " ", + " ": " ", + "\\quad": " ", + "\\qquad": " ", + "\"": "\u2834\u2804", + "#": "\u283c", + "0": "\u2834", + "1": "\u2802", + "2": "\u2806", + "3": "\u2812", + "4": "\u2832", + "5": "\u2822", + "6": "\u2816", + "7": "\u2836", + "8": "\u2826", + "9": "\u2814", + "a": "\u2801", + "b": "\u2803", + "c": "\u2809", + "d": "\u2819", + "e": "\u2811", + "f": "\u280b", + "g": "\u281b", + "h": "\u2813", + "i": "\u280a", + "j": "\u281a", + "k": "\u2805", + "l": "\u2807", + "m": "\u280d", + "n": "\u281d", + "o": "\u2815", + "p": "\u280f", + "q": "\u281f", + "r": "\u2817", + "s": "\u280e", + "t": "\u281e", + "u": "\u2825", + "v": "\u2827", + "w": "\u283a", + "x": "\u282d", + "y": "\u283d", + "z": "\u2835", + "A": "\u2820\u2801", + "B": "\u2820\u2803", + "C": "\u2820\u2809", + "D": "\u2820\u2819", + "E": "\u2820\u2811", + "F": "\u2820\u280b", + "G": "\u2820\u281b", + "H": "\u2820\u2813", + "I": "\u2820\u280a", + "J": "\u2820\u281a", + "K": "\u2820\u2805", + "L": "\u2820\u2807", + "M": "\u2820\u280d", + "N": "\u2820\u281d", + "O": "\u2820\u2815", + "P": "\u2820\u280f", + "Q": "\u2820\u281f", + "R": "\u2820\u2817", + "S": "\u2820\u280e", + "T": "\u2820\u281e", + "U": "\u2820\u2825", + "V": "\u2820\u2827", + "W": "\u2820\u283a", + "X": "\u2820\u282d", + "Y": "\u2820\u283d", + "Z": "\u2820\u2835", + "e-grave": "\u282e", + "e-accent": "\u283f", + "EN": "\u2830", + "αι": "\u2823", + "Αι": "\u2828\u2823", + "αυ": "\u2821", + "Αυ": "\u2828\u2821", + "ει": "\u2829", + "Ει": "\u2828\u2829", + "ευ": "\u2831", + "Ευ": "\u2828\u2831", + "οι": "\u282a", + "Οι": "\u2828\u282a", + "ου": "\u2825", + "Ου": "\u2828\u2825", + "υι": "\u283b", + "Υι": "\u2828\u283b", + "ηυ": "\u2833", + "Ηυ": "\u2828\u2833", + "Ηύ": "\u2828\u2833", + "αί": "\u2823", + "ηύ": "\u2833", + "Υί": "\u2828\u283b", + "υί": "\u283b", + "Ού": "\u2828\u2825", + "ού": "\u2825", + "Οί": "\u2828\u282a", + "οί": "\u282a", + "εύ": "\u2831", + "Εύ": "\u2828\u2831", + "Εί": "\u2828\u2829", + "Αί": "\u2828\u2823", + "Αύ": "\u2828\u2821", + "αύ": "\u2821", + "εί": "\u2829", + "α": "\u2801", + "β": "\u2803", + "γ": "\u281b", + "δ": "\u2819", + "ε": "\u2811", + "ζ": "\u2835", + "η": "\u281c", + "θ": "\u2839", + "ι": "\u280a", + "ϊ": "\u280a", + "κ": "\u2805", + "λ": "\u2807", + "μ": "\u280d", + "ν": "\u281d", + "ξ": "\u282d", + "ο": "\u2815", + "π": "\u280f", + "ρ": "\u2817", + "σ": "\u280e", + "ς": "\u280e", + "τ": "\u281e", + "υ": "\u283d", + "ϋ": "\u283d", + "φ": "\u280b", + "χ": "\u2813", + "ψ": "\u282f", + "ω": "\u281a", + "ά": "\u2801", + "έ": "\u2811", + "ή": "\u281c", + "ί": "\u280a", + "ό": "\u2815", + "ύ": "\u283d", + "ώ": "\u281a", + "Α": "\u2828\u2801", + "Β": "\u2828\u2803", + "Γ": "\u2828\u281b", + "Δ": "\u2828\u2819", + "Ε": "\u2828\u2811", + "Ζ": "\u2828\u2835", + "Η": "\u2828\u281c", + "Θ": "\u2828\u2839", + "Ι": "\u2828\u280a", + "Κ": "\u2828\u2805", + "Λ": "\u2828\u2807", + "Μ": "\u2828\u280d", + "Ν": "\u2828\u281d", + "Ξ": "\u2828\u282d", + "Ο": "\u2828\u2815", + "Π": "\u2828\u280f", + "Ρ": "\u2828\u2817", + "Σ": "\u2828\u280e", + "Τ": "\u2828\u281e", + "Υ": "\u2828\u283d", + "Φ": "\u2828\u280b", + "Χ": "\u2828\u2813", + "Ψ": "\u2828\u282f", + "Ω": "\u2828\u281a", + "Ά": "\u2828\u2801", + "\u00b6": "\u2828\u2801", + "Έ": "\u2828\u2811", + "Ή": "\u2828\u281c", + "Ί": "\u2828\u280a", + "Ό": "\u2828\u2815", + "Ύ": "\u2828\u283d", + "Ώ": "\u2828\u281a", + "Ά": "\u2828\u2810\u2801", + "Έ": "\u2828\u2810\u2811", + "Ή": "\u2828\u2810\u281c", + "Ί": "\u2828\u2810\u280a", + "Ό": "\u2828\u2810\u2815", + "Ύ": "\u2828\u2810\u283d", + "Ώ": "\u2828\u2810\u281a", + "\\textbf": "\u2838", + "\\textbf-open": "\u2820\u2804\u2838", + "\\textbf-close": "\u2838\u2820\u2804", + "\\textit": "\u2828", + "\\textit-open": "\u2820\u2804\u2838", + "\\textit-close": "\u2838\u2820\u2804", + "\\copyright": "\u282b\u2809\u2838\u282b\u2820\u2809\u283b", + "\\sampi": "\u2828\u2809", + "\\textcircled-open":"⠫⠉⠸⠫", + "\\textcircled-close": "⠻", + "b-allcaps": "⠨⠨⠨", + "e-allcaps": "⠨⠨⠨", + "\\latextonemethnewline": "\n", + "\\bf": "", + "\\it": "", + "\\=": "", + "\\>": "", + "ΐ": "⠊", + "ΰ": "⠽", + "\\noindent": "", + "\\hfill": " ", + "\\bigskip": " ", + "\\smallskip": " ", + "\\medskip": " ", +"αὶ": "⠈⠣", +"αί": "⠐⠣", +"αἰ": "⠣", +"αἱ": "⠧⠣", +"αἲ": "⠾⠣", +"αἳ": "⠷⠣", +"αἴ": "⠴⠣", +"αἵ": "⠢⠣", +"αἶ": "⠲⠣", +"αἷ": "⠖⠣", +"Αὶ": "⠨⠈⠣", +"Αί": "⠨⠐⠣", +"Αἰ": "⠨⠣", +"Αἱ": "⠨⠧⠣", +"Αἲ": "⠨⠾⠣", +"Αἳ": "⠨⠷⠣", +"Αἴ": "⠨⠴⠣", +"Αἵ": "⠨⠢⠣", +"Αἶ": "⠨⠲⠣", +"Αἷ": "⠨⠖⠣", +"εὶ": "⠈⠩", +"εί": "⠐⠩", +"εἰ": "⠩", +"εἱ": "⠧⠩", +"εἲ": "⠾⠩", +"εἳ": "⠷⠩", +"εἴ": "⠴⠩", +"εἵ": "⠢⠩", +"εἶ": "⠲⠩", +"εἷ": "⠖⠩", +"Εὶ": "⠨⠈⠩", +"Εί": "⠨⠐⠩", +"Εἰ": "⠨⠩", +"Εἱ": "⠨⠧⠩", +"Εἲ": "⠨⠾⠩", +"Εἳ": "⠨⠷⠩", +"Εἴ": "⠨⠴⠩", +"Εἵ": "⠨⠢⠩", +"Εἶ": "⠨⠲⠩", +"Εἷ": "⠨⠖⠩", +"οὶ": "⠈⠪", +"οί": "⠐⠪", +"οἰ": "⠪", +"οἱ": "⠧⠪", +"οἲ": "⠾⠪", +"οἳ": "⠷⠪", +"οἴ": "⠴⠪", +"οἵ": "⠢⠪", +"οἶ": "⠲⠪", +"οἷ": "⠖⠪", +"Οὶ": "⠨⠈⠪", +"Οί": "⠨⠐⠪", +"Οἰ": "⠨⠪", +"Οἱ": "⠨⠧⠪", +"Οἲ": "⠨⠾⠪", +"Οἳ": "⠨⠷⠪", +"Οἴ": "⠨⠴⠪", +"Οἵ": "⠨⠢⠪", +"Οἶ": "⠨⠲⠪", +"Οἷ": "⠨⠖⠪", +"υὶ": "⠈⠻", +"υί": "⠐⠻", +"υἰ": "⠻", +"υἱ": "⠧⠻", +"υἲ": "⠾⠻", +"υἳ": "⠷⠻", +"υἴ": "⠴⠻", +"υἵ": "⠢⠻", +"υἶ": "⠲⠻", +"υἷ": "⠖⠻", +"Υὶ": "⠨⠈⠻", +"Υί": "⠨⠐⠻", +"Υἰ": "⠨⠻", +"Υἱ": "⠨⠧⠻", +"Υἲ": "⠨⠾⠻", +"Υἳ": "⠨⠷⠻", +"Υἴ": "⠨⠴⠻", +"Υἵ": "⠨⠢⠻", +"Υἶ": "⠨⠲⠻", +"Υἷ": "⠨⠖⠻", +"αὺ": "⠈⠡", +"αύ": "⠐⠡", +"αὐ": "⠡", +"αὑ": "⠧⠡", +"αὒ": "⠾⠡", +"αὓ": "⠷⠡", +"αὔ": "⠴⠡", +"αὕ": "⠢⠡", +"αὖ": "⠲⠡", +"αὗ": "⠖⠡", +"Αὺ": "⠨⠈⠡", +"Αύ": "⠨⠐⠡", +"Αὐ": "⠨⠡", +"Αὑ": "⠨⠧⠡", +"Αὒ": "⠨⠾⠡", +"Αὓ": "⠨⠷⠡", +"Αὔ": "⠨⠴⠡", +"Αὕ": "⠨⠢⠡", +"Αὖ": "⠨⠲⠡", +"Αὗ": "⠨⠖⠡", +"εὺ": "⠈⠱", +"εύ": "⠐⠱", +"εὐ": "⠱", +"εὑ": "⠧⠱", +"εὒ": "⠾⠱", +"εὓ": "⠷⠱", +"εὔ": "⠴⠱", +"εὕ": "⠢⠱", +"εὖ": "⠲⠱", +"εὗ": "⠖⠱", +"Εὺ": "⠨⠈⠱", +"Εύ": "⠨⠐⠱", +"Εὐ": "⠨⠱", +"Εὑ": "⠨⠧⠱", +"Εὒ": "⠨⠾⠱", +"Εὓ": "⠨⠷⠱", +"Εὔ": "⠨⠴⠱", +"Εὕ": "⠨⠢⠱", +"Εὖ": "⠨⠲⠱", +"Εὗ": "⠨⠖⠱", +"ηὺ": "⠈⠳", +"ηύ": "⠐⠳", +"ηὐ": "⠳", +"ηὑ": "⠧⠳", +"ηὒ": "⠾⠳", +"ηὓ": "⠷⠳", +"ηὔ": "⠴⠳", +"ηὕ": "⠢⠳", +"ηὖ": "⠲⠳", +"ηὗ": "⠖⠳", +"Ηὺ": "⠨⠈⠳", +"Ηύ": "⠨⠐⠳", +"Ηὐ": "⠨⠳", +"Ηὑ": "⠨⠧⠳", +"Ηὒ": "⠨⠾⠳", +"Ηὓ": "⠨⠷⠳", +"Ηὔ": "⠨⠴⠳", +"Ηὕ": "⠨⠢⠳", +"Ηὖ": "⠨⠲⠳", +"Ηὗ": "⠨⠖⠳", +"οὺ": "⠈⠥", +"ού": "⠐⠥", +"οὐ": "⠥", +"οὑ": "⠧⠥", +"οὒ": "⠾⠥", +"οὓ": "⠷⠥", +"οὔ": "⠴⠥", +"οὕ": "⠢⠥", +"οὖ": "⠲⠥", +"οὗ": "⠖⠥", +"Οὺ": "⠨⠈⠥", +"Ού": "⠨⠐⠥", +"Οὐ": "⠨⠥", +"Οὑ": "⠨⠧⠥", +"Οὒ": "⠨⠾⠥", +"Οὓ": "⠨⠷⠥", +"Οὔ": "⠨⠴⠥", +"Οὕ": "⠨⠢⠥", +"Οὖ": "⠨⠲⠥", +"Οὗ": "⠨⠖⠥", +"αι": "⠣", +"αί": "⠐⠣", +"Αι": "⠨⠣", +"Αί": "⠨⠐⠣", +"αυ": "⠡", +"αύ": "⠐⠡", +"Αυ": "⠨⠡", +"Αύ": "⠨⠐⠡", +"ει": "⠩", +"εί": "⠐⠩", +"Ει": "⠨⠩", +"Εί": "⠨⠐⠩", +"ευ": "⠱", +"εύ": "⠐⠱", +"Ευ": "⠨⠱", +"Εύ": "⠨⠐⠱", +"οι": "⠪", +"οί": "⠐⠪", +"Οι": "⠨⠪", +"Οί": "⠨⠐⠪", +"ου": "⠥", +"ού": "⠐⠥", +"Ου": "⠨⠥", +"Ού": "⠨⠐⠥", +"υι": "⠻", +"υί": "⠐⠻", +"Υι": "⠨⠻", +"Υί": "⠨⠐⠻", +"ηυ": "⠳", +"ηύ": "⠐⠳", +"Ηυ": "⠨⠳", +"Ηύ": "⠨⠐⠳", + + + +"ὰ": "⠈⠁", +"ά": "⠐⠁", +"ἀ": "⠁", +"ἁ": "⠧⠁", +"ἂ": "⠾⠁", +"ἃ": "⠷⠁", +"ἄ": "⠴⠁", +"ἅ": "⠢⠁", +"ἆ": "⠲⠁", +"ἇ": "⠖⠁", +"ᾶ": "⠠⠁", + +"ᾳ": "⠁⠔", +"ᾲ": "⠈⠁⠔", +"ᾴ ": "⠐⠁⠔", +"ᾀ": "⠁⠔", +"ᾁ": "⠧⠁⠔", +"ᾂ": "⠾⠁⠔", +"ᾃ": "⠷⠁⠔", +"ᾄ": "⠴⠁⠔", +"ᾅ": "⠢⠁⠔", +"ᾆ": "⠲⠁⠔", +"ᾇ": "⠖⠁⠔", +"ᾷ": "⠠⠁⠔", + +"ὲ": "⠈⠑", +"έ": "⠐⠑", +"ἐ": "⠑", +"ἑ": "⠧⠑", +"ἒ": "⠾⠑", +"ἓ": "⠷⠑", +"ἔ": "⠴⠑", +"ἕ": "⠢⠑", + + +"ὴ": "⠈⠜", +"ή": "⠐⠜", +"ἠ": "⠜", +"ἡ": "⠧⠜", +"ἢ": "⠾⠜", +"ἣ": "⠷⠜", +"ἤ": "⠴⠜", +"ἥ": "⠢⠜", +"ἦ": "⠲⠜", +"ἧ": "⠖⠜", +"ῆ": "⠠⠜", + +"ῃ": "⠼", +"ῂ": "⠈⠼", +"ῄ": "⠐⠼ ", +"ᾐ": "⠼", +"ᾑ": "⠧⠼", +"ᾒ": "⠾⠼", +"ᾓ": "⠷⠼", +"ᾔ": "⠴⠼", +"ᾕ": "⠢⠼", +"ᾖ": "⠲⠼", +"ᾗ": "⠖⠼", +"ῇ": "⠠⠼", + +"ὶ": "⠈⠊", +"ί": "⠐⠊", +"ἰ": "⠊", +"ἱ": "⠧⠊", +"ἲ": "⠾⠊", +"ἳ": "⠷⠊", +"ἴ": "⠴⠊", +"ἵ": "⠢⠊", +"ἶ": "⠲⠊", +"ἷ": "⠖⠊", +"ῖ": "⠠⠊", + +"ὸ": "⠈⠕", +"ό": "⠐⠕", +"ὀ": "⠕", +"ὁ": "⠧⠕", +"ὂ": "⠾⠕", +"ὃ": "⠷⠕", +"ὄ": "⠴⠕", +"ὅ": "⠢⠕", + +"ὺ": "⠈⠽", +"ύ": "⠐⠽", +"ὐ": "⠽", +"ὑ": "⠧⠽", +"ὒ": "⠾⠽", +"ὓ": "⠷⠽", +"ὔ": "⠴⠽", +"ὕ": "⠢⠽", +"ὖ": "⠲⠽", +"ὗ": "⠖⠽", +"ῦ": "⠠⠽", + +"ὼ": "⠈⠚", +"ώ": "⠐⠚", +"ὠ": "⠚", +"ὡ": "⠧⠚", +"ὢ": "⠾⠚", +"ὣ": "⠷⠚", +"ὤ": "⠴⠚", +"ὥ": "⠢⠚", +"ὦ": "⠲⠚", +"ὧ": "⠖⠚", +"ῶ": "⠠⠚", + +"ῳ": "⠺", +"ῲ": "⠈⠺", +"ῴ": "⠐⠺", +"ᾠ": "⠺", +"ᾡ": "⠧⠺", +"ᾢ": "⠾⠺", +"ᾣ": "⠷⠺", +"ᾤ": "⠴⠺", +"ᾥ": "⠢⠺", +"ᾦ": "⠲⠺", +"ᾧ": "⠖⠺", +"ῷ": "⠠⠺", + +"ῤ": "⠗", +"ῥ": "⠧⠗", +"Ῥ": "⠨⠧⠗", + +"Ὰ": "⠨⠈⠁", +"Ά": "⠨⠐⠁", +"Ἀ": "⠨⠁", +"Ἁ": "⠨⠧⠁", +"Ἂ": "⠨⠾⠁", +"Ἃ": "⠨⠷⠁", +"Ἄ": "⠨⠴⠁", +"Ἅ": "⠨⠢⠁", +"Ἆ": "⠨⠲⠁", +"Ἇ": "⠨⠖⠁", +" ": " ", +"ᾼ ⠨⠁⠔ ": " ", +"ᾈ": "⠨⠁⠔", +"ᾉ": "⠨⠧⠁⠔", +"ᾊ": "⠨⠾⠁⠔", +"ᾋ": "⠨⠷⠁⠔", +"ᾌ": "⠨⠴⠁⠔", +"ᾍ": "⠨⠢⠁⠔", +"ᾎ": "⠨⠲⠁⠔", +"ᾏ": "⠨⠖⠁⠔", + + +"Ὲ": "⠨⠈⠑", +"Έ": "⠨⠐⠑", +"Ἐ": "⠨⠑", +"Ἑ": "⠨⠧⠑", +"Ἒ": "⠨⠾⠑", +"Ἓ": "⠨⠷⠑", +"Ἔ": "⠨⠴⠑", +"Ἕ": "⠨⠢⠑", + +"Ὴ": "⠨⠈⠜", +"Ή": "⠨⠐⠜", +"Ἠ": "⠨⠜", +"Ἡ": "⠨⠧⠜", +"Ἢ": "⠨⠾⠜", +"Ἣ": "⠨⠷⠜", +"Ἤ": "⠨⠴⠜", +"Ἥ": "⠨⠢⠜", +"Ἦ": "⠨⠲⠜", +"Ἧ": "⠨⠖⠜", + +"ῌ": "⠨⠼", +"ᾘ": "⠨⠼", +"ᾙ": "⠨⠧⠼", +"ᾚ": "⠨⠾⠼", +"ᾛ": "⠨⠷⠼", +"ᾜ": "⠨⠴⠼", +"ᾝ": "⠨⠢⠼", +"ᾞ": "⠨⠲⠼", +"ᾟ": "⠨⠖⠼", + + +"Ὶ": "⠨⠈⠊", +"Ί ": "⠐⠨⠊", +"Ἰ": "⠨⠊", +"Ἱ": "⠨⠧⠊", +"Ἲ": "⠨⠾⠊", +"Ἳ": "⠨⠷⠊", +"Ἴ": "⠨⠴⠊", +"Ἵ": "⠨⠢⠊", +"Ἶ": "⠨⠲⠊", +"Ἷ": "⠨⠖⠊", + +"Ὸ": "⠨⠈⠕", +"Ό": "⠨⠐⠕", +"Ὀ": "⠨⠕", +"Ὁ": "⠨⠧⠕", +"Ὂ": "⠨⠾⠕", +"Ὃ": "⠨⠷⠕", +"Ὄ": "⠨⠴⠕", +"Ὅ": "⠨⠢⠕", + +"Ὺ": "⠨⠈⠽", +"Ύ": "⠨⠐⠽", +"Ὑ": "⠨⠧⠽", +"Ὓ": "⠨⠷⠽", +"Ὕ": "⠨⠢⠽", +"Ὗ": "⠨⠖⠽", + +"Ὼ": "⠨⠈⠚", +"Ώ": "⠨⠐⠚", +"Ὠ": "⠨⠚", +"Ὡ": "⠨⠧⠚", +"Ὢ": "⠨⠾⠚", +"Ὣ": "⠨⠷⠚", +"Ὤ": "⠨⠴⠚", +"Ὥ": "⠨⠢⠚", +"Ὦ": "⠨⠲⠚", +"Ὧ": "⠨⠖⠚", + +"ῼ": "⠨⠺", +"ᾨ": "⠨⠺", +"ᾩ": "⠨⠧⠺", +"ᾪ": "⠨⠾⠺", +"ᾫ": "⠨⠷⠺", +"ᾬ": "⠨⠴⠺", +"ᾭ": "⠨⠢⠺", +"ᾮ": "⠨⠲⠺", +"ᾯ": "⠨⠖⠺", + +"“": "⠦", +"”": "⠴", +"᾽": "⠁", +"ι": "⠔", +"᾿": "⠁", +"῀": "⠠", +"῁": "⠠", +"῍": "⠾", +"῎": "⠴", +"῏": "⠲", +"῝": "⠷", +"῞": "⠢", +"῟": "⠖", +"ῒ": "⠈⠊", +"ΐ": "⠐⠊", +"ῗ": "⠠⠊", +"ῢ": "⠈⠽", +"ΰ": "⠐⠽", +"ῧ": "⠠⠽", +"῭": "⠈", +"΅": "⠐", +"`": "⠈", +"´": "⠈", +"῾": "⠧", +"†": "\u2838\u283b", + + +"ᾰ": "⠁⠸⠩", +"ᾱ": "⠁⠱", +"Ᾰ": "⠨⠁⠸⠩", +"Ᾱ": "⠨⠁⠱", +"ῐ": "⠊⠸⠩", +"ῑ": "⠊⠱", +"Ῐ": "⠨⠊⠸⠩", +"Ῑ": "⠨⠊⠱", +"ῠ": "⠽⠸⠩", +"ῡ": "⠽⠱", +"Ῠ": "⠨⠽⠸⠩", +"Ῡ": "⠨⠽⠱", + +"αῖ": "⠠⠣", +"Αῖ": "⠨⠠⠣", +"αῦ": "⠠⠡", +"Αῦ": "⠨⠠⠡", +"εῖ": "⠠⠩", +"Εῖ": "⠨⠠⠩", +"εῦ": "⠠⠱", +"Εῦ": "⠨⠠⠱", +"οῖ": "⠠⠪", +"Οῖ": "⠨⠠⠪", +"οῦ": "⠠⠥", +"Οῦ": "⠨⠠⠥", +"υῖ": "⠠⠻", +"Υῖ": "⠨⠠⠻", +"ηῦ": "⠠⠳", +"Ηῦ": "⠨⠠⠳", + +"\n": "\n", +"\r": "\r", + +"~": "⠈⠱", +"@": "⠈⠁", +"#": "⠨⠼", +"$": "⠈⠎", +"%": "⠈⠴", +"^": "⠸⠣", +"&": "⠯", +"*": "⠈⠼", +"(": "⠷", +")": "⠾", +"-": "⠤", +"_": "⠩", +"=": "⠨⠅", +"+": "⠮", + +"[": "⠈⠷", +"{": "⠨⠷", +"]": "⠈⠾", +"}": "⠨⠾", +"\\": "⠸⠡", +"|": "⠳", +";": "⠢", +":": "⠆", +"‘": "⠄", +"’": "⠄", +"“": "⠦", +"”": "⠴", +",": "⠂", +"<": "⠐⠅", +".": "⠲", +">": "⠨⠂", +"/": "⠌", +"?": "⠸⠦", +"`": "\u2820\u2826", +"'": "\u2834\u2804", + }, + "mathSymbols": { + "#": "\u283c", + "0": "\u2834", + "1": "\u2802", + "2": "\u2806", + "3": "\u2812", + "4": "\u2832", + "5": "\u2822", + "6": "\u2816", + "7": "\u2836", + "8": "\u2826", + "9": "\u2814", + "#0": "\u283c\u2834", + "#1": "\u283c\u2802", + "#2": "\u283c\u2806", + "#3": "\u283c\u2812", + "#4": "\u283c\u2832", + "#5": "\u283c\u2822", + "#6": "\u283c\u2816", + "#7": "\u283c\u2836", + "#8": "\u283c\u2826", + "#9": "\u283c\u2814", + "a": "\u2801", + "b": "\u2803", + "c": "\u2809", + "d": "\u2819", + "e": "\u2811", + "f": "\u280b", + "g": "\u281b", + "h": "\u2813", + "i": "\u280a", + "j": "\u281a", + "k": "\u2805", + "l": "\u2807", + "m": "\u280d", + "n": "\u281d", + "o": "\u2815", + "p": "\u280f", + "q": "\u281f", + "r": "\u2817", + "s": "\u280e", + "t": "\u281e", + "u": "\u2825", + "v": "\u2827", + "w": "\u283a", + "x": "\u282d", + "y": "\u283d", + "z": "\u2835", + "A": "\u2820\u2801", + "B": "\u2820\u2803", + "C": "\u2820\u2809", + "D": "\u2820\u2819", + "E": "\u2820\u2811", + "F": "\u2820\u280b", + "G": "\u2820\u281b", + "H": "\u2820\u2813", + "I": "\u2820\u280a", + "J": "\u2820\u281a", + "K": "\u2820\u2805", + "L": "\u2820\u2807", + "M": "\u2820\u280d", + "N": "\u2820\u281d", + "O": "\u2820\u2815", + "P": "\u2820\u280f", + "Q": "\u2820\u281f", + "R": "\u2820\u2817", + "S": "\u2820\u280e", + "T": "\u2820\u281e", + "U": "\u2820\u2825", + "V": "\u2820\u2827", + "W": "\u2820\u283a", + "X": "\u2820\u282d", + "Y": "\u2820\u283d", + "Z": "\u2820\u2835", + "Α": "\u2828\u2801", + "Β": "\u2828\u2803", + "Ε": "\u2828\u2811", + "Ζ": "\u2828\u2835", + "Η": "\u2828\u281c", + "Ι": "\u2828\u280a", + "Κ": "\u2828\u2805", + "Μ": "\u2828\u280d", + "Ν": "\u2828\u281d", + "Ξ": "\u2828\u282d", + "Ο": "\u2828\u2815", + "Ρ": "\u2828\u2817", + "Τ": "\u2828\u281e", + "Υ": "\u2828\u283d", + "Χ": "\u2828\u2813", + "α": "\u2801", + "β": "\u2803", + "γ": "\u281b", + "δ": "\u2819", + "ε": "\u2811", + "ζ": "\u2835", + "η": "\u281c", + "θ": "\u2839", + "ι": "\u280a", + "ϊ": "\u280a", + "κ": "\u2805", + "λ": "\u2807", + "μ": "\u280d", + "ν": "\u281d", + "ξ": "\u282d", + "ο": "\u2815", + "π": "\u280f", + "ρ": "\u2817", + "σ": "\u280e", + "ς": "\u280e", + "τ": "\u281e", + "υ": "\u283d", + "ϋ": "\u283d", + "φ": "\u280b", + "χ": "\u2813", + "ψ": "\u282f", + "ω": "\u281a", + "\\sqrt-b": "\u281c", + "\\sqrt-e": "\u283b", + "\\sqrt-level": "\u2828", + "\\radical-index": "\u2823", + "\\frac-b": "\u2839", + "\\frac-e": "\u283c", + "frac-level": "\u2820", + "\\frac-separator": "\u280c", + "\\superscript": "\u2818", + "\\sub": "\u2830", + "\\base": "\u2810", + "\\arccos": "\u2801\u2817\u2809\u2809\u2815\u280e", + "\\cot": "\u2809\u2815\u281e", + "\\exp": "\u2811\u282d\u280f", + "\\lim": "\u2807\u280a\u280d", + "\\min": "\u280d\u280a\u281d", + "\\tan": "\u281e\u2801\u281d", + "\\arcsin": "\u2801\u2817\u2809\u280e\u280a\u281d", + "\\coth": "\u2809\u2815\u281e\u2813", + "\\gcd": "\u281b\u2809\u2819", + "\\liminf": "\u2829\u2807\u280a\u280d", + "\\varliminf": "\u2829\u2807\u280a\u280d", + "\\Pr": "\u2820\u280f\u2817", + "\\tanh": "\u281e\u2801\u281d\u2813", + "\\arctan": "\u2801\u2817\u2809\u281e\u2801\u281d", + "\\csc": "\u2809\u280e\u2809", + "\\hom": "\u2813\u2815\u280d", + "\\limsup": "\u2823\u2807\u280a\u280d", + "\\varlimsup": "\u2823\u2807\u280a\u280d", + "\\sec": "\u280e\u2811\u2809", + "\\arg": "\u2801\u2817\u281b", + "\\deg": "\u2819\u2811\u281b", + "\\inf": "\u280a\u281d\u280b", + "\\ln": "\u2807\u281d", + "\\sin": "\u280e\u280a\u281d ", + "\\cos": "\u2809\u2815\u280e ", + "\\det": "\u2819\u2811\u281e", + "\\ker": "\u2805\u2811\u2817", + "\\log": "\u2807\u2815\u281b ", + "\\sinh": "\u280e\u280a\u281d\u2813 ", + "\\cosh": "\u2809\u2815\u280e\u2813 ", + "\\dim": "\u2819\u280a\u280d", + "\\lg": "\u2807\u281b", + "\\max": "\u280d\u2801\u282d", + "\\sup": "\u280e\u2825\u280f", + " ": " ", + ".": "\u2832", + "\\qquad": " ", + "\\quad": " ", + "\\;": " ", + "\\:": " ", + "\\,": " ", + "\\!": "", + "\\\n": " ", + ":": "\u2806", + "+": "\u282c", + "-": "\u2824", + "*": "\u2808\u283c", + "/": "\u280c", + "=": "\u2828\u2805", + "!": "\u2816", + "--": "\u2824\u2824", + "---": "\u2824\u2824\u2824", + "\\&": "\u2838\u282f", + ",": "\u2820", + ";": "\u2822", + "(": "\u2837", + ")": "\u283e", + "[": "\u2808\u2837", + "]": "\u2808\u283e", + "\\left(": "\u2820\u2837", + "\\right)": "\u2820\u283e", + "\\bigl(": "\u2820\u2837", + "\\Bigl(": "\u2820\u2837", + "\\biggl(": "\u2820\u2837", + "\\Biggl(": "\u2820\u2837", + "\\bigr)": "\u2820\u283e", + "\\Bigr)": "\u2820\u283e", + "\\biggr)": "\u2820\u283e", + "\\Biggr)": "\u2820\u283e", + "\\right.": "", + "\\left.": "", + "\\big": "\u2820", + "\\bigg": "\u2820", + "\\right|": "\u2820\u2833", + "\\left|": "\u2820\u2833", + "\\ ": " ", + "\\hspace*": " ", + "\\left[": "\u2808\u2820\u2837", + "\\right]": "\u2808\u2820\u283e", + "\\bigl[": "\u2808\u2820\u2837", + "\\Bigl[": "\u2808\u2820\u2837", + "\\biggl[": "\u2808\u2820\u2837", + "\\Biggl[": "\u2808\u2820\u2837", + "\\bigr]": "\u2808\u2820\u283e", + "\\Bigr]": "\u2808\u2820\u283e", + "\\biggr]": "\u2808\u2820\u283e", + "\\Biggr]": "\u2808\u2820\u283e", + "\\setminus": "\u2838\u2821", + "\\sum": "\u2828\u2820\u280e", + "\\bigcap": "\u2828\u2829", + "\\bigodot": "\u282b\u2809\u2838\u282b\u2821\u283b", + "\\int": "\u282e", + "\\oint": "\u282e\u2808\u282b\u2809\u283b", + "\\prod": "\u2828\u2820\u280f", + "\\bigcup": "\u2828\u282c", + "\\bigotimes": "\u282b\u2809\u2838\u282b\u2808\u2821\u283b", + "\\bigvee": "\u2808\u282c", + "\\bigwedge": "\u2808\u2829", + "\\coprod": "INVERTED PI", + "@": "\u2808\u2801\u281e", + "\\ddag": "\u2838\u2838\u283b", + "\\textstirling": "\u2808\u2807", + "\\SS": "\u2820\u280e\u2820\u280e", + "\\lq": "\u2820\u2826", + "`": "\u2820\u2826", + "'": "\u2834\u2804", + "\\leftquote": "\u2820\u2826", + "\\rq": "\u2834\u2804", + "\\rightquote": "\u2834\u2804", + "\"": "\u2834\u2804", + "\\&": "\u2838\u282f", + "\\_": "\u2824\u2824", + "\\checked": "\u2808\u281c", + "\\barlambda": "\u2808\u2828\u2807", + "\\$": "\u2808\u280e", + "\\bigoplus": "\u282b\u2809\u2838\u282b\u282c\u283b", + "\\biguplus": "\u2828\u282c\u2838\u282b\u282c\u283b", + "\\bigl\\|": "\u2820\u2833", + "\\bigr\\|": "\u2820\u2833", + "\\bigl|": "\u2820\u2833", + "\\bigr|": "\u2820\u2833", + "\\Bigl|": "\u2820\u2833", + "\\Bigr|": "\u2820\u2833", + "\\Bigl\\|": "\u2820\u2833", + "\\Bigr\\|": "\u2820\u2833", + "\\biggl|": "\u2820\u2833", + "\\biggr|": "\u2820\u2833", + "\\Biggl|": "\u2820\u2833", + "\\Biggr|": "\u2820\u2833", + "\\uparrow": "\u282b\u2823\u2812\u2812\u2815", + "\\{": "\u2828\u2837", + "\\left\\{": "\u2828\u2820\u2837", + "\\bigl\\{": "\u2828\u2820\u2837", + "\\Bigl\\{": "\u2828\u2820\u2837", + "\\biggl\\{": "\u2828\u2820\u2837", + "\\Biggl\\{": "\u2828\u2820\u2837", + "\\lfloor": "\u2808\u2830\u2837", + "\\langle": "\u2828\u2828\u2837", + "\\left\\langle": "\u2828\u2828\u2820\u2837", + "\\bigl\\langle": "\u2828\u2828\u2820\u2837", + "\\Biggl\\langle": "\u2828\u2828\u2820\u2837", + "\\biggl\\langle": "\u2828\u2828\u2820\u2837", + "\\Biggl\\langle": "\u2828\u2828\u2820\u2837", + "|": "\u2833", + "\\bigm|": "\u2820\u2833", + "\\Bigm|": "\u2820\u2833", + "\\biggm|": "\u2820\u2833", + "\\Biggm|": "\u2820\u2833", + "\\Uparrow": "\u282b\u2823\u2836\u2836\u2815", + "\\}": "\u2828\u283e", + "\\right\\}": "\u2828\u2820\u283e", + "\\bigr\\}": "\u2828\u2820\u283e", + "\\Bigr\\}": "\u2828\u2820\u283e", + "\\biggr\\}": "\u2828\u2820\u283e", + "\\Biggr\\}": "\u2828\u2820\u283e", + "\\rfloor": "\u2808\u2830\u283e", + "\\rangle": "\u2828\u2828\u283e", + "\\right\\rangle": "\u2828\u2828\u2820\u283e", + "\\bigr\\rangle": "\u2828\u2828\u2820\u283e", + "\\Bigr\\rangle": "\u2828\u2828\u2820\u283e", + "\\biggr\\rangle": "\u2828\u2828\u2820\u283e", + "\\Biggr\\rangle": "\u2828\u2828\u2820\u283e", + "\\|": "\u2833\u2833", + "\\left\\|": "\u2820\u2833\u2820\u2833", + "\\right\\|": "\u2820\u2833\u2820\u2833", + "\\big\\|": "\u2820\u2833\u2820\u2833", + "\\Big\\|": "\u2820\u2833\u2820\u2833", + "\\bigg\\|": "\u2820\u2833\u2820\u2833", + "\\Bigg\\|": "\u2820\u2833\u2820\u2833", + "\\big(": "\u2820\u2837", + "\\big)": "\u2820\u283e", + "\\big\\{": "\u2828\u2820\u2837", + "\\big\\}": "\u2820\u2833\u2820\u2833", + "\\bigg(": "\u2820\u2837", + "\\bigg)": "\u2820\u283e", + "\\bigg\\{": "\u2828\u2820\u2837", + "\\bigg\\}": "\u2820\u2833\u2820\u2833", + "\\big|": "\u2820\u2833\u2820\u2833", + "\\bigg|": "\u2820\u2833\u2820\u2833", + "\\downarrow": "\u282b\u2829\u2812\u2812\u2815", + "\\updownarrow": "\u282b\u2823\u282a\u2812\u2812\u2815", + "\\lceil": "\u2808\u2818\u2837", + "\\Downarrow": "\u282b\u2829\u2836\u2836\u2815", + "\\Updownarrow": "\u282b\u2829\u282a\u2836\u2836\u2815", + "\\rceil": "\u2808\u2818\u283e", + "\\ulcorner": "\u2808\u2818\u2837", + "\\left\\ulcorner": "\u2808\u2818\u2820\u2837", + "\\bigl\\ulcorner": "\u2808\u2818\u2820\u2837", + "\\Bigl\\ulcorner": "\u2808\u2818\u2820\u2837", + "\\biggl\\ulcorner": "\u2808\u2818\u2820\u2837", + "\\Biggl\\ulcorner": "\u2808\u2818\u2820\u2837", + "\\urcorner": "\u2808\u2818\u283e", + "\\right\\urcorner": "\u2808\u2818\u2820\u283e", + "\\bigr\\urcorner": "\u2808\u2818\u2820\u283e", + "\\Bigr\\urcorner": "\u2808\u2818\u2820\u283e", + "\\biggr\\urcorner": "\u2808\u2818\u2820\u283e", + "\\Biggr\\urcorner": "\u2808\u2818\u2820\u283e", + "\\llcorner": "\u2808\u2830\u2837", + "\\left\\llcorner": "\u2808\u2830\u2820\u2837", + "\\bigl\\llcorner": "\u2808\u2830\u2820\u2837", + "\\Bigl\\llcorner": "\u2808\u2830\u2820\u2837", + "\\biggl\\llcorner": "\u2808\u2830\u2820\u2837", + "\\Biggl\\llcorner": "\u2808\u2830\u2820\u2837", + "\\lrcorner": "\u2808\u2830\u283e", + "\\right\\lrcorner": "\u2808\u2830\u2820\u283e", + "\\bigr\\lrcorner": "\u2808\u2830\u2820\u283e", + "\\Bigr\\lrcorner": "\u2808\u2830\u2820\u283e", + "\\biggr\\lrcorner": "\u2808\u2830\u2820\u283e", + "\\Biggr\\lrcorner": "\u2808\u2830\u2820\u283e", + "\\alpha": "\u2828\u2801", + "\\epsilon": "\u2828\u2811", + "\\theta": "\u2828\u2839", + "\\lambda": "\u2828\u2807", + "\\varrho": "\u2828\u2808\u2817", + "\\upsilon": "\u2828\u2825", + "\\psi": "\u2828\u283d", + "\\Gamma": "\u2828\u2820\u281b", + "\\Xi": "\u2828\u2820\u282d", + "\\Phi": "\u2828\u2820\u280b", + "\\beta": "\u2828\u2803", + "\\varepsilon": "\u2828\u2808\u2811", + "\\vartheta": "\u2828\u2808\u2839", + "\\mu": "\u2828\u280d", + "\\pi": "\u2828\u280f", + "\\sigma": "\u2828\u280e", + "\\phi": "\u2828\u280b", + "\\omega": "\u2828\u283a", + "\\Delta": "\u2828\u2820\u2819", + "\\Pi": "\u2828\u2820\u280f", + "\\Psi": "\u2828\u2820\u283d", + "\\gamma": "\u2828\u281b", + "\\zeta": "\u2828\u2835", + "\\iota": "\u2828\u280a", + "\\nu": "\u2828\u281d", + "\\varpi": "\u2828\u2808\u280f", + "\\varsigma": "\u2828\u2808\u280e", + "\\varphi": "\u2828\u2808\u280b", + "\\Theta": "\u2828\u2820\u2839", + "\\Sigma" : "\u2828\u2820\u280e", + "\\Omega": "\u2828\u2820\u283a", + "\\delta": "\u2828\u2819", + "\\eta": "\u2828\u2831", + "\\kappa": "\u2828\u2805", + "\\xi": "\u2828\u282d", + "\\rho": "\u2828\u2817", + "\\tau": "\u2828\u281e", + "\\chi": "\u2828\u282f", + "\\Lambda": "\u2828\u2820\u2807", + "\\Upsilon": "\u2828\u2820\u2825", + "\\digamma": "\u2828\u2827", + "\\varkappa": "\u2828\u2808\u2805", + "\\beth": "\u2820\u2820\u2827", + "\\daleth": "\u2820\u2820\u2819", + "\\gimel": "\u2820\u2820\u281b", + "\\Stigma": "\u2828\u2820\u282e", + "\\Sampi": "\u2828\u2820\u2809", + "\\Qoppa": "\u2828\u2820\u281f", + "\\pm": "\u282c\u2824", + "\\mp": "\u2824\u282c", + "\\times": "\u2808\u2821", + "\\div": "\u2828\u280c", + "\\ast": "\u2808\u283c", + "\\star": "\u282b\u280e", + "\\circ": "\u2828\u2821", + "\\bullet": "\u2838\u2832", + "\\cdot": "\u2821", + "\\cap": "\u2828\u2829", + "\\cup": "\u2828\u282c", + "\\uplus": "\u2828\u282c\u2838\u282b\u282c\u283b", + "\\vee": "\u2808\u282c", + "\\wedge": "\u2808\u2829", + "\\diamond": "\u282b\u2819", + "\\bigtriangleup": "\u282b\u281e", + "\\bigtriangledown": "\u2828\u282b", + "\\oplus": "\u282b\u2809\u2838\u282b\u282c\u283b", + "\\ominus": "\u282b\u2809\u2838\u282b\u2824\u283b", + "\\otimes": "\u282b\u2809\u2838\u282b\u2808\u2821\u283b", + "\\oslash": "\u282b\u2809\u2838\u282b\u2814\u283b", + "\\odot": "\u282b\u2809\u2838\u282b\u2821\u283b", + "\\bigcirc": "\u282b\u2809", + "\\dagger": "\u2838\u283b", + "\\ddagger": "\u2838\u2838\u283b", + + "\\amalg": "????", + "\\dotplus": "\u2810\u282c\u2823\u2821\u283b", + "\\Cup": "\u2828\u282c\u2838\u282b\u2828\u282c\u283b", + "\\doublebarwedge": "\u2828\u2805\u2808\u2829", + "\\boxdot": "\u282b\u2832\u2838\u282b\u2821\u283b", + "\\circleddash": "\u282b\u2809\u2838\u282b\u2824\u283b", + "\\centerdot": "\u2821", + "\\smallsetminus": "\u2838\u2821", + "\\barwedge": "\u2831\u2808\u2829", + "\\boxminus": "\u282b\u2832\u2838\u282b\u2831\u283b", + "\\boxplus": "\u282b\u2832\u2838\u282b\u282c\u283b", + "\\circledast": "\u282b\u2809\u2838\u282b\u2808\u283c\u283b", + "\\intercal": "\u282b\u2823\u2812\u2812\u2833", + "\\Cap": "\u2828\u2829\u2838\u282b\u2828\u2829\u283b", + "\\veebar": "\u2808\u282c\u2831", + "\\boxtimes": "\u282b\u2832\u2838\u282b\u2808\u2821\u283b", + "\\divideontimes": "\u2808\u2821\u2838\u282b\u2828\u280c\u283b", + "\\circledcirc": "\u282b\u2809\u2838\u282b\u2828\u2821\u283b", + "\\leftarrow": "\u282b\u282a", + "\\Leftarrow": "\u282b\u282a\u2836\u2836", + "\\rightarrow": "\u282b\u2815", + "\\to": "\u282b\u2815", + "\\Rightarrow": "\u282b\u2836\u2836\u2815", + "\\leftrightarrow": "\u282b\u282a\u2812\u2812\u2815", + "\\Leftrightarrow": "\u282b\u282a\u2836\u2836\u2815", + "\\mapsto": "\u282b\u2833\u2812\u2815", + "\\hookleftarrow": "\u282b\u282a\u2812\u2812\u2808\u283d", + "\\leftharpoonup": "\u282b\u2808\u282a\u2812\u2812", + "\\leftharpoondown": "\u282b\u2820\u282a\u2812\u2812", + "\\leadsto": "\u282b\u2814\u2812\u2822\u2815", + "\\longleftarrow": "\u282b\u282a\u2812\u2812", + "\\Longleftarrow": "\u282b\u282a\u2812\u2812", + "\\longrightarrow": "\u282b\u2812\u2812\u2815", + "\\Longrightarrow": "\u282b\u282a\u2836\u2836", + "\\longleftrightarrow": "\u282b\u282a\u2812\u2812\u2815", + "\\Longleftrightarrow": "\u282b\u282a\u2836\u2836\u2815", + "\\longmapsto": "\u282b\u2833\u2812\u2812\u2815", + "\\hookrightarrow": "\u282b\u2808\u282f\u2812\u2812\u2815", + "\\rightharpoonup": "\u282b\u2812\u2812\u2808\u2815", + "\\rightharpoondown": "\u282b\u2812\u2812\u2820\u2815", + "\\uparrow": "\u282b\u2823\u2812\u2812\u2815", + "\\Uparrow": "\u282b\u2823\u2836\u2836\u2815", + "\\downarrow": "\u282b\u2829\u2812\u2812\u2815", + "\\Downarrow": "\u282b\u2829\u2836\u2836\u2815", + "\\updownarrow": "\u282b\u2823\u282a\u2812\u2812\u2815", + "\\Updownarrow": "\u282b\u2823\u282a\u2836\u2836\u2815", + "\\nearrow": "\u282b\u2818\u2812\u2812\u2815", + "\\searrow": "\u282b\u2830\u2812\u2812\u2815", + "\\swarrow": "\u282b\u2830\u282a\u2812\u2812", + "\\nwarrow": "\u282b\u2818\u282a\u2812\u2812", + "\\leftrightarrows": "\u282b\u282a\u2812\u2812\u282b\u2812\u2812\u2815", + "\\leftarrowtail": "\u282b\u282a\u2812\u2812\u282a", + "\\curvearrowleft": "\u282b\u2822\u2814\u2815", + "\\upuparrows": "\u282b\u2823\u2812\u2812\u2815\u2810\u282b\u2823\u2812\u2812\u2815", + "\\multimap": "\u282b\u2812\u2812\u2828\u2821", + "\\rightleftarrows": "\u282b\u2812\u2812\u2815\u282b\u282a\u2812\u2812", + "\\twoheadrightarrow": "\u282b\u2812\u2812\u2815\u2815", + "\\rightleftharpoons": "\u282b\u2812\u2812\u2808\u2815\u282b\u2820\u282a\u2812\u2812", + "\\downharpoonright": "\u282b\u2829\u2812\u2812\u2808\u2815", + "\\Lleftarrow": "\u282b\u282a\u283f\u283f", + "\\circlearrowleft": "\u282b\u2809\u2838\u282b\u282a\u283b", + "\\upharpoonleft": "\u282b\u2823\u2812\u2812\u2808\u2815", + "\\leftrightsquigarrow": "\u282b\u282a\u2814\u2822\u2814\u2815", + "\\rightrightarrows": "\u282b\u2812\u2812\u2815\u282b\u2812\u2812\u2815", + "\\curvearrowright": "\u282b\u282a\u2822\u2814", + "\\downdownarrows": "\u282b\u2829\u2812\u2812\u2815\u2810\u282b\u2829\u2812\u2812\u2815", + "\\rightsquigarrow": "\u282b\u2814\u2822\u2814\u2815", + "\\rightarrowtail": "\u282b\u2815\u2812\u2812\u2815", + "\\leftleftarrows": "\u282b\u282a\u2812\u2812\u282b\u282a\u2812\u2812", + "\\twoheadleftarrow": "\u282b\u282a\u282a\u2812\u2812", + "\\leftrightharpoons": "\u282b\u2820\u282a\u2812\u2812\u282b\u2812\u2812\u2808\u2815", + "\\downharpoonleft": "\u282b\u2829\u2812\u2812\u2820\u2815", + "\\circlearrowright": "\u282b\u2809\u2838\u282b\u2815\u283b", + "\\upharpoonright": "\u282b\u2823\u2812\u2812\u2820\u2815", + "\\Rrightarrow": "\u282b\u283f\u283f\u2815", + "\\nleftarrow": "\u280c\u282b\u282a", + "\\nRightarrow": "\u280c\u282b\u2836\u2836\u2815", + "\\nrightarrow": "\u280c\u282b\u2815", + "\\nleftrightarrow": "\u280c\u282b\u282a\u2812\u2812\u2815", + "\\nLeftarrow": "\u280c\u282b\u282a\u2836\u2836", + "\\nLeftrightarrow": "\u280c\u282b\u282a\u2836\u2836\u2815", + "\\leq": "\u2810\u2805\u2831", + "\\le": "\u2810\u2805\u2831", + "\\prec": "\u2828\u2810\u2805", + "\\preceq": "\u2828\u2810\u2805\u2831", + "\\ll": "\u2810\u2805\u2808\u2810\u2805\u283b", + "\\subset": "\u2838\u2810\u2805", + "\\subseteq": "\u2838\u2810\u2805\u2831", + "\\in": "\u2808\u2811", + "\\vdash": "\u282b\u2833\u2812\u2812", + "\\geq": "\u2828\u2802\u2831", + "\\succ": "\u2828\u2828\u2802", + "\\succeq": "\u2828\u2828\u2802\u2831", + "\\gg": "\u2828\u2802\u2808\u2828\u2802\u283b", + "\\supset": "\u2838\u2828\u2802", + "\\supseteq": "\u2838\u2828\u2802\u2831", + "\\ni": "\u2808\u2822", + "\\dashv": "\u282b\u2812\u2812\u2833", + "\\equiv": "\u2838\u2807", + "\\sim": "\u2808\u2831", + "\\simeq": "\u2808\u2831\u2831", + "\\asymp": "\u282b\u2801\u282b\u2804", + "\\approx": "\u2808\u2831\u2808\u2831", + "\\cong": "\u2808\u2831\u2828\u2805", + "\\neq": "\u280c\u2828\u2805", + "\\ne": "\u280c\u2828\u2805", + "\\not": "\u280c", + "\\doteq": "\u2810\u2828\u2805\u2823\u2821\u283b", + "\\propto": "\u2838\u283f", + "<": "\u2810\u2805", + "\\models": "\u282b\u2833\u2836\u2836", + "\\perp": "\u282b\u280f", + "\\mid": "\u2833", + "\\parallel": "\u282b\u2807", + "\\smile": "\u282b\u2804", + "\\frown": "\u282b\u2801", + ">": "\u2828\u2802", + "\\leqq": "\u2810\u2805\u2828\u2805", + "\\lesssim": "\u2810\u2805\u2808\u2831", + "\\lessdot": "\u2810\u2805\u2838\u282b\u2821\u283b", + "\\lesseqgtr": "\u2810\u2805\u2831\u2828\u2802", + "\\precsim": "\u2828\u2810\u2805\u2808\u2831", + "\\smallsmile": "\u282b\u2804", + "\\Bumpeq": "\u2808\u2823\u2820\u2823", + "\\eqslantgtr": "\u2831\u2828\u2802", + "\\gtrdot": "\u2828\u2802\u2838\u282b\u2821\u283b", + "\\gtreqless": "\u2828\u2802\u2831\u2810\u2805", + "\\circeq": "\u2810\u2828\u2805\u2823\u2828\u2821\u283b", + "\\thickapprox": "\u2838\u2808\u2831\u2838\u2808\u2831", + "\\succsim": "\u2828\u2828\u2802\u2808\u2831", + "\\shortparallel": "\u282b\u2807", + "\\varpropto": "\u2838\u283f", + "\\backepsilon": "\u2808\u2822", + "\\leqslant": "\u2810\u2805\u2831", + "\\lessapprox": "\u2810\u2805\u2808\u2831\u2808\u2831", + "\\lll": "\u2810\u2805\u2808\u2810\u2805\u2808\u2810\u2805\u283b", + "\\lesseqqgtr": "\u2810\u2805\u2828\u2805\u2828\u2802", + "\\subseteqq": "\u2838\u2810\u2805\u2828\u2805", + "\\precapprox": "\u2828\u2810\u2805\u2808\u2831\u2808\u2831", + "\\vDash": "\u282b\u2833\u2836\u2836", + "\\smallfrown": "\u282b\u2801", + "\\geqq": "\u2828\u2802\u2828\u2805", + "\\gtrsim": "\u2828\u2802\u2808\u2831", + "\\ggg": "\u2828\u2802\u2808\u2828\u2802\u2808\u2828\u2802\u283b", + "\\gtreqqless": "\u2828\u2802\u2828\u2805\u2810\u2805", + "\\triangleq": "\u2810\u2828\u2805\u2823\u282b\u281e\u283b", + "\\supseteqq": "\u2838\u2828\u2802\u2828\u2805", + "\\succapprox": "\u2828\u2828\u2802\u2808\u2831\u2808\u2831", + "\\Vdash": "\u282b\u2833\u2833\u2812\u2812", + "\\blacktriangleleft": "\u282b\u2838", + "\\blacktriangleright": "\u282b\u2838", + "\\eqslantless": "\u2831\u2810\u2805", + "\\approxeq": "\u2808\u2831\u2808\u2831\u2831", + "\\lessgtr": "\u2810\u2805\u2828\u2802", + "\\doteqdot": "\u2810\u2828\u2805\u2829\u2821\u2823\u2821\u283b", + "\\Subset": "\u2838\u2810\u2805\u2838\u282b\u2838\u2810\u2805\u283b", + "\\Vvdash": "\u282b\u2833\u2833\u2833\u2812\u2812", + "\\geqslant": "\u2828\u2802\u2831", + "\\gtrapprox": "\u2828\u2802\u2808\u2831\u2808\u2831", + "\\gtrless": "\u2828\u2802\u2810\u2805", + "\\eqcirc": "\u2828\u2821\u2808\u2828\u2805\u283b", + "\\thicksim": "\u2838\u2808\u2831", + "\\Supset": "\u2838\u2828\u2802\u2838\u282b\u2838\u2828\u2802\u283b", + "\\shortmid": "\u2833", + "\\therefore": "\u2820\u2821", + "\\because": "\u2808\u280c", + "\\nless": "\u280c\u2810\u2805", + "\\nleqq": "\u280c\u2810\u2805\u2828\u2805", + "\\nprec": "\u280c\u2828\u2810\u2805", + "\\precnapprox": "\u280c\u2828\u2810\u2805\u2808\u2831\u2808\u2831", + "\\nmid": "\u280c\u2833", + "\\subsetneq": "\u2838\u2810\u2805\u280c\u2831", + "\\varsubsetneqq": "\u2838\u2810\u2805\u280c\u2828\u2805", + "\\ngeqslant": "\u280c\u2828\u2802\u2831", + "\\gneqq": "\u2828\u2802\u280c\u2828\u2805", + "\\gnapprox": "\u2828\u2802\u280c\u2808\u2831\u2808\u2831", + "\\succnsim": "\u2828\u2828\u2802\u280c\u2808\u2831", + "\\nshortparallel": "\u280c\u282b\u2807", + "\\nVDash": "\u280c\u282b\u2833\u2833\u2812\u2812", + "\\nsupseteq": "\u280c\u2838\u2828\u2802\u2831", + "\\varsupsetneq": "\u2838\u2828\u2802\u280c\u2831", + "\\nleq": "\u280c\u2810\u2805\u2831", + "\\lneq": "\u2810\u2805\u280c\u2831", + "\\lnsim": "\u2810\u2805\u280c\u2808\u2831", + "\\npreceq": "\u280c\u2828\u2810\u2805\u2831", + "\\nsim": "\u280c\u2808\u2831", + "\\nvdash": "\u280c\u282b\u2833\u2812\u2812", + "\\varsubsetneq": "\u2838\u2810\u2805\u280c\u2831", + "\\ngtr": "\u280c\u2828\u2802", + "\\ngeqq": "\u280c\u2828\u2802\u2828\u2805", + "\\gvertneqq": "\u2828\u2802\u280c\u2828\u2805", + "\\nsucc": "\u2828\u2828\u2802", + "\\succnapprox": "\u2828\u2828\u2802\u280c\u2808\u2831\u2808\u2831", + "\\nparallel": "\u280c\u282b\u2807", + "\\nsupseteqq": "\u280c\u2838\u2828\u2802\u2828\u2805", + "\\supsetneqq": "\u2838\u2828\u2802\u280c\u2828\u2805", + "\\nleqslant": "\u280c\u2810\u2805\u2831", + "\\lneqq": "\u2810\u2805\u280c\u2828\u2805", + "\\lnapprox": "\u2810\u2805\u280c\u2808\u2831\u2808\u2831", + "\\precnsim": "\u2828\u2810\u2805\u280c\u2808\u2831", + "\\nshortmid": "\u280c\u2833", + "\\nvDash": "\u280c\u282b\u2833\u2836\u2836", + "\\nsubseteq": "\u280c\u2838\u2810\u2805\u2831", + "\\subsetneqq": "\u2838\u2810\u2805\u280c\u2828\u2805", + "\\ngeq": "\u280c\u2828\u2802\u2831", + "\\gneq": "\u2828\u2802\u280c\u2831", + "\\gnsim": "\u2828\u2802\u280c\u2808\u2831", + "\\nsucceq": "\u280c\u2828\u2828\u2802\u2831", + "\\ncong": "\u280c\u2808\u2831\u2828\u2805", + "\\nvDash": "\u280c\u282b\u2833\u2836\u2836", + "\\supsetneq": "\u2838\u2828\u2802\u280c\u2831", + "\\varsupsetneqq": "\u2838\u2828\u2802\u280c\u2828\u2805", + "\\ldots": "\u2804\u2804\u2804", + "\\dots": "\u2804\u2804\u2804", + "\\dotsc": "\u2804\u2804\u2804", + "\\aleph": "\u2820\u2820\u2801", + "\\hbar": "\u2808\u2813", + "\\surd": "\u281c", + "\\top": "\u282b\u2823\u2812\u2812\u2833", + "\\wp": "\u2808\u2830\u280f", + "\\Im": "\u2820\u280a\u280d", + "\\cdots": "\u2804\u2804\u2804", + "\\prime": "\u2804", + "\\emptyset": "\u2838\u2834", + "\\varnothing": "\u2838\u2834", + "\\Box": "\u282b\u2832", + "\\bot": "\u282b\u280f", + "\\angle": "\u282b\u282a", + "\\vdots": "\u282b\u2829\u2804\u2804\u2804", + "\\forall": "\u2808\u282f", + "\\exists": "\u2808\u283f", + "\\triangle": "\u282b\u281e", + "\\ell": "\u2820\u2807", + "\\partial": "\u2808\u2819", + "\\ddots": "\u282b\u2829\u2804\u2804\u2804", + "\\infty": "\u2820\u283f", + "\\nabla": "\u2828\u282b", + "\\Diamond": "\u282b\u2819", + "\\neg": "\u282b\u2812\u2812\u2820\u2833", + "\\sharp": "\u2828\u283c", + "\\Re": "\u2820\u2817\u2811", + "\\adots": "\u282b\u2823\u2804\u2804\u2804", + "\\lozenge": "\u282b\u2819", + "\\nexists": "\u280c\u2808\u283f", + "\\blacksquare": "\u282b\u2838\u2832", + "\\complement": "\u2828\u2809", + "\\square": "\u282b\u2832", + "\\blacktriangledown": "\u282b\u2838\u2828\u281e", + "\\vartriangle": "\u282b\u281e", + "\\circledS": "\u282b\u2809\u2838\u282b\u2820\u280e\u283b", + "\\varnothing": "\u2838\u2834", + "\\blacklozenge": "\u282b\u2838\u2819", + "\\measuredangle": "\u282b\u282a\u2808\u282b\u2801\u283b", + "\\blacktriangle": "\u282b\u2838\u281e", + "\\bigstar": "\u282b\u2838\u280e", + "\\diagup": "\u280c", + "\\Bbbk": "\u2838\u2805", + "\\diagdown": "\u2838\u2821", + "\\llbracket": "\u2808\u2838\u2837", + "\\left\\llbracket": "\u2808\u2838\u2820\u2837", + "\\bigl\\llbracket": "\u2808\u2838\u2820\u2837", + "\\Bigl\\llbracket": "\u2808\u2838\u2820\u2837", + "\\biggl\\llbracket": "\u2808\u2838\u2820\u2837", + "\\Biggl\\llbracket": "\u2808\u2838\u2820\u2837", + "\\rrbracket": "\u2808\u2838\u283e", + "\\right\\rrbracket": "\u2808\u2838\u2820\u283e", + "\\bigr\\rrbracket": "\u2808\u2838\u2820\u283e", + "\\Bigr\\rrbracket": "\u2808\u2838\u2820\u283e", + "\\biggr\\rrbracket": "\u2808\u2838\u2820\u283e", + "\\Biggr\\rrbracket": "\u2808\u2838\u2820\u283e", + "\\varg": "\u2808\u281b", + "\\varv": "\u2808\u2827", + "\\varw": "\u2808\u283a", + "\\vary": "\u2808\u283d", + "\\medcirc": "\u282b\u2809", + "\\circledwedge": "\u282b\u2809\u2838\u282b\u2808\u2839\u283b", + "\\circledbslash": "\u282b\u2809\u2838\u282b\u2822\u283b", + "\\boxbslash": "\u282b\u2832\u2838\u282b\u2822\u283b", + "\\medbullet": "\u282b\u2838\u2809", + "\\circledvee": "\u282b\u2809\u2838\u282b\u2808\u283c\u283b", + "\\nplus": "\u2828\u2829\u2838\u282b\u282c\u283b", + "\\boxbar": "\u282b\u2832\u2838\u282b\u2833\u283b", + "\\circledbar": "\u282b\u2809\u2838\u282b\u2833\u283b", + "\\boxast": "\u282b\u2832\u2838\u282b\u2808\u283c\u283b", + "\\boxslash": "\u282b\u2832\u2838\u282b\u2814\u283b", + "\\Diamonddot": "\u282b\u2819\u2838\u282b\u2821\u283b", + "\\lambdabar": "\u2808\u2828\u2807", + "\\Bot": "\u282b\u2829\u2836\u2836\u2833", + "\\Diamondblack": "\u282b\u2838\u2819", + "\\Diamond": "\u282b\u2819", + "\\Top": "\u282b\u2823\u2836\u2836\u2833", + "\\bignplus": "\u2828\u2829\u2838\u282b\u282c\u283b", + "\\oiint": "\u282e\u282e\u2808\u282b\u2809\u283b", + "\\ointclockwise": "\u282e\u2808\u282b\u282a\u2822\u2814\u283b", + "\\sqint": "\u282e\u2808\u282b\u2832\u283b", + "\\fint": "\u280c\u282e", + "\\iiiint": "\u282e\u282e\u282e\u282e", + "\\oiintclockwise": "\u282e\u282e\u2808\u282b\u282a\u2822\u2814\u283b", + "\\oiiintctrclockwise": "\u282e\u282e\u282e\u2808\u282b\u2822\u2814\u2815\u283b", + "\\varoiiintclockwise": "\u282e\u282e\u282e\u2808\u282b\u282a\u2822\u2814\u283b", + "\\oiiint": "\u282e\u282e\u282e\u2808\u282b\u2809\u283b", + "\\varointctrclockwise": "\u282e\u2808\u282b\u2822\u2814\u2815\u283b", + "\\sqiintop": "\u282e\u282e\u2808\u282b\u2817\u283b", + "\\iint": "\u282e\u282e", + "\\idotsint": "\u282e\u2804\u2804\u2804\u282e", + "\\varoiintctrclockwise": "\u282e\u282e\u2808\u282b\u2822\u2814\u2815\u283b", + "\\oiiintclockwise": "\u282e\u282e\u282e\u2808\u282b\u282a\u2822\u2814\u283b", + "\\varprod": "\u2810\u2808\u2821", + "\\ointctrclockwise": "\u282e\u2808\u282b\u2822\u2814\u2815\u283b", + "\\varointclockwise": "\u282e\u2808\u282b\u282a\u2822\u2814\u283b", + "\\sqiiintop": "\u282e\u282e\u282e\u2808\u282b\u2817\u283b", + "\\iiint": "\u282e\u282e\u282e", + "\\iiiint": "\u282e\u282e\u282e\u282e", + "\\upint": "\u2823\u282e", + "\\lowint": "\u2829\u282e", + "\\oiintctrclockwise": "\u282e\u282e\u2808\u282b\u2822\u2814\u2815\u283b", + "\\varoiintclockwise": "\u282e\u282e\u2808\u282b\u282a\u2822\u2814\u283b", + "\\varoiiintctrclockwise": "\u282e\u282e\u282e\u2808\u282b\u2822\u2814\u2815\u283b", + "\\dashrightarrow": "⠫⠒ ⠒⠕", + "\\ntwoheadrightarrow": "\u280c\u282b\u2812\u2812\u2815\u2815", + "\\Searrow": "\u282b\u2830\u2836\u2836\u2815", + "\\Perp": "\u282b\u2829\u2836\u2836\u2833", + "\\boxright": "\u282b\u2832\u282b\u2815", + "\\boxdotleft": "\u282b\u282a\u282b\u2832\u2838\u282b\u2821\u283b", + "\\Diamonddotright": "\u282b\u2819\u2838\u282b\u2821\u283b\u282b\u2815", + "\\boxLeft": "\u282b\u282a\u2834\u2834\u282b\u2832", + "\\DiamondRight": "\u282b\u2819\u282b\u2836\u2836\u2815", + "\\DiamonddotLeft": "\u282b\u282a\u2836\u2836\u282b\u2819\u2838\u282b\u2821\u283b", + "\\circleddotright": "\u282b\u2809\u2838\u282b\u2821\u282b\u2815\u283b", + "\\multimapdotbothvert": "\u282b\u2823\u2821\u2812\u2812\u2821", + "\\dashleftrightarrow": "⠫⠪⠒ ⠒⠕", + "\\ntwoheadleftarrow": "\u280c\u282b\u282a\u282a\u2812\u2812", + "\\Nwarrow": "\u282b\u2818\u282a\u2836\u2836", + "\\leadstoext": "\u2808\u2831", + "\\boxleft": "\u282b\u282a\u282b\u2832", + "\\Diamondright": "\u282b\u2819\u282b\u2815", + "\\Diamonddotleft": "\u282b\u282a\u282b\u2819\u2838\u282b\u2821\u283b", + "\\boxdotRight": "\u282b\u2832\u2838\u282b\u2821\u283b\u282b\u2836\u2836\u2815", + "\\DiamondLeft": "\u282b\u282a\u2836\u2836\u282b\u2819", + "\\circleright": "\u282b\u2809\u2838\u282b\u2815\u283b", + "\\circleddotleft": "\u282b\u2809\u2838\u282b\u2821\u282b\u282a\u283b", + "\\dashleftarrow": "\u282b\u282a\u2812", + "\\leftsquigarrow": "\u282b\u282a\u2814\u2822\u2814", + "\\Nearrow": "\u282b\u2818\u2836\u2836\u2815", + "\\Swarrow": "\u282b\u2830\u282a\u2836\u2836", + "\\leadsto": "\u282b\u2814\u2812\u2822\u2815", + "\\boxdotright": "\u282b\u2832\u2838\u2821\u283b\u282b\u2815", + "\\Diamondleft": "\u282b\u282a\u282b\u2819", + "\\boxRight": "\u282b\u2832\u282b\u2836\u2836\u2815", + "\\boxdotLeft": "\u282b\u282a\u2836\u2836\u282b\u2832\u2838\u282b\u2821\u283b", + "\\DiamonddotRight": "\u282b\u2819\u2838\u282b\u2821\u283b\u282b\u2836\u2836\u2815", + "\\circleleft": "\u282b\u2809\u2838\u282b\u282a\u283b", + "\\multimapbothvert": "\u282b\u2823\u2828\u2821\u2812\u2812\u2828\u2821", + "\\multimapdotbothBvert": "\u282b\u2823\u2828\u2821\u2812\u2812\u2821", + "\\mappedfrom": "\u282b\u282a\u2812\u2833", + "\\Longmapsto": "\u282b\u2833\u2836\u2836\u2815", + "\\mmapsto": "\u282b\u2833\u2833\u2812\u2815", + "\\longmmappedfrom": "\u282b\u282a\u2812\u2812\u2833\u2833", + "\\Mmappedfrom": "\u282b\u282a\u2836\u2833\u2833", + "\\varparallelinv": "\u2838\u2821\u2838\u2821", + "\\colonapprox": "\u2806\u2808\u2831\u2808\u2831", + "\\Colonsim": "\u2806\u2806\u2808\u2831", + "\\multimapboth": "\u282b\u2828\u2821\u2812\u2812\u2828\u2821", + "\\multimapdotboth": "\u282b\u2821\u2812\u2812\u2821", + "\\Vdash": "\u282b\u2833\u2833\u2836\u2836", + "\\preceqq": "\u2828\u2810\u2805\u2828\u2805", + "\\nsuccsim": "\u280c\u2828\u2828\u2802\u2808\u2831", + "\\nlessapprox": "\u280c\u2810\u2805\u2808\u2831\u2808\u2831", + "\\nequiv": "\u280c\u283f", + "\\nsubset": "\u280c\u2838\u2810\u2805", + "\\ngg": "\u280c\u2828\u2802\u2808\u2828\u2802\u283b", + "\\nprecapprox": "\u280c\u2828\u2810\u2805\u2808\u2831\u2808\u2831", + "\\nsucceqq": "\u280c\u2828\u2828\u2802\u2828\u2805", + "\\notni": "\u280c\u2808\u2822", + "\\notowns": "\u280c\u2808\u2822", + "\\eqqcolon": "\u2828\u2805\u2810\u2806", + "\\Coloneqq": "\u2806\u2806\u2810\u2828\u2805", + "\\Eqcolon": "\u2831\u2810\u2806\u2806", + "\\strictiff": "\u282b\u282f\u2812\u2812\u283d", + "\\longmappedfrom": "\u282b\u282a\u2812\u2812\u2833", + "\\Mappedfrom": "\u282b\u282a\u2836\u2833", + "\\longmmapsto": "\u282b\u2833\u2833\u2812\u2812\u2815", + "\\Mmapsto": "\u282b\u2833\u2833\u2836\u2815", + "\\Longmmappedfrom": "\u282b\u282a\u2836\u2836\u2833\u2833", + "\\nvarparallel": "\u280c\u282b\u2807", + "\\colonsim": "\u2806\u2810\u2808\u2831", + "\\doteq": "\u2810\u2828\u2805\u2823\u2821\u283b", + "\\multimapdot": "\u282b\u2812\u2812\u2821", + "\\multimapdotbothA": "\u282b\u2828\u2821\u2812\u2812\u2821", + "\\VvDash": "\u282b\u2833\u2833\u2833\u2836\u2836", + "\\succeqq": "\u2828\u2828\u2802\u2828\u2805", + "\\nlesssim": "\u280c\u2810\u2805\u2808\u2831", + "\\ngtrapprox": "\u280c\u2828\u2802\u2808\u2831\u2808\u2831", + "\\ngtrless": "\u280c\u2810\u2805\u2828\u2802", + "\\nBumpeq": "\u280c\u2808\u2823\u2820\u2823", + "\\nsim": "\u280c\u2808\u2831", + "\\nsupset": "\u280c\u2838\u2828\u2802", + "\\nthickapprox": "\u280c\u2838\u2808\u2831\u2838\u2808\u2831", + "\\nsuccapprox": "\u280c\u2828\u2828\u2802\u2808\u2831\u2808\u2831", + "\\nsimeq": "\u280c\u2808\u2831\u2831", + "\\nSubset": "\u280c\u2838\u2810\u2805\u2838\u282b\u2838\u2810\u2805\u283b", + "\\coloneq": "\u2806\u2810\u2831", + "\\Eqqcolon": "\u2828\u2805\u2810\u2806\u2806", + "\\strictif": "\u282b\u2812\u2812\u283d", + "\\circledless": "\u282b\u2809\u2838\u282b\u2810\u2805\u283b", + "\\Mapsto": "\u282b\u2833\u2836\u2815", + "\\Longmappedfrom": "\u282b\u282a\u2836\u2836\u2833", + "\\mmappedfrom": "\u282b\u282a\u2812\u2833\u2833", + "\\Longmmapsto": "\u282b\u2833\u2833\u2836\u2836\u2815", + "\\varparallel": "\u282b\u2807", + "\\nvarparallelinv": "\u280c\u2838\u2821\u2838\u2821", + "\\Colonapprox": "\u2806\u2806\u2810\u2808\u2831\u2808\u2831", + "\\multimapinv": "\u282b\u2828\u2821\u2812\u2812", + "\\multimapdotinv": "\u282b\u2821\u2812\u2812", + "\\multimapdotbothB": "\u282b\u2821\u2812\u2812\u2828\u2821", + "\\nprecsim": "\u280c\u2828\u2810\u2805\u2808\u2831", + "\\ngtrsim": "\u280c\u2828\u2802\u2808\u2831", + "\\nlessgtr": "\u280c\u2828\u2802\u2810\u2805", + "\\nasymp": "\u280c\u282b\u2801\u282b\u2804", + "\\napprox": "\u280c\u2808\u2831\u2808\u2831", + "\\nll": "\u280c\u2810\u2805\u2808\u2810\u2805\u283b", + "\\napproxeq": "\u280c\u2808\u2831\u2808\u2831\u2831", + "\\npreceqq": "\u280c\u2828\u2810\u2805\u2828\u2805", + "\\notin": "\u280c\u2808\u2811", + "\\nSupset": "\u280c\u2838\u2828\u2802\u2838\u282b\u2838\u2828\u2802\u283b", + "\\coloneqq": "\u2806\u2810\u2828\u2805", + "\\eqcolon": "\u2831\u2810\u2806", + "\\Coloneq": "\u2806\u2806\u2810\u2831", + "\\strictfi": "\u282b\u282f\u2812\u2812", + "\\circledgtr": "\u282b\u2809\u2838\u282b\u2828\u2802\u283b", + "\\mathbb": "\u2838", + "\\mathcal": "\u2808\u2830", + "\\underbrace-begin": "\u2810", + "\\underbrace-middle": "\u2829\u2828\u283e\u2829\u2829", + "\\underbrace-end": "\u283b", + "\\overbrace-begin": "\u2810", + "\\overbrace-middle": "\u2823\u2828\u2837\u2823\u2823", + "\\overbrace-end": "\u283b", + "\\overline-begin": "\u2810", + "\\overline-end": "\u2823\u2831", + "\\underline-begin": "\u2810", + "\\underline-end": "\u2829\u2831", + "\\dot-begin": "⠐", + "\\dot-end": "⠡", + "?": "\u2838\u2826", + "'": "\u2804", + "{": "", + "}": "", + "\\displaystyle": "", + "\\tilde": "\u2808\u2831", + "\\widetilde-begin": "\u2810", + "\\widetilde-end": "\u2823\u2808\u2820\u2831", + "\\lenqno": " ", + "\\binom": "\u2829", + "\\atop": "\u2829", + "\\choose": "\u2829", + "\\under": "\u2829", + "\\under": "\u2829", + "\\leqno": " ", + "\\hat": "\u2823\u2838\u2823", + "\\vec-begin": "\u2810", + "\\vec-end": "\u2823\u282b\u2815\u283b", + "\\%": "\u2808\u2834", + "\\bar": "\u2831", + "\\stackrel-begin": "\u2810", + "\\stackrel-middle": "\u2823", + "\\stackrel-end": "\u283B", + "\\sqcup": "⠈⠨⠬", + "\\sqcap": "⠈⠨⠩", + "\\bigsqcup": "⠈⠨⠬", + "\\bigsqcap": "⠈⠨⠩", + "\\wr": "", + "\\trangleleft": "⠫⠐⠅⠇⠻", + "\\triangleright": "⠫⠸⠨⠂⠻", + "\\lhd": "⠫⠐⠅⠇⠻", + "\\unlhd": "⠫⠐⠅⠇⠱⠻", + "\\rhd": "⠫⠸⠨⠂⠻", + "\\unrhd": "⠫⠸⠨⠂⠱⠻", + "\\amalg": "⠫⠨⠏⠻", + "\\ltimes": "⠫⠸⠈⠡⠻", + "\\rightthreetimes": "", + "\\rtimes": "⠫⠈⠡⠇⠻", + "\\curlywedge": "⠫⠈⠩⠻", + "\\leftthreetimes": "", + "\\curlyvee": "⠫⠈⠬⠻", + "\\sqsubset": "⠈⠸⠐⠅", + "\\sqsubseteq": "⠈⠸⠐⠅⠱", + "\\sqsupset": "⠈⠸⠨⠂", + "\\sqsupseteq": "⠈⠸⠨⠂⠱", + "\\bowtie": "⠫⠸⠈⠡⠇⠻", + "\\Join": "⠫⠸⠈⠡⠇⠻", + "\\lrJoin": "⠫⠸⠈⠡⠇⠻", + "\\risingdotseq": "", + "\\backsimeq": "⠈⠈⠱⠱", + "\\tianglelefteq": "⠫⠐⠅⠇⠱⠻", + "\\trianglerighteq": "⠫⠸⠨⠂⠱⠻", + "\\fallingdotseq": "", + "\\preccurlyeq": "⠫⠨⠐⠅⠱⠻", + "\\succcurlyeq": "⠫⠨⠨⠂⠱⠻", + "\\between": "⠷⠾", + "\\blacktriangleleft": "⠸⠫⠐⠅⠇⠻", + "\\blacktriangleright": "⠸⠫⠸⠨⠂⠻", + "\\backsim": "⠈⠈⠱", + "\\curlyeqprec": "⠫⠱⠨⠐⠅⠻", + "\\vartriangleleft": "⠫⠐⠅⠇⠻", + "\\curlyeqsucc": "⠫⠱⠨⠨⠂⠻", + "\\vartrianlgeright": "⠫⠸⠨⠂⠻", + "\\lvertneqq": "⠐⠅⠱⠌⠨⠅⠻", + "\\ntriangleleft": "⠌⠫⠐⠅⠇⠻", + "\\ntrianglelefteq": "⠌⠫⠐⠅⠇⠱⠻", + "\\ntriangleright": "⠌⠫⠸⠨⠂⠻", + "\\ntrianglerighteq": "⠌⠫⠸⠨⠂⠱⠻", + "\\mho": "⠫⠨⠚⠻", + "\\hslash": "⠫⠌⠓⠻", + "\\backprime": "⠈⠄", + "\\Finv": "⠫⠠⠋⠻", + "\\eth": "⠫⠌⠈⠙⠻", + "\\triangledown": "⠨⠫", + "\\Game": "⠫⠠⠛⠻", + "\\Wr": "", + "\\sqcupplus": "⠈⠨⠬⠸⠫⠬⠻", + "\\invamp": "⠫⠯⠻", + "\\sqcapplus": "⠈⠨⠩⠸⠫⠬⠻", + "\\lambdaslash": "⠫⠌⠨⠇⠻", + "\\bigsqcupplus": "⠈⠨⠬⠸⠫⠬⠻", + "\\bigsqcapplus": "⠈⠨⠩⠸⠫⠬⠻", + "\\nsqsubset": "⠌⠈⠸⠐⠅", + "\\nsqsupset": "⠌⠈⠸⠨⠂", + "\\nsucccurlyeq": "⠌⠫⠨⠨⠂⠱⠻", + "\\nbacksim": "⠌⠈⠈⠱", + "\\nsqsubseteq": "⠌⠈⠸⠐⠅⠱", + "\\lJoin": "⠫⠸⠈⠡⠻", + "\\openJoin": "⠈⠡", + "\\nsqsupseteq": "⠌⠈⠸⠨⠂⠱", + "\\lrtimes": "⠫⠸⠈⠡⠇⠻", + "\\rJoin": "⠫⠈⠡⠇⠻", + "\\npreccurlyeq": "⠌⠫⠨⠐⠅⠱⠻", + "\\nbacksim": "⠌⠈⠈⠱", + "\\imath": "⠫⠊⠻", + "\\jmath": "⠫⠚⠻", + "\\check": "\u2823\u2808\u2838\u2823", + "\\acute": "\u2823\u2804", + "\\grave": "\u2831", + "\\sphericalangle": "⠫⠪⠸⠫⠫⠁⠻", + "\\Theta": "⠨⠠⠹", + "\\Sigma": "⠨⠠⠎", + "\\Omega": "⠨⠠⠺", + "\\breve": "⠸⠩", + "\\ddot": "⠣⠡⠡⠻", + "\\mathring":"⠨⠡", + "\\circeq": "⠐⠨⠅⠣⠨⠡⠻", + "\\copyright": "⠫⠉⠸⠫⠠⠉⠻", + "\\eqcirc": "⠨⠡⠈⠨⠅⠻", + "\\gneqq": "⠐⠨⠅⠣⠨⠡⠻", + "\\trianglelefteq": "⠫⠐⠅⠇⠱⠻", + "\\VDash": "⠫⠳⠳⠒⠒", + "\\multimapdotbothAvert": "⠫⠣⠡⠒⠒⠨⠡" + }, + "theoremSymbols": { + ".": "\u2828", + "#": "\u283c", + "0": "\u2834", + "1": "\u2802", + "2": "\u2806", + "3": "\u2812", + "4": "\u2832", + "5": "\u2822", + "6": "\u2816", + "7": "\u2836", + "8": "\u2826", + "9": "\u2814", + "#0": "\u283c\u2834", + "#1": "\u283c\u2802", + "#2": "\u283c\u2806", + "#3": "\u283c\u2812", + "#4": "\u283c\u2832", + "#5": "\u283c\u2822", + "#6": "\u283c\u2816", + "#7": "\u283c\u2836", + "#8": "\u283c\u2826", + "#9": "\u283c\u2814" + } +} diff --git a/support/latex2nemeth/encodings/polytonic.json b/support/latex2nemeth/encodings/polytonic.json index 054c61c22a..ea440062ee 100644 --- a/support/latex2nemeth/encodings/polytonic.json +++ b/support/latex2nemeth/encodings/polytonic.json @@ -246,7 +246,15 @@ "\\latextonemethnewline": "\n", "ΐ": "⠊", "ΰ": "⠽", - + "\\bf": "", + "\\it": "", + "\\=": "", + "\\>": "", + "\\noindent": "", + "\\hfill": " ", + "\\bigskip": " ", + "\\smallskip": " ", + "\\medskip": " ", "αὶ": "⠈⠣", "αί": "⠐⠣", "αἰ": "⠁⠣", diff --git a/support/latex2nemeth/examples/nemeth.json b/support/latex2nemeth/examples/nemeth.json deleted file mode 100644 index 6c395dedd4..0000000000 --- a/support/latex2nemeth/examples/nemeth.json +++ /dev/null @@ -1,1204 +0,0 @@ -{ - "letters": { - ".": "\u2832", - ",": "\u2802", - ";": "\u2822", - "'": "\u2804", - "«": "\u2826", - "»": "\u2834", - "(": "\u2837", - ")": "\u283e", - "[": "\u2808\u2837", - "]": "\u2808\u283e", - "\\}": "\u2828\u283e", - "\\{": "\u2828\u2837", - "\\_": "\u2824\u2824", - ":": "\u2806", - "?": "\u2838\u2826", - "!": "\u2816", - "*": "\u2808\u283c", - "@": "\u2808\u2801\u281e", - "\\euro": "\u2808\u2811", - "+": "\u282e", - "-": "\u2824", - "=": "\u282d", - "\\backslash": "\u2838\u2821", - "\\#": "\u2828\u283c", - "\\&": "\u282f", - "\\ ": " ", - "\\,": "\u2802", - "--": "\u2824\u2824", - "---": "\u2824\u2824\u2824", - "/": "\u280c", - "\\\n": " ", - " ": " ", - "\\quad": " ", - "\\qquad": " ", - "#": "\u283c", - "0": "\u2834", - "1": "\u2802", - "2": "\u2806", - "3": "\u2812", - "4": "\u2832", - "5": "\u2822", - "6": "\u2816", - "7": "\u2836", - "8": "\u2826", - "9": "\u2814", - "a": "\u2801", - "b": "\u2803", - "c": "\u2809", - "d": "\u2819", - "e": "\u2811", - "f": "\u280b", - "g": "\u281b", - "h": "\u2813", - "i": "\u280a", - "j": "\u281a", - "k": "\u2805", - "l": "\u2807", - "m": "\u280d", - "n": "\u281d", - "o": "\u2815", - "p": "\u280f", - "q": "\u281f", - "r": "\u2817", - "s": "\u280e", - "t": "\u281e", - "u": "\u2825", - "v": "\u2827", - "w": "\u283a", - "x": "\u282d", - "y": "\u283d", - "z": "\u2835", - "A": "\u2820\u2801", - "B": "\u2820\u2803", - "C": "\u2820\u2809", - "D": "\u2820\u2819", - "E": "\u2820\u2811", - "F": "\u2820\u280b", - "G": "\u2820\u281b", - "H": "\u2820\u2813", - "I": "\u2820\u280a", - "J": "\u2820\u281a", - "K": "\u2820\u2805", - "L": "\u2820\u2807", - "M": "\u2820\u280d", - "N": "\u2820\u281d", - "O": "\u2820\u2815", - "P": "\u2820\u280f", - "Q": "\u2820\u281f", - "R": "\u2820\u2817", - "S": "\u2820\u280e", - "T": "\u2820\u281e", - "U": "\u2820\u2825", - "V": "\u2820\u2827", - "W": "\u2820\u283a", - "X": "\u2820\u282d", - "Y": "\u2820\u283d", - "Z": "\u2820\u2835", - "e-grave": "\u282e", - "e-accent": "\u283f", - "EN": "\u2830", - "αι": "\u2823", - "Αι": "\u2828\u2823", - "αυ": "\u2821", - "Αυ": "\u2828\u2821", - "ει": "\u2829", - "Ει": "\u2828\u2829", - "ευ": "\u2831", - "Ευ": "\u2828\u2831", - "οι": "\u282a", - "Οι": "\u2828\u282a", - "ου": "\u2825", - "Ου": "\u2828\u2825", - "υι": "\u283b", - "Υι": "\u2828\u283b", - "ηυ": "\u2833", - "Ηυ": "\u2828\u2833", - "Ηύ": "\u2828\u2833", - "αί": "\u2823", - "ηύ": "\u2833", - "Υί": "\u2828\u283b", - "υί": "\u283b", - "Ού": "\u2828\u2825", - "ού": "\u2825", - "Οί": "\u2828\u282a", - "οί": "\u282a", - "εύ": "\u2831", - "Εύ": "\u2828\u2831", - "Εί": "\u2828\u2829", - "Αί": "\u2828\u2823", - "Αύ": "\u2828\u2821", - "αύ": "\u2821", - "εί": "\u2829", - "α": "\u2801", - "β": "\u2803", - "γ": "\u281b", - "δ": "\u2819", - "ε": "\u2811", - "ζ": "\u2835", - "η": "\u281c", - "θ": "\u2839", - "ι": "\u280a", - "ϊ": "\u280a", - "κ": "\u2805", - "λ": "\u2807", - "μ": "\u280d", - "ν": "\u281d", - "ξ": "\u282d", - "ο": "\u2815", - "π": "\u280f", - "ρ": "\u2817", - "σ": "\u280e", - "ς": "\u280e", - "τ": "\u281e", - "υ": "\u283d", - "ϋ": "\u283d", - "φ": "\u280b", - "χ": "\u2813", - "ψ": "\u282f", - "ω": "\u281a", - "ά": "\u2801", - "έ": "\u2811", - "ή": "\u281c", - "ί": "\u280a", - "ό": "\u2815", - "ύ": "\u283d", - "ώ": "\u281a", - "Α": "\u2828\u2801", - "Β": "\u2828\u2803", - "Γ": "\u2828\u281b", - "Δ": "\u2828\u2819", - "Ε": "\u2828\u2811", - "Ζ": "\u2828\u2835", - "Η": "\u2828\u281c", - "Θ": "\u2828\u2839", - "Ι": "\u2828\u280a", - "Κ": "\u2828\u2805", - "Λ": "\u2828\u2807", - "Μ": "\u2828\u280d", - "Ν": "\u2828\u281d", - "Ξ": "\u2828\u282d", - "Ο": "\u2828\u2815", - "Π": "\u2828\u280f", - "Ρ": "\u2828\u2817", - "Σ": "\u2828\u280e", - "Τ": "\u2828\u281e", - "Υ": "\u2828\u283d", - "Φ": "\u2828\u280b", - "Χ": "\u2828\u2813", - "Ψ": "\u2828\u282f", - "Ω": "\u2828\u281a", - "Ά": "\u2828\u2801", - "\u00b6": "\u2828\u2801", - "Έ": "\u2828\u2811", - "Ή": "\u2828\u281c", - "Ί": "\u2828\u280a", - "Ό": "\u2828\u2815", - "Ύ": "\u2828\u283d", - "Ώ": "\u2828\u281a", - "Ά": "\u2828\u2810\u2801", - "Έ": "\u2828\u2810\u2811", - "Ή": "\u2828\u2810\u281c", - "Ί": "\u2828\u2810\u280a", - "Ό": "\u2828\u2810\u2815", - "Ύ": "\u2828\u2810\u283d", - "Ώ": "\u2828\u2810\u281a", - "\\textbf": "\u2838", - "\\textbf-open": "\u2820\u2804\u2838", - "\\textbf-close": "\u2838\u2820\u2804", - "\\textit": "\u2828", - "\\textit-open": "\u2820\u2804\u2838", - "\\textit-close": "\u2838\u2820\u2804" - }, - "mathSymbols": { - "#": "\u283c", - "0": "\u2834", - "1": "\u2802", - "2": "\u2806", - "3": "\u2812", - "4": "\u2832", - "5": "\u2822", - "6": "\u2816", - "7": "\u2836", - "8": "\u2826", - "9": "\u2814", - "#0": "\u283c\u2834", - "#1": "\u283c\u2802", - "#2": "\u283c\u2806", - "#3": "\u283c\u2812", - "#4": "\u283c\u2832", - "#5": "\u283c\u2822", - "#6": "\u283c\u2816", - "#7": "\u283c\u2836", - "#8": "\u283c\u2826", - "#9": "\u283c\u2814", - "a": "\u2801", - "b": "\u2803", - "c": "\u2809", - "d": "\u2819", - "e": "\u2811", - "f": "\u280b", - "g": "\u281b", - "h": "\u2813", - "i": "\u280a", - "j": "\u281a", - "k": "\u2805", - "l": "\u2807", - "m": "\u280d", - "n": "\u281d", - "o": "\u2815", - "p": "\u280f", - "q": "\u281f", - "r": "\u2817", - "s": "\u280e", - "t": "\u281e", - "u": "\u2825", - "v": "\u2827", - "w": "\u283a", - "x": "\u282d", - "y": "\u283d", - "z": "\u2835", - "A": "\u2820\u2801", - "B": "\u2820\u2803", - "C": "\u2820\u2809", - "D": "\u2820\u2819", - "E": "\u2820\u2811", - "F": "\u2820\u280b", - "G": "\u2820\u281b", - "H": "\u2820\u2813", - "I": "\u2820\u280a", - "J": "\u2820\u281a", - "K": "\u2820\u2805", - "L": "\u2820\u2807", - "M": "\u2820\u280d", - "N": "\u2820\u281d", - "O": "\u2820\u2815", - "P": "\u2820\u280f", - "Q": "\u2820\u281f", - "R": "\u2820\u2817", - "S": "\u2820\u280e", - "T": "\u2820\u281e", - "U": "\u2820\u2825", - "V": "\u2820\u2827", - "W": "\u2820\u283a", - "X": "\u2820\u282d", - "Y": "\u2820\u283d", - "Z": "\u2820\u2835", - "Α": "\u2828\u2801", - "Β": "\u2828\u2803", - "Ε": "\u2828\u2811", - "Ζ": "\u2828\u2835", - "Η": "\u2828\u281c", - "Ι": "\u2828\u280a", - "Κ": "\u2828\u2805", - "Μ": "\u2828\u280d", - "Ν": "\u2828\u281d", - "Ξ": "\u2828\u282d", - "Ο": "\u2828\u2815", - "Ρ": "\u2828\u2817", - "Τ": "\u2828\u281e", - "Υ": "\u2828\u283d", - "Χ": "\u2828\u2813", - "α": "\u2801", - "β": "\u2803", - "γ": "\u281b", - "δ": "\u2819", - "ε": "\u2811", - "ζ": "\u2835", - "η": "\u281c", - "θ": "\u2839", - "ι": "\u280a", - "ϊ": "\u280a", - "κ": "\u2805", - "λ": "\u2807", - "μ": "\u280d", - "ν": "\u281d", - "ξ": "\u282d", - "ο": "\u2815", - "π": "\u280f", - "ρ": "\u2817", - "σ": "\u280e", - "ς": "\u280e", - "τ": "\u281e", - "υ": "\u283d", - "ϋ": "\u283d", - "φ": "\u280b", - "χ": "\u2813", - "ψ": "\u282f", - "ω": "\u281a", - "\\sqrt-b": "\u281c", - "\\sqrt-e": "\u283b", - "\\sqrt-level": "\u2828", - "\\radical-index": "\u2823", - "\\frac-b": "\u2839", - "\\frac-e": "\u283c", - "frac-level": "\u2820", - "\\frac-separator": "\u280c", - "\\superscript": "\u2818", - "\\sub": "\u2830", - "\\base": "\u2810", - "\\arccos": "\u2801\u2817\u2809\u2809\u2815\u280e", - "\\cot": "\u2809\u2815\u281e", - "\\exp": "\u2811\u282d\u280f", - "\\lim": "\u2807\u280a\u280d", - "\\min": "\u280d\u280a\u281d", - "\\tan": "\u281e\u2801\u281d", - "\\arcsin": "\u2801\u2817\u2809\u280e\u280a\u281d", - "\\coth": "\u2809\u2815\u281e\u2813", - "\\gcd": "\u281b\u2809\u2819", - "\\liminf": "\u2829\u2807\u280a\u280d", - "\\varliminf": "\u2829\u2807\u280a\u280d", - "\\Pr": "\u2820\u280f\u2817", - "\\tanh": "\u281e\u2801\u281d\u2813", - "\\arctan": "\u2801\u2817\u2809\u281e\u2801\u281d", - "\\csc": "\u2809\u280e\u2809", - "\\hom": "\u2813\u2815\u280d", - "\\limsup": "\u2823\u2807\u280a\u280d", - "\\varlimsup": "\u2823\u2807\u280a\u280d", - "\\sec": "\u280e\u2811\u2809", - "\\arg": "\u2801\u2817\u281b", - "\\deg": "\u2819\u2811\u281b", - "\\inf": "\u280a\u281d\u280b", - "\\ln": "\u2807\u281d", - "\\sin": "\u280e\u280a\u281d ", - "\\cos": "\u2809\u2815\u280e ", - "\\det": "\u2819\u2811\u281e", - "\\ker": "\u2805\u2811\u2817", - "\\log": "\u2807\u2815\u281b ", - "\\sinh": "\u280e\u280a\u281d\u2813 ", - "\\cosh": "\u2809\u2815\u280e\u2813 ", - "\\dim": "\u2819\u280a\u280d", - "\\lg": "\u2807\u281b", - "\\max": "\u280d\u2801\u282d", - "\\sup": "\u280e\u2825\u280f", - " ": " ", - ".": "\u2832", - "\\qquad": " ", - "\\quad": " ", - "\\;": " ", - "\\:": " ", - "\\,": " ", - "\\!": "", - "\\\n": " ", - ":": "\u2806", - "+": "\u282c", - "-": "\u2824", - "*": "\u2808\u283c", - "/": "\u280c", - "=": "\u2828\u2805", - "!": "\u2816", - "--": "\u2824\u2824", - "---": "\u2824\u2824\u2824", - "\\&": "\u2838\u282f", - ",": "\u2820", - ";": "\u2822", - "(": "\u2837", - ")": "\u283e", - "[": "\u2808\u2837", - "]": "\u2808\u283e", - "\\left(": "\u2820\u2837", - "\\right)": "\u2820\u283e", - "\\bigl(": "\u2820\u2837", - "\\Bigl(": "\u2820\u2837", - "\\biggl(": "\u2820\u2837", - "\\Biggl(": "\u2820\u2837", - "\\bigr)": "\u2820\u283e", - "\\Bigr)": "\u2820\u283e", - "\\biggr)": "\u2820\u283e", - "\\Biggr)": "\u2820\u283e", - "\\right.": "", - "\\left.": "", - "\\big": "\u2820", - "\\bigg": "\u2820", - "\\right|": "\u2820\u2833", - "\\left|": "\u2820\u2833", - "\\ ": " ", - "\\hspace*": " ", - "\\left[": "\u2808\u2820\u2837", - "\\right]": "\u2808\u2820\u283e", - "\\bigl[": "\u2808\u2820\u2837", - "\\Bigl[": "\u2808\u2820\u2837", - "\\biggl[": "\u2808\u2820\u2837", - "\\Biggl[": "\u2808\u2820\u2837", - "\\bigr]": "\u2808\u2820\u283e", - "\\Bigr]": "\u2808\u2820\u283e", - "\\biggr]": "\u2808\u2820\u283e", - "\\Biggr]": "\u2808\u2820\u283e", - "\\setminus": "\u2838\u2821", - "\\sum": "\u2828\u2820\u280e", - "\\bigcap": "\u2828\u2829", - "\\bigodot": "\u282b\u2809\u2838\u282b\u2821\u283b", - "\\int": "\u282e", - "\\oint": "\u282e\u2808\u282b\u2809\u283b", - "\\prod": "\u2828\u2820\u280f", - "\\bigcup": "\u2828\u282c", - "\\bigotimes": "\u282b\u2809\u2838\u282b\u2808\u2821\u283b", - "\\bigvee": "\u2808\u282c", - "\\bigwedge": "\u2808\u2829", - "\\coprod": "INVERTED PI", - "\\AA": "\u2808\u2820\u2801", - "\\aa": "\u2801\u2823\u2828\u2821", - "@": "\u2808\u2801\u281e", - "\\P": "\u2808\u2820\u280f", - "\\dag": "\u2838\u283b", - "\\ddag": "\u2838\u2838\u283b", - "\\S": "\u2808\u2820\u280e", - "\\textsection": "\u2808\u2820\u280e", - "\\textregistered": "\u282b\u2809\u2838\u282b\u2820\u2817\u283b", - "\\copyright": "\u282b\u2809\u2838\u282b\u2820\u2809\u283b", - "\\pounds": "\u2808\u2807", - "\\textstirling": "\u2808\u2807", - "\\SS": "\u2820\u280e\u2820\u280e", - "\\lq": "\u2820\u2826", - "\\leftquote": "\u2820\u2826", - "\\rq": "\u2834\u2804", - "\\rightquote": "\u2834\u2804", - "\\texttrademark": "\u2818\u2820\u281e\u2820\u280d", - "\\textasciicircum": "\u2838\u2823", - "\\&": "\u2838\u282f", - "\\_": "\u2824\u2824", - "\\textbackslash": "\u2838\u2821", - "\\cent": "\u2808\u2809", - "\\checked": "\u2808\u281c", - "\\dj": "\u2808\u282b", - "\\barlambda": "\u2808\u2828\u2807", - "\\planck": "\u2808\u2813", - "\\$": "\u2808\u280e", - "\\bigoplus": "\u282b\u2809\u2838\u282b\u282c\u283b", - "\\biguplus": "\u2828\u282c\u2838\u282b\u282c\u283b", - "\\bigl\\|": "\u2820\u2833", - "\\bigr\\|": "\u2820\u2833", - "\\bigl|": "\u2820\u2833", - "\\bigr|": "\u2820\u2833", - "\\Bigl|": "\u2820\u2833", - "\\Bigr|": "\u2820\u2833", - "\\Bigl\\|": "\u2820\u2833", - "\\Bigr\\|": "\u2820\u2833", - "\\biggl|": "\u2820\u2833", - "\\biggr|": "\u2820\u2833", - "\\Biggl|": "\u2820\u2833", - "\\Biggr|": "\u2820\u2833", - "\\uparrow": "\u282b\u2823\u2812\u2812\u2815", - "\\{": "\u2828\u2837", - "\\left\\{": "\u2828\u2820\u2837", - "\\bigl\\{": "\u2828\u2820\u2837", - "\\Bigl\\{": "\u2828\u2820\u2837", - "\\biggl\\{": "\u2828\u2820\u2837", - "\\Biggl\\{": "\u2828\u2820\u2837", - "\\lfloor": "\u2808\u2830\u2837", - "\\langle": "\u2828\u2828\u2837", - "\\left\\langle": "\u2828\u2828\u2820\u2837", - "\\bigl\\langle": "\u2828\u2828\u2820\u2837", - "\\Biggl\\langle": "\u2828\u2828\u2820\u2837", - "\\biggl\\langle": "\u2828\u2828\u2820\u2837", - "\\Biggl\\langle": "\u2828\u2828\u2820\u2837", - "|": "\u2833", - "\\bigm|": "\u2820\u2833", - "\\Bigm|": "\u2820\u2833", - "\\biggm|": "\u2820\u2833", - "\\Biggm|": "\u2820\u2833", - "\\Uparrow": "\u282b\u2823\u2836\u2836\u2815", - "\\}": "\u2828\u283e", - "\\right\\}": "\u2828\u2820\u283e", - "\\bigr\\}": "\u2828\u2820\u283e", - "\\Bigr\\}": "\u2828\u2820\u283e", - "\\biggr\\}": "\u2828\u2820\u283e", - "\\Biggr\\}": "\u2828\u2820\u283e", - "\\rfloor": "\u2808\u2830\u283e", - "\\rangle": "\u2828\u2828\u283e", - "\\right\rangle": "\u2828\u2828\u2820\u283e", - "\\bigr\rangle": "\u2828\u2828\u2820\u283e", - "\\Bigr\rangle": "\u2828\u2828\u2820\u283e", - "\\biggr\rangle": "\u2828\u2828\u2820\u283e", - "\\Biggr\rangle": "\u2828\u2828\u2820\u283e", - "\\|": "\u2833\u2833", - "\\left\\|": "\u2820\u2833\u2820\u2833", - "\\right\\|": "\u2820\u2833\u2820\u2833", - "\\big\\|": "\u2820\u2833\u2820\u2833", - "\\Big\\|": "\u2820\u2833\u2820\u2833", - "\\bigg\\|": "\u2820\u2833\u2820\u2833", - "\\Bigg\\|": "\u2820\u2833\u2820\u2833", - "\\big(": "\u2820\u2837", - "\\big)": "\u2820\u283e", - "\\big\\{": "\u2828\u2820\u2837", - "\\big\\}": "\u2820\u2833\u2820\u2833", - "\\bigg(": "\u2820\u2837", - "\\bigg)": "\u2820\u283e", - "\\bigg\\{": "\u2828\u2820\u2837", - "\\bigg\\}": "\u2820\u2833\u2820\u2833", - "\\big|": "\u2820\u2833\u2820\u2833", - "\\bigg|": "\u2820\u2833\u2820\u2833", - "\\downarrow": "\u282b\u2829\u2812\u2812\u2815", - "\\updownarrow": "\u282b\u2823\u282a\u2812\u2812\u2815", - "\\lceil": "\u2808\u2818\u2837", - "\\Downarrow": "\u282b\u2829\u2836\u2836\u2815", - "\\Updownarrow": "\u282b\u2829\u282a\u2836\u2836\u2815", - "\\rceil": "\u2808\u2818\u283e", - "\\backslash": "\u2838\u2821", - "\\ulcorner": "\u2808\u2818\u2837", - "\\left\\ulcorner": "\u2808\u2818\u2820\u2837", - "\\bigl\\ulcorner": "\u2808\u2818\u2820\u2837", - "\\Bigl\\ulcorner": "\u2808\u2818\u2820\u2837", - "\\biggl\\ulcorner": "\u2808\u2818\u2820\u2837", - "\\Biggl\\ulcorner": "\u2808\u2818\u2820\u2837", - "\\urcorner": "\u2808\u2818\u283e", - "\\right\\urcorner": "\u2808\u2818\u2820\u283e", - "\\bigr\\urcorner": "\u2808\u2818\u2820\u283e", - "\\Bigr\\urcorner": "\u2808\u2818\u2820\u283e", - "\\biggr\\urcorner": "\u2808\u2818\u2820\u283e", - "\\Biggr\\urcorner": "\u2808\u2818\u2820\u283e", - "\\llcorner": "\u2808\u2830\u2837", - "\\left\\llcorner": "\u2808\u2830\u2820\u2837", - "\\bigl\\llcorner": "\u2808\u2830\u2820\u2837", - "\\Bigl\\llcorner": "\u2808\u2830\u2820\u2837", - "\\biggl\\llcorner": "\u2808\u2830\u2820\u2837", - "\\Biggl\\llcorner": "\u2808\u2830\u2820\u2837", - "\\lrcorner": "\u2808\u2830\u283e", - "\\right\\lrcorner": "\u2808\u2830\u2820\u283e", - "\\bigr\\lrcorner": "\u2808\u2830\u2820\u283e", - "\\Bigr\\lrcorner": "\u2808\u2830\u2820\u283e", - "\\biggr\\lrcorner": "\u2808\u2830\u2820\u283e", - "\\Biggr\\lrcorner": "\u2808\u2830\u2820\u283e", - "\\alpha": "\u2828\u2801", - "\\epsilon": "\u2828\u2811", - "\\theta": "\u2828\u2839", - "\\lambda": "\u2828\u2807", - "\\varrho": "\u2828\u2808\u2817", - "\\upsilon": "\u2828\u2825", - "\\psi": "\u2828\u283d", - "\\Gamma": "\u2828\u2820\u281b", - "\\Xi": "\u2828\u2820\u282d", - "\\Phi": "\u2828\u2820\u280b", - "\\beta": "\u2828\u2803", - "\\varepsilon": "\u2828\u2808\u2811", - "\\vartheta": "\u2828\u2808\u2839", - "\\mu": "\u2828\u280d", - "\\pi": "\u2828\u280f", - "\\sigma": "\u2828\u280e", - "\\phi": "\u2828\u280b", - "\\omega": "\u2828\u283a", - "\\Delta": "\u2828\u2820\u2819", - "\\Pi": "\u2828\u2820\u280f", - "\\Psi": "\u2828\u2820\u283d", - "\\gamma": "\u2828\u281b", - "\\zeta": "\u2828\u2835", - "\\iota": "\u2828\u280a", - "\\nu": "\u2828\u281d", - "\\varpi": "\u2828\u2808\u280f", - "\\varsigma": "\u2828\u2808\u280e", - "\\varphi": "\u2828\u2808\u280b", - "\\Theta": "\u2828\u2820\u2839", - "\\Sigma ": "\u2828\u2820\u280e", - "\\Omega": "\u2828\u2820\u283a", - "\\delta": "\u2828\u2819", - "\\eta": "\u2828\u2831", - "\\kappa": "\u2828\u2805", - "\\xi": "\u2828\u282d", - "\\rho": "\u2828\u2817", - "\\tau": "\u2828\u281e", - "\\chi": "\u2828\u282f", - "\\Lambda": "\u2828\u2820\u2807", - "\\Upsilon": "\u2828\u2820\u2825", - "\\digamma": "\u2828\u2827", - "\\varkappa": "\u2828\u2808\u2805", - "\\beth": "\u2820\u2820\u2827", - "\\daleth": "\u2820\u2820\u2819", - "\\gimel": "\u2820\u2820\u281b", - "\\stigma": "\u2828\u282e", - "\\Stigma": "\u2828\u2820\u282e", - "\\qoppa": "\u2828\u281f", - "\\sampi": "\u2828\u2809", - "\\Sampi ": "\u2828\u2820\u2809", - "\\Qoppa": "\u2828\u2820\u281f", - "\\pm": "\u282c\u2824", - "\\mp": "\u2824\u282c", - "\\times": "\u2808\u2821", - "\\div": "\u2828\u280c", - "\\ast": "\u2808\u283c", - "\\star": "\u282b\u280e", - "\\circ": "\u2828\u2821", - "\\bullet": "\u2838\u2832", - "\\cdot": "\u2821", - "\\cap": "\u2828\u2829", - "\\cup": "\u2828\u282c", - "\\uplus": "\u2828\u282c\u2838\u282b\u282c\u283b", - "\\vee": "\u2808\u282c", - "\\wedge": "\u2808\u2829", - "\\diamond": "\u282b\u2819", - "\\bigtriangleup": "\u282b\u281e", - "\\bigtriangledown": "\u2828\u282b", - "\\oplus": "\u282b\u2809\u2838\u282b\u282c\u283b", - "\\ominus": "\u282b\u2809\u2838\u282b\u2824\u283b", - "\\otimes": "\u282b\u2809\u2838\u282b\u2808\u2821\u283b", - "\\oslash": "\u282b\u2809\u2838\u282b\u2814\u283b", - "\\odot": "\u282b\u2809\u2838\u282b\u2821\u283b", - "\\bigcirc": "\u282b\u2809", - "\\dagger": "\u2838\u283b", - "\\ddagger": "\u2838\u2838\u283b", - "\\amalg": "????", - "\\dotplus": "\u2810\u282c\u2823\u2821\u283b", - "\\Cup": "\u2828\u282c\u2838\u282b\u2828\u282c\u283b", - "\\doublebarwedge": "\u2828\u2805\u2808\u2829", - "\\boxdot": "\u282b\u2832\u2838\u282b\u2821\u283b", - "\\circleddash": "\u282b\u2809\u2838\u282b\u2824\u283b", - "\\centerdot": "\u2821", - "\\smallsetminus": "\u2838\u2821", - "\\barwedge": "\u2831\u2808\u2829", - "\\boxminus": "\u282b\u2832\u2838\u282b\u2831\u283b", - "\\boxplus": "\u282b\u2832\u2838\u282b\u282c\u283b", - "\\circledast": "\u282b\u2809\u2838\u282b\u2808\u283c\u283b", - "\\intercal": "\u282b\u2823\u2812\u2812\u2833", - "\\Cap": "\u2828\u2829\u2838\u282b\u2828\u2829\u283b", - "\\veebar": "\u2808\u282c\u2831", - "\\boxtimes": "\u282b\u2832\u2838\u282b\u2808\u2821\u283b", - "\\divideontimes": "\u2808\u2821\u2838\u282b\u2828\u280c\u283b", - "\\circledcirc": "\u282b\u2809\u2838\u282b\u2828\u2821\u283b", - "\\leftarrow": "\u282b\u282a", - "\\Leftarrow": "\u282b\u282a\u2836\u2836", - "\\rightarrow": "\u282b\u2815", - "\\to": "\u282b\u2815", - "\\Rightarrow": "\u282b\u2836\u2836\u2815", - "\\leftrightarrow": "\u282b\u282a\u2812\u2812\u2815", - "\\Leftrightarrow": "\u282b\u282a\u2836\u2836\u2815", - "\\mapsto": "\u282b\u2833\u2812\u2815", - "\\hookleftarrow": "\u282b\u282a\u2812\u2812\u2808\u283d", - "\\leftharpoonup": "\u282b\u2808\u282a\u2812\u2812", - "\\leftharpoondown": "\u282b\u2820\u282a\u2812\u2812", - "\\leadsto": "\u282b\u2814\u2812\u2822\u2815", - "\\longleftarrow": "\u282b\u282a\u2812\u2812", - "\\Longleftarrow": "\u282b\u282a\u2812\u2812", - "\\longrightarrow": "\u282b\u2812\u2812\u2815", - "\\Longrightarrow": "\u282b\u282a\u2836\u2836", - "\\longleftrightarrow": "\u282b\u282a\u2812\u2812\u2815", - "\\Longleftrightarrow": "\u282b\u282a\u2836\u2836\u2815", - "\\longmapsto": "\u282b\u2833\u2812\u2812\u2815", - "\\hookrightarrow": "\u282b\u2808\u282f\u2812\u2812\u2815", - "\\rightharpoonup": "\u282b\u2812\u2812\u2808\u2815", - "\\rightharpoondown": "\u282b\u2812\u2812\u2820\u2815", - "\\uparrow": "\u282b\u2823\u2812\u2812\u2815", - "\\Uparrow": "\u282b\u2823\u2836\u2836\u2815", - "\\downarrow": "\u282b\u2829\u2812\u2812\u2815", - "\\Downarrow": "\u282b\u2829\u2836\u2836\u2815", - "\\updownarrow": "\u282b\u2823\u282a\u2812\u2812\u2815", - "\\Updownarrow": "\u282b\u2823\u282a\u2836\u2836\u2815", - "\\nearrow": "\u282b\u2818\u2812\u2812\u2815", - "\\searrow": "\u282b\u2830\u2812\u2812\u2815", - "\\swarrow": "\u282b\u2830\u282a\u2812\u2812", - "\\nwarrow": "\u282b\u2818\u282a\u2812\u2812", - "\\leftrightarrows": "\u282b\u282a\u2812\u2812\u282b\u2812\u2812\u2815", - "\\leftarrowtail": "\u282b\u282a\u2812\u2812\u282a", - "\\curvearrowleft": "\u282b\u2822\u2814\u2815", - "\\upuparrows": "\u282b\u2823\u2812\u2812\u2815\u2810\u282b\u2823\u2812\u2812\u2815", - "\\multimap": "\u282b\u2812\u2812\u2828\u2821", - "\\rightleftarrows": "\u282b\u2812\u2812\u2815\u282b\u282a\u2812\u2812", - "\\twoheadrightarrow": "\u282b\u2812\u2812\u2815\u2815", - "\\rightleftharpoons": "\u282b\u2812\u2812\u2808\u2815\u282b\u2820\u282a\u2812\u2812", - "\\downharpoonright": "\u282b\u2829\u2812\u2812\u2808\u2815", - "\\Lleftarrow": "\u282b\u282a\u283f\u283f", - "\\circlearrowleft": "\u282b\u2809\u2838\u282b\u282a\u283b", - "\\upharpoonleft": "\u282b\u2823\u2812\u2812\u2808\u2815", - "\\leftrightsquigarrow": "\u282b\u282a\u2814\u2822\u2814\u2815", - "\\rightrightarrows": "\u282b\u2812\u2812\u2815\u282b\u2812\u2812\u2815", - "\\curvearrowright": "\u282b\u282a\u2822\u2814", - "\\downdownarrows": "\u282b\u2829\u2812\u2812\u2815\u2810\u282b\u2829\u2812\u2812\u2815", - "\\rightsquigarrow": "\u282b\u2814\u2822\u2814\u2815", - "\\rightarrowtail": "\u282b\u2815\u2812\u2812\u2815", - "\\leftleftarrows": "\u282b\u282a\u2812\u2812\u282b\u282a\u2812\u2812", - "\\twoheadleftarrow": "\u282b\u282a\u282a\u2812\u2812", - "\\leftrightharpoons": "\u282b\u2820\u282a\u2812\u2812\u282b\u2812\u2812\u2808\u2815", - "\\downharpoonleft": "\u282b\u2829\u2812\u2812\u2820\u2815", - "\\circlearrowright": "\u282b\u2809\u2838\u282b\u2815\u283b", - "\\upharpoonright": "\u282b\u2823\u2812\u2812\u2820\u2815", - "\\Rrightarrow": "\u282b\u283f\u283f\u2815", - "\\nleftarrow": "\u280c\u282b\u282a", - "\\nRightarrow": "\u280c\u282b\u2836\u2836\u2815", - "\\nrightarrow": "\u280c\u282b\u2815", - "\\nleftrightarrow": "\u280c\u282b\u282a\u2812\u2812\u2815", - "\\nLeftarrow": "\u280c\u282b\u282a\u2836\u2836", - "\\nLeftrightarrow": "\u280c\u282b\u282a\u2836\u2836\u2815", - "\\leq": "\u2810\u2805\u2831", - "\\le": "\u2810\u2805\u2831", - "\\prec": "\u2828\u2810\u2805", - "\\preceq": "\u2828\u2810\u2805\u2831", - "\\ll": "\u2810\u2805\u2808\u2810\u2805\u283b", - "\\subset": "\u2838\u2810\u2805", - "\\subseteq": "\u2838\u2810\u2805\u2831", - "\\in": "\u2808\u2811", - "\\vdash": "\u282b\u2833\u2812\u2812", - "\\geq": "\u2828\u2802\u2831", - "\\succ": "\u2828\u2828\u2802", - "\\succeq": "\u2828\u2828\u2802\u2831", - "\\gg": "\u2828\u2802\u2808\u2828\u2802\u283b", - "\\supset": "\u2838\u2828\u2802", - "\\supseteq": "\u2838\u2828\u2802\u2831", - "\\ni": "\u2808\u2822", - "\\dashv": "\u282b\u2812\u2812\u2833", - "\\equiv": "\u2838\u2807", - "\\sim": "\u2808\u2831", - "\\simeq": "\u2808\u2831\u2831", - "\\asymp": "\u282b\u2801\u282b\u2804", - "\\approx": "\u2808\u2831\u2808\u2831", - "\\cong": "\u2808\u2831\u2828\u2805", - "\\neq": "\u280c\u2828\u2805", - "\\ne": "\u280c\u2828\u2805", - "\\not": "\u280c", - "\\doteq": "\u2810\u2828\u2805\u2823\u2821\u283b", - "\\propto": "\u2838\u283f", - "<": "\u2810\u2805", - "\\models": "\u282b\u2833\u2836\u2836", - "\\perp": "\u282b\u280f", - "\\mid": "\u2833", - "\\parallel": "\u282b\u2807", - "\\smile": "\u282b\u2804", - "\\frown": "\u282b\u2801", - ">": "\u2828\u2802", - "\\leqq": "\u2810\u2805\u2828\u2805", - "\\lesssim": "\u2810\u2805\u2808\u2831", - "\\lessdot": "\u2810\u2805\u2838\u282b\u2821\u283b", - "\\lesseqgtr": "\u2810\u2805\u2831\u2828\u2802", - "\\precsim": "\u2828\u2810\u2805\u2808\u2831", - "\\smallsmile": "\u282b\u2804", - "\\Bumpeq": "\u2808\u2823\u2820\u2823", - "\\eqslantgtr": "\u2831\u2828\u2802", - "\\gtrdot": "\u2828\u2802\u2838\u282b\u2821\u283b", - "\\gtreqless": "\u2828\u2802\u2831\u2810\u2805", - "\\circeq ": "\u2810\u2828\u2805\u2823\u2828\u2821\u283b", - "\\thickapprox": "\u2838\u2808\u2831\u2838\u2808\u2831", - "\\succsim": "\u2828\u2828\u2802\u2808\u2831", - "\\shortparallel": "\u282b\u2807", - "\\varpropto": "\u2838\u283f", - "\\backepsilon": "\u2808\u2822", - "\\leqslant": "\u2810\u2805\u2831", - "\\lessapprox": "\u2810\u2805\u2808\u2831\u2808\u2831", - "\\lll": "\u2810\u2805\u2808\u2810\u2805\u2808\u2810\u2805\u283b", - "\\lesseqqgtr": "\u2810\u2805\u2828\u2805\u2828\u2802", - "\\subseteqq": "\u2838\u2810\u2805\u2828\u2805", - "\\precapprox": "\u2828\u2810\u2805\u2808\u2831\u2808\u2831", - "\\vDash": "\u282b\u2833\u2836\u2836", - "\\smallfrown": "\u282b\u2801", - "\\geqq": "\u2828\u2802\u2828\u2805", - "\\gtrsim": "\u2828\u2802\u2808\u2831", - "\\ggg": "\u2828\u2802\u2808\u2828\u2802\u2808\u2828\u2802\u283b", - "\\gtreqqless": "\u2828\u2802\u2828\u2805\u2810\u2805", - "\\triangleq": "\u2810\u2828\u2805\u2823\u282b\u281e\u283b", - "\\supseteqq": "\u2838\u2828\u2802\u2828\u2805", - "\\succapprox": "\u2828\u2828\u2802\u2808\u2831\u2808\u2831", - "\\Vdash": "\u282b\u2833\u2833\u2812\u2812", - "\\blacktriangleleft": "\u282b\u2838", - "\\blacktriangleright": "\u282b\u2838", - "\\eqslantless": "\u2831\u2810\u2805", - "\\approxeq": "\u2808\u2831\u2808\u2831\u2831", - "\\lessgtr": "\u2810\u2805\u2828\u2802", - "\\doteqdot": "\u2810\u2828\u2805\u2829\u2821\u2823\u2821\u283b", - "\\Subset": "\u2838\u2810\u2805\u2838\u282b\u2838\u2810\u2805\u283b", - "\\Vvdash": "\u282b\u2833\u2833\u2833\u2812\u2812", - "\\geqslant": "\u2828\u2802\u2831", - "\\gtrapprox": "\u2828\u2802\u2808\u2831\u2808\u2831", - "\\gtrless": "\u2828\u2802\u2810\u2805", - "\\eqcirc ": "\u2828\u2821\u2808\u2828\u2805\u283b", - "\\thicksim": "\u2838\u2808\u2831", - "\\Supset": "\u2838\u2828\u2802\u2838\u282b\u2838\u2828\u2802\u283b", - "\\shortmid": "\u2833", - "\\therefore": "\u2820\u2821", - "\\because": "\u2808\u280c", - "\\nless": "\u280c\u2810\u2805", - "\\nleqq": "\u280c\u2810\u2805\u2828\u2805", - "\\nprec": "\u280c\u2828\u2810\u2805", - "\\precnapprox": "\u280c\u2828\u2810\u2805\u2808\u2831\u2808\u2831", - "\\nmid": "\u280c\u2833", - "\\subsetneq": "\u2838\u2810\u2805\u280c\u2831", - "\\varsubsetneqq": "\u2838\u2810\u2805\u280c\u2828\u2805", - "\\ngeqslant": "\u280c\u2828\u2802\u2831", - "\\gneqq ": "\u2828\u2802\u280c\u2828\u2805", - "\\gnapprox": "\u2828\u2802\u280c\u2808\u2831\u2808\u2831", - "\\succnsim": "\u2828\u2828\u2802\u280c\u2808\u2831", - "\\nshortparallel": "\u280c\u282b\u2807", - "\\nVDash": "\u280c\u282b\u2833\u2833\u2812\u2812", - "\\nsupseteq": "\u280c\u2838\u2828\u2802\u2831", - "\\varsupsetneq ": "\u2838\u2828\u2802\u280c\u2831", - "\\nleq": "\u280c\u2810\u2805\u2831", - "\\lneq": "\u2810\u2805\u280c\u2831", - "\\lnsim": "\u2810\u2805\u280c\u2808\u2831", - "\\npreceq": "\u280c\u2828\u2810\u2805\u2831", - "\\nsim": "\u280c\u2808\u2831", - "\\nvdash": "\u280c\u282b\u2833\u2812\u2812", - "\\varsubsetneq": "\u2838\u2810\u2805\u280c\u2831", - "\\ngtr": "\u280c\u2828\u2802", - "\\ngeqq": "\u280c\u2828\u2802\u2828\u2805", - "\\gvertneqq": "\u2828\u2802\u280c\u2828\u2805", - "\\nsucc": "\u2828\u2828\u2802", - "\\succnapprox": "\u2828\u2828\u2802\u280c\u2808\u2831\u2808\u2831", - "\\nparallel": "\u280c\u282b\u2807", - "\\nsupseteqq": "\u280c\u2838\u2828\u2802\u2828\u2805", - "\\supsetneqq": "\u2838\u2828\u2802\u280c\u2828\u2805", - "\\nleqslant": "\u280c\u2810\u2805\u2831", - "\\lneqq": "\u2810\u2805\u280c\u2828\u2805", - "\\lnapprox": "\u2810\u2805\u280c\u2808\u2831\u2808\u2831", - "\\precnsim": "\u2828\u2810\u2805\u280c\u2808\u2831", - "\\nshortmid": "\u280c\u2833", - "\\nvDash": "\u280c\u282b\u2833\u2836\u2836", - "\\nsubseteq": "\u280c\u2838\u2810\u2805\u2831", - "\\subsetneqq": "\u2838\u2810\u2805\u280c\u2828\u2805", - "\\ngeq": "\u280c\u2828\u2802\u2831", - "\\gneq": "\u2828\u2802\u280c\u2831", - "\\gnsim": "\u2828\u2802\u280c\u2808\u2831", - "\\nsucceq": "\u280c\u2828\u2828\u2802\u2831", - "\\ncong": "\u280c\u2808\u2831\u2828\u2805", - "\\nvDash": "\u280c\u282b\u2833\u2836\u2836", - "\\supsetneq": "\u2838\u2828\u2802\u280c\u2831", - "\\varsupsetneqq": "\u2838\u2828\u2802\u280c\u2828\u2805", - "\\ldots": "\u2804\u2804\u2804", - "\\dots": "\u2804\u2804\u2804", - "\\dotsc": "\u2804\u2804\u2804", - "\\aleph": "\u2820\u2820\u2801", - "\\hbar": "\u2808\u2813", - "\\surd": "\u281c", - "\\top": "\u282b\u2823\u2812\u2812\u2833", - "\\wp": "\u2808\u2830\u280f", - "\\Im": "\u2820\u280a\u280d", - "\\cdots": "\u2804\u2804\u2804", - "\\prime": "\u2804", - "\\emptyset": "\u2838\u2834", - "\\varnothing": "\u2838\u2834", - "\\Box": "\u282b\u2832", - "\\bot": "\u282b\u280f", - "\\angle": "\u282b\u282a", - "\\vdots": "\u282b\u2829\u2804\u2804\u2804", - "\\forall": "\u2808\u282f", - "\\exists": "\u2808\u283f", - "\\triangle": "\u282b\u281e", - "\\ell": "\u2820\u2807", - "\\partial": "\u2808\u2819", - "\\ddots": "\u282b\u2829\u2804\u2804\u2804", - "\\infty": "\u2820\u283f", - "\\nabla": "\u2828\u282b", - "\\Diamond": "\u282b\u2819", - "\\neg": "\u282b\u2812\u2812\u2820\u2833", - "\\sharp": "\u2828\u283c", - "\\Re": "\u2820\u2817\u2811", - "\\adots": "\u282b\u2823\u2804\u2804\u2804", - "\\lozenge": "\u282b\u2819", - "\\nexists": "\u280c\u2808\u283f", - "\\blacksquare": "\u282b\u2838\u2832", - "\\complement": "\u2828\u2809", - "\\square": "\u282b\u2832", - "\\blacktriangledown": "\u282b\u2838\u2828\u281e", - "\\vartriangle": "\u282b\u281e", - "\\circledS": "\u282b\u2809\u2838\u282b\u2820\u280e\u283b", - "\\varnothing": "\u2838\u2834", - "\\blacklozenge": "\u282b\u2838\u2819", - "\\measuredangle": "\u282b\u282a\u2808\u282b\u2801\u283b", - "\\blacktriangle": "\u282b\u2838\u281e", - "\\bigstar": "\u282b\u2838\u280e", - "\\diagup": "\u280c", - "\\Bbbk": "\u2838\u2805", - "\\diagdown": "\u2838\u2821", - "\\llbracket": "\u2808\u2838\u2837", - "\\left\\llbracket": "\u2808\u2838\u2820\u2837", - "\\bigl\\llbracket": "\u2808\u2838\u2820\u2837", - "\\Bigl\\llbracket": "\u2808\u2838\u2820\u2837", - "\\biggl\\llbracket": "\u2808\u2838\u2820\u2837", - "\\Biggl\\llbracket": "\u2808\u2838\u2820\u2837", - "\\rrbracket": "\u2808\u2838\u283e", - "\\right\rrbracket": "\u2808\u2838\u2820\u283e", - "\\bigr\rrbracket": "\u2808\u2838\u2820\u283e", - "\\Bigr\rrbracket": "\u2808\u2838\u2820\u283e", - "\\biggr\rrbracket": "\u2808\u2838\u2820\u283e", - "\\Biggr\rrbracket": "\u2808\u2838\u2820\u283e", - "\\varg": "\u2808\u281b", - "\\varv": "\u2808\u2827", - "\\varw": "\u2808\u283a", - "\\vary": "\u2808\u283d", - "\\medcirc": "\u282b\u2809", - "\\circledwedge": "\u282b\u2809\u2838\u282b\u2808\u2839\u283b", - "\\circledbslash": "\u282b\u2809\u2838\u282b\u2822\u283b", - "\\boxbslash": "\u282b\u2832\u2838\u282b\u2822\u283b", - "\\medbullet": "\u282b\u2838\u2809", - "\\circledvee": "\u282b\u2809\u2838\u282b\u2808\u283c\u283b", - "\\nplus": "\u2828\u2829\u2838\u282b\u282c\u283b", - "\\boxbar": "\u282b\u2832\u2838\u282b\u2833\u283b", - "\\circledbar": "\u282b\u2809\u2838\u282b\u2833\u283b", - "\\boxast": "\u282b\u2832\u2838\u282b\u2808\u283c\u283b", - "\\boxslash": "\u282b\u2832\u2838\u282b\u2814\u283b", - "\\Diamonddot": "\u282b\u2819\u2838\u282b\u2821\u283b", - "\\lambdabar": "\u2808\u2828\u2807", - "\\Bot": "\u282b\u2829\u2836\u2836\u2833", - "\\Diamondblack": "\u282b\u2838\u2819", - "\\Diamond": "\u282b\u2819", - "\\Top": "\u282b\u2823\u2836\u2836\u2833", - "\\bignplus": "\u2828\u2829\u2838\u282b\u282c\u283b", - "\\oiint": "\u282e\u282e\u2808\u282b\u2809\u283b", - "\\ointclockwise": "\u282e\u2808\u282b\u282a\u2822\u2814\u283b", - "\\sqint": "\u282e\u2808\u282b\u2832\u283b", - "\\fint": "\u280c\u282e", - "\\iiiint": "\u282e\u282e\u282e\u282e", - "\\oiintclockwise": "\u282e\u282e\u2808\u282b\u282a\u2822\u2814\u283b", - "\\oiiintctrclockwise": "\u282e\u282e\u282e\u2808\u282b\u2822\u2814\u2815\u283b", - "\\varoiiintclockwise": "\u282e\u282e\u282e\u2808\u282b\u282a\u2822\u2814\u283b", - "\\oiiint": "\u282e\u282e\u282e\u2808\u282b\u2809\u283b", - "\\varointctrclockwise": "\u282e\u2808\u282b\u2822\u2814\u2815\u283b", - "\\sqiintop": "\u282e\u282e\u2808\u282b\u2817\u283b", - "\\iint": "\u282e\u282e", - "\\idotsint": "\u282e\u2804\u2804\u2804\u282e", - "\\varoiintctrclockwise": "\u282e\u282e\u2808\u282b\u2822\u2814\u2815\u283b", - "\\oiiintclockwise": "\u282e\u282e\u282e\u2808\u282b\u282a\u2822\u2814\u283b", - "\\varprod": "\u2810\u2808\u2821", - "\\ointctrclockwise": "\u282e\u2808\u282b\u2822\u2814\u2815\u283b", - "\\varointclockwise": "\u282e\u2808\u282b\u282a\u2822\u2814\u283b", - "\\sqiiintop": "\u282e\u282e\u282e\u2808\u282b\u2817\u283b", - "\\iiint": "\u282e\u282e\u282e", - "\\iiiint": "\u282e\u282e\u282e\u282e", - "\\upint": "\u2823\u282e", - "\\lowint": "\u2829\u282e", - "\\oiintctrclockwise": "\u282e\u282e\u2808\u282b\u2822\u2814\u2815\u283b", - "\\varoiintclockwise": "\u282e\u282e\u2808\u282b\u282a\u2822\u2814\u283b", - "\\varoiiintctrclockwise": "\u282e\u282e\u282e\u2808\u282b\u2822\u2814\u2815\u283b", - "\\dashrightarrow": "\u282b\u2812", - "\\ntwoheadrightarrow": "\u280c\u282b\u2812\u2812\u2815\u2815", - "\\Searrow": "\u282b\u2830\u2836\u2836\u2815", - "\\Perp": "\u282b\u2829\u2836\u2836\u2833", - "\\boxright": "\u282b\u2832\u282b\u2815", - "\\boxdotleft": "\u282b\u282a\u282b\u2832\u2838\u282b\u2821\u283b", - "\\Diamonddotright": "\u282b\u2819\u2838\u282b\u2821\u283b\u282b\u2815", - "\\boxLeft": "\u282b\u282a\u2834\u2834\u282b\u2832", - "\\DiamondRight": "\u282b\u2819\u282b\u2836\u2836\u2815", - "\\DiamonddotLeft": "\u282b\u282a\u2836\u2836\u282b\u2819\u2838\u282b\u2821\u283b", - "\\circleddotright": "\u282b\u2809\u2838\u282b\u2821\u282b\u2815\u283b", - "\\multimapdotbothvert": "\u282b\u2823\u2821\u2812\u2812\u2821", - "\\dashleftrightarrow": "\u282b\u282a\u2812", - "\\ntwoheadleftarrow": "\u280c\u282b\u282a\u282a\u2812\u2812", - "\\Nwarrow": "\u282b\u2818\u282a\u2836\u2836", - "\\leadstoext": "\u2808\u2831", - "\\boxleft": "\u282b\u282a\u282b\u2832", - "\\Diamondright": "\u282b\u2819\u282b\u2815", - "\\Diamonddotleft": "\u282b\u282a\u282b\u2819\u2838\u282b\u2821\u283b", - "\\boxdotRight": "\u282b\u2832\u2838\u282b\u2821\u283b\u282b\u2836\u2836\u2815", - "\\DiamondLeft": "\u282b\u282a\u2836\u2836\u282b\u2819", - "\\circleright": "\u282b\u2809\u2838\u282b\u2815\u283b", - "\\circleddotleft": "\u282b\u2809\u2838\u282b\u2821\u282b\u282a\u283b", - "\\dashleftarrow": "\u282b\u282a\u2812", - "\\leftsquigarrow": "\u282b\u282a\u2814\u2822\u2814", - "\\Nearrow": "\u282b\u2818\u2836\u2836\u2815", - "\\Swarrow": "\u282b\u2830\u282a\u2836\u2836", - "\\leadsto": "\u282b\u2814\u2812\u2822\u2815", - "\\boxdotright": "\u282b\u2832\u2838\u2821\u283b\u282b\u2815", - "\\Diamondleft": "\u282b\u282a\u282b\u2819", - "\\boxRight": "\u282b\u2832\u282b\u2836\u2836\u2815", - "\\boxdotLeft": "\u282b\u282a\u2836\u2836\u282b\u2832\u2838\u282b\u2821\u283b", - "\\DiamonddotRight": "\u282b\u2819\u2838\u282b\u2821\u283b\u282b\u2836\u2836\u2815", - "\\circleleft": "\u282b\u2809\u2838\u282b\u282a\u283b", - "\\multimapbothvert": "\u282b\u2823\u2828\u2821\u2812\u2812\u2828\u2821", - "\\multimapdotbothBvert": "\u282b\u2823\u2828\u2821\u2812\u2812\u2821", - "\\mappedfrom": "\u282b\u282a\u2812\u2833", - "\\Longmapsto": "\u282b\u2833\u2836\u2836\u2815", - "\\mmapsto": "\u282b\u2833\u2833\u2812\u2815", - "\\longmmappedfrom": "\u282b\u282a\u2812\u2812\u2833\u2833", - "\\Mmappedfrom": "\u282b\u282a\u2836\u2833\u2833", - "\\varparallelinv": "\u2838\u2821\u2838\u2821", - "\\colonapprox": "\u2806\u2808\u2831\u2808\u2831", - "\\Colonsim": "\u2806\u2806\u2808\u2831", - "\\multimapboth": "\u282b\u2828\u2821\u2812\u2812\u2828\u2821", - "\\multimapdotboth": "\u282b\u2821\u2812\u2812\u2821", - "\\Vdash": "\u282b\u2833\u2833\u2836\u2836", - "\\preceqq": "\u2828\u2810\u2805\u2828\u2805", - "\\nsuccsim": "\u280c\u2828\u2828\u2802\u2808\u2831", - "\\nlessapprox": "\u280c\u2810\u2805\u2808\u2831\u2808\u2831", - "\\nequiv": "\u280c\u283f", - "\\nsubset": "\u280c\u2838\u2810\u2805", - "\\ngg": "\u280c\u2828\u2802\u2808\u2828\u2802\u283b", - "\\nprecapprox": "\u280c\u2828\u2810\u2805\u2808\u2831\u2808\u2831", - "\\nsucceqq": "\u280c\u2828\u2828\u2802\u2828\u2805", - "\\notni": "\u280c\u2808\u2822", - "\\notowns": "\u280c\u2808\u2822", - "\\eqqcolon": "\u2828\u2805\u2810\u2806", - "\\Coloneqq": "\u2806\u2806\u2810\u2828\u2805", - "\\Eqcolon": "\u2831\u2810\u2806\u2806", - "\\strictiff": "\u282b\u282f\u2812\u2812\u283d", - "\\longmappedfrom": "\u282b\u282a\u2812\u2812\u2833", - "\\Mappedfrom": "\u282b\u282a\u2836\u2833", - "\\longmmapsto": "\u282b\u2833\u2833\u2812\u2812\u2815", - "\\Mmapsto": "\u282b\u2833\u2833\u2836\u2815", - "\\Longmmappedfrom": "\u282b\u282a\u2836\u2836\u2833\u2833", - "\\nvarparallel": "\u280c\u282b\u2807", - "\\colonsim": "\u2806\u2810\u2808\u2831", - "\\doteq": "\u2810\u2828\u2805\u2823\u2821\u283b", - "\\multimapdot": "\u282b\u2812\u2812\u2821", - "\\multimapdotbothA": "\u282b\u2828\u2821\u2812\u2812\u2821", - "\\VvDash": "\u282b\u2833\u2833\u2833\u2836\u2836", - "\\succeqq": "\u2828\u2828\u2802\u2828\u2805", - "\\nlesssim": "\u280c\u2810\u2805\u2808\u2831", - "\\ngtrapprox": "\u280c\u2828\u2802\u2808\u2831\u2808\u2831", - "\\ngtrless": "\u280c\u2810\u2805\u2828\u2802", - "\\nBumpeq": "\u280c\u2808\u2823\u2820\u2823", - "\\nsim": "\u280c\u2808\u2831", - "\\nsupset": "\u280c\u2838\u2828\u2802", - "\\nthickapprox": "\u280c\u2838\u2808\u2831\u2838\u2808\u2831", - "\\nsuccapprox": "\u280c\u2828\u2828\u2802\u2808\u2831\u2808\u2831", - "\\nsimeq": "\u280c\u2808\u2831\u2831", - "\\nSubset": "\u280c\u2838\u2810\u2805\u2838\u282b\u2838\u2810\u2805\u283b", - "\\coloneq": "\u2806\u2810\u2831", - "\\Eqqcolon": "\u2828\u2805\u2810\u2806\u2806", - "\\strictif": "\u282b\u2812\u2812\u283d", - "\\circledless": "\u282b\u2809\u2838\u282b\u2810\u2805\u283b", - "\\Mapsto": "\u282b\u2833\u2836\u2815", - "\\Longmappedfrom": "\u282b\u282a\u2836\u2836\u2833", - "\\mmappedfrom": "\u282b\u282a\u2812\u2833\u2833", - "\\Longmmapsto": "\u282b\u2833\u2833\u2836\u2836\u2815", - "\\varparallel": "\u282b\u2807", - "\\nvarparallelinv": "\u280c\u2838\u2821\u2838\u2821", - "\\Colonapprox": "\u2806\u2806\u2810\u2808\u2831\u2808\u2831", - "\\multimapinv": "\u282b\u2828\u2821\u2812\u2812", - "\\multimapdotinv": "\u282b\u2821\u2812\u2812", - "\\multimapdotbothB": "\u282b\u2821\u2812\u2812\u2828\u2821", - "\\nprecsim": "\u280c\u2828\u2810\u2805\u2808\u2831", - "\\ngtrsim": "\u280c\u2828\u2802\u2808\u2831", - "\\nlessgtr": "\u280c\u2828\u2802\u2810\u2805", - "\\nasymp": "\u280c\u282b\u2801\u282b\u2804", - "\\napprox": "\u280c\u2808\u2831\u2808\u2831", - "\\nll": "\u280c\u2810\u2805\u2808\u2810\u2805\u283b", - "\\napproxeq": "\u280c\u2808\u2831\u2808\u2831\u2831", - "\\npreceqq": "\u280c\u2828\u2810\u2805\u2828\u2805", - "\\notin": "\u280c\u2808\u2811", - "\\nSupset": "\u280c\u2838\u2828\u2802\u2838\u282b\u2838\u2828\u2802\u283b", - "\\coloneqq": "\u2806\u2810\u2828\u2805", - "\\eqcolon": "\u2831\u2810\u2806", - "\\Coloneq": "\u2806\u2806\u2810\u2831", - "\\strictfi": "\u282b\u282f\u2812\u2812", - "\\circledgtr": "\u282b\u2809\u2838\u282b\u2828\u2802\u283b", - "\\mathbb": "\u2838", - "\\mathcal": "\u2808\u2830", - "\\underbrace-begin": "\u2810", - "\\underbrace-middle": "\u2829\u2828\u283e\u2829\u2829", - "\\underbrace-end": "\u283b", - "\\overbrace-begin": "\u2810", - "\\overbrace-middle": "\u2823\u2828\u2837\u2823\u2823", - "\\overbrace-end": "\u283b", - "\\overline-begin": "\u2810", - "\\overline-end": "\u2823\u2831", - "\\underline-begin": "\u2810", - "\\underline-end": "\u2829\u2831", - "?": "\u2838\u2826", - "'": "\u2804", - "{": "", - "}": "", - "\\displaystyle": "", - "\\tilde": "\u2808\u2831", - "\\widetilde-begin": "\u2810", - "\\widetilde-end": "\u2823\u2808\u2820\u2831", - "\\lenqno": " ", - "\\binom": "\u2829", - "\\atop": "\u2829", - "\\choose": "\u2829", - "\\under": "\u2829", - "\\under": "\u2829", - "\\leqno": " ", - "\\hat": "\u2823\u2838\u2823", - "\\%": "\u2808\u2834", - "\\bar": "\u2831", - "\\stackrel-begin": "\u2810", - "\\stackrel-middle": "\u2823", - "\\stackrel-end": "\u283B", - "\\sqcup": "⠈⠨⠬", - "\\sqcap": "⠈⠨⠩", - "\\bigsqcup": "⠈⠨⠬", - "\\bigsqcap": "⠈⠨⠩", - "\\wr": "", - "\\trangleleft": "⠫⠐⠅⠇⠻", - "\\triangleright": "⠫⠸⠨⠂⠻", - "\\lhd": "⠫⠐⠅⠇⠻", - "\\unlhd": "⠫⠐⠅⠇⠱⠻", - "\\rhd": "⠫⠸⠨⠂⠻", - "\\unrhd": "⠫⠸⠨⠂⠱⠻", - "\\amalg": "⠫⠨⠏⠻", - "\\ltimes": "⠫⠸⠈⠡⠻", - "\\rightthreetimes": "", - "\\rtimes": "⠫⠈⠡⠇⠻", - "\\curlywedge": "⠫⠈⠩⠻", - "\\leftthreetimes": "", - "\\curlyvee": "⠫⠈⠬⠻", - "\\sqsubset": "⠈⠸⠐⠅", - "\\sqsubseteq": "⠈⠸⠐⠅⠱", - "\\sqsupset": "⠈⠸⠨⠂", - "\\sqsupseteq": "⠈⠸⠨⠂⠱", - "\\bowtie": "⠫⠸⠈⠡⠇⠻", - "\\Join": "⠫⠸⠈⠡⠇⠻", - "\\risingdotseq": "", - "\\backsimeq": "⠈⠈⠱⠱", - "\\tianglelefteq": "⠫⠐⠅⠇⠱⠻", - "\\trianglerighteq": "⠫⠸⠨⠂⠱⠻", - "\\fallingdotseq": "", - "\\preccurlyeq": "⠫⠨⠐⠅⠱⠻", - "\\succcurlyeq": "⠫⠨⠨⠂⠱⠻", - "\\between": "⠷⠾", - "\\blacktriangleleft": "⠸⠫⠐⠅⠇⠻", - "\\blacktriangleright": "⠸⠫⠸⠨⠂⠻", - "\\backsim": "⠈⠈⠱", - "\\curlyeqprec": "⠫⠱⠨⠐⠅⠻", - "\\vartriangleleft": "⠫⠐⠅⠇⠻", - "\\curlyeqsucc": "⠫⠱⠨⠨⠂⠻", - "\\vartrianlgeright": "⠫⠸⠨⠂⠻", - "\\lvertneqq": "⠐⠅⠱⠌⠨⠅⠻", - "\\ntriangleleft": "⠌⠫⠐⠅⠇⠻", - "\\ntrianglelefteq": "⠌⠫⠐⠅⠇⠱⠻", - "\\ntriangleright": "⠌⠫⠸⠨⠂⠻", - "\\ntrianglerighteq": "⠌⠫⠸⠨⠂⠱⠻", - "\\mho": "⠫⠨⠚⠻", - "\\hslash": "⠫⠌⠓⠻", - "\\backprime": "⠈⠄", - "\\Finv": "⠫⠠⠋⠻", - "\\eth": "⠫⠌⠈⠙⠻", - "\\triangledown": "⠨⠫", - "\\Game": "⠫⠠⠛⠻", - "\\Wr": "", - "\\sqcupplus": "⠈⠨⠬⠸⠫⠬⠻", - "\\invamp": "⠫⠯⠻", - "\\sqcapplus": "⠈⠨⠩⠸⠫⠬⠻", - "\\lambdaslash": "⠫⠌⠨⠇⠻", - "\\bigsqcupplus": "⠈⠨⠬⠸⠫⠬⠻", - "\\bigsqcapplus": "⠈⠨⠩⠸⠫⠬⠻", - "\\nsqsubset": "⠌⠈⠸⠐⠅", - "\\nsqsupset": "⠌⠈⠸⠨⠂", - "\\nsucccurlyeq": "⠌⠫⠨⠨⠂⠱⠻", - "\\nbacksim": "⠌⠈⠈⠱", - "\\nsqsubseteq": "⠌⠈⠸⠐⠅⠱", - "\\lJoin": "⠫⠸⠈⠡⠻", - "\\openJoin": "⠈⠡", - "\\nsqsupseteq": "⠌⠈⠸⠨⠂⠱", - "\\lrtimes": "⠫⠸⠈⠡⠇⠻", - "\\rJoin": "⠫⠈⠡⠇⠻", - "\\npreccurlyeq": "⠌⠫⠨⠐⠅⠱⠻", - "\\nbacksim": "⠌⠈⠈⠱", - "\\textvisiblespace": "⠿", - "\\imath": "⠫⠊⠻", - "\\jmath": "⠫⠚⠻", - "\\check": "\u2823\u2808\u2838\u2823", - "\\acute": "\u2823\u2804", - "\\grave": "\u2831" - }, - "theoremSymbols": { - ".": "\u2828", - "#": "\u283c", - "0": "\u2834", - "1": "\u2802", - "2": "\u2806", - "3": "\u2812", - "4": "\u2832", - "5": "\u2822", - "6": "\u2816", - "7": "\u2836", - "8": "\u2826", - "9": "\u2814", - "#0": "\u283c\u2834", - "#1": "\u283c\u2802", - "#2": "\u283c\u2806", - "#3": "\u283c\u2812", - "#4": "\u283c\u2832", - "#5": "\u283c\u2822", - "#6": "\u283c\u2816", - "#7": "\u283c\u2836", - "#8": "\u283c\u2826", - "#9": "\u283c\u2814" - } -} \ No newline at end of file diff --git a/support/latex2nemeth/latex2nemeth b/support/latex2nemeth/latex2nemeth index 3ce409fc29..9aa230a9ad 100755 --- a/support/latex2nemeth/latex2nemeth +++ b/support/latex2nemeth/latex2nemeth @@ -1,3 +1,3 @@ #!/bin/sh -jarpath=`kpsewhich --progname=latex2nemeth --format=texmfscripts latex2nemeth-v1.0.2.jar` +jarpath=`kpsewhich --progname=latex2nemeth --format=texmfscripts latex2nemeth.jar` exec java -jar "$jarpath" "$@" diff --git a/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl b/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl index cffd5bdee7..fe71cd86ea 100644 --- a/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl +++ b/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl @@ -49,7 +49,6 @@ $mirrors = { 'https://cran.asia/tex/' => 1, 'https://ftp.harukasan.org/CTAN/' => 1, 'https://ftp.kaist.ac.kr/pub/tex-archive/' => 1, - 'https://mirror.kakao.com/CTAN/' => 1, 'https://mirror.navercorp.com/CTAN/' => 1, 'https://mirror.yongbok.net/ctan/' => 1, }, @@ -87,7 +86,6 @@ $mirrors = { 'https://distrib-coffee.ipsl.jussieu.fr/pub/mirrors/ctan/' => 1, 'https://mirror.ibcp.fr/pub/CTAN/' => 1, 'https://mirrors.chevalier.io/CTAN/' => 1, - 'https://mirrors.ircam.fr/pub/CTAN/' => 1, 'https://texlive.mycozy.space/' => 1, }, 'Germany' => { diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb b/systems/texlive/tlnet/tlpkg/texlive.tlpdb index 6bf059a7d5..203f94cc01 100644 --- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb +++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb @@ -26,11 +26,11 @@ depend container_split_src_files/1 depend frozen/0 depend minrelease/2016 depend release/2021 -depend revision/60523 +depend revision/60530 name 00texlive.image category TLCore -revision 60503 +revision 60529 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 @@ -2595,6 +2595,7 @@ runfiles size=13900 tlpkg/tlpsrc/luaotfload.tlpsrc tlpkg/tlpsrc/luapackageloader.tlpsrc tlpkg/tlpsrc/luaprogtable.tlpsrc + tlpkg/tlpsrc/luapstricks.tlpsrc tlpkg/tlpsrc/luarandom.tlpsrc tlpkg/tlpsrc/luasseq.tlpsrc tlpkg/tlpsrc/luatex.tlpsrc @@ -4457,7 +4458,7 @@ depend setting_available_architectures:aarch64-linux amd64-freebsd amd64-netbsd name 00texlive.installer category TLCore -revision 60518 +revision 60525 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 @@ -69698,7 +69699,7 @@ containerchecksum 3513b00f6c81b941389c3bb2b2e2dd1eb1d93c63edcc8c77f3aefbb15132e9 name collection-pstricks category Collection -revision 54455 +revision 60526 shortdesc PSTricks relocated 1 longdesc PSTricks core and all add-on packages. @@ -69707,6 +69708,7 @@ depend bclogo depend collection-basic depend collection-plaingeneric depend dsptricks +depend luapstricks depend makeplot depend pdftricks depend pdftricks2 @@ -69814,8 +69816,8 @@ depend pstricks_calcnotes depend uml depend vaucanson-g depend vocaltract -containersize 808 -containerchecksum 653143f95761352dc349c66f618b01a77650b20bf8b2cf45137e72b2f05ba3dcefbf0238f1b2757297ac37ec6cbd4a05283c0bfc03d6e153e57f4be23ca8f87f +containersize 812 +containerchecksum 2b900dbe1cd032509169ee2b63f283cac0c9e42276f853e6f8556a0432e4133d020cee6cba848e79a336824ffd5078d82bb1754d32dff704443c0c4d007a1b0e name collection-publishers category Collection @@ -167484,7 +167486,7 @@ binfiles arch=x86_64-solaris size=1 name latex2nemeth category Package -revision 54389 +revision 60528 shortdesc Convert LaTeX source to Braille with math in Nemeth longdesc After many failed attempts to transcribe real math notes and longdesc books to Braille/Nemeth in order to deal with a real situation @@ -167501,25 +167503,27 @@ longdesc specialized equipment. Note that embossing will need longdesc LibreOffice and odt2braille as this project does not deal with longdesc embossers' drivers. depend latex2nemeth.ARCH -containersize 7125616 -containerchecksum 37065f9916e6755c1a97f2b8a1f1cfd838008b5da2d2131938626ae4eb6872af30e5b4b767ff3204e271a86b7245b54d9146d9fdd8c807f882ca28e1663d2d14 -doccontainersize 26836 -doccontainerchecksum e2ea8084bec4d41a4b694c3b46788e3170043ba1f7ce4096bf029a4de61b76cb504b532d7e0c454943980d44d1c145a78a9e4a7f20a6654aa9cca63d388bdb5a -docfiles size=42 +containersize 7234364 +containerchecksum d245b34164d29fe4380e81ed76bee7042bd102e53dd86dae98d0faf9575fd2c9153b9570946cbc372119b6d6d8810239dd695b2f880043cd0b1561f94482dd90 +doccontainersize 165264 +doccontainerchecksum 1c2c15af443e7b2289fd49d6572818b3268eae1f0bd77fe47d559652ada909f26557180da2f10fe08542e8e65ee977ec8b105fa9361af1caaeb6b12da7b74ac3 +docfiles size=82 texmf-dist/doc/support/latex2nemeth/README details="Readme" + texmf-dist/doc/support/latex2nemeth/contrib/nemeth2odt + texmf-dist/doc/support/latex2nemeth/encodings/nemeth.json texmf-dist/doc/support/latex2nemeth/encodings/polytonic.json texmf-dist/doc/support/latex2nemeth/examples/mathpics.tex texmf-dist/doc/support/latex2nemeth/examples/mathtest.tex - texmf-dist/doc/support/latex2nemeth/examples/nemeth.json texmf-dist/doc/support/latex2nemeth/gpl-3.0.txt -runfiles size=1947 + texmf-dist/doc/support/latex2nemeth/source.zip +runfiles size=1977 texmf-dist/scripts/latex2nemeth/latex2nemeth - texmf-dist/scripts/latex2nemeth/latex2nemeth-v1.0.2.jar + texmf-dist/scripts/latex2nemeth/latex2nemeth.jar catalogue-contact-home http://myria.math.aegean.gr/labs/dt/braille/index-en.html catalogue-ctan /support/latex2nemeth catalogue-license gpl3 catalogue-topics cvt-other maths accessible -catalogue-version 1.0.2 +catalogue-version 1.0.3 name latex2nemeth.aarch64-linux category Package @@ -186674,6 +186678,32 @@ catalogue-license mit catalogue-topics table catalogue-version 1.0 +name luapstricks +category Package +revision 60526 +shortdesc A PSTricks backend for LuaLaTeX +relocated 1 +longdesc This package enables the use of PSTricks directly in LuaLaTeX +longdesc documents, without invoking external programmes, by +longdesc implementing a PostScript interpreter in Lua. Therefore it does +longdesc not require shell escape to be enabled or special environments, +longdesc and instead allows PSTricks to be used exactly like in dvips +longdesc based documents. +containersize 21316 +containerchecksum 05090f0d2f89d3fd1ff4102f902885f415a330bbb1e0f01fe5b4392f48ad8d2a1c2d7da9c1e561fb5db174244a1a5a8580bba29085a5d1ede8dc4179ee53cd98 +doccontainersize 1492 +doccontainerchecksum e6e65f725832e9c62188455d2114a7141c1936ee927d2b98b1e571c76a544afc5a83e30952baa7d8eaeff7194230c0a42c57255fdda35aa0cd9dae1467dbd30e +docfiles size=1 + RELOC/doc/latex/luapstricks/README.md details="Readme" +runfiles size=30 + RELOC/tex/latex/luapstricks/luapstricks.lua +catalogue-contact-bugs https://github.com/zauguin/luapstricks/issues +catalogue-contact-repository https://github.com/zauguin/luapstricks +catalogue-ctan /graphics/pstricks/contrib/luapstricks +catalogue-license lppl1.3 +catalogue-topics luatex pstricks +catalogue-version 0.1 + name luarandom category Package revision 49419 @@ -216279,30 +216309,29 @@ catalogue-version 1.1.2 name njuthesis category Package -revision 60486 +revision 60529 shortdesc LaTeX thesis template for Nanjing University relocated 1 longdesc This is a LaTeX Template for Nanjing University Bachelor longdesc Thesis. -containersize 1424 -containerchecksum abb3d6fd0eccefc36e71476b56abb2616de6910669c8e6a7e82f4f0a6e7971f6d69977838a401b900f5f6c10cb5b65e224cde1382af23e10649793c9fae549dd -doccontainersize 1223256 -doccontainerchecksum 792b91b39a1be2ece0c33cb60920d693e40fe3d6f470c877216d3fa9f285223d1f14fca90f2f60cb4a97c44779fdbebe5288ff174fdef3e5e30c330e80428a6a -docfiles size=585 +containersize 9236 +containerchecksum 8159f93484c7900af5c958feb70d012e22e5eb6bfcc3dcb3ebdb183b54e03f1076e026d7d163905a625a9ab2db6b5298a52118c3a2700b8c19add772826abf06 +doccontainersize 702212 +doccontainerchecksum 486b63b29c88b66d9469cc316863e2dc8097044b59bc4d58e20d7499bdae3800c236263aae2d64186067109300a6a1e36d95122ac9f3d136db16bda7d6e7b4cb +docfiles size=195 RELOC/doc/latex/njuthesis/LICENSE RELOC/doc/latex/njuthesis/README.md details="Readme" + RELOC/doc/latex/njuthesis/README_EN.md + RELOC/doc/latex/njuthesis/README_ZH_CN.md RELOC/doc/latex/njuthesis/figure/njulogo.pdf - RELOC/doc/latex/njuthesis/figure/njuname-large.jpg + RELOC/doc/latex/njuthesis/figure/njuname-large.pdf RELOC/doc/latex/njuthesis/figure/njuname.pdf RELOC/doc/latex/njuthesis/njuthesis.pdf - RELOC/doc/latex/njuthesis/profile/abstract.sty - RELOC/doc/latex/njuthesis/profile/components.sty - RELOC/doc/latex/njuthesis/profile/cover.sty - RELOC/doc/latex/njuthesis/profile/font.sty - RELOC/doc/latex/njuthesis/profile/packages.sty - RELOC/doc/latex/njuthesis/profile/page.sty - RELOC/doc/latex/njuthesis/profile/reference.sty -runfiles size=1 +srccontainersize 19732 +srccontainerchecksum f511fe665aae0d09bbfe19fe57757832a0f912446bdf16558faa96bf70f4dad1d5ac7052cc6fe37302a97d5390343d0ebf080349f45459887552afe702e92585 +srcfiles size=18 + RELOC/source/latex/njuthesis/njuthesis.dtx +runfiles size=9 RELOC/tex/latex/njuthesis/njuthesis.cls catalogue-contact-bugs https://github.com/nju-lug/NJUThesis/issues catalogue-contact-home https://github.com/nju-lug @@ -216310,7 +216339,7 @@ catalogue-contact-repository https://github.com/nju-lug/NJUThesis catalogue-contact-support https://github.com/nju-lug/NJUThesis/wiki catalogue-ctan /macros/unicodetex/latex/njuthesis catalogue-license lppl1.3c -catalogue-topics proposal +catalogue-topics dissertation proposal catalogue-version 0.7.3 name nkarta @@ -286016,7 +286045,7 @@ binfiles arch=x86_64-solaris size=1 name tex4ht category Package -revision 60512 +revision 60530 shortdesc Convert (La)TeX to HTML/XML longdesc A converter from TeX and LaTeX to SGML-based formats such as longdesc (X)HTML, MathML, OpenDocument, and Docbook, providing a @@ -286030,9 +286059,9 @@ longdesc TeX4ht to approach the robustness characteristic of longdesc restricted-syntax systems such as gellmu. depend tex4ht.ARCH containersize 908344 -containerchecksum 3ae208b95769b47f49fb8c94dbe209451831748b78b1a6e92102167bde056ab63496de7ae9c1edf7782b4dfe17d69e49a020da6d011fd5ab45c4d0268b310114 +containerchecksum 6d58986cc1c58c57b542a79ee754eb9878f553b6f26009cfddeae170ab39b6f6f27b20dad5e4636ed2e3552ab258018ca814c59cf21af61a88428a730f6b19c3 doccontainersize 136384 -doccontainerchecksum c5825b3b373dc0d21a9bf6bbf13475017b9654e6de60195de446610b5aba71a446b6fe686434461dfa18946cef6dd1dd17409ec5b3361bf12d00ca7ab1b500df +doccontainerchecksum a98bd6e3bad9b794da321ac518be8c035c2b3d610ab5e38816a6cb99277885bc494a42131058c1a0421d47fdd8b4e1e81c837bf9e7753ffc92f02cc3202fff60 docfiles size=260 texmf-dist/doc/generic/tex4ht/Makefile texmf-dist/doc/generic/tex4ht/README details="Readme" @@ -286104,8 +286133,8 @@ docfiles size=260 texmf-dist/doc/generic/tex4ht/mn56.html texmf-dist/doc/generic/tex4ht/mn5x.png texmf-dist/doc/generic/tex4ht/mn6x.png -srccontainersize 1210048 -srccontainerchecksum 5d5f2e5e8c4a6bf1d81e550ff50767d62d1e2ab67cf3e295a2e666b49e87acd8d2c391075b2dfc834cb0ec596f9e643099845f4f781789ae58aef063b358a405 +srccontainersize 1206112 +srccontainerchecksum 31135058bbda3895d23df0ec5f9867cff607488ee8f1d50939fbf25d82350f9a1753deeb8aa49181c3487e95236e9f007cb3d3f6e590b80c1f65b30de28e9238 srcfiles size=3627 texmf-dist/source/generic/tex4ht/ChangeLog texmf-dist/source/generic/tex4ht/Makefile @@ -295241,7 +295270,7 @@ docfiles size=376 name texlive-scripts category TLCore -revision 60518 +revision 60525 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. @@ -295249,10 +295278,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 108308 -containerchecksum 5aaa330ca74867f626bc80dc4abda753cab1d70ca68ad077c3f0401850a56cf26d3ef71a8e041130577b44eeeee4b1352f3324164ffc62458ba3f0bb30872cb0 +containersize 108296 +containerchecksum c40d26caaf4e39b1ad60c9b81f8913d1e0f2779a45f0a018383be744c81a825aee4058e7df6bd47144769dd5d50a4109b98bd6e1684a008746c8bac1b53c79d6 doccontainersize 400152 -doccontainerchecksum e49c4554962a12f306f27cef76cf604ef5624bcb4892197f940e619576b760bcd84bc59bc4dd1ad22dc84a1149012f1ef12daa808206217b544abdc49a8aa69a +doccontainerchecksum 34658fb3ad78acf5d0fd99bece8a47984596ccef32b42ef889cc067119d631a9f1680447bf1cb1ffb633129a6024598201bec18c3ff183a3c20b7cc70befb56c docfiles size=495 doc.html texmf-dist/doc/man/man1/fmtutil-sys.1 @@ -341984,7 +342013,7 @@ catalogue-version 2.32 name zref-check category Package -revision 60270 +revision 60527 shortdesc Flexible cross-references with contextual checks based on zref relocated 1 longdesc This package provides an user interface for making LaTeX @@ -341998,11 +342027,11 @@ longdesc in a warning at compilation time if any of these checks fail. longdesc \zctarget and the zcregion environment are also defined as a longdesc means to easily set label targets to arbitrary places in the longdesc text which can be referred to by \zcheck. -containersize 5364 -containerchecksum a04b17e090ac7ecb16af57c3cfc5a37a0759818c57b7e34c028d85078bf7e8c8f508449857d9fc1fe78fe149b04815f83b5de1417dd6005513527374d982a983 -doccontainersize 1018292 -doccontainerchecksum 0943a9d608166faa82535efb2b941e8339134738c3362a0aa0bf903a8578ce5333e32db0546d23c34151029d0fab5f9f54e13270faba143cbe4afeaa6ed06509 -docfiles size=291 +containersize 5516 +containerchecksum 7e9e61d5d718f412e866dffae44457dc528cd82b9fd56b10cdfdec03bf4f99524a8f262cb94e03cbc12ed805976772e2503627930a2a635a6e9506cffb2d080e +doccontainersize 1054416 +doccontainerchecksum dc2550245f8112275ce8b238272d1a9ba92ba09e03161e565c6beaf5415f29da064463b74c9b6f3ba378b78990607071217f9e5e066587ad56cb2a44ad61c0ac +docfiles size=298 RELOC/doc/latex/zref-check/CHANGELOG.md RELOC/doc/latex/zref-check/DEPENDS.txt RELOC/doc/latex/zref-check/README.md details="Readme" @@ -342010,8 +342039,8 @@ docfiles size=291 RELOC/doc/latex/zref-check/zref-check-code.tex RELOC/doc/latex/zref-check/zref-check.pdf details="User manual" RELOC/doc/latex/zref-check/zref-check.tex -srccontainersize 19104 -srccontainerchecksum 4233cb1d3f38ea83fef0fee6578f6bf80c58b70739db9414eb2ae9c484fb8519367c46d2a165d04e12e8ced60b00913a400d8bc38caa2dac617accdd5283d299 +srccontainersize 19740 +srccontainerchecksum cd685b6340425a66e0fd6a07d6db57d260f60fe972be190ea8dc36a4114149963d73469c09c0b08531db29bf04370be53916e901b7d81d775719f42824727352 srcfiles size=23 RELOC/source/latex/zref-check/zref-check.dtx RELOC/source/latex/zref-check/zref-check.ins @@ -342022,7 +342051,7 @@ catalogue-contact-repository https://github.com/gusbrs/zref-check catalogue-ctan /macros/latex/contrib/zref-check catalogue-license lppl1.3c catalogue-topics label-ref expl3 -catalogue-version 0.2.0 +catalogue-version 0.2.1 name zwgetfdate category Package diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 index cb12b6f281..b4786e9932 100644 --- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 +++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 @@ -1 +1 @@ -820a38d978b3c47057e9e19d56642a64 texlive.tlpdb +da3dda0a2458301201d88d7e9b91e144 texlive.tlpdb diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 index e2021058d1..92ee4c3021 100644 --- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 +++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 @@ -1 +1 @@ -634a0b2caa5575dd31f3f6c5ab536dccf63f483063ec0ff00697efc8a3d1e182961e7f0788a06a100a917ca7e1c183e3ededbc9f099717e63b55f5404f6786ad texlive.tlpdb +a3b051400119b7f155a400ad6c3c6b8bfe6f795037ca595501c0849868f5d916c99b79287c4321e324bd731a984e914a516f07164920183727e31d73324dff6d texlive.tlpdb diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc index 5089ce1709..d96a492207 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----- -iQEcBAEBCgAGBQJhQ9ifAAoJEEzhh34ZQ4xwutQIAKEA1+0zCBXCNXlsw5PhZ0gE -c7fwkD/apx9nOZZl64uWnOv5S5r3aWJXAhcnN50MJ37I3V9AMQs/jZUYrpwpz3kF -kQnWPaFH5+ZOHgyaMP2cGMSvSUGwNR54LyAC7GDlZrIRHrF5FLTZkSz42VYGYIcb -3RHfr2Il24w+YD2N+83LlhSswhJqZmX9akGsDjmy2LluC43LHyMfsm64tA3Ogi/s -CPUq3qhONaWDLu+l6DAN5vaNyJBm9lLNlo0NqI4p9Wjs5JgOLniv/qUzrZnVbRem -HeXahhZDmX6lnYkaqu6zL7QMtLGQjDLd6OW2pNyE5lPqsBmUBZB4A4yjiDdBWxk= -=FJ1/ +iQEcBAEBCgAGBQJhRSpAAAoJEEzhh34ZQ4xwg30IAIB9NM2ZhfNJ0+BZJA2p9+Gb +7FB/kxQ6UvDb/M1puDBFclMWCFXyxvzub78uH/Af8g9ryOKG2v3DBMuGcYeMGQF4 +MEo9dQ7oPmrwDKVZIfliwj0NjNw9eEhkxPuhtYsc3WwfADAcwab7mROjNmc1zMzq +YCXVZivNPtD6UwQJnAiCPkOXRomsxKDqOx8ZkMoZIEWn9UKg+TgqpUHuQ2g20G01 +vyZNIW2vkEWO3a1tHf0chbw7PbmTJ16sB6f+KfkW+V2J8m+6i2hLikqGBy4/hhgF +I0Tgi4Fzvv8q7rSljF54Hfrhj+T2YhT36Z5SPQhb2hdY7eT/DrLac1Cq+cIApro= +=Zxv5 -----END PGP SIGNATURE----- diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz index 209aa35c2c..4178b43c3c 100644 Binary files a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz and b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz differ diff --git a/systems/win32/miktex/tm/packages/next/pr.ini b/systems/win32/miktex/tm/packages/next/pr.ini index 7e8a98f16a..062cec45ab 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=1631823362 +date=1631909695 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=c3b453f762e3406372c5d90bf35cdd32 +lstdigest=7372693490ea822a01b3f3980e9beec3 numpkg=4790 relstate=next -version=7929 +version=7930 ;;;;This configuration file is signed by a MiKTeX maintainer. The signature follows. ;;;;-----BEGIN MIKTEX SIGNATURE----- -;;;; signature/miktex: coJlEDTriQt70/Fwo7Ztzq8DqRyNLeFpTQ4eOSkTzj1iaYpUSEqWt0GRI9niqjUmrOBZNQSk0xl/FdR71lTm+t2qDP1YXNxzfncQ8WjhmpjQqknCv0cNmBMBICooXmicMUiDN2w1lGMNFSZO+yu7yWiWSXQcB/L5qgo89BlT12+I0CV+3OVHJVLEN5Yk2AMMP6oazdwypgsdwn7jroCps+mOLzGnAJh91hk6I6c3BitLYdGfvwqGOkO/ad6+bBTnOr/pWAMAm/OTjLPnpGK/e4bNML+eZuo8Tq7zqHoJgL5+mBKnwAys1q39dSRYVZYda6C/UDF7g8sneNe7v4ZkSg== +;;;; signature/miktex: l9HNo9B1svlHvEtKnlChcvZ2Fw20wdH2S4bIMqWcTrFiUOWn9Pp3PCfri6VGZpVRctMp9CbG6+5zBMXqlWJsm0/T+B2Jrq9N/ozyGEfzh9F9INLyud6mBdbQgT2rbANDJp5pjPkaGjFa0ASos7JVEKeY0hSABDgZhxIrtBmYSYX081elnmOdc50bxrTYqujiAO/qfEihbQt/f2KOZSq+5/hg7uiD9XHxXalqxqTFvsXI59VuJejBmEUwKb/At02Q/c85eG+Z3mOBj1FWCGnKwOeXjPTOzrOa9/YEv87O1Q/RA6UWuqkjgnDBi6qbezi69x9I7rWuXpyxqeWbEWR/wA== ;;;;-----END MIKTEX SIGNATURE----- diff --git a/systems/win32/miktex/tm/packages/pr.ini b/systems/win32/miktex/tm/packages/pr.ini index 9ed0a6ad7b..10ba9ed9d6 100644 --- a/systems/win32/miktex/tm/packages/pr.ini +++ b/systems/win32/miktex/tm/packages/pr.ini @@ -1,13 +1,13 @@ [repository] -date=1631823082 +date=1631909472 lastupd=beamertheme-trigon beamertheme-trigon__doc beamertheme-trigon__source biblatex-gb7714-2015 biblatex-gb7714-2015__doc biblatex-gb7714-2015__source bithesis bithesis__doc bithesis__source circuitikz circuitikz__doc clicks clicks__doc clicks__source crumbs crumbs__doc crumbs__source csvsimple csvsimple__doc easybook -lstdigest=5b343da344c016eb56c7fc61f9aad699 +lstdigest=34c2321e20352946799f418aa70fbf09 numpkg=4790 relstate=stable -version=7929 +version=7930 ;;;;This configuration file is signed by a MiKTeX maintainer. The signature follows. ;;;;-----BEGIN MIKTEX SIGNATURE----- -;;;; signature/miktex: NUVec6l8uu7adLBppFYyZp/zB4VAOR+6YevtOsyvG2HOJ8QGTlEgUcUSyrY28O2a5vzMRBQftwsvtRofD1H70G2EzGc4qEd6hXiVZn9ZQtTVzDro2YSgZ7tNubuoXCMUEoahneDh3Deq6zT1zeL6JKxbslVi/L2zuuW48/N2sFnBXn1PqhvrHLa35hFvFjur6enwAyYLni8rVsHyy65Aoen06g2BKSMZHqQS178zqhxn0j8+/T+nUeJsVmz36K4aSF1MTPCQmaoJEhuPRoVwkFOFqovqndIZzJ3lJlSUtBpWPHOOwYodnl19/BDfPA5sBhUJJPvD7pyhhI+ueBVPtg== +;;;; signature/miktex: IEhMQzNIxcp3KfoM3a9/pOZMZ68zGZYqvJ35ARv7ZC9VVARyTTJ5vnWk6zAkWnYp3rcpsQDGs36Q0KN3k/dMUHyKomt/EWeTEb+/HWB3hoArNz35rb0NPvOU47PRA6bixldqrO+mUaXV+je6fLIKff0vAB+bmEsQjWE1LckocuK3OIsylLPbuVC/uzcU0aIaE6IPqFaC4UNYvlSFOAnsX/2GBN6GZp+VDrPNoiH+H/lb5DMcSPYMhWPoKm5Sv2v0kbqB0U46de2wJ630u7+3a2dmJ/+8Nok6/vQldu+NVryUjwdulAfFQJ7hQUyrGgto1LKy9Tqmldc1f8UIKIS+Mw== ;;;;-----END MIKTEX SIGNATURE----- diff --git a/timestamp b/timestamp index 7064539d94..82870784a6 100644 --- a/timestamp +++ b/timestamp @@ -2,4 +2,4 @@ # The source CTAN of this site's material: dante.ctan.org # The year-month-day-hour-minute of this site's material: -2021-09-17-02-02 +2021-09-18-02-02 -- cgit v1.2.3