diff options
author | Norbert Preining <norbert@preining.info> | 2021-09-18 03:00:49 +0000 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2021-09-18 03:00:49 +0000 |
commit | fb07ccd098248248795fb851a3a6479ecafaaa47 (patch) | |
tree | e71e612d8d6e10042e2186172639dd7f8228f9c9 | |
parent | aefe346b16163823efeac108a7da42e91e53e5c7 (diff) |
CTAN sync 202109180300
40 files changed, 7948 insertions, 1957 deletions
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 Binary files differindex 46688b2ae4..a07d998147 100644 --- a/FILES.byname.gz +++ b/FILES.byname.gz 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 <tex@2krueger.de> +-- +-- 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<</Predictor 1' * l.R'05' * '/Columns ' * (l.R'09'^1/tonumber) * '>>/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<b) + end, + + add = function() + local b, arg2 = pop_num() + local a = pop_num(arg2) + push(a+b) + end, + sub = function() + local b, arg2 = pop_num() + local a = pop_num(arg2) + push(a-b) + end, + mul = function() + local b, arg2 = pop_num() + local a = pop_num(arg2) + push(a*b) + end, + div = function() + local b, arg2 = pop_num() + local a = pop_num(arg2) + push(a/b) + end, + idiv = function() + local b, arg2 = pop_num() + local a = pop_num(arg2) + push(a//b) + end, + mod = function() + local b, arg2 = pop_num() + local a = pop_num(arg2) + push(a%b) + end, + exp = function() + local b, arg2 = pop_num() + local a = pop_num(arg2) + push(a^b) + end, + sqrt = function() + push(math.sqrt(pop_num())) + end, + sin = function() + local x = pop_num() + local i, f = math.modf(x/90) + if f == 0 then + push(sin_table[i % 4 + 1]) + else + push(math.sin(math.rad(x))) + end + end, + cos = function() + local x = pop_num() + local i, f = math.modf(x/90) + if f == 0 then + push(sin_table[(i+1) % 4 + 1]) + else + push(math.cos(math.rad(x))) + end + end, + atan = function() + local b, arg2 = pop_num() + local a = pop_num(arg2) + local res = math.deg(math.atan(a, b)) + if res < 0 then res = res + 360 end + push(res) + end, + arccos = function() + push(math.deg(math.acos(pop_num()))) + end, + arcsin = function() + push(math.deg(math.asin(pop_num()))) + end, + abs = function() + push(math.abs(pop_num())) + end, + neg = function() + push(-pop_num()) + end, + round = function() + return push(math.floor(pop_num()+.5)) + end, + ceiling = function() + return push(math.ceil(pop_num())) + end, + floor = function() + return push(math.floor(pop_num())) + end, + ln = function() + push(math.log((pop_num()))) + end, + log = function() + push(math.log(pop_num(), 10)) + end, + truncate = function() + push((math.modf(pop_num()))) + end, + cvn = function() + local a, raw = pop() + if type(a) == 'table' and a.kind == 'executable' then + local val = a.value + if type(val) ~= 'table' or val.kind ~= 'string' then + ps_error('typecheck', raw) + end + push(val.value) + end + if type(a) ~= 'table' or a.kind ~= 'string' then + ps_error('typecheck', raw) + end + return push{kind = 'name', value = a.value} + end, + cvi = function() + local a, raw = pop() + if type(a) == 'table' and a.kind == 'executable' then + a = a.value + end + if type(a) == 'table' and a.kind == 'string' then + a = (number * -1):match(a.value) + if not a then + ps_error('syntaxerror', raw) + end + end + if type(a) ~= 'number' then ps_error('typecheck', raw) end + push(a//1) + end, + cvr = function() + local a, raw = pop() + if type(a) == 'table' and a.kind == 'executable' then + a = a.value + end + if type(a) == 'table' and a.kind == 'string' then + a = (number * -1):match(a.value) + if not a then + ps_error('syntaxerror', raw) + end + end + if type(a) ~= 'number' then ps_error('typecheck', raw) end + push(a*1.) + end, + cvs = function() + local old_str, arg2 = pop_string() + local a, arg1 = pop() + a = ps_to_string(a) + if #old_str.value < #a then ps_error('rangecheck', arg1, arg2) end + old_str.value = a .. string.sub(old_str.value, #a+1, -1) + return push{kind = 'string', value = a} + end, + cvrs = function() + local old_str, arg3 = pop_string() + local radix, arg2 = pop_num() + local num, arg1 = pop_num() + if radix == 10 then + num = string.format(math.type(num) == 'float' and '%.6g' or '%i', num) + else + num = num//1 + if num < 0 and num >= -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 '<</SA true>>' or '<</SA false>>']) + 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['<</ca ' .. alpha .. '>>']) + end, + ['.setstrokeconstantalpha'] = function() + local alpha = pop_num() + graphics_stack[#graphics_stack].strokeconstantalpha = alpha + delayed_print(ExtGState['<</CA ' .. alpha .. '>>']) + 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['<</AIS ' .. (ais and 'true' or 'false') .. '>>']) + 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['<</BM /' .. blendmode .. '>>']) + 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 Binary files differindex b412a1c5be..f2af1c0794 100644 --- a/macros/latex/contrib/zref-check/zref-check-code.pdf +++ b/macros/latex/contrib/zref-check/zref-check-code.pdf 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} %</package> % \end{macrocode} diff --git a/macros/latex/contrib/zref-check/zref-check.pdf b/macros/latex/contrib/zref-check/zref-check.pdf Binary files differindex f7b1110802..2197eda816 100644 --- a/macros/latex/contrib/zref-check/zref-check.pdf +++ b/macros/latex/contrib/zref-check/zref-check.pdf 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 Binary files differdeleted file mode 100644 index b69db06921..0000000000 --- a/macros/unicodetex/latex/njuthesis/figure/njuname-large.jpg +++ /dev/null diff --git a/macros/unicodetex/latex/njuthesis/figure/njuname-large.pdf b/macros/unicodetex/latex/njuthesis/figure/njuname-large.pdf Binary files differnew file mode 100644 index 0000000000..f7e71662e5 --- /dev/null +++ b/macros/unicodetex/latex/njuthesis/figure/njuname-large.pdf 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 <nju.lug@yaoge123.cn> +% +% 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 +%</internal> +% +%<*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-zh> +% +%<*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 +%</readme-en> +% +%<*internal> +\fi +\begingroup + \def\NameOfLaTeXe{LaTeX2e} +\expandafter\endgroup\ifx\NameOfLaTeXe\fmtname\else +\csname fi\endcsname +%</internal> +% +%<*install> +\input l3docstrip.tex +\keepsilent +\askforoverwritefalse + +\preamble + +Copyright (C) 2021 +by Nanjing University Linux User Group <nju.lug@yaoge123.cn> + +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}} +%</install> +%<*internal> + \usedir{source/latex/njuthesis} + \file{\jobname.ins} {\from{\jobname.dtx}{install}} +%</internal> +%<*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 +%</install> +% +%<*internal> +\fi +%</internal> +% +%<class>\NeedsTeXFormat{LaTeX2e} +%<class>\RequirePackage{expl3} +%<!(readme-zh|readme-en)> \GetIdInfo $Id: njuthesis.dtx 0.9.2 2021-09-17 22:00:00 +0800 NJU LUG <nju.lug@yaoge123.cn> $ +%<class> {Thesis template for Nanjing University} +%<class>\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} +%</driver> +% \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>||</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 + } +} +%</class> +% \end{macrocode} +% +% +% +% +% \end{implementation} +% +% \PrintIndex diff --git a/macros/unicodetex/latex/njuthesis/njuthesis.pdf b/macros/unicodetex/latex/njuthesis/njuthesis.pdf Binary files differindex 11b1922dea..a254258dd5 100644 --- a/macros/unicodetex/latex/njuthesis/njuthesis.pdf +++ b/macros/unicodetex/latex/njuthesis/njuthesis.pdf 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 <michal.h21@gmail.com> + + * 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 <michal.h21@gmail.com> * 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{<div class="lstlisting" id="listing-\listingN">}% \gdef\start:LstLn{|<nbsp|>\HCode{<br />\Hnewline}}} - \bgroup + \bgroup% + % we put the closing </div> here in order to support floating listings + % https://tex.stackexchange.com/a/615703/2891 + \pend:def\lst@DeInit{\ifvmode\IgnorePar\fi\EndP\HCode{</div>}}% \Configure{listings} {{\everypar{}\leavevmode}} {{\everypar{}\leavevmode}} {\start:LstLn \HCode{<span class="label">}} {\HCode{</span>}}% } - {\egroup - \ifvmode \IgnorePar\fi \EndP \HCode{</div>}\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{<!--l. \the\inputlineno lstlisting-->}% - \HCode{<text:p\Hnewline text:style-name="Preformatted-Text">}% - \bgroup \special{t4ht@(}% + % \HCode{}% + \bgroup % + \gdef\start:LstLn{% + \ifvmode\IgnorePar\fi\EndP\HCode{<text:p\Hnewline text:style-name="Preformatted-Text">}% + \ht:special{t4ht@(}\ttfamily% + \gdef\start:LstLn{\HCode{<text:s/><text:line-break/>}}} + \pend:def\lst@DeInit{\ifvmode\IgnorePar\fi\EndP\HCode{</text:p>}}% \Configure{listings} {{\everypar{}\leavevmode}} {{\everypar{}\leavevmode}} - {\HCode{<text:s/><text:line-break/>}}{}% + {\start:LstLn}{}% } - {\special{t4ht@)}\egroup - \ifvmode \IgnorePar\fi \EndP \HCode{</text:p>}\par} + {\ht:special{t4ht@)}\egroup + % \ifvmode \IgnorePar\fi \EndP \HCode{</text:p>}\par} + \par} {} {} >>> @@ -10462,16 +10468,20 @@ Y{0178}\i{00EF}% \Configure{lstinputlisting} {\ifvmode \IgnorePar\fi \EndP \HCode{<!--l. \the\inputlineno lstinputlisting-->}% - \HCode{<text:p\Hnewline text:style-name="Preformatted-Text">}% - \bgroup \tt \special{t4ht@(}% + % \HCode{<text:p\Hnewline text:style-name="Preformatted-Text">}% + \bgroup% + \gdef\start:LstLn{% + \ifvmode\IgnorePar\fi\EndP\HCode{<text:p\Hnewline text:style-name="Preformatted-Text">}% + \ht:special{t4ht@(}\ttfamily% + \gdef\start:LstLn{\HCode{<text:s/><text:line-break/>}}} + \pend:def\lst@DeInit{\ifvmode\IgnorePar\fi\EndP\HCode{</text:p>}}% \Configure{listings} {{\everypar{}\leavevmode}} {{\everypar{}\leavevmode}} - {\HCode{<text:s/><text:line-break/>}} + {\start:LstLn} {\HCode{<text:line-break/>}}% } - {\special{t4ht@)}\egroup - \ifvmode \IgnorePar\fi \EndP \HCode{</text:p>}\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 <latex2nemeth.jar> <tex-file> <aux-file> + java -jar latex2nemeth.jar <tex-file> <aux-file> -**Options** +Options +------- +Option Description +-------------------------------------------------------------------------------- +-e, --encoding <arg> The encoding table for Braille Mathematical symbols in the form of + a JSON file. If not specified, default Nemeth table is used. + +-m,--mode <arg> 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 <arg> | The encoding table for Braille Mathematical symbols in the form of a JSON file. If not specified, default Nemeth table is used. | -| -m,--mode <arg> | 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 <arg> | 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 <arg> 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/examples/nemeth.json b/support/latex2nemeth/encodings/nemeth.json index 6c395dedd4..75be79b10c 100644 --- a/support/latex2nemeth/examples/nemeth.json +++ b/support/latex2nemeth/encodings/nemeth.json @@ -1,5 +1,7 @@ { "letters": { + "\\&":"та╕тап", + "\\$": "таИтаО", ".": "\u2832", ",": "\u2802", ";": "\u2822", @@ -13,6 +15,7 @@ "\\}": "\u2828\u283e", "\\{": "\u2828\u2837", "\\_": "\u2824\u2824", + "\\%": "\u2808\u2834", ":": "\u2806", "?": "\u2838\u2826", "!": "\u2816", @@ -23,9 +26,29 @@ "-": "\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", - "\\&": "\u282f", - "\\ ": " ", + "\\ ": " ", "\\,": "\u2802", "--": "\u2824\u2824", "---": "\u2824\u2824\u2824", @@ -34,6 +57,7 @@ " ": " ", "\\quad": " ", "\\qquad": " ", + "\"": "\u2834\u2804", "#": "\u283c", "0": "\u2834", "1": "\u2802", @@ -210,7 +234,538 @@ "\\textbf-close": "\u2838\u2820\u2804", "\\textit": "\u2828", "\\textit-open": "\u2820\u2804\u2838", - "\\textit-close": "\u2838\u2820\u2804" + "\\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", @@ -438,33 +993,21 @@ "\\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", + "`": "\u2820\u2826", + "'": "\u2834\u2804", "\\leftquote": "\u2820\u2826", "\\rq": "\u2834\u2804", "\\rightquote": "\u2834\u2804", - "\\texttrademark": "\u2818\u2820\u281e\u2820\u280d", - "\\textasciicircum": "\u2838\u2823", + "\"": "\u2834\u2804", "\\&": "\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", @@ -508,11 +1051,11 @@ "\\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", + "\\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", @@ -536,7 +1079,6 @@ "\\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", @@ -590,7 +1132,7 @@ "\\varsigma": "\u2828\u2808\u280e", "\\varphi": "\u2828\u2808\u280b", "\\Theta": "\u2828\u2820\u2839", - "\\Sigma ": "\u2828\u2820\u280e", + "\\Sigma" : "\u2828\u2820\u280e", "\\Omega": "\u2828\u2820\u283a", "\\delta": "\u2828\u2819", "\\eta": "\u2828\u2831", @@ -606,11 +1148,8 @@ "\\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", + "\\Sampi": "\u2828\u2820\u2809", "\\Qoppa": "\u2828\u2820\u281f", "\\pm": "\u282c\u2824", "\\mp": "\u2824\u282c", @@ -637,6 +1176,7 @@ "\\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", @@ -764,7 +1304,7 @@ "\\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", + "\\circeq": "\u2810\u2828\u2805\u2823\u2828\u2821\u283b", "\\thickapprox": "\u2838\u2808\u2831\u2838\u2808\u2831", "\\succsim": "\u2828\u2828\u2802\u2808\u2831", "\\shortparallel": "\u282b\u2807", @@ -797,7 +1337,7 @@ "\\geqslant": "\u2828\u2802\u2831", "\\gtrapprox": "\u2828\u2802\u2808\u2831\u2808\u2831", "\\gtrless": "\u2828\u2802\u2810\u2805", - "\\eqcirc ": "\u2828\u2821\u2808\u2828\u2805\u283b", + "\\eqcirc": "\u2828\u2821\u2808\u2828\u2805\u283b", "\\thicksim": "\u2838\u2808\u2831", "\\Supset": "\u2838\u2828\u2802\u2838\u282b\u2838\u2828\u2802\u283b", "\\shortmid": "\u2833", @@ -811,13 +1351,13 @@ "\\subsetneq": "\u2838\u2810\u2805\u280c\u2831", "\\varsubsetneqq": "\u2838\u2810\u2805\u280c\u2828\u2805", "\\ngeqslant": "\u280c\u2828\u2802\u2831", - "\\gneqq ": "\u2828\u2802\u280c\u2828\u2805", + "\\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", + "\\varsupsetneq": "\u2838\u2828\u2802\u280c\u2831", "\\nleq": "\u280c\u2810\u2805\u2831", "\\lneq": "\u2810\u2805\u280c\u2831", "\\lnsim": "\u2810\u2805\u280c\u2808\u2831", @@ -902,11 +1442,11 @@ "\\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", + "\\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", @@ -955,7 +1495,7 @@ "\\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", + "\\dashrightarrow": "талтаТ таТтаХ", "\\ntwoheadrightarrow": "\u280c\u282b\u2812\u2812\u2815\u2815", "\\Searrow": "\u282b\u2830\u2836\u2836\u2815", "\\Perp": "\u282b\u2829\u2836\u2836\u2833", @@ -967,7 +1507,7 @@ "\\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", + "\\dashleftrightarrow": "талтактаТ таТтаХ", "\\ntwoheadleftarrow": "\u280c\u282b\u282a\u282a\u2812\u2812", "\\Nwarrow": "\u282b\u2818\u282a\u2836\u2836", "\\leadstoext": "\u2808\u2831", @@ -1079,6 +1619,8 @@ "\\overline-end": "\u2823\u2831", "\\underline-begin": "\u2810", "\\underline-end": "\u2829\u2831", + "\\dot-begin": "таР", + "\\dot-end": "таб", "?": "\u2838\u2826", "'": "\u2804", "{": "", @@ -1095,6 +1637,8 @@ "\\under": "\u2829", "\\leqno": " ", "\\hat": "\u2823\u2838\u2823", + "\\vec-begin": "\u2810", + "\\vec-end": "\u2823\u282b\u2815\u283b", "\\%": "\u2808\u2834", "\\bar": "\u2831", "\\stackrel-begin": "\u2810", @@ -1124,6 +1668,7 @@ "\\sqsupseteq": "таИта╕таитаВта▒", "\\bowtie": "талта╕таИтабтаЗта╗", "\\Join": "талта╕таИтабтаЗта╗", + "\\lrJoin": "талта╕таИтабтаЗта╗", "\\risingdotseq": "", "\\backsimeq": "таИтаИта▒та▒", "\\tianglelefteq": "талтаРтаЕтаЗта▒та╗", @@ -1170,12 +1715,25 @@ "\\rJoin": "талтаИтабтаЗта╗", "\\npreccurlyeq": "таМталтаитаРтаЕта▒та╗", "\\nbacksim": "таМтаИтаИта▒", - "\\textvisiblespace": "та┐", "\\imath": "талтаКта╗", "\\jmath": "талтаЪта╗", "\\check": "\u2823\u2808\u2838\u2823", "\\acute": "\u2823\u2804", - "\\grave": "\u2831" + "\\grave": "\u2831", + "\\sphericalangle": "талтакта╕талталтаБта╗", + "\\Theta": "таитаата╣", + "\\Sigma": "таитаатаО", + "\\Omega": "таитаата║", + "\\breve": "та╕тай", + "\\ddot": "тагтабтабта╗", + "\\mathring":"таитаб", + "\\circeq": "таРтаитаЕтагтаитабта╗", + "\\copyright": "талтаЙта╕талтаатаЙта╗", + "\\eqcirc": "таитабтаИтаитаЕта╗", + "\\gneqq": "таРтаитаЕтагтаитабта╗", + "\\trianglelefteq": "талтаРтаЕтаЗта▒та╗", + "\\VDash": "талта│та│таТтаТ", + "\\multimapdotbothAvert": "талтагтабтаТтаТтаитаб" }, "theoremSymbols": { ".": "\u2828", @@ -1201,4 +1759,4 @@ "#8": "\u283c\u2826", "#9": "\u283c\u2814" } -}
\ No newline at end of file +} 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/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 Binary files differindex 209aa35c2c..4178b43c3c 100644 --- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz +++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz 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-----
@@ -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 |